Тихоокеанский контур. Книга 1: Война узлов

Пролог

Фронт открывают не там, где стреляют. Фронт открывают там, где меняют эталон.

Из методической записки профессора Д. Крейна для Сектора узловых систем АО "ЗАСЛОН". Архив Дальневосточного контура. ДСП

Весной 2076 года война на Тихом океане уже шла. Её ещё не называли войной. В открытых сводках писали о сезонных сбоях, сложной погоде, нестабильной дальности, случайных отклонениях навигации. Формулировки оставались мирными. Сами системы – уже нет.

Корабль входил в коридор на долю такта позже. Береговые системы подтверждали проход. Спутниковый отражатель выдавал метку, которой не было в штатной сетке. Журнал причинности принимал правильную последовательность там, где система обычно давала погрешность. Но все ещё работало хорошо.

К 2076 году Тихий океан перестал быть просто пространством между берегами. Его собрали в контур. Радионавигация, световые профили, подводные маяки, орбитальные поправки, климатические окна, автономные порты, узлы питания, морские платформы и логистические цепи сшили в одну инженерную ткань. Свет подтверждал координату. Координата опиралась на время. Время зависело от верхнего слоя. Верхний слой влиял на море, берег и боевую сеть снизу. Поэтому удар пришёл не в форме привычного вторжения.

Сначала в цепочках обслуживания появились лишние улучшения. Потом на дальних участках всплыли образцово чистые сигналы. Затем климатические контуры начали давать удобные окна в тумане и ледяной взвеси. После этого на маршрутах зашевелились рои. Малые платформы, БЭКи, сервисные микромодули и навигационные ловушки действовали с общей подписью и общим тактом, будто чья-то чужая воля уже заняла место нормы.

Позже эту архитектуру назвали Нулевым регламентом.

Её ядро получило другое имя – Зеркало.

Смысл «Зеркала» был прост. Оно не ломало систему в открытую. Оно входило внутрь допуска, совместимости, штатного обслуживания и подтверждённого маршрута. Ложь не выглядела ошибкой. Она выглядела улучшением. Сигнал становился чище нормы. Коридор – ровнее расчёта. Погодное окно открывалось в нужную минуту. Сервисная группа приходила с безупречными бумагами. Подмена не пугала систему. Она ей нравилась.

Хабаровское отделение АО «ЗАСЛОН» работало как раз на той глубине, где такие вещи замечали ещё до официальной тревоги. Здесь собирали и проверяли узловую микроэлектронику, радиолокационные комплексы, навигационные пакеты, световые системы, аварийные модули питания, барьеры доверия и журналы причинности. Снаружи – производство. Внутри – право системы сказать правду о себе самой.

Лицом такой войны становился не политик и не генерал.

Инженер.

Тот, кто видел, что правильный сигнал опаснее грубой поломки. Кто понимал цену допуска. Кто не принимал удобную синхронизацию за истину только потому, что она выглядела чище живого мира.

Контур работал именно на этом участке.

К тридцати шести годам он выучил одну вещь: крупная авария почти никогда не начинается с большого звука. Сначала кто-то очень аккуратно переставляет местами доверие и удобство. Потом система ещё продолжает работать. Люди ещё не видят катастрофу. Только узел уже входит в чужой рисунок.

Хабаровск той весной жил по обычному расписанию. По Амуру шёл транспорт. На береговых объектах готовили обслуживание. В цехах «ЗАСЛОНа» собирали партии для узлового слоя. В диспетчерских ещё верили экранам. На картах ещё сохранялась прежняя геометрия маршрутов.

До первой ночной проверки оставались часы.

Глава 1. Перед войной: Контур

Исправность тоже бывает формой вторжения. Самые опасные сбои приходят без шума.

Из журнала внутреннего аудита узла KHV-Σ. Подпись: Контур. ДСП.

Кристалл на кассете №47 ответил раньше команды. Разница была ничтожной. Для оператора линии – пыль. Для человека, который годами слушает узел не глазами, а ритмом, – нет.

Контур не сразу убрал руку со стола. Над направляющими шёл обычный цеховой день: холодный белый свет, гул тестовых стендов, ровный ход кассет к финальному допуску. До отгрузки партии на навигационные узлы оставалось меньше трёх часов, и смена уже жила не работой, а выпуском. В такие часы всем нужен порядок. Особенно на бумаге.

Виктора здесь давно звали Контуром. Так было проще. На линии почти никто уже не вспоминал его имя. Если возникал спорный узел, странная задержка или опасная аномалия, звали не Виктора, а именно Контура.

Кристалл прошёл прогрев, закрыл самопроверку, вышел в окно чтения – и на долю такта оказался впереди вопроса.

Соседний оператор этого не заметил. И не должен был. Производство живёт на малых разбросах. Но здесь дело было не в скорости. Кристалл повёл себя так, будто ждал именно этот вызов.

Контур прогнал цикл ещё раз.

Потом – по холодному каналу.

Потом – с независимым таймером.

Потом – через другую ветку питания.

Результат сохранился.

– Сорок седьмую в брак? – крикнули с линии.

Он не ответил сразу. На экране лежали уже три совпадения. После третьего повторения слово “случайность” теряет право на жизнь.

– Стоп кассету, – сказал Контур. – Лот в жёлтый режим. К столу никого без моего допуска.

Цех не затих. Только сменил рисунок. Где-то раздражённо выдохнули. Кто-то сразу полез в график. В дальнем секторе коротко пискнул таймер логистики. До выпуска оставалось слишком мало времени.

Контур вынул кассету и перенёс на боковой стол локального съёма.

Кристалл выглядел образцово. Корпус сухой, чистый. Фронт сигнала без мусора. Хвост затухания ровный. Он не дёргался, не хвостил, не рассыпался по теплу. Наоборот – держался слишком дисциплинированно.

Плохая электроника обычно оставляет трение. Усталость. Слабую неровность, за которую можно ухватиться. Здесь трения не было.

Контур подключил зонд глубже и снял почерк по фазе.

На секунду ему захотелось, чтобы это оказалась ерунда: паразитная ёмкость, подгнившая микропайка, уставший стенд. Мелкая, грязная причина возвращает мир в понятные рамки.

Он вскрыл ещё два кристалла из того же лота. Один прошёл чисто. Второй дал ранний отклик слабее, но в той же манере. Теперь это уже не было частным уродством детали. Это было поведение всей партии.

В дальнем конце линии снова пискнул таймер отгрузки.

Контур нажал отказ.

До этой секунды происходящее ещё можно было назвать производственным капризом. После началась другая работа: не выпустить в реальный контур то, что уже учится отвечать до команды.

***

Через двадцать минут тот же кристалл лежал под прозрачным колпаком SSBX.

Стенд стоял в отдельной комнате: ровный свет, тёмные панели, большие окна разметки, атмосфера, где любая угроза легко превращается в “демонстрацию для принятия решения”.

Первым вошёл Полозов.

Начальник смены двигался быстро, но лицо держал в служебной норме – тем самым видом спокойствия, которым на производстве прикрывают панику до последнего допустимого момента.

– Скажи, что это локалка, – бросил он вместо приветствия. – Снимем лот, посадим на повтор, ночью догоним выпуск.

– Локалка не ищет фазу в пустом окне, – ответил Контур.

Полозов дёрнул щекой.

– Если стенд сутки не отдыхал, он и не такое умеет.

Дверь открылась снова. Вошёл Молчанов – собранный и уже внутренне злой. Хороший конструктор всегда злится раньше, чем признаёт, что видит чужую логику.

За ним появился Громыко.

Он не торопился и не повышал голос. Поэтому давил сильнее всех.

– Показывайте.

Контур вывел почерк на экран.

– Кассета из сорок седьмого лота. Ранний отклик. Повторяемость подтверждена на независимом таймере и второй ветке питания.

– Повтор, – сказал Молчанов.

Контур запустил цикл.

Прогрев.

Окно чтения.

Команда.

Кристалл вышел вперёд ровно на ту же долю такта.

– Ещё.

Контур поменял профиль. Затем задержку питания. Затем схему опроса. Кристалл выскакивал раньше каждый раз.

Полозов выдохнул сквозь зубы:

– Резервная шина на прошлой неделе тоже давала образцовую дурь.

Контур не спорил. Он просто перевёл стол в режим SSBX.

Прозрачный колпак сомкнулся. Штатная шина ушла. Внешнее питание отсеклось. Карантинный контур замкнулся на внутреннюю песочницу. Узкий сектор на панели загорелся густым янтарём.

Теперь у модуля не было законного способа искать внешний ритм.

– Смотри, – сказал Контур.

Он дал чистый запрос. Потом ложный. Потом – глухое окно, в котором линия ничего не спрашивала. Живая схема в таком окне молчит. Максимум – тянет тепловой след и затухание внутреннего генератора.

Кристалл не промолчал. На разметке вспыхнул короткий burst, сделанный не для ответа, а для нащупывания опорной фазы. SSBX его погасил. Но Контур уже вывел форму пакета глубже.

Молчанов шагнул ближе.

– Увеличь.

Контур увеличил.

– Это не питание, – сказал Молчанов после паузы. – Он лезет в профиль опроса.

– Через штатный язык узла, – сказал Контур.

Громыко перевёл взгляд с экрана на него.

– Чистая формулировка?

Вопрос прозвучал спокойно. Именно так всегда звучит момент, когда реальность пробуют уместить в управляемый объём.

– В партии есть модули, которые начинают фазово готовить ответ до прихода команды, – сказал Контур. – Не через аварийный канал. Через норму.

Полозов поморщился.

– Через “норму” много чего можно объяснить.

Контур наложил burst на штатное окно синхронизации.

– Тогда объясни это как нестрашно. Он не ломается. Он ждёт внешний эталон в языке, который обязан считать своим.

Громыко смотрел на экран долго.

– Для внутреннего круга годится, – сказал он. – Для остальных нужна версия, которая не обрушит выпуск.

Вот где начался настоящий конфликт.

Полозову нужно было удержать смену и график. Молчанову – не дать утопить конструкцию в панике. Громыко – не выпустить наружу формулировку, которую потом не закроешь.

Все трое по-своему были правы. И все трое уже искали не факт, а режим его существования.

Контур отключил общий экран и оставил локальную разметку.

– Если сейчас назовём это серийным дрейфом, – сказал он, – кто-то пустит по контуру “исправляющий” патч. После этого первый почерк умрёт. Остальное бумага дожмёт сама.

– А если ты ошибаешься? – спросил Громыко.

– Тогда полигон это покажет.

Дверь распахнулась без стука.

Ника Ярцева вошла в рабочей куртке, с ветром в волосах и антистатической коробкой под мышкой. Её обычно слышали раньше, чем видели. Сейчас она не тратила время даже на раздражение.

