powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
14 сообщений из 14, страница 1 из 1
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39949823
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PHP 5.6
Проблема : определённое регулярное выражение на определённой строке приводит к падению PHP (502 Bad gateway)
Строку, на которой регулярное выражение ложит PHP, упаковал в base64, т.к. после копирования из поста строка изменится и к падению не приведёт.

Программный код, воспроизводящий падение PHP :
Код: php
1.
2.
base64_decode('ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBjKGwpe3ZhciBtPXR5cGVvZiBsO3JldHVybiJvYmplY3QiPT09bSYmbnVsbCE9PWx8fCJmdW5jdGlvbiI9PT1tfWZ1bmN0aW9uIGQobCl7aWYoIXNhKGwsZikpe3ZhciBtPW5ldyBiO2JhKGwsZix7dmFsdWU6bX0pfX1mdW5jdGlvbiBlKGwpe3ZhciBtPU9iamVjdFtsXTttJiYoT2JqZWN0W2xdPWZ1bmN0aW9uKHIpe2lmKHIgaW5zdGFuY2VvZiBiKXJldHVybiByO2Qocik7cmV0dXJuIG0ocil9KX1pZihmdW5jdGlvbigpe2lmKCFhfHwhT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBsPU9iamVjdC5zZWFsKHt9KSxtPU9iamVjdC5zZWFsKHt9KSxyPW5ldyBhKFtbbCwyXSxbbSwzXV0pO2lmKDIhPXIuZ2V0KGwpfHwzIT1yLmdldChtKSlyZXR1cm4hMTtyLmRlbGV0ZShsKTtyLnNldChtLDQpO3JldHVybiFyLmhhcyhsKSYmND09ci5nZXQobSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpKXJldHVybiBhOw0KdmFyIGY9IiRqc2NvbXBfaGlkZGVuXyIrTWF0aC5yYW5kb20oKTtlKCJmcmVlemUiKTtlKCJwcmV2ZW50RXh0ZW5zaW9ucyIpO2UoInNlYWwiKTt2YXIgZz0wLGs9ZnVuY3Rpb24obCl7dGhpcy5mYT0oZys9TWF0aC5yYW5kb20oKSsxKS50b1N0cmluZygpO2lmKGwpe2w9Xy5qYShsKTtmb3IodmFyIG07IShtPWwubmV4dCgpKS5kb25lOyltPW0udmFsdWUsdGhpcy5zZXQobVswXSxtWzFdKX19O2sucHJvdG90eXBlLnNldD1mdW5jdGlvbihsLG0pe2lmKCFjKGwpKXRocm93IEVycm9yKCIiKTtkKGwpO2lmKCFzYShsLGYpKXRocm93IEVycm9yKCI0YCIrbCk7bFtmXVt0aGlzLmZhXT1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obCl7cmV0dXJuIGMobCkmJnNhKGwsZik/bFtmXVt0aGlzLmZhXTp2b2lkIDB9O2sucHJvdG90eXBlLmhhcz1mdW5jdGlvbihsKXtyZXR1cm4gYyhsKSYmc2EobCxmKSYmc2EobFtmXSx0aGlzLmZhKX07ay5wcm90b3R5cGUuZGVsZXRlPQ0KZnVuY3Rpb24obCl7cmV0dXJuIGMobCkmJnNhKGwsZikmJnNhKGxbZl0sdGhpcy5mYSk/ZGVsZXRlIGxbZl1bdGhpcy5mYV06ITF9O3JldHVybiBrfSk7ZmEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLEFycmF5LGZyb20pICIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMsZCl7Yz1udWxsIT1jP2M6ZnVuY3Rpb24oayl7cmV0dXJuIGt9O3ZhciBlPVtdLGY9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYltTeW1ib2wuaXRlcmF0b3JdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtiPWYuY2FsbChiKTtmb3IodmFyIGc9MDshKGY9Yi5uZXh0KCkpLmRvbmU7KWUucHVzaChjLmNhbGwoZCxmLnZhbHVlLGcrKykpfWVsc2UgZm9yKGY9Yi5sZW5ndGgsZz0wO2c8ZjtnKyspZS5wdXNoKGMuY2FsbChkLGJbZ10sZykpO3JldHVybiBlfX0pOw0KZmEoIk1hcCIsZnVuY3Rpb24oYSl7aWYoZnVuY3Rpb24oKXtpZighYXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGF8fCFhLnByb3RvdHlwZS5lbnRyaWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBrPU9iamVjdC5zZWFsKHt4OjR9KSxsPW5ldyBhKF8uamEoW1trLCJzIl1dKSk7aWYoInMiIT1sLmdldChrKXx8MSE9bC5zaXplfHxsLmdldCh7eDo0fSl8fGwuc2V0KHt4OjR9LCIiKSE9bHx8MiE9bC5zaXplKXJldHVybiExO3ZhciBtPWwuZW50cmllcygpLHI9bS5uZXh0KCk7aWYoci5kb25lfHxyLnZhbHVlWzBdIT1rfHwicyIhPXIudmFsdWVbMV0pcmV0dXJuITE7cj1tLm5leHQoKTtyZXR1cm4gci5kb25lfHw0IT1yLnZhbHVlWzBdLnh8fCIiIT1yLnZhbHVlWzFdfHwhbS5uZXh0KCkuZG9uZT8hMTohMH1jYXRjaCh0KXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7aWEoKTt2YXIgYj1uZXcgV2Vha01hcCxjPWZ1bmN0aW9uKGspe3RoaXMudz17fTsNCnRoaXMubz1mKCk7dGhpcy5zaXplPTA7aWYoayl7az1fLmphKGspO2Zvcih2YXIgbDshKGw9ay5uZXh0KCkpLmRvbmU7KWw9bC52YWx1ZSx0aGlzLnNldChsWzBdLGxbMV0pfX07Yy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGssbCl7az0wPT09az8wOms7dmFyIG09ZCh0aGlzLGspO20ubGlzdHx8KG0ubGlzdD10aGlzLndbbS5pZF09W10pO20uUWE/bS5RYS52YWx1ZT1sOihtLlFhPXtuZXh0OnRoaXMubyxDYjp0aGlzLm8uQ2IsaGVhZDp0aGlzLm8sa2V5OmssdmFsdWU6bH0sbS5saXN0LnB1c2gobS5RYSksdGhpcy5vLkNiLm5leHQ9bS5RYSx0aGlzLm8uQ2I9bS5RYSx0aGlzLnNpemUrKyk7cmV0dXJuIHRoaXN9O2MucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihrKXtrPWQodGhpcyxrKTtyZXR1cm4gay5RYSYmay5saXN0PyhrLmxpc3Quc3BsaWNlKGsuaW5kZXgsMSksay5saXN0Lmxlbmd0aHx8ZGVsZXRlIHRoaXMud1trLmlkXSxrLlFhLkNiLm5leHQ9ay5RYS5uZXh0LGsuUWEubmV4dC5DYj0NCmsuUWEuQ2Isay5RYS5oZWFkPW51bGwsdGhpcy5zaXplLS0sITApOiExfTtjLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMudz17fTt0aGlzLm89dGhpcy5vLkNiPWYoKTt0aGlzLnNpemU9MH07Yy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGspe3JldHVybiEhZCh0aGlzLGspLlFhfTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oayl7cmV0dXJuKGs9ZCh0aGlzLGspLlFhKSYmay52YWx1ZX07Yy5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3JldHVybiBlKHRoaXMsZnVuY3Rpb24oayl7cmV0dXJuW2sua2V5LGsudmFsdWVdfSl9O2MucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGZ1bmN0aW9uKGspe3JldHVybiBrLmtleX0pfTtjLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGZ1bmN0aW9uKGspe3JldHVybiBrLnZhbHVlfSl9O2MucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oayxsKXtmb3IodmFyIG09dGhpcy5lbnRyaWVzKCksDQpyOyEocj1tLm5leHQoKSkuZG9uZTspcj1yLnZhbHVlLGsuY2FsbChsLHJbMV0sclswXSx0aGlzKX07Yy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1jLnByb3RvdHlwZS5lbnRyaWVzO3ZhciBkPWZ1bmN0aW9uKGssbCl7dmFyIG09bCYmdHlwZW9mIGw7Im9iamVjdCI9PW18fCJmdW5jdGlvbiI9PW0/Yi5oYXMobCk/bT1iLmdldChsKToobT0iIisgKytnLGIuc2V0KGwsbSkpOm09InBfIitsO3ZhciByPWsud1ttXTtpZihyJiZzYShrLncsbSkpZm9yKGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIHQ9cltrXTtpZihsIT09bCYmdC5rZXkhPT10LmtleXx8bD09PXQua2V5KXJldHVybntpZDptLGxpc3Q6cixpbmRleDprLFFhOnR9fXJldHVybntpZDptLGxpc3Q6cixpbmRleDotMSxRYTp2b2lkIDB9fSxlPWZ1bmN0aW9uKGssbCl7dmFyIG09ay5vO3JldHVybiBoYShmdW5jdGlvbigpe2lmKG0pe2Zvcig7bS5oZWFkIT1rLm87KW09bS5DYjtmb3IoO20ubmV4dCE9bS5oZWFkOylyZXR1cm4gbT0NCm0ubmV4dCx7ZG9uZTohMSx2YWx1ZTpsKG0pfTttPW51bGx9cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pfSxmPWZ1bmN0aW9uKCl7dmFyIGs9e307cmV0dXJuIGsuQ2I9ay5uZXh0PWsuaGVhZD1rfSxnPTA7cmV0dXJuIGN9KTsNCmZhKCJTZXQiLGZ1bmN0aW9uKGEpe2lmKGZ1bmN0aW9uKCl7aWYoIWF8fCJmdW5jdGlvbiIhPXR5cGVvZiBhfHwhYS5wcm90b3R5cGUuZW50cmllc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7eDo0fSksZD1uZXcgYShfLmphKFtjXSkpO2lmKCFkLmhhcyhjKXx8MSE9ZC5zaXplfHxkLmFkZChjKSE9ZHx8MSE9ZC5zaXplfHxkLmFkZCh7eDo0fSkhPWR8fDIhPWQuc2l6ZSlyZXR1cm4hMTt2YXIgZT1kLmVudHJpZXMoKSxmPWUubmV4dCgpO2lmKGYuZG9uZXx8Zi52YWx1ZVswXSE9Y3x8Zi52YWx1ZVsxXSE9YylyZXR1cm4hMTtmPWUubmV4dCgpO3JldHVybiBmLmRvbmV8fGYudmFsdWVbMF09PWN8fDQhPWYudmFsdWVbMF0ueHx8Zi52YWx1ZVsxXSE9Zi52YWx1ZVswXT8hMTplLm5leHQoKS5kb25lfWNhdGNoKGcpe3JldHVybiExfX0oKSlyZXR1cm4gYTtpYSgpO3ZhciBiPWZ1bmN0aW9uKGMpe3RoaXMubz1uZXcgTWFwOw0KaWYoYyl7Yz1fLmphKGMpO2Zvcih2YXIgZDshKGQ9Yy5uZXh0KCkpLmRvbmU7KXRoaXMuYWRkKGQudmFsdWUpfXRoaXMuc2l6ZT10aGlzLm8uc2l6ZX07Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGMpe2M9MD09PWM/MDpjO3RoaXMuby5zZXQoYyxjKTt0aGlzLnNpemU9dGhpcy5vLnNpemU7cmV0dXJuIHRoaXN9O2IucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjKXtjPXRoaXMuby5kZWxldGUoYyk7dGhpcy5zaXplPXRoaXMuby5zaXplO3JldHVybiBjfTtiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuby5jbGVhcigpO3RoaXMuc2l6ZT0wfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuby5oYXMoYyl9O2IucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vLmVudHJpZXMoKX07Yi5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby52YWx1ZXMoKX07Yi5wcm90b3R5cGUua2V5cz1iLnByb3RvdHlwZS52YWx1ZXM7DQpiLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWIucHJvdG90eXBlLnZhbHVlcztiLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpczt0aGlzLm8uZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gYy5jYWxsKGQsZixmLGUpfSl9O3JldHVybiBifSk7ZmEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLE9iamVjdCxlbnRyaWVzKSAiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7dmFyIGM9W10sZDtmb3IoZCBpbiBiKXNhKGIsZCkmJmMucHVzaChbZCxiW2RdXSk7cmV0dXJuIGN9fSk7ZmEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLE9iamVjdCxpcykgIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9PT1jPzAhPT1ifHwxL2I9PT0xL2M6YiE9PWImJmMhPT1jfX0pOw0KZmEoIiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLEFycmF5LHByb3RvdHlwZSksaW5jbHVkZXMpICIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7ZCBpbnN0YW5jZW9mIFN0cmluZyYmKGQ9U3RyaW5nKGQpKTt2YXIgZT1kLmxlbmd0aDtjPWN8fDA7Zm9yKDA+YyYmKGM9TWF0aC5tYXgoYytlLDApKTtjPGU7YysrKXt2YXIgZj1kW2NdO2lmKGY9PT1ifHxPYmplY3QuaXMoZixiKSlyZXR1cm4hMH1yZXR1cm4hMX19KTtmYSgiICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsU3RyaW5nLHByb3RvdHlwZSksaW5jbHVkZXMpICIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybi0xIT09cWEodGhpcyxiLCJpbmNsdWRlcyIpLmluZGV4T2YoYixjfHwwKX19KTsNCnZhciB0YT0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGQpZm9yKHZhciBlIGluIGQpc2EoZCxlKSYmKGFbZV09ZFtlXSl9cmV0dXJuIGF9O2ZhKCIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixPYmplY3QsYXNzaWduKSAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IiwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHx0YX0pO18udWE9Xy51YXx8e307Xy5uPXRoaXN8fHNlbGY7Xy53YT1mdW5jdGlvbihhLGIpe2E9YS5zcGxpdCgiLCIpO2I9Ynx8Xy5uO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGI9YlthW2NdXSxudWxsPT1iKXJldHVybiBudWxsO3JldHVybiBifTtfLnhhPWZ1bmN0aW9uKCl7fTtfLnlhPWZ1bmN0aW9uKGEpe2Euc2U9dm9pZCAwO2EuVj1mdW5jdGlvbigpe3JldHVybiBhLnNlP2Euc2U6YS5zZT1uZXcgYX19Ow0KXy56YT1mdW5jdGlvbihhKXt2YXIgYj10eXBlb2YgYTtpZigiKSBvYmplY3QiPT1iKWlmKGEpe2lmKGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iYXJyYXkiO2lmKGEgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGI7dmFyIGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO2lmKCJbb2JqZWN0IFdpbmRvd10iPT1jKXJldHVybiJvYmplY3QiO2lmKCJbb2JqZWN0IEFycmF5XSI9PWN8fCJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5zcGxpY2UmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoInNwbGljZSIpKXJldHVybiJhcnJheSI7aWYoIltvYmplY3QgRnVuY3Rpb25dIj09Y3x8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmNhbGwmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoImNhbGwiKSlyZXR1cm4iZnVuY3Rpb24ifWVsc2UgcmV0dXJuIm51bGwiOw0KZWxzZSBpZigiZnVuY3Rpb24iPT1iJiYidW5kZWZpbmVkIj09dHlwZW9mIGEuY2FsbClyZXR1cm4ib2JqZWN0IjtyZXR1cm4gYn07Xy5BYT1mdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT1fLnphKGEpfTtfLkJhPSJjbG9zdXJlX3VpZF8iKygxRTkqTWF0aC5yYW5kb20oKT4+PjApO0NhPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYS5jYWxsLmFwcGx5KGEuYmluZCxhcmd1bWVudHMpfTtEYT1mdW5jdGlvbihhLGIsYyl7aWYoIWEpdGhyb3cgRXJyb3IoKTtpZigyPGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGUsZCk7cmV0dXJuIGEuYXBwbHkoYixlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYixhcmd1bWVudHMpfX07DQpfLnA9ZnVuY3Rpb24oYSxiLGMpe0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLCIpP18ucD1DYTpfLnA9RGE7cmV0dXJuIF8ucC5hcHBseShudWxsLGFyZ3VtZW50cyl9O18uRWE9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfTtfLnE9ZnVuY3Rpb24oYSxiKXthPWEuc3BsaXQoIiwiKTt2YXIgYz1fLm47YVswXWluIGN8fCIpIHVuZGVmaW5lZCI9PXR5cGVvZiBjLmV4ZWNTY3JpcHR8fGMuZXhlY1NjcmlwdCgidmFyICIrYVswXSk7Zm9yKHZhciBkO2EubGVuZ3RoJiYoZD1hLnNoaWZ0KCkpOylhLmxlbmd0aHx8dm9pZCAwPT09Yj9jW2RdJiZjW2RdIT09T2JqZWN0LnByb3RvdHlwZVtkXT9jPWNbZF06Yz1jW2RdPXt9OmNbZF09Yn07DQpfLnU9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7fWMucHJvdG90eXBlPWIucHJvdG90eXBlO2EuTz1iLnByb3RvdHlwZTthLnByb3RvdHlwZT1uZXcgYzthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hfTsNCl8udj1mdW5jdGlvbigpe3RoaXMuQWE9dGhpcy5BYTt0aGlzLmxiPXRoaXMubGJ9O18udi5wcm90b3R5cGUuQWE9ITE7Xy52LnByb3RvdHlwZS5lYT1mdW5jdGlvbigpe3RoaXMuQWF8fCh0aGlzLkFhPSEwLHRoaXMuUygpKX07Xy52LnByb3RvdHlwZS5TPWZ1bmN0aW9uKCl7aWYodGhpcy5sYilmb3IoO3RoaXMubGIubGVuZ3RoOyl0aGlzLmxiLnNoaWZ0KCkoKX07DQpfLkZhPWZ1bmN0aW9uKGEpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsXy5GYSk7ZWxzZXt2YXIgYj1FcnJvcigpLnN0YWNrO2ImJih0aGlzLnN0YWNrPWIpfWEmJih0aGlzLm1lc3NhZ2U9U3RyaW5nKGEpKX07Xy51KF8uRmEsRXJyb3IpO18uRmEucHJvdG90eXBlLm5hbWU9IkN1c3RvbUVycm9yIjsNCl8uR2E9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhLGIsdm9pZCAwKX06ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXJldHVybiJzdHJpbmciIT09dHlwZW9mIGJ8fDEhPWIubGVuZ3RoPy0xOmEuaW5kZXhPZihiLDApO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGMgaW4gYSYmYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9O18uSGE9QXJyYXkucHJvdG90eXBlLmZvckVhY2g/ZnVuY3Rpb24oYSxiLGMpe0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9InN0cmluZyI9PT10eXBlb2YgYT9hLnNwbGl0KCIiKTphLGY9MDtmPGQ7ZisrKWYgaW4gZSYmYi5jYWxsKGMsZVtmXSxmLGEpfTsNCl8uSWE9QXJyYXkucHJvdG90eXBlLmZpbHRlcj9mdW5jdGlvbihhLGIsYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1bXSxmPTAsZz0ic3RyaW5nIj09PXR5cGVvZiBhP2Euc3BsaXQoIiIpOmEsaz0wO2s8ZDtrKyspaWYoayBpbiBnKXt2YXIgbD1nW2tdO2IuY2FsbChjLGwsayxhKSYmKGVbZisrXT1sKX1yZXR1cm4gZX07Xy5KYT1BcnJheS5wcm90b3R5cGUubWFwP2Z1bmN0aW9uKGEsYixjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxlPUFycmF5KGQpLGY9InN0cmluZyI9PT10eXBlb2YgYT9hLnNwbGl0KCIiKTphLGc9MDtnPGQ7ZysrKWcgaW4gZiYmKGVbZ109Yi5jYWxsKGMsZltnXSxnLGEpKTtyZXR1cm4gZX07DQpfLkthPUFycmF5LnByb3RvdHlwZS5yZWR1Y2U/ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YzsoMCxfLkhhKShhLGZ1bmN0aW9uKGUsZil7ZD1iLmNhbGwodm9pZCAwLGQsZSxmLGEpfSk7cmV0dXJuIGR9O18uTGE9QXJyYXkucHJvdG90eXBlLnNvbWU/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChhLGIsdm9pZCAwKX06ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YS5sZW5ndGgsZD0ic3RyaW5nIj09PXR5cGVvZiBhP2Euc3BsaXQoIiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLCIpOmEsZT0wO2U8YztlKyspaWYoZSBpbiBkJiZiLmNhbGwodm9pZCAwLGRbZV0sZSxhKSlyZXR1cm4hMDtyZXR1cm4hMX07DQp2YXIgTmE7Xy5NYT1TdHJpbmcucHJvdG90eXBlLnRyaW0/ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJpbSgpfTpmdW5jdGlvbihhKXtyZXR1cm4vXltcc8KgXSooW1xzXFNdKj8pW1xzwqBdKiQvLmV4ZWMoYSlbMV19Ow0KXy5PYT1mdW5jdGlvbihhLGIpe3ZhciBjPTA7YT0oMCxfLk1hKShTdHJpbmcoYSkpLnNwbGl0KCIsIik7Yj0oMCxfLk1hKShTdHJpbmcoYikpLnNwbGl0KCIpLCIpO2Zvcih2YXIgZD1NYXRoLm1heChhLmxlbmd0aCxiLmxlbmd0aCksZT0wOzA9PWMmJmU8ZDtlKyspe3ZhciBmPWFbZV18fCIpICIsZz1iW2VdfHwiIjtkb3tmPS8oXGQqKShcRCopKC4qKS8uZXhlYyhmKXx8WyIiLCIiLCIiLCIiXTtnPS8oXGQqKShcRCopKC4qKS8uZXhlYyhnKXx8WyIiLCIiLCIiLCIiXTtpZigwPT1mWzBdLmxlbmd0aCYmMD09Z1swXS5sZW5ndGgpYnJlYWs7Yz1OYSgwPT1mWzFdLmxlbmd0aD8wOnBhcnNlSW50KGZbMV0sMTApLDA9PWdbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoZ1sxXSwxMCkpfHxOYSgwPT1mWzJdLmxlbmd0aCwwPT1nWzJdLmxlbmd0aCl8fE5hKGZbMl0sZ1syXSk7Zj1mWzNdO2c9Z1szXX13aGlsZSgwPT1jKX1yZXR1cm4gY307DQpOYT1mdW5jdGlvbihhLGIpe3JldHVybiBhPGI/LTE6YT5iPzE6MH07DQphOnt2YXIgUWE9Xy5uLm5hdmlnYXRvcjtpZihRYSl7dmFyIFJhPVFhLnVzZXJBZ2VudDtpZihSYSl7Xy5QYT1SYTticmVhayBhfX1fLlBhPSIifV8udz1mdW5jdGlvbihhKXtyZXR1cm4tMSE9Xy5QYS5pbmRleE9mKGEpfTsNCnZhciBVYTtfLlNhPWZ1bmN0aW9uKCl7cmV0dXJuIF8udygiVHJpZGVudCIpfHxfLncoIk1TSUUiKX07Xy5UYT1mdW5jdGlvbigpe3JldHVybiBfLncoIkZpcmVmb3giKXx8Xy53KCJGeGlPUyIpfTtVYT1mdW5jdGlvbigpe3JldHVybihfLncoIkNocm9tZSIpfHxfLncoIkNyaU9TIikpJiYhXy53KCJFZGdlIil9Ow0KdmFyIFZhO18uWGE9ZnVuY3Rpb24oYSxiKXt0aGlzLm89YT09PVZhJiZifHwiIjt0aGlzLnc9Xy5XYX07Xy5YYS5wcm90b3R5cGUuQmI9ITA7Xy5YYS5wcm90b3R5cGUubWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vfTtfLllhPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgXy5YYShWYSxhKX07Xy5XYT17fTtWYT17fTtfLlphPV8uWWEoIiIpOw0KdmFyIGFiO18uYmI9ZnVuY3Rpb24oYSxiKXt0aGlzLnc9YT09PV8uJGEmJmJ8fCIiO3RoaXMuQT1hYn07Xy5iYi5wcm90b3R5cGUuQmI9ITA7Xy5iYi5wcm90b3R5cGUubWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53LnRvU3RyaW5nKCl9O18uYmIucHJvdG90eXBlLnFlPSEwO18uYmIucHJvdG90eXBlLm89ZnVuY3Rpb24oKXtyZXR1cm4gMX07Xy5jYj1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgXy5iYiYmYS5jb25zdHJ1Y3Rvcj09PV8uYmImJmEuQT09PWFiKXJldHVybiBhLnc7Xy56YShhKTtyZXR1cm4idHlwZV9lcnJvcjpTYWZlVXJsIn07Xy5kYj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTthYj17fTtfLiRhPXt9Ow0KXy5mYj1mdW5jdGlvbigpe3RoaXMubz0iIjt0aGlzLnc9Xy5lYn07Xy5mYi5wcm90b3R5cGUuQmI9ITA7Xy5lYj17fTtfLmZiLnByb3RvdHlwZS5tYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm99O18uZ2I9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IF8uZmI7Yi5vPWE7cmV0dXJuIGJ9O18uaGI9Xy5nYigiIik7DQp2YXIgaWI7Xy5qYj1mdW5jdGlvbigpe3RoaXMudz0iIjt0aGlzLkI9aWI7dGhpcy5BPW51bGx9O18uamIucHJvdG90eXBlLnFlPSEwO18uamIucHJvdG90eXBlLm89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BfTtfLmpiLnByb3RvdHlwZS5CYj0hMDtfLmpiLnByb3RvdHlwZS5tYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLncudG9TdHJpbmcoKX07Xy5rYj1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgXy5qYiYmYS5jb25zdHJ1Y3Rvcj09PV8uamImJmEuQj09PWliKXJldHVybiBhLnc7Xy56YShhKTtyZXR1cm4idHlwZV9lcnJvcjpTYWZlSHRtbCJ9O2liPXt9O18ubGI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgXy5qYjtjLnc9YTtjLkE9YjtyZXR1cm4gY307Xy5sYigiPCBub3QgRE9DVFlQRSBodG1sPiIsMCk7Xy5tYj1fLmxiKCIiLDApO18ubmI9Xy5sYigiPGJyPiIsMCk7DQpfLm9iPWZ1bmN0aW9uKGEpe3ZhciBiPSExLGM7cmV0dXJuIGZ1bmN0aW9uKCl7Ynx8KGM9YSgpLGI9ITApO3JldHVybiBjfX0oZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2EuYXBwZW5kQ2hpbGQoYik7Yj1hLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDthLmlubmVySFRNTD1fLmtiKF8ubWIpO3JldHVybiFiLnBhcmVudEVsZW1lbnR9KTsNCnZhciBwYjtwYj1mdW5jdGlvbigpe3JldHVybiBfLncoImlQaG9uZSIpJiYhXy53KCJpUG9kIikmJiFfLncoImlQYWQiKX07Xy5xYj1mdW5jdGlvbigpe3JldHVybiBwYigpfHxfLncoImlQYWQiKXx8Xy53KCJpUG9kIil9Ow0KXy5yYj1mdW5jdGlvbihhKXtfLnJiWyIgIl0oYSk7cmV0dXJuIGF9O18ucmJbIiAiXT1fLnhhO3ZhciB0Yj1mdW5jdGlvbihhLGIpe3ZhciBjPXNiO3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKT9jW2FdOmNbYV09YihhKX07DQp2YXIgQWIsSmIsS2Isc2IsU2I7Xy51Yj1fLncoIk9wZXJhIik7Xy54PV8uU2EoKTtfLnZiPV8udygiRWRnZSIpO18ud2I9Xy52Ynx8Xy54O18ueGI9Xy53KCJHZWNrbyIpJiYhKC0xIT1fLlBhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigid2Via2l0IikmJiFfLncoIkVkZ2UiKSkmJiEoXy53KCJUcmlkZW50Iil8fF8udygiTVNJRSIpKSYmIV8udygiRWRnZSIpO18ueWI9LTEhPV8uUGEudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSYmIV8udygiRWRnZSIpO0FiPV8ubi5uYXZpZ2F0b3J8fG51bGw7Xy56Yj1BYiYmQWIucGxhdGZvcm18fCIiO18uQmI9Xy53KCJNYWNpbnRvc2giKTtfLkNiPV8udygiV2luZG93cyIpO18uRGI9Xy53KCJMaW51eCIpfHxfLncoIkNyT1MiKTtfLkViPV8udygiQW5kcm9pZCIpO18uRmI9cGIoKTtfLkdiPV8udygiaVBhZCIpO18uSGI9Xy53KCJpUG9kIik7Xy5JYj1fLnFiKCk7DQpKYj1mdW5jdGlvbigpe3ZhciBhPV8ubi5kb2N1bWVudDtyZXR1cm4gYT9hLmRvY3VtZW50TW9kZTp2b2lkIDB9O2E6e3ZhciBMYj0iIixNYj1mdW5jdGlvbigpe3ZhciBhPV8uUGE7aWYoXy54YilyZXR1cm4vcnY6KFteXCk7XSspKFwpfDspLy5leGVjKGEpO2lmKF8udmIpcmV0dXJuL0VkZ2UvKFtcZFwuXSspLy5leGVjKGEpO2lmKF8ueClyZXR1cm4vXGIoPzpNU0lFfHJ2KVs6IF0oW15cKTtdKykoXCl8OykvLmV4ZWMoYSk7aWYoXy55YilyZXR1cm4vV2ViS2l0LyhcUyspLy5leGVjKGEpO2lmKF8udWIpcmV0dXJuLyg/OlZlcnNpb24pWyAvXT8oXFMrKS8uZXhlYyhhKX0oKTtNYiYmKExiPU1iP01iWzFdOiIiKTtpZihfLngpe3ZhciBOYj1KYigpO2lmKG51bGwhPU5iJiZOYj5wYXJzZUZsb2F0KExiKSl7S2I9U3RyaW5nKE5iKTticmVhayBhfX1LYj1MYn1fLk9iPUtiO3NiPXt9Ow0KXy5QYj1mdW5jdGlvbihhKXtyZXR1cm4gdGIoYSxmdW5jdGlvbigpe3JldHVybiAwPD1fLk9hKF8uT2IsYSl9KX07Xy5SYj1mdW5jdGlvbihhKXtyZXR1cm4gTnVtYmVyKFFiKT49YX07aWYoXy5uLmRvY3VtZW50JiZfLngpe3ZhciBUYj1KYigpO1NiPVRiP1RiOnBhcnNlSW50KF8uT2IsMTApfHx2b2lkIDB9ZWxzZSBTYj12b2lkIDA7dmFyIFFiPVNiOw0KXy5VYj0hXy54fHxfLlJiKDkpO18uVmI9IV8ueGImJiFfLnh8fF8ueCYmXy5SYig5KXx8Xy54YiYmXy5QYigiMS45LjEiKTtfLldiPV8ueCYmIV8uUGIoIjkiKTtfLlhiPV8ueHx8Xy51Ynx8Xy55YjsNCl8ueT1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT1hPyEhYTohIWJ9O18uej1mdW5jdGlvbihhLGIpe3ZvaWQgMD09YiYmKGI9IiIpO3JldHVybiBudWxsIT1hP2E6Yn07Xy5BPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT1iJiYoYj0wKTtyZXR1cm4gbnVsbCE9YT9hOmJ9Ow0KdmFyIGVjO18uWWI9ZnVuY3Rpb24oKXt0aGlzLm89e307dGhpcy53PXt9fTtfLnlhKF8uWWIpO18uYWM9ZnVuY3Rpb24oYSxiKXthLlY9ZnVuY3Rpb24oKXtyZXR1cm4gXy5aYihfLlliLlYoKSxiKX07YS5Taj1mdW5jdGlvbigpe3JldHVybiBfLiRiKF8uWWIuVigpLGIpfX07Xy5jYz1mdW5jdGlvbihhLGIpe3ZhciBjPV8uWWIuVigpO2lmKGEgaW4gYy5vKXtpZihjLm9bYV0hPWIpdGhyb3cgbmV3IGJjKGEpO31lbHNle2Mub1thXT1iO2lmKGI9Yy53W2FdKWZvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKyliW2RdLm8oYy5vLGEpO2RlbGV0ZSBjLndbYV19fTtfLlpiPWZ1bmN0aW9uKGEsYil7aWYoYiBpbiBhLm8pcmV0dXJuIGEub1tiXTt0aHJvdyBuZXcgZGMoYik7fTtfLiRiPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub1tiXXx8bnVsbH07ZWM9ZnVuY3Rpb24oYSl7Xy5GYS5jYWxsKHRoaXMpO3RoaXMuZmE9YX07Xy51KGVjLF8uRmEpOw0KdmFyIGJjPWZ1bmN0aW9uKGEpe2VjLmNhbGwodGhpcyxhKX07Xy51KGJjLGVjKTt2YXIgZGM9ZnVuY3Rpb24oYSl7ZWMuY2FsbCh0aGlzLGEpfTtfLnUoZGMsZWMpOw0KXy5mYz1fLlRhKCk7Xy5nYz1wYigpfHxfLncoImlQb2QiKTtfLmhjPV8udygiaVBhZCIpO18uaWM9Xy53KCJBbmRyb2lkIikmJiEoVWEoKXx8Xy5UYSgpfHxfLncoIk9wZXJhIil8fF8udygiU2lsayIpKTtfLmpjPVVhKCk7Xy5rYz1fLncoIlNhZmFyaSIpJiYhKFVhKCl8fF8udygiQ29hc3QiKXx8Xy53KCJPcGVyYSIpfHxfLncoIkVkZ2UiKXx8Xy53KCJFZGcgZGl2ICIpfHxfLncoIk9QUiIpfHxfLlRhKCl8fF8udygiU2lsayIpfHxfLncoIkFuZHJvaWQiKSkmJiFfLnFiKCk7DQp2YXIgbGM9e30sbWM9bnVsbDsNCl8ubmM9ZnVuY3Rpb24oYSl7dGhpcy5vPTA7dGhpcy53PWF9O18ubmMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPHRoaXMudy5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6dGhpcy53W3RoaXMubysrXX06e2RvbmU6ITAsdmFsdWU6dm9pZCAwfX07InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJihfLm5jLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTsNCnZhciBvYyxzYyx2YztfLkI9ZnVuY3Rpb24oKXt9O29jPSJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5Ow0KXy5EPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXthLm89bnVsbDtifHwoYj1jP1tjXTpbXSk7YS5IPWM/U3RyaW5nKGMpOnZvaWQgMDthLkM9MD09PWM/LTE6MDthLkE9YjthOntjPWEuQS5sZW5ndGg7Yj0tMTtpZihjJiYoYj1jLTEsYz1hLkFbYl0sIShudWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjfHxBcnJheS5pc0FycmF5KGMpfHxvYyYmYyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSl7YS5EPWItYS5DO2EuQj1jO2JyZWFrIGF9LTE8ZD8oYS5EPU1hdGgubWF4KGQsYisxLWEuQyksYS5CPW51bGwpOmEuRD1OdW1iZXIuTUFYX1ZBTFVFfWEuSj17fTtpZihlKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspYj1lW2RdLGI8YS5EPyhiKz1hLkMsYS5BW2JdPWEuQVtiXXx8Xy5wYyk6KF8ucWMoYSksYS5CW2JdPWEuQltiXXx8Xy5wYyk7aWYoZiYmZi5sZW5ndGgpZm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylfLnJjKGEsZltkXSl9O18ucGM9W107DQpfLnFjPWZ1bmN0aW9uKGEpe3ZhciBiPWEuRCthLkM7YS5BW2JdfHwoYS5CPWEuQVtiXT17fSl9O18uRj1mdW5jdGlvbihhLGIpe2lmKGI8YS5EKXtiKz1hLkM7dmFyIGM9YS5BW2JdO3JldHVybiBjPT09Xy5wYz9hLkFbYl09W106Y31pZihhLkIpcmV0dXJuIGM9YS5CW2JdLGM9PT1fLnBjP2EuQltiXT1bXTpjfTtfLkc9ZnVuY3Rpb24oYSxiKXthPV8uRihhLGIpO3JldHVybiBudWxsPT1hP2E6ISFhfTtfLkg9ZnVuY3Rpb24oYSxiLGMpe2E9Xy5GKGEsYik7cmV0dXJuIG51bGw9PWE/YzphfTtfLko9ZnVuY3Rpb24oYSxiLGMpe2I8YS5EP2EuQVtiK2EuQ109YzooXy5xYyhhKSxhLkJbYl09Yyk7cmV0dXJuIGF9O18ucmM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZCxlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPWJbZV0sZz1fLkYoYSxmKTtudWxsIT1nJiYoYz1mLGQ9ZyxfLkooYSxmLHZvaWQgMCkpfXJldHVybiBjPyhfLkooYSxjLGQpLGMpOjB9Ow0KXy5LPWZ1bmN0aW9uKGEsYixjKXthLm98fChhLm89e30pO2lmKCFhLm9bY10pe3ZhciBkPV8uRihhLGMpO2QmJihhLm9bY109bmV3IGIoZCkpfXJldHVybiBhLm9bY119O3NjPWZ1bmN0aW9uKGEpe2lmKGEubylmb3IodmFyIGIgaW4gYS5vKXt2YXIgYz1hLm9bYl07aWYoXy5BYShjKSlmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdJiZjW2RdLk9hKCk7ZWxzZSBjJiZjLk9hKCl9fTtfLkIucHJvdG90eXBlLk9hPWZ1bmN0aW9uKCl7c2ModGhpcyk7cmV0dXJuIHRoaXMuQX07DQpfLkIucHJvdG90eXBlLnc9b2M/ZnVuY3Rpb24oKXt2YXIgYT1VaW50OEFycmF5LnByb3RvdHlwZS50b0pTT047VWludDhBcnJheS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI7dm9pZCAwPT09YiYmKGI9MCk7aWYoIW1jKXttYz17fTtmb3IodmFyIGM9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ii5zcGxpdCgiIiksZD1bIisgZGl2ID0iLCIrIGRpdiAiLCItXz0iLCItIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsXywiLCIpIC1fIl0sZT0wOzU+ZTtlKyspe3ZhciBmPWMuY29uY2F0KGRbZV0uc3BsaXQoIiIpKTtsY1tlXT1mO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaz1mW2ddO3ZvaWQgMD09PW1jW2tdJiYobWNba109Zyl9fX1iPWxjW2JdO2M9W107Zm9yKGQ9MDtkPHRoaXMubGVuZ3RoO2QrPTMpe3ZhciBsPXRoaXNbZF0sbT0oZT1kKzE8dGhpcy5sZW5ndGgpP3RoaXNbZCsxXTowO2s9KGY9ZCsyPHRoaXMubGVuZ3RoKT90aGlzW2QrMl06MDtnPQ0KbD4+MjtsPShsJjMpPDw0fG0+PjQ7bT0obSYxNSk8PDJ8az4+NjtrJj02MztmfHwoaz02NCxlfHwobT02NCkpO2MucHVzaChiW2ddLGJbbF0sYlttXXx8IiIsYltrXXx8IiIpfXJldHVybiBjLmpvaW4oIiIpfTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuQSYmdGhpcy5PYSgpLHRjKX1maW5hbGx5e1VpbnQ4QXJyYXkucHJvdG90eXBlLnRvSlNPTj1hfX06ZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5BJiZ0aGlzLk9hKCksdGMpfTt2YXIgdGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4ibnVtYmVyIiE9PXR5cGVvZiBifHwhaXNOYU4oYikmJkluZmluaXR5IT09YiYmLUluZmluaXR5IT09Yj9iOlN0cmluZyhiKX07Xy5CLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3NjKHRoaXMpO3JldHVybiB0aGlzLkEudG9TdHJpbmcoKX07Xy5CLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBfLnVjKHRoaXMpfTtfLnVjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgYS5jb25zdHJ1Y3Rvcih2YyhhLk9hKCkpKX07DQp2Yz1mdW5jdGlvbihhKXtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IodmFyIGI9QXJyYXkoYS5sZW5ndGgpLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtudWxsIT1kJiYoYltjXT0ib2JqZWN0Ij09dHlwZW9mIGQ/dmMoZCk6ZCl9cmV0dXJuIGJ9aWYob2MmJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShhKTtiPXt9O2ZvcihjIGluIGEpZD1hW2NdLG51bGwhPWQmJihiW2NdPSJvYmplY3QiPT10eXBlb2YgZD92YyhkKTpkKTtyZXR1cm4gYn07DQpfLndjPWZ1bmN0aW9uKGEpe18uRCh0aGlzLGEsMCwtMSxudWxsLG51bGwpfTtfLnUoXy53YyxfLkIpOw0KdmFyIHljPWZ1bmN0aW9uKGEpe18uRCh0aGlzLGEsMCwtMSxudWxsLG51bGwpfTtfLnUoeWMsXy5CKTsNCnZhciB6Yz1uZXcgeWMod2luZG93LmdiYXImJndpbmRvdy5nYmFyLl9DT05GSUc/d2luZG93LmdiYXIuX0NPTkZJR1swXTpbWywsLCwsLCxbXV0sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW11dKSxBYztBYz1fLkcoemMsMyk7Xy5CYz1fLnkoQWMpOw0KXy5DYz1mdW5jdGlvbigpe307Xy5xKCIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixnYmFyXyxfRHVtcEV4Y2VwdGlvbikgIixmdW5jdGlvbihhKXtfLkNjKGEpfSk7DQp2YXIgRGM9ZnVuY3Rpb24oKXtfLnYuY2FsbCh0aGlzKTt0aGlzLm89emN9O18udShEYyxfLnYpO18uYWMoRGMsImNzIik7Xy5NPWZ1bmN0aW9uKCl7cmV0dXJuIERjLlYoKS5vfTtfLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIF8uSyhfLk0oKSx4YywxKXx8bmV3IHhjfTtfLmNjKCJjcyIsbmV3IERjKTsNCnZhciBGYz1mdW5jdGlvbihhLGIsYyl7dGhpcy5CPWE7dGhpcy53PSExO3RoaXMubz1iO3RoaXMuQT1jfTtGYy5wcm90b3R5cGUuUGE9ZnVuY3Rpb24oYSl7aWYodGhpcy53KXRocm93IEVycm9yKCJgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsIit0aGlzLm8pO3RyeXthLmFwcGx5KHRoaXMuQix0aGlzLkEpLHRoaXMudz0hMH1jYXRjaChiKXt9fTsNCnZhciBHYz1mdW5jdGlvbihhKXtfLnYuY2FsbCh0aGlzKTt0aGlzLkE9YTt0aGlzLm89W107dGhpcy53PXt9fTtfLnUoR2MsXy52KTtHYy5wcm90b3R5cGUuQj1mdW5jdGlvbihhKXt2YXIgYj0oMCxfLnApKGZ1bmN0aW9uKCl7dGhpcy5vLnB1c2gobmV3IEZjKHRoaXMuQSxhLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX0sdGhpcyk7cmV0dXJuIHRoaXMud1thXT1ifTsNCkdjLnByb3RvdHlwZS5QYT1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm8ubGVuZ3RoLGI9dGhpcy5vLGM9W10sZD0wO2Q8YTsrK2Qpe3ZhciBlPWJbZF0ubzthOnt2YXIgZj10aGlzLkE7Zm9yKHZhciBnPWUuc3BsaXQoIiwiKSxrPWcubGVuZ3RoLGw9MDtsPGs7KytsKWlmKGZbZ1tsXV0pZj1mW2dbbF1dO2Vsc2V7Zj1udWxsO2JyZWFrIGF9Zj1mIGluc3RhbmNlb2YgRnVuY3Rpb24/ZjpudWxsfWlmKGYmJmYhPXRoaXMud1tlXSl0cnl7YltkXS5QYShmKX1jYXRjaChtKXt9ZWxzZSBjLnB1c2goYltkXSl9dGhpcy5vPWMuY29uY2F0KGIuc2xpY2UoYSkpfTsNCnZhciBJYztfLkhjPSIpIGJiaCBiYnIgYmJzIGhhcyBwcm0gc25ndyBzbyIuc3BsaXQoIiAiKTtJYz1uZXcgR2MoXy5uKTtfLmNjKCJhcGkiLEljKTsNCmZvcih2YXIgSmM9ImFkZEV4dHJhTGluayBhZGRMaW5rIGFvbWMgYXNtYyBjbG9zZSAgIHBocDpmdW5jdGlvbigidW5jX19fX19fX19fX19fX19fX19fX19fXyIsIl9fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixjcCxjcCksX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixjcCxtZSkpICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsY3AsbWwpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixjcCxyYykgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLGNwLHJlbCkgIGVsYSBlbGMgZWxoIGdwY2EgZ3BjciBsR0MgbFBXRiBsZGIgbWxzIG5vYW0gcGFhIHBjIHBjYSBwY20gIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIscHcsY2xrKSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIscHcsaHZyKSAgcWZhYWUgcWZhYXMgcWZhYXUgcWZhZSBxZmFzIHFmYXUgcWZoaSBxbSBxcyBxc2kgcnRsIHNhIHNldENvbnRpbnVlQ2Igc25hdyBzbmN3IHNvbSBzcCBzcGQgc3BuIHNwcCBzcHMgdHNsIHRzdCAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxhZWgpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxhb3ApICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxkcGMpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxpaWMpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxuYXApICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCx1cCksc2wpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxzcGQpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCx0cCkgIHVwZWwgdXBlcyB1cGV0Ii5zcGxpdCgiICIpLmNvbmNhdChfLkhjKSxLYz0oMCxfLnApKEljLkIsSWMpLExjPTA7TGM8SmMubGVuZ3RoO0xjKyspe3ZhciBNYz0iIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsZ2JhciwiK0pjW0xjXTtudWxsPT1fLndhKE1jLHdpbmRvdykmJl8ucShNYyxLYyhNYykpfV8ucSgiKSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixnYmFyLHVwKSxncGQpICIsZnVuY3Rpb24oKXtyZXR1cm4iIn0pOw0KdmFyIE5jPW5ldyBmdW5jdGlvbigpe3RoaXMubz1fLksoXy5FYygpLF8ud2MsOCl8fG5ldyBfLndjfTtfLnEoIiBfX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLGdiYXIsYnYpICIse246Xy5BKF8uRihOYy5vLDIpKSxyOl8ueihfLkYoTmMubyw0KSksZjpfLnooXy5GKE5jLm8sMykpLGU6Xy56KF8uRihOYy5vLDUpKSxtOl8uQShfLkgoTmMubywxLDEpLDEpfSk7Xy5xKCIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixnYmFyLGtuKSAiLGZ1bmN0aW9uKCl7cmV0dXJuITB9KTtfLnEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLGdiYXIsc2IpICIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pOw0KfWNhdGNoKGUpe18uX0R1bXBFeGNlcHRpb24oZSl9DQp0cnl7DQpfLnEoIiBwaHA6ZnVuY3Rpb24oIl9fX19fX19fX19fX186OiIsIl9fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsZ2JhcixlbHIpICIsZnVuY3Rpb24oKXtyZXR1cm57ZXM6e2Y6MTUyLGg6NjAsbTozMH0sbW86Im1kIix2aDogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix3aW5kb3csaW5uZXJIZWlnaHQpICBvciAwLHZ3OiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLHdpbmRvdyxpbm5lcldpZHRoKSAgb3IgMH19KQ==');
preg_match_all("/(?:[\s\S])*/u", $expr, $matches);  // 502 Bad gateway


К падению приводят 2 варианта регулярного выражения: /(?:[\s\S])*/u и /(?:[\d\D])*/u
В байтовом режиме регулярные выражения /(?:[\s\S])*/ и /(?:[\d\D])*/ также приводят к падению, т.е. проблема не в некорректных UTF-8 символах.

В каких случаях проблема не возникает :
1) Если убрать незахватывающий карман, то падения не будет: /(?:[\s\S])*/u
2) Если удалить из строки 1 любой символ, то падения не будет.

Интересный артефакт .
Если убрать незахватывающий карман и выполнить preg_match_all(), то сколько полных вхождений получим ? Одно ? Я тоже так думал...
Код: php
1.
preg_match_all("/[\s\S]*/u", $expr, $matches);

Код: php
1.
2.
3.
4.
5.
6.
7.
Array
(    [0] => Array
        (
            [0] => "..."  // вся исходная строка
            [1] => ""     // пустая строка
        )
)

И то же самое в однобайтовом режиме:
Код: php
1.
preg_match_all("/[\s\S]*/", $expr, $matches);

Код: php
1.
2.
3.
4.
5.
6.
7.
Array
(    [0] => Array
        (
            [0] => "..."  // вся исходная строка
            [1] => ""     // пустая строка
        )
)


Из чего состоит исходная строка :
1) 22719 однобайтовых символа из 1-й половины ASCII
2) 2 двухбайтовых символа в кодировке UTF-8. А именно: два неразрывных пробела C2A0. И расположены они в середине строки: порядковые символьные индексы 10228 и 10244.

