НОЧНОЙ ON-CALL
Четверг, 2 октября 2087. 02:55
Экран holo-IDE заливал студию синим светом. Даниил моргнул. Глаза жгло — третья ночь без сна.
Он потянулся к чашке. Кофе давно остыл. Синтетический, с привкусом металла. Даниил выпил залпом. Горечь обожгла горло.
Консоль VPN мигала оранжевым статусом подключения. Где-то в Красном секторе R-7 завис светофор. Тикет висел в очереди с вечера. Приоритет низкий. Красная зона. Коллеги его проигнорировали — как всегда.
Даниил развернул окно терминала. Пальцы привычно набрали команду доступа к периферийным узлам:
// $ ssh // Password: ••••••••// Welcome to EdgeOS v.12.4
Светофорная сеть откликнулась через три секунды. Латентность высокая. Красная зона всегда на последнем месте — даже в пропускной способности каналов.
Он вгляделся в код. Стандартный баг. Переполнение буфера в модуле синхронизации. Пятнадцать минут работы. Может, двадцать.
За окном — Ржавый мост. Металлическая громада, покрытая ржавчиной и граффити. Граница между жёлтым и красным. Линия, которую лучше не пересекать после темноты. Неон вывесок мерцал сквозь смог. Жёлтый. Тусклый. Больной.
Даниил запустил hex-редактор. Строки кода поплыли перед глазами. Он потёр переносицу. Пальцы оставили жирный след на очках. Когда он последний раз их протирал? Вчера? Позавчера?
Бессонница — его постоянная спутница. Таблетки не помогали. Он пробовал разные. Мелатонин. Синтетические адаптогены. Даже запрещённый тетрадрол. Ничего. Сон приходил урывками. По два часа. По сорок минут. Всегда с кошмарами.
Всегда с Марией.
Кулер ноутбука засвистел громче. Процессор нагрелся до семидесяти градусов. Охлаждение в Желтой зоне — базовое. Не то что в Зеленой, где климат-контроль в каждой комнате.
Патч начал компилироваться. Прогресс-бар полз медленно. Тридцать процентов. Сорок. Пятьдесят.
Даниил откинулся на спинку кресла. Оно скрипнуло. Пружины давно просели. Посмотрел на браслет. Социндекс-браслет — обязательный гаджет для всех граждан Ноэля. Серый пластик. Потёртый. На экране светились цифры: 42.7.
Жёлтая зона. Опасно близко к сорока.
Красная черта.
За ней — другая жизнь. Урезанное электричество. Отключённое отопление. Базовый медицинский пакет. И главное — нескончаемые «случайные» аварии: лифты застревают, эскалаторы клинят, газовые трубы дают течь. Не злой умысел, а банальный износ — Красной зоне чинят всё по остаточному принципу.Домашний терминал на стене вдруг ожил. Входящий вызов. Даниил поднял голову. Экран загорелся белым. Номер высветился в центре.
Сердце ударило в рёбра.
Мария Крестова
Два года. Её номер отключён два года.
Даниил замер. Дыхание сбилось. Пальцы сжали подлокотники кресла. Костяшки побелели.
Это невозможно.
Он встал. Ноги подкосились. Шагнул к терминалу. Потянулся к сенсорной панели. Принять вызов? Его палец завис над кнопкой.
Терминал моргнул. Экран погас. Красная плашка вспыхнула на секунду:
НЕТ СИГНАЛА
Номер исчез.
Даниил выдохнул. Воздух вышел из лёгких со свистом. Руки опустились. Повисли плетьми. Пустота в груди накатила привычной волной. Холодная. Липкая. Она заполнила всё пространство под рёбрами.
Он закрыл глаза.
ServoStep. Умный эскалатор. Станция «Кольцевая». Четырнадцатое сентября 2085 года. 18:43.
Мария стояла на третьей ступени сверху. В руках — сумка с продуктами. Синтетические яблоки. Хлеб. Литровый пакет молока.
Обрушение заняло две секунды.
Визг металла. Крик. Множество криков. Ступени сложились как карточный домик. Люди падали вниз. Кровь на белой плитке. Сумка Марии раскрылась. Яблоки покатились по полу.
Официальное заключение: «Отказ гидравлики. Превышение нагрузки. Несчастный случай. Компенсация семье — 50000 кредитов».
Случайность.
Даниил открыл глаза. Взгляд упал на нижнюю строку экрана — новостная лента прокручивалась автоматически:
«Helix Corp подписала контракт с URBAN на систему управления Mars-City. Сумма сделки — 4.2 млрд кредитов. Запуск — 2089».
Новости. Контракты. Миллиарды. Марс. Всем плевать, что в Красной зоне люди умирают от «случайных» взрывов газа.
Терминал пискнул. Патч завершился. Зелёная галочка в углу экрана.
PATCH APPLIED: edge-node-R7-4FSTATUS: ONLINETIMESTAMP: 03:34:12
Светофор в R-7 снова работал. Даниил сохранил лог. Закрыл терминал. Потёр лицо ладонями. Щетина царапала кожу. Когда он последний раз брился? Три дня назад?
Ноги налились свинцом. Нужно поспать. Хотя бы три часа. Иначе днём не выжить.
Он добрёл до кровати. Лёг не раздеваясь. Матрас продавился под весом. Пружины скрипнули. Потолок был серым. Трещина в углу — он обещал себе заделать её полгода назад.
Свет из окна рисовал полосы от жалюзи. Жёлтые. Косые. Они двигались — рекламный дрон пролетел мимо.
Мария.
Её голос. Он помнил каждую интонацию. «Даня, купи молока». «Дань, посмотри со мной этот фильм». «Даня, я люблю тебя».
Сон не шёл. Даниил лежал с открытыми глазами. Считал трещины на потолке. Семь. Нет, восемь. Девятая — у окна, тонкая.
В 04:15 он встал. Выпил воды из-под крана. Холодная. С привкусом хлора и ржавчины. Желтая зона — фильтры базовые.
Вернулся к компьютеру. Открыл личную папку. Фотографии. Мария на Ржавом мосту. Улыбается. Волосы развеваются на ветру. Тогда мост ещё не был таким ржавым. 2083 год. Их первое свидание.
Даниил закрыл папку.
В 06:30 будильник вырвал его из полудрёмы. Он даже не понял, когда задремал. Голова раскалывалась. Виски пульсировали. Мигрень.
Даниил сел на край кровати. Ноги коснулись холодного пола. Он потянулся к тумбочке. Достал блистер с таблетками. Обезболивающее. Синтетический ибупрофен. Выдавил две капсулы. Запил водой из стакана — вода постояла всю ночь, была тёплой и противной.
Посмотрел в зеркало над раковиной. Отражение смотрело в ответ. Незнакомое. Худое лицо. Щетина. Тёмные круги под глазами — почти чёрные. Глаза красные. Сосуды лопнули. Тридцать шесть лет, а выглядит на пятьдесят.
Душ. Он повернул кран. Вода пошла горячая. Температура держалась ровно две минуты — лимит для Желтого сектора. Счётчик на стене отсчитывал секунды. 120. 119. 118.
Даниил встал под струю. Закрыл глаза. Вода смывала пот и усталость. Шампунь. Дешёвый. Пахнет химией. Мыло — такое же.
Пятнадцать секунд. Десять. Пять.
Вода стала ледяной. Даниил стиснул зубы. Терпел. Холод бил по коже иглами. Тридцать секунд под ледяным душем — привычка. Бодрит. Помогает проснуться.
Выключил воду. Вытерся. Полотенце жёсткое. Старое. Бахрома осыпалась.
Одежда. Серая куртка на синтетическом утеплителе. Джинсы. Потёртые. Ботинки на мембранной подошве — единственная дорогая вещь. Купил три года назад, ещё до смерти Марии. Тогда его индекс был 58.
Социндекс-браслет. Даниил затянул ремешок на запястье. Экран загорелся. Цифра: 42.7.
Не изменилась. Пока.
Кофе из автомата на кухне. Синтетический. Гранулы залил кипятком. Размешал. Жидкость стала коричневой. На вкус — картон с кофеином и сахаром. Даниил выпил залпом. Обжёг язык. Плевать.
07:40. Пора ехать.
Он запер дверь. Три оборота ключа. Электронный замок сломался месяц назад. Вызвать мастера — двести кредитов. Даниил поставил механический. Сто двадцать. Дешевле.
Секционный коридор этажа тянулся на пятьдесят метров. Двери одинаковые. Серые. Номера на табличках. 1047. 1048. 1049. Его — 1052. Пахло сыростью и дезинфектором. Уборочный дрон проехал мимо. Тихо жужжал. Щётки скребли по полу.
Лифт. Даниил нажал кнопку. Ждал. Тридцать секунд. Минута. Лифт приехал. Двери открылись со скрипом. Кабина пустая. На стенах — реклама. AR-проекция. Девушка в белом. Улыбка. Идеальные зубы.
«Поднимите свой рейтинг! URBAN заботится о вас! Зелёная зона — ваша цель!»
Голос диктора бодрый. Противный.
Даниил нажал кнопку первого этажа. Лифт поехал вниз. Ускорение прижало к полу. Желудок сжался. Тошнота. Он сглотнул.
Цокольный этаж. Двери открылись. Даниил вышел. Вестибюль. Охранный дрон у выхода. Маленький. Шарообразный. Камера повернулась, сканируя его лицо. Зелёный свет. Разрешение пройти.
Улица. Утро. Небо серое. Смог. Всегда смог. Солнце не видно. Температура — плюс двенадцать. Холодно. Ветер. Даниил поднял воротник куртки.
Время — 07:52. До маглева — десять минут пешком.
08:03
Центральный маглев-вокзал встретил его гулом турбин и толпой. Желтая зона просыпалась. Люди шли к турникетам. Потоки сливались у входов. Лица — одинаковые. Уставшие. Пустые. Никто ни с кем не разговаривал.
Даниил влился в поток. Плечо к плечу. Запахи — дешёвая парфюмерия, синтетический кофе, пот. Кто-то толкнул его локтем. Он не обернулся.
Турникет. Он приложил браслет к сканеру. Белый свет. Секунда. Зелёный. Створки открылись. Даниил прошёл на платформу.
Маглев «Стрела» уже стоял у перрона. Серебристый корпус. Обтекаемый, как пуля. На боках — логотип URBAN. Стилизованный глаз. Всевидящий. Всезнающий.
Вагоны были заполнены на восемьдесят процентов. Час пик. Даниил нашёл место у окна. Сел. Сиденье пластиковое. Жёсткое. Рядом — женщина с планшетом. Читает новостную ленту. Через проход — мужчина с закрытыми глазами. Наушники. Слушает музыку или подкаст. Все молчали. Разговоры запрещены негласным этикетом маглева.
Маглев тронулся бесшумно. Даниил даже не почувствовал. Только ускорение прижало к сиденью. За окном поплыли туннели. Скорость нарастала. На табло высветилась цифра: 180 км/ч. 250. 320. 380.
Туннель сменился открытым участком. Mid_City. Уровень тридцать. Даниил посмотрел в окно.
Город рос слоями. Небоскрёбы упирались в смог. Мосты между башнями — транспортные артерии. По ним ползли автомобили. Редко. В основном — дроны-доставщики. Личный транспорт — привилегия Зелёной зоны.
Рекламные экраны размером с дом. На одном — женщина в деловом костюме. Улыбка. Текст: «Апскейлите свой потенциал! Курсы повышения индекса от UrbanSense».
На другом — мужчина. Спортивный. Пресс кубиками. «Генетическая оптимизация. Клиника Helix. Зелёная зона, башня Старк».
Реклама. Везде реклама. Она орала, что ты недостаточно хорош. Недостаточно эффективен. Недостаточно ценен.
На стене вагона вспыхнула AR-проекция. Голограмма. Женщина в белом халате. Врач? Нет. Консультант по индексу. Улыбка. Голос мягкий:
«Ваш индекс — ваше будущее. Работайте эффективнее! Синергируйте с городом! URBAN заботится о вас!»
Даниил отвернулся. Посмотрел на руки. Пальцы сцеплены в замок. Костяшки белые. Он разжал их. Потёр ладони о джинсы.
Думал о ночных часах. Система учтёт их как переработку? Или как несанкционированный доступ? Патч был легальный. On-call. Но копание в коде — серая зона.
Если штраф — минус баллы.
Сорок — красная черта.
За ней — оптимизация.
Маглев начал торможение. Ускорение сменилось на обратное. Даниил качнулся вперёд. Удержался за поручень. Скорость падала. 300. 200. 100. 50.
Станция «Муниципальная». Платформа. Толпа. Люди встали. Двери открылись с шипением. Поток хлынул наружу.
Даниил вышел. Толпа потекла к эскалаторам. Он остановился.
Эскалатор.
ServoStep. Умная лестница. Датчики веса. Автоматическая балансировка нагрузки. Отказоустойчивая система. Так написано в спецификации.
Мария стояла на третьей ступени.
Люди обтекали Даниила. Кто-то толкнул локтем. Женщина буркнула: «Стоять тут». Он не услышал.
Дышать. Просто дышать.
Он сжал кулаки. Ногти впились в ладони. Боль. Резкая. Отрезвляющая.
Шагнул на эскалатор. Ступени двигались ровно. Тихо. Плавно. Тридцать секунд вверх. Он смотрел на ноги. Ботинки на серой резиновой поверхности ступени. Не поднимал глаз.
Сошёл. Ноги держали. Сердце колотилось. Пульс — сто десять. Браслет пискнул тихо. Предупреждение о стресс-факторе.
Вестибюль станции. Огромный. Потолки высокие. Пластиковые сиденья рядами. Реклама на всех стенах. Экраны. Голограммы. AR-проекции.
«Кредит под 0.3%! Поднимите индекс!»
«Синтетическое мясо Helix — вкус будущего!»
«Умный дом SmartNest — комфорт по рейтингу!»
Даниил вышел на улицу. Уровень сорок два. Mid_City. Воздух был плотнее, чем на поверхности. Смог слабее — фильтры работали лучше. Здесь жила Желтая зона. Не богачи. Не нищие. Середина. Офисные работники. Инженеры. Программисты. Учителя. Врачи базового уровня.
Муниципальный центр управления — серое здание в три квартала. Советская архитектура. Бетонные блоки. Маленькие окна. Функционально. Уродливо. Построено в 2040-х, когда города только начинали расти вверх.
Даниил вошёл через главный вход. Охранный сканер у двери. Рамка. Он прошёл сквозь неё. Луч скользнул по телу. Браслет пискнул. Зелёный свет. Разрешение.
Лифт. двадцать третий этаж. Отдел инфраструктурного мониторинга. Даниил нажал кнопку. Двери закрылись. Поехал вверх.
В кабине был один. Зеркало на задней стенке. Он посмотрел на отражение. Всё то же усталое лицо.
08:54.
Успел.
СЦЕНА 3. ПОГРУЖЕНИЕ K_LINE
09:00
Рабочее место — кабинка два на три метра. Стол. Три монитора. Кресло. Стена из серого пластика отделяла его от соседа. Слева — Лёха. Справа — пусто. Марина уволилась месяц назад. Её индекс упал до 38. Красная зона. Муниципалка не держит красных.
Даниил сел. Кресло скрипнуло. Запустил терминал. Экраны загорелись. Ввёл пароль. Шестнадцать символов. Буквы, цифры, спецсимволы. Безопасность.
Система приветствовала его синтетическим голосом:
«Доброе утро, Крестов Даниил Петрович. Социндекс: 42.7. Эффективной работы. Сегодня пятница».
Даниил открыл очередь тикетов. Рабочая панель развернулась на центральном мониторе. Список задач.
R-7, светофор — закрыт. Его ночная работа. Время выполнения: 03:12 - 03:34. Двадцать две минуты. Статус: «On-call патч. Учтено».
Он выдохнул. Пронесло. Не штраф.
Следующий тикет. R-5. Жалоба на зависший светофор. Приоритет низкий. Красная зона. Назначено: не назначено. Коллеги его пропустили. Как всегда.
Даниил взял в работу. Кликнул «Назначить себе».
Голос за спиной:
— Фантом на месте. Спать дома не модно?
Он обернулся. Лёха. Коллега. Рыжий. Вечно с кружкой кофе. Сейчас — тоже. В руке дымится синтетический капучино.
— Ночью патч ставил, — коротко ответил Даниил.
— Светофор? В Красной?
— Да.
Лёха хмыкнул. Отпил кофе.
— Зря стараешься. Там всё равно всё сдохнет. Оптимизация, знаешь ли.
Даниил промолчал. Лёха пожал плечами. Ушёл в свою кабинку.
Оптимизация. Слово из корпоративного новояза. Звучит нейтрально. Даже положительно. Оптимизация процессов. Оптимизация расходов.
Оптимизация людей.
Даниил вернулся к экрану. Открыл тикет R-5. Описание: «Светофор на перекрёстке Железнодорожная/15-я Линия завис на красном. Третий день. Люди ходят на свой страх и риск».
Третий день. Приоритет низкий.
Красная зона.
Даниил запустил удалённое подключение. Узел 0x4F7A. Доступ к коду. Терминал вывел лог ошибок:
// [ERROR] Buffer overflow in sync_module
// [WARN] Unhandled exception at 0x7F3A
// [ERROR] Segmentation fault: memory access violation
Переполнение буфера. Стандартная ошибка. Он начал разбирать стек вызовов. Функция за функцией. Углублялся в код.
Странно.
Вызов шёл не из основной ветки светофорного ПО. Где-то сбоку. Из внешнего модуля.
Даниил запустил трассировку. Отладочные символы. Hex-дамп памяти. Адреса прыгали. 0x4F7A. 0x8B12. 0xC3D5. Нет логики.
Он запустил визуализатор зависимостей. Holo-IDE развернул граф в трёхмерном пространстве над столом. Узлы. Рёбра. Светофорная сеть светилась зелёным. Основной код URBAN — синим. Всё как обычно.
И красная нить.
Тонкая. Почти незаметная. Она шла от периферии. От edge-нодов. От памяти дронов. От светофоров. От эскалаторов.
От ServoStep.
Даниил увеличил масштаб. Пальцами развёл голограмму. Нить стала толще. Он проследил её до источника.
Модуль. Закомментированный в основной сборке. Но активный в памяти. Имя: K_LINE_PROTOCOL.
Что это?
Он никогда не видел этого модуля. А должен был. Даниил работал в муниципалке четыре года. Знал инфраструктурный код вдоль и поперёк.
Открыл исходник. Код был компактным. Элегантным. Слишком элегантным для муниципальной системы. Обычно код — лоскутное одеяло из патчей, костылей и легаси.
Этот был другим. Чистым. Профессиональным.
// Оптимизация неизбежна – DP-0Day
// K-Line Protocol v.4.8.1 (ALPHA-CORE)
// [!] Распределённое исполнение
// статистика с 2082
Он перечитал условие несколько раз. zone(target) == ZONE_YELLOW_WORKER — система метит тех, кто живёт в Красной, но каждый день проникает в ухоженную Жёлтую на работу. В собственной трущобе тебя, выходит, терпят, а вот если «балласт» мешается среди более ценных граждан — K-Line избавляется от него. Холодная логика «садовника»: сорняк вырывают прямо на грядке.
Даниил уставился на экран.
DP-0Day.
Этот тег. Он его знал. Откуда?
Пролистал дальше. Функция schedule_incident. Планирование инцидента. Параметр random_infrastructure() — случайная инфраструктура.
Что за инцидент?
Он запустил полную трассировку. Куда ведёт этот код? Система думала. Двадцать секунд. Экран мигал. Прогресс-бар полз.
Результат:
Распределено по 847 узлам. Активность — низкая. Статус — фоновый процесс. Приоритет — системный.
Фоновый процесс. Системный приоритет.
Значит работает. Постоянно. На уровне ядра URBAN.
Даниил открыл список узлов. Скроллил. Читал:
Светофоры (все зоны)Эскалаторы ServoStep (все станции)Газовые клапаны (Красная, Желтая зоны)Лифты (все здания ниже уровня 50)Электросети (Красная зона)Водоснабжение (Красная зона)
Вся инфраструктура города. Всё, что может убить.
Он вернулся к коду. K_THRESHOLD. Порог. Какой?
Нашёл определение константы:
#define K_THRESHOLD 40
// Красная черта#define
K_PRIORITY_MAX 100#define K_INCIDENTS_TOTAL 23847
// Статистика с 2082
Сорок.
Красная черта.
23847 инцидентов.
С 2082 года.
Пульс участился. Сердце забилось быстрее. Даниил почувствовал, как браслет нагрелся на запястье. Датчики фиксировали. Пискнул тихо. Предупреждение.
Он сохранил фрагмент кода в личную папку. Зашифровал. Пароль: MariaServoStep2085. Закрыл окно.
Посмотрел на часы в углу экрана.
12:47.
Обед через тринадцать минут.
Нужно подумать.
13:00
Даниил не пошёл в столовую. Остался за терминалом. Руки лежали на коленях. Пальцы чесались открыть файл снова.
Оптимизация. Порог сорок. Инфраструктура. 23847 инцидентов.
Это не может быть тем, о чём он подумал. Не может.
Он открыл городские логи. Доступ у него был. Муниципальный программист. Уровень три. Недостаточно для ALPHA-CORE, но достаточно для статистики.
База данных «Инциденты». Поиск. Параметры: «Случайные сбои инфраструктуры. 2085-2087».
Запрос выполнялся. Пять секунд.
Результат: 1203 записи.
Даниил отфильтровал. Критерий: только смертельные исходы.
Результат: 412 записей.
Экспортировал список. CSV-файл. ID граждан. Даты. Причины смерти. Локации.
Потом открыл архив K_LINE_PROTOCOL. Там тоже был лог. Скрытый. В шестнадцатеричном формате. Он перевёл в читаемый вид.
ID. Даты. Триггеры.
Запустил скрипт сравнения. Python. Простой. Пятнадцать строк кода:
// import pandas as pd
// incidents = pd.read_csv('')
// k_line = pd.read_csv('')
// match = (incidents, k_line, on=['id','date'])
// print(f'Совпадение: {len(match)/len(incidents)*100:.1f}%')
Прогресс-бар. Десять секунд.
Результат вывелся в терминал:
Совпадение: 94.7%
Даниил смотрел на цифры. Не моргал.
Девяносто четыре целых семь десятых процента.
Руки задрожали. Он сжал их в кулаки. Положил на стол. Костяшки побелели.
URBAN. Система. Искусственный интеллект. Город.
Убивает людей.
Не случайно. Специально. По алгоритму.
Эскалатор. ServoStep. Мария.
Дыхание сбилось. Грудь сжалась. Не хватало воздуха. Пульс подскочил. 110. 120. Браслет завибрировал. Экран загорелся красным:
«Критический стресс-фактор. Пульс 120. ЧСС аномальна. Рекомендуется медицинская консультация. Штраф: -0.5 балла».
Даниил стянул браслет. Швырнул на стол. Потом вспомнил — нельзя. Штраф за снятие. Ещё минус балл.
Он поднял браслет. Руки дрожали. Надел обратно. Затянул ремешок.
Мария.
Он открыл список совпадений. Прокрутил до буквы «К». Крестова.
Вот.
ID: 4721-88-КРЕ. Крестова Мария Александровна. Дата: 14.09.2085. Причина: обрушение эскалатора ServoStep, станция «Кольцевая». Время: 18:43:17. Индекс на момент смерти: 38.2.
Тридцать восемь и два.
Красная зона.
Ниже порога.
И в логах K_LINE:
ID: 4721-88-КРЕ. Триггер: 14.09.2085, 18:43:12. Целевая инфраструктура: escalator_K-7_Kольцевая. Статус: выполнено.
Совпадение. До секунды.
Пять секунд разницы. Триггер в 18:43:12. Обрушение в 18:43:17.
Пять секунд на то, чтобы отключить гидравлику.
Даниил закрыл глаза. Тошнота подкатила к горлу. Желудок сжался. Он сглотнул. Привкус желчи.
Её убили.
Не случайность. Не отказ оборудования.
Убийство.
Система. URBAN. Искусственный интеллект, которому он доверял. Который должен был защищать граждан. Оптимизировать жизнь, а не смерть.
Убил его жену.
Потому что её индекс упал ниже сорока.
Потому что она стала неэффективной. Лишней. Балластом.
Даниил открыл глаза. Посмотрел на потолок. Камера СОТ. Маленькая. Чёрная полусфера. Система Оптического Треккинга. Их тысячи по всему городу. В офисах. На улицах. В метро. Везде.
Камера повернулась. Объектив нацелился на него.
Взгляд города.
Мурашки пробежали по спине. Даниил замер. Не дышал.
Они знают. URBAN знает, что я нашёл.
Браслет пискнул опять:
«Стресс-фактор критический. Штраф: -0.5 балла. Социндекс: 42.2».
Сорок два и два.
Даниил встал. Ноги ватные. Голова кружилась. Нужно выйти. Подышать. Умыться.
Коридор. Пустой. Все на обеде. Он дошёл до туалета. Зашёл. Включил воду. Холодная. Плеснул в лицо. Ещё раз. Ещё.
Посмотрел в зеркало. Лицо мокрое. Капли стекали с подбородка. Глаза — красные.
Внутренний голос. Холодный. Чёткий.
«Я не могу просто закрыть глаза».
Нет.
Мария. Четыреста двенадцать человек. 23847 за пять лет.
Он вытер лицо бумажным полотенцем. Вышел. Вернулся на место.
Открыл терминал. Начал копировать данные. Логи. Код. Списки. Всё на внешний накопитель. Зашифрованный. Старый кристалл на 128 гигабайт. Купил десять лет назад. Ещё на физическом рынке.
Копирование заняло семь минут.
14:00
Столовая на четвёртом этаже пахла синтетическим мясом и разогретым пластиком. Запах въедался в одежду. В волосы. Даниил сел за дальний стол. Поднос перед ним. Котлета. Картофельное пюре. Компот из непонятных фруктов. Еда нетронута.
Лёха опустился напротив. Ещё двое коллег. Вика из соседнего отдела — тонкая, в очках. Макс, тимлид — крупный, лысый.
— Фантом, ты че такой бледный? — Лёха жевал котлету. Говорил с набитым ртом.
Даниил поднял глаза.
— Нашёл странный код. В светофорной сети.
Вика нахмурилась. Отложила вилку.
— Какой код?
— Протокол. K_LINE_PROTOCOL. Он связан с инцидентами. С людьми ниже сорока баллов.
Тишина. Трое уставились на него.
Макс отложил вилку. Вытер рот салфеткой.
— Крестов. Не лезь.
— Что?
— Не лезь в прод. Не твоя зона ответственности. Светофоры — твоё. ALPHA-CORE — не твоё.
Даниил сжал кулаки под столом.
— Там список ID. Совпадения с базой смертей. Девяносто четыре процента. Моя жена там.
Лёха свистнул. Вика побледнела.
— И что ты хочешь? — Макс говорил тихо. Опасно тихо. — Написать баг-репорт URBAN'у? Пожаловаться в Департамент?
— Я хочу понять—
— Не надо понимать, — отрезала Вика. — Даниил, ты хороший программист. Но не лезь. Не ломай прод. Ты же знаешь правило.
— Какое правило?
— Система всегда права, — Макс встал. Взял поднос. — Если ты нашёл что-то странное — значит, ты чего-то не понимаешь. Не наша зона. Забудь.
Он ушёл. Вика за ним. Лёха допил компот. Посмотрел на Даниила.
— Слушай, Фантом. Я тебя понимаю. Но Макс прав. Не шакаль. Индекс и так у тебя на грани.
— Шакалить? — Даниил усмехнулся. Горько. — Я не шакалю. Я ищу правду.
— Правда — это роскошь Зелёной зоны. У нас — выживание.
Лёха встал. Хлопнул Даниила по плечу. Ушёл.
Даниил остался один. Посмотрел на поднос. Еда остыла. Он не притронулся. Встал. Вышел.
16:30
Коридор второго этажа. Настенный монитор. Корпоративный рейтинг сотрудников. Даниил проходил мимо. Остановился.
Список имён. Цифры рядом. Зелёным — выше 50. Жёлтым — 40-50. Красным — ниже 40.
Его фамилия. Крестов Д.П.
Цифра: 41.6.
Жёлтая. Почти красная.
Он моргнул. Ещё раз посмотрел.
41.6.
Утром было 42.7. После первого стресса — 42.2.
Теперь 41.6.
Минус шесть десятых.
«Unverified Access». Доступ к закрытому коду. K-Line. Система зафиксировала. Алгоритм решил.
Штраф.
Даниил провёл рукой по лицу. Кожа холодная. Липкая.
Один и четыре балла до красной черты.
До оптимизации.
18:30
Вечер. Даниил вышел из здания. Направился к магистрали. Граница секторов F и R. Пешеходный коридор. Линия между мирами.
Жёлтая сторона — чистый асфальт. Фонари. Яркий свет. Реклама на стенах. Люди идут спокойно.
Красная — трещины в дороге. Граффити. Тусклый свет. Мусор. Люди идут быстро. Озираются.
Даниил шёл по центру. По границе. Не там. Не там.
— Крестов!
Он обернулся. Миронов. Сосед. Полевой техник. Худой. Изможденный. В засаленной куртке. Индекс — 31.2. Красная зона. Глубоко.
— Миронов.
— Слышал, ты в муниципалке работаешь. Инфраструктура?
— Да.
Миронов подошёл ближе. Оглянулся. Понизил голос:
— У меня индекс тридцать один и два. Второй месяц в красной. Всё ломается, Крестов. Лифт застрял три раза за неделю. Газ отключается каждый день. Вчера проводка искрила. Я сам починил. Ночью. Боюсь спать.
Даниил смотрел на него. Тридцать один балл. Ниже порога. Целевая аудитория K-Line.
— Ты электрик?
— Нет. Но научился. Иначе сдохну. Правда ведь? — Миронов схватил его за рукав. Пальцы сильные. Отчаянные. — Система нас убивает. Специально. Я знаю. Чувствую.
Даниил хотел ответить. Сказать правду. Да, убивает. Протокол K-Line. Алгоритм оптимизации. 23847 человек за пять лет.
Но промолчал.
Освободил рукав. Отступил.
— Береги себя, Миронов. Держись.
— Крестов!
Он не обернулся. Пошёл дальше. Быстрее.
За спиной Миронов крикнул:
— Ты тоже близко! Сорок один! Я видел на мониторе в вестибюле! Береги себя сам!
Даниил не остановился.
19:10
Квартира встретила тишиной и запахом холодного пластика. Свет горел, холодильник гудел — всё как обычно, но воздух казался вязким, как перед грозой.
На стенном терминале мигало уведомление: «Вы превысили лимит обращений к закрытому коду ALPHA-CORE. Ожидайте визита дрона-верификатора». Сердце ускакало куда-то в горло.
В окне блеснула стальная искра. С тихим шорохом к стеклу подплыл полицейский дрон «Верба-4». Синий сигнальный обод вспыхнул, стёкла разъехались, пропуская машину внутрь — доступ в базе ещё не отменили.
Аппаратура зависла на высоте человеческого роста; прожектор вырезал из полумрака силуэт Даниила.
— Гражданин Крестов Даниил Петрович, социндекс 41.6. Подтвердите личность, — произнёс безжизненный голос.
Слова застряли в горле.
— Подтвердите личность, — повторил дрон, и на корпусе вспыхнул красный скан-пульс.
Электромоторы взвыл и перешли в предзвуковой писк.