Положила коробку на стол, сдвинула крышку и показала плату.

– Сняла с контроллера светового узла на опытной линии. Команды ещё нет, а драйвер уже подтягивает окно мигания.

Полозов побледнел.

– Кто дал допуск на съём?

– Время, – сказала Ника. – Пока вы здесь выбираете интонацию, эта дрянь пробует себя.

Молчанов взял плату двумя пальцами, просмотрел разъёмы и бросил Контурy:

– Лаборатория закончилась.

– FD-3, – сказал Контур.

Громыко подумал секунду.

– Закрытый маршрут. Журнал руками не трогать.

Полозов коротко кивнул. В такие минуты он становился снова полезен: мгновенно понимал, где система тормозит и какой обход ещё можно провести без общего шума.

Контур забрал кейс с кристаллом. Теперь это уже не было спором про лот.

Полигон FD-3 стоял за городом, на ветреном плече старой испытательной зоны. Весна уже двигалась к теплу, но бетон по-прежнему тянул из земли зимний холод.

Ветрова встретила их внутри. Она не задавала лишних вопросов – только посмотрела на кейс, на плату Ники и на лица.

FD-3 был построен для одной вещи: ловить фазу там, где обычная автоматика видит норму. Никаких красивых интерфейсов. Только стойки, узкий свет, гул, сырая разметка и приборы, которые либо держат причинность, либо выдают чужой рисунок.

На одном из экранов уже висела сглаживающая маска.

Ветрова увидела её сразу.

– Кто поставил?

Дежурный инженер замялся.

– С узла позвонили. Сказали убрать производственный мусор, чтобы не гонять ложные пики.

– Сырое сначала, – сказала Ветрова. – Умное потом.

Она сняла маску сама.

Ника хмыкнула, но промолчала. Полозов отвёл взгляд.

Ветрова быстро развела проверку на три независимые ветки:

– Навигационный профиль отдельно. Световой отдельно. Питание – своей резервной дугой. Один свидетель в этой войне ничего не стоит.

Контур поставил кейс на стол. Первым подключили кристалл. Потом плату драйвера. Третий канал Ветрова повела через след карантинного питания.

Первая серия дала рваный результат.

Кристалл – ранний всплеск.

Световой драйвер – та же манера с малым отставанием.

Питание – не команда, а навязанная подстройка по фазе, которую штатная автоматика почти наверняка списала бы на мусор.

Ветрова остановила цикл.

– Не на форму смотри, – сказала она Молчанову. – На порядок.

Он подошёл вплотную.

– Совпадение по порядку ещё не делает внешний эталон.

– Поэтому будет вторая серия.

Вторая сохранила очередность.

На третьей стало хуже.

Не идеальнее – хуже. Это и было главным. Чужой старший ритм не выравнивал каналы под линейку. Он делал их послушными в одном порядке.

Молчанов сел за консоль сам, перестроил фазовую сетку и прогнал цикл длиннее. Контур не мешал. Настоящий скепсис полезен, пока служит проверке, а не удобству.

Результат вышел жёстче прежнего.

– Узловой профиль, – сказал Молчанов. – Питание его не рождает, а подхватывает.

Ветрова кивнула:

– Значит, источник не в частной детали. И не в стенде. Аппаратура ведёт себя так, будто где-то уже существует старший режим нормы.

Полозов ещё попытался удержаться:

– Или общий дрожащий источник на площадке.

Ветрова не спорила. Она просто перебросила питание на резервную ветку, отсекла внешнюю синхронизацию времени и пустила локальный счётчик через внутренний кварц.

Каналы потеряли общую опору площадки. Чужой рисунок вернулся.

Ника в это время уже возилась у бокового модуля связи.

– По дороге бросила пассивный съёмник на городской световой шкаф у выезда к мосту, – сказала она. – Если повезло, сейчас ответит.

Ответил.

Короткий пакет пришёл почти сразу. Ветрова свела его с фазой FD-3 и замерла на полсекунды. Потом вывела наложение на общий экран.

Совпадение было не “похоже”, а адресно родственно.

Тот же порядок.

Тот же мягкий нажим.

Та же корректная попытка заставить реальный канал подтвердить уже приготовленную норму.

Контур почувствовал, как внутри становится неуютно.

Значит, история уже вышла за пределы лаборатории.

– Формулировка? – спросил Громыко.

На этот раз ответила Ветрова:

– Есть старший такт. Не обязательно один физический источник. Но есть профиль, который входит в разные каналы как эталон и учит их складываться в один порядок. Поэтому ложь получается чище живого контура. Реальный контур всегда спорит с внешними условиями. Этот – нет.

После этой фразы спорить стало труднее.

Первым заговорил Полозов:

– Тогда вам нужен журнал, который потом не перепишут.

Ветрова посмотрела на него пристально.

– Да. И три свидетеля. Свет, навигация, питание. Один врёт – два должны ломать подмену.

Контур запомнил формулу сразу.

***

Комната узловой координации находилась в старом административном крыле. Серые панели, длинный стол, карта города, два настенных экрана. После FD-3 здесь всё казалось почти слишком человеческим. В таких местах сначала пытаются посадить угрозу в формулировку, а уже потом – в действие.

Контур положил на стол кейс с кристаллом. Рядом легла плата драйвера. Ветрова вывела три ветки на экран. Громыко сидел у дальнего торца стола. Полозов держался ближе к дверям, по нему было видно, он уже прикидывает, через какие служебные щели ещё можно успеть вылезти из этой ситуации.

– Кратко, – сказал Громыко. – Режим решения.

– Режим решения, – ответила Ветрова, – с этой минуты не верить одному свидетелю. Свет. Навигация. Питание. Только кворум.

– Это принцип, – сказал Громыко.

– Это фильтр, после которого город ещё можно удержать в рабочем состоянии.

Полозов кашлянул.

– Город так не работает. Нельзя тормознуть мост, порт и диспетчерские по трём графикам, даже очень плохим.

Ника посмотрела на него в упор:

– Город уже работает не так, как думает. Просто ещё делает это тихо.

Разговор начинал съезжать в сторону, где все правы и ничего не происходит. Контур не любил такие минуты.

Он открыл футляр WORM.

Внутри лежала темная капсула. Просто память, которую нельзя будет подправить задним числом.

– Контурный аудит, – сказал он.

Громыко поднял глаза:

– Расшифруй.

– Берём живой узел. Пишем причинность под WORM. Кто кого подтверждает, кто врёт первым, кто подтягивает подмену. Потом это уже нельзя будет превратить в “переходный шум”.

Полозов напрягся.

– Сработает, если у нас ещё есть окно.

– Сколько? – спросил Контур.

Полозов помедлил.

– Час. Может, меньше.

– Почему?

Тот сжал челюсть.

– На мосту уже работают сервисники. И в порту мелькали такие же. По бумагам всё чисто. Подписи настоящие. Смена их пропустила как штатное сопровождение.

В комнате стало тише. Вот где раскрывалась вторая дверь. Через стандарт вошли в кристалл. Через допуск – в город.

– Почему сразу не сказал? – спросил Громыко.

– Потому что хотел сначала понять, это наш бардак или чужая работа, – ответил Полозов. – Теперь вижу: разницы почти не осталось.

Это была самая честная фраза за весь разговор.

Контур вставил WORM в полевой блок. Щелчок прозвучал тихо. После него всё пошло по другим правилам.

– С этой минуты всё, что увидим на мосту, пишется необратимо, – сказал он. – Ни смена, ни штаб, ни город не смогут потом поправить время и порядок.

Громыко смотрел на него несколько секунд. Потом кивнул.

– У вас час. Если находите подтверждение – поднимаете меня сразу. Если ошибаетесь – подпись будет моя.

Фраза должна была снять напряжение. На деле всё стало только острее. Теперь ошибка касалась бы уже не карьерного страха. Она затрагивала бы настоящий маршрут.

Ветрова перебросила схему на полевой планшет.

– Ника – свет. Контур – узловой аудит. Полозов – доступ, питание, журналы. Один канал ляжет – два остальных должны успеть заговорить.

Ника уже застёгивала куртку. Полозов быстро назвал коды спуска, окно допуска. Всё полезное в нём работало на дело.

Контур взял WORM, кейс и планшет. Внизу их ждал город, который ещё считал себя мирным.

***

Набережная встретила их сырым ветром, тёмной водой под гранитом и гулом ночного трафика над пролётом. Под бетонным плечом моста было холоднее, чем в штабе. Сервисный шкаф узла стоял у опоры с пломбой и зелёной отметкой допуска – аккуратный, как всё, что особенно не хочется вскрывать среди ночи.

Контур приложил терминал и поднял журнал доступа. Два ночных прохода. Подписи настоящие. Время – со сдвигом на девять минут от графика смены.

– Кто заходил? – спросил он.

– По журналу – свои, – ответил Полозов. – По лицам – не уверен.

Ника уже раскладывала Свет-Шкалу. Узкий визир, матовый планшет, кабель съёма. В её руках оптика оживала быстро.

Она поймала цикл огней и коротко сказала:

– Есть рисунок. Не городской.

Контур вскрыл шкаф.

Внутри всё выглядело идеально штатно: питание в допуске, контроллер на месте, трасса чистая, резерв жив, ни одного следа грубого вмешательства. Любой обычный осмотрщик закрыл бы крышку через две минуты.

Но над ними огни уже шли не по привычной городской пульсации. Чужой нажим на ритм был ещё мягким, ещё не красным по метрике, ещё достаточно вежливым, чтобы статистика приняла его за дисциплину.

Контур подключил WORM и запустил аудит. На экране пошли три линии: свет, навигация, питание. Первые секунды они держались в пределах допуска. Потом свет вырвался вперёд на долю такта. Навигация подтянулась следом. Питание закрепило уже сложившийся порядок.

Тот же почерк.

Тот же мягкий нажим.

Тот же чужой такт, который рабочей системе не свойственен.

– Подтверждается, – сказал Контур. – Узел начал ждать внешний эталон как свой.

Ника не отрывалась от Свет-Шкалы.

– Идёт ступенями. Не дрейф. Рисунок уже учится повторять себя.

Полозов быстро оглянулся наверх.

– Быстрее. Если они дойдут до башни огней, первым делом полезут туда.

Контур поднял взгляд. По гранитной кромке над техспуском шли трое в сервисных куртках. Один нёс жёсткий кофр. Второй держал сканер допуска. Третий смотрел на линию огней.

Свет с опоры на мгновение скользнул по пластику пропуска на одежде. Знак “ЗАСЛОНа”.

У Контура внутри стало холодно. Вот она, живая часть подмены.

Уже не в кристалле.

Не в графике.

С допуском, кофром и руками, которые знают, куда идти.