Т.е. строка является абсолютно корректной и имеет кодировку UTF-8. Кривых байтовых наборов нет.
Из собственного опыта: когда выполняется регулярное выражение в режиме UTF-8 на строке, содержащей не UTF-8 символы, функции preg_match... возвращают NULL (PHP не падает). Т.е. в данном случае проблема в чём-то другом.

Что требуется :
1) Объяснить наличие двух полных вхождений при выполнении регулярного выражения "/[\s\S]*/u" или "/[\s\S]*/"
2) Назвать причину, по которой регулярные выражения /(?:[\s\S])*/u и /(?:[\d\D])*/u ложат PHP на указанной строке

Как выглядит проблемная строка в кодировке UTF-8 :
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
$expr = 'function(a){function b(){}function c(l){var m=typeof l;return"object"===m&&null!==l||"function"===m}function d(l){if(!sa(l,f)){var m=new b;ba(l,f,{value:m})}}function e(l){var m=Object[l];m&&(Object[l]=function(r){if(r instanceof b)return r;d(r);return m(r)})}if(function(){if(!a||!Object.seal)return!1;try{var l=Object.seal({}),m=Object.seal({}),r=new a([[l,2],[m,3]]);if(2!=r.get(l)||3!=r.get(m))return!1;r.delete(l);r.set(m,4);return!r.has(l)&&4==r.get(m)}catch(t){return!1}}())return a;
var f="$jscomp_hidden_"+Math.random();e("freeze");e("preventExtensions");e("seal");var g=0,k=function(l){this.fa=(g+=Math.random()+1).toString();if(l){l=_.ja(l);for(var m;!(m=l.next()).done;)m=m.value,this.set(m[0],m[1])}};k.prototype.set=function(l,m){if(!c(l))throw Error("");d(l);if(!sa(l,f))throw Error("4`"+l);l[f][this.fa]=m;return this};k.prototype.get=function(l){return c(l)&&sa(l,f)?l[f][this.fa]:void 0};k.prototype.has=function(l){return c(l)&&sa(l,f)&&sa(l[f],this.fa)};k.prototype.delete=
function(l){return c(l)&&sa(l,f)&&sa(l[f],this.fa)?delete l[f][this.fa]:!1};return k});fa(" ______________________________________________________________5e9f55860b0a7466634445",Array,from) ",function(a){return a?a:function(b,c,d){c=null!=c?c:function(k){return k};var e=[],f="undefined"!=typeof Symbol&&Symbol.iterator&&b[Symbol.iterator];if("function"==typeof f){b=f.call(b);for(var g=0;!(f=b.next()).done;)e.push(c.call(d,f.value,g++))}else for(f=b.length,g=0;g<f;g++)e.push(c.call(d,b[g],g));return e}});
fa("Map",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var k=Object.seal({x:4}),l=new a(_.ja([[k,"s"]]));if("s"!=l.get(k)||1!=l.size||l.get({x:4})||l.set({x:4},"")!=l||2!=l.size)return!1;var m=l.entries(),r=m.next();if(r.done||r.value[0]!=k||"s"!=r.value[1])return!1;r=m.next();return r.done||4!=r.value[0].x||""!=r.value[1]||!m.next().done?!1:!0}catch(t){return!1}}())return a;ia();var b=new WeakMap,c=function(k){this.w={};
this.o=f();this.size=0;if(k){k=_.ja(k);for(var l;!(l=k.next()).done;)l=l.value,this.set(l[0],l[1])}};c.prototype.set=function(k,l){k=0===k?0:k;var m=d(this,k);m.list||(m.list=this.w[m.id]=[]);m.Qa?m.Qa.value=l:(m.Qa={next:this.o,Cb:this.o.Cb,head:this.o,key:k,value:l},m.list.push(m.Qa),this.o.Cb.next=m.Qa,this.o.Cb=m.Qa,this.size++);return this};c.prototype.delete=function(k){k=d(this,k);return k.Qa&&k.list?(k.list.splice(k.index,1),k.list.length||delete this.w[k.id],k.Qa.Cb.next=k.Qa.next,k.Qa.next.Cb=
k.Qa.Cb,k.Qa.head=null,this.size--,!0):!1};c.prototype.clear=function(){this.w={};this.o=this.o.Cb=f();this.size=0};c.prototype.has=function(k){return!!d(this,k).Qa};c.prototype.get=function(k){return(k=d(this,k).Qa)&&k.value};c.prototype.entries=function(){return e(this,function(k){return[k.key,k.value]})};c.prototype.keys=function(){return e(this,function(k){return k.key})};c.prototype.values=function(){return e(this,function(k){return k.value})};c.prototype.forEach=function(k,l){for(var m=this.entries(),
r;!(r=m.next()).done;)r=r.value,k.call(l,r[1],r[0],this)};c.prototype[Symbol.iterator]=c.prototype.entries;var d=function(k,l){var m=l&&typeof l;"object"==m||"function"==m?b.has(l)?m=b.get(l):(m=""+ ++g,b.set(l,m)):m="p_"+l;var r=k.w[m];if(r&&sa(k.w,m))for(k=0;k<r.length;k++){var t=r[k];if(l!==l&&t.key!==t.key||l===t.key)return{id:m,list:r,index:k,Qa:t}}return{id:m,list:r,index:-1,Qa:void 0}},e=function(k,l){var m=k.o;return ha(function(){if(m){for(;m.head!=k.o;)m=m.Cb;for(;m.next!=m.head;)return m=
m.next,{done:!1,value:l(m)};m=null}return{done:!0,value:void 0}})},f=function(){var k={};return k.Cb=k.next=k.head=k},g=0;return c});
fa("Set",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var c=Object.seal({x:4}),d=new a(_.ja([c]));if(!d.has(c)||1!=d.size||d.add(c)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var e=d.entries(),f=e.next();if(f.done||f.value[0]!=c||f.value[1]!=c)return!1;f=e.next();return f.done||f.value[0]==c||4!=f.value[0].x||f.value[1]!=f.value[0]?!1:e.next().done}catch(g){return!1}}())return a;ia();var b=function(c){this.o=new Map;
if(c){c=_.ja(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.o.size};b.prototype.add=function(c){c=0===c?0:c;this.o.set(c,c);this.size=this.o.size;return this};b.prototype.delete=function(c){c=this.o.delete(c);this.size=this.o.size;return c};b.prototype.clear=function(){this.o.clear();this.size=0};b.prototype.has=function(c){return this.o.has(c)};b.prototype.entries=function(){return this.o.entries()};b.prototype.values=function(){return this.o.values()};b.prototype.keys=b.prototype.values;
b.prototype[Symbol.iterator]=b.prototype.values;b.prototype.forEach=function(c,d){var e=this;this.o.forEach(function(f){return c.call(d,f,f,e)})};return b});fa(" ______________________________________________________________5e9f55860b0a7466634445",Object,entries) ",function(a){return a?a:function(b){var c=[],d;for(d in b)sa(b,d)&&c.push([d,b[d]]);return c}});fa(" ______________________________________________________________5e9f55860b0a7466634445",Object,is) ",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});
fa("  ______________________________________________________________5e9f55860b0a7466634445",______________________________________________________________5e9f55860b0a7466634445",Array,prototype),includes) ",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(0>c&&(c=Math.max(c+e,0));c<e;c++){var f=d[c];if(f===b||Object.is(f,b))return!0}return!1}});fa("  ______________________________________________________________5e9f55860b0a7466634445",______________________________________________________________5e9f55860b0a7466634445",String,prototype),includes) ",function(a){return a?a:function(b,c){return-1!==qa(this,b,"includes").indexOf(b,c||0)}});
var ta="function"==typeof Object.assign?Object.assign:function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var e in d)sa(d,e)&&(a[e]=d[e])}return a};fa(" ______________________________________________________________5e9f55860b0a7466634445",Object,assign)  ______________________________________________________________5e9f55860b0a7466634445",",function(a){return a||ta});_.ua=_.ua||{};_.n=this||self;_.wa=function(a,b){a=a.split(",");b=b||_.n;for(var c=0;c<a.length;c++)if(b=b[a[c]],null==b)return null;return b};_.xa=function(){};_.ya=function(a){a.se=void 0;a.V=function(){return a.se?a.se:a.se=new a}};
_.za=function(a){var b=typeof a;if(") object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
else if("function"==b&&"undefined"==typeof a.call)return"object";return b};_.Aa=function(a){return"array"==_.za(a)};_.Ba="closure_uid_"+(1E9*Math.random()>>>0);Ca=function(a,b,c){return a.call.apply(a.bind,arguments)};Da=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}};
_.p=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code ______________________________________________________________5e9f55860b0a7466634445",")?_.p=Ca:_.p=Da;return _.p.apply(null,arguments)};_.Ea=Date.now||function(){return+new Date};_.q=function(a,b){a=a.split(",");var c=_.n;a[0]in c||") undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};
_.u=function(a,b){function c(){}c.prototype=b.prototype;a.O=b.prototype;a.prototype=new c;a.prototype.constructor=a};
_.v=function(){this.Aa=this.Aa;this.lb=this.lb};_.v.prototype.Aa=!1;_.v.prototype.ea=function(){this.Aa||(this.Aa=!0,this.S())};_.v.prototype.S=function(){if(this.lb)for(;this.lb.length;)this.lb.shift()()};
_.Fa=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,_.Fa);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))};_.u(_.Fa,Error);_.Fa.prototype.name="CustomError";
_.Ga=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};_.Ha=Array.prototype.forEach?function(a,b,c){Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e="string"===typeof a?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};
_.Ia=Array.prototype.filter?function(a,b,c){return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g="string"===typeof a?a.split(""):a,k=0;k<d;k++)if(k in g){var l=g[k];b.call(c,l,k,a)&&(e[f++]=l)}return e};_.Ja=Array.prototype.map?function(a,b,c){return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f="string"===typeof a?a.split(""):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e};
_.Ka=Array.prototype.reduce?function(a,b,c){return Array.prototype.reduce.call(a,b,c)}:function(a,b,c){var d=c;(0,_.Ha)(a,function(e,f){d=b.call(void 0,d,e,f,a)});return d};_.La=Array.prototype.some?function(a,b){return Array.prototype.some.call(a,b,void 0)}:function(a,b){for(var c=a.length,d="string"===typeof a?a.split("  ______________________________________________________________5e9f55860b0a7466634445",______________________________________________________________5e9f55860b0a7466634445","):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a))return!0;return!1};
var Na;_.Ma=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s ]*([\s\S]*?)[\s ]*$/.exec(a)[1]};
_.Oa=function(a,b){var c=0;a=(0,_.Ma)(String(a)).split(",");b=(0,_.Ma)(String(b)).split("),");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||") ",g=b[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;c=Na(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Na(0==f[2].length,0==g[2].length)||Na(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c};
Na=function(a,b){return a<b?-1:a>b?1:0};
a:{var Qa=_.n.navigator;if(Qa){var Ra=Qa.userAgent;if(Ra){_.Pa=Ra;break a}}_.Pa=""}_.w=function(a){return-1!=_.Pa.indexOf(a)};
var Ua;_.Sa=function(){return _.w("Trident")||_.w("MSIE")};_.Ta=function(){return _.w("Firefox")||_.w("FxiOS")};Ua=function(){return(_.w("Chrome")||_.w("CriOS"))&&!_.w("Edge")};
var Va;_.Xa=function(a,b){this.o=a===Va&&b||"";this.w=_.Wa};_.Xa.prototype.Bb=!0;_.Xa.prototype.mb=function(){return this.o};_.Ya=function(a){return new _.Xa(Va,a)};_.Wa={};Va={};_.Za=_.Ya("");
var ab;_.bb=function(a,b){this.w=a===_.$a&&b||"";this.A=ab};_.bb.prototype.Bb=!0;_.bb.prototype.mb=function(){return this.w.toString()};_.bb.prototype.qe=!0;_.bb.prototype.o=function(){return 1};_.cb=function(a){if(a instanceof _.bb&&a.constructor===_.bb&&a.A===ab)return a.w;_.za(a);return"type_error:SafeUrl"};_.db=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;ab={};_.$a={};
_.fb=function(){this.o="";this.w=_.eb};_.fb.prototype.Bb=!0;_.eb={};_.fb.prototype.mb=function(){return this.o};_.gb=function(a){var b=new _.fb;b.o=a;return b};_.hb=_.gb("");
var ib;_.jb=function(){this.w="";this.B=ib;this.A=null};_.jb.prototype.qe=!0;_.jb.prototype.o=function(){return this.A};_.jb.prototype.Bb=!0;_.jb.prototype.mb=function(){return this.w.toString()};_.kb=function(a){if(a instanceof _.jb&&a.constructor===_.jb&&a.B===ib)return a.w;_.za(a);return"type_error:SafeHtml"};ib={};_.lb=function(a,b){var c=new _.jb;c.w=a;c.A=b;return c};_.lb("< not DOCTYPE html>",0);_.mb=_.lb("",0);_.nb=_.lb("<br>",0);
_.ob=function(a){var b=!1,c;return function(){b||(c=a(),b=!0);return c}}(function(){var a=document.createElement("div"),b=document.createElement("div");b.appendChild(document.createElement("div"));a.appendChild(b);b=a.firstChild.firstChild;a.innerHTML=_.kb(_.mb);return!b.parentElement});
var pb;pb=function(){return _.w("iPhone")&&!_.w("iPod")&&!_.w("iPad")};_.qb=function(){return pb()||_.w("iPad")||_.w("iPod")};
_.rb=function(a){_.rb[" "](a);return a};_.rb[" "]=_.xa;var tb=function(a,b){var c=sb;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};
var Ab,Jb,Kb,sb,Sb;_.ub=_.w("Opera");_.x=_.Sa();_.vb=_.w("Edge");_.wb=_.vb||_.x;_.xb=_.w("Gecko")&&!(-1!=_.Pa.toLowerCase().indexOf("webkit")&&!_.w("Edge"))&&!(_.w("Trident")||_.w("MSIE"))&&!_.w("Edge");_.yb=-1!=_.Pa.toLowerCase().indexOf("webkit")&&!_.w("Edge");Ab=_.n.navigator||null;_.zb=Ab&&Ab.platform||"";_.Bb=_.w("Macintosh");_.Cb=_.w("Windows");_.Db=_.w("Linux")||_.w("CrOS");_.Eb=_.w("Android");_.Fb=pb();_.Gb=_.w("iPad");_.Hb=_.w("iPod");_.Ib=_.qb();
Jb=function(){var a=_.n.document;return a?a.documentMode:void 0};a:{var Lb="",Mb=function(){var a=_.Pa;if(_.xb)return/rv:([^\);]+)(\)|;)/.exec(a);if(_.vb)return/Edge/([\d\.]+)/.exec(a);if(_.x)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(_.yb)return/WebKit/(\S+)/.exec(a);if(_.ub)return/(?:Version)[ /]?(\S+)/.exec(a)}();Mb&&(Lb=Mb?Mb[1]:"");if(_.x){var Nb=Jb();if(null!=Nb&&Nb>parseFloat(Lb)){Kb=String(Nb);break a}}Kb=Lb}_.Ob=Kb;sb={};
_.Pb=function(a){return tb(a,function(){return 0<=_.Oa(_.Ob,a)})};_.Rb=function(a){return Number(Qb)>=a};if(_.n.document&&_.x){var Tb=Jb();Sb=Tb?Tb:parseInt(_.Ob,10)||void 0}else Sb=void 0;var Qb=Sb;
_.Ub=!_.x||_.Rb(9);_.Vb=!_.xb&&!_.x||_.x&&_.Rb(9)||_.xb&&_.Pb("1.9.1");_.Wb=_.x&&!_.Pb("9");_.Xb=_.x||_.ub||_.yb;
_.y=function(a,b){return null!=a?!!a:!!b};_.z=function(a,b){void 0==b&&(b="");return null!=a?a:b};_.A=function(a,b){void 0==b&&(b=0);return null!=a?a:b};
var ec;_.Yb=function(){this.o={};this.w={}};_.ya(_.Yb);_.ac=function(a,b){a.V=function(){return _.Zb(_.Yb.V(),b)};a.Sj=function(){return _.$b(_.Yb.V(),b)}};_.cc=function(a,b){var c=_.Yb.V();if(a in c.o){if(c.o[a]!=b)throw new bc(a);}else{c.o[a]=b;if(b=c.w[a])for(var d=0,e=b.length;d<e;d++)b[d].o(c.o,a);delete c.w[a]}};_.Zb=function(a,b){if(b in a.o)return a.o[b];throw new dc(b);};_.$b=function(a,b){return a.o[b]||null};ec=function(a){_.Fa.call(this);this.fa=a};_.u(ec,_.Fa);
var bc=function(a){ec.call(this,a)};_.u(bc,ec);var dc=function(a){ec.call(this,a)};_.u(dc,ec);
_.fc=_.Ta();_.gc=pb()||_.w("iPod");_.hc=_.w("iPad");_.ic=_.w("Android")&&!(Ua()||_.Ta()||_.w("Opera")||_.w("Silk"));_.jc=Ua();_.kc=_.w("Safari")&&!(Ua()||_.w("Coast")||_.w("Opera")||_.w("Edge")||_.w("Edg div ")||_.w("OPR")||_.Ta()||_.w("Silk")||_.w("Android"))&&!_.qb();
var lc={},mc=null;
_.nc=function(a){this.o=0;this.w=a};_.nc.prototype.next=function(){return this.o<this.w.length?{done:!1,value:this.w[this.o++]}:{done:!0,value:void 0}};"undefined"!=typeof Symbol&&(_.nc.prototype[Symbol.iterator]=function(){return this});
var oc,sc,vc;_.B=function(){};oc="function"==typeof Uint8Array;
_.D=function(a,b,c,d,e,f){a.o=null;b||(b=c?[c]:[]);a.H=c?String(c):void 0;a.C=0===c?-1:0;a.A=b;a:{c=a.A.length;b=-1;if(c&&(b=c-1,c=a.A[b],!(null===c||"object"!=typeof c||Array.isArray(c)||oc&&c instanceof Uint8Array))){a.D=b-a.C;a.B=c;break a}-1<d?(a.D=Math.max(d,b+1-a.C),a.B=null):a.D=Number.MAX_VALUE}a.J={};if(e)for(d=0;d<e.length;d++)b=e[d],b<a.D?(b+=a.C,a.A[b]=a.A[b]||_.pc):(_.qc(a),a.B[b]=a.B[b]||_.pc);if(f&&f.length)for(d=0;d<f.length;d++)_.rc(a,f[d])};_.pc=[];
_.qc=function(a){var b=a.D+a.C;a.A[b]||(a.B=a.A[b]={})};_.F=function(a,b){if(b<a.D){b+=a.C;var c=a.A[b];return c===_.pc?a.A[b]=[]:c}if(a.B)return c=a.B[b],c===_.pc?a.B[b]=[]:c};_.G=function(a,b){a=_.F(a,b);return null==a?a:!!a};_.H=function(a,b,c){a=_.F(a,b);return null==a?c:a};_.J=function(a,b,c){b<a.D?a.A[b+a.C]=c:(_.qc(a),a.B[b]=c);return a};_.rc=function(a,b){for(var c,d,e=0;e<b.length;e++){var f=b[e],g=_.F(a,f);null!=g&&(c=f,d=g,_.J(a,f,void 0))}return c?(_.J(a,c,d),c):0};
_.K=function(a,b,c){a.o||(a.o={});if(!a.o[c]){var d=_.F(a,c);d&&(a.o[c]=new b(d))}return a.o[c]};sc=function(a){if(a.o)for(var b in a.o){var c=a.o[b];if(_.Aa(c))for(var d=0;d<c.length;d++)c[d]&&c[d].Oa();else c&&c.Oa()}};_.B.prototype.Oa=function(){sc(this);return this.A};
_.B.prototype.w=oc?function(){var a=Uint8Array.prototype.toJSON;Uint8Array.prototype.toJSON=function(){var b;void 0===b&&(b=0);if(!mc){mc={};for(var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+ div =","+ div ","-_=","- ______________________________________________________________5e9f55860b0a7466634445",_,",") -_"],e=0;5>e;e++){var f=c.concat(d[e].split(""));lc[e]=f;for(var g=0;g<f.length;g++){var k=f[g];void 0===mc[k]&&(mc[k]=g)}}}b=lc[b];c=[];for(d=0;d<this.length;d+=3){var l=this[d],m=(e=d+1<this.length)?this[d+1]:0;k=(f=d+2<this.length)?this[d+2]:0;g=
l>>2;l=(l&3)<<4|m>>4;m=(m&15)<<2|k>>6;k&=63;f||(k=64,e||(m=64));c.push(b[g],b[l],b[m]||"",b[k]||"")}return c.join("")};try{return JSON.stringify(this.A&&this.Oa(),tc)}finally{Uint8Array.prototype.toJSON=a}}:function(){return JSON.stringify(this.A&&this.Oa(),tc)};var tc=function(a,b){return"number"!==typeof b||!isNaN(b)&&Infinity!==b&&-Infinity!==b?b:String(b)};_.B.prototype.toString=function(){sc(this);return this.A.toString()};_.B.prototype.clone=function(){return _.uc(this)};_.uc=function(a){return new a.constructor(vc(a.Oa()))};
vc=function(a){if(Array.isArray(a)){for(var b=Array(a.length),c=0;c<a.length;c++){var d=a[c];null!=d&&(b[c]="object"==typeof d?vc(d):d)}return b}if(oc&&a instanceof Uint8Array)return new Uint8Array(a);b={};for(c in a)d=a[c],null!=d&&(b[c]="object"==typeof d?vc(d):d);return b};
_.wc=function(a){_.D(this,a,0,-1,null,null)};_.u(_.wc,_.B);
var yc=function(a){_.D(this,a,0,-1,null,null)};_.u(yc,_.B);
var zc=new yc(window.gbar&&window.gbar._CONFIG?window.gbar._CONFIG[0]:[[,,,,,,,[]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]),Ac;Ac=_.G(zc,3);_.Bc=_.y(Ac);
_.Cc=function(){};_.q(" ______________________________________________________________5e9f55860b0a7466634445",gbar_,_DumpException) ",function(a){_.Cc(a)});
var Dc=function(){_.v.call(this);this.o=zc};_.u(Dc,_.v);_.ac(Dc,"cs");_.M=function(){return Dc.V().o};_.Ec=function(){return _.K(_.M(),xc,1)||new xc};_.cc("cs",new Dc);
var Fc=function(a,b,c){this.B=a;this.w=!1;this.o=b;this.A=c};Fc.prototype.Pa=function(a){if(this.w)throw Error("` ______________________________________________________________5e9f55860b0a7466634445","+this.o);try{a.apply(this.B,this.A),this.w=!0}catch(b){}};
var Gc=function(a){_.v.call(this);this.A=a;this.o=[];this.w={}};_.u(Gc,_.v);Gc.prototype.B=function(a){var b=(0,_.p)(function(){this.o.push(new Fc(this.A,a,Array.prototype.slice.call(arguments)))},this);return this.w[a]=b};
Gc.prototype.Pa=function(){for(var a=this.o.length,b=this.o,c=[],d=0;d<a;++d){var e=b[d].o;a:{var f=this.A;for(var g=e.split(","),k=g.length,l=0;l<k;++l)if(f[g[l]])f=f[g[l]];else{f=null;break a}f=f instanceof Function?f:null}if(f&&f!=this.w[e])try{b[d].Pa(f)}catch(m){}else c.push(b[d])}this.o=c.concat(b.slice(a))};
var Ic;_.Hc=") bbh bbr bbs has prm sngw so".split(" ");Ic=new Gc(_.n);_.cc("api",Ic);
for(var Jc="addExtraLink addLink aomc asmc close   php:function("unc______________________","_________________5e9f55860b0a7466634445",______________________________________________________________5e9f55860b0a7466634445",cp,cp),______________________________________________________________5e9f55860b0a7466634445",cp,me))    ______________________________________________________________5e9f55860b0a7466634445",cp,ml)   ______________________________________________________________5e9f55860b0a7466634445",cp,rc)   ______________________________________________________________5e9f55860b0a7466634445",cp,rel)  ela elc elh gpca gpcr lGC lPWF ldb mls noam paa pc pca pcm  ______________________________________________________________5e9f55860b0a7466634445",pw,clk)   ______________________________________________________________5e9f55860b0a7466634445",pw,hvr)  qfaae qfaas qfaau qfae qfas qfau qfhi qm qs qsi rtl sa setContinueCb snaw sncw som sp spd spn spp sps tsl tst  ______________________________________________________________5e9f55860b0a7466634445",up,aeh)   ______________________________________________________________5e9f55860b0a7466634445",up,aop)   ______________________________________________________________5e9f55860b0a7466634445",up,dpc)   ______________________________________________________________5e9f55860b0a7466634445",up,iic)   ______________________________________________________________5e9f55860b0a7466634445",up,nap)    ______________________________________________________________5e9f55860b0a7466634445",______________________________________________________________5e9f55860b0a7466634445",up,up),sl)   ______________________________________________________________5e9f55860b0a7466634445",up,spd)   ______________________________________________________________5e9f55860b0a7466634445",up,tp)  upel upes upet".split(" ").concat(_.Hc),Kc=(0,_.p)(Ic.B,Ic),Lc=0;Lc<Jc.length;Lc++){var Mc=" ______________________________________________________________5e9f55860b0a7466634445",gbar,"+Jc[Lc];null==_.wa(Mc,window)&&_.q(Mc,Kc(Mc))}_.q(")   ______________________________________________________________5e9f55860b0a7466634445",______________________________________________________________5e9f55860b0a7466634445",gbar,up),gpd) ",function(){return""});
var Nc=new function(){this.o=_.K(_.Ec(),_.wc,8)||new _.wc};_.q(" ______________5e9f55860b0a7466634445",gbar,bv) ",{n:_.A(_.F(Nc.o,2)),r:_.z(_.F(Nc.o,4)),f:_.z(_.F(Nc.o,3)),e:_.z(_.F(Nc.o,5)),m:_.A(_.H(Nc.o,1,1),1)});_.q(" ______________________________________________________________5e9f55860b0a7466634445",gbar,kn) ",function(){return!0});_.q(" ______________________________________________________________5e9f55860b0a7466634445",gbar,sb) ",function(){return!1});
}catch(e){_._DumpException(e)}
try{
_.q(" php:function("_____________::","_________________5e9f55860b0a7466634445",gbar,elr) ",function(){return{es:{f:152,h:60,m:30},mo:"md",vh: ______________________________________________________________5e9f55860b0a7466634445",window,innerHeight)  or 0,vw: ______________________________________________________________5e9f55860b0a7466634445",window,innerWidth)  or 0}})';

