Калькулятор объединённого газового закона
Вычислите недостающий параметр газа (давление, объём или температуру) по формуле P₁V₁/T₁ = P₂V₂/T₂ с учётом различных единиц измерения.
Введите данные и нажмите «Рассчитать»
Как пользоваться
1
Введите начальные параметры газа: давление P₁, объём V₁ и температуру T₁. Например: P₁ = 1 атм, V₁ = 10 л, T₁ = 25 °C.
2
Выберите, какой конечный параметр нужно найти — давление P₂, объём V₂ или температуру T₂. Укажите желаемые единицы результата.
3
Введите два известных конечных параметра (те, которые не ищете). Например, если ищете V₂, укажите P₂ = 2 атм и T₂ = 100 °C.
4
Нажмите «Рассчитать». Результат появится в правой панели. При необходимости используйте кнопку «Сбросить» для новых вычислений.
Примеры использования
Нагревание газа в жёстком баллоне (V = const)
Дано: P₁ = 1 атм, V₁ = 12 л, T₁ = 27 °C (300,15 K). Баллон нагрели до T₂ = 127 °C (400,15 K). Объём не изменился: V₂ = 12 л. Найти P₂.
Результат: P₂ = 1 × (12/12) × (400,15/300,15) ≈ 1,33 атм.
Сжатие газа поршнем (T = const, изотерма)
Дано: P₁ = 101325 Па, V₁ = 5 л, T₁ = 300 K. Поршень сжал газ до V₂ = 2 л при той же температуре T₂ = 300 K. Найти P₂.
Результат: P₂ = 101325 × (5/2) × (300/300) = 253 312,5 Па ≈ 2,5 атм.
Дыхание: расширение воздуха в лёгких
Дано: P₁ = 1 атм, V₁ = 0,5 л, T₁ = 273 K (0 °C). Воздух нагревается в лёгких до T₂ = 310 K (37 °C), давление остаётся атмосферным P₂ = 1 атм. Найти V₂.
Результат: V₂ = 0,5 × (1/1) × (310/273) ≈ 0,568 л.
Важные нюансы
- Температура — только в Кельвинах. Калькулятор принимает градусы Цельсия и автоматически переводит их в Кельвины (T(K) = T(°C) + 273,15). Нулевая или отрицательная температура по Кельвину недопустима.
- Согласованность единиц. Калькулятор конвертирует все единицы автоматически, но для осмысленного результата убедитесь, что величины физически реалистичны.
- Идеальный газ. Объединённый газовый закон строго выполняется для идеального газа. Реальные газы (особенно при высоких давлениях и низких температурах) дают отклонения.
- Количество вещества постоянно. Закон предполагает, что масса газа и его химический состав не меняются (закрытая система).
- Техника безопасности. При работе с газами под давлением всегда соблюдайте нормы безопасности. Не превышайте допустимые параметры сосудов и баллонов. Данный калькулятор — справочный инструмент, а не замена инженерным расчётам.
Источники данных
- IUPAC Gold Book — Compendium of Chemical Terminology, стандартные определения давления, температуры, уравнения состояния идеального газа. iupac.org
- NIST Chemistry WebBook — National Institute of Standards and Technology, справочные данные по термодинамике газов. webbook.nist.gov
- CRC Handbook of Chemistry and Physics — фундаментальный справочник физико-химических констант, включая значения стандартной атмосферы и газовых постоянных.
- Курс общей и неорганической химии — стандартные уравнения состояния идеального газа, принятые в российских образовательных программах (школьный и вузовский уровень).
Объединённый газовый закон связывает давление, объём и температуру идеального газа в закрытой системе при постоянной массе. Данный онлайн-калькулятор позволяет мгновенно вычислить неизвестный параметр конечного состояния газа, автоматически конвертируя единицы измерения давления (Па, кПа, атм, мм рт.ст.), объёма (м³, л, мл) и температуры (K, °C). Инструмент полезен студентам, инженерам-химикам и всем, кто работает с термодинамическими расчётами газовых смесей.
CihmdW5jdGlvbigpewogICd1c2Ugc3RyaWN0JzsKCiAgLy8g0JrQvtC90YHRgtCw0L3RgtGLINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8KICB2YXIgUFJFU1NVUkVfVE9fUEEgPSB7CiAgICAnUGEnOiAxLAogICAgJ2tQYSc6IDEwMDAsCiAgICAnYXRtJzogMTAxMzI1LAogICAgJ21tSGcnOiAxMzMuMzIyCiAgfTsKICB2YXIgUEFfVE9fUFJFU1NVUkUgPSB7CiAgICAnUGEnOiAxLAogICAgJ2tQYSc6IDAuMDAxLAogICAgJ2F0bSc6IDEvMTAxMzI1LAogICAgJ21tSGcnOiAxLzEzMy4zMjIKICB9OwogIHZhciBWT0xVTUVfVE9fTTMgPSB7CiAgICAnbTMnOiAxLAogICAgJ2wnOiAwLjAwMSwKICAgICdtbCc6IDAuMDAwMDAxCiAgfTsKICB2YXIgTTNfVE9fVk9MVU1FID0gewogICAgJ20zJzogMSwKICAgICdsJzogMTAwMCwKICAgICdtbCc6IDEwMDAwMDAKICB9OwoKICAvLyDQldC00LjQvdC40YbRiyDQtNC70Y8g0YDQsNC30L3Ri9GFINC/0LDRgNCw0LzQtdGC0YDQvtCyCiAgdmFyIFBSRVNTVVJFX1VOSVRTID0gWwogICAgeyB2YWx1ZTogJ1BhJywgbGFiZWw6ICfQn9CwJyB9LAogICAgeyB2YWx1ZTogJ2tQYScsIGxhYmVsOiAn0LrQn9CwJyB9LAogICAgeyB2YWx1ZTogJ2F0bScsIGxhYmVsOiAn0LDRgtC8JyB9LAogICAgeyB2YWx1ZTogJ21tSGcnLCBsYWJlbDogJ9C80Lwg0YDRgi7RgdGCLicgfQogIF07CiAgdmFyIFZPTFVNRV9VTklUUyA9IFsKICAgIHsgdmFsdWU6ICdtMycsIGxhYmVsOiAn0LzCsycgfSwKICAgIHsgdmFsdWU6ICdsJywgbGFiZWw6ICfQuycgfSwKICAgIHsgdmFsdWU6ICdtbCcsIGxhYmVsOiAn0LzQuycgfQogIF07CiAgdmFyIFRFTVBFUkFUVVJFX1VOSVRTID0gWwogICAgeyB2YWx1ZTogJ0snLCBsYWJlbDogJ0snIH0sCiAgICB7IHZhbHVlOiAnQycsIGxhYmVsOiAnwrBDJyB9CiAgXTsKCiAgLy8gRE9NLdGN0LvQtdC80LXQvdGC0YsKICB2YXIgcDFWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwMS12YWx1ZScpOwogIHZhciBwMVVuaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncDEtdW5pdCcpOwogIHZhciB2MVZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3YxLXZhbHVlJyk7CiAgdmFyIHYxVW5pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2MS11bml0Jyk7CiAgdmFyIHQxVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndDEtdmFsdWUnKTsKICB2YXIgdDFVbml0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3QxLXVuaXQnKTsKCiAgdmFyIGZpbmRQYXJhbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5kLXBhcmFtJyk7CiAgdmFyIHJlc3VsdFVuaXRTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LXVuaXQtc2VsZWN0Jyk7CgogIHZhciBrbm93bjFHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrbm93bjEtZ3JvdXAnKTsKICB2YXIga25vd24xVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna25vd24xLXZhbHVlJyk7CiAgdmFyIGtub3duMUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tub3duMS1sYWJlbCcpOwogIHZhciBrbm93bjFVbml0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tub3duMS11bml0Jyk7CgogIHZhciBrbm93bjJHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrbm93bjItZ3JvdXAnKTsKICB2YXIga25vd24yVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna25vd24yLXZhbHVlJyk7CiAgdmFyIGtub3duMkxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tub3duMi1sYWJlbCcpOwogIHZhciBrbm93bjJVbml0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tub3duMi11bml0Jyk7CgogIHZhciBlcnJvckNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1jb250YWluZXInKTsKICB2YXIgY2FsY0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxjLWJ0bicpOwogIHZhciByZXNldEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNldC1idG4nKTsKCiAgdmFyIHJlc3VsdENhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LWNhcmQnKTsKICB2YXIgcmVzdWx0RGV0YWlsQ2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtZGV0YWlsLWNhcmQnKTsKICB2YXIgYWxsUGFyYW1zR3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbGwtcGFyYW1zLWdyaWQnKTsKCiAgLy8g0KLQtdC60YPRidC40LUg0LzQtdGC0LDQtNCw0L3QvdGL0LUg0L/QvtC70LXQuQogIHZhciBrbm93bjFUeXBlID0gJ1YnOyAvLyAnUCcsICdWJywgJ1QnCiAgdmFyIGtub3duMlR5cGUgPSAnVCc7CgogIC8vINCX0LDQv9C+0LvQvdC10L3QuNC1IHNlbGVjdCDQvtC/0YbQuNGP0LzQuAogIGZ1bmN0aW9uIHBvcHVsYXRlU2VsZWN0KHNlbGVjdEVsLCBvcHRpb25zLCBzZWxlY3RlZFZhbHVlKSB7CiAgICBzZWxlY3RFbC5pbm5lckhUTUwgPSAnJzsKICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHQpIHsKICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICBvcHRpb24udmFsdWUgPSBvcHQudmFsdWU7CiAgICAgIG9wdGlvbi50ZXh0Q29udGVudCA9IG9wdC5sYWJlbDsKICAgICAgaWYgKG9wdC52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSkgewogICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CiAgICAgIH0KICAgICAgc2VsZWN0RWwuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgIH0pOwogIH0KCiAgLy8g0J7QsdC90L7QstC70LXQvdC40LUg0LjQvdGC0LXRgNGE0LXQudGB0LAg0L/RgNC4INGB0LzQtdC90LUg0LjRgdC60L7QvNC+0LPQviDQv9Cw0YDQsNC80LXRgtGA0LAKICBmdW5jdGlvbiB1cGRhdGVLbm93bkZpZWxkcygpIHsKICAgIHZhciBwYXJhbSA9IGZpbmRQYXJhbS52YWx1ZTsgLy8gJ1AyJywgJ1YyJywgJ1QyJwoKICAgIGlmIChwYXJhbSA9PT0gJ1AyJykgewogICAgICBrbm93bjFUeXBlID0gJ1YnOwogICAgICBrbm93bjJUeXBlID0gJ1QnOwogICAgICBrbm93bjFMYWJlbC50ZXh0Q29udGVudCA9ICfQntCx0YrRkdC8IFbigoInOwogICAgICBrbm93bjJMYWJlbC50ZXh0Q29udGVudCA9ICfQotC10LzQv9C10YDQsNGC0YPRgNCwIFTigoInOwogICAgICBwb3B1bGF0ZVNlbGVjdChrbm93bjFVbml0LCBWT0xVTUVfVU5JVFMsICdsJyk7CiAgICAgIHBvcHVsYXRlU2VsZWN0KGtub3duMlVuaXQsIFRFTVBFUkFUVVJFX1VOSVRTLCAnSycpOwogICAgICBwb3B1bGF0ZVNlbGVjdChyZXN1bHRVbml0U2VsZWN0LCBQUkVTU1VSRV9VTklUUywgJ2F0bScpOwogICAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ1YyJykgewogICAgICBrbm93bjFUeXBlID0gJ1AnOwogICAgICBrbm93bjJUeXBlID0gJ1QnOwogICAgICBrbm93bjFMYWJlbC50ZXh0Q29udGVudCA9ICfQlNCw0LLQu9C10L3QuNC1IFDigoInOwogICAgICBrbm93bjJMYWJlbC50ZXh0Q29udGVudCA9ICfQotC10LzQv9C10YDQsNGC0YPRgNCwIFTigoInOwogICAgICBwb3B1bGF0ZVNlbGVjdChrbm93bjFVbml0LCBQUkVTU1VSRV9VTklUUywgJ2F0bScpOwogICAgICBwb3B1bGF0ZVNlbGVjdChrbm93bjJVbml0LCBURU1QRVJBVFVSRV9VTklUUywgJ0snKTsKICAgICAgcG9wdWxhdGVTZWxlY3QocmVzdWx0VW5pdFNlbGVjdCwgVk9MVU1FX1VOSVRTLCAnbCcpOwogICAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ1QyJykgewogICAgICBrbm93bjFUeXBlID0gJ1AnOwogICAgICBrbm93bjJUeXBlID0gJ1YnOwogICAgICBrbm93bjFMYWJlbC50ZXh0Q29udGVudCA9ICfQlNCw0LLQu9C10L3QuNC1IFDigoInOwogICAgICBrbm93bjJMYWJlbC50ZXh0Q29udGVudCA9ICfQntCx0YrRkdC8IFbigoInOwogICAgICBwb3B1bGF0ZVNlbGVjdChrbm93bjFVbml0LCBQUkVTU1VSRV9VTklUUywgJ2F0bScpOwogICAgICBwb3B1bGF0ZVNlbGVjdChrbm93bjJVbml0LCBWT0xVTUVfVU5JVFMsICdsJyk7CiAgICAgIHBvcHVsYXRlU2VsZWN0KHJlc3VsdFVuaXRTZWxlY3QsIFRFTVBFUkFUVVJFX1VOSVRTLCAnSycpOwogICAgfQogICAgLy8g0J/QvtC60LDQt9Cw0YLRjCDQvtCx0LUg0LPRgNGD0L/Qv9GLCiAgICBrbm93bjFHcm91cC5jbGFzc0xpc3QucmVtb3ZlKCdubi1nZW4taGlkZGVuJyk7CiAgICBrbm93bjJHcm91cC5jbGFzc0xpc3QucmVtb3ZlKCdubi1nZW4taGlkZGVuJyk7CiAgICBoaWRlRXJyb3IoKTsKICB9CgogIC8vINCa0L7QvdCy0LXRgNGC0LDRhtC40Y8g0LTQsNCy0LvQtdC90LjRjyDQsiDQn9CwCiAgZnVuY3Rpb24gdG9QYSh2YWx1ZSwgdW5pdCkgewogICAgcmV0dXJuIHZhbHVlICogKFBSRVNTVVJFX1RPX1BBW3VuaXRdIHx8IDEpOwogIH0KICBmdW5jdGlvbiBmcm9tUGEodmFsdWUsIHVuaXQpIHsKICAgIHJldHVybiB2YWx1ZSAqIChQQV9UT19QUkVTU1VSRVt1bml0XSB8fCAxKTsKICB9CgogIC8vINCa0L7QvdCy0LXRgNGC0LDRhtC40Y8g0L7QsdGK0ZHQvNCwINCyINC8wrMKICBmdW5jdGlvbiB0b00zKHZhbHVlLCB1bml0KSB7CiAgICByZXR1cm4gdmFsdWUgKiAoVk9MVU1FX1RPX00zW3VuaXRdIHx8IDEpOwogIH0KICBmdW5jdGlvbiBmcm9tTTModmFsdWUsIHVuaXQpIHsKICAgIHJldHVybiB2YWx1ZSAqIChNM19UT19WT0xVTUVbdW5pdF0gfHwgMSk7CiAgfQoKICAvLyDQmtC+0L3QstC10YDRgtCw0YbQuNGPINGC0LXQvNC/0LXRgNCw0YLRg9GA0Ysg0LIg0JrQtdC70YzQstC40L3RiwogIGZ1bmN0aW9uIHRvS2VsdmluKHZhbHVlLCB1bml0KSB7CiAgICBpZiAodW5pdCA9PT0gJ0MnKSB7CiAgICAgIHJldHVybiB2YWx1ZSArIDI3My4xNTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZnVuY3Rpb24gZnJvbUtlbHZpbih2YWx1ZSwgdW5pdCkgewogICAgaWYgKHVuaXQgPT09ICdDJykgewogICAgICByZXR1cm4gdmFsdWUgLSAyNzMuMTU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyDQn9C+0LvRg9GH0LXQvdC40LUg0YfQuNGB0LvQsCDQuNC3INC/0L7Qu9GPLCDQstC+0LfQstGA0LDRgiBOYU4g0LXRgdC70Lgg0L/Rg9GB0YLQviDQuNC70Lgg0L3QtdC60L7RgNGA0LXQutGC0L3QvgogIGZ1bmN0aW9uIGdldE51bWVyaWNWYWx1ZShpbnB1dEVsKSB7CiAgICB2YXIgcmF3ID0gaW5wdXRFbC52YWx1ZS50cmltKCk7CiAgICBpZiAocmF3ID09PSAnJykgcmV0dXJuIE5hTjsKICAgIHZhciBudW0gPSBwYXJzZUZsb2F0KHJhdyk7CiAgICBpZiAoaXNOYU4obnVtKSB8fCAhaXNGaW5pdGUobnVtKSkgcmV0dXJuIE5hTjsKICAgIHJldHVybiBudW07CiAgfQoKICAvLyDQn9C+0LrQsNC30LDRgtGMINC+0YjQuNCx0LrRgwogIGZ1bmN0aW9uIHNob3dFcnJvcihtZXNzYWdlKSB7CiAgICBlcnJvckNvbnRhaW5lci50ZXh0Q29udGVudCA9IG1lc3NhZ2U7CiAgICBlcnJvckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICB9CiAgZnVuY3Rpb24gaGlkZUVycm9yKCkgewogICAgZXJyb3JDb250YWluZXIudGV4dENvbnRlbnQgPSAnJzsKICAgIGVycm9yQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgfQoKICAvLyDQktCw0LvQuNC00LDRhtC40Y8g0Lgg0YDQsNGB0YfRkdGCCiAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgewogICAgaGlkZUVycm9yKCk7CgogICAgLy8g0KHRh9C40YLQsNGC0Ywg0L3QsNGH0LDQu9GM0L3Ri9C1INC/0LDRgNCw0LzQtdGC0YDRiwogICAgdmFyIHAxVmFsID0gZ2V0TnVtZXJpY1ZhbHVlKHAxVmFsdWUpOwogICAgdmFyIHYxVmFsID0gZ2V0TnVtZXJpY1ZhbHVlKHYxVmFsdWUpOwogICAgdmFyIHQxVmFsID0gZ2V0TnVtZXJpY1ZhbHVlKHQxVmFsdWUpOwoKICAgIGlmIChpc05hTihwMVZhbCkgfHwgaXNOYU4odjFWYWwpIHx8IGlzTmFOKHQxVmFsKSkgewogICAgICBzaG93RXJyb3IoJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQt9Cw0L/QvtC70L3QuNGC0LUg0LLRgdC1INC/0L7Qu9GPINC90LDRh9Cw0LvRjNC90YvRhSDQv9Cw0YDQsNC80LXRgtGA0L7QsiAoUOKCgSwgVuKCgSwgVOKCgSkg0LrQvtGA0YDQtdC60YLQvdGL0LzQuCDRh9C40YHQu9Cw0LzQuC4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHAxVmFsIDw9IDApIHsKICAgICAgc2hvd0Vycm9yKCfQlNCw0LLQu9C10L3QuNC1IFDigoEg0LTQvtC70LbQvdC+INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvC4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHYxVmFsIDw9IDApIHsKICAgICAgc2hvd0Vycm9yKCfQntCx0YrRkdC8IFbigoEg0LTQvtC70LbQtdC9INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvC4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHQxSyA9IHRvS2VsdmluKHQxVmFsLCB0MVVuaXQudmFsdWUpOwogICAgaWYgKHQxSyA8PSAwKSB7CiAgICAgIHNob3dFcnJvcign0KLQtdC80L/QtdGA0LDRgtGD0YDQsCBU4oKBINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQstGL0YjQtSDQsNCx0YHQvtC70Y7RgtC90L7Qs9C+INC90YPQu9GPICgwIEsg0LjQu9C4ID4g4oiSMjczLDE1IMKwQykuJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyDQmNC30LLQtdGB0YLQvdGL0LUg0LrQvtC90LXRh9C90YvQtSDQv9Cw0YDQsNC80LXRgtGA0YsKICAgIHZhciBrMVZhbCA9IGdldE51bWVyaWNWYWx1ZShrbm93bjFWYWx1ZSk7CiAgICB2YXIgazJWYWwgPSBnZXROdW1lcmljVmFsdWUoa25vd24yVmFsdWUpOwoKICAgIGlmIChpc05hTihrMVZhbCkgfHwgaXNOYU4oazJWYWwpKSB7CiAgICAgIHNob3dFcnJvcign0J/QvtC20LDQu9GD0LnRgdGC0LAsINC30LDQv9C+0LvQvdC40YLQtSDQvtCx0LAg0L/QvtC70Y8g0LjQt9Cy0LXRgdGC0L3Ri9GFINC60L7QvdC10YfQvdGL0YUg0L/QsNGA0LDQvNC10YLRgNC+0LIg0LrQvtGA0YDQtdC60YLQvdGL0LzQuCDRh9C40YHQu9Cw0LzQuC4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGsxVmFsIDw9IDApIHsKICAgICAgc2hvd0Vycm9yKCfQmNC30LLQtdGB0YLQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCAxINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvCDRh9C40YHQu9C+0LwuJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChrMlZhbCA8PSAwKSB7CiAgICAgIHNob3dFcnJvcign0JjQt9Cy0LXRgdGC0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAgMiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L/QvtC70L7QttC40YLQtdC70YzQvdGL0Lwg0YfQuNGB0LvQvtC8LicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8g0JrQvtC90LLQtdGA0YLQsNGG0LjRjyDQvdCw0YfQsNC70YzQvdGL0YUg0LIg0LHQsNC30L7QstGL0LUKICAgIHZhciBwMUJhc2UgPSB0b1BhKHAxVmFsLCBwMVVuaXQudmFsdWUpOwogICAgdmFyIHYxQmFzZSA9IHRvTTModjFWYWwsIHYxVW5pdC52YWx1ZSk7CiAgICB2YXIgdDFCYXNlID0gdDFLOwoKICAgIC8vINCe0L/RgNC10LTQtdC70LjRgtGMINGC0LjQv9GLINC4INC60L7QvdCy0LXRgNGC0LjRgNC+0LLQsNGC0Ywg0LjQt9Cy0LXRgdGC0L3Ri9C1INC60L7QvdC10YfQvdGL0LUKICAgIHZhciBrMUJhc2UsIGsyQmFzZTsKICAgIGlmIChrbm93bjFUeXBlID09PSAnUCcpIHsKICAgICAgazFCYXNlID0gdG9QYShrMVZhbCwga25vd24xVW5pdC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGtub3duMVR5cGUgPT09ICdWJykgewogICAgICBrMUJhc2UgPSB0b00zKGsxVmFsLCBrbm93bjFVbml0LnZhbHVlKTsKICAgIH0gZWxzZSB7IC8vIFQKICAgICAgazFCYXNlID0gdG9LZWx2aW4oazFWYWwsIGtub3duMVVuaXQudmFsdWUpOwogICAgICBpZiAoazFCYXNlIDw9IDApIHsKICAgICAgICBzaG93RXJyb3IoJ9Ci0LXQvNC/0LXRgNCw0YLRg9GA0LAgVOKCgiDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LLRi9GI0LUg0LDQsdGB0L7Qu9GO0YLQvdC+0LPQviDQvdGD0LvRjy4nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBpZiAoa25vd24yVHlwZSA9PT0gJ1AnKSB7CiAgICAgIGsyQmFzZSA9IHRvUGEoazJWYWwsIGtub3duMlVuaXQudmFsdWUpOwogICAgfSBlbHNlIGlmIChrbm93bjJUeXBlID09PSAnVicpIHsKICAgICAgazJCYXNlID0gdG9NMyhrMlZhbCwga25vd24yVW5pdC52YWx1ZSk7CiAgICB9IGVsc2UgeyAvLyBUCiAgICAgIGsyQmFzZSA9IHRvS2VsdmluKGsyVmFsLCBrbm93bjJVbml0LnZhbHVlKTsKICAgICAgaWYgKGsyQmFzZSA8PSAwKSB7CiAgICAgICAgc2hvd0Vycm9yKCfQotC10LzQv9C10YDQsNGC0YPRgNCwIFTigoIg0LTQvtC70LbQvdCwINCx0YvRgtGMINCy0YvRiNC1INCw0LHRgdC+0LvRjtGC0L3QvtCz0L4g0L3Rg9C70Y8uJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgLy8g0J7Qv9GA0LXQtNC10LvQuNGC0YwgcDJCYXNlLCB2MkJhc2UsIHQyQmFzZQogICAgdmFyIHAyQmFzZSwgdjJCYXNlLCB0MkJhc2U7CiAgICB2YXIgcGFyYW0gPSBmaW5kUGFyYW0udmFsdWU7CgogICAgaWYgKHBhcmFtID09PSAnUDInKSB7CiAgICAgIHYyQmFzZSA9IGsxQmFzZTsgLy8ga25vd24xID0gVgogICAgICB0MkJhc2UgPSBrMkJhc2U7IC8vIGtub3duMiA9IFQKICAgICAgcDJCYXNlID0gcDFCYXNlICogKHYxQmFzZSAvIHYyQmFzZSkgKiAodDJCYXNlIC8gdDFCYXNlKTsKICAgIH0gZWxzZSBpZiAocGFyYW0gPT09ICdWMicpIHsKICAgICAgcDJCYXNlID0gazFCYXNlOyAvLyBrbm93bjEgPSBQCiAgICAgIHQyQmFzZSA9IGsyQmFzZTsgLy8ga25vd24yID0gVAogICAgICB2MkJhc2UgPSB2MUJhc2UgKiAocDFCYXNlIC8gcDJCYXNlKSAqICh0MkJhc2UgLyB0MUJhc2UpOwogICAgfSBlbHNlIHsgLy8gVDIKICAgICAgcDJCYXNlID0gazFCYXNlOyAvLyBrbm93bjEgPSBQCiAgICAgIHYyQmFzZSA9IGsyQmFzZTsgLy8ga25vd24yID0gVgogICAgICB0MkJhc2UgPSB0MUJhc2UgKiAocDJCYXNlIC8gcDFCYXNlKSAqICh2MkJhc2UgLyB2MUJhc2UpOwogICAgfQoKICAgIC8vINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQsdC10YHQutC+0L3QtdGH0L3QvtGB0YLRjCDQuCBOYU4KICAgIGlmICghaXNGaW5pdGUocDJCYXNlKSB8fCAhaXNGaW5pdGUodjJCYXNlKSB8fCAhaXNGaW5pdGUodDJCYXNlKSkgewogICAgICBzaG93RXJyb3IoJ9Ce0YjQuNCx0LrQsCDQstGL0YfQuNGB0LvQtdC90LjRjzog0L/RgNC+0LLQtdGA0YzRgtC1INCy0LLQtdC00ZHQvdC90YvQtSDQtNCw0L3QvdGL0LUuINCS0L7Qt9C80L7QttC90L4sINC00LXQu9C10L3QuNC1INC90LAg0L3QvtC70Ywg0LjQu9C4INC90LXQutC+0YDRgNC10LrRgtC90YvQtSDQt9C90LDRh9C10L3QuNGPLicpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocDJCYXNlIDw9IDAgfHwgdjJCYXNlIDw9IDAgfHwgdDJCYXNlIDw9IDApIHsKICAgICAgc2hvd0Vycm9yKCfQoNC10LfRg9C70YzRgtCw0YIg0LLRi9GH0LjRgdC70LXQvdC40Y8g0LTQsNC7INC90LXRhNC40LfQuNGH0L3QvtC1INC30L3QsNGH0LXQvdC40LUgKOKJpCAwKS4g0J/RgNC+0LLQtdGA0YzRgtC1INC40YHRhdC+0LTQvdGL0LUg0LTQsNC90L3Ri9C1LicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8g0JrQvtC90LLQtdGA0YLQsNGG0LjRjyDRgNC10LfRg9C70YzRgtCw0YLQsCDQsiDQstGL0LHRgNCw0L3QvdGL0LUg0LXQtNC40L3QuNGG0YsKICAgIHZhciByZXN1bHRWYWx1ZSwgcmVzdWx0VW5pdExhYmVsLCByZXN1bHRMYWJlbFRleHQ7CiAgICBpZiAocGFyYW0gPT09ICdQMicpIHsKICAgICAgcmVzdWx0VmFsdWUgPSBmcm9tUGEocDJCYXNlLCByZXN1bHRVbml0U2VsZWN0LnZhbHVlKTsKICAgICAgcmVzdWx0VW5pdExhYmVsID0gcmVzdWx0VW5pdFNlbGVjdC5vcHRpb25zW3Jlc3VsdFVuaXRTZWxlY3Quc2VsZWN0ZWRJbmRleF0udGV4dDsKICAgICAgcmVzdWx0TGFiZWxUZXh0ID0gJ9Ca0L7QvdC10YfQvdC+0LUg0LTQsNCy0LvQtdC90LjQtSBQ4oKCJzsKICAgIH0gZWxzZSBpZiAocGFyYW0gPT09ICdWMicpIHsKICAgICAgcmVzdWx0VmFsdWUgPSBmcm9tTTModjJCYXNlLCByZXN1bHRVbml0U2VsZWN0LnZhbHVlKTsKICAgICAgcmVzdWx0VW5pdExhYmVsID0gcmVzdWx0VW5pdFNlbGVjdC5vcHRpb25zW3Jlc3VsdFVuaXRTZWxlY3Quc2VsZWN0ZWRJbmRleF0udGV4dDsKICAgICAgcmVzdWx0TGFiZWxUZXh0ID0gJ9Ca0L7QvdC10YfQvdGL0Lkg0L7QsdGK0ZHQvCBW4oKCJzsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdFZhbHVlID0gZnJvbUtlbHZpbih0MkJhc2UsIHJlc3VsdFVuaXRTZWxlY3QudmFsdWUpOwogICAgICByZXN1bHRVbml0TGFiZWwgPSByZXN1bHRVbml0U2VsZWN0Lm9wdGlvbnNbcmVzdWx0VW5pdFNlbGVjdC5zZWxlY3RlZEluZGV4XS50ZXh0OwogICAgICByZXN1bHRMYWJlbFRleHQgPSAn0JrQvtC90LXRh9C90LDRjyDRgtC10LzQv9C10YDQsNGC0YPRgNCwIFTigoInOwogICAgfQoKICAgIGlmICghaXNGaW5pdGUocmVzdWx0VmFsdWUpKSB7CiAgICAgIHNob3dFcnJvcign0J7RiNC40LHQutCwINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0YDQtdC30YPQu9GM0YLQsNGC0LAuJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyDQntC60YDRg9Cz0LvQtdC90LjQtSDQtNC+INGA0LDQt9GD0LzQvdC+0LPQviDRh9C40YHQu9CwINC30L3QsNC60L7QsgogICAgcmVzdWx0VmFsdWUgPSBwYXJzZUZsb2F0KHJlc3VsdFZhbHVlLnRvUHJlY2lzaW9uKDgpKTsKCiAgICAvLyDQntGC0L7QsdGA0LDQttC10L3QuNC1INC+0YHQvdC+0LLQvdC+0LPQviDRgNC10LfRg9C70YzRgtCw0YLQsAogICAgcmVzdWx0Q2FyZC5pbm5lckhUTUwgPSAKICAgICAgJzxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LWdyaWQiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC1pdGVtIj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC12YWx1ZSI+JyArIHJlc3VsdFZhbHVlICsgJzwvZGl2PicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LWxhYmVsIj4nICsgcmVzdWx0TGFiZWxUZXh0ICsgJzwvZGl2PicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LXVuaXQiPicgKyByZXN1bHRVbml0TGFiZWwgKyAnPC9kaXY+JyArCiAgICAgICAgJzwvZGl2PicgKwogICAgICAnPC9kaXY+JzsKCiAgICAvLyDQntC/0YDQtdC00LXQu9GP0LXQvCDQtdC00LjQvdC40YbRiyDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQstGB0LXRhSDQv9Cw0YDQsNC80LXRgtGA0L7QsgogICAgdmFyIHAxVW5pdExhYmVsID0gcDFVbml0Lm9wdGlvbnNbcDFVbml0LnNlbGVjdGVkSW5kZXhdLnRleHQ7CiAgICB2YXIgdjFVbml0TGFiZWwgPSB2MVVuaXQub3B0aW9uc1t2MVVuaXQuc2VsZWN0ZWRJbmRleF0udGV4dDsKICAgIHZhciB0MVVuaXRMYWJlbCA9IHQxVW5pdC5vcHRpb25zW3QxVW5pdC5zZWxlY3RlZEluZGV4XS50ZXh0OwoKICAgIHZhciBwMlVuaXRWYWx1ZSwgcDJVbml0TGFiZWwsIHYyVW5pdFZhbHVlLCB2MlVuaXRMYWJlbCwgdDJVbml0VmFsdWUsIHQyVW5pdExhYmVsOwoKICAgIGlmIChwYXJhbSA9PT0gJ1AyJykgewogICAgICAvLyDQmNGJ0LXQvCBQMgogICAgICBwMlVuaXRWYWx1ZSA9IHJlc3VsdFVuaXRTZWxlY3QudmFsdWU7CiAgICAgIHAyVW5pdExhYmVsID0gcmVzdWx0VW5pdExhYmVsOwogICAgICB2MlVuaXRWYWx1ZSA9IGtub3duMVVuaXQudmFsdWU7IC8vIGtub3duMSA9IFYKICAgICAgdjJVbml0TGFiZWwgPSBrbm93bjFVbml0Lm9wdGlvbnNba25vd24xVW5pdC5zZWxlY3RlZEluZGV4XS50ZXh0OwogICAgICB0MlVuaXRWYWx1ZSA9IGtub3duMlVuaXQudmFsdWU7IC8vIGtub3duMiA9IFQKICAgICAgdDJVbml0TGFiZWwgPSBrbm93bjJVbml0Lm9wdGlvbnNba25vd24yVW5pdC5zZWxlY3RlZEluZGV4XS50ZXh0OwogICAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ1YyJykgewogICAgICB2MlVuaXRWYWx1ZSA9IHJlc3VsdFVuaXRTZWxlY3QudmFsdWU7CiAgICAgIHYyVW5pdExhYmVsID0gcmVzdWx0VW5pdExhYmVsOwogICAgICBwMlVuaXRWYWx1ZSA9IGtub3duMVVuaXQudmFsdWU7IC8vIGtub3duMSA9IFAKICAgICAgcDJVbml0TGFiZWwgPSBrbm93bjFVbml0Lm9wdGlvbnNba25vd24xVW5pdC5zZWxlY3RlZEluZGV4XS50ZXh0OwogICAgICB0MlVuaXRWYWx1ZSA9IGtub3duMlVuaXQudmFsdWU7IC8vIGtub3duMiA9IFQKICAgICAgdDJVbml0TGFiZWwgPSBrbm93bjJVbml0Lm9wdGlvbnNba25vd24yVW5pdC5zZWxlY3RlZEluZGV4XS50ZXh0OwogICAgfSBlbHNlIHsgLy8gVDIKICAgICAgdDJVbml0VmFsdWUgPSByZXN1bHRVbml0U2VsZWN0LnZhbHVlOwogICAgICB0MlVuaXRMYWJlbCA9IHJlc3VsdFVuaXRMYWJlbDsKICAgICAgcDJVbml0VmFsdWUgPSBrbm93bjFVbml0LnZhbHVlOyAvLyBrbm93bjEgPSBQCiAgICAgIHAyVW5pdExhYmVsID0ga25vd24xVW5pdC5vcHRpb25zW2tub3duMVVuaXQuc2VsZWN0ZWRJbmRleF0udGV4dDsKICAgICAgdjJVbml0VmFsdWUgPSBrbm93bjJVbml0LnZhbHVlOyAvLyBrbm93bjIgPSBWCiAgICAgIHYyVW5pdExhYmVsID0ga25vd24yVW5pdC5vcHRpb25zW2tub3duMlVuaXQuc2VsZWN0ZWRJbmRleF0udGV4dDsKICAgIH0KCiAgICAvLyDQmtC+0L3QstC10YDRgtCw0YbQuNGPINC60L7QvdC10YfQvdGL0YUg0L/QsNGA0LDQvNC10YLRgNC+0LIg0LIg0LjRhSDRgdC+0LHRgdGC0LLQtdC90L3Ri9C1INC10LTQuNC90LjRhtGLCiAgICB2YXIgcDJEaXNwbGF5ID0gZnJvbVBhKHAyQmFzZSwgcDJVbml0VmFsdWUpOwogICAgdmFyIHYyRGlzcGxheSA9IGZyb21NMyh2MkJhc2UsIHYyVW5pdFZhbHVlKTsKICAgIHZhciB0MkRpc3BsYXkgPSBmcm9tS2VsdmluKHQyQmFzZSwgdDJVbml0VmFsdWUpOwoKICAgIC8vINCd0LDRh9Cw0LvRjNC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg0LXQtNC40L3QuNGG0LDRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8KICAgIHZhciBwMURpc3BsYXkgPSBmcm9tUGEocDFCYXNlLCBwMVVuaXQudmFsdWUpOwogICAgdmFyIHYxRGlzcGxheSA9IGZyb21NMyh2MUJhc2UsIHYxVW5pdC52YWx1ZSk7CiAgICB2YXIgdDFEaXNwbGF5ID0gZnJvbUtlbHZpbih0MUJhc2UsIHQxVW5pdC52YWx1ZSk7CgogICAgLy8g0J7QutGA0YPQs9C70LXQvdC40LUKICAgIHAxRGlzcGxheSA9IHBhcnNlRmxvYXQocDFEaXNwbGF5LnRvUHJlY2lzaW9uKDYpKTsKICAgIHYxRGlzcGxheSA9IHBhcnNlRmxvYXQodjFEaXNwbGF5LnRvUHJlY2lzaW9uKDYpKTsKICAgIHQxRGlzcGxheSA9IHBhcnNlRmxvYXQodDFEaXNwbGF5LnRvUHJlY2lzaW9uKDYpKTsKICAgIHAyRGlzcGxheSA9IHBhcnNlRmxvYXQocDJEaXNwbGF5LnRvUHJlY2lzaW9uKDYpKTsKICAgIHYyRGlzcGxheSA9IHBhcnNlRmxvYXQodjJEaXNwbGF5LnRvUHJlY2lzaW9uKDYpKTsKICAgIHQyRGlzcGxheSA9IHBhcnNlRmxvYXQodDJEaXNwbGF5LnRvUHJlY2lzaW9uKDYpKTsKCiAgICBhbGxQYXJhbXNHcmlkLmlubmVySFRNTCA9IAogICAgICAnPGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtaXRlbSI+PGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtdmFsdWUiPicgKyBwMURpc3BsYXkgKyAnPC9kaXY+PGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtbGFiZWwiPlDigoE8L2Rpdj48ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC11bml0Ij4nICsgcDFVbml0TGFiZWwgKyAnPC9kaXY+PC9kaXY+JyArCiAgICAgICc8ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC1pdGVtIj48ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC12YWx1ZSI+JyArIHYxRGlzcGxheSArICc8L2Rpdj48ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC1sYWJlbCI+VuKCgTwvZGl2PjxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LXVuaXQiPicgKyB2MVVuaXRMYWJlbCArICc8L2Rpdj48L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LWl0ZW0iPjxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LXZhbHVlIj4nICsgdDFEaXNwbGF5ICsgJzwvZGl2PjxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LWxhYmVsIj5U4oKBPC9kaXY+PGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtdW5pdCI+JyArIHQxVW5pdExhYmVsICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtaXRlbSI+PGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtdmFsdWUiPicgKyBwMkRpc3BsYXkgKyAnPC9kaXY+PGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtbGFiZWwiPlDigoI8L2Rpdj48ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC11bml0Ij4nICsgcDJVbml0TGFiZWwgKyAnPC9kaXY+PC9kaXY+JyArCiAgICAgICc8ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC1pdGVtIj48ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC12YWx1ZSI+JyArIHYyRGlzcGxheSArICc8L2Rpdj48ZGl2IGNsYXNzPSJubi1nZW4tY2FsLXJlc3VsdC1sYWJlbCI+VuKCgjwvZGl2PjxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LXVuaXQiPicgKyB2MlVuaXRMYWJlbCArICc8L2Rpdj48L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LWl0ZW0iPjxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LXZhbHVlIj4nICsgdDJEaXNwbGF5ICsgJzwvZGl2PjxkaXYgY2xhc3M9Im5uLWdlbi1jYWwtcmVzdWx0LWxhYmVsIj5U4oKCPC9kaXY+PGRpdiBjbGFzcz0ibm4tZ2VuLWNhbC1yZXN1bHQtdW5pdCI+JyArIHQyVW5pdExhYmVsICsgJzwvZGl2PjwvZGl2Pic7CgogICAgcmVzdWx0RGV0YWlsQ2FyZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICB9CgogIGZ1bmN0aW9uIHJlc2V0QWxsKCkgewogICAgcDFWYWx1ZS52YWx1ZSA9ICcnOwogICAgdjFWYWx1ZS52YWx1ZSA9ICcnOwogICAgdDFWYWx1ZS52YWx1ZSA9ICcnOwogICAga25vd24xVmFsdWUudmFsdWUgPSAnJzsKICAgIGtub3duMlZhbHVlLnZhbHVlID0gJyc7CiAgICBwMVVuaXQudmFsdWUgPSAnYXRtJzsKICAgIHYxVW5pdC52YWx1ZSA9ICdsJzsKICAgIHQxVW5pdC52YWx1ZSA9ICdLJzsKICAgIGZpbmRQYXJhbS52YWx1ZSA9ICdQMic7CiAgICB1cGRhdGVLbm93bkZpZWxkcygpOwogICAgaGlkZUVycm9yKCk7CiAgICByZXN1bHRDYXJkLmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzogMjBweDsgY29sb3I6ICM5NGEzYjg7Ij7QktCy0LXQtNC40YLQtSDQtNCw0L3QvdGL0LUg0Lgg0L3QsNC20LzQuNGC0LUgwqvQoNCw0YHRgdGH0LjRgtCw0YLRjMK7PC9kaXY+JzsKICAgIHJlc3VsdERldGFpbENhcmQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICB9CgogIC8vINCe0LHRgNCw0LHQvtGC0YfQuNC60Lgg0YHQvtCx0YvRgtC40LkKICBmaW5kUGFyYW0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlS25vd25GaWVsZHMpOwogIGNhbGNCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxjdWxhdGUpOwogIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVzZXRBbGwpOwoKICAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjwogIHVwZGF0ZUtub3duRmllbGRzKCk7Cn0pKCk7Cg==