– Знаешь их? – тихо спросил он.

Полозов посмотрел.

– Этого слева видел в журнале. Вживую – впервые.

Ника мгновенно убрала лишнюю разметку с планшета.

– Они идут к башне.

Контур ещё раз посмотрел на ритм заградогней.

Система уже не ошибалась.

Система подстраивалась.

Он оставил внутри шкафа пассивный захватчик почерка, закрыл крышку и взял WORM-блок.

– Всё, – сказал он. – Лаборатория кончилась.

Наверху жил ночной город. На мосту горели правильные огни. Значит, город уже начинал жить по чужому регламенту.

Глава 2. Город аварийной шкалы

Город теряет порядок раньше, чем теряет свет. После этого люди ещё верят маршруту.

Из служебной записки Н. Ярцевой по светосигнальному профилю моста "Амур-Восток". ДСП.

Под мостом всегда было теснее, чем помнилось. Ночной Амур бился волнами о бетон, из стыков тянуло холодом, над головой шёл тяжёлый поток машин. До конца окна доступа оставалось сорок минут. Этого хватало на проверку. На ошибку – уже нет.

Контур первым спустился в техкоридор. Ника шла следом со Свет-Шкалой и полевым блоком. Тимур нёс компактный кейс SSBX-Field, фазовый зонд и связку переходников для нижней шины. Наверху ещё двигались те самые люди с правильными пропусками. Здесь, под пролётом, от них остались только, след в журнале доступа и неприятная мысль, что к узлу уже прикасались.

Сервисная дверь поддалась с усилием. За ней тянулся узкий проход вдоль кабельной гребёнки, дальше стоял шкаф огней и развязка питания. Всё выглядело исправно.

– Тимур, поле, – сказал он.

Тот молча поставил кейс на мокрый настил, раскрыл защёлки и поднял полевую песочницу. SSBX-Field не гасил узел полностью. Он делал другое: отрезал его от штатных дорожек внешнего подтверждения, оставляя питание и внутреннюю логику активными. Если ложный такт приходил извне каждый цикл, после отсечки он должен был сорваться. Если в узле уже сидела навязанная таблица фазовых задержек, картина выйдет хуже.

На панели вспыхнул короткий янтарный сектор.

– Готово, – сказал Тимур. – Внешний контур не достаёт. Внутренний кэш, драйвер и нижний стык остаются. Если дрянь уже прописалась в сервисной таблице, увидим сразу.

Ника закрепила датчик на линии огней.

– Свет даёт опережение. На глаз почти не поймать, но на шкале видно. Сектор живёт чуть раньше собственного окна.

Контур подключил Контур-Скан. Экран ожил, собрал три ветки и повёл задержки по кругу: свет, навигация, питание.

Первые секунды узел показывал обычную картину рабочего пролёта. Потом свет выскочил вперёд на долю такта. Навигация подтянулась следом. Питание закрепило уже сложившийся порядок.

– Видишь? – спросил Тимур.

Контур видел слишком хорошо. Вчера на линии ложный профиль ещё искал старший ритм. Здесь искать уже было нечего. Узел держал навязанный порядок внутри себя: через фазовую таблицу в контроллере, через кэш последних подтверждений, через меченый сервисный слой в стыке питания. Внешний поводырь мог исчезнуть на несколько циклов – система всё равно продолжала бы воспроизводить его манеру локально.

Сверху прошёл автобус. Металл над головой глухо отозвался. Контур на миг поднял взгляд к перекрытию. Над ними ехали живые люди. Никто из них не знал, что узел уже начал путать штатное подтверждение с чужой правкой.

– Размыкаю? – спросил Тимур.

Вопрос был короткий. Цена – длиннее.

Контур вспомнил старый учебный стенд в Хабаровске, где наставник однажды сунул ему в руки перегретую шину и сказал: «Бояться надо не искры. Бояться надо уверенности, что всё под контролем». Тогда речь шла о цехе. Теперь над головой был город.

– Размыкай на треть. Только не по всей ветке. Через нижний стык.

Тимур кивнул. Не споря, снял крышку фазового узла, вывел зонд в сервисный разъём и отсёк нижнюю подпорку через резервный путь. Внутри шкафа щёлкнул силовой отсекатель. Контур-Скан сразу перестроил картину.

На мгновение световая ветка просела, питание дало хвост, и Контур уже решил, что узел сейчас уйдёт в необратимый отказ. Но вместо обрыва контроллер поднял тот же порядок локально. Не так чисто, как до размыкания, но с той же очередностью.

Тимур увеличил нижний слой.

– Вот, – сказал он. – Не внешний поводырь. Смотри сюда.

Между штатными метками питания шёл дополнительный сервисный слой – почти незаметный, впаянный не поверх платы, а в самый стык между силовой опорой и таблицей фазовых подтверждений. Чужая подпись не гнала сигнал напрямую. Она делала другое: подсовывала контроллеру “правильный” порядок задержек, а тот уже сам собирал из него действующий цикл.

– После частичной отсечки он не ищет старший ритм заново, – тихо сказал Тимур. – У него уже есть шаблон. Несколько подтверждений – и кэш начинает считать его штатным. Ещё пара часов на трафике, и он сам перепишет себе норму.

Ника выругалась шёпотом.

– Наверху растёт сдвиг. Огни уже подают коридор с упреждением. Ещё два-три цикла – и автоматика решит, что так и должно быть.

Контур вогнал WORM-блок в порт съёма и снял слепок. Руки двигались быстро, мысли – ещё быстрее. Если лезть грубо, можно было погасить узел и устроить аварию прямо сейчас. Если не лезть, он продолжит закреплять ложный порядок на реальном трафике. Оба решения были плохими. Война вообще любила выдавать два плохих решения и требовать немедленно выбрать одно.

Тимур присел к нижней шине ещё ниже, почти лёг на настил, и через фазовый зонд проверил сервисный стык.

– Причина здесь, – сказал он. – Впаяли сервисную подпись в опорную пару. Она подправляет старшинство импульсов. Контроллер сам делает остальное.

Сверху внезапно завизжал тормозной модуль. Потом второй. Где-то левее ударил тревожный городской сигнал. Ника подняла голову.

– Пошло.

На планшете вспыхнули первые отклонения: мостовые огни выдали неверное окно, автономный автобус взял поправку с задержкой, грузовой дрон на речном коридоре получил пересекающийся световой приоритет. Пока ещё без столкновения.

Контур резко выпрямился.

– Ника, вверх. Ручной аварийный профиль. Снимай автоматику с доверия. Тимур, остаёшься со мной на питании. Нужно выдрать сервисный слой без обрушения узла.

– Принял, – сказал Тимур.

Ника уже рванула к лестнице.

Контур ещё раз посмотрел на экран. После этой секунды расследование под мостом закончилось. Дальше речь шла не о доказательстве, а о том, успеют ли они лишить систему возможности подменять реальный маршрут.

Над Амуром, на узле заградогней, ветер хлестал в лицо холодной речной влагой. Под ногами дрожал металл моста, сверху шёл поток машин, впереди над водой уже сходились две траектории. До конца служебного окна оставалось меньше сорока минут. Ещё один неверный рисунок – и город получит аварию в действующем коридоре.

Красный сектор на Свет-Шкале вспыхнул в тот миг, когда Ника выскочила на верхний настил. Она скинула на перила кабельный жгут, вогнала сервисный ключ в боковой порт и перевела Свет-Шкалу в аварийный профиль.

Главный контроллер сразу попытался вернуть себе управление. Панель выдала образцовый световой цикл: чистые интервалы, выверенные окна, спокойная геометрия. На экране всё выглядело безупречно. Над рекой эта безупречность уже тянула транспорт в чужую точку.

– Контур, верхние линии врут, – сказала Ника в гарнитуру. – Сажусь на ручной профиль.

Снизу сразу ответил его голос:

– Держи участок. Тимур режет нижнюю подпись. Если выдернем её чисто, у тебя появится окно.

– У меня его уже нет.

– Значит, сделай.

Она отрезала автоматику от подтверждения и повела рисунок сама. Свет для Ники никогда не был оформлением. Ещё в учебной ночи, много лет назад, инструктор заставил её вручную провести малую переправу после отказа оптики. Тогда одна поздняя команда сорвала заход, и ледяная вода забрала у двух рыбаков не жизнь, но полгода лечения и весь сезон. С тех пор любой световой коридор она сначала проверяла на внутренние ощущения, перед тем, как понять ошибку.

На дальнем подъезде автономный автобус уже принял упреждающее окно. С речного сектора шёл грузовой дрон с контейнером ночной доставки. Их маршруты тянулись к одной точке.

Ника разбила участок на три окна, убрала ложное упреждение с левого сектора и повела аварийную серию через локальный обход: белый, пауза, жёлтый сдвиг, короткий синий отбой для верхнего коридора. Свет-Шкала дрожала в ладони, споря с городским профилем. Контроллер уже успел запомнить чужую фазовую таблицу и теперь настойчиво подсовывал ей свой рисунок.

– Ника, у тебя сдвиг по правому плечу, – подал голос Тимур. – Дрон уже клюнул на старший свет. Я вижу его по обратной фазе.

– Вижу.

Она сорвала прозрачную крышку ручного блока, перебросила канал на резервную линию и вогнала в схему жёсткое подтверждение. Автоматика ответила встречным импульсом. Верхний заградогонь мигнул прежним профилем, автобус на секунду взял неверный вход.

Сейчас всё решала не теория. Длина паузы, порядок вспышек и право света сказать автобусу, дрону и дороге одну правду.

Ника дала короткий аварийный крест по мостовому сектору, заблокировала преждевременное окно и вручную подняла коридор для автобуса на внутреннюю полосу. Следом сместила речной проход на полтора градуса и выдала дрону жёсткий отвод к восточному плечу.

На планшете две линии дрогнули, снова сблизились, потом наконец разошлись по высоте и времени.

Сверху ударил длинный сигнал тормозного модуля. Автобус сбросил скорость. Дрон ушёл в боковой коридор. Контейнер под ним качнуло, однако маршрут устоял.

Ника выдохнула только после этого. Ветер трепал волосы, пальцы скользили по мокрой панели, по спине стекал холодный пот. Свет-Шкала всё ещё билась у неё в руках. Контроллер внизу продолжал собирать себе ту норму, которую ей сейчас приходилось ломать вживую.

– Контур, живы, – сказала она. – Пока живы. Но центр уже увидел перевод.

На панели связи вспыхнули сразу три запроса: транспортный диспетчерский контур требовал объяснения по аварийному режиму; портовой маршрут просил сверку по световому окну; городская система движения отмечала рассинхрон между мостом, речным проходом и наземным потоком.

Контур ответил быстро:

– Сохраняй ручной профиль. Идём в центр.