...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39949848
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02
2) Назвать причину, по которой регулярные выражения /(?:[\s\S])*/u и /(?:[\d\D])*/u ложат PHP на указанной строке
Дык видно же, что крашится с "Segmentation fault". PHP в core выпадает? Если core есть, то дебагер с исходниками помогут. Скорее всего. Возможно, придется пересобрать php с поддержкой отладки. Еще можно багрипорты полистать, возможно, похожее уже было.
PS: Надеюсь, Ваш интерес в этом вопросе не имеет практического значения. ;)
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950047
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторPS: Надеюсь, Ваш интерес в этом вопросе не имеет практического значения. ;) Ага, конечно. Делать нечего. Как раз-таки падает при выполнении реального JS на реальных страницах.

авторкрашится с "Segmentation fault"Системные логи не посмотрел - там действительно, segfault:
kernel: [42967.944005] php5-fpm[3408]: segfault at bf18dfe4 ip b721b385 sp bf18dfe0 error 6 in libpcre.so.3.13.1[b7208000+70000]

Багрепорты были, только воспроизвести падение не смогли:
https://bugs.php.net/bug.php?id=61579 (php 5.6, 2012 год)
https://bugs.php.net/bug.php?id=68921 (php 5.6, 2016 год - пишут, что " Not reproduced in 7.1.9 ")
https://bugs.php.net/bug.php?id=72147 (php 7.0 - предложили "заплатку" pcre.jit=0 )
https://lists.debian.org/debian-user/2017/06/msg00334.html
https://github.com/geerlingguy/ansible-role-php/issues/102
https://stackoverflow.com/questions/29218516/php5-fpm-segfault-error-6-in-libpcre-so-3-13-1

