Первое правило предложила я: не скрывать факт, который может навредить собственной версии. Если реконструкция покажет мою ошибку, она попадёт в отчёт. Если Эльдар обнаружит техническое обстоятельство в пользу Якова, он не отложит его до удобного момента.
Второе написал Эльдар: не называть догадку доказательством. Станция MONTAGE-02 указывала на место экспорта, но не на человека за клавиатурой. Директорский доступ давал возможность, но сам по себе не доказывал действие Якова.
Третье пришлось обсуждать дольше.
- Не спасать друг друга от последствий, - сказал он.
- От каких именно?
- От любых, которые следуют из наших решений. Если вы захотите передать журналистам сырой результат, я не стану прикрывать это своим именем. Если моя методика окажется слабой, вы не будете защищать её потому, что я согласился вам помочь.
- Вы не помогаете мне из милости. У вас договор с советом.
- Вот поэтому правило хорошее.
Я добавила: «Не решать за другого, какие последствия он выдержит». Эльдар прочёл, чуть сдвинул лист и расписался. Я поставила подпись рядом.
- Два врага заключили соглашение, - сказала я.
- Враги обычно читают мелкий шрифт.
- У нас его нет.
- Это первая уязвимость документа.
Кофе он сварил в маленькой машине у окна. Мою чашку поставил справа от клавиатуры, потом передумал и перенёс на отдельный табурет. Я достала из сумки контейнер с бутербродами, который Снежана вручила мне у двери.
- Дочь велела поделиться, - сказала я.
- Она знает, с кем вы работаете?
- Знает, что инженер забывает про еду и хранит посуду в геологических слоях.
Эльдар посмотрел на три кружки.
- Они отражают этапы текущего проекта.
- Тогда одну следует опечатать.
Мы поели стоя у стола. Кофе успел остыть, пока сверяли опись. Он был горьким и всё равно лучше того, что подавали на совете.
Сначала мы развернули утверждённый пакет. Тестовый стенд принимал те же шесть потоков, но сводил их на маленьком куполе. Масштаб не позволял оценить ощущения зрителя в большом зале, зато версии, переходы и распределение профилей воспроизводились точно.
Эльдар отключил внешние команды, ограничил скорость движения и включил отдельную запись каждого шага. Я читала значения, он сверял их с протоколом. Серое поле легло ровно. На белом проступила перфорация тестового купола. Цветные поля прошли по кругу без скачков.
Потом появилась знакомая карта свадебного неба. На маленьком куполе она выглядела почти игрушечной. Я не смотрела на дату в подписи, только на границы каналов.
- Четвёртый чистый, - сказала я.
- Все шесть получают утверждённый октябрьский профиль.
- Контрольная сумма?
Он назвал её. Я нашла ту же строку в снимке конфигурации на 17:37.
Мы прогнали цифровой полёт на малой скорости. Линии сохраняли привязку, задержки между потоками не было. После завершения Эльдар выгрузил журнал стенда и положил рядом с копией предпоказной проверки.
- Утверждённая версия чистая, - сказала я.
- На этом стенде и по проверенным параметрам, - уточнил он.
- Вы способны испортить даже хорошую новость.
- Она от этого дольше живёт.
Скрытый пакет мы не запускали сразу. Эльдар сначала открыл его структуру в режиме чтения. Название отличалось только окончанием `_copy`. Внутри лежал тот же текст, звук и последовательность кадров. Разница пряталась в таблице профилей.
Пять каналов ссылались на октябрьскую версию. Четвёртый получил профиль трёхлетней давности, рассчитанный до последней перестановки крепления.
- Его не мог выбрать случайный износ, - сказала я.
- Износ вообще не выбирает файлы.
- Тогда кто-то назначил старый профиль одному каналу.
- Да. Человек или подготовленная команда. Этого мы ещё не разделили.
Отдельную диагностическую задачу с задержкой узла Эльдар отключил в копии для этого прогона. Её исходные параметры сохранили в протоколе. Мы проверяли только действие старого профиля и заранее знали, что остановим показ при первом заметном шве.
Он поставил ладонь над своей аварийной кнопкой. Я заняла место у второй. Тестовое поле сменилось фрагментом программы. Несколько секунд всё выглядело ровно. Затем нижняя граница четвёртого сектора поползла вверх, и линия созвездия раздвоилась у края.
Я нажала кнопку.
Точнее, попыталась. Ладонь Эльдара легла поверх моих пальцев в ту же секунду. Стенд погас, вентиляторы стали слышнее. Его рука осталась на моей на один лишний вдох.
Кожа у него была тёплая, сухая. Большой палец касался косточки у моего запястья. Я не выдернула руку. Сначала посмотрела на наши пальцы, потом на Эльдара.
Он тоже смотрел на меня. Без инженерной насмешки, без привычного нетерпения. Между нами был пульт шириной в две ладони, и всё же я слишком ясно чувствовала его тепло.
Эльдар убрал руку. Я отступила к экрану.
- Остановка через две десятых секунды после выхода за порог, - сказал он.
- Запишите, что кнопка одна на двоих.
- Кнопки две.
- Тогда это была ошибка оператора.
- Обоих операторов.
Он повернулся к журналу. Я расправила лист протокола, хотя тот не помялся. Четвёртый сектор на записи показывал именно тот геометрический шов, который возник перед опасной задержкой на большом куполе. Сам по себе старый профиль портил изображение, но не объяснял запаздывание движения. Мы это отдельно отметили и не стали делать выводы о причине задержки, которую ещё предстояло доказать.
К восьми вечера в мастерской похолодало. Эльдар включил обогреватель, я надела пальто поверх свитера и снова села к журналам. Остывший кофе пришлось вылить. Вторая порция пахла лучше, но мы забыли о ней через пять минут.
Нас интересовало, когда скрытая копия перестала быть файлом в монтажной и стала активным пакетом показа. Экспорт был отмечен в 17:44. Публикация в локальную очередь комплекса появилась в 18:11:02. Запуск под подписью M-01 прошёл в 18:18:06.
- Семь минут четыре секунды, - сказала я.
- Между ними должны быть проверки доступности, чтение манифеста и опрос каналов.
- В чистом запуске они есть.
Мы положили журналы рядом. После каждой публикации система опрашивала пакет, проверяла профиль, обращалась к медиахранилищу и только потом разрешала запуск. В скрытой последовательности строка публикации стояла на месте. Следующая запись сразу сообщала об успешной авторизации M-01.
Семь минут были пустыми.
Я проверила время стенда, служебного сервера и климатического журнала. Часы шли без скачка. Температура записывалась каждые тридцать секунд. Значит, весь комплекс не зависал и не терял питание.
- Журнал очищен? - спросила я.
- Или события писались в другой контур. Или выгрузка неполная. По пустоте нельзя выбрать один вариант.
- Но пустота существует.
- Да.
Он увеличил участок и отметил начало и конец. Я перенесла их на новый пронумерованный лист, указала источники и контрольные суммы. Рука по привычке потянулась к обороту старой программки. Я остановилась и дописала всё в протокол.
- Быстро учитесь, - заметил Эльдар.
- Не превращайте это в похвалу взрослой женщине за умение пользоваться бумагой.
- Я хвалил бумагу.
- Тогда она может остаться у вас до утра.
В одиннадцать двадцать мы запечатали рабочие копии и подписали промежуточный акт. Эльдар предложил ещё раз сравнить обращения к медиахранилищу. Я посмотрела на часы.
- Это уже следующий шаг. И данные Святослава понадобятся завтра.
- Я собирался сказать то же самое.
- Но не сказали.
- Проверял, соблюдаете ли третье правило.
- Не спасать вас от ночной работы?
- Не позволять мне решить, сколько вы выдержите.
Я взяла сумку и папку. Он проводил меня до ворот, проверил, что машина такси остановилась у освещённого входа, и не стал открывать дверь вместо меня. Только передал опечатанный пакет, который я должна была утром вернуть представителю совета.