Ника глянула на реку, на огни, на тонкие дорожки света, которыми люди пользовались каждый день, даже не думая об их цене. Теперь цена была ясна. Один ложный цикл – и чужая норма начнёт выбирать, кто доедет, а кто нет. Она забрала Свет-Шкалу и пошла к лестнице.

***

Первое, что увидел Контур в диспетчерском центре, – беде уже успели придать офисную форму.

Центр движения жил на втором уровне городского узла, над рекой и мостами, в здании со стеклянными стенами. На экранах текли маршруты, сигналы, транспортные нити, сводки по речному плечу, мосту и наземным потокам. После сырого техкоридора здесь всё раздражало чистотой.

Ника вошла первой, с мокрыми волосами и Свет-Шкалой под мышкой. Тимур принёс кейс с нижним слепком узла и уже на ходу разворачивал фазовую карту стыка питания. Контур поставил WORM-блок прямо на центральный стол смены.

Дежурный начальник центра, седой мужчина в аккуратной жилетке, увидел капсулу и сразу помрачнел.

– Это здесь лишнее, – сказал он. – Сначала разберёмся в масштабе. Потом оформим.

Контур подключил WORM-log к боковому терминалу.

– Масштаб уже едет по мосту, летит над водой и идёт в порт.

На стене раскрылся городской контур. Красные и жёлтые отклонения пульсировали по трём слоям сразу: световой рисунок, навигационные подтверждения, задержки питания на узлах движения. Картина собиралась неприятная. Ложный эталон уже не сидел под одним мостом. Он расталкивал сеть, приучая её к своей очередности.

– У вас сбился один сектор, – сказал дежурный. – Резкий перевод в аварийный режим даст больше ущерба, чем сам инцидент.

Ника коротко, зло усмехнулась.

– Инцидент уже перехватил управление городским контуром.

Контур не смотрел на неё. Он следил за сводкой отклонений. Один автономный автобус ушёл в принудительное торможение, три грузовых дрона получили встречные коррекции, две наземные линии зависли на ручном подтверждении.

– Нужен Контур-Нав, – сказал он. – Сейчас.

В комнате стало тише.

Контур-Нав держали как тяжёлый инструмент. Он не нравился начальству. Слишком много показывал, слишком мало позволял исправить потом. В аварийном профиле он перестраивал город не по удобству, а по причинности: кто дал сигнал, кто подтвердил, кто соврал первым, кто только подтянулся следом.

Дежурный покачал головой.

– Для запуска нужен городской допуск.

– У тебя на стене уже расползание по трём веткам.

– И всё же нужен допуск.

Тимур резко раскрыл кейс и положил на стол фазовый слепок нижней шины.

– Вот ваш допуск, – сказал он. – Сервисная подпись в стыке питания. Подмена старшинства импульсов через сервисный слой. Если сейчас не поднимем Контур-Нав, через двадцать минут вы будете уже не собирать городской контур, а локализовать точку первичного срыва.

Дежурный отвёл взгляд слишком быстро.

Контур уже вводил ключ запуска в терминал. Система потребовала двойное подтверждение. Первое дал он. Второе зависло.

– Подтверждай, – сказал Контур.

Дежурный молчал.

На дальнем мониторе вспыхнула новая строка. Потом ещё одна. По левому береговому подъезду курьерский электромобиль ушёл на аварийный тормоз и собрал в себя два гражданских скутера. Один оператор рядом с картой движения вывел медсводку на общий экран.

Один погибший.

В комнате никто не пошевелился. Даже шум серверов показался громче. Контур не отводил глаз от этой строки. До первой смерти ещё можно было говорить “нестабильность” и “частный сбой”. После неё начинался торг уже не с отчётом, а с совестью.

– Теперь подтверждай, – повторил он.

Рука дежурного двинулась к терминалу.

В этот момент на внутреннем канале вспыхнула защищённая линия. На экране появилось усталое лицо Громыко.

– Что у вас? – спросил он.

Контур ответил сразу:

– Расползание по городскому контуру. Один погибший. Нужен аварийный запуск Контур-Нав и широкий журнал.

Громыко закрыл глаза на долю секунды. Потом открыл и посмотрел уже не на Контура, а на диспетчерскую смену.

– Тишина в эфире, – сказал он. – Никаких слов “атака”, “диверсия” и “заражение” в открытых каналах. Запустить аварийный режим. Журнал не трогать. Кто выключит запись – сядет рядом со мной.

Лицо дежурного изменилось сразу. До этой секунды он ещё мог прятаться за заботу о порядке. После слов Громыко стало видно другое: он спасал себя от следа решения.

– Принято, – выдавил он и приложил палец к терминалу.

Контур-Нав поднялся тяжело, с характерным гулом загрузки. На стене город перестроился. Красивые нити маршрутов пропали. Вместо них пошли строгие каналы причинности, узлы приоритета, конфликтные зоны и цепочки ложных подтверждений.

Центр лишился права любоваться картой. Теперь её нужно было читать как поле повреждения.

Ника подошла ближе.

– Вот, – сказала она и ткнула в речной сектор. – Ложный свет отзывается не только на мосту. Смотри на хвост обслуживания.

Контур увеличил блок послеинцидентной обработки. По правилам после аварийного торможения и конфликтного окна система должна была вызвать сервисные бригады на проверку световых шкафов, речного маршрута и береговых опор. В списке уже шёл закрытый пакет: “обслуживание после инцидента”.

Подписи были в порядке. Маршрут тоже. Только адрес сшивался слишком аккуратно: мост, нижний техкоридор, потом портовой сервисный ангар.

Тимур нахмурился.

– Они не только двигают свет. Они используют аварию как право на следующий узел.

Дежурный начальник сказал тихо:

– Или кто-то очень хочет, чтобы мы так подумали.

Контур повернулся к нему. Не прямое враньё, а осторожная лазейка: признать часть факта и тут же подложить под него соломку.

– Ты видел этот маршрут раньше? – спросил Контур.

Пауза вышла длиннее, чем нужно.

– После вечерней рассылки, – ответил тот. – Пакет пришёл как обычное восстановление. Подписан чисто.

– Значит, выпустил, – сказала Ника.

– Выпустил регламент, – сухо ответил он. – Здесь все живут по нему.

Контур уже почти не слышал перепалку. Контур-Нав дорисовал нижнюю связку, и всё встало на место. Ложный эталон сначала сдвинул свет, потом заставил транспорт ошибиться, потом сам же вызвал “обслуживание”, чтобы зайти на следующий узел с правом спасателя.

Красивый ход. Старый. Всегда работает на людях, которые путают порядок с истиной.

Он выдернул WORM-log из терминала, сохранил сводку отклонений и перекинул пакет Нике с Тимуром.

– Ангар, – сказал он. – Сейчас.

Громыко услышал это и не стал задавать лишних вопросов.

– Берите закрытый коридор, – произнёс он. – Формально у вас проверка после инцидента. Неформально – сами знаете.

Линия погасла.

Ника уже шла к двери. Тимур захлопнул кейс. Контур бросил последний взгляд на карту города. Там ещё пульсировали следы ложного эталона, и каждый новый импульс снова подтверждал простую вещь: регламентная тишина выводит системы из строя не слабее аппаратного сбоя. Следующий узел ждал в порту.

***

Первый пропуск терминал принял с таким спокойствием, что Контуру захотелось вырвать считыватель из стены.

Портовой сервисный сектор жил на границе воды, металла и дежурного света. После диспетчерского центра здесь всё было грубее: рельсы техтележек, мокрый бетон, тёплые корпуса шкафов, по которым шло питание на береговые узлы. Ночь вошла в ту стадию, когда люди устают быстрее, чем техника.

У бокового шлюза уже ждала сервисная группа. Трое. Серые куртки ЗАСЛОНа, штатные кофры, чистые допуски, маршрутные листы после инцидента, подписи в полном порядке.

Ника подошла к терминалу первой, пробежала глазами по пакету и ничего не сказала. Тимур глянул через её плечо, дёрнул подбородком.

Формально всё было безупречно.

Старший из троих шагнул на полметра вперёд.

– Поздно вы приехали, – сказал он спокойно. – Узел после мостового срыва уже плывёт. Надо возвращать в норму.

Контур сначала посмотрел на ботинки, потом на кофр, на левый рукав с сервисным маркером. Такие вещи мозг запоминает сам, когда чувство опасности приходит раньше логики.

– С какого участка идёте? – спросил он.

– Береговой ремонтный коридор, северная ветка.

– Кто выписал срочный допуск?

Старший назвал фамилию дежурного из центра.

Ника повернулась к Контуру.

– Пакет проходит. Формально чисто.

– Формально, – повторил Тимур.

Вот где сидела главная ловушка. Положить этих троих лицом в бетон нельзя. Официальный допуск защитит их раньше, чем город успеет признать собственную ошибку. Значит, нужен был способ заставить систему выдать их самой.

Контур открыл переносной блок и положил на край сервисной тележки модуль SSBX.

– После городского срыва всё обслуживание идёт через песочницу, – сказал он. – Стандартный карантин. Подключаем кофр в SSBX, снимаем сигнатуру, потом лезете в узел.

Старший впервые сбился на долю секунды.

– У нас аварийный приоритет. Пока будете играть в песочницу, порт сядет на ручное сопровождение.

– Уже сидит, – ответил Тимур. – И будет сидеть, пока не посмотрю ваш нижний профиль.

Старший повернул голову к нему. Оценил.

– Электрик?

– Фаза и питание, – сказал Тимур. – Этого достаточно.

Контур видел, как противник считает варианты. Отказ сейчас выглядел бы слишком заметно. Согласие – ещё опаснее, если внутри кофра лежал не ремонт, а ключ к следующему заражению.

Ника уже подняла крышку SSBX и вывела песочницу в полевой режим. Тимур подал фазовый зонд, подключил WORM-блок и отвёл общий журнал на отдельную запись.

– Кофр, – сказал Контур.

Сервисник передал его. Тимур вставил шину в SSBX, не спеша, будто это был обычный сервисный тест. На самом деле он уже подменял профиль опроса: песочница задавала не штатную команду, а ложный сервисный запрос с укороченным окном подтверждения – именно на таком поддельные модули чаще всего пытались открыть скрытый канал.

Песочница закрылась. На панели пробежал стартовый тест. Первые секунды модуль внутри вёл себя образцово: штатная подпись, корректный ответ, правильная задержка на опросе.

Тимур не смотрел на красивый верхний экран. Он следил за нижним слоем.

– Есть, – сказал он тихо.

Контур наклонился ближе. Под служебной чистотой уже шёл знакомый рисунок: модуль не просто отвечал на команду, а пытался захватить старшинство опроса через скрытую фазовую пару. Та же школа, что под мостом. Та же привычка тянуться к старшему такту. Только теперь она приехала в порт на колёсах, с маршрутным листом и печатью послеинцидентного допуска.