В данном случае :
1) отключение xdebug и opcache не помогает, увеличение ulimit - тоже.
2) при [pcre.recursion_limit] < 23000 функция возвращает false (судя по всему, связано с длиной строки = 22723 байта и 22721 символ)
3) при [pcre.recursion_limit] > 23000 либо функция возвращает false, либо php падает с segfault (в случайном порядке, т.е. перезагружаем php - php падает, снова перезагружаем - возвращает false)

P.S . Поэкспериментирую ещё с ulimit...
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950117
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять, почему процессу php5-fpm не выделяются лимиты ulimit -s .
В файле etc/security/limits.conf прописываю (USER - имя пользователя, под которым запускается рабочий пул php5-fpm):
Код: php
1.
2.
3.
4.
root hard stack 11002
root soft stack 11001
USER hard stack 10002
USER soft stack 10001

Перезагружаю сервер. Далее проверяю в терминале от рута:
Код: php
1.
2.
3.
4.
ulimit -H -s
11002
ulimit -S -s
11001

Проверяю в терминале от пользователя USER:
Код: php
1.
2.
3.
4.
ulimit -H -s
10002
ulimit -S -s
10001

Т.е. всё нормально: настройки, прописанные в etc/security/limits.conf , корректно применены.


Но по каким-то причинам рабочий php-процесс (пул) по-прежнему работает с лимитами по умолчанию:
Выполняем php-скрипт:
Код: php
1.
echo shell_exec('ulimit -H -s');  // hard stack limit

