Калькулятор периметра участка
Быстрый расчёт периметра и необходимых материалов для ограждения участка любой формы
Результат расчёта
0
Длина ограждения
м (с вычетом проёмов)
0
Примерное количество столбов
шт. (шаг 2.5 м)
0
Профлист / секции (длина 2 м)
шт. (ориентировочно)
Как пользоваться калькулятором
1
Выберите форму участка — прямоугольник, треугольник или многоугольник с любым количеством сторон. Для неправильной формы измерьте все стороны рулеткой и сложите в уме.
2
Введите длины всех сторон в метрах. Для прямоугольника укажите длину и ширину, для треугольника — три стороны. Если участок сложный, добавляйте стороны кнопкой «Добавить сторону».
3
Укажите суммарную ширину ворот и калиток. Это вычтется из периметра, чтобы получить реальную длину ограждения. Если проёмов нет, оставьте ноль.
4
Нажмите «Рассчитать» — вы сразу увидите периметр, длину забора, примерное число столбов и количество профлиста. Запас 5–10% на подрезку и неровности рельефа закладывайте отдельно.
Примеры расчёта
Прямоугольный участок 6 соток
20 × 30 м. Периметр = (20+30)×2 = 100 м. Ворота 4 м и калитка 1 м. Длина забора = 100 – 5 = 95 м. Столбов с шагом 2.5 м ≈ 39 штук. Листов профнастила длиной 2 м ≈ 95 / 2 = 48 листов.
Треугольный участок
Стороны 42, 35 и 28 м. Периметр = 42+35+28 = 105 м. Без проёмов. Столбов ≈ 105 / 2.5 = 42 шт. Секций штакетника по 1.5 м ≈ 70 шт. (С запасом 5% — 74 шт.)
Сложный пятиугольный участок
Стороны: 18, 22, 27, 15, 20 м. Сумма = 102 м. Ворота 3.5 м, калитка 1 м. Длина забора = 102 – 4.5 = 97.5 м. Для точного расчёта материалов на нестандартных углах добавьте запас 10–15%.
Формулы расчёта
Периметр прямоугольника = (Длина + Ширина) × 2
Периметр треугольника = Сторона A + Сторона B + Сторона C
Периметр многоугольника = Сумма длин всех сторон
Длина ограждения = Периметр – Ширина ворот и калиток
Количество столбов ≈ Длина ограждения / Шаг между столбами (обычно 2.0–3.0 м)
Количество листов/секций ≈ Длина ограждения / Ширина одного элемента
Нормы и ориентиры
- Шаг столбов: для профнастила и штакетника — 2.0–2.5 м, для сетки-рабицы — 2.5–3.0 м, для тяжёлых бетонных заборов — 2.0 м.
- Ширина профлиста: полезная (рабочая) ширина листа С8 и С10 — 1.15–1.20 м, полная — около 1.25 м. Учитывайте только полезную ширину при расчёте количества.
- Высота забора: стандартные варианты — 1.5, 1.8, 2.0, 2.5 м. Выбирайте исходя из назначения: декоративный — 1.2–1.5 м, от животных — 1.8 м, приватность и безопасность — 2.0–2.5 м.
- Ворота и калитки: стандартная ширина распашных ворот — 3.5–4.0 м, калитки — 0.9–1.2 м. Закладывайте точные размеры до начала работ.
- Запас материала: на подрезку, неровности рельефа и углы добавляйте 5–10% к метражу профлиста и штакетника. Для сложного рельефа с перепадами высот — до 15%.
Что влияет на результат
- Точность измерений: чем точнее вы снимете размеры всех сторон, тем ближе расчёт к реальности. Используйте лазерный дальномер или рулетку не менее 30 м.
- Рельеф участка: на склоне длина забора по земле может быть больше, чем по прямой. Учитывайте уклон — горизонтальное проложение всегда короче фактической длины ската.
- Форма углов: нестандартные углы и изгибы требуют подрезки листов и увеличивают отходы. Заложите дополнительные 5–10% материала.
- Тип ограждения: массивные бетонные секции монтируются с минимальным зазором, тогда как сетка-рабица и штакетник могут потребовать учёта нахлёстов и натяжных элементов.
- Наличие проёмов: чем больше ворот и калиток, тем меньше материала для глухого забора, но требуется дополнительный крепёж, петли и закладные для столбов проёмов.
- Грунт и фундамент: тип почвы влияет на глубину и способ установки столбов, что косвенно меняет количество бетона и длину опор, особенно для тяжёлых заборов.
Важные нюансы
- Расчёт носит ориентировочный характер. Для точной сметы составьте план участка с привязкой к углам и перепадам высот.
- При заказе профлиста всегда уточняйте полезную ширину у конкретного производителя. Она может отличаться на 2–5 см от усреднённых значений.
- Столбы для ворот и калиток берутся большего сечения и заглубляются глубже обычных — обычно на 30–50 см ниже глубины промерзания.
- Если участок граничит с соседними, обязательно согласуйте границы и тип ограждения до начала строительства, чтобы избежать споров.
- Для заборов выше 2 метров в большинстве регионов России требуется разрешение местной администрации. Уточните нормы перед покупкой материалов.
- При расчёте периметра для посадки живой изгороди учитывайте рекомендуемый шаг растений: туя — 0.5–0.7 м, пузыреплодник — 0.5–1.0 м, кизильник — 0.4–0.6 м.
Частые ошибки
- Считать только периметр без вычета проёмов: ворота и калитка могут занимать 4–6 метров, что ощутимо меняет количество заборных секций.
- Забывать про запас на отходы: 5–10% — это не перестраховка, а реальная необходимость при резке и подгонке листов на неровной местности.
- Использовать полную, а не рабочую ширину листа: так можно ошибиться на 1–2 листа на каждые 10 метров забора.
- Одинаковый шаг столбов для всех типов ограждений: лёгкая сетка держится на столбах через 3 м, а тяжёлый профлист при шаге 3 м начнёт «парусить» и деформироваться.
- Игнорировать геометрию треугольника: при вводе трёх сторон обязательно проверяйте, что сумма двух любых сторон больше третьей. Иначе такого участка не существует.
- Измерять стороны «на глаз»: ошибка в 1–2 метра на каждой стороне участка в 10 соток может привести к недостаче или переплате за 5–8 лишних листов.
Ответы на частые вопросы
- Можно ли рассчитать расход материалов для забора любой формы? Да, калькулятор считает периметр, а дальше переводит метры в количество столбов и листов по стандартным формулам. Для сложных форм заложите запас 10–15%.
- Какой шаг столбов самый надёжный? Оптимальный шаг для большинства заборов — 2.5 метра. Это обеспечивает жёсткость, удобство монтажа листов стандартной длины и экономию на столбах.
- Включает ли расчёт стоимость материалов? Нет, текущая версия показывает метраж и количество штук. Для расчёта бюджета умножьте полученные значения на цену выбранного профлиста, столба и крепежа в вашем регионе.
- Как быть с участком сложной формы с изгибами? Разбейте периметр на прямые отрезки, измерьте каждый и введите как отдельную сторону многоугольника. Чем больше точек — тем точнее периметр.
- Нужно ли закладывать бетон для столбов в калькуляторе? Калькулятор не считает бетон, но можно прикинуть: на столб диаметром 60 мм при глубине 80 см уходит примерно 0.5 мешка цемента (25 кг). Умножьте на количество столбов.
- Зависит ли длина забора от высоты? Нет, периметр участка не зависит от высоты ограждения. Высота влияет только на стоимость и количество расходников: чем выше забор, тем больше лаг и саморезов потребуется.
Источники и справочные данные
- Справочные нормы расхода материалов основаны на стандартах производителей профлиста (ГОСТ 24045-2016) и рекомендациях по монтажу ограждений.
- Шаг столбов и глубина установки — усреднённые значения из практики заборного строительства в Центральной России с учётом промерзания грунта 1.2–1.4 м.
- Размеры ворот и калиток — типовые решения для частных домовладений, соответствующие СП 4.13130.2013 по противопожарным нормам.
- Коэффициенты запаса 5–15% обоснованы технологическими отходами при резке и подгонке материалов в условиях ручного монтажа.
- Для точной сметы всегда используйте рабочие чертежи, план участка и спецификации конкретного производителя ограждающих конструкций.
Калькулятор периметра участка помогает быстро определить точную длину будущего ограждения и прикинуть количество основных материалов: столбов, профлиста или секций штакетника. Достаточно ввести размеры сторон и ширину проёмов — и вы получите периметр в метрах, длину забора с вычетом ворот, а также ориентировочное число опор. Инструмент подходит для садовых участков, дач, частных домов и любой территории, где нужно рассчитать периметр под строительство ограждения. Используйте результаты для планирования бюджета, заказа материалов и обсуждения с подрядчиками.
CiAgKGZ1bmN0aW9uKCkgewogICAgdmFyIHNoYXBlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1zaGFwZScpOwogICAgdmFyIHJlY3RhbmdsZVJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNoYXBlPSJyZWN0YW5nbGUiXScpOwogICAgdmFyIHRyaWFuZ2xlUm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtc2hhcGU9InRyaWFuZ2xlIl0nKTsKICAgIHZhciBwb2x5Z29uQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1wb2x5Z29uLWNvbnRhaW5lcicpOwogICAgdmFyIHBvbHlnb25GaWVsZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm4tZ2VuLXBvbHlnb24tZmllbGRzJyk7CiAgICB2YXIgYWRkU2lkZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdubi1nZW4tYWRkLXNpZGUtYnRuJyk7CiAgICB2YXIgY2FsY3VsYXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1jYWxjdWxhdGUtYnRuJyk7CiAgICB2YXIgcmVzZXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm4tZ2VuLXJlc2V0LWJ0bicpOwogICAgdmFyIHJlc3VsdENhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm4tZ2VuLXJlc3VsdC1jYXJkJyk7CiAgICB2YXIgZXJyb3JTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1lcnJvcicpOwoKICAgIHZhciBsZW5ndGhJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdubi1nZW4tbGVuZ3RoJyk7CiAgICB2YXIgd2lkdGhJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdubi1nZW4td2lkdGgnKTsKICAgIHZhciBzaWRlQSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdubi1nZW4tc2lkZS1hJyk7CiAgICB2YXIgc2lkZUIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm4tZ2VuLXNpZGUtYicpOwogICAgdmFyIHNpZGVDID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1zaWRlLWMnKTsKICAgIHZhciBnYXRlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm4tZ2VuLWdhdGUtd2lkdGgnKTsKCiAgICB2YXIgcGVyaW1ldGVyVmFsdWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdubi1nZW4tcGVyaW1ldGVyLXZhbHVlJyk7CiAgICB2YXIgZmVuY2VMZW5ndGhWYWx1ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1mZW5jZS1sZW5ndGgtdmFsdWUnKTsKICAgIHZhciBwb3N0c1ZhbHVlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm4tZ2VuLXBvc3RzLXZhbHVlJyk7CiAgICB2YXIgc2hlZXRzVmFsdWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdubi1nZW4tc2hlZXRzLXZhbHVlJyk7CiAgICB2YXIgcmVzdWx0Tm90ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1yZXN1bHQtbm90ZScpOwoKICAgIHZhciBjdXJyZW50U2hhcGUgPSAncmVjdGFuZ2xlJzsKICAgIHZhciBzaWRlQ291bnRlciA9IDQ7IC8vINC90LDRh9Cw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0L7RgNC+0L0g0LTQu9GPINC80L3QvtCz0L7Rg9Cz0L7Qu9GM0L3QuNC60LAKCiAgICBmdW5jdGlvbiB1cGRhdGVTaGFwZVZpc2liaWxpdHkoKSB7CiAgICAgIGN1cnJlbnRTaGFwZSA9IHNoYXBlU2VsZWN0LnZhbHVlOwogICAgICByZWN0YW5nbGVSb3cuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnRTaGFwZSA9PT0gJ3JlY3RhbmdsZScgPyAnZmxleCcgOiAnbm9uZSc7CiAgICAgIHRyaWFuZ2xlUm93LnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50U2hhcGUgPT09ICd0cmlhbmdsZScgPyAnZmxleCcgOiAnbm9uZSc7CiAgICAgIHBvbHlnb25Db250YWluZXIuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnRTaGFwZSA9PT0gJ3BvbHlnb24nID8gJ2Jsb2NrJyA6ICdub25lJzsKICAgICAgaGlkZUVycm9yKCk7CiAgICAgIHJlc3VsdENhcmQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIH0KCiAgICBzaGFwZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVTaGFwZVZpc2liaWxpdHkpOwoKICAgIGZ1bmN0aW9uIGdldFNpZGVJbnB1dHMoKSB7CiAgICAgIHJldHVybiBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ubi1nZW4tcG9seWdvbi1zaWRlJykpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZFNpZGVGaWVsZCgpIHsKICAgICAgc2lkZUNvdW50ZXIrKzsKICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBkaXYuY2xhc3NOYW1lID0gJ25uLWdlbi1jYWwtc2lkZS1lbnRyeSc7CiAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CiAgICAgIGxhYmVsLmNsYXNzTmFtZSA9ICdubi1nZW4tY2FsLWxhYmVsJzsKICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSAn0KHRgtC+0YDQvtC90LAgJyArIHNpZGVDb3VudGVyICsgJyAo0LwpJzsKICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgaW5wdXQudHlwZSA9ICdudW1iZXInOwogICAgICBpbnB1dC5jbGFzc05hbWUgPSAnbm4tZ2VuLWNhbC1maWVsZCBubi1nZW4tcG9seWdvbi1zaWRlJzsKICAgICAgaW5wdXQuc3RlcCA9ICcwLjAxJzsKICAgICAgaW5wdXQubWluID0gJzAuMDEnOwogICAgICBpbnB1dC5wbGFjZWhvbGRlciA9ICfQlNC70LjQvdCwINCyINC80LXRgtGA0LDRhSc7CiAgICAgIGRpdi5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgIGRpdi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgIHBvbHlnb25GaWVsZHMuYXBwZW5kQ2hpbGQoZGl2KTsKICAgIH0KCiAgICBhZGRTaWRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWRkU2lkZUZpZWxkKTsKCiAgICBmdW5jdGlvbiBoaWRlRXJyb3IoKSB7CiAgICAgIGVycm9yU3Bhbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBlcnJvclNwYW4udGV4dENvbnRlbnQgPSAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IobWVzc2FnZSkgewogICAgICBlcnJvclNwYW4udGV4dENvbnRlbnQgPSBtZXNzYWdlOwogICAgICBlcnJvclNwYW4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VQb3NpdGl2ZUZsb2F0KHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHJldHVybiBOYU47CiAgICAgIHZhciBudW0gPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgaWYgKGlzTmFOKG51bSkgfHwgbnVtIDw9IDApIHJldHVybiBOYU47CiAgICAgIHJldHVybiBudW07CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UG9seWdvblNpZGVzKCkgewogICAgICB2YXIgaW5wdXRzID0gZ2V0U2lkZUlucHV0cygpOwogICAgICB2YXIgc2lkZXMgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgdmFsID0gcGFyc2VQb3NpdGl2ZUZsb2F0KGlucHV0c1tpXS52YWx1ZSk7CiAgICAgICAgaWYgKGlzTmFOKHZhbCkpIHJldHVybiBudWxsOwogICAgICAgIHNpZGVzLnB1c2godmFsKTsKICAgICAgfQogICAgICByZXR1cm4gc2lkZXM7CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVQb2x5Z29uKHNpZGVzKSB7CiAgICAgIGlmIChzaWRlcy5sZW5ndGggPCAzKSByZXR1cm4gJ9Cc0L3QvtCz0L7Rg9Cz0L7Qu9GM0L3QuNC6INC00L7Qu9C20LXQvSDQuNC80LXRgtGMINC80LjQvdC40LzRg9C8IDMg0YHRgtC+0YDQvtC90YsuJzsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWRlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzdW1PdGhlcnMgPSAwOwogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2lkZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIGlmIChpICE9PSBqKSBzdW1PdGhlcnMgKz0gc2lkZXNbal07CiAgICAgICAgfQogICAgICAgIGlmIChzaWRlc1tpXSA+PSBzdW1PdGhlcnMpIHsKICAgICAgICAgIHJldHVybiAn0KHRgtC+0YDQvtC90LAgJyArIChpICsgMSkgKyAnINGB0LvQuNGI0LrQvtC8INCy0LXQu9C40LrQsDog0L7QvdCwINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQvNC10L3RjNGI0LUg0YHRg9C80LzRiyDQstGB0LXRhSDQvtGB0YLQsNC70YzQvdGL0YUg0YHRgtC+0YDQvtC9Lic7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVBlcmltZXRlcigpIHsKICAgICAgaGlkZUVycm9yKCk7CiAgICAgIHZhciBwZXJpbWV0ZXIgPSAwOwogICAgICB2YXIgZ2F0ZVdpZHRoID0gcGFyc2VGbG9hdChnYXRlSW5wdXQudmFsdWUpOwogICAgICBpZiAoaXNOYU4oZ2F0ZVdpZHRoKSB8fCBnYXRlV2lkdGggPCAwKSB7CiAgICAgICAgZ2F0ZVdpZHRoID0gMDsKICAgICAgfQoKICAgICAgaWYgKGN1cnJlbnRTaGFwZSA9PT0gJ3JlY3RhbmdsZScpIHsKICAgICAgICB2YXIgbGVuZ3RoVmFsID0gcGFyc2VQb3NpdGl2ZUZsb2F0KGxlbmd0aElucHV0LnZhbHVlKTsKICAgICAgICB2YXIgd2lkdGhWYWwgPSBwYXJzZVBvc2l0aXZlRmxvYXQod2lkdGhJbnB1dC52YWx1ZSk7CiAgICAgICAgaWYgKGlzTmFOKGxlbmd0aFZhbCkgfHwgaXNOYU4od2lkdGhWYWwpKSB7CiAgICAgICAgICBzaG93RXJyb3IoJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQutC+0YDRgNC10LrRgtC90YvQtSDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQtSDQt9C90LDRh9C10L3QuNGPINC00LvRjyDQtNC70LjQvdGLINC4INGI0LjRgNC40L3Riy4nKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBwZXJpbWV0ZXIgPSAobGVuZ3RoVmFsICsgd2lkdGhWYWwpICogMjsKICAgICAgfSBlbHNlIGlmIChjdXJyZW50U2hhcGUgPT09ICd0cmlhbmdsZScpIHsKICAgICAgICB2YXIgYSA9IHBhcnNlUG9zaXRpdmVGbG9hdChzaWRlQS52YWx1ZSk7CiAgICAgICAgdmFyIGIgPSBwYXJzZVBvc2l0aXZlRmxvYXQoc2lkZUIudmFsdWUpOwogICAgICAgIHZhciBjID0gcGFyc2VQb3NpdGl2ZUZsb2F0KHNpZGVDLnZhbHVlKTsKICAgICAgICBpZiAoaXNOYU4oYSkgfHwgaXNOYU4oYikgfHwgaXNOYU4oYykpIHsKICAgICAgICAgIHNob3dFcnJvcign0JLQstC10LTQuNGC0LUg0LLRgdC1INGC0YDQuCDRgdGC0L7RgNC+0L3RiyDRgtGA0LXRg9Cz0L7Qu9GM0L3QuNC60LAg0L/QvtC70L7QttC40YLQtdC70YzQvdGL0LzQuCDRh9C40YHQu9Cw0LzQuC4nKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoYSArIGIgPD0gYyB8fCBhICsgYyA8PSBiIHx8IGIgKyBjIDw9IGEpIHsKICAgICAgICAgIHNob3dFcnJvcign0KLRgNC10YPQs9C+0LvRjNC90LjQuiDRgSDRgtCw0LrQuNC80Lgg0YHRgtC+0YDQvtC90LDQvNC4INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YI6INGB0YPQvNC80LAg0LTQstGD0YUg0LvRjtCx0YvRhSDRgdGC0L7RgNC+0L0g0LTQvtC70LbQvdCwINCx0YvRgtGMINCx0L7Qu9GM0YjQtSDRgtGA0LXRgtGM0LXQuS4nKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBwZXJpbWV0ZXIgPSBhICsgYiArIGM7CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFNoYXBlID09PSAncG9seWdvbicpIHsKICAgICAgICB2YXIgc2lkZXMgPSBnZXRQb2x5Z29uU2lkZXMoKTsKICAgICAgICBpZiAoIXNpZGVzKSB7CiAgICAgICAgICBzaG93RXJyb3IoJ9CS0YHQtSDRgdGC0L7RgNC+0L3RiyDQvNC90L7Qs9C+0YPQs9C+0LvRjNC90LjQutCwINC00L7Qu9C20L3RiyDQsdGL0YLRjCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvNC4INGH0LjRgdC70LDQvNC4LicpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHZhciB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZVBvbHlnb24oc2lkZXMpOwogICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHsKICAgICAgICAgIHNob3dFcnJvcih2YWxpZGF0aW9uRXJyb3IpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHBlcmltZXRlciA9IHNpZGVzLnJlZHVjZShmdW5jdGlvbihzdW0sIHMpIHsgcmV0dXJuIHN1bSArIHM7IH0sIDApOwogICAgICB9CgogICAgICByZXR1cm4geyBwZXJpbWV0ZXI6IHBlcmltZXRlciwgZ2F0ZVdpZHRoOiBnYXRlV2lkdGggfTsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXNwbGF5UmVzdWx0cyhkYXRhKSB7CiAgICAgIHZhciBwZXJpbWV0ZXIgPSBkYXRhLnBlcmltZXRlcjsKICAgICAgdmFyIGdhdGVXaWR0aCA9IGRhdGEuZ2F0ZVdpZHRoOwogICAgICB2YXIgZmVuY2VMZW5ndGggPSBNYXRoLm1heCgwLCBwZXJpbWV0ZXIgLSBnYXRlV2lkdGgpOwogICAgICB2YXIgcG9zdHMgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoZmVuY2VMZW5ndGggLyAyLjUpKTsKICAgICAgdmFyIHNoZWV0cyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChmZW5jZUxlbmd0aCAvIDIuMCkpOwoKICAgICAgcGVyaW1ldGVyVmFsdWVFbC50ZXh0Q29udGVudCA9IHBlcmltZXRlci50b0ZpeGVkKDIpOwogICAgICBmZW5jZUxlbmd0aFZhbHVlRWwudGV4dENvbnRlbnQgPSBmZW5jZUxlbmd0aC50b0ZpeGVkKDIpOwogICAgICBwb3N0c1ZhbHVlRWwudGV4dENvbnRlbnQgPSBwb3N0czsKICAgICAgc2hlZXRzVmFsdWVFbC50ZXh0Q29udGVudCA9IHNoZWV0czsKCiAgICAgIHJlc3VsdE5vdGVFbC5pbm5lckhUTUwgPSAn0JfQsNCx0L7RgCDQtNC70LjQvdC+0LkgPHN0cm9uZz4nICsgZmVuY2VMZW5ndGgudG9GaXhlZCgxKSArICcg0Lw8L3N0cm9uZz4g0YEg0YjQsNCz0L7QvCDRgdGC0L7Qu9Cx0L7QsiAyLjUg0Lwg0L/QvtGC0YDQtdCx0YPQtdGCINC/0YDQuNC80LXRgNC90L4gPHN0cm9uZz4nICsgcG9zdHMgKyAnINGB0YLQvtC70LHQvtCyPC9zdHJvbmc+INC4IDxzdHJvbmc+JyArIHNoZWV0cyArICcg0LvQuNGB0YLQvtCyL9GB0LXQutGG0LjQuTwvc3Ryb25nPiDQtNC70LjQvdC+0LkgMiDQvC4g0JTQvtCx0LDQstGM0YLQtSDQt9Cw0L/QsNGBIDXigJMxMCUg0L3QsCDQv9C+0LTRgNC10LfQutGDINC4INC90LXRgNC+0LLQvdC+0YHRgtC4INGA0LXQu9GM0LXRhNCwLic7CiAgICAgIHJlc3VsdENhcmQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICB9CgogICAgY2FsY3VsYXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBkYXRhID0gY2FsY3VsYXRlUGVyaW1ldGVyKCk7CiAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgZGlzcGxheVJlc3VsdHMoZGF0YSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgIGhpZGVFcnJvcigpOwogICAgICByZXN1bHRDYXJkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIGxlbmd0aElucHV0LnZhbHVlID0gJyc7CiAgICAgIHdpZHRoSW5wdXQudmFsdWUgPSAnJzsKICAgICAgc2lkZUEudmFsdWUgPSAnJzsKICAgICAgc2lkZUIudmFsdWUgPSAnJzsKICAgICAgc2lkZUMudmFsdWUgPSAnJzsKICAgICAgZ2F0ZUlucHV0LnZhbHVlID0gJzAnOwogICAgICB2YXIgcG9seUlucHV0cyA9IGdldFNpZGVJbnB1dHMoKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2x5SW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcG9seUlucHV0c1tpXS52YWx1ZSA9ICcnOwogICAgICB9CiAgICAgIC8vINCj0LTQsNC70LjRgtGMINC70LjRiNC90LjQtSDQtNC+0LHQsNCy0LvQtdC90L3Ri9C1INGB0YLQvtGA0L7QvdGLLCDQvtGB0YLQsNCy0LjQsiA0CiAgICAgIHZhciBlbnRyaWVzID0gcG9seWdvbkZpZWxkcy5xdWVyeVNlbGVjdG9yQWxsKCcubm4tZ2VuLWNhbC1zaWRlLWVudHJ5Jyk7CiAgICAgIGZvciAodmFyIGsgPSA0OyBrIDwgZW50cmllcy5sZW5ndGg7IGsrKykgewogICAgICAgIHBvbHlnb25GaWVsZHMucmVtb3ZlQ2hpbGQoZW50cmllc1trXSk7CiAgICAgIH0KICAgICAgc2lkZUNvdW50ZXIgPSA0OwogICAgICBzaGFwZVNlbGVjdC52YWx1ZSA9ICdyZWN0YW5nbGUnOwogICAgICB1cGRhdGVTaGFwZVZpc2liaWxpdHkoKTsKICAgIH0pOwoKICAgIC8vINCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINCy0LjQtNC40LzQvtGB0YLQuAogICAgdXBkYXRlU2hhcGVWaXNpYmlsaXR5KCk7CiAgfSkoKTsK