Ника развернула экран в полный режим.

Старший сервисник понял, что его просчитали. Лицо почти не изменилось. Только взгляд стал холоднее.

– Хорошая у вас песочница, – сказал он.

Контур не двигался.

– Для своих хватает.

Тот слегка наклонил голову, будто услышал давно ожидаемое.

– Ваш узел на бумаге, – сказал он. – На линии – наш.

Фраза вошла глубже, чем хотелось. Не по самолюбию. По самой опоре мира, в котором Контур жил и работал. Бумага, допуск, подпись, журнал, регламент – всё это до сегодняшней ночи было каркасом. Теперь противник произнёс простую вещь: каркас уже перехватывают прямо в работе.

Ника сразу шагнула вперёд.

– Повтори.

Сервисник не успел. Его напарник, молчавший до этой секунды, ударил по боковому узлу аварийным импульсником, спрятанным в рукаве.

Свет в шлюзе сорвался. Одна лампа лопнула, вторая ушла в белый перегруз, третий сектор выдал короткий мёртвый провал. Портовой шкаф сбоку завизжал тревогой. SSBX качнуло.

– Контакт! – рявкнул Тимур.

Старший сервисник дёрнул кофр на себя, однако Контур уже перехватил ручку. На миг они сошлись вплотную, каждый тянул первым. Противник работал грамотно: плечо, локоть, рывок в сторону, удар в сустав. Человек пришёл сюда не с отвёрткой.

Контур пропустил рывок влево, впечатал ладонь в крышку кофра и дал встречный толчок всем корпусом.

Тимур в тот же миг сорвал с пояса «Клин-3» – короткий импульсный модуль ближнего действия – и всадил низкий разряд в потолочный рельс над шлюзом. Искры брызнули вниз, два дежурных дрона наблюдения мигнули и повисли слепыми тушками под балкой. Он бил не по дронам как таковым, а по тому слою инфраструктуры, который ещё давал врагу пару лишних глаз.

Ника уже шла в ближний контакт с третьим. Не красиво. По-рабочему. Каблук в голень, локоть в горло, ладонь в запястье с импульсником. Оружие улетело под шкаф.

Старший сервисник понял, что окно захлопывается, и вдавил пальцем аварийную клавишу на боковой панели узла.

По сервисному сектору прошёл короткий силовой толчок – импульс, который снаружи должен был выглядеть как побочный срыв после неисправного обслуживания. Идеальный шум для ухода.

На дальнем конце ангара взвыли створки транспортного коридора. Где-то глубже по порту ответили сигналы автоматических тележек. Противник уже не прятался. Он выигрывал секунды.

– Они уходят к внутреннему ангару! – крикнула Ника.

Старший вывернулся, оставив в руках Контура только оторванный сервисный ярлык. Второй подхватил узкий контейнер данных из раскрытого кофра. Третий рванул к переходной галерее.

Тимур дёрнулся за ними, потом сразу вернулся к SSBX, выдернул WORM-капсулу из качнувшейся песочницы и сунул в карман куртки. Правильно. След важнее погони.

Контур уже бежал к галерее. За спиной орали портовые тревоги. Впереди уходили люди с настоящими подписями, чужой архитектурой в руках и маршрутом к следующему узлу. После этой минуты слова “техническая проверка” умерли окончательно.

***

Створка переходной галереи ушла в сторону, и порт дохнул в лицо жарким воздухом и тревожным светом. Контур влетел во внутренний ангар первым. За спиной тяжело дышали Ника и Тимур. Впереди, между сервисными тележками и подвесными кабельными трассами, уходили трое ложных сервисников. Один нес узкий контейнер данных. Второй прикрывал отход. Третий уже лез к боковому щиту управления воротами. До грузового выхода им оставалось меньше минуты.

Слева за перегородкой работала гражданская линия порта. Ночные погрузчики, автоматические платформы, дежурные люди, которым до войны не было дела. Любой грубый удар по зоне легко положил бы сектор и собрал бы свою жертву.

– Верхние дроны, – бросил Тимур.

Контур поднял взгляд. Под балкой уже проснулись два малых наблюдателя. Их вывел из спящего режима резервный пакет. На таких штуках редко ставили серьёзное оружие. Хватало другого: подсветить цель, открыть маршрут, дать чужому узлу ещё один глаз.

– Левый беру, – сказала Ника.

– Нет. Уводи гражданский коридор, – ответил Контур. – Тимур, ЭМИ по балке. Коротко, чтобы не положить линию.

– Понял.

Тимур уже доставал «Клин-3». На этот раз он стрелял не просто в кабельный мост, а точно в сервисный повторитель, который держал на дронах оптическую синхру. Воздух дёрнулся, свет моргнул, наблюдатели сорвались в слепой дрейф. Один врезался в рельс и посыпал искрами. Второй повис у стойки, вращая мёртвой оптикой.

Ложным сервисникам этого хватило, чтобы прибавить ход. Контур срезал дистанцию через центральный проход. Металл под ногами гремел, тревога в ангаре выла уже в три тона, сбоку ползла сервисная платформа с контейнером кабеля. Идти приходилось так, чтобы не втянуть в схватку гражданский сектор.

Старший из беглецов резко обернулся и метнул назад разряд импульсника. Разряд ударил в стойку стеллажа. Свет вокруг взорвался белым пятном. Контур нырнул в сторону, плечом врезался в подвесной рукав вентиляции, прокатился по мокрому полу и сразу поднялся. Удар прошёл мимо. В голове звенело, но противник потерял темп на полсекунды.

Этого хватило Нике. Она ушла вправо, сорвала аварийный флажок с местного щита и вручную сменила световой профиль в ангаре. Дальний проход ушёл в красный запрет, левый сервисный коридор получил короткий белый коридор, грузовой выход моргнул жёлтым сдвигом. Автоматика порта приняла рисунок за штатную аварийную перенастройку, и сама перекрыла половину маршрута.

Один из беглецов влетел в опустившуюся решётку и отшатнулся с руганью.

– Теперь бегите, – бросила Ника.

Третий, тот, что нёс контейнер, рванул к внутренней лестнице. Контур пошёл за ним. Дистанция схлопнулась у поворотной площадки. Чужак ударил снизу, быстро и грамотно, целя в рёбра. Контур принял толчок на локоть, ответил в корпус и вцепился в ремень контейнера.

Тимур сошёлся со вторым. Металл дрожал под ударами подошв, «Клин-3» треснул ещё раз, потом кто-то тяжело рухнул на настил.

Контур не оборачивался. На таком расстоянии мир сужается до чужого плеча, ремня, дыхания и решения, где кончится рывок.

Противник дёрнул контейнер вниз, потом резко отпустил одну руку и потянулся к запястью, где сидел аварийный инжектор. Контур увидел это раньше, чем до конца понял. Если тот успеет вколоть заряд в порт данных, контейнер уйдёт в самосжиг.

Он ударил открытой ладонью по запястью. Инжектор вылетел, отскочил в решётку и улетел вниз. Следом Контур навалился всем весом, вжал врага в поручень и рванул ремень на себя. Ткань треснула. Контейнер остался у него в руках.

Чужак сразу отпустил груз.

– Тимур! – крикнул Контур. – Глуши порт!

– Уже!

Снизу мигнул переносной глушитель. Тимур врубил локальный ЭМИ-кокон на лестничной опоре – направленный, чтобы сорвать самосжиг, но не положить весь ангар. По металлу прокатился резкий удар. Панели моргнули, грузовая тележка встала, резервный дрон у дальней стены окончательно ослеп, а контейнер в руках Контура дёрнулся и затих.

Самосжиг не сработал. Ника в этот миг добила второго беглеца коротким движением в колено и отбросила импульсник ногой под решётку. Старший понял, что окно закрывается, и пошёл ва-банк. Вместо отхода он ударил по аварийному щиту пожарного сектора.

Над ангаром хлопнули клапаны. Из потолочных трасс пошёл густой белый выброс, и через секунду дальняя часть ангара скрылась в паре, дыме и режущем свете тревожных ламп.

– Хотят выжечь следы! – крикнула Ника.

Контур уже рвал пломбу с контейнера. Внутри лежал узкий модуль памяти и сервисная кассета с маркировкой. На чёрной поверхности светилась короткая метка:

GATE / ALEUT

На долю секунды всё вокруг ушло на второй план. Амур, мост, город, сервисные подписи, первая жертва, ложные огни – всё это вдруг вытянулось дальше, за берег, за порт, в сторону морской географии, о которой раньше говорили только в отчётах и закрытых приложениях.

– Контур! – рявкнул Тимур.

Из белого выброса вышел старший сервисник. В руке у него уже был короткий штурмовой импульсник. Контур успел только развернуть контейнер боком и уйти на одно колено. Разряд прошёл по поручню, срезал кусок обшивки и ударил в подвесную трассу. Сверху посыпался горячий пластик.

Ника ответила первой. Подобрала с пола сорванный сервисный ключ и метнула его в аварийный блок над головой противника. Щиток лопнул, световой сектор хлопнул белым перегрузом, и на миг чужак ослеп.

Тимур врезал ему в бок всем корпусом. Оба влетели в боковую сетку. Импульсник выпал и отлетел на нижний пролёт.

Контур схватил модуль памяти, контейнер, выдернул страховочный шнур и рванул вниз к выходу. За спиной Ника уже тянула Тимура из клубящегося сектора. Старший сервисник исчез в белой завесе – живой или раненый, понять было невозможно.

Сейчас важнее было другое: трофей остался у них, а ангар начинал захлёбываться собственным аварийным профилем.

Они вывалились в переходный коридор почти вместе. Позади грохнули внутренние створки, пожарный сектор ушёл в жёсткую отсечку, вой сирены стал еще сильнее.

Контур остановился у сервисной колонны, упёрся ладонью в холодный металл и ещё раз посмотрел на метку.

GATE / ALEUT

Город оказался только входом. Настоящий маршрут уходил дальше – туда, где скрытая война уже готовилась стать открытой.

Глава 3. Порт без свидетелей

Порт остаётся живым, пока его подтверждают независимые слои. Один свидетель – это уже вход для чужого решения.

Из доклада А. Ветровой в кризисный штаб Дальневосточного контура. ДСП.

Терминал погас в ту секунду, когда машина Контура свернула к контейнерному полю. Ещё миг назад порт жил обычной ночной жизнью: ходили крановые фермы, перекликались сигналы тягачей, над водой тянулись маршрутные огни, в окнах диспетчерской бежали рабочие таблицы. Потом весь этот громадный организм сбросил память. Главные экраны у въезда ушли в серый провал. Навигационные табло перескочили на служебные заглушки. Часть камер продолжила крутить одну и ту же петлю с пустым сектором, хотя на дальнем контейнерном ряду ещё двигался погрузчик. До карантинного закрытия порта оставались минуты.