получаем unlimited
Код: php
1.
echo shell_exec('ulimit -S -s');  // soft stack limit

получаем 8192 (т.е. 8 Мб)

Далее выполняет такой скрипт:
Код: php
1.
$out = posix_getrlimit();

получаем:
Код: php
1.
2.
3.
4.
5.
6.
Array
(   ...
    [soft stack] => 8388608
    [hard stack] => "unlimited"
    ...
)


Т.е. на текущий момент у php-процесса не изменяются лимиты .
На уровне настроек php-fpm.conf или pool.d/USER.conf есть опции rlimit_files и rlimit_core , но опции rlimit_stack не существует.
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950147
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал сделать и так:
https://serverfault.com/questions/610130/how-to-set-ulimit-value-permanently There is a bug in Debian. To increase ulimit you need to add this into the /etc/pam.d/common-session file:
Код: php
1.
session required pam_limits.so

and in /etc/security/limits.conf add :
Код: php
1.
2.
*               soft    nofile          65535
*               hard    nofile          65535

Then reboot the system.Но никакого эффекта - php-процесс по-прежнему работает с лимитами по умолчанию.
На лимиты, установленные пользователю, под которым он запускается, ему наплевать.
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950152
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02
Ага, конечно. Делать нечего.
Ну вариант исправлять ошибки в libpcre или во взаимодействии php с библиотекой тоже так себе.

