Калькулятор навески для анализа
Точный расчёт массы навески для приготовления растворов заданной концентрации и для планирования титриметрического анализа с учётом чистоты реактива и фактора эквивалентности.
0
Количество вещества
моль
⚠️ Техника безопасности: При работе с химическими веществами используйте средства индивидуальной защиты (халат, перчатки, очки). Взвешивание проводите на аналитических весах. Летучие и токсичные вещества обрабатывайте в вытяжном шкафу. Всегда консультируйтесь с паспортом безопасности вещества (SDS) перед началом работы.
Как пользоваться
1
Выберите тип расчёта: переключатель вверху формы — «Приготовление раствора» для расчёта навески по заданной концентрации или «Расчёт для титрования» для планирования аналитического определения.
2
Заполните поля: для приготовления раствора введите молярную массу (например, 58.44 для NaCl), концентрацию (0.1 моль/л), объём (250 мл) и чистоту (99.5%). Для титрования укажите параметры титранта, аналита и объёмы колбы с аликвотой.
3
Нажмите «Рассчитать»: результат появится в правой панели — масса навески в граммах, миллиграммах и количество вещества в молях. При ошибках ввода поля подсветятся красным сообщением.
4
Сбросьте при необходимости: кнопка «Сбросить» очищает все поля и результаты. Вы можете многократно менять параметры и пересчитывать — калькулятор работает без ограничений.
Примеры использования
Приготовление 0.1 М раствора хлорида натрия (NaCl)
Исходные данные: Молярная масса NaCl = 58.44 г/моль, требуемая концентрация = 0.1 моль/л, объём = 500 мл, чистота = 99.9%.
Результат: масса навески ≈ 2.925 г (2925 мг). Навеску количественно переносят в мерную колбу на 500 мл и доводят до метки дистиллированной водой.
Стандартизация NaOH щавелевой кислотой (H₂C₂O₄·2H₂O)
Исходные данные: Концентрация NaOH = 0.1 моль/л, ожидаемый объём титранта = 11 мл, молярная масса щавелевой кислоты = 126.07 г/моль, фактор эквивалентности = 2, колба = 100 мл, аликвота = 10 мл.
Результат: масса навески ≈ 0.6934 г (693.4 мг). Навеску растворяют в колбе на 100 мл, отбирают аликвоту 10 мл и титруют 0.1 М раствором NaOH с фенолфталеином.
Приготовление 0.02 М раствора перманганата калия (KMnO₄)
Исходные данные: Молярная масса KMnO₄ = 158.03 г/моль, концентрация = 0.02 моль/л, объём = 1000 мл, чистота = 99.0%.
Результат: масса навески ≈ 3.192 г (3192 мг). Раствор выдерживают в тёмной склянке 7–10 дней и стандартизуют по оксалату натрия перед использованием.
Важные нюансы
- Молярную массу всегда уточняйте по актуальной периодической таблице или паспорту вещества — разница в 0.01 г/моль даёт ощутимую погрешность при крупных навесках.
- Чистота, указанная на упаковке реактива (х.ч., ч.д.а., ос.ч.), критична для аналитической точности. Для технических продуктов чистота может колебаться — проводите перекристаллизацию или пересчёт.
- При титровании оптимальный объём титранта — 10–25 мл. Меньший объём увеличивает относительную ошибку бюретки, больший — перерасход реактива и неудобство.
- Фактор эквивалентности (f) для кислотно-основного титрования равен числу протонов в реакции; для окислительно-восстановительного — числу электронов; для комплексонометрического — стехиометрическому коэффициенту.
- Взвешивание навески менее 50 мг требует микроаналитических весов с дискретностью 0.01 мг. Всегда учитывайте класс точности используемого оборудования.
Источники данных
- NIST Chemistry WebBook — Национальный институт стандартов и технологий США: справочные данные по молярным массам и термодинамическим свойствам веществ (webbook.nist.gov/chemistry).
- IUPAC Gold Book — Международный союз теоретической и прикладной химии: определения фактора эквивалентности, молярности и стехиометрических соотношений (goldbook.iupac.org).
- CRC Handbook of Chemistry and Physics — авторитетный табличный справочник по физико-химическим константам, включая молярные массы и плотности растворов.
- Лурье Ю.Ю. «Справочник по аналитической химии» — базовое пособие для лабораторной практики в РФ, содержит формулы расчёта навесок и методики титрования.
- Государственная фармакопея РФ (ГФ РФ XIV) — официальные методики количественного определения лекарственных средств, включая расчёт навесок и титриметрические методы.
Калькулятор навески для анализа — незаменимый инструмент для химиков-аналитиков, лаборантов и студентов химических специальностей. Он позволяет быстро и точно рассчитать массу вещества, необходимую для приготовления раствора заданной молярной концентрации или для проведения титриметрического определения. Учитываются чистота реактива, фактор эквивалентности и соотношение объёмов колбы и аликвоты. Все расчёты основаны на фундаментальных законах стехиометрии и общепринятых справочных данных IUPAC и NIST.
CihmdW5jdGlvbigpewogICAgdmFyIGNhbGN1bGF0ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxjdWxhdGVCdG4nKTsKICAgIHZhciByZXNldEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNldEJ0bicpOwogICAgdmFyIG1vZGVSYWRpb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPSJjYWxjTW9kZSJdJyk7CiAgICB2YXIgc29sdXRpb25GaWVsZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29sdXRpb25GaWVsZHMnKTsKICAgIHZhciB0aXRyYXRpb25GaWVsZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGl0cmF0aW9uRmllbGRzJyk7CgogICAgLy8g0J/QvtC70Y8g0YDQtdC20LjQvNCwICLQn9GA0LjQs9C+0YLQvtCy0LvQtdC90LjQtSDRgNCw0YHRgtCy0L7RgNCwIgogICAgdmFyIG1vbGFyTWFzc0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vbGFyTWFzcycpOwogICAgdmFyIGNvbmNlbnRyYXRpb25JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25jZW50cmF0aW9uJyk7CiAgICB2YXIgdm9sdW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm9sdW1lJyk7CiAgICB2YXIgdm9sdW1lVW5pdFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2b2x1bWVVbml0Jyk7CiAgICB2YXIgcHVyaXR5SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVyaXR5Jyk7CgogICAgLy8g0J/QvtC70Y8g0YDQtdC20LjQvNCwICLQotC40YLRgNC+0LLQsNC90LjQtSIKICAgIHZhciB0aXRyYW50Q29uY0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpdHJhbnRDb25jJyk7CiAgICB2YXIgdGl0cmFudFZvbHVtZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpdHJhbnRWb2x1bWUnKTsKICAgIHZhciBhbmFseXRlTW9sYXJNYXNzSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5hbHl0ZU1vbGFyTWFzcycpOwogICAgdmFyIGZhY3RvcklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhY3RvcicpOwogICAgdmFyIGZsYXNrVm9sdW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmxhc2tWb2x1bWUnKTsKICAgIHZhciBhbGlxdW90Vm9sdW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxpcXVvdFZvbHVtZScpOwoKICAgIC8vINCg0LXQt9GD0LvRjNGC0LDRgtGLCiAgICB2YXIgcmVzdWx0TWFzc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdE1hc3MnKTsKICAgIHZhciByZXN1bHRNYXNzTWdFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRNYXNzTWcnKTsKICAgIHZhciByZXN1bHRNb2xlc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdE1vbGVzJyk7CiAgICB2YXIgcmVzdWx0Tm90ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdE5vdGUnKTsKCiAgICAvLyDQntGI0LjQsdC60LgKICAgIHZhciBlcnJNb2xhck1hc3NFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJNb2xhck1hc3MnKTsKICAgIHZhciBlcnJDb25jZW50cmF0aW9uRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyQ29uY2VudHJhdGlvbicpOwogICAgdmFyIGVyclZvbHVtZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VyclZvbHVtZScpOwogICAgdmFyIGVyclB1cml0eUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VyclB1cml0eScpOwogICAgdmFyIGVyclRpdHJhbnRDb25jRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyVGl0cmFudENvbmMnKTsKICAgIHZhciBlcnJUaXRyYW50Vm9sdW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyVGl0cmFudFZvbHVtZScpOwogICAgdmFyIGVyckFuYWx5dGVNb2xhck1hc3NFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJBbmFseXRlTW9sYXJNYXNzJyk7CiAgICB2YXIgZXJyRmFjdG9yRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyRmFjdG9yJyk7CiAgICB2YXIgZXJyRmxhc2tWb2x1bWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJGbGFza1ZvbHVtZScpOwogICAgdmFyIGVyckFsaXF1b3RWb2x1bWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJBbGlxdW90Vm9sdW1lJyk7CgogICAgZnVuY3Rpb24gZ2V0Q3VycmVudE1vZGUoKSB7CiAgICAgICAgdmFyIGNoZWNrZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJjYWxjTW9kZSJdOmNoZWNrZWQnKTsKICAgICAgICByZXR1cm4gY2hlY2tlZCA/IGNoZWNrZWQudmFsdWUgOiAnc29sdXRpb24nOwogICAgfQoKICAgIGZ1bmN0aW9uIHN3aXRjaE1vZGUobW9kZSkgewogICAgICAgIGlmIChtb2RlID09PSAnc29sdXRpb24nKSB7CiAgICAgICAgICAgIHNvbHV0aW9uRmllbGRzLmNsYXNzTGlzdC5yZW1vdmUoJ25uLWdlbi1jYWwtaGlkZGVuJyk7CiAgICAgICAgICAgIHRpdHJhdGlvbkZpZWxkcy5jbGFzc0xpc3QuYWRkKCdubi1nZW4tY2FsLWhpZGRlbicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNvbHV0aW9uRmllbGRzLmNsYXNzTGlzdC5hZGQoJ25uLWdlbi1jYWwtaGlkZGVuJyk7CiAgICAgICAgICAgIHRpdHJhdGlvbkZpZWxkcy5jbGFzc0xpc3QucmVtb3ZlKCdubi1nZW4tY2FsLWhpZGRlbicpOwogICAgICAgIH0KICAgICAgICBjbGVhckFsbEVycm9ycygpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFyQWxsRXJyb3JzKCkgewogICAgICAgIHZhciBlcnJvckVscyA9IFsKICAgICAgICAgICAgZXJyTW9sYXJNYXNzRWwsIGVyckNvbmNlbnRyYXRpb25FbCwgZXJyVm9sdW1lRWwsIGVyclB1cml0eUVsLAogICAgICAgICAgICBlcnJUaXRyYW50Q29uY0VsLCBlcnJUaXRyYW50Vm9sdW1lRWwsIGVyckFuYWx5dGVNb2xhck1hc3NFbCwKICAgICAgICAgICAgZXJyRmFjdG9yRWwsIGVyckZsYXNrVm9sdW1lRWwsIGVyckFsaXF1b3RWb2x1bWVFbAogICAgICAgIF07CiAgICAgICAgZXJyb3JFbHMuZm9yRWFjaChmdW5jdGlvbihlbCkgewogICAgICAgICAgICBpZiAoZWwpIGVsLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVzZXRSZXN1bHRzKCkgewogICAgICAgIHJlc3VsdE1hc3NFbC50ZXh0Q29udGVudCA9ICcwJzsKICAgICAgICByZXN1bHRNYXNzTWdFbC50ZXh0Q29udGVudCA9ICcwJzsKICAgICAgICByZXN1bHRNb2xlc0VsLnRleHRDb250ZW50ID0gJzAnOwogICAgICAgIHJlc3VsdE5vdGVFbC50ZXh0Q29udGVudCA9ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSwgZGVjaW1hbHMpIHsKICAgICAgICBpZiAoIWlzRmluaXRlKHZhbHVlKSB8fCBpc05hTih2YWx1ZSkpIHJldHVybiAn4oCUJzsKICAgICAgICBkZWNpbWFscyA9IGRlY2ltYWxzIHx8IDQ7CiAgICAgICAgdmFyIHJvdW5kZWQgPSBNYXRoLnJvdW5kKHZhbHVlICogTWF0aC5wb3coMTAsIGRlY2ltYWxzKSkgLyBNYXRoLnBvdygxMCwgZGVjaW1hbHMpOwogICAgICAgIHJldHVybiByb3VuZGVkLnRvRml4ZWQoZGVjaW1hbHMpOwogICAgfQoKICAgIGZ1bmN0aW9uIHZhbGlkYXRlUG9zaXRpdmVOdW1iZXIodmFsdWUsIGVycm9yRWwsIGZpZWxkTmFtZSkgewogICAgICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ9Cf0L7Qu9C1IMKrJyArIGZpZWxkTmFtZSArICfCuyDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyc7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQodmFsdWUpOwogICAgICAgIGlmIChpc05hTihudW0pKSB7CiAgICAgICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAn0J/QvtC70LUgwqsnICsgZmllbGROYW1lICsgJ8K7INC00L7Qu9C20L3QviDQsdGL0YLRjCDRh9C40YHQu9C+0LwnOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChudW0gPD0gMCkgewogICAgICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ9Cf0L7Qu9C1IMKrJyArIGZpZWxkTmFtZSArICfCuyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L/QvtC70L7QttC40YLQtdC70YzQvdGL0Lwg0YfQuNGB0LvQvtC8JzsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVQdXJpdHkodmFsdWUsIGVycm9yRWwpIHsKICAgICAgICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICfQn9C+0LvQtSDCq9Cn0LjRgdGC0L7RgtCwINCy0LXRidC10YHRgtCy0LDCuyDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyc7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQodmFsdWUpOwogICAgICAgIGlmIChpc05hTihudW0pKSB7CiAgICAgICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAn0J/QvtC70LUgwqvQp9C40YHRgtC+0YLQsCDQstC10YnQtdGB0YLQstCwwrsg0LTQvtC70LbQvdC+INCx0YvRgtGMINGH0LjRgdC70L7QvCc7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bSA8PSAwKSB7CiAgICAgICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAn0KfQuNGB0YLQvtGC0LAg0LTQvtC70LbQvdCwINCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvCc7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bSA+IDEwMCkgewogICAgICAgICAgICBlcnJvckVsLnRleHRDb250ZW50ID0gJ9Cn0LjRgdGC0L7RgtCwINC90LUg0LzQvtC20LXRgiDQv9GA0LXQstGL0YjQsNGC0YwgMTAwJSc7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICcnOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHZhbGlkYXRlQWxpcXVvdFZzRmxhc2soYWxpcXVvdFZhbHVlLCBmbGFza1ZhbHVlLCBlcnJvckVsKSB7CiAgICAgICAgdmFyIGFsaXF1b3ROdW0gPSBwYXJzZUZsb2F0KGFsaXF1b3RWYWx1ZSk7CiAgICAgICAgdmFyIGZsYXNrTnVtID0gcGFyc2VGbG9hdChmbGFza1ZhbHVlKTsKICAgICAgICBpZiAoIWlzTmFOKGFsaXF1b3ROdW0pICYmICFpc05hTihmbGFza051bSkgJiYgYWxpcXVvdE51bSA+IGZsYXNrTnVtKSB7CiAgICAgICAgICAgIGVycm9yRWwudGV4dENvbnRlbnQgPSAn0J7QsdGK0ZHQvCDQsNC70LjQutCy0L7RgtGLINC90LUg0LzQvtC20LXRgiDQv9GA0LXQstGL0YjQsNGC0Ywg0L7QsdGK0ZHQvCDQvNC10YDQvdC+0Lkg0LrQvtC70LHRiyc7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY3VsYXRlU29sdXRpb24oKSB7CiAgICAgICAgdmFyIG1vbGFyTWFzc1ZhbCA9IG1vbGFyTWFzc0lucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgY29uY2VudHJhdGlvblZhbCA9IGNvbmNlbnRyYXRpb25JbnB1dC52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIHZvbHVtZVZhbCA9IHZvbHVtZUlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgcHVyaXR5VmFsID0gcHVyaXR5SW5wdXQudmFsdWUudHJpbSgpOwogICAgICAgIHZhciB2b2x1bWVVbml0ID0gdm9sdW1lVW5pdFNlbGVjdC52YWx1ZTsKCiAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTsKICAgICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmVOdW1iZXIobW9sYXJNYXNzVmFsLCBlcnJNb2xhck1hc3NFbCwgJ9Cc0L7Qu9GP0YDQvdCw0Y8g0LzQsNGB0YHQsCDQstC10YnQtdGB0YLQstCwJykpIHZhbGlkID0gZmFsc2U7CiAgICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlTnVtYmVyKGNvbmNlbnRyYXRpb25WYWwsIGVyckNvbmNlbnRyYXRpb25FbCwgJ9Ci0YDQtdCx0YPQtdC80LDRjyDQutC+0L3RhtC10L3RgtGA0LDRhtC40Y8nKSkgdmFsaWQgPSBmYWxzZTsKICAgICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmVOdW1iZXIodm9sdW1lVmFsLCBlcnJWb2x1bWVFbCwgJ9Ce0LHRitGR0Lwg0YDQsNGB0YLQstC+0YDQsCcpKSB2YWxpZCA9IGZhbHNlOwogICAgICAgIGlmICghdmFsaWRhdGVQdXJpdHkocHVyaXR5VmFsLCBlcnJQdXJpdHlFbCkpIHZhbGlkID0gZmFsc2U7CgogICAgICAgIGlmICghdmFsaWQpIHsKICAgICAgICAgICAgcmVzZXRSZXN1bHRzKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBNID0gcGFyc2VGbG9hdChtb2xhck1hc3NWYWwpOwogICAgICAgIHZhciBDID0gcGFyc2VGbG9hdChjb25jZW50cmF0aW9uVmFsKTsKICAgICAgICB2YXIgViA9IHBhcnNlRmxvYXQodm9sdW1lVmFsKTsKICAgICAgICB2YXIgUCA9IHBhcnNlRmxvYXQocHVyaXR5VmFsKTsKICAgICAgICB2YXIgVl9sID0gdm9sdW1lVW5pdCA9PT0gJ21sJyA/IFYgLyAxMDAwIDogVjsKCiAgICAgICAgdmFyIG1hc3MgPSAoQyAqIFZfbCAqIE0pIC8gKFAgLyAxMDApOwogICAgICAgIHZhciBtYXNzTWcgPSBtYXNzICogMTAwMDsKICAgICAgICB2YXIgbW9sZXMgPSBDICogVl9sOwoKICAgICAgICByZXN1bHRNYXNzRWwudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIobWFzcyk7CiAgICAgICAgcmVzdWx0TWFzc01nRWwudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIobWFzc01nKTsKICAgICAgICByZXN1bHRNb2xlc0VsLnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKG1vbGVzKTsKICAgICAgICByZXN1bHROb3RlRWwudGV4dENvbnRlbnQgPSAn0J3QsNCy0LXRgdC60LAg0LTQu9GPINC/0YDQuNCz0L7RgtC+0LLQu9C10L3QuNGPICcgKyBmb3JtYXROdW1iZXIoVikgKyAnICcgKyAodm9sdW1lVW5pdCA9PT0gJ21sJyA/ICfQvNC7JyA6ICfQuycpICsgJyDRgNCw0YHRgtCy0L7RgNCwINGBINC60L7QvdGG0LXQvdGC0YDQsNGG0LjQtdC5ICcgKyBmb3JtYXROdW1iZXIoQykgKyAnINC80L7Qu9GML9C7Lic7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY3VsYXRlVGl0cmF0aW9uKCkgewogICAgICAgIHZhciB0aXRyYW50Q29uY1ZhbCA9IHRpdHJhbnRDb25jSW5wdXQudmFsdWUudHJpbSgpOwogICAgICAgIHZhciB0aXRyYW50Vm9sdW1lVmFsID0gdGl0cmFudFZvbHVtZUlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgYW5hbHl0ZU1vbGFyTWFzc1ZhbCA9IGFuYWx5dGVNb2xhck1hc3NJbnB1dC52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIGZhY3RvclZhbCA9IGZhY3RvcklucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgZmxhc2tWb2x1bWVWYWwgPSBmbGFza1ZvbHVtZUlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgYWxpcXVvdFZvbHVtZVZhbCA9IGFsaXF1b3RWb2x1bWVJbnB1dC52YWx1ZS50cmltKCk7CgogICAgICAgIHZhciB2YWxpZCA9IHRydWU7CiAgICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlTnVtYmVyKHRpdHJhbnRDb25jVmFsLCBlcnJUaXRyYW50Q29uY0VsLCAn0JrQvtC90YbQtdC90YLRgNCw0YbQuNGPINGC0LjRgtGA0LDQvdGC0LAnKSkgdmFsaWQgPSBmYWxzZTsKICAgICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmVOdW1iZXIodGl0cmFudFZvbHVtZVZhbCwgZXJyVGl0cmFudFZvbHVtZUVsLCAn0J7QttC40LTQsNC10LzRi9C5INC+0LHRitGR0Lwg0YLQuNGC0YDQsNC90YLQsCcpKSB2YWxpZCA9IGZhbHNlOwogICAgICAgIGlmICghdmFsaWRhdGVQb3NpdGl2ZU51bWJlcihhbmFseXRlTW9sYXJNYXNzVmFsLCBlcnJBbmFseXRlTW9sYXJNYXNzRWwsICfQnNC+0LvRj9GA0L3QsNGPINC80LDRgdGB0LAg0LDQvdCw0LvQuNGC0LAnKSkgdmFsaWQgPSBmYWxzZTsKICAgICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmVOdW1iZXIoZmFjdG9yVmFsLCBlcnJGYWN0b3JFbCwgJ9Ck0LDQutGC0L7RgCDRjdC60LLQuNCy0LDQu9C10L3RgtC90L7RgdGC0LgnKSkgdmFsaWQgPSBmYWxzZTsKICAgICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmVOdW1iZXIoZmxhc2tWb2x1bWVWYWwsIGVyckZsYXNrVm9sdW1lRWwsICfQntCx0YrRkdC8INC80LXRgNC90L7QuSDQutC+0LvQsdGLJykpIHZhbGlkID0gZmFsc2U7CiAgICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlTnVtYmVyKGFsaXF1b3RWb2x1bWVWYWwsIGVyckFsaXF1b3RWb2x1bWVFbCwgJ9Ce0LHRitGR0Lwg0LDQu9C40LrQstC+0YLRiycpKSB2YWxpZCA9IGZhbHNlOwoKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUFsaXF1b3RWc0ZsYXNrKGFsaXF1b3RWb2x1bWVWYWwsIGZsYXNrVm9sdW1lVmFsLCBlcnJBbGlxdW90Vm9sdW1lRWwpKSB2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICByZXNldFJlc3VsdHMoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIENfdCA9IHBhcnNlRmxvYXQodGl0cmFudENvbmNWYWwpOwogICAgICAgIHZhciBWX3QgPSBwYXJzZUZsb2F0KHRpdHJhbnRWb2x1bWVWYWwpOwogICAgICAgIHZhciBNX2EgPSBwYXJzZUZsb2F0KGFuYWx5dGVNb2xhck1hc3NWYWwpOwogICAgICAgIHZhciBmID0gcGFyc2VGbG9hdChmYWN0b3JWYWwpOwogICAgICAgIHZhciBWX2sgPSBwYXJzZUZsb2F0KGZsYXNrVm9sdW1lVmFsKTsKICAgICAgICB2YXIgVl9hID0gcGFyc2VGbG9hdChhbGlxdW90Vm9sdW1lVmFsKTsKCiAgICAgICAgdmFyIG1hc3MgPSAoQ190ICogVl90ICogTV9hIC8gZikgKiAoVl9rIC8gVl9hKSAvIDEwMDA7CiAgICAgICAgdmFyIG1hc3NNZyA9IG1hc3MgKiAxMDAwOwogICAgICAgIHZhciBtb2xlcyA9IG1hc3MgLyBNX2E7CgogICAgICAgIHJlc3VsdE1hc3NFbC50ZXh0Q29udGVudCA9IGZvcm1hdE51bWJlcihtYXNzKTsKICAgICAgICByZXN1bHRNYXNzTWdFbC50ZXh0Q29udGVudCA9IGZvcm1hdE51bWJlcihtYXNzTWcpOwogICAgICAgIHJlc3VsdE1vbGVzRWwudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIobW9sZXMpOwogICAgICAgIHJlc3VsdE5vdGVFbC50ZXh0Q29udGVudCA9ICfQndCw0LLQtdGB0LrQsCDQtNC70Y8g0YLQuNGC0YDQvtCy0LDQvdC40Y86INC60L7Qu9Cx0LAgJyArIGZvcm1hdE51bWJlcihWX2spICsgJyDQvNC7LCDQsNC70LjQutCy0L7RgtCwICcgKyBmb3JtYXROdW1iZXIoVl9hKSArICcg0LzQuywg0L7QttC40LTQsNC10LzRi9C5INC+0LHRitGR0Lwg0YLQuNGC0YDQsNC90YLQsCAnICsgZm9ybWF0TnVtYmVyKFZfdCkgKyAnINC80LsuJzsKICAgIH0KCiAgICBmdW5jdGlvbiBoYW5kbGVDYWxjdWxhdGUoKSB7CiAgICAgICAgY2xlYXJBbGxFcnJvcnMoKTsKICAgICAgICB2YXIgbW9kZSA9IGdldEN1cnJlbnRNb2RlKCk7CiAgICAgICAgaWYgKG1vZGUgPT09ICdzb2x1dGlvbicpIHsKICAgICAgICAgICAgY2FsY3VsYXRlU29sdXRpb24oKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjYWxjdWxhdGVUaXRyYXRpb24oKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7CiAgICAgICAgbW9sYXJNYXNzSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICBjb25jZW50cmF0aW9uSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICB2b2x1bWVJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIHZvbHVtZVVuaXRTZWxlY3QudmFsdWUgPSAnbWwnOwogICAgICAgIHB1cml0eUlucHV0LnZhbHVlID0gJzEwMCc7CiAgICAgICAgdGl0cmFudENvbmNJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIHRpdHJhbnRWb2x1bWVJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIGFuYWx5dGVNb2xhck1hc3NJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIGZhY3RvcklucHV0LnZhbHVlID0gJzEnOwogICAgICAgIGZsYXNrVm9sdW1lSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICBhbGlxdW90Vm9sdW1lSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICBjbGVhckFsbEVycm9ycygpOwogICAgICAgIHJlc2V0UmVzdWx0cygpOwogICAgfQoKICAgIGNhbGN1bGF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNhbGN1bGF0ZSk7CiAgICByZXNldEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVJlc2V0KTsKCiAgICBtb2RlUmFkaW9zLmZvckVhY2goZnVuY3Rpb24ocmFkaW8pIHsKICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgY2xlYXJBbGxFcnJvcnMoKTsKICAgICAgICAgICAgcmVzZXRSZXN1bHRzKCk7CiAgICAgICAgICAgIHN3aXRjaE1vZGUodGhpcy52YWx1ZSk7CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICBzd2l0Y2hNb2RlKGdldEN1cnJlbnRNb2RlKCkpOwogICAgcmVzZXRSZXN1bHRzKCk7Cn0pKCk7Cg==