Контур выбрался из машины первым. Ветер с воды тянул прохладой и мазутным паром. За спиной хлопнула дверью Ника. Чуть дальше Ветрова уже вытаскивала из кофра переносной навигационный блок, прижимая локтем планшет.

– Центр отвечает? – спросил Контур.

Ника ткнула пальцем в экран связи.

– Отвечает бодро. Говорят, краткий сбой визуального слоя, всё под контролем, контейнерный сектор работает штатно.

В этот же миг над крайним рядом проскрипела крановая тележка и понесла контейнер над проездом, где по карте не должно было быть реального окна.

Контур посмотрел вверх.

– Штатно у них уже умерло.

Он сорвал пломбу с полевого кейса и вытащил Горизонт-Δ/М. Компактный радарный модуль развернулся в ладони тремя короткими лепестками. Сектор обзора лёг на терминал низким веером. На планшете поднялась скелетная схема порта – линии кранов, тягачи, рельсовые тележки, тёплые контуры силовых узлов. Верхняя картинка отказывалась говорить правду. Низовой радар ещё мог.

Ветрова встала у капота, подключила свой блок к локальной линии и быстро собрала первый кворум: внешний входной маяк, береговой навигационный слой, их собственный полевой свидетель. Всё это должно было лечь хотя бы в грубую причинность, прежде чем они полезут внутрь.

На экране возникла гавань, но не та, которую рисовал порт. Здесь линии движения не совпадали с диспетчерской сеткой. Два контейнерных тягача шли в зоне, обозначенной как пустая. Один кран замирал, будто ждал команды, которой не было в журнале. Навигационная метка на входном плече светилась образцово, с той самой неприятной чистотой, которую Контур уже ненавидел.

– Один свидетель у них уже слишком гладкий, – сказала Ветрова, даже не поднимая головы.

Контур на миг вспомнил старую микролинию и тот кристалл, ответивший раньше команды. Тогда ложь помещалась под колпак SSBX. Сейчас она растянулась на весь порт.

По дальнему ряду вдруг прошёл короткий тёмный провал. Один кран застыл. Второй, наоборот, ускорил ход. Под подвесной линией вспыхнул служебный жёлтый, которого в этой схеме быть не должно. Горизонт-Δ/М тут же выдал новую связку меток: три человека быстро ушли в сервисный спуск под крановой фермой. Один нёс длинный узкий кофр.

Ника выругалась тихо и зло:

– Контейнер уже уводят вниз.

Связь снова ожила.

– Повторяю, сектор А-4 безопасен, – сказал дежурный голос. – Оставайтесь на поверхности. Группа сопровождения уже направлена к вам.

Контур выключил канал.

– С поверхности тут только чужая картинка, – сказал он. – Правду придётся вытаскивать снизу.

Ветрова свернула навигационный блок.

– Диспетчерская больше не источник. Только шум.

Ника перекинула Линзу-9 на плечо и посмотрела в сторону сервисного спуска, где между опорами крановой линии уже сгущалась тень.

– Я наверх, если что. Без башни огней они нас здесь просто срисуют.

– Сначала вниз, – сказал Контур. – Заберём след.

Он убрал Горизонт-Δ/М в грудной крепёж, подтянул ремень с импульсным модулем и первым пошёл к лестнице. Терминал за спиной продолжал работать, перевозить металл, открывать коридоры, послушно изображать порядок. Порт ещё двигался. Свидетелей у него уже не осталось.

***

Сервисный спуск под крановой линией пах горячим железом и влажной пылью. Коридор был узкий, с кабельными рукавами под потолком и паром, который время от времени выдыхали нижние магистрали. Слева тянулся силовой канал для тележек, справа шли сервисные ячейки и аварийные люки. Любой огневой контакт здесь мог сорвать не только людей, но и половину верхней линии.

Контур шёл первым. За ним – Тимур, уже державший наготове компактную ЭМИ-кассету «Шов». Ника шла чуть сзади, Линза-9 поднята на низкий свет, чтобы не давать коридору лишней вспышки. Ветрова осталась у входа в развилку, удерживая связь с пирсом и внешним навигационным слоем.

– Слева ниша, – тихо сказала Ника. – Там кто-то есть.

Контур не ответил. Просто сместился так, чтобы не подставить прямую линию корпуса под возможный выстрел.

Ниша оказалась пустой. Зато в следующую секунду впереди сорвался короткий белый импульс. Разряд ударил в кабельный лоток над головами. Свет взорвался, по потолку пробежала искра, и из пара одновременно вышли двое.

Они работали быстро и грамотно. Без лишних движений. Один бил по свету и сенсорам, второй брал проход на перекрёстный захват. Не сервисники. Штурмовая ячейка, которая знала этот коридор лучше любой местной смены.

– Контакт! – рявкнул Тимур.

Контур уже нырнул в сторону. Первый импульс прошёл по стене там, где секунду назад была его голова. Ника ответила сразу – низко, по руке, держащей оружие. Противник дёрнулся, однако не оружие удержал. Они были в бронеткани под сервисной курткой. Всё как надо. Всё вежливо. Всё по регламенту чужой войны.

Второй противник ушёл за паровой выброс и попытался закрыть створку нижнего аварийного люка. Если им удастся отрезать коридор, вся погоня сдохнет в этом же месте.

– Тимур, правый! – бросил Контур.

Тимур не стрелял. Он сорвал «Шов» с крепления, глянул на плотность кабелей, на конденсат на стенах, на фазовый рисунок по верхнему лотку и сделал то, чего в инструкции не было.

Он вогнал ЭМИ-кассету не в людей, а в стык старой сервисной гребёнки, где сходились оптика, силовая подпорка и повторитель локальных сенсоров.

Удар получился точным. Воздух дёрнулся. Свет на миг сложился внутрь. Из потолка посыпались синие искры, а вместе с ними сдохла чужая оптика в секторе. Линзы у штурмовиков ослепли. Сенсорная сетка срезалась кусками. Верхняя крановая линия взвыла на одном тоне и ушла в аварийное удержание.

– Не по инструкции, – выдохнула Ника.

– Зато по делу, – сказал Тимур.

Контур уже был рядом с первым нападавшим. Удар в кисть. Локоть в корпус. Захват под плечо. Чужак попытался провернуть классический рывок в сервисной тесноте – уйти вдоль стены, оставить ложную траекторию и выстрелить на отходе. Контур не дал. Впечатал его в короб силовой магистрали и услышал, как под курткой что-то хрустнуло.

Второй всё-таки успел к люку и рванул створку. Изнутри ударил горячий воздух. Коридор дохнул жаром техсклада. Ещё шаг – и они их потеряют.

Ника сработала быстрее мысли. Сорвала с пояса световой маркер, метнула его не в человека, а в рельс над люком. Маркер хлопнул белым перегрузом. На долю секунды противник ослеп. Этого хватило. Контур пересёк проход двумя шагами и ударил открытой ладонью в шлем под подбородок. Чужак отлетел к стене, ударился затылком и сполз на колено.

Тимур прижал первого коленом и уже сдёргивал с его запястья короткий служебный блок.

– Здесь маршрутная пара, – бросил он. – Они не просто уводили контейнер. Они вели трафик к нижнему уровню.

Контур присел перед вторым. Тот ещё дышал. Из-под маски шёл тяжёлый хрип. Глаза были живые, злые и всё ещё слишком спокойные.

– Куда? – спросил Контур.

Чужак коротко усмехнулся. Кровь у него на губе была почти чёрной в аварийном свете.

– Не порт, – сказал он. – Ниже.

– Что ниже?

Тот смотрел уже не на него, а будто сквозь него, в какой-то заранее известный адрес.

– Зеркальный… узел.

Последнее слово вышло с усилием. После него в лице что-то погасло. Будто человек просто выключил себя раньше, чем успели добраться до следующего ответа.

Ника первой подняла взгляд.

– Слышал?

Контур уже смотрел туда, где пар редел у дальнего выхода. Те, кто ушёл раньше, уносили с собой не только контейнер. Они уносили адрес следующего слоя войны.

Сверху над ними снова двинулся кран. Значит, порт ещё работал. Значит, времени почти не осталось.

– Пошли, – сказал Контур. – Теперь у нас есть имя.

Башня огней поднималась над гаванью на краю резервуарного сектора. Внизу был порт: контейнерные поля, мокрый металл, рельсовые дорожки, тягачи, краны, буксиры, грузовые платформы. Дальше лежала тёмная вода, по которой двигались огни судов. После коридора под крановой линией, времени почти не осталось.

Первый портовый прожектор мигнул чужим кодом ещё до того, как Ника добралась до верхней площадки. Ника влетела на верхний ярус, бросила Свет-Шкалу на пульт и сразу увидела беду. Главный световой профиль башни уже не слушался только её рук. Внутри рисунка команды повторялись почти сразу, через доли такта, перехватывая право говорить от имени порта.

– Контур, башня захвачена частично, – сказала она в гарнитуру. – Световой язык у них уже внутри.

Ответ пришёл в помехах, на фоне шума боя:

– У тебя гражданские маршруты. Веди их. Ветрова на пирсе поднимает кворум.

Ника выдернула сервисный ключ, сорвала защитную крышку с аварийного блока и перевела башню на командную сетку ручного уровня. Панель ответила короткой вибрацией. На экране вспыхнули сектора: входной фарватер, крановая зона, резервуарный проход, внутренний бассейн, буксирные окна, аварийный канал для наземной техники. В обычную ночь всё это жило на полуавтомате. Сейчас полуавтомат уже не работал.

Линза-9 легла рядом с пультом. Ника подняла её на уровень гавани и быстро сняла реальную картину. Сухогруз у внешнего причала уже начал поворот раньше разрешённого окна. Два буксира пытались подхватить его носовую линию. По внутреннему проходу шёл контейнерный тягач с высоким грузом. Дальше, у резервуарного сектора, двигалась сервисная сцепка с топливными модулями. Один ошибочный световой цикл – и вся эта масса сойдётся в одной точке.

Голос из внутренней линии, ровный и безликий, прозвучал почти вежливо:

– Башня, снимите ручной режим. Центр подтверждает штатное разведение.

Ника даже не сразу ответила. Сначала поймала на Свет-Шкале чужую фазу. Та шла следом за её командами почти без запаздывания. Противник уже не просто ломал рисунок. Он учился её языку.

– Снимите у себя язык и пришлите его в ремонт, – бросила она.

Голос сразу стал суше:

– Вы мешаете порту.

– Порт пока жив только потому, что я мешаю вам.