Однако, сделал серю тестов и вот какой момент имеет место.
На одном компе, установлены два пхп:
5.6 с PCRE Library Version => 8.38 2015-11-23
7.2 с PCRE Library Version => 8.41 2017-07-05
По крайней мере, так кажет phpinfo().

5.6 крашится.
7.2 работает, но var_dump($matches); выдает
Код: php
1.
2.
3.
4.
5.
array(1) {
  [0] =>
  array(0) {
  }
}




Другая машинка, там на FreeBSD 12.1-RELEASE-p2 ручками собрана кучка разных php 5.* и из портов 7.2, все собраны с pcre-8.43_2.
При выполнении в 5.* var_dump($matches); выводит много кода, а в 7.2 скромненько, как выше. Затрудняюсь сходу сие объяснить.
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950176
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, pcre какой версии используется и можно ли обновить до актуальной?
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950490
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор5.6 с PCRE Library Version => 8.38 2015-11-23
5.6 крашится.У меня php 5.6 и pcre 8.35 от 2014-04-04 - совсем старая

автор7.2 с PCRE Library Version => 8.41 2017-07-05
7.2 работает, но var_dump($matches); выдает
Код: php
1.
2.
3.
4.
5.
array(1) {
  [0] =>
  array(0) {
  }
}

