Калькулятор уравнения Нернста
Расчёт электродного потенциала с учётом температуры, концентраций и стандартного потенциала полуреакции.
—
Электродный потенциал E
В (вольт)
—
Сдвиг потенциала ΔE
В (E − E°)
—
Использованная формула с подстановкой
Как пользоваться калькулятором
1
Выберите стандартную полуреакцию из выпадающего списка (например, Cu²⁺/Cu с E° = +0.337 В) или выберите «Другая» и введите E° вручную. Число электронов n подставится автоматически, но его можно изменить.
2
Задайте температуру в градусах Цельсия (по умолчанию 25 °C, что соответствует стандартным условиям). Значение в кельвинах пересчитывается автоматически: T(K) = T(°C) + 273.15.
3
Укажите реакционное частное Q: либо введите готовое значение напрямую, либо переключите режим и задайте концентрации окисленной [Ox] и восстановленной [Red] форм с их стехиометрическими коэффициентами — Q рассчитается как [Ox]^a / [Red]^b.
4
Нажмите «Рассчитать». Результат — электродный потенциал E в вольтах, сдвиг ΔE относительно стандартного потенциала и полная формула с подставленными значениями. Для сброса всех полей используйте кнопку «Сбросить».
Примеры использования
Медный электрод в разбавленном растворе (25 °C)
Полуреакция: Cu²⁺ + 2e⁻ ⇌ Cu, E° = +0.337 В, n = 2.
Концентрация [Cu²⁺] = 0.01 моль/л (разбавленный раствор), [Cu] = 1 (твёрдая медь в стандартном состоянии).
Q = [Cu²⁺] / 1 = 0.01. Расчёт: E = 0.337 − (0.0592 / 2) × log₁₀(0.01) = 0.337 − 0.0296 × (−2) = 0.337 + 0.0592 = 0.396 В.
Потенциал вырос — окислительная способность меди увеличилась в разбавленном растворе.
Водородный электрод при нестандартном pH (25 °C)
Полуреакция: 2H⁺ + 2e⁻ ⇌ H₂, E° = 0.000 В (стандартный водородный электрод), n = 2.
Давление H₂ = 1 атм (стандартное). При pH = 3 ([H⁺] = 0.001 моль/л), Q = [H⁺]² / P(H₂) = (0.001)² = 10⁻⁶.
E = 0.000 − (0.0592 / 2) × log₁₀(10⁻⁶) = 0 − 0.0296 × (−6) = +0.178 В.
При pH = 3 потенциал водородного электрода составляет +0.178 В относительно стандартного.
Перманганат-ион в кислой среде при 50 °C
Полуреакция: MnO₄⁻ + 8H⁺ + 5e⁻ ⇌ Mn²⁺ + 4H₂O, E° = +1.507 В, n = 5.
При 50 °C (323.15 K): [MnO₄⁻] = 0.02 М, [Mn²⁺] = 0.001 М, [H⁺] = 1 М (pH ≈ 0).
Q = [Mn²⁺] / ([MnO₄⁻] × [H⁺]⁸) = 0.001 / (0.02 × 1⁸) = 0.05.
E = 1.507 − (0.0642 / 5) × log₁₀(0.05) = 1.507 − 0.01284 × (−1.301) = 1.507 + 0.0167 = 1.524 В.
Повышение температуры и неравенство концентраций немного увеличили окислительный потенциал перманганата.
Важные нюансы
- Уравнение Нернста связывает электродный потенциал с концентрациями участников полуреакции. Для разбавленных растворов (активность ≈ концентрация) формула даёт хорошее приближение. В концентрированных растворах следует использовать активности.
- При температуре 25 °C (298.15 K) множитель RT/F ≈ 0.0257 В для натурального логарифма. Множитель для десятичного логарифма: 2.303 × RT/F ≈ 0.0592 В. При других температурах используйте универсальную формулу.
- Для твёрдых веществ и чистых жидкостей активность принимается равной 1 (они не входят в выражение для Q). Для газов используется парциальное давление в атмосферах, отнесённое к стандартному давлению 1 атм.
- Знак потенциала зависит от направления полуреакции. Калькулятор рассчитывает потенциал для полуреакции восстановления (Ox + ne⁻ → Red). Для обратной полуреакции знак меняется на противоположный.
- Стандартные потенциалы E° измерены относительно стандартного водородного электрода при 25 °C, давлении 1 атм и концентрациях 1 моль/л. При отклонении от этих условий необходим расчёт по уравнению Нернста.
Источники данных
- IUPAC Gold Book — Международный союз теоретической и прикладной химии: определения стандартного электродного потенциала, уравнение Нернста, стандартный водородный электрод. doi:10.1351/goldbook.
- NIST Chemistry WebBook — Национальный институт стандартов и технологий США: термодинамические данные, константы (R, F), справочные потенциалы. webbook.nist.gov/chemistry.
- CRC Handbook of Chemistry and Physics (104-е изд., 2023–2024) — таблицы стандартных электродных потенциалов для сотен полуреакций в водных растворах при 25 °C.
- Стандартные химические формулы — расчёт основан на фундаментальных уравнениях физической химии (уравнение Нернста, 1889 г.) и общепринятых справочных значениях, изучаемых в курсе общей и физической химии.
Калькулятор уравнения Нернста позволяет быстро вычислить электродный потенциал для окислительно-восстановительных полуреакций с учётом температуры и концентраций реагентов. Инструмент полезен студентам-химикам, преподавателям и специалистам в области электрохимии. Расчёт включает автоматический подбор стандартного потенциала из встроенной таблицы, пересчёт температуры в кельвины и вычисление реакционного частного Q двумя способами — прямым вводом или через концентрации окисленной и восстановленной форм.
CihmdW5jdGlvbigpewogICAgdmFyIGhhbGZSZWFjdGlvblNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3QtaGFsZi1yZWFjdGlvbicpOwogICAgdmFyIGUwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LWUwJyk7CiAgICB2YXIgbklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1uJyk7CiAgICB2YXIgdGVtcENJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3QtdGVtcC1jJyk7CiAgICB2YXIgdGVtcEtJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3QtdGVtcC1rJyk7CiAgICB2YXIgcU1vZGVTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LXEtbW9kZScpOwogICAgdmFyIHFEaXJlY3RHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3QtcS1kaXJlY3QtZ3JvdXAnKTsKICAgIHZhciBxQ29uY0dyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1xLWNvbmMtZ3JvdXAnKTsKICAgIHZhciBxRGlyZWN0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LXEtZGlyZWN0Jyk7CiAgICB2YXIgb3hDb25jSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LW94LWNvbmMnKTsKICAgIHZhciByZWRDb25jSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LXJlZC1jb25jJyk7CiAgICB2YXIgb3hDb2VmSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LW94LWNvZWYnKTsKICAgIHZhciByZWRDb2VmSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVybnN0LXJlZC1jb2VmJyk7CiAgICB2YXIgY2FsY0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3QtY2FsY3VsYXRlLWJ0bicpOwogICAgdmFyIHJlc2V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZXNldC1idG4nKTsKICAgIHZhciByZXN1bHRFID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZXN1bHQtZScpOwogICAgdmFyIHJlc3VsdERlbHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZXN1bHQtZGVsdGEnKTsKICAgIHZhciByZXN1bHRGb3JtdWxhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZXN1bHQtZm9ybXVsYS11c2VkJyk7CiAgICB2YXIgcmVzdWx0UVZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZXN1bHQtcS12YWx1ZScpOwogICAgdmFyIG5FcnJvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3Qtbi1lcnJvcicpOwogICAgdmFyIHFFcnJvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXJuc3QtcS1lcnJvcicpOwogICAgdmFyIG94Q29uY0Vycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1veC1jb25jLWVycm9yJyk7CiAgICB2YXIgcmVkQ29uY0Vycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZWQtY29uYy1lcnJvcicpOwogICAgdmFyIG94Q29lZkVycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1veC1jb2VmLWVycm9yJyk7CiAgICB2YXIgcmVkQ29lZkVycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lcm5zdC1yZWQtY29lZi1lcnJvcicpOwoKICAgIHZhciBSID0gOC4zMTQ7CiAgICB2YXIgRiA9IDk2NDg1OwoKICAgIGZ1bmN0aW9uIGhpZGVBbGxFcnJvcnMoKSB7CiAgICAgICAgdmFyIGVycm9ycyA9IFtuRXJyb3IsIHFFcnJvciwgb3hDb25jRXJyb3IsIHJlZENvbmNFcnJvciwgb3hDb2VmRXJyb3IsIHJlZENvZWZFcnJvcl07CiAgICAgICAgZXJyb3JzLmZvckVhY2goZnVuY3Rpb24oZWwpIHsgaWYgKGVsKSB7IGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IH0gfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlVGVtcEsoKSB7CiAgICAgICAgdmFyIHRjID0gcGFyc2VGbG9hdCh0ZW1wQ0lucHV0LnZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4odGMpKSB7CiAgICAgICAgICAgIHRlbXBLSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgdGsgPSB0YyArIDI3My4xNTsKICAgICAgICBpZiAodGsgPD0gMCkgewogICAgICAgICAgICB0ZW1wS0lucHV0LnZhbHVlID0gJyc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGVtcEtJbnB1dC52YWx1ZSA9IHRrLnRvRml4ZWQoMik7CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlRnJvbVNlbGVjdCgpIHsKICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBoYWxmUmVhY3Rpb25TZWxlY3Qub3B0aW9uc1toYWxmUmVhY3Rpb25TZWxlY3Quc2VsZWN0ZWRJbmRleF07CiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uLnZhbHVlID09PSAnY3VzdG9tJykgewogICAgICAgICAgICBlMElucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKTsKICAgICAgICAgICAgZTBJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdubi1nZW4tY2FsLWZpZWxkLXJlYWRvbmx5Jyk7CiAgICAgICAgICAgIGUwSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBlMElucHV0LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAncmVhZG9ubHknKTsKICAgICAgICBlMElucHV0LmNsYXNzTGlzdC5hZGQoJ25uLWdlbi1jYWwtZmllbGQtcmVhZG9ubHknKTsKICAgICAgICBlMElucHV0LnZhbHVlID0gc2VsZWN0ZWRPcHRpb24udmFsdWU7CiAgICAgICAgdmFyIG5WYWwgPSBzZWxlY3RlZE9wdGlvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbicpOwogICAgICAgIGlmIChuVmFsKSB7CiAgICAgICAgICAgIG5JbnB1dC52YWx1ZSA9IG5WYWw7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZVFNb2RlVmlzaWJpbGl0eSgpIHsKICAgICAgICB2YXIgbW9kZSA9IHFNb2RlU2VsZWN0LnZhbHVlOwogICAgICAgIGlmIChtb2RlID09PSAnZGlyZWN0JykgewogICAgICAgICAgICBxRGlyZWN0R3JvdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICAgIHFDb25jR3JvdXAuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBxRGlyZWN0R3JvdXAuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgcUNvbmNHcm91cC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICB9CiAgICAgICAgaGlkZUFsbEVycm9ycygpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFEoKSB7CiAgICAgICAgdmFyIG1vZGUgPSBxTW9kZVNlbGVjdC52YWx1ZTsKICAgICAgICBpZiAobW9kZSA9PT0gJ2RpcmVjdCcpIHsKICAgICAgICAgICAgdmFyIHFWYWwgPSBwYXJzZUZsb2F0KHFEaXJlY3RJbnB1dC52YWx1ZSk7CiAgICAgICAgICAgIGlmIChpc05hTihxVmFsKSB8fCBxVmFsIDw9IDApIHsKICAgICAgICAgICAgICAgIHFFcnJvci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHFFcnJvci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICByZXR1cm4gcVZhbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb3hDb25jID0gcGFyc2VGbG9hdChveENvbmNJbnB1dC52YWx1ZSk7CiAgICAgICAgICAgIHZhciByZWRDb25jID0gcGFyc2VGbG9hdChyZWRDb25jSW5wdXQudmFsdWUpOwogICAgICAgICAgICB2YXIgb3hDb2VmID0gcGFyc2VGbG9hdChveENvZWZJbnB1dC52YWx1ZSk7CiAgICAgICAgICAgIHZhciByZWRDb2VmID0gcGFyc2VGbG9hdChyZWRDb2VmSW5wdXQudmFsdWUpOwogICAgICAgICAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKGlzTmFOKG94Q29uYykgfHwgb3hDb25jIDw9IDApIHsgb3hDb25jRXJyb3Iuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IGhhc0Vycm9yID0gdHJ1ZTsgfSBlbHNlIHsgb3hDb25jRXJyb3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfQogICAgICAgICAgICBpZiAoaXNOYU4ocmVkQ29uYykgfHwgcmVkQ29uYyA8PSAwKSB7IHJlZENvbmNFcnJvci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsgaGFzRXJyb3IgPSB0cnVlOyB9IGVsc2UgeyByZWRDb25jRXJyb3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfQogICAgICAgICAgICBpZiAoaXNOYU4ob3hDb2VmKSB8fCBveENvZWYgPD0gMCkgeyBveENvZWZFcnJvci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsgaGFzRXJyb3IgPSB0cnVlOyB9IGVsc2UgeyBveENvZWZFcnJvci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgICAgIGlmIChpc05hTihyZWRDb2VmKSB8fCByZWRDb2VmIDw9IDApIHsgcmVkQ29lZkVycm9yLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyBoYXNFcnJvciA9IHRydWU7IH0gZWxzZSB7IHJlZENvZWZFcnJvci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIHZhciBRID0gTWF0aC5wb3cocmVkQ29uYywgcmVkQ29lZikgLyBNYXRoLnBvdyhveENvbmMsIG94Q29lZik7CiAgICAgICAgICAgIGlmICghaXNGaW5pdGUoUSkgfHwgUSA8PSAwKSB7CiAgICAgICAgICAgICAgICBxRXJyb3Iuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBxRXJyb3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgcmV0dXJuIFE7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWwsIGRpZ2l0cykgewogICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgIWlzRmluaXRlKHZhbCkpIHJldHVybiAn4oCUJzsKICAgICAgICByZXR1cm4gdmFsLnRvRml4ZWQoZGlnaXRzIHx8IDQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsKICAgICAgICBoaWRlQWxsRXJyb3JzKCk7CiAgICAgICAgdmFyIGUwID0gcGFyc2VGbG9hdChlMElucHV0LnZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4oZTApKSB7CiAgICAgICAgICAgIHJlc3VsdEUudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICAgICAgcmVzdWx0RGVsdGEudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICAgICAgcmVzdWx0Rm9ybXVsYS50ZXh0Q29udGVudCA9ICfQktCy0LXQtNC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgtC10L3RhtC40LDQuyBFwrAnOwogICAgICAgICAgICByZXN1bHRRVmFsdWUudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgbiA9IHBhcnNlRmxvYXQobklucHV0LnZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4obikgfHwgbiA8PSAwKSB7CiAgICAgICAgICAgIG5FcnJvci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgcmVzdWx0RS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHREZWx0YS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHRGb3JtdWxhLnRleHRDb250ZW50ID0gJ9Cd0LXQutC+0YDRgNC10LrRgtC90L7QtSDRh9C40YHQu9C+INGN0LvQtdC60YLRgNC+0L3QvtCyJzsKICAgICAgICAgICAgcmVzdWx0UVZhbHVlLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbkVycm9yLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgdmFyIHRrID0gcGFyc2VGbG9hdCh0ZW1wS0lucHV0LnZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4odGspIHx8IHRrIDw9IDApIHsKICAgICAgICAgICAgcmVzdWx0RS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHREZWx0YS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHRGb3JtdWxhLnRleHRDb250ZW50ID0gJ9Cd0LXQutC+0YDRgNC10LrRgtC90LDRjyDRgtC10LzQv9C10YDQsNGC0YPRgNCwJzsKICAgICAgICAgICAgcmVzdWx0UVZhbHVlLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIFEgPSBnZXRRKCk7CiAgICAgICAgaWYgKFEgPT09IG51bGwpIHsKICAgICAgICAgICAgcmVzdWx0RS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHREZWx0YS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHRGb3JtdWxhLnRleHRDb250ZW50ID0gJ9Cf0YDQvtCy0LXRgNGM0YLQtSDQt9C90LDRh9C10L3QuNC1IFEnOwogICAgICAgICAgICByZXN1bHRRVmFsdWUudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgbG5RID0gTWF0aC5sb2coUSk7CiAgICAgICAgdmFyIGRlbHRhRSA9IChSICogdGspIC8gKG4gKiBGKSAqIGxuUTsKICAgICAgICB2YXIgRSA9IGUwIC0gZGVsdGFFOwogICAgICAgIGlmICghaXNGaW5pdGUoRSkgfHwgIWlzRmluaXRlKGRlbHRhRSkpIHsKICAgICAgICAgICAgcmVzdWx0RS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHREZWx0YS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXN1bHRGb3JtdWxhLnRleHRDb250ZW50ID0gJ9Ce0YjQuNCx0LrQsCDQstGL0YfQuNGB0LvQtdC90LjQuSc7CiAgICAgICAgICAgIHJlc3VsdFFWYWx1ZS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJlc3VsdEUudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIoRSwgNCk7CiAgICAgICAgcmVzdWx0RGVsdGEudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIoRSAtIGUwLCA0KTsKICAgICAgICB2YXIgcHJlZmFjdG9yID0gKFIgKiB0aykgLyAobiAqIEYpOwogICAgICAgIHZhciBmb3JtdWxhU3RyID0gJ0UgPSAnICsgZm9ybWF0TnVtYmVyKGUwLCA0KSArICcg4oiSICgnICsgZm9ybWF0TnVtYmVyKHByZWZhY3RvciwgNikgKyAnKSDDlyBsbignICsgZm9ybWF0TnVtYmVyKFEsIDYpICsgJyknOwogICAgICAgIGlmIChNYXRoLmFicyh0ayAtIDI5OC4xNSkgPCAwLjUpIHsKICAgICAgICAgICAgdmFyIHByZWZhY3RvcjEwID0gMC4wNTkxNiAvIG47CiAgICAgICAgICAgIHZhciBsb2cxMFEgPSBNYXRoLmxvZzEwKFEpOwogICAgICAgICAgICBmb3JtdWxhU3RyICs9ICcg4omIICcgKyBmb3JtYXROdW1iZXIoZTAsIDQpICsgJyDiiJIgKCcgKyBmb3JtYXROdW1iZXIocHJlZmFjdG9yMTAsIDQpICsgJykgw5cgbG9n4oKB4oKAKCcgKyBmb3JtYXROdW1iZXIoUSwgNikgKyAnKSc7CiAgICAgICAgICAgIGZvcm11bGFTdHIgKz0gJyAo0L/RgNC4IDI1IMKwQyknOwogICAgICAgIH0KICAgICAgICByZXN1bHRGb3JtdWxhLnRleHRDb250ZW50ID0gZm9ybXVsYVN0cjsKICAgICAgICByZXN1bHRRVmFsdWUudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIoUSwgNik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVzZXRGb3JtKCkgewogICAgICAgIGhpZGVBbGxFcnJvcnMoKTsKICAgICAgICBoYWxmUmVhY3Rpb25TZWxlY3QudmFsdWUgPSBoYWxmUmVhY3Rpb25TZWxlY3Qub3B0aW9uc1swXS52YWx1ZTsKICAgICAgICB1cGRhdGVGcm9tU2VsZWN0KCk7CiAgICAgICAgbklucHV0LnZhbHVlID0gJzInOwogICAgICAgIHRlbXBDSW5wdXQudmFsdWUgPSAnMjUnOwogICAgICAgIHVwZGF0ZVRlbXBLKCk7CiAgICAgICAgcU1vZGVTZWxlY3QudmFsdWUgPSAnZGlyZWN0JzsKICAgICAgICB1cGRhdGVRTW9kZVZpc2liaWxpdHkoKTsKICAgICAgICBxRGlyZWN0SW5wdXQudmFsdWUgPSAnMSc7CiAgICAgICAgb3hDb25jSW5wdXQudmFsdWUgPSAnMSc7CiAgICAgICAgcmVkQ29uY0lucHV0LnZhbHVlID0gJzEnOwogICAgICAgIG94Q29lZklucHV0LnZhbHVlID0gJzEnOwogICAgICAgIHJlZENvZWZJbnB1dC52YWx1ZSA9ICcxJzsKICAgICAgICByZXN1bHRFLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgcmVzdWx0RGVsdGEudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICByZXN1bHRGb3JtdWxhLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgcmVzdWx0UVZhbHVlLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICB9CgogICAgaGFsZlJlYWN0aW9uU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgIHVwZGF0ZUZyb21TZWxlY3QoKTsKICAgICAgICBoaWRlQWxsRXJyb3JzKCk7CiAgICB9KTsKICAgIHRlbXBDSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICB1cGRhdGVUZW1wSygpOwogICAgICAgIGhpZGVBbGxFcnJvcnMoKTsKICAgIH0pOwogICAgcU1vZGVTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdXBkYXRlUU1vZGVWaXNpYmlsaXR5KCk7CiAgICAgICAgaGlkZUFsbEVycm9ycygpOwogICAgfSk7CiAgICBjYWxjQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsY3VsYXRlKTsKICAgIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVzZXRGb3JtKTsKCiAgICB1cGRhdGVGcm9tU2VsZWN0KCk7CiAgICB1cGRhdGVUZW1wSygpOwogICAgdXBkYXRlUU1vZGVWaXNpYmlsaXR5KCk7Cn0pKCk7Cg==