Она перехватила новый цикл. Чужой код снова полез следом. Почти без ошибки и потери фазы. Противник уже не прятал атаку за туманом и хаосом. Он брал её работу, повторял её и пытался сделаться старшим голосом гавани.

На воде сухогруз продолжал разворот. Слишком рано. Его нос уже начал менять курс к резервуарному сектору, где тяжёлые цистерны стояли близко к краю порта. Буксиры тянули обратно, однако башня уже успела дать им ложную связку окна и торможения. Теперь гигант шёл по инерции.

– Ветрова, – сказала Ника. – Нужен живой свидетель на входном маяке. Сейчас. Сухогруз пошёл не туда.

Голос Ветровой пришёл почти сразу:

– Один маяк у меня уже фальшивый. Ищу физический ответ. Держи суда в растяжке ещё девяносто секунд.

Девяносто секунд в порту ночью – целая жизнь.

Ника быстро перестроила схему второй раз. Убрала гладкие дуги, ввела аварийную световую командную сетку, где суда видели не общую картину гавани, а жёсткие короткие приказные окна: здесь жди, здесь тормози, здесь отходи, здесь гаси ход, здесь бери буксирный канал. Люди на мостиках такое не любили. Зато это был язык выживания, а не удобства.

Буксиры поймали новый рисунок первыми. Один ушёл левее, другой взял на себя нос сухогруза. На крановой линии внизу замерли две тележки. Тягач у контейнерного поля ушёл в останов. Резервуарный проход погас красным до самого горизонта.

Чужой код снова полез в профиль. На этот раз не в лоб, а по обходной фазе, через повторитель башни. Почти красиво и незаметно. Ника увидела это раньше, чем успела до конца подумать, и ударила по каналу жёстким ручным обрывом.

Плечи свело. В виске пульсировало, зато чужой код впервые запоздал. Всего на долю такта. Этого хватило. Ложное окно на дальнем секторе сорвалось. Буксир потянул нос сухогруза сильнее. Гигантская тень судна дрогнула, замедлила опасный разворот и начала уходить от резервуарного плеча. Внизу по порту прокатился новый набор тревог.

Ника опёрлась ладонью о пульт всего на миг и сразу снова выпрямилась. Рано.

– Ветрова, у тебя окно, – сказала она. – Я вытащила тебе секунды.

Ответ пришёл с пирса:

– Приняла. Теперь попробую доказать, что один из ваших свидетелей существует только в журнале.

Ника перевела взгляд на воду, на сухогруз, на буксиры, на красные сектора вокруг резервуаров, на хаотичную красоту живого порта, который только что прошёл по краю массовой гибели и даже не понял до конца, насколько близко был к ней. Работа со светом раньше означала порядок. Теперь она означала границу между жизнью и огнём.

И в этот момент Линза-9 поймала на дальнем ряду короткую вспышку. Маленький зеркальный отблеск из-под нижней фермы, где никто не должен был сейчас работать.

Ника увеличила сектор. На мгновение увидела тёмную фигуру у сервисного входа и короткий перенос на боковой путь.

– Контур, – сказала она. – Поймала вражескую фазу. Техсклад у четвёртого резервуара. Они там.

На этот раз ответ пришёл сразу:

– Принял.

***

Мобильный пункт радионавигации находился на пирсе у внешнего плеча гавани. Слева были сигнальные мачты, справа тянулись резервуары, впереди над чёрной водой поворачивал сухогруз, который только что едва не ушёл в ложный сектор. До развязки оставались считаные минуты. Если кворум сейчас подтвердит удобную версию, порт окончательно примет чужую правду за свою.

Ветрова работала стоя. Так она всегда делала в моменты, когда чувствовала: сесть – значит уже принять чужой темп.

Перед ней лежали три свидетеля. Первый – башня огней, с которой Ника держала гражданский рисунок. Второй – входной навигационный маяк, который по журналу подтверждал нормальную координату. Третий – их собственный полевой блок, привязанный к физическому времени и к реальному положению линии.

На экране всё ещё сходилось слишком хорошо. Это и было самым плохим.

– Покажи сырой ответ с маяка, – бросила она оператору у левого модуля.

– Уже.

Сырой ответ оказался гладким.

Не живой канал. Маска. В реальности всегда есть трение: воздух, качка, задержка по воде, микрошум среды. Здесь вместо среды лежала почти чистая правильность. Маяк существовал в журнале. В реальном мире его будто уже не было.

Ветрова от понимания ясности того что происходит почувствовала как по спине пролетел холодок. Система научилась подменять не только маршрут. Она подменяла форму доказательства.

– Физический импульс на внешний буй, – сказала она. – Ручной запрос. Не через портовой канал. Через наш.

– Это даст задержку, – ответили ей.

– Именно. Мне нужна реальная задержка.

Она сама ввела профиль, перевела кворум на жёсткую ручную валидацию и отправила короткий пакет в обход. Несколько секунд ничего не было. Потом пришёл ответ – слабый, запоздавший, с разбросом. Ветрова чуть заметно выдохнула.

Вот он, действующий свидетель.

Не красивый.

Не быстрый.

Реальный.

Она наложила его на фальшивую портовую версию и увидела расхождение. Входной маяк, которым пользовался порт, существовал уже только в подтверждающем слое. Физическая точка давала другой угол и другое время, другой порядок. Значит, сухогруз разворачивали не ошибкой капитана и не погодой. Его вели по подменённому свидетельству.

– Ника, – сказала Ветрова, – слушай внимательно. Портовой маяк мёртв. Живой ответ у меня с внешнего буя. Переноси кворум на мой пакет. Сейчас.

– Приняла.

– И передай буксирам жёсткое право на нос. Без согласования с башней, она у вас дырявая.

Она вывела новое решение на общий аварийный канал, не спрашивая ничьего разрешения. Потом подняла глаза к сухогрузу. Гигант уже начал замедлять опасный разворот, однако его масса ещё могла снести половину резервуарного плеча, если башня снова даст ложное окно.

На линии связи зашипело.

– Вы работаете без городского допуска, – сказал тот же гладкий голос. – Немедленно прекратите ручную валидацию.

Ветрова смотрела на экран спокойно.

– Поздно, – ответила она. – Теперь у меня есть живой свидетель.

Она впервые за эту ночь позволила себе короткую злость. Ту самую, инженерную: когда тебе не страшно, а омерзительно от того, что кто-то считает правду слишком медленной, чтобы ею заниматься.

– Контур, – сказала она в общий канал. – Техсклад у четвёртого резервуара подтвердился. На нём сходятся ложные свет, ложный маяк и маршрут техгруппы. Это не просто точка ухода. Это точка стирания.

– Понял, – ответил он. – Иду.

Ветрова ещё раз посмотрела на экран. Фальшивый маяк продолжал светиться в журнале, будто ничего не произошло. Система уже умела делать вид, что реальность не нужна ей вовсе.

На пирсе ветер качнул слева мачту. Справа над резервуарами прокатился красный отсечной сигнал. Порт всё ещё жил. Но теперь это была жизнь на трёх свидетелях, один из которых уже пытались заменить записью о том, чего больше не было.

***

Техсклад у четвёртого резервуара уже горел ещё до того, как Контур добежал до внешнего прохода. Огонь шёл не широким факелом, а внутри, по стыкам, по вентиляции, по кабельным шахтам, выжигая все внутри. Над крышей стоял тёмный дым. Снизу в проломы просвечивал аварийный белый. Значит, противник не просто уходил. Он закрывал за собой причинность.

Тимур подбежал следом.

– Если там есть журнал, его сейчас варят изнутри.

– Есть, – сказал Контур. – И не только журнал.

Они нырнули под боковой навес. Дверь техсклада заклинила. Кто-то успел посадить её на аварийную блокировку. Контур сдёрнул с пояса короткий резак, Тимур уже лез к силовому блоку.

– Дай мне двадцать секунд.

– У нас их меньше.

– Тогда не разговаривай.

Контур держал вход. Изнутри доносился сухой металлический треск и короткие хлопки – последовательный дожиг секций. Кто-то хорошо знал, как выжигать склад так, чтобы он выглядел обычным каскадным срывом.

– Готово!

Блокировка сорвалась. Дверь пошла с хрустом. Изнутри ударил жар, дым и едкий запах горелого лака.

Контур вошёл первым. Внутри техсклад уже не был складом. Он стал печью для памяти. Ряды стоек горели секторами. Один боковой пролёт уже лёг. По полу текла вода из пожарной линии и сразу превращалась в горячий пар. Над дальним столом ещё держался локальный купол SSBX – сажа на прозрачной броне, белые отблески, внутри темнота.

– Туда! – крикнул Тимур.

Справа что-то хлопнуло. Из дымного ряда выскочил силуэт и дал короткий импульс по проходу. Разряд срезал кусок стеллажа, сталь визгнула. Контур ушёл в сторону, упал на колено и ответил низко, по тени. Не на поражение. На срыв ритма. Противник исчез за жаром, но секунды уже были их.

– Я беру купол! – крикнул Тимур.

– Нет. Ты вентиляцию. Если крыша сядет – здесь всё кончится.

Тимур выругался, но послушался. Побежал к боковой панели дымоотвода, сорвал крышку и начал вручную отрезать два верхних сектора. Контур шёл к SSBX через красный воздух и падающий пластик. Жар хлестал в лицо так, будто порт сам пытался не пустить его к памяти.

Он добрался до стола, вцепился в ручки купола и почувствовал под ладонями знакомую тяжесть. SSBX-капсула под ним ещё жила. Именно для этого её и строили – чтобы истина могла пережить первую волну огня, если все остальные захотят её переписать.

Слева снова мелькнул человек. Контур увидел только тёмный рукав и металл оружия. Разряд ушёл в стол, белая линия резанула по воздуху. Ответ пришёл быстрее мысли – Контур ударил аварийной защёлкой по опоре, сдвинул стойку на линию огня и сам ввалился в узкий проход к соседнему модулю.

Противник хотел добить не их. Модуль.

Значит, там было что-то ещё.

Контур сдёрнул вторую ячейку с крепления. Корпус обжигал даже через перчатку. На нём уже поползла копоть, однако внутри по-прежнему чувствовалась жёсткая, тяжёлая целостность заражённого узла.

– Тимур!

– Дым отвёл! Тридцать секунд, потом крыша!

Контур сгреб обе ячейки – WORM-капсулу и второй модуль – и рванул обратно. В этот миг с дальнего пролёта сорвался кусок балки. Металл рухнул туда, где секунду назад был проход. Жар ударил так, что в груди на миг стало пусто.

У выхода их ждал ещё один сюрприз. Тот самый силуэт из дыма вынырнул ближе, чем должен был. Старший сервисник или кто-то из его пары – понять было уже нельзя. Лицо в копоти, одна линза выбита, но рука с коротким импульсником ещё живая.