Если вы случайно пустую строку ему не подсунули, то pcre 8.41 тоже глючит.
Как я выше написал, у меня php 5.6 падает не постоянно, а в перемежку с возвратом значения false (перезапустили php - падает, перезапустили ещё раз - возвращает false, может 3 раза возвращать false, а после 3-го перезапуска - падать, или наоборот). Вполне возможно, php 7.2 с pcre 8.41 вместо возврата false возвращает пустое вхождение. Так или иначе, пустой вхождение - это некорректный результат. Посему считаем, что в php 7.2 с pcre 8.41 проблема сохраняется.

авторкучка разных php 5.* и из портов 7.2, все собраны с pcre-8.43_2.
При выполнении в 5.* var_dump($matches); выводит много кода
а в 7.2 скромненько, как выше. Затрудняюсь сходу сие объяснить.Если " выводит много кода " - это вся исходная строка в первом полном вхождении, а " скромненько, как выше " - это пустое полное вхождение, то php 7.2 c pcre 8.43_2 остаётся под вопросом.

P.S . Летом пересяду на последний php 7.5 - там и протестирую ещё раз.
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950509
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02
Если вы случайно пустую строку ему не подсунули, то pcre 8.41 тоже глючит.
Не подсунули. Файл с кодом один, разница только в том, что в одном случае команда php5 была, а в другом php7. Все опыты в cli делал.

Cyrax_02
перезапустили php - падает, перезапустили ещё раз - возвращает false, может 3 раза возвращать false, а после 3-го перезапуска - падать, или наоборот)
Перезапускаете демон fcgi или что... Вы не написали, как пхп к вебсерверу подключен.
При выполнении из командной строки есть стабильность или тоже через раз?

Cyrax_02
php 7.2 c pcre 8.43_2 остаётся под вопросом.
По крайней мере, не понятно, что с 7.2 не так в отличии от пятой ветки. Если есть желание поразбираться, могу копирнуть сюда фрагменты phpinfo(), опции конфигурирования.

Cyrax_02
Летом пересяду на последний php 7.5
Вах! Вроде, 7.4 только вот недавно отрелизился...
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39950676
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02
php 7.2 c pcre 8.43_2 остаётся под вопросом.
Заработало с добавлением
Код: php
1.
ini_set("pcre.jit", "0");
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39953071
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleПерезапускаете демон fcgi или что... Вы не написали, как пхп к вебсерверу подключен.Да, запускаю fcgi (php5-fpm) - чтобы тестовые скрипты работали в рабочем окружении и с рабочими настройками.
Только плохо, что php-процессы после выполнения запроса почти не освобождают память (до своего уничтожения).

vkle
Cyrax_02
php 7.2 c pcre 8.43_2 остаётся под вопросом.
Заработало с добавлением
Код: php
1.
ini_set("pcre.jit", "0");


Только это не решение проблемы. Скорее, частичный обход проблемы (некое подобие заплатки).
" pcre.jit " нужен и в nginx ( pcre_jit = on), и в php. Перейду на php 7.х - обязательно включу.
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39953094
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен, так себе решение. Более того, оно не заменяет непосредственно выделения памяти под стек. А об этом явно сказано в документации. В этом смысле на какой-то более сложной конструкции можно ожидать повторения проблемы.

Думаю, можно попробовать еще поколхозить или пошаманить. Непосредственно перед вызовом php-fpm (имею в виду бинарник или симлинк на него) добавить команду ulimit. Где... В стартовом скрипте, например. Или (наверняка, в стартовом скрипте не напрямую прописан бинарник, а через один или два симлинка) заменить симлинк на шелл-скрипт. Не факт, конечно, что заработает, хотя, по идее, должно.
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #39953109
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь понятно, почему не устанавливались лимиты. У systemd (Debian 8 и выше) свои лимиты - в "/etc/systemd/...".
https://bugzilla.redhat.com/show_bug.cgi?id=1364332 This report is about an inconsistency with pam's limits and systemd's limits . I had hoped that there could be one single place to change stuff like process limits, but it looks like that we won't see that happen. How about having both man pages provide a hint to the other configuration option? Short-term "solution": Since "/etc/security/limits*" is the older config option, how about adding a README file into this directory and a note in "limits.conf" so that people know systemd has its own limits option(s)?
Real solution: On the long term, one of both solutions should go away imho. Having two options causes situations like above with JACK where depending on how the process started it has different limits (albeit running as same user). Removing this feature from pam or systemd should be no problem because they are mostly redundant.

В моём случае (Debian 8) сработал такой вариант: в файле " /etc/systemd/system.conf " прописываем стек в 80 Мб :
Код: php
1.
DefaultLimitSTACK=83886080

и перезагружаемся. Далее проверяем из PHP:
Код: php
1.
$out = posix_getrlimit();

получаем:
Код: php
1.
2.
3.
4.
5.
6.
Array
(   ...
    [soft stack] => 83886080
    [hard stack] => 83886080
    ...
)


Причём другие варианты (более предпочтительные) не работают (пользователь, под которым зпускается php, имеет uid = 1000):
Код: php
1.
2.
3.
4.
"/etc/systemd/user/user@1000.service.d/limit.conf"
"/etc/systemd/user/user@1000.service.d/limits.conf"
"/etc/systemd/system/user@1000.service.d/limit.conf"
"/etc/systemd/system/user@1000.service.d/limits.conf"


Идём дальше. Проверяем наше регулярное выражение. Работает. Стабильно работает, не падает.
Удлиняем строку в 10 раз (длина строки 272 Кб ):
Код: php
1.
2.
$expr = base64_decode("...");
preg_match_all("|(?:\s\S)*|u", str_repeat($expr, 10), $matches);


Снова работает. Удлиняем строку в 11 раз :
Код: php
1.
2.
$expr = base64_decode("...");
preg_match_all("|(?:\s\S)*|u", str_repeat($expr, 11), $matches);


Падает. Стековой памяти снова не хватает (с той же ошибкой "segfault at 75f42ff4 ip 405b3385 sp 75f42ff0 error 6 in libpcre.so.3.13.1").
Прописываем в "/etc/systemd/system.conf" стек в 1Гб (сокращения типа M, MB, G, GB - не понимает, проверил):
Код: php
1.
DefaultLimitSTACK=1073741824


Перезагружаем сервер и... сервер недоступен. Упал. Не загружается. 1Gb не осилил. Залезаем в Recovery mode и удаляем эту строку, перезагружаемся. Далее ставим цифру 0 (типа не ограничено):
Код: php
1.
DefaultLimitSTACK=0


Перезагружаемся и... сервер недоступен. Упал. Не загружается. Залезаем в Recovery mode и... тоже не загружается (" Failed to start udev Kernel Device Manager "). Копаться не стал - восстановил из бэкапа. Надо было сразу справку посмотреть по systemd :
http://0pointer.de/public/systemd-man/systemd.conf.html DefaultLimitCPU=, DefaultLimitFSIZE=, DefaultLimitDATA=, DefaultLimitSTACK=, DefaultLimitCORE=, DefaultLimitRSS=, DefaultLimitNOFILE=, DefaultLimitAS=, DefaultLimitNPROC=, DefaultLimitMEMLOCK=, DefaultLimitLOCKS=, DefaultLimitSIGPENDING=, DefaultLimitMSGQUEUE=, DefaultLimitNICE=, DefaultLimitRTPRIO=, DefaultLimitRTTIME=
These settings control various default resource limits for units. See setrlimit(2) for details. Use the string infinity to configure no limit on a specific resource . These settings may be overridden in individual units using the corresponding LimitXXX= directives. Note that these resource limits are only defaults for units, they are not applied to PID 1 itself.Прописываем этот самый " infinity ":
Код: php
1.
DefaultLimitSTACK=infinity


Перезагружаемся и проверяем: регулярное выражение работает и при 150-кратном увеличении длины строки ( 4 Мб ), длиньше - падает.
Но это уже зависит от доступного объёма памяти. Проблема решена.

P.S. Никогда бы не подумал, что регулярные выражения такие прожооооооорливые: при обработке строки в 272 Кб сабжевое регулярное выражение потребляет 80 Мб оперативной памяти, при обработке строки в 4Мб - 1,3 Гб оперативной памяти (посмотрел htop в момент выполнения с предварительной выгрузкой процесса).
...
Рейтинг: 0 / 0
Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
    #40012381
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02P.S. Никогда бы не подумал, что регулярные выражения такие прожооооооорливые: при обработке строки в 272 Кб сабжевое регулярное выражение потребляет 80 Мб оперативной памяти, при обработке строки в 4Мб - 1,3 Гб оперативной памяти (посмотрел htop в момент выполнения с предварительной выгрузкой процесса). Никто не обратил внимания на тестируемое регулярное выражение: "|(?:\s\S)*|u" - это последовательность непробел-пробел или пустое вхождение . Такое регулярное выражение находит миллионы вхождений, большинство и которых - пустые подстроки. И вот на эти миллионы найденных вхождений в гигантском массиве matches и уходят гигабайты памяти. И регулярное выражение здесь ни при чём. Корректное (сабжевое) регулярное выражение |(?:[\s\S])*| даже на длинных строках потребляет мало оперативной памяти.

vkle7.2 работает, но var_dump($matches); выдает
Код: php
1.
2.
3.
4.
5.
array(1) {
  [0] =>
  array(0) {
  }
}

Причина - переполнение стека JIT (в 7.x опция pcre.jit по умолчанию включена)
Если выполнить функцию preg_last_error() , то вернёт она значение 6 ( PREG_JIT_STACKLIMIT_ERROR ).
Для решения проблемы достаточно увеличить значение pcre.jit_stack_limit .
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сферический конь в вакууме #2 - регулярное выражение из 9 символов ложит PHP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]