From 21eea523d598dec2da42e925a63aec92fbb40597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 30 May 2026 19:11:36 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=20=D0=B2=D1=81=D0=B5=D0=B9=20=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B2=20ipw?= =?UTF-8?q?hitelist-app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- STATE.md | 204 - WhiteIPlist.docx | Bin 27316 -> 0 bytes docs/WhiteIPlist.txt | 156 - docs/[DEPRECATED]-analysis-2026-05-30.md | 112 - docs/[DEPRECATED]-auth-architecture.md | 95 - docs/[DEPRECATED]-plan-actual.md | 131 - docs/[DEPRECATED]-plan-gemini.md | 55 - docs/[DEPRECATED]-plan-gpt54.md | 552 - docs/[DEPRECATED]-plan-v2.md | 188 - docs/[DEPRECATED]-plan-working.md | 103 - docs/[DEPRECATED]-plan.md | 107 - docs/architecture.md | 169 - docs/nubes-design-system.md | 112 - docs/plan.md | 96 - docs/questions.md | 70 - h.h | 320 - nubes_login.har | 31257 ---------------- research/README.md | 5 - research/REVIEW-SUMMARY.md | 134 - research/auth-flow.md | 82 - research/nubes_login.har | 31257 ---------------- research/opus-review-ejs.md | 97 - research/opus-review-queries.md | 133 - research/opus-review-schema.md | 141 - research/opus-review-server.md | 97 - research/opus-review-validators.md | 67 - research/prompt-opus-auth.md | 49 - research/prompt-opus-ejs.md | 245 - .../prompt-opus-full-review-2026-05-30.md | 1445 - research/prompt-opus-queries.md | 168 - research/prompt-opus-schema.md | 59 - research/prompt-opus-server.md | 124 - research/prompt-opus-validators.md | 107 - 33 files changed, 67937 deletions(-) delete mode 100644 STATE.md delete mode 100755 WhiteIPlist.docx delete mode 100644 docs/WhiteIPlist.txt delete mode 100644 docs/[DEPRECATED]-analysis-2026-05-30.md delete mode 100644 docs/[DEPRECATED]-auth-architecture.md delete mode 100644 docs/[DEPRECATED]-plan-actual.md delete mode 100644 docs/[DEPRECATED]-plan-gemini.md delete mode 100644 docs/[DEPRECATED]-plan-gpt54.md delete mode 100644 docs/[DEPRECATED]-plan-v2.md delete mode 100644 docs/[DEPRECATED]-plan-working.md delete mode 100644 docs/[DEPRECATED]-plan.md delete mode 100644 docs/architecture.md delete mode 100644 docs/nubes-design-system.md delete mode 100644 docs/plan.md delete mode 100644 docs/questions.md delete mode 100644 h.h delete mode 100755 nubes_login.har delete mode 100644 research/README.md delete mode 100644 research/REVIEW-SUMMARY.md delete mode 100644 research/auth-flow.md delete mode 100755 research/nubes_login.har delete mode 100644 research/opus-review-ejs.md delete mode 100644 research/opus-review-queries.md delete mode 100644 research/opus-review-schema.md delete mode 100644 research/opus-review-server.md delete mode 100644 research/opus-review-validators.md delete mode 100644 research/prompt-opus-auth.md delete mode 100644 research/prompt-opus-ejs.md delete mode 100644 research/prompt-opus-full-review-2026-05-30.md delete mode 100644 research/prompt-opus-queries.md delete mode 100644 research/prompt-opus-schema.md delete mode 100644 research/prompt-opus-server.md delete mode 100644 research/prompt-opus-validators.md diff --git a/STATE.md b/STATE.md deleted file mode 100644 index f47486f..0000000 --- a/STATE.md +++ /dev/null @@ -1,204 +0,0 @@ -# Состояние проекта на 2026-05-30 14:43 (ветка `sonnet`) - -## Репозитории - -| Репо | URL | Ветка | Локальный путь | -|---|---|---|---| -| Код приложения | `https://gitea.services.ngcloud.ru/Nail/ipwhitelist-app.git` | **sonnet** | `/home/naeel/ipwhitelist-app` | -| Документация | `https://gitea.services.ngcloud.ru/Nail/IPWhiteList.git` | main | `/home/naeel/IPWhiteList` | - -## Стек - -Node.js + Express + EJS + PostgreSQL + pg pool + jsonwebtoken - -## Деплой - -- URL: `https://white.nodejsk8s.dev.nubes.ru` -- DEV_MODE=true (мок-аутентификация) -- ⚠️ Нужен передеплой Nubes для ветки sonnet - -## БД - -- `write.bde8229b-1381-4330-b24b-727ad73fcb44.dev.nubes.ru` -- user: `super`, db: `ipwhitelist` -- Миграция от 2026-05-30 применена (CHECK, UNIQUE, индексы) - ---- - -## Что сделано в ветке `sonnet` (4 коммита поверх master) - -### 1. `src/validators.js` — CIDR агрегация -- `aggregateCIDRs(cidrs)` — суммаризация: merge пересекающихся + смежных диапазонов → минимальный набор CIDR -- Вспомогательные: `numToIP(n)`, `rangeToCIDRs(start, end)` -- Экспортируется и используется в `/export` - -### 2. `src/auth.js` — admin-роль -- `ADMIN_CLIENT_ID` = `process.env.ADMIN_CLIENT_ID || 'WZ01112'` -- `req.user.isAdmin` — определяется по `clientId === ADMIN_CLIENT_ID` -- `DEV_ADMIN=true` в `.env` → admin-права в dev-режиме -- `requireAdmin` middleware — 403 для не-admin - -### 3. `src/queries.js` — новые функции -- `getCompanyById(id)` — компания по числовому PK -- `getAllCompanies()` — все компании + `active_count` (LEFT JOIN) -- `setLimit(companyId, newLimit)` — установить/сбросить (null) индивидуальный лимит -- `getAudit()` — обновлён: JOIN с companies (поля `company_name`, `client_id`) - -### 4. `server.js` — новые роуты -- `/export` — публичный (до auth.middleware), возвращает агрегированный список всех компаний -- `GET /` — admin: видит все компании с переключателем `?company=X` -- `POST /edit/:id` — редактирование записи (admin + user) -- `GET /audit` — журнал аудита (только admin) -- `GET /admin` — управление лимитами (только admin) -- `POST /admin/limit/:companyId` — изменить/сбросить лимит компании -- `backUrl()` — хелпер для редиректа обратно с учётом контекста admin/user - -### 5. `views/index.ejs` -- Admin-панель выбора компании (dropdown + быстрые ссылки на Аудит/Лимиты) -- Кнопки Аудит/Лимиты/Выйти в header для admin -- Кнопка "Изменить" в таблице (открывает edit modal) -- Edit modal — overlay с формой, закрывается по Escape/backdrop -- Скрытый `company_id` в формах add/delete для корректной admin-ветки - -### 6. `views/audit.ejs` — **новый** -- Таблица журнала аудита с фильтром по компании -- Цветные badges (CREATE/UPDATE/DELETE) -- old_value → new_value стрелочкой - -### 7. `views/admin.ejs` — **новый** -- Таблица всех компаний: client_id, active_count, лимит -- Прогресс-бар использования (зелёный/янтарный/красный) -- Форма изменения лимита с подтверждением; кнопка ↺ сброс на дефолт - ---- - -## Не сделано (production-hardening, не баги) - -- helmet (X-Frame-Options, CSP, HSTS) -- rate-limit на POST /add, /delete, /export -- CSRF-токены в формах -- JWT-верификация через внешний JWKS (нужен URL от девопсов) -- Multi-company (нужен формат claims от платформы — массив clientId?) - -## Мёртвый код (не критично) - -- `isSubnetOf()` в validators.js — определена, не используется, не экспортируется - -## Для прода - -Выставить в `.env`: -``` -NODE_ENV=production -JWKS_URL= -ADMIN_CLIENT_ID= -DEFAULT_LIMIT=15 -``` - - -## Репозитории - -| Репо | URL | Ветка | Локальный путь | -|---|---|---|---| -| Код приложения | `https://gitea.services.ngcloud.ru/Nail/ipwhitelist-app.git` | master | `/home/naeel/ipwhitelist-app` | -| Документация | `https://gitea.services.ngcloud.ru/Nail/IPWhiteList.git` | main | `/home/naeel/IPWhiteList` | - -## Стек - -Node.js + Express + EJS + PostgreSQL + pg pool + jsonwebtoken - -## Деплой - -- URL: `https://white.nodejsk8s.dev.nubes.ru` -- DEV_MODE=true (мок-аутентификация) -- ⚠️ Код запушен, но Nubes не передеплоил — крутится старая версия - -## БД - -- `write.bde8229b-1381-4330-b24b-727ad73fcb44.dev.nubes.ru` -- user: `super`, db: `ipwhitelist` -- Миграция от 2026-05-30 применена (CHECK, UNIQUE, индексы) - ---- - -## Что сделано (запушено) - -### 1. `src/validators.js` — исправлены 3 бага -- Запрещённые диапазоны: `isSubnetOf` → `overlaps` (обход через суперсеть `/22`) -- Маска: `parseInt('24abc')` глотал мусор → строгая проверка `/^\d{1,2}$/` -- Множественные слэши: `10.0.0.0/24/8` теперь отклоняется - -### 2. `src/queries.js` — транзакции + гонки -- `createEntry`, `updateEntry`, `deleteEntry` — внутри транзакции с `SELECT ... FOR UPDATE` -- `getOrCreateCompany` — атомарный `INSERT ... ON CONFLICT` -- `getLimit` — `!= null` вместо `||` (custom_limit=0 не игнорируется) -- `logAudit` — принимает клиента транзакции (пишется атомарно) -- `getExportCIDRs` — фильтр по `companyId` -- `deleteEntry` — `company_id` в WHERE - -### 3. `src/auth.js` — **новый.** Мок JWT-аутентификация -- Генерирует RSA-ключи при старте -- JWKS endpoint: `/.well-known/jwks.json` -- `verifyJWT(token)` — RS256, issuer: `mock-auth-api` -- `issueJWT(claims)` — выпускает токен с claims как в HAR (`ClientID`, `company_id`, `company_name`, `email`) -- Middleware: извлекает JWT из cookie (`jwt`) или `Authorization: Bearer` -- DEV_MODE: при `DEV_MODE=true && NODE_ENV!=production` — обход auth -- **Для прода:** выставить `JWKS_URL=https://auth-api.../jwks` → switches to external verification - -### 4. `views/login.ejs` — **новый.** Мок-страница входа -- Выбор из 3 пользователей (admin WZ01112, тест WZ01325, компания 2 WZ02001) -- В проде заменяется на редирект в Keycloak - -### 5. `server.js` -- `cookie-parser` для чтения JWT из cookie -- `/healthz` — выше auth (k8s probe) -- `/login` GET/POST — мок-логин -- `/logout` — чистит cookie -- `/export` — только для своей компании (с авторизацией) -- `req.query.error` читается -- `urlencoded({ limit: '32kb' })` - -### 6. `sql/schema.sql` -- UNIQUE INDEX на активный `(company_id, value_cidr)` WHERE deleted_at IS NULL -- CHECK на `value_cidr` формат -- CHECK на `audit_log.action IN ('CREATE','UPDATE','DELETE')` -- CHECK на `custom_limit IS NULL OR >= 0` -- FK: `ON DELETE RESTRICT` -- Составной индекс `(company_id, created_at DESC)` на audit_log -- Индекс `(company_id, created_at DESC)` на whitelist_entries - -### 7. `views/index.ejs` -- `pattern` + `maxlength="18"` + `title` на инпуте value - ---- - -## Ревью (`/home/naeel/IPWhiteList/research/`) - -| Файл | Что | -|---|---| -| `REVIEW-SUMMARY.md` | Сводка всех находок (11 критических, 21 средний) | -| `opus-review-validators.md` | 1 критичный + 2 средних | -| `opus-review-queries.md` | 3 гонки + audit + getLimit | -| `opus-review-server.md` | JWT без подписи, 401, CSRF, /export | -| `opus-review-schema.md` | UNIQUE, CIDR, FK, индексы | -| `opus-review-ejs.md` | CSRF, clickjacking, client-валидация | -| `auth-flow.md` | Анализ HAR: claims, цепочка auth-api | - ---- - -## Не сделано (production-hardening, не баги) - -- helmet (X-Frame-Options, CSP, HSTS) -- rate-limit на POST /add, /delete, /export -- CSRF-токены в формах -- JWT-верификация через внешний JWKS (нужен URL от девопсов) -- Admin-признак в токене (нужен пример токена админа) -- Multi-company (нужен формат claims от платформы) - -## Для прода - -Выставить в `.env`: -``` -NODE_ENV=production -JWKS_URL= -``` -Всё остальное работает без изменений. diff --git a/WhiteIPlist.docx b/WhiteIPlist.docx deleted file mode 100755 index 12e8fc6b34d57f750795e575ecc338b2c1455c97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27316 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 w8w~)68v+3Tt*7%C{?G5ypYVR;Kj6Q` → извлечение `clientId` и `email`. -Схема описана в `docs/auth-architecture.md`. -**Риск:** без этого нельзя открывать сервис для реальных пользователей — любой запрос видит и меняет все данные. - -### 2. Изоляция данных по компании -**Сейчас:** Все роуты используют один захардкоженный `clientId`. БД правильная (таблица `companies` есть), но `WHERE company_id = $1` не работает по-настоящему без JWT. -**Нужно:** После JWT — всё заработает автоматически, код менять не придётся. - -### 3. CSRF-защита на POST-формах -**Сейчас:** Формы без CSRF-токена. -**Нужно:** `csurf` middleware или `SameSite=Strict` на session cookie. -Или, если фронт перейдёт на fetch/JSON API — Authorization header автоматически решает проблему. - ---- - -## Замечания и предложения - -### Архитектура - -- `server.js` содержит все роуты в одном файле (101 строка). Пока норм, но при добавлении админки/API станет неудобно. Рекомендую разбить на `routes/user.js`, `routes/admin.js`, `routes/api.js` перед тем как добавлять функциональность. - -- `queries.js` возвращает сырые строки, не объекты с явным типом. Если сервис будет расти — стоит обернуть в Result-паттерн `{ ok, data, error }`. - -### UI - -- Нет пагинации. При лимите 15 записей на компанию — не критично. Если лимит поднимут до 100+ — нужна. -- Нет поиска/фильтрации в таблице. -- Алерты исчезают только при перезагрузке страницы (flash-сообщения). Если добавить JS — можно auto-dismiss через 5 секунд. - -### Экспорт - -- Сейчас `GET /export` отдаёт все CIDR без суммаризации. Если у компании 10 записей типа `1.2.3.0/28` и `1.2.3.16/28` — они будут двумя строками. Суммаризация в `/28` + `/28` → `/27` сократила бы файл и упростила настройку оборудования. Это отдельная задача, потребует библиотеку CIDR-merge. - -### Тесты - -- Тесты ручные (curl в md-файле). Для CI/CD нужен автоматический прогон: `jest` или `supertest`. Команда для инициализации: `npm install --save-dev jest supertest`. - -### БД - -- `audit_log` пишется, но нигде не отображается пользователю. Для полноты — стоит добавить вкладку "История" или endpoint `GET /audit`. -- Нет индекса на `whitelist_entries(company_id)` — при росте данных будет полный скан. Добавить в `schema.sql`: - ```sql - CREATE INDEX idx_whitelist_company ON whitelist_entries(company_id); - CREATE INDEX idx_audit_company ON audit_log(company_id); - ``` - -### Безопасность - -- `.env` в `.gitignore` ✅ — правильно. -- `secrets.txt` в корне репо — нужно убедиться что он тоже в `.gitignore`. -- Параметризованные запросы в `queries.js` ✅ — SQL-инъекции закрыты. -- `express-validator` не подключён — валидация только на уровне `validators.js`. Нормально, т.к. все входные данные проходят через него. - ---- - -## Приоритеты следующих задач - -1. **JWT** — без этого продакшен не открыть -2. **CSRF** — параллельно с JWT -3. **Индексы БД** — 2 строки в schema.sql, риск нулевой -4. **Разбивка роутов** — перед добавлением админки -5. **Автотесты** — перед CI/CD -6. **Суммаризация CIDR** — nice to have -7. **Пагинация + фильтр** — после поднятия лимита -8. **Audit UI** — опционально - ---- - -## Текущий стек - -- Node.js + Express.js -- PostgreSQL (pg pool) -- EJS templates -- Платформа: Nubes NodeJS instance "white" -- URL: `https://white.nodejsk8s.dev.nubes.ru` -- Repo (код): `gitea.services.ngcloud.ru/Nail/ipwhitelist-app.git` -- Repo (docs): `gitea.services.ngcloud.ru/Nail/IPWhiteList.git` diff --git a/docs/[DEPRECATED]-auth-architecture.md b/docs/[DEPRECATED]-auth-architecture.md deleted file mode 100644 index 31b8777..0000000 --- a/docs/[DEPRECATED]-auth-architecture.md +++ /dev/null @@ -1,95 +0,0 @@ -# Архитектура авторизации облачного портала - -> ✅ ПРОВЕРЕНО: API успешно вызван через curl 2026-05-29. - ---- - -## Схема аутентификации - -``` -Пользователь (браузер) - │ - ▼ -Keycloak (keycloak.nubes.ru, realm=cloud) - │ Authorization Code Flow - │ client_id=deck.ngcloud.ru - │ scope=openid email - ▼ -auth-api.ngcloud.ru (СОБСТВЕННЫЙ сервис) - │ Создаёт свой JWT (issuer="auth-api") - │ Подпись: RS256 (RSA) - ▼ -deck.ngcloud.ru (портал) - │ Микро-фронтенды (SPA): dashboard, contracts, services, ... - │ JWT хранится в localStorage: authApiTokens.access_token - ▼ -IPWhiteList (наш сервис) ← будет встроен как микро-фронтенд в портал -``` - -## Важное - -- JWT подписывает **не Keycloak**, а **auth-api** -- Issuer: `"auth-api"`, алгоритм: `RS256` -- Для валидации нужен публичный ключ auth-api (JWKS или статический) - ---- - -## Структура JWT (access_token) - -_Из localStorage → authApiTokens → access_token_ - -| Поле | Тип | Значение (пример) | Назначение | -|---|---|---|---| -| `iss` | string | `"auth-api"` | Кто выпустил токен | -| `sub` | string | `"0199e325-..."` | UUID пользователя | -| `iat` | number | `1780073927` | Выпущен (Unix time) | -| `exp` | number | `1780117127` | Истекает (~12 часов) | -| `jti` | string | `"4d8d7240-..."` | Уникальный ID токена | -| `ClientID` | string | `"WZ01325"` | ID **ТЕКУЩЕЙ** компании пользователя | -| `company_id` | string (UUID) | `"3e64aac6-..."` | UUID компании | -| `company_name` | string | `"Тест"` | Название компании | -| `email` | string | `"tazet@narod.ru"` | Email (для аудита) | -| `login` | string | `"tazet@narod.ru"` | Логин | -| `firstname` | string | `"Наиль"` | Имя | -| `lastname` | string | `"Тазетдинов"` | Фамилия | -| `token_type` | string | `"access"` | Тип токена | - -## Что НЕ в JWT (отдельный authData в localStorage) - -_Из localStorage → authData → v_ - -| Поле | Значение | Где используется | -|---|---|---| -| `userInfo.isAdmin` | `false` (boolean) | ⚠️ Признак администратора | -| `profiles[]` | Массив `{company_id, company_name, is_active_profile}` | Список всех компаний пользователя | -| `roles[]` | Массив `{role_id, role_name}` | Роли пользователя | -| `permissions.can_write` | `false` | Есть ли права на запись | - ---- - -## Открытые вопросы (нужно уточнить с командой портала) - -1. **Валидация JWT.** ✅ Выяснено: API gateway (`lk-api-gateway.ngcloud.ru`) сам валидирует JWT через auth-api. Нам достаточно передавать `Authorization: Bearer `. - -2. **isAdmin.** Флаг админа есть только в authData localStorage, но не в JWT. Как наш сервис узнает что пользователь — админ? - - Нужно уточнить: можно ли добавить `isAdmin` в JWT или получать через API gateway - -3. **Список компаний.** В JWT — только одна компания. В authData.profiles — массив. Для переключателя компаний — откуда брать список? - -4. **Монтирование в API gateway.** Наш сервис будет за `lk-api-gateway.ngcloud.ru` как отдельный route (например `/api/v1/whitelist/...`). Нужно уточнить процедуру добавления нового route. - ---- - -## Как вызывать API (проверено curl'ом) - -```bash -curl -H "Authorization: Bearer " \ - -H "Origin: https://deck.ngcloud.ru" \ - -H "Cookie: __ddg1_=...; __ddg8_=...; __ddg9_=...; __ddg10_=..." \ - "https://lk-api-gateway.ngcloud.ru/api/v1/..." -``` - -- **API Gateway:** `lk-api-gateway.ngcloud.ru` (не deck-api.ngcloud.ru!) -- **DDOS-Guard cookies ОБЯЗАТЕЛЬНЫ** (без них 403) -- **JWT issuer:** `auth-api` -- **Алгоритм:** RS256 diff --git a/docs/[DEPRECATED]-plan-actual.md b/docs/[DEPRECATED]-plan-actual.md deleted file mode 100644 index 42444fb..0000000 --- a/docs/[DEPRECATED]-plan-actual.md +++ /dev/null @@ -1,131 +0,0 @@ -# План разработки IP WhiteList — актуальный (30.05.2026) - -> Основан на ТЗ (`WhiteIPlist.txt`) и реальном состоянии кода. -> Все предыдущие планы (plan.md, plan-v2.md, plan-working.md, plan-gemini.md, plan-gpt54.md) устарели. - ---- - -## Что уже работает (не трогать) - -| Компонент | Файл | Состояние | -|---|---|---| -| Валидатор IPv4/CIDR | `src/validators.js` | ✅ Полный — все 14 диапазонов Приложения А | -| CRUD функции | `src/queries.js` | ✅ `createEntry`, `updateEntry`, `deleteEntry`, `listEntries`, `getExportCIDRs`, `getAudit` | -| Soft delete | `src/queries.js` + `sql/schema.sql` | ✅ `deleted_at`, `deleted_by` | -| Схема БД | `sql/schema.sql` | ✅ Все таблицы и индексы | -| Аудит-лог запись | `src/queries.js` | ✅ Пишется при CREATE/UPDATE/DELETE | -| UI главная страница | `views/index.ejs` | ✅ Стиль Nubes | -| Экспорт txt | `server.js GET /export` | ✅ Работает (без суммаризации) | -| Лимит + custom_limit | `src/queries.js` | ✅ | - ---- - -## Что есть в queries.js, но не подключено к роутам - -- `updateEntry` — написана, роута `POST /update/:id` нет, UI-кнопки нет -- `getAudit` — написана, роута и страницы нет -- `listEntries(companyId, includeDeleted=true)` — параметр есть, но нигде не вызывается с `true` - ---- - -## Что отсутствует полностью - -### A. Роуты (server.js) -- `POST /update/:id` — редактирование записи -- `GET /admin` — страница администратора -- `POST /admin/limit/:companyId` — изменение лимита компании -- `GET /admin/audit` — журнал аудита (только для admin) - -### B. UI (views/) -- Кнопка и inline-форма редактирования в таблице -- Страница admin (`views/admin.ejs`): - - Список всех компаний - - Записи с фильтром по компании - - Переключатель "показать удалённые" - - Журнал аудита - - Изменение лимита компании - -### C. Авторизация -- Текущий код: наивный base64 decode JWT — не проверяет подпись, не Keycloak -- Нужно: `openid-client` (OIDC), интеграция с Keycloak, проверка `clientID` и `email` из claims -- Admin-роль: `clientId === 'WZ01112'` — определяется из claim - -### D. Суммаризация CIDR в экспорте -- ТЗ требует агрегацию в минимальный набор CIDR -- Нужна библиотека: `npm install cidr-tools` или `ip-range-check` -- Или самописный merge (sorted ranges → contiguous merge) - -### E. Клиентская валидация -- ТЗ: валидация на клиенте обязательна, серверная — авторитетная -- Сейчас: только серверная -- Нужно: JS в index.ejs — проверить формат CIDR, маску /22–/32, не RFC1918 - -### F. Переключатель компаний -- ТЗ: пользователь может быть в нескольких компаниях (несколько `clientId` в токене) -- Нужно: UI-dropdown, переключение активного `clientId`, хранение выбора в сессии - ---- - -## Обнаруженные баги - -### overlaps() в validators.js — логическая ошибка - -```js -// Текущий код (неверно): -return a.start <= b.end && b.start <= a.start || - b.start <= a.end && a.start <= b.start; - -// Правильно: -return a.start <= b.end && b.start <= a.end; -``` - -Стандартное условие пересечения отрезков. Текущий код даёт false positive для некоторых смежных диапазонов. -**Приоритет: высокий** — влияет на корректность проверки пересечений. - ---- - -## Порядок реализации - -### Этап 1 — Критические фиксы (не ломают работу) -1. Исправить `overlaps()` в `validators.js` -2. Добавить `POST /update/:id` в `server.js` -3. Добавить кнопку редактирования + inline-форму в `views/index.ejs` - -### Этап 2 — Полнота ТЗ -4. Клиентская валидация (JS в index.ejs) -5. Суммаризация CIDR в `GET /export` (cidr-tools или ручной merge) -6. Определение admin-роли (`clientId === 'WZ01112'`) -7. Страница `/admin` + роут `GET /admin` -8. Роут `POST /admin/limit/:companyId` -9. Журнал аудита для admin (`GET /admin/audit`) - -### Этап 3 — Авторизация (блокирующая для продакшена) -10. `npm install openid-client` — OIDC Keycloak -11. Заменить auth middleware на реальную проверку токена -12. Убрать `DEV_MODE` (или оставить только для локальной разработки) - -### Этап 4 — Опционально -13. Переключатель компаний (multi-company claim) -14. Автотесты: `npm install --save-dev jest supertest` -15. Пагинация (только если лимит вырастет > 50) -16. Audit UI для клиента (не только admin) - ---- - -## Зависимости - -``` -openid-client — OIDC / Keycloak -cidr-tools — суммаризация CIDR в экспорте -``` - -Всё остальное — в рамках существующего стека (Express, EJS, pg). - ---- - -## Что НЕ нужно делать - -- Переписывать validators.js (только исправить overlaps) -- Переписывать queries.js — всё уже написано -- Менять схему БД — она полная -- Пересобирать стек — Express + EJS достаточно для ТЗ diff --git a/docs/[DEPRECATED]-plan-gemini.md b/docs/[DEPRECATED]-plan-gemini.md deleted file mode 100644 index 4740652..0000000 --- a/docs/[DEPRECATED]-plan-gemini.md +++ /dev/null @@ -1,55 +0,0 @@ -# Актуальный план разработки — IP WhiteList Microservice - -> **Автор:** GitHub Copilot (Gemini 3.1 Pro Preview) -> **Дата:** 2026-05-30 -> **Основание:** ТЗ (WhiteIPlist.txt) + Реальный код (Node.js/Express) - -## 1. Анализ предыдущего плана и моё мнение - -Мой предыдущий план (`plan-gemini.md`) оказался **полностью оторванным от реальности**. Я предполагал писать всё с нуля на Python/FastAPI+SQLModel. На деле же ядро полностью готово и написано на **Node.js, Express, EJS и чистом SQL (pg pool)**. -Писать с нуля на питоне — это плодить техдолг и выкидывать рабочий код. Более того, серверная валидация, структура БД, CRUD и UI уже в целом соответствуют ТЗ, но сильно не хватает связующих звеньев. - -Поэтому мой главный тезис: **хватит придумывать архитектуру, нужно закрывать дыры по функциональным требованиям ТЗ в текущем Node.js проекте.** - -## 2. Разрыв между ТЗ (WhiteIPlist.txt) и кодом (Node.js) - -Что готово и работает: -- **База данных:** Полная структура (`companies`, `whitelist_entries`, `audit_log`), реализован soft delete (`deleted_at`). -- **Слой данных (`queries.js`):** Работает базовый CRUD, сохраняются логи аудита, обрабатываются ограничения (глобальные и кастомные). -- **Валидация (`validators.js`):** Реализованы проверки на IPv4, маски /22-/32, зашиты все запрещённые диапазоны (RFC1918, CGNAT, Loopback и т.д.). -- **UI:** Причесанный EJS-шаблон добавления/просмотра/удаления. - -Чего не хватает по ТЗ (Фокус дальнейшей разработки): -1. **Авторизация (Keycloak OIDC):** Сейчас сделан временный парсинг JWT через Base64 без валидации ключей (DEV_MODE). -2. **Multi-company и Роли (Админ/Клиент):** Не реализованы переключатель компаний и админские страницы (видимость всех записей, изменение лимитов, просмотр аудита). -3. **Редактирование записей:** Метод `updateEntry` написан в БД-слое, но UI и роут отсутствуют. Формально ТЗ не закрыто. -4. **Агрегация в Экспорте:** Маршрут `GET /export` просто выплёвывает адреса в столбик, тогда как ТЗ жёстко требует суммаризировать подсети в минимальный набор CIDR. -5. **Клиентская валидация:** ТЗ явно требует валидировать формат и маски на фронтенде перед отправкой. - -## 3. Детальный план по шагам (Node.js) - -### Этап 1: Исправление багов в текущем MVP -- [ ] **Баг с overlaps:** В `validators.js` функция `overlaps()` содержит логическую ошибку в `start`/`end` (может пропускать пересекающиеся подсети). Переписать условие. -- [ ] **UI Редактирования:** Добавить роут `POST /update/:id` в `server.js` и добавить кнопку/форму "Изменить" в `index.ejs`, подключив существующую `updateEntry(...)`. - -### Этап 2: Строгое соответствие ТЗ (Валидация и Экспорт) -- [ ] **Суммаризация CIDR:** Так как в Node.js нет `ipaddress.collapse_addresses`, необходимо использовать библиотеку вроде `cidr-tools` (функция `merge()` отлично справится) для `GET /export`. -- [ ] **Клиентская валидация:** Добавить минимальный JavaScript в `index.ejs` для проверки валидности вводимого IP-адреса и маски до ухода POST-запроса, чтобы экономить серверные ресурсы (Требование ТЗ). - -### Этап 3: Подключение OIDC Keycloak -- [ ] Установка библиотеки `openid-client` (или `passport-openidconnect`). -- [ ] Настройка middleware: получение сертификатов из Keycloak, валидация подписи JWT-токена. -- [ ] Извлечение claim `clientID` (и логика переключения между компаниями, если `clientID` является массивом). Определение роли (кто админ, `WZ01112`). Обязательный отказ от dev-заглушки в PROD. - -### Этап 4: Админ-панель (пользователь WZ01112) -- [ ] Роут `GET /admin` и шаблон `admin.ejs`. Таблица со всеми компаниями и их лимитами, фильтрацией. -- [ ] Функционал установки `custom_limit` для компании. -- [ ] Страница/вкладка `GET /admin/audit` для просмотра `audit_log`. -- [ ] Переключатель отображения Soft-deleted записей. - -## 4. Зависимости -В `package.json` придется добавить лишь две новые production-зависимости, не усложняя проект: -- `cidr-tools` (для агрегации при экспорте) -- `openid-client` / `jsonwebtoken` (для безопасной работы с Keycloak) - -Всё остальное будет реализовано в рамках существующего стека. diff --git a/docs/[DEPRECATED]-plan-gpt54.md b/docs/[DEPRECATED]-plan-gpt54.md deleted file mode 100644 index 8f8053b..0000000 --- a/docs/[DEPRECATED]-plan-gpt54.md +++ /dev/null @@ -1,552 +0,0 @@ -# Актуальный план реализации — IP WhiteList - -> Автор: GitHub Copilot (GPT-5.4) -> Дата: 2026-05-30 -> Основание: ТЗ из WhiteIPlist.txt + фактический код в ipwhitelist-app -> Статус: заменяет предыдущую версию плана - -## 1. Вывод по текущему состоянию - -Предыдущий план был неполным, потому что строился не от ТЗ, а от видимого MVP. После сверки с WhiteIPlist.txt картина такая: - -1. Основа сервиса уже написана лучше, чем казалось: схема БД, soft delete, аудит, custom_limit, updateEntry и полный список запрещённых диапазонов уже есть в коде. -2. Основной разрыв находится не в модели данных, а между слоями: часть функций реализована в src/queries.js, но не выведена в server.js и views. -3. Главные недостающие вещи для соответствия ТЗ: нормальная OIDC-авторизация, admin-сценарии, редактирование из UI, клиентская валидация, агрегирующий экспорт. -4. Переписывать стек или БД не нужно. Нужно довести существующую реализацию до полноты требований. - -## 2. Что требует ТЗ - -Сервис по ТЗ обязан поддерживать: - -1. Self-service страницу управления whitelist-записями. -2. Авторизацию через Keycloak OIDC. -3. Роли client и admin. -4. Возможность работы пользователя с одной или несколькими компаниями. -5. Создание, редактирование и soft delete записей. -6. Серверную и клиентскую валидацию IPv4/CIDR. -7. Глобальный лимит и индивидуальные лимиты по компаниям. -8. Журнал аудита. -9. Внешний endpoint выдачи агрегированного списка активных CIDR. -10. Admin-функции: просмотр всех компаний, фильтрация, просмотр удалённых записей, изменение лимитов. - -## 3. Что уже реализовано сейчас - -### 3.1 База данных - -В sql/schema.sql уже есть всё базовое, что нужно для ТЗ: - -1. Таблица companies с client_id и custom_limit. -2. Таблица whitelist_entries с updated_by, updated_at, deleted_by, deleted_at. -3. Таблица audit_log. -4. Индекс активных записей и индекс по audit_log(company_id). - -Вывод: схему БД переписывать не нужно. - -### 3.2 Серверная логика - -В src/queries.js уже реализованы: - -1. getOrCreateCompany -2. getLimit -3. listEntries с includeDeleted -4. createEntry -5. updateEntry -6. deleteEntry как soft delete -7. getExportCIDRs -8. getAudit - -Вывод: слой работы с БД уже покрывает значительную часть ТЗ. - -### 3.3 Валидация - -В src/validators.js уже есть: - -1. Только IPv4. -2. Маски только /22–/32. -3. Нормализация host-битов. -4. Запрет всех диапазонов из Приложения А ТЗ, включая CGNAT, Benchmarking, Multicast, Reserved и Limited broadcast. -5. Проверка пересечений. - -Вывод: серверная валидация по составу требований почти полная. - -### 3.4 UI и маршруты - -В server.js и views/index.ejs уже есть: - -1. Главная страница со списком записей. -2. Форма добавления. -3. Soft delete через POST /delete/:id. -4. Экспорт через GET /export. -5. Вывод текущего лимита и числа использованных записей. -6. UI, близкий к стилю Nubes. - -Вывод: клиентский сценарий создания и удаления уже работает как MVP. - -## 4. Что не соответствует ТЗ или не доведено до конца - -### 4.1 Авторизация - -Сейчас в server.js не OIDC, а упрощённый decode токена через base64 без проверки подписи. Это подходит только как временная заглушка, но не соответствует ТЗ. - -Нужно: - -1. Реальная проверка JWT через Keycloak/JWKS или openid-client. -2. Нормальный маппинг claims в user-модель. -3. Явное определение роли admin. -4. Поддержка сценария с несколькими компаниями. - -Это главный блокер продакшна. - -### 4.2 Редактирование записи - -updateEntry уже написана, но: - -1. Нет роута POST /update/:id. -2. Нет формы редактирования в index.ejs. -3. Нет пользовательского сценария изменения записи. - -То есть требование ТЗ формально не закрыто, хотя код на уровне queries уже есть. - -### 4.3 Admin-функции - -По ТЗ администратор должен: - -1. Видеть записи всех компаний. -2. Фильтровать по компании. -3. Видеть soft-deleted записи. -4. Смотреть аудит. -5. Менять лимиты компаний. - -Сейчас ничего из этого не выведено в server.js и views. - -### 4.4 Экспорт - -GET /export уже есть, но он отдаёт просто список value_cidr без агрегации. ТЗ требует суммаризацию в минимальный набор CIDR по всем активным записям. - -Это функциональный разрыв, а не косметика. - -### 4.5 Клиентская валидация - -ТЗ требует валидацию на клиенте и сервере. Сейчас есть только серверная. - -Нужно добавить в форму как минимум: - -1. Проверку формата IPv4/CIDR. -2. Проверку диапазона маски. -3. Ограничение длины комментария. -4. Сообщение о возможной нормализации. - -### 4.6 Multi-company сценарий - -ТЗ явно говорит, что пользователь может принадлежать нескольким компаниям. Сейчас всё построено вокруг одного clientId в req.user. - -Нужно: - -1. Понять реальный формат claims. -2. Ввести activeCompany в контекст пользователя. -3. Добавить переключатель активной компании в UI. - -## 5. Что не надо перепридумывать - -1. Не надо переписывать проект на другой язык или другой фреймворк. -2. Не надо менять схему БД ради самой схемы. -3. Не надо переписывать validators.js целиком. -4. Не надо переписывать queries.js целиком. -5. Не надо делать SPA. - -Правильный путь: минимально нарастить уже существующую Node.js/Express/EJS реализацию. - -## 6. Риски и спорные места - -### 6.1 overlaps в validators.js - -Условие в overlaps написано нестандартно и плохо читается. Прямого доказанного бага по одной только формуле сейчас нет, но это место требует отдельного теста на: - -1. полное совпадение, -2. вложенность, -3. непересекающиеся диапазоны, -4. соседние диапазоны, -5. одиночный IP против подсети. - -Решение: сначала добавить точечные тесты, и только потом менять формулу, если тест покажет дефект. - -### 6.2 Admin-роль - -ТЗ говорит: admin это clientId = WZ01112 и отдельный чек-бокс. Сейчас неясно, как этот чек-бокс попадает в токен. Без этого нельзя финально закрыть auth-модель. - -### 6.3 Multi-company claims - -ТЗ требует сценарий нескольких компаний, но в списке claims указан только clientID. Здесь нужна конкретика от команды Keycloak. - -## 7. Новый план реализации - -### Этап 1. Довести до полноты пользовательский сценарий - -Цель: закрыть основной client-flow без смены архитектуры. - -1. Добавить роут POST /update/:id в server.js. -2. Добавить UI редактирования в views/index.ejs. -3. Показать updated_at и updated_by, если запись менялась. -4. Добавить клиентскую валидацию формы добавления и редактирования. -5. Добавить точечные тесты на overlaps и нормализацию. - -Результат этапа: client сможет не только добавлять и удалять, но и редактировать записи, как требует ТЗ. - -### Этап 2. Закрыть admin-функциональность - -Цель: реализовать недостающую управленческую часть ТЗ. - -1. Ввести определение роли admin в auth-слое. -2. Добавить GET /admin. -3. Добавить фильтр по компании. -4. Добавить показ удалённых записей. -5. Добавить GET /admin/audit. -6. Добавить POST /admin/limit/:companyId. -7. Добавить отдельный admin view. - -Результат этапа: появляется реальная административная панель, а не только клиентский экран. - -### Этап 3. Привести авторизацию к ТЗ - -Цель: убрать временную заглушку и сделать реальную интеграцию с Keycloak. - -1. Заменить наивный decode токена на верификацию подписи. -2. Добавить конфигурацию issuer, audience, jwks/oidc. -3. Нормализовать claims в req.user. -4. Поддержать admin-claim. -5. Поддержать multi-company claims. -6. Оставить DEV_MODE только для локальной разработки. - -Результат этапа: сервис можно выводить из чисто dev-сценария. - -### Этап 4. Довести экспорт до требований ТЗ - -Цель: сделать экспорт пригодным для систем фильтрации. - -1. Добавить суммаризацию активных записей в минимальный набор CIDR. -2. Суммаризировать по всем компаниям совместно. -3. Исключать soft-deleted записи. -4. Оставить выдачу text/plain, одна строка на объект. -5. Отдельно решить, где ограничивается доступ к export endpoint: ingress, app или оба уровня. - -Результат этапа: экспорт соответствует ТЗ, а не является просто дампом таблицы. - -### Этап 5. Завершение и проверка полноты - -1. Сверить все пункты ТЗ с реализованным поведением. -2. Обновить тестовый сценарий. -3. Проверить UX ошибок и предупреждений. -4. Проверить поведение при снижении custom_limit ниже текущего числа активных записей. -5. Проверить сценарии admin/client отдельно. - -## 8. Практический приоритет - -Если делать не всё сразу, а по реальной важности, порядок такой: - -1. Редактирование записи из UI. -2. Клиентская валидация. -3. Admin-панель и лимиты. -4. Реальный OIDC. -5. Multi-company. -6. Суммаризация export. - -Почему именно так: - -1. Редактирование уже почти готово и закрывает явный пробел ТЗ. -2. Admin-функции сейчас отсутствуют полностью. -3. OIDC блокирует продакшн, но не мешает локально добить функциональность. -4. Экспорт уже работает как черновой endpoint, но должен быть доведён до суммаризации до релиза. - -## 9. Итог - -Правильный план для этого проекта не “переписать всё правильно”, а “довести уже написанное до требований ТЗ”. - -Текущее состояние проекта: - -1. Data-layer в основном готов. -2. Server-layer частично готов. -3. UI-layer закрывает только часть client-сценария. -4. Auth-layer пока временный. -5. Admin-layer почти отсутствует. -6. Export-layer не завершён по требованиям агрегации. - -Главный вывод: проект ближе к рабочему состоянию, чем казалось по старым планам, но прошлый план был методологически неверен, потому что не опирался на ТЗ и не различал “не написано” и “написано, но не подключено”. - -Эта часть критична. Её нужно делать одной из первых и сразу покрывать тестами. - -### Поддерживаемый ввод - -1. Одиночный IPv4 адрес, который трактуется как /32. -2. IPv4 подсеть в CIDR нотации. - -### Запрещённый ввод - -1. IPv6. -2. Доменное имя. -3. Маска шире допустимой. -4. Любые private или special ranges из приложения А. - -### Правила маски - -Допустимы только /22 ... /32. - -### Нормализация - -Если пользователь ввёл адрес с host-битами, сервис должен: - -1. Нормализовать значение до адреса сети. -2. Сохранить нормализованное значение. -3. Вернуть пользователю явное сообщение, что адрес был нормализован. - -### Проверки в пределах компании - -1. Запрет полного дубликата активной записи. -2. Запрет любого пересечения активной записи с существующими активными записями той же компании. -3. Между разными компаниями пересечения допускаются. - -### Список запрещённых диапазонов - -Нужно захардкодить как конфигурацию приложения и покрыть тестами: - -1. 10.0.0.0/8 -2. 172.16.0.0/12 -3. 192.168.0.0/16 -4. 100.64.0.0/10 -5. 127.0.0.0/8 -6. 169.254.0.0/16 -7. 192.0.0.0/24 -8. 192.0.2.0/24 -9. 198.51.100.0/24 -10. 203.0.113.0/24 -11. 198.18.0.0/15 -12. 224.0.0.0/4 -13. 240.0.0.0/4 -14. 255.255.255.255/32 - -## 10. Лимиты и конкурентность - -Это важное место, которого обычно недооценивают. - -### Правила лимитов - -1. Есть глобальный DEFAULT_LIMIT, по умолчанию 15. -2. Для компании может быть custom_limit. -3. При снижении лимита ниже текущего количества записей существующие записи не удаляются. -4. Пока число активных записей больше лимита, новые записи создавать нельзя. - -### Риск гонок - -Если два запроса одновременно создают записи в одной компании, возможны: - -1. Пробитие лимита. -2. Пропуск пересечения. -3. Пропуск дубликата. - -### Что делать - -Операцию создания и обновления записи нужно делать в транзакции с сериализацией логики на уровне компании. Практически это можно решить так: - -1. Брать advisory lock по company_id перед проверками и записью. -2. Либо делать SELECT ... FOR UPDATE по строке компании, если этого достаточно для вашей схемы доступа. - -Для первой версии я бы выбрал advisory lock по company_id. Это проще и надёжнее для бизнес-ограничений, которые нельзя полностью выразить обычным unique index. - -## 11. Экспорт агрегированного списка - -### Требования - -1. В экспорт попадают только активные записи. -2. Данные берутся по всем компаниям. -3. Пересечения между компаниями допустимы на уровне хранения, но в export должны агрегироваться в минимальный набор CIDR. -4. Формат ответа: text/plain. -5. Одна строка = один CIDR. - -### Что нужно зафиксировать реализационно - -1. Результат должен быть отсортирован для стабильности. -2. В ответе должен быть завершающий перевод строки. -3. Content-Type должен быть text/plain; charset=utf-8. -4. Желательно отдавать Content-Disposition с понятным именем файла. - -### Защита endpoint - -Если endpoint на старте работает без auth, то доступ надо ограничить минимум одним из способов: - -1. Проверка client IP в приложении. -2. Ограничение на reverse proxy. -3. Оба сразу. - -## 12. UI-потоки - -### Экран клиента - -Должны быть: - -1. Селектор активной компании, если компаний несколько. -2. Таблица записей. -3. Индикатор использовано X из N. -4. Форма создания записи. -5. Возможность редактирования. -6. Возможность soft delete. - -### Экран администратора - -Должны быть: - -1. Таблица по всем компаниям. -2. Фильтр по компании. -3. Фильтр показа удалённых записей. -4. Просмотр журнала аудита. -5. Управление лимитами компании. - -### UX-детали, которые обязательно сделать - -1. Понятные сообщения об ошибках валидации. -2. Явное сообщение о нормализации адреса. -3. Явное сообщение о превышении лимита. -4. Явное сообщение о пересечении с существующей записью. - -## 13. Пошаговый план реализации - -### Этап 1. Каркас проекта - -1. Создать структуру каталогов. -2. Подготовить requirements.txt. -3. Подготовить .env.example. -4. Подключить FastAPI, Jinja2, static. -5. Подготовить docker-compose.yml с PostgreSQL. - -Результат этапа: приложение стартует, открывается базовая страница, есть подключение к БД. - -### Этап 2. Схема БД и миграции - -1. Настроить Alembic. -2. Создать initial migration. -3. Поднять таблицы companies, whitelist_entries, audit_log. -4. Добавить нужные индексы. - -Результат этапа: схема БД фиксирована и воспроизводима. - -### Этап 3. Валидатор CIDR - -1. Реализовать разбор IPv4 и CIDR. -2. Реализовать проверку маски. -3. Реализовать нормализацию. -4. Реализовать проверку запрещённых диапазонов. -5. Написать тесты на валидатор. - -Результат этапа: независимый, протестированный модуль бизнес-валидации. - -### Этап 4. Сервисный слой для записей - -1. Реализовать list. -2. Реализовать create. -3. Реализовать update. -4. Реализовать soft delete. -5. Реализовать проверки лимитов, дубликатов и пересечений. -6. Добавить транзакционную защиту от гонок. - -Результат этапа: бизнес-операции работают без UI. - -### Этап 5. Аудит - -1. Добавить запись CREATE. -2. Добавить запись UPDATE со старым и новым состоянием. -3. Добавить запись DELETE. -4. Добавить интерфейс чтения для admin. - -Результат этапа: все изменяющие действия фиксируются. - -### Этап 6. Авторизация - -1. Реализовать dev-заглушку. -2. Реализовать чтение и валидацию JWT из Keycloak. -3. Реализовать преобразование claims в current user. -4. Реализовать проверки client/admin. -5. Реализовать переключение компании. - -Результат этапа: права и контекст пользователя работают сквозным образом. - -### Этап 7. HTML-интерфейс - -1. Реализовать страницу списка. -2. Реализовать формы создания и редактирования. -3. Реализовать soft delete из UI. -4. Реализовать админские экраны. - -Результат этапа: сервис пригоден для ручной эксплуатации. - -### Этап 8. Экспорт - -1. Реализовать сбор всех активных CIDR. -2. Реализовать агрегацию. -3. Реализовать endpoint export. -4. Реализовать сетевое ограничение. - -Результат этапа: внешняя система может забирать текстовый агрегированный whitelist. - -### Этап 9. Финализация - -1. Написать README. -2. Подготовить Dockerfile. -3. Подготовить пример systemd unit при необходимости. -4. Прогнать ручной smoke-test. - -Результат этапа: сервис можно разворачивать и передавать коллегам. - -## 14. Тестовая стратегия - -Минимально обязательные тесты: - -1. Валидный одиночный IPv4 превращается в /32. -2. Валидная подсеть принимается. -3. Host-биты нормализуются. -4. Маски шире допустимой границы отклоняются. -5. IPv6 отклоняется. -6. Все запрещённые диапазоны отклоняются. -7. Дубликат в одной компании запрещён. -8. Пересечение в одной компании запрещено. -9. Тот же CIDR в другой компании разрешён. -10. Soft delete освобождает лимит. -11. Export не включает soft-deleted записи. -12. Export агрегирует CIDR корректно. -13. Client не видит чужие компании. -14. Admin видит все компании. -15. Аудит создаётся для create, update, delete. - -## 15. Что можно отложить после первой версии - -Это не нужно тащить в MVP: - -1. Полноценный SPA. -2. Сложная ORM. -3. WebSocket. -4. Фоновая очередь. -5. Исторические версии записей кроме audit log. -6. Автоматическое уведомление по email. - -## 16. Главные риски проекта - -1. Неясный формат claims из Keycloak. -2. Гонки при одновременном создании записей. -3. Ошибки в трактовке пересечений CIDR. -4. Неправильная нормализация адресов без понятного сообщения пользователю. -5. Слишком раннее усложнение фронтенда. - -## 17. Что я бы делал первым - -Если начинать реализацию прямо сейчас, порядок такой: - -1. Каркас проекта. -2. Схема БД. -3. Валидатор и тесты. -4. Сервис create/update/delete с транзакциями. -5. Только потом UI и Keycloak. - -Это самый безопасный путь: сначала фиксируется ядро бизнес-логики, потом уже внешний слой. - -## 18. Итоговое решение - -За основу реализации стоит брать простой Python/FastAPI сервис с PostgreSQL, синхронной серверной логикой, жёсткой серверной валидацией, транзакционной защитой от гонок и минималистичным HTML UI. - -Главная мысль: сложность здесь не во фронтенде и не в фреймворке, а в корректной реализации правил CIDR, лимитов, ролей и аудита. План должен защищать именно эти части, а не раздувать стек. \ No newline at end of file diff --git a/docs/[DEPRECATED]-plan-v2.md b/docs/[DEPRECATED]-plan-v2.md deleted file mode 100644 index 1f52b11..0000000 --- a/docs/[DEPRECATED]-plan-v2.md +++ /dev/null @@ -1,188 +0,0 @@ -# План разработки — IP WhiteList Microservice v2 - -> **Автор:** GitHub Copilot (Claude Sonnet 4.6) -> **Дата:** 2026-05-29 - ---- - -## Стек - -| Слой | Технология | Обоснование | -|---|---|---| -| Бэкенд | Python 3.11+ / FastAPI | Коллеги знают Python, авто-документация | -| БД | PostgreSQL | Надёжно, поддерживает аудит и сложные запросы | -| Работа с БД | psycopg2 + сырой SQL | Проще чем ORM, понятно всем, никакой магии | -| Миграции | Alembic | Только для версионирования схемы | -| Фронтенд | Jinja2 + обычные HTML-формы | Без JS-фреймворков, минимум зависимостей | -| Авторизация | Keycloak OIDC (JWT) | Заглушка только в dev через `.env` флаг | -| IP-логика | stdlib `ipaddress` + `netaddr` | Суммаризация CIDR через `netaddr` | - ---- - -## Открытые вопросы (нужно прояснить до кодирования) - -1. **Чекбокс администратора** — ТЗ: admin = `clientId == WZ01112` + «отдельный чек-бокс». Что это: отдельный claim в Keycloak-токене (`is_admin: true`)? Роль? Нужно уточнить у команды Keycloak. -2. **Создание Company в БД** — когда появляется запись: при первом входе пользователя автоматически, или администратор заводит вручную? -3. **Кто потребляет внешний endpoint** — endpoint без авторизации, доступ по IP. Список доверенных IP задаётся конфигом? Nginx ACL? - ---- - -## Файловая структура - -``` -IPWhiteList/ -├── app/ -│ ├── main.py # FastAPI app, роутеры, startup -│ ├── config.py # Настройки из .env (DEFAULT_LIMIT, DEV_MODE, DB_DSN и др.) -│ ├── db.py # psycopg2 connection pool -│ ├── models/ -│ │ └── sql.py # DDL-схема (только для документации, не ORM) -│ ├── validators.py # IPv4/CIDR: формат, маска, серые адреса, нормализация -│ ├── crud/ -│ │ ├── entries.py # CRUD whitelist_entries -│ │ ├── companies.py # Компании и лимиты -│ │ └── audit.py # Запись в audit_log -│ ├── auth/ -│ │ ├── oidc.py # Валидация JWT Keycloak -│ │ ├── stub.py # Dev-заглушка (только при DEV_MODE=true) -│ │ └── deps.py # FastAPI Depends: current_user -│ ├── routers/ -│ │ ├── entries.py # CRUD UI-роуты + HTMX-фрагменты -│ │ ├── admin.py # Аудит, лимиты (только admin) -│ │ └── external.py # GET /api/v1/export — txt-файл -│ └── cidr_utils.py # Суммаризация через netaddr -├── templates/ -│ ├── base.html -│ ├── index.html # Таблица записей + индикатор лимита -│ ├── partials/ -│ │ ├── table.html # HTMX-фрагмент таблицы -│ │ └── form.html # Форма создания/редактирования -│ └── admin/ -│ ├── audit.html -│ └── limits.html -├── static/ -│ └── style.css -├── migrations/ -│ ├── env.py -│ └── versions/ -├── tests/ -│ ├── test_validators.py # Юниты для IPv4-валидации (критично!) -│ └── test_crud.py -├── docs/ -│ ├── plan.md # LEGACY -│ ├── plan-v2.md # Этот файл -│ └── WhiteIPlist.docx # Исходное ТЗ -├── .env.example -├── alembic.ini -├── docker-compose.yml # PostgreSQL для dev -├── requirements.txt -└── README.md -``` - ---- - -## Схема БД - -```sql --- Компании (создаются автоматически при первом входе или вручную админом — уточнить) -CREATE TABLE companies ( - id SERIAL PRIMARY KEY, - client_id VARCHAR(64) UNIQUE NOT NULL, -- из Keycloak claim - name VARCHAR(255), - custom_limit INTEGER DEFAULT NULL -- NULL = использовать глобальный DEFAULT_LIMIT -); - --- Whitelist-записи -CREATE TABLE whitelist_entries ( - id SERIAL PRIMARY KEY, - company_id INTEGER NOT NULL REFERENCES companies(id), - value CIDR NOT NULL, -- нормализованный CIDR - comment VARCHAR(255), - created_by VARCHAR(255) NOT NULL, -- email из токена - created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - updated_by VARCHAR(255), - updated_at TIMESTAMPTZ, - deleted_by VARCHAR(255), - deleted_at TIMESTAMPTZ -- NULL = активная запись -); - --- Аудит (только append, без UPDATE/DELETE) -CREATE TABLE audit_log ( - id SERIAL PRIMARY KEY, - user_email VARCHAR(255) NOT NULL, - company_id INTEGER NOT NULL, - action VARCHAR(32) NOT NULL, -- CREATE | UPDATE | DELETE - old_value TEXT, - new_value TEXT, - created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() -); - --- Индексы -CREATE INDEX ON whitelist_entries(company_id) WHERE deleted_at IS NULL; -CREATE INDEX ON audit_log(company_id); -``` - ---- - -## Этапы - -### Этап 1 — Каркас + конфиг -- [ ] Структура папок -- [ ] `requirements.txt`: fastapi, uvicorn, psycopg2-binary, alembic, jinja2, python-jose, netaddr -- [ ] `.env.example` со всеми переменными: `DB_DSN`, `DEFAULT_LIMIT=15`, `DEV_MODE=false`, `KEYCLOAK_URL`, `KEYCLOAK_REALM`, `KEYCLOAK_CLIENT_ID`, `ALLOWED_EXPORT_IPS` -- [ ] `config.py` — читает `.env`, все параметры типизированы -- [ ] `db.py` — psycopg2 connection pool (SimpleConnectionPool) -- [ ] `docker-compose.yml` с PostgreSQL - -### Этап 2 — Миграции (схема БД) -- [ ] Alembic init -- [ ] Initial migration: `companies`, `whitelist_entries`, `audit_log` + индексы -- [ ] Проверка `alembic upgrade head` - -### Этап 3 — Валидатор IPv4 (с тестами) -- [ ] `validators.py`: принимает строку → возвращает нормализованный CIDR или ошибку -- [ ] Проверка формата: одиночный IP или CIDR -- [ ] Проверка маски: /22 – /32 (шире /21 — `ValidationError`) -- [ ] Нормализация host-битов: `192.168.1.5/24` → `192.168.1.0/24` + флаг `was_normalized=True` -- [ ] Запрет серых диапазонов (все из Приложения А ТЗ) -- [ ] `tests/test_validators.py` — покрыть все граничные случаи - -### Этап 4 — CRUD-логика -- [ ] `crud/companies.py`: get_or_create по client_id, get_limit (custom_limit ?? DEFAULT_LIMIT) -- [ ] `crud/entries.py`: список активных, создание (лимит + дубликаты + пересечения), редактирование, soft-delete -- [ ] `crud/audit.py`: append-only запись - -### Этап 5 — Авторизация -- [ ] `auth/oidc.py` — валидация JWT через JWKS Keycloak, извлечение `clientID`, `email`, определение роли -- [ ] Логика роли admin: `clientID == WZ01112` + (claim `is_admin == true` — **уточнить**) -- [ ] `auth/stub.py` — только при `DEV_MODE=true`: читает `X-Dev-User` из заголовка -- [ ] `auth/deps.py` — `Depends(current_user)` для роутеров - -### Этап 6 — Роутеры + UI -- [ ] `routers/entries.py`: список, форма создания, форма редактирования, удаление, переключатель компании -- [ ] `routers/admin.py`: журнал аудита, управление лимитами -- [ ] Шаблоны Jinja2: base.html, index.html, form.html, admin/audit.html, admin/limits.html -- [ ] Индикатор лимита «X из N» на странице -- [ ] Уведомление о нормализации адреса пользователю - -### Этап 7 — Внешний endpoint -- [ ] `GET /api/v1/export` — только активные записи всех компаний -- [ ] Суммаризация через `netaddr.cidr_merge()` -- [ ] Ответ: `text/plain`, одна строка — один CIDR -- [ ] IP-фильтр из `ALLOWED_EXPORT_IPS` (middleware или Depends) - -### Этап 8 — Деплой -- [ ] `Dockerfile` (python:3.11-slim, uvicorn) -- [ ] Systemd unit как альтернатива -- [ ] Nginx конфиг: reverse proxy + location для static -- [ ] README: как поднять с нуля - ---- - -## Ключевые принципы - -- **Синхронный код везде** — никакого async/await. FastAPI поддерживает синхронные роутеры. -- **Серверная валидация — авторитетная**. Клиентская — только UX. -- **`DEV_MODE=true`** — единственный способ обойти Keycloak. В prod недоступен. -- **Audit log — append only**. Никаких UPDATE/DELETE в `audit_log`. -- **Лимит `DEFAULT_LIMIT`** — всегда из `config.py`, который читает `.env`. Без пересборки. diff --git a/docs/[DEPRECATED]-plan-working.md b/docs/[DEPRECATED]-plan-working.md deleted file mode 100644 index 219b46b..0000000 --- a/docs/[DEPRECATED]-plan-working.md +++ /dev/null @@ -1,103 +0,0 @@ -# Рабочий план — IP WhiteList - -> **Автор:** GitHub Copilot (Claude Sonnet 4.6) -> **Дата:** 2026-05-29 -> **Стек:** Node.js + Express + pg + EJS -> **Деплой:** nubes_nodejs + nubes_postgres (через веб-кабинет) - ---- - -## Что выяснили - -| Факт | Детали | -|---|---| -| **API шлюз** | `lk-api-gateway.ngcloud.ru`, за DDOS-Guard | -| **JWT** | `iss: auth-api`, claims: `ClientID`, `company_id`, `company_name`, `email` | -| **Токен для dev** | `secrets.txt`, tech-токен, долгий | -| **Валидация JWT** | Шлюз делает сам, нам не нужно | -| **Деплой** | Пользователь создаёт инстансы через веб-кабинет | -| **isAdmin** | ❓ В JWT нет, нужно уточнить как передавать | -| **Мульти-компании** | ❓ В JWT одна компания, список — в authData (localStorage) | - ---- - -## Файлы проекта (всё в корне) - -``` -├── server.js # Express: старт, роуты, middleware -├── db.js # pg Pool -├── .env.example # DB_DSN, PORT, DEFAULT_LIMIT, DEV_MODE -├── package.json -├── views/ # EJS-шаблоны -│ └── index.ejs # таблица + форма -├── public/ -│ └── style.css -├── sql/ -│ └── schema.sql # CREATE TABLE companies, whitelist_entries, audit_log -└── .gitignore -``` - ---- - -## Схема БД - -```sql -companies (id, client_id UNIQUE, name, custom_limit) -whitelist_entries (id, company_id FK, value_cidr, comment, created_by, created_at, updated_by, updated_at, deleted_by, deleted_at) -audit_log (id, user_email, company_id, action, old_value, new_value, created_at) -``` - -- `deleted_at IS NULL` = активная запись -- `custom_limit IS NULL` = использовать DEFAULT_LIMIT (15) - ---- - -## Порядок действий - -### Шаг 1 — Каркас -- package.json (express, pg, ejs, dotenv) -- server.js (Express, EJS, static, health check `/healthz`) -- db.js (pg Pool, `SELECT 1` при старте) -- .env.example - -### Шаг 2 — Схема БД -- sql/schema.sql -- Запустить на своём PG - -### Шаг 3 — Валидатор IPv4 -- Функция validateCIDR(input) → { cidr, wasNormalized } | error -- Правила: /32–/22, запрет серых, нормализация host-битов - -### Шаг 4 — CRUD (сырой pg, без ORM) -- Список записей компании -- Создание (проверка лимита, дубликатов, пересечений) -- Редактирование -- Soft-delete - -### Шаг 5 — Auth middleware -- DEV_MODE=true: читать заголовок X-Dev-User -- PROD: читать JWT из Authorization (шлюз уже проверил) - -### Шаг 6 — UI -- Таблица + форма создания/редактирования -- Индикатор лимита «X из N» -- Сообщения: нормализация, превышение, пересечение - -### Шаг 7 — Аудит -- Запись в audit_log при create/update/delete - -### Шаг 8 — Экспорт -- GET /api/v1/export — txt, все активные CIDR - -### Шаг 9 — Деплой -- Завести nubes_postgres и nubes_nodejs через кабинет -- Подключить к API-шлюзу (уточнить процедуру) - ---- - -## Что откладываем - -- Keycloak OIDC (шлюз делает) -- Полноценный админ-интерфейс -- Переключатель компаний (multi-profile) -- Тонкая настройка прав diff --git a/docs/[DEPRECATED]-plan.md b/docs/[DEPRECATED]-plan.md deleted file mode 100644 index f2c24c4..0000000 --- a/docs/[DEPRECATED]-plan.md +++ /dev/null @@ -1,107 +0,0 @@ -# IP WhiteList — План разработки - -> **Дата:** 2026-05-30 -> **Основание:** [WhiteIPlist.txt](../WhiteIPlist.txt) (ТЗ) + фактический код в [ipwhitelist-app](../../ipwhitelist-app) -> **Статус:** каноничный — единственный актуальный план - ---- - -## 1. Текущее состояние - -### Готово ✅ - -| Слой | Файлы | Что есть | -|---|---|---| -| БД | `sql/schema.sql` | `companies`, `whitelist_entries` (soft delete), `audit_log` + индексы | -| Валидатор | `src/validators.js` | Все 14 запрещённых диапазонов Приложения А, /22–/32, нормализация host-битов, проверка пересечений | -| CRUD | `src/queries.js` | `createEntry`, `updateEntry`, `deleteEntry` (soft), `listEntries`, `getExportCIDRs`, `getAudit`, `getLimit` | -| UI | `views/index.ejs` | Список, форма добавления, кнопка удаления, стиль Nubes | -| Роуты | `server.js` | `GET /`, `POST /add`, `POST /delete/:id`, `GET /export`, `GET /healthz` | - -### Написано в queries.js, но не подключено к роутам - -- `updateEntry` — нет `POST /update/:id`, нет UI редактирования -- `getAudit` — нет страницы аудита -- `listEntries(companyId, includeDeleted=true)` — флаг есть, не используется - ---- - -## 2. Что требует ТЗ, но отсутствует - -| # | Требование | Готовность | -|---|---|---| -| 1 | Редактирование записи из UI | ❌ queries есть, роута нет | -| 2 | Админ-панель (все компании, лимиты, аудит, фильтры) | ❌ | -| 3 | OIDC Keycloak вместо base64-заглушки | ❌ | -| 4 | Суммаризация CIDR в `/export` | ❌ отдаёт сырой список | -| 5 | Клиентская валидация (JS в форме) | ❌ | -| 6 | Переключатель компаний (multi-company) | ❌ | -| 7 | Просмотр soft-deleted записей админом | ❌ | -| 8 | Изменение `custom_limit` для компании | ❌ | - ---- - -## 3. Порядок реализации - -### Этап 1 — Пользовательский сценарий (client-flow) - -- [x] Валидатор IPv4/CIDR — полный -- [x] Создание / удаление / экспорт -- [ ] **Добавить `POST /update/:id`** в `server.js` -- [ ] **Добавить inline-форму редактирования** в `views/index.ejs` -- [ ] **Клиентская валидация** (JS: формат, маска, длина комментария) - -### Этап 2 — Административная панель - -- [ ] Определение admin-роли (`clientId === 'WZ01112'` + чекбокс) -- [ ] `GET /admin` — страница со всеми компаниями -- [ ] `POST /admin/limit/:companyId` — изменение custom_limit -- [ ] `GET /admin/audit` — журнал аудита -- [ ] Фильтр по компании + показ удалённых записей - -### Этап 3 — Авторизация Keycloak OIDC - -- [ ] `npm install openid-client` -- [ ] Замена base64-decode на проверку подписи JWT -- [ ] Маппинг claims → `req.user` (clientId, email, role) -- [ ] Оставить `DEV_MODE` только для локальной разработки - -### Этап 4 — Экспорт и Multi-company - -- [ ] `npm install cidr-tools` — суммаризация в `GET /export` -- [ ] Переключатель активной компании (если несколько `clientId` в claims) - -### Этап 5 — Завершение - -- [ ] Автотесты (`jest` + `supertest`) -- [ ] Пагинация (если лимит > 50) -- [ ] Сверка всех пунктов ТЗ - ---- - -## 4. Что НЕ делать - -- ❌ Не переписывать на Python/FastAPI -- ❌ Не менять схему БД -- ❌ Не переписывать `validators.js` (он полный) -- ❌ Не переписывать `queries.js` -- ❌ Не делать SPA - ---- - -## 5. Зависимости для установки - -``` -npm install cidr-tools openid-client -npm install --save-dev jest supertest -``` - -Всё остальное — в рамках Express + EJS + pg. - ---- - -## 6. Риски - -- **Admin-роль:** неясно как «отдельный чек-бокс» из ТЗ попадает в токен — требует уточнения с командой Keycloak -- **Multi-company claims:** ТЗ говорит о нескольких компаниях, но в claims только `clientID` — нужен реальный формат -- **IP-ограничение `/export`:** делать в приложении или на уровне ingress — решить при деплое diff --git a/docs/architecture.md b/docs/architecture.md deleted file mode 100644 index 7efc93f..0000000 --- a/docs/architecture.md +++ /dev/null @@ -1,169 +0,0 @@ -# IP WhiteList — Архитектура (актуально, 2026-05-30 14:43) - -> Ветка `sonnet`, репо: `gitea.services.ngcloud.ru/Nail/ipwhitelist-app.git` -> Код: `/home/naeel/ipwhitelist-app` - ---- - -## Стек - -| Слой | Технология | -|---|---| -| Сервер | Node.js + Express 4 | -| Шаблоны | EJS (server-side, без SPA) | -| БД | PostgreSQL, клиент `pg` (pool) | -| Безопасность | helmet, express-rate-limit, csrf-csrf, express-session | -| JWT | jsonwebtoken (mock RS256 / OIDC validation) | -| Авторизация | Keycloak (OIDC) или mock при локальной разработке | - ---- - -## Структура модулей - -``` -server.js — точка входа: init + подключение роутеров (131 строк) -src/ - auth.js — аутентификация: OIDC или mock, session middleware - config.js — MOCK_USERS, backUrl() - db.js — pg pool (checkConnection) - queries.js — все SQL-запросы к БД - validators.js — validateCIDR, aggregateCIDRs - middleware/ - csrf.js — initCsrf() → { doubleCsrfProtection, generateCsrfToken } - rateLimit.js — mutationLimiter (30/мин), exportLimiter (20/мин) - routes/ - auth.js — /login /callback /logout /dev-login - entries.js — / /add /edit/:id /delete/:id - admin.js — /audit /admin /admin/limit/:companyId - export.js — /export -views/ - login.ejs — форма входа (mock) или заглушка (OIDC) - dev-login.ejs — тестовый вход (пресеты + произвольные поля) - index.ejs — список записей пользователя / admin-обзор - admin.ejs — admin-панель (все компании, лимиты) - audit.ejs — лог операций -sql/ - schema.sql — companies, whitelist_entries (soft delete), audit_log -``` - ---- - -## Схема авторизации - -``` -GET /login - ┌─ OIDC-режим (KC_CLIENT_ID задан) ──────────────────────────────────────┐ - │ state → сессия │ - │ redirect → keycloak.nubes.ru/realms/cloud/.../auth │ - │ ↓ KK перенаправляет на /callback │ - │ GET /callback → проверить state → exchangeCode → токен KK │ - │ → userFromPayload → req.session.user → redirect / │ - └─────────────────────────────────────────────────────────────────────────┘ - ┌─ Mock-режим (KC_CLIENT_ID не задан) ───────────────────────────────────┐ - │ render login.ejs (выбрать из MOCK_USERS) │ - │ POST /login → CSRF → req.session.user → redirect / │ - └─────────────────────────────────────────────────────────────────────────┘ - -GET /dev-login (DEV_MODE=true или DEV_SECRET задан) - render dev-login.ejs (пресеты MOCK_USERS + произвольные поля) - POST /dev-login → CSRF → req.session.user → redirect / - ⚠ Работает в ОБОИХ режимах — для тестирования с разными ролями - -GET /logout - session.destroy() + clearCookie('connect.sid') - OIDC: redirect → keycloak logout endpoint - Mock: redirect → /login - -Все защищённые роуты: auth.middleware - req.session.user → req.user (основной путь) - Authorization: Bearer → verify JWT → req.user (API-клиенты) - cookie 'jwt' (legacy) → verify → session → req.user (плавная миграция) - нет ничего → GET: redirect /login, остальное: 401 -``` - ---- - -## JWT claims (auth-api, из реального токена портала) - -> auth-api выпускает свой JWT — **не Keycloak напрямую**. -> Issuer: `"auth-api"`, алгоритм: RS256. -> Наш сервис принимает и валидирует этот токен. - -| Поле | Тип | Пример | Что используем | -|---|---|---|---| -| `ClientID` | string | `"WZ01325"` | `req.user.clientId` | -| `company_id` | UUID | `"3e64aac6-..."` | `req.user.companyId`, FK в БД | -| `company_name` | string | `"Тест"` | `req.user.companyName` | -| `email` | string | `"user@example.com"` | `req.user.email` (аудит) | -| `login` | string | `"user@example.com"` | fallback для email | -| `sub` | UUID | `"0199e325-..."` | fallback для companyId | -| `iss` | string | `"auth-api"` | проверяется при валидации | -| `exp` | number | ~12 часов | автоматически | - -**Признак admin:** `clientId === ADMIN_CLIENT_ID` (env `ADMIN_CLIENT_ID`, default `WZ01112`). -`isAdmin` не приходит в JWT — см. [questions.md](questions.md). - ---- - -## Маршруты - -| Метод | Путь | Доступ | Лимит | -|---|---|---|---| -| GET | `/healthz` | public | — | -| GET | `/.well-known/jwks.json` | public | — | -| GET | `/export` | public | 20/мин | -| GET/POST | `/login` | public | — | -| GET | `/callback` | public | — | -| GET | `/logout` | public | — | -| GET/POST | `/dev-login` | public (с guard) | — | -| GET | `/` | auth | — | -| POST | `/add` `/edit/:id` `/delete/:id` | auth | 30/мин | -| GET | `/audit` `/admin` | auth + admin | — | -| POST | `/admin/limit/:companyId` | auth + admin | 30/мин | - ---- - -## Env-переменные - -### Обязательные в продакшене - -| Переменная | Описание | -|---|---| -| `DB_HOST` / `DB_PORT` / `DB_NAME` / `DB_USER` / `DB_PASS` | PostgreSQL | -| `SESSION_SECRET` | Секрет сессии (≥ 32 символа) | -| `CSRF_SECRET` | Секрет CSRF (≥ 32 символа) | -| `KC_CLIENT_ID` | client_id в Keycloak realm cloud | -| `KC_CLIENT_SECRET` | client_secret | -| `APP_URL` | Внешний URL приложения (для redirect_uri) | - -### Опциональные - -| Переменная | Default | Описание | -|---|---|---| -| `KC_BASE_URL` | `https://keycloak.nubes.ru/realms/cloud` | Keycloak realm base URL | -| `ADMIN_CLIENT_ID` | `WZ01112` | WZ-номер администратора | -| `PORT` | `3000` | HTTP-порт | -| `NODE_ENV` | — | `production` включает secure cookie, trust proxy | -| `DEV_MODE` | `false` | `true` → /dev-login без пароля | -| `DEV_SECRET` | — | Ключ для /dev-login в staging | - ---- - -## БД (dev) - -``` -Host: write.bde8229b-1381-4330-b24b-727ad73fcb44.dev.nubes.ru -DB: ipwhitelist -User: super -``` - -Схема: `sql/schema.sql` — `companies`, `whitelist_entries` (soft delete), `audit_log` + индексы. - ---- - -## Деплой (текущий) - -- URL: `https://white.nodejsk8s.dev.nubes.ru` -- k8s namespace: `whitelist` -- Сессии: in-memory (MemoryStore) — **не масштабируется**, нужен Redis при multi-pod -- Режим: ожидает KC_CLIENT_ID/KC_CLIENT_SECRET для перехода с mock на OIDC diff --git a/docs/nubes-design-system.md b/docs/nubes-design-system.md deleted file mode 100644 index 1aaa733..0000000 --- a/docs/nubes-design-system.md +++ /dev/null @@ -1,112 +0,0 @@ -# Дизайн-система платформы Nubes - -> Извлечено из сохранённой страницы `h.h` (deck-test.ngcloud.ru) - ---- - -## Сетка и контейнеры - -| Элемент | Класс | Описание | -|---|---|---| -| Страница | `navigation:flex`, `services:grid` | Flex/grid на всём | -| Карточка | `ui-kit:bg-card ui-kit:rounded-xl ui-kit:border ui-kit:shadow-sm` | Белая карточка, border-radius 12px | -| Заголовок карточки | `ui-kit:bg-brand-grey-light ui-kit:px-3 ui-kit:py-3` | Серый фон `#f3f4f6`, padding 12px | -| Тело карточки | `ui-kit:px-3 ui-kit:py-3` | padding 12px | - ---- - -## Цвета (переменные) - -| Переменная | Назначение | Примерный HEX | -|---|---|---| -| `--brand-primary` | Основной цвет | `#2563eb` (синий) | -| `--brand-gray` | Цвет границ | `#d1d5db` | -| `--brand-grey-light` | Фон заголовков | `#f3f4f6` | -| `--brand-primary-dark` | Ховер ссылок | `#1d4ed8` | - ---- - -## Формы - -``` -form-table (класс services:): - grid-template-columns: fit-content(200px) minmax(200px, 1fr) 0px - gap: 8px 16px -``` - -| Элемент | Класс | Стиль | -|---|---|---| -| Лейбл | `ui-kit:text-sm ui-kit:leading-none ui-kit:font-normal ui-kit:mb-1 ui-kit:ml-1` | 14px, sans-serif, отступ слева | -| Инпут | `ui-kit:h-9 ui-kit:rounded-md ui-kit:border ui-kit:px-3 ui-kit:text-sm` | h=36px, border, padding | -| Текстареа | `ui-kit:rounded-md ui-kit:border ui-kit:px-3 ui-kit:py-2 ui-kit:text-sm` | авто-height | - ---- - -## Кнопки - -| Тип | Стиль | Класс | -|---|---|---| -| Обычная | border, bg-white, hover:bg-accent | `ui-kit:border ui-kit:bg-background ui-kit:h-8 ui-kit:rounded-md` | -| Удалить | bg-destructive, text-white | `ui-kit:bg-destructive ui-kit:text-white` | -| Иконка | size-5 | `ui-kit:size-5 ui-kit:cursor-pointer` | - -Все кнопки: `ui-kit:h-8 ui-kit:rounded-md ui-kit:gap-1.5 ui-kit:px-3`, 14px шрифт. - ---- - -## Таблицы - -| Элемент | Стиль | -|---|---| -| Обёртка | `ui-kit:rounded-md ui-kit:border ui-kit:overflow-hidden` | -| Шапка (th) | `ui-kit:bg-brand-grey-light`, uppercase, `ui-kit:py-1 ui-kit:px-2`, border-right | -| Ячейка (td) | `ui-kit:px-2 ui-kit:py-1`, border-right, border-bottom | -| Строка (tr) | `ui-kit:border-b ui-kit:border-brand-gray-8`, hover: `ui-kit:bg-brand-grey-light/50` | - ---- - -## Иконки - -Используются: **Lucide** (`lucide-*`) - -Часто используемые: -- `lucide-square-pen` — редактировать -- `lucide-rotate-cw` — перезапустить -- `lucide-trash` — удалить -- `lucide-pause` — остановить -- `lucide-play` — запустить -- `lucide-save` — сохранить -- `lucide-x` — закрыть -- `lucide-copy` — копировать -- `lucide-check` — успех (зелёный) -- `lucide-x` — ошибка (красный) - ---- - -## Типографика - -- Основной шрифт: system-ui (Segoe UI, Roboto, etc.) -- Размер: `text-sm` = 14px, `text-base` = 16px -- Межстрочный: `leading-none` (1), `leading-normal` (1.5) -- Цвет текста: `#1a1a1a` -- Muted: `text-muted-foreground` = серый `#6b7280` -- Заголовки карточек: `font-semibold`, 16px - ---- - -## Навигация (слева) - -- Ширина: `var(--sidebar-width)` = 12rem (192px) -- Свёрнуто: `var(--sidebar-width-icon)` = 4.5rem (72px) -- Верхняя панель: h-20 (80px), border-t-4 border-t-blue-500 -- Лого: инлайн SVG, 150px ширина - ---- - -## Состояния - -| Статус | Цвет | -|---|---| -| Успех / running | `text-green-500` + иконка `lucide-check` | -| Ошибка | `text-red-500` + иконка `lucide-x` | -| Предупреждение | `text-amber-500` | diff --git a/docs/plan.md b/docs/plan.md deleted file mode 100644 index 21da68d..0000000 --- a/docs/plan.md +++ /dev/null @@ -1,96 +0,0 @@ -# IP WhiteList — План (pending задачи, 2026-05-30 14:43) - -> **Ветка:** `sonnet` · **Обновлено:** 2026-05-30 14:43 -> Всё что было в старых планах — реализовано. Здесь только то, чего ещё нет. - ---- - -## Блокер 1 — Keycloak OIDC (нужны данные от DevOps) - -Код OIDC Authorization Code Flow написан и готов (`src/auth.js`). -Не активируется пока не получены: - -| Что нужно | Env-переменная | Статус | -|---|---|---| -| client_id в realm cloud | `KC_CLIENT_ID` | ❌ ждём DevOps | -| client_secret | `KC_CLIENT_SECRET` | ❌ ждём DevOps | -| redirect_uri зарегистрирован в KK | (в самом KK) | ❌ ждём DevOps | -| SESSION_SECRET для продакшена | `SESSION_SECRET` | ❌ нужно сгенерировать | - -Без этого сервис работает в mock-режиме (`/dev-login` как тестовый backdoor). - ---- - -## Блокер 2 — Admin-роль из Keycloak - -Сейчас admin = `clientId === WZ01112`. -Как реально приходит `isAdmin` из KK — не ясно (см. [questions.md](questions.md)). -После получения ответа — 1–2 строки в `userFromPayload()` в `src/auth.js`. - ---- - -## Задача 1 — Деплой ветки sonnet - -- [ ] Передеплоить на `white.nodejsk8s.dev.nubes.ru` (сейчас там master) -- [ ] Добавить env-секреты в k8s: `SESSION_SECRET`, `CSRF_SECRET` -- [ ] Проверить smoke-тест: `/healthz`, `/login`, `/export` - ---- - -## Задача 2 — Сессии при multi-pod - -Сейчас: MemoryStore (in-process, не масштабируется). -При нескольких репликах k8s сессии будут теряться. - -- [ ] `npm install connect-redis ioredis` -- [ ] Подключить Redis в `server.js` (3 строки конфига) -- [ ] Добавить `REDIS_URL` в env - -**Блокер:** нужен Redis в k8s (или принять ограничение на 1 реплику пока). - ---- - -## Задача 3 — IP-ограничение /export - -ТЗ: endpoint доступен без авторизации, ограничен по IP на старте. -Текущее решение: открытый endpoint с rate-limit (20 req/мин). - -- [ ] Уточнить: ограничение в приложении или ingress? (см. [questions.md](questions.md)) -- [ ] Если в приложении: whitelist IP через `EXPORT_ALLOWED_IPS` env var - ---- - -## Задача 4 — Пагинация - -При `custom_limit` > 50 таблица станет неудобной. -Сейчас все записи выводятся без пагинации. - -- [ ] `GET /?page=N` + `LIMIT/OFFSET` в `queries.listEntries()` -- [ ] Кнопки Назад/Вперёд в `views/index.ejs` - -Низкий приоритет — текущий дефолтный лимит 15 записей на компанию. - ---- - -## Задача 5 — Auto-dismiss alert - -Flash-алерты (ошибка/успех) сейчас исчезают только при перезагрузке. - -- [ ] 10 строк JS в `views/index.ejs`: `setTimeout(() => alert.remove(), 5000)` - ---- - -## Не делать (закрыто) - -| Что | Почему | -|---|---| -| ~~CSRF-защита~~ | ✅ csrf-csrf (double-submit cookie) | -| ~~Рефакторинг server.js~~ | ✅ 131 строка, роутеры вынесены | -| ~~Автотесты~~ | ✅ 50 unit-тестов (`node tests/run-tests.js`) | -| ~~aggregateCIDRs в /export~~ | ✅ в `src/validators.js` | -| ~~Admin-панель~~ | ✅ `src/routes/admin.js`, `views/admin.ejs` | -| ~~Редактирование записи~~ | ✅ `POST /edit/:id` | -| ~~Аудит~~ | ✅ `GET /audit` | -| ~~OIDC Authorization Code Flow~~ | ✅ `src/auth.js` + `src/routes/auth.js` | -| ~~Session middleware~~ | ✅ `express-session` в `server.js` | -| ~~Dev-login backdoor~~ | ✅ `/dev-login` с пресетами + кастомные поля | diff --git a/docs/questions.md b/docs/questions.md deleted file mode 100644 index e612889..0000000 --- a/docs/questions.md +++ /dev/null @@ -1,70 +0,0 @@ -# Вопросы к DevOps / команде Keycloak — IP WhiteList - -> Обновлено: 2026-05-30 14:43 -> Часть вопросов из первоначального списка закрыта реализацией. - ---- - -## ❌ ОТКРЫТЫЕ (блокируют деплой) - -### 1. Данные клиента Keycloak - -Для активации OIDC-режима (код готов, ждёт переменных): - -``` -KC_CLIENT_ID= ? # наш client_id в realm cloud -KC_CLIENT_SECRET= ? # наш client_secret -``` - -Redirect URI для регистрации в Keycloak: -``` -https://white.nodejsk8s.dev.nubes.ru/callback -``` - ---- - -### 2. Admin-роль: как приходит из Keycloak - -**ТЗ:** Администратор = `clientId = WZ01112` + «отдельный чек-бокс». - -Сейчас: `isAdmin = (ClientID === process.env.ADMIN_CLIENT_ID)` — только WZ01112. - -Вопросы: -- Есть ли отдельный claim в JWT для признака admin? -- Если да — как называется? Примеры: `realm_access.roles`, `resource_access.whitelist.roles`, `is_admin`, `groups`… -- Нужна поддержка нескольких adminов или только WZ01112? - -**Если нет отдельного claim** — оставляем текущее решение, закрываем вопрос. - ---- - -### 3. /export — IP-ограничение - -ТЗ: «на старте может работать без авторизации (по сетевому ограничению)». - -Сейчас: открытый endpoint, rate-limit 20 req/мин. - -- Ограничение делаем в **приложении** или в **ingress/nginx**? -- Если в приложении — список разрешённых IP (env var `EXPORT_ALLOWED_IPS`?). - ---- - -## ✅ ЗАКРЫТЫЕ - -| # | Вопрос | Решение | -|---|---|---| -| DEV_MODE | Нужен ли dev-режим на платформе? | `/dev-login` — backdoor с `DEV_MODE=true` (без пароля) или `DEV_SECRET=xyz` (с ключом). Работает в обоих режимах. | -| Email claim | Как называется claim с email? | Берём `payload.email \|\| payload.login \|\| 'unknown'` | -| JWT структура | Формат токена auth-api | Изучен из реального токена (см. [DEPRECATED]-auth-architecture.md). Поля: `ClientID`, `company_id`, `company_name`, `email`, `login`. | -| CSRF | Защита POST-форм | csrf-csrf (double-submit cookie pattern) | -| Session | Хранение пользователя | express-session (httpOnly, sameSite lax, 8ч) | - ---- - -## Условные обозначения в коде - -```js -// TODO(KK): уточнить формат claim — см. docs/questions.md#2 -// FIXME(KK): временно, заменить после ответа команды -``` - diff --git a/h.h b/h.h deleted file mode 100644 index 6ce44f3..0000000 --- a/h.h +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - - - - - - Личный кабинет - - - - -

ЭкземплярNodeJS:white
ЭкземплярNodeJS:white

Мониторинг

Операции
Показано 1-9 из 9 записей
#Uuid операцииНаименованиеДатаОбновилКод ответаНачалоОкончаниеДетали
1
404b0bd7-a542-4fb7-b30f-2be3f2579df3redeploy29.05.2026, 23:41:21Тазетдинов Н. Ф.20129.05.2026, 23:41:2129.05.2026, 23:42:22
2
171fb0a8-00c8-4f84-866b-72fe8f529179modify29.05.2026, 23:31:43Тазетдинов Н. Ф.20129.05.2026, 23:31:4329.05.2026, 23:32:52
3
32391641-278a-41a2-8dd1-c9919d4c0c6fmodify29.05.2026, 23:21:06Тазетдинов Н. Ф.20129.05.2026, 23:21:0629.05.2026, 23:23:09
4
f5ce18db-54cf-494d-82ea-541797ff11famodify29.05.2026, 22:51:18Тазетдинов Н. Ф.20129.05.2026, 22:51:1829.05.2026, 22:52:21
5
7814a802-f869-4a9f-9aed-09a7412297e4modify29.05.2026, 22:42:09Тазетдинов Н. Ф.20129.05.2026, 22:42:0929.05.2026, 22:43:26
6
74fe93a7-4bf6-4ccc-bc99-89b2058690c6modify29.05.2026, 22:25:56Тазетдинов Н. Ф.20129.05.2026, 22:25:5629.05.2026, 22:27:01
7
6967bdee-6d2c-461c-85c2-3a8ae977fd17redeploy29.05.2026, 22:20:19Тазетдинов Н. Ф.20129.05.2026, 22:20:1929.05.2026, 22:21:30
8
17fdb5ec-efcf-4d8f-b7f3-c4a0d0788635modify29.05.2026, 21:58:31Тазетдинов Н. Ф.20129.05.2026, 21:58:3129.05.2026, 22:06:43Приложение не запустилось. Производится полный откат установки. Ошибка: jlib.k8s [correctReplicaActive] | ERROR | Под(ы) не работают: 'nodejsk8s' (Deployment).
9
3b3a5a18-2cd4-46ed-b3d4-24bf14a5d476create29.05.2026, 21:31:16Тазетдинов Н. Ф.20129.05.2026, 21:31:1629.05.2026, 21:34:50
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/nubes_login.har b/nubes_login.har deleted file mode 100755 index 393661a..0000000 --- a/nubes_login.har +++ /dev/null @@ -1,31257 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "WebInspector", - "version": "537.36" - }, - "pages": [ - { - "startedDateTime": "2026-05-30T04:35:11.910Z", - "id": "page_1", - "title": "https://lk-api-gateway-test.ngcloud.ru/api/v1/iam/auth/login?back=https%3A%2F%2Fdeck-test.ngcloud.ru%2Fauthorization%2Fcallback%3Fback%3D%252Fdashboard%252Fauthorization%252Fdashboard", - "pageTimings": { - "onContentLoad": 338.9430000097491, - "onLoad": 736.3020000047982 - } - }, - { - "startedDateTime": "2026-05-30T04:35:14.274Z", - "id": "page_2", - "title": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "pageTimings": { - "onContentLoad": 525.5030000116676, - "onLoad": 845.2479999978095 - } - }, - { - "startedDateTime": "2026-05-30T04:35:24.677Z", - "id": "page_3", - "title": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=2kc0mL7OTNRd6s1DdXCoOTeAzBzXysT6SAeoKPb_e9Y&execution=68334692-b437-4f1f-a82b-95b3acd70eb1&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "pageTimings": { - "onContentLoad": 502.47399997897446, - "onLoad": 852.7490000124089 - } - } - ], - "entries": [ - { - "_initiator": { - "type": "script", - "stack": { - "callFrames": [ - { - "functionName": "login", - "scriptId": "85", - "url": "https://deck-test.ngcloud.ru/s3-mfe/auth-service/0.2.36/spa.js", - "lineNumber": 0, - "columnNumber": 20039 - }, - { - "functionName": "a", - "scriptId": "86", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/pinia-3.0.4.js", - "lineNumber": 5, - "columnNumber": 18820 - }, - { - "functionName": "w", - "scriptId": "130", - "url": "https://deck-test.ngcloud.ru/s3-mfe/authorization/0.2.22/assets/LoginPage-9dganW-Z.js", - "lineNumber": 0, - "columnNumber": 4651 - }, - { - "functionName": "tG", - "scriptId": "79", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/vue-3.5.33.js", - "lineNumber": 5, - "columnNumber": 22425 - }, - { - "functionName": "tX", - "scriptId": "79", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/vue-3.5.33.js", - "lineNumber": 5, - "columnNumber": 22493 - }, - { - "functionName": "l", - "scriptId": "79", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/vue-3.5.33.js", - "lineNumber": 5, - "columnNumber": 91166 - } - ] - } - }, - "_priority": "VeryHigh", - "_resourceType": "document", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://lk-api-gateway-test.ngcloud.ru/api/v1/iam/auth/login?back=https%3A%2F%2Fdeck-test.ngcloud.ru%2Fauthorization%2Fcallback%3Fback%3D%252Fdashboard%252Fauthorization%252Fdashboard", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "lk-api-gateway-test.ngcloud.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/api/v1/iam/auth/login?back=https%3A%2F%2Fdeck-test.ngcloud.ru%2Fauthorization%2Fcallback%3Fback%3D%252Fdashboard%252Fauthorization%252Fdashboard" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0, i" - }, - { - "name": "referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "document" - }, - { - "name": "sec-fetch-mode", - "value": "navigate" - }, - { - "name": "sec-fetch-site", - "value": "same-site" - }, - { - "name": "sec-fetch-user", - "value": "?1" - }, - { - "name": "upgrade-insecure-requests", - "value": "1" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [ - { - "name": "back", - "value": "https%3A%2F%2Fdeck-test.ngcloud.ru%2Fauthorization%2Fcallback%3Fback%3D%252Fdashboard%252Fauthorization%252Fdashboard" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 302, - "statusText": "", - "httpVersion": "1.0.20, 1.0.345", - "headers": [ - { - "name": "content-length", - "value": "0" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "date", - "value": "Sat, 30 May 2026 04:35:11 GMT" - }, - { - "name": "location", - "value": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9" - }, - { - "name": "referrer-policy", - "value": "origin" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "version", - "value": "1.0.20" - }, - { - "name": "version", - "value": "1.0.345" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - } - ], - "cookies": [], - "content": { - "size": 0, - "mimeType": "application/json" - }, - "redirectURL": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 476, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.178.210.252", - "startedDateTime": "2026-05-30T04:35:11.908Z", - "time": 30.501999950502068, - "timings": { - "blocked": 4.785999981641769, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.45100000000000007, - "wait": 21.465000021200627, - "receive": 3.7999999476596713, - "_blocked_queueing": 2.1379999816417694, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "529398", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "script", - "stack": { - "callFrames": [ - { - "functionName": "login", - "scriptId": "85", - "url": "https://deck-test.ngcloud.ru/s3-mfe/auth-service/0.2.36/spa.js", - "lineNumber": 0, - "columnNumber": 20039 - }, - { - "functionName": "a", - "scriptId": "86", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/pinia-3.0.4.js", - "lineNumber": 5, - "columnNumber": 18820 - }, - { - "functionName": "w", - "scriptId": "130", - "url": "https://deck-test.ngcloud.ru/s3-mfe/authorization/0.2.22/assets/LoginPage-9dganW-Z.js", - "lineNumber": 0, - "columnNumber": 4651 - }, - { - "functionName": "tG", - "scriptId": "79", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/vue-3.5.33.js", - "lineNumber": 5, - "columnNumber": 22425 - }, - { - "functionName": "tX", - "scriptId": "79", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/vue-3.5.33.js", - "lineNumber": 5, - "columnNumber": 22493 - }, - { - "functionName": "l", - "scriptId": "79", - "url": "https://deck-test.ngcloud.ru/s3-mfe/root-app/0.2.25/libs/vue-3.5.33.js", - "lineNumber": 5, - "columnNumber": 91166 - } - ] - } - }, - "_priority": "VeryHigh", - "_resourceType": "document", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0, i" - }, - { - "name": "referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "document" - }, - { - "name": "sec-fetch-mode", - "value": "navigate" - }, - { - "name": "sec-fetch-site", - "value": "cross-site" - }, - { - "name": "sec-fetch-user", - "value": "?1" - }, - { - "name": "upgrade-insecure-requests", - "value": "1" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [ - { - "name": "client_id", - "value": "deck-test.ngcloud.ru" - }, - { - "name": "redirect_uri", - "value": "https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback" - }, - { - "name": "response_type", - "value": "code" - }, - { - "name": "scope", - "value": "openid+email" - }, - { - "name": "state", - "value": "b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "no-store, must-revalidate, max-age=0" - }, - { - "name": "content-language", - "value": "ru" - }, - { - "name": "content-length", - "value": "4827" - }, - { - "name": "content-security-policy", - "value": "frame-src 'self' https://*.ngcloud.ru admin-dev.deck.nubes.ru admin-test.deck.nubes.ru admin.deck.nubes.ru; frame-ancestors 'self' https://*.ngcloud.ru admin-dev.deck.nubes.ru admin-test.deck.nubes.ru admin.deck.nubes.ru; object-src 'none';" - }, - { - "name": "content-type", - "value": "text/html;charset=utf-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "ALLOW-FROM https://deck-dev.ngcloud.ru" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 4827, - "mimeType": "text/html" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 7046, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:11.938Z", - "time": 65.89900005331634, - "timings": { - "blocked": 6.724000014841557, - "dns": 16.051, - "ssl": 8.128, - "connect": 29.010999999999996, - "send": 0.9720000000000013, - "wait": 9.149000025816264, - "receive": 3.9920000126585364, - "_blocked_queueing": 1.0110000148415565, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "lineNumber": 11 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/base.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/base.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-length", - "value": "6133" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 42733, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 6351, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.013Z", - "time": 112.16399999102578, - "timings": { - "blocked": 43.088999986533075, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 3.228999999999999, - "wait": 45.30999997903407, - "receive": 20.536000025458634, - "_blocked_queueing": 14.789999986533076, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "lineNumber": 12 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/app.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/app.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 1282371, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 114588, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.014Z", - "time": 132.50399997923523, - "timings": { - "blocked": 43.253999973073604, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 2.588000000000001, - "wait": 41.21600000244007, - "receive": 45.446000003721565, - "_blocked_queueing": 15.437999973073602, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "lineNumber": 13 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 182755, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 31946, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.014Z", - "time": 109.24800002248958, - "timings": { - "blocked": 43.639999993406235, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 2.0770000000000017, - "wait": 40.98299999187887, - "receive": 22.548000037204474, - "_blocked_queueing": 15.669999993406236, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "lineNumber": 14 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly-additions.min.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly-additions.min.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 225030, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 31144, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.014Z", - "time": 104.50800001854077, - "timings": { - "blocked": 43.9830000288114, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 1.6119999999999983, - "wait": 37.378999990209934, - "receive": 21.533999999519438, - "_blocked_queueing": 16.011000028811395, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "lineNumber": 15 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/lib/pficon/pficon.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/lib/pficon/pficon.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-length", - "value": "323" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 577, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 531, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.014Z", - "time": 111.6209999890998, - "timings": { - "blocked": 44.29400002512335, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 1.1479999999999997, - "wait": 57.09000002296269, - "receive": 9.088999941013753, - "_blocked_queueing": 16.301000025123358, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/auth?client_id=deck-test.ngcloud.ru&redirect_uri=https%3A%2F%2Fauth-api-test.ngcloud.ru%2Fapi%2Fv1%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9", - "lineNumber": 16 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/login/keycloak/css/login.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/login/keycloak/css/login.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-length", - "value": "2714" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 10274, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 2923, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.014Z", - "time": 110.72700005024672, - "timings": { - "blocked": 44.66300000075996, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.6760000000000019, - "wait": 41.880999985940754, - "receive": 23.507000063546002, - "_blocked_queueing": 26.26600000075996, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/login/keycloak/css/login.css" - }, - "_priority": "High", - "_resourceType": "image", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/login/keycloak/img/keycloak-bg.png", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/login/keycloak/img/keycloak-bg.png" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=1, i" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "image" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-type", - "value": "image/png" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 81862, - "mimeType": "image/png", - "text": "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", - "encoding": "base64" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 82273, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.176Z", - "time": 35.35199997713789, - "timings": { - "blocked": 7.806999960049986, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.5950000000000006, - "wait": 7.877000013969838, - "receive": 19.073000003118068, - "_blocked_queueing": 1.2789999600499868, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - "_priority": "VeryHigh", - "_resourceType": "font", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "https://keycloak.nubes.ru" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "font" - }, - { - "name": "sec-fetch-mode", - "value": "cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "application/octet-stream" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 61980, - "mimeType": "application/octet-stream" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 60733, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.253Z", - "time": 198.00800003577024, - "timings": { - "blocked": 71.73199999078736, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.5759999999999934, - "wait": 19.573999988008296, - "receive": 106.12600005697459, - "_blocked_queueing": 2.207999990787357, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - "_priority": "VeryHigh", - "_resourceType": "font", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "https://keycloak.nubes.ru" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "font" - }, - { - "name": "sec-fetch-mode", - "value": "cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "application/octet-stream" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 63180, - "mimeType": "application/octet-stream" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 61693, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:12.253Z", - "time": 198.46899999538437, - "timings": { - "blocked": 73.85899996088072, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.5739999999999981, - "wait": 16.808000026468193, - "receive": 107.22800000803545, - "_blocked_queueing": 2.5709999608807266, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_1" - }, - { - "_initiator": { - "type": "other" - }, - "_priority": "VeryHigh", - "_resourceType": "document", - "cache": {}, - "connection": "443", - "request": { - "method": "POST", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "POST" - }, - { - "name": ":path", - "value": "/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-length", - "value": "66" - }, - { - "name": "content-type", - "value": "application/x-www-form-urlencoded" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "null" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0, i" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "document" - }, - { - "name": "sec-fetch-mode", - "value": "navigate" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "sec-fetch-user", - "value": "?1" - }, - { - "name": "upgrade-insecure-requests", - "value": "1" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [ - { - "name": "session_code", - "value": "IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA" - }, - { - "name": "execution", - "value": "2c2a6790-1103-4add-bf11-2ac2565d09d2" - }, - { - "name": "client_id", - "value": "deck-test.ngcloud.ru" - }, - { - "name": "tab_id", - "value": "mHDuRGQKiZU" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 66, - "postData": { - "mimeType": "application/x-www-form-urlencoded", - "text": "username=tazet%40narod.ru&password=seCVZj%21V5WsEjaB&credentialId=", - "params": [ - { - "name": "username", - "value": "tazet%40narod.ru" - }, - { - "name": "password", - "value": "seCVZj%21V5WsEjaB" - }, - { - "name": "credentialId", - "value": "" - } - ] - } - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "no-store, must-revalidate, max-age=0" - }, - { - "name": "content-language", - "value": "ru" - }, - { - "name": "content-length", - "value": "6501" - }, - { - "name": "content-security-policy", - "value": "frame-src 'self' https://*.ngcloud.ru admin-dev.deck.nubes.ru admin-test.deck.nubes.ru admin.deck.nubes.ru; frame-ancestors 'self' https://*.ngcloud.ru admin-dev.deck.nubes.ru admin-test.deck.nubes.ru admin.deck.nubes.ru; object-src 'none';" - }, - { - "name": "content-type", - "value": "text/html;charset=utf-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "ALLOW-FROM https://deck-dev.ngcloud.ru" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 6501, - "mimeType": "text/html" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 6989, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.272Z", - "time": 175.00699998345226, - "timings": { - "blocked": 3.867000015474856, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.7009999999999998, - "wait": 163.51000000150128, - "receive": 6.928999966476113, - "_blocked_queueing": 2.066000015474856, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "lineNumber": 11 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/base.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/base.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-length", - "value": "6133" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 42733, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 6351, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.470Z", - "time": 105.41400004876778, - "timings": { - "blocked": 54.941000029940156, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 3.112000000000002, - "wait": 7.544999985657633, - "receive": 39.816000033169985, - "_blocked_queueing": 14.123000029940158, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "lineNumber": 12 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/app.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/web_modules/@patternfly/react-core/dist/styles/app.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 1282371, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 114597, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.470Z", - "time": 203.9760000188835, - "timings": { - "blocked": 55.21200005263835, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 2.567, - "wait": 10.938000022046268, - "receive": 135.25899994419888, - "_blocked_queueing": 24.270000052638352, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "lineNumber": 13 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 182755, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 31973, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.470Z", - "time": 152.1739999880083, - "timings": { - "blocked": 55.57000001766905, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 2.1000000000000014, - "wait": 7.681999987408517, - "receive": 86.82199998293072, - "_blocked_queueing": 24.747000017669052, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "lineNumber": 14 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly-additions.min.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly-additions.min.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 225030, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 31162, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.471Z", - "time": 153.58300000661984, - "timings": { - "blocked": 55.939000011000786, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 1.6329999999999991, - "wait": 10.697000028435141, - "receive": 85.31399996718392, - "_blocked_queueing": 25.587000011000782, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "lineNumber": 15 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/lib/pficon/pficon.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/lib/pficon/pficon.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-length", - "value": "323" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 577, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 531, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.471Z", - "time": 155.11200000764802, - "timings": { - "blocked": 56.277000009864565, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 1.1819999999999986, - "wait": 12.222000012818725, - "receive": 85.43099998496473, - "_blocked_queueing": 25.99200000986457, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=IvKu1Q08n1X5QBHpIQ6OaeEAhlLlA5dQLMvJEopCOIA&execution=2c2a6790-1103-4add-bf11-2ac2565d09d2&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "lineNumber": 16 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/login/keycloak/css/login.css", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/login/keycloak/css/login.css" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/css,*/*;q=0.1" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "style" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-length", - "value": "2714" - }, - { - "name": "content-type", - "value": "text/css;charset=UTF-8" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 10274, - "mimeType": "text/css" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 2923, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.471Z", - "time": 102.59300004690886, - "timings": { - "blocked": 56.364000015124674, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.6550000000000011, - "wait": 7.352999978329986, - "receive": 38.22100005345419, - "_blocked_queueing": 26.11500001512468, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/login/keycloak/css/login.css" - }, - "_priority": "High", - "_resourceType": "image", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/login/keycloak/img/keycloak-bg.png", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/login/keycloak/img/keycloak-bg.png" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "i" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "image" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-type", - "value": "image/png" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 81862, - "mimeType": "image/png", - "text": "iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AISCTUnUqoxBAAAIABJREFUeNrsndu2q8iRRRGi/e/+3x52HQFSP6SLxiBQkuQlLnM9eFSVz9lbiozLikUQ+fjnP//ZecI4ju/3u+1nmOe53Gd4/I0OiMTr9fL2lT+fzziOn8+H09eSJDGCQ0zTNM+zhHTBWagranlP7fP53ORIz+ez73sn5bU5p1WHeZ6naap/UiQ3sMf7/S7aFWb5hD8bz+fzaZIME7Ml4FamqBPmr9cLVgCyuGskU3o+n1cjenBlSgnqc9d1fd+X+xiB4/Z9jwbttvZIa48dau64KNDYA2MHYCO9B2d2okGDQj0VAEWTZ9CdDUic4TGYsXxr42jEOkzXdcgUhfyWPg5kJNKREY0AfQgh6nOdnBuoAMldYGHwlrzo9KzWG2CsPmIEcLWHlPxw0YkGDc276rRwEtC8ERA+8pz2pYyNtUKGS6dib/WrwvMMRr5AxpRe1GMHJzE/TZOoYv94PEpnosAGmACSFs9+vqyQN/oBhBucQxRhrVAcQZZaJv+hhR8NmpCJRMN36jkjcqZS3Tkyw7zfbzOLOBh/rpYSeYaat8BhBJAFlx7VJ2RL+wK0zP2zdRoGk29FqSY0flgFq9M0nhrvbTnEPM+EKrjqM1rGSD1o0AjQkci+rByAGGY1z7OHp/vhm9rQoJnGqOYzCNAZRQaaOKAlARoXoMUKYUXXQG8sYO/FKL21wQmf4A0g6g3QkpR4IR1cTRSlfSYvXWEfNOi6bpom1GdQubzaW7UR03JqT7aMP1f2GScCRVGnovUGDQUBJqC35hA7hlkz23ItoYfaI4e38QYQhBtoAdEKLkHpYiU0aPyWJ6ygGpvypjtvvr72TEuuqN8amxcoSndYqM9AVwI0K0CHwS7Jkkrltya5lrC5Q5oX+OjxVPsnRvAGCCvwk+ENa9Dwup9H39xveb5rHn5WbcREnN5FHExjtEqPFLI73AynBXnZckIUXwphmwK0ijHM+mv7uJawrU/aZg/S7vkEEG5wzjDEHjo7bQViHEftGd62Bk3InJAT7ACKMigEoE3Q6Z2D5hFCK5/p0KCpcUBtAkSAVrMEoNoaaDO0wEBxtfrVuHLQZ70Bqhtm7AAiUf/2tkKKqlUNGgH6CGwZAuXKqOdVGz+No/HyIaYxmrfJVjXocn7Fu4xAoyBgTYBWtIK2VZLlWkI4jc+IA0cniBG8gZgFl9obS/WLfdC4LgB3eihvqzbSnm/N8zwMykQGpjGaBxfSxCXw7gUQkgCv+qEpAVqdFtZqaIVrCesb3Grlg655rjdAIxiXAPGVy+TbLWjQThKdHNdFI7CRNySvrpJpMUXLoDlcIanSnjRRyK9YvgH0CgKDJaupi8O2b01yLWFNU9urply3QrEBGk+cFgtEJnnDzyqMadAQuQ2YCwMZCTyrNpKLiKKtjxyxEJ+hokWCaRIgRxBwOgGtUX3uGq2B3pRbriWsUE2NNUIsfbbUG2AHV420lkLJTtvmycF8b2NPgyZkAng3C2Qpl0F6xhT320z5eiLP5kXRj86WBl3CtXjICkpQ4pt+Hh+2gw2TKX0HQUJ65VrCCvTLGDPgoSvFBmgEL+sBLZyqjpzKLg6T3ktpA/ddCHEnV0J+v9/yF3EwjSGt0+yYgz61D3weqG4P1QvQetXnml3Wz0TGtYTQmsjvwvVlZo6S/soVeGsBeOBUCd+3M6FBMwFNWw5ukiJWbRSKSuHLoHneINNtOhMadAnXYg4MZC9/WVzdywS0gffshPQMXEtY1LA2vguvtVoCR+ntuOmrQYyfONTvmIM2A5kPyNG2hDferNqoEAKS37WFHYl1G0SJr804NQXk9aj6VEexAD2Oo4Ga0XwN9KYGsxKaxuPrt2B80ljHhRFcZSGmAkEMB3WrwhjQoGnUX68XLAVcyni8Cla5wRSYphh/Fk5fKW2bOILPAwOagFYB2ob6LLBnYCW0gajO7hK87GMMDPu4gtK1OawUgFPVz4qQH6VAfQbxtJxXglpZXuAiDjxBeAfaKX+8mrcwsQYT5EWr5xkqBWhjnZK0NhsNOq8ltfNFqp0xoD67Au8ugJ9AvFvnRr3kx+0zG15JBjFsFt25eU8kbRk0488q3KZTq0FnV59xV5C9Mjbx9kFdJId3piydvcCegWsJBRaeJk0dYqU9n6QB8wP6bfATqM+bkOnUatA+BWj5RIX4amv8eZ6hsqIoqJwEC0FS1E07VyRYVQ9K0KfsoRoZp5oEaKuLaEWtgV5bm2sJ3TIbk096QMf4szPKzqo4cA7U56MkyUtgWg6LogaOGDiPYHMh48MtOeNNjD/rIrTO5QheRwYlqmSrOFUjQBu+Bk1ySuVawjseq5T4cuWg4UrDscJWAejEL/dvy4vQoLX4MM/YwJ7noDvLPyMJizhwEnVuo64o5+q56MqBsSZx0BLAtmNP8ouTrIRuW3XqF3h0K6tgUswVsTBQMbmHsFx54mrZmGypi/l4GxCDq4B1TmMcXtdhtdWgGX9W6jkO56BZvgFKhFKJBBj/MwcVNjL/5Ed4m40GnVYw1H1mlj7jkMAAmP8C56kA5S4yjjqFGrQTVUXL9hhErgoJjVso1aF5XwlHUuo2nZ5HrRnHnzl6kBfN3x6TLkA76ZTkJ1OuJbRNbhgeMQ8O1w9B57V0cJIHcI+raVORBu1EgGZ3OWDVhvbc0lCAZvxZNcXtPL3uw/INUCKICjmVkQloP3M6KjIp1xJecl1dmYgKh0MCM2wVI4Cjrhv1OcFoHfugJYFxV+edM9MSlrJrk0UcUGLtSaBTMrp331HJdaAEiWr+GeQK0K7eEg2TxSooNdcSGiM3LAN10rBhBw+w9ySJNdAZGaeuPCDn6NGg5QDx0TOv5tmDPXZafw6a8WcbnmN+GI72HBTyq6IJMDI2hQrQDncUKmqzWQkd48BaPifzkngjsAHeRwZHGMcR37gZXJ0GDdp2Tx4kSHXNHuFz89ApbbbPt+Z2x9DAYnYDEK5B38/8vK8GSqC0XykWoH2+JaqrbUCDPqdTWnIQk0QeKBps28lBw1bBV6A+56KmnRIN2qToGXaF4Yd+iDSvn/tJrcMwVPMrngmZqQid3WeuZD9QKGqEJEBxArTbHYXqcijXEp6UDRWNHCTMCbPHCB6ANAO+guvasqdT4Rq0VQGaFOcnyliS4PDQKyyDZh+dMVjVoFm+AQqhgsQaWbtlCdCeb8hRtAZ67WRcS5gcew0/HuqzEzDr4YdScNBgD9Xqs0xGxD5oPBkUoius2nCbkOu8Vot3We24BaoQd4KF1xlBIZ+Uw6MECdDcz650boVrCTfWkHyILH12BWY9nJyy7YPmHsI0osmDxqJ5Fc5TDXrVZwIwhpTysjnoyi+DZvzZMNvphGnQdzI/+RAUQh2VVdkENOtoO81vkbASel05JKceogxXBFAKYL4f4/3NopCsQRt7I43XOwxXLl7SAhvWWm4RB5TYNuexUfggb6BcAhRVbUUI0NyQY6BtQINe7CDzUwWuT5T5AQ8bPACqCvYsk9dcqiVYsRq0DV3P/OsdPhMUqzbAUatSaBk0488enMeABs1ACTCgCcQEY3sBGvV53TOobhu4llDUep31p+JdbCoNsAdmA8E+8GlgKqdZnrsXwvv9xpktnSa6s4EutTTlKDTMhON5aMA7MZN8aWHC8g1Qrv7W7BYVCNCoz/Wre2mf83wtoUBnZhrOJw8jrzrp57EDWID63MTmnTwN2sAEdHhwjoMZAKs2wFVuk3eSifFnP71PJ0CDTst1LN8ApZmqKLQUoFGfv7YNZtiDw7Egaf6MHkGlAVbhSp3hHkKyvfB8yxw0+e2rpuD2BBl5BnecJ+MiDpzQDwReSAilB83TaWUqEvPr2gjQ7AQ4abPN1ABvK6FF7d8ID/wRIqk0wCQYlABrcMFsW0jToLUzydfrRRXTy0DQnUGWFiaLBs34s0PnUVcE3+83ORMUJajS0ECARn0+bxvMjHp506DlFA9CjEoDDIPVz2ANqy+T6WogBWrQSrME6rNSws/QAxDYQqLr+XSehvzhav1i+QYohyZDaRInoJHGDLcNRwTCybWEQk6NSua80mAE80dMkw8WoNbJAbs47oOna0pLEtwDlHCtm/0j489u0VaDvgSWb4DSvFQghsrpAPX5J4xptU6uJRRy7RtXDlJpMIJtEOBgAeqzzAwsQYPWOMpgbITWdmyiO4M6bnZnEQf+6RatFnFcTfss3wBFOVUrHvLzCVA9Afr9fjPaENk2mOQQtq8llODYrAGFqWME2/D8cgP3EG4qDo/zxTL+jjno1B4BO8jPPKzaoApX9rc0DZrxZ5JVJ1tU4ZVlUIGOtvJtEQI0g5mXCrzJTtv2Sui22h9iBIBqe2ASxDigadFC+tuyHV2jDJ/PB/VZPstliggoah6ZyQDCNWiUMVCaiIpFDQEa9TmhczBJ8qxq0G33b6A+g47lGz6af+wAXKnPerkQc9BX+3A4jNjSw6oN0NwJr+ZSZjLA4gldRQ06vpCxfAMYlgV+BkJxARr1Oa3pMlwJ7F1L2LBxIr5A1+iWW1AThDkIhJLnELrYf0MNWot8b3WVueovxaoNIC2dXlrEgbQH1tmsjuYQn/N5jw1U4J+SMZT+/jRLaW2D7Upg7FrCVkSHpc8Aqu0B8FQAodLbA7TSoFUI0Mw+C6QTrNoA0rLKpTdoGX8Ge5cQpTkwUwIqkM+2EXf+B4aiX55mKbnAe+C4Zq4lrC//hYWJyI6gY/zZAY3gfNu2vkLcAEKltw1gF8dXQGNEEQlWbQD5bWNMg4z6DPZdcydGXaHwgQq0U0LQnUTcUO7L0yzRaf90TQMroZuozwwNAai2k46LSgrcvuxigwihQR+ZheIlocQE6RlTABVJYxiGmNYSW4G9Y3SFNegYusKNuwBZoCskQKM+30ff9x4YoQENujLRYekzaOh+oDIIdjCOI2Fuox+oTHUkv0tn/tGa/Acn4QEAowxAXS49XwbN0xRwnpYLVcbIXMpKPVCBbQoJt6oT0KjP5juH7A46z7PeldA1pQGCC0C1/QCeCqzez+Y2V9fXoAX6DyNgbSkrqzaA6p7xZG6J8Wfw03+6dhoL6/WBH1ng3NUzC9CM6mRsG7xxYo0adDVv50ZyILnMgBKHC0/9Whn9mAX12WTGrqlBy4wXdog1Iaus2gBmnPloGTQeDmIa6iZqA09eQWkocrCcAjTqM532fUqhax1HHYdn6TP46hXkW8OHC091DtRnk2AfNI5dvyPlpmJgr2HcL+KAFYN4jp1dg/6ZY3mpEVRIjFo+ajYBGvU5O5ysgd6zB0W9WQVO//l8KFpgDwY9DIPVz85bI3K++dTtU4P28yi9+ddk1QYoASGjUeGt0I0GDSsGl/JzzTlolm+ACj6miAXlEaBRnwuVeZ9VQYsGXWGohCsHQSvfA63A6w7O+yLUZ/OopkGLopFhFJfTL80N0J2Bw26R8Wdw1X8ylshz0s5LjaBO9RcYZUchNtz/0XBKD51DZX9VcS1habefponn+eArcAzDJ0s99UwfeeLoKofX0aAlPNDiEosKtJkn08BbxVyWQZNeQELa7KqILUwVgNKQ+YSjlADNalonnUMrYiFcgy53NDzXAeehgRGssmGmJNyWxXmeOX1XqKNBS4iX9/uNb5ezLY8tgWf/fzwe4zi6ndkC9xv5+85zUmRZvgFQBvYY7gQb6nNpOFwDvScWMtdxfD6fQs5PZIFzMOhhFUy/eg5qFLo9zGsKHvZB81ytED1Gdwat0rKcDiV8kv/93/99Pp/P5zPk0vC/6q61B61cqBzT4OErqACxPnZSKYbkn4hGRvdVx3dlroQuxPt5BRucA/XZKiipnrkjce08pRsWShxmtqKvx7HMBIClYwpvi4bbCI9CY1nTEf7Y8q/yNz2Cahn7jiecJHw6elAnE6r7zENapNEq1wGlsZOqQZeIdmQIEBML2MEemGVzC9I+KKpBt6WRr9eLZiEX56RMANDtHsMs28+Dvvz1z4csdBQ+QZJe9GgGqB16VIlaiVYG6jQRwiPrKy4L0ExoVobnNdAbtiHnYXX2/RssfQbxOgWwl994R88nxnEk7YOuvAbdhEbSft8HujMAm2ZwzYSD9Px4PMI0dN/3CVk09HTn8nS3G6A+0ruBUtfqsmrQIXVjWFDab5XSg+FqOKE+V4bzNdAb9xOiQeeNdl4pAJFeh5OYBFX1Kmw8l2U41M9Zx8DYLg6eqd+khazaAGBNgL9e5hZiZGkMz0ehk4ORAWonWbdL0qC/UhSIPahDtOSH1deYuiBAoz636r4wwtoJJRT1jP3w5/N5vV6cLIhxfoxgDzx88gnUZ7BHIQ26vojvXDy9Y+0joQ0An6F0kkzW/33JcuGVsrRR6OQPGT9AvXwqBqhl+ttV1eVIfSaHgzqZR2lMxQrQqM+tgAC9d+W2K6Ezvu8wzzOv3oPIDAybsQferfZZwmhOwElO6JTPQQcJlaO8ajTKAdDSllaoXzGbCdf/7+ZTlRiFTv4i5wPUIdszQC2Hod0UXli+AepANdGKEqCRyTwUe13loaEGneUseL8SJKgSwFgeo7A6PHReeQEx2T4jw6k5x0Bau4T3+41aAcA6gYQc8rPV2uSZfZaTdnvQSRLofu33WPRo5Ok6Pf4dn2FeE1RLlVoCao/fAjTqc3OwBvqrQ7ciFvdHVJiAA5VdDkg70MfjAUl1WLZQn6/C5wP4Ehp0HTPCbeKPeJ5nbAXAuq2L7Hb34svXZjD8zMfjoXffxfJNjywTysTyBTfz1CDN5l20Br3xQyogqAPt2uzwkyGhPktowDDCV9S/lvD+/g00CJAmRgBL+Pe//80GwJtlURfLh02BhLSva8yNzebdr5fkWLUBwD5krt5Z+rWYHrECLaPQyY1wxwB1mTR+1WF4nQVU808tXCtlApp+SU6njRFO0n3NUnoz4NmlDtJkCGAspcP+vUUxbAqkJf8suaLCAxsmv865H9oEsMRh7gd7GOhJeA/gKI5OPtWiQXujXucD1JsLEpd/ZYC6i9Og1/4WXm4mOYAKMNBQDCffDapkrNgbLhLVVkLfmVshpkCab2MHpaR/ffnM+haacElXkKGHYYDo2wbqM7jjPJ2GOeirA4yuTpBVGwBsCNKdW3BOpn1//sXP54O6umGqHQPUx/aJd5WYxeUAZAxb1XH0XYAexxEqKQoI0D+du44GnRYXCe+XAdAx/iy7/B/pyzHHusykLAsKh2HAsPbAc0eQpQrcpDdFBRduVN5Uh45VGwAc9FA34+Ik1cRkObej0He4bndxgNrSfrlzDXpRZnjBBdRsKwwE0ZeOF/VZIPq+51AiWUW5RitZfebVVJDmb7hNQ86drC///OHh5ywlOTygmqbp+Xw+n0/6IjOATYEskDwHHd7n4Iy6v/dshHyONQDY0J77rwL8fCkwclqLUeiMVLn7NUC92FnjAHXkIg7udgIoA5cw0C+pADUyPjLLUYqE0GDpM7gpOoBCpLmQvnwnjawHop/PJ2n/Z1mUzMO4kA1kLwd3+vYS8eJcbA1FJFSQZb3S8i5L2jVWABiLkYxvSPz8OfFZjlHomhny6LDWE9PLQUgboD7K5Iun8cQRoAz8jKANhg2PRH2m2daOctcSXo0OXr4G1ZwNbChvK335Env4+l7SMhDd931QojlTdUB9BoVSRzK3KcEhHb7dFQrKojvvzyhebjs5yiPZepFsLv0tAJpESt4tNDGjf1dDIPxMWFZDrt5pGKA+eZrI8g1QmX7Y+C7//6CeLQHCgQB9qVRkXwl9iUXxOAdk0RrAEWcVqy9HEu7InBNeb+euQl1AfQZF64KQkT0nfr4fcz7CMgcXuTSvWs06ka1PykqCPg5AmCwuIZTEsOIEzwz9GqPQknPveVqrM0D9VYNm+QZAGYiMnQ2GDvVZCVgDfdXd82rQ8cYnoIDPGpORcSrVlxNO9uct28sbrNxVqMJ76UbyAqnraw5prpXYJjnLPo14HW2931aa01568HmThxx55vngNmPd6tLy3qPybttI9sa0aS1GoZU2CyfdQchFy5mGf72zpXND11n3DyrTEkuka0Asow0zXJwyXksYv1YMAQLc9DTDj5ps68uRukay6birMEurWc63Sf6gAtI06Iwc0uQLXovcnPDV9n/r+Xz6fJDMWLfPQ8+7beOOXyWzAkahTeai8wHqZaFH5H6P9eXhLN8A9Ymf3t5/U2EH1GeabfMV6L4GHfncaZ5nHocC5zXGs76clkZ+DkHvPYS7CgWGLckfVC4TCRr0fQ5ZbsixSbW6NOZ8hK+xD2OvcHwV+FWa0u1hrLvcto2Y+CpkW0ahvSWQo5ywHqBewjk8nwj/zMABaN4/Kgq3rQANPVIE6Gxy3N68teCnfFb01TNAjRHF2NCX05A3P3BXoaiTRX0GTfLJJWJzn0Nqf+n4/ArBvIm973s4oQGkKd1pSBvQbjLWXe2W9av2v/+VGYUG3ekA9f/8z/9M08TwB1DaP0oA2yQ1gTXQd/jEnZXQ5+yHPTYgL+Np22ihL9c/3KtD0Jsfy12FbXkh6nNR8Oj9vCepppIEqqOO+0VeIZh8BCc/FtIOKjDAymPdn8/nz58/1WySUF6zlAxGocERQh2EbINqdUE7B958/nmeEaCVtWEY4Y73p2nQ54/f2fsJMjYeRWsM+rK6xvLS4XJXYX1UmwID4CtqatBaHrSXGHM+YZWQdqCxIUoOjaAI1/HttPKa65ll3puEgCWEahheQMRDgMA0KLb0BGJGj6oMjALVJxMnDcb7/VY3EATEspmbIgL6smoCcWcIevNzXN1V2LAmjuNIcAEhuSUm0u9kmNfrJZZ8lh5zPkLMbKbb2wiBVabaVXzrIi2cM6qBoW0Mz/U5fbBhnuEFxPCvXMoCChE8A7rfIkcsKR0BmmbbHa5eS3hEgJh9A9mz888eG31Z6eHWPybuKizdhxN6QE6L0kVr0Akccpomacwz4xWCd2wObwd+WqfKLU/yr8vOdhiFBuc+tkx+hBunPAx/AOFpUBphG8dxHTUI0MrARrlcRCryWsKv76mFSsNBgIyp+fF4LC8Od+jL5s433g2y/2ruKswOydOgJjs9rB3ZpfxkNQnGlPOsfZGbm5fF9SBPDG9nWAFoTy+Vg+5mmGevGoxCg3g/CQnfyWuIoDSvsxERyx1FIbEjQOvrxDBCRnLzszDsCRBXDoKNP5w4zP4BxtEjDTaJwyGKgrsKcwH1GUjOM3nb3aWXblVe244550rpzI4A1Yll7b2Stz+vP2SJjMEoNEionijRQG/zePPzL5vKNhQIAVofmAbKyCR+atB7eZGlz2ZOf9/oXv0vhT4MsJdn4v9w0caGuwpvWo8HRUB+u5Kr0Q3vT1T+CtWuEExGgk2Qq4BS7NfvVHDm+7Ff7kMuGjR6Ioivy0tp5k1EcInOKUUYeFqn8U17S/OpDwjQJZjEV7KyUY5Y+izn1Db/2lA7LvGNgCXIHHyzdFdhnZqI+gwUNS1HEX1Jl6nzuL3VFYLJ5k3LNtxGCNSh1fL3+5FSWiUP+YpRaLdIO/fwNk9YhsvtLKB0GmzV88asbEKA1gde5SsRLV9pxEK8WPqcsdXcd56bs/janboyC4BD1Px43FUYUyN49wXoyjknGnRMxSm6aiYUeoG7NWLkgzuaBbUeaCGlXyf9KzCEXJSpdLgxCg1uxheXFgKlneNJSjz65ExAqwcCQaG+Yn8tYeg0WPq85I7Nv/7UjpHsL3XjwOTJXk0dpbdwnLNh3hD8SgTrLyIA4H73ktzTZlefdY05F+oJuY0QaOEtR45aZ/9Grma5QuMWchqUCSRXRlZFg+xko6EbRwIBWiUYoygUP+uV0EuzZOC1a7RjXQcELDVy6j4wdxVuWCDqM9DbwOy72Z8EMtd792KvEExDljzAK4xAft5o6KIZq2019hKe3zMKDe6HHko06LSpz2ldEgK0SiBAl6MRiwYdKkFz6QHt2IPXYQSrSAvGJkPQmw/AXYUde/+BiTbmUh970+cXudkYD0le/bxn77glkOznDSM378K9yrHGKLQrFPUuLi0kD2vpcC/NK6x7WwRolWCGoigBmuf5X//613oaOvlHnVMrtGPAods+We1PF7TcVVjioSzqMzDTyawj96RzvvoSZWdlt8bPTJ7xq0HggUz8lBJKS7rZJ34qT2sxCu0HdR5vcGmhzzysghTdfFqJAE3iA98bsL7vF+KyibG9lOzhojxQjrNiBKvJ5I5XiMrz3u4qHMcRkQjCYykRbTTofd05unbsa++x1p3J5Ff9mbcYgcCS1zYVlyi4TQKNUWhQok/k0kInEN56BFe8/yERoBW3ZPDXvBG1SM/hQkIb258BxQZwstlJsO0XA7PfwAZAW8Ts4jhRoDyMOR+hxDgStxECaWVdSI7K3ik3NCmj0KCEa7EqGr7R3PeSfwIrONQDAbpQRC39FRdPgWoeiBHs4b5MI20IevPtrN5ViPoMTGKtQe8J5N7tQwYzc4VgstEKfXcWcQAhpTxSUCi99LZQp9zWtoxCg6JRgxJN51gH2XcSIkBrBeQ1V+5edxdBjJZAXIATIHUZTi8evFfOXYX3H8p+Pp9xHAlJYDsp7dvURX22eoVgckIoZwcYJpCQEOI9XN3+jVzE4GYOYRQaVAhkLi00AJmDj1dvGowEArRWQF7vEIKjlwh4KRLU90aMYPJYszRUkoeg912W/LsKz78CO5ckEx5SZa5OtVtp0J/P58+fP0GHwsKVu0HmSEDbVCDE/YoGmoTawSg0qOZp4dLC8MyDSwvVHZ+0z5O9TCxdLQI0LZkjnO+vQX0G1BuQK9W47Wk13lWI+gyc5KXwrOgf//jHX3/9xbz/eSqrwOGh8aAJrk60lSvlpR99CSEhof3s+x5B0AwkZ+9lS15g48zgq8jJorhilpsGT4AATe7z0kuc7/Irt+kPAACTuMMD1HUsuu4qnOeZjf8NHWY/AAAgAElEQVTAHoKy8/XyQEaef+aEOs+GuY0Q1MfJdaNNYq10pyyHFy2P53FCUJONh39mVbRwwiYnTVWgJQjQisHre7kC6av6zGNq4KfkgLxpB2VncW/hdxWiPgMzOWcRmn+moBCY2O3ImDWNwygJqFmR05SFQrW7ztMXUSHGKLQZqEvdXFooFhLakDrSMys4jOQ+jHA/kI5mnzEvqOOoGMEYstdvjUPQX7Nx6bsKr/YDqM90ehqxyMdcGGigFWQIGlTLG9I8rU7uklY+GIU2Q0v0NilcWigqITRncYVuGjwBAjRdmTX83LaxCTkMCGyTb8CxyqFZcu4qnKYJ3QfID5lLo82XfjLm/Uog6/9SXmcEFRw72cdUjz93UoVCRqGBhG6FSwubo+0cTH3pOQABWjcQoDe1/BKhYXQINHdajGCPz5U4Vu1D0PvOs+1dheM4kvyBtHKwcJLAZHDRJt14EyYPmQflcFNfKFGga/ZfYrnTokGzDAFIqH1cWtiK+LX61aVvGjzpZxGgdYO5iS51bU34W7gQaOu6GMEejcMIl9hP/bsKX68XoQeaO/96rpm8IQENOSGLOEAhNJlukxZrkh/whBLAKDSQQ8vDP7Mquk5+bnLKdW4aPAECtG44L1d3XhyA6wMJDowRjKFcYjE2BL0JhGp3FaI+g/pcfz3azCWl9IFHfB7HAHkxjqPANrP+8kPhwcUotEaYV2C4tLAOOayfaiQoYAjQFjKgN84aerk73UJM7PEsGlTwZIxgCTxRyEKM7txVeF4QUZ9BhSSwWdyMTVR02s0zA0PQIG8iEutO9T+YioYulAxuhAMCA5ZLC0ug8mPvsO9bQq/HCg4LcCVAZ3l0I6HTAAAnNMnSKpRtD6GR/a7Cz+fzer1wUZDXUQvdEAgqd2VCnhOwVQ/koiK5HCk75Wgii2shToH8MAoNJNdKLi3MSCCrHZy0XUwI0OrhhLDmCh7UZyCn9mAEYweKdpC9U81yVyHqM8jSKnBDoNU8I+ST0MyDLP4sOTu1+myKprUYhQbyXZRLC2+izvhzeBVGYEVAgFYP24T1/raNDS1D9QPOWTgol6zq/BZvIsXNuwqFvHQGdLlc4B7LXDPMgSawDp7PJ4s4wB1/zpisspONhuGm63VhRqHlg+eFHZcW3iOZpX+FkHXPX/syBGgjSdBed5Q9chJuveBOGFDUwzGCJaAaVKAsV+8qnOdZmsAERHV63BDoPGkLPG6YJ0hD9pes8ybettlVo1zIKLRPWqK3nnJpYXyuLioviJWeFyBAG0mClthqiVU1vB0PpIEO09hpVsswDoegv1Kro7sKl4KI+gy+9vPcEAgk00JuIwQJziy/2LX9hEpZE6PQQB24tDCGiJYzvorGBwHaAmyIEXm3bWx+chqbZw4FFHV4jGCJT2CEJo3Z0V2F0zQh4jh3D24IBCeQ3KRxGyG4RD9KFLu8raWEcqy3p2MUGij1Wy4trJYMBd40eILB+SyVDWg/wdIvCyBDAIFVGSPAJ+7kTAr32vjruwr//Pnzfr8ZF3LY5yyNOgkWnEP4iBDpHcSXv0LpLq8TSsjJqoeKGIUG2hkalxZ2Zcafxd40eIJhaZsfj0coNss/AC0IR6axrFZ4XIP6DGRSSYxg6TQ5UCHtWSC4PwsiJEfj+YZT44ZAcJ8WyvcZbiMEMZ6sQnQQ4skG6j6j0MAAUV9qnMNV0XmToYp1z18xnLTQSNKKoO5630LbNvK2Gbg9KBcCGAE+cdOFSFBHHdrr9SqUwO9w5eTP0+SXSkuYf/31F0uxQC7+CbEH2qHlbWs5EWemGs7z3Pc9DBBob528XVqYcfxZr/QcMJx/NyRpLdByHDUDRsWQC/AJ3hDnNEG5KrP8Q/bK2OSsm1BMgVI7BT17jDiEootJuY0QHGEcRy1NpSgftvFQJ7TSYZsBsYA7aYefSwtzJUMDV6xfu4TwqyTd/a1HI0m3TYLCP2HlDTWoz4D+H9TJbK1OkyHooxPBRHnNqI6dA2DDwbiNEOzrfgXpIVfdbEiQjr6XGfrNKDSwRzsNX1qYJRnqumnwBMPNvx9MsDYEknSrmiqzrFbbtiGZ8QCwT5vABpDMBJK8TbhBRciZAKi7padjERzYVTddlEPapzUWUIsGzc2EwFiis3dp4c1kqPGmwRMM2X/iuSQNnSpaVkU1aa3W02RcN4avgkIuihEs8SSMIDy+wn8hn5MzgWcXUpqruY0QBFRTH3LVSoF+a5IGhKErRqHrgy1JFQq3jUsL70xGBiMYazaHOt6z7x/WI9JkTGNlteFTmqB6w1SA8DqEETjKXBmPNLXnG9iKQANgDdUyAZtGQc2uKuP+DaKpZvPLKDSwnQP1XlqYtglA+02DJxha/eKjGw6RpJszhjtnWn/bhqUeAzgBYoolPoQRFJ0IGjQAPtOCasmJOTvn0Lj0U+wdWYYf5zAKDZwUdF2XFqaV72maDNf9Qc5HQZK+X1NblVUhj2gg6ACAmnlPwrMERNWr5oJRaOyrMQJIdh4D/sNthG4xjqPGOitW5LVd/RmFBt6Ku/xLC6/KU2ZuGjzBIPnDIUknlNXK/ipnJ7r2CRfgBJJ5Obh6lBhBKc9DtQfkLnKCLnqP33pDkysHs3ia2PFnJ6EURqHlT4YCkMvhxV5aeCmHG7tp8ASDro+LJC2krErYtrEJb8QgQOcPxLKK0k5F+bsaXBiNnAnMQ7IQdhUMQbtCE/U5SyMp/5GPh6Xq4eIyRqGFBwso4fbhn4Wsio4fi7F30+AJBgOu9lWSXv8DqTCvwaUtRC+nPlNaQIkIwgg2zhEtQHtwsY6DnAkMw9hoQsM9e6C+6+olGPI/uZ84YhQaeM6izS8tjJHLDN80eILB3lfyLEkXpacy3wsIxZU8CxQlKIxgg9ZL8yuE1LRDwXTEGjDpNvY8h9sIPaDh9k8P48+ds6fOjEID51gr0WFVdM1ffR6bDqXngMHDl/wqSXf/vb7DDEoI0PM8y3yNkSFEoLErxgg2CA1GMBNcaNAAkKLdknwgB23vnrpZB7U0ZQ7LPaPQAAS1N1xaGMTooqngnIR4uGnwBIPPrx3Oe33qZiTpjB9e+JOZ8PHIp0Bj8gEGqLxA13Kuot45FKxHzgRmYGn18wYMQRvGOI6qP78iz3T4IIdR6BLZGCMobeLCo7JwaeHz+SzB/4/yoXPpOWDAC9cdjgFJOstHVXELZx2iw7AJyJ5ngAHughHsBRcroUmbwADM30rNbYQmSYX25wq6NiK6be4YhQZgTS+naQpPrPOuiv6az73dNHgCBOgfPc/XddKLNi2zpt4pq2HkWX5VZgAEKGV+GIFzLFq23OqnuYoCo9ACmRjAqvFfzXyd5TZCe8VLgtPeLHy6+jLPVT68QFx6/wAA6vJwxksLN/nQ87rnr0CAvpy15UvSCcRUV2DUlMhh+YC2H6zBxace4pTGDACNMLx8Yw0WcZiBnPdN71Q9dd7IvrJ5nsP+AWIQgE02u3lp4ZqHID1/BQJ0hiQuTZK+9EtVbNvY5AXUH6AUTEDboCbCS5LPzirvubCOg3AD6uBEfV6oPmTYgMfaOESN5JYIYhQagHP+mXZp4ZIP3++39s3+hYAAXSSht5WkI3+Flm0bm88M4QaqkwNGoNECWiKLUWgA4IcywRC0dohSn+9UOqUPfhCgO0ahAYjr++IvLQz5kJsGz4EAXSm/15Skz3+g3ncBmrz5jvoAMuYBjGCAhajwNG+Jq1xwoUGTNoEKP3H4aJDbCPW6qzTRNrnM7TtcwkejQzIKnRw4sBRvqfv80sJpmnStFmgCBOhmHvxVkl7/Q/aEqG7bBt0FMBb1GEE7mDiTiaLVgXUcpE0gHK6Wb6ypPkevsVpZIhKqQw/1cF1qgwZ98+41APz0g5tLC9/v97/+9S9SSgwQoAWl/oyS9ObVPI3bNvZ1EScB2rsOjKA9S2s5RG9zuxXOhVHoJm6MEUBMH+j2uz+fT+ixLl+1RAXxPXtU6vP5MAoNwKU0GDJh3/ew1kggQItuvZIl6fD/mrl5E4oDbEQ0RuAEgd6jQYMGQCA/dP5wlylOfPW+C6X9Re2hR+x85TmMQseDXfxgCZxpmkJKJHZ+AgFamXPvJenuvzdKLwg7aGwwNo4e2IhfjKAaul419aOW1owsNOia4K0RgJP8BAqIFv4glgSmFTUDXsca6JO8+vl8uJkQgMhgWWcSZOifQIC20HhvOE3YL2ZD7Wr+RWD2IG+0Ar3HxwmKLRP1AxkZmpwJmsPn6uevTBUdTTLGcbT3pWy4HEPQJ/V3miZGoQE4yYFBff5KWZGhT4AAbS0SLKmlZmR0AGgODaQjjf0DOim2VW1kjACgiD9BLpKcxIQ/JklzHp79+GleGIUGYJPVg/QcQ1mRob8CAdpOhdjoI9r5KK0FMFauMIL2HIsRxBaLVkGN7kPaBK0SMjl5DW4jVNGaCURCFVsP/WkHE9AxhZhRaAC63cjz1RaSCFqAAG2hMBwRcb0v5VkiNwB0KCn6OYfSEzQvkrY9F9ZxkDNBEyC27oGUJs1FrT4jsRR9rK+5RIMZhd5nXYzggY5meeaNDL0AAdoyv1GaFjer3AGwQd0wAscHStQLCZ+BJgQQMtXA6/9fwZ0lWrozOUioXPZ8jCc38bWDUWjgrfuLVKXicwgydIcArTokYkiAurL6+XxEkRtkBUDPD1R3XLblUSFNPho0ORNUy8b4xhEY55SAaZoMuygO5hyMQgMnfn7p5derOT8k0sfj4bN3QIBWGRLxaoi6gQjGN4A90C3TbgHzp8M6DuIO1OkJscMRyD/NMY6jYYcx2aMxAZ3AdhiFBlZ9uybN+Hw+YX7FW+1GgLYfFYoqK+ozsBq5GEEvDOQlw/O50oKLUWjSJiAbNwS3EbaCiisH7zeh9r4X7w0kOzyj0Ejwlvy51X0/DmVoBGhNtDutQGoZgua1SmC4qmEEOi5Q4nRkfio0aKuHCxqC1c+RYKKzCc1Tpz5frVOGA5CQSS7T8zz3fQ/nAaq7vJuNXpbs4UqGRoB2QWvkV1bJ6jO8BNwvKhiBswMlCodYt6EfA8AJS5QGbiOs75waH1RfKlI8iQdHbGee58fjwVZooAsZR54zkhMnMjQCtPTYyEIihZNR+gpgnp9hBL2NpRknRBKtH/XYnJwJsvgD+tdV2o/F6sD2lYP2uNBXMGl0P0UzCg20+GpwV/kf0rAMjQAtOpV7KIetFu4AUDOcMYLSg6OHpyW+6UL0Y+RMbHsTLN+4CtJONc9UmqwueYj5gXoe2GSpLIxCA8kIipOiSDcsQ7M6XWhTnZ3TyFyTryIRwOPBzYKHETg7IfmWr8PnJPSALqA+W6L9ljCOo970zv4Ner1ChIfXmoFASjlNU6FdSaW9PWhlxmKKCWhxEVLoObPAyir/DQgA5FcmUA4kKCIr40elvyVtgoQkjDMk034WC6hr1gSCJ0Agobvv+55nYKC5K96/YFAIXzU2DY0A7YjNSHvDCHEHOKl/GEHpwdk7O0sbIdTNZLGOg7QJErpH7HCH9sO0SzQvftzSJBH6Cp7WZGdon8/Hw1ZoPEem+5lc8bokZO1PdxCgRThTnREPUTVAESdGMgA3qyBGUNpkYgQiK3u5p6AAEAlGL++D5bbZiYEBe8aXIT8xSKSUIDyMQoPKLldh5FlOB6Q3shCgfVEZIfWVdyqBq3KIEfRWd5MOaUMDVRpZrOMgZ4JIoogR7oNUkxF6rxxM8wpvMcgoayEu/fl8DN9MyIsmctysfuPWNmPolaERoFs6Tf2EJYGJoj4DP8DVVVMZ7EBklfv8CEOkTXCSgZlGzAVGO7PAjPp8KQw5d5Clpk/TxCg0KOFabW8Uk1AUNMrQCNBtHKVhqLR9wIv6DLyVRoygEbbHGQyonwYOCA36nEwDz1WJgbK8tJ/RzpshY2kTBePPMhtkD5Xd9ig0qO9O0MUNc9YiQ/MkqgGJaVvUG7qm0qFCHtiCm/UAcHAAfKUEGAGADVj9DI8VRQaMOWSMAO1T2SFMKnCeaZog2OB+TnZ1Gewl46gwCxPQ9SAnVJo84+U5FfBZCTACpyazDVA9fmtmOIuV0KRNsAltHsyYYf40blRYwgTsSzyj0CCBLUtTV8XmCvnT0AjQlfxAVC2vvy+/7YIeAACg9bJEQ+19IzRoAFj9bIn5G2ACPr2ROzBABc5jZis05K0OMSApJditkypDI0AXP3uZhK/yM15YL/BJsKiXGk/NSc+pV/Q0GVZo0IYPF8AVJYDbCONh9crBmCrjOQyZgK4JRqHBz3ZMcs1SkStkytAI0AWdUvKLhDVHIegogNskgBE4NVCITln1PWRo4BOsfi4NbiOMxDiOhn2Alu28O+YhTWXaY2YUGmQk+SxuLdE3BQ4g4fMgQBcBm9HXptBOdpEDQDKvwggaU5YrF9WY32yXV+ej0DyxhiuCcmARx8/06/xBCN0rD2maeB2j0CC8N6ylQmnMEsHCEmRoBOj8OVRL5FR4zEtHAZyXUoyg7sjovogsCV+QB5/AFXMm8VYD+pqBDi756M//AG8hgIa0Z57nvu/VkR9mt7PkXvqvmrHWXIZGgPZLXEq7HeozICdgBI5MPhHRRfedlBW36zigDQ7BTG5NMAR95ITmCcB5QeHaksVK2KFV9Z/n+fF4MArtqu1SesGg9izRVoZGgM6WMTU6YrkhaK4rBYAQ0NiCYgTOSFQO8aZBkza9gaFLS+Rfb1nBIEQi0SGEAygdhQaXTpk3n4QcRBMZGgHaNWsp5G28RgEAMoo6uH1sxsIHToe0CVpRaA7dDPlXimmacEKevm8CBJdoywSCBs12C5OtloFuy1h+qC9DI0DfCiEDBTv7k15F++PhIqBofsAIHBmgT85SVRGMgEnHJuu2wvP5RHPsum4cRyff9LyIEIlAICf/fD6MQpsp9yYFIntnVEeGRoBOzIlmQii7k5FcAOgY5dOZ2D27qwqK7zasnKyEhj+4Aq/8N+f/nomK+SsH49s9Ei+hIZb5MAptINPae9hsOD/UkaERoFNSoTG3y1horZIYuAhIqLgYQR1Dwg5wPuFfn1EgYANoXs3h+TZCb+rzeVmBr+5DA5tI4+eMQms8OHorvXWhqAyNAH2NLpssSLk4KLv8AFjnboygK73jsfLJPT2hbQ2atOnEwtz5Jof/OzwIh+7H+HOCxahHoiqX5FFovGVzWLYvGPRz1kGGDlQh709GgIas5EmdqM8AOCxOZoAawjHpSi8mZWgyp5/uFDsIIf/evrLPKwePDpr5RKCLAX4+n+fziSnEHhApxXDzlVGGZqXOb4uP42ieK990KfPqM2/9gKsNNkZQV1mBfL8lsgybgsN1AlY/i4IrNcen+nzevmEE+j5dPGGaJmmk3fmK6jCfPo6jk2FEt0Uk42A7E9A/wsmPkyUPQfOwC4B9UGAEejAA5yttEJpkQLIFrfi/LozjyFkTjJFgDbTwJotRaCEHgQrk8NC72w9dEKAPq7LDBWEJGYRXKQH4GhcYQdFhkcTW1hCradItH6UaGzI0YeikWcUO0mD+NkLnVw6e7N/A+bP3xaAa+ZmmSexWaPPGD2OamMIznetuyNAI0F9aXJ8lOaGDJfsAcBQaGIHDAqCaDxvQoIlEDwQbI8iE4XlPbrz8Wh3YhAMMgFHoJgb3nFFhqht/6JJkaATo/zKic3J8lYD6MRevOQPqk1XQhu29V2bGQ73SeGqkTUCmheU2rBrM+X5NtuTbmKDASiqcmVHoCmDbBkz1xDe6izI0AvR/nMnVuucsBNSVFoAADa4mYkAbBuB8lU2kulRxxIaNDMeWD3tD0Fw52DH+TES46bwajkIbVgnCvDOBAGJisIuWoRGgeTyeUm7pJQCQ1uGD5HoJCCtLVuKJKZCWZsm08vF4PCyNfKI+L8e67+AwS7z18CJF/Gee577voUAZCzf+DxLa6p8ytGsBGuk5hql8tRv5CIATDoQRFFUBjPDVh6UxeIq16uMjbZJmgXzYuI0wvJLPaVJMgUPyM8/z4/FgK/QdG/LMGKaapcqEp9pf/8Dg1i4Q4iOcP+9FfQYAcm/mpMhmhJVVlqxLgyYSrQIpUBe0rx2gv9s0dPsmDrPk6oiBWDrBKHRyTwTZhqlmNFdoRvaRODi0BRLqT/Z5RFDc6jXUMEB9Mkm2MMKJG4vKe4RVmsW0FC+C0STg29Ddyv5GJjkvCtjnakeMxZS6es1RaO3XbwRz4TagnINtZOjB1ffnnYL4TLrvGSAuAMTkGYygqFnFCISVedOpaI04YqusGzuog1LRDfX5azcH5ynREQMtNajOKLRSAZqRZ1AzGNcytBcBGl5ylX1uaAoPxwCIzLAYQQvxwgg/nVkIq6b62DhHMqcrO7N8Qyk03kbIlYMxnAcTAYclL2jQP29F85YNSAjQ1CY2DC3J4CHG6F3TCOg60rAhAJEJByOoADkNeOPN7JIC1YD6rBq6biMcx5Ej+9rHwXmyt8NAaWv2+XzYCs0ygPtEGmSxpGUBGuk5F/vEjABQn+yRMOwQYygJfJ0aZOk0SZvmwepnA1Chu30+Hx51nJwgNTRLOwxdtMF/PI9CM/IMRMGmAM0Tnozsk0ZCERcHEpIPRuCYAIcl1pgCNWiO2B4Dxw7aIX8ImjGjS7bCCDSAIIiwdW4mlFOOCX8gDQYFaNY958pZqM8AJAQORlBRJjBCvEu3lSyJKWMH+rUn5FzMgIlUM5A8+0mvdw7GnwE4okDTNJkfheaCQToRyRiMBRtV9n62CsAaezKHWcDPCMIIKmgEJ0VYwaRZCQ2yAxJujPfKpL6ozzFnB+GhAQQnxDLvKLQQJ1nGBzniErQZ5IIRARrp+U6eOhGdg1W5OhYA6pMl3okRrjp2Q7GS8zJ5rByxPSAL2oPARRzTNMG1LpkLI9yPAjKbSQpkaRSabRtAEQbizWHCDYgx2iJMo0EDEBMvGEE+eFpJWIHFtsxBg4xsHDvYg6jxz3EcOZF4EJImowDkjZEso9ANPYQLBoE66Bagmba4lF4TuMjyt1zt7D8qLTgSgOtrByuGku3WJAdyWHUs3LDAccQ2wKClVQgZguZV14SGBYsBEENC7o9C1ydRjGBCU/VCqwANEYkxUcaFziE7P59PdFgAKFF6QeHgvMDX3NWquJM2iVMgHM1XEND0XUJI5lgsbwhgT9tQNGzHyDM0VTv0CdCwkJPwOF/onKXHQIMGgPqkmmJihGQPJ/lzvoQk+NoMYwfDaJv5eduV1Oo8BEA1FiR5KzQXDAIbUfZ+vwddn3ieZ1Se/SnW5BnzPJtZ2A9A3mDECPL7MY5JF6Da9ZMYnTYgSMEGz+ezyUFz5eBVhATOSpwShsUV/XQKokahw0fikRLQ21xsNsaoEaB5AL5JQw03mfpcCU1PDn7GBUaQX0cwwk0OUTMT0uxxykA40Llc0eDK0Yr6nHZMPGsH4CYtCfN28VyoEGti24YEZ8AIaXYLovNXxVKBAM3Oja6R6HzyuxJSswFKRzYB50GKETgjAO2zYflqJY9T1gveSnSFymtwx3HE5smBiRG0+z9ozoLmeX48Hk3m7bhgkE5Er7liBvZFC9CepecKC52zpGZWQgMAVAAmlyvzV8v5HJn5g4bZ6+2jaI8dos5thAwe3QGmKwS6XZ9Fs/K8HSPPQGOYXN0SM0gOeG/hV3+hcxaigwYNgNgHRYCuTC+Qt5qnNbpuQEYFCypkAzYuUjcl+z9U3yERqjAKzcgzUBcXJxs2fkKiAO2KfDRf6JzlvLiWEJCIMYLwA4LYZTRmHVGSsDJ/3IiYSsHqZ7coehsh6nNyocRuABSNsvNR6GSaxMgz3b26bvq+x8oSoD28dSV/t0bawTm8lhCAdQhgBDgE4MisngVz0GABq5+do9AcKFcOxreQ3fGLd8wDlQNroJ1H38nI3VWOFOIXd6ITUWGEqxs2fkKKAG1bel4Ygy6V6lLUmb+WkPYbAL2A5GWvDqVTIkcmkA9kP3TIvdJWBDt4RgkZDvV5nxiXQIufWJrneZ7nYRjoWegEQQkEJe6O3JFdywOgRA26s2HjJwYJ39DkMMUyna43xVw9FK4lBJ4ZCUaQnMo4IACyhFLe+o7kpA4s3wBd1tsIP5+PZ6eKGWqOx+PxeL/f4zg+n09eSy0B1kCD81Ho81aRbRtAvm9XWNLQWIA2tu3LwELnLGeKBg0cpmyMIDkzY4QSPl80zzMBbf7cSZvqgPoMAnIlAQ+rF9fpLqPW/LOAhlFoNnIAUKiziNw+ygWDtPbCv2b9qfyhYdwa4BwmFzpn4T1cSwgoUUBORsIIxBTIezo8ZvYWVqx+Bmvcv43Q6pWD6/dfF7m5ySeZpqnv+2EYcNdcYA00WEd6CLEjxYORZyDWdds+F2lQk7RLz8sjAp5lnZ+yvWsJefEKHHk7RhCei7BDoWpYSIXkyDycPplTI/UFIAsrNqA+Vx5qjjyRfZp9vV5s5ChnYUCXEZTosBu6Y+TZEO2x56vl1jpfwlD5IJUOULBbI+24p2liHQegRIG22RsjcGqgUOq7U9/JnIrA8g2wR/I0qLorB+UMNachyP1cTpgFTCOBDV8NCS28FHL0aC2EHm+Hg/rFS+C9l/UEaHXPuhGds3xxSyuh4RzgKFdgBE4HcGo+eUJyfaeeagGvnIMjJNxGOI6j8MZH1FBzxq/G5YQA5GWq0zSF+vj5fMKrBue5ZV9MEaYl1wK9H174GP5QJz5VkFcWOpdrXZiDBlQp0IQdcjqlnb9EbufU1CXABDfglLVQOB4IgSNcCvzwZqSoxLX4to3W7+dxcDnhfbAGGqyl53U+CYpHQiLaeFQI5MfjgXgC4h1pGXaWX8uG0vEpPEez0LlaA8O1hMBqxscIkjMPRiCmQJ1TuypFYTQVxwo9BueIHIJu1RIaHmpOxjRNj8eDjRxpwGiesZeel/++/MN9ueNozw/CNJ3IV5KmjqoN5cwhdpxhyBAAACAASURBVN0zuzWaxJ6BawlJ90BviXLLFDFChRDImxt5bIAnACEgGEEMN/65oa7OHL3JoeZytmIjxx2fx7UcNhRfpedNJxjSTtELuhGmyd4aRec1igjQ0t7XY7eGnIPgWkJgj5FgBI4GANBdWcdBeLY6nUtkHs4MYnC+lCB7V8hQc96G/fl88ooqACd05Uh6/lpbQ0zVL+4I063IUp2PpGjDxk8M2UNUyLjEIjfT5AikO2jQgCoFKqQajFAtCjKmdA7Ogz+QOeW33PBnEI+jRRzTNN0JdoaaK6TraZr6vh+GAWvEeztExUkdPJeelz+2/y8SHuogTBvIz2EUwFjhGzKGaPNcvNw3BWnOmLZKgJXQgDABpc+FQkBAgYbneN7YcNDCgbwCLuFrvI/jeCnzM9Sc5SASTPd+v1+vFxs57ng7sIRI6fkkoUleSoYwLbkTMbBh4yeGLGZq+JoeC531Zvau69CgAVUKcC42DJ6FsHJwxmLwyCs4aMmYpgkjgKtYD0GfjCUx1FwUd9YTh40cXE5Y2s5AMq5Kz0duUH8RRy7ahjDdxPKWNmz8xF0Buv66ZxY6W0rxuq4l5JUrsPdhjCATCCjEFBDCqulYdIHVzyANQZ4Ig7SBLa+bNbo2LRmbywmBW/6ZMPV8wlrD0lEbaaE7FqaNTRPWrFNh15nD4jjcMVk1MW6ZQqc1tUd0uJYQUKVA9nPhaJqY/X4mp8p7cAzCU3IHTgyCO8E+jmP85g0gE/M8z/M8DAMvqh6BmSRjhS954cY5nxGyDLpoF7y3m0lhOqPRzG/Y+IkhLUor5Fx2a7giOmjQQG/pBQKpJEYgpoCoY12XeE5ZMh/DCAD/0YuMzVS4nJAGrbSdQVtyMs9z8jOzn2TGJ9s5Eabl7/EocWTLhg3604AhIUrLxRKis1sVgGsJgUZQSOiBwaZw3GGWlH7zpCK4B5lTJthcBCIb6SVXL9V2vdO5Q54zxHLDKls2cuzBGmjtqeyO9BzfBppZxJGrfOzjqLO4YNrbWudLuCBAl1j3zEJnsE7iulZCA0DWEptJsING8OTAQ858PB7zPKNPCYw+MifhudYIlmJ6qUfr+z5MzhLjlpIDlxMCS4nuvvR8qQ20vYgjV93Z/HelwjQbNmIQJUDnlZ5Z6AzOS4JY2grxAgm0A1QGlaV5XJAqwbmHMCMps2XCDh5C72R4OW8hRoO21KpwOeEerIFWqjPkWlIf3waGxEs+TDBvZWE6rbVnw8ZVDD8JRJbcym4NcKk2sHEMaCmNQBoo/3pBL2c7MIOEESZtl/wZxoL2/wtqguUbZnr15R9CKWzYeaFBm6zRXE64AN9WJy/kvR/1UmoNq2w4iIzF7ms83hSmrz5UYMNGGobzQE02KLs1wE2KgwYNhAOhU+ahUHEksMOE7M3BWXKAtRC2/MfX63WUSPfpNAgcjx0wb3agPuuKqa7w8PJNrKVJNGirGePxeLCRo2MNtJLkmV16Tku/LOIofdBd+YnpZdKZwL+D7wJ02s6NhR6hy5gJ44bgWkIgn83gn9LACC1FB9Q/uL3cvA/MtcoZ07QfMcnHATiI5JxJ6AlpmzfDy52J59xo0Fadlo0cQEuzJoSysoijbYXdk8nuv4Xpo+tJWOucHcOeiV4y7vIEgCNBCyhBW6VdS8izbrd4/w0kTslZi0ok5yyukmzOTsvJ/pSbN5imKWPaPHqvbukigtq1/DNHdkLqyJmVQ6ZbPSX184YoGrRVsJGDNdBis2456fmkpMYkQ57ZiCJFR+fIho2iGNYhEZlDWegMKpcQmCto4nvvFY6Y9/P5ROMQRSaAUiCEyYypq3Lz5q9P01TnZJfPebTNY73Tg6QdwPKNvDHSyV6OUQdf6ToatO000vf9MAx4OxCiGxSVnm92HKFz5KQk+w8iZ2kMXcS6ZxY6g+a5gJXQoJqzxb9oE+SVIGfQXDUHcyjSoulSRMAuJBzZHbl5/9PGcTz6OTVfJ2LNNAnzfkR0q5c+6YZOcBRBaNDV0Pd95ecf7/f79Xr53MjBq7GiOrhpmuocx53fwjJomYwoPEvDFBUwHO3cWPQXhpKAkLwgQYOGZ1ilLAlXCqwv1wrT0H3f86Sk4TlSrVQfH0aob/OMcvP+h3+9clAUPK+ZTrvrxXAIdAwvV4k4NGjbndr7/eZyQtCkj6smPd+nTCyDVkQIQQkMa3OzWwMIZzZcSwhylZkSC53Dz3w8HuzlgDqA7soQNMOYFc6inNy8D8YKL8CWttX+v29WS6//l4Qp8BC7/17MwvCyEMdDg7Ydd94uJ2QNdFt/qyw95yqgLIOWSYoYTq+DAdEZnHB3gdmh7bWEkGbVgkJQnEs33steDmTomqABAGCT8erIzftIjNksrPF1op9rptfj0pKTv4HVzwwvS8b5Cgg0aPOtiqvLCfHkViWgifS8/Pb7PwStkxbSLQYsDjSWHMgriHGV81sES/92ZOjKYgR2kHk0MbkaKnLf/5vIzRtM0+TzKI9KjMA10+eXvgjx53VWX9YrkectxQs03jzCQlUPi+lYz1hfB2glPWdkWSzikEnheDBQAQMmAEprD8t2wZFvJCx0Lvd5llsKedmqHJAvtYctRrjatEiQmzef6uTKQbqaDdbbPOoI08vsdvMZYYaXQYcG7eaUw6oBCDDI1eI1lJ6zU1YWcQinaqAQEKCBVkUADRqsGYkc0fnoE3JLIdTBbYSe+zyq5blxBMrN+w+ZcOWg56mxo20epddMl35WdzS8TJZ2hfMVHOvCjQZdAtJMav5yQtZA12mjmkvPJWoZ87YSEhSHUhkI0EB3yuBaQp8odItgnY/d/w3OMZdVUTC1nyBGWLos+XLz/jMnqM/gxAG6Amumw+s4Gf1z3baxHAMkJ380aCeZzfDlhDhwUc+RIz2XIGYs4qAHcQgEaFApw5bLGjWvJeQpd0OHbLjQObvTvt9v1kPnAiGpIn5P6LVb8qdRbt5HX7Ksyd7MLD3S4wDrP/Pnz58YH2M5Bmji2GjQftia1csJKWclCJIo6Xn5VCVyIIs4pJErhqCLAgEaWChR0zSx2cAq+VikZ2mfLYvfIkMXog5AV6Q7+Zra5eYN3F45KNCv9v99s2Y6/Jm1prxZlwFALlxl42jQrhCor+GNHCBL9ydNei7acYS1ohx9fUBimwABGtjJIGjQZmiH5IXO2b8vtxQK5IKghKt/zc9Wwzx4piW5eYNxHIk+4RG3bPMI+8r++usvOBKogAQ3Q4P2lp2MbeTgBdmMPaBM6bkCaWQaSVQXyYmUAwI0sANWQuvN/hoXOmenXMt6aHqwS1GPEThBIRTWyTBp0A6yfFNeW64WZeHIwnMgSgyQmUXhP97ykpmNHPjtfUzTJFx6LvrZWAbdkL2DyhhCLOHuwFIeQYMWjlBlg+JM6l+bJdDxMA1NWo6xGP4DWhUan7sLuHJQ45GtO2doP5CcWtGgs6Dvey3saJqmvu+HQf1IHM9T7/iAiqnn0jHFMujK+DkBwxB0IQwLH6Xeg027ope/lruWkDC541RmbhGs4MPcUmg+U/k8r30KlT8B7Vlu3ptiHEc8WXuLhQYNiuIOb0GD9llZXq+XpY0cIBJapOdqTQeKZ316D+pjOO8MAdAIriWUcxCuFjqXcGNk6BOwf8OAk8vko8jNX8Ntmqa8P5ORsVYtFus4gGSPRYP2WWLe77feywlZA30JuqTnanyVRRzN2dHXeoSt8mLYhxZOD8xQGTToJhUa0TmvPbml8MgyPLvWeGrrnNw8RSA3x/eKtNaq+6uv4gi0H4j1WzToO1BqOtWXE+Ku8XRC4zWD1T4wizjqAE7bEMPP/hAA1cmFawnrFEtvtwhWZk7cUvjV6zACh5jw65CbryafaZoIN72t/s/zZRQaZMf9lxvQoD33bkovJ+Sdnp/1SKP0XJ+vhhE6HEbIgTIEnR3DER+l5AMz+SXvSmjoRff38OmiiuJm1czOLYVrfoZLKHXjxXWLZo/lJQwy9p3DGsexqAEpqUIOumOCDwiLazRozwiXE8J1zZymXum5CY1EiysN5IuGGCCjwENnFTQ7/Pm+GZe7BDFI26rp/JZCFryYySrZXQLHyHg6r9cLO+jFpad00H4gs9bD3hNgw2KB6yrayMEa6D20S8/ZyWq88zMELYQddQxB58bwM96o+j4Jn71GmpXQyXZjobPY03F7SyGPQLS77s35OOTmCiE2jmOFX8QEdJ0WK4b8sI4DyMxFaNDO81gQ4+QTXbx0DRvSc8Omg0UcdJFWMcTwUVIqMENi7mvQ5rvl9wroAvLhU4aGOthIyPHHjdxc+Wh+7g4GVpMktB/cR9/3Gcs0GjREd5omFaPQPFLtbEnPzes4g7dCCBJnkRFD5J9jFBqY6au5lvBrVg1XCKLrqWbnj8cjrMwz767wWtW+GnAkQCM3N28deYnYBtu5GaSMQgNRdR8Nmpwm/3JC5wK0Sem54ddZajHhL4QdgSwYLsUAAQBssNi81xIqrabrSWe8QhEdOf9UHm4phDpozDaL7vw1IXfIzTJOqvSVg3TsiooUo9BAGntHgwZh2GIYBpme4NY/DU89t22TWQYt50AZgs6F4dKfhowCM41Z8rWEev2fhc6uimsokybn/XlkIjzPBPzMMyx5kHZwXDloBl+f0iUI/dB+kIZCxAMNGnR/PyuVuZHDoXOaX7jR/Kuhe9JFGsOQFofUfmCgnHi4lhDR2XmJfb/fxtZDwxsEJpmQXjga1YeI+mwJGV8TYR0HkMYB0KBjkHcNt8wsJ3Mjh593ejzsepbw7VjEIYcd8TAgC4bkSCAMyLY20pA9DXpZrMGmAtCZu6UQr5bAg2MGnKkyimKq7TQ6Kziyc4BCtBDmD4R4OBo0CJimqe/7YRjkfCQPFc3PNYNCnuKwiMPYgTpHer6GjAIzvbf2NQWLGMQtguDESQzcUsiYbROutijOeY8S2wppI3moY4/VFEq/4R9g/uAnSjsJGjRYO8Pr9ZKzkcO2W/qRnqWR1TAzR7zfTxdZqg+WvIPhflhS/oGBZBR/LaEQh+cWQZDmNuEpRRiIVpe9US3rJJajCwM5SmMYx5HyQcOc8JNh/qA5VUaDVtGtVEMgtxIuJ7RqeW/Ss0Cmiux2P0tgBAkYcgUn8UDC1f6VI68lbOjqLHQGuRwp6IzqbimEOpTwhPv7NIDGox/HUc6hs4VDUZKE9gMhQIMG+7omYRTaWEVzKD2vi52ojMcQ9E0DZiw92DMZQ8YQhQEA7WVG4EpoRGdISdFKrOiWQvZv5LIhlsQNuHLQKuo8peNmQiCHxqBBg00ObH45oRkB2q30vKQXge6NBm3pQH0i585+NGhL3aln4tJcg+YWQVA53lXcUghvSDhZsQPOPE5rGEfjOEr7VExAVwir7EZmFBqcoO/7OlUbDfoo3j1//XA5YauGzoDxnUvPkmkq47dpyCuqcAp3MJSIVUgA0J6hKu8lYKEzkMC0hN9SyPOYGD5U4sJAYKm6TdOEHXz2VyXIOVuhgZDahwYN9l4RVhbU57SqXTE8pYZGSu7XGPpMc2yMIARDocAgKoD2JHV0LWEu3152a6AWAVG0JrhleAYjJ5OzgubrYYXUoc44HGUTTNPEUxz6q3LhDPMHbZ0fDRrsETht/Tf8NL7Wg/TcvJ7GfzYWcTQ/UIagkzEU+rlo0EA7wkBo3re3WOgMtDh/WKLX8AVGRUSw2qFwYSC4U86EBxFbOG6i7dMF3oAEG1RbwbGRA3BCcNTQ1dTsdFU0pOejoib5yFA/tRAksMFQOm7hAUB7wropwLHQGeiFnFsKHdLiRWsOgNaDZGuP44jN6a8qeBo3E4LmpAUNGhxlyNDT1ZGhtTgh0rNSmsoiDgldJI8B0jBUCA9ig5yrnbJc0qCXKcUw7IwBgYGc0PaWQg8zv64GnKkyNU39er2wA8ytqyWIMH0CmgsNaNDgpKd7v9/DMJT2EPkeiPR8bhwVH5JFHJYO1A+GCr8DDRoY4Cvn1xJyiyAwj4YytMm3BxatmYwBiraXWj4tKzjMJEm2QoO2p48GTVI9T1DjOFYYhRZrf6Tn+Comv/SjQbclSAxBJ2CoGcZQAaC6k1+uJQzPVFjoDC/x+d2DDB3WQ1eLPgN2U3phINBLuKdpwg5+KIrMKgnzd4u2R48G3SFA/yqR8zwPw1BOPBJof6Rne10eg54eukhjxzEQIQDEO3Do5//8+QOlA85jodothRp5w2cFeI92cq8R0zRx6wDNlZBIh/mDVnGBBg1+1sq+74ehiB4iyveQnq1yVBZxNOdIDEFfxdAkpGEDQDVZQT0BYCm6oe6e76i5AxU6muELA4G6xknvlYPM6yXTErEW5mZC0JaieNagCbpIJ3m9XiU2cgixP9JzgsV0fWAWcWjvIr1haPJbGYUGerMYJRyAPVd7v98l1kPLnCB2dWFgCethhHK25cpBAkrsh4T5u4KQiTDmoEF8f5f9csK2T1WRnv1wVIZwTyyD/aVhaBjesAHPgaqUnfAYDYCTrJ79lkIh6YgLA4GKAER9hrMJ7+ph/qBJjKBBg5gclf1ywlYCNNLzzVKl8WOjranmSK7ia2j+CQgVoALTNIUUxvgeAOeJPeMthU0e+TDgDBdUBxtXDrKCQ0uSvNkhw/xB/bqDBg0iM2rGywnruxzS8/06pTfLsYijIUFiCDoeg4Q4hxAA4dC7UhOAVok9vM8YBqLTkny1fcrL+mYoO9AIrhx0C6V3tHZMn/iAqEdKDvtNouxOVc1yyXbNI0B6zlih9FICNFDtHMlDfA1CPgo1EojFRn1GiQb4QLyhgqqbdkthIU1tEZoZcAYGQmx5O8cGGIKWkCTrlAZGoc1DmgCNOgPiEW43ub+Ro0IUID3T321qK0e5hEblX0eJicEgKuAJGCANzD4DkIvHX10PnYU3sE8DGO6UqFD4gPYPD/MHNV0OgQBcQniZ787VJkUFaKTn7PY08BVYxLEEL0aQiUHUp+GhDRCFr7093T4AyRk+/pbCZL2YCwPluwFGyGJGrhykubr6V6QNmKNBg/ouhwYNErhr8ih0ofyG9AxBPeEGaNBdo8cJ1JcYDDIjHzJK8m2Oo8ky7APAfSr/85bCSN7AgDPwyarHcTT51VjBcanJTDCvwIrAOg6r6PteoECGBg3S8m3Q9a5Ke9kzG9JzucxgiSWS4ogRsSE2iP18MFHQECfvNdMbA5AlyYcXG8Nu6H3CP9JWGHCG39MGT9OEHeis7GUGmD+o5m9OBBoe6WWvv+/3exiGS8kq1ykgPUNQIdvxodqQnqH+n2OQHDkwUdAEbNUEoFqeD0Ml69vG14sFuDAQfg/WmKaJrXags7jckFFoUNnfPMgECNAlPGccx0uj0PdPAem5AoyZ1/kiDoJFcg84yP+UMFEEgprffZomuBoA9YnCckth13V//vzBJtQXsC9PHig1ionnUIL5W4JweZddHCAZYXhiGIYY/7mT0JCeKal3nMdtfmsbMlSWcwwqMgJMFNTxtJ9bNemKAW5Q1LAMeAJwVJ7IPCAgOUmqoNNo0KCms6EUgGRM09T3/TAMJRLv+/2GEtPZ3fxSPmU0okY4epICwNpdnPoMAKhAGt7v9/P5JO0DsJSn1+tFRAA/zRX3yoLKzmb12/EgpzTe7/fr9fqZky8dRPiZf/78QUereY58L741lq+DQcsHZSACFPWuSPWZdgiAclgW4IT/ZS7JZLLFCJfg8MpBVnAQRDB/M7GsxdPgG+BmpT6/nDCyrjH1DLLDYXJD/BXOXXu9Hx2AXE7F7DMAzbFZvx5IPENwwHlP6019BjFe4YqhUQX0QtHDA9tz0KBaO3mUn3/GAlPPbc/O9rdzVUPlRBA15SjKeqIIQBcoUQC0xf7yz+VxPW0hFN9tULhVnxl6LdfSaLQtzB/UcTN7ZINcWhnzPL9er70jnRwE0rP2qsoX5MuCS9A6kA8TBVm86OrsM44HQHbs1ef/1KfVK2MMwQFXtSlmpyRwCLdegQYN6rgZ4gXIQmv39wbvNWikZzmBD3kwA1E5nILyFYo3wsBEserNb5qweQOvAyBvGB6pz91/C9B0htQXP1biykFAD/k1NHgSqa/P7HuNbsbBgSxt5jpjrwVopGeoaX14yGwElAoMqi974X4SkJyCWawJICvNzfgzDPu+3xCm9/v9eDxI+wSOVRO9Xi/swD2ERBDMHzT0Me4kBFkQLid8Pp993z8ej2ma+r7nmkEKa6tv+vl8bFdPgSI71WQfZYMBlm8+lkD2RID6DEDzvB0Thl9zOwIEsNqpUpvAuYdghHUXTRUA5XwM1QBkpLt93/d9z6X3MmUBV1/2+XxymqAtehvsjakQEJ+Ykjt83AyAjHQ85k8eSQy8iw2MwfOVg4DOKq2OUAIU9Jm94tuGbEQcz2kkYBzHf//739hBYJhDJMxA7EN6yNsm0HpLXwwmCn7GPx0+AM1z9aUwPOmdSPsQfRtm2WyKBB2iCQ0MzB8IcDADcUcubZ66x3EMjkQah5dSN6FJoDdWlmCi4CQr3VSf8S4A6ofh+fwU9wUB7aRlaU0BOEGux+f2aD9vw4DSDoYdQDLjXZ4uhzRFspJ2Rnxrvhc2r4ze3nNRBiIIjyMSwPkC0DYM08Y8f77DiwChojRjhL1NXq8XlgE1w8fkOCTMXywM+BsaNEjwmXme53ne5yWSFbxUAuy9dcd7hIrQW30xh+QOFuRSn3EqAO6EYTI5iFkiSYtIUVYXEa/XCzscgdfGN96CEX5mGJQdArmcd+mNQXJpZYT7hPcOs/wX0hSAljukSW6J3N7TeuIKmG/bcs0+41EAN0gOw5uPpiMvMmIUmsDR0qCO44gdQLzDYISYJIMGDcp5F8+BwE8KGrlTizQl5Lz4+nwdUB99Z/rRKEyUni3j5g18CYA0TnBfPYmvU6R9IBzTNLESKm/U0yViVUoAUVzBtdA4wFGWXq97Jk1piWjnFjDzbFvLF/FZQb5PQHsgoyRZn1mVoSEAbITh4/G4pEEzCg1kspFxHClMwGeLWDPQKAFCYPLSS44ArF3iaN3z/k+e/Cuof3AYobMiifJoUBdcCNBkGZ8NGz0bAM3DMCMnuFqqGDAB0nhI5Mu5AMBgs9gN04ESfkUaBwvL/brumdwuH0SxpUKp6DRxvM72DmiYqNtaWEJ9xnkAuBqGeats5BpoGkWKi8yv/3q9qCOXwOBex/hzDuZP3IHsfgW1cI74dc8nFIjsBCkV4szQJFATfVpXT7oBktMQmQiA5mFYgtCkVSvexabyNg+H1+uFGwAhnZUrZR8NujlM+hsatFtcXfd8zoJITZBSIV7Nh+cDV4u13mGMwUQNZ+Ry6jM+A0B8GBYqrsmPS+kVQcNw4MpBQJcC83cLqw884BUO00jkuudLXSSpqclRYgQzJZI8rA5edkCTepz0+cw+A1JHW9xZhxdVtG68ssMoNFFTPxxQn+/A+RYOKE3eLEQJACWcCjs4ycaF+C2Px+qDsDVjE6U0yY8HMgFNS2ycGRTNQXgLAD8xTVPpSLkpSEH0qbbVvvLr9UJABASONJNi1cqw/RhJhQbtatlmdlxd90xeorAqhUbKqlfJ9eyHvQdyQMY3HwwVZp/xEwDOUUF9DtXqZivFHByoUEm5chA4bAUVMX/CsxrM95jMQVtF2rpnukj5AYsRzBgHAVojvAvQeIABjONYoU/DSQA4QR31OWPBQoAA5YoFVw6KCnalQIAuGqSUAJDXo9CgjR1o8rpnSKn8w8UIR9CVx7TTJPOuePQFEaBJRroxjiNnB0Db5FlTfc5YsBiFpsKWYMOoz8BbE6g3L5H/QUZ3Ehu2tPlX63jedc+ReYaMBCMV4v8wJVyxKBCgyfuKgfoMQPO0WVl9/k/pyrfQkMwPcoErBwFtlboSxmNIRfVahTtx4qoTb4l1z2QYUUGKEcwwEAP51rZDMgGNH1hDTfUZrwDga1y0ktvyNrQ0jeTP+9+xzjIoh/BJUItmJDj/Pn6heQA64RkZ1z3fYUHkItW1lZpYEzYot894R4Am+6uMAWafAWHS3A5thz2zD1UxBweSY6HEzBRwi9JtFZwf5g9c+RIhf35eldc9k4to4uRDPqc1w7od+mRPgOEN6lBffcYZANhERPNVAyUaKmaXyJ8J3+71elEjdEW6cDBK3yqWeQxJCGcBjqQo2eZd9wygo5byGB8PtyyB3jM/wCE0gtlnAJonRgmLbh+PR6HNkrSOVNJ4V+HKQUC8GLM/R5C9WDv81hAJ+QdU7dWlq55AFqK8Ug3PYew5vUnPPPlSCNDUAE1opT7jAwAslF3ONWvlyhaZH8TQ33EcsQNQ11ZB+H/mf9RDkIUv4UVieWw1ASvNB2ChhY4eI9iwmLGj9BbsCNC4hZojaPiaMw4AQKj3op45Px6Poho03SM4wjRNcp7EmIcrgkqHLId2kv/B/XDGi0QFtah1z4BeXj5kzhrbY0r2/DNqAhqQtiQbv+2gGacPgDT1OaC0MoUGQf7cf53X68WWXkBP5SF3kf+zoNC+LC1BjRdJQKt1z8m/kfwDF8V0R7GMkXVTgmptPEyUzifZ7LzmDEDz5CCz3ldoa7mZEKydgSsHQTkwVi8w5BEQwX0G1dyFnD8DqLbuOXv+IflkdAOMYMN0Vo/ST7AjQOMc0q2N+gzIAG0R3liUW8aqtFVoEMRLUJ850/pwQlBrBguc/+rRkP8BFEKj2Wuue4ZEAcOdoKi4hgSqBgI0TFS0nSWoz5w1cM45hFf6asWLUWjP+XOeZ9Rn4KfBA1/zP4QwsdvsWfmIBl07YIWse77/AXAbuKiQDAZTwlGzfBEIAS4i17zMPgPQvMzLl1wfj0fN5pYe0mGh5MpB4Ke7A+cJjfwPNPIHV3NmrdY9k3Yor5Q/jpKm6Sd6t8UJLxFuWDnqM6cMfEKF+tykeNEMuMI4joymeotxeipA/geFIh3/KWpeUeuec501z5JlswAAIABJREFUPoMBISpOyJINX70wAY0ADRMVYlJmnwFoC0Xqcyhe9TVo2kgPxej1eqEMgjopFyMoygzk/6s1GiMswHkKWVXguueMB43PYDohgQZTwl1vAgEaX5H1LcKza8wCQENofHWxSf3iAaTh/BnUZ87Xc4ATKYD8T/wWanYqO4/hI5Cz7rloYifhUF4pfE4mQsx7LDug8RVZhEzgnk1OFrjCNE0afb7VHUfcTGi1GHHlIKgGxp/1Mn+mWUFylcFzsiRPS+ueaUgLxRpGsGFPIt0GegkNvCV3Ue0xbT+8TPWZeg9cOYNS9bl5CaOTtBQv8zyzBgpUdjmMAPk3DCagYQ4lrCdq3TO0CotBWmBK+G3Mh0dxxmOk0AiZ6jMAfqBafe5aP0NlFNpMFFCMZMKqhtUkbzBxkj3/Q/4dBm+W8Mdz0npGFWpU9sMl1TQ/AtCKurhqsmz7LTugYaJSmAR2AKAhtKvP/ylprVUVmkm9/Cncf8ssKqgMXM5MuiP/A2hD6SgTu+4ZZiU2vjCCDT/kdQczn5wJCPym8QcWrj5T5oGHTGVDfe5kPEZlFFpj/gzqMwcHCBNw8zQ5UJDQCuE2P6Fu3XO5M8VbgJCQNPm7IIelsRWgeSkP16lMuZh9BqBtjjKjPndd93g8hLzKQz+pKwperxfnJT+66d+AinxC/ncSv7o4g94eX+m656ICNBmm7RGAJTaN/SIcuAJ6+EEF1yH9HaUS+eozZwdsZyd7T4DkVDGSv5ZK9Hq9sANoglYCNGyf/I/LCSxG+MzXVlHpg7qip4mrRPoPRrBR6RCgLX1m5p1xoGZNF7PPALRNSiZjUNSMj/NROPlffJ7ncRzJBoDeGOjtzIGlnIDPLOHDumftFAsTwWRycXV82FSrvvl3HlDjQHV6fi2phFMDJv3Bqvr8n8Im7D1TZAiZmKaJ56C6YIyjIkB74AxIijSYV9NCIYdRdATq1j3DLWnZnGctyBJuHP+BEaApFbX9W5H6TPUCVomCbd1N4KJDhzcTSk6eYekz63eB7Z4NQP7lgAbzUmZw6zBK1z23YkEkFiqshxrn/CjthTkCNG5UFbrUZ0o7MEnIPOhuMi/bYRROSFbnykGlsMRRm+dhCH/ltEP+B7CF86+sd91zw/6RrIJlhMSvVbKEJ+dv0gmYVp7kMC2qU58BsMcPnMSgWG3Fzyi0zK8Z1GdSAZDAiDAC5B+Akxqa11sk8yLWPZNVspsFI9hgNUyy2/PnXlF9wpm0ZyXaLQDaNjN+YvDxeEiuZYzCtSpDqM8A+gfaHr3P05f5WpJ82mbeW6yue675jSgo2MSw2yNAK/LnyM+JAI0/VaIXGpUvqhewxAm8PQESXssYWqkMrhwkrkWRIo7SM/PnGSSIJ29WXcXSumc6VoHehREMtDaQJZMxjgBtMFaluTWzzwC0hc8YlD9vhQxRDeM4UoYAvTGA/AON6cKYqxhb90w+EWgNjGCD3kCWdHl1+gQ08OlVhT6AaoZBAQMGXGKeZ7f1W8U7v1bbBiFfKix9hsICq+0ZUJ0k/chGjDfdTBo2/MTPuuf6X5CmFVPYIznwJZOO3Svt2PEqFeDVKgDawrP6rKic+bmZsL5hX68XrYglGJCxWAUD1jnKiQaNAH0TBjRoq+ueURKwA9jXtSwZA2OadGy0ZpsRKwHjOGr/LhQwoJ3rQ/QVPVK19JqthC/yfr+5chAQGkdAEIT8A124TxJaMSJv655bhTOZhP5dTrIS8kPwbYm9OZQU3yoBA+ozBQyoBuqzxopmZhS6efKc53kcR/wfCMzM5EZwlPxt005c7j7UOYnPdc8Nz4jWFQvIif3mPwH3lvnZmICWe4R6E6gN9ZkaBvSClxzXHa+6vVIGZIi2n3+aJrYc2A5qzy0ZgPwTuZ6hhSH4WfcsjQI5714psjbKGfs3DAd4D0XAw/L+LjPqMwBKMU0TMai9ovEeZbLdxnGEtgIaY6C6aSf/g/NMkuYh1egQ654hkA2/Pj5ggPOQPdR5+N0JaARonCwNqM8AtAXqs5mK5uGN7OwW4+ZbIBk8GgGRqQwNGpxDLD3wtu4Z9YAvDkrQHnKIYT9HgFbDROV/TmPqMzUMqPMK1OfDUtf3el1O45nW/8yfz+f1euH/HqCXo4ryT6g+yZ9CrBrSNGif657FpnqfdAgSKDNTXf0rpBHbfg4VwNXy/HxmnwFomx9Qn632vYxCx7Db1+uFHYBk0FABkj/IXvuEaJ1u1z1Lzh4Oj4OxWRuuyDnGWFXv5+nt9eq4Wv1PZXLuDBYFFPkq6vPvaqe8rinqJSp/znmex3HEw11B4/QuAjQwn/xBfVzSoEtkTtY9i+0fveUN8qTkNFX0z5NnlLXkZpg9NLTV56HzB6BtDE7ThB2a9F31zxpOtsE0Tfg/sNd9ASCZ/Cf2nIw3FUsvTdyDdc9H0cqH4cuCZBbE03rzqQYqgMOl/0zb6jNlDKjwUtS3SDweDxvdr/w3sut8vPDyDTwVqIBMR2XcRFe5Zx0HEEIMWPespX909f4Ez0KEx0WkK3KOGlPNJfSwUvNhXO4D2J59huUD+S6K+nwJZuqa8FHoCsmTKweJZRgFgPwDsKCOBs26Z5IGAMk5KuMfA3q5JQI0bpf4e81v3qBaA+FVHPX5Kh6Ph6XS5nYaLqjP+DPQAuYEQd4EqDT501pqZwWsewa07aAoHYIveXB7BGg8L+U3svcZEGttewwqNA1w53KwZZ5n1GdgrOMCwEPyp7Wsww/PHSPtFFj3rLFZcMUVcU4bAcI5akw4Vz8DO6ChoZd/F+ozAG05FnJGMuxdgiRwGq7ch+HKQbBAi5hFNwUMkH+giyWeOMbVzMm6ZyH8h3Sh1PLgEimCMnnwfCag8b8Lf9eP+kwZA2LLNm3A3bLXG3zy6qG1GMcR5wfGei0AbiZGbiYEX9POfa9g3TOgbQclcETmIflK/T/bBDQCNP63ZzPMPgPQtqOgNt+H1eom5GbCEmUoqM8IeUBp3sYIoHTW1aK/mHwALDbzfPWKSArEumd7Cd/wpAICtI1IIeE48X8EaGhobJpw9eIzlQxIQ5hDwQ738Xg8DPfA9qbhwpWD5GSgkaYKT9pQfUt5klFokIUPsO4ZlUCjq3O4BlyRc7xjT0WflgfReGFUWmftJgANMc8zVTkjbMsubUeh8/7q9/vNlYNAdeomE4K2LT3wjEsaNOuegdK8hxGUZidFfIkoyIgeYgoNjaEjhDEArYD6nB2Px8N8gTMwDTfPM3ufgF6aCpEAesm/z5h1SwZY9+wn7dt7TIXTqs5OX/8ZKAqEhN+LAI0vnv0xt7PPFDMgxCtQn2mDfbYZ0zTx5g1QDcZ5QKvML/YBJK1lE6z9YX8ErHt2mCIs9bm4rg1X5BzvG1PLR0WAxh0P/4znzRsI0EACUJ8LFj8fVyFpXAwarhxEvAN0xQBkaewB+MoEWPdM8wiABKYE59ebgjJPQAPPNJS9zwC0BQMppeFEg+7qKhE3f1FQn/F8EAPJcxIqfJhBE/OZX9oDSFyubVJaDxuy7lka/7FKC7E5+NnwsnDPVTgM5805lcmYU0YyP9RnAJoXY0hVafR970foDM2GcM398/lw5SAwk8MxApDTkQpRfhGg2yK8V2fgigjJsUZmqAnmFVTHy7J6vu97qkMuq8q35MA54ZR7duL8wQO0DLQF6nM1uNKgA1MvegHjHb8NayjxSQCLAKCEQ9Leuz39MAsf2I4KeQLIkQWotqBEM7KRmwL/7/v++XySoMwH9ZkAzfE7pKGozwC0BepzTTgsc0VHoZNdF/UZJIewwISpiEfJNCAolPmLPoAE0k48qDz77LQ4Q5g69LOODHz1E705geKl7rzCesmjgwvPyR6Px/P5JC+pCOq0GGQCGtf8f+9BfaaegbaOFxoDTFENoRt3aPNCo9BplmQTJbAXXxgBiOW3DfUm5O/S53u+YWOZg14453IuiNE++0fVr0dQarUgSEyR5xV06o6B6BtBLdxow0+igBrihIaiPgPQkFku5RbU74d9ljkJW6HDlYPQDGAJtMRAfuZvNQqNlFDoQNfK8gmOGj3EaOcupDQwYY/y6dAdfYmBaPlBXWQCGgHaPMLE5V9//YUpqGegocuhPreCtzXQe3rXSongykFwHwJpKs/ygRaiixys9/gCLmWbyLsHEaMdNo8aNWi6dclHE6TnLO0VA9H2Ivq3AM0RGtMaLj0qh0MAUMHfUJ/bwrkGnVGJiE+eqM8ACgGAjcx/Ccw23Tmyr2udI5HwFxGjnWR+jU+kSCMCcXPk+ecPZyD6UoCIjWgEaPuJIIjO58+9Gw7BUdKAc2dDfW4O5wJ0V/2lbK4cBBkhSs9i/BmQ+RUFrIozOl/rHN8P3vwJazE6KNGI0ZaaR3VD0AzSSUtT0zRViAIGouVEdPJxI0Cbwp0BZy7IBqB+bUCGEwI06O72CEwkEeHKQWAY+DbwlvlBiRPJ/q5q3tS0/mCI0ZYcT0se4CGWEGQZeU47TQai9UY0ArT6sI8ZcI4Pe2RoAGrWbOwgBGS8dQkoxOTCExeEfmA4q2MEoDfzQ/6bH8HVtc6RCPf9VMh7y44OHEmpE8KHwSU+3/xJAAPR58YpapBSE9BAWm9TZ4OzZybKM1VQJ5ZRn0UhpDvCf/HPhPx/br3P5zOOIxYGJYJXiF9pzOrkPbDJ4aWZP+8bbWyeZcOGkNQUTjb8Om9itI1EqmUImhzSkOfkul0wu0swEK0lon8L0HDT5rF0c8A5OYkXHYUDwC25RH2WCYrdzfx/Yj2uHATUCLF5j4MDGx/GK0obuYLovKAV4XQlRltijyo0aOh6/XAud7tgxtNkIFpFOCNAy4rt7m/RWc6TpfBJ/MjQeDuoUMKxg0AwlvXVXe+/CvN+v8dxxJjANkjswAwNZh1HIas26e8kpCbPk9FKG2HJp0OrXtPUoW9V1x8xEL0+RGnhHCVAE35FY6P0gHOWPO5NhgagUBuAxCkZaNDZW5F5nrlpE5SGhFEJBGhA5o+ss64avUJrnfXmJZNitDHqKHwIGqJex8jlRp5rejID0YXC+Q7rZgd07XQpbcD56lcwPxPBY1VQrg2AMwkHAvRRVowZiNsnz2maUOWAH4KnEUyZgJ8pHSe5areaGzZ+Mk/5mZPJaJluLPYgaNVLp69pmowZ2flAtLRwZgK6uK83H3DOm8fNv5pHVQOFegCUTRVAgz7PjZGZf7kgG7sBJxkeIwDDlJhm8Keh5IjOSvMSYrReykefbgA2Rp5jepPO30B0CQG67AQ0qf9S4VQ94HzJ56zK0BQ2UKIHQInTAkrez8z/dXZgnTk/n884juRSUDNs2/ob3g5sZ/6MxdFMkW241jny4+nVktSJ0SZLgMwhaKptiUQxz7MrwzociBYVzgjQd31X/oBzuTx+IkYAAAJQn3Uh9Dkc2XntO3n6+Pl8Xq8XVgKukjxGAOZ711xzJ9r7yuVWLvmV2gzl6JiMbuft0kwNP89IXZy3qK4GopUJ0GCd7+wNON+XzrmfEIAj2Nui5QE0NpFixDrtLy0iVw4Ch12c9oxHnQLxLYPDEilzw8b5Bzb5YEymGG04f0oLeUpVFhtyQcs+sXgYiJajQUcJ0D65qY0B52qp3IYMTWEDGX0D9VkpEKDj0/56IA71GbQN2yb5liQPfHIh84VS+IaNmKbMPAPpZIjRtquAqMFJCu4d04VXNxghPzGR7YHojLF8MxIRoL/wDCLzJhtgGhoA1GfVYAtHJPlYrDSOIxYDDsEYEfCZ/LsbGrTYCqtadF5/C295qa0Y7UEkESLG0VilRYf52wWzW8zqQLSQWI4VoK361kI14JF5bav0fkIKG8gC1GftQIBe8mGokuvm/KvDMzYO2qLVqASJAnguEDYyv5a1ziSl+K8/z3OQobu/JWli1kCw01tdTWs0pHcMaG8gOpcAXWMC2oa5GXCumcozXlcCgC5Q7G3Agwa9OOryTRfR+VKzF7L9OI6hzSPzAyeATwLnHYReqq9urXP892LUcWMKxOgsxmTXtiJmomjkWf6xLuLh8/l8Pp/E8n1ECdB936srZgw4w02pbaAJ2cWLbMBMi7LZldEdDzIn09zu71dfl9+yvABLpwcMg6XnACRMR7Z6vmtjw8Y5UJ9P+HlXRox2Qvub61boOTFOTh9aNLvO86x9IFqNAK3ClAw4iy2Z4XRU7NAhZYM7zoMYYQmhRVFRUOJ3ZWRvBo563aXZWwaiuRsAVIjZmkUcwgDAJhYE9uSfv+FBmWXoKtJKTEYnh3lDK1FzjxCuFuThUx0YGIi+qUHfj0StO6AZcNYYrp34+wmpbSDNN1CfTULgxd93dmUUauFimv/Aj5ergXAtYKPlwwgAbIqUnMvKTG7YICkVYjLJYrQrB2s4O0mHftR7ao96vSerdyC6+RD0EPkJWt3usu5gGXDOjvrGVCFDA5DAALCDPYTR3WpviuzTcp1B5iw+H0MkNlcDsaADwKAkQOOePSBZSviZ2Atlfp+i8+br44R3DJggRntztlbSFQL0JtLD1DPWkEAFNQ5E3wnkDBPQi8l+coWakR/Yw/K/OLe9WEV6AGZ4AOqzYeStfa12ZdTx+XhbrRd0oEQDmdH6k8ZgcAC+pveft79kTPge1jpHgsdIed14I0Yfvb/lUIDuWrzoQIB32m4XdJiBFQ1Etx2CHhaTnT/iK/oR1+xBYzcOCjHUJjUVgKtUADsYxtU10F8lZmPp5cjnE+S/9R4PFnQAA1EAAOgKq1Su1jrH01EUunLOvHjaXowOM1XeDFL5Kzvv0Bl51piK5Q9Et9Kg3+/3sP6XLmIUOtcvZsBZDkFs+wGkydAAxOcxmh8P2GjQAtcx18Q0TYW+6bKgY5mJpi4A6BMAqmMk77Cz5w0b54COVvPqjRjdfJtqKzvU/NZuQ56RZ9U5WfhAdJPcFVx62Bvr6wjSzasSGXCmg/rpIc0H3/BMcDWBYgcDuS7m/5rnmeLV/VKfc/GYRdlnQQe4ijpbOIwlf+ILFKX3+xweT/gRnSOLJvZp4t7z3/D2ClflRRzephUX1yKuDSRnyQPRCRr0HZ9cxJPhyOk3Nrr04RhwBsnVhfevgQpfRX3Oy2Jz/V8luBrqc0C52edzCt79fRskCzqAEJD/Abha5eMbSdY6k5HUMdj1K1w/7y008915eFmowSSiTWZpgQPRNaN4vUNmOPlD62bv5MMx4Ky9akrLvF0jGRrXBZEs0wkzkC8NV7AAdW2hBD+NUI7ELEfgcM4IXEKFCWhEMQDScvj56yyh2qK8JGQkKIocnhz0kOWRuW2Jto565cG9w+XeZD8P6VraQPTVKE6Lx80G8+H8F3y9nJABZ1AhPrvqMjQEDlxNoHIo753/C88/qYDYQY7br6vD+mJ6ZnBA5XDACAAkU5eQscOzIjZskJEMuPTX/x582zZRqbOIw7DWxO2CnvO2kIHoCo+R9h4+xIT94/GY5/nPnz/wA0uQn+yWZ8htaQQARwn0khchDesihTR1Sx6OLxZ1NvBuzmgZiGYsGkAV0lAzcoHz8Aly8+v1wuWyFGjMqIJMBqJij6VU0KBNejirNkD33wPRDV+YKKpBfxVPhkjr1F/+CEAX99YeACW8bu1+z+fzr7/+WudA8qEHQgCuLpxpImMtDR4LOkBpJ6RdBCCNU4VqspArzJIF0zRhhIaOfZWoLC9vwVJKGFnF12Hk2fD53uGWDQeiywnQR64eNQE9jiOeQcw3J6/I0CALllS4/MNabv76V16vF2XSDwngoJcAUSe3rS8CWq4u5ChBxvyAEQCI4e3LTudNSQ3bTrvyb+6TjoDAPnpRos08Ly86BG2GkDPyDGKcpNVAdKQGfSkeTx60DD//ZmAJNORAQoX7fD6FSjUebslJNv+w+b/SyCLTCk7aOVLB2u2v/i05gsJCelgVDbI7FQDgqGos0vPPOktOvs9YMIL2ghL6C+3XFZaLaO1lN+RDFgmAq7m98kB09iHo8zH/MwGa6zjNM0W9BRs10K3THunLhTjKMqqD9OCh3kMQN25v47ssTIYFHR5QbgUHlBiAPSdf79aIScjrl8/QoElH9NEhiMJjcu1KtEwLt8qNjDzbPuI65bWrNRD9fr9/9keR5/Vzycxw0nwiuADJMdlllaHJgHKOdT2q/HM5Rk2KzzVNhgkQHHFDANL+rvDGabOgAyUawBMAuBoFm4XOl7AuLgjQudgpMFAOlshS+tpWiSFojTV30dAgDCBjtm+4ITrh0/7UkIevkTOO435jF8dP4RSoJvBita6mpas4vHwfvDPlxDNp5I4EAqtYlGgWdIB4So0RgNsq+f4bd0jR133Q5F7SEX30V1Kqjp9k16B1jUIGlZDxTVCucyk9EB0zBP0zCmJCYNj/4q9XDqLCUDjFfpEs9xPi4blYQvzNfvKZxP6TMwRtLxPSyK1xX33WFSObTq9jv5MJlHBC24mC0ga+9rpLx1uo2iJAw1tAJD/xRk60lCRWbYDKEDsQHf8AZtj8NQ+jT6Azp7fel6FpvX6at1M1vJyl9eLoPTTY2GFBlpF/pUrW0umxoAM4ZAiIgODmbo2Y+oKRc1EXjOCqKAR+sryzJZmc+LlfdMmWxCNo28PmHYg+GYI+T3qXYuH/BehxHE/+GvIc0MKe02Rozx5ub3g5C9UjoGyDKwf36gAGWWfCRYlmQYc6ZH8KQkUAVtlO2KpRuiCe/HyGoCGo4NLpC39MnkuDFivsMvIMpPWzzQeirz6JGbqIKwdpSk3WMMNf7fP5MLy2tkbnaXj5vsXO53R4VdlGteYQCxnEkpSwJElWRTsH5RJYIjmhV6w2ZHCumSJAk4s4hbQPsL6x0GSmkvZ53u83sxpAbFLKNRB9NAR95PkJ7wEMxJJbAuqBHJiXodczy+jLWcAzbfOpj8up71MHh26zZAYWdKA1AKCxNW315PUnrUKDTqhEACxrc8LTcTlK9P0haFEsnZFnoKunqzkQndZCDl+vHATAUt/4UykQq0aFz78Xl90uxyiNyKdxDEHTvFliKnn1NfM6wmZBB0q0TGTM0h521yL/2St2RRc65y0xCNCXqg+QEF8y413O21o3NWgJrr4sPKHjAxqLxZ2B6JNN0FlayEFjngXgahQJfHWa5RjSAMkw3zCkqc+GvYJrGO9rAcu9QCzoQGgAoK2vvv+GEL/loS/GBE2cRMJ1hXceLDV/bMargcAGcg1E70PyTowgQNNQefnKJ/cTljDIZni5c3+zn3BcVeIYgrZ9vk5sUqib9RYdm5avc7D9yRV3xwhAeGkTW+Diw4chaHKRoqDTQkuWB+StOElaXLcikKzaAOa74Hgl+nwI+uYTGgRoaqcjnMvQV39Ox/CyIceAcNhu26hiNX3e7eOZxaos6GiOXE5ITQcCeayE3RrxHW/k90KAPrcPuQgk05JWnCRtEUflzLZkVEKsvnNihCZ1+fF4hNUcaYd1P1gGTgL4pO/rqNtkwCWo1lf8dQwv2/WHtBWfDEGrAOpzRp8Hl0hex4IOE4foBFQ0yRlb2m6NElUGDfqcyWAEOb6tmpOEgehqsZYQ19UqLyPPwHkbeD4Q/XUIOsujmiHmI3JOwGpj2ff95/P58+dPx6ATtB5YbNopYfd1gatARNgYfL2gAyVaEXhOA9rmjVDCNFaxBGaFAH1OZrADyNX/Lncj1VGiL4V2hXQXAiry2nkAPGSDyIHoBPX5684AJqCdUhmMsARSmFBDhXSrL9wJB0bGhHfv2GFvFjQ1CT7Jgo4KID8DXflBy26NmO+CYJq3VcEIdNCFEk6FR+OXFnEUtTAjz0QTOOkN9wPR6yHoc/V5LTRv9tPuwQQ0Ae8X4flnKIp0qj45PYduNcXBLxv2sUyxxVSfbrUqmrFot8ECnJcqM6LzvpVN+7tkwn2xQM2ng65AmIteVxgf2iUsvCzCpukD4Ge52Q9EL69kLRG6/ueEsGICGvjtLdft5fP5ZDAQTg84WcPgfUOZ7hr+gQUdAkkCRgDZERo5wxui7qg8CNAkIvnxazs1LRdXZFeiI6M7r4WDakYQAXApVNcD0e/3+6+//sq7DYwJaGqnR4zjuLfD8/mkRLnqALP8KGbnzbS+tlFZfSYukpPSMhDNgo6GTshDLJAR7xXM57Gb3xENeuM5VFLQhI0sb2jloiIxizhyeXtQ0GjqAbhZgMITqS63fogADdzF0tGkc6iytJ0eqBXT7iaB+izHMgjQdxJUMF329g9cChmMAG5GsbHdGjG4T64QoElEkuPaW8u8UJEs1xX+jO77j69C1qWXByBLBgg1/R//+EfemGIFh0dn8szkzslc3/dKLxwHDQk9WpuQY+UUjiwDF9fe/rGgo3JydphMKGQ3EbSPAJ+WzFWF0aCX/E9ISotxt64YNsMuVKRQdN95aYnbBQHIW9CXgHq9XnlHYQZSLXCCaZpiVBiWQZt3A9KavZYA0nlCIJqoz8gHhZwcJbpO1Dj81nhUAvzs1qAQk4iA8/ZhebHjDg85WcSRYN7weejsAMhefTYFKO+DYSaggYuSOY5j/J9nEYfhfFqIozA7RtMrEMgith2eBR3lKgVGAEcB6HO3xk9kHN1gArpj/Blo4CFpSvRRgF9yeEaeASgU3RWe6DAB7dGxvHWSV+tT6OcRbuyxec7UKgkGR+y81W9HPqhzxN1qVTRj0V/98CrnoUyAfaEJaiCi8wnTzmsZNGjexaR9VkTCgxId/zj8a4DHFN/lgkSOA4ASbcVR6WECGlBBLxC4tGaSZdBWSVI5MAStvePF4YkIvZRxsTkLOu4nFowAFrmZQdQm5ca5AE0Won3WmASW+yp+KtH7RRw/zcvIMwCl6855fGWsy0xAA7O18OYbBCyDNuYM2MFYmaQ84fDgaxMY+rrlviDMgsoQAx5ahNekKC4J5bhQJLr1SVQ2SoNqErK8mHXCQDYBfmTeQGiJCAIKFEXyyGYkmSbTAAAgAElEQVQaEKCJdpvULUutYhk0VB7IPFBq00mSF6I+MwHd1g2C8WP6QNu45IcUC4dhguh8sxzDk6GsAGwQ0sL6xsKvGXj575s0smRm0gsAFdrGGApUbwIa2HMy898x4zMcFnHY8IdqJ4jiViGD8UL0Txoh5MMwUCmqD1zejWVBxwmQfpwUkQBKyX1jlgsZtxPQZCHaZ0t2Cyl3eSVrP/W8CXNWbQBQs0G41DbmqssD2ZYKaunbZVcbWcShnceTx+h1aVwB6G7fXA9BAnpbrAVYQ1HFcahBU8SpDlYNuCjRa/oRYnz9MgpZmpgC1cpNq4rDBDSw02AUUoqfzyeMUG/PWfmXMgRdjqkQhueoOewPzEST+QUd8TmZDGOmfrFbwwbF8iZAw3OAHydfriucpmkcRzwfgMo9Y0IFZwIaJOZ9k9+r6DOcUCN5JAuPB4YbXQNMQlp6Z7pWS3B1q1XRnseiSTLai37YqoHoXMfadd4OdKVBk4Jon721aYG70q8BULl8J+e0LEWZCWgqqOsoigTLoGmN4sEQdF6gJug1EbGgCIv2YW9BR4wf0gArrfXhlW0YWv2igxFKODN2oHd2xTpCs/Z4PN7vt9urkgGoH3R38mFZAZqEC8xHUTxYBk1rBJocJZXop4kYmwJ5m20/CzqoGhqJH7s1mqeIakXHzwQ0dVyyw2OEEjV3KbvBwtM0PZ9PXp4DoELQtQUCNCCKYsEyaBWQsIuAwc9cLS5m/JkGJXetBIJ2bBZ0WFWi8VLhp8NCZ1HHUXkaw4MGzfgzcJVD9tw1vHQVyAaj0ABkR9rS50JFmRUcvjK+me8yjmP9r8MyaPmgQaUZ8wP5q7GZZLHkbCHBalzQ8fNBCNlGYAl4/w1qunOW5UGAprOgffZjzKM5ob7vgzD9fr8ZhQagQtC1KsoD2ZYKqu5bjOPY6rezDFo4g5dD4pn9vBPjcvQgsYcY5gHxFtAqPJeBaAPDSqg/cio4V84KD/8mp2Nbg+aJO/CT5M/fn1jGvBiFBiAL5KzdWIMJaF/EkSi6D5ZBw+BBUXqK+hBjJRXezgCLh5SrfUEHCWcdsDWJIrs11KEV+7UtQMNdKRAeENPCh5erQjkIr788n09MB0C5oGtSlJmABpqIrxAewDJo+iJQqFJSemKqPvkHCGzRFyVa4IKOE2mV2rG2UoX0xW4NCjTYRAR2AOZZa6Sfr4t1WB3AKDQACSiqm5USoIHJAqD3kzdcu/G1OrIMWlqSldnM063R3GZPhrr0MqLAFZayqHFVNCitPrDBTPshtv0AJpMJj5PpnT2w1ngz7ltsRqEJK1A06OqDCWiiXQE5E8jPWAYtykM4CO2piWm4eEqh6zMjQLv11aVwS17QgfpT6PTZrWEMzUuPSQGa8WdgGz+XPh/xxg11ZBQagHhaW4fZ3inKCNBAOuUVS85YBi0kz0qm76hvMQUMDSje2zEC0NiCdq1XRR+lYmJqY6U7mRzR2XDpkXCm9jRo8o98gooR7rh3sod/LdmMQgNQLuhqVmRWcFBE5X5g4a8PdCyDbg0urDOQl4igSMjPh0ddBGcHlowd+LGQBR2UjywJnFdYKNPy212ZhiUF0TsbThp33Pv/2Du3bUdxpN1icL7/y+4xOo0B7wv9RVHYxkLoEIc5L3pUZVeuZUuK00cQ+jbrklZogG88n08tLuuOwwWByBy7ER8gwVVR9POQ4FFV76AElKrPAMe2vzZEVygm310x/ieBZQOr4SQhZxEKhXUWQX6oYhESFi1Lyvo+iGMbhmiFxrJgu55NLktLfipMB7SjmkFRsqso32UYNLk7pJk5VhN/1PWuFR3QcJy8hnDfZEAHLihylZit4TlSiyofzDRB89IAWFUbMlZnBx08tEIDrGG6lW6WWYAmKEKrc6xRamEYdH10LThN0O/BkgVhrQB2hWu3UaJLD+igr/OgnAiKcwD/4/kwSDMTMwI0/kfF+WcRzp7qvAf753vG4f9CgwaMThd0QIOg4lOvjMsw6MrelryQ7XOyVgbec+cBDJxNBrbFZy4lencOnYfsdZG3r3C9Xq9xHLFWkGwjBjRonuuogD06tVaF8tWDQRyrNS3LQis0OETC0Oe0iEwHNHFUSpqruhpkGHTNo6JxndHgOoY+n69RbbgUDj9c9xh5B3RYDdZbNXkrMb//v0pzRSAAGRCgSYQonI0tVNHXl2NySFqhwZvRNRn6nCsiI0ATR9uj6NbOAxgG7bkighgXRNF16qizXAC78jLXgA5dxrVrUt7+83ZxbCeKUPnISX4lUbUGTfszGAvNpX1FZI8XrdDgBO1dmx0jOMB83KoJw6BLlxxIcuydE8doabm4hxDyWse2KD2lRK+NVEIEoG9zMN7/sPLnAepbFqEQlAlaslYWIcZR1PEVPwdx7KIYGjRgdDW95dlC747PJY5iQhlhEAdZ+0H+5NO70rd+1l1T/APEW8raEB1Zc5a2r1U4FiIra88Vof4xEB6y9XZAE9wpnC3F35qOIr6GCkXHMAx0P4Axoys666ZmRKYDmjjaBhtjN94JBTByW3boGVEKVw4mpBfGvhQ1AJS2muBk1gEdx0p0mgb0cQ7G1rlpj/vMEANFMUipBo0ATeFsxktUXqKzly2FfIBWaLCBsZkBdEATRxt8GCFz0wvBMOgSKbuN9fTWBI36bLLyB5CcowfP83FAx+12+/v3b+iN2v2VrvB4ZRJFIGrnPa7qBGjUZ7ARZFtlqmdNnlZoMBOXhYePsxGZDmjAhPLDMOi8Z4aOcnWEd3hRNKhO17KBwwCVXdA6oGNVopdlCW9f8WzsY63OImA1io6BOg0aAVrR0WIRZFbxCYMuaYXGvjA6aeGYDmhMvR7TNPmpcBgG7bAcisGDEscU4zT3aPhgIEBDc3cUMpBlWTiN1ITwLQyxCOVEBBYBZ6g9kjavyM4O4giEhpjtm08AKoxOUW14SoNGgCaUVvoAtsduvMMgjlyel3XQmKSyDmfLfnwFQDn7CvUqVnZQn7MIzlH3WoCiDmjyIjBQjgnxD2lWH74CrdCgKCszrIEwggNqJLU+Ey8GcVw/OSa/l+H+u9BgyNE9hQf1mQF80Mq4th4JAfqgOGcRnB8AjRmXFg2avAh/qDqxl1bMJr9kTCs09qUCjdLZqXDccyagdPnn+bE/Qe7KycEdqYuXVFkJi8Y5BygRQcZx3Hkk+qAPynIWwbm9aPzYWu5LpP2ZQ6U3RxXoHMIgjuT9dTURFDSGY6UhI9550gFNKC34e9EQ04ZVAaocW+Zk0Zw4BzqgoWbu/s2s8FEsCxgL3/KboCkB8IdK10FyjnrR6mmFBplG50Q6u+N2CaWF8i2mTwQYBp1weMzn65amcISLIjnhCTU/dSlARo7bmjA3VgY+RnD6c1legN25lS+EXWzwYio0SMvEtEtn8c+D6YB2EUUq/0a3Q5+/wTBoknX2C3Z5hjfRx/Doc2hOzBu12+On6Poyk1kiyEF7BBduyzzdwR9qTFBVFK232+16YkkrNAgJxDaq6ciIzAxoyHzsns8ngtQ7xLbI8+NHqTcgf5hXnwsFxGVZHDpJ9D4olLW/z3r+Zncs10cvR+bv2XwM2IXYA8wTetDoExQVYlmal5kKDW1xeF8aIzhcVBd1fhFjNw5gGHRk3sMiaMFhDy8VKYCoeIEpKUoRgWBU7ovIfMCJg9KY2Tp3COpWIFdxTSs0NDE6Y0OfI8MxIzioLigF68VIWo0OcHhlpd6hBFw5eCXV8Pnd6YCGhvnGe4HKFI5vKwN+7Mhb0Vv5I2FcoCs71ZjYZxnEsV0EpkKD2FTWTDi+7/4CpwESeD6fHJ4YGAZ94IU5QmyWh/yedQCon6/jslgZ2GLsHSaBAjRNOfhDRd5AdXba931GcwuOEQ0aZGazNqADmlDqOmjVZxgGslLbhdAp1DVBoz4n49xV0m0KDZN1WhFZFtiWBqTupVcY4wIPsVUIeadchrKUVmgoVw8aDhB0QANBSxwMg373U5widspDtsEiAIjKNJjCQdrv1qZ8Fr2sMOAPd1m9jYI04yCOFVqhsbISX9/DxNGf4ZgOaOOUiyuM3UiGYdA7R+x8EVQ0QaM+X8HhfHO9Rx3kkEt65okvKwPbaG5y3+UI0LQ/6z1C3uovS1+5RIYZWqGHYeAdPpCT0xqgd+t54UrQGseR03IFrtldfTGLoMLk2alkUJ+35QGLAJGhYRzHXG4HA2RZYN10w0/9hRxp+io4P8JZlsVeG1l4w7hQQsIjJbh+ivyU0j99CyM4APtpA8OgEea0mDzbxOrlKg9YBKifYxyUjp6ncFBRE5LsFb3NzXlZFoI+UMi3SjILvWlHKzRcwfbQ54RwzAgO+9uP/YgNk56HQSPM7Q6DzNVgmy6uHg4TgKrYQ34IKnackFTBj7EI+EOx39F8Xlq0nprnmZsJMbSz35d+u3fuZKLYeeTPeT6frGde3A6DDk+SOQDy6yjiwpXV45ADRBpLOdUGM/yW1OHeveFhNETbJmjan6mXJX9BD0JY6e4uWqFBSHKrOhbzDAei7Af1uRAOh0EzUPhbziRtj6ijLmaorIPkQw5CsouMs57TZAWfjg737tDWnPR4tl1kThonR2ZSam/o80GqWTrbpMUEYg6J84hw4HDogCaa/oCxG6VxNQza9gU4ZvaIIupios8CHhQGJBtQMzUngWFZwFVYb9UETfszOI+2rlLNYO8O28ggBj/Pe9JgBrTxJOziX2dsTZ0w6WcYNMJc24SJMpUFBGjLsizVHkOSwLAy0PkYvrE9200EaEI//lBmRurwcWOdyjroJEyFht2pYGzAz1hMBzQBtX2JCE6GQfM8QzgMjsiSjLIOx1UBTsCzh6lsIJGHre3cWF3JIaiDgVosMjh0ic7byMIgjgpfn1Zo2AYCnkTGZNc9+Sh8tB9klMqYD11k55EJU8MNQn2+nuuzDmJPODRkWZZxHOsbCEHn23awCH4Ck8N6uL7hIzpwYKQ5eYYAVEs4Q/5PYHUO6nO8a2UEBwH1gw+lZmuC4UEctNbKj5pY/fXsk3UAeHf+DU2DuMOyENx9RuSaDzsRHUCa1XMmu+ojLmmF9gzPe05xX0M1awGM3WhLmCFlrzJkKq7w3eHmHOrPmvUAi0BGUc25nfqPnRxOvL2rwOT2YUNNiyYBwCWKKrh4xLjNOWtOfmMqNLkuxMRiOqCJqf/mT6RQzbE3DJrO0IRsqWaqhNVfh7dGAASm41jlt91hEZyUAJ7jezUBmiTKVbEsv+Ai8DWsqtYgSyu0E1DP0mJxT5oOXdc9n0/sRwjGIhbniurUNqT7CcUAi2CVVrOev30YduSj52cRnBTGHHXWGfwEX4YAfMs56/cjMxXaQ/qB+pwMHdDejZwXBwRiZhg02lxytlR63ZjKnSv54IQLPN7QpPqVlkucPWYepnAYe8UKCPHNcwAWwUm9LPwcchSP085Wfrj7Z8AmGHMaSBxXsmtmQLsOqEQsmdgYxIE2x9aYX0YqfACZj7FxcSyL89qYdSj9SInXyHCJEj4/uWhkZd1klcKzQKZCk/QSi7d/ggDtN6bybohkhmFQ7d3ovrlIuS5R1Odcy8gJTz7bLAJZOLJCqy1jETyEJxbhW92LNYGZSEEb5qnMs+HrxbRCm0nM6N3MAiM4nNr/8/lkHYQzDINSH0dXiNh9CTdjsBTXU0kqT3BuAsIfkaZZqPkpHPh/J4GedSht0SS6QBTWRdvgTiu0AVCfc8XiO/motzID41EUKTUOg+bdz4wHIKNzpljKmESyknprAHBS9JLZsiY+t5gE7LjuzegJWVu8Yiuo5dNoXlbTCq06tpJE5QrEdED7iqmM3VAXKdUNgyYlkukN2JcsLhT1GTxbhJZ3p8hzWBafMGKLnAo8nD2ceRoSWrtCK/QwDHRjKMqdeLKbl76jJ8JT6UjEUscwDIo+LY8Hs6dKVErUnBxskJA/KJrcdSUMGQ5hRGfzdkqSX+fYkwnYQOk7ppi5gfyTpwhamOcZ9Tl7LKYD2kW+xas6qtEyDJrWGzbFtlMlBclYAHAsFR17dZtFXfdxKzE62xChDg5/RtUJoR9axTVsPAtC5lvSCq0iquLtSwRiZkBjPCAdFcOguZZNIKjPGaMmeT84PPM4EDMQoAn31L25lpolNXMwFBk4By9jWS2nDWKeZ24mJAf2BgK05UoD4zGD8GHQjCYomiel7TvlaN4EkUXIe6pZBNLuovnPxRWwd0QJB7ZtliBVx6hpf4Ym1s2py15Wy/GZy7K8Xi9dIzdtw9sGpQMxIzgwHtDBMAwyN5TmUIE7ErIZliILPMYDP67DwGnHWj+uCctiO0ixCHVA6LfkFQnKnhH1bnHYaFqhhTh5/Hy5c/5/AjROzWQm+ng8WAd7yBwGjZsuzakmaDqhsrtTomSJI80iUOUWIktJaawJGidmu1pmf+tYNO3Pxo6E/FjGs6Wiiai0+0hohZZQ9OHkK0AHtKkcdFkWtCfbwVLaMGjkOWn5NB6Awh7glNPAjZuHgoqgD9c1aNRAY+dBeP6JaZdG1CCObUpmshVauMWRDNcMxHRAqyeEqF11cbvdns9n8K2rk2WtbARLOe/SIs9VI+YpPfdA5oVEpPmRBrLts+ADNRZ+cCUNYxFO1b1XfAt2BHUOKkOfa5bVApeaVuj6kZRgWjMQ0wGtdfNCs/M3p7kmSet/sP4DkrR2hAyDRu6UFjspjfIebxahKAjQbVMIq89XMn4pM1M4MDTDcZ9QVc2okSeIFERnk7mozHSUqdA1IynuvfLZpgNa2YYFI7mya98k6eCCWWQVNB8GzVufTZKkb4aP+hzp9HZVx650f3+PhOQP7GURtotb9DjWxFVFwDqcXbS0Sof2Z3snQaavZsyLqPJKwpGgFbooDH1u4n4RoHUUD6HNIX6zTiVY77JL+OtI0pKDZcOXhoKEwS4IceLe6qIYNTnLmJog6wffiwxdwomxCPX9tm1fQULLsvgB9ZnVBktekTZMnzV1ZPJmoAyRZnS8bdAQRnDIJejOadHoSm3/rt0gSQuk4TBoMqSGSdJ2x7U3QO0OcFE1+YoXXV89GYYBGRo0GpqTJDv7dzQwhUPOpRGQt0CgaauaUdP+DKXPJON0mpdXwufC0QqdF573tAUBWqJJBOn5oictWsCsSjRyTEOaDIPmaaGohFXU55GsJmfxosjQRZcXCnlsP2Utselj1coi2DvnvIV2ZfXORh90CiJFaXMmeElISoXvAlOhc4H63BwEaEHGcF13rukEg5vmbsO2VB4GzaxhOZpCUVnhm5r8/ucOzwMyNKjA4WA7xNaPzpxFsBeDWISLRhGvQZP34hWLxiweJglB+CCOXZ5DAUJurBoE6PZ5ZKH3biq70W93G+IlzcRLXvkUkjeffRs0Uk1mcxNc9zAMDCa64r4o7EmvhWsKqqdwMH/Dag7AOlQzauR+gkXRNJLtEJWUqshLQz1OK3SC4T+fT9ZBAgjQbQwgiM62k0gk6TrUGQbNfetyzGp9+eBAPqZAzZWMHltWMIqQBSJDZ19eOIvnzg7OEmviYUPpl6wJeS8U1QFYCvLSK/Vgh6Jyxpnjz+WAAF3VU4QhG3Vcm0A1ZCdJc7dhLioMg6bmaZWkru4iWM04juSsMn07MjQ0hJcKcYysiYcSmocKuZKrmGCNYGFy65t/AIY+i0XLII5t9RHexWTvjj05zlwUCNA1vEOTcy/fGR3cbYgkfZai8RL1ubJFhK18T0+ZglLfi8YXCcjQ9oKUCpCeS8sKeqdwoHEYO+FYek2jRrAgUpTQBCip5Kemut7Pm+eZcRwHPJ9PciFpIEAXdAeKLhWUkxYgSacRAk+J4oSOm6JH/fUPMX+LtLV+GppQXSBDQx2QnoVoCqwJ1LF3FiGvgRzHaCo4yF5Pcai0JP+6Aiit0N+cPEOfZYIAnT+6CNGdbfigd22OQdLfKDEMmiFlGc/wKa35Y3qBoKArF7zdbqSD5oNUE5Ce390si/DuhVgES8UFhzy70ziIQQiFBIu8v5R6Sld2qmgQx9Zr0Qq9XQ3cuFgQoHOeclGuymptz92GB+QdBs3Ah4QUc6s158106X5S50XDpD9kaMgI0vNxYlDOt6szYfRKS6kFhXRNu2bBDe94k1/K0Gdv+X/DXEhmK3Tl84/6LBwE6Eu2FJqdZVaDfvQOJOktuZ7Zkn/HLNHxyOa8h5zkVe85QYY+iFMc7EiQnqXJCirCE9iwfRahSVkBRIrrZwn7dV5Q18dzKzTPe1SAAJ1yssNzFQ63/Nwx/IOrQdK5BnGQMH0s5itozR9hiFUrcimkqwzN+3Elltc2SM+RER+2DodFsAHlRlEzeS8KaL+AjMbLWVKdoOrVoEPf0jAM3rJB5AsVIECfONOh2VlRIqjXb2ZPMV3dbXh9EIdn951rZHPeFBYrNnO6QhxBhl5dMYtw7IoJ4jFmVee3KDquHBtLIYN1qGnX2A7BImOyx5qTozY87dM0CSk3Kpgez3sUgQD9O4nnQJtMQWxL0sMwJB9aP+02RUc2Z4THuW2zz+ynAhkaYqye2jU+T2MR6hd7UAGqjwqWss35Ufwhy6FiCIAZtDfzOWmFRqzT5SERoL+e4yA9q/4WNJedMoZdrqB6kHTye0NWn9hv9eVWYzSoP2F3JpGhgTQaShScLIKZSoR1qBCL13KJBccxXv8tdI1YQvUgjtXFyWmFLvTteN4j3PHuXitHgP6Q7Zmp/RCgs2QqSu82TBgGHS7PtRGNNGrN38IqxmjYizqXoQlSuwwE6VmmprBaq4oTi4hmI43BG7DmQBAHMtVciYG9Vmie90iLoTsF5hsI0P8GDFJ2iCzqtEjSp4ZBK828BY5szuuasDsPeed6t+0wDN5kaO4hpGq9aDssAmti0iewCNXsJQR61hzHeDGLQ0mwio1btYy1QpM5Nz9OkXLzO3fPqxZCheFoQXNZaXaStMBB0vHDoOU/QrStNX/zUViZN9HBpwztfMdZh+tRGNbAwSIYONUc7PpWw5pD8vlhCIBtQl1vY4tttEKTPDdJtnMpMHeHyxeGbHiIEwjQ9VMQaXcbRs6ukqY+b1dS+xiNK8EVm/KJKxnabQc02bPSKC88s0JEM3DGeKe48oKHhiSKJtvlf7mfjMF6oO97Mzmb6lZonvdUc5jlGv7uftbRYbFHLiXBSzaXpH8Og27+PMbMyObsFRHrIMSRNjmTIWaFBNGwM3cYp5Ce5WsKqmMHi6DdP7AIdVKsjyk6iwNEc/hWUFvKOsJ30aVB87ynRDRMnqSRjHEB2tilgmDGznf5bkh5y8WAg2HQld/0RGuOhPgKWws1L0NTrEJaQGERjhMMULeDPFYpZxrh3fOPNhL06DUbv/0DS0ew+PYDGfrsDUuDON5LDFJoP6Gw7dSpaZpsCtDozivGHtbZrhiL3m34cRh00TZbbyObKUENZ5zNTy8ytIG0hJykhF008c9ibZA4qz308+w5exZ6qs0iWNDqq9Gj4cBU8bcOsTSIY5dKCdegp2miNE7bWVE6THjWa0qADgUepxPMFNUZJen3YdAZS52d1kwZfD3KsghykFNzmpShzZf0SM9QP3kApb6C3ClLOprr3b6dHr3m0ujR6k5FXjdLlu4Zk719RVuhLxogz3viN1H4hbpraFYvQIc8A93ZlZf0XFXuJOlTGfBuGHSyJsIYjQo+jXWA4/h9u92GYbBRAFu9hxDpuU5YhFxlHhD69S7dWnuX/l3o0Z4dI2Ed7A3i2KVVolqhed7zzac1n6RxJXre9a57iAFk20Dt3UXfbbgOg458lojWXB8CrcBcU2YQnKbJhgxtL5WnRtWlKST8aoFGh3xJ6Hdl/h9vEWxYUa8Z+CpJs02WggVDn8Fw1rpNJJZlEVJZkEuvzmeLgSTnrs4qgvdHCIt3kSyCH9+02/qPkvQwDP/73//eDwYjm+UEftYB4g3fjAxtA9Llmt6SRWBBzPgNkq6YLPfgFkFRH3Kbh4d2QhV3fMFxroWRwmratl8xn+e5+c2Eboc+CxzcnGU3t/9617ITFHUACXnwLl7ebrfn87nzbh2tzVIdNMjJNSXbiHYZ2oZ0TpZS+cyzCKyJmY3DdRzksXUezJeI8h/16K0qDSocI0MA4KPHMNwH3WVthT67Sn6e92icpJFWH+128y784wbpGTeXDCkObN3csizjOFKpig327AtcMfAgQzdvW3BouVSn6jSF6x9A1IMTYode8B7vBXn9t8EqmPOuLwQ9WoVv5NEyHDgN85G3fiu0YYtzIje/b+j7l72L/aC4e4DsBPUZqELBapa5jilUJEPr7YBGelaqKdiD+Rt6azMOc81bBEV9a/RoycGCoc/wM3e1PYhjzS5er9cwDHUCohkB0OQkjYRF+GggggTocOZw9ACFcDtNSVGAZx0gV8WlToZWZ7BIz80ze9iaPIug1FF7/u7cOLJdkJ0e3XXdep8hdzzU3w6GPsNPzA/i2JpD6YJCtUyxVvEEtS3fMpx78wMdimRqiXJ4eDoHMbYWpj+vIRP/KArELOEppt4KX4UMrcgjIT1LONhCPoYQz0DBY6w2s2q28m8RlObl1hOCHl0zWBDlwWT6ej37LdQKret5j89JGglsdacd91YnOAzZIAUBqMPj8WARJFehOEPh+aXqAiy8YDQMg1gZWkUGT1GqWlNgQUBa3Ddfu7Ya6GzVxtGjK/hGhj7D2fTVT6tfiVZo4Rb3+i8c+EiOy6WqAnQQnXHrlaEDGp7P57vTpAlai5sGyJjkSZahxYL0LG07WAQWRHsZb/ueJXWisy4Nd6dHd/+oYOjR160SdwoJ3sNVTZ2xFVqaMMjg5lz15vHq3et8CC4VBGiYUSGdCHfTLALUPG8CZWixBTPSs8ygJueTSDi6lEnE/eYn0OEtgtK2AD36im9k6DNcTGK93aF6vRX6Y3tcza/AJI1CddPP9SwoQKM7U9iDhAjx98IaH7gAACAASURBVO9f1kEyyFskl/UJMnTIHYkR31IobFO1oODnoLII9sozFZbILYLCd2ebwGwlaYIF4R6y1wgO3zhPboXeXUxVxxsgN9cPPd/IL0CHspatBZDAcUbFFA7hGwRQOndcryhsW5SKKompRW1oCiwIyNwvpe6FWwRVn7qwd2vADXpZ13WGR3JFnlKmg0KuPNZhWZ3QCl3B4pik0YrI9Oae6/CFZmd0Z4Ew7tMt8zwjowgP22S9ijJLq0mMHBlawlLgM+XvkTQ33tZqSLzVJWa6shRuETSZfL7r0VtV2lUSztkGKoXreci3VujdgpRQn5GbhRBfQF0SoIPj/jlnGgCa5FXjOLIOFKKQK600nz62laHbJu5Iz4pCG4vAaujdL/lql1vR2a14tFNtzOjRx7vJ0Gco4UMcDuLYGtRxK/T1oc9M0hDLKUE4RYBem53x2gBiiVSfmcLRMFQjQIM0guhwu92GYagsQ7fyRUjPus4ni8CCqK7PxX42bhGE9TCY1KOJ+1AnlSUneXcUaUOfkZt1FY/x//391I9mTJJS3D6Oc8s0Tey4cPCl5JSS689pmprI0JW/ZuVbUOD6lsn8VK3MBLlQV9AXtV/cIgiR52SnR4e6clWlZX7sgyIINQOK4lx12b5P2W3mJUTaLJM0NMaIsx71twAdmp3x1ACKHAGqij1nDVD/lNaUoWvWsbx7q7ewYRG2x5gzrGizmp9ebhGELKeo27RQaNGjt7k3cQRKZ7N0/q1f/9vYjfWFG+xROwlvk3wVoNGdLYEfdMXZ0c9M4VDhrEFCTunQUox1QyM9Q6FzVd86OMYE/ZhDwi2CUNoLCdSj390j0R9q1gvOV2BZlnEc11kcyM3kNlv2AnRokudwACjl+Xxiv/LzdfYI1B3aIEMfXzAiOV+n+DRQz7AILIhGKg/fQHSGhqlC998RcyFtaK5HM/QZKuO2+S9oiVtXQCQit9lx7zYvpHA+rMKDOD+ZHwmWfNgjvY7UuXy5ZgvlZOhyjhHp2cDxYxFYEKVus8Jv4RZBkH/+6+jRO0GDoc/QpGRwpUGHGPRe4RKSrHKlZfn+eDw4GQA2eDweyWESP1AzQrMOoL2eLCFDZ3dESM+WEO45K0/hII5oodwjZ24RBKX5wzbobyXpcukKKw/1cdL/F3/NIFhKyK/41TtZiwcUtapBMt/G/IO0bWIRSCXNZJx5ZeiMAjTSM5g3QBZBPnmHb3CLINjzY9u2jFWPvli6BusgDYDm2G6CjpGeaXGzmttc+et3VhDAANenmxEh6mwTi6wXBOiD7HMYBiFPOqk5rTpPFoEF0eger/8QBjqDH5N516O3qnTNsgggS+Fgsr4O9kWm7ZPrrhUBGsBCxpY8fAN0uWwAmWSRoS9K/EjPtsOcig9Z5zEVh1yLV0zeX0Tn+tCHIdCjbnckUo9mIACIou97S6dxe8cgOCRLnYUA7cj9kchaZRxHFkE+tD+DeVp1QyM9e/CfLAKrocsZntombhFsDi85CSdGj369Xn///mWtQBQGRJhvdwxGulbimpnEJstWIkAD+CpyiBCtoP3ZRoGKjcQ4pXmew2zoUyV9Qv2P9OxEd2ARWBBdGxTT8sYtggBXrGynR3ebe1Z4nACiage95QOvFEAg41tZCNBeoAPaavpF+7MKeF/JTBLJPp7KVBJk6Hjvh/TsJ9Ip+qilhQ/0ShUR/2DvuEUQoETK8Xw+b7fbViUJwl/3jx69/muHQg110TiIA+kZYhKbBBCgARSD+qwF2p/BbU14SoaOkfiRnr3BXrMa6pzedr8Y6AxQ2is+n8/dHYZdxOO6dXZHyE92/wqQEUW9gMuy8II1bFlfLskCArQXCKX2mKYpeyQjSJSAp8c4UufEy9A/XVAJvwfyzw+LwGqoYH08huhMfIdqLjH5mfTOQnfpOvI05PUw8qts7hiEj5VX3h+IAA2gtcjJ+zAKFDluAKVV4rIst9ttGIaE+g3p2W2wU/eBi8oTVIaSY/3j8WCDAGrmFeWqoWN5+tt8D+Rp+IZYAfrKHYNgmxIPJBCgvbA+tgUbPB4PFkGL42YRLOWOLML1NHeapm8y9McVRnp2fmBYBFZDMuHR2nqjIAsCUM30GvbiHM/3YPw0fDwV0gZx1Bn0zAvWqtOb7D8WARpAH2HSGUFChVjA82SAb6bxsxsa6RmIR7tigEUQcizX6wTDn8zzHOYALMsyDANLBFDaGUp+E5Tx0/CtyhZSaHPHIMSckBI/GQEaQF/KhaapBeK6ydwRRSxjcrOTodfSC+kZ1pCn8WAXEhEwiuY7u9Odd4lZ2Pd5ntGgAYrGBe1zCE+Nn2a+B3VE3rOX8Y5BsEo5uQkB2hGKbl+Fg+KnwvANJLZcm4UADRBjKUGGDlcUPh4PSixYzwaLwGpIWPkgOn/cgp0WNgxDeE0tbdg9NITsVwUG1OeY73h8UBk/rdrPtNJkrtzYiWt1RdFmRwRoAE1w8aAiUJ8pUCGe8MAmZDylr3EDRaeCRdiWjixC5eN3oDuv/817YhbEhWma7vc7rgwgI9M0kV2fGj/dMd9DZClRuZpYE2yAmNNS9HAiQDuCDmgD7oCsS1F2yGYBnCK8Fbgazu0fuv9e4AOujoTeEJD9xCLHV9u7n7rz+l+O4/j+58MwhL8+TdMwDFwDDpAF1OdID7bzXcfzPZCnm1BHgGbQMyQk3qVzbwRoADX5xMc6R3VctJ0lswhWU0YWoZCL21nNRwEoVEqo0n5OBYtwYA6Qd4XP1l0HL6X1fR9q/tBJxEhogIvmiY6WC8ZPC6kmirYGSjMZhAUtzqHCmUGA9uXpWAS91FSfIUsdyzrgSCGeMJbuZ3r60bJQpa06UhaB1agTrxNCdhj0/O3/DcpC+A/CD0eDBkg20mNzg4wwfrpmQVFCluWOQUimzhMLBGgABUzTRCDRtV8sAsCpdDm4uLRE/JsqvSuTWGdLZbB88k7hIAco4XOSK//n8/lzR9Ym6PDruJYQIM2Roj6L2o6Y8dMd8z3iyCtAt7pjEGxQTb5AgHYEQ+hU517ag6Kr/UIpADiVMa8uLm8i/rE0olFakS9lEViNvGu4zne+8nMim8v6vt/mA4yEBkiI4whq6nzszlt+1CKQp9cvnmUQh/w7BlEVhFP64sEtCNAA0nk8HiyCImh/9pAvkkVlLFeqmczHzh1Uaclng0VgKXIZ/nXdOaHOf1cWGAkNEMn24TSY2dOdP9w5zDUx69zM97gyiIPZ6JCFyjNbEKB9gW6iDt47U5da0f6MI4V4mjc3cdWhijJVKbmmcBBWkk07l+68bsSpB2Yfu9sYCQ0QY2uoz8T9nTu1On46oaxAeoaMdlc5yUSA9gW6ibryqW07LQfmLLQ/AyQnPXK8DUOlJYQ/FoHVSFurIDqXuNkpQREbhuHdn4RPeL9ThQFkszUw79utjp8+NYgjiAMaH0ujKsik/mMMUh8AuYH279+/rIOujJnI6gGUx0IVpnDzYah029Wm6objVSqkO68/P1kR+6gshB94v9/xG6KCO7YmMDcASAiUusZPx3wMRqJDdpo4WwRoX2SZcw91ENJLSzqubssAVJQK7/aiztUwVBpiDsnFM0Dadry8Fd4evXgX9Mcm6DVt4FpCOeCum4P6DOWO1vZfd/K0hPkeByqN/DsGQSOtDhUCNIDQMEmkUbdlKPXUqBCf9Fi1F4ZKZy8UnUNk+bgmNacWXvdXwzB8e8uVawkBVkNjpi3Iydy2aX8Fefp9EIexQc/0tIki5B5NfjUCtC8oerVEwcfjwTrogpYNgEgc3tX5bah05+ae97NBkEWIqYp9uo7KC/J8Pq/7qyArfPvkXEsIgPoMegNxrvke4b8Pb8ZwxyBYLcQQoAHEMY6jqM/DE8ufkCJ4A6O4kvR8fFrjcD0ZKh2/Mtpr1+StxM+Eyr/VO0bzPOc6jX3fH6QK4QsOw8CDKHAI6jNYSlqujJ/u+x5zgNJpVdsDhgDtC8bMqUjCePtY466xCAAxSc83Y0Fo6xgqDb/KWm+20Ha2Vd6xm8dN0Kt75FpC8Gbpz+eTBAD8xPGD8dPmDYH2HQk0Vy0QoAHE5WGsgy54TO0QUqjkpOfburGeB3HB1VBpHsF6tgsJuvN6DrMXacMw/PyZXEvYNrKzCPWrnozGTiIBSqNeaEoN+c88zzyJhHKFWPPPgADtMbsiPItF2vANjk1M3kD7M2UqxJDxZXY4HirdaValTcaatCkcfsLuKjoL+crfJgVdDxy7O6a+uUquJQQPVk/vM0D3qf9smqY/f/6wMpC9EJPgchGg3YGSKBaGbyh15SwCwE9KtBPC+yK/R3x14zuIg36WQpru/E0LyEiMAN1xLSE4cG688QnwXv6v0XCeZ3shABmqrdcVklUiQAPYL3ig3K4hQPuEDuizlnKsPpOPllt5XUOlOQkeViPozjLl9dLJWGQTdMe1hGAX1GeAn+FmWZYQL1goyHLY5EgWCNDuiEx8oTKPx0P4J+Sh5TuozwAxHIx+XhMjVqlmGip2qLThk3B2Coe0vuAsKyBWd16pMBNgGIbIReBaQrAH6jNAKCF/VpHzPCNAQ65CTM6HQYAGcFHwQIlaGgHaMzySiU+yf6otrKQEUeD9D+ur0pyE4x1R+kUkXCooKhk71QvCtYREdktuDfUZqB/jb+QOzyDxsXAFaSMQEaA9plYsgrRsjNGoeHMA/BsI3L73FGI7viN7UsEbWt+qUI2HR4vuvMb0asdvGIZTHe5cSwg2AgrqM2AFp7Li8OYQDyAhGSEXD25BgAZoXGHKH76xwkPLXULAOngGc4gxE9Rne3tabqi0eYOKn8KhdP5G+Ni6dOe1Qqv8SlPf96d+Y1hVY61w4IdpmnhrEEiJfwbH9/9gnmctl0iDwNxGoF5BHuMOnqGJYhxHFkFpJs0iAPw0kxgdCh3fQFmVZag0J0HpUujVnQNNXtQIUzhOrVjQL7iWEDQmA6jP4JmLUWaapj9//thYCtp3ap46md1yCNAAzZD5VIqwEVME0v4MSAC5/BsuxWri+/6Hx6o0CsXx6skMhdovS2w4FuBsE3S30aDpJgEtoD6D85oxS70/zzNTmODsmZH5wRCgPYKGKCQg0f6sN5lmEQAOONXrQTxydTDeE5JViY6fUKE69GtvBrehO6/fpeFQ2r7v055nMxIaFNkXIR6cm0Cu9Ol2u/HoESKRPHAfAdojCNASQH1Witj3WaC+I2URviXcPKSB+NOyJiRB1lz7o90WWjIztCCVWgp/EvoAwiCOtFSk6zo0aJBsX6jP4JnsF9uaGQaNElXh7En+eAjQABZiEmEDnw4gx0bILCE5uITDE+ROn2K0qPTAnu68IqE/KJztZA2aawlBJqjPwPlP+4s/E2wzw6ChEOEdKcmfkKzFI8nJLrQNSyBBFyCfhq12wHl4z3tOxRcWEH4ej3VMwW2D6i91/PklGEUQnQ2bpxx1bBiG5Jw85JP3+503ckBUqkyZA24p3WS2LAuDOOA4eRP+IRGgAWrzeDxYBL1ZBYsAcJD3nLURBGg4dVrWA2NDjD7+jq1KF/NW+Xw+RVVoF/tCuJYQRKUBDdVnMgpoG74rvAIYbpZT7fBp3yl3AlXc+IoA7REaJdqWPQZ8rs/IQfszYAg/M2/WAaqdN5NidH2XElbST4A7+5ZGBa40Qa9fimsJs9D3vYoCXmyeTO8z+GSe5+uuIzIKz/PME0d4R0sVhgANUDUzQ6DBrYMZeJi3M5AEAQsFH64b1E6M7sSPjT6YwlFNG/WmOwtPw4ZhuChecC0hNDcu1GdwSJ3G5/eUmwsAYHcktHxUDq5HeGjWKj4xfEMv8if6A7Q1EK4WACGhttN8h2HpQLOKzj5fYxIrkIUpHBc3JfyEYRh4OAoYF0Cdk59R+IsPASGU65V0eIU0exWmaD0RoAEqYax/1lvkoP0ZPloBi3Al/yb7hKJIFqM/NkGXe4rjWXde11a4QJZl+EPoxeNaQqicITO3BBwmGPUbn7fM82zvGgxIS2909QAhQDuF5071gwQKpurtYxEADlLw5L/LAkK1g9q9idHSirfsJQS687oO8tszszRBB7iWEKqB+gzElIbW9+fPH7bD+VFU54ERoJ2CAF3ZNYzjyClSnV5zjAFf+s06iCaQy5qqBeVu8/xDzh2GuUwp6M5MxRGlFMQwDEOufINrCYV7ITMJAOozeAsooobOzfOs0c9TPWV0wuo+MwI0QHFMqs94dgC4mIWTfYKQerKJGL2bwnHdHILojFm9B3EtaxJGxOSSNriWEIq6r+fzibcBh8de1EcKL3Xxvovb9Ebjx0aAdkrGBBd+ugaWWnWqQXMHHOsFnmeq8ngG7Pn8Vp3RyakCuvMBz+dTVw6WNz/nWkIo5CdRn4GKPrtZpf1FhkH7RNfFg1sQoAGKp2iGv6B59Q31GeCbc7uoPlO7gvxDvhWju8J3GJ6yiPDZ0J1/RnB1HQB5m6A7riWEMqUNngco50UFu/tdmazHFA5v6c0KArRTSEPr8Hg8WATVCQcCNOBLP3L9rXbyTlBUkHy8w/C6GL1O4Yi8JxDd+VR5pvQVjWEYsheWXEsIWViWxXZjDcB7KKlTDF4J6yExwMP78cOqX69HgAYoBQ0CBnIOFgGO8SlAq37wDpClSswrRh9nC6voTFIRX56pHhA0DEP2DIRrCePDOob2zaxQn8FVrFd0hUAIGWjQTqow1Z8fAdopuKc6QYtMXfUOIkADfCxBszg3KnywESm6NzE6YRrjxyc66M7JPkq7TBamcGTf9/Az1b2pDZgVQGWqNT7n/cyKFB4e9aVhwA+TggAUqUgZvqEdblcD+OjcMA2Ab9bRbZ6sRN5hGKZwbMswdOeLu2BDJuv7voT8EXw41xLCKVCfwVuiWz/+ZvmNYeI/m2gVGyUYB9QvPHcq6h1YW+3JBxMGAF9azrnhIcG8Ne3uMDwQo0O4CXGH0HNxzc3IZIWaoLuNBs3bkBAD6jO4Ou2qNT6GQRsmzNEy8EUQoCnzgNDFWdpDjyfAx9QnlzpG9AFXvIvR3T/D0IK4g+6cK3Zb8i2FmqC3pSwjoeGnTTGPDpyEaRsXnMzznDAHDAFBOJYaFBCg/cLLd4WiF8M3DGwiWgCQP72nPjyYAcgSYoLHCIHGTEtLc+zp+H3fF01Iwk9Gg4ZvoD6Dn7hsqc1/mqY/f/6wrZaw5Irpz/cLAnQJxnHkOBkoYjnJgC/dpeZ51WcUN4DtoElSsuv1tsknx6XfpObJIhzYFOozOAnE9ko/jNcSxs4nAjRATl9P56x2Co1cBNBeiGIXUAE/OuyyLLv6EA36SvZltdi+3W6lNejQ+oeHh92RQMACJ0ddQvGe3QOrmNhA2hNZghn7RgjQlHmQLXK4bX/GywO+1DDZH62hdIBzvtkUiVlamW07cNcZkWG1hRwSAjRT6cFJxWf7nVeeIdnYRHtFEwI0QB5Qnw1UzrQ/A7wbRXZxBysDt2zHbliNpJUdlIepWaWboNdCF8ECB0U7PHg45+M4inrKUsjoaKvSnuHYnC3G1rqlTjrrBDpHzOwjiwAJWNWMjN3KAtDcoGIEPjRoHNSOYRjqnIr3yTAEdD8syzKOI+oz2GaeZz+ZbdFrbPG3EjJGjSBBAlACwf9lJKTdAFsKPZLB0MBhKXJK2qMki3Ejrt48q9Y1Et568eylfVqfk5cJgIJdpqhXzuVS3lKCictn2F0qPbjI4/FgEQycKNqfAV+6swhe7ADIUlhiTdnxJpb1fV8t0PwcFAPGQH0GJ4fcp1ujwmXLZOUzbLBnEKCzlEDk6AbgnVOAXaZeyChwmOCK5JcoydBIvfY1W93ReTw18RPubajPZBfw7WA8n0/nIqzYr0+q8475pnUEaNdg89eTNh4qEpgBjPnSomOFKBHBVZJw5UEOSdpHns+nT2G0ZhP0WgbzeN68j6L3GcyfcDJP+cOgYQ275ncKAdo11DYXXTnDN2wcKuorwJdu4XkMYE3XM4QsVQR5msPa7IBhGCr/Rq4lNMw0TajPYLhOn6aJhHYbPRHihbMsi4cMBwEaIBFXt9+YT1BYB4C1Ii2a/ZD+goewkrHSQ4Pe1mbO4/Xtdqs8iKPzdy2hE4ubpolHC2A4Cit6V6aad5UZQElyVpz4ZARo12DwVxwEb7Lg6wGMQbMbgEAjIlvrmBXwD/WboDuuJTQH6jPYPt4EC8pejefWyTdFgAZIScRpf7ZRKidfDwWg99gfmEPplB39AsyXdoUeTjvXoCt4J03FW9+mfEO1NGNK7CMYrtBpETvAyZAHjdmjnxIJAZoUFk6D+mzJ3bMIAIEKz94RoOEnSpXWCi2ibjVonvrvaNIEHeAtGe2m5PYOT/CQxCp9Tlk5N5bmw3nHy9uL9eiPAKfDG6mbjVhC+zOQP+HZABRFE4d1Gr3PH2mrQXNzhl5T4jEwWD3bJLGncn4WQQgOe9IRoL3DQycKIaIvgHNfWq2pjdIXTBYPNZ9lekvbGD38uX7r+4YnwfxIaHtWtizLOI6YEthjnmftT1bqf/jX64VeL+cAu0tg2HXnIECf4vF4sAg2IPQCrLbAczWANNtp8uqAn8yNprajEq7pGL1Whx8S4AJPMJy+8jJrGqKGDrvVo3x6ZgRo7yBAn/IR9A6YOVq0PwO+tLIt4D/Bkim1HeLkIXnzNhXxdAnXtAl63SPUH+GgPoPhg01iSS3M+uvLXth7Kj0WIbLUxE1b2k3KWoCu7uhn6gSwVPo2191s52/zPJN0/a7iBNwlzrWEwj0V6jPYK+KezycBIleoZRFarbzbsggBGiAq1P39+5d1MANZC5RAnR6EcACQkA/I6cy1qkFzzV1sFdf3QjRo9kumHaE+g70QTONzXi8hIZ/x1hDp8OLB/6QuGJ5z6ICOgcTa0uly7vQBtkl85d/IsoN2q5HWtGLytjRUsxOFXN8LMQ1UIWmVC3YExuKvyVPd3G16bsVtmEm6zls4BAA//TICtLGknEWAEuhSgjAEwI5OIfaNAUsaNHeiJuy+EA26qzvTCY43wqHAgYhme3O5k5aKgNW2AQK0d+SkrWID3jiOrIMZlmUhQwWoLxNgd6Aa4Rfi2dCgUZ/TGIZBlKUw2al5fGcLwNiRNhwahKTHXGtR7TBj0XeWAOAA1Ofr4USU8ITfB5InRj8DnCoOVdiLtGibFqB5UpVG3/dyHpCETyJKFvfjrGhCB2NHmqeS1fy2qPdpTMK0k//LWFgCYAz0QS1EGmcsuOL3wbkvbZXNY3qgtPpV9LRGdTrH69VXGIZB1O6Hawn1un2NpsSMAjDGPM+oz5UXnEUoGhbxzwEEaECAPsrkWAdLB4wNBWj1EgACNKiLGhrfFVCa0QmfcKKjohPWuRa6cZV6fnV2xCWQYK8Gd6KH8qKw6uzFcD5ZMF1hCQAB+iMM3zAGfh+AtzoAIgtCvcaiLqnjquc8FV3fC9x6gk4FlmUZxxH1GczUazxNaZj84LELnWoW4d90hSUABOh3eIvNHtS34NydNnz8TiEBugow7aWCorwuzGrg1OUp6kSO7+RawtIWxOt9YCb4+ml8FgtzirNDkrPPVVgCgPf4h6cwVgyTzQBujRoV4CdmXpNUoUGjnWUu6vpepgbN28dYEEDMYUb6lEArGcRkTySC/odchSUAOqC3vF6vx+PBOhjbU54ogHN32tYEyL1Avh2FxmdLLz8Jz+54KlakruuFVnbaryWUuaRYENgo057PJ5WaKHhkmGsZeaX+Q6LCEgBsIT8miAIkI1PxaT6FE6cK8gtgk10qYjXo1+vFTRuFdlysBq3oWkL5rTmoz2Am+HpufBb7xZdlQTllDQuBAA1y2yWaeAoewBrL5g1M8wS46NYwAQC3NiJTSkM7K8cwDJI/3jRNhKTra4gFgXbCEylOsljqP5U39lI+ke4bKI8A/wZChm+YDJ8sArhNniS85E77MwiPEeZbVKT5JQZ9Fq/uZHeW8Fj0Cij4YKPofj6f9IcKD4W05V3Jc1iErykKSwAdY6C7rus63gY1GddJ08F5pcoiADnJtwDhZ+iWnDQP0aECwpugO944vBDTSWvBwDFGntMC8ZriKzsI0CCrMmkFQ+JNHjMCAHh2p81HPwdodQSBOHw8KcE1kWtVQ74G7eoJUJblej6fqM+g/RiP40gUUETlqG1AkjJ5oUheEKDBiLVfD4ccA3vbSooDbpHzjjN5GGAdJHsdTa+VC7y+l5/bBw1aZqomavWYVwAGmOeZxmeNGTLPvU7lOTjq3/kJSwCdewEa9dnkSaPQBbfuVMLoZwCZxZ5Ywcu2g1qWBadUu8ZTcsf4PM8IHD8DOo9yQfsZxsz1Qk0dec455FHJCUsAuFQeVZmMAWwruEWO0EPNDAkUEkmpDYou7/HKoz43qPE0NEEHuJbwYGVQn4EzDE7KatU9kcj0sckJSwCd4w5oiiKrEAPArTtlqibAxxoYhauJm2LKWUPkT4LeWiiZ2/uaoNyB9iobu7YBo41/Fl8sQiQI0FC7FBHF4/Fg9+0dNgYwgVt3Kk1lI1sFCYeQu+8aeioe87fdZS2DODpmTbxFc2wHtB9gzNkSaKzfQJ0/BQI0VK1DREFcJEACWELgKx34WGh+AikMGuZ+JFrtK71eWa3HZLwO9RmUh91pmqjFTGbIFXpc1KlS9L2dTktYAnCb2xEare4s5S74hHoVzJClAmHsRttK7/l8UpVJ2GJ1GrTzawlRn0EvoRMCz2/YO7G5uwNPnnkWBGj45yj0jg7D6/Vi+IbVipfnCmD7hB+cfGmPXngUBA1h7EZbf8X6y0HRJOgVt0+P5nlGfQalTNPE6TWfJPNW2e7MswhnubME4MG/B0cZ/uF2uz0eD7djr21D+zNI4Ha7VT6HdHoCbIM+5tDWZc3zTFUmir7v1T0PCBndMAx+MvZpmvBdoDTsIj37YZ7n+72Uili/hrrisTkMCSBAw7/Wrvrzh8R6IZOoMwAAIABJREFU1ZrXf/0YI9luw7k7iwDk/XI+GLsD9U8dCk7bko8RZwIZhmHNkHWZ8zRN9/vdgwaN+ky+offo8r6Lq0P7er2WZXH19vw7dIIngwAN/9Ye8p3dVlw+kJh/lkarWNP3fZiOR0O03lqXSADO3anYrhPsESrHCKYTNo/LjK8VS9/3SvXNaZqGYagsdtRcrqCz47tAHTQ+u2We59vt5lY/YcjYFRCgQVYY2/Uvl+jX2CaU4ReFPwkytMbbWmAtUVgEcHjs0XkBaHzOwkUNGjFCMmEKh+qpoxqHWUdaDXEcNFolYdd5AfLnzx+BqUhp6HW4CAI0/GvqddKs7Tjm7kIjc7LLCGOg33/j1pWsbdGI0YrSIBYBXLnTTvboZ8ppqHnYCAHNCz/UZ/nobYJes3RjGjTqMyg9t3Q/QNd1YUSSt29NwnkRBGj4t+TImyO2kpizuIxtNbuK0Z7fNBFV5X4LgSwpeCsAkHsAaEUREp3RI+TT932Y3anX2C1dSximpWM1oPHcsg7QuRwGTeV1HQRo+LfeOOVusoxjbuIlE/7WVrZmbLRAyIRAoEct7RKF50AU1VA6JwkxnZMmwYM9n08eA6ggDOLQ+/lD62X9kdDZYVo6KLU+Yi5J8pYSw6DFjuBAcMgCAjR8dYsVxjHXd5FZUsaOsdGSAgwvX4ND5NcAlChQ+oDh+YUEaG7j0bWt2jXorspI6KJdJqjPoDHmcmjhW0lSaBi0wLjDdl8HARr+4z5sNxNlL1YZG21yWwGy1K7lfKnk0c8AFWDshhw/Ns8zPUG6GIbBgPnoHQmN+gy6CI97iblwnAmYvCSWtLMECNDwf/z9+9e2+rzzGtnlod3Y6LUzmkkdFbIi1gFcnXn5tSs9AlC0zuGAVeM4WWIYqFIMNEF3/4yE1nUFFuozkHOCvTx5WZa8TXiipnCgNuQFAdqv11tHarxer3EczVd0NR3HurbbSR2I0SUCDPEAxB7sQj+ZSgDcWhA1gKgwjZSmFxtN0N1mJLSKBJvXBUAX4d1o1gEi/ZvVt8Dx23lBgDbOTmj+WEKM42g+urS99Xs7NppJHXm3FTECZFKoGNZy/QsNqoDDN+bQdkZNW5x2hmGwYVBariWcpgkPBorMCg9Pnpzg5XS9khL5pTiueUGAtuPFfgrNH/GgPovyHbtJHYjRhASASBSNfkaAhuyHnz6stmw1aLQJA4QpHGZ8dYlrCTO+A476DLqsieMKacn/sixZZA0hIziY+VYCBGh9hp0mNH/Eifrctv35+INtA7zbSR1pMUbstgIUchcoPuDz5FMJywnW8zzfbrfn80lJZoC+7y0Zl8xrCUODNvkqaAm4Wt60A5mEJMGGlEHrQyEQoOUGgIxC80ecqM/d9148UePtu/9O6ggyNM3RB9D+DMLJ62EUqc+ULpDLghR1/fvhf//7n+3L7v1grAm6k3ctYXhyTEwEFdD4DLkq9D9//mj/FnQ/lAMBuv3hLi00f8SP+tzpVCq3u8Okjo+GwzNJEE7et3epYMFhDcOxF+jWuE7ZEsMwGHucHzTf+/3e/KCiPldebRbhyuoRcCEj8zxff1DdtlOQRrdyIEDX8+xNhOaPuFKfDTR3fBwbbawIPBtjmEUAflDXBEoNA8mRLrzw+Hq9kmNcnfSmziGXZkrLsjyfz1CV9X0v/9o3iMm+Qh+0se/V/FrCZVlQ9EBLkonWRp6c/VCp7pzDIoqCAJ3focgRmj/iSn3u/ploYaxEX//V59hoY2+MguHCPovJq3vcgnnCqYi2is7v/xdnSVTkXds5w+6EUY9930voNoVkTArQXZlrCU8ZC0cL5IdgHpNAOQ+stFuO5LM0CNDpLlu40PwRb+qz+UENlsZGxzdB81gS/EARC/bi8jfR+T3LYrnk7FrwRWFT1ni9KtFrQzRKtMbsy6oG3eRaQtRn0OXVocnie/iaF4dBNxnBERJUjmhREKB/OwiNQvO3MOPNon5+X2n3EOb6sobHRtP+DIqq+uupG6cdbKRSMaIzSE4gd2XzLn1aL4sPSjS3FOpiGAarBULwOcMw1Hk0gvoMiiIySwGlyTIMuma8wC4qgAD9ry+2ITQfFA8OLcrt7aW7sdFrZ7SB1iTan8EJ6kY/r86HvYPusujMQRKVSsVvR9jxaZr6vg9iNAuoAqtN0N0/cwYqDIpBfQYtmgDrANVqGUX9cG6Fo8q4E6BtC80Hkcah+kyn1fbMd/+d1CFTjP7ZkM5UJtBF8jsWeisELNR5uKHT2RjTNG1Lsu22Hvi3dTRHUKK5rlA+wzDYLotKX0sYTjsHCYRbAQ2epMqVCUO6KpdRadbByazD3bBhexOav62DT/W54ynWF7Zjo9VN6iA2gBP09qcgOzpMMxCdDScM39TnU8eDIdEq6PveduZ89lrCU3eTUHSAfEGAdYBW9fv9fhf+Cclgq6FegEZo/hlsfKrP5q8fzCgcrHm2cDGa5B7UkfbonjQIVMQORGfbvM8TeN/reBfHkGj5hCkcti361LWEkQ9LUJ9BOOEpIOsADZPGZVkkKwyksjW5Kzq4CM1nV8yt+tydESst3UN4XVDY1iFNJnUcbAftz6COBPNROvoZzBNOZrUbWojLEnLIEpvCkGjJmG+C7rJeS7g2+HNyQKwnp6cBJDDPc7iSKpcskDEi0LNYGXECNEJzxsrBszmRDl53x91/x0a3bY5mQ8GP61b9+dlEY4GgpugMGh1RWn3IkGiZ9H3v4Q3CoMpdPHXBTIh6IDmC07sDcpim6c+fP9I+FQpDfZoJ0AjNpSuHhPTRTC8wpXK59WwyqSOUCmwEqOPso37tE/oI5TYcfnPRmYPUvEr8uAUl9oUh0dIIgzg8fNOzI6HfSy08FYhNxmh8JlWW6XVFvfbEYPQm3CvYGEJzZafmvPe541lW4QP2PjY64Z2aA94fhLCh4AED1SwhXinSOp05SA2ZpunsMcjSvsCQaCGE1M5JHXFqJPT2b6HugeRTTdcOiD2cZ5vYyvVHYiatyCZAIzQLqdlQn7l+sOZSVxgbvfstAOqK+ZiAyJQDqF8GMF4DPp6Kb7G42mcI9x+GhmiU6PoMw+DHLYSR0Pf7/WP4/vjf0zQHkusyYrr8bfL89dOGQZf4GMiVrbgn2AxCs1h3hvrcJT3O4h7CXEl8l2ls9HZHUJ/Bg+1Q0EKdk4boDGmO6DhNKpFHMSS6IX6aoNcC6n6//9RECNYg/BizDiCf5sOgSYPbcj/wYgjN6qIOtkT7s5w6dluXJo+Npv0ZtPNTlzEz4pw8Qaw3RnSGmHNyLF78NPBCz/LXIdG32+1+vzMkug6umqADP68lRH0GyaeXEA+6Uo5IWSB7aoG20Jw7QrONsn8cR/auQwGRuinbsdFrZ3RMDcl4JvBQNthwXLhfUZm9atGZs1R/wX9G2+absvb3MSS6DsMweKvSD64lRH0Gsd6bk0mGo9HZhmjepOxi/dtyZw8MeDHUZ3yKouMazup2UsdHMfp2u/E8Hwxw/KDFUl8qYagtdDrDldwpi/3WGWjGkOg6hCkc3hz7x2sJUZ9BrOsm4oNS5nmuL0CjFEngzhJoL/hRn7cJIkuhMdEPYvT7pI7H40FhCbbPPzUtXDxC9kRn4nj9euzn+ZG5KQyJLk3f9w5fVQ7VRMg/b7fb8/nkfW0QGChJIMFA+vHxAtgduZ5tc/GgEBCgdcce1OedW0n+u9xDKOE8byd1vF6v2+22VsUUlqCUbx3QZkY/Q2XMdzoTi+sfp4ybUj+bYkh0OXw2Qa8BehiGcRzpMAWBBS8PRcCGp40fBn0928GZCwEBWrHFoj6/uzDWwcxuPh6PUAB8qyR34SqMlv72J+s/IGSDEMyMfl5tlj0tmjczXgNKnKvIHjoVBs6Q6BIMw+DzWenr9frf//5H0gjSjqWx7NHhDrIIW8LD49KPjSOftUMdEKC1Oi/U53fPwiJY2s3t5ajdpzbSXDuOkA2leW8JtKckEo8KpcuIzlDugMW/wX3KwJu/UrYOiUaJzhK/Qh+0wzorfOv1IHEYoLnT5s05sMc0TX/+/CmaVKA+iwIBWmtWRLWPZzHMOI7df0XnbzJ0lnwuS4V2IFsHVs16K2fzprDPEsLe5D5CUq5AFnRn1hNKG6wHISMo0QyJvog3AXp9Ca/7Z2ZomHjQ/wNHApp4bBIDMJz9lnvIx2MbaSBA64tAqM8fawzWxAwH2lw5Gfq6YWY5gQjZJtk+umf0M7yn3YjO734eSsfZ+HVO2BFR92psh0SHhmgi5tnd9KNBL8vyeDx2SVf47uF5RlgNGqKhpgfjvkEyHPOON7jWEjk2ay4NBGhlPgv1+ZtzyZJhs7ZCCsXjTRErQ2f5+gjZJqv39Z/pYYEO0RmactYLpZ1SgTlVeP63NkSjIcYzDIMHAXqe5/AG3rcI3m2eZ9AQLcq0DddEjOECJ4nxQR2allFgPjJBgNYUhFCfv60MzsVSYXwq3UQw/bY4CNkCsTrPl8AUnwcjOnOWmp/Ds8/s7W0KQ6ITGIbB9rC7aZpO9ZnSEA2loyGNzyQ53vKT+z2bOMkdKmJBgFbjrVCfD7wVi2DmnO92s+/74/1Fhi69IwjZWb5+Z3T0M/n0z/CE6AxySLvDKvn0yn+xjCHR8YRJFFZd2TiOB9nmwQQSGqKhBNM0oZ2Bw6pzWZZcXhSBSCwI0DoKhvc3wgD/YrIAeC9f48tjZGjJKUWWqvU9KTn4k/U8SCgIbY9+Rl3dhSREZ86SzGSSfrpvp44h0ZEh2F7KHfpMj79XzHmgIRoyHkjWAdym0B8Lt7PPszEiySBAKygYUJ+P14dFMLOVF6UHZGiH9p7mAeoL2bhx8xkzojNIJlnUuHikdd2uwZDon6HTWBN0eME0JpGIPMk0RMMVaHwGCP7zoh2xjJJBgBYN6nOMk8r407iHsCHfjvrZTUGGhhjX+vNPIqvx4z9hHLbt6IPoDCq40lLn83gzJPog6plpgn69Xo/HI/KEn81FaYiGs6eRS6oBAtM0JQ+DJi2XDwK06PQX9flntOZBsZlIk/1sdMjQUN5L//yT9c9fr9ftH4z5YT87jujMcVJ6bpMX9vqOqH60z5DoHX3f28i9X6/X379/Tx3jtN9CQzTEuGjmSZLhwHah3odBx+QSXDyoAgRouSkv6nNMwGYRbISZAwH6SrsNMjRIO+rrmTSjRJvPpxGdQTXTNJEsXfdy65Dovu/v97vnvOLgRj5FXj2hyLryKIWGaDiogMguAN699NlCKURqlk4+CNASQX3Gy3grj48z/utHpUOGBmHuy4wSbbJwQnTmLJnJJy9mSlk2xcx8s21Dq9vRHEFF1atBp6nPWY4xDdGw888MqwU40Af+/PmTS08AOSBAS4xGqM8NK1XGQDcp56odGGRoaFWxf3QsJnuilYLoDPbyyYsXwWe0BWPJlfMh0cMwKBWgx3FMzjkzBmgaoql9aHz2ue8swtnMfPWQx1kE6rMiEKDFZbSoz5HgaGwQUx5nLFyRoUFsVooSXX/NgwqA6ExtZnIxL6rP7Ehk3u5zSLS6JuhgERc7HvI+R6EhGucMAMcRNjyoO/7PSON1gQAty8ZQn+PXCkdjpnJrkvx1yNAgtTJRpESr88OIzuDEjQgUOAy/YeZwSPQwDGu0UrFB4zheTziv3EryMxmmIdqDZw7vWrEUbg8Ai3CW8IhOoJgAySBASwH1+awzYhEMEFkhF8r4kaFBeJ4qX4lWkUwjOoM3cr3cjb0krJifIdGFcrMSm/J4POQfZhqizTsHGp8B0lKa+/3efXqMzZVg9cvSjxw8A3j/vxCgRYD6nKAmsA7aiReDikpvyNCgJeQLVKLFlvSIzkqPOouQpVTLlSNl3xE/12x4GBIdpnAI39Ds6nOF2SM0ROOWAWCX0n98Jud5IuuBIpxRLC4BArSIJBX1+eyKFf353ENYx2mKagRAhgZFqQZzog8yVERncJ4g0Q0kbUfWIdH29EThTdDzPGevsKpFXhqiz+bw1DsAVgkTrnZ/KE19PlCohCvClUGAbn9SRanPKrRXiisDnI0ZdU4mMjSUc615DypK9LoUiM4oCLCmlBmVjkI74vMZ/yomGruuUHITdAn1uZVd0xCtlGD1rANAFungz58/a7j5mfYfa75p7cOKbj6QDAJ045SC3ueERcPybVRikj9ehwwNSkypoRLdyhUjOgN8zI7y9tlhXOXyn3VIdN/32pONYRgEvgQ9jmO5PLPCFI7jk0NDtApLzzWLH8wcCRbhItM0/f37d7uSKMIaQYBuWSqgPifAk2Qb8SMh3a+89cjQoCuvra9E18z5EJ2pzeB49bKLgOV2hEFn3T9trSG9UT0kOnTmynlNOEw8KJoxts0MaYhWYd2eR9MCZCc8fnu9Xn3fM9NGOwjQzSIT6nOyBsE6aD/8CYVBq3QfGRrUOclqSnRpCQnRGSCSEq12RY0ODXqbFGkfEj0Mg5Dk/PV6jeNY4cM0P8A0RIvNwWh8hiY5s1XC6Kp19RCCDIAA3SbXRH1O9kF1fhGlUTk0PrdEhgaNh1bjnGhEZ4CzTNNESWbAY6seEi2hCbqa+iyqTKAhWlSBT+MzQC520vO2JAfVIEA3CE6oz1dWj0XQHkuSI4eEfpMOGRq0IV+JRnQGiooreVGJZ/MVtoMn/d9WXuOQ6OZN0K/X6/F4VDtR0jaFhmgJ60+VCpBLLjjoVyN50A4CdO06AfX5yurhbrRjYGwTMjToPboZleiL3hjRGSBLXlQoqmKVEjZX15DoYRhaXdMyz3P98kqmCEJDdJPkiqG0QFTNskQxWQ0CtHYQoKvmBKjPF/NLFkE1F/Oz+vcQ/kwjkKEhvlIVleFdV6ITkj9EZ6Awy5tVllM96uwIZWTkRqsYEh2mcNTf0Cbqs/DTS0N0NZiABJDFZU3TFF/mkzyoBgG6XvqI+nzRMRHgte/gRflY5uiADhkadJ7e7poSHZn5re+l8goLQPZqrXR0A2lJlPAh0fUbBcZxbNWaoCL3oyG6qEnS+AyQJZk568YRoFWDAF0p/KM+X6R+folry4vhezmQocHAGc47nQPRGRK8KMTzfD5tLBq5VpqDnef5drvd73dRQ6JrNkEH+a/ti3FaTi8N0SWKGvqiAC76pQTpmeTBAAjQxTkeow7xmRProJdctyQJf+GxQ4YG/c42TYlGdAaoxvu98CXCGch316G+EDUkuk4T9Ov1GsexuQIoajRcZDZOQ3QuuwOAZCO6Ij2DdhCgy4L6TC0EnYm7B0+dVWRoMHCSD5ToaZrC0yBEZ4D6iWXpsq2yOdPHdJHghJ/PZ5jL0VZY7Pu+9NA8Ieqz6vhOQ7RY9wuGy0MIFpTFe5M56AUBuqyNoT5nwfD0BielUa4IoaXZBBkaLCXNOyV6nufH40HaB9AknlbIiLBu1bV98yHRYRBHucMpKgAV/bIV/AkN0fEHr/SrJwC2w1N2C0KDVgoCdEEzQ33OlR7hXFSTcQC6LkkXGRqMVV/hSNN3BoW8JfxMh+oklvW3gzIy7/a1HRIdBM0SkWKeZ2l36hjI8WiIjvG99EIBSU6y3y708IbMQSkI0KUsDfU542I2TCvxaxchY0OGBmPnmfdPgcKsySrZTizJuMqdmfpDoodhyC5AC1SfjR1dGqI/GhGNzwDJTrt03kLmoBEEaJXG5irw022nPW8j0nTI0GAowLEIAPUjSLXEklrOHk2GROdtgn4+n2IbGowpIDREbw2HNhqABB9S7YUtBGiNIEDnL85Rn/PGfhZBL+RtHwt7ZGjQG+DI86CQYwQhptdwO6gkKxykakOih2FYBzddZBxHyc8+rSZ1nhui1zuWcRpAnnPqa07TRKsKHIMAnTmxQ33OvqQsgursLfuP1XIP4c8sBBkaNNairANAZSqXc0jATtKzMCQ6jOYolJBcT9her9c4jvJDj+FnJw4bos3POwIoYTWtpGceXasDATobqM/Z4fpB1RQyBzO6LTK0N7RnSNu0Es8MUC0RcvUknkqyvmSwNkRn73INUziSN1SL+uzk3DppiJ6miWftAGfjCFd2QTwI0Nkqc9TnEqtKTqk6T2UdYsJ2hwwNGkoyFgGgfiStn1uS87jN2Z7PZ3YlOrkJ+vV6PR4PLafRTxZnuCGaxmeAsyYjZOAGco0uEKAzgPpcyKmhYOqlqEXYCzPI0CA8xpHYQWkHCO/L4lN9ppJsSFCiMw6J7vs+IZ+f53kcR11L5+3cGmuIpvEZSHJOuWhRQ9JJG3SBAJ3BAlGfCy0si6B37wgDyQkKMjRIO5ZUZQD17Y7cEhoev4xDosMgjlM5pDr1uTNxQ8mVo6K3ITp0cVK2AET6Z5n2ggatCAToq0ZIhVAIJA/KZp9ZPjK0VZTmRjwLhAoeD3a0KvCEbAeVpBzzvD4kOjTJRmb1z+eTiU9KqzaNDdFBPWf7AGKMRfKjGtIGRSBAX7JD1OdyeQxORG/ZXCHGeKj6OmRoEBDmcMVQwdfBLoy2egYvZzsoJqWl5VeGRA/DEHOkx3FUrQZyaJs0RKetOY3PQJ4TXwsgeUFGEKAxRaHLS0KpN/VkHfKmLMjQ0FBxYB0AKttdwzBKtgMxcSFhSPRxE/Tr9RrHUXvE8TmF4+CciG2IDmeYbQI4zgea3IScDIqNFhCgU0B9ruDvWAeNVMvnXMUYZGhocuoopAEqo6vYI9A7DxBhSHTf9/f7/WeKctAEbUN9hoNzImdCNI3P0KqO0/WBp2lSVwWQM2gBAfo0qM8VVphFUFo5s3el0xdkaMAPA1iNoW3TSyo3SDgzq8L4czTHMAzvkeX1ej0eDzNn7+yNi36cm4SGaC53BfhpIxql5xU0aBUgQJ+uyQldFXJZ1kEjNU3D7XuOyNBQJ9KRwEFNnwah6mMvKCaVEjMkOoiz2w1dluXxeFhaB9KznyVek4bo8Kt5NgBwnIRoL67JGVSAAH2uJvegPrc1XbyGXuuouXfOU3xkaOrS0joC+wVQEwlvhZOAQa4I8m1I9LZ7YJ7ncRwpo9wekmoN0TQ+AxwbiAHpGQ+sCAToWOh9rlaD4cs0hi6so5VYgAwNeQ/VzxwUZwh5nRhM0yThqY/M7SAB0xtK3odEr03Q0zRZzRs5sWcPSdGGaCHeFUAgwQAxEKgMAnSsfaKvVWD3ah4oKp5J8dtKBsjQkCvYsQgAlTMf7A4Mpyi7IdHDMPy///f/DOdv5GMJPrBEQzTNMSCnTBOY7Vu9jRN9QD4I0FEmSgCrttQsgtLqgnWQkN9Q9sBFD0zSBhRmNWl+8aCKvaCetHHU19Nufjc5scnVRK6G6PCjWFWAd9OwKj3jgbWAAP3bSlGfq2UevAOikVZTU9zeQ/hTQUCGhmR1gHUAqGl0cjJM4dUa9aQZxnF8vV62ExWO6/VsJLkhOgx4Yf0BdvgRtfDAwkGAPuL5fKJw1Uw4WASNu9bKRpBZj3UE1gfwwACSHbWoSy+o1qAC63s2tjVoErAsHimhITpcgMnqAbF1+wFEPe2u5oTJasSCAP0V1Of6WSmOTKOZsAiSMx6qIDglCgC4KszaRk9RX1/+XpCGGWArDprXoDmuWYhsiKbxGeCjUfiUs/DAkkGA/loYoD5XTi9wE+wa0aWQpoAMLSQZkvnBuAIboDIIJeCQcRz9pCiMicuezR40RNP4DMILsfq/1K30DPJBgP4A6nN9WHAbtQRIzn6Qodsic/0Zvg+uqjIJCCwLtewFT51V5/nf9s78SGjIyK4h2sONagCnojnSMwmDcBCg96A+N/GVKCAaS+jmn4EGkwSJgTIPdqIAiwBQjYYXJ/yMDgCtkkaTGnTf91Q35VxWaIhmhQFWo0B63oIALRYE6P+A+twE1lxpkJMQWtiLhL1j6WD1vSRn0NYXuULsRUCK9oKSUml5FXMIjWUmJFoVPGroht6OBNwue/jn9U/YEbCazPMwhoRBEQjQ/0mPUEJbJRB4MV0wak07yNAQKjfWAaCa1+XaXiDWHNsIaQmcPVe70mz7r9+qtndJGpEaNMIImmOQbmSCAP1/oD43TCBwDeqqaDnGQmi5uJVk21hx2rEBgFNWI1l91mXUxH1dnGpZMKZBM4WjXPG4XdhwZuLdwvpf/lSouzdtmpwZJMRWpGcSBr0gQHcd6nNTWHl1cPegyfSIlBrHC2CjMJNpcWK/L7UZiDr5lnISMqsSfOypP6tBx3vFeJGaNmqo41R5m+qUEybJkQYCNOpz47KH1gB1aZ8oP849hBmNkaQZRQAAsiP8XiCN3oCSUtHhTz6WZjRozmreMuRb5ZhXgz7lOZn1AaXDa9BMkJ7BAN4FaNTntrD4Gk1GWmbPpmRPlVhVn8UbgMaqTL7FCU91lO4Fup58Lr4wZ0OD5qDWTGCkrfbPWR/dd22aVBzWwyP8MTZOGE7hWoBGfW6OuvV37sJonPST65D74nUB4CL0KwEZ48VsRHsqQiqV0Z3GPD5XV6kxkBoOzgbScxYnjHwhCr8C9DiOdIE1zyRYBF1RUGYhTVwpmhOT3Voi+W1ogEIlN0GTvSD6E26Oz6cBDZqDer1mjCwbKw/iqOyimfXhJNVBesYJG8apAI36bCk3BfYLSidP5K8GEiDeYACo6TnpfQa35D382jVotI+LnB0dZk+DjszVO2Z9mNhKpGecsG08CtCoz0KSCRyBrnAoNhZyD2G11JYkVfUOEvgAqjFNk4okR3smRlUpM8PPHm5Ua9DkTvWPE57hwNsz60Mm8zzP80yuTrZgHncCNOqzHCfLIihCcicXWVHl5JUFx+UC5KqETTJNk5ZUk3oMSpx/MpD3TBVbS+DKwwzW/Eo4YNZH5RRdy0NrgOv4EqBRn+VEOL0b4TChKdHMAtozVBJNXakteS1AtYip6HmPAc+AzOQq3ChtheZdvfrVosNBHDVDBrM+cjlMpGdSBW9JsiMBGvVZ1MljERQhf5AlQaVVDko2Kf+gZn+AhK0BR+jA3HSNfsb6RpGZAAAgAElEQVScIe9xqnBfiIFrCSFml69L9mjQbcOK81kfxwdvnmcuikAucOgcHAnQqM+ioAtA12bhrOE4u6IUtF3CAUAM6tRnqkrIS7Xzr1GD7vueUrR+6oJzEFs7vP/zbuN+/oPS706qQKrgluDYXQjQqM/SKjSMX1GYVBEjebdRQiqJDC020gOILT4tfakKvZ9sBIWl5HBTcwvUadDkSPE7mzd1wTmozhP0zvrYffKQJJCWkyq4ZdVj7QvQqM8CM1QWQQtaymnSejmZFnvhVg4AcB4u1Zkb/gFUZ4zM4jCZSWavExnEYbvu6MTP+kB6FqUY4ApaWasXARr1WfLhw3k5zALBw7GhIJQAd4cCVGOaJo3mZiyTobBsSKu35XSlHEzhaFV3oEG7PVE/4125WR+v1wvpGSCwtQKzAnQYHUCYl3z4QH5FTeUJyQkfMjTOFsCJrSk1N4ImZKHt805FKQd50fE+FnWklAlwHAczzvoIh/nxeLC8KAbQbYZvBGwK0KjPYi2TTVHkKRCwwElNaK/4VDeLFnzWezZiJeZGYekcCSagpRWaI/pt+yoUHSw+XExajtuowzVXaB04YdiZj30BGvVZcp2GwWtB3f283EMoOWlDhq4Jo59BRSFnI6vRe5c9XgKMRRwVGjTax8eNq5PAM4gDSpzeFSogLeCHKycJuz+52/MCqM+Kzh+ILarV+WUCvHDPzB5VM14iIEAdt6a699lq9UVh6dkK5GvQJELvW1azPESDhlzJdhfxYncQpm+3G4ZPnuDZUnaYEqBRn4XvjqWtse25xnHkxEIJJ0D11STSA0jzAwZ4Pp+qvwvVF2SxAoEHW74GjfWtm1W/OYn1h+TjekrNWE8aMjR+2K3JGBegUZ+FQ/sz5QSxBDpk6MJuFhMAqMA0TdptzbCvIBlwHnGEa9CMjFu3qdU64CIgnvBa8PUDQ/lDnuAwSfj450YEaNRnvUcQSAfB50kjD8vuY+sEQTI2cM40TQRKakuQPIJGy52ElBut/APJDByfzxKvbtMKDa7K0m//lwUBGvVZPuwO5UQFaCrR6L07ZOhMK4mbBaiTzxgINCgvcBH5b8tJTjCcPyCR0OyCBg3vx/LbdYIlflHf96w5fti2NX37f+8Gvh7qs3xUy5pkhIoCCZuo9OA52b5y35FHL6DL3pWyLIveKVVmdoHaUoIhaKm8ZLZCe26YkFNroEFDF32dYInfSys0SYJPJ3/X/vVQn1V4dpPmbc9tcfcgtPXnnXUZutC3Y/Qz6DJz1TknGwGgq62EcRyi9kKU8o4C5fYc1ml2jvkYyNB4AGP81GYVC9Coz1qgNU+LszDgggkkBpLCjmb2k5ZLHASok3OyDqQEoPGRp0ANuu97b7Fb5nuWeAlXCXMnby4oEzkwf2N+/ueS3vV+N9RnLTvFNqmA9mcQ5Tc6ZGi15RzAsWlrxNh7BlRckHxylE7Vk6ZBe8twxKYrDOIwf/AkNDv/hIkcDT0A5l/Zz9+VfjfUZy2wTSowM6SbewiNhbEOGfoQTjtAnRBpydZc1VrUlnlR/R6AQA3ayeEU/rAcDdoe4b3etnt61tswkQMM2F3Mf6ZPgH69XuM4EiS0gD6iwqbMCNDEbJPnk5395l0JhQAV8mljmQx+A9wGHVEZhRMBWsWrWjypsnHSDLx4zUQObF9vthy5knd1Non6bPIg4rMaYkZ9BttpZYcM/V/vyvslABUMjdHPpGpgLF0U0grtIaVRNCgMR6E3TMufsJHwpWiFxvZ1ufr4svSu64uhPuuC9mdSQ6II5D2uHTI03hWUm7CiT2tSfXYYIkkMrmPMFuRo0IZPpq4Sg0EcipB5nWB282EiB35Yl0lGcldkhKjP6vwmDXpUFAAlfEvnW4ZGfQao4GesxkdyaUioLe2l9BI0aNvCh7pcBQ1auMGquE6QkkcjaNAXM4RTq3fXYnuoz6QdQEURA/cQkpOZd60NzZZADE4OzzRNnHbKS1jNwapTaptFGM5hlJ4ZHIXAWrWz3uz8003RCo3hSz6fZ83zruJboT7rDRggGZPtXYRnb2HP1abzZglot1YVTNNk1dBIp+Esti+8laBB21te1U8skKIkWKWBZue8jgUZGsOXSUK2LF2ARn3Wexad7Jpeb2W7ogBvqWqnRIa+6DHo7geokMAYNjTPcZ/yMu3AmL+quq0Gbe+9Pe0HhkEcDYNvZ6iDrYRXYSIHSLPZBFcpWoBGfdYLKon8bNvw9GeKTLen2nZaxkMjgArJtO2rEfAhcAonN4Ug6+TCxuMKNOiapse7fQkrRis06oGEo5hmuXfJXwn12dtxBBJEAMrIj5ic2A4gzcrMy23O82oqzFN4e+rZqhXazLG0VFzgK0pHW2/XCWZ3Vq/Xq+97lgKrb5ghpP3FXqxRoT47PI5Qzb5s7xHxGIzlteZtFpxYpfCPx6NZgC0OLaKJm7KRtdo7LXSYZjeuZVmmaQq3LKDzXIdlxOQbnr3kv3uX+X2ezyfmpBeEEnJE4gfIqSRFnYe0p+s4VYDSeMg8Sa07WpzOWITbzIE0ksqiYxBHJmsycJ2g/BVmIgcZQuVTZ0qAXpZlHEf2VS8OXxLX5apsX68E8DFMdpofSzD6GcyYoVimafJgZXgSiM8VPQ99qq9B932vd8EN97WgQV9RAxgcV9NlMZEjl8lj7zGV6ZW/LkuARn3mREJpnLS0ED/gPTnrFMrQjH4GqJC3OEldCItkCJEwjqayBq33GbmHtypxF5EmQ7Nz85KBVmiocMwu/oS7qC+D+mzgRKKVCN8g0gJwnh/rqvR4pAeWTE9mWPSjtZEArCAqHeDkhYAYe6msQatbdifOE3dxHEM7mp3FnBwmcmDvpQ+YHQEa9dkGaCXC8WNlfd9zGuEgfHYaZGh60ABKJ59uB90CfIuPpE9NsgV1qoefFIVBHO92QbOz/A1iIocTV1yTLOmBCAEa9dmG7WV5JALlcFVm8+AXRBWWaTFeYAJETgaWPICrZzwYL0UmuWKy7VRIFXQlrt4ekKNBd/+8R4vbVLRftEKTHuQ9UVl+zl3CN0F9prbBT1XYHVpaAL45rmr5WeQv4nkekCGU/jzP59NV3kI1BT/hztsD86mjQatYf5+vZ/nUoIPiTEaqevuQoa264spnyYgAjfpsCd4WZ3cIHqA3rHaS+o94XARQ2sQc6gjsO3kCueIVCyqdJKg4kJ4PiR+PQbMzNQ7pAee/UGXaUoBGfbYXqFgHsYEHPQtAS4pGDxqYtCw5TNPkMCbiVeAYhm/EGFHRDIGrKeRjWJbiOkHbvotWaLjoHHJxb/g1UJ8tgb4pGZ+2xj2EkJylNawD53km+wcomn8SGmCFLqfVLgg9kRlCaQ1a7IFEfe7MDeLgOkFX8QUZmtwg7dhYEKBRnzmXUNPcfDpQgitcdGv1TxG+FAxbk5CA6LPNkzoKjkFbPGVN5XIDsc0TnJBdfaHaqdLsTEpGmRxj6eROXYE20wYCNOoz5xInVRPMDUBLloYvBShqzm6HDFBEUWQeME0TJ0RybiDhhLDp2p0Gzc6wOwy0QpMbNKlMawvQqM8m4QkqKSORAyg1r8d4jitAOSv2POIW30K2cHA2ePaZvHQlEoO+70UVVqjPqp0Gzc5w4MFer1ff9ywFucHBCcn+Y6sK0KjPJuH6Qcleg6wRIKNBdZdl6G9/nfmbYN522kKPJ8BHuHvwonPLrkGL6kmkjjjeJplhJchGZJUQw7IstEIfmDkPp7Nzr3m4UZ9NQt+EWMgauYcQSsTjK/Xhx79IAxpA6WjovBRHfKfO/JbDczauG5dV7YY6IiajE3XJARM2IM2JMZGD3ODdnxT6yfdqXwD12arD4vmq2K1B0iKOQjn7ynjAFJkqhQ2oOzPLsjiPhpgtfAOFMZeJ5U04JUzhoIiILDTaOlianSHvWWIiB3TFhm8EagjQqM+GITsRlYVs4Z1KgArhubssQ9OABlA0BSUagsYsjkRRXT6QUYNu3j9BZiLZb3CdIBTNmmiF9pwYdOW7GO8VDjHqs2EQoMUGDx6Guw0bUD9OJ5eLmCo4MZBWvxqJraMDGog+tQwtrwbdynJRn8/uVB03y3WCSs+GRlfGRA7PYkJpJ3Mv/elRnzmdUB9KboD66VpCrskzPIByJkko3HonoM7cwvANOZmAqKOI+py2WYU8Lc3O0NCbMZHDW2LQ/TNKvuivuBf99KjPtkE6EbsvpCkr3EMIYotPTiZAOaZpIhRu/RIA1lHN4q5r0E16D6kgruxXxqWj2RmEwESOEgYuOXhVcDv3cocV9dm8PyIuCnRP9HxJyOCB4vPn2ZvnGRcKfsyhMtM0YV9AnfnNJHn8WWGRs2jQNY8i6nPb/aLZGcR6MyZyOBGg62TO90IfHfXZPCSvMuGdSgA5GVv3RYbmynKAogk0KcrOEQGl5gptCtVM76JeU/Mcoj5n8RsJLje88M7ig96iBswkz3Uc0b3ER0d99uCDUE9k7gtVt7dKEjRmbNgpuDr/lRNo9LW2WwCSQWesbH1X9JpqWg+nImPFEeN1g+JMKQ3qHJrnVmjbekJNj5RZgJ7nmbyfegZaQfszgGSfGXIXKj2AQqA+k7BRapIoSjPAixp06XNITlLNddDs7PAwmPRpPmVo2wJ0zedhOQVo1Gc/kL/KdBy0VX6EewhBSMY2TROVHng79pVNjDVvuAUgHMq0hjaYJtaUzmDJSUqwFaq4TtD5ScCtWTVtS1QbvhHIJkCjPvuh8hnFN1FXEP5Be5Y2z3OoIed5HoYBFwpQIghiWUCpeZC9o4K1zQSkpaOoz6UTP9YBbB9yb63QJgXo+uOA8gjQqM+uIKDK3BSSSACZFcjqM0OAD/+qNF3Dz4BMpmnicGKwcGwjLEJze0wI/X3fl1AHKBzK4XZILvh0a6/Xq+97P9ZtzHPWV/buWT406rMrL0MDhUCwQW/RAuS7ymmadt6SQwhQKHvm0fg3R8QikDx0PKGRZJJnpckSUibqcyFn+/qHtWS+/QNLBIZZjzpZgbqNq/9LrwrQqM8OyzwWQRrYIICoIuRden53ngLfxgUoVJOXzp5p7Wy4/qDiGJC9i9qOBA06oy2jPmfZxK3i/G3Xtv/B7Xbz0yUKbo2Cxy26tkyfAI367BDan6krNMI9hFDHGD9Kz988Jxo0mLeICjkJiWjbLTCPgXYnbESgYZ6K/hkPIepz2n5tFecr9RoN0eDBWGw/azHTBN1KG7lf+cQkNN7g+kGBjonOr8gdYRGgaL71TXpe/4MsVSgA7OyOdQA4rtdI3WW6r/jonytP4DDE7Ev3X8U5+89fG6JRosEqtidy2BCgGzaVJgrQqM9us1gWQZrvYFMA2tYqx9Jzx4sj4LuSL/fDn88nYkqr9XeF6mqThzTCLTRSo7l+CFGfP27Bz0kapX81SjThw7BxWT3b2re17aVuKQI06rPbII2MIg0skQwAGrrEn9JzF/HiCE3QAGm5KC79p49iEZynEOM4snfy7TQmB7h4AnGYXVO5OeZT9X1PNggmjc7eRA7tqkLb/sV7wsdF8/KZbdNpKw0mogC0SqdipOf1P85VfwJAYJomcpIszgfIEkGCqf7MAa4kCQ7V553QrOLrh6yShmgwGYzsnWq9GnTzjtJzAjTqs2co9qRBY8spuIcQssTseZ7jIzdvjQAUMkPWAag2j6FkU0SkBp1wAj2oz6UHNyd7jLTvwmgOMGmkhidy6NoITQI06rPzeo9FEFWoMNSvTiIIsPrAaZpOGfWpQogmaLAqCmS3RHLRhusPWiBL1Giwx2lAQiOFSfVZ5iSN7HUHSjRYTUtsHGalHdASGjju8Z+VjN8zdBtJc9+UFgB1SJCe17+Yt/gEUFdmZP+Z5KIN1x+0FJy8JaDXbDOmAQbUZ42TNEosAkOiwdh5tvFMRZ0GLaSjNEqARn12zrIsdECLAvXZSZyA5q4vTXpOjvHCNWjMB9oeP3JRrBXIEs1b7kEaEJ/HapwALnOShqiktKMhmtrTiqMzIEPr2lwJwzcCvwVo1GegjUKa+2BHAEpn+cnScyf+tVCAalJCRq6YJOsPfgpOhzfOmTTej7pM5BQOFZ1DWiZpSHMXjOYAD76OlKBEbiDkk9x/flDUZ1wD7c+i4O7BZLiHEGLKtus61xWfySAOgHemaSIVAYg0FhbBRv2VlgwIVJ+ZpFFoVVGiwcYx1nuAFQ3mkvNhjgRo1GcgS5DmkjS+UidqR1gEODCuLC2W12M8GjTAzqZ4dkjyRsEZAz0Kxqz4PRno+/4gzZCgPjNJo/6CrxIe2SPoPcN937MUhZZXhwCN+gwBOilEgVUCZCeX9Nzle5MUDRpgNU8CH0hDpgZNj4JJ4WCXDBzkBk3UZw+TNJKp+eYlDdFgIN/TeHSFN0ELnN36WYBGfQZyWYEw1898kID6Li7vYFmmBACsKW+WH0I62mrxQR0Yi1Vzfteg3228gvrMJA0tBwYlGlSfXl3nVri2ILAy/SBAoz5j+dvDwILI2RcMEyCXNc3znN2/5Y3xNEEDdkrUu57IgZOakxcWbVv0Nh94P3sl1GcmaRg4NqsSzXADUHd0FR1asRq0TO+9F6BRnylIdgkN60ZpYQnuIcQNlpCeC8V4NGjwk298jHqoHg3XHxTBnHQPRr3mA7vEIIv6zCQN86kvDdGgLq5pObEyBWiBwzcC/xGgUZ8pMz6e2tX4CVqt/JFYD6JxR1gEz/l3OTsq9LgODRp8ZibTNPEIXGBmCDJrTnoU/Nj1WpGFf01Qn5mk4fb8MJqDwlPjoVVxXAVq0GKz6H8F6OfzicJF/bD97evTiF3EwplSWgDo8qVFpeeOl0UAchsUGSlAJFwQ4i2lCeVYcJI/0w8macD7kUCJBnUnVvhEDmkCtGSH/38CNOpzzdOgpfZ7z2m2R5mgRSmuFO4hdOVvS0vPFRw7TdDgLeTxNp75PJOMIiP0KHgz8FCghaEK3yo15GYh/kH4WQqHpO978kyQnxwiPZ2qf8V+vHuH+kzG/5bIxryTRVt0NSjFAdJCb53QVkfgluBgqWahQoFByMNOIZ5xHFkE8xa9ZWvm2z/E8AWipTQOjzToLQMVzlDsKZXT4ib8xdw76jN5/Pawbg9D5HenLboovFmZHe4hNO+0q0nPHcM3APLlTq/Xi15OEld1NKw5l2Vhu02WY92voRm32w1vCdljB6M5QEuSI/B8ChGg5ScGd7dCDBnbjt3MjeTqkbbojM5oO4kbMu4Ii2DVq9eUniuHEgZxgHmezye5Gfmtt0zvosmw+AYMlkZmEHgmO5RokH1EBR7O5hr0OqNJMnfSbvjYc3Tx7NIWnQW6GwAiHU596bmr3v6MBg2GM7F1/BcAkCLa9pDvIzUoeK2i+uIZhkRnOQAsQtHzKUplam7vKl7MvSs6YZhZoWNaWrWhLTp53ZgUQToIMWbSxFKavOKEBg0maWXFJl0ii+Ahr+B6al2lVvdrpAaWDvLPMC1laaGBRaiQ9qBBd3qmct0lnBhoxUHDUYmt2SZefd/jlH/uDosAcOBP2opWxC+ALKaxLAvxDr8EpIhmCCoAIzXAXnxhNAeIPZnOz6SK4RuBe7klwBiE50bHwk3pHVwthLbotA2CK3APofYQ27xfsmGMpwkajAU75tiSftugWt8T11NLM7rrIzWwdNyCujPfoUSDvGMZehwdmrwiZeN+dl853AbY3Tf4sSCsH8M6u23RCZ6Igrz0jrAISnMLCa/qN3/FCQ0azFg0wS77krII5qH9uXkO0OUeqQFUHEojztp5Sl4KQvxz89NYX4PW0vscuJOweqtMYtLWhpNrVrv13BatZYIPQE3fJWdKrATzRIMGydYa+Z+hPoMxKpSd4ziyzq3ScjmKM2UCiAr6NESDtAPZ8ChWFqAVDd8I3AlgrvInLc35zu8tpLqwFxvgijcQdUGZrhgPIBbGCJTwliyC+UyeXa5Tgwgf4swxAPn1O0o0ND+NrSZy1NQZ1I0VvXM6nXBw3+DHBFdaJPMTzOgIA1jNX5T03EnqfupaNEFT8UKuQzJNE4P4sVCTFC07SRHLRXZGagBkz5Zvt1vzmbzgmVYTOaoJ0Br7ohCgXRjeqTJPbO7loS06KG4c2gpwD6FwQ5imSWBMlfaRGMQBHtIS0J6/eaNQ5cno57yhHMUZoE5h67whmpdumx/CthM5in41BGgQx8/7BjUWMBrboiNjD9VFzR1hEWRat0zpuZP6kBkNGqQdyJ92RBcnQEIA4rHNlapB+EgNY5UawMfKndEc0PYQ1uzHr/DgQWlWgABt2czS1ExdaY2ltmjanwGXJfZBLn1SAFnsCPW56PKyCELIXnnSoHA2XhtucMbSFcELlwdlO0o0VKbmRI7SArTeS4kQoM1aV3K0U5rWGJgWzd2D2utDSDZeydKz/DBPEzRosXTU56LLyyJYhRs7YwI0IzUA1JXtfd+TwUL9s1dHKSonNSgdvhFAgDbIqfsGTdYwGtuiudkcfCYB8qXnTsNDZjRokHMUCyUnYD55M0bGypP25/ck39JIDYwd3BISbBqioYkXLX3kygnQqt+rQIC25sQvHkdjOc22FSIM/REb22h/rg+vxbW1TRXSc8fwDYAcaLF37dUU2IP80PxIDQBsnNEc0OTUlT5vJTRo7ek0ArQdEu4btHegY75aq7boAweEDNoE8ptW8V6XFKXlo9IEDRIO4TcjIsyBzzTjYuXpc/gGIzXSPC1Y9QOuzrY9JZoDIP/IlTts2Xdf9fCNAAK0Ecvh7byE2NbJaItmLCa48lS6oqauT4sGDTKNiBhXx/xZBHs4Se/DGDq3IzUwdoBv1TpDoqGaU1Vx0gz0cyBAW0jaMh5EbzlN87bojtF+TeGhdE03pfGBrbrjgQYNouwF9RlIM5LjiNX8kJEagBOAU6U6ozmgTmAqccwyegAbswoQoHWT/UoftwGy1b2Fr9eLF5PBduKo9+YxbBPgYoDjCWu1pWYR7EVPMzGIkRrgGWTT7HU6SwpFT1p4RT6jB8gS+AwM3wj5AAI0iek+QcTvrD6iQpCjNawt3ENY1EfplZ5V+8NyTdAIB3AK1R5AndWzCGJJKz5VP7wJIzU6bvHF2AHK1Oko0VA0hOU9Xdc1aNU9i+tD6PCvCNAqKfQyOznNcZDrLj/E3nmfZVkQ/ZuXhSxCiTBjQHhS/fkZxAHNrUbdwHf8FRRNNk7tka67B3fzNDiNGDtAHbeDDA0VDlj9HOBjca1xAT9+awRofcbAC62tTGj1ILmcEe3PYAwb0nNnYvgGGjS0dQW8XFLZ3lkESwhP9RniDACiKnSUaCh3wLJM5LiiQWsJtZFZAQI0Fd1/fj6LfDbUdaldtLraWwzD3SC5vIeZ1+3xhABpwXG1IB6vAiQnG+M4ygyLKM6iPC0AfCvPUaIhbwRseKiED99ISAwQoNVQWtwhoUkOdQnR7vV6UZ+DmahsbNKrme9CEzQ0cQhEN1wWJCOhO4GRGgCgvTy/3W55r5JLhlTczLm6IkMnd7wJ7Iu6mB4gQOso5yo89yC/zBXtYtqimaMiB+4hvOKa7F0yZqz9GQ0aKsdBoluTlWcRVBBTfzaxIEZqYO9Q1PBZhCaWMs8zDdGQPVYmP9hI0KBFBeXdXYLJIEBLp9B9gyQ0RR1T+OfgnnYx73a7zfOM4kleqP2Q25OeQ2S196XQoKEaz+eTXKKJjbMINqimPjNSA3sHCg1XhTlKNGQMoGln6awALWH4Ri7ReQsCtGiPWbMPgoSmkMV2b23RAqf7AcQHQsOPT3CDAMmgPuO44Er9WfR9x/B4lZEaAOA2UKJEQ97jlHCQTmnQrd7KLf1wGgFaKPVvkCcfrRDz1n8l7GkpCGE9tOY79w3fPYjPAVIIAOFkbDphpAYAwHFVLmdINKhOfU9VWPGaQ+W3cmsmDAjQQnPQyvmiYeVFFPM/dP88gCXygfzg6mFojPkqHQ0aCqWqIX+Y53kYhmmaOGZN6h9QxMf68+Ldg4zUwN5BndWDhAKHhmi4ngyfOkIx3mDNrutk8pUXDQFaFvUbn0loqhGqi9WbrKV7GGbf9z3BrxXcQ3iQmTlZGQ8P4dCg4XqSGizl3V6WZdnOieOkkb/BqfrzbPvz2huF4oy9A8DF9KYrOZqDjMjJKcp4fsqVpRKGcSFAC6LafYPQZHO/WfvtdltLd5ToVqUgi7ALTq6uysTxUvfCe3p6IDf/PB7I0BgmxPPzapDdPA02HQCgRObTFVCiyYVc5WM/t/tnB3SJ4Rsl7hJMBgFaynmted/gt0MJhdiqzx8tf/VEKNHQ3Be5kp47Z+1jNEHDNxM4JTd/zLkP/pxTV7rgAXWsid/H4RuM1ADs3RK8aqmxLqASh7TD8/MBxoEGnXH4hijReQsCdHtajd2AOmxLiwMXsPNEWyWaUdE1S0HPIdOb9LwNz642mnzaecqxTXCznP+fP4SGaIBvhAYUFGcAAIH5EkOiIaHUChNWv/0HB7LDxbRcRRaBAN0+72x+RGh/LseuseVY3fvojNb7nULwG4aBVYXsYdKn9Iz3AycnfL1voFC+EfljkaFbrTzI3LvH4xHUZ/YRMHkAsUZXekg0WM3ADw7MN9knwcmre3SNAN3yUApRfMhmCvH+WuXPpT5+IyOICMGX8VpQXny+HOdZeu4c391EE7ThvKIrLzdfTCGQocnfnG/Zap4MdAZMHkBd1YASDafOzMfT8q75nBq+ofp9KQToNoi6b5BsptAW7xY2csd/zoLYDutkVHQuvK2hc+n5lElaPQD4DRsHuLLcnMuOGA9N/uatBN11NoV/XV/xZpUAABS59I4h0XDmwPycp/qzKjczpAsBusERbHvfIAVMBQ6ulIkhfh4xlxZCgr0jPXcM30CDVnhiX//FRgpBQzQY9rHfHg7tXoLECgAAlJYSNERD5GnZnZOt4POtLDX5shQCdO2TJ033QX3Ozkf1+exSB/cU/8t8mnQAACAASURBVFe4tPA65u8hRHp+D+cAYrMFmXJzoRQCAY4UzsyO/Hwj4VstgBUA9m64xGARzNcUB0o0d91D9zaRYz0V78M31nccTa4DAnQ9JNw3SDZTmgP1OWGpE8LVemkhSjRsjx/S87uZAE3Qcg6kCrm5tCkxl4P8TW9JGTm9MYTjn9uKCQAmbwks2k8s6OiJhohzEiSaIPWErMDMhI2fIEBXqtDESj9kMxn5pj5fWefkR6arEh1C4DAMbNAxJu8hRHr+ZhqwnhBS5Pp5p1K5uVoKgQZH/qZi/c+OX99N4Tv4i5gAAIDqTG8rQ0vWgkBCLuHqKyNAF0fUfYMUMEU3+mAxr0Sdi6/trI05IQoyKvpgnY3FM6RnnF7kguATihYha3JpLMUsbUpocCDTonfXCcb/3bN3wGACQPYCYCBepEUNMI/P2SwI0GX9jrT7BslmCnGsPl9f5yzuaauDcGmhbc+D9HxgqiwCwaJosWFVbn6nzhdEg8MkJSz12WbnjNEHEwAwAFOA3RYd4X85AEAiF0CALliYyVc6eBU9V3Q5dh9Z1jlv3NpeWogSbSY7DA+9sGs8XsLJwQkkLJorublt3sx4aOqW+st7XXRe+XgNzKmfjAwNmDyAooojGOw2OQwOHEMG5yBAF0HmfYOkMiX4qT53+YSJEvLoVonm0kLVZQnSMx7v4uIgbRyvj3O5WYg1IcNBBdUgr4FnLAo4/3hdAJAfRLap43s5jzmDZxCg8zsdXvH2Q4z6nDfGlGvRXS8tDBq0z0sLNd5DiPQcb60sws+zhK6xrRmQm3+GjIYb1PmW4ahd8y5mxmbntESR8w9gGyYwOAklkZkSMjS4BQE6c5apq0ylqK5QVGQvaUpnMKvg4vDSQl3fFOkZXwe5TAm5OWHRhHwGnzIcVWsWqy99MdRxXXDxVyNDA1BigBxZIMHD81gCHIIAnS2RlX/fIOQNM5EBo0RcqROuuLRQuMNBJjtbqEPMQpk3c+RmYwblczw0Pi153co1O78nihXcCzI0Jg8ADfn2IDPS/9MKDd5AgM7jdzS+3E3VfaWoiI8Thc5G5XDl59JC4c+ikZ7xdRXOmCUDD7uP3OzBplwpcRSrp9aqQrPzt6yJww+YPIBVq/zm58/6f2Ro8AMC9FW03DdIKpOLs+P8iq5zfbXUjxIt0GCRntNOLL7O1XZ3dZsc3boj4Z+N2AQlrhOM/9UxzQfMhgYA0CsIHLjiNPeODA0eQIAunl9SQBoLNqfWrULl06pjd6tEh1HRNrZY4D2ESM84uvqLpkLCQG7Gpn5+SJNiHEf9YGWae4Pm1QEyNI4XAIo6+WN7vFiyIUODbRCgE1F33yCpTJZNP7todQ5J26kR4TvO8xwuLRyGQfUui6rZlmXR+46FkAVkEZIDhDT9ArkZs0pOdYyJcRz+3WrUn7Bx8GGEPMNGhgYAyO5Xf6ZAuXIkZGiwCgJ0iusxcN8g7uwsCepzzXWWMLl4LQKDEs2AjisgPec6kKzDlQXcmnD9aT+v/8KOkD9c/MxmQhLm0Il8FnWqQKjzsZGhcbwgBIFvWMJZKaC+qSJDgz0QoE+XxDaCB47sbMhJU59rrrOc2/NWJbrTOSq6eUc50nOulWQRFG0WcjPJQ50Pb0CMc2sgopqd3z+b2PYUZGh8LwBczFEjFQPbNT7AdRCgT2BJFcKLxZOmPjdZZIHxiUsLT60V0nPGxWQRskSKEjaL3IxlSch/iEe6in/hvkJ+e4qW4f4AAKKij4TCn1ZoMAMCdKz3MfbWDP4rvqJIXqsmZ0bsM1JFlxbWf0sO6Tm7f2MxMy7mFc3i9QlWleRBzndRJ8k5sSBd094TIniT70UrNABAfAw6W81VKPM7ZBxQDgL0bwzcN+i2gLm+9VcWqtUiC39PZ720UKwSXbM2Q3oud8YgY7yINIpVYg5bwEZgWVrSIUWSnOF4IXnCxgHqgjgyNFUbUKDBsQIgOUFChgbVIED/iPcG7ht0UkOWiD3/v707W1IdSbYwTIL6/V+3LIHMc0E3h2JKoSHk7vH9F23WZVV7Q4QPy5eC0JzKvu0ip+hMVyf68tLCw+HQVYCxntW3RHx/f1/y9K5Fspt7E0W1v1oKS67eLuQ67LysVhTz6Lz2AtGGiPivfUo07AOPMKDfFaCqL6tVqhpMFBG8mCxP2gO+tHDVpWM9rx1L1mHxVng+nw+HA7tZfnXyBSO7cjV2Ielh50etOLkSxnlr9I4NDZjLKJzP79yIMPWzoZEOBvRz2EM9s8h5liDxk07rFH5p4e/v72VYVVtWjR+LsEa4XipJ3rN+kFwTOjhXbqUJv8aTwqtcEfBos0HIjhSLPPunTk82NBLBgH4iKKsefO5zjJzQgRZxn+P0gKTP27d1opd9D+HFuStfWFS2Sk3wcTF/f3/bv58TcehwsAnoymXchUqmc+1hgQ0NoEPRW+BHz6lHfvQGA/pflHzfID4KgEUKd7Tqn7oh3TrRzV5auNQAxnpuPzxjTq5pgpBfr754BGMuyy7cXRBfslRW3Uo2tPILdJJW8ztUtB7nKDTi5x0D+v/XouT7BuMXyjgs+OvygIZjgYeiuV5ayHpun78WYU6sjjwD4nhFn1AOuxjGXPDsK3nY+TEXemg3bOiA2wEg1NQQttmxoRF55GRAd6QmiZj3fWjBlQnbjYq9vOjiRK90Qcfk5WI9b1LDLcK0WD2dTh+tHgO621CxCLdLwZh77Mg9BMmlv4t2AMg7MizVrYJPH2xoxFRQDOju3jeoDD2yrPscuRsVM49uf+Eb4aWFrGdlLZH+dtsGpNjMBWnfceJsRA+HnR+/cie/lQwS7QCwrPTtZN6/m/2pOETIvmvKDJ0vRIdWkQJ0x7Lu8y7D49CSMbD4Sws/et8a63nbFLYI4wP10vg0AtSbsjYUVJ14cx2azrfffUH3OenLJHdsaIMb5o1gFmHD5rXsH5grMdnQ2HaOuE3Afg3oPg9/qTuPYbD4msRf5NpNaKmXFo6UiaznzbfbIowM1E9v2zA+gXL4aInWzo6tNuJiOndebHX5lqEOFbgkEqdM9U7aENnQ2ERD3uVLjwZ0t7+hU3EeG9Ia7nOWRS5/l+v1pYUzneg3e816VtNSJILbNiDLmi3UehZDy43o+bDzI71d1rd5qAPAIgJ4jdKdvR14mwta5uDjBDp0uAo9G0bKzZWVfoSe7vc4PYTE1Ym+vLTwcDjMXB/Wc6idxata5LYNyLKthNYa3tzaudzV6wTHs4b7XOaN0Ds2tNkNiKqB6aI3E67aggYTxNNk6cuAdoRBobmwnimTzpTs6inodbq+ONETropmPYfqagqaKAXZEHzdFrTnVtoLh503kYvFQp0NDRi74tTtVaePStFI5mG9THmVLEM/S2AaV2IajBMZV7hDMXR1ondvX1p4+x5Cpp5qlqXTrS2O9/u9U7ESDR8tYDR7zmHnkXJRrUsd54ow0JsMXjVfSj6pZUNjjUx8I5+6MKApyGsoWIRV3ee8K9zzA/nblxbeOdHXZWE9q2bBp9PLuw3IR0i0sEm6m2fPLZLdXie41Pi0SDyIc/QcLcCyadKgtRXunmxoNJNPxQ3ont83SME8svZPKVO3JT8Ku3WiLxd0/Pz8HI9HiROwlNmU61J4OgKyId16TnDoJu+FGzam6QF1dWacs6GBR25/W4kFB/w2faH8SrKhMT9N/syUofb3V+Jx25wavMAne9fRcnb/fmmh1Qi7QRbBj3uwNjrCqgv7UYv5aC/csBF8fOhhX9jQABqU62bltJ9+yobGNEa6bWUNaD9Gflqj5cOqbalAyPGg7/bUgqhjAVdg2wbHUJBrWHCaHZlQY1LeYedFwt7hla2CHNMSH+izVrfMjg77ghEYn+bIyIApaEDTjhTM5HywwvoNgtexboPTbRsgGwqv82SHzmHnxcusdYgW5JYOwN1oLw3beAKqEEam5Pg4Gep9eWd2lM7J+ZCoF+o36JA+y7vbNkA29LPaT026x724nnS2TQtugdfGNAhyNjSAXON25wqcLYD3nf3TMxBDpS9POJokH7uUm6Hm9BvNxqQUhw713+a3bSgO0g2bqLW71nP5h27YqDFEdL59bGjRAkyTJZukAzl0OxGrSLjrUBOeCRUxoF27QcE80tJ9rtqc2EyIU8H6CcX4t22oDDQDGqz/dd47Ho9m4LUVo0XYKsKBfhDz08rFVh3QE9+nAWxNsJtxa1kFA9r7Bg2TT2eJll+58GTIaUIEOjFf3LYBmgF2wRzRVYSz5BSBfhDtEyZ600fMMFadOu9Nk3MztwHt4DP58qpXNf7KtVeYB43NS30P35EJAhmHx734/f3d7/fOYa1E+8JrH58uCGNOtACP7U/2RfYHrFK3jWmOB5vYgHZMTAF9FRjtZ4nyK8yDxoblq3DsXVr45iJ7mugEzYD1tuCuLBwOh/byhmJE47KjuQDY8M6NWxhNLAI8zYuZqZHSgPa+QcNkqFmik+XVYED/Lfu9PEYFzYC7lX8zePOgF1eMKnDM4sOGhnmq58ps+kgX0qRjP1P5/NQYMn5t124YJl91rE2+aT8BSTOB/luqi5G2kHS4irSRB7540KGGKJp81SViQwsV9FaWg8S8O6+muQSqFuE0hmQGtCsyKZg3sWF523SX3r6vAqJ2LfVdMt62AUmHUGqeB73IsjvLkqIWda7BpDn6qcmhot2T+JmDs9pFr75hSPSdiUU19BUbus8dtiitBW0oU/NLHnn2e4iq2NZmw/bkpeZBGyi6KkeOAoB8ovaN9rwCbJgUC+ZFDgPar5UNk2/Y9kLwbiOTfoLMGvMtqvYvFUDeYcLyLvXDXh70nJpMlmccZDq0oYVK1QHKItz2RHlXO9StZ4E8XXY6iG5Ae98g3rN5ePRcVTlQkFmvPvzF5pAgkHdY0He+Zb/fO8n7aXhbsezViXkHlGmLAT+YHrGGXUBepk7Vxc+mDMG/sCqwyDJW/WoR3OfO6ykPGvTfXU04nU6OkSJvAFuEZRXCetXg6+vrcg7aUo8vztahRo3qxIZWkFEyqsOKZBnHMcAtK72uOa4B7X2DKumfEWJ5dRSU7HZJP3ZXt0U5hib18EoYNBuwedC5RCPduOwylm9DogXFCN6tqKAGg4OylihbV9qsIWbyE9O0S4pBQqBeO4p2gj6rlts2IPWwa+s73/VfHnQW0Yg1SpanoUB8wt65cfsJbVMb0UJwxmfVwXYI+G3lv3kyyyChet62k5Krsd/vbS799yr93bYBggEr/UTxo/7Lg34vGsV2+cLFhgbCZmh8qexSzfa6hewMy9rHqoZQme+EgnlyzCARZ+YUYHe9RCPBzJxKEUK93bYh5TvJPoswoV4FSQEe9BvRGKpMqZmrLmwlG1qoVKWr98dm+aYk0FbSRa0LmLNr78gQJ+3pZvJlzCChVwVvJLoIqtari9nkMJ18l309E8p3vsvH/X5PmTSeoxCwjtWwoYUuCvRKuYYx6sUuBEmENn5sCAPaPK+ejowTy5uii1gZTJOqwVuyp6QgGHpen/jj9OXOKB70Bb9T6byauZQD2LBdGkDAQMiVts3m3GHzhDfSq6djCOg+q5JvWsiOnYESCeW2DVALSlOi9eFBX0PaIkjeXWYbmopGRtIZOzoFAwEt3efdtga0qR4jCXg5uOI4potYJSTVf27bGK8UUUN6WoTHCpBUo/KgI59ukWubLLhuBSNSg8Kb7ks5TxZ2uLAvLbOgsWQatvqe3jdI5o4kZqg4ud+twMIamjVaG5bgoBa6LUcFrNuePWi/rcSrEpfLhlaWkajqJg1XRyEjewjKYFXRO2zyPUlD2mUkYR9UKIjj+0f2tWKjr51KQZbXbRvoVn1ahLCvFpzMfr/v8GxX/BGDnNh88bPY0ELFcJQiSvNKCOInRaYohqumwCZZ0NqA9otmVfWjaLG2ZBZUqgafQW9Ct/Qc+fV851sOh8P5fO5nf9v/jBR5K55LObDtZFTgW2Svt2R/rnyxX4sL4K1m8KHll6QLVdXxRL6khQE9oXNoG4iWSm7bkNroU9PX9p1v6ceDdrkfJtQ9NjQwuYem/grEf8aJY8eGXi6FN5zBh2ZJzrPDeIJPEWrftLZh3XCXR1uFhNs25DWuudBVzSkwNn9KJx409xmT9XxAG1pjReQ2WiPxYe7oVvlvm8VDgwwnCk2VlaYIL8ztrWdodZVqlNs2gN7GsEvX7vmBU3kPOsugofVE3pdQNrRQQUDKnBp2ACW7n6BIzgn+zeN/WPsb+oED4VJsilDvZvYMC4j24s9tG0BvHY3vfEthD9ozRSxYDF3KATwV7WXKLFVQAzb0tOCPEP8rGtAUoZFyQszE/5A8LA0D8wtUswBw20aDdIYxjMKOT0kP2qyBNQaozVubqEacjKjUT/2OmavQs+YPksvDSl+PSUe4TJgirG1XDcNK9twC2/wtrGdg80xs+XXMlu8p5kGn+y6CM9dOecKK9YagLDWW7EGWhNJh30d+nOBf3oA28NO4E8jiPovtZbtFikA1geRKosttGx2+agzotqTwncdTxoM2bqDNMLWJCFTQyk9AKRqrAQTp0krxfKqXQi3Lkga09w1G00xZSBQ2WtfirUKfUJ0WTE+WhCxGJ+2M7zyZAh60W1bQWLQ0dgxVNmzbWw0gyDuV2OtbAuq9xQxo124or9PI9dBCOVujT1jVrrrgSnKZ9SyF8WnWJFU4Xi04n/1+n1e05504lMrss5WfxKF2kBfurWSD2aTPuTvgOixjQHsHiAo7OXLSzb0CTJNAkNJ00cr1XqsFNGhn6T4w33nZtns5B52xjzjvgm0rJxsa9Waf2nXVCN9niu36fu4bdkCea0ATgphMugtbtK5+dBiCZ9DlxiduFDBZvCUaGmX6Sm03nQd9ueLf3iGCmFnPhqaH0VgPlA85KqJnqdNhUQ0ulmYZ0H7yHFkYBSfjdeHGnrU7BM1N/I35c7SegNoOdMIaI7GmsHbyJvKgC7xpRjzXq6JrdEBxgmYx3IOcNjKgKxs6/qP6YfIX875BAncySYOHImzQHixyVfE3c2fdtgH00Mv4zu3bbgoP2tyByOXUg1h8yuYX8XdyrIqiwK3g2VX3c1L8UGyKAe3ajcjEf8qXdITw+LRZb4jWGMwVS01ok/9bt20AtdsZ33nbHhffgzZ3IL7IWUouqoRo0HAJHnSreaqW2SzXlH1sQHvfYAoNFJa8B1g0MI0BjXPHbRtAbZ1w+WWDah+h7e73+7DFtsboIc57KK2OLCB4iHYlqlVdvJE9xSLk5+cnS3YPH30rBxAwc4TQwzC+MVjzGu3w0328HIT0sFO2omov82rBgOz3+13IZ+16AdIV2Jk2tIDHGnRo45AZ6GR+SeQ+78Yb0I6hKbXzR4jUgpIc1BWw9hx1+emQJ51SFSVFAt85OAE9aPf+I6/ymWxDi3ks3vc7DCpiAyNHmOxVN5f7vBtjQHvvRzrFExAvLsfkrmDxexB/btsACrezdOK4W0J50MWaAjHTZ7F1KQe21eF9Vh5Hx/AReW3ojAJ7GGMKCErqdg4FHmDIgm1bAg1RVfy5bQMoLBK8WjAjQTxojyRRqeqyofE43ZheV5UfYgzTsjKRak16vOOdAc0UMFvOp8bxeYmweT+wBcXEn9s2zFGoOpLxnbOz3++33UFH5lFyQBvTK1VOwmk+natr7QPzczN+Kc6rlIZX34cvkFffxKGG+6yNBWkGW4X35TgYlsoat20AJUUC37kSh8Nhq/uXq84gUgNjbGhxgvmNWKKJBMwkuA2d+jn9EwOaNaDgLvJJyswP0iFOJyApshSipzv18/PjhzVAMYXg1YJV2cSDdgIGnZRivxzC4nGlEe9cm4lFiWlDZ/+V2HBXubxvMC9xArGS+7zzHDVYG7Ad6WqR2zaAeiKB79wDjT3oYuoR+HO4eLShqVxDzQRUTumDFKm6iJjPrr2H2y+jeKm55oenM7boCtUDKIzI3DZFt230w36/t9E9iAS+c28086DLH4KhW/AqKpyGxhzVrbY8nUGABQniP2x1N9qy/NeA9rNoLCWkij3GkBdh24CtiZkvl31x2wZQrJd5L1y3NPCg/QQT6vPF4FBmMT5sRMudSrEIWJVtbega7vNutxscfFZ2F2yE9WJJdkTuAfzNUPXnfD5/fX25bQOopBC8WhC79T1oXQOdc3kGcynUF4/DsWiDjJr5UQYRKmiWubvmNnQZ93m32w3f399fX1/7/V4wYWbd99ZyJJJuWJb9fv/PP/9YB6BGL+M74471PGg/l4EB6vqM8HGYujrRX19fd6704z9Brilmwn/lzo1Xy2IR0D5/21xQVizrh8u9jZeTa9qYsjtHPFlVbFL9G1RkTjewxhyFZj36o8lWucNT1vCgO3Gf5RReTU9/zhrX4Pkzil5Z1Y5UlxlLVRIFFgHHn/UisKTJNuz+561cRw5OtMorMa6dXmilKP2Ux+b15+fn53A4nE4nvQNI18u8WhAjWdaDrvSTUuDT0WnxkjvBqr77DTSrOizu3DCwIywr2dBVTbbhcckucwgbOp2U2VBCWVVsXvdt1iYJcvtesmsr0TiAFL2M74wJ7Pf7RYTfGgYcEL8aR4j8a1P4M5dZ1Zvj4POf62MREIFl7YjCJttwZxzcjSU7B6KTj5cNVFThJdXvuy36eJ8at77z45TCg5aDiCwP+M6YmemXc9Bz/pDe3Ge1EUGs58mh+z7lXVS9Bqxn0zrSCaRFOn5tk234c3S8JvZ+v9c/6NpOEsO0kLTor7RrnLXda9/5lstLBXY8aAmIMByPx+vJNVc8Y6lkn+NB/9lKgGLyqfwTFxdVryG5rcOYbmIREFAj7WZYSeU10vDUO3iT4Q5ER+76jbVU7VV12VaHFR+viv/IdLhtDTxoYPMudjqdDocD3xlrdNtpHvT4hgIUGNBcNfNqaHVR9avrjFTI8d3EIiCyTNp9bkr08IR+eFyp98vkQHTkXt5STllVRK74tm8RYfdppt+J6es9ThYTaNy/jsfjJQFPp9OrRH78ofSYfw24BsanHnS37jNN0uGOs56Xypp+Lqp254a6inpKaXysdvL7sGHyGjkQ3Wf97cR9JhkLlHu6ZHLwT87xp73AUeiuNBY253LweYJ4+LRmPu740xgQGLWzfrwH3YmAhKGM9bzVIJz3omp3bkyQOhYBuUak9zK7n9vJhmkLdFsuHYiO03fbiKoelpQIqFHrl0qNHorbUgfTnl7lxIMG2mTx6XS6q3uXuXoNnfD09YZz6ir/OmmrfX+D3zU2Rj4XIdSRd5dZzynSMNpF1bxUFRWd6KVX0dvVuzGGV6sz4b6SnQPRGw2cLXWVxoZchd5W/llAls3rV/WfBw2s3aDfXLURsBLyr8tw+dn7GznaufuMTiow67neGLjqRdV+FDJneLEISMqdJr/8+qGrkB7eqMkJC+FAdIQRbj1p1c+Sci2rVnlcpdtKN829+Tk2DxpYKZ0fDz4/nZBrix/+9Ya896CZLCg8MrCejeG7zy+q9lhujuaxCEhdNK514+vr63w+9+ZUDO8L5eTlcCC6nrrqUEygBjzo28rc4A0nbxacB12baY+uMadbnU6nP9dc0o1p9Gv4110t/isP+v3TESD1cKTl4dOmc5mpL67TBYbJR8uooSBXrF7+V7O4Mvwpr+ck+XXdLzfEWe41WDuaO/x9kKM69ejcg27jO9/aEG+S6NoUhCUws1WNPz/l2cBKVsKbf/KnwH7/T97/85g8etDc551jDRU3lPWMme376j7v/meYsKFHTjQWAQFj8jaXP20ovR3PGsZI5PnK6dKqFdakGsuogAJ06EE39p3vGsefWaYXAJOb1PF4nOl4IpTM+LRQ321oHP96v99fB7AOf1iKHsai9Sww+dJDCL1S5rfn9hgmEgTRYu/2OPNSJ/EvBeE6F3eS9cMYjbtUtiusi7PqY8A+3WdPVgvTiQd9kbYbRvLI37vwoIEJfHTwGZ3M4aH868ubAMZcDgMkyjinntFmsvYLckM6NkzSW4t5bd/g7m2Euz7Oiwxj/qXFf7nplyYrTSDte6TehlxM+1VHijK1ue98t2JjFpkHXTK/sF6OT77QwNbgjXpc3L92TWcbrY4228d6xhqT9Z+VwS/ITehYNZyWPc68lBgrn+zDyH9vjZODDkSHFbXdus/mhE6odBQ6lO985f010HcZp/gDY5ryzL7sGmisOjLd/t/j8fjz8+PsHgoUXmUT207WDJOdh5qYFzabG82ffubamf6BAb1b0+50IHqRGWDzHqm9IQvZPeiL6Rx2LvqokvOggTfMOfg8OSuByRyPx2vo8qCRVGKxnrFgE3+MpQk9/Tql7vf73hq6ZMSY1Ghzb8ayn/zNP6+a5sP4f3Vtv8bzvaVCdr7ksqTogYwedHDf+cqnpgMPWlrhaV4seJGuFEMDru7z1TUg6ZXEXJvFesaCrCHaL39gP4aJfMRtJCQ6zjxfOZRM8OGjf7vN7zd7fr63raLt3H3e7Xadf/0OyWKWZfGd5/SLft69IKcwsh8t/rJBu4O1g/b2565qO3JNVaxnLMuq0r2To3t+ndxhKU53b8bkbzpmKepl9/Dpf9DyDsHenu8tHrUThJclFVe9EdmRyeg73y7stK+s2kMnOh6Pa9Sl8ZezAxNE+6vo4kEjeMllPWNxrg/k1h45a99lKjELa4bbAO7QhBkZ2/UU1DDhv2ns1zgQ3aZ1GUp1uG6J5kGn9p2vTLa6eNDofGRd/OAz0KBt3cbtY0vt2YN2uCHy1rCesVIrb5z4JQ9EK54F6OrejLUToUZeTzSgN6kIDkSvVJS5z7cBhj5570E3e43SmxNkGZd0TlFS5Dvcdz1okZcN2h205+7q5zeqVRAiyAzFesZK/Ok+N3urVvbXwMrQRBX19t4MG7fGCpdR8sO0/2zDA4MORC9bkbnPbdQA4rNhWavkO98y58omHjS6OZEvNgAAHvlJREFU6j7n87lNEWh5kRo6YYz7fKvhs3siKFBvlUGsRPuzz+9DPe/RPUkadlMcZ14qQ6f9J9kH5GHyf7n5DNP5gehFEp77fDcUWYfOafzzjqq+8916zslKHjR6UPNrH3xeMCuBOya4LT8/P/140LRlqL0Ibj2Llg7rYbMJN5dnYjDfXJruGM0hq32BNxMOc/7jCOdoKv3MZBMdZh1oPtyx9lHo8r7zbY+Y+U39ZBu1+87pdGqso2QTIrSzrjxoBBl5HKjEqjH28/MzcnzYZOrM9SNy2doyJNybscnidzsgDzP/+zgv78r+M5PGdZn7fIfVwNqV7fJewa4edVyq8fyv7Ch0LlzyMLLpbPWywWivXUXe8elpDI+MLh40mo2HWhIahFkuDyGyZyJh11hPx5mjFY1F/oSMA/ICBvQu0ulRB6LrtcksVQDFWMqj6dB3vmX+IehrhvKgUabdHI/HDWsCAxqLMP7q5zf9sbxWl2vbDjucLBirX33ssFdzKJtzNpTR3Numpzt9O8z/I2JOMrUPRM+RU9znZdcThZlT3Dr3nW/XcMGqzoNGdjY8+LxGVqJb3rjPHzU+56Cx0gxI26NZsH36n0T7ClcPK4I8kLlj9mvn3gz8u6Qk0vbDIn9K2N/bJr13f73WxX3W6vARVw96pBnNd37sDsuWPt4Z8jaali8bfF/WbAfmsOyLtnjQWFAksJ7Rsq2XCbYgnolzu7fRtXOcuXS3WuNPS6Hwh6X+oOB3PkZ7uLdJyHKf25QAFGOM9Xwxnc08kxfwo2xln8XfcYvw2HxD9V/3dGPOVLx4MPOgsUiZVdbQshJOi7fgU+e215n2lsLuzei2Ya33Z8afwoYF/6z4twqWORA9YZ25z39GBfBpceM7j2Gpa6DvCiCXE1lm1CAHn+9qmq3BtPK70h0yVT1oCrPBCrOe0b6zlw+59teZFl7SW6OZ84D1AiDFjLywAZ1FaV0zf7/fpxvDuM9mA7RXYHcKie/8aWtYY1+YaAheOk6nU8xCIXcwjfkvHnzvPjgHjU/lGTGGxix7B1H8LGtzeq+GLeveDIyM9rVzNvJZ22HZPy7dq9UvZSLXgehPV7irNjlNRlgEPBbui8t8zZ3rI2ujzqesZyjwoMOSTgys0Vk2f9mgPcKyjHGfZwZVPQ9alq20qqxnbNXc5yR13oKw9um9ROns3gxk0R4xx+Rh8T8x48WCuQ5Ef1TjuM9mA4yMgffnmi+jDrszWl/gQcekZ3Pz9/f3eDzG//oMaHxEMz3pHDTeF9jC1rOarAzGZ43TezFX9Vpn3JuBjKU+rAc9rPGH5n25TYoD0eNDVpsc31rQYel/POactI7HZ9VF40Ej1HQa/OBzm6xEPbE08udii8hOHjSehpZTz9i2v8+vb2UG82Wv5tg2r92bgcJ9M+B1HMNKf27qkzXBD0SPXFjuc/yGh/Z5PfkajdsfWzFuPmXx9xA+7o5NwebdJODLBt/rNLuGkQW2/WMVHjRuI5D1jG0xVr8fr+bY0G1S270ZiJMym/yNcWT/igb0Lv9TvoAHokfWaG0ybAlA4/29nnFe6so2HvTkjrD2XtuUrnY8VJ05n88ZXyeQ9/dqaMmqLx58r3ize9BE5iLVVZlChFHCUrxfpWkHohc3gh1nBmHw6i8NMp0N6/3RZa4XDHUgesyScp+36nkIsqeLvy3w7o/iQU+ggdVlX7DJXJq350oW/MlW7vO1+SZ6STiWra6sZwSJw5ZTfJnh+uvra8wTxMk5zmhG3hzZMDcjaKph1T+92OGaFDdEc5/pgA73cZFjzu///LuU53V+SrO1chQazUjxskEgtaTUbTsUdaxnxAlF6zBn9d7bJn+m+d29GcoCUEBTDWv/BfVes/7pk71leV95uc+fTlYWIW8OXnKhgRZ59VeYij9i7Wug77bGvqCZGMiLNMH73vdp0V4pI/J2W5r80+ViPSNUNCoISymlRyf6VkQ5zoyukiJCVm54oLaFAV214I55stcyXrnPdEDtzbocc248mbz/G3nQn/aClhtnXzbf8do1tv1r2dbANdB4VUJDRbhuWz7eWM+Iw8/Pj2hcPMevN5rmfXMGsIiY6VxWDQ3+jsIe9G7GpfvLhiz3eYK2sAjxM+t6t0aEOHlqqJmKx3M4HFrKTR70ttQ2oNs/DFtVoQF3THOfV0153bZqLWU9I9qEKCDXHqzu3CGFHdik/26SfUObv6b8Sajdv0+zr7SRr9aQ+zy5/yFaEdzkmPObjzTmk5iKxzeC9jtoX7AGNY4/K1x4Fd4xVeVFabe//m5x3Y4d6xlRx8OVYlI1uOXuPIpJCv1UmICyqvF1HEOzv6mTn3mueiD6aeviPtMB2fNl82POI5vEmwdplNPILrBVptsaLBtUlfSMWzhwpyqDx8PPz08iDxpPSyjrGTGrn/GwzTq/n82JdqDwsDy0/G49nIO+3cjFD0Q/rp5OOWd3rMNWK3/7FsHIH/WjT8jojNwFHIXeZK+rfrUyx59NerhjwosHt/qcPOikIpD1jJiYqZtV7z/X2UgFtO/OzZKutQG96+zk6YIHornPi+cYmq329YxzopWfMCARTH+y3++3cjd40FiwoFkHlIztRA9XUnjQ1ObtUrCeEZYGM7Vq8Ol4ZapCyVYY+bO1uY5jaPzFOvSgb3d0t9vt9/tpm3q3aNznmTrDIqwd7ReFkXTYmOwxUUtjWsCG22proH2EykrEYab73F6UOgedRVCxnhG8rZup2yuokb+JNFihUjfM8iFXzbih/bfq6iKOp3J5N+lA9O2i6ZQ95H+6Jc14zHmNCCGV3rC5WcCD1u5nxk/J55eugUbYFw/+Kap50MELptqCyLSZqQ2eu3GXb5itULsn5vqcK2XcsMm3MupMOBB9DQXu8/z+ZxGWiuHUx5zf69HHfzi+CtNJb9jclORB97PXbSpDjZ0Srj2ziEu4VbKH9aB71uqsZ6SI0jmWKNoP4N5SiOw1J91HXSPXhq2+VefnoO9q8ZgD0Zfl4j5H6H+0Wu01XOTb8aBfseE10HYHM8OGAY2SLS97YDsHHa1OUtrQ0HHLsqtNxgN55+UtDeidH6Tc7O77A9EXJcd9XjCXMD4yr3drEEnk0XwiGNDXDbI72Gp8ioZjAd12+UQvHnwDDzpCLLGekShWzZ4t6/PTFZgpPMxZSFd5Mn7mxd9MOGz4fXjQTwv07tmB6EuntFZLZZF1eF8Zezjm/D4H31Stj+KHNnpV+eMEvN3pZK/TzauNifNkCC2p4T5f23coD7oftcl6hm6ONwu+anEwagFt9MxSWTZs+2WcuHm1x9dtvojp4/FoucwDq8Zbb8ecX7G4KiWMHgn1GgAeNDapDMDmJH3x4Bucg27fQFnPyFUi2odr57NVG/nkemjEb5cFPv8i+TVs/mW8kPBPYXf7T+6ORVsiJsK0uLoi++6E6ft/YdpDIB704zJGywi7g496saxEATm0oACIo0h50C2rIg2JXCJfxEYbrNYoTSQNYjbNAl9hkes4hghfxsHeRcZFa9hJ8k/+4tczzkKlvU6ih24J+GN/HjTe0MmTSwcCump2haM6iAddVWuxnpG0LAjaftbc2IWArbPSF5mTXFEM6B3/9G35Hr+M5YVvg5UsUx2uB5xJrpHhsWrWEEOvilWclLE7a+x1gWbUSQkV//3Ig8Wvfo6W5s5BrxQ5rOe1VSLWYNsXKXW7syv9rtTkBUToVpMzawjyNRyCXrxvuayjQxPBMefg4UEJXYl51tIGae7RBtfGmyVie6DSiwff9/Rl39ve+STCeoYmjo+WnbYH7uKw0teZfB3HEOdr+O3nGw297FTZ8zUU9b6R9wculWVtFpAMil/wHYVGzCGqAU4DlKfeiwfDNtwa68x6RvYOvm0m9tlSm01VEzaCwge2VVlDqO/Ag242YXbYGstYtFfHWbIsK5Um5E7GkThOtQ+eZRQqdv2dnGJAl4/n3pSDhjtn6VjP0MGx3lS1ierQFLCVFKn61T49Cj1E+w6Gn8kVfM6a95Aheb+XY85tVpj6Ue3v9og8Xby/ZBxf7RfK6Mne4lnDnbxirGdkh/tMOOkLiCPACK0rEQ3onTuLw8yflTYi0dx1WXbHnGt3BdJnv98Hz0oetCGqNzUi4AvPButd/Rw/TTTc8QvFekaBMI5zBURvKiLg5RtaAxAqm4aAn94h6Ls6HmcWTb0vwT+89wduu/KbFKjOdU+KL86D7pk+j4u6DK0knbx4ME7DTSfkWM8ok+l99u6MI1Wf3QEoXAHGXMcxxPz05p+YEjavHx0wnH5vEO3dxkbPoif4NdD2aMHGkfGhWre/3hXq9Vj7xYNZMuWiuLK0npbLwnpGpWC2DhsKp9TBQwWhc5nUZnAewn50HnT8YE3kRweJJcecA6bYp7GxuJvWs7+ZyJp0FLqHXS4zRwG3kUxO3wlCHvS1rwkPFItng3zns7a5DDEjqsOv/CqJhsgf3V0cub5+5Mujt/o8twecSXxqida5I/410HfbRI92Qs8vL7r8dM4j0jI9zqOUp8uytgcd/9o31jOKJbV43rakTFv/sHqDDY1O9MB63/rVdRzRDehd3y8kzNtKQx2Obnzc2DHn8mqJ0FmKXAb0jgfdDZ17dgzoMj3O1c9vBHaf56BZz5G3xiJMTueYId3PnlZVTWxoqAOLZ9AQ/EN3PgWV+e7b+tFr/3XXY84c53SClcoJVRmylGVKtHxl6LySi/AacJ//zPSuPGjWM6omsqjelvLP7F0PDSyYPkP8D93tZdCFB+DGl3Us3hcvn/liUhA9efMr5qspe9M3GSs8D3pywU8B2054F2DtFw/WYD0POtTis55RlZ7vy4pTRWduQa73wdBISK0Htl2BS+4MKT50nx50J8Ha4HD0In+mY871BNMiEUvcLFsBEtVnAtQoVRgvgk5NS7cxe77UPgfNekbtQhe5/nSiJbq1aEwBwLTEGbJ84g7v4uhzBl7cj57cFx1zrp1ckfe0K2WT7hpoArQ2jj8/7cXIZQe0LKoFxOoaHvTmy8J6Rm2cfQ6yCz3PksQSetBIy67G7+9vJgO6ty2kGndL+NEfLaP3B0ousmbbHM/YSqnPMbucoqI6/owC4t5DlGm5X+YcNOsZ5UnhPpeXEyTTjg2N7uvABIZEn9Vr2THh8uj3/9rvDcR6V6Nm/FrUj6bJ/mN/HnSZ9s25e9ptkQgxPEcYZPegWc/oAWefg1QbpebRbaCd8Co2cGXI9XH7uZRQTf90PH6a3k8PMjvmbMjM1bTKq5kCX5AHXaMy6Ah9Kq4yePHg/CKQ1INmPaMHrhOcpdicBS/fqHTE0IFo4E+GdJ+4k3PQmuuEwHhcwOv/Xp/TUueYr5laVqEepMzhcChwixwPOjuOjr7vqojf2iic+SziQbfU8KxndMIl1A3yQeqkgOx8doNSMJmUBnQPeylYF4mTf/75xzFnZNdMPeiYGk8WedDvC3LwyqBTpNs13AZwzy+DWnwxU5yDZj2jH3K5z+X3QtkxvgGTSflDs6+vr/LJbBK2kliDpPq1/HOUSm9/UnMy4vjzK7llEVKUna0CuGq5C26vXHb8eDyygdBJiUun3gtLwTX2orDYcOdn57XLIjyZ+g1FgrUqPz8///nPf6wDsoyUYxRM1a0pVtLVcMlVRCNWeTJUmw0fnxROnDm/ilhvWVjPpr8Opbuzz3GwF6QmVPWZDHk/euHX4wjW+VzVudco4VbFFqgMJR+/1fO5XMeRCMefkTp6icYeeq4LN9CnbhfzobZDuzHK4dPtxh1D6k9f9YWEeu0czufz+Xy+BsbhcLCeWFY2bagbCguXevWcB31L2GeBbjOMWeswUvCI3vI9l/WMbnV70rB3NxG6neaAP0lvQJes8p6WTO6Lj0eBvr6+HIJGJdlUVbXs9/t6v+zjQcfH8ec/E1MDDdvU/Bo6Zs9dSsazntEtt2eJEGRHLIKBDhO2GHcM2b9APQ9apE5btOPx+GrpHIJGsV+NlZQsVRUYDzr47ugOfSZmgdD17KRwz2U9o2e4z8ao3voLuVV4Z3HHUOA7FPvhtmD9lNPp9P6p7NfX1+Fw8OS2c+VUrOzU86ALv+7MGYfI7cMi/FnrLILQxeX9UQ36FOsZnVPAfa53odzaFanqraqGBeDJyF/kaxRyLtTfjzTK9/f3GGe5sLeFP6n63L7e+5Rr52nntT2gpHb8Oe/edU6QFw92WNNGVoxpK3M51X59hzbQ52RnEE5a92C4g8QZw1Dmm5R5dCZYR67SRwOYQ9AaQMmCU+xpeXmfy3UcoXCGtDd9VYM4x2P7jIqfn5/Fn5U69QzsqrjPxQqjyzfMd8CylDKgd44P91GRT6fTBJle8hVnGBMwtctCJY3SQ5LyoONsBLvnI32FIF4AJRNhF5byoFnPwLUjm+J7Vkoeddce8YArQ6UvU8CDpkHfcz6fJ59Zcwi620GRQMlVw3vYrz7VZKjpwvFniZkRcRtHWrzyoEdWOdYzcJsL1iHm3G0Rgkx5xFjejcMd1S7czJ6ZIvVNC/z+/p45erkJusPS38l0V+agdydJ2mepj9OgHX+WmBk5Ho8WIQ6Ta4i7noHbdCjmcpYReNxnsx7UgTUY6n2l/X6fV9IJ1qcSf6n37Xx9fQ3D4ACR+bBwq8v+EK6fx/vu4jBWSUx8FLQkYkCN8dGzGaeegceMsA4xi5uOY9zDzG3CU4aS3yrvLUKC9Y7FT4js93uXTPVT+tcb82I2/gKipKu72olIE28iWWURNuR8PgvamDx60E8VJusZeMydehlRZsBUrEwQUApWoqwBnXHjRerjuLXGmhwOB4egO5G2FEnG6t3bI6J+jkIH+ZqMvMnbR6VsVSICBq1guBUbb85Bs56Bp1kjKSLP4DRGoqFvx4lGKoaqXyyjB63sXkXJUnduPMUh6E5acrfSNrsH3dUh6OuW0Y7NlpoBbTjMRcyrnwXDnXB99KBZz8CrfJEXkXdHeTf6gUZaj6Hwd0s3LGnGv7+/x+Oxwa45BN2Dfuq5wqQWIn3qJx50G7jPEjMXXjyYSHVcPWjWM/CmCxe2ZrJ/Na9oLhB+1BqCM9T+erleSNj5o5LT6dTMGnAIunwDpp/yqpCP3ulUbMuoxrVXmAE9GcHZHi8ezMVFePzzzz+WAlDT8hYxGAAxfwvwctI3MonUCHLk+/u7sS9wOBzkP/1Uu7b8/v4mLSzdyqbyjWDbpwvc59Tb16E0ErEZd80iAK+yo7bIyf7tNr98g2dqBlQKemAo/w2zXAbdZ6Sufd3z+0E61wF5jE8l23pXWNJJug6vgc6+ZSkWljdkOBSuaFC9DZ/AHc4+m56wVVei37Zadjxl6OFLptCCvUXq7+/v6XTattUdDge9th729NVInKto2zWLsPj0axGQBVc/kx9Apf7LkaGRYBgEdj1cwfHf7xn+d6NdydbLnRubf+Wvry8/KDYBdiI7ckl/ibnz/NxwFY+vry/TSwPiu8+qkwoDjKwV/bjPeb+m8mUehFLQbszv6KtyNGJ0uO/v79PpFOTzuAm6GNznMppDxS6pYLayLw1X2XewK5lkdEmtPWwftPvrl1LQUpQve2QkhGLebsY3OEVTroWz8WI9h0pLh6Drje7qSQ3BweeiY5JWBjoKcwI1RayqS4Z54M+80HlTEMeFIDB0LvRAdwZ0zNJWPv+Px+P393fMr+kQNAlFbURsTp4MddMg1sYJLPNhlkzn19AegGpGqrUUSMLVYEgkkwRNZ3yzk0hdu7FFuO75fUiwusoEm0UYKTXUarvWz86qDAsLRx1zHbx4kPAACvDz8yMvsuwU5xH1Bg1EnyPMTlivqwW8c+MpDkHXiLf2f2lSkzSLyFCrHzeuwLdonDWOP6t7KeA+Ex5AjaToMy/SKY3f39+AO0VgmBBRnqHPr73f7+PU3Hp5/vv7ezwec902GyokYA5sU3aC6zwy9OnGWZaPcA4LKaLUyGdQBwpIcWrc3ARDotXDG/o9XxYnqYqF6el0Cnvd8xscgs6uojYJudS9Of7w7AQ0ZTMTvp66lyJKcz0mkVNX4WERgNtSJinMTag0bnjOSiCtMuD3PEEFGaLKdOvLdc9Jj5u5Cdoc2K22iJyV9qievmm5rY4/r6UdtcvlclmUJlW8FgG4zYienZdc3z3m5RswLSoFvQwRPX/5IO5GgUhNdN3zGxyCzht+yn1VVSErSRzzMPlUmIxXP0urN94NWwe6LeLvl0VAsYGRQEpE72dYNj/Fkz1ML9c957rx+c1E7VRXsVEQ2SUFn4vKMWJJzKp48aCOCRRotTIi0QoYmqADYlvYbRt70Klz+Hw+H4/HSp3Mcct0OP5cW094JkQIGoljwoMWot2qDosA86A6lrR8Ba9gpIXpQyUvj9l+42KXV3AUuHPjaSQwvBT6PnVSWDFBjNbrIw321PHn1eWjXjkvPoVo0o2zCMDuf/fXc1ty4fkZFp8cFQF8PEFYgt2mLyRM1wl+f39LWs9XHILOFY201OJKIlyX4nON27tcPXftxkoQI3K28jEzQm8At0VMn80lwPQddDU/KgVhMdg3modrcDwev7+/a2fX19cXD9o0SEMoznRPXk6nk0WQmJGllDqjOQJ5c4GVmXFiylLBqAtdkkCqDQP6Zi2an7NLZJ9d7tzoxO9z4jJLlY8QkPV0UjQBIR9Jn6pTll7ZIV48mLewWASA+5xUeqlg6HOKVAoCMliCW76+vlqGTpaOVfjCjVdhcDgcCCxaqnMxHcdbb1yZs+9d/Iciq35Cx59r7GNJCvxovc9STBACuwyvsIMKhlBSgVDEI06v3E9TLfMkeBe/XPd8PB47nDcc7Irf2IKkT9XOGuoJtnzMu3ftx2PPKlS/sMHJBUi6cROmbqBeInCf6SLASEIAzJ3rLcHjQGWm2u12p9Op/HXP78PATdBlBkJkFw0MaDJofOey9Y17pUUYmY+CUx8E8qpuwjuj1vK2duikiIapfrOBKmweXq57dk6H50VOIYhiYHLVm4vW2FPHfORmWFz9nBRiAzifzxIh797RFTBUdj5zRYPF9mJd1jcfA4bpz8/P9/d3bzc+v+l/DkEbCBFELnggVEwPrTFgOGFqUIwJ9zkpjmIABW6uNy4B5spuB66AeAnhu7Fq1UgK1RUuPw7VqO44HA6O1AWs7wJ1k566rdPE55qzfT2snlotMWNSyb7pKsUoDYD7nLcqujUFKRKnjIxUKsfjTNm7sWrVlIgTpufz+Xg86lJPcQjaTPhnoehEKGxbspyApor+bGQ2Wm4GbFgiU8sDMrZp7rNxyWwF3RaL4wT03+VvjawIkmk/Pz8u3PhztF77LDw+ShxPSradjrYShcRo6u1be0NVBoNizKQrdi1MP1pIPUHncJ9Tl0QPPmFIUQ3C4tzKNpPV5jH6+/v7/f19PB5ly584BK2447r+G26Bg5Yy6BVuf0ZAXP2cFN4NOtcJ3OfUuJEMxkzjVWTM8yPWaAXXY9uzFcfj8fv7W6qMDwAnvIyFb+gqPDYUBwxoIunVN3JccdsCqEU+FVoWISMziwlpjez9lPvceREDup00tf5GE70lGDlf1QjT8/n8/f2tM32KQ9AUFTZXBgxoOukpjj/X00jZ4eDobkDG+Hf8P7uasoOo1I6zdGTK4SPcAf3BcJU6tlz3PAc3QRNV7+tDb7Gx1V1d0nDBHdzcNFxkNx1/jqORcJVbLIC8e2cR0K0qULgKVDAiGUZOBMeBsg/mq6VCv7HAdd3zIgyDpzXGQvyrsLQvKQ5BLy7ptu2q8/8Qx5+DCCSLcE2rqjFZXkNy39Czxhb/2UtipefxRAUiTJ1Ya5y3BO2rYcv8udy5IWMX2X3ml8kQ26oBkrT2+NTzuJVeTeqPu93O1c9pUUnQc/CLf4MSYPDsdp5qjEOdH49Y85t0mzZ/Pp/dQrgsh8OBRDMZ4rHjNvOFmVzZd3BZHH+Og4dDu+ruc2E96WgVehbYNLZBCcioRoIoT/rhUxjQU6as4HHmuuf1tn6RJxCgq+rpgGYiwDXQK23iJjd6z/zMKgPi4JE/jQGoWr2p3yCfpF4Ro/YRbQKNXwqy4DTZlII4J9BXjdHf39/j8ei65/U4HA4Wof1kGDyeHf1reXzMIWj66To52zVlME6fEpBJsXHoNvJNi4oYYAjtbYDaHJN860FrvRg9n8/H49E5jrW3nv/VfrC3CNr//zctCUhC7Xa/v78mrnCCstfcLPziQQLDIIqScJ/LZDotBOxcpZVrXrAEjQetNdy0n5+f7+9v1260wSHoxsNhiqh2CLpZ77fUlWaqybtp4lIG4+DFg3oWkAjusykJ0NaTjk4FYEDPWLtJHvSyMfr7+/v9/e3OjcYztjOYLaWVRdD4F6m9CCikplmWjj+HbY4dfutO3OeSIpPAQIdwnxUxoIdpVKELizG+6bi1bCYcj8fv72/Z1R6HoFv2D+tg12YWXhRLPe5zXE3Z2cMhVk7qvbMI6K2zK1kLLqYiRurDOKOiThkWLMHM4vhRfVwqRs/n8/f3t8eeG+67M5gNSBThdFLLfi/7+pmvXo3QdkcljNCh+gnFYiMW/YwOGzr3uVgRs5vA5gJGGk7g/wAj6xTTn5umLQAAAABJRU5ErkJggg==", - "encoding": "base64" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 82273, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.698Z", - "time": 70.71699999505654, - "timings": { - "blocked": 24.860999967280776, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 1.186, - "wait": 24.556000014211982, - "receive": 20.114000013563782, - "_blocked_queueing": 10.842999967280775, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - "_priority": "VeryHigh", - "_resourceType": "font", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "https://keycloak.nubes.ru" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "font" - }, - { - "name": "sec-fetch-mode", - "value": "cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "application/octet-stream" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 61980, - "mimeType": "application/octet-stream" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 60778, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.701Z", - "time": 68.67200002307072, - "timings": { - "blocked": 22.132000033754856, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.5500000000000007, - "wait": 24.61200001350418, - "receive": 21.37799997581169, - "_blocked_queueing": 7.794000033754855, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly-additions.min.css" - }, - "_priority": "VeryHigh", - "_resourceType": "font", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "https://keycloak.nubes.ru" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "font" - }, - { - "name": "sec-fetch-mode", - "value": "cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "application/octet-stream" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 38876, - "mimeType": "application/octet-stream" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 20909, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.701Z", - "time": 128.16199997905642, - "timings": { - "blocked": 41.90299999587983, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.6189999999999998, - "wait": 24.369999977570025, - "receive": 61.27000000560656, - "_blocked_queueing": 8.025999995879829, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - "_priority": "VeryHigh", - "_resourceType": "font", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2?v=4.7.0", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2?v=4.7.0" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "https://keycloak.nubes.ru" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "font" - }, - { - "name": "sec-fetch-mode", - "value": "cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [ - { - "name": "v", - "value": "4.7.0" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "application/octet-stream" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 77160, - "mimeType": "application/octet-stream" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 77545, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.702Z", - "time": 258.7809999822639, - "timings": { - "blocked": 44.419999996587634, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.4660000000000011, - "wait": 24.003999998420475, - "receive": 189.89099998725578, - "_blocked_queueing": 8.285999996587634, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "parser", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/css/patternfly.min.css" - }, - "_priority": "VeryHigh", - "_resourceType": "font", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://keycloak.nubes.ru/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/resources/gxaea/common/keycloak/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "https://keycloak.nubes.ru" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "font" - }, - { - "name": "sec-fetch-mode", - "value": "cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "max-age=2592000" - }, - { - "name": "content-encoding", - "value": "gzip" - }, - { - "name": "content-type", - "value": "application/octet-stream" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 63736, - "mimeType": "application/octet-stream" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 62324, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:14.702Z", - "time": 229.84700003871694, - "timings": { - "blocked": 45.76600000895187, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.4540000000000006, - "wait": 22.619000005170705, - "receive": 161.00800002459437, - "_blocked_queueing": 8.387000008951873, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_2" - }, - { - "_initiator": { - "type": "other" - }, - "_priority": "VeryHigh", - "_resourceType": "document", - "cache": {}, - "connection": "443", - "request": { - "method": "POST", - "url": "https://keycloak.nubes.ru/realms/cloud/login-actions/authenticate?session_code=2kc0mL7OTNRd6s1DdXCoOTeAzBzXysT6SAeoKPb_e9Y&execution=68334692-b437-4f1f-a82b-95b3acd70eb1&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "keycloak.nubes.ru" - }, - { - "name": ":method", - "value": "POST" - }, - { - "name": ":path", - "value": "/realms/cloud/login-actions/authenticate?session_code=2kc0mL7OTNRd6s1DdXCoOTeAzBzXysT6SAeoKPb_e9Y&execution=68334692-b437-4f1f-a82b-95b3acd70eb1&client_id=deck-test.ngcloud.ru&tab_id=mHDuRGQKiZU" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-length", - "value": "99" - }, - { - "name": "content-type", - "value": "application/x-www-form-urlencoded" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "origin", - "value": "null" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0, i" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "document" - }, - { - "name": "sec-fetch-mode", - "value": "navigate" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "sec-fetch-user", - "value": "?1" - }, - { - "name": "upgrade-insecure-requests", - "value": "1" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [ - { - "name": "session_code", - "value": "2kc0mL7OTNRd6s1DdXCoOTeAzBzXysT6SAeoKPb_e9Y" - }, - { - "name": "execution", - "value": "68334692-b437-4f1f-a82b-95b3acd70eb1" - }, - { - "name": "client_id", - "value": "deck-test.ngcloud.ru" - }, - { - "name": "tab_id", - "value": "mHDuRGQKiZU" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 99, - "postData": { - "mimeType": "application/x-www-form-urlencoded", - "text": "selectedCredentialId=532d5f8e-27c3-4870-b620-85d251f97f1d&otp=385480&login=%D0%92%D1%85%D0%BE%D0%B4", - "params": [ - { - "name": "selectedCredentialId", - "value": "532d5f8e-27c3-4870-b620-85d251f97f1d" - }, - { - "name": "otp", - "value": "385480" - }, - { - "name": "login", - "value": "%D0%92%D1%85%D0%BE%D0%B4" - } - ] - } - }, - "response": { - "status": 302, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "cache-control", - "value": "no-store, must-revalidate, max-age=0" - }, - { - "name": "content-length", - "value": "0" - }, - { - "name": "content-security-policy", - "value": "frame-src 'self' https://*.ngcloud.ru admin-dev.deck.nubes.ru admin-test.deck.nubes.ru admin.deck.nubes.ru; frame-ancestors 'self' https://*.ngcloud.ru admin-dev.deck.nubes.ru admin-test.deck.nubes.ru admin.deck.nubes.ru; object-src 'none';" - }, - { - "name": "location", - "value": "https://auth-api-test.ngcloud.ru/api/v1/auth/callback?state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9&session_state=e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f&code=583448ce-ac5f-47bf-9709-797cf40bdf37.e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f.8db6af23-8709-4e33-846d-f9bfe697e5ea" - }, - { - "name": "p3p", - "value": "CP=\"This is not a P3P policy!\"" - }, - { - "name": "referrer-policy", - "value": "no-referrer" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "ALLOW-FROM https://deck-dev.ngcloud.ru" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "x-xss-protection", - "value": "1; mode=block" - } - ], - "cookies": [], - "content": { - "size": 0, - "mimeType": "x-unknown" - }, - "redirectURL": "https://auth-api-test.ngcloud.ru/api/v1/auth/callback?state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9&session_state=e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f&code=583448ce-ac5f-47bf-9709-797cf40bdf37.e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f.8db6af23-8709-4e33-846d-f9bfe697e5ea", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 2428, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.247.187.57", - "startedDateTime": "2026-05-30T04:35:24.675Z", - "time": 119.88299997756258, - "timings": { - "blocked": 10.248999975871294, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 1.0099999999999998, - "wait": 104.67799999005348, - "receive": 3.946000011637807, - "_blocked_queueing": 1.9919999758712947, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "530395", - "pageref": "page_3" - }, - { - "_initiator": { - "type": "other" - }, - "_priority": "VeryHigh", - "_resourceType": "document", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://auth-api-test.ngcloud.ru/api/v1/auth/callback?state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9&session_state=e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f&code=583448ce-ac5f-47bf-9709-797cf40bdf37.e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f.8db6af23-8709-4e33-846d-f9bfe697e5ea", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "auth-api-test.ngcloud.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/api/v1/auth/callback?state=b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9&session_state=e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f&code=583448ce-ac5f-47bf-9709-797cf40bdf37.e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f.8db6af23-8709-4e33-846d-f9bfe697e5ea" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=0, i" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "document" - }, - { - "name": "sec-fetch-mode", - "value": "navigate" - }, - { - "name": "sec-fetch-site", - "value": "cross-site" - }, - { - "name": "sec-fetch-user", - "value": "?1" - }, - { - "name": "upgrade-insecure-requests", - "value": "1" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [ - { - "name": "state", - "value": "b501ed9b5194a9e2416eb5e5c968b701712e858249527c0a24dd379a305efdf9" - }, - { - "name": "session_state", - "value": "e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f" - }, - { - "name": "code", - "value": "583448ce-ac5f-47bf-9709-797cf40bdf37.e336c71a-8922-4c6c-8c7a-ff1eeaa73e6f.8db6af23-8709-4e33-846d-f9bfe697e5ea" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 302, - "statusText": "", - "httpVersion": "1.0.345", - "headers": [ - { - "name": "content-length", - "value": "0" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "date", - "value": "Sat, 30 May 2026 04:35:24 GMT" - }, - { - "name": "location", - "value": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508" - }, - { - "name": "referrer-policy", - "value": "origin" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "version", - "value": "1.0.345" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "x-request-id", - "value": "c6b8518b6a1c413b625495662f22313f" - } - ], - "cookies": [], - "content": { - "size": 0, - "mimeType": "application/json" - }, - "redirectURL": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 419, - "_error": null, - "_fetchedViaServiceWorker": false - }, - "serverIPAddress": "185.178.210.252", - "startedDateTime": "2026-05-30T04:35:24.794Z", - "time": 198.83499998832121, - "timings": { - "blocked": 21.10000001193583, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0.43700000000000117, - "wait": 173.74599999626724, - "receive": 3.5519999801181257, - "_blocked_queueing": 0.7660000119358301, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": -1, - "_workerRespondWithSettled": -1 - }, - "_connectionId": "529398", - "pageref": "page_3" - }, - { - "_initiator": { - "type": "other" - }, - "_priority": "VeryHigh", - "_resourceType": "document", - "cache": {}, - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "httpVersion": "http/1.1", - "headers": [ - { - "name": "Content-Type", - "value": "application/x-www-form-urlencoded" - }, - { - "name": "DNT", - "value": "1" - }, - { - "name": "Origin", - "value": "null" - }, - { - "name": "Upgrade-Insecure-Requests", - "value": "1" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - } - ], - "queryString": [ - { - "name": "back", - "value": "%2Fdashboard%2Fauthorization%2Fdashboard" - }, - { - "name": "code", - "value": "604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508" - } - ], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/1.1", - "headers": [ - { - "name": "access-control-allow-headers", - "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" - }, - { - "name": "access-control-allow-methods", - "value": "GET, OPTIONS" - }, - { - "name": "access-control-allow-origin", - "value": "*" - }, - { - "name": "cache-control", - "value": "no-cache, no-store, no-cache, must-revalidate, max-age=0" - }, - { - "name": "content-encoding", - "value": "br" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "content-type", - "value": "text/html; charset=utf-8" - }, - { - "name": "date", - "value": "Sat, 30 May 2026 04:35:24 GMT" - }, - { - "name": "expires", - "value": "Sat, 30 May 2026 04:35:23 GMT" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "referrer-policy", - "value": "origin" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "vary", - "value": "Accept-Encoding" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - } - ], - "cookies": [], - "content": { - "size": 8491, - "mimeType": "text/html", - "text": "\n\n \n \n\n\n \n \n \n \n Личный кабинет\n \n \n \n \n \n \n \n \n \n\n" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 0, - "_error": null, - "_fetchedViaServiceWorker": true, - "_serviceWorkerResponseSource": "fallback-code" - }, - "serverIPAddress": "", - "startedDateTime": "2026-05-30T04:35:24.993Z", - "time": 42.025000031571835, - "timings": { - "blocked": 5.319000020686537, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0, - "wait": 28.24699997755885, - "receive": 8.459000033326447, - "_blocked_queueing": 0.362000020686537, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": 4.957, - "_workerRespondWithSettled": 32.943 - }, - "pageref": "page_3" - }, - { - "_initiator": { - "type": "parser", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "lineNumber": 13 - }, - "_priority": "High", - "_resourceType": "script", - "cache": {}, - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/spa.js", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "Origin", - "value": "https://deck-test.ngcloud.ru" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "Referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "DNT", - "value": "1" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "x-cache-status", - "value": "HIT" - }, - { - "name": "vary", - "value": "Accept-Encoding" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "etag", - "value": "\"974a449bd2f06c060436c774dc1a2204\"" - }, - { - "name": "access-control-allow-methods", - "value": "GET, HEAD, OPTIONS" - }, - { - "name": "x-amz-request-id", - "value": "tx000009a46a5debf4f7940-006a197907-4fc114-dc1" - }, - { - "name": "accept-ranges", - "value": "bytes" - }, - { - "name": "access-control-allow-origin", - "value": "*" - }, - { - "name": "content-length", - "value": "44928" - }, - { - "name": "date", - "value": "Fri, 29 May 2026 18:27:09 GMT" - }, - { - "name": "x-rgw-object-type", - "value": "Normal" - }, - { - "name": "content-type", - "value": "text/javascript" - }, - { - "name": "last-modified", - "value": "Fri, 15 May 2026 14:10:30 GMT" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "access-control-allow-headers", - "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range" - } - ], - "cookies": [], - "content": { - "size": 44928, - "mimeType": "text/javascript", - "text": "KGZ1bmN0aW9uKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApLnJlbExpc3Q7aWYoZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApKXJldHVybjtmb3IobGV0IGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXWApKW4oZSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgdCBvZiBlKWlmKHQudHlwZT09PWBjaGlsZExpc3RgKWZvcihsZXQgZSBvZiB0LmFkZGVkTm9kZXMpZS50YWdOYW1lPT09YExJTktgJiZlLnJlbD09PWBtb2R1bGVwcmVsb2FkYCYmbihlKX0pLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSk7ZnVuY3Rpb24gdChlKXtsZXQgdD17fTtyZXR1cm4gZS5pbnRlZ3JpdHkmJih0LmludGVncml0eT1lLmludGVncml0eSksZS5yZWZlcnJlclBvbGljeSYmKHQucmVmZXJyZXJQb2xpY3k9ZS5yZWZlcnJlclBvbGljeSksZS5jcm9zc09yaWdpbj09PWB1c2UtY3JlZGVudGlhbHNgP3QuY3JlZGVudGlhbHM9YGluY2x1ZGVgOmUuY3Jvc3NPcmlnaW49PT1gYW5vbnltb3VzYD90LmNyZWRlbnRpYWxzPWBvbWl0YDp0LmNyZWRlbnRpYWxzPWBzYW1lLW9yaWdpbmAsdH1mdW5jdGlvbiBuKGUpe2lmKGUuZXApcmV0dXJuO2UuZXA9ITA7bGV0IG49dChlKTtmZXRjaChlLmhyZWYsbil9fSkoKSxjb25zb2xlLmluZm8oYEBudWJlcy9yb290LWFwcEAwLjIuMjUgbG9hZGVkYCk7ZnVuY3Rpb24gZShlKXtyZXR1cm57YWxsOmV8fD1uZXcgTWFwLG9uOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5nZXQodCk7cj9yLnB1c2gobik6ZS5zZXQodCxbbl0pfSxvZmY6ZnVuY3Rpb24odCxuKXt2YXIgcj1lLmdldCh0KTtyJiYobj9yLnNwbGljZShyLmluZGV4T2Yobik+Pj4wLDEpOmUuc2V0KHQsW10pKX0sZW1pdDpmdW5jdGlvbih0LG4pe3ZhciByPWUuZ2V0KHQpO3ImJnIuc2xpY2UoKS5tYXAoZnVuY3Rpb24oZSl7ZShuKX0pLChyPWUuZ2V0KGAqYCkpJiZyLnNsaWNlKCkubWFwKGZ1bmN0aW9uKGUpe2UodCxuKX0pfX19dmFyIHQ9ZSgpLG49KCk9Pntjb25zb2xlLmxvZyhgU3RhcnRpbmcgdmVyc2lvbi11cGRhdGVyYCx0KTtsZXQgZT0hMTt0Lm9uKGB2ZXJzaW9uOmF2YWlsYWJsZWAsdD0+e2U9ITA7bGV0IG49dCYmYHBhY2thZ2VzYGluIHQmJnQucGFja2FnZXM/Lmxlbmd0aD9gIOKAlCB1cGRhdGVkIHBhY2thZ2VzOiAke3QucGFja2FnZXMuam9pbihgLCBgKX1gOmBgO2NvbnNvbGUuaW5mbyhgW3ZlcnNpb24tdXBkYXRlcl0gbmV3IHZlcnNpb24gYXZhaWxhYmxlLCB3aWxsIHJlbG9hZCBvbiBuZXh0IHJvdXRlIGNoYW5nZWAsdD8/YGApLG4mJmNvbnNvbGUuaW5mbyhgW3ZlcnNpb24tdXBkYXRlcl0ke259YCl9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtcm91dGluZy1ldmVudGAsdD0+e2lmKCFlKXJldHVybjtsZXR7b2xkVXJsOm4sbmV3VXJsOnJ9PXQuZGV0YWlsO24hPT1yJiZsb2NhdGlvbi5yZWxvYWQoKX0pfSxyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGdldCBzdGFydCgpe3JldHVybiBRZX0sZ2V0IGVuc3VyZUpRdWVyeVN1cHBvcnQoKXtyZXR1cm4gTWV9LGdldCBzZXRCb290c3RyYXBNYXhUaW1lKCl7cmV0dXJuIGhlfSxnZXQgc2V0TW91bnRNYXhUaW1lKCl7cmV0dXJuIGdlfSxnZXQgc2V0VW5tb3VudE1heFRpbWUoKXtyZXR1cm4gX2V9LGdldCBzZXRVbmxvYWRNYXhUaW1lKCl7cmV0dXJuIHZlfSxnZXQgcmVnaXN0ZXJBcHBsaWNhdGlvbigpe3JldHVybiBWZX0sZ2V0IHVucmVnaXN0ZXJBcHBsaWNhdGlvbigpe3JldHVybiBVZX0sZ2V0IGdldE1vdW50ZWRBcHBzKCl7cmV0dXJuIFJlfSxnZXQgZ2V0QXBwU3RhdHVzKCl7cmV0dXJuIHplfSxnZXQgdW5sb2FkQXBwbGljYXRpb24oKXtyZXR1cm4gV2V9LGdldCBjaGVja0FjdGl2aXR5RnVuY3Rpb25zKCl7cmV0dXJuIEhlfSxnZXQgZ2V0QXBwTmFtZXMoKXtyZXR1cm4gUn0sZ2V0IHBhdGhUb0FjdGl2ZVdoZW4oKXtyZXR1cm4gcWV9LGdldCBuYXZpZ2F0ZVRvVXJsKCl7cmV0dXJuIHhlfSxnZXQgcGF0Y2hIaXN0b3J5QXBpKCl7cmV0dXJuIGtlfSxnZXQgdHJpZ2dlckFwcENoYW5nZSgpe3JldHVybiBZZX0sZ2V0IGFkZEVycm9ySGFuZGxlcigpe3JldHVybiBjfSxnZXQgcmVtb3ZlRXJyb3JIYW5kbGVyKCl7cmV0dXJuIGx9LGdldCBtb3VudFJvb3RQYXJjZWwoKXtyZXR1cm4gZmV9LGdldCBOT1RfTE9BREVEKCl7cmV0dXJuIGZ9LGdldCBMT0FESU5HX1NPVVJDRV9DT0RFKCl7cmV0dXJuIHB9LGdldCBOT1RfQk9PVFNUUkFQUEVEKCl7cmV0dXJuIG19LGdldCBCT09UU1RSQVBQSU5HKCl7cmV0dXJuIGh9LGdldCBOT1RfTU9VTlRFRCgpe3JldHVybiBnfSxnZXQgTU9VTlRJTkcoKXtyZXR1cm4gX30sZ2V0IFVQREFUSU5HKCl7cmV0dXJuIGVlfSxnZXQgTE9BRF9FUlJPUigpe3JldHVybiB0ZX0sZ2V0IE1PVU5URUQoKXtyZXR1cm4gdn0sZ2V0IFVOTE9BRElORygpe3JldHVybiBifSxnZXQgVU5NT1VOVElORygpe3JldHVybiB5fSxnZXQgU0tJUF9CRUNBVVNFX0JST0tFTigpe3JldHVybiB4fX0pLGk9KHR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e30pLkN1c3RvbUV2ZW50LGE9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bmV3IGkoYGNhdGAse2RldGFpbDp7Zm9vOmBiYXJgfX0pO3JldHVybiBlLnR5cGU9PT1gY2F0YCYmZS5kZXRhaWwuZm9vPT09YGJhcmB9Y2F0Y2h7fXJldHVybiExfSgpP2k6dHlwZW9mIGRvY3VtZW50PGB1YCYmdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50PT1gZnVuY3Rpb25gP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoYEN1c3RvbUV2ZW50YCk7cmV0dXJuIHQ/bi5pbml0Q3VzdG9tRXZlbnQoZSx0LmJ1YmJsZXMsdC5jYW5jZWxhYmxlLHQuZGV0YWlsKTpuLmluaXRDdXN0b21FdmVudChlLCExLCExLHZvaWQgMCksbn06ZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO3JldHVybiBuLnR5cGU9ZSx0PyhuLmJ1YmJsZXM9ISF0LmJ1YmJsZXMsbi5jYW5jZWxhYmxlPSEhdC5jYW5jZWxhYmxlLG4uZGV0YWlsPXQuZGV0YWlsKToobi5idWJibGVzPSExLG4uY2FuY2VsYWJsZT0hMSxuLmRldGFpbD12b2lkIDApLG59LG89W107ZnVuY3Rpb24gcyhlLHQsbil7bGV0IHI9ZChlLHQsbik7by5sZW5ndGg/by5mb3JFYWNoKChlPT5lKHIpKSk6c2V0VGltZW91dCgoKCk9Pnt0aHJvdyByfSkpfWZ1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUhPWBmdW5jdGlvbmApdGhyb3cgRXJyb3IodSgyOCwhMSkpO28ucHVzaChlKX1mdW5jdGlvbiBsKGUpe2lmKHR5cGVvZiBlIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoMjksITEpKTtsZXQgdD0hMTtyZXR1cm4gbz1vLmZpbHRlcigobj0+e2xldCByPW49PT1lO3JldHVybiB0fHw9ciwhcn0pKSx0fWZ1bmN0aW9uIHUoZSx0LC4uLm4pe3JldHVybmBzaW5nbGUtc3BhIG1pbmlmaWVkIG1lc3NhZ2UgIyR7ZX06ICR7dD90K2AgYDpgYH1TZWUgaHR0cHM6Ly9zaW5nbGUtc3BhLmpzLm9yZy9lcnJvci8/Y29kZT0ke2V9JHtuLmxlbmd0aD9gJmFyZz0ke24uam9pbihgJmFyZz1gKX1gOmBgfWB9ZnVuY3Rpb24gZChlLHQsbil7bGV0IHI9YCR7dyh0KX0gJyR7Qyh0KX0nIGRpZWQgaW4gc3RhdHVzICR7dC5zdGF0dXN9OiBgLGk7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXt0cnl7ZS5tZXNzYWdlPXIrZS5tZXNzYWdlfWNhdGNoe31pPWV9ZWxzZXtjb25zb2xlLndhcm4odSgzMCwhMSx0LnN0YXR1cyxDKHQpKSk7dHJ5e2k9RXJyb3IocitKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7aT1lfX1yZXR1cm4gaS5hcHBPclBhcmNlbE5hbWU9Qyh0KSx0LnN0YXR1cz1uLGl9dmFyIGY9YE5PVF9MT0FERURgLHA9YExPQURJTkdfU09VUkNFX0NPREVgLG09YE5PVF9CT09UU1RSQVBQRURgLGg9YEJPT1RTVFJBUFBJTkdgLGc9YE5PVF9NT1VOVEVEYCxfPWBNT1VOVElOR2Asdj1gTU9VTlRFRGAsZWU9YFVQREFUSU5HYCx5PWBVTk1PVU5USU5HYCxiPWBVTkxPQURJTkdgLHRlPWBMT0FEX0VSUk9SYCx4PWBTS0lQX0JFQ0FVU0VfQlJPS0VOYDtmdW5jdGlvbiBTKGUpe3JldHVybiBlLnN0YXR1cz09PXZ9ZnVuY3Rpb24gbmUoZSl7dHJ5e3JldHVybiBlLmFjdGl2ZVdoZW4od2luZG93LmxvY2F0aW9uKX1jYXRjaCh0KXtyZXR1cm4gcyh0LGUseCksITF9fWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGUubmFtZX1mdW5jdGlvbiByZShlKXtyZXR1cm4hIWUudW5tb3VudFRoaXNQYXJjZWx9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gcmUoZSk/YHBhcmNlbGA6YGFwcGxpY2F0aW9uYH1mdW5jdGlvbiBUKCl7Zm9yKGxldCBlPWFyZ3VtZW50cy5sZW5ndGgtMTtlPjA7ZS0tKWZvcihsZXQgdCBpbiBhcmd1bWVudHNbZV0pdCE9PWBfX3Byb3RvX19gJiYoYXJndW1lbnRzW2UtMV1bdF09YXJndW1lbnRzW2VdW3RdKTtyZXR1cm4gYXJndW1lbnRzWzBdfWZ1bmN0aW9uIEUoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylpZih0KGVbbl0pKXJldHVybiBlW25dO3JldHVybiBudWxsfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIGUmJih0eXBlb2YgZT09YGZ1bmN0aW9uYHx8KHQ9ZSxBcnJheS5pc0FycmF5KHQpJiYhRSh0LChlPT50eXBlb2YgZSE9YGZ1bmN0aW9uYCkpKSk7dmFyIHR9ZnVuY3Rpb24gTyhlLHQpe2xldCBuPWVbdF18fFtdO249QXJyYXkuaXNBcnJheShuKT9uOltuXSxuLmxlbmd0aD09PTAmJihuPVsoKT0+UHJvbWlzZS5yZXNvbHZlKCldKTtsZXQgcj13KGUpLGk9QyhlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVkdWNlKCgobixhLG8pPT5uLnRoZW4oKCgpPT57bGV0IG49YShlKTtyZXR1cm4gaWUobik/bjpQcm9taXNlLnJlamVjdCh1KDE1LCExLHIsaSx0LG8pKX0pKSksUHJvbWlzZS5yZXNvbHZlKCkpfX1mdW5jdGlvbiBpZShlKXtyZXR1cm4gZSYmdHlwZW9mIGUudGhlbj09YGZ1bmN0aW9uYCYmdHlwZW9mIGUuY2F0Y2g9PWBmdW5jdGlvbmB9dmFyIGFlPVtdO2Z1bmN0aW9uIG9lKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT5lLnN0YXR1cz09PWBOT1RfQk9PVFNUUkFQUEVEYD8oZS5zdGF0dXM9aCxlLmJvb3RzdHJhcD9NKGUsYGJvb3RzdHJhcGApLnRoZW4obikuY2F0Y2goKG49PntpZih0KXRocm93IGQobixlLHgpO3JldHVybiBzKG4sZSx4KSxlfSkpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4obikpOmUpKTtmdW5jdGlvbiBuKCl7cmV0dXJuIGUuc3RhdHVzPWcsZX19ZnVuY3Rpb24gayhlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2lmKGUuc3RhdHVzIT09YE1PVU5URURgKXJldHVybiBlO2Uuc3RhdHVzPXk7bGV0IG49T2JqZWN0LmtleXMoZS5wYXJjZWxzKS5tYXAoKHQ9PmUucGFyY2Vsc1t0XS51bm1vdW50VGhpc1BhcmNlbCgpKSk7cmV0dXJuIFByb21pc2UuYWxsKG4pLnRoZW4ociwobj0+cigpLnRoZW4oKCgpPT57bGV0IHI9RXJyb3Iobi5tZXNzYWdlKTtpZih0KXRocm93IGQocixlLHgpO3MocixlLHgpfSkpKSkudGhlbigoKCk9PmUpKTtmdW5jdGlvbiByKCl7cmV0dXJuIE0oZSxgdW5tb3VudGApLnRoZW4oKCgpPT57ZS5zdGF0dXM9Z30pLChuPT57aWYodCl0aHJvdyBkKG4sZSx4KTtzKG4sZSx4KX0pKX19KSl9dmFyIHNlPSExLGNlPSExO2Z1bmN0aW9uIGxlKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT5lLnN0YXR1cz09PWBOT1RfTU9VTlRFRGA/KHNlfHw9KHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBhKGBzaW5nbGUtc3BhOmJlZm9yZS1maXJzdC1tb3VudGApKSwhMCksZS5zdGF0dXM9XyxNKGUsYG1vdW50YCkudGhlbigoKCk9PihlLnN0YXR1cz12LGNlfHw9KHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBhKGBzaW5nbGUtc3BhOmZpcnN0LW1vdW50YCkpLCEwKSxlKSkpLmNhdGNoKChuPT57cmV0dXJuIGUuc3RhdHVzPXYsayhlLCEwKS50aGVuKHIscik7ZnVuY3Rpb24gcigpe2lmKHQpdGhyb3cgZChuLGUseCk7cmV0dXJuIHMobixlLHgpLGV9fSkpKTplKSl9dmFyIHVlPTAsZGU9e3BhcmNlbHM6e319O2Z1bmN0aW9uIGZlKCl7cmV0dXJuIHBlLmFwcGx5KGRlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcGUoZSx0KXtsZXQgbj10aGlzO2lmKCFlfHx0eXBlb2YgZSE9YG9iamVjdGAmJnR5cGVvZiBlIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoMiwhMSkpO2lmKGUubmFtZSYmdHlwZW9mIGUubmFtZSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IodSgzLCExLHR5cGVvZiBlLm5hbWUpKTtsZXQgcj11ZSsrLGk9ZS5uYW1lfHxgcGFyY2VsLSR7cn1gO2lmKHR5cGVvZiB0IT1gb2JqZWN0YCl0aHJvdyBFcnJvcih1KDQsITEsaSx0eXBlb2YgdCkpO2lmKCF0LmRvbUVsZW1lbnQpdGhyb3cgRXJyb3IodSg1LCExLGkpKTtsZXQgYT10eXBlb2YgZT09YGZ1bmN0aW9uYCxvPWE/ZTooKT0+UHJvbWlzZS5yZXNvbHZlKGUpLHM9e2lkOnIscGFyY2Vsczp7fSxzdGF0dXM6YT9wOm0sY3VzdG9tUHJvcHM6dCxwYXJlbnROYW1lOkMobiksdW5tb3VudFRoaXNQYXJjZWw6KCk9PmgudGhlbigoKCk9PntpZihzLnN0YXR1cyE9PWBNT1VOVEVEYCl0aHJvdyBFcnJvcih1KDYsITEsaSxzLnN0YXR1cykpO3JldHVybiBrKHMsITApfSkpLnRoZW4oKGU9PihzLnBhcmVudE5hbWUmJmRlbGV0ZSBuLnBhcmNlbHNbcy5pZF0sZSkpKS50aGVuKChlPT4oZyhlKSxlKSkpLmNhdGNoKChlPT57dGhyb3cgcy5zdGF0dXM9eCxfKGUpLGV9KSl9LGM7bi5wYXJjZWxzW3JdPXM7bGV0IGw9bygpO2lmKCFsfHx0eXBlb2YgbC50aGVuIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoNywhMSkpO2w9bC50aGVuKChlPT57aWYoIWUpdGhyb3cgRXJyb3IodSg4LCExKSk7aWYoaT1lLm5hbWV8fGBwYXJjZWwtJHtyfWAsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsYGJvb3RzdHJhcGApJiYhRChlLmJvb3RzdHJhcCkpdGhyb3cgRXJyb3IodSg5LCExLGkpKTtpZighRChlLm1vdW50KSl0aHJvdyBFcnJvcih1KDEwLCExLGkpKTtpZighRChlLnVubW91bnQpKXRocm93IEVycm9yKHUoMTEsITEsaSkpO2lmKGUudXBkYXRlJiYhRChlLnVwZGF0ZSkpdGhyb3cgRXJyb3IodSgxMiwhMSxpKSk7bGV0IHQ9TyhlLGBib290c3RyYXBgKSxuPU8oZSxgbW91bnRgKSxhPU8oZSxgdW5tb3VudGApO3Muc3RhdHVzPW0scy5uYW1lPWkscy5ib290c3RyYXA9dCxzLm1vdW50PW4scy51bm1vdW50PWEscy50aW1lb3V0cz15ZShlLnRpbWVvdXRzKSxlLnVwZGF0ZSYmKHMudXBkYXRlPU8oZSxgdXBkYXRlYCksYy51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY3VzdG9tUHJvcHM9ZSxBKCh0PXMsUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PntpZih0LnN0YXR1cyE9PWBNT1VOVEVEYCl0aHJvdyBFcnJvcih1KDMyLCExLEModCkpKTtyZXR1cm4gdC5zdGF0dXM9YFVQREFUSU5HYCxNKHQsYHVwZGF0ZWApLnRoZW4oKCgpPT4odC5zdGF0dXM9YE1PVU5URURgLHQpKSkuY2F0Y2goKGU9Pnt0aHJvdyBkKGUsdCxgU0tJUF9CRUNBVVNFX0JST0tFTmApfSkpfSkpKSk7dmFyIHR9KX0pKTtsZXQgZj1sLnRoZW4oKCgpPT5vZShzLCEwKSkpLGg9Zi50aGVuKCgoKT0+bGUocywhMCkpKSxnLF8sdj1uZXcgUHJvbWlzZSgoKGUsdCk9PntnPWUsXz10fSkpO3JldHVybiBjPXttb3VudDooKT0+QShQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2lmKHMuc3RhdHVzIT09YE5PVF9NT1VOVEVEYCl0aHJvdyBFcnJvcih1KDEzLCExLGkscy5zdGF0dXMpKTtyZXR1cm4gbi5wYXJjZWxzW3JdPXMsbGUocyl9KSkpLHVubW91bnQ6KCk9PkEocy51bm1vdW50VGhpc1BhcmNlbCgpKSxnZXRTdGF0dXM6KCk9PnMuc3RhdHVzLGxvYWRQcm9taXNlOkEobCksYm9vdHN0cmFwUHJvbWlzZTpBKGYpLG1vdW50UHJvbWlzZTpBKGgpLHVubW91bnRQcm9taXNlOkEodil9LGN9ZnVuY3Rpb24gQShlKXtyZXR1cm4gZS50aGVuKCgoKT0+bnVsbCkpfWZ1bmN0aW9uIG1lKGUpe2xldCB0PUMoZSksbj10eXBlb2YgZS5jdXN0b21Qcm9wcz09YGZ1bmN0aW9uYD9lLmN1c3RvbVByb3BzKHQsd2luZG93LmxvY2F0aW9uKTplLmN1c3RvbVByb3BzOyh0eXBlb2YgbiE9YG9iamVjdGB8fCFufHxBcnJheS5pc0FycmF5KG4pKSYmKG49e30sY29uc29sZS53YXJuKHUoNDAsITEpLHQsbikpO2xldCBpPVQoe30sbix7bmFtZTp0LG1vdW50UGFyY2VsOnBlLmJpbmQoZSksc2luZ2xlU3BhOnJ9KTtyZXR1cm4gcmUoZSkmJihpLnVubW91bnRTZWxmPWUudW5tb3VudFRoaXNQYXJjZWwpLGl9dmFyIGo9e2Jvb3RzdHJhcDp7bWlsbGlzOjRlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9LG1vdW50OnttaWxsaXM6M2UzLGRpZU9uVGltZW91dDohMSx3YXJuaW5nTWlsbGlzOjFlM30sdW5tb3VudDp7bWlsbGlzOjNlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9LHVubG9hZDp7bWlsbGlzOjNlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9LHVwZGF0ZTp7bWlsbGlzOjNlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9fTtmdW5jdGlvbiBoZShlLHQsbil7aWYodHlwZW9mIGUhPWBudW1iZXJgfHxlPD0wKXRocm93IEVycm9yKHUoMTYsITEpKTtqLmJvb3RzdHJhcD17bWlsbGlzOmUsZGllT25UaW1lb3V0OnQsd2FybmluZ01pbGxpczpufHwxZTN9fWZ1bmN0aW9uIGdlKGUsdCxuKXtpZih0eXBlb2YgZSE9YG51bWJlcmB8fGU8PTApdGhyb3cgRXJyb3IodSgxNywhMSkpO2oubW91bnQ9e21pbGxpczplLGRpZU9uVGltZW91dDp0LHdhcm5pbmdNaWxsaXM6bnx8MWUzfX1mdW5jdGlvbiBfZShlLHQsbil7aWYodHlwZW9mIGUhPWBudW1iZXJgfHxlPD0wKXRocm93IEVycm9yKHUoMTgsITEpKTtqLnVubW91bnQ9e21pbGxpczplLGRpZU9uVGltZW91dDp0LHdhcm5pbmdNaWxsaXM6bnx8MWUzfX1mdW5jdGlvbiB2ZShlLHQsbil7aWYodHlwZW9mIGUhPWBudW1iZXJgfHxlPD0wKXRocm93IEVycm9yKHUoMTksITEpKTtqLnVubG9hZD17bWlsbGlzOmUsZGllT25UaW1lb3V0OnQsd2FybmluZ01pbGxpczpufHwxZTN9fWZ1bmN0aW9uIE0oZSx0KXtsZXQgbj1lLnRpbWVvdXRzW3RdLHI9bi53YXJuaW5nTWlsbGlzLGk9dyhlKTtyZXR1cm4gbmV3IFByb21pc2UoKChhLG8pPT57bGV0IHM9ITEsYz0hMTtlW3RdKG1lKGUpKS50aGVuKChlPT57cz0hMCxhKGUpfSkpLmNhdGNoKChlPT57cz0hMCxvKGUpfSkpLHNldFRpbWVvdXQoKCgpPT5kKDEpKSxyKSxzZXRUaW1lb3V0KCgoKT0+ZCghMCkpLG4ubWlsbGlzKTtsZXQgbD11KDMxLCExLHQsaSxDKGUpLG4ubWlsbGlzKTtmdW5jdGlvbiBkKGUpe2lmKCFzKXtpZighMD09PWUpYz0hMCxuLmRpZU9uVGltZW91dD9vKEVycm9yKGwpKTpjb25zb2xlLmVycm9yKGwpO2Vsc2UgaWYoIWMpe2xldCB0PWUsaT10KnI7Y29uc29sZS53YXJuKGwpLGkrcjxuLm1pbGxpcyYmc2V0VGltZW91dCgoKCk9PmQodCsxKSkscil9fX19KSl9ZnVuY3Rpb24geWUoZSl7bGV0IHQ9e307Zm9yKGxldCBuIGluIGopdFtuXT1UKHt9LGpbbl0sZSYmZVtuXXx8e30pO3JldHVybiB0fWZ1bmN0aW9uIGJlKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2lmKGUubG9hZFByb21pc2UpcmV0dXJuIGUubG9hZFByb21pc2U7aWYoZS5zdGF0dXMhPT1gTk9UX0xPQURFRGAmJmUuc3RhdHVzIT09YExPQURfRVJST1JgKXJldHVybiBlO2xldCB0LG47cmV0dXJuIGUuc3RhdHVzPXAsZS5sb2FkUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2xldCByPWUubG9hZEFwcChtZShlKSk7aWYoIWllKHIpKXRocm93IG49ITAsRXJyb3IodSgzMywhMSxDKGUpKSk7cmV0dXJuIHIudGhlbigobj0+e2xldCByO2UubG9hZEVycm9yVGltZT1udWxsLHQ9bix0eXBlb2YgdCE9YG9iamVjdGAmJihyPTM0KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxgYm9vdHN0cmFwYCkmJiFEKHQuYm9vdHN0cmFwKSYmKHI9MzUpLEQodC5tb3VudCl8fChyPTM2KSxEKHQudW5tb3VudCl8fChyPTM3KTtsZXQgaT13KHQpO2lmKHIpe2xldCBuO3RyeXtuPUpTT04uc3RyaW5naWZ5KHQpfWNhdGNoe31yZXR1cm4gY29uc29sZS5lcnJvcih1KHIsITEsaSxDKGUpLG4pLHQpLHModm9pZCAwLGUseCksZX1yZXR1cm4gdC5kZXZ0b29scyYmdC5kZXZ0b29scy5vdmVybGF5cyYmKGUuZGV2dG9vbHMub3ZlcmxheXM9VCh7fSxlLmRldnRvb2xzLm92ZXJsYXlzLHQuZGV2dG9vbHMub3ZlcmxheXMpKSxlLnN0YXR1cz1tLGUuYm9vdHN0cmFwPU8odCxgYm9vdHN0cmFwYCksZS5tb3VudD1PKHQsYG1vdW50YCksZS51bm1vdW50PU8odCxgdW5tb3VudGApLGUudW5sb2FkPU8odCxgdW5sb2FkYCksZS50aW1lb3V0cz15ZSh0LnRpbWVvdXRzKSxkZWxldGUgZS5sb2FkUHJvbWlzZSxlfSkpfSkpLmNhdGNoKCh0PT57bGV0IHI7cmV0dXJuIGRlbGV0ZSBlLmxvYWRQcm9taXNlLG4/cj14OihyPXRlLGUubG9hZEVycm9yVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSkscyh0LGUsciksZX0pKX0pKX12YXIgTj10eXBlb2Ygd2luZG93PGB1YCxQPXtoYXNoY2hhbmdlOltdLHBvcHN0YXRlOltdfSxGPVtgaGFzaGNoYW5nZWAsYHBvcHN0YXRlYF07ZnVuY3Rpb24geGUoZSl7bGV0IHQ7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXQ9ZTtlbHNlIGlmKHRoaXMmJnRoaXMuaHJlZil0PXRoaXMuaHJlZjtlbHNle2lmKCEoZSYmZS5jdXJyZW50VGFyZ2V0JiZlLmN1cnJlbnRUYXJnZXQuaHJlZiYmZS5wcmV2ZW50RGVmYXVsdCkpdGhyb3cgRXJyb3IodSgxNCwhMSkpO3Q9ZS5jdXJyZW50VGFyZ2V0LmhyZWYsZS5wcmV2ZW50RGVmYXVsdCgpfWxldCBuPUFlKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxyPUFlKHQpO3QuaW5kZXhPZihgI2ApPT09MD93aW5kb3cubG9jYXRpb24uaGFzaD1yLmhhc2g6bi5ob3N0IT09ci5ob3N0JiZyLmhvc3Q/d2luZG93LmxvY2F0aW9uLmhyZWY9dDpyLnBhdGhuYW1lPT09bi5wYXRobmFtZSYmci5zZWFyY2g9PT1uLnNlYXJjaD93aW5kb3cubG9jYXRpb24uaGFzaD1yLmhhc2g6d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsbnVsbCx0KX1mdW5jdGlvbiBTZShlKXtpZihlKXtsZXQgdD1lWzBdLnR5cGU7Ri5pbmRleE9mKHQpPj0wJiZQW3RdLmZvckVhY2goKHQ9Pnt0cnl7dC5hcHBseSh0aGlzLGUpfWNhdGNoKGUpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgZX0pKX19KSl9fXZhciBDZTtmdW5jdGlvbiB3ZSgpe1YoW10sYXJndW1lbnRzKX1mdW5jdGlvbiBUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2xldCBuPXdpbmRvdy5sb2NhdGlvbi5ocmVmLHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT13aW5kb3cubG9jYXRpb24uaHJlZjtyZXR1cm4gQ2UmJm49PT1pfHx3aW5kb3cuZGlzcGF0Y2hFdmVudChFZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSx0KSkscn19ZnVuY3Rpb24gRWUoZSx0KXtsZXQgbjt0cnl7bj1uZXcgUG9wU3RhdGVFdmVudChgcG9wc3RhdGVgLHtzdGF0ZTplfSl9Y2F0Y2h7bj1kb2N1bWVudC5jcmVhdGVFdmVudChgUG9wU3RhdGVFdmVudGApLG4uaW5pdFBvcFN0YXRlRXZlbnQoYHBvcHN0YXRlYCwhMSwhMSxlKX1yZXR1cm4gbi5zaW5nbGVTcGE9ITAsbi5zaW5nbGVTcGFUcmlnZ2VyPXQsbn12YXIgRGU9bnVsbCxPZT0hMTtmdW5jdGlvbiBrZShlKXtpZihPZSl0aHJvdyBFcnJvcih1KDQzLCExKSk7Q2U9IWV8fCFlLmhhc093blByb3BlcnR5KGB1cmxSZXJvdXRlT25seWApfHxlLnVybFJlcm91dGVPbmx5LE9lPSEwLERlPXdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgaGFzaGNoYW5nZWAsd2UpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBwb3BzdGF0ZWAsd2UpO2xldCB0PXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLG49d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXI7d2luZG93LmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSxuKXtpZighKHR5cGVvZiBuPT1gZnVuY3Rpb25gJiZGLmluZGV4T2YoZSk+PTApfHxFKFBbZV0sKGU9PmU9PT1uKSkpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO1BbZV0ucHVzaChuKX0sd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PWBmdW5jdGlvbmAmJkYuaW5kZXhPZihlKT49MCYmKFBbZV09UFtlXS5maWx0ZXIoKGU9PmUhPT10KSkpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSx3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGU9VGUod2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLGBwdXNoU3RhdGVgKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGU9VGUoRGUsYHJlcGxhY2VTdGF0ZWApfWZ1bmN0aW9uIEFlKGUpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyZXR1cm4gdC5ocmVmPWUsdH1OJiYod2luZG93LnNpbmdsZVNwYU5hdmlnYXRlP2NvbnNvbGUud2Fybih1KDQxLCExKSk6d2luZG93LnNpbmdsZVNwYU5hdmlnYXRlPXhlKTt2YXIgamU9ITE7ZnVuY3Rpb24gTWUoZT13aW5kb3cualF1ZXJ5KXtpZihlfHx3aW5kb3cuJCYmd2luZG93LiQuZm4mJndpbmRvdy4kLmZuLmpxdWVyeSYmKGU9d2luZG93LiQpLGUmJiFqZSl7bGV0IHQ9ZS5mbi5vbixuPWUuZm4ub2ZmO2UuZm4ub249ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTmUuY2FsbCh0aGlzLHQsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIsZSxuLGFyZ3VtZW50cyl9LGUuZm4ub2ZmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE5lLmNhbGwodGhpcyxuLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLGUsdCxhcmd1bWVudHMpfSxqZT0hMH19ZnVuY3Rpb24gTmUoZSx0LG4scixpKXtyZXR1cm4gdHlwZW9mIG49PWBzdHJpbmdgPyhuLnNwbGl0KC9ccysvKS5mb3JFYWNoKChlPT57Ri5pbmRleE9mKGUpPj0wJiYodChlLHIpLG49bi5yZXBsYWNlKGUsYGApKX0pKSxuLnRyaW0oKT09PWBgP3RoaXM6ZS5hcHBseSh0aGlzLGkpKTplLmFwcGx5KHRoaXMsaSl9dmFyIEk9e307ZnVuY3Rpb24gUGUoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57bGV0IHQ9SVtDKGUpXTtpZighdClyZXR1cm4gZTtpZihlLnN0YXR1cz09PWBOT1RfTE9BREVEYClyZXR1cm4gRmUoZSx0KSxlO2lmKGUuc3RhdHVzPT09YFVOTE9BRElOR2ApcmV0dXJuIHQucHJvbWlzZS50aGVuKCgoKT0+ZSkpO2lmKGUuc3RhdHVzIT09YE5PVF9NT1VOVEVEYCYmZS5zdGF0dXMhPT1gTE9BRF9FUlJPUmApcmV0dXJuIGU7bGV0IG49ZS5zdGF0dXM9PT1gTE9BRF9FUlJPUmA/UHJvbWlzZS5yZXNvbHZlKCk6TShlLGB1bmxvYWRgKTtyZXR1cm4gZS5zdGF0dXM9YixuLnRoZW4oKCgpPT4oRmUoZSx0KSxlKSkpLmNhdGNoKChuPT4oZnVuY3Rpb24oZSx0LG4pe2RlbGV0ZSBJW0MoZSldLGRlbGV0ZSBlLmJvb3RzdHJhcCxkZWxldGUgZS5tb3VudCxkZWxldGUgZS51bm1vdW50LGRlbGV0ZSBlLnVubG9hZCxzKG4sZSx4KSx0LnJlamVjdChuKX0oZSx0LG4pLGUpKSl9KSl9ZnVuY3Rpb24gRmUoZSx0KXtkZWxldGUgSVtDKGUpXSxkZWxldGUgZS5ib290c3RyYXAsZGVsZXRlIGUubW91bnQsZGVsZXRlIGUudW5tb3VudCxkZWxldGUgZS51bmxvYWQsZS5zdGF0dXM9Zix0LnJlc29sdmUoKX1mdW5jdGlvbiBJZShlLHQsbixyKXtJW0MoZSldPXthcHA6ZSxyZXNvbHZlOm4scmVqZWN0OnJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJW0MoZSldLGBwcm9taXNlYCx7Z2V0OnR9KX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gSVtlXX12YXIgTD1bXTtmdW5jdGlvbiBSZSgpe3JldHVybiBMLmZpbHRlcihTKS5tYXAoQyl9ZnVuY3Rpb24gUigpe3JldHVybiBMLm1hcChDKX1mdW5jdGlvbiB6ZShlKXtsZXQgdD1FKEwsKHQ9PkModCk9PT1lKSk7cmV0dXJuIHQ/dC5zdGF0dXM6bnVsbH12YXIgQmU9ITE7ZnVuY3Rpb24gVmUoZSx0LG4scil7bGV0IGk9ZnVuY3Rpb24oZSx0LG4scil7bGV0IGk9e25hbWU6bnVsbCxsb2FkQXBwOm51bGwsYWN0aXZlV2hlbjpudWxsLGN1c3RvbVByb3BzOm51bGx9O3JldHVybiB0eXBlb2YgZT09YG9iamVjdGA/KGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSl8fGU9PT1udWxsKXRocm93IEVycm9yKHUoMzksITEpKTtsZXQgdD1bYG5hbWVgLGBhcHBgLGBhY3RpdmVXaGVuYCxgY3VzdG9tUHJvcHNgXSxuPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKGUsbik9PnQuaW5kZXhPZihuKT49MD9lOmUuY29uY2F0KG4pKSxbXSk7aWYobi5sZW5ndGghPT0wKXRocm93IEVycm9yKHUoMzgsITEsdC5qb2luKGAsIGApLG4uam9pbihgLCBgKSkpO2lmKHR5cGVvZiBlLm5hbWUhPWBzdHJpbmdgfHxlLm5hbWUubGVuZ3RoPT09MHx8dHlwZW9mIGUuYXBwIT1gb2JqZWN0YCYmdHlwZW9mIGUuYXBwIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoMjAsITEpKTtsZXQgcj1lPT50eXBlb2YgZT09YHN0cmluZ2B8fHR5cGVvZiBlPT1gZnVuY3Rpb25gO2lmKCEocihlLmFjdGl2ZVdoZW4pfHxBcnJheS5pc0FycmF5KGUuYWN0aXZlV2hlbikmJmUuYWN0aXZlV2hlbi5ldmVyeShyKSkpdGhyb3cgRXJyb3IodSgyNCwhMSkpO2lmKCFLZShlLmN1c3RvbVByb3BzKSl0aHJvdyBFcnJvcih1KDIyLCExKSl9KGUpLGkubmFtZT1lLm5hbWUsaS5sb2FkQXBwPWUuYXBwLGkuYWN0aXZlV2hlbj1lLmFjdGl2ZVdoZW4saS5jdXN0b21Qcm9wcz1lLmN1c3RvbVByb3BzKTooZnVuY3Rpb24oZSx0LG4scil7aWYodHlwZW9mIGUhPWBzdHJpbmdgfHxlLmxlbmd0aD09PTApdGhyb3cgRXJyb3IodSgyMCwhMSkpO2lmKCF0KXRocm93IEVycm9yKHUoMjMsITEpKTtpZih0eXBlb2YgbiE9YGZ1bmN0aW9uYCl0aHJvdyBFcnJvcih1KDI0LCExKSk7aWYoIUtlKHIpKXRocm93IEVycm9yKHUoMjIsITEpKX0oZSx0LG4sciksaS5uYW1lPWUsaS5sb2FkQXBwPXQsaS5hY3RpdmVXaGVuPW4saS5jdXN0b21Qcm9wcz1yKSxpLmxvYWRBcHA9dHlwZW9mKGE9aS5sb2FkQXBwKT09YGZ1bmN0aW9uYD9hOigpPT5Qcm9taXNlLnJlc29sdmUoYSksaS5jdXN0b21Qcm9wcz1mdW5jdGlvbihlKXtyZXR1cm4gZXx8e319KGkuY3VzdG9tUHJvcHMpLGkuYWN0aXZlV2hlbj1mdW5jdGlvbihlKXtsZXQgdD1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3JldHVybiB0PXQubWFwKChlPT50eXBlb2YgZT09YGZ1bmN0aW9uYD9lOnFlKGUpKSksZT0+dC5zb21lKCh0PT50KGUpKSl9KGkuYWN0aXZlV2hlbiksaTt2YXIgYX0oZSx0LG4scik7aWYoJGUoKXx8QmV8fChCZT0hMCxzZXRUaW1lb3V0KCgoKT0+eyRlKCl8fGNvbnNvbGUud2Fybih1KDEsITEpKX0pLDVlMykpLFIoKS5pbmRleE9mKGkubmFtZSkhPT0tMSl0aHJvdyBFcnJvcih1KDIxLCExLGkubmFtZSkpO0wucHVzaChUKHtsb2FkRXJyb3JUaW1lOm51bGwsc3RhdHVzOmYscGFyY2Vsczp7fSxkZXZ0b29sczp7b3ZlcmxheXM6e29wdGlvbnM6e30sc2VsZWN0b3JzOltdfX19LGkpKSxOJiYoTWUoKSxWKCkpfWZ1bmN0aW9uIEhlKGU9d2luZG93LmxvY2F0aW9uKXtyZXR1cm4gTC5maWx0ZXIoKHQ9PnQuYWN0aXZlV2hlbihlKSkpLm1hcChDKX1mdW5jdGlvbiBVZShlKXtpZihMLmZpbHRlcigodD0+Qyh0KT09PWUpKS5sZW5ndGg9PT0wKXRocm93IEVycm9yKHUoMjUsITEsZSkpO3JldHVybihOP1dlKGUse3dhaXRGb3JVbm1vdW50OiExfSk6UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCgpPT57bGV0IHQ9TC5tYXAoQykuaW5kZXhPZihlKTtMLnNwbGljZSh0LDEpfSkpfWZ1bmN0aW9uIFdlKGUsdD17d2FpdEZvclVubW91bnQ6ITF9KXtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IodSgyNiwhMSkpO2xldCBuPUUoTCwodD0+Qyh0KT09PWUpKTtpZighbil0aHJvdyBFcnJvcih1KDI3LCExLGUpKTtsZXQgcj1MZShDKG4pKTtpZih0JiZ0LndhaXRGb3JVbm1vdW50KXtpZihyKXJldHVybiByLnByb21pc2U7e2xldCBlPW5ldyBQcm9taXNlKCgodCxyKT0+e0llKG4sKCgpPT5lKSx0LHIpfSkpO3JldHVybiBlfX17bGV0IGU7cmV0dXJuIHI/KGU9ci5wcm9taXNlLEdlKG4sci5yZXNvbHZlLHIucmVqZWN0KSk6ZT1uZXcgUHJvbWlzZSgoKHQscik9PntJZShuLCgoKT0+ZSksdCxyKSxHZShuLHQscil9KSksZX19ZnVuY3Rpb24gR2UoZSx0LG4pe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57aWYoRShIZSgpLCh0PT50PT09QyhlKSkpKXJldHVybiBZZSgpfSkpLnRoZW4oKCgpPT5rKGUpLnRoZW4oUGUpLnRoZW4oKCgpPT57dCgpLHNldFRpbWVvdXQoKCgpPT57VigpfSkpfSkpKSkuY2F0Y2gobil9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIWV8fHR5cGVvZiBlPT1gZnVuY3Rpb25gfHx0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIUFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcWUoZSx0KXtsZXQgbj1mdW5jdGlvbihlLHQpe2xldCBuPTAscj0hMSxpPWBeYDtlWzBdIT09YC9gJiYoZT1gL2ArZSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPWVbdF07KCFyJiZuPT09YDpgfHxyJiZuPT09YC9gKSYmYSh0KX1yZXR1cm4gYShlLmxlbmd0aCksbmV3IFJlZ0V4cChpLGBpYCk7ZnVuY3Rpb24gYShhKXtsZXQgbz1lLnNsaWNlKG4sYSkucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csYFxcJCZgKTtpZihpKz1yP2BbXi9dKy8/YDpvLGE9PT1lLmxlbmd0aClpZihyKXQmJihpKz1gJGApO2Vsc2V7bGV0IGU9dD9gYDpgLipgO2k9aS5jaGFyQXQoaS5sZW5ndGgtMSk9PT1gL2A/YCR7aX0ke2V9JGA6YCR7aX0oLyR7ZX0pPygjLiopPyRgfXI9IXIsbj1hfX0oZSx0KTtyZXR1cm4gZT0+e2xldCB0PWUub3JpZ2luO3R8fD1gJHtlLnByb3RvY29sfS8vJHtlLmhvc3R9YDtsZXQgcj1lLmhyZWYucmVwbGFjZSh0LGBgKS5yZXBsYWNlKGUuc2VhcmNoLGBgKS5zcGxpdChgP2ApWzBdO3JldHVybiBuLnRlc3Qocil9fXZhciB6PSExLEI9W10sSmU9TiYmd2luZG93LmxvY2F0aW9uLmhyZWY7ZnVuY3Rpb24gWWUoKXtyZXR1cm4gVigpfWZ1bmN0aW9uIFYoZT1bXSx0LG49ITEpe2lmKHopcmV0dXJuIG5ldyBQcm9taXNlKCgoZSxuKT0+e0IucHVzaCh7cmVzb2x2ZTplLHJlamVjdDpuLGV2ZW50QXJndW1lbnRzOnR9KX0pKTtsZXR7YXBwc1RvVW5sb2FkOnIsYXBwc1RvVW5tb3VudDppLGFwcHNUb0xvYWQ6byxhcHBzVG9Nb3VudDpzfT1mdW5jdGlvbigpe2xldCBlPVtdLHQ9W10sbj1bXSxyPVtdLGk9bmV3IERhdGUoKS5nZXRUaW1lKCk7cmV0dXJuIEwuZm9yRWFjaCgoYT0+e2xldCBvPWEuc3RhdHVzIT09YFNLSVBfQkVDQVVTRV9CUk9LRU5gJiZuZShhKTtzd2l0Y2goYS5zdGF0dXMpe2Nhc2UgdGU6byYmaS1hLmxvYWRFcnJvclRpbWU+PTIwMCYmbi5wdXNoKGEpO2JyZWFrO2Nhc2UgZjpjYXNlIHA6byYmbi5wdXNoKGEpO2JyZWFrO2Nhc2UgbTpjYXNlIGc6IW8mJkxlKEMoYSkpP2UucHVzaChhKTpvJiZyLnB1c2goYSk7YnJlYWs7Y2FzZSB2Om98fHQucHVzaChhKX19KSkse2FwcHNUb1VubG9hZDplLGFwcHNUb1VubW91bnQ6dCxhcHBzVG9Mb2FkOm4sYXBwc1RvTW91bnQ6cn19KCksYyxsPVtdLGQ9SmUsaD1KZT13aW5kb3cubG9jYXRpb24uaHJlZjtyZXR1cm4gJGUoKT8oej0hMCxjPXIuY29uY2F0KG8saSxzKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+KFMoYy5sZW5ndGg9PT0wP2BiZWZvcmUtbm8tYXBwLWNoYW5nZWA6YGJlZm9yZS1hcHAtY2hhbmdlYCxiKCEwKSksUyhgYmVmb3JlLXJvdXRpbmctZXZlbnRgLGIoITAse2NhbmNlbE5hdmlnYXRpb246X30pKSxQcm9taXNlLmFsbChsKS50aGVuKChuPT57aWYobi5zb21lKChlPT5lKSkpcmV0dXJuIERlLmNhbGwod2luZG93Lmhpc3RvcnksaGlzdG9yeS5zdGF0ZSxgYCxkLnN1YnN0cmluZyhsb2NhdGlvbi5vcmlnaW4ubGVuZ3RoKSksSmU9bG9jYXRpb24uaHJlZix6PSExLFYoZSx0LCEwKTtsZXQgYT1yLm1hcChQZSksYz1pLm1hcChrKS5tYXAoKGU9PmUudGhlbihQZSkpKS5jb25jYXQoYSksbD1Qcm9taXNlLmFsbChjKTtsLnRoZW4oKCgpPT57UyhgYmVmb3JlLW1vdW50LXJvdXRpbmctZXZlbnRgLGIoITApKX0pLChlPT57dGhyb3cgZX0pKTtsZXQgdT1vLm1hcCgoZT0+YmUoZSkudGhlbigoZT0+WGUoZSxsKSkpKSksZj1zLmZpbHRlcigoZT0+by5pbmRleE9mKGUpPDApKS5tYXAoKGU9PlhlKGUsbCkpKTtyZXR1cm4gbC5jYXRjaCgoZT0+e3Rocm93IHkoKSxlfSkpLnRoZW4oKCgpPT4oeSgpLFByb21pc2UuYWxsKHUuY29uY2F0KGYpKS5jYXRjaCgodD0+e3Rocm93IGUuZm9yRWFjaCgoZT0+ZS5yZWplY3QodCkpKSx0fSkpLnRoZW4oZWUpLnRoZW4oKCgpPT57fSksKGU9Pnt0aHJvdyBlfSkpKSkpfSkpKSkpKTooYz1vLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57bGV0IGU9by5tYXAoYmUpO3JldHVybiBQcm9taXNlLmFsbChlKS50aGVuKHkpLnRoZW4oKCgpPT5bXSkpLmNhdGNoKChlPT57dGhyb3cgeSgpLGV9KSkuZmluYWxseSgoKCk9Pnt9KSl9KSkpO2Z1bmN0aW9uIF8oZT0hMCl7bGV0IHQ9dHlwZW9mIGU/LnRoZW49PWBmdW5jdGlvbmA/ZTpQcm9taXNlLnJlc29sdmUoZSk7bC5wdXNoKHQuY2F0Y2goKGU9Pihjb25zb2xlLndhcm4oRXJyb3IodSg0MiwhMSkpKSxjb25zb2xlLndhcm4oZSksITEpKSkpfWZ1bmN0aW9uIGVlKCl7bGV0IHQ9UmUoKTtlLmZvckVhY2goKGU9PmUucmVzb2x2ZSh0KSkpO3RyeXtTKGMubGVuZ3RoPT09MD9gbm8tYXBwLWNoYW5nZWA6YGFwcC1jaGFuZ2VgLGIoKSksUyhgcm91dGluZy1ldmVudGAsYigpKX1jYXRjaChlKXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IGV9KSl9aWYoej0hMSxCLmxlbmd0aD4wKXtsZXQgZT1CO0I9W10sVihlKX1yZXR1cm4gdH1mdW5jdGlvbiB5KCl7bnx8KGUuZm9yRWFjaCgoZT0+e1NlKGUuZXZlbnRBcmd1bWVudHMpfSkpLFNlKHQpKX1mdW5jdGlvbiBiKGU9ITEsbil7bGV0IGE9e30sbD17W3ZdOltdLFtnXTpbXSxbZl06W10sW3hdOltdfTtlPyhvLmNvbmNhdChzKS5mb3JFYWNoKCgoZSx0KT0+e3AoZSx2KX0pKSxyLmZvckVhY2goKGU9PntwKGUsZil9KSksaS5mb3JFYWNoKChlPT57cChlLGcpfSkpKTpjLmZvckVhY2goKGU9PntwKGUpfSkpO2xldCB1PXtkZXRhaWw6e25ld0FwcFN0YXR1c2VzOmEsYXBwc0J5TmV3U3RhdHVzOmwsdG90YWxBcHBDaGFuZ2VzOmMubGVuZ3RoLG9yaWdpbmFsRXZlbnQ6dD8uWzBdLG9sZFVybDpkLG5ld1VybDpofX07cmV0dXJuIG4mJlQodS5kZXRhaWwsbiksdTtmdW5jdGlvbiBwKGUsdCl7bGV0IG49QyhlKTt0fHw9emUobiksYVtuXT10LChsW3RdPWxbdF18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBTKGUsdCl7bnx8d2luZG93LmRpc3BhdGNoRXZlbnQobmV3IGEoYHNpbmdsZS1zcGE6JHtlfWAsdCkpfX1mdW5jdGlvbiBYZShlLHQpe3JldHVybiBuZShlKT9vZShlKS50aGVuKChlPT50LnRoZW4oKCgpPT5uZShlKT9sZShlKTplKSkpKTp0LnRoZW4oKCgpPT5lKSl9dmFyIFplPSExO2Z1bmN0aW9uIFFlKGUpe1plPSEwLE4mJihrZShlKSxWKCkpfWZ1bmN0aW9uICRlKCl7cmV0dXJuIFplfXZhciBldD17Z2V0UmF3QXBwRGF0YTpmdW5jdGlvbigpe3JldHVyblsuLi5MXX0scmVyb3V0ZTpWLE5PVF9MT0FERUQ6Zix0b0xvYWRQcm9taXNlOmJlLHRvQm9vdHN0cmFwUHJvbWlzZTpvZSx1bnJlZ2lzdGVyQXBwbGljYXRpb246VWUsZ2V0UHJvZmlsZXJEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIGFlfX07TiYmd2luZG93Ll9fU0lOR0xFX1NQQV9ERVZUT09MU19fJiYod2luZG93Ll9fU0lOR0xFX1NQQV9ERVZUT09MU19fLmV4cG9zZWRNZXRob2RzPWV0KTt2YXIgdHQ9e2RldjpgaHR0cHM6Ly9say1hcGktZ2F0ZXdheS1kZXYubmdjbG91ZC5ydS9hcGkvdjEvYCx0ZXN0OmBodHRwczovL2xrLWFwaS1nYXRld2F5LXRlc3QubmdjbG91ZC5ydS9hcGkvdjEvYCxwcm9kOmBodHRwczovL2xrLWFwaS1nYXRld2F5Lm5nY2xvdWQucnUvYXBpL3YxL2B9LG50PWBtb2R1bGVwcmVsb2FkYCxydD1mdW5jdGlvbihlKXtyZXR1cm5gL2ArZX0saXQ9e30sYXQ9ZnVuY3Rpb24oZSx0LG4pe2xldCByPVByb21pc2UucmVzb2x2ZSgpO2lmKHQmJnQubGVuZ3RoPjApe2xldCBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGBsaW5rYCksaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW3Byb3BlcnR5PWNzcC1ub25jZV1gKSxhPWk/Lm5vbmNlfHxpPy5nZXRBdHRyaWJ1dGUoYG5vbmNlYCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZS5tYXAoZT0+UHJvbWlzZS5yZXNvbHZlKGUpLnRoZW4oZT0+KHtzdGF0dXM6YGZ1bGZpbGxlZGAsdmFsdWU6ZX0pLGU9Pih7c3RhdHVzOmByZWplY3RlZGAscmVhc29uOmV9KSkpKX1yPW8odC5tYXAodD0+e2lmKHQ9cnQodCxuKSx0IGluIGl0KXJldHVybjtpdFt0XT0hMDtsZXQgcj10LmVuZHNXaXRoKGAuY3NzYCksaT1yP2BbcmVsPSJzdHlsZXNoZWV0Il1gOmBgO2lmKG4pZm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2xldCBpPWVbbl07aWYoaS5ocmVmPT09dCYmKCFyfHxpLnJlbD09PWBzdHlsZXNoZWV0YCkpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke3R9Il0ke2l9YCkpcmV0dXJuO2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKTtpZihvLnJlbD1yP2BzdHlsZXNoZWV0YDpudCxyfHwoby5hcz1gc2NyaXB0YCksby5jcm9zc09yaWdpbj1gYCxvLmhyZWY9dCxhJiZvLnNldEF0dHJpYnV0ZShgbm9uY2VgLGEpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobykscilyZXR1cm4gbmV3IFByb21pc2UoKGUsbik9PntvLmFkZEV2ZW50TGlzdGVuZXIoYGxvYWRgLGUpLG8uYWRkRXZlbnRMaXN0ZW5lcihgZXJyb3JgLCgpPT5uKEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7dH1gKSkpfSl9KSl9ZnVuY3Rpb24gaShlKXtsZXQgdD1uZXcgRXZlbnQoYHZpdGU6cHJlbG9hZEVycm9yYCx7Y2FuY2VsYWJsZTohMH0pO2lmKHQucGF5bG9hZD1lLHdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpLCF0LmRlZmF1bHRQcmV2ZW50ZWQpdGhyb3cgZX1yZXR1cm4gci50aGVuKHQ9Pntmb3IobGV0IGUgb2YgdHx8W10pZS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpKGUucmVhc29uKTtyZXR1cm4gZSgpLmNhdGNoKGkpfSl9O3R5cGVvZiBsb2NhbFN0b3JhZ2U8YHVgJiZsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgaW1wb3J0bWFwLWRlYnVnYCk9PT1gMWAmJmNvbnNvbGUuaW5mbyhgW2ltcG9ydG1hcC11cGRhdGVyXSBtb2R1bGUgbG9hZGVkYCk7dmFyIG90PSgpPT57dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgaW1wb3J0bWFwLWRlYnVnYCk9PT1gMWB9Y2F0Y2h7cmV0dXJuITF9fSxIPSguLi5lKT0+e290KCkmJmNvbnNvbGUuaW5mbyhgW2ltcG9ydG1hcC11cGRhdGVyXWAsLi4uZSl9LFU9e30sc3Q9ZT0+VVtlXT8/ZSxXPW5ldyBTZXQsRz1gYCxjdD1gYCxsdD1lPT4vXmh0dHBzPzpcL1wvL2kudGVzdChlKT9lOmAke2N0LnJlcGxhY2UoL1wvKyQvLGBgKX0ke2Uuc3RhcnRzV2l0aChgL2ApP2U6YC8ke2V9YH1gLHV0PWFzeW5jKCk9PntpZighRyl0aHJvdyBFcnJvcihgW2ltcG9ydG1hcC11cGRhdGVyXSBnYXRld2F5QmFzZSBpcyBub3Qgc2V0IChBVVRIX0hPU1RTW2Vudmlyb25tZW50XSByZXR1cm5lZCBlbXB0eSB2YWx1ZSlgKTtsZXQgZT1gJHtHfSR7Ry5lbmRzV2l0aChgL2ApP2BgOmAvYH1pYW0vbWZlL2ltcG9ydG1hcGAsdD1hd2FpdCBmZXRjaChlLHtjYWNoZTpgbm8tc3RvcmVgfSk7aWYoIXQub2spdGhyb3cgRXJyb3IoYFtpbXBvcnRtYXAtdXBkYXRlcl0gR0VUICR7ZX0g4oaSICR7dC5zdGF0dXN9YCk7cmV0dXJuIHQuanNvbigpfSxkdD0oKT0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYHNjcmlwdFt0eXBlPSJpbXBvcnRtYXAiXWApLHQ9e307Zm9yKGxldCBuIG9mIGUpdHJ5e2xldCBlPUpTT04ucGFyc2Uobi50ZXh0Q29udGVudD8/YGApO2ZvcihsZXRbbixyXW9mIE9iamVjdC5lbnRyaWVzKGUuaW1wb3J0cz8/e30pKW4hPT1gQG51YmVzL3Jvb3QtYXBwYCYmKHRbbl09cil9Y2F0Y2h7fXJldHVybiB0fSxmdD0oKT0+e25hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmNvbnRyb2xsZXI/LnBvc3RNZXNzYWdlKHt0eXBlOmByZWJ1aWxkLXJ1bGVzYH0pfSxwdD1hc3luYyBlPT57SChgSU1QT1JUTUFQX1VQREFURUQgcmVjZWl2ZWRgLGU/LmRhdGEpO3RyeXtsZXQgZT1hd2FpdCB1dCgpLG49ZS5pbXBvcnRzPz97fTtIKGBmZXRjaGVkIG5ldyBpbXBvcnRtYXA6YCxuKSxIKGBjdXJyZW50IGltcG9ydG1hcDpgLFUpO2xldCByPVtdO2ZvcihsZXRbZSx0XW9mIE9iamVjdC5lbnRyaWVzKG4pKXtsZXQgbj1sdCh0KTtVW2VdIT09biYmci5wdXNoKHtuYW1lOmUsb2xkVXJsOlVbZV0sbmV3VXJsOm59KX1pZihyLmxlbmd0aD09PTApe2NvbnNvbGUuaW5mbyhgW2ltcG9ydG1hcC11cGRhdGVyXSBJTVBPUlRNQVBfVVBEQVRFRCByZWNlaXZlZCDigJQgbm8gVVJMIGNoYW5nZXMsIHNraXBwaW5nIHVwZGF0ZWApO3JldHVybn1jb25zb2xlLmluZm8oYFtpbXBvcnRtYXAtdXBkYXRlcl0gZGV0ZWN0ZWQgdmVyc2lvbiBjaGFuZ2VzOmApO2ZvcihsZXR7bmFtZTplLG9sZFVybDp0LG5ld1VybDpufW9mIHIpY29uc29sZS5pbmZvKGAgIPCfk6YgJHtlfWApLGNvbnNvbGUuaW5mbyhgICAgICBPTEQ6ICR7dD8/YChub3QgdHJhY2tlZClgfWApLGNvbnNvbGUuaW5mbyhgICAgICBORVc6ICR7bn1gKTtsZXQgaT1uZXcgU2V0KFIoKSksYT0hMTtmb3IobGV0e25hbWU6ZSxuZXdVcmw6dH1vZiByKVVbZV09dCxpLmhhcyhlKT8oVy5hZGQoZSksSChg4pyFIFNQQS1hcHAgIiR7ZX0iIHNjaGVkdWxlZCBmb3IgdW5sb2FkIChob3Qtc3dhcCBvbiBuZXh0IHJvdXRlIGNoYW5nZSlgKSk6KGE9ITAsSChg8J+UhCAiJHtlfSIgdXBkYXRlZCDihpIgcmVsb2FkIHNjaGVkdWxlZCBvbiBuZXh0IG5hdmlnYXRpb25gKSk7dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGBtZmUtaW1wb3J0bWFwLWNhY2hlLTAuMi4yNWAsSlNPTi5zdHJpbmdpZnkoZSkpLEgoYGxvY2FsU3RvcmFnZSBpbXBvcnRtYXAgY2FjaGUgdXBkYXRlZGApfWNhdGNoe31pZihhKXtsZXQgZT1yLmZpbHRlcigoe25hbWU6ZX0pPT4hbmV3IFNldChSKCkpLmhhcyhlKSkubWFwKCh7bmFtZTplfSk9PmUpO3QuZW1pdChgdmVyc2lvbjphdmFpbGFibGVgLHtzb3VyY2U6YHdzYCxwYWNrYWdlczplfSl9ZnQoKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGBbaW1wb3J0bWFwLXVwZGF0ZXJdIGZhaWxlZCB0byBhcHBseSBpbXBvcnRtYXAgdXBkYXRlOmAsZSl9fSxtdD0oKT0+e2lmKFcuc2l6ZSE9PTApZm9yKGxldCBlIG9mWy4uLlddKVcuZGVsZXRlKGUpLEgoYHVubG9hZGluZyBvdXRkYXRlZCBTUEEtYXBwIGJlZm9yZSByb3V0ZSBjaGFuZ2U6YCxlKSxXZShlKS5jYXRjaCh0PT57Y29uc29sZS53YXJuKGBbaW1wb3J0bWFwLXVwZGF0ZXJdIHVubG9hZEFwcGxpY2F0aW9uIGZhaWxlZCBmb3JgLGUsdCl9KX0saHQ9YXN5bmMoKT0+e0goYHN0YXJ0SW1wb3J0bWFwVXBkYXRlciBjYWxsZWRgKTt0cnl7bGV0e2V2ZW50QnVzOmUsZ2V0VXJsczp0fT1hd2FpdCBhdCgoKT0+aW1wb3J0KGBAbnViZXMvY29tbW9uLXV0aWxzYCksW10pO0goYGNvbW1vbi11dGlscyBsb2FkZWQ7IGVudiA9YCx0LmVudmlyb25tZW50KSxHPXR0W3QuZW52aXJvbm1lbnRdPz9gYCxHfHxjb25zb2xlLndhcm4oYFtpbXBvcnRtYXAtdXBkYXRlcl0gR0FURVdBWV9IT1NUU1tlbnZpcm9ubWVudF0gaXMgZW1wdHkg4oCUIGltcG9ydG1hcCBmZXRjaCB3aWxsIGJlIHNraXBwZWRgKTtsZXQgbj1gL3MzLW1mZWAucmVwbGFjZSgvXC8rJC8sYGApO2N0PW4uc3RhcnRzV2l0aChgL2ApP2Ake3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHtufWA6bixIKGBnYXRld2F5QmFzZSA9YCxHKSxIKGBtZmVCYXNlVXJsID1gLGN0KSxVPWR0KCksSChgY3VycmVudEltcG9ydHMgZnJvbSBET006YCxPYmplY3Qua2V5cyhVKSk7dHJ5e2xldCBlPWF3YWl0IHV0KCksdD0wO2ZvcihsZXRbbixyXW9mIE9iamVjdC5lbnRyaWVzKGUuaW1wb3J0cz8/e30pKVVbbl09PT12b2lkIDAmJihVW25dPWx0KHIpLHQrKyk7SChgYmFzZWxpbmUgZmlsbGVkIGZyb20gaW1wb3J0bWFwLUFQSSAoYWRkZWQgJHt0fSBlbnRyaWVzKWApfWNhdGNoKGUpe2NvbnNvbGUud2FybihgW2ltcG9ydG1hcC11cGRhdGVyXSBiYXNlbGluZSBpbXBvcnRtYXAgZmV0Y2ggZmFpbGVkOmAsZSl9aWYod2luZG93LmltcG9ydE1hcE92ZXJyaWRlcyl7bGV0IGU9W10sdD13aW5kb3cuaW1wb3J0TWFwT3ZlcnJpZGVzLmdldE92ZXJyaWRlTWFwKCk7Zm9yKGxldFtuLHJdb2YgT2JqZWN0LmVudHJpZXModC5pbXBvcnRzKSl7bGV0IHQ9VVtuXTt0JiZsdChyKT09PXQmJmUucHVzaChuKX1pZihlLmxlbmd0aD4wKXtIKGByZW1vdmluZyBzdGFsZSBJTU8gb3ZlcnJpZGVzIChzYW1lIGFzIGJvb3RzdHJhcCBpbXBvcnRtYXApOmAsZSk7Zm9yKGxldCB0IG9mIGUpd2luZG93LmltcG9ydE1hcE92ZXJyaWRlcy5yZW1vdmVPdmVycmlkZSh0KX19ZS5vbihgKmAsKGUsdCk9PntIKGBldmVudEJ1cyBldmVudCByZWNlaXZlZDpgLGUsdCl9KSxlLm9uKGBJTVBPUlRNQVBfVVBEQVRFRGAsZT0+e3B0KGUpfSksSChgc3Vic2NyaWJlZCB0byBldmVudEJ1cyAod2lsZGNhcmQgKyBJTVBPUlRNQVBfVVBEQVRFRClgKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtcm91dGluZy1ldmVudGAsbXQpLEgoYOKchSBzdGFydGVkLCB0cmFja2luZ2AsT2JqZWN0LmtleXMoVSkubGVuZ3RoLGBNRkUgZW50cmllc2ApfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoYFtpbXBvcnRtYXAtdXBkYXRlcl0g4p2MIGluaXQgZmFpbGVkOmAsZSl9fTtmdW5jdGlvbiBndChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gX3QoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/Z3QoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2dChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Z3QoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSyhlKXtyZXR1cm4oSz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHZ0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4geHQoZSl9KGUpfHxmdW5jdGlvbihlKXtpZih0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlW2BAQGl0ZXJhdG9yYF0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxidChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9KCl9ZnVuY3Rpb24gYnQoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIHh0KGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiBuPT09YE9iamVjdGAmJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksbj09PWBNYXBgfHxuPT09YFNldGA/QXJyYXkuZnJvbShlKTpuPT09YEFyZ3VtZW50c2B8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP3h0KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB4dChlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9dmFyIHE9dHlwZW9mIHdpbmRvdzxgdWA7ZnVuY3Rpb24gSihlLHQpe2lmKEsodCkhPT1gb2JqZWN0YHx8QXJyYXkuaXNBcnJheSh0KXx8dD09PW51bGwpdGhyb3cgRXJyb3IoYEludmFsaWQgJHtlfTogcmVjZWl2ZWQgJHtBcnJheS5pc0FycmF5KHQpP2BhcnJheWA6dH0gYnV0IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0YCl9ZnVuY3Rpb24gU3QoZSx0KXtpZih0eXBlb2YgdCE9YGJvb2xlYW5gKXRocm93IEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkICR7Syh0KX0sIGJ1dCBleHBlY3RlZCBhIGJvb2xlYW5gKX1mdW5jdGlvbiBDdChlLHQsbixyKXtpZighcil7dmFyIGk9T2JqZWN0LmtleXModCksYT1bXTtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe24uaW5kZXhPZihlKTwwJiZhLnB1c2goZSl9KSksYS5sZW5ndGg+MCYmY29uc29sZS53YXJuKEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkIGludmFsaWQgcHJvcGVydGllcyAnJHthLmpvaW4oYCwgYCl9JywgYnV0IHZhbGlkIHByb3BlcnRpZXMgYXJlICR7bi5qb2luKGAsIGApfWApKX19ZnVuY3Rpb24gWShlLHQpe3ZhciBuPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDApfHxhcmd1bWVudHNbMl07aWYodHlwZW9mIHQhPWBzdHJpbmdgfHxuJiZ0LnRyaW0oKT09PWBgKXRocm93IEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkICcke3R9JywgYnV0IGV4cGVjdGVkIGEke24/YCBub24tYmxhbmtgOmBgfSBzdHJpbmdgKX1mdW5jdGlvbiB3dChlLHQpe2lmKFkoZSx0KSx0LmluZGV4T2YoYC9gKTwwKXRocm93IEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkICcke3R9JywgYnV0IGV4cGVjdGVkIGFuIGFic29sdXRlIHBhdGggdGhhdCBzdGFydHMgd2l0aCAvYCl9ZnVuY3Rpb24gVHQoZSx0LG4pe2lmKCFBcnJheS5pc0FycmF5KHQpJiYoSyhLKHQpKSE9PWBvYmplY3RgfHx0Lmxlbmd0aCE9PWBudW1iZXJgKSl0aHJvdyBFcnJvcihgSW52YWxpZCAke2V9OiByZWNlaXZlZCAnJHt0fScsIGJ1dCBleHBlY3RlZCBhbiBhcnJheWApO2Zvcih2YXIgcj1bLi4uYXJndW1lbnRzXS5zbGljZSgzKSxpPTA7aTx0Lmxlbmd0aDtpKyspbi5hcHBseSh2b2lkIDAsW3RbaV0sYCR7ZX1bJHtpfV1gXS5jb25jYXQocikpfWZ1bmN0aW9uIEV0KGUsdCl7dmFyIG47cmV0dXJuKG49ZS5zdWJzdHIoLTEpPT09YC9gP3RbMF09PT1gL2A/ZSt0LnNsaWNlKDEpOmUrdDp0WzBdPT09YC9gP2UrdDplK2AvYCt0KS5zdWJzdHIoLTEpPT09YC9gJiZuLmxlbmd0aD4xJiYobj1uLnNsaWNlKDAsbi5sZW5ndGgtMSkpLG59ZnVuY3Rpb24gRHQoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZih0KGVbbl0pKXJldHVybiBlW25dO3JldHVybiBudWxsfXZhciBPdD10eXBlb2YgU3ltYm9sPGB1YD9TeW1ib2woKTpgQGA7ZnVuY3Rpb24ga3QoZSx0KXtpZihlJiZlLm5vZGVOYW1lfHx0eXBlb2YgZT09YHN0cmluZ2Ape2lmKHEmJiF0JiZ3aW5kb3cuc2luZ2xlU3BhTGF5b3V0RGF0YSYmKHQ9d2luZG93LnNpbmdsZVNwYUxheW91dERhdGEpLHR5cGVvZiBlPT1gc3RyaW5nYCl7aWYoIXEpdGhyb3cgRXJyb3IoYGNhbGxpbmcgY29uc3RydWN0Um91dGVzIHdpdGggYSBzdHJpbmcgb24gdGhlIHNlcnZlciBpcyBub3QgeWV0IHN1cHBvcnRlZGApO2lmKCEoZT1uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGUsYHRleHQvaHRtbGApLmRvY3VtZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGBzaW5nbGUtc3BhLXJvdXRlcmApKSl0aHJvdyBFcnJvcihgY29uc3RydWN0Um91dGVzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBIVE1MIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYSA8c2luZ2xlLXNwYS1yb3V0ZXI+IGVsZW1lbnQuYCl9ZT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e307aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YHRlbXBsYXRlYCYmKGU9KGUuY29udGVudHx8ZSkucXVlcnlTZWxlY3Rvcihgc2luZ2xlLXNwYS1yb3V0ZXJgKSksZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09YHNpbmdsZS1zcGEtcm91dGVyYCl0aHJvdyBFcnJvcihgc2luZ2xlLXNwYS1sYXlvdXQ6IFRoZSBIVE1MRWxlbWVudCBwYXNzZWQgdG8gY29uc3RydWN0Um91dGVzIG11c3QgYmUgPHNpbmdsZS1zcGEtcm91dGVyPiBvciBhIDx0ZW1wbGF0ZT4gY29udGFpbmluZyB0aGUgcm91dGVyLiBSZWNlaXZlZCAke2Uubm9kZU5hbWV9YCk7cSYmZS5pc0Nvbm5lY3RlZCYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpO3ZhciBuPXtyb3V0ZXM6W10scmVkaXJlY3RzOnt9fTtYKGUsYG1vZGVgKSYmKG4ubW9kZT1YKGUsYG1vZGVgKSksWChlLGBiYXNlYCkmJihuLmJhc2U9WChlLGBiYXNlYCkpLFgoZSxgY29udGFpbmVyRWxgKSYmKG4uY29udGFpbmVyRWw9WChlLGBjb250YWluZXJFbGApKTtmb3IodmFyIHI9MDtyPGUuY2hpbGROb2Rlcy5sZW5ndGg7cisrKXt2YXIgaTsoaT1uLnJvdXRlcykucHVzaC5hcHBseShpLHl0KFooZS5jaGlsZE5vZGVzW3JdLHQsbikpKX1yZXR1cm4gbn0oZSx0KX1lbHNlIGlmKHQpdGhyb3cgRXJyb3IoYGNvbnN0cnVjdFJvdXRlcyBzaG91bGQgYmUgY2FsbGVkIGVpdGhlciB3aXRoIGFuIEhUTUxFbGVtZW50IGFuZCBsYXlvdXREYXRhLCBvciBhIHNpbmdsZSBqc29uIG9iamVjdC5gKTtyZXR1cm4gZnVuY3Rpb24oZSl7Sihgcm91dGVzQ29uZmlnYCxlKTt2YXIgdCxuPWUuZGlzYWJsZVdhcm5pbmdzO2lmKEN0KGByb3V0ZXNDb25maWdgLGUsW2Btb2RlYCxgYmFzZWAsYGNvbnRhaW5lckVsYCxgcm91dGVzYCxgZGlzYWJsZVdhcm5pbmdzYCxgcmVkaXJlY3RzYF0sbiksZS5oYXNPd25Qcm9wZXJ0eShgY29udGFpbmVyRWxgKT9mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0PT1gc3RyaW5nYD90LnRyaW0oKT09PWBgOiEocSYmdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSl0aHJvdyBFcnJvcihgSW52YWxpZCByb3V0ZXNDb25maWcuY29udGFpbmVyRWw6IHJlY2VpdmVkICR7dH0gYnV0IGV4cGVjdGVkIGVpdGhlciBub24tYmxhbmsgc3RyaW5nIG9yIEhUTUxFbGVtZW50YCl9KDAsZS5jb250YWluZXJFbCk6ZS5jb250YWluZXJFbD1gYm9keWAsZS5oYXNPd25Qcm9wZXJ0eShgbW9kZWApfHwoZS5tb2RlPWBoaXN0b3J5YCksZnVuY3Rpb24oZSx0LG4pe2lmKG4uaW5kZXhPZih0KTwwKXRocm93IEVycm9yKGBJbnZhbGlkIHJvdXRlc0NvbmZpZy5tb2RlOiByZWNlaXZlZCAnJHt0fScgYnV0IGV4cGVjdGVkICR7bi5qb2luKGAsIGApfWApfSgwLGUubW9kZSxbYGhpc3RvcnlgLGBoYXNoYF0pLGUuaGFzT3duUHJvcGVydHkoYGJhc2VgKT8oWShgcm91dGVzQ29uZmlnLmJhc2VgLGUuYmFzZSksZS5iYXNlPSgodD1lLmJhc2UpLmluZGV4T2YoYC9gKSE9PTAmJih0PWAvYCt0KSx0W3QubGVuZ3RoLTFdIT09YC9gJiYodCs9YC9gKSx0KSk6ZS5iYXNlPWAvYCxlLmhhc093blByb3BlcnR5KGByZWRpcmVjdHNgKSlmb3IodmFyIHIgaW4gSihgcm91dGVzQ29uZmlnLnJlZGlyZWN0c2AsZS5yZWRpcmVjdHMpLGUucmVkaXJlY3RzKXt2YXIgaT1lLnJlZGlyZWN0c1tyXTt3dChgcm91dGVzQ29uZmlnLnJlZGlyZWN0cyBrZXlgLHIpLHd0KGByb3V0ZXNDb25maWcucmVkaXJlY3RzWycke3J9J11gLGkpfXZhciBhPXE/d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOmAvYCxvPWUubW9kZT09PWBoYXNoYD9hK2AjYDpgYDtUdChgcm91dGVzQ29uZmlnLnJvdXRlc2AsZS5yb3V0ZXMsKGZ1bmN0aW9uIGUodCxyLGkpe3ZhciBhPWkucGFyZW50UGF0aCxvPWkuc2libGluZ0FjdGl2ZVdoZW5zLHM9aS5wYXJlbnRBY3RpdmVXaGVuO2lmKEoocix0KSx0LnR5cGU9PT1gYXBwbGljYXRpb25gKUN0KHIsdCxbYHR5cGVgLGBuYW1lYCxgcHJvcHNgLGBsb2FkZXJgLGBlcnJvcmAsYGNsYXNzTmFtZWBdLG4pLHQucHJvcHMmJkooYCR7cn0ucHJvcHNgLHQucHJvcHMpLFkoYCR7cn0ubmFtZWAsdC5uYW1lKTtlbHNlIGlmKHQudHlwZT09PWByb3V0ZWApe0N0KHIsdCxbYHR5cGVgLGBwYXRoYCxgcm91dGVzYCxgcHJvcHNgLGBkZWZhdWx0YCxgZXhhY3RgXSxuKSx0Lmhhc093blByb3BlcnR5KGBleGFjdGApJiZTdChgJHtyfS5leGFjdGAsdC5leGFjdCk7dmFyIGMsbD10Lmhhc093blByb3BlcnR5KGBwYXRoYCksdT10Lmhhc093blByb3BlcnR5KGBkZWZhdWx0YCk7aWYobClZKGAke3J9LnBhdGhgLHQucGF0aCksYz1FdChhLHQucGF0aCksdC5hY3RpdmVXaGVuPXFlKGMsdC5leGFjdCksby5wdXNoKHQuYWN0aXZlV2hlbik7ZWxzZXtpZighdSl0aHJvdyBFcnJvcihgSW52YWxpZCAke3J9OiByb3V0ZXMgbXVzdCBoYXZlIGVpdGhlciBhIHBhdGggb3IgZGVmYXVsdCBwcm9wZXJ0eS5gKTtTdChgJHtyfS5kZWZhdWx0YCx0LmRlZmF1bHQpLGM9YSx0LmFjdGl2ZVdoZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikmJiFlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlKG4pfSkpfX0obyxzKX1pZihsJiZ1JiZ0LmRlZmF1bHQpdGhyb3cgRXJyb3IoYEludmFsaWQgJHtyfTogY2Fubm90IGhhdmUgYm90aCBwYXRoIGFuZCBzZXQgZGVmYXVsdCB0byB0cnVlLmApO3Qucm91dGVzJiZUdChgJHtyfS5yb3V0ZXNgLHQucm91dGVzLGUse3BhcmVudFBhdGg6YyxzaWJsaW5nQWN0aXZlV2hlbnM6W10scGFyZW50QWN0aXZlV2hlbjp0LmFjdGl2ZVdoZW59KX1lbHNle2lmKCEodHlwZW9mIE5vZGU8YHVgJiZ0IGluc3RhbmNlb2YgTm9kZSkpZm9yKHZhciBkIGluIHQpZCE9PWByb3V0ZXNgJiZkIT09YGF0dHJzYCYmWShgJHtyfVsnJHtkfSddYCx0W2RdLCExKTt0LnJvdXRlcyYmVHQoYCR7cn0ucm91dGVzYCx0LnJvdXRlcyxlLHtwYXJlbnRQYXRoOmEsc2libGluZ0FjdGl2ZVdoZW5zOm8scGFyZW50QWN0aXZlV2hlbjpzfSl9fSkse3BhcmVudFBhdGg6bytlLmJhc2UscGFyZW50QWN0aXZlV2hlbjpmdW5jdGlvbigpe3JldHVybiEwfSxzaWJsaW5nQWN0aXZlV2hlbnM6W119KSxkZWxldGUgZS5kaXNhYmxlV2FybmluZ3N9KGUpLGV9ZnVuY3Rpb24gWChlLHQpe2lmKHEpcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQpO3ZhciBuPUR0KGUuYXR0cnMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10LnRvTG93ZXJDYXNlKCl9KSk7cmV0dXJuIG4/bi52YWx1ZTpudWxsfWZ1bmN0aW9uIEF0KGUsdCl7cmV0dXJuIHE/ZS5oYXNBdHRyaWJ1dGUodCk6ZS5hdHRycy5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dH0pKX1mdW5jdGlvbiBaKGUsdCxuKXtpZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1gYXBwbGljYXRpb25gKXtpZihlLmNoaWxkTm9kZXMubGVuZ3RoPjApdGhyb3cgRXJyb3IoYDxhcHBsaWNhdGlvbj4gZWxlbWVudHMgbXVzdCBub3QgaGF2ZSBjaGlsZE5vZGVzLiBZb3UgbXVzdCBwdXQgaW4gYSBjbG9zaW5nIDwvYXBwbGljYXRpb24+IC0gc2VsZiBjbG9zaW5nIGlzIG5vdCBhbGxvd2VkYCk7dmFyIHI9e3R5cGU6YGFwcGxpY2F0aW9uYCxuYW1lOlgoZSxgbmFtZWApfSxpPVgoZSxgbG9hZGVyYCk7aWYoaSl7aWYodC5sb2FkZXJzJiZ0LmxvYWRlcnMuaGFzT3duUHJvcGVydHkoaSkpci5sb2FkZXI9dC5sb2FkZXJzW2ldO2Vsc2UgaWYocSl0aHJvdyBFcnJvcihgQXBwbGljYXRpb24gbG9hZGVyICcke2l9JyB3YXMgbm90IGRlZmluZWQgaW4gdGhlIGh0bWxMYXlvdXREYXRhYCl9dmFyIGE9WChlLGBlcnJvcmApO2lmKGEpe2lmKHQuZXJyb3JzJiZ0LmVycm9ycy5oYXNPd25Qcm9wZXJ0eShhKSlyLmVycm9yPXQuZXJyb3JzW2FdO2Vsc2UgaWYocSl0aHJvdyBFcnJvcihgQXBwbGljYXRpb24gZXJyb3IgaGFuZGxlciAnJHtpfScgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSBodG1sTGF5b3V0RGF0YWApfXZhciBvPVgoZSxgY2xhc3NgKTtyZXR1cm4gbyYmKHIuY2xhc3NOYW1lPW8pLGp0KGUscix0KSxbcl19aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YHJvdXRlYCl7dmFyIHM9e3R5cGU6YHJvdXRlYCxyb3V0ZXM6W119LGM9WChlLGBwYXRoYCk7YyYmKHMucGF0aD1jKSxBdChlLGBkZWZhdWx0YCkmJihzLmRlZmF1bHQ9ITApLEF0KGUsYGV4YWN0YCkmJihzLmV4YWN0PSEwKSxqdChlLHMsdCk7Zm9yKHZhciBsPTA7bDxlLmNoaWxkTm9kZXMubGVuZ3RoO2wrKyl7dmFyIHU7KHU9cy5yb3V0ZXMpLnB1c2guYXBwbHkodSx5dChaKGUuY2hpbGROb2Rlc1tsXSx0LG4pKSl9cmV0dXJuW3NdfWlmKGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWByZWRpcmVjdGApcmV0dXJuIG4ucmVkaXJlY3RzW0V0KGAvYCxYKGUsYGZyb21gKSldPUV0KGAvYCxYKGUsYHRvYCkpLFtdO2lmKHR5cGVvZiBOb2RlPGB1YCYmZSBpbnN0YW5jZW9mIE5vZGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSYmZS50ZXh0Q29udGVudC50cmltKCk9PT1gYClyZXR1cm5bXTtpZihlLmNoaWxkTm9kZXMmJmUuY2hpbGROb2Rlcy5sZW5ndGg+MCl7ZS5yb3V0ZXM9W107Zm9yKHZhciBkPTA7ZDxlLmNoaWxkTm9kZXMubGVuZ3RoO2QrKyl7dmFyIGY7KGY9ZS5yb3V0ZXMpLnB1c2guYXBwbHkoZix5dChaKGUuY2hpbGROb2Rlc1tkXSx0LG4pKSl9fXJldHVybltlXX1pZihlLmNoaWxkTm9kZXMpe2Zvcih2YXIgcD17dHlwZTplLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscm91dGVzOltdLGF0dHJzOmUuYXR0cnN9LG09MDttPGUuY2hpbGROb2Rlcy5sZW5ndGg7bSsrKXt2YXIgaDsoaD1wLnJvdXRlcykucHVzaC5hcHBseShoLHl0KFooZS5jaGlsZE5vZGVzW21dLHQsbikpKX1yZXR1cm5bcF19cmV0dXJuIGUubm9kZU5hbWU9PT1gI2NvbW1lbnRgP1t7dHlwZTpgI2NvbW1lbnRgLHZhbHVlOmUuZGF0YX1dOmUubm9kZU5hbWU9PT1gI3RleHRgP1t7dHlwZTpgI3RleHRgLHZhbHVlOmUudmFsdWV9XTp2b2lkIDB9ZnVuY3Rpb24ganQoZSx0LG4pe2Zvcih2YXIgcj0oWChlLGBwcm9wc2ApfHxgYCkuc3BsaXQoYCxgKSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0udHJpbSgpO2lmKGEubGVuZ3RoIT09MClpZih0LnByb3BzfHw9e30sbi5wcm9wcyYmbi5wcm9wcy5oYXNPd25Qcm9wZXJ0eShhKSl0LnByb3BzW2FdPW4ucHJvcHNbYV07ZWxzZXtpZihxKXRocm93IEVycm9yKGBQcm9wICcke2F9JyB3YXMgbm90IGRlZmluZWQgaW4gdGhlIGh0bWxMYXlvdXREYXRhLiBFaXRoZXIgcmVtb3ZlIHRoaXMgYXR0cmlidXRlIGZyb20gdGhlIEhUTUwgZWxlbWVudCBvciBwcm92aWRlIHRoZSBwcm9wJ3MgdmFsdWVgKTt0LnByb3BzW2FdPU90fX19ZnVuY3Rpb24gTXQoZSl7cmV0dXJue2Jvb3RzdHJhcDpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sbW91bnQ6ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7dC5kb21FbGVtZW50LmlubmVySFRNTD1lfSkpfSx1bm1vdW50OmZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe2UuZG9tRWxlbWVudC5pbm5lckhUTUw9YGB9KSl9fX1mdW5jdGlvbiBOdChlKXt2YXIgdD1lLnJvdXRlcztlLmFwcGxpY2F0aW9uczt2YXIgbj1lLmFjdGl2ZSxyPW49PT12b2lkIDB8fG4saT0hMSxhPXt9LG89cSYmISF3aW5kb3cuc2luZ2xlU3BhTGF5b3V0RGF0YTtpZighdCl0aHJvdyBFcnJvcihgc2luZ2xlLXNwYS1sYXlvdXQgY29uc3RydWN0TGF5b3V0RW5naW5lKG9wdHMpOiBvcHRzLnJvdXRlcyBtdXN0IGJlIHByb3ZpZGVkLiBWYWx1ZSB3YXMgJHtLKHQpfWApO3ZhciBzPXQuYmFzZS5zbGljZSgwLHQuYmFzZS5sZW5ndGgtMSksdT17aXNBY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXtpfHwoaT0hMCxxJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHNpbmdsZS1zcGE6YmVmb3JlLXJvdXRpbmctZXZlbnRgLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBzaW5nbGUtc3BhOmJlZm9yZS1tb3VudC1yb3V0aW5nLWV2ZW50YCxwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpyb3V0aW5nLWV2ZW50YCxtKSxjKGQpLG8mJmgoZygpLHQucm91dGVzKSxwKCkpKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbigpe2kmJihpPSExLHEmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtcm91dGluZy1ldmVudGAsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNpbmdsZS1zcGE6YmVmb3JlLW1vdW50LXJvdXRpbmctZXZlbnRgLHApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBzaW5nbGUtc3BhOnJvdXRpbmctZXZlbnRgLG0pLGwoZCkpKX19O3JldHVybiByJiZ1LmFjdGl2YXRlKCksdTtmdW5jdGlvbiBkKGUpe3ZhciBuPUx0KHthcHBsaWNhdGlvbk5hbWU6ZS5hcHBPclBhcmNlbE5hbWUsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLHJvdXRlczp0LnJvdXRlc30pO2lmKG4mJm4uZXJyb3Ipe3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFEobi5uYW1lKSksaT10eXBlb2Ygbi5lcnJvcj09YHN0cmluZ2A/TXQobi5lcnJvcik6bi5lcnJvcjthW24ubmFtZV09ZmUoaSx7ZG9tRWxlbWVudDpyLGVycm9yOmV9KX1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9ZnVuY3Rpb24gZihlKXt2YXIgbj1lLmRldGFpbCxyPW4uY2FuY2VsTmF2aWdhdGlvbixpPW4ubmV3VXJsLG89QnQodCxWdChpKSkscz1mdW5jdGlvbihlKXt2YXIgbj10LnJlZGlyZWN0c1tlXTtpZihlPT09byl7aWYoIXIpdGhyb3cgRXJyb3IoYHNpbmdsZS1zcGEtbGF5b3V0OiA8cmVkaXJlY3Q+IHJlcXVpcmVzIHNpbmdsZS1zcGFAPj02LjAuMGApO3JldHVybiByKCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt4ZShuKX0pKSx7djp2b2lkIDB9fX07Zm9yKHZhciBjIGluIHQucmVkaXJlY3RzKXt2YXIgbD1zKGMpO2lmKEsobCk9PT1gb2JqZWN0YClyZXR1cm4gbC52fXZhciB1PVtdO0h0KGkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2FbZV0mJih1LnB1c2goYVtlXS51bm1vdW50KCkpLGRlbGV0ZSBhW2VdKX0pKSx1Lmxlbmd0aD4wJiZyKFByb21pc2UuYWxsKHUpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkpfWZ1bmN0aW9uIHAoKXtpZihCdCh0KS5pbmRleE9mKHMpPT09MCl7dmFyIGU9UmUoKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUSh0KSksZX0pLHt9KTtJdCh7bG9jYXRpb246d2luZG93LmxvY2F0aW9uLHJvdXRlczp0LnJvdXRlcyxwYXJlbnRDb250YWluZXI6ZygpLHNob3VsZE1vdW50OiEwLGFwcGxpY2F0aW9uQ29udGFpbmVyczplfSl9fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZS5kZXRhaWwsbj10Lm5hdmlnYXRpb25Jc0NhbmNlbGVkLHI9dC5uZXdVcmw7bnx8SHQocikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUShlKSk7dCYmdC5pc0Nvbm5lY3RlZCYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSkpfWZ1bmN0aW9uIGgoZSx0KXtpZihlJiZlLmNoaWxkTm9kZXMmJnQpZm9yKHZhciBuPXtuZXh0U2libGluZzplLmNoaWxkTm9kZXNbMF19LHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtpZihpLnR5cGUhPT1gcm91dGVgKXtmb3IodmFyIGE9bj8ubmV4dFNpYmxpbmc7KG89YSk/Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJmEudGV4dENvbnRlbnQudHJpbSgpPT09YGA7KXt2YXIgbzthPWEubmV4dFNpYmxpbmd9bj1hLFB0KGkpJiZGdChhLGkpJiYoaS5jb25uZWN0ZWROb2RlPWEpLGkucm91dGVzJiZoKGEsaS5yb3V0ZXMpfWVsc2UgaChlLGkucm91dGVzKX19ZnVuY3Rpb24gZygpe3JldHVybiB0eXBlb2YgdC5jb250YWluZXJFbD09YHN0cmluZ2A/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lckVsKTp0LmNvbnRhaW5lckVsfX1mdW5jdGlvbiBQdChlKXtyZXR1cm4gdD1bYGFwcGxpY2F0aW9uYCxgcm91dGVgLGBmcmFnbWVudGAsYGFzc2V0c2AsYHJlZGlyZWN0YF0sbj1lLnR5cGUsIXQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1ufSkpO3ZhciB0LG59ZnVuY3Rpb24gRnQoZSx0KXt2YXIgbixyO3JldHVybiEhZSYmKHI9dCBpbnN0YW5jZW9mIE5vZGU/dDpmdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlYCN0ZXh0YDpyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS52YWx1ZSk7Y2FzZWAjY29tbWVudGA6cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZS52YWx1ZSk7ZGVmYXVsdDp2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUudHlwZSk7cmV0dXJuIGUuYXR0cnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5zZXRBdHRyaWJ1dGUoZS5uYW1lLGUudmFsdWUpfSkpLHR9fSh0KSwobj1lKS5ub2RlVHlwZT09PXIubm9kZVR5cGUmJm4ubm9kZU5hbWU9PT1yLm5vZGVOYW1lJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0QXR0cmlidXRlTmFtZXM/ZS5nZXRBdHRyaWJ1dGVOYW1lcygpLnNvcnQoKTpbXSxyPWUuZ2V0QXR0cmlidXRlTmFtZXM/ZS5nZXRBdHRyaWJ1dGVOYW1lcygpLnNvcnQoKTpbXTtyZXR1cm4gbi5sZW5ndGg9PT1yLmxlbmd0aCYmIW4uc29tZSgoZnVuY3Rpb24obil7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKG4pIT09dC5nZXRBdHRyaWJ1dGUobil9KSl9KG4scikpfWZ1bmN0aW9uIEl0KGUpe3ZhciB0PWUubG9jYXRpb24sbj1lLnJvdXRlcyxyPWUucGFyZW50Q29udGFpbmVyLGk9ZS5wcmV2aW91c1NpYmxpbmcsYT1lLnNob3VsZE1vdW50LG89ZS5hcHBsaWNhdGlvbkNvbnRhaW5lcnM7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtpZihlLnR5cGU9PT1gYXBwbGljYXRpb25gKXtpZihhKXt2YXIgcyxjPVEoZS5uYW1lKTtvW2UubmFtZV0/cz1vW2UubmFtZV06ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYyk/cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjKToocz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSkuaWQ9Yyx0eXBlb2YgZS5jbGFzc05hbWU9PWBzdHJpbmdgP3MuY2xhc3NOYW1lPWUuY2xhc3NOYW1lOnR5cGVvZiBlLmNsYXNzTmFtZSE9YHN0cmluZ2AmJnR5cGVvZiBzLmNsYXNzTmFtZT09YHN0cmluZ2AmJnMucmVtb3ZlQXR0cmlidXRlKGBjbGFzc2ApLFJ0KHMscixpKSxpPXN9fWVsc2UgZS50eXBlPT09YHJvdXRlYD9pPUl0KHtsb2NhdGlvbjp0LHJvdXRlczplLnJvdXRlcyxwYXJlbnRDb250YWluZXI6cixwcmV2aW91c1NpYmxpbmc6aSxzaG91bGRNb3VudDphJiZlLmFjdGl2ZVdoZW4odCksYXBwbGljYXRpb25Db250YWluZXJzOm99KTooZSBpbnN0YW5jZW9mIE5vZGV8fHR5cGVvZiBlLnR5cGU9PWBzdHJpbmdgKSYmKGE/KGUuY29ubmVjdGVkTm9kZXx8PWUgaW5zdGFuY2VvZiBOb2RlP2UuY2xvbmVOb2RlKCExKTp6dChlKSxSdChlLmNvbm5lY3RlZE5vZGUscixpKSxlLnJvdXRlcyYmSXQoe2xvY2F0aW9uOnQscm91dGVzOmUucm91dGVzLHBhcmVudENvbnRhaW5lcjplLmNvbm5lY3RlZE5vZGUscHJldmlvdXNTaWJsaW5nOm51bGwsc2hvdWxkTW91bnQ6YSxhcHBsaWNhdGlvbkNvbnRhaW5lcnM6b30pLGk9ZS5jb25uZWN0ZWROb2RlKTooKGw9ZS5jb25uZWN0ZWROb2RlKSYmKGwucmVtb3ZlP2wucmVtb3ZlKCk6bC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpKSxkZWxldGUgZS5jb25uZWN0ZWROb2RlKSk7dmFyIGx9KSksaX1mdW5jdGlvbiBMdChlKXtmb3IodmFyIHQ9ZS5hcHBsaWNhdGlvbk5hbWUsbj1lLmxvY2F0aW9uLHI9ZS5yb3V0ZXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2lmKGEudHlwZT09PWBhcHBsaWNhdGlvbmApe2lmKGEubmFtZT09PXQpcmV0dXJuIGF9ZWxzZSBpZihhLnR5cGU9PT1gcm91dGVgKXtpZihhLmFjdGl2ZVdoZW4obikpe3ZhciBvPUx0KHthcHBsaWNhdGlvbk5hbWU6dCxsb2NhdGlvbjpuLHJvdXRlczphLnJvdXRlc30pO2lmKG8pcmV0dXJuIG99fWVsc2UgaWYoYS5yb3V0ZXMpe3ZhciBzPUx0KHthcHBsaWNhdGlvbk5hbWU6dCxsb2NhdGlvbjpuLHJvdXRlczphLnJvdXRlc30pO2lmKHMpcmV0dXJuIHN9fX1mdW5jdGlvbiBSdChlLHQsbil7dmFyIHI9bj9uLm5leHRTaWJsaW5nOnQuZmlyc3RDaGlsZDtyIT09ZSYmdC5pbnNlcnRCZWZvcmUoZSxyKX1mdW5jdGlvbiBRKGUpe3JldHVybmBzaW5nbGUtc3BhLWFwcGxpY2F0aW9uOiR7ZX1gfWZ1bmN0aW9uIHp0KGUpe2lmKGUudHlwZS50b0xvd2VyQ2FzZSgpPT09YCN0ZXh0YClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS52YWx1ZSk7aWYoZS50eXBlLnRvTG93ZXJDYXNlKCk9PT1gI2NvbW1lbnRgKXJldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KGUudmFsdWUpO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZS50eXBlKTtyZXR1cm4oZS5hdHRyc3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc2V0QXR0cmlidXRlKGUubmFtZSxlLnZhbHVlKX0pKSx0LnJvdXRlcyYmdC5yb3V0ZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5hcHBlbmRDaGlsZCh6dChlKSl9KSksdH1mdW5jdGlvbiBCdChlKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmxvY2F0aW9uKVtlLm1vZGU9PT1gaGFzaGA/YGhhc2hgOmBwYXRobmFtZWBdfWZ1bmN0aW9uIFZ0KGUpe3RyeXtyZXR1cm4gbmV3IFVSTChlKX1jYXRjaHt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCk7cmV0dXJuIHQuaHJlZj1lLHR9fWZ1bmN0aW9uIEh0KGUpe3ZhciB0PVtdLG49SGUoZT9WdChlKTpsb2NhdGlvbik7cmV0dXJuIFIoKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuLmluZGV4T2YoZSk8MCYmdC5wdXNoKGUpfSkpLHR9ZnVuY3Rpb24gVXQoZSl7dmFyIHQ9ZS5yb3V0ZXMsbj1lLmxvYWRBcHAscj17fTtyZXR1cm4gV3QocixLdCx7fSx0LnJvdXRlcyksT2JqZWN0LmtleXMocikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1yW2VdO3JldHVybntuYW1lOmUsY3VzdG9tUHJvcHM6ZnVuY3Rpb24oZSxuKXt2YXIgcj1EdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmVXaGVuKG4pfSkpO3JldHVybiByP3IucHJvcHM6e319LGFjdGl2ZVdoZW46dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZVdoZW59KSksYXBwOmZ1bmN0aW9uKCl7dmFyIHI7cSYmKHI9RHQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlV2hlbih3aW5kb3cubG9jYXRpb24pfSkpKTt2YXIgaT1uKHtuYW1lOmV9KTtyZXR1cm4gciYmci5sb2FkZXI/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe3ZhciByLGk9UShlKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpO2F8fCgoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSkuaWQ9aSxhLnN0eWxlLmRpc3BsYXk9YG5vbmVgLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSkscj1mdW5jdGlvbigpe2Euc3R5bGUucmVtb3ZlUHJvcGVydHkoYGRpc3BsYXlgKSxhLmdldEF0dHJpYnV0ZShgc3R5bGVgKT09PWBgJiZhLnJlbW92ZUF0dHJpYnV0ZShgc3R5bGVgKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtbW91bnQtcm91dGluZy1ldmVudGAscil9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBzaW5nbGUtc3BhOmJlZm9yZS1tb3VudC1yb3V0aW5nLWV2ZW50YCxyKSk7dmFyIG89ZmUodHlwZW9mIHQubG9hZGVyPT1gc3RyaW5nYD9NdCh0LmxvYWRlcik6dC5sb2FkZXIse25hbWU6YGFwcGxpY2F0aW9uLWxvYWRlcjoke2V9YCxkb21FbGVtZW50OmF9KTtmdW5jdGlvbiBzKCl7cmV0dXJuIG8udW5tb3VudCgpLnRoZW4oKGZ1bmN0aW9uKCl7ciYmcigpfSkpfXJldHVybiBQcm9taXNlLmFsbChbby5tb3VudFByb21pc2Usbl0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0LG4scj0obj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQ9ZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ZT09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbYEBAaXRlcmF0b3JgXTtpZihuIT1udWxsKXt2YXIgcixpLGE9W10sbz0hMCxzPSExO3RyeXtmb3Iobj1uLmNhbGwoZSk7IShvPShyPW4ubmV4dCgpKS5kb25lKSYmKGEucHVzaChyLnZhbHVlKSwhdHx8YS5sZW5ndGghPT10KTtvPSEwKTt9Y2F0Y2goZSl7cz0hMCxpPWV9ZmluYWxseXt0cnl7b3x8bi5yZXR1cm49PW51bGx8fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fXJldHVybiBhfX0odCxuKXx8YnQodCxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX0oKSk7clswXTt2YXIgaT1yWzFdO3JldHVybiBzKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gcygpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgZX0pKX0pKX0pKX0oZSxyLGkpOml9fX0pKX1mdW5jdGlvbiBXdChlLHQsbixyKXtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IudHlwZT09PWBhcHBsaWNhdGlvbmA/KGVbci5uYW1lXXx8KGVbci5uYW1lXT1bXSksZVtyLm5hbWVdLnB1c2goe2FjdGl2ZVdoZW46dCxwcm9wczpHdChuLHIucHJvcHMpLGxvYWRlcjpyLmxvYWRlcn0pKTpyLnR5cGU9PT1gcm91dGVgP1d0KGUsci5hY3RpdmVXaGVuLEd0KG4sci5wcm9wcyksci5yb3V0ZXMpOnIucm91dGVzJiZXdChlLHQsbixyLnJvdXRlcyl9KSl9ZnVuY3Rpb24gR3QoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9O3JldHVybiBfdChfdCh7fSxlKSx0KX1mdW5jdGlvbiBLdCgpe3JldHVybiEwfXZhciBxdD1gPHNpbmdsZS1zcGEtcm91dGVyPgogIDxtYWluIGNsYXNzPSJzaW5nbGUtc3BhLW1haW4iPgogICAgPCEtLSDQk9C70L7QsdCw0LvRjNC90YvQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyAtINC30LDQs9GA0YPQttCw0Y7RgtGB0Y8g0YHRgNCw0LfRgyAtLT4KICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvbmF2aWdhdGlvbiI+PC9hcHBsaWNhdGlvbj4KICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvc2lkZWJhciI+PC9hcHBsaWNhdGlvbj4KCiAgICA8IS0tINCf0YDQuNC70L7QttC10L3QuNGPINC/0L4g0LzQsNGA0YjRgNGD0YLQsNC8IC0g0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDQu9C10L3QuNCy0L4g0L/RgNC4INC/0LXRgNC10YXQvtC00LUgLS0+CiAgICA8cm91dGUgcGF0aD0iYXV0aG9yaXphdGlvbiI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvYXV0aG9yaXphdGlvbiIgZXJyb3I9ImNvbW1vbkVycm9yIiBsb2FkZXI9ImxhenlMb2FkZXIiPjwvYXBwbGljYXRpb24+CiAgICA8L3JvdXRlPgogICAgPHJvdXRlIHBhdGg9ImRhc2hib2FyZCI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvZGFzaGJvYXJkIiBlcnJvcj0iY29tbW9uRXJyb3IiIGxvYWRlcj0ibGF6eUxvYWRlciI+PC9hcHBsaWNhdGlvbj4KICAgIDwvcm91dGU+CiAgICA8cm91dGUgcGF0aD0ic2VydmljZS1kZXNrIj4KICAgICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9zZXJ2aWNlLWRlc2siIGVycm9yPSJjb21tb25FcnJvciIgbG9hZGVyPSJsYXp5TG9hZGVyIj48L2FwcGxpY2F0aW9uPgogICAgPC9yb3V0ZT4KICAgIDxyb3V0ZSBwYXRoPSJzZXJ2aWNlcyI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvc2VydmljZXMiIGVycm9yPSJjb21tb25FcnJvciIgbG9hZGVyPSJsYXp5TG9hZGVyIj48L2FwcGxpY2F0aW9uPgogICAgPC9yb3V0ZT4KICAgIDxyb3V0ZSBwYXRoPSJiMmIiPgogICAgICA8YXBwbGljYXRpb24gbmFtZT0iQG51YmVzL2IyYiIgZXJyb3I9ImNvbW1vbkVycm9yIiBsb2FkZXI9ImxhenlMb2FkZXIiPjwvYXBwbGljYXRpb24+CiAgICA8L3JvdXRlPgogICAgPHJvdXRlIHBhdGg9Im1vbml0b3JpbmctZ3JhZmFuYSI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvbW9uaXRvcmluZy1ncmFmYW5hIiBlcnJvcj0iY29tbW9uRXJyb3IiIGxvYWRlcj0ibGF6eUxvYWRlciI+PC9hcHBsaWNhdGlvbj4KICAgIDwvcm91dGU+CiAgICA8cm91dGUgcGF0aD0iZmVlZGJhY2stcG9ydGFsIj4KICAgICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9mZWVkYmFjay1wb3J0YWwiIGVycm9yPSJjb21tb25FcnJvciIgbG9hZGVyPSJsYXp5TG9hZGVyIj48L2FwcGxpY2F0aW9uPgogICAgPC9yb3V0ZT4KCiAgICA8IS0tINCk0L7QvdC+0LLRi9C1INGB0LXRgNCy0LjRgdGLIC0g0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDRgdGA0LDQt9GDIC0tPgogICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9ub3RpZmljYXRpb24tYXBpIj48L2FwcGxpY2F0aW9uPgogICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9zaGFyZWQtd29ya2VyIj48L2FwcGxpY2F0aW9uPgoKICAgIDxyb3V0ZSBwYXRoPSIvIiBleGFjdCAvPgogICAgPHJlZGlyZWN0IGZyb209Ii8iIHRvPSJkYXNoYm9hcmQiIC8+CgogICAgPHJvdXRlIGRlZmF1bHQ+CiAgICAgIDxzZWN0aW9uIGNsYXNzPSJweS01IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIHRleHQtY2VudGVyIj4KICAgICAgICAgIDxoMT40MDQ8L2gxPgogICAgICAgICAgPGgyPlBhZ2UgTm90IEZvdW5kPC9oMj4KICAgICAgICAgIDxwPlNvcnJ5LCB0aGUgcGFnZSB5b3UgYXJlIGxvb2tpbmcgZm9yIGRvZXMgbm90IGV4aXN0LjwvcD4KICAgICAgICAgIDxhIGhyZWY9Ii9kYXNoYm9hcmQiIGNsYXNzPSJ0ZXh0LXdoaXRlIHRleHQtZGVjb3JhdGlvbi1ub25lIHB4LTQgcHktMyBiZy1zdWNjZXNzIGQtaW5saW5lLWJsb2NrIG10LTIgcm91bmRlZCI+CiAgICAgICAgICAgINCd0LAg0LPQu9Cw0LLQvdGD0Y4KICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9zZWN0aW9uPgogICAgPC9yb3V0ZT4KICA8L21haW4+Cjwvc2luZ2xlLXNwYS1yb3V0ZXI+CmAsSnQ9ZSgpLFl0PSgpPT5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgcm9vdC1hcHAtZGVidWdgKT09PWAxYCwkPSguLi5lKT0+e1l0KCkmJmNvbnNvbGUuaW5mbyguLi5lKX07KCgpPT57JChgW3Jvb3QtYXBwXSBzdGFydFJvb3RBcHAgYmVnaW5gKTtsZXQgZTt0cnl7ZT1rdChxdCx7bG9hZGVyczp7bGF6eUxvYWRlcjpgPGRpdi8+YH0scHJvcHM6e30sZXJyb3JzOntjb21tb25FcnJvcjpgPGgyIGNsYXNzPSdwdC0zIHBzLTMgdGV4dC1kYW5nZXInPtCf0YDQuNC70L7QttC10L3QuNC1INC90LXQtNC+0YHRgtGD0L/QvdC+INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YIhPC9oMj5gfX0pLCQoYFtyb290LWFwcF0gY29uc3RydWN0Um91dGVzIE9LYCl9Y2F0Y2goZSl7dGhyb3cgY29uc29sZS5lcnJvcihgW3Jvb3QtYXBwXSBjb25zdHJ1Y3RSb3V0ZXMgRkFJTEVEOmAsZSksZX1sZXQgdDt0cnl7dD1VdCh7cm91dGVzOmUsbG9hZEFwcCh7bmFtZTplfSl7cmV0dXJuIGF0KCgpPT5pbXBvcnQoc3QoZSkpLFtdKX19KSwkKGBbcm9vdC1hcHBdIGNvbnN0cnVjdEFwcGxpY2F0aW9ucyBPSywgY291bnQ6YCx0Lmxlbmd0aCl9Y2F0Y2goZSl7dGhyb3cgY29uc29sZS5lcnJvcihgW3Jvb3QtYXBwXSBjb25zdHJ1Y3RBcHBsaWNhdGlvbnMgRkFJTEVEOmAsZSksZX10LmZvckVhY2goZT0+e2UuY3VzdG9tUHJvcHM9ey4uLmUuY3VzdG9tUHJvcHMsZXZlbnRCdXM6SnR9fSksJChgW3Jvb3QtYXBwXSBjdXN0b21Qcm9wcy5ldmVudEJ1cyBzZXQgZm9yIGFsbCBhcHBzYCk7bGV0IHI7dHJ5e3I9TnQoe3JvdXRlczplLGFwcGxpY2F0aW9uczp0fSksJChgW3Jvb3QtYXBwXSBjb25zdHJ1Y3RMYXlvdXRFbmdpbmUgT0tgKX1jYXRjaChlKXt0aHJvdyBjb25zb2xlLmVycm9yKGBbcm9vdC1hcHBdIGNvbnN0cnVjdExheW91dEVuZ2luZSBGQUlMRUQ6YCxlKSxlfXRyeXt0LmZvckVhY2goVmUpLCQoYFtyb290LWFwcF0gcmVnaXN0ZXJBcHBsaWNhdGlvbiBPS2ApfWNhdGNoKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtyb290LWFwcF0gcmVnaXN0ZXJBcHBsaWNhdGlvbiBGQUlMRUQ6YCxlKSxlfXIuYWN0aXZhdGUoKSwkKGBbcm9vdC1hcHBdIGxheW91dEVuZ2luZS5hY3RpdmF0ZSBPS2ApLFFlKHt1cmxSZXJvdXRlT25seTohMH0pLCQoYFtyb290LWFwcF0gc2luZ2xlLXNwYSBzdGFydCBPS2ApLG4oKSwkKGBbcm9vdC1hcHBdIHN0YXJ0VmVyc2lvblVwZGF0ZXIgT0tgKSxodCgpLmNhdGNoKGU9Pntjb25zb2xlLmVycm9yKGBbcm9vdC1hcHBdIHN0YXJ0SW1wb3J0bWFwVXBkYXRlciBmYWlsZWQ6YCxlKX0pLCQoYFtyb290LWFwcF0gc3RhcnRJbXBvcnRtYXBVcGRhdGVyIGxhdW5jaGVkIChhc3luYylgKX0pKCk7", - "encoding": "base64" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": 0, - "_transferSize": 0, - "_error": null, - "_fetchedViaServiceWorker": true, - "_serviceWorkerResponseSource": "http-cache" - }, - "serverIPAddress": "", - "startedDateTime": "2026-05-30T04:35:25.040Z", - "time": 39.64799997629598, - "timings": { - "blocked": 20.400000008739532, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0, - "wait": 15.388999978095294, - "receive": 3.8589999894611537, - "_blocked_queueing": 5.184000008739531, - "_workerStart": 0.002, - "_workerReady": 15.216, - "_workerFetchStart": 15.216, - "_workerRespondWithSettled": 30.441 - }, - "_fromCache": "disk", - "pageref": "page_3" - }, - { - "_initiator": { - "type": "parser", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "lineNumber": 14 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/assets/index-VIpGGraV.css", - "httpVersion": "http/1.1", - "headers": [ - { - "name": "Origin", - "value": "https://deck-test.ngcloud.ru" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "Referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "DNT", - "value": "1" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/1.1", - "headers": [ - { - "name": "Content-Type", - "value": "text/css" - } - ], - "cookies": [], - "content": { - "size": 1970, - "mimeType": "text/css", - "text": "@font-face{font-family:Ubuntu;font-weight:300;font-style:normal;src:url(/assets/Ubuntu-Light-aUGsJZOE.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:300;font-style:italic;src:url(/assets/Ubuntu-LightItalic-BfM2gN_f.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:400;font-style:normal;src:url(/assets/Ubuntu-Regular-QO2cqVZ2.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:400;font-style:italic;src:url(/assets/Ubuntu-Italic-B6wntuzF.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:500;font-style:normal;src:url(/assets/Ubuntu-Medium-DnOUJ_CQ.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:500;font-style:italic;src:url(/assets/Ubuntu-MediumItalic-CELvDnK9.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:700;font-style:normal;src:url(/assets/Ubuntu-Bold-CxbGmmhf.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:700;font-style:italic;src:url(/assets/Ubuntu-BoldItalic-DS3aS511.woff2)format(\"woff2\")}*,:before,:after{box-sizing:border-box}:root{--page-height:auto;--max-content-height:auto}body{margin:0;font-family:Ubuntu,sans-serif;font-size:13px}.single-spa-main{grid-template-columns:min-content 1fr;grid-template-rows:min-content 0 minmax(0, var(--max-content-height));min-height:100vh;height:var(--page-height);display:grid}.single-spa-main input,.single-spa-main select,.single-spa-main textarea,.single-spa-main [data-slot=form-control]{scroll-margin-top:80px}.single-spa-main>div{grid-template-rows:subgrid;width:100%;display:grid;position:relative;overflow:hidden}.single-spa-main>div:first-of-type{grid-area:1/1/auto/-1}.single-spa-main>div:nth-of-type(2){grid-area:3/1;transform:translate(0)}.single-spa-main>div:nth-of-type(3){grid-area:3/2}.single-spa-main>div[id*=notification-api],.single-spa-main>div[id*=shared-worker],.single-spa-main>div[id*=common-css]{display:none}html,body,.single-spa-main,[class*=overflow]{scroll-padding-top:80px}\n" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 0, - "_error": null, - "_fetchedViaServiceWorker": true, - "_serviceWorkerResponseSource": "fallback-code" - }, - "serverIPAddress": "", - "startedDateTime": "2026-05-30T04:35:25.042Z", - "time": 40.17799999564886, - "timings": { - "blocked": 19.562000000763685, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0, - "wait": 20.281000005166977, - "receive": 0.3349999897181988, - "_blocked_queueing": 3.5700000007636845, - "_workerStart": 0.002, - "_workerReady": 15.992, - "_workerFetchStart": 15.992, - "_workerRespondWithSettled": 36.141 - }, - "pageref": "page_3" - }, - { - "_initiator": { - "type": "parser", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "lineNumber": 22 - }, - "_priority": "High", - "_resourceType": "script", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/libs/import-map-overrides.js", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "deck-test.ngcloud.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/libs/import-map-overrides.js" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=1" - }, - { - "name": "referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "script" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "access-control-allow-headers", - "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" - }, - { - "name": "access-control-allow-methods", - "value": "GET, OPTIONS" - }, - { - "name": "access-control-allow-origin", - "value": "*" - }, - { - "name": "cache-control", - "value": "max-age=31536000" - }, - { - "name": "cache-control", - "value": "public, max-age=31536000, immutable" - }, - { - "name": "content-encoding", - "value": "br" - }, - { - "name": "content-length", - "value": "14251" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "content-type", - "value": "application/javascript" - }, - { - "name": "date", - "value": "Sat, 30 May 2026 04:35:24 GMT" - }, - { - "name": "etag", - "value": "\"6a07292d-37ab\"" - }, - { - "name": "expires", - "value": "Sun, 30 May 2027 04:35:24 GMT" - }, - { - "name": "last-modified", - "value": "Fri, 15 May 2026 14:09:49 GMT" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "vary", - "value": "Accept-Encoding" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - } - ], - "cookies": [], - "content": { - "size": 54245, - "mimeType": "application/javascript", - "text": "/* import-map-overrides@6.1.0 */\n!function(){\"use strict\";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=0;--i){var a=this.tryEntries[i],l=a.completion;if(\"root\"===a.tryLoc)return o(\"end\");if(a.tryLoc<=this.prev){var u=r.call(a,\"catchLoc\"),s=r.call(a,\"finallyLoc\");if(u&&s){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),I(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if(\"throw\"===r.type){var o=r.arg;I(n)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,n,r){return this.delegate={iterator:C(t),resultName:n,nextLoc:r},\"next\"===this.method&&(this.arg=e),g}},t}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=n){var r,o,i,a,l=[],u=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t);else for(;!(u=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(s)throw o}}return l}}(e,t)||g(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function h(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=typeof n)return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}function v(e){return v=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},v(e)}function g(t,n){if(t){if(\"string\"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}function _(e){var t=\"function\"==typeof Map?new Map:void 0;return _=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf(\"[native code]\")}catch(t){return\"function\"==typeof e}}(e))return e;if(\"function\"!=typeof e)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(s())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var o=new(e.bind.apply(e,r));return n&&f(o,n.prototype),o}(e,arguments,l(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),f(n,e)},_(e)}var y;function b(e,t){if(Array.isArray(e)){for(var n=0;n=0;throw Error(\"Can't call includes on \".concat(v(e)))}var w,x=\"import-map-override:\",O=\"import-map-overrides-disabled\",k=\"import-map-overrides-external-maps\",M=\"data-is-importmap-override\",E=\"import-map-overrides-domains\",N=\"allowlist:\",S=\"denylist:\",P=document.querySelector('meta[name=\"importmap-type\"]'),I=document.querySelector('meta[name=\"'.concat(E,'\"]')),U={},C=null!==(y=null==P?void 0:P.getAttribute(\"content\"))&&void 0!==y?y:\"importmap\";if(I){var L=I.getAttribute(\"content\");L||console.warn(\"Invalid \".concat(E,\" meta element - content required.\"));var j=function(e){return new RegExp(function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected a string\");return e.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}(e).replace(\"\\\\*\",\".+\")).test(window.location.hostname)};0===L.indexOf(N)?w=!L.slice(10).split(\",\").some(j):0===L.indexOf(S)?w=L.slice(9).split(\",\").some(j):console.log(\"Invalid \".concat(E,\" meta content attribute - must start with \").concat(N,\" or \").concat(S))}else w=!1;function D(e,t){return Object.entries(e).reduce((function(e,n){var r=m(n,2),o=r[0],i=r[1];return e[o]=function(e,t){try{return new URL(e,t).href}catch(t){return e}}(i,t),e}),{})}(function(){try{return localStorage.getItem(\"test\"),!0}catch(e){return!1}})()||(console.warn(\"Disabling import-map-overrides, since local storage is not readable\"),w=!0),w||function(){var e,n=!!P&&P.hasAttribute(\"server-cookie\"),r=!!P&&P.hasAttribute(\"server-only\"),o=!!P&&P.hasAttribute(\"allow-query-param-override\");window.importMapOverrides={addOverride:function(e,t){/^\\d+$/g.test(t)&&(t=i.getUrlFromPort(e,t));var r=x+e;return localStorage.setItem(r,t),n&&(document.cookie=\"\".concat(r,\"=\").concat(t)),l(),i.getOverrideMap()},getOverrideMap:function(){for(var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t={imports:{},scopes:{}},n=i.getDisabledOverrides(),r=function(r,o){!e&&n.indexOf(r)>=0||(t.imports[r]=o)},a=0;a1&&void 0!==arguments[1]?arguments[1]:window.location.href;e=e.replace(/[\\[\\]]/g,\"\\\\$&\");var n=new RegExp(\"[?&]\"+e+\"(=([^&#]*)|&|#|$)\").exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\\+/g,\" \")):\"\":null}(\"imo\",window.location!=window.parent.location?document.referrer:window.location.href);if(u){var s;try{s=JSON.parse(u)}catch(e){throw Error(\"Invalid importMap query param - text content must be json\")}Object.keys(s.imports).forEach((function(e){r(e,s.imports[e])}))}}return t},removeOverride:function(e){var t=x+e,r=null!==localStorage.getItem(t);return localStorage.removeItem(t),n&&(document.cookie=\"\".concat(t,\"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;\")),i.enableOverride(e),l(),r},getOverrideScopes:function(){return function(e){return function(){var n=this,r=arguments;return new Promise((function(o,i){var a=e.apply(n,r);function l(e){t(a,o,i,l,u,\"next\",e)}function u(e){t(a,o,i,l,u,\"throw\",e)}l(void 0)}))}}(p().mark((function e(){var t,n,r,o,a,l,u,s,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={},e.next=3,i.getDefaultMap();case 3:for(o in n=e.sent,(r=i.getOverrideMap()).imports)if(a=n.imports[o])for(c in l=new URL(a,window.location.href).href,u=new URL(r.imports[o],window.location.href).href,s=u.slice(0,u.lastIndexOf(\"/\"))+\"/\",n.scopes||{})l.startsWith(c)&&(t[s]=d(d({},t[s]||{}),n.scopes[c]));return e.abrupt(\"return\",{scopes:t});case 7:case\"end\":return e.stop()}}),e)})))()},resetOverrides:function(){return Object.keys(i.getOverrideMap(!0).imports).forEach((function(e){i.removeOverride(e)})),localStorage.removeItem(O),localStorage.removeItem(k),l(),i.getOverrideMap()},hasOverrides:function(){return Object.keys(i.getOverrideMap().imports).length>0},getUrlFromPort:function(e,t){var n=e.replace(/@/g,\"\").replace(/\\//g,\"-\");return\"//localhost:\".concat(t,\"/\").concat(n,\".js\")},enableUI:function(){var e=\"import-map-overrides-full\",t=\"show-when-local-storage\",n=document.querySelector(e);n||((n=document.createElement(e)).setAttribute(t,\"true\"),document.body.appendChild(n));var r=n.getAttribute(t);r&&(localStorage.setItem(r,!0),n.renderWithPreact())},mergeImportMap:function(e,t){var n={imports:{},scopes:{}};for(var r in e.imports)n.imports[r]=e.imports[r];for(var o in t.imports)n.imports[o]=t.imports[o];for(var i in e.scopes)n.scopes[i]=e.scopes[i];for(var a in t.scopes)n.scopes[a]=t.scopes[a];return n},resetDefaultMap:function(){e=null},getDefaultMap:function(){return e||(e=Array.prototype.reduce.call(document.querySelectorAll('script[type=\"'.concat(C,'\"], script[type=\"overridable-importmap\"]')),(function(e,t){return t.hasAttribute(M)?e:(n=t.src?y(t.src):Promise.resolve(JSON.parse(t.textContent)),Promise.all([e,n]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(n,r)})));var n}),Promise.resolve({imports:{},scopes:{}})))},getCurrentPageMap:function(){return Promise.all([i.getDefaultMap(),i.getExternalOverrideMap(i.getCurrentPageExternalOverrides())]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(i.mergeImportMap(n,r),c)}))},getCurrentPageExternalOverrides:function(){var e=[];return document.querySelectorAll(\"[\".concat(M,']:not([id=\"import-map-overrides\"])')).forEach((function(t){e.push(t.src)})),e},getNextPageMap:function(){return Promise.all([i.getDefaultMap(),i.getExternalOverrideMap()]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(i.mergeImportMap(n,r),i.getOverrideMap())}))},disableOverride:function(e){var t=i.getDisabledOverrides();return!b(t,e)&&(localStorage.setItem(O,JSON.stringify(t.concat(e))),l(),!0)},enableOverride:function(e){var t=i.getDisabledOverrides(),n=t.indexOf(e);return n>=0&&(t.splice(n,1),localStorage.setItem(O,JSON.stringify(t)),l(),!0)},getDisabledOverrides:function(){var e=localStorage.getItem(O);return e?JSON.parse(e):[]},isDisabled:function(e){return b(i.getDisabledOverrides(),e)},getExternalOverrides:function(){var e=localStorage.getItem(k);return e?JSON.parse(e).sort():[]},addExternalOverride:function(e){e=new URL(e,document.baseURI).href;var t=i.getExternalOverrides();return!b(t,e)&&(localStorage.setItem(k,JSON.stringify(t.concat(e))),l(),!0)},removeExternalOverride:function(e){var t=i.getExternalOverrides();return!!b(t,e)&&(localStorage.setItem(k,JSON.stringify(t.filter((function(t){return t!==e})))),l(),!0)},getExternalOverrideMap:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.getExternalOverrides()).reduce((function(e,t){var n=U[t]||(U[t]=y(t));return Promise.all([e,n]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(n,r)}))}),Promise.resolve({imports:{},scopes:{}}))},isExternalMapValid:function(e){return(U[e]||(U[e]=y(e))).then((function(){return!b(i.invalidExternalMaps,e)}))},invalidExternalMaps:[]};var i=window.importMapOverrides,a=!0;try{CustomEvent?new CustomEvent(\"a\"):a=!1}catch(e){a=!1}function l(){u(\"change\")}function u(e){setTimeout((function(){var t=\"import-map-overrides:\".concat(e),n=a?new CustomEvent(t):document.createEvent(\"CustomEvent\");a||n.initCustomEvent(t,!0,!0,null),window.dispatchEvent(n)}))}var s,c=i.getOverrideMap(),f=i.getExternalOverrides();if(!r){var h=document.querySelector('script[type=\"overridable-importmap\"]');if(!(s=h)){var v=document.querySelectorAll('script[type=\"'.concat(C,'\"]'));s=v?v[v.length-1]:null}if(h){if(h.src)throw Error('import-map-overrides: external import maps with type=\"overridable-importmap\" are not supported');var g;try{g=JSON.parse(h.textContent)}catch(e){throw Error('Invalid \n\n\n \n \n \n \n Личный кабинет\n \n \n \n \n \n \n \n \n \n\n" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 0, - "_error": null, - "_fetchedViaServiceWorker": true, - "_serviceWorkerResponseSource": "fallback-code" - }, - "serverIPAddress": "", - "startedDateTime": "2026-05-30T04:35:24.993Z", - "time": 42.025000031571835, - "timings": { - "blocked": 5.319000020686537, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0, - "wait": 28.24699997755885, - "receive": 8.459000033326447, - "_blocked_queueing": 0.362000020686537, - "_workerStart": -1, - "_workerReady": -1, - "_workerFetchStart": 4.957, - "_workerRespondWithSettled": 32.943 - }, - "pageref": "page_3" - }, - { - "_initiator": { - "type": "parser", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "lineNumber": 13 - }, - "_priority": "High", - "_resourceType": "script", - "cache": {}, - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/spa.js", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "Origin", - "value": "https://deck-test.ngcloud.ru" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "Referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "DNT", - "value": "1" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "x-cache-status", - "value": "HIT" - }, - { - "name": "vary", - "value": "Accept-Encoding" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "etag", - "value": "\"974a449bd2f06c060436c774dc1a2204\"" - }, - { - "name": "access-control-allow-methods", - "value": "GET, HEAD, OPTIONS" - }, - { - "name": "x-amz-request-id", - "value": "tx000009a46a5debf4f7940-006a197907-4fc114-dc1" - }, - { - "name": "accept-ranges", - "value": "bytes" - }, - { - "name": "access-control-allow-origin", - "value": "*" - }, - { - "name": "content-length", - "value": "44928" - }, - { - "name": "date", - "value": "Fri, 29 May 2026 18:27:09 GMT" - }, - { - "name": "x-rgw-object-type", - "value": "Normal" - }, - { - "name": "content-type", - "value": "text/javascript" - }, - { - "name": "last-modified", - "value": "Fri, 15 May 2026 14:10:30 GMT" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "access-control-allow-headers", - "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range" - } - ], - "cookies": [], - "content": { - "size": 44928, - "mimeType": "text/javascript", - "text": "KGZ1bmN0aW9uKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApLnJlbExpc3Q7aWYoZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApKXJldHVybjtmb3IobGV0IGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXWApKW4oZSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgdCBvZiBlKWlmKHQudHlwZT09PWBjaGlsZExpc3RgKWZvcihsZXQgZSBvZiB0LmFkZGVkTm9kZXMpZS50YWdOYW1lPT09YExJTktgJiZlLnJlbD09PWBtb2R1bGVwcmVsb2FkYCYmbihlKX0pLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSk7ZnVuY3Rpb24gdChlKXtsZXQgdD17fTtyZXR1cm4gZS5pbnRlZ3JpdHkmJih0LmludGVncml0eT1lLmludGVncml0eSksZS5yZWZlcnJlclBvbGljeSYmKHQucmVmZXJyZXJQb2xpY3k9ZS5yZWZlcnJlclBvbGljeSksZS5jcm9zc09yaWdpbj09PWB1c2UtY3JlZGVudGlhbHNgP3QuY3JlZGVudGlhbHM9YGluY2x1ZGVgOmUuY3Jvc3NPcmlnaW49PT1gYW5vbnltb3VzYD90LmNyZWRlbnRpYWxzPWBvbWl0YDp0LmNyZWRlbnRpYWxzPWBzYW1lLW9yaWdpbmAsdH1mdW5jdGlvbiBuKGUpe2lmKGUuZXApcmV0dXJuO2UuZXA9ITA7bGV0IG49dChlKTtmZXRjaChlLmhyZWYsbil9fSkoKSxjb25zb2xlLmluZm8oYEBudWJlcy9yb290LWFwcEAwLjIuMjUgbG9hZGVkYCk7ZnVuY3Rpb24gZShlKXtyZXR1cm57YWxsOmV8fD1uZXcgTWFwLG9uOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5nZXQodCk7cj9yLnB1c2gobik6ZS5zZXQodCxbbl0pfSxvZmY6ZnVuY3Rpb24odCxuKXt2YXIgcj1lLmdldCh0KTtyJiYobj9yLnNwbGljZShyLmluZGV4T2Yobik+Pj4wLDEpOmUuc2V0KHQsW10pKX0sZW1pdDpmdW5jdGlvbih0LG4pe3ZhciByPWUuZ2V0KHQpO3ImJnIuc2xpY2UoKS5tYXAoZnVuY3Rpb24oZSl7ZShuKX0pLChyPWUuZ2V0KGAqYCkpJiZyLnNsaWNlKCkubWFwKGZ1bmN0aW9uKGUpe2UodCxuKX0pfX19dmFyIHQ9ZSgpLG49KCk9Pntjb25zb2xlLmxvZyhgU3RhcnRpbmcgdmVyc2lvbi11cGRhdGVyYCx0KTtsZXQgZT0hMTt0Lm9uKGB2ZXJzaW9uOmF2YWlsYWJsZWAsdD0+e2U9ITA7bGV0IG49dCYmYHBhY2thZ2VzYGluIHQmJnQucGFja2FnZXM/Lmxlbmd0aD9gIOKAlCB1cGRhdGVkIHBhY2thZ2VzOiAke3QucGFja2FnZXMuam9pbihgLCBgKX1gOmBgO2NvbnNvbGUuaW5mbyhgW3ZlcnNpb24tdXBkYXRlcl0gbmV3IHZlcnNpb24gYXZhaWxhYmxlLCB3aWxsIHJlbG9hZCBvbiBuZXh0IHJvdXRlIGNoYW5nZWAsdD8/YGApLG4mJmNvbnNvbGUuaW5mbyhgW3ZlcnNpb24tdXBkYXRlcl0ke259YCl9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtcm91dGluZy1ldmVudGAsdD0+e2lmKCFlKXJldHVybjtsZXR7b2xkVXJsOm4sbmV3VXJsOnJ9PXQuZGV0YWlsO24hPT1yJiZsb2NhdGlvbi5yZWxvYWQoKX0pfSxyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGdldCBzdGFydCgpe3JldHVybiBRZX0sZ2V0IGVuc3VyZUpRdWVyeVN1cHBvcnQoKXtyZXR1cm4gTWV9LGdldCBzZXRCb290c3RyYXBNYXhUaW1lKCl7cmV0dXJuIGhlfSxnZXQgc2V0TW91bnRNYXhUaW1lKCl7cmV0dXJuIGdlfSxnZXQgc2V0VW5tb3VudE1heFRpbWUoKXtyZXR1cm4gX2V9LGdldCBzZXRVbmxvYWRNYXhUaW1lKCl7cmV0dXJuIHZlfSxnZXQgcmVnaXN0ZXJBcHBsaWNhdGlvbigpe3JldHVybiBWZX0sZ2V0IHVucmVnaXN0ZXJBcHBsaWNhdGlvbigpe3JldHVybiBVZX0sZ2V0IGdldE1vdW50ZWRBcHBzKCl7cmV0dXJuIFJlfSxnZXQgZ2V0QXBwU3RhdHVzKCl7cmV0dXJuIHplfSxnZXQgdW5sb2FkQXBwbGljYXRpb24oKXtyZXR1cm4gV2V9LGdldCBjaGVja0FjdGl2aXR5RnVuY3Rpb25zKCl7cmV0dXJuIEhlfSxnZXQgZ2V0QXBwTmFtZXMoKXtyZXR1cm4gUn0sZ2V0IHBhdGhUb0FjdGl2ZVdoZW4oKXtyZXR1cm4gcWV9LGdldCBuYXZpZ2F0ZVRvVXJsKCl7cmV0dXJuIHhlfSxnZXQgcGF0Y2hIaXN0b3J5QXBpKCl7cmV0dXJuIGtlfSxnZXQgdHJpZ2dlckFwcENoYW5nZSgpe3JldHVybiBZZX0sZ2V0IGFkZEVycm9ySGFuZGxlcigpe3JldHVybiBjfSxnZXQgcmVtb3ZlRXJyb3JIYW5kbGVyKCl7cmV0dXJuIGx9LGdldCBtb3VudFJvb3RQYXJjZWwoKXtyZXR1cm4gZmV9LGdldCBOT1RfTE9BREVEKCl7cmV0dXJuIGZ9LGdldCBMT0FESU5HX1NPVVJDRV9DT0RFKCl7cmV0dXJuIHB9LGdldCBOT1RfQk9PVFNUUkFQUEVEKCl7cmV0dXJuIG19LGdldCBCT09UU1RSQVBQSU5HKCl7cmV0dXJuIGh9LGdldCBOT1RfTU9VTlRFRCgpe3JldHVybiBnfSxnZXQgTU9VTlRJTkcoKXtyZXR1cm4gX30sZ2V0IFVQREFUSU5HKCl7cmV0dXJuIGVlfSxnZXQgTE9BRF9FUlJPUigpe3JldHVybiB0ZX0sZ2V0IE1PVU5URUQoKXtyZXR1cm4gdn0sZ2V0IFVOTE9BRElORygpe3JldHVybiBifSxnZXQgVU5NT1VOVElORygpe3JldHVybiB5fSxnZXQgU0tJUF9CRUNBVVNFX0JST0tFTigpe3JldHVybiB4fX0pLGk9KHR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e30pLkN1c3RvbUV2ZW50LGE9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bmV3IGkoYGNhdGAse2RldGFpbDp7Zm9vOmBiYXJgfX0pO3JldHVybiBlLnR5cGU9PT1gY2F0YCYmZS5kZXRhaWwuZm9vPT09YGJhcmB9Y2F0Y2h7fXJldHVybiExfSgpP2k6dHlwZW9mIGRvY3VtZW50PGB1YCYmdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50PT1gZnVuY3Rpb25gP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoYEN1c3RvbUV2ZW50YCk7cmV0dXJuIHQ/bi5pbml0Q3VzdG9tRXZlbnQoZSx0LmJ1YmJsZXMsdC5jYW5jZWxhYmxlLHQuZGV0YWlsKTpuLmluaXRDdXN0b21FdmVudChlLCExLCExLHZvaWQgMCksbn06ZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO3JldHVybiBuLnR5cGU9ZSx0PyhuLmJ1YmJsZXM9ISF0LmJ1YmJsZXMsbi5jYW5jZWxhYmxlPSEhdC5jYW5jZWxhYmxlLG4uZGV0YWlsPXQuZGV0YWlsKToobi5idWJibGVzPSExLG4uY2FuY2VsYWJsZT0hMSxuLmRldGFpbD12b2lkIDApLG59LG89W107ZnVuY3Rpb24gcyhlLHQsbil7bGV0IHI9ZChlLHQsbik7by5sZW5ndGg/by5mb3JFYWNoKChlPT5lKHIpKSk6c2V0VGltZW91dCgoKCk9Pnt0aHJvdyByfSkpfWZ1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUhPWBmdW5jdGlvbmApdGhyb3cgRXJyb3IodSgyOCwhMSkpO28ucHVzaChlKX1mdW5jdGlvbiBsKGUpe2lmKHR5cGVvZiBlIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoMjksITEpKTtsZXQgdD0hMTtyZXR1cm4gbz1vLmZpbHRlcigobj0+e2xldCByPW49PT1lO3JldHVybiB0fHw9ciwhcn0pKSx0fWZ1bmN0aW9uIHUoZSx0LC4uLm4pe3JldHVybmBzaW5nbGUtc3BhIG1pbmlmaWVkIG1lc3NhZ2UgIyR7ZX06ICR7dD90K2AgYDpgYH1TZWUgaHR0cHM6Ly9zaW5nbGUtc3BhLmpzLm9yZy9lcnJvci8/Y29kZT0ke2V9JHtuLmxlbmd0aD9gJmFyZz0ke24uam9pbihgJmFyZz1gKX1gOmBgfWB9ZnVuY3Rpb24gZChlLHQsbil7bGV0IHI9YCR7dyh0KX0gJyR7Qyh0KX0nIGRpZWQgaW4gc3RhdHVzICR7dC5zdGF0dXN9OiBgLGk7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXt0cnl7ZS5tZXNzYWdlPXIrZS5tZXNzYWdlfWNhdGNoe31pPWV9ZWxzZXtjb25zb2xlLndhcm4odSgzMCwhMSx0LnN0YXR1cyxDKHQpKSk7dHJ5e2k9RXJyb3IocitKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7aT1lfX1yZXR1cm4gaS5hcHBPclBhcmNlbE5hbWU9Qyh0KSx0LnN0YXR1cz1uLGl9dmFyIGY9YE5PVF9MT0FERURgLHA9YExPQURJTkdfU09VUkNFX0NPREVgLG09YE5PVF9CT09UU1RSQVBQRURgLGg9YEJPT1RTVFJBUFBJTkdgLGc9YE5PVF9NT1VOVEVEYCxfPWBNT1VOVElOR2Asdj1gTU9VTlRFRGAsZWU9YFVQREFUSU5HYCx5PWBVTk1PVU5USU5HYCxiPWBVTkxPQURJTkdgLHRlPWBMT0FEX0VSUk9SYCx4PWBTS0lQX0JFQ0FVU0VfQlJPS0VOYDtmdW5jdGlvbiBTKGUpe3JldHVybiBlLnN0YXR1cz09PXZ9ZnVuY3Rpb24gbmUoZSl7dHJ5e3JldHVybiBlLmFjdGl2ZVdoZW4od2luZG93LmxvY2F0aW9uKX1jYXRjaCh0KXtyZXR1cm4gcyh0LGUseCksITF9fWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGUubmFtZX1mdW5jdGlvbiByZShlKXtyZXR1cm4hIWUudW5tb3VudFRoaXNQYXJjZWx9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gcmUoZSk/YHBhcmNlbGA6YGFwcGxpY2F0aW9uYH1mdW5jdGlvbiBUKCl7Zm9yKGxldCBlPWFyZ3VtZW50cy5sZW5ndGgtMTtlPjA7ZS0tKWZvcihsZXQgdCBpbiBhcmd1bWVudHNbZV0pdCE9PWBfX3Byb3RvX19gJiYoYXJndW1lbnRzW2UtMV1bdF09YXJndW1lbnRzW2VdW3RdKTtyZXR1cm4gYXJndW1lbnRzWzBdfWZ1bmN0aW9uIEUoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylpZih0KGVbbl0pKXJldHVybiBlW25dO3JldHVybiBudWxsfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIGUmJih0eXBlb2YgZT09YGZ1bmN0aW9uYHx8KHQ9ZSxBcnJheS5pc0FycmF5KHQpJiYhRSh0LChlPT50eXBlb2YgZSE9YGZ1bmN0aW9uYCkpKSk7dmFyIHR9ZnVuY3Rpb24gTyhlLHQpe2xldCBuPWVbdF18fFtdO249QXJyYXkuaXNBcnJheShuKT9uOltuXSxuLmxlbmd0aD09PTAmJihuPVsoKT0+UHJvbWlzZS5yZXNvbHZlKCldKTtsZXQgcj13KGUpLGk9QyhlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVkdWNlKCgobixhLG8pPT5uLnRoZW4oKCgpPT57bGV0IG49YShlKTtyZXR1cm4gaWUobik/bjpQcm9taXNlLnJlamVjdCh1KDE1LCExLHIsaSx0LG8pKX0pKSksUHJvbWlzZS5yZXNvbHZlKCkpfX1mdW5jdGlvbiBpZShlKXtyZXR1cm4gZSYmdHlwZW9mIGUudGhlbj09YGZ1bmN0aW9uYCYmdHlwZW9mIGUuY2F0Y2g9PWBmdW5jdGlvbmB9dmFyIGFlPVtdO2Z1bmN0aW9uIG9lKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT5lLnN0YXR1cz09PWBOT1RfQk9PVFNUUkFQUEVEYD8oZS5zdGF0dXM9aCxlLmJvb3RzdHJhcD9NKGUsYGJvb3RzdHJhcGApLnRoZW4obikuY2F0Y2goKG49PntpZih0KXRocm93IGQobixlLHgpO3JldHVybiBzKG4sZSx4KSxlfSkpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4obikpOmUpKTtmdW5jdGlvbiBuKCl7cmV0dXJuIGUuc3RhdHVzPWcsZX19ZnVuY3Rpb24gayhlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2lmKGUuc3RhdHVzIT09YE1PVU5URURgKXJldHVybiBlO2Uuc3RhdHVzPXk7bGV0IG49T2JqZWN0LmtleXMoZS5wYXJjZWxzKS5tYXAoKHQ9PmUucGFyY2Vsc1t0XS51bm1vdW50VGhpc1BhcmNlbCgpKSk7cmV0dXJuIFByb21pc2UuYWxsKG4pLnRoZW4ociwobj0+cigpLnRoZW4oKCgpPT57bGV0IHI9RXJyb3Iobi5tZXNzYWdlKTtpZih0KXRocm93IGQocixlLHgpO3MocixlLHgpfSkpKSkudGhlbigoKCk9PmUpKTtmdW5jdGlvbiByKCl7cmV0dXJuIE0oZSxgdW5tb3VudGApLnRoZW4oKCgpPT57ZS5zdGF0dXM9Z30pLChuPT57aWYodCl0aHJvdyBkKG4sZSx4KTtzKG4sZSx4KX0pKX19KSl9dmFyIHNlPSExLGNlPSExO2Z1bmN0aW9uIGxlKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT5lLnN0YXR1cz09PWBOT1RfTU9VTlRFRGA/KHNlfHw9KHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBhKGBzaW5nbGUtc3BhOmJlZm9yZS1maXJzdC1tb3VudGApKSwhMCksZS5zdGF0dXM9XyxNKGUsYG1vdW50YCkudGhlbigoKCk9PihlLnN0YXR1cz12LGNlfHw9KHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBhKGBzaW5nbGUtc3BhOmZpcnN0LW1vdW50YCkpLCEwKSxlKSkpLmNhdGNoKChuPT57cmV0dXJuIGUuc3RhdHVzPXYsayhlLCEwKS50aGVuKHIscik7ZnVuY3Rpb24gcigpe2lmKHQpdGhyb3cgZChuLGUseCk7cmV0dXJuIHMobixlLHgpLGV9fSkpKTplKSl9dmFyIHVlPTAsZGU9e3BhcmNlbHM6e319O2Z1bmN0aW9uIGZlKCl7cmV0dXJuIHBlLmFwcGx5KGRlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcGUoZSx0KXtsZXQgbj10aGlzO2lmKCFlfHx0eXBlb2YgZSE9YG9iamVjdGAmJnR5cGVvZiBlIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoMiwhMSkpO2lmKGUubmFtZSYmdHlwZW9mIGUubmFtZSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IodSgzLCExLHR5cGVvZiBlLm5hbWUpKTtsZXQgcj11ZSsrLGk9ZS5uYW1lfHxgcGFyY2VsLSR7cn1gO2lmKHR5cGVvZiB0IT1gb2JqZWN0YCl0aHJvdyBFcnJvcih1KDQsITEsaSx0eXBlb2YgdCkpO2lmKCF0LmRvbUVsZW1lbnQpdGhyb3cgRXJyb3IodSg1LCExLGkpKTtsZXQgYT10eXBlb2YgZT09YGZ1bmN0aW9uYCxvPWE/ZTooKT0+UHJvbWlzZS5yZXNvbHZlKGUpLHM9e2lkOnIscGFyY2Vsczp7fSxzdGF0dXM6YT9wOm0sY3VzdG9tUHJvcHM6dCxwYXJlbnROYW1lOkMobiksdW5tb3VudFRoaXNQYXJjZWw6KCk9PmgudGhlbigoKCk9PntpZihzLnN0YXR1cyE9PWBNT1VOVEVEYCl0aHJvdyBFcnJvcih1KDYsITEsaSxzLnN0YXR1cykpO3JldHVybiBrKHMsITApfSkpLnRoZW4oKGU9PihzLnBhcmVudE5hbWUmJmRlbGV0ZSBuLnBhcmNlbHNbcy5pZF0sZSkpKS50aGVuKChlPT4oZyhlKSxlKSkpLmNhdGNoKChlPT57dGhyb3cgcy5zdGF0dXM9eCxfKGUpLGV9KSl9LGM7bi5wYXJjZWxzW3JdPXM7bGV0IGw9bygpO2lmKCFsfHx0eXBlb2YgbC50aGVuIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoNywhMSkpO2w9bC50aGVuKChlPT57aWYoIWUpdGhyb3cgRXJyb3IodSg4LCExKSk7aWYoaT1lLm5hbWV8fGBwYXJjZWwtJHtyfWAsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsYGJvb3RzdHJhcGApJiYhRChlLmJvb3RzdHJhcCkpdGhyb3cgRXJyb3IodSg5LCExLGkpKTtpZighRChlLm1vdW50KSl0aHJvdyBFcnJvcih1KDEwLCExLGkpKTtpZighRChlLnVubW91bnQpKXRocm93IEVycm9yKHUoMTEsITEsaSkpO2lmKGUudXBkYXRlJiYhRChlLnVwZGF0ZSkpdGhyb3cgRXJyb3IodSgxMiwhMSxpKSk7bGV0IHQ9TyhlLGBib290c3RyYXBgKSxuPU8oZSxgbW91bnRgKSxhPU8oZSxgdW5tb3VudGApO3Muc3RhdHVzPW0scy5uYW1lPWkscy5ib290c3RyYXA9dCxzLm1vdW50PW4scy51bm1vdW50PWEscy50aW1lb3V0cz15ZShlLnRpbWVvdXRzKSxlLnVwZGF0ZSYmKHMudXBkYXRlPU8oZSxgdXBkYXRlYCksYy51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY3VzdG9tUHJvcHM9ZSxBKCh0PXMsUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PntpZih0LnN0YXR1cyE9PWBNT1VOVEVEYCl0aHJvdyBFcnJvcih1KDMyLCExLEModCkpKTtyZXR1cm4gdC5zdGF0dXM9YFVQREFUSU5HYCxNKHQsYHVwZGF0ZWApLnRoZW4oKCgpPT4odC5zdGF0dXM9YE1PVU5URURgLHQpKSkuY2F0Y2goKGU9Pnt0aHJvdyBkKGUsdCxgU0tJUF9CRUNBVVNFX0JST0tFTmApfSkpfSkpKSk7dmFyIHR9KX0pKTtsZXQgZj1sLnRoZW4oKCgpPT5vZShzLCEwKSkpLGg9Zi50aGVuKCgoKT0+bGUocywhMCkpKSxnLF8sdj1uZXcgUHJvbWlzZSgoKGUsdCk9PntnPWUsXz10fSkpO3JldHVybiBjPXttb3VudDooKT0+QShQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2lmKHMuc3RhdHVzIT09YE5PVF9NT1VOVEVEYCl0aHJvdyBFcnJvcih1KDEzLCExLGkscy5zdGF0dXMpKTtyZXR1cm4gbi5wYXJjZWxzW3JdPXMsbGUocyl9KSkpLHVubW91bnQ6KCk9PkEocy51bm1vdW50VGhpc1BhcmNlbCgpKSxnZXRTdGF0dXM6KCk9PnMuc3RhdHVzLGxvYWRQcm9taXNlOkEobCksYm9vdHN0cmFwUHJvbWlzZTpBKGYpLG1vdW50UHJvbWlzZTpBKGgpLHVubW91bnRQcm9taXNlOkEodil9LGN9ZnVuY3Rpb24gQShlKXtyZXR1cm4gZS50aGVuKCgoKT0+bnVsbCkpfWZ1bmN0aW9uIG1lKGUpe2xldCB0PUMoZSksbj10eXBlb2YgZS5jdXN0b21Qcm9wcz09YGZ1bmN0aW9uYD9lLmN1c3RvbVByb3BzKHQsd2luZG93LmxvY2F0aW9uKTplLmN1c3RvbVByb3BzOyh0eXBlb2YgbiE9YG9iamVjdGB8fCFufHxBcnJheS5pc0FycmF5KG4pKSYmKG49e30sY29uc29sZS53YXJuKHUoNDAsITEpLHQsbikpO2xldCBpPVQoe30sbix7bmFtZTp0LG1vdW50UGFyY2VsOnBlLmJpbmQoZSksc2luZ2xlU3BhOnJ9KTtyZXR1cm4gcmUoZSkmJihpLnVubW91bnRTZWxmPWUudW5tb3VudFRoaXNQYXJjZWwpLGl9dmFyIGo9e2Jvb3RzdHJhcDp7bWlsbGlzOjRlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9LG1vdW50OnttaWxsaXM6M2UzLGRpZU9uVGltZW91dDohMSx3YXJuaW5nTWlsbGlzOjFlM30sdW5tb3VudDp7bWlsbGlzOjNlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9LHVubG9hZDp7bWlsbGlzOjNlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9LHVwZGF0ZTp7bWlsbGlzOjNlMyxkaWVPblRpbWVvdXQ6ITEsd2FybmluZ01pbGxpczoxZTN9fTtmdW5jdGlvbiBoZShlLHQsbil7aWYodHlwZW9mIGUhPWBudW1iZXJgfHxlPD0wKXRocm93IEVycm9yKHUoMTYsITEpKTtqLmJvb3RzdHJhcD17bWlsbGlzOmUsZGllT25UaW1lb3V0OnQsd2FybmluZ01pbGxpczpufHwxZTN9fWZ1bmN0aW9uIGdlKGUsdCxuKXtpZih0eXBlb2YgZSE9YG51bWJlcmB8fGU8PTApdGhyb3cgRXJyb3IodSgxNywhMSkpO2oubW91bnQ9e21pbGxpczplLGRpZU9uVGltZW91dDp0LHdhcm5pbmdNaWxsaXM6bnx8MWUzfX1mdW5jdGlvbiBfZShlLHQsbil7aWYodHlwZW9mIGUhPWBudW1iZXJgfHxlPD0wKXRocm93IEVycm9yKHUoMTgsITEpKTtqLnVubW91bnQ9e21pbGxpczplLGRpZU9uVGltZW91dDp0LHdhcm5pbmdNaWxsaXM6bnx8MWUzfX1mdW5jdGlvbiB2ZShlLHQsbil7aWYodHlwZW9mIGUhPWBudW1iZXJgfHxlPD0wKXRocm93IEVycm9yKHUoMTksITEpKTtqLnVubG9hZD17bWlsbGlzOmUsZGllT25UaW1lb3V0OnQsd2FybmluZ01pbGxpczpufHwxZTN9fWZ1bmN0aW9uIE0oZSx0KXtsZXQgbj1lLnRpbWVvdXRzW3RdLHI9bi53YXJuaW5nTWlsbGlzLGk9dyhlKTtyZXR1cm4gbmV3IFByb21pc2UoKChhLG8pPT57bGV0IHM9ITEsYz0hMTtlW3RdKG1lKGUpKS50aGVuKChlPT57cz0hMCxhKGUpfSkpLmNhdGNoKChlPT57cz0hMCxvKGUpfSkpLHNldFRpbWVvdXQoKCgpPT5kKDEpKSxyKSxzZXRUaW1lb3V0KCgoKT0+ZCghMCkpLG4ubWlsbGlzKTtsZXQgbD11KDMxLCExLHQsaSxDKGUpLG4ubWlsbGlzKTtmdW5jdGlvbiBkKGUpe2lmKCFzKXtpZighMD09PWUpYz0hMCxuLmRpZU9uVGltZW91dD9vKEVycm9yKGwpKTpjb25zb2xlLmVycm9yKGwpO2Vsc2UgaWYoIWMpe2xldCB0PWUsaT10KnI7Y29uc29sZS53YXJuKGwpLGkrcjxuLm1pbGxpcyYmc2V0VGltZW91dCgoKCk9PmQodCsxKSkscil9fX19KSl9ZnVuY3Rpb24geWUoZSl7bGV0IHQ9e307Zm9yKGxldCBuIGluIGopdFtuXT1UKHt9LGpbbl0sZSYmZVtuXXx8e30pO3JldHVybiB0fWZ1bmN0aW9uIGJlKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2lmKGUubG9hZFByb21pc2UpcmV0dXJuIGUubG9hZFByb21pc2U7aWYoZS5zdGF0dXMhPT1gTk9UX0xPQURFRGAmJmUuc3RhdHVzIT09YExPQURfRVJST1JgKXJldHVybiBlO2xldCB0LG47cmV0dXJuIGUuc3RhdHVzPXAsZS5sb2FkUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2xldCByPWUubG9hZEFwcChtZShlKSk7aWYoIWllKHIpKXRocm93IG49ITAsRXJyb3IodSgzMywhMSxDKGUpKSk7cmV0dXJuIHIudGhlbigobj0+e2xldCByO2UubG9hZEVycm9yVGltZT1udWxsLHQ9bix0eXBlb2YgdCE9YG9iamVjdGAmJihyPTM0KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxgYm9vdHN0cmFwYCkmJiFEKHQuYm9vdHN0cmFwKSYmKHI9MzUpLEQodC5tb3VudCl8fChyPTM2KSxEKHQudW5tb3VudCl8fChyPTM3KTtsZXQgaT13KHQpO2lmKHIpe2xldCBuO3RyeXtuPUpTT04uc3RyaW5naWZ5KHQpfWNhdGNoe31yZXR1cm4gY29uc29sZS5lcnJvcih1KHIsITEsaSxDKGUpLG4pLHQpLHModm9pZCAwLGUseCksZX1yZXR1cm4gdC5kZXZ0b29scyYmdC5kZXZ0b29scy5vdmVybGF5cyYmKGUuZGV2dG9vbHMub3ZlcmxheXM9VCh7fSxlLmRldnRvb2xzLm92ZXJsYXlzLHQuZGV2dG9vbHMub3ZlcmxheXMpKSxlLnN0YXR1cz1tLGUuYm9vdHN0cmFwPU8odCxgYm9vdHN0cmFwYCksZS5tb3VudD1PKHQsYG1vdW50YCksZS51bm1vdW50PU8odCxgdW5tb3VudGApLGUudW5sb2FkPU8odCxgdW5sb2FkYCksZS50aW1lb3V0cz15ZSh0LnRpbWVvdXRzKSxkZWxldGUgZS5sb2FkUHJvbWlzZSxlfSkpfSkpLmNhdGNoKCh0PT57bGV0IHI7cmV0dXJuIGRlbGV0ZSBlLmxvYWRQcm9taXNlLG4/cj14OihyPXRlLGUubG9hZEVycm9yVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSkscyh0LGUsciksZX0pKX0pKX12YXIgTj10eXBlb2Ygd2luZG93PGB1YCxQPXtoYXNoY2hhbmdlOltdLHBvcHN0YXRlOltdfSxGPVtgaGFzaGNoYW5nZWAsYHBvcHN0YXRlYF07ZnVuY3Rpb24geGUoZSl7bGV0IHQ7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXQ9ZTtlbHNlIGlmKHRoaXMmJnRoaXMuaHJlZil0PXRoaXMuaHJlZjtlbHNle2lmKCEoZSYmZS5jdXJyZW50VGFyZ2V0JiZlLmN1cnJlbnRUYXJnZXQuaHJlZiYmZS5wcmV2ZW50RGVmYXVsdCkpdGhyb3cgRXJyb3IodSgxNCwhMSkpO3Q9ZS5jdXJyZW50VGFyZ2V0LmhyZWYsZS5wcmV2ZW50RGVmYXVsdCgpfWxldCBuPUFlKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxyPUFlKHQpO3QuaW5kZXhPZihgI2ApPT09MD93aW5kb3cubG9jYXRpb24uaGFzaD1yLmhhc2g6bi5ob3N0IT09ci5ob3N0JiZyLmhvc3Q/d2luZG93LmxvY2F0aW9uLmhyZWY9dDpyLnBhdGhuYW1lPT09bi5wYXRobmFtZSYmci5zZWFyY2g9PT1uLnNlYXJjaD93aW5kb3cubG9jYXRpb24uaGFzaD1yLmhhc2g6d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsbnVsbCx0KX1mdW5jdGlvbiBTZShlKXtpZihlKXtsZXQgdD1lWzBdLnR5cGU7Ri5pbmRleE9mKHQpPj0wJiZQW3RdLmZvckVhY2goKHQ9Pnt0cnl7dC5hcHBseSh0aGlzLGUpfWNhdGNoKGUpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgZX0pKX19KSl9fXZhciBDZTtmdW5jdGlvbiB3ZSgpe1YoW10sYXJndW1lbnRzKX1mdW5jdGlvbiBUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2xldCBuPXdpbmRvdy5sb2NhdGlvbi5ocmVmLHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT13aW5kb3cubG9jYXRpb24uaHJlZjtyZXR1cm4gQ2UmJm49PT1pfHx3aW5kb3cuZGlzcGF0Y2hFdmVudChFZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSx0KSkscn19ZnVuY3Rpb24gRWUoZSx0KXtsZXQgbjt0cnl7bj1uZXcgUG9wU3RhdGVFdmVudChgcG9wc3RhdGVgLHtzdGF0ZTplfSl9Y2F0Y2h7bj1kb2N1bWVudC5jcmVhdGVFdmVudChgUG9wU3RhdGVFdmVudGApLG4uaW5pdFBvcFN0YXRlRXZlbnQoYHBvcHN0YXRlYCwhMSwhMSxlKX1yZXR1cm4gbi5zaW5nbGVTcGE9ITAsbi5zaW5nbGVTcGFUcmlnZ2VyPXQsbn12YXIgRGU9bnVsbCxPZT0hMTtmdW5jdGlvbiBrZShlKXtpZihPZSl0aHJvdyBFcnJvcih1KDQzLCExKSk7Q2U9IWV8fCFlLmhhc093blByb3BlcnR5KGB1cmxSZXJvdXRlT25seWApfHxlLnVybFJlcm91dGVPbmx5LE9lPSEwLERlPXdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgaGFzaGNoYW5nZWAsd2UpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBwb3BzdGF0ZWAsd2UpO2xldCB0PXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLG49d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXI7d2luZG93LmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSxuKXtpZighKHR5cGVvZiBuPT1gZnVuY3Rpb25gJiZGLmluZGV4T2YoZSk+PTApfHxFKFBbZV0sKGU9PmU9PT1uKSkpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO1BbZV0ucHVzaChuKX0sd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PWBmdW5jdGlvbmAmJkYuaW5kZXhPZihlKT49MCYmKFBbZV09UFtlXS5maWx0ZXIoKGU9PmUhPT10KSkpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSx3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGU9VGUod2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLGBwdXNoU3RhdGVgKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGU9VGUoRGUsYHJlcGxhY2VTdGF0ZWApfWZ1bmN0aW9uIEFlKGUpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyZXR1cm4gdC5ocmVmPWUsdH1OJiYod2luZG93LnNpbmdsZVNwYU5hdmlnYXRlP2NvbnNvbGUud2Fybih1KDQxLCExKSk6d2luZG93LnNpbmdsZVNwYU5hdmlnYXRlPXhlKTt2YXIgamU9ITE7ZnVuY3Rpb24gTWUoZT13aW5kb3cualF1ZXJ5KXtpZihlfHx3aW5kb3cuJCYmd2luZG93LiQuZm4mJndpbmRvdy4kLmZuLmpxdWVyeSYmKGU9d2luZG93LiQpLGUmJiFqZSl7bGV0IHQ9ZS5mbi5vbixuPWUuZm4ub2ZmO2UuZm4ub249ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTmUuY2FsbCh0aGlzLHQsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIsZSxuLGFyZ3VtZW50cyl9LGUuZm4ub2ZmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE5lLmNhbGwodGhpcyxuLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLGUsdCxhcmd1bWVudHMpfSxqZT0hMH19ZnVuY3Rpb24gTmUoZSx0LG4scixpKXtyZXR1cm4gdHlwZW9mIG49PWBzdHJpbmdgPyhuLnNwbGl0KC9ccysvKS5mb3JFYWNoKChlPT57Ri5pbmRleE9mKGUpPj0wJiYodChlLHIpLG49bi5yZXBsYWNlKGUsYGApKX0pKSxuLnRyaW0oKT09PWBgP3RoaXM6ZS5hcHBseSh0aGlzLGkpKTplLmFwcGx5KHRoaXMsaSl9dmFyIEk9e307ZnVuY3Rpb24gUGUoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57bGV0IHQ9SVtDKGUpXTtpZighdClyZXR1cm4gZTtpZihlLnN0YXR1cz09PWBOT1RfTE9BREVEYClyZXR1cm4gRmUoZSx0KSxlO2lmKGUuc3RhdHVzPT09YFVOTE9BRElOR2ApcmV0dXJuIHQucHJvbWlzZS50aGVuKCgoKT0+ZSkpO2lmKGUuc3RhdHVzIT09YE5PVF9NT1VOVEVEYCYmZS5zdGF0dXMhPT1gTE9BRF9FUlJPUmApcmV0dXJuIGU7bGV0IG49ZS5zdGF0dXM9PT1gTE9BRF9FUlJPUmA/UHJvbWlzZS5yZXNvbHZlKCk6TShlLGB1bmxvYWRgKTtyZXR1cm4gZS5zdGF0dXM9YixuLnRoZW4oKCgpPT4oRmUoZSx0KSxlKSkpLmNhdGNoKChuPT4oZnVuY3Rpb24oZSx0LG4pe2RlbGV0ZSBJW0MoZSldLGRlbGV0ZSBlLmJvb3RzdHJhcCxkZWxldGUgZS5tb3VudCxkZWxldGUgZS51bm1vdW50LGRlbGV0ZSBlLnVubG9hZCxzKG4sZSx4KSx0LnJlamVjdChuKX0oZSx0LG4pLGUpKSl9KSl9ZnVuY3Rpb24gRmUoZSx0KXtkZWxldGUgSVtDKGUpXSxkZWxldGUgZS5ib290c3RyYXAsZGVsZXRlIGUubW91bnQsZGVsZXRlIGUudW5tb3VudCxkZWxldGUgZS51bmxvYWQsZS5zdGF0dXM9Zix0LnJlc29sdmUoKX1mdW5jdGlvbiBJZShlLHQsbixyKXtJW0MoZSldPXthcHA6ZSxyZXNvbHZlOm4scmVqZWN0OnJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJW0MoZSldLGBwcm9taXNlYCx7Z2V0OnR9KX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gSVtlXX12YXIgTD1bXTtmdW5jdGlvbiBSZSgpe3JldHVybiBMLmZpbHRlcihTKS5tYXAoQyl9ZnVuY3Rpb24gUigpe3JldHVybiBMLm1hcChDKX1mdW5jdGlvbiB6ZShlKXtsZXQgdD1FKEwsKHQ9PkModCk9PT1lKSk7cmV0dXJuIHQ/dC5zdGF0dXM6bnVsbH12YXIgQmU9ITE7ZnVuY3Rpb24gVmUoZSx0LG4scil7bGV0IGk9ZnVuY3Rpb24oZSx0LG4scil7bGV0IGk9e25hbWU6bnVsbCxsb2FkQXBwOm51bGwsYWN0aXZlV2hlbjpudWxsLGN1c3RvbVByb3BzOm51bGx9O3JldHVybiB0eXBlb2YgZT09YG9iamVjdGA/KGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSl8fGU9PT1udWxsKXRocm93IEVycm9yKHUoMzksITEpKTtsZXQgdD1bYG5hbWVgLGBhcHBgLGBhY3RpdmVXaGVuYCxgY3VzdG9tUHJvcHNgXSxuPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKGUsbik9PnQuaW5kZXhPZihuKT49MD9lOmUuY29uY2F0KG4pKSxbXSk7aWYobi5sZW5ndGghPT0wKXRocm93IEVycm9yKHUoMzgsITEsdC5qb2luKGAsIGApLG4uam9pbihgLCBgKSkpO2lmKHR5cGVvZiBlLm5hbWUhPWBzdHJpbmdgfHxlLm5hbWUubGVuZ3RoPT09MHx8dHlwZW9mIGUuYXBwIT1gb2JqZWN0YCYmdHlwZW9mIGUuYXBwIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKHUoMjAsITEpKTtsZXQgcj1lPT50eXBlb2YgZT09YHN0cmluZ2B8fHR5cGVvZiBlPT1gZnVuY3Rpb25gO2lmKCEocihlLmFjdGl2ZVdoZW4pfHxBcnJheS5pc0FycmF5KGUuYWN0aXZlV2hlbikmJmUuYWN0aXZlV2hlbi5ldmVyeShyKSkpdGhyb3cgRXJyb3IodSgyNCwhMSkpO2lmKCFLZShlLmN1c3RvbVByb3BzKSl0aHJvdyBFcnJvcih1KDIyLCExKSl9KGUpLGkubmFtZT1lLm5hbWUsaS5sb2FkQXBwPWUuYXBwLGkuYWN0aXZlV2hlbj1lLmFjdGl2ZVdoZW4saS5jdXN0b21Qcm9wcz1lLmN1c3RvbVByb3BzKTooZnVuY3Rpb24oZSx0LG4scil7aWYodHlwZW9mIGUhPWBzdHJpbmdgfHxlLmxlbmd0aD09PTApdGhyb3cgRXJyb3IodSgyMCwhMSkpO2lmKCF0KXRocm93IEVycm9yKHUoMjMsITEpKTtpZih0eXBlb2YgbiE9YGZ1bmN0aW9uYCl0aHJvdyBFcnJvcih1KDI0LCExKSk7aWYoIUtlKHIpKXRocm93IEVycm9yKHUoMjIsITEpKX0oZSx0LG4sciksaS5uYW1lPWUsaS5sb2FkQXBwPXQsaS5hY3RpdmVXaGVuPW4saS5jdXN0b21Qcm9wcz1yKSxpLmxvYWRBcHA9dHlwZW9mKGE9aS5sb2FkQXBwKT09YGZ1bmN0aW9uYD9hOigpPT5Qcm9taXNlLnJlc29sdmUoYSksaS5jdXN0b21Qcm9wcz1mdW5jdGlvbihlKXtyZXR1cm4gZXx8e319KGkuY3VzdG9tUHJvcHMpLGkuYWN0aXZlV2hlbj1mdW5jdGlvbihlKXtsZXQgdD1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3JldHVybiB0PXQubWFwKChlPT50eXBlb2YgZT09YGZ1bmN0aW9uYD9lOnFlKGUpKSksZT0+dC5zb21lKCh0PT50KGUpKSl9KGkuYWN0aXZlV2hlbiksaTt2YXIgYX0oZSx0LG4scik7aWYoJGUoKXx8QmV8fChCZT0hMCxzZXRUaW1lb3V0KCgoKT0+eyRlKCl8fGNvbnNvbGUud2Fybih1KDEsITEpKX0pLDVlMykpLFIoKS5pbmRleE9mKGkubmFtZSkhPT0tMSl0aHJvdyBFcnJvcih1KDIxLCExLGkubmFtZSkpO0wucHVzaChUKHtsb2FkRXJyb3JUaW1lOm51bGwsc3RhdHVzOmYscGFyY2Vsczp7fSxkZXZ0b29sczp7b3ZlcmxheXM6e29wdGlvbnM6e30sc2VsZWN0b3JzOltdfX19LGkpKSxOJiYoTWUoKSxWKCkpfWZ1bmN0aW9uIEhlKGU9d2luZG93LmxvY2F0aW9uKXtyZXR1cm4gTC5maWx0ZXIoKHQ9PnQuYWN0aXZlV2hlbihlKSkpLm1hcChDKX1mdW5jdGlvbiBVZShlKXtpZihMLmZpbHRlcigodD0+Qyh0KT09PWUpKS5sZW5ndGg9PT0wKXRocm93IEVycm9yKHUoMjUsITEsZSkpO3JldHVybihOP1dlKGUse3dhaXRGb3JVbm1vdW50OiExfSk6UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCgpPT57bGV0IHQ9TC5tYXAoQykuaW5kZXhPZihlKTtMLnNwbGljZSh0LDEpfSkpfWZ1bmN0aW9uIFdlKGUsdD17d2FpdEZvclVubW91bnQ6ITF9KXtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IodSgyNiwhMSkpO2xldCBuPUUoTCwodD0+Qyh0KT09PWUpKTtpZighbil0aHJvdyBFcnJvcih1KDI3LCExLGUpKTtsZXQgcj1MZShDKG4pKTtpZih0JiZ0LndhaXRGb3JVbm1vdW50KXtpZihyKXJldHVybiByLnByb21pc2U7e2xldCBlPW5ldyBQcm9taXNlKCgodCxyKT0+e0llKG4sKCgpPT5lKSx0LHIpfSkpO3JldHVybiBlfX17bGV0IGU7cmV0dXJuIHI/KGU9ci5wcm9taXNlLEdlKG4sci5yZXNvbHZlLHIucmVqZWN0KSk6ZT1uZXcgUHJvbWlzZSgoKHQscik9PntJZShuLCgoKT0+ZSksdCxyKSxHZShuLHQscil9KSksZX19ZnVuY3Rpb24gR2UoZSx0LG4pe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57aWYoRShIZSgpLCh0PT50PT09QyhlKSkpKXJldHVybiBZZSgpfSkpLnRoZW4oKCgpPT5rKGUpLnRoZW4oUGUpLnRoZW4oKCgpPT57dCgpLHNldFRpbWVvdXQoKCgpPT57VigpfSkpfSkpKSkuY2F0Y2gobil9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIWV8fHR5cGVvZiBlPT1gZnVuY3Rpb25gfHx0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIUFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcWUoZSx0KXtsZXQgbj1mdW5jdGlvbihlLHQpe2xldCBuPTAscj0hMSxpPWBeYDtlWzBdIT09YC9gJiYoZT1gL2ArZSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPWVbdF07KCFyJiZuPT09YDpgfHxyJiZuPT09YC9gKSYmYSh0KX1yZXR1cm4gYShlLmxlbmd0aCksbmV3IFJlZ0V4cChpLGBpYCk7ZnVuY3Rpb24gYShhKXtsZXQgbz1lLnNsaWNlKG4sYSkucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csYFxcJCZgKTtpZihpKz1yP2BbXi9dKy8/YDpvLGE9PT1lLmxlbmd0aClpZihyKXQmJihpKz1gJGApO2Vsc2V7bGV0IGU9dD9gYDpgLipgO2k9aS5jaGFyQXQoaS5sZW5ndGgtMSk9PT1gL2A/YCR7aX0ke2V9JGA6YCR7aX0oLyR7ZX0pPygjLiopPyRgfXI9IXIsbj1hfX0oZSx0KTtyZXR1cm4gZT0+e2xldCB0PWUub3JpZ2luO3R8fD1gJHtlLnByb3RvY29sfS8vJHtlLmhvc3R9YDtsZXQgcj1lLmhyZWYucmVwbGFjZSh0LGBgKS5yZXBsYWNlKGUuc2VhcmNoLGBgKS5zcGxpdChgP2ApWzBdO3JldHVybiBuLnRlc3Qocil9fXZhciB6PSExLEI9W10sSmU9TiYmd2luZG93LmxvY2F0aW9uLmhyZWY7ZnVuY3Rpb24gWWUoKXtyZXR1cm4gVigpfWZ1bmN0aW9uIFYoZT1bXSx0LG49ITEpe2lmKHopcmV0dXJuIG5ldyBQcm9taXNlKCgoZSxuKT0+e0IucHVzaCh7cmVzb2x2ZTplLHJlamVjdDpuLGV2ZW50QXJndW1lbnRzOnR9KX0pKTtsZXR7YXBwc1RvVW5sb2FkOnIsYXBwc1RvVW5tb3VudDppLGFwcHNUb0xvYWQ6byxhcHBzVG9Nb3VudDpzfT1mdW5jdGlvbigpe2xldCBlPVtdLHQ9W10sbj1bXSxyPVtdLGk9bmV3IERhdGUoKS5nZXRUaW1lKCk7cmV0dXJuIEwuZm9yRWFjaCgoYT0+e2xldCBvPWEuc3RhdHVzIT09YFNLSVBfQkVDQVVTRV9CUk9LRU5gJiZuZShhKTtzd2l0Y2goYS5zdGF0dXMpe2Nhc2UgdGU6byYmaS1hLmxvYWRFcnJvclRpbWU+PTIwMCYmbi5wdXNoKGEpO2JyZWFrO2Nhc2UgZjpjYXNlIHA6byYmbi5wdXNoKGEpO2JyZWFrO2Nhc2UgbTpjYXNlIGc6IW8mJkxlKEMoYSkpP2UucHVzaChhKTpvJiZyLnB1c2goYSk7YnJlYWs7Y2FzZSB2Om98fHQucHVzaChhKX19KSkse2FwcHNUb1VubG9hZDplLGFwcHNUb1VubW91bnQ6dCxhcHBzVG9Mb2FkOm4sYXBwc1RvTW91bnQ6cn19KCksYyxsPVtdLGQ9SmUsaD1KZT13aW5kb3cubG9jYXRpb24uaHJlZjtyZXR1cm4gJGUoKT8oej0hMCxjPXIuY29uY2F0KG8saSxzKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+KFMoYy5sZW5ndGg9PT0wP2BiZWZvcmUtbm8tYXBwLWNoYW5nZWA6YGJlZm9yZS1hcHAtY2hhbmdlYCxiKCEwKSksUyhgYmVmb3JlLXJvdXRpbmctZXZlbnRgLGIoITAse2NhbmNlbE5hdmlnYXRpb246X30pKSxQcm9taXNlLmFsbChsKS50aGVuKChuPT57aWYobi5zb21lKChlPT5lKSkpcmV0dXJuIERlLmNhbGwod2luZG93Lmhpc3RvcnksaGlzdG9yeS5zdGF0ZSxgYCxkLnN1YnN0cmluZyhsb2NhdGlvbi5vcmlnaW4ubGVuZ3RoKSksSmU9bG9jYXRpb24uaHJlZix6PSExLFYoZSx0LCEwKTtsZXQgYT1yLm1hcChQZSksYz1pLm1hcChrKS5tYXAoKGU9PmUudGhlbihQZSkpKS5jb25jYXQoYSksbD1Qcm9taXNlLmFsbChjKTtsLnRoZW4oKCgpPT57UyhgYmVmb3JlLW1vdW50LXJvdXRpbmctZXZlbnRgLGIoITApKX0pLChlPT57dGhyb3cgZX0pKTtsZXQgdT1vLm1hcCgoZT0+YmUoZSkudGhlbigoZT0+WGUoZSxsKSkpKSksZj1zLmZpbHRlcigoZT0+by5pbmRleE9mKGUpPDApKS5tYXAoKGU9PlhlKGUsbCkpKTtyZXR1cm4gbC5jYXRjaCgoZT0+e3Rocm93IHkoKSxlfSkpLnRoZW4oKCgpPT4oeSgpLFByb21pc2UuYWxsKHUuY29uY2F0KGYpKS5jYXRjaCgodD0+e3Rocm93IGUuZm9yRWFjaCgoZT0+ZS5yZWplY3QodCkpKSx0fSkpLnRoZW4oZWUpLnRoZW4oKCgpPT57fSksKGU9Pnt0aHJvdyBlfSkpKSkpfSkpKSkpKTooYz1vLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57bGV0IGU9by5tYXAoYmUpO3JldHVybiBQcm9taXNlLmFsbChlKS50aGVuKHkpLnRoZW4oKCgpPT5bXSkpLmNhdGNoKChlPT57dGhyb3cgeSgpLGV9KSkuZmluYWxseSgoKCk9Pnt9KSl9KSkpO2Z1bmN0aW9uIF8oZT0hMCl7bGV0IHQ9dHlwZW9mIGU/LnRoZW49PWBmdW5jdGlvbmA/ZTpQcm9taXNlLnJlc29sdmUoZSk7bC5wdXNoKHQuY2F0Y2goKGU9Pihjb25zb2xlLndhcm4oRXJyb3IodSg0MiwhMSkpKSxjb25zb2xlLndhcm4oZSksITEpKSkpfWZ1bmN0aW9uIGVlKCl7bGV0IHQ9UmUoKTtlLmZvckVhY2goKGU9PmUucmVzb2x2ZSh0KSkpO3RyeXtTKGMubGVuZ3RoPT09MD9gbm8tYXBwLWNoYW5nZWA6YGFwcC1jaGFuZ2VgLGIoKSksUyhgcm91dGluZy1ldmVudGAsYigpKX1jYXRjaChlKXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IGV9KSl9aWYoej0hMSxCLmxlbmd0aD4wKXtsZXQgZT1CO0I9W10sVihlKX1yZXR1cm4gdH1mdW5jdGlvbiB5KCl7bnx8KGUuZm9yRWFjaCgoZT0+e1NlKGUuZXZlbnRBcmd1bWVudHMpfSkpLFNlKHQpKX1mdW5jdGlvbiBiKGU9ITEsbil7bGV0IGE9e30sbD17W3ZdOltdLFtnXTpbXSxbZl06W10sW3hdOltdfTtlPyhvLmNvbmNhdChzKS5mb3JFYWNoKCgoZSx0KT0+e3AoZSx2KX0pKSxyLmZvckVhY2goKGU9PntwKGUsZil9KSksaS5mb3JFYWNoKChlPT57cChlLGcpfSkpKTpjLmZvckVhY2goKGU9PntwKGUpfSkpO2xldCB1PXtkZXRhaWw6e25ld0FwcFN0YXR1c2VzOmEsYXBwc0J5TmV3U3RhdHVzOmwsdG90YWxBcHBDaGFuZ2VzOmMubGVuZ3RoLG9yaWdpbmFsRXZlbnQ6dD8uWzBdLG9sZFVybDpkLG5ld1VybDpofX07cmV0dXJuIG4mJlQodS5kZXRhaWwsbiksdTtmdW5jdGlvbiBwKGUsdCl7bGV0IG49QyhlKTt0fHw9emUobiksYVtuXT10LChsW3RdPWxbdF18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBTKGUsdCl7bnx8d2luZG93LmRpc3BhdGNoRXZlbnQobmV3IGEoYHNpbmdsZS1zcGE6JHtlfWAsdCkpfX1mdW5jdGlvbiBYZShlLHQpe3JldHVybiBuZShlKT9vZShlKS50aGVuKChlPT50LnRoZW4oKCgpPT5uZShlKT9sZShlKTplKSkpKTp0LnRoZW4oKCgpPT5lKSl9dmFyIFplPSExO2Z1bmN0aW9uIFFlKGUpe1plPSEwLE4mJihrZShlKSxWKCkpfWZ1bmN0aW9uICRlKCl7cmV0dXJuIFplfXZhciBldD17Z2V0UmF3QXBwRGF0YTpmdW5jdGlvbigpe3JldHVyblsuLi5MXX0scmVyb3V0ZTpWLE5PVF9MT0FERUQ6Zix0b0xvYWRQcm9taXNlOmJlLHRvQm9vdHN0cmFwUHJvbWlzZTpvZSx1bnJlZ2lzdGVyQXBwbGljYXRpb246VWUsZ2V0UHJvZmlsZXJEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIGFlfX07TiYmd2luZG93Ll9fU0lOR0xFX1NQQV9ERVZUT09MU19fJiYod2luZG93Ll9fU0lOR0xFX1NQQV9ERVZUT09MU19fLmV4cG9zZWRNZXRob2RzPWV0KTt2YXIgdHQ9e2RldjpgaHR0cHM6Ly9say1hcGktZ2F0ZXdheS1kZXYubmdjbG91ZC5ydS9hcGkvdjEvYCx0ZXN0OmBodHRwczovL2xrLWFwaS1nYXRld2F5LXRlc3QubmdjbG91ZC5ydS9hcGkvdjEvYCxwcm9kOmBodHRwczovL2xrLWFwaS1nYXRld2F5Lm5nY2xvdWQucnUvYXBpL3YxL2B9LG50PWBtb2R1bGVwcmVsb2FkYCxydD1mdW5jdGlvbihlKXtyZXR1cm5gL2ArZX0saXQ9e30sYXQ9ZnVuY3Rpb24oZSx0LG4pe2xldCByPVByb21pc2UucmVzb2x2ZSgpO2lmKHQmJnQubGVuZ3RoPjApe2xldCBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGBsaW5rYCksaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW3Byb3BlcnR5PWNzcC1ub25jZV1gKSxhPWk/Lm5vbmNlfHxpPy5nZXRBdHRyaWJ1dGUoYG5vbmNlYCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZS5tYXAoZT0+UHJvbWlzZS5yZXNvbHZlKGUpLnRoZW4oZT0+KHtzdGF0dXM6YGZ1bGZpbGxlZGAsdmFsdWU6ZX0pLGU9Pih7c3RhdHVzOmByZWplY3RlZGAscmVhc29uOmV9KSkpKX1yPW8odC5tYXAodD0+e2lmKHQ9cnQodCxuKSx0IGluIGl0KXJldHVybjtpdFt0XT0hMDtsZXQgcj10LmVuZHNXaXRoKGAuY3NzYCksaT1yP2BbcmVsPSJzdHlsZXNoZWV0Il1gOmBgO2lmKG4pZm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2xldCBpPWVbbl07aWYoaS5ocmVmPT09dCYmKCFyfHxpLnJlbD09PWBzdHlsZXNoZWV0YCkpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke3R9Il0ke2l9YCkpcmV0dXJuO2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKTtpZihvLnJlbD1yP2BzdHlsZXNoZWV0YDpudCxyfHwoby5hcz1gc2NyaXB0YCksby5jcm9zc09yaWdpbj1gYCxvLmhyZWY9dCxhJiZvLnNldEF0dHJpYnV0ZShgbm9uY2VgLGEpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobykscilyZXR1cm4gbmV3IFByb21pc2UoKGUsbik9PntvLmFkZEV2ZW50TGlzdGVuZXIoYGxvYWRgLGUpLG8uYWRkRXZlbnRMaXN0ZW5lcihgZXJyb3JgLCgpPT5uKEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7dH1gKSkpfSl9KSl9ZnVuY3Rpb24gaShlKXtsZXQgdD1uZXcgRXZlbnQoYHZpdGU6cHJlbG9hZEVycm9yYCx7Y2FuY2VsYWJsZTohMH0pO2lmKHQucGF5bG9hZD1lLHdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpLCF0LmRlZmF1bHRQcmV2ZW50ZWQpdGhyb3cgZX1yZXR1cm4gci50aGVuKHQ9Pntmb3IobGV0IGUgb2YgdHx8W10pZS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpKGUucmVhc29uKTtyZXR1cm4gZSgpLmNhdGNoKGkpfSl9O3R5cGVvZiBsb2NhbFN0b3JhZ2U8YHVgJiZsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgaW1wb3J0bWFwLWRlYnVnYCk9PT1gMWAmJmNvbnNvbGUuaW5mbyhgW2ltcG9ydG1hcC11cGRhdGVyXSBtb2R1bGUgbG9hZGVkYCk7dmFyIG90PSgpPT57dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgaW1wb3J0bWFwLWRlYnVnYCk9PT1gMWB9Y2F0Y2h7cmV0dXJuITF9fSxIPSguLi5lKT0+e290KCkmJmNvbnNvbGUuaW5mbyhgW2ltcG9ydG1hcC11cGRhdGVyXWAsLi4uZSl9LFU9e30sc3Q9ZT0+VVtlXT8/ZSxXPW5ldyBTZXQsRz1gYCxjdD1gYCxsdD1lPT4vXmh0dHBzPzpcL1wvL2kudGVzdChlKT9lOmAke2N0LnJlcGxhY2UoL1wvKyQvLGBgKX0ke2Uuc3RhcnRzV2l0aChgL2ApP2U6YC8ke2V9YH1gLHV0PWFzeW5jKCk9PntpZighRyl0aHJvdyBFcnJvcihgW2ltcG9ydG1hcC11cGRhdGVyXSBnYXRld2F5QmFzZSBpcyBub3Qgc2V0IChBVVRIX0hPU1RTW2Vudmlyb25tZW50XSByZXR1cm5lZCBlbXB0eSB2YWx1ZSlgKTtsZXQgZT1gJHtHfSR7Ry5lbmRzV2l0aChgL2ApP2BgOmAvYH1pYW0vbWZlL2ltcG9ydG1hcGAsdD1hd2FpdCBmZXRjaChlLHtjYWNoZTpgbm8tc3RvcmVgfSk7aWYoIXQub2spdGhyb3cgRXJyb3IoYFtpbXBvcnRtYXAtdXBkYXRlcl0gR0VUICR7ZX0g4oaSICR7dC5zdGF0dXN9YCk7cmV0dXJuIHQuanNvbigpfSxkdD0oKT0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYHNjcmlwdFt0eXBlPSJpbXBvcnRtYXAiXWApLHQ9e307Zm9yKGxldCBuIG9mIGUpdHJ5e2xldCBlPUpTT04ucGFyc2Uobi50ZXh0Q29udGVudD8/YGApO2ZvcihsZXRbbixyXW9mIE9iamVjdC5lbnRyaWVzKGUuaW1wb3J0cz8/e30pKW4hPT1gQG51YmVzL3Jvb3QtYXBwYCYmKHRbbl09cil9Y2F0Y2h7fXJldHVybiB0fSxmdD0oKT0+e25hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmNvbnRyb2xsZXI/LnBvc3RNZXNzYWdlKHt0eXBlOmByZWJ1aWxkLXJ1bGVzYH0pfSxwdD1hc3luYyBlPT57SChgSU1QT1JUTUFQX1VQREFURUQgcmVjZWl2ZWRgLGU/LmRhdGEpO3RyeXtsZXQgZT1hd2FpdCB1dCgpLG49ZS5pbXBvcnRzPz97fTtIKGBmZXRjaGVkIG5ldyBpbXBvcnRtYXA6YCxuKSxIKGBjdXJyZW50IGltcG9ydG1hcDpgLFUpO2xldCByPVtdO2ZvcihsZXRbZSx0XW9mIE9iamVjdC5lbnRyaWVzKG4pKXtsZXQgbj1sdCh0KTtVW2VdIT09biYmci5wdXNoKHtuYW1lOmUsb2xkVXJsOlVbZV0sbmV3VXJsOm59KX1pZihyLmxlbmd0aD09PTApe2NvbnNvbGUuaW5mbyhgW2ltcG9ydG1hcC11cGRhdGVyXSBJTVBPUlRNQVBfVVBEQVRFRCByZWNlaXZlZCDigJQgbm8gVVJMIGNoYW5nZXMsIHNraXBwaW5nIHVwZGF0ZWApO3JldHVybn1jb25zb2xlLmluZm8oYFtpbXBvcnRtYXAtdXBkYXRlcl0gZGV0ZWN0ZWQgdmVyc2lvbiBjaGFuZ2VzOmApO2ZvcihsZXR7bmFtZTplLG9sZFVybDp0LG5ld1VybDpufW9mIHIpY29uc29sZS5pbmZvKGAgIPCfk6YgJHtlfWApLGNvbnNvbGUuaW5mbyhgICAgICBPTEQ6ICR7dD8/YChub3QgdHJhY2tlZClgfWApLGNvbnNvbGUuaW5mbyhgICAgICBORVc6ICR7bn1gKTtsZXQgaT1uZXcgU2V0KFIoKSksYT0hMTtmb3IobGV0e25hbWU6ZSxuZXdVcmw6dH1vZiByKVVbZV09dCxpLmhhcyhlKT8oVy5hZGQoZSksSChg4pyFIFNQQS1hcHAgIiR7ZX0iIHNjaGVkdWxlZCBmb3IgdW5sb2FkIChob3Qtc3dhcCBvbiBuZXh0IHJvdXRlIGNoYW5nZSlgKSk6KGE9ITAsSChg8J+UhCAiJHtlfSIgdXBkYXRlZCDihpIgcmVsb2FkIHNjaGVkdWxlZCBvbiBuZXh0IG5hdmlnYXRpb25gKSk7dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGBtZmUtaW1wb3J0bWFwLWNhY2hlLTAuMi4yNWAsSlNPTi5zdHJpbmdpZnkoZSkpLEgoYGxvY2FsU3RvcmFnZSBpbXBvcnRtYXAgY2FjaGUgdXBkYXRlZGApfWNhdGNoe31pZihhKXtsZXQgZT1yLmZpbHRlcigoe25hbWU6ZX0pPT4hbmV3IFNldChSKCkpLmhhcyhlKSkubWFwKCh7bmFtZTplfSk9PmUpO3QuZW1pdChgdmVyc2lvbjphdmFpbGFibGVgLHtzb3VyY2U6YHdzYCxwYWNrYWdlczplfSl9ZnQoKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGBbaW1wb3J0bWFwLXVwZGF0ZXJdIGZhaWxlZCB0byBhcHBseSBpbXBvcnRtYXAgdXBkYXRlOmAsZSl9fSxtdD0oKT0+e2lmKFcuc2l6ZSE9PTApZm9yKGxldCBlIG9mWy4uLlddKVcuZGVsZXRlKGUpLEgoYHVubG9hZGluZyBvdXRkYXRlZCBTUEEtYXBwIGJlZm9yZSByb3V0ZSBjaGFuZ2U6YCxlKSxXZShlKS5jYXRjaCh0PT57Y29uc29sZS53YXJuKGBbaW1wb3J0bWFwLXVwZGF0ZXJdIHVubG9hZEFwcGxpY2F0aW9uIGZhaWxlZCBmb3JgLGUsdCl9KX0saHQ9YXN5bmMoKT0+e0goYHN0YXJ0SW1wb3J0bWFwVXBkYXRlciBjYWxsZWRgKTt0cnl7bGV0e2V2ZW50QnVzOmUsZ2V0VXJsczp0fT1hd2FpdCBhdCgoKT0+aW1wb3J0KGBAbnViZXMvY29tbW9uLXV0aWxzYCksW10pO0goYGNvbW1vbi11dGlscyBsb2FkZWQ7IGVudiA9YCx0LmVudmlyb25tZW50KSxHPXR0W3QuZW52aXJvbm1lbnRdPz9gYCxHfHxjb25zb2xlLndhcm4oYFtpbXBvcnRtYXAtdXBkYXRlcl0gR0FURVdBWV9IT1NUU1tlbnZpcm9ubWVudF0gaXMgZW1wdHkg4oCUIGltcG9ydG1hcCBmZXRjaCB3aWxsIGJlIHNraXBwZWRgKTtsZXQgbj1gL3MzLW1mZWAucmVwbGFjZSgvXC8rJC8sYGApO2N0PW4uc3RhcnRzV2l0aChgL2ApP2Ake3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHtufWA6bixIKGBnYXRld2F5QmFzZSA9YCxHKSxIKGBtZmVCYXNlVXJsID1gLGN0KSxVPWR0KCksSChgY3VycmVudEltcG9ydHMgZnJvbSBET006YCxPYmplY3Qua2V5cyhVKSk7dHJ5e2xldCBlPWF3YWl0IHV0KCksdD0wO2ZvcihsZXRbbixyXW9mIE9iamVjdC5lbnRyaWVzKGUuaW1wb3J0cz8/e30pKVVbbl09PT12b2lkIDAmJihVW25dPWx0KHIpLHQrKyk7SChgYmFzZWxpbmUgZmlsbGVkIGZyb20gaW1wb3J0bWFwLUFQSSAoYWRkZWQgJHt0fSBlbnRyaWVzKWApfWNhdGNoKGUpe2NvbnNvbGUud2FybihgW2ltcG9ydG1hcC11cGRhdGVyXSBiYXNlbGluZSBpbXBvcnRtYXAgZmV0Y2ggZmFpbGVkOmAsZSl9aWYod2luZG93LmltcG9ydE1hcE92ZXJyaWRlcyl7bGV0IGU9W10sdD13aW5kb3cuaW1wb3J0TWFwT3ZlcnJpZGVzLmdldE92ZXJyaWRlTWFwKCk7Zm9yKGxldFtuLHJdb2YgT2JqZWN0LmVudHJpZXModC5pbXBvcnRzKSl7bGV0IHQ9VVtuXTt0JiZsdChyKT09PXQmJmUucHVzaChuKX1pZihlLmxlbmd0aD4wKXtIKGByZW1vdmluZyBzdGFsZSBJTU8gb3ZlcnJpZGVzIChzYW1lIGFzIGJvb3RzdHJhcCBpbXBvcnRtYXApOmAsZSk7Zm9yKGxldCB0IG9mIGUpd2luZG93LmltcG9ydE1hcE92ZXJyaWRlcy5yZW1vdmVPdmVycmlkZSh0KX19ZS5vbihgKmAsKGUsdCk9PntIKGBldmVudEJ1cyBldmVudCByZWNlaXZlZDpgLGUsdCl9KSxlLm9uKGBJTVBPUlRNQVBfVVBEQVRFRGAsZT0+e3B0KGUpfSksSChgc3Vic2NyaWJlZCB0byBldmVudEJ1cyAod2lsZGNhcmQgKyBJTVBPUlRNQVBfVVBEQVRFRClgKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtcm91dGluZy1ldmVudGAsbXQpLEgoYOKchSBzdGFydGVkLCB0cmFja2luZ2AsT2JqZWN0LmtleXMoVSkubGVuZ3RoLGBNRkUgZW50cmllc2ApfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoYFtpbXBvcnRtYXAtdXBkYXRlcl0g4p2MIGluaXQgZmFpbGVkOmAsZSl9fTtmdW5jdGlvbiBndChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gX3QoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/Z3QoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2dChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Z3QoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSyhlKXtyZXR1cm4oSz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHZ0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4geHQoZSl9KGUpfHxmdW5jdGlvbihlKXtpZih0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlW2BAQGl0ZXJhdG9yYF0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxidChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9KCl9ZnVuY3Rpb24gYnQoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIHh0KGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiBuPT09YE9iamVjdGAmJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksbj09PWBNYXBgfHxuPT09YFNldGA/QXJyYXkuZnJvbShlKTpuPT09YEFyZ3VtZW50c2B8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP3h0KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB4dChlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9dmFyIHE9dHlwZW9mIHdpbmRvdzxgdWA7ZnVuY3Rpb24gSihlLHQpe2lmKEsodCkhPT1gb2JqZWN0YHx8QXJyYXkuaXNBcnJheSh0KXx8dD09PW51bGwpdGhyb3cgRXJyb3IoYEludmFsaWQgJHtlfTogcmVjZWl2ZWQgJHtBcnJheS5pc0FycmF5KHQpP2BhcnJheWA6dH0gYnV0IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0YCl9ZnVuY3Rpb24gU3QoZSx0KXtpZih0eXBlb2YgdCE9YGJvb2xlYW5gKXRocm93IEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkICR7Syh0KX0sIGJ1dCBleHBlY3RlZCBhIGJvb2xlYW5gKX1mdW5jdGlvbiBDdChlLHQsbixyKXtpZighcil7dmFyIGk9T2JqZWN0LmtleXModCksYT1bXTtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe24uaW5kZXhPZihlKTwwJiZhLnB1c2goZSl9KSksYS5sZW5ndGg+MCYmY29uc29sZS53YXJuKEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkIGludmFsaWQgcHJvcGVydGllcyAnJHthLmpvaW4oYCwgYCl9JywgYnV0IHZhbGlkIHByb3BlcnRpZXMgYXJlICR7bi5qb2luKGAsIGApfWApKX19ZnVuY3Rpb24gWShlLHQpe3ZhciBuPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDApfHxhcmd1bWVudHNbMl07aWYodHlwZW9mIHQhPWBzdHJpbmdgfHxuJiZ0LnRyaW0oKT09PWBgKXRocm93IEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkICcke3R9JywgYnV0IGV4cGVjdGVkIGEke24/YCBub24tYmxhbmtgOmBgfSBzdHJpbmdgKX1mdW5jdGlvbiB3dChlLHQpe2lmKFkoZSx0KSx0LmluZGV4T2YoYC9gKTwwKXRocm93IEVycm9yKGBJbnZhbGlkICR7ZX06IHJlY2VpdmVkICcke3R9JywgYnV0IGV4cGVjdGVkIGFuIGFic29sdXRlIHBhdGggdGhhdCBzdGFydHMgd2l0aCAvYCl9ZnVuY3Rpb24gVHQoZSx0LG4pe2lmKCFBcnJheS5pc0FycmF5KHQpJiYoSyhLKHQpKSE9PWBvYmplY3RgfHx0Lmxlbmd0aCE9PWBudW1iZXJgKSl0aHJvdyBFcnJvcihgSW52YWxpZCAke2V9OiByZWNlaXZlZCAnJHt0fScsIGJ1dCBleHBlY3RlZCBhbiBhcnJheWApO2Zvcih2YXIgcj1bLi4uYXJndW1lbnRzXS5zbGljZSgzKSxpPTA7aTx0Lmxlbmd0aDtpKyspbi5hcHBseSh2b2lkIDAsW3RbaV0sYCR7ZX1bJHtpfV1gXS5jb25jYXQocikpfWZ1bmN0aW9uIEV0KGUsdCl7dmFyIG47cmV0dXJuKG49ZS5zdWJzdHIoLTEpPT09YC9gP3RbMF09PT1gL2A/ZSt0LnNsaWNlKDEpOmUrdDp0WzBdPT09YC9gP2UrdDplK2AvYCt0KS5zdWJzdHIoLTEpPT09YC9gJiZuLmxlbmd0aD4xJiYobj1uLnNsaWNlKDAsbi5sZW5ndGgtMSkpLG59ZnVuY3Rpb24gRHQoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZih0KGVbbl0pKXJldHVybiBlW25dO3JldHVybiBudWxsfXZhciBPdD10eXBlb2YgU3ltYm9sPGB1YD9TeW1ib2woKTpgQGA7ZnVuY3Rpb24ga3QoZSx0KXtpZihlJiZlLm5vZGVOYW1lfHx0eXBlb2YgZT09YHN0cmluZ2Ape2lmKHEmJiF0JiZ3aW5kb3cuc2luZ2xlU3BhTGF5b3V0RGF0YSYmKHQ9d2luZG93LnNpbmdsZVNwYUxheW91dERhdGEpLHR5cGVvZiBlPT1gc3RyaW5nYCl7aWYoIXEpdGhyb3cgRXJyb3IoYGNhbGxpbmcgY29uc3RydWN0Um91dGVzIHdpdGggYSBzdHJpbmcgb24gdGhlIHNlcnZlciBpcyBub3QgeWV0IHN1cHBvcnRlZGApO2lmKCEoZT1uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGUsYHRleHQvaHRtbGApLmRvY3VtZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGBzaW5nbGUtc3BhLXJvdXRlcmApKSl0aHJvdyBFcnJvcihgY29uc3RydWN0Um91dGVzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBIVE1MIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYSA8c2luZ2xlLXNwYS1yb3V0ZXI+IGVsZW1lbnQuYCl9ZT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e307aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YHRlbXBsYXRlYCYmKGU9KGUuY29udGVudHx8ZSkucXVlcnlTZWxlY3Rvcihgc2luZ2xlLXNwYS1yb3V0ZXJgKSksZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09YHNpbmdsZS1zcGEtcm91dGVyYCl0aHJvdyBFcnJvcihgc2luZ2xlLXNwYS1sYXlvdXQ6IFRoZSBIVE1MRWxlbWVudCBwYXNzZWQgdG8gY29uc3RydWN0Um91dGVzIG11c3QgYmUgPHNpbmdsZS1zcGEtcm91dGVyPiBvciBhIDx0ZW1wbGF0ZT4gY29udGFpbmluZyB0aGUgcm91dGVyLiBSZWNlaXZlZCAke2Uubm9kZU5hbWV9YCk7cSYmZS5pc0Nvbm5lY3RlZCYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpO3ZhciBuPXtyb3V0ZXM6W10scmVkaXJlY3RzOnt9fTtYKGUsYG1vZGVgKSYmKG4ubW9kZT1YKGUsYG1vZGVgKSksWChlLGBiYXNlYCkmJihuLmJhc2U9WChlLGBiYXNlYCkpLFgoZSxgY29udGFpbmVyRWxgKSYmKG4uY29udGFpbmVyRWw9WChlLGBjb250YWluZXJFbGApKTtmb3IodmFyIHI9MDtyPGUuY2hpbGROb2Rlcy5sZW5ndGg7cisrKXt2YXIgaTsoaT1uLnJvdXRlcykucHVzaC5hcHBseShpLHl0KFooZS5jaGlsZE5vZGVzW3JdLHQsbikpKX1yZXR1cm4gbn0oZSx0KX1lbHNlIGlmKHQpdGhyb3cgRXJyb3IoYGNvbnN0cnVjdFJvdXRlcyBzaG91bGQgYmUgY2FsbGVkIGVpdGhlciB3aXRoIGFuIEhUTUxFbGVtZW50IGFuZCBsYXlvdXREYXRhLCBvciBhIHNpbmdsZSBqc29uIG9iamVjdC5gKTtyZXR1cm4gZnVuY3Rpb24oZSl7Sihgcm91dGVzQ29uZmlnYCxlKTt2YXIgdCxuPWUuZGlzYWJsZVdhcm5pbmdzO2lmKEN0KGByb3V0ZXNDb25maWdgLGUsW2Btb2RlYCxgYmFzZWAsYGNvbnRhaW5lckVsYCxgcm91dGVzYCxgZGlzYWJsZVdhcm5pbmdzYCxgcmVkaXJlY3RzYF0sbiksZS5oYXNPd25Qcm9wZXJ0eShgY29udGFpbmVyRWxgKT9mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0PT1gc3RyaW5nYD90LnRyaW0oKT09PWBgOiEocSYmdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSl0aHJvdyBFcnJvcihgSW52YWxpZCByb3V0ZXNDb25maWcuY29udGFpbmVyRWw6IHJlY2VpdmVkICR7dH0gYnV0IGV4cGVjdGVkIGVpdGhlciBub24tYmxhbmsgc3RyaW5nIG9yIEhUTUxFbGVtZW50YCl9KDAsZS5jb250YWluZXJFbCk6ZS5jb250YWluZXJFbD1gYm9keWAsZS5oYXNPd25Qcm9wZXJ0eShgbW9kZWApfHwoZS5tb2RlPWBoaXN0b3J5YCksZnVuY3Rpb24oZSx0LG4pe2lmKG4uaW5kZXhPZih0KTwwKXRocm93IEVycm9yKGBJbnZhbGlkIHJvdXRlc0NvbmZpZy5tb2RlOiByZWNlaXZlZCAnJHt0fScgYnV0IGV4cGVjdGVkICR7bi5qb2luKGAsIGApfWApfSgwLGUubW9kZSxbYGhpc3RvcnlgLGBoYXNoYF0pLGUuaGFzT3duUHJvcGVydHkoYGJhc2VgKT8oWShgcm91dGVzQ29uZmlnLmJhc2VgLGUuYmFzZSksZS5iYXNlPSgodD1lLmJhc2UpLmluZGV4T2YoYC9gKSE9PTAmJih0PWAvYCt0KSx0W3QubGVuZ3RoLTFdIT09YC9gJiYodCs9YC9gKSx0KSk6ZS5iYXNlPWAvYCxlLmhhc093blByb3BlcnR5KGByZWRpcmVjdHNgKSlmb3IodmFyIHIgaW4gSihgcm91dGVzQ29uZmlnLnJlZGlyZWN0c2AsZS5yZWRpcmVjdHMpLGUucmVkaXJlY3RzKXt2YXIgaT1lLnJlZGlyZWN0c1tyXTt3dChgcm91dGVzQ29uZmlnLnJlZGlyZWN0cyBrZXlgLHIpLHd0KGByb3V0ZXNDb25maWcucmVkaXJlY3RzWycke3J9J11gLGkpfXZhciBhPXE/d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOmAvYCxvPWUubW9kZT09PWBoYXNoYD9hK2AjYDpgYDtUdChgcm91dGVzQ29uZmlnLnJvdXRlc2AsZS5yb3V0ZXMsKGZ1bmN0aW9uIGUodCxyLGkpe3ZhciBhPWkucGFyZW50UGF0aCxvPWkuc2libGluZ0FjdGl2ZVdoZW5zLHM9aS5wYXJlbnRBY3RpdmVXaGVuO2lmKEoocix0KSx0LnR5cGU9PT1gYXBwbGljYXRpb25gKUN0KHIsdCxbYHR5cGVgLGBuYW1lYCxgcHJvcHNgLGBsb2FkZXJgLGBlcnJvcmAsYGNsYXNzTmFtZWBdLG4pLHQucHJvcHMmJkooYCR7cn0ucHJvcHNgLHQucHJvcHMpLFkoYCR7cn0ubmFtZWAsdC5uYW1lKTtlbHNlIGlmKHQudHlwZT09PWByb3V0ZWApe0N0KHIsdCxbYHR5cGVgLGBwYXRoYCxgcm91dGVzYCxgcHJvcHNgLGBkZWZhdWx0YCxgZXhhY3RgXSxuKSx0Lmhhc093blByb3BlcnR5KGBleGFjdGApJiZTdChgJHtyfS5leGFjdGAsdC5leGFjdCk7dmFyIGMsbD10Lmhhc093blByb3BlcnR5KGBwYXRoYCksdT10Lmhhc093blByb3BlcnR5KGBkZWZhdWx0YCk7aWYobClZKGAke3J9LnBhdGhgLHQucGF0aCksYz1FdChhLHQucGF0aCksdC5hY3RpdmVXaGVuPXFlKGMsdC5leGFjdCksby5wdXNoKHQuYWN0aXZlV2hlbik7ZWxzZXtpZighdSl0aHJvdyBFcnJvcihgSW52YWxpZCAke3J9OiByb3V0ZXMgbXVzdCBoYXZlIGVpdGhlciBhIHBhdGggb3IgZGVmYXVsdCBwcm9wZXJ0eS5gKTtTdChgJHtyfS5kZWZhdWx0YCx0LmRlZmF1bHQpLGM9YSx0LmFjdGl2ZVdoZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikmJiFlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlKG4pfSkpfX0obyxzKX1pZihsJiZ1JiZ0LmRlZmF1bHQpdGhyb3cgRXJyb3IoYEludmFsaWQgJHtyfTogY2Fubm90IGhhdmUgYm90aCBwYXRoIGFuZCBzZXQgZGVmYXVsdCB0byB0cnVlLmApO3Qucm91dGVzJiZUdChgJHtyfS5yb3V0ZXNgLHQucm91dGVzLGUse3BhcmVudFBhdGg6YyxzaWJsaW5nQWN0aXZlV2hlbnM6W10scGFyZW50QWN0aXZlV2hlbjp0LmFjdGl2ZVdoZW59KX1lbHNle2lmKCEodHlwZW9mIE5vZGU8YHVgJiZ0IGluc3RhbmNlb2YgTm9kZSkpZm9yKHZhciBkIGluIHQpZCE9PWByb3V0ZXNgJiZkIT09YGF0dHJzYCYmWShgJHtyfVsnJHtkfSddYCx0W2RdLCExKTt0LnJvdXRlcyYmVHQoYCR7cn0ucm91dGVzYCx0LnJvdXRlcyxlLHtwYXJlbnRQYXRoOmEsc2libGluZ0FjdGl2ZVdoZW5zOm8scGFyZW50QWN0aXZlV2hlbjpzfSl9fSkse3BhcmVudFBhdGg6bytlLmJhc2UscGFyZW50QWN0aXZlV2hlbjpmdW5jdGlvbigpe3JldHVybiEwfSxzaWJsaW5nQWN0aXZlV2hlbnM6W119KSxkZWxldGUgZS5kaXNhYmxlV2FybmluZ3N9KGUpLGV9ZnVuY3Rpb24gWChlLHQpe2lmKHEpcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQpO3ZhciBuPUR0KGUuYXR0cnMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10LnRvTG93ZXJDYXNlKCl9KSk7cmV0dXJuIG4/bi52YWx1ZTpudWxsfWZ1bmN0aW9uIEF0KGUsdCl7cmV0dXJuIHE/ZS5oYXNBdHRyaWJ1dGUodCk6ZS5hdHRycy5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dH0pKX1mdW5jdGlvbiBaKGUsdCxuKXtpZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1gYXBwbGljYXRpb25gKXtpZihlLmNoaWxkTm9kZXMubGVuZ3RoPjApdGhyb3cgRXJyb3IoYDxhcHBsaWNhdGlvbj4gZWxlbWVudHMgbXVzdCBub3QgaGF2ZSBjaGlsZE5vZGVzLiBZb3UgbXVzdCBwdXQgaW4gYSBjbG9zaW5nIDwvYXBwbGljYXRpb24+IC0gc2VsZiBjbG9zaW5nIGlzIG5vdCBhbGxvd2VkYCk7dmFyIHI9e3R5cGU6YGFwcGxpY2F0aW9uYCxuYW1lOlgoZSxgbmFtZWApfSxpPVgoZSxgbG9hZGVyYCk7aWYoaSl7aWYodC5sb2FkZXJzJiZ0LmxvYWRlcnMuaGFzT3duUHJvcGVydHkoaSkpci5sb2FkZXI9dC5sb2FkZXJzW2ldO2Vsc2UgaWYocSl0aHJvdyBFcnJvcihgQXBwbGljYXRpb24gbG9hZGVyICcke2l9JyB3YXMgbm90IGRlZmluZWQgaW4gdGhlIGh0bWxMYXlvdXREYXRhYCl9dmFyIGE9WChlLGBlcnJvcmApO2lmKGEpe2lmKHQuZXJyb3JzJiZ0LmVycm9ycy5oYXNPd25Qcm9wZXJ0eShhKSlyLmVycm9yPXQuZXJyb3JzW2FdO2Vsc2UgaWYocSl0aHJvdyBFcnJvcihgQXBwbGljYXRpb24gZXJyb3IgaGFuZGxlciAnJHtpfScgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSBodG1sTGF5b3V0RGF0YWApfXZhciBvPVgoZSxgY2xhc3NgKTtyZXR1cm4gbyYmKHIuY2xhc3NOYW1lPW8pLGp0KGUscix0KSxbcl19aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YHJvdXRlYCl7dmFyIHM9e3R5cGU6YHJvdXRlYCxyb3V0ZXM6W119LGM9WChlLGBwYXRoYCk7YyYmKHMucGF0aD1jKSxBdChlLGBkZWZhdWx0YCkmJihzLmRlZmF1bHQ9ITApLEF0KGUsYGV4YWN0YCkmJihzLmV4YWN0PSEwKSxqdChlLHMsdCk7Zm9yKHZhciBsPTA7bDxlLmNoaWxkTm9kZXMubGVuZ3RoO2wrKyl7dmFyIHU7KHU9cy5yb3V0ZXMpLnB1c2guYXBwbHkodSx5dChaKGUuY2hpbGROb2Rlc1tsXSx0LG4pKSl9cmV0dXJuW3NdfWlmKGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWByZWRpcmVjdGApcmV0dXJuIG4ucmVkaXJlY3RzW0V0KGAvYCxYKGUsYGZyb21gKSldPUV0KGAvYCxYKGUsYHRvYCkpLFtdO2lmKHR5cGVvZiBOb2RlPGB1YCYmZSBpbnN0YW5jZW9mIE5vZGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSYmZS50ZXh0Q29udGVudC50cmltKCk9PT1gYClyZXR1cm5bXTtpZihlLmNoaWxkTm9kZXMmJmUuY2hpbGROb2Rlcy5sZW5ndGg+MCl7ZS5yb3V0ZXM9W107Zm9yKHZhciBkPTA7ZDxlLmNoaWxkTm9kZXMubGVuZ3RoO2QrKyl7dmFyIGY7KGY9ZS5yb3V0ZXMpLnB1c2guYXBwbHkoZix5dChaKGUuY2hpbGROb2Rlc1tkXSx0LG4pKSl9fXJldHVybltlXX1pZihlLmNoaWxkTm9kZXMpe2Zvcih2YXIgcD17dHlwZTplLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscm91dGVzOltdLGF0dHJzOmUuYXR0cnN9LG09MDttPGUuY2hpbGROb2Rlcy5sZW5ndGg7bSsrKXt2YXIgaDsoaD1wLnJvdXRlcykucHVzaC5hcHBseShoLHl0KFooZS5jaGlsZE5vZGVzW21dLHQsbikpKX1yZXR1cm5bcF19cmV0dXJuIGUubm9kZU5hbWU9PT1gI2NvbW1lbnRgP1t7dHlwZTpgI2NvbW1lbnRgLHZhbHVlOmUuZGF0YX1dOmUubm9kZU5hbWU9PT1gI3RleHRgP1t7dHlwZTpgI3RleHRgLHZhbHVlOmUudmFsdWV9XTp2b2lkIDB9ZnVuY3Rpb24ganQoZSx0LG4pe2Zvcih2YXIgcj0oWChlLGBwcm9wc2ApfHxgYCkuc3BsaXQoYCxgKSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0udHJpbSgpO2lmKGEubGVuZ3RoIT09MClpZih0LnByb3BzfHw9e30sbi5wcm9wcyYmbi5wcm9wcy5oYXNPd25Qcm9wZXJ0eShhKSl0LnByb3BzW2FdPW4ucHJvcHNbYV07ZWxzZXtpZihxKXRocm93IEVycm9yKGBQcm9wICcke2F9JyB3YXMgbm90IGRlZmluZWQgaW4gdGhlIGh0bWxMYXlvdXREYXRhLiBFaXRoZXIgcmVtb3ZlIHRoaXMgYXR0cmlidXRlIGZyb20gdGhlIEhUTUwgZWxlbWVudCBvciBwcm92aWRlIHRoZSBwcm9wJ3MgdmFsdWVgKTt0LnByb3BzW2FdPU90fX19ZnVuY3Rpb24gTXQoZSl7cmV0dXJue2Jvb3RzdHJhcDpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sbW91bnQ6ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7dC5kb21FbGVtZW50LmlubmVySFRNTD1lfSkpfSx1bm1vdW50OmZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe2UuZG9tRWxlbWVudC5pbm5lckhUTUw9YGB9KSl9fX1mdW5jdGlvbiBOdChlKXt2YXIgdD1lLnJvdXRlcztlLmFwcGxpY2F0aW9uczt2YXIgbj1lLmFjdGl2ZSxyPW49PT12b2lkIDB8fG4saT0hMSxhPXt9LG89cSYmISF3aW5kb3cuc2luZ2xlU3BhTGF5b3V0RGF0YTtpZighdCl0aHJvdyBFcnJvcihgc2luZ2xlLXNwYS1sYXlvdXQgY29uc3RydWN0TGF5b3V0RW5naW5lKG9wdHMpOiBvcHRzLnJvdXRlcyBtdXN0IGJlIHByb3ZpZGVkLiBWYWx1ZSB3YXMgJHtLKHQpfWApO3ZhciBzPXQuYmFzZS5zbGljZSgwLHQuYmFzZS5sZW5ndGgtMSksdT17aXNBY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXtpfHwoaT0hMCxxJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHNpbmdsZS1zcGE6YmVmb3JlLXJvdXRpbmctZXZlbnRgLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBzaW5nbGUtc3BhOmJlZm9yZS1tb3VudC1yb3V0aW5nLWV2ZW50YCxwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpyb3V0aW5nLWV2ZW50YCxtKSxjKGQpLG8mJmgoZygpLHQucm91dGVzKSxwKCkpKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbigpe2kmJihpPSExLHEmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtcm91dGluZy1ldmVudGAsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNpbmdsZS1zcGE6YmVmb3JlLW1vdW50LXJvdXRpbmctZXZlbnRgLHApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBzaW5nbGUtc3BhOnJvdXRpbmctZXZlbnRgLG0pLGwoZCkpKX19O3JldHVybiByJiZ1LmFjdGl2YXRlKCksdTtmdW5jdGlvbiBkKGUpe3ZhciBuPUx0KHthcHBsaWNhdGlvbk5hbWU6ZS5hcHBPclBhcmNlbE5hbWUsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLHJvdXRlczp0LnJvdXRlc30pO2lmKG4mJm4uZXJyb3Ipe3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFEobi5uYW1lKSksaT10eXBlb2Ygbi5lcnJvcj09YHN0cmluZ2A/TXQobi5lcnJvcik6bi5lcnJvcjthW24ubmFtZV09ZmUoaSx7ZG9tRWxlbWVudDpyLGVycm9yOmV9KX1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9ZnVuY3Rpb24gZihlKXt2YXIgbj1lLmRldGFpbCxyPW4uY2FuY2VsTmF2aWdhdGlvbixpPW4ubmV3VXJsLG89QnQodCxWdChpKSkscz1mdW5jdGlvbihlKXt2YXIgbj10LnJlZGlyZWN0c1tlXTtpZihlPT09byl7aWYoIXIpdGhyb3cgRXJyb3IoYHNpbmdsZS1zcGEtbGF5b3V0OiA8cmVkaXJlY3Q+IHJlcXVpcmVzIHNpbmdsZS1zcGFAPj02LjAuMGApO3JldHVybiByKCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt4ZShuKX0pKSx7djp2b2lkIDB9fX07Zm9yKHZhciBjIGluIHQucmVkaXJlY3RzKXt2YXIgbD1zKGMpO2lmKEsobCk9PT1gb2JqZWN0YClyZXR1cm4gbC52fXZhciB1PVtdO0h0KGkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2FbZV0mJih1LnB1c2goYVtlXS51bm1vdW50KCkpLGRlbGV0ZSBhW2VdKX0pKSx1Lmxlbmd0aD4wJiZyKFByb21pc2UuYWxsKHUpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkpfWZ1bmN0aW9uIHAoKXtpZihCdCh0KS5pbmRleE9mKHMpPT09MCl7dmFyIGU9UmUoKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUSh0KSksZX0pLHt9KTtJdCh7bG9jYXRpb246d2luZG93LmxvY2F0aW9uLHJvdXRlczp0LnJvdXRlcyxwYXJlbnRDb250YWluZXI6ZygpLHNob3VsZE1vdW50OiEwLGFwcGxpY2F0aW9uQ29udGFpbmVyczplfSl9fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZS5kZXRhaWwsbj10Lm5hdmlnYXRpb25Jc0NhbmNlbGVkLHI9dC5uZXdVcmw7bnx8SHQocikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUShlKSk7dCYmdC5pc0Nvbm5lY3RlZCYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSkpfWZ1bmN0aW9uIGgoZSx0KXtpZihlJiZlLmNoaWxkTm9kZXMmJnQpZm9yKHZhciBuPXtuZXh0U2libGluZzplLmNoaWxkTm9kZXNbMF19LHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtpZihpLnR5cGUhPT1gcm91dGVgKXtmb3IodmFyIGE9bj8ubmV4dFNpYmxpbmc7KG89YSk/Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJmEudGV4dENvbnRlbnQudHJpbSgpPT09YGA7KXt2YXIgbzthPWEubmV4dFNpYmxpbmd9bj1hLFB0KGkpJiZGdChhLGkpJiYoaS5jb25uZWN0ZWROb2RlPWEpLGkucm91dGVzJiZoKGEsaS5yb3V0ZXMpfWVsc2UgaChlLGkucm91dGVzKX19ZnVuY3Rpb24gZygpe3JldHVybiB0eXBlb2YgdC5jb250YWluZXJFbD09YHN0cmluZ2A/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lckVsKTp0LmNvbnRhaW5lckVsfX1mdW5jdGlvbiBQdChlKXtyZXR1cm4gdD1bYGFwcGxpY2F0aW9uYCxgcm91dGVgLGBmcmFnbWVudGAsYGFzc2V0c2AsYHJlZGlyZWN0YF0sbj1lLnR5cGUsIXQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1ufSkpO3ZhciB0LG59ZnVuY3Rpb24gRnQoZSx0KXt2YXIgbixyO3JldHVybiEhZSYmKHI9dCBpbnN0YW5jZW9mIE5vZGU/dDpmdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlYCN0ZXh0YDpyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS52YWx1ZSk7Y2FzZWAjY29tbWVudGA6cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZS52YWx1ZSk7ZGVmYXVsdDp2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUudHlwZSk7cmV0dXJuIGUuYXR0cnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5zZXRBdHRyaWJ1dGUoZS5uYW1lLGUudmFsdWUpfSkpLHR9fSh0KSwobj1lKS5ub2RlVHlwZT09PXIubm9kZVR5cGUmJm4ubm9kZU5hbWU9PT1yLm5vZGVOYW1lJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0QXR0cmlidXRlTmFtZXM/ZS5nZXRBdHRyaWJ1dGVOYW1lcygpLnNvcnQoKTpbXSxyPWUuZ2V0QXR0cmlidXRlTmFtZXM/ZS5nZXRBdHRyaWJ1dGVOYW1lcygpLnNvcnQoKTpbXTtyZXR1cm4gbi5sZW5ndGg9PT1yLmxlbmd0aCYmIW4uc29tZSgoZnVuY3Rpb24obil7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKG4pIT09dC5nZXRBdHRyaWJ1dGUobil9KSl9KG4scikpfWZ1bmN0aW9uIEl0KGUpe3ZhciB0PWUubG9jYXRpb24sbj1lLnJvdXRlcyxyPWUucGFyZW50Q29udGFpbmVyLGk9ZS5wcmV2aW91c1NpYmxpbmcsYT1lLnNob3VsZE1vdW50LG89ZS5hcHBsaWNhdGlvbkNvbnRhaW5lcnM7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtpZihlLnR5cGU9PT1gYXBwbGljYXRpb25gKXtpZihhKXt2YXIgcyxjPVEoZS5uYW1lKTtvW2UubmFtZV0/cz1vW2UubmFtZV06ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYyk/cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjKToocz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSkuaWQ9Yyx0eXBlb2YgZS5jbGFzc05hbWU9PWBzdHJpbmdgP3MuY2xhc3NOYW1lPWUuY2xhc3NOYW1lOnR5cGVvZiBlLmNsYXNzTmFtZSE9YHN0cmluZ2AmJnR5cGVvZiBzLmNsYXNzTmFtZT09YHN0cmluZ2AmJnMucmVtb3ZlQXR0cmlidXRlKGBjbGFzc2ApLFJ0KHMscixpKSxpPXN9fWVsc2UgZS50eXBlPT09YHJvdXRlYD9pPUl0KHtsb2NhdGlvbjp0LHJvdXRlczplLnJvdXRlcyxwYXJlbnRDb250YWluZXI6cixwcmV2aW91c1NpYmxpbmc6aSxzaG91bGRNb3VudDphJiZlLmFjdGl2ZVdoZW4odCksYXBwbGljYXRpb25Db250YWluZXJzOm99KTooZSBpbnN0YW5jZW9mIE5vZGV8fHR5cGVvZiBlLnR5cGU9PWBzdHJpbmdgKSYmKGE/KGUuY29ubmVjdGVkTm9kZXx8PWUgaW5zdGFuY2VvZiBOb2RlP2UuY2xvbmVOb2RlKCExKTp6dChlKSxSdChlLmNvbm5lY3RlZE5vZGUscixpKSxlLnJvdXRlcyYmSXQoe2xvY2F0aW9uOnQscm91dGVzOmUucm91dGVzLHBhcmVudENvbnRhaW5lcjplLmNvbm5lY3RlZE5vZGUscHJldmlvdXNTaWJsaW5nOm51bGwsc2hvdWxkTW91bnQ6YSxhcHBsaWNhdGlvbkNvbnRhaW5lcnM6b30pLGk9ZS5jb25uZWN0ZWROb2RlKTooKGw9ZS5jb25uZWN0ZWROb2RlKSYmKGwucmVtb3ZlP2wucmVtb3ZlKCk6bC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpKSxkZWxldGUgZS5jb25uZWN0ZWROb2RlKSk7dmFyIGx9KSksaX1mdW5jdGlvbiBMdChlKXtmb3IodmFyIHQ9ZS5hcHBsaWNhdGlvbk5hbWUsbj1lLmxvY2F0aW9uLHI9ZS5yb3V0ZXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2lmKGEudHlwZT09PWBhcHBsaWNhdGlvbmApe2lmKGEubmFtZT09PXQpcmV0dXJuIGF9ZWxzZSBpZihhLnR5cGU9PT1gcm91dGVgKXtpZihhLmFjdGl2ZVdoZW4obikpe3ZhciBvPUx0KHthcHBsaWNhdGlvbk5hbWU6dCxsb2NhdGlvbjpuLHJvdXRlczphLnJvdXRlc30pO2lmKG8pcmV0dXJuIG99fWVsc2UgaWYoYS5yb3V0ZXMpe3ZhciBzPUx0KHthcHBsaWNhdGlvbk5hbWU6dCxsb2NhdGlvbjpuLHJvdXRlczphLnJvdXRlc30pO2lmKHMpcmV0dXJuIHN9fX1mdW5jdGlvbiBSdChlLHQsbil7dmFyIHI9bj9uLm5leHRTaWJsaW5nOnQuZmlyc3RDaGlsZDtyIT09ZSYmdC5pbnNlcnRCZWZvcmUoZSxyKX1mdW5jdGlvbiBRKGUpe3JldHVybmBzaW5nbGUtc3BhLWFwcGxpY2F0aW9uOiR7ZX1gfWZ1bmN0aW9uIHp0KGUpe2lmKGUudHlwZS50b0xvd2VyQ2FzZSgpPT09YCN0ZXh0YClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS52YWx1ZSk7aWYoZS50eXBlLnRvTG93ZXJDYXNlKCk9PT1gI2NvbW1lbnRgKXJldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KGUudmFsdWUpO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZS50eXBlKTtyZXR1cm4oZS5hdHRyc3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc2V0QXR0cmlidXRlKGUubmFtZSxlLnZhbHVlKX0pKSx0LnJvdXRlcyYmdC5yb3V0ZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5hcHBlbmRDaGlsZCh6dChlKSl9KSksdH1mdW5jdGlvbiBCdChlKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmxvY2F0aW9uKVtlLm1vZGU9PT1gaGFzaGA/YGhhc2hgOmBwYXRobmFtZWBdfWZ1bmN0aW9uIFZ0KGUpe3RyeXtyZXR1cm4gbmV3IFVSTChlKX1jYXRjaHt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCk7cmV0dXJuIHQuaHJlZj1lLHR9fWZ1bmN0aW9uIEh0KGUpe3ZhciB0PVtdLG49SGUoZT9WdChlKTpsb2NhdGlvbik7cmV0dXJuIFIoKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuLmluZGV4T2YoZSk8MCYmdC5wdXNoKGUpfSkpLHR9ZnVuY3Rpb24gVXQoZSl7dmFyIHQ9ZS5yb3V0ZXMsbj1lLmxvYWRBcHAscj17fTtyZXR1cm4gV3QocixLdCx7fSx0LnJvdXRlcyksT2JqZWN0LmtleXMocikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1yW2VdO3JldHVybntuYW1lOmUsY3VzdG9tUHJvcHM6ZnVuY3Rpb24oZSxuKXt2YXIgcj1EdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmVXaGVuKG4pfSkpO3JldHVybiByP3IucHJvcHM6e319LGFjdGl2ZVdoZW46dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZVdoZW59KSksYXBwOmZ1bmN0aW9uKCl7dmFyIHI7cSYmKHI9RHQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0aXZlV2hlbih3aW5kb3cubG9jYXRpb24pfSkpKTt2YXIgaT1uKHtuYW1lOmV9KTtyZXR1cm4gciYmci5sb2FkZXI/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe3ZhciByLGk9UShlKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpO2F8fCgoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSkuaWQ9aSxhLnN0eWxlLmRpc3BsYXk9YG5vbmVgLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSkscj1mdW5jdGlvbigpe2Euc3R5bGUucmVtb3ZlUHJvcGVydHkoYGRpc3BsYXlgKSxhLmdldEF0dHJpYnV0ZShgc3R5bGVgKT09PWBgJiZhLnJlbW92ZUF0dHJpYnV0ZShgc3R5bGVgKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2luZ2xlLXNwYTpiZWZvcmUtbW91bnQtcm91dGluZy1ldmVudGAscil9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBzaW5nbGUtc3BhOmJlZm9yZS1tb3VudC1yb3V0aW5nLWV2ZW50YCxyKSk7dmFyIG89ZmUodHlwZW9mIHQubG9hZGVyPT1gc3RyaW5nYD9NdCh0LmxvYWRlcik6dC5sb2FkZXIse25hbWU6YGFwcGxpY2F0aW9uLWxvYWRlcjoke2V9YCxkb21FbGVtZW50OmF9KTtmdW5jdGlvbiBzKCl7cmV0dXJuIG8udW5tb3VudCgpLnRoZW4oKGZ1bmN0aW9uKCl7ciYmcigpfSkpfXJldHVybiBQcm9taXNlLmFsbChbby5tb3VudFByb21pc2Usbl0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0LG4scj0obj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQ9ZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ZT09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbYEBAaXRlcmF0b3JgXTtpZihuIT1udWxsKXt2YXIgcixpLGE9W10sbz0hMCxzPSExO3RyeXtmb3Iobj1uLmNhbGwoZSk7IShvPShyPW4ubmV4dCgpKS5kb25lKSYmKGEucHVzaChyLnZhbHVlKSwhdHx8YS5sZW5ndGghPT10KTtvPSEwKTt9Y2F0Y2goZSl7cz0hMCxpPWV9ZmluYWxseXt0cnl7b3x8bi5yZXR1cm49PW51bGx8fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fXJldHVybiBhfX0odCxuKXx8YnQodCxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX0oKSk7clswXTt2YXIgaT1yWzFdO3JldHVybiBzKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gcygpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgZX0pKX0pKX0pKX0oZSxyLGkpOml9fX0pKX1mdW5jdGlvbiBXdChlLHQsbixyKXtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IudHlwZT09PWBhcHBsaWNhdGlvbmA/KGVbci5uYW1lXXx8KGVbci5uYW1lXT1bXSksZVtyLm5hbWVdLnB1c2goe2FjdGl2ZVdoZW46dCxwcm9wczpHdChuLHIucHJvcHMpLGxvYWRlcjpyLmxvYWRlcn0pKTpyLnR5cGU9PT1gcm91dGVgP1d0KGUsci5hY3RpdmVXaGVuLEd0KG4sci5wcm9wcyksci5yb3V0ZXMpOnIucm91dGVzJiZXdChlLHQsbixyLnJvdXRlcyl9KSl9ZnVuY3Rpb24gR3QoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9O3JldHVybiBfdChfdCh7fSxlKSx0KX1mdW5jdGlvbiBLdCgpe3JldHVybiEwfXZhciBxdD1gPHNpbmdsZS1zcGEtcm91dGVyPgogIDxtYWluIGNsYXNzPSJzaW5nbGUtc3BhLW1haW4iPgogICAgPCEtLSDQk9C70L7QsdCw0LvRjNC90YvQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyAtINC30LDQs9GA0YPQttCw0Y7RgtGB0Y8g0YHRgNCw0LfRgyAtLT4KICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvbmF2aWdhdGlvbiI+PC9hcHBsaWNhdGlvbj4KICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvc2lkZWJhciI+PC9hcHBsaWNhdGlvbj4KCiAgICA8IS0tINCf0YDQuNC70L7QttC10L3QuNGPINC/0L4g0LzQsNGA0YjRgNGD0YLQsNC8IC0g0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDQu9C10L3QuNCy0L4g0L/RgNC4INC/0LXRgNC10YXQvtC00LUgLS0+CiAgICA8cm91dGUgcGF0aD0iYXV0aG9yaXphdGlvbiI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvYXV0aG9yaXphdGlvbiIgZXJyb3I9ImNvbW1vbkVycm9yIiBsb2FkZXI9ImxhenlMb2FkZXIiPjwvYXBwbGljYXRpb24+CiAgICA8L3JvdXRlPgogICAgPHJvdXRlIHBhdGg9ImRhc2hib2FyZCI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvZGFzaGJvYXJkIiBlcnJvcj0iY29tbW9uRXJyb3IiIGxvYWRlcj0ibGF6eUxvYWRlciI+PC9hcHBsaWNhdGlvbj4KICAgIDwvcm91dGU+CiAgICA8cm91dGUgcGF0aD0ic2VydmljZS1kZXNrIj4KICAgICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9zZXJ2aWNlLWRlc2siIGVycm9yPSJjb21tb25FcnJvciIgbG9hZGVyPSJsYXp5TG9hZGVyIj48L2FwcGxpY2F0aW9uPgogICAgPC9yb3V0ZT4KICAgIDxyb3V0ZSBwYXRoPSJzZXJ2aWNlcyI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvc2VydmljZXMiIGVycm9yPSJjb21tb25FcnJvciIgbG9hZGVyPSJsYXp5TG9hZGVyIj48L2FwcGxpY2F0aW9uPgogICAgPC9yb3V0ZT4KICAgIDxyb3V0ZSBwYXRoPSJiMmIiPgogICAgICA8YXBwbGljYXRpb24gbmFtZT0iQG51YmVzL2IyYiIgZXJyb3I9ImNvbW1vbkVycm9yIiBsb2FkZXI9ImxhenlMb2FkZXIiPjwvYXBwbGljYXRpb24+CiAgICA8L3JvdXRlPgogICAgPHJvdXRlIHBhdGg9Im1vbml0b3JpbmctZ3JhZmFuYSI+CiAgICAgIDxhcHBsaWNhdGlvbiBuYW1lPSJAbnViZXMvbW9uaXRvcmluZy1ncmFmYW5hIiBlcnJvcj0iY29tbW9uRXJyb3IiIGxvYWRlcj0ibGF6eUxvYWRlciI+PC9hcHBsaWNhdGlvbj4KICAgIDwvcm91dGU+CiAgICA8cm91dGUgcGF0aD0iZmVlZGJhY2stcG9ydGFsIj4KICAgICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9mZWVkYmFjay1wb3J0YWwiIGVycm9yPSJjb21tb25FcnJvciIgbG9hZGVyPSJsYXp5TG9hZGVyIj48L2FwcGxpY2F0aW9uPgogICAgPC9yb3V0ZT4KCiAgICA8IS0tINCk0L7QvdC+0LLRi9C1INGB0LXRgNCy0LjRgdGLIC0g0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDRgdGA0LDQt9GDIC0tPgogICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9ub3RpZmljYXRpb24tYXBpIj48L2FwcGxpY2F0aW9uPgogICAgPGFwcGxpY2F0aW9uIG5hbWU9IkBudWJlcy9zaGFyZWQtd29ya2VyIj48L2FwcGxpY2F0aW9uPgoKICAgIDxyb3V0ZSBwYXRoPSIvIiBleGFjdCAvPgogICAgPHJlZGlyZWN0IGZyb209Ii8iIHRvPSJkYXNoYm9hcmQiIC8+CgogICAgPHJvdXRlIGRlZmF1bHQ+CiAgICAgIDxzZWN0aW9uIGNsYXNzPSJweS01IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIHRleHQtY2VudGVyIj4KICAgICAgICAgIDxoMT40MDQ8L2gxPgogICAgICAgICAgPGgyPlBhZ2UgTm90IEZvdW5kPC9oMj4KICAgICAgICAgIDxwPlNvcnJ5LCB0aGUgcGFnZSB5b3UgYXJlIGxvb2tpbmcgZm9yIGRvZXMgbm90IGV4aXN0LjwvcD4KICAgICAgICAgIDxhIGhyZWY9Ii9kYXNoYm9hcmQiIGNsYXNzPSJ0ZXh0LXdoaXRlIHRleHQtZGVjb3JhdGlvbi1ub25lIHB4LTQgcHktMyBiZy1zdWNjZXNzIGQtaW5saW5lLWJsb2NrIG10LTIgcm91bmRlZCI+CiAgICAgICAgICAgINCd0LAg0LPQu9Cw0LLQvdGD0Y4KICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9zZWN0aW9uPgogICAgPC9yb3V0ZT4KICA8L21haW4+Cjwvc2luZ2xlLXNwYS1yb3V0ZXI+CmAsSnQ9ZSgpLFl0PSgpPT5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgcm9vdC1hcHAtZGVidWdgKT09PWAxYCwkPSguLi5lKT0+e1l0KCkmJmNvbnNvbGUuaW5mbyguLi5lKX07KCgpPT57JChgW3Jvb3QtYXBwXSBzdGFydFJvb3RBcHAgYmVnaW5gKTtsZXQgZTt0cnl7ZT1rdChxdCx7bG9hZGVyczp7bGF6eUxvYWRlcjpgPGRpdi8+YH0scHJvcHM6e30sZXJyb3JzOntjb21tb25FcnJvcjpgPGgyIGNsYXNzPSdwdC0zIHBzLTMgdGV4dC1kYW5nZXInPtCf0YDQuNC70L7QttC10L3QuNC1INC90LXQtNC+0YHRgtGD0L/QvdC+INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YIhPC9oMj5gfX0pLCQoYFtyb290LWFwcF0gY29uc3RydWN0Um91dGVzIE9LYCl9Y2F0Y2goZSl7dGhyb3cgY29uc29sZS5lcnJvcihgW3Jvb3QtYXBwXSBjb25zdHJ1Y3RSb3V0ZXMgRkFJTEVEOmAsZSksZX1sZXQgdDt0cnl7dD1VdCh7cm91dGVzOmUsbG9hZEFwcCh7bmFtZTplfSl7cmV0dXJuIGF0KCgpPT5pbXBvcnQoc3QoZSkpLFtdKX19KSwkKGBbcm9vdC1hcHBdIGNvbnN0cnVjdEFwcGxpY2F0aW9ucyBPSywgY291bnQ6YCx0Lmxlbmd0aCl9Y2F0Y2goZSl7dGhyb3cgY29uc29sZS5lcnJvcihgW3Jvb3QtYXBwXSBjb25zdHJ1Y3RBcHBsaWNhdGlvbnMgRkFJTEVEOmAsZSksZX10LmZvckVhY2goZT0+e2UuY3VzdG9tUHJvcHM9ey4uLmUuY3VzdG9tUHJvcHMsZXZlbnRCdXM6SnR9fSksJChgW3Jvb3QtYXBwXSBjdXN0b21Qcm9wcy5ldmVudEJ1cyBzZXQgZm9yIGFsbCBhcHBzYCk7bGV0IHI7dHJ5e3I9TnQoe3JvdXRlczplLGFwcGxpY2F0aW9uczp0fSksJChgW3Jvb3QtYXBwXSBjb25zdHJ1Y3RMYXlvdXRFbmdpbmUgT0tgKX1jYXRjaChlKXt0aHJvdyBjb25zb2xlLmVycm9yKGBbcm9vdC1hcHBdIGNvbnN0cnVjdExheW91dEVuZ2luZSBGQUlMRUQ6YCxlKSxlfXRyeXt0LmZvckVhY2goVmUpLCQoYFtyb290LWFwcF0gcmVnaXN0ZXJBcHBsaWNhdGlvbiBPS2ApfWNhdGNoKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtyb290LWFwcF0gcmVnaXN0ZXJBcHBsaWNhdGlvbiBGQUlMRUQ6YCxlKSxlfXIuYWN0aXZhdGUoKSwkKGBbcm9vdC1hcHBdIGxheW91dEVuZ2luZS5hY3RpdmF0ZSBPS2ApLFFlKHt1cmxSZXJvdXRlT25seTohMH0pLCQoYFtyb290LWFwcF0gc2luZ2xlLXNwYSBzdGFydCBPS2ApLG4oKSwkKGBbcm9vdC1hcHBdIHN0YXJ0VmVyc2lvblVwZGF0ZXIgT0tgKSxodCgpLmNhdGNoKGU9Pntjb25zb2xlLmVycm9yKGBbcm9vdC1hcHBdIHN0YXJ0SW1wb3J0bWFwVXBkYXRlciBmYWlsZWQ6YCxlKX0pLCQoYFtyb290LWFwcF0gc3RhcnRJbXBvcnRtYXBVcGRhdGVyIGxhdW5jaGVkIChhc3luYylgKX0pKCk7", - "encoding": "base64" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": 0, - "_transferSize": 0, - "_error": null, - "_fetchedViaServiceWorker": true, - "_serviceWorkerResponseSource": "http-cache" - }, - "serverIPAddress": "", - "startedDateTime": "2026-05-30T04:35:25.040Z", - "time": 39.64799997629598, - "timings": { - "blocked": 20.400000008739532, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0, - "wait": 15.388999978095294, - "receive": 3.8589999894611537, - "_blocked_queueing": 5.184000008739531, - "_workerStart": 0.002, - "_workerReady": 15.216, - "_workerFetchStart": 15.216, - "_workerRespondWithSettled": 30.441 - }, - "_fromCache": "disk", - "pageref": "page_3" - }, - { - "_initiator": { - "type": "parser", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "lineNumber": 14 - }, - "_priority": "VeryHigh", - "_resourceType": "stylesheet", - "cache": {}, - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/assets/index-VIpGGraV.css", - "httpVersion": "http/1.1", - "headers": [ - { - "name": "Origin", - "value": "https://deck-test.ngcloud.ru" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "Referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "User-Agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "DNT", - "value": "1" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/1.1", - "headers": [ - { - "name": "Content-Type", - "value": "text/css" - } - ], - "cookies": [], - "content": { - "size": 1970, - "mimeType": "text/css", - "text": "@font-face{font-family:Ubuntu;font-weight:300;font-style:normal;src:url(/assets/Ubuntu-Light-aUGsJZOE.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:300;font-style:italic;src:url(/assets/Ubuntu-LightItalic-BfM2gN_f.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:400;font-style:normal;src:url(/assets/Ubuntu-Regular-QO2cqVZ2.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:400;font-style:italic;src:url(/assets/Ubuntu-Italic-B6wntuzF.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:500;font-style:normal;src:url(/assets/Ubuntu-Medium-DnOUJ_CQ.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:500;font-style:italic;src:url(/assets/Ubuntu-MediumItalic-CELvDnK9.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:700;font-style:normal;src:url(/assets/Ubuntu-Bold-CxbGmmhf.woff2)format(\"woff2\")}@font-face{font-family:Ubuntu;font-weight:700;font-style:italic;src:url(/assets/Ubuntu-BoldItalic-DS3aS511.woff2)format(\"woff2\")}*,:before,:after{box-sizing:border-box}:root{--page-height:auto;--max-content-height:auto}body{margin:0;font-family:Ubuntu,sans-serif;font-size:13px}.single-spa-main{grid-template-columns:min-content 1fr;grid-template-rows:min-content 0 minmax(0, var(--max-content-height));min-height:100vh;height:var(--page-height);display:grid}.single-spa-main input,.single-spa-main select,.single-spa-main textarea,.single-spa-main [data-slot=form-control]{scroll-margin-top:80px}.single-spa-main>div{grid-template-rows:subgrid;width:100%;display:grid;position:relative;overflow:hidden}.single-spa-main>div:first-of-type{grid-area:1/1/auto/-1}.single-spa-main>div:nth-of-type(2){grid-area:3/1;transform:translate(0)}.single-spa-main>div:nth-of-type(3){grid-area:3/2}.single-spa-main>div[id*=notification-api],.single-spa-main>div[id*=shared-worker],.single-spa-main>div[id*=common-css]{display:none}html,body,.single-spa-main,[class*=overflow]{scroll-padding-top:80px}\n" - }, - "redirectURL": "", - "headersSize": -1, - "bodySize": -1, - "_transferSize": 0, - "_error": null, - "_fetchedViaServiceWorker": true, - "_serviceWorkerResponseSource": "fallback-code" - }, - "serverIPAddress": "", - "startedDateTime": "2026-05-30T04:35:25.042Z", - "time": 40.17799999564886, - "timings": { - "blocked": 19.562000000763685, - "dns": -1, - "ssl": -1, - "connect": -1, - "send": 0, - "wait": 20.281000005166977, - "receive": 0.3349999897181988, - "_blocked_queueing": 3.5700000007636845, - "_workerStart": 0.002, - "_workerReady": 15.992, - "_workerFetchStart": 15.992, - "_workerRespondWithSettled": 36.141 - }, - "pageref": "page_3" - }, - { - "_initiator": { - "type": "parser", - "url": "https://deck-test.ngcloud.ru/authorization/callback?back=%2Fdashboard%2Fauthorization%2Fdashboard&code=604acf612225306a7184e63fa41e0615852ec2a05ce95a2c6cb1527a756a5508", - "lineNumber": 22 - }, - "_priority": "High", - "_resourceType": "script", - "cache": {}, - "connection": "443", - "request": { - "method": "GET", - "url": "https://deck-test.ngcloud.ru/libs/import-map-overrides.js", - "httpVersion": "http/2.0", - "headers": [ - { - "name": ":authority", - "value": "deck-test.ngcloud.ru" - }, - { - "name": ":method", - "value": "GET" - }, - { - "name": ":path", - "value": "/libs/import-map-overrides.js" - }, - { - "name": ":scheme", - "value": "https" - }, - { - "name": "accept", - "value": "*/*" - }, - { - "name": "accept-encoding", - "value": "gzip, deflate, br, zstd" - }, - { - "name": "accept-language", - "value": "en-US,en;q=0.9,ru;q=0.8,it;q=0.7" - }, - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "dnt", - "value": "1" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "priority", - "value": "u=1" - }, - { - "name": "referer", - "value": "https://deck-test.ngcloud.ru/" - }, - { - "name": "sec-ch-ua", - "value": "\"Chromium\";v=\"148\", \"Google Chrome\";v=\"148\", \"Not/A)Brand\";v=\"99\"" - }, - { - "name": "sec-ch-ua-mobile", - "value": "?0" - }, - { - "name": "sec-ch-ua-platform", - "value": "\"Windows\"" - }, - { - "name": "sec-fetch-dest", - "value": "script" - }, - { - "name": "sec-fetch-mode", - "value": "no-cors" - }, - { - "name": "sec-fetch-site", - "value": "same-origin" - }, - { - "name": "user-agent", - "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" - } - ], - "queryString": [], - "cookies": [], - "headersSize": -1, - "bodySize": 0 - }, - "response": { - "status": 200, - "statusText": "", - "httpVersion": "http/2.0", - "headers": [ - { - "name": "access-control-allow-headers", - "value": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" - }, - { - "name": "access-control-allow-methods", - "value": "GET, OPTIONS" - }, - { - "name": "access-control-allow-origin", - "value": "*" - }, - { - "name": "cache-control", - "value": "max-age=31536000" - }, - { - "name": "cache-control", - "value": "public, max-age=31536000, immutable" - }, - { - "name": "content-encoding", - "value": "br" - }, - { - "name": "content-length", - "value": "14251" - }, - { - "name": "content-security-policy", - "value": "upgrade-insecure-requests;" - }, - { - "name": "content-type", - "value": "application/javascript" - }, - { - "name": "date", - "value": "Sat, 30 May 2026 04:35:24 GMT" - }, - { - "name": "etag", - "value": "\"6a07292d-37ab\"" - }, - { - "name": "expires", - "value": "Sun, 30 May 2027 04:35:24 GMT" - }, - { - "name": "last-modified", - "value": "Fri, 15 May 2026 14:09:49 GMT" - }, - { - "name": "server", - "value": "ddos-guard" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains" - }, - { - "name": "vary", - "value": "Accept-Encoding" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - } - ], - "cookies": [], - "content": { - "size": 54245, - "mimeType": "application/javascript", - "text": "/* import-map-overrides@6.1.0 */\n!function(){\"use strict\";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=0;--i){var a=this.tryEntries[i],l=a.completion;if(\"root\"===a.tryLoc)return o(\"end\");if(a.tryLoc<=this.prev){var u=r.call(a,\"catchLoc\"),s=r.call(a,\"finallyLoc\");if(u&&s){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),I(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if(\"throw\"===r.type){var o=r.arg;I(n)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,n,r){return this.delegate={iterator:C(t),resultName:n,nextLoc:r},\"next\"===this.method&&(this.arg=e),g}},t}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=n){var r,o,i,a,l=[],u=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t);else for(;!(u=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(s)throw o}}return l}}(e,t)||g(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function h(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=typeof n)return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}function v(e){return v=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},v(e)}function g(t,n){if(t){if(\"string\"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}function _(e){var t=\"function\"==typeof Map?new Map:void 0;return _=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf(\"[native code]\")}catch(t){return\"function\"==typeof e}}(e))return e;if(\"function\"!=typeof e)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(s())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var o=new(e.bind.apply(e,r));return n&&f(o,n.prototype),o}(e,arguments,l(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),f(n,e)},_(e)}var y;function b(e,t){if(Array.isArray(e)){for(var n=0;n=0;throw Error(\"Can't call includes on \".concat(v(e)))}var w,x=\"import-map-override:\",O=\"import-map-overrides-disabled\",k=\"import-map-overrides-external-maps\",M=\"data-is-importmap-override\",E=\"import-map-overrides-domains\",N=\"allowlist:\",S=\"denylist:\",P=document.querySelector('meta[name=\"importmap-type\"]'),I=document.querySelector('meta[name=\"'.concat(E,'\"]')),U={},C=null!==(y=null==P?void 0:P.getAttribute(\"content\"))&&void 0!==y?y:\"importmap\";if(I){var L=I.getAttribute(\"content\");L||console.warn(\"Invalid \".concat(E,\" meta element - content required.\"));var j=function(e){return new RegExp(function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected a string\");return e.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}(e).replace(\"\\\\*\",\".+\")).test(window.location.hostname)};0===L.indexOf(N)?w=!L.slice(10).split(\",\").some(j):0===L.indexOf(S)?w=L.slice(9).split(\",\").some(j):console.log(\"Invalid \".concat(E,\" meta content attribute - must start with \").concat(N,\" or \").concat(S))}else w=!1;function D(e,t){return Object.entries(e).reduce((function(e,n){var r=m(n,2),o=r[0],i=r[1];return e[o]=function(e,t){try{return new URL(e,t).href}catch(t){return e}}(i,t),e}),{})}(function(){try{return localStorage.getItem(\"test\"),!0}catch(e){return!1}})()||(console.warn(\"Disabling import-map-overrides, since local storage is not readable\"),w=!0),w||function(){var e,n=!!P&&P.hasAttribute(\"server-cookie\"),r=!!P&&P.hasAttribute(\"server-only\"),o=!!P&&P.hasAttribute(\"allow-query-param-override\");window.importMapOverrides={addOverride:function(e,t){/^\\d+$/g.test(t)&&(t=i.getUrlFromPort(e,t));var r=x+e;return localStorage.setItem(r,t),n&&(document.cookie=\"\".concat(r,\"=\").concat(t)),l(),i.getOverrideMap()},getOverrideMap:function(){for(var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t={imports:{},scopes:{}},n=i.getDisabledOverrides(),r=function(r,o){!e&&n.indexOf(r)>=0||(t.imports[r]=o)},a=0;a1&&void 0!==arguments[1]?arguments[1]:window.location.href;e=e.replace(/[\\[\\]]/g,\"\\\\$&\");var n=new RegExp(\"[?&]\"+e+\"(=([^&#]*)|&|#|$)\").exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\\+/g,\" \")):\"\":null}(\"imo\",window.location!=window.parent.location?document.referrer:window.location.href);if(u){var s;try{s=JSON.parse(u)}catch(e){throw Error(\"Invalid importMap query param - text content must be json\")}Object.keys(s.imports).forEach((function(e){r(e,s.imports[e])}))}}return t},removeOverride:function(e){var t=x+e,r=null!==localStorage.getItem(t);return localStorage.removeItem(t),n&&(document.cookie=\"\".concat(t,\"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;\")),i.enableOverride(e),l(),r},getOverrideScopes:function(){return function(e){return function(){var n=this,r=arguments;return new Promise((function(o,i){var a=e.apply(n,r);function l(e){t(a,o,i,l,u,\"next\",e)}function u(e){t(a,o,i,l,u,\"throw\",e)}l(void 0)}))}}(p().mark((function e(){var t,n,r,o,a,l,u,s,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={},e.next=3,i.getDefaultMap();case 3:for(o in n=e.sent,(r=i.getOverrideMap()).imports)if(a=n.imports[o])for(c in l=new URL(a,window.location.href).href,u=new URL(r.imports[o],window.location.href).href,s=u.slice(0,u.lastIndexOf(\"/\"))+\"/\",n.scopes||{})l.startsWith(c)&&(t[s]=d(d({},t[s]||{}),n.scopes[c]));return e.abrupt(\"return\",{scopes:t});case 7:case\"end\":return e.stop()}}),e)})))()},resetOverrides:function(){return Object.keys(i.getOverrideMap(!0).imports).forEach((function(e){i.removeOverride(e)})),localStorage.removeItem(O),localStorage.removeItem(k),l(),i.getOverrideMap()},hasOverrides:function(){return Object.keys(i.getOverrideMap().imports).length>0},getUrlFromPort:function(e,t){var n=e.replace(/@/g,\"\").replace(/\\//g,\"-\");return\"//localhost:\".concat(t,\"/\").concat(n,\".js\")},enableUI:function(){var e=\"import-map-overrides-full\",t=\"show-when-local-storage\",n=document.querySelector(e);n||((n=document.createElement(e)).setAttribute(t,\"true\"),document.body.appendChild(n));var r=n.getAttribute(t);r&&(localStorage.setItem(r,!0),n.renderWithPreact())},mergeImportMap:function(e,t){var n={imports:{},scopes:{}};for(var r in e.imports)n.imports[r]=e.imports[r];for(var o in t.imports)n.imports[o]=t.imports[o];for(var i in e.scopes)n.scopes[i]=e.scopes[i];for(var a in t.scopes)n.scopes[a]=t.scopes[a];return n},resetDefaultMap:function(){e=null},getDefaultMap:function(){return e||(e=Array.prototype.reduce.call(document.querySelectorAll('script[type=\"'.concat(C,'\"], script[type=\"overridable-importmap\"]')),(function(e,t){return t.hasAttribute(M)?e:(n=t.src?y(t.src):Promise.resolve(JSON.parse(t.textContent)),Promise.all([e,n]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(n,r)})));var n}),Promise.resolve({imports:{},scopes:{}})))},getCurrentPageMap:function(){return Promise.all([i.getDefaultMap(),i.getExternalOverrideMap(i.getCurrentPageExternalOverrides())]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(i.mergeImportMap(n,r),c)}))},getCurrentPageExternalOverrides:function(){var e=[];return document.querySelectorAll(\"[\".concat(M,']:not([id=\"import-map-overrides\"])')).forEach((function(t){e.push(t.src)})),e},getNextPageMap:function(){return Promise.all([i.getDefaultMap(),i.getExternalOverrideMap()]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(i.mergeImportMap(n,r),i.getOverrideMap())}))},disableOverride:function(e){var t=i.getDisabledOverrides();return!b(t,e)&&(localStorage.setItem(O,JSON.stringify(t.concat(e))),l(),!0)},enableOverride:function(e){var t=i.getDisabledOverrides(),n=t.indexOf(e);return n>=0&&(t.splice(n,1),localStorage.setItem(O,JSON.stringify(t)),l(),!0)},getDisabledOverrides:function(){var e=localStorage.getItem(O);return e?JSON.parse(e):[]},isDisabled:function(e){return b(i.getDisabledOverrides(),e)},getExternalOverrides:function(){var e=localStorage.getItem(k);return e?JSON.parse(e).sort():[]},addExternalOverride:function(e){e=new URL(e,document.baseURI).href;var t=i.getExternalOverrides();return!b(t,e)&&(localStorage.setItem(k,JSON.stringify(t.concat(e))),l(),!0)},removeExternalOverride:function(e){var t=i.getExternalOverrides();return!!b(t,e)&&(localStorage.setItem(k,JSON.stringify(t.filter((function(t){return t!==e})))),l(),!0)},getExternalOverrideMap:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.getExternalOverrides()).reduce((function(e,t){var n=U[t]||(U[t]=y(t));return Promise.all([e,n]).then((function(e){var t=m(e,2),n=t[0],r=t[1];return i.mergeImportMap(n,r)}))}),Promise.resolve({imports:{},scopes:{}}))},isExternalMapValid:function(e){return(U[e]||(U[e]=y(e))).then((function(){return!b(i.invalidExternalMaps,e)}))},invalidExternalMaps:[]};var i=window.importMapOverrides,a=!0;try{CustomEvent?new CustomEvent(\"a\"):a=!1}catch(e){a=!1}function l(){u(\"change\")}function u(e){setTimeout((function(){var t=\"import-map-overrides:\".concat(e),n=a?new CustomEvent(t):document.createEvent(\"CustomEvent\");a||n.initCustomEvent(t,!0,!0,null),window.dispatchEvent(n)}))}var s,c=i.getOverrideMap(),f=i.getExternalOverrides();if(!r){var h=document.querySelector('script[type=\"overridable-importmap\"]');if(!(s=h)){var v=document.querySelectorAll('script[type=\"'.concat(C,'\"]'));s=v?v[v.length-1]:null}if(h){if(h.src)throw Error('import-map-overrides: external import maps with type=\"overridable-importmap\" are not supported');var g;try{g=JSON.parse(h.textContent)}catch(e){throw Error('Invalid