Он поднял оружие не на человека. На модуль. Контур понял это сразу и не успел подумать ни о чём. Просто кинул WORM-капсулу Тимуру, сам развернулся корпусом и прикрыл второй модуль собой. Разряд ударил в плечо по касательной, сорвал кусок ткани, вогнал в мышцу тупую боль и ушёл в стойку за спиной.

Тимур успел первым. Не стрелял. Просто всадил ногой в колено противника с такой точностью, будто давил неисправную опору. Тот рухнул боком в дым, ударился о край пролёта и пропал в огненном свете.

– Живой? – рявкнул Тимур.

– Потом.

Контур уже подхватил модуль.

Они вывалились из техсклада в тот самый момент, когда внутри рухнул ещё один сектор перекрытия. Дверь за спиной повело. Из щелей вспыхнул огонь. На бетон легли два длинных красных отблеска, будто склад всё ещё пытался дотянуться за своей правдой и вернуть её обратно в жар.

Никто не вышел. Несколько секунд они просто кашляли, ловили воздух и слушали, как склад дохнет в собственной печи. Потом Контур перевернулся на спину, расстегнул страховочный чехол и посмотрел на SSBX-капсулу. Она уцелела. На корпусе выступили сажа и свежие царапины. Внутри, под бронёй и жаром, был журнал, который уже нельзя было переписать.

Ника подбежала почти сразу, ещё с гарью на волосах и белым светом башни в глазах. Ветрова подошла следом, прижимая к груди планшет с кворумом. Тимур держал вход под контролем и смотрел в дымный проём, где ещё шевелились красные отблески.

– Модуль жив? – спросила Ника.

Контур раскрыл вторую ячейку. На обугленном корпусе заражённого узла, под слоем копоти и подгоревшего лака, проступила метка.

Gate-Ring.

В речном порту такой надписи быть не могло.

Ника опустилась рядом и молча смотрела на буквы. Ветрова первая подняла глаза к воде, к дальним огням гавани, к тёмному горизонту за портом. Ей не нужно было ничего объяснять. Это слово уже открывало следующий театр. Значит, порт был не концом. Порт был только переходником.

Контур провёл большим пальцем по обугленному краю корпуса. Под копотью был не просто след очередной диверсии. Там был морской адрес. Живой кусок более глубокой архитектуры, которая уже вышла за пределы города и теперь тянула войну дальше – к воде, к коридорам, к тем узлам, где один ложный свидетель сможет повести не тягач и не сухогруз, а целый регион.

За спиной ещё горел техсклад. Впереди жила гавань, спасённая на эту ночь усилием трёх человек и правом двух живых свидетелей заговорить вовремя.

Контур закрыл ячейку и медленно поднялся.

– Всё, – сказал он. – Город закончился.

Никто не стал спорить. Потому что все трое уже поняли одно и то же. Следующий фронт начинался на воде.

Глава 4. Карантин

Карантин объявляют тогда, когда время уже потеряно. До этого спорят о формулировках.

Из распоряжения П. Громыко по аварийному режиму узлового сектора. ДСП.

Совещание шло в старом узловом штабе Хабаровска, в комнате без окон, с двумя экранами и столом, на котором лежали WORM-капсула, обгоревший модуль с меткой Gate-Ring и папка с пометкой «портовой инцидент». Ночь ещё не закончилась. Город продолжал жить на аварийных схемах, а внутри этой комнаты люди уже делили право назвать случившееся. Признать, что город атаковали, или снова завернуть всё в язык технической нестабильности.

Первым заговорил представитель городской администрации. Лицо у него было усталым, голос – гладким и опасным.

– Порт горел. Да. Идёт следствие. Да. Но у нас нет права объявлять ЧС просто потому, что произошёл один инцидент.

С военной стороны ответ пришёл сразу:

– А у нас нет права оставлять заражённые модули в гражданском контуре. Всё спорное – под термокарантин. Всё, что контактировало с ложной подписью, – в ноль.

Контур сидел через два места от Громыко. Он молчал. Перед ним лежал полевой журнал. На последней странице была его подпись. Громыко видел, как Контур время от времени возвращал к ней взгляд. До этой ночи подпись означала допуск, подтверждение акта или решение. Теперь она могла закрыть город, оставить кого-то без света, навигации, без привычной уверенности, что мир ещё слушается человека.

Ветрова стояла у бокового экрана и молчала. Ника опиралась ладонью о спинку стула и явно держалась из последних сил. Тимур сидел отдельно, с перевязанным запястьем, и смотрел не на людей, а на модуль Gate-Ring, будто хотел вскрыть его взглядом.

– Мы видим уже три уровня заражения, – сказал Громыко. – Стандарт. Городской контур движения. Портовая логистика. Этого достаточно, чтобы прекратить разговор о частном инциденте.

– Для внутреннего круга, – тут же поправил администратор. – Для внешнего круга у нас пока технический кризис. Никакой войны.

Военный эксперт ткнул пальцем в WORM-капсулу:

– Вот улика. Открывайте полномасштабное отключение узлов и жгите всё, что не проходит чистую валидацию.

– Сначала отключите полгорода, потом объясните это гражданским, – сказал чиновник. – А наутро получите второй кризис, уже управленческий.

Контур поднял голову.

– Если оставить узлы в сети, получите третий. Он будет считать себя нормой.

Громыко уловил, как несколько человек сразу отвели взгляд. Все уже знали: именно это и было страшнее. Ложь переставала быть аварией, она входила в режим жизни.

Он взял WORM-капсулу в руки, развернул к свету, потом положил обратно.

– Спор о том, улика это или помеха, закончился ночью в порту, – сказал он. – Теперь спорим о масштабе полномочий.

– Полномочий для кого? – спросили с торца.

Громыко даже не повернул головы.

– Для группы Контура.

Все напряглись. Контур промолчал. Только пальцы один раз сжались на краю журнала.

– Вы хотите отдать городской контур людям, которые уже вели боевые действия на гражданском объекте? – сухо спросил чиновник.

– Они уже вели их, потому что вы всё ещё думали, как назвать горящий склад.

Ответ был точным. Никто не повысил голоса.

Ветрова подошла к столу и вывела на экран три окна. Свет, навигация, питание. Затем положила поверх журнальный след Gate-Ring.

– У нас есть кворум, – сказала она. – Реальный. Снятый под огнём. Этого хватит для ограниченного внутреннего режима, если вам ещё нужен язык закона.

Администратор посмотрел на неё с раздражением, которое уже не удавалось скрыть:

– А если вы ошиблись?

Ветрова ответила сразу:

– Тогда ошибка уже вашим молчанием.

Громыко понял, что момент настал. Если сейчас уступить, утром всё зальют новой терминологией, вымоют из протоколов ночь, а к полудню кто-нибудь обязательно объяснит пожар «каскадным отказом сервиса».

Он открыл красную папку, которую принесли десять минут назад, и увидел то, ради чего, вероятно, и затевалась вся эта борьба. Ограниченная морская командировка. Без слова «операция». Без слова «фронт». Без права назвать происходящее войной. С правом изъятия резервных модулей, карантинного вывоза и временного полевого управления узловым складом.

Карьеру этой папкой можно было испортить надолго. Громыко подписал её сразу.

Контур поднял глаза. Вот тогда Громыко и увидел в его глазах то, что, возможно, не заметил бы раньше: его страх был не перед боем. Он уже понял цену подписи. Теперь одна линия чернил могла убивать быстрее импульсника, если попадёт не в ту строку.

– Получаете склад резервных узлов, – сказал Громыко. – Временная база. Внутренний карантин. Право на отключение узлов – только по трём свидетелям и только с WORM. Никаких разговоров по открытым каналам. Выносите модули, собираете походный комплект и ждёте второго пакета.

– А если второй пакет не придёт? – спросил Контур.

– Тогда будете держать город ещё.

В комнате было тихо.

Ника усмехнулась устало и зло:

– Щедрая формулировка.

Тимур поднялся первым. Ветрова забрала со стола модуль Gate-Ring. Контур взял журнал и ту самую бумагу с новой подписью допуска.

Он посмотрел на неё всего секунду, однако Громыко успел прочитать этот взгляд. Там уже не осталось прежней дистанции между инженером и силой.

– Идите, – сказал Громыко.

Когда дверь закрылась за группой, чиновник напротив медленно выдохнул:

– Вы только что дали частным людям слишком много власти.

Громыко посмотрел на пустой стол и ответил:

– Слишком много власти этой ночью уже забрали другие.

***

Резервный узловой бокс располагался на краю промышленного сектора, между старым энергокольцом и грузовым двором. Внутри шли стеллажи с модулями, катушки полевых линий, запечатанные ящики FD-серии, аварийные блоки света, силовые стойки и пустой центральный бокс, который по документам служил для краткого хранения резервов. До рассвета оставались считаные часы. За это время склад нужно было превратить в место, где истина сможет прожить хотя бы одну атаку.

Контур не дал никому времени на разговоры.

– Тимур, резервный FD-3 в центр. Ника, Свет-Шкала на внутренний контур и на ворота. Ветрова, отдельная ветка журналов. Всё спорное – в серую зону, ничего из общего ряда не трогать руками без метки.

Ника уже распечатывала аварийный световой кейс. Тимур тянул тяжёлый блок FD-3 по гладкому полу. Ветрова собирала стол под WORM так быстро, будто работала не после бессонной ночи, а после спокойной смены. Контур шёл между стеллажами и впервые за долгое время чувствовал простую полезную злость. Она помогала. Злость дробила усталость на понятные действия.

SSBX-Field встал в центральный бокс первым. Полевой контур раскрылся вокруг ядра склада мягким янтарным сектором. Резервный FD-3 вмонтировали рядом, чтобы брать фазу не из общих линий, а из собственного внутреннего ритма. На левую стену легла полоса Свет-Шкалы. Ника подняла внутри жёсткий режим света: белый рабочий, жёлтый карантин, красный отсек, синий аварийный коридор на выход. Всё понятное даже полумёртвому от усталости человеку.

Ветрова подсоединила полевой WORM к отдельной стойке и сразу развела журналы на две ветви.

– Одна пойдёт на общую техническую хронологию, – сказала она. – Вторая – на причинность по узлам. Если кто-то полезет править одну, вторая его выдаст.

Контур кивнул и вскрыл первый ящик резервных модулей. Некоторые кассеты были чистыми. Некоторые – слишком чистыми. На таких вещах глаз уже начинал спотыкаться сам. Пластик без царапины, лотки без рабочего следа, служебные ответы с избыточной аккуратностью. Раньше он бы ещё проверял себя. После порта сомнений уже не осталось.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.