File manager - Edit - /home/webtrixia/.trash/install_hub.php
Back
<?php declare(strict_types=1); error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE); $WT_HUB_FILES = array ( 'README.txt' => '4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgV0VCVFJJWElBIEhVQiDigJQg0JjQvdGB0YLQsNC70LDRhtC40Y8K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgoxLiDQmtCw0YfQuCDQktCh0JjQp9Ca0Jgg0YTQsNC50LvQvtCy0LUg0LIg0L/QsNC/0LrQsNGC0LAg0L3QsAogICBodWIud2VidHJpeGlhLmNvbSAo0YDQsNC30LDRgNGF0LjQstC40YDQsNC90LgpCgoyLiDQntGC0LLQvtGA0Lgg0JLQldCU0J3QqtCWOgogICBodWIud2VidHJpeGlhLmNvbS9hcGkucGhwP2FjdGlvbj1pbnN0YWxsCgozLiDQktC70LXQtyDQvdCwOiBodWIud2VidHJpeGlhLmNvbQogICBhZG1pbiAvIHdlYnRyaXhpYTIwMjUKCtCk0JDQmdCb0J7QktCVOgogIGluZGV4Lmh0bWwgICAgIOKAlCDRhdGK0LEKICBhcGkucGhwICAgICAgICDigJQg0LHQsNC30LAg0LTQsNC90L3QuCArIFRlbGVncmFtCiAgb2ZmZXIuaHRtbCAgICAg4oCUINC+0YTQtdGA0YLQuAogIGNvbnRyYWN0cy5odG1sIOKAlCDQtNC+0LPQvtCy0L7RgNC4CiAgLmh0YWNjZXNzICAgICAg4oCUINGB0LjQs9GD0YDQvdC+0YHRggoKVEVMRUdSQU06INCy0LXRh9C1INC1INC90LDRgdGC0YDQvtC10L0g0LrRitC8INGC0LLQvtGPINC70LjRh9C10L0g0LDQutCw0YPQvdGCLgrQl9CwINCz0YDRg9C/0L7QsiDRh9Cw0YIg4oCUINGB0LzQtdC90LggVEdfQ0hBVF9JRCDQsiBhcGkucGhwLgrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAK', 'README_UPDATE.txt' => '4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgV0VCVFJJWElBIEhVQiDigJQg0J/Qu9Cw0YLRhNC+0YDQvNCwINC30LAg0L/RgNC10L/RgNC+0LTQsNC20LHQsCAodjMpCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAoK0JrQkNCa0JLQniDQodCVINCf0J7Qn9Cg0JDQktCYICjQv9GA0LjRh9C40L3QsNGC0LAg0LfQsCAiVW5leHBlY3RlZCB0b2tlbiAnPCciKToKCiAgMS4gYXBpLnBocCDQuNC80LDRiNC1INCi0JLQqtCg0JTQniDQt9Cw0LrQvtC00LjRgNCw0L3QuCDQtNCw0L3QvdC4INC30LAg0LHQsNC30LAg0LTQsNC90L3QuCAo0YLQstC+0LjRgtC1CiAgICAg0L7RgiBodWIud2VidHJpeGlhLmNvbSkg4oCUINC90LAg0LLRgdC10LrQuCDQvdC+0LIg0YHRitGA0LLRitGAINCz0YrRgNC80LXRiNC1INCy0LXQtNC90LDQs9CwLAogICAgINC30LDRidC+0YLQviBQSFAg0L3QtSDQvNC+0LbQtdGI0LUg0LTQsCDRgdC1INGB0LLRitGA0LbQtS4g0JLQtdGH0LUg0LPQuCDRh9C10YLQtSDQvtGCIGNvbmZpZy5waHAsCiAgICAg0LrQvtC50YLQviDRgdC1INGB0YrQt9C00LDQstCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L7RgiDQuNC90YHRgtCw0LvQsNGC0L7RgNCwICjQstC40LYg0L/Qvi3QtNC+0LvRgykuCiAgMi4g0JjQvNCw0YjQtSDQuCDRgdC40L3RgtCw0LrRgdC40YEgKGFycm93IGZ1bmN0aW9ucyksINC90LXRgdGK0LLQvNC10YHRgtC40Lwg0YHRitGBINC/0L4t0YHRgtCw0YDQuAogICAgINCy0LXRgNGB0LjQuCBQSFAg0L3QsCDQvdGP0LrQvtC4IGNQYW5lbCDRgdGK0YDQstGK0YDQuCDigJQg0L7Qv9GA0LDQstC10L3Qvi4KICAzLiDQlNC+0LHQsNCy0LXQvSDQtSDQs9C70L7QsdCw0LvQtdC9ICJzYWZldHkgbmV0IiDQsiBhcGkucGhwIOKAlCDQtNC+0YDQuCDQv9GA0Lgg0LHRitC00LXRidCwCiAgICAg0LPRgNC10YjQutCwINCy0LXRh9C1INCS0JjQndCQ0JPQmCDRidC1INC/0L7Qu9GD0YfQsNCy0LDRiCDQstCw0LvQuNC00LXQvSBKU09OLCDQvdC40LrQvtCz0LAg0YHRg9GA0L7QsgogICAgIFBIUCBIVE1MIGZhdGFsIGVycm9yICjRgtC+0LLQsCDRgtC+0YfQvdC+INGH0YPQv9C10YjQtSBKU09OLnBhcnNlINC/0YDQuCDRgtC10LEpLgogIDQuINCe0YLQutGA0LjRhSDQuCDQvtC/0YDQsNCy0LjRhSDQsdGK0LMsINC/0YDQuCDQutC+0LnRgtC+INC30LDQv9C40YEg0L3QsCDRhNC40YDQvNC10L3QuC/QsdGA0LDQvdC00LjQvdCzCiAgICAg0L3QsNGB0YLRgNC+0LnQutC4INC40LfRgtGA0LjQstCw0YjQtSDQvtGB0YLQsNC90LDQu9C40YLQtSDQvdC10L/QvtGB0L7Rh9C10L3QuCDQv9C+0LvQtdGC0LAg4oCUINCy0LXRh9C1INC1CiAgICAgItGH0LDRgdGC0LjRh9C10L0g0YrQv9C00LXQudGCIiAo0L/QuNC/0LAg0YHQsNC80L4g0LrQsNC60LLQvtGC0L4g0L/RgNCw0YnQsNGIKS4KCiAg0JLRgdC40YfQutC+INC/0L4t0LTQvtC70YMg0LUg0KDQldCQ0JvQndCeINGC0LXRgdGC0LLQsNC90L4gKNC40L3RgdGC0LDQu9C40YDQsNGFINC70L7QutCw0LvQtdC9IE15U1FMINC4CiAg0LzQuNC90LDRhSDQv9GA0LXQtyDRhtC10LvQuNGPIGluc3RhbGwg4oaSINGE0LDQutGC0YPRgNCwIOKGkiDQvNC+0LvQsdCwIOKGkiDQv9GK0YLQtdC9INC70LjRgdGCINC/0L7RgtC+0LopLgoKCtCa0JDQmiDQodCV0JPQkCDQoNCQ0JHQntCi0Jgg0JjQndCh0KLQkNCb0JDQptCY0K/QotCQICjQuNGB0YLQuNC90YHQutC4IHNlbGYtaW5zdGFsbGVyLCDQutCw0YLQviDRgdC+0YTRgtGD0LXRgCk6CgogIDEuINCd0LDQv9GA0LDQstC4INC/0L7QtNC00L7QvNC10LnQvSDQsiBjUGFuZWwgKNC90LDQv9GALiBodWIua2xpZW50LmNvbSksINC60LDRh9C4CiAgICAg0JLQodCY0KfQmtCYINGE0LDQudC70L7QstC1INC+0YIg0YLQvtC30Lgg0LDRgNGF0LjQsiDQsiDQvdC10LPQvi4KICAyLiDQkiBjUGFuZWwg4oaSIE15U1FMwq4gRGF0YWJhc2VzOiDRgdGK0LfQtNCw0Lkg0LHQsNC30LAg0LTQsNC90L3QuCArINC/0L7RgtGA0LXQsdC40YLQtdC7CiAgICAg0YEg0L/RitC70L3QuCDQv9GA0LDQstCwINCy0YrRgNGF0YMg0L3QtdGPICjQt9Cw0L/QuNGI0Lgg0YHQuCDQuNC80LUg0L3QsCDQsdCw0LfQsC/Qv9C+0YLRgNC10LHQuNGC0LXQuy/Qv9Cw0YDQvtC70LApLgogIDMuINCe0YLQstC+0YDQuCDQsiDQsdGA0LDRg9C30YrRgNCwOiBodHRwczovL9C/0L7QtNC00L7QvNC10LnQvS93X2h1Yl9pbnN0YWxsLnBocAogICAgINCh0YLRitC/0LrQsCAxINGJ0LUg0L/QvtC40YHQutCwINGC0L7Rh9C90L4g0YLQtdC30LggNCDQvdC10YnQsCAoaG9zdCDQvtCx0LjQutC90L7QstC10L3QviDQtQogICAgICJsb2NhbGhvc3QiKSDigJQg0YLQtdGB0YLQstCwINCy0YDRitC30LrQsNGC0LAg0Lgg0KHQkNCcINC/0LjRiNC1IGNvbmZpZy5waHAuCiAgICAgKNCQ0LrQviBQSFAg0L3Rj9C80LAg0L/RgNCw0LLQsCDQtNCwINC/0LjRiNC1INGE0LDQudC7LCDRidC1INGC0Lgg0LrQsNC20LUg0Lgg0LzQvtC20LXRiCDRgNGK0YfQvdC+CiAgICAg0LTQsCDQutCw0YfQuNGIIGNvbmZpZy5waHAg0L/QviDQvtCx0YDQsNC30LXRhiDQvtGCIGNvbmZpZy5leGFtcGxlLnBocC4pCiAgNC4g0KHRgtGK0L/QutCwIDI6INC40LfQsdC40YDQsNGIINGC0LjQvyDRhdGK0LEgKNCQ0LPQtdC90YbQuNGPIC8g0KHRgtGA0L7QuNGC0LXQu9C90LAt0YLRgNCw0L3RgdC/0L7RgNGC0L3QsCAvCiAgICAg0J7QsdGJKS4KICA1LiDQodGC0YrQv9C60LAgMzog0LTQsNC90L3QuCDQvdCwINGE0LjRgNC80LDRgtCwICsg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60Lgg0LTQvtGB0YLRitC/LgogIDYuICLQmNC90YHRgtCw0LvQuNGA0LDQuSIg4oaSINGB0YrQt9C00LDQstCwINCy0YHQuNGH0LrQuCDRgtCw0LHQu9C40YbQuCwg0LPQtdC90LXRgNC40YDQsCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0LjQstC10L0KICAgICDQutC70Y7RhyAobGljZW5zZSBrZXkpINC4INGC0Lgg0L/QvtC60LDQt9Cy0LAg0LvQvtCz0LjQvSDQtNCw0L3QvdC40YLQtSDigJQg0JXQlNCd0JDQli4KCiAgY29uZmlnLnBocCDQndCVINGB0LUg0LrQsNGH0LLQsCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70L3QviDQsiDQsNGA0YXQuNCy0LAg0L3QsNGA0L7Rh9C90L4g4oCUINCy0YHQtdC60LgKICDQutC70LjQtdC90YIv0YHRitGA0LLRitGAINGC0YDRj9Cx0LLQsCDQtNCwINC/0L7Qu9GD0YfQuCDRgdC+0LHRgdGC0LLQtdC9LCDQs9C10L3QtdGA0LjRgNCw0L0g0L/RgNC4INC40L3RgdGC0LDQu9Cw0YbQuNGPLgoKCtCe0KHQotCQ0J3QkNCb0J7QotCeICjQvdC10L/RgNC+0LzQtdC90LXQvdC+INGB0L/RgNGP0LzQviDQv9GA0LXQtNC90LDRgtCwINCy0LXRgNGB0LjRjyk6CgogIHdfYWRtaW4ucGhwIOKAlCDQutC+0L3RgtGA0L7Qu9C10L0g0L/QsNC90LXQuyDQt9Cw0LQg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdC40Y8g0LrQu9GO0Yc6CiAgICDwn46oINCR0YDQsNC90LTQuNC90LMsIPCfp6kg0JzQvtC00YPQu9C4ICjQstC60Lsv0LjQt9C60LspLCDwn5SRINCb0LjRhtC10L3Qtywg8J+SviDQlNCw0L3QvdC4CiAgICAo0LHQtdC60YrQvy9yZXN0b3JlINC30LAg0LzQtdGB0YLQtdC90LUg0L3QsCDQtNGA0YPQsyDRhdC+0YHRgtC40L3QsyksIPCfj6Ig0JrQu9C40LXQvdGC0YHQutC4CiAgICDRhdGK0LHQvtCy0LUgKNC00LjRgdGC0LDQvdGG0LjQvtC90L3QviDQstC60LvRjtGH0LLQsNC90LUv0LjQt9C60LvRjtGH0LLQsNC90LUg0L3QsCDQvNC+0LTRg9C70Lgg0L/RgNC4CiAgICDQstC10YfQtSDQv9GA0L7QtNCw0LTQtdC90Lgg0LjQvdGB0YLQsNC70LDRhtC40LgpLCDimqDvuI8g0J7Qv9Cw0YHQvdCwINC30L7QvdCwICjRhNCw0LHRgNC40YfQvdC+CiAgICDQvdGD0LvQuNGA0LDQvdC1ICsg0YLRgNCw0LnQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwIHdfYWRtaW4ucGhwL3dfaHViX2luc3RhbGwucGhwCiAgICDQv9GA0LXQtNC4INC00LAg0L/RgNC10LTQsNC00LXRiCDQvdCwINC60LvQuNC10L3RgtCwKS4KCiAgd2F5YmlsbHMuaHRtbCDigJQg0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtSAo0JzQn9ChLCDRiNC+0YTRjNC+0YAsINC80LDRgNGI0YDRg9GCLCDQutC8LAogICAg0LPQvtGA0LjQstC+LCDRgdGC0LDRgtGD0YEg0LDQutGC0LjQstC10L0v0L3QtdCw0LrRgtC40LLQtdC9L9C/0YDQuNC60LvRjtGH0LXQvSwg0L/QtdGH0LDRgikuCgogIGhyLmh0bWwg4oCUINCc0L7Qu9Cx0Lgg0LLQtdGH0LUg0YEg0YDQtdCw0LvQvdC+ICLinJMg0J7QtNC+0LHRgNC4IC8g4pyVINCe0YLQutCw0LbQuCIuCgogIGludm9pY2UtZG9jLmh0bWwg4oCUINC/0LXRh9Cw0YLRitGCINC1INGE0LjQutGB0LjRgNCw0L0gKEE0LCDRhtCy0LXRgtC+0LLQtdGC0LUg0LjQt9C70LjQt9Cw0YIsCiAgICDQsdC10Lcg0YfRg9C/0LXQvdC1INC90LAg0YDQtdC00L7QstC1INC80LXQttC00YMg0YHRgtGA0LDQvdC40YbQuCkuCgoK0KDQkNCR0J7QotCV0J0g0J/QoNCe0KbQldChINCX0JAg0J/QoNCe0JTQkNCW0JHQkCDQndCQINCa0JvQmNCV0J3QojoKCiAgMS4g0J3QvtCyINC/0L7QtNC00L7QvNC10LnQvS/RhdC+0YHRgtC40L3QsyDRgSDQv9GA0LDQt9C90LAgTXlTUUwg0LHQsNC30LAg4oaSINC40L3RgdGC0LDQu9C40YDQsNGIINC/0YDQtdC3CiAgICAgd19odWJfaW5zdGFsbC5waHAgKNCy0LjQtiDQv9C+LdCz0L7RgNC1KS4KICAyLiDQndCw0YHRgtGA0L7QudCy0LDRiCDQu9C+0LPQvi/RhtCy0LXRgtC+0LLQtS/QvNC+0LTRg9C70Lgg0L/RgNC10Lcgd19hZG1pbi5waHAuCiAgMy4g0J/QviDQttC10LvQsNC90LjQtTog0YDQtdCz0LjRgdGC0YDQuNGA0LDRiCDQvdC+0LLQuNGPINGF0YrQsSDQsiDQotCS0J7QryBodWIud2VidHJpeGlhLmNvbQogICAgIOKGkiB3X2FkbWluLnBocCDihpIgItCa0LvQuNC10L3RgtGB0LrQuCDRhdGK0LHQvtCy0LUiIChVUkwgKyDQutC70Y7RhyksINC30LAg0LTQsCDQvNC+0LbQtdGICiAgICAg0L/QvtGB0LvQtSDQtNC40YHRgtCw0L3RhtC40L7QvdC90L4g0LTQsCDQvNGDINCy0LrQu9GO0YfQstCw0Ygv0LjQt9C60LvRjtGH0LLQsNGIINC80L7QtNGD0LvQuC4KICA0LiDQn9GA0LXQtNC4INC/0YDQtdC00LDQstCw0L3QtSDQvdCwINC60LvQuNC10L3RgtCwOiB3X2FkbWluLnBocCDihpIgItCe0L/QsNGB0L3QsCDQt9C+0L3QsCIg4oaSCiAgICAg0LjQt9GC0YDQuNCy0LDRiCB3X2FkbWluLnBocCArIHdfaHViX2luc3RhbGwucGhwICjQuNC70Lgg0YHQsNC80L4g0LfQsNC60LvRjtGH0LLQsNGIKS4KCgrQodCb0JXQlNCS0JDQqdCYINCc0J7QlNCj0JvQmCAo0L/QviDQttC10LvQsNC90LjQtSwg0LrQsNC20Lgg0LrQvtC5INC1INC/0YDQuNC+0YDQuNGC0LXRgik6CiAg4oCiINCi0YDRg9C00L7QstC4INC00L7Qs9C+0LLQvtGA0Lgv0LfQsNC/0L7QstC10LTQuCDQs9C10L3QtdGA0LDRgtC+0YAKICDigKIg0JHQvtC70L3QuNGH0L3QuCDQu9C40YHRgtC+0LLQtQogIOKAoiDQlNGK0LvQs9C+0YLRgNCw0LnQvdC4INCw0LrRgtC40LLQuCAvINC40L3QstC10L3RgtCw0YAKICDigKIg0KHRgtC+0LrQvtCy0Lgg0YDQsNC30L/QuNGB0LrQuCAvINC/0YDQuNC10LzQvi3Qv9GA0LXQtNCw0LLQsNGC0LXQu9C90Lgg0L/RgNC+0YLQvtC60L7Qu9C4CiAg4oCiINCa0LvQuNC10L3RgtGB0LrQuCDQv9C+0YDRgtCw0LsgKNC60LvQuNC10L3RgtC40YLQtSDQstC40LbQtNCw0YIg0YHQsNC80L4g0YHQstC+0LjRgtC1INC00L7QutGD0LzQtdC90YLQuCkKICDigKIg0JLRitGC0YDQtdGI0LXQvSDRhtC10L3RgtGK0YAg0LfQsCDQuNC30LLQtdGB0YLQuNGPCiAg4oCiINCQ0LLRgtC+0LzQsNGC0LjRh9C10L0g0L3QvtGJ0LXQvSDQsdC10LrRitC/INC/0YDQtdC3IGNyb24KICDigKIgR0RQUiDRgNC10LPQuNGB0YLRitGAINC90LAg0LfQsNGP0LLQutC4CgrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAK', 'api.php' => 'PD9waHAKaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46IConKTsKaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzOiBHRVQsIFBPU1QsIERFTEVURSwgT1BUSU9OUycpOwpoZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM6IENvbnRlbnQtVHlwZScpOwppZigkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXT09PSdPUFRJT05TJyl7aHR0cF9yZXNwb25zZV9jb2RlKDIwMCk7ZXhpdDt9CgovLyDilIDilIAgQ09ORklHIChjcmVhdGVkIGJ5IHdfaHViX2luc3RhbGwucGhwIG9uIGZpcnN0IHJ1biDigJQgbmV2ZXIgaGFyZGNvZGVkIGhlcmUpIOKUgOKUgAppZighZmlsZV9leGlzdHMoX19ESVJfXy4nL2NvbmZpZy5waHAnKSl7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoMjAwKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9Pidub19jb25maWcnLAogICAgICAgICdtZXNzYWdlJz0+J9CR0LDQt9Cw0YLQsCDQtNCw0L3QvdC4INC90LUg0LUg0LrQvtC90YTQuNCz0YPRgNC40YDQsNC90LAuINCe0YLQstC+0YDQuCB3X2h1Yl9pbnN0YWxsLnBocCwg0LfQsCDQtNCwINC40L3RgdGC0LDQu9C40YDQsNGIINGF0YrQsdCwINC90LAg0YLQvtC30Lgg0YHRitGA0LLRitGALiddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQpyZXF1aXJlIF9fRElSX18uJy9jb25maWcucGhwJzsKaWYoIWRlZmluZWQoJ1RHX1RPS0VOJykpIGRlZmluZSgnVEdfVE9LRU4nLCcnKTsKaWYoIWRlZmluZWQoJ1RHX0NIQVRfSUQnKSkgZGVmaW5lKCdUR19DSEFUX0lEJywnJyk7CgovLyDilIDilIAgU0FGRVRZIE5FVDogbmV2ZXIgbGV0IGEgUEhQIGVycm9yL2V4Y2VwdGlvbiBsZWFrIHJhdyBIVE1MIHRvIHRoZSBmcm9udGVuZCDilIDilIAKc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGZ1bmN0aW9uKCRlKXsKICAgIGlmKG9iX2dldF9sZW5ndGgoKSkgb2JfY2xlYW4oKTsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PifQodGK0YDQstGK0YDQvdCwINCz0YDQtdGI0LrQsDogJy4kZS0+Z2V0TWVzc2FnZSgpXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0pOwpzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbigkc2V2ZXJpdHksJG1lc3NhZ2UsJGZpbGUsJGxpbmUpewogICAgaWYoIShlcnJvcl9yZXBvcnRpbmcoKSAmICRzZXZlcml0eSkpIHJldHVybiBmYWxzZTsKICAgIHRocm93IG5ldyBFcnJvckV4Y2VwdGlvbigkbWVzc2FnZSwwLCRzZXZlcml0eSwkZmlsZSwkbGluZSk7Cn0pOwoKZnVuY3Rpb24gdGcoJG1zZywgJGNoYXRJZD1udWxsKXsKICAgICRjaGF0ID0gJGNoYXRJZCA/OiBUR19DSEFUX0lEOwogICAgaWYoZW1wdHkoJGNoYXQpKSByZXR1cm47CiAgICB0cnkgewogICAgICAgICR1cmw9J2h0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3QnLlRHX1RPS0VOLicvc2VuZE1lc3NhZ2UnOwogICAgICAgICRwYXlsb2FkPWpzb25fZW5jb2RlKFsnY2hhdF9pZCc9PiRjaGF0LCd0ZXh0Jz0+JG1zZywncGFyc2VfbW9kZSc9PidIVE1MJ10pOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpewogICAgICAgICAgICAkY2g9Y3VybF9pbml0KCR1cmwpOwogICAgICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsWwogICAgICAgICAgICAgICAgQ1VSTE9QVF9QT1NUPT50cnVlLAogICAgICAgICAgICAgICAgQ1VSTE9QVF9QT1NURklFTERTPT4kcGF5bG9hZCwKICAgICAgICAgICAgICAgIENVUkxPUFRfSFRUUEhFQURFUj0+WydDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nXSwKICAgICAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVI9PnRydWUsCiAgICAgICAgICAgICAgICBDVVJMT1BUX1RJTUVPVVQ9PjUsCiAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSPT5mYWxzZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOwogICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG9wdHM9WydodHRwJz0+WydtZXRob2QnPT4nUE9TVCcsJ2hlYWRlcic9PidDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ2NvbnRlbnQnPT4kcGF5bG9hZCwndGltZW91dCc9PjMsJ2lnbm9yZV9lcnJvcnMnPT50cnVlXV07CiAgICAgICAgICAgIEBmaWxlX2dldF9jb250ZW50cygkdXJsLGZhbHNlLHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkb3B0cykpOwogICAgICAgIH0KICAgIH0gY2F0Y2goRXhjZXB0aW9uICRlKXsgLyogc2lsZW50IGZhaWwgKi8gfQp9CgovLyDilIDilIAgREIg4pSA4pSACmZ1bmN0aW9uIGRiKCl7CiAgICBzdGF0aWMgJHA7CiAgICBpZighJHApewogICAgICAgIHRyeXsKICAgICAgICAgICAgJHA9bmV3IFBETygnbXlzcWw6aG9zdD0nLkRCX0hPU1QuJztkYm5hbWU9Jy5EQl9OQU1FLic7Y2hhcnNldD11dGY4bWI0JywKICAgICAgICAgICAgICAgIERCX1VTRVIsREJfUEFTUyxbUERPOjpBVFRSX0VSUk1PREU9PlBETzo6RVJSTU9ERV9FWENFUFRJT04sCiAgICAgICAgICAgICAgICBQRE86OkFUVFJfREVGQVVMVF9GRVRDSF9NT0RFPT5QRE86OkZFVENIX0FTU09DXSk7CiAgICAgICAgfWNhdGNoKFBET0V4Y2VwdGlvbiAkZSl7CiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOwogICAgICAgICAgICBkaWUoanNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PidEQjogJy4kZS0+Z2V0TWVzc2FnZSgpXSkpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcDsKfQpmdW5jdGlvbiBvaygkZCl7ZWNobyBqc29uX2VuY29kZShbJ29rJz0+dHJ1ZSwnZGF0YSc9PiRkXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTtleGl0O30KZnVuY3Rpb24gZXJyKCRtKXtodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTtlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4kbV0sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDt9CmZ1bmN0aW9uIGJvZHkoKXtyZXR1cm4ganNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0JyksdHJ1ZSk/P1tdO30KZnVuY3Rpb24gaHViX3Nlc3Npb25faXNfYWRtaW4oKTogYm9vbCB7CiAgICByZXR1cm4gIWVtcHR5KCRfU0VTU0lPTlsnaHViX2lzX2FkbWluJ10pOwp9CmZ1bmN0aW9uIHJlcXVpcmVIdWJBZG1pbk9yU2VjcmV0KCRwZG8sICRzZWNyZXQpOiB2b2lkIHsKICAgIGlmIChodWJfc2Vzc2lvbl9pc19hZG1pbigpKSByZXR1cm47CiAgICBjaGVja0xpY2Vuc2UoJHBkbywgJHNlY3JldCk7Cn0KZnVuY3Rpb24gY2xpZW50SXAoKTogc3RyaW5nIHsKICAgIGZvcmVhY2goWydIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCdIVFRQX1hfUkVBTF9JUCcsJ0hUVFBfWF9GT1JXQVJERURfRk9SJywnUkVNT1RFX0FERFInXSBhcyAkayl7CiAgICAgICAgJHY9JF9TRVJWRVJbJGtdPz8nJzsKICAgICAgICBpZighJHYpIGNvbnRpbnVlOwogICAgICAgICRpcD10cmltKGV4cGxvZGUoJywnLCAkdilbMF0pOwogICAgICAgIGlmKGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVApKSByZXR1cm4gJGlwOwogICAgfQogICAgcmV0dXJuICcnOwp9CgovLyDilIDilIAgRE9DVU1FTlQgTlVNQkVSSU5HIOKUgOKUgApmdW5jdGlvbiBuZXh0RG9jTnVtYmVyKCRwZG8sJHR5cGUpewogICAgJHllYXI9ZGF0ZSgnWScpOwogICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gZG9jX2NvdW50ZXJzICh0eXBlLHllYXIsY291bnRlcikgVkFMVUVTICg/LD8sMSkKICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBjb3VudGVyPWNvdW50ZXIrMSIpLT5leGVjdXRlKFskdHlwZSwkeWVhcl0pOwogICAgJGM9JHBkby0+cHJlcGFyZSgiU0VMRUNUIGNvdW50ZXIgRlJPTSBkb2NfY291bnRlcnMgV0hFUkUgdHlwZT0/IEFORCB5ZWFyPT8iKTsKICAgICRjLT5leGVjdXRlKFskdHlwZSwkeWVhcl0pOwogICAgcmV0dXJuIHN0cl9wYWQoKHN0cmluZykkYy0+ZmV0Y2hDb2x1bW4oKSwxMCwnMCcsU1RSX1BBRF9MRUZUKTsKfQoKLy8g4pSA4pSAIFJBVyBTTVRQIFNFTkRFUiAobm8gZXh0ZXJuYWwgbGlicmFyaWVzIG5lZWRlZCkg4pSA4pSACmZ1bmN0aW9uIHNtdHBTZW5kKCRob3N0LCRwb3J0LCRzZWN1cmUsJHVzZXIsJHBhc3MsJGZyb21FbWFpbCwkZnJvbU5hbWUsJHRvLCRzdWJqZWN0LCRodG1sQm9keSl7CiAgICAkZXJybm89MDskZXJyc3RyPScnOwogICAgJGZwPUBmc29ja29wZW4oKCRzZWN1cmU9PT0nc3NsJz8nc3NsOi8vJzonJykuJGhvc3QsKGludCkkcG9ydCwkZXJybm8sJGVycnN0ciwxMik7CiAgICBpZighJGZwKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb25uZWN0IGZhaWxlZDogJy4kZXJyc3RyKTsKICAgIHN0cmVhbV9zZXRfdGltZW91dCgkZnAsMTIpOwogICAgJHJlYWQ9ZnVuY3Rpb24oKSB1c2UgKCRmcCl7ICRkPScnOyB3aGlsZSgkc3RyPWZnZXRzKCRmcCw1MTUpKXsgJGQuPSRzdHI7IGlmKGlzc2V0KCRzdHJbM10pJiYkc3RyWzNdPT09JyAnKSBicmVhazsgfSByZXR1cm4gJGQ7IH07CiAgICAkd3JpdGU9ZnVuY3Rpb24oJGNtZCkgdXNlICgkZnApeyBmd3JpdGUoJGZwLCRjbWQuIlxyXG4iKTsgfTsKICAgICRyZWFkKCk7CiAgICAkd3JpdGUoJ0VITE8gd2VidHJpeGlhLmNvbScpOyAkcmVhZCgpOwogICAgaWYoJHNlY3VyZT09PSd0bHMnKXsKICAgICAgICAkd3JpdGUoJ1NUQVJUVExTJyk7ICRyZWFkKCk7CiAgICAgICAgc3RyZWFtX3NvY2tldF9lbmFibGVfY3J5cHRvKCRmcCx0cnVlLFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU19DTElFTlQpOwogICAgICAgICR3cml0ZSgnRUhMTyB3ZWJ0cml4aWEuY29tJyk7ICRyZWFkKCk7CiAgICB9CiAgICAkd3JpdGUoJ0FVVEggTE9HSU4nKTsgJHJlYWQoKTsKICAgICR3cml0ZShiYXNlNjRfZW5jb2RlKCR1c2VyKSk7ICRyZWFkKCk7CiAgICAkd3JpdGUoYmFzZTY0X2VuY29kZSgkcGFzcykpOyAkcj0kcmVhZCgpOwogICAgaWYoc3RycG9zKCRyLCcyMzUnKT09PWZhbHNlKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdTTVRQIGF1dGggZmFpbGVkOiAnLiRyKTsKICAgICR3cml0ZSgnTUFJTCBGUk9NOiA8Jy4kZnJvbUVtYWlsLic+Jyk7ICRyZWFkKCk7CiAgICAkd3JpdGUoJ1JDUFQgVE86IDwnLiR0by4nPicpOyAkcmVhZCgpOwogICAgJHdyaXRlKCdEQVRBJyk7ICRyZWFkKCk7CiAgICAkaGVhZGVycyA9IkZyb206ID0/VVRGLTg/Qj8iLmJhc2U2NF9lbmNvZGUoJGZyb21OYW1lKS4iPz0gPHskZnJvbUVtYWlsfT5cclxuIjsKICAgICRoZWFkZXJzLj0iVG86IDx7JHRvfT5cclxuIjsKICAgICRoZWFkZXJzLj0iU3ViamVjdDogPT9VVEYtOD9CPyIuYmFzZTY0X2VuY29kZSgkc3ViamVjdCkuIj89XHJcbiI7CiAgICAkaGVhZGVycy49Ik1JTUUtVmVyc2lvbjogMS4wXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XHJcbiI7CiAgICAkd3JpdGUoJGhlYWRlcnMuIlxyXG4iLiRodG1sQm9keS4iXHJcbi4iKTsKICAgICRyPSRyZWFkKCk7CiAgICAkd3JpdGUoJ1FVSVQnKTsgZmNsb3NlKCRmcCk7CiAgICBpZihzdHJwb3MoJHIsJzI1MCcpPT09ZmFsc2UpIHRocm93IG5ldyBFeGNlcHRpb24oJ1NlbmQgZmFpbGVkOiAnLiRyKTsKICAgIHJldHVybiB0cnVlOwp9CgokYWN0aW9uPSRfR0VUWydhY3Rpb24nXT8/Jyc7CiRtZXRob2Q9JF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ107CmlmKHNlc3Npb25fc3RhdHVzKCk9PT1QSFBfU0VTU0lPTl9OT05FKSBzZXNzaW9uX3N0YXJ0KCk7CgpmdW5jdGlvbiBodWJfbGljZW5zZV9zdGF0dXMoKXsKICAgIHN0YXRpYyAkc3RhdHVzPW51bGw7CiAgICBpZigkc3RhdHVzIT09bnVsbCkgcmV0dXJuICRzdGF0dXM7CiAgICAkZ3VhcmQ9X19ESVJfXy4nL2xpY2Vuc2VzL2NsaWVudC9ndWFyZC5waHAnOwogICAgaWYoIWZpbGVfZXhpc3RzKCRndWFyZCkpewogICAgICAgIHJldHVybiAkc3RhdHVzPVsnc3RhdGUnPT4nYWN0aXZlJywnbW9kdWxlcyc9PltdLCdtZXNzYWdlJz0+J9Cb0L7QutCw0LvQtdC9INGA0LXQttC40LwuJywnb2ZmbGluZSc9PnRydWVdOwogICAgfQogICAgdHJ5ewogICAgICAgIHJlcXVpcmVfb25jZSAkZ3VhcmQ7CiAgICAgICAgcmV0dXJuICRzdGF0dXM9d3RfZ3VhcmRfc3RhdHVzKCk7CiAgICB9Y2F0Y2goVGhyb3dhYmxlICRlKXsKICAgICAgICByZXR1cm4gJHN0YXR1cz1bJ3N0YXRlJz0+J2FjdGl2ZScsJ21vZHVsZXMnPT5bXSwnbWVzc2FnZSc9PifQm9C40YbQtdC90LfQvdC40Y/RgiDQutC+0L3RgtGA0L7QuyDQtSDQstGA0LXQvNC10L3QvdC+INC90LXQtNC+0YHRgtGK0L/QtdC9LicsJ29mZmxpbmUnPT50cnVlXTsKICAgIH0KfQoKaWYoJGFjdGlvbj09PSdsaWNlbnNlX3N0YXR1cycpewogICAgb2soaHViX2xpY2Vuc2Vfc3RhdHVzKCkpOwp9CgokbGljZW5zZVB1YmxpY0FjdGlvbnM9WydpbnN0YWxsJywnaW5zdGFsbF9wbGF0Zm9ybScsJ2luc3RhbGxfaW52b2ljaW5nJywnYnJhbmRpbmdfc2V0dGluZ3MnLCdsaWNlbnNlX3N0YXR1cycsJ3Rlc3QnLCd0Z191cGRhdGVzJywndGdfc2V0X2NoYXQnXTsKaWYoIWluX2FycmF5KCRhY3Rpb24sJGxpY2Vuc2VQdWJsaWNBY3Rpb25zLHRydWUpKXsKICAgICRscz1odWJfbGljZW5zZV9zdGF0dXMoKTsKICAgIGlmKGluX2FycmF5KCRsc1snc3RhdGUnXT8/J2FjdGl2ZScsWydsb2NrZWQnLCdpbnZhbGlkJ10sdHJ1ZSkpewogICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDIpOwogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PidsaWNlbnNlX2xvY2tlZCcsJ2xpY2Vuc2UnPT4kbHMsCiAgICAgICAgICAgICdtZXNzYWdlJz0+JGxzWydtZXNzYWdlJ10/PyfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJ10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKLy8g4pSA4pSAIElOU1RBTEwg4pSA4pSACmlmKCRhY3Rpb249PT0naW5zdGFsbCcpewogICAgJHBkbz1kYigpOwogICAgJHRhYmxlcz1bIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHVzZXJzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgdXNlcm5hbWUgVkFSQ0hBUigxMDApIFVOSVFVRSBOT1QgTlVMTCwKICAgICAgICBwYXNzd29yZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgbmFtZSBWQVJDSEFSKDEwMCksCiAgICAgICAgcm9sZSBWQVJDSEFSKDEwMCksCiAgICAgICAgaW5pdGlhbHMgVkFSQ0hBUig1KSwKICAgICAgICBjb2xvciBWQVJDSEFSKDIwKSBERUZBVUxUICdhdi1wJywKICAgICAgICBpc19hZG1pbiBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBvbmxpbmUgVElOWUlOVCgxKSBERUZBVUxUIDEsCiAgICAgICAgdGVsZWdyYW1fY2hhdF9pZCBWQVJDSEFSKDUwKSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcHJvamVjdHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGNsaWVudCBWQVJDSEFSKDI1NSkscGhvbmUgVkFSQ0hBUigxMDApLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDUwKSBERUZBVUxUICduZXcnLAogICAgICAgIHRvdGFsIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLHJlY2VpdmVkIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLAogICAgICAgIHN0YXJ0X2RhdGUgREFURSBOVUxMLGRlYWRsaW5lIERBVEUgTlVMTCxwcm9ncmVzcyBJTlQgREVGQVVMVCAwLAogICAgICAgIGFzc2lnbmVlIFZBUkNIQVIoMTAwKSx0YWdzIFRFWFQscmVjdXJyaW5nIFZBUkNIQVIoMjApLG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIsIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRhc2tzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSx0ZXh0IFRFWFQgTk9UIE5VTEwsCiAgICAgICAgYXNzaWduZWUgVkFSQ0hBUigxMDApLHVyZ2VudCBUSU5ZSU5UKDEpIERFRkFVTFQgMCxkb25lIFRJTllJTlQoMSkgREVGQVVMVCAwLAogICAgICAgIGR1ZV9kYXRlIERBVEVUSU1FIE5VTEwsbm90ZSBURVhULAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBub3RlcyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksdGl0bGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGJvZHkgVEVYVCxhdXRob3IgVkFSQ0hBUigxMDApLHVyZ2VudCBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY2xpZW50cyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksbmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgY29tcGFueSBWQVJDSEFSKDI1NSksZW1haWwgVkFSQ0hBUigyNTUpLHBob25lIFZBUkNIQVIoMTAwKSxlaWsgVkFSQ0hBUig1MCksbm90ZXMgVEVYVCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgaG9zdGluZyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksZG9tYWluIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICAgICAgICBjbGllbnQgVkFSQ0hBUigyNTUpLHNlcnZlciBWQVJDSEFSKDI1NSksdHlwZSBWQVJDSEFSKDUwKSxkaXNrIFZBUkNIQVIoNTApLHBsYW4gVkFSQ0hBUig1MCksCiAgICAgICAgc3NsX2V4cGlyZXMgREFURSBOVUxMLGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBwYXNzd29yZHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLHNpdGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIHVzZXJuYW1lIFZBUkNIQVIoMjU1KSxwYXNzIFZBUkNIQVIoNTAwKSxjYXRlZ29yeSBWQVJDSEFSKDUwKSxjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBvZmZlcnMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLG51bSBWQVJDSEFSKDUwKSxjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIHNlcnZpY2UgVkFSQ0hBUigyNTUpLHRvdGFsIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLHN0YXR1cyBWQVJDSEFSKDUwKSBERUZBVUxUICfQp9Cw0LrQsNGJ0LAnLAogICAgICAgIG9mZmVyX3R5cGUgVkFSQ0hBUigzMCkgREVGQVVMVCAnb25lX3RpbWUnLAogICAgICAgIGRldGFpbHMgTE9OR1RFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIsIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGNvbnRyYWN0cyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksbmFtZSBWQVJDSEFSKDI1NSksY2xpZW50IFZBUkNIQVIoMjU1KSwKICAgICAgICBzaWduX2RhdGUgREFURSBOVUxMLGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBwcmVzZW5jZSAoCiAgICAgICAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLHVzZXJfaWQgSU5UIE5PVCBOVUxMLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDMwKSBOT1QgTlVMTCwKICAgICAgICBpcF9hZGRyZXNzIFZBUkNIQVIoNjApLAogICAgICAgIHVzZXJfYWdlbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIGxhdGl0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCwKICAgICAgICBsb25naXR1ZGUgREVDSU1BTCgxMCw3KSBOVUxMLAogICAgICAgIGFjY3VyYWN5IERFQ0lNQUwoMTAsMikgTlVMTCwKICAgICAgICBsb2NhdGlvbl9ub3RlIFZBUkNIQVIoMjU1KSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYWN0aXZpdHkgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSx3aG8gVkFSQ0hBUigxMDApLHdoYXQgVEVYVCwKICAgICAgICBjb2xvciBWQVJDSEFSKDIwKSxpbml0aWFscyBWQVJDSEFSKDUpLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiXTsKICAgIGZvcmVhY2goJHRhYmxlcyBhcyAkc3FsKSAkcGRvLT5leGVjKCRzcWwpOwogICAgLy8gVGFyZ2V0cyB0YWJsZSAoc2VwYXJhdGUgYmVjYXVzZSBpdCB3YXMgYWRkZWQgbGF0ZXIpCiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0YXJnZXRzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgdXNlcl9pZCBJTlQgTk9UIE5VTEwsCiAgICAgICAgY3JlYXRlZF9ieSBJTlQgTk9UIE5VTEwsCiAgICAgICAgdGl0bGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGRlc2NyaXB0aW9uIFRFWFQsCiAgICAgICAgdGFyZ2V0X3ZhbHVlIElOVCBOT1QgTlVMTCwKICAgICAgICBjdXJyZW50X3ZhbHVlIElOVCBERUZBVUxUIDAsCiAgICAgICAgdW5pdCBWQVJDSEFSKDUwKSBERUZBVUxUICfQsdGALicsCiAgICAgICAgZGF0ZSBEQVRFIE5PVCBOVUxMLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDIwKSBERUZBVUxUICdhY3RpdmUnLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKICAgIC8vIFNhZmUgY29sdW1uIGFkZGl0aW9ucwogICAgJGFsdGVycz1bCiAgICAgICAgIkFMVEVSIFRBQkxFIHRhc2tzIEFERCBDT0xVTU4gZHVlX2RhdGUgREFURVRJTUUgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHRhc2tzIEFERCBDT0xVTU4gbm90ZSBURVhUIiwKICAgICAgICAiQUxURVIgVEFCTEUgdXNlcnMgQUREIENPTFVNTiB0ZWxlZ3JhbV9jaGF0X2lkIFZBUkNIQVIoNTApIiwKICAgICAgICAiQUxURVIgVEFCTEUgcGFzc3dvcmRzIEFERCBDT0xVTU4gY2xpZW50IFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIG9mZmVyX3R5cGUgVkFSQ0hBUigzMCkgREVGQVVMVCAnb25lX3RpbWUnIiwKICAgICAgICAiQUxURVIgVEFCTEUgb2ZmZXJzIEFERCBDT0xVTU4gZGV0YWlscyBMT05HVEVYVCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIHVwZGF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBpcF9hZGRyZXNzIFZBUkNIQVIoNjApIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiB1c2VyX2FnZW50IFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gbGF0aXR1ZGUgREVDSU1BTCgxMCw3KSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBsb25naXR1ZGUgREVDSU1BTCgxMCw3KSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBhY2N1cmFjeSBERUNJTUFMKDEwLDIpIE5VTEwiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGxvY2F0aW9uX25vdGUgVkFSQ0hBUigyNTUpIiwKICAgIF07CiAgICBmb3JlYWNoKCRhbHRlcnMgYXMgJHNxbCl7dHJ5eyRwZG8tPmV4ZWMoJHNxbCk7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fX0KICAgIC8vIERlZmF1bHQgYWRtaW4KICAgICRjbnQ9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHVzZXJzIiktPmZldGNoQ29sdW1uKCk7CiAgICBpZigkY250PT0wKXsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyB1c2VycyAodXNlcm5hbWUscGFzc3dvcmQsbmFtZSxyb2xlLGluaXRpYWxzLGNvbG9yLGlzX2FkbWluKSBWQUxVRVMgKD8sPyw/LD8sPyw/LDEpIikKICAgICAgICAgICAgLT5leGVjdXRlKFsnYWRtaW4nLHBhc3N3b3JkX2hhc2goJ3dlYnRyaXhpYTIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpLCfQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCcsJ0FkbWluJywn0JDQlCcsJ2F2LXAnXSk7CiAgICB9CiAgICBvaygnVGFibGVzIHJlYWR5Jyk7Cn0KCi8vIOKUgOKUgCBHRVQgVEVMRUdSQU0gQ0hBVCBJRCAoaGVscGVyKSDilIDilIAKaWYoJGFjdGlvbj09PSd0Z191cGRhdGVzJyl7CiAgICAvLyBDYWxsIHRoaXMgdG8gZmluZCB5b3VyIGNoYXRfaWQgYWZ0ZXIgd3JpdGluZyAvc3RhcnQgdG8gdGhlIGJvdAogICAgJHVybD0naHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCcuVEdfVE9LRU4uJy9nZXRVcGRhdGVzJzsKICAgICRyZXNwPUBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgICRkYXRhPWpzb25fZGVjb2RlKCRyZXNwLHRydWUpOwogICAgJGNoYXRzPVtdOwogICAgZm9yZWFjaCgkZGF0YVsncmVzdWx0J10/P1tdIGFzICR1cGQpewogICAgICAgICRjaGF0PSR1cGRbJ21lc3NhZ2UnXVsnY2hhdCddPz8kdXBkWydjaGFubmVsX3Bvc3QnXVsnY2hhdCddPz9udWxsOwogICAgICAgIGlmKCRjaGF0KSAkY2hhdHNbXT1bJ2lkJz0+JGNoYXRbJ2lkJ10sJ3R5cGUnPT4kY2hhdFsndHlwZSddLCd0aXRsZSc9PiRjaGF0Wyd0aXRsZSddPz8kY2hhdFsnZmlyc3RfbmFtZSddPz8nJ107CiAgICB9CiAgICBvayhbJ3VwZGF0ZXMnPT5jb3VudCgkZGF0YVsncmVzdWx0J10/P1tdKSwnY2hhdHMnPT5hcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRjaGF0cyxTT1JUX1JFR1VMQVIpKV0pOwp9CgovLyDilIDilIAgU0VUIFRFTEVHUkFNIENIQVQgSUQg4pSA4pSACmlmKCRhY3Rpb249PT0ndGdfc2V0X2NoYXQnKXsKICAgIC8vIEdFVDogYXBpLnBocD9hY3Rpb249dGdfc2V0X2NoYXQmY2hhdF9pZD0tMTAweHh4eHh4eAogICAgJGNoYXRfaWQ9JF9HRVRbJ2NoYXRfaWQnXT8/Jyc7CiAgICBpZighJGNoYXRfaWQpIGVycignTWlzc2luZyBjaGF0X2lkJyk7CiAgICAkZmlsZT1fX0RJUl9fLicvY29uZmlnLnBocCc7CiAgICAkY29udGVudD1maWxlX2dldF9jb250ZW50cygkZmlsZSk7CiAgICBpZihzdHJwb3MoJGNvbnRlbnQsJ1RHX0NIQVRfSUQnKSE9PWZhbHNlKXsKICAgICAgICAkY29udGVudD1wcmVnX3JlcGxhY2UoCiAgICAgICAgICAgICIvZGVmaW5lXFwoJ1RHX0NIQVRfSUQnLFxccyonW14nXSonXFxzKlxcKTsvIiwKICAgICAgICAgICAgImRlZmluZSgnVEdfQ0hBVF9JRCcsJ3skY2hhdF9pZH0nKTsiLAogICAgICAgICAgICAkY29udGVudAogICAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAgICRjb250ZW50PXJ0cmltKCRjb250ZW50KS4iXG5kZWZpbmUoJ1RHX0NIQVRfSUQnLCd7JGNoYXRfaWR9Jyk7XG4iOwogICAgfQogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGUsJGNvbnRlbnQpOwogICAgdGcoIuKchSA8Yj5XZWJ0cml4aWEgSHViPC9iPlxuXG7QotC10LvQtdCz0YDQsNC8INC40LfQstC10YHRgtC40Y/RgtCwINGB0LAg0LDQutGC0LjQstC40YDQsNC90LghXG5cbtCS0YHRj9C60L4g0L/RgNC40YHRitGB0YLQstC40LUg0L3QsCDQtdC60LjQv9CwINGJ0LUg0LHRitC00LUg0LTQvtC60LvQsNC00LLQsNC90L4g0YLRg9C6LiIpOwogICAgb2soJ0NoYXQgSUQgc2F2ZWQ6ICcuJGNoYXRfaWQpOwp9CgovLyDilIDilIAgTE9HSU4g4pSA4pSACmlmKCRhY3Rpb249PT0nbG9naW4nKXsKICAgICRiPWJvZHkoKTsKICAgICRzdG10PWRiKCktPnByZXBhcmUoIlNFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgdXNlcm5hbWU9PyIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyd1c2VybmFtZSddPz8nJ10pOwogICAgJHU9JHN0bXQtPmZldGNoKCk7CiAgICBpZigkdSYmcGFzc3dvcmRfdmVyaWZ5KCRiWydwYXNzd29yZCddPz8nJywkdVsncGFzc3dvcmQnXSkpewogICAgICAgICRfU0VTU0lPTlsnaHViX3VzZXJfaWQnXT0oaW50KSR1WydpZCddOwogICAgICAgICRfU0VTU0lPTlsnaHViX2lzX2FkbWluJ109KChpbnQpKCR1Wydpc19hZG1pbiddPz8wKT09PTEpOwogICAgICAgIHVuc2V0KCR1WydwYXNzd29yZCddKTsKICAgICAgICBvaygkdSk7CiAgICB9IGVsc2UgZXJyKCfQk9GA0LXRiNC90L4g0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0LjQvNC1INC40LvQuCDQv9Cw0YDQvtC70LAnKTsKfQoKLy8g4pSA4pSAIFVTRVJTIOKUgOKUgAppZigkYWN0aW9uPT09J3VzZXJzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRyb3dzPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgaWQsdXNlcm5hbWUsbmFtZSxyb2xlLGluaXRpYWxzLGNvbG9yLGlzX2FkbWluLG9ubGluZSx0ZWxlZ3JhbV9jaGF0X2lkIEZST00gdXNlcnMgT1JERVIgQlkgaWQiKS0+ZmV0Y2hBbGwoKTsKICAgICAgICBvaygkcm93cyk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgaWYoaXNzZXQoJGJbJ2lkJ10pJiYkYlsnaWQnXSl7CiAgICAgICAgICAgIGlmKCFlbXB0eSgkYlsncGFzc3dvcmQnXSkpewogICAgICAgICAgICAgICAgJHN0bXQ9JHBkby0+cHJlcGFyZSgiVVBEQVRFIHVzZXJzIFNFVCBuYW1lPT8scm9sZT0/LGluaXRpYWxzPT8sY29sb3I9Pyxpc19hZG1pbj0/LG9ubGluZT0/LHVzZXJuYW1lPT8scGFzc3dvcmQ9Pyx0ZWxlZ3JhbV9jaGF0X2lkPT8gV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXSwkYlsnaXNfYWRtaW4nXT8/MCwkYlsnb25saW5lJ10/PzEsCiAgICAgICAgICAgICAgICAgICAgJGJbJ3VzZXJuYW1lJ10scGFzc3dvcmRfaGFzaCgkYlsncGFzc3dvcmQnXSxQQVNTV09SRF9ERUZBVUxUKSwkYlsndGVsZWdyYW1fY2hhdF9pZCddPz9udWxsLCRiWydpZCddXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc3RtdD0kcGRvLT5wcmVwYXJlKCJVUERBVEUgdXNlcnMgU0VUIG5hbWU9Pyxyb2xlPT8saW5pdGlhbHM9Pyxjb2xvcj0/LGlzX2FkbWluPT8sb25saW5lPT8sdXNlcm5hbWU9Pyx0ZWxlZ3JhbV9jaGF0X2lkPT8gV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXSwkYlsnaXNfYWRtaW4nXT8/MCwkYlsnb25saW5lJ10/PzEsCiAgICAgICAgICAgICAgICAgICAgJGJbJ3VzZXJuYW1lJ10sJGJbJ3RlbGVncmFtX2NoYXRfaWQnXT8/bnVsbCwkYlsnaWQnXV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9rKFsnaWQnPT4kYlsnaWQnXV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHVzZXJzICh1c2VybmFtZSxwYXNzd29yZCxuYW1lLHJvbGUsaW5pdGlhbHMsY29sb3IsaXNfYWRtaW4sdGVsZWdyYW1fY2hhdF9pZCkgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pIikKICAgICAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGJbJ3VzZXJuYW1lJ10scGFzc3dvcmRfaGFzaCgkYlsncGFzc3dvcmQnXT8/J2h1YjIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpLAogICAgICAgICAgICAgICAgICAgICRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXT8/J2F2LXAnLCRiWydpc19hZG1pbiddPz8wLCRiWyd0ZWxlZ3JhbV9jaGF0X2lkJ10/P251bGxdKTsKICAgICAgICAgICAgb2soWydpZCc9PiRwZG8tPmxhc3RJbnNlcnRJZCgpXSk7CiAgICAgICAgfQogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXsKICAgICAgICAkaWQ9JF9HRVRbJ2lkJ10/PycnOwogICAgICAgIGRiKCktPnByZXBhcmUoIkRFTEVURSBGUk9NIHVzZXJzIFdIRVJFIGlkPT8gQU5EIGlzX2FkbWluPTAiKS0+ZXhlY3V0ZShbJGlkXSk7CiAgICAgICAgb2sodHJ1ZSk7CiAgICB9Cn0KCi8vIOKUgOKUgCBQUkVTRU5DRSDilIDilIAKaWYoJGFjdGlvbj09PSdwcmVzZW5jZScpewogICAgJHBkbz1kYigpOwogICAgZm9yZWFjaChbCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gaXBfYWRkcmVzcyBWQVJDSEFSKDYwKSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gdXNlcl9hZ2VudCBWQVJDSEFSKDI1NSkiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGxhdGl0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gbG9uZ2l0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gYWNjdXJhY3kgREVDSU1BTCgxMCwyKSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBsb2NhdGlvbl9ub3RlIFZBUkNIQVIoMjU1KSIsCiAgICBdIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRsb2c9JHBkby0+cXVlcnkoIlNFTEVDVCBwLiosdS5uYW1lLHUuaW5pdGlhbHMsdS5jb2xvciBGUk9NIHByZXNlbmNlIHAKICAgICAgICAgICAgSk9JTiB1c2VycyB1IE9OIHAudXNlcl9pZD11LmlkCiAgICAgICAgICAgIFdIRVJFIERBVEUocC5jcmVhdGVkX2F0KT1DVVJEQVRFKCkKICAgICAgICAgICAgT1JERVIgQlkgcC5jcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKTsKICAgICAgICAkY3VycmVudD0kcGRvLT5xdWVyeSgiU0VMRUNUIHAuKix1Lm5hbWUsdS5pbml0aWFscyx1LmNvbG9yCiAgICAgICAgICAgIEZST00gcHJlc2VuY2UgcCBKT0lOIHVzZXJzIHUgT04gcC51c2VyX2lkPXUuaWQKICAgICAgICAgICAgV0hFUkUgcC5pZCBJTiAoU0VMRUNUIE1BWChpZCkgRlJPTSBwcmVzZW5jZSBXSEVSRSBEQVRFKGNyZWF0ZWRfYXQpPUNVUkRBVEUoKSBHUk9VUCBCWSB1c2VyX2lkKSIpLT5mZXRjaEFsbCgpOwogICAgICAgIG9rKFsnbG9nJz0+JGxvZywnY3VycmVudCc9PiRjdXJyZW50XSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgJHVzZXJfaWQ9KGludCkoJGJbJ3VzZXJfaWQnXT8/MCk7CiAgICAgICAgJHN0YXR1cz0kYlsnc3RhdHVzJ10/PycnOwogICAgICAgIGlmKCEkdXNlcl9pZHx8ISRzdGF0dXMpIGVycignTWlzc2luZyBkYXRhOiB1c2VyX2lkPScuJHVzZXJfaWQuJyBzdGF0dXM9Jy4kc3RhdHVzKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAkbGF0PWlzX251bWVyaWMoJGJbJ2xhdGl0dWRlJ10/P251bGwpPyRiWydsYXRpdHVkZSddOm51bGw7CiAgICAgICAgJGxuZz1pc19udW1lcmljKCRiWydsb25naXR1ZGUnXT8/bnVsbCk/JGJbJ2xvbmdpdHVkZSddOm51bGw7CiAgICAgICAgJGFjYz1pc19udW1lcmljKCRiWydhY2N1cmFjeSddPz9udWxsKT8kYlsnYWNjdXJhY3knXTpudWxsOwogICAgICAgICRub3RlPXN1YnN0cigoc3RyaW5nKSgkYlsnbG9jYXRpb25fbm90ZSddPz8nJyksMCwyNTUpOwogICAgICAgICRpcD1jbGllbnRJcCgpOwogICAgICAgICR1YT1zdWJzdHIoKHN0cmluZykoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddPz8nJyksMCwyNTUpOwoKICAgICAgICAvLyBJbnNlcnQgcHJlc2VuY2UgcmVjb3JkCiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcHJlc2VuY2UgKHVzZXJfaWQsc3RhdHVzLGlwX2FkZHJlc3MsdXNlcl9hZ2VudCxsYXRpdHVkZSxsb25naXR1ZGUsYWNjdXJhY3ksbG9jYXRpb25fbm90ZSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pIiktPmV4ZWN1dGUoWyR1c2VyX2lkLCRzdGF0dXMsJGlwLCR1YSwkbGF0LCRsbmcsJGFjYywkbm90ZV0pOwoKICAgICAgICAvLyBHZXQgdXNlciBpbmZvCiAgICAgICAgJHVzZXI9JHBkby0+cHJlcGFyZSgiU0VMRUNUIG5hbWUscm9sZSx0ZWxlZ3JhbV9jaGF0X2lkIEZST00gdXNlcnMgV0hFUkUgaWQ9PyIpOwogICAgICAgICR1c2VyLT5leGVjdXRlKFskdXNlcl9pZF0pOwogICAgICAgICR1PSR1c2VyLT5mZXRjaCgpOwoKICAgICAgICAvLyBTdGF0dXMgZW1vamlzIGFuZCBtZXNzYWdlcwogICAgICAgICRpY29ucz1bJ2Fycml2ZWQnPT4n8J+foicsJ2JyZWFrJz0+J+KYlScsJ2JhY2snPT4n8J+UtScsJ2xlZnQnPT4n8J+UtCcsJ3RvaWxldCc9Pifwn5q9Jywnc21va2UnPT4n8J+arCcsJ3Ntb2tlX2JhY2snPT4n8J+SqCddOwogICAgICAgICRsYWJlbHM9WydhcnJpdmVkJz0+J9Cf0YDQuNGB0YLQuNCz0L3QsCDQvdCwINGA0LDQsdC+0YLQsCcsJ2JyZWFrJz0+J9CY0LfQu9C10LfQtSDQvdCwINC/0L7Rh9C40LLQutCwJywnYmFjayc9PifQktGK0YDQvdCwINGB0LUg0L7RgiDQv9C+0YfQuNCy0LrQsCcsJ2xlZnQnPT4n0KLRgNGK0LPQvdCwINC+0YIg0L7RhNC40YHQsCcsJ3RvaWxldCc9PifQmNC30LvQtdC30LUg0LTQviDRgtC+0LDQu9C10YLQvdCwJywnc21va2UnPT4n0JjQt9C70LXQt9C1INC90LAg0YbQuNCz0LDRgNCwJywnc21va2VfYmFjayc9PifQktGK0YDQvdCwINGB0LUg0L7RgiDRhtC40LPQsNGA0LAnXTsKICAgICAgICAkaWNvbj0kaWNvbnNbJHN0YXR1c10/PyfimqonOwogICAgICAgICRsYWJlbD0kbGFiZWxzWyRzdGF0dXNdPz8kc3RhdHVzOwogICAgICAgICR0aW1lPWRhdGUoJ0g6aScpOwogICAgICAgICRuYW1lPSR1WyduYW1lJ10/PyfQodC70YPQttC40YLQtdC7JzsKICAgICAgICAkcm9sZT0kdVsncm9sZSddPz8nJzsKCiAgICAgICAgLy8gU2VuZCBUZWxlZ3JhbSB0byBHUk9VUC9DSEFOTkVMCiAgICAgICAgJG1zZz0ieyRpY29ufSA8Yj57JG5hbWV9PC9iPiIgLiAoJHJvbGU/IiAoeyRyb2xlfSkiOiIiKSAuICJcbnskbGFiZWx9XG48aT7wn5WQIHskdGltZX08L2k+IjsKICAgICAgICB0ZygkbXNnKTsKCiAgICAgICAgLy8gQWxzbyBzZW5kIHBlcnNvbmFsIFRHIGlmIHVzZXIgaGFzIHRoZWlyIG93biBjaGF0X2lkCiAgICAgICAgJHBlcnNvbmFsQ2hhdElkPSR1Wyd0ZWxlZ3JhbV9jaGF0X2lkJ10/PycnOwogICAgICAgIGlmKCFlbXB0eSgkcGVyc29uYWxDaGF0SWQpJiYkcGVyc29uYWxDaGF0SWQhPT1UR19DSEFUX0lEKXsKICAgICAgICAgICAgJHBlcnNvbmFsTXNncz1bCiAgICAgICAgICAgICAgICAnYXJyaXZlZCc9PiLwn5+iIDxiPtCU0L7QsdGA0LUg0LTQvtGI0YrQuyDQvdCwINGA0LDQsdC+0YLQsCE8L2I+XG7QntGC0LHQtdC70Y/Qt9Cw0L0g0YHQuDogeyR0aW1lfSIsCiAgICAgICAgICAgICAgICAnYnJlYWsnPT4i4piVIDxiPtCf0YDQuNGP0YLQvdCwINC/0L7Rh9C40LLQutCwITwvYj5cbtCY0LfQu9C10LfQvdCwINCyOiB7JHRpbWV9IiwKICAgICAgICAgICAgICAgICdiYWNrJz0+IvCflLUgPGI+0JTQvtCx0YDQtSDQtNC+0YjRitC7INC+0LHRgNCw0YLQvdC+ITwvYj5cbtCS0YrRgNC90LAg0YHQtTogeyR0aW1lfSIsCiAgICAgICAgICAgICAgICAnbGVmdCc9PiLwn5S0IDxiPtCb0LXQutCwINCy0LXRh9C10YAhPC9iPlxu0KLRgNGK0LPQvdCwINCyOiB7JHRpbWV9IgogICAgICAgICAgICBdOwogICAgICAgICAgICB0ZygkcGVyc29uYWxNc2dzWyRzdGF0dXNdPz8kbXNnLCAkcGVyc29uYWxDaGF0SWQpOwogICAgICAgIH0KCiAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gJGUpIHsgZXJyKCdQcmVzZW5jZSBlcnJvcjogJy4kZS0+Z2V0TWVzc2FnZSgpKTsgfQogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgovLyDilIDilIAgUFJPSkVDVFMg4pSA4pSACmlmKCRhY3Rpb249PT0ncHJvamVjdHMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gcHJvamVjdHMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdwJyx0cnVlKTsKICAgICAgICAkdGFncz1pc3NldCgkYlsndGFncyddKT9qc29uX2VuY29kZSgkYlsndGFncyddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOidbXSc7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcHJvamVjdHMgKGlkLG5hbWUsY2xpZW50LHBob25lLHN0YXR1cyx0b3RhbCxyZWNlaXZlZCxzdGFydF9kYXRlLGRlYWRsaW5lLHByb2dyZXNzLGFzc2lnbmVlLHRhZ3MscmVjdXJyaW5nLG5vdGVzKQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgbmFtZT1WQUxVRVMobmFtZSksY2xpZW50PVZBTFVFUyhjbGllbnQpLHBob25lPVZBTFVFUyhwaG9uZSksCiAgICAgICAgICAgIHN0YXR1cz1WQUxVRVMoc3RhdHVzKSx0b3RhbD1WQUxVRVModG90YWwpLHJlY2VpdmVkPVZBTFVFUyhyZWNlaXZlZCksCiAgICAgICAgICAgIHN0YXJ0X2RhdGU9VkFMVUVTKHN0YXJ0X2RhdGUpLGRlYWRsaW5lPVZBTFVFUyhkZWFkbGluZSkscHJvZ3Jlc3M9VkFMVUVTKHByb2dyZXNzKSwKICAgICAgICAgICAgYXNzaWduZWU9VkFMVUVTKGFzc2lnbmVlKSx0YWdzPVZBTFVFUyh0YWdzKSxyZWN1cnJpbmc9VkFMVUVTKHJlY3VycmluZyksbm90ZXM9VkFMVUVTKG5vdGVzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyduYW1lJ10/PycnLCRiWydjbGllbnQnXT8/JycsJGJbJ3Bob25lJ10/PycnLCRiWydzdGF0dXMnXT8/J25ldycsCiAgICAgICAgICAgICAgICAkYlsndG90YWwnXT8/MCwkYlsncmVjZWl2ZWQnXT8/MCwkYlsnc3RhcnQnXT8/bnVsbCwkYlsnZGVhZGxpbmUnXT8/bnVsbCwKICAgICAgICAgICAgICAgICRiWydwcm9ncmVzcyddPz8wLCRiWydhc3NpZ25lZSddPz8nJywkdGFncywkYlsncmVjdXJyaW5nJ10/PycnLCRiWydub3RlcyddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gcHJvamVjdHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBUQVNLUyDilIDilIAKaWYoJGFjdGlvbj09PSd0YXNrcycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSB0YXNrcyBPUkRFUiBCWSBkdWVfZGF0ZSBJUyBOVUxMLCBkdWVfZGF0ZSBBU0MsIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgndCcsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gdGFza3MgKGlkLHRleHQsYXNzaWduZWUsdXJnZW50LGRvbmUsZHVlX2RhdGUsbm90ZSkgVkFMVUVTICg/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSB0ZXh0PVZBTFVFUyh0ZXh0KSxhc3NpZ25lZT1WQUxVRVMoYXNzaWduZWUpLAogICAgICAgICAgICB1cmdlbnQ9VkFMVUVTKHVyZ2VudCksZG9uZT1WQUxVRVMoZG9uZSksZHVlX2RhdGU9VkFMVUVTKGR1ZV9kYXRlKSxub3RlPVZBTFVFUyhub3RlKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyd0ZXh0J10/PycnLCRiWydhc3NpZ25lZSddPz8nJywkYlsndXJnZW50J10/PzAsJGJbJ2RvbmUnXT8/MCwKICAgICAgICAgICAgICAgICRiWydkdWVfZGF0ZSddPz9udWxsLCRiWydub3RlJ10/PycnXSk7CiAgICAgICAgb2soWydpZCc9PiRpZF0pOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXskcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSB0YXNrcyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIE5PVEVTIOKUgOKUgAppZigkYWN0aW9uPT09J25vdGVzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpIG9rKCRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIG5vdGVzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnbicsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gbm90ZXMgKGlkLHRpdGxlLGJvZHksYXV0aG9yLHVyZ2VudCkgVkFMVUVTICg/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHRpdGxlPVZBTFVFUyh0aXRsZSksYm9keT1WQUxVRVMoYm9keSksYXV0aG9yPVZBTFVFUyhhdXRob3IpLHVyZ2VudD1WQUxVRVModXJnZW50KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyd0aXRsZSddPz8nJywkYlsnYm9keSddPz8nJywkYlsnYXV0aG9yJ10/PycnLCRiWyd1cmdlbnQnXT8/MF0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gbm90ZXMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBDTElFTlRTIOKUgOKUgAppZigkYWN0aW9uPT09J2NsaWVudHMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY2xpZW50cyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2MnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGNsaWVudHMgKGlkLG5hbWUsY29tcGFueSxlbWFpbCxwaG9uZSxlaWssbm90ZXMsdmF0X251bWJlcixhZGRyZXNzLGNpdHksY291bnRyeSxtb2wsaWJhbixjb250YWN0X3BlcnNvbikKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG5hbWU9VkFMVUVTKG5hbWUpLGNvbXBhbnk9VkFMVUVTKGNvbXBhbnkpLGVtYWlsPVZBTFVFUyhlbWFpbCksCiAgICAgICAgICAgIHBob25lPVZBTFVFUyhwaG9uZSksZWlrPVZBTFVFUyhlaWspLG5vdGVzPVZBTFVFUyhub3RlcyksdmF0X251bWJlcj1WQUxVRVModmF0X251bWJlciksCiAgICAgICAgICAgIGFkZHJlc3M9VkFMVUVTKGFkZHJlc3MpLGNpdHk9VkFMVUVTKGNpdHkpLGNvdW50cnk9VkFMVUVTKGNvdW50cnkpLG1vbD1WQUxVRVMobW9sKSwKICAgICAgICAgICAgaWJhbj1WQUxVRVMoaWJhbiksY29udGFjdF9wZXJzb249VkFMVUVTKGNvbnRhY3RfcGVyc29uKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyduYW1lJ10/PycnLCRiWydjb21wYW55J10/PycnLCRiWydlbWFpbCddPz8nJywkYlsncGhvbmUnXT8/JycsJGJbJ2VpayddPz8nJywkYlsnbm90ZXMnXT8/JycsCiAgICAgICAgICAgICAgICAkYlsndmF0X251bWJlciddPz8nJywkYlsnYWRkcmVzcyddPz8nJywkYlsnY2l0eSddPz8nJywkYlsnY291bnRyeSddPz8n0JHRitC70LPQsNGA0LjRjycsJGJbJ21vbCddPz8nJywKICAgICAgICAgICAgICAgICRiWydpYmFuJ10/PycnLCRiWydjb250YWN0X3BlcnNvbiddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gY2xpZW50cyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIEhPU1RJTkcg4pSA4pSACmlmKCRhY3Rpb249PT0naG9zdGluZycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBob3N0aW5nIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnaCcsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gaG9zdGluZyAoaWQsZG9tYWluLGNsaWVudCxzZXJ2ZXIsdHlwZSxkaXNrLHBsYW4sc3NsX2V4cGlyZXMpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBkb21haW49VkFMVUVTKGRvbWFpbiksY2xpZW50PVZBTFVFUyhjbGllbnQpLHNlcnZlcj1WQUxVRVMoc2VydmVyKSwKICAgICAgICAgICAgdHlwZT1WQUxVRVModHlwZSksZGlzaz1WQUxVRVMoZGlzaykscGxhbj1WQUxVRVMocGxhbiksc3NsX2V4cGlyZXM9VkFMVUVTKHNzbF9leHBpcmVzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWydkb21haW4nXT8/JycsJGJbJ2NsaWVudCddPz8nJywkYlsnc2VydmVyJ10/PycnLCRiWyd0eXBlJ10/PydjUGFuZWwnLAogICAgICAgICAgICAgICAgJGJbJ2Rpc2snXT8/JycsJGJbJ3BsYW4nXT8/J1N0YXJ0ZXInLCRiWydzc2wnXT8/bnVsbF0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gaG9zdGluZyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIFBBU1NXT1JEUyDilIDilIAKaWYoJGFjdGlvbj09PSdwYXNzd29yZHMnKXsKICAgICRwZG89ZGIoKTsKICAgIHRyeXskcGRvLT5leGVjKCJBTFRFUiBUQUJMRSBwYXNzd29yZHMgQUREIENPTFVNTiBjbGllbnQgVkFSQ0hBUigyNTUpIik7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBwYXNzd29yZHMgT1JERVIgQlkgY2xpZW50LCBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ3B3Jyx0cnVlKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBwYXNzd29yZHMgKGlkLHNpdGUsdXNlcm5hbWUscGFzcyxjYXRlZ29yeSxjbGllbnQpIFZBTFVFUyAoPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHNpdGU9VkFMVUVTKHNpdGUpLHVzZXJuYW1lPVZBTFVFUyh1c2VybmFtZSkscGFzcz1WQUxVRVMocGFzcyksCiAgICAgICAgICAgIGNhdGVnb3J5PVZBTFVFUyhjYXRlZ29yeSksY2xpZW50PVZBTFVFUyhjbGllbnQpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ3NpdGUnXT8/JycsJGJbJ3VzZXInXT8/JycsJGJbJ3Bhc3MnXT8/JycsJGJbJ2NhdCddPz8nb3RoZXInLCRiWydjbGllbnQnXT8/JyddKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIHBhc3N3b3JkcyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIE9GRkVSUyDilIDilIAKaWYoJGFjdGlvbj09PSdvZmZlcnMnKXsKICAgICRwZG89ZGIoKTsKICAgIGZvcmVhY2goWwogICAgICAgICJBTFRFUiBUQUJMRSBvZmZlcnMgQUREIENPTFVNTiBvZmZlcl90eXBlIFZBUkNIQVIoMzApIERFRkFVTFQgJ29uZV90aW1lJyIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIGRldGFpbHMgTE9OR1RFWFQiLAogICAgICAgICJBTFRFUiBUQUJMRSBvZmZlcnMgQUREIENPTFVNTiB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUCIsCiAgICBdIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgIGlmKCFlbXB0eSgkX0dFVFsnaWQnXSkpewogICAgICAgICAgICAkc3Q9JHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBvZmZlcnMgV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAkc3QtPmV4ZWN1dGUoWyRfR0VUWydpZCddXSk7CiAgICAgICAgICAgICRyb3c9JHN0LT5mZXRjaCgpOwogICAgICAgICAgICBpZighJHJvdykgZXJyKCfQntGE0LXRgNGC0LDRgtCwINC90LUg0LUg0L3QsNC80LXRgNC10L3QsCcpOwogICAgICAgICAgICBvaygkcm93KTsKICAgICAgICB9CiAgICAgICAgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gb2ZmZXJzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnbycsdHJ1ZSk7CiAgICAgICAgJGRldGFpbHM9JGJbJ2RldGFpbHMnXT8/bnVsbDsKICAgICAgICBpZihpc19hcnJheSgkZGV0YWlscykpICRkZXRhaWxzPWpzb25fZW5jb2RlKCRkZXRhaWxzLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIG9mZmVycyAoaWQsbnVtLGNsaWVudCxzZXJ2aWNlLHRvdGFsLHN0YXR1cyxvZmZlcl90eXBlLGRldGFpbHMpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBudW09VkFMVUVTKG51bSksY2xpZW50PVZBTFVFUyhjbGllbnQpLHNlcnZpY2U9VkFMVUVTKHNlcnZpY2UpLAogICAgICAgICAgICB0b3RhbD1WQUxVRVModG90YWwpLHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxvZmZlcl90eXBlPVZBTFVFUyhvZmZlcl90eXBlKSxkZXRhaWxzPVZBTFVFUyhkZXRhaWxzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWydudW0nXT8/JycsJGJbJ2NsaWVudCddPz8nJywkYlsnc2VydmljZSddPz8nJywkYlsndG90YWwnXT8/MCwKICAgICAgICAgICAgICAgICRiWydzdGF0dXMnXT8/J9Cn0LDQutCw0YnQsCcsJGJbJ29mZmVyX3R5cGUnXT8/J29uZV90aW1lJywkZGV0YWlsc10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gb2ZmZXJzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQ09OVFJBQ1RTIOKUgOKUgAppZigkYWN0aW9uPT09J2NvbnRyYWN0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBjb250cmFjdHMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdjb24nLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGNvbnRyYWN0cyAoaWQsbmFtZSxjbGllbnQsc2lnbl9kYXRlKSBWQUxVRVMgKD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG5hbWU9VkFMVUVTKG5hbWUpLGNsaWVudD1WQUxVRVMoY2xpZW50KSxzaWduX2RhdGU9VkFMVUVTKHNpZ25fZGF0ZSkiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnbmFtZSddPz8nJywkYlsnY2xpZW50J10/PycnLCRiWydzaWduX2RhdGUnXT8/bnVsbF0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gY29udHJhY3RzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQUNUSVZJVFkg4pSA4pSACmlmKCRhY3Rpb249PT0nYWN0aXZpdHknKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gYWN0aXZpdHkgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIDUwIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGFjdGl2aXR5ICh3aG8sd2hhdCxjb2xvcixpbml0aWFscykgVkFMVUVTICg/LD8sPyw/KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGJbJ3dobyddPz8n0KHQuNGB0YLQtdC80LAnLCRiWyd3aGF0J10/PycnLCRiWydjb2xvciddPz8nYXYtcCcsJGJbJ2luaXRpYWxzJ10/Pyc/PyddKTsKICAgICAgICBvayh0cnVlKTsKICAgIH0KfQoKLy8g4pSA4pSAIFNUQVRTIOKUgOKUgAppZigkYWN0aW9uPT09J3N0YXRzJyl7CiAgICAkcGRvPWRiKCk7CiAgICAkdG90YWw9JHBkby0+cXVlcnkoIlNFTEVDVCBDT0FMRVNDRShTVU0odG90YWwpLDApIEZST00gcHJvamVjdHMgV0hFUkUgc3RhdHVzIT0nZG9uZSciKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICRyZWN2PSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09BTEVTQ0UoU1VNKHJlY2VpdmVkKSwwKSBGUk9NIHByb2plY3RzIFdIRVJFIHN0YXR1cyE9J2RvbmUnIiktPmZldGNoQ29sdW1uKCk7CiAgICAkYWN0aXZlPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwcm9qZWN0cyBXSEVSRSBzdGF0dXMhPSdkb25lJyIpLT5mZXRjaENvbHVtbigpOwogICAgJHRhc2tzPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB0YXNrcyBXSEVSRSBkb25lPTAiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICRzc2w9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGhvc3RpbmcgV0hFUkUgc3NsX2V4cGlyZXMgSVMgTk9UIE5VTEwgQU5EIHNzbF9leHBpcmVzPERBVEVfQUREKE5PVygpLElOVEVSVkFMIDMwIERBWSkgQU5EIHNzbF9leHBpcmVzPk5PVygpIiktPmZldGNoQ29sdW1uKCk7CiAgICBvayhbJ2FjdGl2ZV9wcm9qZWN0cyc9PihpbnQpJGFjdGl2ZSwndG90YWxfb2ZmZXJlZCc9PihmbG9hdCkkdG90YWwsJ3RvdGFsX3JlY2VpdmVkJz0+KGZsb2F0KSRyZWN2LAogICAgICAgICd0b3RhbF9wZW5kaW5nJz0+KGZsb2F0KSgkdG90YWwtJHJlY3YpLCd0YXNrc19wZW5kaW5nJz0+KGludCkkdGFza3MsJ3NzbF93YXJuaW5ncyc9PihpbnQpJHNzbF0pOwp9CgoKLy8g4pSA4pSAIFRBUkdFVFMg4pSA4pSACmlmKCRhY3Rpb249PT0ndGFyZ2V0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICAkZGF0ZT0kX0dFVFsnZGF0ZSddPz9kYXRlKCdZLW0tZCcpOwogICAgICAgICR1c2VyX2lkPSRfR0VUWyd1c2VyX2lkJ10/P251bGw7CiAgICAgICAgaWYoJHVzZXJfaWQpewogICAgICAgICAgICAkcm93cz0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgdC4qLCB1Lm5hbWUgYXMgdXNlcl9uYW1lLCB1LmluaXRpYWxzLCB1LmNvbG9yLCBjYi5uYW1lIGFzIGNyZWF0ZWRfYnlfbmFtZQogICAgICAgICAgICAgICAgRlJPTSB0YXJnZXRzIHQKICAgICAgICAgICAgICAgIEpPSU4gdXNlcnMgdSBPTiB0LnVzZXJfaWQ9dS5pZAogICAgICAgICAgICAgICAgSk9JTiB1c2VycyBjYiBPTiB0LmNyZWF0ZWRfYnk9Y2IuaWQKICAgICAgICAgICAgICAgIFdIRVJFIHQuZGF0ZT0/IEFORCB0LnVzZXJfaWQ9PwogICAgICAgICAgICAgICAgT1JERVIgQlkgdC5jcmVhdGVkX2F0IERFU0MiKTsKICAgICAgICAgICAgJHJvd3MtPmV4ZWN1dGUoWyRkYXRlLCR1c2VyX2lkXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJvd3M9JHBkby0+cHJlcGFyZSgiU0VMRUNUIHQuKiwgdS5uYW1lIGFzIHVzZXJfbmFtZSwgdS5pbml0aWFscywgdS5jb2xvciwgY2IubmFtZSBhcyBjcmVhdGVkX2J5X25hbWUKICAgICAgICAgICAgICAgIEZST00gdGFyZ2V0cyB0CiAgICAgICAgICAgICAgICBKT0lOIHVzZXJzIHUgT04gdC51c2VyX2lkPXUuaWQKICAgICAgICAgICAgICAgIEpPSU4gdXNlcnMgY2IgT04gdC5jcmVhdGVkX2J5PWNiLmlkCiAgICAgICAgICAgICAgICBXSEVSRSB0LmRhdGU9PwogICAgICAgICAgICAgICAgT1JERVIgQlkgdC51c2VyX2lkLCB0LmNyZWF0ZWRfYXQgREVTQyIpOwogICAgICAgICAgICAkcm93cy0+ZXhlY3V0ZShbJGRhdGVdKTsKICAgICAgICB9CiAgICAgICAgb2soJHJvd3MtPmZldGNoQWxsKCkpOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOwogICAgICAgICRpZD0kYlsnaWQnXT8/bnVsbDsKICAgICAgICBpZigkaWQpewogICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgKHByb2dyZXNzIHVwZGF0ZSkKICAgICAgICAgICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIHRhcmdldHMgU0VUIGN1cnJlbnRfdmFsdWU9Pywgc3RhdHVzPT8gV0hFUkUgaWQ9PyIpCiAgICAgICAgICAgICAgICAtPmV4ZWN1dGUoWyRiWydjdXJyZW50X3ZhbHVlJ10/PzAsICRiWydzdGF0dXMnXT8/J2FjdGl2ZScsICRpZF0pOwogICAgICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyB0YXJnZXQKICAgICAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gdGFyZ2V0cyAodXNlcl9pZCxjcmVhdGVkX2J5LHRpdGxlLGRlc2NyaXB0aW9uLHRhcmdldF92YWx1ZSxjdXJyZW50X3ZhbHVlLHVuaXQsZGF0ZSxzdGF0dXMpCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/KSIpCiAgICAgICAgICAgICAgICAtPmV4ZWN1dGUoWyRiWyd1c2VyX2lkJ10sJGJbJ2NyZWF0ZWRfYnknXSwkYlsndGl0bGUnXSwkYlsnZGVzY3JpcHRpb24nXT8/JycsJGJbJ3RhcmdldF92YWx1ZSddLCRiWydjdXJyZW50X3ZhbHVlJ10/PzAsJGJbJ3VuaXQnXT8/J9Cx0YAuJywkYlsnZGF0ZSddPz9kYXRlKCdZLW0tZCcpLCdhY3RpdmUnXSk7CiAgICAgICAgICAgIG9rKFsnaWQnPT4kcGRvLT5sYXN0SW5zZXJ0SWQoKV0pOwogICAgICAgIH0KICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gdGFyZ2V0cyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8wXSk7CiAgICAgICAgb2sodHJ1ZSk7CiAgICB9Cn0KCi8vIOKUgOKUgCBURVNUIOKUgOKUgAppZigkYWN0aW9uPT09J3Rlc3QnKXsKICAgICRyZXN1bHQ9WydwaHAnPT5waHB2ZXJzaW9uKCksJ2RiJz0+J2Vycm9yJywndGcnPT4nbm90IHNlbnQnXTsKICAgIHRyeXsgZGIoKTsgJHJlc3VsdFsnZGInXT0nT0snOyB9Y2F0Y2goRXhjZXB0aW9uICRlKXsgJHJlc3VsdFsnZGInXT0kZS0+Z2V0TWVzc2FnZSgpOyB9CiAgICB0cnl7IHRnKCLwn6eqIFRlc3Qg0L7RgiBXZWJ0cml4aWEgSHViIC0gIi5kYXRlKCdIOmknKSk7ICRyZXN1bHRbJ3RnJ109J1NlbnQhJzsgfWNhdGNoKEV4Y2VwdGlvbiAkZSl7ICRyZXN1bHRbJ3RnX2Vycm9yJ109JGUtPmdldE1lc3NhZ2UoKTsgfQogICAgb2soJHJlc3VsdCk7Cn0KCgovLyDilIDilIAgUFJFU0VOQ0UgUkVQT1JUIOKUgOKUgAppZigkYWN0aW9uPT09J3ByZXNlbmNlX3JlcG9ydCcpewogICAgJHBkbz1kYigpOwogICAgJGZyb209JF9HRVRbJ2Zyb20nXT8/ZGF0ZSgnWS1tLTAxJyk7IC8vIGRlZmF1bHQ6IGZpcnN0IG9mIG1vbnRoCiAgICAkdG89JF9HRVRbJ3RvJ10/P2RhdGUoJ1ktbS1kJyk7CgogICAgLy8gR2V0IGFsbCBwcmVzZW5jZSByZWNvcmRzIGluIHJhbmdlCiAgICAkcm93cz0kcGRvLT5wcmVwYXJlKCIKICAgICAgICBTRUxFQ1QgcC51c2VyX2lkLCBwLnN0YXR1cywgcC5jcmVhdGVkX2F0LCB1Lm5hbWUsIHUuaW5pdGlhbHMsIHUuY29sb3IKICAgICAgICBGUk9NIHByZXNlbmNlIHAKICAgICAgICBKT0lOIHVzZXJzIHUgT04gcC51c2VyX2lkPXUuaWQKICAgICAgICBXSEVSRSBEQVRFKHAuY3JlYXRlZF9hdCkgQkVUV0VFTiA/IEFORCA/CiAgICAgICAgT1JERVIgQlkgcC51c2VyX2lkLCBwLmNyZWF0ZWRfYXQgQVNDCiAgICAiKTsKICAgICRyb3dzLT5leGVjdXRlKFskZnJvbSwkdG9dKTsKICAgICRyZWNvcmRzPSRyb3dzLT5mZXRjaEFsbCgpOwoKICAgIC8vIEdyb3VwIGJ5IHVzZXIgYW5kIGRhdGUKICAgICRieVVzZXI9W107CiAgICBmb3JlYWNoKCRyZWNvcmRzIGFzICRyKXsKICAgICAgICAkdWlkPSRyWyd1c2VyX2lkJ107CiAgICAgICAgJGRhdGU9c3Vic3RyKCRyWydjcmVhdGVkX2F0J10sMCwxMCk7CiAgICAgICAgaWYoIWlzc2V0KCRieVVzZXJbJHVpZF0pKXsKICAgICAgICAgICAgJGJ5VXNlclskdWlkXT1bJ2lkJz0+JHVpZCwnbmFtZSc9PiRyWyduYW1lJ10sJ2luaXRpYWxzJz0+JHJbJ2luaXRpYWxzJ10sJ2NvbG9yJz0+JHJbJ2NvbG9yJ10sJ2RheXMnPT5bXSwndG90YWxfbWludXRlcyc9PjAsJ2RheXNfd29ya2VkJz0+MF07CiAgICAgICAgfQogICAgICAgIGlmKCFpc3NldCgkYnlVc2VyWyR1aWRdWydkYXlzJ11bJGRhdGVdKSl7CiAgICAgICAgICAgICRieVVzZXJbJHVpZF1bJ2RheXMnXVskZGF0ZV09WydldmVudHMnPT5bXSwnd29ya19taW51dGVzJz0+MCwnYnJlYWtfbWludXRlcyc9PjAsJ3Ntb2tlX21pbnV0ZXMnPT4wLCd0b2lsZXRfY291bnQnPT4wXTsKICAgICAgICB9CiAgICAgICAgJGJ5VXNlclskdWlkXVsnZGF5cyddWyRkYXRlXVsnZXZlbnRzJ11bXT1bJ3N0YXR1cyc9PiRyWydzdGF0dXMnXSwndGltZSc9PiRyWydjcmVhdGVkX2F0J11dOwogICAgfQoKICAgIC8vIENhbGN1bGF0ZSBob3VycyBwZXIgdXNlciBwZXIgZGF5CiAgICBmb3JlYWNoKCRieVVzZXIgYXMgJHVpZD0+JiR1c2VyKXsKICAgICAgICBmb3JlYWNoKCR1c2VyWydkYXlzJ10gYXMgJGRhdGU9PiYkZGF5KXsKICAgICAgICAgICAgJGV2ZW50cz0kZGF5WydldmVudHMnXTsKICAgICAgICAgICAgJHdvcmtTdGFydD1udWxsOyRicmVha1N0YXJ0PW51bGw7JHNtb2tlU3RhcnQ9bnVsbDsKICAgICAgICAgICAgJHdvcmtNaW49MDskYnJlYWtNaW49MDskc21va2VNaW49MDskdG9pbGV0Q291bnQ9MDsKCiAgICAgICAgICAgIGZvcmVhY2goJGV2ZW50cyBhcyAkZXYpewogICAgICAgICAgICAgICAgJHQ9c3RydG90aW1lKCRldlsndGltZSddKTsKICAgICAgICAgICAgICAgICRzPSRldlsnc3RhdHVzJ107CiAgICAgICAgICAgICAgICBpZigkcz09PSdhcnJpdmVkJ3x8JHM9PT0nYmFjayd8fCRzPT09J3Ntb2tlX2JhY2snKXsKICAgICAgICAgICAgICAgICAgICAkd29ya1N0YXJ0PSR0OwogICAgICAgICAgICAgICAgICAgIGlmKCRzPT09J3Ntb2tlX2JhY2snJiYkc21va2VTdGFydCl7CiAgICAgICAgICAgICAgICAgICAgICAgICRzbW9rZU1pbis9cm91bmQoKCR0LSRzbW9rZVN0YXJ0KS82MCk7JHNtb2tlU3RhcnQ9bnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2VpZigkcz09PSdicmVhayd8fCRzPT09J2xlZnQnKXsKICAgICAgICAgICAgICAgICAgICBpZigkd29ya1N0YXJ0KXskd29ya01pbis9cm91bmQoKCR0LSR3b3JrU3RhcnQpLzYwKTskd29ya1N0YXJ0PW51bGw7fQogICAgICAgICAgICAgICAgICAgIGlmKCRzPT09J2JyZWFrJykkYnJlYWtTdGFydD0kdDsKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRzPT09J3Ntb2tlJyl7CiAgICAgICAgICAgICAgICAgICAgaWYoJHdvcmtTdGFydCl7JHdvcmtNaW4rPXJvdW5kKCgkdC0kd29ya1N0YXJ0KS82MCk7JHdvcmtTdGFydD1udWxsO30KICAgICAgICAgICAgICAgICAgICAkc21va2VTdGFydD0kdDsKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRzPT09J3RvaWxldCcpewogICAgICAgICAgICAgICAgICAgICR0b2lsZXRDb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIElmIHN0aWxsIHdvcmtpbmcgKG5vIGxlZnQgZXZlbnQgdG9kYXkpCiAgICAgICAgICAgIGlmKCR3b3JrU3RhcnQpewogICAgICAgICAgICAgICAgJG5vdz1zdHJ0b3RpbWUoJ25vdycpOwogICAgICAgICAgICAgICAgJHdvcmtNaW4rPXJvdW5kKCgkbm93LSR3b3JrU3RhcnQpLzYwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRheVsnd29ya19taW51dGVzJ109JHdvcmtNaW47CiAgICAgICAgICAgICRkYXlbJ2JyZWFrX21pbnV0ZXMnXT0kYnJlYWtNaW47CiAgICAgICAgICAgICRkYXlbJ3Ntb2tlX21pbnV0ZXMnXT0kc21va2VNaW47CiAgICAgICAgICAgICRkYXlbJ3RvaWxldF9jb3VudCddPSR0b2lsZXRDb3VudDsKICAgICAgICAgICAgJGRheVsnd29ya19ob3VycyddPXJvdW5kKCR3b3JrTWluLzYwLDEpOwogICAgICAgICAgICAkZGF5Wyd0aW1lbGluZSddPWFycmF5X21hcChmdW5jdGlvbigkZSl7cmV0dXJuIFsnc3RhdHVzJz0+JGVbJ3N0YXR1cyddLCd0aW1lJz0+c3Vic3RyKCRlWyd0aW1lJ10sMTEsNSldO30sICRldmVudHMpOwoKICAgICAgICAgICAgaWYoJHdvcmtNaW4+MCl7CiAgICAgICAgICAgICAgICAkdXNlclsndG90YWxfbWludXRlcyddKz0kd29ya01pbjsKICAgICAgICAgICAgICAgICR1c2VyWydkYXlzX3dvcmtlZCddKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHVzZXJbJ3RvdGFsX2hvdXJzJ109cm91bmQoJHVzZXJbJ3RvdGFsX21pbnV0ZXMnXS82MCwxKTsKICAgICAgICAkdXNlclsnYXZnX2hvdXJzX3Blcl9kYXknXT0kdXNlclsnZGF5c193b3JrZWQnXT4wP3JvdW5kKCR1c2VyWyd0b3RhbF9taW51dGVzJ10vJHVzZXJbJ2RheXNfd29ya2VkJ10vNjAsMSk6MDsKICAgICAgICB1bnNldCgkdXNlcik7CiAgICB9CgogICAgLy8gU3VtbWFyeSBzdGF0cwogICAgJHRvdGFsVXNlcnM9Y291bnQoJGJ5VXNlcik7CiAgICAkYWxsSG91cnM9YXJyYXlfc3VtKGFycmF5X2NvbHVtbigkYnlVc2VyLCd0b3RhbF9ob3VycycpKTsKCiAgICBvayhbCiAgICAgICAgJ2Zyb20nPT4kZnJvbSwKICAgICAgICAndG8nPT4kdG8sCiAgICAgICAgJ3VzZXJzJz0+YXJyYXlfdmFsdWVzKCRieVVzZXIpLAogICAgICAgICd0b3RhbF9ob3Vycyc9PnJvdW5kKCRhbGxIb3VycywxKSwKICAgICAgICAndG90YWxfdXNlcnMnPT4kdG90YWxVc2VycwogICAgXSk7Cn0KCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyDilIDilIAgSU5WT0lDSU5HICsgSFIgTU9EVUxFIOKUgOKUgAovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCi8vIOKUgOKUgCBPTkUtVElNRSBJTlNUQUxMIEZPUiBORVcgVEFCTEVTIOKUgOKUgAppZigkYWN0aW9uPT09J2luc3RhbGxfaW52b2ljaW5nJyl7CiAgICAkcGRvPWRiKCk7CiAgICAkYWx0ZXJzPVsKICAgICAgICAiQUxURVIgVEFCTEUgY2xpZW50cyBBREQgQ09MVU1OIHZhdF9udW1iZXIgVkFSQ0hBUig1MCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gYWRkcmVzcyBWQVJDSEFSKDUwMCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gY2l0eSBWQVJDSEFSKDE1MCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gY291bnRyeSBWQVJDSEFSKDEwMCkgREVGQVVMVCAn0JHRitC70LPQsNGA0LjRjyciLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gbW9sIFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIGNsaWVudHMgQUREIENPTFVNTiBpYmFuIFZBUkNIQVIoNTApIiwKICAgICAgICAiQUxURVIgVEFCTEUgY2xpZW50cyBBREQgQ09MVU1OIGNvbnRhY3RfcGVyc29uIFZBUkNIQVIoMjU1KSIsCiAgICBdOwogICAgZm9yZWFjaCgkYWx0ZXJzIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29tcGFueV9zZXR0aW5ncyAoCiAgICAgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpLCBlaWsgVkFSQ0hBUig1MCksIHZhdF9udW1iZXIgVkFSQ0hBUig1MCksCiAgICAgICAgYWRkcmVzcyBWQVJDSEFSKDUwMCksIGNpdHkgVkFSQ0hBUigxNTApLCBjb3VudHJ5IFZBUkNIQVIoMTAwKSBERUZBVUxUICfQkdGK0LvQs9Cw0YDQuNGPJywKICAgICAgICBtb2wgVkFSQ0hBUigyNTUpLCBpYmFuIFZBUkNIQVIoNTApLCBiaWMgVkFSQ0hBUigyMCksIGJhbmtfbmFtZSBWQVJDSEFSKDI1NSksCiAgICAgICAgbG9nb191cmwgVkFSQ0hBUig1MDApLCBkZWZhdWx0X3ZhdF9wZXJjZW50IERFQ0lNQUwoNSwyKSBERUZBVUxUIDIwLAogICAgICAgIGN1cnJlbmN5IFZBUkNIQVIoMTApIERFRkFVTFQgJ0VVUicsCiAgICAgICAgcHJlZml4X3Byb2Zvcm1hIFZBUkNIQVIoMjApIERFRkFVTFQgJycsIHByZWZpeF9pbnZvaWNlIFZBUkNIQVIoMjApIERFRkFVTFQgJycsCiAgICAgICAgcHJlZml4X2NyZWRpdF9ub3RlIFZBUkNIQVIoMjApIERFRkFVTFQgJ9Ca0JgnLCBwcmVmaXhfZGViaXRfbm90ZSBWQVJDSEFSKDIwKSBERUZBVUxUICfQlNCYJywKICAgICAgICBwcmVmaXhfb2ZmZXIgVkFSQ0hBUigyMCkgREVGQVVMVCAn0J7QpCcsIHByZWZpeF9xdW90ZSBWQVJDSEFSKDIwKSBERUZBVUxUICfQntCkJywKICAgICAgICBzbXRwX2hvc3QgVkFSQ0hBUigyNTUpLCBzbXRwX3BvcnQgSU5UIERFRkFVTFQgNTg3LCBzbXRwX3VzZXIgVkFSQ0hBUigyNTUpLAogICAgICAgIHNtdHBfcGFzcyBWQVJDSEFSKDI1NSksIHNtdHBfc2VjdXJlIFZBUkNIQVIoMTApIERFRkFVTFQgJ3RscycsCiAgICAgICAgc210cF9mcm9tX25hbWUgVkFSQ0hBUigyNTUpLCBzbXRwX2Zyb21fZW1haWwgVkFSQ0hBUigyNTUpCiAgICApIik7CiAgICAkY250PSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBjb21wYW55X3NldHRpbmdzIiktPmZldGNoQ29sdW1uKCk7CiAgICBpZigkY250PT0wKXsKICAgICAgICAkcGRvLT5leGVjKCJJTlNFUlQgSU5UTyBjb21wYW55X3NldHRpbmdzIChpZCxuYW1lLGVpayx2YXRfbnVtYmVyLGFkZHJlc3MsY2l0eSxtb2wsaWJhbixiaWMsYmFua19uYW1lKQogICAgICAgICAgICBWQUxVRVMgKDEsJ9Cj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUJywnMjA3NDE5NDUxJywnQkcyMDc0MTk0NTEnLCfRg9C7LiDQnNGD0YHQsNC70LAgMTEnLCc2NzUwINCz0YAuINCQ0YDQtNC40L3QvicsCiAgICAgICAgICAgICfQpdCQ0JrQkNCdINCQ0JvQmtCQ0J0g0J7QodCc0JDQnScsJ0JHNzZERU1JOTI0MDEwMDAzMTg0ODAnLCdERU1JQkdTRicsJ9Ci0YrRgNCz0L7QstGB0LrQsCDQkdCw0L3QutCwINCUINCQ0JQnKSIpOwogICAgfQoKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGRvY19jb3VudGVycyAoCiAgICAgICAgdHlwZSBWQVJDSEFSKDIwKSBOT1QgTlVMTCwgeWVhciBJTlQgTk9UIE5VTEwsIGNvdW50ZXIgSU5UIERFRkFVTFQgMCwKICAgICAgICBQUklNQVJZIEtFWSh0eXBlLHllYXIpCiAgICApIik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZG9jdW1lbnRzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSwKICAgICAgICB0eXBlIFZBUkNIQVIoMjApIE5PVCBOVUxMLAogICAgICAgIG51bWJlciBWQVJDSEFSKDUwKSwgZnVsbF9udW1iZXIgVkFSQ0hBUig1MCksCiAgICAgICAgY2xpZW50X2lkIFZBUkNIQVIoMzYpLCBjbGllbnRfc25hcHNob3QgVEVYVCwKICAgICAgICBpc3N1ZV9kYXRlIERBVEUsIHRheF9kYXRlIERBVEUsIGR1ZV9kYXRlIERBVEUgTlVMTCwKICAgICAgICBpdGVtcyBURVhULCBzdWJ0b3RhbCBERUNJTUFMKDEyLDIpIERFRkFVTFQgMCwgdmF0X3BlcmNlbnQgREVDSU1BTCg1LDIpIERFRkFVTFQgMjAsCiAgICAgICAgdmF0X2Ftb3VudCBERUNJTUFMKDEyLDIpIERFRkFVTFQgMCwgdG90YWwgREVDSU1BTCgxMiwyKSBERUZBVUxUIDAsCiAgICAgICAgY3VycmVuY3kgVkFSQ0hBUigxMCkgREVGQVVMVCAnRVVSJywgc3RhdHVzIFZBUkNIQVIoMzApIERFRkFVTFQgJ2RyYWZ0JywKICAgICAgICBwYXltZW50X21ldGhvZCBWQVJDSEFSKDUwKSBERUZBVUxUICdiYW5rJywgbm90ZXMgVEVYVCwKICAgICAgICByZWxhdGVkX2RvY19pZCBWQVJDSEFSKDM2KSBOVUxMLCByZWN1cnJpbmdfaWQgVkFSQ0hBUigzNikgTlVMTCwKICAgICAgICBjcmVhdGVkX2J5IFZBUkNIQVIoMTAwKSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIHVwZGF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVjdXJyaW5nX2ludm9pY2VzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSwKICAgICAgICBjbGllbnRfaWQgVkFSQ0hBUigzNiksIGRvY190eXBlIFZBUkNIQVIoMjApIERFRkFVTFQgJ2ludm9pY2UnLAogICAgICAgIGl0ZW1zIFRFWFQsIHZhdF9wZXJjZW50IERFQ0lNQUwoNSwyKSBERUZBVUxUIDIwLCBub3RlcyBURVhULAogICAgICAgIGludGVydmFsX3R5cGUgVkFSQ0hBUigyMCkgREVGQVVMVCAnbW9udGhseScsCiAgICAgICAgbmV4dF9ydW5fZGF0ZSBEQVRFLCBhY3RpdmUgVElOWUlOVCgxKSBERUZBVUxUIDEsCiAgICAgICAgbGFzdF9nZW5lcmF0ZWRfYXQgVElNRVNUQU1QIE5VTEwsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwoKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGhyX3JlcXVlc3RzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSwKICAgICAgICB1c2VyX2lkIElOVCwgZW1wbG95ZWVfbmFtZSBWQVJDSEFSKDI1NSksIHBvc2l0aW9uIFZBUkNIQVIoMjU1KSwgZWduIFZBUkNIQVIoMjApLAogICAgICAgIHR5cGUgVkFSQ0hBUigzMCkgTk9UIE5VTEwsCiAgICAgICAgc3RhcnRfZGF0ZSBEQVRFIE5VTEwsIGVuZF9kYXRlIERBVEUgTlVMTCwgZGF5cyBJTlQgREVGQVVMVCAwLAogICAgICAgIG5vdGljZV9kYXlzIElOVCBERUZBVUxUIDAsIGxhc3Rfd29ya19kYXRlIERBVEUgTlVMTCwKICAgICAgICByZWFzb24gVEVYVCwgc3RhdHVzIFZBUkNIQVIoMjApIERFRkFVTFQgJ3BlbmRpbmcnLAogICAgICAgIGFwcHJvdmVkX2J5IFZBUkNIQVIoMTAwKSwgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwoKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGVtYWlsX2xvZyAoCiAgICAgICAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLCBkb2N1bWVudF9pZCBWQVJDSEFSKDM2KSwKICAgICAgICB0b19lbWFpbCBWQVJDSEFSKDI1NSksIHN1YmplY3QgVkFSQ0hBUig1MDApLCBzdGF0dXMgVkFSQ0hBUigyMCksCiAgICAgICAgZXJyb3IgVEVYVCwgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwoKICAgIG9rKCdJbnZvaWNpbmcgKyBIUiB0YWJsZXMgcmVhZHknKTsKfQoKLy8g4pSA4pSAIENPTVBBTlkgU0VUVElOR1MgKG93biBjb21wYW55IHByb2ZpbGUgKyBudW1iZXJpbmcgcHJlZml4ZXMgKyBTTVRQKSDilIDilIAKaWYoJGFjdGlvbj09PSdjb21wYW55X3NldHRpbmdzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRyPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGNvbXBhbnlfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpOwogICAgICAgIG9rKCRyPzpbXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgJGZpZWxkcz1bJ25hbWUnLCdlaWsnLCd2YXRfbnVtYmVyJywnYWRkcmVzcycsJ2NpdHknLCdjb3VudHJ5JywnbW9sJywnaWJhbicsJ2JpYycsJ2JhbmtfbmFtZScsJ2xvZ29fdXJsJywKICAgICAgICAgICAgJ2RlZmF1bHRfdmF0X3BlcmNlbnQnLCdjdXJyZW5jeScsJ3ByZWZpeF9wcm9mb3JtYScsJ3ByZWZpeF9pbnZvaWNlJywncHJlZml4X2NyZWRpdF9ub3RlJywncHJlZml4X2RlYml0X25vdGUnLAogICAgICAgICAgICAncHJlZml4X29mZmVyJywncHJlZml4X3F1b3RlJywnc210cF9ob3N0Jywnc210cF9wb3J0Jywnc210cF91c2VyJywnc210cF9wYXNzJywnc210cF9zZWN1cmUnLCdzbXRwX2Zyb21fbmFtZScsJ3NtdHBfZnJvbV9lbWFpbCddOwogICAgICAgICRzZXQ9W107JHZhbHM9W107CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmKXsgaWYoYXJyYXlfa2V5X2V4aXN0cygkZiwkYikpeyAkc2V0W109IiRmPT8iOyAkdmFsc1tdPSRiWyRmXTsgfSB9CiAgICAgICAgaWYoJHNldCkgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGNvbXBhbnlfc2V0dGluZ3MgU0VUICIuaW1wbG9kZSgnLCcsJHNldCkuIiBXSEVSRSBpZD0xIiktPmV4ZWN1dGUoJHZhbHMpOwogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgovLyDilIDilIAgRUlLIC8gVkFUIExPT0tVUCAodmlhIG9mZmljaWFsIGZyZWUgRVUgVklFUyBzZXJ2aWNlKSDilIDilIAKaWYoJGFjdGlvbj09PSdlaWtfbG9va3VwJyl7CiAgICAkZWlrPXByZWdfcmVwbGFjZSgnL1xELycsJycsJF9HRVRbJ2VpayddPz8nJyk7CiAgICAkY291bnRyeT1zdHJ0b3VwcGVyKCRfR0VUWydjb3VudHJ5J10/PydCRycpOwogICAgaWYoISRlaWspIGVycignTWlzc2luZyBlaWsnKTsKICAgICR2YXQ9c3Vic3RyKCRlaWssMCw5KTsKICAgIHRyeXsKICAgICAgICAkY2g9Y3VybF9pbml0KCdodHRwczovL2VjLmV1cm9wYS5ldS90YXhhdGlvbl9jdXN0b21zL3ZpZXMvcmVzdC1hcGkvY2hlY2stdmF0LW51bWJlcicpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCxbCiAgICAgICAgICAgIENVUkxPUFRfUE9TVD0+dHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9QT1NURklFTERTPT5qc29uX2VuY29kZShbJ2NvdW50cnlDb2RlJz0+JGNvdW50cnksJ3ZhdE51bWJlcic9PiR2YXRdKSwKICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSPT5bJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiddLAogICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSPT50cnVlLENVUkxPUFRfVElNRU9VVD0+OCxDVVJMT1BUX1NTTF9WRVJJRllQRUVSPT5mYWxzZSwKICAgICAgICBdKTsKICAgICAgICAkcmVzcD1jdXJsX2V4ZWMoJGNoKTtjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgJGRhdGE9anNvbl9kZWNvZGUoJHJlc3AsdHJ1ZSk7CiAgICAgICAgaWYoJGRhdGEgJiYgIWVtcHR5KCRkYXRhWyd2YWxpZCddKSl7CiAgICAgICAgICAgIG9rKFsnZm91bmQnPT50cnVlLCduYW1lJz0+JGRhdGFbJ25hbWUnXT8/JycsJ2FkZHJlc3MnPT4kZGF0YVsnYWRkcmVzcyddPz8nJywKICAgICAgICAgICAgICAgICd2YXRfbnVtYmVyJz0+JGNvdW50cnkuJHZhdCwnZWlrJz0+JGVpa10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9rKFsnZm91bmQnPT5mYWxzZSwnbWVzc2FnZSc9PifQndGP0LzQsCDQsNC60YLQuNCy0L3QsCDQlNCU0KEg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQsiBWSUVTINC30LAg0YLQvtC30Lgg0L3QvtC80LXRgCDigJQg0LLRitCy0LXQtNC10YLQtSDQtNCw0L3QvdC40YLQtSDRgNGK0YfQvdC+LiddKTsKICAgICAgICB9CiAgICB9Y2F0Y2goRXhjZXB0aW9uICRlKXsKICAgICAgICBvayhbJ2ZvdW5kJz0+ZmFsc2UsJ21lc3NhZ2UnPT4nVklFUyDRg9GB0LvRg9Cz0LDRgtCwINC90LAg0JXQoSDQstGA0LXQvNC10L3QvdC+INC90LXQtNC+0YHRgtGK0L/QvdCwIOKAlCDQstGK0LLQtdC00LXRgtC1INC00LDQvdC90LjRgtC1INGA0YrRh9C90L4uJ10pOwogICAgfQp9CgovLyDilIDilIAgRE9DVU1FTlRTIChwcm9mb3JtYSAvIGludm9pY2UgLyBjcmVkaXRfbm90ZSAvIGRlYml0X25vdGUgLyBvZmZlciAvIHF1b3RlKSDilIDilIAKaWYoJGFjdGlvbj09PSdkb2N1bWVudHMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJyl7CiAgICAgICAgaWYoIWVtcHR5KCRfR0VUWydpZCddKSl7CiAgICAgICAgICAgICRzPSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gZG9jdW1lbnRzIFdIRVJFIGlkPT8iKTsKICAgICAgICAgICAgJHMtPmV4ZWN1dGUoWyRfR0VUWydpZCddXSk7CiAgICAgICAgICAgICRkPSRzLT5mZXRjaCgpOwogICAgICAgICAgICBpZigkZCl7JGRbJ2l0ZW1zJ109anNvbl9kZWNvZGUoJGRbJ2l0ZW1zJ10sdHJ1ZSk7JGRbJ2NsaWVudF9zbmFwc2hvdCddPWpzb25fZGVjb2RlKCRkWydjbGllbnRfc25hcHNob3QnXSx0cnVlKTt9CiAgICAgICAgICAgIG9rKCRkKTsKICAgICAgICB9CiAgICAgICAgJHdoZXJlPVtdOyRwYXJhbXM9W107CiAgICAgICAgZm9yZWFjaChbJ3R5cGUnLCdjbGllbnRfaWQnLCdzdGF0dXMnXSBhcyAkZil7CiAgICAgICAgICAgIGlmKCFlbXB0eSgkX0dFVFskZl0pKXskd2hlcmVbXT0iJGY9PyI7JHBhcmFtc1tdPSRfR0VUWyRmXTt9CiAgICAgICAgfQogICAgICAgICRzcWw9IlNFTEVDVCAqIEZST00gZG9jdW1lbnRzIi4oJHdoZXJlPycgV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsJHdoZXJlKTonJykuIiBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiOwogICAgICAgICRzdD0kcGRvLT5wcmVwYXJlKCRzcWwpOyRzdC0+ZXhlY3V0ZSgkcGFyYW1zKTsKICAgICAgICAkcm93cz0kc3QtPmZldGNoQWxsKCk7CiAgICAgICAgZm9yZWFjaCgkcm93cyBhcyAmJHIpeyRyWydpdGVtcyddPWpzb25fZGVjb2RlKCRyWydpdGVtcyddLHRydWUpOyRyWydjbGllbnRfc25hcHNob3QnXT1qc29uX2RlY29kZSgkclsnY2xpZW50X3NuYXBzaG90J10sdHJ1ZSk7fQogICAgICAgIG9rKCRyb3dzKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTsKICAgICAgICAkdHlwZT0kYlsndHlwZSddPz8naW52b2ljZSc7CiAgICAgICAgJGlzTmV3PWVtcHR5KCRiWydpZCddKTsKICAgICAgICAkaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnZCcsdHJ1ZSk7CiAgICAgICAgJGl0ZW1zPSRiWydpdGVtcyddPz9bXTsKICAgICAgICAkc3VidG90YWw9MDtmb3JlYWNoKCRpdGVtcyBhcyAkaXQpeyRzdWJ0b3RhbCs9KGZsb2F0KSgkaXRbJ3F0eSddPz8xKSooZmxvYXQpKCRpdFsncHJpY2UnXT8/MCk7fQogICAgICAgICR2YXRQZXJjZW50PWlzc2V0KCRiWyd2YXRfcGVyY2VudCddKT8oZmxvYXQpJGJbJ3ZhdF9wZXJjZW50J106MjA7CiAgICAgICAgJHZhdEFtb3VudD1yb3VuZCgkc3VidG90YWwqJHZhdFBlcmNlbnQvMTAwLDIpOwogICAgICAgICR0b3RhbD1yb3VuZCgkc3VidG90YWwrJHZhdEFtb3VudCwyKTsKICAgICAgICAkY29tcD0kcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBjb21wYW55X3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKT86W107CgogICAgICAgICRzbmFwc2hvdD1udWxsOwogICAgICAgIGlmKCFlbXB0eSgkYlsnY2xpZW50X2lkJ10pKXsKICAgICAgICAgICAgJGNzPSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gY2xpZW50cyBXSEVSRSBpZD0/Iik7JGNzLT5leGVjdXRlKFskYlsnY2xpZW50X2lkJ11dKTsKICAgICAgICAgICAgJGNSb3c9JGNzLT5mZXRjaCgpO2lmKCRjUm93KSRzbmFwc2hvdD0kY1JvdzsKICAgICAgICB9CiAgICAgICAgaWYoIWVtcHR5KCRiWydjbGllbnRfc25hcHNob3QnXSkpJHNuYXBzaG90PSRiWydjbGllbnRfc25hcHNob3QnXTsKCiAgICAgICAgaWYoJGlzTmV3KXsKICAgICAgICAgICAgJHByZWZpeE1hcD1bJ3Byb2Zvcm1hJz0+JGNvbXBbJ3ByZWZpeF9wcm9mb3JtYSddPz8nJywnaW52b2ljZSc9PiRjb21wWydwcmVmaXhfaW52b2ljZSddPz8nJywKICAgICAgICAgICAgICAgICdjcmVkaXRfbm90ZSc9PiRjb21wWydwcmVmaXhfY3JlZGl0X25vdGUnXT8/J9Ca0JgnLCdkZWJpdF9ub3RlJz0+JGNvbXBbJ3ByZWZpeF9kZWJpdF9ub3RlJ10/PyfQlNCYJywKICAgICAgICAgICAgICAgICdvZmZlcic9PiRjb21wWydwcmVmaXhfb2ZmZXInXT8/J9Ce0KQnLCdxdW90ZSc9PiRjb21wWydwcmVmaXhfcXVvdGUnXT8/J9Ce0KQnXTsKICAgICAgICAgICAgJG51bT1uZXh0RG9jTnVtYmVyKCRwZG8sJHR5cGUpOwogICAgICAgICAgICAkZnVsbD0oJHByZWZpeE1hcFskdHlwZV0/PycnKS4kbnVtOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRleD0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgbnVtYmVyLGZ1bGxfbnVtYmVyIEZST00gZG9jdW1lbnRzIFdIRVJFIGlkPT8iKTskZXgtPmV4ZWN1dGUoWyRpZF0pOwogICAgICAgICAgICAkZXhyPSRleC0+ZmV0Y2goKTsKICAgICAgICAgICAgJG51bT0kZXhyWydudW1iZXInXT8/bmV4dERvY051bWJlcigkcGRvLCR0eXBlKTsKICAgICAgICAgICAgJGZ1bGw9JGV4clsnZnVsbF9udW1iZXInXT8/JG51bTsKICAgICAgICB9CgogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGRvY3VtZW50cyAoaWQsdHlwZSxudW1iZXIsZnVsbF9udW1iZXIsY2xpZW50X2lkLGNsaWVudF9zbmFwc2hvdCxpc3N1ZV9kYXRlLHRheF9kYXRlLGR1ZV9kYXRlLAogICAgICAgICAgICBpdGVtcyxzdWJ0b3RhbCx2YXRfcGVyY2VudCx2YXRfYW1vdW50LHRvdGFsLGN1cnJlbmN5LHN0YXR1cyxwYXltZW50X21ldGhvZCxub3RlcyxyZWxhdGVkX2RvY19pZCxyZWN1cnJpbmdfaWQsY3JlYXRlZF9ieSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgY2xpZW50X2lkPVZBTFVFUyhjbGllbnRfaWQpLGNsaWVudF9zbmFwc2hvdD1WQUxVRVMoY2xpZW50X3NuYXBzaG90KSwKICAgICAgICAgICAgaXNzdWVfZGF0ZT1WQUxVRVMoaXNzdWVfZGF0ZSksdGF4X2RhdGU9VkFMVUVTKHRheF9kYXRlKSxkdWVfZGF0ZT1WQUxVRVMoZHVlX2RhdGUpLGl0ZW1zPVZBTFVFUyhpdGVtcyksCiAgICAgICAgICAgIHN1YnRvdGFsPVZBTFVFUyhzdWJ0b3RhbCksdmF0X3BlcmNlbnQ9VkFMVUVTKHZhdF9wZXJjZW50KSx2YXRfYW1vdW50PVZBTFVFUyh2YXRfYW1vdW50KSx0b3RhbD1WQUxVRVModG90YWwpLAogICAgICAgICAgICBjdXJyZW5jeT1WQUxVRVMoY3VycmVuY3kpLHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxwYXltZW50X21ldGhvZD1WQUxVRVMocGF5bWVudF9tZXRob2QpLG5vdGVzPVZBTFVFUyhub3RlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkdHlwZSwkbnVtLCRmdWxsLCRiWydjbGllbnRfaWQnXT8/bnVsbCxqc29uX2VuY29kZSgkc25hcHNob3QsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksCiAgICAgICAgICAgICAgICAkYlsnaXNzdWVfZGF0ZSddPz9kYXRlKCdZLW0tZCcpLCRiWyd0YXhfZGF0ZSddPz8oJGJbJ2lzc3VlX2RhdGUnXT8/ZGF0ZSgnWS1tLWQnKSksJGJbJ2R1ZV9kYXRlJ10/P251bGwsCiAgICAgICAgICAgICAgICBqc29uX2VuY29kZSgkaXRlbXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksJHN1YnRvdGFsLCR2YXRQZXJjZW50LCR2YXRBbW91bnQsJHRvdGFsLAogICAgICAgICAgICAgICAgJGJbJ2N1cnJlbmN5J10/PygkY29tcFsnY3VycmVuY3knXT8/J0VVUicpLCRiWydzdGF0dXMnXT8/J2RyYWZ0JywkYlsncGF5bWVudF9tZXRob2QnXT8/J2JhbmsnLAogICAgICAgICAgICAgICAgJGJbJ25vdGVzJ10/PycnLCRiWydyZWxhdGVkX2RvY19pZCddPz9udWxsLCRiWydyZWN1cnJpbmdfaWQnXT8/bnVsbCwkYlsnY3JlYXRlZF9ieSddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWQsJ251bWJlcic9PiRudW0sJ2Z1bGxfbnVtYmVyJz0+JGZ1bGwsJ3RvdGFsJz0+JHRvdGFsXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGRvY3VtZW50cyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIERPQ1VNRU5UIFBSSU5UIERBVEEgKG93biBjb21wYW55ICsgY2xpZW50IHNuYXBzaG90ICsgaXRlbXMsIGZvciBpbnZvaWNlLWRvYy5odG1sKSDilIDilIAKaWYoJGFjdGlvbj09PSdkb2N1bWVudF9mdWxsJyl7CiAgICAkcGRvPWRiKCk7CiAgICAkaWQ9JF9HRVRbJ2lkJ10/PycnOwogICAgJHM9JHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBkb2N1bWVudHMgV0hFUkUgaWQ9PyIpOyRzLT5leGVjdXRlKFskaWRdKTsKICAgICRkb2M9JHMtPmZldGNoKCk7CiAgICBpZighJGRvYykgZXJyKCfQlNC+0LrRg9C80LXQvdGC0YrRgiDQvdC1INC1INC90LDQvNC10YDQtdC9Jyk7CiAgICAkZG9jWydpdGVtcyddPWpzb25fZGVjb2RlKCRkb2NbJ2l0ZW1zJ10sdHJ1ZSk7CiAgICAkZG9jWydjbGllbnRfc25hcHNob3QnXT1qc29uX2RlY29kZSgkZG9jWydjbGllbnRfc25hcHNob3QnXSx0cnVlKTsKICAgICRjb21wPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGNvbXBhbnlfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpOwogICAgb2soWydkb2N1bWVudCc9PiRkb2MsJ2NvbXBhbnknPT4kY29tcF0pOwp9CgovLyDilIDilIAgSU5WT0lDRSBSRVBPUlRTIC8g0KHQn9Cg0JDQktCa0Jgg4pSA4pSACmlmKCRhY3Rpb249PT0naW52b2ljZV9zdGF0cycpewogICAgJHBkbz1kYigpOwogICAgJGJ5TW9udGg9JHBkby0+cXVlcnkoIlNFTEVDVCBEQVRFX0ZPUk1BVChpc3N1ZV9kYXRlLCclWS0lbScpIHltLCBTVU0odG90YWwpIHRvdGFsIEZST00gZG9jdW1lbnRzCiAgICAgICAgV0hFUkUgdHlwZT0naW52b2ljZScgR1JPVVAgQlkgeW0gT1JERVIgQlkgeW0gREVTQyBMSU1JVCAxMiIpLT5mZXRjaEFsbCgpOwogICAgJGJ5VHlwZT0kcGRvLT5xdWVyeSgiU0VMRUNUIHR5cGUsIENPVU5UKCopIGNudCwgU1VNKHRvdGFsKSB0b3RhbCBGUk9NIGRvY3VtZW50cyBHUk9VUCBCWSB0eXBlIiktPmZldGNoQWxsKCk7CiAgICAkYnlDbGllbnRSYXc9JHBkby0+cXVlcnkoIlNFTEVDVCBjbGllbnRfaWQsIGNsaWVudF9zbmFwc2hvdCwgU1VNKHRvdGFsKSB0b3RhbCwgQ09VTlQoKikgY250IEZST00gZG9jdW1lbnRzCiAgICAgICAgV0hFUkUgdHlwZT0naW52b2ljZScgR1JPVVAgQlkgY2xpZW50X2lkIE9SREVSIEJZIHRvdGFsIERFU0MgTElNSVQgMTAiKS0+ZmV0Y2hBbGwoKTsKICAgIGZvcmVhY2goJGJ5Q2xpZW50UmF3IGFzICYkcil7JHNuPWpzb25fZGVjb2RlKCRyWydjbGllbnRfc25hcHNob3QnXSx0cnVlKTskclsnbmFtZSddPSRzblsnbmFtZSddPz8n4oCUJzt1bnNldCgkclsnY2xpZW50X3NuYXBzaG90J10pO30KICAgICR1bnBhaWQ9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBjbnQsIENPQUxFU0NFKFNVTSh0b3RhbCksMCkgdG90YWwgRlJPTSBkb2N1bWVudHMKICAgICAgICBXSEVSRSB0eXBlPSdpbnZvaWNlJyBBTkQgc3RhdHVzIElOICgnc2VudCcsJ292ZXJkdWUnKSIpLT5mZXRjaCgpOwogICAgb2soWydieV9tb250aCc9PmFycmF5X3JldmVyc2UoJGJ5TW9udGgpLCdieV90eXBlJz0+JGJ5VHlwZSwnYnlfY2xpZW50Jz0+JGJ5Q2xpZW50UmF3LCd1bnBhaWQnPT4kdW5wYWlkXSk7Cn0KCi8vIOKUgOKUgCBFWFBPUlQgVE8gQ1NWIChjb21wYXRpYmxlIHdpdGggaW1wb3J0IGludG8gYWNjb3VudGluZyBzb2Z0d2FyZSkg4pSA4pSACmlmKCRhY3Rpb249PT0nZG9jdW1lbnRzX2V4cG9ydCcpewogICAgJHBkbz1kYigpOwogICAgJHR5cGU9JF9HRVRbJ3R5cGUnXT8/Jyc7CiAgICAkc3FsPSJTRUxFQ1QgKiBGUk9NIGRvY3VtZW50cyIuKCR0eXBlPyIgV0hFUkUgdHlwZT0iLiRwZG8tPnF1b3RlKCR0eXBlKToiIikuIiBPUkRFUiBCWSBpc3N1ZV9kYXRlIjsKICAgICRyb3dzPSRwZG8tPnF1ZXJ5KCRzcWwpLT5mZXRjaEFsbCgpOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvY3N2OyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJ3ZWJ0cml4aWFfZG9jdW1lbnRzLmNzdiInKTsKICAgIGVjaG8gIlx4RUZceEJCXHhCRiI7CiAgICAkb3V0PWZvcGVuKCdwaHA6Ly9vdXRwdXQnLCd3Jyk7CiAgICBmcHV0Y3N2KCRvdXQsWyfQndC+0LzQtdGAJywn0KLQuNC/Jywn0JTQsNGC0LAg0L3QsCDQuNC30LTQsNCy0LDQvdC1Jywn0JTQsNC90YrRh9C90LAg0LTQsNGC0LAnLCfQmtC70LjQtdC90YInLCfQldCY0JonLCfQlNCU0KEg0L3QvtC80LXRgCcsJ9CU0LDQvdGK0YfQvdCwINC+0YHQvdC+0LLQsCcsJ9CU0JTQoSAlJywn0JTQlNChJywn0J7QsdGJ0L4nLCfQktCw0LvRg9GC0LAnLCfQodGC0LDRgtGD0YEnXSk7CiAgICBmb3JlYWNoKCRyb3dzIGFzICRyKXsKICAgICAgICAkc25hcD1qc29uX2RlY29kZSgkclsnY2xpZW50X3NuYXBzaG90J10sdHJ1ZSk7CiAgICAgICAgZnB1dGNzdigkb3V0LFskclsnZnVsbF9udW1iZXInXSwkclsndHlwZSddLCRyWydpc3N1ZV9kYXRlJ10sJHJbJ3RheF9kYXRlJ10sJHNuYXBbJ25hbWUnXT8/JycsCiAgICAgICAgICAgICRzbmFwWydlaWsnXT8/JycsJHNuYXBbJ3ZhdF9udW1iZXInXT8/JycsJHJbJ3N1YnRvdGFsJ10sJHJbJ3ZhdF9wZXJjZW50J10sJHJbJ3ZhdF9hbW91bnQnXSwKICAgICAgICAgICAgJHJbJ3RvdGFsJ10sJHJbJ2N1cnJlbmN5J10sJHJbJ3N0YXR1cyddXSk7CiAgICB9CiAgICBmY2xvc2UoJG91dCk7CiAgICBleGl0Owp9CgovLyDilIDilIAgSU1QT1JUIENMSUVOVFMgRlJPTSBDU1Yg4pSA4pSACmlmKCRhY3Rpb249PT0nY2xpZW50c19pbXBvcnQnKXsKICAgICRwZG89ZGIoKTsKICAgICRiPWJvZHkoKTsKICAgICRjc3Y9JGJbJ2NzdiddPz8nJzsKICAgIGlmKCEkY3N2KSBlcnIoJ01pc3NpbmcgY3N2Jyk7CiAgICAkbGluZXM9cHJlZ19zcGxpdCgnL1xyXG58XHJ8XG4vJyx0cmltKCRjc3YpKTsKICAgICRoZWFkZXI9YXJyYXlfbWFwKCd0cmltJyxzdHJfZ2V0Y3N2KGFycmF5X3NoaWZ0KCRsaW5lcykpKTsKICAgICRtYXA9YXJyYXlfZmxpcCgkaGVhZGVyKTsKICAgICRjb3VudD0wOwogICAgZm9yZWFjaCgkbGluZXMgYXMgJGxpbmUpewogICAgICAgIGlmKCF0cmltKCRsaW5lKSljb250aW51ZTsKICAgICAgICAkcm93PXN0cl9nZXRjc3YoJGxpbmUpOwogICAgICAgICRnZXQ9ZnVuY3Rpb24oJGspIHVzZSgkcm93LCRtYXApe3JldHVybiBpc3NldCgkbWFwWyRrXSkmJmlzc2V0KCRyb3dbJG1hcFska11dKT90cmltKCRyb3dbJG1hcFska11dKTonJzt9OwogICAgICAgICRpZD11bmlxaWQoJ2MnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGNsaWVudHMgKGlkLG5hbWUsY29tcGFueSxlbWFpbCxwaG9uZSxlaWssdmF0X251bWJlcixhZGRyZXNzLGNpdHksbW9sLG5vdGVzKQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkZ2V0KCduYW1lJyksJGdldCgnY29tcGFueScpLCRnZXQoJ2VtYWlsJyksJGdldCgncGhvbmUnKSwkZ2V0KCdlaWsnKSwKICAgICAgICAgICAgICAgICRnZXQoJ3ZhdF9udW1iZXInKSwkZ2V0KCdhZGRyZXNzJyksJGdldCgnY2l0eScpLCRnZXQoJ21vbCcpLCcnXSk7CiAgICAgICAgJGNvdW50Kys7CiAgICB9CiAgICBvayhbJ2ltcG9ydGVkJz0+JGNvdW50XSk7Cn0KCi8vIOKUgOKUgCBSRUNVUlJJTkcgLyDQn9CV0KDQmNCe0JTQmNCn0J3QmCDQpNCQ0JrQotCj0KDQmCDilIDilIAKaWYoJGFjdGlvbj09PSdyZWN1cnJpbmcnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gcmVjdXJyaW5nX2ludm9pY2VzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgncicsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcmVjdXJyaW5nX2ludm9pY2VzIChpZCxjbGllbnRfaWQsZG9jX3R5cGUsaXRlbXMsdmF0X3BlcmNlbnQsbm90ZXMsaW50ZXJ2YWxfdHlwZSxuZXh0X3J1bl9kYXRlLGFjdGl2ZSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgY2xpZW50X2lkPVZBTFVFUyhjbGllbnRfaWQpLGRvY190eXBlPVZBTFVFUyhkb2NfdHlwZSksaXRlbXM9VkFMVUVTKGl0ZW1zKSwKICAgICAgICAgICAgdmF0X3BlcmNlbnQ9VkFMVUVTKHZhdF9wZXJjZW50KSxub3Rlcz1WQUxVRVMobm90ZXMpLGludGVydmFsX3R5cGU9VkFMVUVTKGludGVydmFsX3R5cGUpLAogICAgICAgICAgICBuZXh0X3J1bl9kYXRlPVZBTFVFUyhuZXh0X3J1bl9kYXRlKSxhY3RpdmU9VkFMVUVTKGFjdGl2ZSkiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnY2xpZW50X2lkJ10/P251bGwsJGJbJ2RvY190eXBlJ10/PydpbnZvaWNlJyxqc29uX2VuY29kZSgkYlsnaXRlbXMnXT8/W10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksCiAgICAgICAgICAgICAgICAkYlsndmF0X3BlcmNlbnQnXT8/MjAsJGJbJ25vdGVzJ10/PycnLCRiWydpbnRlcnZhbF90eXBlJ10/Pydtb250aGx5JywkYlsnbmV4dF9ydW5fZGF0ZSddPz9kYXRlKCdZLW0tZCcpLCRiWydhY3RpdmUnXT8/MV0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gcmVjdXJyaW5nX2ludm9pY2VzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQ1JPTiBFTkRQT0lOVDogZ2VuZXJhdGVzIGR1ZSByZWN1cnJpbmcgaW52b2ljZXMuIENhbGwgZnJvbSBjUGFuZWwgQ3JvbiBKb2JzLiDilIDilIAKaWYoJGFjdGlvbj09PSdydW5fcmVjdXJyaW5nJyl7CiAgICAka2V5PSRfR0VUWydrZXknXT8/Jyc7CiAgICBpZigka2V5IT09J3dlYnRyaXhpYV9jcm9uXzIwMjYnKSBlcnIoJ0ZvcmJpZGRlbicpOwogICAgJHBkbz1kYigpOwogICAgJGR1ZT0kcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSByZWN1cnJpbmdfaW52b2ljZXMgV0hFUkUgYWN0aXZlPTEgQU5EIG5leHRfcnVuX2RhdGU8PUNVUkRBVEUoKSIpLT5mZXRjaEFsbCgpOwogICAgJGNvbXA9JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY29tcGFueV9zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk/OltdOwogICAgJGNyZWF0ZWQ9W107CiAgICBmb3JlYWNoKCRkdWUgYXMgJHIpewogICAgICAgICRpdGVtcz1qc29uX2RlY29kZSgkclsnaXRlbXMnXSx0cnVlKT86W107CiAgICAgICAgJHN1YnRvdGFsPTA7Zm9yZWFjaCgkaXRlbXMgYXMgJGl0KSRzdWJ0b3RhbCs9KGZsb2F0KSgkaXRbJ3F0eSddPz8xKSooZmxvYXQpKCRpdFsncHJpY2UnXT8/MCk7CiAgICAgICAgJHZhdEFtb3VudD1yb3VuZCgkc3VidG90YWwqJHJbJ3ZhdF9wZXJjZW50J10vMTAwLDIpOyR0b3RhbD1yb3VuZCgkc3VidG90YWwrJHZhdEFtb3VudCwyKTsKICAgICAgICAkY3M9JHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBjbGllbnRzIFdIRVJFIGlkPT8iKTskY3MtPmV4ZWN1dGUoWyRyWydjbGllbnRfaWQnXV0pOyRzbmFwPSRjcy0+ZmV0Y2goKTsKICAgICAgICAkaWQ9dW5pcWlkKCdkJyx0cnVlKTsKICAgICAgICAkbnVtPW5leHREb2NOdW1iZXIoJHBkbywkclsnZG9jX3R5cGUnXSk7CiAgICAgICAgJHByZWZpeE1hcD1bJ3Byb2Zvcm1hJz0+JGNvbXBbJ3ByZWZpeF9wcm9mb3JtYSddPz8nJywnaW52b2ljZSc9PiRjb21wWydwcmVmaXhfaW52b2ljZSddPz8nJ107CiAgICAgICAgJGZ1bGw9KCRwcmVmaXhNYXBbJHJbJ2RvY190eXBlJ11dPz8nJykuJG51bTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBkb2N1bWVudHMgKGlkLHR5cGUsbnVtYmVyLGZ1bGxfbnVtYmVyLGNsaWVudF9pZCxjbGllbnRfc25hcHNob3QsaXNzdWVfZGF0ZSx0YXhfZGF0ZSwKICAgICAgICAgICAgaXRlbXMsc3VidG90YWwsdmF0X3BlcmNlbnQsdmF0X2Ftb3VudCx0b3RhbCxjdXJyZW5jeSxzdGF0dXMsbm90ZXMscmVjdXJyaW5nX2lkLGNyZWF0ZWRfYnkpCiAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPyw/LD8sQ1VSREFURSgpLENVUkRBVEUoKSw/LD8sPyw/LD8sPyw/LD8sPyw/KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRyWydkb2NfdHlwZSddLCRudW0sJGZ1bGwsJHJbJ2NsaWVudF9pZCddLGpzb25fZW5jb2RlKCRzbmFwLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLAogICAgICAgICAgICAgICAganNvbl9lbmNvZGUoJGl0ZW1zLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLCRzdWJ0b3RhbCwkclsndmF0X3BlcmNlbnQnXSwkdmF0QW1vdW50LCR0b3RhbCwKICAgICAgICAgICAgICAgICRjb21wWydjdXJyZW5jeSddPz8nRVVSJywnZHJhZnQnLCRyWydub3RlcyddLCRyWydpZCddLCdjcm9uJ10pOwogICAgICAgICRpbnRlcnZhbD0kclsnaW50ZXJ2YWxfdHlwZSddPT09J21vbnRobHknPycrMSBtb250aCc6KCRyWydpbnRlcnZhbF90eXBlJ109PT0neWVhcmx5Jz8nKzEgeWVhcic6KCRyWydpbnRlcnZhbF90eXBlJ109PT0ncXVhcnRlcmx5Jz8nKzMgbW9udGgnOicrMSBtb250aCcpKTsKICAgICAgICAkbmV3TmV4dD1kYXRlKCdZLW0tZCcsc3RydG90aW1lKCRyWyduZXh0X3J1bl9kYXRlJ10uJyAnLiRpbnRlcnZhbCkpOwogICAgICAgICRwZG8tPnByZXBhcmUoIlVQREFURSByZWN1cnJpbmdfaW52b2ljZXMgU0VUIG5leHRfcnVuX2RhdGU9PyxsYXN0X2dlbmVyYXRlZF9hdD1OT1coKSBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRuZXdOZXh0LCRyWydpZCddXSk7CiAgICAgICAgJGNyZWF0ZWRbXT0kZnVsbDsKICAgIH0KICAgIG9rKFsnY3JlYXRlZCc9PiRjcmVhdGVkXSk7Cn0KCi8vIOKUgOKUgCBTRU5EIERPQ1VNRU5UIEJZIEVNQUlMIOKUgOKUgAppZigkYWN0aW9uPT09J3NlbmRfZG9jdW1lbnRfZW1haWwnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICAkZG9jSWQ9JGJbJ2RvY3VtZW50X2lkJ10/PycnOyR0bz0kYlsndG8nXT8/Jyc7CiAgICBpZighJGRvY0lkfHwhJHRvKSBlcnIoJ01pc3NpbmcgZG9jdW1lbnRfaWQgb3IgdG8nKTsKICAgICRzPSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gZG9jdW1lbnRzIFdIRVJFIGlkPT8iKTskcy0+ZXhlY3V0ZShbJGRvY0lkXSk7JGRvYz0kcy0+ZmV0Y2goKTsKICAgIGlmKCEkZG9jKSBlcnIoJ0RvY3VtZW50IG5vdCBmb3VuZCcpOwogICAgJGNvbXA9JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY29tcGFueV9zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICBpZihlbXB0eSgkY29tcFsnc210cF9ob3N0J10pKSBlcnIoJ1NNVFAg0L3QtSDQtSDQutC+0L3RhNC40LPRg9GA0LjRgNCw0L0gKNCd0LDRgdGC0YDQvtC50LrQuCDihpIg0JjQvNC10LnQuyknKTsKICAgICRzbmFwPWpzb25fZGVjb2RlKCRkb2NbJ2NsaWVudF9zbmFwc2hvdCddLHRydWUpOwogICAgJHR5cGVMYWJlbHM9Wydwcm9mb3JtYSc9PifQn9GA0L7RhNC+0YDQvNCwINGE0LDQutGC0YPRgNCwJywnaW52b2ljZSc9PifQpNCw0LrRgtGD0YDQsCcsJ2NyZWRpdF9ub3RlJz0+J9Ca0YDQtdC00LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsCiAgICAgICAgJ2RlYml0X25vdGUnPT4n0JTQtdCx0LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsJ29mZmVyJz0+J9Ce0YTQtdGA0YLQsCcsJ3F1b3RlJz0+J9Ce0YTQtdGA0YLQsCddOwogICAgJGxhYmVsPSR0eXBlTGFiZWxzWyRkb2NbJ3R5cGUnXV0/PyfQlNC+0LrRg9C80LXQvdGCJzsKICAgICRsaW5rPSRiWydsaW5rJ10/PycnOwogICAgJHN1YmplY3Q9JGJbJ3N1YmplY3QnXT8/KCRsYWJlbC4nIOKEliAnLiRkb2NbJ2Z1bGxfbnVtYmVyJ10pOwogICAgJGJvZHkyPSRiWydib2R5J10/PygiPHA+0JfQtNGA0LDQstC10LnRgtC1Ii4oIWVtcHR5KCRzbmFwWyduYW1lJ10pPycsICcuJHNuYXBbJ25hbWUnXTonJykuIiw8L3A+Ii4KICAgICAgICAiPHA+0JjQt9C/0YDQsNGJ0LDQvNC1INCS0LggeyRsYWJlbH0g4oSWIHskZG9jWydmdWxsX251bWJlciddfSDQvdCwINGB0YLQvtC50L3QvtGB0YIgeyRkb2NbJ3RvdGFsJ119IHskZG9jWydjdXJyZW5jeSddfS48L3A+Ii4KICAgICAgICAoJGxpbms/IjxwPjxhIGhyZWY9XCJ7JGxpbmt9XCI+0J/RgNC10LPQu9C10LQgLyDQuNC30YLQtdCz0LvRj9C90LU8L2E+PC9wPiI6IiIpLgogICAgICAgICI8cD7Qn9C+0LfQtNGA0LDQstC4LDxicj4iLigkY29tcFsnbmFtZSddPz8nV2VidHJpeGlhJykuIjwvcD4iKTsKICAgIHRyeXsKICAgICAgICBzbXRwU2VuZCgkY29tcFsnc210cF9ob3N0J10sJGNvbXBbJ3NtdHBfcG9ydCddPz81ODcsJGNvbXBbJ3NtdHBfc2VjdXJlJ10/Pyd0bHMnLCRjb21wWydzbXRwX3VzZXInXSwkY29tcFsnc210cF9wYXNzJ10sCiAgICAgICAgICAgICRjb21wWydzbXRwX2Zyb21fZW1haWwnXT86JGNvbXBbJ3NtdHBfdXNlciddLCRjb21wWydzbXRwX2Zyb21fbmFtZSddPzokY29tcFsnbmFtZSddLCR0bywkc3ViamVjdCwkYm9keTIpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGVtYWlsX2xvZyAoZG9jdW1lbnRfaWQsdG9fZW1haWwsc3ViamVjdCxzdGF0dXMpIFZBTFVFUyAoPyw/LD8sPykiKS0+ZXhlY3V0ZShbJGRvY0lkLCR0bywkc3ViamVjdCwnc2VudCddKTsKICAgICAgICBpZigkZG9jWydzdGF0dXMnXT09PSdkcmFmdCcpICRwZG8tPnByZXBhcmUoIlVQREFURSBkb2N1bWVudHMgU0VUIHN0YXR1cz0nc2VudCcgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskZG9jSWRdKTsKICAgICAgICBvayh0cnVlKTsKICAgIH1jYXRjaChFeGNlcHRpb24gJGUpewogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGVtYWlsX2xvZyAoZG9jdW1lbnRfaWQsdG9fZW1haWwsc3ViamVjdCxzdGF0dXMsZXJyb3IpIFZBTFVFUyAoPyw/LD8sPyw/KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGRvY0lkLCR0bywkc3ViamVjdCwnZXJyb3InLCRlLT5nZXRNZXNzYWdlKCldKTsKICAgICAgICBlcnIoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YDQsNGJ0LDQvdC1OiAnLiRlLT5nZXRNZXNzYWdlKCkpOwogICAgfQp9CgovLyDilIDilIAgSFIgUkVRVUVTVFM6INCc0L7Qu9Cx0LAg0LfQsCDQvtGC0L/Rg9GB0LogKNC/0LvQsNGC0LXQvS/QvdC10L/Qu9Cw0YLQtdC9KSArINCf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSDQt9CwINC90LDQv9GD0YHQutCw0L3QtSDilIDilIAKaWYoJGFjdGlvbj09PSdocl9yZXF1ZXN0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBocl9yZXF1ZXN0cyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2hyJyx0cnVlKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBocl9yZXF1ZXN0cyAoaWQsdXNlcl9pZCxlbXBsb3llZV9uYW1lLHBvc2l0aW9uLGVnbix0eXBlLHN0YXJ0X2RhdGUsZW5kX2RhdGUsZGF5cyxub3RpY2VfZGF5cyxsYXN0X3dvcmtfZGF0ZSxyZWFzb24sc3RhdHVzLGFwcHJvdmVkX2J5KQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgZW1wbG95ZWVfbmFtZT1WQUxVRVMoZW1wbG95ZWVfbmFtZSkscG9zaXRpb249VkFMVUVTKHBvc2l0aW9uKSxlZ249VkFMVUVTKGVnbiksCiAgICAgICAgICAgIHR5cGU9VkFMVUVTKHR5cGUpLHN0YXJ0X2RhdGU9VkFMVUVTKHN0YXJ0X2RhdGUpLGVuZF9kYXRlPVZBTFVFUyhlbmRfZGF0ZSksZGF5cz1WQUxVRVMoZGF5cyksCiAgICAgICAgICAgIG5vdGljZV9kYXlzPVZBTFVFUyhub3RpY2VfZGF5cyksbGFzdF93b3JrX2RhdGU9VkFMVUVTKGxhc3Rfd29ya19kYXRlKSxyZWFzb249VkFMVUVTKHJlYXNvbiksCiAgICAgICAgICAgIHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxhcHByb3ZlZF9ieT1WQUxVRVMoYXBwcm92ZWRfYnkpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ3VzZXJfaWQnXT8/bnVsbCwkYlsnZW1wbG95ZWVfbmFtZSddPz8nJywkYlsncG9zaXRpb24nXT8/JycsJGJbJ2VnbiddPz8nJywKICAgICAgICAgICAgICAgICRiWyd0eXBlJ10/PydsZWF2ZV9wYWlkJywkYlsnc3RhcnRfZGF0ZSddPz9udWxsLCRiWydlbmRfZGF0ZSddPz9udWxsLCRiWydkYXlzJ10/PzAsCiAgICAgICAgICAgICAgICAkYlsnbm90aWNlX2RheXMnXT8/MCwkYlsnbGFzdF93b3JrX2RhdGUnXT8/bnVsbCwkYlsncmVhc29uJ10/PycnLCRiWydzdGF0dXMnXT8/J3BlbmRpbmcnLCRiWydhcHByb3ZlZF9ieSddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gaHJfcmVxdWVzdHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBIUiBSRVFVRVNUIFNUQVRVUyBPTkxZIChhcHByb3ZlL3JlamVjdCB3aXRob3V0IHRvdWNoaW5nIG90aGVyIGZpZWxkcykg4pSA4pSACmlmKCRhY3Rpb249PT0naHJfcmVxdWVzdF9zdGF0dXMnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICAkaWQ9JGJbJ2lkJ10/PycnO2lmKCEkaWQpZXJyKCdNaXNzaW5nIGlkJyk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgaHJfcmVxdWVzdHMgU0VUIHN0YXR1cz0/LGFwcHJvdmVkX2J5PT8gV0hFUkUgaWQ9PyIpCiAgICAgICAgLT5leGVjdXRlKFskYlsnc3RhdHVzJ10/PydwZW5kaW5nJywkYlsnYXBwcm92ZWRfYnknXT8/JycsJGlkXSk7CiAgICBvayh0cnVlKTsKfQoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIOKUgOKUgCBXSElURS1MQUJFTCAvIExJQ0VOU0lORyAvIE1VTFRJLUhVQiBQTEFURk9STSDilIDilIAKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgppZigkYWN0aW9uPT09J2luc3RhbGxfcGxhdGZvcm0nKXsKICAgICRwZG89ZGIoKTsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGJyYW5kaW5nX3NldHRpbmdzICgKICAgICAgICBpZCBJTlQgUFJJTUFSWSBLRVksCiAgICAgICAgcHJvZHVjdF9uYW1lIFZBUkNIQVIoMjU1KSBERUZBVUxUICdXZWJ0cml4aWEgSHViJywKICAgICAgICBsb2dvX3VybCBWQVJDSEFSKDUwMCksIGZhdmljb25fdXJsIFZBUkNIQVIoNTAwKSwKICAgICAgICBwcmltYXJ5X2NvbG9yIFZBUkNIQVIoMjApIERFRkFVTFQgJyM2YzYzZmYnLCBzZWNvbmRhcnlfY29sb3IgVkFSQ0hBUigyMCkgREVGQVVMVCAnI2E3OGJmYScsCiAgICAgICAgZm9vdGVyX3RleHQgVkFSQ0hBUigyNTUpIERFRkFVTFQgJycsIHBvd2VyZWRfYnlfdmlzaWJsZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICAgICAgICBodWJfdHlwZSBWQVJDSEFSKDMwKSBERUZBVUxUICdhZ2VuY3knLAogICAgICAgIGxpY2Vuc2Vfa2V5IFZBUkNIQVIoNjQpLCBhZG1pbl9sb2NrZWQgVElOWUlOVCgxKSBERUZBVUxUIDAsCiAgICAgICAgbW9kdWxlc19lbmFibGVkIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwogICAgJGNudD0kcGRvLT5xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gYnJhbmRpbmdfc2V0dGluZ3MiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgIGlmKCRjbnQ9PTApewogICAgICAgICRrZXk9YmluMmhleChyYW5kb21fYnl0ZXMoMTYpKTsKICAgICAgICAkZGVmYXVsdE1vZHVsZXM9anNvbl9lbmNvZGUoWydwcm9qZWN0cyc9PjEsJ2NsaWVudHMnPT4xLCdmaW5hbmNlJz0+MSwndGFza3MnPT4xLCdvZmZlcnMnPT4xLCdjb250cmFjdHMnPT4xLAogICAgICAgICAgICAnY2FsZW5kYXInPT4xLCdob3N0aW5nJz0+MSwncGFzc3dvcmRzJz0+MSwnbm90ZXMnPT4xLCdyZXBvcnRzJz0+MSwncHJlc2VuY2UnPT4xLCd0YXJnZXRzJz0+MSwKICAgICAgICAgICAgJ3dvcmtyZXBvcnQnPT4xLCd1c2Vycyc9PjEsJ2ludm9pY2luZyc9PjEsJ2hyX3JlcXVlc3RzJz0+MSwnd2F5YmlsbHMnPT4xLCdodWJzX21hbmFnZW1lbnQnPT4wXSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gYnJhbmRpbmdfc2V0dGluZ3MgKGlkLHByb2R1Y3RfbmFtZSxsaWNlbnNlX2tleSxtb2R1bGVzX2VuYWJsZWQpIFZBTFVFUyAoMSw/LD8sPykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWydXZWJ0cml4aWEgSHViJywka2V5LCRkZWZhdWx0TW9kdWxlc10pOwogICAgfQogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY2xpZW50X2h1YnMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpLCB1cmwgVkFSQ0hBUig1MDApLCBsaWNlbnNlX2tleSBWQVJDSEFSKDY0KSwKICAgICAgICBodWJfdHlwZSBWQVJDSEFSKDMwKSBERUZBVUxUICdhZ2VuY3knLCBub3RlcyBURVhULAogICAgICAgIGxhc3Rfc3luYyBUSU1FU1RBTVAgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBodWJfc3Vic2NyaXB0aW9ucyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksCiAgICAgICAgaHViX2lkIFZBUkNIQVIoMzYpIE5PVCBOVUxMLAogICAgICAgIG1vZHVsZSBWQVJDSEFSKDUwKSBOT1QgTlVMTCwKICAgICAgICBwcmljZV9tb250aGx5IERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLAogICAgICAgIGN1cnJlbmN5IFZBUkNIQVIoMTApIERFRkFVTFQgJ0VVUicsCiAgICAgICAgYWN0aXZlIFRJTllJTlQoMSkgREVGQVVMVCAxLAogICAgICAgIHN0YXJ0ZWRfYXQgREFURSBOVUxMLAogICAgICAgIG5leHRfYmlsbGluZ19kYXRlIERBVEUgTlVMTCwKICAgICAgICBub3RlcyBURVhULAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHdheWJpbGxzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSwKICAgICAgICBudW1iZXIgVkFSQ0hBUig1MCksIGRhdGUgREFURSwKICAgICAgICBkcml2ZXJfbmFtZSBWQVJDSEFSKDI1NSksIHZlaGljbGVfcGxhdGUgVkFSQ0hBUig1MCksIHZlaGljbGVfdHlwZSBWQVJDSEFSKDEwMCksCiAgICAgICAgcm91dGVfZnJvbSBWQVJDSEFSKDI1NSksIHJvdXRlX3RvIFZBUkNIQVIoMjU1KSwKICAgICAgICBrbV9zdGFydCBERUNJTUFMKDEwLDEpIERFRkFVTFQgMCwga21fZW5kIERFQ0lNQUwoMTAsMSkgREVGQVVMVCAwLAogICAgICAgIGZ1ZWxfbGl0ZXJzIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLCBmdWVsX2Nvc3QgREVDSU1BTCgxMCwyKSBERUZBVUxUIDAsCiAgICAgICAgY2FyZ28gVkFSQ0hBUig1MDApLCBjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDIwKSBERUZBVUxUICdhY3RpdmUnLCBub3RlcyBURVhULAogICAgICAgIGNyZWF0ZWRfYnkgVkFSQ0hBUigxMDApLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CiAgICBvayhbJ21lc3NhZ2UnPT4nUGxhdGZvcm0gdGFibGVzIHJlYWR5JywnbGljZW5zZV9rZXknPT4kcGRvLT5xdWVyeSgiU0VMRUNUIGxpY2Vuc2Vfa2V5IEZST00gYnJhbmRpbmdfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaENvbHVtbigpXSk7Cn0KCmZ1bmN0aW9uIGNoZWNrTGljZW5zZSgkcGRvLCRzZWNyZXQpewogICAgJHI9JHBkby0+cXVlcnkoIlNFTEVDVCBsaWNlbnNlX2tleSBGUk9NIGJyYW5kaW5nX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgIGlmKCEkciB8fCAkclsnbGljZW5zZV9rZXknXSE9PSRzZWNyZXQpIGVycign0J3QtdCy0LDQu9C40LTQtdC9INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQuNCy0LXQvSDQutC70Y7RhycpOwp9CgovLyDilIDilIAgQlJBTkRJTkcgKHdoaXRlLWxhYmVsIGlkZW50aXR5KSDilIDilIAKaWYoJGFjdGlvbj09PSdicmFuZGluZ19zZXR0aW5ncycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICAkcj0kcGRvLT5xdWVyeSgiU0VMRUNUIGlkLHByb2R1Y3RfbmFtZSxsb2dvX3VybCxmYXZpY29uX3VybCxwcmltYXJ5X2NvbG9yLHNlY29uZGFyeV9jb2xvcixmb290ZXJfdGV4dCwKICAgICAgICAgICAgcG93ZXJlZF9ieV92aXNpYmxlLGh1Yl90eXBlLGFkbWluX2xvY2tlZCxtb2R1bGVzX2VuYWJsZWQgRlJPTSBicmFuZGluZ19zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICAgICAgaWYoJHIpewogICAgICAgICAgICAkclsnbW9kdWxlc19lbmFibGVkJ109anNvbl9kZWNvZGUoJHJbJ21vZHVsZXNfZW5hYmxlZCddLHRydWUpPzpbXTsKICAgICAgICAgICAgJGxzPWh1Yl9saWNlbnNlX3N0YXR1cygpOwogICAgICAgICAgICBpZighZW1wdHkoJGxzWydtb2R1bGVzJ10pKSAkclsnbW9kdWxlc19lbmFibGVkJ109JGxzWydtb2R1bGVzJ107CiAgICAgICAgICAgICRyWydsaWNlbnNlX3N0YXRlJ109JGxzWydzdGF0ZSddPz8nYWN0aXZlJzsKICAgICAgICAgICAgJHJbJ2xpY2Vuc2VfbWVzc2FnZSddPSRsc1snbWVzc2FnZSddPz8nJzsKICAgICAgICAgICAgJHJbJ2xpY2Vuc2VfdmFsaWRfdW50aWwnXT0kbHNbJ3ZhbGlkX3VudGlsJ10/P251bGw7CiAgICAgICAgICAgICRyWydsaWNlbnNlX2dyYWNlX3VudGlsJ109JGxzWydncmFjZV91bnRpbCddPz9udWxsOwogICAgICAgICAgICBpZihpbl9hcnJheSgkclsnbGljZW5zZV9zdGF0ZSddLFsnbG9ja2VkJywnaW52YWxpZCddLHRydWUpKXsKICAgICAgICAgICAgICAgIGZvcmVhY2goJHJbJ21vZHVsZXNfZW5hYmxlZCddIGFzICRtaz0+JG12KSAkclsnbW9kdWxlc19lbmFibGVkJ11bJG1rXT0wOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG9rKCRyPzpbXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgcmVxdWlyZUh1YkFkbWluT3JTZWNyZXQoJHBkbywkYlsnYWRtaW5fc2VjcmV0J10/PycnKTsKICAgICAgICAkZmllbGRzPVsncHJvZHVjdF9uYW1lJywnbG9nb191cmwnLCdmYXZpY29uX3VybCcsJ3ByaW1hcnlfY29sb3InLCdzZWNvbmRhcnlfY29sb3InLCdmb290ZXJfdGV4dCcsCiAgICAgICAgICAgICdwb3dlcmVkX2J5X3Zpc2libGUnLCdodWJfdHlwZSddOwogICAgICAgICRzZXQ9W107JHZhbHM9W107CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmKXsgaWYoYXJyYXlfa2V5X2V4aXN0cygkZiwkYikpeyAkc2V0W109IiRmPT8iOyAkdmFsc1tdPSRiWyRmXTsgfSB9CiAgICAgICAgaWYoJHNldCkgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGJyYW5kaW5nX3NldHRpbmdzIFNFVCAiLmltcGxvZGUoJywnLCRzZXQpLiIgV0hFUkUgaWQ9MSIpLT5leGVjdXRlKCR2YWxzKTsKICAgICAgICBvayh0cnVlKTsKICAgIH0KfQoKLy8g4pSA4pSAIE1PRFVMRSBUT0dHTEUgKGNhbGxlZCBsb2NhbGx5IGZyb20gb3duIHdfYWRtaW4ucGhwLCBvciByZW1vdGVseSBmcm9tIGEgbWFzdGVyIGh1Yikg4pSA4pSACmlmKCRhY3Rpb249PT0nbW9kdWxlX3RvZ2dsZScpewogICAgJHBkbz1kYigpOyRiPWJvZHkoKTsKICAgIHJlcXVpcmVIdWJBZG1pbk9yU2VjcmV0KCRwZG8sJGJbJ2FkbWluX3NlY3JldCddPz8nJyk7CiAgICAkbW9kdWxlPSRiWydtb2R1bGUnXT8/Jyc7JGVuYWJsZWQ9KGludCkoJGJbJ2VuYWJsZWQnXT8/MCk7CiAgICBpZighJG1vZHVsZSkgZXJyKCdNaXNzaW5nIG1vZHVsZScpOwogICAgJHI9JHBkby0+cXVlcnkoIlNFTEVDVCBtb2R1bGVzX2VuYWJsZWQgRlJPTSBicmFuZGluZ19zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICAkbW9kcz1qc29uX2RlY29kZSgkclsnbW9kdWxlc19lbmFibGVkJ10/Pyd7fScsdHJ1ZSk/OltdOwogICAgJG1vZHNbJG1vZHVsZV09JGVuYWJsZWQ7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgYnJhbmRpbmdfc2V0dGluZ3MgU0VUIG1vZHVsZXNfZW5hYmxlZD0/IFdIRVJFIGlkPTEiKS0+ZXhlY3V0ZShbanNvbl9lbmNvZGUoJG1vZHMpXSk7CiAgICBvaygkbW9kcyk7Cn0KCi8vIOKUgOKUgCBMT0NLIC8gVU5MT0NLIEFETUlOIEFDQ0VTUyAoYmVmb3JlIGhhbmRpbmcgdGhlIGh1YiB0byBhIGNsaWVudCkg4pSA4pSACmlmKCRhY3Rpb249PT0nYWRtaW5fbG9jaycpewogICAgJHBkbz1kYigpOyRiPWJvZHkoKTsKICAgIHJlcXVpcmVIdWJBZG1pbk9yU2VjcmV0KCRwZG8sJGJbJ2FkbWluX3NlY3JldCddPz8nJyk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgYnJhbmRpbmdfc2V0dGluZ3MgU0VUIGFkbWluX2xvY2tlZD0/IFdIRVJFIGlkPTEiKS0+ZXhlY3V0ZShbKGludCkoJGJbJ2xvY2tlZCddPz8xKV0pOwogICAgb2sodHJ1ZSk7Cn0KCi8vIOKUgOKUgCBGVUxMIERBVEEgRVhQT1JUIChmb3IgbWlncmF0aW5nIHRoaXMgaHViIHRvIGFub3RoZXIgaG9zdGluZykg4pSA4pSACmlmKCRhY3Rpb249PT0nZGF0YV9leHBvcnRfYWxsJyl7CiAgICAkcGRvPWRiKCk7CiAgICBjaGVja0xpY2Vuc2UoJHBkbywkX0dFVFsnYWRtaW5fc2VjcmV0J10/PycnKTsKICAgICR0YWJsZXM9Wyd1c2VycycsJ3Byb2plY3RzJywndGFza3MnLCdub3RlcycsJ2NsaWVudHMnLCdob3N0aW5nJywncGFzc3dvcmRzJywnb2ZmZXJzJywnY29udHJhY3RzJywndGFyZ2V0cycsCiAgICAgICAgJ2NvbXBhbnlfc2V0dGluZ3MnLCdkb2NfY291bnRlcnMnLCdkb2N1bWVudHMnLCdyZWN1cnJpbmdfaW52b2ljZXMnLCdocl9yZXF1ZXN0cycsJ2VtYWlsX2xvZycsCiAgICAgICAgJ2JyYW5kaW5nX3NldHRpbmdzJywnY2xpZW50X2h1YnMnLCd3YXliaWxscyddOwogICAgJGR1bXA9W107CiAgICBmb3JlYWNoKCR0YWJsZXMgYXMgJHQpewogICAgICAgIHRyeXsgJGR1bXBbJHRdPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGAkdGAiKS0+ZmV0Y2hBbGwoKTsgfWNhdGNoKEV4Y2VwdGlvbiAkZSl7ICRkdW1wWyR0XT1bXTsgfQogICAgfQogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IndlYnRyaXhpYV9odWJfYmFja3VwXycuZGF0ZSgnWS1tLWQnKS4nLmpzb24iJyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKFsnZXhwb3J0ZWRfYXQnPT5kYXRlKCdjJyksJ3RhYmxlcyc9PiRkdW1wXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0KCi8vIOKUgOKUgCBGVUxMIERBVEEgSU1QT1JUIChyZXN0b3JlIGEgYmFja3VwIG9uIGEgZnJlc2ggaW5zdGFsbCkg4pSA4pSACmlmKCRhY3Rpb249PT0nZGF0YV9pbXBvcnRfYWxsJyl7CiAgICAkcGRvPWRiKCk7JGI9Ym9keSgpOwogICAgY2hlY2tMaWNlbnNlKCRwZG8sJGJbJ2FkbWluX3NlY3JldCddPz8nJyk7CiAgICAkZHVtcD0kYlsndGFibGVzJ10/P1tdOwogICAgaWYoISRkdW1wKSBlcnIoJ01pc3NpbmcgdGFibGVzIHBheWxvYWQnKTsKICAgIGZvcmVhY2goJGR1bXAgYXMgJHRhYmxlPT4kcm93cyl7CiAgICAgICAgaWYoIXByZWdfbWF0Y2goJy9eW2Etel9dKyQvJywkdGFibGUpKSBjb250aW51ZTsKICAgICAgICBpZighaXNfYXJyYXkoJHJvd3MpfHwhY291bnQoJHJvd3MpKSBjb250aW51ZTsKICAgICAgICBmb3JlYWNoKCRyb3dzIGFzICRyb3cpewogICAgICAgICAgICAkY29scz1hcnJheV9rZXlzKCRyb3cpOwogICAgICAgICAgICAkcGxhY2Vob2xkZXJzPWltcGxvZGUoJywnLGFycmF5X2ZpbGwoMCxjb3VudCgkY29scyksJz8nKSk7CiAgICAgICAgICAgICRjb2xMaXN0PWltcGxvZGUoJywnLGFycmF5X21hcChmdW5jdGlvbigkYyl7cmV0dXJuICJgJGNgIjt9LCRjb2xzKSk7CiAgICAgICAgICAgICR1cGRhdGVzPWltcGxvZGUoJywnLGFycmF5X21hcChmdW5jdGlvbigkYyl7cmV0dXJuICJgJGNgPVZBTFVFUyhgJGNgKSI7fSwkY29scykpOwogICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBgJHRhYmxlYCAoJGNvbExpc3QpIFZBTFVFUyAoJHBsYWNlaG9sZGVycykgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgJHVwZGF0ZXMiKQogICAgICAgICAgICAgICAgICAgIC0+ZXhlY3V0ZShhcnJheV92YWx1ZXMoJHJvdykpOwogICAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uICRlKXsgLyogc2tpcCByb3ctbGV2ZWwgZXJyb3JzLCBjb250aW51ZSBpbXBvcnQgKi8gfQogICAgICAgIH0KICAgIH0KICAgIG9rKCdJbXBvcnQgY29tcGxldGUnKTsKfQoKLy8g4pSA4pSAIEZBQ1RPUlkgUkVTRVQgKHdpcGUgYnVzaW5lc3MgZGF0YSwga2VlcCBzY2hlbWEg4oCUIGZvciByZXNlbGxpbmcgdG8gdGhlIG5leHQgY2xpZW50KSDilIDilIAKaWYoJGFjdGlvbj09PSdmYWN0b3J5X3Jlc2V0Jyl7CiAgICAkcGRvPWRiKCk7JGI9Ym9keSgpOwogICAgY2hlY2tMaWNlbnNlKCRwZG8sJGJbJ2FkbWluX3NlY3JldCddPz8nJyk7CiAgICBpZigoJGJbJ2NvbmZpcm0nXT8/JycpIT09J1dJUEUnKSBlcnIoJ01pc3NpbmcgY29uZmlybT1XSVBFJyk7CiAgICAkdGFibGVzPVsncHJvamVjdHMnLCd0YXNrcycsJ25vdGVzJywnY2xpZW50cycsJ2hvc3RpbmcnLCdwYXNzd29yZHMnLCdvZmZlcnMnLCdjb250cmFjdHMnLCd0YXJnZXRzJywnYWN0aXZpdHknLAogICAgICAgICdwcmVzZW5jZScsJ2RvY3VtZW50cycsJ2RvY19jb3VudGVycycsJ3JlY3VycmluZ19pbnZvaWNlcycsJ2hyX3JlcXVlc3RzJywnZW1haWxfbG9nJywnd2F5YmlsbHMnXTsKICAgIGZvcmVhY2goJHRhYmxlcyBhcyAkdCl7IHRyeXsgJHBkby0+ZXhlYygiVFJVTkNBVEUgVEFCTEUgYCR0YCIpOyB9Y2F0Y2goRXhjZXB0aW9uICRlKXt9IH0KICAgIC8vIGtlZXAgZXhhY3RseSBvbmUgYWRtaW4gdXNlciwgcmVzZXQgcGFzc3dvcmQKICAgICRwZG8tPmV4ZWMoIkRFTEVURSBGUk9NIHVzZXJzIFdIRVJFIGlzX2FkbWluPTAiKTsKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSB1c2VycyBTRVQgcGFzc3dvcmQ9PyBXSEVSRSBpc19hZG1pbj0xIiktPmV4ZWN1dGUoW3Bhc3N3b3JkX2hhc2goJ3dlYnRyaXhpYTIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpXSk7CiAgICBvaygnRmFjdG9yeSByZXNldCBjb21wbGV0ZScpOwp9CgovLyDilIDilIAgTUFTVEVSOiBDTElFTlQgSFVCIFJFR0lTVFJZICh1c2VkIGJ5IGh1Yi53ZWJ0cml4aWEuY29tIHRvIG1hbmFnZSBpbnN0YWxscyBpdCBoYXMgc29sZCkg4pSA4pSACmlmKCRhY3Rpb249PT0nY2xpZW50X2h1YnMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY2xpZW50X2h1YnMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdjaCcsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gY2xpZW50X2h1YnMgKGlkLG5hbWUsdXJsLGxpY2Vuc2Vfa2V5LGh1Yl90eXBlLG5vdGVzKSBWQUxVRVMgKD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBuYW1lPVZBTFVFUyhuYW1lKSx1cmw9VkFMVUVTKHVybCksbGljZW5zZV9rZXk9VkFMVUVTKGxpY2Vuc2Vfa2V5KSwKICAgICAgICAgICAgaHViX3R5cGU9VkFMVUVTKGh1Yl90eXBlKSxub3Rlcz1WQUxVRVMobm90ZXMpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ25hbWUnXT8/JycsJGJbJ3VybCddPz8nJywkYlsnbGljZW5zZV9rZXknXT8/JycsJGJbJ2h1Yl90eXBlJ10/PydhZ2VuY3knLCRiWydub3RlcyddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gY2xpZW50X2h1YnMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KaWYoJGFjdGlvbj09PSdjbGllbnRfaHViX3BpbmcnKXsKICAgICRwZG89ZGIoKTskaWQ9JF9HRVRbJ2lkJ10/PycnOwogICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGNsaWVudF9odWJzIFNFVCBsYXN0X3N5bmM9Tk9XKCkgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskaWRdKTsKICAgIG9rKHRydWUpOwp9CgovLyDilIDilIAgSFVCIFNVQlNDUklQVElPTlMgKHBlci1tb2R1bGUgbW9udGhseSBiaWxsaW5nIG9mIGNsaWVudCBodWJzKSDilIDilIAKaWYoJGFjdGlvbj09PSdodWJfc3Vic2NyaXB0aW9ucycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICAkd2hlcmU9Jyc7JHBhcmFtcz1bXTsKICAgICAgICBpZighZW1wdHkoJF9HRVRbJ2h1Yl9pZCddKSl7ICR3aGVyZT0nIFdIRVJFIGh1Yl9pZD0/JzsgJHBhcmFtc1tdPSRfR0VUWydodWJfaWQnXTsgfQogICAgICAgICRzdD0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIGh1Yl9zdWJzY3JpcHRpb25zIi4kd2hlcmUuIiBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKTsKICAgICAgICAkc3QtPmV4ZWN1dGUoJHBhcmFtcyk7CiAgICAgICAgb2soJHN0LT5mZXRjaEFsbCgpKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnaHMnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGh1Yl9zdWJzY3JpcHRpb25zIChpZCxodWJfaWQsbW9kdWxlLHByaWNlX21vbnRobHksY3VycmVuY3ksYWN0aXZlLHN0YXJ0ZWRfYXQsbmV4dF9iaWxsaW5nX2RhdGUsbm90ZXMpCiAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG1vZHVsZT1WQUxVRVMobW9kdWxlKSxwcmljZV9tb250aGx5PVZBTFVFUyhwcmljZV9tb250aGx5KSxjdXJyZW5jeT1WQUxVRVMoY3VycmVuY3kpLAogICAgICAgICAgICBhY3RpdmU9VkFMVUVTKGFjdGl2ZSksc3RhcnRlZF9hdD1WQUxVRVMoc3RhcnRlZF9hdCksbmV4dF9iaWxsaW5nX2RhdGU9VkFMVUVTKG5leHRfYmlsbGluZ19kYXRlKSxub3Rlcz1WQUxVRVMobm90ZXMpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ2h1Yl9pZCddPz8nJywkYlsnbW9kdWxlJ10/PycnLCRiWydwcmljZV9tb250aGx5J10/PzAsJGJbJ2N1cnJlbmN5J10/PydFVVInLAogICAgICAgICAgICAgICAgKGludCkoJGJbJ2FjdGl2ZSddPz8xKSwkYlsnc3RhcnRlZF9hdCddPz9kYXRlKCdZLW0tZCcpLCRiWyduZXh0X2JpbGxpbmdfZGF0ZSddPz9kYXRlKCdZLW0tZCcsc3RydG90aW1lKCcrMSBtb250aCcpKSwkYlsnbm90ZXMnXT8/JyddKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGh1Yl9zdWJzY3JpcHRpb25zIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgTWFyayBhIHN1YnNjcmlwdGlvbiBhcyBwYWlkOiBhZHZhbmNlcyBuZXh0X2JpbGxpbmdfZGF0ZSBvbmUgbW9udGgg4pSA4pSACmlmKCRhY3Rpb249PT0naHViX3N1YnNjcmlwdGlvbl9wYWlkJyl7CiAgICAkcGRvPWRiKCk7JGI9Ym9keSgpOwogICAgJGlkPSRiWydpZCddPz8nJztpZighJGlkKWVycignTWlzc2luZyBpZCcpOwogICAgJHM9JHBkby0+cHJlcGFyZSgiU0VMRUNUIG5leHRfYmlsbGluZ19kYXRlIEZST00gaHViX3N1YnNjcmlwdGlvbnMgV0hFUkUgaWQ9PyIpOyRzLT5leGVjdXRlKFskaWRdKTsKICAgICRyb3c9JHMtPmZldGNoKCk7IGlmKCEkcm93KSBlcnIoJ05vdCBmb3VuZCcpOwogICAgJGJhc2U9JHJvd1snbmV4dF9iaWxsaW5nX2RhdGUnXT86ZGF0ZSgnWS1tLWQnKTsKICAgICRuZXh0PWRhdGUoJ1ktbS1kJyxzdHJ0b3RpbWUoJGJhc2UuJyArMSBtb250aCcpKTsKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSBodWJfc3Vic2NyaXB0aW9ucyBTRVQgbmV4dF9iaWxsaW5nX2RhdGU9PyxhY3RpdmU9MSBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRuZXh0LCRpZF0pOwogICAgb2soWyduZXh0X2JpbGxpbmdfZGF0ZSc9PiRuZXh0XSk7Cn0KCi8vIOKUgOKUgCBCaWxsaW5nIGRhc2hib2FyZCBzdGF0czogTVJSLCBvdmVyZHVlLCBjb3VudHMg4pSA4pSACmlmKCRhY3Rpb249PT0naHViX2JpbGxpbmdfc3RhdHMnKXsKICAgICRwZG89ZGIoKTsKICAgICRtcnI9JHBkby0+cXVlcnkoIlNFTEVDVCBDT0FMRVNDRShTVU0ocHJpY2VfbW9udGhseSksMCkgRlJPTSBodWJfc3Vic2NyaXB0aW9ucyBXSEVSRSBhY3RpdmU9MSIpLT5mZXRjaENvbHVtbigpOwogICAgJGFjdGl2ZUNudD0kcGRvLT5xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gaHViX3N1YnNjcmlwdGlvbnMgV0hFUkUgYWN0aXZlPTEiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICRvdmVyZHVlPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgaHMuKiwgY2gubmFtZSBBUyBodWJfbmFtZSBGUk9NIGh1Yl9zdWJzY3JpcHRpb25zIGhzCiAgICAgICAgTEVGVCBKT0lOIGNsaWVudF9odWJzIGNoIE9OIGNoLmlkPWhzLmh1Yl9pZAogICAgICAgIFdIRVJFIGhzLmFjdGl2ZT0xIEFORCBocy5uZXh0X2JpbGxpbmdfZGF0ZSA8IENVUkRBVEUoKSBPUkRFUiBCWSBocy5uZXh0X2JpbGxpbmdfZGF0ZSIpLT5mZXRjaEFsbCgpOwogICAgJGh1YkNudD0kcGRvLT5xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gY2xpZW50X2h1YnMiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgIG9rKFsnbXJyJz0+KGZsb2F0KSRtcnIsJ2FjdGl2ZV9zdWJzY3JpcHRpb25zJz0+KGludCkkYWN0aXZlQ250LCdodWJzJz0+KGludCkkaHViQ250LCdvdmVyZHVlJz0+JG92ZXJkdWVdKTsKfQoKLy8g4pSA4pSAIFdBWUJJTExTIC8g0J/QqtCi0J3QmCDQm9CY0KHQotCe0JLQlSDilIDilIAKaWYoJGFjdGlvbj09PSd3YXliaWxscycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSB3YXliaWxscyBPUkRFUiBCWSBkYXRlIERFU0MsIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnd2InLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHdheWJpbGxzIChpZCxudW1iZXIsZGF0ZSxkcml2ZXJfbmFtZSx2ZWhpY2xlX3BsYXRlLHZlaGljbGVfdHlwZSxyb3V0ZV9mcm9tLHJvdXRlX3RvLAogICAgICAgICAgICBrbV9zdGFydCxrbV9lbmQsZnVlbF9saXRlcnMsZnVlbF9jb3N0LGNhcmdvLGNsaWVudCxzdGF0dXMsbm90ZXMsY3JlYXRlZF9ieSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG51bWJlcj1WQUxVRVMobnVtYmVyKSxkYXRlPVZBTFVFUyhkYXRlKSxkcml2ZXJfbmFtZT1WQUxVRVMoZHJpdmVyX25hbWUpLAogICAgICAgICAgICB2ZWhpY2xlX3BsYXRlPVZBTFVFUyh2ZWhpY2xlX3BsYXRlKSx2ZWhpY2xlX3R5cGU9VkFMVUVTKHZlaGljbGVfdHlwZSkscm91dGVfZnJvbT1WQUxVRVMocm91dGVfZnJvbSksCiAgICAgICAgICAgIHJvdXRlX3RvPVZBTFVFUyhyb3V0ZV90byksa21fc3RhcnQ9VkFMVUVTKGttX3N0YXJ0KSxrbV9lbmQ9VkFMVUVTKGttX2VuZCksZnVlbF9saXRlcnM9VkFMVUVTKGZ1ZWxfbGl0ZXJzKSwKICAgICAgICAgICAgZnVlbF9jb3N0PVZBTFVFUyhmdWVsX2Nvc3QpLGNhcmdvPVZBTFVFUyhjYXJnbyksY2xpZW50PVZBTFVFUyhjbGllbnQpLHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxub3Rlcz1WQUxVRVMobm90ZXMpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ251bWJlciddPz8oJ9Cf0JstJy5kYXRlKCdZbWQnKS4nLScucmFuZCgxMDAsOTk5KSksJGJbJ2RhdGUnXT8/ZGF0ZSgnWS1tLWQnKSwKICAgICAgICAgICAgICAgICRiWydkcml2ZXJfbmFtZSddPz8nJywkYlsndmVoaWNsZV9wbGF0ZSddPz8nJywkYlsndmVoaWNsZV90eXBlJ10/PycnLCRiWydyb3V0ZV9mcm9tJ10/PycnLCRiWydyb3V0ZV90byddPz8nJywKICAgICAgICAgICAgICAgICRiWydrbV9zdGFydCddPz8wLCRiWydrbV9lbmQnXT8/MCwkYlsnZnVlbF9saXRlcnMnXT8/MCwkYlsnZnVlbF9jb3N0J10/PzAsJGJbJ2NhcmdvJ10/PycnLAogICAgICAgICAgICAgICAgJGJbJ2NsaWVudCddPz8nJywkYlsnc3RhdHVzJ10/PydhY3RpdmUnLCRiWydub3RlcyddPz8nJywkYlsnY3JlYXRlZF9ieSddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gd2F5YmlsbHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KaWYoJGFjdGlvbj09PSd3YXliaWxsX3N0YXR1cycpewogICAgJHBkbz1kYigpOyRiPWJvZHkoKTsKICAgICRpZD0kYlsnaWQnXT8/Jyc7aWYoISRpZCllcnIoJ01pc3NpbmcgaWQnKTsKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSB3YXliaWxscyBTRVQgc3RhdHVzPT8gV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskYlsnc3RhdHVzJ10/PydhY3RpdmUnLCRpZF0pOwogICAgb2sodHJ1ZSk7Cn0KCmlmKCRhY3Rpb249PT0ndmVyaWZ5X3NlY3JldCcpewogICAgJHBkbz1kYigpOwogICAgY2hlY2tMaWNlbnNlKCRwZG8sJF9HRVRbJ2FkbWluX3NlY3JldCddPz8oJF9QT1NUWydhZG1pbl9zZWNyZXQnXT8/JycpKTsKICAgIG9rKHRydWUpOwp9CgpodHRwX3Jlc3BvbnNlX2NvZGUoNDA0KTsKZWNobyBqc29uX2VuY29kZShbJ29rJz0+ZmFsc2UsJ2Vycm9yJz0+J1Vua25vd24gYWN0aW9uOiAnLiRhY3Rpb25dKTsK', 'config.example.php' => 'PD9waHAKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIGNvbmZpZy5leGFtcGxlLnBocCDigJQg0KjQkNCR0JvQntCdLgovLyDQndC+0YDQvNCw0LvQvdC+INCd0JUg0YHQtSDQvdCw0LvQsNCz0LAg0LTQsCDQv9C40L/QsNGIINGC0L7Qt9C4INGE0LDQudC7IOKAlCB3X2h1Yl9pbnN0YWxsLnBocAovLyDRgdCw0Lwg0YHRitC30LTQsNCy0LAgY29uZmlnLnBocCDRgSDQv9GA0LDQstC40LvQvdC40YLQtSDQtNCw0L3QvdC4INC/0YDQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4KLy8KLy8g0JjQt9C/0L7Qu9C30LLQsNC5INGC0L7QstCwINGB0LDQvNC+INCw0LrQviDQv9GA0LDQstC40Ygg0YDRitGH0L3QsCDQuNC90YHRgtCw0LvQsNGG0LjRjyAo0L3QsNC/0YAuINC90Y/QvNCwCi8vINC/0YDQsNCy0LAg0LfQsCDQt9Cw0L/QuNGBINC90LAg0YTQsNC50Lsg0L7RgiBQSFAg0Lgg0YLRgNGP0LHQstCwINC00LAg0LrQsNGH0LjRiCBjb25maWcucGhwCi8vINCz0L7RgtC+0LIg0L/RgNC10LcgRlRQL0ZpbGUgTWFuYWdlcik6Ci8vICAgMS4g0JrQvtC/0LjRgNCw0Lkg0YLQvtC30Lgg0YTQsNC50Lsg0LrQsNGC0L4gImNvbmZpZy5waHAiICjRgdGK0YnQsNGC0LAg0L/QsNC/0LrQsCDQutCw0YLQviBhcGkucGhwKQovLyAgIDIuINCf0L7Qv9GK0LvQvdC4INC00LDQvdC90LjRgtC1INC90LAgTXlTUUwg0LHQsNC30LDRgtCwINC+0YIgY1BhbmVsIOKGkiBNeVNRTCBEYXRhYmFzZXMKLy8gICAzLiAo0J/QviDQuNC30LHQvtGAKSDQotC10LvQtdCz0YDQsNC8INCx0L7RgiDRgtC+0LrQtdC9IOKAlCDQstC40LYgaHR0cHM6Ly90Lm1lL0JvdEZhdGhlcgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCmRlZmluZSgnREJfSE9TVCcsJ2xvY2FsaG9zdCcpOwpkZWZpbmUoJ0RCX05BTUUnLCdjcGFuZWx1c2VyX2RibmFtZScpOwpkZWZpbmUoJ0RCX1VTRVInLCdjcGFuZWx1c2VyX2RidXNlcicpOwpkZWZpbmUoJ0RCX1BBU1MnLCdkYl9wYXNzd29yZF9oZXJlJyk7CgovLyDQn9C+INC40LfQsdC+0YAg4oCUINC+0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LDQutC+INC90LUg0L/QvtC70LfQstCw0Ygg0KLQtdC70LXQs9GA0LDQvCDQuNC30LLQtdGB0YLQuNGPCmRlZmluZSgnVEdfVE9LRU4nLCcnKTsKZGVmaW5lKCdUR19DSEFUX0lEJywnJyk7Cg==', 'contracts.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JTQvtCz0L7QstC+0YDQuCDigJQgV2VidHJpeGlhPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Tb3JhOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ewogIC0tZGFyazojMGQwZDE0OyAtLWFjY2VudDojNmM2M2ZmOyAtLWFjY2VudDI6I2E3OGJmYTsgLS1ncmVlbjojMTZhMzRhOwogIC0tZ3JlZW4tYmc6I2YwZmRmNDsgLS1ib3JkZXI6I2UwZGRmNTsgLS10ZXh0OiMxYTFhMmU7IC0tdGV4dDI6IzRhNGE2YTsKICAtLXRleHQzOiM4ODg4YWE7IC0tc3VyZmFjZTojZmFmOWZmOyAtLWFtYmVyOiNkOTc3MDY7Cn0KKnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e2ZvbnQtZmFtaWx5OidTb3JhJyxzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2YwZWVmYTttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MzBweCAyMHB4fQoKLyogU0VMRUNUT1IgUEFHRSAqLwouc2VsZWN0b3ItcGFnZXttYXgtd2lkdGg6OTAwcHg7bWFyZ2luOjAgYXV0b30KLnNlbGVjdG9yLWhlYWRlcnt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjM2cHh9Ci5zZWxlY3Rvci1oZWFkZXIgaW1ne2hlaWdodDozOHB4O21hcmdpbi1ib3R0b206MTZweH0KLnNlbGVjdG9yLXRpdGxle2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW4tYm90dG9tOjZweH0KLnNlbGVjdG9yLXN1Yntmb250LXNpemU6MTRweDtjb2xvcjp2YXIoLS10ZXh0Myl9Ci5jb250cmFjdC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsMWZyKTtnYXA6MTZweDttYXJnaW4tYm90dG9tOjI4cHh9Ci5jb250cmFjdC10eXBle2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MjRweCAyMHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4yczt0ZXh0LWFsaWduOmNlbnRlcn0KLmNvbnRyYWN0LXR5cGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzowIDRweCAyNHB4IHJnYmEoMTA4LDk5LDI1NSwuMTIpfQouY29udHJhY3QtdHlwZS5zZWxlY3RlZHtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOiNmNWYzZmZ9Ci5jdC1pY29ue2ZvbnQtc2l6ZTozMnB4O21hcmdpbi1ib3R0b206MTJweH0KLmN0LXRpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW4tYm90dG9tOjRweH0KLmN0LWRlc2N7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdGV4dDMpO2xpbmUtaGVpZ2h0OjEuNX0KLmdlbmVyYXRlLWJ0bntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjMwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoxNHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyOm5vbmU7Y29sb3I6I2ZmZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXN9Ci5nZW5lcmF0ZS1idG46aG92ZXJ7b3BhY2l0eTouOX0KLmdlbmVyYXRlLWJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZH0KCi8qIENPTlRSQUNUIERPQyBQQUdFICovCi5jb250cmFjdC1kb2MtcGFnZXtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjg2MHB4O21hcmdpbjowIGF1dG99Ci50b29sYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tYm90dG9tOjE2cHg7ZmxleC13cmFwOndyYXB9Ci50YnRue3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO3RyYW5zaXRpb246YWxsIC4xNXN9Ci50YnRuLnByaW1hcnl7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOiNmZmZ9Ci50YnRuLnNlY3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tdGV4dDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKX0KLnRidG4uYmFja3tiYWNrZ3JvdW5kOiNmNWYzZmY7Y29sb3I6dmFyKC0tYWNjZW50KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcil9Ci5lZGl0LWJhbm5lcntiYWNrZ3JvdW5kOiNmZmZiZWI7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEwcHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjojOTI0MDBlO21hcmdpbi1ib3R0b206MTRweDtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Ci5lZGl0LWJhbm5lci5zaG93e2Rpc3BsYXk6ZmxleH0KCi8qIERPQyBTVFlMRVMgKi8KLmRvY3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoyMHB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgNHB4IDQwcHggcmdiYSgxMDgsOTksMjU1LC4xKX0KLmRvYy1oZWFkZXJ7YmFja2dyb3VuZDp2YXIoLS1kYXJrKTtwYWRkaW5nOjM2cHggNTJweCAzMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0KLmRvYy1oZWFkZXI6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNjBweDtyaWdodDotNjBweDt3aWR0aDoyMjBweDtoZWlnaHQ6MjIwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDpyZ2JhKDEwOCw5OSwyNTUsLjEpfQouaGVhZGVyLXRvcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9Ci5sb2dvLWltZ3toZWlnaHQ6MzJweDtmaWx0ZXI6YnJpZ2h0bmVzcygxMCl9Ci5kb2MtdHlwZS1ibG9ja3t0ZXh0LWFsaWduOnJpZ2h0fQouZHQtbGFiZWx7Zm9udC1zaXplOjlweDtsZXR0ZXItc3BhY2luZzouMmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTttYXJnaW4tYm90dG9tOjRweH0KLmR0LXRpdGxle2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmZmO2xldHRlci1zcGFjaW5nOi0uM3B4fQouZHQtbnVte2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWFjY2VudDIpO21hcmdpbi10b3A6NHB4O2ZvbnQtZmFtaWx5OidETSBNb25vJyxtb25vc3BhY2V9Ci5oZWFkZXItYm90dG9te21hcmdpbi10b3A6MjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9Ci5oZWFkZXItcGFydGllc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjMwcHh9Ci5wYXJ0eS1sYWJlbHtmb250LXNpemU6OXB4O2xldHRlci1zcGFjaW5nOi4xNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTttYXJnaW4tYm90dG9tOjZweH0KLnBhcnR5LW5hbWV7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiNmZmY7bWFyZ2luLWJvdHRvbToycHh9Ci5wYXJ0eS1kZXRhaWx7Zm9udC1zaXplOjExcHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCk7bGluZS1oZWlnaHQ6MS43fQoucGFydHktZGl2aWRlcnt3aWR0aDoxcHg7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTttYXJnaW46MCAxMHB4fQouZG9jLWJvZHl7cGFkZGluZzowIDUycHh9Ci5jb250cmFjdC1zZWN0aW9ue2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7cGFkZGluZzoyMHB4IDB9Ci5jb250cmFjdC1zZWN0aW9uOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9Ci5jcy1udW17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWFjY2VudCk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4xZW07bWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQouY3MtbnVtOjpiZWZvcmV7Y29udGVudDonJzt3aWR0aDozcHg7aGVpZ2h0OjEzcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6MnB4O2ZsZXgtc2hyaW5rOjB9Ci5jcy10aXRsZXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dCk7bWFyZ2luLWJvdHRvbToxMnB4fQouY3MtYm9keXtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS45fQouY3MtYm9keSBwe21hcmdpbi1ib3R0b206OHB4fQouY3MtYm9keSBwOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfQouY3MtYm9keSAuYXJ0e3BhZGRpbmctbGVmdDoxNHB4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpO21hcmdpbjo2cHggMH0KLmNzLWJvZHkgdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjo2cHggMH0KLmNzLWJvZHkgdWwgbGl7cGFkZGluZzozcHggMCAzcHggMTZweDtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNzLWJvZHkgdWwgbGk6OmJlZm9yZXtjb250ZW50OifilrgnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtjb2xvcjp2YXIoLS1hY2NlbnQyKTtmb250LXNpemU6MTFweDt0b3A6NHB4fQouZWRpdGFibGUtZmllbGR7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkIHZhcigtLWFjY2VudDIpO21pbi13aWR0aDoxMDBweDtjb2xvcjp2YXIoLS10ZXh0KTtmb250LXdlaWdodDo1MDB9Ci5zaWduLXNlY3Rpb257cGFkZGluZzoyMHB4IDAgMzZweDtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjQwcHh9Ci5zaWduLWJveHtib3JkZXItdG9wOjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpO3BhZGRpbmctdG9wOjEycHh9Ci5zaWduLWxhYmVse2ZvbnQtc2l6ZTo5cHg7Y29sb3I6dmFyKC0tdGV4dDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMWVtO21hcmdpbi1ib3R0b206M3B4fQouc2lnbi1uYW1le2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0KX0KLnNpZ24tYXJlYXtoZWlnaHQ6NTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgdmFyKC0tYm9yZGVyKTttYXJnaW46MTJweCAwIDhweH0KLnNpZ24tZGF0ZS1saW5le2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQzKX0KLmRvYy1mb290ZXJ7YmFja2dyb3VuZDp2YXIoLS1kYXJrKTtwYWRkaW5nOjE2cHggNTJweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyfQouZm9vdGVyLWxlZnR7Zm9udC1zaXplOjExcHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9LmZvb3Rlci1sZWZ0IHN0cm9uZ3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC42NSl9Ci5mb290ZXItcmlnaHR7Zm9udC1zaXplOjEwcHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7dGV4dC1hbGlnbjpyaWdodDtsaW5lLWhlaWdodDoxLjh9Cltjb250ZW50ZWRpdGFibGU9InRydWUiXXtvdXRsaW5lOm5vbmU7Ym9yZGVyLXJhZGl1czozcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXM7Y3Vyc29yOnRleHR9Cltjb250ZW50ZWRpdGFibGU9InRydWUiXTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMTA4LDk5LDI1NSwuMDcpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMTA4LDk5LDI1NSwuMil9Ci5lZGl0LW1vZGUgLmVkaXRhYmxlLWZpZWxke2JhY2tncm91bmQ6cmdiYSgxMDgsOTksMjU1LC4wNCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1hY2NlbnQpO2N1cnNvcjp0ZXh0fQoKLyog4pWQ4pWQ4pWQIFBSSU5UIOKVkOKVkOKVkCAqLwpAbWVkaWEgcHJpbnQgewogIEBwYWdlIHsgc2l6ZTogQTQ7IG1hcmdpbjogMTVtbSAxNW1tIDIwbW0gMTVtbTsgfQogICogeyAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3QgIWltcG9ydGFudDsgcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdCAhaW1wb3J0YW50OyB9CiAgaHRtbCwgYm9keSB7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsgfQogIC5zZWxlY3Rvci1wYWdlLCAudG9vbGJhciwgLmVkaXQtYmFubmVyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgLmNvbnRyYWN0LWRvYy1wYWdlIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IH0KICAuZG9jIHsgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50OyBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7IH0KICAuZG9jLWhlYWRlciB7IGJhY2tncm91bmQ6ICMwZDBkMTQgIWltcG9ydGFudDsgcGFkZGluZzogMjBweCAzMHB4IDE2cHggIWltcG9ydGFudDsgfQogIC5kb2MtaGVhZGVyOjpiZWZvcmUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAuZHQtdGl0bGUgeyBmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsgfQogIC5kb2MtYm9keSB7IHBhZGRpbmc6IDAgMzBweCAhaW1wb3J0YW50OyB9CiAgLmNvbnRyYWN0LXNlY3Rpb24geyBwYWRkaW5nOiAxMnB4IDAgIWltcG9ydGFudDsgfQogIC5jcy1ib2R5IHsgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7IH0KICAuY3MtYm9keSBwIHsgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7IH0KICAuc2lnbi1zZWN0aW9uIHsgcGFkZGluZzogMTRweCAwIDIwcHggIWltcG9ydGFudDsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9CiAgLnNpZ24tYXJlYSB7IGhlaWdodDogMzVweCAhaW1wb3J0YW50OyB9CiAgLmRvYy1mb290ZXIgeyBiYWNrZ3JvdW5kOiAjMGQwZDE0ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDEwcHggMzBweCAhaW1wb3J0YW50OyB9CiAgW2NvbnRlbnRlZGl0YWJsZV0geyBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgfQogIC5lZGl0YWJsZS1maWVsZCB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjICFpbXBvcnRhbnQ7IH0KICBoMiB7IHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyB9CiAgLmNvbnRyYWN0LXNlY3Rpb24geyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPCEtLSBTRUxFQ1RPUiAtLT4KPGRpdiBjbGFzcz0ic2VsZWN0b3ItcGFnZSIgaWQ9InNlbGVjdG9yUGFnZSI+CiAgPGRpdiBjbGFzcz0ic2VsZWN0b3ItaGVhZGVyIj4KICAgIDxpbWcgc3JjPSJodHRwczovL3dlYnRyaXhpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDQvd3d3dy5wbmciIG9uZXJyb3I9InRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSciIGFsdD0iV2VidHJpeGlhIj4KICAgIDxkaXYgY2xhc3M9InNlbGVjdG9yLXRpdGxlIj7Qk9C10L3QtdGA0LjRgNCw0Lkg0LTQvtCz0L7QstC+0YA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNlbGVjdG9yLXN1YiI+0JjQt9Cx0LXRgNC10YLQtSDQstC40LTQsCDQtNC+0LPQvtCy0L7RgCwg0L/QvtC/0YrQu9C90LXRgtC1INC00LDQvdC90LjRgtC1INC4INC/0YDQuNC90YLQuNGA0LDQudGC0LU8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1ncmlkIj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ3dlYnNpdGUnKSIgaWQ9ImN0LXdlYnNpdGUiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn4yQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINGB0LDQudGCPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCY0LfRgNCw0LHQvtGC0LrQsCDQvdCwINGD0LXQsdGB0LDQudGCICsg0L7Qv9GG0LjQvtC90LDQu9C90LAg0L/QvtC00LTRgNGK0LbQutCwPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ3Nob3AnKSIgaWQ9ImN0LXNob3AiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn5uSPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINC+0L3Qu9Cw0LnQvSDQvNCw0LPQsNC30LjQvTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj5Xb29Db21tZXJjZSAvIEUtY29tbWVyY2UgKyDQv9C+0LTQtNGA0YrQttC60LA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3QtdHlwZSIgb25jbGljaz0ic2VsZWN0VHlwZSgnbWFya2V0aW5nJykiIGlkPSJjdC1tYXJrZXRpbmciPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn5OxPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINC80LDRgNC60LXRgtC40L3QszwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QodC+0YYuINC80YDQtdC20LgsIEdvb2dsZSBBZHMsIFNFTywg0YDQuNC50LvRgdC+0LLQtTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCdtYWludGVuYW5jZScpIiBpZD0iY3QtbWFpbnRlbmFuY2UiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn5SnPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINCY0KIg0L/QvtC00LTRgNGK0LbQutCwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCc0LXRgdC10YfQvdCwINC/0L7QtNC00YDRitC20LrQsCwg0YXQvtGB0YLQuNC90LMsINC80L7QvdC40YLQvtGA0LjQvdCzPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ3N1YmNvbnRyYWN0b3InKSIgaWQ9ImN0LXN1YmNvbnRyYWN0b3IiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn6SdPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINC/0L7QtNC40LfQv9GK0LvQvdC40YLQtdC7PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCc0LXQttC00YMgV2VidHJpeGlhINC4INCy0YrQvdGI0LXQvSDQuNC30L/RitC70L3QuNGC0LXQuzwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCdjb21wbGV4JykiIGlkPSJjdC1jb21wbGV4Ij4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+4q2QPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QmtC+0LzQv9C70LXQutGB0LXQvSDQtNC+0LPQvtCy0L7RgDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QodCw0LnRgi/QvNCw0LPQsNC30LjQvSArINC80LDRgNC60LXRgtC40L3QsyArINC/0L7QtNC00YDRitC20LrQsDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGJ1dHRvbiBjbGFzcz0iZ2VuZXJhdGUtYnRuIiBvbmNsaWNrPSJnZW5lcmF0ZUNvbnRyYWN0KCkiIGlkPSJnZW5lcmF0ZUJ0biIgZGlzYWJsZWQ+0JjQt9Cx0LXRgNC4INCy0LjQtCDQtNC+0LPQvtCy0L7RgCDihpI8L2J1dHRvbj4KPC9kaXY+Cgo8IS0tIENPTlRSQUNUIERPQyAtLT4KPGRpdiBjbGFzcz0iY29udHJhY3QtZG9jLXBhZ2UiIGlkPSJjb250cmFjdERvY1BhZ2UiPgogIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgPGJ1dHRvbiBjbGFzcz0idGJ0biBiYWNrIiBvbmNsaWNrPSJnb0JhY2soKSI+4oaQINCd0LDQt9Cw0LQ8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gc2VjIiBvbmNsaWNrPSJ0b2dnbGVFZGl0KCkiIGlkPSJlZGl0QnRuIj7inI/vuI8g0KDQtdC00LDQutGC0LjRgNCw0Lk8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gc2VjIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+8J+WqCDQn9GA0LjQvdGC0LjRgNCw0Lk8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gcHJpbWFyeSIgb25jbGljaz0id2luZG93LnByaW50KCkiPuKshyBQREY8L2J1dHRvbj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJlZGl0LWJhbm5lciIgaWQ9ImVkaXRCYW5uZXIiPuKcj++4jyDQmtC70LjQutC90Lgg0LLRitGA0YXRgyDQv9C+0LvQtdGC0LDRgtCwINC/0L7QtNGH0LXRgNGC0LDQvdC4INGBINC/0YPQvdC60YLQuNGAINC30LAg0YDQtdC00LDQutGG0LjRjy48L2Rpdj4KICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJjb250cmFjdERvYyI+PC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KbGV0IHNlbGVjdGVkVHlwZSA9IG51bGw7CmNvbnN0IG1vbnRocz1bJ9GP0L3RgycsJ9GE0LXQsicsJ9C80LDRgCcsJ9Cw0L/RgCcsJ9C80LDQuScsJ9GO0L3QuCcsJ9GO0LvQuCcsJ9Cw0LLQsycsJ9GB0LXQvycsJ9C+0LrRgicsJ9C90L7QtScsJ9C00LXQuiddOwpmdW5jdGlvbiBmbXREYXRlKGQpe3JldHVybiBkLmdldERhdGUoKSsnICcrbW9udGhzW2QuZ2V0TW9udGgoKV0rJyAnK2QuZ2V0RnVsbFllYXIoKSsn0LMuJ30KY29uc3QgVE9EQVkgPSBmbXREYXRlKG5ldyBEYXRlKCkpOwpjb25zdCBZRUFSID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwoKZnVuY3Rpb24gc2VsZWN0VHlwZSh0eXBlKSB7CiAgc2VsZWN0ZWRUeXBlID0gdHlwZTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29udHJhY3QtdHlwZScpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LScrdHlwZSkuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVCdG4nKS5kaXNhYmxlZCA9IGZhbHNlOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZW5lcmF0ZUJ0bicpLnRleHRDb250ZW50ID0gJ9CT0LXQvdC10YDQuNGA0LDQuSDQtNC+0LPQvtCy0L7RgNCwIOKGkic7Cn0KCmZ1bmN0aW9uIGdvQmFjaygpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0b3JQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jUGFnZScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgZWRpdE1vZGUgPSBmYWxzZTsKfQoKbGV0IGVkaXRNb2RlID0gZmFsc2U7CmZ1bmN0aW9uIHRvZ2dsZUVkaXQoKSB7CiAgZWRpdE1vZGUgPSAhZWRpdE1vZGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRCYW5uZXInKS5jbGFzc0xpc3QudG9nZ2xlKCdzaG93JywgZWRpdE1vZGUpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0QnRuJykudGV4dENvbnRlbnQgPSBlZGl0TW9kZSA/ICfinIUg0JPQvtGC0L7QstC+JyA6ICfinI/vuI8g0KDQtdC00LDQutGC0LjRgNCw0LknOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmFjdERvYycpLmNsYXNzTGlzdC50b2dnbGUoJ2VkaXQtbW9kZScsIGVkaXRNb2RlKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbY29udGVudGVkaXRhYmxlXSwgLmVkaXRhYmxlLWZpZWxkJykuZm9yRWFjaChlbCA9PiB7CiAgICBlbC5jb250ZW50RWRpdGFibGUgPSBlZGl0TW9kZSA/ICd0cnVlJyA6ICdmYWxzZSc7CiAgfSk7Cn0KCmZ1bmN0aW9uIGYobGFiZWwsIGRlZj0nX19fX19fJykgewogIHJldHVybiBgPHNwYW4gY2xhc3M9ImVkaXRhYmxlLWZpZWxkIiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2RlZn08L3NwYW4+YDsKfQoKZnVuY3Rpb24gY29udHJhY3RIZWFkZXIodGl0bGUsIG51bSkgewogIHJldHVybiBgCiAgPGRpdiBjbGFzcz0iZG9jLWhlYWRlciI+CiAgICA8ZGl2IGNsYXNzPSJoZWFkZXItdG9wIj4KICAgICAgPGltZyBjbGFzcz0ibG9nby1pbWciIHNyYz0iaHR0cHM6Ly93ZWJ0cml4aWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA0L3d3d3cucG5nIiBvbmVycm9yPSJ0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnIiBhbHQ9IldlYnRyaXhpYSI+CiAgICAgIDxkaXYgY2xhc3M9ImRvYy10eXBlLWJsb2NrIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkdC1sYWJlbCI+0JTQvtC60YPQvNC10L3RgjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImR0LXRpdGxlIj4ke3RpdGxlfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImR0LW51bSI+4oSWICR7Zign0J3QvtC80LXRgCcsJ1dULdCU0J7Qky0nK1lFQVIrJy0nKydfX18nKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImhlYWRlci1ib3R0b20iPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItcGFydGllcyI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWxhYmVsIj7QmNC30L/RitC70L3QuNGC0LXQuzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydHktbmFtZSI+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWRldGFpbCI+0JXQmNCaOiAxMjM0NTY3ODk8YnI+b2ZmaWNlQHdlYnRyaXhpYS5jb20gwrcgKzM1OSA4OCA4ODggODg4ODxicj7Qn9GA0LXQtNGB0YLQsNCy0LvRj9Cy0LDQvdC+INC+0YI6INCl0LDQutCw0L0g0J7RgdC80LDQvTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1sYWJlbCI+0JLRitC30LvQvtC20LjRgtC10Ls8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LW5hbWUiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywn0JrQu9C40LXQvdGCIC8g0KTQuNGA0LzQsCDQntCe0JQnKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWRldGFpbCIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+0JXQmNCaOiAke2YoJ9CV0JjQmicsJ19fX19fX19fXycpfTxicj5FbWFpbDogJHtmKCdFbWFpbCcsJ19fX19fX0BfX19fXy5iZycpfTxicj7Qn9GA0LXQtNGB0YLQsNCy0LvRj9Cy0LDQvdC+INC+0YI6ICR7Zign0J/RgNC10LTRgdGC0LDQstC70Y/QstCw0YknLCdfX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImRvYy1ib2R5Ij5gOwp9CgpmdW5jdGlvbiBjb250cmFjdEZvb3RlcigpIHsKICByZXR1cm4gYAogIDxkaXYgY2xhc3M9InNpZ24tc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbGFiZWwiPtCX0LAg0JjQl9Cf0KrQm9Cd0JjQotCV0JvQryAvINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbmFtZSI+0KXQsNC60LDQvSDQntGB0LzQsNC9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogJHtUT0RBWX0gJm5ic3A7Jm5ic3A7INCf0L7QtNC/0LjRgSDQuCDQv9C10YfQsNGCOiBfX19fX19fX19fX19fPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNpZ24tYm94Ij4KICAgICAgPGRpdiBjbGFzcz0ic2lnbi1sYWJlbCI+0JfQsCDQktCq0JfQm9Ce0JbQmNCi0JXQm9CvPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbmFtZSIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogX19fX19fX19fX19fX19fICZuYnNwOyZuYnNwOyDQn9C+0LTQv9C40YEg0Lgg0L/QtdGH0LDRgjogX19fX19fX19fX19fXzwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPC9kaXY+PCEtLSAvZG9jLWJvZHkgLS0+CiAgPGRpdiBjbGFzcz0iZG9jLWZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGVmdCI+PHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiDigJQg0JTQuNCz0LjRgtCw0LvQvdCwINCw0LPQtdC90YbQuNGPIMK3IHdlYnRyaXhpYS5jb208L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1yaWdodCI+b2ZmaWNlQHdlYnRyaXhpYS5jb20gwrcgKzM1OSA4OCA4ODggODg4ODwvZGl2PgogIDwvZGl2PmA7Cn0KCmZ1bmN0aW9uIGNvbW1vblNlY3Rpb25zKHNlcnZpY2VEZXNjKSB7CiAgcmV0dXJuIGAKICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQldCU0JzQldCiINCd0JAg0JTQntCT0J7QktCe0KDQkDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC40LfQstGK0YDRiNC4INC30LAg0JLRitC30LvQvtC20LjRgtC10LvRjyDRgdC70LXQtNC90LjRgtC1INGD0YHQu9GD0LPQuDo8L3A+CiAgICAgICR7c2VydmljZURlc2N9CiAgICAgIDxwPtGB0YDQtdGJ0YMg0LfQsNC/0LvQsNGJ0LDQvdC1INC90LAg0YPQs9C+0LLQvtGA0LXQvdC+0YLQviDQsiDQvdCw0YHRgtC+0Y/RidC40Y8g0LTQvtCz0L7QstC+0YAg0LLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtS48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCh0KDQntCaINCd0JAg0JjQl9Cf0KrQm9Cd0JXQndCY0JU8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD4yLjEuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC40LfQv9GK0LvQvdC4INC/0L7RgNGK0YfQutCw0YLQsCDQsiDRgdGA0L7QuiDQtNC+IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJzMwICjRgtGA0LjQtNC10YHQtdGCKScpfTwvc3Ryb25nPiDRgNCw0LHQvtGC0L3QuCDQtNC90Lgg0L7RgiDQtNCw0YLQsNGC0LAg0L3QsCDQv9C+0LTQv9C40YHQstCw0L3QtSDQvdCwINC90LDRgdGC0L7Rj9GJ0LjRjyDQtNC+0LPQvtCy0L7RgCDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINCw0LLQsNC90YHQvtCy0L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvcD4KICAgICAgPHA+Mi4yLiDQodGA0L7QutGK0YIg0YHQtSDRgdGH0LjRgtCwINC30LAg0YHQv9Cw0LfQtdC9INC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUg0L3QsCDQs9C+0YLQvtCy0LjRjyDQv9GA0L7QtNGD0LrRgiDQt9CwINC+0LTQvtCx0YDQtdC90LjQtSDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8uPC9wPgogICAgICA8cD4yLjMuINCf0YDQuCDQt9Cw0LHQsNCy0Y/QvdC1INC+0YIg0YHRgtGA0LDQvdCwINC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjyAo0L3QtdC/0YDQtdC00L7RgdGC0LDQstGP0L3QtSDQvdCwINC80LDRgtC10YDQuNCw0LvQuCwg0YHRitC00YrRgNC20LDQvdC40LUsINC00L7RgdGC0YrQv9C4KSwg0YHRgNC+0LrRitGCINGB0LUg0YPQtNGK0LvQttCw0LLQsCDRgSDQv9C10YDQuNC+0LTQsCDQvdCwINC30LDQsdCw0LLRj9C90LUuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDM8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QptCV0J3QkCDQmCDQndCQ0KfQmNCdINCd0JAg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD4zLjEuINCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQt9Cw0L/Qu9Cw0YnQsCDQvdCwINCY0LfQv9GK0LvQvdC40YLQtdC70Y8g0LLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtSDQsiDRgNCw0LfQvNC10YAg0L3QsCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRg9C80LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0LHQtdC3INCy0LrQu9GO0YfQtdC90L4g0JTQlNChLjwvcD4KICAgICAgPHA+My4yLiDQn9C70LDRidCw0L3QtdGC0L4g0YHQtSDQuNC30LLRitGA0YjQstCwINC/0L4g0YHQu9C10LTQvdC40Y8g0LPRgNCw0YTQuNC6OjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPjUwJSAo0LDQstCw0L3RgS/QutCw0L/QsNGA0L4pPC9zdHJvbmc+IOKAlCDQv9GA0Lgg0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQtNC+0LPQvtCy0L7RgNCwOiAke2YoJ9CQ0LLQsNC90YEnLCfigqwgX19fX18nKX08L2xpPgogICAgICAgIDxsaT48c3Ryb25nPjUwJSAo0YTQuNC90LDQu9C10L0g0YLRgNCw0L3RiCk8L3N0cm9uZz4g4oCUINC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUg0L3QsCDQs9C+0YLQvtCy0LjRjyDQv9GA0L7QtdC60YI6ICR7Zign0KTQuNC90LDQuycsJ+KCrCBfX19fXycpfTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPjMuMy4g0J/Qu9Cw0YnQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQv9C+INCx0LDQvdC60L7QsiDQv9GK0YIg0L/QviDRgdC80LXRgtC60LAg0L3QsCDQmNC30L/RitC70L3QuNGC0LXQu9GPOiBJQkFOICR7ZignSUJBTicsJ0JHX18gX19fXyBfX19fIF9fIF9fX19fXyBfXycpfTwvcD4KICAgICAgPHA+My40LiDQpNCw0LrRgtGD0YDQsCDRgdC1INC40LfQtNCw0LLQsCDQsiDRgNCw0LzQutC40YLQtSDQvdCwIDUgKNC/0LXRgikg0YDQsNCx0L7RgtC90Lgg0LTQvdC4INGB0LvQtdC0INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0L/Qu9Cw0YnQsNC90LXRgtC+LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCQ0JLQkCDQmCDQl9CQ0JTQqtCb0JbQldCd0JjQryDQndCQINCY0JfQn9Cq0JvQndCY0KLQldCb0K88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8dWw+CiAgICAgICAgPGxpPtCU0LAg0LjQt9C/0YrQu9C90Lgg0L/QvtGA0YrRh9C60LDRgtCwINCyINGB0YDQvtC6INC4INCyINGB0YrQvtGC0LLQtdGC0YHRgtCy0LjQtSDRgSDRg9Cz0L7QstC+0YDQtdC90LjRgtC1INC40LfQuNGB0LrQstCw0L3QuNGPLjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0L/RgNC10LTQvtGB0YLQsNCy0Lgg0LTQviA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KDQtdCy0LjQt9C40LgnLCczICjRgtGA0LgpJyl9PC9zdHJvbmc+INCx0LXQt9C/0LvQsNGC0L3QuCDQutC+0YDQtdC60YbQuNC4INCyINGA0LDQvNC60LjRgtC1INC90LAg0L/RgNC+0LXQutGC0LAuPC9saT4KICAgICAgICA8bGk+0JTQsCDQv9C+0LTQtNGK0YDQttCwINC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwLCDQv9C+0LvRg9GH0LXQvdCwINC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjy48L2xpPgogICAgICAgIDxsaT7QlNCwINC40L3RhNC+0YDQvNC40YDQsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINC/0YDQuCDQvtGC0LrQu9C+0L3QtdC90LjRjyDQvtGCINC/0LXRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC/0LvQsNC9INC40LvQuCDQv9GA0Lgg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGCINC+0YIg0L/RgNC+0LzRj9C90LAg0L3QsCDRgdGA0L7QutCwLjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQkNCS0JAg0Jgg0JfQkNCU0KrQm9CW0JXQndCY0K8g0J3QkCDQktCq0JfQm9Ce0JbQmNCi0JXQm9CvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHVsPgogICAgICAgIDxsaT7QlNCwINC/0YDQtdC00L7RgdGC0LDQstGPINGB0LLQvtC10LLRgNC10LzQtdC90L3QviDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LzQsNGC0LXRgNC40LDQu9C4LCDRgdGK0LTRitGA0LbQsNC90LjQtSDQuCDQtNC+0YHRgtGK0L/QuC48L2xpPgogICAgICAgIDxsaT7QlNCwINC/0L7RgtCy0YrRgNC20LTQsNCy0LAg0LjQu9C4INC+0YLRhdCy0YrRgNC70Y8g0YEg0LzQvtGC0LjQstC40YDQsNC90L4g0YHRgtCw0L3QvtCy0LjRidC1INCyINGB0YDQvtC6INC00L4gPHN0cm9uZz41ICjQv9C10YIpPC9zdHJvbmc+INGA0LDQsdC+0YLQvdC4INC00L3QuC48L2xpPgogICAgICAgIDxsaT7QlNCwINC30LDQv9C70LDRidCwINGD0LPQvtCy0L7RgNC10L3QvtGC0L4g0LLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtSDQsiDRgdGA0L7Qui48L2xpPgogICAgICAgIDxsaT7QlNCwINC90LUg0YDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsCDQuNC70Lgg0LjQt9C/0L7Qu9C30LLQsCDRh9Cw0YHRgtC40YfQvdC4INGA0LXQt9GD0LvRgtCw0YLQuCDQv9GA0LXQtNC4INGE0LjQvdCw0LvQvdC+0YLQviDQv9C70LDRidCw0L3QtS48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDY8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QmNCd0KLQldCb0JXQmtCi0KPQkNCb0J3QkCDQodCe0JHQodCi0JLQldCd0J7QodCiPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+Ni4xLiDQodC70LXQtCDQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0YrQu9C90L7RgtC+INC/0LvQsNGJ0LDQvdC1LCDQktGK0LfQu9C+0LbQuNGC0LXQu9GP0YIg0L/RgNC40LTQvtCx0LjQstCwINC/0YDQsNCy0L7RgtC+INC90LAg0L/QvtC70LfQstCw0L3QtSDQvdCwINC40LfRgNCw0LHQvtGC0LXQvdC40Y8g0L/RgNC+0LTRg9C60YIuPC9wPgogICAgICA8cD42LjIuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQt9Cw0L/QsNC30LLQsCDQv9GA0LDQstC+0YLQviDQtNCwINCy0LrQu9GO0YfQstCwINC/0YDQvtC10LrRgtCwINCyINGB0LLQvtC10YLQviDQv9C+0YDRgtGE0L7Qu9C40L4sINC+0YHQstC10L0g0LDQutC+INCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQuNC30YDQuNGH0L3QviDQtSDQv9C+0LjRgdC60LDQuyDQutC+0L3RhNC40LTQtdC90YbQuNCw0LvQvdC+0YHRgi48L3A+CiAgICAgIDxwPjYuMy4g0JLRgdC40YfQutC4INC40LfQv9C+0LvQt9Cy0LDQvdC4INC70LjRhtC10L3Qt9C40YDQsNC90Lgg0YjRgNC40YTRgtC+0LLQtSwg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQuCDQv9C70YrQs9C40L3QuCDQvtGB0YLQsNCy0LDRgiDRgdC+0LHRgdGC0LLQtdC90L7RgdGCINC90LAg0YHRitC+0YLQstC10YLQvdC40YLQtSDQuNC8INC/0YDQuNGC0LXQttCw0YLQtdC70LguPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDc8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QntCi0JPQntCS0J7QoNCd0J7QodCiINCYINCT0JDQoNCQ0J3QptCY0K88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD43LjEuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQs9Cw0YDQsNC90YbQuNC+0L3QtdC9INC/0LXRgNC40L7QtCDQvtGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQk9Cw0YDQsNC90YbQuNGPJywnMzAgKNGC0YDQuNC00LXRgdC10YIpJyl9PC9zdHJvbmc+INC60LDQu9C10L3QtNCw0YDQvdC4INC00L3QuCDRgdC70LXQtCDQv9GA0LXQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RgNC+0LXQutGC0LAsINCyINGA0LDQvNC60LjRgtC1INC90LAg0LrQvtC50YLQviDQsdC10LfQv9C70LDRgtC90L4g0L7RgtGB0YLRgNCw0L3Rj9Cy0LAg0LHRitCz0L7QstC1LCDQv9GA0LjRh9C40L3QtdC90Lgg0L7RgiDRgNCw0LfRgNCw0LHQvtGC0LrQsNGC0LAuPC9wPgogICAgICA8cD43LjIuINCT0LDRgNCw0L3RhtC40Y/RgtCwINC90LUg0L/QvtC60YDQuNCy0LAg0L/QvtCy0YDQtdC00LgsINC/0YDQuNGH0LjQvdC10L3QuCDQvtGCOiDQv9GA0L7QvNC10L3QuCDQvdCw0L/RgNCw0LLQtdC90Lgg0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINC40LvQuCDRgtGA0LXRgtC4INC70LjRhtCwLCDRhdCw0LrQtdGA0YHQutC4INCw0YLQsNC60LgsINGB0YDQuNCy0L7QstC1INC90LAg0YXQvtGB0YLQuNC90LMg0LjQu9C4INC00LXQudGB0YLQstC40Y8g0L3QsCDQvdC10L/RgNC10L7QtNC+0LvQuNC80LAg0YHQuNC70LAuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDg8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQmtCg0JDQotCv0JLQkNCd0JUg0J3QkCDQlNCe0JPQntCS0J7QoNCQPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+OC4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC60YDQsNGC0Lgg0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1INC90LAg0YHRgtGA0LDQvdC40YLQtSwg0L7RhNC+0YDQvNC10L3QviDQsiDQv9C40YHQvNC10L0g0LLQuNC0LjwvcD4KICAgICAgPHA+OC4yLiDQn9GA0Lgg0L7RgtC60LDQtyDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8g0YHQu9C10LQg0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDRgNCw0LHQvtGC0LDRgtCwLCDQsNCy0LDQvdGB0YrRgiDQvdC1INGB0LUg0LLRgNGK0YnQsC48L3A+CiAgICAgIDxwPjguMy4g0J/RgNC4INC90LXQuNC30L/RitC70L3QtdC90LjQtSDQvtGCINGB0YLRgNCw0L3QsCDQvdCwINCY0LfQv9GK0LvQvdC40YLQtdC70Y8sINGC0L7QuSDQtNGK0LvQttC4INCy0YDRitGJ0LDQvdC1INC90LAg0LDQstCw0L3RgdC+0LLQvtGC0L4g0L/Qu9Cw0YnQsNC90LUuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDk8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Ql9CQ0JrQm9Cu0KfQmNCi0JXQm9Cd0Jgg0KDQkNCX0J/QntCg0JXQlNCR0Jg8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD45LjEuINCd0LDRgdGC0L7Rj9GJ0LjRj9GCINC00L7Qs9C+0LLQvtGAINC1INGB0YrRgdGC0LDQstC10L0g0LIg0LTQstCwINC10LTQvdCw0LrQstC4INC10LrQt9C10LzQv9C70Y/RgNCwIOKAlCDQv9C+INC10LTQuNC9INC30LAg0LLRgdGP0LrQsCDQvtGCINGB0YLRgNCw0L3QuNGC0LUuPC9wPgogICAgICA8cD45LjIuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQsiDQtNC+0LPQvtCy0L7RgNCwINCy0YrQv9GA0L7RgdC4INGB0LUg0L/RgNC40LvQsNCz0LAg0LTQtdC50YHRgtCy0LDRidC+0YLQviDQt9Cw0LrQvtC90L7QtNCw0YLQtdC70YHRgtCy0L4g0L3QsCDQoNC10L/Rg9Cx0LvQuNC60LAg0JHRitC70LPQsNGA0LjRjy48L3A+CiAgICAgIDxwPjkuMy4g0JLRgdC40YfQutC4INGB0L/QvtGA0L7QstC1INGB0LUg0YDQtdGI0LDQstCw0YIg0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1LCDQsCDQv9GA0Lgg0L3QtdCy0YrQt9C80L7QttC90L7RgdGCIOKAlCDQv9C+INGB0YrQtNC10LHQtdC9INGA0LXQtCDQsiDQutC+0LzQv9C10YLQtdC90YLQvdC40Y8g0YHRitC0INCyINCz0YAuICR7Zign0JPRgNCw0LQnLCdfX19fX19fX18nKX0uPC9wPgogICAgICA8cD45LjQuINCU0L7Qs9C+0LLQvtGA0YrRgiDQstC70LjQt9CwINCyINGB0LjQu9CwINC+0YIg0LTQsNGC0LDRgtCwINC90LAg0L/QvtC00L/QuNGB0LLQsNC90LXRgtC+INC80YMg0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQsNCy0LDQvdGB0L7QstC+0YLQviDQv9C70LDRidCw0L3QtS48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj5gOwp9Cgpjb25zdCBDT05UUkFDVFMgPSB7CiAgd2Vic2l0ZTogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0JjQl9Cg0JDQkdCe0KLQmtCQINCd0JAg0KPQldCR0KHQkNCZ0KInLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAke2NvbW1vblNlY3Rpb25zKGAKICAgICAgPHVsPgogICAgICAgIDxsaT7QoNCw0LfRgNCw0LHQvtGC0LrQsCDQvdCwINGD0LXQsdGB0LDQudGCINC90LAg0LHQsNC30LDRgtCwINC90LAgJHtmKCfQn9C70LDRgtGE0L7RgNC80LAnLCdXb3JkUHJlc3MnKX0g0YEg0YPQvdC40LrQsNC70LXQvSDQtNC40LfQsNC50L08L2xpPgogICAgICAgIDxsaT7QkNC00LDQv9GC0LjQstC90L7RgdGCINC30LAg0LLRgdC40YfQutC4INGD0YHRgtGA0L7QudGB0YLQstCwIChtb2JpbGUsIHRhYmxldCwgZGVza3RvcCk8L2xpPgogICAgICAgIDxsaT7QmNC90YLQtdCz0YDQsNGG0LjRjyDQvdCwINC00L4gJHtmKCfQodGC0YDQsNC90LjRhtC4JywnX18gKF9fXyknKX0g0YHRgtGA0LDQvdC40YbQuCDRgdGK0LTRitGA0LbQsNC90LjQtTwvbGk+CiAgICAgICAgPGxpPlNFTyDQvtC/0YLQuNC80LjQt9Cw0YbQuNGPINC4INGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0LIg0YLRitGA0YHQsNGH0LrQuNGC0LUgKEdvb2dsZSwgQmluZyk8L2xpPgogICAgICAgIDxsaT5TU0wg0YHQtdGA0YLQuNGE0LjQutCw0YIg0Lgg0LHQsNC30L7QstCwINGB0LjQs9GD0YDQvdC+0YHRgjwvbGk+CiAgICAgICAgPGxpPtCe0LHRg9GH0LXQvdC40LUg0LfQsCDRgNCw0LHQvtGC0LAg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdC40Y8g0L/QsNC90LXQuzwvbGk+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JTQvtC/0YrQu9C90LjRgtC10LvQvdCwINGE0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICA8L3VsPmApfQogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0J7QlNCU0KDQqtCW0JrQkCAo0J3QldCX0JDQlNCq0JvQltCY0KLQldCb0J3Qnik8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+0J/RgNC4INC20LXQu9Cw0L3QuNC1INC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjywg0YHQu9C10LQg0L/RgNC10LTQsNCy0LDQvdC1INC90LAg0YHQsNC50YLQsCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LrQu9GO0YfQtdC9INC+0YLQtNC10LvQtdC9INCU0L7Qs9C+0LLQvtGAINC30LAg0JjQoiDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDRgdGC0L7QudC90L7RgdGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQn9C+0LTQtNGA0YrQttC60LAnLCfigqwgX18gLyDQvNC10YHQtdGGJyl9PC9zdHJvbmc+LCDQstC60LvRjtGH0LLQsNGJOiDQsNC60YLRg9Cw0LvQuNC30LDRhtC40LgsINCx0LXQutGK0L/QuCwg0LzQvtC90LjRgtC+0YDQuNC90LMg0Lgg0L7RgtGB0YLRgNCw0L3Rj9Cy0LDQvdC1INC90LAg0L3QtdGA0LXQtNC90L7RgdGC0LguPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBzaG9wOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQmNCX0KDQkNCR0J7QotCa0JAg0J3QkCDQntCd0JvQkNCZ0J0g0JzQkNCT0JDQl9CY0J0nLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAke2NvbW1vblNlY3Rpb25zKGAKICAgICAgPHVsPgogICAgICAgIDxsaT7QmNC30YDQsNCx0L7RgtC60LAg0L3QsCDQvtC90LvQsNC50L0g0LzQsNCz0LDQt9C40L0g0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCAke2YoJ9Cf0LvQsNGC0YTQvtGA0LzQsCcsJ1dvb0NvbW1lcmNlIC8gV29yZFByZXNzJyl9PC9saT4KICAgICAgICA8bGk+0KPQvdC40LrQsNC70LXQvSDQtNC40LfQsNC50L0sINCw0LTQsNC/0YLQuNCy0LXQvSDQt9CwINCy0YHQuNGH0LrQuCDRg9GB0YLRgNC+0LnRgdGC0LLQsDwvbGk+CiAgICAgICAgPGxpPtCa0LDRh9Cy0LDQvdC1INC4INC90LDRgdGC0YDQvtC50LrQsCDQvdCwINC00L4gJHtmKCfQn9GA0L7QtNGD0LrRgtC4JywnX18gKF9fX19fKScpfSDQv9GA0L7QtNGD0LrRgtCwPC9saT4KICAgICAgICA8bGk+0JjQvdGC0LXQs9GA0LDRhtC40Y8g0YEg0L/Qu9Cw0YLQtdC20L3QuCDRgdC40YHRgtC10LzQuDogJHtmKCfQn9C70LDRidCw0L3QtScsJ9C90LDQu9C+0LbQtdC9INC/0LvQsNGC0LXQtiwg0LHQsNC90LrQvtCyINC/0YDQtdCy0L7QtCwg0LrQsNGA0YLQsCcpfTwvbGk+CiAgICAgICAgPGxpPtCY0L3RgtC10LPRgNCw0YbQuNGPINGBINC60YPRgNC40LXRgNGB0LrQuCDRhNC40YDQvNC4INC30LAg0LPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDRgtC+0LLQsNGA0LjRgtC10LvQvdC40YbQuDwvbGk+CiAgICAgICAgPGxpPtCa0LDRgtC10LPQvtGA0LjQuCwg0YTQuNC70YLRgNC4LCDRgNCw0LfRiNC40YDQtdC90L4g0YLRitGA0YHQtdC90LU8L2xpPgogICAgICAgIDxsaT5TRU8g0L7Qv9GC0LjQvNC40LfQsNGG0LjRjyDQuCDRgNC10LPQuNGB0YLRgNCw0YbQuNGPINCyIEdvb2dsZTwvbGk+CiAgICAgICAgPGxpPtCe0LHRg9GH0LXQvdC40LUg0LfQsCDRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC80LDQs9Cw0LfQuNC90LA8L2xpPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7Qv9GK0LvQvdC40YLQtdC70L3QvicsJ19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgIDwvdWw+YCl9CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxMDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KXQntCh0KLQmNCd0JMg0Jgg0J/QntCU0JTQoNCq0JbQmtCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjEwLjEuINCl0L7RgdGC0LjQvdCz0YrRgiDQvdCwINC80LDQs9Cw0LfQuNC90LAg0LU6ICR7Zign0KXQvtGB0YLQuNC90LMnLCfilqEg0L/RgNC10LTQvtGB0YLQsNCy0LXQvSDQvtGCINCY0LfQv9GK0LvQvdC40YLQtdC70Y8gJm5ic3A7Jm5ic3A7IOKWoSDQv9GA0LXQtNC+0YHRgtCw0LLQtdC9INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjycpfS48L3A+CiAgICAgICAgPHA+MTAuMi4g0J/RgNC4INC20LXQu9Cw0L3QuNC1INC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjyDRgdC1INGB0LrQu9GO0YfQstCwINC+0YLQtNC10LvQtdC9INCU0L7Qs9C+0LLQvtGAINC30LAg0JjQoiDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDRgdGC0L7QudC90L7RgdGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQn9C+0LTQtNGA0YrQttC60LAnLCfigqwgX18gLyDQvNC10YHQtdGGJyl9PC9zdHJvbmc+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgbWFya2V0aW5nOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQnNCQ0KDQmtCV0KLQmNCd0JMg0KPQodCb0KPQk9CYJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JTQnNCV0KIg0J3QkCDQlNCe0JPQntCS0J7QoNCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC/0YDQtdC00L7RgdGC0LDQstGPINGB0LvQtdC00L3QuNGC0LUg0LzQsNGA0LrQtdGC0LjQvdCzINGD0YHQu9GD0LPQuDo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwIEZhY2Vib29rIC8gSW5zdGFncmFtINCw0LrQsNGD0L3RgtC4PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEgR29vZ2xlIEFkcyDQutCw0LzQv9Cw0L3QuNC4INC4INC+0L/RgtC40LzQuNC30LDRhtC40Y88L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQlNC90LXQstC90Lgg0YHRgtC+0YDQuNGC0LAg0Lgg0L/QvtGB0YLQvtCy0LU8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQl9Cw0YHQvdC10LzQsNC90LUg0L3QsCDQstC40LTQtdC+INGA0LjQudC70YHQvtCy0LUg0LIg0L7QsdC10LrRgtCwPC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0KHQtdC00LzQuNGH0L3QuCDQsdGA0L7RiNGD0YDQuCAoQTQvQTUsIFBERiArINC00LjQs9C40YLQsNC70LXQvSk8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSBWaWJlciDQutCw0L3QsNC7IOKAlCDQvdCw0YHRgtGA0L7QudC60LAg0Lgg0YPQv9GA0LDQstC70LXQvdC40LU8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQntGA0LPQsNC90LjQt9C40YDQsNC90LUg0L3QsCDRgtC+0LzQsdC+0LvQuCDQuCDQuNCz0YDQuDwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCc0LXRgdC10YfQtdC9INC+0YLRh9C10YIg0LfQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7Qv9GK0LvQvdC40YLQtdC70L3QsCDRg9GB0LvRg9Cz0LAnLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAyPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QodCg0J7QmiDQndCQINCU0J7Qk9Ce0JLQntCg0JA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+Mi4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0YHQtSDRgdC60LvRjtGH0LLQsCDQt9CwINC80LjQvdC40LzQsNC70LXQvSDRgdGA0L7QuiDQvtGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJzYgKNGI0LXRgdGCKScpfTwvc3Ryb25nPiDQvNC10YHQtdGG0LAsINGB0YfQuNGC0LDQvdC+INC+0YIgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPi48L3A+CiAgICAgICAgPHA+Mi4yLiDQodC70LXQtCDQuNC30YLQuNGH0LDQvdC1INC90LAg0LzQuNC90LjQvNCw0LvQvdC40Y8g0YHRgNC+0LosINC00L7Qs9C+0LLQvtGA0YrRgiDRgdC1INC/0L7QtNC90L7QstGP0LLQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC30LAg0YHQu9C10LTQstCw0Ykg0LzQtdGB0LXRhiwg0LDQutC+INC90LUg0LUg0L/RgNC10LrRgNCw0YLQtdC9LjwvcD4KICAgICAgICA8cD4yLjMuINCf0YDQtdC60YDQsNGC0Y/QstCw0L3QtdGC0L4g0LjQt9C40YHQutCy0LAg0L/QuNGB0LzQtdC90L4g0YPQstC10LTQvtC80LvQtdC90LjQtSDQvNC40L3QuNC80YPQvCA8c3Ryb25nPjMwICjRgtGA0LjQtNC10YHQtdGCKTwvc3Ryb25nPiDQtNC90Lgg0L/RgNC10LTQstCw0YDQuNGC0LXQu9C90L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KbQldCd0JAg0Jgg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+My4xLiDQnNC10YHQtdGH0L3QsNGC0LAg0YLQsNC60YHQsCDQt9CwINGD0YHQu9GD0LPQuNGC0LUg0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cm0LXQvdCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4sINGBINCy0LrQu9GO0YfQtdC90L4g0JTQlNChLjwvcD4KICAgICAgICA8cD4zLjIuINCf0LvQsNGJ0LDQvdC10YLQviDRgdC1INC40LfQstGK0YDRiNCy0LAg0LTQviA8c3Ryb25nPjUt0YLQviDRh9C40YHQu9C+PC9zdHJvbmc+INC90LAg0YLQtdC60YPRidC40Y8g0LzQtdGB0LXRhiDQv9C+INCx0LDQvdC60L7QsiDQv9GK0YIuPC9wPgogICAgICAgIDxwPjMuMy4g0J/RgNC4INC30LDQsdCw0LLRj9C90LUg0L3QsCDQv9C70LDRidCw0L3QtSDQvdCw0LQgMTAg0LTQvdC4LCDQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0LzQvtC20LUg0LTQsCDQv9GA0LXRg9GB0YLQsNC90L7QstC4INGD0YHQu9GD0LPQuNGC0LUg0LTQviDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINC00YrQu9C20LjQvNCw0YLQsCDRgdGD0LzQsC48L3A+CiAgICAgICAgPHA+My40LiDQoNC10LrQu9Cw0LzQvdC40YLQtSDQsdGO0LTQttC10YLQuCAoR29vZ2xlIEFkcywgRmFjZWJvb2sgQWRzKSDRgdC1INC/0L7QtdC80LDRgiDQuCDQv9C70LDRidCw0YIg0L7RgtC00LXQu9C90L4g0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDQ8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQkNCS0JAg0Jgg0JfQkNCU0KrQm9CW0JXQndCY0K88L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQvNC10YHQtdGH0LXQvSDQvtGC0YfQtdGCINC00L4gNS3RgtC+INGH0LjRgdC70L4g0L3QsCDRgdC70LXQtNCy0LDRidC40Y8g0LzQtdGB0LXRhi48L2xpPgogICAgICAgICAgPGxpPtCh0YrQtNGK0YDQttCw0L3QuNC10YLQviDRgdC1INGB0YrQs9C70LDRgdGD0LLQsCDRgSDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINC/0YDQtdC00Lgg0L/Rg9Cx0LvQuNC60YPQstCw0L3QtS48L2xpPgogICAgICAgICAgPGxpPtCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQtNC+0YHRgtGK0L8g0LTQviDQv9GA0L7RhNC40LvQuNGC0LUg0Lgg0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INC80LDRgtC10YDQuNCw0LvQuC48L2xpPgogICAgICAgICAgPGxpPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvdC1INC90L7RgdC4INC+0YLQs9C+0LLQvtGA0L3QvtGB0YIg0LfQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1INC+0YIg0L/Qu9Cw0YLQtdC90LjRgtC1INGA0LXQutC70LDQvNC4INC/0YDQuCDQvdC10LTQvtGB0YLQsNGC0YrRh9C10L0g0LHRjtC00LbQtdGCLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDUg4oCUIDg8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0J7QktCV0KDQmNCi0JXQm9Cd0J7QodCiLCDQn9Cg0JXQmtCg0JDQotCv0JLQkNCd0JUg0Jgg0JfQkNCa0JvQrtCn0JjQotCV0JvQndCYINCg0JDQl9Cf0J7QoNCV0JTQkdCYPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjUuMS4g0KHRgtGA0LDQvdC40YLQtSDRgdC1INC30LDQtNGK0LvQttCw0LLQsNGCINC00LAg0L/QsNC30Y/RgiDQv9C+0LLQtdGA0LjRgtC10LvQvdC+0YHRgiDQvdCwINGC0YrRgNCz0L7QstGB0LrQsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8uPC9wPgogICAgICAgIDxwPjYuMS4g0JTQvtCz0L7QstC+0YDRitGCINGB0LUg0L/RgNC10LrRgNCw0YLRj9Cy0LAg0YEgMzAt0LTQvdC10LLQvdC+INC/0LjRgdC80LXQvdC+INC/0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSDRgdC70LXQtCDQuNC30YLQuNGH0LDQvdC1INC90LAg0LzQuNC90LjQvNCw0LvQvdC40Y8g0YHRgNC+0LouPC9wPgogICAgICAgIDxwPjcuMS4g0J/RgNC4INGE0L7RgNGB0LzQsNC20L7RgNC90Lgg0L7QsdGB0YLQvtGP0YLQtdC70YHRgtCy0LAsINGB0YLRgNCw0L3QuNGC0LUg0L3QtSDQvdC+0YHRj9GCINC+0YLQs9C+0LLQvtGA0L3QvtGB0YIg0LfQsCDQvdC10LjQt9C/0YrQu9C90LXQvdC40LUuPC9wPgogICAgICAgIDxwPjguMS4g0JTQvtCz0L7QstC+0YDRitGCINC1INGB0YrRgdGC0LDQstC10L0g0LIg0LTQstCwINC10LrQt9C10LzQv9C70Y/RgNCwLiDQl9CwINC90LXRg9GA0LXQtNC10L3QuNGC0LUg0LLRitC/0YDQvtGB0Lgg0YHQtSDQv9GA0LjQu9Cw0LPQsCDQt9Cw0LrQvtC90L7QtNCw0YLQtdC70YHRgtCy0L7RgtC+INC90LAg0KDQkS48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCksCgogIG1haW50ZW5hbmNlOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQmNCiINCf0J7QlNCU0KDQqtCW0JrQkCcsICdXVC3QlNCe0JMnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQmNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ca0LvQuNC10L3RgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCS0YrQt9C70L7QttC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDE8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JTQnNCV0KI8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+PHA+0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINGB0LvQtdC00L3QuNGC0LUg0YPRgdC70YPQs9C4INC/0L4g0L/QvtC00LTRgNGK0LbQutCwINC90LAg0YPQtdCx0YHQsNC50YIv0L/Qu9Cw0YLRhNC+0YDQvNCwINC90LAg0LDQtNGA0LXRgTogPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7QvNC10LnQvScsJ19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz48L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjcvMjQg0LzQvtC90LjRgtC+0YDQuNC90LMg0L3QsCDQv9C70LDRgtGE0L7RgNC80LDRgtCwINC4INGB0LDQudGC0LA8L2xpPgogICAgICAgICAgPGxpPtCe0YLRgdGC0YDQsNC90Y/QstCw0L3QtSDQvdCwINC90LXRgNC10LTQvdC+0YHRgtC4INC4INGC0LXRhdC90LjRh9C10YHQutC4INC/0YDQvtCx0LvQtdC80Lg8L2xpPgogICAgICAgICAgPGxpPtCQ0LrRgtGD0LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YHQuNGB0YLQtdC80LDRgtCwIChDTVMsINC/0LvRitCz0LjQvdC4LCDRgtC10LzQuCkg4oCUINCy0LXQtNC90YrQtiDRgdC10LTQvNC40YfQvdC+PC9saT4KICAgICAgICAgIDxsaT7QldC20LXQtNC90LXQstC10L0g0LDQstGC0L7QvNCw0YLQuNGH0LXQvSDQsdC10LrRitC/INC90LAg0LHQsNC30LDRgtCwINC00LDQvdC90Lgg0Lgg0YTQsNC50LvQvtCy0LXRgtC1PC9saT4KICAgICAgICAgIDxsaT7QodC60LDQvdC40YDQsNC90LUg0LfQsCDQt9C70L7QvdCw0LzQtdGA0LXQvSDQtNC+0YHRgtGK0L8g4oCUINCy0LXQtNC90YrQtiDRgdC10LTQvNC40YfQvdC+PC9saT4KICAgICAgICAgIDxsaT7QodC80Y/QvdCwINC90LAg0LHQsNC90LXRgNC4INC4INGC0LXQutGB0YLQvtCy0L4g0YHRitC00YrRgNC20LDQvdC40LUg4oCUINC00L4gJHtmKCfQn9GA0L7QvNC10L3QuCcsJ18gKF9fX19fKScpfSDQv9GA0L7QvNC10L3QuCDQvNC10YHQtdGH0L3QvjwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQlNC+0L/RitC70L3QuNGC0LXQu9C90L4nLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAyPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCh0KDQntCaPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjIuMS4g0JTQvtCz0L7QstC+0YDRitGCINC1INCx0LXQt9GB0YDQvtGH0LXQvSDQuCDQstC70LjQt9CwINCyINGB0LjQu9CwINC+0YIgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPi48L3A+CiAgICAgICAgPHA+Mi4yLiDQn9GA0LXQutGA0LDRgtGP0LLQsCDRgdC1INGBINC/0LjRgdC80LXQvdC+INGD0LLQtdC00L7QvNC70LXQvdC40LUg0LzQuNC90LjQvNGD0LwgPHN0cm9uZz4zMCAo0YLRgNC40LTQtdGB0LXRgik8L3N0cm9uZz4g0LTQvdC4INC/0YDQtdC00LLQsNGA0LjRgtC10LvQvdC+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDM8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KbQldCd0JAg0Jgg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+My4xLiDQnNC10YHQtdGH0L3QsNGC0LAg0YLQsNC60YHQsCDQtSA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KbQtdC90LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0YEg0LLQutC70Y7Rh9C10L3QviDQlNCU0KEuPC9wPgogICAgICAgIDxwPjMuMi4g0J/Qu9Cw0YnQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNC+IDxzdHJvbmc+NS3RgtC+INGH0LjRgdC70L48L3N0cm9uZz4g0L3QsCDRgtC10LrRg9GJ0LjRjyDQvNC10YHQtdGGINC/0L4g0LHQsNC90LrQvtCyINC/0YrRgi48L3A+CiAgICAgICAgPHA+My4zLiDQpdC+0YHRgtC40L3Qs9GK0YIg0LU6ICR7Zign0KXQvtGB0YLQuNC90LMnLCfilqEg0LLQutC70Y7Rh9C10L0g0LIg0YLQsNC60YHQsNGC0LAgJm5ic3A7Jm5ic3A7IOKWoSDQvtGC0LTQtdC70L3QviDQt9Cw0L/Qu9Cw0YnQsNC9INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjycpfS48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0IOKAlCA3PC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCe0KLQk9Ce0JLQntCg0J3QntCh0KIsINCf0J7QktCV0KDQmNCi0JXQm9Cd0J7QodCiLCDQn9Cg0JXQmtCg0JDQotCv0JLQkNCd0JUsINCX0JDQmtCb0K7Qp9CY0KLQldCb0J3QnjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD40LjEuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvdC1INC90L7RgdC4INC+0YLQs9C+0LLQvtGA0L3QvtGB0YIg0LfQsCDRidC10YLQuCwg0L/RgNC40YfQuNC90LXQvdC4INC+0YIg0LDRgtCw0LrQuCwg0YXQvtGB0YLQuNC90LMg0YHRgNC40LLQvtCy0LUg0LjQu9C4INGC0YDQtdGC0Lgg0LvQuNGG0LAuPC9wPgogICAgICAgIDxwPjQuMi4g0KHRgtGA0LDQvdC40YLQtSDQv9Cw0LfRj9GCINC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC90LAg0LTQvtGB0YLRitC/0LjRgtC1INC4INGC0LXRhdC90LjRh9C10YHQutCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjy48L3A+CiAgICAgICAgPHA+NS4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQutGA0LDRgtC10L0g0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1INC40LvQuCDRgSAzMC3QtNC90LXQstC90L4g0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1LjwvcD4KICAgICAgICA8cD42LjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDQtSDRgdGK0YHRgtCw0LLQtdC9INCyINC00LLQsCDQtdC60LfQtdC80L/Qu9GP0YDQsC4g0JfQsCDQvdC10YPRgNC10LTQtdC90LjRgtC1INCy0YrQv9GA0L7RgdC4INGB0LUg0L/RgNC40LvQsNCz0LAg0LfQsNC60L7QvdC+0LTQsNGC0LXQu9GB0YLQstC+0YLQviDQvdCwINCg0JEuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBzdWJjb250cmFjdG9yOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQn9Ce0JTQmNCX0J/QqtCb0J3QldCd0JjQlScsICdXVC3Qn9Ce0JQnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmZmYzY2Q7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hbWJlcikiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCT0LvQsNCy0LXQvSDQuNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC7JywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQlNCc0JXQojwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD7Qk9C70LDQstC90LjRj9GCINC40LfQv9GK0LvQvdC40YLQtdC7INCy0YrQt9C70LDQs9CwINC90LAg0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRjyDRgdC70LXQtNC90LjRgtC1INC00LXQudC90L7RgdGC0Lg6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cj0YHQu9GD0LPQsCAxJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cj0YHQu9GD0LPQsCAyJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cj0YHQu9GD0LPQsCAzJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxwPtCyINGA0LDQvNC60LjRgtC1INC90LAg0L/RgNC+0LXQutGCOiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0J/RgNC+0LXQutGCJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDI8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KHQoNCe0Jo8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+Mi4xLiDQodGA0L7QuiDQvdCwINC40LfQv9GK0LvQvdC10L3QuNC1OiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRgNC+0LonLCdfXyAoX19fX18pJyl9PC9zdHJvbmc+INGA0LDQsdC+0YLQvdC4INC00L3QuCDQvtGCINC/0L7QtNC/0LjRgdCy0LDQvdC10YLQvi48L3A+CiAgICAgICAgPHA+Mi4yLiDQn9GA0Lgg0LfQsNCx0LDQstGP0L3QtSwg0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGD0LLQtdC00L7QvNGP0LLQsCDQvdC10LfQsNCx0LDQstC90L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMzwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QktCq0JfQndCQ0JPQoNCQ0JbQlNCV0J3QmNCVPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjMuMS4g0JLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtdGC0L4g0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YPQvNCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4uPC9wPgogICAgICAgIDxwPjMuMi4g0J/Qu9Cw0YnQsNC90LU6ICR7Zign0JPRgNCw0YTQuNC6INC/0LvQsNGJ0LDQvdC1Jywn4pahINC10LTQvdC+0LrRgNCw0YLQvdC+INC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUgJm5ic3A7Jm5ic3A7IOKWoSA1MCUg0LDQstCw0L3RgSArIDUwJSDQv9GA0Lgg0L/RgNC10LTQsNCy0LDQvdC1Jyl9LjwvcD4KICAgICAgICA8cD4zLjMuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQuNC30LTQsNCy0LAg0YTQsNC60YLRg9GA0LAv0YDQsNC30L/QuNGB0LrQsCDQt9CwINC/0L7Qu9GD0YfQtdC90LDRgtCwINGB0YPQvNCwLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDQ8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QntCS0JXQoNCY0KLQldCb0J3QntCh0KIg0Jgg0J3QmtCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjQuMS4g0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGB0LUg0LfQsNC00YrQu9C20LDQstCwINC00LAg0L/QsNC30Lgg0L/QvtCy0LXRgNC40YLQtdC70L3QvtGB0YIg0L7RgtC90L7RgdC90L4g0LrQu9C40LXQvdGC0LjRgtC1LCDQv9GA0L7QtdC60YLQuNGC0LUg0Lgg0YLRitGA0LPQvtCy0YHQutCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvdCwINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCULjwvcD4KICAgICAgICA8cD40LjIuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvdC1INC60L7QvdGC0LDQutGC0YPQstCwINC00LjRgNC10LrRgtC90L4g0YEg0LrQu9C40LXQvdGC0LjRgtC1INC90LAg0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQg0LHQtdC3INC40LfRgNC40YfQvdC+INGA0LDQt9GA0LXRiNC10L3QuNC1LjwvcD4KICAgICAgICA8cD40LjMuINCX0LDQsdGA0LDQvdCw0YLQsCDQtSDQsiDRgdC40LvQsCDQt9CwINC/0LXRgNC40L7QtCDQvtGCIDxzdHJvbmc+MjQgKNC00LLQsNC00LXRgdC10YIg0Lgg0YfQtdGC0LjRgNC4KTwvc3Ryb25nPiDQvNC10YHQtdGG0LAg0YHQu9C10LQg0L/RgNC10LrRgNCw0YLRj9Cy0LDQvdC1INC90LAg0YHRitGC0YDRg9C00L3QuNGH0LXRgdGC0LLQvtGC0L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNTwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QmNCd0KLQldCb0JXQmtCi0KPQkNCb0J3QkCDQodCe0JHQodCi0JLQldCd0J7QodCiINCYINCf0KDQldCU0JDQktCQ0J3QlTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD41LjEuINCS0YHQuNGH0LrQuCDRgNC10LfRg9C70YLQsNGC0Lgg0L7RgiDRgNCw0LHQvtGC0LDRgtCwINGB0LAg0YHQvtCx0YHRgtCy0LXQvdC+0YHRgiDQvdCwINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUINGB0LvQtdC0INC/0YrQu9C90L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvcD4KICAgICAgICA8cD41LjIuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNCw0LLQsCDRgNCw0LHQvtGC0LDRgtCwINC30LDQtdC00L3QviDRgSDQstGB0LjRh9C60Lgg0LjQt9GF0L7QtNC90Lgg0YTQsNC50LvQvtCy0LUsINC00L7RgdGC0YrQv9C4INC4INC00L7QutGD0LzQtdC90YLQsNGG0LjRjy48L3A+CiAgICAgICAgPHA+NS4zLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LUg0YHRitGB0YLQsNCy0LXQvSDQsiDQtNCy0LAg0LXQutC30LXQvNC/0LvRj9GA0LAuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQstGK0L/RgNC+0YHQuCDRgdC1INC/0YDQuNC70LDQs9CwINC30LDQutC+0L3QvtC00LDRgtC10LvRgdGC0LLQvtGC0L4g0L3QsCDQoNCRLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgY29tcGxleDogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9Ca0J7QnNCf0JvQldCa0KHQldCdINCU0J7Qk9Ce0JLQntCgJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgJHtjb21tb25TZWN0aW9ucyhgCiAgICAgIDxwPjxzdHJvbmc+SS4g0JjQt9GA0LDQsdC+0YLQutCwOjwvc3Ryb25nPjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4ke2YoJ9Ci0LjQvyDRgdCw0LnRgicsJ+KWoSDQo9C10LHRgdCw0LnRgiAmbmJzcDsmbmJzcDsg4pahINCe0L3Qu9Cw0LnQvSDQvNCw0LPQsNC30LjQvScpfSDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwICR7Zign0J/Qu9Cw0YLRhNC+0YDQvNCwJywnV29yZFByZXNzIC8gV29vQ29tbWVyY2UnKX08L2xpPgogICAgICAgIDxsaT7Qo9C90LjQutCw0LvQtdC9INC00LjQt9Cw0LnQvSwg0LDQtNCw0L/RgtC40LLQtdC9INC30LAg0LLRgdC40YfQutC4INGD0YHRgtGA0L7QudGB0YLQstCwPC9saT4KICAgICAgICA8bGk+U0VPINC+0L/RgtC40LzQuNC30LDRhtC40Y8g0Lgg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQsiBHb29nbGU8L2xpPgogICAgICA8L3VsPgogICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzdHJvbmc+SUkuINCc0LDRgNC60LXRgtC40L3QsyAo0LzQtdGB0LXRh9C90L4pOjwvc3Ryb25nPjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDRgdC+0YbQuNCw0LvQvdC4INC80YDQtdC20Lg8L2xpPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEgR29vZ2xlIEFkcyAvIEZhY2Vib29rIEFkczwvbGk+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQktC40LTQtdC+INGA0LjQudC70YHQvtCy0LUg0Lgg0YHRitC00YrRgNC20LDQvdC40LU8L2xpPgogICAgICA8L3VsPgogICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzdHJvbmc+SUlJLiDQn9C+0LTQtNGA0YrQttC60LAgKNC80LXRgdC10YfQvdC+KTo8L3N0cm9uZz48L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+Ny8yNCDQvNC+0L3QuNGC0L7RgNC40L3Qsywg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4LCDQsdC10LrRitC/0LgsINGB0LjQs9GD0YDQvdC+0YHRgjwvbGk+CiAgICAgIDwvdWw+YCl9CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7QlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0YPRgdC70L7QstC40Y88L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCc0JXQodCV0KfQndCYINCj0KHQm9Cj0JPQmDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD7QldC00L3QvtC60YDQsNGC0L3QvtGC0L4g0L/Qu9Cw0YnQsNC90LUg0LfQsCDQuNC30YDQsNCx0L7RgtC60LDRgtCwINC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmNC30YDQsNCx0L7RgtC60LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0LHQtdC3INCU0JTQoS48L3A+CiAgICAgICAgPHA+0JzQtdGB0LXRh9C90LDRgtCwINGC0LDQutGB0LAg0LfQsCDQvNCw0YDQutC10YLQuNC90LMg0Lgg0L/QvtC00LTRgNGK0LbQutCwINC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQnNC10YHQtdGH0L3QvicsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LCDRgSDQlNCU0KEsINC/0LvQsNGC0LjQvNCwINC00L4gNS3RgtC+INGH0LjRgdC70L4uPC9wPgogICAgICAgIDxwPtCc0LjQvdC40LzQsNC70LXQvSDRgdGA0L7QuiDQt9CwINC80LXRgdC10YfQvdC40YLQtSDRg9GB0LvRg9Cz0Lg6IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJzYgKNGI0LXRgdGCKScpfTwvc3Ryb25nPiDQvNC10YHQtdGG0LAuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpCn07CgpmdW5jdGlvbiBnZW5lcmF0ZUNvbnRyYWN0KCkgewogIGlmICghc2VsZWN0ZWRUeXBlKSByZXR1cm47CiAgY29uc3QgaHRtbCA9IENPTlRSQUNUU1tzZWxlY3RlZFR5cGVdKCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jJykuaW5uZXJIVE1MID0gaHRtbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0b3JQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3REb2NQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZWRpdE1vZGUgPSBmYWxzZTsKICB3aW5kb3cuc2Nyb2xsVG8oMCwwKTsKfQo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==', 'hr.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JzQvtC70LHQuCDigJQgV2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOwotLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYWNjOiM2YzYzZmY7LS1hY2MyOiNhNzhiZmE7LS1ncm46IzIyYzU1ZTstLXJlZDojZWY0NDQ0OwotLWZuOidETSBTYW5zJyxzYW5zLXNlcmlmOy0tbW86J0RNIE1vbm8nLG1vbm9zcGFjZX0KKnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS10eCk7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjI0cHggMThweH0KLndyYXB7bWF4LXdpZHRoOjExMDBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxOHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczozODBweCAxZnI7Z2FwOjE4cHh9CkBtZWRpYShtYXgtd2lkdGg6ODYwcHgpey5ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQoucGFuZWx7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoxOHB4fQoucGh7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Ci50YWJze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O21hcmdpbi1ib3R0b206MTRweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO3BhZGRpbmc6NHB4O2JvcmRlci1yYWRpdXM6MTBweH0KLnRhYntmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO2NvbG9yOnZhcigtLXR4Mil9Ci50YWIuYWN0aXZle2JhY2tncm91bmQ6dmFyKC0tc3VyKTtjb2xvcjp2YXIoLS1hY2MpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsLjA4KX0KbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbTttYXJnaW46MTBweCAwIDVweH0KaW5wdXQsc2VsZWN0LHRleHRhcmVhe3dpZHRoOjEwMCU7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4IDEycHg7CmNvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lfQppbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyl9CnRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbDttaW4taGVpZ2h0OjcwcHh9Ci5yb3cye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweH0KLmJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXItcmFkaXVzOjlweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi10b3A6MTRweH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmO3dpZHRoOjEwMCV9Ci5idG4uc3tiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2NvbG9yOnZhcigtLXR4Mik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpfQouZG9je2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjUwcHggNjBweDttaW4taGVpZ2h0OjYwMHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuOTtjb2xvcjojMTExfQouZG9jLXRvb2xiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTJweH0KLmRvYyBoMntmb250LXNpemU6MTVweDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA4ZW07bWFyZ2luLWJvdHRvbTozMHB4fQouZG9jIC50b3t0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi1ib3R0b206MjZweH0KLmRvYyAuZmllbGR7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICM4ODg7cGFkZGluZzowIDJweDtmb250LXdlaWdodDo2MDB9Ci5kb2MgcHttYXJnaW4tYm90dG9tOjE0cHh9Ci5kb2MgLnNpZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDo2MHB4fQouZG9jIC5zaWcgZGl2e2ZvbnQtc2l6ZToxMnB4O3RleHQtYWxpZ246Y2VudGVyfQouZG9jIC5zaWcgLmxpbmV7Ym9yZGVyLXRvcDoxcHggc29saWQgIzMzMzttYXJnaW4tdG9wOjM2cHg7cGFkZGluZy10b3A6NHB4O3dpZHRoOjE3MHB4fQouZG9jIC5yZXN7bWFyZ2luLXRvcDo3MHB4O2JvcmRlci10b3A6MXB4IGRhc2hlZCAjYWFhO3BhZGRpbmctdG9wOjE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU1NX0KdGFibGUubGlzdHt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweH0KdGFibGUubGlzdCB0aHt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHggMTBweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpfQp0YWJsZS5saXN0IHRke3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLmJhZGdle3BhZGRpbmc6MnB4IDlweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwfQouYmFkZ2UucGVuZGluZ3tiYWNrZ3JvdW5kOnJnYmEoMjQ1LDE1OCwxMSwuMTUpO2NvbG9yOiNiNDUzMDl9Ci5iYWRnZS5hcHByb3ZlZHtiYWNrZ3JvdW5kOnJnYmEoMzQsMTk3LDk0LC4xNSk7Y29sb3I6IzE1ODAzZH0KLmJhZGdlLnJlamVjdGVke2JhY2tncm91bmQ6cmdiYSgyMzksNjgsNjgsLjE1KTtjb2xvcjojYjkxYzFjfQoubG5re2NvbG9yOnZhcigtLWFjYyk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHg7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0KQG1lZGlhIHByaW50ewogIGJvZHl7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MH0KICAudG9wLC5ncmlkPmRpdjpmaXJzdC1jaGlsZCwuZG9jLXRvb2xiYXIsdGFibGUubGlzdCwucGgsaDEsLnN1YntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fQogIC5ncmlke2Rpc3BsYXk6YmxvY2t9CiAgLnBhbmVse2JvcmRlcjpub25lO3BhZGRpbmc6MH0KICAuZG9je3BhZGRpbmc6MjBweCAxMHB4fQp9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2PjxoMT7wn5OEINCc0L7Qu9Cx0Lg8L2gxPjxkaXYgY2xhc3M9InN1YiI+0J7RgtC/0YPRgdC6ICjQv9C70LDRgtC10L0v0L3QtdC/0LvQsNGC0LXQvSkg0Lgg0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INC30LAg0L3QsNC/0YPRgdC60LDQvdC1PC9kaXY+PC9kaXY+CiAgICA8ZGl2PjxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJsbmsiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJncmlkIj4KICAgIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgICAgPGRpdiBjbGFzcz0icGgiPtCd0L7QstCwINC80L7Qu9Cx0LA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGFicyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFiIGFjdGl2ZSIgZGF0YS10PSJsZWF2ZV9wYWlkIiBvbmNsaWNrPSJzZXRUeXBlKHRoaXMsJ2xlYXZlX3BhaWQnKSI+0J/Qu9Cw0YLQtdC9INC+0YLQv9GD0YHQujwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhYiIgZGF0YS10PSJsZWF2ZV91bnBhaWQiIG9uY2xpY2s9InNldFR5cGUodGhpcywnbGVhdmVfdW5wYWlkJykiPtCd0LXQv9C70LDRgtC10L08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YWIiIGRhdGEtdD0icmVzaWduYXRpb24iIG9uY2xpY2s9InNldFR5cGUodGhpcywncmVzaWduYXRpb24nKSI+0J/RgNC10LTQuNC30LLQtdGB0YLQuNC1PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGxhYmVsPtCY0LzQtSDQvdCwINGB0LvRg9C20LjRgtC10LvRjzwvbGFiZWw+CiAgICAgIDxpbnB1dCBpZD0iZl9uYW1lIiBwbGFjZWhvbGRlcj0i0JjQvNC1LCDQpNCw0LzQuNC70LjRjyI+CiAgICAgIDxkaXYgY2xhc3M9InJvdzIiPgogICAgICAgIDxkaXY+PGxhYmVsPtCU0LvRitC20L3QvtGB0YI8L2xhYmVsPjxpbnB1dCBpZD0iZl9wb3MiIHBsYWNlaG9sZGVyPSLQvdCw0L/RgC4g0KDQsNC30YDQsNCx0L7RgtGH0LjQuiI+PC9kaXY+CiAgICAgICAgPGRpdj48bGFiZWw+0JXQk9CdPC9sYWJlbD48aW5wdXQgaWQ9ImZfZWduIiBwbGFjZWhvbGRlcj0iKioqKioqKioqKiI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0ibGVhdmVGaWVsZHMiPgogICAgICAgIDxkaXYgY2xhc3M9InJvdzIiPgogICAgICAgICAgPGRpdj48bGFiZWw+0J7RgiDQtNCw0YLQsDwvbGFiZWw+PGlucHV0IGlkPSJmX3N0YXJ0IiB0eXBlPSJkYXRlIj48L2Rpdj4KICAgICAgICAgIDxkaXY+PGxhYmVsPtCU0L4g0LTQsNGC0LA8L2xhYmVsPjxpbnB1dCBpZD0iZl9lbmQiIHR5cGU9ImRhdGUiIG9uY2hhbmdlPSJjYWxjRGF5cygpIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8bGFiZWw+0JHRgNC+0Lkg0YDQsNCx0L7RgtC90Lgg0LTQvdC4PC9sYWJlbD4KICAgICAgICA8aW5wdXQgaWQ9ImZfZGF5cyIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIHZhbHVlPSIxIj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJyZXNpZ25GaWVsZHMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgIDxsYWJlbD7QodGA0L7QuiDQvdCwINC/0YDQtdC00LjQt9Cy0LXRgdGC0LjQtdGC0L4gKNC00L3QuCk8L2xhYmVsPgogICAgICAgIDxpbnB1dCBpZD0iZl9ub3RpY2UiIHR5cGU9Im51bWJlciIgdmFsdWU9IjMwIj4KICAgICAgICA8bGFiZWw+0J/QvtGB0LvQtdC00LXQvSDRgNCw0LHQvtGC0LXQvSDQtNC10L08L2xhYmVsPgogICAgICAgIDxpbnB1dCBpZD0iZl9sYXN0ZGF5IiB0eXBlPSJkYXRlIj4KICAgICAgPC9kaXY+CgogICAgICA8bGFiZWw+0J7RgdC90L7QstCw0L3QuNC1IC8g0LHQtdC70LXQttC60LAgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPgogICAgICA8dGV4dGFyZWEgaWQ9ImZfcmVhc29uIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuINC90LAg0L7RgdC90L7QstCw0L3QuNC1INGH0LsuIDE1NSDQvtGCINCa0KIiPjwvdGV4dGFyZWE+CgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic2F2ZVJlcXVlc3QoKSI+8J+SviDQl9Cw0L/QsNC30Lgg0Lgg0LPQtdC90LXRgNC40YDQsNC5PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzIiBzdHlsZT0id2lkdGg6MTAwJSIgb25jbGljaz0ibG9hZExpc3QoKSI+4oa7INCe0LHQvdC+0LLQuCDRgdC/0LjRgdGK0LrQsDwvYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0icGgiIHN0eWxlPSJtYXJnaW4tdG9wOjIycHgiPtCY0YHRgtC+0YDQuNGPPC9kaXY+CiAgICAgIDx0YWJsZSBjbGFzcz0ibGlzdCIgaWQ9Imxpc3RUYmwiPjx0Ym9keT48dHI+PHRkPtCX0LDRgNC10LbQtNCw4oCmPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgICAgPGRpdiBjbGFzcz0iZG9jLXRvb2xiYXIiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+8J+WqO+4jyDQn9GA0LjQvdGC0LjRgNCw0LkgLyBQREY8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRvYyIgaWQ9ImRvY1ZpZXciPjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwp2YXIgQVBJPShmdW5jdGlvbigpewogIHZhciBzYXZlZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3RfYXBpJyk7CiAgaWYoc2F2ZWQpcmV0dXJuIHNhdmVkOwogIHZhciBiYXNlPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL2hyXC5odG1sJC8sJycpLnJlcGxhY2UoL1wvJC8sJycpOwogIHJldHVybiBiYXNlKycvYXBpLnBocCc7Cn0pKCk7CnZhciBDVT0oZnVuY3Rpb24oKXt0cnl7dmFyIHM9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnd3RfcycpO3JldHVybiBzP0pTT04ucGFyc2Uocyk6bnVsbDt9Y2F0Y2goZSl7cmV0dXJuIG51bGw7fX0pKCk7CnZhciBjdXJUeXBlPSdsZWF2ZV9wYWlkJzsKCmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSxleHRyYSl7CiAgbWV0aG9kPW1ldGhvZHx8J0dFVCc7ZXh0cmE9ZXh0cmF8fCcnOwogIHRyeXsKICAgIHZhciBvPXttZXRob2Q6bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319OwogICAgaWYoYm9keSlvLmJvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249JythY3Rpb24rZXh0cmEsbyk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpO3JldHVybiBudWxsO30KfQoKZnVuY3Rpb24gc2V0VHlwZShlbCx0KXsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh4PT54LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTsKICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICBjdXJUeXBlPXQ7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlYXZlRmllbGRzJykuc3R5bGUuZGlzcGxheSA9IHQ9PT0ncmVzaWduYXRpb24nID8gJ25vbmUnOidibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2lnbkZpZWxkcycpLnN0eWxlLmRpc3BsYXkgPSB0PT09J3Jlc2lnbmF0aW9uJyA/ICdibG9jayc6J25vbmUnOwogIHJlbmRlckRvYygpOwp9CgpmdW5jdGlvbiBjYWxjRGF5cygpewogIHZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3N0YXJ0JykudmFsdWUsIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfZW5kJykudmFsdWU7CiAgaWYocyYmZSl7CiAgICB2YXIgZDE9bmV3IERhdGUocyksIGQyPW5ldyBEYXRlKGUpOwogICAgdmFyIGRpZmY9TWF0aC5yb3VuZCgoZDItZDEpLzg2NDAwMDAwKSsxOwogICAgaWYoZGlmZj4wKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9kYXlzJykudmFsdWU9ZGlmZjsKICB9CiAgcmVuZGVyRG9jKCk7Cn0KCmZ1bmN0aW9uIGZtdERhdGUocyl7CiAgaWYoIXMpcmV0dXJuICdfXy5fXy5fX19fJzsKICB2YXIgZD1uZXcgRGF0ZShzKydUMDA6MDA6MDAnKTsKICByZXR1cm4gU3RyaW5nKGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCcwJykrJy4nK1N0cmluZyhkLmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpKycuJytkLmdldEZ1bGxZZWFyKCk7Cn0KCmZ1bmN0aW9uIGNvbGxlY3QoKXsKICByZXR1cm4gewogICAgdHlwZTpjdXJUeXBlLAogICAgZW1wbG95ZWVfbmFtZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9uYW1lJykudmFsdWV8fCdfX19fX19fX19fX19fX19fJywKICAgIHBvc2l0aW9uOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3BvcycpLnZhbHVlfHwnJywKICAgIGVnbjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9lZ24nKS52YWx1ZXx8JycsCiAgICBzdGFydF9kYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3N0YXJ0JykudmFsdWV8fCcnLAogICAgZW5kX2RhdGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfZW5kJykudmFsdWV8fCcnLAogICAgZGF5czpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9kYXlzJykudmFsdWV8fDEsCiAgICBub3RpY2VfZGF5czpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9ub3RpY2UnKT9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9ub3RpY2UnKS52YWx1ZTozMCwKICAgIGxhc3Rfd29ya19kYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2xhc3RkYXknKT9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9sYXN0ZGF5JykudmFsdWU6JycsCiAgICByZWFzb246ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfcmVhc29uJykudmFsdWV8fCcnCiAgfTsKfQoKZnVuY3Rpb24gcmVuZGVyRG9jKCl7CiAgdmFyIGQ9Y29sbGVjdCgpOwogIHZhciB0b2RheT1mbXREYXRlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSk7CiAgdmFyIGh0bWw9Jyc7CiAgaWYoZC50eXBlPT09J2xlYXZlX3BhaWQnfHxkLnR5cGU9PT0nbGVhdmVfdW5wYWlkJyl7CiAgICB2YXIgYmFzaXMgPSBkLnR5cGU9PT0nbGVhdmVfcGFpZCcgPyAn0YfQuy4gMTU1INC+0YIg0JrQvtC00LXQutGB0LAg0L3QsCDRgtGA0YPQtNCwJyA6ICfRh9C7LiAxNjAsINCw0LsuIDEg0L7RgiDQmtC+0LTQtdC60YHQsCDQvdCwINGC0YDRg9C00LAnOwogICAgdmFyIGtpbmQgPSBkLnR5cGU9PT0nbGVhdmVfcGFpZCcgPyAn0L/Qu9Cw0YLQtdC9INCz0L7QtNC40YjQtdC9INC+0YLQv9GD0YHQuicgOiAn0L3QtdC/0LvQsNGC0LXQvSDQvtGC0L/Rg9GB0LonOwogICAgaHRtbCArPSAnPGgyPtCc0L7Qu9Cx0LAg0LfQsCDQv9C+0LvQt9Cy0LDQvdC1INC90LAgJytraW5kKyc8L2gyPic7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ0byI+0JTQviDQo9C/0YDQsNCy0LjRgtC10LvRjzxicj7QvdCwINCj0LXQsdGC0YDQuNC60YHQuNCwINCV0J7QntCUPC9kaXY+JzsKICAgIGh0bWwgKz0gJzxwPjxiPtCc0J7Qm9CR0JA8L2I+PC9wPic7CiAgICBodG1sICs9ICc8cD7QvtGCIDxzcGFuIGNsYXNzPSJmaWVsZCI+JytkLmVtcGxveWVlX25hbWUrJzwvc3Bhbj4nKyhkLnBvc2l0aW9uPycsINC90LAg0LTQu9GK0LbQvdC+0YHRgiA8c3BhbiBjbGFzcz0iZmllbGQiPicrZC5wb3NpdGlvbisnPC9zcGFuPic6JycpKyhkLmVnbj8nLCDQldCT0J0gPHNwYW4gY2xhc3M9ImZpZWxkIj4nK2QuZWduKyc8L3NwYW4+JzonJykrJzwvcD4nOwogICAgaHRtbCArPSAnPHA+0JzQvtC70Y8g0LTQsCDQvNC4INCx0YrQtNC1INGA0LDQt9GA0LXRiNC10L3QviDQtNCwINC/0L7Qu9C30LLQsNC8IDxzcGFuIGNsYXNzPSJmaWVsZCI+JytkLmRheXMrJzwvc3Bhbj4g0YDQsNCx0L7RgtC90Lgg0LTQvdC4ICcra2luZCsKICAgICAgJywg0L3QsCDQvtGB0L3QvtCy0LDQvdC40LUgJytiYXNpcysnLCDRgdGH0LjRgtCw0L3QviDQvtGCIDxzcGFuIGNsYXNzPSJmaWVsZCI+JytmbXREYXRlKGQuc3RhcnRfZGF0ZSkrJzwvc3Bhbj4g0LTQviA8c3BhbiBjbGFzcz0iZmllbGQiPicrZm10RGF0ZShkLmVuZF9kYXRlKSsnPC9zcGFuPiDQstC60LsuPC9wPic7CiAgICBpZihkLnJlYXNvbikgaHRtbCArPSAnPHA+0J7RgdC90L7QstCw0L3QuNC1L9Cx0LXQu9C10LbQutCwOiAnK2QucmVhc29uKyc8L3A+JzsKICAgIGh0bWwgKz0gJzxwPtCU0LDRgtCwOiAnK3RvZGF5Kycg0LMuPC9wPic7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzaWciPjxkaXY+PGRpdiBjbGFzcz0ibGluZSI+0J/QvtC00L/QuNGBINC90LAg0YHQu9GD0LbQuNGC0LXQu9GPPC9kaXY+PC9kaXY+PGRpdj48ZGl2IGNsYXNzPSJsaW5lIj7QodGK0LPQu9Cw0YHRg9Cy0LDQuyAvINCY0LfQs9C+0YLQstC40Ls8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icmVzIj7QoNC10LfQvtC70Y7RhtC40Y86Jm5ic3A7Jm5ic3A74piQINCe0LTQvtCx0YDQtdC90LAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDvimJAg0J7RgtC60LDQt9Cw0L3QsCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO9CU0LDRgtCwOiBfX19fX19fX19fJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A70J/QvtC00L/QuNGBOiBfX19fX19fX19fPC9kaXY+JzsKICB9IGVsc2UgewogICAgaHRtbCArPSAnPGgyPtCf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSDQt9CwINC/0YDQtdC60YDQsNGC0Y/QstCw0L3QtSDQvdCwINGC0YDRg9C00L7QstC+INC/0YDQsNCy0L7QvtGC0L3QvtGI0LXQvdC40LU8L2gyPic7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ0byI+0JTQviDQo9C/0YDQsNCy0LjRgtC10LvRjzxicj7QvdCwINCj0LXQsdGC0YDQuNC60YHQuNCwINCV0J7QntCUPC9kaXY+JzsKICAgIGh0bWwgKz0gJzxwPjxiPtCf0KDQldCU0JjQl9CS0JXQodCi0JjQlTwvYj48L3A+JzsKICAgIGh0bWwgKz0gJzxwPtC+0YIgPHNwYW4gY2xhc3M9ImZpZWxkIj4nK2QuZW1wbG95ZWVfbmFtZSsnPC9zcGFuPicrKGQucG9zaXRpb24/Jywg0L3QsCDQtNC70YrQttC90L7RgdGCIDxzcGFuIGNsYXNzPSJmaWVsZCI+JytkLnBvc2l0aW9uKyc8L3NwYW4+JzonJykrKGQuZWduPycsINCV0JPQnSA8c3BhbiBjbGFzcz0iZmllbGQiPicrZC5lZ24rJzwvc3Bhbj4nOicnKSsnPC9wPic7CiAgICBodG1sICs9ICc8cD7QndCwINC+0YHQvdC+0LLQsNC90LjQtSDRh9C7LiAzMjYg0L7RgiDQmtC+0LTQtdC60YHQsCDQvdCwINGC0YDRg9C00LAsINC+0YLQv9GA0LDQstGP0Lwg0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INC30LAg0L/RgNC10LrRgNCw0YLRj9Cy0LDQvdC1INC90LAg0YLRgNGD0LTQvtCy0L7RgtC+INC80Lgg0L/RgNCw0LLQvtC+0YLQvdC+0YjQtdC90LjQtSAnKwogICAgICAn0YHRitGBINGB0YDQvtC6INC90LAg0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INC+0YIgPHNwYW4gY2xhc3M9ImZpZWxkIj4nK2Qubm90aWNlX2RheXMrJzwvc3Bhbj4g0LTQvdC4LjwvcD4nOwogICAgaHRtbCArPSAnPHA+0J/QvtGB0LvQtdC00LXQvSDRgNCw0LHQvtGC0LXQvSDQtNC10L06IDxzcGFuIGNsYXNzPSJmaWVsZCI+JytmbXREYXRlKGQubGFzdF93b3JrX2RhdGUpKyc8L3NwYW4+LjwvcD4nOwogICAgaWYoZC5yZWFzb24pIGh0bWwgKz0gJzxwPtCe0YHQvdC+0LLQsNC90LjQtS/QsdC10LvQtdC20LrQsDogJytkLnJlYXNvbisnPC9wPic7CiAgICBodG1sICs9ICc8cD7QlNCw0YLQsDogJyt0b2RheSsnINCzLjwvcD4nOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2lnIj48ZGl2PjxkaXYgY2xhc3M9ImxpbmUiPtCf0L7QtNC/0LjRgSDQvdCwINGB0LvRg9C20LjRgtC10LvRjzwvZGl2PjwvZGl2PjxkaXY+PGRpdiBjbGFzcz0ibGluZSI+0J/RgNC40LXQuyAvINCg0LDQsdC+0YLQvtC00LDRgtC10Ls8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icmVzIj7QoNC10LfQvtC70Y7RhtC40Y86Jm5ic3A7Jm5ic3A74piQINCf0YDQuNC10YLQviZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO9CU0LDRgtCwINC90LAg0L/RgNC10LrRgNCw0YLRj9Cy0LDQvdC1OiBfX19fX19fX19fJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A70J/QvtC00L/QuNGBOiBfX19fX19fX19fPC9kaXY+JzsKICB9CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY1ZpZXcnKS5pbm5lckhUTUw9aHRtbDsKfQoKWydmX25hbWUnLCdmX3BvcycsJ2ZfZWduJywnZl9zdGFydCcsJ2ZfcmVhc29uJywnZl9ub3RpY2UnLCdmX2xhc3RkYXknLCdmX2RheXMnXS5mb3JFYWNoKGlkPT57CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICBpZihlbCkgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLHJlbmRlckRvYyk7Cn0pOwoKYXN5bmMgZnVuY3Rpb24gc2F2ZVJlcXVlc3QoKXsKICB2YXIgZD1jb2xsZWN0KCk7CiAgdmFyIHI9YXdhaXQgYWYoJ2hyX3JlcXVlc3RzJywnUE9TVCcsZCk7CiAgaWYocil7IGFsZXJ0KCfQnNC+0LvQsdCw0YLQsCDQtSDQt9Cw0L/QsNC30LXQvdCwLicpOyBsb2FkTGlzdCgpOyB9CiAgZWxzZSBhbGVydCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBIOKAlCDQv9GA0L7QstC10YDQuCDQstGA0YrQt9C60LDRgtCwINGBIEFQSSAobG9jYWxTdG9yYWdlIHd0X2FwaSkuJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGxvYWRMaXN0KCl7CiAgdmFyIHJvd3M9YXdhaXQgYWYoJ2hyX3JlcXVlc3RzJyk7CiAgdmFyIHRibD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlzdFRibCcpOwogIGlmKCFyb3dzfHwhcm93cy5sZW5ndGgpeyB0YmwuaW5uZXJIVE1MPSc8dHI+PHRkIHN0eWxlPSJjb2xvcjp2YXIoLS10eDMpIj7QndGP0LzQsCDQt9Cw0L/QuNGB0Lg8L3RkPjwvdHI+JzsgcmV0dXJuOyB9CiAgdmFyIGxhYmVscz17bGVhdmVfcGFpZDon0J/Qu9Cw0YLQtdC9INC+0YLQv9GD0YHQuicsbGVhdmVfdW5wYWlkOifQndC10L/Qu9Cw0YLQtdC9INC+0YLQv9GD0YHQuicscmVzaWduYXRpb246J9Cf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSd9OwogIHZhciBodG1sPSc8dGhlYWQ+PHRyPjx0aD7QodC70YPQttC40YLQtdC7PC90aD48dGg+0JLQuNC0PC90aD48dGg+0KHRgtCw0YLRg9GBPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgcm93cy5mb3JFYWNoKHI9PnsKICAgIGh0bWwrPSc8dHI+PHRkPicrci5lbXBsb3llZV9uYW1lKyc8L3RkPjx0ZD4nKyhsYWJlbHNbci50eXBlXXx8ci50eXBlKSsnPC90ZD48dGQ+PHNwYW4gY2xhc3M9ImJhZGdlICcrci5zdGF0dXMrJyI+JytyLnN0YXR1cysnPC9zcGFuPjwvdGQ+JysKICAgICAgJzx0ZCBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo0cHgiPicrCiAgICAgIChyLnN0YXR1cyE9PSdhcHByb3ZlZCc/JzxzcGFuIGNsYXNzPSJsbmsiIHN0eWxlPSJjb2xvcjojMTU4MDNkIiBvbmNsaWNrPSJzZXRTdGF0dXMoXCcnK3IuaWQrJ1wnLFwnYXBwcm92ZWRcJykiPuKckyDQntC00L7QsdGA0Lg8L3NwYW4+JzonJykrCiAgICAgIChyLnN0YXR1cyE9PSdyZWplY3RlZCc/JzxzcGFuIGNsYXNzPSJsbmsiIHN0eWxlPSJjb2xvcjojYjkxYzFjIiBvbmNsaWNrPSJzZXRTdGF0dXMoXCcnK3IuaWQrJ1wnLFwncmVqZWN0ZWRcJykiPuKclSDQntGC0LrQsNC20Lg8L3NwYW4+JzonJykrCiAgICAgICc8L3RkPjwvdHI+JzsKICB9KTsKICBodG1sKz0nPC90Ym9keT4nOwogIHRibC5pbm5lckhUTUw9aHRtbDsKfQoKYXN5bmMgZnVuY3Rpb24gc2V0U3RhdHVzKGlkLHN0YXR1cyl7CiAgdmFyIHdobz0oQ1UmJkNVLm5hbWUpP0NVLm5hbWU6J0FkbWluJzsKICB2YXIgcj1hd2FpdCBhZignaHJfcmVxdWVzdF9zdGF0dXMnLCdQT1NUJyx7aWQ6aWQsc3RhdHVzOnN0YXR1cyxhcHByb3ZlZF9ieTp3aG99KTsKICBpZihyIT09bnVsbCl7IGxvYWRMaXN0KCk7IH0KICBlbHNlIGFsZXJ0KCfQk9GA0LXRiNC60LAg0L/RgNC4INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRgtCw0YLRg9GB0LAuJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1vZHVsZUd1YXJkKGtleSxsYWJlbCl7CiAgdHJ5ewogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZihyICYmIChyLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5saWNlbnNlX3N0YXRlPT09J2ludmFsaWQnKSl7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDgwcHg7bWFyZ2luOjgwcHggYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO2NvbG9yOiM0YTRhNmEiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+UkjwvZGl2PjxoMj7QpdGK0LHRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+Jysoci5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihyICYmIHIubW9kdWxlc19lbmFibGVkICYmIHIubW9kdWxlc19lbmFibGVkLmhhc093blByb3BlcnR5KGtleSkgJiYgIXIubW9kdWxlc19lbmFibGVkW2tleV0pewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uINCh0LLRitGA0LbQuCDRgdC1INGBINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuPC9wPicrCiAgICAgICAgJzxhIGhyZWY9ImluZGV4Lmh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjE2cHg7Y29sb3I6IzZjNjNmZiI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH1jYXRjaChlKXt9CiAgcmV0dXJuIHRydWU7Cn0KCm1vZHVsZUd1YXJkKCdocl9yZXF1ZXN0cycsJ9Cc0L7Qu9Cx0LjRgtC1JykudGhlbihmdW5jdGlvbihvayl7IGlmKG9rKXsgcmVuZGVyRG9jKCk7IGxvYWRMaXN0KCk7IH0gfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'hubs.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J/QsNGA0YLQvdGM0L7RgNGB0LrQuCDRhdGK0LHQvtCy0LUg4oCUIFdlYnRyaXhpYSBIdWI8L3RpdGxlPgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PURNK1NhbnM6d2dodEAzMDA7NDAwOzUwMDs2MDAmZmFtaWx5PURNK01vbm86d2dodEA0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdHstLWJnOiNmMGYwZjg7LS1zdXI6I2ZmZjstLXN1cjI6I2Y1ZjVmYzstLXN1cjM6I2VhZWFmNTstLWJyZDpyZ2JhKDAsMCwwLC4wOCk7LS10eDojMWExYTJlOy0tdHgyOiM0YTRhNmE7LS10eDM6Izg4ODhhYTsKLS1hY2M6IzZjNjNmZjstLWdybjojMjJjNTVlOy0tZ2RpbTpyZ2JhKDM0LDE5Nyw5NCwuMTQpOy0tcmVkOiNlZjQ0NDQ7LS1yZGltOnJnYmEoMjM5LDY4LDY4LC4xNCk7LS1hbWI6I2Y1OWUwYjstLWFkaW06cmdiYSgyNDUsMTU4LDExLC4xNCk7LS1mbjonRE0gU2Fucycsc2Fucy1zZXJpZjstLW1vOidETSBNb25vJyxtb25vc3BhY2V9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTp2YXIoLS1mbik7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tdHgpO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoyMnB4IDE4cHggNjBweH0KLndyYXB7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmxua3tjb2xvcjp2YXIoLS1hY2MpO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMnB4fQouc3RhdGdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwxZnIpO2dhcDoxNHB4O21hcmdpbi1ib3R0b206MTZweH0KQG1lZGlhKG1heC13aWR0aDo4NjBweCl7LnN0YXRncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpfX0KLnN0YXRjYXJke2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweH0KLnN0YXRjYXJkIC5sYmx7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW19Ci5zdGF0Y2FyZCBie2ZvbnQtc2l6ZToyMnB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo0cHh9Ci5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjEycHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KLnB0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmfQouYnRuLnN7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmJ0bi5ke2JhY2tncm91bmQ6dmFyKC0tcmRpbSk7Y29sb3I6dmFyKC0tcmVkKX0KLmJ0bi5ne2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZH0KLmJ0bi5he2JhY2tncm91bmQ6dmFyKC0tYWRpbSk7Y29sb3I6I2I0NTMwOX0KdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEyLjVweH0KdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4IDlweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO3doaXRlLXNwYWNlOm5vd3JhcH0KdGR7cGFkZGluZzo5cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHNlbGVjdHt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweCAxMnB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lfQppbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyl9Ci5yb3cze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjEwcHh9Ci5yb3c0e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MS4yZnIgMS42ZnIgMS40ZnIgLjhmcjtnYXA6MTBweH0KQG1lZGlhKG1heC13aWR0aDo4NjBweCl7LnJvdzMsLnJvdzR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19Ci5kb3R7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjZweH0KLmRvdC5va3tiYWNrZ3JvdW5kOnZhcigtLWdybil9LmRvdC5lcnJ7YmFja2dyb3VuZDp2YXIoLS1yZWQpfQoubW9kY2hpcHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46M3B4IDRweCAwIDA7cGFkZGluZzo2cHggMTFweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCl9Ci5tb2RjaGlwLm9ue2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZDtib3JkZXItY29sb3I6cmdiYSgzNCwxOTcsOTQsLjMpfQoubW9kY2hpcC5vZmZ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDMpfQouYmFkZ2V7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfQouYmFkZ2Uub2t7YmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjojMTU4MDNkfQouYmFkZ2Uub3ZlcmR1ZXtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOiNiOTFjMWN9Ci5iYWRnZS5zdG9wcGVke2JhY2tncm91bmQ6dmFyKC0tc3VyMyk7Y29sb3I6dmFyKC0tdHgzKX0KLnNtYWxse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myl9Ci5odWJjYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTRweDtiYWNrZ3JvdW5kOnZhcigtLXN1cil9Ci50b2FzdHtwb3NpdGlvbjpmaXhlZDtib3R0b206MjBweDtyaWdodDoyMHB4O2JhY2tncm91bmQ6IzFhMWEyZTtjb2xvcjojZmZmO3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTNweDtkaXNwbGF5Om5vbmU7ei1pbmRleDoxMjAwfQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2PjxoMT7wn4+iINCf0LDRgNGC0L3RjNC+0YDRgdC60Lgg0YXRitCx0L7QstC1PC9oMT48ZGl2IGNsYXNzPSJzdWIiPtCa0LvQuNC10L3RgtC4INGBINGF0YrQsSDCtyDQtNC40YHRgtCw0L3RhtC40L7QvdC90Lgg0LzQvtC00YPQu9C4IMK3INC80LXRgdC10YfQvdC4INCw0LHQvtC90LDQvNC10L3RgtC4PC9kaXY+PC9kaXY+CiAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0ibG5rIj7ihpAg0J7QsdGA0LDRgtC90L4g0LrRitC8IEh1YjwvYT4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic3RhdGdyaWQiIGlkPSJzdGF0cyI+PC9kaXY+CgogIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgIDxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JTQvtCx0LDQstC4INC60LvQuNC10L3RgtGB0LrQuCDRhdGK0LE8L2Rpdj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJvdzQiPgogICAgICA8ZGl2PjxsYWJlbD7QmNC80LUg0L3QsCDQutC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0iaF9uYW1lIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuINCh0YLRgNC+0Lkg0JjQvdCy0LXRgdGCINCV0J7QntCUIj48L2Rpdj4KICAgICAgPGRpdj48bGFiZWw+VVJMINC90LAg0YXRitCx0LA8L2xhYmVsPjxpbnB1dCBpZD0iaF91cmwiIHBsYWNlaG9sZGVyPSJodHRwczovL2h1Yi5rbGllbnQuY29tIj48L2Rpdj4KICAgICAgPGRpdj48bGFiZWw+TGljZW5zZSBrZXkgKNC+0YIg0YLRj9GF0L3QsNGC0LAg0LjQvdGB0YLQsNC70LDRhtC40Y8pPC9sYWJlbD48aW5wdXQgaWQ9Imhfa2V5IiBwbGFjZWhvbGRlcj0i0LrQu9GO0YfRitGCINC+0YIgd19odWJfaW5zdGFsbCI+PC9kaXY+CiAgICAgIDxkaXY+PGxhYmVsPiZuYnNwOzwvbGFiZWw+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJ3aWR0aDoxMDAlIiBvbmNsaWNrPSJhZGRIdWIoKSI+KyDQlNC+0LHQsNCy0Lg8L2J1dHRvbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPHAgY2xhc3M9InNtYWxsIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPtCa0LvRjtGH0YrRgiDRgdC1INC/0L7QutCw0LfQstCwINCyINC60YDQsNGPINC90LAg0LjQvdGB0YLQsNC70LDRhtC40Y/RgtCwINC40LwgKNC40LvQuCDQsiDRgtGP0YXQvdCw0YLQsCDRgtCw0LHQu9C40YbQsCBicmFuZGluZ19zZXR0aW5ncyDihpIgbGljZW5zZV9rZXkpLiDQoSDQvdC10LPQviDQstC60LvRjtGH0LLQsNGIL9C40LfQutC70Y7Rh9Cy0LDRiCDQvNC+0LTRg9C70LjRgtC1INC40Lwg0LTQuNGB0YLQsNC90YbQuNC+0L3QvdC+LjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFuZWwiIGlkPSJvdmVyZHVlUGFuZWwiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgPGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0IiBzdHlsZT0iY29sb3I6I2I5MWMxYyI+4pqg77iPINCf0YDQvtGB0YDQvtGH0LXQvdC4INC/0LvQsNGJ0LDQvdC40Y88L2Rpdj48L2Rpdj4KICAgIDx0YWJsZSBpZD0ib3ZlcmR1ZVRibCI+PC90YWJsZT4KICA8L2Rpdj4KCiAgPGRpdiBpZD0iaHViTGlzdCI+PC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZClyZXR1cm4gc2F2ZWQ7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaHVic1wuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTsKICByZXR1cm4gYmFzZSsnL2FwaS5waHAnOwp9KSgpOwphc3luYyBmdW5jdGlvbiBhZihhY3Rpb24sbWV0aG9kLGJvZHkscXMpewogIG1ldGhvZD1tZXRob2R8fCdHRVQnO3FzPXFzfHwnJzsKICB0cnl7CiAgICB2YXIgbz17bWV0aG9kOm1ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9fTsKICAgIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogICAgdmFyIHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK3FzLG8pOwogICAgdmFyIGo9YXdhaXQgci5qc29uKCk7CiAgICByZXR1cm4gai5vaz97b2s6dHJ1ZSxkYXRhOmouZGF0YX06e29rOmZhbHNlLGVycm9yOmouZXJyb3J9OwogIH1jYXRjaChlKXtyZXR1cm4ge29rOmZhbHNlLGVycm9yOmUubWVzc2FnZX07fQp9CmZ1bmN0aW9uIHRvYXN0KG0pe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdCcpO3QudGV4dENvbnRlbnQ9bTt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gbW9uZXkobixjKXtyZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnKyhjfHwnRVVSJyk7fQpmdW5jdGlvbiBlc2Mocyl7cmV0dXJuIChzPT1udWxsPycnOlN0cmluZyhzKSkucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLyIvZywnJnF1b3Q7Jyk7fQoKdmFyIE1PRFVMRV9MQUJFTFM9e3Byb2plY3RzOifQn9GA0L7QtdC60YLQuCcsY2xpZW50czon0JrQu9C40LXQvdGC0LgnLGZpbmFuY2U6J9Ck0LjQvdCw0L3RgdC4Jyx0YXNrczon0JfQsNC00LDRh9C4JyxvZmZlcnM6J9Ce0YTQtdGA0YLQuCcsCiAgY29udHJhY3RzOifQlNC+0LPQvtCy0L7RgNC4Jyxob3N0aW5nOifQpdC+0YHRgtC40L3Qs9C4JyxwYXNzd29yZHM6J9CU0L7RgdGC0YrQv9C4JyxwcmVzZW5jZTon0J/RgNC40YHRitGB0YLQstC40LUnLHRhcmdldHM6J9Ci0LDRgNCz0LXRgtC4JywKICBpbnZvaWNpbmc6J9Ck0LDQutGC0YPRgNC40YDQsNC90LUnLGhyX3JlcXVlc3RzOifQnNC+0LvQsdC4Jyx3YXliaWxsczon0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtSd9OwoKdmFyIEhVQlM9W10sIFNVQlM9W107Cgphc3luYyBmdW5jdGlvbiBsb2FkQWxsKCl7CiAgdmFyIHN0PWF3YWl0IGFmKCdodWJfYmlsbGluZ19zdGF0cycpOwogIGlmKCFzdC5vayl7CiAgICB2YXIgbXNnPVN0cmluZyhzdC5lcnJvcnx8JycpOwogICAgdmFyIGhpbnQ9Jyc7CiAgICBpZihtc2cuaW5kZXhPZignVW5rbm93biBhY3Rpb24nKSE9PS0xKSBoaW50PSfQndCwINCi0J7Ql9CYINGF0YrQsSDQstGK0YDQstC4INGB0YLQsNGA0LAg0LLQtdGA0YHQuNGPINC90LAgYXBpLnBocC4g0JrQsNGH0Lgg0L3QvtCy0LjRgtC1INGE0LDQudC70L7QstC1INC+0YIg0L/QsNC60LXRgtCwIChhcGkucGhwLCBodWJzLmh0bWzigKYpINCy0YrRgNGF0YMg0YLQvtC30Lgg0YHQsNC50YIg0Lgg0L/RgNC10LfQsNGA0LXQtNC4Lic7CiAgICBlbHNlIGlmKG1zZy5pbmRleE9mKCdub19jb25maWcnKSE9PS0xIHx8IG1zZy5pbmRleE9mKCfQkdCw0LfQsNGC0LAg0LTQsNC90L3QuCDQvdC1INC1INC60L7QvdGE0LjQs9GD0YDQuNGA0LDQvdCwJykhPT0tMSkgaGludD0n0KLQvtC30Lgg0YXRitCxINC90Y/QvNCwIGNvbmZpZy5waHAg4oCUINGB0YLQsNGA0YLQuNGA0LDQuSB3X2h1Yl9pbnN0YWxsLnBocCDRgtGD0LouJzsKICAgIGVsc2UgaWYobXNnLmluZGV4T2YoJ2V4aXN0JykhPT0tMSB8fCBtc2cudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd0YWJsZScpIT09LTEpIGhpbnQ9J9Cb0LjQv9GB0LLQsNGCINC90L7QstC40YLQtSDRgtCw0LHQu9C40YbQuC4g0J7RgtCy0L7RgNC4INCy0LXQtNC90YrQtjogPGEgaHJlZj0iJytBUEkrJz9hY3Rpb249aW5zdGFsbF9wbGF0Zm9ybSIgdGFyZ2V0PSJfYmxhbmsiPmFwaS5waHA/YWN0aW9uPWluc3RhbGxfcGxhdGZvcm08L2E+INC4INC/0YDQtdC30LDRgNC10LTQuC4nOwogICAgZWxzZSBoaW50PSfQk9GA0LXRiNC60LA6ICcrZXNjKG1zZykrJy4g0J/RgNC+0LLQtdGA0Lgg0LTQsNC70LggYXBpLnBocCDQtSDQvdC+0LLQsNGC0LAg0LLQtdGA0YHQuNGPINC4INC00LDQu9C4IGluc3RhbGxfcGxhdGZvcm0g0LUg0YHRgtCw0YDRgtC40YDQsNC9Lic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMnKS5pbm5lckhUTUw9Jyc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHViTGlzdCcpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJib3JkZXItY29sb3I6cmdiYSgyMzksNjgsNjgsLjM1KSI+PGRpdiBjbGFzcz0icHQiIHN0eWxlPSJjb2xvcjojYjkxYzFjO21hcmdpbi1ib3R0b206OHB4Ij7QpdGK0LHRitGCINC90LUg0LUg0LPQvtGC0L7QsiDQt9CwINGC0L7Qt9C4INC80L7QtNGD0Ls8L2Rpdj48ZGl2IGNsYXNzPSJzbWFsbCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS43Ij4nK2hpbnQrJzwvZGl2PjwvZGl2Pic7CiAgICByZXR1cm47CiAgfQogIHJlbmRlclN0YXRzKHN0LmRhdGEpOwogIHZhciBocz1hd2FpdCBhZignY2xpZW50X2h1YnMnKTsgSFVCUz1ocy5vaz8oaHMuZGF0YXx8W10pOltdOwogIHZhciBzcz1hd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnKTsgU1VCUz1zcy5vaz8oc3MuZGF0YXx8W10pOltdOwogIHJlbmRlckh1YnMoKTsKfQoKZnVuY3Rpb24gcmVuZGVyU3RhdHMocyl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRzJykuaW5uZXJIVE1MPQogICAgJzxkaXYgY2xhc3M9InN0YXRjYXJkIj48ZGl2IGNsYXNzPSJsYmwiPtCa0LvQuNC10L3RgtGB0LrQuCDRhdGK0LHQvtCy0LU8L2Rpdj48Yj4nK3MuaHVicysnPC9iPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ic3RhdGNhcmQiPjxkaXYgY2xhc3M9ImxibCI+0JDQutGC0LjQstC90Lgg0LDQsdC+0L3QsNC80LXQvdGC0Lg8L2Rpdj48Yj4nK3MuYWN0aXZlX3N1YnNjcmlwdGlvbnMrJzwvYj48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9InN0YXRjYXJkIj48ZGl2IGNsYXNzPSJsYmwiPk1SUiAo0LzQtdGB0LXRh9C10L0g0L/RgNC40YXQvtC0KTwvZGl2PjxiIHN0eWxlPSJjb2xvcjojMTU4MDNkIj4nK21vbmV5KHMubXJyKSsnPC9iPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ic3RhdGNhcmQiPjxkaXYgY2xhc3M9ImxibCI+0J/RgNC+0YHRgNC+0YfQtdC90Lg8L2Rpdj48YiBzdHlsZT0iY29sb3I6Jysocy5vdmVyZHVlLmxlbmd0aD8nI2I5MWMxYyc6J2luaGVyaXQnKSsnIj4nK3Mub3ZlcmR1ZS5sZW5ndGgrJzwvYj48L2Rpdj4nOwogIHZhciBvcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmR1ZVBhbmVsJyk7CiAgaWYocy5vdmVyZHVlLmxlbmd0aCl7CiAgICBvcC5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgICB2YXIgaHRtbD0nPHRoZWFkPjx0cj48dGg+0JrQu9C40LXQvdGCPC90aD48dGg+0JzQvtC00YPQuzwvdGg+PHRoPtCh0YPQvNCwL9C80LXRgTwvdGg+PHRoPtCf0LDQtNC10LY8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgIHMub3ZlcmR1ZS5mb3JFYWNoKG89PnsKICAgICAgaHRtbCs9Jzx0cj48dGQ+Jytlc2Moby5odWJfbmFtZXx8J+KAlCcpKyc8L3RkPjx0ZD4nKyhNT0RVTEVfTEFCRUxTW28ubW9kdWxlXXx8by5tb2R1bGUpKyc8L3RkPjx0ZD4nK21vbmV5KG8ucHJpY2VfbW9udGhseSxvLmN1cnJlbmN5KSsnPC90ZD4nKwogICAgICAgICc8dGQgc3R5bGU9ImNvbG9yOiNiOTFjMWMiPicrby5uZXh0X2JpbGxpbmdfZGF0ZSsnPC90ZD4nKwogICAgICAgICc8dGQgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4Ij48YnV0dG9uIGNsYXNzPSJidG4gZyIgb25jbGljaz0ibWFya1BhaWQoXCcnK28uaWQrJ1wnKSI+4pyTINCf0LvQsNGC0LXQvdC+PC9idXR0b24+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9InN0b3BNb2R1bGVGb3JTdWIoXCcnK28uaWQrJ1wnLFwnJytvLmh1Yl9pZCsnXCcsXCcnK28ubW9kdWxlKydcJykiPuKblCDQodC/0YDQuCDQvNC+0LTRg9C70LA8L2J1dHRvbj48L3RkPjwvdHI+JzsKICAgIH0pOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ292ZXJkdWVUYmwnKS5pbm5lckhUTUw9aHRtbCsnPC90Ym9keT4nOwogIH0gZWxzZSBvcC5zdHlsZS5kaXNwbGF5PSdub25lJzsKfQoKYXN5bmMgZnVuY3Rpb24gYWRkSHViKCl7CiAgdmFyIG5hbWU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hfbmFtZScpLnZhbHVlLnRyaW0oKSwKICAgICAgdXJsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoX3VybCcpLnZhbHVlLnRyaW0oKS5yZXBsYWNlKC9cLyQvLCcnKSwKICAgICAga2V5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoX2tleScpLnZhbHVlLnRyaW0oKTsKICBpZighbmFtZXx8IXVybHx8IWtleSl7dG9hc3QoJ9Cf0L7Qv9GK0LvQvdC4INC40LzQtSwgVVJMINC4INC60LvRjtGHJyk7cmV0dXJuO30KICB2YXIgcj1hd2FpdCBhZignY2xpZW50X2h1YnMnLCdQT1NUJyx7bmFtZTpuYW1lLHVybDp1cmwsbGljZW5zZV9rZXk6a2V5fSk7CiAgaWYoci5vayl7IHRvYXN0KCfQpdGK0LHRitGCINC1INC00L7QsdCw0LLQtdC9Jyk7IFsnaF9uYW1lJywnaF91cmwnLCdoX2tleSddLmZvckVhY2goaWQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZT0nJyk7IGxvYWRBbGwoKTsgfQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsDogJytyLmVycm9yKTsKfQoKZnVuY3Rpb24gcmVuZGVySHVicygpewogIHZhciBib3g9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2h1Ykxpc3QnKTsKICBpZighSFVCUy5sZW5ndGgpeyBib3guaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCBzbWFsbCI+0J3Rj9C80LAg0LTQvtCx0LDQstC10L3QuCDQutC70LjQtdC90YLRgdC60Lgg0YXRitCx0L7QstC1INC+0YnQtS48L2Rpdj4nOyByZXR1cm47IH0KICB2YXIgaHRtbD0nJzsKICBIVUJTLmZvckVhY2goaD0+ewogICAgdmFyIGh1YlN1YnM9U1VCUy5maWx0ZXIocz0+cy5odWJfaWQ9PT1oLmlkKTsKICAgIHZhciBtcnI9aHViU3Vicy5maWx0ZXIocz0+cy5hY3RpdmU9PTEpLnJlZHVjZSgoYSxzKT0+YStwYXJzZUZsb2F0KHMucHJpY2VfbW9udGhseXx8MCksMCk7CiAgICBodG1sKz0nPGRpdiBjbGFzcz0iaHViY2FyZCI+JysKICAgICAgJzxkaXYgY2xhc3M9InBoIj48ZGl2PjxzcGFuIGNsYXNzPSJwdCI+8J+PoiAnK2VzYyhoLm5hbWUpKyc8L3NwYW4+IDxzcGFuIGNsYXNzPSJzbWFsbCI+Jytlc2MoaC51cmwpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlciI+PHNwYW4gY2xhc3M9InNtYWxsIj5NUlI6IDxiIHN0eWxlPSJjb2xvcjojMTU4MDNkIj4nK21vbmV5KG1ycikrJzwvYj48L3NwYW4+JysKICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBkIiBvbmNsaWNrPSJyZW1vdmVIdWIoXCcnK2guaWQrJ1wnKSI+0J/RgNC10LzQsNGF0L3QuDwvYnV0dG9uPjwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGlkPSJtb2RzXycraC5pZCsnIiBjbGFzcz0ic21hbGwiPtCh0LLRitGA0LfQstCw0Lwg0YHQtSDRgSDRhdGK0LHQsOKApjwvZGl2PicrCiAgICAgICc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE0cHgiPjxkaXYgY2xhc3M9InNtYWxsIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtO21hcmdpbi1ib3R0b206NnB4Ij7QkNCx0L7QvdCw0LzQtdC90YLQuDwvZGl2PicrCiAgICAgICc8dGFibGU+PHRoZWFkPjx0cj48dGg+0JzQvtC00YPQuzwvdGg+PHRoPtCm0LXQvdCwL9C80LXRgTwvdGg+PHRoPtCh0LvQtdC00LLQsNGJ0L4g0L/Qu9Cw0YnQsNC90LU8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgIGh1YlN1YnMuZm9yRWFjaChzPT57CiAgICAgIHZhciBvdmVyZHVlID0gcy5hY3RpdmU9PTEgJiYgcy5uZXh0X2JpbGxpbmdfZGF0ZSAmJiBzLm5leHRfYmlsbGluZ19kYXRlIDwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogICAgICBodG1sKz0nPHRyPjx0ZD4nKyhNT0RVTEVfTEFCRUxTW3MubW9kdWxlXXx8cy5tb2R1bGUpKyc8L3RkPjx0ZD4nK21vbmV5KHMucHJpY2VfbW9udGhseSxzLmN1cnJlbmN5KSsnPC90ZD4nKwogICAgICAgICc8dGQ+Jysocy5uZXh0X2JpbGxpbmdfZGF0ZXx8J+KAlCcpKyc8L3RkPicrCiAgICAgICAgJzx0ZD48c3BhbiBjbGFzcz0iYmFkZ2UgJysocy5hY3RpdmU9PTA/J3N0b3BwZWQnOihvdmVyZHVlPydvdmVyZHVlJzonb2snKSkrJyI+Jysocy5hY3RpdmU9PTA/J9GB0L/RgNGP0L0nOihvdmVyZHVlPyfQv9GA0L7RgdGA0L7Rh9C10L0nOifQsNC60YLQuNCy0LXQvScpKSsnPC9zcGFuPjwvdGQ+JysKICAgICAgICAnPHRkIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjVweDtmbGV4LXdyYXA6d3JhcCI+JysKICAgICAgICAocy5hY3RpdmU9PTE/JzxidXR0b24gY2xhc3M9ImJ0biBnIiBvbmNsaWNrPSJtYXJrUGFpZChcJycrcy5pZCsnXCcpIj7inJMg0J/Qu9Cw0YLQtdC90L48L2J1dHRvbj4nOicnKSsKICAgICAgICAocy5hY3RpdmU9PTE/JzxidXR0b24gY2xhc3M9ImJ0biBhIiBvbmNsaWNrPSJ0b2dnbGVTdWIoXCcnK3MuaWQrJ1wnLDApIj7ij7gg0KHQv9GA0Lg8L2J1dHRvbj4nCiAgICAgICAgICAgICAgICAgICAgOic8YnV0dG9uIGNsYXNzPSJidG4gZyIgb25jbGljaz0idG9nZ2xlU3ViKFwnJytzLmlkKydcJywxKSI+4pa2INCQ0LrRgtC40LLQuNGA0LDQuTwvYnV0dG9uPicpKwogICAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgb25jbGljaz0iZGVsU3ViKFwnJytzLmlkKydcJykiPvCfl5E8L3NwYW4+PC90ZD48L3RyPic7CiAgICB9KTsKICAgIGlmKCFodWJTdWJzLmxlbmd0aCkgaHRtbCs9Jzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNtYWxsIj7QndGP0LzQsCDQsNCx0L7QvdCw0LzQtdC90YLQuDwvdGQ+PC90cj4nOwogICAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT4nKwogICAgICAnPGRpdiBjbGFzcz0icm93MyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDthbGlnbi1pdGVtczplbmQiPicrCiAgICAgICc8ZGl2PjxsYWJlbD7QnNC+0LTRg9C7PC9sYWJlbD48c2VsZWN0IGlkPSJuc19tb2RfJytoLmlkKyciPicrT2JqZWN0LmtleXMoTU9EVUxFX0xBQkVMUykubWFwKGs9Pic8b3B0aW9uIHZhbHVlPSInK2srJyI+JytNT0RVTEVfTEFCRUxTW2tdKyc8L29wdGlvbj4nKS5qb2luKCcnKSsnPC9zZWxlY3Q+PC9kaXY+JysKICAgICAgJzxkaXY+PGxhYmVsPtCm0LXQvdCwIOKCrC/QvNC10YHQtdGGPC9sYWJlbD48aW5wdXQgaWQ9Im5zX3ByaWNlXycraC5pZCsnIiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHZhbHVlPSI1Ij48L2Rpdj4nKwogICAgICAnPGRpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgc3R5bGU9IndpZHRoOjEwMCUiIG9uY2xpY2s9ImFkZFN1YihcJycraC5pZCsnXCcpIj4rINCQ0LHQvtC90LDQvNC10L3RgjwvYnV0dG9uPjwvZGl2PicrCiAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0pOwogIGJveC5pbm5lckhUTUw9aHRtbDsKICBIVUJTLmZvckVhY2goaD0+bG9hZFJlbW90ZU1vZHVsZXMoaCkpOwp9Cgphc3luYyBmdW5jdGlvbiBsb2FkUmVtb3RlTW9kdWxlcyhoKXsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RzXycraC5pZCk7IGlmKCFib3gpcmV0dXJuOwogIGlmKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSdodHRwczonICYmIGgudXJsLmluZGV4T2YoJ2h0dHA6Ly8nKT09PTApewogICAgYm94LmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImRvdCBlcnIiPjwvc3Bhbj7QkdGA0LDRg9C30YrRgNGK0YIg0LHQu9C+0LrQuNGA0LAg0LLRgNGK0LfQutCw0YLQsDog0YLQvtC30Lgg0YXRitCxINC1INC90LAgaHR0cHMsINCwINC60LvQuNC10L3RgtGB0LrQuNGP0YIg0LUg0L3QsCBodHRwIChtaXhlZCBjb250ZW50KS4g0KHQvNC10L3QuCBVUkwt0LAg0L3QsCDQutC70LjQtdC90YLQsCDQvdCwIGh0dHBzOi8vICjQuNC30LTQsNC5INC80YMgU1NMINC+0YIgY1BhbmVsIOKGkiBTU0wvVExTIFN0YXR1cyDihpIgUnVuIEF1dG9TU0wpLic7CiAgICByZXR1cm47CiAgfQogIHRyeXsKICAgIHZhciByZXNwPWF3YWl0IGZldGNoKGgudXJsKycvYXBpLnBocD9hY3Rpb249YnJhbmRpbmdfc2V0dGluZ3MnKTsKICAgIHZhciBqPWF3YWl0IHJlc3AuanNvbigpOwogICAgaWYoIWoub2spewogICAgICB2YXIgbT1TdHJpbmcoai5lcnJvcnx8JycpOwogICAgICBpZihtPT09J25vX2NvbmZpZyd8fG0uaW5kZXhPZign0L3QtSDQtSDQutC+0L3RhNC40LPRg9GA0LjRgNCw0L3QsCcpIT09LTEpIGJveC5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJkb3QgZXJyIj48L3NwYW4+0KXRitCx0YrRgiDQvdCwINC60LvQuNC10L3RgtCwINC90LUg0LUg0LjQvdGB0YLQsNC70LjRgNCw0L0gKNC90Y/QvNCwIGNvbmZpZy5waHApIOKAlCDRgdGC0LDRgNGC0LjRgNCw0Lkgd19odWJfaW5zdGFsbC5waHAg0YLQsNC8Lic7CiAgICAgIGVsc2UgaWYobS5pbmRleE9mKCdVbmtub3duIGFjdGlvbicpIT09LTEpIGJveC5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJkb3QgZXJyIj48L3NwYW4+0JrQu9C40LXQvdGC0YrRgiDQtSDRgdGK0YEg0YHRgtCw0YDQsCDQstC10YDRgdC40Y8g0L3QsCBhcGkucGhwIOKAlCDQutCw0YfQuCDQvdC+0LLQuNGC0LUg0YTQsNC50LvQvtCy0LUg0L/RgNC4INC90LXQs9C+Lic7CiAgICAgIGVsc2UgYm94LmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImRvdCBlcnIiPjwvc3Bhbj7QpdGK0LHRitGCINC+0YLQs9C+0LLQvtGA0Lgg0YEg0LPRgNC10YjQutCwOiAnK2VzYyhtKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIG1vZHM9ai5kYXRhLm1vZHVsZXNfZW5hYmxlZHx8e307CiAgICB2YXIgaHRtbD0nPHNwYW4gY2xhc3M9ImRvdCBvayI+PC9zcGFuPtCh0LLRitGA0LfQsNC9IOKAlCAnK2VzYyhqLmRhdGEucHJvZHVjdF9uYW1lfHwnJykrJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij4nOwogICAgT2JqZWN0LmtleXMoTU9EVUxFX0xBQkVMUykuZm9yRWFjaChrPT57CiAgICAgIHZhciBvbj0hIW1vZHNba107CiAgICAgIGh0bWwrPSc8c3BhbiBjbGFzcz0ibW9kY2hpcCAnKyhvbj8nb24nOidvZmYnKSsnIiBvbmNsaWNrPSJyZW1vdGVUb2dnbGUoXCcnK2guaWQrJ1wnLFwnJytlc2MoaC51cmwpKydcJyxcJycrZXNjKGgubGljZW5zZV9rZXkpKydcJyxcJycraysnXCcsdGhpcykiPicrTU9EVUxFX0xBQkVMU1trXSsob24/JyDinJMnOicnKSsnPC9zcGFuPic7CiAgICB9KTsKICAgIGJveC5pbm5lckhUTUw9aHRtbCsnPC9kaXY+JzsKICAgIGFmKCdjbGllbnRfaHViX3BpbmcnLCdHRVQnLCcnLCAnJmlkPScraC5pZCk7CiAgfWNhdGNoKGUpewogICAgYm94LmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImRvdCBlcnIiPjwvc3Bhbj7QndGP0LzQsCDQvNGA0LXQttC+0LLQsCDQstGA0YrQt9C60LAg0YEgJytlc2MoaC51cmwpKycvYXBpLnBocCDigJQg0L/RgNC+0LLQtdGA0Lg6IDEpIFVSTC3RitGCINC1INGC0L7Rh9C10L0g0Lgg0LHQtdC3INC/0YrRgiDRgdC70LXQtCDQtNC+0LzQtdC50L3QsCwgMikg0YXRitCx0YrRgiDQtSDQuNC90YHRgtCw0LvQuNGA0LDQvSDRgtCw0LwsIDMpINC+0YLQstC+0YDQuCAnK2VzYyhoLnVybCkrJy9hcGkucGhwP2FjdGlvbj10ZXN0INC00LjRgNC10LrRgtC90L4g0LIg0LHRgNCw0YPQt9GK0YDQsCAo0YLRgNGP0LHQstCwINC00LAg0LLRitGA0L3QtSBKU09OKS4nOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gcmVtb3RlVG9nZ2xlKGh1YklkLHVybCxrZXksbW9kLGVsKXsKICB2YXIgd2lsbEVuYWJsZT1lbC5jbGFzc0xpc3QuY29udGFpbnMoJ29mZicpOwogIHRyeXsKICAgIHZhciByZXNwPWF3YWl0IGZldGNoKHVybCsnL2FwaS5waHA/YWN0aW9uPW1vZHVsZV90b2dnbGUnLHttZXRob2Q6J1BPU1QnLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ30sCiAgICAgIGJvZHk6SlNPTi5zdHJpbmdpZnkoe2FkbWluX3NlY3JldDprZXksbW9kdWxlOm1vZCxlbmFibGVkOndpbGxFbmFibGU/MTowfSl9KTsKICAgIHZhciBqPWF3YWl0IHJlc3AuanNvbigpOwogICAgaWYoai5vayl7CiAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ29uJyk7IGVsLmNsYXNzTGlzdC50b2dnbGUoJ29mZicpOwogICAgICBlbC5pbm5lckhUTUw9TU9EVUxFX0xBQkVMU1ttb2RdKyh3aWxsRW5hYmxlPycg4pyTJzonJyk7CiAgICAgIHRvYXN0KE1PRFVMRV9MQUJFTFNbbW9kXSsnIOKGkiAnKyh3aWxsRW5hYmxlPyfQstC60LvRjtGH0LXQvSc6J9C40LfQutC70Y7Rh9C10L0nKSsnINC/0YDQuCDQutC70LjQtdC90YLQsCcpOwogICAgfSBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LA6ICcrai5lcnJvcik7CiAgfWNhdGNoKGUpeyB0b2FzdCgn0J3Rj9C80LAg0LLRgNGK0LfQutCwINGBINGF0YrQsdCwINC90LAg0LrQu9C40LXQvdGC0LAnKTsgfQp9Cgphc3luYyBmdW5jdGlvbiByZW1vdmVIdWIoaWQpewogIGlmKCFjb25maXJtKCfQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGF0YrQsdCwINC+0YIg0YDQtdCz0LjRgdGC0YrRgNCwPyAo0J3QtdCz0L7QstCw0YLQsCDQuNC90YHRgtCw0LvQsNGG0LjRjyDQvdC1INGB0LUg0L/QuNC/0LAuKScpKXJldHVybjsKICBhd2FpdCBhZignY2xpZW50X2h1YnMnLCdERUxFVEUnLCcnLCAnJmlkPScraWQpOwogIGxvYWRBbGwoKTsKfQoKYXN5bmMgZnVuY3Rpb24gYWRkU3ViKGh1YklkKXsKICB2YXIgbW9kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduc19tb2RfJytodWJJZCkudmFsdWU7CiAgdmFyIHByaWNlPXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25zX3ByaWNlXycraHViSWQpLnZhbHVlKXx8MDsKICB2YXIgcj1hd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnLCdQT1NUJyx7aHViX2lkOmh1YklkLG1vZHVsZTptb2QscHJpY2VfbW9udGhseTpwcmljZX0pOwogIGlmKHIub2speyB0b2FzdCgn0JDQsdC+0L3QsNC80LXQvdGC0YrRgiDQtSDQtNC+0LHQsNCy0LXQvScpOyBsb2FkQWxsKCk7IH0gZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwOiAnK3IuZXJyb3IpOwp9CmFzeW5jIGZ1bmN0aW9uIGRlbFN1YihpZCl7IGlmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0LDQsdC+0L3QsNC80LXQvdGC0LA/JykpcmV0dXJuOyBhd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnLCdERUxFVEUnLCcnLCAnJmlkPScraWQpOyBsb2FkQWxsKCk7IH0KYXN5bmMgZnVuY3Rpb24gbWFya1BhaWQoaWQpewogIHZhciByPWF3YWl0IGFmKCdodWJfc3Vic2NyaXB0aW9uX3BhaWQnLCdQT1NUJyx7aWQ6aWR9KTsKICBpZihyLm9rKXsgdG9hc3QoJ9Ce0YLQsdC10LvRj9C30LDQvdC+INC60LDRgtC+INC/0LvQsNGC0LXQvdC+IOKAlCDRgdC70LXQtNCy0LDRiSDQv9Cw0LTQtdC2OiAnK3IuZGF0YS5uZXh0X2JpbGxpbmdfZGF0ZSk7IGxvYWRBbGwoKTsgfQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsDogJytyLmVycm9yKTsKfQphc3luYyBmdW5jdGlvbiB0b2dnbGVTdWIoaWQsYWN0aXZlKXsKICB2YXIgc3ViPVNVQlMuZmluZChzPT5zLmlkPT09aWQpOyBpZighc3ViKXJldHVybjsKICBzdWIuYWN0aXZlPWFjdGl2ZTsKICB2YXIgcj1hd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnLCdQT1NUJyxzdWIpOwogIGlmKHIub2speyB0b2FzdChhY3RpdmU/J9CQ0LHQvtC90LDQvNC10L3RgtGK0YIg0LUg0LDQutGC0LjQstC40YDQsNC9Jzon0JDQsdC+0L3QsNC80LXQvdGC0YrRgiDQtSDRgdC/0YDRj9C9Jyk7IGxvYWRBbGwoKTsgfQp9CmFzeW5jIGZ1bmN0aW9uIHN0b3BNb2R1bGVGb3JTdWIoc3ViSWQsaHViSWQsbW9kKXsKICB2YXIgaD1IVUJTLmZpbmQoeD0+eC5pZD09PWh1YklkKTsKICBpZihoKXsKICAgIHRyeXsKICAgICAgdmFyIHJlc3A9YXdhaXQgZmV0Y2goaC51cmwrJy9hcGkucGhwP2FjdGlvbj1tb2R1bGVfdG9nZ2xlJyx7bWV0aG9kOidQT1NUJyxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9LAogICAgICAgIGJvZHk6SlNPTi5zdHJpbmdpZnkoe2FkbWluX3NlY3JldDpoLmxpY2Vuc2Vfa2V5LG1vZHVsZTptb2QsZW5hYmxlZDowfSl9KTsKICAgICAgdmFyIGo9YXdhaXQgcmVzcC5qc29uKCk7CiAgICAgIHRvYXN0KGoub2s/J9Cc0L7QtNGD0LvRitGCINC1INC40LfQutC70Y7Rh9C10L0g0L/RgNC4INC60LvQuNC10L3RgtCwJzon0JPRgNC10YjQutCwINC/0YDQuCDQuNC30LrQu9GO0YfQstCw0L3QtTogJysoai5lcnJvcnx8JycpKTsKICAgIH1jYXRjaChlKXsgdG9hc3QoJ9Cd0Y/QvNCwINCy0YDRitC30LrQsCDRgSDRhdGK0LHQsCDQvdCwINC60LvQuNC10L3RgtCwJyk7IH0KICB9CiAgdmFyIHN1Yj1TVUJTLmZpbmQocz0+cy5pZD09PXN1YklkKTsKICBpZihzdWIpeyBzdWIuYWN0aXZlPTA7IGF3YWl0IGFmKCdodWJfc3Vic2NyaXB0aW9ucycsJ1BPU1QnLHN1Yik7IH0KICBsb2FkQWxsKCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1vZHVsZUd1YXJkKGtleSxsYWJlbCl7CiAgdHJ5ewogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZihyLm9rICYmIHIuZGF0YSAmJiAoci5kYXRhLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5kYXRhLmxpY2Vuc2Vfc3RhdGU9PT0naW52YWxpZCcpKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij5cdWQ4M2RcdWRkMTI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrZXNjKHIuZGF0YS5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihyLm9rICYmIHIuZGF0YSAmJiByLmRhdGEubW9kdWxlc19lbmFibGVkICYmIHIuZGF0YS5tb2R1bGVzX2VuYWJsZWQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhci5kYXRhLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij5cdWQ4M2RcdWRkMTI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQtNC+0YHRgtGK0L/QtdC9INGB0LDQvNC+INC90LAgbWFzdGVyINGF0YrQsdCwLiDQktC60LvRjtGH0Lgg0LPQviDQvtGCIHdfYWRtaW4ucGhwINCw0LrQviDRgtC+0LLQsCDQtSDRgtCy0L7Rj9GCIG1hc3Rlci48L3A+JysKICAgICAgICAnPGEgaHJlZj0iaW5kZXguaHRtbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MTZweDtjb2xvcjojNmM2M2ZmIj5cdTIxOTAg0J7QsdGA0LDRgtC90L4g0LrRitC8IEh1YjwvYT48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfWNhdGNoKGUpe30KICByZXR1cm4gdHJ1ZTsKfQoKbW9kdWxlR3VhcmQoJ2h1YnNfbWFuYWdlbWVudCcsJ9Cj0L/RgNCw0LLQu9C10L3QuNC10YLQviDQvdCwINGF0YrQsdC+0LLQtScpLnRoZW4oZnVuY3Rpb24ob2speyBpZihvaykgbG9hZEFsbCgpOyB9KTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'index.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+V2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c2NyaXB0PgooZnVuY3Rpb24oKXsKICB2YXIgdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3RfdGhlbWUnKXx8J2xpZ2h0JzsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyx0KTsKfSkoKTsKPC9zY3JpcHQ+CjxzdHlsZT4KW2RhdGEtdGhlbWU9ImRhcmsiXXstLWJnOiMwYTBhMGY7LS1zdXI6IzExMTExODstLXN1cjI6IzE4MTgxZjstLXN1cjM6IzFlMWUyODstLWJyZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNyk7LS1icmQyOnJnYmEoMjU1LDI1NSwyNTUsLjEzKTstLXR4OiNlOGU4ZjA7LS10eDI6IzkwOTBhODstLXR4MzojNWE1YTcyOy0tc2hkOjAgNHB4IDI0cHggcmdiYSgwLDAsMCwuNCl9CltkYXRhLXRoZW1lPSJsaWdodCJdey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOy0tdHg6IzFhMWEyZTstLXR4MjojNGE0YTZhOy0tdHgzOiM4ODg4YWE7LS1zaGQ6MCA0cHggMjRweCByZ2JhKDEwOCw5OSwyNTUsLjA4KX0KOnJvb3R7LS1hY2M6IzZjNjNmZjstLWFjYzI6I2E3OGJmYTstLWdsb3c6cmdiYSgxMDgsOTksMjU1LC4xNCk7LS1ncm46IzIyYzU1ZTstLWdkaW06cmdiYSgzNCwxOTcsOTQsLjEyKTstLWFtYjojZjU5ZTBiOy0tYWRpbTpyZ2JhKDI0NSwxNTgsMTEsLjEyKTstLXJlZDojZWY0NDQ0Oy0tcmRpbTpyZ2JhKDIzOSw2OCw2OCwuMTIpOy0tYmx1OiMzOGJkZjg7LS1iZGltOnJnYmEoNTYsMTg5LDI0OCwuMTIpOy0tZm46J0RNIFNhbnMnLHNhbnMtc2VyaWY7LS1tbzonRE0gTW9ubycsbW9ub3NwYWNlfQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLXR4KTttaW4taGVpZ2h0OjEwMHZoO2Rpc3BsYXk6ZmxleH0KCi5sd3twb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6dmFyKC0tYmcpO3otaW5kZXg6OTk5OTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNHB4fQoubGJ7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkMik7Ym9yZGVyLXJhZGl1czoyMHB4O3BhZGRpbmc6NDRweCA0MHB4O3dpZHRoOjM4MHB4O3RleHQtYWxpZ246Y2VudGVyO2JveC1zaGFkb3c6dmFyKC0tc2hkKX0KLmxsb2dve2hlaWdodDozNHB4O21hcmdpbi1ib3R0b206MjBweH0KW2RhdGEtdGhlbWU9ImRhcmsiXSAubGxvZ297ZmlsdGVyOmJyaWdodG5lc3MoMS4xKX0KLmx0aXRsZXtmb250LXNpemU6MjJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO21hcmdpbi1ib3R0b206NHB4fQoubHN1Yntmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206NnB4fQouYWluZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nOjZweCAxNHB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmFkb3R7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1hbWIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3M7ZmxleC1zaHJpbms6MH0KLmFkb3Qub2t7YmFja2dyb3VuZDp2YXIoLS1ncm4pfS5hZG90LmVycntiYWNrZ3JvdW5kOnZhcigtLXJlZCl9Ci5sZnttYXJnaW4tYm90dG9tOjEycHg7dGV4dC1hbGlnbjpsZWZ0fQoubGYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDdlbTttYXJnaW4tYm90dG9tOjVweH0KLmxmIGlucHV0e3dpZHRoOjEwMCU7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTFweCAxNHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjE0cHg7b3V0bGluZTpub25lO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xNXN9Ci5sZiBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tYWNjKX0KLmxidG57d2lkdGg6MTAwJTtwYWRkaW5nOjEycHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYWNjKTtib3JkZXI6bm9uZTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTp2YXIoLS1mbik7bWFyZ2luLXRvcDo0cHh9Ci5sYnRuOmhvdmVye29wYWNpdHk6Ljl9Ci5sZXJye2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXJlZCk7bWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpub25lfQoudGJ0bjJ7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjhweCAxOHB4O2NvbG9yOnZhcigtLXR4Mik7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4fQoudGJ0bjI6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Cgouc2J7d2lkdGg6MjIwcHg7aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoxMDA7b3ZlcmZsb3c6aGlkZGVufQouc2xvZ297cGFkZGluZzoxNnB4IDE0cHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7ZmxleC1zaHJpbms6MH0KLnNsb2dvIGltZ3toZWlnaHQ6MjZweH0KW2RhdGEtdGhlbWU9ImRhcmsiXSAuc2xvZ28gaW1ne2ZpbHRlcjpicmlnaHRuZXNzKDEuMSl9Ci5sc3ViMntmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO2xldHRlci1zcGFjaW5nOi4wOGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KLmx2ZXJ7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tYWNjMik7Zm9udC13ZWlnaHQ6NTAwO21hcmdpbi10b3A6MXB4fQpuYXZ7cGFkZGluZzo4cHggNnB4O2ZsZXg6MTttaW4taGVpZ2h0OjA7b3ZlcmZsb3cteTphdXRvO3Njcm9sbGJhci13aWR0aDp0aGlufQpuYXY6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjZweH0KbmF2Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOnZhcigtLWJyZDIpO2JvcmRlci1yYWRpdXM6MTBweH0KLm5zZWN7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTtsZXR0ZXItc3BhY2luZzouMWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjEwcHggOHB4IDVweDtmb250LXdlaWdodDo1MDB9Ci5uaXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo3cHggOXB4O2JvcmRlci1yYWRpdXM6OHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXM7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdHgyKTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbi1ib3R0b206MXB4O2JhY2tncm91bmQ6bm9uZTt3aWR0aDoxMDAlO3RleHQtYWxpZ246bGVmdDtmb250LWZhbWlseTp2YXIoLS1mbil9Ci5uaTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2NvbG9yOnZhcigtLXR4KX0KLm5pLmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWdsb3cpO2NvbG9yOnZhcigtLWFjYzIpO2JvcmRlci1jb2xvcjpyZ2JhKDEwOCw5OSwyNTUsLjIpfQoubmlje2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZmxleC1zaHJpbms6MH0KLm5iYWRnZXttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMHB4O2JhY2tncm91bmQ6dmFyKC0tcmVkKTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjFweCA2cHg7Zm9udC13ZWlnaHQ6NjAwfQoubmJhZGdlLmd7YmFja2dyb3VuZDp2YXIoLS1ncm4pfS5uYmFkZ2UuYXtiYWNrZ3JvdW5kOnZhcigtLWFtYik7Y29sb3I6IzAwMH0KLnNib3R7cGFkZGluZzoxMHB4IDZweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1icmQpO2ZsZXgtc2hyaW5rOjB9Ci50cm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjVweCA4cHg7Ym9yZGVyLXJhZGl1czo4cHh9Ci5hdnt3aWR0aDoyNnB4O2hlaWdodDoyNnB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo2MDA7ZmxleC1zaHJpbms6MH0KLmF2LXB7YmFja2dyb3VuZDpyZ2JhKDEwOCw5OSwyNTUsLjI1KTtjb2xvcjojYTc4YmZhfS5hdi10e2JhY2tncm91bmQ6cmdiYSgyMCwxODQsMTY2LC4yNSk7Y29sb3I6IzJkZDRiZn0KLmF2LWd7YmFja2dyb3VuZDpyZ2JhKDM0LDE5Nyw5NCwuMik7Y29sb3I6IzIyYzU1ZX0uYXYtYXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDE1OCwxMSwuMik7Y29sb3I6I2Y1OWUwYn0KLmF2LXJ7YmFja2dyb3VuZDpyZ2JhKDIzOSw2OCw2OCwuMik7Y29sb3I6I2VmNDQ0NH0uYXYtYntiYWNrZ3JvdW5kOnJnYmEoNTYsMTg5LDI0OCwuMik7Y29sb3I6IzM4YmRmOH0KCi5tYWlue21hcmdpbi1sZWZ0OjIyMHB4O2ZsZXg6MTttaW4taGVpZ2h0OjEwMHZoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ci50b3BiYXJ7aGVpZ2h0OjUycHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjJweDtnYXA6MTBweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDtmbGV4LXNocmluazowfQoudHRse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCk7ZmxleDoxfQoudGRhdGV7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LWZhbWlseTp2YXIoLS1tbyl9Ci5idG57cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZDIpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tdHgyKTtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Ci5idG4ucHtiYWNrZ3JvdW5kOnZhcigtLWFjYyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyk7Y29sb3I6I2ZmZn0uYnRuLnA6aG92ZXJ7b3BhY2l0eTouOX0KLmJ0bi5ze2JvcmRlci1jb2xvcjp2YXIoLS1ncm4pO2NvbG9yOnZhcigtLWdybil9Ci5idG4uZHtib3JkZXItY29sb3I6dmFyKC0tcmVkKTtjb2xvcjp2YXIoLS1yZWQpfQoudGJ0bntwYWRkaW5nOjVweCA5cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQyKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNXB4fQoudGJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpfQoudWJkZ3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo3cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtwYWRkaW5nOjRweCAxMHB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtjdXJzb3I6cG9pbnRlcn0KLnViZGc6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmNvbntwYWRkaW5nOjIycHg7ZmxleDoxfQouc2Vje2Rpc3BsYXk6bm9uZX0uc2VjLmFjdGl2ZXtkaXNwbGF5OmJsb2NrfQoKLmtne2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDUsMWZyKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjIwcHh9Ci5rY3tiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE0cHggMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Ci5rYzpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYnJkMil9Ci5rbHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDdlbTtmb250LXdlaWdodDo1MDA7bWFyZ2luLWJvdHRvbTo2cHh9Ci5rdntmb250LXNpemU6MjFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKX0KLmt2Lmd7Y29sb3I6dmFyKC0tZ3JuKX0ua3YuYXtjb2xvcjp2YXIoLS1hbWIpfS5rdi5hY3tjb2xvcjp2YXIoLS1hY2MyKX0ua3Yucntjb2xvcjp2YXIoLS1yZWQpfQoua3N7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmtnMntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LTIwcHg7cmlnaHQ6LTIwcHg7d2lkdGg6NTVweDtoZWlnaHQ6NTVweDtib3JkZXItcmFkaXVzOjUwJTtvcGFjaXR5Oi4wN30KCi5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7cGFkZGluZzoxM3B4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwfQoucHR7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KX0KLnBhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWFjYzIpO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTA4LDk5LDI1NSwuMik7YmFja2dyb3VuZDpub25lO2ZvbnQtZmFtaWx5OnZhcigtLWZuKX0KLnBhOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ2xvdyl9Ci5sb2FkaW5ne3BhZGRpbmc6MzZweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxM3B4fQoubG9hZGluZzo6YWZ0ZXJ7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlcjoycHggc29saWQgdmFyKC0tYnJkMik7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1hY2MpO2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjpzcGluIC43cyBsaW5lYXIgaW5maW5pdGU7bWFyZ2luLWxlZnQ6OHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KQGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19Ci5lbXB7cGFkZGluZzo0MHB4IDIwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5laXtmb250LXNpemU6MzBweDttYXJnaW4tYm90dG9tOjEwcHg7b3BhY2l0eTouNH0KLmV0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eDIpO21hcmdpbi1ib3R0b206NHB4fQouZXN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjE0cHh9CgoucHJ7cGFkZGluZzoxMXB4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG8gYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci5wcjpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0ucHI6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLnBue2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCl9LnBte2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoxcHh9Ci5wdGFnc3tkaXNwbGF5OmZsZXg7Z2FwOjRweDttYXJnaW4tdG9wOjRweDtmbGV4LXdyYXA6d3JhcH0KLnRhZ3tmb250LXNpemU6MTBweDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtd2VpZ2h0OjUwMH0KLnRhZy53ZWJ7YmFja2dyb3VuZDp2YXIoLS1iZGltKTtjb2xvcjp2YXIoLS1ibHUpfS50YWcuZGVzaWdue2JhY2tncm91bmQ6dmFyKC0tZ2xvdyk7Y29sb3I6dmFyKC0tYWNjMil9Ci50YWcuc2Vve2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKX0udGFnLnNvY2lhbHtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDExNCwxODIsLjEyKTtjb2xvcjojZjQ3MmI2fQoudGFnLmhvc3Rpbmd7YmFja2dyb3VuZDp2YXIoLS1hZGltKTtjb2xvcjp2YXIoLS1hbWIpfS50YWcucnVzaHtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOnZhcigtLXJlZCl9Ci5zcHtmb250LXNpemU6MTBweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtd2VpZ2h0OjUwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5zcC1he2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKX0uc3AtbntiYWNrZ3JvdW5kOnZhcigtLWJkaW0pO2NvbG9yOnZhcigtLWJsdSl9Ci5zcC1ye2JhY2tncm91bmQ6dmFyKC0tYWRpbSk7Y29sb3I6dmFyKC0tYW1iKX0uc3AtZHtiYWNrZ3JvdW5kOnJnYmEoMTI4LDEyOCwxMjgsLjEpO2NvbG9yOnZhcigtLXR4Myl9Ci5hbXR7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5hdHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4KX0KLmFye2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLWdybik7bWFyZ2luLXRvcDoxcHh9LmFwe2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLWFtYik7bWFyZ2luLXRvcDoxcHh9Ci5kbGN7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5kbGR7Zm9udC1zaXplOjExcHg7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4Mil9LmRsZC51e2NvbG9yOnZhcigtLXJlZCk7Zm9udC13ZWlnaHQ6NTAwfQouZGxue2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoxcHh9LmRsbi51e2NvbG9yOnZhcigtLXJlZCl9Ci5wYntoZWlnaHQ6M3B4O2JhY2tncm91bmQ6dmFyKC0tc3VyMyk7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3c6aGlkZGVufQoucGJme2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6MnB4fQoKLmcye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDMwMHB4O2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTZweH0KLmcze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4fQouZzIye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTZweDttYXJnaW4tYm90dG9tOjE2cHh9CgoudGl7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo5cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci50aTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0udGk6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLnRja3t3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkMik7ZmxleC1zaHJpbms6MDttYXJnaW4tdG9wOjFweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjlweH0KLnRjay5kb25le2JhY2tncm91bmQ6dmFyKC0tZ3JuKTtib3JkZXItY29sb3I6dmFyKC0tZ3JuKTtjb2xvcjojZmZmfQoudHR4e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mik7ZmxleDoxO2xpbmUtaGVpZ2h0OjEuNH0udHR4LmRvbmV7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtjb2xvcjp2YXIoLS10eDMpfQoudGFzc3tmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS1hY2MyKTtiYWNrZ3JvdW5kOnZhcigtLWdsb3cpO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjB9Cgoubmkye3BhZGRpbmc6MTBweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci5uaTI6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9Lm5pMjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpfQoubnR7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KX0KLm5we2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHg7bGluZS1oZWlnaHQ6MS40O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbH0KLm5me2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6NHB4O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myl9Ci5haXtwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2dhcDo5cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0KLmFpOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQouYWF2e3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXgtc2hyaW5rOjB9Ci5hdHh7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjQ7ZmxleDoxfS5hdHggc3Ryb25ne2NvbG9yOnZhcigtLXR4KTtmb250LXdlaWdodDo1MDB9Ci5hdG17Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjFweDtmb250LWZhbWlseTp2YXIoLS1tbyl9Ci5kbGl7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHh9Ci5kbGk6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9Ci5kbGQye3dpZHRoOjdweDtoZWlnaHQ6N3B4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Ci5kbGlue2ZsZXg6MTttaW4td2lkdGg6MH0uZGxubXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpfS5kbG10e2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoxcHh9Ci5kbGJkZ3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO3doaXRlLXNwYWNlOm5vd3JhcH0KLmRsYmRnLnV7Y29sb3I6dmFyKC0tcmVkKX0uZGxiZGcuc3tjb2xvcjp2YXIoLS1hbWIpfS5kbGJkZy5ve2NvbG9yOnZhcigtLWdybil9Ci5mcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcn0KLmZyOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQouZmx7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKX0uZnZ7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtZmFtaWx5OnZhcigtLW1vKX0KLmZ2Lmd7Y29sb3I6dmFyKC0tZ3JuKX0uZnYuYXtjb2xvcjp2YXIoLS1hbWIpfS5mdi5ye2NvbG9yOnZhcigtLXJlZCl9Ci5jaGlwc3tkaXNwbGF5OmZsZXg7Z2FwOjVweDtmbGV4LXdyYXA6d3JhcH0KLmNoaXB7Zm9udC1zaXplOjExcHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6MjBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Y29sb3I6dmFyKC0tdHgzKTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOm5vbmU7dHJhbnNpdGlvbjphbGwgLjE1c30KLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWJyZDIpO2NvbG9yOnZhcigtLXR4Mil9LmNoaXAuYWN0aXZle2JhY2tncm91bmQ6dmFyKC0tZ2xvdyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTA4LDk5LDI1NSwuMjUpO2NvbG9yOnZhcigtLWFjYzIpfQouaGd7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgyNjVweCwxZnIpKTtnYXA6MTNweH0KLmhjYXJke2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTVweH0KLmhjYXJkLndhcm57Ym9yZGVyLWNvbG9yOnZhcigtLWFtYil9Ci5oc3R7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCA5cHh9Ci5oc2x7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjJweH0uaHN2e2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCl9Ci5zc2wtb2t7Y29sb3I6dmFyKC0tZ3JuKX0uc3NsLXdhcm57Y29sb3I6dmFyKC0tYW1iKX0uc3NsLWJhZHtjb2xvcjp2YXIoLS1yZWQpfQouY2d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgyNDVweCwxZnIpKTtnYXA6MTNweH0KLmNje2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTVweDtjdXJzb3I6cG9pbnRlcn0KLmNjOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1icmQyKX0KLnB3cntwYWRkaW5nOjExcHggMTdweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci5wd3I6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0ucHdyOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQoucHdze2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCk7ZmxleDoxfQoucHd1e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myl9Ci5wd217Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4Myk7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXN9Ci5wd206aG92ZXJ7Y29sb3I6dmFyKC0tYWNjMik7YmFja2dyb3VuZDp2YXIoLS1nbG93KX0KLnB3dG9we3BhZGRpbmc6MTNweCAxN3B4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcH0KLnB3Z3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDI1MHB4LDFmcikpO2dhcDoxMnB4O3BhZGRpbmc6MTRweCAxN3B4fQoucHdjbGllbnR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzfQoucHdjbGllbnQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyk7YmFja2dyb3VuZDp2YXIoLS1nbG93KX0KLnB3Y257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjNweH0KLnB3Y217Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTtsaW5lLWhlaWdodDoxLjQ1fQoucHdjc3RhdHtkaXNwbGF5OmZsZXg7Z2FwOjdweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjExcHh9Ci5wd2NoaXB7Zm9udC1zaXplOjEwcHg7cGFkZGluZzozcHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2NvbG9yOnZhcigtLXR4Myl9Ci5wd2hlYWR7cGFkZGluZzoxM3B4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO2JhY2tncm91bmQ6dmFyKC0tc3VyMil9Ci5wd3RpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCl9Ci5wd3N1Yntmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4fQoub3R7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Ci5vdCB0aHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDhlbTtwYWRkaW5nOjEwcHggMTVweDt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtmb250LXdlaWdodDo1MDB9Ci5vdCB0ZHtwYWRkaW5nOjExcHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mil9Ci5vdCB0cjpsYXN0LWNoaWxkIHRke2JvcmRlci1ib3R0b206bm9uZX0ub3QgdHI6aG92ZXIgdGR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Ci5vYnRue2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmc6M3B4IDhweDtib3JkZXItcmFkaXVzOjVweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7YmFja2dyb3VuZDpub25lO2NvbG9yOnZhcigtLXR4Myk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO3RyYW5zaXRpb246YWxsIC4xNXM7bWFyZ2luLXJpZ2h0OjRweH0KLm9idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Ci5yZ3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHh9Ci5icntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206OXB4fQouYnJse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7d2lkdGg6MTEwcHg7ZmxleC1zaHJpbms6MH0KLmJydHtmbGV4OjE7aGVpZ2h0OjdweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbn0KLmJyZntoZWlnaHQ6MTAwJTtib3JkZXItcmFkaXVzOjRweDt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfQouYnJ2e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eDIpO21pbi13aWR0aDo3MHB4O3RleHQtYWxpZ246cmlnaHR9Ci51cntwYWRkaW5nOjEycHggMTdweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci51cjpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0udXI6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLnNpe2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6NnB4IDExcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTJweDtvdXRsaW5lOm5vbmU7d2lkdGg6MTU1cHg7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30KLnNpOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoubW9kZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIzMHB4LDFmcikpO2dhcDoxMnB4O3BhZGRpbmc6MTZweH0KLm1vZGNhcmR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4fQoubW9kbmFtZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpfQoubW9kaGludHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6M3B4fQouc3d7d2lkdGg6NDRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjMwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQyKTtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2ZsZXgtc2hyaW5rOjB9Ci5zdzpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6dmFyKC0tdHgzKTt0b3A6MnB4O2xlZnQ6M3B4O3RyYW5zaXRpb246LjE4c30KLnN3Lm9ue2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Ym9yZGVyLWNvbG9yOnJnYmEoMzQsMTk3LDk0LC4zNSl9Ci5zdy5vbjpiZWZvcmV7bGVmdDoyMXB4O2JhY2tncm91bmQ6dmFyKC0tZ3JuKX0KLmFkbWlubm90ZXttYXJnaW46MTZweDtwYWRkaW5nOjEycHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjV9Ci5jYWxne2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDMwMHB4O2dhcDoxOHB4O2FsaWduLWl0ZW1zOnN0YXJ0fQouY2FsZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg3LDFmcik7Z2FwOjNweH0KLmNhbGx7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjVweCAwO2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Ci5jYWxkYXl7bWluLWhlaWdodDo2OHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo3cHg7cGFkZGluZzo1cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cztvdmVyZmxvdzpoaWRkZW59Ci5jYWxkYXk6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyk7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmNhbGRheS50b2RheXtib3JkZXItY29sb3I6dmFyKC0tYWNjKTtiYWNrZ3JvdW5kOnZhcigtLWdsb3cpfQouY2FsZGF5Lm9te29wYWNpdHk6LjM7cG9pbnRlci1ldmVudHM6bm9uZX0KLmNhbGRheS5zZWx7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYzIpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMTY3LDEzOSwyNTAsLjIpfQouY2FsZG57Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjNweH0KLmNhbGRheS50b2RheSAuY2FsZG57Y29sb3I6dmFyKC0tYWNjMil9Ci5jYWxldntmb250LXNpemU6OXB4O3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjNweDttYXJnaW4tYm90dG9tOjFweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZDp2YXIoLS1nbG93KTtjb2xvcjp2YXIoLS1hY2MyKX0KLm1ve2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNTUpO3otaW5kZXg6OTk5ODthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0KLm1vLm9wZW57ZGlzcGxheTpmbGV4fQoubWJveHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyNHB4O3dpZHRoOjUyMHB4O21heC13aWR0aDo5NnZ3O21heC1oZWlnaHQ6OTB2aDtvdmVyZmxvdy15OmF1dG87YW5pbWF0aW9uOmZpIC4ycyBlYXNlO2JveC1zaGFkb3c6dmFyKC0tc2hkKX0KLm1ib3ggaDN7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NTAwO21hcmdpbi1ib3R0b206MTdweDtjb2xvcjp2YXIoLS10eCl9Ci5tZnttYXJnaW4tYm90dG9tOjExcHh9Lm1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjRweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW19Ci5tZiBpbnB1dCwubWYgc2VsZWN0LC5tZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4IDEwcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTJweDtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30KLm1mIGlucHV0OmZvY3VzLC5tZiBzZWxlY3Q6Zm9jdXMsLm1mIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoubWYgc2VsZWN0IG9wdGlvbntiYWNrZ3JvdW5kOnZhcigtLXN1cil9Ci5tZ3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjlweH0KLm1he2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tdG9wOjE2cHh9Ci50b2FzdHtwb3NpdGlvbjpmaXhlZDtib3R0b206MjJweDtyaWdodDoyMnB4O2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZDIpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEwcHggMTZweDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eCk7ei1pbmRleDo5OTk5O2Rpc3BsYXk6bm9uZTthbmltYXRpb246c3UgLjNzIGVhc2U7Ym94LXNoYWRvdzp2YXIoLS1zaGQpfQoudG9hc3Quc2hvd3tkaXNwbGF5OmJsb2NrfS50b2FzdC5va3tib3JkZXItY29sb3I6dmFyKC0tZ3JuKTtjb2xvcjp2YXIoLS1ncm4pfS50b2FzdC5lcnJ7Ym9yZGVyLWNvbG9yOnZhcigtLXJlZCk7Y29sb3I6dmFyKC0tcmVkKX0KQGtleWZyYW1lcyBmaXtmcm9te29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19CkBrZXlmcmFtZXMgc3V7ZnJvbXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjBweCl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX0KOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHh9Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtib3JkZXItcmFkaXVzOjJweH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9Imx3IiBpZD0ibHciPgogIDxkaXYgY2xhc3M9ImxiIj4KICAgIDxpbWcgY2xhc3M9Imxsb2dvIiBzcmM9Imh0dHBzOi8vd2VidHJpeGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNC93d3d3LnBuZyIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJyIgYWx0PSIiPgogICAgPGRpdiBjbGFzcz0ibHRpdGxlIj5XZWJ0cml4aWEgSHViPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsc3ViIj7QktC70LXQt9GC0LUg0YEg0LLQsNGI0LjRjyDQsNC60LDRg9C90YI8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFpbmQiIHN0eWxlPSJmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaDtnYXA6NnB4Ij4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgIDxkaXYgY2xhc3M9ImFkb3QiIGlkPSJhZG90Ij48L2Rpdj4KICAgICAgPHNwYW4gaWQ9ImFzdHMiIHN0eWxlPSJmbGV4OjEiPtCh0LLRitGA0LfQstCwINGB0LUuLi48L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4Ij4KICAgICAgPGlucHV0IGlkPSJhcGlVcmxJbnB1dCIgcGxhY2Vob2xkZXI9Imh0dHBzOi8vLi4uIiBzdHlsZT0iZmxleDoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eDMpIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpY2hhbmdlQXBpKCkiPgogICAgICA8YnV0dG9uIG9uY2xpY2s9ImNoYW5nZUFwaSgpIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6NXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKSI+0KHQvNC10L3QuDwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZiI+PGxhYmVsPtCf0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC40LzQtTwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJsdSIgcGxhY2Vob2xkZXI9ImFkbWluIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpbG9naW4oKSI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZiI+PGxhYmVsPtCf0LDRgNC+0LvQsDwvbGFiZWw+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBpZD0ibHAiIHBsYWNlaG9sZGVyPSLigKLigKLigKLigKLigKLigKLigKLigKIiIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJylsb2dpbigpIj48L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImxidG4iIG9uY2xpY2s9ImxvZ2luKCkiPtCS0LvQtdC3IOKGkjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibGVyciIgaWQ9ImxlcnIiPtCT0YDQtdGI0L3QviDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUg0LjQu9C4INC/0LDRgNC+0LvQsDwvZGl2PgogIDwvZGl2PgogIDxidXR0b24gY2xhc3M9InRidG4yIiBvbmNsaWNrPSJ0Z2woKSI+4piA77iPIC8g8J+MmSDQodC80LXQvdC4INGC0LXQvNCwPC9idXR0b24+CjwvZGl2PgoKPGFzaWRlIGNsYXNzPSJzYiIgaWQ9InNiIiBzdHlsZT0iZGlzcGxheTpub25lIj4KICA8ZGl2IGNsYXNzPSJzbG9nbyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly93ZWJ0cml4aWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA0L3d3d3cucG5nIiBvbmVycm9yPSJ0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnIiBzdHlsZT0iaGVpZ2h0OjI2cHgiIGFsdD0iIj4KICAgIDxkaXY+PGRpdiBjbGFzcz0ibHN1YjIiPkFnZW5jeTwvZGl2PjxkaXYgY2xhc3M9Imx2ZXIiPkh1YiB2NC4wPC9kaXY+PC9kaXY+CiAgPC9kaXY+CiAgPG5hdj4KICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCe0YHQvdC+0LLQvdC+PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSBhY3RpdmUiIG9uY2xpY2s9ImdvKCdkYXNoYm9hcmQnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7irKE8L3NwYW4+RGFzaGJvYXJkPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InByb2plY3RzIiBvbmNsaWNrPSJnbygncHJvamVjdHMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7il4g8L3NwYW4+0J/RgNC+0LXQutGC0Lg8c3BhbiBjbGFzcz0ibmJhZGdlIGciIGlkPSJuYi1wIj4wPC9zcGFuPjwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJjbGllbnRzIiBvbmNsaWNrPSJnbygnY2xpZW50cycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXjjwvc3Bhbj7QmtC70LjQtdC90YLQuDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJmaW5hbmNlIiBvbmNsaWNrPSJnbygnZmluYW5jZScsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXhzwvc3Bhbj7QpNC40L3QsNC90YHQuDwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibnNlYyI+0KDQsNCx0L7RgtCwPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InRhc2tzIiBvbmNsaWNrPSJnbygndGFza3MnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7ilrc8L3NwYW4+0JfQsNC00LDRh9C4PHNwYW4gY2xhc3M9Im5iYWRnZSIgaWQ9Im5iLXQiPjA8L3NwYW4+PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9Im9mZmVycyIgb25jbGljaz0iZ28oJ29mZmVycycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXuzwvc3Bhbj7QntGE0LXRgNGC0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iY29udHJhY3RzIiBvbmNsaWNrPSJnbygnY29udHJhY3RzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4peIPC9zcGFuPtCU0L7Qs9C+0LLQvtGA0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iY2FsZW5kYXIiIG9uY2xpY2s9ImdvKCdjYWxlbmRhcicsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfk4U8L3NwYW4+0JrQsNC70LXQvdC00LDRgDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJpbnZvaWNpbmciIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdpbnZvaWNlcy5odG1sJywnX2JsYW5rJykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfp748L3NwYW4+0KTQsNC60YLRg9GA0LjRgNCw0L3QtTwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJocl9yZXF1ZXN0cyIgb25jbGljaz0id2luZG93Lm9wZW4oJ2hyLmh0bWwnLCdfYmxhbmsnKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+ThDwvc3Bhbj7QnNC+0LvQsdC4PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9IndheWJpbGxzIiBvbmNsaWNrPSJ3aW5kb3cub3Blbignd2F5YmlsbHMuaHRtbCcsJ19ibGFuaycpIj48c3BhbiBjbGFzcz0ibmljIj7wn5qaPC9zcGFuPtCf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LU8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iaHVic19tYW5hZ2VtZW50IiBvbmNsaWNrPSJ3aW5kb3cub3BlbignaHVicy5odG1sJywnX2JsYW5rJykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfj6I8L3NwYW4+0J/QsNGA0YLQvdGM0L7RgNGB0LrQuCDRhdGK0LHQvtCy0LU8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCQ0LPQtdC90YbQuNGPPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9Imhvc3RpbmciIG9uY2xpY2s9ImdvKCdob3N0aW5nJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4qyhPC9zcGFuPtCl0L7RgdGC0LjQvdCz0Lg8c3BhbiBjbGFzcz0ibmJhZGdlIGEiIGlkPSJuYi1oIj4wPC9zcGFuPjwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJwYXNzd29yZHMiIG9uY2xpY2s9ImdvKCdwYXNzd29yZHMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7il448L3NwYW4+0JTQvtGB0YLRitC/0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0ibm90ZXMiIG9uY2xpY2s9ImdvKCdub3RlcycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXuzwvc3Bhbj7QkdC10LvQtdC20LrQuDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJyZXBvcnRzIiBvbmNsaWNrPSJnbygncmVwb3J0cycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKWtzwvc3Bhbj7QntGC0YfQtdGC0Lg8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCV0LrQuNC/PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InByZXNlbmNlIiBvbmNsaWNrPSJnbygncHJlc2VuY2UnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7wn5+iPC9zcGFuPtCf0YDQuNGB0YrRgdGC0LLQuNC1PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InRhcmdldHMiIG9uY2xpY2s9ImdvKCd0YXJnZXRzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+Orzwvc3Bhbj7QotCw0YDQs9C10YLQuDwvYnV0dG9uPgogICAgPGRpdiBpZD0iYWRtbmF2IiBzdHlsZT0iZGlzcGxheTpub25lIj4KICAgICAgPGRpdiBjbGFzcz0ibnNlYyI+0JDQtNC80LjQvTwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9IndvcmtyZXBvcnQiIG9uY2xpY2s9ImdvKCd3b3JrcmVwb3J0Jyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4o+xPC9zcGFuPtCg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgjwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InVzZXJzIiBvbmNsaWNrPSJnbygndXNlcnMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7wn5GkPC9zcGFuPtCf0L7RgtGA0LXQsdC40YLQtdC70Lg8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibmkiIG9uY2xpY2s9ImdvKCdtb2R1bGVzX3NldHRpbmdzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4pqZPC9zcGFuPtCc0L7QtNGD0LvQuDwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJuaSIgb25jbGljaz0ib3BlbkxpY2Vuc2VQYW5lbCgpIj48c3BhbiBjbGFzcz0ibmljIj7ilqM8L3NwYW4+0JvQuNGG0LXQvdC30Lg8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9InNib3QiPgogICAgPGRpdiBjbGFzcz0ibnNlYyIgc3R5bGU9InBhZGRpbmctdG9wOjAiPtCV0LrQuNC/PC9kaXY+CiAgICA8ZGl2IGlkPSJ0bGlzdCI+PC9kaXY+CiAgPC9kaXY+CjwvYXNpZGU+Cgo8bWFpbiBjbGFzcz0ibWFpbiIgaWQ9ImFwcCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CiAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgIDxkaXYgY2xhc3M9InR0bCIgaWQ9InB0aXRsZSI+RGFzaGJvYXJkPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ0ZGF0ZSIgaWQ9InRkYXRlIj48L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9InRidG4iIG9uY2xpY2s9InRnbCgpIiBpZD0idGJ0biI+4piA77iPPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJ1YmRnIiBpZD0idWJkZyI+PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9Im1vZGFsKCdwcm9qZWN0JykiPisg0J/RgNC+0LXQutGCPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0id2luZG93Lm9wZW4oJ29mZmVyLmh0bWw/dHlwZT1vbmVfdGltZScsJ19ibGFuaycpIj7iipUg0J7RhNC10YDRgtCwPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9Im91dCgpIiBzdHlsZT0icGFkZGluZzo2cHggMTBweCI+4oqXPC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29uIj4KCiAgICA8ZGl2IGlkPSJzZWMtZGFzaGJvYXJkIiBjbGFzcz0ic2VjIGFjdGl2ZSI+CiAgICAgIDxkaXYgY2xhc3M9ImtnIj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCf0YDQvtC10LrRgtC4PC9kaXY+PGRpdiBjbGFzcz0ia3YgYWMiIGlkPSJrcCI+4oCUPC9kaXY+PGRpdiBjbGFzcz0ia3MiPtCw0LrRgtC40LLQvdC4PC9kaXY+PGRpdiBjbGFzcz0ia2cyIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1hY2MpIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0YTQtdGA0LjRgNCw0L3QvjwvZGl2PjxkaXYgY2xhc3M9Imt2IiBpZD0ia28iPuKAlDwvZGl2PjxkaXYgY2xhc3M9ImtzIj7QvtCx0YnQvjwvZGl2PjxkaXYgY2xhc3M9ImtnMiIgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmx1KSI+PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7Qn9C+0LvRg9GH0LXQvdC+PC9kaXY+PGRpdiBjbGFzcz0ia3YgZyIgaWQ9ImtyIj7igJQ8L2Rpdj48ZGl2IGNsYXNzPSJrcyI+0L/QvtGC0LLRitGA0LTQtdC90L48L2Rpdj48ZGl2IGNsYXNzPSJrZzIiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWdybikiPjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J7Rh9Cw0LrQstCwINGB0LU8L2Rpdj48ZGl2IGNsYXNzPSJrdiBhIiBpZD0ia3BuIj7igJQ8L2Rpdj48ZGl2IGNsYXNzPSJrcyI+0L3QtdC/0LvQsNGC0LXQvdC+PC9kaXY+PGRpdiBjbGFzcz0ia2cyIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1hbWIpIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCX0LDQtNCw0YfQuDwvZGl2PjxkaXYgY2xhc3M9Imt2IHIiIGlkPSJrdCI+4oCUPC9kaXY+PGRpdiBjbGFzcz0ia3MiPtC90LXQt9Cw0LLRitGA0YjQtdC90Lg8L2Rpdj48ZGl2IGNsYXNzPSJrZzIiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXJlZCkiPjwvZGl2PjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZzIiPgogICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCf0L7RgdC70LXQtNC90Lgg0L/RgNC+0LXQutGC0Lg8L2Rpdj48YnV0dG9uIGNsYXNzPSJwYSIgb25jbGljaz0iZ28oJ3Byb2plY3RzJyxudWxsKSI+0JLQuNC2INCy0YHQuNGH0LrQuDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImRwIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7imqEg0KHRgNC+0LrQvtCy0LU8L2Rpdj48L2Rpdj48ZGl2IGlkPSJkZCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfkrAg0KTQuNC90LDQvdGB0Lg8L2Rpdj48L2Rpdj48ZGl2IGlkPSJkZiI+PC9kaXY+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJnMyI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+4pyTINCX0LDQtNCw0YfQuDwvZGl2PjxidXR0b24gY2xhc3M9InBhIiBvbmNsaWNrPSJtb2RhbCgndGFzaycpIj4rINCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImR0Ij48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfk4sg0JHQtdC70LXQttC60Lg8L2Rpdj48L2Rpdj48ZGl2IGlkPSJkbiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7in7Mg0JDQutGC0LjQstC90L7RgdGCPC9kaXY+PC9kaXY+PGRpdiBpZD0iZGEiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic2VjLXByb2plY3RzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QktGB0LjRh9C60Lgg0L/RgNC+0LXQutGC0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+PGlucHV0IGNsYXNzPSJzaSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9ItCi0YrRgNGB0LguLi4iIG9uaW5wdXQ9ImZwKHRoaXMudmFsdWUpIj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibW9kYWwoJ3Byb2plY3QnKSI+KyDQndC+0LI8L2J1dHRvbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJmcCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1jbGllbnRzIiBjbGFzcz0ic2VjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTRweCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiIGlkPSJjcyI+4oCUPC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnY2xpZW50JykiPisg0J3QvtCyINC60LvQuNC10L3RgjwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9ImNnIiBpZD0iY2ciPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtZmluYW5jZSIgY2xhc3M9InNlYyI+CiAgICAgIDxkaXYgY2xhc3M9ImtnIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0LHQvtGA0L7RgiDQvtCx0YnQvjwvZGl2PjxkaXYgY2xhc3M9Imt2IGFjIiBpZD0iZnQiPuKAlDwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J/QvtC70YPRh9C10L3QvjwvZGl2PjxkaXYgY2xhc3M9Imt2IGciIGlkPSJmciI+4oCUPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QntGH0LDQutCy0LAg0YHQtTwvZGl2PjxkaXYgY2xhc3M9Imt2IGEiIGlkPSJmcG4iPuKAlDwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0JDQsdC+0L3QsNC80LXQvdGC0Lgv0LzQtdGBPC9kaXY+PGRpdiBjbGFzcz0ia3YgZyIgaWQ9ImZzIj7igJQ8L2Rpdj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImcyMiI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J3QtdC/0LvQsNGC0LXQvdC4PC9kaXY+PC9kaXY+PGRpdiBpZD0iZnUiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCQ0LHQvtC90LDQvNC10L3RgtC4PC9kaXY+PC9kaXY+PGRpdiBpZD0iZnNsIj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXRhc2tzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Ql9Cw0LTQsNGH0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+PGRpdiBjbGFzcz0iY2hpcHMiPjxkaXYgY2xhc3M9ImNoaXAgYWN0aXZlIiBvbmNsaWNrPSJjaGlwUyh0aGlzKSI+0JLRgdC40YfQutC4PC9kaXY+PGRpdiBjbGFzcz0iY2hpcCIgb25jbGljaz0iY2hpcFModGhpcykiPtCd0LXQt9Cw0LLRitGA0YjQtdC90Lg8L2Rpdj48ZGl2IGNsYXNzPSJjaGlwIiBvbmNsaWNrPSJjaGlwUyh0aGlzKSI+0KHQv9C10YjQvdC4PC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCd0YXNrJykiPisg0JfQsNC00LDRh9CwPC9idXR0b24+PC9kaXY+PC9kaXY+PGRpdiBpZD0idGYiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtb2ZmZXJzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QntGE0LXRgNGC0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcCI+PGlucHV0IGNsYXNzPSJzaSIgc3R5bGU9IndpZHRoOjIyMHB4IiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0i0KLRitGA0YHQuCDQvtGE0LXRgNGC0LAuLi4iIG9uaW5wdXQ9Ik9GLnE9dGhpcy52YWx1ZTtyT2ZmZXJzKCkiPjxzZWxlY3QgY2xhc3M9InNpIiBzdHlsZT0id2lkdGg6MTQ1cHgiIG9uY2hhbmdlPSJPRi5zdGF0dXM9dGhpcy52YWx1ZTtyT2ZmZXJzKCkiPjxvcHRpb24gdmFsdWU9IiI+0JLRgdC40YfQutC4PC9vcHRpb24+PG9wdGlvbj7Qp9Cw0LrQsNGJ0LA8L29wdGlvbj48b3B0aW9uPtCf0YDQuNC10YLQsDwvb3B0aW9uPjxvcHRpb24+0J7RgtC60LDQt9Cw0L3QsDwvb3B0aW9uPjwvc2VsZWN0PjxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJ3aW5kb3cub3Blbignb2ZmZXIuaHRtbD90eXBlPW1vbnRobHknLCdfYmxhbmsnKSI+KyDQnNC10YHQtdGH0L3QsDwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJ3aW5kb3cub3Blbignb2ZmZXIuaHRtbD90eXBlPW9uZV90aW1lJywnX2JsYW5rJykiPuKKlSDQndC+0LLQsCDQvtGE0LXRgNGC0LA8L2J1dHRvbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJvZiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1jb250cmFjdHMiIGNsYXNzPSJzZWMiPjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCU0L7Qs9C+0LLQvtGA0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCdjb250cmFjdCcpIj4rINCd0L7QsjwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93Lm9wZW4oJ2NvbnRyYWN0cy5odG1sJywnX2JsYW5rJykiPtCT0LXQvdC10YDQuNGA0LDQuSDQtNC+0LPQvtCy0L7RgDwvYnV0dG9uPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImNmIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLWNhbGVuZGFyIiBjbGFzcz0ic2VjIj48ZGl2IGlkPSJjYWxmIj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1ob3N0aW5nIiBjbGFzcz0ic2VjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTRweCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiIGlkPSJocyI+4oCUPC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnaG9zdGluZycpIj4rINCd0L7QsiDRhdC+0YHRgtC40L3QszwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9ImhnIiBpZD0iaGciPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtcGFzc3dvcmRzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXY+PGRpdiBjbGFzcz0icHQiPvCflJAg0JTQvtGB0YLRitC/0Lgg0L/QviDQutC70LjQtdC90YLQuDwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPtCi0YrRgNGB0Lgg0LrQu9C40LXQvdGCLCDQvtGC0LLQvtGA0Lgg0LPQviDQuCDQstC40LYg0YHQsNC80L4g0L3QtdCz0L7QstC40YLQtSDQtNC+0YHRgtGK0L/QuC48L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblBhc3NNb2RhbCgpIj4rINCU0L7QsdCw0LLQuCDQtNC+0YHRgtGK0L88L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSJwd3RvcCI+PGlucHV0IGNsYXNzPSJzaSIgaWQ9InB3U2VhcmNoIiBzdHlsZT0id2lkdGg6MjYwcHgiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLQotGK0YDRgdC4INC60LvQuNC10L3Rgi4uLiIgb25pbnB1dD0iUFcuc2VhcmNoPXRoaXMudmFsdWU7clBhc3N3b3JkcygpIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9IlBXLmNsaWVudD0nJztQVy5zZWFyY2g9Jyc7dmFyIHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B3U2VhcmNoJyk7aWYocylzLnZhbHVlPScnO3JQYXNzd29yZHMoKSI+0JLRgdC40YfQutC4INC60LvQuNC10L3RgtC4PC9idXR0b24+PC9kaXY+PGRpdiBpZD0icHdsIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLW5vdGVzIiBjbGFzcz0ic2VjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTRweCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiPtCR0LXQu9C10LbQutC4PC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnbm90ZScpIj4rINCd0L7QstCwPC9idXR0b24+PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNHB4IiBpZD0ibmciPjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXJlcG9ydHMiIGNsYXNzPSJzZWMiPjxkaXYgY2xhc3M9InJnIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Qn9GA0LjRhdC+0LTQuCDQv9C+INC80LXRgdC10YbQuDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InBhZGRpbmc6MTVweCAxN3B4IiBpZD0icnIiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCf0L4g0YLQuNC/INGD0YHQu9GD0LPQsDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InBhZGRpbmc6MTVweCAxN3B4IiBpZD0icnMiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCi0L7QvyDQutC70LjQtdC90YLQuDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InBhZGRpbmc6MTVweCAxN3B4IiBpZD0icmMiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCd0LDRgtC+0LLQsNGA0LLQsNC90LUg0LXQutC40L88L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjE1cHggMTdweCIgaWQ9InJ0Ij48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1wcmVzZW5jZSIgY2xhc3M9InNlYyI+PGRpdiBpZD0icHJlZiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy10YXJnZXRzIiBjbGFzcz0ic2VjIj48ZGl2IGlkPSJ0Z2YiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtd29ya3JlcG9ydCIgY2xhc3M9InNlYyI+PGRpdiBpZD0id3JmIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgoKICAgIDxkaXYgaWQ9InNlYy11c2VycyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+RpCDQn9C+0YLRgNC10LHQuNGC0LXQu9C4PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCduZXdVc2VyJykiPisg0J3QvtCyINGB0LvRg9C20LjRgtC10Ls8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJ1bCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1tb2R1bGVzX3NldHRpbmdzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXY+PGRpdiBjbGFzcz0icHQiPtCc0L7QtNGD0LvQuCDQsiDRgtC+0LfQuCDRhdGK0LE8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4Ij7QkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGK0YIg0LzQvtC20LUg0LTQsCDRgdC60YDQuNCy0LAg0YTRg9C90LrRhtC40Lgg0L7RgiDQu9GP0LLQvtGC0L4g0LzQtdC90Y4g0YHQv9C+0YDQtdC0INC60LvQuNC10L3RgtCwLjwvZGl2PjwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0ick1vZHVsZXMoKSI+0J7QsdC90L7QstC4PC9idXR0b24+PC9kaXY+PGRpdiBpZD0ibW9kbGlzdCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KCiAgPC9kaXY+CjwvbWFpbj4KCjxkaXYgY2xhc3M9Im1vIiBpZD0ibW8iIG9uY2xpY2s9ImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY21vKCkiPjxkaXYgY2xhc3M9Im1ib3giIGlkPSJtYiI+PC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9InRvYXN0IiBpZD0idG9hc3QiPjwvZGl2PgoKPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwp2YXIgQVBJPShmdW5jdGlvbigpewogIHZhciBzYXZlZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3RfYXBpJyk7CiAgaWYoc2F2ZWQpcmV0dXJuIHNhdmVkOwogIHZhciBiYXNlPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL2luZGV4XC5odG1sJC8sJycpLnJlcGxhY2UoL1wvJC8sJycpOwogIHJldHVybiBiYXNlKycvYXBpLnBocCc7Cn0pKCk7CnZhciBDVT1udWxsOwp2YXIgRD17cHJvamVjdHM6W10sdGFza3M6W10sbm90ZXM6W10sY2xpZW50czpbXSxob3N0aW5nOltdLHBhc3N3b3JkczpbXSxvZmZlcnM6W10sY29udHJhY3RzOltdLHVzZXJzOltdLGFjdGl2aXR5OltdfTsKdmFyIFBXPXtjbGllbnQ6Jycsc2VhcmNoOicnLGZvcm1DbGllbnQ6Jyd9Owp2YXIgT0Y9e3E6Jycsc3RhdHVzOicnfTsKdmFyIE1PRFVMRV9MQUJFTFM9ewogIHByb2plY3RzOifQn9GA0L7QtdC60YLQuCcsY2xpZW50czon0JrQu9C40LXQvdGC0LgnLGZpbmFuY2U6J9Ck0LjQvdCw0L3RgdC4Jyx0YXNrczon0JfQsNC00LDRh9C4JyxvZmZlcnM6J9Ce0YTQtdGA0YLQuCcsY29udHJhY3RzOifQlNC+0LPQvtCy0L7RgNC4JywKICBjYWxlbmRhcjon0JrQsNC70LXQvdC00LDRgCcsaW52b2ljaW5nOifQpNCw0LrRgtGD0YDQuNGA0LDQvdC1Jyxocl9yZXF1ZXN0czon0JzQvtC70LHQuCcsd2F5YmlsbHM6J9Cf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LUnLGh1YnNfbWFuYWdlbWVudDon0J/QsNGA0YLQvdGM0L7RgNGB0LrQuCDRhdGK0LHQvtCy0LUnLAogIGhvc3Rpbmc6J9Cl0L7RgdGC0LjQvdCz0LgnLHBhc3N3b3Jkczon0JTQvtGB0YLRitC/0LgnLG5vdGVzOifQkdC10LvQtdC20LrQuCcscmVwb3J0czon0J7RgtGH0LXRgtC4JyxwcmVzZW5jZTon0J/RgNC40YHRitGB0YLQstC40LUnLHRhcmdldHM6J9Ci0LDRgNCz0LXRgtC4JywKICB3b3JrcmVwb3J0OifQoNCw0LHQvtGC0LXQvSDRgNC40L/QvtGA0YInLHVzZXJzOifQn9C+0YLRgNC10LHQuNGC0LXQu9C4Jwp9Owp2YXIgQUJHPXsnYXYtcCc6J3JnYmEoMTA4LDk5LDI1NSwuMjUpJywnYXYtdCc6J3JnYmEoMjAsMTg0LDE2NiwuMjUpJywnYXYtZyc6J3JnYmEoMzQsMTk3LDk0LC4yKScsJ2F2LWEnOidyZ2JhKDI0NSwxNTgsMTEsLjIpJywnYXYtcic6J3JnYmEoMjM5LDY4LDY4LC4yKScsJ2F2LWInOidyZ2JhKDU2LDE4OSwyNDgsLjIpJ307CnZhciBBQ1Y9eydhdi1wJzonI2E3OGJmYScsJ2F2LXQnOicjMmRkNGJmJywnYXYtZyc6JyMyMmM1NWUnLCdhdi1hJzonI2Y1OWUwYicsJ2F2LXInOicjZWY0NDQ0JywnYXYtYic6JyMzOGJkZjgnfTsKCi8vIOKUgOKUgCBUSEVNRSDilIDilIAKZnVuY3Rpb24gdGdsKCl7CiAgdmFyIGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOwogIHZhciBuPWM9PT0nZGFyayc/J2xpZ2h0JzonZGFyayc7CiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScsbik7CiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3d0X3RoZW1lJyxuKTsKICB2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJ0bicpOwogIGlmKGIpYi50ZXh0Q29udGVudD1uPT09J2RhcmsnPyfimIDvuI8nOifwn4yZJzsKfQooZnVuY3Rpb24oKXsKICB2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJ0bicpOwogIHZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKTsKICBpZihiKWIudGV4dENvbnRlbnQ9dD09PSdkYXJrJz8n4piA77iPJzon8J+MmSc7Cn0pKCk7CgovLyDilIDilIAgQVBJIOKUgOKUgAphc3luYyBmdW5jdGlvbiBhZihhY3Rpb24sbWV0aG9kLGJvZHksZXh0cmEpewogIG1ldGhvZD1tZXRob2R8fCdHRVQnO2V4dHJhPWV4dHJhfHwnJzsKICB0cnl7CiAgICB2YXIgbz17bWV0aG9kOm1ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9LGNyZWRlbnRpYWxzOidzYW1lLW9yaWdpbid9OwogICAgaWYoYm9keSlvLmJvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249JythY3Rpb24rZXh0cmEsbyk7CiAgICBpZighci5vaylyZXR1cm4gbnVsbDsKICAgIHZhciBqPWF3YWl0IHIuanNvbigpOwogICAgcmV0dXJuIGoub2s/ai5kYXRhOm51bGw7CiAgfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoYWN0aW9uLGUubWVzc2FnZSk7cmV0dXJuIG51bGw7fQp9CgovLyDilIDilIAgVkVSSUZZIOKUgOKUgAooYXN5bmMgZnVuY3Rpb24oKXsKICB2YXIgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRvdCcpOwogIHZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhc3RzJyk7CiAgdmFyIHI9YXdhaXQgYWYoJ3N0YXRzJyk7CiAgaWYociE9PW51bGwpewogICAgZC5jbGFzc05hbWU9J2Fkb3Qgb2snOwogICAgcy50ZXh0Q29udGVudD0n4pyTINCh0LLRitGA0LfQsNC90L4g4oCUINCy0LvQtdC30YLQtSc7CiAgICBzLnN0eWxlLmNvbG9yPScjMjJjNTVlJzsKICAgIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwaVVybElucHV0Jyk7CiAgICBpZihpbnApaW5wLnZhbHVlPUFQSTsKICB9ZWxzZXsKICAgIGQuY2xhc3NOYW1lPSdhZG90IGVycic7CiAgICBzLnRleHRDb250ZW50PSfinJcg0J3Rj9C80LAg0LLRgNGK0LfQutCwIOKAlCDQstGK0LLQtdC00Lgg0L/RgNCw0LLQuNC70L3QuNGPIFVSTCc7CiAgICBzLnN0eWxlLmNvbG9yPScjZWY0NDQ0JzsKICAgIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwaVVybElucHV0Jyk7CiAgICBpZihpbnApaW5wLnZhbHVlPUFQSTsKICB9Cn0pKCk7CgovLyDilIDilIAgQ0hBTkdFIEFQSSDilIDilIAKZnVuY3Rpb24gY2hhbmdlQXBpKCl7CiAgdmFyIGlucD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBpVXJsSW5wdXQnKTsKICBpZighaW5wfHwhaW5wLnZhbHVlLnRyaW0oKSlyZXR1cm47CiAgdmFyIHVybD1pbnAudmFsdWUudHJpbSgpOwogIGlmKCF1cmwuZW5kc1dpdGgoJy5waHAnKSl1cmw9dXJsLnJlcGxhY2UoL1wvJC8sJycpKycvYXBpLnBocCc7CiAgQVBJPXVybDsKICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd3RfYXBpJyx1cmwpOwogIHZlcmlmeUFwaSgpOwp9CgovLyDilIDilIAgU0VTU0lPTiDilIDilIAKKGZ1bmN0aW9uKCl7CiAgdHJ5ewogICAgdmFyIHM9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnd3RfcycpOwogICAgaWYocyl7dmFyIHU9SlNPTi5wYXJzZShzKTtpZih1JiZ1LmlkKXNob3dBcHAodSk7fQogIH1jYXRjaChlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd3dF9zJyk7fQp9KSgpOwoKLy8g4pSA4pSAIExPR0lOIOKUgOKUgAphc3luYyBmdW5jdGlvbiBsb2dpbigpewogIHZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsdScpLnZhbHVlLnRyaW0oKTsKICB2YXIgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbHAnKS52YWx1ZTsKICBpZighdXx8IXApe3NlcnIoJ9Cf0L7Qv9GK0LvQvdC10YLQtSDQstGB0LjRh9C60Lgg0L/QvtC70LXRgtCwJyk7cmV0dXJuO30KICB2YXIgcj1hd2FpdCBhZignbG9naW4nLCdQT1NUJyx7dXNlcm5hbWU6dSxwYXNzd29yZDpwfSk7CiAgaWYocil7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd3RfcycsSlNPTi5zdHJpbmdpZnkocikpO3Nob3dBcHAocik7fQogIGVsc2V7c2Vycign0JPRgNC10YjQvdC+INC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC40LzQtSDQuNC70Lgg0L/QsNGA0L7Qu9CwJyk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xwJykudmFsdWU9Jyc7fQp9CmZ1bmN0aW9uIHNlcnIobSl7CiAgdmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlcnInKTtlLnRleHRDb250ZW50PW07ZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT0nbm9uZSc7fSwzMDAwKTsKfQpmdW5jdGlvbiBzaG93QXBwKHUpewogIENVPXU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2x3Jykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NiJykuc3R5bGUuZGlzcGxheT0nZmxleCc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLnN0eWxlLmRpc3BsYXk9J2ZsZXgnOwogIGlmKHUuaXNfYWRtaW49PTEpZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbW5hdicpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICB2YXIgY29sPXUuY29sb3J8fCdhdi1wJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndWJkZycpLmlubmVySFRNTD0nPGRpdiBzdHlsZT0id2lkdGg6MjJweDtoZWlnaHQ6MjJweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOicrQUJHW2NvbF0rJztjb2xvcjonK0FDVltjb2xdKyc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6NzAwIj4nKyh1LmluaXRpYWxzfHwnPycpKyc8L2Rpdj48c3Bhbj4nK3UubmFtZSsnPC9zcGFuPicrKHUuaXNfYWRtaW49PTE/JzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojZjU5ZTBiIj7wn5GRPC9zcGFuPic6JycpOwogIGluaXRBcHAoKTsKfQpmdW5jdGlvbiBvdXQoKXsKICBDVT1udWxsO3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3d0X3MnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbHcnKS5zdHlsZS5kaXNwbGF5PSdmbGV4JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2InKS5zdHlsZS5kaXNwbGF5PSdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2x1JykudmFsdWU9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xwJykudmFsdWU9Jyc7Cn0KCi8vIOKUgOKUgCBJTklUIOKUgOKUgApmdW5jdGlvbiBpbml0QXBwKCl7CiAgdmFyIGQ9bmV3IERhdGUoKTsKICB2YXIgZGF5cz1bJ9Cd0LXQtNC10LvRjycsJ9Cf0L7QvdC10LTQtdC70L3QuNC6Jywn0JLRgtC+0YDQvdC40LonLCfQodGA0Y/QtNCwJywn0KfQtdGC0LLRitGA0YLRitC6Jywn0J/QtdGC0YrQuicsJ9Ch0YrQsdC+0YLQsCddOwogIHZhciBtb25zPVsn0Y/QvdGDJywn0YTQtdCyJywn0LzQsNGAJywn0LDQv9GAJywn0LzQsNC5Jywn0Y7QvdC4Jywn0Y7Qu9C4Jywn0LDQstCzJywn0YHQtdC/Jywn0L7QutGCJywn0L3QvtC1Jywn0LTQtdC6J107CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RkYXRlJykudGV4dENvbnRlbnQ9ZGF5c1tkLmdldERheSgpXSsnLCAnK2QuZ2V0RGF0ZSgpKycgJyttb25zW2QuZ2V0TW9udGgoKV0rJyAnK2QuZ2V0RnVsbFllYXIoKTsKICB2YXIgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7CiAgdmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RidG4nKTtpZihiKWIudGV4dENvbnRlbnQ9dD09PSdkYXJrJz8n4piA77iPJzon8J+MmSc7CiAgbG9hZEFsbCgpOwogIGFwcGx5TW9kdWxlVmlzaWJpbGl0eSgpOwp9CgovLyDilIDilIAgTU9EVUxFIFZJU0lCSUxJVFkgKHJlc3BlY3RzIHJlbW90ZSB0b2dnbGVzIGZyb20gd19hZG1pbi5waHAgLyBtYXN0ZXIgaHViKSDilIDilIAKYXN5bmMgZnVuY3Rpb24gYXBwbHlNb2R1bGVWaXNpYmlsaXR5KCl7CiAgdHJ5ewogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZighcnx8IXIubW9kdWxlc19lbmFibGVkKXJldHVybjsKICAgIGlmKHIubGljZW5zZV9zdGF0ZT09PSdsb2NrZWQnfHxyLmxpY2Vuc2Vfc3RhdGU9PT0naW52YWxpZCcpewogICAgICByZW5kZXJMaWNlbnNlTG9jayhyLmxpY2Vuc2VfbWVzc2FnZXx8J9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIG1vZHM9ci5tb2R1bGVzX2VuYWJsZWQ7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb2R1bGVdJykuZm9yRWFjaChmdW5jdGlvbihlbCl7CiAgICAgIHZhciBrZXk9ZWwuZ2V0QXR0cmlidXRlKCdkYXRhLW1vZHVsZScpOwogICAgICBpZihtb2RzLmhhc093blByb3BlcnR5KGtleSkgJiYgIW1vZHNba2V5XSkgZWwuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICAgIGVsc2UgZWwuc3R5bGUuZGlzcGxheT0nJzsKICAgIH0pOwogICAgaWYoci5wcm9kdWN0X25hbWUpewogICAgICB2YXIgbHN1Yj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubHN1YjInKTsKICAgICAgaWYobHN1YikgbHN1Yi50ZXh0Q29udGVudD1yLnByb2R1Y3RfbmFtZS50b1VwcGVyQ2FzZSgpOwogICAgfQogIH1jYXRjaChlKXt9Cn0KZnVuY3Rpb24gcmVuZGVyTGljZW5zZUxvY2sobXNnKXsKICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4O2JhY2tncm91bmQ6IzBhMGExMjtjb2xvcjojZWNlY2Y1O2ZvbnQtZmFtaWx5OkRNIFNhbnMsc2Fucy1zZXJpZiI+JysKICAgICc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzozOHB4IDMwcHgiPicrCiAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQ2cHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyIHN0eWxlPSJmb250LXNpemU6MjJweDttYXJnaW4tYm90dG9tOjEwcHgiPtCl0YrQsdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvTwvaDI+JysKICAgICc8cCBzdHlsZT0iY29sb3I6I2EwYTBjMDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjYiPicrZXNjKG1zZykrJzwvcD4nKwogICAgJzxwIHN0eWxlPSJjb2xvcjojNmY2ZjhlO2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTRweCI+0KHQstGK0YDQttC10YLQtSDRgdC1INGBINC00L7RgdGC0LDQstGH0LjQutCwINC30LAg0L/QvtC00L3QvtCy0Y/QstCw0L3QtS48L3A+PC9kaXY+PC9kaXY+JzsKfQoKZnVuY3Rpb24gb3BlbkxpY2Vuc2VQYW5lbCgpewogIHdpbmRvdy5vcGVuKCdsaWNlbnNlcy9hZG1pbi9pbmRleC5waHAnLCdfYmxhbmsnKTsKfQoKYXN5bmMgZnVuY3Rpb24gck1vZHVsZXMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGxpc3QnKTsKICBpZighZWwpcmV0dXJuOwogIGlmKCFDVXx8Q1UuaXNfYWRtaW4hPTEpe2VsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iYWRtaW5ub3RlIj7QodCw0LzQviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCDQvNC+0LbQtSDQtNCwINGD0L/RgNCw0LLQu9GP0LLQsCDQvNC+0LTRg9C70LjRgtC1LjwvZGl2Pic7cmV0dXJuO30KICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICB2YXIgcj1hd2FpdCBhZignYnJhbmRpbmdfc2V0dGluZ3MnKTsKICB2YXIgbW9kcz0ociYmci5tb2R1bGVzX2VuYWJsZWQpP3IubW9kdWxlc19lbmFibGVkOnt9OwogIHZhciBrZXlzPU9iamVjdC5rZXlzKE1PRFVMRV9MQUJFTFMpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iYWRtaW5ub3RlIj7QmNC30LrQu9GO0YfQtdC90LjRgtC1INC80L7QtNGD0LvQuCDRgdC1INGB0LrRgNC40LLQsNGCINC+0YIg0LvRj9Cy0L7RgtC+INC80LXQvdGOLiDQm9C40YbQtdC90LfQvdC40Y/RgiDQv9Cw0L3QtdC7INC80L7QttC1INC00L7Qv9GK0LvQvdC40YLQtdC70L3QviDQtNCwINC+0LPRgNCw0L3QuNGH0LDQstCwINC80L7QtNGD0LvQuNGC0LUg0LfQsCDQutC70LjQtdC90YLRgdC60Lgg0YXRitCx0L7QstC1LjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibW9kZ3JpZCI+JytrZXlzLm1hcChmdW5jdGlvbihrKXsKICAgICAgdmFyIG9uPSFtb2RzLmhhc093blByb3BlcnR5KGspfHwhIU51bWJlcihtb2RzW2tdKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJtb2RjYXJkIj48ZGl2PjxkaXYgY2xhc3M9Im1vZG5hbWUiPicrTU9EVUxFX0xBQkVMU1trXSsnPC9kaXY+PGRpdiBjbGFzcz0ibW9kaGludCI+Jysob24/J9CQ0LrRgtC40LLQtdC9Jzon0KHQutGA0LjRgiDQvtGCINC80LXQvdGO0YLQvicpKyc8L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJzdyAnKyhvbj8nb24nOicnKSsnIiB0aXRsZT0i0JLQutC70Y7Rh9C4L9C40LfQutC70Y7Rh9C4IiBvbmNsaWNrPSJ0b2dnbGVNb2R1bGUoJytqc0FyZyhrKSsnLCcrKG9uPzA6MSkrJykiPjwvYnV0dG9uPjwvZGl2Pic7CiAgICB9KS5qb2luKCcnKSsnPC9kaXY+JzsKfQoKYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTW9kdWxlKGtleSxlbmFibGVkKXsKICB2YXIgcj1hd2FpdCBhZignbW9kdWxlX3RvZ2dsZScsJ1BPU1QnLHttb2R1bGU6a2V5LGVuYWJsZWQ6ZW5hYmxlZH0pOwogIGlmKHIpewogICAgdG9hc3QoZW5hYmxlZD8n0JzQvtC00YPQu9GK0YIg0LUg0LLQutC70Y7Rh9C10L0nOifQnNC+0LTRg9C70YrRgiDQtSDQuNC30LrQu9GO0YfQtdC9Jywnb2snKTsKICAgIGF3YWl0IGFwcGx5TW9kdWxlVmlzaWJpbGl0eSgpOwogICAgYXdhaXQgck1vZHVsZXMoKTsKICB9ZWxzZXsKICAgIHRvYXN0KCfQndGD0LbQvdC4INGB0LAg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60Lgg0L/RgNCw0LLQsCcsJ2VycicpOwogIH0KfQoKLy8g4pSA4pSAIE5BViDilIDilIAKZnVuY3Rpb24gZ28oc2VjLGVsKXsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VjJykuZm9yRWFjaChmdW5jdGlvbihzKXtzLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30pOwogIHZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWMtJytzZWMpO2lmKHMpcy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICBpZihlbCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5pJykuZm9yRWFjaChmdW5jdGlvbihuKXtuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30pO2VsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO30KICB2YXIgVD17ZGFzaGJvYXJkOidEYXNoYm9hcmQnLHdvcmtyZXBvcnQ6J9Cg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgicsdGFyZ2V0czon0JTQvdC10LLQvdC4INGC0LDRgNCz0LXRgtC4Jyxwcm9qZWN0czon0J/RgNC+0LXQutGC0LgnLGNsaWVudHM6J9Ca0LvQuNC10L3RgtC4JyxmaW5hbmNlOifQpNC40L3QsNC90YHQuCcsdGFza3M6J9CX0LDQtNCw0YfQuCcsb2ZmZXJzOifQntGE0LXRgNGC0LgnLGNvbnRyYWN0czon0JTQvtCz0L7QstC+0YDQuCcsY2FsZW5kYXI6J9Ca0LDQu9C10L3QtNCw0YAnLGhvc3Rpbmc6J9Cl0L7RgdGC0LjQvdCz0LgnLHBhc3N3b3Jkczon0JTQvtGB0YLRitC/0LgnLG5vdGVzOifQkdC10LvQtdC20LrQuCcscmVwb3J0czon0J7RgtGH0LXRgtC4JyxwcmVzZW5jZTon0J/RgNC40YHRitGB0YLQstC40LUnLHVzZXJzOifQn9C+0YLRgNC10LHQuNGC0LXQu9C4Jyxtb2R1bGVzX3NldHRpbmdzOifQnNC+0LTRg9C70LgnfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHRpdGxlJykudGV4dENvbnRlbnQ9VFtzZWNdfHxzZWM7CiAgbHMoc2VjKTsKfQoKLy8g4pSA4pSAIEZPUk1BVCDilIDilIAKZnVuY3Rpb24gZm10KG4pe3JldHVybiAn4oKsICcrTnVtYmVyKG58fDApLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScse21pbmltdW1GcmFjdGlvbkRpZ2l0czoyLG1heGltdW1GcmFjdGlvbkRpZ2l0czoyfSk7fQpmdW5jdGlvbiBmZChzKXtpZighcylyZXR1cm4gJyc7dHJ5e3JldHVybiBuZXcgRGF0ZShzKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnLHllYXI6J251bWVyaWMnfSk7fWNhdGNoKGUpe3JldHVybiBzO319CmZ1bmN0aW9uIGZkdChzKXtpZighcylyZXR1cm4gJyc7dHJ5e3JldHVybiBuZXcgRGF0ZShzKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnLGhvdXI6JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9KTt9Y2F0Y2goZSl7cmV0dXJuIHM7fX0KZnVuY3Rpb24gcGoocyxkKXt0cnl7cmV0dXJuIEpTT04ucGFyc2Uoc3x8J1tdJyk7fWNhdGNoKGUpe3JldHVybiBkO319CmZ1bmN0aW9uIGVzYyhzKXtyZXR1cm4gU3RyaW5nKHN8fCcnKS5yZXBsYWNlKC8mL2csJyZhbXA7JykucmVwbGFjZSgvPC9nLCcmbHQ7JykucmVwbGFjZSgvPi9nLCcmZ3Q7JykucmVwbGFjZSgvIi9nLCcmcXVvdDsnKS5yZXBsYWNlKC8nL2csJyYjMzk7Jyk7fQpmdW5jdGlvbiBqc0FyZyhzKXtyZXR1cm4gZXNjKEpTT04uc3RyaW5naWZ5KFN0cmluZyhzfHwnJykpKTt9CmZ1bmN0aW9uIGd2KGlkKXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7cmV0dXJuIGU/ZS52YWx1ZS50cmltKCk6Jyc7fQoKLy8g4pSA4pSAIExPQUQg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIGxvYWRBbGwoKXsKICB2YXIgUj1hd2FpdCBQcm9taXNlLmFsbChbYWYoJ3Byb2plY3RzJyksYWYoJ3Rhc2tzJyksYWYoJ25vdGVzJyksYWYoJ2NsaWVudHMnKSxhZignaG9zdGluZycpLGFmKCdwYXNzd29yZHMnKSxhZignb2ZmZXJzJyksYWYoJ2NvbnRyYWN0cycpLGFmKCd1c2VycycpLGFmKCdhY3Rpdml0eScpLGFmKCdzdGF0cycpXSk7CiAgRC5wcm9qZWN0cz0oUlswXXx8W10pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxwLHt0YWdzOnBqKHAudGFncyxbXSl9KTt9KTsKICBELnRhc2tzPVJbMV18fFtdO0Qubm90ZXM9UlsyXXx8W107RC5jbGllbnRzPVJbM118fFtdO0QuaG9zdGluZz1SWzRdfHxbXTsKICBELnBhc3N3b3Jkcz1SWzVdfHxbXTtELm9mZmVycz1SWzZdfHxbXTtELmNvbnRyYWN0cz1SWzddfHxbXTtELnVzZXJzPVJbOF18fFtdO0QuYWN0aXZpdHk9Uls5XXx8W107CiAgdmFyIHN0PVJbMTBdOwogIGlmKHN0KXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrcCcpLnRleHRDb250ZW50PXN0LmFjdGl2ZV9wcm9qZWN0czsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrbycpLnRleHRDb250ZW50PWZtdChzdC50b3RhbF9vZmZlcmVkKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrcicpLnRleHRDb250ZW50PWZtdChzdC50b3RhbF9yZWNlaXZlZCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3BuJykudGV4dENvbnRlbnQ9Zm10KHN0LnRvdGFsX3BlbmRpbmcpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t0JykudGV4dENvbnRlbnQ9c3QudGFza3NfcGVuZGluZzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYi1wJykudGV4dENvbnRlbnQ9c3QuYWN0aXZlX3Byb2plY3RzOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLXQnKS50ZXh0Q29udGVudD1zdC50YXNrc19wZW5kaW5nOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLWgnKS50ZXh0Q29udGVudD1zdC5zc2xfd2FybmluZ3M7CiAgfQogIHJUZWFtKCk7ckRhc2goKTsKfQoKYXN5bmMgZnVuY3Rpb24gbHMocyl7CiAgaWYocz09PSdkYXNoYm9hcmQnKXthd2FpdCBsb2FkQWxsKCk7cmV0dXJuO30KICB2YXIgbT17CiAgICBwcm9qZWN0czphc3luYyBmdW5jdGlvbigpe0QucHJvamVjdHM9KChhd2FpdCBhZigncHJvamVjdHMnKSl8fFtdKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30scCx7dGFnczpwaihwLnRhZ3MsW10pfSk7fSk7clByaignJyk7fSwKICAgIGNsaWVudHM6YXN5bmMgZnVuY3Rpb24oKXtELmNsaWVudHM9YXdhaXQgYWYoJ2NsaWVudHMnKXx8W107ckNsaSgpO30sCiAgICBmaW5hbmNlOmFzeW5jIGZ1bmN0aW9uKCl7RC5wcm9qZWN0cz0oKGF3YWl0IGFmKCdwcm9qZWN0cycpKXx8W10pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxwLHt0YWdzOnBqKHAudGFncyxbXSl9KTt9KTtyRmluKCk7fSwKICAgIHRhc2tzOmFzeW5jIGZ1bmN0aW9uKCl7RC50YXNrcz1hd2FpdCBhZigndGFza3MnKXx8W107clRhc2tzKCk7fSwKICAgIG9mZmVyczphc3luYyBmdW5jdGlvbigpe0Qub2ZmZXJzPWF3YWl0IGFmKCdvZmZlcnMnKXx8W107ck9mZmVycygpO30sCiAgICBjb250cmFjdHM6YXN5bmMgZnVuY3Rpb24oKXtELmNvbnRyYWN0cz1hd2FpdCBhZignY29udHJhY3RzJyl8fFtdO3JDb250cmFjdHMoKTt9LAogICAgaG9zdGluZzphc3luYyBmdW5jdGlvbigpe0QuaG9zdGluZz1hd2FpdCBhZignaG9zdGluZycpfHxbXTtySG9zdGluZygpO30sCiAgICBwYXNzd29yZHM6YXN5bmMgZnVuY3Rpb24oKXtELnBhc3N3b3Jkcz1hd2FpdCBhZigncGFzc3dvcmRzJyl8fFtdO3JQYXNzd29yZHMoKTt9LAogICAgbm90ZXM6YXN5bmMgZnVuY3Rpb24oKXtELm5vdGVzPWF3YWl0IGFmKCdub3RlcycpfHxbXTtyTm90ZXMoKTt9LAogICAgcmVwb3J0czphc3luYyBmdW5jdGlvbigpe0QucHJvamVjdHM9KChhd2FpdCBhZigncHJvamVjdHMnKSl8fFtdKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30scCx7dGFnczpwaihwLnRhZ3MsW10pfSk7fSk7RC50YXNrcz1hd2FpdCBhZigndGFza3MnKXx8W107clJlcG9ydHMoKTt9LAogICAgcHJlc2VuY2U6YXN5bmMgZnVuY3Rpb24oKXtpZighRC51c2Vycy5sZW5ndGgpRC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107clByZXNlbmNlKCk7fSwKICAgIGNhbGVuZGFyOmFzeW5jIGZ1bmN0aW9uKCl7aWYoIUQudGFza3MubGVuZ3RoKUQudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO2lmKCFELnVzZXJzLmxlbmd0aClELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyQ2FsZW5kYXIoKTt9LAogICAgdXNlcnM6YXN5bmMgZnVuY3Rpb24oKXtELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyVXNlcnMoKTt9LAogICAgd29ya3JlcG9ydDphc3luYyBmdW5jdGlvbigpe2lmKCFELnVzZXJzLmxlbmd0aClELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyV29ya1JlcG9ydCgpO30sCiAgICB0YXJnZXRzOmFzeW5jIGZ1bmN0aW9uKCl7aWYoIUQudXNlcnMubGVuZ3RoKUQudXNlcnM9YXdhaXQgYWYoJ3VzZXJzJyl8fFtdO3JUYXJnZXRzKCk7fSwKICAgIG1vZHVsZXNfc2V0dGluZ3M6YXN5bmMgZnVuY3Rpb24oKXtyTW9kdWxlcygpO30KICB9OwogIGlmKG1bc10pYXdhaXQgbVtzXSgpOwp9CgovLyDilIDilIAgSEVMUEVSUyDilIDilIAKdmFyIFRNPXtXb29Db21tZXJjZTond2ViJyxXb3JkUHJlc3M6J3dlYicsJ0UtY29tbWVyY2UnOid3ZWInLFNFTzonc2VvJywnR29vZ2xlIEFkcyc6J3NlbycsSW5zdGFncmFtOidzb2NpYWwnLEZhY2Vib29rOidzb2NpYWwnLFZpYmVyOidzb2NpYWwnLGNQYW5lbDonaG9zdGluZycs0J/QvtC00LTRgNGK0LbQutCwOidob3N0aW5nJyzQm9C+0LPQvjonZGVzaWduJyzQkdGA0LDQvdC00LjQvdCzOidkZXNpZ24nLNCU0LjQt9Cw0LnQvTonZGVzaWduJyzQoNC10LrQu9Cw0LzQuDonc29jaWFsJyzQodC/0LXRiNC90L46J3J1c2gnfTsKdmFyIFNQQz17YWN0aXZlOidzcC1hJyxuZXc6J3NwLW4nLHJldmlldzonc3AtcicscGF1c2VkOidzcC1kJyxkb25lOidzcC1kJ307CnZhciBTUEw9e2FjdGl2ZTon0JIg0L/RgNC+0YbQtdGBJyxuZXc6J9Cd0L7QsicscmV2aWV3OifQoNC10LLQuNC30LjRjycscGF1c2VkOifQn9Cw0YPQt9CwJyxkb25lOifQl9Cw0LLRitGA0YjQtdC9J307CgpmdW5jdGlvbiBwUm93KHApewogIHZhciB0YWdzPShwLnRhZ3N8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8c3BhbiBjbGFzcz0idGFnICcrKFRNW3RdfHwnd2ViJykrJyI+Jyt0Kyc8L3NwYW4+Jzt9KS5qb2luKCcnKTsKICB2YXIgdG90PU51bWJlcihwLnRvdGFsfHwwKSxyZWM9TnVtYmVyKHAucmVjZWl2ZWR8fDApOwogIHZhciBydj1wLnJlY3VycmluZz9mbXQodG90KSsnLycrcC5yZWN1cnJpbmc6Zm10KHRvdCk7CiAgdmFyIHJsPXJlYz49dG90JiZ0b3Q+MD8nPGRpdiBjbGFzcz0iYXIiPtCf0LvQsNGC0LXQvdC+IOKckzwvZGl2Pic6cmVjPjA/JzxkaXYgY2xhc3M9ImFyIj4nK2ZtdChyZWMpKycg0L/Qu9Cw0YLQtdC90L48L2Rpdj4nOic8ZGl2IGNsYXNzPSJhcCI+4oKsIDAsMDAg0L/Qu9Cw0YLQtdC90L48L2Rpdj4nOwogIHZhciBkbD1wLmRlYWRsaW5lP25ldyBEYXRlKHAuZGVhZGxpbmUpOm51bGw7CiAgdmFyIGR5PWRsP01hdGguY2VpbCgoZGwtbmV3IERhdGUoKSkvODY0MDAwMDApOm51bGw7CiAgdmFyIHVnPWR5IT09bnVsbCYmZHk8PTc7CiAgdmFyIHByPXAucHJvZ3Jlc3N8fDA7CiAgdmFyIGJjPXByPj0xMDA/J3ZhcigtLWdybiknOnByPj02MD8ndmFyKC0tYWNjKSc6cHI+PTMwPyd2YXIoLS1hbWIpJzondmFyKC0tYmx1KSc7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwciIgb25jbGljaz0ibW9kYWwoXCdlZGl0UHJvamVjdFwnLFwnJytwLmlkKydcJykiPicKICAgICsnPGRpdj48ZGl2IGNsYXNzPSJwbiI+JytwLm5hbWUrJzwvZGl2PjxkaXYgY2xhc3M9InBtIj4nKyhwLmNsaWVudHx8J+KAlCcpKyhwLnBob25lPycgwrcgJytwLnBob25lOicnKSsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJwdGFncyI+Jyt0YWdzKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InBiIj48ZGl2IGNsYXNzPSJwYmYiIHN0eWxlPSJ3aWR0aDonK3ByKyclO2JhY2tncm91bmQ6JytiYysnIj48L2Rpdj48L2Rpdj48L2Rpdj4nCiAgICArJzxzcGFuIGNsYXNzPSJzcCAnKyhTUENbcC5zdGF0dXNdfHwnc3AtbicpKyciPicrKFNQTFtwLnN0YXR1c118fCfQndC+0LInKSsnPC9zcGFuPicKICAgICsnPGRpdiBjbGFzcz0iYW10Ij48ZGl2IGNsYXNzPSJhdCI+JytydisnPC9kaXY+JytybCsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJkbGMiPjxkaXYgY2xhc3M9ImRsZCcrKHVnPycgdSc6JycpKyciPicrKCBkbD9kbC50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnfSk6J+KAlCcpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9ImRsbicrKHVnPycgdSc6JycpKyciPicrKCBkeT09PW51bGw/J+KAlCc6ZHk8PTA/J9CY0LfRgtC10LrRitC7JzpkeSsnINC00L3QuCcpKyc8L2Rpdj48L2Rpdj4nCiAgICArJzwvZGl2Pic7Cn0KCmZ1bmN0aW9uIGVtcChpYyx0aSxzdSxibCxiZil7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJlbXAiPjxkaXYgY2xhc3M9ImVpIj4nK2ljKyc8L2Rpdj48ZGl2IGNsYXNzPSJldCI+Jyt0aSsnPC9kaXY+PGRpdiBjbGFzcz0iZXMiPicrc3UrJzwvZGl2PicrKGJsPyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0iJytiZisnIj4nK2JsKyc8L2J1dHRvbj4nOicnKSsnPC9kaXY+JzsKfQoKZnVuY3Rpb24gdEhUTUwodCl7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJ0aSIgb25jbGljaz0idG9nVGFzayhcJycrdC5pZCsnXCcpIj4nCiAgICArJzxkaXYgY2xhc3M9InRjaycrKHQuZG9uZT09MT8nIGRvbmUnOicnKSsnIj4nKyggdC5kb25lPT0xPyfinJMnOicnKSsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJ0dHgnKyh0LmRvbmU9PTE/JyBkb25lJzonJykrJyI+Jyt0LnRleHQrKHQudXJnZW50PT0xJiZ0LmRvbmUhPTE/JzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS1yZWQpO21hcmdpbi1sZWZ0OjRweCI+4pqgPC9zcGFuPic6JycpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InRhc3MiPicrKHQuYXNzaWduZWV8fCfigJQnKSsnPC9kaXY+JwogICAgKyc8L2Rpdj4nOwp9CgovLyDilIDilIAgREFTSEJPQVJEIOKUgOKUgApmdW5jdGlvbiByRGFzaCgpewogIHZhciBhYz1ELnByb2plY3RzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5zdGF0dXMhPT0nZG9uZSc7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RwJykuaW5uZXJIVE1MPWFjLmxlbmd0aD9hYy5zbGljZSgwLDQpLm1hcChwUm93KS5qb2luKCcnKTplbXAoJ+KXiCcsJ9Cd0Y/QvNCw0YLQtSDQv9GA0L7QtdC60YLQuCcsJycsJysg0J3QvtCyINC/0YDQvtC10LrRgicsIm1vZGFsKCdwcm9qZWN0JykiKTsKICB2YXIgdXA9RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuZGVhZGxpbmUmJnAuc3RhdHVzIT09J2RvbmUnO30pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5kZWFkbGluZSktbmV3IERhdGUoYi5kZWFkbGluZSk7fSkuc2xpY2UoMCw1KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGQnKS5pbm5lckhUTUw9dXAubGVuZ3RoP3VwLm1hcChmdW5jdGlvbihwKXsKICAgIHZhciBkeT1NYXRoLmNlaWwoKG5ldyBEYXRlKHAuZGVhZGxpbmUpLW5ldyBEYXRlKCkpLzg2NDAwMDAwKTsKICAgIHZhciBjbD1keTw9Mz8ndSc6ZHk8PTEwPydzJzonbyc7CiAgICB2YXIgY3I9ZHk8PTM/J3ZhcigtLXJlZCknOmR5PD0xMD8ndmFyKC0tYW1iKSc6J3ZhcigtLWdybiknOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJkbGkiPjxkaXYgY2xhc3M9ImRsZDIiIHN0eWxlPSJiYWNrZ3JvdW5kOicrY3IrJyI+PC9kaXY+PGRpdiBjbGFzcz0iZGxpbiI+PGRpdiBjbGFzcz0iZGxubSI+JytwLm5hbWUrJzwvZGl2PjxkaXYgY2xhc3M9ImRsbXQiPicrKHAuY2xpZW50fHwnJykrJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImRsYmRnICcrY2wrJyI+JysoZHk8PTA/J9CY0LfRgtC10LrRitC7JzpkeSsnINC00L3QuCcpKyc8L2Rpdj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0L/RgNC10LTRgdGC0L7Rj9GJ0Lgg0YHRgNC+0LrQvtCy0LU8L2Rpdj4nOwogIHZhciB0b3Q9YWMucmVkdWNlKGZ1bmN0aW9uKHMscCl7cmV0dXJuIHMrTnVtYmVyKHAudG90YWx8fDApO30sMCk7CiAgdmFyIHJlYz1hYy5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC5yZWNlaXZlZHx8MCk7fSwwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGYnKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImZyIj48c3BhbiBjbGFzcz0iZmwiPtCe0YTQtdGA0LjRgNCw0L3Qvjwvc3Bhbj48c3BhbiBjbGFzcz0iZnYiPicrZm10KHRvdCkrJzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJmciI+PHNwYW4gY2xhc3M9ImZsIj7Qn9C+0LvRg9GH0LXQvdC+PC9zcGFuPjxzcGFuIGNsYXNzPSJmdiBnIj4nK2ZtdChyZWMpKyc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZnIiPjxzcGFuIGNsYXNzPSJmbCI+0J7Rh9Cw0LrQstCwINGB0LU8L3NwYW4+PHNwYW4gY2xhc3M9ImZ2IGEiPicrZm10KHRvdC1yZWMpKyc8L3NwYW4+PC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHQnKS5pbm5lckhUTUw9RC50YXNrcy5sZW5ndGg/RC50YXNrcy5zbGljZSgwLDYpLm1hcCh0SFRNTCkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QndGP0LzQsCDQt9Cw0LTQsNGH0Lg8L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbicpLmlubmVySFRNTD1ELm5vdGVzLmxlbmd0aD9ELm5vdGVzLnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKG4pe3JldHVybiAnPGRpdiBjbGFzcz0ibmkyIj48ZGl2IGNsYXNzPSJudCI+JytuLnRpdGxlKyc8L2Rpdj48ZGl2IGNsYXNzPSJucCI+Jysobi5ib2R5fHwnJykrJzwvZGl2PjxkaXYgY2xhc3M9Im5mIj48c3Bhbj4nKyhuLmF1dGhvcnx8JycpKyc8L3NwYW4+Jysobi5hdXRob3I/JzxzcGFuPsK3PC9zcGFuPic6JycpKyc8c3Bhbj4nK2ZkdChuLmNyZWF0ZWRfYXQpKyc8L3NwYW4+PC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINCx0LXQu9C10LbQutC4PC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGEnKS5pbm5lckhUTUw9RC5hY3Rpdml0eS5sZW5ndGg/RC5hY3Rpdml0eS5zbGljZSgwLDYpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImFpIj48ZGl2IGNsYXNzPSJhYXYgJysoYS5jb2xvcnx8J2F2LXAnKSsnIj4nKyhhLmluaXRpYWxzfHwnPycpKyc8L2Rpdj48ZGl2PjxkaXYgY2xhc3M9ImF0eCI+PHN0cm9uZz4nK2Eud2hvKyc8L3N0cm9uZz4gJythLndoYXQrJzwvZGl2PjxkaXYgY2xhc3M9ImF0bSI+JytmZHQoYS5jcmVhdGVkX2F0KSsnPC9kaXY+PC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINCw0LrRgtC40LLQvdC+0YHRgjwvZGl2Pic7Cn0KCmZ1bmN0aW9uIHJUZWFtKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RsaXN0JykuaW5uZXJIVE1MPUQudXNlcnMubWFwKGZ1bmN0aW9uKHUpewogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJ0cm93Ij48ZGl2IGNsYXNzPSJhdiAnKyh1LmNvbG9yfHwnYXYtcCcpKyciPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+Jyt1Lm5hbWUrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4MykiPicrKHUucm9sZXx8JycpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOwp9CgpmdW5jdGlvbiByUHJqKHEpewogIHZhciBsaXN0PUQucHJvamVjdHM7CiAgaWYocSlsaXN0PWxpc3QuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxLnRvTG93ZXJDYXNlKCkpfHwocC5jbGllbnR8fCcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEudG9Mb3dlckNhc2UoKSk7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZwJykuaW5uZXJIVE1MPWxpc3QubGVuZ3RoP2xpc3QubWFwKHBSb3cpLmpvaW4oJycpOmVtcCgn4peIJywn0J3Rj9C80LDRgtC1INC/0YDQvtC10LrRgtC4JywnJywnKyDQndC+0LIg0L/RgNC+0LXQutGCJywibW9kYWwoJ3Byb2plY3QnKSIpOwp9CmZ1bmN0aW9uIGZwKHEpe3JQcmoocSk7fQoKZnVuY3Rpb24gckNsaSgpewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcycpLnRleHRDb250ZW50PUQuY2xpZW50cy5sZW5ndGgrJyDQutC70LjQtdC90YInKyhELmNsaWVudHMubGVuZ3RoPT09MT8nJzon0LAnKTsKICBpZighRC5jbGllbnRzLmxlbmd0aCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NnJykuaW5uZXJIVE1MPWVtcCgn4peOJywn0J3Rj9C80LDRgtC1INC60LvQuNC10L3RgtC4JywnJywnKyDQndC+0LIg0LrQu9C40LXQvdGCJywibW9kYWwoJ2NsaWVudCcpIik7cmV0dXJuO30KICB2YXIgY2xzPVsnYXYtcCcsJ2F2LXQnLCdhdi1nJywnYXYtYSddOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZycpLmlubmVySFRNTD1ELmNsaWVudHMubWFwKGZ1bmN0aW9uKGMsaSl7CiAgICB2YXIgcGpzPUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmNsaWVudD09PWMubmFtZTt9KS5sZW5ndGg7CiAgICB2YXIgdG90PUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmNsaWVudD09PWMubmFtZTt9KS5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC50b3RhbHx8MCk7fSwwKTsKICAgIHZhciBjb2w9Y2xzW2klNF07CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImNjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTJweCI+PGRpdiBjbGFzcz0iYXYgJytjb2wrJyIgc3R5bGU9IndpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Zm9udC1zaXplOjEycHgiPicrKGMubmFtZXx8Jz8nKS5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCkrJzwvZGl2PjxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+JytjLm5hbWUrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrKGMuY29tcGFueXx8JycpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4Ij48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmbGV4OjEiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6dmFyKC0tdHgpIj4nK3BqcysnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+0J/RgNC+0LXQutGC0LA8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmbGV4OjEiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6dmFyKC0tZ3JuKSI+JytmbXQodG90KSsnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+0J7QsdGJ0L48L2Rpdj48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMXB4O3BhZGRpbmctdG9wOjExcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYnJkKSI+JysoYy5lbWFpbD8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjJweCI+8J+TpyA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tdHgyKSI+JytjLmVtYWlsKyc8L3NwYW4+PC9kaXY+JzonJykrKGMucGhvbmU/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPvCfk54gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXR4MikiPicrYy5waG9uZSsnPC9zcGFuPjwvZGl2Pic6JycpKyc8L2Rpdj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOwp9CgpmdW5jdGlvbiByRmluKCl7CiAgdmFyIHRvdD1ELnByb2plY3RzLnJlZHVjZShmdW5jdGlvbihzLHApe3JldHVybiBzK051bWJlcihwLnRvdGFsfHwwKTt9LDApOwogIHZhciByZWM9RC5wcm9qZWN0cy5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC5yZWNlaXZlZHx8MCk7fSwwKTsKICB2YXIgbW9uPUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLnJlY3VycmluZzt9KS5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC50b3RhbHx8MCk7fSwwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnQnKS50ZXh0Q29udGVudD1mbXQodG90KTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnInKS50ZXh0Q29udGVudD1mbXQocmVjKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnBuJykudGV4dENvbnRlbnQ9Zm10KHRvdC1yZWMpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcycpLnRleHRDb250ZW50PWZtdChtb24pOwogIHZhciB1bj1ELnByb2plY3RzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gTnVtYmVyKHAucmVjZWl2ZWR8fDApPE51bWJlcihwLnRvdGFsfHwwKSYmcC5zdGF0dXMhPT0nZG9uZSc7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z1JykuaW5uZXJIVE1MPXVuLmxlbmd0aD91bi5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJmciI+PHNwYW4gY2xhc3M9ImZsIj4nK3AubmFtZSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJmdiBhIj4nK2ZtdChOdW1iZXIocC50b3RhbHx8MCktTnVtYmVyKHAucmVjZWl2ZWR8fDApKSsnPC9zcGFuPjwvZGl2Pic7fSkuam9pbignJyk6ZW1wKCfil4cnLCfQktGB0LjRh9C60L4g0L/Qu9Cw0YLQtdC90L4nLCcnLCcnLCcnKTsKICB2YXIgc2I9RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVjdXJyaW5nO30pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmc2wnKS5pbm5lckhUTUw9c2IubGVuZ3RoP3NiLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImZyIj48c3BhbiBjbGFzcz0iZmwiPicrcC5uYW1lKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImZ2IGciPicrZm10KHAudG90YWwpKycvJytwLnJlY3VycmluZysnPC9zcGFuPjwvZGl2Pic7fSkuam9pbignJyk6ZW1wKCfil4cnLCfQndGP0LzQsNGC0LUg0LDQsdC+0L3QsNC80LXQvdGC0LgnLCcnLCcnLCcnKTsKfQoKZnVuY3Rpb24gclRhc2tzKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLXQnKS50ZXh0Q29udGVudD1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lPT0wO30pLmxlbmd0aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGYnKS5pbm5lckhUTUw9RC50YXNrcy5sZW5ndGg/RC50YXNrcy5tYXAodEhUTUwpLmpvaW4oJycpOmVtcCgn4pa3Jywn0J3Rj9C80LDRgtC1INC30LDQtNCw0YfQuCcsJycsJysg0JfQsNC00LDRh9CwJywibW9kYWwoJ3Rhc2snKSIpOwp9Cgphc3luYyBmdW5jdGlvbiB0b2dUYXNrKGlkKXsKICB2YXIgdD1ELnRhc2tzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtpZighdClyZXR1cm47CiAgdC5kb25lPXQuZG9uZT09MT8wOjE7CiAgYXdhaXQgYWYoJ3Rhc2tzJywnUE9TVCcse2lkOnQuaWQsdGV4dDp0LnRleHQsYXNzaWduZWU6dC5hc3NpZ25lZSx1cmdlbnQ6dC51cmdlbnQsZG9uZTp0LmRvbmUsZHVlX2RhdGU6dC5kdWVfZGF0ZXx8bnVsbH0pOwogIHJUYXNrcygpO3JEYXNoKCk7dG9hc3QodC5kb25lPT0xPyfinJMg0JjQt9C/0YrQu9C90LXQvdCwJzon0JLRitGA0L3QsNGC0LAnLCdvaycpOwp9CgpmdW5jdGlvbiByT2ZmZXJzKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvZicpOwogIGlmKCFELm9mZmVycy5sZW5ndGgpe2VsLmlubmVySFRNTD1lbXAoJ+KXuycsJ9Cd0Y/QvNCw0YLQtSDQvtGE0LXRgNGC0LgnLCcnLCfiipUg0J3QvtCy0LAg0L7RhNC10YDRgtCwJywid2luZG93Lm9wZW4oJ29mZmVyLmh0bWw/dHlwZT1vbmVfdGltZScsJ19ibGFuaycpIik7cmV0dXJuO30KICB2YXIgcT0oT0YucXx8JycpLnRvTG93ZXJDYXNlKCk7CiAgdmFyIHJvd3M9RC5vZmZlcnMuZmlsdGVyKGZ1bmN0aW9uKG8pewogICAgdmFyIGhheT1bby5udW0sby5jbGllbnQsby5zZXJ2aWNlLG8uc3RhdHVzLG8ub2ZmZXJfdHlwZV0uam9pbignICcpLnRvTG93ZXJDYXNlKCk7CiAgICByZXR1cm4gKCFxfHxoYXkuaW5kZXhPZihxKT4tMSkmJighT0Yuc3RhdHVzfHxvLnN0YXR1cz09PU9GLnN0YXR1cyk7CiAgfSk7CiAgaWYoIXJvd3MubGVuZ3RoKXtlbC5pbm5lckhUTUw9ZW1wKCfil7snLCfQndGP0LzQsCDQvdCw0LzQtdGA0LXQvdC4INC+0YTQtdGA0YLQuCcsJ9Cf0YDQvtC80LXQvdC4INGC0YrRgNGB0LXQvdC10YLQviDQuNC70Lgg0YTQuNC70YLRitGA0LAuJywnJywnJyk7cmV0dXJuO30KICB2YXIgYWNjZXB0ZWQ9cm93cy5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RhdHVzPT09J9Cf0YDQuNC10YLQsCc7fSkubGVuZ3RoOwogIHZhciB0b3RhbD1yb3dzLnJlZHVjZShmdW5jdGlvbihzLG8pe3JldHVybiBzK051bWJlcihvLnRvdGFsfHwwKTt9LDApOwogIGVsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0icGFkZGluZzoxMnB4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXA7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKSI+PHNwYW4+Jytyb3dzLmxlbmd0aCsnINC+0YTQtdGA0YLQuDwvc3Bhbj48c3Bhbj7Ctzwvc3Bhbj48c3Bhbj4nK2FjY2VwdGVkKycg0L/RgNC40LXRgtC4PC9zcGFuPjxzcGFuPsK3PC9zcGFuPjxzcGFuPicrZm10KHRvdGFsKSsnPC9zcGFuPjwvZGl2Pjx0YWJsZSBjbGFzcz0ib3QiPjx0aGVhZD48dHI+PHRoPiM8L3RoPjx0aD7QmtC70LjQtdC90YI8L3RoPjx0aD7QotC40L88L3RoPjx0aD7Qo9GB0LvRg9Cz0LA8L3RoPjx0aD7QodGD0LzQsDwvdGg+PHRoPtCU0LDRgtCwPC90aD48dGg+0KHRgtCw0YLRg9GBPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PicKICAgICtyb3dzLm1hcChmdW5jdGlvbihvKXt2YXIgdHA9by5vZmZlcl90eXBlPT09J21vbnRobHknPyfQnNC10YHQtdGH0L3QsCc6J9CV0LTQvdC+0LrRgNCw0YLQvdCwJztyZXR1cm4gJzx0cj48dGQgc3R5bGU9ImZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eDMpIj4nK2VzYyhvLm51bSkrJzwvdGQ+PHRkIHN0eWxlPSJjb2xvcjp2YXIoLS10eCk7Zm9udC13ZWlnaHQ6NTAwIj4nK2VzYyhvLmNsaWVudCkrJzwvdGQ+PHRkPjxzcGFuIGNsYXNzPSJzcCBzcC1uIj4nK3RwKyc8L3NwYW4+PC90ZD48dGQ+Jytlc2Moby5zZXJ2aWNlKSsnPC90ZD48dGQgc3R5bGU9ImZvbnQtZmFtaWx5OnZhcigtLW1vKTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK2ZtdChvLnRvdGFsKSsnPC90ZD48dGQ+JytmZChvLmNyZWF0ZWRfYXQpKyc8L3RkPjx0ZD48c3BhbiBjbGFzcz0ic3AgJysoby5zdGF0dXM9PT0n0J/RgNC40LXRgtCwJz8nc3AtYSc6by5zdGF0dXM9PT0n0J7RgtC60LDQt9Cw0L3QsCc/J3NwLWQnOidzcC1yJykrJyI+Jytlc2Moby5zdGF0dXMpKyc8L3NwYW4+PC90ZD48dGQ+PGJ1dHRvbiBjbGFzcz0ib2J0biIgb25jbGljaz0id2luZG93Lm9wZW4oXCdvZmZlci5odG1sP2lkPScrby5pZCsnXCcsXCdfYmxhbmtcJykiPtCg0LXQtNCw0LrRgtC40YDQsNC5PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnb2ZmZXJzXCcsXCcnK28uaWQrJ1wnKSI+4pyVPC9idXR0b24+PC90ZD48L3RyPic7fSkuam9pbignJykKICAgICsnPC90Ym9keT48L3RhYmxlPic7Cn0KCmZ1bmN0aW9uIHJDb250cmFjdHMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NmJyk7CiAgZWwuaW5uZXJIVE1MPUQuY29udHJhY3RzLmxlbmd0aD9ELmNvbnRyYWN0cy5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuICc8ZGl2IGNsYXNzPSJwciIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvIj48ZGl2PjxkaXYgY2xhc3M9InBuIj4nKyhjLm5hbWV8fCfigJQnKSsnPC9kaXY+PGRpdiBjbGFzcz0icG0iPicrYy5jbGllbnQrJyDCtyAnK2ZkKGMuc2lnbl9kYXRlKSsnPC9kaXY+PC9kaXY+PHNwYW4gY2xhc3M9InNwIHNwLWEiPtCQ0LrRgtC40LLQtdC9PC9zcGFuPjxidXR0b24gY2xhc3M9Im9idG4iIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIiBvbmNsaWNrPSJkcihcJ2NvbnRyYWN0c1wnLFwnJytjLmlkKydcJykiPuKclTwvYnV0dG9uPjwvZGl2Pic7fSkuam9pbignJyk6ZW1wKCfil4gnLCfQndGP0LzQsNGC0LUg0LTQvtCz0L7QstC+0YDQuCcsJycsJysg0J3QvtCyINC00L7Qs9C+0LLQvtGAJywibW9kYWwoJ2NvbnRyYWN0JykiKTsKfQoKZnVuY3Rpb24gckhvc3RpbmcoKXsKICB2YXIgd2M9RC5ob3N0aW5nLmZpbHRlcihmdW5jdGlvbihoKXt2YXIgZD1oLnNzbF9leHBpcmVzP01hdGguY2VpbCgobmV3IERhdGUoaC5zc2xfZXhwaXJlcyktbmV3IERhdGUoKSkvODY0MDAwMDApOm51bGw7cmV0dXJuIGQhPT1udWxsJiZkPDMwO30pLmxlbmd0aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHMnKS50ZXh0Q29udGVudD1ELmhvc3RpbmcubGVuZ3RoKycg0YXQvtGB0YLQuNC90LPQsCc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLWgnKS50ZXh0Q29udGVudD13Y3x8MDsKICBpZighRC5ob3N0aW5nLmxlbmd0aCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hnJykuaW5uZXJIVE1MPWVtcCgn4qyhJywn0J3Rj9C80LDRgtC1INGF0L7RgdGC0LjQvdCz0LgnLCcnLCcrINCd0L7QsiDRhdC+0YHRgtC40L3QsycsIm1vZGFsKCdob3N0aW5nJykiKTtyZXR1cm47fQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZycpLmlubmVySFRNTD1ELmhvc3RpbmcubWFwKGZ1bmN0aW9uKGgpewogICAgdmFyIGQ9aC5zc2xfZXhwaXJlcz9NYXRoLmNlaWwoKG5ldyBEYXRlKGguc3NsX2V4cGlyZXMpLW5ldyBEYXRlKCkpLzg2NDAwMDAwKTpudWxsOwogICAgdmFyIHNjPWQ9PT1udWxsPycnOmQ8MzA/J3NzbC1iYWQnOmQ8NjA/J3NzbC13YXJuJzonc3NsLW9rJzsKICAgIHZhciBzaT1kPT09bnVsbD8n4oCUJzpkPDMwPyfimqAnOmQ8NjA/J+KaoSc6J+Kckyc7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImhjYXJkJysoZCE9PW51bGwmJmQ8MzA/JyB3YXJuJzonJykrJyI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTo4cHgiPjxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+JytoLmRvbWFpbisnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjFweCI+JysoaC5jbGllbnR8fCfigJQnKSsnIMK3ICcrKGgudHlwZXx8J2NQYW5lbCcpKyc8L2Rpdj48L2Rpdj48c3BhbiBjbGFzcz0ic3Agc3AtYSI+JysoaC5wbGFufHwn4oCUJykrJzwvc3Bhbj48L2Rpdj4nKyhoLnNlcnZlcj8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjdweCI+JytoLnNlcnZlcisnPC9kaXY+JzonJykKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjdweCI+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPtCU0LjRgdC6PC9kaXY+PGRpdiBjbGFzcz0iaHN2Ij4nKyhoLmRpc2t8fCfigJQnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPlNTTDwvZGl2PjxkaXYgY2xhc3M9ImhzdiAnK3NjKyciPicrc2krJyAnKyhoLnNzbF9leHBpcmVzP2ZkKGguc3NsX2V4cGlyZXMpOifigJQnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPtCU0L3QuDwvZGl2PjxkaXYgY2xhc3M9ImhzdiAnK3NjKyciPicrKGQhPT1udWxsP2QrJyDQtNC90LgnOifigJQnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPtCi0LjQvzwvZGl2PjxkaXYgY2xhc3M9ImhzdiI+JysoaC50eXBlfHwn4oCUJykrJzwvZGl2PjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodCI+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnaG9zdGluZ1wnLFwnJytoLmlkKydcJykiPtCY0LfRgtGA0LjQuTwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgfSkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIHB3Tm9ybShzKXtyZXR1cm4gKHN8fCcnKS50cmltKCk7fQpmdW5jdGlvbiBwd0NsaWVudE5hbWUocCl7cmV0dXJuIHB3Tm9ybShwLmNsaWVudCl8fCfQkdC10Lcg0LrQu9C40LXQvdGCJzt9CmZ1bmN0aW9uIHB3Q2F0TGFiZWwoYyl7CiAgdmFyIG09e2hvc3Rpbmc6J9Cl0L7RgdGC0LjQvdCzJyx3b3JkcHJlc3M6J1dvcmRQcmVzcycsZ29vZ2xlOidHb29nbGUnLHNvY2lhbDon0KHQvtGG0LjQsNC70L3QuCDQvNGA0LXQttC4JyxkbnM6J0ROUycsZGVzaWduOifQlNC40LfQsNC50L0nLG90aGVyOifQlNGA0YPQs9C+J307CiAgcmV0dXJuIG1bY118fGN8fCfQlNGA0YPQs9C+JzsKfQpmdW5jdGlvbiBwd1NlbGVjdENsaWVudChuYW1lKXtQVy5jbGllbnQ9bmFtZTt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdTZWFyY2gnKTtpZihzKXMudmFsdWU9Jyc7UFcuc2VhcmNoPScnO3JQYXNzd29yZHMoKTt9CmZ1bmN0aW9uIG9wZW5QYXNzTW9kYWwoY2xpZW50LGlkKXtQVy5mb3JtQ2xpZW50PWNsaWVudHx8UFcuY2xpZW50fHwnJztQVy5lZGl0SWQ9aWR8fCcnO21vZGFsKCdwYXNzd29yZCcpO30KZnVuY3Rpb24gcHdDbGllbnRzKCl7CiAgdmFyIG1hcD17fTsKICBELmNsaWVudHMuZm9yRWFjaChmdW5jdGlvbihjKXsKICAgIHZhciBuPXB3Tm9ybShjLmNvbXBhbnkpfHxwd05vcm0oYy5uYW1lKTsKICAgIGlmKCFuKXJldHVybjsKICAgIG1hcFtuXT1tYXBbbl18fHtuYW1lOm4sbWV0YTpbXSxjb3VudDowLGNhdHM6e319OwogICAgbWFwW25dLm1ldGE9W2MubmFtZSxjLmVtYWlsLGMucGhvbmVdLmZpbHRlcihCb29sZWFuKTsKICB9KTsKICBELnBhc3N3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKHApewogICAgdmFyIG49cHdDbGllbnROYW1lKHApOwogICAgbWFwW25dPW1hcFtuXXx8e25hbWU6bixtZXRhOltdLGNvdW50OjAsY2F0czp7fX07CiAgICBtYXBbbl0uY291bnQrKzsKICAgIG1hcFtuXS5jYXRzW3AuY2F0ZWdvcnl8fCdvdGhlciddPShtYXBbbl0uY2F0c1twLmNhdGVnb3J5fHwnb3RoZXInXXx8MCkrMTsKICB9KTsKICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIG1hcFtrXTt9KS5zb3J0KGZ1bmN0aW9uKGEsYil7CiAgICBpZihhLm5hbWU9PT0n0JHQtdC3INC60LvQuNC10L3RgicpcmV0dXJuIDE7CiAgICBpZihiLm5hbWU9PT0n0JHQtdC3INC60LvQuNC10L3RgicpcmV0dXJuIC0xOwogICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwnYmcnKTsKICB9KTsKfQpmdW5jdGlvbiByUGFzc3dvcmRzKCl7CiAgdmFyIGNtPXtob3N0aW5nOidob3N0aW5nJyxnb29nbGU6J3Nlbycsc29jaWFsOidzb2NpYWwnLGRuczonZGVzaWduJyx3b3JkcHJlc3M6J3dlYicsZGVzaWduOidkZXNpZ24nLG90aGVyOid3ZWInfTsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd2wnKTsKICB2YXIgc2VhcmNoPShQVy5zZWFyY2h8fCcnKS50b0xvd2VyQ2FzZSgpOwogIGlmKCFQVy5jbGllbnQpewogICAgdmFyIGNsaWVudHM9cHdDbGllbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKGMpewogICAgICB2YXIgaGF5PShjLm5hbWUrJyAnKyhjLm1ldGF8fFtdKS5qb2luKCcgJykpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiAhc2VhcmNofHxoYXkuaW5kZXhPZihzZWFyY2gpIT09LTE7CiAgICB9KTsKICAgIGlmKCFjbGllbnRzLmxlbmd0aCl7CiAgICAgIGJveC5pbm5lckhUTUw9ZW1wKCfil44nLCfQndGP0LzQsCDQvdCw0LzQtdGA0LXQvdC4INC60LvQuNC10L3RgtC4Jywn0J/RgNC+0LzQtdC90Lgg0YLRitGA0YHQtdC90LXRgtC+INC40LvQuCDQtNC+0LHQsNCy0Lgg0L3QvtCyINC00L7RgdGC0YrQvy4nLCcrINCU0L7QsdCw0LLQuCDQtNC+0YHRgtGK0L8nLCJvcGVuUGFzc01vZGFsKCkiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYm94LmlubmVySFRNTD0nPGRpdiBjbGFzcz0icHdncmlkIj4nK2NsaWVudHMubWFwKGZ1bmN0aW9uKGMpewogICAgICB2YXIgY2F0cz1PYmplY3Qua2V5cyhjLmNhdHMpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gJzxzcGFuIGNsYXNzPSJwd2NoaXAiPicrZXNjKHB3Q2F0TGFiZWwoaykpKyc6ICcrYy5jYXRzW2tdKyc8L3NwYW4+Jzt9KS5qb2luKCcnKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwd2NsaWVudCIgb25jbGljaz0icHdTZWxlY3RDbGllbnQoJytqc0FyZyhjLm5hbWUpKycpIj48ZGl2IGNsYXNzPSJwd2NuIj4nK2VzYyhjLm5hbWUpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwd2NtIj4nKyhjLm1ldGEmJmMubWV0YS5sZW5ndGg/ZXNjKGMubWV0YS5qb2luKCcgwrcgJykpOifQlNC+0YHRgtGK0L/QuCDQsdC10Lcg0LjQt9Cx0YDQsNC9INC60LvQuNC10L3RgicpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwd2NzdGF0Ij48c3BhbiBjbGFzcz0icHdjaGlwIj4nK2MuY291bnQrJyDQtNC+0YHRgtGK0L8nKyhjLmNvdW50PT09MT8nJzon0LAnKSsnPC9zcGFuPicrY2F0cysnPC9kaXY+PC9kaXY+JzsKICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KICB2YXIgbGlzdD1ELnBhc3N3b3Jkcy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHB3Q2xpZW50TmFtZShwKT09PVBXLmNsaWVudDt9KTsKICBib3guaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwd2hlYWQiPjxkaXY+PGRpdiBjbGFzcz0icHd0aXRsZSI+Jytlc2MoUFcuY2xpZW50KSsnPC9kaXY+PGRpdiBjbGFzcz0icHdzdWIiPicrbGlzdC5sZW5ndGgrJyDQt9Cw0L/QsNC30LXQvdC4INC00L7RgdGC0YrQv9CwPC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHgiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iUFcuY2xpZW50PVwnXCc7clBhc3N3b3JkcygpIj7ihpAg0JrQu9C40LXQvdGC0Lg8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblBhc3NNb2RhbChQVy5jbGllbnQpIj4rINCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2PjwvZGl2PicrCiAgICAobGlzdC5sZW5ndGg/bGlzdC5tYXAoZnVuY3Rpb24ocCl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icHdyIj48ZGl2IHN0eWxlPSJmbGV4OjEiPjxkaXYgY2xhc3M9InB3cyI+Jytlc2MocC5zaXRlKSsnPC9kaXY+PGRpdiBjbGFzcz0icHd1Ij4nK2VzYyhwLnVzZXJuYW1lfHwnJykrJzwvZGl2PjwvZGl2PjxzcGFuIGNsYXNzPSJ0YWcgJysoY21bcC5jYXRlZ29yeV18fCd3ZWInKSsnIj4nK2VzYyhwd0NhdExhYmVsKHAuY2F0ZWdvcnkpKSsnPC9zcGFuPjxkaXYgY2xhc3M9InB3bSIgb25jbGljaz0icmV2UCh0aGlzLCcranNBcmcocC5wYXNzfHwnJykrJykiIHRpdGxlPSLQmtC70LjQutC90LgiPuKAouKAouKAouKAouKAouKAouKAouKAojwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY3BUeCgnK2pzQXJnKHAucGFzc3x8JycpKycpIj7QmtC+0L/QuNGA0LDQuTwvYnV0dG9uPjxidXR0b24gY2xhc3M9Im9idG4iIG9uY2xpY2s9Im9wZW5QYXNzTW9kYWwoUFcuY2xpZW50LCcranNBcmcocC5pZCkrJykiPtCg0LXQtNCw0LrRgtC40YDQsNC5PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwncGFzc3dvcmRzXCcsJytqc0FyZyhwLmlkKSsnKSI+4pyVPC9idXR0b24+PC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOmVtcCgn4peOJywn0J3Rj9C80LAg0LTQvtGB0YLRitC/0Lgg0LfQsCDRgtC+0LfQuCDQutC70LjQtdC90YInLCcnLCcrINCU0L7QsdCw0LLQuCDQtNC+0YHRgtGK0L8nLCJvcGVuUGFzc01vZGFsKFBXLmNsaWVudCkiKSk7Cn0KZnVuY3Rpb24gcmV2UChlbCxwKXtlbC5kYXRhc2V0LnM9PT0nMSc/KGVsLnRleHRDb250ZW50PSfigKLigKLigKLigKLigKLigKLigKLigKInLGVsLmRhdGFzZXQucz0nJyk6KGVsLnRleHRDb250ZW50PXAsZWwuZGF0YXNldC5zPScxJyk7fQpmdW5jdGlvbiBjcFR4KHQpe25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQpLnRoZW4oZnVuY3Rpb24oKXt0b2FzdCgn0JrQvtC/0LjRgNCw0L3QviEnLCdvaycpO30pO30KCmZ1bmN0aW9uIHJOb3RlcygpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmcnKTsKICBpZighRC5ub3Rlcy5sZW5ndGgpe2VsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0iZ3JpZC1jb2x1bW46MS8tMSI+JytlbXAoJ+KXuycsJ9Cd0Y/QvNCw0YLQtSDQsdC10LvQtdC20LrQuCcsJycsJysg0J3QvtCy0LAg0LHQtdC70LXQttC60LAnLCJtb2RhbCgnbm90ZScpIikrJzwvZGl2Pic7cmV0dXJuO30KICBlbC5pbm5lckhUTUw9RC5ub3Rlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuICc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij4nK24udGl0bGUrKG4udXJnZW50PT0xPyc8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKTttYXJnaW4tbGVmdDo1cHgiPuKaoDwvc3Bhbj4nOicnKSsnPC9kaXY+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnbm90ZXNcJyxcJycrbi5pZCsnXCcpIj7inJU8L2J1dHRvbj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjEzcHggMTdweDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuNyI+Jysobi5ib2R5fHwnJykrJzwvZGl2PjxkaXYgc3R5bGU9InBhZGRpbmc6OXB4IDE3cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYnJkKTtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO2Rpc3BsYXk6ZmxleDtnYXA6OHB4Ij48c3Bhbj4nKyhuLmF1dGhvcnx8JycpKyc8L3NwYW4+Jysobi5hdXRob3I/JzxzcGFuPsK3PC9zcGFuPic6JycpKyc8c3Bhbj4nK2ZkdChuLmNyZWF0ZWRfYXQpKyc8L3NwYW4+PC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTsKfQoKZnVuY3Rpb24gclVzZXJzKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1bCcpOwogIGlmKCFELnVzZXJzLmxlbmd0aCl7ZWwuaW5uZXJIVE1MPWVtcCgn8J+RpCcsJ9Cd0Y/QvNCw0YLQtSDQv9C+0YLRgNC10LHQuNGC0LXQu9C4JywnJywnKyDQndC+0LIg0YHQu9GD0LbQuNGC0LXQuycsIm1vZGFsKCduZXdVc2VyJykiKTtyZXR1cm47fQogIGVsLmlubmVySFRNTD1ELnVzZXJzLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gJzxkaXYgY2xhc3M9InVyIj48ZGl2IGNsYXNzPSJhdiAnKyh1LmNvbG9yfHwnYXYtcCcpKyciPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+Jyt1Lm5hbWUrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrKHUucm9sZXx8JycpKyc8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jyt1LnVzZXJuYW1lKyc8L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7JysodS5pc19hZG1pbj09MT8nYmFja2dyb3VuZDp2YXIoLS1hZGltKTtjb2xvcjp2YXIoLS1hbWIpJzonYmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjp2YXIoLS1ncm4pJykrJyI+JysoIHUuaXNfYWRtaW49PTE/J/CfkZEg0JDQtNC80LjQvSc6J9Ch0LvRg9C20LjRgtC10LsnKSsnPC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0ibW9kYWwoXCdlZGl0VXNlclwnLFwnJyt1LmlkKydcJykiPtCg0LXQtNCw0LrRgtC40YDQsNC5PC9idXR0b24+JysodS5pc19hZG1pbiE9MT8nPGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRVKFwnJyt1LmlkKydcJykiPuKclTwvYnV0dG9uPic6JycpKyc8L2Rpdj4nO30pLmpvaW4oJycpOwp9CgovLyDilIDilIAgUFJFU0VOQ0Ug4pSA4pSACnZhciBQU0k9ewogIGFycml2ZWQ6ICAge2Vtb2ppOifwn5+iJywgbGFiZWw6J9Cd0LAg0YDQsNCx0L7RgtCwJywgICAgICAgY29sb3I6JyMyMmM1NWUnfSwKICBicmVhazogICAgIHtlbW9qaTon4piVJywgbGFiZWw6J9Cd0LAg0L/QvtGH0LjQstC60LAnLCAgICAgICBjb2xvcjonI2Y1OWUwYid9LAogIGJhY2s6ICAgICAge2Vtb2ppOifwn5K8JywgbGFiZWw6J9Ce0LHRgNCw0YLQvdC+JywgICAgICAgICAgY29sb3I6JyMzOGJkZjgnfSwKICBsZWZ0OiAgICAgIHtlbW9qaTon8J+UtCcsIGxhYmVsOifQotGA0YrQs9C90LDQuycsICAgICAgICAgIGNvbG9yOicjZWY0NDQ0J30sCiAgdG9pbGV0OiAgICB7ZW1vamk6J/Cfmr0nLCBsYWJlbDon0KLQvtCw0LvQtdGC0L3QsCcsICAgICAgICAgY29sb3I6JyM4YjVjZjYnfSwKICBzbW9rZTogICAgIHtlbW9qaTon8J+arCcsIGxhYmVsOifQndCwINGG0LjQs9Cw0YDQsCcsICAgICAgICBjb2xvcjonIzZiNzI4MCd9LAogIHNtb2tlX2JhY2s6e2Vtb2ppOifwn5KoJywgbGFiZWw6J9CS0YrRgNC90LAg0YHQtScsICAgICAgICAgY29sb3I6JyMzOGJkZjgnfQp9OwoKZnVuY3Rpb24gcHJlc2VuY2VNZXRhKHgpewogIGlmKCFDVXx8Q1UuaXNfYWRtaW4hPTF8fCF4KXJldHVybiAnJzsKICB2YXIgYml0cz1bXTsKICBpZih4LmlwX2FkZHJlc3MpYml0cy5wdXNoKCdJUDogJytlc2MoeC5pcF9hZGRyZXNzKSk7CiAgaWYoeC5sYXRpdHVkZSYmeC5sb25naXR1ZGUpewogICAgdmFyIGxhdD1OdW1iZXIoeC5sYXRpdHVkZSksbG5nPU51bWJlcih4LmxvbmdpdHVkZSk7CiAgICB2YXIgYWNjPXguYWNjdXJhY3k/JyDCtyDCsScrTWF0aC5yb3VuZChOdW1iZXIoeC5hY2N1cmFjeSkpKydtJzonJzsKICAgIGJpdHMucHVzaCgnPGEgaHJlZj0iaHR0cHM6Ly9tYXBzLmdvb2dsZS5jb20vP3E9JytsYXQrJywnK2xuZysnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOnZhcigtLWFjYzIpIj7QmtCw0YDRgtCwPC9hPicrYWNjKTsKICB9ZWxzZSBpZih4LmxvY2F0aW9uX25vdGUpewogICAgYml0cy5wdXNoKGVzYyh4LmxvY2F0aW9uX25vdGUpKTsKICB9CiAgcmV0dXJuIGJpdHMubGVuZ3RoPyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6N3B4O2xpbmUtaGVpZ2h0OjEuNSI+JytiaXRzLmpvaW4oJzxicj4nKSsnPC9kaXY+JzonJzsKfQoKZnVuY3Rpb24gZ2V0UHJlc2VuY2VHZW8oKXsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSl7CiAgICBpZighbmF2aWdhdG9yLmdlb2xvY2F0aW9uKXtyZXNvbHZlKHtsb2NhdGlvbl9ub3RlOifQk9C10L7Qu9C+0LrQsNGG0LjRj9GC0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAnfSk7cmV0dXJuO30KICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocG9zKXsKICAgICAgcmVzb2x2ZSh7CiAgICAgICAgbGF0aXR1ZGU6cG9zLmNvb3Jkcy5sYXRpdHVkZSwKICAgICAgICBsb25naXR1ZGU6cG9zLmNvb3Jkcy5sb25naXR1ZGUsCiAgICAgICAgYWNjdXJhY3k6cG9zLmNvb3Jkcy5hY2N1cmFjeSwKICAgICAgICBsb2NhdGlvbl9ub3RlOicnCiAgICAgIH0pOwogICAgfSxmdW5jdGlvbihlcnIpewogICAgICB2YXIgbXNnPWVyciYmZXJyLmNvZGU9PT0xPyfQm9C+0LrQsNGG0LjRj9GC0LAg0LUg0L7RgtC60LDQt9Cw0L3QsCc6J9Cb0L7QutCw0YbQuNGP0YLQsCDQvdC1INC1INC90LDQu9C40YfQvdCwJzsKICAgICAgcmVzb2x2ZSh7bG9jYXRpb25fbm90ZTptc2d9KTsKICAgIH0se2VuYWJsZUhpZ2hBY2N1cmFjeTp0cnVlLHRpbWVvdXQ6NjUwMCxtYXhpbXVtQWdlOjYwMDAwfSk7CiAgfSk7Cn0KCmFzeW5jIGZ1bmN0aW9uIHJQcmVzZW5jZSgpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlZicpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj4nOwogIHZhciBkYXRhPWF3YWl0IGFmKCdwcmVzZW5jZScpOwogIHZhciBjdXI9KGRhdGEmJmRhdGEuY3VycmVudCk/ZGF0YS5jdXJyZW50OltdOwogIHZhciBsb2c9KGRhdGEmJmRhdGEubG9nKT9kYXRhLmxvZzpbXTsKICB2YXIgbXlTPWN1ci5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC51c2VyX2lkKT09PVN0cmluZyhDVSYmQ1UuaWQpO30pOwogIHZhciBteVNJPW15Uz9QU0lbbXlTLnN0YXR1c106bnVsbDsKICB2YXIgbXlUbT1teVM/bmV3IERhdGUobXlTLmNyZWF0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygnYmctQkcnLHtob3VyOicyLWRpZ2l0JyxtaW51dGU6JzItZGlnaXQnfSk6Jyc7CiAgdmFyIGJhZGdlPW15U0kKICAgID8nPGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjhweCAyMHB4O2JvcmRlci1yYWRpdXM6MzBweDtiYWNrZ3JvdW5kOicrbXlTSS5jb2xvcisnMjI7Ym9yZGVyOjFweCBzb2xpZCAnK215U0kuY29sb3IrJzU1O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjonK215U0kuY29sb3IrJzttYXJnaW4tYm90dG9tOjIycHgiPicrbXlTSS5lbW9qaSsnICcrbXlTSS5sYWJlbCsnIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtmb250LXdlaWdodDo0MDA7b3BhY2l0eTouNyI+0L7RgiAnK215VG0rJzwvc3Bhbj48L2Rpdj4nCiAgICA6JzxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo4cHggMjBweDtib3JkZXItcmFkaXVzOjMwcHg7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjIycHgiPuKaqiDQndC1INC1INC+0YLQsdC10LvRj9C30LDQvdC+INC00L3QtdGBPC9kaXY+JzsKICB2YXIgTEJMPXthcnJpdmVkOifQn9GA0LjRgdGC0LjQs9C90LDRhScsYnJlYWs6J9Cf0L7Rh9C40LLQutCwJyxiYWNrOifQntCx0YDQsNGC0L3QvicsbGVmdDon0KLRgNGK0LPQstCw0LwnLHRvaWxldDon0KLQvtCw0LvQtdGC0L3QsCcsc21va2U6J9Cm0LjQs9Cw0YDQsCcsc21va2VfYmFjazon0J7QsdGA0LDRgtC90L4nfTsKICB2YXIgYnRucz1bJ2Fycml2ZWQnLCdicmVhaycsJ2JhY2snLCdsZWZ0JywndG9pbGV0Jywnc21va2UnLCdzbW9rZV9iYWNrJ10ubWFwKGZ1bmN0aW9uKHMpewogICAgdmFyIGM9UFNJW3NdO3ZhciBpYT1teVMmJm15Uy5zdGF0dXM9PT1zOwogICAgcmV0dXJuICc8YnV0dG9uIG9uY2xpY2s9ImxvZ1AoXCcnK3MrJ1wnKSIgc3R5bGU9InBhZGRpbmc6MThweCAxNnB4O2JvcmRlci1yYWRpdXM6MTRweDtib3JkZXI6MnB4IHNvbGlkICcrYy5jb2xvcisnO2JhY2tncm91bmQ6JysoaWE/Yy5jb2xvcjondHJhbnNwYXJlbnQnKSsnO2NvbG9yOicrKGlhPycjZmZmJzpjLmNvbG9yKSsnO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OkRNIFNhbnMsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7bWluLXdpZHRoOjExMHB4O2JveC1zaGFkb3c6JysoaWE/JzAgNHB4IDE2cHggJytjLmNvbG9yKyc0NCc6J25vbmUnKSsnO291dGxpbmU6bm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MjZweDtsaW5lLWhlaWdodDoxIj4nK2MuZW1vamkrJzwvc3Bhbj48c3Bhbj4nK0xCTFtzXSsnPC9zcGFuPjwvYnV0dG9uPic7CiAgfSkuam9pbignJyk7CiAgdmFyIGNhcmRzPUQudXNlcnMubWFwKGZ1bmN0aW9uKHUpewogICAgdmFyIGNzPWN1ci5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC51c2VyX2lkKT09PVN0cmluZyh1LmlkKTt9KTsKICAgIHZhciBzaT1jcz9QU0lbY3Muc3RhdHVzXTpudWxsOwogICAgdmFyIHQ9Y3M/bmV3IERhdGUoY3MuY3JlYXRlZF9hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCdiZy1CRycse2hvdXI6JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9KTonJzsKICAgIHZhciBjb2w9dS5jb2xvcnx8J2F2LXAnOwogICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjJweCBzb2xpZCAnKyhzaT9zaS5jb2xvcisnODgnOid2YXIoLS1icmQpJykrJztib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxOHB4O3RleHQtYWxpZ246Y2VudGVyIj4nCiAgICAgICsnPGRpdiBzdHlsZT0id2lkdGg6NDhweDtoZWlnaHQ6NDhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOicrKEFCR1tjb2xdfHwncmdiYSgxMDgsOTksMjU1LC4yNSknKSsnO2NvbG9yOicrKEFDVltjb2xdfHwnI2E3OGJmYScpKyc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46MCBhdXRvIDEwcHgiPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO21hcmdpbi1ib3R0b206MnB4Ij4nK3UubmFtZSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbToxMHB4Ij4nKyh1LnJvbGV8fCcnKSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6NXB4IDEycHg7Ym9yZGVyLXJhZGl1czoyMHB4O2JhY2tncm91bmQ6Jysoc2k/c2kuY29sb3IrJzE4JzondmFyKC0tc3VyMiknKSsnO2NvbG9yOicrKHNpP3NpLmNvbG9yOid2YXIoLS10eDMpJykrJztib3JkZXI6MXB4IHNvbGlkICcrKHNpP3NpLmNvbG9yKyczMyc6J3ZhcigtLWJyZCknKSsnIj4nKyggc2k/c2kuZW1vamk6J+KaqicpKycgJysoc2k/c2kubGFiZWw6J9Cd0LUg0LUg0LLQu9GP0LfRitC7JykrJzwvZGl2PicKICAgICAgKyh0Pyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6NnB4O2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+0L7RgiAnK3QrJzwvZGl2Pic6JycpCiAgICAgICtwcmVzZW5jZU1ldGEoY3MpCiAgICAgICsnPC9kaXY+JzsKICB9KS5qb2luKCcnKTsKICB2YXIgdGQ9bmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7d2Vla2RheTonbG9uZycsZGF5OidudW1lcmljJyxtb250aDonbG9uZyd9KTsKICB2YXIgbG9nUj1sb2cubGVuZ3RoP2xvZy5tYXAoZnVuY3Rpb24obCl7CiAgICB2YXIgc2k9UFNJW2wuc3RhdHVzXTt2YXIgdD1uZXcgRGF0ZShsLmNyZWF0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygnYmctQkcnLHtob3VyOicyLWRpZ2l0JyxtaW51dGU6JzItZGlnaXQnfSk7CiAgICB2YXIgY29sPWwuY29sb3J8fCdhdi1wJzsKICAgIHJldHVybiAnPGRpdiBzdHlsZT0icGFkZGluZzoxMHB4IDE2cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4Ij4nCiAgICAgICsnPGRpdiBzdHlsZT0id2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOicrKEFCR1tjb2xdfHwncmdiYSgxMDgsOTksMjU1LC4yNSknKSsnO2NvbG9yOicrKEFDVltjb2xdfHwnI2E3OGJmYScpKyc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDtmbGV4LXNocmluazowIj4nKyhsLmluaXRpYWxzfHwnPycpKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KTtmbGV4OjEiPicrbC5uYW1lKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2JhY2tncm91bmQ6Jysoc2k/c2kuY29sb3IrJzE4JzonIzg4ODg4ODE4JykrJztjb2xvcjonKyhzaT9zaS5jb2xvcjonIzg4OCcpKyciPicrKCBzaT9zaS5lbW9qaTon4pqqJykrJyAnKyhzaT9zaS5sYWJlbDpsLnN0YXR1cykrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jyt0Kyc8L2Rpdj4nCiAgICAgICtwcmVzZW5jZU1ldGEobCkKICAgICAgKyc8L2Rpdj4nOwogIH0pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0LfQsNC/0LjRgdC4INC30LAg0LTQvdC10YE8L2Rpdj4nOwogIGVsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzozMnB4O21hcmdpbi1ib3R0b206MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLXNoZCkiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS10eCk7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkYsg0JfQtNGA0LDQstC10LksICcrKENVP0NVLm5hbWU6JycpKycgITwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbToxNnB4Ij7QntGC0LHQtdC70LXQttC4INGB0LLQvtC10YLQviDQv9GA0LjRgdGK0YHRgtCy0LjQtTwvZGl2PicrYmFkZ2UrJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nK2J0bnMrJzwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjEycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtIj7QodGC0LDRgtGD0YEg0L3QsCDQtdC60LjQv9CwPC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE3NXB4LDFmcikpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjBweCI+JytjYXJkcysnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7wn5OLINCW0YPRgNC90LDQuyDigJQgJyt0ZCsnPC9kaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrbG9nLmxlbmd0aCsnINC30LDQv9C40YHQsDwvc3Bhbj48L2Rpdj4nK2xvZ1IrJzwvZGl2Pic7Cn0KCmFzeW5jIGZ1bmN0aW9uIGxvZ1Aoc3RhdHVzKXsKICBpZighQ1V8fCFDVS5pZCl7dG9hc3QoJ9Cd0LUg0YHRgtC1INCy0LvQtdC30LvQuCcsJ2VycicpO3JldHVybjt9CiAgdmFyIGdlbz1hd2FpdCBnZXRQcmVzZW5jZUdlbygpOwogIHZhciByPWF3YWl0IGFmKCdwcmVzZW5jZScsJ1BPU1QnLE9iamVjdC5hc3NpZ24oe3VzZXJfaWQ6Q1UuaWQsc3RhdHVzOnN0YXR1c30sZ2VvKSk7CiAgaWYociE9PW51bGwpewogICAgdmFyIE09e2Fycml2ZWQ6J+KckyDQlNC+0LHRgNC1INC00L7RiNGK0LshJyxicmVhazon4piVINCf0YDQuNGP0YLQvdCwINC/0L7Rh9C40LLQutCwIScsYmFjazon8J+SvCDQlNC+0LHRgNC1INC00L7RiNGK0Lsg0L7QsdGA0LDRgtC90L4hJyxsZWZ0Oifwn5GLINCb0LXQutCwINCy0LXRh9C10YAhJ307CiAgICB0b2FzdChNW3N0YXR1c118fCdPSycsJ29rJyk7CiAgICBhd2FpdCByUHJlc2VuY2UoKTsKICB9ZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBJywnZXJyJyk7Cn0KCi8vIOKUgOKUgCBDQUxFTkRBUiDilIDilIAKZnVuY3Rpb24gckNhbGVuZGFyKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxmJyk7CiAgdmFyIHRkPW5ldyBEYXRlKCk7CiAgaWYoIXdpbmRvdy5fY2FsKXdpbmRvdy5fY2FsPXt5ZWFyOnRkLmdldEZ1bGxZZWFyKCksbW9udGg6dGQuZ2V0TW9udGgoKSxzZWw6dGQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKX07CiAgdmFyIHN0PXdpbmRvdy5fY2FsOwogIHZhciBkaW09bmV3IERhdGUoc3QueWVhcixzdC5tb250aCsxLDApLmdldERhdGUoKTsKICB2YXIgZmQyPW5ldyBEYXRlKHN0LnllYXIsc3QubW9udGgsMSkuZ2V0RGF5KCk7CiAgdmFyIG9mZj1mZDI9PT0wPzY6ZmQyLTE7CiAgdmFyIE1OPVsn0K/QvdGD0LDRgNC4Jywn0KTQtdCy0YDRg9Cw0YDQuCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDQuScsJ9Cu0L3QuCcsJ9Cu0LvQuCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCy0YDQuCcsJ9Ce0LrRgtC+0LzQstGA0LgnLCfQndC+0LXQvNCy0YDQuCcsJ9CU0LXQutC10LzQstGA0LgnXTsKICB2YXIgREw9WyfQn9C9Jywn0JLRgicsJ9Ch0YAnLCfQp9GCJywn0J/RgicsJ9Ch0LEnLCfQndC0J107CiAgdmFyIHRkcz10ZC50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIHZhciBkYXlzPURMLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImNhbGwiPicrZCsnPC9kaXY+Jzt9KS5qb2luKCcnKTsKICBmb3IodmFyIGk9MDtpPG9mZjtpKyspZGF5cys9JzxkaXYgY2xhc3M9ImNhbGRheSBvbSI+PC9kaXY+JzsKICBmb3IodmFyIGQ9MTtkPD1kaW07ZCsrKXsKICAgIHZhciBkcz1zdC55ZWFyKyctJytTdHJpbmcoc3QubW9udGgrMSkucGFkU3RhcnQoMiwnMCcpKyctJytTdHJpbmcoZCkucGFkU3RhcnQoMiwnMCcpOwogICAgdmFyIGR0cz1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kdWVfZGF0ZSYmdC5kdWVfZGF0ZS5zbGljZSgwLDEwKT09PWRzO30pOwogICAgdmFyIGV2PWR0cy5zbGljZSgwLDIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJzxkaXYgY2xhc3M9ImNhbGV2Ij4nK3QudGV4dC5zbGljZSgwLDEyKSsnPC9kaXY+Jzt9KS5qb2luKCcnKTsKICAgIGRheXMrPSc8ZGl2IGNsYXNzPSJjYWxkYXknKyhkcz09PXRkcz8nIHRvZGF5JzonJykrKGRzPT09c3Quc2VsPycgc2VsJzonJykrJyIgb25jbGljaz0id2luZG93Ll9jYWwuc2VsPVwnJytkcysnXCc7ckNhbGVuZGFyKCkiPjxkaXYgY2xhc3M9ImNhbGRuIj4nK2QrJzwvZGl2PicrZXYrKGR0cy5sZW5ndGg+Mj8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjlweDtjb2xvcjp2YXIoLS10eDMpIj4rJysoZHRzLmxlbmd0aC0yKSsnPC9kaXY+JzonJykrJzwvZGl2Pic7CiAgfQogIHZhciByZW09KG9mZitkaW0pJTc7aWYocmVtKWZvcih2YXIgZDI9MTtkMjw9Ny1yZW07ZDIrKylkYXlzKz0nPGRpdiBjbGFzcz0iY2FsZGF5IG9tIj48L2Rpdj4nOwogIHZhciBzVD1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kdWVfZGF0ZSYmdC5kdWVfZGF0ZS5zbGljZSgwLDEwKT09PXN0LnNlbDt9KTsKICB2YXIgc0REPW5ldyBEYXRlKHN0LnNlbCsnVDEyOjAwOjAwJykudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse3dlZWtkYXk6J2xvbmcnLGRheTonbnVtZXJpYycsbW9udGg6J2xvbmcnfSk7CiAgdmFyIHVwPUQudGFza3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR1ZV9kYXRlJiZ0LmRvbmUhPTEmJnQuZHVlX2RhdGU+PXRkczt9KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZHVlX2RhdGUubG9jYWxlQ29tcGFyZShiLmR1ZV9kYXRlKTt9KS5zbGljZSgwLDgpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iY2FsZyI+PGRpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTRweCI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ3aW5kb3cuX2NhbC5tb250aC0tO2lmKHdpbmRvdy5fY2FsLm1vbnRoPDApe3dpbmRvdy5fY2FsLm1vbnRoPTExO3dpbmRvdy5fY2FsLnllYXItLTt9ckNhbGVuZGFyKCkiPuKAuTwvYnV0dG9uPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCkiPicrTU5bc3QubW9udGhdKycgJytzdC55ZWFyKyc8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9IndpbmRvdy5fY2FsLm1vbnRoKys7aWYod2luZG93Ll9jYWwubW9udGg+MTEpe3dpbmRvdy5fY2FsLm1vbnRoPTA7d2luZG93Ll9jYWwueWVhcisrO31yQ2FsZW5kYXIoKSI+4oC6PC9idXR0b24+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKFwnY2FsVGFza1wnLFwnJytzdC5zZWwrJ1wnKSI+KyDQl9Cw0LTQsNGH0LAg0YEg0LTQsNGC0LA8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSJjYWxkIj4nK2RheXMrJzwvZGl2PjwvZGl2PicKICAgICsnPGRpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij4nK3NERCsnPC9kaXY+PGJ1dHRvbiBjbGFzcz0icGEiIG9uY2xpY2s9Im1vZGFsKFwnY2FsVGFza1wnLFwnJytzdC5zZWwrJ1wnKSI+KyDQl9Cw0LTQsNGH0LA8L2J1dHRvbj48L2Rpdj4nKyhzVC5sZW5ndGg/c1QubWFwKHRIVE1MKS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC30LDQtNCw0YfQuCDQt9CwINC00LXQvdGPPC9kaXY+JykrJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+TiyDQn9GA0LXQtNGB0YLQvtGP0YnQuDwvZGl2PjwvZGl2PicrKHVwLmxlbmd0aD91cC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJ0aSIgb25jbGljaz0idG9nQ2FsVChcJycrdC5pZCsnXCcpIj48ZGl2IGNsYXNzPSJ0Y2siPjwvZGl2PjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBjbGFzcz0idHR4Ij4nK3QudGV4dCsnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweCI+JytuZXcgRGF0ZSh0LmR1ZV9kYXRlKydUMTI6MDA6MDAnKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnfSkrJyDCtyAnKyh0LmFzc2lnbmVlfHwn4oCUJykrJzwvZGl2PjwvZGl2PicrKHQudXJnZW50PT0xPyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tcmVkKSI+4pqgPC9zcGFuPic6JycpKyc8L2Rpdj4nO30pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0L/RgNC10LTRgdGC0L7Rj9GJ0Lg8L2Rpdj4nKSsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKfQphc3luYyBmdW5jdGlvbiB0b2dDYWxUKGlkKXsKICB2YXIgdD1ELnRhc2tzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtpZighdClyZXR1cm47CiAgdC5kb25lPXQuZG9uZT09MT8wOjE7CiAgYXdhaXQgYWYoJ3Rhc2tzJywnUE9TVCcse2lkOnQuaWQsdGV4dDp0LnRleHQsYXNzaWduZWU6dC5hc3NpZ25lZSx1cmdlbnQ6dC51cmdlbnQsZG9uZTp0LmRvbmUsZHVlX2RhdGU6dC5kdWVfZGF0ZXx8bnVsbH0pOwogIHJDYWxlbmRhcigpO3RvYXN0KHQuZG9uZT09MT8n4pyTINCY0LfQv9GK0LvQvdC10L3QsCc6J9CS0YrRgNC90LDRgtCwJywnb2snKTsKfQoKLy8g4pSA4pSAIFRBUkdFVFMgTkFWIEhFTFBFUlMg4pSA4pSACmZ1bmN0aW9uIHRnUHJldkRheSgpewogIHZhciBkPW5ldyBEYXRlKF90Z0RhdGUrJ1QxMjowMDowMCcpOwogIGQuc2V0RGF0ZShkLmdldERhdGUoKS0xKTsKICBfdGdEYXRlPWQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICByVGFyZ2V0cygpOwp9CmZ1bmN0aW9uIHRnTmV4dERheSgpewogIHZhciBkPW5ldyBEYXRlKF90Z0RhdGUrJ1QxMjowMDowMCcpOwogIGQuc2V0RGF0ZShkLmdldERhdGUoKSsxKTsKICBfdGdEYXRlPWQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICByVGFyZ2V0cygpOwp9CmZ1bmN0aW9uIHRnVG9kYXkoKXsKICBfdGdEYXRlPW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICByVGFyZ2V0cygpOwp9CgovLyDilIDilIAgV09SSyBSRVBPUlQgSEVMUEVSUyDilIDilIAKZnVuY3Rpb24gd3JVcGRhdGUoKXsKICB2YXIgZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3JGcm9tJyk7CiAgdmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dyVG8nKTsKICBpZihmKXdpbmRvdy5fd3JGcm9tPWYudmFsdWU7CiAgaWYodCl3aW5kb3cuX3dyVG89dC52YWx1ZTsKICByV29ya1JlcG9ydCgpOwp9CmZ1bmN0aW9uIHdyVGhpc01vbnRoKCl7CiAgdmFyIGQ9bmV3IERhdGUoKTsKICB3aW5kb3cuX3dyRnJvbT1kLmdldEZ1bGxZZWFyKCkrJy0nK1N0cmluZyhkLmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpKyctMDEnOwogIHdpbmRvdy5fd3JUbz1kLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgcldvcmtSZXBvcnQoKTsKfQpmdW5jdGlvbiB3ckxhc3Q3KCl7CiAgdmFyIGQ9bmV3IERhdGUoKTtkLnNldERhdGUoZC5nZXREYXRlKCktNyk7CiAgd2luZG93Ll93ckZyb209ZC50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIHdpbmRvdy5fd3JUbz1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgcldvcmtSZXBvcnQoKTsKfQoKCi8vIOKUgOKUgCBUQVJHRVRTIOKUgOKUgAp2YXIgX3RnRGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKCmFzeW5jIGZ1bmN0aW9uIHJUYXJnZXRzKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Z2YnKTsKICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICB2YXIgZGF0YT1hd2FpdCBhZigndGFyZ2V0cycsbnVsbCxudWxsLCcmZGF0ZT0nK190Z0RhdGUpOwogIHZhciB0YXJnZXRzPWRhdGF8fFtdOwoKICB2YXIgaXNBZG1pbj1DVSYmQ1UuaXNfYWRtaW49PTE7CiAgdmFyIHRvZGF5PW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICB2YXIgZGF0ZVN0cj1uZXcgRGF0ZShfdGdEYXRlKydUMTI6MDA6MDAnKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7d2Vla2RheTonbG9uZycsZGF5OidudW1lcmljJyxtb250aDonbG9uZyd9KTsKCiAgLy8gRGF0ZSBuYXYKICB2YXIgbmF2Mj0nPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+OryDQlNC90LXQstC90Lgg0YLQsNGA0LPQtdGC0Lg8L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlciI+JwogICAgKyc8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InRnUHJldkRheSgpIj7igLk8L2J1dHRvbj4nCiAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpIj4nK2RhdGVTdHIrJzwvc3Bhbj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0idGdOZXh0RGF5KCkiPuKAujwvYnV0dG9uPicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ0Z1RvZGF5KCkiPtCU0L3QtdGBPC9idXR0b24+JwogICAgKyhpc0FkbWluPyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblRnTW9kYWwoKSI+KyDQndC+0LIg0YLQsNGA0LPQtdGCPC9idXR0b24+JzonJykKICAgICsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgaWYoIXRhcmdldHMubGVuZ3RoKXsKICAgIGVsLmlubmVySFRNTD1uYXYyKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjUwcHggMjBweDt0ZXh0LWFsaWduOmNlbnRlciI+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+OrzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgyKTttYXJnaW4tYm90dG9tOjZweCI+0J3Rj9C80LAg0YLQsNGA0LPQtdGC0Lgg0LfQsCAnK2RhdGVTdHIrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MTZweCI+0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRitGCINC80L7QttC1INC00LAg0LTQvtCx0LDQstC4INC90L7QstC4INGC0LDRgNCz0LXRgtC4PC9kaXY+JwogICAgICArKGlzQWRtaW4/JzxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJvcGVuVGdNb2RhbCgpIj4rINCU0L7QsdCw0LLQuCDRgtCw0YDQs9C10YI8L2J1dHRvbj4nOicnKQogICAgICArJzwvZGl2Pic7CiAgICByZXR1cm47CiAgfQoKICAvLyBHcm91cCBieSB1c2VyCiAgdmFyIGJ5VXNlcj17fTsKICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24odCl7CiAgICBpZighYnlVc2VyW3QudXNlcl9pZF0pIGJ5VXNlclt0LnVzZXJfaWRdPXtuYW1lOnQudXNlcl9uYW1lLGluaXRpYWxzOnQuaW5pdGlhbHMsY29sb3I6dC5jb2xvcixpdGVtczpbXX07CiAgICBieVVzZXJbdC51c2VyX2lkXS5pdGVtcy5wdXNoKHQpOwogIH0pOwoKICB2YXIgY2FyZHM9T2JqZWN0LnZhbHVlcyhieVVzZXIpLm1hcChmdW5jdGlvbih1KXsKICAgIHZhciBpdGVtcz11Lml0ZW1zLm1hcChmdW5jdGlvbih0KXsKICAgICAgdmFyIHBjdD1NYXRoLm1pbihNYXRoLnJvdW5kKHQuY3VycmVudF92YWx1ZS90LnRhcmdldF92YWx1ZSoxMDApLDEwMCk7CiAgICAgIHZhciBpc01lPVN0cmluZyh0LnVzZXJfaWQpPT09U3RyaW5nKENVJiZDVS5pZCk7CiAgICAgIHZhciBpc0RvbmU9cGN0Pj0xMDA7CiAgICAgIHZhciBpc0xvdz1wY3Q8NTAmJnQuY3VycmVudF92YWx1ZT4wOwogICAgICB2YXIgYmFyQ29sb3I9aXNEb25lPycjMjJjNTVlJzpwY3Q+PTc1PycjMzhiZGY4JzpwY3Q+PTUwPycjZjU5ZTBiJzonI2VmNDQ0NCc7CgogICAgICAvLyBNb3RpdmF0aW9uYWwgbWVzc2FnZQogICAgICB2YXIgbW90aXZNc2c9Jyc7dmFyIG1vdGl2Q29sb3I9Jyc7CiAgICAgIGlmKGlzRG9uZSl7IG1vdGl2TXNnPSfwn4+GINCe0YLQu9C40YfQtdC9INGA0LXQt9GD0LvRgtCw0YIhINCi0LDRgNCz0LXRgtGK0YIg0LUg0LjQt9C/0YrQu9C90LXQvSEnOyBtb3RpdkNvbG9yPScjMjJjNTVlJzsgfQogICAgICBlbHNlIGlmKHBjdD49NzUpeyBtb3Rpdk1zZz0n4q2QINCc0L3QvtCz0L4g0LTQvtCx0YDQtSEg0J/QvtGH0YLQuCDRgtCw0Lwg4oCUINC90LUg0YHQtSDQvtGC0LrQsNC30LLQsNC5ISc7IG1vdGl2Q29sb3I9JyMzOGJkZjgnOyB9CiAgICAgIGVsc2UgaWYocGN0Pj01MCl7IG1vdGl2TXNnPSfwn5GNINCd0LAg0L/QvtC70L7QstC40L3QsNGC0LAuINCh0YLQtdCz0L3QuCDRgdC1INC30LAg0LTQsCDQuNC30L/RitC70L3QuNGIINC/0LvQsNC90LAhJzsgbW90aXZDb2xvcj0nI2Y1OWUwYic7IH0KICAgICAgZWxzZSBpZihwY3Q+MCl7IG1vdGl2TXNnPSfimqDvuI8g0J/QvtC0INC90L7RgNC80LDRgtCwLiDQotGA0Y/QsdCy0LAg0L/QvtCy0LXRh9C1INGD0YHQuNC70LjRjyDigJQg0LfQsNC/0LvQsNGC0LDRgtCwINC30LDQstC40YHQuCDQvtGCINGA0LXQt9GD0LvRgtCw0YLQsCEnOyBtb3RpdkNvbG9yPScjZWY0NDQ0JzsgfQogICAgICBlbHNleyBtb3Rpdk1zZz0n4o+zINCS0YHQtSDQvtGJ0LUg0L3QtSDQtSDQt9Cw0L/QvtGH0L3QsNGC0L4uJzsgbW90aXZDb2xvcj0nIzZiNzI4MCc7IH0KCiAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCkiPicKICAgICAgICAvLyBIZWFkZXIKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi1ib3R0b206MTBweCI+JwogICAgICAgICsnPGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK3QudGl0bGUrJzwvZGl2PicKICAgICAgICArKHQuZGVzY3JpcHRpb24/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPicrdC5kZXNjcmlwdGlvbisnPC9kaXY+JzonJykKICAgICAgICArJzwvZGl2PicKICAgICAgICArKGlzQWRtaW4/JzxidXR0b24gY2xhc3M9Im9idG4iIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIiBvbmNsaWNrPSJkZWxUZygnK3QuaWQrJykiPuKclTwvYnV0dG9uPic6JycpCiAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgLy8gUHJvZ3Jlc3MgYmFyCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206OHB4Ij4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJmbGV4OjE7aGVpZ2h0OjEycHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlci1yYWRpdXM6NnB4O292ZXJmbG93OmhpZGRlbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCkiPicKICAgICAgICArJzxkaXYgc3R5bGU9ImhlaWdodDoxMDAlO3dpZHRoOicrcGN0KyclO2JhY2tncm91bmQ6JytiYXJDb2xvcisnO2JvcmRlci1yYWRpdXM6NnB4O3RyYW5zaXRpb246d2lkdGggLjVzIGVhc2UiPjwvZGl2PicKICAgICAgICArJzwvZGl2PicKICAgICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6JytiYXJDb2xvcisnO21pbi13aWR0aDo0MHB4O3RleHQtYWxpZ246cmlnaHQiPicrcGN0KyclPC9kaXY+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgIC8vIE51bWJlcnMKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxMHB4Ij4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIj7QmNC30L/RitC70L3QtdC90L46IDxzdHJvbmcgc3R5bGU9ImNvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1tbykiPicrdC5jdXJyZW50X3ZhbHVlKycgJyt0LnVuaXQrJzwvc3Ryb25nPjwvZGl2PicKICAgICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiPtCi0LDRgNCz0LXRgjogPHN0cm9uZyBzdHlsZT0iY29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jyt0LnRhcmdldF92YWx1ZSsnICcrdC51bml0Kyc8L3N0cm9uZz48L2Rpdj4nCiAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgLy8gTW90aXZhdGlvbmFsIG1zZwogICAgICAgICsnPGRpdiBzdHlsZT0icGFkZGluZzo4cHggMTJweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOicrbW90aXZDb2xvcisnMTI7Ym9yZGVyOjFweCBzb2xpZCAnK21vdGl2Q29sb3IrJzMzO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOicrbW90aXZDb2xvcisnO2ZvbnQtd2VpZ2h0OjUwMDttYXJnaW4tYm90dG9tOicrKGlzTWUmJiFpc0RvbmU/JzEwJzonMCcpKydweCI+Jyttb3Rpdk1zZysnPC9kaXY+JwogICAgICAgIC8vIFVwZGF0ZSBidXR0b24gKG9ubHkgZm9yIGFzc2lnbmVkIHVzZXIgb3IgYWRtaW4pCiAgICAgICAgKygoaXNNZXx8aXNBZG1pbikmJiFpc0RvbmU/JzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEwcHgiPicKICAgICAgICAgICsnPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRnX2lucF8nK3QuaWQrJyIgbWluPSIwIiBtYXg9IicrdC50YXJnZXRfdmFsdWUrJyIgdmFsdWU9IicrdC5jdXJyZW50X3ZhbHVlKyciIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDEwcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTNweDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwcHgiPicKICAgICAgICAgICsnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiPicrdC51bml0Kyc8L3NwYW4+JwogICAgICAgICAgKyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0idXBkYXRlVGcoJyt0LmlkKycsJyt0LnRhcmdldF92YWx1ZSsnKSI+0J7QsdC90L7QstC4INC/0YDQvtCz0YDQtdGBPC9idXR0b24+JwogICAgICAgICAgKyhpc0RvbmU/Jyc6JzxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9ImJvcmRlci1jb2xvcjp2YXIoLS1ncm4pO2NvbG9yOnZhcigtLWdybikiIG9uY2xpY2s9InVwZGF0ZVRnRnVsbCgnK3QuaWQrJywnK3QudGFyZ2V0X3ZhbHVlKycpIj7inJMg0JjQt9C/0YrQu9C90LXQvSE8L2J1dHRvbj4nKQogICAgICAgICAgKyc8L2Rpdj4nOicnKQogICAgICAgICsnPC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOwoKICAgIHZhciBjb2w9dS5jb2xvcnx8J2F2LXAnOwogICAgdmFyIGRvbmVDb3VudD11Lml0ZW1zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LmN1cnJlbnRfdmFsdWUvdC50YXJnZXRfdmFsdWUqMTAwKT49MTAwO30pLmxlbmd0aDsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPicKICAgICAgKyc8ZGl2IGNsYXNzPSJwaCI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+JwogICAgICArJzxkaXYgY2xhc3M9ImF2ICcrY29sKyciIHN0eWxlPSJ3aWR0aDozNHB4O2hlaWdodDozNHB4O2ZvbnQtc2l6ZToxM3B4Ij4nKyh1LmluaXRpYWxzfHwnPycpKyc8L2Rpdj4nCiAgICAgICsnPGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK3UubmFtZSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrZG9uZUNvdW50KycvJyt1Lml0ZW1zLmxlbmd0aCsnINGC0LDRgNCz0LXRgtCwINC40LfQv9GK0LvQvdC10L3QuDwvZGl2PjwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPicrKCBkb25lQ291bnQ9PT11Lml0ZW1zLmxlbmd0aD8n8J+Phic6ZG9uZUNvdW50PjA/J+KaoSc6J+KPsycpKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6MTRweCAxN3B4Ij4nK2l0ZW1zKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JzsKICB9KS5qb2luKCcnKTsKCiAgZWwuaW5uZXJIVE1MPW5hdjIrY2FyZHM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRnKGlkLCBtYXhWYWwpewogIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RnX2lucF8nK2lkKTsKICBpZighaW5wKXJldHVybjsKICB2YXIgdmFsPXBhcnNlSW50KGlucC52YWx1ZSl8fDA7CiAgaWYodmFsPm1heFZhbCl2YWw9bWF4VmFsOwogIHZhciBzdGF0dXM9dmFsPj1tYXhWYWw/J2RvbmUnOidhY3RpdmUnOwogIHZhciByPWF3YWl0IGFmKCd0YXJnZXRzJywnUE9TVCcse2lkOmlkLGN1cnJlbnRfdmFsdWU6dmFsLHN0YXR1czpzdGF0dXN9KTsKICBpZihyIT09bnVsbCl7CiAgICB0b2FzdCh2YWw+PW1heFZhbD8n8J+PhiDQotCw0YDQs9C10YLRitGCINC1INC40LfQv9GK0LvQvdC10L0hJzon4pyTINCf0YDQvtCz0YDQtdGB0YrRgiDQtSDQvtCx0L3QvtCy0LXQvSEnLCdvaycpOwogICAgclRhcmdldHMoKTsKICB9IGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCcsJ2VycicpOwp9Cgphc3luYyBmdW5jdGlvbiB1cGRhdGVUZ0Z1bGwoaWQsIG1heFZhbCl7CiAgdmFyIHI9YXdhaXQgYWYoJ3RhcmdldHMnLCdQT1NUJyx7aWQ6aWQsY3VycmVudF92YWx1ZTptYXhWYWwsc3RhdHVzOidkb25lJ30pOwogIGlmKHIhPT1udWxsKXt0b2FzdCgn8J+PhiDQotCw0YDQs9C10YLRitGCINC1INC40LfQv9GK0LvQvdC10L0hJywnb2snKTtyVGFyZ2V0cygpO30KICBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LAnLCdlcnInKTsKfQoKYXN5bmMgZnVuY3Rpb24gZGVsVGcoaWQpewogIGlmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0YLQsNGA0LPQtdGC0LA/JykpcmV0dXJuOwogIGF3YWl0IGFmKCd0YXJnZXRzJywnREVMRVRFJyxudWxsLCcmaWQ9JytpZCk7CiAgdG9hc3QoJ9CY0LfRgtGA0LjRgtC+Jyk7clRhcmdldHMoKTsKfQoKZnVuY3Rpb24gb3BlblRnTW9kYWwoKXsKICBpZighRC51c2Vycy5sZW5ndGgpe3RvYXN0KCfQl9Cw0YDQtdC20LTQsCDQv9C+0YLRgNC10LHQuNGC0LXQu9C40YLQtS4uLicsJycpO3JldHVybjt9CiAgdmFyIGh0bWw9JzxoMz7wn46vINCd0L7QsiDRgtCw0YDQs9C10YI8L2gzPicKICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Ql9Cw0LPQu9Cw0LLQuNC1PC9sYWJlbD48aW5wdXQgaWQ9InRnVGkiIHBsYWNlaG9sZGVyPSLQvdCw0L/RgC4g0JrQsNGH0LLQsNC90LUg0L3QsCDQv9GA0L7QtNGD0LrRgtC4LCDQntCx0LDQttC00LDQvdC40Y8sINCe0YTQtdGA0YLQuC4uLiI+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0L/QuNGB0LDQvdC40LUgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPjxpbnB1dCBpZD0idGdEZSIgcGxhY2Vob2xkZXI9ItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQtNC10YLQsNC50LvQuCI+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LDRgNCz0LXRgiAo0LHRgNC+0LkpPC9sYWJlbD48aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idGdUdiIgcGxhY2Vob2xkZXI9IjMwMCIgbWluPSIxIj48L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JXQtNC40L3QuNGG0LA8L2xhYmVsPjxpbnB1dCBpZD0idGdVbiIgcGxhY2Vob2xkZXI9ItCx0YAuLCDQv9GA0L7QtNGD0LrRgtCwLCDQvtGE0LXRgNGC0LguLi4iIHZhbHVlPSLQsdGALiI+PC9kaXY+JwogICAgKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9Im1nIj4nCiAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHQu9GD0LbQuNGC0LXQuzwvbGFiZWw+PHNlbGVjdCBpZD0idGdVcyI+JytELnVzZXJzLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrdS5pZCsnIj4nK3UubmFtZSsodS5yb2xlPycgKCcrdS5yb2xlKycpJzonJykrJzwvb3B0aW9uPic7fSkuam9pbignJykrJzwvc2VsZWN0PjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNCw0YLQsDwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJ0Z0R0IiB2YWx1ZT0iJytfdGdEYXRlKyciPjwvZGl2PicKICAgICsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlVGcoKSI+0KHRitC30LTQsNC5INGC0LDRgNCz0LXRgjwvYnV0dG9uPjwvZGl2Pic7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21iJykuaW5uZXJIVE1MPWh0bWw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwp9Cgphc3luYyBmdW5jdGlvbiBzYXZlVGcoKXsKICB2YXIgdGl0bGU9Z3YoJ3RnVGknKTtpZighdGl0bGUpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC30LDQs9C70LDQstC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciB0dj1wYXJzZUludChndigndGdUdicpKTtpZighdHZ8fHR2PDEpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INGC0LDRgNCz0LXRgiDRgdGC0L7QudC90L7RgdGCJywnZXJyJyk7cmV0dXJuO30KICB2YXIgdXNlcklkPWd2KCd0Z1VzJyk7aWYoIXVzZXJJZCl7dG9hc3QoJ9CY0LfQsdC10YDQtdGC0LUg0YHQu9GD0LbQuNGC0LXQuycsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ3RhcmdldHMnLCdQT1NUJyx7CiAgICB1c2VyX2lkOnVzZXJJZCwgY3JlYXRlZF9ieTpDVS5pZCwKICAgIHRpdGxlOnRpdGxlLCBkZXNjcmlwdGlvbjpndigndGdEZScpLAogICAgdGFyZ2V0X3ZhbHVlOnR2LCBjdXJyZW50X3ZhbHVlOjAsCiAgICB1bml0Omd2KCd0Z1VuJyl8fCfQsdGALicsIGRhdGU6Z3YoJ3RnRHQnKXx8X3RnRGF0ZQogIH0pOwogIGlmKHIpewogICAgY21vKCk7CiAgICB0b2FzdCgn0KLQsNGA0LPQtdGC0YrRgiDQtSDRgdGK0LfQtNCw0LTQtdC9IScsJ29rJyk7CiAgICAvLyBTZW5kIHRlbGVncmFtIG5vdGlmaWNhdGlvbgogICAgclRhcmdldHMoKTsKICB9IGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCcsJ2VycicpOwp9CgoKLy8g4pSA4pSAIFdPUksgUkVQT1JUIOKUgOKUgAphc3luYyBmdW5jdGlvbiByV29ya1JlcG9ydCgpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3JmJyk7CiAgZWwuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2Pic7CgogIC8vIERhdGUgcmFuZ2UgcGlja2VyCiAgdmFyIHRvZGF5PW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICB2YXIgZmlyc3RPZk1vbnRoPXRvZGF5LnNsaWNlKDAsOCkrJzAxJzsKCiAgLy8gTG9hZCByZXBvcnQKICB2YXIgZnJvbT13aW5kb3cuX3dyRnJvbXx8Zmlyc3RPZk1vbnRoOwogIHZhciB0bz13aW5kb3cuX3dyVG98fHRvZGF5OwoKICB2YXIgZGF0YT1hd2FpdCBhZigncHJlc2VuY2VfcmVwb3J0JyxudWxsLG51bGwsJyZmcm9tPScrZnJvbSsnJnRvPScrdG8pOwogIGlmKCFkYXRhKXtlbC5pbm5lckhUTUw9JzxkaXYgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpIj7QndGP0LzQsCDQtNCw0L3QvdC4INC30LAg0LjQt9Cx0YDQsNC90LjRjyDQv9C10YDQuNC+0LQ8L2Rpdj4nO3JldHVybjt9CgogIHZhciB1c2Vycz1kYXRhLnVzZXJzfHxbXTsKICB2YXIgU1RBVFVTX0xBQkVMUz17YXJyaXZlZDon0J/RgNC40YHRgtC40LPQvdCwJyxicmVhazon0J/QvtGH0LjQstC60LAnLGJhY2s6J9CS0YrRgNC90LAg0YHQtScsbGVmdDon0KLRgNGK0LPQvdCwJyx0b2lsZXQ6J9Ci0L7QsNC70LXRgtC90LAnLHNtb2tlOifQptC40LPQsNGA0LAnLHNtb2tlX2JhY2s6J9Ch0LvQtdC0INGG0LjQs9Cw0YDQsCd9OwogIHZhciBTVEFUVVNfQ09MT1JTPXthcnJpdmVkOicjMjJjNTVlJyxicmVhazonI2Y1OWUwYicsYmFjazonIzM4YmRmOCcsbGVmdDonI2VmNDQ0NCcsdG9pbGV0OicjOGI1Y2Y2JyxzbW9rZTonIzZiNzI4MCcsc21va2VfYmFjazonIzM4YmRmOCd9OwoKICAvLyBNb3RpdmF0aW9uYWwgbWVzc2FnZXMgYmFzZWQgb24gaG91cnMKICBmdW5jdGlvbiBtb3Rpdihob3VycywgZGF5c1dvcmtlZCl7CiAgICBpZihob3Vyczw9MCkgcmV0dXJuIHttc2c6J9Cd0Y/QvNCwINC30LDQv9C40YHQsNC90L4g0L/RgNC40YHRitGB0YLQstC40LUg0LfQsCDQv9C10YDQuNC+0LTQsC4nLGNvbG9yOicjNmI3MjgwJyxpY29uOifinZMnfTsKICAgIHZhciBhdmc9ZGF5c1dvcmtlZD4wP2hvdXJzL2RheXNXb3JrZWQ6MDsKICAgIGlmKGF2Zz49OCkgcmV0dXJuIHttc2c6J9Ce0YLQu9C40YfQvdC+ISDQn9GK0LvQtdC9INGA0LDQsdC+0YLQtdC9INC00LXQvSDQstGB0LXQutC4INC00LXQvS4g0JfQsNC/0LvQsNGC0LDRgtCwINGB0LUg0LjQt9GH0LjRgdC70Y/QstCwINC90LAg0LHQsNC30LAg0L7RgtGA0LDQsdC+0YLQtdC90LjRgtC1INGH0LDRgdC+0LLQtS4nLGNvbG9yOicjMjJjNTVlJyxpY29uOifwn4+GJ307CiAgICBpZihhdmc+PTcpIHJldHVybiB7bXNnOifQnNC90L7Qs9C+INC00L7QsdGA0LUhINCf0L7Rh9GC0Lgg0L/RitC70L3QuCDRgNCw0LHQvtGC0L3QuCDQtNC90LguINCf0YDQvtC00YrQu9C20LDQstCw0Lkg0YLQsNC60LAhJyxjb2xvcjonIzIyYzU1ZScsaWNvbjon4q2QJ307CiAgICBpZihhdmc+PTYpIHJldHVybiB7bXNnOifQlNC+0LHRgNC1LiDQmNC80LAg0LzRj9GB0YLQviDQt9CwINC/0L7QtNC+0LHRgNC10L3QuNC1IOKAlCDQv9GK0LvQvdC40Y/RgiDRgNCw0LHQvtGC0LXQvSDQtNC10L0g0LUgOCDRh9Cw0YHQsC4nLGNvbG9yOicjZjU5ZTBiJyxpY29uOifwn5GNJ307CiAgICBpZihhdmc+PTQpIHJldHVybiB7bXNnOifQn9C+0LQg0YHRgNC10LTQvdC+0YLQvi4g0JfQsNC/0LvQsNGC0LDRgtCwINGB0LUg0LLQu9C40Y/QtSDQvtGCINC+0YLRgNCw0LHQvtGC0LXQvdC40YLQtSDRh9Cw0YHQvtCy0LUuJyxjb2xvcjonI2Y1OWUwYicsaWNvbjon4pqg77iPJ307CiAgICByZXR1cm4ge21zZzon0J3QtdC00L7RgdGC0LDRgtGK0YfQvdC+INC/0YDQuNGB0YrRgdGC0LLQuNC1LiDQnNC+0LvRjywg0YHQv9Cw0LfQstCw0LnRgtC1INGA0LDQsdC+0YLQvdC+0YLQviDQstGA0LXQvNC1LicsY29sb3I6JyNlZjQ0NDQnLGljb246J+KdjCd9OwogIH0KCiAgLy8gU3VtbWFyeSBjYXJkcwogIHZhciB0b3RhbEhvdXJzPXVzZXJzLnJlZHVjZShmdW5jdGlvbihzLHUpe3JldHVybiBzK3UudG90YWxfaG91cnM7fSwwKTsKICB2YXIgc3VtbWFyeT0nPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNjBweCwxZnIpKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjIwcHgiPicKICAgICsnPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7Qn9C10YDQuNC+0LQ8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jytmcm9tKyc8YnI+Jyt0bysnPC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCh0LvRg9C20LjRgtC10LvQuDwvZGl2PjxkaXYgY2xhc3M9Imt2IGFjIj4nK3VzZXJzLmxlbmd0aCsnPC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0LHRidC+INGH0LDRgdCwPC9kaXY+PGRpdiBjbGFzcz0ia3YgZyI+Jyt0b3RhbEhvdXJzLnRvRml4ZWQoMSkrJ9GHPC9kaXY+PC9kaXY+JwogICAgKyc8L2Rpdj4nOwoKICAvLyBEYXRlIHJhbmdlIHBpY2tlcgogIHZhciBwaWNrZXI9JzxkaXYgY2xhc3M9InBhbmVsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfk4Ug0J/QtdGA0LjQvtC0PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjEzcHggMTdweDtkaXNwbGF5OmZsZXg7Z2FwOjEycHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nCiAgICArJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtIj7QntGCPC9sYWJlbD4nCiAgICArJzxpbnB1dCB0eXBlPSJkYXRlIiBpZD0id3JGcm9tIiB2YWx1ZT0iJytmcm9tKyciIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCAxMHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEycHg7b3V0bGluZTpub25lIj48L2Rpdj4nCiAgICArJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtIj7QlNC+PC9sYWJlbD4nCiAgICArJzxpbnB1dCB0eXBlPSJkYXRlIiBpZD0id3JUbyIgdmFsdWU9IicrdG8rJyIgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDEwcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTJweDtvdXRsaW5lOm5vbmUiPjwvZGl2PicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiIG9uY2xpY2s9IndyVXBkYXRlKCkiPtCe0LHQvdC+0LLQuDwvYnV0dG9uPicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0ibWFyZ2luLXRvcDoxOHB4IiBvbmNsaWNrPSJ3clRoaXNNb250aCgpIj7QotC10LrRg9GJINC80LXRgdC10YY8L2J1dHRvbj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9Im1hcmdpbi10b3A6MThweCIgb25jbGljaz0id3JMYXN0NygpIj7Qn9C+0YHQu9C10LTQvdC40YLQtSA3INC00L3QuDwvYnV0dG9uPicKICAgICsnPC9kaXY+PC9kaXY+JzsKCiAgLy8gVXNlciBjYXJkcwogIHZhciBjYXJkcz11c2Vycy5tYXAoZnVuY3Rpb24odSl7CiAgICB2YXIgbT1tb3Rpdih1LnRvdGFsX2hvdXJzLCB1LmRheXNfd29ya2VkKTsKICAgIHZhciBjb2w9dS5jb2xvcnx8J2F2LXAnOwogICAgdmFyIGF2Z0g9dS5kYXlzX3dvcmtlZD4wPyh1LnRvdGFsX2hvdXJzL3UuZGF5c193b3JrZWQpLnRvRml4ZWQoMSk6MDsKCiAgICAvLyBEYWlseSBicmVha2Rvd24KICAgIHZhciBkYXlzPU9iamVjdC5rZXlzKHUuZGF5c3x8e30pLnNvcnQoKS5tYXAoZnVuY3Rpb24oZGF0ZSl7CiAgICAgIHZhciBkYXk9dS5kYXlzW2RhdGVdOwogICAgICBpZighZGF5LndvcmtfbWludXRlcyYmIWRheS50aW1lbGluZS5sZW5ndGgpIHJldHVybiAnJzsKICAgICAgdmFyIGRheU5hbWU9bmV3IERhdGUoZGF0ZSsnVDEyOjAwOjAwJykudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse3dlZWtkYXk6J3Nob3J0JyxkYXk6J251bWVyaWMnLG1vbnRoOidzaG9ydCd9KTsKICAgICAgdmFyIHRpbWVsaW5lPWRheS50aW1lbGluZS5tYXAoZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIHNjPVNUQVRVU19DT0xPUlNbZS5zdGF0dXNdfHwnIzg4OCc7CiAgICAgICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7YmFja2dyb3VuZDonK3NjKycxODtjb2xvcjonK3NjKyc7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXdlaWdodDo2MDAiPicrZS50aW1lKycgJysoU1RBVFVTX0xBQkVMU1tlLnN0YXR1c118fGUuc3RhdHVzKSsnPC9zcGFuPic7CiAgICAgIH0pLmpvaW4oJyDihpIgJyk7CiAgICAgIHZhciBoPWRheS53b3JrX2hvdXJzOwogICAgICB2YXIgYmFyVz1NYXRoLm1pbihoLzgqMTAwLDEwMCk7CiAgICAgIHZhciBiYXJDPWg+PTg/JyMyMmM1NWUnOmg+PTY/JyMzOGJkZjgnOmg+PTQ/JyNmNTllMGInOicjZWY0NDQ0JzsKICAgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjhweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCkiPicKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbTo1cHgiPicKICAgICAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgyKSI+JytkYXlOYW1lKyc8L3NwYW4+JwogICAgICAgICsnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6JytiYXJDKyciPicraCsn0Yc8L3NwYW4+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgICsnPGRpdiBzdHlsZT0iaGVpZ2h0OjVweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlci1yYWRpdXM6M3B4O292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOjVweCI+JwogICAgICAgICsnPGRpdiBzdHlsZT0iaGVpZ2h0OjEwMCU7d2lkdGg6JytiYXJXKyclO2JhY2tncm91bmQ6JytiYXJDKyc7Ym9yZGVyLXJhZGl1czozcHg7dHJhbnNpdGlvbjp3aWR0aCAuNHMgZWFzZSI+PC9kaXY+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo0cHg7ZmxleC13cmFwOndyYXAiPicrdGltZWxpbmUrJzwvZGl2PicKICAgICAgICArKGRheS50b2lsZXRfY291bnQ+MD8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjNweCI+8J+avSDDlycrZGF5LnRvaWxldF9jb3VudCsnPC9kaXY+JzonJykKICAgICAgICArJzwvZGl2Pic7CiAgICB9KS5qb2luKCcnKTsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9InBhbmVsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4nCiAgICAgICsnPGRpdiBjbGFzcz0icGgiPicKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4nCiAgICAgICsnPGRpdiBjbGFzcz0iYXYgJytjb2wrJyIgc3R5bGU9IndpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Zm9udC1zaXplOjE0cHgiPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PicKICAgICAgKyc8ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCkiPicrdS5uYW1lKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKSI+Jyt1LmRheXNfd29ya2VkKycg0YDQsNCx0L7RgtC90Lgg0LTQvdC4IMK3INGB0YDQtdC00L3QviAnK2F2Z0grJ9GHL9C00LXQvTwvZGl2PjwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6dmFyKC0tYWNjMikiPicrdS50b3RhbF9ob3Vycysn0Yc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+0L7QsdGJ0L4g0LfQsCDQv9C10YDQuNC+0LTQsDwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICAvLyBNb3RpdmF0aW9uYWwgbWVzc2FnZQogICAgICArJzxkaXYgc3R5bGU9Im1hcmdpbjoxMnB4IDE3cHg7cGFkZGluZzoxMnB4IDE2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6JyttLmNvbG9yKycxMjtib3JkZXI6MXB4IHNvbGlkICcrbS5jb2xvcisnMzM7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjEwcHgiPicKICAgICAgKyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjE4cHg7ZmxleC1zaHJpbms6MCI+JyttLmljb24rJzwvc3Bhbj4nCiAgICAgICsnPGRpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOicrbS5jb2xvcisnO21hcmdpbi1ib3R0b206M3B4Ij7QntGG0LXQvdC60LAg0LfQsCDQv9C10YDQuNC+0LTQsDwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuNiI+JyttLm1zZysnPC9kaXY+JwogICAgICArJzwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgIC8vIEhvdXJzIGJhcgogICAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAxN3B4IDEycHgiPicKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjVweCI+JwogICAgICArJzxzcGFuPtCe0YLRgNCw0LHQvtGC0LXQvdC4INGH0LDRgdCwPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTp2YXIoLS1tbykiPicrdS50b3RhbF9ob3Vycysn0YcgLyAnKyggdS5kYXlzX3dvcmtlZCo4KSsn0Ycg0L7Rh9Cw0LrQstCw0L3QuDwvc3Bhbj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImhlaWdodDo4cHg7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW4iPicKICAgICAgKyc8ZGl2IHN0eWxlPSJoZWlnaHQ6MTAwJTt3aWR0aDonK01hdGgubWluKHUudG90YWxfaG91cnMvKE1hdGgubWF4KHUuZGF5c193b3JrZWQsMSkqOCkqMTAwLDEwMCkrJyU7YmFja2dyb3VuZDp2YXIoLS1ncm4pO2JvcmRlci1yYWRpdXM6NHB4O3RyYW5zaXRpb246d2lkdGggLjVzIGVhc2UiPjwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICAvLyBEYWlseSBicmVha2Rvd24gdG9nZ2xlCiAgICAgICsoZGF5cz8nPGRldGFpbHMgc3R5bGU9InBhZGRpbmc6MCAxN3B4IDE0cHgiPjxzdW1tYXJ5IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1hY2MyKTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjZweCAwO2ZvbnQtd2VpZ2h0OjYwMCI+0JLQuNC2INC00L3QtdCy0LXQvSDRgNCw0LfQsdC40LLQutCwIOKWvjwvc3VtbWFyeT48ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+JytkYXlzKyc8L2Rpdj48L2RldGFpbHM+JzonJykKICAgICAgKyc8L2Rpdj4nOwogIH0pLmpvaW4oJycpOwoKICAvLyBTYWxhcnkgbm90ZQogIHZhciBzYWxhcnlOb3RlPSc8ZGl2IGNsYXNzPSJwYW5lbCIgc3R5bGU9Im1hcmdpbi10b3A6NHB4Ij4nCiAgICArJzxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+SoSDQmNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC30LDQv9C70LDRidCw0L3QtdGC0L48L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6MTZweCAyMHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXR4Mik7bGluZS1oZWlnaHQ6MS44Ij4nCiAgICArJ9CX0LDQv9C70LDRgtCw0YLQsCDQvdCwINCy0YHQtdC60Lgg0YHQu9GD0LbQuNGC0LXQuyDRgdC1INC40LfRh9C40YHQu9GP0LLQsCDQvdCwINCx0LDQt9CwIDxzdHJvbmcgc3R5bGU9ImNvbG9yOnZhcigtLXR4KSI+0YDQtdCw0LvQvdC+INC+0YLRgNCw0LHQvtGC0LXQvdC40YLQtSDRh9Cw0YHQvtCy0LU8L3N0cm9uZz4g0LfQsCDQvNC10YHQtdGG0LAsINC+0YLRh9C10YLQtdC90Lgg0YfRgNC10Lcg0YHQuNGB0YLQtdC80LDRgtCwINC30LAg0L/RgNC40YHRitGB0YLQstC40LUuPGJyPjxicj4nCiAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEwcHg7bWFyZ2luLXRvcDoxMHB4Ij4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZ3JuKTttYXJnaW4tYm90dG9tOjRweCI+8J+PhiDQntGC0LvQuNGH0L3QviAo4omlONGHL9C00LXQvSk8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDIpIj7Qn9GK0LvQvdCwINC30LDQv9C70LDRgtCwICsg0LHQvtC90YPRgTwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZGltKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDE0cHgiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ibHUpO21hcmdpbi1ib3R0b206NHB4Ij7irZAg0JTQvtCx0YDQtSAoNy040Ycv0LTQtdC9KTwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MikiPtCf0YrQu9C90LAg0LfQsNC/0LvQsNGC0LA8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYWRpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYW1iKTttYXJnaW4tYm90dG9tOjRweCI+4pqg77iPINCh0YDQtdC00L3QviAoNi030Ycv0LTQtdC9KTwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MikiPtCX0LDQv9C70LDRgtCwIC0xMCU8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tcmRpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tcmVkKTttYXJnaW4tYm90dG9tOjRweCI+4p2MINCf0L7QtCDQvdC+0YDQvNCwICg8NtGHL9C00LXQvSk8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDIpIj7Ql9Cw0L/Qu9Cw0YLQsCDQv9GA0L7Qv9C+0YDRhtC40L7QvdCw0LvQvdCwINC90LAg0YfQsNGB0L7QstC10YLQtTwvZGl2PjwvZGl2PicKICAgICsnPC9kaXY+JwogICAgKyc8L2Rpdj48L2Rpdj4nOwoKICBpZighdXNlcnMubGVuZ3RoKXsKICAgIGVsLmlubmVySFRNTD1waWNrZXIrJzxkaXYgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxM3B4Ij7QndGP0LzQsCDQtNCw0L3QvdC4INC30LAg0LjQt9Cx0YDQsNC90LjRjyDQv9C10YDQuNC+0LQuPGJyPtCh0LvRg9C20LjRgtC10LvQuNGC0LUg0YLRgNGP0LHQstCwINC00LAg0L7RgtCx0LXQu9GP0LfQstCw0YIg0L/RgNC40YHRitGB0YLQstC40LUuPC9kaXY+JzsKICAgIHJldHVybjsKICB9CgogIGVsLmlubmVySFRNTD1waWNrZXIrc3VtbWFyeStjYXJkcytzYWxhcnlOb3RlOwp9CgoKZnVuY3Rpb24gclJlcG9ydHMoKXsKICB2YXIgbXM9e307RC5wcm9qZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAuc3RhcnRfZGF0ZSl7dmFyIG09cC5zdGFydF9kYXRlLnNsaWNlKDAsNyk7bXNbbV09KG1zW21dfHwwKStOdW1iZXIocC50b3RhbHx8MCk7fX0pOwogIHZhciBtaz1PYmplY3Qua2V5cyhtcykuc29ydCgpLnNsaWNlKC02KTt2YXIgbW09TWF0aC5tYXguYXBwbHkobnVsbCxtay5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIG1zW2tdO30pLmNvbmNhdChbMV0pKTsKICB2YXIgbW4yPVsnJywn0K/QvdGDJywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0K7QvdC4Jywn0K7Qu9C4Jywn0JDQstCzJywn0KHQtdC/Jywn0J7QutGCJywn0J3QvtC1Jywn0JTQtdC6J107CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JyJykuaW5uZXJIVE1MPW1rLmxlbmd0aD9tay5tYXAoZnVuY3Rpb24oayl7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nKyhtbjJbcGFyc2VJbnQoay5zbGljZSg1KSldfHwnJykrJyAnK2suc2xpY2UoMCw0KSsnPC9kaXY+PGRpdiBjbGFzcz0iYnJ0Ij48ZGl2IGNsYXNzPSJicmYiIHN0eWxlPSJ3aWR0aDonKyhtc1trXS9tbSoxMDApKyclO2JhY2tncm91bmQ6dmFyKC0tYWNjKSI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iYnJ2Ij4nK2ZtdChtc1trXSkrJzwvZGl2PjwvZGl2Pic7fSkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QlNC+0LHQsNCy0LXRgtC1INC/0YDQvtC10LrRgtC4INGBINC00LDRgtC4PC9kaXY+JzsKICB2YXIgc3Y9e307RC5wcm9qZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKHApeyhwLnRhZ3N8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3N2W3RdPShzdlt0XXx8MCkrMTt9KTt9KTt2YXIgc209TWF0aC5tYXguYXBwbHkobnVsbCxPYmplY3QudmFsdWVzKHN2KS5jb25jYXQoWzFdKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JzJykuaW5uZXJIVE1MPU9iamVjdC5rZXlzKHN2KS5sZW5ndGg/T2JqZWN0LmtleXMoc3YpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gc3ZbYl0tc3ZbYV07fSkuc2xpY2UoMCw2KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nK3QrJzwvZGl2PjxkaXYgY2xhc3M9ImJydCI+PGRpdiBjbGFzcz0iYnJmIiBzdHlsZT0id2lkdGg6Jysoc3ZbdF0vc20qMTAwKSsnJTtiYWNrZ3JvdW5kOnZhcigtLWdybikiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImJydiI+Jytzdlt0XSsnINC/0YDQvtC10LrRgicrKHN2W3RdPT09MT8n0LAnOicnKSsnPC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC00LDQvdC90Lg8L2Rpdj4nOwogIHZhciBjbT17fTtELnByb2plY3RzLmZvckVhY2goZnVuY3Rpb24ocCl7dmFyIGM9cC5jbGllbnR8fCfigJQnO2NtW2NdPShjbVtjXXx8MCkrTnVtYmVyKHAudG90YWx8fDApO30pO3ZhciBjbW09TWF0aC5tYXguYXBwbHkobnVsbCxPYmplY3QudmFsdWVzKGNtKS5jb25jYXQoWzFdKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JjJykuaW5uZXJIVE1MPU9iamVjdC5rZXlzKGNtKS5sZW5ndGg/T2JqZWN0LmtleXMoY20pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gY21bYl0tY21bYV07fSkuc2xpY2UoMCw2KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nK2MrJzwvZGl2PjxkaXYgY2xhc3M9ImJydCI+PGRpdiBjbGFzcz0iYnJmIiBzdHlsZT0id2lkdGg6JysoY21bY10vY21tKjEwMCkrJyU7YmFja2dyb3VuZDp2YXIoLS1ibHUpIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJicnYiPicrZm10KGNtW2NdKSsnPC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC00LDQvdC90Lg8L2Rpdj4nOwogIHZhciB0bT17fTtELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7aWYodC5hc3NpZ25lZSYmdC5kb25lPT0wKXRtW3QuYXNzaWduZWVdPSh0bVt0LmFzc2lnbmVlXXx8MCkrMTt9KTt2YXIgdG1tPU1hdGgubWF4LmFwcGx5KG51bGwsT2JqZWN0LnZhbHVlcyh0bSkuY29uY2F0KFsxXSkpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydCcpLmlubmVySFRNTD1PYmplY3Qua2V5cyh0bSkubGVuZ3RoP09iamVjdC5rZXlzKHRtKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nK24rJzwvZGl2PjxkaXYgY2xhc3M9ImJydCI+PGRpdiBjbGFzcz0iYnJmIiBzdHlsZT0id2lkdGg6JysodG1bbl0vdG1tKjEwMCkrJyU7YmFja2dyb3VuZDonKyh0bVtuXS90bW0+Ljg/J3ZhcigtLXJlZCknOnRtW25dL3RtbT4uNT8ndmFyKC0tYW1iKSc6J3ZhcigtLWdybiknKSsnIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJicnYiPicrdG1bbl0rJyDQt9Cw0LTQsNGHJysodG1bbl09PT0xPyfQsCc6J9C4JykrJzwvZGl2PjwvZGl2Pic7fSkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QndGP0LzQsCDQtNCw0L3QvdC4PC9kaXY+JzsKfQoKLy8g4pSA4pSAIE1PREFMUyDilIDilIAKdmFyIFNPPSc8b3B0aW9uPldvcmRQcmVzcyDRgdCw0LnRgjwvb3B0aW9uPjxvcHRpb24+V29vQ29tbWVyY2Ug0LzQsNCz0LDQt9C40L08L29wdGlvbj48b3B0aW9uPtCR0YDQsNC90LTQuNC90LMgLyDQm9C+0LPQvjwvb3B0aW9uPjxvcHRpb24+U0VPINC+0L/RgtC40LzQuNC30LDRhtC40Y88L29wdGlvbj48b3B0aW9uPkdvb2dsZSBBZHM8L29wdGlvbj48b3B0aW9uPtCh0L7Rhi4g0LzRgNC10LbQuDwvb3B0aW9uPjxvcHRpb24+0KXQvtGB0YLQuNC90LMgKyDQv9C+0LTQtNGA0YrQttC60LA8L29wdGlvbj48b3B0aW9uPlZpYmVyINC80LDRgNC60LXRgtC40L3Qszwvb3B0aW9uPjxvcHRpb24+0JLQuNC00LXQviAvINCg0LjQudC70YHQvtCy0LU8L29wdGlvbj48b3B0aW9uPtCa0L7QvNC/0LvQtdC60YHQvdCwINC+0YTQtdGA0YLQsDwvb3B0aW9uPjxvcHRpb24+0JTRgNGD0LPQvjwvb3B0aW9uPic7CnZhciBDTz0nPG9wdGlvbiB2YWx1ZT0iYXYtcCI+8J+foyDQm9C40LvQsNCyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iYXYtdCI+8J+ptSDQotGO0YDQutC+0LDQtzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImF2LWciPvCfn6Ig0JfQtdC70LXQvTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImF2LWEiPvCfn6Eg0JbRitC70YI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhdi1yIj7wn5S0INCn0LXRgNCy0LXQvTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImF2LWIiPvCflLUg0KHQuNC9PC9vcHRpb24+JzsKZnVuY3Rpb24gdE8oKXtyZXR1cm4gRC51c2Vycy5sZW5ndGg/RC51c2Vycy5tYXAoZnVuY3Rpb24odSl7cmV0dXJuICc8b3B0aW9uIHZhbHVlPSInK3UubmFtZSsnIj4nK3UubmFtZSsodS5yb2xlPycgKCcrdS5yb2xlKycpJzonJykrJzwvb3B0aW9uPic7fSkuam9pbignJyk6JzxvcHRpb24gdmFsdWU9IiI+4oCUINC30LDRgNC10LTQuCDQv9C+0YLRgNC10LHQuNGC0LXQu9C40YLQtSDigJQ8L29wdGlvbj4nO30KCmZ1bmN0aW9uIHVGb3JtKHUpewogIHJldHVybiAnPGgzPicrKHU/J9Cg0LXQtNCw0LrRgtC40YDQsNC5INGB0LvRg9C20LjRgtC10LsnOicrINCd0L7QsiDRgdC70YPQttC40YLQtdC7JykrJzwvaDM+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9GK0LvQvdC+INC40LzQtTwvbGFiZWw+PGlucHV0IGlkPSJ1TiIgdmFsdWU9IicrKHU/ZXNjKHUubmFtZXx8JycpOicnKSsnIiBwbGFjZWhvbGRlcj0i0JjQstCw0L0g0JjQstCw0L3QvtCyIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCg0L7Qu9GPPC9sYWJlbD48aW5wdXQgaWQ9InVSIiB2YWx1ZT0iJysodT9lc2ModS5yb2xlfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSJEZXYsINCU0LjQt9Cw0LnQvS4uLiI+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LU8L2xhYmVsPjxpbnB1dCBpZD0idVUiIHZhbHVlPSInKyh1P2VzYyh1LnVzZXJuYW1lfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSJpdmFuLml2YW5vdiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9Cw0YDQvtC70LAnKyh1PycgKNC/0YDQsNC30L3QviA9INCx0LXQtyDQv9GA0L7QvNGP0L3QsCknOicnKSsnPC9sYWJlbD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJ1UCIgcGxhY2Vob2xkZXI9ItC80LjQvS4gNiDRgdC40LzQstC+0LvQsCI+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmNC90LjRhtC40LDQu9C4PC9sYWJlbD48aW5wdXQgaWQ9InVJIiB2YWx1ZT0iJysodT9lc2ModS5pbml0aWFsc3x8JycpOicnKSsnIiBtYXhsZW5ndGg9IjMiIHBsYWNlaG9sZGVyPSLQmNCYIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCm0LLRj9GCPC9sYWJlbD48c2VsZWN0IGlkPSJ1QyI+JytDTysnPC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCg0L7Qu9GPINCyINGB0LjRgdGC0LXQvNCw0YLQsDwvbGFiZWw+PHNlbGVjdCBpZD0idUEiPjxvcHRpb24gdmFsdWU9IjAiJysodSYmdS5pc19hZG1pbiE9MT8nIHNlbGVjdGVkJzonJykrJz7wn5GkINCh0LvRg9C20LjRgtC10Ls8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxIicrKHUmJnUuaXNfYWRtaW49PTE/JyBzZWxlY3RlZCc6JycpKyc+8J+RkSDQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWEiPicrKHU/JzxidXR0b24gY2xhc3M9ImJ0biBkIiBvbmNsaWNrPSJkVShcJycrdS5pZCsnXCcpIj7QmNC30YLRgNC40Lk8L2J1dHRvbj4nOicnKSsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSInKyh1PydzVShcJycrdS5pZCsnXCcpJzonc1UoKScpKyciPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7Cn0KCnZhciBNTD17CiAgcHJvamVjdDpmdW5jdGlvbihwKXsKICAgIHJldHVybiAnPGgzPicrKHA/J9Cg0LXQtNCw0LrRgtC40YDQsNC5INC/0YDQvtC10LrRgic6Jysg0J3QvtCyINC/0YDQvtC10LrRgicpKyc8L2gzPicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCd0LDQt9Cy0LDQvdC40LU8L2xhYmVsPjxpbnB1dCBpZD0ibU4iIHZhbHVlPSInKyhwP2VzYyhwLm5hbWUpOicnKSsnIiBwbGFjZWhvbGRlcj0i0JrQu9C40LXQvdGCIOKAlCDRg9GB0LvRg9Cz0LAiPjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0ibUNsIiB2YWx1ZT0iJysocD9lc2MocC5jbGllbnR8fCcnKTonJykrJyIgcGxhY2Vob2xkZXI9ItCY0LLQsNC9INCY0LLQsNC90L7QsiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotC10LvQtdGE0L7QvS9FbWFpbDwvbGFiZWw+PGlucHV0IGlkPSJtUGgiIHZhbHVlPSInKyhwP2VzYyhwLnBob25lfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSIwOHh4IHh4eCB4eHgiPjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QktC40LQg0YPRgdC70YPQs9CwPC9sYWJlbD48c2VsZWN0IGlkPSJtU3YiPicrU08rJzwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHRgtCw0YLRg9GBPC9sYWJlbD48c2VsZWN0IGlkPSJtU3QiPjxvcHRpb24gdmFsdWU9Im5ldyInKyhwJiZwLnN0YXR1cz09PSduZXcnPycgc2VsZWN0ZWQnOicnKSsnPtCd0L7Qsjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImFjdGl2ZSInKyhwJiZwLnN0YXR1cz09PSdhY3RpdmUnPycgc2VsZWN0ZWQnOicnKSsnPtCSINC/0YDQvtGG0LXRgTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InJldmlldyInKyhwJiZwLnN0YXR1cz09PSdyZXZpZXcnPycgc2VsZWN0ZWQnOicnKSsnPtCg0LXQstC40LfQuNGPPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icGF1c2VkIicrKHAmJnAuc3RhdHVzPT09J3BhdXNlZCc/JyBzZWxlY3RlZCc6JycpKyc+0J/QsNGD0LfQsDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRvbmUiJysocCYmcC5zdGF0dXM9PT0nZG9uZSc/JyBzZWxlY3RlZCc6JycpKyc+0JfQsNCy0YrRgNGI0LXQvTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodGD0LzQsCAo4oKsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0iMC4wMSIgaWQ9Im1UbyIgdmFsdWU9IicrKHA/cC50b3RhbHx8Jyc6JycpKyciIHBsYWNlaG9sZGVyPSIwLjAwIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCf0L7Qu9GD0YfQtdC90L4gKOKCrCk8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIGlkPSJtUmMiIHZhbHVlPSInKyhwP3AucmVjZWl2ZWR8fCcnOicnKSsnIiBwbGFjZWhvbGRlcj0iMC4wMCI+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCd0LDRh9Cw0LvQvjwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJtU3QyIiB2YWx1ZT0iJysocD9wLnN0YXJ0X2RhdGV8fCcnOicnKSsnIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCa0YDQsNC10L0g0YHRgNC+0Lo8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibURsIiB2YWx1ZT0iJysocD9wLmRlYWRsaW5lfHwnJzonJykrJyI+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCd0LDQv9GA0LXQtNGK0LogJTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEwMCIgaWQ9Im1QciIgdmFsdWU9IicrKHA/cC5wcm9ncmVzc3x8MDowKSsnIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0YLQs9C+0LLQvtGA0L3QuNC6PC9sYWJlbD48c2VsZWN0IGlkPSJtQXMiPicrdE8oKSsnPC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LDQs9C+0LLQtSAo0LfQsNC/0LXRgtCw0Y8pPC9sYWJlbD48aW5wdXQgaWQ9Im1UZyIgdmFsdWU9IicrKHAmJnAudGFncz9wLnRhZ3Muam9pbignLCAnKTonJykrJyIgcGxhY2Vob2xkZXI9IldvcmRQcmVzcywgU0VPLCDQlNC40LfQsNC50L0iPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JDQsdC+0L3QsNC80LXQvdGCPC9sYWJlbD48c2VsZWN0IGlkPSJtUnIiPjxvcHRpb24gdmFsdWU9IiI+0JXQtNC90L7QutGA0LDRgtC90L48L29wdGlvbj48b3B0aW9uIHZhbHVlPSLQvNC10YEiJysocCYmcC5yZWN1cnJpbmc9PT0n0LzQtdGBJz8nIHNlbGVjdGVkJzonJykrJz7QnNC10YHQtdGH0L3Qvjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ItCz0L7QtCInKyhwJiZwLnJlY3VycmluZz09PSfQs9C+0LQnPycgc2VsZWN0ZWQnOicnKSsnPtCT0L7QtNC40YjQvdC+PC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JHQtdC70LXQttC60Lg8L2xhYmVsPjx0ZXh0YXJlYSByb3dzPSIyIiBpZD0ibU50Ij4nKyhwP2VzYyhwLm5vdGVzfHwnJyk6JycpKyc8L3RleHRhcmVhPjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtYSI+JysocD8nPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9ImRQcmooXCcnK3AuaWQrJ1wnKSI+0JjQt9GC0YDQuNC5PC9idXR0b24+JzonJykrJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0iJysocD8nc1ByaihcJycrcC5pZCsnXCcpJzonc1ByaigpJykrJyI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+JzsKICB9LAogIHRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gJzxoMz4rINCd0L7QstCwINC30LDQtNCw0YfQsDwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QntC/0LjRgdCw0L3QuNC1PC9sYWJlbD48aW5wdXQgaWQ9InRUeCIgcGxhY2Vob2xkZXI9ItCa0LDQutCy0L4g0YLRgNGP0LHQstCwINC00LAg0YHQtSDQvdCw0L/RgNCw0LLQuD8iPjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0YLQs9C+0LLQvtGA0L3QuNC6PC9sYWJlbD48c2VsZWN0IGlkPSJ0QXMiPicrdE8oKSsnPC9zZWxlY3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9GA0LjQvtGA0LjRgtC10YI8L2xhYmVsPjxzZWxlY3QgaWQ9InRVciI+PG9wdGlvbiB2YWx1ZT0iMCI+0J3QvtGA0LzQsNC70LXQvTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjEiPtCh0L/QtdGI0LXQvSDimqA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzVGFzaygpIj7QlNC+0LHQsNCy0Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgY2FsVGFzazpmdW5jdGlvbihkcyl7cmV0dXJuICc8aDM+KyDQl9Cw0LTQsNGH0LAg0YEg0LTQsNGC0LA8L2gzPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J7Qv9C40YHQsNC90LjQtTwvbGFiZWw+PGlucHV0IGlkPSJjdFR4IiBwbGFjZWhvbGRlcj0i0JrQsNC60LLQviDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC90LDQv9GA0LDQstC4PyI+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JTQsNGC0LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY3REdCIgdmFsdWU9IicrKGRzfHxuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkpKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KfQsNGBICjQv9C+INC40LfQsdC+0YApPC9sYWJlbD48aW5wdXQgdHlwZT0idGltZSIgaWQ9ImN0VG0iPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0YLQs9C+0LLQvtGA0L3QuNC6PC9sYWJlbD48c2VsZWN0IGlkPSJjdEFzIj4nK3RPKCkrJzwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J/RgNC40L7RgNC40YLQtdGCPC9sYWJlbD48c2VsZWN0IGlkPSJjdFVyIj48b3B0aW9uIHZhbHVlPSIwIj7QndC+0YDQvNCw0LvQtdC9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMSI+0KHQv9C10YjQtdC9IOKaoDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNDYWxUYXNrKCkiPtCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBub3RlOmZ1bmN0aW9uKCl7cmV0dXJuICc8aDM+KyDQndC+0LLQsCDQsdC10LvQtdC20LrQsDwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Ql9Cw0LPQu9Cw0LLQuNC1PC9sYWJlbD48aW5wdXQgaWQ9Im5UaSIgcGxhY2Vob2xkZXI9ItCR0LXQu9C10LbQutCwINC30LAg0L/RgNC+0LXQutGCIC8g0LrQu9C40LXQvdGCIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LXQutGB0YI8L2xhYmVsPjx0ZXh0YXJlYSByb3dzPSI0IiBpZD0ibkJvIiBwbGFjZWhvbGRlcj0i0JTQtdGC0LDQudC70LgsINGD0LPQvtCy0L7RgNC60LguLi4iPjwvdGV4dGFyZWE+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JDQstGC0L7RgDwvbGFiZWw+PHNlbGVjdCBpZD0ibkF1Ij4nK3RPKCkrJzwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHQv9C10YjQvdCwPzwvbGFiZWw+PHNlbGVjdCBpZD0iblVyIj48b3B0aW9uIHZhbHVlPSIwIj7QndC1PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMSI+0JTQsCDimqA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzTm90ZSgpIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgY2xpZW50OmZ1bmN0aW9uKCl7cmV0dXJuICc8aDM+KyDQndC+0LIg0LrQu9C40LXQvdGCPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmNC80LXQvdCwPC9sYWJlbD48aW5wdXQgaWQ9ImNObSIgcGxhY2Vob2xkZXI9ItCY0LLQsNC9INCY0LLQsNC90L7QsiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QpNC40YDQvNCwPC9sYWJlbD48aW5wdXQgaWQ9ImNDbyIgcGxhY2Vob2xkZXI9ItCk0LjRgNC80LAg0JXQntCe0JQiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPkVtYWlsPC9sYWJlbD48aW5wdXQgdHlwZT0iZW1haWwiIGlkPSJjRW0iPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KLQtdC70LXRhNC+0L08L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZWwiIGlkPSJjUGgiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JXQmNCaPC9sYWJlbD48aW5wdXQgaWQ9ImNFayIgcGxhY2Vob2xkZXI9IjEyMzQ1Njc4OSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QkdC10LvQtdC20LrQuDwvbGFiZWw+PHRleHRhcmVhIHJvd3M9IjIiIGlkPSJjTnQiPjwvdGV4dGFyZWE+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic0NsaSgpIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgaG9zdGluZzpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0J3QvtCyINGF0L7RgdGC0LjQvdCzPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNC+0LzQtdC50L08L2xhYmVsPjxpbnB1dCBpZD0iaERvIiBwbGFjZWhvbGRlcj0iZXhhbXBsZS5jb20iPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD48aW5wdXQgaWQ9ImhDbCI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHRitGA0LLRitGAPC9sYWJlbD48aW5wdXQgaWQ9ImhTciIgcGxhY2Vob2xkZXI9InNydjEud2VidHJpeGlhLmNvbSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotC40L88L2xhYmVsPjxzZWxlY3QgaWQ9ImhUeSI+PG9wdGlvbj5jUGFuZWw8L29wdGlvbj48b3B0aW9uPkV4dGVybjwvb3B0aW9uPjxvcHRpb24+VlBTPC9vcHRpb24+PG9wdGlvbj5TaGFyZWQ8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNC40YHQujwvbGFiZWw+PGlucHV0IGlkPSJoRGkiIHBsYWNlaG9sZGVyPSIyLzEwR0IiPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J/Qu9Cw0L08L2xhYmVsPjxzZWxlY3QgaWQ9ImhQbCI+PG9wdGlvbj5TdGFydGVyPC9vcHRpb24+PG9wdGlvbj5CdXNpbmVzczwvb3B0aW9uPjxvcHRpb24+UHJvPC9vcHRpb24+PG9wdGlvbj5TaGFyZWQ8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPlNTTCDQuNC30YLQuNGH0LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iaFNzbCI+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic0hvc3QoKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+Jzt9LAogIHBhc3N3b3JkOmZ1bmN0aW9uKCl7CiAgICB2YXIgcD1QVy5lZGl0SWQ/RC5wYXNzd29yZHMuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5pZD09PVBXLmVkaXRJZDt9KTpudWxsOwogICAgdmFyIGNsPShwJiZwLmNsaWVudCl8fFBXLmZvcm1DbGllbnR8fCcnOwogICAgdmFyIG9wdHM9RC5jbGllbnRzLm1hcChmdW5jdGlvbihjKXt2YXIgbj1lc2MoYy5jb21wYW55fHxjLm5hbWV8fCcnKTtyZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrbisnIj48L29wdGlvbj4nO30pLmpvaW4oJycpOwogICAgcmV0dXJuICc8aDM+JysocD8n0KDQtdC00LDQutGC0LjRgNCw0Lkg0LTQvtGB0YLRitC/JzonKyDQndC+0LIg0LTQvtGB0YLRitC/JykrJzwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0icENsIiBsaXN0PSJwQ2xpZW50TGlzdCIgdmFsdWU9IicrZXNjKGNsKSsnIiBwbGFjZWhvbGRlcj0i0JjQt9Cx0LXRgNC4INC40LvQuCDQstGK0LLQtdC00Lgg0LrQu9C40LXQvdGCIj48ZGF0YWxpc3QgaWQ9InBDbGllbnRMaXN0Ij4nK29wdHMrJzwvZGF0YWxpc3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodCw0LnRgiAvINCj0YHQu9GD0LPQsDwvbGFiZWw+PGlucHV0IGlkPSJwU2kiIHZhbHVlPSInKyhwP2VzYyhwLnNpdGV8fCcnKTonJykrJyIgcGxhY2Vob2xkZXI9ImV4YW1wbGUuY29tIOKAlCBjUGFuZWwiPjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCf0L7RgtGA0LXQsdC40YLQtdC7PC9sYWJlbD48aW5wdXQgaWQ9InBVcyIgdmFsdWU9IicrKHA/ZXNjKHAudXNlcm5hbWV8fCcnKTonJykrJyI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9Cw0YDQvtC70LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icFB3IiB2YWx1ZT0iJysocD9lc2MocC5wYXNzfHwnJyk6JycpKyciPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JrQsNGC0LXQs9C+0YDQuNGPPC9sYWJlbD48c2VsZWN0IGlkPSJwQ2EiPjxvcHRpb24gdmFsdWU9Imhvc3RpbmciJysocCYmcC5jYXRlZ29yeT09PSdob3N0aW5nJz8nIHNlbGVjdGVkJzonJykrJz7QpdC+0YHRgtC40L3Qszwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndvcmRwcmVzcyInKyhwJiZwLmNhdGVnb3J5PT09J3dvcmRwcmVzcyc/JyBzZWxlY3RlZCc6JycpKyc+V29yZFByZXNzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZ29vZ2xlIicrKHAmJnAuY2F0ZWdvcnk9PT0nZ29vZ2xlJz8nIHNlbGVjdGVkJzonJykrJz5Hb29nbGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzb2NpYWwiJysocCYmcC5jYXRlZ29yeT09PSdzb2NpYWwnPycgc2VsZWN0ZWQnOicnKSsnPtCh0L7RhtC40LDQu9C90Lgg0LzRgNC10LbQuDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRucyInKyhwJiZwLmNhdGVnb3J5PT09J2Rucyc/JyBzZWxlY3RlZCc6JycpKyc+RE5TPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZGVzaWduIicrKHAmJnAuY2F0ZWdvcnk9PT0nZGVzaWduJz8nIHNlbGVjdGVkJzonJykrJz7QlNC40LfQsNC50L08L29wdGlvbj48b3B0aW9uIHZhbHVlPSJvdGhlciInKyghcHx8cC5jYXRlZ29yeT09PSdvdGhlcic/JyBzZWxlY3RlZCc6JycpKyc+0JTRgNGD0LPQvjwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNQYXNzKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7CiAgfSwKICBvZmZlcjpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0JfQsNC/0LjRiNC4INC+0YTQtdGA0YLQsDwvaDM+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J3QvtC80LXRgDwvbGFiZWw+PGlucHV0IGlkPSJvTm0iIHBsYWNlaG9sZGVyPSJXVC0yMDI1LTAwMSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0ib0NsIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCj0YHQu9GD0LPQsDwvbGFiZWw+PHNlbGVjdCBpZD0ib1N2Ij4nK1NPKyc8L3NlbGVjdD48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodGD0LzQsCAo4oKsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0iMC4wMSIgaWQ9Im9UbyIgcGxhY2Vob2xkZXI9IjAuMDAiPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHRgtCw0YLRg9GBPC9sYWJlbD48c2VsZWN0IGlkPSJvU3QiPjxvcHRpb24+0KfQsNC60LDRidCwPC9vcHRpb24+PG9wdGlvbj7Qn9GA0LjQtdGC0LA8L29wdGlvbj48b3B0aW9uPtCe0YLQutCw0LfQsNC90LA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJzT2ZmKCk7d2luZG93Lm9wZW4oXCdvZmZlci5odG1sXCcsXCdfYmxhbmtcJykiPtCX0LDQv9Cw0LfQuCArINCe0YTQtdGA0YLQsDwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzT2ZmKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBjb250cmFjdDpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0J3QvtCyINC00L7Qs9C+0LLQvtGAPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0iY29DIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0L/QuNGB0LDQvdC40LU8L2xhYmVsPjxpbnB1dCBpZD0iY29OIiBwbGFjZWhvbGRlcj0i0KPQtdCx0YHQsNC50YIsINCc0LDRgNC60LXRgtC40L3Qsy4uLiI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNCw0YLQsCDQvdCwINC/0L7QtNC/0LjRgdCy0LDQvdC1PC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNvRHQiPjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNDb24oKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+Jzt9Cn07Cgphc3luYyBmdW5jdGlvbiBtb2RhbCh0eXBlLGlkKXsKICBpZighRC51c2Vycy5sZW5ndGgpRC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107CiAgdmFyIGg9Jyc7CiAgaWYodHlwZT09PSdlZGl0UHJvamVjdCcmJmlkKXt2YXIgcD1ELnByb2plY3RzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtoPU1MLnByb2plY3QocCk7fQogIGVsc2UgaWYodHlwZT09PSdwcm9qZWN0JyloPU1MLnByb2plY3QobnVsbCk7CiAgZWxzZSBpZih0eXBlPT09J25ld1VzZXInKWg9dUZvcm0obnVsbCk7CiAgZWxzZSBpZih0eXBlPT09J2VkaXRVc2VyJyYmaWQpe3ZhciB1PUQudXNlcnMuZmluZChmdW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nKHguaWQpPT09U3RyaW5nKGlkKTt9KTtoPXVGb3JtKHUpO30KICBlbHNlIGlmKHR5cGU9PT0nY2FsVGFzaycpaD1NTC5jYWxUYXNrKGlkfHxudWxsKTsKICBlbHNlIGlmKE1MW3R5cGVdKWg9TUxbdHlwZV0oKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWInKS5pbm5lckhUTUw9aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgaWYodHlwZT09PSdlZGl0VXNlcicmJmlkKXsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgdmFyIHU9RC51c2Vycy5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC5pZCk9PT1TdHJpbmcoaWQpO30pOwogICAgICBpZih1KXt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndUMnKTtpZihzKXMudmFsdWU9dS5jb2xvcnx8J2F2LXAnO30KICAgIH0sMTApOwogIH0KfQpmdW5jdGlvbiBjbW8oKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7fQoKLy8g4pSA4pSAIFNBVkUg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIHNQcmooZWlkKXsKICB2YXIgbj1ndignbU4nKTtpZighbil7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0L3QsNC30LLQsNC90LjQtScsJ2VycicpO3JldHVybjt9CiAgdmFyIGQ9e2lkOmVpZHx8dW5kZWZpbmVkLG5hbWU6bixjbGllbnQ6Z3YoJ21DbCcpLHBob25lOmd2KCdtUGgnKSxzdGF0dXM6Z3YoJ21TdCcpLHRvdGFsOmd2KCdtVG8nKXx8MCxyZWNlaXZlZDpndignbVJjJyl8fDAsc3RhcnQ6Z3YoJ21TdDInKXx8bnVsbCxkZWFkbGluZTpndignbURsJyl8fG51bGwscHJvZ3Jlc3M6cGFyc2VJbnQoZ3YoJ21QcicpKXx8MCxhc3NpZ25lZTpndignbUFzJyksdGFnczpndignbVRnJykuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpO30pLmZpbHRlcihCb29sZWFuKSxyZWN1cnJpbmc6Z3YoJ21ScicpLG5vdGVzOmd2KCdtTnQnKX07CiAgdmFyIHI9YXdhaXQgYWYoJ3Byb2plY3RzJywnUE9TVCcsZCk7CiAgaWYocil7YXdhaXQgbEEoZ3YoJ21BcycpLChlaWQ/J9C+0LHQvdC+0LLQuCc6J9C00L7QsdCw0LLQuCcpKycg0L/RgNC+0LXQutGCOiAnK24pO2NtbygpO2F3YWl0IGxvYWRBbGwoKTt0b2FzdChlaWQ/J9Ce0LHQvdC+0LLQtdC9ISc6J9CU0L7QsdCw0LLQtdC9IScsJ29rJyk7fQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgScsJ2VycicpOwp9CmFzeW5jIGZ1bmN0aW9uIGRQcmooaWQpe2lmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0L/RgNC+0LXQutGC0LA/JykpcmV0dXJuO2F3YWl0IGFmKCdwcm9qZWN0cycsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpO2NtbygpO2F3YWl0IGxvYWRBbGwoKTt0b2FzdCgn0JjQt9GC0YDQuNGC0L4nKTt9CmFzeW5jIGZ1bmN0aW9uIHNUYXNrKCl7CiAgdmFyIHR4PWd2KCd0VHgnKTtpZighdHgpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC+0L/QuNGB0LDQvdC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHt0ZXh0OnR4LGFzc2lnbmVlOmd2KCd0QXMnKSx1cmdlbnQ6Z3YoJ3RVcicpLGRvbmU6MH0pOwogIGlmKHIpe2NtbygpO0QudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO3JUYXNrcygpO3JEYXNoKCk7dG9hc3QoJ9CU0L7QsdCw0LLQtdC90LAhJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc0NhbFRhc2soKXsKICB2YXIgdHg9Z3YoJ2N0VHgnKTtpZighdHgpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC+0L/QuNGB0LDQvdC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciBkdD1ndignY3REdCcpO2lmKCFkdCl7dG9hc3QoJ9CY0LfQsdC10YDQtdGC0LUg0LTQsNGC0LAnLCdlcnInKTtyZXR1cm47fQogIHZhciB0bT1ndignY3RUbScpOwogIHZhciByPWF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHt0ZXh0OnR4LGFzc2lnbmVlOmd2KCdjdEFzJyksdXJnZW50Omd2KCdjdFVyJyksZG9uZTowLGR1ZV9kYXRlOnRtP2R0KydUJyt0bTpkdH0pOwogIGlmKHIpe2NtbygpO0QudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO3JDYWxlbmRhcigpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNOb3RlKCl7CiAgdmFyIHRpPWd2KCduVGknKTtpZighdGkpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC30LDQs9C70LDQstC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCdub3RlcycsJ1BPU1QnLHt0aXRsZTp0aSxib2R5Omd2KCduQm8nKSxhdXRob3I6Z3YoJ25BdScpLHVyZ2VudDpndignblVyJyl9KTsKICBpZihyKXtjbW8oKTtELm5vdGVzPWF3YWl0IGFmKCdub3RlcycpfHxbXTtyTm90ZXMoKTtyRGFzaCgpO3RvYXN0KCfQl9Cw0L/QsNC30LXQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNDbGkoKXsKICB2YXIgbj1ndignY05tJyk7aWYoIW4pe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC40LzQtScsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHMnLCdQT1NUJyx7bmFtZTpuLGNvbXBhbnk6Z3YoJ2NDbycpLGVtYWlsOmd2KCdjRW0nKSxwaG9uZTpndignY1BoJyksZWlrOmd2KCdjRWsnKSxub3RlczpndignY050Jyl9KTsKICBpZihyKXtjbW8oKTtELmNsaWVudHM9YXdhaXQgYWYoJ2NsaWVudHMnKXx8W107ckNsaSgpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvSEnLCdvaycpO30KfQphc3luYyBmdW5jdGlvbiBzSG9zdCgpewogIHZhciBkbzI9Z3YoJ2hEbycpO2lmKCFkbzIpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC00L7QvNC10LnQvScsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2hvc3RpbmcnLCdQT1NUJyx7ZG9tYWluOmRvMixjbGllbnQ6Z3YoJ2hDbCcpLHNlcnZlcjpndignaFNyJyksdHlwZTpndignaFR5JyksZGlzazpndignaERpJykscGxhbjpndignaFBsJyksc3NsOmd2KCdoU3NsJyl8fG51bGx9KTsKICBpZihyKXtjbW8oKTtELmhvc3Rpbmc9YXdhaXQgYWYoJ2hvc3RpbmcnKXx8W107ckhvc3RpbmcoKTt0b2FzdCgn0JTQvtCx0LDQstC10L0hJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc1Bhc3MoKXsKICB2YXIgc2k9Z3YoJ3BTaScpO2lmKCFzaSl7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0YHQsNC50YInLCdlcnInKTtyZXR1cm47fQogIHZhciBjbGllbnQ9Z3YoJ3BDbCcpOwogIHZhciByPWF3YWl0IGFmKCdwYXNzd29yZHMnLCdQT1NUJyx7aWQ6UFcuZWRpdElkfHx1bmRlZmluZWQsc2l0ZTpzaSx1c2VyOmd2KCdwVXMnKSxwYXNzOmd2KCdwUHcnKSxjYXQ6Z3YoJ3BDYScpLGNsaWVudDpjbGllbnR9KTsKICBpZihyKXtQVy5jbGllbnQ9Y2xpZW50fHwn0JHQtdC3INC60LvQuNC10L3Rgic7UFcuZWRpdElkPScnO2NtbygpO0QucGFzc3dvcmRzPWF3YWl0IGFmKCdwYXNzd29yZHMnKXx8W107clBhc3N3b3JkcygpO3RvYXN0KCfQl9Cw0L/QuNGB0LDQvdC+IScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNPZmYoKXsKICB2YXIgcj1hd2FpdCBhZignb2ZmZXJzJywnUE9TVCcse251bTpndignb05tJyksY2xpZW50Omd2KCdvQ2wnKSxzZXJ2aWNlOmd2KCdvU3YnKSx0b3RhbDpndignb1RvJyl8fDAsc3RhdHVzOmd2KCdvU3QnKX0pOwogIGlmKHIpe2NtbygpO0Qub2ZmZXJzPWF3YWl0IGFmKCdvZmZlcnMnKXx8W107ck9mZmVycygpO3RvYXN0KCfQl9Cw0L/QuNGB0LDQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNDb24oKXsKICB2YXIgcj1hd2FpdCBhZignY29udHJhY3RzJywnUE9TVCcse2NsaWVudDpndignY29DJyksbmFtZTpndignY29OJyksc2lnbl9kYXRlOmd2KCdjb0R0Jyl8fG51bGx9KTsKICBpZihyKXtjbW8oKTtELmNvbnRyYWN0cz1hd2FpdCBhZignY29udHJhY3RzJyl8fFtdO3JDb250cmFjdHMoKTt0b2FzdCgn0JTQvtCx0LDQstC10L0hJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc1UoZWlkKXsKICB2YXIgbj1ndigndU4nKTtpZighbil7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0LjQvNC1JywnZXJyJyk7cmV0dXJuO30KICB2YXIgdT1ndigndVUnKTtpZighdSl7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0LjQvNC1JywnZXJyJyk7cmV0dXJuO30KICB2YXIgcD1ndigndVAnKTtpZighZWlkJiZwLmxlbmd0aDw2KXt0b2FzdCgn0J/QsNGA0L7Qu9Cw0YLQsCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQv9C+0L3QtSA2INGB0LjQvNCy0L7Qu9CwJywnZXJyJyk7cmV0dXJuO30KICB2YXIgZD17aWQ6ZWlkfHx1bmRlZmluZWQsbmFtZTpuLHJvbGU6Z3YoJ3VSJyksdXNlcm5hbWU6dSxpbml0aWFsczpndigndUknKXx8bi5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCksY29sb3I6Z3YoJ3VDJyl8fCdhdi1wJyxpc19hZG1pbjpndigndUEnKSxvbmxpbmU6MX07CiAgaWYocClkLnBhc3N3b3JkPXA7CiAgdmFyIHI9YXdhaXQgYWYoJ3VzZXJzJywnUE9TVCcsZCk7CiAgaWYocil7Y21vKCk7RC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107clVzZXJzKCk7clRlYW0oKTt0b2FzdChlaWQ/J9Ce0LHQvdC+0LLQtdC9ISc6J9CU0L7QsdCw0LLQtdC9IScsJ29rJyk7fQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDigJQg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L7RgtC+INC40LzQtSDQvNC+0LbQtSDQtNCwINC1INC30LDQtdGC0L4nLCdlcnInKTsKfQphc3luYyBmdW5jdGlvbiBkVShpZCl7aWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQuSDQv9C+0YLRgNC10LHQuNGC0LXQu9GPPycpKXJldHVybjthd2FpdCBhZigndXNlcnMnLCdERUxFVEUnLG51bGwsJyZpZD0nK2lkKTtELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyVXNlcnMoKTtyVGVhbSgpO2NtbygpO3RvYXN0KCfQmNC30YLRgNC40YLQvicpO30KYXN5bmMgZnVuY3Rpb24gZHIodGJsLGlkKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5PycpKXJldHVybjsKICBhd2FpdCBhZih0YmwsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpOwogIERbdGJsXT1hd2FpdCBhZih0YmwpfHxbXTsKICB2YXIgbT17bm90ZXM6ck5vdGVzLGhvc3Rpbmc6ckhvc3RpbmcscGFzc3dvcmRzOnJQYXNzd29yZHMsY29udHJhY3RzOnJDb250cmFjdHMsb2ZmZXJzOnJPZmZlcnN9OwogIGlmKG1bdGJsXSltW3RibF0oKTsKICB0b2FzdCgn0JjQt9GC0YDQuNGC0L4nKTsKfQphc3luYyBmdW5jdGlvbiBsQSh3aG8sd2hhdCl7CiAgdmFyIHU9RC51c2Vycy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT13aG87fSl8fEQudXNlcnNbMF07CiAgYXdhaXQgYWYoJ2FjdGl2aXR5JywnUE9TVCcse3dobzp3aG98fCfQodC40YHRgtC10LzQsCcsd2hhdDp3aGF0LGNvbG9yOih1JiZ1LmNvbG9yKXx8J2F2LXAnLGluaXRpYWxzOih1JiZ1LmluaXRpYWxzKXx8Jz8/J30pOwogIEQuYWN0aXZpdHk9YXdhaXQgYWYoJ2FjdGl2aXR5Jyl8fFtdOwp9CgpmdW5jdGlvbiBjaGlwUyhlbCl7ZWwuY2xvc2VzdCgnLmNoaXBzJykucXVlcnlTZWxlY3RvckFsbCgnLmNoaXAnKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2MuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7fSk7ZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7fQpmdW5jdGlvbiB0b2FzdChtc2csdHlwZSl7CiAgdmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvYXN0Jyk7dC50ZXh0Q29udGVudD1tc2c7dC5jbGFzc05hbWU9J3RvYXN0IHNob3cgJysodHlwZXx8JycpOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmNsYXNzTmFtZT0ndG9hc3QnO30sMjUwMCk7Cn0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'invoice-doc.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JTQvtC60YPQvNC10L3RgiDigJQgV2VidHJpeGlhPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Tb3JhOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tZ3JlZW46IzFhYTY0YzstLWRhcms6IzEyMTMxYTstLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYnJkOiNlM2UxZjA7LS1iZzojZWVmMGZifQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7YmFja2dyb3VuZDp2YXIoLS1iZyk7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjI2cHggMTZweDtjb2xvcjp2YXIoLS10eCl9Ci50b29sYmFye21heC13aWR0aDo4MjBweDttYXJnaW46MCBhdXRvIDE0cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4fQoudGJ0bntwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OidTb3JhJyxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwfQoudGJ0bi5we2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2NvbG9yOiNmZmZ9Ci50YnRuLnN7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLXR4Mik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpfQoucGFnZXttYXgtd2lkdGg6ODIwcHg7bWFyZ2luOjAgYXV0bztiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgNHB4IDQwcHggcmdiYSgyMCwyMCw0MCwuMDgpfQouaGVhZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nOjM0cHggNDJweCAyMHB4fQoubG9nb3tmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZ3JlZW4pO2xldHRlci1zcGFjaW5nOi0uNXB4fQouc3VwcGxpZXJ7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjc7Y29sb3I6dmFyKC0tdHgyKX0KLnN1cHBsaWVyIGJ7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtc2l6ZToxM3B4fQouYmFkZ2Utcm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDQycHggMjBweH0KLm9yaWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDE2cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4Myk7bGV0dGVyLXNwYWNpbmc6LjA1ZW19Ci5yZWNpcGllbnR7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjc7Y29sb3I6dmFyKC0tdHgyKX0KLnJlY2lwaWVudCBie2NvbG9yOnZhcigtLXR4KTtmb250LXNpemU6MTNweH0KLnRpdGxlYmFye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LWVuZDtwYWRkaW5nOjZweCA0MnB4IDIycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLnR0e30KLnR0IC5sYmx7Zm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjE1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLXR4Myl9Ci50dCAubnVte2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ncmVlbik7bWFyZ2luOjJweCAwIDEwcHh9Ci5kYXRlc3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuOX0KLmRhdGVzIGJ7Y29sb3I6dmFyKC0tdHgpfQouYW1vdW50Ym94e2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MThweCAyNnB4O3RleHQtYWxpZ246cmlnaHQ7bWluLXdpZHRoOjIxMHB4fQouYW1vdW50Ym94IC5iaWd7Zm9udC1zaXplOjM0cHg7Zm9udC13ZWlnaHQ6NzAwfQp0YWJsZS5pdGVtc3t3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MjJweCAwO2ZvbnQtc2l6ZToxMi41cHh9CnRhYmxlLml0ZW1zIHRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjlweCA4cHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LXdlaWdodDo2MDA7Ym9yZGVyLWJvdHRvbToycHggc29saWQgdmFyKC0tYnJkKTtmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA0ZW19CnRhYmxlLml0ZW1zIHRke3BhZGRpbmc6MTFweCA4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDIpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCgyKSwKdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDMpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCgzKSwKdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDQpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCg0KSwKdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDUpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCg1KXt0ZXh0LWFsaWduOnJpZ2h0fQouYm90dG9te2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgNDJweCAzNHB4O2dhcDoyMHB4O2ZsZXgtd3JhcDp3cmFwfQoucGF5e2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuOTtjb2xvcjp2YXIoLS10eDIpO21heC13aWR0aDozNDBweH0KLnBheSBie2NvbG9yOnZhcigtLXR4KX0KLndvcmRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mik7bWFyZ2luLXRvcDoxNHB4fQoudG90YWxze2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6Mjt0ZXh0LWFsaWduOnJpZ2h0O21pbi13aWR0aDoyMjBweH0KLnRvdGFscyAuZ3JhbmR7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWdyZWVuKX0KLnNpZ257ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MjBweCA0MnB4IDM2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKX0KLml0ZW1ib3h7cGFkZGluZzowIDQycHh9Cip7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7cHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0KQHBhZ2V7c2l6ZTpBNDttYXJnaW46MTJtbSAxMG1tfQpAbWVkaWEgcHJpbnR7CiAgaHRtbCxib2R5e2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjA7bWFyZ2luOjB9CiAgLnRvb2xiYXJ7ZGlzcGxheTpub25lfQogIC5wYWdle2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7bWF4LXdpZHRoOjEwMCU7bWFyZ2luOjB9CiAgdGFibGUuaXRlbXMgdHJ7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9CiAgLmJvdHRvbSwuc2lnbntwYWdlLWJyZWFrLWluc2lkZTphdm9pZH0KICAuYW1vdW50Ym94e2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pIWltcG9ydGFudDtjb2xvcjojZmZmIWltcG9ydGFudH0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICA8YnV0dG9uIGNsYXNzPSJ0YnRuIHMiIG9uY2xpY2s9Imhpc3RvcnkuYmFjaygpIj7ihpAg0J3QsNC30LDQtDwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9InRidG4gcCIgb25jbGljaz0id2luZG93LnByaW50KCkiPvCflqjvuI8g0J/QtdGH0LDRgiAvIFBERjwvYnV0dG9uPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZSIgaWQ9InBhZ2UiPtCX0LDRgNC10LbQtNCw4oCmPC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZClyZXR1cm4gc2F2ZWQ7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaW52b2ljZS1kb2NcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgcmV0dXJuIGJhc2UrJy9hcGkucGhwJzsKfSkoKTsKdmFyIHBhcmFtcz1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCk7CnZhciBkb2NJZD1wYXJhbXMuZ2V0KCdpZCcpOwoKdmFyIFRZUEVfTEFCRUw9e3Byb2Zvcm1hOifQn9GA0L7RhNC+0YDQvNCwINGE0LDQutGC0YPRgNCwJyxpbnZvaWNlOifQpNCw0LrRgtGD0YDQsCcsY3JlZGl0X25vdGU6J9Ca0YDQtdC00LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsZGViaXRfbm90ZTon0JTQtdCx0LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsb2ZmZXI6J9Ce0YTQtdGA0YLQsCcscXVvdGU6J9Ce0YTQtdGA0YLQsCd9OwoKLy8g4pSA4pSAIEJ1bGdhcmlhbiBudW1iZXItdG8td29yZHMg4pSA4pSACnZhciBvbmVzPVsnJywgJ9C10LTQuNC9JywgJ9C00LLQsCcsICfRgtGA0LgnLCAn0YfQtdGC0LjRgNC4JywgJ9C/0LXRgicsICfRiNC10YHRgicsICfRgdC10LTQtdC8JywgJ9C+0YHQtdC8JywgJ9C00LXQstC10YInXTsKdmFyIG9uZXNGZW09WycnLCAn0LXQtNC90LAnLCAn0LTQstC1JywgJ9GC0YDQuCcsICfRh9C10YLQuNGA0LgnLCAn0L/QtdGCJywgJ9GI0LXRgdGCJywgJ9GB0LXQtNC10LwnLCAn0L7RgdC10LwnLCAn0LTQtdCy0LXRgiddOwp2YXIgdGVlbnM9WyfQtNC10YHQtdGCJywn0LXQtNC40L3QsNC00LXRgdC10YInLCfQtNCy0LDQvdCw0LTQtdGB0LXRgicsJ9GC0YDQuNC90LDQtNC10YHQtdGCJywn0YfQtdGC0LjRgNC40L3QsNC00LXRgdC10YInLCfQv9C10YLQvdCw0LTQtdGB0LXRgicsJ9GI0LXRgdGC0L3QsNC00LXRgdC10YInLCfRgdC10LTQtdC80L3QsNC00LXRgdC10YInLCfQvtGB0LXQvNC90LDQtNC10YHQtdGCJywn0LTQtdCy0LXRgtC90LDQtNC10YHQtdGCJ107CnZhciB0ZW5zPVsnJywnJywn0LTQstCw0LTQtdGB0LXRgicsJ9GC0YDQuNC00LXRgdC10YInLCfRh9C10YLQuNGA0LjQtNC10YHQtdGCJywn0L/QtdGC0LTQtdGB0LXRgicsJ9GI0LXRgdGC0LTQtdGB0LXRgicsJ9GB0LXQtNC10LzQtNC10YHQtdGCJywn0L7RgdC10LzQtNC10YHQtdGCJywn0LTQtdCy0LXRgtC00LXRgdC10YInXTsKdmFyIGh1bmRyZWRzPVsnJywn0YHRgtC+Jywn0LTQstC10YHRgtCwJywn0YLRgNC40YHRgtCwJywn0YfQtdGC0LjRgNC40YHRgtC+0YLQuNC9Jywn0L/QtdGC0YHRgtC+0YLQuNC9Jywn0YjQtdGB0YLRgdGC0L7RgtC40L0nLCfRgdC10LTQtdC80YHRgtC+0YLQuNC9Jywn0L7RgdC10LzRgdGC0L7RgtC40L0nLCfQtNC10LLQtdGC0YHRgtC+0YLQuNC9J107CgpmdW5jdGlvbiB0aHJlZURpZ2l0cyhuLGZlbSl7CiAgbj1uJTEwMDA7CiAgdmFyIGg9TWF0aC5mbG9vcihuLzEwMCksIHI9biUxMDA7CiAgdmFyIHBhcnRzPVtdOwogIGlmKGgpIHBhcnRzLnB1c2goaHVuZHJlZHNbaF0pOwogIGlmKHI+PTEwJiZyPDIwKXsgcGFydHMucHVzaCh0ZWVuc1tyLTEwXSk7IH0KICBlbHNlewogICAgdmFyIHQ9TWF0aC5mbG9vcihyLzEwKSwgbz1yJTEwOwogICAgaWYodCkgcGFydHMucHVzaCh0ZW5zW3RdKTsKICAgIGlmKG8pIHBhcnRzLnB1c2goKGZlbT9vbmVzRmVtOm9uZXMpW29dKTsKICB9CiAgaWYocGFydHMubGVuZ3RoPT09MCkgcmV0dXJuICcnOwogIGlmKHBhcnRzLmxlbmd0aD09PTEpIHJldHVybiBwYXJ0c1swXTsKICByZXR1cm4gcGFydHMuc2xpY2UoMCwtMSkuam9pbignICcpKycg0LggJytwYXJ0c1twYXJ0cy5sZW5ndGgtMV07Cn0KZnVuY3Rpb24gbnVtVG9Xb3JkcyhuKXsKICBuPU1hdGguZmxvb3Iobik7CiAgaWYobj09PTApIHJldHVybiAn0L3Rg9C70LAnOwogIHZhciBwYXJ0cz1bXTsKICB2YXIgbWlsbGlvbnM9TWF0aC5mbG9vcihuLzEwMDAwMDApOwogIHZhciB0aG91c2FuZHM9TWF0aC5mbG9vcigobiUxMDAwMDAwKS8xMDAwKTsKICB2YXIgcmVzdD1uJTEwMDA7CiAgaWYobWlsbGlvbnMpIHBhcnRzLnB1c2godGhyZWVEaWdpdHMobWlsbGlvbnMsZmFsc2UpKycgJysobWlsbGlvbnM9PT0xPyfQvNC40LvQuNC+0L0nOifQvNC40LvQuNC+0L3QsCcpKTsKICBpZih0aG91c2FuZHMpIHBhcnRzLnB1c2godGhvdXNhbmRzPT09MT8n0YXQuNC70Y/QtNCwJzp0aHJlZURpZ2l0cyh0aG91c2FuZHMsdHJ1ZSkrJyDRhdC40LvRj9C00LgnKTsKICBpZihyZXN0KSBwYXJ0cy5wdXNoKHRocmVlRGlnaXRzKHJlc3QsZmFsc2UpKTsKICByZXR1cm4gcGFydHMuam9pbignICcpOwp9CmZ1bmN0aW9uIGFtb3VudFdvcmRzKHRvdGFsLGN1cnJlbmN5KXsKICB2YXIgd2hvbGU9TWF0aC5mbG9vcih0b3RhbCk7CiAgdmFyIGNlbnRzPU1hdGgucm91bmQoKHRvdGFsLXdob2xlKSoxMDApOwogIHZhciBjdXJXaG9sZSA9IGN1cnJlbmN5PT09J0JHTicgPyAod2hvbGU9PT0xPyfQu9C10LInOifQu9C10LLQsCcpIDogKHdob2xlPT09MT8n0LXQstGA0L4nOifQtdCy0YDQvicpOwogIHZhciBjdXJDZW50cyA9IGN1cnJlbmN5PT09J0JHTicgPyAn0YHRgtC+0YLQuNC90LrQuCcgOiAn0YbQtdC90YLQsCc7CiAgdmFyIHc9bnVtVG9Xb3Jkcyh3aG9sZSk7CiAgdz13LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3cuc2xpY2UoMSk7CiAgdmFyIG91dD13KycgJytjdXJXaG9sZTsKICBpZihjZW50cz4wKSBvdXQrPScg0LggJytudW1Ub1dvcmRzKGNlbnRzKSsnICcrY3VyQ2VudHM7CiAgcmV0dXJuIG91dDsKfQpmdW5jdGlvbiBmbXREYXRlKHMpewogIGlmKCFzKXJldHVybiAn4oCUJzsKICB2YXIgZD1uZXcgRGF0ZShzKydUMDA6MDA6MDAnKTsKICByZXR1cm4gU3RyaW5nKGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCcwJykrJy4nK1N0cmluZyhkLmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpKycuJytkLmdldEZ1bGxZZWFyKCk7Cn0KZnVuY3Rpb24gbW9uZXkobixjdXIpeyByZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnKyhjdXJ8fCdFVVInKTsgfQoKYXN5bmMgZnVuY3Rpb24gbG9hZCgpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGZldGNoKEFQSSsnP2FjdGlvbj1kb2N1bWVudF9mdWxsJmlkPScrZW5jb2RlVVJJQ29tcG9uZW50KGRvY0lkKSk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIGlmKCFqLm9rKXsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UnKS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9InBhZGRpbmc6NDBweCI+0JTQvtC60YPQvNC10L3RgtGK0YIg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvS48L2Rpdj4nOyByZXR1cm47IH0KICAgIHJlbmRlcihqLmRhdGEuZG9jdW1lbnQsIGouZGF0YS5jb21wYW55KTsKICB9Y2F0Y2goZSl7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJykuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJwYWRkaW5nOjQwcHgiPtCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1LjwvZGl2Pic7IH0KfQoKZnVuY3Rpb24gcmVuZGVyKGQsY29tcCl7CiAgY29tcD1jb21wfHx7fTsKICB2YXIgc25hcD1kLmNsaWVudF9zbmFwc2hvdHx8e307CiAgdmFyIGl0ZW1zPWQuaXRlbXN8fFtdOwogIHZhciBsYWJlbD1UWVBFX0xBQkVMW2QudHlwZV18fCfQlNC+0LrRg9C80LXQvdGCJzsKICB2YXIgc3ltYm9sID0gZC5jdXJyZW5jeT09PSdCR04nID8gJ9C70LIuJyA6ICfigqwnOwoKICB2YXIgaHRtbD0nJzsKICBodG1sKz0nPGRpdiBjbGFzcz0iaGVhZCI+PGRpdiBjbGFzcz0ibG9nbyI+V0VCVFJJWElBPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0ic3VwcGxpZXIiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xldHRlci1zcGFjaW5nOi4xNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojYWFhIj7QlNC+0YHRgtCw0LLRh9C40Lo8L2Rpdj4nOwogIGh0bWwrPSc8Yj4nKyhjb21wLm5hbWV8fCcnKSsnPC9iPjxicj4nKyhjb21wLmFkZHJlc3N8fCcnKSsnPGJyPicrKGNvbXAuY2l0eXx8JycpKyc8YnI+JysoY29tcC5jb3VudHJ5fHwn0JHRitC70LPQsNGA0LjRjycpKwogICAgJzxicj7QldCY0Jov0JHRg9C70YHRgtCw0YI6ICcrKGNvbXAuZWlrfHwnJykrJzxicj7QlNCU0KEg4oSWOiAnKyhjb21wLnZhdF9udW1iZXJ8fCcnKSsnPGJyPtCc0J7QmzogJysoY29tcC5tb2x8fCcnKSsnPC9kaXY+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9ImJhZGdlLXJvdyI+PGRpdiBjbGFzcz0ib3JpZyI+0J7QoNCY0JPQmNCd0JDQmzwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InJlY2lwaWVudCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjE1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiNhYWEiPtCf0L7Qu9GD0YfQsNGC0LXQuzwvZGl2Pic7CiAgaHRtbCs9JzxiPicrKHNuYXAuY29tcGFueXx8c25hcC5uYW1lfHwn4oCUJykrJzwvYj48YnI+Jysoc25hcC5hZGRyZXNzfHwnJykrJzxicj4nKyhzbmFwLmNpdHl8fCcnKSsKICAgICc8YnI+0JXQmNCaL9CR0YPQu9GB0YLQsNGCOiAnKyhzbmFwLmVpa3x8J+KAlCcpKyhzbmFwLnZhdF9udW1iZXI/Jzxicj7QlNCU0KEg4oSWOiAnK3NuYXAudmF0X251bWJlcjonJykrKHNuYXAubW9sPyc8YnI+0JzQntCbOiAnK3NuYXAubW9sOicnKSsnPC9kaXY+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9InRpdGxlYmFyIj48ZGl2IGNsYXNzPSJ0dCI+PGRpdiBjbGFzcz0ibGJsIj4nK2xhYmVsKyc8L2Rpdj48ZGl2IGNsYXNzPSJudW0iPuKEliAnK2QuZnVsbF9udW1iZXIrJzwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iZGF0ZXMiPtCU0LDRgtCwINC90LAg0LjQt9C00LDQstCw0L3QtTogPGI+JytmbXREYXRlKGQuaXNzdWVfZGF0ZSkrJzwvYj48YnI+0JTQsNC90YrRh9C90L4g0YHRitCx0LjRgtC40LU6IDxiPicrZm10RGF0ZShkLnRheF9kYXRlKSsnPC9iPicrCiAgICAoZC5kdWVfZGF0ZT8nPGJyPtCf0LDQtNC10LY6IDxiPicrZm10RGF0ZShkLmR1ZV9kYXRlKSsnPC9iPic6JycpKyc8L2Rpdj48L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJhbW91bnRib3giPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xldHRlci1zcGFjaW5nOi4xZW07b3BhY2l0eTouODUiPtCe0JHQqdCeINCX0JAg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj48ZGl2IGNsYXNzPSJiaWciPicrCiAgICBwYXJzZUZsb2F0KGQudG90YWx8fDApLnRvRml4ZWQoMikrJyAnK3N5bWJvbCsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9Iml0ZW1ib3giPjx0YWJsZSBjbGFzcz0iaXRlbXMiPjx0aGVhZD48dHI+PHRoPtCQ0YDRgtC40LrRg9C7PC90aD48dGg+0JrQvtC7LjwvdGg+PHRoPtCc0Y/RgNC60LA8L3RoPjx0aD7QldC0LiDRhtC10L3QsDwvdGg+PHRoPtCh0YLQvtC50L3QvtGB0YI8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICBpdGVtcy5mb3JFYWNoKChpdCxpKT0+ewogICAgdmFyIGxpbmU9KHBhcnNlRmxvYXQoaXQucXR5fHwwKSpwYXJzZUZsb2F0KGl0LnByaWNlfHwwKSk7CiAgICBodG1sKz0nPHRyPjx0ZD4nKyhpKzEpKycuICcrKGl0Lm5hbWV8fCcnKSsnPC90ZD48dGQ+JytwYXJzZUZsb2F0KGl0LnF0eXx8MCkudG9GaXhlZCgyKSsnPC90ZD48dGQ+JysoaXQudW5pdHx8J9Cx0YAuJykrCiAgICAgICc8L3RkPjx0ZD4nK21vbmV5KGl0LnByaWNlLGQuY3VycmVuY3kpKyc8L3RkPjx0ZD4nK21vbmV5KGxpbmUsZC5jdXJyZW5jeSkrJzwvdGQ+PC90cj4nOwogIH0pOwogIGh0bWwrPSc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9ImJvdHRvbSI+PGRpdiBjbGFzcz0icGF5Ij4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJ3b3JkcyI+PGI+0KHQu9C+0LLQvtC8OjwvYj48YnI+JythbW91bnRXb3JkcyhkLnRvdGFsLGQuY3VycmVuY3kpKyc8L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE0cHgiPjxiPtCd0LDRh9C40L0g0L3QsCDQv9C70LDRidCw0L3QtTo8L2I+INC/0L4g0LHQsNC90LrQvtCyINC/0YrRgjxicj7QkdCw0L3QutCwOiAnKyhjb21wLmJhbmtfbmFtZXx8JycpKwogICAgJzxicj5JQkFOOiAnKyhjb21wLmliYW58fCcnKSsnPGJyPkJJQy9TV0lGVDogJysoY29tcC5iaWN8fCcnKSsnPC9kaXY+JzsKICBpZihkLm5vdGVzKSBodG1sKz0nPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4Ij48Yj7QkdC10LvQtdC20LrQuDo8L2I+PGJyPicrZC5ub3RlcysnPC9kaXY+JzsKICBodG1sKz0nPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0idG90YWxzIj7QlNCw0L3RitGH0L3QsCDQvtGB0L3QvtCy0LA6ICcrbW9uZXkoZC5zdWJ0b3RhbCxkLmN1cnJlbmN5KSsnPGJyPtCf0YDQvtGG0LXQvdGCINCU0JTQoTogJytwYXJzZUZsb2F0KGQudmF0X3BlcmNlbnR8fDApKyclPGJyPicrCiAgICAn0J3QsNGH0LjRgdC70LXQvSDQlNCU0KE6ICcrbW9uZXkoZC52YXRfYW1vdW50LGQuY3VycmVuY3kpKyc8YnI+PHNwYW4gY2xhc3M9ImdyYW5kIj7QodGD0LzQsCDQt9CwINC/0LvQsNGJ0LDQvdC1OiAnK21vbmV5KGQudG90YWwsZC5jdXJyZW5jeSkrJzwvc3Bhbj48L2Rpdj4nOwogIGh0bWwrPSc8L2Rpdj4nOwoKICBodG1sKz0nPGRpdiBjbGFzcz0ic2lnbiI+PGRpdj7Qn9C+0LvRg9GH0LDRgtC10Ls6ICcrKHNuYXAubW9sfHwnX19fX19fX19fX19fX19fXycpKyc8L2Rpdj48ZGl2PtCh0YrRgdGC0LDQstC40Ls6ICcrKGNvbXAubW9sfHwnX19fX19fX19fX19fX19fXycpKyc8L2Rpdj48L2Rpdj4nOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZScpLmlubmVySFRNTD1odG1sOwogIGRvY3VtZW50LnRpdGxlPWxhYmVsKycg4oSWICcrZC5mdWxsX251bWJlcisnIOKAlCBXZWJ0cml4aWEnOwp9Cgpsb2FkKCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'invoices.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0KTQsNC60YLRg9GA0LjRgNCw0L3QtSDigJQgV2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOwotLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYWNjOiM2YzYzZmY7LS1hY2MyOiNhNzhiZmE7LS1ncm46IzIyYzU1ZTstLWdkaW06cmdiYSgzNCwxOTcsOTQsLjEyKTsKLS1hbWI6I2Y1OWUwYjstLWFkaW06cmdiYSgyNDUsMTU4LDExLC4xMik7LS1yZWQ6I2VmNDQ0NDstLXJkaW06cmdiYSgyMzksNjgsNjgsLjEyKTsKLS1mbjonRE0gU2Fucycsc2Fucy1zZXJpZjstLW1vOidETSBNb25vJyxtb25vc3BhY2V9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTp2YXIoLS1mbik7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tdHgpO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoyMnB4IDE4cHggNjBweH0KLndyYXB7bWF4LXdpZHRoOjEyODBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmxua3tjb2xvcjp2YXIoLS1hY2MpO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lfQoudGFic3tkaXNwbGF5OmZsZXg7Z2FwOjRweDttYXJnaW4tYm90dG9tOjE4cHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtwYWRkaW5nOjVweDtib3JkZXItcmFkaXVzOjEycHg7ZmxleC13cmFwOndyYXB9Ci50YWJ7cGFkZGluZzo5cHggMTRweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDIpO3doaXRlLXNwYWNlOm5vd3JhcH0KLnRhYi5hY3RpdmV7YmFja2dyb3VuZDp2YXIoLS1hY2MpO2NvbG9yOiNmZmZ9Ci5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KLnB0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmfQouYnRuLnN7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmJ0bi5ke2JhY2tncm91bmQ6dmFyKC0tcmRpbSk7Y29sb3I6dmFyKC0tcmVkKX0KLmJ0bi5ne2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZH0KLmJ0bjpob3ZlcntvcGFjaXR5Oi44OH0KdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEyLjVweH0KdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OXB4IDEwcHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LXdlaWdodDo1MDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTt3aGl0ZS1zcGFjZTpub3dyYXB9CnRke3BhZGRpbmc6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KdHI6aG92ZXIgdGR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmJhZGdle3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5iYWRnZS5kcmFmdHtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO2NvbG9yOnZhcigtLXR4Mil9Ci5iYWRnZS5zZW50e2JhY2tncm91bmQ6cmdiYSg1NiwxODksMjQ4LC4xNSk7Y29sb3I6IzAyODRjN30KLmJhZGdlLnBhaWR7YmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjojMTU4MDNkfQouYmFkZ2Uub3ZlcmR1ZXtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOiNiOTFjMWN9Ci5iYWRnZS5jYW5jZWxsZWR7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtjb2xvcjp2YXIoLS10eDMpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9Ci5hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6NnB4fQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHNlbGVjdCx0ZXh0YXJlYXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweCAxMnB4Owpjb2xvcjp2YXIoLS10eCk7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4O291dGxpbmU6bm9uZX0KaW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoucm93MntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEwcHh9Ci5yb3cze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjEwcHh9Ci5ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHh9CkBtZWRpYShtYXgtd2lkdGg6ODYwcHgpey5ncmlkMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0KLyogbW9kYWwgKi8KLm1ve3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDM1LC41KTtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3otaW5kZXg6OTk5O3BhZGRpbmc6MzBweCAxNHB4O292ZXJmbG93OmF1dG99Ci5tby5zaG93e2Rpc3BsYXk6ZmxleH0KLm1ie2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMnB4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjcyMHB4fQoubWIgaDN7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouaXRlbXN7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLXRvcDo2cHh9Ci5pdGVtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDcwcHggNzBweCA5MHB4IDkwcHggMzBweDtnYXA6NnB4O3BhZGRpbmc6OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7YWxpZ24taXRlbXM6Y2VudGVyfQouaXRlbXJvdyBpbnB1dHtwYWRkaW5nOjdweCA4cHg7Zm9udC1zaXplOjEycHh9Ci5pdGVtaGVhZHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KLnRvdGFsc2JveHttYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjl9Ci50b3RhbHNib3ggYntmb250LXNpemU6MTZweDtjb2xvcjp2YXIoLS1hY2MpfQouZWlrbG9va3tkaXNwbGF5OmZsZXg7Z2FwOjZweH0KLmVpa2xvb2sgaW5wdXR7ZmxleDoxfQouY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7cmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToyMHB4fQoubWJyZWx7cG9zaXRpb246cmVsYXRpdmV9Ci5zbWFsbHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpfQouc3RhdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9Ci5zdGF0IGJ7Zm9udC1zaXplOjIwcHh9Ci5zdGF0Z3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjE0cHg7bWFyZ2luLWJvdHRvbToxNnB4fQpAbWVkaWEobWF4LXdpZHRoOjg2MHB4KXsuc3RhdGdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcil9fQouc3RhdGNhcmR7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4fQoudG9hc3R7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjIwcHg7cmlnaHQ6MjBweDtiYWNrZ3JvdW5kOiMxYTFhMmU7Y29sb3I6I2ZmZjtwYWRkaW5nOjEycHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lO3otaW5kZXg6MTIwMH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0id3JhcCI+CiAgPGRpdiBjbGFzcz0idG9wIj4KICAgIDxkaXY+PGgxPvCfp74g0KTQsNC60YLRg9GA0LjRgNCw0L3QtTwvaDE+PGRpdiBjbGFzcz0ic3ViIj7Qn9GA0L7RhNC+0YDQvNC4IMK3INCk0LDQutGC0YPRgNC4IMK3INCa0YDQtdC00LjRgtC90Lgv0JTQtdCx0LjRgtC90Lgg0LjQt9Cy0LXRgdGC0LjRjyDCtyDQntGE0LXRgNGC0Lggwrcg0JrQu9C40LXQvdGC0Lggwrcg0J/QtdGA0LjQvtC00LjRh9C90Lg8L2Rpdj48L2Rpdj4KICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJsbmsiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJ0YWJzIiBpZD0idGFicyI+PC9kaXY+CiAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0ibW8iIGlkPSJkb2NNb2RhbCI+PGRpdiBjbGFzcz0ibWIgbWJyZWwiPgogIDxzcGFuIGNsYXNzPSJjbG9zZSIgb25jbGljaz0iY2xvc2VNb2RhbCgnZG9jTW9kYWwnKSI+4pyVPC9zcGFuPgogIDxoMyBpZD0iZG9jTW9kYWxUaXRsZSI+0JTQvtC60YPQvNC10L3RgjwvaDM+CiAgPGRpdiBjbGFzcz0icm93MiI+CiAgICA8ZGl2PgogICAgICA8bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD4KICAgICAgPHNlbGVjdCBpZD0iZF9jbGllbnQiIG9uY2hhbmdlPSJmaWxsQ2xpZW50U25hcHNob3QoKSI+PC9zZWxlY3Q+CiAgICA8L2Rpdj4KICAgIDxkaXY+CiAgICAgIDxsYWJlbD7QldCY0Jog0LfQsCDRgtGK0YDRgdC10L3QtSAoVklFUyk8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJlaWtsb29rIj4KICAgICAgICA8aW5wdXQgaWQ9ImRfZWlrbG9va3VwIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuIDIwNzQxOTQ1MSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHMiIG9uY2xpY2s9Imxvb2t1cEVpaygpIj7wn5SOINCi0YrRgNGB0Lg8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3czIj4KICAgIDxkaXY+PGxhYmVsPtCU0LDRgtCwINC90LAg0LjQt9C00LDQstCw0L3QtTwvbGFiZWw+PGlucHV0IGlkPSJkX2lzc3VlIiB0eXBlPSJkYXRlIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCU0LDQvdGK0YfQvdCwINC00LDRgtCwPC9sYWJlbD48aW5wdXQgaWQ9ImRfdGF4IiB0eXBlPSJkYXRlIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCf0LDQtNC10LYgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPjxpbnB1dCBpZD0iZF9kdWUiIHR5cGU9ImRhdGUiPjwvZGl2PgogIDwvZGl2PgogIDxsYWJlbD7QkNGA0YLQuNC60YPQu9C4PC9sYWJlbD4KICA8ZGl2IGNsYXNzPSJpdGVtcyIgaWQ9Iml0ZW1zQm94Ij48L2Rpdj4KICA8YnV0dG9uIGNsYXNzPSJidG4gcyIgc3R5bGU9Im1hcmdpbi10b3A6OHB4IiBvbmNsaWNrPSJhZGRJdGVtUm93KCkiPisg0JDRgNGC0LjQutGD0Ls8L2J1dHRvbj4KICA8ZGl2IGNsYXNzPSJyb3czIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ij4KICAgIDxkaXY+PGxhYmVsPtCU0JTQoSAlPC9sYWJlbD48aW5wdXQgaWQ9ImRfdmF0IiB0eXBlPSJudW1iZXIiIHZhbHVlPSIyMCIgb25pbnB1dD0icmVjYWxjVG90YWxzKCkiPjwvZGl2PgogICAgPGRpdj48bGFiZWw+0JLQsNC70YPRgtCwPC9sYWJlbD48c2VsZWN0IGlkPSJkX2N1cnJlbmN5Ij48b3B0aW9uPkVVUjwvb3B0aW9uPjxvcHRpb24+QkdOPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9ImRfc3RhdHVzIj48b3B0aW9uIHZhbHVlPSJkcmFmdCI+0KfQtdGA0L3QvtCy0LA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzZW50Ij7QmNC30L/RgNCw0YLQtdC90LA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJwYWlkIj7Qn9C70LDRgtC10L3QsDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im92ZXJkdWUiPtCf0YDQvtGB0YDQvtGH0LXQvdCwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY2FuY2VsbGVkIj7QkNC90YPQu9C40YDQsNC90LA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj4KICA8L2Rpdj4KICA8bGFiZWw+0JHQtdC70LXQttC60Lg8L2xhYmVsPgogIDx0ZXh0YXJlYSBpZD0iZF9ub3RlcyIgcm93cz0iMiI+PC90ZXh0YXJlYT4KICA8ZGl2IGNsYXNzPSJ0b3RhbHNib3giIGlkPSJ0b3RhbHNCb3giPjwvZGl2PgogIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6MTRweCI+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic2F2ZURvY3VtZW50KCkiPvCfkr4g0JfQsNC/0LDQt9C4PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gcyIgb25jbGljaz0iY2xvc2VNb2RhbCgnZG9jTW9kYWwnKSI+0J7RgtC60LDQtzwvYnV0dG9uPgogIDwvZGl2Pgo8L2Rpdj48L2Rpdj4KCjxkaXYgY2xhc3M9Im1vIiBpZD0iY2xpZW50TW9kYWwiPjxkaXYgY2xhc3M9Im1iIG1icmVsIj4KICA8c3BhbiBjbGFzcz0iY2xvc2UiIG9uY2xpY2s9ImNsb3NlTW9kYWwoJ2NsaWVudE1vZGFsJykiPuKclTwvc3Bhbj4KICA8aDM+0JrQu9C40LXQvdGCPC9oMz4KICA8ZGl2IGNsYXNzPSJyb3cyIj4KICAgIDxkaXY+PGxhYmVsPtCY0LzQtTwvbGFiZWw+PGlucHV0IGlkPSJjX25hbWUiPjwvZGl2PgogICAgPGRpdj48bGFiZWw+0KTQuNGA0LzQsDwvbGFiZWw+PGlucHV0IGlkPSJjX2NvbXBhbnkiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPgogICAgPGRpdj48bGFiZWw+0JXQmNCaPC9sYWJlbD48aW5wdXQgaWQ9ImNfZWlrIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCU0JTQoSDQvdC+0LzQtdGAPC9sYWJlbD48aW5wdXQgaWQ9ImNfdmF0Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3cyIj4KICAgIDxkaXY+PGxhYmVsPtCY0LzQtdC50Ls8L2xhYmVsPjxpbnB1dCBpZD0iY19lbWFpbCI+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7QotC10LvQtdGE0L7QvTwvbGFiZWw+PGlucHV0IGlkPSJjX3Bob25lIj48L2Rpdj4KICA8L2Rpdj4KICA8bGFiZWw+0JDQtNGA0LXRgTwvbGFiZWw+PGlucHV0IGlkPSJjX2FkZHJlc3MiPgogIDxkaXYgY2xhc3M9InJvdzIiPgogICAgPGRpdj48bGFiZWw+0JPRgNCw0LQ8L2xhYmVsPjxpbnB1dCBpZD0iY19jaXR5Ij48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCc0J7QmzwvbGFiZWw+PGlucHV0IGlkPSJjX21vbCI+PC9kaXY+CiAgPC9kaXY+CiAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJtYXJnaW4tdG9wOjE0cHgiIG9uY2xpY2s9InNhdmVDbGllbnQoKSI+8J+SviDQl9Cw0L/QsNC30Lgg0LrQu9C40LXQvdGCPC9idXR0b24+CjwvZGl2PjwvZGl2PgoKPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZClyZXR1cm4gc2F2ZWQ7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaW52b2ljZXNcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgcmV0dXJuIGJhc2UrJy9hcGkucGhwJzsKfSkoKTsKCmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSxxcyl7CiAgbWV0aG9kPW1ldGhvZHx8J0dFVCc7cXM9cXN8fCcnOwogIHRyeXsKICAgIHZhciBvPXttZXRob2Q6bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319OwogICAgaWYoYm9keSlvLmJvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249JythY3Rpb24rcXMsbyk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGFjdGlvbixlKTtyZXR1cm4gbnVsbDt9Cn0KZnVuY3Rpb24gdG9hc3QobXNnKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW1zZzt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gb3Blbk1vZGFsKGlkKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NMaXN0LmFkZCgnc2hvdycpO30KZnVuY3Rpb24gY2xvc2VNb2RhbChpZCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTt9CmZ1bmN0aW9uIG1vbmV5KG4sY3VyKXtjdXI9Y3VyfHwnRVVSJztyZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnK2N1cjt9Cgp2YXIgVEFCUz1bCiAge2lkOidkYXNoYm9hcmQnLGxhYmVsOifwn5OKINCi0LDQsdC70L4nfSwKICB7aWQ6J3Byb2Zvcm1hJyxsYWJlbDon0J/RgNC+0YTQvtGA0LzQuCd9LAogIHtpZDonaW52b2ljZScsbGFiZWw6J9Ck0LDQutGC0YPRgNC4J30sCiAge2lkOidjcmVkaXRfbm90ZScsbGFiZWw6J9Ca0YDQtdC00LjRgtC90Lgg0LjQt9CyLid9LAogIHtpZDonZGViaXRfbm90ZScsbGFiZWw6J9CU0LXQsdC40YLQvdC4INC40LfQsi4nfSwKICB7aWQ6J29mZmVyJyxsYWJlbDon0J7RhNC10YDRgtC4J30sCiAge2lkOidjbGllbnRzJyxsYWJlbDon8J+RpSDQmtC70LjQtdC90YLQuCd9LAogIHtpZDoncmVjdXJyaW5nJyxsYWJlbDon8J+UgSDQn9C10YDQuNC+0LTQuNGH0L3QuCd9LAogIHtpZDoncmVwb3J0cycsbGFiZWw6J/Cfk4gg0KHQv9GA0LDQstC60LgnfSwKICB7aWQ6J3NldHRpbmdzJyxsYWJlbDon4pqZ77iPINCd0LDRgdGC0YDQvtC50LrQuCd9Cl07CnZhciBDVVJfVEFCPSdkYXNoYm9hcmQnOwp2YXIgQ0xJRU5UUz1bXTsKCmZ1bmN0aW9uIHJlbmRlclRhYnMoKXsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFicycpLmlubmVySFRNTD1UQUJTLm1hcCh0PT4KICAgICc8ZGl2IGNsYXNzPSJ0YWInKyh0LmlkPT09Q1VSX1RBQj8nIGFjdGl2ZSc6JycpKyciIG9uY2xpY2s9ImdvVGFiKFwnJyt0LmlkKydcJykiPicrdC5sYWJlbCsnPC9kaXY+Jykuam9pbignJyk7Cn0KZnVuY3Rpb24gZ29UYWIoaWQpe0NVUl9UQUI9aWQ7cmVuZGVyVGFicygpO3JlbmRlckNvbnRlbnQoKTt9Cgp2YXIgVFlQRV9MQUJFTD17cHJvZm9ybWE6J9Cf0YDQvtGE0L7RgNC80LAg0YTQsNC60YLRg9GA0LAnLGludm9pY2U6J9Ck0LDQutGC0YPRgNCwJyxjcmVkaXRfbm90ZTon0JrRgNC10LTQuNGC0L3QviDQuNC30LLQtdGB0YLQuNC1JyxkZWJpdF9ub3RlOifQlNC10LHQuNGC0L3QviDQuNC30LLQtdGB0YLQuNC1JyxvZmZlcjon0J7RhNC10YDRgtCwJ307Cgphc3luYyBmdW5jdGlvbiByZW5kZXJDb250ZW50KCl7CiAgdmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKTsKICBpZihDVVJfVEFCPT09J2Rhc2hib2FyZCcpeyBhd2FpdCByZW5kZXJEYXNoYm9hcmQoYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0nY2xpZW50cycpeyBhd2FpdCByZW5kZXJDbGllbnRzKGMpOyByZXR1cm47IH0KICBpZihDVVJfVEFCPT09J3JlY3VycmluZycpeyBhd2FpdCByZW5kZXJSZWN1cnJpbmcoYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0ncmVwb3J0cycpeyBhd2FpdCByZW5kZXJSZXBvcnRzKGMpOyByZXR1cm47IH0KICBpZihDVVJfVEFCPT09J3NldHRpbmdzJyl7IGF3YWl0IHJlbmRlclNldHRpbmdzKGMpOyByZXR1cm47IH0KICBhd2FpdCByZW5kZXJEb2NMaXN0KGMsQ1VSX1RBQik7Cn0KCi8vIOKUgOKUgCBEQVNIQk9BUkQg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIHJlbmRlckRhc2hib2FyZChjKXsKICBjLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ic3RhdGdyaWQiIGlkPSJzdGF0Z3JpZCI+PGRpdiBjbGFzcz0ic3RhdGNhcmQiPtCX0LDRgNC10LbQtNCw4oCmPC9kaXY+PC9kaXY+JzsKICB2YXIgc3RhdHM9YXdhaXQgYWYoJ2ludm9pY2Vfc3RhdHMnKTsKICBpZighc3RhdHMpe2MuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+0J3Rj9C80LAg0LLRgNGK0LfQutCwINGBIEFQSS4g0KHRgtCw0YDRgtC40YDQsNC5INCy0LXQtNC90YrQtiA8Y29kZT5hcGkucGhwP2FjdGlvbj1pbnN0YWxsX2ludm9pY2luZzwvY29kZT4uPC9kaXY+JztyZXR1cm47fQogIHZhciBieVR5cGU9e307IChzdGF0cy5ieV90eXBlfHxbXSkuZm9yRWFjaCh0PT5ieVR5cGVbdC50eXBlXT10KTsKICB2YXIgdW5wYWlkPXN0YXRzLnVucGFpZHx8e2NudDowLHRvdGFsOjB9OwogIHZhciBodG1sPSc8ZGl2IGNsYXNzPSJzdGF0Z3JpZCI+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0ic3RhdGNhcmQiPjxkaXYgY2xhc3M9InN0YXQiPjxzcGFuIGNsYXNzPSJzbWFsbCI+0KTQsNC60YLRg9GA0Lg8L3NwYW4+PGI+JysoKGJ5VHlwZS5pbnZvaWNlJiZieVR5cGUuaW52b2ljZS5jbnQpfHwwKSsnPC9iPjxzcGFuIGNsYXNzPSJzbWFsbCI+Jyttb25leSgoYnlUeXBlLmludm9pY2UmJmJ5VHlwZS5pbnZvaWNlLnRvdGFsKXx8MCkrJzwvc3Bhbj48L2Rpdj48L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJzdGF0Y2FyZCI+PGRpdiBjbGFzcz0ic3RhdCI+PHNwYW4gY2xhc3M9InNtYWxsIj7Qn9GA0L7RhNC+0YDQvNC4PC9zcGFuPjxiPicrKChieVR5cGUucHJvZm9ybWEmJmJ5VHlwZS5wcm9mb3JtYS5jbnQpfHwwKSsnPC9iPjxzcGFuIGNsYXNzPSJzbWFsbCI+Jyttb25leSgoYnlUeXBlLnByb2Zvcm1hJiZieVR5cGUucHJvZm9ybWEudG90YWwpfHwwKSsnPC9zcGFuPjwvZGl2PjwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InN0YXRjYXJkIj48ZGl2IGNsYXNzPSJzdGF0Ij48c3BhbiBjbGFzcz0ic21hbGwiPtCe0YTQtdGA0YLQuDwvc3Bhbj48Yj4nKygoYnlUeXBlLm9mZmVyJiZieVR5cGUub2ZmZXIuY250KXx8MCkrJzwvYj48L2Rpdj48L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJzdGF0Y2FyZCI+PGRpdiBjbGFzcz0ic3RhdCI+PHNwYW4gY2xhc3M9InNtYWxsIj7QndC10L/Qu9Cw0YLQtdC90Lgg0YTQsNC60YLRg9GA0Lg8L3NwYW4+PGIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiPicrdW5wYWlkLmNudCsnPC9iPjxzcGFuIGNsYXNzPSJzbWFsbCI+Jyttb25leSh1bnBhaWQudG90YWwpKyc8L3NwYW4+PC9kaXY+PC9kaXY+JzsKICBodG1sKz0nPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J/RgNC40YXQvtC00Lgg0L/QviDQvNC10YHQtdGG0LggKNGE0LDQutGC0YPRgNC4KTwvZGl2PjwvZGl2Pjx0YWJsZT48dGhlYWQ+PHRyPjx0aD7QnNC10YHQtdGGPC90aD48dGg+0KHRg9C80LA8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAoc3RhdHMuYnlfbW9udGh8fFtdKS5mb3JFYWNoKG09PntodG1sKz0nPHRyPjx0ZD4nK20ueW0rJzwvdGQ+PHRkPicrbW9uZXkobS50b3RhbCkrJzwvdGQ+PC90cj4nO30pOwogIGh0bWwrPSc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICBjLmlubmVySFRNTD1odG1sOwp9CgovLyDilIDilIAgRE9DVU1FTlQgTElTVCAocHJvZm9ybWEvaW52b2ljZS9jcmVkaXRfbm90ZS9kZWJpdF9ub3RlL29mZmVyKSDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyRG9jTGlzdChjLHR5cGUpewogIGMuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+0JfQsNGA0LXQttC00LDigKY8L2Rpdj4nOwogIHZhciByb3dzPWF3YWl0IGFmKCdkb2N1bWVudHMnLCdHRVQnLCcnLCAnJnR5cGU9Jyt0eXBlKTsKICB2YXIgbGFiZWw9VFlQRV9MQUJFTFt0eXBlXXx8dHlwZTsKICB2YXIgaHRtbD0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+JytsYWJlbCsnPC9kaXY+PGRpdiBjbGFzcz0iYWN0aW9ucyI+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gcyIgb25jbGljaz0iZXhwb3J0Q3N2KFwnJyt0eXBlKydcJykiPuKshyDQldC60YHQv9C+0YDRgiBDU1Y8L2J1dHRvbj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJuZXdEb2N1bWVudChcJycrdHlwZSsnXCcpIj4rINCd0L7QsjwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgaHRtbCs9Jzx0YWJsZT48dGhlYWQ+PHRyPjx0aD7ihJY8L3RoPjx0aD7QlNCw0YLQsDwvdGg+PHRoPtCa0LvQuNC10L3RgjwvdGg+PHRoPtCh0YPQvNCwPC90aD48dGg+0KHRgtCw0YLRg9GBPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgKHJvd3N8fFtdKS5mb3JFYWNoKHI9PnsKICAgIHZhciBzbmFwPXIuY2xpZW50X3NuYXBzaG90fHx7fTsKICAgIGh0bWwrPSc8dHI+PHRkPicrKHIuZnVsbF9udW1iZXJ8fHIubnVtYmVyKSsnPC90ZD48dGQ+Jysoci5pc3N1ZV9kYXRlfHwnJykrJzwvdGQ+PHRkPicrKHNuYXAubmFtZXx8J+KAlCcpKyc8L3RkPicrCiAgICAgICc8dGQ+Jyttb25leShyLnRvdGFsLHIuY3VycmVuY3kpKyc8L3RkPjx0ZD48c3BhbiBjbGFzcz0iYmFkZ2UgJytyLnN0YXR1cysnIj4nK3Iuc3RhdHVzKyc8L3NwYW4+PC90ZD4nKwogICAgICAnPHRkIGNsYXNzPSJhY3Rpb25zIj4nKwogICAgICAnPHNwYW4gY2xhc3M9Imljb25idG4iIHRpdGxlPSLQn9GA0LXQs9C70LXQtCAvINCf0LXRh9Cw0YIiIG9uY2xpY2s9IndpbmRvdy5vcGVuKFwnaW52b2ljZS1kb2MuaHRtbD9pZD0nK3IuaWQrJ1wnLFwnX2JsYW5rXCcpIj7wn5GBPC9zcGFuPicrCiAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgdGl0bGU9ItCg0LXQtNCw0LrRhtC40Y8iIG9uY2xpY2s9ImVkaXREb2N1bWVudChcJycrci5pZCsnXCcsXCcnK3R5cGUrJ1wnKSI+4pyOPC9zcGFuPicrCiAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgdGl0bGU9ItCY0LzQtdC50LsiIG9uY2xpY2s9ImVtYWlsRG9jdW1lbnQoXCcnK3IuaWQrJ1wnKSI+4pyJPC9zcGFuPicrCiAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgdGl0bGU9ItCY0LfRgtGA0LjQuSIgb25jbGljaz0iZGVsZXRlRG9jdW1lbnQoXCcnK3IuaWQrJ1wnLFwnJyt0eXBlKydcJykiPvCfl5E8L3NwYW4+JysKICAgICAgJzwvdGQ+PC90cj4nOwogIH0pOwogIGlmKCFyb3dzfHwhcm93cy5sZW5ndGgpIGh0bWwrPSc8dHI+PHRkIGNvbHNwYW49IjYiIGNsYXNzPSJzbWFsbCI+0J3Rj9C80LAg0LTQvtC60YPQvNC10L3RgtC4PC90ZD48L3RyPic7CiAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogIGMuaW5uZXJIVE1MPWh0bWw7Cn0KCmZ1bmN0aW9uIGV4cG9ydENzdih0eXBlKXsgd2luZG93Lm9wZW4oQVBJKyc/YWN0aW9uPWRvY3VtZW50c19leHBvcnQmdHlwZT0nK3R5cGUsJ19ibGFuaycpOyB9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVEb2N1bWVudChpZCx0eXBlKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LTQvtC60YPQvNC10L3RgtCwPycpKXJldHVybjsKICBhd2FpdCBhZignZG9jdW1lbnRzJywnREVMRVRFJywnJywgJyZpZD0nK2lkKTsKICByZW5kZXJEb2NMaXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50JyksdHlwZSk7Cn0KCi8vIOKUgOKUgCBET0NVTUVOVCBFRElUT1IgTU9EQUwg4pSA4pSACnZhciBFRElUX0lEPW51bGwsIEVESVRfVFlQRT1udWxsOwphc3luYyBmdW5jdGlvbiBlbnN1cmVDbGllbnRzKCl7IGlmKCFDTElFTlRTLmxlbmd0aCkgQ0xJRU5UUz1hd2FpdCBhZignY2xpZW50cycpfHxbXTsgfQoKYXN5bmMgZnVuY3Rpb24gbmV3RG9jdW1lbnQodHlwZSl7CiAgYXdhaXQgZW5zdXJlQ2xpZW50cygpOwogIEVESVRfSUQ9bnVsbDsgRURJVF9UWVBFPXR5cGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY01vZGFsVGl0bGUnKS50ZXh0Q29udGVudD0n0J3QvtCyINC00L7QutGD0LzQtdC90YIg4oCUICcrKFRZUEVfTEFCRUxbdHlwZV18fHR5cGUpOwogIGZpbGxDbGllbnRTZWxlY3QoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9pc3N1ZScpLnZhbHVlPW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF90YXgnKS52YWx1ZT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfZHVlJykudmFsdWU9Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdmF0JykudmFsdWU9MjA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfY3VycmVuY3knKS52YWx1ZT0nRVVSJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9zdGF0dXMnKS52YWx1ZT0nZHJhZnQnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX25vdGVzJykudmFsdWU9Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZW1zQm94JykuaW5uZXJIVE1MPScnOwogIGFkZEl0ZW1Sb3coKTsKICByZWNhbGNUb3RhbHMoKTsKICBvcGVuTW9kYWwoJ2RvY01vZGFsJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGVkaXREb2N1bWVudChpZCx0eXBlKXsKICBhd2FpdCBlbnN1cmVDbGllbnRzKCk7CiAgdmFyIGZ1bGw9YXdhaXQgYWYoJ2RvY3VtZW50X2Z1bGwnLCdHRVQnLCcnLCAnJmlkPScraWQpOwogIGlmKCFmdWxsKXt0b2FzdCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUnKTtyZXR1cm47fQogIHZhciBkPWZ1bGwuZG9jdW1lbnQ7CiAgRURJVF9JRD1pZDsgRURJVF9UWVBFPXR5cGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY01vZGFsVGl0bGUnKS50ZXh0Q29udGVudD0oVFlQRV9MQUJFTFt0eXBlXXx8dHlwZSkrJyDihJYgJytkLmZ1bGxfbnVtYmVyOwogIGZpbGxDbGllbnRTZWxlY3QoZC5jbGllbnRfaWQpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2lzc3VlJykudmFsdWU9ZC5pc3N1ZV9kYXRlfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF90YXgnKS52YWx1ZT1kLnRheF9kYXRlfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9kdWUnKS52YWx1ZT1kLmR1ZV9kYXRlfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF92YXQnKS52YWx1ZT1kLnZhdF9wZXJjZW50fHwyMDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9jdXJyZW5jeScpLnZhbHVlPWQuY3VycmVuY3l8fCdFVVInOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX3N0YXR1cycpLnZhbHVlPWQuc3RhdHVzfHwnZHJhZnQnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX25vdGVzJykudmFsdWU9ZC5ub3Rlc3x8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZW1zQm94JykuaW5uZXJIVE1MPScnOwogIChkLml0ZW1zfHxbXSkuZm9yRWFjaChpdD0+YWRkSXRlbVJvdyhpdCkpOwogIGlmKCFkLml0ZW1zfHwhZC5pdGVtcy5sZW5ndGgpIGFkZEl0ZW1Sb3coKTsKICByZWNhbGNUb3RhbHMoKTsKICBvcGVuTW9kYWwoJ2RvY01vZGFsJyk7Cn0KCmZ1bmN0aW9uIGZpbGxDbGllbnRTZWxlY3Qoc2VsZWN0ZWRJZCl7CiAgdmFyIHNlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9jbGllbnQnKTsKICBzZWwuaW5uZXJIVE1MPSc8b3B0aW9uIHZhbHVlPSIiPuKAlCDQsdC10Lcg0LrQu9C40LXQvdGCIOKAlDwvb3B0aW9uPicrQ0xJRU5UUy5tYXAoYz0+CiAgICAnPG9wdGlvbiB2YWx1ZT0iJytjLmlkKyciJysoYy5pZD09PXNlbGVjdGVkSWQ/JyBzZWxlY3RlZCc6JycpKyc+JysoYy5uYW1lfHxjLmNvbXBhbnkpKyc8L29wdGlvbj4nKS5qb2luKCcnKTsKfQpmdW5jdGlvbiBmaWxsQ2xpZW50U25hcHNob3QoKXsgLyogY2xpZW50IGNob3Nlbjsgc25hcHNob3QgaGFuZGxlZCBzZXJ2ZXItc2lkZSBvbiBzYXZlICovIH0KCmZ1bmN0aW9uIGFkZEl0ZW1Sb3coaXQpewogIGl0PWl0fHx7bmFtZTonJyxxdHk6MSx1bml0OifQsdGALicscHJpY2U6MH07CiAgdmFyIGJveD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXRlbXNCb3gnKTsKICBpZighYm94LnF1ZXJ5U2VsZWN0b3IoJy5pdGVtaGVhZC1yb3cnKSl7CiAgICB2YXIgaGVhZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGhlYWQuY2xhc3NOYW1lPSdpdGVtcm93IGl0ZW1oZWFkLXJvdyc7CiAgICBoZWFkLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iaXRlbWhlYWQiPtCQ0YDRgtC40LrRg9C7PC9kaXY+PGRpdiBjbGFzcz0iaXRlbWhlYWQiPtCa0L7Quy48L2Rpdj48ZGl2IGNsYXNzPSJpdGVtaGVhZCI+0JzRj9GA0LrQsDwvZGl2PjxkaXYgY2xhc3M9Iml0ZW1oZWFkIj7QptC10L3QsDwvZGl2PjxkaXYgY2xhc3M9Iml0ZW1oZWFkIj7QntCx0YnQvjwvZGl2PjxkaXY+PC9kaXY+JzsKICAgIGJveC5hcHBlbmRDaGlsZChoZWFkKTsKICB9CiAgdmFyIHJvdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb3cuY2xhc3NOYW1lPSdpdGVtcm93JzsKICByb3cuaW5uZXJIVE1MPSc8aW5wdXQgY2xhc3M9Iml0X25hbWUiIHZhbHVlPSInKyhpdC5uYW1lfHwnJykucmVwbGFjZSgvIi9nLCcmcXVvdDsnKSsnIiBwbGFjZWhvbGRlcj0i0KPRgdC70YPQs9CwL9C/0YDQvtC00YPQutGCIj4nKwogICAgJzxpbnB1dCBjbGFzcz0iaXRfcXR5IiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHZhbHVlPSInKyhpdC5xdHl8fDEpKyciPicrCiAgICAnPGlucHV0IGNsYXNzPSJpdF91bml0IiB2YWx1ZT0iJysoaXQudW5pdHx8J9Cx0YAuJykrJyI+JysKICAgICc8aW5wdXQgY2xhc3M9Iml0X3ByaWNlIiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHZhbHVlPSInKyhpdC5wcmljZXx8MCkrJyI+JysKICAgICc8aW5wdXQgY2xhc3M9Iml0X3RvdGFsIiBkaXNhYmxlZCB2YWx1ZT0iMC4wMCI+JysKICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgb25jbGljaz0idGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZSgpO3JlY2FsY1RvdGFscygpIj7inJU8L3NwYW4+JzsKICBib3guYXBwZW5kQ2hpbGQocm93KTsKICByb3cucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKS5mb3JFYWNoKGlucD0+aW5wLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxyZWNhbGNUb3RhbHMpKTsKICByZWNhbGNUb3RhbHMoKTsKfQoKZnVuY3Rpb24gcmVjYWxjVG90YWxzKCl7CiAgdmFyIHJvd3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2l0ZW1zQm94IC5pdGVtcm93Om5vdCguaXRlbWhlYWQtcm93KScpOwogIHZhciBzdWJ0b3RhbD0wOwogIHJvd3MuZm9yRWFjaChyPT57CiAgICB2YXIgcT1wYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignLml0X3F0eScpLnZhbHVlKXx8MDsKICAgIHZhciBwPXBhcnNlRmxvYXQoci5xdWVyeVNlbGVjdG9yKCcuaXRfcHJpY2UnKS52YWx1ZSl8fDA7CiAgICB2YXIgdD1xKnA7CiAgICByLnF1ZXJ5U2VsZWN0b3IoJy5pdF90b3RhbCcpLnZhbHVlPXQudG9GaXhlZCgyKTsKICAgIHN1YnRvdGFsKz10OwogIH0pOwogIHZhciB2YXRQPXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdmF0JykudmFsdWUpfHwwOwogIHZhciB2YXQ9c3VidG90YWwqdmF0UC8xMDA7CiAgdmFyIHRvdGFsPXN1YnRvdGFsK3ZhdDsKICB2YXIgY3VyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2N1cnJlbmN5JykudmFsdWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdGFsc0JveCcpLmlubmVySFRNTD0KICAgICfQlNCw0L3RitGH0L3QsCDQvtGB0L3QvtCy0LA6ICcrbW9uZXkoc3VidG90YWwsY3VyKSsnPGJyPtCU0JTQoSAoJyt2YXRQKyclKTogJyttb25leSh2YXQsY3VyKSsnPGJyPjxiPtCe0LHRidC+OiAnK21vbmV5KHRvdGFsLGN1cikrJzwvYj4nOwp9Cgphc3luYyBmdW5jdGlvbiBzYXZlRG9jdW1lbnQoKXsKICB2YXIgaXRlbXM9W107CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2l0ZW1zQm94IC5pdGVtcm93Om5vdCguaXRlbWhlYWQtcm93KScpLmZvckVhY2gocj0+ewogICAgaXRlbXMucHVzaCh7CiAgICAgIG5hbWU6ci5xdWVyeVNlbGVjdG9yKCcuaXRfbmFtZScpLnZhbHVlLAogICAgICBxdHk6cGFyc2VGbG9hdChyLnF1ZXJ5U2VsZWN0b3IoJy5pdF9xdHknKS52YWx1ZSl8fDAsCiAgICAgIHVuaXQ6ci5xdWVyeVNlbGVjdG9yKCcuaXRfdW5pdCcpLnZhbHVlLAogICAgICBwcmljZTpwYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignLml0X3ByaWNlJykudmFsdWUpfHwwCiAgICB9KTsKICB9KTsKICB2YXIgcGF5bG9hZD17CiAgICBpZDpFRElUX0lEfHx1bmRlZmluZWQsIHR5cGU6RURJVF9UWVBFLAogICAgY2xpZW50X2lkOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2NsaWVudCcpLnZhbHVlfHxudWxsLAogICAgaXNzdWVfZGF0ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9pc3N1ZScpLnZhbHVlLAogICAgdGF4X2RhdGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdGF4JykudmFsdWUsCiAgICBkdWVfZGF0ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9kdWUnKS52YWx1ZXx8bnVsbCwKICAgIGl0ZW1zOml0ZW1zLAogICAgdmF0X3BlcmNlbnQ6cGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF92YXQnKS52YWx1ZSl8fDAsCiAgICBjdXJyZW5jeTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9jdXJyZW5jeScpLnZhbHVlLAogICAgc3RhdHVzOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX3N0YXR1cycpLnZhbHVlLAogICAgbm90ZXM6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rfbm90ZXMnKS52YWx1ZQogIH07CiAgdmFyIHI9YXdhaXQgYWYoJ2RvY3VtZW50cycsJ1BPU1QnLHBheWxvYWQpOwogIGlmKHIpeyB0b2FzdCgn0JfQsNC/0LjRgdCw0L3Qvjog4oSWICcrci5mdWxsX251bWJlcik7IGNsb3NlTW9kYWwoJ2RvY01vZGFsJyk7IHJlbmRlckRvY0xpc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKSxFRElUX1RZUEUpOyB9CiAgZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGxvb2t1cEVpaygpewogIHZhciBlaWs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfZWlrbG9va3VwJykudmFsdWUudHJpbSgpOwogIGlmKCFlaWspe3RvYXN0KCfQktGK0LLQtdC00Lgg0JXQmNCaJyk7cmV0dXJuO30KICB2YXIgcj1hd2FpdCBhZignZWlrX2xvb2t1cCcsJ0dFVCcsJycsICcmZWlrPScrZW5jb2RlVVJJQ29tcG9uZW50KGVpaykpOwogIGlmKHImJnIuZm91bmQpewogICAgdG9hc3QoJ9Cd0LDQvNC10YDQtdC90L46ICcrci5uYW1lKTsKICAgIC8vIG9mZmVyIHRvIGNyZWF0ZS9zZWxlY3QgY2xpZW50IHF1aWNrbHkKICAgIGlmKGNvbmZpcm0oJ9Cd0LDQvNC10YDQtdC90LAg0YTQuNGA0LzQsDogJytyLm5hbWUrJ1xuJytyLmFkZHJlc3MrJ1xuXG7QlNC+0LHQsNCy0Lgg0LrQsNGC0L4g0L3QvtCyINC60LvQuNC10L3Rgj8nKSl7CiAgICAgIHZhciBuYz1hd2FpdCBhZignY2xpZW50cycsJ1BPU1QnLHtuYW1lOnIubmFtZSxjb21wYW55OnIubmFtZSxlaWs6ci5laWssdmF0X251bWJlcjpyLnZhdF9udW1iZXIsYWRkcmVzczpyLmFkZHJlc3N9KTsKICAgICAgaWYobmMpeyBDTElFTlRTPWF3YWl0IGFmKCdjbGllbnRzJyl8fFtdOyBmaWxsQ2xpZW50U2VsZWN0KG5jLmlkKTsgfQogICAgfQogIH0gZWxzZSB7CiAgICB0b2FzdCgociYmci5tZXNzYWdlKXx8J9Cd0LUg0LUg0L3QsNC80LXRgNC10L3QviDigJQg0LLRitCy0LXQtNC4INC00LDQvdC90LjRgtC1INGA0YrRh9C90L4g0LIg0YDQsNC30LTQtdC7INCa0LvQuNC10L3RgtC4Jyk7CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBlbWFpbERvY3VtZW50KGlkKXsKICB2YXIgdG89cHJvbXB0KCfQmNC80LXQudC7INC90LAg0L/QvtC70YPRh9Cw0YLQtdC70Y86Jyk7CiAgaWYoIXRvKXJldHVybjsKICB2YXIgbGluaz13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9pbnZvaWNlc1wuaHRtbCQvLCcnKSsnaW52b2ljZS1kb2MuaHRtbD9pZD0nK2lkOwogIHZhciByPWF3YWl0IGFmKCdzZW5kX2RvY3VtZW50X2VtYWlsJywnUE9TVCcse2RvY3VtZW50X2lkOmlkLHRvOnRvLGxpbms6bGlua30pOwogIGlmKHIpIHRvYXN0KCfQmNC30L/RgNCw0YLQtdC90L4g0L3QsCAnK3RvKTsKICBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LAg4oCUINC/0YDQvtCy0LXRgNC4IFNNVFAg0L3QsNGB0YLRgNC+0LnQutC40YLQtScpOwp9CgovLyDilIDilIAgQ0xJRU5UUyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyQ2xpZW50cyhjKXsKICBDTElFTlRTPWF3YWl0IGFmKCdjbGllbnRzJyl8fFtdOwogIHZhciBodG1sPSc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QmtC70LjQtdC90YLQuCAoJytDTElFTlRTLmxlbmd0aCsnKTwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYWN0aW9ucyI+PGJ1dHRvbiBjbGFzcz0iYnRuIHMiIG9uY2xpY2s9InNob3dJbXBvcnQoKSI+4qyGINCY0LzQv9C+0YDRgiBDU1Y8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibmV3Q2xpZW50KCkiPisg0J3QvtCyINC60LvQuNC10L3RgjwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgaWQ9ImltcG9ydEJveCIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tYm90dG9tOjEycHgiPicrCiAgICAnPGxhYmVsPkNTViAo0LrQvtC70L7QvdC4OiBuYW1lLGNvbXBhbnksZW1haWwscGhvbmUsZWlrLHZhdF9udW1iZXIsYWRkcmVzcyxjaXR5LG1vbCk8L2xhYmVsPicrCiAgICAnPHRleHRhcmVhIGlkPSJjc3ZUZXh0IiByb3dzPSI1IiBwbGFjZWhvbGRlcj0ibmFtZSxjb21wYW55LGVtYWlsLHBob25lLGVpa1xu0JjQstCw0L0g0JjQstCw0L3QvtCyLNCi0LXRgdGCINCV0J7QntCULGl2YW5AdGVzdC5iZywwODguLiwxMjM0NTY3ODkiPjwvdGV4dGFyZWE+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gcCIgc3R5bGU9Im1hcmdpbi10b3A6OHB4IiBvbmNsaWNrPSJpbXBvcnRDc3YoKSI+0JjQvNC/0L7RgNGC0LjRgNCw0Lk8L2J1dHRvbj48L2Rpdj4nOwogIGh0bWwrPSc8dGFibGU+PHRoZWFkPjx0cj48dGg+0JjQvNC1L9Ck0LjRgNC80LA8L3RoPjx0aD7QldCY0Jo8L3RoPjx0aD7QmNC80LXQudC7PC90aD48dGg+0JPRgNCw0LQ8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICBDTElFTlRTLmZvckVhY2goY2w9PnsKICAgIGh0bWwrPSc8dHI+PHRkPicrKGNsLmNvbXBhbnl8fGNsLm5hbWUpKyc8L3RkPjx0ZD4nKyhjbC5laWt8fCfigJQnKSsnPC90ZD48dGQ+JysoY2wuZW1haWx8fCfigJQnKSsnPC90ZD48dGQ+JysoY2wuY2l0eXx8J+KAlCcpKyc8L3RkPicrCiAgICAgICc8dGQgY2xhc3M9ImFjdGlvbnMiPjxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJlZGl0Q2xpZW50KFwnJytjbC5pZCsnXCcpIj7inI48L3NwYW4+JysKICAgICAgJzxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJkZWxldGVDbGllbnQoXCcnK2NsLmlkKydcJykiPvCfl5E8L3NwYW4+PC90ZD48L3RyPic7CiAgfSk7CiAgaWYoIUNMSUVOVFMubGVuZ3RoKSBodG1sKz0nPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic21hbGwiPtCd0Y/QvNCwINC60LvQuNC10L3RgtC4PC90ZD48L3RyPic7CiAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogIGMuaW5uZXJIVE1MPWh0bWw7Cn0KZnVuY3Rpb24gc2hvd0ltcG9ydCgpeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1wb3J0Qm94Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOyB9CmFzeW5jIGZ1bmN0aW9uIGltcG9ydENzdigpewogIHZhciBjc3Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NzdlRleHQnKS52YWx1ZS50cmltKCk7CiAgaWYoIWNzdil7dG9hc3QoJ9Cf0L7RgdGC0LDQstC4IENTVicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHNfaW1wb3J0JywnUE9TVCcse2Nzdjpjc3Z9KTsKICBpZihyKXsgdG9hc3QoJ9CY0LzQv9C+0YDRgtC40YDQsNC90Lg6ICcrci5pbXBvcnRlZCk7IHJlbmRlckNsaWVudHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKSk7IH0KfQp2YXIgRURJVF9DTElFTlRfSUQ9bnVsbDsKZnVuY3Rpb24gbmV3Q2xpZW50KCl7IEVESVRfQ0xJRU5UX0lEPW51bGw7IFsnY19uYW1lJywnY19jb21wYW55JywnY19laWsnLCdjX3ZhdCcsJ2NfZW1haWwnLCdjX3Bob25lJywnY19hZGRyZXNzJywnY19jaXR5JywnY19tb2wnXS5mb3JFYWNoKGlkPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU9JycpOyBvcGVuTW9kYWwoJ2NsaWVudE1vZGFsJyk7IH0KYXN5bmMgZnVuY3Rpb24gZWRpdENsaWVudChpZCl7CiAgdmFyIGNsPUNMSUVOVFMuZmluZCh4PT54LmlkPT09aWQpOyBpZighY2wpcmV0dXJuOwogIEVESVRfQ0xJRU5UX0lEPWlkOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX25hbWUnKS52YWx1ZT1jbC5uYW1lfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19jb21wYW55JykudmFsdWU9Y2wuY29tcGFueXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfZWlrJykudmFsdWU9Y2wuZWlrfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY192YXQnKS52YWx1ZT1jbC52YXRfbnVtYmVyfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19lbWFpbCcpLnZhbHVlPWNsLmVtYWlsfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19waG9uZScpLnZhbHVlPWNsLnBob25lfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19hZGRyZXNzJykudmFsdWU9Y2wuYWRkcmVzc3x8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfY2l0eScpLnZhbHVlPWNsLmNpdHl8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX21vbCcpLnZhbHVlPWNsLm1vbHx8Jyc7CiAgb3Blbk1vZGFsKCdjbGllbnRNb2RhbCcpOwp9CmFzeW5jIGZ1bmN0aW9uIHNhdmVDbGllbnQoKXsKICB2YXIgcGF5bG9hZD17CiAgICBpZDpFRElUX0NMSUVOVF9JRHx8dW5kZWZpbmVkLAogICAgbmFtZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19uYW1lJykudmFsdWUsIGNvbXBhbnk6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfY29tcGFueScpLnZhbHVlLAogICAgZWlrOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX2VpaycpLnZhbHVlLCB2YXRfbnVtYmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX3ZhdCcpLnZhbHVlLAogICAgZW1haWw6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfZW1haWwnKS52YWx1ZSwgcGhvbmU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfcGhvbmUnKS52YWx1ZSwKICAgIGFkZHJlc3M6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfYWRkcmVzcycpLnZhbHVlLCBjaXR5OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX2NpdHknKS52YWx1ZSwKICAgIG1vbDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19tb2wnKS52YWx1ZQogIH07CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHMnLCdQT1NUJyxwYXlsb2FkKTsKICBpZihyKXsgdG9hc3QoJ9Ca0LvQuNC10L3RgtGK0YIg0LUg0LfQsNC/0LDQt9C10L0nKTsgY2xvc2VNb2RhbCgnY2xpZW50TW9kYWwnKTsgcmVuZGVyQ2xpZW50cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpKTsgfQp9CmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNsaWVudChpZCl7CiAgaWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQuNC10L3RgtCwPycpKXJldHVybjsKICBhd2FpdCBhZignY2xpZW50cycsJ0RFTEVURScsJycsICcmaWQ9JytpZCk7CiAgcmVuZGVyQ2xpZW50cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpKTsKfQoKLy8g4pSA4pSAIFJFQ1VSUklORyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyUmVjdXJyaW5nKGMpewogIHZhciByb3dzPWF3YWl0IGFmKCdyZWN1cnJpbmcnKXx8W107CiAgYXdhaXQgZW5zdXJlQ2xpZW50cygpOwogIHZhciBjcm9uVXJsPUFQSSsnP2FjdGlvbj1ydW5fcmVjdXJyaW5nJmtleT13ZWJ0cml4aWFfY3Jvbl8yMDI2JzsKICB2YXIgaHRtbD0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J/QtdGA0LjQvtC00LjRh9C90Lgg0YTQsNC60YLRg9GA0Lg8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibmV3UmVjdXJyaW5nKCkiPisg0J3QvtCy0L4g0L/RgNCw0LLQuNC70L48L2J1dHRvbj48L2Rpdj4nOwogIGh0bWwrPSc8cCBjbGFzcz0ic21hbGwiPtCX0LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQs9C10L3QtdGA0LjRgNCw0L3QtSDQtNC+0LHQsNCy0LggY1BhbmVsIENyb24gSm9iICjQvdCw0L/RgC4g0L3QsCAxLdCy0L4g0YfQuNGB0LvQviDQstGB0LXQutC4INC80LXRgdC10YYpLCDQutC+0LnRgtC+INC+0YLQstCw0YDRjzogPGNvZGU+Jytjcm9uVXJsKyc8L2NvZGU+PC9wPic7CiAgaHRtbCs9Jzx0YWJsZT48dGhlYWQ+PHRyPjx0aD7QmtC70LjQtdC90YI8L3RoPjx0aD7QotC40L88L3RoPjx0aD7QmNC90YLQtdGA0LLQsNC7PC90aD48dGg+0KHQu9C10LTQstCw0YnQviDQs9C10L3QtdGA0LjRgNCw0L3QtTwvdGg+PHRoPtCQ0LrRgtC40LLQvdC+PC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgcm93cy5mb3JFYWNoKHI9PnsKICAgIHZhciBjbD1DTElFTlRTLmZpbmQoeD0+eC5pZD09PXIuY2xpZW50X2lkKTsKICAgIGh0bWwrPSc8dHI+PHRkPicrKGNsPyhjbC5jb21wYW55fHxjbC5uYW1lKTon4oCUJykrJzwvdGQ+PHRkPicrKFRZUEVfTEFCRUxbci5kb2NfdHlwZV18fHIuZG9jX3R5cGUpKyc8L3RkPjx0ZD4nK3IuaW50ZXJ2YWxfdHlwZSsnPC90ZD48dGQ+JytyLm5leHRfcnVuX2RhdGUrJzwvdGQ+PHRkPicrKHIuYWN0aXZlPT0xPyfQlNCwJzon0J3QtScpKyc8L3RkPicrCiAgICAgICc8dGQgY2xhc3M9ImFjdGlvbnMiPjxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJkZWxldGVSZWN1cnJpbmcoXCcnK3IuaWQrJ1wnKSI+8J+XkTwvc3Bhbj48L3RkPjwvdHI+JzsKICB9KTsKICBpZighcm93cy5sZW5ndGgpIGh0bWwrPSc8dHI+PHRkIGNvbHNwYW49IjYiIGNsYXNzPSJzbWFsbCI+0J3Rj9C80LAg0L/RgNCw0LLQuNC70LA8L3RkPjwvdHI+JzsKICBodG1sKz0nPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgYy5pbm5lckhUTUw9aHRtbDsKfQphc3luYyBmdW5jdGlvbiBkZWxldGVSZWN1cnJpbmcoaWQpeyBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5INC/0YDQsNCy0LjQu9C+0YLQvj8nKSlyZXR1cm47IGF3YWl0IGFmKCdyZWN1cnJpbmcnLCdERUxFVEUnLCcnLCAnJmlkPScraWQpOyByZW5kZXJSZWN1cnJpbmcoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKSk7IH0KYXN5bmMgZnVuY3Rpb24gbmV3UmVjdXJyaW5nKCl7CiAgdmFyIGNsPXByb21wdCgnSUQg0L3QsCDQutC70LjQtdC90YIgKNCy0LjQtiDQsiDRgNCw0LfQtNC10Lsg0JrQu9C40LXQvdGC0LgpIOKAlCDQuNC70Lgg0L7RgdGC0LDQstC4INC/0YDQsNC30L3QvjonKTsKICB2YXIgaW50ZXJ2YWw9cHJvbXB0KCfQmNC90YLQtdGA0LLQsNC7OiBtb250aGx5IC8gcXVhcnRlcmx5IC8geWVhcmx5JywnbW9udGhseScpOwogIHZhciBuZXh0PXByb21wdCgn0JTQsNGC0LAg0L3QsCDRgdC70LXQtNCy0LDRidC+INCz0LXQvdC10YDQuNGA0LDQvdC1IChZWVlZLU1NLUREKTonLCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkpOwogIHZhciBpdGVtTmFtZT1wcm9tcHQoJ9Cd0LDQuNC80LXQvdC+0LLQsNC90LjQtSDQvdCwINGD0YHQu9GD0LPQsNGC0LA6Jywn0JDQsdC+0L3QsNC80LXQvdGC0L3QsCDQv9C+0LTQtNGA0YrQttC60LAnKTsKICB2YXIgcHJpY2U9cHJvbXB0KCfQptC10L3QsCAo0LHQtdC3INCU0JTQoSk6JywnMTAwJyk7CiAgdmFyIHI9YXdhaXQgYWYoJ3JlY3VycmluZycsJ1BPU1QnLHtjbGllbnRfaWQ6Y2wsZG9jX3R5cGU6J2ludm9pY2UnLGludGVydmFsX3R5cGU6aW50ZXJ2YWwsbmV4dF9ydW5fZGF0ZTpuZXh0LAogICAgaXRlbXM6W3tuYW1lOml0ZW1OYW1lLHF0eToxLHVuaXQ6J9Cx0YAuJyxwcmljZTpwYXJzZUZsb2F0KHByaWNlKXx8MH1dLHZhdF9wZXJjZW50OjIwLGFjdGl2ZToxfSk7CiAgaWYocil7IHRvYXN0KCfQn9GA0LDQstC40LvQvtGC0L4g0LUg0YHRitC30LTQsNC00LXQvdC+Jyk7IHJlbmRlclJlY3VycmluZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpKTsgfQp9CgovLyDilIDilIAgUkVQT1JUUyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyUmVwb3J0cyhjKXsKICB2YXIgc3RhdHM9YXdhaXQgYWYoJ2ludm9pY2Vfc3RhdHMnKTsKICBpZighc3RhdHMpe2MuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+0J3Rj9C80LAg0LTQsNC90L3QuDwvZGl2Pic7cmV0dXJuO30KICB2YXIgaHRtbD0nPGRpdiBjbGFzcz0iZ3JpZDIiPic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCf0L4g0YLQuNC/INC00L7QutGD0LzQtdC90YI8L2Rpdj48L2Rpdj48dGFibGU+PHRoZWFkPjx0cj48dGg+0KLQuNC/PC90aD48dGg+0JHRgNC+0Lk8L3RoPjx0aD7QodGD0LzQsDwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nOwogIChzdGF0cy5ieV90eXBlfHxbXSkuZm9yRWFjaCh0PT5odG1sKz0nPHRyPjx0ZD4nKyhUWVBFX0xBQkVMW3QudHlwZV18fHQudHlwZSkrJzwvdGQ+PHRkPicrdC5jbnQrJzwvdGQ+PHRkPicrbW9uZXkodC50b3RhbCkrJzwvdGQ+PC90cj4nKTsKICBodG1sKz0nPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCi0L7QvyDQutC70LjQtdC90YLQuDwvZGl2PjwvZGl2Pjx0YWJsZT48dGhlYWQ+PHRyPjx0aD7QmtC70LjQtdC90YI8L3RoPjx0aD7QpNCw0LrRgtGD0YDQuDwvdGg+PHRoPtCh0YPQvNCwPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgKHN0YXRzLmJ5X2NsaWVudHx8W10pLmZvckVhY2goY2M9Pmh0bWwrPSc8dHI+PHRkPicrY2MubmFtZSsnPC90ZD48dGQ+JytjYy5jbnQrJzwvdGQ+PHRkPicrbW9uZXkoY2MudG90YWwpKyc8L3RkPjwvdHI+Jyk7CiAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogIGh0bWwrPSc8L2Rpdj4nOwogIGMuaW5uZXJIVE1MPWh0bWw7Cn0KCi8vIOKUgOKUgCBTRVRUSU5HUyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyU2V0dGluZ3MoYyl7CiAgdmFyIHM9YXdhaXQgYWYoJ2NvbXBhbnlfc2V0dGluZ3MnKXx8e307CiAgdmFyIGh0bWw9JzxkaXYgY2xhc3M9ImdyaWQyIj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Qn9GA0L7RhNC40Lsg0L3QsCDRhNC40YDQvNCw0YLQsDwvZGl2PjwvZGl2PicrCiAgICBmbGQoJ3NfbmFtZScsJ9CY0LzQtSDQvdCwINGE0LjRgNC80LDRgtCwJyxzLm5hbWUpKwogICAgcm93MihmbGQoJ3NfZWlrJywn0JXQmNCaL9CR0YPQu9GB0YLQsNGCJyxzLmVpayksZmxkKCdzX3ZhdCcsJ9CU0JTQoSDihJYnLHMudmF0X251bWJlcikpKwogICAgZmxkKCdzX2FkZHJlc3MnLCfQkNC00YDQtdGBJyxzLmFkZHJlc3MpKwogICAgcm93MihmbGQoJ3NfY2l0eScsJ9CT0YDQsNC0JyxzLmNpdHkpLGZsZCgnc19tb2wnLCfQnNCe0JsnLHMubW9sKSkrCiAgICByb3cyKGZsZCgnc19pYmFuJywnSUJBTicscy5pYmFuKSxmbGQoJ3NfYmljJywnQklDL1NXSUZUJyxzLmJpYykpKwogICAgZmxkKCdzX2JhbmsnLCfQkdCw0L3QutCwJyxzLmJhbmtfbmFtZSkrCiAgICByb3cyKGZsZCgnc19kZWZ2YXQnLCfQlNCU0KEgJSDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtScscy5kZWZhdWx0X3ZhdF9wZXJjZW50fHwyMCwnbnVtYmVyJyksc2VsQ3VyKCdzX2N1cnJlbmN5JyxzLmN1cnJlbmN5KSkrCiAgICAnPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J3QvtC80LXRgNCw0YbQuNGPICjQv9GA0LXQtNGB0YLQsNCy0LrQsCDQutGK0Lwg4oSWINC30LAg0LLRgdC10LrQuCDRgtC40L8pPC9kaXY+PC9kaXY+JysKICAgIHJvdzIoZmxkKCdzX3ByZWZfcHJvZm9ybWEnLCfQn9GA0L7RhNC+0YDQvNCwJyxzLnByZWZpeF9wcm9mb3JtYSksZmxkKCdzX3ByZWZfaW52b2ljZScsJ9Ck0LDQutGC0YPRgNCwJyxzLnByZWZpeF9pbnZvaWNlKSkrCiAgICByb3cyKGZsZCgnc19wcmVmX2NyZWRpdCcsJ9Ca0YDQtdC00LjRgtC90L4g0LjQt9CyLicscy5wcmVmaXhfY3JlZGl0X25vdGUpLGZsZCgnc19wcmVmX2RlYml0Jywn0JTQtdCx0LjRgtC90L4g0LjQt9CyLicscy5wcmVmaXhfZGViaXRfbm90ZSkpKwogICAgZmxkKCdzX3ByZWZfb2ZmZXInLCfQntGE0LXRgNGC0LAnLHMucHJlZml4X29mZmVyKSsKICAgICc8cCBjbGFzcz0ic21hbGwiIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+0J3QvtC80LXRgNGK0YIg0LUgMTAt0YbQuNGE0YDQtdC9LCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC90LDRgNCw0YHRgtCy0LDRiSDQv9C+0L7RgtC00LXQu9C90L4g0LfQsCDQstGB0LXQutC4INGC0LjQvyDQuCDQs9C+0LTQuNC90LAgKNC90LDQv9GALiAwMDAwMDAwMTE0KSwg0LrQsNC60YLQviDQsiDQv9GA0LjQvNC10YDQvdCw0YLQsCDRgtC4INC/0YDQvtGE0L7RgNC80LAuPC9wPicrCiAgICAnPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JjQvNC10LnQuyDRgdGK0YDQstGK0YAgKFNNVFAg4oCUINC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LTQvtC60YPQvNC10L3RgtC4KTwvZGl2PjwvZGl2PicrCiAgICByb3cyKGZsZCgnc19zbXRwX2hvc3QnLCdTTVRQINGF0L7RgdGCJyxzLnNtdHBfaG9zdCksZmxkKCdzX3NtdHBfcG9ydCcsJ9Cf0L7RgNGCJyxzLnNtdHBfcG9ydHx8NTg3LCdudW1iZXInKSkrCiAgICByb3cyKGZsZCgnc19zbXRwX3VzZXInLCfQn9C+0YLRgNC10LHQuNGC0LXQuycscy5zbXRwX3VzZXIpLGZsZCgnc19zbXRwX3Bhc3MnLCfQn9Cw0YDQvtC70LAnLHMuc210cF9wYXNzLCdwYXNzd29yZCcpKSsKICAgIHJvdzIoc2VsU2VjdXJlKCdzX3NtdHBfc2VjdXJlJyxzLnNtdHBfc2VjdXJlKSxmbGQoJ3Nfc210cF9mcm9tX2VtYWlsJywnRnJvbSDQuNC80LXQudC7JyxzLnNtdHBfZnJvbV9lbWFpbCkpKwogICAgZmxkKCdzX3NtdHBfZnJvbV9uYW1lJywnRnJvbSDQuNC80LUnLHMuc210cF9mcm9tX25hbWUpKwogICAgJzwvZGl2Pic7CiAgaHRtbCs9JzwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlU2V0dGluZ3MoKSI+8J+SviDQl9Cw0L/QsNC30Lgg0L3QsNGB0YLRgNC+0LnQutC40YLQtTwvYnV0dG9uPic7CiAgYy5pbm5lckhUTUw9aHRtbDsKfQpmdW5jdGlvbiBmbGQoaWQsbGFiZWwsdmFsLHR5cGUpeyByZXR1cm4gJzxsYWJlbD4nK2xhYmVsKyc8L2xhYmVsPjxpbnB1dCBpZD0iJytpZCsnIiB0eXBlPSInKyh0eXBlfHwndGV4dCcpKyciIHZhbHVlPSInKyh2YWw9PW51bGw/Jyc6U3RyaW5nKHZhbCkucmVwbGFjZSgvIi9nLCcmcXVvdDsnKSkrJyI+JzsgfQpmdW5jdGlvbiByb3cyKGEsYil7IHJldHVybiAnPGRpdiBjbGFzcz0icm93MiI+PGRpdj4nK2ErJzwvZGl2PjxkaXY+JytiKyc8L2Rpdj48L2Rpdj4nOyB9CmZ1bmN0aW9uIHNlbEN1cihpZCx2YWwpeyByZXR1cm4gJzxsYWJlbD7QktCw0LvRg9GC0LA8L2xhYmVsPjxzZWxlY3QgaWQ9IicraWQrJyI+PG9wdGlvbicrKHZhbD09PSdFVVInPycgc2VsZWN0ZWQnOicnKSsnPkVVUjwvb3B0aW9uPjxvcHRpb24nKyh2YWw9PT0nQkdOJz8nIHNlbGVjdGVkJzonJykrJz5CR048L29wdGlvbj48L3NlbGVjdD4nOyB9CmZ1bmN0aW9uIHNlbFNlY3VyZShpZCx2YWwpeyByZXR1cm4gJzxsYWJlbD7QmtGA0LjQv9GC0LjRgNCw0L3QtTwvbGFiZWw+PHNlbGVjdCBpZD0iJytpZCsnIj48b3B0aW9uIHZhbHVlPSJ0bHMiJysodmFsPT09J3Rscyc/JyBzZWxlY3RlZCc6JycpKyc+VExTICg1ODcpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic3NsIicrKHZhbD09PSdzc2wnPycgc2VsZWN0ZWQnOicnKSsnPlNTTCAoNDY1KTwvb3B0aW9uPjwvc2VsZWN0Pic7IH0KCmFzeW5jIGZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpewogIHZhciBwYXlsb2FkPXsKICAgIG5hbWU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfbmFtZScpLnZhbHVlLCBlaWs6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfZWlrJykudmFsdWUsCiAgICB2YXRfbnVtYmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3ZhdCcpLnZhbHVlLCBhZGRyZXNzOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2FkZHJlc3MnKS52YWx1ZSwKICAgIGNpdHk6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfY2l0eScpLnZhbHVlLCBtb2w6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfbW9sJykudmFsdWUsCiAgICBpYmFuOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2liYW4nKS52YWx1ZSwgYmljOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2JpYycpLnZhbHVlLAogICAgYmFua19uYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2JhbmsnKS52YWx1ZSwgZGVmYXVsdF92YXRfcGVyY2VudDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19kZWZ2YXQnKS52YWx1ZSwKICAgIGN1cnJlbmN5OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2N1cnJlbmN5JykudmFsdWUsCiAgICBwcmVmaXhfcHJvZm9ybWE6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfcHJlZl9wcm9mb3JtYScpLnZhbHVlLCBwcmVmaXhfaW52b2ljZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19wcmVmX2ludm9pY2UnKS52YWx1ZSwKICAgIHByZWZpeF9jcmVkaXRfbm90ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19wcmVmX2NyZWRpdCcpLnZhbHVlLCBwcmVmaXhfZGViaXRfbm90ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19wcmVmX2RlYml0JykudmFsdWUsCiAgICBwcmVmaXhfb2ZmZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfcHJlZl9vZmZlcicpLnZhbHVlLCBwcmVmaXhfcXVvdGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfcHJlZl9vZmZlcicpLnZhbHVlLAogICAgc210cF9ob3N0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3NtdHBfaG9zdCcpLnZhbHVlLCBzbXRwX3BvcnQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nfc210cF9wb3J0JykudmFsdWUsCiAgICBzbXRwX3VzZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nfc210cF91c2VyJykudmFsdWUsIHNtdHBfcGFzczpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19zbXRwX3Bhc3MnKS52YWx1ZSwKICAgIHNtdHBfc2VjdXJlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3NtdHBfc2VjdXJlJykudmFsdWUsIHNtdHBfZnJvbV9lbWFpbDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19zbXRwX2Zyb21fZW1haWwnKS52YWx1ZSwKICAgIHNtdHBfZnJvbV9uYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3NtdHBfZnJvbV9uYW1lJykudmFsdWUKICB9OwogIHZhciByPWF3YWl0IGFmKCdjb21wYW55X3NldHRpbmdzJywnUE9TVCcscGF5bG9hZCk7CiAgaWYocikgdG9hc3QoJ9Cd0LDRgdGC0YDQvtC50LrQuNGC0LUg0YHQsCDQt9Cw0L/QsNC30LXQvdC4Jyk7IGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgScpOwp9Cgphc3luYyBmdW5jdGlvbiBtb2R1bGVHdWFyZChrZXksbGFiZWwpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGFmKCdicmFuZGluZ19zZXR0aW5ncycpOwogICAgaWYociAmJiAoci5saWNlbnNlX3N0YXRlPT09J2xvY2tlZCd8fHIubGljZW5zZV9zdGF0ZT09PSdpbnZhbGlkJykpewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrKHIubGljZW5zZV9tZXNzYWdlfHwn0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INCw0LrRgtC40LLQtdC9LicpKyc8L3A+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYociAmJiByLm1vZHVsZXNfZW5hYmxlZCAmJiByLm1vZHVsZXNfZW5hYmxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFyLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyPicrbGFiZWwrJyDQtSDQuNC30LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPtCi0L7Qt9C4INC80L7QtNGD0Lsg0LUg0LjQt9C60LvRjtGH0LXQvSDQt9CwINGC0LDQt9C4INC40L3RgdGC0LDQu9Cw0YbQuNGPLiDQodCy0YrRgNC20Lgg0YHQtSDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLjwvcD4nKwogICAgICAgICc8YSBocmVmPSJpbmRleC5odG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxNnB4O2NvbG9yOiM2YzYzZmYiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2Pic7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Y2F0Y2goZSl7fQogIHJldHVybiB0cnVlOwp9CgpyZW5kZXJUYWJzKCk7Cm1vZHVsZUd1YXJkKCdpbnZvaWNpbmcnLCfQpNCw0LrRgtGD0YDQuNGA0LDQvdC10YLQvicpLnRoZW4ob2s9PnsgaWYob2spIHJlbmRlckNvbnRlbnQoKTsgfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'licenses/admin/api.php' => 'PD9waHAKLyoqCiAqIEFETUlOIEFQSSDigJQgYmFja2VuZCBmb3IgdGhlIHBhcnRuZXIvbGljZW5zZSBtYW5hZ2VtZW50IFVJLgogKiBBbGwgYWN0aW9ucyByZXF1aXJlIHRoZSBhZG1pbiBzZXNzaW9uIChzZWUgYXV0aC5waHApLgogKi8KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL2xpYi9jb3JlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9hdXRoLnBocCc7CgpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwoKdHJ5IHsgJHBkbyA9IHd0X2RiKCk7IH0KY2F0Y2ggKFRocm93YWJsZSAkZSkgeyB3dF9lcnIoJ9CR0LDQt9Cw0YLQsCDQvdC1INC1INC60L7QvdGE0LjQs9GD0YDQuNGA0LDQvdCwLiDQodGC0LDRgNGC0LjRgNCw0LkgaW5zdGFsbC5waHAnLCA1MDApOyB9Cgp3dF9yZXF1aXJlX2FkbWluKCk7ICAvLyA0MDEgaWYgbm90IGxvZ2dlZCBpbgoKJGFjdGlvbiA9ICRfR0VUWydhY3Rpb24nXSA/PyAnJzsKJG1ldGhvZCA9ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddOwoKc3dpdGNoICgkYWN0aW9uKSB7CgovLyDilIDilIAgREFTSEJPQVJEIFNUQVRTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApjYXNlICdzdGF0cyc6IHsKICAgICR0b2RheSA9IGRhdGUoJ1ktbS1kJyk7CiAgICAkbGljZW5zZXMgPSAkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBsaWNlbnNlcyIpLT5mZXRjaEFsbCgpOwogICAgJG1yciA9IDA7ICRhY3RpdmUgPSAwOyAkZ3JhY2UgPSAwOyAkbG9ja2VkID0gMDsKICAgIGZvcmVhY2ggKCRsaWNlbnNlcyBhcyAkbCkgewogICAgICAgICRzdCA9IHd0X2xpY2Vuc2Vfc3RhdGUoJGwsICR0b2RheSk7CiAgICAgICAgaWYgKCRzdFsnc3RhdGUnXSA9PT0gJ2FjdGl2ZScpIHsgJGFjdGl2ZSsrOyB9CiAgICAgICAgZWxzZWlmICgkc3RbJ3N0YXRlJ10gPT09ICdncmFjZScpIHsgJGdyYWNlKys7IH0KICAgICAgICBlbHNlIHsgJGxvY2tlZCsrOyB9CiAgICAgICAgaWYgKCRzdFsnc3RhdGUnXSAhPT0gJ2xvY2tlZCcpIHsKICAgICAgICAgICAgJG1yciArPSAoZmxvYXQpJGxbJ2Jhc2VfcHJpY2UnXTsKICAgICAgICAgICAgJG1vZHMgPSBqc29uX2RlY29kZSgkbFsnbW9kdWxlcyddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkY2F0YWxvZyA9IHd0X21vZHVsZXMoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJG1vZHMgYXMgJG0gPT4gJG9uKSB7CiAgICAgICAgICAgICAgICBpZiAoJG9uICYmIGlzc2V0KCRjYXRhbG9nWyRtXSkpICRtcnIgKz0gKGZsb2F0KSRjYXRhbG9nWyRtXVsncHJpY2UnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICRwYXJ0bmVycyA9IChpbnQpJHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHBhcnRuZXJzIiktPmZldGNoQ29sdW1uKCk7CiAgICAkb3ZlcmR1ZSA9IChpbnQpJHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGludm9pY2VzIFdIRVJFIHBhaWQ9MCBBTkQgZHVlX2RhdGUgPCBDVVJEQVRFKCkiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgIHd0X29rKFsncGFydG5lcnMnID0+ICRwYXJ0bmVycywgJ2FjdGl2ZScgPT4gJGFjdGl2ZSwgJ2dyYWNlJyA9PiAkZ3JhY2UsCiAgICAgICAgICAgJ2xvY2tlZCcgPT4gJGxvY2tlZCwgJ21ycicgPT4gcm91bmQoJG1yciwgMiksICdvdmVyZHVlJyA9PiAkb3ZlcmR1ZV0pOwp9CgovLyDilIDilIAgTElTVCBQQVJUTkVSUyArIFRIRUlSIExJQ0VOU0UgKyBTVEFURSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY2FzZSAncGFydG5lcnMnOiB7CiAgICBpZiAoJG1ldGhvZCA9PT0gJ0dFVCcpIHsKICAgICAgICAkcm93cyA9ICRwZG8tPnF1ZXJ5KCIKICAgICAgICAgICAgU0VMRUNUIHAuKiwgbC5pZCBBUyBsaWNlbnNlX2lkLCBsLmxpY2Vuc2Vfa2V5LCBsLnN0YXR1cywgbC5wbGFuX25hbWUsCiAgICAgICAgICAgICAgICAgICBsLmJhc2VfcHJpY2UsIGwuY3VycmVuY3ksIGwuYmlsbGluZ19jeWNsZSwgbC52YWxpZF91bnRpbCwgbC5ncmFjZV9kYXlzLAogICAgICAgICAgICAgICAgICAgbC5tb2R1bGVzLCBsLmh1Yl91cmwsIGwubGFzdF9jaGVja19hdAogICAgICAgICAgICBGUk9NIHBhcnRuZXJzIHAKICAgICAgICAgICAgTEVGVCBKT0lOIGxpY2Vuc2VzIGwgT04gbC5wYXJ0bmVyX2lkID0gcC5pZAogICAgICAgICAgICBPUkRFUiBCWSBwLmNyZWF0ZWRfYXQgREVTQwogICAgICAgICIpLT5mZXRjaEFsbCgpOwogICAgICAgICR0b2RheSA9IGRhdGUoJ1ktbS1kJyk7CiAgICAgICAgZm9yZWFjaCAoJHJvd3MgYXMgJiRyKSB7CiAgICAgICAgICAgICRyWydtb2R1bGVzJ10gPSBqc29uX2RlY29kZSgkclsnbW9kdWxlcyddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICBpZiAoJHJbJ2xpY2Vuc2VfaWQnXSkgewogICAgICAgICAgICAgICAgJHJbJ2NvbXB1dGVkJ10gPSB3dF9saWNlbnNlX3N0YXRlKCRyLCAkdG9kYXkpOwogICAgICAgICAgICAgICAgJGludiA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBjLCBDT0FMRVNDRShTVU0ocGFpZD0wKSwwKSB1bnBhaWQgRlJPTSBpbnZvaWNlcyBXSEVSRSBsaWNlbnNlX2lkPT8iKTsKICAgICAgICAgICAgICAgICRpbnYtPmV4ZWN1dGUoWyRyWydsaWNlbnNlX2lkJ11dKTsKICAgICAgICAgICAgICAgICRyWydpbnZvaWNlX3N1bW1hcnknXSA9ICRpbnYtPmZldGNoKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd3Rfb2soJHJvd3MpOwogICAgfQogICAgd3RfZXJyKCdiYWQgbWV0aG9kJyk7Cn0KCi8vIOKUgOKUgCBDUkVBVEUgUEFSVE5FUiArIElTU1VFIExJQ0VOU0UgKG9uZSBzdGVwKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY2FzZSAnaXNzdWUnOiB7CiAgICAkYiA9IHd0X2JvZHkoKTsKICAgIGlmIChlbXB0eSgkYlsnbmFtZSddKSkgd3RfZXJyKCfQm9C40L/RgdCy0LAg0LjQvNC1INC90LAg0LrQu9C40LXQvdGC0LAnKTsKCiAgICAkcGRvLT5iZWdpblRyYW5zYWN0aW9uKCk7CiAgICB0cnkgewogICAgICAgICRzdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHBhcnRuZXJzIChuYW1lLGVtYWlsLHBob25lLGNvbXBhbnksZWlrLG5vdGVzKSBWQUxVRVMgKD8sPyw/LD8sPyw/KSIpOwogICAgICAgICRzdC0+ZXhlY3V0ZShbJGJbJ25hbWUnXSwgJGJbJ2VtYWlsJ10gPz8gJycsICRiWydwaG9uZSddID8/ICcnLCAkYlsnY29tcGFueSddID8/ICcnLCAkYlsnZWlrJ10gPz8gJycsICRiWydub3RlcyddID8/ICcnXSk7CiAgICAgICAgJHBhcnRuZXJJZCA9IChpbnQpJHBkby0+bGFzdEluc2VydElkKCk7CgogICAgICAgIC8vIHVuaXF1ZSBrZXkKICAgICAgICBkbyB7ICRrZXkgPSB3dF9nZW5fa2V5KCk7CiAgICAgICAgICAgICAkYyA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCAxIEZST00gbGljZW5zZXMgV0hFUkUgbGljZW5zZV9rZXk9PyIpOyAkYy0+ZXhlY3V0ZShbJGtleV0pOwogICAgICAgIH0gd2hpbGUgKCRjLT5mZXRjaCgpKTsKCiAgICAgICAgJGN5Y2xlICAgICA9ICgkYlsnYmlsbGluZ19jeWNsZSddID8/ICdtb250aGx5JykgPT09ICd5ZWFybHknID8gJ3llYXJseScgOiAnbW9udGhseSc7CiAgICAgICAgJHByaWNlICAgICA9IChmbG9hdCkoJGJbJ2Jhc2VfcHJpY2UnXSA/PyAwKTsKICAgICAgICAkZ3JhY2UgICAgID0gKGludCkoJGJbJ2dyYWNlX2RheXMnXSA/PyA3KTsKICAgICAgICAkbW9kdWxlcyAgID0gJGJbJ21vZHVsZXMnXSA/PyBbXTsKICAgICAgICAkdmFsaWRGcm9tID0gJGJbJ3N0YXJ0X2RhdGUnXSA/PyBkYXRlKCdZLW0tZCcpOwogICAgICAgICR2YWxpZFVudGlsPSB3dF9hZGRfbW9udGhzKCR2YWxpZEZyb20sIDEsICRjeWNsZSk7CgogICAgICAgICRzdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGxpY2Vuc2VzCiAgICAgICAgICAgIChwYXJ0bmVyX2lkLCBsaWNlbnNlX2tleSwgc3RhdHVzLCBwbGFuX25hbWUsIGJhc2VfcHJpY2UsIGN1cnJlbmN5LCBiaWxsaW5nX2N5Y2xlLCB2YWxpZF91bnRpbCwgZ3JhY2VfZGF5cywgbW9kdWxlcykKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/KSIpOwogICAgICAgICRzdC0+ZXhlY3V0ZShbJHBhcnRuZXJJZCwgJGtleSwgJ2FjdGl2ZScsICRiWydwbGFuX25hbWUnXSA/PyAnU3RhbmRhcmQnLCAkcHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAkYlsnY3VycmVuY3knXSA/PyAnRVVSJywgJGN5Y2xlLCAkdmFsaWRVbnRpbCwgJGdyYWNlLCBqc29uX2VuY29kZSgkbW9kdWxlcywgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSldKTsKICAgICAgICAkbGljSWQgPSAoaW50KSRwZG8tPmxhc3RJbnNlcnRJZCgpOwoKICAgICAgICAvLyBmaXJzdCBpbnZvaWNlCiAgICAgICAgd3RfY3JlYXRlX2ludm9pY2UoJHBkbywgJGxpY0lkLCAkcHJpY2UsICRiWydjdXJyZW5jeSddID8/ICdFVVInLCAkdmFsaWRGcm9tLCAkdmFsaWRVbnRpbCk7CiAgICAgICAgd3RfbG9nKCRwZG8sICRsaWNJZCwgJ2lzc3VlZCcsICfQm9C40YbQtdC90Lcg0LjQt9C00LDQtNC10L0nKTsKCiAgICAgICAgJHBkby0+Y29tbWl0KCk7CiAgICAgICAgd3Rfb2soWydwYXJ0bmVyX2lkJyA9PiAkcGFydG5lcklkLCAnbGljZW5zZV9pZCcgPT4gJGxpY0lkLCAnbGljZW5zZV9rZXknID0+ICRrZXksICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWxdKTsKICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICRwZG8tPnJvbGxCYWNrKCk7CiAgICAgICAgd3RfZXJyKCfQk9GA0LXRiNC60LAg0L/RgNC4INC40LfQtNCw0LLQsNC90LU6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpLCA1MDApOwogICAgfQp9CgovLyDilIDilIAgVVBEQVRFIExJQ0VOU0UgKHByaWNlLCBwbGFuLCBncmFjZSwgbW9kdWxlcywgY3ljbGUpIOKUgOKUgOKUgOKUgOKUgOKUgApjYXNlICd1cGRhdGVfbGljZW5zZSc6IHsKICAgICRiID0gd3RfYm9keSgpOwogICAgJGlkID0gKGludCkoJGJbJ2xpY2Vuc2VfaWQnXSA/PyAwKTsKICAgIGlmICghJGlkKSB3dF9lcnIoJ2xpY2Vuc2VfaWQnKTsKICAgICRmaWVsZHMgPSBbJ3BsYW5fbmFtZScsJ2Jhc2VfcHJpY2UnLCdjdXJyZW5jeScsJ2JpbGxpbmdfY3ljbGUnLCdncmFjZV9kYXlzJywnbm90ZXMnXTsKICAgICRzZXQgPSBbXTsgJHZhbHMgPSBbXTsKICAgIGZvcmVhY2ggKCRmaWVsZHMgYXMgJGYpIGlmIChhcnJheV9rZXlfZXhpc3RzKCRmLCAkYikpIHsgJHNldFtdID0gIiRmPT8iOyAkdmFsc1tdID0gJGJbJGZdOyB9CiAgICBpZiAoaXNzZXQoJGJbJ21vZHVsZXMnXSkpIHsgJHNldFtdID0gIm1vZHVsZXM9PyI7ICR2YWxzW10gPSBqc29uX2VuY29kZSgkYlsnbW9kdWxlcyddLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsgfQogICAgaWYgKCRzZXQpIHsgJHZhbHNbXSA9ICRpZDsgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGxpY2Vuc2VzIFNFVCAiLmltcGxvZGUoJywnLCAkc2V0KS4iIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZSgkdmFscyk7IH0KICAgIHd0X2xvZygkcGRvLCAkaWQsICd1cGRhdGVkJywgJ9Cf0YDQvtC80Y/QvdCwINC90LAg0LvQuNGG0LXQvdC3Jyk7CiAgICB3dF9vayh0cnVlKTsKfQoKLy8g4pSA4pSAIFNVU1BFTkQgLyBBQ1RJVkFURSAvIENBTkNFTCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY2FzZSAnc2V0X3N0YXR1cyc6IHsKICAgICRiID0gd3RfYm9keSgpOwogICAgJGlkID0gKGludCkoJGJbJ2xpY2Vuc2VfaWQnXSA/PyAwKTsKICAgICRzdGF0dXMgPSAkYlsnc3RhdHVzJ10gPz8gJyc7CiAgICBpZiAoISRpZCB8fCAhaW5fYXJyYXkoJHN0YXR1cywgWydhY3RpdmUnLCdzdXNwZW5kZWQnLCdjYW5jZWxsZWQnXSwgdHJ1ZSkpIHd0X2VycignYmFkIHBhcmFtcycpOwogICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGxpY2Vuc2VzIFNFVCBzdGF0dXM9PyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRzdGF0dXMsICRpZF0pOwogICAgd3RfbG9nKCRwZG8sICRpZCwgJ3N0YXR1cycsICfQodGC0LDRgtGD0YEg4oaSICcgLiAkc3RhdHVzKTsKICAgIHd0X29rKHRydWUpOwp9CgovLyDilIDilIAgRVhURU5EIChhZHZhbmNlIHZhbGlkX3VudGlsIGJ5IG9uZSBjeWNsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNhc2UgJ2V4dGVuZCc6IHsKICAgICRiID0gd3RfYm9keSgpOwogICAgJGlkID0gKGludCkoJGJbJ2xpY2Vuc2VfaWQnXSA/PyAwKTsKICAgIGlmICghJGlkKSB3dF9lcnIoJ2xpY2Vuc2VfaWQnKTsKICAgICRsID0gd3RfZ2V0X2xpY2Vuc2UoJHBkbywgJGlkKTsKICAgICRiYXNlID0gbWF4KCRsWyd2YWxpZF91bnRpbCddLCBkYXRlKCdZLW0tZCcpKTsKICAgICRuZXh0ID0gd3RfYWRkX21vbnRocygkYmFzZSwgMSwgJGxbJ2JpbGxpbmdfY3ljbGUnXSk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgbGljZW5zZXMgU0VUIHZhbGlkX3VudGlsPT8sIHN0YXR1cz0nYWN0aXZlJyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRuZXh0LCAkaWRdKTsKICAgIHd0X2xvZygkcGRvLCAkaWQsICdleHRlbmQnLCAn0KPQtNGK0LvQttC10L0g0LTQviAnIC4gJG5leHQpOwogICAgd3Rfb2soWyd2YWxpZF91bnRpbCcgPT4gJG5leHRdKTsKfQoKLy8g4pSA4pSAIEdJVkUgRVhUUkEgR1JBQ0UgREFZUyAoYnVtcHMgdmFsaWRfdW50aWwgZm9yd2FyZCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNhc2UgJ2FkZF9ncmFjZSc6IHsKICAgICRiID0gd3RfYm9keSgpOwogICAgJGlkID0gKGludCkoJGJbJ2xpY2Vuc2VfaWQnXSA/PyAwKTsKICAgICRkYXlzID0gKGludCkoJGJbJ2RheXMnXSA/PyAwKTsKICAgIGlmICghJGlkIHx8ICRkYXlzIDw9IDApIHd0X2VycignYmFkIHBhcmFtcycpOwogICAgJGwgPSB3dF9nZXRfbGljZW5zZSgkcGRvLCAkaWQpOwogICAgJGJhc2UgPSBtYXgoJGxbJ3ZhbGlkX3VudGlsJ10sIGRhdGUoJ1ktbS1kJykpOwogICAgJG5leHQgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkYmFzZSAuICcgKycgLiAkZGF5cyAuICcgZGF5cycpKTsKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSBsaWNlbnNlcyBTRVQgdmFsaWRfdW50aWw9Pywgc3RhdHVzPSdhY3RpdmUnIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJG5leHQsICRpZF0pOwogICAgd3RfbG9nKCRwZG8sICRpZCwgJ2dyYWNlJywgIiskZGF5cyDQtNC90Lgg0LPRgNCw0YLQuNGBIOKGkiAkbmV4dCIpOwogICAgd3Rfb2soWyd2YWxpZF91bnRpbCcgPT4gJG5leHRdKTsKfQoKLy8g4pSA4pSAIElOVk9JQ0VTIGZvciBhIGxpY2Vuc2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNhc2UgJ2ludm9pY2VzJzogewogICAgJGlkID0gKGludCkoJF9HRVRbJ2xpY2Vuc2VfaWQnXSA/PyAwKTsKICAgICRyb3dzID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBpbnZvaWNlcyBXSEVSRSBsaWNlbnNlX2lkPT8gT1JERVIgQlkgaXNzdWVfZGF0ZSBERVNDIik7CiAgICAkcm93cy0+ZXhlY3V0ZShbJGlkXSk7CiAgICB3dF9vaygkcm93cy0+ZmV0Y2hBbGwoKSk7Cn0KCi8vIOKUgOKUgCBNQVJLIElOVk9JQ0UgUEFJRCDihpIgZXh0ZW5kIGxpY2Vuc2Ugb25lIGN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApjYXNlICdpbnZvaWNlX3BhaWQnOiB7CiAgICAkYiA9IHd0X2JvZHkoKTsKICAgICRpbnZJZCA9IChpbnQpKCRiWydpbnZvaWNlX2lkJ10gPz8gMCk7CiAgICBpZiAoISRpbnZJZCkgd3RfZXJyKCdpbnZvaWNlX2lkJyk7CiAgICAkaW52ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBpbnZvaWNlcyBXSEVSRSBpZD0/Iik7ICRpbnYtPmV4ZWN1dGUoWyRpbnZJZF0pOwogICAgJGludm9pY2UgPSAkaW52LT5mZXRjaCgpOwogICAgaWYgKCEkaW52b2ljZSkgd3RfZXJyKCdub3QgZm91bmQnLCA0MDQpOwoKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSBpbnZvaWNlcyBTRVQgcGFpZD0xLCBwYWlkX2F0PUNVUkRBVEUoKSBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRpbnZJZF0pOwoKICAgIC8vIGV4dGVuZCBsaWNlbnNlICYgYXV0by1nZW5lcmF0ZSBuZXh0IGludm9pY2UKICAgICRsID0gd3RfZ2V0X2xpY2Vuc2UoJHBkbywgKGludCkkaW52b2ljZVsnbGljZW5zZV9pZCddKTsKICAgICRiYXNlID0gbWF4KCRsWyd2YWxpZF91bnRpbCddLCBkYXRlKCdZLW0tZCcpKTsKICAgICRuZXh0ID0gd3RfYWRkX21vbnRocygkYmFzZSwgMSwgJGxbJ2JpbGxpbmdfY3ljbGUnXSk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgbGljZW5zZXMgU0VUIHZhbGlkX3VudGlsPT8sIHN0YXR1cz0nYWN0aXZlJyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRuZXh0LCAkbFsnaWQnXV0pOwogICAgd3RfY3JlYXRlX2ludm9pY2UoJHBkbywgJGxbJ2lkJ10sIChmbG9hdCkkbFsnYmFzZV9wcmljZSddLCAkbFsnY3VycmVuY3knXSwgJGJhc2UsICRuZXh0KTsKICAgIHd0X2xvZygkcGRvLCAkbFsnaWQnXSwgJ3BhaWQnLCAn0KTQsNC60YLRg9GA0LAg0L/Qu9Cw0YLQtdC90LAsINGD0LTRitC70LbQtdC9INC00L4gJyAuICRuZXh0KTsKICAgIHd0X29rKFsndmFsaWRfdW50aWwnID0+ICRuZXh0XSk7Cn0KCi8vIOKUgOKUgCBNQU5VQUw6IGNyZWF0ZSBhbiBpbnZvaWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApjYXNlICdjcmVhdGVfaW52b2ljZSc6IHsKICAgICRiID0gd3RfYm9keSgpOwogICAgJGlkID0gKGludCkoJGJbJ2xpY2Vuc2VfaWQnXSA/PyAwKTsKICAgIGlmICghJGlkKSB3dF9lcnIoJ2xpY2Vuc2VfaWQnKTsKICAgICRsID0gd3RfZ2V0X2xpY2Vuc2UoJHBkbywgJGlkKTsKICAgICRmcm9tID0gJGJbJ2lzc3VlX2RhdGUnXSA/PyBkYXRlKCdZLW0tZCcpOwogICAgJHRvICAgPSAkYlsnZHVlX2RhdGUnXSA/PyB3dF9hZGRfbW9udGhzKCRmcm9tLCAxLCAkbFsnYmlsbGluZ19jeWNsZSddKTsKICAgIHd0X2NyZWF0ZV9pbnZvaWNlKCRwZG8sICRpZCwgKGZsb2F0KSgkYlsnYW1vdW50J10gPz8gJGxbJ2Jhc2VfcHJpY2UnXSksICRsWydjdXJyZW5jeSddLCAkZnJvbSwgJHRvKTsKICAgIHd0X29rKHRydWUpOwp9CgovLyDilIDilIAgREVMRVRFIHBhcnRuZXIgKCsgY2FzY2FkZSBsaWNlbnNlL2ludm9pY2VzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY2FzZSAnZGVsZXRlX3BhcnRuZXInOiB7CiAgICAkYiA9IHd0X2JvZHkoKTsKICAgICRwaWQgPSAoaW50KSgkYlsncGFydG5lcl9pZCddID8/IDApOwogICAgaWYgKCEkcGlkKSB3dF9lcnIoJ3BhcnRuZXJfaWQnKTsKICAgICRsaWNzID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUIGlkIEZST00gbGljZW5zZXMgV0hFUkUgcGFydG5lcl9pZD0/Iik7ICRsaWNzLT5leGVjdXRlKFskcGlkXSk7CiAgICBmb3JlYWNoICgkbGljcy0+ZmV0Y2hBbGwoKSBhcyAkbCkgewogICAgICAgICRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGludm9pY2VzIFdIRVJFIGxpY2Vuc2VfaWQ9PyIpLT5leGVjdXRlKFskbFsnaWQnXV0pOwogICAgICAgICRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGV2ZW50cyBXSEVSRSBsaWNlbnNlX2lkPT8iKS0+ZXhlY3V0ZShbJGxbJ2lkJ11dKTsKICAgIH0KICAgICRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGxpY2Vuc2VzIFdIRVJFIHBhcnRuZXJfaWQ9PyIpLT5leGVjdXRlKFskcGlkXSk7CiAgICAkcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSBwYXJ0bmVycyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRwaWRdKTsKICAgIHd0X29rKHRydWUpOwp9CgovLyDilIDilIAgRVZFTlQgTE9HIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApjYXNlICdldmVudHMnOiB7CiAgICAkaWQgPSAoaW50KSgkX0dFVFsnbGljZW5zZV9pZCddID8/IDApOwogICAgJHJvd3MgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIGV2ZW50cyBXSEVSRSBsaWNlbnNlX2lkPT8gT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIDQwIik7CiAgICAkcm93cy0+ZXhlY3V0ZShbJGlkXSk7CiAgICB3dF9vaygkcm93cy0+ZmV0Y2hBbGwoKSk7Cn0KCi8vIOKUgOKUgCBNT0RVTEUgQ0FUQUxPRyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY2FzZSAnY2F0YWxvZyc6IHsKICAgIHd0X29rKHd0X21vZHVsZXMoKSk7Cn0KCmRlZmF1bHQ6CiAgICB3dF9lcnIoJ1Vua25vd24gYWN0aW9uOiAnIC4gJGFjdGlvbiwgNDA0KTsKfQoKLy8g4pSA4pSAIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHd0X2dldF9saWNlbnNlKFBETyAkcGRvLCBpbnQgJGlkKTogYXJyYXkgewogICAgJHMgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIGxpY2Vuc2VzIFdIRVJFIGlkPT8iKTsgJHMtPmV4ZWN1dGUoWyRpZF0pOwogICAgJGwgPSAkcy0+ZmV0Y2goKTsKICAgIGlmICghJGwpIHd0X2Vycign0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INC90LDQvNC10YDQtdC9JywgNDA0KTsKICAgIHJldHVybiAkbDsKfQoKZnVuY3Rpb24gd3RfY3JlYXRlX2ludm9pY2UoUERPICRwZG8sIGludCAkbGljSWQsIGZsb2F0ICRhbW91bnQsIHN0cmluZyAkY3VyLCBzdHJpbmcgJGZyb20sIHN0cmluZyAkdG8pOiB2b2lkIHsKICAgICRudW0gPSAn0JvQpC0nIC4gZGF0ZSgnWScpIC4gJy0nIC4gc3RyX3BhZCgoc3RyaW5nKSgoaW50KSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBpbnZvaWNlcyIpLT5mZXRjaENvbHVtbigpICsgMSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsKICAgICRzdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGludm9pY2VzIChsaWNlbnNlX2lkLCBudW1iZXIsIHBlcmlvZF9sYWJlbCwgYW1vdW50LCBjdXJyZW5jeSwgaXNzdWVfZGF0ZSwgZHVlX2RhdGUpCiAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSIpOwogICAgJHN0LT5leGVjdXRlKFskbGljSWQsICRudW0sICRmcm9tIC4gJyDihpIgJyAuICR0bywgJGFtb3VudCwgJGN1ciwgJGZyb20sICR0b10pOwp9Cg==', 'licenses/admin/auth.php' => 'PD9waHAKLyoqCiAqINCQ0LTQvNC40L0g0LLRhdC+0LQg4oCUINGB0LXRgdC40Y8g0L/RgNC10LcgSHViINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGAINC40LvQuCDQv9Cw0YDQvtC70LDRgtCwINC+0YIg0LjQvdGB0YLQsNC70LDRhtC40Y/RgtCwLgogKi8KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL2xpYi9kYi5waHAnOwoKaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX05PTkUpIHsKICAgIHNlc3Npb25fc3RhcnQoKTsKfQoKZnVuY3Rpb24gd3RfYWRtaW5faGFzaCgpOiA/c3RyaW5nIHsKICAgIHRyeSB7CiAgICAgICAgJHMgPSB3dF9kYigpLT5xdWVyeSgiU0VMRUNUIGFkbWluX3Bhc3NfaGFzaCBGUk9NIHNldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgICAgICByZXR1cm4gJHNbJ2FkbWluX3Bhc3NfaGFzaCddID8/IG51bGw7CiAgICB9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsgcmV0dXJuIG51bGw7IH0KfQoKZnVuY3Rpb24gd3RfaXNfYWRtaW4oKTogYm9vbCB7CiAgICByZXR1cm4gIWVtcHR5KCRfU0VTU0lPTlsnd3RfYWRtaW4nXSkgfHwgIWVtcHR5KCRfU0VTU0lPTlsnaHViX2lzX2FkbWluJ10pOwp9CgpmdW5jdGlvbiB3dF9yZXF1aXJlX2FkbWluKCk6IHZvaWQgewogICAgaWYgKCF3dF9pc19hZG1pbigpKSB7CiAgICAgICAgd3RfanNvbihbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnYXV0aCcsICdtZXNzYWdlJyA9PiAn0J3QtSDRgdGC0LUg0LLQu9C10LfQu9C4LiddLCA0MDEpOwogICAgfQp9CgovKiog0J7QsdGA0LDQsdC+0YLQstCwINCy0YXQvtC0L9C40LfRhdC+0LQsINC60L7Qs9Cw0YLQviDRhNCw0LnQu9GK0YIg0YHQtSDQuNC30LLQuNC60LAg0LTQuNGA0LXQutGC0L3Qvi4gKi8KaWYgKGJhc2VuYW1lKCRfU0VSVkVSWydTQ1JJUFRfTkFNRSddID8/ICcnKSA9PT0gJ2F1dGgucGhwJykgewogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgICRhY3QgPSAkX0dFVFsnZG8nXSA/PyAnJzsKICAgIGlmICgkYWN0ID09PSAnbG9naW4nKSB7CiAgICAgICAgJGIgPSB3dF9ib2R5KCk7CiAgICAgICAgJHVzZXJuYW1lID0gdHJpbSgoc3RyaW5nKSgkYlsndXNlcm5hbWUnXSA/PyAnJykpOwogICAgICAgIGlmICgkdXNlcm5hbWUgIT09ICcnKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkc3QgPSB3dF9kYigpLT5wcmVwYXJlKCJTRUxFQ1QgaWQscGFzc3dvcmQsaXNfYWRtaW4gRlJPTSB1c2VycyBXSEVSRSB1c2VybmFtZT0/IExJTUlUIDEiKTsKICAgICAgICAgICAgICAgICRzdC0+ZXhlY3V0ZShbJHVzZXJuYW1lXSk7CiAgICAgICAgICAgICAgICAkdSA9ICRzdC0+ZmV0Y2goKTsKICAgICAgICAgICAgICAgIGlmICgkdSAmJiAoaW50KSgkdVsnaXNfYWRtaW4nXSA/PyAwKSA9PT0gMSAmJiBwYXNzd29yZF92ZXJpZnkoJGJbJ3Bhc3N3b3JkJ10gPz8gJycsICR1WydwYXNzd29yZCddKSkgewogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnd3RfYWRtaW4nXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydodWJfdXNlcl9pZCddID0gKGludCkkdVsnaWQnXTsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2h1Yl9pc19hZG1pbiddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB3dF9vayh0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7fQogICAgICAgIH0KICAgICAgICAkaGFzaCA9IHd0X2FkbWluX2hhc2goKTsKICAgICAgICBpZiAoJGhhc2ggJiYgcGFzc3dvcmRfdmVyaWZ5KCRiWydwYXNzd29yZCddID8/ICcnLCAkaGFzaCkpIHsKICAgICAgICAgICAgJF9TRVNTSU9OWyd3dF9hZG1pbiddID0gdHJ1ZTsKICAgICAgICAgICAgd3Rfb2sodHJ1ZSk7CiAgICAgICAgfQogICAgICAgIHd0X2pzb24oWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ9CT0YDQtdGI0L3QsCDQv9Cw0YDQvtC70LAuJ10sIDQwMSk7CiAgICB9CiAgICBpZiAoJGFjdCA9PT0gJ2xvZ291dCcpIHsKICAgICAgICAkX1NFU1NJT04gPSBbXTsKICAgICAgICBzZXNzaW9uX2Rlc3Ryb3koKTsKICAgICAgICB3dF9vayh0cnVlKTsKICAgIH0KICAgIGlmICgkYWN0ID09PSAnY2hlY2snKSB7CiAgICAgICAgd3Rfb2soWydhdXRoZWQnID0+IHd0X2lzX2FkbWluKCldKTsKICAgIH0KICAgIHd0X2VycigndW5rbm93bicsIDQwNCk7Cn0K', 'licenses/admin/index.php' => 'PD9waHAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL2F1dGgucGhwJzsgPz4KPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J/QsNGA0YLQvdGM0L7RgNC4IMK3IFdlYnRyaXhpYTwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9U29yYTp3Z2h0QDQwMDs1MDA7NjAwOzcwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ewogIC0tYmc6IzBhMGExMjstLWJnMjojMTIxMjFlOy0tY2FyZDpyZ2JhKDI1NSwyNTUsMjU1LC4wMzUpOy0tY2FyZDI6cmdiYSgyNTUsMjU1LDI1NSwuMDYpOwogIC0tYnJkOnJnYmEoMjU1LDI1NSwyNTUsLjA4KTstLWJyZDI6cmdiYSgyNTUsMjU1LDI1NSwuMTQpOwogIC0tdHg6I2VjZWNmNTstLXR4MjojOWE5YWI4Oy0tdHgzOiM1YzVjNzg7CiAgLS1hY2M6IzdjNmNmZjstLWFjYzI6I2E3OGJmYTstLXBpbms6I2Y0NzJiNjsKICAtLWdybjojMzRkMzk5Oy0tZ2RpbTpyZ2JhKDUyLDIxMSwxNTMsLjE0KTstLWFtYjojZmJiZjI0Oy0tYWRpbTpyZ2JhKDI1MSwxOTEsMzYsLjE0KTsKICAtLXJlZDojZjg3MTcxOy0tcmRpbTpyZ2JhKDI0OCwxMTMsMTEzLC4xNCk7CiAgLS1mbjonU29yYScsc2Fucy1zZXJpZjstLW1vOidETSBNb25vJyxtb25vc3BhY2U7Cn0KKnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtiYWNrZ3JvdW5kOgogIHJhZGlhbC1ncmFkaWVudCgxMjAwcHggNjAwcHggYXQgMTAlIC0xMCUscmdiYSgxMjQsMTA4LDI1NSwuMTIpLHRyYW5zcGFyZW50IDYwJSksCiAgcmFkaWFsLWdyYWRpZW50KDkwMHB4IDUwMHB4IGF0IDExMCUgMTAlLHJnYmEoMjQ0LDExNCwxODIsLjA4KSx0cmFuc3BhcmVudCA1NSUpLAogIHZhcigtLWJnKTtjb2xvcjp2YXIoLS10eCk7bWluLWhlaWdodDoxMDB2aH0KYXtjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lfQouaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9CgovKiBsb2dpbiAqLwojbG9naW57bWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fQoubG9naW5ib3h7d2lkdGg6MTAwJTttYXgtd2lkdGg6MzgwcHg7YmFja2dyb3VuZDp2YXIoLS1jYXJkKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoyNHB4O3BhZGRpbmc6NDBweCAzMnB4O2JhY2tkcm9wLWZpbHRlcjpibHVyKDI0cHgpO3RleHQtYWxpZ246Y2VudGVyfQoubG9nb3tmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tYWNjKSx2YXIoLS1waW5rKSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtjb2xvcjp0cmFuc3BhcmVudH0KLmxvZ2luYm94IHB7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTNweDttYXJnaW46NnB4IDAgMjJweH0KCi8qIHNoZWxsICovCi5zaGVsbHttYXgtd2lkdGg6MTIyMHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyNnB4IDIwcHggNzBweH0KLnRvcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjZweDtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweH0KLmJyYW5ke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHh9Ci5icmFuZCAubWFya3t3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tYWNjKSx2YXIoLS1waW5rKSk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxOXB4fQouYnJhbmQgaDF7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjAwfQouYnJhbmQgLnN7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKX0KCi8qIHN0YXQgY2FyZHMgKi8KLnN0YXRze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDUsMWZyKTtnYXA6MTRweDttYXJnaW4tYm90dG9tOjI2cHh9CkBtZWRpYShtYXgtd2lkdGg6OTAwcHgpey5zdGF0c3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsMWZyKX19Ci5zdGF0e2JhY2tncm91bmQ6dmFyKC0tY2FyZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjE4cHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufQouc3RhdDo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgxMjQsMTA4LDI1NSwuMDgpLHRyYW5zcGFyZW50IDcwJSk7cG9pbnRlci1ldmVudHM6bm9uZX0KLnN0YXQgLmt7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA4ZW19Ci5zdGF0IC52e2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjZweH0KLnN0YXQubXJyIC52e2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLWdybiksIzZlZTdiNyk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtjb2xvcjp0cmFuc3BhcmVudH0KLnN0YXQud2FybiAudntjb2xvcjp2YXIoLS1hbWIpfSAuc3RhdC5iYWQgLnZ7Y29sb3I6dmFyKC0tcmVkKX0KCi8qIGJ1dHRvbnMgLyBpbnB1dHMgKi8KLmJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXItcmFkaXVzOjExcHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO3RyYW5zaXRpb246LjE1cztkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fQouYnRuOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpfQouYnRuLnB7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHZhcigtLWFjYyksIzYzNTVlMCk7Y29sb3I6I2ZmZjtib3gtc2hhZG93OjAgNnB4IDIwcHggcmdiYSgxMjQsMTA4LDI1NSwuMyl9Ci5idG4uc3tiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTtjb2xvcjp2YXIoLS10eDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmJ0bi5ne2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoNTIsMjExLDE1MywuMjUpfQouYnRuLmF7YmFja2dyb3VuZDp2YXIoLS1hZGltKTtjb2xvcjp2YXIoLS1hbWIpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTEsMTkxLDM2LC4yNSl9Ci5idG4uZHtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOnZhcigtLXJlZCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI0OCwxMTMsMTEzLC4yNSl9Ci5idG4uc217cGFkZGluZzo2cHggMTFweDtmb250LXNpemU6MTEuNXB4O2JvcmRlci1yYWRpdXM6OXB4fQpsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtO21hcmdpbjoxMnB4IDAgNnB4fQppbnB1dCxzZWxlY3R7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI1KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweCAxM3B4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lO3RyYW5zaXRpb246LjE1c30KaW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNCl9Ci5yb3cye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0KLnJvdzN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcjtnYXA6MTJweH0KQG1lZGlhKG1heC13aWR0aDo2NDBweCl7LnJvdzIsLnJvdzN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19Cgouc2VjdGl0bGV7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4Mik7bWFyZ2luOjZweCAwIDEycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQoKLyogcGFydG5lciBjYXJkcyAqLwoucGNhcmR7YmFja2dyb3VuZDp2YXIoLS1jYXJkKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoyMHB4O3BhZGRpbmc6MjBweDttYXJnaW4tYm90dG9tOjE2cHg7dHJhbnNpdGlvbjouMTVzfQoucGNhcmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWJyZDIpfQoucGNhcmQgLmhlYWR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9Ci5wbmFtZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDB9Ci5wbWV0YXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6M3B4fQoua2V5Y2hpcHtmb250LWZhbWlseTp2YXIoLS1tbyk7Zm9udC1zaXplOjEycHg7YmFja2dyb3VuZDpyZ2JhKDEyNCwxMDgsMjU1LC4xMik7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEyNCwxMDgsMjU1LC4yNSk7Y29sb3I6dmFyKC0tYWNjMik7cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjlweDtjdXJzb3I6Y29weTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQoucGlsbHtwYWRkaW5nOjRweCAxMnB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fQoucGlsbCAuZHt3aWR0aDo3cHg7aGVpZ2h0OjdweDtib3JkZXItcmFkaXVzOjUwJX0KLnBpbGwuYWN0aXZle2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKX0gLnBpbGwuYWN0aXZlIC5ke2JhY2tncm91bmQ6dmFyKC0tZ3JuKX0KLnBpbGwuZ3JhY2V7YmFja2dyb3VuZDp2YXIoLS1hZGltKTtjb2xvcjp2YXIoLS1hbWIpfSAucGlsbC5ncmFjZSAuZHtiYWNrZ3JvdW5kOnZhcigtLWFtYil9Ci5waWxsLmxvY2tlZHtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOnZhcigtLXJlZCl9IC5waWxsLmxvY2tlZCAuZHtiYWNrZ3JvdW5kOnZhcigtLXJlZCl9Ci5ncmlkLWluZm97ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwxZnIpO2dhcDoxNHB4O21hcmdpbjoxNnB4IDB9CkBtZWRpYShtYXgtd2lkdGg6NzIwcHgpey5ncmlkLWluZm97Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcil9fQouaW5mbyAubHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbX0KLmluZm8gLnZhbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLXRvcDozcHh9Ci5tb2Rze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6N3B4O21hcmdpbjo2cHggMCA0cHh9Ci5tY2hpcHtwYWRkaW5nOjZweCAxMXB4O2JvcmRlci1yYWRpdXM6OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTt0cmFuc2l0aW9uOi4xMnM7dXNlci1zZWxlY3Q6bm9uZX0KLm1jaGlwLm9ue2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKTtib3JkZXItY29sb3I6cmdiYSg1MiwyMTEsMTUzLC4zKX0KLm1jaGlwLm9mZntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIpO2NvbG9yOnZhcigtLXR4Myl9Ci5tY2hpcCAucHJ7b3BhY2l0eTouNjtmb250LXNpemU6MTBweDttYXJnaW4tbGVmdDo0cHh9Ci5hY3Rze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi10b3A6MTRweDtwYWRkaW5nLXRvcDoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWJyZCl9Ci5yZW1vdGV7Zm9udC1zaXplOjExLjVweDttYXJnaW4tdG9wOjEwcHg7Y29sb3I6dmFyKC0tdHgzKX0KLnJlbW90ZSAuZG90e3dpZHRoOjdweDtoZWlnaHQ6N3B4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo2cHh9Ci5yZW1vdGUgLmRvdC5va3tiYWNrZ3JvdW5kOnZhcigtLWdybil9IC5yZW1vdGUgLmRvdC5lcnJ7YmFja2dyb3VuZDp2YXIoLS1yZWQpfQoKLyogbW9kYWwgKi8KLm1ve3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDYsNiwxNCwuNyk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoNnB4KTtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3otaW5kZXg6OTk7cGFkZGluZzozNHB4IDE2cHg7b3ZlcmZsb3c6YXV0b30KLm1vLnNob3d7ZGlzcGxheTpmbGV4fQoubWJ7d2lkdGg6MTAwJTttYXgtd2lkdGg6NjIwcHg7YmFja2dyb3VuZDp2YXIoLS1iZzIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkMik7Ym9yZGVyLXJhZGl1czoyMnB4O3BhZGRpbmc6MjZweDtwb3NpdGlvbjpyZWxhdGl2ZX0KLm1iIGgze2ZvbnQtc2l6ZToxN3B4O21hcmdpbi1ib3R0b206NHB4fQoubWIgLnN1Yntmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MTRweH0KLmNsb3Nle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxOHB4O3JpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MjJweH0KLm1vZHBpY2t7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7bWFyZ2luLXRvcDo2cHh9Ci5tb2RwaWNrIC5tY2hpcHtjdXJzb3I6cG9pbnRlcn0KCnRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLXRvcDo2cHh9CnRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjhweCAxMHB4O2NvbG9yOnZhcigtLXR4Myk7Zm9udC13ZWlnaHQ6NTAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7Zm9udC1zaXplOjExcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNGVtfQp0ZHtwYWRkaW5nOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLnRvYXN0e3Bvc2l0aW9uOmZpeGVkO2JvdHRvbToyMnB4O2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO2JhY2tncm91bmQ6IzFhMWEyZTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZDIpO2NvbG9yOiNmZmY7cGFkZGluZzoxMnB4IDIwcHg7Ym9yZGVyLXJhZGl1czoxMnB4O2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwMDtib3gtc2hhZG93OjAgMTBweCA0MHB4IHJnYmEoMCwwLDAsLjQpfQouZW1wdHl7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtwYWRkaW5nOjUwcHggMjBweDtmb250LXNpemU6MTRweH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjwhLS0gTE9HSU4gLS0+CjxkaXYgaWQ9ImxvZ2luIiBjbGFzcz0iPD89IHd0X2lzX2FkbWluKCkgPyAnaGlkZGVuJyA6ICcnID8+Ij4KICA8ZGl2IGNsYXNzPSJsb2dpbmJveCI+CiAgICA8ZGl2IGNsYXNzPSJsb2dvIj7irKEgV2VidHJpeGlhINCf0LDRgNGC0L3RjNC+0YDQuDwvZGl2PgogICAgPHA+0JLQu9C10Lcg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0L7RgiBIdWIg0LjQu9C4INGBINC/0LDRgNC+0LvQsNGC0LAg0L3QsCDQu9C40YbQtdC90LfQvdC40Y8g0L/QsNC90LXQuzwvcD4KICAgIDxpbnB1dCBpZD0idW4iIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLQn9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUg0L7RgiBIdWIiIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJylkb0xvZ2luKCkiPgogICAgPGlucHV0IGlkPSJwdyIgdHlwZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSLQn9Cw0YDQvtC70LAiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHgiIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJylkb0xvZ2luKCkiPgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbi10b3A6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIiBvbmNsaWNrPSJkb0xvZ2luKCkiPtCS0YXQvtC0PC9idXR0b24+CiAgICA8ZGl2IGlkPSJsb2dpbkVyciIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCk7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6bm9uZSI+PC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPCEtLSBBUFAgLS0+CjxkaXYgaWQ9ImFwcCIgY2xhc3M9InNoZWxsIDw/PSB3dF9pc19hZG1pbigpID8gJycgOiAnaGlkZGVuJyA/PiI+CiAgPGRpdiBjbGFzcz0idG9wIj4KICAgIDxkaXYgY2xhc3M9ImJyYW5kIj4KICAgICAgPGRpdiBjbGFzcz0ibWFyayI+4qyhPC9kaXY+CiAgICAgIDxkaXY+PGgxPtCf0LDRgNGC0L3RjNC+0YDRgdC60Lgg0YXRitCx0L7QstC1PC9oMT48ZGl2IGNsYXNzPSJzIj7Qu9C40YbQtdC90LfQuCDCtyDQvNC+0LTRg9C70Lggwrcg0LDQsdC+0L3QsNC80LXQvdGC0Lg8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4Ij4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im9wZW5Jc3N1ZSgpIj4rINCd0L7QsiDQutC70LjQtdC90YIgLyDQu9C40YbQtdC90Lc8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHMiIG9uY2xpY2s9ImRvTG9nb3V0KCkiPtCY0LfRhdC+0LQ8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzdGF0cyIgaWQ9InN0YXRzIj48L2Rpdj4KICA8ZGl2IGNsYXNzPSJzZWN0aXRsZSI+8J+PoiDQmtC70LjQtdC90YLQuCDRgSDRhdGK0LE8L2Rpdj4KICA8ZGl2IGlkPSJsaXN0Ij48L2Rpdj4KPC9kaXY+Cgo8IS0tIElTU1VFIE1PREFMIC0tPgo8ZGl2IGNsYXNzPSJtbyIgaWQ9Imlzc3VlTW9kYWwiPjxkaXYgY2xhc3M9Im1iIj4KICA8c3BhbiBjbGFzcz0iY2xvc2UiIG9uY2xpY2s9ImNsb3NlTSgnaXNzdWVNb2RhbCcpIj7inJU8L3NwYW4+CiAgPGgzPtCd0L7QsiDQutC70LjQtdC90YIgKyDQu9C40YbQtdC90Lc8L2gzPgogIDxkaXYgY2xhc3M9InN1YiI+0KHRitC30LTQsNCy0LAg0LrQu9C40LXQvdGC0LAsINCz0LXQvdC10YDQuNGA0LAg0LvQuNGG0LXQvdC30LXQvSDQutC70Y7RhyDQuCDQv9GK0YDQstCw0YLQsCDRhNCw0LrRgtGD0YDQsC48L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3cyIj4KICAgIDxkaXY+PGxhYmVsPtCY0LzQtSDQvdCwINC60LvQuNC10L3RgtCwICo8L2xhYmVsPjxpbnB1dCBpZD0iaV9uYW1lIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCk0LjRgNC80LA8L2xhYmVsPjxpbnB1dCBpZD0iaV9jb21wYW55Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3cyIj4KICAgIDxkaXY+PGxhYmVsPtCY0LzQtdC50Ls8L2xhYmVsPjxpbnB1dCBpZD0iaV9lbWFpbCI+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7QotC10LvQtdGE0L7QvTwvbGFiZWw+PGlucHV0IGlkPSJpX3Bob25lIj48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3czIj4KICAgIDxkaXY+PGxhYmVsPtCf0LvQsNC9PC9sYWJlbD48aW5wdXQgaWQ9ImlfcGxhbiIgdmFsdWU9IlN0YW5kYXJkIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCR0LDQt9C+0LLQsCDRhtC10L3QsCAvINC/0LXRgNC40L7QtDwvbGFiZWw+PGlucHV0IGlkPSJpX3ByaWNlIiB0eXBlPSJudW1iZXIiIHZhbHVlPSIxNSI+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7Qn9C10YDQuNC+0LQ8L2xhYmVsPjxzZWxlY3QgaWQ9ImlfY3ljbGUiPjxvcHRpb24gdmFsdWU9Im1vbnRobHkiPtCc0LXRgdC10YfQvdC+PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ieWVhcmx5Ij7Qk9C+0LTQuNGI0L3Qvjwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPgogICAgPGRpdj48bGFiZWw+0JPRgNCw0YLQuNGBINC00L3QuCAo0YHQu9C10LQg0L/QsNC00LXQtik8L2xhYmVsPjxpbnB1dCBpZD0iaV9ncmFjZSIgdHlwZT0ibnVtYmVyIiB2YWx1ZT0iNyI+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7QndCw0YfQsNC70L48L2xhYmVsPjxpbnB1dCBpZD0iaV9zdGFydCIgdHlwZT0iZGF0ZSI+PC9kaXY+CiAgPC9kaXY+CiAgPGxhYmVsPtCf0LvQsNGC0LXQvdC4INC80L7QtNGD0LvQuDwvbGFiZWw+CiAgPGRpdiBjbGFzcz0ibW9kcGljayIgaWQ9ImlfbW9kcyI+PC9kaXY+CiAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHg7d2lkdGg6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIiBvbmNsaWNrPSJkb0lzc3VlKCkiPtCT0LXQvdC10YDQuNGA0LDQuSDQu9C40YbQtdC90Lc8L2J1dHRvbj4KPC9kaXY+PC9kaXY+Cgo8IS0tIEtFWSBSRVZFQUwgTU9EQUwgLS0+CjxkaXYgY2xhc3M9Im1vIiBpZD0ia2V5TW9kYWwiPjxkaXYgY2xhc3M9Im1iIiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICA8ZGl2IHN0eWxlPSJmb250LXNpemU6NDJweDttYXJnaW4tYm90dG9tOjhweCI+8J+OiTwvZGl2PgogIDxoMz7Qm9C40YbQtdC90LfRitGCINC1INCz0L7RgtC+0LI8L2gzPgogIDxkaXYgY2xhc3M9InN1YiI+0JTQsNC5INGC0L7Qt9C4INC60LvRjtGHINC90LAg0LrQu9C40LXQvdGC0LAg4oCUINGC0L7QuSDQs9C+INCy0YrQstC10LbQtNCwINC/0YDQuCDQuNC90YHRgtCw0LvQsNGG0LjRjyDQvdCwINGB0LLQvtGPINGF0YrQsSAoaW5zdGFsbC5waHApLjwvZGl2PgogIDxkaXYgY2xhc3M9ImtleWNoaXAiIHN0eWxlPSJmb250LXNpemU6MTZweDtwYWRkaW5nOjE0cHg7bWFyZ2luOjhweCBhdXRvO2p1c3RpZnktY29udGVudDpjZW50ZXIiIGlkPSJuZXdLZXkiIG9uY2xpY2s9ImNvcHlLZXkodGhpcykiPjwvZGl2PgogIDxkaXYgY2xhc3M9InN1YiIgaWQ9Im5ld0tleU1ldGEiPjwvZGl2PgogIDxidXR0b24gY2xhc3M9ImJ0biBwIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4IiBvbmNsaWNrPSJjbG9zZU0oJ2tleU1vZGFsJyk7bG9hZCgpIj7Qk9C+0YLQvtCy0L48L2J1dHRvbj4KPC9kaXY+PC9kaXY+Cgo8IS0tIElOVk9JQ0VTIE1PREFMIC0tPgo8ZGl2IGNsYXNzPSJtbyIgaWQ9Imludk1vZGFsIj48ZGl2IGNsYXNzPSJtYiI+CiAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJjbG9zZU0oJ2ludk1vZGFsJykiPuKclTwvc3Bhbj4KICA8aDMgaWQ9ImludlRpdGxlIj7QpNCw0LrRgtGD0YDQuDwvaDM+CiAgPGRpdiBjbGFzcz0ic3ViIj7QntGC0LHQtdC70Y/Qt9Cy0LDQvdC10YLQviDigJ7Qn9C70LDRgtC10L3QvuKAnCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INGD0LTRitC70LbQsNCy0LAg0LvQuNGG0LXQvdC30LAg0Lgg0YHRitC30LTQsNCy0LAg0YHQu9C10LTQstCw0YnQsCDRhNCw0LrRgtGD0YDQsC48L2Rpdj4KICA8ZGl2IGlkPSJpbnZCb2R5Ij48L2Rpdj4KPC9kaXY+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJ0b2FzdCIgaWQ9InRvYXN0Ij48L2Rpdj4KCjxzY3JpcHQ+Cid1c2Ugc3RyaWN0JzsKY29uc3QgQVVUSEVEID0gPD89IHd0X2lzX2FkbWluKCkgPyAndHJ1ZScgOiAnZmFsc2UnID8+Owpjb25zdCBCQVNFID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvYWRtaW5cL2luZGV4XC5waHAkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CmNvbnN0IEFQSSA9IEJBU0UgKyAnL2FkbWluL2FwaS5waHAnOwpjb25zdCBBVVRIID0gQkFTRSArICcvYWRtaW4vYXV0aC5waHAnOwpsZXQgQ0FUQUxPRyA9IHt9OwoKZnVuY3Rpb24gdG9hc3QobSl7Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW07dC5zdHlsZS5kaXNwbGF5PSdibG9jayc7c2V0VGltZW91dCgoKT0+dC5zdHlsZS5kaXNwbGF5PSdub25lJywyNjAwKTt9CmZ1bmN0aW9uIG1vbmV5KG4sYyl7cmV0dXJuIChwYXJzZUZsb2F0KG58fDApKS50b0ZpeGVkKDIpKycgJysoY3x8J0VVUicpO30KZnVuY3Rpb24gZXNjKHMpe3JldHVybiAocz09bnVsbD8nJzpTdHJpbmcocykpLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8iL2csJyZxdW90OycpO30KZnVuY3Rpb24gb3Blbk0oaWQpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7fQpmdW5jdGlvbiBjbG9zZU0oaWQpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7fQoKYXN5bmMgZnVuY3Rpb24gYXBpKGFjdGlvbixtZXRob2QsYm9keSxxcyl7CiAgbWV0aG9kPW1ldGhvZHx8J0dFVCc7cXM9cXN8fCcnOwogIGNvbnN0IG89e21ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9LGNyZWRlbnRpYWxzOidzYW1lLW9yaWdpbid9OwogIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogIGNvbnN0IHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK3FzLG8pOwogIGNvbnN0IGo9YXdhaXQgci5qc29uKCkuY2F0Y2goKCk9Pih7b2s6ZmFsc2UsZXJyb3I6J2JhZCByZXNwb25zZSd9KSk7CiAgcmV0dXJuIGo7Cn0KCmFzeW5jIGZ1bmN0aW9uIGRvTG9naW4oKXsKICBjb25zdCB1c2VybmFtZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndW4nKS52YWx1ZTsKICBjb25zdCBwdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHcnKS52YWx1ZTsKICBjb25zdCByPWF3YWl0IGZldGNoKEFVVEgrJz9kbz1sb2dpbicse21ldGhvZDonUE9TVCcsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nLGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VzZXJuYW1lOnVzZXJuYW1lLHBhc3N3b3JkOnB3fSl9KTsKICBjb25zdCBqPWF3YWl0IHIuanNvbigpOwogIGlmKGoub2speyBsb2NhdGlvbi5yZWxvYWQoKTsgfQogIGVsc2UgeyBjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbkVycicpOyBlLnRleHRDb250ZW50PWouZXJyb3J8fCfQk9GA0LXRiNC90LAg0L/QsNGA0L7Qu9CwJzsgZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7IH0KfQphc3luYyBmdW5jdGlvbiBkb0xvZ291dCgpeyBhd2FpdCBmZXRjaChBVVRIKyc/ZG89bG9nb3V0Jyx7Y3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJ30pOyBsb2NhdGlvbi5yZWxvYWQoKTsgfQoKYXN5bmMgZnVuY3Rpb24gbG9hZENhdGFsb2coKXsgY29uc3Qgcj1hd2FpdCBhcGkoJ2NhdGFsb2cnKTsgQ0FUQUxPRz1yLm9rP3IuZGF0YTp7fTsgfQoKZnVuY3Rpb24gbW9kQ2hpcHMoc2VsZWN0ZWQsIGVkaXRhYmxlLCBsaWNJZCl7CiAgcmV0dXJuIE9iamVjdC5rZXlzKENBVEFMT0cpLm1hcChrPT57CiAgICBjb25zdCBvbiA9IHNlbGVjdGVkICYmIHNlbGVjdGVkW2tdOwogICAgY29uc3QgcHJpY2UgPSBDQVRBTE9HW2tdLnByaWNlPjAgPyAnPHNwYW4gY2xhc3M9InByIj4nK0NBVEFMT0dba10ucHJpY2UrJ+KCrDwvc3Bhbj4nIDogJyc7CiAgICBjb25zdCBjbGljayA9IGVkaXRhYmxlID8gJyBvbmNsaWNrPSJ0b2dnbGVNb2QodGhpcykiIGRhdGEtbW9kPSInK2srJyInIDogKGxpY0lkIT1udWxsPycgb25jbGljaz0idG9nZ2xlTGljTW9kKFwnJytsaWNJZCsnXCcsXCcnK2srJ1wnLHRoaXMpIic6JycpOwogICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibWNoaXAgJysob24/J29uJzonb2ZmJykrJyInK2NsaWNrKyc+Jytlc2MoQ0FUQUxPR1trXS5sYWJlbCkrcHJpY2UrJzwvc3Bhbj4nOwogIH0pLmpvaW4oJycpOwp9Cgphc3luYyBmdW5jdGlvbiBsb2FkKCl7CiAgY29uc3Qgc3Q9YXdhaXQgYXBpKCdzdGF0cycpOwogIGlmKHN0Lm9rKXsKICAgIGNvbnN0IHM9c3QuZGF0YTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0cycpLmlubmVySFRNTD0KICAgICAgY2FyZCgn0JrQu9C40LXQvdGC0LgnLHMucGFydG5lcnMpK2NhcmQoJ9CQ0LrRgtC40LLQvdC4JyxzLmFjdGl2ZSkrCiAgICAgIGNhcmQoJ9CSINCz0YDQsNGC0LjRgScscy5ncmFjZSwnd2FybicpK2NhcmQoJ9CX0LDQutC70Y7Rh9C10L3QuCcscy5sb2NrZWQsJ2JhZCcpKwogICAgICBjYXJkKCdNUlInLG1vbmV5KHMubXJyKSwnbXJyJyk7CiAgfQogIGNvbnN0IHI9YXdhaXQgYXBpKCdwYXJ0bmVycycpOwogIGNvbnN0IGJveD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlzdCcpOwogIGlmKCFyLm9rIHx8ICFyLmRhdGEubGVuZ3RoKXsgYm94LmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPtCe0YnQtSDQvdGP0LzQsCDQutC70LjQtdC90YLQuC4g0J3QsNGC0LjRgdC90Lgg4oCeKyDQndC+0LIg0LrQu9C40LXQvdGCIC8g0LvQuNGG0LXQvdC34oCcLjwvZGl2Pic7IHJldHVybjsgfQogIGJveC5pbm5lckhUTUw9ci5kYXRhLm1hcChyZW5kZXJQYXJ0bmVyKS5qb2luKCcnKTsKICByLmRhdGEuZm9yRWFjaChwPT57IGlmKHAuaHViX3VybCkgcGluZ0h1YihwKTsgfSk7Cn0KZnVuY3Rpb24gY2FyZChrLHYsY2xzKXtyZXR1cm4gJzxkaXYgY2xhc3M9InN0YXQgJysoY2xzfHwnJykrJyI+PGRpdiBjbGFzcz0iayI+JytrKyc8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4nK3YrJzwvZGl2PjwvZGl2Pic7fQoKZnVuY3Rpb24gcmVuZGVyUGFydG5lcihwKXsKICBpZighcC5saWNlbnNlX2lkKXsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0icGNhcmQiPjxkaXYgY2xhc3M9ImhlYWQiPjxkaXY+PGRpdiBjbGFzcz0icG5hbWUiPicrZXNjKHAubmFtZSkrJzwvZGl2PjxkaXYgY2xhc3M9InBtZXRhIj7QsdC10Lcg0LvQuNGG0LXQvdC3PC9kaXY+PC9kaXY+JysKICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBkIHNtIiBvbmNsaWNrPSJkZWxQYXJ0bmVyKCcrcC5pZCsnKSI+0JjQt9GC0YDQuNC5PC9idXR0b24+PC9kaXY+PC9kaXY+JzsKICB9CiAgY29uc3QgYz1wLmNvbXB1dGVkfHx7c3RhdGU6J2FjdGl2ZSd9OwogIGNvbnN0IHVucGFpZD0ocC5pbnZvaWNlX3N1bW1hcnkmJnAuaW52b2ljZV9zdW1tYXJ5LnVucGFpZCl8fDA7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwY2FyZCI+JysKICAgICc8ZGl2IGNsYXNzPSJoZWFkIj4nKwogICAgICAnPGRpdj48ZGl2IGNsYXNzPSJwbmFtZSI+Jytlc2MocC5uYW1lKSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InBtZXRhIj4nK2VzYyhwLmNvbXBhbnl8fCcnKSsocC5lbWFpbD8nIMK3ICcrZXNjKHAuZW1haWwpOicnKSsocC5odWJfdXJsPycgwrcgJytlc2MocC5odWJfdXJsKTonJykrJzwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXAiPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJwaWxsICcrYy5zdGF0ZSsnIj48c3BhbiBjbGFzcz0iZCI+PC9zcGFuPicrc3RhdGVMYWJlbChjLnN0YXRlKSsnPC9zcGFuPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJrZXljaGlwIiBvbmNsaWNrPSJjb3B5S2V5KHRoaXMpIj4nK2VzYyhwLmxpY2Vuc2Vfa2V5KSsnIOKniTwvc3Bhbj4nKwogICAgICAnPC9kaXY+JysKICAgICc8L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImdyaWQtaW5mbyI+JysKICAgICAgaW5mbygn0J/Qu9Cw0L0nLGVzYyhwLnBsYW5fbmFtZSkpKwogICAgICBpbmZvKCfQptC10L3QsCcsJzxiPicrbW9uZXkocC5iYXNlX3ByaWNlLHAuY3VycmVuY3kpKyc8L2I+IC8gJysocC5iaWxsaW5nX2N5Y2xlPT09J3llYXJseSc/J9Cz0L7QtC4nOifQvNC10YEuJykpKwogICAgICBpbmZvKCfQktCw0LvQuNC00LXQvSDQtNC+JyxjLnZhbGlkX3VudGlsfHwn4oCUJykrCiAgICAgIGluZm8oJ9CT0YDQsNGC0LjRgScsKHAuZ3JhY2VfZGF5c3x8MCkrJyDQtNC90LgnKyh1bnBhaWQ+MD8nIMK3IDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIj4nK3VucGFpZCsnINC90LXQv9C70LDRgtC10L3QuDwvc3Bhbj4nOicnKSkrCiAgICAnPC9kaXY+JysKICAgICc8bGFiZWwgc3R5bGU9Im1hcmdpbi10b3A6NHB4Ij7Qn9C70LDRgtC10L3QuCDQvNC+0LTRg9C70LggKNC60LvQuNC6ID0g0LLQutC7L9C40LfQutC7INC/0YDQuCDQutC70LjQtdC90YLQsCDQstC10LTQvdCw0LPQsCk8L2xhYmVsPicrCiAgICAnPGRpdiBjbGFzcz0ibW9kcyI+Jyttb2RDaGlwcyhwLm1vZHVsZXMsZmFsc2UscC5saWNlbnNlX2lkKSsnPC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJyZW1vdGUiIGlkPSJyZW1vdGVfJytwLmxpY2Vuc2VfaWQrJyI+JysocC5odWJfdXJsPyc8c3BhbiBjbGFzcz0iZG90Ij48L3NwYW4+0L/RgNC+0LLQtdGA0Y/QstCw0Lwg0LLRgNGK0LfQutCw0YLQsOKApic6JzxzcGFuIGNsYXNzPSJkb3QiPjwvc3Bhbj7RhdGK0LHRitGCINC+0YnQtSDQvdC1INC1INCw0LrRgtC40LLQuNGA0LDQvSAo0LrQu9C40LXQvdGC0YrRgiDQvdC1INC1INCy0YrQstC10Lsg0LrQu9GO0YfQsCknKSsnPC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJhY3RzIj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGcgc20iIG9uY2xpY2s9ImV4dGVuZExpYygnK3AubGljZW5zZV9pZCsnKSI+77yLINCj0LTRitC70LbQuCAxINC/0LXRgNC40L7QtDwvYnV0dG9uPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYSBzbSIgb25jbGljaz0iZ3JhY2VMaWMoJytwLmxpY2Vuc2VfaWQrJykiPuKPsyDQk9GA0LDRgtC40YEg0LTQvdC4PC9idXR0b24+JysKICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBzIHNtIiBvbmNsaWNrPSJvcGVuSW52b2ljZXMoJytwLmxpY2Vuc2VfaWQrJyxcJycrZXNjKHAubmFtZSkrJ1wnKSI+8J+nviDQpNCw0LrRgtGD0YDQuCcrKHVucGFpZD4wPycgKCcrdW5wYWlkKycpJzonJykrJzwvYnV0dG9uPicrCiAgICAgIChjLnN0YXRlPT09J2xvY2tlZCcgJiYgcC5zdGF0dXMhPT0nc3VzcGVuZGVkJwogICAgICAgID8gJycKICAgICAgICA6IChwLnN0YXR1cz09PSdzdXNwZW5kZWQnCiAgICAgICAgICAgID8gJzxidXR0b24gY2xhc3M9ImJ0biBnIHNtIiBvbmNsaWNrPSJzZXRTdGF0dXMoJytwLmxpY2Vuc2VfaWQrJyxcJ2FjdGl2ZVwnKSI+4pa2INCQ0LrRgtC40LLQuNGA0LDQuTwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPGJ1dHRvbiBjbGFzcz0iYnRuIGEgc20iIG9uY2xpY2s9InNldFN0YXR1cygnK3AubGljZW5zZV9pZCsnLFwnc3VzcGVuZGVkXCcpIj7ij7gg0KHQv9GA0Lg8L2J1dHRvbj4nKSkrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gZCBzbSIgb25jbGljaz0ic2V0U3RhdHVzKCcrcC5saWNlbnNlX2lkKycsXCdjYW5jZWxsZWRcJykiPuKblCDQkNC90YPQu9C40YDQsNC5PC9idXR0b24+JysKICAgICc8L2Rpdj48L2Rpdj4nOwp9CmZ1bmN0aW9uIHN0YXRlTGFiZWwocyl7cmV0dXJuIHM9PT0nYWN0aXZlJz8n0JDQutGC0LjQstC10L0nOnM9PT0nZ3JhY2UnPyfQkiDQs9GA0LDRgtC40YEnOnM9PT0nbG9ja2VkJz8n0JfQsNC60LvRjtGH0LXQvSc6czt9CmZ1bmN0aW9uIGluZm8obCx2KXtyZXR1cm4gJzxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImwiPicrbCsnPC9kaXY+PGRpdiBjbGFzcz0idmFsIj4nK3YrJzwvZGl2PjwvZGl2Pic7fQoKYXN5bmMgZnVuY3Rpb24gcGluZ0h1YihwKXsKICBjb25zdCBib3g9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbW90ZV8nK3AubGljZW5zZV9pZCk7CiAgaWYoIWJveClyZXR1cm47CiAgdHJ5ewogICAgY29uc3QgcmVzcD1hd2FpdCBmZXRjaChwLmh1Yl91cmwucmVwbGFjZSgvXC8kLywnJykrJy9hcGkucGhwP2FjdGlvbj1saWNlbnNlX3N0YXR1cycpOwogICAgY29uc3Qgaj1hd2FpdCByZXNwLmpzb24oKTsKICAgIGlmKGoub2speyBib3guaW5uZXJIVE1MPSc8c3BhbiBjbGFzcz0iZG90IG9rIj48L3NwYW4+0KXRitCx0YrRgiDQtSDRgdCy0YrRgNC30LDQvSDCtyDQv9C+0YHQu9C10LTQvdC+INGB0YrRgdGC0L7Rj9C90LjQtTogJytzdGF0ZUxhYmVsKGouc3RhdGUpOyB9CiAgICBlbHNlIGJveC5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJkb3QgZXJyIj48L3NwYW4+0KXRitCx0YrRgiDQvtGC0LPQvtCy0L7RgNC4INGBINCz0YDQtdGI0LrQsCc7CiAgfWNhdGNoKGUpeyBib3guaW5uZXJIVE1MPSc8c3BhbiBjbGFzcz0iZG90IGVyciI+PC9zcGFuPtCd0Y/QvNCwINCy0YDRitC30LrQsCDRgSAnK2VzYyhwLmh1Yl91cmwpOyB9Cn0KCi8qIGlzc3VlICovCmZ1bmN0aW9uIG9wZW5Jc3N1ZSgpewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpX3N0YXJ0JykudmFsdWU9bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpX21vZHMnKS5pbm5lckhUTUw9bW9kQ2hpcHMoe30sdHJ1ZSk7CiAgb3Blbk0oJ2lzc3VlTW9kYWwnKTsKfQpmdW5jdGlvbiB0b2dnbGVNb2QoZWwpeyBlbC5jbGFzc0xpc3QudG9nZ2xlKCdvbicpOyBlbC5jbGFzc0xpc3QudG9nZ2xlKCdvZmYnKTsgfQpmdW5jdGlvbiBjb2xsZWN0TW9kcyhjb250YWluZXIpewogIGNvbnN0IG09e307CiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tY2hpcCcpLmZvckVhY2goYz0+eyBpZihjLmNsYXNzTGlzdC5jb250YWlucygnb24nKSkgbVtjLmRhdGFzZXQubW9kXT0xOyB9KTsKICByZXR1cm4gbTsKfQphc3luYyBmdW5jdGlvbiBkb0lzc3VlKCl7CiAgY29uc3QgbmFtZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaV9uYW1lJykudmFsdWUudHJpbSgpOwogIGlmKCFuYW1lKXt0b2FzdCgn0JLRitCy0LXQtNC4INC40LzQtScpO3JldHVybjt9CiAgY29uc3QgcGF5bG9hZD17bmFtZSxjb21wYW55OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpX2NvbXBhbnknKS52YWx1ZSxlbWFpbDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaV9lbWFpbCcpLnZhbHVlLAogICAgcGhvbmU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lfcGhvbmUnKS52YWx1ZSxwbGFuX25hbWU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lfcGxhbicpLnZhbHVlLAogICAgYmFzZV9wcmljZTpwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpX3ByaWNlJykudmFsdWUpfHwwLGJpbGxpbmdfY3ljbGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lfY3ljbGUnKS52YWx1ZSwKICAgIGdyYWNlX2RheXM6cGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lfZ3JhY2UnKS52YWx1ZSl8fDAsc3RhcnRfZGF0ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaV9zdGFydCcpLnZhbHVlLAogICAgbW9kdWxlczpjb2xsZWN0TW9kcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaV9tb2RzJykpfTsKICBjb25zdCByPWF3YWl0IGFwaSgnaXNzdWUnLCdQT1NUJyxwYXlsb2FkKTsKICBpZihyLm9rKXsKICAgIGNsb3NlTSgnaXNzdWVNb2RhbCcpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ld0tleScpLnRleHRDb250ZW50PXIuZGF0YS5saWNlbnNlX2tleTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXdLZXlNZXRhJykudGV4dENvbnRlbnQ9J9CS0LDQu9C40LTQtdC9INC00L4gJytyLmRhdGEudmFsaWRfdW50aWw7CiAgICBvcGVuTSgna2V5TW9kYWwnKTsKICAgIFsnaV9uYW1lJywnaV9jb21wYW55JywnaV9lbWFpbCcsJ2lfcGhvbmUnXS5mb3JFYWNoKGlkPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU9JycpOwogIH0gZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwOiAnKyhyLmVycm9yfHwnJykpOwp9Cgphc3luYyBmdW5jdGlvbiB0b2dnbGVMaWNNb2QobGljSWQsbW9kLGVsKXsKICAvLyB1cGRhdGUgc3RvcmVkIG1vZHVsZXMsIHRoZW4gcHVzaCB0byBjbGllbnQgaHViCiAgY29uc3Qgcj1hd2FpdCBhcGkoJ3BhcnRuZXJzJyk7CiAgY29uc3QgcD1yLmRhdGEuZmluZCh4PT5TdHJpbmcoeC5saWNlbnNlX2lkKT09PVN0cmluZyhsaWNJZCkpOwogIGNvbnN0IG1vZHM9cD9PYmplY3QuYXNzaWduKHt9LHAubW9kdWxlcyk6e307CiAgY29uc3Qgd2lsbE9uPSFtb2RzW21vZF07CiAgaWYod2lsbE9uKW1vZHNbbW9kXT0xOyBlbHNlIGRlbGV0ZSBtb2RzW21vZF07CiAgYXdhaXQgYXBpKCd1cGRhdGVfbGljZW5zZScsJ1BPU1QnLHtsaWNlbnNlX2lkOmxpY0lkLG1vZHVsZXM6bW9kc30pOwogIGVsLmNsYXNzTGlzdC50b2dnbGUoJ29uJyk7ZWwuY2xhc3NMaXN0LnRvZ2dsZSgnb2ZmJyk7CiAgdG9hc3QoKENBVEFMT0dbbW9kXT9DQVRBTE9HW21vZF0ubGFiZWw6bW9kKSsnIOKGkiAnKyh3aWxsT24/J9Cy0LrQu9GO0YfQtdC9Jzon0LjQt9C60LvRjtGH0LXQvScpKTsKICBsb2FkKCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNldFN0YXR1cyhpZCxzdGF0dXMpewogIGlmKHN0YXR1cz09PSdjYW5jZWxsZWQnICYmICFjb25maXJtKCfQkNC90YPQu9C40YDQsNC90LUg0L3QsCDQu9C40YbQtdC90LfQsD8g0KXRitCx0YrRgiDQvdCwINC60LvQuNC10L3RgtCwINGJ0LUg0YHQv9GA0LUg0L3QsNC/0YrQu9C90L4uJykpcmV0dXJuOwogIGF3YWl0IGFwaSgnc2V0X3N0YXR1cycsJ1BPU1QnLHtsaWNlbnNlX2lkOmlkLHN0YXR1c30pOwogIHRvYXN0KCfQodGC0LDRgtGD0YE6ICcrc3RhdHVzKTsgbG9hZCgpOwp9CmFzeW5jIGZ1bmN0aW9uIGV4dGVuZExpYyhpZCl7IGNvbnN0IHI9YXdhaXQgYXBpKCdleHRlbmQnLCdQT1NUJyx7bGljZW5zZV9pZDppZH0pOyBpZihyLm9rKXt0b2FzdCgn0KPQtNGK0LvQttC10L0g0LTQviAnK3IuZGF0YS52YWxpZF91bnRpbCk7bG9hZCgpO30gfQphc3luYyBmdW5jdGlvbiBncmFjZUxpYyhpZCl7CiAgY29uc3QgZD1wcm9tcHQoJ9Ca0L7Qu9C60L4g0LPRgNCw0YLQuNGBINC00L3QuCDQtNCwINC00L7QsdCw0LLRjz8nLCc3Jyk7IGlmKCFkKXJldHVybjsKICBjb25zdCByPWF3YWl0IGFwaSgnYWRkX2dyYWNlJywnUE9TVCcse2xpY2Vuc2VfaWQ6aWQsZGF5czpwYXJzZUludChkKXx8MH0pOwogIGlmKHIub2spe3RvYXN0KCfQo9C00YrQu9C20LXQvSDQtNC+ICcrci5kYXRhLnZhbGlkX3VudGlsKTtsb2FkKCk7fQp9CmFzeW5jIGZ1bmN0aW9uIGRlbFBhcnRuZXIoaWQpeyBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5INC60LvQuNC10L3RgtCwINC4INC70LjRhtC10L3Qt9CwPycpKXJldHVybjsgYXdhaXQgYXBpKCdkZWxldGVfcGFydG5lcicsJ1BPU1QnLHtwYXJ0bmVyX2lkOmlkfSk7IGxvYWQoKTsgfQoKYXN5bmMgZnVuY3Rpb24gb3Blbkludm9pY2VzKGxpY0lkLG5hbWUpewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZUaXRsZScpLnRleHRDb250ZW50PSfQpNCw0LrRgtGD0YDQuCDCtyAnK25hbWU7CiAgY29uc3Qgcj1hd2FpdCBhcGkoJ2ludm9pY2VzJywnR0VUJywnJywnJmxpY2Vuc2VfaWQ9JytsaWNJZCk7CiAgY29uc3QgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZCb2R5Jyk7CiAgY29uc3Qgcm93cz1yLm9rP3IuZGF0YTpbXTsKICBsZXQgaHRtbD0nPHRhYmxlPjx0aGVhZD48dHI+PHRoPuKEljwvdGg+PHRoPtCf0LXRgNC40L7QtDwvdGg+PHRoPtCh0YPQvNCwPC90aD48dGg+0J/QsNC00LXQtjwvdGg+PHRoPtCh0YLQsNGC0YPRgTwvdGg+PHRoPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nOwogIHJvd3MuZm9yRWFjaChpdj0+ewogICAgY29uc3Qgb3ZlcmR1ZT1pdi5wYWlkPT0wICYmIGl2LmR1ZV9kYXRlPG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICAgIGh0bWwrPSc8dHI+PHRkPicrZXNjKGl2Lm51bWJlcikrJzwvdGQ+PHRkIGNsYXNzPSJwbWV0YSI+Jytlc2MoaXYucGVyaW9kX2xhYmVsfHwnJykrJzwvdGQ+PHRkPicrbW9uZXkoaXYuYW1vdW50LGl2LmN1cnJlbmN5KSsnPC90ZD4nKwogICAgICAnPHRkJysob3ZlcmR1ZT8nIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIic6JycpKyc+Jytpdi5kdWVfZGF0ZSsnPC90ZD4nKwogICAgICAnPHRkPicrKGl2LnBhaWQ9PTE/JzxzcGFuIGNsYXNzPSJwaWxsIGFjdGl2ZSI+PHNwYW4gY2xhc3M9ImQiPjwvc3Bhbj7Qv9C70LDRgtC10L3QsDwvc3Bhbj4nOic8c3BhbiBjbGFzcz0icGlsbCAnKyhvdmVyZHVlPydsb2NrZWQnOidncmFjZScpKyciPjxzcGFuIGNsYXNzPSJkIj48L3NwYW4+Jysob3ZlcmR1ZT8n0L/RgNC+0YHRgNC+0YfQtdC90LAnOifRh9Cw0LrQsCcpKyc8L3NwYW4+JykrJzwvdGQ+JysKICAgICAgJzx0ZD4nKyhpdi5wYWlkPT0wPyc8YnV0dG9uIGNsYXNzPSJidG4gZyBzbSIgb25jbGljaz0icGF5SW52b2ljZSgnK2l2LmlkKycpIj7inJMg0J/Qu9Cw0YLQtdC90L48L2J1dHRvbj4nOicnKSsnPC90ZD48L3RyPic7CiAgfSk7CiAgaWYoIXJvd3MubGVuZ3RoKWh0bWwrPSc8dHI+PHRkIGNvbHNwYW49IjYiIGNsYXNzPSJwbWV0YSI+0J3Rj9C80LAg0YTQsNC60YLRg9GA0Lg8L3RkPjwvdHI+JzsKICBib3guaW5uZXJIVE1MPWh0bWwrJzwvdGJvZHk+PC90YWJsZT48YnV0dG9uIGNsYXNzPSJidG4gcyBzbSIgc3R5bGU9Im1hcmdpbi10b3A6MTJweCIgb25jbGljaz0ibmV3SW52b2ljZSgnK2xpY0lkKycpIj4rINCg0YrRh9C90LAg0YTQsNC60YLRg9GA0LA8L2J1dHRvbj4nOwogIG9wZW5NKCdpbnZNb2RhbCcpOwogIGJveC5kYXRhc2V0LmxpYz1saWNJZDsKfQphc3luYyBmdW5jdGlvbiBwYXlJbnZvaWNlKGlkKXsKICBjb25zdCByPWF3YWl0IGFwaSgnaW52b2ljZV9wYWlkJywnUE9TVCcse2ludm9pY2VfaWQ6aWR9KTsKICBpZihyLm9rKXsgdG9hc3QoJ9Cf0LvQsNGC0LXQvdC+IMK3INC70LjRhtC10L3Qt9GK0YIg0YPQtNGK0LvQttC10L0g0LTQviAnK3IuZGF0YS52YWxpZF91bnRpbCk7CiAgICBjb25zdCBsaWNJZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW52Qm9keScpLmRhdGFzZXQubGljOyBvcGVuSW52b2ljZXMobGljSWQsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZUaXRsZScpLnRleHRDb250ZW50LnJlcGxhY2UoJ9Ck0LDQutGC0YPRgNC4IMK3ICcsJycpKTsgbG9hZCgpOyB9Cn0KYXN5bmMgZnVuY3Rpb24gbmV3SW52b2ljZShsaWNJZCl7IGF3YWl0IGFwaSgnY3JlYXRlX2ludm9pY2UnLCdQT1NUJyx7bGljZW5zZV9pZDpsaWNJZH0pOyBvcGVuSW52b2ljZXMobGljSWQsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZUaXRsZScpLnRleHRDb250ZW50LnJlcGxhY2UoJ9Ck0LDQutGC0YPRgNC4IMK3ICcsJycpKTsgfQoKZnVuY3Rpb24gY29weUtleShlbCl7CiAgY29uc3QgdD1lbC50ZXh0Q29udGVudC5yZXBsYWNlKC9b4qeJXHNdKyQvLCcnKS50cmltKCk7CiAgbmF2aWdhdG9yLmNsaXBib2FyZCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodCk7CiAgdG9hc3QoJ9Ca0L7Qv9C40YDQsNC90L46ICcrdCk7Cn0KCmlmKEFVVEhFRCl7IGxvYWRDYXRhbG9nKCkudGhlbihsb2FkKTsgfQo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==', 'licenses/client/guard.php' => 'PD9waHAKLyoqCiAqIENMSUVOVCBHVUFSRCDigJQgaW5jbHVkZSBhdCB0aGUgdG9wIG9mIGEgY2xpZW50IGh1YidzIHByb3RlY3RlZCBwYWdlcy4KICoKICogICByZXF1aXJlIF9fRElSX18uJy9jbGllbnQvZ3VhcmQucGhwJzsKICogICB3dF9ndWFyZCgpOyAgICAgICAgICAgICAgIC8vIGxvY2tzIHRoZSB3aG9sZSBwYWdlIGlmIGxpY2Vuc2UgZXhwaXJlZCBwYXN0IGdyYWNlCiAqICAgaWYgKHd0X21vZHVsZSgnd2F5YmlsbHMnKSkgeyAuLi4gfSAgIC8vIHBlciBwYWlkLW1vZHVsZSBjaGVjawogKgogKiBJdCBjYWxscyB0aGUgbWFzdGVyJ3MgbGljZW5zZS92ZXJpZnkucGhwLCBjYWNoZXMgdGhlIHJlc3VsdCBmb3IgYW4gaG91ciwKICogYW5kIGZhaWxzICJvcGVuIHdpdGggd2FybmluZyIgaWYgdGhlIG1hc3RlciBpcyB0ZW1wb3JhcmlseSB1bnJlYWNoYWJsZQogKiAoc28gYSBuZXR3b3JrIGJsaXAgbmV2ZXIgYnJpY2tzIGEgcGF5aW5nIGNsaWVudCkuCiAqLwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvbGliL2RiLnBocCc7CgpmdW5jdGlvbiB3dF9ndWFyZF9zZXR0aW5ncygpOiBhcnJheSB7CiAgICBzdGF0aWMgJHMgPSBudWxsOwogICAgaWYgKCRzICE9PSBudWxsKSByZXR1cm4gJHM7CiAgICB0cnkgewogICAgICAgICRzID0gd3RfZGIoKS0+cXVlcnkoIlNFTEVDVCBtYXN0ZXJfdXJsLCBsaWNlbnNlX2tleSwgcHJvZHVjdF9uYW1lIEZST00gc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpID86IFtdOwogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7ICRzID0gW107IH0KICAgIHJldHVybiAkczsKfQoKZnVuY3Rpb24gd3RfZ3VhcmRfc3RhdHVzKCk6IGFycmF5IHsKICAgIHN0YXRpYyAkc3RhdHVzID0gbnVsbDsKICAgIGlmICgkc3RhdHVzICE9PSBudWxsKSByZXR1cm4gJHN0YXR1czsKCiAgICAkY2ZnID0gd3RfZ3VhcmRfc2V0dGluZ3MoKTsKICAgICRtYXN0ZXIgPSBydHJpbSgkY2ZnWydtYXN0ZXJfdXJsJ10gPz8gJycsICcvJyk7CiAgICAka2V5ICAgID0gJGNmZ1snbGljZW5zZV9rZXknXSA/PyAnJzsKICAgIGlmICghJG1hc3RlciB8fCAhJGtleSkgewogICAgICAgIHJldHVybiAkc3RhdHVzID0gWydzdGF0ZScgPT4gJ2FjdGl2ZScsICdtb2R1bGVzJyA9PiBbXSwgJ21lc3NhZ2UnID0+ICfQm9C+0LrQsNC70LXQvSDRgNC10LbQuNC8ICjQsdC10Lcg0LvQuNGG0LXQvdC3KS4nLCAnb2ZmbGluZScgPT4gdHJ1ZV07CiAgICB9CgogICAgJGNhY2hlRmlsZSA9IGRpcm5hbWUoX19ESVJfXykgLiAnL2NhY2hlX2xpY2Vuc2UuanNvbic7CiAgICBpZiAoaXNfZmlsZSgkY2FjaGVGaWxlKSAmJiAodGltZSgpIC0gZmlsZW10aW1lKCRjYWNoZUZpbGUpIDwgNjApKSB7CiAgICAgICAgJGNhY2hlZCA9IGpzb25fZGVjb2RlKEBmaWxlX2dldF9jb250ZW50cygkY2FjaGVGaWxlKSwgdHJ1ZSk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRjYWNoZWQpICYmIGlzc2V0KCRjYWNoZWRbJ3N0YXRlJ10pKSByZXR1cm4gJHN0YXR1cyA9ICRjYWNoZWQ7CiAgICB9CgogICAgJHNjaGVtZSA9ICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddICE9PSAnb2ZmJykgPyAnaHR0cHMnIDogJ2h0dHAnOwogICAgJHVybCA9ICRtYXN0ZXIgLiAnL2xpY2Vuc2UvdmVyaWZ5LnBocD9rZXk9JyAuIHVybGVuY29kZSgka2V5KQogICAgICAgIC4gJyZkb21haW49JyAuIHVybGVuY29kZSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10gPz8gJycpCiAgICAgICAgLiAnJnNjaGVtZT0nIC4gdXJsZW5jb2RlKCRzY2hlbWUpOwogICAgJHJlc3AgPSBmYWxzZTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7CiAgICAgICAgJGNoID0gY3VybF9pbml0KCR1cmwpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgW0NVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwgQ1VSTE9QVF9USU1FT1VUID0+IDgsCiAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gZmFsc2UsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gZmFsc2VdKTsKICAgICAgICAkcmVzcCA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIH0gZWxzZWlmIChpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkgewogICAgICAgICRyZXNwID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLAogICAgICAgICAgICBzdHJlYW1fY29udGV4dF9jcmVhdGUoWydodHRwJyA9PiBbJ3RpbWVvdXQnID0+IDhdLCAnc3NsJyA9PiBbJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSwgJ3ZlcmlmeV9wZWVyX25hbWUnID0+IGZhbHNlXV0pKTsKICAgIH0KCiAgICAkZGF0YSA9ICRyZXNwID8ganNvbl9kZWNvZGUoJHJlc3AsIHRydWUpIDogbnVsbDsKICAgIGlmICghaXNfYXJyYXkoJGRhdGEpIHx8ICFpc3NldCgkZGF0YVsnc3RhdGUnXSkpIHsKICAgICAgICAvLyBtYXN0ZXIgdW5yZWFjaGFibGUg4oaSIHNlcnZlIGxhc3QgZ29vZCBjYWNoZSwgZWxzZSBmYWlsIG9wZW4gd2l0aCB3YXJuaW5nCiAgICAgICAgaWYgKGlzc2V0KCRjYWNoZWQpICYmIGlzX2FycmF5KCRjYWNoZWQpKSByZXR1cm4gJHN0YXR1cyA9ICRjYWNoZWQ7CiAgICAgICAgcmV0dXJuICRzdGF0dXMgPSBbJ3N0YXRlJyA9PiAnYWN0aXZlJywgJ21vZHVsZXMnID0+IFtdLCAnb2ZmbGluZScgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9Cb0LjRhtC10L3Qt9C90LjRj9GCINGB0YrRgNCy0YrRgCDQtSDQstGA0LXQvNC10L3QvdC+INC90LXQtNC+0YHRgtGK0L/QtdC9LiddOwogICAgfQogICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRjYWNoZUZpbGUsIGpzb25fZW5jb2RlKCRkYXRhLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSk7CiAgICByZXR1cm4gJHN0YXR1cyA9ICRkYXRhOwp9CgpmdW5jdGlvbiB3dF9zdGF0ZSgpOiBzdHJpbmcgICB7IHJldHVybiB3dF9ndWFyZF9zdGF0dXMoKVsnc3RhdGUnXSA/PyAnYWN0aXZlJzsgfQpmdW5jdGlvbiB3dF9tb2R1bGUoc3RyaW5nICRtKTogYm9vbCB7CiAgICAkbW9kcyA9IHd0X2d1YXJkX3N0YXR1cygpWydtb2R1bGVzJ10gPz8gW107CiAgICByZXR1cm4gIWVtcHR5KCRtb2RzWyRtXSk7Cn0KCi8qKiBSZW5kZXJzIGEgZnVsbC1wYWdlIGxvY2sgYW5kIHN0b3BzIGV4ZWN1dGlvbiB3aGVuIGxpY2Vuc2UgaXMgbG9ja2VkLiAqLwpmdW5jdGlvbiB3dF9ndWFyZCgpOiB2b2lkIHsKICAgICRzID0gd3RfZ3VhcmRfc3RhdHVzKCk7CiAgICBpZiAoKCRzWydzdGF0ZSddID8/ICdhY3RpdmUnKSA9PT0gJ2xvY2tlZCcgfHwgKCRzWydzdGF0ZSddID8/ICcnKSA9PT0gJ2ludmFsaWQnKSB7CiAgICAgICAgd3RfcmVuZGVyX2xvY2soJHMpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCmZ1bmN0aW9uIHd0X3JlbmRlcl9sb2NrKGFycmF5ICRzKTogdm9pZCB7CiAgICAkcHJvZHVjdCA9IGh0bWxzcGVjaWFsY2hhcnMod3RfZ3VhcmRfc2V0dGluZ3MoKVsncHJvZHVjdF9uYW1lJ10gPz8gJ1dlYnRyaXhpYSBIdWInKTsKICAgICRtc2cgPSBodG1sc3BlY2lhbGNoYXJzKCRzWydtZXNzYWdlJ10gPz8gJ9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nKTsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDIpOwogICAgZWNobyAnPCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iYmciPjxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KICAgIDx0aXRsZT7Qm9C40YbQtdC90LfRitGCINC1INC90LXQsNC60YLQuNCy0LXQvTwvdGl0bGU+CiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVNvcmE6d2dodEA0MDA7NjAwOzcwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CiAgICA8c3R5bGU+CiAgICBib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OlNvcmEsc2Fucy1zZXJpZjttaW4taGVpZ2h0OjEwMHZoO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIGJhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzMCUgMCUsIzFhMTAzMCwjMGEwYTEyIDYwJSk7Y29sb3I6I2U4ZThmMDtwYWRkaW5nOjI0cHh9CiAgICAuY2FyZHttYXgtd2lkdGg6NDQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsKICAgIGJvcmRlci1yYWRpdXM6MjRweDtwYWRkaW5nOjQ0cHggMzRweDtiYWNrZHJvcC1maWx0ZXI6Ymx1cigyMHB4KX0KICAgIC5pY3tmb250LXNpemU6NTJweDttYXJnaW4tYm90dG9tOjE0cHh9CiAgICBoMXtmb250LXNpemU6MjJweDttYXJnaW46MCAwIDEwcHh9CiAgICBwe2NvbG9yOiNhMGEwYzA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS42O21hcmdpbjowIDAgOHB4fQogICAgLnByb2R7bWFyZ2luLXRvcDoyMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YTZhOGE7bGV0dGVyLXNwYWNpbmc6LjFlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9CiAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImljIj7wn5SSPC9kaXY+PGgxPtCl0YrQsdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvTwvaDE+CiAgICA8cD4nIC4gJG1zZyAuICc8L3A+CiAgICA8cD7QodCy0YrRgNC20LXRgtC1INGB0LUg0YEg0LLQsNGI0LjRjyDQtNC+0YHRgtCw0LLRh9C40Log0LfQsCDQv9C+0LTQvdC+0LLRj9Cy0LDQvdC1LjwvcD4KICAgIDxkaXYgY2xhc3M9InByb2QiPicgLiAkcHJvZHVjdCAuICc8L2Rpdj4KICAgIDwvZGl2PjwvYm9keT48L2h0bWw+JzsKfQo=', 'licenses/config.example.php' => 'PD9waHAKLy8g0JrQvtC/0LjRgNCw0Lkg0LrQsNGC0L4gY29uZmlnLnBocCDQuCDQv9C+0L/RitC70L3QuCwg0LDQutC+IGluc3RhbGwucGhwINC90Y/QvNCwINC/0YDQsNCy0LAg0LTQsCDQv9C40YjQtSDRhNCw0LnQuy4KZGVmaW5lKCdEQl9IT1NUJywnbG9jYWxob3N0Jyk7CmRlZmluZSgnREJfTkFNRScsJ2NwYW5lbHVzZXJfaHViJyk7CmRlZmluZSgnREJfVVNFUicsJ2NwYW5lbHVzZXJfaHVidXNlcicpOwpkZWZpbmUoJ0RCX1BBU1MnLCfQv9Cw0YDQvtC70LBf0LfQsF/QsdCw0LfQsNGC0LAnKTsK', 'licenses/lib/core.php' => 'PD9waHAKLyoqCiAqIFdlYnRyaXhpYSBIdWIg4oCUIENvcmU6IHNjaGVtYSwgbGljZW5zaW5nIHN0YXRlIG1hY2hpbmUsIGhlbHBlcnMuCiAqLwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvZGIucGhwJzsKCi8qKiBDcmVhdGUgYWxsIHRhYmxlcyAoaWRlbXBvdGVudCkuICovCmZ1bmN0aW9uIHd0X2luc3RhbGxfc2NoZW1hKFBETyAkcGRvKTogdm9pZCB7CiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBzZXR0aW5ncyAoCiAgICAgICAgaWQgSU5UIFBSSU1BUlkgS0VZIERFRkFVTFQgMSwKICAgICAgICByb2xlIFZBUkNIQVIoMTApIERFRkFVTFQgJ2NsaWVudCcsICAgICAgICAgICAgLS0gJ21hc3Rlcicgb3IgJ2NsaWVudCcKICAgICAgICBwcm9kdWN0X25hbWUgVkFSQ0hBUigxNTApIERFRkFVTFQgJ1dlYnRyaXhpYSBIdWInLAogICAgICAgIHByaW1hcnlfY29sb3IgVkFSQ0hBUigyMCkgREVGQVVMVCAnIzZjNjNmZicsCiAgICAgICAgYWRtaW5fcGFzc19oYXNoIFZBUkNIQVIoMjU1KSwKICAgICAgICBtYXN0ZXJfdXJsIFZBUkNIQVIoMjU1KSwgICAgICAgICAgICAgICAgICAgICAgIC0tIChjbGllbnQpIHdoZXJlIHRvIHZlcmlmeSBsaWNlbnNlCiAgICAgICAgbGljZW5zZV9rZXkgVkFSQ0hBUig2MCksICAgICAgICAgICAgICAgICAgICAgICAtLSAoY2xpZW50KSBvd24ga2V5CiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcGFydG5lcnMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBuYW1lIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCwKICAgICAgICBlbWFpbCBWQVJDSEFSKDIwMCksCiAgICAgICAgcGhvbmUgVkFSQ0hBUig2MCksCiAgICAgICAgY29tcGFueSBWQVJDSEFSKDIwMCksCiAgICAgICAgZWlrIFZBUkNIQVIoNDApLAogICAgICAgIG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgbGljZW5zZXMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBwYXJ0bmVyX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBsaWNlbnNlX2tleSBWQVJDSEFSKDYwKSBOT1QgTlVMTCBVTklRVUUsCiAgICAgICAgaHViX3VybCBWQVJDSEFSKDI1NSksCiAgICAgICAgc3RhdHVzIEVOVU0oJ2FjdGl2ZScsJ3N1c3BlbmRlZCcsJ2NhbmNlbGxlZCcpIERFRkFVTFQgJ2FjdGl2ZScsCiAgICAgICAgcGxhbl9uYW1lIFZBUkNIQVIoMTIwKSBERUZBVUxUICdTdGFuZGFyZCcsCiAgICAgICAgYmFzZV9wcmljZSBERUNJTUFMKDEwLDIpIERFRkFVTFQgMCwKICAgICAgICBjdXJyZW5jeSBWQVJDSEFSKDEwKSBERUZBVUxUICdFVVInLAogICAgICAgIGJpbGxpbmdfY3ljbGUgRU5VTSgnbW9udGhseScsJ3llYXJseScpIERFRkFVTFQgJ21vbnRobHknLAogICAgICAgIHZhbGlkX3VudGlsIERBVEUgTk9UIE5VTEwsCiAgICAgICAgZ3JhY2VfZGF5cyBJTlQgREVGQVVMVCA3LAogICAgICAgIG1vZHVsZXMgVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEpTT04ge3dheWJpbGxzOjEsLi4ufQogICAgICAgIGlzc3VlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICBsYXN0X2NoZWNrX2F0IFRJTUVTVEFNUCBOVUxMLAogICAgICAgIGxhc3RfY2hlY2tfaXAgVkFSQ0hBUig2MCksCiAgICAgICAgbm90ZXMgVEVYVCwKICAgICAgICBJTkRFWChwYXJ0bmVyX2lkKQogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgaW52b2ljZXMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBsaWNlbnNlX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBudW1iZXIgVkFSQ0hBUig0MCksCiAgICAgICAgcGVyaW9kX2xhYmVsIFZBUkNIQVIoNjApLAogICAgICAgIGFtb3VudCBERUNJTUFMKDEwLDIpIERFRkFVTFQgMCwKICAgICAgICBjdXJyZW5jeSBWQVJDSEFSKDEwKSBERUZBVUxUICdFVVInLAogICAgICAgIGlzc3VlX2RhdGUgREFURSwKICAgICAgICBkdWVfZGF0ZSBEQVRFLAogICAgICAgIHBhaWQgVElOWUlOVCgxKSBERUZBVUxUIDAsCiAgICAgICAgcGFpZF9hdCBEQVRFIE5VTEwsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICBJTkRFWChsaWNlbnNlX2lkKQogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZXZlbnRzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgbGljZW5zZV9pZCBJTlQsCiAgICAgICAga2luZCBWQVJDSEFSKDQwKSwKICAgICAgICBkZXRhaWwgVkFSQ0hBUigyNTUpLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9dXRmOG1iNCIpOwoKICAgIGlmICgoaW50KSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzZXR0aW5ncyIpLT5mZXRjaENvbHVtbigpID09PSAwKSB7CiAgICAgICAgJHBkby0+ZXhlYygiSU5TRVJUIElOVE8gc2V0dGluZ3MgKGlkLCByb2xlKSBWQUxVRVMgKDEsICdjbGllbnQnKSIpOwogICAgfQp9CgovKiogQXZhaWxhYmxlIGJpbGxhYmxlIG1vZHVsZXMgKGxhYmVsICsgZGVmYXVsdCBtb250aGx5IHByaWNlIEVVUikuICovCmZ1bmN0aW9uIHd0X21vZHVsZXMoKTogYXJyYXkgewogICAgcmV0dXJuIFsKICAgICAgICAncHJvamVjdHMnICAgID0+IFsnbGFiZWwnID0+ICfQn9GA0L7QtdC60YLQuCcsICAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdjbGllbnRzJyAgICAgPT4gWydsYWJlbCcgPT4gJ9Ca0LvQuNC10L3RgtC4JywgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2ZpbmFuY2UnICAgICA9PiBbJ2xhYmVsJyA9PiAn0KTQuNC90LDQvdGB0LgnLCAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAndGFza3MnICAgICAgID0+IFsnbGFiZWwnID0+ICfQl9Cw0LTQsNGH0LgnLCAgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ29mZmVycycgICAgICA9PiBbJ2xhYmVsJyA9PiAn0J7RhNC10YDRgtC4JywgICAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdjb250cmFjdHMnICAgPT4gWydsYWJlbCcgPT4gJ9CU0L7Qs9C+0LLQvtGA0LgnLCAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdjYWxlbmRhcicgICAgPT4gWydsYWJlbCcgPT4gJ9Ca0LDQu9C10L3QtNCw0YAnLCAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdob3N0aW5nJyAgICAgPT4gWydsYWJlbCcgPT4gJ9Cl0L7RgdGC0LjQvdCz0LgnLCAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdwYXNzd29yZHMnICAgPT4gWydsYWJlbCcgPT4gJ9CU0L7RgdGC0YrQv9C4JywgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ25vdGVzJyAgICAgICA9PiBbJ2xhYmVsJyA9PiAn0JHQtdC70LXQttC60LgnLCAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAncmVwb3J0cycgICAgID0+IFsnbGFiZWwnID0+ICfQntGC0YfQtdGC0LgnLCAgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ3ByZXNlbmNlJyAgICA9PiBbJ2xhYmVsJyA9PiAn0J/RgNC40YHRitGB0YLQstC40LUnLCAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAndGFyZ2V0cycgICAgID0+IFsnbGFiZWwnID0+ICfQlNC90LXQstC90Lgg0YLQsNGA0LPQtdGC0LgnLCAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICd3b3JrcmVwb3J0JyAgPT4gWydsYWJlbCcgPT4gJ9Cg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgicsICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ3VzZXJzJyAgICAgICA9PiBbJ2xhYmVsJyA9PiAn0J/QvtGC0YDQtdCx0LjRgtC10LvQuCcsICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2ludm9pY2luZycgICA9PiBbJ2xhYmVsJyA9PiAn0KTQsNC60YLRg9GA0LjRgNCw0L3QtScsICAgICAgICAgICdwcmljZScgPT4gOF0sCiAgICAgICAgJ2hyX3JlcXVlc3RzJyA9PiBbJ2xhYmVsJyA9PiAn0JzQvtC70LHQuCAoSFIpJywgICAgICAgICAgICdwcmljZScgPT4gM10sCiAgICAgICAgJ3dheWJpbGxzJyAgICA9PiBbJ2xhYmVsJyA9PiAn0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtScsICAgICAgICAncHJpY2UnID0+IDVdLAogICAgICAgICdodWJzX21hbmFnZW1lbnQnID0+IFsnbGFiZWwnID0+ICfQn9Cw0YDRgtC90YzQvtGA0YHQutC4INGF0YrQsdC+0LLQtScsICdwcmljZScgPT4gMF0sCiAgICBdOwp9CgpmdW5jdGlvbiB3dF9nZW5fa2V5KCk6IHN0cmluZyB7CiAgICAvLyBXVC1YWFhYLVhYWFgtWFhYWC1YWFhYIChyZWFkYWJsZSwgdW5hbWJpZ3VvdXMgY2hhcnMpCiAgICAkYWJjID0gJ0FCQ0RFRkdISktNTlBRUlNUVVZXWFlaMjM0NTY3ODknOwogICAgJHBhcnRzID0gW107CiAgICBmb3IgKCRnID0gMDsgJGcgPCA0OyAkZysrKSB7CiAgICAgICAgJHMgPSAnJzsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA0OyAkaSsrKSAkcyAuPSAkYWJjW3JhbmRvbV9pbnQoMCwgc3RybGVuKCRhYmMpIC0gMSldOwogICAgICAgICRwYXJ0c1tdID0gJHM7CiAgICB9CiAgICByZXR1cm4gJ1dULScgLiBpbXBsb2RlKCctJywgJHBhcnRzKTsKfQoKZnVuY3Rpb24gd3RfbG9nKFBETyAkcGRvLCA/aW50ICRsaWNlbnNlSWQsIHN0cmluZyAka2luZCwgc3RyaW5nICRkZXRhaWwgPSAnJyk6IHZvaWQgewogICAgJHN0ID0gJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gZXZlbnRzIChsaWNlbnNlX2lkLCBraW5kLCBkZXRhaWwpIFZBTFVFUyAoPyw/LD8pIik7CiAgICAkc3QtPmV4ZWN1dGUoWyRsaWNlbnNlSWQsICRraW5kLCAkZGV0YWlsXSk7Cn0KCi8qKgogKiBUaGUgbGljZW5zaW5nIHN0YXRlIG1hY2hpbmUg4oCUIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoLgogKiBSZXR1cm5zOiBzdGF0ZSA9IGFjdGl2ZSB8IGdyYWNlIHwgbG9ja2VkIHwgaW52YWxpZAogKi8KZnVuY3Rpb24gd3RfbGljZW5zZV9zdGF0ZShhcnJheSAkbGljLCA/c3RyaW5nICR0b2RheSA9IG51bGwpOiBhcnJheSB7CiAgICAkdG9kYXkgPSAkdG9kYXkgPzogZGF0ZSgnWS1tLWQnKTsKCiAgICBpZiAoaW5fYXJyYXkoJGxpY1snc3RhdHVzJ10sIFsnc3VzcGVuZGVkJywgJ2NhbmNlbGxlZCddLCB0cnVlKSkgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdGF0ZScgICAgICAgPT4gJ2xvY2tlZCcsCiAgICAgICAgICAgICdyZWFzb24nICAgICAgPT4gJGxpY1snc3RhdHVzJ10gPT09ICdjYW5jZWxsZWQnID8gJ2NhbmNlbGxlZCcgOiAnc3VzcGVuZGVkJywKICAgICAgICAgICAgJ3ZhbGlkX3VudGlsJyA9PiAkbGljWyd2YWxpZF91bnRpbCddLAogICAgICAgICAgICAnZ3JhY2VfdW50aWwnID0+IG51bGwsCiAgICAgICAgICAgICdtZXNzYWdlJyAgICAgPT4gJGxpY1snc3RhdHVzJ10gPT09ICdjYW5jZWxsZWQnCiAgICAgICAgICAgICAgICA/ICfQm9C40YbQtdC90LfRitGCINC1INCw0L3Rg9C70LjRgNCw0L0uJwogICAgICAgICAgICAgICAgOiAn0JvQuNGG0LXQvdC30YrRgiDQtSDQstGA0LXQvNC10L3QvdC+INGB0L/RgNGP0L0g0L7RgiDQtNC+0YHRgtCw0LLRh9C40LrQsC4nLAogICAgICAgIF07CiAgICB9CgogICAgJHZhbGlkVW50aWwgPSAkbGljWyd2YWxpZF91bnRpbCddOwogICAgJGdyYWNlRGF5cyAgPSAoaW50KSgkbGljWydncmFjZV9kYXlzJ10gPz8gMCk7CiAgICAkZ3JhY2VVbnRpbCA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCR2YWxpZFVudGlsIC4gJyArJyAuICRncmFjZURheXMgLiAnIGRheXMnKSk7CgogICAgaWYgKCR0b2RheSA8PSAkdmFsaWRVbnRpbCkgewogICAgICAgIHJldHVybiBbJ3N0YXRlJyA9PiAnYWN0aXZlJywgJ3JlYXNvbicgPT4gJ29rJywKICAgICAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWwsICdncmFjZV91bnRpbCcgPT4gJGdyYWNlVW50aWwsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9CQ0LrRgtC40LLQtdC9INC70LjRhtC10L3Qty4nXTsKICAgIH0KICAgIGlmICgkdG9kYXkgPD0gJGdyYWNlVW50aWwpIHsKICAgICAgICByZXR1cm4gWydzdGF0ZScgPT4gJ2dyYWNlJywgJ3JlYXNvbicgPT4gJ2dyYWNlJywKICAgICAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWwsICdncmFjZV91bnRpbCcgPT4gJGdyYWNlVW50aWwsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9Cf0LvQsNGJ0LDQvdC10YLQviDQtSDQt9Cw0LHQsNCy0LXQvdC+LiDQpdGK0LHRitGCINGJ0LUg0YHQv9GA0LUg0L3QsCAnIC4gJGdyYWNlVW50aWwgLiAnINCw0LrQviDQvdC1INCx0YrQtNC1INC/0LvQsNGC0LXQvdC+LiddOwogICAgfQogICAgcmV0dXJuIFsnc3RhdGUnID0+ICdsb2NrZWQnLCAncmVhc29uJyA9PiAnZXhwaXJlZCcsCiAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWwsICdncmFjZV91bnRpbCcgPT4gJGdyYWNlVW50aWwsCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAn0JvQuNGG0LXQvdC30YrRgiDQtSDQuNC30YLQtdC60YrQuy4g0KHQstGK0YDQttC10YLQtSDRgdC1INGBINC00L7RgdGC0LDQstGH0LjQutCwINC30LAg0L/QvtC00L3QvtCy0Y/QstCw0L3QtS4nXTsKfQoKZnVuY3Rpb24gd3RfYWRkX21vbnRocyhzdHJpbmcgJGRhdGUsIGludCAkbiwgc3RyaW5nICRjeWNsZSA9ICdtb250aGx5Jyk6IHN0cmluZyB7CiAgICAkbW9kID0gJGN5Y2xlID09PSAneWVhcmx5JyA/ICgkbiAuICcgeWVhcicpIDogKCRuIC4gJyBtb250aCcpOwogICAgcmV0dXJuIGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCRkYXRlIC4gJyArJyAuICRtb2QpKTsKfQo=', 'licenses/lib/db.php' => 'PD9waHAKLyoqCiAqIFdlYnRyaXhpYSBIdWIg4oCUINCx0LDQt9CwINC00LDQvdC90LguCiAqINCh0L/QvtC00LXQu9C10L3QsCBQRE8g0LLRgNGK0LfQutCwLiDQp9C10YLQtSDQtNCw0L3QvdC40YLQtSDQvtGCIC9jb25maWcucGhwLCDRgdGK0LfQtNCw0LTQtdC9INC/0YDQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4KICovCmlmICghZGVmaW5lZCgnV1RfQ09ORklHX1BBVEgnKSkgewogICAgLy8g0JvQuNGG0LXQvdC30L3QuNGP0YIg0LzQvtC00YPQuyDRgdGC0L7QuCDQsiBodWIud2VidHJpeGlhLmNvbS9saWNlbnNlcy8g0Lgg0L/QvtC70LfQstCwCiAgICAvLyDQvtGB0L3QvtCy0L3QsNGC0LAg0LHQsNC30LAg0L3QsCBIdWIuINCi0YrRgNGB0LggY29uZmlnLnBocCDQv9GK0YDQstC+INGC0YPQuiwg0L/QvtGB0LvQtSDQsiByb290INC/0LDQv9C60LDRgtCwLgogICAgJGNhbmRpZGF0ZXMgPSBbCiAgICAgICAgZGlybmFtZShfX0RJUl9fKSAuICcvY29uZmlnLnBocCcsICAgICAgICAgICAgLy8gbGljZW5zZXMvY29uZmlnLnBocCAob3duKQogICAgICAgIGRpcm5hbWUoZGlybmFtZShfX0RJUl9fKSkgLiAnL2NvbmZpZy5waHAnLCAgIC8vIGh1YiByb290IGNvbmZpZy5waHAgKHNoYXJlZCkKICAgIF07CiAgICAkZm91bmQgPSAnJzsKICAgIGZvcmVhY2ggKCRjYW5kaWRhdGVzIGFzICRjKSB7IGlmIChmaWxlX2V4aXN0cygkYykpIHsgJGZvdW5kID0gJGM7IGJyZWFrOyB9IH0KICAgIGRlZmluZSgnV1RfQ09ORklHX1BBVEgnLCAkZm91bmQgPzogJGNhbmRpZGF0ZXNbMF0pOwp9CgpmdW5jdGlvbiB3dF9jb25maWdfZXhpc3RzKCk6IGJvb2wgewogICAgcmV0dXJuIGZpbGVfZXhpc3RzKFdUX0NPTkZJR19QQVRIKTsKfQoKZnVuY3Rpb24gd3RfZGIoKTogUERPIHsKICAgIHN0YXRpYyAkcGRvID0gbnVsbDsKICAgIGlmICgkcGRvIGluc3RhbmNlb2YgUERPKSByZXR1cm4gJHBkbzsKCiAgICBpZiAoIXd0X2NvbmZpZ19leGlzdHMoKSkgewogICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdOT19DT05GSUcnKTsKICAgIH0KICAgIHJlcXVpcmVfb25jZSBXVF9DT05GSUdfUEFUSDsKCiAgICAkaG9zdCA9IGRlZmluZWQoJ0RCX0hPU1QnKSA/IERCX0hPU1QgOiAnbG9jYWxob3N0JzsKICAgICRuYW1lID0gZGVmaW5lZCgnREJfTkFNRScpID8gREJfTkFNRSA6ICcnOwogICAgJHVzZXIgPSBkZWZpbmVkKCdEQl9VU0VSJykgPyBEQl9VU0VSIDogJyc7CiAgICAkcGFzcyA9IGRlZmluZWQoJ0RCX1BBU1MnKSA/IERCX1BBU1MgOiAnJzsKCiAgICAkcGRvID0gbmV3IFBETygKICAgICAgICAibXlzcWw6aG9zdD17JGhvc3R9O2RibmFtZT17JG5hbWV9O2NoYXJzZXQ9dXRmOG1iNCIsCiAgICAgICAgJHVzZXIsCiAgICAgICAgJHBhc3MsCiAgICAgICAgWwogICAgICAgICAgICBQRE86OkFUVFJfRVJSTU9ERSAgICAgICAgICAgID0+IFBETzo6RVJSTU9ERV9FWENFUFRJT04sCiAgICAgICAgICAgIFBETzo6QVRUUl9ERUZBVUxUX0ZFVENIX01PREUgPT4gUERPOjpGRVRDSF9BU1NPQywKICAgICAgICAgICAgUERPOjpBVFRSX0VNVUxBVEVfUFJFUEFSRVMgICA9PiBmYWxzZSwKICAgICAgICBdCiAgICApOwogICAgcmV0dXJuICRwZG87Cn0KCi8qKiBKU09OINC+0YLQs9C+0LLQvtGAICovCmZ1bmN0aW9uIHd0X2pzb24oJGRhdGEsIGludCAkY29kZSA9IDIwMCk6IHZvaWQgewogICAgaHR0cF9yZXNwb25zZV9jb2RlKCRjb2RlKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKCRkYXRhLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIHd0X29rKCRkYXRhID0gdHJ1ZSk6IHZvaWQgIHsgd3RfanNvbihbJ29rJyA9PiB0cnVlLCAgJ2RhdGEnID0+ICRkYXRhXSk7IH0KZnVuY3Rpb24gd3RfZXJyKHN0cmluZyAkbXNnLCBpbnQgJGNvZGUgPSA0MDApOiB2b2lkIHsgd3RfanNvbihbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAkbXNnXSwgJGNvZGUpOyB9CgovKiog0KfQtdGC0LUgSlNPTiBib2R5ICovCmZ1bmN0aW9uIHd0X2JvZHkoKTogYXJyYXkgewogICAgJHJhdyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwogICAgJGogPSBqc29uX2RlY29kZSgkcmF3LCB0cnVlKTsKICAgIHJldHVybiBpc19hcnJheSgkaikgPyAkaiA6IFtdOwp9Cg==', 'licenses/license/verify.php' => 'PD9waHAKLyoqCiAqIFBVQkxJQyBlbmRwb2ludCDigJQgY2xpZW50IGh1YnMgY2FsbCB0aGlzIHRvIGxlYXJuIHRoZWlyIGxpY2Vuc2Ugc3RhdGUuCiAqIEdFVCAgbGljZW5zZS92ZXJpZnkucGhwP2tleT1XVC0uLi4uJmRvbWFpbj1odWIuY2xpZW50LmNvbQogKiBSZXR1cm5zIEpTT046IHsgb2ssIHN0YXRlLCB2YWxpZF91bnRpbCwgZ3JhY2VfdW50aWwsIG1vZHVsZXMsIHByb2R1Y3RfbmFtZSwgbWVzc2FnZSB9CiAqLwpoZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogKicpOwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvbGliL2NvcmUucGhwJzsKCnRyeSB7CiAgICAkcGRvID0gd3RfZGIoKTsKfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICB3dF9qc29uKFsnb2snID0+IGZhbHNlLCAnc3RhdGUnID0+ICdpbnZhbGlkJywgJ21lc3NhZ2UnID0+ICfQm9C40YbQtdC90LfQvdC40Y/RgiDRgdGK0YDQstGK0YAg0L3QtSDQtSDQutC+0L3RhNC40LPRg9GA0LjRgNCw0L0uJ10pOwp9Cgoka2V5ICAgID0gdHJpbSgkX0dFVFsna2V5J10gPz8gJycpOwokZG9tYWluID0gdHJpbSgkX0dFVFsnZG9tYWluJ10gPz8gJycpOwokc2NoZW1lID0gc3RydG9sb3dlcih0cmltKCRfR0VUWydzY2hlbWUnXSA/PyAnaHR0cHMnKSk7CmlmICgka2V5ID09PSAnJykgewogICAgd3RfanNvbihbJ29rJyA9PiB0cnVlLCAnc3RhdGUnID0+ICdpbnZhbGlkJywgJ21lc3NhZ2UnID0+ICfQm9C40L/RgdCy0LAg0LvQuNGG0LXQvdC30LXQvSDQutC70Y7Rhy4nXSk7Cn0KCiRzdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gbGljZW5zZXMgV0hFUkUgbGljZW5zZV9rZXkgPSA/Iik7CiRzdC0+ZXhlY3V0ZShbJGtleV0pOwokbGljID0gJHN0LT5mZXRjaCgpOwoKaWYgKCEkbGljKSB7CiAgICB3dF9qc29uKFsnb2snID0+IHRydWUsICdzdGF0ZScgPT4gJ2ludmFsaWQnLCAnbWVzc2FnZScgPT4gJ9Cd0LXQstCw0LvQuNC00LXQvSDQu9C40YbQtdC90LfQtdC9INC60LvRjtGHLiddKTsKfQoKLy8gcmVjb3JkIHRoZSBjaGVjawokaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA/PyAnJzsKJGh1YlVybCA9ICcnOwppZiAoJGRvbWFpbiAhPT0gJycpIHsKICAgICRodWJVcmwgPSBwcmVnX21hdGNoKCd+Xmh0dHBzPzovL35pJywgJGRvbWFpbikKICAgICAgICA/IHJ0cmltKCRkb21haW4sICcvJykKICAgICAgICA6ICgoJHNjaGVtZSA9PT0gJ2h0dHAnID8gJ2h0dHAnIDogJ2h0dHBzJykgLiAnOi8vJyAuICRkb21haW4pOwp9CiR1cGQgPSAkcGRvLT5wcmVwYXJlKCJVUERBVEUgbGljZW5zZXMgU0VUIGxhc3RfY2hlY2tfYXQgPSBOT1coKSwgbGFzdF9jaGVja19pcCA9ID8sIGh1Yl91cmwgPSBDT0FMRVNDRShOVUxMSUYoPywnJyksIGh1Yl91cmwpIFdIRVJFIGlkID0gPyIpOwokdXBkLT5leGVjdXRlKFskaXAsICRodWJVcmwsICRsaWNbJ2lkJ11dKTsKCiRzdGF0ZSA9IHd0X2xpY2Vuc2Vfc3RhdGUoJGxpYyk7CiRtb2R1bGVzID0ganNvbl9kZWNvZGUoJGxpY1snbW9kdWxlcyddID8/ICd7fScsIHRydWUpID86IFtdOwoKJHByb2R1Y3ROYW1lID0gJ1dlYnRyaXhpYSBIdWInOwp0cnkgewogICAgJHMgPSAkcGRvLT5xdWVyeSgiU0VMRUNUIHByb2R1Y3RfbmFtZSBGUk9NIHNldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgIGlmICgkcyAmJiAhZW1wdHkoJHNbJ3Byb2R1Y3RfbmFtZSddKSkgJHByb2R1Y3ROYW1lID0gJHNbJ3Byb2R1Y3RfbmFtZSddOwp9IGNhdGNoIChUaHJvd2FibGUgJGUpIHt9Cgp3dF9qc29uKFsKICAgICdvaycgICAgICAgICAgID0+IHRydWUsCiAgICAnc3RhdGUnICAgICAgICA9PiAkc3RhdGVbJ3N0YXRlJ10sCiAgICAncmVhc29uJyAgICAgICA9PiAkc3RhdGVbJ3JlYXNvbiddLAogICAgJ3ZhbGlkX3VudGlsJyAgPT4gJHN0YXRlWyd2YWxpZF91bnRpbCddLAogICAgJ2dyYWNlX3VudGlsJyAgPT4gJHN0YXRlWydncmFjZV91bnRpbCddLAogICAgJ21vZHVsZXMnICAgICAgPT4gJG1vZHVsZXMsCiAgICAncHJvZHVjdF9uYW1lJyA9PiAkcHJvZHVjdE5hbWUsCiAgICAnbWVzc2FnZScgICAgICA9PiAkc3RhdGVbJ21lc3NhZ2UnXSwKICAgICdjaGVja2VkX2F0JyAgID0+IGRhdGUoJ2MnKSwKXSk7Cg==', 'licenses/setup.php' => 'PD9waHAKLyoqCiAqIHNldHVwLnBocCDigJQg0LXQtNC90L7QutGA0LDRgtC90LAg0L3QsNGB0YLRgNC+0LnQutCwINC90LAg0LzQvtC00YPQuyDigJ7Qn9Cw0YDRgtC90YzQvtGA0Lgv0JvQuNGG0LXQvdC30LjigJwKICog0JLQqtCi0KDQlSDQsiDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRjyBodWIud2VidHJpeGlhLmNvbSAo0L/QsNC/0LrQsCAvbGljZW5zZXMvKS4KICoKICog0J/QvtC70LfQstCwINGB0YrRidCw0YLQsCDQsdCw0LfQsCDQvdCwINGF0YrQsdCwICjQvdCw0LzQuNGA0LAgY29uZmlnLnBocCDQsNCy0YLQvtC80LDRgtC40YfQvdC+KSDigJQKICog0L3QtSDRgdGK0LfQtNCw0LLQsCDQvdC+0LLQsCDQsdCw0LfQsCwg0L3QtSDQv9C40L/QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRgtC1INGC0Lgg0LTQsNC90L3QuCwg0YHQsNC80L4KICog0LTQvtCx0LDQstGPINC70LjRhtC10L3Qt9C90LjRgtC1INGC0LDQsdC70LjRhtC4INC4INC30LDQtNCw0LLQsCDQv9Cw0YDQvtC70LAg0LfQsCDQv9Cw0L3QtdC70LAuCiAqCiAqINCh0LvQtdC0INC60LDRgtC+INC30LDQtNCw0LTQtdGIINC/0LDRgNC+0LvQsNGC0LAsINCY0JfQotCg0JjQmSDRgtC+0LfQuCDRhNCw0LnQuy4KICovCmVycm9yX3JlcG9ydGluZyhFX0FMTCAmIH5FX0RFUFJFQ0FURUQgJiB+RV9OT1RJQ0UpOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL2NvcmUucGhwJzsKCmhlYWRlcl9yZW1vdmUoKTsKaWYgKCgkX0dFVFsnZG8nXSA/PyAnJykgPT09ICdydW4nKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAgJGIgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKSwgdHJ1ZSkgPzogW107CiAgICB0cnkgewogICAgICAgICRwZG8gPSB3dF9kYigpOwogICAgICAgIHd0X2luc3RhbGxfc2NoZW1hKCRwZG8pOyAgICAgICAgICAgICAgLy8gYWRkcyBsaWNlbnNpbmcgdGFibGVzIChpZGVtcG90ZW50KQogICAgICAgICRoYXNoID0gcGFzc3dvcmRfaGFzaCgkYlsnYWRtaW5fcGFzcyddID8/ICcnLCBQQVNTV09SRF9ERUZBVUxUKTsKICAgICAgICAkcHJvZHVjdCA9IHRyaW0oJGJbJ3Byb2R1Y3RfbmFtZSddID8/ICdXZWJ0cml4aWEgSHViJykgPzogJ1dlYnRyaXhpYSBIdWInOwogICAgICAgICRwZG8tPnByZXBhcmUoIlVQREFURSBzZXR0aW5ncyBTRVQgcm9sZT0nbWFzdGVyJywgcHJvZHVjdF9uYW1lPT8sIGFkbWluX3Bhc3NfaGFzaD0/IFdIRVJFIGlkPTEiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRwcm9kdWN0LCAkaGFzaF0pOwogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gdHJ1ZV0pOwogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgJG0gPSAkZS0+Z2V0TWVzc2FnZSgpOwogICAgICAgIGlmICgkbSA9PT0gJ05PX0NPTkZJRycpCiAgICAgICAgICAgICRtID0gJ9Cd0LUg0L3QsNC80LXRgNC40YUgY29uZmlnLnBocCDQvdCwINGF0YrQsdCwLiDQmtCw0YfQuCDQv9Cw0L/QutCw0YLQsCAvbGljZW5zZXMvINCS0KrQotCg0JUg0LIgaHViLndlYnRyaXhpYS5jb20gKNC00L4gY29uZmlnLnBocCDQvdCwINGF0YrQsdCwKS4nOwogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJG1dKTsKICAgIH0KICAgIGV4aXQ7Cn0KCi8vIGRldGVjdCBzdGF0ZQokaGFzQ29uZmlnID0gd3RfY29uZmlnX2V4aXN0cygpOwokY29uZmlnUGF0aCA9IFdUX0NPTkZJR19QQVRIOwo/Pgo8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iYmciPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0iVVRGLTgiPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+Cjx0aXRsZT7QndCw0YHRgtGA0L7QudC60LAgwrcg0J/QsNGA0YLQvdGM0L7RgNC4PC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Tb3JhOndnaHRANDAwOzUwMDs2MDA7NzAwJmZhbWlseT1ETStNb25vOndnaHRANTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdHstLWJnOiMwYTBhMTI7LS1jYXJkOnJnYmEoMjU1LDI1NSwyNTUsLjA0KTstLWJyZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOSk7LS10eDojZWNlY2Y1Oy0tdHgyOiM5YTlhYjg7LS10eDM6IzVjNWM3ODstLWFjYzojN2M2Y2ZmOy0tcGluazojZjQ3MmI2Oy0tZ3JuOiMzNGQzOTk7LS1yZWQ6I2Y4NzE3MTstLWFtYjojZmJiZjI0Oy0tZm46J1NvcmEnLHNhbnMtc2VyaWY7LS1tbzonRE0gTW9ubycsbW9ub3NwYWNlfQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO21pbi1oZWlnaHQ6MTAwdmg7Y29sb3I6dmFyKC0tdHgpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjMwcHggMThweDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudCgxMTAwcHggNjAwcHggYXQgMTUlIC0xMCUscmdiYSgxMjQsMTA4LDI1NSwuMTQpLHRyYW5zcGFyZW50IDYwJSkscmFkaWFsLWdyYWRpZW50KDgwMHB4IDUwMHB4IGF0IDExMCUgMCxyZ2JhKDI0NCwxMTQsMTgyLC4wOSksdHJhbnNwYXJlbnQgNTUlKSx2YXIoLS1iZyl9Ci53cmFwe3dpZHRoOjEwMCU7bWF4LXdpZHRoOjQ4MHB4fQoubG9nb3t0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MjNweDtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tYWNjKSx2YXIoLS1waW5rKSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtjb2xvcjp0cmFuc3BhcmVudDttYXJnaW4tYm90dG9tOjRweH0KLnRhZ3t0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1ib3R0b206MjJweH0KLmNhcmR7YmFja2dyb3VuZDp2YXIoLS1jYXJkKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoyMnB4O3BhZGRpbmc6MjhweDtiYWNrZHJvcC1maWx0ZXI6Ymx1cigyMHB4KX0KaDN7Zm9udC1zaXplOjE3cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnN1Yntjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWJvdHRvbToxNnB4O2xpbmUtaGVpZ2h0OjEuNn0KbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbTttYXJnaW46MTJweCAwIDZweH0KaW5wdXR7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI4KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTJweCAxNHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lfQppbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tYWNjKX0KLmJ0bntwYWRkaW5nOjEycHggMjJweDtib3JkZXItcmFkaXVzOjEycHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt3aWR0aDoxMDAlO21hcmdpbi10b3A6MThweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tYWNjKSwjNjM1NWUwKTtjb2xvcjojZmZmO2JveC1zaGFkb3c6MCA2cHggMjJweCByZ2JhKDEyNCwxMDgsMjU1LC4zKX0KLm9re2JhY2tncm91bmQ6cmdiYSg1MiwyMTEsMTUzLC4xKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoNTIsMjExLDE1MywuMjgpO2NvbG9yOnZhcigtLWdybik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTJweCAxNHB4O2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLXRvcDo2cHg7bGluZS1oZWlnaHQ6MS42fQouYmFke2JhY2tncm91bmQ6cmdiYSgyNDgsMTEzLDExMywuMDgpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNDgsMTEzLDExMywuMjIpO2NvbG9yOnZhcigtLXJlZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTJweCAxNHB4O2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLXRvcDoxMnB4O2Rpc3BsYXk6bm9uZTt3aGl0ZS1zcGFjZTpwcmUtbGluZTtsaW5lLWhlaWdodDoxLjZ9Ci53YXJue2JhY2tncm91bmQ6cmdiYSgyNTEsMTkxLDM2LC4xKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjUxLDE5MSwzNiwuMjgpO2NvbG9yOnZhcigtLWFtYik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTJweCAxNHB4O2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLXRvcDoxNHB4O2xpbmUtaGVpZ2h0OjEuNn0KLm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7d29yZC1icmVhazpicmVhay1hbGx9Ci5sa3tkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWFjYyk7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDoxMHB4fQouZG9uZXt0ZXh0LWFsaWduOmNlbnRlcn0uZG9uZSAuaWN7Zm9udC1zaXplOjQ0cHg7bWFyZ2luLWJvdHRvbTo4cHh9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9ImxvZ28iPuKsoSDQn9Cw0YDRgtC90YzQvtGA0LggLyDQm9C40YbQtdC90LfQuDwvZGl2PgogIDxkaXYgY2xhc3M9InRhZyI+0J3QsNGB0YLRgNC+0LnQutCwINCyIGh1Yi53ZWJ0cml4aWEuY29tPC9kaXY+CiAgPGRpdiBjbGFzcz0iY2FyZCIgaWQ9ImNhcmQiPgogICAgPD9waHAgaWYgKCEkaGFzQ29uZmlnKTogPz4KICAgICAgPGgzPuKaoO+4jyDQndC1INC90LDQvNC10YDQuNGFINCx0LDQt9Cw0YLQsCDQvdCwINGF0YrQsdCwPC9oMz4KICAgICAgPGRpdiBjbGFzcz0ic3ViIj7QotC+0LfQuCDQvNC+0LTRg9C7INGC0YDRj9Cx0LLQsCDQtNCwINC1INCyINC/0LDQv9C60LAgPGI+L2xpY2Vuc2VzLzwvYj4g0JLQqtCi0KDQlSDQsiBodWIud2VidHJpeGlhLmNvbSwg0LTQviDQvdC10LPQvtCy0LjRjyA8Yj5jb25maWcucGhwPC9iPi48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibW9ubyI+0KLRitGA0YHQuNGFOiA8Pz0gaHRtbHNwZWNpYWxjaGFycygkY29uZmlnUGF0aCkgPz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0id2FybiI+0JrQsNGH0Lgg0L/QsNC/0LrQsNGC0LAg0YLQsNC8INC4INC/0YDQtdC30LDRgNC10LTQuCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwLjwvZGl2PgogICAgPD9waHAgZWxzZTogPz4KICAgICAgPGgzPtCX0LDQtNCw0Lkg0L/QsNGA0L7Qu9CwINC30LAg0L/QsNC90LXQu9CwPC9oMz4KICAgICAgPGRpdiBjbGFzcz0ic3ViIj7Qn9C+0LvQt9Cy0LAgPGI+0YHRitGJ0LDRgtCwINCx0LDQt9CwPC9iPiDQvdCwINGF0YrQsdCwINGC0LguINCp0LUg0LTQvtCx0LDQstC4INGB0LDQvNC+INC70LjRhtC10L3Qt9C90LjRgtC1INGC0LDQsdC70LjRhtC4IOKAlCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRgtC1INGC0Lgg0LTQsNC90L3QuCDQndCVINGB0LUg0L/QuNC/0LDRgi48L2Rpdj4KICAgICAgPGxhYmVsPtCY0LzQtSDQvdCwINC/0YDQvtC00YPQutGC0LA8L2xhYmVsPjxpbnB1dCBpZD0icHJvZHVjdCIgdmFsdWU9IldlYnRyaXhpYSBIdWIiPgogICAgICA8bGFiZWw+0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60LAg0L/QsNGA0L7Qu9CwICjQt9CwIOKAntCf0LDRgNGC0L3RjNC+0YDQuOKAnCk8L2xhYmVsPjxpbnB1dCBpZD0iYXBhc3MiIHR5cGU9InRleHQiIHZhbHVlPSIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InJ1bigpIj7QmNC90YHRgtCw0LvQuNGA0LDQuSDQvNC+0LTRg9C70LAg4oaSPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImJhZCIgaWQ9ImVyciI+PC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICA8L2Rpdj4KPC9kaXY+CjxzY3JpcHQ+CmZ1bmN0aW9uIGdlbigpe3JldHVybiAnd3QnK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsOCkrJyEnK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo5MCsxMCk7fQpjb25zdCBhcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBhc3MnKTsgaWYoYXApIGFwLnZhbHVlPWdlbigpOwphc3luYyBmdW5jdGlvbiBydW4oKXsKICBjb25zdCBlcnI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VycicpOyBlcnIuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgY29uc3Qgcj1hd2FpdCBmZXRjaCgnc2V0dXAucGhwP2RvPXJ1bicse21ldGhvZDonUE9TVCcsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSwKICAgIGJvZHk6SlNPTi5zdHJpbmdpZnkoe3Byb2R1Y3RfbmFtZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZHVjdCcpLnZhbHVlLGFkbWluX3Bhc3M6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwYXNzJykudmFsdWV9KX0pOwogIGNvbnN0IGo9YXdhaXQgci5qc29uKCk7CiAgaWYoai5vayl7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FyZCcpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZG9uZSI+PGRpdiBjbGFzcz0iaWMiPvCfjok8L2Rpdj48aDM+0JPQvtGC0L7QstC+ITwvaDM+JysKICAgICAgJzxkaXYgY2xhc3M9Im9rIj7QnNC+0LTRg9C70YrRgiDigJ7Qn9Cw0YDRgtC90YzQvtGA0LjigJwg0LUg0LjQvdGB0YLQsNC70LjRgNCw0L0g0LIg0YXRitCx0LAg0YLQuC48L2Rpdj4nKwogICAgICAnPGEgY2xhc3M9ImxrIiBocmVmPSJhZG1pbi9pbmRleC5waHAiPuKGkiDQntGC0LLQvtGA0Lgg4oCe0J/QsNGA0YLQvdGM0L7RgNC44oCcPC9hPicrCiAgICAgICc8ZGl2IGNsYXNzPSJ3YXJuIj7imqDvuI8g0JjQt9GC0YDQuNC5IDxiPnNldHVwLnBocDwvYj4g0YHQtdCz0LAgKNGB0LjQs9GD0YDQvdC+0YHRgikuPC9kaXY+PC9kaXY+JzsKICB9IGVsc2UgeyBlcnIudGV4dENvbnRlbnQ9ai5lcnJvcjsgZXJyLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsgfQp9Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'offer.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J7RhNC10YDRgtCwIOKAlCBXZWJ0cml4aWEgSHViPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1ETStTYW5zOndnaHRANDAwOzUwMDs2MDA7NzAwJmZhbWlseT1ETStNb25vOndnaHRANDAwOzUwMDs3MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2VlZjNlYzstLXBhbmVsOiNmZmY7LS1saW5lOiM5Y2NjN2Q7LS1zb2Z0OiNlOGYzZGY7LS1pbms6IzE1MTUxNTstLW11dGVkOiM1ZDY0NWI7LS1ncmVlbjojMTU5NDQ3Oy0tZ3JlZW4yOiMwZjdhMzk7LS1yZWQ6I2RjMjYyNjstLWFjY2VudDojNmM2M2ZmOy0tZm46J0RNIFNhbnMnLEFyaWFsLHNhbnMtc2VyaWY7LS1tb25vOidETSBNb25vJyxtb25vc3BhY2V9Cip7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e21hcmdpbjowO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm4pfQouc2hlbGx7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczozODBweCBtaW5tYXgoNzYwcHgsMWZyKTtnYXA6MThweDttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MThweH0KLmVkaXRvcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4wOCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjE4cHg7aGVpZ2h0OmNhbGMoMTAwdmggLSAzNnB4KTtvdmVyZmxvdzphdXRvfQoucHJldmlld3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fQoudG9wYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTRweH0KLmJ0bntib3JkZXI6MDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxMnB4O2ZvbnQ6NjAwIDEycHggdmFyKC0tZm4pO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6I2VlZjBmNTtjb2xvcjojMWYyNDMwfQouYnRuLnB7YmFja2dyb3VuZDp2YXIoLS1ncmVlbik7Y29sb3I6I2ZmZn0uYnRuLmF7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOiNmZmZ9LmJ0bi5ke2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojYjkxYzFjfS5idG46ZGlzYWJsZWR7b3BhY2l0eTouNDU7Y3Vyc29yOm5vdC1hbGxvd2VkfQpoMXtmb250LXNpemU6MThweDttYXJnaW46MCAwIDJweH0uaGludHtmb250LXNpemU6MTJweDtjb2xvcjojNzc4MDcwO21hcmdpbjowIDAgMTJweDtsaW5lLWhlaWdodDoxLjQ1fQoudGFic3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjZweDttYXJnaW46MTBweCAwIDE0cHh9Ci50YWJ7Ym9yZGVyOjFweCBzb2xpZCAjZDllNWQyO2JhY2tncm91bmQ6I2Y3ZmJmNDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfQoudGFiLm9ue2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2JvcmRlci1jb2xvcjp2YXIoLS1ncmVlbik7Y29sb3I6I2ZmZn0KLmdyb3Vwe2JvcmRlci10b3A6MXB4IHNvbGlkICNlZGYyZTg7cGFkZGluZy10b3A6MTJweDttYXJnaW4tdG9wOjEycHh9Ci5ndGl0bGV7Zm9udC1zaXplOjExcHg7Y29sb3I6IzZmNzg2ZDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA4ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206OHB4fQpsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2OTc0Njc7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNGVtO21hcmdpbjo5cHggMCA0cHh9CmlucHV0LHRleHRhcmVhLHNlbGVjdHt3aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWQgI2RiZTVkNTtiYWNrZ3JvdW5kOiNmYmZkZjk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo5cHggMTBweDtmb250OjEzcHggdmFyKC0tZm4pO291dGxpbmU6bm9uZTtjb2xvcjojMTIxODEyfQp0ZXh0YXJlYXtyZXNpemU6dmVydGljYWw7bWluLWhlaWdodDo2MnB4fSBpbnB1dDpmb2N1cyx0ZXh0YXJlYTpmb2N1cyxzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWdyZWVuKTtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDIxLDE0OCw3MSwuMSl9Ci5ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uZ3JpZDN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxLjJmciAuOGZyIC44ZnI7Z2FwOjhweH0KLm1pbmlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgODBweCA2OHB4IDFmciAzNHB4O2dhcDo2cHg7YWxpZ24taXRlbXM6ZW5kO21hcmdpbi1ib3R0b206OHB4fQoubWluaXJvdyBidXR0b24sLml0ZW1yb3cgYnV0dG9ue2hlaWdodDozNnB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojYjkxYzFjO2N1cnNvcjpwb2ludGVyfQouaXRlbXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAzNHB4O2dhcDo2cHg7bWFyZ2luLWJvdHRvbTo2cHh9Ci5zdmNib3h7Ym9yZGVyOjFweCBzb2xpZCAjZTFlYmRjO2JhY2tncm91bmQ6I2ZiZmRmOTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4O21hcmdpbi1ib3R0b206OXB4fQoubXV0ZWR7Zm9udC1zaXplOjExcHg7Y29sb3I6IzdmODg3ZH0udG9hc3R7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MjBweDtib3R0b206MjBweDtiYWNrZ3JvdW5kOiMxMDE4MjA7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lO3otaW5kZXg6NTB9Ci5wYWdle3dpZHRoOjc5NHB4O21pbi1oZWlnaHQ6MTEyM3B4O2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMTJweCA0MHB4IHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nOjU4cHggNThweCA0NHB4O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0KLndte3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjIxMHB4IDEzMHB4IGF1dG8gMTcwcHg7Zm9udC1zaXplOjQ0MHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjpyZ2JhKDIxLDE0OCw3MSwuMDcpO2xpbmUtaGVpZ2h0Oi43O3otaW5kZXg6MDtwb2ludGVyLWV2ZW50czpub25lfQouZG9je3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0ubG9nb3tmb250LXNpemU6MjdweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tZ3JlZW4pO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtc2hhZG93OjFweCAxcHggMCAjMGI1ZjJhO21hcmdpbi1ib3R0b206NjRweH0KLnRpdGxle3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MzRweH0udGl0bGUgaDJ7Zm9udC1zaXplOjI3cHg7bWFyZ2luOjAgMCA1cHg7Zm9udC13ZWlnaHQ6ODAwfS50aXRsZSAuc3ViamVjdHtmb250LXNpemU6MThweDtmb250LXN0eWxlOml0YWxpY30KLmxlYWR7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MS41NTttYXJnaW4tYm90dG9tOjE4cHh9LmxlYWQgYntmb250LXdlaWdodDo4MDB9LmxlYWQgYXtjb2xvcjojMTQ2NWQ4O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Ci5zZWN0aW9uLXRpdGxle2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjgwMDttYXJnaW46MTZweCAwIDhweH0ucm9tYW57Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6ODAwO21hcmdpbjo4cHggMCA0cHg7cGFkZGluZy1sZWZ0OjIycHh9Ci5zdmN7bWFyZ2luOjhweCAwIDIycHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN2YyBoM3tmb250LXNpemU6MTdweDttYXJnaW46MCAwIDhweH0uc3ZjIHVse21hcmdpbjowO3BhZGRpbmctbGVmdDozNHB4fS5zdmMgbGl7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MS40NTttYXJnaW46NHB4IDB9Ci5wcmljZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOjE4cHg7Zm9udC1zaXplOjE1cHh9LnByaWNlIHRoLC5wcmljZSB0ZHtib3JkZXI6MS40cHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoxMHB4IDEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlfS5wcmljZSB0aHtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo4MDA7YmFja2dyb3VuZDojZmZmfS5wcmljZSB0cjpudGgtY2hpbGQoZXZlbikgdGR7YmFja2dyb3VuZDp2YXIoLS1zb2Z0KX0ucHJpY2UgdGQ6Zmlyc3QtY2hpbGR7Zm9udC13ZWlnaHQ6ODAwfS5wcmljZSAudG90YWwgdGR7YmFja2dyb3VuZDojZmZmIWltcG9ydGFudDtmb250LXNpemU6MThweDtmb250LXdlaWdodDo4MDB9LnByaWNlIC5sZWZ0e3RleHQtYWxpZ246bGVmdH0ucHJpY2UgLnNtYWxse2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi10b3A6M3B4fQouZm9vdGVyLW5vdGV7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxNnB4O21hcmdpbi10b3A6MzhweH0uY29udGFjdHtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjM1O21hcmdpbi10b3A6OHB4fS5jb250YWN0IGF7Y29sb3I6IzE0NjVkOH0ucGFnZW5ve3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjU4cHg7Ym90dG9tOjQycHg7Zm9udDoxNXB4IHZhcigtLW1vbm8pfQoucGFnZS50d297bWFyZ2luLXRvcDoxOHB4fS5wYWdlLnR3byAubG9nb3ttYXJnaW4tYm90dG9tOjQycHh9LnRlcm1ze2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjEuNTV9LnRlcm1zIGgze2ZvbnQtc2l6ZToxOHB4O21hcmdpbjoxNnB4IDAgOHB4fS50ZXJtcyB1bHttYXJnaW46MCAwIDEycHggMjBweH0udGVybXMgbGl7bWFyZ2luOjhweCAwfS5ub3RlcyBsaXttYXJnaW46NnB4IDB9LnNpZ25ze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6NzBweDttYXJnaW4tdG9wOjQ2cHg7Zm9udC1zaXplOjE2cHh9LnNpZ2xpbmV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICMzMzM7aGVpZ2h0OjI4cHg7bWFyZ2luLWJvdHRvbTo2cHh9LnNpZy1uYW1le3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6OHB4fQpAbWVkaWEobWF4LXdpZHRoOjExODBweCl7LnNoZWxse2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LmVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6YXV0b30ucHJldmlld3tvdmVyZmxvdzphdXRvO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5wYWdle3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnR9fQpAbWVkaWEgcHJpbnR7CiAgQHBhZ2V7c2l6ZTpBNDttYXJnaW46MH0KICBib2R5e2JhY2tncm91bmQ6I2ZmZn0uc2hlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjB9LmVkaXRvciwudG9hc3R7ZGlzcGxheTpub25lIWltcG9ydGFudH0ucHJldmlld3tkaXNwbGF5OmJsb2NrfS5wYWdle3dpZHRoOjIxMG1tO21pbi1oZWlnaHQ6Mjk3bW07Ym94LXNoYWRvdzpub25lO21hcmdpbjowO3BhZGRpbmc6MTVtbSAxNW1tIDEybW07cGFnZS1icmVhay1hZnRlcjphbHdheXN9LnBhZ2UudHdve21hcmdpbi10b3A6MH0ucGFnZW5ve3JpZ2h0OjE1bW07Ym90dG9tOjEybW19Lndte2luc2V0OjU4bW0gMzRtbSBhdXRvIDQ1bW07Zm9udC1zaXplOjExOG1tfS5sb2dve21hcmdpbi1ib3R0b206MThtbX0udGl0bGUgaDJ7Zm9udC1zaXplOjI0cHR9LnRpdGxlIC5zdWJqZWN0e2ZvbnQtc2l6ZToxNXB0fS5sZWFkLC50ZXJtc3tmb250LXNpemU6MTRwdH0ucHJpY2V7Zm9udC1zaXplOjEycHR9LnByaWNlIHRoe2ZvbnQtc2l6ZToxNHB0fS5wcmljZSB0ZHtwYWRkaW5nOjdwdH0uZm9vdGVyLW5vdGV7bWFyZ2luLXRvcDoxNm1tfQp9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9InNoZWxsIj4KICA8YXNpZGUgY2xhc3M9ImVkaXRvciI+CiAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9J2luZGV4Lmh0bWwnIj7ihpAgSHViPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlT2ZmZXIoKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBhIiBvbmNsaWNrPSJkdXBsaWNhdGVPZmZlcigpIj7QlNGD0LHQu9C40YDQsNC5PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93LnByaW50KCkiPlBERiAvINCf0LXRh9Cw0YI8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGgxPtCg0LXQtNCw0LrRgtC+0YAg0L3QsCDQvtGE0LXRgNGC0LA8L2gxPgogICAgPHAgY2xhc3M9ImhpbnQiPtCh0YrQt9C00LDQuSDQuCDRgNC10LTQsNC60YLQuNGA0LDQuSDQvtGE0LXRgNGC0Lgg0LrQsNGC0L4g0L/RgNC40LzQtdGA0LjRgtC1INC30LAgQjJCINGB0LjRgdGC0LXQvNCwLiDQktGB0LjRh9C60L4g0YHQtSDQv9Cw0LfQuCDQsiBIdWIt0LAuPC9wPgogICAgPGRpdiBjbGFzcz0idGFicyI+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgaWQ9InRhYl9vbmVfdGltZSIgb25jbGljaz0ic2V0VGVtcGxhdGUoJ29uZV90aW1lJykiPtCV0LTQvdC+0LrRgNCw0YLQvdCwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgaWQ9InRhYl9tb250aGx5IiBvbmNsaWNrPSJzZXRUZW1wbGF0ZSgnbW9udGhseScpIj7QnNC10YHQtdGH0L3QsDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZ3JvdXAiPgogICAgICA8ZGl2IGNsYXNzPSJndGl0bGUiPtCe0YHQvdC+0LLQvdC4INC00LDQvdC90Lg8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ3JpZDIiPjxkaXY+PGxhYmVsPtCd0L7QvNC10YA8L2xhYmVsPjxpbnB1dCBpZD0ibnVtIj48L2Rpdj48ZGl2PjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9InN0YXR1cyI+PG9wdGlvbj7Qp9Cw0LrQsNGJ0LA8L29wdGlvbj48b3B0aW9uPtCf0YDQuNC10YLQsDwvb3B0aW9uPjxvcHRpb24+0J7RgtC60LDQt9Cw0L3QsDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PgogICAgICA8bGFiZWw+0JfQsNCz0LvQsNCy0LjQtSAvINC/0YDQtdC00LzQtdGCPC9sYWJlbD48aW5wdXQgaWQ9InN1YmplY3QiPgogICAgICA8ZGl2IGNsYXNzPSJncmlkMiI+PGRpdj48bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD48aW5wdXQgaWQ9ImNsaWVudCI+PC9kaXY+PGRpdj48bGFiZWw+0J7QsdGA0YrRidC10L3QuNC1PC9sYWJlbD48aW5wdXQgaWQ9ImdyZWV0aW5nIj48L2Rpdj48L2Rpdj4KICAgICAgPGxhYmVsPtCS0YrQstC10LbQtNCw0Ykg0YLQtdC60YHRgjwvbGFiZWw+PHRleHRhcmVhIGlkPSJpbnRybyI+PC90ZXh0YXJlYT4KICAgICAgPGRpdiBjbGFzcz0iZ3JpZDMiPjxkaXY+PGxhYmVsPtCU0LDRgtCwPC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9Imlzc3VlX2RhdGUiPjwvZGl2PjxkaXY+PGxhYmVsPtCS0LDQu9C40LTQvdC+0YHRgiDQtNC90Lg8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2YWxpZF9kYXlzIj48L2Rpdj48ZGl2PjxsYWJlbD7QodGA0L7QuiDQtNC90Lg8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ3b3JrX2RheXMiPjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZ3JvdXAiPgogICAgICA8ZGl2IGNsYXNzPSJndGl0bGUiPtCj0YHQu9GD0LPQuCDQuCDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGC0Lg8L2Rpdj4KICAgICAgPGRpdiBpZD0ic3ZjRWRpdG9yIj48L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0id2lkdGg6MTAwJSIgb25jbGljaz0iYWRkR3JvdXAoKSI+KyDQlNC+0LHQsNCy0Lgg0LPRgNGD0L/QsDwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZ3JvdXAiPgogICAgICA8ZGl2IGNsYXNzPSJndGl0bGUiPtCm0LXQvdC+0LLQsCDQu9C40YHRgtCwPC9kaXY+CiAgICAgIDxkaXYgaWQ9InJvd3NFZGl0b3IiPjwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJ3aWR0aDoxMDAlIiBvbmNsaWNrPSJhZGRSb3coKSI+KyDQlNC+0LHQsNCy0Lgg0YDQtdC0PC9idXR0b24+CiAgICAgIDxwIGNsYXNzPSJtdXRlZCI+0KHRg9C80LDRgtCwINGB0LUg0LjQt9GH0LjRgdC70Y/QstCwINC+0YIg0LrQvtC70L7QvdCw0YLQsCDigJ7QmtGA0LDQudC90LAg0YbQtdC90LDigJwuINCQ0LrQviDRgNC10LTRitGCINC1INGC0LXQutGB0YLQvtCyLCDQvtGB0YLQsNCy0LggMC48L3A+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJncm91cCI+CiAgICAgIDxkaXYgY2xhc3M9Imd0aXRsZSI+0KPRgdC70L7QstC40Y8g0Lgg0LHQtdC70LXQttC60Lg8L2Rpdj4KICAgICAgPGxhYmVsPtCf0LvQsNGJ0LDQvdC1PC9sYWJlbD48dGV4dGFyZWEgaWQ9InBheW1lbnQiPjwvdGV4dGFyZWE+CiAgICAgIDxsYWJlbD7QlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LHQtdC70LXQttC60Lg8L2xhYmVsPjx0ZXh0YXJlYSBpZD0ibm90ZXMiPjwvdGV4dGFyZWE+CiAgICAgIDxkaXYgY2xhc3M9ImdyaWQyIj48ZGl2PjxsYWJlbD7QmNC30LPQvtGC0LLQuNC7PC9sYWJlbD48aW5wdXQgaWQ9InByZXBhcmVkX2J5Ij48L2Rpdj48ZGl2PjxsYWJlbD7Qn9GA0LjQtdC7PC9sYWJlbD48aW5wdXQgaWQ9ImFjY2VwdGVkX2J5Ij48L2Rpdj48L2Rpdj4KICAgICAgPGxhYmVsPtCa0L7QvdGC0LDQutGC0Lg8L2xhYmVsPjx0ZXh0YXJlYSBpZD0iY29udGFjdHMiPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KICA8L2FzaWRlPgoKICA8bWFpbiBjbGFzcz0icHJldmlldyI+CiAgICA8ZGl2PgogICAgICA8c2VjdGlvbiBjbGFzcz0icGFnZSI+CiAgICAgICAgPGRpdiBjbGFzcz0id20iPlc8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJwYWdlMSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW5vIj4vIDEgLzwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICAgIDxzZWN0aW9uIGNsYXNzPSJwYWdlIHR3byI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG9jIiBpZD0icGFnZTIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VubyI+LyAyIC88L2Rpdj4KICAgICAgPC9zZWN0aW9uPgogICAgPC9kaXY+CiAgPC9tYWluPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CmNvbnN0IEFQST0oZnVuY3Rpb24oKXtjb25zdCBiYXNlPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL29mZmVyXC5odG1sJC8sJycpLnJlcGxhY2UoL1wvJC8sJycpO3JldHVybiBiYXNlKycvYXBpLnBocCc7fSkoKTsKY29uc3QgcXM9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpOwpsZXQgb2ZmZXJJZD1xcy5nZXQoJ2lkJyl8fCcnOwpsZXQgZGF0YT17fTsKCmZ1bmN0aW9uIHRvZGF5KCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTt9CmZ1bmN0aW9uIG51bURlZmF1bHQoKXtyZXR1cm4gU3RyaW5nKE1hdGguZmxvb3IoNDAwK01hdGgucmFuZG9tKCkqNTAwKSkucGFkU3RhcnQoMTAsJzAnKTt9CmZ1bmN0aW9uIG1vbmV5KG4pe3JldHVybiAn4oKsICcrTnVtYmVyKG58fDApLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScse21pbmltdW1GcmFjdGlvbkRpZ2l0czoyLG1heGltdW1GcmFjdGlvbkRpZ2l0czoyfSk7fQpmdW5jdGlvbiBlc2Mocyl7cmV0dXJuIFN0cmluZyhzPT1udWxsPycnOnMpLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKS5yZXBsYWNlKC8iL2csJyZxdW90OycpO30KZnVuY3Rpb24gbmwocyl7cmV0dXJuIGVzYyhzKS5yZXBsYWNlKC9cbi9nLCc8YnI+Jyk7fQpmdW5jdGlvbiB0b2FzdChtKXtjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdCcpO3QudGV4dENvbnRlbnQ9bTt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gZGF0ZUJnKHMpe2lmKCFzKXJldHVybiAnJztjb25zdCBkPW5ldyBEYXRlKHMrJ1QwMDowMDowMCcpO3JldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHtkYXk6JzItZGlnaXQnLG1vbnRoOicyLWRpZ2l0Jyx5ZWFyOidudW1lcmljJ30pKyfQsy4nO30KYXN5bmMgZnVuY3Rpb24gYWYoYWN0aW9uLG1ldGhvZCxib2R5LGV4dHJhKXttZXRob2Q9bWV0aG9kfHwnR0VUJztleHRyYT1leHRyYXx8Jyc7Y29uc3Qgbz17bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319O2lmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpO2NvbnN0IHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK2V4dHJhLG8pO2NvbnN0IGo9YXdhaXQgci5qc29uKCk7aWYoIWoub2spdGhyb3cgbmV3IEVycm9yKGouZXJyb3J8fCfQk9GA0LXRiNC60LAnKTtyZXR1cm4gai5kYXRhO30KCmZ1bmN0aW9uIHRlbXBsYXRlKHR5cGUpewogIGNvbnN0IG1vbnRobHk9dHlwZT09PSdtb250aGx5JzsKICByZXR1cm4gewogICAgdHlwZSwKICAgIG51bTogbW9udGhseT8nMDAwMDAwMDQyOCc6JzAwMDAwMDA0MjcnLAogICAgc3RhdHVzOifQp9Cw0LrQsNGJ0LAnLAogICAgc3ViamVjdDogbW9udGhseT8n0J7RhNC10YDRgtCwINC30LAgYjJiINGB0LjRgdGC0LXQvNCwINC4INGA0LXQtNC40LfQsNC50L0g0L3QsCBtdXNhbmJnLmNvbSc6J9Ce0YTQtdGA0YLQsCDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQvdCwIGIyYiDRgdC40YHRgtC10LzQsCDQuCDRgNC10LTQuNC30LDQudC9INC90LAgbXVzYW5iZy5jb20nLAogICAgY2xpZW50OifQpdCw0LrQsNC9INCU0LXQstC10LTQttC4JywKICAgIGdyZWV0aW5nOifQo9Cy0LDQttCw0LXQvNC4LCDQsy3QvSDQlNC10LLQtdC00LbQuCcsCiAgICBpbnRybzon0JIg0L3QsNGI0LDRgtCwINC+0YTQtdGA0YLQsCDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQvdCwIGIyYiDRgdC40YHRgtC10LzQsCDQuCDRgNC10LTQuNC30LDQudC9INC90LAgbXVzYW5iZy5jb20g0YHQsCDQstC60LvRjtGH0LXQvdC4INGB0LvQtdC00L3QuNGC0LUg0YTRg9C90LrRhtC40L7QvdCw0LvQvdC+0YHRgtC4OicsCiAgICBpc3N1ZV9kYXRlOicyMDI2LTA3LTA3JywKICAgIHZhbGlkX2RheXM6MzAsCiAgICB3b3JrX2RheXM6MzAsCiAgICBncm91cHM6WwogICAgICB7dGl0bGU6J0kuINCY0LfRgNCw0LHQvtGC0LrQsCcsaXRlbXM6WwogICAgICAgIHt0aXRsZTonMS4g0JTQuNC30LDQudC9INC90LAg0LEy0LEg0YHQuNGB0YLQtdC80LDRgtCwINC4INGD0LXQsSDRgdCw0LnRgtCwOicsYnVsbGV0czpbJ9Cj0L3QuNC60LDQu9C10L0g0Lgg0LzQvtC00LXRgNC10L0g0LTQuNC30LDQudC9Jywn0JDQtNCw0L/RgtC40LLQvdC+0YHRgiDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQsCcsJ9Cj0LTQvtCx0LXQvSDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQuCDQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGB0LrQuCDQuNC90YLQtdGA0YTQtdC50YEnXX0sCiAgICAgICAge3RpdGxlOicyLiDQmNC90YLQtdCz0YDQsNGG0LjQuDonLGJ1bGxldHM6WyfQmNC90YLQtdCz0YDQsNGG0LjRjyDRgSDQutGD0YDQuNC10YDRgdC60Lgg0YTQuNGA0LzQuCDQvdCwIEIyQiDRgdC40YHRgtC10LzQsNGC0LAnLCfQmNC90YLQtdCz0YDQsNGG0LjRjyDQvdCwINCx0LDQvdC60L7QstC4INC4INC60LDRgNGC0L7QstC4INC/0LvQsNGJ0LDQvdC40Y8nXX0sCiAgICAgICAge3RpdGxlOiczLiDQntCx0YPRh9C10L3QuNC1OicsYnVsbGV0czpbJ9CS0LrQu9GO0YfQtdC90L4g0L7QsdGD0YfQtdC90LjQtSDQvtGCINC10LrQuNC/0YrRgiDQvdCwIFdFQlRSSVhJQSwg0LfQsCDRg9C/0YDQsNCy0LvRj9Cy0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC4INC00YAuJ119CiAgICAgIF19CiAgICBdLAogICAgcm93czogbW9udGhseT9bCiAgICAgIHtzZXJ2aWNlOifQpdC+0YHRgtC40L3QsyDQuCDQtNC+0LzQtdC50L0nLHByaWNlOifigqwgMjAwLDAwXG4o0L3QsCDQs9C+0LTQuNC90LApJyxkaXNjb3VudDonLScsZmluYWw6J9Ca0JvQmNCV0J3QotCq0KJcbtCg0JDQl9Cf0J7Qm9CQ0JPQkCcsYW1vdW50OjB9LAogICAgICB7c2VydmljZTon0JTQvtGA0LDQsdC+0YLQutC4INC/0L4g0LTQuNC30LDQudC90LAg0L3QsCDRgdCw0LnRgtCwJyxwcmljZTon4oKsIDEzMDAuMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGRpc2NvdW50OictIDU1JScsZmluYWw6J+KCrCA1ODUsMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGFtb3VudDo1ODV9LAogICAgICB7c2VydmljZTonQjJCINGB0LjRgdGC0LXQvNCwINC80LXRgdC10YfQvdCwINGD0YHQu9GD0LPQsCcscHJpY2U6J+KCrCAxNTAsMDBcbijQvdCwINC80LXRgdC10YYpJyxkaXNjb3VudDonLSAwJScsZmluYWw6J+KCrCAxNTAsMDBcbijQvNC10YHQtdGGKScsYW1vdW50OjE1MCxtb250aGx5OjF9LAogICAgICB7c2VydmljZTon0JTQuNCz0LjRgtCw0LvQtdC9INC/0YDQvtC00YPQutGC0L7QsiDQutCw0YLQsNC70L7QsycscHJpY2U6J+KCrCA0NTAsMDAnLGRpc2NvdW50OictMTAwJScsZmluYWw6J+KCrCAwMCwwMCcsYW1vdW50OjB9LAogICAgICB7c2VydmljZTon0JzQtdGB0LXRh9C90LAg0L/QvtC00LTRgNGK0LbQutCwJyxwcmljZTon4oKsIDEyMCwwMCcsZGlzY291bnQ6Jy0xMDAlJyxmaW5hbDon4oKsIDAwLDAwJyxhbW91bnQ6MCxtb250aGx5OjF9CiAgICBdOlsKICAgICAge3NlcnZpY2U6J9Cl0L7RgdGC0LjQvdCzINC4INC00L7QvNC10LnQvScscHJpY2U6J+KCrCAyMDAsMDBcbijQvdCwINCz0L7QtNC40L3QsCknLGRpc2NvdW50OictJyxmaW5hbDon0JrQm9CY0JXQndCi0KrQolxu0KDQkNCX0J/QntCb0JDQk9CQJyxhbW91bnQ6MH0sCiAgICAgIHtzZXJ2aWNlOifQlNC+0YDQsNCx0L7RgtC60Lgg0L/QviDQtNC40LfQsNC50L3QsCDQvdCwINGB0LDQudGC0LAnLHByaWNlOifigqwgMTMwMC4wMFxuKNC10LTQvdC+0LrRgNCw0YLQvdC+KScsZGlzY291bnQ6Jy0gNTUlJyxmaW5hbDon4oKsIDU4NSwwMFxuKNC10LTQvdC+0LrRgNCw0YLQvdC+KScsYW1vdW50OjU4NX0sCiAgICAgIHtzZXJ2aWNlOifQmNC30YDQsNCx0L7RgtC60LAg0L3QsCBCMkIg0YHQuNGB0YLQtdC80LAnLHByaWNlOifigqwgMzIwMCwwMFxuKNC10LTQvdC+0LrRgNCw0YLQvdC+KScsZGlzY291bnQ6Jy0gNTAlJyxmaW5hbDon4oKsIDE2MDAsMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGFtb3VudDoxNjAwfSwKICAgICAge3NlcnZpY2U6J9CU0LjQs9C40YLQsNC70LXQvSDQv9GA0L7QtNGD0LrRgtC+0LIg0LrQsNGC0LDQu9C+0LMnLHByaWNlOifigqwgNDUwLDAwJyxkaXNjb3VudDonLTEwMCUnLGZpbmFsOifigqwgMDAsMDAnLGFtb3VudDowfSwKICAgICAge3NlcnZpY2U6J9Cc0LXRgdC10YfQvdCwINC/0L7QtNC00YDRitC20LrQsCcscHJpY2U6J+KCrCAxMjAsMDAnLGRpc2NvdW50OictNTAlJyxmaW5hbDon4oKsIDYwLDAwJyxhbW91bnQ6NjAsbW9udGhseToxfQogICAgXSwKICAgIHBheW1lbnQ6J9Cf0YDQuCDQv9GA0LjQtdC80LDQvdC1INC90LAg0L7RhNC10YDRgtCw0YLQsCDRgdC1INC30LDQv9C70LDRidCwIDUwJSDQsNCy0LDQvdGB0L7QstC+INGBINGG0LXQuyDQutCw0L/QsNGA0L4uXG7QntGE0LXRgNGC0LDRgtCwINC1INCy0LDQu9C40LTQvdCwINCyINGB0YDQvtC6INC+0YIgMzAg0LTQvdC4INGB0LvQtdC0INC00LDRgtCw0YLQsCDQvdCwINC40LfQtNCw0LLQsNC90LXRgtC+LicsCiAgICBub3Rlczon0J/QvtC00LTRgNGK0LbQutCw0YLQsCDQstC60LvRjtGH0LLQsCAtIDcvMjQg0LzQvtC90LjRgtC+0YDQuNC90LMg0L3QsCDQv9C70LDRgtGE0L7RgNC80LDRgtCwINC4INGB0LDQudGC0LAsINC+0YLRgdGC0YDQsNC90Y/QstCw0L3QtSDQvdCwINC90LXRgNC10LTQvdC+0YHRgtC4LCDRgdC80LXQvdGP0L3QtSDQvdCwINCx0LDQvdC10YDQuCwg0LDQutGC0YPQsNC70LjQt9C40YDQsNC90LUg0L3QsCDRgdC40YHRgtC10LzQsNGC0LAg0LLRgdGP0LrQsCDRgdC10LTQvNC40YbQsCwg0LXQttC10LTQvdC10LLQtdC9INCx0LXQutGK0L8g0L3QsCDRgdC40YHRgtC10LzQsNGC0LAsINGB0LrQsNC90LjRgNCw0L3QtSDQvdCwINGB0LjRgdGC0LXQvNCw0YLQsCDQstGB0Y/QutCwINGB0LXQtNC80LjRhtCwINC30LAg0LfQu9C+0L3QsNC80LXRgNC10L0g0LTQvtGB0YLRitC/LicsCiAgICBwcmVwYXJlZF9ieTon0KXQsNC60LDQvSDQntGB0LzQsNC9JywKICAgIGFjY2VwdGVkX2J5OifQpdCw0LrQsNC9INCU0LXQstC10LTQttC4JywKICAgIGNvbnRhY3RzOifQktGB0LjRh9C60Lgg0YbQtdC90Lgg0YHQsCDQsdC10Lcg0JTQlNChICFcbm9mZmljZUB3ZWJ0cml4aWEuY29tXG4rMzU5IDg4IDQ3NyA4MjE0JwogIH07Cn0KCmZ1bmN0aW9uIHNldFRlbXBsYXRlKHR5cGUpewogIGlmKCFvZmZlcklkICYmICghZGF0YS50eXBlIHx8IGNvbmZpcm0oJ9CU0LAg0LfQsNGA0LXQtNGPINGI0LDQsdC70L7QvdCwINC4INC00LAg0LfQsNC80LXQvdGPINGC0LXQutGD0YnQuNGC0LUg0LTQsNC90L3QuD8nKSkpewogICAgZGF0YT10ZW1wbGF0ZSh0eXBlKTsgZmlsbEVkaXRvcigpOyByZW5kZXJBbGwoKTsKICB9IGVsc2UgewogICAgZGF0YS50eXBlPXR5cGU7IGZpbGxFZGl0b3IoKTsgcmVuZGVyQWxsKCk7CiAgfQp9CgpmdW5jdGlvbiByZWFkRWRpdG9yKCl7CiAgWydudW0nLCdzdGF0dXMnLCdzdWJqZWN0JywnY2xpZW50JywnZ3JlZXRpbmcnLCdpbnRybycsJ2lzc3VlX2RhdGUnLCd2YWxpZF9kYXlzJywnd29ya19kYXlzJywncGF5bWVudCcsJ25vdGVzJywncHJlcGFyZWRfYnknLCdhY2NlcHRlZF9ieScsJ2NvbnRhY3RzJ10uZm9yRWFjaChpZD0+ZGF0YVtpZF09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlKTsKICBkYXRhLmdyb3Vwcz1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN2Y2JveCcpXS5tYXAoYm94PT4oewogICAgdGl0bGU6Ym94LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9Z3RdJykudmFsdWUsCiAgICBpdGVtczpbLi4uYm94LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdmNpdGVtJyldLm1hcChpdD0+KHsKICAgICAgdGl0bGU6aXQucXVlcnlTZWxlY3RvcignW2RhdGEtaz1pdF0nKS52YWx1ZSwKICAgICAgYnVsbGV0czpbLi4uaXQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtaz1idWxdJyldLm1hcCh4PT54LnZhbHVlKS5maWx0ZXIoQm9vbGVhbikKICAgIH0pKQogIH0pKTsKICBkYXRhLnJvd3M9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5taW5pcm93JyldLm1hcChyPT4oewogICAgc2VydmljZTpyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9c2VydmljZV0nKS52YWx1ZSwKICAgIHByaWNlOnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1wcmljZV0nKS52YWx1ZSwKICAgIGRpc2NvdW50OnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1kaXNjb3VudF0nKS52YWx1ZSwKICAgIGZpbmFsOnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1maW5hbF0nKS52YWx1ZSwKICAgIGFtb3VudDpwYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1hbW91bnRdJykudmFsdWUpfHwwLAogICAgbW9udGhseTpyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9bW9udGhseV0nKS5jaGVja2VkPzE6MAogIH0pKTsKfQpmdW5jdGlvbiBmaWxsRWRpdG9yKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYl9vbmVfdGltZScpLmNsYXNzTGlzdC50b2dnbGUoJ29uJyxkYXRhLnR5cGUhPT0nbW9udGhseScpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJfbW9udGhseScpLmNsYXNzTGlzdC50b2dnbGUoJ29uJyxkYXRhLnR5cGU9PT0nbW9udGhseScpOwogIFsnbnVtJywnc3RhdHVzJywnc3ViamVjdCcsJ2NsaWVudCcsJ2dyZWV0aW5nJywnaW50cm8nLCdpc3N1ZV9kYXRlJywndmFsaWRfZGF5cycsJ3dvcmtfZGF5cycsJ3BheW1lbnQnLCdub3RlcycsJ3ByZXBhcmVkX2J5JywnYWNjZXB0ZWRfYnknLCdjb250YWN0cyddLmZvckVhY2goaWQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZT1kYXRhW2lkXXx8JycpOwogIHJlbmRlckdyb3VwRWRpdG9yKCk7IHJlbmRlclJvd3NFZGl0b3IoKTsKfQpmdW5jdGlvbiBiaW5kTGl2ZSgpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcpLmZvckVhY2goZWw9PntlbC5vbmlucHV0PSgpPT57cmVhZEVkaXRvcigpO3JlbmRlckFsbCgpO307ZWwub25jaGFuZ2U9KCk9PntyZWFkRWRpdG9yKCk7cmVuZGVyQWxsKCk7fTt9KTt9CmZ1bmN0aW9uIHJlbmRlckdyb3VwRWRpdG9yKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Y0VkaXRvcicpLmlubmVySFRNTD0oZGF0YS5ncm91cHN8fFtdKS5tYXAoKGcsZ2kpPT4KICAgICc8ZGl2IGNsYXNzPSJzdmNib3giPjxsYWJlbD7Qk9GA0YPQv9CwPC9sYWJlbD48aW5wdXQgZGF0YS1rPSJndCIgdmFsdWU9IicrZXNjKGcudGl0bGUpKyciPicrCiAgICAnPGRpdiBpZD0iaXRlbXNfJytnaSsnIj4nKyhnLml0ZW1zfHxbXSkubWFwKChpdCxpaSk9Pml0ZW1IdG1sKGdpLGlpLGl0KSkuam9pbignJykrJzwvZGl2PicrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJhZGRJdGVtKCcrZ2krJykiPisg0J/QvtC00YLQvtGH0LrQsDwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPSJidG4gZCIgb25jbGljaz0iZGVsR3JvdXAoJytnaSsnKSI+0JjQt9GC0YDQuNC5INCz0YDRg9C/0LA8L2J1dHRvbj48L2Rpdj4nCiAgKS5qb2luKCcnKTsKICBiaW5kTGl2ZSgpOwp9CmZ1bmN0aW9uIGl0ZW1IdG1sKGdpLGlpLGl0KXsKICByZXR1cm4gJzxkaXYgY2xhc3M9InN2Y2l0ZW0iIHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjZWRmMmU4O21hcmdpbi10b3A6OXB4O3BhZGRpbmctdG9wOjlweCI+PGxhYmVsPtCX0LDQs9C70LDQstC40LU8L2xhYmVsPjxpbnB1dCBkYXRhLWs9Iml0IiB2YWx1ZT0iJytlc2MoaXQudGl0bGUpKyciPicrCiAgICAnPGxhYmVsPtCR0YPQu9C10YLQuDwvbGFiZWw+JysoaXQuYnVsbGV0c3x8W10pLm1hcCgoYixiaSk9Pic8ZGl2IGNsYXNzPSJpdGVtcm93Ij48aW5wdXQgZGF0YS1rPSJidWwiIHZhbHVlPSInK2VzYyhiKSsnIj48YnV0dG9uIG9uY2xpY2s9ImRlbEJ1bGxldCgnK2dpKycsJytpaSsnLCcrYmkrJykiPsOXPC9idXR0b24+PC9kaXY+Jykuam9pbignJykrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJhZGRCdWxsZXQoJytnaSsnLCcraWkrJykiPisg0JHRg9C70LXRgjwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPSJidG4gZCIgb25jbGljaz0iZGVsSXRlbSgnK2dpKycsJytpaSsnKSI+0JjQt9GC0YDQuNC5PC9idXR0b24+PC9kaXY+JzsKfQpmdW5jdGlvbiByZW5kZXJSb3dzRWRpdG9yKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd3NFZGl0b3InKS5pbm5lckhUTUw9KGRhdGEucm93c3x8W10pLm1hcCgocixpKT0+CiAgICAnPGRpdiBjbGFzcz0ibWluaXJvdyI+PGRpdj48bGFiZWw+0KPRgdC70YPQs9CwPC9sYWJlbD48dGV4dGFyZWEgZGF0YS1rPSJzZXJ2aWNlIj4nK2VzYyhyLnNlcnZpY2UpKyc8L3RleHRhcmVhPjwvZGl2PicrCiAgICAnPGRpdj48bGFiZWw+0KbQtdC90LA8L2xhYmVsPjx0ZXh0YXJlYSBkYXRhLWs9InByaWNlIj4nK2VzYyhyLnByaWNlKSsnPC90ZXh0YXJlYT48L2Rpdj4nKwogICAgJzxkaXY+PGxhYmVsPtCe0YLRgdGCLjwvbGFiZWw+PGlucHV0IGRhdGEtaz0iZGlzY291bnQiIHZhbHVlPSInK2VzYyhyLmRpc2NvdW50KSsnIj48L2Rpdj4nKwogICAgJzxkaXY+PGxhYmVsPtCa0YDQsNC50L3QsDwvbGFiZWw+PHRleHRhcmVhIGRhdGEtaz0iZmluYWwiPicrZXNjKHIuZmluYWwpKyc8L3RleHRhcmVhPjxpbnB1dCBkYXRhLWs9ImFtb3VudCIgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjAxIiB2YWx1ZT0iJysoci5hbW91bnR8fDApKyciIHRpdGxlPSLQodGD0LzQsCDQt9CwINC+0LHRidC+Ij48bGFiZWwgc3R5bGU9InRleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MCI+PGlucHV0IGRhdGEtaz0ibW9udGhseSIgdHlwZT0iY2hlY2tib3giICcrKHIubW9udGhseT8nY2hlY2tlZCc6JycpKycgc3R5bGU9IndpZHRoOmF1dG8iPiDQvNC10YHQtdGH0L3QvjwvbGFiZWw+PC9kaXY+JysKICAgICc8YnV0dG9uIG9uY2xpY2s9ImRlbFJvdygnK2krJykiPsOXPC9idXR0b24+PC9kaXY+JwogICkuam9pbignJyk7CiAgYmluZExpdmUoKTsKfQpmdW5jdGlvbiBhZGRHcm91cCgpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwcy5wdXNoKHt0aXRsZTon0J3QvtCy0LAg0LPRgNGD0L/QsCcsaXRlbXM6W3t0aXRsZTon0J3QvtCy0LAg0YPRgdC70YPQs9CwOicsYnVsbGV0czpbJ9Ce0L/QuNGB0LDQvdC40LUnXX0gXX0pO3JlbmRlckdyb3VwRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBkZWxHcm91cChpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHMuc3BsaWNlKGksMSk7cmVuZGVyR3JvdXBFZGl0b3IoKTtyZW5kZXJBbGwoKTt9CmZ1bmN0aW9uIGFkZEl0ZW0oZ2kpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwc1tnaV0uaXRlbXMucHVzaCh7dGl0bGU6J9Cd0L7QstCwINC/0L7QtNGC0L7Rh9C60LA6JyxidWxsZXRzOlsn0J7Qv9C40YHQsNC90LjQtSddfSk7cmVuZGVyR3JvdXBFZGl0b3IoKTtyZW5kZXJBbGwoKTt9CmZ1bmN0aW9uIGRlbEl0ZW0oZ2ksaWkpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwc1tnaV0uaXRlbXMuc3BsaWNlKGlpLDEpO3JlbmRlckdyb3VwRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBhZGRCdWxsZXQoZ2ksaWkpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwc1tnaV0uaXRlbXNbaWldLmJ1bGxldHMucHVzaCgn0J3QvtCyINCx0YPQu9C10YInKTtyZW5kZXJHcm91cEVkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gZGVsQnVsbGV0KGdpLGlpLGJpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHNbZ2ldLml0ZW1zW2lpXS5idWxsZXRzLnNwbGljZShiaSwxKTtyZW5kZXJHcm91cEVkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gYWRkUm93KCl7cmVhZEVkaXRvcigpO2RhdGEucm93cy5wdXNoKHtzZXJ2aWNlOifQndC+0LLQsCDRg9GB0LvRg9Cz0LAnLHByaWNlOifigqwgMCwwMCcsZGlzY291bnQ6Jy0nLGZpbmFsOifigqwgMCwwMCcsYW1vdW50OjB9KTtyZW5kZXJSb3dzRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBkZWxSb3coaSl7cmVhZEVkaXRvcigpO2RhdGEucm93cy5zcGxpY2UoaSwxKTtyZW5kZXJSb3dzRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQoKZnVuY3Rpb24gdG90YWxzKCl7Y29uc3Qgb25lPShkYXRhLnJvd3N8fFtdKS5maWx0ZXIocj0+IXIubW9udGhseSkucmVkdWNlKChhLHIpPT5hKygrci5hbW91bnR8fDApLDApO2NvbnN0IG1vbj0oZGF0YS5yb3dzfHxbXSkuZmlsdGVyKHI9PnIubW9udGhseSkucmVkdWNlKChhLHIpPT5hKygrci5hbW91bnR8fDApLDApO3JldHVybiB7b25lLG1vbn07fQpmdW5jdGlvbiB2YWxpZERhdGUoKXtjb25zdCBkPW5ldyBEYXRlKChkYXRhLmlzc3VlX2RhdGV8fHRvZGF5KCkpKydUMDA6MDA6MDAnKTtkLnNldERhdGUoZC5nZXREYXRlKCkrKHBhcnNlSW50KGRhdGEudmFsaWRfZGF5cyl8fDMwKSk7cmV0dXJuIGQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTt9CmZ1bmN0aW9uIHJvd3NIdG1sKCl7Y29uc3QgdD10b3RhbHMoKTtyZXR1cm4gJzx0YWJsZSBjbGFzcz0icHJpY2UiPjx0aGVhZD48dHI+PHRoPtCj0YHQu9GD0LPQsDwvdGg+PHRoPtCm0LXQvdCwPC90aD48dGg+0J7RgtGB0YLRitC/0LrQsDwvdGg+PHRoPtCa0YDQsNC50L3QsCDRhtC10L3QsDwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nKwogIChkYXRhLnJvd3N8fFtdKS5tYXAocj0+Jzx0cj48dGQ+JytubChyLnNlcnZpY2UpKyc8L3RkPjx0ZD4nK25sKHIucHJpY2UpKyc8L3RkPjx0ZD4nK25sKHIuZGlzY291bnQpKyc8L3RkPjx0ZD4nK25sKHIuZmluYWwpKyc8L3RkPjwvdHI+Jykuam9pbignJykrCiAgJzx0ciBjbGFzcz0idG90YWwiPjx0ZD7QntCx0YnQvjo8L3RkPjx0ZCBjb2xzcGFuPSIzIj4nK21vbmV5KHQub25lKSsodC5tb24/JzxzcGFuIGNsYXNzPSJzbWFsbCI+0JzQtdGB0LXRh9C90L46ICcrbW9uZXkodC5tb24pKyc8L3NwYW4+JzonJykrJzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JzsKfQpmdW5jdGlvbiByZW5kZXJBbGwoKXsKICBjb25zdCB0PXRvdGFscygpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlMScpLmlubmVySFRNTD0KICAgICc8ZGl2IGNsYXNzPSJsb2dvIj5XRUJUUklYSUE8L2Rpdj48ZGl2IGNsYXNzPSJ0aXRsZSI+PGgyPtCe0YTQtdGA0YLQsCDihJYgJytlc2MoZGF0YS5udW18fCcnKSsnPC9oMj48ZGl2IGNsYXNzPSJzdWJqZWN0Ij4nK2VzYyhkYXRhLnN1YmplY3R8fCcnKSsnPC9kaXY+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJsZWFkIj48Yj7QlNC+OjwvYj4gJytlc2MoZGF0YS5jbGllbnR8fCcnKSsnPC9kaXY+PGRpdiBjbGFzcz0ibGVhZCI+Jytlc2MoZGF0YS5ncmVldGluZ3x8JycpKyc8L2Rpdj48ZGl2IGNsYXNzPSJsZWFkIj4nK25sKGRhdGEuaW50cm98fCcnKSsnPC9kaXY+JysKICAgIChkYXRhLmdyb3Vwc3x8W10pLm1hcChnPT4nPGRpdiBjbGFzcz0icm9tYW4iPicrZXNjKGcudGl0bGUpKyc8L2Rpdj4nKyhnLml0ZW1zfHxbXSkubWFwKGl0PT4nPGRpdiBjbGFzcz0ic3ZjIj48aDM+Jytlc2MoaXQudGl0bGUpKyc8L2gzPjx1bD4nKyhpdC5idWxsZXRzfHxbXSkubWFwKGI9Pic8bGk+Jytlc2MoYikrJzwvbGk+Jykuam9pbignJykrJzwvdWw+PC9kaXY+Jykuam9pbignJykpLmpvaW4oJycpKwogICAgJzxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPjQuINCm0LXQvdC+0LLQsCDQu9C40YHRgtCwOjwvZGl2Picrcm93c0h0bWwoKSsKICAgICc8ZGl2IGNsYXNzPSJmb290ZXItbm90ZSI+JytubCgoZGF0YS5jb250YWN0c3x8JycpLnNwbGl0KCdcXG4nKVswXXx8J9CS0YHQuNGH0LrQuCDRhtC10L3QuCDRgdCwINCx0LXQtyDQlNCU0KEgIScpKyc8L2Rpdj48ZGl2IGNsYXNzPSJjb250YWN0Ij4nK25sKChkYXRhLmNvbnRhY3RzfHwnJykuc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpKSsnPC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZTInKS5pbm5lckhUTUw9CiAgICAnPGRpdiBjbGFzcz0idGVybXMiPjxoMz41LiDQodGA0L7QuiDQt9CwINC40LfRgNCw0LHQvtGC0LrQsDo8L2gzPjx1bD48bGk+0KTQuNGA0LzQsCDigJjigJjQo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlOKAmOKAmCDQv9GA0LXQtNC+0YHRgtCw0LLRjyDRgdGA0L7QuiDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQtNC+ICcrZXNjKGRhdGEud29ya19kYXlzfHwzMCkrJyDRgNCw0LHQvtGC0L3QuCDQtNC90LguPC9saT48L3VsPicrCiAgICAnPGgzPjYuINCf0LvQsNGJ0LDQvdC1INC4INGB0YDQvtC60L7QstC1OjwvaDM+PHVsPicrKGRhdGEucGF5bWVudHx8JycpLnNwbGl0KCdcXG4nKS5maWx0ZXIoQm9vbGVhbikubWFwKHg9Pic8bGk+Jytlc2MoeCkrJzwvbGk+Jykuam9pbignJykrCiAgICAnPGxpPtCe0YTQtdGA0YLQsNGC0LAg0YHQtSDQuNC30LTQsNCy0LAg0L3QsCDQtNCw0YLQsDogJytkYXRlQmcoZGF0YS5pc3N1ZV9kYXRlfHx0b2RheSgpKSsnPC9saT48bGk+0J7RhNC10YDRgtCw0YLQsCDQtSDQstCw0LvQuNC00L3QsCDQtNC+OiAnK2RhdGVCZyh2YWxpZERhdGUoKSkrJzwvbGk+PC91bD4nKwogICAgJzxoMz44LiDQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LHQtdC70LXQttC60Lg6PC9oMz48dWwgY2xhc3M9Im5vdGVzIj4nKyhkYXRhLm5vdGVzfHwnJykuc3BsaXQoJ1xcbicpLmZpbHRlcihCb29sZWFuKS5tYXAoeD0+JzxsaT4nK2VzYyh4KSsnPC9saT4nKS5qb2luKCcnKSsnPC91bD48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9InNpZ25zIj48ZGl2PjxkaXY+0JjQt9Cz0L7RgtCy0LjQuzo8L2Rpdj48ZGl2IGNsYXNzPSJzaWdsaW5lIj48L2Rpdj48ZGl2IGNsYXNzPSJzaWctbmFtZSI+LyAnK2VzYyhkYXRhLnByZXBhcmVkX2J5fHwnJykrJyAvPC9kaXY+PC9kaXY+PGRpdj48ZGl2PtCf0YDQuNC10Ls6PC9kaXY+PGRpdiBjbGFzcz0ic2lnbGluZSI+PC9kaXY+PGRpdiBjbGFzcz0ic2lnLW5hbWUiPi8gJytlc2MoZGF0YS5hY2NlcHRlZF9ieXx8JycpKycgLzwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iZm9vdGVyLW5vdGUiIHN0eWxlPSJtYXJnaW4tdG9wOjcwcHgiPicrbmwoKGRhdGEuY29udGFjdHN8fCcnKS5zcGxpdCgnXFxuJylbMF18fCfQktGB0LjRh9C60Lgg0YbQtdC90Lgg0YHQsCDQsdC10Lcg0JTQlNChICEnKSsnPC9kaXY+PGRpdiBjbGFzcz0iY29udGFjdCI+JytubCgoZGF0YS5jb250YWN0c3x8JycpLnNwbGl0KCdcXG4nKS5zbGljZSgxKS5qb2luKCdcXG4nKSkrJzwvZGl2Pic7CiAgcmV0dXJuIHQ7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyKCl7CiAgdHJ5ewogICAgcmVhZEVkaXRvcigpOyBjb25zdCB0PXRvdGFscygpOwogICAgY29uc3Qgc2F2ZWQ9YXdhaXQgYWYoJ29mZmVycycsJ1BPU1QnLHtpZDpvZmZlcklkfHx1bmRlZmluZWQsbnVtOmRhdGEubnVtLGNsaWVudDpkYXRhLmNsaWVudCxzZXJ2aWNlOmRhdGEuc3ViamVjdCx0b3RhbDp0Lm9uZSxzdGF0dXM6ZGF0YS5zdGF0dXMsb2ZmZXJfdHlwZTpkYXRhLnR5cGUsZGV0YWlsczpkYXRhfSk7CiAgICBvZmZlcklkPXNhdmVkLmlkOyBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCcnLCdvZmZlci5odG1sP2lkPScrZW5jb2RlVVJJQ29tcG9uZW50KG9mZmVySWQpKTsgdG9hc3QoJ9Ce0YTQtdGA0YLQsNGC0LAg0LUg0LfQsNC/0LDQt9C10L3QsCcpOwogIH1jYXRjaChlKXt0b2FzdCgn0JPRgNC10YjQutCwOiAnK2UubWVzc2FnZSk7fQp9CmFzeW5jIGZ1bmN0aW9uIGR1cGxpY2F0ZU9mZmVyKCl7cmVhZEVkaXRvcigpO29mZmVySWQ9Jyc7ZGF0YS5udW09bnVtRGVmYXVsdCgpO2ZpbGxFZGl0b3IoKTtyZW5kZXJBbGwoKTthd2FpdCBzYXZlT2ZmZXIoKTt9CmFzeW5jIGZ1bmN0aW9uIGluaXQoKXsKICBpZihvZmZlcklkKXsKICAgIHRyeXtjb25zdCByb3c9YXdhaXQgYWYoJ29mZmVycycsJ0dFVCcsbnVsbCwnJmlkPScrZW5jb2RlVVJJQ29tcG9uZW50KG9mZmVySWQpKTtkYXRhPXJvdy5kZXRhaWxzP0pTT04ucGFyc2Uocm93LmRldGFpbHMpOnRlbXBsYXRlKHJvdy5vZmZlcl90eXBlfHwnb25lX3RpbWUnKTtkYXRhLm51bT1yb3cubnVtfHxkYXRhLm51bTtkYXRhLmNsaWVudD1yb3cuY2xpZW50fHxkYXRhLmNsaWVudDtkYXRhLnN1YmplY3Q9cm93LnNlcnZpY2V8fGRhdGEuc3ViamVjdDtkYXRhLnN0YXR1cz1yb3cuc3RhdHVzfHxkYXRhLnN0YXR1czt9Y2F0Y2goZSl7dG9hc3QoJ9CT0YDQtdGI0LrQsDogJytlLm1lc3NhZ2UpO2RhdGE9dGVtcGxhdGUocXMuZ2V0KCd0eXBlJyl8fCdvbmVfdGltZScpO30KICB9IGVsc2UgZGF0YT10ZW1wbGF0ZShxcy5nZXQoJ3R5cGUnKXx8J29uZV90aW1lJyk7CiAgaWYoIWRhdGEuaXNzdWVfZGF0ZSlkYXRhLmlzc3VlX2RhdGU9dG9kYXkoKTsgaWYoIWRhdGEubnVtKWRhdGEubnVtPW51bURlZmF1bHQoKTsKICBmaWxsRWRpdG9yKCk7IHJlbmRlckFsbCgpOwp9CmluaXQoKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'waybills.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtSDigJQgV2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOwotLWFjYzojNmM2M2ZmOy0tZ3JuOiMyMmM1NWU7LS1nZGltOnJnYmEoMzQsMTk3LDk0LC4xNCk7LS1yZWQ6I2VmNDQ0NDstLXJkaW06cmdiYSgyMzksNjgsNjgsLjE0KTstLWZuOidETSBTYW5zJyxzYW5zLXNlcmlmfQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLXR4KTttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MjJweCAxOHB4IDYwcHh9Ci53cmFwe21heC13aWR0aDoxMTUwcHg7bWFyZ2luOjAgYXV0b30KLnRvcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTZweDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweH0KaDF7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NjAwfQouc3Vie2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHh9Ci5sbmt7Y29sb3I6dmFyKC0tYWNjKTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTJweH0KLnBhbmVse2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MThweH0KLnBoe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9Ci5wdHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDB9Ci5idG57cGFkZGluZzo5cHggMTVweDtib3JkZXItcmFkaXVzOjlweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDB9Ci5idG4ucHtiYWNrZ3JvdW5kOnZhcigtLWFjYyk7Y29sb3I6I2ZmZn0KLmJ0bi5ze2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Y29sb3I6dmFyKC0tdHgyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCl9Ci5idG4uZHtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOnZhcigtLXJlZCl9CnRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZToxMi41cHh9CnRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjlweCAxMHB4O2NvbG9yOnZhcigtLXR4Myk7Zm9udC13ZWlnaHQ6NTAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7d2hpdGUtc3BhY2U6bm93cmFwfQp0ZHtwYWRkaW5nOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLmJhZGdle3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0KLmJhZGdlLmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWdkaW0pO2NvbG9yOiMxNTgwM2R9Ci5iYWRnZS5pbmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO2NvbG9yOnZhcigtLXR4Myl9Ci5hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6NnB4fQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHRleHRhcmVhe3dpZHRoOjEwMCU7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4O291dGxpbmU6bm9uZX0KaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyl9Ci5yb3cye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweH0KLnJvdzN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcjtnYXA6MTBweH0KLm1ve3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDM1LC41KTtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3otaW5kZXg6OTk5O3BhZGRpbmc6MzBweCAxNHB4O292ZXJmbG93OmF1dG99Ci5tby5zaG93e2Rpc3BsYXk6ZmxleH0KLm1ie2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMnB4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7cmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToyMHB4fQoudG9hc3R7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjIwcHg7cmlnaHQ6MjBweDtiYWNrZ3JvdW5kOiMxYTFhMmU7Y29sb3I6I2ZmZjtwYWRkaW5nOjEycHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lO3otaW5kZXg6MTIwMH0KI3ByaW50QXJlYXtkaXNwbGF5Om5vbmV9CkBtZWRpYSBwcmludHsKICBib2R5ICp7dmlzaWJpbGl0eTpoaWRkZW59CiAgI3ByaW50QXJlYSwjcHJpbnRBcmVhICp7dmlzaWJpbGl0eTp2aXNpYmxlfQogICNwcmludEFyZWF7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtwYWRkaW5nOjIwcHggMzBweH0KfQoucGRvYyBoMntmb250LXNpemU6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNWVtfQoucGRvYyB0YWJsZXttYXJnaW4tdG9wOjE2cHh9Ci5wZG9jIHRkLC5wZG9jIHRoe2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjhweH0KLnBkb2MgLnNpZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDo1MHB4O2ZvbnQtc2l6ZToxMnB4fQoucGRvYyAuc2lnIGRpdnt0ZXh0LWFsaWduOmNlbnRlcn0KLnBkb2MgLnNpZyAubGluZXtib3JkZXItdG9wOjFweCBzb2xpZCAjMzMzO21hcmdpbi10b3A6MzRweDtwYWRkaW5nLXRvcDo0cHg7d2lkdGg6MTYwcHh9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2PjxoMT7wn5qaINCf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LU8L2gxPjxkaXYgY2xhc3M9InN1YiI+0JzQn9ChLCDRiNC+0YTRjNC+0YDQuCwg0LzQsNGA0YjRgNGD0YLQuCwg0LrQuNC70L7QvNC10YLRgNCw0LYsINCz0L7RgNC40LLQvjwvZGl2PjwvZGl2PgogICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImxuayI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgIDxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JLRgdC40YfQutC4INC/0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LU8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3Blbk5ldygpIj4rINCd0L7QsiDQv9GK0YLQtdC9INC70LjRgdGCPC9idXR0b24+PC9kaXY+CiAgICA8dGFibGUgaWQ9InRibCI+PHRoZWFkPjx0cj48dGg+4oSWPC90aD48dGg+0JTQsNGC0LA8L3RoPjx0aD7QqNC+0YTRjNC+0YA8L3RoPjx0aD7QnNCf0KE8L3RoPjx0aD7QnNCw0YDRiNGA0YPRgjwvdGg+PHRoPtCa0Lw8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD7Ql9Cw0YDQtdC20LTQsOKApjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0ibW8iIGlkPSJ3Yk1vZGFsIj48ZGl2IGNsYXNzPSJtYiI+CiAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCkiPuKclTwvc3Bhbj4KICA8aDMgaWQ9Im1vZGFsVGl0bGUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHg7Zm9udC1zaXplOjE1cHgiPtCd0L7QsiDQv9GK0YLQtdC9INC70LjRgdGCPC9oMz4KICA8ZGl2IGNsYXNzPSJyb3cyIj48ZGl2PjxsYWJlbD7QndC+0LzQtdGAPC9sYWJlbD48aW5wdXQgaWQ9IndfbnVtYmVyIj48L2Rpdj48ZGl2PjxsYWJlbD7QlNCw0YLQsDwvbGFiZWw+PGlucHV0IGlkPSJ3X2RhdGUiIHR5cGU9ImRhdGUiPjwvZGl2PjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCo0L7RhNGM0L7RgDwvbGFiZWw+PGlucHV0IGlkPSJ3X2RyaXZlciI+PC9kaXY+PGRpdj48bGFiZWw+0JrQu9C40LXQvdGCL9C+0LHQtdC60YI8L2xhYmVsPjxpbnB1dCBpZD0id19jbGllbnQiPjwvZGl2PjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCg0LXQsy4g0L3QvtC80LXRgCDQvdCwINCc0J/QoTwvbGFiZWw+PGlucHV0IGlkPSJ3X3BsYXRlIj48L2Rpdj48ZGl2PjxsYWJlbD7QktC40LQg0JzQn9ChPC9sYWJlbD48aW5wdXQgaWQ9IndfdnR5cGUiPjwvZGl2PjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCc0LDRgNGI0YDRg9GCIOKAlCDQvtGCPC9sYWJlbD48aW5wdXQgaWQ9IndfZnJvbSI+PC9kaXY+PGRpdj48bGFiZWw+0JzQsNGA0YjRgNGD0YIg4oCUINC00L48L2xhYmVsPjxpbnB1dCBpZD0id190byI+PC9kaXY+PC9kaXY+CiAgPGRpdiBjbGFzcz0icm93MyI+CiAgICA8ZGl2PjxsYWJlbD7QmtC8INC90LDRh9Cw0LvQvjwvbGFiZWw+PGlucHV0IGlkPSJ3X2ttc3RhcnQiIHR5cGU9Im51bWJlciIgc3RlcD0iMC4xIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCa0Lwg0LrRgNCw0Lk8L2xhYmVsPjxpbnB1dCBpZD0id19rbWVuZCIgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjEiPjwvZGl2PgogICAgPGRpdj48bGFiZWw+0JPQvtGA0LjQstC+ICjQuyk8L2xhYmVsPjxpbnB1dCBpZD0id19mdWVsIiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCg0LDQt9GF0L7QtCDQs9C+0YDQuNCy0L4gKNC70LIuL+KCrCk8L2xhYmVsPjxpbnB1dCBpZD0id19mdWVsY29zdCIgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjAxIj48L2Rpdj4KICA8ZGl2PjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9Indfc3RhdHVzIiBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEwcHggMTJweDtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHgiPjxvcHRpb24gdmFsdWU9ImFjdGl2ZSI+0JDQutGC0LjQstC10L08L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpbmFjdGl2ZSI+0J3QtdCw0LrRgtC40LLQtdC9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY29tcGxldGVkIj7Qn9GA0LjQutC70Y7Rh9C10L08L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj4KICA8bGFiZWw+0KLQvtCy0LDRgCAvINCx0LXQu9C10LbQutCwPC9sYWJlbD48dGV4dGFyZWEgaWQ9IndfY2FyZ28iIHJvd3M9IjIiPjwvdGV4dGFyZWE+CiAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLXRvcDoxNHB4Ij4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlV2IoKSI+8J+SviDQl9Cw0L/QsNC30Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj4KICA8L2Rpdj4KPC9kaXY+PC9kaXY+Cgo8ZGl2IGlkPSJwcmludEFyZWEiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b2FzdCIgaWQ9InRvYXN0Ij48L2Rpdj4KCjxzY3JpcHQ+Cid1c2Ugc3RyaWN0JzsKdmFyIEFQST0oZnVuY3Rpb24oKXsKICB2YXIgc2F2ZWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3d0X2FwaScpOwogIGlmKHNhdmVkKXJldHVybiBzYXZlZDsKICB2YXIgYmFzZT13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC93YXliaWxsc1wuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTsKICByZXR1cm4gYmFzZSsnL2FwaS5waHAnOwp9KSgpOwphc3luYyBmdW5jdGlvbiBhZihhY3Rpb24sbWV0aG9kLGJvZHkscXMpewogIG1ldGhvZD1tZXRob2R8fCdHRVQnO3FzPXFzfHwnJzsKICB0cnl7CiAgICB2YXIgbz17bWV0aG9kOm1ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9fTsKICAgIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogICAgdmFyIHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK3FzLG8pOwogICAgdmFyIGo9YXdhaXQgci5qc29uKCk7CiAgICByZXR1cm4gai5vaz9qLmRhdGE6bnVsbDsKICB9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKTtyZXR1cm4gbnVsbDt9Cn0KZnVuY3Rpb24gdG9hc3QobXNnKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW1zZzt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gb3Blbk1vZGFsKCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3diTW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7fQpmdW5jdGlvbiBjbG9zZU1vZGFsKCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3diTW9kYWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7fQoKdmFyIEVESVRfSUQ9bnVsbDsKZnVuY3Rpb24gb3Blbk5ldygpewogIEVESVRfSUQ9bnVsbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxUaXRsZScpLnRleHRDb250ZW50PSfQndC+0LIg0L/RitGC0LXQvSDQu9C40YHRgic7CiAgWyd3X251bWJlcicsJ3dfZHJpdmVyJywnd19jbGllbnQnLCd3X3BsYXRlJywnd192dHlwZScsJ3dfZnJvbScsJ3dfdG8nLCd3X2NhcmdvJ10uZm9yRWFjaChpZD0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlPScnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19kYXRlJykudmFsdWU9bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttc3RhcnQnKS52YWx1ZT0wOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttZW5kJykudmFsdWU9MDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsJykudmFsdWU9MDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsY29zdCcpLnZhbHVlPTA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfc3RhdHVzJykudmFsdWU9J2FjdGl2ZSc7CiAgb3Blbk1vZGFsKCk7Cn0KZnVuY3Rpb24gb3BlbkVkaXQodyl7CiAgRURJVF9JRD13LmlkOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbFRpdGxlJykudGV4dENvbnRlbnQ9J9Cf0YrRgtC10L0g0LvQuNGB0YIg4oSWICcrdy5udW1iZXI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfbnVtYmVyJykudmFsdWU9dy5udW1iZXJ8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RhdGUnKS52YWx1ZT13LmRhdGV8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RyaXZlcicpLnZhbHVlPXcuZHJpdmVyX25hbWV8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2NsaWVudCcpLnZhbHVlPXcuY2xpZW50fHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19wbGF0ZScpLnZhbHVlPXcudmVoaWNsZV9wbGF0ZXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfdnR5cGUnKS52YWx1ZT13LnZlaGljbGVfdHlwZXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfZnJvbScpLnZhbHVlPXcucm91dGVfZnJvbXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfdG8nKS52YWx1ZT13LnJvdXRlX3RvfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19rbXN0YXJ0JykudmFsdWU9dy5rbV9zdGFydHx8MDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19rbWVuZCcpLnZhbHVlPXcua21fZW5kfHwwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2Z1ZWwnKS52YWx1ZT13LmZ1ZWxfbGl0ZXJzfHwwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2Z1ZWxjb3N0JykudmFsdWU9dy5mdWVsX2Nvc3R8fDA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfc3RhdHVzJykudmFsdWU9dy5zdGF0dXN8fCdhY3RpdmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2NhcmdvJykudmFsdWU9dy5jYXJnb3x8Jyc7CiAgb3Blbk1vZGFsKCk7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZVdiKCl7CiAgdmFyIHBheWxvYWQ9ewogICAgaWQ6RURJVF9JRHx8dW5kZWZpbmVkLAogICAgbnVtYmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X251bWJlcicpLnZhbHVlLCBkYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RhdGUnKS52YWx1ZSwKICAgIGRyaXZlcl9uYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RyaXZlcicpLnZhbHVlLCBjbGllbnQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfY2xpZW50JykudmFsdWUsCiAgICB2ZWhpY2xlX3BsYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X3BsYXRlJykudmFsdWUsIHZlaGljbGVfdHlwZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd192dHlwZScpLnZhbHVlLAogICAgcm91dGVfZnJvbTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mcm9tJykudmFsdWUsIHJvdXRlX3RvOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X3RvJykudmFsdWUsCiAgICBrbV9zdGFydDpwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttc3RhcnQnKS52YWx1ZSl8fDAsIGttX2VuZDpwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttZW5kJykudmFsdWUpfHwwLAogICAgZnVlbF9saXRlcnM6cGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsJykudmFsdWUpfHwwLCBmdWVsX2Nvc3Q6cGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsY29zdCcpLnZhbHVlKXx8MCwKICAgIHN0YXR1czpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19zdGF0dXMnKS52YWx1ZSwgY2FyZ286ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfY2FyZ28nKS52YWx1ZQogIH07CiAgdmFyIHI9YXdhaXQgYWYoJ3dheWJpbGxzJywnUE9TVCcscGF5bG9hZCk7CiAgaWYocil7IHRvYXN0KCfQl9Cw0L/QuNGB0LDQvdC+Jyk7IGNsb3NlTW9kYWwoKTsgbG9hZExpc3QoKTsgfQp9CmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVdiKGlkKXsgaWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQstCw0L3QtT8nKSlyZXR1cm47IGF3YWl0IGFmKCd3YXliaWxscycsJ0RFTEVURScsJycsICcmaWQ9JytpZCk7IGxvYWRMaXN0KCk7IH0KYXN5bmMgZnVuY3Rpb24gdG9nZ2xlU3RhdHVzKHcpewogIHZhciBuZXh0ID0gdy5zdGF0dXM9PT0nYWN0aXZlJyA/ICdpbmFjdGl2ZScgOiAnYWN0aXZlJzsKICBhd2FpdCBhZignd2F5YmlsbF9zdGF0dXMnLCdQT1NUJyx7aWQ6dy5pZCxzdGF0dXM6bmV4dH0pOwogIGxvYWRMaXN0KCk7Cn0KCnZhciBBTEw9W107CmFzeW5jIGZ1bmN0aW9uIGxvYWRMaXN0KCl7CiAgQUxMPWF3YWl0IGFmKCd3YXliaWxscycpfHxbXTsKICB2YXIgdGJsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmwnKTsKICBpZighQUxMLmxlbmd0aCl7IHRibC5xdWVyeVNlbGVjdG9yKCd0Ym9keScpLmlubmVySFRNTD0nPHRyPjx0ZCBjb2xzcGFuPSI4IiBzdHlsZT0iY29sb3I6dmFyKC0tdHgzKSI+0J3Rj9C80LAg0L/RitGC0L3QuCDQu9C40YHRgtC+0LLQtTwvdGQ+PC90cj4nOyByZXR1cm47IH0KICB2YXIgaHRtbD0nPHRoZWFkPjx0cj48dGg+4oSWPC90aD48dGg+0JTQsNGC0LA8L3RoPjx0aD7QqNC+0YTRjNC+0YA8L3RoPjx0aD7QnNCf0KE8L3RoPjx0aD7QnNCw0YDRiNGA0YPRgjwvdGg+PHRoPtCa0Lw8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICBBTEwuZm9yRWFjaCh3PT57CiAgICB2YXIga209KHBhcnNlRmxvYXQody5rbV9lbmR8fDApLXBhcnNlRmxvYXQody5rbV9zdGFydHx8MCkpLnRvRml4ZWQoMSk7CiAgICBodG1sKz0nPHRyPjx0ZD4nK3cubnVtYmVyKyc8L3RkPjx0ZD4nK3cuZGF0ZSsnPC90ZD48dGQ+Jyt3LmRyaXZlcl9uYW1lKyc8L3RkPjx0ZD4nK3cudmVoaWNsZV9wbGF0ZSsnPC90ZD4nKwogICAgICAnPHRkPicrdy5yb3V0ZV9mcm9tKycg4oaSICcrdy5yb3V0ZV90bysnPC90ZD48dGQ+JytrbSsnINC60Lw8L3RkPicrCiAgICAgICc8dGQ+PHNwYW4gY2xhc3M9ImJhZGdlICcrdy5zdGF0dXMrJyIgb25jbGljaz1cJ3RvZ2dsZVN0YXR1cygnK0pTT04uc3RyaW5naWZ5KHcpLnJlcGxhY2UoLycvZywiJiMzOTsiKSsnKVwnPicrKHcuc3RhdHVzPT09J2FjdGl2ZSc/J9CQ0LrRgtC40LLQtdC9Jzoody5zdGF0dXM9PT0naW5hY3RpdmUnPyfQndC10LDQutGC0LjQstC10L0nOifQn9GA0LjQutC70Y7Rh9C10L0nKSkrJzwvc3Bhbj48L3RkPicrCiAgICAgICc8dGQgY2xhc3M9ImFjdGlvbnMiPjxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPVwnb3BlbkVkaXQoJytKU09OLnN0cmluZ2lmeSh3KS5yZXBsYWNlKC8nL2csIiYjMzk7IikrJylcJz7inI48L3NwYW4+JysKICAgICAgJzxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJwcmludFdiKFwnJyt3LmlkKydcJykiPvCflqg8L3NwYW4+JysKICAgICAgJzxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJkZWxldGVXYihcJycrdy5pZCsnXCcpIj7wn5eRPC9zcGFuPjwvdGQ+PC90cj4nOwogIH0pOwogIGh0bWwrPSc8L3Rib2R5Pic7CiAgdGJsLmlubmVySFRNTD1odG1sOwp9CgpmdW5jdGlvbiBwcmludFdiKGlkKXsKICB2YXIgdz1BTEwuZmluZCh4PT54LmlkPT09aWQpOyBpZighdylyZXR1cm47CiAgdmFyIGttPShwYXJzZUZsb2F0KHcua21fZW5kfHwwKS1wYXJzZUZsb2F0KHcua21fc3RhcnR8fDApKS50b0ZpeGVkKDEpOwogIHZhciBodG1sPSc8ZGl2IGNsYXNzPSJwZG9jIj48aDI+0J/RitGC0LXQvSDQu9C40YHRgiDihJYgJyt3Lm51bWJlcisnPC9oMj4nKwogICAgJzx0YWJsZT48dHI+PHRoPtCU0LDRgtCwPC90aD48dGQ+Jyt3LmRhdGUrJzwvdGQ+PHRoPtCo0L7RhNGM0L7RgDwvdGg+PHRkPicrdy5kcml2ZXJfbmFtZSsnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QoNC10LMuIOKEliDQvdCwINCc0J/QoTwvdGg+PHRkPicrdy52ZWhpY2xlX3BsYXRlKyc8L3RkPjx0aD7QktC40LQg0JzQn9ChPC90aD48dGQ+Jyt3LnZlaGljbGVfdHlwZSsnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QnNCw0YDRiNGA0YPRgjwvdGg+PHRkIGNvbHNwYW49IjMiPicrdy5yb3V0ZV9mcm9tKycg4oaSICcrdy5yb3V0ZV90bysnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QmtC8INCyINC90LDRh9Cw0LvQvtGC0L48L3RoPjx0ZD4nK3cua21fc3RhcnQrJzwvdGQ+PHRoPtCa0Lwg0LIg0LrRgNCw0Y88L3RoPjx0ZD4nK3cua21fZW5kKyc8L3RkPjwvdHI+JysKICAgICc8dHI+PHRoPtCY0LfQvNC40L3QsNGC0Lgg0LrQvDwvdGg+PHRkPicra20rJzwvdGQ+PHRoPtCT0L7RgNC40LLQviAo0LspPC90aD48dGQ+Jyt3LmZ1ZWxfbGl0ZXJzKyc8L3RkPjwvdHI+JysKICAgICc8dHI+PHRoPtCa0LvQuNC10L3Rgi/QvtCx0LXQutGCPC90aD48dGQgY29sc3Bhbj0iMyI+Jyt3LmNsaWVudCsnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QotC+0LLQsNGAL9Cx0LXQu9C10LbQutCwPC90aD48dGQgY29sc3Bhbj0iMyI+Jysody5jYXJnb3x8JycpKyc8L3RkPjwvdHI+PC90YWJsZT4nKwogICAgJzxkaXYgY2xhc3M9InNpZyI+PGRpdj48ZGl2IGNsYXNzPSJsaW5lIj7Qn9C+0LTQv9C40YEg0L3QsCDRiNC+0YTRjNC+0YDQsDwvZGl2PjwvZGl2PjxkaXY+PGRpdiBjbGFzcz0ibGluZSI+0J/QvtC00L/QuNGBINC90LAg0L7RgtCz0L7QstC+0YDQvdC40Lo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmludEFyZWEnKS5pbm5lckhUTUw9aHRtbDsKICB3aW5kb3cucHJpbnQoKTsKfQphc3luYyBmdW5jdGlvbiBtb2R1bGVHdWFyZChrZXksbGFiZWwpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGFmKCdicmFuZGluZ19zZXR0aW5ncycpOwogICAgaWYociAmJiAoci5saWNlbnNlX3N0YXRlPT09J2xvY2tlZCd8fHIubGljZW5zZV9zdGF0ZT09PSdpbnZhbGlkJykpewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrKHIubGljZW5zZV9tZXNzYWdlfHwn0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INCw0LrRgtC40LLQtdC9LicpKyc8L3A+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYociAmJiByLm1vZHVsZXNfZW5hYmxlZCAmJiByLm1vZHVsZXNfZW5hYmxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFyLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyPicrbGFiZWwrJyDQtSDQuNC30LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPtCi0L7Qt9C4INC80L7QtNGD0Lsg0LUg0LjQt9C60LvRjtGH0LXQvSDQt9CwINGC0LDQt9C4INC40L3RgdGC0LDQu9Cw0YbQuNGPLiDQodCy0YrRgNC20Lgg0YHQtSDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLjwvcD4nKwogICAgICAgICc8YSBocmVmPSJpbmRleC5odG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxNnB4O2NvbG9yOiM2YzYzZmYiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2Pic7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Y2F0Y2goZSl7fQogIHJldHVybiB0cnVlOwp9Cgptb2R1bGVHdWFyZCgnd2F5YmlsbHMnLCfQn9GK0YLQvdC40YLQtSDQu9C40YHRgtC+0LLQtScpLnRoZW4oZnVuY3Rpb24ob2speyBpZihvaykgbG9hZExpc3QoKTsgfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'webtrixia-contracts.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JTQvtCz0L7QstC+0YDQuCDigJQgV2VidHJpeGlhPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Tb3JhOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ewogIC0tZGFyazojMGQwZDE0OyAtLWFjY2VudDojNmM2M2ZmOyAtLWFjY2VudDI6I2E3OGJmYTsgLS1ncmVlbjojMTZhMzRhOwogIC0tZ3JlZW4tYmc6I2YwZmRmNDsgLS1ib3JkZXI6I2UwZGRmNTsgLS10ZXh0OiMxYTFhMmU7IC0tdGV4dDI6IzRhNGE2YTsKICAtLXRleHQzOiM4ODg4YWE7IC0tc3VyZmFjZTojZmFmOWZmOyAtLWFtYmVyOiNkOTc3MDY7Cn0KKnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e2ZvbnQtZmFtaWx5OidTb3JhJyxzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2YwZWVmYTttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MzBweCAyMHB4fQoKLyogU0VMRUNUT1IgUEFHRSAqLwouc2VsZWN0b3ItcGFnZXttYXgtd2lkdGg6OTAwcHg7bWFyZ2luOjAgYXV0b30KLnNlbGVjdG9yLWhlYWRlcnt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjM2cHh9Ci5zZWxlY3Rvci1oZWFkZXIgaW1ne2hlaWdodDozOHB4O21hcmdpbi1ib3R0b206MTZweH0KLnNlbGVjdG9yLXRpdGxle2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW4tYm90dG9tOjZweH0KLnNlbGVjdG9yLXN1Yntmb250LXNpemU6MTRweDtjb2xvcjp2YXIoLS10ZXh0Myl9Ci5jb250cmFjdC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsMWZyKTtnYXA6MTZweDttYXJnaW4tYm90dG9tOjI4cHh9Ci5jb250cmFjdC10eXBle2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MjRweCAyMHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4yczt0ZXh0LWFsaWduOmNlbnRlcn0KLmNvbnRyYWN0LXR5cGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzowIDRweCAyNHB4IHJnYmEoMTA4LDk5LDI1NSwuMTIpfQouY29udHJhY3QtdHlwZS5zZWxlY3RlZHtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOiNmNWYzZmZ9Ci5jdC1pY29ue2ZvbnQtc2l6ZTozMnB4O21hcmdpbi1ib3R0b206MTJweH0KLmN0LXRpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW4tYm90dG9tOjRweH0KLmN0LWRlc2N7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdGV4dDMpO2xpbmUtaGVpZ2h0OjEuNX0KLmdlbmVyYXRlLWJ0bntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjMwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoxNHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyOm5vbmU7Y29sb3I6I2ZmZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXN9Ci5nZW5lcmF0ZS1idG46aG92ZXJ7b3BhY2l0eTouOX0KLmdlbmVyYXRlLWJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZH0KCi8qIENPTlRSQUNUIERPQyBQQUdFICovCi5jb250cmFjdC1kb2MtcGFnZXtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjg2MHB4O21hcmdpbjowIGF1dG99Ci50b29sYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tYm90dG9tOjE2cHg7ZmxleC13cmFwOndyYXB9Ci50YnRue3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO3RyYW5zaXRpb246YWxsIC4xNXN9Ci50YnRuLnByaW1hcnl7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOiNmZmZ9Ci50YnRuLnNlY3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tdGV4dDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKX0KLnRidG4uYmFja3tiYWNrZ3JvdW5kOiNmNWYzZmY7Y29sb3I6dmFyKC0tYWNjZW50KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcil9Ci5lZGl0LWJhbm5lcntiYWNrZ3JvdW5kOiNmZmZiZWI7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEwcHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjojOTI0MDBlO21hcmdpbi1ib3R0b206MTRweDtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Ci5lZGl0LWJhbm5lci5zaG93e2Rpc3BsYXk6ZmxleH0KCi8qIERPQyBTVFlMRVMgKi8KLmRvY3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoyMHB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgNHB4IDQwcHggcmdiYSgxMDgsOTksMjU1LC4xKX0KLmRvYy1oZWFkZXJ7YmFja2dyb3VuZDp2YXIoLS1kYXJrKTtwYWRkaW5nOjM2cHggNTJweCAzMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0KLmRvYy1oZWFkZXI6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNjBweDtyaWdodDotNjBweDt3aWR0aDoyMjBweDtoZWlnaHQ6MjIwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDpyZ2JhKDEwOCw5OSwyNTUsLjEpfQouaGVhZGVyLXRvcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9Ci5sb2dvLWltZ3toZWlnaHQ6MzJweDtmaWx0ZXI6YnJpZ2h0bmVzcygxMCl9Ci5kb2MtdHlwZS1ibG9ja3t0ZXh0LWFsaWduOnJpZ2h0fQouZHQtbGFiZWx7Zm9udC1zaXplOjlweDtsZXR0ZXItc3BhY2luZzouMmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTttYXJnaW4tYm90dG9tOjRweH0KLmR0LXRpdGxle2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmZmO2xldHRlci1zcGFjaW5nOi0uM3B4fQouZHQtbnVte2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWFjY2VudDIpO21hcmdpbi10b3A6NHB4O2ZvbnQtZmFtaWx5OidETSBNb25vJyxtb25vc3BhY2V9Ci5oZWFkZXItYm90dG9te21hcmdpbi10b3A6MjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9Ci5oZWFkZXItcGFydGllc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjMwcHh9Ci5wYXJ0eS1sYWJlbHtmb250LXNpemU6OXB4O2xldHRlci1zcGFjaW5nOi4xNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTttYXJnaW4tYm90dG9tOjZweH0KLnBhcnR5LW5hbWV7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiNmZmY7bWFyZ2luLWJvdHRvbToycHh9Ci5wYXJ0eS1kZXRhaWx7Zm9udC1zaXplOjExcHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCk7bGluZS1oZWlnaHQ6MS43fQoucGFydHktZGl2aWRlcnt3aWR0aDoxcHg7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTttYXJnaW46MCAxMHB4fQouZG9jLWJvZHl7cGFkZGluZzowIDUycHh9Ci5jb250cmFjdC1zZWN0aW9ue2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7cGFkZGluZzoyMHB4IDB9Ci5jb250cmFjdC1zZWN0aW9uOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9Ci5jcy1udW17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWFjY2VudCk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4xZW07bWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQouY3MtbnVtOjpiZWZvcmV7Y29udGVudDonJzt3aWR0aDozcHg7aGVpZ2h0OjEzcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6MnB4O2ZsZXgtc2hyaW5rOjB9Ci5jcy10aXRsZXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dCk7bWFyZ2luLWJvdHRvbToxMnB4fQouY3MtYm9keXtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS45fQouY3MtYm9keSBwe21hcmdpbi1ib3R0b206OHB4fQouY3MtYm9keSBwOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfQouY3MtYm9keSAuYXJ0e3BhZGRpbmctbGVmdDoxNHB4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpO21hcmdpbjo2cHggMH0KLmNzLWJvZHkgdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjo2cHggMH0KLmNzLWJvZHkgdWwgbGl7cGFkZGluZzozcHggMCAzcHggMTZweDtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNzLWJvZHkgdWwgbGk6OmJlZm9yZXtjb250ZW50OifilrgnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtjb2xvcjp2YXIoLS1hY2NlbnQyKTtmb250LXNpemU6MTFweDt0b3A6NHB4fQouZWRpdGFibGUtZmllbGR7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkIHZhcigtLWFjY2VudDIpO21pbi13aWR0aDoxMDBweDtjb2xvcjp2YXIoLS10ZXh0KTtmb250LXdlaWdodDo1MDB9Ci5zaWduLXNlY3Rpb257cGFkZGluZzoyMHB4IDAgMzZweDtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjQwcHh9Ci5zaWduLWJveHtib3JkZXItdG9wOjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpO3BhZGRpbmctdG9wOjEycHh9Ci5zaWduLWxhYmVse2ZvbnQtc2l6ZTo5cHg7Y29sb3I6dmFyKC0tdGV4dDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMWVtO21hcmdpbi1ib3R0b206M3B4fQouc2lnbi1uYW1le2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0KX0KLnNpZ24tYXJlYXtoZWlnaHQ6NTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgdmFyKC0tYm9yZGVyKTttYXJnaW46MTJweCAwIDhweH0KLnNpZ24tZGF0ZS1saW5le2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQzKX0KLmRvYy1mb290ZXJ7YmFja2dyb3VuZDp2YXIoLS1kYXJrKTtwYWRkaW5nOjE2cHggNTJweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyfQouZm9vdGVyLWxlZnR7Zm9udC1zaXplOjExcHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9LmZvb3Rlci1sZWZ0IHN0cm9uZ3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC42NSl9Ci5mb290ZXItcmlnaHR7Zm9udC1zaXplOjEwcHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7dGV4dC1hbGlnbjpyaWdodDtsaW5lLWhlaWdodDoxLjh9Cltjb250ZW50ZWRpdGFibGU9InRydWUiXXtvdXRsaW5lOm5vbmU7Ym9yZGVyLXJhZGl1czozcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXM7Y3Vyc29yOnRleHR9Cltjb250ZW50ZWRpdGFibGU9InRydWUiXTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMTA4LDk5LDI1NSwuMDcpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMTA4LDk5LDI1NSwuMil9Ci5lZGl0LW1vZGUgLmVkaXRhYmxlLWZpZWxke2JhY2tncm91bmQ6cmdiYSgxMDgsOTksMjU1LC4wNCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1hY2NlbnQpO2N1cnNvcjp0ZXh0fQoKLyog4pWQ4pWQ4pWQIFBSSU5UIOKVkOKVkOKVkCAqLwpAbWVkaWEgcHJpbnQgewogIEBwYWdlIHsgc2l6ZTogQTQ7IG1hcmdpbjogMTVtbSAxNW1tIDIwbW0gMTVtbTsgfQogICogeyAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3QgIWltcG9ydGFudDsgcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdCAhaW1wb3J0YW50OyB9CiAgaHRtbCwgYm9keSB7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsgfQogIC5zZWxlY3Rvci1wYWdlLCAudG9vbGJhciwgLmVkaXQtYmFubmVyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgLmNvbnRyYWN0LWRvYy1wYWdlIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IH0KICAuZG9jIHsgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50OyBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7IH0KICAuZG9jLWhlYWRlciB7IGJhY2tncm91bmQ6ICMwZDBkMTQgIWltcG9ydGFudDsgcGFkZGluZzogMjBweCAzMHB4IDE2cHggIWltcG9ydGFudDsgfQogIC5kb2MtaGVhZGVyOjpiZWZvcmUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAuZHQtdGl0bGUgeyBmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsgfQogIC5kb2MtYm9keSB7IHBhZGRpbmc6IDAgMzBweCAhaW1wb3J0YW50OyB9CiAgLmNvbnRyYWN0LXNlY3Rpb24geyBwYWRkaW5nOiAxMnB4IDAgIWltcG9ydGFudDsgfQogIC5jcy1ib2R5IHsgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7IH0KICAuY3MtYm9keSBwIHsgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7IH0KICAuc2lnbi1zZWN0aW9uIHsgcGFkZGluZzogMTRweCAwIDIwcHggIWltcG9ydGFudDsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9CiAgLnNpZ24tYXJlYSB7IGhlaWdodDogMzVweCAhaW1wb3J0YW50OyB9CiAgLmRvYy1mb290ZXIgeyBiYWNrZ3JvdW5kOiAjMGQwZDE0ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDEwcHggMzBweCAhaW1wb3J0YW50OyB9CiAgW2NvbnRlbnRlZGl0YWJsZV0geyBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgfQogIC5lZGl0YWJsZS1maWVsZCB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjICFpbXBvcnRhbnQ7IH0KICBoMiB7IHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyB9CiAgLmNvbnRyYWN0LXNlY3Rpb24geyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPCEtLSBTRUxFQ1RPUiAtLT4KPGRpdiBjbGFzcz0ic2VsZWN0b3ItcGFnZSIgaWQ9InNlbGVjdG9yUGFnZSI+CiAgPGRpdiBjbGFzcz0ic2VsZWN0b3ItaGVhZGVyIj4KICAgIDxpbWcgc3JjPSJodHRwczovL3dlYnRyaXhpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDQvd3d3dy5wbmciIG9uZXJyb3I9InRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSciIGFsdD0iV2VidHJpeGlhIj4KICAgIDxkaXYgY2xhc3M9InNlbGVjdG9yLXRpdGxlIj7Qk9C10L3QtdGA0LjRgNCw0Lkg0LTQvtCz0L7QstC+0YA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNlbGVjdG9yLXN1YiI+0JjQt9Cx0LXRgNC10YLQtSDQstC40LTQsCDQtNC+0LPQvtCy0L7RgCwg0L/QvtC/0YrQu9C90LXRgtC1INC00LDQvdC90LjRgtC1INC4INC/0YDQuNC90YLQuNGA0LDQudGC0LU8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1ncmlkIj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ3dlYnNpdGUnKSIgaWQ9ImN0LXdlYnNpdGUiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn4yQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINGB0LDQudGCPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCY0LfRgNCw0LHQvtGC0LrQsCDQvdCwINGD0LXQsdGB0LDQudGCICsg0L7Qv9GG0LjQvtC90LDQu9C90LAg0L/QvtC00LTRgNGK0LbQutCwPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ3Nob3AnKSIgaWQ9ImN0LXNob3AiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn5uSPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINC+0L3Qu9Cw0LnQvSDQvNCw0LPQsNC30LjQvTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj5Xb29Db21tZXJjZSAvIEUtY29tbWVyY2UgKyDQv9C+0LTQtNGA0YrQttC60LA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3QtdHlwZSIgb25jbGljaz0ic2VsZWN0VHlwZSgnbWFya2V0aW5nJykiIGlkPSJjdC1tYXJrZXRpbmciPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn5OxPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINC80LDRgNC60LXRgtC40L3QszwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QodC+0YYuINC80YDQtdC20LgsIEdvb2dsZSBBZHMsIFNFTywg0YDQuNC50LvRgdC+0LLQtTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCdtYWludGVuYW5jZScpIiBpZD0iY3QtbWFpbnRlbmFuY2UiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn5SnPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINCY0KIg0L/QvtC00LTRgNGK0LbQutCwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCc0LXRgdC10YfQvdCwINC/0L7QtNC00YDRitC20LrQsCwg0YXQvtGB0YLQuNC90LMsINC80L7QvdC40YLQvtGA0LjQvdCzPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ3N1YmNvbnRyYWN0b3InKSIgaWQ9ImN0LXN1YmNvbnRyYWN0b3IiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7wn6SdPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QlNC+0LPQvtCy0L7RgCDQt9CwINC/0L7QtNC40LfQv9GK0LvQvdC40YLQtdC7PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCc0LXQttC00YMgV2VidHJpeGlhINC4INCy0YrQvdGI0LXQvSDQuNC30L/RitC70L3QuNGC0LXQuzwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCdjb21wbGV4JykiIGlkPSJjdC1jb21wbGV4Ij4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+4q2QPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LXRpdGxlIj7QmtC+0LzQv9C70LXQutGB0LXQvSDQtNC+0LPQvtCy0L7RgDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QodCw0LnRgi/QvNCw0LPQsNC30LjQvSArINC80LDRgNC60LXRgtC40L3QsyArINC/0L7QtNC00YDRitC20LrQsDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGJ1dHRvbiBjbGFzcz0iZ2VuZXJhdGUtYnRuIiBvbmNsaWNrPSJnZW5lcmF0ZUNvbnRyYWN0KCkiIGlkPSJnZW5lcmF0ZUJ0biIgZGlzYWJsZWQ+0JjQt9Cx0LXRgNC4INCy0LjQtCDQtNC+0LPQvtCy0L7RgCDihpI8L2J1dHRvbj4KPC9kaXY+Cgo8IS0tIENPTlRSQUNUIERPQyAtLT4KPGRpdiBjbGFzcz0iY29udHJhY3QtZG9jLXBhZ2UiIGlkPSJjb250cmFjdERvY1BhZ2UiPgogIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgPGJ1dHRvbiBjbGFzcz0idGJ0biBiYWNrIiBvbmNsaWNrPSJnb0JhY2soKSI+4oaQINCd0LDQt9Cw0LQ8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gc2VjIiBvbmNsaWNrPSJ0b2dnbGVFZGl0KCkiIGlkPSJlZGl0QnRuIj7inI/vuI8g0KDQtdC00LDQutGC0LjRgNCw0Lk8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gc2VjIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+8J+WqCDQn9GA0LjQvdGC0LjRgNCw0Lk8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gcHJpbWFyeSIgb25jbGljaz0id2luZG93LnByaW50KCkiPuKshyBQREY8L2J1dHRvbj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJlZGl0LWJhbm5lciIgaWQ9ImVkaXRCYW5uZXIiPuKcj++4jyDQmtC70LjQutC90Lgg0LLRitGA0YXRgyDQv9C+0LvQtdGC0LDRgtCwINC/0L7QtNGH0LXRgNGC0LDQvdC4INGBINC/0YPQvdC60YLQuNGAINC30LAg0YDQtdC00LDQutGG0LjRjy48L2Rpdj4KICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJjb250cmFjdERvYyI+PC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KbGV0IHNlbGVjdGVkVHlwZSA9IG51bGw7CmNvbnN0IG1vbnRocz1bJ9GP0L3RgycsJ9GE0LXQsicsJ9C80LDRgCcsJ9Cw0L/RgCcsJ9C80LDQuScsJ9GO0L3QuCcsJ9GO0LvQuCcsJ9Cw0LLQsycsJ9GB0LXQvycsJ9C+0LrRgicsJ9C90L7QtScsJ9C00LXQuiddOwpmdW5jdGlvbiBmbXREYXRlKGQpe3JldHVybiBkLmdldERhdGUoKSsnICcrbW9udGhzW2QuZ2V0TW9udGgoKV0rJyAnK2QuZ2V0RnVsbFllYXIoKSsn0LMuJ30KY29uc3QgVE9EQVkgPSBmbXREYXRlKG5ldyBEYXRlKCkpOwpjb25zdCBZRUFSID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwoKZnVuY3Rpb24gc2VsZWN0VHlwZSh0eXBlKSB7CiAgc2VsZWN0ZWRUeXBlID0gdHlwZTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29udHJhY3QtdHlwZScpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LScrdHlwZSkuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVCdG4nKS5kaXNhYmxlZCA9IGZhbHNlOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZW5lcmF0ZUJ0bicpLnRleHRDb250ZW50ID0gJ9CT0LXQvdC10YDQuNGA0LDQuSDQtNC+0LPQvtCy0L7RgNCwIOKGkic7Cn0KCmZ1bmN0aW9uIGdvQmFjaygpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0b3JQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jUGFnZScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgZWRpdE1vZGUgPSBmYWxzZTsKfQoKbGV0IGVkaXRNb2RlID0gZmFsc2U7CmZ1bmN0aW9uIHRvZ2dsZUVkaXQoKSB7CiAgZWRpdE1vZGUgPSAhZWRpdE1vZGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRCYW5uZXInKS5jbGFzc0xpc3QudG9nZ2xlKCdzaG93JywgZWRpdE1vZGUpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0QnRuJykudGV4dENvbnRlbnQgPSBlZGl0TW9kZSA/ICfinIUg0JPQvtGC0L7QstC+JyA6ICfinI/vuI8g0KDQtdC00LDQutGC0LjRgNCw0LknOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmFjdERvYycpLmNsYXNzTGlzdC50b2dnbGUoJ2VkaXQtbW9kZScsIGVkaXRNb2RlKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbY29udGVudGVkaXRhYmxlXSwgLmVkaXRhYmxlLWZpZWxkJykuZm9yRWFjaChlbCA9PiB7CiAgICBlbC5jb250ZW50RWRpdGFibGUgPSBlZGl0TW9kZSA/ICd0cnVlJyA6ICdmYWxzZSc7CiAgfSk7Cn0KCmZ1bmN0aW9uIGYobGFiZWwsIGRlZj0nX19fX19fJykgewogIHJldHVybiBgPHNwYW4gY2xhc3M9ImVkaXRhYmxlLWZpZWxkIiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2RlZn08L3NwYW4+YDsKfQoKZnVuY3Rpb24gY29udHJhY3RIZWFkZXIodGl0bGUsIG51bSkgewogIHJldHVybiBgCiAgPGRpdiBjbGFzcz0iZG9jLWhlYWRlciI+CiAgICA8ZGl2IGNsYXNzPSJoZWFkZXItdG9wIj4KICAgICAgPGltZyBjbGFzcz0ibG9nby1pbWciIHNyYz0iaHR0cHM6Ly93ZWJ0cml4aWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA0L3d3d3cucG5nIiBvbmVycm9yPSJ0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnIiBhbHQ9IldlYnRyaXhpYSI+CiAgICAgIDxkaXYgY2xhc3M9ImRvYy10eXBlLWJsb2NrIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkdC1sYWJlbCI+0JTQvtC60YPQvNC10L3RgjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImR0LXRpdGxlIj4ke3RpdGxlfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImR0LW51bSI+4oSWICR7Zign0J3QvtC80LXRgCcsJ1dULdCU0J7Qky0nK1lFQVIrJy0nKydfX18nKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImhlYWRlci1ib3R0b20iPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItcGFydGllcyI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWxhYmVsIj7QmNC30L/RitC70L3QuNGC0LXQuzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydHktbmFtZSI+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWRldGFpbCI+0JXQmNCaOiAxMjM0NTY3ODk8YnI+b2ZmaWNlQHdlYnRyaXhpYS5jb20gwrcgKzM1OSA4OCA4ODggODg4ODxicj7Qn9GA0LXQtNGB0YLQsNCy0LvRj9Cy0LDQvdC+INC+0YI6INCl0LDQutCw0L0g0J7RgdC80LDQvTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1sYWJlbCI+0JLRitC30LvQvtC20LjRgtC10Ls8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LW5hbWUiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywn0JrQu9C40LXQvdGCIC8g0KTQuNGA0LzQsCDQntCe0JQnKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWRldGFpbCIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+0JXQmNCaOiAke2YoJ9CV0JjQmicsJ19fX19fX19fXycpfTxicj5FbWFpbDogJHtmKCdFbWFpbCcsJ19fX19fX0BfX19fXy5iZycpfTxicj7Qn9GA0LXQtNGB0YLQsNCy0LvRj9Cy0LDQvdC+INC+0YI6ICR7Zign0J/RgNC10LTRgdGC0LDQstC70Y/QstCw0YknLCdfX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImRvYy1ib2R5Ij5gOwp9CgpmdW5jdGlvbiBjb250cmFjdEZvb3RlcigpIHsKICByZXR1cm4gYAogIDxkaXYgY2xhc3M9InNpZ24tc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbGFiZWwiPtCX0LAg0JjQl9Cf0KrQm9Cd0JjQotCV0JvQryAvINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbmFtZSI+0KXQsNC60LDQvSDQntGB0LzQsNC9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogJHtUT0RBWX0gJm5ic3A7Jm5ic3A7INCf0L7QtNC/0LjRgSDQuCDQv9C10YfQsNGCOiBfX19fX19fX19fX19fPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNpZ24tYm94Ij4KICAgICAgPGRpdiBjbGFzcz0ic2lnbi1sYWJlbCI+0JfQsCDQktCq0JfQm9Ce0JbQmNCi0JXQm9CvPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbmFtZSIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogX19fX19fX19fX19fX19fICZuYnNwOyZuYnNwOyDQn9C+0LTQv9C40YEg0Lgg0L/QtdGH0LDRgjogX19fX19fX19fX19fXzwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPC9kaXY+PCEtLSAvZG9jLWJvZHkgLS0+CiAgPGRpdiBjbGFzcz0iZG9jLWZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGVmdCI+PHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiDigJQg0JTQuNCz0LjRgtCw0LvQvdCwINCw0LPQtdC90YbQuNGPIMK3IHdlYnRyaXhpYS5jb208L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1yaWdodCI+b2ZmaWNlQHdlYnRyaXhpYS5jb20gwrcgKzM1OSA4OCA4ODggODg4ODwvZGl2PgogIDwvZGl2PmA7Cn0KCmZ1bmN0aW9uIGNvbW1vblNlY3Rpb25zKHNlcnZpY2VEZXNjKSB7CiAgcmV0dXJuIGAKICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQldCU0JzQldCiINCd0JAg0JTQntCT0J7QktCe0KDQkDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC40LfQstGK0YDRiNC4INC30LAg0JLRitC30LvQvtC20LjRgtC10LvRjyDRgdC70LXQtNC90LjRgtC1INGD0YHQu9GD0LPQuDo8L3A+CiAgICAgICR7c2VydmljZURlc2N9CiAgICAgIDxwPtGB0YDQtdGJ0YMg0LfQsNC/0LvQsNGJ0LDQvdC1INC90LAg0YPQs9C+0LLQvtGA0LXQvdC+0YLQviDQsiDQvdCw0YHRgtC+0Y/RidC40Y8g0LTQvtCz0L7QstC+0YAg0LLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtS48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCh0KDQntCaINCd0JAg0JjQl9Cf0KrQm9Cd0JXQndCY0JU8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD4yLjEuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC40LfQv9GK0LvQvdC4INC/0L7RgNGK0YfQutCw0YLQsCDQsiDRgdGA0L7QuiDQtNC+IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJzMwICjRgtGA0LjQtNC10YHQtdGCKScpfTwvc3Ryb25nPiDRgNCw0LHQvtGC0L3QuCDQtNC90Lgg0L7RgiDQtNCw0YLQsNGC0LAg0L3QsCDQv9C+0LTQv9C40YHQstCw0L3QtSDQvdCwINC90LDRgdGC0L7Rj9GJ0LjRjyDQtNC+0LPQvtCy0L7RgCDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINCw0LLQsNC90YHQvtCy0L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvcD4KICAgICAgPHA+Mi4yLiDQodGA0L7QutGK0YIg0YHQtSDRgdGH0LjRgtCwINC30LAg0YHQv9Cw0LfQtdC9INC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUg0L3QsCDQs9C+0YLQvtCy0LjRjyDQv9GA0L7QtNGD0LrRgiDQt9CwINC+0LTQvtCx0YDQtdC90LjQtSDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8uPC9wPgogICAgICA8cD4yLjMuINCf0YDQuCDQt9Cw0LHQsNCy0Y/QvdC1INC+0YIg0YHRgtGA0LDQvdCwINC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjyAo0L3QtdC/0YDQtdC00L7RgdGC0LDQstGP0L3QtSDQvdCwINC80LDRgtC10YDQuNCw0LvQuCwg0YHRitC00YrRgNC20LDQvdC40LUsINC00L7RgdGC0YrQv9C4KSwg0YHRgNC+0LrRitGCINGB0LUg0YPQtNGK0LvQttCw0LLQsCDRgSDQv9C10YDQuNC+0LTQsCDQvdCwINC30LDQsdCw0LLRj9C90LUuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDM8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QptCV0J3QkCDQmCDQndCQ0KfQmNCdINCd0JAg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD4zLjEuINCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQt9Cw0L/Qu9Cw0YnQsCDQvdCwINCY0LfQv9GK0LvQvdC40YLQtdC70Y8g0LLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtSDQsiDRgNCw0LfQvNC10YAg0L3QsCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRg9C80LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0LHQtdC3INCy0LrQu9GO0YfQtdC90L4g0JTQlNChLjwvcD4KICAgICAgPHA+My4yLiDQn9C70LDRidCw0L3QtdGC0L4g0YHQtSDQuNC30LLRitGA0YjQstCwINC/0L4g0YHQu9C10LTQvdC40Y8g0LPRgNCw0YTQuNC6OjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPjUwJSAo0LDQstCw0L3RgS/QutCw0L/QsNGA0L4pPC9zdHJvbmc+IOKAlCDQv9GA0Lgg0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQtNC+0LPQvtCy0L7RgNCwOiAke2YoJ9CQ0LLQsNC90YEnLCfigqwgX19fX18nKX08L2xpPgogICAgICAgIDxsaT48c3Ryb25nPjUwJSAo0YTQuNC90LDQu9C10L0g0YLRgNCw0L3RiCk8L3N0cm9uZz4g4oCUINC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUg0L3QsCDQs9C+0YLQvtCy0LjRjyDQv9GA0L7QtdC60YI6ICR7Zign0KTQuNC90LDQuycsJ+KCrCBfX19fXycpfTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPjMuMy4g0J/Qu9Cw0YnQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQv9C+INCx0LDQvdC60L7QsiDQv9GK0YIg0L/QviDRgdC80LXRgtC60LAg0L3QsCDQmNC30L/RitC70L3QuNGC0LXQu9GPOiBJQkFOICR7ZignSUJBTicsJ0JHX18gX19fXyBfX19fIF9fIF9fX19fXyBfXycpfTwvcD4KICAgICAgPHA+My40LiDQpNCw0LrRgtGD0YDQsCDRgdC1INC40LfQtNCw0LLQsCDQsiDRgNCw0LzQutC40YLQtSDQvdCwIDUgKNC/0LXRgikg0YDQsNCx0L7RgtC90Lgg0LTQvdC4INGB0LvQtdC0INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0L/Qu9Cw0YnQsNC90LXRgtC+LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCQ0JLQkCDQmCDQl9CQ0JTQqtCb0JbQldCd0JjQryDQndCQINCY0JfQn9Cq0JvQndCY0KLQldCb0K88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8dWw+CiAgICAgICAgPGxpPtCU0LAg0LjQt9C/0YrQu9C90Lgg0L/QvtGA0YrRh9C60LDRgtCwINCyINGB0YDQvtC6INC4INCyINGB0YrQvtGC0LLQtdGC0YHRgtCy0LjQtSDRgSDRg9Cz0L7QstC+0YDQtdC90LjRgtC1INC40LfQuNGB0LrQstCw0L3QuNGPLjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0L/RgNC10LTQvtGB0YLQsNCy0Lgg0LTQviA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KDQtdCy0LjQt9C40LgnLCczICjRgtGA0LgpJyl9PC9zdHJvbmc+INCx0LXQt9C/0LvQsNGC0L3QuCDQutC+0YDQtdC60YbQuNC4INCyINGA0LDQvNC60LjRgtC1INC90LAg0L/RgNC+0LXQutGC0LAuPC9saT4KICAgICAgICA8bGk+0JTQsCDQv9C+0LTQtNGK0YDQttCwINC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwLCDQv9C+0LvRg9GH0LXQvdCwINC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjy48L2xpPgogICAgICAgIDxsaT7QlNCwINC40L3RhNC+0YDQvNC40YDQsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINC/0YDQuCDQvtGC0LrQu9C+0L3QtdC90LjRjyDQvtGCINC/0LXRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC/0LvQsNC9INC40LvQuCDQv9GA0Lgg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGCINC+0YIg0L/RgNC+0LzRj9C90LAg0L3QsCDRgdGA0L7QutCwLjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQkNCS0JAg0Jgg0JfQkNCU0KrQm9CW0JXQndCY0K8g0J3QkCDQktCq0JfQm9Ce0JbQmNCi0JXQm9CvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHVsPgogICAgICAgIDxsaT7QlNCwINC/0YDQtdC00L7RgdGC0LDQstGPINGB0LLQvtC10LLRgNC10LzQtdC90L3QviDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LzQsNGC0LXRgNC40LDQu9C4LCDRgdGK0LTRitGA0LbQsNC90LjQtSDQuCDQtNC+0YHRgtGK0L/QuC48L2xpPgogICAgICAgIDxsaT7QlNCwINC/0L7RgtCy0YrRgNC20LTQsNCy0LAg0LjQu9C4INC+0YLRhdCy0YrRgNC70Y8g0YEg0LzQvtGC0LjQstC40YDQsNC90L4g0YHRgtCw0L3QvtCy0LjRidC1INCyINGB0YDQvtC6INC00L4gPHN0cm9uZz41ICjQv9C10YIpPC9zdHJvbmc+INGA0LDQsdC+0YLQvdC4INC00L3QuC48L2xpPgogICAgICAgIDxsaT7QlNCwINC30LDQv9C70LDRidCwINGD0LPQvtCy0L7RgNC10L3QvtGC0L4g0LLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtSDQsiDRgdGA0L7Qui48L2xpPgogICAgICAgIDxsaT7QlNCwINC90LUg0YDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsCDQuNC70Lgg0LjQt9C/0L7Qu9C30LLQsCDRh9Cw0YHRgtC40YfQvdC4INGA0LXQt9GD0LvRgtCw0YLQuCDQv9GA0LXQtNC4INGE0LjQvdCw0LvQvdC+0YLQviDQv9C70LDRidCw0L3QtS48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDY8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QmNCd0KLQldCb0JXQmtCi0KPQkNCb0J3QkCDQodCe0JHQodCi0JLQldCd0J7QodCiPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+Ni4xLiDQodC70LXQtCDQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0YrQu9C90L7RgtC+INC/0LvQsNGJ0LDQvdC1LCDQktGK0LfQu9C+0LbQuNGC0LXQu9GP0YIg0L/RgNC40LTQvtCx0LjQstCwINC/0YDQsNCy0L7RgtC+INC90LAg0L/QvtC70LfQstCw0L3QtSDQvdCwINC40LfRgNCw0LHQvtGC0LXQvdC40Y8g0L/RgNC+0LTRg9C60YIuPC9wPgogICAgICA8cD42LjIuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQt9Cw0L/QsNC30LLQsCDQv9GA0LDQstC+0YLQviDQtNCwINCy0LrQu9GO0YfQstCwINC/0YDQvtC10LrRgtCwINCyINGB0LLQvtC10YLQviDQv9C+0YDRgtGE0L7Qu9C40L4sINC+0YHQstC10L0g0LDQutC+INCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQuNC30YDQuNGH0L3QviDQtSDQv9C+0LjRgdC60LDQuyDQutC+0L3RhNC40LTQtdC90YbQuNCw0LvQvdC+0YHRgi48L3A+CiAgICAgIDxwPjYuMy4g0JLRgdC40YfQutC4INC40LfQv9C+0LvQt9Cy0LDQvdC4INC70LjRhtC10L3Qt9C40YDQsNC90Lgg0YjRgNC40YTRgtC+0LLQtSwg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQuCDQv9C70YrQs9C40L3QuCDQvtGB0YLQsNCy0LDRgiDRgdC+0LHRgdGC0LLQtdC90L7RgdGCINC90LAg0YHRitC+0YLQstC10YLQvdC40YLQtSDQuNC8INC/0YDQuNGC0LXQttCw0YLQtdC70LguPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDc8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QntCi0JPQntCS0J7QoNCd0J7QodCiINCYINCT0JDQoNCQ0J3QptCY0K88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD43LjEuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQs9Cw0YDQsNC90YbQuNC+0L3QtdC9INC/0LXRgNC40L7QtCDQvtGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQk9Cw0YDQsNC90YbQuNGPJywnMzAgKNGC0YDQuNC00LXRgdC10YIpJyl9PC9zdHJvbmc+INC60LDQu9C10L3QtNCw0YDQvdC4INC00L3QuCDRgdC70LXQtCDQv9GA0LXQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RgNC+0LXQutGC0LAsINCyINGA0LDQvNC60LjRgtC1INC90LAg0LrQvtC50YLQviDQsdC10LfQv9C70LDRgtC90L4g0L7RgtGB0YLRgNCw0L3Rj9Cy0LAg0LHRitCz0L7QstC1LCDQv9GA0LjRh9C40L3QtdC90Lgg0L7RgiDRgNCw0LfRgNCw0LHQvtGC0LrQsNGC0LAuPC9wPgogICAgICA8cD43LjIuINCT0LDRgNCw0L3RhtC40Y/RgtCwINC90LUg0L/QvtC60YDQuNCy0LAg0L/QvtCy0YDQtdC00LgsINC/0YDQuNGH0LjQvdC10L3QuCDQvtGCOiDQv9GA0L7QvNC10L3QuCDQvdCw0L/RgNCw0LLQtdC90Lgg0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINC40LvQuCDRgtGA0LXRgtC4INC70LjRhtCwLCDRhdCw0LrQtdGA0YHQutC4INCw0YLQsNC60LgsINGB0YDQuNCy0L7QstC1INC90LAg0YXQvtGB0YLQuNC90LMg0LjQu9C4INC00LXQudGB0YLQstC40Y8g0L3QsCDQvdC10L/RgNC10L7QtNC+0LvQuNC80LAg0YHQuNC70LAuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDg8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQmtCg0JDQotCv0JLQkNCd0JUg0J3QkCDQlNCe0JPQntCS0J7QoNCQPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+OC4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC60YDQsNGC0Lgg0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1INC90LAg0YHRgtGA0LDQvdC40YLQtSwg0L7RhNC+0YDQvNC10L3QviDQsiDQv9C40YHQvNC10L0g0LLQuNC0LjwvcD4KICAgICAgPHA+OC4yLiDQn9GA0Lgg0L7RgtC60LDQtyDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8g0YHQu9C10LQg0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDRgNCw0LHQvtGC0LDRgtCwLCDQsNCy0LDQvdGB0YrRgiDQvdC1INGB0LUg0LLRgNGK0YnQsC48L3A+CiAgICAgIDxwPjguMy4g0J/RgNC4INC90LXQuNC30L/RitC70L3QtdC90LjQtSDQvtGCINGB0YLRgNCw0L3QsCDQvdCwINCY0LfQv9GK0LvQvdC40YLQtdC70Y8sINGC0L7QuSDQtNGK0LvQttC4INCy0YDRitGJ0LDQvdC1INC90LAg0LDQstCw0L3RgdC+0LLQvtGC0L4g0L/Qu9Cw0YnQsNC90LUuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDk8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Ql9CQ0JrQm9Cu0KfQmNCi0JXQm9Cd0Jgg0KDQkNCX0J/QntCg0JXQlNCR0Jg8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD45LjEuINCd0LDRgdGC0L7Rj9GJ0LjRj9GCINC00L7Qs9C+0LLQvtGAINC1INGB0YrRgdGC0LDQstC10L0g0LIg0LTQstCwINC10LTQvdCw0LrQstC4INC10LrQt9C10LzQv9C70Y/RgNCwIOKAlCDQv9C+INC10LTQuNC9INC30LAg0LLRgdGP0LrQsCDQvtGCINGB0YLRgNCw0L3QuNGC0LUuPC9wPgogICAgICA8cD45LjIuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQsiDQtNC+0LPQvtCy0L7RgNCwINCy0YrQv9GA0L7RgdC4INGB0LUg0L/RgNC40LvQsNCz0LAg0LTQtdC50YHRgtCy0LDRidC+0YLQviDQt9Cw0LrQvtC90L7QtNCw0YLQtdC70YHRgtCy0L4g0L3QsCDQoNC10L/Rg9Cx0LvQuNC60LAg0JHRitC70LPQsNGA0LjRjy48L3A+CiAgICAgIDxwPjkuMy4g0JLRgdC40YfQutC4INGB0L/QvtGA0L7QstC1INGB0LUg0YDQtdGI0LDQstCw0YIg0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1LCDQsCDQv9GA0Lgg0L3QtdCy0YrQt9C80L7QttC90L7RgdGCIOKAlCDQv9C+INGB0YrQtNC10LHQtdC9INGA0LXQtCDQsiDQutC+0LzQv9C10YLQtdC90YLQvdC40Y8g0YHRitC0INCyINCz0YAuICR7Zign0JPRgNCw0LQnLCdfX19fX19fX18nKX0uPC9wPgogICAgICA8cD45LjQuINCU0L7Qs9C+0LLQvtGA0YrRgiDQstC70LjQt9CwINCyINGB0LjQu9CwINC+0YIg0LTQsNGC0LDRgtCwINC90LAg0L/QvtC00L/QuNGB0LLQsNC90LXRgtC+INC80YMg0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQsNCy0LDQvdGB0L7QstC+0YLQviDQv9C70LDRidCw0L3QtS48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj5gOwp9Cgpjb25zdCBDT05UUkFDVFMgPSB7CiAgd2Vic2l0ZTogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0JjQl9Cg0JDQkdCe0KLQmtCQINCd0JAg0KPQldCR0KHQkNCZ0KInLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAke2NvbW1vblNlY3Rpb25zKGAKICAgICAgPHVsPgogICAgICAgIDxsaT7QoNCw0LfRgNCw0LHQvtGC0LrQsCDQvdCwINGD0LXQsdGB0LDQudGCINC90LAg0LHQsNC30LDRgtCwINC90LAgJHtmKCfQn9C70LDRgtGE0L7RgNC80LAnLCdXb3JkUHJlc3MnKX0g0YEg0YPQvdC40LrQsNC70LXQvSDQtNC40LfQsNC50L08L2xpPgogICAgICAgIDxsaT7QkNC00LDQv9GC0LjQstC90L7RgdGCINC30LAg0LLRgdC40YfQutC4INGD0YHRgtGA0L7QudGB0YLQstCwIChtb2JpbGUsIHRhYmxldCwgZGVza3RvcCk8L2xpPgogICAgICAgIDxsaT7QmNC90YLQtdCz0YDQsNGG0LjRjyDQvdCwINC00L4gJHtmKCfQodGC0YDQsNC90LjRhtC4JywnX18gKF9fXyknKX0g0YHRgtGA0LDQvdC40YbQuCDRgdGK0LTRitGA0LbQsNC90LjQtTwvbGk+CiAgICAgICAgPGxpPlNFTyDQvtC/0YLQuNC80LjQt9Cw0YbQuNGPINC4INGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0LIg0YLRitGA0YHQsNGH0LrQuNGC0LUgKEdvb2dsZSwgQmluZyk8L2xpPgogICAgICAgIDxsaT5TU0wg0YHQtdGA0YLQuNGE0LjQutCw0YIg0Lgg0LHQsNC30L7QstCwINGB0LjQs9GD0YDQvdC+0YHRgjwvbGk+CiAgICAgICAgPGxpPtCe0LHRg9GH0LXQvdC40LUg0LfQsCDRgNCw0LHQvtGC0LAg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdC40Y8g0L/QsNC90LXQuzwvbGk+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JTQvtC/0YrQu9C90LjRgtC10LvQvdCwINGE0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICA8L3VsPmApfQogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0J7QlNCU0KDQqtCW0JrQkCAo0J3QldCX0JDQlNCq0JvQltCY0KLQldCb0J3Qnik8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+0J/RgNC4INC20LXQu9Cw0L3QuNC1INC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjywg0YHQu9C10LQg0L/RgNC10LTQsNCy0LDQvdC1INC90LAg0YHQsNC50YLQsCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LrQu9GO0YfQtdC9INC+0YLQtNC10LvQtdC9INCU0L7Qs9C+0LLQvtGAINC30LAg0JjQoiDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDRgdGC0L7QudC90L7RgdGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQn9C+0LTQtNGA0YrQttC60LAnLCfigqwgX18gLyDQvNC10YHQtdGGJyl9PC9zdHJvbmc+LCDQstC60LvRjtGH0LLQsNGJOiDQsNC60YLRg9Cw0LvQuNC30LDRhtC40LgsINCx0LXQutGK0L/QuCwg0LzQvtC90LjRgtC+0YDQuNC90LMg0Lgg0L7RgtGB0YLRgNCw0L3Rj9Cy0LDQvdC1INC90LAg0L3QtdGA0LXQtNC90L7RgdGC0LguPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBzaG9wOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQmNCX0KDQkNCR0J7QotCa0JAg0J3QkCDQntCd0JvQkNCZ0J0g0JzQkNCT0JDQl9CY0J0nLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAke2NvbW1vblNlY3Rpb25zKGAKICAgICAgPHVsPgogICAgICAgIDxsaT7QmNC30YDQsNCx0L7RgtC60LAg0L3QsCDQvtC90LvQsNC50L0g0LzQsNCz0LDQt9C40L0g0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCAke2YoJ9Cf0LvQsNGC0YTQvtGA0LzQsCcsJ1dvb0NvbW1lcmNlIC8gV29yZFByZXNzJyl9PC9saT4KICAgICAgICA8bGk+0KPQvdC40LrQsNC70LXQvSDQtNC40LfQsNC50L0sINCw0LTQsNC/0YLQuNCy0LXQvSDQt9CwINCy0YHQuNGH0LrQuCDRg9GB0YLRgNC+0LnRgdGC0LLQsDwvbGk+CiAgICAgICAgPGxpPtCa0LDRh9Cy0LDQvdC1INC4INC90LDRgdGC0YDQvtC50LrQsCDQvdCwINC00L4gJHtmKCfQn9GA0L7QtNGD0LrRgtC4JywnX18gKF9fX19fKScpfSDQv9GA0L7QtNGD0LrRgtCwPC9saT4KICAgICAgICA8bGk+0JjQvdGC0LXQs9GA0LDRhtC40Y8g0YEg0L/Qu9Cw0YLQtdC20L3QuCDRgdC40YHRgtC10LzQuDogJHtmKCfQn9C70LDRidCw0L3QtScsJ9C90LDQu9C+0LbQtdC9INC/0LvQsNGC0LXQtiwg0LHQsNC90LrQvtCyINC/0YDQtdCy0L7QtCwg0LrQsNGA0YLQsCcpfTwvbGk+CiAgICAgICAgPGxpPtCY0L3RgtC10LPRgNCw0YbQuNGPINGBINC60YPRgNC40LXRgNGB0LrQuCDRhNC40YDQvNC4INC30LAg0LPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDRgtC+0LLQsNGA0LjRgtC10LvQvdC40YbQuDwvbGk+CiAgICAgICAgPGxpPtCa0LDRgtC10LPQvtGA0LjQuCwg0YTQuNC70YLRgNC4LCDRgNCw0LfRiNC40YDQtdC90L4g0YLRitGA0YHQtdC90LU8L2xpPgogICAgICAgIDxsaT5TRU8g0L7Qv9GC0LjQvNC40LfQsNGG0LjRjyDQuCDRgNC10LPQuNGB0YLRgNCw0YbQuNGPINCyIEdvb2dsZTwvbGk+CiAgICAgICAgPGxpPtCe0LHRg9GH0LXQvdC40LUg0LfQsCDRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC80LDQs9Cw0LfQuNC90LA8L2xpPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7Qv9GK0LvQvdC40YLQtdC70L3QvicsJ19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgIDwvdWw+YCl9CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxMDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KXQntCh0KLQmNCd0JMg0Jgg0J/QntCU0JTQoNCq0JbQmtCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjEwLjEuINCl0L7RgdGC0LjQvdCz0YrRgiDQvdCwINC80LDQs9Cw0LfQuNC90LAg0LU6ICR7Zign0KXQvtGB0YLQuNC90LMnLCfilqEg0L/RgNC10LTQvtGB0YLQsNCy0LXQvSDQvtGCINCY0LfQv9GK0LvQvdC40YLQtdC70Y8gJm5ic3A7Jm5ic3A7IOKWoSDQv9GA0LXQtNC+0YHRgtCw0LLQtdC9INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjycpfS48L3A+CiAgICAgICAgPHA+MTAuMi4g0J/RgNC4INC20LXQu9Cw0L3QuNC1INC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjyDRgdC1INGB0LrQu9GO0YfQstCwINC+0YLQtNC10LvQtdC9INCU0L7Qs9C+0LLQvtGAINC30LAg0JjQoiDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDRgdGC0L7QudC90L7RgdGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQn9C+0LTQtNGA0YrQttC60LAnLCfigqwgX18gLyDQvNC10YHQtdGGJyl9PC9zdHJvbmc+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgbWFya2V0aW5nOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQnNCQ0KDQmtCV0KLQmNCd0JMg0KPQodCb0KPQk9CYJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JTQnNCV0KIg0J3QkCDQlNCe0JPQntCS0J7QoNCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC/0YDQtdC00L7RgdGC0LDQstGPINGB0LvQtdC00L3QuNGC0LUg0LzQsNGA0LrQtdGC0LjQvdCzINGD0YHQu9GD0LPQuDo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwIEZhY2Vib29rIC8gSW5zdGFncmFtINCw0LrQsNGD0L3RgtC4PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEgR29vZ2xlIEFkcyDQutCw0LzQv9Cw0L3QuNC4INC4INC+0L/RgtC40LzQuNC30LDRhtC40Y88L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQlNC90LXQstC90Lgg0YHRgtC+0YDQuNGC0LAg0Lgg0L/QvtGB0YLQvtCy0LU8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQl9Cw0YHQvdC10LzQsNC90LUg0L3QsCDQstC40LTQtdC+INGA0LjQudC70YHQvtCy0LUg0LIg0L7QsdC10LrRgtCwPC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0KHQtdC00LzQuNGH0L3QuCDQsdGA0L7RiNGD0YDQuCAoQTQvQTUsIFBERiArINC00LjQs9C40YLQsNC70LXQvSk8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSBWaWJlciDQutCw0L3QsNC7IOKAlCDQvdCw0YHRgtGA0L7QudC60LAg0Lgg0YPQv9GA0LDQstC70LXQvdC40LU8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQntGA0LPQsNC90LjQt9C40YDQsNC90LUg0L3QsCDRgtC+0LzQsdC+0LvQuCDQuCDQuNCz0YDQuDwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCc0LXRgdC10YfQtdC9INC+0YLRh9C10YIg0LfQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7Qv9GK0LvQvdC40YLQtdC70L3QsCDRg9GB0LvRg9Cz0LAnLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAyPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QodCg0J7QmiDQndCQINCU0J7Qk9Ce0JLQntCg0JA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+Mi4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0YHQtSDRgdC60LvRjtGH0LLQsCDQt9CwINC80LjQvdC40LzQsNC70LXQvSDRgdGA0L7QuiDQvtGCIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJzYgKNGI0LXRgdGCKScpfTwvc3Ryb25nPiDQvNC10YHQtdGG0LAsINGB0YfQuNGC0LDQvdC+INC+0YIgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPi48L3A+CiAgICAgICAgPHA+Mi4yLiDQodC70LXQtCDQuNC30YLQuNGH0LDQvdC1INC90LAg0LzQuNC90LjQvNCw0LvQvdC40Y8g0YHRgNC+0LosINC00L7Qs9C+0LLQvtGA0YrRgiDRgdC1INC/0L7QtNC90L7QstGP0LLQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC30LAg0YHQu9C10LTQstCw0Ykg0LzQtdGB0LXRhiwg0LDQutC+INC90LUg0LUg0L/RgNC10LrRgNCw0YLQtdC9LjwvcD4KICAgICAgICA8cD4yLjMuINCf0YDQtdC60YDQsNGC0Y/QstCw0L3QtdGC0L4g0LjQt9C40YHQutCy0LAg0L/QuNGB0LzQtdC90L4g0YPQstC10LTQvtC80LvQtdC90LjQtSDQvNC40L3QuNC80YPQvCA8c3Ryb25nPjMwICjRgtGA0LjQtNC10YHQtdGCKTwvc3Ryb25nPiDQtNC90Lgg0L/RgNC10LTQstCw0YDQuNGC0LXQu9C90L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KbQldCd0JAg0Jgg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+My4xLiDQnNC10YHQtdGH0L3QsNGC0LAg0YLQsNC60YHQsCDQt9CwINGD0YHQu9GD0LPQuNGC0LUg0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cm0LXQvdCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4sINGBINCy0LrQu9GO0YfQtdC90L4g0JTQlNChLjwvcD4KICAgICAgICA8cD4zLjIuINCf0LvQsNGJ0LDQvdC10YLQviDRgdC1INC40LfQstGK0YDRiNCy0LAg0LTQviA8c3Ryb25nPjUt0YLQviDRh9C40YHQu9C+PC9zdHJvbmc+INC90LAg0YLQtdC60YPRidC40Y8g0LzQtdGB0LXRhiDQv9C+INCx0LDQvdC60L7QsiDQv9GK0YIuPC9wPgogICAgICAgIDxwPjMuMy4g0J/RgNC4INC30LDQsdCw0LLRj9C90LUg0L3QsCDQv9C70LDRidCw0L3QtSDQvdCw0LQgMTAg0LTQvdC4LCDQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0LzQvtC20LUg0LTQsCDQv9GA0LXRg9GB0YLQsNC90L7QstC4INGD0YHQu9GD0LPQuNGC0LUg0LTQviDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINC00YrQu9C20LjQvNCw0YLQsCDRgdGD0LzQsC48L3A+CiAgICAgICAgPHA+My40LiDQoNC10LrQu9Cw0LzQvdC40YLQtSDQsdGO0LTQttC10YLQuCAoR29vZ2xlIEFkcywgRmFjZWJvb2sgQWRzKSDRgdC1INC/0L7QtdC80LDRgiDQuCDQv9C70LDRidCw0YIg0L7RgtC00LXQu9C90L4g0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDQ8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQkNCS0JAg0Jgg0JfQkNCU0KrQm9CW0JXQndCY0K88L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQvNC10YHQtdGH0LXQvSDQvtGC0YfQtdGCINC00L4gNS3RgtC+INGH0LjRgdC70L4g0L3QsCDRgdC70LXQtNCy0LDRidC40Y8g0LzQtdGB0LXRhi48L2xpPgogICAgICAgICAgPGxpPtCh0YrQtNGK0YDQttCw0L3QuNC10YLQviDRgdC1INGB0YrQs9C70LDRgdGD0LLQsCDRgSDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINC/0YDQtdC00Lgg0L/Rg9Cx0LvQuNC60YPQstCw0L3QtS48L2xpPgogICAgICAgICAgPGxpPtCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQtNC+0YHRgtGK0L8g0LTQviDQv9GA0L7RhNC40LvQuNGC0LUg0Lgg0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INC80LDRgtC10YDQuNCw0LvQuC48L2xpPgogICAgICAgICAgPGxpPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvdC1INC90L7RgdC4INC+0YLQs9C+0LLQvtGA0L3QvtGB0YIg0LfQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1INC+0YIg0L/Qu9Cw0YLQtdC90LjRgtC1INGA0LXQutC70LDQvNC4INC/0YDQuCDQvdC10LTQvtGB0YLQsNGC0YrRh9C10L0g0LHRjtC00LbQtdGCLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDUg4oCUIDg8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0J7QktCV0KDQmNCi0JXQm9Cd0J7QodCiLCDQn9Cg0JXQmtCg0JDQotCv0JLQkNCd0JUg0Jgg0JfQkNCa0JvQrtCn0JjQotCV0JvQndCYINCg0JDQl9Cf0J7QoNCV0JTQkdCYPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjUuMS4g0KHRgtGA0LDQvdC40YLQtSDRgdC1INC30LDQtNGK0LvQttCw0LLQsNGCINC00LAg0L/QsNC30Y/RgiDQv9C+0LLQtdGA0LjRgtC10LvQvdC+0YHRgiDQvdCwINGC0YrRgNCz0L7QstGB0LrQsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8uPC9wPgogICAgICAgIDxwPjYuMS4g0JTQvtCz0L7QstC+0YDRitGCINGB0LUg0L/RgNC10LrRgNCw0YLRj9Cy0LAg0YEgMzAt0LTQvdC10LLQvdC+INC/0LjRgdC80LXQvdC+INC/0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSDRgdC70LXQtCDQuNC30YLQuNGH0LDQvdC1INC90LAg0LzQuNC90LjQvNCw0LvQvdC40Y8g0YHRgNC+0LouPC9wPgogICAgICAgIDxwPjcuMS4g0J/RgNC4INGE0L7RgNGB0LzQsNC20L7RgNC90Lgg0L7QsdGB0YLQvtGP0YLQtdC70YHRgtCy0LAsINGB0YLRgNCw0L3QuNGC0LUg0L3QtSDQvdC+0YHRj9GCINC+0YLQs9C+0LLQvtGA0L3QvtGB0YIg0LfQsCDQvdC10LjQt9C/0YrQu9C90LXQvdC40LUuPC9wPgogICAgICAgIDxwPjguMS4g0JTQvtCz0L7QstC+0YDRitGCINC1INGB0YrRgdGC0LDQstC10L0g0LIg0LTQstCwINC10LrQt9C10LzQv9C70Y/RgNCwLiDQl9CwINC90LXRg9GA0LXQtNC10L3QuNGC0LUg0LLRitC/0YDQvtGB0Lgg0YHQtSDQv9GA0LjQu9Cw0LPQsCDQt9Cw0LrQvtC90L7QtNCw0YLQtdC70YHRgtCy0L7RgtC+INC90LAg0KDQkS48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCksCgogIG1haW50ZW5hbmNlOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQmNCiINCf0J7QlNCU0KDQqtCW0JrQkCcsICdXVC3QlNCe0JMnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQmNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ca0LvQuNC10L3RgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCS0YrQt9C70L7QttC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDE8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JTQnNCV0KI8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+PHA+0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINGB0LvQtdC00L3QuNGC0LUg0YPRgdC70YPQs9C4INC/0L4g0L/QvtC00LTRgNGK0LbQutCwINC90LAg0YPQtdCx0YHQsNC50YIv0L/Qu9Cw0YLRhNC+0YDQvNCwINC90LAg0LDQtNGA0LXRgTogPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7QvNC10LnQvScsJ19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz48L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjcvMjQg0LzQvtC90LjRgtC+0YDQuNC90LMg0L3QsCDQv9C70LDRgtGE0L7RgNC80LDRgtCwINC4INGB0LDQudGC0LA8L2xpPgogICAgICAgICAgPGxpPtCe0YLRgdGC0YDQsNC90Y/QstCw0L3QtSDQvdCwINC90LXRgNC10LTQvdC+0YHRgtC4INC4INGC0LXRhdC90LjRh9C10YHQutC4INC/0YDQvtCx0LvQtdC80Lg8L2xpPgogICAgICAgICAgPGxpPtCQ0LrRgtGD0LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YHQuNGB0YLQtdC80LDRgtCwIChDTVMsINC/0LvRitCz0LjQvdC4LCDRgtC10LzQuCkg4oCUINCy0LXQtNC90YrQtiDRgdC10LTQvNC40YfQvdC+PC9saT4KICAgICAgICAgIDxsaT7QldC20LXQtNC90LXQstC10L0g0LDQstGC0L7QvNCw0YLQuNGH0LXQvSDQsdC10LrRitC/INC90LAg0LHQsNC30LDRgtCwINC00LDQvdC90Lgg0Lgg0YTQsNC50LvQvtCy0LXRgtC1PC9saT4KICAgICAgICAgIDxsaT7QodC60LDQvdC40YDQsNC90LUg0LfQsCDQt9C70L7QvdCw0LzQtdGA0LXQvSDQtNC+0YHRgtGK0L8g4oCUINCy0LXQtNC90YrQtiDRgdC10LTQvNC40YfQvdC+PC9saT4KICAgICAgICAgIDxsaT7QodC80Y/QvdCwINC90LAg0LHQsNC90LXRgNC4INC4INGC0LXQutGB0YLQvtCy0L4g0YHRitC00YrRgNC20LDQvdC40LUg4oCUINC00L4gJHtmKCfQn9GA0L7QvNC10L3QuCcsJ18gKF9fX19fKScpfSDQv9GA0L7QvNC10L3QuCDQvNC10YHQtdGH0L3QvjwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQlNC+0L/RitC70L3QuNGC0LXQu9C90L4nLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAyPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCh0KDQntCaPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjIuMS4g0JTQvtCz0L7QstC+0YDRitGCINC1INCx0LXQt9GB0YDQvtGH0LXQvSDQuCDQstC70LjQt9CwINCyINGB0LjQu9CwINC+0YIgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPi48L3A+CiAgICAgICAgPHA+Mi4yLiDQn9GA0LXQutGA0LDRgtGP0LLQsCDRgdC1INGBINC/0LjRgdC80LXQvdC+INGD0LLQtdC00L7QvNC70LXQvdC40LUg0LzQuNC90LjQvNGD0LwgPHN0cm9uZz4zMCAo0YLRgNC40LTQtdGB0LXRgik8L3N0cm9uZz4g0LTQvdC4INC/0YDQtdC00LLQsNGA0LjRgtC10LvQvdC+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDM8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KbQldCd0JAg0Jgg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+My4xLiDQnNC10YHQtdGH0L3QsNGC0LAg0YLQsNC60YHQsCDQtSA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KbQtdC90LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0YEg0LLQutC70Y7Rh9C10L3QviDQlNCU0KEuPC9wPgogICAgICAgIDxwPjMuMi4g0J/Qu9Cw0YnQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNC+IDxzdHJvbmc+NS3RgtC+INGH0LjRgdC70L48L3N0cm9uZz4g0L3QsCDRgtC10LrRg9GJ0LjRjyDQvNC10YHQtdGGINC/0L4g0LHQsNC90LrQvtCyINC/0YrRgi48L3A+CiAgICAgICAgPHA+My4zLiDQpdC+0YHRgtC40L3Qs9GK0YIg0LU6ICR7Zign0KXQvtGB0YLQuNC90LMnLCfilqEg0LLQutC70Y7Rh9C10L0g0LIg0YLQsNC60YHQsNGC0LAgJm5ic3A7Jm5ic3A7IOKWoSDQvtGC0LTQtdC70L3QviDQt9Cw0L/Qu9Cw0YnQsNC9INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjycpfS48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0IOKAlCA3PC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCe0KLQk9Ce0JLQntCg0J3QntCh0KIsINCf0J7QktCV0KDQmNCi0JXQm9Cd0J7QodCiLCDQn9Cg0JXQmtCg0JDQotCv0JLQkNCd0JUsINCX0JDQmtCb0K7Qp9CY0KLQldCb0J3QnjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD40LjEuINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvdC1INC90L7RgdC4INC+0YLQs9C+0LLQvtGA0L3QvtGB0YIg0LfQsCDRidC10YLQuCwg0L/RgNC40YfQuNC90LXQvdC4INC+0YIg0LDRgtCw0LrQuCwg0YXQvtGB0YLQuNC90LMg0YHRgNC40LLQvtCy0LUg0LjQu9C4INGC0YDQtdGC0Lgg0LvQuNGG0LAuPC9wPgogICAgICAgIDxwPjQuMi4g0KHRgtGA0LDQvdC40YLQtSDQv9Cw0LfRj9GCINC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC90LAg0LTQvtGB0YLRitC/0LjRgtC1INC4INGC0LXRhdC90LjRh9C10YHQutCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjy48L3A+CiAgICAgICAgPHA+NS4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQutGA0LDRgtC10L0g0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1INC40LvQuCDRgSAzMC3QtNC90LXQstC90L4g0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1LjwvcD4KICAgICAgICA8cD42LjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDQtSDRgdGK0YHRgtCw0LLQtdC9INCyINC00LLQsCDQtdC60LfQtdC80L/Qu9GP0YDQsC4g0JfQsCDQvdC10YPRgNC10LTQtdC90LjRgtC1INCy0YrQv9GA0L7RgdC4INGB0LUg0L/RgNC40LvQsNCz0LAg0LfQsNC60L7QvdC+0LTQsNGC0LXQu9GB0YLQstC+0YLQviDQvdCwINCg0JEuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBzdWJjb250cmFjdG9yOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQn9Ce0JTQmNCX0J/QqtCb0J3QldCd0JjQlScsICdXVC3Qn9Ce0JQnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmZmYzY2Q7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hbWJlcikiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCT0LvQsNCy0LXQvSDQuNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC7JywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQlNCc0JXQojwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD7Qk9C70LDQstC90LjRj9GCINC40LfQv9GK0LvQvdC40YLQtdC7INCy0YrQt9C70LDQs9CwINC90LAg0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRjyDRgdC70LXQtNC90LjRgtC1INC00LXQudC90L7RgdGC0Lg6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cj0YHQu9GD0LPQsCAxJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cj0YHQu9GD0LPQsCAyJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cj0YHQu9GD0LPQsCAzJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxwPtCyINGA0LDQvNC60LjRgtC1INC90LAg0L/RgNC+0LXQutGCOiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0J/RgNC+0LXQutGCJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDI8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KHQoNCe0Jo8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+Mi4xLiDQodGA0L7QuiDQvdCwINC40LfQv9GK0LvQvdC10L3QuNC1OiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRgNC+0LonLCdfXyAoX19fX18pJyl9PC9zdHJvbmc+INGA0LDQsdC+0YLQvdC4INC00L3QuCDQvtGCINC/0L7QtNC/0LjRgdCy0LDQvdC10YLQvi48L3A+CiAgICAgICAgPHA+Mi4yLiDQn9GA0Lgg0LfQsNCx0LDQstGP0L3QtSwg0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGD0LLQtdC00L7QvNGP0LLQsCDQvdC10LfQsNCx0LDQstC90L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMzwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QktCq0JfQndCQ0JPQoNCQ0JbQlNCV0J3QmNCVPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjMuMS4g0JLRitC30L3QsNCz0YDQsNC20LTQtdC90LjQtdGC0L4g0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YPQvNCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4uPC9wPgogICAgICAgIDxwPjMuMi4g0J/Qu9Cw0YnQsNC90LU6ICR7Zign0JPRgNCw0YTQuNC6INC/0LvQsNGJ0LDQvdC1Jywn4pahINC10LTQvdC+0LrRgNCw0YLQvdC+INC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUgJm5ic3A7Jm5ic3A7IOKWoSA1MCUg0LDQstCw0L3RgSArIDUwJSDQv9GA0Lgg0L/RgNC10LTQsNCy0LDQvdC1Jyl9LjwvcD4KICAgICAgICA8cD4zLjMuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQuNC30LTQsNCy0LAg0YTQsNC60YLRg9GA0LAv0YDQsNC30L/QuNGB0LrQsCDQt9CwINC/0L7Qu9GD0YfQtdC90LDRgtCwINGB0YPQvNCwLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDQ8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QntCS0JXQoNCY0KLQldCb0J3QntCh0KIg0Jgg0J3QmtCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjQuMS4g0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGB0LUg0LfQsNC00YrQu9C20LDQstCwINC00LAg0L/QsNC30Lgg0L/QvtCy0LXRgNC40YLQtdC70L3QvtGB0YIg0L7RgtC90L7RgdC90L4g0LrQu9C40LXQvdGC0LjRgtC1LCDQv9GA0L7QtdC60YLQuNGC0LUg0Lgg0YLRitGA0LPQvtCy0YHQutCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvdCwINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCULjwvcD4KICAgICAgICA8cD40LjIuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvdC1INC60L7QvdGC0LDQutGC0YPQstCwINC00LjRgNC10LrRgtC90L4g0YEg0LrQu9C40LXQvdGC0LjRgtC1INC90LAg0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQg0LHQtdC3INC40LfRgNC40YfQvdC+INGA0LDQt9GA0LXRiNC10L3QuNC1LjwvcD4KICAgICAgICA8cD40LjMuINCX0LDQsdGA0LDQvdCw0YLQsCDQtSDQsiDRgdC40LvQsCDQt9CwINC/0LXRgNC40L7QtCDQvtGCIDxzdHJvbmc+MjQgKNC00LLQsNC00LXRgdC10YIg0Lgg0YfQtdGC0LjRgNC4KTwvc3Ryb25nPiDQvNC10YHQtdGG0LAg0YHQu9C10LQg0L/RgNC10LrRgNCw0YLRj9Cy0LDQvdC1INC90LAg0YHRitGC0YDRg9C00L3QuNGH0LXRgdGC0LLQvtGC0L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNTwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QmNCd0KLQldCb0JXQmtCi0KPQkNCb0J3QkCDQodCe0JHQodCi0JLQldCd0J7QodCiINCYINCf0KDQldCU0JDQktCQ0J3QlTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD41LjEuINCS0YHQuNGH0LrQuCDRgNC10LfRg9C70YLQsNGC0Lgg0L7RgiDRgNCw0LHQvtGC0LDRgtCwINGB0LAg0YHQvtCx0YHRgtCy0LXQvdC+0YHRgiDQvdCwINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUINGB0LvQtdC0INC/0YrQu9C90L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvcD4KICAgICAgICA8cD41LjIuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNCw0LLQsCDRgNCw0LHQvtGC0LDRgtCwINC30LDQtdC00L3QviDRgSDQstGB0LjRh9C60Lgg0LjQt9GF0L7QtNC90Lgg0YTQsNC50LvQvtCy0LUsINC00L7RgdGC0YrQv9C4INC4INC00L7QutGD0LzQtdC90YLQsNGG0LjRjy48L3A+CiAgICAgICAgPHA+NS4zLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LUg0YHRitGB0YLQsNCy0LXQvSDQsiDQtNCy0LAg0LXQutC30LXQvNC/0LvRj9GA0LAuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQstGK0L/RgNC+0YHQuCDRgdC1INC/0YDQuNC70LDQs9CwINC30LDQutC+0L3QvtC00LDRgtC10LvRgdGC0LLQvtGC0L4g0L3QsCDQoNCRLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgY29tcGxleDogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9Ca0J7QnNCf0JvQldCa0KHQldCdINCU0J7Qk9Ce0JLQntCgJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgJHtjb21tb25TZWN0aW9ucyhgCiAgICAgIDxwPjxzdHJvbmc+SS4g0JjQt9GA0LDQsdC+0YLQutCwOjwvc3Ryb25nPjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4ke2YoJ9Ci0LjQvyDRgdCw0LnRgicsJ+KWoSDQo9C10LHRgdCw0LnRgiAmbmJzcDsmbmJzcDsg4pahINCe0L3Qu9Cw0LnQvSDQvNCw0LPQsNC30LjQvScpfSDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwICR7Zign0J/Qu9Cw0YLRhNC+0YDQvNCwJywnV29yZFByZXNzIC8gV29vQ29tbWVyY2UnKX08L2xpPgogICAgICAgIDxsaT7Qo9C90LjQutCw0LvQtdC9INC00LjQt9Cw0LnQvSwg0LDQtNCw0L/RgtC40LLQtdC9INC30LAg0LLRgdC40YfQutC4INGD0YHRgtGA0L7QudGB0YLQstCwPC9saT4KICAgICAgICA8bGk+U0VPINC+0L/RgtC40LzQuNC30LDRhtC40Y8g0Lgg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQsiBHb29nbGU8L2xpPgogICAgICA8L3VsPgogICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzdHJvbmc+SUkuINCc0LDRgNC60LXRgtC40L3QsyAo0LzQtdGB0LXRh9C90L4pOjwvc3Ryb25nPjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDRgdC+0YbQuNCw0LvQvdC4INC80YDQtdC20Lg8L2xpPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEgR29vZ2xlIEFkcyAvIEZhY2Vib29rIEFkczwvbGk+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQktC40LTQtdC+INGA0LjQudC70YHQvtCy0LUg0Lgg0YHRitC00YrRgNC20LDQvdC40LU8L2xpPgogICAgICA8L3VsPgogICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzdHJvbmc+SUlJLiDQn9C+0LTQtNGA0YrQttC60LAgKNC80LXRgdC10YfQvdC+KTo8L3N0cm9uZz48L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+Ny8yNCDQvNC+0L3QuNGC0L7RgNC40L3Qsywg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4LCDQsdC10LrRitC/0LgsINGB0LjQs9GD0YDQvdC+0YHRgjwvbGk+CiAgICAgIDwvdWw+YCl9CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7QlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0YPRgdC70L7QstC40Y88L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCc0JXQodCV0KfQndCYINCj0KHQm9Cj0JPQmDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD7QldC00L3QvtC60YDQsNGC0L3QvtGC0L4g0L/Qu9Cw0YnQsNC90LUg0LfQsCDQuNC30YDQsNCx0L7RgtC60LDRgtCwINC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmNC30YDQsNCx0L7RgtC60LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0LHQtdC3INCU0JTQoS48L3A+CiAgICAgICAgPHA+0JzQtdGB0LXRh9C90LDRgtCwINGC0LDQutGB0LAg0LfQsCDQvNCw0YDQutC10YLQuNC90LMg0Lgg0L/QvtC00LTRgNGK0LbQutCwINC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQnNC10YHQtdGH0L3QvicsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LCDRgSDQlNCU0KEsINC/0LvQsNGC0LjQvNCwINC00L4gNS3RgtC+INGH0LjRgdC70L4uPC9wPgogICAgICAgIDxwPtCc0LjQvdC40LzQsNC70LXQvSDRgdGA0L7QuiDQt9CwINC80LXRgdC10YfQvdC40YLQtSDRg9GB0LvRg9Cz0Lg6IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJzYgKNGI0LXRgdGCKScpfTwvc3Ryb25nPiDQvNC10YHQtdGG0LAuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpCn07CgpmdW5jdGlvbiBnZW5lcmF0ZUNvbnRyYWN0KCkgewogIGlmICghc2VsZWN0ZWRUeXBlKSByZXR1cm47CiAgY29uc3QgaHRtbCA9IENPTlRSQUNUU1tzZWxlY3RlZFR5cGVdKCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jJykuaW5uZXJIVE1MID0gaHRtbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0b3JQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3REb2NQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZWRpdE1vZGUgPSBmYWxzZTsKICB3aW5kb3cuc2Nyb2xsVG8oMCwwKTsKfQo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+', ); function wt_hub_json(array $data): void { header('Content-Type: application/json; charset=utf-8'); echo json_encode($data, JSON_UNESCAPED_UNICODE); exit; } function wt_hub_post(): array { return json_decode(file_get_contents('php://input'), true) ?: $_POST ?: []; } function wt_hub_norm_master(string $url): string { $url = trim($url); $url = preg_replace('~/admin(?:/.*)?$~', '', $url); $url = preg_replace('~/license/verify\.php$~', '', $url); return rtrim($url, '/'); } function wt_hub_write_files(array $files): void { foreach ($files as $rel => $b64) { $rel = str_replace('\\', '/', $rel); if (strpos($rel, '..') !== false) throw new RuntimeException('Bad path: ' . $rel); $path = __DIR__ . '/' . $rel; $dir = dirname($path); if (!is_dir($dir) && !mkdir($dir, 0775, true)) throw new RuntimeException('Cannot create folder: ' . $dir); if (file_put_contents($path, base64_decode($b64)) === false) throw new RuntimeException('Cannot write: ' . $rel); } } function wt_hub_write_config(array $b): void { $cfg = "<?php\n" . "define('DB_HOST'," . var_export($b['db_host'] ?? 'localhost', true) . ");\n" . "define('DB_NAME'," . var_export($b['db_name'] ?? '', true) . ");\n" . "define('DB_USER'," . var_export($b['db_user'] ?? '', true) . ");\n" . "define('DB_PASS'," . var_export($b['db_pass'] ?? '', true) . ");\n" . "define('TG_TOKEN'," . var_export($b['tg_token'] ?? '', true) . ");\n" . "define('TG_CHAT_ID'," . var_export($b['tg_chat_id'] ?? '', true) . ");\n"; if (file_put_contents(__DIR__ . '/config.php', $cfg) === false) throw new RuntimeException('Не мога да запиша config.php.'); } function wt_hub_pdo(array $b): PDO { return new PDO( 'mysql:host=' . ($b['db_host'] ?? 'localhost') . ';dbname=' . ($b['db_name'] ?? '') . ';charset=utf8mb4', $b['db_user'] ?? '', $b['db_pass'] ?? '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC] ); } function wt_hub_call(string $action): array { $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; $url = $scheme . '://' . ($_SERVER['HTTP_HOST'] ?? 'localhost') . rtrim(dirname($_SERVER['SCRIPT_NAME'] ?? '/'), '/\\') . '/api.php?action=' . rawurlencode($action); $resp = false; if (function_exists('curl_init')) { $ch = curl_init($url); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false]); $resp = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($resp === false) return ['ok' => false, 'error' => $err ?: 'curl failed']; } elseif (ini_get('allow_url_fopen')) { $resp = @file_get_contents($url, false, stream_context_create(['http' => ['timeout' => 20], 'ssl' => ['verify_peer' => false, 'verify_peer_name' => false]])); } $j = $resp ? json_decode($resp, true) : null; return is_array($j) ? $j : ['ok' => false, 'error' => 'Инсталационната стъпка не успя: ' . $action]; } function wt_hub_license_settings(PDO $pdo, array $b): void { $pdo->exec("CREATE TABLE IF NOT EXISTS settings ( id INT PRIMARY KEY DEFAULT 1, role VARCHAR(10) DEFAULT 'client', product_name VARCHAR(150) DEFAULT 'Webtrixia Hub', primary_color VARCHAR(20) DEFAULT '#6c63ff', admin_pass_hash VARCHAR(255), master_url VARCHAR(255), license_key VARCHAR(60), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); if ((int)$pdo->query("SELECT COUNT(*) FROM settings")->fetchColumn() === 0) { $pdo->exec("INSERT INTO settings (id, role) VALUES (1, 'client')"); } $master = wt_hub_norm_master($b['master_url'] ?? 'https://hub.webtrixia.com/licenses'); $product = trim($b['product_name'] ?? 'Webtrixia Hub') ?: 'Webtrixia Hub'; $key = trim($b['license_key'] ?? ''); $st = $pdo->prepare("UPDATE settings SET role='client', product_name=?, master_url=?, license_key=? WHERE id=1"); $st->execute([$product, $master, $key]); } if (($_GET['action'] ?? '') === 'install') { $b = wt_hub_post(); try { foreach (['db_host','db_name','db_user','license_key'] as $need) { if (trim((string)($b[$need] ?? '')) === '') throw new RuntimeException('Липсва поле: ' . $need); } wt_hub_write_files($WT_HUB_FILES); wt_hub_write_config($b); $pdo = wt_hub_pdo($b); wt_hub_license_settings($pdo, $b); $steps = [ 'Основни таблици' => wt_hub_call('install'), 'Фактури / HR таблици' => wt_hub_call('install_invoicing'), 'Платформа и модули' => wt_hub_call('install_platform'), ]; wt_hub_license_settings($pdo, $b); wt_hub_json(['ok' => true, 'steps' => $steps, 'url' => 'index.html']); } catch (Throwable $e) { wt_hub_json(['ok' => false, 'error' => $e->getMessage()]); } } ?><!doctype html> <html lang="bg"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Инсталация · Webtrixia Hub</title> <style> body{margin:0;min-height:100vh;font-family:Arial,sans-serif;background:#0a0a12;color:#ececf5;display:flex;align-items:center;justify-content:center;padding:24px} .card{width:100%;max-width:560px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:18px;padding:28px} h1{font-size:22px;margin:0 0 6px}.sub{color:#a0a0c0;font-size:13px;line-height:1.5;margin-bottom:18px} .grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:640px){.grid{grid-template-columns:1fr}} label{display:block;font-size:11px;text-transform:uppercase;color:#8585a8;margin:10px 0 5px} input{width:100%;box-sizing:border-box;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:rgba(0,0,0,.28);color:#fff;padding:12px;font-size:14px} button{width:100%;border:0;border-radius:11px;background:#6c63ff;color:#fff;padding:13px 16px;font-weight:700;margin-top:18px;cursor:pointer} .msg{display:none;margin-top:14px;border-radius:10px;padding:12px;font-size:13px;line-height:1.5}.ok{background:rgba(52,211,153,.12);color:#34d399}.bad{background:rgba(248,113,113,.12);color:#f87171} a{color:#9f98ff} </style> </head> <body><div class="card"> <h1>Инсталация на Webtrixia Hub</h1> <div class="sub">Този един файл разархивира HUB-а в текущата папка на поддомейна, подготвя базата данни и свързва инсталацията с централния лицензен панел.</div> <div class="grid"> <div><label>DB Host</label><input id="db_host" value="localhost"></div> <div><label>DB Name</label><input id="db_name"></div> <div><label>DB User</label><input id="db_user"></div> <div><label>DB Password</label><input id="db_pass" type="password"></div> </div> <label>Master лицензен URL</label><input id="master_url" value="https://hub.webtrixia.com/licenses"> <label>Лицензен ключ на клиента</label><input id="license_key" placeholder="WT-XXXX-XXXX-XXXX-XXXX"> <label>Име на продукта</label><input id="product_name" value="Webtrixia Hub"> <div class="grid"> <div><label>Telegram token (по избор)</label><input id="tg_token"></div> <div><label>Telegram chat id (по избор)</label><input id="tg_chat_id"></div> </div> <button onclick="run()">Стартирай инсталацията</button> <div id="msg" class="msg"></div> </div> <script> async function run(){ const ids=['db_host','db_name','db_user','db_pass','master_url','license_key','product_name','tg_token','tg_chat_id']; const b={}; ids.forEach(id=>b[id]=document.getElementById(id).value.trim()); const msg=document.getElementById('msg'); msg.className='msg ok'; msg.style.display='block'; msg.textContent='Инсталацията се изпълнява...'; try{ const r=await fetch('install_hub.php?action=install',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}); const j=await r.json(); if(j.ok){ msg.innerHTML='Инсталацията е готова. <a href="index.html">Отвори HUB панела</a><br><br>За сигурност изтрий install_hub.php след инсталацията.'; } else { msg.className='msg bad'; msg.textContent='Грешка: '+(j.error||'Неизвестна грешка'); } }catch(e){ msg.className='msg bad'; msg.textContent='Грешка: '+e.message; } } </script></body></html>
| ver. 1.4 |
Github
|
.
| PHP 8.2.31 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings