uni-jsframework-vue3.js 667.1 KB
Newer Older
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
1 2
//{"version":"4.08","encode":"base64"}
dmFyIF9fVW5pU2VydmljZVN0YXJ0VGltZV9fID0gRGF0ZS5ub3coKTt2YXIgZ2xvYmFsPXRoaXM7IHZhciBwcm9jZXNzPXtlbnY6e319OyB2YXIgc2V0VGltZW91dD1nbG9iYWwuc2V0VGltZW91dDsKKCgpPT57dmFyIFJwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgeHA9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczt2YXIgQkk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxNST1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO3ZhciBCcD0oZixzLHApPT5zIGluIGY/UnAoZixzLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpwfSk6ZltzXT1wLE1wPShmLHMpPT57Zm9yKHZhciBwIGluIHN8fChzPXt9KSlCSS5jYWxsKHMscCkmJkJwKGYscCxzW3BdKTtpZih4cClmb3IodmFyIHAgb2YgeHAocykpTUkuY2FsbChzLHApJiZCcChmLHAsc1twXSk7cmV0dXJuIGZ9O3ZhciBMST0oZixzKT0+e2Zvcih2YXIgcCBpbiBzKVJwKGYscCx7Z2V0OnNbcF0sZW51bWVyYWJsZTohMH0pfTt2YXIgT2E9T2JqZWN0LmZyZWV6ZTtmdW5jdGlvbiBkYyh7Z2V0Q3VycmVudFBhZ2VzOmYsdW5pOnMsVW5pU2hhcmVkOnAsVnVlOncsVnVlU2hhcmVkOk59KXt2YXIgeT1mdW5jdGlvbihoLEUsUixEZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE50KCl7bGV0IGplPWYoKSxudD1qZS5sZW5ndGg7aWYobnQpcmV0dXJuIGplW250LTFdfWZ1bmN0aW9uIFV0KCl7bGV0IGplPU50KCk7aWYoamUpcmV0dXJuIGplLiR2bX1mdW5jdGlvbiBUdChqZSxudCxPdCl7aWYoUi5pc1N0cmluZyhqZSkpT3Q9bnQsbnQ9amUsamU9VXQoKTtlbHNlIGlmKHR5cGVvZiBqZT09Im51bWJlciIpe2xldCBObj1mKCkuZmluZCh1bj0+dW4uJHBhZ2UuaWQ9PT1qZSk7Tm4/amU9Tm4uJHZtOmplPVV0KCl9aWYoIWplKXJldHVybjtpZihqZS5fX2NhbGxfaG9vaylyZXR1cm4gamUuX19jYWxsX2hvb2sobnQsT3QpO2xldCBubj1qZS4kW250XTtyZXR1cm4gbm4mJkUuaW52b2tlQXJyYXlGbnMobm4sT3QpfWZ1bmN0aW9uIFAoamUsbnQsT3Qsbm4pe1IuaXNGdW5jdGlvbihudCkmJkRlLmluamVjdEhvb2soamUsbnQuYmluZChPdCksbm4pfWZ1bmN0aW9uIEN0KGplLG50LE90KXt2YXIgbm47bGV0IE5uPWplLm1wVHlwZXx8T3QuJG1wVHlwZTtpZighKCFObnx8Tm49PT0iY29tcG9uZW50IikmJihPYmplY3Qua2V5cyhqZSkuZm9yRWFjaCh1bj0+e2lmKEUuaXNVbmlMaWZlY3ljbGVIb29rKHVuLGplW3VuXSwhMSkpe2xldCBhcj1qZVt1bl07Ui5pc0FycmF5KGFyKT9hci5mb3JFYWNoKFZuPT5QKHVuLFZuLE90LG50KSk6UCh1bixhcixPdCxudCl9fSksTm49PT0icGFnZSIpKXtudC5fX2lzVmlzaWJsZT0hMDt0cnl7VHQoT3QsRS5PTl9MT0FELG50LmF0dHJzLl9fcGFnZVF1ZXJ5KSxkZWxldGUgbnQuYXR0cnMuX19wYWdlUXVlcnksKChubj1PdC4kcGFnZSk9PT1udWxsfHxubj09PXZvaWQgMD92b2lkIDA6bm4ub3BlblR5cGUpIT09InByZWxvYWRQYWdlIiYmVHQoT3QsRS5PTl9TSE9XKX1jYXRjaCh1bil7Y29uc29sZS5lcnJvcih1bi5tZXNzYWdlK0UuTElORUZFRUQrdW4uc3RhY2spfX19ZnVuY3Rpb24gUm4oamUsbnQpe290KG50LGplLiRyZW5kZXJqcyxqZVsiJCIrRS5SRU5ERVJKU19NT0RVTEVTXSl9ZnVuY3Rpb24gb3QoamUsbnQsT3Q9e30pe2lmKCFSLmlzQXJyYXkobnQpKXJldHVybjtsZXQgbm49amUudWlkLE5uPWplLiR3eHNNb2R1bGVzfHwoamUuJHd4c01vZHVsZXM9W10pLHVuPWplLmN0eDtudC5mb3JFYWNoKGFyPT57T3RbYXJdJiYodW5bYXJdPXoobm4sT3RbYXJdLGFyKSxObi5wdXNoKGFyKSl9KX1mdW5jdGlvbiB6KGplLG50LE90KXtsZXQgbm49e307cmV0dXJuIG5ldyBQcm94eShubix7Z2V0KE5uLHVuKXtyZXR1cm4gbm5bdW5dfHwobm5bdW5dPUsoamUsbnQsT3QsdW4pKX19KX1mdW5jdGlvbiBLKGplLG50LE90LG5uKXtsZXQgTm49KCk9Pnt9LHVuPSgpPT5FLldYU19QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShbamUsbnQsT3QrIi4iK25uXSk7cmV0dXJuIG5ldyBQcm94eShObix7Z2V0KGFyLFZuKXtyZXR1cm4gVm49PT0idG9KU09OIj91bjpObltWbl18fChObltWbl09SyhqZSxudCxPdCsiLiIrbm4sVm4pKX0sYXBwbHkoYXIsVm4sUG4pe3JldHVybiBFLldYU19QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShbamUsbnQsT3QrIi4iK25uLFsuLi5Qbl1dKX19KX1mdW5jdGlvbiBtbihqZSxudCl7b3QobnQsamUuJHd4cyxqZVsiJCIrRS5XWFNfTU9EVUxFU10pfWZ1bmN0aW9uIGhuKGplLG50LE90KXttbihqZSxudCksUm4oamUsbnQpLEN0KGplLG50LE90KX1mdW5jdGlvbiB3bihqZSxudCxPdCl7cmV0dXJuIGplW250XT1PdH1mdW5jdGlvbiBYbihqZSwuLi5udCl7bGV0IE90PXRoaXNbamVdO3JldHVybiBPdD9PdCguLi5udCk6KGNvbnNvbGUuZXJyb3IoYG1ldGhvZCAke2plfSBub3QgZm91bmRgKSxudWxsKX1mdW5jdGlvbiBzaShqZSl7cmV0dXJuIGZ1bmN0aW9uKE90LG5uLE5uKXtpZighbm4pdGhyb3cgT3Q7bGV0IHVuPWplLl9pbnN0YW5jZTtpZighdW58fCF1bi5wcm94eSl0aHJvdyBPdDtUdCh1bi5wcm94eSxFLk9OX0VSUk9SLE90KX19ZnVuY3Rpb24gRWkoamUsbnQpe3JldHVybiBqZT9bLi4ubmV3IFNldChbXS5jb25jYXQoamUsbnQpKV06bnR9ZnVuY3Rpb24gWHIoamUpe0UuVW5pTGlmZWN5Y2xlSG9va3MuZm9yRWFjaChudD0+e2plW250XT1FaX0pfWxldCBtcixDbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLF9yPS9eKD86W0EtWmEtelxkKy9dezR9KSo/KD86W0EtWmEtelxkKy9dezJ9KD86PT0pP3xbQS1aYS16XGQrL117M309Pyk/JC87dHlwZW9mIGF0b2IhPSJmdW5jdGlvbiI/bXI9ZnVuY3Rpb24oamUpe2lmKGplPVN0cmluZyhqZSkucmVwbGFjZSgvW1x0XG5cZlxyIF0rL2csIiIpLCFfci50ZXN0KGplKSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdhdG9iJyBvbiAnV2luZG93JzogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtqZSs9Ij09Ii5zbGljZSgyLShqZS5sZW5ndGgmMykpO2Zvcih2YXIgbnQsT3Q9IiIsbm4sTm4sdW49MDt1bjxqZS5sZW5ndGg7KW50PUNuLmluZGV4T2YoamUuY2hhckF0KHVuKyspKTw8MTh8Q24uaW5kZXhPZihqZS5jaGFyQXQodW4rKykpPDwxMnwobm49Q24uaW5kZXhPZihqZS5jaGFyQXQodW4rKykpKTw8NnwoTm49Q24uaW5kZXhPZihqZS5jaGFyQXQodW4rKykpKSxPdCs9bm49PT02ND9TdHJpbmcuZnJvbUNoYXJDb2RlKG50Pj4xNiYyNTUpOk5uPT09NjQ/U3RyaW5nLmZyb21DaGFyQ29kZShudD4+MTYmMjU1LG50Pj44JjI1NSk6U3RyaW5nLmZyb21DaGFyQ29kZShudD4+MTYmMjU1LG50Pj44JjI1NSxudCYyNTUpO3JldHVybiBPdH06bXI9YXRvYjtmdW5jdGlvbiAkcihqZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChtcihqZSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihudCl7cmV0dXJuIiUiKygiMDAiK250LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KS5qb2luKCIiKSl9ZnVuY3Rpb24gUXIoKXtsZXQgamU9cy5nZXRTdG9yYWdlU3luYygidW5pX2lkX3Rva2VuIil8fCIiLG50PWplLnNwbGl0KCIuIik7aWYoIWplfHxudC5sZW5ndGghPT0zKXJldHVybnt1aWQ6bnVsbCxyb2xlOltdLHBlcm1pc3Npb246W10sdG9rZW5FeHBpcmVkOjB9O2xldCBPdDt0cnl7T3Q9SlNPTi5wYXJzZSgkcihudFsxXSkpfWNhdGNoKG5uKXt0aHJvdyBuZXcgRXJyb3IoIlx1ODNCN1x1NTNENlx1NUY1M1x1NTI0RFx1NzUyOFx1NjIzN1x1NEZFMVx1NjA2Rlx1NTFGQVx1OTUxOVx1RkYwQ1x1OEJFNlx1N0VDNlx1OTUxOVx1OEJFRlx1NEZFMVx1NjA2Rlx1NEUzQVx1RkYxQSIrbm4ubWVzc2FnZSl9cmV0dXJuIE90LnRva2VuRXhwaXJlZD1PdC5leHAqMWUzLGRlbGV0ZSBPdC5leHAsZGVsZXRlIE90LmlhdCxPdH1mdW5jdGlvbiB5aShqZSl7amUudW5pSURIYXNSb2xlPWZ1bmN0aW9uKG50KXtsZXR7cm9sZTpPdH09UXIoKTtyZXR1cm4gT3QuaW5kZXhPZihudCk+LTF9LGplLnVuaUlESGFzUGVybWlzc2lvbj1mdW5jdGlvbihudCl7bGV0e3Blcm1pc3Npb246T3R9PVFyKCk7cmV0dXJuIHRoaXMudW5pSURIYXNSb2xlKCJhZG1pbiIpfHxPdC5pbmRleE9mKG50KT4tMX0samUudW5pSURUb2tlblZhbGlkPWZ1bmN0aW9uKCl7bGV0e3Rva2VuRXhwaXJlZDpudH09UXIoKTtyZXR1cm4gbnQ+RGF0ZS5ub3coKX19ZnVuY3Rpb24ga24oamUpe2xldCBudD1qZS5fY29udGV4dC5jb25maWc7bnQuZXJyb3JIYW5kbGVyPUUuaW52b2tlQ3JlYXRlRXJyb3JIYW5kbGVyKGplLHNpKSxYcihudC5vcHRpb25NZXJnZVN0cmF0ZWdpZXMpO2xldCBPdD1udC5nbG9iYWxQcm9wZXJ0aWVzO3lpKE90KSxPdC4kc2V0PXduLE90LiRhcHBseU9wdGlvbnM9aG4sT3QuJGNhbGxNZXRob2Q9WG4sRS5pbnZva2VDcmVhdGVWdWVBcHBIb29rKGplKX1yZXR1cm4gaC5pbml0QXBwPWtuLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxofSh7fSxwLE4sdyk7cmV0dXJuIHl9ZnVuY3Rpb24gdHUoZix7bnZ1ZTpzLFVuaVNoYXJlZDpwLFZ1ZVNoYXJlZDp3LFZ1ZVJlYWN0aXZpdHk6Tn0pe2xldCB5PXtwbGF0Zm9ybTpzLmNvbmZpZy5lbnYucGxhdGZvcm0sVW5pU2hhcmVkOnAsVnVlU2hhcmVkOncsVnVlUmVhY3Rpdml0eTpOfTtyZXR1cm4gZih5LHMuZG9jdW1lbnQpfWZ1bmN0aW9uIERJKHtzZXRUaW1lb3V0OmYsY2xlYXJUaW1lb3V0OnMsdW5pOnAsZ2V0Q3VycmVudFBhZ2VzOncsVnVlOk4sd2VleDp5LHBsdXM6aCxCcm9hZGNhc3RDaGFubmVsOkUsVW5pVmlld0pTQnJpZGdlOlIsVnVlU2hhcmVkOkRlLFVuaVNoYXJlZDpOdCxfX3VuaUNvbmZpZzpVdH0pe3ZhciBUdD1mdW5jdGlvbihQLEN0LFJuKXsidXNlIHN0cmljdCI7bGV0IG90PVsibmF2aWdhdGUiLCJyZWRpcmVjdCIsInN3aXRjaFRhYiIsInJlTGF1bmNoIiwibmF2aWdhdGVCYWNrIl0sej1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sSz1bInNsaWRlLW91dC1yaWdodCIsInNsaWRlLW91dC1sZWZ0Iiwic2xpZGUtb3V0LXRvcCIsInNsaWRlLW91dC1ib3R0b20iLCJmYWRlLW91dCIsInpvb20taW4iLCJ6b29tLWZhZGUtaW4iLCJwb3Atb3V0Iiwibm9uZSJdLG1uPXtob3ZlckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJuYXZpZ2F0b3ItaG92ZXIifSx1cmw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG9wZW5UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJuYXZpZ2F0ZSIsdmFsaWRhdG9yKHYpe3JldHVybiBCb29sZWFuKH5vdC5pbmRleE9mKHYpKX19LGRlbHRhOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LGhvdmVyU3RhcnRUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjUwfSxob3ZlclN0YXlUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjYwMH0sZXhpc3RzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxob3ZlclN0b3BQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFuaW1hdGlvblR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiIsdmFsaWRhdG9yKHYpe3JldHVybiF2fHx6LmNvbmNhdChLKS5pbmNsdWRlcyh2KX19LGFuaW1hdGlvbkR1cmF0aW9uOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjMwMH19O2Z1bmN0aW9uIGhuKHYpe3JldHVybigpPT57aWYodi5vcGVuVHlwZSE9PSJuYXZpZ2F0ZUJhY2siJiYhdi51cmwpe2NvbnNvbGUuZXJyb3IoIjxuYXZpZ2F0b3IvPiBzaG91bGQgaGF2ZSB1cmwgYXR0cmlidXRlIHdoZW4gdXNpbmcgbmF2aWdhdGVUbywgcmVkaXJlY3RUbywgcmVMYXVuY2ggb3Igc3dpdGNoVGFiIik7cmV0dXJufWxldCB4PXBhcnNlSW50KHYuYW5pbWF0aW9uRHVyYXRpb24pO3N3aXRjaCh2Lm9wZW5UeXBlKXtjYXNlIm5hdmlnYXRlIjpwLm5hdmlnYXRlVG8oe3VybDp2LnVybCxhbmltYXRpb25UeXBlOnYuYW5pbWF0aW9uVHlwZXx8InBvcC1pbiIsYW5pbWF0aW9uRHVyYXRpb246eH0pO2JyZWFrO2Nhc2UicmVkaXJlY3QiOnAucmVkaXJlY3RUbyh7dXJsOnYudXJsLGV4aXN0czp2LmV4aXN0c30pO2JyZWFrO2Nhc2Uic3dpdGNoVGFiIjpwLnN3aXRjaFRhYih7dXJsOnYudXJsfSk7YnJlYWs7Y2FzZSJyZUxhdW5jaCI6cC5yZUxhdW5jaCh7dXJsOnYudXJsfSk7YnJlYWs7Y2FzZSJuYXZpZ2F0ZUJhY2siOnAubmF2aWdhdGVCYWNrKHtkZWx0YTp2LmRlbHRhLGFuaW1hdGlvblR5cGU6di5hbmltYXRpb25UeXBlfHwicG9wLW91dCIsYW5pbWF0aW9uRHVyYXRpb246eH0pO2JyZWFrfX19ZnVuY3Rpb24gd24odil7aWYodi5ob3ZlckNsYXNzJiZ2LmhvdmVyQ2xhc3MhPT0ibm9uZSIpe2xldCB4PXtob3ZlckNsYXNzOnYuaG92ZXJDbGFzc307cmV0dXJuIEN0Lmhhc093bih2LCJob3ZlclN0YXJ0VGltZSIpJiYoeC5ob3ZlclN0YXJ0VGltZT12LmhvdmVyU3RhcnRUaW1lKSxDdC5oYXNPd24odiwiaG92ZXJTdGF5VGltZSIpJiYoeC5ob3ZlclN0YXlUaW1lPXYuaG92ZXJTdGF5VGltZSksQ3QuaGFzT3duKHYsImhvdmVyU3RvcFByb3BhZ2F0aW9uIikmJih4LmhvdmVyU3RvcFByb3BhZ2F0aW9uPXYuaG92ZXJTdG9wUHJvcGFnYXRpb24pLHh9cmV0dXJue319ZnVuY3Rpb24gWG4odix4KXtyZXR1cm4gUC5jcmVhdGVFbGVtZW50Vk5vZGUoInUtdGV4dCIsQ3QuZXh0ZW5kKHthcHBlbmRBc1RyZWU6ITB9LHgpLHYpfWxldCBzaT1beyJuYXZpZ2F0b3ItaG92ZXIiOnsiIjp7YmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDAuMSkiLG9wYWNpdHk6Ljd9fX1dLEVpPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJOYXZpZ2F0b3IiLHByb3BzOm1uLHN0eWxlczpzaSxzZXR1cCh2LHtzbG90czp4fSl7bGV0ICQ9aG4odik7cmV0dXJuKCk9PlAuY3JlYXRlVk5vZGUoInZpZXciLFAubWVyZ2VQcm9wcyh3bih2KSx7b25DbGljazokfSksW3guZGVmYXVsdCYmeC5kZWZhdWx0KCldKX19KTtmdW5jdGlvbiBYcih2KXtyZXR1cm4gU3ltYm9sKHYpfWZ1bmN0aW9uIG1yKCl7bGV0IHY7dHJ5e3Y9UC5nZXRDdXJyZW50SW5zdGFuY2UoKS5yb290LnByb3h5LiRwYWdlLmlkfWNhdGNoKHgpe2xldCAkPWgud2Vidmlldy5jdXJyZW50V2VidmlldygpLmlkO3Y9aXNOYU4oTnVtYmVyKCQpKT8kOk51bWJlcigkKX1yZXR1cm4gdn1sZXQgQ24sX3IsJHI7ZnVuY3Rpb24gUXIoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz09Im9iamVjdCImJnR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZ0eXBlb2YgZG9jdW1lbnQ9PSJvYmplY3QiPyJ3ZWJ2aWV3IjoidjgifWZ1bmN0aW9uIHlpKCl7cmV0dXJuIENuLndlYnZpZXcuY3VycmVudFdlYnZpZXcoKS5pZH1sZXQga24samUsbnQ9e307ZnVuY3Rpb24gT3Qodil7bGV0IHg9di5kYXRhJiZ2LmRhdGEuX19tZXNzYWdlO2lmKCF4fHwheC5fX3BhZ2UpcmV0dXJuO2xldCAkPXguX19wYWdlLFU9bnRbJF07VSYmVSh4KSx4LmtlZXB8fGRlbGV0ZSBudFskXX1mdW5jdGlvbiBubih2LHgpe1FyKCk9PT0idjgiPyRyPyhrbiYma24uY2xvc2UoKSxrbj1uZXcgJHIoeWkoKSksa24ub25tZXNzYWdlPU90KTpqZXx8KGplPV9yLnJlcXVpcmVNb2R1bGUoImdsb2JhbEV2ZW50IiksamUuYWRkRXZlbnRMaXN0ZW5lcigicGx1c01lc3NhZ2UiLE90KSk6d2luZG93Ll9fcGx1c01lc3NhZ2U9T3QsbnRbdl09eH1jbGFzcyBObntjb25zdHJ1Y3Rvcih4KXt0aGlzLndlYnZpZXc9eH1zZW5kTWVzc2FnZSh4KXtsZXQgJD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHtfX21lc3NhZ2U6e2RhdGE6eH19KSksVT10aGlzLndlYnZpZXcuaWQ7JHI/bmV3ICRyKFUpLnBvc3RNZXNzYWdlKCQpOkNuLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3JiZDbi53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldygkLFUpfWNsb3NlKCl7dGhpcy53ZWJ2aWV3LmNsb3NlKCl9fWZ1bmN0aW9uIHVuKHtjb250ZXh0OnY9e30sdXJsOngsZGF0YTokPXt9LHN0eWxlOlU9e30sb25NZXNzYWdlOlosb25DbG9zZTpKfSl7bGV0IGVlPVV0LmRhcmttb2RlO0NuPXYucGx1c3x8aCxfcj12LndlZXh8fCh0eXBlb2YgeT09Im9iamVjdCI/eTpudWxsKSwkcj12LkJyb2FkY2FzdENoYW5uZWx8fCh0eXBlb2YgRT09Im9iamVjdCI/RTpudWxsKTtsZXQgY2U9e2F1dG9CYWNrQnV0dG9uOiEwLHRpdGxlU2l6ZToiMTdweCJ9LGhlPWBwYWdlJHtEYXRlLm5vdygpfWA7VT1DdC5leHRlbmQoe30sVSksVS50aXRsZU5WaWV3IT09ITEmJlUudGl0bGVOVmlldyE9PSJub25lIiYmKFUudGl0bGVOVmlldz1DdC5leHRlbmQoY2UsVS50aXRsZU5WaWV3KSk7bGV0IFRlPXt0b3A6MCxib3R0b206MCx1c2luZ0NvbXBvbmVudHM6e30scG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSIsYW5pbWF0aW9uVHlwZToicG9wLWluIixhbmltYXRpb25EdXJhdGlvbjoyMDAsdW5pTlZpZXc6e3BhdGg6YC8ke3h9LmpzYCxkZWZhdWx0Rm9udFNpemU6MTYsdmlld3BvcnQ6Q24uc2NyZWVuLnJlc29sdXRpb25XaWR0aH19O1U9Q3QuZXh0ZW5kKFRlLFUpO2xldCBmZT1Dbi53ZWJ2aWV3LmNyZWF0ZSgiIixoZSxVLHtleHRyYXM6e2Zyb206eWkoKSxydW50aW1lOlFyKCksZGF0YTpDdC5leHRlbmQoe30sJCx7ZGFya21vZGU6ZWV9KSx1c2VHbG9iYWxFdmVudDohJHJ9fSk7cmV0dXJuIGZlLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIixKKSxubihoZSx3ZT0+e0N0LmlzRnVuY3Rpb24oWikmJlood2UuZGF0YSksd2Uua2VlcHx8ZmUuY2xvc2UoImF1dG8iKX0pLGZlLnNob3coVS5hbmltYXRpb25UeXBlLFUuYW5pbWF0aW9uRHVyYXRpb24pLG5ldyBObihmZSl9bGV0IGFyPXtmb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxWbj1YcigidWwiKTtmdW5jdGlvbiBQbigpe2xldCB2PVtdO3JldHVybiBQLnByb3ZpZGUoVm4se2FkZEhhbmRsZXIoeCl7di5wdXNoKHgpfSxyZW1vdmVIYW5kbGVyKHgpe3Yuc3BsaWNlKHYuaW5kZXhPZih4KSwxKX19KSx2fWxldCBfbj1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiTGFiZWwiLHByb3BzOmFyLHN0eWxlczpbXSxzZXR1cCh2LHtzbG90czp4fSl7bGV0ICQ9bXIoKSxVPVBuKCksWj1KPT57di5mb3I/Ui5lbWl0KGB1bmktbGFiZWwtY2xpY2stJHskfS0ke3YuZm9yfWAsSiwhMCk6VS5sZW5ndGgmJlVbMF0oSiwhMCl9O3JldHVybigpPT5QLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7b25DbGljazpafSxbeC5kZWZhdWx0JiZ4LmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIGJyKHYseCl7ZWkodi5pZCx4KSxQLndhdGNoKCgpPT52LmlkLCgkLFUpPT57Z28oVSx4LCEwKSxlaSgkLHgsITApfSksUC5vblVubW91bnRlZCgoKT0+e2dvKHYuaWQseCl9KX1mdW5jdGlvbiBlaSh2LHgsJCl7bGV0IFU9bXIoKTskJiYhdnx8IUN0LmlzUGxhaW5PYmplY3QoeCl8fE9iamVjdC5rZXlzKHgpLmZvckVhY2goWj0+eyQ/Wi5pbmRleE9mKCJAIikhPT0wJiZaLmluZGV4T2YoInVuaS0iKSE9PTAmJlIub24oYHVuaS0ke1p9LSR7VX0tJHt2fWAseFtaXSk6Wi5pbmRleE9mKCJ1bmktIik9PT0wP1Iub24oWix4W1pdKTp2JiZSLm9uKGB1bmktJHtafS0ke1V9LSR7dn1gLHhbWl0pfSl9ZnVuY3Rpb24gZ28odix4LCQpe2xldCBVPW1yKCk7JCYmIXZ8fCFDdC5pc1BsYWluT2JqZWN0KHgpfHxPYmplY3Qua2V5cyh4KS5mb3JFYWNoKFo9PnskP1ouaW5kZXhPZigiQCIpIT09MCYmWi5pbmRleE9mKCJ1bmktIikhPT0wJiZSLm9mZihgdW5pLSR7Wn0tJHtVfS0ke3Z9YCx4W1pdKTpaLmluZGV4T2YoInVuaS0iKT09PTA/Ui5vZmYoWix4W1pdKTp2JiZSLm9mZihgdW5pLSR7Wn0tJHtVfS0ke3Z9YCx4W1pdKX0pfWZ1bmN0aW9uIGZhKHYpe3JldHVybiBPYmplY3Qua2V5cyh2KS5tYXAoeD0+W3gsdlt4XV0pfWxldCBBbz1bImNsYXNzIiwic3R5bGUiXSxKbz0vXm9uW0EtWl0rLyxLbz0odj17fSk9PntsZXR7ZXhjbHVkZUxpc3RlbmVyczp4PSExLGV4Y2x1ZGVLZXlzOiQ9W119PXYsVT1QLmdldEN1cnJlbnRJbnN0YW5jZSgpLFo9UC5zaGFsbG93UmVmKHt9KSxKPVAuc2hhbGxvd1JlZih7fSksZWU9UC5zaGFsbG93UmVmKHt9KSxjZT0kLmNvbmNhdChBbyk7cmV0dXJuIFUuYXR0cnM9UC5yZWFjdGl2ZShVLmF0dHJzKSxQLndhdGNoRWZmZWN0KCgpPT57bGV0IGhlPWZhKFUuYXR0cnMpLnJlZHVjZSgoVGUsW2ZlLHdlXSk9PihjZS5pbmNsdWRlcyhmZSk/VGUuZXhjbHVkZVtmZV09d2U6Sm8udGVzdChmZSk/KHh8fChUZS5hdHRyc1tmZV09d2UpLFRlLmxpc3RlbmVyc1tmZV09d2UpOlRlLmF0dHJzW2ZlXT13ZSxUZSkse2V4Y2x1ZGU6e30sYXR0cnM6e30sbGlzdGVuZXJzOnt9fSk7Wi52YWx1ZT1oZS5hdHRycyxKLnZhbHVlPWhlLmxpc3RlbmVycyxlZS52YWx1ZT1oZS5leGNsdWRlfSkseyRhdHRyczpaLCRsaXN0ZW5lcnM6SiwkZXhjbHVkZUF0dHJzOmVlfX0sUmk9e2lkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxob3ZlckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJidXR0b24taG92ZXIifSxob3ZlclN0YXJ0VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyMH0saG92ZXJTdGF5VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo3MH0saG92ZXJTdG9wUHJvcGFnYXRpb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGZvcm1UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxvcGVuVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbG9hZGluZzp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHBsYWluOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LFJyPVhyKCJ1ZiIpLHppPVt7dWI6eyIiOntmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscG9zaXRpb246InJlbGF0aXZlIixwYWRkaW5nTGVmdDoiNSIscGFkZGluZ1JpZ2h0OiI1IixvdmVyZmxvdzoiaGlkZGVuIixjb2xvcjoiIzAwMDAwMCIsYmFja2dyb3VuZENvbG9yOiIjZjhmOGY4Iixib3JkZXJSYWRpdXM6IjUiLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyV2lkdGg6IjEiLGJvcmRlckNvbG9yOiIjZGJkYmRiIn19LCJ1Yi10Ijp7IiI6e2NvbG9yOiIjMDAwMDAwIixmb250U2l6ZToiMTgiLHRleHREZWNvcmF0aW9uOiJub25lIixsaW5lSGVpZ2h0OiI0NiJ9fSwidWItZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNmOGY4ZjgifX0sInViLXAiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjMDA3YWZmIixib3JkZXJDb2xvcjoiIzAwNjJjYyJ9fSwidWItdyI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNlNjQzNDAiLGJvcmRlckNvbG9yOiIjYjgzNjMzIn19LCJ1Yi1kLXQiOnsiIjp7Y29sb3I6IiMwMDAwMDAifX0sInViLXAtdCI6eyIiOntjb2xvcjoiI2ZmZmZmZiJ9fSwidWItdy10Ijp7IiI6e2NvbG9yOiIjZmZmZmZmIn19LCJ1Yi1kLWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZjdmN2Y3In19LCJ1Yi1wLWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjNjNhY2ZjIixib3JkZXJDb2xvcjoiIzRmOGFjYSJ9fSwidWItdy1kIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2VjOGI4OSIsYm9yZGVyQ29sb3I6IiNiZDZmNmUifX0sInViLWQtdC1kIjp7IiI6e2NvbG9yOiIjY2NjY2NjIn19LCJ1Yi1wLXQtZCI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi13LXQtZCI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjMzUzNTM1IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXAtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiMwMDdhZmYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2U2NDM0MCIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLXQtcGxhaW4iOnsiIjp7Y29sb3I6IiMzNTM1MzUifX0sInViLXAtdC1wbGFpbiI6eyIiOntjb2xvcjoiIzAwN2FmZiJ9fSwidWItdy10LXBsYWluIjp7IiI6e2NvbG9yOiIjZTY0MzQwIn19LCJ1Yi1kLWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiNjNmM2YzYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjYzZjNmM2IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXctZC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2M2YzZjNiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLXQtZC1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjIpIn19LCJ1Yi1wLXQtZC1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjIpIn19LCJ1Yi13LXQtZC1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjIpIn19LCJ1Yi1taW5pIjp7IiI6e2xpbmVIZWlnaHQ6IjMwIixmb250U2l6ZToiMTMiLHBhZGRpbmdUb3A6MCxwYWRkaW5nUmlnaHQ6IjE3LjUiLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDoiMTcuNSJ9fSwidWItbG9hZGluZyI6eyIiOnt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLG1hcmdpblJpZ2h0OiIxMCJ9fSwidWItZC1sb2FkaW5nIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1sb2FkaW5nIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1sb2FkaW5nIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItZC1sb2FkaW5nLXBsYWluIjp7IiI6e2NvbG9yOiIjMzUzNTM1In19LCJ1Yi1wLWxvYWRpbmctcGxhaW4iOnsiIjp7Y29sb3I6IiMwMDdhZmYiLGJhY2tncm91bmRDb2xvcjoiIzAwNjJjYyJ9fSwidWItdy1sb2FkaW5nLXBsYWluIjp7IiI6e2NvbG9yOiIjZTY0MzQwIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtaG92ZXIiOnsiIjp7b3BhY2l0eTouOCxiYWNrZ3JvdW5kQ29sb3I6IiNkZWRlZGUifX0sInViLXAtaG92ZXIiOnsiIjp7b3BhY2l0eTouOCxiYWNrZ3JvdW5kQ29sb3I6IiMwMDYyY2MifX0sInViLXctaG92ZXIiOnsiIjp7b3BhY2l0eTouOCxiYWNrZ3JvdW5kQ29sb3I6IiNjZTNjMzkifX0sInViLWQtdC1ob3ZlciI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjYpIn19LCJ1Yi1wLXQtaG92ZXIiOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9fSwidWItdy10LWhvdmVyIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLWQtaG92ZXItcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoNTMsNTMsNTMsMC42KSIsYm9yZGVyQ29sb3I6InJnYmEoNTMsNTMsNTMsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLWhvdmVyLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDI2LDE3MywyNSwwLjYpIixib3JkZXJDb2xvcjoicmdiYSgwLDEyMiwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LWhvdmVyLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDIzMCw2Nyw2NCwwLjYpIixib3JkZXJDb2xvcjoicmdiYSgyMzAsNjcsNjQsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19fV0sV2k9e2RlZmF1bHQ6ImQiLHByaW1hcnk6InAiLHdhcm46IncifSxybz1QLmRlZmluZUNvbXBvbmVudCh7aW5oZXJpdEF0dHJzOiExLG5hbWU6IkJ1dHRvbiIscHJvcHM6Q3QuZXh0ZW5kKFJpLHt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkZWZhdWx0In0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGVmYXVsdCJ9fSksc3R5bGVzOnppLHNldHVwKHYse3Nsb3RzOngsYXR0cnM6JH0pe2xldHskYXR0cnM6VSwkZXhjbHVkZUF0dHJzOlosJGxpc3RlbmVyczpKfT1Lbyh7ZXhjbHVkZUxpc3RlbmVyczohMH0pLGVlPXYudHlwZSxjZT1QLnJlZihudWxsKSxoZT1QLmluamVjdChSciwhMSksVGU9KHl0LEhlKT0+e2xldCBEdD1KLnZhbHVlLm9uQ2xpY2t8fCgoKT0+e30pO2lmKHYuZGlzYWJsZWQpcmV0dXJuO0R0KHl0KTtsZXQgdm49di5mb3JtVHlwZTtpZih2bil7aWYoIWhlKXJldHVybjt2bj09PSJzdWJtaXQiP2hlLnN1Ym1pdCh5dCk6dm49PT0icmVzZXQiJiZoZS5yZXNldCh5dCl9fSxmZT15dD0+e2xldCBIZT0idWItIitXaVtlZV0reXQ7cmV0dXJuIHYuZGlzYWJsZWQmJihIZSs9Ii1kIiksdi5wbGFpbiYmKEhlKz0iLXBsYWluIiksdi5zaXplPT09Im1pbmkiJiZ5dD09PSItdCImJihIZSs9IiB1Yi1taW5pIiksSGV9LHdlPXl0PT57aWYodi5kaXNhYmxlZClyZXR1cm4iIjtsZXQgSGU9InViLSIrV2lbZWVdK3l0KyItaG92ZXIiO3JldHVybiB2LnBsYWluJiYoSGUrPSItcGxhaW4iKSxIZX0sbHQ9UC5pbmplY3QoVm4sITEpO2x0JiYobHQuYWRkSGFuZGxlcihUZSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntsdC5yZW1vdmVIYW5kbGVyKFRlKX0pKSxicih2LHsibGFiZWwtY2xpY2siOlRlfSk7bGV0IHB0PVAuY29tcHV0ZWQoKCk9PntsZXQgeXQ9e307Zm9yKGxldCBIZSBpbiBKLnZhbHVlKXtsZXQgRHQ9Si52YWx1ZVtIZV07SGUhPT0ib25DbGljayImJih5dFtIZV09RHQpfXJldHVybiB5dH0pLGp0PSgpPT57aWYoIXguZGVmYXVsdClyZXR1cm5bXTtsZXQgeXQ9eC5kZWZhdWx0KCk7cmV0dXJuIHl0Lmxlbmd0aD09PTEmJnl0WzBdLnR5cGU9PT1QLlRleHQ/W1huKHl0WzBdLmNoaWxkcmVuLHtjbGFzczoidWItdCAiK2ZlKCItdCIpfSldOnl0fTtyZXR1cm4oKT0+e2xldCB5dD1DdC5leHRlbmQoe30sd24odikse2hvdmVyQ2xhc3M6d2UoIiIpfSxVLnZhbHVlLFoudmFsdWUscHQudmFsdWUpO3JldHVybiBQLmNyZWF0ZVZOb2RlKCJ2aWV3IixQLm1lcmdlUHJvcHMoe3JlZjpjZSxjbGFzczpbInViIixmZSgiIildLG9uQ2xpY2s6VGV9LHl0KSxbdi5sb2FkaW5nP1AuY3JlYXRlVk5vZGUoImxvYWRpbmctaW5kaWNhdG9yIixQLm1lcmdlUHJvcHMoe2NsYXNzOlsidWItbG9hZGluZyIsYHViLSR7V2lbZWVdfS1sb2FkaW5nYF19LHthcnJvdzoiZmFsc2UiLGFuaW1hdGluZzoidHJ1ZSJ9KSxudWxsKTpudWxsLC4uLmp0KCldKX19fSksaW89e3NjYWxlQXJlYTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fTtmdW5jdGlvbiBsaSh2KXtsZXQgeD1bXTtyZXR1cm4gQ3QuaXNBcnJheSh2KSYmdi5mb3JFYWNoKCQ9PntQLmlzVk5vZGUoJCk/JC50eXBlPT09UC5GcmFnbWVudD94LnB1c2goLi4ubGkoJC5jaGlsZHJlbikpOngucHVzaCgkKTpDdC5pc0FycmF5KCQpJiZ4LnB1c2goLi4ubGkoJCkpfSkseH1mdW5jdGlvbiBwbyh2KXtsZXQgeD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihVKXtyZXR1cm4geFtVXXx8KHhbVV09dihVKSl9fWxldCBPbz1wbyhmdW5jdGlvbih2KXtsZXQgeD17fSwkPS87KD8hW14oXSpcKSkvZyxVPS86KC4rKS87cmV0dXJuIHYuc3BsaXQoJCkuZm9yRWFjaChmdW5jdGlvbihaKXtpZihaKXtsZXQgSj1aLnNwbGl0KFUpO0oubGVuZ3RoPjEmJih4W0pbMF0udHJpbSgpXT1KWzFdLnRyaW0oKSl9fSkseH0pLHhuPXY9Pm5ldyBQcm9taXNlKCh4LCQpPT57aWYoIXYpcmV0dXJuIHgoe3dpZHRoOjAsaGVpZ2h0OjAsdG9wOjAsbGVmdDowfSk7eS5yZXF1aXJlTW9kdWxlKCJkb20iKS5nZXRDb21wb25lbnRSZWN0KHYsKHtzaXplOlp9KT0+e3goWil9KX0pLFRyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJNb3ZhYmxlQXJlYSIscHJvcHM6aW8sc3R5bGVzOlt7InVuaS1tb3ZhYmxlLWFyZWEiOnsiIjp7b3ZlcmZsb3c6ImhpZGRlbiIsd2lkdGg6IjEwcHgiLGhlaWdodDoiMTBweCJ9fX1dLHNldHVwKHYse3Nsb3RzOnh9KXtsZXQgJD1QLnJlZigwKSxVPVAucmVmKDApLFo9UC5yZWYoMCksSj1QLnJlZigwKSxlZT1QLnJlZighMSksY2U9UC5yZWYobnVsbCksaGU9W10sVGU9bnVsbCxmZT1IZT0+e1RlPUhlfSx3ZT0oKT0+eG4oY2UudmFsdWUpLnRoZW4oKHt3aWR0aDpIZSxoZWlnaHQ6RHQsdG9wOnZuLGxlZnQ6cXR9KT0+eyQudmFsdWU9SGUsVS52YWx1ZT1EdCxaLnZhbHVlPXZuLEoudmFsdWU9cXR9KSxsdD0oKT0+e3dlKCkudGhlbigoKT0+e2hlLmZvckVhY2goZnVuY3Rpb24oSGUpe0hlLnNldFBhcmVudCgpfSl9KX07UC5vbk1vdW50ZWQoKCk9PntmKCgpPT57ZWUudmFsdWU9ITAsbHQoKX0sMjAwKX0pO2xldCBwdD17b25QYW5zdGFydChIZSl7VGUmJlRlLnRvdWNoc3RhcnQoSGUpfSxvblBhbm1vdmUoSGUpe0hlLnN0b3BQcm9wYWdhdGlvbigpLFRlJiZUZS50b3VjaG1vdmUoSGUpfSxvblBhbmVuZChIZSl7VGUmJlRlLnRvdWNoZW5kKEhlKSxUZT1udWxsfX0sanQ9SGU9PntoZS5wdXNoKEhlKX0seXQ9SGU9PntsZXQgRHQ9aGUuaW5kZXhPZihIZSk7RHQ+PTAmJmhlLnNwbGljZShEdCwxKX07cmV0dXJuIFAucHJvdmlkZSgiX2lzTW91bnRlZCIsZWUpLFAucHJvdmlkZSgicGFyZW50U2l6ZSIse3dpZHRoOiQsaGVpZ2h0OlUsdG9wOlosbGVmdDpKfSksUC5wcm92aWRlKCJhZGRNb3ZhYmxlVmlld0NvbnRleHQiLGp0KSxQLnByb3ZpZGUoInJlbW92ZU1vdmFibGVWaWV3Q29udGV4dCIseXQpLFAucHJvdmlkZSgic2V0VG91Y2hNb3ZhYmxlVmlld0NvbnRleHQiLGZlKSwoKT0+e2xldCBIZT14LmRlZmF1bHQmJnguZGVmYXVsdCgpLER0PWxpKEhlKTtyZXR1cm4gUC5jcmVhdGVWTm9kZSgidmlldyIsUC5tZXJnZVByb3BzKHtyZWY6Y2UsY2xhc3M6InVuaS1tb3ZhYmxlLWFyZWEifSxwdCksW0R0XSl9fX0pO2Z1bmN0aW9uIGNpKHYpe2xldCB4PXt9O2Z1bmN0aW9uICQoZmUsd2Upe3hbZmVdJiZ4W2ZlXSh3ZSl9ZnVuY3Rpb24gVShmZSx3ZSl7eFtmZV09ZnVuY3Rpb24obHQpe0N0LmlzRnVuY3Rpb24od2UpJiYobHQudG91Y2hlcz1sdC5jaGFuZ2VkVG91Y2hlcyx3ZShsdCk9PT0hMSYmbHQuc3RvcFByb3BhZ2F0aW9uKCkpfX1sZXQgWj0wLEo9MCxlZT0wLGNlPTAsaGU9ZnVuY3Rpb24oZmUsd2UsbHQscHQpe2lmKHYoe3RhcmdldDpmZS50YXJnZXQsY3VycmVudFRhcmdldDpmZS5jdXJyZW50VGFyZ2V0LHN0b3BQcm9wYWdhdGlvbjpmZS5zdG9wUHJvcGFnYXRpb24uYmluZChmZSksdG91Y2hlczpmZS50b3VjaGVzLGNoYW5nZWRUb3VjaGVzOmZlLmNoYW5nZWRUb3VjaGVzLGRldGFpbDp7c3RhdGU6d2UseDpsdCx5OnB0LGR4Omx0LVosZHk6cHQtSixkZHg6bHQtZWUsZGR5OnB0LWNlLHRpbWVTdGFtcDpmZS50aW1lU3RhbXB8fERhdGUubm93KCl9fSk9PT0hMSlyZXR1cm4hMX0sVGU9bnVsbDtyZXR1cm4gVSgidG91Y2hzdGFydCIsZnVuY3Rpb24oZmUpe2lmKCFUZSlyZXR1cm4gVGU9ZmUsWj1lZT1mZS50b3VjaGVzWzBdLnBhZ2VYLEo9Y2U9ZmUudG91Y2hlc1swXS5wYWdlWSxoZShmZSwic3RhcnQiLFosSil9KSxVKCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKGZlKXtpZihUZSl7bGV0IHdlPWhlKGZlLCJtb3ZlIixmZS50b3VjaGVzWzBdLnBhZ2VYLGZlLnRvdWNoZXNbMF0ucGFnZVkpO3JldHVybiBlZT1mZS50b3VjaGVzWzBdLnBhZ2VYLGNlPWZlLnRvdWNoZXNbMF0ucGFnZVksd2V9fSksVSgidG91Y2hlbmQiLGZ1bmN0aW9uKGZlKXtpZihUZSlyZXR1cm4gVGU9bnVsbCxoZShmZSwiZW5kIixmZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxmZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSl9KSx7dG91Y2hzdGFydDpmdW5jdGlvbihmZSl7JCgidG91Y2hzdGFydCIsZmUpfSx0b3VjaG1vdmU6ZnVuY3Rpb24oZmUpeyQoInRvdWNobW92ZSIsZmUpfSx0b3VjaGVuZDpmdW5jdGlvbihmZSl7JCgidG91Y2hlbmQiLGZlKX19fWZ1bmN0aW9uIGZyKHYseCl7cmV0dXJuKCQsVSk9Pnt2LnZhbHVlJiZ4KCQsdm8oJCx2LnZhbHVlLFV8fHt9KSl9fWZ1bmN0aW9uIHZvKHYseCwkPXt9KXtyZXR1cm4geD1Ubyh4KSx7dHlwZTp2LHRpbWVTdGFtcDpEYXRlLm5vdygpLHRhcmdldDp4LGN1cnJlbnRUYXJnZXQ6eCxkZXRhaWw6JH19bGV0IFpvPVJuLmNhY2hlU3RyaW5nRnVuY3Rpb24odj0+di5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSt2LnNsaWNlKDEpKTtmdW5jdGlvbiBUbyh2KXtsZXR7b2Zmc2V0TGVmdDp4LG9mZnNldFRvcDokfT12LFU9di5hdHRyLFo9e307cmV0dXJuIE9iamVjdC5rZXlzKFV8fHt9KS5mb3JFYWNoKEo9PntKLmluZGV4T2YoImRhdGEiKT09PTAmJihaW1pvKEoucmVwbGFjZSgiZGF0YSIsIiIpKV09VVtKXSl9KSx7aWQ6VSYmVS5pZHx8IiIsZGF0YXNldDpaLG9mZnNldExlZnQ6eHx8MCxvZmZzZXRUb3A6JHx8MH19ZnVuY3Rpb24gU2kodix4LCQpe3JldHVybiB2PngtJCYmdjx4KyR9ZnVuY3Rpb24gc3Iodix4KXtyZXR1cm4gU2kodiwwLHgpfWZ1bmN0aW9uIHVpKCl7fXVpLnByb3RvdHlwZS54PWZ1bmN0aW9uKHYpe3JldHVybiBNYXRoLnNxcnQodil9O2Z1bmN0aW9uIGxyKHYseCl7dGhpcy5fbT12LHRoaXMuX2Y9MWUzKngsdGhpcy5fc3RhcnRUaW1lPTAsdGhpcy5fdj0wfWxyLnByb3RvdHlwZS5zZXRWPWZ1bmN0aW9uKHYseCl7bGV0ICQ9TWF0aC5wb3coTWF0aC5wb3codiwyKStNYXRoLnBvdyh4LDIpLC41KTt0aGlzLl94X3Y9dix0aGlzLl95X3Y9eCx0aGlzLl94X2E9LXRoaXMuX2YqdGhpcy5feF92LyQsdGhpcy5feV9hPS10aGlzLl9mKnRoaXMuX3lfdi8kLHRoaXMuX3Q9TWF0aC5hYnModi90aGlzLl94X2EpfHxNYXRoLmFicyh4L3RoaXMuX3lfYSksdGhpcy5fbGFzdER0PW51bGwsdGhpcy5fc3RhcnRUaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpfSxsci5wcm90b3R5cGUuc2V0Uz1mdW5jdGlvbih2LHgpe3RoaXMuX3hfcz12LHRoaXMuX3lfcz14fSxsci5wcm90b3R5cGUucz1mdW5jdGlvbih2KXt2PT09dm9pZCAwJiYodj0obmV3IERhdGUoKS5nZXRUaW1lKCktdGhpcy5fc3RhcnRUaW1lKS8xZTMpLHY+dGhpcy5fdCYmKHY9dGhpcy5fdCx0aGlzLl9sYXN0RHQ9dik7bGV0IHg9dGhpcy5feF92KnYrLjUqdGhpcy5feF9hKk1hdGgucG93KHYsMikrdGhpcy5feF9zLCQ9dGhpcy5feV92KnYrLjUqdGhpcy5feV9hKk1hdGgucG93KHYsMikrdGhpcy5feV9zO3JldHVybih0aGlzLl94X2E+MCYmeDx0aGlzLl9lbmRQb3NpdGlvblh8fHRoaXMuX3hfYTwwJiZ4PnRoaXMuX2VuZFBvc2l0aW9uWCkmJih4PXRoaXMuX2VuZFBvc2l0aW9uWCksKHRoaXMuX3lfYT4wJiYkPHRoaXMuX2VuZFBvc2l0aW9uWXx8dGhpcy5feV9hPDAmJiQ+dGhpcy5fZW5kUG9zaXRpb25ZKSYmKCQ9dGhpcy5fZW5kUG9zaXRpb25ZKSx7eCx5OiR9fSxsci5wcm90b3R5cGUuZHM9ZnVuY3Rpb24odil7cmV0dXJuIHY9PT12b2lkIDAmJih2PShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMyksdj50aGlzLl90JiYodj10aGlzLl90KSx7ZHg6dGhpcy5feF92K3RoaXMuX3hfYSp2LGR5OnRoaXMuX3lfdit0aGlzLl95X2Eqdn19LGxyLnByb3RvdHlwZS5kZWx0YT1mdW5jdGlvbigpe3JldHVybnt4Oi0xLjUqTWF0aC5wb3codGhpcy5feF92LDIpL3RoaXMuX3hfYXx8MCx5Oi0xLjUqTWF0aC5wb3codGhpcy5feV92LDIpL3RoaXMuX3lfYXx8MH19LGxyLnByb3RvdHlwZS5kdD1mdW5jdGlvbigpe3JldHVybi10aGlzLl94X3YvdGhpcy5feF9hfSxsci5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe2xldCB2PVNpKHRoaXMucygpLngsdGhpcy5fZW5kUG9zaXRpb25YKXx8U2kodGhpcy5zKCkueSx0aGlzLl9lbmRQb3NpdGlvblkpfHx0aGlzLl9sYXN0RHQ9PT10aGlzLl90O3JldHVybiB0aGlzLl9sYXN0RHQ9bnVsbCx2fSxsci5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKHYseCl7dGhpcy5fZW5kUG9zaXRpb25YPXYsdGhpcy5fZW5kUG9zaXRpb25ZPXh9LGxyLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih2LHgpe3RoaXMuX209dix0aGlzLl9mPTFlMyp4fTtmdW5jdGlvbiBRbih2LHgsJCl7dGhpcy5fbT12LHRoaXMuX2s9eCx0aGlzLl9jPSQsdGhpcy5fc29sdXRpb249bnVsbCx0aGlzLl9lbmRQb3NpdGlvbj0wLHRoaXMuX3N0YXJ0VGltZT0wfVFuLnByb3RvdHlwZS5fc29sdmU9ZnVuY3Rpb24odix4KXtsZXQgJD10aGlzLl9jLFU9dGhpcy5fbSxaPXRoaXMuX2ssSj0kKiQtNCpVKlo7aWYoSj09PTApe2xldCBmZT0tJC8oMipVKSx3ZT12LGx0PXgvKGZlKnYpO3JldHVybnt4OmZ1bmN0aW9uKHB0KXtyZXR1cm4od2UrbHQqcHQpKk1hdGgucG93KE1hdGguRSxmZSpwdCl9LGR4OmZ1bmN0aW9uKHB0KXtsZXQganQ9TWF0aC5wb3coTWF0aC5FLGZlKnB0KTtyZXR1cm4gZmUqKHdlK2x0KnB0KSpqdCtsdCpqdH19fWlmKEo+MCl7bGV0IGZlPSgtJC1NYXRoLnNxcnQoSikpLygyKlUpLHdlPSgtJCtNYXRoLnNxcnQoSikpLygyKlUpLGx0PSh4LWZlKnYpLyh3ZS1mZSkscHQ9di1sdDtyZXR1cm57eDpmdW5jdGlvbihqdCl7bGV0IHl0LEhlO3JldHVybiBqdD09PXRoaXMuX3QmJih5dD10aGlzLl9wb3dFUjFULEhlPXRoaXMuX3Bvd0VSMlQpLHRoaXMuX3Q9anQseXR8fCh5dD10aGlzLl9wb3dFUjFUPU1hdGgucG93KE1hdGguRSxmZSpqdCkpLEhlfHwoSGU9dGhpcy5fcG93RVIyVD1NYXRoLnBvdyhNYXRoLkUsd2UqanQpKSxwdCp5dCtsdCpIZX0sZHg6ZnVuY3Rpb24oanQpe2xldCB5dCxIZTtyZXR1cm4ganQ9PT10aGlzLl90JiYoeXQ9dGhpcy5fcG93RVIxVCxIZT10aGlzLl9wb3dFUjJUKSx0aGlzLl90PWp0LHl0fHwoeXQ9dGhpcy5fcG93RVIxVD1NYXRoLnBvdyhNYXRoLkUsZmUqanQpKSxIZXx8KEhlPXRoaXMuX3Bvd0VSMlQ9TWF0aC5wb3coTWF0aC5FLHdlKmp0KSkscHQqZmUqeXQrbHQqd2UqSGV9fX1sZXQgZWU9TWF0aC5zcXJ0KDQqVSpaLSQqJCkvKDIqVSksY2U9LSQvMipVLGhlPXYsVGU9KHgtY2UqdikvZWU7cmV0dXJue3g6ZnVuY3Rpb24oZmUpe3JldHVybiBNYXRoLnBvdyhNYXRoLkUsY2UqZmUpKihoZSpNYXRoLmNvcyhlZSpmZSkrVGUqTWF0aC5zaW4oZWUqZmUpKX0sZHg6ZnVuY3Rpb24oZmUpe2xldCB3ZT1NYXRoLnBvdyhNYXRoLkUsY2UqZmUpLGx0PU1hdGguY29zKGVlKmZlKSxwdD1NYXRoLnNpbihlZSpmZSk7cmV0dXJuIHdlKihUZSplZSpsdC1oZSplZSpwdCkrY2Uqd2UqKFRlKnB0K2hlKmx0KX19fSxRbi5wcm90b3R5cGUueD1mdW5jdGlvbih2KXtyZXR1cm4gdj09PXZvaWQgMCYmKHY9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9lbmRQb3NpdGlvbit0aGlzLl9zb2x1dGlvbi54KHYpOjB9LFFuLnByb3RvdHlwZS5keD1mdW5jdGlvbih2KXtyZXR1cm4gdj09PXZvaWQgMCYmKHY9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9zb2x1dGlvbi5keCh2KTowfSxRbi5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKHYseCwkKXtpZigkfHwoJD1uZXcgRGF0ZSgpLmdldFRpbWUoKSksdiE9PXRoaXMuX2VuZFBvc2l0aW9ufHwhc3IoeCwuMSkpe3g9eHx8MDtsZXQgVT10aGlzLl9lbmRQb3NpdGlvbjt0aGlzLl9zb2x1dGlvbiYmKHNyKHgsLjEpJiYoeD10aGlzLl9zb2x1dGlvbi5keCgoJC10aGlzLl9zdGFydFRpbWUpLzFlMykpLFU9dGhpcy5fc29sdXRpb24ueCgoJC10aGlzLl9zdGFydFRpbWUpLzFlMyksc3IoeCwuMSkmJih4PTApLHNyKFUsLjEpJiYoVT0wKSxVKz10aGlzLl9lbmRQb3NpdGlvbiksdGhpcy5fc29sdXRpb24mJnNyKFUtdiwuMSkmJnNyKHgsLjEpfHwodGhpcy5fZW5kUG9zaXRpb249dix0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZShVLXRoaXMuX2VuZFBvc2l0aW9uLHgpLHRoaXMuX3N0YXJ0VGltZT0kKX19LFFuLnByb3RvdHlwZS5zbmFwPWZ1bmN0aW9uKHYpe3RoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx0aGlzLl9lbmRQb3NpdGlvbj12LHRoaXMuX3NvbHV0aW9uPXt4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGR4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fX0sUW4ucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24odil7cmV0dXJuIHZ8fCh2PW5ldyBEYXRlKCkuZ2V0VGltZSgpKSxTaSh0aGlzLngoKSx0aGlzLl9lbmRQb3NpdGlvbiwuMSkmJnNyKHRoaXMuZHgoKSwuMSl9LFFuLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih2LHgsJCl7dGhpcy5fbT12LHRoaXMuX2s9eCx0aGlzLl9jPSQsdGhpcy5kb25lKCl8fCh0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZSh0aGlzLngoKS10aGlzLl9lbmRQb3NpdGlvbix0aGlzLmR4KCkpLHRoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSl9LFFuLnByb3RvdHlwZS5zcHJpbmdDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSxRbi5wcm90b3R5cGUuZGFtcGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jfSxRbi5wcm90b3R5cGUuY29uZmlndXJhdGlvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHYoJCxVKXskLnJlY29uZmlndXJlKDEsVSwkLmRhbXBpbmcoKSl9ZnVuY3Rpb24geCgkLFUpeyQucmVjb25maWd1cmUoMSwkLnNwcmluZ0NvbnN0YW50KCksVSl9cmV0dXJuW3tsYWJlbDoiU3ByaW5nIENvbnN0YW50IixyZWFkOnRoaXMuc3ByaW5nQ29uc3RhbnQuYmluZCh0aGlzKSx3cml0ZTp2LmJpbmQodGhpcyx0aGlzKSxtaW46MTAwLG1heDoxZTN9LHtsYWJlbDoiRGFtcGluZyIscmVhZDp0aGlzLmRhbXBpbmcuYmluZCh0aGlzKSx3cml0ZTp4LmJpbmQodGhpcyx0aGlzKSxtaW46MSxtYXg6NTAwfV19O2Z1bmN0aW9uIHhpKHYseCwkKXt0aGlzLl9zcHJpbmdYPW5ldyBRbih2LHgsJCksdGhpcy5fc3ByaW5nWT1uZXcgUW4odix4LCQpLHRoaXMuX3NwcmluZ1NjYWxlPW5ldyBRbih2LHgsJCksdGhpcy5fc3RhcnRUaW1lPTB9eGkucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbih2LHgsJCxVKXtsZXQgWj1uZXcgRGF0ZSgpLmdldFRpbWUoKTt0aGlzLl9zcHJpbmdYLnNldEVuZCh2LFUsWiksdGhpcy5fc3ByaW5nWS5zZXRFbmQoeCxVLFopLHRoaXMuX3NwcmluZ1NjYWxlLnNldEVuZCgkLFUsWiksdGhpcy5fc3RhcnRUaW1lPVp9LHhpLnByb3RvdHlwZS54PWZ1bmN0aW9uKCl7bGV0IHY9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzO3JldHVybnt4OnRoaXMuX3NwcmluZ1gueCh2KSx5OnRoaXMuX3NwcmluZ1kueCh2KSxzY2FsZTp0aGlzLl9zcHJpbmdTY2FsZS54KHYpfX0seGkucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtsZXQgdj1uZXcgRGF0ZSgpLmdldFRpbWUoKTtyZXR1cm4gdGhpcy5fc3ByaW5nWC5kb25lKHYpJiZ0aGlzLl9zcHJpbmdZLmRvbmUodikmJnRoaXMuX3NwcmluZ1NjYWxlLmRvbmUodil9LHhpLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih2LHgsJCl7dGhpcy5fc3ByaW5nWC5yZWNvbmZpZ3VyZSh2LHgsJCksdGhpcy5fc3ByaW5nWS5yZWNvbmZpZ3VyZSh2LHgsJCksdGhpcy5fc3ByaW5nU2NhbGUucmVjb25maWd1cmUodix4LCQpfTtsZXQgb289e2RpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibm9uZSJ9LGluZXJ0aWE6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxvdXRPZkJvdW5kczp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0seTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxkYW1waW5nOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjIwfSxmcmljdGlvbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHNjYWxlOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sc2NhbGVNaW46e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6LjV9LHNjYWxlTWF4Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjEwfSxzY2FsZVZhbHVlOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGFuaW1hdGlvbjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITB9fTtmdW5jdGlvbiB0aSh2LHgpe3JldHVybisoKDFlMyp2LTFlMyp4KS8xZTMpLnRvRml4ZWQoMSl9ZnVuY3Rpb24geHIodix4LCQpe2xldCBVPXtpZDowLGNhbmNlbGxlZDohMX0sWj1mdW5jdGlvbihlZSl7ZWUmJmVlLmlkJiZIcihlZS5pZCksZWUmJihlZS5jYW5jZWxsZWQ9ITApfTtmdW5jdGlvbiBKKGVlLGNlLGhlLFRlKXtpZighZWV8fCFlZS5jYW5jZWxsZWQpe2hlKGNlKTtsZXQgZmU9Y2UuZG9uZSgpO2ZlfHxlZS5jYW5jZWxsZWR8fChlZS5pZD1QbyhKLmJpbmQobnVsbCxlZSxjZSxoZSxUZSkpKSxmZSYmVGUmJlRlKGNlKX19cmV0dXJuIEooVSx2LHgsJCkse2NhbmNlbDpaLmJpbmQobnVsbCxVKSxtb2RlbDp2fX1sZXQgQnI9ITE7ZnVuY3Rpb24gd2kodil7QnJ8fChCcj0hMCxQbyhmdW5jdGlvbigpe3YoKSxCcj0hMX0pKX1mdW5jdGlvbiBQbyh2KXtyZXR1cm4gZih2LDE2KX1mdW5jdGlvbiBIcih2KXtzKHYpfWxldCBNcj15LnJlcXVpcmVNb2R1bGUoImFuaW1hdGlvbiIpLEVyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJNb3ZhYmxlVmlldyIscHJvcHM6b28sZW1pdHM6WyJjaGFuZ2UiLCJzY2FsZSJdLHN0eWxlczpbeyJ1bmktbW92YWJsZS12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiIwcHgiLGxlZnQ6IjBweCIsd2lkdGg6IjEwcHgiLGhlaWdodDoiMTBweCJ9fX1dLHNldHVwKHYse2VtaXQ6eCxzbG90czokfSl7bGV0IFU9UC5yZWYobnVsbCksWj1mcihVLHgpLEo9UC5pbmplY3QoInNldFRvdWNoTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLGVlPWduKHYsWixVLEopO3JldHVybigpPT57bGV0IGNlPXtwcmV2ZW50R2VzdHVyZTohMH07cmV0dXJuIFAuY3JlYXRlVk5vZGUoInZpZXciLFAubWVyZ2VQcm9wcyh7cmVmOlUsb25Ub3VjaHN0YXJ0OmVlLGNsYXNzOiJ1bmktbW92YWJsZS12aWV3IixzdHlsZToidHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOyJ9LGNlKSxbJC5kZWZhdWx0JiYkLmRlZmF1bHQoKV0pfX19KTtmdW5jdGlvbiBnbih2LHgsJCxVKXtsZXQgWj1QLmluamVjdCgiX2lzTW91bnRlZCIsUC5yZWYoITEpKSxKPVAuaW5qZWN0KCJwYXJlbnRTaXplIix7d2lkdGg6UC5yZWYoMCksaGVpZ2h0OlAucmVmKDApLHRvcDpQLnJlZigwKSxsZWZ0OlAucmVmKDApfSksZWU9UC5pbmplY3QoImFkZE1vdmFibGVWaWV3Q29udGV4dCIsKCk9Pnt9KSxjZT1QLmluamVjdCgicmVtb3ZlTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLGhlPXt0b3VjaHN0YXJ0OigpPT57fSx0b3VjaG1vdmU6KCk9Pnt9LHRvdWNoZW5kOigpPT57fX07ZnVuY3Rpb24gVGUoTmUpe3JldHVybiBOdW1iZXIoTmUpfHwwfWZ1bmN0aW9uIGZlKE5lKXtyZXR1cm4gTmU9TnVtYmVyKE5lKSxpc05hTihOZSk/MTpOZX1sZXQgd2U9UC5yZWYoVGUodi54KSksbHQ9UC5yZWYoVGUodi55KSkscHQ9UC5yZWYoZmUoTnVtYmVyKHYuc2NhbGVWYWx1ZSkpKSxqdD1QLnJlZigwKSx5dD1QLnJlZigwKSxIZT1QLnJlZigwKSxEdD1QLnJlZigwKSx2bj1QLnJlZigwKSxxdD1QLnJlZigwKSxkdD1udWxsLHJuPW51bGwsTG49e3g6MCx5OjB9LEp0PXt4OjAseTowfSx6dD0xLCR0PTAsWnQ9MCxlYT0hMSxwaSxpaSxRaT1udWxsLGphPW51bGwsem49e3RvcDowLGxlZnQ6MCx3aWR0aDowLGhlaWdodDowfSxXbj1uZXcgdWksTnI9bmV3IHVpLEduPXtoaXN0b3J5WDpbMCwwXSxoaXN0b3J5WTpbMCwwXSxoaXN0b3J5VDpbMCwwXX0sQ3I9UC5jb21wdXRlZCgoKT0+e2xldCBOZT1OdW1iZXIodi5kYW1waW5nKTtyZXR1cm4gaXNOYU4oTmUpPzIwOk5lfSkscXI9UC5jb21wdXRlZCgoKT0+e2xldCBOZT1OdW1iZXIodi5mcmljdGlvbik7cmV0dXJuIGlzTmFOKE5lKXx8TmU8PTA/MjpOZX0pLHRhPVAuY29tcHV0ZWQoKCk9PntsZXQgTmU9TnVtYmVyKHYuc2NhbGVNaW4pO3JldHVybiBpc05hTihOZSk/LjU6TmV9KSxjcz1QLmNvbXB1dGVkKCgpPT57bGV0IE5lPU51bWJlcih2LnNjYWxlTWF4KTtyZXR1cm4gaXNOYU4oTmUpPzEwOk5lfSksbG49UC5jb21wdXRlZCgoKT0+di5kaXJlY3Rpb249PT0iYWxsInx8di5kaXJlY3Rpb249PT0iaG9yaXpvbnRhbCIpLHluPVAuY29tcHV0ZWQoKCk9PnYuZGlyZWN0aW9uPT09ImFsbCJ8fHYuZGlyZWN0aW9uPT09InZlcnRpY2FsIiksWW49bmV3IHhpKDEsOSpNYXRoLnBvdyhDci52YWx1ZSwyKS80MCxDci52YWx1ZSksWm49bmV3IGxyKDEscXIudmFsdWUpO1Aud2F0Y2goKCk9PnYueCxOZT0+e3dlLnZhbHVlPVRlKE5lKX0pLFAud2F0Y2goKCk9PnYueSxOZT0+e2x0LnZhbHVlPVRlKE5lKX0pLFAud2F0Y2goKCk9PnYuc2NhbGVWYWx1ZSxOZT0+e3B0LnZhbHVlPWZlKE51bWJlcihOZSkpfSksUC53YXRjaCh3ZSx1cyksUC53YXRjaChsdCx6YSksUC53YXRjaChwdCxuYSksUC53YXRjaCh0YSxJYSksUC53YXRjaChjcyxJYSk7ZnVuY3Rpb24gVGkoKXtybiYmcm4uY2FuY2VsKCksZHQmJmR0LmNhbmNlbCgpfWZ1bmN0aW9uIHVzKE5lKXtpZihsbi52YWx1ZSl7aWYoTmUrSnQueD09PSR0KXJldHVybiAkdDtkdCYmZHQuY2FuY2VsKCkseW8oTmUrSnQueCxsdC52YWx1ZStKdC55LHp0KX1yZXR1cm4gTmV9ZnVuY3Rpb24gemEoTmUpe2lmKHluLnZhbHVlKXtpZihOZStKdC55PT09WnQpcmV0dXJuIFp0O2R0JiZkdC5jYW5jZWwoKSx5byh3ZS52YWx1ZStKdC54LE5lK0p0LnksenQpfXJldHVybiBOZX1mdW5jdGlvbiBJYSgpe2lmKCF2LnNjYWxlKXJldHVybiExO1VpKHp0LCEwKX1mdW5jdGlvbiBuYShOZSl7cmV0dXJuIHYuc2NhbGU/KE5lPUVvKE5lKSxVaShOZSwhMCksTmUpOiExfWZ1bmN0aW9uIHVvKCl7di5kaXNhYmxlZHx8KFRpKCksR24uaGlzdG9yeVg9WzAsMF0sR24uaGlzdG9yeVk9WzAsMF0sR24uaGlzdG9yeVQ9WzAsMF0sbG4udmFsdWUmJihwaT0kdCkseW4udmFsdWUmJihpaT1adCksUWk9bnVsbCxqYT1udWxsLGVhPSEwKX1mdW5jdGlvbiBXYShOZSl7aWYoIXYuZGlzYWJsZWQmJmVhKXtsZXQga3Q9JHQsSXQ9WnQ7aWYoamE9PT1udWxsJiYoamE9TWF0aC5hYnMoTmUuZGV0YWlsLmR4L05lLmRldGFpbC5keSk+MT8iaHRvdWNobW92ZSI6InZ0b3VjaG1vdmUiKSxsbi52YWx1ZSYmKGt0PU5lLmRldGFpbC5keCtwaSxHbi5oaXN0b3J5WC5zaGlmdCgpLEduLmhpc3RvcnlYLnB1c2goa3QpLCF5bi52YWx1ZSYmUWk9PT1udWxsJiYoUWk9TWF0aC5hYnMoTmUuZGV0YWlsLmR4L05lLmRldGFpbC5keSk8MSkpLHluLnZhbHVlJiYoSXQ9TmUuZGV0YWlsLmR5K2lpLEduLmhpc3RvcnlZLnNoaWZ0KCksR24uaGlzdG9yeVkucHVzaChJdCksIWxuLnZhbHVlJiZRaT09PW51bGwmJihRaT1NYXRoLmFicyhOZS5kZXRhaWwuZHkvTmUuZGV0YWlsLmR4KTwxKSksR24uaGlzdG9yeVQuc2hpZnQoKSxHbi5oaXN0b3J5VC5wdXNoKE5lLmRldGFpbC50aW1lU3RhbXApLCFRaSl7bGV0IE9uPSJ0b3VjaCI7a3Q8SGUudmFsdWU/di5vdXRPZkJvdW5kcz8oT249InRvdWNoLW91dC1vZi1ib3VuZHMiLGt0PUhlLnZhbHVlLVduLngoSGUudmFsdWUta3QpKTprdD1IZS52YWx1ZTprdD52bi52YWx1ZSYmKHYub3V0T2ZCb3VuZHM/KE9uPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixrdD12bi52YWx1ZStXbi54KGt0LXZuLnZhbHVlKSk6a3Q9dm4udmFsdWUpLEl0PER0LnZhbHVlP3Yub3V0T2ZCb3VuZHM/KE9uPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixJdD1EdC52YWx1ZS1Oci54KER0LnZhbHVlLUl0KSk6SXQ9RHQudmFsdWU6SXQ+cXQudmFsdWUmJih2Lm91dE9mQm91bmRzPyhPbj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsSXQ9cXQudmFsdWUrTnIueChJdC1xdC52YWx1ZSkpOkl0PXF0LnZhbHVlKSx3aShmdW5jdGlvbigpe0RvKGt0LEl0LHp0LE9uKX0pfX19ZnVuY3Rpb24gZnMoKXtpZighdi5kaXNhYmxlZCYmZWEmJihlYT0hMSwhUWkmJiFkcygib3V0LW9mLWJvdW5kcyIpJiZ2LmluZXJ0aWEpKXtsZXQgTmU9MWUzKihHbi5oaXN0b3J5WFsxXS1Hbi5oaXN0b3J5WFswXSkvKEduLmhpc3RvcnlUWzFdLUduLmhpc3RvcnlUWzBdKSxrdD0xZTMqKEduLmhpc3RvcnlZWzFdLUduLmhpc3RvcnlZWzBdKS8oR24uaGlzdG9yeVRbMV0tR24uaGlzdG9yeVRbMF0pO1puLnNldFYoTmUsa3QpLFpuLnNldFMoJHQsWnQpO2xldCBJdD1abi5kZWx0YSgpLngsT249Wm4uZGVsdGEoKS55LEFyPUl0KyR0LFBpPU9uK1p0O0FyPEhlLnZhbHVlPyhBcj1IZS52YWx1ZSxQaT1adCsoSGUudmFsdWUtJHQpKk9uL0l0KTpBcj52bi52YWx1ZSYmKEFyPXZuLnZhbHVlLFBpPVp0Kyh2bi52YWx1ZS0kdCkqT24vSXQpLFBpPER0LnZhbHVlPyhQaT1EdC52YWx1ZSxBcj0kdCsoRHQudmFsdWUtWnQpKkl0L09uKTpQaT5xdC52YWx1ZSYmKFBpPXF0LnZhbHVlLEFyPSR0KyhxdC52YWx1ZS1adCkqSXQvT24pLFpuLnNldEVuZChBcixQaSkscm49eHIoWm4sZnVuY3Rpb24oKXtsZXQgZW89Wm4ucygpLEZvPWVvLngsTmE9ZW8ueTtEbyhGbyxOYSx6dCwiZnJpY3Rpb24iKX0sZnVuY3Rpb24oKXtybi5jYW5jZWwoKX0pfX1mdW5jdGlvbiBKcihOZSxrdCl7bGV0IEl0PSExO3JldHVybiBOZT52bi52YWx1ZT8oTmU9dm4udmFsdWUsSXQ9ITApOk5lPEhlLnZhbHVlJiYoTmU9SGUudmFsdWUsSXQ9ITApLGt0PnF0LnZhbHVlPyhrdD1xdC52YWx1ZSxJdD0hMCk6a3Q8RHQudmFsdWUmJihrdD1EdC52YWx1ZSxJdD0hMCkse3g6TmUseTprdCxvdXRPZkJvdW5kczpJdH19ZnVuY3Rpb24gR2EoKXtMbi54PXpuLmxlZnQtSi5sZWZ0LnZhbHVlLExuLnk9em4udG9wLUoudG9wLnZhbHVlfWZ1bmN0aW9uIFlhKE5lKXtOZT1OZXx8enQsTmU9RW8oTmUpLHl0LnZhbHVlPXpuLmhlaWdodC96dCxqdC52YWx1ZT16bi53aWR0aC96dDtsZXQga3Q9eXQudmFsdWUqTmUsSXQ9anQudmFsdWUqTmU7SnQueD0oSXQtanQudmFsdWUpLzIsSnQueT0oa3QteXQudmFsdWUpLzJ9ZnVuY3Rpb24gTG8oKXtsZXQgTmU9MC1Mbi54K0p0Lngsa3Q9Si53aWR0aC52YWx1ZS1qdC52YWx1ZS1Mbi54LUp0Lng7SGUudmFsdWU9TWF0aC5taW4oTmUsa3QpLHZuLnZhbHVlPU1hdGgubWF4KE5lLGt0KTtsZXQgSXQ9MC1Mbi55K0p0LnksT249Si5oZWlnaHQudmFsdWUteXQudmFsdWUtTG4ueS1KdC55O0R0LnZhbHVlPU1hdGgubWluKEl0LE9uKSxxdC52YWx1ZT1NYXRoLm1heChJdCxPbil9ZnVuY3Rpb24gVWkoTmUsa3Qpe2lmKHYuc2NhbGUpe05lPUVvKE5lKSxZYShOZSksTG8oKTtsZXQgSXQ9SnIoJHQsWnQpLE9uPUl0LngsQXI9SXQueTtrdD95byhPbixBcixOZSwiIiwhMCwhMCk6d2koZnVuY3Rpb24oKXtEbyhPbixBcixOZSwiIiwhMCwhMCl9KX19ZnVuY3Rpb24gRW8oTmUpe3JldHVybiBOZT1NYXRoLm1heCguNSx0YS52YWx1ZSxOZSksTmU9TWF0aC5taW4oMTAsY3MudmFsdWUsTmUpLE5lfWZ1bmN0aW9uIHlvKE5lLGt0LEl0LE9uLEFyLFBpKXtUaSgpLGxuLnZhbHVlfHwoTmU9JHQpLHluLnZhbHVlfHwoa3Q9WnQpLHYuc2NhbGV8fChJdD16dCk7bGV0IGVvPUpyKE5lLGt0KTtpZihOZT1lby54LGt0PWVvLnksIXYuYW5pbWF0aW9uKXtEbyhOZSxrdCxJdCxPbixBcixQaSk7cmV0dXJufVluLl9zcHJpbmdYLl9zb2x1dGlvbj1udWxsLFluLl9zcHJpbmdZLl9zb2x1dGlvbj1udWxsLFluLl9zcHJpbmdTY2FsZS5fc29sdXRpb249bnVsbCxZbi5fc3ByaW5nWC5fZW5kUG9zaXRpb249JHQsWW4uX3NwcmluZ1kuX2VuZFBvc2l0aW9uPVp0LFluLl9zcHJpbmdTY2FsZS5fZW5kUG9zaXRpb249enQsWW4uc2V0RW5kKE5lLGt0LEl0LDEpLGR0PXhyKFluLGZ1bmN0aW9uKCl7bGV0IEZvPVluLngoKSxOYT1Gby54LHJhPUZvLnksZ3M9Rm8uc2NhbGU7RG8oTmEscmEsZ3MsT24sQXIsUGkpfSxmdW5jdGlvbigpe2R0LmNhbmNlbCgpfSl9ZnVuY3Rpb24gZHMoTmUpe2xldCBrdD1KcigkdCxadCksSXQ9a3QueCxPbj1rdC55LEFyPWt0Lm91dE9mQm91bmRzO3JldHVybiBBciYmeW8oSXQsT24senQsTmUpLEFyfWZ1bmN0aW9uIERvKE5lLGt0LEl0LE9uPSIiLEFyLFBpKXtOZSE9PW51bGwmJk5lLnRvU3RyaW5nKCkhPT0iTmFOIiYmdHlwZW9mIE5lPT0ibnVtYmVyInx8KE5lPSR0fHwwKSxrdCE9PW51bGwmJmt0LnRvU3RyaW5nKCkhPT0iTmFOIiYmdHlwZW9mIGt0PT0ibnVtYmVyInx8KGt0PVp0fHwwKSxOZT1OdW1iZXIoTmUudG9GaXhlZCgxKSksa3Q9TnVtYmVyKGt0LnRvRml4ZWQoMSkpLEl0PU51bWJlcihJdC50b0ZpeGVkKDEpKSwkdD09PU5lJiZadD09PWt0fHxBcnx8eCgiY2hhbmdlIix7eDp0aShOZSxKdC54KSx5OnRpKGt0LEp0LnkpLHNvdXJjZTpPbn0pLHYuc2NhbGV8fChJdD16dCksSXQ9RW8oSXQpLEl0PStJdC50b0ZpeGVkKDMpLFBpJiZJdCE9PXp0JiZ4KCJzY2FsZSIse3g6TmUseTprdCxzY2FsZTpJdH0pO2xldCBlbz1gdHJhbnNsYXRlKCR7TmV9cHgsICR7a3R9cHgpIHNjYWxlKCR7SXR9KWA7TXIudHJhbnNpdGlvbigkLnZhbHVlLHtzdHlsZXM6e3RyYW5zZm9ybTplb30sZHVyYXRpb246MCxkZWxheTowfSksJHQ9TmUsWnQ9a3QsenQ9SXR9ZnVuY3Rpb24geHMoKXtyZXR1cm4geG4oJC52YWx1ZSkudGhlbihOZT0+e3puPU5lfSl9ZnVuY3Rpb24gaHMoKXtpZighWi52YWx1ZSlyZXR1cm47VGkoKTtsZXQgTmU9di5zY2FsZT9wdC52YWx1ZToxO0dhKCksWWEoTmUpLExvKCksJHQ9d2UudmFsdWUrSnQueCxadD1sdC52YWx1ZStKdC55O2xldCBrdD1KcigkdCxadCksSXQ9a3QueCxPbj1rdC55O0RvKEl0LE9uLE5lLCIiLCEwKX1yZXR1cm4gUC5vbk1vdW50ZWQoKCk9PntoZT1jaShrdD0+e3N3aXRjaChrdC5kZXRhaWwuc3RhdGUpe2Nhc2Uic3RhcnQiOnVvKCk7YnJlYWs7Y2FzZSJtb3ZlIjpXYShrdCk7YnJlYWs7Y2FzZSJlbmQiOmZzKCl9fSksZigoKT0+e3hzKCkudGhlbigoKT0+e2hzKCl9KX0sMTAwKSxabi5yZWNvbmZpZ3VyZSgxLHFyLnZhbHVlKSxZbi5yZWNvbmZpZ3VyZSgxLDkqTWF0aC5wb3coQ3IudmFsdWUsMikvNDAsQ3IudmFsdWUpO2xldCBOZT17c2V0UGFyZW50OmhzfTtlZShOZSksUC5vblVubW91bnRlZCgoKT0+e2NlKE5lKX0pfSksUC5vblVubW91bnRlZCgoKT0+e1RpKCl9KSwoKT0+e1UoaGUpfX1sZXQgZmk9MTYsUHI9e2FjdGl2ZUNvbG9yOlJuLlBSSU1BUllfQ09MT1IsYmFja2dyb3VuZENvbG9yOiIjRUJFQkVCIixhY3RpdmVNb2RlOiJiYWNrd2FyZHMifSxMdD17cGVyY2VudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowLHZhbGlkYXRvcih2KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh2KSl9fSxmb250U2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpmaX0sc2hvd0luZm86e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzdHJva2VXaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2LHZhbGlkYXRvcih2KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh2KSl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpQci5hY3RpdmVDb2xvcn0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6UHIuYWN0aXZlQ29sb3J9LGJhY2tncm91bmRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpQci5iYWNrZ3JvdW5kQ29sb3J9LGFjdGl2ZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGFjdGl2ZU1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6UHIuYWN0aXZlTW9kZX0sZHVyYXRpb246e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MzAsdmFsaWRhdG9yKHYpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHYpKX19LGJvcmRlclJhZGl1czp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfX0sRWU9W3sidW5pLXByb2dyZXNzIjp7IiI6e2ZsZXg6MSxmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciJ9fSwidW5pLXByb2dyZXNzLWJhciI6eyIiOntmbGV4OjF9fSwidW5pLXByb2dyZXNzLWlubmVyLWJhciI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUifX0sInVuaS1wcm9ncmVzcy1pbmZvIjp7IiI6e21hcmdpbkxlZnQ6IjE1cHgifX19XSxuaT1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUHJvZ3Jlc3MiLHByb3BzOkx0LHN0eWxlczpFZSxlbWl0czpbImFjdGl2ZWVuZCJdLHNldHVwKHYse2VtaXQ6eH0pe2xldCAkPVAucmVmKG51bGwpLFU9UC5yZWYobnVsbCksWj1mcigkLHgpLEo9R2kodik7cmV0dXJuIFAud2F0Y2goKCk9PkoucmVhbFBlcmNlbnQsKGVlLGNlKT0+e0oubGFzdFBlcmNlbnQ9Y2V8fDAsS3QoSix2LFopfSksUC5vbk1vdW50ZWQoKCk9PntmKCgpPT57eG4oVS52YWx1ZSkudGhlbigoe3dpZHRoOmVlfSk9PntKLnByb2dyZXNzV2lkdGg9ZWV8fDAsS3QoSix2LFopfSl9LDUwKX0pLCgpPT57bGV0e3Nob3dJbmZvOmVlLGZvbnRTaXplOmNlfT12LHtvdXRlckJhclN0eWxlOmhlLGlubmVyQmFyU3R5bGU6VGUsY3VycmVudFBlcmNlbnQ6ZmV9PUo7cmV0dXJuIFAuY3JlYXRlVk5vZGUoImRpdiIse3JlZjokLGNsYXNzOiJ1bmktcHJvZ3Jlc3MifSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOlUsc3R5bGU6aGUsY2xhc3M6InVuaS1wcm9ncmVzcy1iYXIifSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7c3R5bGU6VGUsY2xhc3M6InVuaS1wcm9ncmVzcy1pbm5lci1iYXIifSxudWxsKV0pLGVlP1huKGZlKyIlIix7Y2xhc3M6InVuaS1wcm9ncmVzcy1pbmZvIixzdHlsZTp7Zm9udFNpemU6Y2V9fSk6bnVsbF0pfX19KTtmdW5jdGlvbiBHaSh2KXtsZXQgeD1QLnJlZigwKSwkPVAucmVmKDApLFU9UC5jb21wdXRlZCgoKT0+KHtiYWNrZ3JvdW5kQ29sb3I6di5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyUmFkaXVzOnYuYm9yZGVyUmFkaXVzLGhlaWdodDp2LnN0cm9rZVdpZHRofSkpLFo9UC5jb21wdXRlZCgoKT0+e2xldCBjZT12LmNvbG9yIT09UHIuYWN0aXZlQ29sb3ImJnYuYWN0aXZlQ29sb3I9PT1Qci5hY3RpdmVDb2xvcj92LmNvbG9yOnYuYWN0aXZlQ29sb3I7cmV0dXJue3dpZHRoOngudmFsdWUqJC52YWx1ZS8xMDAsaGVpZ2h0OnYuc3Ryb2tlV2lkdGgsYmFja2dyb3VuZENvbG9yOmNlLGJvcmRlclJhZGl1czp2LmJvcmRlclJhZGl1c319KSxKPVAuY29tcHV0ZWQoKCk9PntsZXQgY2U9cGFyc2VGbG9hdCh2LnBlcmNlbnQpO3JldHVybiBjZTwwJiYoY2U9MCksY2U+MTAwJiYoY2U9MTAwKSxjZX0pO3JldHVybiBQLnJlYWN0aXZlKHtvdXRlckJhclN0eWxlOlUsaW5uZXJCYXJTdHlsZTpaLHJlYWxQZXJjZW50OkosY3VycmVudFBlcmNlbnQ6eCxzdHJva2VUaW1lcjowLGxhc3RQZXJjZW50OjAscHJvZ3Jlc3NXaWR0aDokfSl9ZnVuY3Rpb24gS3Qodix4LCQpe3Yuc3Ryb2tlVGltZXImJmNsZWFySW50ZXJ2YWwodi5zdHJva2VUaW1lcikseC5hY3RpdmU/KHYuY3VycmVudFBlcmNlbnQ9eC5hY3RpdmVNb2RlPT09UHIuYWN0aXZlTW9kZT8wOnYubGFzdFBlcmNlbnQsdi5zdHJva2VUaW1lcj1zZXRJbnRlcnZhbCgoKT0+e3YuY3VycmVudFBlcmNlbnQrMT52LnJlYWxQZXJjZW50Pyh2LmN1cnJlbnRQZXJjZW50PXYucmVhbFBlcmNlbnQsdi5zdHJva2VUaW1lciYmY2xlYXJJbnRlcnZhbCh2LnN0cm9rZVRpbWVyKSwkKCJhY3RpdmVlbmQiLHt9KSk6di5jdXJyZW50UGVyY2VudCs9MX0scGFyc2VGbG9hdCh4LmR1cmF0aW9uKSkpOnYuY3VycmVudFBlcmNlbnQ9di5yZWFsUGVyY2VudH1sZXQganI9e3ZhbHVlOnt0eXBlOkFycmF5LGRlZmF1bHQoKXtyZXR1cm5bXX0sdmFsaWRhdG9yOmZ1bmN0aW9uKHYpe3JldHVybiBDdC5pc0FycmF5KHYpJiZ2LmZpbHRlcih4PT50eXBlb2YgeD09Im51bWJlciIpLmxlbmd0aD09PXYubGVuZ3RofX0saW5kaWNhdG9yU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGluZGljYXRvckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtYXNrU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1hc2tDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LHpyPUN0LmV4dGVuZCh7fSxqcix7aGVpZ2h0Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9LG1hc2tUb3BTdHlsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbWFza0JvdHRvbVN0eWxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0pLExyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXJWaWV3Iixwcm9wczp6cixlbWl0czpbImNoYW5nZSIsInVwZGF0ZTp2YWx1ZSJdLHNldHVwKHYse3Nsb3RzOngsZW1pdDokfSl7bGV0IFU9UC5yZWYobnVsbCksWj1Ecih2KSxKPWZyKFUsJCksZWU9W10sY2U9VGU9PkFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZWUuZmlsdGVyKGZlPT5mZS50eXBlIT09UC5Db21tZW50KSxUZSksaGU9VGU9PlAuY29tcHV0ZWQoe2dldCgpe2xldCBmZT1jZShUZS52bm9kZSk7cmV0dXJuIFoudmFsdWVbZmVdfHwwfSxzZXQoZmUpe2lmKCFUZS5kYXRhLl9pc01vdW50ZWQpcmV0dXJuO2xldCB3ZT1jZShUZS52bm9kZSk7aWYod2U8MClyZXR1cm47aWYoWi52YWx1ZVt3ZV0hPT1mZSl7Wi52YWx1ZVt3ZV09ZmU7bGV0IHB0PVoudmFsdWUubWFwKGp0PT5qdCk7JCgidXBkYXRlOnZhbHVlIixwdCksSigiY2hhbmdlIix7dmFsdWU6cHR9KX19fSk7cmV0dXJuIFAucHJvdmlkZSgiZ2V0UGlja2VyVmlld0NvbHVtbiIsaGUpLFAucHJvdmlkZSgicGlja2VyVmlld1Byb3BzIix2KSwoKT0+e2xldCBUZT14LmRlZmF1bHQmJnguZGVmYXVsdCgpO2VlPWxpKFRlKTtsZXQgZmU9di5oZWlnaHQ/e2hlaWdodDpgJHtwYXJzZUZsb2F0KHYuaGVpZ2h0KX1weGB9Ont9O3JldHVybiBQLmNyZWF0ZVZOb2RlKCJ2aWV3IixQLm1lcmdlUHJvcHMoe3JlZjpVLGNsYXNzOiJ1bmktcGlja2VyLXZpZXciLHN0eWxlOmZlfSx7cHJldmVudEdlc3R1cmU6ITB9KSxbUC5jcmVhdGVWTm9kZSgidmlldyIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctd3JhcHBlciJ9LFtlZV0pXSl9fSxzdHlsZXM6W3sidW5pLXBpY2tlci12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9fSwidW5pLXBpY2tlci12aWV3LXdyYXBwZXIiOnsiIjp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoicm93Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowLG92ZXJmbG93OiJoaWRkZW4ifX19XX0pO2Z1bmN0aW9uIERyKHYpe2xldCB4PVAucmVhY3RpdmUoWy4uLnYudmFsdWVdKSwkPVAucmVhY3RpdmUoe3ZhbHVlOnh9KTtyZXR1cm4gUC53YXRjaCgoKT0+di52YWx1ZSxVPT57JC52YWx1ZS5sZW5ndGg9VS5sZW5ndGgsUC5uZXh0VGljaygoKT0+e1UuZm9yRWFjaCgoWixKKT0+e1ohPT0kLnZhbHVlW0pdJiYkLnZhbHVlLnNwbGljZShKLDEsWil9KX0pfSksJH1sZXQgQmk9eS5yZXF1aXJlTW9kdWxlKCJkb20iKSxCbj15LmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIjtmdW5jdGlvbiBkaSh2KXtyZXR1cm4gQ3QuZXh0ZW5kKHt9LEN0LmlzU3RyaW5nKHYpP09vKHYpOnYpfWxldCBkYT17bGVuZ3RoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9fSxNaT1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUGlja2VyVmlld0NvbHVtbiIscHJvcHM6ZGEsZGF0YTooKT0+KHtfaXNNb3VudGVkOiExfSksc2V0dXAodix7c2xvdHM6eH0pe2xldCAkPVAuZ2V0Q3VycmVudEluc3RhbmNlKCksVT1QLnJlZihudWxsKSxaPVAucmVmKG51bGwpLEo9UC5yZWYobnVsbCksZWU9UC5yZWYobnVsbCksY2U9UC5pbmplY3QoInBpY2tlclZpZXdQcm9wcyIpLFRlPVAuaW5qZWN0KCJnZXRQaWNrZXJWaWV3Q29sdW1uIikoJCksZmU9UC5jb21wdXRlZCgoKT0+ZGkoY2UuaW5kaWNhdG9yU3R5bGUpKSx3ZT1QLmNvbXB1dGVkKCgpPT5kaShjZS5tYXNrVG9wU3R5bGUpKSxsdD1QLmNvbXB1dGVkKCgpPT5kaShjZS5tYXNrQm90dG9tU3R5bGUpKSxwdD1QLnJlZigwKTtwdC52YWx1ZT1MaShmZS52YWx1ZSk7bGV0IGp0PVAucmVmKDApO2p0LnZhbHVlPXBhcnNlRmxvYXQoY2UuaGVpZ2h0KTtsZXR7c2V0Q3VycmVudDp5dCxvblNjcm9sbGVuZDpIZX09SW8odixUZSxaLHB0KSxEdD0oKT0+e2xldCBxdCxkdDtmKCgpPT57UHJvbWlzZS5hbGwoW3huKFUudmFsdWUpLnRoZW4oKHtoZWlnaHQ6cm59KT0+e3F0PWp0LnZhbHVlPXJufSksQm4mJnYubGVuZ3RoP3huKEoudmFsdWUpLnRoZW4oKHtoZWlnaHQ6cm59KT0+e2R0PXB0LnZhbHVlPXJuL3BhcnNlRmxvYXQodi5sZW5ndGgpfSk6eG4oZWUudmFsdWUpLnRoZW4oKHtoZWlnaHQ6cm59KT0+e2R0PXB0LnZhbHVlPXJufSldKS50aGVuKCgpPT57cXQmJmR0P2YoKCk9PnskLmRhdGEuX2lzTW91bnRlZD0hMCx5dChUZS52YWx1ZSwhMSwhMCl9LDUwKTpEdCgpfSl9LDUwKX07UC5vbk1vdW50ZWQoRHQpO2xldCB2bj1xdD0+cXQ/Qm4/UC5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOkosc3R5bGU6ImZsZXgtZGlyZWN0aW9uOmNvbHVtbjsifSxbcXRdKTpxdDpudWxsO3JldHVybigpPT57bGV0IHF0PXguZGVmYXVsdCYmeC5kZWZhdWx0KCksZHQ9KGp0LnZhbHVlLXB0LnZhbHVlKS8yLHJuPWAke2p0LnZhbHVlLWR0fXB4YCxMbj17c2hvd1Njcm9sbGJhcjohMSxzY3JvbGxUb0JlZ2luOiExLGRlY2VsZXJhdGlvblJhdGU6LjMsc2Nyb2xsWTohMH07cmV0dXJuIEJufHwoTG4uc2Nyb2xsVG9wPVRlLnZhbHVlKnB0LnZhbHVlKSxQLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOlUsY2xhc3M6InVuaS1waWNrZXItdmlldy1jb2x1bW4ifSxbUC5jcmVhdGVWTm9kZSgic2Nyb2xsLXZpZXciLFAubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1waWNrZXItdmlldy1ncm91cCIsc3R5bGU6ImZsZXgtZGlyZWN0aW9uOmNvbHVtbjsiLG9uU2Nyb2xsZW5kOkhlfSxMbiksW1AuY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6WixjbGFzczoidW5pLXBpY2tlci12aWV3LWNvbnRlbnQiLHN0eWxlOntwYWRkaW5nVG9wOmAke2R0fXB4YCxwYWRkaW5nQm90dG9tOmAke2R0fXB4YH19LFt2bihxdCldKV0pLFAuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sifSxbUC5jcmVhdGVWTm9kZSgidS1zY2FsYWJsZSIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctbWFzayB1bmktcGlja2VyLXZpZXctbWFzay10b3AiLHN0eWxlOkN0LmV4dGVuZCh7fSx3ZS52YWx1ZSx7Ym90dG9tOnJufSl9LG51bGwpLFAuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sgdW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIixzdHlsZTpDdC5leHRlbmQoe30sbHQudmFsdWUse3RvcDpybn0pfSxudWxsKV0pLFAuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtyZWY6ZWUsY2xhc3M6InVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiLHN0eWxlOkN0LmV4dGVuZCh7fSxmZS52YWx1ZSx7dG9wOmAke2R0fXB4YH0pfSxudWxsKV0pfX0sc3R5bGVzOlt7InVuaS1waWNrZXItdmlldy1jb2x1bW4iOnsiIjp7ZmxleDoxLHBvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoic3RyZXRjaCIsb3ZlcmZsb3c6ImhpZGRlbiJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2siOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxwb2ludGVyRXZlbnRzOiJub25lIn19LCJ1bmktcGlja2VyLXZpZXctbWFzay10b3AiOnsiIjp7Ym90dG9tOjAsYmFja2dyb3VuZEltYWdlOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkscmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIjp7IiI6e3RvcDowLGJhY2tncm91bmRJbWFnZToibGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkifX0sInVuaS1waWNrZXItdmlldy1ncm91cCI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowfX0sInVuaS1waWNrZXItdmlldy1jb250ZW50Ijp7IiI6e2ZsZXhEaXJlY3Rpb246ImNvbHVtbiIscGFkZGluZ1RvcDowLHBhZGRpbmdSaWdodDowLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDowfX0sInVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCx0b3A6MCxoZWlnaHQ6IjM0cHgiLHBvaW50ZXJFdmVudHM6Im5vbmUiLGJvcmRlckNvbG9yOiIjZTVlNWU1Iixib3JkZXJUb3BXaWR0aDoiMXB4Iixib3JkZXJCb3R0b21XaWR0aDoiMXB4In19fV19KTtmdW5jdGlvbiBMaSh2KXtsZXQgJD0odi5oZWlnaHR8fHYubGluZUhlaWdodHx8IiIpLm1hdGNoKC8oLT9bXGRcLl0rKXB4LyksVT0wO3JldHVybiAkJiYoVT1wYXJzZUZsb2F0KCRbMV0pKSxVfWZ1bmN0aW9uIElvKHYseCwkLFUpe2xldCBaO2Z1bmN0aW9uIEooaGUsVGU9ITApe0JpLnNjcm9sbFRvRWxlbWVudCgkLnZhbHVlLHtvZmZzZXQ6aGUqVS52YWx1ZSxhbmltYXRlZDpUZX0pLFRlJiYoWj1EYXRlLm5vdygpKX1QLndhdGNoKCgpPT52Lmxlbmd0aCwoKT0+e2YoKCk9PntlZSh4LnZhbHVlLCEwLCEwKX0sMTUwKX0pLFAud2F0Y2goeCxoZT0+SihoZSkpO2xldCBlZT0oaGUsVGU9ITAsZmUpPT57eC52YWx1ZT09PWhlJiYhZmV8fCh4LnZhbHVlPWhlLEJuJiZKKGhlLFRlKSl9O3JldHVybntzZXRDdXJyZW50OmVlLG9uU2Nyb2xsZW5kOmhlPT57aWYoRGF0ZS5ub3coKS1aPDM0MClyZXR1cm47bGV0IFRlPWhlLmRldGFpbC5jb250ZW50T2Zmc2V0LnksZmU9TWF0aC5yb3VuZChUZS9VLnZhbHVlKTtUZSVVLnZhbHVlP2VlKGZlLCEwLCEwKTp4LnZhbHVlPWZlfX19bGV0IEFuPXtTRUxFQ1RPUjoic2VsZWN0b3IiLE1VTFRJU0VMRUNUT1I6Im11bHRpU2VsZWN0b3IiLFRJTUU6InRpbWUiLERBVEU6ImRhdGUifSxEaT17WUVBUjoieWVhciIsTU9OVEg6Im1vbnRoIixEQVk6ImRheSJ9O2Z1bmN0aW9uIFlpKHYpe3JldHVybiB2Pjk/djpgMCR7dn1gfWZ1bmN0aW9uIENpKHYseCl7dj1TdHJpbmcodnx8IiIpO2xldCAkPW5ldyBEYXRlO2lmKHg9PT1Bbi5USU1FKXtsZXQgVT12LnNwbGl0KCI6Iik7VS5sZW5ndGg9PT0yJiYkLnNldEhvdXJzKHBhcnNlSW50KFVbMF0pLHBhcnNlSW50KFVbMV0pKX1lbHNle2xldCBVPXYuc3BsaXQoIi0iKTtVLmxlbmd0aD09PTMmJiQuc2V0RnVsbFllYXIocGFyc2VJbnQoVVswXSkscGFyc2VJbnQoU3RyaW5nKHBhcnNlRmxvYXQoVVsxXSktMSkpLHBhcnNlSW50KFVbMl0pKX1yZXR1cm4gJH1mdW5jdGlvbiBGaSh2KXtpZih2Lm1vZGU9PT1Bbi5USU1FKXJldHVybiIwMDowMCI7aWYodi5tb2RlPT09QW4uREFURSl7bGV0IHg9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLTEwMDtzd2l0Y2godi5maWVsZHMpe2Nhc2UgRGkuWUVBUjpyZXR1cm4geDtjYXNlIERpLk1PTlRIOnJldHVybiB4KyItMDEiO2RlZmF1bHQ6cmV0dXJuIHgrIi0wMS0wMSJ9fXJldHVybiIifWZ1bmN0aW9uIElyKHYpe2lmKHYubW9kZT09PUFuLlRJTUUpcmV0dXJuIjIzOjU5IjtpZih2Lm1vZGU9PT1Bbi5EQVRFKXtsZXQgeD1uZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkrMTAwO3N3aXRjaCh2LmZpZWxkcyl7Y2FzZSBEaS5ZRUFSOnJldHVybiB4O2Nhc2UgRGkuTU9OVEg6cmV0dXJuIHgrIi0xMiI7ZGVmYXVsdDpyZXR1cm4geCsiLTEyLTMxIn19cmV0dXJuIiJ9bGV0IHJpPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxyYW5nZTp7dHlwZTpBcnJheSxkZWZhdWx0KCl7cmV0dXJuW119fSxyYW5nZUtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdmFsdWU6e3R5cGU6W051bWJlcixTdHJpbmcsQXJyYXldLGRlZmF1bHQ6MH0sbW9kZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpBbi5TRUxFQ1RPUix2YWxpZGF0b3Iodil7cmV0dXJuIE9iamVjdC52YWx1ZXMoQW4pLmluZGV4T2Yodik+PTB9fSxmaWVsZHM6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHN0YXJ0Ont0eXBlOlN0cmluZyxkZWZhdWx0OkZpfSxlbmQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6SXJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LHJyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXIiLHByb3BzOnJpLGVtaXRzOlsiY2hhbmdlIiwiY2FuY2VsIiwiY29sdW1uY2hhbmdlIl0sc2V0dXAodix7c2xvdHM6eCxlbWl0OiR9KXtsZXQgVT1QLnJlZihudWxsKSxaPWZyKFUsJCksSj1QLnJlZihudWxsKSxlZT1QLnJlZihudWxsKSxjZT0oKT0+e2xldCB5dD12LnZhbHVlO3N3aXRjaCh2Lm1vZGUpe2Nhc2UgQW4uTVVMVElTRUxFQ1RPUjp7Q3QuaXNBcnJheSh5dCl8fCh5dD1bXSksQ3QuaXNBcnJheShKLnZhbHVlKXx8KEoudmFsdWU9W10pO2xldCBIZT1KLnZhbHVlLmxlbmd0aD1NYXRoLm1heCh5dC5sZW5ndGgsdi5yYW5nZS5sZW5ndGgpO2ZvcihsZXQgRHQ9MDtEdDxIZTtEdCsrKXtsZXQgdm49TnVtYmVyKHl0W0R0XSkscXQ9TnVtYmVyKEoudmFsdWVbRHRdKSxkdD1pc05hTih2bik/aXNOYU4ocXQpPzA6cXQ6dm47Si52YWx1ZS5zcGxpY2UoRHQsMSxkdDwwPzA6ZHQpfX1icmVhaztjYXNlIEFuLlRJTUU6Y2FzZSBBbi5EQVRFOkoudmFsdWU9U3RyaW5nKHl0KTticmVhaztkZWZhdWx0OntsZXQgSGU9TnVtYmVyKHl0KTtKLnZhbHVlPUhlPDA/MDpIZTticmVha319fSxoZT15dD0+e2VlLnZhbHVlJiZlZS52YWx1ZS5zZW5kTWVzc2FnZSh5dCl9LFRlPXl0PT57bGV0IEhlPXtldmVudDoiY2FuY2VsIn07ZWUudmFsdWU9dW4oe3VybDoiX191bmlhcHBwaWNrZXIiLGRhdGE6eXQsc3R5bGU6e3RpdGxlTlZpZXc6ITEsYW5pbWF0aW9uVHlwZToibm9uZSIsYW5pbWF0aW9uRHVyYXRpb246MCxiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDApIixwb3BHZXN0dXJlOiJub25lIn0sb25NZXNzYWdlOkR0PT57bGV0IHZuPUR0LmV2ZW50O2lmKHZuPT09ImNyZWF0ZWQiKXtoZSh5dCk7cmV0dXJufWlmKHZuPT09ImNvbHVtbmNoYW5nZSIpe2RlbGV0ZSBEdC5ldmVudCxaKHZuLER0KTtyZXR1cm59SGU9RHR9LG9uQ2xvc2U6KCk9PntlZS52YWx1ZT1udWxsO2xldCBEdD1IZS5ldmVudDtkZWxldGUgSGUuZXZlbnQsRHQmJlooRHQsSGUpfX0pfSxmZT15dD0+e2gubmF0aXZlVUlbdi5tb2RlPT09QW4uVElNRT8icGlja1RpbWUiOiJwaWNrRGF0ZSJdKEhlPT57bGV0IER0PUhlLmRhdGU7WigiY2hhbmdlIix7dmFsdWU6di5tb2RlPT09QW4uVElNRT9gJHtZaShEdC5nZXRIb3VycygpKX06JHtZaShEdC5nZXRNaW51dGVzKCkpfWA6YCR7RHQuZ2V0RnVsbFllYXIoKX0tJHtZaShEdC5nZXRNb250aCgpKzEpfS0ke1lpKER0LmdldERhdGUoKSl9YH0pfSwoKT0+e1ooImNhbmNlbCIse30pfSx2Lm1vZGU9PT1Bbi5USU1FP3t0aW1lOkNpKHYudmFsdWUsQW4uVElNRSl9OntkYXRlOkNpKHYudmFsdWUsQW4uREFURSksbWluRGF0ZTpDaSh2LnN0YXJ0LEFuLkRBVEUpLG1heERhdGU6Q2kodi5lbmQsQW4uREFURSl9KX0sd2U9eXQ9PnsoeXQubW9kZT09PUFuLlRJTUV8fHl0Lm1vZGU9PT1Bbi5EQVRFKSYmIXl0LmZpZWxkcz9mZSgpOih5dC5maWVsZHM9T2JqZWN0LnZhbHVlcyhEaSkuaW5jbHVkZXMoeXQuZmllbGRzKT95dC5maWVsZHM6RGkuREFZLFRlKHl0KSl9LGx0PXl0PT57di5kaXNhYmxlZHx8d2UoQ3QuZXh0ZW5kKHt9LHYse3ZhbHVlOkoudmFsdWUsbG9jYWxlOnAuZ2V0TG9jYWxlKCl9KSl9LHB0PVAuaW5qZWN0KFJyLCExKSxqdD17c3VibWl0OigpPT5bdi5uYW1lLEoudmFsdWVdLHJlc2V0OigpPT57c3dpdGNoKHYubW9kZSl7Y2FzZSBBbi5TRUxFQ1RPUjpKLnZhbHVlPTA7YnJlYWs7Y2FzZSBBbi5NVUxUSVNFTEVDVE9SOkN0LmlzQXJyYXkodi52YWx1ZSkmJihKLnZhbHVlPXYudmFsdWUubWFwKHl0PT4wKSk7YnJlYWs7Y2FzZSBBbi5EQVRFOmNhc2UgQW4uVElNRTpKLnZhbHVlPSIiO2JyZWFrfX19O3JldHVybiBwdCYmKHB0LmFkZEZpZWxkKGp0KSxQLm9uQmVmb3JlVW5tb3VudCgoKT0+cHQucmVtb3ZlRmllbGQoanQpKSksT2JqZWN0LmtleXModikuZm9yRWFjaCh5dD0+e1Aud2F0Y2goKCk9PnZbeXRdLEhlPT57bGV0IER0PXt9O0R0W3l0XT1IZSxoZShEdCl9LHtkZWVwOiEwfSl9KSxQLndhdGNoKCgpPT52LnZhbHVlLGNlLHtkZWVwOiEwfSksY2UoKSwoKT0+UC5jcmVhdGVWTm9kZSgidmlldyIse3JlZjpVLG9uQ2xpY2s6bHR9LFt4LmRlZmF1bHQmJnguZGVmYXVsdCgpXSl9fSksY3I9e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1pbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxtYXg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MTAwfSx2YWx1ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxzdGVwOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxiYWNrZ3JvdW5kQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHNlbGVjdGVkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSxibG9ja0NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjZmZmZmZmIn0sYmxvY2tTaXplOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjI4fSxzaG93VmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0scW49W3sidW5pLXNsaWRlciI6eyIiOntmbGV4OjEsZmxleERpcmVjdGlvbjoiY29sdW1uIn19LCJ1bmktc2xpZGVyLXdyYXBwZXIiOnsiIjp7ZmxleERpcmVjdGlvbjoicm93IixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixhbGlnbkl0ZW1zOiJjZW50ZXIifX0sInVuaS1zbGlkZXItdGFwLWFyZWEiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmdUb3A6IjE0IixwYWRkaW5nQm90dG9tOiIxNCJ9fSwidW5pLXNsaWRlci1oYW5kbGUtd3JhcHBlciI6eyIiOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxiYWNrZ3JvdW5kQ29sb3I6IiNlOWU5ZTkiLGhlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI1IixtYXJnaW5SaWdodDoiMTQiLG1hcmdpbkxlZnQ6IjE0In19LCJ1bmktc2xpZGVyLXRyYWNrIjp7IiI6e2hlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI2IixiYWNrZ3JvdW5kQ29sb3I6IiMwMDdhZmYifX0sInVuaS1zbGlkZXItdGh1bWIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6IjEiLHdpZHRoOiIyOCIsaGVpZ2h0OiIyOCIsYm9yZGVyUmFkaXVzOjUwLGJveFNoYWRvdzoiMCAwIDRweCAjZWJlYmViIn19LCJ1bmktc2xpZGVyLXZhbHVlIjp7IiI6e2NvbG9yOiIjODg4ODg4Iixmb250U2l6ZToiMTYiLHdpZHRoOiIzMCJ9fX1dLGVyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJVU2xpZGVyIixwcm9wczpjcixzdHlsZXM6cW4sc2V0dXAodix7ZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1QLnJlZihudWxsKSxaPWZyKCQseCksSj1kcih2KSxlZT1tbyh2LEosWik7cmV0dXJuIF9vKHYsSiksUC53YXRjaCgoKT0+di52YWx1ZSxjZT0+e0ouc2xpZGVyVmFsdWU9TnVtYmVyKGNlKX0pLFAub25Nb3VudGVkKCgpPT57ZigoKT0+e3huKFUudmFsdWUpLnRoZW4oKHt3aWR0aDpjZSxsZWZ0OmhlfSk9PntKLnNsaWRlckxlZnQ9aGUsSi5zbGlkZXJXaWR0aD1jZXx8MCxKLnNsaWRlclZhbHVlPU51bWJlcih2LnZhbHVlKX0pfSwxMDApfSksKCk9PntsZXR7c2hvd1ZhbHVlOmNlfT12LHt0cmFja1RhcFN0eWxlOmhlLHRyYWNrU3R5bGU6VGUsdHJhY2tBY3RpdmVTdHlsZTpmZSx0aHVtYlN0eWxlOndlLHNsaWRlclZhbHVlOmx0fT1KO3JldHVybiBQLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlciIscmVmOiR9LFtQLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlci13cmFwcGVyIn0sW1AuY3JlYXRlVk5vZGUoImRpdiIsUC5tZXJnZVByb3BzKHtjbGFzczoidW5pLXNsaWRlci10YXAtYXJlYSIsc3R5bGU6aGV9LGVlKSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItaGFuZGxlLXdyYXBwZXIiLHN0eWxlOlRlLHJlZjpVfSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItdHJhY2siLHN0eWxlOmZlfSxudWxsKV0pLFAuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLXRodW1iIixzdHlsZTp3ZX0sbnVsbCldKSxjZT9YbihsdCsiIix7Y2xhc3M6InVuaS1zbGlkZXItdmFsdWUifSk6bnVsbF0pXSl9fX0pO2Z1bmN0aW9uIGRyKHYpe2xldCB4PVAucmVmKDApLCQ9UC5yZWYoMCksVT1QLnJlZigwKSxaPSgpPT52LmJhY2tncm91bmRDb2xvciE9PSIjZTllOWU5Ij92LmJhY2tncm91bmRDb2xvcjp2LmNvbG9yIT09IiMwMDdhZmYiP3YuY29sb3I6IiMwMDdhZmYiLEo9KCk9PnYuYWN0aXZlQ29sb3IhPT0iIzAwN2FmZiI/di5hY3RpdmVDb2xvcjp2LnNlbGVjdGVkQ29sb3IhPT0iI2U5ZTllOSI/di5zZWxlY3RlZENvbG9yOiIjZTllOWU5IixlZT0oKT0+e2xldCBUZT1OdW1iZXIodi5tYXgpLGZlPU51bWJlcih2Lm1pbik7cmV0dXJuKFUudmFsdWUtZmUpLyhUZS1mZSkqJC52YWx1ZX0sY2U9TnVtYmVyKHYuYmxvY2tTaXplKS8yO3JldHVybiBQLnJlYWN0aXZlKHtzbGlkZXJMZWZ0Ongsc2xpZGVyV2lkdGg6JCxzbGlkZXJWYWx1ZTpVLHNsaWRlclRodW1iT2Zmc2V0OmNlLHRyYWNrVGFwU3R5bGU6UC5jb21wdXRlZCgoKT0+KHtwYWRkaW5nVG9wOmNlLHBhZGRpbmdCb3R0b206Y2V9KSksdHJhY2tTdHlsZTpQLmNvbXB1dGVkKCgpPT4oe2JhY2tncm91bmRDb2xvcjpaKCksbWFyZ2luTGVmdDpjZSxtYXJnaW5SaWdodDpjZX0pKSx0cmFja0FjdGl2ZVN0eWxlOlAuY29tcHV0ZWQoKCk9Pih7YmFja2dyb3VuZENvbG9yOkooKSx3aWR0aDplZSgpfSkpLHRodW1iU3R5bGU6UC5jb21wdXRlZCgoKT0+KHt3aWR0aDp2LmJsb2NrU2l6ZSxoZWlnaHQ6di5ibG9ja1NpemUsYmFja2dyb3VuZENvbG9yOnYuYmxvY2tDb2xvcixsZWZ0OmVlKCl9KSl9KX1mdW5jdGlvbiBtbyh2LHgsJCl7bGV0IFU9bnVsbDtmdW5jdGlvbiBaKGNlLGhlKXt2LmRpc2FibGVkfHwoY2U9PT0ibW92ZSI/KEooaGUpLCQoImNoYW5naW5nIix7dmFsdWU6eC5zbGlkZXJWYWx1ZX0pKTpjZT09PSJlbmQiJiYoSihoZSksJCgiY2hhbmdlIix7dmFsdWU6eC5zbGlkZXJWYWx1ZX0pKSl9ZnVuY3Rpb24gSihjZSl7Y2UtPXguc2xpZGVyVGh1bWJPZmZzZXQsY2U8MCYmKGNlPTApLGNlPnguc2xpZGVyV2lkdGgmJihjZT14LnNsaWRlcldpZHRoKTtsZXQgaGU9TnVtYmVyKHYubWF4KSxUZT1OdW1iZXIodi5taW4pLGZlPU51bWJlcih2LnN0ZXApLHdlPWNlL3guc2xpZGVyV2lkdGgqKGhlLVRlKTtmZT4wJiZ3ZT5mZSYmd2UlZmUvZmUhPT0wP3dlLT13ZSVmZTp3ZT1wYXJzZUludCh3ZSsiIikseC5zbGlkZXJWYWx1ZT13ZStUZX1yZXR1cm57b25Ub3VjaHN0YXJ0KGNlKXtjZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiYhVSYmKFU9Y2UsWigic3RhcnQiLGNlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYKSl9LG9uVG91Y2htb3ZlKGNlKXtjZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiZVJiZaKCJtb3ZlIixjZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCl9LG9uVG91Y2hlbmQoY2Upe2NlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PTEmJlUmJihVPW51bGwsWigiZW5kIixjZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCkpfX19ZnVuY3Rpb24gX28odix4KXtsZXQgJD1QLmluamVjdChSciwhMSksVT17c3VibWl0OigpPT57bGV0IFo9WyIiLG51bGxdO3JldHVybiB2Lm5hbWUmJihaWzBdPXYubmFtZSxaWzFdPXguc2xpZGVyVmFsdWUpLFp9LHJlc2V0OigpPT57eC5zbGlkZXJWYWx1ZT1OdW1iZXIodi52YWx1ZSl9fTskJiYoJC5hZGRGaWVsZChVKSxQLm9uVW5tb3VudGVkKCgpPT57JC5yZW1vdmVGaWVsZChVKX0pKX1sZXQgcWk9e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGNoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJzd2l0Y2gifSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9fSxKaT17c3dpdGNoOiJzd2l0Y2giLGNoZWNrYm94OiJjaGVja2JveCJ9LFhvPXt3aWR0aDo1MixoZWlnaHQ6MzJ9LFdyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2l0Y2giLHByb3BzOnFpLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAodix7ZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1QLnJlZih2LmNoZWNrZWQpLFo9eXIodixVKSxKPWZyKCQseCk7UC53YXRjaCgoKT0+di5jaGVja2VkLGNlPT57VS52YWx1ZT1jZX0pO2xldCBlZT0oY2UsaGUpPT57di5kaXNhYmxlZHx8KFUudmFsdWU9Y2UuZGV0YWlsP2NlLmRldGFpbC52YWx1ZTohVS52YWx1ZSxKKCJjaGFuZ2UiLHt2YWx1ZTpVLnZhbHVlfSkpfTtyZXR1cm4gWiYmKFouYWRkSGFuZGxlcihlZSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntaLnJlbW92ZUhhbmRsZXIoZWUpfSkpLGJyKHYseyJsYWJlbC1jbGljayI6ZWV9KSwoKT0+e2xldHtjb2xvcjpjZSx0eXBlOmhlLGRpc2FibGVkOlRlfT12O3JldHVybiBQLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6JH0sW2hlPT09Smkuc3dpdGNoP1AuY3JlYXRlVk5vZGUoImRjLXN3aXRjaCIsUC5tZXJnZVByb3BzKHtkYXRhVW5jVHlwZToidW5pLXN3aXRjaCJ9LHtvbkNoYW5nZTplZX0se2NoZWNrZWQ6VS52YWx1ZSxjb2xvcjpjZSxkaXNhYmxlZDpUZX0se3N0eWxlOlhvfSksbnVsbCk6bnVsbCxoZT09PUppLmNoZWNrYm94P1AuY3JlYXRlVk5vZGUoUC5yZXNvbHZlQ29tcG9uZW50KCJjaGVja2JveCIpLFAubWVyZ2VQcm9wcyh7c3R5bGU6e2NvbG9yOmNlfX0se2NoZWNrZWQ6VS52YWx1ZSxkaXNhYmxlZDpUZX0se29uQ2xpY2s6ZWV9KSxudWxsKTpudWxsXSl9fX0pO2Z1bmN0aW9uIHlyKHYseCl7bGV0ICQ9UC5pbmplY3QoUnIsITEpLFU9UC5pbmplY3QoVm4sITEpLFo9e3N1Ym1pdDooKT0+e2xldCBKPVsiIixudWxsXTtyZXR1cm4gdi5uYW1lJiYoSlswXT12Lm5hbWUsSlsxXT14LnZhbHVlKSxKfSxyZXNldDooKT0+e3gudmFsdWU9ITF9fTtyZXR1cm4gJCYmKCQuYWRkRmllbGQoWiksUC5vblVubW91bnRlZCgoKT0+eyQucmVtb3ZlRmllbGQoWil9KSksVX1sZXQgTm89e2NoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sQj1YcigidWNnIiksWT17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LHJlPVt7InVuaS1jaGVja2JveCI6eyIiOntmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciJ9fSwidW5pLWNoZWNrYm94LWlucHV0Ijp7IiI6e2p1c3RpZnlDb250ZW50OiJjZW50ZXIiLGFsaWduSXRlbXM6ImNlbnRlciIscG9zaXRpb246InJlbGF0aXZlIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGJvcmRlclN0eWxlOiJzb2xpZCIsYmFja2dyb3VuZENvbG9yOiIjZmZmZmZmIixib3JkZXJSYWRpdXM6IjMiLHdpZHRoOiIyMiIsaGVpZ2h0OiIyMiJ9fSwidW5pLWljb24iOnsiIjp7Zm9udEZhbWlseToidW5pbmNvbXBvbmVudHMiLGZvbnRTaXplOiIxNiIsbWFyZ2luTGVmdDoiMiIsbWFyZ2luVG9wOiIyIixjb2xvcjoiIzAwN2FmZiJ9fSwidW5pLWNoZWNrYm94LWlucHV0LWRpc2FibGVkIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2UxZTFlMSJ9fSwidW5pLWNoZWNrYm94LWlucHV0LWRpc2FibGVkLWJlZm9yZSI6eyIiOntjb2xvcjoiI2FkYWRhZCJ9fSwidW5pLWNoZWNrYm94LXNsb3QiOnsiIjp7Zm9udFNpemU6IjE2IixtYXJnaW5MZWZ0OiI1In19fV0seGU9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IkNoZWNrYm94Iixwcm9wczpObyxzdHlsZXM6cmUsc2V0dXAodix7c2xvdHM6eH0pe2xldCAkPVAucmVmKG51bGwpLFU9UC5yZWYodi5jaGVja2VkKSxaPVAucmVmKHYudmFsdWUpLEo9UC5jb21wdXRlZCgoKT0+di5kaXNhYmxlZD8iI2FkYWRhZCI6di5jb2xvciksZWU9KCk9PntVLnZhbHVlPSExfSxjZT0od2UsbHQpPT57di5kaXNhYmxlZHx8KFUudmFsdWU9IVUudmFsdWUsaGUmJmhlLmNoZWNrYm94Q2hhbmdlKHdlKSl9LHt1bmlDaGVja0dyb3VwOmhlLHVuaUxhYmVsOlRlfT1aZShVLFosZWUpO1RlJiYoVGUuYWRkSGFuZGxlcihjZSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntUZS5yZW1vdmVIYW5kbGVyKGNlKX0pKSxicih2LHsibGFiZWwtY2xpY2siOmNlfSksUC53YXRjaChbKCk9PnYuY2hlY2tlZCwoKT0+di52YWx1ZV0sKFt3ZSxsdF0pPT57VS52YWx1ZT13ZSxaLnZhbHVlPWx0fSk7bGV0IGZlPSgpPT57aWYoIXguZGVmYXVsdClyZXR1cm5bXTtsZXQgd2U9eC5kZWZhdWx0KCk7cmV0dXJuIHdlLmxlbmd0aD09PTEmJndlWzBdLnR5cGU9PT1UZXh0P1tYbih3ZVswXS5jaGlsZHJlbix7Y2xhc3M6InVuaS1jaGVja2JveC1zbG90In0pXTp3ZX07cmV0dXJuKCk9PlAuY3JlYXRlVk5vZGUoImRpdiIsUC5tZXJnZVByb3BzKHtyZWY6JH0se2RhdGFVbmNUeXBlOiJ1bmktY2hlY2tib3gifSx7b25DbGljazpjZSxjbGFzczoidW5pLWNoZWNrYm94In0pLFtQLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczpbInVuaS1jaGVja2JveC1pbnB1dCIseyJ1bmktY2hlY2tib3gtaW5wdXQtZGlzYWJsZWQiOnYuZGlzYWJsZWR9XX0sW1UudmFsdWU/WG4oIlx1RUEwOCIse2NsYXNzOiJ1bmktaWNvbiIsc3R5bGU6e2NvbG9yOkoudmFsdWV9fSk6bnVsbF0pLC4uLmZlKCldKX19KTtmdW5jdGlvbiBaZSh2LHgsJCl7bGV0IFU9UC5jb21wdXRlZCgoKT0+KHtjaGVja2JveENoZWNrZWQ6Qm9vbGVhbih2LnZhbHVlKSx2YWx1ZTp4LnZhbHVlfSkpLFo9e3Jlc2V0OiR9LEo9UC5pbmplY3QoQiwhMSk7SiYmSi5hZGRGaWVsZChVKTtsZXQgZWU9UC5pbmplY3QoUnIsITEpO2VlJiZlZS5hZGRGaWVsZChaKTtsZXQgY2U9UC5pbmplY3QoVm4sITEpO3JldHVybiBQLm9uQmVmb3JlVW5tb3VudCgoKT0+e0omJkoucmVtb3ZlRmllbGQoVSksZWUmJmVlLnJlbW92ZUZpZWxkKFopfSkse3VuaUNoZWNrR3JvdXA6Six1bmlGb3JtOmVlLHVuaUxhYmVsOmNlfX1sZXQgY3Q9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IkNoZWNrYm94R3JvdXAiLHByb3BzOlksZW1pdHM6WyJjaGFuZ2UiXSxzZXR1cCh2LHtzbG90czp4LGVtaXQ6JH0pe2xldCBVPVAucmVmKG51bGwpLFo9ZnIoVSwkKTtyZXR1cm4gWXQodixaKSwoKT0+UC5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOlUsY2xhc3M6InVuaS1jaGVja2JveC1ncm91cCJ9LFt4LmRlZmF1bHQmJnguZGVmYXVsdCgpXSl9fSk7ZnVuY3Rpb24gWXQodix4KXtsZXQgJD1bXSxVPSgpPT4kLnJlZHVjZSgoSixlZSk9PihlZS52YWx1ZS5jaGVja2JveENoZWNrZWQmJkoucHVzaChlZS52YWx1ZS52YWx1ZSksSiksbmV3IEFycmF5KTtQLnByb3ZpZGUoQix7YWRkRmllbGQoSil7JC5wdXNoKEopfSxyZW1vdmVGaWVsZChKKXskLnNwbGljZSgkLmluZGV4T2YoSiksMSl9LGNoZWNrYm94Q2hhbmdlKEope3goImNoYW5nZSIse3ZhbHVlOlUoKX0pfX0pO2xldCBaPVAuaW5qZWN0KFJyLCExKTtyZXR1cm4gWiYmWi5hZGRGaWVsZCh7c3VibWl0OigpPT57bGV0IEo9WyIiLG51bGxdO3JldHVybiB2Lm5hbWUhPT0iIiYmKEpbMF09di5uYW1lLEpbMV09VSgpKSxKfX0pLFV9bGV0IFF0PXtjaGVja2VkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0saWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSx2YWx1ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LFZpPVhyKCJ1Y2ciKSxHcj17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGd0PVt7InVuaS1yYWRpbyI6eyIiOnthbGlnbkl0ZW1zOiJjZW50ZXIiLGZsZXhEaXJlY3Rpb246InJvdyJ9fSwidW5pLXJhZGlvLWlucHV0Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixtYXJnaW5SaWdodDoiNSIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGJvcmRlclJhZGl1czo1MCx3aWR0aDoiMjIiLGhlaWdodDoiMjIiLG91dGxpbmU6MH19LCJ1bmktcmFkaW8taW5wdXQtaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyIsZm9udFNpemU6IjE0Iixjb2xvcjoiI2ZmZmZmZiJ9fSwidW5pLXJhZGlvLWlucHV0LWRpc2FibGVkIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2UxZTFlMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGNvbG9yOiIjYWRhZGFkIn19LCJ1bmktcmFkaW8tc2xvdCI6eyIiOntmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjUifX19XSxSdD1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUmFkaW8iLHByb3BzOlF0LHN0eWxlczpndCxlbWl0czpbImNoYW5nZSJdLHNldHVwKHYse3Nsb3RzOnh9KXtsZXQgJD1QLnJlZihudWxsKSxVPVAucmVmKHYuY2hlY2tlZCksWj1QLnJlZih2LnZhbHVlKSxKPVAuY29tcHV0ZWQoKCk9PntsZXQgbHQ9di5kaXNhYmxlZD8iI2FkYWRhZCI6di5jb2xvcjtyZXR1cm4gVS52YWx1ZT97YmFja2dyb3VuZENvbG9yOmx0LGJvcmRlckNvbG9yOmx0fTp7Ym9yZGVyQ29sb3I6IiNkMWQxZDEifX0pLGVlPSgpPT57VS52YWx1ZT0hMX0se3VuaUNoZWNrR3JvdXA6Y2UsdW5pTGFiZWw6aGUsZmllbGQ6VGV9PVlyKFUsWixlZSksZmU9KGx0LHB0KT0+e3YuZGlzYWJsZWR8fFUudmFsdWV8fChVLnZhbHVlPSFVLnZhbHVlLGNlJiZjZS5yYWRpb0NoYW5nZShsdCxUZSkpfTtoZSYmKGhlLmFkZEhhbmRsZXIoZmUpLFAub25CZWZvcmVVbm1vdW50KCgpPT57aGUucmVtb3ZlSGFuZGxlcihmZSl9KSksYnIodix7ImxhYmVsLWNsaWNrIjpmZX0pLFAud2F0Y2goWygpPT52LmNoZWNrZWQsKCk9PnYudmFsdWVdLChbbHQscHRdKT0+e1UudmFsdWU9bHQsWi52YWx1ZT1wdH0pO2xldCB3ZT0oKT0+e2lmKCF4LmRlZmF1bHQpcmV0dXJuW107bGV0IGx0PXguZGVmYXVsdCgpO3JldHVybiBsdC5sZW5ndGg9PT0xJiZsdFswXS50eXBlPT09VGV4dD9bWG4obHRbMF0uY2hpbGRyZW4se2NsYXNzOiJ1bmktcmFkaW8tc2xvdCJ9KV06bHR9O3JldHVybigpPT57bGV0e2Rpc2FibGVkOmx0fT12O3JldHVybiBQLmNyZWF0ZVZOb2RlKCJkaXYiLFAubWVyZ2VQcm9wcyh7cmVmOiR9LHtkYXRhVW5jVHlwZToidW5pLXJhZGlvIn0se29uQ2xpY2s6ZmUsY2xhc3M6InVuaS1yYWRpbyJ9KSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7c3R5bGU6Si52YWx1ZSxjbGFzczpbInVuaS1yYWRpby1pbnB1dCIseyJ1bmktcmFkaW8taW5wdXQtZGlzYWJsZWQiOmx0fV19LFtVLnZhbHVlP1huKCJcdUVBMDgiLHtjbGFzczoidW5pLXJhZGlvLWlucHV0LWljb24ifSk6bnVsbF0pLC4uLndlKCldKX19fSk7ZnVuY3Rpb24gWXIodix4LCQpe2xldCBVPVAuY29tcHV0ZWQoe2dldDooKT0+KHtyYWRpb0NoZWNrZWQ6Qm9vbGVhbih2LnZhbHVlKSx2YWx1ZTp4LnZhbHVlfSksc2V0Oih7cmFkaW9DaGVja2VkOmhlfSk9Pnt2LnZhbHVlPWhlfX0pLFo9e3Jlc2V0OiR9LEo9UC5pbmplY3QoVmksITEpO0omJkouYWRkRmllbGQoVSk7bGV0IGVlPVAuaW5qZWN0KFJyLCExKTtlZSYmZWUuYWRkRmllbGQoWik7bGV0IGNlPVAuaW5qZWN0KFZuLCExKTtyZXR1cm4gUC5vbkJlZm9yZVVubW91bnQoKCk9PntKJiZKLnJlbW92ZUZpZWxkKFUpLGVlJiZlZS5yZW1vdmVGaWVsZChaKX0pLHt1bmlDaGVja0dyb3VwOkosdW5pRm9ybTplZSx1bmlMYWJlbDpjZSxmaWVsZDpVfX1sZXQgYW89UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IlJhZGlvR3JvdXAiLHByb3BzOkdyLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAodix7c2xvdHM6eCxlbWl0OiR9KXtsZXQgVT1QLnJlZihudWxsKSxaPWZyKFUsJCk7cmV0dXJuIG9lKHYsWiksKCk9PlAuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpVfSxbeC5kZWZhdWx0JiZ4LmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIG9lKHYseCl7bGV0ICQ9W107UC5vbk1vdW50ZWQoKCk9PntjZSgkLmxlbmd0aC0xKX0pO2xldCBVPSgpPT57dmFyIGhlO3JldHVybihoZT0kLmZpbmQoVGU9PlRlLnZhbHVlLnJhZGlvQ2hlY2tlZCkpPT1udWxsP3ZvaWQgMDpoZS52YWx1ZS52YWx1ZX07UC5wcm92aWRlKFZpLHthZGRGaWVsZChoZSl7JC5wdXNoKGhlKX0scmVtb3ZlRmllbGQoaGUpeyQuc3BsaWNlKCQuaW5kZXhPZihoZSksMSl9LHJhZGlvQ2hhbmdlKGhlLFRlKXtsZXQgZmU9JC5pbmRleE9mKFRlKTtjZShmZSwhMCkseCgiY2hhbmdlIix7dmFsdWU6VSgpfSl9fSk7bGV0IFo9UC5pbmplY3QoUnIsITEpLEo9e3N1Ym1pdDooKT0+e2xldCBoZT1bIiIsbnVsbF07cmV0dXJuIHYubmFtZSE9PSIiJiYoaGVbMF09di5uYW1lLGhlWzFdPVUoKSksaGV9fTtaJiYoWi5hZGRGaWVsZChKKSxQLm9uQmVmb3JlVW5tb3VudCgoKT0+e1oucmVtb3ZlRmllbGQoSil9KSk7ZnVuY3Rpb24gZWUoaGUsVGUpe2hlLnZhbHVlPXtyYWRpb0NoZWNrZWQ6VGUsdmFsdWU6aGUudmFsdWUudmFsdWV9fWZ1bmN0aW9uIGNlKGhlLFRlKXskLmZvckVhY2goKGZlLHdlKT0+e3dlIT09aGUmJlRlJiZlZSgkW3dlXSwhMSl9KX1yZXR1cm4gJH1sZXQgWD1bInUtaW5wdXQiLCJ1LXRleHRhcmVhIl0sc2U9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IkZvcm0iLGVtaXRzOlsic3VibWl0IiwicmVzZXQiXSxzZXR1cCh7fSx7c2xvdHM6dixlbWl0Onh9KXtsZXQgJD1QLnJlZihudWxsKSxVPWZyKCQseCksWj1bXSxKO3JldHVybiBQLnByb3ZpZGUoUnIse2FkZEZpZWxkKGVlKXtaLnB1c2goZWUpfSxyZW1vdmVGaWVsZChlZSl7Wi5zcGxpY2UoWi5pbmRleE9mKGVlKSwxKX0sc3VibWl0KGVlKXtsZXQgY2U9e307SiYmSihjZSk7bGV0IGhlPVoucmVkdWNlKChUZSxmZSk9PntpZihmZS5zdWJtaXQpe2xldFt3ZSxsdF09ZmUuc3VibWl0KCk7d2UmJihUZVt3ZV09bHQpfXJldHVybiBUZX0sT2JqZWN0LmNyZWF0ZShudWxsKSk7T2JqZWN0LmFzc2lnbihjZSxoZSksVSgic3VibWl0Iix7dmFsdWU6Y2V9KX0scmVzZXQoZWUpe0omJkooKSxaLmZvckVhY2goY2U9PmNlLnJlc2V0JiZjZS5yZXNldCgpKSxVKCJyZXNldCIsZWUpfX0pLCgpPT57bGV0IGVlPXYuZGVmYXVsdCYmdi5kZWZhdWx0KCk7cmV0dXJuIEo9QmUoZWUpLFAuY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6JH0sW2VlXSl9fX0pO2Z1bmN0aW9uIEJlKHYpe2xldCB4PXkucmVxdWlyZU1vZHVsZSgicGx1cyIpLCQ9KFUsWik9PnsoWnx8dnx8W10pLmZvckVhY2goZnVuY3Rpb24oSil7WC5pbmRleE9mKFN0cmluZyhKLnR5cGUpKT49MCYmSi5lbCYmSi5lbC5hdHRyJiZKLmVsLmF0dHIubmFtZSYmKFU/VVtKLmVsLmF0dHIubmFtZV09eC5nZXRWYWx1ZShKLmVsLm5vZGVJZCk6Si5lbC5zZXRWYWx1ZSgiIikpLEN0LmlzQXJyYXkoSi5jaGlsZHJlbikmJkouY2hpbGRyZW4mJkouY2hpbGRyZW4ubGVuZ3RoJiYkKFUsSi5jaGlsZHJlbil9KX07cmV0dXJuICR9bGV0IG10PXt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxzaXplOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjIzfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LHBuPXtzdWNjZXNzOiIjMDliYjA3IixpbmZvOiIjMTBhZWZmIix3YXJuOiIjZjc2MjYwIix3YWl0aW5nOiIjMTBhZWZmIixzYWZlX3N1Y2Nlc3M6IiMwOWJiMDciLHNhZmVfd2FybjoiI2ZmYmUwMCIsc3VjY2Vzc19jaXJjbGU6IiMwOWJiMDciLHN1Y2Nlc3Nfbm9fY2lyY2xlOiIjMDliYjA3Iix3YWl0aW5nX2NpcmNsZToiIzEwYWVmZiIsY2lyY2xlOiIjYzljOWM5Iixkb3dubG9hZDoiIzA5YmIwNyIsaW5mb19jaXJjbGU6IiMwOWJiMDciLGNhbmNlbDoiI2Y0MzUzMCIsc2VhcmNoOiIjYjJiMmIyIixjbGVhcjoiI2IyYjJiMiJ9LEpuPXtzdWNjZXNzOiJcdUVBMDYiLGluZm86Ilx1RUEwMyIsd2FybjoiXHVFQTBCIix3YWl0aW5nOiJcdUVBMDkiLHNhZmVfc3VjY2VzczoiXHVFQTA0IixzYWZlX3dhcm46Ilx1RUEwNSIsc3VjY2Vzc19jaXJjbGU6Ilx1RUEwNyIsc3VjY2Vzc19ub19jaXJjbGU6Ilx1RUEwOCIsd2FpdGluZ19jaXJjbGU6Ilx1RUEwQSIsY2lyY2xlOiJcdUVBMDEiLGRvd25sb2FkOiJcdUVBMDIiLGluZm9fY2lyY2xlOiJcdUVBMEMiLGNhbmNlbDoiXHVFQTBEIixzZWFyY2g6Ilx1RUEwRSIsY2xlYXI6Ilx1RUEwRiJ9LFVuPVt7InVuaS1pY29uIjp7IiI6e2ZvbnRGYW1pbHk6InVuaW5jb21wb25lbnRzIn19fV0sU3I9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6Ikljb24iLHByb3BzOm10LHN0eWxlczpVbixzZXR1cCh2LHt9KXtyZXR1cm4oKT0+WG4oSm5bdi50eXBlXSx7Y2xhc3M6InVuaS1pY29uIixzdHlsZTp7Y29sb3I6di5jb2xvcnx8cG5bdi50eXBlXSxmb250U2l6ZTp2LnNpemV9fSl9fSksRnI9e2luZGljYXRvckRvdHM6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx2ZXJ0aWNhbDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGF1dG9wbGF5Ont0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY2lyY3VsYXI6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpbnRlcnZhbDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1ZTN9LGR1cmF0aW9uOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjUwMH0sY3VycmVudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxpbmRpY2F0b3JDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoicmdiYSgwLDAsMCwuMykifSxpbmRpY2F0b3JBY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwMDAwMCJ9LHByZXZpb3VzTWFyZ2luOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxuZXh0TWFyZ2luOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjdXJyZW50SXRlbUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxza2lwSGlkZGVuSXRlbUxheW91dDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGRpc3BsYXlNdWx0aXBsZUl0ZW1zOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVUb3VjaDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9fSxibz15LmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIixrbz1beyJ1bmktc3dpcGVyIjp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OiIxNTBweCJ9fSwidW5pLXN3aXBlci1zbGlkZXIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MH19LCJ1bmktc3dpcGVyLWRvdHMiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCxib3R0b206IjEwIixoZWlnaHQ6IjEwIn19fV0sUm89UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IlN3aXBlciIscHJvcHM6RnIsc3R5bGVzOmtvLGVtaXRzOlsiY2hhbmdlIiwidHJhbnNpdGlvbiIsImFuaW1hdGlvbmZpbmlzaCJdLHNldHVwKHYse3Nsb3RzOngsZW1pdDokfSl7bGV0IFU9UC5yZWYobnVsbCksWj1bXSxKPWZyKFUsJCksZWU9JG4odiksY2U9S24oZWUsdixaLEopO3JldHVybiBQLndhdGNoKFsoKT0+di5jdXJyZW50LCgpPT52LmN1cnJlbnRJdGVtSWRdLChbaGUsVGVdKT0+e0huKGVlLHYsWil9KSxQLm9uTW91bnRlZCgoKT0+e2YoKCk9Pnt4bihVLnZhbHVlKS50aGVuKCh7d2lkdGg6aGUsaGVpZ2h0OlRlfSk9PntlZS5zd2lwZXJXaWR0aD1oZSxlZS5zd2lwZXJIZWlnaHQ9VGV9KX0sNTApfSksKCk9PntsZXQgaGU9eC5kZWZhdWx0JiZ4LmRlZmF1bHQoKSx7aW5kaWNhdG9yU3R5bGU6VGUsY3VycmVudFN5bmM6ZmV9PWVlO3JldHVybiBaPWxpKGhlKSxQLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6VSxjbGFzczoidW5pLXN3aXBlciJ9LFtQLmNyZWF0ZVZOb2RlKCJzbGlkZXIiLFAubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1zd2lwZXItc2xpZGVyIn0se2F1dG9QbGF5OnYuYXV0b3BsYXksaW50ZXJ2YWw6di5pbnRlcnZhbCxpbmRleDpmZSxrZWVwSW5kZXg6ITAsc2hvd0luZGljYXRvcnM6di5pbmRpY2F0b3JEb3RzLGluZmluaXRlOnYuY2lyY3VsYXIsdmVydGljYWw6di52ZXJ0aWNhbCxzY3JvbGxhYmxlOiF2LmRpc2FibGVUb3VjaH0sY2UpLFtaLFAuY3JlYXRlVk5vZGUoImluZGljYXRvciIse2NsYXNzOiJ1bmktc3dpcGVyLWRvdHMiLHN0eWxlOlRlfSxudWxsKV0pXSl9fX0pO2Z1bmN0aW9uICRuKHYpe2xldCB4PVAucmVmKDApLCQ9UC5yZWYoMCksVT1QLnJlZih2LmN1cnJlbnQpLFo9UC5yZWYoImF1dG9wbGF5IiksSj1QLmNvbXB1dGVkKCgpPT4oe2l0ZW1Db2xvcjp2LmluZGljYXRvckNvbG9yLGl0ZW1TZWxlY3RlZENvbG9yOnYuaW5kaWNhdG9yQWN0aXZlQ29sb3IsaXRlbVNpemU6OCxvcGFjaXR5OnYuaW5kaWNhdG9yRG90cz8xOjB9KSk7cmV0dXJuIFAucmVhY3RpdmUoe3N3aXBlcldpZHRoOngsc3dpcGVySGVpZ2h0OiQsaW5kaWNhdG9yU3R5bGU6SixjdXJyZW50U3luYzpVLGN1cnJlbnRDaGFuZ2VTb3VyY2U6Wn0pfWZ1bmN0aW9uIEtuKHYseCwkLFUpe2xldCBaPTAsSj1mZT0+e2xldCB3ZT1mZS5kZXRhaWwsbHQ9eC52ZXJ0aWNhbCxwdD0obHQ/d2Uub2Zmc2V0WVJhdGlvOndlLm9mZnNldFhSYXRpbyl8fDA7aWYoKGZlLmRyYWd8fGZlLmRyYWcpJiYodi5jdXJyZW50Q2hhbmdlU291cmNlPSJ0b3VjaCIpLHB0PT09MCl7bGV0IGp0PU1hdGguYWJzKFopO2lmKGp0PT09MSlyZXR1cm47anQ+LjUmJihwdD0xKX1aPXB0LFUoInRyYW5zaXRpb24iLHtkeDpsdD8wOi12LnN3aXBlcldpZHRoKnB0LGR5Omx0Py12LnN3aXBlckhlaWdodCpwdDowfSl9LGVlPWZlPT57bGV0IHdlPSgpPT57VSgiYW5pbWF0aW9uZmluaXNoIixoZSgpKSx2LmN1cnJlbnRDaGFuZ2VTb3VyY2U9ImF1dG9wbGF5In07Ym8/d2UoKTpmKHdlLDUwKX0sY2U9ZmU9PntDdC5pc1N0cmluZyhmZS5kZXRhaWwuc291cmNlKSYmKHYuY3VycmVudENoYW5nZVNvdXJjZT1mZS5kZXRhaWwuc291cmNlKSx2LmN1cnJlbnRTeW5jPWZlLmRldGFpbC5pbmRleCxaPTB9O2Z1bmN0aW9uIGhlKCl7bGV0IGZlPU51bWJlcih2LmN1cnJlbnRTeW5jKSx3ZT0kW2ZlXXx8e30sbHQ9d2UuY29tcG9uZW50SW5zdGFuY2UmJndlLmNvbXBvbmVudEluc3RhbmNlLml0ZW1JZHx8IiI7cmV0dXJue2N1cnJlbnQ6ZmUsY3VycmVudEl0ZW1JZDpsdCxzb3VyY2U6di5jdXJyZW50Q2hhbmdlU291cmNlfX1yZXR1cm4gUC53YXRjaCgoKT0+di5jdXJyZW50U3luYyxmZT0+e1UoImNoYW5nZSIsaGUoKSl9KSx7b25TY3JvbGw6SixvblNjcm9sbGVuZDplZSxvbkNoYW5nZTpjZX19ZnVuY3Rpb24gSG4odix4LCQpe2xldCBVPS0xO2lmKHguY3VycmVudEl0ZW1JZClmb3IobGV0IFo9MCxKPSQ7WjxKLmxlbmd0aDtaKyspe2xldCBlZT1KW1pdLmNvbXBvbmVudEluc3RhbmNlO2lmKGVlJiZlZS5pdGVtSWQ9PT14LmN1cnJlbnRJdGVtSWQpe1U9WjticmVha319VTwwJiYoVT1NYXRoLnJvdW5kKE51bWJlcih4LmN1cnJlbnQpKXx8MCksVT1VPDA/MDpVLHYuY3VycmVudFN5bmMhPT1VJiYodi5jdXJyZW50Q2hhbmdlU291cmNlPSIiLHYuY3VycmVudFN5bmM9VSl9bGV0IEFpPXtpdGVtSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxpcz1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiU3dpcGVySXRlbSIscHJvcHM6QWksc2V0dXAodix7c2xvdHM6eH0pe3JldHVybigpPT5QLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXN3aXBlci1pdGVtIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MCxvdmVyZmxvdzoiaGlkZGVuIn19LFt4LmRlZmF1bHQmJnguZGVmYXVsdCgpXSl9fSk7dmFyIGhhPS9ePChbLUEtWmEtejAtOV9dKykoKD86XHMrW2EtekEtWl86XVstYS16QS1aMC05XzouXSooPzpccyo9XHMqKD86KD86IlteIl0qIil8KD86J1teJ10qJyl8W14+XHNdKykpPykqKVxzKihcLz8pPi8sd3I9L148XC8oWy1BLVphLXowLTlfXSspW14+XSo+LyxUYT0vKFthLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qKSg/OlxzKj1ccyooPzooPzoiKCg/OlxcLnxbXiJdKSopIil8KD86JygoPzpcXC58W14nXSkqKScpfChbXj5cc10rKSkpPy9nLERhPXhvKCJhcmVhLGJhc2UsYmFzZWZvbnQsYnIsY29sLGZyYW1lLGhyLGltZyxpbnB1dCxsaW5rLG1ldGEscGFyYW0sZW1iZWQsY29tbWFuZCxrZXlnZW4sc291cmNlLHRyYWNrLHdiciIpLEZhPXhvKCJhLGFkZHJlc3MsYXJ0aWNsZSxhcHBsZXQsYXNpZGUsYXVkaW8sYmxvY2txdW90ZSxidXR0b24sY2FudmFzLGNlbnRlcixkZCxkZWwsZGlyLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxmcmFtZXNldCxoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlmcmFtZSxpc2luZGV4LGxpLG1hcCxtZW51LG5vZnJhbWVzLG5vc2NyaXB0LG9iamVjdCxvbCxvdXRwdXQscCxwcmUsc2VjdGlvbixzY3JpcHQsdGFibGUsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIsdWwsdmlkZW8iKSxWYT14bygiYWJicixhY3JvbnltLGFwcGxldCxiLGJhc2Vmb250LGJkbyxiaWcsYnIsYnV0dG9uLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpZnJhbWUsaW1nLGlucHV0LGlucyxrYmQsbGFiZWwsbWFwLG9iamVjdCxxLHMsc2FtcCxzY3JpcHQsc2VsZWN0LHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRleHRhcmVhLHR0LHUsdmFyIiksVWE9eG8oImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLGdhPXhvKCJjaGVja2VkLGNvbXBhY3QsZGVjbGFyZSxkZWZlcixkaXNhYmxlZCxpc21hcCxtdWx0aXBsZSxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3dyYXAscmVhZG9ubHksc2VsZWN0ZWQiKSxQYT14bygic2NyaXB0LHN0eWxlIik7ZnVuY3Rpb24gam4odix4KXt2YXIgJCxVLFosSj1bXSxlZT12O2ZvcihKLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXX07djspe2lmKFU9ITAsIUoubGFzdCgpfHwhUGFbSi5sYXN0KCldKXtpZih2LmluZGV4T2YoIjwhLS0iKT09MD8oJD12LmluZGV4T2YoIi0tPiIpLCQ+PTAmJih4LmNvbW1lbnQmJnguY29tbWVudCh2LnN1YnN0cmluZyg0LCQpKSx2PXYuc3Vic3RyaW5nKCQrMyksVT0hMSkpOnYuaW5kZXhPZigiPC8iKT09MD8oWj12Lm1hdGNoKHdyKSxaJiYodj12LnN1YnN0cmluZyhaWzBdLmxlbmd0aCksWlswXS5yZXBsYWNlKHdyLFRlKSxVPSExKSk6di5pbmRleE9mKCI8Iik9PTAmJihaPXYubWF0Y2goaGEpLFomJih2PXYuc3Vic3RyaW5nKFpbMF0ubGVuZ3RoKSxaWzBdLnJlcGxhY2UoaGEsaGUpLFU9ITEpKSxVKXskPXYuaW5kZXhPZigiPCIpO3ZhciBjZT0kPDA/djp2LnN1YnN0cmluZygwLCQpO3Y9JDwwPyIiOnYuc3Vic3RyaW5nKCQpLHguY2hhcnMmJnguY2hhcnMoY2UpfX1lbHNlIHY9di5yZXBsYWNlKG5ldyBSZWdFeHAoIihbXFxzXFxTXSo/KTwvIitKLmxhc3QoKSsiW14+XSo+IiksZnVuY3Rpb24oZmUsd2Upe3JldHVybiB3ZT13ZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPnw8IVxbQ0RBVEFcWyhbXHNcU10qPyldXT4vZywiJDEkMiIpLHguY2hhcnMmJnguY2hhcnMod2UpLCIifSksVGUoIiIsSi5sYXN0KCkpO2lmKHY9PWVlKXRocm93IlBhcnNlIEVycm9yOiAiK3Y7ZWU9dn1UZSgpO2Z1bmN0aW9uIGhlKGZlLHdlLGx0LHB0KXtpZih3ZT13ZS50b0xvd2VyQ2FzZSgpLEZhW3dlXSlmb3IoO0oubGFzdCgpJiZWYVtKLmxhc3QoKV07KVRlKCIiLEoubGFzdCgpKTtpZihVYVt3ZV0mJkoubGFzdCgpPT13ZSYmVGUoIiIsd2UpLHB0PURhW3dlXXx8ISFwdCxwdHx8Si5wdXNoKHdlKSx4LnN0YXJ0KXt2YXIganQ9W107bHQucmVwbGFjZShUYSxmdW5jdGlvbih5dCxIZSl7dmFyIER0PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOmdhW0hlXT9IZToiIjtqdC5wdXNoKHtuYW1lOkhlLHZhbHVlOkR0LGVzY2FwZWQ6RHQucmVwbGFjZSgvKF58W15cXF0pIi9nLCckMVxcIicpfSl9KSx4LnN0YXJ0JiZ4LnN0YXJ0KHdlLGp0LHB0KX19ZnVuY3Rpb24gVGUoZmUsd2Upe2lmKHdlKWZvcih2YXIgbHQ9Si5sZW5ndGgtMTtsdD49MCYmSltsdF0hPXdlO2x0LS0pO2Vsc2UgdmFyIGx0PTA7aWYobHQ+PTApe2Zvcih2YXIgcHQ9Si5sZW5ndGgtMTtwdD49bHQ7cHQtLSl4LmVuZCYmeC5lbmQoSltwdF0pO0oubGVuZ3RoPWx0fX19ZnVuY3Rpb24geG8odil7Zm9yKHZhciB4PXt9LCQ9di5zcGxpdCgiLCIpLFU9MDtVPCQubGVuZ3RoO1UrKyl4WyRbVV1dPSEwO3JldHVybiB4fWZ1bmN0aW9uIFFvKHYpe3JldHVybiB2LnJlcGxhY2UoLzxcP3htbC4qXD8+XG4vLCIiKS5yZXBsYWNlKC88IWRvY3R5cGUuKj5cbi8sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRS4qPlxuLywiIil9ZnVuY3Rpb24gS2kodil7cmV0dXJuIHYucmVkdWNlKGZ1bmN0aW9uKHgsJCl7bGV0IFU9JC52YWx1ZSxaPSQubmFtZTtyZXR1cm4gVS5tYXRjaCgvIC8pJiZbInN0eWxlIiwic3JjIl0uaW5kZXhPZihaKT09PS0xJiYoVT1VLnNwbGl0KCIgIikpLHhbWl0/QXJyYXkuaXNBcnJheSh4W1pdKT94W1pdLnB1c2goVSk6eFtaXT1beFtaXSxVXTp4W1pdPVUseH0se30pfWZ1bmN0aW9uIG9zKHYpe3Y9UW8odik7bGV0IHg9W10sJD17bm9kZToicm9vdCIsY2hpbGRyZW46W119O3JldHVybiBqbih2LHtzdGFydDpmdW5jdGlvbihVLFosSil7bGV0IGVlPXtuYW1lOlV9O2lmKFoubGVuZ3RoIT09MCYmKGVlLmF0dHJzPUtpKFopKSxKKXtsZXQgY2U9eFswXXx8JDtjZS5jaGlsZHJlbnx8KGNlLmNoaWxkcmVuPVtdKSxjZS5jaGlsZHJlbi5wdXNoKGVlKX1lbHNlIHgudW5zaGlmdChlZSl9LGVuZDpmdW5jdGlvbihVKXtsZXQgWj14LnNoaWZ0KCk7aWYoWi5uYW1lIT09VSYmY29uc29sZS5lcnJvcigiaW52YWxpZCBzdGF0ZTogbWlzbWF0Y2ggZW5kIHRhZyIpLHgubGVuZ3RoPT09MCkkLmNoaWxkcmVuLnB1c2goWik7ZWxzZXtsZXQgSj14WzBdO0ouY2hpbGRyZW58fChKLmNoaWxkcmVuPVtdKSxKLmNoaWxkcmVuLnB1c2goWil9fSxjaGFyczpmdW5jdGlvbihVKXtsZXQgWj17dHlwZToidGV4dCIsdGV4dDpVfTtpZih4Lmxlbmd0aD09PTApJC5jaGlsZHJlbi5wdXNoKFopO2Vsc2V7bGV0IEo9eFswXTtKLmNoaWxkcmVufHwoSi5jaGlsZHJlbj1bXSksSi5jaGlsZHJlbi5wdXNoKFopfX0sY29tbWVudDpmdW5jdGlvbihVKXtsZXQgWj17bm9kZToiY29tbWVudCIsdGV4dDpVfSxKPXhbMF07Si5jaGlsZHJlbnx8KEouY2hpbGRyZW49W10pLEouY2hpbGRyZW4ucHVzaChaKX19KSwkLmNoaWxkcmVufWxldCBhcz17bm9kZXM6e3R5cGU6W0FycmF5LFN0cmluZ10sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX19LEJvPTE2LHNzPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJSaWNoVGV4dCIscHJvcHM6YXMsc2V0dXAodil7bGV0IHg9UC5nZXRDdXJyZW50SW5zdGFuY2UoKTtyZXR1cm4oKT0+e2xldCAkPXYubm9kZXM7cmV0dXJuIEN0LmlzU3RyaW5nKCQpJiYoJD1vcygkKSksUC5jcmVhdGVWTm9kZSgidS1yaWNoLXRleHQiLHt2YWx1ZTpzbygkfHxbXSx4LnJvb3Qse2RlZmF1bHRGb250U2l6ZTpCb30pfSxudWxsKX19fSk7ZnVuY3Rpb24gc28odix4LCQpe2xldCBVPVsic3BhbiIsImEiLCJpbWFnZSIsImltZyJdLFo9e2Jsb2NrcXVvdGU6d2UsYnI6eXQsZGl2OndlLGRsOndlLGgxOnB0KDIpLGgyOnB0KDEuNSksaDM6cHQoMS4xNyksaDQ6cHQoMSksaDU6cHQoLjgzKSxoNjpwdCguNjcpLGhyOndlLG9sOndlLHA6d2Usc3Ryb25nOmp0LHRhYmxlOndlLHRib2R5OndlLHRmb290OndlLHRoZWFkOndlLHVsOndlfSxKPS8mKGFtcHxndHxsdHxuYnNwfHF1b3R8YXBvcyk7L2csZWU9e2FtcDoiJiIsZ3Q6Ij4iLGx0OiI8IixuYnNwOiIgIixxdW90OiciJyxhcG9zOiInIn0sY2U9e3R5cGU6InNwYW4iLF9fdHlwZToiYnJlYWsiLGF0dHI6e3ZhbHVlOmAKYH19LGhlPXtfX2Jsb2NrOiEwLF9fYnJlYWs6ITAsY2hpbGRyZW46W119LFRlPW51bGw7ZnVuY3Rpb24gZmUoZHQpe2xldCBybj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGR0LmF0dHJzKXtsZXQgTG49KGR0LmF0dHJzLmNsYXNzfHwiIikuc3BsaXQoIiAiKTtPYmplY3QuYXNzaWduKHJuLFAucGFyc2VDbGFzc0xpc3QoTG4seCksT28oZHQuYXR0cnMuc3R5bGV8fCIiKSl9aWYoZHQubmFtZT09PSJpbWcifHxkdC5uYW1lPT09ImltYWdlIil7bGV0IExuPWR0LmF0dHJzO3JuLndpZHRoPXJuLndpZHRofHxMbi53aWR0aCxybi5oZWlnaHQ9cm4uaGVpZ2h0fHxMbi5oZWlnaHR9cmV0dXJuIHJufWZ1bmN0aW9uIHdlKGR0KXtyZXR1cm4gZHQuX19ibG9jaz0hMCxkdH1mdW5jdGlvbiBsdChkdCxybil7cmV0dXJuIGR0LnN0eWxlJiYhZHQuc3R5bGUuZm9udFNpemUmJihkdC5zdHlsZS5mb250U2l6ZT0kLmRlZmF1bHRGb250U2l6ZSpybiksd2UoanQoZHQpKX1mdW5jdGlvbiBwdChkdCl7cmV0dXJuIGZ1bmN0aW9uKHJuKXtyZXR1cm4gbHQocm4sZHQpfX1mdW5jdGlvbiBqdChkdCl7cmV0dXJuIGR0LnN0eWxlJiYhZHQuc3R5bGUuZm9udFdlaWdodCYmKGR0LnN0eWxlLmZvbnRXZWlnaHQ9ImJvbGQiKSxkdH1mdW5jdGlvbiB5dChkdCl7cmV0dXJuIGR0Ll9fdmFsdWU9IiAiLHdlKGR0KX1mdW5jdGlvbiBIZShkdCl7cmV0dXJuIGR0LnJlcGxhY2UoSixmdW5jdGlvbihybixMbil7cmV0dXJuIGVlW0xuXX0pfWZ1bmN0aW9uIER0KGR0KXtsZXQgcm49KGR0Lm5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpLExuPXJuLEp0PVpbcm5dO1UuaW5kZXhPZihybik9PT0tMSYmKHJuPSJzcGFuIikscm49PT0iaW1nIiYmKHJuPSJpbWFnZSIpO2xldCB6dD17dHlwZTpybixfX3R5cGU6TG4sYXR0cjpPYmplY3QuY3JlYXRlKG51bGwpfTtyZXR1cm4oZHQudHlwZT09PSJ0ZXh0Inx8ZHQudGV4dCkmJih6dC5fX3ZhbHVlPXp0LmF0dHIudmFsdWU9SGUoKGR0LnRleHR8fCIiKS50cmltKCkpKSxkdC5hdHRycyYmT2JqZWN0LmtleXMoZHQuYXR0cnMpLmZvckVhY2goJHQ9PnskdCE9PSJjbGFzcyImJiR0IT09InN0eWxlIiYmKHp0LmF0dHJbJHRdPWR0LmF0dHJzWyR0XSl9KSx6dC5zdHlsZT1mZShkdCksSnQmJkp0KHp0KSwoaGUuX19ibG9ja3x8enQuX19ibG9jaykmJihUZXx8KGhlLmNoaWxkcmVuLnB1c2goY2UpLFRlPVtoZSxjZV0pKSxoZT16dCwoaGUuX192YWx1ZXx8aGUudHlwZT09PSJpbWFnZSImJmhlLmF0dHIuc3JjKSYmKFRlPW51bGwpLHp0LmNoaWxkcmVuPXZuKGR0LmNoaWxkcmVuKSxoZT16dCxoZS5fX2Jsb2NrJiZoZS5zdHlsZS5oZWlnaHQmJiEvXjAocHgpPyQvLnRlc3QoaGUuc3R5bGUuaGVpZ2h0KSYmKFRlPW51bGwpLHp0fWZ1bmN0aW9uIHZuKGR0KXtyZXR1cm4gQ3QuaXNBcnJheShkdCk/ZHQubWFwKHJuPT5EdChybikpOltdfWxldCBxdD12bih2KTtpZihUZSl7bGV0W2R0LHJuXT1UZSxMbj1kdC5jaGlsZHJlbixKdD1Mbi5pbmRleE9mKHJuKTtMbi5zcGxpY2UoSnQsMSl9cmV0dXJuIHF0fWxldCBoaT17fTtmdW5jdGlvbiBPaSh2LHgsJCl7bGV0e2FkcGlkOlUsd2lkdGg6Wn09dixKPVUrIi0iK1osZWU9aGlbSl07aWYoZWUmJmVlLmxlbmd0aD4wKXt4KGVlLnNwbGljZSgwLDEpWzBdKTtyZXR1cm59aC5hZC5nZXRBZHModixjZT0+e2xldCBoZT1jZS5hZHM7eChoZS5zcGxpY2UoMCwxKVswXSksaGlbSl09ZWU/ZWUuY29uY2F0KGhlKTpoZX0sY2U9PnskKHtlcnJDb2RlOmNlLmNvZGUsZXJyTXNnOmNlLm1lc3NhZ2V9KX0pfWxldCBaaT17YWRwaWQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6IiJ9LGRhdGE6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHdpZHRoOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjaGFubmVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sZ2k9e2xvYWQ6ImxvYWQiLGNsb3NlOiJjbG9zZSIsZXJyb3I6ImVycm9yIixkb3dubG9hZGNoYW5nZToiZG93bmxvYWRjaGFuZ2UifSxocj1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQWQiLHByb3BzOlppLGVtaXRzOltnaS5sb2FkLGdpLmNsb3NlLGdpLmVycm9yLGdpLmRvd25sb2FkY2hhbmdlXSxzZXR1cCh2LHtlbWl0Onh9KXtsZXQgJD1QLnJlZihudWxsKSxVPWZyKCQseCksWj11cigpO1Aud2F0Y2goKCk9PnYuYWRwaWQsZWU9PnskYShaLHYsVSl9KSxQLndhdGNoKCgpPT52LmRhdGEsZWU9PntaLmRhdGE9ZWV9KSxQLm9uTW91bnRlZCgoKT0+e2YoKCk9Pnt4bigkLnZhbHVlKS50aGVuKCh7d2lkdGg6ZWV9KT0+e1oud2lkdGg9ZWU9PT0wPy0xOmVlLCRhKFosdixVKX0pfSw1MCl9KTtsZXQgSj17b25Eb3dubG9hZGNoYW5nZShlZSl7VShnaS5kb3dubG9hZGNoYW5nZSxlZSl9LG9uRGlzbGlrZShlZSl7VShnaS5jbG9zZSxlZSl9fTtyZXR1cm4oKT0+UC5jcmVhdGVWTm9kZSgidS1hZCIsUC5tZXJnZVByb3BzKHtyZWY6JH0se2RhdGE6Wi5kYXRhLHJlbmRlcmluZzohMH0sSiksbnVsbCl9fSk7ZnVuY3Rpb24gdXIodil7bGV0IHg9UC5yZWYoIiIpO3JldHVybiBQLnJlYWN0aXZlKHt3aWR0aDowLGRhdGE6eH0pfWZ1bmN0aW9uICRhKHYseCwkKXtPaSh7YWRwaWQ6eC5hZHBpZCx3aWR0aDp2LndpZHRofSxVPT57di5kYXRhPVUsJChnaS5sb2FkLHt9KX0sVT0+eyQoZ2kuZXJyb3IsVSl9KX1sZXQgSGE9e307ZnVuY3Rpb24gWGkodix4LCQsVSxaKXtsZXQgSj12KyItIit4LGVlPUhhW0pdO2lmKGVlJiZlZS5sZW5ndGg+MCl7VShlZS5zcGxpY2UoMCwxKVswXSk7cmV0dXJufWguYWQuZ2V0RHJhd0Fkcyh7YWRwaWQ6U3RyaW5nKHYpLGNvdW50OjMsd2lkdGg6eH0sY2U9PntsZXQgaGU9Y2UuYWRzO1UoaGUuc3BsaWNlKDAsMSlbMF0pLEhhW0pdPWVlP2VlLmNvbmNhdChoZSk6aGV9LGNlPT57Wih7ZXJyQ29kZTpjZS5jb2RlLGVyck1zZzpjZS5tZXNzYWdlfSl9KX1sZXQgbG89e2FkcGlkOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OiIifSxkYXRhOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSx3aWR0aDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGNvPXtsb2FkOiJsb2FkIixjbG9zZToiY2xvc2UiLGVycm9yOiJlcnJvciJ9LGxzPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJBZERyYXciLHByb3BzOmxvLGVtaXRzOltjby5sb2FkLGNvLmNsb3NlLGNvLmVycm9yXSxzZXR1cCh2LHtlbWl0Onh9KXtsZXQgJD1QLnJlZihudWxsKSxVPWZyKCQseCksWj1wYSgpO1Aud2F0Y2goKCk9PnYuYWRwaWQsZWU9PntNbyhaLHYsVSl9KSxQLndhdGNoKCgpPT52LmRhdGEsZWU9PntaLmRhdGE9ZWV9KTtsZXQgSj17b25EaXNsaWtlKGVlKXtVKGNvLmNsb3NlLGVlKX19O3JldHVybiBQLm9uTW91bnRlZCgoKT0+e2YoKCk9Pnt4bigkLnZhbHVlKS50aGVuKCh7d2lkdGg6ZWUsaGVpZ2h0OmNlfSk9PntaLndpZHRoPWVlPT09MD8tMTplZSxaLmhlaWdodD1jZT09PTA/LTE6Y2UsTW8oWix2LFUpfSl9LDUwKX0pLCgpPT57bGV0e2RhdGE6ZWV9PVo7cmV0dXJuIFAuY3JlYXRlVk5vZGUoInUtYWQtZHJhdyIsUC5tZXJnZVByb3BzKHtyZWY6JH0se2RhdGE6ZWUscmVuZGVyaW5nOiEwfSxKKSxudWxsKX19fSk7ZnVuY3Rpb24gcGEodil7bGV0IHg9UC5yZWYoIiIpO3JldHVybiBQLnJlYWN0aXZlKHt3aWR0aDowLGhlaWdodDowLGRhdGE6eH0pfWZ1bmN0aW9uIE1vKHYseCwkKXtYaSh4LmFkcGlkLHYud2lkdGgsdi5oZWlnaHQsVT0+e3YuZGF0YT1VLCQoY28ubG9hZCx7fSl9LFU9PnskKGNvLmVycm9yLFUpfSl9cmV0dXJue05hdmlnYXRvcjpFaSxMYWJlbDpfbixCdXR0b246cm8sTW92YWJsZUFyZWE6VHIsTW92YWJsZVZpZXc6RXIsUHJvZ3Jlc3M6bmksUGlja2VyVmlldzpMcixQaWNrZXJWaWV3Q29sdW1uOk1pLFBpY2tlcjpycixVU2xpZGVyOmVyLFN3aXRjaDpXcixDaGVja2JveDp4ZSxDaGVja2JveEdyb3VwOmN0LFJhZGlvOlJ0LFJhZGlvR3JvdXA6YW8sRm9ybTpzZSxJY29uOlNyLFN3aXBlcjpSbyxTd2lwZXJJdGVtOmlzLFJpY2hUZXh0OnNzLEFkOmhyLEFkRHJhdzpsc319KE4sRGUsTnQpO3JldHVybiBUdH1mdW5jdGlvbiBGSShmLHMpe2xldHtVbmlTaGFyZWQ6cCxWdWU6d309cztmdW5jdGlvbiBOKGgsRSxSKXtsZXQgRGU9aC4kW0VdO3JldHVybiBEZSYmcC5pbnZva2VBcnJheUZucyhEZSxSKX1sZXQgeT1mLnNldHVwO3JldHVybiBmLmluaGVyaXRBdHRycz0hMSxmLnNldHVwPShoLEUpPT57bGV0e2F0dHJzOntfX3BhZ2VJZDpSLF9fcGFnZVBhdGg6RGUsX19wYWdlUXVlcnk6TnR9fT1FLFV0PXMuX191bmlSb3V0ZXMuZmluZChDdD0+Q3QubWV0YS5yb3V0ZT09PURlKSxUdD13LmdldEN1cnJlbnRJbnN0YW5jZSgpLFA9VHQucHJveHk7aWYoVXQmJihVdC5tZXRhLmlzU3ViTlZ1ZXx8VkkoUCxzLHtfX3BhZ2VJZDpSLF9fcGFnZVBhdGg6RGV9KSksdy5vbk1vdW50ZWQoKCk9Pnt3Lm5leHRUaWNrKCgpPT57TihQLHAuT05fUkVBRFkpfSksVHQub25QYWdlU2Nyb2xsJiZQLiRlbC5hZGRFdmVudCgic2Nyb2xsIixDdD0+e0N0LnNjcm9sbFRvcD1DdC5kZXRhaWwuc2Nyb2xsVG9wLE4oUCxwLk9OX1BBR0VfU0NST0xMLEN0KX0pLFR0Lm9uUmVhY2hCb3R0b20mJlAuJGVsLmFkZEV2ZW50KCJzY3JvbGx0b2xvd2VyIixDdD0+e04oUCxwLk9OX1JFQUNIX0JPVFRPTSxDdCl9KX0pLHcub25CZWZvcmVVbm1vdW50KCgpPT57TihQLHAuT05fVU5MT0FEKX0pLHkpcmV0dXJuIHkoTnQsRSl9LGZ9ZnVuY3Rpb24gVkkoZixzLHtfX3BhZ2VJZDpwLF9fcGFnZVBhdGg6d30pe2xldCBOPXMuZ2V0Q3VycmVudFBhZ2VzKCkseT1OW04ubGVuZ3RoLTFdO2lmKHkmJnkuX19zZXR1cCl5Ll9fc2V0dXAoZix5KTtlbHNle2xldCBoPSIvIit3O3JldHVybiBzLl9fcmVnaXN0ZXJQYWdlKHt1cmw6aCxwYXRoOmgscXVlcnk6e30sb3BlblR5cGU6ImxhdW5jaCIsd2Vidmlldzp7aWQ6cCsiIn0sbnZ1ZVBhZ2VWbTpmfSl9fXZhciBNbD17fSxMcDtmdW5jdGlvbiBEcChmKXtMcD1mfXZhciBudTtmdW5jdGlvbiBVSShmKXtpZihudSlyZXR1cm4gbnU7bGV0IHM9bmV3IGYuRW1pdHRlcjtyZXR1cm4gbnU9e29uKHAsdyl7cmV0dXJuIHMub24ocCx3KX0sb25jZShwLHcpe3JldHVybiBzLm9uY2UocCx3KX0sb2ZmKHAsdyl7cmV0dXJuIHMub2ZmKHAsdyl9LGVtaXQocCwuLi53KXtyZXR1cm4gcy5lbWl0KHAsLi4udyl9fSxudX1mdW5jdGlvbiAkSShmKXtyZXR1cm4ocyxwLHcpPT57bGV0e252dWU6Tn09cCx5PXR1KGYscCk7cC5WdWU9eSxNbFtzXT17aW5zdGFuY2VJZDpzLGNvbmZpZzpOLmNvbmZpZyxkb2N1bWVudDpOLmRvY3VtZW50LGRhdGE6d307bGV0e2NyZWF0ZUFwcDpofT15O3kuY3JlYXRlVnVlQXBwPXkuY3JlYXRlQXBwPShFLFIpPT4ocC5fX3VuaUNvbmZpZy5zdHlsZXM9RS5zdHlsZXN8fFtdLGgoRSxSKS51c2UoSEkscyxwKSkseS5jcmVhdGVQYWdlQXBwPShFLFIpPT57RkkoRSxwKTtsZXQgRGU9Ui4kc3RvcmU7ZGVsZXRlIFIuJHN0b3JlO2xldCBOdD1oKEUsUik7cmV0dXJuIERlJiZOdC51c2UoRGUpLE50LnVzZSh6SSx5LHMscCl9fX12YXIgSEk9e2luc3RhbGwoZixzLHApe2RjKHApLmluaXRBcHAoZiksakkoZixzLHApfX07ZnVuY3Rpb24gakkoZixzLHApe2xldHttb3VudDp3fT1mLE49TWxbc107cmV0dXJuIGYubW91bnQ9eT0+e2xldCBoPXk9PT0iI2FwcCIsRT1OLmFwcD13KEZwKE4uZG9jdW1lbnQse2lzUm9vdDpofSkpO3JldHVybiBoJiZwLl9fcmVnaXN0ZXJBcHAoRSksRX0sZn12YXIgekk9e2luc3RhbGwoZixzLHAsdyl7bGV0e3dlZXg6TixwbHVzOnksQnJvYWRjYXN0Q2hhbm5lbDpoLFZ1ZVNoYXJlZDpFLFVuaVNoYXJlZDpSLGdldEN1cnJlbnRQYWdlczpEZSxzZXRUaW1lb3V0Ok50LGNsZWFyVGltZW91dDpVdCxfX3VuaUNvbmZpZzpUdH09dztmLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRyZXF1aXJlTmF0aXZlUGx1Z2luPU4ucmVxdWlyZU1vZHVsZTtsZXQgUD1ESSh7dW5pOkxwLFZ1ZTpzLHdlZXg6TixwbHVzOnksQnJvYWRjYXN0Q2hhbm5lbDpoLFVuaVZpZXdKU0JyaWRnZTpVSShSKSxWdWVTaGFyZWQ6RSxVbmlTaGFyZWQ6UixnZXRDdXJyZW50UGFnZXM6RGUsc2V0VGltZW91dDpOdCxjbGVhclRpbWVvdXQ6VXQsX191bmlDb25maWc6VHR9KTtPYmplY3Qua2V5cyhQKS5mb3JFYWNoKEN0PT57Zi5jb21wb25lbnQocy5oeXBoZW5hdGUoQ3QpLFBbQ3RdKX0pLGRjKHcpLmluaXRBcHAoZiksV0koZixwLHcpfX07ZnVuY3Rpb24gV0koZixzLHtudnVlOnB9KXtsZXR7Y29uZmlnOntjb21waWxlck9wdGlvbnM6d30sbW91bnQ6Tn09Zjt3LmlzQ3VzdG9tRWxlbWVudD1oPT4hIXAuc3VwcG9ydHMoYEBjb21wb25lbnQvJHtofWApO2xldCB5PU1sW3NdO3JldHVybiBmLm1vdW50PWg9PntsZXQgRT1oPT09IiNyb290IixSPXkuYXBwPU4oRnAoeS5kb2N1bWVudCx7aXNSb290OkV9KSk7aWYoRSl0cnl7cC5kb2N1bWVudC50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoiY3JlYXRlRmluaXNoIn0sW10pfWNhdGNoKERlKXt9cmV0dXJuIFJ9LGZ9ZnVuY3Rpb24gRnAoZix7aXNSb290OnN9KXtpZihzKXJldHVybiBmLmRvY3VtZW50RWxlbWVudDtsZXQgcD1mLmNyZWF0ZUNvbW1lbnQoInJvb3QiKTtyZXR1cm4gZi5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQocCkscH1mdW5jdGlvbiBWcChmKXtsZXQgcz1NbFtmXTtpZihzJiZzLmFwcCYmcy5kb2N1bWVudCl7dHJ5e3MuYXBwLiQuYXBwQ29udGV4dC5hcHAudW5tb3VudCgpLHMuZG9jdW1lbnQuZGVzdHJveSgpfWNhdGNoKHApe31kZWxldGUgcy5kb2N1bWVudCxkZWxldGUgcy5hcHB9ZGVsZXRlIE1sW2ZdfWZ1bmN0aW9uIFVwKGYpe2xldCBzPU1sW2ZdO2lmKCFzfHwhcy5hcHApcmV0dXJuIG5ldyBFcnJvcihgcmVmcmVzaEluc3RhbmNlOiBpbnN0YW5jZSAke2Z9IG5vdCBmb3VuZCFgKTtzLmRvY3VtZW50LnRhc2tDZW50ZXIuc2VuZCgiZG9tIix7YWN0aW9uOiJyZWZyZXNoRmluaXNoIn0sW10pfWZ1bmN0aW9uIEdJKGYscyl7bGV0e1VuaVNoYXJlZDpwLFZ1ZVNoYXJlZDp3LFZ1ZVJlYWN0aXZpdHk6Tn09Zjt2YXIgeT1mdW5jdGlvbihoLEUsUixEZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE50KGEpe31mdW5jdGlvbiBVdChhLHUpe31mdW5jdGlvbiBUdChhLHUsbSxTKXt2YXIgSTt0cnl7ST1TP2EoLi4uUyk6YSgpfWNhdGNoKE8pe0N0KE8sdSxtKX1yZXR1cm4gSX1mdW5jdGlvbiBQKGEsdSxtLFMpe2lmKEUuaXNGdW5jdGlvbihhKSl7dmFyIEk9VHQoYSx1LG0sUyk7cmV0dXJuIEkmJkUuaXNQcm9taXNlKEkpJiZJLmNhdGNoKFc9PntDdChXLHUsbSl9KSxJfWZvcih2YXIgTz1bXSxGPTA7RjxhLmxlbmd0aDtGKyspTy5wdXNoKFAoYVtGXSx1LG0sUykpO3JldHVybiBPfWZ1bmN0aW9uIEN0KGEsdSxtKXtpZih1JiZ1LnZub2RlLHUpe2Zvcih2YXIgUz11LnBhcmVudCxJPXUucHJveHksTz1tO1M7KXt2YXIgRj1TLmVjO2lmKEYpe2Zvcih2YXIgVz0wO1c8Ri5sZW5ndGg7VysrKWlmKEZbV10oYSxJLE8pPT09ITEpcmV0dXJufVM9Uy5wYXJlbnR9dmFyIEc9dS5hcHBDb250ZXh0LmNvbmZpZy5lcnJvckhhbmRsZXI7aWYoRyl7VHQoRyxudWxsLDEwLFthLEksT10pO3JldHVybn19Um4oYSl9ZnVuY3Rpb24gUm4oYSx1LG0pe2NvbnNvbGUuZXJyb3IoYSl9dmFyIG90PSExLHo9ITEsSz1bXSxtbj0wLGhuPVtdLHduPW51bGwsWG49MCxzaT1Qcm9taXNlLnJlc29sdmUoKSxFaT1udWxsO2Z1bmN0aW9uIFhyKGEpe3ZhciB1PUVpfHxzaTtyZXR1cm4gYT91LnRoZW4odGhpcz9hLmJpbmQodGhpcyk6YSk6dX1mdW5jdGlvbiBtcihhKXtmb3IodmFyIHU9bW4rMSxtPUsubGVuZ3RoO3U8bTspe3ZhciBTPXUrbT4+PjEsST1qZShLW1NdKTtJPGE/dT1TKzE6bT1TfXJldHVybiB1fWZ1bmN0aW9uIENuKGEpeyghSy5sZW5ndGh8fCFLLmluY2x1ZGVzKGEsb3QmJmEuYWxsb3dSZWN1cnNlP21uKzE6bW4pKSYmKGEuaWQ9PW51bGw/Sy5wdXNoKGEpOksuc3BsaWNlKG1yKGEuaWQpLDAsYSksX3IoKSl9ZnVuY3Rpb24gX3IoKXshb3QmJiF6JiYoej0hMCxFaT1zaS50aGVuKE90KSl9ZnVuY3Rpb24gJHIoYSl7dmFyIHU9Sy5pbmRleE9mKGEpO3U+bW4mJksuc3BsaWNlKHUsMSl9ZnVuY3Rpb24gUXIoYSl7RS5pc0FycmF5KGEpP2huLnB1c2goLi4uYSk6KCF3bnx8IXduLmluY2x1ZGVzKGEsYS5hbGxvd1JlY3Vyc2U/WG4rMTpYbikpJiZobi5wdXNoKGEpLF9yKCl9ZnVuY3Rpb24geWkoYSl7Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpvdD9tbisxOjA7dTxLLmxlbmd0aDt1Kyspe3ZhciBtPUtbdV07bSYmbS5wcmUmJihLLnNwbGljZSh1LDEpLHUtLSxtKCkpfX1mdW5jdGlvbiBrbihhKXtpZihobi5sZW5ndGgpe3ZhciB1PVsuLi5uZXcgU2V0KGhuKV07aWYoaG4ubGVuZ3RoPTAsd24pe3duLnB1c2goLi4udSk7cmV0dXJufWZvcih3bj11LHduLnNvcnQoKG0sUyk9PmplKG0pLWplKFMpKSxYbj0wO1huPHduLmxlbmd0aDtYbisrKXduW1huXSgpO3duPW51bGwsWG49MH19dmFyIGplPWE9PmEuaWQ9PW51bGw/MS8wOmEuaWQsbnQ9KGEsdSk9Pnt2YXIgbT1qZShhKS1qZSh1KTtpZihtPT09MCl7aWYoYS5wcmUmJiF1LnByZSlyZXR1cm4tMTtpZih1LnByZSYmIWEucHJlKXJldHVybiAxfXJldHVybiBtfTtmdW5jdGlvbiBPdChhKXt6PSExLG90PSEwLEsuc29ydChudCk7dmFyIHU9RS5OT09QO3RyeXtmb3IobW49MDttbjxLLmxlbmd0aDttbisrKXt2YXIgbT1LW21uXTttJiZtLmFjdGl2ZSE9PSExJiZUdChtLG51bGwsMTQpfX1maW5hbGx5e21uPTAsSy5sZW5ndGg9MCxrbigpLG90PSExLEVpPW51bGwsKEsubGVuZ3RofHxobi5sZW5ndGgpJiZPdCgpfX1oLmRldnRvb2xzPXZvaWQgMDt2YXIgbm49W107ZnVuY3Rpb24gTm4oYSx1KXt2YXIgbSxTO2lmKGguZGV2dG9vbHM9YSxoLmRldnRvb2xzKWguZGV2dG9vbHMuZW5hYmxlZD0hMCxubi5mb3JFYWNoKE89Pnt2YXJ7ZXZlbnQ6RixhcmdzOld9PU87cmV0dXJuIGguZGV2dG9vbHMuZW1pdChGLC4uLlcpfSksbm49W107ZWxzZSBpZih0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LkhUTUxFbGVtZW50JiYhKChTPShtPXdpbmRvdy5uYXZpZ2F0b3IpPT09bnVsbHx8bT09PXZvaWQgMD92b2lkIDA6bS51c2VyQWdlbnQpPT09bnVsbHx8Uz09PXZvaWQgMD92b2lkIDA6Uy5pbmNsdWRlcygianNkb20iKSkpe3ZhciBJPXUuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz11Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdO0kucHVzaChPPT57Tm4oTyx1KX0pLHNldFRpbWVvdXQoKCk9PntoLmRldnRvb2xzfHwodS5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPW51bGwsbm49W10pfSwzZTMpfWVsc2Ugbm49W119ZnVuY3Rpb24gdW4oYSx1KXtpZighYS5pc1VubW91bnRlZCl7Zm9yKHZhciBtPWEudm5vZGUucHJvcHN8fEUuRU1QVFlfT0JKLFM9YXJndW1lbnRzLmxlbmd0aCxJPW5ldyBBcnJheShTPjI/Uy0yOjApLE89MjtPPFM7TysrKUlbTy0yXT1hcmd1bWVudHNbT107dmFyIEY9SSxXPXUuc3RhcnRzV2l0aCgidXBkYXRlOiIpLEc9VyYmdS5zbGljZSg3KTtpZihHJiZHIGluIG0pe3ZhciBsZT0iIi5jb25jYXQoRz09PSJtb2RlbFZhbHVlIj8ibW9kZWwiOkcsIk1vZGlmaWVycyIpLHtudW1iZXI6emUsdHJpbTppdH09bVtsZV18fEUuRU1QVFlfT0JKO2l0JiYoRj1JLm1hcChfdD0+RS5pc1N0cmluZyhfdCk/X3QudHJpbSgpOl90KSksemUmJihGPUkubWFwKEUubG9vc2VUb051bWJlcikpfXZhciBkZSxHZT1tW2RlPUUudG9IYW5kbGVyS2V5KHUpXXx8bVtkZT1FLnRvSGFuZGxlcktleShFLmNhbWVsaXplKHUpKV07IUdlJiZXJiYoR2U9bVtkZT1FLnRvSGFuZGxlcktleShFLmh5cGhlbmF0ZSh1KSldKSxHZSYmUChHZSxhLDYsRik7dmFyIHFlPW1bZGUrIk9uY2UiXTtpZihxZSl7aWYoIWEuZW1pdHRlZClhLmVtaXR0ZWQ9e307ZWxzZSBpZihhLmVtaXR0ZWRbZGVdKXJldHVybjthLmVtaXR0ZWRbZGVdPSEwLFAocWUsYSw2LEYpfX19ZnVuY3Rpb24gYXIoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsUz11LmVtaXRzQ2FjaGUsST1TLmdldChhKTtpZihJIT09dm9pZCAwKXJldHVybiBJO3ZhciBPPWEuZW1pdHMsRj17fSxXPSExO2lmKCFFLmlzRnVuY3Rpb24oYSkpe3ZhciBHPWxlPT57dmFyIHplPWFyKGxlLHUsITApO3plJiYoVz0hMCxFLmV4dGVuZChGLHplKSl9OyFtJiZ1Lm1peGlucy5sZW5ndGgmJnUubWl4aW5zLmZvckVhY2goRyksYS5leHRlbmRzJiZHKGEuZXh0ZW5kcyksYS5taXhpbnMmJmEubWl4aW5zLmZvckVhY2goRyl9cmV0dXJuIU8mJiFXPyhFLmlzT2JqZWN0KGEpJiZTLnNldChhLG51bGwpLG51bGwpOihFLmlzQXJyYXkoTyk/Ty5mb3JFYWNoKGxlPT5GW2xlXT1udWxsKTpFLmV4dGVuZChGLE8pLEUuaXNPYmplY3QoYSkmJlMuc2V0KGEsRiksRil9ZnVuY3Rpb24gVm4oYSx1KXtyZXR1cm4hYXx8IUUuaXNPbih1KT8hMToodT11LnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywiIiksRS5oYXNPd24oYSx1WzBdLnRvTG93ZXJDYXNlKCkrdS5zbGljZSgxKSl8fEUuaGFzT3duKGEsRS5oeXBoZW5hdGUodSkpfHxFLmhhc093bihhLHUpKX12YXIgUG49bnVsbCxfbj1udWxsO2Z1bmN0aW9uIGJyKGEpe3ZhciB1PVBuO3JldHVybiBQbj1hLF9uPWEmJmEudHlwZS5fX3Njb3BlSWR8fG51bGwsdX1mdW5jdGlvbiBlaShhKXtfbj1hfWZ1bmN0aW9uIGdvKCl7X249bnVsbH12YXIgZmE9YT0+QW87ZnVuY3Rpb24gQW8oYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlBuO2lmKCF1fHxhLl9uKXJldHVybiBhO3ZhciBtPWZ1bmN0aW9uKCl7bS5fZCYmanQoLTEpO3ZhciBTPWJyKHUpLEk7dHJ5e0k9YSguLi5hcmd1bWVudHMpfWZpbmFsbHl7YnIoUyksbS5fZCYmanQoMSl9cmV0dXJuIEl9O3JldHVybiBtLl9uPSEwLG0uX2M9ITAsbS5fZD0hMCxtfWZ1bmN0aW9uIEpvKCl7fWZ1bmN0aW9uIEtvKGEpe3Zhcnt0eXBlOnUsdm5vZGU6bSxwcm94eTpTLHdpdGhQcm94eTpJLHByb3BzOk8scHJvcHNPcHRpb25zOltGXSxzbG90czpXLGF0dHJzOkcsZW1pdDpsZSxyZW5kZXI6emUscmVuZGVyQ2FjaGU6aXQsZGF0YTpkZSxzZXR1cFN0YXRlOkdlLGN0eDpxZSxpbmhlcml0QXR0cnM6X3R9PWEsYXQsU2UsYmU9YnIoYSk7dHJ5e2lmKG0uc2hhcGVGbGFnJjQpe3ZhciBDZT1JfHxTO2F0PXpuKHplLmNhbGwoQ2UsQ2UsaXQsTyxHZSxkZSxxZSkpLFNlPUd9ZWxzZXt2YXIgc3Q9dTthdD16bihzdC5sZW5ndGg+MT9zdChPLHthdHRyczpHLHNsb3RzOlcsZW1pdDpsZX0pOnN0KE8sbnVsbCkpLFNlPXUucHJvcHM/RzpScihHKX19Y2F0Y2gobCl7VGUubGVuZ3RoPTAsQ3QobCxhLDEpLGF0PSR0KGNlKX12YXIgRmU9YXQ7aWYoU2UmJl90IT09ITEpe3ZhciBQdD1PYmplY3Qua2V5cyhTZSkse3NoYXBlRmxhZzppfT1GZTtQdC5sZW5ndGgmJmkmKDF8NikmJihGJiZQdC5zb21lKEUuaXNNb2RlbExpc3RlbmVyKSYmKFNlPXppKFNlLEYpKSxGZT1waShGZSxTZSkpfXJldHVybiBtLmRpcnMmJihGZT1waShGZSksRmUuZGlycz1GZS5kaXJzP0ZlLmRpcnMuY29uY2F0KG0uZGlycyk6bS5kaXJzKSxtLnRyYW5zaXRpb24mJihGZS50cmFuc2l0aW9uPW0udHJhbnNpdGlvbiksYXQ9RmUsYnIoYmUpLGF0fWZ1bmN0aW9uIFJpKGEpe2Zvcih2YXIgdSxtPTA7bTxhLmxlbmd0aDttKyspe3ZhciBTPWFbbV07aWYodm4oUykpe2lmKFMudHlwZSE9PWNlfHxTLmNoaWxkcmVuPT09InYtaWYiKXtpZih1KXJldHVybjt1PVN9fWVsc2UgcmV0dXJufXJldHVybiB1fXZhciBScj1hPT57dmFyIHU7Zm9yKHZhciBtIGluIGEpKG09PT0iY2xhc3MifHxtPT09InN0eWxlInx8RS5pc09uKG0pKSYmKCh1fHwodT17fSkpW21dPWFbbV0pO3JldHVybiB1fSx6aT0oYSx1KT0+e3ZhciBtPXt9O2Zvcih2YXIgUyBpbiBhKSghRS5pc01vZGVsTGlzdGVuZXIoUyl8fCEoUy5zbGljZSg5KWluIHUpKSYmKG1bU109YVtTXSk7cmV0dXJuIG19O2Z1bmN0aW9uIFdpKGEsdSxtKXt2YXJ7cHJvcHM6UyxjaGlsZHJlbjpJLGNvbXBvbmVudDpPfT1hLHtwcm9wczpGLGNoaWxkcmVuOlcscGF0Y2hGbGFnOkd9PXUsbGU9Ty5lbWl0c09wdGlvbnM7aWYodS5kaXJzfHx1LnRyYW5zaXRpb24pcmV0dXJuITA7aWYobSYmRz49MCl7aWYoRyYxMDI0KXJldHVybiEwO2lmKEcmMTYpcmV0dXJuIFM/cm8oUyxGLGxlKTohIUY7aWYoRyY4KWZvcih2YXIgemU9dS5keW5hbWljUHJvcHMsaXQ9MDtpdDx6ZS5sZW5ndGg7aXQrKyl7dmFyIGRlPXplW2l0XTtpZihGW2RlXSE9PVNbZGVdJiYhVm4obGUsZGUpKXJldHVybiEwfX1lbHNlIHJldHVybihJfHxXKSYmKCFXfHwhVy4kc3RhYmxlKT8hMDpTPT09Rj8hMTpTP0Y/cm8oUyxGLGxlKTohMDohIUY7cmV0dXJuITF9ZnVuY3Rpb24gcm8oYSx1LG0pe3ZhciBTPU9iamVjdC5rZXlzKHUpO2lmKFMubGVuZ3RoIT09T2JqZWN0LmtleXMoYSkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgST0wO0k8Uy5sZW5ndGg7SSsrKXt2YXIgTz1TW0ldO2lmKHVbT10hPT1hW09dJiYhVm4obSxPKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpbyhhLHUpe2Zvcih2YXJ7dm5vZGU6bSxwYXJlbnQ6U309YTtTJiZTLnN1YlRyZWU9PT1tOykobT1TLnZub2RlKS5lbD11LFM9Uy5wYXJlbnR9dmFyIGxpPWE9PmEuX19pc1N1c3BlbnNlLHBvPXtuYW1lOiJTdXNwZW5zZSIsX19pc1N1c3BlbnNlOiEwLHByb2Nlc3MoYSx1LG0sUyxJLE8sRixXLEcsbGUpe2E9PW51bGw/VHIodSxtLFMsSSxPLEYsVyxHLGxlKTpjaShhLHUsbSxTLEksRixXLEcsbGUpfSxoeWRyYXRlOnZvLGNyZWF0ZTpmcixub3JtYWxpemU6Wm99LE9vPXBvO2Z1bmN0aW9uIHhuKGEsdSl7dmFyIG09YS5wcm9wcyYmYS5wcm9wc1t1XTtFLmlzRnVuY3Rpb24obSkmJm0oKX1mdW5jdGlvbiBUcihhLHUsbSxTLEksTyxGLFcsRyl7dmFye3A6bGUsbzp7Y3JlYXRlRWxlbWVudDp6ZX19PUcsaXQ9emUoImRpdiIpLGRlPWEuc3VzcGVuc2U9ZnIoYSxJLFMsdSxpdCxtLE8sRixXLEcpO2xlKG51bGwsZGUucGVuZGluZ0JyYW5jaD1hLnNzQ29udGVudCxpdCxudWxsLFMsZGUsTyxGKSxkZS5kZXBzPjA/KHhuKGEsIm9uUGVuZGluZyIpLHhuKGEsIm9uRmFsbGJhY2siKSxsZShudWxsLGEuc3NGYWxsYmFjayx1LG0sUyxudWxsLE8sRiksc3IoZGUsYS5zc0ZhbGxiYWNrKSk6ZGUucmVzb2x2ZSgpfWZ1bmN0aW9uIGNpKGEsdSxtLFMsSSxPLEYsVyxHKXt2YXJ7cDpsZSx1bTp6ZSxvOntjcmVhdGVFbGVtZW50Oml0fX09RyxkZT11LnN1c3BlbnNlPWEuc3VzcGVuc2U7ZGUudm5vZGU9dSx1LmVsPWEuZWw7dmFyIEdlPXUuc3NDb250ZW50LHFlPXUuc3NGYWxsYmFjayx7YWN0aXZlQnJhbmNoOl90LHBlbmRpbmdCcmFuY2g6YXQsaXNJbkZhbGxiYWNrOlNlLGlzSHlkcmF0aW5nOmJlfT1kZTtpZihhdClkZS5wZW5kaW5nQnJhbmNoPUdlLHF0KEdlLGF0KT8obGUoYXQsR2UsZGUuaGlkZGVuQ29udGFpbmVyLG51bGwsSSxkZSxPLEYsVyksZGUuZGVwczw9MD9kZS5yZXNvbHZlKCk6U2UmJihsZShfdCxxZSxtLFMsSSxudWxsLE8sRixXKSxzcihkZSxxZSkpKTooZGUucGVuZGluZ0lkKyssYmU/KGRlLmlzSHlkcmF0aW5nPSExLGRlLmFjdGl2ZUJyYW5jaD1hdCk6emUoYXQsSSxkZSksZGUuZGVwcz0wLGRlLmVmZmVjdHMubGVuZ3RoPTAsZGUuaGlkZGVuQ29udGFpbmVyPWl0KCJkaXYiKSxTZT8obGUobnVsbCxHZSxkZS5oaWRkZW5Db250YWluZXIsbnVsbCxJLGRlLE8sRixXKSxkZS5kZXBzPD0wP2RlLnJlc29sdmUoKToobGUoX3QscWUsbSxTLEksbnVsbCxPLEYsVyksc3IoZGUscWUpKSk6X3QmJnF0KEdlLF90KT8obGUoX3QsR2UsbSxTLEksZGUsTyxGLFcpLGRlLnJlc29sdmUoITApKToobGUobnVsbCxHZSxkZS5oaWRkZW5Db250YWluZXIsbnVsbCxJLGRlLE8sRixXKSxkZS5kZXBzPD0wJiZkZS5yZXNvbHZlKCkpKTtlbHNlIGlmKF90JiZxdChHZSxfdCkpbGUoX3QsR2UsbSxTLEksZGUsTyxGLFcpLHNyKGRlLEdlKTtlbHNlIGlmKHhuKHUsIm9uUGVuZGluZyIpLGRlLnBlbmRpbmdCcmFuY2g9R2UsZGUucGVuZGluZ0lkKyssbGUobnVsbCxHZSxkZS5oaWRkZW5Db250YWluZXIsbnVsbCxJLGRlLE8sRixXKSxkZS5kZXBzPD0wKWRlLnJlc29sdmUoKTtlbHNle3Zhcnt0aW1lb3V0OkNlLHBlbmRpbmdJZDpzdH09ZGU7Q2U+MD9zZXRUaW1lb3V0KCgpPT57ZGUucGVuZGluZ0lkPT09c3QmJmRlLmZhbGxiYWNrKHFlKX0sQ2UpOkNlPT09MCYmZGUuZmFsbGJhY2socWUpfX1mdW5jdGlvbiBmcihhLHUsbSxTLEksTyxGLFcsRyxsZSl7dmFyIHplPWFyZ3VtZW50cy5sZW5ndGg+MTAmJmFyZ3VtZW50c1sxMF0hPT12b2lkIDA/YXJndW1lbnRzWzEwXTohMSx7cDppdCxtOmRlLHVtOkdlLG46cWUsbzp7cGFyZW50Tm9kZTpfdCxyZW1vdmU6YXR9fT1sZSxTZT1hLnByb3BzP0UudG9OdW1iZXIoYS5wcm9wcy50aW1lb3V0KTp2b2lkIDAsYmU9e3Zub2RlOmEscGFyZW50OnUscGFyZW50Q29tcG9uZW50Om0saXNTVkc6Rixjb250YWluZXI6UyxoaWRkZW5Db250YWluZXI6SSxhbmNob3I6TyxkZXBzOjAscGVuZGluZ0lkOjAsdGltZW91dDp0eXBlb2YgU2U9PSJudW1iZXIiP1NlOi0xLGFjdGl2ZUJyYW5jaDpudWxsLHBlbmRpbmdCcmFuY2g6bnVsbCxpc0luRmFsbGJhY2s6ITAsaXNIeWRyYXRpbmc6emUsaXNVbm1vdW50ZWQ6ITEsZWZmZWN0czpbXSxyZXNvbHZlKCl7dmFyIENlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSx7dm5vZGU6c3QsYWN0aXZlQnJhbmNoOkZlLHBlbmRpbmdCcmFuY2g6UHQscGVuZGluZ0lkOmksZWZmZWN0czpsLHBhcmVudENvbXBvbmVudDpkLGNvbnRhaW5lcjpffT1iZTtpZihiZS5pc0h5ZHJhdGluZyliZS5pc0h5ZHJhdGluZz0hMTtlbHNlIGlmKCFDZSl7dmFyIEE9RmUmJlB0LnRyYW5zaXRpb24mJlB0LnRyYW5zaXRpb24ubW9kZT09PSJvdXQtaW4iO0EmJihGZS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9KCk9PntpPT09YmUucGVuZGluZ0lkJiZkZShQdCxfLEMsMCl9KTt2YXJ7YW5jaG9yOkN9PWJlO0ZlJiYoQz1xZShGZSksR2UoRmUsZCxiZSwhMCkpLEF8fGRlKFB0LF8sQywwKX1zcihiZSxQdCksYmUucGVuZGluZ0JyYW5jaD1udWxsLGJlLmlzSW5GYWxsYmFjaz0hMTtmb3IodmFyIGs9YmUucGFyZW50LEw9ITE7azspe2lmKGsucGVuZGluZ0JyYW5jaCl7ay5lZmZlY3RzLnB1c2goLi4ubCksTD0hMDticmVha31rPWsucGFyZW50fUx8fFFyKGwpLGJlLmVmZmVjdHM9W10seG4oc3QsIm9uUmVzb2x2ZSIpfSxmYWxsYmFjayhDZSl7aWYoISFiZS5wZW5kaW5nQnJhbmNoKXt2YXJ7dm5vZGU6c3QsYWN0aXZlQnJhbmNoOkZlLHBhcmVudENvbXBvbmVudDpQdCxjb250YWluZXI6aSxpc1NWRzpsfT1iZTt4bihzdCwib25GYWxsYmFjayIpO3ZhciBkPXFlKEZlKSxfPSgpPT57IWJlLmlzSW5GYWxsYmFja3x8KGl0KG51bGwsQ2UsaSxkLFB0LG51bGwsbCxXLEcpLHNyKGJlLENlKSl9LEE9Q2UudHJhbnNpdGlvbiYmQ2UudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiI7QSYmKEZlLnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZT1fKSxiZS5pc0luRmFsbGJhY2s9ITAsR2UoRmUsUHQsbnVsbCwhMCksQXx8XygpfX0sbW92ZShDZSxzdCxGZSl7YmUuYWN0aXZlQnJhbmNoJiZkZShiZS5hY3RpdmVCcmFuY2gsQ2Usc3QsRmUpLGJlLmNvbnRhaW5lcj1DZX0sbmV4dCgpe3JldHVybiBiZS5hY3RpdmVCcmFuY2gmJnFlKGJlLmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKENlLHN0KXt2YXIgRmU9ISFiZS5wZW5kaW5nQnJhbmNoO0ZlJiZiZS5kZXBzKys7dmFyIFB0PUNlLnZub2RlLmVsO0NlLmFzeW5jRGVwLmNhdGNoKGk9PntDdChpLENlLDApfSkudGhlbihpPT57aWYoIShDZS5pc1VubW91bnRlZHx8YmUuaXNVbm1vdW50ZWR8fGJlLnBlbmRpbmdJZCE9PUNlLnN1c3BlbnNlSWQpKXtDZS5hc3luY1Jlc29sdmVkPSEwO3Zhcnt2bm9kZTpsfT1DZTtJYShDZSxpLCExKSxQdCYmKGwuZWw9UHQpO3ZhciBkPSFQdCYmQ2Uuc3ViVHJlZS5lbDtzdChDZSxsLF90KFB0fHxDZS5zdWJUcmVlLmVsKSxQdD9udWxsOnFlKENlLnN1YlRyZWUpLGJlLEYsRyksZCYmYXQoZCksaW8oQ2UsbC5lbCksRmUmJi0tYmUuZGVwcz09PTAmJmJlLnJlc29sdmUoKX19KX0sdW5tb3VudChDZSxzdCl7YmUuaXNVbm1vdW50ZWQ9ITAsYmUuYWN0aXZlQnJhbmNoJiZHZShiZS5hY3RpdmVCcmFuY2gsbSxDZSxzdCksYmUucGVuZGluZ0JyYW5jaCYmR2UoYmUucGVuZGluZ0JyYW5jaCxtLENlLHN0KX19O3JldHVybiBiZX1mdW5jdGlvbiB2byhhLHUsbSxTLEksTyxGLFcsRyl7dmFyIGxlPXUuc3VzcGVuc2U9ZnIodSxTLG0sYS5wYXJlbnROb2RlLHMuY3JlYXRlRWxlbWVudCgiZGl2IiksbnVsbCxJLE8sRixXLCEwKSx6ZT1HKGEsbGUucGVuZGluZ0JyYW5jaD11LnNzQ29udGVudCxtLGxlLE8sRik7cmV0dXJuIGxlLmRlcHM9PT0wJiZsZS5yZXNvbHZlKCksemV9ZnVuY3Rpb24gWm8oYSl7dmFye3NoYXBlRmxhZzp1LGNoaWxkcmVuOm19PWEsUz11JjMyO2Euc3NDb250ZW50PVRvKFM/bS5kZWZhdWx0Om0pLGEuc3NGYWxsYmFjaz1TP1RvKG0uZmFsbGJhY2spOiR0KGNlKX1mdW5jdGlvbiBUbyhhKXt2YXIgdTtpZihFLmlzRnVuY3Rpb24oYSkpe3ZhciBtPXB0JiZhLl9jO20mJihhLl9kPSExLHdlKCkpLGE9YSgpLG0mJihhLl9kPSEwLHU9ZmUsbHQoKSl9aWYoRS5pc0FycmF5KGEpKXt2YXIgUz1SaShhKTthPVN9cmV0dXJuIGE9em4oYSksdSYmIWEuZHluYW1pY0NoaWxkcmVuJiYoYS5keW5hbWljQ2hpbGRyZW49dS5maWx0ZXIoST0+SSE9PWEpKSxhfWZ1bmN0aW9uIFNpKGEsdSl7dSYmdS5wZW5kaW5nQnJhbmNoP0UuaXNBcnJheShhKT91LmVmZmVjdHMucHVzaCguLi5hKTp1LmVmZmVjdHMucHVzaChhKTpRcihhKX1mdW5jdGlvbiBzcihhLHUpe2EuYWN0aXZlQnJhbmNoPXU7dmFye3Zub2RlOm0scGFyZW50Q29tcG9uZW50OlN9PWEsST1tLmVsPXUuZWw7UyYmUy5zdWJUcmVlPT09bSYmKFMudm5vZGUuZWw9SSxpbyhTLEkpKX1mdW5jdGlvbiB1aShhLHUpe2lmKGxuKXt2YXIgbT1sbi5wcm92aWRlcyxTPWxuLnBhcmVudCYmbG4ucGFyZW50LnByb3ZpZGVzO1M9PT1tJiYobT1sbi5wcm92aWRlcz1PYmplY3QuY3JlYXRlKFMpKSxtW2FdPXUsbG4udHlwZS5tcFR5cGU9PT0iYXBwIiYmbG4uYXBwQ29udGV4dC5hcHAucHJvdmlkZShhLHUpfX1mdW5jdGlvbiBscihhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxTPWxufHxQbjtpZihTKXt2YXIgST1TLnBhcmVudD09bnVsbD9TLnZub2RlLmFwcENvbnRleHQmJlMudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlczpTLnBhcmVudC5wcm92aWRlcztpZihJJiZhIGluIEkpcmV0dXJuIElbYV07aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiBtJiZFLmlzRnVuY3Rpb24odSk/dS5jYWxsKFMucHJveHkpOnV9fWZ1bmN0aW9uIFFuKGEsdSl7cmV0dXJuIEJyKGEsbnVsbCx1KX1mdW5jdGlvbiB4aShhLHUpe3JldHVybiBCcihhLG51bGwse2ZsdXNoOiJwb3N0In0pfWZ1bmN0aW9uIG9vKGEsdSl7cmV0dXJuIEJyKGEsbnVsbCx7Zmx1c2g6InN5bmMifSl9dmFyIHRpPXt9O2Z1bmN0aW9uIHhyKGEsdSxtKXtyZXR1cm4gQnIoYSx1LG0pfWZ1bmN0aW9uIEJyKGEsdSl7dmFye2ltbWVkaWF0ZTptLGRlZXA6UyxmbHVzaDpJLG9uVHJhY2s6TyxvblRyaWdnZXI6Rn09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOkUuRU1QVFlfT0JKLFc9Ui5nZXRDdXJyZW50U2NvcGUoKT09PShsbj09bnVsbD92b2lkIDA6bG4uc2NvcGUpP2xuOm51bGwsRyxsZT0hMSx6ZT0hMTtpZihSLmlzUmVmKGEpPyhHPSgpPT5hLnZhbHVlLGxlPVIuaXNTaGFsbG93KGEpKTpSLmlzUmVhY3RpdmUoYSk/KEc9KCk9PmEsUz0hMCk6RS5pc0FycmF5KGEpPyh6ZT0hMCxsZT1hLnNvbWUoQ2U9PlIuaXNSZWFjdGl2ZShDZSl8fFIuaXNTaGFsbG93KENlKSksRz0oKT0+YS5tYXAoQ2U9PntpZihSLmlzUmVmKENlKSlyZXR1cm4gQ2UudmFsdWU7aWYoUi5pc1JlYWN0aXZlKENlKSlyZXR1cm4gSHIoQ2UpO2lmKEUuaXNGdW5jdGlvbihDZSkpcmV0dXJuIFR0KENlLFcsMil9KSk6RS5pc0Z1bmN0aW9uKGEpP3U/Rz0oKT0+VHQoYSxXLDIpOkc9KCk9PntpZighKFcmJlcuaXNVbm1vdW50ZWQpKXJldHVybiBkZSYmZGUoKSxQKGEsVywzLFtHZV0pfTpHPUUuTk9PUCx1JiZTKXt2YXIgaXQ9RztHPSgpPT5IcihpdCgpKX12YXIgZGUsR2U9Q2U9PntkZT1TZS5vblN0b3A9KCk9PntUdChDZSxXLDQpfX0scWU9emU/bmV3IEFycmF5KGEubGVuZ3RoKS5maWxsKHRpKTp0aSxfdD0oKT0+e2lmKCEhU2UuYWN0aXZlKWlmKHUpe3ZhciBDZT1TZS5ydW4oKTsoU3x8bGV8fCh6ZT9DZS5zb21lKChzdCxGZSk9PkUuaGFzQ2hhbmdlZChzdCxxZVtGZV0pKTpFLmhhc0NoYW5nZWQoQ2UscWUpKSkmJihkZSYmZGUoKSxQKHUsVywzLFtDZSxxZT09PXRpP3ZvaWQgMDp6ZSYmcWVbMF09PT10aT9bXTpxZSxHZV0pLHFlPUNlKX1lbHNlIFNlLnJ1bigpfTtfdC5hbGxvd1JlY3Vyc2U9ISF1O3ZhciBhdDtJPT09InN5bmMiP2F0PV90Okk9PT0icG9zdCI/YXQ9KCk9PmhyKF90LFcmJlcuc3VzcGVuc2UpOihfdC5wcmU9ITAsVyYmKF90LmlkPVcudWlkKSxhdD0oKT0+Q24oX3QpKTt2YXIgU2U9bmV3IFIuUmVhY3RpdmVFZmZlY3QoRyxhdCk7dT9tP190KCk6cWU9U2UucnVuKCk6ST09PSJwb3N0Ij9ocihTZS5ydW4uYmluZChTZSksVyYmVy5zdXNwZW5zZSk6U2UucnVuKCk7dmFyIGJlPSgpPT57U2Uuc3RvcCgpLFcmJlcuc2NvcGUmJkUucmVtb3ZlKFcuc2NvcGUuZWZmZWN0cyxTZSl9O3JldHVybiBiZX1mdW5jdGlvbiB3aShhLHUsbSl7dmFyIFM9dGhpcy5wcm94eSxJPUUuaXNTdHJpbmcoYSk/YS5pbmNsdWRlcygiLiIpP1BvKFMsYSk6KCk9PlNbYV06YS5iaW5kKFMsUyksTztFLmlzRnVuY3Rpb24odSk/Tz11OihPPXUuaGFuZGxlcixtPXUpO3ZhciBGPWxuO1luKHRoaXMpO3ZhciBXPUJyKEksTy5iaW5kKFMpLG0pO3JldHVybiBGP1luKEYpOlpuKCksV31mdW5jdGlvbiBQbyhhLHUpe3ZhciBtPXUuc3BsaXQoIi4iKTtyZXR1cm4oKT0+e2Zvcih2YXIgUz1hLEk9MDtJPG0ubGVuZ3RoJiZTO0krKylTPVNbbVtJXV07cmV0dXJuIFN9fWZ1bmN0aW9uIEhyKGEsdSl7aWYoIUUuaXNPYmplY3QoYSl8fGEuX192X3NraXB8fCh1PXV8fG5ldyBTZXQsdS5oYXMoYSkpKXJldHVybiBhO2lmKHUuYWRkKGEpLFIuaXNSZWYoYSkpSHIoYS52YWx1ZSx1KTtlbHNlIGlmKEUuaXNBcnJheShhKSlmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKylIcihhW21dLHUpO2Vsc2UgaWYoRS5pc1NldChhKXx8RS5pc01hcChhKSlhLmZvckVhY2goST0+e0hyKEksdSl9KTtlbHNlIGlmKEUuaXNQbGFpbk9iamVjdChhKSlmb3IodmFyIFMgaW4gYSlIcihhW1NdLHUpO3JldHVybiBhfWZ1bmN0aW9uIE1yKCl7dmFyIGE9e2lzTW91bnRlZDohMSxpc0xlYXZpbmc6ITEsaXNVbm1vdW50aW5nOiExLGxlYXZpbmdWTm9kZXM6bmV3IE1hcH07cmV0dXJuIHJyKCgpPT57YS5pc01vdW50ZWQ9ITB9KSxlcigoKT0+e2EuaXNVbm1vdW50aW5nPSEwfSksYX12YXIgRXI9W0Z1bmN0aW9uLEFycmF5XSxnbj17bW9kZTpTdHJpbmcsYXBwZWFyOkJvb2xlYW4scGVyc2lzdGVkOkJvb2xlYW4sb25CZWZvcmVFbnRlcjpFcixvbkVudGVyOkVyLG9uQWZ0ZXJFbnRlcjpFcixvbkVudGVyQ2FuY2VsbGVkOkVyLG9uQmVmb3JlTGVhdmU6RXIsb25MZWF2ZTpFcixvbkFmdGVyTGVhdmU6RXIsb25MZWF2ZUNhbmNlbGxlZDpFcixvbkJlZm9yZUFwcGVhcjpFcixvbkFwcGVhcjpFcixvbkFmdGVyQXBwZWFyOkVyLG9uQXBwZWFyQ2FuY2VsbGVkOkVyfSxmaT17bmFtZToiQmFzZVRyYW5zaXRpb24iLHByb3BzOmduLHNldHVwKGEsdSl7dmFye3Nsb3RzOm19PXUsUz15bigpLEk9TXIoKSxPO3JldHVybigpPT57dmFyIEY9bS5kZWZhdWx0JiZqcihtLmRlZmF1bHQoKSwhMCk7aWYoISghRnx8IUYubGVuZ3RoKSl7dmFyIFc9RlswXTtpZihGLmxlbmd0aD4xKXtmb3IodmFyIEcgb2YgRilpZihHLnR5cGUhPT1jZSl7Vz1HO2JyZWFrfX12YXIgbGU9Ui50b1JhdyhhKSx7bW9kZTp6ZX09bGU7aWYoSS5pc0xlYXZpbmcpcmV0dXJuIG5pKFcpO3ZhciBpdD1HaShXKTtpZighaXQpcmV0dXJuIG5pKFcpO3ZhciBkZT1FZShpdCxsZSxJLFMpO0t0KGl0LGRlKTt2YXIgR2U9Uy5zdWJUcmVlLHFlPUdlJiZHaShHZSksX3Q9ITEse2dldFRyYW5zaXRpb25LZXk6YXR9PWl0LnR5cGU7aWYoYXQpe3ZhciBTZT1hdCgpO089PT12b2lkIDA/Tz1TZTpTZSE9PU8mJihPPVNlLF90PSEwKX1pZihxZSYmcWUudHlwZSE9PWNlJiYoIXF0KGl0LHFlKXx8X3QpKXt2YXIgYmU9RWUocWUsbGUsSSxTKTtpZihLdChxZSxiZSksemU9PT0ib3V0LWluIilyZXR1cm4gSS5pc0xlYXZpbmc9ITAsYmUuYWZ0ZXJMZWF2ZT0oKT0+e0kuaXNMZWF2aW5nPSExLFMudXBkYXRlLmFjdGl2ZSE9PSExJiZTLnVwZGF0ZSgpfSxuaShXKTt6ZT09PSJpbi1vdXQiJiZpdC50eXBlIT09Y2UmJihiZS5kZWxheUxlYXZlPShDZSxzdCxGZSk9Pnt2YXIgUHQ9THQoSSxxZSk7UHRbU3RyaW5nKHFlLmtleSldPXFlLENlLl9sZWF2ZUNiPSgpPT57c3QoKSxDZS5fbGVhdmVDYj12b2lkIDAsZGVsZXRlIGRlLmRlbGF5ZWRMZWF2ZX0sZGUuZGVsYXllZExlYXZlPUZlfSl9cmV0dXJuIFd9fX19LFByPWZpO2Z1bmN0aW9uIEx0KGEsdSl7dmFye2xlYXZpbmdWTm9kZXM6bX09YSxTPW0uZ2V0KHUudHlwZSk7cmV0dXJuIFN8fChTPU9iamVjdC5jcmVhdGUobnVsbCksbS5zZXQodS50eXBlLFMpKSxTfWZ1bmN0aW9uIEVlKGEsdSxtLFMpe3ZhcnthcHBlYXI6SSxtb2RlOk8scGVyc2lzdGVkOkY9ITEsb25CZWZvcmVFbnRlcjpXLG9uRW50ZXI6RyxvbkFmdGVyRW50ZXI6bGUsb25FbnRlckNhbmNlbGxlZDp6ZSxvbkJlZm9yZUxlYXZlOml0LG9uTGVhdmU6ZGUsb25BZnRlckxlYXZlOkdlLG9uTGVhdmVDYW5jZWxsZWQ6cWUsb25CZWZvcmVBcHBlYXI6X3Qsb25BcHBlYXI6YXQsb25BZnRlckFwcGVhcjpTZSxvbkFwcGVhckNhbmNlbGxlZDpiZX09dSxDZT1TdHJpbmcoYS5rZXkpLHN0PUx0KG0sYSksRmU9KGwsZCk9PntsJiZQKGwsUyw5LGQpfSxQdD0obCxkKT0+e3ZhciBfPWRbMV07RmUobCxkKSxFLmlzQXJyYXkobCk/bC5ldmVyeShBPT5BLmxlbmd0aDw9MSkmJl8oKTpsLmxlbmd0aDw9MSYmXygpfSxpPXttb2RlOk8scGVyc2lzdGVkOkYsYmVmb3JlRW50ZXIobCl7dmFyIGQ9VztpZighbS5pc01vdW50ZWQpaWYoSSlkPV90fHxXO2Vsc2UgcmV0dXJuO2wuX2xlYXZlQ2ImJmwuX2xlYXZlQ2IoITApO3ZhciBfPXN0W0NlXTtfJiZxdChhLF8pJiZfLmVsLl9sZWF2ZUNiJiZfLmVsLl9sZWF2ZUNiKCksRmUoZCxbbF0pfSxlbnRlcihsKXt2YXIgZD1HLF89bGUsQT16ZTtpZighbS5pc01vdW50ZWQpaWYoSSlkPWF0fHxHLF89U2V8fGxlLEE9YmV8fHplO2Vsc2UgcmV0dXJuO3ZhciBDPSExLGs9bC5fZW50ZXJDYj1MPT57Q3x8KEM9ITAsTD9GZShBLFtsXSk6RmUoXyxbbF0pLGkuZGVsYXllZExlYXZlJiZpLmRlbGF5ZWRMZWF2ZSgpLGwuX2VudGVyQ2I9dm9pZCAwKX07ZD9QdChkLFtsLGtdKTprKCl9LGxlYXZlKGwsZCl7dmFyIF89U3RyaW5nKGEua2V5KTtpZihsLl9lbnRlckNiJiZsLl9lbnRlckNiKCEwKSxtLmlzVW5tb3VudGluZylyZXR1cm4gZCgpO0ZlKGl0LFtsXSk7dmFyIEE9ITEsQz1sLl9sZWF2ZUNiPWs9PntBfHwoQT0hMCxkKCksaz9GZShxZSxbbF0pOkZlKEdlLFtsXSksbC5fbGVhdmVDYj12b2lkIDAsc3RbX109PT1hJiZkZWxldGUgc3RbX10pfTtzdFtfXT1hLGRlP1B0KGRlLFtsLENdKTpDKCl9LGNsb25lKGwpe3JldHVybiBFZShsLHUsbSxTKX19O3JldHVybiBpfWZ1bmN0aW9uIG5pKGEpe2lmKEJuKGEpKXJldHVybiBhPXBpKGEpLGEuY2hpbGRyZW49bnVsbCxhfWZ1bmN0aW9uIEdpKGEpe3JldHVybiBCbihhKT9hLmNoaWxkcmVuP2EuY2hpbGRyZW5bMF06dm9pZCAwOmF9ZnVuY3Rpb24gS3QoYSx1KXthLnNoYXBlRmxhZyY2JiZhLmNvbXBvbmVudD9LdChhLmNvbXBvbmVudC5zdWJUcmVlLHUpOmEuc2hhcGVGbGFnJjEyOD8oYS5zc0NvbnRlbnQudHJhbnNpdGlvbj11LmNsb25lKGEuc3NDb250ZW50KSxhLnNzRmFsbGJhY2sudHJhbnNpdGlvbj11LmNsb25lKGEuc3NGYWxsYmFjaykpOmEudHJhbnNpdGlvbj11fWZ1bmN0aW9uIGpyKGEpe2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxTPVtdLEk9MCxPPTA7TzxhLmxlbmd0aDtPKyspe3ZhciBGPWFbT10sVz1tPT1udWxsP0Yua2V5OlN0cmluZyhtKStTdHJpbmcoRi5rZXkhPW51bGw/Ri5rZXk6Tyk7Ri50eXBlPT09Sj8oRi5wYXRjaEZsYWcmMTI4JiZJKyssUz1TLmNvbmNhdChqcihGLmNoaWxkcmVuLHUsVykpKToodXx8Ri50eXBlIT09Y2UpJiZTLnB1c2goVyE9bnVsbD9waShGLHtrZXk6V30pOkYpfWlmKEk+MSlmb3IodmFyIEc9MDtHPFMubGVuZ3RoO0crKylTW0ddLnBhdGNoRmxhZz0tMjtyZXR1cm4gU31mdW5jdGlvbiB6cihhKXtyZXR1cm4gRS5pc0Z1bmN0aW9uKGEpP3tzZXR1cDphLG5hbWU6YS5uYW1lfTphfXZhciBMcj1hPT4hIWEudHlwZS5fX2FzeW5jTG9hZGVyO2Z1bmN0aW9uIERyKGEpe0UuaXNGdW5jdGlvbihhKSYmKGE9e2xvYWRlcjphfSk7dmFye2xvYWRlcjp1LGxvYWRpbmdDb21wb25lbnQ6bSxlcnJvckNvbXBvbmVudDpTLGRlbGF5Okk9MjAwLHRpbWVvdXQ6TyxzdXNwZW5zaWJsZTpGPSEwLG9uRXJyb3I6V309YSxHPW51bGwsbGUsemU9MCxpdD0oKT0+KHplKyssRz1udWxsLGRlKCkpLGRlPSgpPT57dmFyIEdlO3JldHVybiBHfHwoR2U9Rz11KCkuY2F0Y2gocWU9PntpZihxZT1xZSBpbnN0YW5jZW9mIEVycm9yP3FlOm5ldyBFcnJvcihTdHJpbmcocWUpKSxXKXJldHVybiBuZXcgUHJvbWlzZSgoX3QsYXQpPT57dmFyIFNlPSgpPT5fdChpdCgpKSxiZT0oKT0+YXQocWUpO1cocWUsU2UsYmUsemUrMSl9KTt0aHJvdyBxZX0pLnRoZW4ocWU9PkdlIT09RyYmRz9HOihxZSYmKHFlLl9fZXNNb2R1bGV8fHFlW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iTW9kdWxlIikmJihxZT1xZS5kZWZhdWx0KSxsZT1xZSxxZSkpKX07cmV0dXJuIHpyKHtuYW1lOiJBc3luY0NvbXBvbmVudFdyYXBwZXIiLF9fYXN5bmNMb2FkZXI6ZGUsZ2V0IF9fYXN5bmNSZXNvbHZlZCgpe3JldHVybiBsZX0sc2V0dXAoKXt2YXIgR2U9bG47aWYobGUpcmV0dXJuKCk9PkJpKGxlLEdlKTt2YXIgcWU9YmU9PntHPW51bGwsQ3QoYmUsR2UsMTMpfTtpZihGJiZHZS5zdXNwZW5zZSlyZXR1cm4gZGUoKS50aGVuKGJlPT4oKT0+QmkoYmUsR2UpKS5jYXRjaChiZT0+KHFlKGJlKSwoKT0+Uz8kdChTLHtlcnJvcjpiZX0pOm51bGwpKTt2YXIgX3Q9Ui5yZWYoITEpLGF0PVIucmVmKCksU2U9Ui5yZWYoISFJKTtyZXR1cm4gSSYmc2V0VGltZW91dCgoKT0+e1NlLnZhbHVlPSExfSxJKSxPIT1udWxsJiZzZXRUaW1lb3V0KCgpPT57aWYoIV90LnZhbHVlJiYhYXQudmFsdWUpe3ZhciBiZT1uZXcgRXJyb3IoIkFzeW5jIGNvbXBvbmVudCB0aW1lZCBvdXQgYWZ0ZXIgIi5jb25jYXQoTywibXMuIikpO3FlKGJlKSxhdC52YWx1ZT1iZX19LE8pLGRlKCkudGhlbigoKT0+e190LnZhbHVlPSEwLEdlLnBhcmVudCYmQm4oR2UucGFyZW50LnZub2RlKSYmQ24oR2UucGFyZW50LnVwZGF0ZSl9KS5jYXRjaChiZT0+e3FlKGJlKSxhdC52YWx1ZT1iZX0pLCgpPT57aWYoX3QudmFsdWUmJmxlKXJldHVybiBCaShsZSxHZSk7aWYoYXQudmFsdWUmJlMpcmV0dXJuICR0KFMse2Vycm9yOmF0LnZhbHVlfSk7aWYobSYmIVNlLnZhbHVlKXJldHVybiAkdChtKX19fSl9ZnVuY3Rpb24gQmkoYSx1KXt2YXJ7cmVmOm0scHJvcHM6UyxjaGlsZHJlbjpJLGNlOk99PXUudm5vZGUsRj0kdChhLFMsSSk7cmV0dXJuIEYucmVmPW0sRi5jZT1PLGRlbGV0ZSB1LnZub2RlLmNlLEZ9dmFyIEJuPWE9PmEudHlwZS5fX2lzS2VlcEFsaXZlLGRpPXtuYW1lOiJLZWVwQWxpdmUiLF9faXNLZWVwQWxpdmU6ITAscHJvcHM6e2luY2x1ZGU6W1N0cmluZyxSZWdFeHAsQXJyYXldLGV4Y2x1ZGU6W1N0cmluZyxSZWdFeHAsQXJyYXldLG1heDpbU3RyaW5nLE51bWJlcl19LHNldHVwKGEsdSl7dmFye3Nsb3RzOm19PXUsUz15bigpLEk9Uy5jdHgsTz1uZXcgTWFwLEY9bmV3IFNldCxXPW51bGwsRz1TLnN1c3BlbnNlLHtyZW5kZXJlcjp7cDpsZSxtOnplLHVtOml0LG86e2NyZWF0ZUVsZW1lbnQ6ZGV9fX09SSxHZT1kZSgiZGl2Iik7SS5hY3RpdmF0ZT0oQ2Usc3QsRmUsUHQsaSk9Pnt2YXIgbD1DZS5jb21wb25lbnQ7emUoQ2Usc3QsRmUsMCxHKSxsZShsLnZub2RlLENlLHN0LEZlLGwsRyxQdCxDZS5zbG90U2NvcGVJZHMsaSksaHIoKCk9PntsLmlzRGVhY3RpdmF0ZWQ9ITEsbC5hJiZFLmludm9rZUFycmF5Rm5zKGwuYSk7dmFyIGQ9Q2UucHJvcHMmJkNlLnByb3BzLm9uVm5vZGVNb3VudGVkO2QmJkNyKGQsbC5wYXJlbnQsQ2UpfSxHKX0sSS5kZWFjdGl2YXRlPUNlPT57dmFyIHN0PUNlLmNvbXBvbmVudDt6ZShDZSxHZSxudWxsLDEsRyksaHIoKCk9PntzdC5kYSYmRS5pbnZva2VBcnJheUZucyhzdC5kYSk7dmFyIEZlPUNlLnByb3BzJiZDZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO0ZlJiZDcihGZSxzdC5wYXJlbnQsQ2UpLHN0LmlzRGVhY3RpdmF0ZWQ9ITB9LEcpfTtmdW5jdGlvbiBxZShDZSl7WWkoQ2UpLGl0KENlLFMsRywhMCl9ZnVuY3Rpb24gX3QoQ2Upe08uZm9yRWFjaCgoc3QsRmUpPT57dmFyIFB0PVVpKHN0LnR5cGUpO1B0JiYoIUNlfHwhQ2UoUHQpKSYmYXQoRmUpfSl9ZnVuY3Rpb24gYXQoQ2Upe3ZhciBzdD1PLmdldChDZSk7IVd8fCFxdChzdCxXKT9xZShzdCk6VyYmWWkoVyksTy5kZWxldGUoQ2UpLEYuZGVsZXRlKENlKX14cigoKT0+W2EuaW5jbHVkZSxhLmV4Y2x1ZGVdLENlPT57dmFyW3N0LEZlXT1DZTtzdCYmX3QoUHQ9Pk1pKHN0LFB0KSksRmUmJl90KFB0PT4hTWkoRmUsUHQpKX0se2ZsdXNoOiJwb3N0IixkZWVwOiEwfSk7dmFyIFNlPW51bGwsYmU9KCk9PntTZSE9bnVsbCYmTy5zZXQoU2UsQ2koUy5zdWJUcmVlKSl9O3JldHVybiBycihiZSkscW4oYmUpLGVyKCgpPT57Ty5mb3JFYWNoKENlPT57dmFye3N1YlRyZWU6c3Qsc3VzcGVuc2U6RmV9PVMsUHQ9Q2koc3QpO2lmKENlLnR5cGU9PT1QdC50eXBlJiZDZS5rZXk9PT1QdC5rZXkpe1lpKFB0KTt2YXIgaT1QdC5jb21wb25lbnQuZGE7aSYmaHIoaSxGZSk7cmV0dXJufXFlKENlKX0pfSksKCk9PntpZihTZT1udWxsLCFtLmRlZmF1bHQpcmV0dXJuIG51bGw7dmFyIENlPW0uZGVmYXVsdCgpLHN0PUNlWzBdO2lmKENlLmxlbmd0aD4xKXJldHVybiBXPW51bGwsQ2U7aWYoIXZuKHN0KXx8IShzdC5zaGFwZUZsYWcmNCkmJiEoc3Quc2hhcGVGbGFnJjEyOCkpcmV0dXJuIFc9bnVsbCxzdDt2YXIgRmU9Q2koc3QpLFB0PUZlLnR5cGUsaT1VaShMcihGZSk/RmUudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9OlB0KSx7aW5jbHVkZTpsLGV4Y2x1ZGU6ZCxtYXg6X309YTtpZihsJiYoIWl8fCFNaShsLGkpKXx8ZCYmaSYmTWkoZCxpKSlyZXR1cm4gVz1GZSxzdDt2YXIgQT1GZS5rZXk9PW51bGw/UHQ6RmUua2V5LEM9Ty5nZXQoQSk7cmV0dXJuIEZlLmVsJiYoRmU9cGkoRmUpLHN0LnNoYXBlRmxhZyYxMjgmJihzdC5zc0NvbnRlbnQ9RmUpKSxTZT1BLEM/KEZlLmVsPUMuZWwsRmUuY29tcG9uZW50PUMuY29tcG9uZW50LEZlLnRyYW5zaXRpb24mJkt0KEZlLEZlLnRyYW5zaXRpb24pLEZlLnNoYXBlRmxhZ3w9NTEyLEYuZGVsZXRlKEEpLEYuYWRkKEEpKTooRi5hZGQoQSksXyYmRi5zaXplPnBhcnNlSW50KF8sMTApJiZhdChGLnZhbHVlcygpLm5leHQoKS52YWx1ZSkpLEZlLnNoYXBlRmxhZ3w9MjU2LFc9RmUsbGkoc3QudHlwZSk/c3Q6RmV9fX0sZGE9ZGk7ZnVuY3Rpb24gTWkoYSx1KXtyZXR1cm4gRS5pc0FycmF5KGEpP2Euc29tZShtPT5NaShtLHUpKTpFLmlzU3RyaW5nKGEpP2Euc3BsaXQoIiwiKS5pbmNsdWRlcyh1KTpFLmlzUmVnRXhwKGEpP2EudGVzdCh1KTohMX1mdW5jdGlvbiBMaShhLHUpe0FuKGEsImEiLHUpfWZ1bmN0aW9uIElvKGEsdSl7QW4oYSwiZGEiLHUpfWZ1bmN0aW9uIEFuKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmxuLFM9YS5fX3dkY3x8KGEuX193ZGM9KCk9Pntmb3IodmFyIE89bTtPOyl7aWYoTy5pc0RlYWN0aXZhdGVkKXJldHVybjtPPU8ucGFyZW50fXJldHVybiBhKCl9KTtpZihGaSh1LFMsbSksbSlmb3IodmFyIEk9bS5wYXJlbnQ7SSYmSS5wYXJlbnQ7KUJuKEkucGFyZW50LnZub2RlKSYmRGkoUyx1LG0sSSksST1JLnBhcmVudH1mdW5jdGlvbiBEaShhLHUsbSxTKXt2YXIgST1GaSh1LGEsUywhMCk7ZHIoKCk9PntFLnJlbW92ZShTW3VdLEkpfSxtKX1mdW5jdGlvbiBZaShhKXthLnNoYXBlRmxhZyY9fjI1NixhLnNoYXBlRmxhZyY9fjUxMn1mdW5jdGlvbiBDaShhKXtyZXR1cm4gYS5zaGFwZUZsYWcmMTI4P2Euc3NDb250ZW50OmF9ZnVuY3Rpb24gRmkoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bG4sUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7aWYobSl7aWYoRGUuaXNSb290SG9vayhhKSYmbSE9PW0ucm9vdCYmKG09bS5yb290LERlLmlzUm9vdEltbWVkaWF0ZUhvb2soYSkpKXt2YXIgST1tLnByb3h5O1AodS5iaW5kKEkpLG0sYSxEZS5PTl9MT0FEPT09YT9bSS4kcGFnZS5vcHRpb25zXTpbXSl9dmFyIE89bVthXXx8KG1bYV09W10pLEY9dS5fX3dlaHx8KHUuX193ZWg9ZnVuY3Rpb24oKXtpZighbS5pc1VubW91bnRlZCl7Ui5wYXVzZVRyYWNraW5nKCksWW4obSk7Zm9yKHZhciBXPWFyZ3VtZW50cy5sZW5ndGgsRz1uZXcgQXJyYXkoVyksbGU9MDtsZTxXO2xlKyspR1tsZV09YXJndW1lbnRzW2xlXTt2YXIgemU9UCh1LG0sYSxHKTtyZXR1cm4gWm4oKSxSLnJlc2V0VHJhY2tpbmcoKSx6ZX19KTtyZXR1cm4gUz9PLnVuc2hpZnQoRik6Ty5wdXNoKEYpLEZ9fXZhciBJcj1hPT5mdW5jdGlvbih1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bG47cmV0dXJuKCFoLmlzSW5TU1JDb21wb25lbnRTZXR1cHx8YT09PSJzcCIpJiZGaShhLGZ1bmN0aW9uKCl7cmV0dXJuIHUoLi4uYXJndW1lbnRzKX0sbSl9LHJpPUlyKCJibSIpLHJyPUlyKCJtIiksY3I9SXIoImJ1IikscW49SXIoInUiKSxlcj1JcigiYnVtIiksZHI9SXIoInVtIiksbW89SXIoInNwIiksX289SXIoInJ0ZyIpLHFpPUlyKCJydGMiKTtmdW5jdGlvbiBKaShhKXt2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bG47RmkoImVjIixhLHUpfWZ1bmN0aW9uIFhvKGEsdSl7dmFyIG09UG47aWYobT09PW51bGwpcmV0dXJuIGE7Zm9yKHZhciBTPUxvKG0pfHxtLnByb3h5LEk9YS5kaXJzfHwoYS5kaXJzPVtdKSxPPTA7Tzx1Lmxlbmd0aDtPKyspe3ZhcltGLFcsRyxsZT1FLkVNUFRZX09CSl09dVtPXTtGJiYoRS5pc0Z1bmN0aW9uKEYpJiYoRj17bW91bnRlZDpGLHVwZGF0ZWQ6Rn0pLEYuZGVlcCYmSHIoVyksSS5wdXNoKHtkaXI6RixpbnN0YW5jZTpTLHZhbHVlOlcsb2xkVmFsdWU6dm9pZCAwLGFyZzpHLG1vZGlmaWVyczpsZX0pKX1yZXR1cm4gYX1mdW5jdGlvbiBXcihhLHUsbSxTKXtmb3IodmFyIEk9YS5kaXJzLE89dSYmdS5kaXJzLEY9MDtGPEkubGVuZ3RoO0YrKyl7dmFyIFc9SVtGXTtPJiYoVy5vbGRWYWx1ZT1PW0ZdLnZhbHVlKTt2YXIgRz1XLmRpcltTXTtHJiYoUi5wYXVzZVRyYWNraW5nKCksUChHLG0sOCxbYS5lbCxXLGEsdV0pLFIucmVzZXRUcmFja2luZygpKX19dmFyIHlyPSJjb21wb25lbnRzIixObz0iZGlyZWN0aXZlcyI7ZnVuY3Rpb24gQihhLHUpe3JldHVybiBaZSh5cixhLCEwLHUpfHxhfXZhciBZPVN5bWJvbCgpO2Z1bmN0aW9uIHJlKGEpe3JldHVybiBFLmlzU3RyaW5nKGEpP1plKHlyLGEsITEpfHxhOmF8fFl9ZnVuY3Rpb24geGUoYSl7cmV0dXJuIFplKE5vLGEpfWZ1bmN0aW9uIFplKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLFM9UG58fGxuO2lmKFMpe3ZhciBJPVMudHlwZTtpZihhPT09eXIpe3ZhciBPPVVpKEksITEpO2lmKE8mJihPPT09dXx8Tz09PUUuY2FtZWxpemUodSl8fE89PT1FLmNhcGl0YWxpemUoRS5jYW1lbGl6ZSh1KSkpKXJldHVybiBJfXZhciBGPWN0KFNbYV18fElbYV0sdSl8fGN0KFMuYXBwQ29udGV4dFthXSx1KTtyZXR1cm4hRiYmbT9JOkZ9fWZ1bmN0aW9uIGN0KGEsdSl7cmV0dXJuIGEmJihhW3VdfHxhW0UuY2FtZWxpemUodSldfHxhW0UuY2FwaXRhbGl6ZShFLmNhbWVsaXplKHUpKV0pfWZ1bmN0aW9uIFl0KGEsdSxtLFMpe3ZhciBJLE89bSYmbVtTXTtpZihFLmlzQXJyYXkoYSl8fEUuaXNTdHJpbmcoYSkpe0k9bmV3IEFycmF5KGEubGVuZ3RoKTtmb3IodmFyIEY9MCxXPWEubGVuZ3RoO0Y8VztGKyspSVtGXT11KGFbRl0sRix2b2lkIDAsTyYmT1tGXSl9ZWxzZSBpZih0eXBlb2YgYT09Im51bWJlciIpe0k9bmV3IEFycmF5KGEpO2Zvcih2YXIgRz0wO0c8YTtHKyspSVtHXT11KEcrMSxHLHZvaWQgMCxPJiZPW0ddKX1lbHNlIGlmKEUuaXNPYmplY3QoYSkpaWYoYVtTeW1ib2wuaXRlcmF0b3JdKUk9QXJyYXkuZnJvbShhLChHZSxxZSk9PnUoR2UscWUsdm9pZCAwLE8mJk9bcWVdKSk7ZWxzZXt2YXIgbGU9T2JqZWN0LmtleXMoYSk7ST1uZXcgQXJyYXkobGUubGVuZ3RoKTtmb3IodmFyIHplPTAsaXQ9bGUubGVuZ3RoO3plPGl0O3plKyspe3ZhciBkZT1sZVt6ZV07SVt6ZV09dShhW2RlXSxkZSx6ZSxPJiZPW3plXSl9fWVsc2UgST1bXTtyZXR1cm4gbSYmKG1bU109SSksSX1mdW5jdGlvbiBRdChhLHUpe2Zvcih2YXIgbT1mdW5jdGlvbihJKXt2YXIgTz11W0ldO2lmKEUuaXNBcnJheShPKSlmb3IodmFyIEY9MDtGPE8ubGVuZ3RoO0YrKylhW09bRl0ubmFtZV09T1tGXS5mbjtlbHNlIE8mJihhW08ubmFtZV09Ty5rZXk/ZnVuY3Rpb24oKXt2YXIgVz1PLmZuKC4uLmFyZ3VtZW50cyk7cmV0dXJuIFcmJihXLmtleT1PLmtleSksV306Ty5mbil9LFM9MDtTPHUubGVuZ3RoO1MrKyltKFMpO3JldHVybiBhfWZ1bmN0aW9uIFZpKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LFM9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsST1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtpZihQbi5pc0NFfHxQbi5wYXJlbnQmJkxyKFBuLnBhcmVudCkmJlBuLnBhcmVudC5pc0NFKXJldHVybiB1IT09ImRlZmF1bHQiJiYobS5uYW1lPXUpLCR0KCJzbG90IixtLFMmJlMoKSk7dmFyIE89YVt1XTtPJiZPLl9jJiYoTy5fZD0hMSksd2UoKTt2YXIgRj1PJiZHcihPKG0pKSxXPUR0KEose2tleTptLmtleXx8RiYmRi5rZXl8fCJfIi5jb25jYXQodSl9LEZ8fChTP1MoKTpbXSksRiYmYS5fPT09MT82NDotMik7cmV0dXJuIUkmJlcuc2NvcGVJZCYmKFcuc2xvdFNjb3BlSWRzPVtXLnNjb3BlSWQrIi1zIl0pLE8mJk8uX2MmJihPLl9kPSEwKSxXfWZ1bmN0aW9uIEdyKGEpe3JldHVybiBhLnNvbWUodT0+dm4odSk/ISh1LnR5cGU9PT1jZXx8dS50eXBlPT09SiYmIUdyKHUuY2hpbGRyZW4pKTohMCk/YTpudWxsfWZ1bmN0aW9uIGd0KGEsdSl7dmFyIG09e307Zm9yKHZhciBTIGluIGEpbVt1JiYvW0EtWl0vLnRlc3QoUyk/Im9uOiIuY29uY2F0KFMpOkUudG9IYW5kbGVyS2V5KFMpXT1hW1NdO3JldHVybiBtfXZhciBSdD1hPT5hP1RpKGEpP0xvKGEpfHxhLnByb3h5OlJ0KGEucGFyZW50KTpudWxsLFlyPUUuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCkseyQ6YT0+YSwkZWw6YT0+YS52bm9kZS5lbCwkZGF0YTphPT5hLmRhdGEsJHByb3BzOmE9PmEucHJvcHMsJGF0dHJzOmE9PmEuYXR0cnMsJHNsb3RzOmE9PmEuc2xvdHMsJHJlZnM6YT0+YS5yZWZzLCRwYXJlbnQ6YT0+UnQoYS5wYXJlbnQpLCRyb290OmE9PlJ0KGEucm9vdCksJGVtaXQ6YT0+YS5lbWl0LCRvcHRpb25zOmE9PlVuKGEpLCRmb3JjZVVwZGF0ZTphPT5hLmZ8fChhLmY9KCk9PkNuKGEudXBkYXRlKSksJG5leHRUaWNrOmE9PmEubnx8KGEubj1Yci5iaW5kKGEucHJveHkpKSwkd2F0Y2g6YT0+d2kuYmluZChhKX0pLGFvPShhLHUpPT5hIT09RS5FTVBUWV9PQkomJiFhLl9faXNTY3JpcHRTZXR1cCYmRS5oYXNPd24oYSx1KSxvZT17Z2V0KGEsdSl7dmFye186bX09YSx7Y3R4OlMsc2V0dXBTdGF0ZTpJLGRhdGE6Tyxwcm9wczpGLGFjY2Vzc0NhY2hlOlcsdHlwZTpHLGFwcENvbnRleHQ6bGV9PW0semU7aWYodVswXSE9PSIkIil7dmFyIGl0PVdbdV07aWYoaXQhPT12b2lkIDApc3dpdGNoKGl0KXtjYXNlIDE6cmV0dXJuIElbdV07Y2FzZSAyOnJldHVybiBPW3VdO2Nhc2UgNDpyZXR1cm4gU1t1XTtjYXNlIDM6cmV0dXJuIEZbdV19ZWxzZXtpZihhbyhJLHUpKXJldHVybiBXW3VdPTEsSVt1XTtpZihPIT09RS5FTVBUWV9PQkomJkUuaGFzT3duKE8sdSkpcmV0dXJuIFdbdV09MixPW3VdO2lmKCh6ZT1tLnByb3BzT3B0aW9uc1swXSkmJkUuaGFzT3duKHplLHUpKXJldHVybiBXW3VdPTMsRlt1XTtpZihTIT09RS5FTVBUWV9PQkomJkUuaGFzT3duKFMsdSkpcmV0dXJuIFdbdV09NCxTW3VdO3NlJiYoV1t1XT0wKX19dmFyIGRlPVlyW3VdLEdlLHFlO2lmKGRlKXJldHVybiB1PT09IiRhdHRycyImJlIudHJhY2sobSwiZ2V0Iix1KSxkZShtKTtpZigoR2U9Ry5fX2Nzc01vZHVsZXMpJiYoR2U9R2VbdV0pKXJldHVybiBHZTtpZihTIT09RS5FTVBUWV9PQkomJkUuaGFzT3duKFMsdSkpcmV0dXJuIFdbdV09NCxTW3VdO2lmKHFlPWxlLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLEUuaGFzT3duKHFlLHUpKXJldHVybiBxZVt1XX0sc2V0KGEsdSxtKXt2YXJ7XzpTfT1hLHtkYXRhOkksc2V0dXBTdGF0ZTpPLGN0eDpGfT1TO3JldHVybiBhbyhPLHUpPyhPW3VdPW0sITApOkkhPT1FLkVNUFRZX09CSiYmRS5oYXNPd24oSSx1KT8oSVt1XT1tLCEwKTpFLmhhc093bihTLnByb3BzLHUpfHx1WzBdPT09IiQiJiZ1LnNsaWNlKDEpaW4gUz8hMTooRlt1XT1tLCEwKX0saGFzKGEsdSl7dmFye186e2RhdGE6bSxzZXR1cFN0YXRlOlMsYWNjZXNzQ2FjaGU6SSxjdHg6TyxhcHBDb250ZXh0OkYscHJvcHNPcHRpb25zOld9fT1hLEc7cmV0dXJuISFJW3VdfHxtIT09RS5FTVBUWV9PQkomJkUuaGFzT3duKG0sdSl8fGFvKFMsdSl8fChHPVdbMF0pJiZFLmhhc093bihHLHUpfHxFLmhhc093bihPLHUpfHxFLmhhc093bihZcix1KXx8RS5oYXNPd24oRi5jb25maWcuZ2xvYmFsUHJvcGVydGllcyx1KX0sZGVmaW5lUHJvcGVydHkoYSx1LG0pe3JldHVybiBtLmdldCE9bnVsbD9hLl8uYWNjZXNzQ2FjaGVbdV09MDpFLmhhc093bihtLCJ2YWx1ZSIpJiZ0aGlzLnNldChhLHUsbS52YWx1ZSxudWxsKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KGEsdSxtKX19LFg9RS5leHRlbmQoe30sb2Use2dldChhLHUpe2lmKHUhPT1TeW1ib2wudW5zY29wYWJsZXMpcmV0dXJuIG9lLmdldChhLHUsYSl9LGhhcyhhLHUpe3ZhciBtPXVbMF0hPT0iXyImJiFFLmlzR2xvYmFsbHlXaGl0ZWxpc3RlZCh1KTtyZXR1cm4gbX19KSxzZT0hMDtmdW5jdGlvbiBCZShhKXt2YXIgdT1VbihhKSxtPWEucHJveHksUz1hLmN0eDtzZT0hMSx1LmJlZm9yZUNyZWF0ZSYmcG4odS5iZWZvcmVDcmVhdGUsYSwiYmMiKTt2YXJ7ZGF0YTpJLGNvbXB1dGVkOk8sbWV0aG9kczpGLHdhdGNoOlcscHJvdmlkZTpHLGluamVjdDpsZSxjcmVhdGVkOnplLGJlZm9yZU1vdW50Oml0LG1vdW50ZWQ6ZGUsYmVmb3JlVXBkYXRlOkdlLHVwZGF0ZWQ6cWUsYWN0aXZhdGVkOl90LGRlYWN0aXZhdGVkOmF0LGJlZm9yZURlc3Ryb3k6U2UsYmVmb3JlVW5tb3VudDpiZSxkZXN0cm95ZWQ6Q2UsdW5tb3VudGVkOnN0LHJlbmRlcjpGZSxyZW5kZXJUcmFja2VkOlB0LHJlbmRlclRyaWdnZXJlZDppLGVycm9yQ2FwdHVyZWQ6bCxzZXJ2ZXJQcmVmZXRjaDpkLGV4cG9zZTpfLGluaGVyaXRBdHRyczpBLGNvbXBvbmVudHM6QyxkaXJlY3RpdmVzOmssZmlsdGVyczpMfT11LEg9bnVsbDtpZihsZSYmbXQobGUsUyxILGEuYXBwQ29udGV4dC5jb25maWcudW53cmFwSW5qZWN0ZWRSZWYpLEYpZm9yKHZhciB0ZSBpbiBGKXt2YXIgZ2U9Rlt0ZV07RS5pc0Z1bmN0aW9uKGdlKSYmKFNbdGVdPWdlLmJpbmQobSkpfWlmKEkpe3ZhciBrZT1JLmNhbGwobSxtKTtFLmlzT2JqZWN0KGtlKSYmKGEuZGF0YT1SLnJlYWN0aXZlKGtlKSl9aWYoc2U9ITAsTyl7dmFyIHVlPWZ1bmN0aW9uKF9lKXt2YXIgTGU9T1tfZV0sQWU9RS5pc0Z1bmN0aW9uKExlKT9MZS5iaW5kKG0sbSk6RS5pc0Z1bmN0aW9uKExlLmdldCk/TGUuZ2V0LmJpbmQobSxtKTpFLk5PT1AsRXQ9IUUuaXNGdW5jdGlvbihMZSkmJkUuaXNGdW5jdGlvbihMZS5zZXQpP0xlLnNldC5iaW5kKG0pOkUuTk9PUCxBdD15byh7Z2V0OkFlLHNldDpFdH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLF9lLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkF0LnZhbHVlLHNldDpKZT0+QXQudmFsdWU9SmV9KX07Zm9yKHZhciBQZSBpbiBPKXVlKFBlKX1pZihXKWZvcih2YXIgV2UgaW4gVylKbihXW1dlXSxTLG0sV2UpO2lmKEcpe3ZhciB1dD1FLmlzRnVuY3Rpb24oRyk/Ry5jYWxsKG0pOkc7UmVmbGVjdC5vd25LZXlzKHV0KS5mb3JFYWNoKF9lPT57dWkoX2UsdXRbX2VdKX0pfXplJiZwbih6ZSxhLCJjIik7ZnVuY3Rpb24gUWUoX2UsTGUpe0UuaXNBcnJheShMZSk/TGUuZm9yRWFjaChBZT0+X2UoQWUuYmluZChtKSkpOkxlJiZfZShMZS5iaW5kKG0pKX1pZihRZShyaSxpdCksUWUocnIsZGUpLFFlKGNyLEdlKSxRZShxbixxZSksUWUoTGksX3QpLFFlKElvLGF0KSxRZShKaSxsKSxRZShxaSxQdCksUWUoX28saSksUWUoZXIsYmUpLFFlKGRyLHN0KSxRZShtbyxkKSxFLmlzQXJyYXkoXykpaWYoXy5sZW5ndGgpe3ZhciBJZT1hLmV4cG9zZWR8fChhLmV4cG9zZWQ9e30pO18uZm9yRWFjaChfZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShJZSxfZSx7Z2V0OigpPT5tW19lXSxzZXQ6TGU9Pm1bX2VdPUxlfSl9KX1lbHNlIGEuZXhwb3NlZHx8KGEuZXhwb3NlZD17fSk7RmUmJmEucmVuZGVyPT09RS5OT09QJiYoYS5yZW5kZXI9RmUpLEEhPW51bGwmJihhLmluaGVyaXRBdHRycz1BKSxDJiYoYS5jb21wb25lbnRzPUMpLGsmJihhLmRpcmVjdGl2ZXM9ayk7dmFyIHBlPWEuYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kYXBwbHlPcHRpb25zO3BlJiZwZSh1LGEsbSl9ZnVuY3Rpb24gbXQoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7RS5pc0FycmF5KGEpJiYoYT1SbyhhKSk7dmFyIFM9ZnVuY3Rpb24oTyl7dmFyIEY9YVtPXSxXPXZvaWQgMDtFLmlzT2JqZWN0KEYpPyJkZWZhdWx0ImluIEY/Vz1scihGLmZyb218fE8sRi5kZWZhdWx0LCEwKTpXPWxyKEYuZnJvbXx8Tyk6Vz1scihGKSxSLmlzUmVmKFcpJiZtP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LE8se2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+Vy52YWx1ZSxzZXQ6Rz0+Vy52YWx1ZT1HfSk6dVtPXT1XfTtmb3IodmFyIEkgaW4gYSlTKEkpfWZ1bmN0aW9uIHBuKGEsdSxtKXtQKEUuaXNBcnJheShhKT9hLm1hcChTPT5TLmJpbmQodS5wcm94eSkpOmEuYmluZCh1LnByb3h5KSx1LG0pfWZ1bmN0aW9uIEpuKGEsdSxtLFMpe3ZhciBJPVMuaW5jbHVkZXMoIi4iKT9QbyhtLFMpOigpPT5tW1NdO2lmKEUuaXNTdHJpbmcoYSkpe3ZhciBPPXVbYV07RS5pc0Z1bmN0aW9uKE8pJiZ4cihJLE8pfWVsc2UgaWYoRS5pc0Z1bmN0aW9uKGEpKXhyKEksYS5iaW5kKG0pKTtlbHNlIGlmKEUuaXNPYmplY3QoYSkpaWYoRS5pc0FycmF5KGEpKWEuZm9yRWFjaChXPT5KbihXLHUsbSxTKSk7ZWxzZXt2YXIgRj1FLmlzRnVuY3Rpb24oYS5oYW5kbGVyKT9hLmhhbmRsZXIuYmluZChtKTp1W2EuaGFuZGxlcl07RS5pc0Z1bmN0aW9uKEYpJiZ4cihJLEYsYSl9fWZ1bmN0aW9uIFVuKGEpe3ZhciB1PWEudHlwZSx7bWl4aW5zOm0sZXh0ZW5kczpTfT11LHttaXhpbnM6SSxvcHRpb25zQ2FjaGU6Tyxjb25maWc6e29wdGlvbk1lcmdlU3RyYXRlZ2llczpGfX09YS5hcHBDb250ZXh0LFc9Ty5nZXQodSksRztyZXR1cm4gVz9HPVc6IUkubGVuZ3RoJiYhbSYmIVM/Rz11OihHPXt9LEkubGVuZ3RoJiZJLmZvckVhY2gobGU9PlNyKEcsbGUsRiwhMCkpLFNyKEcsdSxGKSksRS5pc09iamVjdCh1KSYmTy5zZXQodSxHKSxHfWZ1bmN0aW9uIFNyKGEsdSxtKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEse21peGluczpJLGV4dGVuZHM6T309dTtPJiZTcihhLE8sbSwhMCksSSYmSS5mb3JFYWNoKEc9PlNyKGEsRyxtLCEwKSk7Zm9yKHZhciBGIGluIHUpaWYoIShTJiZGPT09ImV4cG9zZSIpKXt2YXIgVz1GcltGXXx8bSYmbVtGXTthW0ZdPVc/VyhhW0ZdLHVbRl0pOnVbRl19cmV0dXJuIGF9dmFyIEZyPXtkYXRhOmJvLHByb3BzOktuLGVtaXRzOktuLG1ldGhvZHM6S24sY29tcHV0ZWQ6S24sYmVmb3JlQ3JlYXRlOiRuLGNyZWF0ZWQ6JG4sYmVmb3JlTW91bnQ6JG4sbW91bnRlZDokbixiZWZvcmVVcGRhdGU6JG4sdXBkYXRlZDokbixiZWZvcmVEZXN0cm95OiRuLGJlZm9yZVVubW91bnQ6JG4sZGVzdHJveWVkOiRuLHVubW91bnRlZDokbixhY3RpdmF0ZWQ6JG4sZGVhY3RpdmF0ZWQ6JG4sZXJyb3JDYXB0dXJlZDokbixzZXJ2ZXJQcmVmZXRjaDokbixjb21wb25lbnRzOktuLGRpcmVjdGl2ZXM6S24sd2F0Y2g6SG4scHJvdmlkZTpibyxpbmplY3Q6a299O2Z1bmN0aW9uIGJvKGEsdSl7cmV0dXJuIHU/YT9mdW5jdGlvbigpe3JldHVybiBFLmV4dGVuZChFLmlzRnVuY3Rpb24oYSk/YS5jYWxsKHRoaXMsdGhpcyk6YSxFLmlzRnVuY3Rpb24odSk/dS5jYWxsKHRoaXMsdGhpcyk6dSl9OnU6YX1mdW5jdGlvbiBrbyhhLHUpe3JldHVybiBLbihSbyhhKSxSbyh1KSl9ZnVuY3Rpb24gUm8oYSl7aWYoRS5pc0FycmF5KGEpKXtmb3IodmFyIHU9e30sbT0wO208YS5sZW5ndGg7bSsrKXVbYVttXV09YVttXTtyZXR1cm4gdX1yZXR1cm4gYX1mdW5jdGlvbiAkbihhLHUpe3JldHVybiBhP1suLi5uZXcgU2V0KFtdLmNvbmNhdChhLHUpKV06dX1mdW5jdGlvbiBLbihhLHUpe3JldHVybiBhP0UuZXh0ZW5kKEUuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksYSksdSk6dX1mdW5jdGlvbiBIbihhLHUpe2lmKCFhKXJldHVybiB1O2lmKCF1KXJldHVybiBhO3ZhciBtPUUuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksYSk7Zm9yKHZhciBTIGluIHUpbVtTXT0kbihhW1NdLHVbU10pO3JldHVybiBtfWZ1bmN0aW9uIEFpKGEsdSxtKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsST17fSxPPXt9O0UuZGVmKE8scm4sMSksYS5wcm9wc0RlZmF1bHRzPU9iamVjdC5jcmVhdGUobnVsbCksaGEoYSx1LEksTyk7Zm9yKHZhciBGIGluIGEucHJvcHNPcHRpb25zWzBdKUYgaW4gSXx8KElbRl09dm9pZCAwKTttP2EucHJvcHM9Uz9JOlIuc2hhbGxvd1JlYWN0aXZlKEkpOmEudHlwZS5wcm9wcz9hLnByb3BzPUk6YS5wcm9wcz1PLGEuYXR0cnM9T31mdW5jdGlvbiBpcyhhLHUsbSxTKXt2YXJ7cHJvcHM6SSxhdHRyczpPLHZub2RlOntwYXRjaEZsYWc6Rn19PWEsVz1SLnRvUmF3KEkpLFtHXT1hLnByb3BzT3B0aW9ucyxsZT0hMTtpZigoU3x8Rj4wKSYmIShGJjE2KSl7aWYoRiY4KWZvcih2YXIgemU9YS52bm9kZS5keW5hbWljUHJvcHMsaXQ9MDtpdDx6ZS5sZW5ndGg7aXQrKyl7dmFyIGRlPXplW2l0XTtpZighVm4oYS5lbWl0c09wdGlvbnMsZGUpKXt2YXIgR2U9dVtkZV07aWYoRylpZihFLmhhc093bihPLGRlKSlHZSE9PU9bZGVdJiYoT1tkZV09R2UsbGU9ITApO2Vsc2V7dmFyIHFlPUUuY2FtZWxpemUoZGUpO0lbcWVdPXdyKEcsVyxxZSxHZSxhLCExKX1lbHNlIEdlIT09T1tkZV0mJihPW2RlXT1HZSxsZT0hMCl9fX1lbHNle2hhKGEsdSxJLE8pJiYobGU9ITApO3ZhciBfdDtmb3IodmFyIGF0IGluIFcpKCF1fHwhRS5oYXNPd24odSxhdCkmJigoX3Q9RS5oeXBoZW5hdGUoYXQpKT09PWF0fHwhRS5oYXNPd24odSxfdCkpKSYmKEc/bSYmKG1bYXRdIT09dm9pZCAwfHxtW190XSE9PXZvaWQgMCkmJihJW2F0XT13cihHLFcsYXQsdm9pZCAwLGEsITApKTpkZWxldGUgSVthdF0pO2lmKE8hPT1XKWZvcih2YXIgU2UgaW4gTykoIXV8fCFFLmhhc093bih1LFNlKSYmITApJiYoZGVsZXRlIE9bU2VdLGxlPSEwKX1sZSYmUi50cmlnZ2VyKGEsInNldCIsIiRhdHRycyIpfWZ1bmN0aW9uIGhhKGEsdSxtLFMpe3ZhcltJLE9dPWEucHJvcHNPcHRpb25zLEY9ITEsVztpZih1KXtmb3IodmFyIEcgaW4gdSlpZighRS5pc1Jlc2VydmVkUHJvcChHKSl7dmFyIGxlPXVbR10semU9dm9pZCAwO0kmJkUuaGFzT3duKEksemU9RS5jYW1lbGl6ZShHKSk/IU98fCFPLmluY2x1ZGVzKHplKT9tW3plXT1sZTooV3x8KFc9e30pKVt6ZV09bGU6Vm4oYS5lbWl0c09wdGlvbnMsRyl8fCghKEcgaW4gUyl8fGxlIT09U1tHXSkmJihTW0ddPWxlLEY9ITApfX1pZihPKWZvcih2YXIgaXQ9Ui50b1JhdyhtKSxkZT1XfHxFLkVNUFRZX09CSixHZT0wO0dlPE8ubGVuZ3RoO0dlKyspe3ZhciBxZT1PW0dlXTttW3FlXT13cihJLGl0LHFlLGRlW3FlXSxhLCFFLmhhc093bihkZSxxZSkpfXJldHVybiBGfWZ1bmN0aW9uIHdyKGEsdSxtLFMsSSxPKXt2YXIgRj1hW21dO2lmKEYhPW51bGwpe3ZhciBXPUUuaGFzT3duKEYsImRlZmF1bHQiKTtpZihXJiZTPT09dm9pZCAwKXt2YXIgRz1GLmRlZmF1bHQ7aWYoRi50eXBlIT09RnVuY3Rpb24mJkUuaXNGdW5jdGlvbihHKSl7dmFye3Byb3BzRGVmYXVsdHM6bGV9PUk7bSBpbiBsZT9TPWxlW21dOihZbihJKSxTPWxlW21dPUcuY2FsbChudWxsLHUpLFpuKCkpfWVsc2UgUz1HfUZbMF0mJihPJiYhVz9TPSExOkZbMV0mJihTPT09IiJ8fFM9PT1FLmh5cGhlbmF0ZShtKSkmJihTPSEwKSl9cmV0dXJuIFN9ZnVuY3Rpb24gVGEoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsUz11LnByb3BzQ2FjaGUsST1TLmdldChhKTtpZihJKXJldHVybiBJO3ZhciBPPWEucHJvcHMsRj17fSxXPVtdLEc9ITE7aWYoIUUuaXNGdW5jdGlvbihhKSl7dmFyIGxlPUNlPT57Rz0hMDt2YXJbc3QsRmVdPVRhKENlLHUsITApO0UuZXh0ZW5kKEYsc3QpLEZlJiZXLnB1c2goLi4uRmUpfTshbSYmdS5taXhpbnMubGVuZ3RoJiZ1Lm1peGlucy5mb3JFYWNoKGxlKSxhLmV4dGVuZHMmJmxlKGEuZXh0ZW5kcyksYS5taXhpbnMmJmEubWl4aW5zLmZvckVhY2gobGUpfWlmKCFPJiYhRylyZXR1cm4gRS5pc09iamVjdChhKSYmUy5zZXQoYSxFLkVNUFRZX0FSUiksRS5FTVBUWV9BUlI7aWYoRS5pc0FycmF5KE8pKWZvcih2YXIgemU9MDt6ZTxPLmxlbmd0aDt6ZSsrKXt2YXIgaXQ9RS5jYW1lbGl6ZShPW3plXSk7RGEoaXQpJiYoRltpdF09RS5FTVBUWV9PQkopfWVsc2UgaWYoTylmb3IodmFyIGRlIGluIE8pe3ZhciBHZT1FLmNhbWVsaXplKGRlKTtpZihEYShHZSkpe3ZhciBxZT1PW2RlXSxfdD1GW0dlXT1FLmlzQXJyYXkocWUpfHxFLmlzRnVuY3Rpb24ocWUpP3t0eXBlOnFlfTpPYmplY3QuYXNzaWduKHt9LHFlKTtpZihfdCl7dmFyIGF0PVVhKEJvb2xlYW4sX3QudHlwZSksU2U9VWEoU3RyaW5nLF90LnR5cGUpO190WzBdPWF0Pi0xLF90WzFdPVNlPDB8fGF0PFNlLChhdD4tMXx8RS5oYXNPd24oX3QsImRlZmF1bHQiKSkmJlcucHVzaChHZSl9fX12YXIgYmU9W0YsV107cmV0dXJuIEUuaXNPYmplY3QoYSkmJlMuc2V0KGEsYmUpLGJlfWZ1bmN0aW9uIERhKGEpe3JldHVybiBhWzBdIT09IiQifWZ1bmN0aW9uIEZhKGEpe3ZhciB1PWEmJmEudG9TdHJpbmcoKS5tYXRjaCgvXlxzKihmdW5jdGlvbnxjbGFzcykgKFx3KykvKTtyZXR1cm4gdT91WzJdOmE9PT1udWxsPyJudWxsIjoiIn1mdW5jdGlvbiBWYShhLHUpe3JldHVybiBGYShhKT09PUZhKHUpfWZ1bmN0aW9uIFVhKGEsdSl7cmV0dXJuIEUuaXNBcnJheSh1KT91LmZpbmRJbmRleChtPT5WYShtLGEpKTpFLmlzRnVuY3Rpb24odSkmJlZhKHUsYSk/MDotMX12YXIgZ2E9YT0+YVswXT09PSJfInx8YT09PSIkc3RhYmxlIixQYT1hPT5FLmlzQXJyYXkoYSk/YS5tYXAoem4pOlt6bihhKV0sam49KGEsdSxtKT0+e2lmKHUuX24pcmV0dXJuIHU7dmFyIFM9QW8oZnVuY3Rpb24oKXtyZXR1cm4gUGEodSguLi5hcmd1bWVudHMpKX0sbSk7cmV0dXJuIFMuX2M9ITEsU30seG89KGEsdSxtKT0+e3ZhciBTPWEuX2N0eDtmb3IodmFyIEkgaW4gYSlpZighZ2EoSSkpe3ZhciBPPWFbSV07RS5pc0Z1bmN0aW9uKE8pP3VbSV09am4oSSxPLFMpOk8hPW51bGwmJmZ1bmN0aW9uKCl7dmFyIEY9UGEoTyk7dVtJXT0oKT0+Rn0oKX19LFFvPShhLHUpPT57dmFyIG09UGEodSk7YS5zbG90cy5kZWZhdWx0PSgpPT5tfSxLaT0oYSx1KT0+e2lmKGEudm5vZGUuc2hhcGVGbGFnJjMyKXt2YXIgbT11Ll87bT8oYS5zbG90cz1SLnRvUmF3KHUpLEUuZGVmKHUsIl8iLG0pKTp4byh1LGEuc2xvdHM9e30pfWVsc2UgYS5zbG90cz17fSx1JiZRbyhhLHUpO0UuZGVmKGEuc2xvdHMscm4sMSl9LG9zPShhLHUsbSk9Pnt2YXJ7dm5vZGU6UyxzbG90czpJfT1hLE89ITAsRj1FLkVNUFRZX09CSjtpZihTLnNoYXBlRmxhZyYzMil7dmFyIFc9dS5fO1c/bSYmVz09PTE/Tz0hMTooRS5leHRlbmQoSSx1KSwhbSYmVz09PTEmJmRlbGV0ZSBJLl8pOihPPSF1LiRzdGFibGUseG8odSxJKSksRj11fWVsc2UgdSYmKFFvKGEsdSksRj17ZGVmYXVsdDoxfSk7aWYoTylmb3IodmFyIEcgaW4gSSkhZ2EoRykmJiEoRyBpbiBGKSYmZGVsZXRlIElbR119O2Z1bmN0aW9uIGFzKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6RS5OTyxwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9LG9wdGlvbk1lcmdlU3RyYXRlZ2llczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb21waWxlck9wdGlvbnM6e319LG1peGluczpbXSxjb21wb25lbnRzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpb25zQ2FjaGU6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm5ldyBXZWFrTWFwfX12YXIgQm89MDtmdW5jdGlvbiBzcyhhLHUpe3JldHVybiBmdW5jdGlvbihTKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtFLmlzRnVuY3Rpb24oUyl8fChTPU9iamVjdC5hc3NpZ24oe30sUykpLEkhPW51bGwmJiFFLmlzT2JqZWN0KEkpJiYoST1udWxsKTt2YXIgTz1hcygpLEY9bmV3IFNldCxXPSExLEc9Ty5hcHA9e191aWQ6Qm8rKyxfY29tcG9uZW50OlMsX3Byb3BzOkksX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0Ok8sX2luc3RhbmNlOm51bGwsdmVyc2lvbjpwcyxnZXQgY29uZmlnKCl7cmV0dXJuIE8uY29uZmlnfSxzZXQgY29uZmlnKGxlKXt9LHVzZShsZSl7Zm9yKHZhciB6ZT1hcmd1bWVudHMubGVuZ3RoLGl0PW5ldyBBcnJheSh6ZT4xP3plLTE6MCksZGU9MTtkZTx6ZTtkZSsrKWl0W2RlLTFdPWFyZ3VtZW50c1tkZV07cmV0dXJuIEYuaGFzKGxlKXx8KGxlJiZFLmlzRnVuY3Rpb24obGUuaW5zdGFsbCk/KEYuYWRkKGxlKSxsZS5pbnN0YWxsKEcsLi4uaXQpKTpFLmlzRnVuY3Rpb24obGUpJiYoRi5hZGQobGUpLGxlKEcsLi4uaXQpKSksR30sbWl4aW4obGUpe3JldHVybiBPLm1peGlucy5pbmNsdWRlcyhsZSl8fE8ubWl4aW5zLnB1c2gobGUpLEd9LGNvbXBvbmVudChsZSx6ZSl7cmV0dXJuIHplPyhPLmNvbXBvbmVudHNbbGVdPXplLEcpOk8uY29tcG9uZW50c1tsZV19LGRpcmVjdGl2ZShsZSx6ZSl7cmV0dXJuIHplPyhPLmRpcmVjdGl2ZXNbbGVdPXplLEcpOk8uZGlyZWN0aXZlc1tsZV19LG1vdW50KGxlLHplLGl0KXtpZighVyl7dmFyIGRlPSR0KFMsSSk7cmV0dXJuIGRlLmFwcENvbnRleHQ9Tyx6ZSYmdT91KGRlLGxlKTphKGRlLGxlLGl0KSxXPSEwLEcuX2NvbnRhaW5lcj1sZSxsZS5fX3Z1ZV9hcHBfXz1HLEcuX2luc3RhbmNlPWRlLmNvbXBvbmVudCxMbyhkZS5jb21wb25lbnQpfHxkZS5jb21wb25lbnQucHJveHl9fSx1bm1vdW50KCl7VyYmKGEobnVsbCxHLl9jb250YWluZXIpLGRlbGV0ZSBHLl9jb250YWluZXIuX192dWVfYXBwX18pfSxwcm92aWRlKGxlLHplKXtyZXR1cm4gTy5wcm92aWRlc1tsZV09emUsR319O3JldHVybiBHfX1mdW5jdGlvbiBzbyhhLHUsbSxTKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITE7aWYoRS5pc0FycmF5KGEpKXthLmZvckVhY2goKF90LGF0KT0+c28oX3QsdSYmKEUuaXNBcnJheSh1KT91W2F0XTp1KSxtLFMsSSkpO3JldHVybn1pZighKExyKFMpJiYhSSkpe3ZhciBPPVMuc2hhcGVGbGFnJjQ/TG8oUy5jb21wb25lbnQpfHxTLmNvbXBvbmVudC5wcm94eTpTLmVsLEY9ST9udWxsOk8se2k6VyxyOkd9PWEsbGU9dSYmdS5yLHplPVcucmVmcz09PUUuRU1QVFlfT0JKP1cucmVmcz17fTpXLnJlZnMsaXQ9Vy5zZXR1cFN0YXRlO2lmKGxlIT1udWxsJiZsZSE9PUcmJihFLmlzU3RyaW5nKGxlKT8oemVbbGVdPW51bGwsRS5oYXNPd24oaXQsbGUpJiYoaXRbbGVdPW51bGwpKTpSLmlzUmVmKGxlKSYmKGxlLnZhbHVlPW51bGwpKSxFLmlzRnVuY3Rpb24oRykpVHQoRyxXLDEyLFtGLHplXSk7ZWxzZXt2YXIgZGU9RS5pc1N0cmluZyhHKSxHZT1SLmlzUmVmKEcpO2lmKGRlfHxHZSl7dmFyIHFlPSgpPT57aWYoYS5mKXt2YXIgX3Q9ZGU/RS5oYXNPd24oaXQsRyk/aXRbR106emVbR106Ry52YWx1ZTtJP0UuaXNBcnJheShfdCkmJkUucmVtb3ZlKF90LE8pOkUuaXNBcnJheShfdCk/X3QuaW5jbHVkZXMoTyl8fF90LnB1c2goTyk6ZGU/KHplW0ddPVtPXSxFLmhhc093bihpdCxHKSYmKGl0W0ddPXplW0ddKSk6KEcudmFsdWU9W09dLGEuayYmKHplW2Eua109Ry52YWx1ZSkpfWVsc2UgZGU/KHplW0ddPUYsRS5oYXNPd24oaXQsRykmJihpdFtHXT1GKSk6R2UmJihHLnZhbHVlPUYsYS5rJiYoemVbYS5rXT1GKSl9O0Y/KHFlLmlkPS0xLGhyKHFlLG0pKTpxZSgpfX19fXZhciBoaT0hMSxPaT1hPT4vc3ZnLy50ZXN0KGEubmFtZXNwYWNlVVJJKSYmYS50YWdOYW1lIT09ImZvcmVpZ25PYmplY3QiLFppPWE9PmEubm9kZVR5cGU9PT04O2Z1bmN0aW9uIGdpKGEpe3ZhcnttdDp1LHA6bSxvOntwYXRjaFByb3A6UyxjcmVhdGVUZXh0OkksbmV4dFNpYmxpbmc6TyxwYXJlbnROb2RlOkYscmVtb3ZlOlcsaW5zZXJ0OkcsY3JlYXRlQ29tbWVudDpsZX19PWEsemU9KFNlLGJlKT0+e2lmKCFiZS5oYXNDaGlsZE5vZGVzKCkpe20obnVsbCxTZSxiZSksa24oKSxiZS5fdm5vZGU9U2U7cmV0dXJufWhpPSExLGl0KGJlLmZpcnN0Q2hpbGQsU2UsbnVsbCxudWxsLG51bGwpLGtuKCksYmUuX3Zub2RlPVNlLGhpJiZjb25zb2xlLmVycm9yKCJIeWRyYXRpb24gY29tcGxldGVkIGJ1dCBjb250YWlucyBtaXNtYXRjaGVzLiIpfSxpdD1mdW5jdGlvbihTZSxiZSxDZSxzdCxGZSl7dmFyIFB0PWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMSxpPVppKFNlKSYmU2UuZGF0YT09PSJbIixsPSgpPT5fdChTZSxiZSxDZSxzdCxGZSxpKSx7dHlwZTpkLHJlZjpfLHNoYXBlRmxhZzpBLHBhdGNoRmxhZzpDfT1iZSxrPVNlLm5vZGVUeXBlO2JlLmVsPVNlLEM9PT0tMiYmKFB0PSExLGJlLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgTD1udWxsO3N3aXRjaChkKXtjYXNlIGVlOmshPT0zP2JlLmNoaWxkcmVuPT09IiI/KEcoYmUuZWw9SSgiIiksRihTZSksU2UpLEw9U2UpOkw9bCgpOihTZS5kYXRhIT09YmUuY2hpbGRyZW4mJihoaT0hMCxTZS5kYXRhPWJlLmNoaWxkcmVuKSxMPU8oU2UpKTticmVhaztjYXNlIGNlOmshPT04fHxpP0w9bCgpOkw9TyhTZSk7YnJlYWs7Y2FzZSBoZTppZihpJiYoU2U9TyhTZSksaz1TZS5ub2RlVHlwZSksaz09PTF8fGs9PT0zKXtMPVNlO2Zvcih2YXIgSD0hYmUuY2hpbGRyZW4ubGVuZ3RoLHRlPTA7dGU8YmUuc3RhdGljQ291bnQ7dGUrKylIJiYoYmUuY2hpbGRyZW4rPUwubm9kZVR5cGU9PT0xP0wub3V0ZXJIVE1MOkwuZGF0YSksdGU9PT1iZS5zdGF0aWNDb3VudC0xJiYoYmUuYW5jaG9yPUwpLEw9TyhMKTtyZXR1cm4gaT9PKEwpOkx9ZWxzZSBsKCk7YnJlYWs7Y2FzZSBKOmk/TD1xZShTZSxiZSxDZSxzdCxGZSxQdCk6TD1sKCk7YnJlYWs7ZGVmYXVsdDppZihBJjEpayE9PTF8fGJlLnR5cGUudG9Mb3dlckNhc2UoKSE9PVNlLnRhZ05hbWUudG9Mb3dlckNhc2UoKT9MPWwoKTpMPWRlKFNlLGJlLENlLHN0LEZlLFB0KTtlbHNlIGlmKEEmNil7YmUuc2xvdFNjb3BlSWRzPUZlO3ZhciBnZT1GKFNlKTtpZih1KGJlLGdlLG51bGwsQ2Usc3QsT2koZ2UpLFB0KSxMPWk/YXQoU2UpOk8oU2UpLEwmJlppKEwpJiZMLmRhdGE9PT0idGVsZXBvcnQgZW5kIiYmKEw9TyhMKSksTHIoYmUpKXt2YXIga2U7aT8oa2U9JHQoSiksa2UuYW5jaG9yPUw/TC5wcmV2aW91c1NpYmxpbmc6Z2UubGFzdENoaWxkKTprZT1TZS5ub2RlVHlwZT09PTM/aWkoIiIpOiR0KCJkaXYiKSxrZS5lbD1TZSxiZS5jb21wb25lbnQuc3ViVHJlZT1rZX19ZWxzZSBBJjY0P2shPT04P0w9bCgpOkw9YmUudHlwZS5oeWRyYXRlKFNlLGJlLENlLHN0LEZlLFB0LGEsR2UpOkEmMTI4JiYoTD1iZS50eXBlLmh5ZHJhdGUoU2UsYmUsQ2Usc3QsT2koRihTZSkpLEZlLFB0LGEsaXQpKX1yZXR1cm4gXyE9bnVsbCYmc28oXyxudWxsLHN0LGJlKSxMfSxkZT0oU2UsYmUsQ2Usc3QsRmUsUHQpPT57UHQ9UHR8fCEhYmUuZHluYW1pY0NoaWxkcmVuO3Zhcnt0eXBlOmkscHJvcHM6bCxwYXRjaEZsYWc6ZCxzaGFwZUZsYWc6XyxkaXJzOkF9PWJlLEM9aT09PSJpbnB1dCImJkF8fGk9PT0ib3B0aW9uIjtpZihDfHxkIT09LTEpe2lmKEEmJldyKGJlLG51bGwsQ2UsImNyZWF0ZWQiKSxsKWlmKEN8fCFQdHx8ZCYoMTZ8MzIpKWZvcih2YXIgayBpbiBsKShDJiZrLmVuZHNXaXRoKCJ2YWx1ZSIpfHxFLmlzT24oaykmJiFFLmlzUmVzZXJ2ZWRQcm9wKGspKSYmUyhTZSxrLG51bGwsbFtrXSwhMSx2b2lkIDAsQ2UpO2Vsc2UgbC5vbkNsaWNrJiZTKFNlLCJvbkNsaWNrIixudWxsLGwub25DbGljaywhMSx2b2lkIDAsQ2UpO3ZhciBMO2lmKChMPWwmJmwub25Wbm9kZUJlZm9yZU1vdW50KSYmQ3IoTCxDZSxiZSksQSYmV3IoYmUsbnVsbCxDZSwiYmVmb3JlTW91bnQiKSwoKEw9bCYmbC5vblZub2RlTW91bnRlZCl8fEEpJiZTaSgoKT0+e0wmJkNyKEwsQ2UsYmUpLEEmJldyKGJlLG51bGwsQ2UsIm1vdW50ZWQiKX0sc3QpLF8mMTYmJiEobCYmKGwuaW5uZXJIVE1MfHxsLnRleHRDb250ZW50KSkpZm9yKHZhciBIPUdlKFNlLmZpcnN0Q2hpbGQsYmUsU2UsQ2Usc3QsRmUsUHQpO0g7KXtoaT0hMDt2YXIgdGU9SDtIPUgubmV4dFNpYmxpbmcsVyh0ZSl9ZWxzZSBfJjgmJlNlLnRleHRDb250ZW50IT09YmUuY2hpbGRyZW4mJihoaT0hMCxTZS50ZXh0Q29udGVudD1iZS5jaGlsZHJlbil9cmV0dXJuIFNlLm5leHRTaWJsaW5nfSxHZT0oU2UsYmUsQ2Usc3QsRmUsUHQsaSk9PntpPWl8fCEhYmUuZHluYW1pY0NoaWxkcmVuO2Zvcih2YXIgbD1iZS5jaGlsZHJlbixkPWwubGVuZ3RoLF89MDtfPGQ7XysrKXt2YXIgQT1pP2xbX106bFtfXT16bihsW19dKTtpZihTZSlTZT1pdChTZSxBLHN0LEZlLFB0LGkpO2Vsc2V7aWYoQS50eXBlPT09ZWUmJiFBLmNoaWxkcmVuKWNvbnRpbnVlO2hpPSEwLG0obnVsbCxBLENlLG51bGwsc3QsRmUsT2koQ2UpLFB0KX19cmV0dXJuIFNlfSxxZT0oU2UsYmUsQ2Usc3QsRmUsUHQpPT57dmFye3Nsb3RTY29wZUlkczppfT1iZTtpJiYoRmU9RmU/RmUuY29uY2F0KGkpOmkpO3ZhciBsPUYoU2UpLGQ9R2UoTyhTZSksYmUsbCxDZSxzdCxGZSxQdCk7cmV0dXJuIGQmJlppKGQpJiZkLmRhdGE9PT0iXSI/TyhiZS5hbmNob3I9ZCk6KGhpPSEwLEcoYmUuYW5jaG9yPWxlKCJdIiksbCxkKSxkKX0sX3Q9KFNlLGJlLENlLHN0LEZlLFB0KT0+e2lmKGhpPSEwLGJlLmVsPW51bGwsUHQpZm9yKHZhciBpPWF0KFNlKTs7KXt2YXIgbD1PKFNlKTtpZihsJiZsIT09aSlXKGwpO2Vsc2UgYnJlYWt9dmFyIGQ9TyhTZSksXz1GKFNlKTtyZXR1cm4gVyhTZSksbShudWxsLGJlLF8sZCxDZSxzdCxPaShfKSxGZSksZH0sYXQ9U2U9Pntmb3IodmFyIGJlPTA7U2U7KWlmKFNlPU8oU2UpLFNlJiZaaShTZSkmJihTZS5kYXRhPT09IlsiJiZiZSsrLFNlLmRhdGE9PT0iXSIpKXtpZihiZT09PTApcmV0dXJuIE8oU2UpO2JlLS19cmV0dXJuIFNlfTtyZXR1cm5bemUsaXRdfXZhciBocj1TaTtmdW5jdGlvbiB1cihhKXtyZXR1cm4gSGEoYSl9ZnVuY3Rpb24gJGEoYSl7cmV0dXJuIEhhKGEsZ2kpfWZ1bmN0aW9uIEhhKGEsdSl7dmFyIG09RS5nZXRHbG9iYWxUaGlzKCk7bS5fX1ZVRV9fPSEwO3ZhcntpbnNlcnQ6UyxyZW1vdmU6SSxwYXRjaFByb3A6Tyxmb3JjZVBhdGNoUHJvcDpGLGNyZWF0ZUVsZW1lbnQ6VyxjcmVhdGVUZXh0OkcsY3JlYXRlQ29tbWVudDpsZSxzZXRUZXh0OnplLHNldEVsZW1lbnRUZXh0Oml0LHBhcmVudE5vZGU6ZGUsbmV4dFNpYmxpbmc6R2Usc2V0U2NvcGVJZDpxZT1FLk5PT1AsaW5zZXJ0U3RhdGljQ29udGVudDpfdH09YSxhdD1mdW5jdGlvbihNLGosYWUpe3ZhciBuZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbCxpZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxWZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bnVsbCxydD1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEsWWU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOm51bGwsS2U9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiEhai5keW5hbWljQ2hpbGRyZW47aWYoTSE9PWope00mJiFxdChNLGopJiYobmU9QWUoTSksUWUoTSxpZSxWZSwhMCksTT1udWxsKSxqLnBhdGNoRmxhZz09PS0yJiYoS2U9ITEsai5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6VWUscmVmOkh0LHNoYXBlRmxhZzp2dH09ajtzd2l0Y2goVWUpe2Nhc2UgZWU6U2UoTSxqLGFlLG5lKTticmVhaztjYXNlIGNlOmJlKE0saixhZSxuZSk7YnJlYWs7Y2FzZSBoZTpNPT1udWxsJiZDZShqLGFlLG5lLHJ0KTticmVhaztjYXNlIEo6ayhNLGosYWUsbmUsaWUsVmUscnQsWWUsS2UpO2JyZWFrO2RlZmF1bHQ6dnQmMT9QdChNLGosYWUsbmUsaWUsVmUscnQsWWUsS2UpOnZ0JjY/TChNLGosYWUsbmUsaWUsVmUscnQsWWUsS2UpOih2dCY2NHx8dnQmMTI4KSYmVWUucHJvY2VzcyhNLGosYWUsbmUsaWUsVmUscnQsWWUsS2UsQXQpfUh0IT1udWxsJiZpZSYmc28oSHQsTSYmTS5yZWYsVmUsanx8TSwhail9fSxTZT0oTSxqLGFlLG5lKT0+e2lmKE09PW51bGwpUyhqLmVsPUcoai5jaGlsZHJlbiksYWUsbmUpO2Vsc2V7dmFyIGllPWouZWw9TS5lbDtqLmNoaWxkcmVuIT09TS5jaGlsZHJlbiYmemUoaWUsai5jaGlsZHJlbil9fSxiZT0oTSxqLGFlLG5lKT0+e009PW51bGw/UyhqLmVsPWxlKGouY2hpbGRyZW58fCIiKSxhZSxuZSk6ai5lbD1NLmVsfSxDZT0oTSxqLGFlLG5lKT0+e1tNLmVsLE0uYW5jaG9yXT1fdChNLmNoaWxkcmVuLGosYWUsbmUsTS5lbCxNLmFuY2hvcil9LHN0PShNLGosYWUpPT57Zm9yKHZhcntlbDpuZSxhbmNob3I6aWV9PU0sVmU7bmUmJm5lIT09aWU7KVZlPUdlKG5lKSxTKG5lLGosYWUpLG5lPVZlO1MoaWUsaixhZSl9LEZlPU09Pntmb3IodmFye2VsOmosYW5jaG9yOmFlfT1NLG5lO2omJmohPT1hZTspbmU9R2UoaiksSShqKSxqPW5lO0koYWUpfSxQdD0oTSxqLGFlLG5lLGllLFZlLHJ0LFllLEtlKT0+e3J0PXJ0fHxqLnR5cGU9PT0ic3ZnIixNPT1udWxsP2koaixhZSxuZSxpZSxWZSxydCxZZSxLZSk6XyhNLGosaWUsVmUscnQsWWUsS2UpfSxpPShNLGosYWUsbmUsaWUsVmUscnQsWWUpPT57dmFyIEtlLFVlLHt0eXBlOkh0LHByb3BzOnZ0LHNoYXBlRmxhZzpCdCx0cmFuc2l0aW9uOk10LGRpcnM6RG59PU07aWYoS2U9TS5lbD1XKE0udHlwZSxWZSx2dCYmdnQuaXMsdnQpLEJ0Jjg/aXQoS2UsTS5jaGlsZHJlbik6QnQmMTYmJmQoTS5jaGlsZHJlbixLZSxudWxsLG5lLGllLFZlJiZIdCE9PSJmb3JlaWduT2JqZWN0IixydCxZZSksRG4mJldyKE0sbnVsbCxuZSwiY3JlYXRlZCIpLGwoS2UsTSxNLnNjb3BlSWQscnQsbmUpLHZ0KXtmb3IodmFyIE1uIGluIHZ0KU1uIT09InZhbHVlIiYmIUUuaXNSZXNlcnZlZFByb3AoTW4pJiZPKEtlLE1uLG51bGwsdnRbTW5dLFZlLE0uY2hpbGRyZW4sbmUsaWUsTGUsTS5ob3N0SW5zdGFuY2UpOyJ2YWx1ZSJpbiB2dCYmTyhLZSwidmFsdWUiLG51bGwsdnQudmFsdWUsITEsW10sbmUsbnVsbCx2b2lkIDAsTS5ob3N0SW5zdGFuY2UpLChVZT12dC5vblZub2RlQmVmb3JlTW91bnQpJiZDcihVZSxuZSxNKX1EbiYmV3IoTSxudWxsLG5lLCJiZWZvcmVNb3VudCIpO3ZhciBibj0oIWllfHxpZSYmIWllLnBlbmRpbmdCcmFuY2gpJiZNdCYmIU10LnBlcnNpc3RlZDtibiYmTXQuYmVmb3JlRW50ZXIoS2UpLFMoS2UsaixhZSksKChVZT12dCYmdnQub25Wbm9kZU1vdW50ZWQpfHxibnx8RG4pJiZocigoKT0+e1VlJiZDcihVZSxuZSxNKSxibiYmTXQuZW50ZXIoS2UpLERuJiZXcihNLG51bGwsbmUsIm1vdW50ZWQiKX0saWUpfSxsPShNLGosYWUsbmUsaWUpPT57aWYoYWUmJnFlKE0sYWUpLG5lKWZvcih2YXIgVmU9MDtWZTxuZS5sZW5ndGg7VmUrKylxZShNLG5lW1ZlXSk7aWYoaWUpe3ZhciBydD1pZS5zdWJUcmVlO2lmKGo9PT1ydCl7dmFyIFllPWllLnZub2RlO2woTSxZZSxZZS5zY29wZUlkLFllLnNsb3RTY29wZUlkcyxpZS5wYXJlbnQpfX19LGQ9ZnVuY3Rpb24oTSxqLGFlLG5lLGllLFZlLHJ0LFllKXtmb3IodmFyIEtlPWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTowLFVlPUtlO1VlPE0ubGVuZ3RoO1VlKyspe3ZhciBIdD1NW1VlXT1ZZT9XbihNW1VlXSk6em4oTVtVZV0pO2F0KG51bGwsSHQsaixhZSxuZSxpZSxWZSxydCxZZSl9fSxfPShNLGosYWUsbmUsaWUsVmUscnQpPT57dmFyIFllPWouZWw9TS5lbCx7cGF0Y2hGbGFnOktlLGR5bmFtaWNDaGlsZHJlbjpVZSxkaXJzOkh0fT1qO0tlfD1NLnBhdGNoRmxhZyYxNjt2YXIgdnQ9TS5wcm9wc3x8RS5FTVBUWV9PQkosQnQ9ai5wcm9wc3x8RS5FTVBUWV9PQkosTXQ7YWUmJlhpKGFlLCExKSwoTXQ9QnQub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJkNyKE10LGFlLGosTSksSHQmJldyKGosTSxhZSwiYmVmb3JlVXBkYXRlIiksYWUmJlhpKGFlLCEwKTt2YXIgRG49aWUmJmoudHlwZSE9PSJmb3JlaWduT2JqZWN0IjtpZihVZT9BKE0uZHluYW1pY0NoaWxkcmVuLFVlLFllLGFlLG5lLERuLFZlKTpydHx8dWUoTSxqLFllLG51bGwsYWUsbmUsRG4sVmUsITEpLEtlPjApe2lmKEtlJjE2KUMoWWUsaix2dCxCdCxhZSxuZSxpZSk7ZWxzZSBpZihLZSYyJiZ2dC5jbGFzcyE9PUJ0LmNsYXNzJiZPKFllLCJjbGFzcyIsbnVsbCxCdC5jbGFzcyxpZSxbXSxhZSxudWxsLHZvaWQgMCxqLmhvc3RJbnN0YW5jZSksS2UmNCYmTyhZZSwic3R5bGUiLHZ0LnN0eWxlLEJ0LnN0eWxlLGllLFtdLGFlLG51bGwsdm9pZCAwLGouaG9zdEluc3RhbmNlKSxLZSY4KWZvcih2YXIgTW49ai5keW5hbWljUHJvcHMsYm49MDtibjxNbi5sZW5ndGg7Ym4rKyl7dmFyIFNuPU1uW2JuXSxncj12dFtTbl0sYWk9QnRbU25dOyhhaSE9PWdyfHxTbj09PSJ2YWx1ZSJ8fEYmJkYoWWUsU24pKSYmTyhZZSxTbixncixhaSxpZSxNLmNoaWxkcmVuLGFlLG5lLExlLGouaG9zdEluc3RhbmNlKX1LZSYxJiZNLmNoaWxkcmVuIT09ai5jaGlsZHJlbiYmaXQoWWUsai5jaGlsZHJlbil9ZWxzZSFydCYmVWU9PW51bGwmJkMoWWUsaix2dCxCdCxhZSxuZSxpZSk7KChNdD1CdC5vblZub2RlVXBkYXRlZCl8fEh0KSYmaHIoKCk9PntNdCYmQ3IoTXQsYWUsaixNKSxIdCYmV3IoaixNLGFlLCJ1cGRhdGVkIil9LG5lKX0sQT0oTSxqLGFlLG5lLGllLFZlLHJ0KT0+e2Zvcih2YXIgWWU9MDtZZTxqLmxlbmd0aDtZZSsrKXt2YXIgS2U9TVtZZV0sVWU9altZZV0sSHQ9S2UuZWwmJihLZS50eXBlPT09Snx8IXF0KEtlLFVlKXx8S2Uuc2hhcGVGbGFnJig2fDY0KSk/ZGUoS2UuZWwpOmFlO2F0KEtlLFVlLEh0LG51bGwsbmUsaWUsVmUscnQsITApfX0sQz0oTSxqLGFlLG5lLGllLFZlLHJ0KT0+e2lmKGFlIT09bmUpe2lmKGFlIT09RS5FTVBUWV9PQkopZm9yKHZhciBZZSBpbiBhZSkhRS5pc1Jlc2VydmVkUHJvcChZZSkmJiEoWWUgaW4gbmUpJiZPKE0sWWUsYWVbWWVdLG51bGwscnQsai5jaGlsZHJlbixpZSxWZSxMZSxqLmhvc3RJbnN0YW5jZSk7Zm9yKHZhciBLZSBpbiBuZSlpZighRS5pc1Jlc2VydmVkUHJvcChLZSkpe3ZhciBVZT1uZVtLZV0sSHQ9YWVbS2VdOyhVZSE9PUh0JiZLZSE9PSJ2YWx1ZSJ8fEYmJkYoTSxLZSkpJiZPKE0sS2UsSHQsVWUscnQsai5jaGlsZHJlbixpZSxWZSxMZSxqLmhvc3RJbnN0YW5jZSl9InZhbHVlImluIG5lJiZPKE0sInZhbHVlIixhZS52YWx1ZSxuZS52YWx1ZSwhMSxbXSxpZSxudWxsLHZvaWQgMCxqLmhvc3RJbnN0YW5jZSl9fSxrPShNLGosYWUsbmUsaWUsVmUscnQsWWUsS2UpPT57dmFyIFVlPWouZWw9TT9NLmVsOkcoIiIpLEh0PWouYW5jaG9yPU0/TS5hbmNob3I6RygiIikse3BhdGNoRmxhZzp2dCxkeW5hbWljQ2hpbGRyZW46QnQsc2xvdFNjb3BlSWRzOk10fT1qO010JiYoWWU9WWU/WWUuY29uY2F0KE10KTpNdCksTT09bnVsbD8oUyhVZSxhZSxuZSksUyhIdCxhZSxuZSksZChqLmNoaWxkcmVuLGFlLEh0LGllLFZlLHJ0LFllLEtlKSk6dnQ+MCYmdnQmNjQmJkJ0JiZNLmR5bmFtaWNDaGlsZHJlbj8oQShNLmR5bmFtaWNDaGlsZHJlbixCdCxhZSxpZSxWZSxydCxZZSksKGoua2V5IT1udWxsfHxpZSYmaj09PWllLnN1YlRyZWUpJiZsbyhNLGosITApKTp1ZShNLGosYWUsSHQsaWUsVmUscnQsWWUsS2UpfSxMPShNLGosYWUsbmUsaWUsVmUscnQsWWUsS2UpPT57ai5zbG90U2NvcGVJZHM9WWUsTT09bnVsbD9qLnNoYXBlRmxhZyY1MTI/aWUuY3R4LmFjdGl2YXRlKGosYWUsbmUscnQsS2UpOkgoaixhZSxuZSxpZSxWZSxydCxLZSk6dGUoTSxqLEtlKX0sSD0oTSxqLGFlLG5lLGllLFZlLHJ0KT0+e3ZhciBZZT1NLmNvbXBvbmVudD1jcyhNLG5lLGllKTtpZihCbihNKSYmKFllLmN0eC5yZW5kZXJlcj1BdCksdXMoWWUpLFllLmFzeW5jRGVwKXtpZihpZSYmaWUucmVnaXN0ZXJEZXAoWWUsZ2UpLCFNLmVsKXt2YXIgS2U9WWUuc3ViVHJlZT0kdChjZSk7YmUobnVsbCxLZSxqLGFlKX1yZXR1cm59Z2UoWWUsTSxqLGFlLGllLFZlLHJ0KX0sdGU9KE0saixhZSk9Pnt2YXIgbmU9ai5jb21wb25lbnQ9TS5jb21wb25lbnQ7aWYoV2koTSxqLGFlKSlpZihuZS5hc3luY0RlcCYmIW5lLmFzeW5jUmVzb2x2ZWQpe2tlKG5lLGosYWUpO3JldHVybn1lbHNlIG5lLm5leHQ9aiwkcihuZS51cGRhdGUpLG5lLnVwZGF0ZSgpO2Vsc2Ugai5lbD1NLmVsLG5lLnZub2RlPWp9LGdlPShNLGosYWUsbmUsaWUsVmUscnQpPT57dmFyIFllPSgpPT57aWYoTS5pc01vdW50ZWQpe3ZhcntuZXh0OmVuLGJ1OmNuLHU6Zm8scGFyZW50OnEsdm5vZGU6UX09TSxtZT1lbixSZTtYaShNLCExKSxlbj8oZW4uZWw9US5lbCxrZShNLGVuLHJ0KSk6ZW49USxjbiYmRS5pbnZva2VBcnJheUZucyhjbiksKFJlPWVuLnByb3BzJiZlbi5wcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSYmQ3IoUmUscSxlbixRKSxYaShNLCEwKTt2YXIgTWU9S28oTSksWGU9TS5zdWJUcmVlO00uc3ViVHJlZT1NZSxhdChYZSxNZSxkZShYZS5lbCksQWUoWGUpLE0saWUsVmUpLGVuLmVsPU1lLmVsLG1lPT09bnVsbCYmaW8oTSxNZS5lbCksZm8mJmhyKGZvLGllKSwoUmU9ZW4ucHJvcHMmJmVuLnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmaHIoKCk9PkNyKFJlLHEsZW4sUSksaWUpfWVsc2V7dmFyIEh0LHtlbDp2dCxwcm9wczpCdH09aix7Ym06TXQsbTpEbixwYXJlbnQ6TW59PU0sYm49THIoaik7aWYoWGkoTSwhMSksTXQmJkUuaW52b2tlQXJyYXlGbnMoTXQpLCFibiYmKEh0PUJ0JiZCdC5vblZub2RlQmVmb3JlTW91bnQpJiZDcihIdCxNbixqKSxYaShNLCEwKSx2dCYmeHQpe3ZhciBTbj0oKT0+e00uc3ViVHJlZT1LbyhNKSx4dCh2dCxNLnN1YlRyZWUsTSxpZSxudWxsKX07Ym4/ai50eXBlLl9fYXN5bmNMb2FkZXIoKS50aGVuKCgpPT4hTS5pc1VubW91bnRlZCYmU24oKSk6U24oKX1lbHNle3ZhciBncj1NLnN1YlRyZWU9S28oTSk7YXQobnVsbCxncixhZSxuZSxNLGllLFZlKSxqLmVsPWdyLmVsfWlmKERuJiZocihEbixpZSksIWJuJiYoSHQ9QnQmJkJ0Lm9uVm5vZGVNb3VudGVkKSl7dmFyIGFpPWo7aHIoKCk9PkNyKEh0LE1uLGFpKSxpZSl9KGouc2hhcGVGbGFnJjI1Nnx8TW4mJkxyKE1uLnZub2RlKSYmTW4udm5vZGUuc2hhcGVGbGFnJjI1NikmJk0uYSYmaHIoTS5hLGllKSxNLmlzTW91bnRlZD0hMCxqPWFlPW5lPW51bGx9fSxLZT1NLmVmZmVjdD1uZXcgUi5SZWFjdGl2ZUVmZmVjdChZZSwoKT0+Q24oVWUpLE0uc2NvcGUpLFVlPU0udXBkYXRlPSgpPT5LZS5ydW4oKTtVZS5pZD1NLnVpZCxYaShNLCEwKSxVZSgpfSxrZT0oTSxqLGFlKT0+e2ouY29tcG9uZW50PU07dmFyIG5lPU0udm5vZGUucHJvcHM7TS52bm9kZT1qLE0ubmV4dD1udWxsLGlzKE0sai5wcm9wcyxuZSxhZSksb3MoTSxqLmNoaWxkcmVuLGFlKSxSLnBhdXNlVHJhY2tpbmcoKSx5aSgpLFIucmVzZXRUcmFja2luZygpfSx1ZT1mdW5jdGlvbihNLGosYWUsbmUsaWUsVmUscnQsWWUpe3ZhciBLZT1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06ITEsVWU9TSYmTS5jaGlsZHJlbixIdD1NP00uc2hhcGVGbGFnOjAsdnQ9ai5jaGlsZHJlbix7cGF0Y2hGbGFnOkJ0LHNoYXBlRmxhZzpNdH09ajtpZihCdD4wKXtpZihCdCYxMjgpe1dlKFVlLHZ0LGFlLG5lLGllLFZlLHJ0LFllLEtlKTtyZXR1cm59ZWxzZSBpZihCdCYyNTYpe1BlKFVlLHZ0LGFlLG5lLGllLFZlLHJ0LFllLEtlKTtyZXR1cm59fU10Jjg/KEh0JjE2JiZMZShVZSxpZSxWZSksdnQhPT1VZSYmaXQoYWUsdnQpKTpIdCYxNj9NdCYxNj9XZShVZSx2dCxhZSxuZSxpZSxWZSxydCxZZSxLZSk6TGUoVWUsaWUsVmUsITApOihIdCY4JiZpdChhZSwiIiksTXQmMTYmJmQodnQsYWUsbmUsaWUsVmUscnQsWWUsS2UpKX0sUGU9KE0saixhZSxuZSxpZSxWZSxydCxZZSxLZSk9PntNPU18fEUuRU1QVFlfQVJSLGo9anx8RS5FTVBUWV9BUlI7dmFyIFVlPU0ubGVuZ3RoLEh0PWoubGVuZ3RoLHZ0PU1hdGgubWluKFVlLEh0KSxCdDtmb3IoQnQ9MDtCdDx2dDtCdCsrKXt2YXIgTXQ9altCdF09S2U/V24oaltCdF0pOnpuKGpbQnRdKTthdChNW0J0XSxNdCxhZSxudWxsLGllLFZlLHJ0LFllLEtlKX1VZT5IdD9MZShNLGllLFZlLCEwLCExLHZ0KTpkKGosYWUsbmUsaWUsVmUscnQsWWUsS2UsdnQpfSxXZT0oTSxqLGFlLG5lLGllLFZlLHJ0LFllLEtlKT0+e2Zvcih2YXIgVWU9MCxIdD1qLmxlbmd0aCx2dD1NLmxlbmd0aC0xLEJ0PUh0LTE7VWU8PXZ0JiZVZTw9QnQ7KXt2YXIgTXQ9TVtVZV0sRG49altVZV09S2U/V24oaltVZV0pOnpuKGpbVWVdKTtpZihxdChNdCxEbikpYXQoTXQsRG4sYWUsbnVsbCxpZSxWZSxydCxZZSxLZSk7ZWxzZSBicmVhaztVZSsrfWZvcig7VWU8PXZ0JiZVZTw9QnQ7KXt2YXIgTW49TVt2dF0sYm49altCdF09S2U/V24oaltCdF0pOnpuKGpbQnRdKTtpZihxdChNbixibikpYXQoTW4sYm4sYWUsbnVsbCxpZSxWZSxydCxZZSxLZSk7ZWxzZSBicmVhazt2dC0tLEJ0LS19aWYoVWU+dnQpe2lmKFVlPD1CdClmb3IodmFyIFNuPUJ0KzEsZ3I9U248SHQ/altTbl0uZWw6bmU7VWU8PUJ0OylhdChudWxsLGpbVWVdPUtlP1duKGpbVWVdKTp6bihqW1VlXSksYWUsZ3IsaWUsVmUscnQsWWUsS2UpLFVlKyt9ZWxzZSBpZihVZT5CdClmb3IoO1VlPD12dDspUWUoTVtVZV0saWUsVmUsITApLFVlKys7ZWxzZXt2YXIgYWk9VWUsZW49VWUsY249bmV3IE1hcDtmb3IoVWU9ZW47VWU8PUJ0O1VlKyspe3ZhciBmbz1qW1VlXT1LZT9XbihqW1VlXSk6em4oaltVZV0pO2ZvLmtleSE9bnVsbCYmY24uc2V0KGZvLmtleSxVZSl9dmFyIHEsUT0wLG1lPUJ0LWVuKzEsUmU9ITEsTWU9MCxYZT1uZXcgQXJyYXkobWUpO2ZvcihVZT0wO1VlPG1lO1VlKyspWGVbVWVdPTA7Zm9yKFVlPWFpO1VlPD12dDtVZSsrKXt2YXIgYnQ9TVtVZV07aWYoUT49bWUpe1FlKGJ0LGllLFZlLCEwKTtjb250aW51ZX12YXIgZXQ9dm9pZCAwO2lmKGJ0LmtleSE9bnVsbClldD1jbi5nZXQoYnQua2V5KTtlbHNlIGZvcihxPWVuO3E8PUJ0O3ErKylpZihYZVtxLWVuXT09PTAmJnF0KGJ0LGpbcV0pKXtldD1xO2JyZWFrfWV0PT09dm9pZCAwP1FlKGJ0LGllLFZlLCEwKTooWGVbZXQtZW5dPVVlKzEsZXQ+PU1lP01lPWV0OlJlPSEwLGF0KGJ0LGpbZXRdLGFlLG51bGwsaWUsVmUscnQsWWUsS2UpLFErKyl9dmFyIHR0PVJlP2NvKFhlKTpFLkVNUFRZX0FSUjtmb3IocT10dC5sZW5ndGgtMSxVZT1tZS0xO1VlPj0wO1VlLS0pe3ZhciAkZT1lbitVZSxXdD1qWyRlXSxGdD0kZSsxPEh0P2pbJGUrMV0uZWw6bmU7WGVbVWVdPT09MD9hdChudWxsLFd0LGFlLEZ0LGllLFZlLHJ0LFllLEtlKTpSZSYmKHE8MHx8VWUhPT10dFtxXT91dChXdCxhZSxGdCwyKTpxLS0pfX19LHV0PWZ1bmN0aW9uKE0saixhZSxuZSl7dmFyIGllPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLHtlbDpWZSx0eXBlOnJ0LHRyYW5zaXRpb246WWUsY2hpbGRyZW46S2Usc2hhcGVGbGFnOlVlfT1NO2lmKFVlJjYpe3V0KE0uY29tcG9uZW50LnN1YlRyZWUsaixhZSxuZSk7cmV0dXJufWlmKFVlJjEyOCl7TS5zdXNwZW5zZS5tb3ZlKGosYWUsbmUpO3JldHVybn1pZihVZSY2NCl7cnQubW92ZShNLGosYWUsQXQpO3JldHVybn1pZihydD09PUope1MoVmUsaixhZSk7Zm9yKHZhciBIdD0wO0h0PEtlLmxlbmd0aDtIdCsrKXV0KEtlW0h0XSxqLGFlLG5lKTtTKE0uYW5jaG9yLGosYWUpO3JldHVybn1pZihydD09PWhlKXtzdChNLGosYWUpO3JldHVybn12YXIgdnQ9bmUhPT0yJiZVZSYxJiZZZTtpZih2dClpZihuZT09PTApWWUuYmVmb3JlRW50ZXIoVmUpLFMoVmUsaixhZSksaHIoKCk9PlllLmVudGVyKFZlKSxpZSk7ZWxzZXt2YXJ7bGVhdmU6QnQsZGVsYXlMZWF2ZTpNdCxhZnRlckxlYXZlOkRufT1ZZSxNbj0oKT0+UyhWZSxqLGFlKSxibj0oKT0+e0J0KFZlLCgpPT57TW4oKSxEbiYmRG4oKX0pfTtNdD9NdChWZSxNbixibik6Ym4oKX1lbHNlIFMoVmUsaixhZSl9LFFlPWZ1bmN0aW9uKE0saixhZSl7dmFyIG5lPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxpZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITEse3R5cGU6VmUscHJvcHM6cnQscmVmOlllLGNoaWxkcmVuOktlLGR5bmFtaWNDaGlsZHJlbjpVZSxzaGFwZUZsYWc6SHQscGF0Y2hGbGFnOnZ0LGRpcnM6QnR9PU07aWYoWWUhPW51bGwmJnNvKFllLG51bGwsYWUsTSwhMCksSHQmMjU2KXtqLmN0eC5kZWFjdGl2YXRlKE0pO3JldHVybn12YXIgTXQ9SHQmMSYmQnQsRG49IUxyKE0pLE1uO2lmKERuJiYoTW49cnQmJnJ0Lm9uVm5vZGVCZWZvcmVVbm1vdW50KSYmQ3IoTW4saixNKSxIdCY2KV9lKE0uY29tcG9uZW50LGFlLG5lKTtlbHNle2lmKEh0JjEyOCl7TS5zdXNwZW5zZS51bm1vdW50KGFlLG5lKTtyZXR1cm59TXQmJldyKE0sbnVsbCxqLCJiZWZvcmVVbm1vdW50IiksSHQmNjQ/TS50eXBlLnJlbW92ZShNLGosYWUsaWUsQXQsbmUpOlVlJiYoVmUhPT1KfHx2dD4wJiZ2dCY2NCk/TGUoVWUsaixhZSwhMSwhMCk6KFZlPT09SiYmdnQmKDEyOHwyNTYpfHwhaWUmJkh0JjE2KSYmTGUoS2UsaixhZSksbmUmJkllKE0pfShEbiYmKE1uPXJ0JiZydC5vblZub2RlVW5tb3VudGVkKXx8TXQpJiZocigoKT0+e01uJiZDcihNbixqLE0pLE10JiZXcihNLG51bGwsaiwidW5tb3VudGVkIil9LGFlKX0sSWU9TT0+e3Zhcnt0eXBlOmosZWw6YWUsYW5jaG9yOm5lLHRyYW5zaXRpb246aWV9PU07aWYoaj09PUope3BlKGFlLG5lKTtyZXR1cm59aWYoaj09PWhlKXtGZShNKTtyZXR1cm59dmFyIFZlPSgpPT57SShhZSksaWUmJiFpZS5wZXJzaXN0ZWQmJmllLmFmdGVyTGVhdmUmJmllLmFmdGVyTGVhdmUoKX07aWYoTS5zaGFwZUZsYWcmMSYmaWUmJiFpZS5wZXJzaXN0ZWQpe3ZhcntsZWF2ZTpydCxkZWxheUxlYXZlOlllfT1pZSxLZT0oKT0+cnQoYWUsVmUpO1llP1llKE0uZWwsVmUsS2UpOktlKCl9ZWxzZSBWZSgpfSxwZT0oTSxqKT0+e2Zvcih2YXIgYWU7TSE9PWo7KWFlPUdlKE0pLEkoTSksTT1hZTtJKGopfSxfZT0oTSxqLGFlKT0+e3ZhcntidW06bmUsc2NvcGU6aWUsdXBkYXRlOlZlLHN1YlRyZWU6cnQsdW06WWV9PU07bmUmJkUuaW52b2tlQXJyYXlGbnMobmUpLGllLnN0b3AoKSxWZSYmKFZlLmFjdGl2ZT0hMSxRZShydCxNLGosYWUpKSxZZSYmaHIoWWUsaiksaHIoKCk9PntNLmlzVW5tb3VudGVkPSEwfSxqKSxqJiZqLnBlbmRpbmdCcmFuY2gmJiFqLmlzVW5tb3VudGVkJiZNLmFzeW5jRGVwJiYhTS5hc3luY1Jlc29sdmVkJiZNLnN1c3BlbnNlSWQ9PT1qLnBlbmRpbmdJZCYmKGouZGVwcy0tLGouZGVwcz09PTAmJmoucmVzb2x2ZSgpKX0sTGU9ZnVuY3Rpb24oTSxqLGFlKXtmb3IodmFyIG5lPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxpZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITEsVmU9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjAscnQ9VmU7cnQ8TS5sZW5ndGg7cnQrKylRZShNW3J0XSxqLGFlLG5lLGllKX0sQWU9TT0+TS5zaGFwZUZsYWcmNj9BZShNLmNvbXBvbmVudC5zdWJUcmVlKTpNLnNoYXBlRmxhZyYxMjg/TS5zdXNwZW5zZS5uZXh0KCk6R2UoTS5hbmNob3J8fE0uZWwpLEV0PShNLGosYWUpPT57TT09bnVsbD9qLl92bm9kZSYmUWUoai5fdm5vZGUsbnVsbCxudWxsLCEwKTphdChqLl92bm9kZXx8bnVsbCxNLGosbnVsbCxudWxsLG51bGwsYWUpLHlpKCksa24oKSxqLl92bm9kZT1NfSxBdD17cDphdCx1bTpRZSxtOnV0LHI6SWUsbXQ6SCxtYzpkLHBjOnVlLHBiYzpBLG46QWUsbzphfSxKZSx4dDtyZXR1cm4gdSYmKFtKZSx4dF09dShBdCkpLHtyZW5kZXI6RXQsaHlkcmF0ZTpKZSxjcmVhdGVBcHA6c3MoRXQsSmUpfX1mdW5jdGlvbiBYaShhLHUpe3ZhcntlZmZlY3Q6bSx1cGRhdGU6U309YTttLmFsbG93UmVjdXJzZT1TLmFsbG93UmVjdXJzZT11fWZ1bmN0aW9uIGxvKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLFM9YS5jaGlsZHJlbixJPXUuY2hpbGRyZW47aWYoRS5pc0FycmF5KFMpJiZFLmlzQXJyYXkoSSkpZm9yKHZhciBPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBGPVNbT10sVz1JW09dO1cuc2hhcGVGbGFnJjEmJiFXLmR5bmFtaWNDaGlsZHJlbiYmKChXLnBhdGNoRmxhZzw9MHx8Vy5wYXRjaEZsYWc9PT0zMikmJihXPUlbT109V24oSVtPXSksVy5lbD1GLmVsKSxtfHxsbyhGLFcpKSxXLnR5cGU9PT1lZSYmKFcuZWw9Ri5lbCl9fWZ1bmN0aW9uIGNvKGEpe3ZhciB1PWEuc2xpY2UoKSxtPVswXSxTLEksTyxGLFcsRz1hLmxlbmd0aDtmb3IoUz0wO1M8RztTKyspe3ZhciBsZT1hW1NdO2lmKGxlIT09MCl7aWYoST1tW20ubGVuZ3RoLTFdLGFbSV08bGUpe3VbU109SSxtLnB1c2goUyk7Y29udGludWV9Zm9yKE89MCxGPW0ubGVuZ3RoLTE7TzxGOylXPU8rRj4+MSxhW21bV11dPGxlP089VysxOkY9VztsZTxhW21bT11dJiYoTz4wJiYodVtTXT1tW08tMV0pLG1bT109Uyl9fWZvcihPPW0ubGVuZ3RoLEY9bVtPLTFdO08tLSA+MDspbVtPXT1GLEY9dVtGXTtyZXR1cm4gbX12YXIgbHM9YT0+YS5fX2lzVGVsZXBvcnQscGE9YT0+YSYmKGEuZGlzYWJsZWR8fGEuZGlzYWJsZWQ9PT0iIiksTW89YT0+dHlwZW9mIFNWR0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZhIGluc3RhbmNlb2YgU1ZHRWxlbWVudCx2YT0oYSx1KT0+e3ZhciBtPWEmJmEudG87aWYoRS5pc1N0cmluZyhtKSlpZih1KXt2YXIgUz11KG0pO3JldHVybiBTfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSByZXR1cm4gbX0sdj17X19pc1RlbGVwb3J0OiEwLHByb2Nlc3MoYSx1LG0sUyxJLE8sRixXLEcsbGUpe3ZhcnttYzp6ZSxwYzppdCxwYmM6ZGUsbzp7aW5zZXJ0OkdlLHF1ZXJ5U2VsZWN0b3I6cWUsY3JlYXRlVGV4dDpfdCxjcmVhdGVDb21tZW50OmF0fX09bGUsU2U9cGEodS5wcm9wcykse3NoYXBlRmxhZzpiZSxjaGlsZHJlbjpDZSxkeW5hbWljQ2hpbGRyZW46c3R9PXU7aWYoYT09bnVsbCl7dmFyIEZlPXUuZWw9X3QoIiIpLFB0PXUuYW5jaG9yPV90KCIiKTtHZShGZSxtLFMpLEdlKFB0LG0sUyk7dmFyIGk9dS50YXJnZXQ9dmEodS5wcm9wcyxxZSksbD11LnRhcmdldEFuY2hvcj1fdCgiIik7aSYmKEdlKGwsaSksRj1GfHxNbyhpKSk7dmFyIGQ9KGdlLGtlKT0+e2JlJjE2JiZ6ZShDZSxnZSxrZSxJLE8sRixXLEcpfTtTZT9kKG0sUHQpOmkmJmQoaSxsKX1lbHNle3UuZWw9YS5lbDt2YXIgXz11LmFuY2hvcj1hLmFuY2hvcixBPXUudGFyZ2V0PWEudGFyZ2V0LEM9dS50YXJnZXRBbmNob3I9YS50YXJnZXRBbmNob3Isaz1wYShhLnByb3BzKSxMPWs/bTpBLEg9az9fOkM7aWYoRj1GfHxNbyhBKSxzdD8oZGUoYS5keW5hbWljQ2hpbGRyZW4sc3QsTCxJLE8sRixXKSxsbyhhLHUsITApKTpHfHxpdChhLHUsTCxILEksTyxGLFcsITEpLFNlKWt8fHgodSxtLF8sbGUsMSk7ZWxzZSBpZigodS5wcm9wcyYmdS5wcm9wcy50bykhPT0oYS5wcm9wcyYmYS5wcm9wcy50bykpe3ZhciB0ZT11LnRhcmdldD12YSh1LnByb3BzLHFlKTt0ZSYmeCh1LHRlLG51bGwsbGUsMCl9ZWxzZSBrJiZ4KHUsQSxDLGxlLDEpfVoodSl9LHJlbW92ZShhLHUsbSxTLEksTyl7dmFye3VtOkYsbzp7cmVtb3ZlOld9fT1JLHtzaGFwZUZsYWc6RyxjaGlsZHJlbjpsZSxhbmNob3I6emUsdGFyZ2V0QW5jaG9yOml0LHRhcmdldDpkZSxwcm9wczpHZX09YTtpZihkZSYmVyhpdCksKE98fCFwYShHZSkpJiYoVyh6ZSksRyYxNikpZm9yKHZhciBxZT0wO3FlPGxlLmxlbmd0aDtxZSsrKXt2YXIgX3Q9bGVbcWVdO0YoX3QsdSxtLCEwLCEhX3QuZHluYW1pY0NoaWxkcmVuKX19LG1vdmU6eCxoeWRyYXRlOiR9O2Z1bmN0aW9uIHgoYSx1LG0sUyl7dmFye286e2luc2VydDpJfSxtOk99PVMsRj1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06MjtGPT09MCYmSShhLnRhcmdldEFuY2hvcix1LG0pO3ZhcntlbDpXLGFuY2hvcjpHLHNoYXBlRmxhZzpsZSxjaGlsZHJlbjp6ZSxwcm9wczppdH09YSxkZT1GPT09MjtpZihkZSYmSShXLHUsbSksKCFkZXx8cGEoaXQpKSYmbGUmMTYpZm9yKHZhciBHZT0wO0dlPHplLmxlbmd0aDtHZSsrKU8oemVbR2VdLHUsbSwyKTtkZSYmSShHLHUsbSl9ZnVuY3Rpb24gJChhLHUsbSxTLEksTyxGLFcpe3ZhcntvOntuZXh0U2libGluZzpHLHBhcmVudE5vZGU6bGUscXVlcnlTZWxlY3Rvcjp6ZX19PUYsaXQ9dS50YXJnZXQ9dmEodS5wcm9wcyx6ZSk7aWYoaXQpe3ZhciBkZT1pdC5fbHBhfHxpdC5maXJzdENoaWxkO2lmKHUuc2hhcGVGbGFnJjE2KWlmKHBhKHUucHJvcHMpKXUuYW5jaG9yPVcoRyhhKSx1LGxlKGEpLG0sUyxJLE8pLHUudGFyZ2V0QW5jaG9yPWRlO2Vsc2V7dS5hbmNob3I9RyhhKTtmb3IodmFyIEdlPWRlO0dlOylpZihHZT1HKEdlKSxHZSYmR2Uubm9kZVR5cGU9PT04JiZHZS5kYXRhPT09InRlbGVwb3J0IGFuY2hvciIpe3UudGFyZ2V0QW5jaG9yPUdlLGl0Ll9scGE9dS50YXJnZXRBbmNob3ImJkcodS50YXJnZXRBbmNob3IpO2JyZWFrfVcoZGUsdSxpdCxtLFMsSSxPKX1aKHUpfXJldHVybiB1LmFuY2hvciYmRyh1LmFuY2hvcil9dmFyIFU9djtmdW5jdGlvbiBaKGEpe3ZhciB1PWEuY3R4O2lmKHUmJnUudXQpe2Zvcih2YXIgbT1hLmNoaWxkcmVuWzBdLmVsO20hPT1hLnRhcmdldEFuY2hvcjspbS5ub2RlVHlwZT09PTEmJm0uc2V0QXR0cmlidXRlKCJkYXRhLXYtb3duZXIiLHUudWlkKSxtPW0ubmV4dFNpYmxpbmc7dS51dCgpfX12YXIgSj1TeW1ib2wodm9pZCAwKSxlZT1TeW1ib2wodm9pZCAwKSxjZT1TeW1ib2wodm9pZCAwKSxoZT1TeW1ib2wodm9pZCAwKSxUZT1bXSxmZT1udWxsO2Z1bmN0aW9uIHdlKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExO1RlLnB1c2goZmU9YT9udWxsOltdKX1mdW5jdGlvbiBsdCgpe1RlLnBvcCgpLGZlPVRlW1RlLmxlbmd0aC0xXXx8bnVsbH12YXIgcHQ9MTtmdW5jdGlvbiBqdChhKXtwdCs9YX1mdW5jdGlvbiB5dChhKXtyZXR1cm4gYS5keW5hbWljQ2hpbGRyZW49cHQ+MD9mZXx8RS5FTVBUWV9BUlI6bnVsbCxsdCgpLHB0PjAmJmZlJiZmZS5wdXNoKGEpLGF9ZnVuY3Rpb24gSGUoYSx1LG0sUyxJLE8pe3JldHVybiB5dCh6dChhLHUsbSxTLEksTywhMCkpfWZ1bmN0aW9uIER0KGEsdSxtLFMsSSl7cmV0dXJuIHl0KCR0KGEsdSxtLFMsSSwhMCkpfWZ1bmN0aW9uIHZuKGEpe3JldHVybiBhP2EuX192X2lzVk5vZGU9PT0hMDohMX1mdW5jdGlvbiBxdChhLHUpe3JldHVybiBhLnR5cGU9PT11LnR5cGUmJmEua2V5PT09dS5rZXl9ZnVuY3Rpb24gZHQoYSl7fXZhciBybj0iX192SW50ZXJuYWwiLExuPWE9Pnt2YXJ7a2V5OnV9PWE7cmV0dXJuIHUhPW51bGw/dTpudWxsfSxKdD1hPT57dmFye3JlZjp1LHJlZl9rZXk6bSxyZWZfZm9yOlN9PWE7cmV0dXJuIHUhPW51bGw/RS5pc1N0cmluZyh1KXx8Ui5pc1JlZih1KXx8RS5pc0Z1bmN0aW9uKHUpP3tpOlBuLHI6dSxrOm0sZjohIVN9OnU6bnVsbH07ZnVuY3Rpb24genQoYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGwsbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCxTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTowLEk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06YT09PUo/MDoxLEY9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOiExLFc9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiExLEc9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6YSxwcm9wczp1LGtleTp1JiZMbih1KSxyZWY6dSYmSnQodSksc2NvcGVJZDpfbixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjptLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRBbmNob3I6bnVsbCxzdGF0aWNDb3VudDowLHNoYXBlRmxhZzpPLHBhdGNoRmxhZzpTLGR5bmFtaWNQcm9wczpJLGR5bmFtaWNDaGlsZHJlbjpudWxsLGFwcENvbnRleHQ6bnVsbCxob3N0SW5zdGFuY2U6UG4sY3R4OlBufTtyZXR1cm4gVz8oTnIoRyxtKSxPJjEyOCYmYS5ub3JtYWxpemUoRykpOm0mJihHLnNoYXBlRmxhZ3w9RS5pc1N0cmluZyhtKT84OjE2KSxwdD4wJiYhRiYmZmUmJihHLnBhdGNoRmxhZz4wfHxPJjYpJiZHLnBhdGNoRmxhZyE9PTMyJiZmZS5wdXNoKEcpLEd9dmFyICR0PVp0O2Z1bmN0aW9uIFp0KGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxJPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExO2lmKCghYXx8YT09PVkpJiYoYT1jZSksdm4oYSkpe3ZhciBGPXBpKGEsdSwhMCk7cmV0dXJuIG0mJk5yKEYsbSkscHQ+MCYmIU8mJmZlJiYoRi5zaGFwZUZsYWcmNj9mZVtmZS5pbmRleE9mKGEpXT1GOmZlLnB1c2goRikpLEYucGF0Y2hGbGFnfD0tMixGfWlmKEVvKGEpJiYoYT1hLl9fdmNjT3B0cyksdSl7dT1lYSh1KTt2YXJ7Y2xhc3M6VyxzdHlsZTpHfT11O1cmJiFFLmlzU3RyaW5nKFcpJiYodS5jbGFzcz1FLm5vcm1hbGl6ZUNsYXNzKFcpKSxFLmlzT2JqZWN0KEcpJiYoUi5pc1Byb3h5KEcpJiYhRS5pc0FycmF5KEcpJiYoRz1FLmV4dGVuZCh7fSxHKSksdS5zdHlsZT1FLm5vcm1hbGl6ZVN0eWxlKEcpKX12YXIgbGU9RS5pc1N0cmluZyhhKT8xOmxpKGEpPzEyODpscyhhKT82NDpFLmlzT2JqZWN0KGEpPzQ6RS5pc0Z1bmN0aW9uKGEpPzI6MDtyZXR1cm4genQoYSx1LG0sUyxJLGxlLE8sITApfWZ1bmN0aW9uIGVhKGEpe3JldHVybiBhP1IuaXNQcm94eShhKXx8cm4gaW4gYT9FLmV4dGVuZCh7fSxhKTphOm51bGx9ZnVuY3Rpb24gcGkoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEse3Byb3BzOlMscmVmOkkscGF0Y2hGbGFnOk8sY2hpbGRyZW46Rn09YSxXPXU/R24oU3x8e30sdSk6UyxHPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmEudHlwZSxwcm9wczpXLGtleTpXJiZMbihXKSxyZWY6dSYmdS5yZWY/bSYmST9FLmlzQXJyYXkoSSk/SS5jb25jYXQoSnQodSkpOltJLEp0KHUpXTpKdCh1KTpJLHNjb3BlSWQ6YS5zY29wZUlkLHNsb3RTY29wZUlkczphLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpGLHRhcmdldDphLnRhcmdldCx0YXJnZXRBbmNob3I6YS50YXJnZXRBbmNob3Isc3RhdGljQ291bnQ6YS5zdGF0aWNDb3VudCxzaGFwZUZsYWc6YS5zaGFwZUZsYWcscGF0Y2hGbGFnOnUmJmEudHlwZSE9PUo/Tz09PS0xPzE2Ok98MTY6TyxkeW5hbWljUHJvcHM6YS5keW5hbWljUHJvcHMsZHluYW1pY0NoaWxkcmVuOmEuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6YS5hcHBDb250ZXh0LGhvc3RJbnN0YW5jZTphLmhvc3RJbnN0YW5jZSxkaXJzOmEuZGlycyx0cmFuc2l0aW9uOmEudHJhbnNpdGlvbixjb21wb25lbnQ6YS5jb21wb25lbnQsc3VzcGVuc2U6YS5zdXNwZW5zZSxzc0NvbnRlbnQ6YS5zc0NvbnRlbnQmJnBpKGEuc3NDb250ZW50KSxzc0ZhbGxiYWNrOmEuc3NGYWxsYmFjayYmcGkoYS5zc0ZhbGxiYWNrKSxlbDphLmVsLGFuY2hvcjphLmFuY2hvcixjdHg6YS5jdHgsY2U6YS5jZX07cmV0dXJuIEd9ZnVuY3Rpb24gaWkoKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiAiLHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjA7cmV0dXJuICR0KGVlLG51bGwsYSx1KX1mdW5jdGlvbiBRaShhLHUpe3ZhciBtPSR0KGhlLG51bGwsYSk7cmV0dXJuIG0uc3RhdGljQ291bnQ9dSxtfWZ1bmN0aW9uIGphKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIiLHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiB1Pyh3ZSgpLER0KGNlLG51bGwsYSkpOiR0KGNlLG51bGwsYSl9ZnVuY3Rpb24gem4oYSl7cmV0dXJuIGE9PW51bGx8fHR5cGVvZiBhPT0iYm9vbGVhbiI/JHQoY2UpOkUuaXNBcnJheShhKT8kdChKLG51bGwsYS5zbGljZSgpKTp0eXBlb2YgYT09Im9iamVjdCI/V24oYSk6JHQoZWUsbnVsbCxTdHJpbmcoYSkpfWZ1bmN0aW9uIFduKGEpe3JldHVybiBhLmVsPT09bnVsbCYmYS5wYXRjaEZsYWchPT0tMXx8YS5tZW1vP2E6cGkoYSl9ZnVuY3Rpb24gTnIoYSx1KXt2YXIgbT0wLHtzaGFwZUZsYWc6U309YTtpZih1PT1udWxsKXU9bnVsbDtlbHNlIGlmKEUuaXNBcnJheSh1KSltPTE2O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKWlmKFMmKDF8NjQpKXt2YXIgST11LmRlZmF1bHQ7SSYmKEkuX2MmJihJLl9kPSExKSxOcihhLEkoKSksSS5fYyYmKEkuX2Q9ITApKTtyZXR1cm59ZWxzZXttPTMyO3ZhciBPPXUuXzshTyYmIShybiBpbiB1KT91Ll9jdHg9UG46Tz09PTMmJlBuJiYoUG4uc2xvdHMuXz09PTE/dS5fPTE6KHUuXz0yLGEucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBFLmlzRnVuY3Rpb24odSk/KHU9e2RlZmF1bHQ6dSxfY3R4OlBufSxtPTMyKToodT1TdHJpbmcodSksUyY2ND8obT0xNix1PVtpaSh1KV0pOm09OCk7YS5jaGlsZHJlbj11LGEuc2hhcGVGbGFnfD1tfWZ1bmN0aW9uIEduKCl7Zm9yKHZhciBhPXt9LHU9MDt1PGFyZ3VtZW50cy5sZW5ndGg7dSsrKXt2YXIgbT11PDB8fGFyZ3VtZW50cy5sZW5ndGg8PXU/dm9pZCAwOmFyZ3VtZW50c1t1XTtmb3IodmFyIFMgaW4gbSlpZihTPT09ImNsYXNzIilhLmNsYXNzIT09bS5jbGFzcyYmKGEuY2xhc3M9RS5ub3JtYWxpemVDbGFzcyhbYS5jbGFzcyxtLmNsYXNzXSkpO2Vsc2UgaWYoUz09PSJzdHlsZSIpYS5zdHlsZT1FLm5vcm1hbGl6ZVN0eWxlKFthLnN0eWxlLG0uc3R5bGVdKTtlbHNlIGlmKEUuaXNPbihTKSl7dmFyIEk9YVtTXSxPPW1bU107TyYmSSE9PU8mJiEoRS5pc0FycmF5KEkpJiZJLmluY2x1ZGVzKE8pKSYmKGFbU109ST9bXS5jb25jYXQoSSxPKTpPKX1lbHNlIFMhPT0iIiYmKGFbU109bVtTXSl9cmV0dXJuIGF9ZnVuY3Rpb24gQ3IoYSx1LG0pe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO1AoYSx1LDcsW20sU10pfXZhciBxcj1hcygpLHRhPTA7ZnVuY3Rpb24gY3MoYSx1LG0pe3ZhciBTPWEudHlwZSxJPSh1P3UuYXBwQ29udGV4dDphLmFwcENvbnRleHQpfHxxcixPPXt1aWQ6dGErKyx2bm9kZTphLHR5cGU6UyxwYXJlbnQ6dSxhcHBDb250ZXh0Okkscm9vdDpudWxsLG5leHQ6bnVsbCxzdWJUcmVlOm51bGwsZWZmZWN0Om51bGwsdXBkYXRlOm51bGwsc2NvcGU6bmV3IFIuRWZmZWN0U2NvcGUoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6dT91LnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoSS5wcm92aWRlcyksYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpUYShTLEkpLGVtaXRzT3B0aW9uczphcihTLEkpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czpFLkVNUFRZX09CSixpbmhlcml0QXR0cnM6Uy5pbmhlcml0QXR0cnMsY3R4OkUuRU1QVFlfT0JKLGRhdGE6RS5FTVBUWV9PQkoscHJvcHM6RS5FTVBUWV9PQkosYXR0cnM6RS5FTVBUWV9PQkosc2xvdHM6RS5FTVBUWV9PQkoscmVmczpFLkVNUFRZX09CSixzZXR1cFN0YXRlOkUuRU1QVFlfT0JKLHNldHVwQ29udGV4dDpudWxsLHN1c3BlbnNlOm0sc3VzcGVuc2VJZDptP20ucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiExLGlzTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51bGwsYzpudWxsLGJtOm51bGwsbTpudWxsLGJ1Om51bGwsdTpudWxsLHVtOm51bGwsYnVtOm51bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWxsfTtyZXR1cm4gTy5jdHg9e186T30sTy5yb290PXU/dS5yb290Ok8sTy5lbWl0PXVuLmJpbmQobnVsbCxPKSxhLmNlJiZhLmNlKE8pLE99dmFyIGxuPW51bGwseW49KCk9PmxufHxQbixZbj1hPT57bG49YSxhLnNjb3BlLm9uKCl9LFpuPSgpPT57bG4mJmxuLnNjb3BlLm9mZigpLGxuPW51bGx9O2Z1bmN0aW9uIFRpKGEpe3JldHVybiBhLnZub2RlLnNoYXBlRmxhZyY0fWguaXNJblNTUkNvbXBvbmVudFNldHVwPSExO2Z1bmN0aW9uIHVzKGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtoLmlzSW5TU1JDb21wb25lbnRTZXR1cD11O3Zhcntwcm9wczptLGNoaWxkcmVuOlN9PWEudm5vZGUsST1UaShhKTtBaShhLG0sSSx1KSxLaShhLFMpO3ZhciBPPUk/emEoYSx1KTp2b2lkIDA7cmV0dXJuIGguaXNJblNTUkNvbXBvbmVudFNldHVwPSExLE99ZnVuY3Rpb24gemEoYSx1KXt2YXIgbT1hLnR5cGU7YS5hY2Nlc3NDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLGEucHJveHk9Ui5tYXJrUmF3KG5ldyBQcm94eShhLmN0eCxvZSkpO3ZhcntzZXR1cDpTfT1tO2lmKFMpe3ZhciBJPWEuc2V0dXBDb250ZXh0PVMubGVuZ3RoPjE/WWEoYSk6bnVsbDtZbihhKSxSLnBhdXNlVHJhY2tpbmcoKTt2YXIgTz1UdChTLGEsMCxbYS5wcm9wcyxJXSk7aWYoUi5yZXNldFRyYWNraW5nKCksWm4oKSxFLmlzUHJvbWlzZShPKSl7aWYoTy50aGVuKFpuLFpuKSx1KXJldHVybiBPLnRoZW4oRj0+e0lhKGEsRix1KX0pLmNhdGNoKEY9PntDdChGLGEsMCl9KTthLmFzeW5jRGVwPU99ZWxzZSBJYShhLE8sdSl9ZWxzZSBKcihhLHUpfWZ1bmN0aW9uIElhKGEsdSxtKXtFLmlzRnVuY3Rpb24odSk/YS5yZW5kZXI9dTpFLmlzT2JqZWN0KHUpJiYoYS5zZXR1cFN0YXRlPVIucHJveHlSZWZzKHUpKSxKcihhLG0pfXZhciBuYSx1bztmdW5jdGlvbiBXYShhKXtuYT1hLHVvPXU9Pnt1LnJlbmRlci5fcmMmJih1LndpdGhQcm94eT1uZXcgUHJveHkodS5jdHgsWCkpfX12YXIgZnM9KCk9PiFuYTtmdW5jdGlvbiBKcihhLHUsbSl7dmFyIFM9YS50eXBlO2lmKCFhLnJlbmRlcil7aWYoIXUmJm5hJiYhUy5yZW5kZXIpe3ZhciBJPVMudGVtcGxhdGV8fFVuKGEpLnRlbXBsYXRlO2lmKEkpe3Zhcntpc0N1c3RvbUVsZW1lbnQ6Tyxjb21waWxlck9wdGlvbnM6Rn09YS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczpXLGNvbXBpbGVyT3B0aW9uczpHfT1TLGxlPUUuZXh0ZW5kKEUuZXh0ZW5kKHtpc0N1c3RvbUVsZW1lbnQ6TyxkZWxpbWl0ZXJzOld9LEYpLEcpO1MucmVuZGVyPW5hKEksbGUpfX1hLnJlbmRlcj1TLnJlbmRlcnx8RS5OT09QLHVvJiZ1byhhKX1ZbihhKSxSLnBhdXNlVHJhY2tpbmcoKSxCZShhKSxSLnJlc2V0VHJhY2tpbmcoKSxabigpfWZ1bmN0aW9uIEdhKGEpe3JldHVybiBuZXcgUHJveHkoYS5hdHRycyx7Z2V0KHUsbSl7cmV0dXJuIFIudHJhY2soYSwiZ2V0IiwiJGF0dHJzIiksdVttXX19KX1mdW5jdGlvbiBZYShhKXt2YXIgdT1TPT57YS5leHBvc2VkPVN8fHt9fSxtO3JldHVybntnZXQgYXR0cnMoKXtyZXR1cm4gbXx8KG09R2EoYSkpfSxzbG90czphLnNsb3RzLGVtaXQ6YS5lbWl0LGV4cG9zZTp1fX1mdW5jdGlvbiBMbyhhKXtpZihhLmV4cG9zZWQpcmV0dXJuIGEuZXhwb3NlUHJveHl8fChhLmV4cG9zZVByb3h5PW5ldyBQcm94eShSLnByb3h5UmVmcyhSLm1hcmtSYXcoYS5leHBvc2VkKSkse2dldCh1LG0pe2lmKG0gaW4gdSlyZXR1cm4gdVttXTtpZihtIGluIFlyKXJldHVybiBZclttXShhKX0saGFzKHUsbSl7cmV0dXJuIG0gaW4gdXx8bSBpbiBZcn19KSl9ZnVuY3Rpb24gVWkoYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBFLmlzRnVuY3Rpb24oYSk/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOmEubmFtZXx8dSYmYS5fX25hbWV9ZnVuY3Rpb24gRW8oYSl7cmV0dXJuIEUuaXNGdW5jdGlvbihhKSYmIl9fdmNjT3B0cyJpbiBhfXZhciB5bz0oYSx1KT0+Ui5jb21wdXRlZChhLHUsaC5pc0luU1NSQ29tcG9uZW50U2V0dXApO2Z1bmN0aW9uIGRzKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRG8oKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4cyhhKXt9ZnVuY3Rpb24gaHMoYSx1KXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBCcygpe3JldHVybiBrdCgpLnNsb3RzfWZ1bmN0aW9uIE5lKCl7cmV0dXJuIGt0KCkuYXR0cnN9ZnVuY3Rpb24ga3QoKXt2YXIgYT15bigpO3JldHVybiBhLnNldHVwQ29udGV4dHx8KGEuc2V0dXBDb250ZXh0PVlhKGEpKX1mdW5jdGlvbiBJdChhLHUpe3ZhciBtPUUuaXNBcnJheShhKT9hLnJlZHVjZSgoTyxGKT0+KE9bRl09e30sTykse30pOmE7Zm9yKHZhciBTIGluIHUpe3ZhciBJPW1bU107ST9FLmlzQXJyYXkoSSl8fEUuaXNGdW5jdGlvbihJKT9tW1NdPXt0eXBlOkksZGVmYXVsdDp1W1NdfTpJLmRlZmF1bHQ9dVtTXTpJPT09bnVsbCYmKG1bU109e2RlZmF1bHQ6dVtTXX0pfXJldHVybiBtfWZ1bmN0aW9uIE9uKGEsdSl7dmFyIG09e30sUz1mdW5jdGlvbihPKXt1LmluY2x1ZGVzKE8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxPLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+YVtPXX0pfTtmb3IodmFyIEkgaW4gYSlTKEkpO3JldHVybiBtfWZ1bmN0aW9uIEFyKGEpe3ZhciB1PXluKCksbT1hKCk7cmV0dXJuIFpuKCksRS5pc1Byb21pc2UobSkmJihtPW0uY2F0Y2goUz0+e3Rocm93IFluKHUpLFN9KSksW20sKCk9PlluKHUpXX1mdW5jdGlvbiBQaShhLHUsbSl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gUz09PTI/RS5pc09iamVjdCh1KSYmIUUuaXNBcnJheSh1KT92bih1KT8kdChhLG51bGwsW3VdKTokdChhLHUpOiR0KGEsbnVsbCx1KTooUz4zP209QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOlM9PT0zJiZ2bihtKSYmKG09W21dKSwkdChhLHUsbSkpfXZhciBlbz1TeW1ib2woIiIpLEZvPSgpPT57e3ZhciBhPWxyKGVvKTtyZXR1cm4gYX19O2Z1bmN0aW9uIE5hKCl7fWZ1bmN0aW9uIHJhKGEsdSxtLFMpe3ZhciBJPW1bU107aWYoSSYmZ3MoSSxhKSlyZXR1cm4gSTt2YXIgTz11KCk7cmV0dXJuIE8ubWVtbz1hLnNsaWNlKCksbVtTXT1PfWZ1bmN0aW9uIGdzKGEsdSl7dmFyIG09YS5tZW1vO2lmKG0ubGVuZ3RoIT11Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIFM9MDtTPG0ubGVuZ3RoO1MrKylpZihFLmhhc0NoYW5nZWQobVtTXSx1W1NdKSlyZXR1cm4hMTtyZXR1cm4gcHQ+MCYmZmUmJmZlLnB1c2goYSksITB9dmFyIHBzPSIzLjIuNDciLGRsPW51bGwsJGw9bnVsbCxIbD1udWxsLE1zPXtpbnNlcnQ6KGEsdSxtKT0+bT91Lmluc2VydEJlZm9yZShhLG0pOnUuYXBwZW5kQ2hpbGQoYSkscmVtb3ZlOmE9Pnt2YXIgdT1hLnBhcmVudE5vZGU7dSYmdS5yZW1vdmVDaGlsZChhKX0sY3JlYXRlRWxlbWVudDphPT5zLmNyZWF0ZUVsZW1lbnQoYSksY3JlYXRlVGV4dDphPT5zLmNyZWF0ZVRleHQoYSksY3JlYXRlQ29tbWVudDphPT5zLmNyZWF0ZUNvbW1lbnQoYSksc2V0VGV4dDooYSx1KT0+e2Euc2V0QXR0cigidmFsdWUiLHUpfSxzZXRFbGVtZW50VGV4dDooYSx1KT0+e2Euc2V0QXR0cigidmFsdWUiLHUpfSxwYXJlbnROb2RlOmE9PmEucGFyZW50Tm9kZSxuZXh0U2libGluZzphPT5hLm5leHRTaWJsaW5nfTtmdW5jdGlvbiBWbyhhKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9ZnVuY3Rpb24gVW8oYSl7dmFyIHU9e307cmV0dXJuIEUuaXNBcnJheShhKSYmYS5mb3JFYWNoKG09PntWbyhtKS5mb3JFYWNoKFM9Pnt2YXIgST1tW1NdLE89dVtTXXx8KHVbU109e30pO1ZvKEkpLmZvckVhY2goRj0+e3ZhciBXPUlbRl0sRz1PW0ZdfHwoT1tGXT17fSk7Vm8oVykuZm9yRWFjaChsZT0+e2xlWzBdPT09IiEiPyhHW2xlXT1XW2xlXSxkZWxldGUgR1tsZS5zbGljZSgxKV0pOkUuaGFzT3duKEcsIiEiK2xlKXx8KEdbbGVdPVdbbGVdKX0pfSl9KX0pLHV9ZnVuY3Rpb24gaWEoYSx1KXt2YXIgbT11JiZ1LmNsYXNzTGlzdDtyZXR1cm4gbSYmbS5pbmNsdWRlcyhhKX12YXIgcWE9L1srfj4gXSQvLHZzPSJwYXJlbnROb2RlIiwkbz0icHJldmlvdXNTaWJsaW5nIjtmdW5jdGlvbiBMcyhhLHUpe2Zvcih2YXIgbT1hLnNwbGl0KCIuIiksUz1tLmxlbmd0aC0xO1M+MDtTLS0pe3ZhciBJPW1bU10sTz1JW0kubGVuZ3RoLTFdLEY9SS5yZXBsYWNlKHFhLCIiKTtpZihPPT09In4ifHxPPT09IiAiKXtmb3IodmFyIFc9Tz09PSJ+Ij8kbzp2czt1JiYodT11W1ddLCFpYShGLHUpKTspO2lmKCF1KXJldHVybiExfWVsc2UgaWYoTz09PSI+Ij91PXUmJnVbdnNdOk89PT0iKyImJih1PXUmJnVbJG9dKSwhaWEoRix1KSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgamw9MWUzO2Z1bmN0aW9uIERzKGEsdSxtKXt2YXJ7c3R5bGVzOlMsd2VpZ2h0czpJfT1hO1ZvKHUpLmZvckVhY2goTz0+e2lmKCEoTyYmbSYmIUxzKE8sbSkpKXt2YXIgRj1PLnNwbGl0KCIuIikubGVuZ3RoLFc9dVtPXTtWbyhXKS5mb3JFYWNoKEc9Pnt2YXIgbGU9V1tHXSx6ZT1HWzBdPT09IiEiO3plJiYoRz1HLnNsaWNlKDEpKTt2YXIgaXQ9SVtHXXx8MCxkZT1GKyh6ZT9qbDowKTtkZT49aXQmJihJW0ddPWRlLFNbR109bGUpfSl9fSl9ZnVuY3Rpb24gbXMoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCxTPXtzdHlsZXM6e30sd2VpZ2h0czp7fX07cmV0dXJuIGEuZm9yRWFjaChJPT57dmFyIE89dVtJXTtPJiZEcyhTLE8sbSl9KSxTLnN0eWxlc31mdW5jdGlvbiBobChhKXtyZXR1cm4gbXMoYS5jbGFzc0xpc3QsYS5zdHlsZVNoZWV0LGEpfWZ1bmN0aW9uIEZzKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIG1zKGEsSmEodSksbSl9ZnVuY3Rpb24gSmEoYSl7dmFye3R5cGU6dSxhcHBDb250ZXh0Om19PWEsUz11O2lmKCFTLl9fc3R5bGVzKWlmKG0mJkUuaXNBcnJheShtLnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzKSYmKG0ucHJvdmlkZXMuX19nbG9iYWxTdHlsZXM9VW8obS5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcykpLFMubXBUeXBlPT09InBhZ2UiJiZtKVMuX19zdHlsZXM9bS5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcztlbHNle3ZhciBJPVtdO20mJkkucHVzaChtLnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzKSxFLmlzQXJyYXkoUy5zdHlsZXMpJiZTLnN0eWxlcy5mb3JFYWNoKE89PkkucHVzaChPKSksUy5fX3N0eWxlcz1VbyhJKX1yZXR1cm4gUy5fX3N0eWxlc31mdW5jdGlvbiBfcyhhLHUsbSl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7UyYmKFt1LG1dPW9hKGEsdSxtLFMpKSxhLnNldEF0dHIodSxtKX12YXIgVnM9ImhvdmVyQ2xhc3MiLFVzPSJwbGFjZWhvbGRlckNsYXNzIixnbD0icGxhY2Vob2xkZXJTdHlsZSIsSG89ImluZGljYXRvckNsYXNzIixLYT0iaW5kaWNhdG9yU3R5bGUiLG1hPSJtYXNrQ2xhc3MiLGthPSJtYXNrU3R5bGUiLFNvPXt2aWV3OntjbGFzczpbVnNdLHN0eWxlOltdfSxidXR0b246e2NsYXNzOltWc10sc3R5bGU6W119LG5hdmlnYXRvcjp7Y2xhc3M6W1ZzXSxzdHlsZTpbXX0sInUtaW5wdXQiOntjbGFzczpbVXNdLHN0eWxlOltnbF19LCJ1LXRleHRhcmVhIjp7Y2xhc3M6W1VzXSxzdHlsZTpbZ2xdfSwicGlja2VyLXZpZXciOntjbGFzczpbSG8sbWFdLHN0eWxlOltLYSxrYV19fTtmdW5jdGlvbiBvYShhLHUsbSxTKXtpZighbSlyZXR1cm5bdSxtXTt2YXIgST1Tb1thLnR5cGVdO2lmKEkpe3ZhciBPPUUuY2FtZWxpemUodSk7aWYoSS5jbGFzcy5pbmRleE9mKE8pPi0xKXJldHVybltPLEZzKFttXSxTLGEpXTtpZihJLnN0eWxlLmluZGV4T2YodSk+LTEpcmV0dXJuIEUuaXNTdHJpbmcobSk/W08sRS5wYXJzZVN0cmluZ1N0eWxlKG0pXTpbTyxFLm5vcm1hbGl6ZVN0eWxlKG0pXX1yZXR1cm5bdSxtXX1mdW5jdGlvbiBaYShhLHUsbSl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7aWYoISFTKXt2YXIgST1tP20uc3BsaXQoIiAiKTpbXTthLnNldENsYXNzTGlzdChJKSxhLnNldFN0eWxlU2hlZXQoSmEoUykpfX1mdW5jdGlvbiAkcyhhLHUsbSxTKXthLmFkZEV2ZW50KHUsbSl9ZnVuY3Rpb24gcGwoYSx1KXthLnJlbW92ZUV2ZW50KHUpfWZ1bmN0aW9uIGFhKGEsdSxtLFMpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLE89YS5fdmVpfHwoYS5fdmVpPXt9KSxGPU9bdV07aWYoUyYmRilGLnZhbHVlPVM7ZWxzZXt2YXJbVyxHXT1RYSh1KTtpZihTKXt2YXIgbGU9T1t1XT1vaShTLEkpOyRzKGEsVyxsZSl9ZWxzZSBGJiYocGwoYSxXKSxPW3VdPXZvaWQgMCl9fXZhciBYYT0vKD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gSHMoYSl7cmV0dXJuIGE9PT0ib24tcG9zdC1tZXNzYWdlIj8ib25Qb3N0TWVzc2FnZSI6YX1mdW5jdGlvbiBRYShhKXt2YXIgdTtpZihYYS50ZXN0KGEpKXt1PXt9O2Zvcih2YXIgbTttPWEubWF0Y2goWGEpOylhPWEuc2xpY2UoMCxhLmxlbmd0aC1tWzBdLmxlbmd0aCksdVttWzBdLnRvTG93ZXJDYXNlKCldPSEwfXZhciBTPWFbMl09PT0iOiI/YS5zbGljZSgzKTphLnNsaWNlKDIpO3JldHVybltIcyhFLmh5cGhlbmF0ZShTKSksdV19ZnVuY3Rpb24gb2koYSx1KXt2YXIgbT1JPT57UChtLnZhbHVlLHUsNSxbSV0pfTttLnZhbHVlPWE7dmFyIFM9bmV3IFNldDtyZXR1cm4gRS5pc0FycmF5KG0udmFsdWUpP20udmFsdWUuZm9yRWFjaChJPT57SS5tb2RpZmllcnMmJkkubW9kaWZpZXJzLmZvckVhY2goTz0+e1MuYWRkKE8pfSl9KTptLnZhbHVlLm1vZGlmaWVycyYmbS52YWx1ZS5tb2RpZmllcnMuZm9yRWFjaChJPT57Uy5hZGQoSSl9KSxtLm1vZGlmaWVycz1bLi4uU10sbX1mdW5jdGlvbiBWcihhLHUsbSl7aWYoISFtKXtFLmlzU3RyaW5nKG0pJiYobT1FLnBhcnNlU3RyaW5nU3R5bGUobSkpO3ZhciBTPXt9LEk9dSYmIUUuaXNTdHJpbmcodSk7aWYoSSl7Zm9yKHZhciBPIGluIHUpbVtPXT09bnVsbCYmKFNbRS5jYW1lbGl6ZShPKV09IiIpO2Zvcih2YXIgRiBpbiBtKXt2YXIgVz1tW0ZdO1chPT11W0ZdJiYoU1tFLmNhbWVsaXplKEYpXT1XKX19ZWxzZSBmb3IodmFyIEcgaW4gbSlTW0UuY2FtZWxpemUoRyldPW1bR107YS5zZXRTdHlsZXMoUyl9fXZhciBzYT1bInUtaW5wdXQiLCJ1LXRleHRhcmVhIl0sdmw9ZnVuY3Rpb24oYSx1LG0sUyl7dmFyIEk9YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDAsTz1hcmd1bWVudHMubGVuZ3RoPjk/YXJndW1lbnRzWzldOnZvaWQgMDt1PT09ImNsYXNzIj9aYShhLG0sUyxPfHxJKTp1PT09InN0eWxlIj9WcihhLG0sUyk6RS5pc09uKHUpP0UuaXNNb2RlbExpc3RlbmVyKHUpfHxhYShhLHUsbSxTLEkpOnU9PT0ibW9kZWxWYWx1ZSImJnNhLmluY2x1ZGVzKGEudHlwZSk/YS5zZXRBdHRycyh7bW9kZWxWYWx1ZTpTLHZhbHVlOlN9KTpfcyhhLHUsUyxJKX07ZnVuY3Rpb24gemwoKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiRzdHlsZSI7e3ZhciB1PXluKCk7aWYoIXUpcmV0dXJuIEUuRU1QVFlfT0JKO3ZhciBtPXUudHlwZS5fX2Nzc01vZHVsZXM7aWYoIW0pcmV0dXJuIEUuRU1QVFlfT0JKO3ZhciBTPW1bYV07cmV0dXJuIFN8fEUuRU1QVFlfT0JKfX1mdW5jdGlvbiBqcyhhKXt2YXIgdT15bigpO2lmKCEhdSl7dmFyIG09KCk9PmJzKHUuc3ViVHJlZSxhKHUucHJveHkpKTtycigoKT0+UW4obSx7Zmx1c2g6InBvc3QifSkpLHFuKG0pfX1mdW5jdGlvbiBicyhhLHUpe2lmKGEuc2hhcGVGbGFnJjEyOCl7dmFyIG09YS5zdXNwZW5zZTthPW0uYWN0aXZlQnJhbmNoLG0ucGVuZGluZ0JyYW5jaCYmIW0uaXNIeWRyYXRpbmcmJm0uZWZmZWN0cy5wdXNoKCgpPT57YnMobS5hY3RpdmVCcmFuY2gsdSl9KX1mb3IoO2EuY29tcG9uZW50OylhPWEuY29tcG9uZW50LnN1YlRyZWU7aWYoYS5zaGFwZUZsYWcmMSYmYS5lbCl7dmFyIFM9YS5lbC5zdHlsZTtmb3IodmFyIEkgaW4gdSlTLnNldFByb3BlcnR5KCItLSIuY29uY2F0KEkpLHVbSV0pfWVsc2UgYS50eXBlPT09SiYmYS5jaGlsZHJlbi5mb3JFYWNoKE89PmJzKE8sdSkpfXZhciB6cz1bImN0cmwiLCJzaGlmdCIsImFsdCIsIm1ldGEiXSxXcz17c3RvcDphPT5hLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6YT0+YS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6YT0+YS50YXJnZXQhPT1hLmN1cnJlbnRUYXJnZXQsY3RybDphPT4hYS5jdHJsS2V5LHNoaWZ0OmE9PiFhLnNoaWZ0S2V5LGFsdDphPT4hYS5hbHRLZXksbWV0YTphPT4hYS5tZXRhS2V5LGxlZnQ6YT0+ImJ1dHRvbiJpbiBhJiZhLmJ1dHRvbiE9PTAsbWlkZGxlOmE9PiJidXR0b24iaW4gYSYmYS5idXR0b24hPT0xLHJpZ2h0OmE9PiJidXR0b24iaW4gYSYmYS5idXR0b24hPT0yLGV4YWN0OihhLHUpPT56cy5zb21lKG09PmFbIiIuY29uY2F0KG0sIktleSIpXSYmIXUuaW5jbHVkZXMobSkpfSxtbD0oYSx1KT0+ZnVuY3Rpb24obSl7Zm9yKHZhciBTPTA7Uzx1Lmxlbmd0aDtTKyspe3ZhciBJPVdzW3VbU11dO2lmKEkmJkkobSx1KSlyZXR1cm59Zm9yKHZhciBPPWFyZ3VtZW50cy5sZW5ndGgsRj1uZXcgQXJyYXkoTz4xP08tMTowKSxXPTE7VzxPO1crKylGW1ctMV09YXJndW1lbnRzW1ddO3JldHVybiBhKG0sLi4uRil9LEdzPShhLHUpPT5tPT57aWYoImtleSJpbiBtKXt2YXIgUz1FLmh5cGhlbmF0ZShtLmtleSk7aWYodS5zb21lKEk9Pkk9PT1TKSlyZXR1cm4gYShtKX19LEVzPUUuZXh0ZW5kKHtwYXRjaFByb3A6dmx9LE1zKSx5cztmdW5jdGlvbiBTcygpe3JldHVybiB5c3x8KHlzPXVyKEVzKSl9dmFyIF9sPWZ1bmN0aW9uKCl7U3MoKS5yZW5kZXIoLi4uYXJndW1lbnRzKX0sYmw9ZnVuY3Rpb24oKXt2YXIgYT1TcygpLmNyZWF0ZUFwcCguLi5hcmd1bWVudHMpLHttb3VudDp1fT1hO3JldHVybiBhLm1vdW50PW09PnUobSksYX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJjYW1lbGl6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FtZWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImNhcGl0YWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmNhcGl0YWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImh5cGhlbmF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaHlwaGVuYXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJub3JtYWxpemVDbGFzcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUubm9ybWFsaXplQ2xhc3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm5vcm1hbGl6ZVByb3BzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5ub3JtYWxpemVQcm9wc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwibm9ybWFsaXplU3R5bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLm5vcm1hbGl6ZVN0eWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0b0Rpc3BsYXlTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnRvRGlzcGxheVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidG9IYW5kbGVyS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS50b0hhbmRsZXJLZXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIkVmZmVjdFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5FZmZlY3RTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiUmVhY3RpdmVFZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLlJlYWN0aXZlRWZmZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJjdXN0b21SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmN1c3RvbVJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiZWZmZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5lZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImVmZmVjdFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5lZmZlY3RTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiZ2V0Q3VycmVudFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5nZXRDdXJyZW50U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlzUHJveHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmlzUHJveHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlzUmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmlzUmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlzUmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmlzUmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlzUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5pc1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiaXNTaGFsbG93Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5pc1NoYWxsb3d9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm1hcmtSYXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLm1hcmtSYXd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm9uU2NvcGVEaXNwb3NlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5vblNjb3BlRGlzcG9zZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwicHJveHlSZWZzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5wcm94eVJlZnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInJlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5yZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwicmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnJlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJyZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwic2hhbGxvd1JlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5zaGFsbG93UmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInNoYWxsb3dSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuc2hhbGxvd1JlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJzaGFsbG93UmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5zaGFsbG93UmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJzdG9wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5zdG9wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0b1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudG9SYXd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInRvUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi50b1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidG9SZWZzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi50b1JlZnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInRyaWdnZXJSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnRyaWdnZXJSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInVucmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi51bnJlZn19KSxoLkJhc2VUcmFuc2l0aW9uPVByLGguQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnM9Z24saC5Db21tZW50PWNlLGguRnJhZ21lbnQ9SixoLktlZXBBbGl2ZT1kYSxoLlN0YXRpYz1oZSxoLlN1c3BlbnNlPU9vLGguVGVsZXBvcnQ9VSxoLlRleHQ9ZWUsaC5hc3NlcnROdW1iZXI9VXQsaC5jYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZz1QLGguY2FsbFdpdGhFcnJvckhhbmRsaW5nPVR0LGguY2xvbmVWTm9kZT1waSxoLmNvbXBhdFV0aWxzPUhsLGguY29tcHV0ZWQ9eW8saC5jcmVhdGVBcHA9YmwsaC5jcmVhdGVCbG9jaz1EdCxoLmNyZWF0ZUNvbW1lbnRWTm9kZT1qYSxoLmNyZWF0ZUVsZW1lbnRCbG9jaz1IZSxoLmNyZWF0ZUVsZW1lbnRWTm9kZT16dCxoLmNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyPSRhLGguY3JlYXRlUHJvcHNSZXN0UHJveHk9T24saC5jcmVhdGVSZW5kZXJlcj11cixoLmNyZWF0ZVNsb3RzPVF0LGguY3JlYXRlU3RhdGljVk5vZGU9UWksaC5jcmVhdGVUZXh0Vk5vZGU9aWksaC5jcmVhdGVWTm9kZT0kdCxoLmRlZmluZUFzeW5jQ29tcG9uZW50PURyLGguZGVmaW5lQ29tcG9uZW50PXpyLGguZGVmaW5lRW1pdHM9RG8saC5kZWZpbmVFeHBvc2U9eHMsaC5kZWZpbmVQcm9wcz1kcyxoLmdldEN1cnJlbnRJbnN0YW5jZT15bixoLmdldFRyYW5zaXRpb25SYXdDaGlsZHJlbj1qcixoLmd1YXJkUmVhY3RpdmVQcm9wcz1lYSxoLmg9UGksaC5oYW5kbGVFcnJvcj1DdCxoLmluaXRDdXN0b21Gb3JtYXR0ZXI9TmEsaC5pbmplY3Q9bHIsaC5pbmplY3RIb29rPUZpLGguaXNNZW1vU2FtZT1ncyxoLmlzUnVudGltZU9ubHk9ZnMsaC5pc1ZOb2RlPXZuLGgubWVyZ2VEZWZhdWx0cz1JdCxoLm1lcmdlUHJvcHM9R24saC5uZXh0VGljaz1YcixoLm9uQWN0aXZhdGVkPUxpLGgub25CZWZvcmVNb3VudD1yaSxoLm9uQmVmb3JlVW5tb3VudD1lcixoLm9uQmVmb3JlVXBkYXRlPWNyLGgub25EZWFjdGl2YXRlZD1JbyxoLm9uRXJyb3JDYXB0dXJlZD1KaSxoLm9uTW91bnRlZD1ycixoLm9uUmVuZGVyVHJhY2tlZD1xaSxoLm9uUmVuZGVyVHJpZ2dlcmVkPV9vLGgub25TZXJ2ZXJQcmVmZXRjaD1tbyxoLm9uVW5tb3VudGVkPWRyLGgub25VcGRhdGVkPXFuLGgub3BlbkJsb2NrPXdlLGgucGFyc2VDbGFzc0xpc3Q9RnMsaC5wYXJzZUNsYXNzU3R5bGVzPWhsLGgucG9wU2NvcGVJZD1nbyxoLnByb3ZpZGU9dWksaC5wdXNoU2NvcGVJZD1laSxoLnF1ZXVlUG9zdEZsdXNoQ2I9UXIsaC5yZWdpc3RlclJ1bnRpbWVDb21waWxlcj1XYSxoLnJlbmRlcj1fbCxoLnJlbmRlckxpc3Q9WXQsaC5yZW5kZXJTbG90PVZpLGgucmVzb2x2ZUNvbXBvbmVudD1CLGgucmVzb2x2ZURpcmVjdGl2ZT14ZSxoLnJlc29sdmVEeW5hbWljQ29tcG9uZW50PXJlLGgucmVzb2x2ZUZpbHRlcj0kbCxoLnJlc29sdmVUcmFuc2l0aW9uSG9va3M9RWUsaC5zZXRCbG9ja1RyYWNraW5nPWp0LGguc2V0RGV2dG9vbHNIb29rPU5uLGguc2V0VHJhbnNpdGlvbkhvb2tzPUt0LGguc3NyQ29udGV4dEtleT1lbyxoLnNzclV0aWxzPWRsLGgudG9IYW5kbGVycz1ndCxoLnRyYW5zZm9ybVZOb2RlQXJncz1kdCxoLnVzZUF0dHJzPU5lLGgudXNlQ3NzTW9kdWxlPXpsLGgudXNlQ3NzU3R5bGVzPVVvLGgudXNlQ3NzVmFycz1qcyxoLnVzZVNTUkNvbnRleHQ9Rm8saC51c2VTbG90cz1CcyxoLnVzZVRyYW5zaXRpb25TdGF0ZT1NcixoLnZlcnNpb249cHMsaC53YXJuPU50LGgud2F0Y2g9eHIsaC53YXRjaEVmZmVjdD1RbixoLndhdGNoUG9zdEVmZmVjdD14aSxoLndhdGNoU3luY0VmZmVjdD1vbyxoLndpdGhBc3luY0NvbnRleHQ9QXIsaC53aXRoQ3R4PUFvLGgud2l0aERlZmF1bHRzPWhzLGgud2l0aERpcmVjdGl2ZXM9WG8saC53aXRoS2V5cz1HcyxoLndpdGhNZW1vPXJhLGgud2l0aE1vZGlmaWVycz1tbCxoLndpdGhTY29wZUlkPWZhLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxofSh7fSx3LE4scCk7cmV0dXJuIHkuX19UWVBFX189Im52dWUiLHl9dmFyICRwPSRJKEdJKTt2YXIgaGM9e307TEkoaGMse0VNUFRZX0FSUjooKT0+SkksRU1QVFlfT0JKOigpPT5xSSxOTzooKT0+WkksTk9PUDooKT0+S0ksY2FtZWxpemU6KCk9PmNOLGNhcGl0YWxpemU6KCk9Pml1LGRlZjooKT0+Z04sZXh0ZW5kOigpPT5IaSxnZXRHbG9iYWxUaGlzOigpPT5tTixoYXNDaGFuZ2VkOigpPT5kTixoYXNPd246KCk9PmlsLGh5cGhlbmF0ZTooKT0+ZmYsaW52b2tlQXJyYXlGbnM6KCk9PmhOLGlzQXJyYXk6KCk9PmtpLGlzQnVpbHRJbkRpcmVjdGl2ZTooKT0+c04saXNGdW5jdGlvbjooKT0+Rm4saXNHbG9iYWxseVdoaXRlbGlzdGVkOigpPT5FTixpc0hUTUxUYWc6KCk9PlROLGlzSW50ZWdlcktleTooKT0+b04saXNNYXA6KCk9PkhwLGlzTW9kZWxMaXN0ZW5lcjooKT0+UUksaXNPYmplY3Q6KCk9PkRsLGlzT246KCk9PlhJLGlzUGxhaW5PYmplY3Q6KCk9PkZsLGlzUHJvbWlzZTooKT0+ck4saXNSZWdFeHA6KCk9Pm5OLGlzUmVzZXJ2ZWRQcm9wOigpPT5hTixpc1NWR1RhZzooKT0+UE4saXNTZXQ6KCk9PmpwLGlzU3RyaW5nOigpPT5iaSxpc1N5bWJvbDooKT0+dWYsbG9vc2VUb051bWJlcjooKT0+cE4sbWFrZU1hcDooKT0+TGwsbm9ybWFsaXplQ2xhc3M6KCk9PmhmLG5vcm1hbGl6ZVByb3BzOigpPT5DTixub3JtYWxpemVTdHlsZTooKT0+ZGYscGFyc2VTdHJpbmdTdHlsZTooKT0+R3AscmVtb3ZlOigpPT5lTix0b0Rpc3BsYXlTdHJpbmc6KCk9PklOLHRvSGFuZGxlcktleTooKT0+Zk4sdG9OdW1iZXI6KCk9PnZOLHRvUmF3VHlwZTooKT0+aU4sdG9UeXBlU3RyaW5nOigpPT5NYX0pO2Z1bmN0aW9uIExsKGYscyl7bGV0IHA9T2JqZWN0LmNyZWF0ZShudWxsKSx3PWYuc3BsaXQoIiwiKTtmb3IobGV0IE49MDtOPHcubGVuZ3RoO04rKylwW3dbTl1dPSEwO3JldHVybiBzP049PiEhcFtOLnRvTG93ZXJDYXNlKCldOk49PiEhcFtOXX12YXIgcUk9e30sSkk9W10sS0k9KCk9Pnt9LFpJPSgpPT4hMSxYST1mPT5mLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmYuY2hhckNvZGVBdCgxKT09PTExMCYmKGYuY2hhckNvZGVBdCgyKT4xMjJ8fGYuY2hhckNvZGVBdCgyKTw5NyksUUk9Zj0+Zi5zdGFydHNXaXRoKCJvblVwZGF0ZToiKSxIaT1PYmplY3QuYXNzaWduLGVOPShmLHMpPT57bGV0IHA9Zi5pbmRleE9mKHMpO3A+LTEmJmYuc3BsaWNlKHAsMSl9LHROPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaWw9KGYscyk9PnROLmNhbGwoZixzKSxraT1BcnJheS5pc0FycmF5LEhwPWY9Pk1hKGYpPT09IltvYmplY3QgTWFwXSIsanA9Zj0+TWEoZik9PT0iW29iamVjdCBTZXRdIixuTj1mPT5NYShmKT09PSJbb2JqZWN0IFJlZ0V4cF0iLEZuPWY9PnR5cGVvZiBmPT0iZnVuY3Rpb24iLGJpPWY9PnR5cGVvZiBmPT0ic3RyaW5nIix1Zj1mPT50eXBlb2YgZj09InN5bWJvbCIsRGw9Zj0+ZiE9PW51bGwmJnR5cGVvZiBmPT0ib2JqZWN0IixyTj1mPT4oRGwoZil8fEZuKGYpKSYmRm4oZi50aGVuKSYmRm4oZi5jYXRjaCksenA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxNYT1mPT56cC5jYWxsKGYpLGlOPWY9Pk1hKGYpLnNsaWNlKDgsLTEpLEZsPWY9Pk1hKGYpPT09IltvYmplY3QgT2JqZWN0XSIsb049Zj0+YmkoZikmJmYhPT0iTmFOIiYmZlswXSE9PSItIiYmIiIrcGFyc2VJbnQoZiwxMCk9PT1mLGFOPUxsKCIsa2V5LHJlZixyZWZfZm9yLHJlZl9rZXksb25Wbm9kZUJlZm9yZU1vdW50LG9uVm5vZGVNb3VudGVkLG9uVm5vZGVCZWZvcmVVcGRhdGUsb25Wbm9kZVVwZGF0ZWQsb25Wbm9kZUJlZm9yZVVubW91bnQsb25Wbm9kZVVubW91bnRlZCIpLHNOPUxsKCJiaW5kLGNsb2FrLGVsc2UtaWYsZWxzZSxmb3IsaHRtbCxpZixtb2RlbCxvbixvbmNlLHByZSxzaG93LHNsb3QsdGV4dCxtZW1vIikscnU9Zj0+e2xldCBzPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHA9PnNbcF18fChzW3BdPWYocCkpfSxsTj0vLShcdykvZyxjTj1ydShmPT5mLnJlcGxhY2UobE4sKHMscCk9PnA/cC50b1VwcGVyQ2FzZSgpOiIiKSksdU49L1xCKFtBLVpdKS9nLGZmPXJ1KGY9PmYucmVwbGFjZSh1TiwiLSQxIikudG9Mb3dlckNhc2UoKSksaXU9cnUoZj0+Zi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStmLnNsaWNlKDEpKSxmTj1ydShmPT5mP2BvbiR7aXUoZil9YDoiIiksZE49KGYscyk9PiFPYmplY3QuaXMoZixzKSxoTj0oZixzKT0+e2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWZbcF0ocyl9LGdOPShmLHMscCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZixzLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpwfSl9LHBOPWY9PntsZXQgcz1wYXJzZUZsb2F0KGYpO3JldHVybiBpc05hTihzKT9mOnN9LHZOPWY9PntsZXQgcz1iaShmKT9OdW1iZXIoZik6TmFOO3JldHVybiBpc05hTihzKT9mOnN9LFdwLG1OPSgpPT5XcHx8KFdwPXR5cGVvZiBnbG9iYWxUaGlzIT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmIT0idW5kZWZpbmVkIj9zZWxmOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIj9nbG9iYWw6e30pLF9OPSJJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLHBhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LE1hdGgsTnVtYmVyLERhdGUsQXJyYXksT2JqZWN0LEJvb2xlYW4sU3RyaW5nLFJlZ0V4cCxNYXAsU2V0LEpTT04sSW50bCxCaWdJbnQsY29uc29sZSIsYk49TGwoX04pLEVOPWJOO2Z1bmN0aW9uIGRmKGYpe2lmKGtpKGYpKXtsZXQgcz17fTtmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IHc9ZltwXSxOPWJpKHcpP0dwKHcpOmRmKHcpO2lmKE4pZm9yKGxldCB5IGluIE4pc1t5XT1OW3ldfXJldHVybiBzfWVsc2UgaWYoYmkoZil8fERsKGYpKXJldHVybiBmfXZhciB5Tj0vOyg/IVteKF0qXCkpL2csU049LzooW15dKykvLHdOPS9cL1wqW15dKj9cKlwvL2c7ZnVuY3Rpb24gR3AoZil7bGV0IHM9e307cmV0dXJuIGYucmVwbGFjZSh3TiwiIikuc3BsaXQoeU4pLmZvckVhY2gocD0+e2lmKHApe2xldCB3PXAuc3BsaXQoU04pO3cubGVuZ3RoPjEmJihzW3dbMF0udHJpbSgpXT13WzFdLnRyaW0oKSl9fSksc31mdW5jdGlvbiBoZihmKXtsZXQgcz0iIjtpZihiaShmKSlzPWY7ZWxzZSBpZihraShmKSlmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IHc9aGYoZltwXSk7dyYmKHMrPXcrIiAiKX1lbHNlIGlmKERsKGYpKWZvcihsZXQgcCBpbiBmKWZbcF0mJihzKz1wKyIgIik7cmV0dXJuIHMudHJpbSgpfWZ1bmN0aW9uIENOKGYpe2lmKCFmKXJldHVybiBudWxsO2xldHtjbGFzczpzLHN0eWxlOnB9PWY7cmV0dXJuIHMmJiFiaShzKSYmKGYuY2xhc3M9aGYocykpLHAmJihmLnN0eWxlPWRmKHApKSxmfXZhciBBTj0iaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaGdyb3VwLGgxLGgyLGgzLGg0LGg1LGg2LG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LHN1bW1hcnksdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiLE9OPSJzdmcsYW5pbWF0ZSxhbmltYXRlTW90aW9uLGFuaW1hdGVUcmFuc2Zvcm0sY2lyY2xlLGNsaXBQYXRoLGNvbG9yLXByb2ZpbGUsZGVmcyxkZXNjLGRpc2NhcmQsZWxsaXBzZSxmZUJsZW5kLGZlQ29sb3JNYXRyaXgsZmVDb21wb25lbnRUcmFuc2ZlcixmZUNvbXBvc2l0ZSxmZUNvbnZvbHZlTWF0cml4LGZlRGlmZnVzZUxpZ2h0aW5nLGZlRGlzcGxhY2VtZW50TWFwLGZlRGlzdGFudExpZ2h0LGZlRHJvcFNoYWRvdyxmZUZsb29kLGZlRnVuY0EsZmVGdW5jQixmZUZ1bmNHLGZlRnVuY1IsZmVHYXVzc2lhbkJsdXIsZmVJbWFnZSxmZU1lcmdlLGZlTWVyZ2VOb2RlLGZlTW9ycGhvbG9neSxmZU9mZnNldCxmZVBvaW50TGlnaHQsZmVTcGVjdWxhckxpZ2h0aW5nLGZlU3BvdExpZ2h0LGZlVGlsZSxmZVR1cmJ1bGVuY2UsZmlsdGVyLGZvcmVpZ25PYmplY3QsZyxoYXRjaCxoYXRjaHBhdGgsaW1hZ2UsbGluZSxsaW5lYXJHcmFkaWVudCxtYXJrZXIsbWFzayxtZXNoLG1lc2hncmFkaWVudCxtZXNocGF0Y2gsbWVzaHJvdyxtZXRhZGF0YSxtcGF0aCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyYWRpYWxHcmFkaWVudCxyZWN0LHNldCxzb2xpZGNvbG9yLHN0b3Asc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRQYXRoLHRpdGxlLHRzcGFuLHVua25vd24sdXNlLHZpZXciLFROPUxsKEFOKSxQTj1MbChPTiksSU49Zj0+YmkoZik/ZjpmPT1udWxsPyIiOmtpKGYpfHxEbChmKSYmKGYudG9TdHJpbmc9PT16cHx8IUZuKGYudG9TdHJpbmcpKT9KU09OLnN0cmluZ2lmeShmLFlwLDIpOlN0cmluZyhmKSxZcD0oZixzKT0+cyYmcy5fX3ZfaXNSZWY/WXAoZixzLnZhbHVlKTpIcChzKT97W2BNYXAoJHtzLnNpemV9KWBdOlsuLi5zLmVudHJpZXMoKV0ucmVkdWNlKChwLFt3LE5dLHkpPT4ocFtnZih3LHkpKyIgPT4iXT1OLHApLHt9KX06anAocyk/e1tgU2V0KCR7cy5zaXplfSlgXTpbLi4ucy52YWx1ZXMoKV0ubWFwKHA9PmdmKHApKX06dWYocyk/Z2Yocyk6RGwocykmJiFraShzKSYmIUZsKHMpP1N0cmluZyhzKTpzLGdmPShmLHM9IiIpPT57dmFyIHA7cmV0dXJuIHVmKGYpP2BTeW1ib2woJHsocD1mLmRlc2NyaXB0aW9uKSE9bnVsbD9wOnN9KWA6Zn07ZnVuY3Rpb24gcXAoZil7dmFyIHM9ZnVuY3Rpb24ocCx3KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTihCLC4uLlkpe2NvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke0J9YCwuLi5ZKX1sZXQgeTtjbGFzcyBoe2NvbnN0cnVjdG9yKFk9ITEpe3RoaXMuZGV0YWNoZWQ9WSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5lZmZlY3RzPVtdLHRoaXMuY2xlYW51cHM9W10sdGhpcy5wYXJlbnQ9eSwhWSYmeSYmKHRoaXMuaW5kZXg9KHkuc2NvcGVzfHwoeS5zY29wZXM9W10pKS5wdXNoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXJ1bihZKXtpZih0aGlzLl9hY3RpdmUpe2xldCByZT15O3RyeXtyZXR1cm4geT10aGlzLFkoKX1maW5hbGx5e3k9cmV9fX1vbigpe3k9dGhpc31vZmYoKXt5PXRoaXMucGFyZW50fXN0b3AoWSl7aWYodGhpcy5fYWN0aXZlKXtsZXQgcmUseGU7Zm9yKHJlPTAseGU9dGhpcy5lZmZlY3RzLmxlbmd0aDtyZTx4ZTtyZSsrKXRoaXMuZWZmZWN0c1tyZV0uc3RvcCgpO2ZvcihyZT0wLHhlPXRoaXMuY2xlYW51cHMubGVuZ3RoO3JlPHhlO3JlKyspdGhpcy5jbGVhbnVwc1tyZV0oKTtpZih0aGlzLnNjb3Blcylmb3IocmU9MCx4ZT10aGlzLnNjb3Blcy5sZW5ndGg7cmU8eGU7cmUrKyl0aGlzLnNjb3Blc1tyZV0uc3RvcCghMCk7aWYoIXRoaXMuZGV0YWNoZWQmJnRoaXMucGFyZW50JiYhWSl7bGV0IFplPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtaZSYmWmUhPT10aGlzJiYodGhpcy5wYXJlbnQuc2NvcGVzW3RoaXMuaW5kZXhdPVplLFplLmluZGV4PXRoaXMuaW5kZXgpfXRoaXMucGFyZW50PXZvaWQgMCx0aGlzLl9hY3RpdmU9ITF9fX1mdW5jdGlvbiBFKEIpe3JldHVybiBuZXcgaChCKX1mdW5jdGlvbiBSKEIsWT15KXtZJiZZLmFjdGl2ZSYmWS5lZmZlY3RzLnB1c2goQil9ZnVuY3Rpb24gRGUoKXtyZXR1cm4geX1mdW5jdGlvbiBOdChCKXt5JiZ5LmNsZWFudXBzLnB1c2goQil9bGV0IFV0PUI9PntsZXQgWT1uZXcgU2V0KEIpO3JldHVybiBZLnc9MCxZLm49MCxZfSxUdD1CPT4oQi53JkspPjAsUD1CPT4oQi5uJkspPjAsQ3Q9KHtkZXBzOkJ9KT0+e2lmKEIubGVuZ3RoKWZvcihsZXQgWT0wO1k8Qi5sZW5ndGg7WSsrKUJbWV0ud3w9S30sUm49Qj0+e2xldHtkZXBzOll9PUI7aWYoWS5sZW5ndGgpe2xldCByZT0wO2ZvcihsZXQgeGU9MDt4ZTxZLmxlbmd0aDt4ZSsrKXtsZXQgWmU9WVt4ZV07VHQoWmUpJiYhUChaZSk/WmUuZGVsZXRlKEIpOllbcmUrK109WmUsWmUudyY9fkssWmUubiY9fkt9WS5sZW5ndGg9cmV9fSxvdD1uZXcgV2Vha01hcCx6PTAsSz0xLG1uPTMwLGhuLHduPVN5bWJvbCgiIiksWG49U3ltYm9sKCIiKTtjbGFzcyBzaXtjb25zdHJ1Y3RvcihZLHJlPW51bGwseGUpe3RoaXMuZm49WSx0aGlzLnNjaGVkdWxlcj1yZSx0aGlzLmFjdGl2ZT0hMCx0aGlzLmRlcHM9W10sdGhpcy5wYXJlbnQ9dm9pZCAwLFIodGhpcyx4ZSl9cnVuKCl7aWYoIXRoaXMuYWN0aXZlKXJldHVybiB0aGlzLmZuKCk7bGV0IFk9aG4scmU9Q247Zm9yKDtZOyl7aWYoWT09PXRoaXMpcmV0dXJuO1k9WS5wYXJlbnR9dHJ5e3JldHVybiB0aGlzLnBhcmVudD1obixobj10aGlzLENuPSEwLEs9MTw8Kyt6LHo8PW1uP0N0KHRoaXMpOkVpKHRoaXMpLHRoaXMuZm4oKX1maW5hbGx5e3o8PW1uJiZSbih0aGlzKSxLPTE8PC0teixobj10aGlzLnBhcmVudCxDbj1yZSx0aGlzLnBhcmVudD12b2lkIDAsdGhpcy5kZWZlclN0b3AmJnRoaXMuc3RvcCgpfX1zdG9wKCl7aG49PT10aGlzP3RoaXMuZGVmZXJTdG9wPSEwOnRoaXMuYWN0aXZlJiYoRWkodGhpcyksdGhpcy5vblN0b3AmJnRoaXMub25TdG9wKCksdGhpcy5hY3RpdmU9ITEpfX1mdW5jdGlvbiBFaShCKXtsZXR7ZGVwczpZfT1CO2lmKFkubGVuZ3RoKXtmb3IobGV0IHJlPTA7cmU8WS5sZW5ndGg7cmUrKylZW3JlXS5kZWxldGUoQik7WS5sZW5ndGg9MH19ZnVuY3Rpb24gWHIoQixZKXtCLmVmZmVjdCBpbnN0YW5jZW9mIHNpJiYoQj1CLmVmZmVjdC5mbik7bGV0IHJlPW5ldyBzaShCKTtZJiYody5leHRlbmQocmUsWSksWS5zY29wZSYmUihyZSxZLnNjb3BlKSksKCFZfHwhWS5sYXp5KSYmcmUucnVuKCk7bGV0IHhlPXJlLnJ1bi5iaW5kKHJlKTtyZXR1cm4geGUuZWZmZWN0PXJlLHhlfWZ1bmN0aW9uIG1yKEIpe0IuZWZmZWN0LnN0b3AoKX1sZXQgQ249ITAsX3I9W107ZnVuY3Rpb24gJHIoKXtfci5wdXNoKENuKSxDbj0hMX1mdW5jdGlvbiBRcigpe19yLnB1c2goQ24pLENuPSEwfWZ1bmN0aW9uIHlpKCl7bGV0IEI9X3IucG9wKCk7Q249Qj09PXZvaWQgMD8hMDpCfWZ1bmN0aW9uIGtuKEIsWSxyZSl7aWYoQ24mJmhuKXtsZXQgeGU9b3QuZ2V0KEIpO3hlfHxvdC5zZXQoQix4ZT1uZXcgTWFwKTtsZXQgWmU9eGUuZ2V0KHJlKTtaZXx8eGUuc2V0KHJlLFplPVV0KCkpLGplKFplLHZvaWQgMCl9fWZ1bmN0aW9uIGplKEIsWSl7bGV0IHJlPSExO3o8PW1uP1AoQil8fChCLm58PUsscmU9IVR0KEIpKTpyZT0hQi5oYXMoaG4pLHJlJiYoQi5hZGQoaG4pLGhuLmRlcHMucHVzaChCKSl9ZnVuY3Rpb24gbnQoQixZLHJlLHhlLFplLGN0KXtsZXQgWXQ9b3QuZ2V0KEIpO2lmKCFZdClyZXR1cm47bGV0IFF0PVtdO2lmKFk9PT0iY2xlYXIiKVF0PVsuLi5ZdC52YWx1ZXMoKV07ZWxzZSBpZihyZT09PSJsZW5ndGgiJiZ3LmlzQXJyYXkoQikpe2xldCBHcj1OdW1iZXIoeGUpO1l0LmZvckVhY2goKGd0LFJ0KT0+eyhSdD09PSJsZW5ndGgifHwhdy5pc1N5bWJvbChSdCkmJlJ0Pj1HcikmJlF0LnB1c2goZ3QpfSl9ZWxzZSBzd2l0Y2gocmUhPT12b2lkIDAmJlF0LnB1c2goWXQuZ2V0KHJlKSksWSl7Y2FzZSJhZGQiOncuaXNBcnJheShCKT93LmlzSW50ZWdlcktleShyZSkmJlF0LnB1c2goWXQuZ2V0KCJsZW5ndGgiKSk6KFF0LnB1c2goWXQuZ2V0KHduKSksdy5pc01hcChCKSYmUXQucHVzaChZdC5nZXQoWG4pKSk7YnJlYWs7Y2FzZSJkZWxldGUiOncuaXNBcnJheShCKXx8KFF0LnB1c2goWXQuZ2V0KHduKSksdy5pc01hcChCKSYmUXQucHVzaChZdC5nZXQoWG4pKSk7YnJlYWs7Y2FzZSJzZXQiOncuaXNNYXAoQikmJlF0LnB1c2goWXQuZ2V0KHduKSk7YnJlYWt9bGV0IFZpPXZvaWQgMDtpZihRdC5sZW5ndGg9PT0xKVF0WzBdJiZPdChRdFswXSk7ZWxzZXtsZXQgR3I9W107Zm9yKGxldCBndCBvZiBRdClndCYmR3IucHVzaCguLi5ndCk7T3QoVXQoR3IpKX19ZnVuY3Rpb24gT3QoQixZKXtsZXQgcmU9dy5pc0FycmF5KEIpP0I6Wy4uLkJdO2ZvcihsZXQgeGUgb2YgcmUpeGUuY29tcHV0ZWQmJm5uKHhlLFkpO2ZvcihsZXQgeGUgb2YgcmUpeGUuY29tcHV0ZWR8fG5uKHhlLFkpfWZ1bmN0aW9uIG5uKEIsWSl7KEIhPT1obnx8Qi5hbGxvd1JlY3Vyc2UpJiYoQi5zY2hlZHVsZXI/Qi5zY2hlZHVsZXIoKTpCLnJ1bigpKX1mdW5jdGlvbiBObihCLFkpe3ZhciByZTtyZXR1cm4ocmU9b3QuZ2V0KEIpKT09bnVsbD92b2lkIDA6cmUuZ2V0KFkpfWxldCB1bj13Lm1ha2VNYXAoIl9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLGFyPW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoQj0+QiE9PSJhcmd1bWVudHMiJiZCIT09ImNhbGxlciIpLm1hcChCPT5TeW1ib2xbQl0pLmZpbHRlcih3LmlzU3ltYm9sKSksVm49UG4oKTtmdW5jdGlvbiBQbigpe2xldCBCPXt9O3JldHVyblsiaW5jbHVkZXMiLCJpbmRleE9mIiwibGFzdEluZGV4T2YiXS5mb3JFYWNoKFk9PntCW1ldPWZ1bmN0aW9uKC4uLnJlKXtsZXQgeGU9S3QodGhpcyk7Zm9yKGxldCBjdD0wLFl0PXRoaXMubGVuZ3RoO2N0PFl0O2N0Kyspa24oeGUsImdldCIsY3QrIiIpO2xldCBaZT14ZVtZXSguLi5yZSk7cmV0dXJuIFplPT09LTF8fFplPT09ITE/eGVbWV0oLi4ucmUubWFwKEt0KSk6WmV9fSksWyJwdXNoIiwicG9wIiwic2hpZnQiLCJ1bnNoaWZ0Iiwic3BsaWNlIl0uZm9yRWFjaChZPT57QltZXT1mdW5jdGlvbiguLi5yZSl7JHIoKTtsZXQgeGU9S3QodGhpcylbWV0uYXBwbHkodGhpcyxyZSk7cmV0dXJuIHlpKCkseGV9fSksQn1mdW5jdGlvbiBfbihCKXtsZXQgWT1LdCh0aGlzKTtyZXR1cm4ga24oWSwiaGFzIixCKSxZLmhhc093blByb3BlcnR5KEIpfWNsYXNzIGJye2NvbnN0cnVjdG9yKFk9ITEscmU9ITEpe3RoaXMuX2lzUmVhZG9ubHk9WSx0aGlzLl9zaGFsbG93PXJlfWdldChZLHJlLHhlKXtsZXQgWmU9dGhpcy5faXNSZWFkb25seSxjdD10aGlzLl9zaGFsbG93O2lmKHJlPT09Il9fdl9pc1JlYWN0aXZlIilyZXR1cm4hWmU7aWYocmU9PT0iX192X2lzUmVhZG9ubHkiKXJldHVybiBaZTtpZihyZT09PSJfX3ZfaXNTaGFsbG93IilyZXR1cm4gY3Q7aWYocmU9PT0iX192X3JhdyIpcmV0dXJuIHhlPT09KFplP2N0P3dpOkJyOmN0P3hyOnRpKS5nZXQoWSl8fE9iamVjdC5nZXRQcm90b3R5cGVPZihZKT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih4ZSk/WTp2b2lkIDA7bGV0IFl0PXcuaXNBcnJheShZKTtpZighWmUpe2lmKFl0JiZ3Lmhhc093bihWbixyZSkpcmV0dXJuIFJlZmxlY3QuZ2V0KFZuLHJlLHhlKTtpZihyZT09PSJoYXNPd25Qcm9wZXJ0eSIpcmV0dXJuIF9ufWxldCBRdD1SZWZsZWN0LmdldChZLHJlLHhlKTtyZXR1cm4ody5pc1N5bWJvbChyZSk/YXIuaGFzKHJlKTp1bihyZSkpfHwoWmV8fGtuKFksImdldCIscmUpLGN0KT9RdDpCbihRdCk/WXQmJncuaXNJbnRlZ2VyS2V5KHJlKT9RdDpRdC52YWx1ZTp3LmlzT2JqZWN0KFF0KT9aZT9nbihRdCk6TXIoUXQpOlF0fX1jbGFzcyBlaSBleHRlbmRzIGJye2NvbnN0cnVjdG9yKFk9ITEpe3N1cGVyKCExLFkpfXNldChZLHJlLHhlLFplKXtsZXQgY3Q9WVtyZV07aWYoRWUoY3QpJiZCbihjdCkmJiFCbih4ZSkpcmV0dXJuITE7aWYoIXRoaXMuX3NoYWxsb3cmJighbmkoeGUpJiYhRWUoeGUpJiYoY3Q9S3QoY3QpLHhlPUt0KHhlKSksIXcuaXNBcnJheShZKSYmQm4oY3QpJiYhQm4oeGUpKSlyZXR1cm4gY3QudmFsdWU9eGUsITA7bGV0IFl0PXcuaXNBcnJheShZKSYmdy5pc0ludGVnZXJLZXkocmUpP051bWJlcihyZSk8WS5sZW5ndGg6dy5oYXNPd24oWSxyZSksUXQ9UmVmbGVjdC5zZXQoWSxyZSx4ZSxaZSk7cmV0dXJuIFk9PT1LdChaZSkmJihZdD93Lmhhc0NoYW5nZWQoeGUsY3QpJiZudChZLCJzZXQiLHJlLHhlLGN0KTpudChZLCJhZGQiLHJlLHhlKSksUXR9ZGVsZXRlUHJvcGVydHkoWSxyZSl7bGV0IHhlPXcuaGFzT3duKFkscmUpLFplPVlbcmVdLGN0PVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoWSxyZSk7cmV0dXJuIGN0JiZ4ZSYmbnQoWSwiZGVsZXRlIixyZSx2b2lkIDAsWmUpLGN0fWhhcyhZLHJlKXtsZXQgeGU9UmVmbGVjdC5oYXMoWSxyZSk7cmV0dXJuKCF3LmlzU3ltYm9sKHJlKXx8IWFyLmhhcyhyZSkpJiZrbihZLCJoYXMiLHJlKSx4ZX1vd25LZXlzKFkpe3JldHVybiBrbihZLCJpdGVyYXRlIix3LmlzQXJyYXkoWSk/Imxlbmd0aCI6d24pLFJlZmxlY3Qub3duS2V5cyhZKX19Y2xhc3MgZ28gZXh0ZW5kcyBicntjb25zdHJ1Y3RvcihZPSExKXtzdXBlcighMCxZKX1zZXQoWSxyZSl7cmV0dXJuITB9ZGVsZXRlUHJvcGVydHkoWSxyZSl7cmV0dXJuITB9fWxldCBmYT1uZXcgZWksQW89bmV3IGdvLEpvPW5ldyBlaSghMCksS289bmV3IGdvKCEwKSxSaT1CPT5CLFJyPUI9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoQik7ZnVuY3Rpb24gemkoQixZLHJlPSExLHhlPSExKXtCPUIuX192X3JhdztsZXQgWmU9S3QoQiksY3Q9S3QoWSk7cmV8fCh3Lmhhc0NoYW5nZWQoWSxjdCkmJmtuKFplLCJnZXQiLFkpLGtuKFplLCJnZXQiLGN0KSk7bGV0e2hhczpZdH09UnIoWmUpLFF0PXhlP1JpOnJlP0xyOnpyO2lmKFl0LmNhbGwoWmUsWSkpcmV0dXJuIFF0KEIuZ2V0KFkpKTtpZihZdC5jYWxsKFplLGN0KSlyZXR1cm4gUXQoQi5nZXQoY3QpKTtCIT09WmUmJkIuZ2V0KFkpfWZ1bmN0aW9uIFdpKEIsWT0hMSl7bGV0IHJlPXRoaXMuX192X3Jhdyx4ZT1LdChyZSksWmU9S3QoQik7cmV0dXJuIFl8fCh3Lmhhc0NoYW5nZWQoQixaZSkmJmtuKHhlLCJoYXMiLEIpLGtuKHhlLCJoYXMiLFplKSksQj09PVplP3JlLmhhcyhCKTpyZS5oYXMoQil8fHJlLmhhcyhaZSl9ZnVuY3Rpb24gcm8oQixZPSExKXtyZXR1cm4gQj1CLl9fdl9yYXcsIVkmJmtuKEt0KEIpLCJpdGVyYXRlIix3biksUmVmbGVjdC5nZXQoQiwic2l6ZSIsQil9ZnVuY3Rpb24gaW8oQil7Qj1LdChCKTtsZXQgWT1LdCh0aGlzKTtyZXR1cm4gUnIoWSkuaGFzLmNhbGwoWSxCKXx8KFkuYWRkKEIpLG50KFksImFkZCIsQixCKSksdGhpc31mdW5jdGlvbiBsaShCLFkpe1k9S3QoWSk7bGV0IHJlPUt0KHRoaXMpLHtoYXM6eGUsZ2V0OlplfT1ScihyZSksY3Q9eGUuY2FsbChyZSxCKTtjdHx8KEI9S3QoQiksY3Q9eGUuY2FsbChyZSxCKSk7bGV0IFl0PVplLmNhbGwocmUsQik7cmV0dXJuIHJlLnNldChCLFkpLGN0P3cuaGFzQ2hhbmdlZChZLFl0KSYmbnQocmUsInNldCIsQixZLFl0KTpudChyZSwiYWRkIixCLFkpLHRoaXN9ZnVuY3Rpb24gcG8oQil7bGV0IFk9S3QodGhpcykse2hhczpyZSxnZXQ6eGV9PVJyKFkpLFplPXJlLmNhbGwoWSxCKTtaZXx8KEI9S3QoQiksWmU9cmUuY2FsbChZLEIpKTtsZXQgY3Q9eGU/eGUuY2FsbChZLEIpOnZvaWQgMCxZdD1ZLmRlbGV0ZShCKTtyZXR1cm4gWmUmJm50KFksImRlbGV0ZSIsQix2b2lkIDAsY3QpLFl0fWZ1bmN0aW9uIE9vKCl7bGV0IEI9S3QodGhpcyksWT1CLnNpemUhPT0wLHJlPXZvaWQgMCx4ZT1CLmNsZWFyKCk7cmV0dXJuIFkmJm50KEIsImNsZWFyIix2b2lkIDAsdm9pZCAwLHJlKSx4ZX1mdW5jdGlvbiB4bihCLFkpe3JldHVybiBmdW5jdGlvbih4ZSxaZSl7bGV0IGN0PXRoaXMsWXQ9Y3QuX192X3JhdyxRdD1LdChZdCksVmk9WT9SaTpCP0xyOnpyO3JldHVybiFCJiZrbihRdCwiaXRlcmF0ZSIsd24pLFl0LmZvckVhY2goKEdyLGd0KT0+eGUuY2FsbChaZSxWaShHciksVmkoZ3QpLGN0KSl9fWZ1bmN0aW9uIFRyKEIsWSxyZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLnhlKXtsZXQgWmU9dGhpcy5fX3ZfcmF3LGN0PUt0KFplKSxZdD13LmlzTWFwKGN0KSxRdD1CPT09ImVudHJpZXMifHxCPT09U3ltYm9sLml0ZXJhdG9yJiZZdCxWaT1CPT09ImtleXMiJiZZdCxHcj1aZVtCXSguLi54ZSksZ3Q9cmU/Umk6WT9Mcjp6cjtyZXR1cm4hWSYma24oY3QsIml0ZXJhdGUiLFZpP1huOnduKSx7bmV4dCgpe2xldHt2YWx1ZTpSdCxkb25lOllyfT1Hci5uZXh0KCk7cmV0dXJuIFlyP3t2YWx1ZTpSdCxkb25lOllyfTp7dmFsdWU6UXQ/W2d0KFJ0WzBdKSxndChSdFsxXSldOmd0KFJ0KSxkb25lOllyfX0sW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fX1mdW5jdGlvbiBjaShCKXtyZXR1cm4gZnVuY3Rpb24oLi4uWSl7cmV0dXJuIEI9PT0iZGVsZXRlIj8hMTpCPT09ImNsZWFyIj92b2lkIDA6dGhpc319ZnVuY3Rpb24gZnIoKXtsZXQgQj17Z2V0KGN0KXtyZXR1cm4gemkodGhpcyxjdCl9LGdldCBzaXplKCl7cmV0dXJuIHJvKHRoaXMpfSxoYXM6V2ksYWRkOmlvLHNldDpsaSxkZWxldGU6cG8sY2xlYXI6T28sZm9yRWFjaDp4bighMSwhMSl9LFk9e2dldChjdCl7cmV0dXJuIHppKHRoaXMsY3QsITEsITApfSxnZXQgc2l6ZSgpe3JldHVybiBybyh0aGlzKX0saGFzOldpLGFkZDppbyxzZXQ6bGksZGVsZXRlOnBvLGNsZWFyOk9vLGZvckVhY2g6eG4oITEsITApfSxyZT17Z2V0KGN0KXtyZXR1cm4gemkodGhpcyxjdCwhMCl9LGdldCBzaXplKCl7cmV0dXJuIHJvKHRoaXMsITApfSxoYXMoY3Qpe3JldHVybiBXaS5jYWxsKHRoaXMsY3QsITApfSxhZGQ6Y2koImFkZCIpLHNldDpjaSgic2V0IiksZGVsZXRlOmNpKCJkZWxldGUiKSxjbGVhcjpjaSgiY2xlYXIiKSxmb3JFYWNoOnhuKCEwLCExKX0seGU9e2dldChjdCl7cmV0dXJuIHppKHRoaXMsY3QsITAsITApfSxnZXQgc2l6ZSgpe3JldHVybiBybyh0aGlzLCEwKX0saGFzKGN0KXtyZXR1cm4gV2kuY2FsbCh0aGlzLGN0LCEwKX0sYWRkOmNpKCJhZGQiKSxzZXQ6Y2koInNldCIpLGRlbGV0ZTpjaSgiZGVsZXRlIiksY2xlYXI6Y2koImNsZWFyIiksZm9yRWFjaDp4bighMCwhMCl9O3JldHVyblsia2V5cyIsInZhbHVlcyIsImVudHJpZXMiLFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFjaChjdD0+e0JbY3RdPVRyKGN0LCExLCExKSxyZVtjdF09VHIoY3QsITAsITEpLFlbY3RdPVRyKGN0LCExLCEwKSx4ZVtjdF09VHIoY3QsITAsITApfSksW0IscmUsWSx4ZV19bGV0W3ZvLFpvLFRvLFNpXT1mcigpO2Z1bmN0aW9uIHNyKEIsWSl7bGV0IHJlPVk/Qj9TaTpUbzpCP1pvOnZvO3JldHVybih4ZSxaZSxjdCk9PlplPT09Il9fdl9pc1JlYWN0aXZlIj8hQjpaZT09PSJfX3ZfaXNSZWFkb25seSI/QjpaZT09PSJfX3ZfcmF3Ij94ZTpSZWZsZWN0LmdldCh3Lmhhc093bihyZSxaZSkmJlplIGluIHhlP3JlOnhlLFplLGN0KX1sZXQgdWk9e2dldDpzcighMSwhMSl9LGxyPXtnZXQ6c3IoITEsITApfSxRbj17Z2V0OnNyKCEwLCExKX0seGk9e2dldDpzcighMCwhMCl9O2Z1bmN0aW9uIG9vKEIsWSxyZSl7bGV0IHhlPUt0KHJlKTtpZih4ZSE9PXJlJiZZLmNhbGwoQix4ZSkpe2xldCBaZT13LnRvUmF3VHlwZShCKTtjb25zb2xlLndhcm4oYFJlYWN0aXZlICR7WmV9IGNvbnRhaW5zIGJvdGggdGhlIHJhdyBhbmQgcmVhY3RpdmUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgb2JqZWN0JHtaZT09PSJNYXAiPyIgYXMga2V5cyI6IiJ9LCB3aGljaCBjYW4gbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMuIEF2b2lkIGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIGFuIG9iamVjdCBhbmQgb25seSB1c2UgdGhlIHJlYWN0aXZlIHZlcnNpb24gaWYgcG9zc2libGUuYCl9fWxldCB0aT1uZXcgV2Vha01hcCx4cj1uZXcgV2Vha01hcCxCcj1uZXcgV2Vha01hcCx3aT1uZXcgV2Vha01hcDtmdW5jdGlvbiBQbyhCKXtzd2l0Y2goQil7Y2FzZSJPYmplY3QiOmNhc2UiQXJyYXkiOnJldHVybiAxO2Nhc2UiTWFwIjpjYXNlIlNldCI6Y2FzZSJXZWFrTWFwIjpjYXNlIldlYWtTZXQiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIEhyKEIpe3JldHVybiBCLl9fdl9za2lwfHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShCKT8wOlBvKHcudG9SYXdUeXBlKEIpKX1mdW5jdGlvbiBNcihCKXtyZXR1cm4gRWUoQik/QjpQcihCLCExLGZhLHVpLHRpKX1mdW5jdGlvbiBFcihCKXtyZXR1cm4gUHIoQiwhMSxKbyxscix4cil9ZnVuY3Rpb24gZ24oQil7cmV0dXJuIFByKEIsITAsQW8sUW4sQnIpfWZ1bmN0aW9uIGZpKEIpe3JldHVybiBQcihCLCEwLEtvLHhpLHdpKX1mdW5jdGlvbiBQcihCLFkscmUseGUsWmUpe2lmKCF3LmlzT2JqZWN0KEIpfHxCLl9fdl9yYXcmJiEoWSYmQi5fX3ZfaXNSZWFjdGl2ZSkpcmV0dXJuIEI7bGV0IGN0PVplLmdldChCKTtpZihjdClyZXR1cm4gY3Q7bGV0IFl0PUhyKEIpO2lmKFl0PT09MClyZXR1cm4gQjtsZXQgUXQ9bmV3IFByb3h5KEIsWXQ9PT0yP3hlOnJlKTtyZXR1cm4gWmUuc2V0KEIsUXQpLFF0fWZ1bmN0aW9uIEx0KEIpe3JldHVybiBFZShCKT9MdChCLl9fdl9yYXcpOiEhKEImJkIuX192X2lzUmVhY3RpdmUpfWZ1bmN0aW9uIEVlKEIpe3JldHVybiEhKEImJkIuX192X2lzUmVhZG9ubHkpfWZ1bmN0aW9uIG5pKEIpe3JldHVybiEhKEImJkIuX192X2lzU2hhbGxvdyl9ZnVuY3Rpb24gR2koQil7cmV0dXJuIEx0KEIpfHxFZShCKX1mdW5jdGlvbiBLdChCKXtsZXQgWT1CJiZCLl9fdl9yYXc7cmV0dXJuIFk/S3QoWSk6Qn1mdW5jdGlvbiBqcihCKXtyZXR1cm4gdy5kZWYoQiwiX192X3NraXAiLCEwKSxCfWxldCB6cj1CPT53LmlzT2JqZWN0KEIpP01yKEIpOkIsTHI9Qj0+dy5pc09iamVjdChCKT9nbihCKTpCO2Z1bmN0aW9uIERyKEIpe0NuJiZobiYmKEI9S3QoQiksamUoQi5kZXB8fChCLmRlcD1VdCgpKSkpfWZ1bmN0aW9uIEJpKEIsWSl7Qj1LdChCKTtsZXQgcmU9Qi5kZXA7cmUmJk90KHJlKX1mdW5jdGlvbiBCbihCKXtyZXR1cm4hIShCJiZCLl9fdl9pc1JlZj09PSEwKX1mdW5jdGlvbiBkaShCKXtyZXR1cm4gTWkoQiwhMSl9ZnVuY3Rpb24gZGEoQil7cmV0dXJuIE1pKEIsITApfWZ1bmN0aW9uIE1pKEIsWSl7cmV0dXJuIEJuKEIpP0I6bmV3IExpKEIsWSl9Y2xhc3MgTGl7Y29uc3RydWN0b3IoWSxyZSl7dGhpcy5fX3ZfaXNTaGFsbG93PXJlLHRoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9yYXdWYWx1ZT1yZT9ZOkt0KFkpLHRoaXMuX3ZhbHVlPXJlP1k6enIoWSl9Z2V0IHZhbHVlKCl7cmV0dXJuIERyKHRoaXMpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShZKXtsZXQgcmU9dGhpcy5fX3ZfaXNTaGFsbG93fHxuaShZKXx8RWUoWSk7WT1yZT9ZOkt0KFkpLHcuaGFzQ2hhbmdlZChZLHRoaXMuX3Jhd1ZhbHVlKSYmKHRoaXMuX3Jhd1ZhbHVlPVksdGhpcy5fdmFsdWU9cmU/WTp6cihZKSxCaSh0aGlzLFkpKX19ZnVuY3Rpb24gSW8oQil7QmkoQix2b2lkIDApfWZ1bmN0aW9uIEFuKEIpe3JldHVybiBCbihCKT9CLnZhbHVlOkJ9ZnVuY3Rpb24gRGkoQil7cmV0dXJuIHcuaXNGdW5jdGlvbihCKT9CKCk6QW4oQil9bGV0IFlpPXtnZXQ6KEIsWSxyZSk9PkFuKFJlZmxlY3QuZ2V0KEIsWSxyZSkpLHNldDooQixZLHJlLHhlKT0+e2xldCBaZT1CW1ldO3JldHVybiBCbihaZSkmJiFCbihyZSk/KFplLnZhbHVlPXJlLCEwKTpSZWZsZWN0LnNldChCLFkscmUseGUpfX07ZnVuY3Rpb24gQ2koQil7cmV0dXJuIEx0KEIpP0I6bmV3IFByb3h5KEIsWWkpfWNsYXNzIEZpe2NvbnN0cnVjdG9yKFkpe3RoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMDtsZXR7Z2V0OnJlLHNldDp4ZX09WSgoKT0+RHIodGhpcyksKCk9PkJpKHRoaXMpKTt0aGlzLl9nZXQ9cmUsdGhpcy5fc2V0PXhlfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9nZXQoKX1zZXQgdmFsdWUoWSl7dGhpcy5fc2V0KFkpfX1mdW5jdGlvbiBJcihCKXtyZXR1cm4gbmV3IEZpKEIpfWZ1bmN0aW9uIHJpKEIpe2xldCBZPXcuaXNBcnJheShCKT9uZXcgQXJyYXkoQi5sZW5ndGgpOnt9O2ZvcihsZXQgcmUgaW4gQilZW3JlXT1lcihCLHJlKTtyZXR1cm4gWX1jbGFzcyBycntjb25zdHJ1Y3RvcihZLHJlLHhlKXt0aGlzLl9vYmplY3Q9WSx0aGlzLl9rZXk9cmUsdGhpcy5fZGVmYXVsdFZhbHVlPXhlLHRoaXMuX192X2lzUmVmPSEwfWdldCB2YWx1ZSgpe2xldCBZPXRoaXMuX29iamVjdFt0aGlzLl9rZXldO3JldHVybiBZPT09dm9pZCAwP3RoaXMuX2RlZmF1bHRWYWx1ZTpZfXNldCB2YWx1ZShZKXt0aGlzLl9vYmplY3RbdGhpcy5fa2V5XT1ZfWdldCBkZXAoKXtyZXR1cm4gTm4oS3QodGhpcy5fb2JqZWN0KSx0aGlzLl9rZXkpfX1jbGFzcyBjcntjb25zdHJ1Y3RvcihZKXt0aGlzLl9nZXR0ZXI9WSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1JlYWRvbmx5PSEwfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9nZXR0ZXIoKX19ZnVuY3Rpb24gcW4oQixZLHJlKXtyZXR1cm4gQm4oQik/Qjp3LmlzRnVuY3Rpb24oQik/bmV3IGNyKEIpOncuaXNPYmplY3QoQikmJmFyZ3VtZW50cy5sZW5ndGg+MT9lcihCLFkscmUpOmRpKEIpfWZ1bmN0aW9uIGVyKEIsWSxyZSl7bGV0IHhlPUJbWV07cmV0dXJuIEJuKHhlKT94ZTpuZXcgcnIoQixZLHJlKX1jbGFzcyBkcntjb25zdHJ1Y3RvcihZLHJlLHhlLFplKXt0aGlzLl9zZXR0ZXI9cmUsdGhpcy5kZXA9dm9pZCAwLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX192X2lzUmVhZG9ubHk9ITEsdGhpcy5fZGlydHk9ITAsdGhpcy5lZmZlY3Q9bmV3IHNpKFksKCk9Pnt0aGlzLl9kaXJ0eXx8KHRoaXMuX2RpcnR5PSEwLEJpKHRoaXMpKX0pLHRoaXMuZWZmZWN0LmNvbXB1dGVkPXRoaXMsdGhpcy5lZmZlY3QuYWN0aXZlPXRoaXMuX2NhY2hlYWJsZT0hWmUsdGhpcy5fX3ZfaXNSZWFkb25seT14ZX1nZXQgdmFsdWUoKXtsZXQgWT1LdCh0aGlzKTtyZXR1cm4gRHIoWSksKFkuX2RpcnR5fHwhWS5fY2FjaGVhYmxlKSYmKFkuX2RpcnR5PSExLFkuX3ZhbHVlPVkuZWZmZWN0LnJ1bigpKSxZLl92YWx1ZX1zZXQgdmFsdWUoWSl7dGhpcy5fc2V0dGVyKFkpfX1mdW5jdGlvbiBtbyhCLFkscmU9ITEpe2xldCB4ZSxaZSxjdD13LmlzRnVuY3Rpb24oQik7cmV0dXJuIGN0Pyh4ZT1CLFplPXcuTk9PUCk6KHhlPUIuZ2V0LFplPUIuc2V0KSxuZXcgZHIoeGUsWmUsY3R8fCFaZSxyZSl9bGV0IF9vPVByb21pc2UucmVzb2x2ZSgpLHFpPVtdLEppPSExLFhvPUI9PntxaS5wdXNoKEIpLEppfHwoSmk9ITAsX28udGhlbihXcikpfSxXcj0oKT0+e2ZvcihsZXQgQj0wO0I8cWkubGVuZ3RoO0IrKylxaVtCXSgpO3FpLmxlbmd0aD0wLEppPSExfTtjbGFzcyB5cntjb25zdHJ1Y3RvcihZKXt0aGlzLmRlcD12b2lkIDAsdGhpcy5fZGlydHk9ITAsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNSZWFkb25seT0hMDtsZXQgcmUseGU9ITEsWmU9ITE7dGhpcy5lZmZlY3Q9bmV3IHNpKFksY3Q9PntpZih0aGlzLmRlcCl7aWYoY3QpcmU9dGhpcy5fdmFsdWUseGU9ITA7ZWxzZSBpZighWmUpe2xldCBZdD14ZT9yZTp0aGlzLl92YWx1ZTtaZT0hMCx4ZT0hMSxYbygoKT0+e3RoaXMuZWZmZWN0LmFjdGl2ZSYmdGhpcy5fZ2V0KCkhPT1ZdCYmQmkodGhpcyksWmU9ITF9KX1mb3IobGV0IFl0IG9mIHRoaXMuZGVwKVl0LmNvbXB1dGVkIGluc3RhbmNlb2YgeXImJll0LnNjaGVkdWxlcighMCl9dGhpcy5fZGlydHk9ITB9KSx0aGlzLmVmZmVjdC5jb21wdXRlZD10aGlzfV9nZXQoKXtyZXR1cm4gdGhpcy5fZGlydHk/KHRoaXMuX2RpcnR5PSExLHRoaXMuX3ZhbHVlPXRoaXMuZWZmZWN0LnJ1bigpKTp0aGlzLl92YWx1ZX1nZXQgdmFsdWUoKXtyZXR1cm4gRHIodGhpcyksS3QodGhpcykuX2dldCgpfX1mdW5jdGlvbiBObyhCKXtyZXR1cm4gbmV3IHlyKEIpfXJldHVybiBwLkVmZmVjdFNjb3BlPWgscC5JVEVSQVRFX0tFWT13bixwLlJlYWN0aXZlRWZmZWN0PXNpLHAuY29tcHV0ZWQ9bW8scC5jdXN0b21SZWY9SXIscC5kZWZlcnJlZENvbXB1dGVkPU5vLHAuZWZmZWN0PVhyLHAuZWZmZWN0U2NvcGU9RSxwLmVuYWJsZVRyYWNraW5nPVFyLHAuZ2V0Q3VycmVudFNjb3BlPURlLHAuaXNQcm94eT1HaSxwLmlzUmVhY3RpdmU9THQscC5pc1JlYWRvbmx5PUVlLHAuaXNSZWY9Qm4scC5pc1NoYWxsb3c9bmkscC5tYXJrUmF3PWpyLHAub25TY29wZURpc3Bvc2U9TnQscC5wYXVzZVRyYWNraW5nPSRyLHAucHJveHlSZWZzPUNpLHAucmVhY3RpdmU9TXIscC5yZWFkb25seT1nbixwLnJlZj1kaSxwLnJlc2V0VHJhY2tpbmc9eWkscC5zaGFsbG93UmVhY3RpdmU9RXIscC5zaGFsbG93UmVhZG9ubHk9ZmkscC5zaGFsbG93UmVmPWRhLHAuc3RvcD1tcixwLnRvUmF3PUt0LHAudG9SZWY9cW4scC50b1JlZnM9cmkscC50b1ZhbHVlPURpLHAudHJhY2s9a24scC50cmlnZ2VyPW50LHAudHJpZ2dlclJlZj1JbyxwLnVucmVmPUFuLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxwfSh7fSxmKTtyZXR1cm4gc31mdW5jdGlvbiBKcChmKXt2YXIgcz1mdW5jdGlvbihwKXsidXNlIHN0cmljdCI7bGV0IHc9YApgLE49NDQseT01MCxoPTUwLEU9WyIlIiwiJSJdLFI9IiMwMDdhZmYiLERlPS9eKFthLXotXSs6KT9cL1wvL2ksTnQ9L15kYXRhOi4qLC4qLyxVdD0iV0VCX0lOVk9LRV9BUFBTRVJWSUNFIixUdD0id3hzOi8vIixQPSJqc29uOi8vIixDdD0id3hzTW9kdWxlcyIsUm49InJlbmRlcmpzTW9kdWxlcyIsb3Q9Im9uU2hvdyIsej0ib25IaWRlIixLPSJvbkxhdW5jaCIsbW49Im9uRXJyb3IiLGhuPSJvblRoZW1lQ2hhbmdlIix3bj0ib2ZmVGhlbWVDaGFuZ2UiLFhuPSJvbktleWJvYXJkSGVpZ2h0Q2hhbmdlIixzaT0ib25QYWdlTm90Rm91bmQiLEVpPSJvblVuaGFuZGxlZFJlamVjdGlvbiIsWHI9Im9uRXhpdCIsbXI9Im9uTG9hZCIsQ249Im9uUmVhZHkiLF9yPSJvblVubG9hZCIsJHI9Im9uSW5pdCIsUXI9Im9uU2F2ZUV4aXRTdGF0ZSIseWk9Im9uUmVzaXplIixrbj0ib25CYWNrUHJlc3MiLGplPSJvblBhZ2VTY3JvbGwiLG50PSJvblRhYkl0ZW1UYXAiLE90PSJvblJlYWNoQm90dG9tIixubj0ib25QdWxsRG93blJlZnJlc2giLE5uPSJvblNoYXJlVGltZWxpbmUiLHVuPSJvbkFkZFRvRmF2b3JpdGVzIixhcj0ib25TaGFyZUFwcE1lc3NhZ2UiLFZuPSJvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAiLFBuPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENsaWNrZWQiLF9uPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQiLGJyPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENvbmZpcm1lZCIsZWk9Im9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Rm9jdXNDaGFuZ2VkIixnbz0ib25BcHBFbnRlckZvcmVncm91bmQiLGZhPSJvbkFwcEVudGVyQmFja2dyb3VuZCIsQW89Im9uV3hzSW52b2tlQ2FsbE1ldGhvZCI7ZnVuY3Rpb24gSm8ob2Upe3JldHVybiEhb2UuYXBwQ29udGV4dH1mdW5jdGlvbiBLbyhvZSl7cmV0dXJuIG9lJiYoSm8ob2UpP29lLnByb3h5Om9lKX1mdW5jdGlvbiBSaShvZSl7cmV0dXJuIG9lLm5vZGVUeXBlPT09MX1mdW5jdGlvbiBScihvZSxYPSExKXtsZXR7dm5vZGU6c2V9PW9lO2lmKFJpKHNlLmVsKSlyZXR1cm4gWD9zZS5lbD9bc2UuZWxdOltdOnNlLmVsO2xldHtzdWJUcmVlOkJlfT1vZTtpZihCZS5zaGFwZUZsYWcmMTYpe2xldCBtdD1CZS5jaGlsZHJlbi5maWx0ZXIocG49PnBuLmVsJiZSaShwbi5lbCkpO2lmKG10Lmxlbmd0aD4wKXJldHVybiBYP210Lm1hcChwbj0+cG4uZWwpOm10WzBdLmVsfXJldHVybiBYP3NlLmVsP1tzZS5lbF06W106c2UuZWx9bGV0IHppPTA7ZnVuY3Rpb24gV2kob2UsLi4uWCl7bGV0IHNlPURhdGUubm93KCksQmU9emk/c2Utemk6MDtyZXR1cm4gemk9c2UsYFske3NlfV1bJHtCZX1tc11bJHtvZX1dXHVGRjFBJHtYLm1hcChtdD0+SlNPTi5zdHJpbmdpZnkobXQpKS5qb2luKCIgIil9YH1mdW5jdGlvbiBybyhvZSl7bGV0IFg9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gc2U9Plhbc2VdfHwoWFtzZV09b2Uoc2UpKX1mdW5jdGlvbiBpbyhvZSl7cmV0dXJuIHJvKG9lKX1mdW5jdGlvbiBsaShvZT0iIil7cmV0dXJuKCIiK29lKS5yZXBsYWNlKC9bXlx4MDAtXHhmZl0vZywiKioiKS5sZW5ndGh9ZnVuY3Rpb24gcG8ob2Upe3JldHVybiBvZS5pbmRleE9mKCIvIik9PT0wfWZ1bmN0aW9uIE9vKG9lKXtyZXR1cm4gcG8ob2UpP29lOiIvIitvZX1mdW5jdGlvbiB4bihvZSl7cmV0dXJuIHBvKG9lKT9vZS5zbGljZSgxKTpvZX1sZXQgVHI9KG9lLFgpPT57bGV0IHNlO2ZvcihsZXQgQmU9MDtCZTxvZS5sZW5ndGg7QmUrKylzZT1vZVtCZV0oWCk7cmV0dXJuIHNlfTtmdW5jdGlvbiBjaShvZSxYPW51bGwpe2xldCBzZTtyZXR1cm4oLi4uQmUpPT4ob2UmJihzZT1vZS5hcHBseShYLEJlKSxvZT1udWxsKSxzZSl9ZnVuY3Rpb24gZnIob2UsWCl7b2U9b2V8fHt9LHAuaXNTdHJpbmcoWCkmJihYPXtlcnJNc2c6WH0pLC86b2skLy50ZXN0KFguZXJyTXNnKT9wLmlzRnVuY3Rpb24ob2Uuc3VjY2VzcykmJm9lLnN1Y2Nlc3MoWCk6cC5pc0Z1bmN0aW9uKG9lLmZhaWwpJiZvZS5mYWlsKFgpLHAuaXNGdW5jdGlvbihvZS5jb21wbGV0ZSkmJm9lLmNvbXBsZXRlKFgpfWZ1bmN0aW9uIHZvKG9lKXtsZXQgWD17fTtyZXR1cm4gcC5pc1BsYWluT2JqZWN0KG9lKSYmT2JqZWN0LmtleXMob2UpLnNvcnQoKS5mb3JFYWNoKHNlPT57bGV0IEJlPXNlO1hbQmVdPW9lW0JlXX0pLE9iamVjdC5rZXlzKFgpP1g6b2V9bGV0IFpvPWVuY29kZVVSSUNvbXBvbmVudDtmdW5jdGlvbiBUbyhvZSxYPVpvKXtsZXQgc2U9b2U/T2JqZWN0LmtleXMob2UpLm1hcChCZT0+e2xldCBtdD1vZVtCZV07cmV0dXJuIHR5cGVvZiBtdD09PXZvaWQgMHx8bXQ9PT1udWxsP210PSIiOnAuaXNQbGFpbk9iamVjdChtdCkmJihtdD1KU09OLnN0cmluZ2lmeShtdCkpLFgoQmUpKyI9IitYKG10KX0pLmZpbHRlcihCZT0+QmUubGVuZ3RoPjApLmpvaW4oIiYiKTpudWxsO3JldHVybiBzZT9gPyR7c2V9YDoiIn1mdW5jdGlvbiBTaShvZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoIiIrb2UpfWNhdGNoKFgpe31yZXR1cm4iIitvZX1sZXQgc3I9L1wrL2c7ZnVuY3Rpb24gdWkob2Upe2xldCBYPXt9O2lmKG9lPT09IiJ8fG9lPT09Ij8iKXJldHVybiBYO2xldCBCZT0ob2VbMF09PT0iPyI/b2Uuc2xpY2UoMSk6b2UpLnNwbGl0KCImIik7Zm9yKGxldCBtdD0wO210PEJlLmxlbmd0aDsrK210KXtsZXQgcG49QmVbbXRdLnJlcGxhY2Uoc3IsIiAiKSxKbj1wbi5pbmRleE9mKCI9IiksVW49U2koSm48MD9wbjpwbi5zbGljZSgwLEpuKSksU3I9Sm48MD9udWxsOlNpKHBuLnNsaWNlKEpuKzEpKTtpZihVbiBpbiBYKXtsZXQgRnI9WFtVbl07cC5pc0FycmF5KEZyKXx8KEZyPVhbVW5dPVtGcl0pLEZyLnB1c2goU3IpfWVsc2UgWFtVbl09U3J9cmV0dXJuIFh9ZnVuY3Rpb24gbHIob2Upe2xldFtYLHNlXT1vZS5zcGxpdCgiPyIsMik7cmV0dXJue3BhdGg6WCxxdWVyeTp1aShzZXx8IiIpfX1mdW5jdGlvbiBRbihvZSl7bGV0IFg9e307cmV0dXJuIG9lJiZPYmplY3Qua2V5cyhvZSkuZm9yRWFjaChzZT0+e3NlLmluZGV4T2YoImRhdGEtIik9PT0wJiYoWFtzZS5yZXBsYWNlKCJkYXRhLSIsIiIpXT1vZVtzZV0pfSksWH1jbGFzcyB4aSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKFgpe3N1cGVyKFgpO3RoaXMubmFtZT0iRE9NRXhjZXB0aW9uIn19ZnVuY3Rpb24gb28ob2UsWCl7cmV0dXJuIFgmJihYLmNhcHR1cmUmJihvZSs9IkNhcHR1cmUiKSxYLm9uY2UmJihvZSs9Ik9uY2UiKSxYLnBhc3NpdmUmJihvZSs9IlBhc3NpdmUiKSksYG9uJHtwLmNhcGl0YWxpemUocC5jYW1lbGl6ZShvZSkpfWB9Y2xhc3MgdGl7Y29uc3RydWN0b3IoWCxzZSl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSExLHRoaXMudGltZVN0YW1wPURhdGUubm93KCksdGhpcy5fc3RvcD0hMSx0aGlzLl9lbmQ9ITEsdGhpcy50eXBlPVgsdGhpcy5idWJibGVzPSEhc2UuYnViYmxlcyx0aGlzLmNhbmNlbGFibGU9ISFzZS5jYW5jZWxhYmxlfXByZXZlbnREZWZhdWx0KCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpe3RoaXMuX2VuZD10aGlzLl9zdG9wPSEwfXN0b3BQcm9wYWdhdGlvbigpe3RoaXMuX3N0b3A9ITB9fWZ1bmN0aW9uIHhyKG9lKXtpZihvZSBpbnN0YW5jZW9mIHRpKXJldHVybiBvZTtsZXRbWF09UG8ob2UudHlwZSksc2U9bmV3IHRpKFgse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMX0pO3JldHVybiBwLmV4dGVuZChzZSxvZSksc2V9Y2xhc3MgQnJ7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1PYmplY3QuY3JlYXRlKG51bGwpfWRpc3BhdGNoRXZlbnQoWCl7bGV0IHNlPXRoaXMubGlzdGVuZXJzW1gudHlwZV07aWYoIXNlKXJldHVybiExO2xldCBCZT14cihYKSxtdD1zZS5sZW5ndGg7Zm9yKGxldCBwbj0wO3BuPG10JiYoc2VbcG5dLmNhbGwodGhpcyxCZSksIUJlLl9lbmQpO3BuKyspO3JldHVybiBCZS5jYW5jZWxhYmxlJiZCZS5kZWZhdWx0UHJldmVudGVkfWFkZEV2ZW50TGlzdGVuZXIoWCxzZSxCZSl7WD1vbyhYLEJlKSwodGhpcy5saXN0ZW5lcnNbWF18fCh0aGlzLmxpc3RlbmVyc1tYXT1bXSkpLnB1c2goc2UpfXJlbW92ZUV2ZW50TGlzdGVuZXIoWCxzZSxCZSl7WD1vbyhYLEJlKTtsZXQgbXQ9dGhpcy5saXN0ZW5lcnNbWF07aWYoIW10KXJldHVybjtsZXQgcG49bXQuaW5kZXhPZihzZSk7cG4+LTEmJm10LnNwbGljZShwbiwxKX19bGV0IHdpPS8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztmdW5jdGlvbiBQbyhvZSl7bGV0IFg7aWYod2kudGVzdChvZSkpe1g9e307bGV0IHNlO2Zvcig7c2U9b2UubWF0Y2god2kpOylvZT1vZS5zbGljZSgwLG9lLmxlbmd0aC1zZVswXS5sZW5ndGgpLFhbc2VbMF0udG9Mb3dlckNhc2UoKV09ITB9cmV0dXJuW3AuaHlwaGVuYXRlKG9lLnNsaWNlKDIpKSxYXX1sZXQgSHI9KCgpPT4oe3N0b3A6MSxwcmV2ZW50OjE8PDEsc2VsZjoxPDwyfSkpKCk7ZnVuY3Rpb24gTXIob2Upe2xldCBYPTA7cmV0dXJuIG9lLmluY2x1ZGVzKCJzdG9wIikmJihYfD1Ici5zdG9wKSxvZS5pbmNsdWRlcygicHJldmVudCIpJiYoWHw9SHIucHJldmVudCksb2UuaW5jbHVkZXMoInNlbGYiKSYmKFh8PUhyLnNlbGYpLFh9bGV0IEVyPTAsZ249MSxmaT0zLFByPTg7ZnVuY3Rpb24gTHQob2UsWCl7bGV0e3BhcmVudE5vZGU6c2V9PW9lO2lmKCFzZSlyZXR1cm4gbnVsbDtsZXR7Y2hpbGROb2RlczpCZX09c2U7cmV0dXJuIEJlW0JlLmluZGV4T2Yob2UpKyhYPT09Im4iPzE6LTEpXXx8bnVsbH1mdW5jdGlvbiBFZShvZSl7bGV0e3BhcmVudE5vZGU6WH09b2U7aWYoWCl7bGV0e2NoaWxkTm9kZXM6c2V9PVgsQmU9c2UuaW5kZXhPZihvZSk7QmU+LTEmJihvZS5wYXJlbnROb2RlPW51bGwsc2Uuc3BsaWNlKEJlLDEpKX19ZnVuY3Rpb24gbmkob2UpeyFvZS5ub2RlSWQmJm9lLnBhZ2VOb2RlJiYob2Uubm9kZUlkPW9lLnBhZ2VOb2RlLmdlbklkKCkpfWNsYXNzIEdpIGV4dGVuZHMgQnJ7Y29uc3RydWN0b3IoWCxzZSxCZSl7c3VwZXIoKTtpZih0aGlzLnBhZ2VOb2RlPW51bGwsdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5fdGV4dD1udWxsLEJlKXtsZXR7cGFnZU5vZGU6bXR9PUJlO210JiYodGhpcy5wYWdlTm9kZT1tdCx0aGlzLm5vZGVJZD1tdC5nZW5JZCgpLCFtdC5pc1VubW91bnRlZCYmbXQub25DcmVhdGUodGhpcyxzZSkpfXRoaXMubm9kZVR5cGU9WCx0aGlzLm5vZGVOYW1lPXNlLHRoaXMuY2hpbGROb2Rlcz1bXX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkTm9kZXNbMF18fG51bGx9Z2V0IGxhc3RDaGlsZCgpe2xldHtjaGlsZE5vZGVzOlh9PXRoaXMsc2U9WC5sZW5ndGg7cmV0dXJuIHNlP1hbc2UtMV06bnVsbH1nZXQgbmV4dFNpYmxpbmcoKXtyZXR1cm4gTHQodGhpcywibiIpfWdldCBub2RlVmFsdWUoKXtyZXR1cm4gbnVsbH1zZXQgbm9kZVZhbHVlKFgpe31nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdGV4dHx8IiJ9c2V0IHRleHRDb250ZW50KFgpe3RoaXMuX3RleHQ9WCx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblRleHRDb250ZW50KHRoaXMsWCl9Z2V0IHBhcmVudEVsZW1lbnQoKXtsZXR7cGFyZW50Tm9kZTpYfT10aGlzO3JldHVybiBYJiZYLm5vZGVUeXBlPT09Z24/WDpudWxsfWdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gTHQodGhpcywicCIpfWFwcGVuZENoaWxkKFgpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShYLG51bGwpfWNsb25lTm9kZShYKXtsZXQgc2U9cC5leHRlbmQoT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpLHRoaXMpLHthdHRyaWJ1dGVzOkJlfT1zZTtyZXR1cm4gQmUmJihzZS5hdHRyaWJ1dGVzPXAuZXh0ZW5kKHt9LEJlKSksWCYmKHNlLmNoaWxkTm9kZXM9c2UuY2hpbGROb2Rlcy5tYXAobXQ9Pm10LmNsb25lTm9kZSghMCkpKSxzZX1pbnNlcnRCZWZvcmUoWCxzZSl7RWUoWCksWC5wYWdlTm9kZT10aGlzLnBhZ2VOb2RlLFgucGFyZW50Tm9kZT10aGlzLG5pKFgpO2xldHtjaGlsZE5vZGVzOkJlfT10aGlzO2lmKHNlKXtsZXQgbXQ9QmUuaW5kZXhPZihzZSk7aWYobXQ9PT0tMSl0aHJvdyBuZXcgeGkoIkZhaWxlZCB0byBleGVjdXRlICdpbnNlcnRCZWZvcmUnIG9uICdOb2RlJzogVGhlIG5vZGUgYmVmb3JlIHdoaWNoIHRoZSBuZXcgbm9kZSBpcyB0byBiZSBpbnNlcnRlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGUuIik7QmUuc3BsaWNlKG10LDAsWCl9ZWxzZSBCZS5wdXNoKFgpO3JldHVybiB0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZD90aGlzLnBhZ2VOb2RlLm9uSW5zZXJ0QmVmb3JlKHRoaXMsWCxzZSk6WH1yZW1vdmVDaGlsZChYKXtsZXR7Y2hpbGROb2RlczpzZX09dGhpcyxCZT1zZS5pbmRleE9mKFgpO2lmKEJlPT09LTEpdGhyb3cgbmV3IHhpKCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVtb3ZlQ2hpbGQnIG9uICdOb2RlJzogVGhlIG5vZGUgdG8gYmUgcmVtb3ZlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGUuIik7cmV0dXJuIFgucGFyZW50Tm9kZT1udWxsLHNlLnNwbGljZShCZSwxKSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZD90aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlQ2hpbGQoWCk6WH19bGV0IEt0PSJjbGFzcyIsanI9InN0eWxlIix6cj0iLnZPd25lcklkIixMcj0iLnZSZW5kZXJqcyI7Y2xhc3MgRHIgZXh0ZW5kcyBHaXtjb25zdHJ1Y3RvcihYLHNlLEJlKXtzdXBlcihYLHNlLEJlKTt0aGlzLmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnN0eWxlPW51bGwsdGhpcy52U2hvdz1udWxsLHRoaXMuX2h0bWw9bnVsbH1nZXQgY2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tLdF18fCIifXNldCBjbGFzc05hbWUoWCl7dGhpcy5zZXRBdHRyaWJ1dGUoS3QsWCl9Z2V0IGlubmVySFRNTCgpe3JldHVybiIifXNldCBpbm5lckhUTUwoWCl7dGhpcy5faHRtbD1YfWFkZEV2ZW50TGlzdGVuZXIoWCxzZSxCZSl7c3VwZXIuYWRkRXZlbnRMaXN0ZW5lcihYLHNlLEJlKSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmKHNlLnd4c0V2ZW50P3RoaXMucGFnZU5vZGUub25BZGRXeHNFdmVudCh0aGlzLG9vKFgsQmUpLHNlLnd4c0V2ZW50LE1yKHNlLm1vZGlmaWVyc3x8W10pKTp0aGlzLnBhZ2VOb2RlLm9uQWRkRXZlbnQodGhpcyxvbyhYLEJlKSxNcihzZS5tb2RpZmllcnN8fFtdKSkpfXJlbW92ZUV2ZW50TGlzdGVuZXIoWCxzZSxCZSl7c3VwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihYLHNlLEJlKSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblJlbW92ZUV2ZW50KHRoaXMsb28oWCxCZSkpfWdldEF0dHJpYnV0ZShYKXtyZXR1cm4gWD09PWpyP3RoaXMuc3R5bGU6dGhpcy5hdHRyaWJ1dGVzW1hdfXJlbW92ZUF0dHJpYnV0ZShYKXtYPT1qcj90aGlzLnN0eWxlPW51bGw6ZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tYXSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblJlbW92ZUF0dHJpYnV0ZSh0aGlzLFgpfXNldEF0dHJpYnV0ZShYLHNlKXtYPT09anI/dGhpcy5zdHlsZT1zZTp0aGlzLmF0dHJpYnV0ZXNbWF09c2UsdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJnRoaXMucGFnZU5vZGUub25TZXRBdHRyaWJ1dGUodGhpcyxYLHNlKX10b0pTT04oe2F0dHI6WCxub3JtYWxpemU6c2V9PXt9KXtsZXR7YXR0cmlidXRlczpCZSxzdHlsZTptdCxsaXN0ZW5lcnM6cG4sX3RleHQ6Sm59PXRoaXMsVW49e307T2JqZWN0LmtleXMoQmUpLmxlbmd0aCYmKFVuLmE9c2U/c2UoQmUpOkJlKTtsZXQgU3I9T2JqZWN0LmtleXMocG4pO2lmKFNyLmxlbmd0aCl7bGV0IEZyLGJvPXt9O1NyLmZvckVhY2goa289PntsZXQgUm89cG5ba29dO2lmKFJvLmxlbmd0aCl7bGV0e3d4c0V2ZW50OiRuLG1vZGlmaWVyczpLbn09Um9bMF0sSG49TXIoS258fFtdKTskbj8oRnJ8fChGcj17fSksRnJba29dPVtzZT9zZSgkbik6JG4sSG5dKTpib1trb109SG59fSksVW4uZT1zZT9zZShibywhMSk6Ym8sRnImJihVbi53PXNlP3NlKEZyLCExKTpGcil9cmV0dXJuIG10IT09bnVsbCYmKFVuLnM9c2U/c2UobXQpOm10KSxYfHwoVW4uaT10aGlzLm5vZGVJZCxVbi5uPXRoaXMubm9kZU5hbWUpLEpuIT09bnVsbCYmKFVuLnQ9c2U/c2UoSm4pOkpuKSxVbn19Y2xhc3MgQmkgZXh0ZW5kcyBHaXtjb25zdHJ1Y3RvcihYLHNlKXtzdXBlcihQciwiI2NvbW1lbnQiLHNlKTt0aGlzLl90ZXh0PSIifXRvSlNPTihYPXt9KXtyZXR1cm4gWC5hdHRyP3t9OntpOnRoaXMubm9kZUlkfX19Y2xhc3MgQm4gZXh0ZW5kcyBEcntjb25zdHJ1Y3RvcihYLHNlKXtzdXBlcihnbixYLnRvVXBwZXJDYXNlKCksc2UpO3RoaXMudGFnTmFtZT10aGlzLm5vZGVOYW1lfX1jbGFzcyBkaSBleHRlbmRzIEJue2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgidmFsdWUiKX1zZXQgdmFsdWUoWCl7dGhpcy5zZXRBdHRyaWJ1dGUoInZhbHVlIixYKX19Y2xhc3MgZGEgZXh0ZW5kcyBkaXt9Y2xhc3MgTWkgZXh0ZW5kcyBEcntjb25zdHJ1Y3RvcihYLHNlKXtzdXBlcihmaSwiI3RleHQiLHNlKTt0aGlzLl90ZXh0PVh9Z2V0IG5vZGVWYWx1ZSgpe3JldHVybiB0aGlzLl90ZXh0fHwiIn1zZXQgbm9kZVZhbHVlKFgpe3RoaXMuX3RleHQ9WCx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vbk5vZGVWYWx1ZSh0aGlzLFgpfX1sZXQgTGk9e0FEOlsiZGF0YSJdLCJBRC1EUkFXIjpbImRhdGEiXSwiTElWRS1QTEFZRVIiOlsicGljdHVyZS1pbi1waWN0dXJlLW1vZGUiXSxNQVA6WyJtYXJrZXJzIiwicG9seWxpbmUiLCJjaXJjbGVzIiwiY29udHJvbHMiLCJpbmNsdWRlLXBvaW50cyIsInBvbHlnb25zIl0sUElDS0VSOlsicmFuZ2UiLCJ2YWx1ZSJdLCJQSUNLRVItVklFVyI6WyJ2YWx1ZSJdLCJSSUNILVRFWFQiOlsibm9kZXMiXSxWSURFTzpbImRhbm11LWxpc3QiLCJoZWFkZXIiXSwiV0VCLVZJRVciOlsid2Vidmlldy1zdHlsZXMiXX0sSW89WyJhbmltYXRpb24iXSxBbj0ob2UsWCk9PntpZihJby5pbmRleE9mKFgpPi0xKXJldHVybiEwO2xldCBzZT1MaVtvZS5ub2RlTmFtZV07cmV0dXJuISEoc2UmJnNlLmluZGV4T2YoWCk+LTEpfSxEaT0xLFlpPTIsQ2k9MyxGaT00LElyPTUscmk9Nixycj03LGNyPTgscW49OSxlcj0xMCxkcj0xMixtbz0xNSxfbz0yMDtmdW5jdGlvbiBxaShvZSxYLHtjbGVhclRpbWVvdXQ6c2Usc2V0VGltZW91dDpCZX0pe2xldCBtdCxwbj1mdW5jdGlvbigpe3NlKG10KSxtdD1CZSgoKT0+b2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLFgpfTtyZXR1cm4gcG4uY2FuY2VsPWZ1bmN0aW9uKCl7c2UobXQpfSxwbn1jbGFzcyBKaXtjb25zdHJ1Y3RvcihYLHNlKXt0aGlzLmlkPVgsdGhpcy5saXN0ZW5lcj17fSx0aGlzLmVtaXRDYWNoZT1bXSxzZSYmT2JqZWN0LmtleXMoc2UpLmZvckVhY2goQmU9Pnt0aGlzLm9uKEJlLHNlW0JlXSl9KX1lbWl0KFgsLi4uc2Upe2xldCBCZT10aGlzLmxpc3RlbmVyW1hdO2lmKCFCZSlyZXR1cm4gdGhpcy5lbWl0Q2FjaGUucHVzaCh7ZXZlbnROYW1lOlgsYXJnczpzZX0pO0JlLmZvckVhY2gobXQ9PnttdC5mbi5hcHBseShtdC5mbixzZSl9KSx0aGlzLmxpc3RlbmVyW1hdPUJlLmZpbHRlcihtdD0+bXQudHlwZSE9PSJvbmNlIil9b24oWCxzZSl7dGhpcy5fYWRkTGlzdGVuZXIoWCwib24iLHNlKSx0aGlzLl9jbGVhckNhY2hlKFgpfW9uY2UoWCxzZSl7dGhpcy5fYWRkTGlzdGVuZXIoWCwib25jZSIsc2UpLHRoaXMuX2NsZWFyQ2FjaGUoWCl9b2ZmKFgsc2Upe2xldCBCZT10aGlzLmxpc3RlbmVyW1hdO2lmKCEhQmUpaWYoc2UpZm9yKGxldCBtdD0wO210PEJlLmxlbmd0aDspQmVbbXRdLmZuPT09c2UmJihCZS5zcGxpY2UobXQsMSksbXQtLSksbXQrKztlbHNlIGRlbGV0ZSB0aGlzLmxpc3RlbmVyW1hdfV9jbGVhckNhY2hlKFgpe2ZvcihsZXQgc2U9MDtzZTx0aGlzLmVtaXRDYWNoZS5sZW5ndGg7c2UrKyl7bGV0IEJlPXRoaXMuZW1pdENhY2hlW3NlXSxtdD1YP0JlLmV2ZW50TmFtZT09PVg/WDpudWxsOkJlLmV2ZW50TmFtZTtpZighbXQpY29udGludWU7aWYodHlwZW9mIHRoaXMuZW1pdC5hcHBseSh0aGlzLFttdCwuLi5CZS5hcmdzXSk9PSJudW1iZXIiKXt0aGlzLmVtaXRDYWNoZS5wb3AoKTtjb250aW51ZX10aGlzLmVtaXRDYWNoZS5zcGxpY2Uoc2UsMSksc2UtLX19X2FkZExpc3RlbmVyKFgsc2UsQmUpeyh0aGlzLmxpc3RlbmVyW1hdfHwodGhpcy5saXN0ZW5lcltYXT1bXSkpLnB1c2goe2ZuOkJlLHR5cGU6c2V9KX19bGV0IFhvPVskcixtcixvdCx6LF9yLGtuLGplLG50LE90LG5uLE5uLGFyLHVuLFFyLFZuLFBuLF9uLGJyLGVpXSxXcj1bbXIsb3RdO2Z1bmN0aW9uIHlyKG9lKXtyZXR1cm4gV3IuaW5kZXhPZihvZSk+LTF9ZnVuY3Rpb24gTm8ob2Upe3JldHVybiBYby5pbmRleE9mKG9lKT4tMX1sZXQgQj1bb3QseixLLG1uLGhuLHNpLEVpLFhyLCRyLG1yLENuLF9yLHlpLGtuLGplLG50LE90LG5uLE5uLHVuLGFyLFFyLFZuLFBuLF9uLGJyLGVpXTtmdW5jdGlvbiBZKG9lLFgsc2U9ITApe3JldHVybiBzZSYmIXAuaXNGdW5jdGlvbihYKT8hMTpCLmluZGV4T2Yob2UpPi0xPyEwOm9lLmluZGV4T2YoIm9uIik9PT0wfWxldCByZSx4ZT1bXTtmdW5jdGlvbiBaZShvZSl7aWYocmUpcmV0dXJuIG9lKHJlKTt4ZS5wdXNoKG9lKX1mdW5jdGlvbiBjdChvZSl7cmU9b2UseGUuZm9yRWFjaChYPT5YKG9lKSl9bGV0IFl0PWNpKChvZSxYKT0+e2lmKHAuaXNGdW5jdGlvbihvZS5fY29tcG9uZW50Lm9uRXJyb3IpKXJldHVybiBYKG9lKX0pLFF0PWZ1bmN0aW9uKCl7fTtRdC5wcm90b3R5cGU9e29uOmZ1bmN0aW9uKG9lLFgsc2Upe3ZhciBCZT10aGlzLmV8fCh0aGlzLmU9e30pO3JldHVybihCZVtvZV18fChCZVtvZV09W10pKS5wdXNoKHtmbjpYLGN0eDpzZX0pLHRoaXN9LG9uY2U6ZnVuY3Rpb24ob2UsWCxzZSl7dmFyIEJlPXRoaXM7ZnVuY3Rpb24gbXQoKXtCZS5vZmYob2UsbXQpLFguYXBwbHkoc2UsYXJndW1lbnRzKX1yZXR1cm4gbXQuXz1YLHRoaXMub24ob2UsbXQsc2UpfSxlbWl0OmZ1bmN0aW9uKG9lKXt2YXIgWD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxzZT0oKHRoaXMuZXx8KHRoaXMuZT17fSkpW29lXXx8W10pLnNsaWNlKCksQmU9MCxtdD1zZS5sZW5ndGg7Zm9yKEJlO0JlPG10O0JlKyspc2VbQmVdLmZuLmFwcGx5KHNlW0JlXS5jdHgsWCk7cmV0dXJuIHRoaXN9LG9mZjpmdW5jdGlvbihvZSxYKXt2YXIgc2U9dGhpcy5lfHwodGhpcy5lPXt9KSxCZT1zZVtvZV0sbXQ9W107aWYoQmUmJlgpe2Zvcih2YXIgcG49QmUubGVuZ3RoLTE7cG4+PTA7cG4tLSlpZihCZVtwbl0uZm49PT1YfHxCZVtwbl0uZm4uXz09PVgpe0JlLnNwbGljZShwbiwxKTticmVha31tdD1CZX1yZXR1cm4gbXQubGVuZ3RoP3NlW29lXT1tdDpkZWxldGUgc2Vbb2VdLHRoaXN9fTt2YXIgVmk9UXQ7bGV0IEdyPXtibGFjazoicmdiYSgwLDAsMCwwLjQpIix3aGl0ZToicmdiYSgyNTUsMjU1LDI1NSwwLjQpIn07ZnVuY3Rpb24gZ3Qob2Upe3JldHVybiBvZSYmb2UgaW4gR3I/R3Jbb2VdOm9lfWZ1bmN0aW9uIFJ0KG9lKXtyZXR1cm4gb2U9PT0iYmxhY2siPyIjMDAwMDAwIjoiI2ZmZmZmZiJ9ZnVuY3Rpb24gWXIob2UsWD17fSxzZT0ibGlnaHQiKXtsZXQgQmU9WFtzZV0sbXQ9e307cmV0dXJuIEJlPyhPYmplY3Qua2V5cyhvZSkuZm9yRWFjaChwbj0+e2xldCBKbj1vZVtwbl07bXRbcG5dPSgoKT0+e2lmKHAuaXNQbGFpbk9iamVjdChKbikpcmV0dXJuIFlyKEpuLFgsc2UpO2lmKHAuaXNBcnJheShKbikpcmV0dXJuIEpuLm1hcChVbj0+cC5pc1BsYWluT2JqZWN0KFVuKT9ZcihVbixYLHNlKTpVbik7aWYocC5pc1N0cmluZyhKbikmJkpuLnN0YXJ0c1dpdGgoIkAiKSl7bGV0IFVuPUpuLnJlcGxhY2UoIkAiLCIiKSxTcj1CZVtVbl18fEpuO3N3aXRjaChwbil7Y2FzZSJ0aXRsZUNvbG9yIjpTcj1SdChTcik7YnJlYWs7Y2FzZSJib3JkZXJTdHlsZSI6U3I9Z3QoU3IpO2JyZWFrfXJldHVybiBTcn1yZXR1cm4gSm59KSgpfSksbXQpOm9lfXZhciBhbz17aW52b2tlQXJyYXlGbnM6VHIsaXNVbmlMaWZlY3ljbGVIb29rOlksT05fTE9BRDptcixPTl9TSE9XOm90LExJTkVGRUVEOncsUkVOREVSSlNfTU9EVUxFUzpSbixmb3JtYXRMb2c6V2ksV1hTX1BST1RPQ09MOlR0LFdYU19NT0RVTEVTOkN0LFVuaUxpZmVjeWNsZUhvb2tzOkIsT05fRVJST1I6bW4saW52b2tlQ3JlYXRlRXJyb3JIYW5kbGVyOll0LGludm9rZUNyZWF0ZVZ1ZUFwcEhvb2s6Y3QscGFyc2VOVnVlRGF0YXNldDpRbixvbmNlOmNpLEkxOE5fSlNPTl9ERUxJTUlURVJTOkUsRW1pdHRlcjpWaSxub3JtYWxpemVTdHlsZXM6WXIsYWRkTGVhZGluZ1NsYXNoOk9vLHJlc29sdmVDb21wb25lbnRJbnN0YW5jZTpLbyxyZW1vdmVMZWFkaW5nU2xhc2g6eG4sT05fUkVTSVpFOnlpLE9OX0FQUF9FTlRFUl9GT1JFR1JPVU5EOmdvLE9OX0FQUF9FTlRFUl9CQUNLR1JPVU5EOmZhLE9OX0hJREU6eixPTl9QQUdFX1NDUk9MTDpqZSxPTl9SRUFDSF9CT1RUT006T3QsU0NIRU1FX1JFOkRlLERBVEFfUkU6TnQsY2FjaGVTdHJpbmdGdW5jdGlvbjppbyxwYXJzZVF1ZXJ5OnVpLGNhbGxPcHRpb25zOmZyLE9OX1VOSEFORExFX1JFSkVDVElPTjpFaSxPTl9QQUdFX05PVF9GT1VORDpzaSxQUklNQVJZX0NPTE9SOlIsZ2V0TGVuOmxpLE9OX1RIRU1FX0NIQU5HRTpobixUQUJCQVJfSEVJR0hUOnksTkFWQkFSX0hFSUdIVDpOLHNvcnRPYmplY3Q6dm8sT0ZGX1RIRU1FX0NIQU5HRTp3bixPTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFOlhuLG5vcm1hbGl6ZVRhYkJhclN0eWxlczpndCxPTl9OQVZJR0FUSU9OX0JBUl9CVVRUT05fVEFQOlZuLHN0cmluZ2lmeVF1ZXJ5OlRvLGRlYm91bmNlOnFpLE9OX1BVTExfRE9XTl9SRUZSRVNIOm5uLE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DSEFOR0VEOl9uLE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DT05GSVJNRUQ6YnIsT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NMSUNLRUQ6UG4sT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0ZPQ1VTX0NIQU5HRUQ6ZWksT05fQkFDS19QUkVTUzprbixVbmlOb2RlOkdpLE5PREVfVFlQRV9QQUdFOkVyLEFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFOkRpLEFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFRDpZaSxBQ1RJT05fVFlQRV9QQUdFX1NDUk9MTDptbyxBQ1RJT05fVFlQRV9JTlNFUlQ6RmksQUNUSU9OX1RZUEVfQ1JFQVRFOkNpLEFDVElPTl9UWVBFX1JFTU9WRTpJcixBQ1RJT05fVFlQRV9BRERfRVZFTlQ6Y3IsQUNUSU9OX1RZUEVfQUREX1dYU19FVkVOVDpkcixBQ1RJT05fVFlQRV9SRU1PVkVfRVZFTlQ6cW4sQUNUSU9OX1RZUEVfU0VUX0FUVFJJQlVURTpyaSxBQ1RJT05fVFlQRV9SRU1PVkVfQVRUUklCVVRFOnJyLEFDVElPTl9UWVBFX1NFVF9URVhUOmVyLE9OX1JFQURZOkNuLE9OX1VOTE9BRDpfcixFdmVudENoYW5uZWw6SmksT05fUkVBQ0hfQk9UVE9NX0RJU1RBTkNFOmgscGFyc2VVcmw6bHIsb25DcmVhdGVWdWVBcHA6WmUsT05fVEFCX0lURU1fVEFQOm50LE9OX0xBVU5DSDpLLEFDVElPTl9UWVBFX0VWRU5UOl9vLGNyZWF0ZVVuaUV2ZW50OnhyLE9OX1dYU19JTlZPS0VfQ0FMTF9NRVRIT0Q6QW8sV0VCX0lOVk9LRV9BUFBTRVJWSUNFOlV0LGlzUm9vdEhvb2s6Tm8saXNSb290SW1tZWRpYXRlSG9vazp5cixVbmlJbnB1dEVsZW1lbnQ6ZGksVW5pVGV4dEFyZWFFbGVtZW50OmRhLFVuaUVsZW1lbnQ6Qm4sVW5pVGV4dE5vZGU6TWksVW5pQ29tbWVudE5vZGU6QmksZm9yY2VQYXRjaFByb3A6QW4sSlNPTl9QUk9UT0NPTDpQLHJlc29sdmVPd25lckVsOlJyLEFUVFJfVl9PV05FUl9JRDp6cixBVFRSX1ZfUkVOREVSSlM6THJ9O3JldHVybiBhb30oZik7cmV0dXJuIHN9dmFyIE5OPTE7ZnVuY3Rpb24gS3AoKXtyZXR1cm4oTk4rKykudG9TdHJpbmcoKX12YXIgcGY9Zj0+ZiYmSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmKSl8fGY7ZnVuY3Rpb24gZ2MoZil7bGV0IHM9TWEoZik7cmV0dXJuIHMuc3Vic3RyaW5nKDgscy5sZW5ndGgtMSl9ZnVuY3Rpb24gdmYoZil7aWYoIUZuKGJ0b2EpKXJldHVybiIiO2xldCBzPUFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChuZXcgVWludDhBcnJheShmKSxwPT5TdHJpbmcuZnJvbUNoYXJDb2RlKHApKS5qb2luKCIiKTtyZXR1cm4gYnRvYShzKX1mdW5jdGlvbiBwYyhmKXtpZighZnx8dHlwZW9mIGYhPSJvYmplY3QiKXJldHVybiEwO2ZvcihsZXQgcyBpbiBmKWlmKGlsKGYscykpcmV0dXJuITE7cmV0dXJuITB9dmFyIG91PVsib2ZmIiwiZXJyb3IiLCJ3YXJuIiwiaW5mbyIsImxvZyIsImRlYnVnIl0sYXU9e307ZnVuY3Rpb24gWnAoKXtvdS5mb3JFYWNoKGY9PntsZXQgcz1vdS5pbmRleE9mKGYpO2F1W2ZdPXt9LG91LmZvckVhY2gocD0+e291LmluZGV4T2YocCk8PXMmJihhdVtmXVtwXT0hMCl9KX0pfWZ1bmN0aW9uIG5yKGYpe2xldCBzPWdsb2JhbC5XWEVudmlyb25tZW50JiZnbG9iYWwuV1hFbnZpcm9ubWVudC5sb2dMZXZlbHx8ImxvZyI7cmV0dXJuIGF1W3NdJiZhdVtzXVtmXX1mdW5jdGlvbiBqaShmKXtnbG9iYWwubmF0aXZlTG9nKCJ3eEludGVyYWN0aW9uQW5hbHl6ZXI6IFtqc2ZtXSIrZiwiX19ERUJVRyIpfWZ1bmN0aW9uIFhwKGYscyxwKXtyZXR1cm5gJHtzfUAke3B9IyR7Zn1gfXZhciBzdT1jbGFzc3tjb25zdHJ1Y3RvcihzKXt0aGlzLmluc3RhbmNlSWQ9U3RyaW5nKHMpLHRoaXMubGFzdENhbGxiYWNrSWQ9MCx0aGlzLmNhbGxiYWNrcz17fSx0aGlzLmhvb2tzPXt9fWFkZChzKXtyZXR1cm4gdGhpcy5sYXN0Q2FsbGJhY2tJZCsrLHRoaXMuY2FsbGJhY2tzW3RoaXMubGFzdENhbGxiYWNrSWRdPXMsdGhpcy5sYXN0Q2FsbGJhY2tJZH1yZW1vdmUocyl7bGV0IHA9dGhpcy5jYWxsYmFja3Nbc107cmV0dXJuIGRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tzXSxwfXJlZ2lzdGVySG9vayhzLHAsdyxOKXtsZXQgeT1YcChzLHAsdyk7dGhpcy5ob29rc1t5XSYmY29uc29sZS53YXJuKGBbSlMgRnJhbWV3b3JrXSBPdmVycmlkZSBhbiBleGlzdGluZyBjb21wb25lbnQgaG9vayAiJHt5fSIuYCksdGhpcy5ob29rc1t5XT1OfXRyaWdnZXJIb29rKHMscCx3LE4pe2xldCB5PVhwKHMscCx3KSxoPXRoaXMuaG9va3NbeV07aWYoIUZuKGgpKXJldHVybiBjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBJbnZhbGlkIGhvb2sgZnVuY3Rpb24gdHlwZSAoJHt0eXBlb2YgaH0pIG9uICIke3l9Ii5gKSxudWxsO2xldCBFPW51bGw7dHJ5e0U9aC5hcHBseShudWxsLE58fFtdKX1jYXRjaChSKXt0aHJvdyBjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZXhlY3V0ZSB0aGUgaG9vayBmdW5jdGlvbiBvbiAiJHt5fSIuYCksUn1yZXR1cm4gRX1jb25zdW1lKHMscCx3KXtsZXQgTj10aGlzLmNhbGxiYWNrc1tzXTtpZigodHlwZW9mIHc9PSJ1bmRlZmluZWQifHx3PT09ITEpJiZkZWxldGUgdGhpcy5jYWxsYmFja3Nbc10sRm4oTikpdHJ5e3JldHVybiBOLmNhbGwobnVsbCxwLHcpfWNhdGNoKHkpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBleGVjdXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbjoKICR7eS50b1N0cmluZygpfWApLHl9cmV0dXJuIG5ldyBFcnJvcihgaW52YWxpZCBjYWxsYmFjayBpZCAiJHtzfSJgKX1jbG9zZSgpe3RoaXMuY2FsbGJhY2tzPXt9LHRoaXMuaG9va3M9e319fTt2YXIgbHU9e307ZnVuY3Rpb24gUXAoZixzKXtmJiYobHVbZl09cyl9ZnVuY3Rpb24gcnMoZil7cmV0dXJuIGx1W2ZdfWZ1bmN0aW9uIGV2KGYpe2RlbGV0ZSBsdVtmXX1mdW5jdGlvbiBVcihmKXtpZihmKXtsZXQgcz1sdVtmXTtpZihzJiZzLnRhc2tDZW50ZXIpcmV0dXJuIHMudGFza0NlbnRlcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBrTihmKXtmLmNhbGNDbGFzc0xpc3QmJmYuY2FsY0NsYXNzTGlzdCgpfWZ1bmN0aW9uIG1mKGYscyxwKXtsZXR7ZG9jdW1lbnRFbGVtZW50Ond9PWY7aWYody5wdXJlQ2hpbGRyZW4ubGVuZ3RoPjB8fHMucGFyZW50Tm9kZSlyZXR1cm47bGV0IE49dy5jaGlsZHJlbix5PXA/Ti5pbmRleE9mKHApOi0xO3k8MD9OLnB1c2gocyk6Ti5zcGxpY2UoeSwwLHMpLHMubm9kZVR5cGU9PT0xPyhzLnJvbGU9PT0iYm9keSI/KHMuZG9jSWQ9Zi5pZCxzLm93bmVyRG9jdW1lbnQ9ZixzLnBhcmVudE5vZGU9dyxvbChzLHcpKToocy5jaGlsZHJlbi5mb3JFYWNoKGg9PntoLnBhcmVudE5vZGU9c30pLF9mKGYscyksb2wocyx3KSxkZWxldGUgZi5ub2RlTWFwW3Mubm9kZUlkXSksdy5wdXJlQ2hpbGRyZW4ucHVzaChzKSxSTihmLHMpKToocy5wYXJlbnROb2RlPXcsZi5ub2RlTWFwW3MucmVmXT1zKX1mdW5jdGlvbiBSTihmLHMpe2xldCBwPXMudG9KU09OKCk7ZiYmZi50YXNrQ2VudGVyJiZGbihmLnRhc2tDZW50ZXIuc2VuZCkmJmYudGFza0NlbnRlci5zZW5kKCJkb20iLHthY3Rpb246ImNyZWF0ZUJvZHkifSxbcF0pfWZ1bmN0aW9uIF9mKGYscyl7cy5yb2xlPSJib2R5IixzLmRlcHRoPTEsZGVsZXRlIGYubm9kZU1hcFtzLm5vZGVJZF0scy5yZWY9Il9yb290IixmLm5vZGVNYXAuX3Jvb3Q9cyxmLmJvZHk9c31mdW5jdGlvbiBvbChmLHMpe2YucGFyZW50Tm9kZT1zLGtOKGYpLHMuZG9jSWQmJihmLmRvY0lkPXMuZG9jSWQsZi5vd25lckRvY3VtZW50PXMub3duZXJEb2N1bWVudCxmLm93bmVyRG9jdW1lbnQubm9kZU1hcFtmLm5vZGVJZF09ZixmLmRlcHRoPXMuZGVwdGgrMSksZi5jaGlsZHJlbi5mb3JFYWNoKHA9PntvbChwLGYpfSl9ZnVuY3Rpb24gYmYoZil7Zm9yKDtmOyl7aWYoZi5ub2RlVHlwZT09PTEpcmV0dXJuIGY7Zj1mLm5leHRTaWJsaW5nfX1mdW5jdGlvbiBFZihmKXtmb3IoO2Y7KXtpZihmLm5vZGVUeXBlPT09MSlyZXR1cm4gZjtmPWYucHJldmlvdXNTaWJsaW5nfX1mdW5jdGlvbiBhbChmLHMscCx3PSExKXtwPDAmJihwPTApO2xldCBOPXNbcC0xXSx5PXNbcF07cmV0dXJuIHMuc3BsaWNlKHAsMCxmKSx3JiYoTiYmKE4ubmV4dFNpYmxpbmc9ZiksZi5wcmV2aW91c1NpYmxpbmc9TixmLm5leHRTaWJsaW5nPXkseSYmKHkucHJldmlvdXNTaWJsaW5nPWYpKSxwfWZ1bmN0aW9uIHNsKGYscyxwLHc9ITEpe2xldCBOPXMuaW5kZXhPZihmKTtpZihOPDApcmV0dXJuLTE7aWYodyl7bGV0IFI9c1tOLTFdLERlPXNbTisxXTtSJiYoUi5uZXh0U2libGluZz1EZSksRGUmJihEZS5wcmV2aW91c1NpYmxpbmc9Uil9cy5zcGxpY2UoTiwxKTtsZXQgeT1wO048PXAmJih5PXAtMSk7bGV0IGg9c1t5LTFdLEU9c1t5XTtyZXR1cm4gcy5zcGxpY2UoeSwwLGYpLHcmJihoJiYoaC5uZXh0U2libGluZz1mKSxmLnByZXZpb3VzU2libGluZz1oLGYubmV4dFNpYmxpbmc9RSxFJiYoRS5wcmV2aW91c1NpYmxpbmc9ZikpLE49PT15Py0xOnB9ZnVuY3Rpb24geWYoZixzLHA9ITEpe2xldCB3PXMuaW5kZXhPZihmKTtpZighKHc8MCkpe2lmKHApe2xldCBOPXNbdy0xXSx5PXNbdysxXTtOJiYoTi5uZXh0U2libGluZz15KSx5JiYoeS5wcmV2aW91c1NpYmxpbmc9Til9cy5zcGxpY2UodywxKX19dmFyIGxsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZXB0aD0wO3RoaXMubm9kZUlkPUtwKCksdGhpcy5yZWY9dGhpcy5ub2RlSWQsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnB1cmVDaGlsZHJlbj1bXSx0aGlzLnBhcmVudE5vZGU9bnVsbCx0aGlzLm5leHRTaWJsaW5nPW51bGwsdGhpcy5wcmV2aW91c1NpYmxpbmc9bnVsbH1kZXN0cm95KCl7bGV0IHM9cnModGhpcy5kb2NJZCk7cyYmKGRlbGV0ZSB0aGlzLmRvY0lkLGRlbGV0ZSBzLm5vZGVNYXBbdGhpcy5ub2RlSWRdKSx0aGlzLmNoaWxkcmVuLmZvckVhY2gocD0+e3AuZGVzdHJveSgpfSl9fTt2YXIgdHY9e307ZnVuY3Rpb24gU2YoZixzKXtpZigha2kocyl8fCFzLmxlbmd0aClyZXR1cm47Y2xhc3MgcCBleHRlbmRzIG5ve31zLmZvckVhY2godz0+e3AucHJvdG90eXBlW3ddPWZ1bmN0aW9uKC4uLk4pe2xldCB5PVVyKHRoaXMuZG9jSWQpO2lmKHkpcmV0dXJuIHkuc2VuZCgiY29tcG9uZW50Iix7cmVmOnRoaXMucmVmLGNvbXBvbmVudDpmLG1ldGhvZDp3fSxOKX19KSx0dltmXT1wfWZ1bmN0aW9uIG52KGYpe3JldHVybiB0dltmXX1mdW5jdGlvbiBrcihmLHMscCx3LE4pe2xldCB5PXt0eXBlOiJkZWNsIixwcm9wOmYsdmFsdWU6cy50b1N0cmluZygpLHJhd3M6dyxzb3VyY2U6Tn07cmV0dXJuIHAmJih5LmltcG9ydGFudD0hMCkseX12YXIgeE49ImJhY2tncm91bmRDb2xvciIsQk49ImJhY2tncm91bmRJbWFnZSIsTU49Zj0+e2xldHt2YWx1ZTpzLGltcG9ydGFudDpwLHJhd3M6dyxzb3VyY2U6Tn09ZjtyZXR1cm4vXiM/XFMrJC8udGVzdChzKXx8L15yZ2JhPyguKykkLy50ZXN0KHMpP1trcih4TixzLHAsdyxOKV06L15saW5lYXItZ3JhZGllbnQoLispJC8udGVzdChzKT9ba3IoQk4scyxwLHcsTildOltmXX0sTE49IldpZHRoIixETj0iU3R5bGUiLEZOPSJDb2xvciI7ZnVuY3Rpb24gVk4oZil7cmV0dXJuIHM9PntsZXR7cHJvcDpwLHZhbHVlOncsaW1wb3J0YW50Ok4scmF3czp5LHNvdXJjZTpofT1zLEU9dy5yZXBsYWNlKC9ccyosXHMqL2csIiwiKS5zcGxpdCgvXHMrLyksUj1bL15bXGRcLl0rXFMqfF4odGhpbnxtZWRpdW18dGhpY2spJC8sL14oc29saWR8ZGFzaGVkfGRvdHRlZHxub25lKSQvLC9cUysvXS5tYXAoRGU9PntsZXQgTnQ9RS5maW5kSW5kZXgoVXQ9PkRlLnRlc3QoVXQpKTtyZXR1cm4gTnQ8MD9udWxsOkUuc3BsaWNlKE50LDEpWzBdfSk7cmV0dXJuIEUubGVuZ3RoP1tzXTpba3IocCtMTiwoUlswXXx8KGYudHlwZT09PSJ1dnVlIj8ibWVkaXVtIjoiMCIpKS50cmltKCksTix5LGgpLGtyKHArRE4sKFJbMV18fChmLnR5cGU9PT0idXZ1ZSI/Im5vbmUiOiJzb2xpZCIpKS50cmltKCksTix5LGgpLGtyKHArRk4sKFJbMl18fCIjMDAwMDAwIikudHJpbSgpLE4seSxoKV19fXZhciBVTj0iYm9yZGVyVG9wIiwkTj0iYm9yZGVyUmlnaHQiLEhOPSJib3JkZXJCb3R0b20iLGpOPSJib3JkZXJMZWZ0Iix3Zj1mPT57bGV0e3Byb3A6cyx2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6eX09ZixoPWZmKHMpLnNwbGl0KCItIilbMV07aD1pdShoKTtsZXQgRT1wLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKTtzd2l0Y2goRS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZl07Y2FzZSAyOkUucHVzaChFWzBdLEVbMV0pO2JyZWFrO2Nhc2UgMzpFLnB1c2goRVsxXSk7YnJlYWt9cmV0dXJuW2tyKFVOK2gsRVswXSx3LE4seSksa3IoJE4raCxFWzFdLHcsTix5KSxrcihITitoLEVbMl0sdyxOLHkpLGtyKGpOK2gsRVszXSx3LE4seSldfSx6Tj0iYm9yZGVyVG9wTGVmdFJhZGl1cyIsV049ImJvcmRlclRvcFJpZ2h0UmFkaXVzIixHTj0iYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLFlOPSJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIixxTj1mPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTpOfT1mLHk9cy5zcGxpdCgvXHMrLyk7aWYocy5pbmNsdWRlcygiLyIpKXJldHVybltmXTtzd2l0Y2goeS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZl07Y2FzZSAyOnkucHVzaCh5WzBdLHlbMV0pO2JyZWFrO2Nhc2UgMzp5LnB1c2goeVsxXSk7YnJlYWt9cmV0dXJuW2tyKHpOLHlbMF0scCx3LE4pLGtyKFdOLHlbMV0scCx3LE4pLGtyKEdOLHlbMl0scCx3LE4pLGtyKFlOLHlbM10scCx3LE4pXX0sSk49d2YsS049d2YsWk49ImZsZXhEaXJlY3Rpb24iLFhOPSJmbGV4V3JhcCIsUU49Zj0+e2xldHt2YWx1ZTpzLGltcG9ydGFudDpwLHJhd3M6dyxzb3VyY2U6Tn09Zix5PXMuc3BsaXQoL1xzKy8pLGg9Wy9eKGNvbHVtbnxjb2x1bW4tcmV2ZXJzZXxyb3d8cm93LXJldmVyc2UpJC8sL14obm93cmFwfHdyYXB8d3JhcC1yZXZlcnNlKSQvXS5tYXAoRT0+e2xldCBSPXkuZmluZEluZGV4KERlPT5FLnRlc3QoRGUpKTtyZXR1cm4gUjwwP251bGw6eS5zcGxpY2UoUiwxKVswXX0pO3JldHVybiB5Lmxlbmd0aD9bZl06W2tyKFpOLGhbMF18fCJjb2x1bW4iLHAsdyxOKSxrcihYTixoWzFdfHwibm93cmFwIixwLHcsTildfSxlaz0iVG9wIix0az0iUmlnaHQiLG5rPSJCb3R0b20iLHJrPSJMZWZ0Iixydj1mPT5zPT57bGV0e3ZhbHVlOnAsaW1wb3J0YW50OncscmF3czpOLHNvdXJjZTp5fT1zLGg9cC5zcGxpdCgvXHMrLyk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aC5wdXNoKGhbMF0saFswXSxoWzBdKTticmVhaztjYXNlIDI6aC5wdXNoKGhbMF0saFsxXSk7YnJlYWs7Y2FzZSAzOmgucHVzaChoWzFdKTticmVha31yZXR1cm5ba3IoZitlayxoWzBdLHcsTix5KSxrcihmK3RrLGhbMV0sdyxOLHkpLGtyKGYrbmssaFsyXSx3LE4seSksa3IoZityayxoWzNdLHcsTix5KV19LGlrPXJ2KCJtYXJnaW4iKSxvaz1ydigicGFkZGluZyIpLGFrPSJ0cmFuc2l0aW9uUHJvcGVydHkiLHNrPSJ0cmFuc2l0aW9uRHVyYXRpb24iLGxrPSJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLGNrPSJ0cmFuc2l0aW9uRGVsYXkiLHVrPWY9PntsZXQgcz0vXihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pP1xzKihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pPyQvLHt2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6eX09ZixoPVtdLEU9cC5tYXRjaChzKTtyZXR1cm4gRSYmKEVbMV0mJmgucHVzaChrcihhayxFWzFdLHcsTix5KSksRVsyXSYmaC5wdXNoKGtyKHNrLEVbMl0sdyxOLHkpKSxFWzNdJiZoLnB1c2goa3IobGssRVszXSx3LE4seSkpLEVbNF0mJmgucHVzaChrcihjayxFWzRdLHcsTix5KSkpLGh9O2Z1bmN0aW9uIGZrKGYpe2xldCBzPVZOKGYpLHA9TXAoe3RyYW5zaXRpb246dWssYm9yZGVyOnMsYmFja2dyb3VuZDpNTixib3JkZXJUb3A6cyxib3JkZXJSaWdodDpzLGJvcmRlckJvdHRvbTpzLGJvcmRlckxlZnQ6cyxib3JkZXJTdHlsZTpKTixib3JkZXJXaWR0aDpLTixib3JkZXJDb2xvcjp3Zixib3JkZXJSYWRpdXM6cU4sbWFyZ2luOmlrLHBhZGRpbmc6b2t9LGYudHlwZSE9PSJ1dnVlIj97ZmxleEZsb3c6UU59Ont9KSx3PXt9O3JldHVybiB3PXAsd312YXIgQ2YsaXY9U3ltYm9sKCJleHBhbmRlZCIpO2Z1bmN0aW9uIG92KGYpe3JldHVybntwb3N0Y3NzUGx1Z2luOiJudnVlOmV4cGFuZCIsRGVjbGFyYXRpb24ocCl7aWYocFtpdl0pcmV0dXJuO0NmfHwoQ2Y9ZmsoZikpO2xldCB3PUNmW3AucHJvcF07aWYodyl7bGV0IE49dyhwKTtOLmxlbmd0aD09PTEmJk5bMF09PT1wfHxwLnJlcGxhY2VXaXRoKE4pfXBbaXZdPSEwfX19dmFyIGRrPW92KHt0eXBlOiJudnVlIn0pLkRlY2xhcmF0aW9uO2Z1bmN0aW9uIEFmKGYscyl7bGV0IHA9SGkoe3JlcGxhY2VXaXRoKE4pe3c9Tn19LGhrKGYscykpLHc9W3BdO3JldHVybiBkayhwKSx3fWZ1bmN0aW9uIGhrKGYscyl7bGV0IHA9cysiIjtyZXR1cm4gcC5pbmNsdWRlcygiIWltcG9ydGFudCIpP3twcm9wOmYsdmFsdWU6cC5yZXBsYWNlKC9ccyohaW1wb3J0YW50LywiIiksaW1wb3J0YW50OiEwfTp7cHJvcDpmLHZhbHVlOnAsaW1wb3J0YW50OiExfX12YXIgZ2s9InZpZXciLHBrPVsiY2xpY2siLCJsb25ncHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJwYW5zdGFydCIsInBhbm1vdmUiLCJwYW5lbmQiLCJob3Jpem9udGFscGFuIiwidmVydGljYWxwYW4iLCJzd2lwZSJdO2Z1bmN0aW9uIE9mKGYscyl7bGV0IHA9cnMoZik7cC5ub2RlTWFwW3Mubm9kZUlkXT1zfXZhciBUZjtmdW5jdGlvbiBhdihmKXtUZnx8KFRmPWYpfXZhciBubz1jbGFzcyBleHRlbmRzIGxse2NvbnN0cnVjdG9yKHM9Z2sscD17fSx3KXtzdXBlcigpO2xldCBOPW52KHMpO2lmKE4mJiF3KXJldHVybiBuZXcgTihzLHAsITApO3RoaXMubm9kZVR5cGU9MSx0aGlzLnR5cGU9cyx0aGlzLmF0dHI9cC5hdHRyfHx7fSx0aGlzLnN0eWxlPXAuc3R5bGV8fHt9LHRoaXMuY2xhc3NTdHlsZT1wLmNsYXNzU3R5bGV8fHt9LHRoaXMuY2xhc3NMaXN0PXAuY2xhc3NMaXN0fHxbXSx0aGlzLnN0eWxlU2hlZXQ9cC5zdHlsZVNoZWV0fHx7fSx0aGlzLmV2ZW50PXt9fWFwcGVuZENoaWxkKHMpe2lmKCEocy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUhPT10aGlzKSl7aWYocy5wYXJlbnROb2RlKXtpZihucigiZGVidWciKSYmamkoYFthcHBlbmRDaGlsZF0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIE1vdmUgPCR7cy50eXBlfT4gdG8gJHt0aGlzLmNoaWxkcmVuLmxlbmd0aH0gb2YgPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxzbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHMubm9kZVR5cGU9PT0xKXtsZXQgcD1zbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksdz1Vcih0aGlzLmRvY0lkKTtpZih3JiZwPj0wKXJldHVybiB3LnNlbmQoImRvbSIse2FjdGlvbjoibW92ZUVsZW1lbnQifSxbcy5yZWYsdGhpcy5yZWYscF0pfX1lbHNlIGlmKG5yKCJkZWJ1ZyIpJiZqaShgW2FwcGVuZENoaWxkXSgke3RoaXMuZG9jSWR9LCR7cy50eXBlfSwke3MucmVmfSkgQXBwZW5kIDwke3MudHlwZX0+IHRvIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksb2wocyx0aGlzKSxhbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHRoaXMuZG9jSWQmJk9mKHRoaXMuZG9jSWQscykscy5ub2RlVHlwZT09PTEpe2FsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4ubGVuZ3RoKTtsZXQgcD1Vcih0aGlzLmRvY0lkKTtpZihwKXJldHVybiBwLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLC0xXSl9fX1pbnNlcnRCZWZvcmUocyxwKXtpZighKHMucGFyZW50Tm9kZSYmcy5wYXJlbnROb2RlIT09dGhpcykmJiEocz09PXB8fHMubmV4dFNpYmxpbmcmJnMubmV4dFNpYmxpbmc9PT1wKSl7aWYocy5wYXJlbnROb2RlKXtpZihzbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApLCEwKSxzLm5vZGVUeXBlPT09MSl7bGV0IHc9YmYocCksTj1zbChzLHRoaXMucHVyZUNoaWxkcmVuLHc/dGhpcy5wdXJlQ2hpbGRyZW4uaW5kZXhPZih3KTp0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgpLHk9VXIodGhpcy5kb2NJZCk7aWYoeSYmTj49MClyZXR1cm4geS5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW3MucmVmLHRoaXMucmVmLE5dKX19ZWxzZSBpZihucigiZGVidWciKSYmamkoYFtpbnNlcnRCZWZvcmVdKCR7dGhpcy5kb2NJZH0sJHtzLnR5cGV9LCR7cy5yZWZ9KSBJbnNlcnQgPCR7cy50eXBlfT4gdG8gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KSwgYmVmb3JlICgke3AucmVmfSkuYCksb2wocyx0aGlzKSxhbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApLCEwKSx0aGlzLmRvY0lkJiZPZih0aGlzLmRvY0lkLHMpLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1iZihwKSxOPWFsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdz90aGlzLnB1cmVDaGlsZHJlbi5pbmRleE9mKHcpOnRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCkseT1Vcih0aGlzLmRvY0lkKTtpZih5KXJldHVybiB5LnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLE5dKX19fWluc2VydEFmdGVyKHMscCl7aWYoIShzLnBhcmVudE5vZGUmJnMucGFyZW50Tm9kZSE9PXRoaXMpJiYhKHM9PT1wfHxzLnByZXZpb3VzU2libGluZyYmcy5wcmV2aW91c1NpYmxpbmc9PT1wKSl7aWYocy5wYXJlbnROb2RlKXtpZihzbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApKzEsITApLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1zbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2YoRWYocCkpKzEpLE49VXIodGhpcy5kb2NJZCk7aWYoTiYmdz49MClyZXR1cm4gTi5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW3MucmVmLHRoaXMucmVmLHddKX19ZWxzZSBpZihucigiZGVidWciKSYmamkoYFtpbnNlcnRBZnRlcl0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIEluc2VydCA8JHtzLnR5cGV9PiB0byA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLCBhZnRlciAoJHtwLnJlZn0pLmApLG9sKHMsdGhpcyksYWwocyx0aGlzLmNoaWxkcmVuLHRoaXMuY2hpbGRyZW4uaW5kZXhPZihwKSsxLCEwKSx0aGlzLmRvY0lkJiZPZih0aGlzLmRvY0lkLHMpLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1hbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2YoRWYocCkpKzEpLE49VXIodGhpcy5kb2NJZCk7aWYoTilyZXR1cm4gTi5zZW5kKCJkb20iLHthY3Rpb246ImFkZEVsZW1lbnQifSxbdGhpcy5yZWYscy50b0pTT04oKSx3XSl9fX1yZW1vdmVDaGlsZChzLHApe2lmKHMucGFyZW50Tm9kZSYmKHlmKHMsdGhpcy5jaGlsZHJlbiwhMCkscy5ub2RlVHlwZT09PTEpKXtucigiZGVidWciKSYmamkoYFtyZW1vdmVDaGlsZF0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIFJlbW92ZSA8JHtzLnR5cGV9PiBmcm9tIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCkseWYocyx0aGlzLnB1cmVDaGlsZHJlbik7bGV0IHc9VXIodGhpcy5kb2NJZCk7dyYmdy5zZW5kKCJkb20iLHthY3Rpb246InJlbW92ZUVsZW1lbnQifSxbcy5yZWZdKX1wfHxzLmRlc3Ryb3koKX1jbGVhcigpe2xldCBzPVVyKHRoaXMuZG9jSWQpO3MmJnRoaXMucHVyZUNoaWxkcmVuLmZvckVhY2gocD0+e3Muc2VuZCgiZG9tIix7YWN0aW9uOiJyZW1vdmVFbGVtZW50In0sW3AucmVmXSl9KSx0aGlzLmNoaWxkcmVuLmZvckVhY2gocD0+e3AuZGVzdHJveSgpfSksdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGg9MH1zZXRBdHRyKHMscCx3KXtpZih0aGlzLmF0dHJbc109PT1wJiZ3IT09ITEpcmV0dXJuO3RoaXMuYXR0cltzXT1wO2xldCBOPVVyKHRoaXMuZG9jSWQpOyF3JiZOJiZOLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlQXR0cnMifSxbdGhpcy5yZWYse1tzXTpwfV0pfXNldEF0dHJzKHMscCl7aWYocGMocykpcmV0dXJuO2xldCB3PXt9O2ZvcihsZXQgTiBpbiBzKXRoaXMuYXR0cltOXSE9PXNbTl0mJih0aGlzLmF0dHJbTl09c1tOXSx3W05dPXNbTl0pO2lmKCFwYyh3KSl7bGV0IE49VXIodGhpcy5kb2NJZCk7IXAmJk4mJk4uc2VuZCgiZG9tIix7YWN0aW9uOiJ1cGRhdGVBdHRycyJ9LFt0aGlzLnJlZix3XSl9fXNldFN0eWxlKHMscCx3KXtBZihzLHApLmZvckVhY2goKHtwcm9wOk4sdmFsdWU6eX0pPT57aWYodGhpcy5zdHlsZVtOXT09PXkmJnchPT0hMSlyZXR1cm47dGhpcy5zdHlsZVtOXT15O2xldCBoPVVyKHRoaXMuZG9jSWQpOyF3JiZoJiZoLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlU3R5bGUifSxbdGhpcy5yZWYse1tOXTp5PT09IiImJk4gaW4gdGhpcy5jbGFzc1N0eWxlP3RoaXMuY2xhc3NTdHlsZVtOXTp5fV0pfSl9c2V0U3R5bGVzKHMscCl7aWYocGMocykpcmV0dXJuO2xldCB3PXt9O2ZvcihsZXQgTiBpbiBzKUFmKE4sc1tOXSkuZm9yRWFjaCgoe3Byb3A6eSx2YWx1ZTpofSk9Pnt0aGlzLnN0eWxlW3ldIT09aCYmKHRoaXMuc3R5bGVbeV09aCx3W3ldPWg9PT0iIiYmeSBpbiB0aGlzLmNsYXNzU3R5bGU/dGhpcy5jbGFzc1N0eWxlW3ldOmgpfSk7aWYoIXBjKHcpKXtsZXQgTj1Vcih0aGlzLmRvY0lkKTshcCYmTiYmTi5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHddKX19c2V0Q2xhc3NTdHlsZShzKXtmb3IobGV0IHcgaW4gdGhpcy5jbGFzc1N0eWxlKXRoaXMuY2xhc3NTdHlsZVt3XT0iIjtIaSh0aGlzLmNsYXNzU3R5bGUscyk7bGV0IHA9VXIodGhpcy5kb2NJZCk7cCYmcC5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHRoaXMudG9TdHlsZSgpXSl9c2V0Q2xhc3NMaXN0KHMpe3MubGVuZ3RoPT09dGhpcy5jbGFzc0xpc3QubGVuZ3RoJiZzLmZpbHRlcihwPT4hdGhpcy5jbGFzc0xpc3QuaW5jbHVkZXMocCkpLmxlbmd0aD09PTB8fCh0aGlzLmNsYXNzTGlzdD1zLHRoaXMucGFyZW50Tm9kZSYmdGhpcy5jYWxjQ2xhc3NMaXN0KCkpfWNhbGNDbGFzc0xpc3QoKXt0aGlzLnNldENsYXNzU3R5bGUoVGYodGhpcykpfXNldFN0eWxlU2hlZXQocyl7dGhpcy5zdHlsZVNoZWV0PXN9YWRkRXZlbnQocyxwLHcpe2lmKHRoaXMuZXZlbnR8fCh0aGlzLmV2ZW50PXt9KSwhdGhpcy5ldmVudFtzXSl7bnIoImRlYnVnIikmJmppKGBbYWRkRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBBZGQgIiR7c30iIGV2ZW50IG9uIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksdGhpcy5ldmVudFtzXT17aGFuZGxlcjpwLHBhcmFtczp3fTtsZXQgTj1Vcih0aGlzLmRvY0lkKTtOJiZOLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRXZlbnQifSxbdGhpcy5yZWYsc10pfX1yZW1vdmVFdmVudChzKXtpZih0aGlzLmV2ZW50JiZ0aGlzLmV2ZW50W3NdKXtucigiZGVidWciKSYmamkoYFtyZW1vdmVFdmVudF0oJHt0aGlzLmRvY0lkfSwke3RoaXMudHlwZX0sJHt0aGlzLnJlZn0pIFJlbW92ZSAiJHtzfSIgZXZlbnQgb24gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxkZWxldGUgdGhpcy5ldmVudFtzXTtsZXQgcD1Vcih0aGlzLmRvY0lkKTtwJiZwLnNlbmQoImRvbSIse2FjdGlvbjoicmVtb3ZlRXZlbnQifSxbdGhpcy5yZWYsc10pfX1maXJlRXZlbnQocyxwLHcsTil7bGV0IHk9bnVsbCxoPSExLEU9dGhpcy5ldmVudFtzXTtpZihFJiZwKXtucigiZGVidWciKSYmamkoYFtmaXJlRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBGaXJlICIke3N9IiBldmVudCBvbiA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLmApO2xldCBSPUUuaGFuZGxlcjtwLnN0b3BQcm9wYWdhdGlvbj0oKT0+e2g9ITB9LHAucHJldmVudERlZmF1bHQ9KCk9Pnt9O3RyeXtOJiZOLnBhcmFtcz95PVIuY2FsbCh0aGlzLC4uLk4ucGFyYW1zLHApOnk9Ui5jYWxsKHRoaXMscCl9Y2F0Y2goRGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBpbnZva2UgdGhlIGV2ZW50IGhhbmRsZXIgb2YgIiR7c30iIG9uICR7dGhpcy50eXBlfSAoJHt0aGlzLnJlZn0pOgogJHtEZS50b1N0cmluZygpfWApLERlfX1yZXR1cm4haCYmdyYmcGsuaW5kZXhPZihzKSE9PS0xJiZ0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQmJihwLmN1cnJlbnRUYXJnZXQ9dGhpcy5wYXJlbnROb2RlLHRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQocyxwLHcpKSx5fXRvU3R5bGUoKXtsZXQgcz1PYmplY3QuYXNzaWduKHt9LHRoaXMuY2xhc3NTdHlsZSkscD10aGlzLnN0eWxlO2ZvcihsZXQgdyBpbiBwKXtsZXQgTj1wW3ddO3Nbd109Tj09PSIiJiZ3IGluIHRoaXMuY2xhc3NTdHlsZT90aGlzLmNsYXNzU3R5bGVbd106Tn1yZXR1cm4gc310b0pTT04ocz0hMSl7bGV0IHA9e3JlZjp0aGlzLnJlZi50b1N0cmluZygpLHR5cGU6dGhpcy50eXBlLGF0dHI6dGhpcy5hdHRyLHN0eWxlOnRoaXMudG9TdHlsZSgpfSx3PVtdO2ZvcihsZXQgTiBpbiB0aGlzLmV2ZW50KXtsZXR7cGFyYW1zOnl9PXRoaXMuZXZlbnRbTl07eT93LnB1c2goe3R5cGU6TixwYXJhbXM6eX0pOncucHVzaChOKX1yZXR1cm4gdy5sZW5ndGgmJihwLmV2ZW50PXcpLCFzJiZ0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgmJihwLmNoaWxkcmVuPXRoaXMucHVyZUNoaWxkcmVuLm1hcChOPT5OLnRvSlNPTigpKSkscH10b1N0cmluZygpe3JldHVybiI8Iit0aGlzLnR5cGUrIiBhdHRyPSIrSlNPTi5zdHJpbmdpZnkodGhpcy5hdHRyKSsiIHN0eWxlPSIrSlNPTi5zdHJpbmdpZnkodGhpcy50b1N0eWxlKCkpKyI+Iit0aGlzLnB1cmVDaGlsZHJlbi5tYXAocz0+cy50b1N0cmluZygpKS5qb2luKCIiKSsiPC8iK3RoaXMudHlwZSsiPiJ9fTtmdW5jdGlvbiBzdihmKXtsZXQgcz1mJiZmLl9fdl9yYXc7cmV0dXJuIHM/c3Yocyk6Zn1mdW5jdGlvbiBsdihmKXtsZXQgcz1nYyhmKTtzd2l0Y2gocyl7Y2FzZSJVbmRlZmluZWQiOmNhc2UiTnVsbCI6cmV0dXJuIiI7Y2FzZSJSZWdFeHAiOnJldHVybiBmLnRvU3RyaW5nKCk7Y2FzZSJEYXRlIjpyZXR1cm4gZi50b0lTT1N0cmluZygpO2Nhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJCb29sZWFuIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6cmV0dXJuIHN2KGYpO2Nhc2UiQXJyYXlCdWZmZXIiOnJldHVybnsiQHR5cGUiOiJiaW5hcnkiLGRhdGFUeXBlOnMsYmFzZTY0OnZmKGYpfTtjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpyZXR1cm57IkB0eXBlIjoiYmluYXJ5IixkYXRhVHlwZTpzLGJhc2U2NDp2ZihmLmJ1ZmZlcil9O2RlZmF1bHQ6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGYpfX12YXIgY3U9ZnVuY3Rpb24oKXt9LFZsPWNsYXNze2NvbnN0cnVjdG9yKHMscCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImluc3RhbmNlSWQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOlN0cmluZyhzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYWxsYmFja01hbmFnZXIiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOm5ldyBzdShzKX0pLGN1PXB8fGZ1bmN0aW9uKCl7fX1jYWxsYmFjayhzLHAsdyl7cmV0dXJuIHRoaXMuY2FsbGJhY2tNYW5hZ2VyLmNvbnN1bWUocyxwLHcpfXJlZ2lzdGVySG9vayhzLHAsdyxOKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIucmVnaXN0ZXJIb29rKHMscCx3LE4pfXRyaWdnZXJIb29rKHMscCx3LE4pe3JldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci50cmlnZ2VySG9vayhzLHAsdyxOKX11cGRhdGVEYXRhKHMscCx3KXt0aGlzLnNlbmQoIm1vZHVsZSIse21vZHVsZToiZG9tIixtZXRob2Q6InVwZGF0ZUNvbXBvbmVudERhdGEifSxbcyxwLHddKX1kZXN0cm95Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuY2xvc2UoKX1ub3JtYWxpemUocyxwPSExKXtsZXQgdz1nYyhzKTtpZihzJiZzIGluc3RhbmNlb2Ygbm8pcmV0dXJuIHMucmVmO2lmKHMmJnMuJGVsIGluc3RhbmNlb2Ygbm8pcmV0dXJuIHMuJGVsLnJlZjtpZih3PT09IkZ1bmN0aW9uIilyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuYWRkKHMpLnRvU3RyaW5nKCk7aWYocCl7aWYodz09PSJPYmplY3QiKXtsZXQgTj17fTtmb3IobGV0IHkgaW4gcylOW3ldPXRoaXMubm9ybWFsaXplKHNbeV0sITApO3JldHVybiBOfWlmKHc9PT0iQXJyYXkiKXJldHVybiBzLm1hcChOPT50aGlzLm5vcm1hbGl6ZShOLCEwKSl9cmV0dXJuIHMmJnMucmVmJiZzWyJbW1ZpcnR1YWxFbGVtZW50XV0iXT9zLnJlZjpsdihzKX1zZW5kKHMscCx3LE4pe2xldHthY3Rpb246eSxjb21wb25lbnQ6aCxyZWY6RSxtb2R1bGU6UixtZXRob2Q6RGV9PXA7c3dpdGNoKHc9dy5tYXAoTnQ9PnRoaXMubm9ybWFsaXplKE50LHMhPT0ibW9kdWxlIikpLGdjKE4pPT09Ik9iamVjdCImJihOPXRoaXMubm9ybWFsaXplKE4sITApKSxzKXtjYXNlImRvbSI6cmV0dXJuIG5yKCJkZWJ1ZyIpJiZqaShgW3Rhc2tdKCR7dGhpcy5pbnN0YW5jZUlkfSwke3N9LCR7eX0pICR7SlNPTi5zdHJpbmdpZnkodyl9YCksdGhpc1t5XSh0aGlzLmluc3RhbmNlSWQsdyk7Y2FzZSJjb21wb25lbnQiOnJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLEUsRGUsdyxIaSh7Y29tcG9uZW50Omh9LE4pKTtkZWZhdWx0OnJldHVybiBucigiZGVidWciKSYmamkoYFt0YXNrXSgke3RoaXMuaW5zdGFuY2VJZH0sJHtSfSwke0RlfSkgJHtKU09OLnN0cmluZ2lmeSh3KX1gKSx0aGlzLm1vZHVsZUhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLFIsRGUsdyxOKX19Y2FsbERPTShzLHApe3JldHVybiB0aGlzW3NdKHRoaXMuaW5zdGFuY2VJZCxwKX1jYWxsQ29tcG9uZW50KHMscCx3LE4pe3JldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLHMscCx3LE4pfWNhbGxNb2R1bGUocyxwLHcsTil7cmV0dXJuIHRoaXMubW9kdWxlSGFuZGxlcih0aGlzLmluc3RhbmNlSWQscyxwLHcsTil9fTtmdW5jdGlvbiBjdigpe2xldCBmPXtjcmVhdGVGaW5pc2g6Z2xvYmFsLmNhbGxDcmVhdGVGaW5pc2gsdXBkYXRlRmluaXNoOmdsb2JhbC5jYWxsVXBkYXRlRmluaXNoLHJlZnJlc2hGaW5pc2g6Z2xvYmFsLmNhbGxSZWZyZXNoRmluaXNoLGNyZWF0ZUJvZHk6Z2xvYmFsLmNhbGxDcmVhdGVCb2R5LGFkZEVsZW1lbnQ6Z2xvYmFsLmNhbGxBZGRFbGVtZW50LHJlbW92ZUVsZW1lbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFbGVtZW50LG1vdmVFbGVtZW50Omdsb2JhbC5jYWxsTW92ZUVsZW1lbnQsdXBkYXRlQXR0cnM6Z2xvYmFsLmNhbGxVcGRhdGVBdHRycyx1cGRhdGVTdHlsZTpnbG9iYWwuY2FsbFVwZGF0ZVN0eWxlLGFkZEV2ZW50Omdsb2JhbC5jYWxsQWRkRXZlbnQscmVtb3ZlRXZlbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFdmVudCxfX3VwZGF0ZUNvbXBvbmVudERhdGE6Z2xvYmFsLl9fdXBkYXRlQ29tcG9uZW50RGF0YX0scz1WbC5wcm90b3R5cGU7Zm9yKGxldCBwIGluIGYpe2xldCB3PWZbcF07c1twXT13PyhOLHkpPT53KE4sLi4ueSk6KE4seSk9PmN1KE4sW3ttb2R1bGU6ImRvbSIsbWV0aG9kOnAsYXJnczp5fV0sIi0xIil9cy5jb21wb25lbnRIYW5kbGVyPWdsb2JhbC5jYWxsTmF0aXZlQ29tcG9uZW50fHwoKHAsdyxOLHksaCk9PmN1KHAsW3tjb21wb25lbnQ6aC5jb21wb25lbnQscmVmOncsbWV0aG9kOk4sYXJnczp5fV0pKSxzLm1vZHVsZUhhbmRsZXI9Z2xvYmFsLmNhbGxOYXRpdmVNb2R1bGV8fCgocCx3LE4seSk9PmN1KHAsW3ttb2R1bGU6dyxtZXRob2Q6TixhcmdzOnl9XSkpfWZ1bmN0aW9uIHZrKGYscyxwLHcsTix5KXtsZXQgaD1mLmdldFJlZihzKTtpZihoKXJldHVybiBmLmZpcmVFdmVudChoLHAsdyxOLHkpO2lmKHcpcmV0dXJuIHcuX25vZGVJZD1zLGYuZmlyZUV2ZW50KGYuZ2V0UmVmKCJfZG9jdW1lbnRFbGVtZW50IikscCx3LE4seSl9ZnVuY3Rpb24gbWsoZixzLHAsdyl7cmV0dXJuIGYudGFza0NlbnRlci5jYWxsYmFjayhzLHAsdyl9ZnVuY3Rpb24gX2soZixzLHAsdyxOKXtpZighZnx8IWYudGFza0NlbnRlcilyZXR1cm4gY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gQ2FuJ3QgZmluZCAiZG9jdW1lbnQiIG9yICJ0YXNrQ2VudGVyIi5gKSxudWxsO2xldCB5PW51bGw7dHJ5e3k9Zi50YXNrQ2VudGVyLnRyaWdnZXJIb29rKHMscCx3LE4pfWNhdGNoKGgpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byB0cmlnZ2VyIHRoZSAiJHtwfUAke3d9IiBob29rIG9uICR7c30uYCksaH1yZXR1cm4geX1mdW5jdGlvbiBQZihmLHMpe2xldCBwPXJzKGYpO2lmKCFwKXJldHVybiBuZXcgRXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZWNlaXZlVGFza3MsIGluc3RhbmNlICgke2Z9KSBpcyBub3QgYXZhaWxhYmxlLmApO2lmKGtpKHMpKXJldHVybiBzLm1hcCh3PT57c3dpdGNoKHcubWV0aG9kKXtjYXNlImNhbGxiYWNrIjpyZXR1cm4gbWsocCwuLi53LmFyZ3MpO2Nhc2UiZmlyZUV2ZW50U3luYyI6Y2FzZSJmaXJlRXZlbnQiOnJldHVybiB2ayhwLC4uLncuYXJncyk7Y2FzZSJjb21wb25lbnRIb29rIjpyZXR1cm4gX2socCwuLi53LmFyZ3MpfX0pfXZhciBOcz17fTtmdW5jdGlvbiB1dihmPXt9KXtmb3IobGV0IHMgaW4gZilpbChOcyxzKXx8KE5zW3NdPXt9KSwhIWtpKGZbc10pJiZmW3NdLmZvckVhY2gocD0+e2JpKHApP05zW3NdW3BdPSEwOkZsKHApJiZiaShwLm5hbWUpJiYoTnNbc11bcC5uYW1lXT1wLmFyZ3N8fFtdKX0pfWZ1bmN0aW9uIHV1KGYscyl7cmV0dXJuIGJpKHMpPyEhKE5zW2ZdJiZOc1tmXVtzXSk6ISFOc1tmXX1mdW5jdGlvbiBmdihmKXtyZXR1cm4gTnNbZl19dmFyIElmPXt9O2Z1bmN0aW9uIGR2KGYpeyFraShmKXx8Zi5mb3JFYWNoKHM9Pnshc3x8KGJpKHMpP0lmW3NdPSEwOkZsKHMpJiZiaShzLnR5cGUpJiYoSWZbcy50eXBlXT1zLFNmKHMudHlwZSxzLm1ldGhvZHMpKSl9KX1mdW5jdGlvbiBOZihmKXtyZXR1cm4hIUlmW2ZdfXZhciBrcz1bXTtmdW5jdGlvbiBmdShmLHMpe2tmKGYpP2NvbnNvbGUud2FybihgU2VydmljZSAiJHtmfSIgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbHJlYWR5IWApOihzPUhpKHt9LHMpLGtzLnB1c2goe25hbWU6ZixvcHRpb25zOnN9KSl9ZnVuY3Rpb24gZHUoZil7a3Muc29tZSgocyxwKT0+e2lmKHMubmFtZT09PWYpcmV0dXJuIGtzLnNwbGljZShwLDEpLCEwfSl9ZnVuY3Rpb24ga2YoZil7cmV0dXJuIGJrKGYpPj0wfWZ1bmN0aW9uIGJrKGYpe3JldHVybiBrcy5tYXAocz0+cy5uYW1lKS5pbmRleE9mKGYpfWZ1bmN0aW9uIEVrKGYpe3JldHVybiBzPT57bGV0IHA9dHUoZixzKSx7Y3JlYXRlQXBwOnd9PXA7cC5jcmVhdGVWdWVBcHA9cC5jcmVhdGVBcHA9KE4seSk9PncoTix5KS51c2UoeWsscykscy5WdWU9cH19dmFyIHlrPXtpbnN0YWxsKGYscyl7U2soZixzKSxkYyhzKS5pbml0QXBwKGYpfX07ZnVuY3Rpb24gU2soZixzKXtsZXR7bW91bnQ6cH09ZjtmLm1vdW50PXc9PntsZXQgTj1wKHcpO3JldHVybiB3PT09IiNhcHAiJiZzLl9fcmVnaXN0ZXJBcHAoTiksTn19ZnVuY3Rpb24gd2soZil7bGV0e1VuaVNoYXJlZDpzLFZ1ZVNoYXJlZDpwLFZ1ZVJlYWN0aXZpdHk6d309Zjt2YXIgTj1mdW5jdGlvbih5LGgsRSxSKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRGUoaSl7fWZ1bmN0aW9uIE50KGksbCl7fWZ1bmN0aW9uIFV0KGksbCxkLF8pe3ZhciBBO3RyeXtBPV8/aSguLi5fKTppKCl9Y2F0Y2goQyl7UChDLGwsZCl9cmV0dXJuIEF9ZnVuY3Rpb24gVHQoaSxsLGQsXyl7aWYoaC5pc0Z1bmN0aW9uKGkpKXt2YXIgQT1VdChpLGwsZCxfKTtyZXR1cm4gQSYmaC5pc1Byb21pc2UoQSkmJkEuY2F0Y2goTD0+e1AoTCxsLGQpfSksQX1mb3IodmFyIEM9W10saz0wO2s8aS5sZW5ndGg7aysrKUMucHVzaChUdChpW2tdLGwsZCxfKSk7cmV0dXJuIEN9ZnVuY3Rpb24gUChpLGwsZCl7aWYobCYmbC52bm9kZSxsKXtmb3IodmFyIF89bC5wYXJlbnQsQT1sLnByb3h5LEM9ZDtfOyl7dmFyIGs9Xy5lYztpZihrKXtmb3IodmFyIEw9MDtMPGsubGVuZ3RoO0wrKylpZihrW0xdKGksQSxDKT09PSExKXJldHVybn1fPV8ucGFyZW50fXZhciBIPWwuYXBwQ29udGV4dC5jb25maWcuZXJyb3JIYW5kbGVyO2lmKEgpe1V0KEgsbnVsbCwxMCxbaSxBLENdKTtyZXR1cm59fUN0KGkpfWZ1bmN0aW9uIEN0KGksbCxkKXtjb25zb2xlLmVycm9yKGkpfXZhciBSbj0hMSxvdD0hMSx6PVtdLEs9MCxtbj1bXSxobj1udWxsLHduPTAsWG49e3RoZW4oaSl7c2V0VGltZW91dCgoKT0+aSgpLDApfX0sc2k9eS5wbGF0Zm9ybT09PSJpT1MiLEVpPXNpP1huOlByb21pc2UucmVzb2x2ZSgpLFhyPW51bGw7ZnVuY3Rpb24gbXIoaSl7dmFyIGw9WHJ8fEVpO3JldHVybiBpP2wudGhlbih0aGlzP2kuYmluZCh0aGlzKTppKTpsfWZ1bmN0aW9uIENuKGkpe2Zvcih2YXIgbD1LKzEsZD16Lmxlbmd0aDtsPGQ7KXt2YXIgXz1sK2Q+Pj4xLEE9bnQoeltfXSk7QTxpP2w9XysxOmQ9X31yZXR1cm4gbH1mdW5jdGlvbiBfcihpKXsoIXoubGVuZ3RofHwhei5pbmNsdWRlcyhpLFJuJiZpLmFsbG93UmVjdXJzZT9LKzE6SykpJiYoaS5pZD09bnVsbD96LnB1c2goaSk6ei5zcGxpY2UoQ24oaS5pZCksMCxpKSwkcigpKX1mdW5jdGlvbiAkcigpeyFSbiYmIW90JiYob3Q9ITAsWHI9RWkudGhlbihubikpfWZ1bmN0aW9uIFFyKGkpe3ZhciBsPXouaW5kZXhPZihpKTtsPksmJnouc3BsaWNlKGwsMSl9ZnVuY3Rpb24geWkoaSl7aC5pc0FycmF5KGkpP21uLnB1c2goLi4uaSk6KCFobnx8IWhuLmluY2x1ZGVzKGksaS5hbGxvd1JlY3Vyc2U/d24rMTp3bikpJiZtbi5wdXNoKGkpLCRyKCl9ZnVuY3Rpb24ga24oaSl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpSbj9LKzE6MDtsPHoubGVuZ3RoO2wrKyl7dmFyIGQ9eltsXTtkJiZkLnByZSYmKHouc3BsaWNlKGwsMSksbC0tLGQoKSl9fWZ1bmN0aW9uIGplKGkpe2lmKG1uLmxlbmd0aCl7dmFyIGw9Wy4uLm5ldyBTZXQobW4pXTtpZihtbi5sZW5ndGg9MCxobil7aG4ucHVzaCguLi5sKTtyZXR1cm59Zm9yKGhuPWwsaG4uc29ydCgoZCxfKT0+bnQoZCktbnQoXykpLHduPTA7d248aG4ubGVuZ3RoO3duKyspaG5bd25dKCk7aG49bnVsbCx3bj0wfX12YXIgbnQ9aT0+aS5pZD09bnVsbD8xLzA6aS5pZCxPdD0oaSxsKT0+e3ZhciBkPW50KGkpLW50KGwpO2lmKGQ9PT0wKXtpZihpLnByZSYmIWwucHJlKXJldHVybi0xO2lmKGwucHJlJiYhaS5wcmUpcmV0dXJuIDF9cmV0dXJuIGR9O2Z1bmN0aW9uIG5uKGkpe290PSExLFJuPSEwLHouc29ydChPdCk7dmFyIGw9aC5OT09QO3RyeXtmb3IoSz0wO0s8ei5sZW5ndGg7SysrKXt2YXIgZD16W0tdO2QmJmQuYWN0aXZlIT09ITEmJlV0KGQsbnVsbCwxNCl9fWZpbmFsbHl7Sz0wLHoubGVuZ3RoPTAsamUoKSxSbj0hMSxYcj1udWxsLCh6Lmxlbmd0aHx8bW4ubGVuZ3RoKSYmbm4oKX19eS5kZXZ0b29scz12b2lkIDA7dmFyIE5uPVtdO2Z1bmN0aW9uIHVuKGksbCl7dmFyIGQsXztpZih5LmRldnRvb2xzPWkseS5kZXZ0b29scyl5LmRldnRvb2xzLmVuYWJsZWQ9ITAsTm4uZm9yRWFjaChDPT57dmFye2V2ZW50OmssYXJnczpMfT1DO3JldHVybiB5LmRldnRvb2xzLmVtaXQoaywuLi5MKX0pLE5uPVtdO2Vsc2UgaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5IVE1MRWxlbWVudCYmISgoXz0oZD13aW5kb3cubmF2aWdhdG9yKT09PW51bGx8fGQ9PT12b2lkIDA/dm9pZCAwOmQudXNlckFnZW50KT09PW51bGx8fF89PT12b2lkIDA/dm9pZCAwOl8uaW5jbHVkZXMoImpzZG9tIikpKXt2YXIgQT1sLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189bC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9ffHxbXTtBLnB1c2goQz0+e3VuKEMsbCl9KSxzZXRUaW1lb3V0KCgpPT57eS5kZXZ0b29sc3x8KGwuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLE5uPVtdKX0sM2UzKX1lbHNlIE5uPVtdfWZ1bmN0aW9uIGFyKGksbCl7aWYoIWkuaXNVbm1vdW50ZWQpe2Zvcih2YXIgZD1pLnZub2RlLnByb3BzfHxoLkVNUFRZX09CSixfPWFyZ3VtZW50cy5sZW5ndGgsQT1uZXcgQXJyYXkoXz4yP18tMjowKSxDPTI7QzxfO0MrKylBW0MtMl09YXJndW1lbnRzW0NdO3ZhciBrPUEsTD1sLnN0YXJ0c1dpdGgoInVwZGF0ZToiKSxIPUwmJmwuc2xpY2UoNyk7aWYoSCYmSCBpbiBkKXt2YXIgdGU9IiIuY29uY2F0KEg9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsIjpILCJNb2RpZmllcnMiKSx7bnVtYmVyOmdlLHRyaW06a2V9PWRbdGVdfHxoLkVNUFRZX09CSjtrZSYmKGs9QS5tYXAodXQ9PmguaXNTdHJpbmcodXQpP3V0LnRyaW0oKTp1dCkpLGdlJiYoaz1BLm1hcChoLmxvb3NlVG9OdW1iZXIpKX12YXIgdWUsUGU9ZFt1ZT1oLnRvSGFuZGxlcktleShsKV18fGRbdWU9aC50b0hhbmRsZXJLZXkoaC5jYW1lbGl6ZShsKSldOyFQZSYmTCYmKFBlPWRbdWU9aC50b0hhbmRsZXJLZXkoaC5oeXBoZW5hdGUobCkpXSksUGUmJlR0KFBlLGksNixrKTt2YXIgV2U9ZFt1ZSsiT25jZSJdO2lmKFdlKXtpZighaS5lbWl0dGVkKWkuZW1pdHRlZD17fTtlbHNlIGlmKGkuZW1pdHRlZFt1ZV0pcmV0dXJuO2kuZW1pdHRlZFt1ZV09ITAsVHQoV2UsaSw2LGspfX19ZnVuY3Rpb24gVm4oaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsXz1sLmVtaXRzQ2FjaGUsQT1fLmdldChpKTtpZihBIT09dm9pZCAwKXJldHVybiBBO3ZhciBDPWkuZW1pdHMsaz17fSxMPSExO2lmKCFoLmlzRnVuY3Rpb24oaSkpe3ZhciBIPXRlPT57dmFyIGdlPVZuKHRlLGwsITApO2dlJiYoTD0hMCxoLmV4dGVuZChrLGdlKSl9OyFkJiZsLm1peGlucy5sZW5ndGgmJmwubWl4aW5zLmZvckVhY2goSCksaS5leHRlbmRzJiZIKGkuZXh0ZW5kcyksaS5taXhpbnMmJmkubWl4aW5zLmZvckVhY2goSCl9cmV0dXJuIUMmJiFMPyhoLmlzT2JqZWN0KGkpJiZfLnNldChpLG51bGwpLG51bGwpOihoLmlzQXJyYXkoQyk/Qy5mb3JFYWNoKHRlPT5rW3RlXT1udWxsKTpoLmV4dGVuZChrLEMpLGguaXNPYmplY3QoaSkmJl8uc2V0KGksayksayl9ZnVuY3Rpb24gUG4oaSxsKXtyZXR1cm4haXx8IWguaXNPbihsKT8hMToobD1sLnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywiIiksaC5oYXNPd24oaSxsWzBdLnRvTG93ZXJDYXNlKCkrbC5zbGljZSgxKSl8fGguaGFzT3duKGksaC5oeXBoZW5hdGUobCkpfHxoLmhhc093bihpLGwpKX12YXIgX249bnVsbCxicj1udWxsO2Z1bmN0aW9uIGVpKGkpe3ZhciBsPV9uO3JldHVybiBfbj1pLGJyPWkmJmkudHlwZS5fX3Njb3BlSWR8fG51bGwsbH1mdW5jdGlvbiBnbyhpKXticj1pfWZ1bmN0aW9uIGZhKCl7YnI9bnVsbH12YXIgQW89aT0+Sm87ZnVuY3Rpb24gSm8oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOl9uO2lmKCFsfHxpLl9uKXJldHVybiBpO3ZhciBkPWZ1bmN0aW9uKCl7ZC5fZCYmeXQoLTEpO3ZhciBfPWVpKGwpLEE7dHJ5e0E9aSguLi5hcmd1bWVudHMpfWZpbmFsbHl7ZWkoXyksZC5fZCYmeXQoMSl9cmV0dXJuIEF9O3JldHVybiBkLl9uPSEwLGQuX2M9ITAsZC5fZD0hMCxkfWZ1bmN0aW9uIEtvKCl7fWZ1bmN0aW9uIFJpKGkpe3Zhcnt0eXBlOmwsdm5vZGU6ZCxwcm94eTpfLHdpdGhQcm94eTpBLHByb3BzOkMscHJvcHNPcHRpb25zOltrXSxzbG90czpMLGF0dHJzOkgsZW1pdDp0ZSxyZW5kZXI6Z2UscmVuZGVyQ2FjaGU6a2UsZGF0YTp1ZSxzZXR1cFN0YXRlOlBlLGN0eDpXZSxpbmhlcml0QXR0cnM6dXR9PWksUWUsSWUscGU9ZWkoaSk7dHJ5e2lmKGQuc2hhcGVGbGFnJjQpe3ZhciBfZT1BfHxfO1FlPVduKGdlLmNhbGwoX2UsX2Usa2UsQyxQZSx1ZSxXZSkpLEllPUh9ZWxzZXt2YXIgTGU9bDtRZT1XbihMZS5sZW5ndGg+MT9MZShDLHthdHRyczpILHNsb3RzOkwsZW1pdDp0ZX0pOkxlKEMsbnVsbCkpLEllPWwucHJvcHM/SDp6aShIKX19Y2F0Y2goSmUpe2ZlLmxlbmd0aD0wLFAoSmUsaSwxKSxRZT1adChoZSl9dmFyIEFlPVFlO2lmKEllJiZ1dCE9PSExKXt2YXIgRXQ9T2JqZWN0LmtleXMoSWUpLHtzaGFwZUZsYWc6QXR9PUFlO0V0Lmxlbmd0aCYmQXQmKDF8NikmJihrJiZFdC5zb21lKGguaXNNb2RlbExpc3RlbmVyKSYmKEllPVdpKEllLGspKSxBZT1paShBZSxJZSkpfXJldHVybiBkLmRpcnMmJihBZT1paShBZSksQWUuZGlycz1BZS5kaXJzP0FlLmRpcnMuY29uY2F0KGQuZGlycyk6ZC5kaXJzKSxkLnRyYW5zaXRpb24mJihBZS50cmFuc2l0aW9uPWQudHJhbnNpdGlvbiksUWU9QWUsZWkocGUpLFFlfWZ1bmN0aW9uIFJyKGkpe2Zvcih2YXIgbCxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBfPWlbZF07aWYocXQoXykpe2lmKF8udHlwZSE9PWhlfHxfLmNoaWxkcmVuPT09InYtaWYiKXtpZihsKXJldHVybjtsPV99fWVsc2UgcmV0dXJufXJldHVybiBsfXZhciB6aT1pPT57dmFyIGw7Zm9yKHZhciBkIGluIGkpKGQ9PT0iY2xhc3MifHxkPT09InN0eWxlInx8aC5pc09uKGQpKSYmKChsfHwobD17fSkpW2RdPWlbZF0pO3JldHVybiBsfSxXaT0oaSxsKT0+e3ZhciBkPXt9O2Zvcih2YXIgXyBpbiBpKSghaC5pc01vZGVsTGlzdGVuZXIoXyl8fCEoXy5zbGljZSg5KWluIGwpKSYmKGRbX109aVtfXSk7cmV0dXJuIGR9O2Z1bmN0aW9uIHJvKGksbCxkKXt2YXJ7cHJvcHM6XyxjaGlsZHJlbjpBLGNvbXBvbmVudDpDfT1pLHtwcm9wczprLGNoaWxkcmVuOkwscGF0Y2hGbGFnOkh9PWwsdGU9Qy5lbWl0c09wdGlvbnM7aWYobC5kaXJzfHxsLnRyYW5zaXRpb24pcmV0dXJuITA7aWYoZCYmSD49MCl7aWYoSCYxMDI0KXJldHVybiEwO2lmKEgmMTYpcmV0dXJuIF8/aW8oXyxrLHRlKTohIWs7aWYoSCY4KWZvcih2YXIgZ2U9bC5keW5hbWljUHJvcHMsa2U9MDtrZTxnZS5sZW5ndGg7a2UrKyl7dmFyIHVlPWdlW2tlXTtpZihrW3VlXSE9PV9bdWVdJiYhUG4odGUsdWUpKXJldHVybiEwfX1lbHNlIHJldHVybihBfHxMKSYmKCFMfHwhTC4kc3RhYmxlKT8hMDpfPT09az8hMTpfP2s/aW8oXyxrLHRlKTohMDohIWs7cmV0dXJuITF9ZnVuY3Rpb24gaW8oaSxsLGQpe3ZhciBfPU9iamVjdC5rZXlzKGwpO2lmKF8ubGVuZ3RoIT09T2JqZWN0LmtleXMoaSkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgQT0wO0E8Xy5sZW5ndGg7QSsrKXt2YXIgQz1fW0FdO2lmKGxbQ10hPT1pW0NdJiYhUG4oZCxDKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBsaShpLGwpe2Zvcih2YXJ7dm5vZGU6ZCxwYXJlbnQ6X309aTtfJiZfLnN1YlRyZWU9PT1kOykoZD1fLnZub2RlKS5lbD1sLF89Xy5wYXJlbnR9dmFyIHBvPWk9PmkuX19pc1N1c3BlbnNlLE9vPXtuYW1lOiJTdXNwZW5zZSIsX19pc1N1c3BlbnNlOiEwLHByb2Nlc3MoaSxsLGQsXyxBLEMsayxMLEgsdGUpe2k9PW51bGw/Y2kobCxkLF8sQSxDLGssTCxILHRlKTpmcihpLGwsZCxfLEEsayxMLEgsdGUpfSxoeWRyYXRlOlpvLGNyZWF0ZTp2byxub3JtYWxpemU6VG99LHhuPU9vO2Z1bmN0aW9uIFRyKGksbCl7dmFyIGQ9aS5wcm9wcyYmaS5wcm9wc1tsXTtoLmlzRnVuY3Rpb24oZCkmJmQoKX1mdW5jdGlvbiBjaShpLGwsZCxfLEEsQyxrLEwsSCl7dmFye3A6dGUsbzp7Y3JlYXRlRWxlbWVudDpnZX19PUgsa2U9Z2UoImRpdiIsbCksdWU9aS5zdXNwZW5zZT12byhpLEEsXyxsLGtlLGQsQyxrLEwsSCk7dGUobnVsbCx1ZS5wZW5kaW5nQnJhbmNoPWkuc3NDb250ZW50LGtlLG51bGwsXyx1ZSxDLGspLHVlLmRlcHM+MD8oVHIoaSwib25QZW5kaW5nIiksVHIoaSwib25GYWxsYmFjayIpLHRlKG51bGwsaS5zc0ZhbGxiYWNrLGwsZCxfLG51bGwsQyxrKSx1aSh1ZSxpLnNzRmFsbGJhY2spKTp1ZS5yZXNvbHZlKCl9ZnVuY3Rpb24gZnIoaSxsLGQsXyxBLEMsayxMLEgpe3ZhcntwOnRlLHVtOmdlLG86e2NyZWF0ZUVsZW1lbnQ6a2V9fT1ILHVlPWwuc3VzcGVuc2U9aS5zdXNwZW5zZTt1ZS52bm9kZT1sLGwuZWw9aS5lbDt2YXIgUGU9bC5zc0NvbnRlbnQsV2U9bC5zc0ZhbGxiYWNrLHthY3RpdmVCcmFuY2g6dXQscGVuZGluZ0JyYW5jaDpRZSxpc0luRmFsbGJhY2s6SWUsaXNIeWRyYXRpbmc6cGV9PXVlO2lmKFFlKXVlLnBlbmRpbmdCcmFuY2g9UGUsZHQoUGUsUWUpPyh0ZShRZSxQZSx1ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHVlLEMsayxMKSx1ZS5kZXBzPD0wP3VlLnJlc29sdmUoKTpJZSYmKHRlKHV0LFdlLGQsXyxBLG51bGwsQyxrLEwpLHVpKHVlLFdlKSkpOih1ZS5wZW5kaW5nSWQrKyxwZT8odWUuaXNIeWRyYXRpbmc9ITEsdWUuYWN0aXZlQnJhbmNoPVFlKTpnZShRZSxBLHVlKSx1ZS5kZXBzPTAsdWUuZWZmZWN0cy5sZW5ndGg9MCx1ZS5oaWRkZW5Db250YWluZXI9a2UoImRpdiIsZCksSWU/KHRlKG51bGwsUGUsdWUuaGlkZGVuQ29udGFpbmVyLG51bGwsQSx1ZSxDLGssTCksdWUuZGVwczw9MD91ZS5yZXNvbHZlKCk6KHRlKHV0LFdlLGQsXyxBLG51bGwsQyxrLEwpLHVpKHVlLFdlKSkpOnV0JiZkdChQZSx1dCk/KHRlKHV0LFBlLGQsXyxBLHVlLEMsayxMKSx1ZS5yZXNvbHZlKCEwKSk6KHRlKG51bGwsUGUsdWUuaGlkZGVuQ29udGFpbmVyLG51bGwsQSx1ZSxDLGssTCksdWUuZGVwczw9MCYmdWUucmVzb2x2ZSgpKSk7ZWxzZSBpZih1dCYmZHQoUGUsdXQpKXRlKHV0LFBlLGQsXyxBLHVlLEMsayxMKSx1aSh1ZSxQZSk7ZWxzZSBpZihUcihsLCJvblBlbmRpbmciKSx1ZS5wZW5kaW5nQnJhbmNoPVBlLHVlLnBlbmRpbmdJZCsrLHRlKG51bGwsUGUsdWUuaGlkZGVuQ29udGFpbmVyLG51bGwsQSx1ZSxDLGssTCksdWUuZGVwczw9MCl1ZS5yZXNvbHZlKCk7ZWxzZXt2YXJ7dGltZW91dDpfZSxwZW5kaW5nSWQ6TGV9PXVlO19lPjA/c2V0VGltZW91dCgoKT0+e3VlLnBlbmRpbmdJZD09PUxlJiZ1ZS5mYWxsYmFjayhXZSl9LF9lKTpfZT09PTAmJnVlLmZhbGxiYWNrKFdlKX19ZnVuY3Rpb24gdm8oaSxsLGQsXyxBLEMsayxMLEgsdGUpe3ZhciBnZT1hcmd1bWVudHMubGVuZ3RoPjEwJiZhcmd1bWVudHNbMTBdIT09dm9pZCAwP2FyZ3VtZW50c1sxMF06ITEse3A6a2UsbTp1ZSx1bTpQZSxuOldlLG86e3BhcmVudE5vZGU6dXQscmVtb3ZlOlFlfX09dGUsSWU9aS5wcm9wcz9oLnRvTnVtYmVyKGkucHJvcHMudGltZW91dCk6dm9pZCAwLHBlPXt2bm9kZTppLHBhcmVudDpsLHBhcmVudENvbXBvbmVudDpkLGlzU1ZHOmssY29udGFpbmVyOl8saGlkZGVuQ29udGFpbmVyOkEsYW5jaG9yOkMsZGVwczowLHBlbmRpbmdJZDowLHRpbWVvdXQ6dHlwZW9mIEllPT0ibnVtYmVyIj9JZTotMSxhY3RpdmVCcmFuY2g6bnVsbCxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiEwLGlzSHlkcmF0aW5nOmdlLGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZSgpe3ZhciBfZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEse3Zub2RlOkxlLGFjdGl2ZUJyYW5jaDpBZSxwZW5kaW5nQnJhbmNoOkV0LHBlbmRpbmdJZDpBdCxlZmZlY3RzOkplLHBhcmVudENvbXBvbmVudDp4dCxjb250YWluZXI6TX09cGU7aWYocGUuaXNIeWRyYXRpbmcpcGUuaXNIeWRyYXRpbmc9ITE7ZWxzZSBpZighX2Upe3ZhciBqPUFlJiZFdC50cmFuc2l0aW9uJiZFdC50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIjtqJiYoQWUudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57QXQ9PT1wZS5wZW5kaW5nSWQmJnVlKEV0LE0sYWUsMCl9KTt2YXJ7YW5jaG9yOmFlfT1wZTtBZSYmKGFlPVdlKEFlKSxQZShBZSx4dCxwZSwhMCkpLGp8fHVlKEV0LE0sYWUsMCl9dWkocGUsRXQpLHBlLnBlbmRpbmdCcmFuY2g9bnVsbCxwZS5pc0luRmFsbGJhY2s9ITE7Zm9yKHZhciBuZT1wZS5wYXJlbnQsaWU9ITE7bmU7KXtpZihuZS5wZW5kaW5nQnJhbmNoKXtuZS5lZmZlY3RzLnB1c2goLi4uSmUpLGllPSEwO2JyZWFrfW5lPW5lLnBhcmVudH1pZXx8eWkoSmUpLHBlLmVmZmVjdHM9W10sVHIoTGUsIm9uUmVzb2x2ZSIpfSxmYWxsYmFjayhfZSl7aWYoISFwZS5wZW5kaW5nQnJhbmNoKXt2YXJ7dm5vZGU6TGUsYWN0aXZlQnJhbmNoOkFlLHBhcmVudENvbXBvbmVudDpFdCxjb250YWluZXI6QXQsaXNTVkc6SmV9PXBlO1RyKExlLCJvbkZhbGxiYWNrIik7dmFyIHh0PVdlKEFlKSxNPSgpPT57IXBlLmlzSW5GYWxsYmFja3x8KGtlKG51bGwsX2UsQXQseHQsRXQsbnVsbCxKZSxMLEgpLHVpKHBlLF9lKSl9LGo9X2UudHJhbnNpdGlvbiYmX2UudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiI7aiYmKEFlLnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZT1NKSxwZS5pc0luRmFsbGJhY2s9ITAsUGUoQWUsRXQsbnVsbCwhMCksanx8TSgpfX0sbW92ZShfZSxMZSxBZSl7cGUuYWN0aXZlQnJhbmNoJiZ1ZShwZS5hY3RpdmVCcmFuY2gsX2UsTGUsQWUpLHBlLmNvbnRhaW5lcj1fZX0sbmV4dCgpe3JldHVybiBwZS5hY3RpdmVCcmFuY2gmJldlKHBlLmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKF9lLExlKXt2YXIgQWU9ISFwZS5wZW5kaW5nQnJhbmNoO0FlJiZwZS5kZXBzKys7dmFyIEV0PV9lLnZub2RlLmVsO19lLmFzeW5jRGVwLmNhdGNoKEF0PT57UChBdCxfZSwwKX0pLnRoZW4oQXQ9PntpZighKF9lLmlzVW5tb3VudGVkfHxwZS5pc1VubW91bnRlZHx8cGUucGVuZGluZ0lkIT09X2Uuc3VzcGVuc2VJZCkpe19lLmFzeW5jUmVzb2x2ZWQ9ITA7dmFye3Zub2RlOkplfT1fZTtuYShfZSxBdCwhMSksRXQmJihKZS5lbD1FdCk7dmFyIHh0PSFFdCYmX2Uuc3ViVHJlZS5lbDtMZShfZSxKZSx1dChFdHx8X2Uuc3ViVHJlZS5lbCksRXQ/bnVsbDpXZShfZS5zdWJUcmVlKSxwZSxrLEgpLHh0JiZRZSh4dCksbGkoX2UsSmUuZWwpLEFlJiYtLXBlLmRlcHM9PT0wJiZwZS5yZXNvbHZlKCl9fSl9LHVubW91bnQoX2UsTGUpe3BlLmlzVW5tb3VudGVkPSEwLHBlLmFjdGl2ZUJyYW5jaCYmUGUocGUuYWN0aXZlQnJhbmNoLGQsX2UsTGUpLHBlLnBlbmRpbmdCcmFuY2gmJlBlKHBlLnBlbmRpbmdCcmFuY2gsZCxfZSxMZSl9fTtyZXR1cm4gcGV9ZnVuY3Rpb24gWm8oaSxsLGQsXyxBLEMsayxMLEgpe3ZhciB0ZT1sLnN1c3BlbnNlPXZvKGwsXyxkLGkucGFyZW50Tm9kZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxudWxsLEEsQyxrLEwsITApLGdlPUgoaSx0ZS5wZW5kaW5nQnJhbmNoPWwuc3NDb250ZW50LGQsdGUsQyxrKTtyZXR1cm4gdGUuZGVwcz09PTAmJnRlLnJlc29sdmUoKSxnZX1mdW5jdGlvbiBUbyhpKXt2YXJ7c2hhcGVGbGFnOmwsY2hpbGRyZW46ZH09aSxfPWwmMzI7aS5zc0NvbnRlbnQ9U2koXz9kLmRlZmF1bHQ6ZCksaS5zc0ZhbGxiYWNrPV8/U2koZC5mYWxsYmFjayk6WnQoaGUpfWZ1bmN0aW9uIFNpKGkpe3ZhciBsO2lmKGguaXNGdW5jdGlvbihpKSl7dmFyIGQ9anQmJmkuX2M7ZCYmKGkuX2Q9ITEsbHQoKSksaT1pKCksZCYmKGkuX2Q9ITAsbD13ZSxwdCgpKX1pZihoLmlzQXJyYXkoaSkpe3ZhciBfPVJyKGkpO2k9X31yZXR1cm4gaT1XbihpKSxsJiYhaS5keW5hbWljQ2hpbGRyZW4mJihpLmR5bmFtaWNDaGlsZHJlbj1sLmZpbHRlcihBPT5BIT09aSkpLGl9ZnVuY3Rpb24gc3IoaSxsKXtsJiZsLnBlbmRpbmdCcmFuY2g/aC5pc0FycmF5KGkpP2wuZWZmZWN0cy5wdXNoKC4uLmkpOmwuZWZmZWN0cy5wdXNoKGkpOnlpKGkpfWZ1bmN0aW9uIHVpKGksbCl7aS5hY3RpdmVCcmFuY2g9bDt2YXJ7dm5vZGU6ZCxwYXJlbnRDb21wb25lbnQ6X309aSxBPWQuZWw9bC5lbDtfJiZfLnN1YlRyZWU9PT1kJiYoXy52bm9kZS5lbD1BLGxpKF8sQSkpfWZ1bmN0aW9uIGxyKGksbCl7aWYoeW4pe3ZhciBkPXluLnByb3ZpZGVzLF89eW4ucGFyZW50JiZ5bi5wYXJlbnQucHJvdmlkZXM7Xz09PWQmJihkPXluLnByb3ZpZGVzPU9iamVjdC5jcmVhdGUoXykpLGRbaV09bCx5bi50eXBlLm1wVHlwZT09PSJhcHAiJiZ5bi5hcHBDb250ZXh0LmFwcC5wcm92aWRlKGksbCl9fWZ1bmN0aW9uIFFuKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLF89eW58fF9uO2lmKF8pe3ZhciBBPV8ucGFyZW50PT1udWxsP18udm5vZGUuYXBwQ29udGV4dCYmXy52bm9kZS5hcHBDb250ZXh0LnByb3ZpZGVzOl8ucGFyZW50LnByb3ZpZGVzO2lmKEEmJmkgaW4gQSlyZXR1cm4gQVtpXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIGQmJmguaXNGdW5jdGlvbihsKT9sLmNhbGwoXy5wcm94eSk6bH19ZnVuY3Rpb24geGkoaSxsKXtyZXR1cm4gd2koaSxudWxsLGwpfWZ1bmN0aW9uIG9vKGksbCl7cmV0dXJuIHdpKGksbnVsbCx7Zmx1c2g6InBvc3QifSl9ZnVuY3Rpb24gdGkoaSxsKXtyZXR1cm4gd2koaSxudWxsLHtmbHVzaDoic3luYyJ9KX12YXIgeHI9e307ZnVuY3Rpb24gQnIoaSxsLGQpe3JldHVybiB3aShpLGwsZCl9ZnVuY3Rpb24gd2koaSxsKXt2YXJ7aW1tZWRpYXRlOmQsZGVlcDpfLGZsdXNoOkEsb25UcmFjazpDLG9uVHJpZ2dlcjprfT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06aC5FTVBUWV9PQkosTD1FLmdldEN1cnJlbnRTY29wZSgpPT09KHluPT1udWxsP3ZvaWQgMDp5bi5zY29wZSk/eW46bnVsbCxILHRlPSExLGdlPSExO2lmKEUuaXNSZWYoaSk/KEg9KCk9PmkudmFsdWUsdGU9RS5pc1NoYWxsb3coaSkpOkUuaXNSZWFjdGl2ZShpKT8oSD0oKT0+aSxfPSEwKTpoLmlzQXJyYXkoaSk/KGdlPSEwLHRlPWkuc29tZShBZT0+RS5pc1JlYWN0aXZlKEFlKXx8RS5pc1NoYWxsb3coQWUpKSxIPSgpPT5pLm1hcChBZT0+e2lmKEUuaXNSZWYoQWUpKXJldHVybiBBZS52YWx1ZTtpZihFLmlzUmVhY3RpdmUoQWUpKXJldHVybiBNcihBZSk7aWYoaC5pc0Z1bmN0aW9uKEFlKSlyZXR1cm4gVXQoQWUsTCwyKX0pKTpoLmlzRnVuY3Rpb24oaSk/bD9IPSgpPT5VdChpLEwsMik6SD0oKT0+e2lmKCEoTCYmTC5pc1VubW91bnRlZCkpcmV0dXJuIHVlJiZ1ZSgpLFR0KGksTCwzLFtQZV0pfTpIPWguTk9PUCxsJiZfKXt2YXIga2U9SDtIPSgpPT5NcihrZSgpKX12YXIgdWUsUGU9QWU9Pnt1ZT1fZS5vblN0b3A9KCk9PntVdChBZSxMLDQpfX0sV2U7aWYoeS5pc0luU1NSQ29tcG9uZW50U2V0dXApaWYoUGU9aC5OT09QLGw/ZCYmVHQobCxMLDMsW0goKSxnZT9bXTp2b2lkIDAsUGVdKTpIKCksQT09PSJzeW5jIil7dmFyIHV0PU5hKCk7V2U9dXQuX193YXRjaGVySGFuZGxlc3x8KHV0Ll9fd2F0Y2hlckhhbmRsZXM9W10pfWVsc2UgcmV0dXJuIGguTk9PUDt2YXIgUWU9Z2U/bmV3IEFycmF5KGkubGVuZ3RoKS5maWxsKHhyKTp4cixJZT0oKT0+e2lmKCEhX2UuYWN0aXZlKWlmKGwpe3ZhciBBZT1fZS5ydW4oKTsoX3x8dGV8fChnZT9BZS5zb21lKChFdCxBdCk9PmguaGFzQ2hhbmdlZChFdCxRZVtBdF0pKTpoLmhhc0NoYW5nZWQoQWUsUWUpKSkmJih1ZSYmdWUoKSxUdChsLEwsMyxbQWUsUWU9PT14cj92b2lkIDA6Z2UmJlFlWzBdPT09eHI/W106UWUsUGVdKSxRZT1BZSl9ZWxzZSBfZS5ydW4oKX07SWUuYWxsb3dSZWN1cnNlPSEhbDt2YXIgcGU7QT09PSJzeW5jIj9wZT1JZTpBPT09InBvc3QiP3BlPSgpPT51cihJZSxMJiZMLnN1c3BlbnNlKTooSWUucHJlPSEwLEwmJihJZS5pZD1MLnVpZCkscGU9KCk9Pl9yKEllKSk7dmFyIF9lPW5ldyBFLlJlYWN0aXZlRWZmZWN0KEgscGUpO2w/ZD9JZSgpOlFlPV9lLnJ1bigpOkE9PT0icG9zdCI/dXIoX2UucnVuLmJpbmQoX2UpLEwmJkwuc3VzcGVuc2UpOl9lLnJ1bigpO3ZhciBMZT0oKT0+e19lLnN0b3AoKSxMJiZMLnNjb3BlJiZoLnJlbW92ZShMLnNjb3BlLmVmZmVjdHMsX2UpfTtyZXR1cm4gV2UmJldlLnB1c2goTGUpLExlfWZ1bmN0aW9uIFBvKGksbCxkKXt2YXIgXz10aGlzLnByb3h5LEE9aC5pc1N0cmluZyhpKT9pLmluY2x1ZGVzKCIuIik/SHIoXyxpKTooKT0+X1tpXTppLmJpbmQoXyxfKSxDO2guaXNGdW5jdGlvbihsKT9DPWw6KEM9bC5oYW5kbGVyLGQ9bCk7dmFyIGs9eW47Wm4odGhpcyk7dmFyIEw9d2koQSxDLmJpbmQoXyksZCk7cmV0dXJuIGs/Wm4oayk6VGkoKSxMfWZ1bmN0aW9uIEhyKGksbCl7dmFyIGQ9bC5zcGxpdCgiLiIpO3JldHVybigpPT57Zm9yKHZhciBfPWksQT0wO0E8ZC5sZW5ndGgmJl87QSsrKV89X1tkW0FdXTtyZXR1cm4gX319ZnVuY3Rpb24gTXIoaSxsKXtpZighaC5pc09iamVjdChpKXx8aS5fX3Zfc2tpcHx8KGw9bHx8bmV3IFNldCxsLmhhcyhpKSkpcmV0dXJuIGk7aWYobC5hZGQoaSksRS5pc1JlZihpKSlNcihpLnZhbHVlLGwpO2Vsc2UgaWYoaC5pc0FycmF5KGkpKWZvcih2YXIgZD0wO2Q8aS5sZW5ndGg7ZCsrKU1yKGlbZF0sbCk7ZWxzZSBpZihoLmlzU2V0KGkpfHxoLmlzTWFwKGkpKWkuZm9yRWFjaChBPT57TXIoQSxsKX0pO2Vsc2UgaWYoaC5pc1BsYWluT2JqZWN0KGkpKWZvcih2YXIgXyBpbiBpKU1yKGlbX10sbCk7cmV0dXJuIGl9ZnVuY3Rpb24gRXIoKXt2YXIgaT17aXNNb3VudGVkOiExLGlzTGVhdmluZzohMSxpc1VubW91bnRpbmc6ITEsbGVhdmluZ1ZOb2RlczpuZXcgTWFwfTtyZXR1cm4gY3IoKCk9PntpLmlzTW91bnRlZD0hMH0pLGRyKCgpPT57aS5pc1VubW91bnRpbmc9ITB9KSxpfXZhciBnbj1bRnVuY3Rpb24sQXJyYXldLGZpPXttb2RlOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixwZXJzaXN0ZWQ6Qm9vbGVhbixvbkJlZm9yZUVudGVyOmduLG9uRW50ZXI6Z24sb25BZnRlckVudGVyOmduLG9uRW50ZXJDYW5jZWxsZWQ6Z24sb25CZWZvcmVMZWF2ZTpnbixvbkxlYXZlOmduLG9uQWZ0ZXJMZWF2ZTpnbixvbkxlYXZlQ2FuY2VsbGVkOmduLG9uQmVmb3JlQXBwZWFyOmduLG9uQXBwZWFyOmduLG9uQWZ0ZXJBcHBlYXI6Z24sb25BcHBlYXJDYW5jZWxsZWQ6Z259LFByPXtuYW1lOiJCYXNlVHJhbnNpdGlvbiIscHJvcHM6Zmksc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxfPVluKCksQT1FcigpLEM7cmV0dXJuKCk9Pnt2YXIgaz1kLmRlZmF1bHQmJnpyKGQuZGVmYXVsdCgpLCEwKTtpZighKCFrfHwhay5sZW5ndGgpKXt2YXIgTD1rWzBdO2lmKGsubGVuZ3RoPjEpe2Zvcih2YXIgSCBvZiBrKWlmKEgudHlwZSE9PWhlKXtMPUg7YnJlYWt9fXZhciB0ZT1FLnRvUmF3KGkpLHttb2RlOmdlfT10ZTtpZihBLmlzTGVhdmluZylyZXR1cm4gR2koTCk7dmFyIGtlPUt0KEwpO2lmKCFrZSlyZXR1cm4gR2koTCk7dmFyIHVlPW5pKGtlLHRlLEEsXyk7anIoa2UsdWUpO3ZhciBQZT1fLnN1YlRyZWUsV2U9UGUmJkt0KFBlKSx1dD0hMSx7Z2V0VHJhbnNpdGlvbktleTpRZX09a2UudHlwZTtpZihRZSl7dmFyIEllPVFlKCk7Qz09PXZvaWQgMD9DPUllOkllIT09QyYmKEM9SWUsdXQ9ITApfWlmKFdlJiZXZS50eXBlIT09aGUmJighZHQoa2UsV2UpfHx1dCkpe3ZhciBwZT1uaShXZSx0ZSxBLF8pO2lmKGpyKFdlLHBlKSxnZT09PSJvdXQtaW4iKXJldHVybiBBLmlzTGVhdmluZz0hMCxwZS5hZnRlckxlYXZlPSgpPT57QS5pc0xlYXZpbmc9ITEsXy51cGRhdGUuYWN0aXZlIT09ITEmJl8udXBkYXRlKCl9LEdpKEwpO2dlPT09ImluLW91dCImJmtlLnR5cGUhPT1oZSYmKHBlLmRlbGF5TGVhdmU9KF9lLExlLEFlKT0+e3ZhciBFdD1FZShBLFdlKTtFdFtTdHJpbmcoV2Uua2V5KV09V2UsX2UuX2xlYXZlQ2I9KCk9PntMZSgpLF9lLl9sZWF2ZUNiPXZvaWQgMCxkZWxldGUgdWUuZGVsYXllZExlYXZlfSx1ZS5kZWxheWVkTGVhdmU9QWV9KX1yZXR1cm4gTH19fX0sTHQ9UHI7ZnVuY3Rpb24gRWUoaSxsKXt2YXJ7bGVhdmluZ1ZOb2RlczpkfT1pLF89ZC5nZXQobC50eXBlKTtyZXR1cm4gX3x8KF89T2JqZWN0LmNyZWF0ZShudWxsKSxkLnNldChsLnR5cGUsXykpLF99ZnVuY3Rpb24gbmkoaSxsLGQsXyl7dmFye2FwcGVhcjpBLG1vZGU6QyxwZXJzaXN0ZWQ6az0hMSxvbkJlZm9yZUVudGVyOkwsb25FbnRlcjpILG9uQWZ0ZXJFbnRlcjp0ZSxvbkVudGVyQ2FuY2VsbGVkOmdlLG9uQmVmb3JlTGVhdmU6a2Usb25MZWF2ZTp1ZSxvbkFmdGVyTGVhdmU6UGUsb25MZWF2ZUNhbmNlbGxlZDpXZSxvbkJlZm9yZUFwcGVhcjp1dCxvbkFwcGVhcjpRZSxvbkFmdGVyQXBwZWFyOkllLG9uQXBwZWFyQ2FuY2VsbGVkOnBlfT1sLF9lPVN0cmluZyhpLmtleSksTGU9RWUoZCxpKSxBZT0oSmUseHQpPT57SmUmJlR0KEplLF8sOSx4dCl9LEV0PShKZSx4dCk9Pnt2YXIgTT14dFsxXTtBZShKZSx4dCksaC5pc0FycmF5KEplKT9KZS5ldmVyeShqPT5qLmxlbmd0aDw9MSkmJk0oKTpKZS5sZW5ndGg8PTEmJk0oKX0sQXQ9e21vZGU6QyxwZXJzaXN0ZWQ6ayxiZWZvcmVFbnRlcihKZSl7dmFyIHh0PUw7aWYoIWQuaXNNb3VudGVkKWlmKEEpeHQ9dXR8fEw7ZWxzZSByZXR1cm47SmUuX2xlYXZlQ2ImJkplLl9sZWF2ZUNiKCEwKTt2YXIgTT1MZVtfZV07TSYmZHQoaSxNKSYmTS5lbC5fbGVhdmVDYiYmTS5lbC5fbGVhdmVDYigpLEFlKHh0LFtKZV0pfSxlbnRlcihKZSl7dmFyIHh0PUgsTT10ZSxqPWdlO2lmKCFkLmlzTW91bnRlZClpZihBKXh0PVFlfHxILE09SWV8fHRlLGo9cGV8fGdlO2Vsc2UgcmV0dXJuO3ZhciBhZT0hMSxuZT1KZS5fZW50ZXJDYj1pZT0+e2FlfHwoYWU9ITAsaWU/QWUoaixbSmVdKTpBZShNLFtKZV0pLEF0LmRlbGF5ZWRMZWF2ZSYmQXQuZGVsYXllZExlYXZlKCksSmUuX2VudGVyQ2I9dm9pZCAwKX07eHQ/RXQoeHQsW0plLG5lXSk6bmUoKX0sbGVhdmUoSmUseHQpe3ZhciBNPVN0cmluZyhpLmtleSk7aWYoSmUuX2VudGVyQ2ImJkplLl9lbnRlckNiKCEwKSxkLmlzVW5tb3VudGluZylyZXR1cm4geHQoKTtBZShrZSxbSmVdKTt2YXIgaj0hMSxhZT1KZS5fbGVhdmVDYj1uZT0+e2p8fChqPSEwLHh0KCksbmU/QWUoV2UsW0plXSk6QWUoUGUsW0plXSksSmUuX2xlYXZlQ2I9dm9pZCAwLExlW01dPT09aSYmZGVsZXRlIExlW01dKX07TGVbTV09aSx1ZT9FdCh1ZSxbSmUsYWVdKTphZSgpfSxjbG9uZShKZSl7cmV0dXJuIG5pKEplLGwsZCxfKX19O3JldHVybiBBdH1mdW5jdGlvbiBHaShpKXtpZihkaShpKSlyZXR1cm4gaT1paShpKSxpLmNoaWxkcmVuPW51bGwsaX1mdW5jdGlvbiBLdChpKXtyZXR1cm4gZGkoaSk/aS5jaGlsZHJlbj9pLmNoaWxkcmVuWzBdOnZvaWQgMDppfWZ1bmN0aW9uIGpyKGksbCl7aS5zaGFwZUZsYWcmNiYmaS5jb21wb25lbnQ/anIoaS5jb21wb25lbnQuc3ViVHJlZSxsKTppLnNoYXBlRmxhZyYxMjg/KGkuc3NDb250ZW50LnRyYW5zaXRpb249bC5jbG9uZShpLnNzQ29udGVudCksaS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249bC5jbG9uZShpLnNzRmFsbGJhY2spKTppLnRyYW5zaXRpb249bH1mdW5jdGlvbiB6cihpKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsXz1bXSxBPTAsQz0wO0M8aS5sZW5ndGg7QysrKXt2YXIgaz1pW0NdLEw9ZD09bnVsbD9rLmtleTpTdHJpbmcoZCkrU3RyaW5nKGsua2V5IT1udWxsP2sua2V5OkMpO2sudHlwZT09PWVlPyhrLnBhdGNoRmxhZyYxMjgmJkErKyxfPV8uY29uY2F0KHpyKGsuY2hpbGRyZW4sbCxMKSkpOihsfHxrLnR5cGUhPT1oZSkmJl8ucHVzaChMIT1udWxsP2lpKGsse2tleTpMfSk6ayl9aWYoQT4xKWZvcih2YXIgSD0wO0g8Xy5sZW5ndGg7SCsrKV9bSF0ucGF0Y2hGbGFnPS0yO3JldHVybiBffWZ1bmN0aW9uIExyKGkpe3JldHVybiBoLmlzRnVuY3Rpb24oaSk/e3NldHVwOmksbmFtZTppLm5hbWV9Oml9dmFyIERyPWk9PiEhaS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gQmkoaSl7aC5pc0Z1bmN0aW9uKGkpJiYoaT17bG9hZGVyOml9KTt2YXJ7bG9hZGVyOmwsbG9hZGluZ0NvbXBvbmVudDpkLGVycm9yQ29tcG9uZW50Ol8sZGVsYXk6QT0yMDAsdGltZW91dDpDLHN1c3BlbnNpYmxlOms9ITAsb25FcnJvcjpMfT1pLEg9bnVsbCx0ZSxnZT0wLGtlPSgpPT4oZ2UrKyxIPW51bGwsdWUoKSksdWU9KCk9Pnt2YXIgUGU7cmV0dXJuIEh8fChQZT1IPWwoKS5jYXRjaChXZT0+e2lmKFdlPVdlIGluc3RhbmNlb2YgRXJyb3I/V2U6bmV3IEVycm9yKFN0cmluZyhXZSkpLEwpcmV0dXJuIG5ldyBQcm9taXNlKCh1dCxRZSk9Pnt2YXIgSWU9KCk9PnV0KGtlKCkpLHBlPSgpPT5RZShXZSk7TChXZSxJZSxwZSxnZSsxKX0pO3Rocm93IFdlfSkudGhlbihXZT0+UGUhPT1IJiZIP0g6KFdlJiYoV2UuX19lc01vZHVsZXx8V2VbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJNb2R1bGUiKSYmKFdlPVdlLmRlZmF1bHQpLHRlPVdlLFdlKSkpfTtyZXR1cm4gTHIoe25hbWU6IkFzeW5jQ29tcG9uZW50V3JhcHBlciIsX19hc3luY0xvYWRlcjp1ZSxnZXQgX19hc3luY1Jlc29sdmVkKCl7cmV0dXJuIHRlfSxzZXR1cCgpe3ZhciBQZT15bjtpZih0ZSlyZXR1cm4oKT0+Qm4odGUsUGUpO3ZhciBXZT1wZT0+e0g9bnVsbCxQKHBlLFBlLDEzKX07aWYoayYmUGUuc3VzcGVuc2V8fHkuaXNJblNTUkNvbXBvbmVudFNldHVwKXJldHVybiB1ZSgpLnRoZW4ocGU9PigpPT5CbihwZSxQZSkpLmNhdGNoKHBlPT4oV2UocGUpLCgpPT5fP1p0KF8se2Vycm9yOnBlfSk6bnVsbCkpO3ZhciB1dD1FLnJlZighMSksUWU9RS5yZWYoKSxJZT1FLnJlZighIUEpO3JldHVybiBBJiZzZXRUaW1lb3V0KCgpPT57SWUudmFsdWU9ITF9LEEpLEMhPW51bGwmJnNldFRpbWVvdXQoKCk9PntpZighdXQudmFsdWUmJiFRZS52YWx1ZSl7dmFyIHBlPW5ldyBFcnJvcigiQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAiLmNvbmNhdChDLCJtcy4iKSk7V2UocGUpLFFlLnZhbHVlPXBlfX0sQyksdWUoKS50aGVuKCgpPT57dXQudmFsdWU9ITAsUGUucGFyZW50JiZkaShQZS5wYXJlbnQudm5vZGUpJiZfcihQZS5wYXJlbnQudXBkYXRlKX0pLmNhdGNoKHBlPT57V2UocGUpLFFlLnZhbHVlPXBlfSksKCk9PntpZih1dC52YWx1ZSYmdGUpcmV0dXJuIEJuKHRlLFBlKTtpZihRZS52YWx1ZSYmXylyZXR1cm4gWnQoXyx7ZXJyb3I6UWUudmFsdWV9KTtpZihkJiYhSWUudmFsdWUpcmV0dXJuIFp0KGQpfX19KX1mdW5jdGlvbiBCbihpLGwpe3ZhcntyZWY6ZCxwcm9wczpfLGNoaWxkcmVuOkEsY2U6Q309bC52bm9kZSxrPVp0KGksXyxBKTtyZXR1cm4gay5yZWY9ZCxrLmNlPUMsZGVsZXRlIGwudm5vZGUuY2Usa312YXIgZGk9aT0+aS50eXBlLl9faXNLZWVwQWxpdmUsZGE9e25hbWU6IktlZXBBbGl2ZSIsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxfPVluKCksQT1fLmN0eDtpZighQS5yZW5kZXJlcilyZXR1cm4oKT0+e3ZhciBfZT1kLmRlZmF1bHQmJmQuZGVmYXVsdCgpO3JldHVybiBfZSYmX2UubGVuZ3RoPT09MT9fZVswXTpfZX07dmFyIEM9bmV3IE1hcCxrPW5ldyBTZXQsTD1udWxsLEg9Xy5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6dGUsbTpnZSx1bTprZSxvOntjcmVhdGVFbGVtZW50OnVlfX19PUEsUGU9dWUoImRpdiIsbnVsbCk7QS5hY3RpdmF0ZT0oX2UsTGUsQWUsRXQsQXQpPT57dmFyIEplPV9lLmNvbXBvbmVudDtnZShfZSxMZSxBZSwwLEgpLHRlKEplLnZub2RlLF9lLExlLEFlLEplLEgsRXQsX2Uuc2xvdFNjb3BlSWRzLEF0KSx1cigoKT0+e0plLmlzRGVhY3RpdmF0ZWQ9ITEsSmUuYSYmaC5pbnZva2VBcnJheUZucyhKZS5hKTt2YXIgeHQ9X2UucHJvcHMmJl9lLnByb3BzLm9uVm5vZGVNb3VudGVkO3h0JiZxcih4dCxKZS5wYXJlbnQsX2UpfSxIKX0sQS5kZWFjdGl2YXRlPV9lPT57dmFyIExlPV9lLmNvbXBvbmVudDtnZShfZSxQZSxudWxsLDEsSCksdXIoKCk9PntMZS5kYSYmaC5pbnZva2VBcnJheUZucyhMZS5kYSk7dmFyIEFlPV9lLnByb3BzJiZfZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO0FlJiZxcihBZSxMZS5wYXJlbnQsX2UpLExlLmlzRGVhY3RpdmF0ZWQ9ITB9LEgpfTtmdW5jdGlvbiBXZShfZSl7Q2koX2UpLGtlKF9lLF8sSCwhMCl9ZnVuY3Rpb24gdXQoX2Upe0MuZm9yRWFjaCgoTGUsQWUpPT57dmFyIEV0PUVvKExlLnR5cGUpO0V0JiYoIV9lfHwhX2UoRXQpKSYmUWUoQWUpfSl9ZnVuY3Rpb24gUWUoX2Upe3ZhciBMZT1DLmdldChfZSk7IUx8fCFkdChMZSxMKT9XZShMZSk6TCYmQ2koTCksQy5kZWxldGUoX2UpLGsuZGVsZXRlKF9lKX1CcigoKT0+W2kuaW5jbHVkZSxpLmV4Y2x1ZGVdLF9lPT57dmFyW0xlLEFlXT1fZTtMZSYmdXQoRXQ9PkxpKExlLEV0KSksQWUmJnV0KEV0PT4hTGkoQWUsRXQpKX0se2ZsdXNoOiJwb3N0IixkZWVwOiEwfSk7dmFyIEllPW51bGwscGU9KCk9PntJZSE9bnVsbCYmQy5zZXQoSWUsRmkoXy5zdWJUcmVlKSl9O3JldHVybiBjcihwZSksZXIocGUpLGRyKCgpPT57Qy5mb3JFYWNoKF9lPT57dmFye3N1YlRyZWU6TGUsc3VzcGVuc2U6QWV9PV8sRXQ9RmkoTGUpO2lmKF9lLnR5cGU9PT1FdC50eXBlJiZfZS5rZXk9PT1FdC5rZXkpe0NpKEV0KTt2YXIgQXQ9RXQuY29tcG9uZW50LmRhO0F0JiZ1cihBdCxBZSk7cmV0dXJufVdlKF9lKX0pfSksKCk9PntpZihJZT1udWxsLCFkLmRlZmF1bHQpcmV0dXJuIG51bGw7dmFyIF9lPWQuZGVmYXVsdCgpLExlPV9lWzBdO2lmKF9lLmxlbmd0aD4xKXJldHVybiBMPW51bGwsX2U7aWYoIXF0KExlKXx8IShMZS5zaGFwZUZsYWcmNCkmJiEoTGUuc2hhcGVGbGFnJjEyOCkpcmV0dXJuIEw9bnVsbCxMZTt2YXIgQWU9RmkoTGUpLEV0PUFlLnR5cGUsQXQ9RW8oRHIoQWUpP0FlLnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTpFdCkse2luY2x1ZGU6SmUsZXhjbHVkZTp4dCxtYXg6TX09aTtpZihKZSYmKCFBdHx8IUxpKEplLEF0KSl8fHh0JiZBdCYmTGkoeHQsQXQpKXJldHVybiBMPUFlLExlO3ZhciBqPUFlLmtleT09bnVsbD9FdDpBZS5rZXksYWU9Qy5nZXQoaik7cmV0dXJuIEFlLmVsJiYoQWU9aWkoQWUpLExlLnNoYXBlRmxhZyYxMjgmJihMZS5zc0NvbnRlbnQ9QWUpKSxJZT1qLGFlPyhBZS5lbD1hZS5lbCxBZS5jb21wb25lbnQ9YWUuY29tcG9uZW50LEFlLnRyYW5zaXRpb24mJmpyKEFlLEFlLnRyYW5zaXRpb24pLEFlLnNoYXBlRmxhZ3w9NTEyLGsuZGVsZXRlKGopLGsuYWRkKGopKTooay5hZGQoaiksTSYmay5zaXplPnBhcnNlSW50KE0sMTApJiZRZShrLnZhbHVlcygpLm5leHQoKS52YWx1ZSkpLEFlLnNoYXBlRmxhZ3w9MjU2LEw9QWUscG8oTGUudHlwZSk/TGU6QWV9fX0sTWk9ZGE7ZnVuY3Rpb24gTGkoaSxsKXtyZXR1cm4gaC5pc0FycmF5KGkpP2kuc29tZShkPT5MaShkLGwpKTpoLmlzU3RyaW5nKGkpP2kuc3BsaXQoIiwiKS5pbmNsdWRlcyhsKTpoLmlzUmVnRXhwKGkpP2kudGVzdChsKTohMX1mdW5jdGlvbiBJbyhpLGwpe0RpKGksImEiLGwpfWZ1bmN0aW9uIEFuKGksbCl7RGkoaSwiZGEiLGwpfWZ1bmN0aW9uIERpKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnluLF89aS5fX3dkY3x8KGkuX193ZGM9KCk9Pntmb3IodmFyIEM9ZDtDOyl7aWYoQy5pc0RlYWN0aXZhdGVkKXJldHVybjtDPUMucGFyZW50fXJldHVybiBpKCl9KTtpZihJcihsLF8sZCksZClmb3IodmFyIEE9ZC5wYXJlbnQ7QSYmQS5wYXJlbnQ7KWRpKEEucGFyZW50LnZub2RlKSYmWWkoXyxsLGQsQSksQT1BLnBhcmVudH1mdW5jdGlvbiBZaShpLGwsZCxfKXt2YXIgQT1JcihsLGksXywhMCk7bW8oKCk9PntoLnJlbW92ZShfW2xdLEEpfSxkKX1mdW5jdGlvbiBDaShpKXtpLnNoYXBlRmxhZyY9fjI1NixpLnNoYXBlRmxhZyY9fjUxMn1mdW5jdGlvbiBGaShpKXtyZXR1cm4gaS5zaGFwZUZsYWcmMTI4P2kuc3NDb250ZW50Oml9ZnVuY3Rpb24gSXIoaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06eW4sXz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7aWYoZCl7aWYoUi5pc1Jvb3RIb29rKGkpJiZkIT09ZC5yb290JiYoZD1kLnJvb3QsUi5pc1Jvb3RJbW1lZGlhdGVIb29rKGkpKSl7dmFyIEE9ZC5wcm94eTtUdChsLmJpbmQoQSksZCxpLFIuT05fTE9BRD09PWk/W0EuJHBhZ2Uub3B0aW9uc106W10pfXZhcntfX3BhZ2VfY29udGFpbmVyX186Q309ZC5yb290LnZub2RlO0MmJkMub25JbmplY3RIb29rKGkpO3ZhciBrPWRbaV18fChkW2ldPVtdKSxMPWwuX193ZWh8fChsLl9fd2VoPWZ1bmN0aW9uKCl7aWYoIWQuaXNVbm1vdW50ZWQpe0UucGF1c2VUcmFja2luZygpLFpuKGQpO2Zvcih2YXIgSD1hcmd1bWVudHMubGVuZ3RoLHRlPW5ldyBBcnJheShIKSxnZT0wO2dlPEg7Z2UrKyl0ZVtnZV09YXJndW1lbnRzW2dlXTt2YXIga2U9VHQobCxkLGksdGUpO3JldHVybiBUaSgpLEUucmVzZXRUcmFja2luZygpLGtlfX0pO3JldHVybiBfP2sudW5zaGlmdChMKTprLnB1c2goTCksTH19dmFyIHJpPWk9PmZ1bmN0aW9uKGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp5bjtyZXR1cm4oIXkuaXNJblNTUkNvbXBvbmVudFNldHVwfHxpPT09InNwIikmJklyKGksZnVuY3Rpb24oKXtyZXR1cm4gbCguLi5hcmd1bWVudHMpfSxkKX0scnI9cmkoImJtIiksY3I9cmkoIm0iKSxxbj1yaSgiYnUiKSxlcj1yaSgidSIpLGRyPXJpKCJidW0iKSxtbz1yaSgidW0iKSxfbz1yaSgic3AiKSxxaT1yaSgicnRnIiksSmk9cmkoInJ0YyIpO2Z1bmN0aW9uIFhvKGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp5bjtJcigiZWMiLGksbCl9ZnVuY3Rpb24gV3IoaSxsKXt2YXIgZD1fbjtpZihkPT09bnVsbClyZXR1cm4gaTtmb3IodmFyIF89VWkoZCl8fGQucHJveHksQT1pLmRpcnN8fChpLmRpcnM9W10pLEM9MDtDPGwubGVuZ3RoO0MrKyl7dmFyW2ssTCxILHRlPWguRU1QVFlfT0JKXT1sW0NdO2smJihoLmlzRnVuY3Rpb24oaykmJihrPXttb3VudGVkOmssdXBkYXRlZDprfSksay5kZWVwJiZNcihMKSxBLnB1c2goe2RpcjprLGluc3RhbmNlOl8sdmFsdWU6TCxvbGRWYWx1ZTp2b2lkIDAsYXJnOkgsbW9kaWZpZXJzOnRlfSkpfXJldHVybiBpfWZ1bmN0aW9uIHlyKGksbCxkLF8pe2Zvcih2YXIgQT1pLmRpcnMsQz1sJiZsLmRpcnMsaz0wO2s8QS5sZW5ndGg7aysrKXt2YXIgTD1BW2tdO0MmJihMLm9sZFZhbHVlPUNba10udmFsdWUpO3ZhciBIPUwuZGlyW19dO0gmJihFLnBhdXNlVHJhY2tpbmcoKSxUdChILGQsOCxbaS5lbCxMLGksbF0pLEUucmVzZXRUcmFja2luZygpKX19dmFyIE5vPSJjb21wb25lbnRzIixCPSJkaXJlY3RpdmVzIjtmdW5jdGlvbiBZKGksbCl7cmV0dXJuIGN0KE5vLGksITAsbCl8fGl9dmFyIHJlPVN5bWJvbCgpO2Z1bmN0aW9uIHhlKGkpe3JldHVybiBoLmlzU3RyaW5nKGkpP2N0KE5vLGksITEpfHxpOml8fHJlfWZ1bmN0aW9uIFplKGkpe3JldHVybiBjdChCLGkpfWZ1bmN0aW9uIGN0KGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLF89X258fHluO2lmKF8pe3ZhciBBPV8udHlwZTtpZihpPT09Tm8pe3ZhciBDPUVvKEEsITEpO2lmKEMmJihDPT09bHx8Qz09PWguY2FtZWxpemUobCl8fEM9PT1oLmNhcGl0YWxpemUoaC5jYW1lbGl6ZShsKSkpKXJldHVybiBBfXZhciBrPVl0KF9baV18fEFbaV0sbCl8fFl0KF8uYXBwQ29udGV4dFtpXSxsKTtyZXR1cm4hayYmZD9BOmt9fWZ1bmN0aW9uIFl0KGksbCl7cmV0dXJuIGkmJihpW2xdfHxpW2guY2FtZWxpemUobCldfHxpW2guY2FwaXRhbGl6ZShoLmNhbWVsaXplKGwpKV0pfWZ1bmN0aW9uIFF0KGksbCxkLF8pe3ZhciBBLEM9ZCYmZFtfXTtpZihoLmlzQXJyYXkoaSl8fGguaXNTdHJpbmcoaSkpe0E9bmV3IEFycmF5KGkubGVuZ3RoKTtmb3IodmFyIGs9MCxMPWkubGVuZ3RoO2s8TDtrKyspQVtrXT1sKGlba10sayx2b2lkIDAsQyYmQ1trXSl9ZWxzZSBpZih0eXBlb2YgaT09Im51bWJlciIpe0E9bmV3IEFycmF5KGkpO2Zvcih2YXIgSD0wO0g8aTtIKyspQVtIXT1sKEgrMSxILHZvaWQgMCxDJiZDW0hdKX1lbHNlIGlmKGguaXNPYmplY3QoaSkpaWYoaVtTeW1ib2wuaXRlcmF0b3JdKUE9QXJyYXkuZnJvbShpLChQZSxXZSk9PmwoUGUsV2Usdm9pZCAwLEMmJkNbV2VdKSk7ZWxzZXt2YXIgdGU9T2JqZWN0LmtleXMoaSk7QT1uZXcgQXJyYXkodGUubGVuZ3RoKTtmb3IodmFyIGdlPTAsa2U9dGUubGVuZ3RoO2dlPGtlO2dlKyspe3ZhciB1ZT10ZVtnZV07QVtnZV09bChpW3VlXSx1ZSxnZSxDJiZDW2dlXSl9fWVsc2UgQT1bXTtyZXR1cm4gZCYmKGRbX109QSksQX1mdW5jdGlvbiBWaShpLGwpe2Zvcih2YXIgZD1mdW5jdGlvbihBKXt2YXIgQz1sW0FdO2lmKGguaXNBcnJheShDKSlmb3IodmFyIGs9MDtrPEMubGVuZ3RoO2srKylpW0Nba10ubmFtZV09Q1trXS5mbjtlbHNlIEMmJihpW0MubmFtZV09Qy5rZXk/ZnVuY3Rpb24oKXt2YXIgTD1DLmZuKC4uLmFyZ3VtZW50cyk7cmV0dXJuIEwmJihMLmtleT1DLmtleSksTH06Qy5mbil9LF89MDtfPGwubGVuZ3RoO18rKylkKF8pO3JldHVybiBpfWZ1bmN0aW9uIEdyKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LF89YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsQT1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtpZihfbi5pc0NFfHxfbi5wYXJlbnQmJkRyKF9uLnBhcmVudCkmJl9uLnBhcmVudC5pc0NFKXJldHVybiBsIT09ImRlZmF1bHQiJiYoZC5uYW1lPWwpLFp0KCJzbG90IixkLF8mJl8oKSk7dmFyIEM9aVtsXTtDJiZDLl9jJiYoQy5fZD0hMSksbHQoKTt2YXIgaz1DJiZndChDKGQpKSxMPXZuKGVlLHtrZXk6ZC5rZXl8fGsmJmsua2V5fHwiXyIuY29uY2F0KGwpfSxrfHwoXz9fKCk6W10pLGsmJmkuXz09PTE/NjQ6LTIpO3JldHVybiFBJiZMLnNjb3BlSWQmJihMLnNsb3RTY29wZUlkcz1bTC5zY29wZUlkKyItcyJdKSxDJiZDLl9jJiYoQy5fZD0hMCksTH1mdW5jdGlvbiBndChpKXtyZXR1cm4gaS5zb21lKGw9PnF0KGwpPyEobC50eXBlPT09aGV8fGwudHlwZT09PWVlJiYhZ3QobC5jaGlsZHJlbikpOiEwKT9pOm51bGx9ZnVuY3Rpb24gUnQoaSxsKXt2YXIgZD17fTtmb3IodmFyIF8gaW4gaSlkW2wmJi9bQS1aXS8udGVzdChfKT8ib246Ii5jb25jYXQoXyk6aC50b0hhbmRsZXJLZXkoXyldPWlbX107cmV0dXJuIGR9dmFyIFlyPWk9Pmk/dXMoaSk/VWkoaSl8fGkucHJveHk6WXIoaS5wYXJlbnQpOm51bGwsYW89aC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDppPT5pLCRlbDppPT5pLnZub2RlLmVsLCRkYXRhOmk9PmkuZGF0YSwkcHJvcHM6aT0+aS5wcm9wcywkYXR0cnM6aT0+aS5hdHRycywkc2xvdHM6aT0+aS5zbG90cywkcmVmczppPT5pLnJlZnMsJHBhcmVudDppPT5ZcihpLnBhcmVudCksJHJvb3Q6aT0+WXIoaS5yb290KSwkZW1pdDppPT5pLmVtaXQsJG9wdGlvbnM6aT0+U3IoaSksJGZvcmNlVXBkYXRlOmk9PmkuZnx8KGkuZj0oKT0+X3IoaS51cGRhdGUpKSwkbmV4dFRpY2s6aT0+aS5ufHwoaS5uPW1yLmJpbmQoaS5wcm94eSkpLCR3YXRjaDppPT5Qby5iaW5kKGkpfSksb2U9KGksbCk9PmkhPT1oLkVNUFRZX09CSiYmIWkuX19pc1NjcmlwdFNldHVwJiZoLmhhc093bihpLGwpLFg9e2dldChpLGwpe3ZhcntfOmR9PWkse2N0eDpfLHNldHVwU3RhdGU6QSxkYXRhOkMscHJvcHM6ayxhY2Nlc3NDYWNoZTpMLHR5cGU6SCxhcHBDb250ZXh0OnRlfT1kLGdlO2lmKGxbMF0hPT0iJCIpe3ZhciBrZT1MW2xdO2lmKGtlIT09dm9pZCAwKXN3aXRjaChrZSl7Y2FzZSAxOnJldHVybiBBW2xdO2Nhc2UgMjpyZXR1cm4gQ1tsXTtjYXNlIDQ6cmV0dXJuIF9bbF07Y2FzZSAzOnJldHVybiBrW2xdfWVsc2V7aWYob2UoQSxsKSlyZXR1cm4gTFtsXT0xLEFbbF07aWYoQyE9PWguRU1QVFlfT0JKJiZoLmhhc093bihDLGwpKXJldHVybiBMW2xdPTIsQ1tsXTtpZigoZ2U9ZC5wcm9wc09wdGlvbnNbMF0pJiZoLmhhc093bihnZSxsKSlyZXR1cm4gTFtsXT0zLGtbbF07aWYoXyE9PWguRU1QVFlfT0JKJiZoLmhhc093bihfLGwpKXJldHVybiBMW2xdPTQsX1tsXTtCZSYmKExbbF09MCl9fXZhciB1ZT1hb1tsXSxQZSxXZTtpZih1ZSlyZXR1cm4gbD09PSIkYXR0cnMiJiZFLnRyYWNrKGQsImdldCIsbCksdWUoZCk7aWYoKFBlPUguX19jc3NNb2R1bGVzKSYmKFBlPVBlW2xdKSlyZXR1cm4gUGU7aWYoXyE9PWguRU1QVFlfT0JKJiZoLmhhc093bihfLGwpKXJldHVybiBMW2xdPTQsX1tsXTtpZihXZT10ZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcyxoLmhhc093bihXZSxsKSlyZXR1cm4gV2VbbF19LHNldChpLGwsZCl7dmFye199PWkse2RhdGE6QSxzZXR1cFN0YXRlOkMsY3R4Omt9PV87cmV0dXJuIG9lKEMsbCk/KENbbF09ZCwhMCk6QSE9PWguRU1QVFlfT0JKJiZoLmhhc093bihBLGwpPyhBW2xdPWQsITApOmguaGFzT3duKF8ucHJvcHMsbCl8fGxbMF09PT0iJCImJmwuc2xpY2UoMSlpbiBfPyExOihrW2xdPWQsITApfSxoYXMoaSxsKXt2YXJ7Xzp7ZGF0YTpkLHNldHVwU3RhdGU6XyxhY2Nlc3NDYWNoZTpBLGN0eDpDLGFwcENvbnRleHQ6ayxwcm9wc09wdGlvbnM6TH19PWksSDtyZXR1cm4hIUFbbF18fGQhPT1oLkVNUFRZX09CSiYmaC5oYXNPd24oZCxsKXx8b2UoXyxsKXx8KEg9TFswXSkmJmguaGFzT3duKEgsbCl8fGguaGFzT3duKEMsbCl8fGguaGFzT3duKGFvLGwpfHxoLmhhc093bihrLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGwpfSxkZWZpbmVQcm9wZXJ0eShpLGwsZCl7cmV0dXJuIGQuZ2V0IT1udWxsP2kuXy5hY2Nlc3NDYWNoZVtsXT0wOmguaGFzT3duKGQsInZhbHVlIikmJnRoaXMuc2V0KGksbCxkLnZhbHVlLG51bGwpLFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoaSxsLGQpfX0sc2U9aC5leHRlbmQoe30sWCx7Z2V0KGksbCl7aWYobCE9PVN5bWJvbC51bnNjb3BhYmxlcylyZXR1cm4gWC5nZXQoaSxsLGkpfSxoYXMoaSxsKXt2YXIgZD1sWzBdIT09Il8iJiYhaC5pc0dsb2JhbGx5V2hpdGVsaXN0ZWQobCk7cmV0dXJuIGR9fSksQmU9ITA7ZnVuY3Rpb24gbXQoaSl7dmFyIGw9U3IoaSksZD1pLnByb3h5LF89aS5jdHg7QmU9ITEsbC5iZWZvcmVDcmVhdGUmJkpuKGwuYmVmb3JlQ3JlYXRlLGksImJjIik7dmFye2RhdGE6QSxjb21wdXRlZDpDLG1ldGhvZHM6ayx3YXRjaDpMLHByb3ZpZGU6SCxpbmplY3Q6dGUsY3JlYXRlZDpnZSxiZWZvcmVNb3VudDprZSxtb3VudGVkOnVlLGJlZm9yZVVwZGF0ZTpQZSx1cGRhdGVkOldlLGFjdGl2YXRlZDp1dCxkZWFjdGl2YXRlZDpRZSxiZWZvcmVEZXN0cm95OkllLGJlZm9yZVVubW91bnQ6cGUsZGVzdHJveWVkOl9lLHVubW91bnRlZDpMZSxyZW5kZXI6QWUscmVuZGVyVHJhY2tlZDpFdCxyZW5kZXJUcmlnZ2VyZWQ6QXQsZXJyb3JDYXB0dXJlZDpKZSxzZXJ2ZXJQcmVmZXRjaDp4dCxleHBvc2U6TSxpbmhlcml0QXR0cnM6aixjb21wb25lbnRzOmFlLGRpcmVjdGl2ZXM6bmUsZmlsdGVyczppZX09bCxWZT1udWxsO2lmKHRlJiZwbih0ZSxfLFZlLGkuYXBwQ29udGV4dC5jb25maWcudW53cmFwSW5qZWN0ZWRSZWYpLGspZm9yKHZhciBydCBpbiBrKXt2YXIgWWU9a1tydF07aC5pc0Z1bmN0aW9uKFllKSYmKF9bcnRdPVllLmJpbmQoZCkpfWlmKEEpe3ZhciBLZT1BLmNhbGwoZCxkKTtoLmlzT2JqZWN0KEtlKSYmKGkuZGF0YT1FLnJlYWN0aXZlKEtlKSl9aWYoQmU9ITAsQyl7dmFyIFVlPWZ1bmN0aW9uKGJuKXt2YXIgU249Q1tibl0sZ3I9aC5pc0Z1bmN0aW9uKFNuKT9Tbi5iaW5kKGQsZCk6aC5pc0Z1bmN0aW9uKFNuLmdldCk/U24uZ2V0LmJpbmQoZCxkKTpoLk5PT1AsYWk9IWguaXNGdW5jdGlvbihTbikmJmguaXNGdW5jdGlvbihTbi5zZXQpP1NuLnNldC5iaW5kKGQpOmguTk9PUCxlbj1kcyh7Z2V0OmdyLHNldDphaX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLGJuLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmVuLnZhbHVlLHNldDpjbj0+ZW4udmFsdWU9Y259KX07Zm9yKHZhciBIdCBpbiBDKVVlKEh0KX1pZihMKWZvcih2YXIgdnQgaW4gTClVbihMW3Z0XSxfLGQsdnQpO2lmKEgpe3ZhciBCdD1oLmlzRnVuY3Rpb24oSCk/SC5jYWxsKGQpOkg7UmVmbGVjdC5vd25LZXlzKEJ0KS5mb3JFYWNoKGJuPT57bHIoYm4sQnRbYm5dKX0pfWdlJiZKbihnZSxpLCJjIik7ZnVuY3Rpb24gTXQoYm4sU24pe2guaXNBcnJheShTbik/U24uZm9yRWFjaChncj0+Ym4oZ3IuYmluZChkKSkpOlNuJiZibihTbi5iaW5kKGQpKX1pZihNdChycixrZSksTXQoY3IsdWUpLE10KHFuLFBlKSxNdChlcixXZSksTXQoSW8sdXQpLE10KEFuLFFlKSxNdChYbyxKZSksTXQoSmksRXQpLE10KHFpLEF0KSxNdChkcixwZSksTXQobW8sTGUpLE10KF9vLHh0KSxoLmlzQXJyYXkoTSkpaWYoTS5sZW5ndGgpe3ZhciBEbj1pLmV4cG9zZWR8fChpLmV4cG9zZWQ9e30pO00uZm9yRWFjaChibj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShEbixibix7Z2V0OigpPT5kW2JuXSxzZXQ6U249PmRbYm5dPVNufSl9KX1lbHNlIGkuZXhwb3NlZHx8KGkuZXhwb3NlZD17fSk7QWUmJmkucmVuZGVyPT09aC5OT09QJiYoaS5yZW5kZXI9QWUpLGohPW51bGwmJihpLmluaGVyaXRBdHRycz1qKSxhZSYmKGkuY29tcG9uZW50cz1hZSksbmUmJihpLmRpcmVjdGl2ZXM9bmUpO3ZhciBNbj1pLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJGFwcGx5T3B0aW9ucztNbiYmTW4obCxpLGQpfWZ1bmN0aW9uIHBuKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2guaXNBcnJheShpKSYmKGk9JG4oaSkpO3ZhciBfPWZ1bmN0aW9uKEMpe3ZhciBrPWlbQ10sTD12b2lkIDA7aC5pc09iamVjdChrKT8iZGVmYXVsdCJpbiBrP0w9UW4oay5mcm9tfHxDLGsuZGVmYXVsdCwhMCk6TD1RbihrLmZyb218fEMpOkw9UW4oayksRS5pc1JlZihMKSYmZD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxDLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkwudmFsdWUsc2V0Okg9PkwudmFsdWU9SH0pOmxbQ109TH07Zm9yKHZhciBBIGluIGkpXyhBKX1mdW5jdGlvbiBKbihpLGwsZCl7VHQoaC5pc0FycmF5KGkpP2kubWFwKF89Pl8uYmluZChsLnByb3h5KSk6aS5iaW5kKGwucHJveHkpLGwsZCl9ZnVuY3Rpb24gVW4oaSxsLGQsXyl7dmFyIEE9Xy5pbmNsdWRlcygiLiIpP0hyKGQsXyk6KCk9PmRbX107aWYoaC5pc1N0cmluZyhpKSl7dmFyIEM9bFtpXTtoLmlzRnVuY3Rpb24oQykmJkJyKEEsQyl9ZWxzZSBpZihoLmlzRnVuY3Rpb24oaSkpQnIoQSxpLmJpbmQoZCkpO2Vsc2UgaWYoaC5pc09iamVjdChpKSlpZihoLmlzQXJyYXkoaSkpaS5mb3JFYWNoKEw9PlVuKEwsbCxkLF8pKTtlbHNle3ZhciBrPWguaXNGdW5jdGlvbihpLmhhbmRsZXIpP2kuaGFuZGxlci5iaW5kKGQpOmxbaS5oYW5kbGVyXTtoLmlzRnVuY3Rpb24oaykmJkJyKEEsayxpKX19ZnVuY3Rpb24gU3IoaSl7dmFyIGw9aS50eXBlLHttaXhpbnM6ZCxleHRlbmRzOl99PWwse21peGluczpBLG9wdGlvbnNDYWNoZTpDLGNvbmZpZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOmt9fT1pLmFwcENvbnRleHQsTD1DLmdldChsKSxIO3JldHVybiBMP0g9TDohQS5sZW5ndGgmJiFkJiYhXz9IPWw6KEg9e30sQS5sZW5ndGgmJkEuZm9yRWFjaCh0ZT0+RnIoSCx0ZSxrLCEwKSksRnIoSCxsLGspKSxoLmlzT2JqZWN0KGwpJiZDLnNldChsLEgpLEh9ZnVuY3Rpb24gRnIoaSxsLGQpe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSx7bWl4aW5zOkEsZXh0ZW5kczpDfT1sO0MmJkZyKGksQyxkLCEwKSxBJiZBLmZvckVhY2goSD0+RnIoaSxILGQsITApKTtmb3IodmFyIGsgaW4gbClpZighKF8mJms9PT0iZXhwb3NlIikpe3ZhciBMPWJvW2tdfHxkJiZkW2tdO2lba109TD9MKGlba10sbFtrXSk6bFtrXX1yZXR1cm4gaX12YXIgYm89e2RhdGE6a28scHJvcHM6SG4sZW1pdHM6SG4sbWV0aG9kczpIbixjb21wdXRlZDpIbixiZWZvcmVDcmVhdGU6S24sY3JlYXRlZDpLbixiZWZvcmVNb3VudDpLbixtb3VudGVkOktuLGJlZm9yZVVwZGF0ZTpLbix1cGRhdGVkOktuLGJlZm9yZURlc3Ryb3k6S24sYmVmb3JlVW5tb3VudDpLbixkZXN0cm95ZWQ6S24sdW5tb3VudGVkOktuLGFjdGl2YXRlZDpLbixkZWFjdGl2YXRlZDpLbixlcnJvckNhcHR1cmVkOktuLHNlcnZlclByZWZldGNoOktuLGNvbXBvbmVudHM6SG4sZGlyZWN0aXZlczpIbix3YXRjaDpBaSxwcm92aWRlOmtvLGluamVjdDpSb307ZnVuY3Rpb24ga28oaSxsKXtyZXR1cm4gbD9pP2Z1bmN0aW9uKCl7cmV0dXJuIGguZXh0ZW5kKGguaXNGdW5jdGlvbihpKT9pLmNhbGwodGhpcyx0aGlzKTppLGguaXNGdW5jdGlvbihsKT9sLmNhbGwodGhpcyx0aGlzKTpsKX06bDppfWZ1bmN0aW9uIFJvKGksbCl7cmV0dXJuIEhuKCRuKGkpLCRuKGwpKX1mdW5jdGlvbiAkbihpKXtpZihoLmlzQXJyYXkoaSkpe2Zvcih2YXIgbD17fSxkPTA7ZDxpLmxlbmd0aDtkKyspbFtpW2RdXT1pW2RdO3JldHVybiBsfXJldHVybiBpfWZ1bmN0aW9uIEtuKGksbCl7cmV0dXJuIGk/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGksbCkpXTpsfWZ1bmN0aW9uIEhuKGksbCl7cmV0dXJuIGk/aC5leHRlbmQoaC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxpKSxsKTpsfWZ1bmN0aW9uIEFpKGksbCl7aWYoIWkpcmV0dXJuIGw7aWYoIWwpcmV0dXJuIGk7dmFyIGQ9aC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxpKTtmb3IodmFyIF8gaW4gbClkW19dPUtuKGlbX10sbFtfXSk7cmV0dXJuIGR9ZnVuY3Rpb24gaXMoaSxsLGQpe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxBPXt9LEM9e307aC5kZWYoQyxMbiwxKSxpLnByb3BzRGVmYXVsdHM9T2JqZWN0LmNyZWF0ZShudWxsKSx3cihpLGwsQSxDKTtmb3IodmFyIGsgaW4gaS5wcm9wc09wdGlvbnNbMF0payBpbiBBfHwoQVtrXT12b2lkIDApO2Q/aS5wcm9wcz1fP0E6RS5zaGFsbG93UmVhY3RpdmUoQSk6aS50eXBlLnByb3BzP2kucHJvcHM9QTppLnByb3BzPUMsaS5hdHRycz1DfWZ1bmN0aW9uIGhhKGksbCxkLF8pe3Zhcntwcm9wczpBLGF0dHJzOkMsdm5vZGU6e3BhdGNoRmxhZzprfX09aSxMPUUudG9SYXcoQSksW0hdPWkucHJvcHNPcHRpb25zLHRlPSExO2lmKChffHxrPjApJiYhKGsmMTYpKXtpZihrJjgpZm9yKHZhciBnZT1pLnZub2RlLmR5bmFtaWNQcm9wcyxrZT0wO2tlPGdlLmxlbmd0aDtrZSsrKXt2YXIgdWU9Z2Vba2VdO2lmKCFQbihpLmVtaXRzT3B0aW9ucyx1ZSkpe3ZhciBQZT1sW3VlXTtpZihIKWlmKGguaGFzT3duKEMsdWUpKVBlIT09Q1t1ZV0mJihDW3VlXT1QZSx0ZT0hMCk7ZWxzZXt2YXIgV2U9aC5jYW1lbGl6ZSh1ZSk7QVtXZV09VGEoSCxMLFdlLFBlLGksITEpfWVsc2UgUGUhPT1DW3VlXSYmKENbdWVdPVBlLHRlPSEwKX19fWVsc2V7d3IoaSxsLEEsQykmJih0ZT0hMCk7dmFyIHV0O2Zvcih2YXIgUWUgaW4gTCkoIWx8fCFoLmhhc093bihsLFFlKSYmKCh1dD1oLmh5cGhlbmF0ZShRZSkpPT09UWV8fCFoLmhhc093bihsLHV0KSkpJiYoSD9kJiYoZFtRZV0hPT12b2lkIDB8fGRbdXRdIT09dm9pZCAwKSYmKEFbUWVdPVRhKEgsTCxRZSx2b2lkIDAsaSwhMCkpOmRlbGV0ZSBBW1FlXSk7aWYoQyE9PUwpZm9yKHZhciBJZSBpbiBDKSghbHx8IWguaGFzT3duKGwsSWUpJiYhMCkmJihkZWxldGUgQ1tJZV0sdGU9ITApfXRlJiZFLnRyaWdnZXIoaSwic2V0IiwiJGF0dHJzIil9ZnVuY3Rpb24gd3IoaSxsLGQsXyl7dmFyW0EsQ109aS5wcm9wc09wdGlvbnMsaz0hMSxMO2lmKGwpe2Zvcih2YXIgSCBpbiBsKWlmKCFoLmlzUmVzZXJ2ZWRQcm9wKEgpKXt2YXIgdGU9bFtIXSxnZT12b2lkIDA7QSYmaC5oYXNPd24oQSxnZT1oLmNhbWVsaXplKEgpKT8hQ3x8IUMuaW5jbHVkZXMoZ2UpP2RbZ2VdPXRlOihMfHwoTD17fSkpW2dlXT10ZTpQbihpLmVtaXRzT3B0aW9ucyxIKXx8KCEoSCBpbiBfKXx8dGUhPT1fW0hdKSYmKF9bSF09dGUsaz0hMCl9fWlmKEMpZm9yKHZhciBrZT1FLnRvUmF3KGQpLHVlPUx8fGguRU1QVFlfT0JKLFBlPTA7UGU8Qy5sZW5ndGg7UGUrKyl7dmFyIFdlPUNbUGVdO2RbV2VdPVRhKEEsa2UsV2UsdWVbV2VdLGksIWguaGFzT3duKHVlLFdlKSl9cmV0dXJuIGt9ZnVuY3Rpb24gVGEoaSxsLGQsXyxBLEMpe3ZhciBrPWlbZF07aWYoayE9bnVsbCl7dmFyIEw9aC5oYXNPd24oaywiZGVmYXVsdCIpO2lmKEwmJl89PT12b2lkIDApe3ZhciBIPWsuZGVmYXVsdDtpZihrLnR5cGUhPT1GdW5jdGlvbiYmaC5pc0Z1bmN0aW9uKEgpKXt2YXJ7cHJvcHNEZWZhdWx0czp0ZX09QTtkIGluIHRlP189dGVbZF06KFpuKEEpLF89dGVbZF09SC5jYWxsKG51bGwsbCksVGkoKSl9ZWxzZSBfPUh9a1swXSYmKEMmJiFMP189ITE6a1sxXSYmKF89PT0iInx8Xz09PWguaHlwaGVuYXRlKGQpKSYmKF89ITApKX1yZXR1cm4gX31mdW5jdGlvbiBEYShpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxfPWwucHJvcHNDYWNoZSxBPV8uZ2V0KGkpO2lmKEEpcmV0dXJuIEE7dmFyIEM9aS5wcm9wcyxrPXt9LEw9W10sSD0hMTtpZighaC5pc0Z1bmN0aW9uKGkpKXt2YXIgdGU9X2U9PntIPSEwO3ZhcltMZSxBZV09RGEoX2UsbCwhMCk7aC5leHRlbmQoayxMZSksQWUmJkwucHVzaCguLi5BZSl9OyFkJiZsLm1peGlucy5sZW5ndGgmJmwubWl4aW5zLmZvckVhY2godGUpLGkuZXh0ZW5kcyYmdGUoaS5leHRlbmRzKSxpLm1peGlucyYmaS5taXhpbnMuZm9yRWFjaCh0ZSl9aWYoIUMmJiFIKXJldHVybiBoLmlzT2JqZWN0KGkpJiZfLnNldChpLGguRU1QVFlfQVJSKSxoLkVNUFRZX0FSUjtpZihoLmlzQXJyYXkoQykpZm9yKHZhciBnZT0wO2dlPEMubGVuZ3RoO2dlKyspe3ZhciBrZT1oLmNhbWVsaXplKENbZ2VdKTtGYShrZSkmJihrW2tlXT1oLkVNUFRZX09CSil9ZWxzZSBpZihDKWZvcih2YXIgdWUgaW4gQyl7dmFyIFBlPWguY2FtZWxpemUodWUpO2lmKEZhKFBlKSl7dmFyIFdlPUNbdWVdLHV0PWtbUGVdPWguaXNBcnJheShXZSl8fGguaXNGdW5jdGlvbihXZSk/e3R5cGU6V2V9Ok9iamVjdC5hc3NpZ24oe30sV2UpO2lmKHV0KXt2YXIgUWU9Z2EoQm9vbGVhbix1dC50eXBlKSxJZT1nYShTdHJpbmcsdXQudHlwZSk7dXRbMF09UWU+LTEsdXRbMV09SWU8MHx8UWU8SWUsKFFlPi0xfHxoLmhhc093bih1dCwiZGVmYXVsdCIpKSYmTC5wdXNoKFBlKX19fXZhciBwZT1bayxMXTtyZXR1cm4gaC5pc09iamVjdChpKSYmXy5zZXQoaSxwZSkscGV9ZnVuY3Rpb24gRmEoaSl7cmV0dXJuIGlbMF0hPT0iJCJ9ZnVuY3Rpb24gVmEoaSl7dmFyIGw9aSYmaS50b1N0cmluZygpLm1hdGNoKC9eXHMqKGZ1bmN0aW9ufGNsYXNzKSAoXHcrKS8pO3JldHVybiBsP2xbMl06aT09PW51bGw/Im51bGwiOiIifWZ1bmN0aW9uIFVhKGksbCl7cmV0dXJuIFZhKGkpPT09VmEobCl9ZnVuY3Rpb24gZ2EoaSxsKXtyZXR1cm4gaC5pc0FycmF5KGwpP2wuZmluZEluZGV4KGQ9PlVhKGQsaSkpOmguaXNGdW5jdGlvbihsKSYmVWEobCxpKT8wOi0xfXZhciBQYT1pPT5pWzBdPT09Il8ifHxpPT09IiRzdGFibGUiLGpuPWk9PmguaXNBcnJheShpKT9pLm1hcChXbik6W1duKGkpXSx4bz0oaSxsLGQpPT57aWYobC5fbilyZXR1cm4gbDt2YXIgXz1KbyhmdW5jdGlvbigpe3JldHVybiBqbihsKC4uLmFyZ3VtZW50cykpfSxkKTtyZXR1cm4gXy5fYz0hMSxffSxRbz0oaSxsLGQpPT57dmFyIF89aS5fY3R4O2Zvcih2YXIgQSBpbiBpKWlmKCFQYShBKSl7dmFyIEM9aVtBXTtoLmlzRnVuY3Rpb24oQyk/bFtBXT14byhBLEMsXyk6QyE9bnVsbCYmZnVuY3Rpb24oKXt2YXIgaz1qbihDKTtsW0FdPSgpPT5rfSgpfX0sS2k9KGksbCk9Pnt2YXIgZD1qbihsKTtpLnNsb3RzLmRlZmF1bHQ9KCk9PmR9LG9zPShpLGwpPT57aWYoaS52bm9kZS5zaGFwZUZsYWcmMzIpe3ZhciBkPWwuXztkPyhpLnNsb3RzPUUudG9SYXcobCksaC5kZWYobCwiXyIsZCkpOlFvKGwsaS5zbG90cz17fSl9ZWxzZSBpLnNsb3RzPXt9LGwmJktpKGksbCk7aC5kZWYoaS5zbG90cyxMbiwxKX0sYXM9KGksbCxkKT0+e3Zhcnt2bm9kZTpfLHNsb3RzOkF9PWksQz0hMCxrPWguRU1QVFlfT0JKO2lmKF8uc2hhcGVGbGFnJjMyKXt2YXIgTD1sLl87TD9kJiZMPT09MT9DPSExOihoLmV4dGVuZChBLGwpLCFkJiZMPT09MSYmZGVsZXRlIEEuXyk6KEM9IWwuJHN0YWJsZSxRbyhsLEEpKSxrPWx9ZWxzZSBsJiYoS2koaSxsKSxrPXtkZWZhdWx0OjF9KTtpZihDKWZvcih2YXIgSCBpbiBBKSFQYShIKSYmIShIIGluIGspJiZkZWxldGUgQVtIXX07ZnVuY3Rpb24gQm8oKXtyZXR1cm57YXBwOm51bGwsY29uZmlnOntpc05hdGl2ZVRhZzpoLk5PLHBlcmZvcm1hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOnt9LGVycm9ySGFuZGxlcjp2b2lkIDAsd2FybkhhbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudHM6e30sZGlyZWN0aXZlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZTpuZXcgV2Vha01hcCxwcm9wc0NhY2hlOm5ldyBXZWFrTWFwLGVtaXRzQ2FjaGU6bmV3IFdlYWtNYXB9fXZhciBzcz0wO2Z1bmN0aW9uIHNvKGksbCl7cmV0dXJuIGZ1bmN0aW9uKF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO2guaXNGdW5jdGlvbihfKXx8KF89T2JqZWN0LmFzc2lnbih7fSxfKSksQSE9bnVsbCYmIWguaXNPYmplY3QoQSkmJihBPW51bGwpO3ZhciBDPUJvKCksaz1uZXcgU2V0LEw9ITEsSD1DLmFwcD17X3VpZDpzcysrLF9jb21wb25lbnQ6XyxfcHJvcHM6QSxfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6QyxfaW5zdGFuY2U6bnVsbCx2ZXJzaW9uOmRsLGdldCBjb25maWcoKXtyZXR1cm4gQy5jb25maWd9LHNldCBjb25maWcodGUpe30sdXNlKHRlKXtmb3IodmFyIGdlPWFyZ3VtZW50cy5sZW5ndGgsa2U9bmV3IEFycmF5KGdlPjE/Z2UtMTowKSx1ZT0xO3VlPGdlO3VlKyspa2VbdWUtMV09YXJndW1lbnRzW3VlXTtyZXR1cm4gay5oYXModGUpfHwodGUmJmguaXNGdW5jdGlvbih0ZS5pbnN0YWxsKT8oay5hZGQodGUpLHRlLmluc3RhbGwoSCwuLi5rZSkpOmguaXNGdW5jdGlvbih0ZSkmJihrLmFkZCh0ZSksdGUoSCwuLi5rZSkpKSxIfSxtaXhpbih0ZSl7cmV0dXJuIEMubWl4aW5zLmluY2x1ZGVzKHRlKXx8Qy5taXhpbnMucHVzaCh0ZSksSH0sY29tcG9uZW50KHRlLGdlKXtyZXR1cm4gZ2U/KEMuY29tcG9uZW50c1t0ZV09Z2UsSCk6Qy5jb21wb25lbnRzW3RlXX0sZGlyZWN0aXZlKHRlLGdlKXtyZXR1cm4gZ2U/KEMuZGlyZWN0aXZlc1t0ZV09Z2UsSCk6Qy5kaXJlY3RpdmVzW3RlXX0sbW91bnQodGUsZ2Usa2Upe2lmKCFMKXt2YXIgdWU9WnQoXyxBKTtyZXR1cm4gdWUuYXBwQ29udGV4dD1DLGdlJiZsP2wodWUsdGUpOmkodWUsdGUsa2UpLEw9ITAsSC5fY29udGFpbmVyPXRlLHRlLl9fdnVlX2FwcF9fPUgsSC5faW5zdGFuY2U9dWUuY29tcG9uZW50LFVpKHVlLmNvbXBvbmVudCl8fHVlLmNvbXBvbmVudC5wcm94eX19LHVubW91bnQoKXtMJiYoaShudWxsLEguX2NvbnRhaW5lciksZGVsZXRlIEguX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUodGUsZ2Upe3JldHVybiBDLnByb3ZpZGVzW3RlXT1nZSxIfX07cmV0dXJuIEh9fWZ1bmN0aW9uIGhpKGksbCxkLF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMTtpZihoLmlzQXJyYXkoaSkpe2kuZm9yRWFjaCgodXQsUWUpPT5oaSh1dCxsJiYoaC5pc0FycmF5KGwpP2xbUWVdOmwpLGQsXyxBKSk7cmV0dXJufWlmKCEoRHIoXykmJiFBKSl7dmFyIEM9Xy5zaGFwZUZsYWcmND9VaShfLmNvbXBvbmVudCl8fF8uY29tcG9uZW50LnByb3h5Ol8uZWwsaz1BP251bGw6Qyx7aTpMLHI6SH09aSx0ZT1sJiZsLnIsZ2U9TC5yZWZzPT09aC5FTVBUWV9PQko/TC5yZWZzPXt9OkwucmVmcyxrZT1MLnNldHVwU3RhdGU7aWYodGUhPW51bGwmJnRlIT09SCYmKGguaXNTdHJpbmcodGUpPyhnZVt0ZV09bnVsbCxoLmhhc093bihrZSx0ZSkmJihrZVt0ZV09bnVsbCkpOkUuaXNSZWYodGUpJiYodGUudmFsdWU9bnVsbCkpLGguaXNGdW5jdGlvbihIKSlVdChILEwsMTIsW2ssZ2VdKTtlbHNle3ZhciB1ZT1oLmlzU3RyaW5nKEgpLFBlPUUuaXNSZWYoSCk7aWYodWV8fFBlKXt2YXIgV2U9KCk9PntpZihpLmYpe3ZhciB1dD11ZT9oLmhhc093bihrZSxIKT9rZVtIXTpnZVtIXTpILnZhbHVlO0E/aC5pc0FycmF5KHV0KSYmaC5yZW1vdmUodXQsQyk6aC5pc0FycmF5KHV0KT91dC5pbmNsdWRlcyhDKXx8dXQucHVzaChDKTp1ZT8oZ2VbSF09W0NdLGguaGFzT3duKGtlLEgpJiYoa2VbSF09Z2VbSF0pKTooSC52YWx1ZT1bQ10saS5rJiYoZ2VbaS5rXT1ILnZhbHVlKSl9ZWxzZSB1ZT8oZ2VbSF09ayxoLmhhc093bihrZSxIKSYmKGtlW0hdPWspKTpQZSYmKEgudmFsdWU9ayxpLmsmJihnZVtpLmtdPWspKX07az8oV2UuaWQ9LTEsdXIoV2UsZCkpOldlKCl9fX19dmFyIE9pPSExLFppPWk9Pi9zdmcvLnRlc3QoaS5uYW1lc3BhY2VVUkkpJiZpLnRhZ05hbWUhPT0iZm9yZWlnbk9iamVjdCIsZ2k9aT0+aS5ub2RlVHlwZT09PTg7ZnVuY3Rpb24gaHIoaSl7dmFye210OmwscDpkLG86e3BhdGNoUHJvcDpfLGNyZWF0ZVRleHQ6QSxuZXh0U2libGluZzpDLHBhcmVudE5vZGU6ayxyZW1vdmU6TCxpbnNlcnQ6SCxjcmVhdGVDb21tZW50OnRlfX09aSxnZT0oSWUscGUpPT57aWYoIXBlLmhhc0NoaWxkTm9kZXMoKSl7ZChudWxsLEllLHBlKSxqZSgpLHBlLl92bm9kZT1JZTtyZXR1cm59T2k9ITEsa2UocGUuZmlyc3RDaGlsZCxJZSxudWxsLG51bGwsbnVsbCksamUoKSxwZS5fdm5vZGU9SWUsT2kmJmNvbnNvbGUuZXJyb3IoIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuIil9LGtlPWZ1bmN0aW9uKEllLHBlLF9lLExlLEFlKXt2YXIgRXQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExLEF0PWdpKEllKSYmSWUuZGF0YT09PSJbIixKZT0oKT0+dXQoSWUscGUsX2UsTGUsQWUsQXQpLHt0eXBlOnh0LHJlZjpNLHNoYXBlRmxhZzpqLHBhdGNoRmxhZzphZX09cGUsbmU9SWUubm9kZVR5cGU7cGUuZWw9SWUsYWU9PT0tMiYmKEV0PSExLHBlLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgaWU9bnVsbDtzd2l0Y2goeHQpe2Nhc2UgY2U6bmUhPT0zP3BlLmNoaWxkcmVuPT09IiI/KEgocGUuZWw9QSgiIixJZS5wYXJlbnROb2RlKSxrKEllKSxJZSksaWU9SWUpOmllPUplKCk6KEllLmRhdGEhPT1wZS5jaGlsZHJlbiYmKE9pPSEwLEllLmRhdGE9cGUuY2hpbGRyZW4pLGllPUMoSWUpKTticmVhaztjYXNlIGhlOm5lIT09OHx8QXQ/aWU9SmUoKTppZT1DKEllKTticmVhaztjYXNlIFRlOmlmKEF0JiYoSWU9QyhJZSksbmU9SWUubm9kZVR5cGUpLG5lPT09MXx8bmU9PT0zKXtpZT1JZTtmb3IodmFyIFZlPSFwZS5jaGlsZHJlbi5sZW5ndGgscnQ9MDtydDxwZS5zdGF0aWNDb3VudDtydCsrKVZlJiYocGUuY2hpbGRyZW4rPWllLm5vZGVUeXBlPT09MT9pZS5vdXRlckhUTUw6aWUuZGF0YSkscnQ9PT1wZS5zdGF0aWNDb3VudC0xJiYocGUuYW5jaG9yPWllKSxpZT1DKGllKTtyZXR1cm4gQXQ/QyhpZSk6aWV9ZWxzZSBKZSgpO2JyZWFrO2Nhc2UgZWU6QXQ/aWU9V2UoSWUscGUsX2UsTGUsQWUsRXQpOmllPUplKCk7YnJlYWs7ZGVmYXVsdDppZihqJjEpbmUhPT0xfHxwZS50eXBlLnRvTG93ZXJDYXNlKCkhPT1JZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk/aWU9SmUoKTppZT11ZShJZSxwZSxfZSxMZSxBZSxFdCk7ZWxzZSBpZihqJjYpe3BlLnNsb3RTY29wZUlkcz1BZTt2YXIgWWU9ayhJZSk7aWYobChwZSxZZSxudWxsLF9lLExlLFppKFllKSxFdCksaWU9QXQ/UWUoSWUpOkMoSWUpLGllJiZnaShpZSkmJmllLmRhdGE9PT0idGVsZXBvcnQgZW5kIiYmKGllPUMoaWUpKSxEcihwZSkpe3ZhciBLZTtBdD8oS2U9WnQoZWUpLEtlLmFuY2hvcj1pZT9pZS5wcmV2aW91c1NpYmxpbmc6WWUubGFzdENoaWxkKTpLZT1JZS5ub2RlVHlwZT09PTM/UWkoIiIpOlp0KCJkaXYiKSxLZS5lbD1JZSxwZS5jb21wb25lbnQuc3ViVHJlZT1LZX19ZWxzZSBqJjY0P25lIT09OD9pZT1KZSgpOmllPXBlLnR5cGUuaHlkcmF0ZShJZSxwZSxfZSxMZSxBZSxFdCxpLFBlKTpqJjEyOCYmKGllPXBlLnR5cGUuaHlkcmF0ZShJZSxwZSxfZSxMZSxaaShrKEllKSksQWUsRXQsaSxrZSkpfXJldHVybiBNIT1udWxsJiZoaShNLG51bGwsTGUscGUpLGllfSx1ZT0oSWUscGUsX2UsTGUsQWUsRXQpPT57RXQ9RXR8fCEhcGUuZHluYW1pY0NoaWxkcmVuO3Zhcnt0eXBlOkF0LHByb3BzOkplLHBhdGNoRmxhZzp4dCxzaGFwZUZsYWc6TSxkaXJzOmp9PXBlLGFlPUF0PT09ImlucHV0IiYmanx8QXQ9PT0ib3B0aW9uIjtpZihhZXx8eHQhPT0tMSl7aWYoaiYmeXIocGUsbnVsbCxfZSwiY3JlYXRlZCIpLEplKWlmKGFlfHwhRXR8fHh0JigxNnwzMikpZm9yKHZhciBuZSBpbiBKZSkoYWUmJm5lLmVuZHNXaXRoKCJ2YWx1ZSIpfHxoLmlzT24obmUpJiYhaC5pc1Jlc2VydmVkUHJvcChuZSkpJiZfKEllLG5lLG51bGwsSmVbbmVdLCExLHZvaWQgMCxfZSk7ZWxzZSBKZS5vbkNsaWNrJiZfKEllLCJvbkNsaWNrIixudWxsLEplLm9uQ2xpY2ssITEsdm9pZCAwLF9lKTt2YXIgaWU7aWYoKGllPUplJiZKZS5vblZub2RlQmVmb3JlTW91bnQpJiZxcihpZSxfZSxwZSksaiYmeXIocGUsbnVsbCxfZSwiYmVmb3JlTW91bnQiKSwoKGllPUplJiZKZS5vblZub2RlTW91bnRlZCl8fGopJiZzcigoKT0+e2llJiZxcihpZSxfZSxwZSksaiYmeXIocGUsbnVsbCxfZSwibW91bnRlZCIpfSxMZSksTSYxNiYmIShKZSYmKEplLmlubmVySFRNTHx8SmUudGV4dENvbnRlbnQpKSlmb3IodmFyIFZlPVBlKEllLmZpcnN0Q2hpbGQscGUsSWUsX2UsTGUsQWUsRXQpO1ZlOyl7T2k9ITA7dmFyIHJ0PVZlO1ZlPVZlLm5leHRTaWJsaW5nLEwocnQpfWVsc2UgTSY4JiZJZS50ZXh0Q29udGVudCE9PXBlLmNoaWxkcmVuJiYoT2k9ITAsSWUudGV4dENvbnRlbnQ9cGUuY2hpbGRyZW4pfXJldHVybiBJZS5uZXh0U2libGluZ30sUGU9KEllLHBlLF9lLExlLEFlLEV0LEF0KT0+e0F0PUF0fHwhIXBlLmR5bmFtaWNDaGlsZHJlbjtmb3IodmFyIEplPXBlLmNoaWxkcmVuLHh0PUplLmxlbmd0aCxNPTA7TTx4dDtNKyspe3ZhciBqPUF0P0plW01dOkplW01dPVduKEplW01dKTtpZihJZSlJZT1rZShJZSxqLExlLEFlLEV0LEF0KTtlbHNle2lmKGoudHlwZT09PWNlJiYhai5jaGlsZHJlbiljb250aW51ZTtPaT0hMCxkKG51bGwsaixfZSxudWxsLExlLEFlLFppKF9lKSxFdCl9fXJldHVybiBJZX0sV2U9KEllLHBlLF9lLExlLEFlLEV0KT0+e3ZhcntzbG90U2NvcGVJZHM6QXR9PXBlO0F0JiYoQWU9QWU/QWUuY29uY2F0KEF0KTpBdCk7dmFyIEplPWsoSWUpLHh0PVBlKEMoSWUpLHBlLEplLF9lLExlLEFlLEV0KTtyZXR1cm4geHQmJmdpKHh0KSYmeHQuZGF0YT09PSJdIj9DKHBlLmFuY2hvcj14dCk6KE9pPSEwLEgocGUuYW5jaG9yPXRlKCJdIixKZSksSmUseHQpLHh0KX0sdXQ9KEllLHBlLF9lLExlLEFlLEV0KT0+e2lmKE9pPSEwLHBlLmVsPW51bGwsRXQpZm9yKHZhciBBdD1RZShJZSk7Oyl7dmFyIEplPUMoSWUpO2lmKEplJiZKZSE9PUF0KUwoSmUpO2Vsc2UgYnJlYWt9dmFyIHh0PUMoSWUpLE09ayhJZSk7cmV0dXJuIEwoSWUpLGQobnVsbCxwZSxNLHh0LF9lLExlLFppKE0pLEFlKSx4dH0sUWU9SWU9Pntmb3IodmFyIHBlPTA7SWU7KWlmKEllPUMoSWUpLEllJiZnaShJZSkmJihJZS5kYXRhPT09IlsiJiZwZSsrLEllLmRhdGE9PT0iXSIpKXtpZihwZT09PTApcmV0dXJuIEMoSWUpO3BlLS19cmV0dXJuIEllfTtyZXR1cm5bZ2Usa2VdfXZhciB1cj1zcjtmdW5jdGlvbiAkYShpKXtyZXR1cm4gWGkoaSl9ZnVuY3Rpb24gSGEoaSl7cmV0dXJuIFhpKGksaHIpfWZ1bmN0aW9uIFhpKGksbCl7dmFyIGQ9aC5nZXRHbG9iYWxUaGlzKCk7ZC5fX1ZVRV9fPSEwO3ZhcntpbnNlcnQ6XyxyZW1vdmU6QSxwYXRjaFByb3A6Qyxmb3JjZVBhdGNoUHJvcDprLGNyZWF0ZUVsZW1lbnQ6TCxjcmVhdGVUZXh0OkgsY3JlYXRlQ29tbWVudDp0ZSxzZXRUZXh0OmdlLHNldEVsZW1lbnRUZXh0OmtlLHBhcmVudE5vZGU6dWUsbmV4dFNpYmxpbmc6UGUsc2V0U2NvcGVJZDpXZT1oLk5PT1AsaW5zZXJ0U3RhdGljQ29udGVudDp1dH09aSxRZT1mdW5jdGlvbihxLFEsbWUpe3ZhciBSZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbCxNZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxYZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bnVsbCxidD1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEsZXQ9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOm51bGwsdHQ9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiEhUS5keW5hbWljQ2hpbGRyZW47aWYocSE9PVEpe3EmJiFkdChxLFEpJiYoUmU9Z3IocSksTXQocSxNZSxYZSwhMCkscT1udWxsKSxRLnBhdGNoRmxhZz09PS0yJiYodHQ9ITEsUS5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6JGUscmVmOld0LHNoYXBlRmxhZzpGdH09UTtzd2l0Y2goJGUpe2Nhc2UgY2U6SWUocSxRLG1lLFJlKTticmVhaztjYXNlIGhlOnBlKHEsUSxtZSxSZSk7YnJlYWs7Y2FzZSBUZTpxPT1udWxsJiZfZShRLG1lLFJlLGJ0KTticmVhaztjYXNlIGVlOm5lKHEsUSxtZSxSZSxNZSxYZSxidCxldCx0dCk7YnJlYWs7ZGVmYXVsdDpGdCYxP0V0KHEsUSxtZSxSZSxNZSxYZSxidCxldCx0dCk6RnQmNj9pZShxLFEsbWUsUmUsTWUsWGUsYnQsZXQsdHQpOihGdCY2NHx8RnQmMTI4KSYmJGUucHJvY2VzcyhxLFEsbWUsUmUsTWUsWGUsYnQsZXQsdHQsZW4pfVd0IT1udWxsJiZNZSYmaGkoV3QscSYmcS5yZWYsWGUsUXx8cSwhUSl9fSxJZT0ocSxRLG1lLFJlKT0+e2lmKHE9PW51bGwpXyhRLmVsPUgoUS5jaGlsZHJlbixtZSksbWUsUmUpO2Vsc2V7dmFyIE1lPVEuZWw9cS5lbDtRLmNoaWxkcmVuIT09cS5jaGlsZHJlbiYmZ2UoTWUsUS5jaGlsZHJlbil9fSxwZT0ocSxRLG1lLFJlKT0+e3E9PW51bGw/XyhRLmVsPXRlKFEuY2hpbGRyZW58fCIiLG1lKSxtZSxSZSk6US5lbD1xLmVsfSxfZT0ocSxRLG1lLFJlKT0+e1txLmVsLHEuYW5jaG9yXT11dChxLmNoaWxkcmVuLFEsbWUsUmUscS5lbCxxLmFuY2hvcil9LExlPShxLFEsbWUpPT57Zm9yKHZhcntlbDpSZSxhbmNob3I6TWV9PXEsWGU7UmUmJlJlIT09TWU7KVhlPVBlKFJlKSxfKFJlLFEsbWUpLFJlPVhlO18oTWUsUSxtZSl9LEFlPXE9Pntmb3IodmFye2VsOlEsYW5jaG9yOm1lfT1xLFJlO1EmJlEhPT1tZTspUmU9UGUoUSksQShRKSxRPVJlO0EobWUpfSxFdD0ocSxRLG1lLFJlLE1lLFhlLGJ0LGV0LHR0KT0+e2J0PWJ0fHxRLnR5cGU9PT0ic3ZnIixxPT1udWxsP0F0KFEsbWUsUmUsTWUsWGUsYnQsZXQsdHQpOk0ocSxRLE1lLFhlLGJ0LGV0LHR0KX0sQXQ9KHEsUSxtZSxSZSxNZSxYZSxidCxldCk9Pnt2YXIgdHQsJGUse3R5cGU6V3QscHJvcHM6RnQsc2hhcGVGbGFnOkd0LHRyYW5zaXRpb246SW4sZGlyczpLcn09cTtpZih0dD1xLmVsPUwocS50eXBlLFEpLEd0Jjg/a2UodHQscS5jaGlsZHJlbik6R3QmMTYmJnh0KHEuY2hpbGRyZW4sdHQsbnVsbCxSZSxNZSxYZSYmV3QhPT0iZm9yZWlnbk9iamVjdCIsYnQsZXQpLEtyJiZ5cihxLG51bGwsUmUsImNyZWF0ZWQiKSxKZSh0dCxxLHEuc2NvcGVJZCxidCxSZSksRnQpe2Zvcih2YXIgdHIgaW4gRnQpdHIhPT0idmFsdWUiJiYhaC5pc1Jlc2VydmVkUHJvcCh0cikmJkModHQsdHIsbnVsbCxGdFt0cl0sWGUscS5jaGlsZHJlbixSZSxNZSxTbik7InZhbHVlImluIEZ0JiZDKHR0LCJ2YWx1ZSIsbnVsbCxGdC52YWx1ZSksKCRlPUZ0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJnFyKCRlLFJlLHEpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0dCwiX192dWVQYXJlbnRDb21wb25lbnQiLHt2YWx1ZTpSZSxlbnVtZXJhYmxlOiExfSksS3ImJnlyKHEsbnVsbCxSZSwiYmVmb3JlTW91bnQiKTt2YXIgdmk9KCFNZXx8TWUmJiFNZS5wZW5kaW5nQnJhbmNoKSYmSW4mJiFJbi5wZXJzaXN0ZWQ7dmkmJkluLmJlZm9yZUVudGVyKHR0KSxfKHR0LFEsbWUpLCgoJGU9RnQmJkZ0Lm9uVm5vZGVNb3VudGVkKXx8dml8fEtyKSYmdXIoKCk9PnskZSYmcXIoJGUsUmUscSksdmkmJkluLmVudGVyKHR0KSxLciYmeXIocSxudWxsLFJlLCJtb3VudGVkIil9LE1lKX0sSmU9KHEsUSxtZSxSZSxNZSk9PntpZihtZSYmV2UocSxtZSksUmUpZm9yKHZhciBYZT0wO1hlPFJlLmxlbmd0aDtYZSsrKVdlKHEsUmVbWGVdKTtpZihNZSl7dmFyIGJ0PU1lLnN1YlRyZWU7aWYoUT09PWJ0KXt2YXIgZXQ9TWUudm5vZGU7SmUocSxldCxldC5zY29wZUlkLGV0LnNsb3RTY29wZUlkcyxNZS5wYXJlbnQpfX19LHh0PWZ1bmN0aW9uKHEsUSxtZSxSZSxNZSxYZSxidCxldCl7Zm9yKHZhciB0dD1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06MCwkZT10dDskZTxxLmxlbmd0aDskZSsrKXt2YXIgV3Q9cVskZV09ZXQ/TnIocVskZV0pOlduKHFbJGVdKTtRZShudWxsLFd0LFEsbWUsUmUsTWUsWGUsYnQsZXQpfX0sTT0ocSxRLG1lLFJlLE1lLFhlLGJ0KT0+e3ZhciBldD1RLmVsPXEuZWwse3BhdGNoRmxhZzp0dCxkeW5hbWljQ2hpbGRyZW46JGUsZGlyczpXdH09UTt0dHw9cS5wYXRjaEZsYWcmMTY7dmFyIEZ0PXEucHJvcHN8fGguRU1QVFlfT0JKLEd0PVEucHJvcHN8fGguRU1QVFlfT0JKLEluO21lJiZsbyhtZSwhMSksKEluPUd0Lm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZxcihJbixtZSxRLHEpLFd0JiZ5cihRLHEsbWUsImJlZm9yZVVwZGF0ZSIpLG1lJiZsbyhtZSwhMCk7dmFyIEtyPU1lJiZRLnR5cGUhPT0iZm9yZWlnbk9iamVjdCI7aWYoJGU/aihxLmR5bmFtaWNDaGlsZHJlbiwkZSxldCxtZSxSZSxLcixYZSk6YnR8fFVlKHEsUSxldCxudWxsLG1lLFJlLEtyLFhlLCExKSx0dD4wKXtpZih0dCYxNilhZShldCxRLEZ0LEd0LG1lLFJlLE1lKTtlbHNlIGlmKHR0JjImJkZ0LmNsYXNzIT09R3QuY2xhc3MmJkMoZXQsImNsYXNzIixudWxsLEd0LmNsYXNzLE1lKSx0dCY0JiZDKGV0LCJzdHlsZSIsRnQuc3R5bGUsR3Quc3R5bGUsTWUpLHR0JjgpZm9yKHZhciB0cj1RLmR5bmFtaWNQcm9wcyx2aT0wO3ZpPHRyLmxlbmd0aDt2aSsrKXt2YXIgam89dHJbdmldLGVzPUZ0W2pvXSx3cz1HdFtqb107KHdzIT09ZXN8fGpvPT09InZhbHVlInx8ayYmayhldCxqbykpJiZDKGV0LGpvLGVzLHdzLE1lLHEuY2hpbGRyZW4sbWUsUmUsU24pfXR0JjEmJnEuY2hpbGRyZW4hPT1RLmNoaWxkcmVuJiZrZShldCxRLmNoaWxkcmVuKX1lbHNlIWJ0JiYkZT09bnVsbCYmYWUoZXQsUSxGdCxHdCxtZSxSZSxNZSk7KChJbj1HdC5vblZub2RlVXBkYXRlZCl8fFd0KSYmdXIoKCk9PntJbiYmcXIoSW4sbWUsUSxxKSxXdCYmeXIoUSxxLG1lLCJ1cGRhdGVkIil9LFJlKX0saj0ocSxRLG1lLFJlLE1lLFhlLGJ0KT0+e2Zvcih2YXIgZXQ9MDtldDxRLmxlbmd0aDtldCsrKXt2YXIgdHQ9cVtldF0sJGU9UVtldF0sV3Q9dHQuZWwmJih0dC50eXBlPT09ZWV8fCFkdCh0dCwkZSl8fHR0LnNoYXBlRmxhZyYoNnw2NCkpP3VlKHR0LmVsKTptZTtRZSh0dCwkZSxXdCxudWxsLFJlLE1lLFhlLGJ0LCEwKX19LGFlPShxLFEsbWUsUmUsTWUsWGUsYnQpPT57aWYobWUhPT1SZSl7aWYobWUhPT1oLkVNUFRZX09CSilmb3IodmFyIGV0IGluIG1lKSFoLmlzUmVzZXJ2ZWRQcm9wKGV0KSYmIShldCBpbiBSZSkmJkMocSxldCxtZVtldF0sbnVsbCxidCxRLmNoaWxkcmVuLE1lLFhlLFNuKTtmb3IodmFyIHR0IGluIFJlKWlmKCFoLmlzUmVzZXJ2ZWRQcm9wKHR0KSl7dmFyICRlPVJlW3R0XSxXdD1tZVt0dF07KCRlIT09V3QmJnR0IT09InZhbHVlInx8ayYmayhxLHR0KSkmJkMocSx0dCxXdCwkZSxidCxRLmNoaWxkcmVuLE1lLFhlLFNuKX0idmFsdWUiaW4gUmUmJkMocSwidmFsdWUiLG1lLnZhbHVlLFJlLnZhbHVlKX19LG5lPShxLFEsbWUsUmUsTWUsWGUsYnQsZXQsdHQpPT57dmFyICRlPVEuZWw9cT9xLmVsOkgoIiIsbWUpLFd0PVEuYW5jaG9yPXE/cS5hbmNob3I6SCgiIixtZSkse3BhdGNoRmxhZzpGdCxkeW5hbWljQ2hpbGRyZW46R3Qsc2xvdFNjb3BlSWRzOklufT1RO0luJiYoZXQ9ZXQ/ZXQuY29uY2F0KEluKTpJbikscT09bnVsbD8oXygkZSxtZSxSZSksXyhXdCxtZSxSZSkseHQoUS5jaGlsZHJlbixtZSxXdCxNZSxYZSxidCxldCx0dCkpOkZ0PjAmJkZ0JjY0JiZHdCYmcS5keW5hbWljQ2hpbGRyZW4/KGoocS5keW5hbWljQ2hpbGRyZW4sR3QsbWUsTWUsWGUsYnQsZXQpLChRLmtleSE9bnVsbHx8TWUmJlE9PT1NZS5zdWJUcmVlKSYmY28ocSxRLCEwKSk6VWUocSxRLG1lLFd0LE1lLFhlLGJ0LGV0LHR0KX0saWU9KHEsUSxtZSxSZSxNZSxYZSxidCxldCx0dCk9PntRLnNsb3RTY29wZUlkcz1ldCxxPT1udWxsP1Euc2hhcGVGbGFnJjUxMj9NZS5jdHguYWN0aXZhdGUoUSxtZSxSZSxidCx0dCk6VmUoUSxtZSxSZSxNZSxYZSxidCx0dCk6cnQocSxRLHR0KX0sVmU9KHEsUSxtZSxSZSxNZSxYZSxidCk9Pnt2YXIgZXQ9cS5jb21wb25lbnQ9bG4ocSxSZSxNZSk7aWYoZGkocSkmJihldC5jdHgucmVuZGVyZXI9ZW4pLHphKGV0KSxldC5hc3luY0RlcCl7aWYoTWUmJk1lLnJlZ2lzdGVyRGVwKGV0LFllKSwhcS5lbCl7dmFyIHR0PWV0LnN1YlRyZWU9WnQoaGUpO3BlKG51bGwsdHQsUSxtZSl9cmV0dXJufWlmKFllKGV0LHEsUSxtZSxNZSxYZSxidCksZXQuJHd4c01vZHVsZXMpe3ZhciAkZT1SLnJlc29sdmVPd25lckVsKGV0LCEwKTskZS5sZW5ndGgmJiRlLmZvckVhY2goV3Q9PntXdC5zZXRBdHRyaWJ1dGUoUi5BVFRSX1ZfT1dORVJfSUQsZXQudWlkKTt2YXJ7JHJlbmRlcmpzTW9kdWxlczpGdH09ZXQudHlwZTtGdCYmV3Quc2V0QXR0cmlidXRlKFIuQVRUUl9WX1JFTkRFUkpTLEZ0KX0pfX0scnQ9KHEsUSxtZSk9Pnt2YXIgUmU9US5jb21wb25lbnQ9cS5jb21wb25lbnQ7aWYocm8ocSxRLG1lKSlpZihSZS5hc3luY0RlcCYmIVJlLmFzeW5jUmVzb2x2ZWQpe0tlKFJlLFEsbWUpO3JldHVybn1lbHNlIFJlLm5leHQ9USxRcihSZS51cGRhdGUpLFJlLnVwZGF0ZSgpO2Vsc2UgUS5lbD1xLmVsLFJlLnZub2RlPVF9LFllPShxLFEsbWUsUmUsTWUsWGUsYnQpPT57dmFyIGV0PSgpPT57aWYocS5pc01vdW50ZWQpe3ZhcntuZXh0OmlyLGJ1OlJhLHU6Q3MscGFyZW50OnRvLHZub2RlOnpvfT1xLGhvPWlyLF9hO2xvKHEsITEpLGlyPyhpci5lbD16by5lbCxLZShxLGlyLGJ0KSk6aXI9em8sUmEmJmguaW52b2tlQXJyYXlGbnMoUmEpLChfYT1pci5wcm9wcyYmaXIucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJnFyKF9hLHRvLGlyLHpvKSxsbyhxLCEwKTt2YXIgdHM9UmkocSksbGE9cS5zdWJUcmVlO3Euc3ViVHJlZT10cyxRZShsYSx0cyx1ZShsYS5lbCksZ3IobGEpLHEsTWUsWGUpLGlyLmVsPXRzLmVsLGhvPT09bnVsbCYmbGkocSx0cy5lbCksQ3MmJnVyKENzLE1lKSwoX2E9aXIucHJvcHMmJmlyLnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmdXIoKCk9PnFyKF9hLHRvLGlyLHpvKSxNZSl9ZWxzZXt2YXIgV3Qse2VsOkZ0LHByb3BzOkd0fT1RLHtibTpJbixtOktyLHBhcmVudDp0cn09cSx2aT1EcihRKTtpZihsbyhxLCExKSxJbiYmaC5pbnZva2VBcnJheUZucyhJbiksIXZpJiYoV3Q9R3QmJkd0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJnFyKFd0LHRyLFEpLGxvKHEsITApLEZ0JiZmbyl7dmFyIGpvPSgpPT57cS5zdWJUcmVlPVJpKHEpLGZvKEZ0LHEuc3ViVHJlZSxxLE1lLG51bGwpfTt2aT9RLnR5cGUuX19hc3luY0xvYWRlcigpLnRoZW4oKCk9PiFxLmlzVW5tb3VudGVkJiZqbygpKTpqbygpfWVsc2V7dmFyIGVzPXEuc3ViVHJlZT1SaShxKTtRZShudWxsLGVzLG1lLFJlLHEsTWUsWGUpLFEuZWw9ZXMuZWx9aWYoS3ImJnVyKEtyLE1lKSwhdmkmJihXdD1HdCYmR3Qub25Wbm9kZU1vdW50ZWQpKXt2YXIgd3M9UTt1cigoKT0+cXIoV3QsdHIsd3MpLE1lKX0oUS5zaGFwZUZsYWcmMjU2fHx0ciYmRHIodHIudm5vZGUpJiZ0ci52bm9kZS5zaGFwZUZsYWcmMjU2KSYmcS5hJiZ1cihxLmEsTWUpLHEuaXNNb3VudGVkPSEwLFE9bWU9UmU9bnVsbH19LHR0PXEuZWZmZWN0PW5ldyBFLlJlYWN0aXZlRWZmZWN0KGV0LCgpPT5fcigkZSkscS5zY29wZSksJGU9cS51cGRhdGU9KCk9PnR0LnJ1bigpOyRlLmlkPXEudWlkLGxvKHEsITApLCRlKCl9LEtlPShxLFEsbWUpPT57US5jb21wb25lbnQ9cTt2YXIgUmU9cS52bm9kZS5wcm9wcztxLnZub2RlPVEscS5uZXh0PW51bGwsaGEocSxRLnByb3BzLFJlLG1lKSxhcyhxLFEuY2hpbGRyZW4sbWUpLEUucGF1c2VUcmFja2luZygpLGtuKCksRS5yZXNldFRyYWNraW5nKCl9LFVlPWZ1bmN0aW9uKHEsUSxtZSxSZSxNZSxYZSxidCxldCl7dmFyIHR0PWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohMSwkZT1xJiZxLmNoaWxkcmVuLFd0PXE/cS5zaGFwZUZsYWc6MCxGdD1RLmNoaWxkcmVuLHtwYXRjaEZsYWc6R3Qsc2hhcGVGbGFnOklufT1RO2lmKEd0PjApe2lmKEd0JjEyOCl7dnQoJGUsRnQsbWUsUmUsTWUsWGUsYnQsZXQsdHQpO3JldHVybn1lbHNlIGlmKEd0JjI1Nil7SHQoJGUsRnQsbWUsUmUsTWUsWGUsYnQsZXQsdHQpO3JldHVybn19SW4mOD8oV3QmMTYmJlNuKCRlLE1lLFhlKSxGdCE9PSRlJiZrZShtZSxGdCkpOld0JjE2P0luJjE2P3Z0KCRlLEZ0LG1lLFJlLE1lLFhlLGJ0LGV0LHR0KTpTbigkZSxNZSxYZSwhMCk6KFd0JjgmJmtlKG1lLCIiKSxJbiYxNiYmeHQoRnQsbWUsUmUsTWUsWGUsYnQsZXQsdHQpKX0sSHQ9KHEsUSxtZSxSZSxNZSxYZSxidCxldCx0dCk9PntxPXF8fGguRU1QVFlfQVJSLFE9UXx8aC5FTVBUWV9BUlI7dmFyICRlPXEubGVuZ3RoLFd0PVEubGVuZ3RoLEZ0PU1hdGgubWluKCRlLFd0KSxHdDtmb3IoR3Q9MDtHdDxGdDtHdCsrKXt2YXIgSW49UVtHdF09dHQ/TnIoUVtHdF0pOlduKFFbR3RdKTtRZShxW0d0XSxJbixtZSxudWxsLE1lLFhlLGJ0LGV0LHR0KX0kZT5XdD9TbihxLE1lLFhlLCEwLCExLEZ0KTp4dChRLG1lLFJlLE1lLFhlLGJ0LGV0LHR0LEZ0KX0sdnQ9KHEsUSxtZSxSZSxNZSxYZSxidCxldCx0dCk9Pntmb3IodmFyICRlPTAsV3Q9US5sZW5ndGgsRnQ9cS5sZW5ndGgtMSxHdD1XdC0xOyRlPD1GdCYmJGU8PUd0Oyl7dmFyIEluPXFbJGVdLEtyPVFbJGVdPXR0P05yKFFbJGVdKTpXbihRWyRlXSk7aWYoZHQoSW4sS3IpKVFlKEluLEtyLG1lLG51bGwsTWUsWGUsYnQsZXQsdHQpO2Vsc2UgYnJlYWs7JGUrK31mb3IoOyRlPD1GdCYmJGU8PUd0Oyl7dmFyIHRyPXFbRnRdLHZpPVFbR3RdPXR0P05yKFFbR3RdKTpXbihRW0d0XSk7aWYoZHQodHIsdmkpKVFlKHRyLHZpLG1lLG51bGwsTWUsWGUsYnQsZXQsdHQpO2Vsc2UgYnJlYWs7RnQtLSxHdC0tfWlmKCRlPkZ0KXtpZigkZTw9R3QpZm9yKHZhciBqbz1HdCsxLGVzPWpvPFd0P1Fbam9dLmVsOlJlOyRlPD1HdDspUWUobnVsbCxRWyRlXT10dD9OcihRWyRlXSk6V24oUVskZV0pLG1lLGVzLE1lLFhlLGJ0LGV0LHR0KSwkZSsrfWVsc2UgaWYoJGU+R3QpZm9yKDskZTw9RnQ7KU10KHFbJGVdLE1lLFhlLCEwKSwkZSsrO2Vsc2V7dmFyIHdzPSRlLGlyPSRlLFJhPW5ldyBNYXA7Zm9yKCRlPWlyOyRlPD1HdDskZSsrKXt2YXIgQ3M9UVskZV09dHQ/TnIoUVskZV0pOlduKFFbJGVdKTtDcy5rZXkhPW51bGwmJlJhLnNldChDcy5rZXksJGUpfXZhciB0byx6bz0wLGhvPUd0LWlyKzEsX2E9ITEsdHM9MCxsYT1uZXcgQXJyYXkoaG8pO2ZvcigkZT0wOyRlPGhvOyRlKyspbGFbJGVdPTA7Zm9yKCRlPXdzOyRlPD1GdDskZSsrKXt2YXIgY2E9cVskZV07aWYoem8+PWhvKXtNdChjYSxNZSxYZSwhMCk7Y29udGludWV9dmFyIFdvPXZvaWQgMDtpZihjYS5rZXkhPW51bGwpV289UmEuZ2V0KGNhLmtleSk7ZWxzZSBmb3IodG89aXI7dG88PUd0O3RvKyspaWYobGFbdG8taXJdPT09MCYmZHQoY2EsUVt0b10pKXtXbz10bzticmVha31Xbz09PXZvaWQgMD9NdChjYSxNZSxYZSwhMCk6KGxhW1dvLWlyXT0kZSsxLFdvPj10cz90cz1XbzpfYT0hMCxRZShjYSxRW1dvXSxtZSxudWxsLE1lLFhlLGJ0LGV0LHR0KSx6bysrKX12YXIgRWw9X2E/bHMobGEpOmguRU1QVFlfQVJSO2Zvcih0bz1FbC5sZW5ndGgtMSwkZT1oby0xOyRlPj0wOyRlLS0pe3ZhciBZcz1pciskZSxiYz1RW1lzXSxXbD1ZcysxPFd0P1FbWXMrMV0uZWw6UmU7bGFbJGVdPT09MD9RZShudWxsLGJjLG1lLFdsLE1lLFhlLGJ0LGV0LHR0KTpfYSYmKHRvPDB8fCRlIT09RWxbdG9dP0J0KGJjLG1lLFdsLDIpOnRvLS0pfX19LEJ0PWZ1bmN0aW9uKHEsUSxtZSxSZSl7dmFyIE1lPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLHtlbDpYZSx0eXBlOmJ0LHRyYW5zaXRpb246ZXQsY2hpbGRyZW46dHQsc2hhcGVGbGFnOiRlfT1xO2lmKCRlJjYpe0J0KHEuY29tcG9uZW50LnN1YlRyZWUsUSxtZSxSZSk7cmV0dXJufWlmKCRlJjEyOCl7cS5zdXNwZW5zZS5tb3ZlKFEsbWUsUmUpO3JldHVybn1pZigkZSY2NCl7YnQubW92ZShxLFEsbWUsZW4pO3JldHVybn1pZihidD09PWVlKXtfKFhlLFEsbWUpO2Zvcih2YXIgV3Q9MDtXdDx0dC5sZW5ndGg7V3QrKylCdCh0dFtXdF0sUSxtZSxSZSk7XyhxLmFuY2hvcixRLG1lKTtyZXR1cm59aWYoYnQ9PT1UZSl7TGUocSxRLG1lKTtyZXR1cm59dmFyIEZ0PVJlIT09MiYmJGUmMSYmZXQ7aWYoRnQpaWYoUmU9PT0wKWV0LmJlZm9yZUVudGVyKFhlKSxfKFhlLFEsbWUpLHVyKCgpPT5ldC5lbnRlcihYZSksTWUpO2Vsc2V7dmFye2xlYXZlOkd0LGRlbGF5TGVhdmU6SW4sYWZ0ZXJMZWF2ZTpLcn09ZXQsdHI9KCk9Pl8oWGUsUSxtZSksdmk9KCk9PntHdChYZSwoKT0+e3RyKCksS3ImJktyKCl9KX07SW4/SW4oWGUsdHIsdmkpOnZpKCl9ZWxzZSBfKFhlLFEsbWUpfSxNdD1mdW5jdGlvbihxLFEsbWUpe3ZhciBSZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsTWU9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLHt0eXBlOlhlLHByb3BzOmJ0LHJlZjpldCxjaGlsZHJlbjp0dCxkeW5hbWljQ2hpbGRyZW46JGUsc2hhcGVGbGFnOld0LHBhdGNoRmxhZzpGdCxkaXJzOkd0fT1xO2lmKGV0IT1udWxsJiZoaShldCxudWxsLG1lLHEsITApLFd0JjI1Nil7US5jdHguZGVhY3RpdmF0ZShxKTtyZXR1cm59dmFyIEluPVd0JjEmJkd0LEtyPSFEcihxKSx0cjtpZihLciYmKHRyPWJ0JiZidC5vblZub2RlQmVmb3JlVW5tb3VudCkmJnFyKHRyLFEscSksV3QmNilibihxLmNvbXBvbmVudCxtZSxSZSk7ZWxzZXtpZihXdCYxMjgpe3Euc3VzcGVuc2UudW5tb3VudChtZSxSZSk7cmV0dXJufUluJiZ5cihxLG51bGwsUSwiYmVmb3JlVW5tb3VudCIpLFd0JjY0P3EudHlwZS5yZW1vdmUocSxRLG1lLE1lLGVuLFJlKTokZSYmKFhlIT09ZWV8fEZ0PjAmJkZ0JjY0KT9TbigkZSxRLG1lLCExLCEwKTooWGU9PT1lZSYmRnQmKDEyOHwyNTYpfHwhTWUmJld0JjE2KSYmU24odHQsUSxtZSksUmUmJkRuKHEpfShLciYmKHRyPWJ0JiZidC5vblZub2RlVW5tb3VudGVkKXx8SW4pJiZ1cigoKT0+e3RyJiZxcih0cixRLHEpLEluJiZ5cihxLG51bGwsUSwidW5tb3VudGVkIil9LG1lKX0sRG49cT0+e3Zhcnt0eXBlOlEsZWw6bWUsYW5jaG9yOlJlLHRyYW5zaXRpb246TWV9PXE7aWYoUT09PWVlKXtNbihtZSxSZSk7cmV0dXJufWlmKFE9PT1UZSl7QWUocSk7cmV0dXJufXZhciBYZT0oKT0+e0EobWUpLE1lJiYhTWUucGVyc2lzdGVkJiZNZS5hZnRlckxlYXZlJiZNZS5hZnRlckxlYXZlKCl9O2lmKHEuc2hhcGVGbGFnJjEmJk1lJiYhTWUucGVyc2lzdGVkKXt2YXJ7bGVhdmU6YnQsZGVsYXlMZWF2ZTpldH09TWUsdHQ9KCk9PmJ0KG1lLFhlKTtldD9ldChxLmVsLFhlLHR0KTp0dCgpfWVsc2UgWGUoKX0sTW49KHEsUSk9Pntmb3IodmFyIG1lO3EhPT1ROyltZT1QZShxKSxBKHEpLHE9bWU7QShRKX0sYm49KHEsUSxtZSk9Pnt2YXJ7YnVtOlJlLHNjb3BlOk1lLHVwZGF0ZTpYZSxzdWJUcmVlOmJ0LHVtOmV0fT1xO1JlJiZoLmludm9rZUFycmF5Rm5zKFJlKSxNZS5zdG9wKCksWGUmJihYZS5hY3RpdmU9ITEsTXQoYnQscSxRLG1lKSksZXQmJnVyKGV0LFEpLHVyKCgpPT57cS5pc1VubW91bnRlZD0hMH0sUSksUSYmUS5wZW5kaW5nQnJhbmNoJiYhUS5pc1VubW91bnRlZCYmcS5hc3luY0RlcCYmIXEuYXN5bmNSZXNvbHZlZCYmcS5zdXNwZW5zZUlkPT09US5wZW5kaW5nSWQmJihRLmRlcHMtLSxRLmRlcHM9PT0wJiZRLnJlc29sdmUoKSl9LFNuPWZ1bmN0aW9uKHEsUSxtZSl7Zm9yKHZhciBSZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsTWU9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLFhlPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTowLGJ0PVhlO2J0PHEubGVuZ3RoO2J0KyspTXQocVtidF0sUSxtZSxSZSxNZSl9LGdyPXE9PnEuc2hhcGVGbGFnJjY/Z3IocS5jb21wb25lbnQuc3ViVHJlZSk6cS5zaGFwZUZsYWcmMTI4P3Euc3VzcGVuc2UubmV4dCgpOlBlKHEuYW5jaG9yfHxxLmVsKSxhaT0ocSxRLG1lKT0+e3E9PW51bGw/US5fdm5vZGUmJk10KFEuX3Zub2RlLG51bGwsbnVsbCwhMCk6UWUoUS5fdm5vZGV8fG51bGwscSxRLG51bGwsbnVsbCxudWxsLG1lKSxrbigpLGplKCksUS5fdm5vZGU9cX0sZW49e3A6UWUsdW06TXQsbTpCdCxyOkRuLG10OlZlLG1jOnh0LHBjOlVlLHBiYzpqLG46Z3IsbzppfSxjbixmbztyZXR1cm4gbCYmKFtjbixmb109bChlbikpLHtyZW5kZXI6YWksaHlkcmF0ZTpjbixjcmVhdGVBcHA6c28oYWksY24pfX1mdW5jdGlvbiBsbyhpLGwpe3ZhcntlZmZlY3Q6ZCx1cGRhdGU6X309aTtkLmFsbG93UmVjdXJzZT1fLmFsbG93UmVjdXJzZT1sfWZ1bmN0aW9uIGNvKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLF89aS5jaGlsZHJlbixBPWwuY2hpbGRyZW47aWYoaC5pc0FycmF5KF8pJiZoLmlzQXJyYXkoQSkpZm9yKHZhciBDPTA7QzxfLmxlbmd0aDtDKyspe3ZhciBrPV9bQ10sTD1BW0NdO0wuc2hhcGVGbGFnJjEmJiFMLmR5bmFtaWNDaGlsZHJlbiYmKChMLnBhdGNoRmxhZzw9MHx8TC5wYXRjaEZsYWc9PT0zMikmJihMPUFbQ109TnIoQVtDXSksTC5lbD1rLmVsKSxkfHxjbyhrLEwpKSxMLnR5cGU9PT1jZSYmKEwuZWw9ay5lbCl9fWZ1bmN0aW9uIGxzKGkpe3ZhciBsPWkuc2xpY2UoKSxkPVswXSxfLEEsQyxrLEwsSD1pLmxlbmd0aDtmb3IoXz0wO188SDtfKyspe3ZhciB0ZT1pW19dO2lmKHRlIT09MCl7aWYoQT1kW2QubGVuZ3RoLTFdLGlbQV08dGUpe2xbX109QSxkLnB1c2goXyk7Y29udGludWV9Zm9yKEM9MCxrPWQubGVuZ3RoLTE7QzxrOylMPUMraz4+MSxpW2RbTF1dPHRlP0M9TCsxOms9TDt0ZTxpW2RbQ11dJiYoQz4wJiYobFtfXT1kW0MtMV0pLGRbQ109Xyl9fWZvcihDPWQubGVuZ3RoLGs9ZFtDLTFdO0MtLSA+MDspZFtDXT1rLGs9bFtrXTtyZXR1cm4gZH12YXIgcGE9aT0+aS5fX2lzVGVsZXBvcnQsTW89aT0+aSYmKGkuZGlzYWJsZWR8fGkuZGlzYWJsZWQ9PT0iIiksdmE9aT0+dHlwZW9mIFNWR0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZpIGluc3RhbmNlb2YgU1ZHRWxlbWVudCx2PShpLGwpPT57dmFyIGQ9aSYmaS50bztpZihoLmlzU3RyaW5nKGQpKWlmKGwpe3ZhciBfPWwoZCk7cmV0dXJuIF99ZWxzZSByZXR1cm4gbnVsbDtlbHNlIHJldHVybiBkfSx4PXtfX2lzVGVsZXBvcnQ6ITAscHJvY2VzcyhpLGwsZCxfLEEsQyxrLEwsSCx0ZSl7dmFye21jOmdlLHBjOmtlLHBiYzp1ZSxvOntpbnNlcnQ6UGUscXVlcnlTZWxlY3RvcjpXZSxjcmVhdGVUZXh0OnV0LGNyZWF0ZUNvbW1lbnQ6UWV9fT10ZSxJZT1NbyhsLnByb3BzKSx7c2hhcGVGbGFnOnBlLGNoaWxkcmVuOl9lLGR5bmFtaWNDaGlsZHJlbjpMZX09bDtpZihpPT1udWxsKXt2YXIgQWU9bC5lbD11dCgiIixkKSxFdD1sLmFuY2hvcj11dCgiIixkKTtQZShBZSxkLF8pLFBlKEV0LGQsXyk7dmFyIEF0PWwudGFyZ2V0PXYobC5wcm9wcyxXZSksSmU9bC50YXJnZXRBbmNob3I9dXQoIiIsZCk7QXQmJihQZShKZSxBdCksaz1rfHx2YShBdCkpO3ZhciB4dD0oWWUsS2UpPT57cGUmMTYmJmdlKF9lLFllLEtlLEEsQyxrLEwsSCl9O0llP3h0KGQsRXQpOkF0JiZ4dChBdCxKZSl9ZWxzZXtsLmVsPWkuZWw7dmFyIE09bC5hbmNob3I9aS5hbmNob3Isaj1sLnRhcmdldD1pLnRhcmdldCxhZT1sLnRhcmdldEFuY2hvcj1pLnRhcmdldEFuY2hvcixuZT1NbyhpLnByb3BzKSxpZT1uZT9kOmosVmU9bmU/TTphZTtpZihrPWt8fHZhKGopLExlPyh1ZShpLmR5bmFtaWNDaGlsZHJlbixMZSxpZSxBLEMsayxMKSxjbyhpLGwsITApKTpIfHxrZShpLGwsaWUsVmUsQSxDLGssTCwhMSksSWUpbmV8fCQobCxkLE0sdGUsMSk7ZWxzZSBpZigobC5wcm9wcyYmbC5wcm9wcy50bykhPT0oaS5wcm9wcyYmaS5wcm9wcy50bykpe3ZhciBydD1sLnRhcmdldD12KGwucHJvcHMsV2UpO3J0JiYkKGwscnQsbnVsbCx0ZSwwKX1lbHNlIG5lJiYkKGwsaixhZSx0ZSwxKX1KKGwpfSxyZW1vdmUoaSxsLGQsXyxBLEMpe3Zhcnt1bTprLG86e3JlbW92ZTpMfX09QSx7c2hhcGVGbGFnOkgsY2hpbGRyZW46dGUsYW5jaG9yOmdlLHRhcmdldEFuY2hvcjprZSx0YXJnZXQ6dWUscHJvcHM6UGV9PWk7aWYodWUmJkwoa2UpLChDfHwhTW8oUGUpKSYmKEwoZ2UpLEgmMTYpKWZvcih2YXIgV2U9MDtXZTx0ZS5sZW5ndGg7V2UrKyl7dmFyIHV0PXRlW1dlXTtrKHV0LGwsZCwhMCwhIXV0LmR5bmFtaWNDaGlsZHJlbil9fSxtb3ZlOiQsaHlkcmF0ZTpVfTtmdW5jdGlvbiAkKGksbCxkLF8pe3ZhcntvOntpbnNlcnQ6QX0sbTpDfT1fLGs9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOjI7az09PTAmJkEoaS50YXJnZXRBbmNob3IsbCxkKTt2YXJ7ZWw6TCxhbmNob3I6SCxzaGFwZUZsYWc6dGUsY2hpbGRyZW46Z2UscHJvcHM6a2V9PWksdWU9az09PTI7aWYodWUmJkEoTCxsLGQpLCghdWV8fE1vKGtlKSkmJnRlJjE2KWZvcih2YXIgUGU9MDtQZTxnZS5sZW5ndGg7UGUrKylDKGdlW1BlXSxsLGQsMik7dWUmJkEoSCxsLGQpfWZ1bmN0aW9uIFUoaSxsLGQsXyxBLEMsayxMKXt2YXJ7bzp7bmV4dFNpYmxpbmc6SCxwYXJlbnROb2RlOnRlLHF1ZXJ5U2VsZWN0b3I6Z2V9fT1rLGtlPWwudGFyZ2V0PXYobC5wcm9wcyxnZSk7aWYoa2Upe3ZhciB1ZT1rZS5fbHBhfHxrZS5maXJzdENoaWxkO2lmKGwuc2hhcGVGbGFnJjE2KWlmKE1vKGwucHJvcHMpKWwuYW5jaG9yPUwoSChpKSxsLHRlKGkpLGQsXyxBLEMpLGwudGFyZ2V0QW5jaG9yPXVlO2Vsc2V7bC5hbmNob3I9SChpKTtmb3IodmFyIFBlPXVlO1BlOylpZihQZT1IKFBlKSxQZSYmUGUubm9kZVR5cGU9PT04JiZQZS5kYXRhPT09InRlbGVwb3J0IGFuY2hvciIpe2wudGFyZ2V0QW5jaG9yPVBlLGtlLl9scGE9bC50YXJnZXRBbmNob3ImJkgobC50YXJnZXRBbmNob3IpO2JyZWFrfUwodWUsbCxrZSxkLF8sQSxDKX1KKGwpfXJldHVybiBsLmFuY2hvciYmSChsLmFuY2hvcil9dmFyIFo9eDtmdW5jdGlvbiBKKGkpe3ZhciBsPWkuY3R4O2lmKGwmJmwudXQpe2Zvcih2YXIgZD1pLmNoaWxkcmVuWzBdLmVsO2QhPT1pLnRhcmdldEFuY2hvcjspZC5ub2RlVHlwZT09PTEmJmQuc2V0QXR0cmlidXRlKCJkYXRhLXYtb3duZXIiLGwudWlkKSxkPWQubmV4dFNpYmxpbmc7bC51dCgpfX12YXIgZWU9U3ltYm9sKHZvaWQgMCksY2U9U3ltYm9sKHZvaWQgMCksaGU9U3ltYm9sKHZvaWQgMCksVGU9U3ltYm9sKHZvaWQgMCksZmU9W10sd2U9bnVsbDtmdW5jdGlvbiBsdCgpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTtmZS5wdXNoKHdlPWk/bnVsbDpbXSl9ZnVuY3Rpb24gcHQoKXtmZS5wb3AoKSx3ZT1mZVtmZS5sZW5ndGgtMV18fG51bGx9dmFyIGp0PTE7ZnVuY3Rpb24geXQoaSl7anQrPWl9ZnVuY3Rpb24gSGUoaSl7cmV0dXJuIGkuZHluYW1pY0NoaWxkcmVuPWp0PjA/d2V8fGguRU1QVFlfQVJSOm51bGwscHQoKSxqdD4wJiZ3ZSYmd2UucHVzaChpKSxpfWZ1bmN0aW9uIER0KGksbCxkLF8sQSxDKXtyZXR1cm4gSGUoJHQoaSxsLGQsXyxBLEMsITApKX1mdW5jdGlvbiB2bihpLGwsZCxfLEEpe3JldHVybiBIZShadChpLGwsZCxfLEEsITApKX1mdW5jdGlvbiBxdChpKXtyZXR1cm4gaT9pLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gZHQoaSxsKXtyZXR1cm4gaS50eXBlPT09bC50eXBlJiZpLmtleT09PWwua2V5fWZ1bmN0aW9uIHJuKGkpe312YXIgTG49Il9fdkludGVybmFsIixKdD1pPT57dmFye2tleTpsfT1pO3JldHVybiBsIT1udWxsP2w6bnVsbH0senQ9aT0+e3ZhcntyZWY6bCxyZWZfa2V5OmQscmVmX2ZvcjpffT1pO3JldHVybiBsIT1udWxsP2guaXNTdHJpbmcobCl8fEUuaXNSZWYobCl8fGguaXNGdW5jdGlvbihsKT97aTpfbixyOmwsazpkLGY6ISFffTpsOm51bGx9O2Z1bmN0aW9uICR0KGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsXz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOmk9PT1lZT8wOjEsaz1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEsTD1hcmd1bWVudHMubGVuZ3RoPjcmJmFyZ3VtZW50c1s3XSE9PXZvaWQgMD9hcmd1bWVudHNbN106ITEsSD17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTppLHByb3BzOmwsa2V5OmwmJkp0KGwpLHJlZjpsJiZ6dChsKSxzY29wZUlkOmJyLHNsb3RTY29wZUlkczpudWxsLGNoaWxkcmVuOmQsY29tcG9uZW50Om51bGwsc3VzcGVuc2U6bnVsbCxzc0NvbnRlbnQ6bnVsbCxzc0ZhbGxiYWNrOm51bGwsZGlyczpudWxsLHRyYW5zaXRpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOkMscGF0Y2hGbGFnOl8sZHluYW1pY1Byb3BzOkEsZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGN0eDpfbn07cmV0dXJuIEw/KEduKEgsZCksQyYxMjgmJmkubm9ybWFsaXplKEgpKTpkJiYoSC5zaGFwZUZsYWd8PWguaXNTdHJpbmcoZCk/ODoxNiksanQ+MCYmIWsmJndlJiYoSC5wYXRjaEZsYWc+MHx8QyY2KSYmSC5wYXRjaEZsYWchPT0zMiYmd2UucHVzaChIKSxIfXZhciBadD1lYTtmdW5jdGlvbiBlYShpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLF89YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsQT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxDPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMTtpZigoIWl8fGk9PT1yZSkmJihpPWhlKSxxdChpKSl7dmFyIGs9aWkoaSxsLCEwKTtyZXR1cm4gZCYmR24oayxkKSxqdD4wJiYhQyYmd2UmJihrLnNoYXBlRmxhZyY2P3dlW3dlLmluZGV4T2YoaSldPWs6d2UucHVzaChrKSksay5wYXRjaEZsYWd8PS0yLGt9aWYoeW8oaSkmJihpPWkuX192Y2NPcHRzKSxsKXtsPXBpKGwpO3ZhcntjbGFzczpMLHN0eWxlOkh9PWw7TCYmIWguaXNTdHJpbmcoTCkmJihsLmNsYXNzPWgubm9ybWFsaXplQ2xhc3MoTCkpLGguaXNPYmplY3QoSCkmJihFLmlzUHJveHkoSCkmJiFoLmlzQXJyYXkoSCkmJihIPWguZXh0ZW5kKHt9LEgpKSxsLnN0eWxlPWgubm9ybWFsaXplU3R5bGUoSCkpfXZhciB0ZT1oLmlzU3RyaW5nKGkpPzE6cG8oaSk/MTI4OnBhKGkpPzY0OmguaXNPYmplY3QoaSk/NDpoLmlzRnVuY3Rpb24oaSk/MjowO3JldHVybiAkdChpLGwsZCxfLEEsdGUsQywhMCl9ZnVuY3Rpb24gcGkoaSl7cmV0dXJuIGk/RS5pc1Byb3h5KGkpfHxMbiBpbiBpP2guZXh0ZW5kKHt9LGkpOmk6bnVsbH1mdW5jdGlvbiBpaShpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSx7cHJvcHM6XyxyZWY6QSxwYXRjaEZsYWc6QyxjaGlsZHJlbjprfT1pLEw9bD9DcihffHx7fSxsKTpfLEg9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6aS50eXBlLHByb3BzOkwsa2V5OkwmJkp0KEwpLHJlZjpsJiZsLnJlZj9kJiZBP2guaXNBcnJheShBKT9BLmNvbmNhdCh6dChsKSk6W0EsenQobCldOnp0KGwpOkEsc2NvcGVJZDppLnNjb3BlSWQsc2xvdFNjb3BlSWRzOmkuc2xvdFNjb3BlSWRzLGNoaWxkcmVuOmssdGFyZ2V0OmkudGFyZ2V0LHRhcmdldEFuY2hvcjppLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDppLnN0YXRpY0NvdW50LHNoYXBlRmxhZzppLnNoYXBlRmxhZyxwYXRjaEZsYWc6bCYmaS50eXBlIT09ZWU/Qz09PS0xPzE2OkN8MTY6QyxkeW5hbWljUHJvcHM6aS5keW5hbWljUHJvcHMsZHluYW1pY0NoaWxkcmVuOmkuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6aS5hcHBDb250ZXh0LGRpcnM6aS5kaXJzLHRyYW5zaXRpb246aS50cmFuc2l0aW9uLGNvbXBvbmVudDppLmNvbXBvbmVudCxzdXNwZW5zZTppLnN1c3BlbnNlLHNzQ29udGVudDppLnNzQ29udGVudCYmaWkoaS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6aS5zc0ZhbGxiYWNrJiZpaShpLnNzRmFsbGJhY2spLGVsOmkuZWwsYW5jaG9yOmkuYW5jaG9yLGN0eDppLmN0eCxjZTppLmNlfTtyZXR1cm4gSH1mdW5jdGlvbiBRaSgpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiICIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gWnQoY2UsbnVsbCxpLGwpfWZ1bmN0aW9uIGphKGksbCl7dmFyIGQ9WnQoVGUsbnVsbCxpKTtyZXR1cm4gZC5zdGF0aWNDb3VudD1sLGR9ZnVuY3Rpb24gem4oKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGw/KGx0KCksdm4oaGUsbnVsbCxpKSk6WnQoaGUsbnVsbCxpKX1mdW5jdGlvbiBXbihpKXtyZXR1cm4gaT09bnVsbHx8dHlwZW9mIGk9PSJib29sZWFuIj9adChoZSk6aC5pc0FycmF5KGkpP1p0KGVlLG51bGwsaS5zbGljZSgpKTp0eXBlb2YgaT09Im9iamVjdCI/TnIoaSk6WnQoY2UsbnVsbCxTdHJpbmcoaSkpfWZ1bmN0aW9uIE5yKGkpe3JldHVybiBpLmVsPT09bnVsbCYmaS5wYXRjaEZsYWchPT0tMXx8aS5tZW1vP2k6aWkoaSl9ZnVuY3Rpb24gR24oaSxsKXt2YXIgZD0wLHtzaGFwZUZsYWc6X309aTtpZihsPT1udWxsKWw9bnVsbDtlbHNlIGlmKGguaXNBcnJheShsKSlkPTE2O2Vsc2UgaWYodHlwZW9mIGw9PSJvYmplY3QiKWlmKF8mKDF8NjQpKXt2YXIgQT1sLmRlZmF1bHQ7QSYmKEEuX2MmJihBLl9kPSExKSxHbihpLEEoKSksQS5fYyYmKEEuX2Q9ITApKTtyZXR1cm59ZWxzZXtkPTMyO3ZhciBDPWwuXzshQyYmIShMbiBpbiBsKT9sLl9jdHg9X246Qz09PTMmJl9uJiYoX24uc2xvdHMuXz09PTE/bC5fPTE6KGwuXz0yLGkucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBoLmlzRnVuY3Rpb24obCk/KGw9e2RlZmF1bHQ6bCxfY3R4Ol9ufSxkPTMyKToobD1TdHJpbmcobCksXyY2ND8oZD0xNixsPVtRaShsKV0pOmQ9OCk7aS5jaGlsZHJlbj1sLGkuc2hhcGVGbGFnfD1kfWZ1bmN0aW9uIENyKCl7Zm9yKHZhciBpPXt9LGw9MDtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXt2YXIgZD1sPDB8fGFyZ3VtZW50cy5sZW5ndGg8PWw/dm9pZCAwOmFyZ3VtZW50c1tsXTtmb3IodmFyIF8gaW4gZClpZihfPT09ImNsYXNzIilpLmNsYXNzIT09ZC5jbGFzcyYmKGkuY2xhc3M9aC5ub3JtYWxpemVDbGFzcyhbaS5jbGFzcyxkLmNsYXNzXSkpO2Vsc2UgaWYoXz09PSJzdHlsZSIpaS5zdHlsZT1oLm5vcm1hbGl6ZVN0eWxlKFtpLnN0eWxlLGQuc3R5bGVdKTtlbHNlIGlmKGguaXNPbihfKSl7dmFyIEE9aVtfXSxDPWRbX107QyYmQSE9PUMmJiEoaC5pc0FycmF5KEEpJiZBLmluY2x1ZGVzKEMpKSYmKGlbX109QT9bXS5jb25jYXQoQSxDKTpDKX1lbHNlIF8hPT0iIiYmKGlbX109ZFtfXSl9cmV0dXJuIGl9ZnVuY3Rpb24gcXIoaSxsLGQpe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO1R0KGksbCw3LFtkLF9dKX12YXIgdGE9Qm8oKSxjcz0wO2Z1bmN0aW9uIGxuKGksbCxkKXt2YXIgXz1pLnR5cGUsQT0obD9sLmFwcENvbnRleHQ6aS5hcHBDb250ZXh0KXx8dGEsQz17dWlkOmNzKyssdm5vZGU6aSx0eXBlOl8scGFyZW50OmwsYXBwQ29udGV4dDpBLHJvb3Q6bnVsbCxuZXh0Om51bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLHNjb3BlOm5ldyBFLkVmZmVjdFNjb3BlKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGV4cG9zZWQ6bnVsbCxleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOmw/bC5wcm92aWRlczpPYmplY3QuY3JlYXRlKEEucHJvdmlkZXMpLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10sY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZXM6bnVsbCxwcm9wc09wdGlvbnM6RGEoXyxBKSxlbWl0c09wdGlvbnM6Vm4oXyxBKSxlbWl0Om51bGwsZW1pdHRlZDpudWxsLHByb3BzRGVmYXVsdHM6aC5FTVBUWV9PQkosaW5oZXJpdEF0dHJzOl8uaW5oZXJpdEF0dHJzLGN0eDpoLkVNUFRZX09CSixkYXRhOmguRU1QVFlfT0JKLHByb3BzOmguRU1QVFlfT0JKLGF0dHJzOmguRU1QVFlfT0JKLHNsb3RzOmguRU1QVFlfT0JKLHJlZnM6aC5FTVBUWV9PQkosc2V0dXBTdGF0ZTpoLkVNUFRZX09CSixzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpkLHN1c3BlbnNlSWQ6ZD9kLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIEMuY3R4PXtfOkN9LEMucm9vdD1sP2wucm9vdDpDLEMuZW1pdD1hci5iaW5kKG51bGwsQyksaS5jZSYmaS5jZShDKSxDfXZhciB5bj1udWxsLFluPSgpPT55bnx8X24sWm49aT0+e3luPWksaS5zY29wZS5vbigpfSxUaT0oKT0+e3luJiZ5bi5zY29wZS5vZmYoKSx5bj1udWxsfTtmdW5jdGlvbiB1cyhpKXtyZXR1cm4gaS52bm9kZS5zaGFwZUZsYWcmNH15LmlzSW5TU1JDb21wb25lbnRTZXR1cD0hMTtmdW5jdGlvbiB6YShpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7eS5pc0luU1NSQ29tcG9uZW50U2V0dXA9bDt2YXJ7cHJvcHM6ZCxjaGlsZHJlbjpffT1pLnZub2RlLEE9dXMoaSk7aXMoaSxkLEEsbCksb3MoaSxfKTt2YXIgQz1BP0lhKGksbCk6dm9pZCAwO3JldHVybiB5LmlzSW5TU1JDb21wb25lbnRTZXR1cD0hMSxDfWZ1bmN0aW9uIElhKGksbCl7dmFyIGQ9aS50eXBlO2kuYWNjZXNzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSxpLnByb3h5PUUubWFya1JhdyhuZXcgUHJveHkoaS5jdHgsWCkpO3ZhcntzZXR1cDpffT1kO2lmKF8pe3ZhciBBPWkuc2V0dXBDb250ZXh0PV8ubGVuZ3RoPjE/TG8oaSk6bnVsbDtabihpKSxFLnBhdXNlVHJhY2tpbmcoKTt2YXIgQz1VdChfLGksMCxbaS5wcm9wcyxBXSk7aWYoRS5yZXNldFRyYWNraW5nKCksVGkoKSxoLmlzUHJvbWlzZShDKSl7aWYoQy50aGVuKFRpLFRpKSxsKXJldHVybiBDLnRoZW4oaz0+e25hKGksayxsKX0pLmNhdGNoKGs9PntQKGssaSwwKX0pO2kuYXN5bmNEZXA9Q31lbHNlIG5hKGksQyxsKX1lbHNlIEdhKGksbCl9ZnVuY3Rpb24gbmEoaSxsLGQpe2guaXNGdW5jdGlvbihsKT9pLnR5cGUuX19zc3JJbmxpbmVSZW5kZXI/aS5zc3JSZW5kZXI9bDppLnJlbmRlcj1sOmguaXNPYmplY3QobCkmJihpLnNldHVwU3RhdGU9RS5wcm94eVJlZnMobCkpLEdhKGksZCl9dmFyIHVvLFdhO2Z1bmN0aW9uIGZzKGkpe3VvPWksV2E9bD0+e2wucmVuZGVyLl9yYyYmKGwud2l0aFByb3h5PW5ldyBQcm94eShsLmN0eCxzZSkpfX12YXIgSnI9KCk9PiF1bztmdW5jdGlvbiBHYShpLGwsZCl7dmFyIF89aS50eXBlO2lmKCFpLnJlbmRlcil7aWYoIWwmJnVvJiYhXy5yZW5kZXIpe3ZhciBBPV8udGVtcGxhdGV8fFNyKGkpLnRlbXBsYXRlO2lmKEEpe3Zhcntpc0N1c3RvbUVsZW1lbnQ6Qyxjb21waWxlck9wdGlvbnM6a309aS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczpMLGNvbXBpbGVyT3B0aW9uczpIfT1fLHRlPWguZXh0ZW5kKGguZXh0ZW5kKHtpc0N1c3RvbUVsZW1lbnQ6QyxkZWxpbWl0ZXJzOkx9LGspLEgpO18ucmVuZGVyPXVvKEEsdGUpfX1pLnJlbmRlcj1fLnJlbmRlcnx8aC5OT09QLFdhJiZXYShpKX1abihpKSxFLnBhdXNlVHJhY2tpbmcoKSxtdChpKSxFLnJlc2V0VHJhY2tpbmcoKSxUaSgpfWZ1bmN0aW9uIFlhKGkpe3JldHVybiBuZXcgUHJveHkoaS5hdHRycyx7Z2V0KGwsZCl7cmV0dXJuIEUudHJhY2soaSwiZ2V0IiwiJGF0dHJzIiksbFtkXX19KX1mdW5jdGlvbiBMbyhpKXt2YXIgbD1fPT57aS5leHBvc2VkPV98fHt9fSxkO3JldHVybntnZXQgYXR0cnMoKXtyZXR1cm4gZHx8KGQ9WWEoaSkpfSxzbG90czppLnNsb3RzLGVtaXQ6aS5lbWl0LGV4cG9zZTpsfX1mdW5jdGlvbiBVaShpKXtpZihpLmV4cG9zZWQpcmV0dXJuIGkuZXhwb3NlUHJveHl8fChpLmV4cG9zZVByb3h5PW5ldyBQcm94eShFLnByb3h5UmVmcyhFLm1hcmtSYXcoaS5leHBvc2VkKSkse2dldChsLGQpe2lmKGQgaW4gbClyZXR1cm4gbFtkXTtpZihkIGluIGFvKXJldHVybiBhb1tkXShpKX0saGFzKGwsZCl7cmV0dXJuIGQgaW4gbHx8ZCBpbiBhb319KSl9ZnVuY3Rpb24gRW8oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBoLmlzRnVuY3Rpb24oaSk/aS5kaXNwbGF5TmFtZXx8aS5uYW1lOmkubmFtZXx8bCYmaS5fX25hbWV9ZnVuY3Rpb24geW8oaSl7cmV0dXJuIGguaXNGdW5jdGlvbihpKSYmIl9fdmNjT3B0cyJpbiBpfXZhciBkcz0oaSxsKT0+RS5jb21wdXRlZChpLGwseS5pc0luU1NSQ29tcG9uZW50U2V0dXApO2Z1bmN0aW9uIERvKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24geHMoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBocyhpKXt9ZnVuY3Rpb24gQnMoaSxsKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBOZSgpe3JldHVybiBJdCgpLnNsb3RzfWZ1bmN0aW9uIGt0KCl7cmV0dXJuIEl0KCkuYXR0cnN9ZnVuY3Rpb24gSXQoKXt2YXIgaT1ZbigpO3JldHVybiBpLnNldHVwQ29udGV4dHx8KGkuc2V0dXBDb250ZXh0PUxvKGkpKX1mdW5jdGlvbiBPbihpLGwpe3ZhciBkPWguaXNBcnJheShpKT9pLnJlZHVjZSgoQyxrKT0+KENba109e30sQykse30pOmk7Zm9yKHZhciBfIGluIGwpe3ZhciBBPWRbX107QT9oLmlzQXJyYXkoQSl8fGguaXNGdW5jdGlvbihBKT9kW19dPXt0eXBlOkEsZGVmYXVsdDpsW19dfTpBLmRlZmF1bHQ9bFtfXTpBPT09bnVsbCYmKGRbX109e2RlZmF1bHQ6bFtfXX0pfXJldHVybiBkfWZ1bmN0aW9uIEFyKGksbCl7dmFyIGQ9e30sXz1mdW5jdGlvbihDKXtsLmluY2x1ZGVzKEMpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxDLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+aVtDXX0pfTtmb3IodmFyIEEgaW4gaSlfKEEpO3JldHVybiBkfWZ1bmN0aW9uIFBpKGkpe3ZhciBsPVluKCksZD1pKCk7cmV0dXJuIFRpKCksaC5pc1Byb21pc2UoZCkmJihkPWQuY2F0Y2goXz0+e3Rocm93IFpuKGwpLF99KSksW2QsKCk9PlpuKGwpXX1mdW5jdGlvbiBlbyhpLGwsZCl7dmFyIF89YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gXz09PTI/aC5pc09iamVjdChsKSYmIWguaXNBcnJheShsKT9xdChsKT9adChpLG51bGwsW2xdKTpadChpLGwpOlp0KGksbnVsbCxsKTooXz4zP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOl89PT0zJiZxdChkKSYmKGQ9W2RdKSxadChpLGwsZCkpfXZhciBGbz1TeW1ib2woIiIpLE5hPSgpPT57e3ZhciBpPVFuKEZvKTtyZXR1cm4gaX19O2Z1bmN0aW9uIHJhKCl7fWZ1bmN0aW9uIGdzKGksbCxkLF8pe3ZhciBBPWRbX107aWYoQSYmcHMoQSxpKSlyZXR1cm4gQTt2YXIgQz1sKCk7cmV0dXJuIEMubWVtbz1pLnNsaWNlKCksZFtfXT1DfWZ1bmN0aW9uIHBzKGksbCl7dmFyIGQ9aS5tZW1vO2lmKGQubGVuZ3RoIT1sLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIF89MDtfPGQubGVuZ3RoO18rKylpZihoLmhhc0NoYW5nZWQoZFtfXSxsW19dKSlyZXR1cm4hMTtyZXR1cm4ganQ+MCYmd2UmJndlLnB1c2goaSksITB9dmFyIGRsPSIzLjIuNDciLCRsPXtjcmVhdGVDb21wb25lbnRJbnN0YW5jZTpsbixzZXR1cENvbXBvbmVudDp6YSxyZW5kZXJDb21wb25lbnRSb290OlJpLHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTplaSxpc1ZOb2RlOnF0LG5vcm1hbGl6ZVZOb2RlOldufSxIbD0kbCxNcz1udWxsLFZvPW51bGw7ZnVuY3Rpb24gVW8oaSxsKXtyZXR1cm4gaT09PSJpbnB1dCI/bmV3IFIuVW5pSW5wdXRFbGVtZW50KGksbCk6aT09PSJ0ZXh0YXJlYSI/bmV3IFIuVW5pVGV4dEFyZWFFbGVtZW50KGksbCk6bmV3IFIuVW5pRWxlbWVudChpLGwpfWZ1bmN0aW9uIGlhKGksbCl7cmV0dXJuIG5ldyBSLlVuaVRleHROb2RlKGksbCl9ZnVuY3Rpb24gcWEoaSxsKXtyZXR1cm4gbmV3IFIuVW5pQ29tbWVudE5vZGUoaSxsKX12YXIgdnMsJG89e2luc2VydDooaSxsLGQpPT57bC5pbnNlcnRCZWZvcmUoaSxkfHxudWxsKX0scmVtb3ZlOmk9Pnt2YXIgbD1pLnBhcmVudE5vZGU7bCYmbC5yZW1vdmVDaGlsZChpKX0sY3JlYXRlRWxlbWVudDooaSxsKT0+VW8oaSxsKSxjcmVhdGVUZXh0OihpLGwpPT5pYShpLGwpLGNyZWF0ZUNvbW1lbnQ6KGksbCk9PnFhKGksbCksc2V0VGV4dDooaSxsKT0+e2kubm9kZVZhbHVlPWx9LHNldEVsZW1lbnRUZXh0OihpLGwpPT57aS50ZXh0Q29udGVudD1sfSxwYXJlbnROb2RlOmk9PmkucGFyZW50Tm9kZSxuZXh0U2libGluZzppPT5pLm5leHRTaWJsaW5nLHNldFNjb3BlSWQoaSxsKXtpLnNldEF0dHJpYnV0ZShsLCIiKX0sY2xvbmVOb2RlKGkpe3ZhciBsPWkuY2xvbmVOb2RlKCEwKTtyZXR1cm4iX3ZhbHVlImluIGkmJihsLl92YWx1ZT1pLl92YWx1ZSksbH0saW5zZXJ0U3RhdGljQ29udGVudChpLGwsZCl7dmFyIF89dnN8fCh2cz1VbygiZGl2IikpO18uaW5uZXJIVE1MPWk7Zm9yKHZhciBBPV8uZmlyc3RDaGlsZCxDPUEsaz1DO0M7KWs9Qywkby5pbnNlcnQoQyxsLGQpLEM9Xy5maXJzdENoaWxkO3JldHVybltBLGtdfX07ZnVuY3Rpb24gTHMoaSxsKXtsPT1udWxsJiYobD0iIiksaS5zZXRBdHRyaWJ1dGUoImNsYXNzIixsKX1mdW5jdGlvbiBqbChpLGwsZCl7aWYoIWQpaS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7ZWxzZSBpZihoLmlzU3RyaW5nKGQpKWwhPT1kJiZpLnNldEF0dHJpYnV0ZSgic3R5bGUiLGQpO2Vsc2V7dmFyIF89e30sQT1sJiYhaC5pc1N0cmluZyhsKTtpZihBKXtmb3IodmFyIEMgaW4gbClkW0NdPT1udWxsJiYoX1tDXT0iIik7Zm9yKHZhciBrIGluIGQpe3ZhciBMPWRba107TCE9PWxba10mJihfW2tdPUwpfX1lbHNlIGZvcih2YXIgSCBpbiBkKV9bSF09ZFtIXTtPYmplY3Qua2V5cyhfKS5sZW5ndGgmJmkuc2V0QXR0cmlidXRlKCJzdHlsZSIsXyl9fWZ1bmN0aW9uIERzKGksbCxkKXtkPT1udWxsP2kucmVtb3ZlQXR0cmlidXRlKGwpOmkuc2V0QXR0cmlidXRlKGwsZCl9ZnVuY3Rpb24gbXMoaSxsLGQsXyl7aS5hZGRFdmVudExpc3RlbmVyKGwsZCxfKX1mdW5jdGlvbiBobChpLGwsZCxfKXtpLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxkLF8pfWZ1bmN0aW9uIEZzKGksbCxkLF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9aS5fdmVpfHwoaS5fdmVpPXt9KSxrPUNbbF07aWYoXyYmaylrLnZhbHVlPV87ZWxzZXt2YXJbTCxIXT1fcyhsKTtpZihfKXt2YXIgdGU9Q1tsXT1WcyhfLEEpO21zKGksTCx0ZSxIKX1lbHNlIGsmJihobChpLEwsayxIKSxDW2xdPXZvaWQgMCl9fXZhciBKYT0vKD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gX3MoaSl7dmFyIGw7aWYoSmEudGVzdChpKSl7bD17fTtmb3IodmFyIGQ7ZD1pLm1hdGNoKEphKTspaT1pLnNsaWNlKDAsaS5sZW5ndGgtZFswXS5sZW5ndGgpLGxbZFswXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5baC5oeXBoZW5hdGUoaS5zbGljZSgyKSksbF19ZnVuY3Rpb24gVnMoaSxsKXt2YXIgZD1BPT57VHQoZC52YWx1ZSxsLDUsW0FdKX07ZC52YWx1ZT1pO3ZhciBfPW5ldyBTZXQ7cmV0dXJuIGguaXNBcnJheShkLnZhbHVlKT9kLnZhbHVlLmZvckVhY2goQT0+e0EubW9kaWZpZXJzJiZBLm1vZGlmaWVycy5mb3JFYWNoKEM9PntfLmFkZChDKX0pfSk6KGQudmFsdWUubW9kaWZpZXJzJiZkLnZhbHVlLm1vZGlmaWVycy5mb3JFYWNoKEE9PntfLmFkZChBKX0pLFVzKGQsbCkpLGQubW9kaWZpZXJzPVsuLi5fXSxkfWZ1bmN0aW9uIFVzKGksbCl7aWYoISFsKXt2YXJ7JHd4c01vZHVsZXM6ZH09bDtpZighIWQpe3ZhciBfPWkudmFsdWUudG9TdHJpbmcoKTshZC5maW5kKEE9Pl8uaW5kZXhPZigiLiIrQSsiLiIpPi0xKXx8KGkud3hzRXZlbnQ9aS52YWx1ZSgpKX19fXZhciBnbD1mdW5jdGlvbihpLGwsZCxfKXt2YXIgQT1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDtzd2l0Y2gobCl7Y2FzZSJjbGFzcyI6THMoaSxfKTticmVhaztjYXNlInN0eWxlIjpqbChpLGQsXyk7YnJlYWs7ZGVmYXVsdDppZihoLmlzT24obCkpaC5pc01vZGVsTGlzdGVuZXIobCl8fEZzKGksbCxkLF8sQSk7ZWxzZXtpZihoLmlzT2JqZWN0KF8pKXt2YXIgQz1kPT09XztpZihfPVIuSlNPTl9QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShfKSxDJiZpLmdldEF0dHJpYnV0ZShsKT09PV8pcmV0dXJufWVsc2UgaWYoZD09PV8pcmV0dXJuO0RzKGksbCxfKX1icmVha319O2Z1bmN0aW9uIEhvKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIkc3R5bGUiO3t2YXIgbD1ZbigpO2lmKCFsKXJldHVybiBoLkVNUFRZX09CSjt2YXIgZD1sLnR5cGUuX19jc3NNb2R1bGVzO2lmKCFkKXJldHVybiBoLkVNUFRZX09CSjt2YXIgXz1kW2ldO3JldHVybiBffHxoLkVNUFRZX09CSn19ZnVuY3Rpb24gS2EoaSl7dmFyIGw9WW4oKTtpZighIWwpe3ZhciBkPSgpPT5tYShsLnN1YlRyZWUsaShsLnByb3h5KSk7Y3IoKCk9PnhpKGQse2ZsdXNoOiJwb3N0In0pKSxlcihkKX19ZnVuY3Rpb24gbWEoaSxsKXtpZihpLnNoYXBlRmxhZyYxMjgpe3ZhciBkPWkuc3VzcGVuc2U7aT1kLmFjdGl2ZUJyYW5jaCxkLnBlbmRpbmdCcmFuY2gmJiFkLmlzSHlkcmF0aW5nJiZkLmVmZmVjdHMucHVzaCgoKT0+e21hKGQuYWN0aXZlQnJhbmNoLGwpfSl9Zm9yKDtpLmNvbXBvbmVudDspaT1pLmNvbXBvbmVudC5zdWJUcmVlO2lmKGkuc2hhcGVGbGFnJjEmJmkuZWwpa2EoaS5lbCxsKTtlbHNlIGlmKGkudHlwZT09PWVlKWkuY2hpbGRyZW4uZm9yRWFjaChDPT5tYShDLGwpKTtlbHNlIGlmKGkudHlwZT09PVRlKWZvcih2YXJ7ZWw6XyxhbmNob3I6QX09aTtfJiYoa2EoXyxsKSxfIT09QSk7KV89Xy5uZXh0U2libGluZ31mdW5jdGlvbiBrYShpLGwpe2lmKGkubm9kZVR5cGU9PT0xKWZvcih2YXIgZCBpbiBsKWkuc2V0QXR0cmlidXRlKCItLSIuY29uY2F0KGQpLGxbZF0pfXZhciBTbz0idHJhbnNpdGlvbiIsb2E9ImFuaW1hdGlvbiIsWmE9KGksbCk9Pnt2YXJ7c2xvdHM6ZH09bDtyZXR1cm4gZW8oTHQsSHMoaSksZCl9O1phLmRpc3BsYXlOYW1lPSJUcmFuc2l0aW9uIjt2YXIgJHM9e25hbWU6U3RyaW5nLHR5cGU6U3RyaW5nLGNzczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGR1cmF0aW9uOltTdHJpbmcsTnVtYmVyLE9iamVjdF0sZW50ZXJGcm9tQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsYXBwZWFyRnJvbUNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsbGVhdmVGcm9tQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmd9LHBsPVphLnByb3BzPWguZXh0ZW5kKHt9LEx0LnByb3BzLCRzKSxhYT1mdW5jdGlvbihpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06W107aC5pc0FycmF5KGkpP2kuZm9yRWFjaChkPT5kKC4uLmwpKTppJiZpKC4uLmwpfSxYYT1pPT5pP2guaXNBcnJheShpKT9pLnNvbWUobD0+bC5sZW5ndGg+MSk6aS5sZW5ndGg+MTohMTtmdW5jdGlvbiBIcyhpKXt2YXIgbD17fTtmb3IodmFyIGQgaW4gaSlkIGluICRzfHwobFtkXT1pW2RdKTtpZihpLmNzcz09PSExKXJldHVybiBsO3ZhcntuYW1lOl89InYiLHR5cGU6QSxkdXJhdGlvbjpDLGVudGVyRnJvbUNsYXNzOms9IiIuY29uY2F0KF8sIi1lbnRlci1mcm9tIiksZW50ZXJBY3RpdmVDbGFzczpMPSIiLmNvbmNhdChfLCItZW50ZXItYWN0aXZlIiksZW50ZXJUb0NsYXNzOkg9IiIuY29uY2F0KF8sIi1lbnRlci10byIpLGFwcGVhckZyb21DbGFzczp0ZT1rLGFwcGVhckFjdGl2ZUNsYXNzOmdlPUwsYXBwZWFyVG9DbGFzczprZT1ILGxlYXZlRnJvbUNsYXNzOnVlPSIiLmNvbmNhdChfLCItbGVhdmUtZnJvbSIpLGxlYXZlQWN0aXZlQ2xhc3M6UGU9IiIuY29uY2F0KF8sIi1sZWF2ZS1hY3RpdmUiKSxsZWF2ZVRvQ2xhc3M6V2U9IiIuY29uY2F0KF8sIi1sZWF2ZS10byIpfT1pLHV0PVFhKEMpLFFlPXV0JiZ1dFswXSxJZT11dCYmdXRbMV0se29uQmVmb3JlRW50ZXI6cGUsb25FbnRlcjpfZSxvbkVudGVyQ2FuY2VsbGVkOkxlLG9uTGVhdmU6QWUsb25MZWF2ZUNhbmNlbGxlZDpFdCxvbkJlZm9yZUFwcGVhcjpBdD1wZSxvbkFwcGVhcjpKZT1fZSxvbkFwcGVhckNhbmNlbGxlZDp4dD1MZX09bCxNPShuZSxpZSxWZSk9PntzYShuZSxpZT9rZTpIKSxzYShuZSxpZT9nZTpMKSxWZSYmVmUoKX0saj0obmUsaWUpPT57c2EobmUsV2UpLHNhKG5lLFBlKSxpZSYmaWUoKX0sYWU9bmU9PihpZSxWZSk9Pnt2YXIgcnQ9bmU/SmU6X2UsWWU9KCk9Pk0oaWUsbmUsVmUpO2FhKHJ0LFtpZSxZZV0pLHZsKCgpPT57c2EoaWUsbmU/dGU6ayksVnIoaWUsbmU/a2U6SCksWGEocnQpfHxqcyhpZSxBLFFlLFllKX0pfTtyZXR1cm4gaC5leHRlbmQobCx7b25CZWZvcmVFbnRlcihuZSl7YWEocGUsW25lXSksVnIobmUsayksVnIobmUsTCl9LG9uQmVmb3JlQXBwZWFyKG5lKXthYShBdCxbbmVdKSxWcihuZSx0ZSksVnIobmUsZ2UpfSxvbkVudGVyOmFlKCExKSxvbkFwcGVhcjphZSghMCksb25MZWF2ZShuZSxpZSl7dmFyIFZlPSgpPT5qKG5lLGllKTtWcihuZSx1ZSksbWwoKSxWcihuZSxQZSksdmwoKCk9PntzYShuZSx1ZSksVnIobmUsV2UpLFhhKEFlKXx8anMobmUsQSxJZSxWZSl9KSxhYShBZSxbbmUsVmVdKX0sb25FbnRlckNhbmNlbGxlZChuZSl7TShuZSwhMSksYWEoTGUsW25lXSl9LG9uQXBwZWFyQ2FuY2VsbGVkKG5lKXtNKG5lLCEwKSxhYSh4dCxbbmVdKX0sb25MZWF2ZUNhbmNlbGxlZChuZSl7aihuZSksYWEoRXQsW25lXSl9fSl9ZnVuY3Rpb24gUWEoaSl7aWYoaT09bnVsbClyZXR1cm4gbnVsbDtpZihoLmlzT2JqZWN0KGkpKXJldHVybltvaShpLmVudGVyKSxvaShpLmxlYXZlKV07dmFyIGw9b2koaSk7cmV0dXJuW2wsbF19ZnVuY3Rpb24gb2koaSl7dmFyIGw9aC50b051bWJlcihpKTtyZXR1cm4gbH1mdW5jdGlvbiBWcihpLGwpe2wuc3BsaXQoL1xzKy8pLmZvckVhY2goZD0+ZCYmaS5jbGFzc0xpc3QuYWRkKGQpKSwoaS5fdnRjfHwoaS5fdnRjPW5ldyBTZXQpKS5hZGQobCl9ZnVuY3Rpb24gc2EoaSxsKXtsLnNwbGl0KC9ccysvKS5mb3JFYWNoKF89Pl8mJmkuY2xhc3NMaXN0LnJlbW92ZShfKSk7dmFye192dGM6ZH09aTtkJiYoZC5kZWxldGUobCksZC5zaXplfHwoaS5fdnRjPXZvaWQgMCkpfWZ1bmN0aW9uIHZsKGkpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShpKX0pfXZhciB6bD0wO2Z1bmN0aW9uIGpzKGksbCxkLF8pe3ZhciBBPWkuX2VuZElkPSsremwsQz0oKT0+e0E9PT1pLl9lbmRJZCYmXygpfTtpZihkKXJldHVybiBzZXRUaW1lb3V0KEMsZCk7dmFye3R5cGU6ayx0aW1lb3V0OkwscHJvcENvdW50Okh9PWJzKGksbCk7aWYoIWspcmV0dXJuIF8oKTt2YXIgdGU9aysiZW5kIixnZT0wLGtlPSgpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKHRlLHVlKSxDKCl9LHVlPVBlPT57UGUudGFyZ2V0PT09aSYmKytnZT49SCYma2UoKX07c2V0VGltZW91dCgoKT0+e2dlPEgmJmtlKCl9LEwrMSksaS5hZGRFdmVudExpc3RlbmVyKHRlLHVlKX1mdW5jdGlvbiBicyhpLGwpe3ZhciBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpLF89V2U9PihkW1dlXXx8IiIpLnNwbGl0KCIsICIpLEE9XyhTbysiRGVsYXkiKSxDPV8oU28rIkR1cmF0aW9uIiksaz16cyhBLEMpLEw9XyhvYSsiRGVsYXkiKSxIPV8ob2ErIkR1cmF0aW9uIiksdGU9enMoTCxIKSxnZT1udWxsLGtlPTAsdWU9MDtsPT09U28/az4wJiYoZ2U9U28sa2U9ayx1ZT1DLmxlbmd0aCk6bD09PW9hP3RlPjAmJihnZT1vYSxrZT10ZSx1ZT1ILmxlbmd0aCk6KGtlPU1hdGgubWF4KGssdGUpLGdlPWtlPjA/az50ZT9TbzpvYTpudWxsLHVlPWdlP2dlPT09U28/Qy5sZW5ndGg6SC5sZW5ndGg6MCk7dmFyIFBlPWdlPT09U28mJi9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLy50ZXN0KGRbU28rIlByb3BlcnR5Il0pO3JldHVybnt0eXBlOmdlLHRpbWVvdXQ6a2UscHJvcENvdW50OnVlLGhhc1RyYW5zZm9ybTpQZX19ZnVuY3Rpb24genMoaSxsKXtmb3IoO2kubGVuZ3RoPGwubGVuZ3RoOylpPWkuY29uY2F0KGkpO3JldHVybiBNYXRoLm1heCguLi5sLm1hcCgoZCxfKT0+V3MoZCkrV3MoaVtfXSkpKX1mdW5jdGlvbiBXcyhpKXtyZXR1cm4gTnVtYmVyKGkuc2xpY2UoMCwtMSkucmVwbGFjZSgiLCIsIi4iKSkqMWUzfWZ1bmN0aW9uIG1sKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0fXZhciBHcz1uZXcgV2Vha01hcCxFcz1uZXcgV2Vha01hcCx5cz17bmFtZToiVHJhbnNpdGlvbkdyb3VwIixwcm9wczpoLmV4dGVuZCh7fSxwbCx7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSksc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxfPVluKCksQT1FcigpLEMsaztyZXR1cm4gZXIoKCk9PntpZighIUMubGVuZ3RoKXt2YXIgTD1pLm1vdmVDbGFzc3x8IiIuY29uY2F0KGkubmFtZXx8InYiLCItbW92ZSIpO2lmKCEhbShDWzBdLmVsLF8udm5vZGUuZWwsTCkpe0MuZm9yRWFjaChibCksQy5mb3JFYWNoKGEpO3ZhciBIPUMuZmlsdGVyKHUpO21sKCksSC5mb3JFYWNoKHRlPT57dmFyIGdlPXRlLmVsLGtlPWdlLnN0eWxlO1ZyKGdlLEwpLGtlLnRyYW5zZm9ybT1rZS53ZWJraXRUcmFuc2Zvcm09a2UudHJhbnNpdGlvbkR1cmF0aW9uPSIiO3ZhciB1ZT1nZS5fbW92ZUNiPVBlPT57UGUmJlBlLnRhcmdldCE9PWdlfHwoIVBlfHwvdHJhbnNmb3JtJC8udGVzdChQZS5wcm9wZXJ0eU5hbWUpKSYmKGdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHVlKSxnZS5fbW92ZUNiPW51bGwsc2EoZ2UsTCkpfTtnZS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix1ZSl9KX19fSksKCk9Pnt2YXIgTD1FLnRvUmF3KGkpLEg9SHMoTCksdGU9TC50YWd8fGVlO0M9ayxrPWQuZGVmYXVsdD96cihkLmRlZmF1bHQoKSk6W107Zm9yKHZhciBnZT0wO2dlPGsubGVuZ3RoO2dlKyspe3ZhciBrZT1rW2dlXTtrZS5rZXkhPW51bGwmJmpyKGtlLG5pKGtlLEgsQSxfKSl9aWYoQylmb3IodmFyIHVlPTA7dWU8Qy5sZW5ndGg7dWUrKyl7dmFyIFBlPUNbdWVdO2pyKFBlLG5pKFBlLEgsQSxfKSksR3Muc2V0KFBlLFBlLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKX1yZXR1cm4gWnQodGUsbnVsbCxrKX19fSxTcz1pPT5kZWxldGUgaS5tb2RlO3lzLnByb3BzO3ZhciBfbD15cztmdW5jdGlvbiBibChpKXt2YXIgbD1pLmVsO2wuX21vdmVDYiYmbC5fbW92ZUNiKCksbC5fZW50ZXJDYiYmbC5fZW50ZXJDYigpfWZ1bmN0aW9uIGEoaSl7RXMuc2V0KGksaS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9ZnVuY3Rpb24gdShpKXt2YXIgbD1Hcy5nZXQoaSksZD1Fcy5nZXQoaSksXz1sLmxlZnQtZC5sZWZ0LEE9bC50b3AtZC50b3A7aWYoX3x8QSl7dmFyIEM9aS5lbC5zdHlsZTtyZXR1cm4gQy50cmFuc2Zvcm09Qy53ZWJraXRUcmFuc2Zvcm09InRyYW5zbGF0ZSgiLmNvbmNhdChfLCJweCwiKS5jb25jYXQoQSwicHgpIiksQy50cmFuc2l0aW9uRHVyYXRpb249IjBzIixpfX1mdW5jdGlvbiBtKGksbCxkKXt2YXIgXz1pLmNsb25lTm9kZSgpO2kuX3Z0YyYmaS5fdnRjLmZvckVhY2goaz0+e2suc3BsaXQoL1xzKy8pLmZvckVhY2goTD0+TCYmXy5jbGFzc0xpc3QucmVtb3ZlKEwpKX0pLGQuc3BsaXQoL1xzKy8pLmZvckVhY2goaz0+ayYmXy5jbGFzc0xpc3QuYWRkKGspKSxfLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBBPWwubm9kZVR5cGU9PT0xP2w6bC5wYXJlbnROb2RlO0EuYXBwZW5kQ2hpbGQoXyk7dmFye2hhc1RyYW5zZm9ybTpDfT1icyhfKTtyZXR1cm4gQS5yZW1vdmVDaGlsZChfKSxDfXZhciBTPWk9Pnt2YXIgbD1pLnByb3BzWyJvblVwZGF0ZTptb2RlbFZhbHVlIl07cmV0dXJuIGguaXNBcnJheShsKT9kPT5oLmludm9rZUFycmF5Rm5zKGwsZCk6bH0sST17Y3JlYXRlZChpLGwsZCl7dmFye3ZhbHVlOl8sbW9kaWZpZXJzOnt0cmltOkEsbnVtYmVyOkN9fT1sO2kudmFsdWU9Xz09bnVsbD8iIjpfLGkuX2Fzc2lnbj1TKGQpLG1zKGksImlucHV0IixrPT57dmFyIEw9ay5kZXRhaWwudmFsdWUsSD1pLnBhZ2VOb2RlO2kucGFnZU5vZGU9bnVsbCxpLnZhbHVlPUwsaS5wYWdlTm9kZT1ILEE/TD1MLnRyaW0oKTpDJiYoTD1oLnRvTnVtYmVyKEwpKSxpLl9hc3NpZ24oTCl9KX0sYmVmb3JlVXBkYXRlKGksbCxkKXt2YXJ7dmFsdWU6X309bDtpLl9hc3NpZ249UyhkKTt2YXIgQT1fPT1udWxsPyIiOl87aS52YWx1ZSE9PUEmJihpLnZhbHVlPUEpfX0sTz1JLEY9WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sVz17c3RvcDppPT5pLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6aT0+aS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6aT0+aS50YXJnZXQhPT1pLmN1cnJlbnRUYXJnZXQsY3RybDppPT4haS5jdHJsS2V5LHNoaWZ0Omk9PiFpLnNoaWZ0S2V5LGFsdDppPT4haS5hbHRLZXksbWV0YTppPT4haS5tZXRhS2V5LGxlZnQ6aT0+ImJ1dHRvbiJpbiBpJiZpLmJ1dHRvbiE9PTAsbWlkZGxlOmk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0xLHJpZ2h0Omk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0yLGV4YWN0OihpLGwpPT5GLnNvbWUoZD0+aVsiIi5jb25jYXQoZCwiS2V5IildJiYhbC5pbmNsdWRlcyhkKSl9LEc9KGksbCk9Pnt2YXIgZD1mdW5jdGlvbihfKXtmb3IodmFyIEE9MDtBPGwubGVuZ3RoO0ErKyl7dmFyIEM9V1tsW0FdXTtpZihDJiZDKF8sbCkpcmV0dXJufWZvcih2YXIgaz1hcmd1bWVudHMubGVuZ3RoLEw9bmV3IEFycmF5KGs+MT9rLTE6MCksSD0xO0g8aztIKyspTFtILTFdPWFyZ3VtZW50c1tIXTtyZXR1cm4gaShfLC4uLkwpfTtyZXR1cm4gZC5tb2RpZmllcnM9bCxkfSxsZT17ZXNjOiJlc2NhcGUiLHNwYWNlOiIgIix1cDoiYXJyb3ctdXAiLGxlZnQ6ImFycm93LWxlZnQiLHJpZ2h0OiJhcnJvdy1yaWdodCIsZG93bjoiYXJyb3ctZG93biIsZGVsZXRlOiJiYWNrc3BhY2UifSx6ZT0oaSxsKT0+ZD0+e2lmKCJrZXkiaW4gZCl7dmFyIF89aC5oeXBoZW5hdGUoZC5rZXkpO2lmKGwuc29tZShBPT5BPT09X3x8bGVbQV09PT1fKSlyZXR1cm4gaShkKX19LGl0PXtiZWZvcmVNb3VudChpLGwpe3Zhcnt2YWx1ZTpkfT1sO2RlKGksZCl9LHVwZGF0ZWQoaSxsKXt2YXJ7dmFsdWU6ZCxvbGRWYWx1ZTpffT1sOyFkIT0hXyYmZGUoaSxkKX0sYmVmb3JlVW5tb3VudChpLGwpe3Zhcnt2YWx1ZTpkfT1sO2RlKGksZCl9fTtmdW5jdGlvbiBkZShpLGwpe2kuc2V0QXR0cmlidXRlKCIudlNob3ciLCEhbCl9dmFyIEdlPWguZXh0ZW5kKHtwYXRjaFByb3A6Z2wsZm9yY2VQYXRjaFByb3A6Ui5mb3JjZVBhdGNoUHJvcH0sJG8pLHFlO2Z1bmN0aW9uIF90KCl7cmV0dXJuIHFlfHwocWU9JGEoR2UpKX12YXIgYXQ9ZnVuY3Rpb24oKXtfdCgpLnJlbmRlciguLi5hcmd1bWVudHMpfSxTZT1mdW5jdGlvbigpe3ZhciBpPV90KCkuY3JlYXRlQXBwKC4uLmFyZ3VtZW50cykse21vdW50Omx9PWk7cmV0dXJuIGkubW91bnQ9ZD0+KGguaXNTdHJpbmcoZCkmJihkPXFhKGQpKSxkJiZsKGQsITEsITEpKSxpfSxiZT1TZTtmdW5jdGlvbiBDZSgpe31mdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBGZShpKXtyZXR1cm4gaC5pc09iamVjdChpKT9SLkpTT05fUFJPVE9DT0wrSlNPTi5zdHJpbmdpZnkoaSk6aX12YXIgUHQ9aT0+RmUoaSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJjYW1lbGl6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguY2FtZWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImNhcGl0YWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmNhcGl0YWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksIm5vcm1hbGl6ZUNsYXNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5ub3JtYWxpemVDbGFzc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwibm9ybWFsaXplUHJvcHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLm5vcm1hbGl6ZVByb3BzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJub3JtYWxpemVTdHlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgubm9ybWFsaXplU3R5bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInRvRGlzcGxheVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgudG9EaXNwbGF5U3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJ0b0hhbmRsZXJLZXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLnRvSGFuZGxlcktleX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiRWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLkVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJSZWFjdGl2ZUVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuUmVhY3RpdmVFZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImN1c3RvbVJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuY3VzdG9tUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJlZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiZWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJnZXRDdXJyZW50U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmdldEN1cnJlbnRTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaXNQcm94eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaXNQcm94eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaXNSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaXNSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaXNSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaXNSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaXNSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmlzUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJpc1NoYWxsb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmlzU2hhbGxvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwibWFya1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUubWFya1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwib25TY29wZURpc3Bvc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLm9uU2NvcGVEaXNwb3NlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJwcm94eVJlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnByb3h5UmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwicmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnJlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJyZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUucmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUucmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJzaGFsbG93UmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnNoYWxsb3dSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwic2hhbGxvd1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5zaGFsbG93UmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInNoYWxsb3dSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnNoYWxsb3dSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInN0b3AiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnN0b3B9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInRvUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS50b1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwidG9SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnRvUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJ0b1JlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnRvUmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwidHJpZ2dlclJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUudHJpZ2dlclJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwidW5yZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnVucmVmfX0pLHkuQmFzZVRyYW5zaXRpb249THQseS5CYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycz1maSx5LkNvbW1lbnQ9aGUseS5GcmFnbWVudD1lZSx5LktlZXBBbGl2ZT1NaSx5LlN0YXRpYz1UZSx5LlN1c3BlbnNlPXhuLHkuVGVsZXBvcnQ9Wix5LlRleHQ9Y2UseS5UcmFuc2l0aW9uPVphLHkuVHJhbnNpdGlvbkdyb3VwPV9sLHkuYXNzZXJ0TnVtYmVyPU50LHkuY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmc9VHQseS5jYWxsV2l0aEVycm9ySGFuZGxpbmc9VXQseS5jbG9uZVZOb2RlPWlpLHkuY29tcGF0VXRpbHM9Vm8seS5jb21wdXRlZD1kcyx5LmNyZWF0ZUFwcD1TZSx5LmNyZWF0ZUJsb2NrPXZuLHkuY3JlYXRlQ29tbWVudD1xYSx5LmNyZWF0ZUNvbW1lbnRWTm9kZT16bix5LmNyZWF0ZUVsZW1lbnQ9VW8seS5jcmVhdGVFbGVtZW50QmxvY2s9RHQseS5jcmVhdGVFbGVtZW50Vk5vZGU9JHQseS5jcmVhdGVIeWRyYXRpb25SZW5kZXJlcj1IYSx5LmNyZWF0ZVByb3BzUmVzdFByb3h5PUFyLHkuY3JlYXRlUmVuZGVyZXI9JGEseS5jcmVhdGVTU1JBcHA9YmUseS5jcmVhdGVTbG90cz1WaSx5LmNyZWF0ZVN0YXRpY1ZOb2RlPWphLHkuY3JlYXRlVGV4dE5vZGU9aWEseS5jcmVhdGVUZXh0Vk5vZGU9UWkseS5jcmVhdGVWTm9kZT1adCx5LmNyZWF0ZVZ1ZUFwcD1TZSx5LmRlZmluZUFzeW5jQ29tcG9uZW50PUJpLHkuZGVmaW5lQ29tcG9uZW50PUxyLHkuZGVmaW5lRW1pdHM9eHMseS5kZWZpbmVFeHBvc2U9aHMseS5kZWZpbmVQcm9wcz1Ebyx5LmdldEN1cnJlbnRJbnN0YW5jZT1Zbix5LmdldFRyYW5zaXRpb25SYXdDaGlsZHJlbj16cix5Lmd1YXJkUmVhY3RpdmVQcm9wcz1waSx5Lmg9ZW8seS5oYW5kbGVFcnJvcj1QLHkuaW5pdEN1c3RvbUZvcm1hdHRlcj1yYSx5LmluamVjdD1Rbix5LmluamVjdEhvb2s9SXIseS5pc01lbW9TYW1lPXBzLHkuaXNSdW50aW1lT25seT1Kcix5LmlzVk5vZGU9cXQseS5tZXJnZURlZmF1bHRzPU9uLHkubWVyZ2VQcm9wcz1Dcix5Lm5leHRUaWNrPW1yLHkub25BY3RpdmF0ZWQ9SW8seS5vbkJlZm9yZUFjdGl2YXRlPUNlLHkub25CZWZvcmVEZWFjdGl2YXRlPXN0LHkub25CZWZvcmVNb3VudD1ycix5Lm9uQmVmb3JlVW5tb3VudD1kcix5Lm9uQmVmb3JlVXBkYXRlPXFuLHkub25EZWFjdGl2YXRlZD1Bbix5Lm9uRXJyb3JDYXB0dXJlZD1Ybyx5Lm9uTW91bnRlZD1jcix5Lm9uUmVuZGVyVHJhY2tlZD1KaSx5Lm9uUmVuZGVyVHJpZ2dlcmVkPXFpLHkub25TZXJ2ZXJQcmVmZXRjaD1fbyx5Lm9uVW5tb3VudGVkPW1vLHkub25VcGRhdGVkPWVyLHkub3BlbkJsb2NrPWx0LHkucG9wU2NvcGVJZD1mYSx5LnByb3ZpZGU9bHIseS5wdXNoU2NvcGVJZD1nbyx5LnF1ZXVlUG9zdEZsdXNoQ2I9eWkseS5yZWdpc3RlclJ1bnRpbWVDb21waWxlcj1mcyx5LnJlbmRlcj1hdCx5LnJlbmRlckxpc3Q9UXQseS5yZW5kZXJTbG90PUdyLHkucmVzb2x2ZUNvbXBvbmVudD1ZLHkucmVzb2x2ZURpcmVjdGl2ZT1aZSx5LnJlc29sdmVEeW5hbWljQ29tcG9uZW50PXhlLHkucmVzb2x2ZUZpbHRlcj1Ncyx5LnJlc29sdmVUcmFuc2l0aW9uSG9va3M9bmkseS5zZXRCbG9ja1RyYWNraW5nPXl0LHkuc2V0RGV2dG9vbHNIb29rPXVuLHkuc2V0VHJhbnNpdGlvbkhvb2tzPWpyLHkuc3NyQ29udGV4dEtleT1Gbyx5LnNzclV0aWxzPUhsLHkudG9IYW5kbGVycz1SdCx5LnRyYW5zZm9ybVZOb2RlQXJncz1ybix5LnVzZUF0dHJzPWt0LHkudXNlQ3NzTW9kdWxlPUhvLHkudXNlQ3NzVmFycz1LYSx5LnVzZVNTUkNvbnRleHQ9TmEseS51c2VTbG90cz1OZSx5LnVzZVRyYW5zaXRpb25TdGF0ZT1Fcix5LnZNb2RlbER5bmFtaWM9Tyx5LnZNb2RlbFRleHQ9SSx5LnZTaG93PWl0LHkudmVyc2lvbj1kbCx5Lndhcm49RGUseS53YXRjaD1Ccix5LndhdGNoRWZmZWN0PXhpLHkud2F0Y2hQb3N0RWZmZWN0PW9vLHkud2F0Y2hTeW5jRWZmZWN0PXRpLHkud2l0aEFzeW5jQ29udGV4dD1QaSx5LndpdGhDdHg9Sm8seS53aXRoRGVmYXVsdHM9QnMseS53aXRoRGlyZWN0aXZlcz1Xcix5LndpdGhLZXlzPXplLHkud2l0aE1lbW89Z3MseS53aXRoTW9kaWZpZXJzPUcseS53aXRoU2NvcGVJZD1Bbyx5LndwPVB0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5fSh7fSxwLHcscyk7cmV0dXJuIE4uX19UWVBFX189InZ1ZSIsTn1mdW5jdGlvbiBodihmLHMscCl7bGV0IHc9cC5WdWUsTj1wLnNldFRpbWVvdXQseT1wLmNsZWFyVGltZW91dCxoPXAuc2V0SW50ZXJ2YWwsRT1wLmNsZWFySW50ZXJ2YWwsUj1wLl9fdW5pQ29uZmlnLERlPXAuX191bmlSb3V0ZXMsTnQ9cC5WdWVTaGFyZWQsVXQ9cC5VbmlTaGFyZWQ7dmFyIFR0PWZ1bmN0aW9uKHosSyxtbil7InVzZSBzdHJpY3QiO3ZhciBobj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsd249ZnVuY3Rpb24oKXtsZXQgZT1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8aG4ubGVuZ3RoO3QrKyllW2huLmNoYXJDb2RlQXQodCldPXQ7cmV0dXJuIGV9KCk7ZnVuY3Rpb24gWG4oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSksbixyPXQubGVuZ3RoLG89IiI7Zm9yKG49MDtuPHI7bis9MylvKz1oblt0W25dPj4yXSxvKz1oblsodFtuXSYzKTw8NHx0W24rMV0+PjRdLG8rPWhuWyh0W24rMV0mMTUpPDwyfHRbbisyXT4+Nl0sbys9aG5bdFtuKzJdJjYzXTtyZXR1cm4gciUzPT09Mj9vPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtMSkrIj0iOnIlMz09PTEmJihvPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtMikrIj09Iiksb31mdW5jdGlvbiBzaShlKXt2YXIgdD1lLmxlbmd0aCouNzUsbj1lLmxlbmd0aCxyLG89MCxjLGcsYixWO2VbZS5sZW5ndGgtMV09PT0iPSImJih0LS0sZVtlLmxlbmd0aC0yXT09PSI9IiYmdC0tKTt2YXIgVD1uZXcgQXJyYXlCdWZmZXIodCksRD1uZXcgVWludDhBcnJheShUKTtmb3Iocj0wO3I8bjtyKz00KWM9d25bZS5jaGFyQ29kZUF0KHIpXSxnPXduW2UuY2hhckNvZGVBdChyKzEpXSxiPXduW2UuY2hhckNvZGVBdChyKzIpXSxWPXduW2UuY2hhckNvZGVBdChyKzMpXSxEW28rK109Yzw8MnxnPj40LERbbysrXT0oZyYxNSk8PDR8Yj4+MixEW28rK109KGImMyk8PDZ8ViY2MztyZXR1cm4gVH1sZXQgRWk9WyJvcmlnaW5hbCIsImNvbXByZXNzZWQiXSxYcj1bImFsYnVtIiwiY2FtZXJhIl0sbXI9WyJHRVQiLCJPUFRJT05TIiwiSEVBRCIsIlBPU1QiLCJQVVQiLCJERUxFVEUiLCJUUkFDRSIsIkNPTk5FQ1QiLCJQQVRDSCJdO2Z1bmN0aW9uIENuKGUsdCl7cmV0dXJuIWV8fHQuaW5kZXhPZihlKT09PS0xP3RbMF06ZX1mdW5jdGlvbiBfcihlLHQpe3JldHVybiF6LmlzQXJyYXkoZSl8fGUubGVuZ3RoPT09MHx8ZS5maW5kKG49PnQuaW5kZXhPZihuKT09PS0xKT90OmV9ZnVuY3Rpb24gJHIoZSx0KXtjb25zb2xlLndhcm4oYCR7ZX06ICR7dH1gKX1mdW5jdGlvbiBRcihlLHQsbixyKXtyfHwocj0kcik7Zm9yKGxldCBvIGluIG4pe2xldCBjPWtuKG8sdFtvXSxuW29dLCF6Lmhhc093bih0LG8pKTt6LmlzU3RyaW5nKGMpJiZyKGUsYyl9fWZ1bmN0aW9uIHlpKGUsdCxuLHIpe2lmKCFuKXJldHVybjtpZighei5pc0FycmF5KG4pKXJldHVybiBRcihlLHRbMF18fE9iamVjdC5jcmVhdGUobnVsbCksbixyKTtsZXQgbz1uLmxlbmd0aCxjPXQubGVuZ3RoO2ZvcihsZXQgZz0wO2c8bztnKyspe2xldCBiPW5bZ10sVj1PYmplY3QuY3JlYXRlKG51bGwpO2M+ZyYmKFZbYi5uYW1lXT10W2ddKSxRcihlLFYse1tiLm5hbWVdOmJ9LHIpfX1mdW5jdGlvbiBrbihlLHQsbixyKXt6LmlzUGxhaW5PYmplY3Qobil8fChuPXt0eXBlOm59KTtsZXR7dHlwZTpvLHJlcXVpcmVkOmMsdmFsaWRhdG9yOmd9PW47aWYoYyYmcilyZXR1cm4nTWlzc2luZyByZXF1aXJlZCBhcmdzOiAiJytlKyciJztpZighKHQ9PW51bGwmJiFjKSl7aWYobyE9bnVsbCl7bGV0IGI9ITEsVj16LmlzQXJyYXkobyk/bzpbb10sVD1bXTtmb3IobGV0IEQ9MDtEPFYubGVuZ3RoJiYhYjtEKyspe2xldHt2YWxpZDp2ZSxleHBlY3RlZFR5cGU6eWV9PW50KHQsVltEXSk7VC5wdXNoKHllfHwiIiksYj12ZX1pZighYilyZXR1cm4gT3QoZSx0LFQpfWlmKGcpcmV0dXJuIGcodCl9fWxldCBqZT16Lm1ha2VNYXAoIlN0cmluZyxOdW1iZXIsQm9vbGVhbixGdW5jdGlvbixTeW1ib2wiKTtmdW5jdGlvbiBudChlLHQpe2xldCBuLHI9bm4odCk7aWYoamUocikpe2xldCBvPXR5cGVvZiBlO249bz09PXIudG9Mb3dlckNhc2UoKSwhbiYmbz09PSJvYmplY3QiJiYobj1lIGluc3RhbmNlb2YgdCl9ZWxzZSByPT09Ik9iamVjdCI/bj16LmlzT2JqZWN0KGUpOnI9PT0iQXJyYXkiP249ei5pc0FycmF5KGUpOm49ZSBpbnN0YW5jZW9mIHR8fHoudG9SYXdUeXBlKGUpPT09bm4odCk7cmV0dXJue3ZhbGlkOm4sZXhwZWN0ZWRUeXBlOnJ9fWZ1bmN0aW9uIE90KGUsdCxuKXtsZXQgcj1gSW52YWxpZCBhcmdzOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgYXJncyAiJHtlfSIuIEV4cGVjdGVkICR7bi5tYXAoei5jYXBpdGFsaXplKS5qb2luKCIsICIpfWAsbz1uWzBdLGM9ei50b1Jhd1R5cGUodCksZz1Obih0LG8pLGI9Tm4odCxjKTtyZXR1cm4gbi5sZW5ndGg9PT0xJiZ1bihvKSYmIWFyKG8sYykmJihyKz1gIHdpdGggdmFsdWUgJHtnfWApLHIrPWAsIGdvdCAke2N9IGAsdW4oYykmJihyKz1gd2l0aCB2YWx1ZSAke2J9LmApLHJ9ZnVuY3Rpb24gbm4oZSl7bGV0IHQ9ZSYmZS50b1N0cmluZygpLm1hdGNoKC9eXHMqZnVuY3Rpb24gKFx3KykvKTtyZXR1cm4gdD90WzFdOiIifWZ1bmN0aW9uIE5uKGUsdCl7cmV0dXJuIHQ9PT0iU3RyaW5nIj9gIiR7ZX0iYDp0PT09Ik51bWJlciI/YCR7TnVtYmVyKGUpfWA6YCR7ZX1gfWZ1bmN0aW9uIHVuKGUpe3JldHVyblsic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiJdLnNvbWUobj0+ZS50b0xvd2VyQ2FzZSgpPT09bil9ZnVuY3Rpb24gYXIoLi4uZSl7cmV0dXJuIGUuc29tZSh0PT50LnRvTG93ZXJDYXNlKCk9PT0iYm9vbGVhbiIpfWZ1bmN0aW9uIFZuKGUpe3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4gZS5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fWxldCBQbj0xLF9uPXt9O2Z1bmN0aW9uIGJyKGUsdCxuLHI9ITEpe3JldHVybiBfbltlXT17bmFtZTp0LGtlZXBBbGl2ZTpyLGNhbGxiYWNrOm59LGV9ZnVuY3Rpb24gZWkoZSx0LG4pe2lmKHR5cGVvZiBlPT0ibnVtYmVyIil7bGV0IHI9X25bZV07aWYocilyZXR1cm4gci5rZWVwQWxpdmV8fGRlbGV0ZSBfbltlXSxyLmNhbGxiYWNrKHQsbil9cmV0dXJuIHR9ZnVuY3Rpb24gZ28oZSl7Zm9yKGxldCB0IGluIF9uKWlmKF9uW3RdLm5hbWU9PT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZhKGUsdCl7Zm9yKGxldCBuIGluIF9uKXtsZXQgcj1fbltuXTtyLmNhbGxiYWNrPT09dCYmci5uYW1lPT09ZSYmZGVsZXRlIF9uW25dfX1mdW5jdGlvbiBBbyhlKXtvdC5vZmYoImFwaS4iK2UpfWZ1bmN0aW9uIEpvKGUpe290Lm9uKCJhcGkuIitlLHQ9Pntmb3IobGV0IG4gaW4gX24pe2xldCByPV9uW25dO3IubmFtZT09PWUmJnIuY2FsbGJhY2sodCl9fSl9ZnVuY3Rpb24gS28oZSx0KXtyZXR1cm4gYnIoUG4rKyxlLHQsITApfWxldCBSaT0ic3VjY2VzcyIsUnI9ImZhaWwiLHppPSJjb21wbGV0ZSI7ZnVuY3Rpb24gV2koZSl7bGV0IHQ9e307Zm9yKGxldCBuIGluIGUpe2xldCByPWVbbl07ei5pc0Z1bmN0aW9uKHIpJiYodFtuXT1WbihyKSxkZWxldGUgZVtuXSl9cmV0dXJuIHR9ZnVuY3Rpb24gcm8oZSx0KXtyZXR1cm4hZXx8ZS5pbmRleE9mKCI6ZmFpbCIpPT09LTE/dCsiOm9rIjp0K2Uuc3Vic3RyaW5nKGUuaW5kZXhPZigiOmZhaWwiKSl9ZnVuY3Rpb24gaW8oZSx0PXt9LHtiZWZvcmVBbGw6bixiZWZvcmVTdWNjZXNzOnJ9PXt9KXt6LmlzUGxhaW5PYmplY3QodCl8fCh0PXt9KTtsZXR7c3VjY2VzczpvLGZhaWw6Yyxjb21wbGV0ZTpnfT1XaSh0KSxiPXouaXNGdW5jdGlvbihvKSxWPXouaXNGdW5jdGlvbihjKSxUPXouaXNGdW5jdGlvbihnKSxEPVBuKys7cmV0dXJuIGJyKEQsZSx2ZT0+e3ZlPXZlfHx7fSx2ZS5lcnJNc2c9cm8odmUuZXJyTXNnLGUpLHouaXNGdW5jdGlvbihuKSYmbih2ZSksdmUuZXJyTXNnPT09ZSsiOm9rIj8oei5pc0Z1bmN0aW9uKHIpJiZyKHZlLHQpLGImJm8odmUpKTpWJiZjKHZlKSxUJiZnKHZlKX0pLER9bGV0IGxpPSJzdWNjZXNzIixwbz0iZmFpbCIsT289ImNvbXBsZXRlIix4bj17fSxUcj17fTtmdW5jdGlvbiBjaShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZShuLHQpfHxufX1mdW5jdGlvbiBmcihlLHQsbil7bGV0IHI9ITE7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBjPWVbb107aWYocilyPVByb21pc2UucmVzb2x2ZShjaShjLG4pKTtlbHNle2xldCBnPWModCxuKTtpZih6LmlzUHJvbWlzZShnKSYmKHI9UHJvbWlzZS5yZXNvbHZlKGcpKSxnPT09ITEpcmV0dXJue3RoZW4oKXt9LGNhdGNoKCl7fX19fXJldHVybiByfHx7dGhlbihvKXtyZXR1cm4gbyh0KX0sY2F0Y2goKXt9fX1mdW5jdGlvbiB2byhlLHQ9e30pe3JldHVybltsaSxwbyxPb10uZm9yRWFjaChuPT57bGV0IHI9ZVtuXTtpZighei5pc0FycmF5KHIpKXJldHVybjtsZXQgbz10W25dO3Rbbl09ZnVuY3Rpb24oZyl7ZnIocixnLHQpLnRoZW4oYj0+ei5pc0Z1bmN0aW9uKG8pJiZvKGIpfHxiKX19KSx0fWZ1bmN0aW9uIFpvKGUsdCl7bGV0IG49W107ei5pc0FycmF5KHhuLnJldHVyblZhbHVlKSYmbi5wdXNoKC4uLnhuLnJldHVyblZhbHVlKTtsZXQgcj1UcltlXTtyZXR1cm4gciYmei5pc0FycmF5KHIucmV0dXJuVmFsdWUpJiZuLnB1c2goLi4uci5yZXR1cm5WYWx1ZSksbi5mb3JFYWNoKG89Pnt0PW8odCl8fHR9KSx0fWZ1bmN0aW9uIFRvKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7T2JqZWN0LmtleXMoeG4pLmZvckVhY2gocj0+e3IhPT0icmV0dXJuVmFsdWUiJiYodFtyXT14bltyXS5zbGljZSgpKX0pO2xldCBuPVRyW2VdO3JldHVybiBuJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKHI9PntyIT09InJldHVyblZhbHVlIiYmKHRbcl09KHRbcl18fFtdKS5jb25jYXQobltyXSkpfSksdH1mdW5jdGlvbiBTaShlLHQsbixyKXtsZXQgbz1UbyhlKTtyZXR1cm4gbyYmT2JqZWN0LmtleXMobykubGVuZ3RoP3ouaXNBcnJheShvLmludm9rZSk/ZnIoby5pbnZva2UsbikudGhlbihnPT50KHZvKFRvKGUpLGcpLC4uLnIpKTp0KHZvKG8sbiksLi4ucik6dChuLC4uLnIpfWZ1bmN0aW9uIHNyKGUpe3JldHVybiEhKHouaXNQbGFpbk9iamVjdChlKSYmW1JpLFJyLHppXS5maW5kKHQ9PnouaXNGdW5jdGlvbihlW3RdKSkpfWZ1bmN0aW9uIHVpKGUpe3JldHVybiBlfWZ1bmN0aW9uIGxyKGUsdCl7cmV0dXJuKG49e30sLi4ucik9PnNyKG4pP1pvKGUsU2koZSx0LG4scikpOlpvKGUsbmV3IFByb21pc2UoKG8sYyk9PntTaShlLHQsei5leHRlbmQobix7c3VjY2VzczpvLGZhaWw6Y30pLHIpfSkpfWZ1bmN0aW9uIFFuKGUsdCl7bGV0IG49ZVswXTtpZighdHx8IXouaXNQbGFpbk9iamVjdCh0LmZvcm1hdEFyZ3MpJiZ6LmlzUGxhaW5PYmplY3QobikpcmV0dXJuO2xldCByPXQuZm9ybWF0QXJncyxvPU9iamVjdC5rZXlzKHIpO2ZvcihsZXQgYz0wO2M8by5sZW5ndGg7YysrKXtsZXQgZz1vW2NdLGI9cltnXTtpZih6LmlzRnVuY3Rpb24oYikpe2xldCBWPWIoZVswXVtnXSxuKTtpZih6LmlzU3RyaW5nKFYpKXJldHVybiBWfWVsc2Ugei5oYXNPd24obixnKXx8KG5bZ109Yil9fWZ1bmN0aW9uIHhpKGUsdCxuKXtsZXQgcj17ZXJyTXNnOnQrIjpvayJ9O3JldHVybiBlaShlLHouZXh0ZW5kKG58fHt9LHIpKX1mdW5jdGlvbiBvbyhlLHQsbixyPXt9KXtsZXQgbz10KyI6ZmFpbCIrKG4/IiAiK246IiIpO3JldHVybiBkZWxldGUgci5lcnJDb2RlLGVpKGUsdHlwZW9mIFVuaUVycm9yIT0idW5kZWZpbmVkIj90eXBlb2Ygci5lcnJDb2RlIT0idW5kZWZpbmVkIj9uZXcgVW5pRXJyb3IodCxyLmVyckNvZGUsbyk6bmV3IFVuaUVycm9yKG8scik6ei5leHRlbmQoe2Vyck1zZzpvfSxyKSl9ZnVuY3Rpb24gdGkoZSx0LG4scil7aWYociYmci5iZWZvcmVJbnZva2Upe2xldCBjPXIuYmVmb3JlSW52b2tlKHQpO2lmKHouaXNTdHJpbmcoYykpcmV0dXJuIGN9bGV0IG89UW4odCxyKTtpZihvKXJldHVybiBvfWZ1bmN0aW9uIHhyKGUpe2lmKCF6LmlzRnVuY3Rpb24oZSkpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3M6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBhcmdzICJjYWxsYmFjayIuIEV4cGVjdGVkIEZ1bmN0aW9uJyl9ZnVuY3Rpb24gQnIoZSx0LG4pe3JldHVybiByPT57eHIocik7bGV0IG89dGkoZSxbcl0sdm9pZCAwLG4pO2lmKG8pdGhyb3cgbmV3IEVycm9yKG8pO2xldCBjPSFnbyhlKTtLbyhlLHIpLGMmJihKbyhlKSx0KCkpfX1mdW5jdGlvbiB3aShlLHQsbil7cmV0dXJuIHI9Pnt4cihyKTtsZXQgbz10aShlLFtyXSx2b2lkIDAsbik7aWYobyl0aHJvdyBuZXcgRXJyb3Iobyk7ZT1lLnJlcGxhY2UoIm9mZiIsIm9uIiksZmEoZSxyKSxnbyhlKXx8KEFvKGUpLHQoKSl9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiFlfHx6LmlzU3RyaW5nKGUpP2U6ZS5zdGFjaz8oY29uc29sZS5lcnJvcihlLm1lc3NhZ2UrSy5MSU5FRkVFRCtlLnN0YWNrKSxlLm1lc3NhZ2UpOmV9ZnVuY3Rpb24gSHIoZSx0LG4scil7cmV0dXJuIG89PntsZXQgYz1pbyhlLG8sciksZz10aShlLFtvXSxuLHIpO3JldHVybiBnP29vKGMsZSxnKTp0KG8se3Jlc29sdmU6Yj0+eGkoYyxlLGIpLHJlamVjdDooYixWKT0+b28oYyxlLFBvKGIpLFYpfSl9fWZ1bmN0aW9uIE1yKGUsdCxuLHIpe3JldHVybiguLi5vKT0+e2xldCBjPXRpKGUsbyxuLHIpO2lmKGMpdGhyb3cgbmV3IEVycm9yKGMpO3JldHVybiB0LmFwcGx5KG51bGwsbyl9fWZ1bmN0aW9uIEVyKGUsdCxuLHIpe3JldHVybiBIcihlLHQsbixyKX1mdW5jdGlvbiBnbihlLHQsbil7cmV0dXJuIEJyKGUsdCxuKX1mdW5jdGlvbiBmaShlLHQsbil7cmV0dXJuIHdpKGUsdCxuKX1mdW5jdGlvbiBQcihlLHQsbixyKXtyZXR1cm4gbHIoZSxIcihlLHQsdm9pZCAwLHIpKX1mdW5jdGlvbiBMdChlLHQsbixyKXtyZXR1cm4gTXIoZSx0LHZvaWQgMCxyKX1mdW5jdGlvbiBFZShlLHQsbixyKXtyZXR1cm4gbHIoZSxFcihlLHQsdm9pZCAwLHIpKX1sZXQgbmk9ImJhc2U2NFRvQXJyYXlCdWZmZXIiLEdpPVt7bmFtZToiYmFzZTY0Iix0eXBlOlN0cmluZyxyZXF1aXJlZDohMH1dLEt0PSJhcnJheUJ1ZmZlclRvQmFzZTY0Iixqcj1be25hbWU6ImFycmF5QnVmZmVyIix0eXBlOltBcnJheUJ1ZmZlcixVaW50OEFycmF5XSxyZXF1aXJlZDohMH1dLHpyPUx0KG5pLGU9PnNpKGUpLEdpKSxMcj1MdChLdCxlPT5YbihlKSxqcik7ZnVuY3Rpb24gRHIoKXtpZih0eXBlb2YgX19TWVNURU1fSU5GT19fIT0idW5kZWZpbmVkIilyZXR1cm4gd2luZG93Ll9fU1lTVEVNX0lORk9fXztsZXR7cmVzb2x1dGlvbldpZHRoOmV9PXMuc2NyZWVuLmdldEN1cnJlbnRTaXplKCl8fHtyZXNvbHV0aW9uV2lkdGg6MH07cmV0dXJue3BsYXRmb3JtOihzLm9zLm5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpLHBpeGVsUmF0aW86cy5zY3JlZW4uc2NhbGUsd2luZG93V2lkdGg6TWF0aC5yb3VuZChlKX19ZnVuY3Rpb24gQmkoZSx0LG4pe2UuJHBhZ2UubWV0YS5pc05WdWU/ZGkoZSx0LG4pOkJuKGUsdCxuKX1mdW5jdGlvbiBCbihlLHQsbil7b3QuaW52b2tlVmlld01ldGhvZCgicmVxdWVzdENvbXBvbmVudEluZm8iLHtyZXFzOnQubWFwKHI9PihyLmNvbXBvbmVudCYmKHIuY29tcG9uZW50PXIuY29tcG9uZW50LiRlbC5ub2RlSWQpLHIpKX0sZS4kcGFnZS5pZCxuKX1mdW5jdGlvbiBkaShlLHQsbil7bGV0IHI9ZGEodCksbz1uZXcgQXJyYXkoci5sZW5ndGgpO01pKHIsZS4kZWwsbyksTGkoZS4kcmVxdWlyZU5hdGl2ZVBsdWdpbigiZG9tIiksbywwLFtdLGM9PntuKGMpfSl9ZnVuY3Rpb24gZGEoZSl7bGV0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPWVbbl0uc2VsZWN0b3I7ci5pbmRleE9mKCIjIik9PT0wJiZ0LnB1c2goci5zdWJzdHJpbmcoMSkpfXJldHVybiB0fWZ1bmN0aW9uIE1pKGUsdCxuKXtsZXQgcj10LmNoaWxkcmVuO2lmKCF6LmlzQXJyYXkocikpcmV0dXJuITE7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBjPXJbb107aWYoYy5hdHRyKXtsZXQgZz1lLmluZGV4T2YoYy5hdHRyLmlkKTtpZihnPj0wJiYobltnXT17aWQ6ZVtnXSxyZWY6Yy5yZWYsZGF0YXNldDpLLnBhcnNlTlZ1ZURhdGFzZXQoYy5hdHRyKX0sZS5sZW5ndGg9PT0xKSlicmVha31jLmNoaWxkcmVuJiZNaShlLGMsbil9fWZ1bmN0aW9uIExpKGUsdCxuLHIsbyl7bGV0IGM9dFtuXTtlLmdldENvbXBvbmVudFJlY3QoYy5yZWYsZz0+e2cuc2l6ZS5pZD1jLmlkLGcuc2l6ZS5kYXRhc2V0PWMuZGF0YXNldCxyLnB1c2goZy5zaXplKSxuKz0xLG48dC5sZW5ndGg/TGkoZSx0LG4scixvKTpvKHIpfSl9ZnVuY3Rpb24gSW8oZSx0KXtvdC5pbnZva2VWaWV3TWV0aG9kKCJzZXRQYWdlTWV0YSIsdCxlLiRwYWdlLmlkKX1sZXQgQW49ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IixEaT1bInsiLCJ9Il07Y2xhc3MgWWl7Y29uc3RydWN0b3IoKXt0aGlzLl9jYWNoZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1pbnRlcnBvbGF0ZSh0LG4scj1EaSl7aWYoIW4pcmV0dXJuW3RdO2xldCBvPXRoaXMuX2NhY2hlc1t0XTtyZXR1cm4gb3x8KG89SXIodCxyKSx0aGlzLl9jYWNoZXNbdF09bykscmkobyxuKX19bGV0IENpPS9eKD86XGQpKy8sRmk9L14oPzpcdykrLztmdW5jdGlvbiBJcihlLFt0LG5dKXtsZXQgcj1bXSxvPTAsYz0iIjtmb3IoO288ZS5sZW5ndGg7KXtsZXQgZz1lW28rK107aWYoZz09PXQpe2MmJnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6Y30pLGM9IiI7bGV0IGI9IiI7Zm9yKGc9ZVtvKytdO2chPT12b2lkIDAmJmchPT1uOyliKz1nLGc9ZVtvKytdO2xldCBWPWc9PT1uLFQ9Q2kudGVzdChiKT8ibGlzdCI6ViYmRmkudGVzdChiKT8ibmFtZWQiOiJ1bmtub3duIjtyLnB1c2goe3ZhbHVlOmIsdHlwZTpUfSl9ZWxzZSBjKz1nfXJldHVybiBjJiZyLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmN9KSxyfWZ1bmN0aW9uIHJpKGUsdCl7bGV0IG49W10scj0wLG89QXJyYXkuaXNBcnJheSh0KT8ibGlzdCI6QW4odCk/Im5hbWVkIjoidW5rbm93biI7aWYobz09PSJ1bmtub3duIilyZXR1cm4gbjtmb3IoO3I8ZS5sZW5ndGg7KXtsZXQgYz1lW3JdO3N3aXRjaChjLnR5cGUpe2Nhc2UidGV4dCI6bi5wdXNoKGMudmFsdWUpO2JyZWFrO2Nhc2UibGlzdCI6bi5wdXNoKHRbcGFyc2VJbnQoYy52YWx1ZSwxMCldKTticmVhaztjYXNlIm5hbWVkIjpvPT09Im5hbWVkIiYmbi5wdXNoKHRbYy52YWx1ZV0pO2JyZWFrO2Nhc2UidW5rbm93biI6YnJlYWt9cisrfXJldHVybiBufWxldCBycj0iemgtSGFucyIsY3I9InpoLUhhbnQiLHFuPSJlbiIsZXI9ImZyIixkcj0iZXMiLG1vPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksX289KGUsdCk9Pm1vLmNhbGwoZSx0KSxxaT1uZXcgWWk7ZnVuY3Rpb24gSmkoZSx0KXtyZXR1cm4hIXQuZmluZChuPT5lLmluZGV4T2YobikhPT0tMSl9ZnVuY3Rpb24gWG8oZSx0KXtyZXR1cm4gdC5maW5kKG49PmUuaW5kZXhPZihuKT09PTApfWZ1bmN0aW9uIFdyKGUsdCl7aWYoIWUpcmV0dXJuO2lmKGU9ZS50cmltKCkucmVwbGFjZSgvXy9nLCItIiksdCYmdFtlXSlyZXR1cm4gZTtpZihlPWUudG9Mb3dlckNhc2UoKSxlPT09ImNoaW5lc2UiKXJldHVybiBycjtpZihlLmluZGV4T2YoInpoIik9PT0wKXJldHVybiBlLmluZGV4T2YoIi1oYW5zIik+LTE/cnI6ZS5pbmRleE9mKCItaGFudCIpPi0xfHxKaShlLFsiLXR3IiwiLWhrIiwiLW1vIiwiLWNodCJdKT9jcjpycjtsZXQgbj1bcW4sZXIsZHJdO3QmJk9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiYobj1PYmplY3Qua2V5cyh0KSk7bGV0IHI9WG8oZSxuKTtpZihyKXJldHVybiByfWNsYXNzIHlye2NvbnN0cnVjdG9yKHtsb2NhbGU6dCxmYWxsYmFja0xvY2FsZTpuLG1lc3NhZ2VzOnIsd2F0Y2hlcjpvLGZvcm1hdGVyOmN9KXt0aGlzLmxvY2FsZT1xbix0aGlzLmZhbGxiYWNrTG9jYWxlPXFuLHRoaXMubWVzc2FnZT17fSx0aGlzLm1lc3NhZ2VzPXt9LHRoaXMud2F0Y2hlcnM9W10sbiYmKHRoaXMuZmFsbGJhY2tMb2NhbGU9biksdGhpcy5mb3JtYXRlcj1jfHxxaSx0aGlzLm1lc3NhZ2VzPXJ8fHt9LHRoaXMuc2V0TG9jYWxlKHR8fHFuKSxvJiZ0aGlzLndhdGNoTG9jYWxlKG8pfXNldExvY2FsZSh0KXtsZXQgbj10aGlzLmxvY2FsZTt0aGlzLmxvY2FsZT1Xcih0LHRoaXMubWVzc2FnZXMpfHx0aGlzLmZhbGxiYWNrTG9jYWxlLHRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdfHwodGhpcy5tZXNzYWdlc1t0aGlzLmxvY2FsZV09e30pLHRoaXMubWVzc2FnZT10aGlzLm1lc3NhZ2VzW3RoaXMubG9jYWxlXSxuIT09dGhpcy5sb2NhbGUmJnRoaXMud2F0Y2hlcnMuZm9yRWFjaChyPT57cih0aGlzLmxvY2FsZSxuKX0pfWdldExvY2FsZSgpe3JldHVybiB0aGlzLmxvY2FsZX13YXRjaExvY2FsZSh0KXtsZXQgbj10aGlzLndhdGNoZXJzLnB1c2godCktMTtyZXR1cm4oKT0+e3RoaXMud2F0Y2hlcnMuc3BsaWNlKG4sMSl9fWFkZCh0LG4scj0hMCl7bGV0IG89dGhpcy5tZXNzYWdlc1t0XTtvP3I/T2JqZWN0LmFzc2lnbihvLG4pOk9iamVjdC5rZXlzKG4pLmZvckVhY2goYz0+e19vKG8sYyl8fChvW2NdPW5bY10pfSk6dGhpcy5tZXNzYWdlc1t0XT1ufWYodCxuLHIpe3JldHVybiB0aGlzLmZvcm1hdGVyLmludGVycG9sYXRlKHQsbixyKS5qb2luKCIiKX10KHQsbixyKXtsZXQgbz10aGlzLm1lc3NhZ2U7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIj8obj1XcihuLHRoaXMubWVzc2FnZXMpLG4mJihvPXRoaXMubWVzc2FnZXNbbl0pKTpyPW4sX28obyx0KT90aGlzLmZvcm1hdGVyLmludGVycG9sYXRlKG9bdF0scikuam9pbigiIik6KGNvbnNvbGUud2FybihgQ2Fubm90IHRyYW5zbGF0ZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCAke3R9LiBVc2UgdGhlIHZhbHVlIG9mIGtleXBhdGggYXMgZGVmYXVsdC5gKSx0KX19ZnVuY3Rpb24gTm8oZSx0KXtlLiR3YXRjaExvY2FsZT9lLiR3YXRjaExvY2FsZShuPT57dC5zZXRMb2NhbGUobil9KTplLiR3YXRjaCgoKT0+ZS4kbG9jYWxlLG49Pnt0LnNldExvY2FsZShuKX0pfWZ1bmN0aW9uIEIoKXtyZXR1cm4gdHlwZW9mIFAhPSJ1bmRlZmluZWQiJiZQLmdldExvY2FsZT9QLmdldExvY2FsZSgpOnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiJiZnbG9iYWwuZ2V0TG9jYWxlP2dsb2JhbC5nZXRMb2NhbGUoKTpxbn1mdW5jdGlvbiBZKGUsdD17fSxuLHIpe3R5cGVvZiBlIT0ic3RyaW5nIiYmKFtlLHRdPVt0LGVdKSx0eXBlb2YgZSE9InN0cmluZyImJihlPUIoKSksdHlwZW9mIG4hPSJzdHJpbmciJiYobj10eXBlb2YgUiE9InVuZGVmaW5lZCImJlIuZmFsbGJhY2tMb2NhbGV8fHFuKTtsZXQgbz1uZXcgeXIoe2xvY2FsZTplLGZhbGxiYWNrTG9jYWxlOm4sbWVzc2FnZXM6dCx3YXRjaGVyOnJ9KSxjPShnLGIpPT57aWYodHlwZW9mIEN0IT0iZnVuY3Rpb24iKWM9ZnVuY3Rpb24oVixUKXtyZXR1cm4gby50KFYsVCl9O2Vsc2V7bGV0IFY9ITE7Yz1mdW5jdGlvbihULEQpe2xldCB2ZT1DdCgpLiR2bTtyZXR1cm4gdmUmJih2ZS4kbG9jYWxlLFZ8fChWPSEwLE5vKHZlLG8pKSksby50KFQsRCl9fXJldHVybiBjKGcsYil9O3JldHVybntpMThuOm8sZihnLGIsVil7cmV0dXJuIG8uZihnLGIsVil9LHQoZyxiKXtyZXR1cm4gYyhnLGIpfSxhZGQoZyxiLFY9ITApe3JldHVybiBvLmFkZChnLGIsVil9LHdhdGNoKGcpe3JldHVybiBvLndhdGNoTG9jYWxlKGcpfSxnZXRMb2NhbGUoKXtyZXR1cm4gby5nZXRMb2NhbGUoKX0sc2V0TG9jYWxlKGcpe3JldHVybiBvLnNldExvY2FsZShnKX19fWZ1bmN0aW9uIHJlKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0WzBdKT4tMX1sZXQgeGU9Sy5vbmNlKCgpPT50eXBlb2YgUiE9InVuZGVmaW5lZCImJlIubG9jYWxlcyYmISFPYmplY3Qua2V5cyhSLmxvY2FsZXMpLmxlbmd0aCksWmU7ZnVuY3Rpb24gY3QoKXtsZXQgZT1QLmdldExvY2FsZSgpLHQ9Ui5sb2NhbGVzO3JldHVybiB0W2VdfHx0W1IuZmFsbGJhY2tMb2NhbGVdfHx0LmVufHx7fX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gcmUoZSxLLkkxOE5fSlNPTl9ERUxJTUlURVJTKT9ndCgpLmYoZSxjdCgpLEsuSTE4Tl9KU09OX0RFTElNSVRFUlMpOmV9ZnVuY3Rpb24gUXQoZSx0KXtpZih0Lmxlbmd0aD09PTEpe2lmKGUpe2xldCByPWI9PnouaXNTdHJpbmcoYikmJnJlKGIsSy5JMThOX0pTT05fREVMSU1JVEVSUyksbz10WzBdLGM9W107aWYoei5pc0FycmF5KGUpJiYoYz1lLmZpbHRlcihiPT5yKGJbb10pKSkubGVuZ3RoKXJldHVybiBjO2xldCBnPWVbdFswXV07aWYocihnKSlyZXR1cm4gZX1yZXR1cm59bGV0IG49dC5zaGlmdCgpO3JldHVybiBRdChlJiZlW25dLHQpfWZ1bmN0aW9uIFZpKGUsdCl7cmV0dXJuIHQubWFwKG49PkdyKGUsbikpfWZ1bmN0aW9uIEdyKGUsdCl7bGV0IG49UXQoZSx0KTtpZighbilyZXR1cm4hMTtsZXQgcj10W3QubGVuZ3RoLTFdO2lmKHouaXNBcnJheShuKSluLmZvckVhY2gobz0+R3Iobyxbcl0pKTtlbHNle2xldCBvPW5bcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7Z2V0KCl7cmV0dXJuIFl0KG8pfSxzZXQoYyl7bz1jfX0pfXJldHVybiEwfWZ1bmN0aW9uIGd0KCl7aWYoIVplKXtsZXQgZTtpZih0eXBlb2YgQ3Q9PSJmdW5jdGlvbiI/ZT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRMYW5ndWFnZSgpOmU9cy53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuZ2V0U3R5bGUoKS5sb2NhbGUsWmU9WShlKSx4ZSgpKXtsZXQgdD1PYmplY3Qua2V5cyhSLmxvY2FsZXN8fHt9KTt0Lmxlbmd0aCYmdC5mb3JFYWNoKG49PlplLmFkZChuLFIubG9jYWxlc1tuXSkpLFplLnNldExvY2FsZShlKX19cmV0dXJuIFplfWZ1bmN0aW9uIFJ0KGUsdCxuKXtyZXR1cm4gdC5yZWR1Y2UoKHIsbyxjKT0+KHJbZStvXT1uW2NdLHIpLHt9KX1sZXQgWXI9Sy5vbmNlKCgpPT57bGV0IGU9InVuaS5hcHAuIix0PVsicXVpdCJdO2d0KCkuYWRkKHFuLFJ0KGUsdCxbIlByZXNzIGJhY2sgYnV0dG9uIGFnYWluIHRvIGV4aXQiXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIlB1bHNlIG90cmEgdmV6IHBhcmEgc2FsaXIiXSksITEpLGd0KCkuYWRkKGVyLFJ0KGUsdCxbIkFwcHV5ZXogXHhFMCBub3V2ZWF1IHBvdXIgcXVpdHRlciBsJ2FwcGxpY2F0aW9uIl0pLCExKSxndCgpLmFkZChycixSdChlLHQsWyJcdTUxOERcdTYzMDlcdTRFMDBcdTZCMjFcdTkwMDBcdTUxRkFcdTVFOTRcdTc1MjgiXSksITEpLGd0KCkuYWRkKGNyLFJ0KGUsdCxbIlx1NTE4RFx1NjMwOVx1NEUwMFx1NkIyMVx1OTAwMFx1NTFGQVx1NjFDOVx1NzUyOCJdKSwhMSl9KSxhbz1LLm9uY2UoKCk9PntsZXQgZT0idW5pLnNob3dBY3Rpb25TaGVldC4iLHQ9WyJjYW5jZWwiXTtndCgpLmFkZChxbixSdChlLHQsWyJDYW5jZWwiXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIkNhbmNlbGFyIl0pLCExKSxndCgpLmFkZChlcixSdChlLHQsWyJBbm51bGVyIl0pLCExKSxndCgpLmFkZChycixSdChlLHQsWyJcdTUzRDZcdTZEODgiXSksITEpLGd0KCkuYWRkKGNyLFJ0KGUsdCxbIlx1NTNENlx1NkQ4OCJdKSwhMSl9KSxvZT1LLm9uY2UoKCk9PntsZXQgZT0idW5pLnNob3dNb2RhbC4iLHQ9WyJjYW5jZWwiLCJjb25maXJtIl07Z3QoKS5hZGQocW4sUnQoZSx0LFsiQ2FuY2VsIiwiT0siXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIkNhbmNlbGFyIiwiT0siXSksITEpLGd0KCkuYWRkKGVyLFJ0KGUsdCxbIkFubnVsZXIiLCJPSyJdKSwhMSksZ3QoKS5hZGQocnIsUnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU3ODZFXHU1QjlBIl0pLCExKSxndCgpLmFkZChjcixSdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTc4QkFcdTVCOUEiXSksITEpfSksWD1LLm9uY2UoKCk9PntsZXQgZT0idW5pLmNob29zZUltYWdlLiIsdD1bImNhbmNlbCIsInNvdXJjZVR5cGUuYWxidW0iLCJzb3VyY2VUeXBlLmNhbWVyYSJdO2d0KCkuYWRkKHFuLFJ0KGUsdCxbIkNhbmNlbCIsIkFsYnVtIiwiQ2FtZXJhIl0pLCExKSxndCgpLmFkZChkcixSdChlLHQsWyJDYW5jZWxhciIsIlx4QzFsYnVtIiwiQ1x4RTFtYXJhIl0pLCExKSxndCgpLmFkZChlcixSdChlLHQsWyJBbm51bGVyIiwiQWxidW0iLCJDYW1ceEU5cmEiXSksITEpLGd0KCkuYWRkKHJyLFJ0KGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NEVDRVx1NzZGOFx1NTE4Q1x1OTAwOVx1NjJFOSIsIlx1NjJDRFx1NjQ0NCJdKSwhMSksZ3QoKS5hZGQoY3IsUnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU1RjlFXHU3NkY4XHU1MThBXHU5MDc4XHU2NEM3IiwiXHU2MkNEXHU2NTFEIl0pLCExKX0pLHNlPUsub25jZSgoKT0+e2xldCBlPSJ1bmkuY2hvb3NlVmlkZW8uIix0PVsiY2FuY2VsIiwic291cmNlVHlwZS5hbGJ1bSIsInNvdXJjZVR5cGUuY2FtZXJhIl07Z3QoKS5hZGQocW4sUnQoZSx0LFsiQ2FuY2VsIiwiQWxidW0iLCJDYW1lcmEiXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIkNhbmNlbGFyIiwiXHhDMWxidW0iLCJDXHhFMW1hcmEiXSksITEpLGd0KCkuYWRkKGVyLFJ0KGUsdCxbIkFubnVsZXIiLCJBbGJ1bSIsIkNhbVx4RTlyYSJdKSwhMSksZ3QoKS5hZGQocnIsUnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RUNFXHU3NkY4XHU1MThDXHU5MDA5XHU2MkU5IiwiXHU2MkNEXHU2NDQ0Il0pLCExKSxndCgpLmFkZChjcixSdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTVGOUVcdTc2RjhcdTUxOEFcdTkwNzhcdTY0QzciLCJcdTYyQ0RcdTY1MUQiXSksITEpfSksQmU9Sy5vbmNlKCgpPT57bGV0IGU9InVuaS5wcmV2aWV3SW1hZ2UuIix0PVsiY2FuY2VsIiwiYnV0dG9uLnNhdmUiLCJzYXZlLnN1Y2Nlc3MiLCJzYXZlLmZhaWwiXTtndCgpLmFkZChxbixSdChlLHQsWyJDYW5jZWwiLCJTYXZlIEltYWdlIiwiU2F2ZWQgc3VjY2Vzc2Z1bGx5IiwiU2F2ZSBmYWlsZWQiXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIkNhbmNlbGFyIiwiR3VhcmRhciBpbWFnZW4iLCJHdWFyZGFkbyBleGl0b3NhbWVudGUiLCJFcnJvciBhbCBndWFyZGFyIl0pLCExKSxndCgpLmFkZChlcixSdChlLHQsWyJBbm51bGVyIiwiR3VhcmRhciBpbWFnZW4iLCJFbnJlZ2lzdHJceEU5IGF2ZWMgc3VjY1x4RThzIiwiXHhDOWNoZWMgZGUgbGEgc2F1dmVnYXJkZSJdKSwhMSksZ3QoKS5hZGQocnIsUnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RkREXHU1QjU4XHU1NkZFXHU1MENGIiwiXHU0RkREXHU1QjU4XHU1NkZFXHU1MENGXHU1MjMwXHU3NkY4XHU1MThDXHU2MjEwXHU1MjlGIiwiXHU0RkREXHU1QjU4XHU1NkZFXHU1MENGXHU1MjMwXHU3NkY4XHU1MThDXHU1OTMxXHU4RDI1Il0pLCExKSxndCgpLmFkZChjcixSdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTRGRERcdTVCNThcdTU3MTZcdTUwQ0YiLCJcdTRGRERcdTVCNThcdTU3MTZcdTUwQ0ZcdTUyMzBcdTc2RjhcdTUxOEFcdTYyMTBcdTUyOUYiLCJcdTRGRERcdTVCNThcdTU3MTZcdTUwQ0ZcdTUyMzBcdTc2RjhcdTUxOEFcdTU5MzFcdTY1NTciXSksITEpfSksbXQ9Sy5vbmNlKCgpPT57bGV0IGU9InVuaS5zZXRDbGlwYm9hcmREYXRhLiIsdD1bInN1Y2Nlc3MiLCJmYWlsIl07Z3QoKS5hZGQocW4sUnQoZSx0LFsiQ29udGVudCBjb3BpZWQiLCJDb3B5IGZhaWxlZCwgcGxlYXNlIGNvcHkgbWFudWFsbHkiXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIkNvbnRlbmlkbyBjb3BpYWRvIiwiRXJyb3IgYWwgY29waWFyLCBjb3BpZSBtYW51YWxtZW50ZSJdKSwhMSksZ3QoKS5hZGQoZXIsUnQoZSx0LFsiQ29udGVudSBjb3BpXHhFOSIsIlx4QzljaGVjIGRlIGxhIGNvcGllLCBjb3BpZXogbWFudWVsbGVtZW50Il0pLCExKSxndCgpLmFkZChycixSdChlLHQsWyJcdTUxODVcdTVCQjlcdTVERjJcdTU5MERcdTUyMzYiLCJcdTU5MERcdTUyMzZcdTU5MzFcdThEMjVcdUZGMENcdThCRjdcdTYyNEJcdTUyQThcdTU5MERcdTUyMzYiXSksITEpLGd0KCkuYWRkKGNyLFJ0KGUsdCxbIlx1NTE2N1x1NUJCOVx1NURGMlx1NUZBOVx1NTIzNiIsIlx1NUZBOVx1NTIzNlx1NTkzMVx1NjU1N1x1RkYwQ1x1OEFDQlx1NjI0Qlx1NTJENVx1NUZBOVx1ODhGRCJdKSwhMSl9KSxwbj1LLm9uY2UoKCk9PntsZXQgZT0idW5pLnNjYW5Db2RlLiIsdD1bInRpdGxlIiwiYWxidW0iLCJmYWlsIiwiZmxhc2gub24iLCJmbGFzaC5vZmYiXTtndCgpLmFkZChxbixSdChlLHQsWyJTY2FuIGNvZGUiLCJBbGJ1bSIsIlJlY29nbml0aW9uIGZhaWx1cmUiLCJUYXAgdG8gdHVybiBsaWdodCBvbiIsIlRhcCB0byB0dXJuIGxpZ2h0IG9mZiJdKSwhMSksZ3QoKS5hZGQoZHIsUnQoZSx0LFsiQ1x4RjNkaWdvIGRlIGVzY2FuZW8iLCJceEMxbGJ1bSIsIlx4QzljaGVjIGRlIGxhIHJlY29ubmFpc3NhbmNlIiwiVG9xdWUgcGFyYSBlbmNlbmRlciBsYSBsdXoiLCJUb3F1ZSBwYXJhIGFwYWdhciBsYSBsdXoiXSksITEpLGd0KCkuYWRkKGVyLFJ0KGUsdCxbIkNvZGUgZFx1MjAxOWFuYWx5c2UiLCJBbGJ1bSIsIkZhbGxvIGRlIHJlY29ub2NpbWllbnRvIiwiQXBwdXlleiBwb3VyIGFjdGl2ZXIgbCdceEU5Y2xhaXJhZ2UiLCJBcHB1eWV6IHBvdXIgZFx4RTlzYWN0aXZlciBsJ1x4RTljbGFpcmFnZSJdKSwhMSksZ3QoKS5hZGQocnIsUnQoZSx0LFsiXHU2MjZCXHU3ODAxIiwiXHU3NkY4XHU1MThDIiwiXHU4QkM2XHU1MjJCXHU1OTMxXHU4RDI1IiwiXHU4RjdCXHU4OUU2XHU3MTY3XHU0RUFFIiwiXHU4RjdCXHU4OUU2XHU1MTczXHU5NUVEIl0pLCExKSxndCgpLmFkZChjcixSdChlLHQsWyJcdTYzODNcdTc4QkMiLCJcdTc2RjhcdTUxOEEiLCJcdThCNThcdTUyMjVcdTU5MzFcdTY1NTciLCJcdThGMTVcdTg5RjhcdTcxNjdcdTRFQUUiLCJcdThGMTVcdTg5RjhcdTk1RENcdTk1ODkiXSksITEpfSksSm49Sy5vbmNlKCgpPT57bGV0IGU9InVuaS5zdGFydFNvdGVyQXV0aGVudGljYXRpb24uIix0PVsiYXV0aENvbnRlbnQiLCJ3YWl0aW5nQ29udGVudCJdO2d0KCkuYWRkKHFuLFJ0KGUsdCxbIkZpbmdlcnByaW50IHJlY29nbml0aW9uIiwiVW5yZWNvZ25pemFibGUiXSksITEpLGd0KCkuYWRkKGRyLFJ0KGUsdCxbIlJlY29ub2NpbWllbnRvIGRlIGh1ZWxsYXMgZGFjdGlsYXJlcyIsIklycmVjb25vY2libGUiXSksITEpLGd0KCkuYWRkKGVyLFJ0KGUsdCxbIlJlY29ubmFpc3NhbmNlIGRlIGwnZW1wcmVpbnRlIGRpZ2l0YWxlIiwiTVx4RTljb25uYWlzc2FibGUiXSksITEpLGd0KCkuYWRkKHJyLFJ0KGUsdCxbIlx1NjMwN1x1N0VCOVx1OEJDNlx1NTIyQlx1NEUyRC4uLiIsIlx1NjVFMFx1NkNENVx1OEJDNlx1NTIyQiJdKSwhMSksZ3QoKS5hZGQoY3IsUnQoZSx0LFsiXHU2MzA3XHU3RDBCXHU4QjU4XHU1MjI1XHU0RTJELi4uIiwiXHU3MTIxXHU2Q0Q1XHU4QjU4XHU1MjI1Il0pLCExKX0pO2Z1bmN0aW9uIFVuKGUpe2lmKHhlKCkpcmV0dXJuIFZpKGUsW1sidGl0bGVUZXh0Il0sWyJzZWFyY2hJbnB1dCIsInBsYWNlaG9sZGVyIl0sWyJidXR0b25zIiwidGV4dCJdXSl9ZnVuY3Rpb24gU3IoZSl7aWYoeGUoKSl7bGV0IHQ9ImNhcHRpb24iO3JldHVybiBWaShlLFtbImNvbnRlbnRkb3duIix0XSxbImNvbnRlbnRvdmVyIix0XSxbImNvbnRlbnRyZWZyZXNoIix0XV0pfX1mdW5jdGlvbiBGcihlKXtsZXQgdD1uZXcgSy5FbWl0dGVyO3JldHVybntvbihuLHIpe3JldHVybiB0Lm9uKG4scil9LG9uY2UobixyKXtyZXR1cm4gdC5vbmNlKG4scil9LG9mZihuLHIpe3JldHVybiB0Lm9mZihuLHIpfSxlbWl0KG4sLi4ucil7cmV0dXJuIHQuZW1pdChuLC4uLnIpfSxzdWJzY3JpYmUobixyLG89ITEpe3Rbbz8ib25jZSI6Im9uIl0oYCR7ZX0uJHtufWAscil9LHVuc3Vic2NyaWJlKG4scil7dC5vZmYoYCR7ZX0uJHtufWAscil9LHN1YnNjcmliZUhhbmRsZXIobixyLG8pe3QuZW1pdChgJHtlfS4ke259YCxyLG8pfX19bGV0IGJvPSJpbnZva2VWaWV3QXBpIixrbz0iaW52b2tlU2VydmljZUFwaSI7ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGU9ZSsiIixlLmluZGV4T2YoInJweCIpIT09LTF8fGUuaW5kZXhPZigidXB4IikhPT0tMX1mdW5jdGlvbiAkbihlLHQ9ITEpe2lmKHQpcmV0dXJuIEtuKGUpO2lmKHouaXNTdHJpbmcoZSkpe2xldCBuPXBhcnNlSW50KGUpfHwwO3JldHVybiBSbyhlKT9QLnVweDJweChuKTpufXJldHVybiBlfWZ1bmN0aW9uIEtuKGUpe3JldHVybiBSbyhlKT9lLnJlcGxhY2UoLyhcZCsoXC5cZCspPylbcnVdcHgvZywodCxuKT0+UC51cHgycHgocGFyc2VGbG9hdChuKSkrInB4Iik6ZX1mdW5jdGlvbiBIbihlKXtsZXQgdD1LLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZShlKTtpZih0LiRwYWdlKXJldHVybiB0LiRwYWdlLmlkO2lmKCF0LiQpcmV0dXJuO2xldCBuPXQuJC5yb290LnByb3h5O2lmKG4mJm4uJHBhZ2UpcmV0dXJuIG4uJHBhZ2UuaWR9ZnVuY3Rpb24gQWkoKXtsZXQgZT1SbigpLHQ9ZS5sZW5ndGg7aWYodClyZXR1cm4gZVt0LTFdfWZ1bmN0aW9uIGlzKCl7bGV0IGU9QWkoKTtpZihlKXJldHVybiBlLiRwYWdlLm1ldGF9ZnVuY3Rpb24gaGEoKXtsZXQgZT1pcygpO3JldHVybiBlP2UuaWQ6LTF9ZnVuY3Rpb24gd3IoKXtsZXQgZT1BaSgpO2lmKGUpcmV0dXJuIGUuJHZtfWxldCBUYT1bIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIl07ZnVuY3Rpb24gRGEoKXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShSLmdsb2JhbFN0eWxlfHx7fSkpfWZ1bmN0aW9uIEZhKGUsdCl7bGV0IG49RGEoKSxyPXouZXh0ZW5kKHtpZDp0fSxuLGUpO1RhLmZvckVhY2goYz0+e3JbY109ei5leHRlbmQoe30sbltjXSxlW2NdKX0pO2xldHtuYXZpZ2F0aW9uQmFyOm99PXI7cmV0dXJuIG8udGl0bGVUZXh0JiZvLnRpdGxlSW1hZ2UmJihvLnRpdGxlVGV4dD0iIikscn1mdW5jdGlvbiBWYShlKXtyZXR1cm4gSlNPTi5wYXJzZSgkbihKU09OLnN0cmluZ2lmeShlKSwhMCkpfWZ1bmN0aW9uIFVhKGUpe3JldHVybiBlLm9mZnNldCYmKGUub2Zmc2V0PSRuKGUub2Zmc2V0KSksZS5oZWlnaHQmJihlLmhlaWdodD0kbihlLmhlaWdodCkpLGUucmFuZ2UmJihlLnJhbmdlPSRuKGUucmFuZ2UpKSxlfWZ1bmN0aW9uIGdhKGUsdCxuLHIsbyxjKXtsZXR7aWQ6Zyxyb3V0ZTpifT1yLFY9Sy5ub3JtYWxpemVTdHlsZXMoci5uYXZpZ2F0aW9uQmFyLFIudGhlbWVDb25maWcsYykudGl0bGVDb2xvcjtyZXR1cm57aWQ6ZyxwYXRoOksuYWRkTGVhZGluZ1NsYXNoKGIpLHJvdXRlOmIsZnVsbFBhdGg6dCxvcHRpb25zOm4sbWV0YTpyLG9wZW5UeXBlOmUsZXZlbnRDaGFubmVsOm8sc3RhdHVzQmFyU3R5bGU6Vj09PSIjZmZmZmZmIj8ibGlnaHQiOiJkYXJrIn19ZnVuY3Rpb24gUGEoZSx0LG4pe2xldCByPWUuJFt0XTshei5pc0FycmF5KHIpfHxuLl9fd2VoJiZ6LnJlbW92ZShyLG4uX193ZWgpfWZ1bmN0aW9uIGpuKGUsdCxuKXtpZih6LmlzU3RyaW5nKGUpKW49dCx0PWUsZT13cigpO2Vsc2UgaWYodHlwZW9mIGU9PSJudW1iZXIiKXtsZXQgbz1SbigpLmZpbmQoYz0+Yy4kcGFnZS5pZD09PWUpO28/ZT1vLiR2bTplPXdyKCl9aWYoIWUpcmV0dXJuO2lmKGUuX19jYWxsX2hvb2spcmV0dXJuIGUuX19jYWxsX2hvb2sodCxuKTtsZXQgcj1lLiRbdF07cmV0dXJuIHImJksuaW52b2tlQXJyYXlGbnMocixuKX1mdW5jdGlvbiB4byhlKXtpZihlLmluZGV4T2YoIi8iKT09PTApcmV0dXJuIGU7bGV0IHQ9IiIsbj1SbigpO3JldHVybiBuLmxlbmd0aCYmKHQ9bltuLmxlbmd0aC0xXS4kcGFnZS5yb3V0ZSksUW8odCxlKX1mdW5jdGlvbiBRbyhlLHQpe2lmKHQuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gdDtpZih0LmluZGV4T2YoIi4vIik9PT0wKXJldHVybiBRbyhlLHQuc2xpY2UoMikpO2xldCBuPXQuc3BsaXQoIi8iKSxyPW4ubGVuZ3RoLG89MDtmb3IoO288ciYmbltvXT09PSIuLiI7bysrKTtuLnNwbGljZSgwLG8pLHQ9bi5qb2luKCIvIik7bGV0IGM9ZS5sZW5ndGg+MD9lLnNwbGl0KCIvIik6W107cmV0dXJuIGMuc3BsaWNlKGMubGVuZ3RoLW8tMSxvKzEpLEsuYWRkTGVhZGluZ1NsYXNoKGMuY29uY2F0KG4pLmpvaW4oIi8iKSl9ZnVuY3Rpb24gS2koZSx0PSExKXtyZXR1cm4gdD9EZS5maW5kKG49Pm4ucGF0aD09PWV8fG4uYWxpYXM9PT1lKTpEZS5maW5kKG49Pm4ucGF0aD09PWUpfWZ1bmN0aW9uIG9zKGUpe2xldCB0PUtpKGUpO2lmKHQpcmV0dXJuIHQubWV0YX1mdW5jdGlvbiBhcyhlLHQsbil7bGV0IHI9S2koSy5hZGRMZWFkaW5nU2xhc2godCkpO2lmKHIpe2xldHttZXRhOmN9PXI7ZGVsZXRlIGMudGFiQmFySW5kZXgsYy5pc1F1aXQ9Yy5pc1RhYkJhcj0hMX1sZXQgbz1LaShLLmFkZExlYWRpbmdTbGFzaChuKSk7aWYobyl7bGV0e21ldGE6Y309bztjLnRhYkJhckluZGV4PWUsYy5pc1F1aXQ9Yy5pc1RhYkJhcj0hMDtsZXQgZz1SLnRhYkJhcjtnJiZnLmxpc3QmJmcubGlzdFtlXSYmKGcubGlzdFtlXS5wYWdlUGF0aD1LLnJlbW92ZUxlYWRpbmdTbGFzaChuKSl9fWxldCBCbyxzcyxzbztmdW5jdGlvbiBoaSgpe3JldHVybiB0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmdHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJnR5cGVvZiBkb2N1bWVudD09Im9iamVjdCI/IndlYnZpZXciOiJ2OCJ9ZnVuY3Rpb24gT2koKXtyZXR1cm4gQm8ud2Vidmlldy5jdXJyZW50V2VidmlldygpLmlkfWxldCBaaSxnaSxocj17fTtmdW5jdGlvbiB1cihlKXtsZXQgdD1lLmRhdGEmJmUuZGF0YS5fX21lc3NhZ2U7aWYoIXR8fCF0Ll9fcGFnZSlyZXR1cm47bGV0IG49dC5fX3BhZ2Uscj1ocltuXTtyJiZyKHQpLHQua2VlcHx8ZGVsZXRlIGhyW25dfWZ1bmN0aW9uICRhKGUsdCl7aGkoKT09PSJ2OCI/c28/KFppJiZaaS5jbG9zZSgpLFppPW5ldyBzbyhPaSgpKSxaaS5vbm1lc3NhZ2U9dXIpOmdpfHwoZ2k9c3MucmVxdWlyZU1vZHVsZSgiZ2xvYmFsRXZlbnQiKSxnaS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsdXIpKTp3aW5kb3cuX19wbHVzTWVzc2FnZT11cixocltlXT10fWNsYXNzIEhhe2NvbnN0cnVjdG9yKHQpe3RoaXMud2Vidmlldz10fXNlbmRNZXNzYWdlKHQpe2xldCBuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe19fbWVzc2FnZTp7ZGF0YTp0fX0pKSxyPXRoaXMud2Vidmlldy5pZDtzbz9uZXcgc28ocikucG9zdE1lc3NhZ2Uobik6Qm8ud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcmJkJvLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KG4scil9Y2xvc2UoKXt0aGlzLndlYnZpZXcuY2xvc2UoKX19ZnVuY3Rpb24gWGkoe2NvbnRleHQ6ZT17fSx1cmw6dCxkYXRhOm49e30sc3R5bGU6cj17fSxvbk1lc3NhZ2U6byxvbkNsb3NlOmN9KXtsZXQgZz1SLmRhcmttb2RlO0JvPWUucGx1c3x8cyxzcz1lLndlZXh8fCh0eXBlb2YgZj09Im9iamVjdCI/ZjpudWxsKSxzbz1lLkJyb2FkY2FzdENoYW5uZWx8fCh0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbD09Im9iamVjdCI/QnJvYWRjYXN0Q2hhbm5lbDpudWxsKTtsZXQgYj17YXV0b0JhY2tCdXR0b246ITAsdGl0bGVTaXplOiIxN3B4In0sVj1gcGFnZSR7RGF0ZS5ub3coKX1gO3I9ei5leHRlbmQoe30sciksci50aXRsZU5WaWV3IT09ITEmJnIudGl0bGVOVmlldyE9PSJub25lIiYmKHIudGl0bGVOVmlldz16LmV4dGVuZChiLHIudGl0bGVOVmlldykpO2xldCBUPXt0b3A6MCxib3R0b206MCx1c2luZ0NvbXBvbmVudHM6e30scG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSIsYW5pbWF0aW9uVHlwZToicG9wLWluIixhbmltYXRpb25EdXJhdGlvbjoyMDAsdW5pTlZpZXc6e3BhdGg6YC8ke3R9LmpzYCxkZWZhdWx0Rm9udFNpemU6MTYsdmlld3BvcnQ6Qm8uc2NyZWVuLnJlc29sdXRpb25XaWR0aH19O3I9ei5leHRlbmQoVCxyKTtsZXQgRD1Cby53ZWJ2aWV3LmNyZWF0ZSgiIixWLHIse2V4dHJhczp7ZnJvbTpPaSgpLHJ1bnRpbWU6aGkoKSxkYXRhOnouZXh0ZW5kKHt9LG4se2Rhcmttb2RlOmd9KSx1c2VHbG9iYWxFdmVudDohc299fSk7cmV0dXJuIEQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLGMpLCRhKFYsdmU9Pnt6LmlzRnVuY3Rpb24obykmJm8odmUuZGF0YSksdmUua2VlcHx8RC5jbG9zZSgiYXV0byIpfSksRC5zaG93KHIuYW5pbWF0aW9uVHlwZSxyLmFuaW1hdGlvbkR1cmF0aW9uKSxuZXcgSGEoRCl9bGV0IGxvPShlLHQpPT5vdC5lbWl0KCJhcGkuIitlLHQpLGNvPTE7ZnVuY3Rpb24gbHMoZSl7cmV0dXJuKGV8fGhhKCkpKyIuIitib31sZXQgcGE9KGUsdCxuLHIpPT57bGV0e3N1YnNjcmliZTpvLHB1Ymxpc2hIYW5kbGVyOmN9PW90LGc9cj9jbysrOjA7ciYmbyhibysiLiIrZyxyLCEwKSxjKGxzKG4pLHtpZDpnLG5hbWU6ZSxhcmdzOnR9LG4pfSxNbz0oZSx0LG4scik9PntsZXR7c3Vic2NyaWJlOm8sdW5zdWJzY3JpYmU6YyxwdWJsaXNoSGFuZGxlcjpnfT1vdCxiPWNvKyssVj1ibysiLiIrYjtyZXR1cm4gbyhWLG4pLGcobHMocikse2lkOmIsbmFtZTplLGFyZ3M6dH0sciksKCk9PntjKFYpfX0sdmE9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiB2KCl7b3Quc3Vic2NyaWJlKGtvLCQpfWZ1bmN0aW9uIHgoZSx0KXt2YVtlXXx8KHZhW2VdPXQpfWZ1bmN0aW9uICQoe2lkOmUsbmFtZTp0LGFyZ3M6bn0scil7bGV0IG89Zz0+e2UmJm90LnB1Ymxpc2hIYW5kbGVyKGtvKyIuIitlLGcscil9LGM9dmFbdF07Yz9jKG4sbyk6byh7fSl9bGV0IFU9ei5leHRlbmQoRnIoInZpZXciKSx7aW52b2tlT25DYWxsYmFjazpsbyxpbnZva2VWaWV3TWV0aG9kOnBhLGludm9rZVZpZXdNZXRob2RLZWVwQWxpdmU6TW99KTtmdW5jdGlvbiBaKCl7bGV0e29uOmV9PW90O2UoSy5PTl9SRVNJWkUsSiksZShLLk9OX0FQUF9FTlRFUl9GT1JFR1JPVU5ELGVlKSxlKEsuT05fQVBQX0VOVEVSX0JBQ0tHUk9VTkQsY2UpfWZ1bmN0aW9uIEooZSl7am4oQWkoKSxLLk9OX1JFU0laRSxlKSxvdC5pbnZva2VPbkNhbGxiYWNrKCJvbldpbmRvd1Jlc2l6ZSIsZSl9ZnVuY3Rpb24gZWUoZSl7bGV0IHQ9QWkoKTtqbihDdCgpLEsuT05fU0hPVyxlKSxqbih0LEsuT05fU0hPVyl9ZnVuY3Rpb24gY2UoKXtqbihDdCgpLEsuT05fSElERSksam4oQWkoKSxLLk9OX0hJREUpfWxldCBoZT1bSy5PTl9QQUdFX1NDUk9MTCxLLk9OX1JFQUNIX0JPVFRPTV07ZnVuY3Rpb24gVGUoKXtoZS5mb3JFYWNoKGU9Pm90LnN1YnNjcmliZShlLGZlKGUpKSl9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuKHQsbik9PntqbihwYXJzZUludChuKSxlLHQpfX1mdW5jdGlvbiB3ZSgpe1ooKSxUZSgpfWZ1bmN0aW9uIGx0KGUpe2UuJHZtPWUsZS4kbXBUeXBlPSJhcHAiO2xldCB0PW1uLnJlZihndCgpLmdldExvY2FsZSgpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiJGxvY2FsZSIse2dldCgpe3JldHVybiB0LnZhbHVlfSxzZXQobil7dC52YWx1ZT1ufX0pfWZ1bmN0aW9uIHB0KGUsdCl7ZS5yb3V0ZT10LnJvdXRlLGUuJHZtPWUsZS4kcGFnZT10LGUuJG1wVHlwZT0icGFnZSIsdC5tZXRhLmlzVGFiQmFyJiYoZS4kLl9faXNUYWJCYXI9ITAsZS4kLl9faXNBY3RpdmU9ITApfWZ1bmN0aW9uIGp0KCl7cmV0dXJue3BhdGg6IiIscXVlcnk6e30sc2NlbmU6MTAwMSxyZWZlcnJlckluZm86e2FwcElkOiIiLGV4dHJhRGF0YTp7fX19fWZ1bmN0aW9uIHl0KGUsdCl7bGV0IG49ZS4kb3B0aW9uc3x8e307bi5nbG9iYWxEYXRhPXouZXh0ZW5kKG4uZ2xvYmFsRGF0YXx8e30sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImdsb2JhbERhdGEiLHtnZXQoKXtyZXR1cm4gbi5nbG9iYWxEYXRhfSxzZXQocil7bi5nbG9iYWxEYXRhPXJ9fSl9ZnVuY3Rpb24gSGUoZSl7aWYoZS5pbmRleE9mKCIvLyIpPT09MClyZXR1cm4iaHR0cHM6IitlO2lmKEsuU0NIRU1FX1JFLnRlc3QoZSl8fEsuREFUQV9SRS50ZXN0KGUpKXJldHVybiBlO2lmKHZuKGUpKXJldHVybiJmaWxlOi8vIitEdChlKTtsZXQgdD0iZmlsZTovLyIrRHQoIl93d3ciKTtpZihlLmluZGV4T2YoIi8iKT09PTApcmV0dXJuIGUuc3RhcnRzV2l0aCgiL3N0b3JhZ2UvIil8fGUuc3RhcnRzV2l0aCgiL3NkY2FyZC8iKXx8ZS5pbmNsdWRlcygiL0NvbnRhaW5lcnMvRGF0YS9BcHBsaWNhdGlvbi8iKT8iZmlsZTovLyIrZTp0K2U7aWYoZS5pbmRleE9mKCIuLi8iKT09PTB8fGUuaW5kZXhPZigiLi8iKT09PTApe2lmKHR5cGVvZiBfX2lkX189PSJzdHJpbmciKXJldHVybiB0K1FvKEsuYWRkTGVhZGluZ1NsYXNoKF9faWRfXyksZSk7e2xldCBuPUFpKCk7aWYobilyZXR1cm4gdCtRbyhLLmFkZExlYWRpbmdTbGFzaChuLnJvdXRlKSxlKX19cmV0dXJuIGV9bGV0IER0PUsuY2FjaGVTdHJpbmdGdW5jdGlvbihlPT5zLmlvLmNvbnZlcnRMb2NhbEZpbGVTeXN0ZW1VUkwoZSkucmVwbGFjZSgvXlwvP2FwcHNcLy8sIi9hbmRyb2lkX2Fzc2V0L2FwcHMvIikucmVwbGFjZSgvXC8kLywiIikpO2Z1bmN0aW9uIHZuKGUpe3JldHVybiBlLmluZGV4T2YoIl93d3ciKT09PTB8fGUuaW5kZXhPZigiX2RvYyIpPT09MHx8ZS5pbmRleE9mKCJfZG9jdW1lbnRzIik9PT0wfHxlLmluZGV4T2YoIl9kb3dubG9hZHMiKT09PTB9bGV0IHF0PSJzdWNjZXNzIixkdD0iZmFpbCIsTG49W3F0LGR0LCJjb21wbGV0ZSJdO2Z1bmN0aW9uIEp0KGUsdCxuLHIpe2lmKCFlKXJldHVybjtpZih0eXBlb2Ygbj09InVuZGVmaW5lZCIpcmV0dXJuIGVbdF0oKTtsZXRbLG9dPWVhKG4scik7cmV0dXJuIE9iamVjdC5rZXlzKG8pLmxlbmd0aD9lW3RdKHBpKHQsbykpOmVbdF0oKX1mdW5jdGlvbiB6dChlLHQsbixyKXtpZighZSlyZXR1cm47bGV0W28sY109ZWEobixyKTtyZXR1cm4gT2JqZWN0LmtleXMoYykubGVuZ3RoP2VbdF0obyxwaSh0LGMpKTplW3RdKG8pfWZ1bmN0aW9uICR0KGUsdCl7bGV0IG49WnQoZSx0LiRlbCk7cmV0dXJuIG58fGNvbnNvbGUuZXJyb3IoIkNhbiBub3QgZmluZCBgIitlKyJgIil9ZnVuY3Rpb24gWnQoZSx0KXtpZighZXx8IXQpcmV0dXJuO2lmKHQuYXR0ciYmdC5hdHRyLmlkPT09ZSlyZXR1cm4gdDtsZXQgbj10LmNoaWxkcmVuO2lmKCEhbilmb3IobGV0IHI9MCxvPW4ubGVuZ3RoO3I8bztyKyspe2xldCBjPVp0KGUsbltyXSk7aWYoYylyZXR1cm4gY319ZnVuY3Rpb24gZWEoZT17fSx0KXtsZXQgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZnVuY3Rpb24oYyl7bGV0IGc9ZVtjXTt6LmlzRnVuY3Rpb24oZykmJihuW2NdPWcsZGVsZXRlIGVbY10pfTtyZXR1cm4gTG4uZm9yRWFjaChyKSx0JiZ0LmZvckVhY2gociksW2Usbl19ZnVuY3Rpb24gcGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IG89ci50eXBlO2RlbGV0ZSByLnR5cGU7bGV0IGM9dFtvXTtpZihvPT09cXQ/ci5lcnJNc2c9YCR7ZX06b2tgOm89PT1kdCYmKHIuZXJyTXNnPWUrIjpmYWlsICIrKHIubXNnPyIgIityLm1zZzoiIikpLGRlbGV0ZSByLmNvZGUsZGVsZXRlIHIubXNnLHouaXNGdW5jdGlvbihjKSYmYyhyKSxvPT09cXR8fG89PT1kdCl7bGV0IGc9dC5jb21wbGV0ZTt6LmlzRnVuY3Rpb24oZykmJmcocil9fX1sZXQgaWk7ZnVuY3Rpb24gUWkoKXtyZXR1cm4gaWl9ZnVuY3Rpb24gamEoZSl7bGV0IHQ9ZS4kO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmN0eCwiJGNoaWxkcmVuIix7Z2V0KCl7cmV0dXJuIEduKCkubWFwKHI9PnIuJHZtKX19KTtsZXQgbj10LmFwcENvbnRleHQ7aWk9ei5leHRlbmQobi5hcHAse21vdW50UGFnZShyLG8sYyl7bGV0IGc9bW4uY3JlYXRlVk5vZGUocixvKTtnLmFwcENvbnRleHQ9bixnLl9fcGFnZV9jb250YWluZXJfXz1jLG1uLnJlbmRlcihnLGMpO2xldCBiPWcuY29tcG9uZW50LnByb3h5O3JldHVybiBiLl9fcGFnZV9jb250YWluZXJfXz1jLGJ9LHVubW91bnRQYWdlOnI9PntsZXR7X19wYWdlX2NvbnRhaW5lcl9fOm99PXI7byYmKG8uaXNVbm1vdW50ZWQ9ITAsbW4ucmVuZGVyKG51bGwsbykpfX0pfWxldCB6bj1bXTtmdW5jdGlvbiBXbihlKXtpZighZS4kcGFnZS5tZXRhLmlzTlZ1ZSlyZXR1cm4gem4ucHVzaChlKTtsZXQgbj16bi5maW5kSW5kZXgocj0+ci4kcGFnZS5pZD09PWUuJHBhZ2UuaWQpO24+LTE/em4uc3BsaWNlKG4sMSxlKTp6bi5wdXNoKGUpfWZ1bmN0aW9uIE5yKGUpe3JldHVybiB6bi5maW5kKHQ9PnQuJHBhZ2UuaWQ9PT1lKX1mdW5jdGlvbiBHbigpe3JldHVybiB6bn1mdW5jdGlvbiBDcigpe2xldCBlPVtdO3JldHVybiB6bi5mb3JFYWNoKHQ9Pnt0LiQuX19pc1RhYkJhcj90LiQuX19pc0FjdGl2ZSYmZS5wdXNoKHQpOmUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gcXIoKXtsZXQgZT1BaSgpOyFlfHx0YShlKX1mdW5jdGlvbiB0YShlKXtsZXQgdD16bi5maW5kSW5kZXgobj0+bj09PWUpO3QhPT0tMSYmKGUuJHBhZ2UubWV0YS5pc05WdWV8fFFpKCkudW5tb3VudFBhZ2UoZSksem4uc3BsaWNlKHQsMSkpfWxldCBjcz17cGxheShlKXtyZXR1cm4gSnQoZSwicGxheSIpfSxwYXVzZShlKXtyZXR1cm4gSnQoZSwicGF1c2UiKX0sc2VlayhlLHQpe3JldHVybiB6dChlLCJzZWVrIix0LnBvc2l0aW9uKX0sc3RvcChlKXtyZXR1cm4gSnQoZSwic3RvcCIpfSxzZW5kRGFubXUoZSx0KXtyZXR1cm4genQoZSwic2VuZERhbm11Iix0KX0scGxheWJhY2tSYXRlKGUsdCl7cmV0dXJuIHp0KGUsInBsYXliYWNrUmF0ZSIsdC5yYXRlKX0scmVxdWVzdEZ1bGxTY3JlZW4oZSx0PXt9KXtyZXR1cm4genQoZSwicmVxdWVzdEZ1bGxTY3JlZW4iLHQpfSxleGl0RnVsbFNjcmVlbihlKXtyZXR1cm4gSnQoZSwiZXhpdEZ1bGxTY3JlZW4iKX0sc2hvd1N0YXR1c0JhcihlKXtyZXR1cm4gSnQoZSwic2hvd1N0YXR1c0JhciIpfSxoaWRlU3RhdHVzQmFyKGUpe3JldHVybiBKdChlLCJoaWRlU3RhdHVzQmFyIil9fTtmdW5jdGlvbiBsbihlLHQsbixyKXtsZXQgbz1Ocih0KTtpZihvPT1udWxsP3ZvaWQgMDpvLiRwYWdlLm1ldGEuaXNOVnVlKXtsZXQgYz1vLiR2bTtyZXR1cm4gY3Nbbl0oJHQoZSxjKSxyKX1vdC5pbnZva2VWaWV3TWV0aG9kKCJ2aWRlby4iK2Use3ZpZGVvSWQ6ZSx0eXBlOm4sZGF0YTpyfSx0KX1sZXQgeW49e2dldENlbnRlckxvY2F0aW9uKGUsdCl7cmV0dXJuIEp0KGUsImdldENlbnRlckxvY2F0aW9uIix0KX0sbW92ZVRvTG9jYXRpb24oZSx0KXtyZXR1cm4genQoZSwibW92ZVRvTG9jYXRpb24iLHQpfSx0cmFuc2xhdGVNYXJrZXIoZSx0KXtyZXR1cm4genQoZSwidHJhbnNsYXRlTWFya2VyIix0LFsiYW5pbWF0aW9uRW5kIl0pfSxpbmNsdWRlUG9pbnRzKGUsdCl7cmV0dXJuIHp0KGUsImluY2x1ZGVQb2ludHMiLHQpfSxnZXRSZWdpb24oZSx0KXtyZXR1cm4gSnQoZSwiZ2V0UmVnaW9uIix0KX0sZ2V0U2NhbGUoZSx0KXtyZXR1cm4gSnQoZSwiZ2V0U2NhbGUiLHQpfSxhZGRDdXN0b21MYXllcihlLHQpe3JldHVybiB6dChlLCJhZGRDdXN0b21MYXllciIsdCl9LHJlbW92ZUN1c3RvbUxheWVyKGUsdCl7cmV0dXJuIHp0KGUsInJlbW92ZUN1c3RvbUxheWVyIix0KX0sYWRkR3JvdW5kT3ZlcmxheShlLHQpe3JldHVybiB6dChlLCJhZGRHcm91bmRPdmVybGF5Iix0KX0scmVtb3ZlR3JvdW5kT3ZlcmxheShlLHQpe3JldHVybiB6dChlLCJyZW1vdmVHcm91bmRPdmVybGF5Iix0KX0sdXBkYXRlR3JvdW5kT3ZlcmxheShlLHQpe3JldHVybiB6dChlLCJ1cGRhdGVHcm91bmRPdmVybGF5Iix0KX0saW5pdE1hcmtlckNsdXN0ZXIoZSx0KXtyZXR1cm4genQoZSwiaW5pdE1hcmtlckNsdXN0ZXIiLHQpfSxhZGRNYXJrZXJzKGUsdCl7cmV0dXJuIHp0KGUsImFkZE1hcmtlcnMiLHQpfSxyZW1vdmVNYXJrZXJzKGUsdCl7cmV0dXJuIHp0KGUsInJlbW92ZU1hcmtlcnMiLHQpfSxtb3ZlQWxvbmcoZSx0KXtyZXR1cm4genQoZSwibW92ZUFsb25nIix0KX0sc2V0TG9jTWFya2VySWNvbihlLHQpe3JldHVybiB6dChlLCJzZXRMb2NNYXJrZXJJY29uIix0KX0sb3Blbk1hcEFwcChlLHQpe3JldHVybiB6dChlLCJvcGVuTWFwQXBwIix0KX0sb24oZSx0KXtyZXR1cm4gZS5vbih0Lm5hbWUsdC5jYWxsYmFjayl9fTtmdW5jdGlvbiBZbihlLHQsbixyLG8pe2xldCBjPU5yKHQpO2lmKGM9PW51bGw/dm9pZCAwOmMuJHBhZ2UubWV0YS5pc05WdWUpe2xldCBnPWMuJHZtO3JldHVybiB5bltuXSgkdChlLGcpLHIpfW90Lmludm9rZVZpZXdNZXRob2QoIm1hcC4iK2Use3R5cGU6bixkYXRhOnJ9LHQsbyl9ZnVuY3Rpb24gWm4oZSl7cmV0dXJuYEludGVyc2VjdGlvbk9ic2VydmVyLiR7ZX1gfWZ1bmN0aW9uIFRpKHtyZXFJZDplLGNvbXBvbmVudDp0LG9wdGlvbnM6bixjYWxsYmFjazpyfSxvKXtsZXQgYz1abihlKTtvdC5pbnZva2VWaWV3TWV0aG9kKCJhZGRJbnRlcnNlY3Rpb25PYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZCxvcHRpb25zOm4sZXZlbnROYW1lOmN9LG8pLG90LnN1YnNjcmliZShjLHIpfWZ1bmN0aW9uIHVzKHtyZXFJZDplLGNvbXBvbmVudDp0fSxuKXtvdC5pbnZva2VWaWV3TWV0aG9kKCJyZW1vdmVJbnRlcnNlY3Rpb25PYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZH0sbiksb3QudW5zdWJzY3JpYmUoWm4oZSkpfWZ1bmN0aW9uIHphKGUpe3JldHVybmBNZWRpYVF1ZXJ5T2JzZXJ2ZXIuJHtlfWB9ZnVuY3Rpb24gSWEoe3JlcUlkOmUsY29tcG9uZW50OnQsb3B0aW9uczpuLGNhbGxiYWNrOnJ9LG8pe2xldCBjPXphKGUpO290Lmludm9rZVZpZXdNZXRob2QoImFkZE1lZGlhUXVlcnlPYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZCxvcHRpb25zOm4sZXZlbnROYW1lOmN9LG8pLG90LnN1YnNjcmliZShjLHIpfWZ1bmN0aW9uIG5hKHtyZXFJZDplLGNvbXBvbmVudDp0fSxuKXtvdC5pbnZva2VWaWV3TWV0aG9kKCJyZW1vdmVNZWRpYVF1ZXJ5T2JzZXJ2ZXIiLHtyZXFJZDplLGNvbXBvbmVudDp0LiRlbC5ub2RlSWR9LG4pLG90LnVuc3Vic2NyaWJlKHphKGUpKX1sZXQgdW89MjAwLFdhPVsidW5rbm93biIsIm5vbmUiLCJldGhlcm5ldCIsIndpZmkiLCIyZyIsIjNnIiwiNGciLCI1ZyJdLGZzPSJfZG9jL3VuaWFwcF90ZW1wIixKcj1gJHtmc31fJHtEYXRlLm5vdygpfWA7ZnVuY3Rpb24gR2EoZSl7bGV0IHQ9ZS5zcGxpdCgiLyIpO3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIFlhKGUpe2xldCB0PWUuc3BsaXQoIi4iKTtyZXR1cm4gdC5sZW5ndGg+MT8iLiIrdFt0Lmxlbmd0aC0xXToiIn1sZXQgTG89ImJhY2tidXR0b24iO2Z1bmN0aW9uIFVpKCl7UC5uYXZpZ2F0ZUJhY2soe2Zyb206ImJhY2tidXR0b24iLHN1Y2Nlc3MoKXt9fSl9bGV0IEVvPWp0KCkseW89anQoKTtmdW5jdGlvbiBkcygpe3JldHVybiB6LmV4dGVuZCh7fSx5byl9ZnVuY3Rpb24gRG8oKXtyZXR1cm4gei5leHRlbmQoe30sRW8pfWZ1bmN0aW9uIHhzKHtwYXRoOmUscXVlcnk6dCxyZWZlcnJlckluZm86bn0pe3ouZXh0ZW5kKEVvLHtwYXRoOmUscXVlcnk6dD9LLnBhcnNlUXVlcnkodCk6e30scmVmZXJyZXJJbmZvOm58fHt9fSl9ZnVuY3Rpb24gaHMoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7cmV0dXJuIHouZXh0ZW5kKHlvLHtwYXRoOmUscXVlcnk6dD9LLnBhcnNlUXVlcnkodCk6e30scmVmZXJyZXJJbmZvOm58fHt9LGNoYW5uZWw6cy5ydW50aW1lLmNoYW5uZWwsbGF1bmNoZXI6cy5ydW50aW1lLmxhdW5jaGVyfSksei5leHRlbmQoRW8seW8pLHouZXh0ZW5kKHt9LHlvKX1mdW5jdGlvbiBCcygpe2xldCBlPWYucmVxdWlyZU1vZHVsZSgicGx1cyIpO2lmKGUuZ2V0UmVkaXJlY3RJbmZvKXtsZXR7cGF0aDp0LHF1ZXJ5Om4sZXh0cmFEYXRhOnIsdXNlckFjdGlvbjpvLGZyb21BcHBpZDpjfT1lLmdldFJlZGlyZWN0SW5mbygpfHx7fSxnPXthcHBJZDpjLGV4dHJhRGF0YTp7fX07cmV0dXJuIHImJihnLmV4dHJhRGF0YT1yKSx7cGF0aDp0fHwiIixxdWVyeTpuPyI/IituOiIiLHJlZmVycmVySW5mbzpnLHVzZXJBY3Rpb246b319fXZhciBOZT17fTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIFVpbnQ4QXJyYXkhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgVWludDE2QXJyYXkhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgSW50MzJBcnJheSE9InVuZGVmaW5lZCI7ZnVuY3Rpb24gbihjLGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxnKX1lLmFzc2lnbj1mdW5jdGlvbihjKXtmb3IodmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2cubGVuZ3RoOyl7dmFyIGI9Zy5zaGlmdCgpO2lmKCEhYil7aWYodHlwZW9mIGIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoYisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBWIGluIGIpbihiLFYpJiYoY1tWXT1iW1ZdKX19cmV0dXJuIGN9LGUuc2hyaW5rQnVmPWZ1bmN0aW9uKGMsZyl7cmV0dXJuIGMubGVuZ3RoPT09Zz9jOmMuc3ViYXJyYXk/Yy5zdWJhcnJheSgwLGcpOihjLmxlbmd0aD1nLGMpfTt2YXIgcj17YXJyYXlTZXQ6ZnVuY3Rpb24oYyxnLGIsVixUKXtpZihnLnN1YmFycmF5JiZjLnN1YmFycmF5KXtjLnNldChnLnN1YmFycmF5KGIsYitWKSxUKTtyZXR1cm59Zm9yKHZhciBEPTA7RDxWO0QrKyljW1QrRF09Z1tiK0RdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKGMpe3ZhciBnLGIsVixULEQsdmU7Zm9yKFY9MCxnPTAsYj1jLmxlbmd0aDtnPGI7ZysrKVYrPWNbZ10ubGVuZ3RoO2Zvcih2ZT1uZXcgVWludDhBcnJheShWKSxUPTAsZz0wLGI9Yy5sZW5ndGg7ZzxiO2crKylEPWNbZ10sdmUuc2V0KEQsVCksVCs9RC5sZW5ndGg7cmV0dXJuIHZlfX0sbz17YXJyYXlTZXQ6ZnVuY3Rpb24oYyxnLGIsVixUKXtmb3IodmFyIEQ9MDtEPFY7RCsrKWNbVCtEXT1nW2IrRF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oYyl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGMpfX07ZS5zZXRUeXBlZD1mdW5jdGlvbihjKXtjPyhlLkJ1Zjg9VWludDhBcnJheSxlLkJ1ZjE2PVVpbnQxNkFycmF5LGUuQnVmMzI9SW50MzJBcnJheSxlLmFzc2lnbihlLHIpKTooZS5CdWY4PUFycmF5LGUuQnVmMTY9QXJyYXksZS5CdWYzMj1BcnJheSxlLmFzc2lnbihlLG8pKX0sZS5zZXRUeXBlZCh0KX0pKE5lKTt2YXIga3Q9e30sSXQ9e30sT249e30sQXI9TmUsUGk9NCxlbz0wLEZvPTEsTmE9MjtmdW5jdGlvbiByYShlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7LS10Pj0wOyllW3RdPTB9dmFyIGdzPTAscHM9MSxkbD0yLCRsPTMsSGw9MjU4LE1zPTI5LFZvPTI1NixVbz1WbysxK01zLGlhPTMwLHFhPTE5LHZzPTIqVW8rMSwkbz0xNSxMcz0xNixqbD03LERzPTI1Nixtcz0xNixobD0xNyxGcz0xOCxKYT1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxfcz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sVnM9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLFVzPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxnbD01MTIsSG89bmV3IEFycmF5KChVbysyKSoyKTtyYShIbyk7dmFyIEthPW5ldyBBcnJheShpYSoyKTtyYShLYSk7dmFyIG1hPW5ldyBBcnJheShnbCk7cmEobWEpO3ZhciBrYT1uZXcgQXJyYXkoSGwtJGwrMSk7cmEoa2EpO3ZhciBTbz1uZXcgQXJyYXkoTXMpO3JhKFNvKTt2YXIgb2E9bmV3IEFycmF5KGlhKTtyYShvYSk7ZnVuY3Rpb24gWmEoZSx0LG4scixvKXt0aGlzLnN0YXRpY190cmVlPWUsdGhpcy5leHRyYV9iaXRzPXQsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1vLHRoaXMuaGFzX3N0cmVlPWUmJmUubGVuZ3RofXZhciAkcyxwbCxhYTtmdW5jdGlvbiBYYShlLHQpe3RoaXMuZHluX3RyZWU9ZSx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9dH1mdW5jdGlvbiBIcyhlKXtyZXR1cm4gZTwyNTY/bWFbZV06bWFbMjU2KyhlPj4+NyldfWZ1bmN0aW9uIFFhKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dCYyNTUsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1fWZ1bmN0aW9uIG9pKGUsdCxuKXtlLmJpX3ZhbGlkPkxzLW4/KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LFFhKGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PkxzLWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9bi1Mcyk6KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGUuYmlfdmFsaWQrPW4pfWZ1bmN0aW9uIFZyKGUsdCxuKXtvaShlLG5bdCoyXSxuW3QqMisxXSl9ZnVuY3Rpb24gc2EoZSx0KXt2YXIgbj0wO2RvIG58PWUmMSxlPj4+PTEsbjw8PTE7d2hpbGUoLS10PjApO3JldHVybiBuPj4+MX1mdW5jdGlvbiB2bChlKXtlLmJpX3ZhbGlkPT09MTY/KFFhKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTplLmJpX3ZhbGlkPj04JiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109ZS5iaV9idWYmMjU1LGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX1mdW5jdGlvbiB6bChlLHQpe3ZhciBuPXQuZHluX3RyZWUscj10Lm1heF9jb2RlLG89dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsYz10LnN0YXRfZGVzYy5oYXNfc3RyZWUsZz10LnN0YXRfZGVzYy5leHRyYV9iaXRzLGI9dC5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxWPXQuc3RhdF9kZXNjLm1heF9sZW5ndGgsVCxELHZlLHllLE9lLGZ0LGh0PTA7Zm9yKHllPTA7eWU8PSRvO3llKyspZS5ibF9jb3VudFt5ZV09MDtmb3IobltlLmhlYXBbZS5oZWFwX21heF0qMisxXT0wLFQ9ZS5oZWFwX21heCsxO1Q8dnM7VCsrKUQ9ZS5oZWFwW1RdLHllPW5bbltEKjIrMV0qMisxXSsxLHllPlYmJih5ZT1WLGh0KyspLG5bRCoyKzFdPXllLCEoRD5yKSYmKGUuYmxfY291bnRbeWVdKyssT2U9MCxEPj1iJiYoT2U9Z1tELWJdKSxmdD1uW0QqMl0sZS5vcHRfbGVuKz1mdCooeWUrT2UpLGMmJihlLnN0YXRpY19sZW4rPWZ0KihvW0QqMisxXStPZSkpKTtpZihodCE9PTApe2Rve2Zvcih5ZT1WLTE7ZS5ibF9jb3VudFt5ZV09PT0wOyl5ZS0tO2UuYmxfY291bnRbeWVdLS0sZS5ibF9jb3VudFt5ZSsxXSs9MixlLmJsX2NvdW50W1ZdLS0saHQtPTJ9d2hpbGUoaHQ+MCk7Zm9yKHllPVY7eWUhPT0wO3llLS0pZm9yKEQ9ZS5ibF9jb3VudFt5ZV07RCE9PTA7KXZlPWUuaGVhcFstLVRdLCEodmU+cikmJihuW3ZlKjIrMV0hPT15ZSYmKGUub3B0X2xlbis9KHllLW5bdmUqMisxXSkqblt2ZSoyXSxuW3ZlKjIrMV09eWUpLEQtLSl9fWZ1bmN0aW9uIGpzKGUsdCxuKXt2YXIgcj1uZXcgQXJyYXkoJG8rMSksbz0wLGMsZztmb3IoYz0xO2M8PSRvO2MrKylyW2NdPW89bytuW2MtMV08PDE7Zm9yKGc9MDtnPD10O2crKyl7dmFyIGI9ZVtnKjIrMV07YiE9PTAmJihlW2cqMl09c2EocltiXSsrLGIpKX19ZnVuY3Rpb24gYnMoKXt2YXIgZSx0LG4scixvLGM9bmV3IEFycmF5KCRvKzEpO2ZvcihuPTAscj0wO3I8TXMtMTtyKyspZm9yKFNvW3JdPW4sZT0wO2U8MTw8SmFbcl07ZSsrKWthW24rK109cjtmb3Ioa2Fbbi0xXT1yLG89MCxyPTA7cjwxNjtyKyspZm9yKG9hW3JdPW8sZT0wO2U8MTw8X3Nbcl07ZSsrKW1hW28rK109cjtmb3Iobz4+PTc7cjxpYTtyKyspZm9yKG9hW3JdPW88PDcsZT0wO2U8MTw8X3Nbcl0tNztlKyspbWFbMjU2K28rK109cjtmb3IodD0wO3Q8PSRvO3QrKyljW3RdPTA7Zm9yKGU9MDtlPD0xNDM7KUhvW2UqMisxXT04LGUrKyxjWzhdKys7Zm9yKDtlPD0yNTU7KUhvW2UqMisxXT05LGUrKyxjWzldKys7Zm9yKDtlPD0yNzk7KUhvW2UqMisxXT03LGUrKyxjWzddKys7Zm9yKDtlPD0yODc7KUhvW2UqMisxXT04LGUrKyxjWzhdKys7Zm9yKGpzKEhvLFVvKzEsYyksZT0wO2U8aWE7ZSsrKUthW2UqMisxXT01LEthW2UqMl09c2EoZSw1KTskcz1uZXcgWmEoSG8sSmEsVm8rMSxVbywkbykscGw9bmV3IFphKEthLF9zLDAsaWEsJG8pLGFhPW5ldyBaYShuZXcgQXJyYXkoMCksVnMsMCxxYSxqbCl9ZnVuY3Rpb24genMoZSl7dmFyIHQ7Zm9yKHQ9MDt0PFVvO3QrKyllLmR5bl9sdHJlZVt0KjJdPTA7Zm9yKHQ9MDt0PGlhO3QrKyllLmR5bl9kdHJlZVt0KjJdPTA7Zm9yKHQ9MDt0PHFhO3QrKyllLmJsX3RyZWVbdCoyXT0wO2UuZHluX2x0cmVlW0RzKjJdPTEsZS5vcHRfbGVuPWUuc3RhdGljX2xlbj0wLGUubGFzdF9saXQ9ZS5tYXRjaGVzPTB9ZnVuY3Rpb24gV3MoZSl7ZS5iaV92YWxpZD44P1FhKGUsZS5iaV9idWYpOmUuYmlfdmFsaWQ+MCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBtbChlLHQsbixyKXtXcyhlKSxyJiYoUWEoZSxuKSxRYShlLH5uKSksQXIuYXJyYXlTZXQoZS5wZW5kaW5nX2J1ZixlLndpbmRvdyx0LG4sZS5wZW5kaW5nKSxlLnBlbmRpbmcrPW59ZnVuY3Rpb24gR3MoZSx0LG4scil7dmFyIG89dCoyLGM9bioyO3JldHVybiBlW29dPGVbY118fGVbb109PT1lW2NdJiZyW3RdPD1yW25dfWZ1bmN0aW9uIEVzKGUsdCxuKXtmb3IodmFyIHI9ZS5oZWFwW25dLG89bjw8MTtvPD1lLmhlYXBfbGVuJiYobzxlLmhlYXBfbGVuJiZHcyh0LGUuaGVhcFtvKzFdLGUuaGVhcFtvXSxlLmRlcHRoKSYmbysrLCFHcyh0LHIsZS5oZWFwW29dLGUuZGVwdGgpKTspZS5oZWFwW25dPWUuaGVhcFtvXSxuPW8sbzw8PTE7ZS5oZWFwW25dPXJ9ZnVuY3Rpb24geXMoZSx0LG4pe3ZhciByLG8sYz0wLGcsYjtpZihlLmxhc3RfbGl0IT09MClkbyByPWUucGVuZGluZ19idWZbZS5kX2J1ZitjKjJdPDw4fGUucGVuZGluZ19idWZbZS5kX2J1ZitjKjIrMV0sbz1lLnBlbmRpbmdfYnVmW2UubF9idWYrY10sYysrLHI9PT0wP1ZyKGUsbyx0KTooZz1rYVtvXSxWcihlLGcrVm8rMSx0KSxiPUphW2ddLGIhPT0wJiYoby09U29bZ10sb2koZSxvLGIpKSxyLS0sZz1IcyhyKSxWcihlLGcsbiksYj1fc1tnXSxiIT09MCYmKHItPW9hW2ddLG9pKGUscixiKSkpO3doaWxlKGM8ZS5sYXN0X2xpdCk7VnIoZSxEcyx0KX1mdW5jdGlvbiBTcyhlLHQpe3ZhciBuPXQuZHluX3RyZWUscj10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxvPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxjPXQuc3RhdF9kZXNjLmVsZW1zLGcsYixWPS0xLFQ7Zm9yKGUuaGVhcF9sZW49MCxlLmhlYXBfbWF4PXZzLGc9MDtnPGM7ZysrKW5bZyoyXSE9PTA/KGUuaGVhcFsrK2UuaGVhcF9sZW5dPVY9ZyxlLmRlcHRoW2ddPTApOm5bZyoyKzFdPTA7Zm9yKDtlLmhlYXBfbGVuPDI7KVQ9ZS5oZWFwWysrZS5oZWFwX2xlbl09VjwyPysrVjowLG5bVCoyXT0xLGUuZGVwdGhbVF09MCxlLm9wdF9sZW4tLSxvJiYoZS5zdGF0aWNfbGVuLT1yW1QqMisxXSk7Zm9yKHQubWF4X2NvZGU9VixnPWUuaGVhcF9sZW4+PjE7Zz49MTtnLS0pRXMoZSxuLGcpO1Q9YztkbyBnPWUuaGVhcFsxXSxlLmhlYXBbMV09ZS5oZWFwW2UuaGVhcF9sZW4tLV0sRXMoZSxuLDEpLGI9ZS5oZWFwWzFdLGUuaGVhcFstLWUuaGVhcF9tYXhdPWcsZS5oZWFwWy0tZS5oZWFwX21heF09YixuW1QqMl09bltnKjJdK25bYioyXSxlLmRlcHRoW1RdPShlLmRlcHRoW2ddPj1lLmRlcHRoW2JdP2UuZGVwdGhbZ106ZS5kZXB0aFtiXSkrMSxuW2cqMisxXT1uW2IqMisxXT1ULGUuaGVhcFsxXT1UKyssRXMoZSxuLDEpO3doaWxlKGUuaGVhcF9sZW4+PTIpO2UuaGVhcFstLWUuaGVhcF9tYXhdPWUuaGVhcFsxXSx6bChlLHQpLGpzKG4sVixlLmJsX2NvdW50KX1mdW5jdGlvbiBfbChlLHQsbil7dmFyIHIsbz0tMSxjLGc9dFswKjIrMV0sYj0wLFY9NyxUPTQ7Zm9yKGc9PT0wJiYoVj0xMzgsVD0zKSx0WyhuKzEpKjIrMV09NjU1MzUscj0wO3I8PW47cisrKWM9ZyxnPXRbKHIrMSkqMisxXSwhKCsrYjxWJiZjPT09ZykmJihiPFQ/ZS5ibF90cmVlW2MqMl0rPWI6YyE9PTA/KGMhPT1vJiZlLmJsX3RyZWVbYyoyXSsrLGUuYmxfdHJlZVttcyoyXSsrKTpiPD0xMD9lLmJsX3RyZWVbaGwqMl0rKzplLmJsX3RyZWVbRnMqMl0rKyxiPTAsbz1jLGc9PT0wPyhWPTEzOCxUPTMpOmM9PT1nPyhWPTYsVD0zKTooVj03LFQ9NCkpfWZ1bmN0aW9uIGJsKGUsdCxuKXt2YXIgcixvPS0xLGMsZz10WzAqMisxXSxiPTAsVj03LFQ9NDtmb3IoZz09PTAmJihWPTEzOCxUPTMpLHI9MDtyPD1uO3IrKylpZihjPWcsZz10WyhyKzEpKjIrMV0sISgrK2I8ViYmYz09PWcpKXtpZihiPFQpZG8gVnIoZSxjLGUuYmxfdHJlZSk7d2hpbGUoLS1iIT09MCk7ZWxzZSBjIT09MD8oYyE9PW8mJihWcihlLGMsZS5ibF90cmVlKSxiLS0pLFZyKGUsbXMsZS5ibF90cmVlKSxvaShlLGItMywyKSk6Yjw9MTA/KFZyKGUsaGwsZS5ibF90cmVlKSxvaShlLGItMywzKSk6KFZyKGUsRnMsZS5ibF90cmVlKSxvaShlLGItMTEsNykpO2I9MCxvPWMsZz09PTA/KFY9MTM4LFQ9Myk6Yz09PWc/KFY9NixUPTMpOihWPTcsVD00KX19ZnVuY3Rpb24gYShlKXt2YXIgdDtmb3IoX2woZSxlLmR5bl9sdHJlZSxlLmxfZGVzYy5tYXhfY29kZSksX2woZSxlLmR5bl9kdHJlZSxlLmRfZGVzYy5tYXhfY29kZSksU3MoZSxlLmJsX2Rlc2MpLHQ9cWEtMTt0Pj0zJiZlLmJsX3RyZWVbVXNbdF0qMisxXT09PTA7dC0tKTtyZXR1cm4gZS5vcHRfbGVuKz0zKih0KzEpKzUrNSs0LHR9ZnVuY3Rpb24gdShlLHQsbixyKXt2YXIgbztmb3Iob2koZSx0LTI1Nyw1KSxvaShlLG4tMSw1KSxvaShlLHItNCw0KSxvPTA7bzxyO28rKylvaShlLGUuYmxfdHJlZVtVc1tvXSoyKzFdLDMpO2JsKGUsZS5keW5fbHRyZWUsdC0xKSxibChlLGUuZHluX2R0cmVlLG4tMSl9ZnVuY3Rpb24gbShlKXt2YXIgdD00MDkzNjI0NDQ3LG47Zm9yKG49MDtuPD0zMTtuKyssdD4+Pj0xKWlmKHQmMSYmZS5keW5fbHRyZWVbbioyXSE9PTApcmV0dXJuIGVvO2lmKGUuZHluX2x0cmVlWzkqMl0hPT0wfHxlLmR5bl9sdHJlZVsxMCoyXSE9PTB8fGUuZHluX2x0cmVlWzEzKjJdIT09MClyZXR1cm4gRm87Zm9yKG49MzI7bjxWbztuKyspaWYoZS5keW5fbHRyZWVbbioyXSE9PTApcmV0dXJuIEZvO3JldHVybiBlb312YXIgUz0hMTtmdW5jdGlvbiBJKGUpe1N8fChicygpLFM9ITApLGUubF9kZXNjPW5ldyBYYShlLmR5bl9sdHJlZSwkcyksZS5kX2Rlc2M9bmV3IFhhKGUuZHluX2R0cmVlLHBsKSxlLmJsX2Rlc2M9bmV3IFhhKGUuYmxfdHJlZSxhYSksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTAsenMoZSl9ZnVuY3Rpb24gTyhlLHQsbixyKXtvaShlLChnczw8MSkrKHI/MTowKSwzKSxtbChlLHQsbiwhMCl9ZnVuY3Rpb24gRihlKXtvaShlLHBzPDwxLDMpLFZyKGUsRHMsSG8pLHZsKGUpfWZ1bmN0aW9uIFcoZSx0LG4scil7dmFyIG8sYyxnPTA7ZS5sZXZlbD4wPyhlLnN0cm0uZGF0YV90eXBlPT09TmEmJihlLnN0cm0uZGF0YV90eXBlPW0oZSkpLFNzKGUsZS5sX2Rlc2MpLFNzKGUsZS5kX2Rlc2MpLGc9YShlKSxvPWUub3B0X2xlbiszKzc+Pj4zLGM9ZS5zdGF0aWNfbGVuKzMrNz4+PjMsYzw9byYmKG89YykpOm89Yz1uKzUsbis0PD1vJiZ0IT09LTE/TyhlLHQsbixyKTplLnN0cmF0ZWd5PT09UGl8fGM9PT1vPyhvaShlLChwczw8MSkrKHI/MTowKSwzKSx5cyhlLEhvLEthKSk6KG9pKGUsKGRsPDwxKSsocj8xOjApLDMpLHUoZSxlLmxfZGVzYy5tYXhfY29kZSsxLGUuZF9kZXNjLm1heF9jb2RlKzEsZysxKSx5cyhlLGUuZHluX2x0cmVlLGUuZHluX2R0cmVlKSksenMoZSksciYmV3MoZSl9ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIGUucGVuZGluZ19idWZbZS5kX2J1ZitlLmxhc3RfbGl0KjJdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UuZF9idWYrZS5sYXN0X2xpdCoyKzFdPXQmMjU1LGUucGVuZGluZ19idWZbZS5sX2J1ZitlLmxhc3RfbGl0XT1uJjI1NSxlLmxhc3RfbGl0KyssdD09PTA/ZS5keW5fbHRyZWVbbioyXSsrOihlLm1hdGNoZXMrKyx0LS0sZS5keW5fbHRyZWVbKGthW25dK1ZvKzEpKjJdKyssZS5keW5fZHRyZWVbSHModCkqMl0rKyksZS5sYXN0X2xpdD09PWUubGl0X2J1ZnNpemUtMX1Pbi5fdHJfaW5pdD1JLE9uLl90cl9zdG9yZWRfYmxvY2s9TyxPbi5fdHJfZmx1c2hfYmxvY2s9VyxPbi5fdHJfdGFsbHk9RyxPbi5fdHJfYWxpZ249RjtmdW5jdGlvbiBsZShlLHQsbixyKXtmb3IodmFyIG89ZSY2NTUzNXwwLGM9ZT4+PjE2JjY1NTM1fDAsZz0wO24hPT0wOyl7Zz1uPjJlMz8yZTM6bixuLT1nO2RvIG89byt0W3IrK118MCxjPWMrb3wwO3doaWxlKC0tZyk7byU9NjU1MjEsYyU9NjU1MjF9cmV0dXJuIG98Yzw8MTZ8MH12YXIgemU9bGU7ZnVuY3Rpb24gaXQoKXtmb3IodmFyIGUsdD1bXSxuPTA7bjwyNTY7bisrKXtlPW47Zm9yKHZhciByPTA7cjw4O3IrKyllPWUmMT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbbl09ZX1yZXR1cm4gdH12YXIgZGU9aXQoKTtmdW5jdGlvbiBHZShlLHQsbixyKXt2YXIgbz1kZSxjPXIrbjtlXj0tMTtmb3IodmFyIGc9cjtnPGM7ZysrKWU9ZT4+Pjheb1soZV50W2ddKSYyNTVdO3JldHVybiBlXi0xfXZhciBxZT1HZSxfdD17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9LGF0PU5lLFNlPU9uLGJlPXplLENlPXFlLHN0PV90LEZlPTAsUHQ9MSxpPTMsbD00LGQ9NSxfPTAsQT0xLEM9LTIsaz0tMyxMPS01LEg9LTEsdGU9MSxnZT0yLGtlPTMsdWU9NCxQZT0wLFdlPTIsdXQ9OCxRZT05LEllPTE1LHBlPTgsX2U9MjksTGU9MjU2LEFlPUxlKzErX2UsRXQ9MzAsQXQ9MTksSmU9MipBZSsxLHh0PTE1LE09MyxqPTI1OCxhZT1qK00rMSxuZT0zMixpZT00MixWZT02OSxydD03MyxZZT05MSxLZT0xMDMsVWU9MTEzLEh0PTY2Nix2dD0xLEJ0PTIsTXQ9MyxEbj00LE1uPTM7ZnVuY3Rpb24gYm4oZSx0KXtyZXR1cm4gZS5tc2c9c3RbdF0sdH1mdW5jdGlvbiBTbihlKXtyZXR1cm4oZTw8MSktKGU+ND85OjApfWZ1bmN0aW9uIGdyKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDstLXQ+PTA7KWVbdF09MH1mdW5jdGlvbiBhaShlKXt2YXIgdD1lLnN0YXRlLG49dC5wZW5kaW5nO24+ZS5hdmFpbF9vdXQmJihuPWUuYXZhaWxfb3V0KSxuIT09MCYmKGF0LmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxuLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPW4sdC5wZW5kaW5nX291dCs9bixlLnRvdGFsX291dCs9bixlLmF2YWlsX291dC09bix0LnBlbmRpbmctPW4sdC5wZW5kaW5nPT09MCYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIGVuKGUsdCl7U2UuX3RyX2ZsdXNoX2Jsb2NrKGUsZS5ibG9ja19zdGFydD49MD9lLmJsb2NrX3N0YXJ0Oi0xLGUuc3Ryc3RhcnQtZS5ibG9ja19zdGFydCx0KSxlLmJsb2NrX3N0YXJ0PWUuc3Ryc3RhcnQsYWkoZS5zdHJtKX1mdW5jdGlvbiBjbihlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXR9ZnVuY3Rpb24gZm8oZSx0KXtlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10Pj4+OCYyNTUsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dCYyNTV9ZnVuY3Rpb24gcShlLHQsbixyKXt2YXIgbz1lLmF2YWlsX2luO3JldHVybiBvPnImJihvPXIpLG89PT0wPzA6KGUuYXZhaWxfaW4tPW8sYXQuYXJyYXlTZXQodCxlLmlucHV0LGUubmV4dF9pbixvLG4pLGUuc3RhdGUud3JhcD09PTE/ZS5hZGxlcj1iZShlLmFkbGVyLHQsbyxuKTplLnN0YXRlLndyYXA9PT0yJiYoZS5hZGxlcj1DZShlLmFkbGVyLHQsbyxuKSksZS5uZXh0X2luKz1vLGUudG90YWxfaW4rPW8sbyl9ZnVuY3Rpb24gUShlLHQpe3ZhciBuPWUubWF4X2NoYWluX2xlbmd0aCxyPWUuc3Ryc3RhcnQsbyxjLGc9ZS5wcmV2X2xlbmd0aCxiPWUubmljZV9tYXRjaCxWPWUuc3Ryc3RhcnQ+ZS53X3NpemUtYWU/ZS5zdHJzdGFydC0oZS53X3NpemUtYWUpOjAsVD1lLndpbmRvdyxEPWUud19tYXNrLHZlPWUucHJldix5ZT1lLnN0cnN0YXJ0K2osT2U9VFtyK2ctMV0sZnQ9VFtyK2ddO2UucHJldl9sZW5ndGg+PWUuZ29vZF9tYXRjaCYmKG4+Pj0yKSxiPmUubG9va2FoZWFkJiYoYj1lLmxvb2thaGVhZCk7ZG8gaWYobz10LCEoVFtvK2ddIT09ZnR8fFRbbytnLTFdIT09T2V8fFRbb10hPT1UW3JdfHxUWysrb10hPT1UW3IrMV0pKXtyKz0yLG8rKztkbzt3aGlsZShUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmVFsrK3JdPT09VFsrK29dJiZUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmVFsrK3JdPT09VFsrK29dJiZUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmcjx5ZSk7aWYoYz1qLSh5ZS1yKSxyPXllLWosYz5nKXtpZihlLm1hdGNoX3N0YXJ0PXQsZz1jLGM+PWIpYnJlYWs7T2U9VFtyK2ctMV0sZnQ9VFtyK2ddfX13aGlsZSgodD12ZVt0JkRdKT5WJiYtLW4hPT0wKTtyZXR1cm4gZzw9ZS5sb29rYWhlYWQ/ZzplLmxvb2thaGVhZH1mdW5jdGlvbiBtZShlKXt2YXIgdD1lLndfc2l6ZSxuLHIsbyxjLGc7ZG97aWYoYz1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49dCsodC1hZSkpe2F0LmFycmF5U2V0KGUud2luZG93LGUud2luZG93LHQsdCwwKSxlLm1hdGNoX3N0YXJ0LT10LGUuc3Ryc3RhcnQtPXQsZS5ibG9ja19zdGFydC09dCxyPWUuaGFzaF9zaXplLG49cjtkbyBvPWUuaGVhZFstLW5dLGUuaGVhZFtuXT1vPj10P28tdDowO3doaWxlKC0tcik7cj10LG49cjtkbyBvPWUucHJldlstLW5dLGUucHJldltuXT1vPj10P28tdDowO3doaWxlKC0tcik7Yys9dH1pZihlLnN0cm0uYXZhaWxfaW49PT0wKWJyZWFrO2lmKHI9cShlLnN0cm0sZS53aW5kb3csZS5zdHJzdGFydCtlLmxvb2thaGVhZCxjKSxlLmxvb2thaGVhZCs9cixlLmxvb2thaGVhZCtlLmluc2VydD49TSlmb3IoZz1lLnN0cnN0YXJ0LWUuaW5zZXJ0LGUuaW5zX2g9ZS53aW5kb3dbZ10sZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2crMV0pJmUuaGFzaF9tYXNrO2UuaW5zZXJ0JiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2crTS0xXSkmZS5oYXNoX21hc2ssZS5wcmV2W2cmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZyxnKyssZS5pbnNlcnQtLSwhKGUubG9va2FoZWFkK2UuaW5zZXJ0PE0pKTspO313aGlsZShlLmxvb2thaGVhZDxhZSYmZS5zdHJtLmF2YWlsX2luIT09MCl9ZnVuY3Rpb24gUmUoZSx0KXt2YXIgbj02NTUzNTtmb3Iobj5lLnBlbmRpbmdfYnVmX3NpemUtNSYmKG49ZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKGUubG9va2FoZWFkPD0xKXtpZihtZShlKSxlLmxvb2thaGVhZD09PTAmJnQ9PT1GZSlyZXR1cm4gdnQ7aWYoZS5sb29rYWhlYWQ9PT0wKWJyZWFrfWUuc3Ryc3RhcnQrPWUubG9va2FoZWFkLGUubG9va2FoZWFkPTA7dmFyIHI9ZS5ibG9ja19zdGFydCtuO2lmKChlLnN0cnN0YXJ0PT09MHx8ZS5zdHJzdGFydD49cikmJihlLmxvb2thaGVhZD1lLnN0cnN0YXJ0LXIsZS5zdHJzdGFydD1yLGVuKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKXx8ZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0Pj1lLndfc2l6ZS1hZSYmKGVuKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gdnR9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWw/KGVuKGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP010OkRuKTooZS5zdHJzdGFydD5lLmJsb2NrX3N0YXJ0JiYoZW4oZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApLHZ0KX1mdW5jdGlvbiBNZShlLHQpe2Zvcih2YXIgbixyOzspe2lmKGUubG9va2FoZWFkPGFlKXtpZihtZShlKSxlLmxvb2thaGVhZDxhZSYmdD09PUZlKXJldHVybiB2dDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj1NJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrTS0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSxuIT09MCYmZS5zdHJzdGFydC1uPD1lLndfc2l6ZS1hZSYmKGUubWF0Y2hfbGVuZ3RoPVEoZSxuKSksZS5tYXRjaF9sZW5ndGg+PU0paWYocj1TZS5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgtTSksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPD1lLm1heF9sYXp5X21hdGNoJiZlLmxvb2thaGVhZD49TSl7ZS5tYXRjaF9sZW5ndGgtLTtkbyBlLnN0cnN0YXJ0KyssZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrTS0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0O3doaWxlKC0tZS5tYXRjaF9sZW5ndGghPT0wKTtlLnN0cnN0YXJ0Kyt9ZWxzZSBlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wLGUuaW5zX2g9ZS53aW5kb3dbZS5zdHJzdGFydF0sZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrMV0pJmUuaGFzaF9tYXNrO2Vsc2Ugcj1TZS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihyJiYoZW4oZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiB2dH1yZXR1cm4gZS5pbnNlcnQ9ZS5zdHJzdGFydDxNLTE/ZS5zdHJzdGFydDpNLTEsdD09PWw/KGVuKGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP010OkRuKTplLmxhc3RfbGl0JiYoZW4oZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP3Z0OkJ0fWZ1bmN0aW9uIFhlKGUsdCl7Zm9yKHZhciBuLHIsbzs7KXtpZihlLmxvb2thaGVhZDxhZSl7aWYobWUoZSksZS5sb29rYWhlYWQ8YWUmJnQ9PT1GZSlyZXR1cm4gdnQ7aWYoZS5sb29rYWhlYWQ9PT0wKWJyZWFrfWlmKG49MCxlLmxvb2thaGVhZD49TSYmKGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K00tMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCksZS5wcmV2X2xlbmd0aD1lLm1hdGNoX2xlbmd0aCxlLnByZXZfbWF0Y2g9ZS5tYXRjaF9zdGFydCxlLm1hdGNoX2xlbmd0aD1NLTEsbiE9PTAmJmUucHJldl9sZW5ndGg8ZS5tYXhfbGF6eV9tYXRjaCYmZS5zdHJzdGFydC1uPD1lLndfc2l6ZS1hZSYmKGUubWF0Y2hfbGVuZ3RoPVEoZSxuKSxlLm1hdGNoX2xlbmd0aDw9NSYmKGUuc3RyYXRlZ3k9PT10ZXx8ZS5tYXRjaF9sZW5ndGg9PT1NJiZlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQ+NDA5NikmJihlLm1hdGNoX2xlbmd0aD1NLTEpKSxlLnByZXZfbGVuZ3RoPj1NJiZlLm1hdGNoX2xlbmd0aDw9ZS5wcmV2X2xlbmd0aCl7bz1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLU0scj1TZS5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LTEtZS5wcmV2X21hdGNoLGUucHJldl9sZW5ndGgtTSksZS5sb29rYWhlYWQtPWUucHJldl9sZW5ndGgtMSxlLnByZXZfbGVuZ3RoLT0yO2RvKytlLnN0cnN0YXJ0PD1vJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrTS0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KTt3aGlsZSgtLWUucHJldl9sZW5ndGghPT0wKTtpZihlLm1hdGNoX2F2YWlsYWJsZT0wLGUubWF0Y2hfbGVuZ3RoPU0tMSxlLnN0cnN0YXJ0KyssciYmKGVuKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gdnR9ZWxzZSBpZihlLm1hdGNoX2F2YWlsYWJsZSl7aWYocj1TZS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLHImJmVuKGUsITEpLGUuc3Ryc3RhcnQrKyxlLmxvb2thaGVhZC0tLGUuc3RybS5hdmFpbF9vdXQ9PT0wKXJldHVybiB2dH1lbHNlIGUubWF0Y2hfYXZhaWxhYmxlPTEsZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS19cmV0dXJuIGUubWF0Y2hfYXZhaWxhYmxlJiYocj1TZS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLGUubWF0Y2hfYXZhaWxhYmxlPTApLGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8TS0xP2Uuc3Ryc3RhcnQ6TS0xLHQ9PT1sPyhlbihlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9NdDpEbik6ZS5sYXN0X2xpdCYmKGVuKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT92dDpCdH1mdW5jdGlvbiBidChlLHQpe2Zvcih2YXIgbixyLG8sYyxnPWUud2luZG93Ozspe2lmKGUubG9va2FoZWFkPD1qKXtpZihtZShlKSxlLmxvb2thaGVhZDw9aiYmdD09PUZlKXJldHVybiB2dDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49TSYmZS5zdHJzdGFydD4wJiYobz1lLnN0cnN0YXJ0LTEscj1nW29dLHI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10pKXtjPWUuc3Ryc3RhcnQrajtkbzt3aGlsZShyPT09Z1srK29dJiZyPT09Z1srK29dJiZyPT09Z1srK29dJiZyPT09Z1srK29dJiZyPT09Z1srK29dJiZyPT09Z1srK29dJiZyPT09Z1srK29dJiZyPT09Z1srK29dJiZvPGMpO2UubWF0Y2hfbGVuZ3RoPWotKGMtbyksZS5tYXRjaF9sZW5ndGg+ZS5sb29rYWhlYWQmJihlLm1hdGNoX2xlbmd0aD1lLmxvb2thaGVhZCl9aWYoZS5tYXRjaF9sZW5ndGg+PU0/KG49U2UuX3RyX3RhbGx5KGUsMSxlLm1hdGNoX2xlbmd0aC1NKSxlLmxvb2thaGVhZC09ZS5tYXRjaF9sZW5ndGgsZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCk6KG49U2UuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyspLG4mJihlbihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIHZ0fXJldHVybiBlLmluc2VydD0wLHQ9PT1sPyhlbihlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9NdDpEbik6ZS5sYXN0X2xpdCYmKGVuKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT92dDpCdH1mdW5jdGlvbiBldChlLHQpe2Zvcih2YXIgbjs7KXtpZihlLmxvb2thaGVhZD09PTAmJihtZShlKSxlLmxvb2thaGVhZD09PTApKXtpZih0PT09RmUpcmV0dXJuIHZ0O2JyZWFrfWlmKGUubWF0Y2hfbGVuZ3RoPTAsbj1TZS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyxuJiYoZW4oZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiB2dH1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09bD8oZW4oZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/TXQ6RG4pOmUubGFzdF9saXQmJihlbihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/dnQ6QnR9ZnVuY3Rpb24gdHQoZSx0LG4scixvKXt0aGlzLmdvb2RfbGVuZ3RoPWUsdGhpcy5tYXhfbGF6eT10LHRoaXMubmljZV9sZW5ndGg9bix0aGlzLm1heF9jaGFpbj1yLHRoaXMuZnVuYz1vfXZhciAkZTskZT1bbmV3IHR0KDAsMCwwLDAsUmUpLG5ldyB0dCg0LDQsOCw0LE1lKSxuZXcgdHQoNCw1LDE2LDgsTWUpLG5ldyB0dCg0LDYsMzIsMzIsTWUpLG5ldyB0dCg0LDQsMTYsMTYsWGUpLG5ldyB0dCg4LDE2LDMyLDMyLFhlKSxuZXcgdHQoOCwxNiwxMjgsMTI4LFhlKSxuZXcgdHQoOCwzMiwxMjgsMjU2LFhlKSxuZXcgdHQoMzIsMTI4LDI1OCwxMDI0LFhlKSxuZXcgdHQoMzIsMjU4LDI1OCw0MDk2LFhlKV07ZnVuY3Rpb24gV3QoZSl7ZS53aW5kb3dfc2l6ZT0yKmUud19zaXplLGdyKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD0kZVtlLmxldmVsXS5tYXhfbGF6eSxlLmdvb2RfbWF0Y2g9JGVbZS5sZXZlbF0uZ29vZF9sZW5ndGgsZS5uaWNlX21hdGNoPSRlW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD0kZVtlLmxldmVsXS5tYXhfY2hhaW4sZS5zdHJzdGFydD0wLGUuYmxvY2tfc3RhcnQ9MCxlLmxvb2thaGVhZD0wLGUuaW5zZXJ0PTAsZS5tYXRjaF9sZW5ndGg9ZS5wcmV2X2xlbmd0aD1NLTEsZS5tYXRjaF9hdmFpbGFibGU9MCxlLmluc19oPTB9ZnVuY3Rpb24gRnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD11dCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgYXQuQnVmMTYoSmUqMiksdGhpcy5keW5fZHRyZWU9bmV3IGF0LkJ1ZjE2KCgyKkV0KzEpKjIpLHRoaXMuYmxfdHJlZT1uZXcgYXQuQnVmMTYoKDIqQXQrMSkqMiksZ3IodGhpcy5keW5fbHRyZWUpLGdyKHRoaXMuZHluX2R0cmVlKSxncih0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBhdC5CdWYxNih4dCsxKSx0aGlzLmhlYXA9bmV3IGF0LkJ1ZjE2KDIqQWUrMSksZ3IodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IGF0LkJ1ZjE2KDIqQWUrMSksZ3IodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gR3QoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP2JuKGUsQyk6KGUudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1XZSx0PWUuc3RhdGUsdC5wZW5kaW5nPTAsdC5wZW5kaW5nX291dD0wLHQud3JhcDwwJiYodC53cmFwPS10LndyYXApLHQuc3RhdHVzPXQud3JhcD9pZTpVZSxlLmFkbGVyPXQud3JhcD09PTI/MDoxLHQubGFzdF9mbHVzaD1GZSxTZS5fdHJfaW5pdCh0KSxfKX1mdW5jdGlvbiBJbihlKXt2YXIgdD1HdChlKTtyZXR1cm4gdD09PV8mJld0KGUuc3RhdGUpLHR9ZnVuY3Rpb24gS3IoZSx0KXtyZXR1cm4hZXx8IWUuc3RhdGV8fGUuc3RhdGUud3JhcCE9PTI/QzooZS5zdGF0ZS5nemhlYWQ9dCxfKX1mdW5jdGlvbiB0cihlLHQsbixyLG8sYyl7aWYoIWUpcmV0dXJuIEM7dmFyIGc9MTtpZih0PT09SCYmKHQ9NikscjwwPyhnPTAscj0tcik6cj4xNSYmKGc9MixyLT0xNiksbzwxfHxvPlFlfHxuIT09dXR8fHI8OHx8cj4xNXx8dDwwfHx0Pjl8fGM8MHx8Yz51ZSlyZXR1cm4gYm4oZSxDKTtyPT09OCYmKHI9OSk7dmFyIGI9bmV3IEZ0O3JldHVybiBlLnN0YXRlPWIsYi5zdHJtPWUsYi53cmFwPWcsYi5nemhlYWQ9bnVsbCxiLndfYml0cz1yLGIud19zaXplPTE8PGIud19iaXRzLGIud19tYXNrPWIud19zaXplLTEsYi5oYXNoX2JpdHM9bys3LGIuaGFzaF9zaXplPTE8PGIuaGFzaF9iaXRzLGIuaGFzaF9tYXNrPWIuaGFzaF9zaXplLTEsYi5oYXNoX3NoaWZ0PX5+KChiLmhhc2hfYml0cytNLTEpL00pLGIud2luZG93PW5ldyBhdC5CdWY4KGIud19zaXplKjIpLGIuaGVhZD1uZXcgYXQuQnVmMTYoYi5oYXNoX3NpemUpLGIucHJldj1uZXcgYXQuQnVmMTYoYi53X3NpemUpLGIubGl0X2J1ZnNpemU9MTw8bys2LGIucGVuZGluZ19idWZfc2l6ZT1iLmxpdF9idWZzaXplKjQsYi5wZW5kaW5nX2J1Zj1uZXcgYXQuQnVmOChiLnBlbmRpbmdfYnVmX3NpemUpLGIuZF9idWY9MSpiLmxpdF9idWZzaXplLGIubF9idWY9KDErMikqYi5saXRfYnVmc2l6ZSxiLmxldmVsPXQsYi5zdHJhdGVneT1jLGIubWV0aG9kPW4sSW4oZSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gdHIoZSx0LHV0LEllLHBlLFBlKX1mdW5jdGlvbiBqbyhlLHQpe3ZhciBuLHIsbyxjO2lmKCFlfHwhZS5zdGF0ZXx8dD5kfHx0PDApcmV0dXJuIGU/Ym4oZSxDKTpDO2lmKHI9ZS5zdGF0ZSwhZS5vdXRwdXR8fCFlLmlucHV0JiZlLmF2YWlsX2luIT09MHx8ci5zdGF0dXM9PT1IdCYmdCE9PWwpcmV0dXJuIGJuKGUsZS5hdmFpbF9vdXQ9PT0wP0w6Qyk7aWYoci5zdHJtPWUsbj1yLmxhc3RfZmx1c2gsci5sYXN0X2ZsdXNoPXQsci5zdGF0dXM9PT1pZSlpZihyLndyYXA9PT0yKWUuYWRsZXI9MCxjbihyLDMxKSxjbihyLDEzOSksY24ociw4KSxyLmd6aGVhZD8oY24ociwoci5nemhlYWQudGV4dD8xOjApKyhyLmd6aGVhZC5oY3JjPzI6MCkrKHIuZ3poZWFkLmV4dHJhPzQ6MCkrKHIuZ3poZWFkLm5hbWU/ODowKSsoci5nemhlYWQuY29tbWVudD8xNjowKSksY24ocixyLmd6aGVhZC50aW1lJjI1NSksY24ocixyLmd6aGVhZC50aW1lPj44JjI1NSksY24ocixyLmd6aGVhZC50aW1lPj4xNiYyNTUpLGNuKHIsci5nemhlYWQudGltZT4+MjQmMjU1KSxjbihyLHIubGV2ZWw9PT05PzI6ci5zdHJhdGVneT49Z2V8fHIubGV2ZWw8Mj80OjApLGNuKHIsci5nemhlYWQub3MmMjU1KSxyLmd6aGVhZC5leHRyYSYmci5nemhlYWQuZXh0cmEubGVuZ3RoJiYoY24ocixyLmd6aGVhZC5leHRyYS5sZW5ndGgmMjU1KSxjbihyLHIuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxyLmd6aGVhZC5oY3JjJiYoZS5hZGxlcj1DZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLDApKSxyLmd6aW5kZXg9MCxyLnN0YXR1cz1WZSk6KGNuKHIsMCksY24ociwwKSxjbihyLDApLGNuKHIsMCksY24ociwwKSxjbihyLHIubGV2ZWw9PT05PzI6ci5zdHJhdGVneT49Z2V8fHIubGV2ZWw8Mj80OjApLGNuKHIsTW4pLHIuc3RhdHVzPVVlKTtlbHNle3ZhciBnPXV0KyhyLndfYml0cy04PDw0KTw8OCxiPS0xO3Iuc3RyYXRlZ3k+PWdlfHxyLmxldmVsPDI/Yj0wOnIubGV2ZWw8Nj9iPTE6ci5sZXZlbD09PTY/Yj0yOmI9MyxnfD1iPDw2LHIuc3Ryc3RhcnQhPT0wJiYoZ3w9bmUpLGcrPTMxLWclMzEsci5zdGF0dXM9VWUsZm8ocixnKSxyLnN0cnN0YXJ0IT09MCYmKGZvKHIsZS5hZGxlcj4+PjE2KSxmbyhyLGUuYWRsZXImNjU1MzUpKSxlLmFkbGVyPTF9aWYoci5zdGF0dXM9PT1WZSlpZihyLmd6aGVhZC5leHRyYSl7Zm9yKG89ci5wZW5kaW5nO3IuZ3ppbmRleDwoci5nemhlYWQuZXh0cmEubGVuZ3RoJjY1NTM1KSYmIShyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+byYmKGUuYWRsZXI9Q2UoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1vLG8pKSxhaShlKSxvPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKTspY24ocixyLmd6aGVhZC5leHRyYVtyLmd6aW5kZXhdJjI1NSksci5nemluZGV4Kys7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm8mJihlLmFkbGVyPUNlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbyxvKSksci5nemluZGV4PT09ci5nemhlYWQuZXh0cmEubGVuZ3RoJiYoci5nemluZGV4PTAsci5zdGF0dXM9cnQpfWVsc2Ugci5zdGF0dXM9cnQ7aWYoci5zdGF0dXM9PT1ydClpZihyLmd6aGVhZC5uYW1lKXtvPXIucGVuZGluZztkb3tpZihyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+byYmKGUuYWRsZXI9Q2UoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1vLG8pKSxhaShlKSxvPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKXtjPTE7YnJlYWt9ci5nemluZGV4PHIuZ3poZWFkLm5hbWUubGVuZ3RoP2M9ci5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKSYyNTU6Yz0wLGNuKHIsYyl9d2hpbGUoYyE9PTApO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1DZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLGM9PT0wJiYoci5nemluZGV4PTAsci5zdGF0dXM9WWUpfWVsc2Ugci5zdGF0dXM9WWU7aWYoci5zdGF0dXM9PT1ZZSlpZihyLmd6aGVhZC5jb21tZW50KXtvPXIucGVuZGluZztkb3tpZihyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+byYmKGUuYWRsZXI9Q2UoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1vLG8pKSxhaShlKSxvPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKXtjPTE7YnJlYWt9ci5nemluZGV4PHIuZ3poZWFkLmNvbW1lbnQubGVuZ3RoP2M9ci5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKSYyNTU6Yz0wLGNuKHIsYyl9d2hpbGUoYyE9PTApO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1DZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLGM9PT0wJiYoci5zdGF0dXM9S2UpfWVsc2Ugci5zdGF0dXM9S2U7aWYoci5zdGF0dXM9PT1LZSYmKHIuZ3poZWFkLmhjcmM/KHIucGVuZGluZysyPnIucGVuZGluZ19idWZfc2l6ZSYmYWkoZSksci5wZW5kaW5nKzI8PXIucGVuZGluZ19idWZfc2l6ZSYmKGNuKHIsZS5hZGxlciYyNTUpLGNuKHIsZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxyLnN0YXR1cz1VZSkpOnIuc3RhdHVzPVVlKSxyLnBlbmRpbmchPT0wKXtpZihhaShlKSxlLmF2YWlsX291dD09PTApcmV0dXJuIHIubGFzdF9mbHVzaD0tMSxffWVsc2UgaWYoZS5hdmFpbF9pbj09PTAmJlNuKHQpPD1TbihuKSYmdCE9PWwpcmV0dXJuIGJuKGUsTCk7aWYoci5zdGF0dXM9PT1IdCYmZS5hdmFpbF9pbiE9PTApcmV0dXJuIGJuKGUsTCk7aWYoZS5hdmFpbF9pbiE9PTB8fHIubG9va2FoZWFkIT09MHx8dCE9PUZlJiZyLnN0YXR1cyE9PUh0KXt2YXIgVj1yLnN0cmF0ZWd5PT09Z2U/ZXQocix0KTpyLnN0cmF0ZWd5PT09a2U/YnQocix0KTokZVtyLmxldmVsXS5mdW5jKHIsdCk7aWYoKFY9PT1NdHx8Vj09PURuKSYmKHIuc3RhdHVzPUh0KSxWPT09dnR8fFY9PT1NdClyZXR1cm4gZS5hdmFpbF9vdXQ9PT0wJiYoci5sYXN0X2ZsdXNoPS0xKSxfO2lmKFY9PT1CdCYmKHQ9PT1QdD9TZS5fdHJfYWxpZ24ocik6dCE9PWQmJihTZS5fdHJfc3RvcmVkX2Jsb2NrKHIsMCwwLCExKSx0PT09aSYmKGdyKHIuaGVhZCksci5sb29rYWhlYWQ9PT0wJiYoci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSkpLGFpKGUpLGUuYXZhaWxfb3V0PT09MCkpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSxffXJldHVybiB0IT09bD9fOnIud3JhcDw9MD9BOihyLndyYXA9PT0yPyhjbihyLGUuYWRsZXImMjU1KSxjbihyLGUuYWRsZXI+PjgmMjU1KSxjbihyLGUuYWRsZXI+PjE2JjI1NSksY24ocixlLmFkbGVyPj4yNCYyNTUpLGNuKHIsZS50b3RhbF9pbiYyNTUpLGNuKHIsZS50b3RhbF9pbj4+OCYyNTUpLGNuKHIsZS50b3RhbF9pbj4+MTYmMjU1KSxjbihyLGUudG90YWxfaW4+PjI0JjI1NSkpOihmbyhyLGUuYWRsZXI+Pj4xNiksZm8ocixlLmFkbGVyJjY1NTM1KSksYWkoZSksci53cmFwPjAmJihyLndyYXA9LXIud3JhcCksci5wZW5kaW5nIT09MD9fOkEpfWZ1bmN0aW9uIGVzKGUpe3ZhciB0O3JldHVybiFlfHwhZS5zdGF0ZT9DOih0PWUuc3RhdGUuc3RhdHVzLHQhPT1pZSYmdCE9PVZlJiZ0IT09cnQmJnQhPT1ZZSYmdCE9PUtlJiZ0IT09VWUmJnQhPT1IdD9ibihlLEMpOihlLnN0YXRlPW51bGwsdD09PVVlP2JuKGUsayk6XykpfWZ1bmN0aW9uIHdzKGUsdCl7dmFyIG49dC5sZW5ndGgscixvLGMsZyxiLFYsVCxEO2lmKCFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSxnPXIud3JhcCxnPT09Mnx8Zz09PTEmJnIuc3RhdHVzIT09aWV8fHIubG9va2FoZWFkKSlyZXR1cm4gQztmb3IoZz09PTEmJihlLmFkbGVyPWJlKGUuYWRsZXIsdCxuLDApKSxyLndyYXA9MCxuPj1yLndfc2l6ZSYmKGc9PT0wJiYoZ3Ioci5oZWFkKSxyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApLEQ9bmV3IGF0LkJ1Zjgoci53X3NpemUpLGF0LmFycmF5U2V0KEQsdCxuLXIud19zaXplLHIud19zaXplLDApLHQ9RCxuPXIud19zaXplKSxiPWUuYXZhaWxfaW4sVj1lLm5leHRfaW4sVD1lLmlucHV0LGUuYXZhaWxfaW49bixlLm5leHRfaW49MCxlLmlucHV0PXQsbWUocik7ci5sb29rYWhlYWQ+PU07KXtvPXIuc3Ryc3RhcnQsYz1yLmxvb2thaGVhZC0oTS0xKTtkbyByLmluc19oPShyLmluc19oPDxyLmhhc2hfc2hpZnReci53aW5kb3dbbytNLTFdKSZyLmhhc2hfbWFzayxyLnByZXZbbyZyLndfbWFza109ci5oZWFkW3IuaW5zX2hdLHIuaGVhZFtyLmluc19oXT1vLG8rKzt3aGlsZSgtLWMpO3Iuc3Ryc3RhcnQ9byxyLmxvb2thaGVhZD1NLTEsbWUocil9cmV0dXJuIHIuc3Ryc3RhcnQrPXIubG9va2FoZWFkLHIuYmxvY2tfc3RhcnQ9ci5zdHJzdGFydCxyLmluc2VydD1yLmxvb2thaGVhZCxyLmxvb2thaGVhZD0wLHIubWF0Y2hfbGVuZ3RoPXIucHJldl9sZW5ndGg9TS0xLHIubWF0Y2hfYXZhaWxhYmxlPTAsZS5uZXh0X2luPVYsZS5pbnB1dD1ULGUuYXZhaWxfaW49YixyLndyYXA9ZyxffUl0LmRlZmxhdGVJbml0PXZpLEl0LmRlZmxhdGVJbml0Mj10cixJdC5kZWZsYXRlUmVzZXQ9SW4sSXQuZGVmbGF0ZVJlc2V0S2VlcD1HdCxJdC5kZWZsYXRlU2V0SGVhZGVyPUtyLEl0LmRlZmxhdGU9am8sSXQuZGVmbGF0ZUVuZD1lcyxJdC5kZWZsYXRlU2V0RGljdGlvbmFyeT13cyxJdC5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7dmFyIGlyPXt9LFJhPU5lLENzPSEwLHRvPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaChlKXtDcz0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaChlKXt0bz0hMX1mb3IodmFyIHpvPW5ldyBSYS5CdWY4KDI1NiksaG89MDtobzwyNTY7aG8rKyl6b1tob109aG8+PTI1Mj82OmhvPj0yNDg/NTpobz49MjQwPzQ6aG8+PTIyND8zOmhvPj0xOTI/MjoxO3pvWzI1NF09em9bMjU0XT0xLGlyLnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYyxnPWUubGVuZ3RoLGI9MDtmb3Iobz0wO288ZztvKyspbj1lLmNoYXJDb2RlQXQobyksKG4mNjQ1MTIpPT09NTUyOTYmJm8rMTxnJiYocj1lLmNoYXJDb2RlQXQobysxKSwociY2NDUxMik9PT01NjMyMCYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksbysrKSksYis9bjwxMjg/MTpuPDIwNDg/MjpuPDY1NTM2PzM6NDtmb3IodD1uZXcgUmEuQnVmOChiKSxjPTAsbz0wO2M8YjtvKyspbj1lLmNoYXJDb2RlQXQobyksKG4mNjQ1MTIpPT09NTUyOTYmJm8rMTxnJiYocj1lLmNoYXJDb2RlQXQobysxKSwociY2NDUxMik9PT01NjMyMCYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksbysrKSksbjwxMjg/dFtjKytdPW46bjwyMDQ4Pyh0W2MrK109MTkyfG4+Pj42LHRbYysrXT0xMjh8biY2Myk6bjw2NTUzNj8odFtjKytdPTIyNHxuPj4+MTIsdFtjKytdPTEyOHxuPj4+NiY2Myx0W2MrK109MTI4fG4mNjMpOih0W2MrK109MjQwfG4+Pj4xOCx0W2MrK109MTI4fG4+Pj4xMiY2Myx0W2MrK109MTI4fG4+Pj42JjYzLHRbYysrXT0xMjh8biY2Myk7cmV0dXJuIHR9O2Z1bmN0aW9uIF9hKGUsdCl7aWYodDw2NTUzNCYmKGUuc3ViYXJyYXkmJnRvfHwhZS5zdWJhcnJheSYmQ3MpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsUmEuc2hyaW5rQnVmKGUsdCkpO2Zvcih2YXIgbj0iIixyPTA7cjx0O3IrKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0pO3JldHVybiBufWlyLmJ1ZjJiaW5zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIF9hKGUsZS5sZW5ndGgpfSxpci5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgUmEuQnVmOChlLmxlbmd0aCksbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH0saXIuYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxjLGc9dHx8ZS5sZW5ndGgsYj1uZXcgQXJyYXkoZyoyKTtmb3Iocj0wLG49MDtuPGc7KXtpZihvPWVbbisrXSxvPDEyOCl7YltyKytdPW87Y29udGludWV9aWYoYz16b1tvXSxjPjQpe2JbcisrXT02NTUzMyxuKz1jLTE7Y29udGludWV9Zm9yKG8mPWM9PT0yPzMxOmM9PT0zPzE1Ojc7Yz4xJiZuPGc7KW89bzw8NnxlW24rK10mNjMsYy0tO2lmKGM+MSl7YltyKytdPTY1NTMzO2NvbnRpbnVlfW88NjU1MzY/YltyKytdPW86KG8tPTY1NTM2LGJbcisrXT01NTI5NnxvPj4xMCYxMDIzLGJbcisrXT01NjMyMHxvJjEwMjMpfXJldHVybiBfYShiLHIpfSxpci51dGY4Ym9yZGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG47Zm9yKHQ9dHx8ZS5sZW5ndGgsdD5lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLG49dC0xO24+PTAmJihlW25dJjE5Mik9PT0xMjg7KW4tLTtyZXR1cm4gbjwwfHxuPT09MD90Om4rem9bZVtuXV0+dD9uOnR9O2Z1bmN0aW9uIHRzKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH12YXIgbGE9dHMsY2E9SXQsV289TmUsRWw9aXIsWXM9X3QsYmM9bGEsV2w9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxzbT0wLHZ1PTQseWw9MCxqZj0xLHpmPTIsbG09LTEsY209MCx1bT04O2Z1bmN0aW9uIHFzKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHFzKSlyZXR1cm4gbmV3IHFzKGUpO3RoaXMub3B0aW9ucz1Xby5hc3NpZ24oe2xldmVsOmxtLG1ldGhvZDp1bSxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OmNtLHRvOiIifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO3QucmF3JiZ0LndpbmRvd0JpdHM+MD90LndpbmRvd0JpdHM9LXQud2luZG93Qml0czp0Lmd6aXAmJnQud2luZG93Qml0cz4wJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBiYyx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIG49Y2EuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0LmxldmVsLHQubWV0aG9kLHQud2luZG93Qml0cyx0Lm1lbUxldmVsLHQuc3RyYXRlZ3kpO2lmKG4hPT15bCl0aHJvdyBuZXcgRXJyb3IoWXNbbl0pO2lmKHQuaGVhZGVyJiZjYS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx0LmhlYWRlciksdC5kaWN0aW9uYXJ5KXt2YXIgcjtpZih0eXBlb2YgdC5kaWN0aW9uYXJ5PT0ic3RyaW5nIj9yPUVsLnN0cmluZzJidWYodC5kaWN0aW9uYXJ5KTpXbC5jYWxsKHQuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP3I9bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTpyPXQuZGljdGlvbmFyeSxuPWNhLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxyKSxuIT09eWwpdGhyb3cgbmV3IEVycm9yKFlzW25dKTt0aGlzLl9kaWN0X3NldD0hMH19cXMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnN0cm0scj10aGlzLm9wdGlvbnMuY2h1bmtTaXplLG8sYztpZih0aGlzLmVuZGVkKXJldHVybiExO2M9dD09PX5+dD90OnQ9PT0hMD92dTpzbSx0eXBlb2YgZT09InN0cmluZyI/bi5pbnB1dD1FbC5zdHJpbmcyYnVmKGUpOldsLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6bi5pbnB1dD1lLG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7ZG97aWYobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFdvLkJ1Zjgociksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PXIpLG89Y2EuZGVmbGF0ZShuLGMpLG8hPT1qZiYmbyE9PXlsKXJldHVybiB0aGlzLm9uRW5kKG8pLHRoaXMuZW5kZWQ9ITAsITE7KG4uYXZhaWxfb3V0PT09MHx8bi5hdmFpbF9pbj09PTAmJihjPT09dnV8fGM9PT16ZikpJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5vbkRhdGEoRWwuYnVmMmJpbnN0cmluZyhXby5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShXby5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKX13aGlsZSgobi5hdmFpbF9pbj4wfHxuLmF2YWlsX291dD09PTApJiZvIT09amYpO3JldHVybiBjPT09dnU/KG89Y2EuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQobyksdGhpcy5lbmRlZD0hMCxvPT09eWwpOihjPT09emYmJih0aGlzLm9uRW5kKHlsKSxuLmF2YWlsX291dD0wKSwhMCl9LHFzLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0scXMucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT15bCYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVdvLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIG11KGUsdCl7dmFyIG49bmV3IHFzKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8WXNbbi5lcnJdO3JldHVybiBuLnJlc3VsdH1mdW5jdGlvbiBmbShlLHQpe3JldHVybiB0PXR8fHt9LHQucmF3PSEwLG11KGUsdCl9ZnVuY3Rpb24gZG0oZSx0KXtyZXR1cm4gdD10fHx7fSx0Lmd6aXA9ITAsbXUoZSx0KX1rdC5EZWZsYXRlPXFzLGt0LmRlZmxhdGU9bXUsa3QuZGVmbGF0ZVJhdz1mbSxrdC5nemlwPWRtO3ZhciBHbD17fSxiYT17fSxFYz0zMCxobT0xMixnbT1mdW5jdGlvbih0LG4pe3ZhciByLG8sYyxnLGIsVixULEQsdmUseWUsT2UsZnQsaHQsVnQsd3QsRW4sb24sYW4sU3QsWHQsZG4sdG4sVG4sdnIsc247cj10LnN0YXRlLG89dC5uZXh0X2luLHZyPXQuaW5wdXQsYz1vKyh0LmF2YWlsX2luLTUpLGc9dC5uZXh0X291dCxzbj10Lm91dHB1dCxiPWctKG4tdC5hdmFpbF9vdXQpLFY9ZysodC5hdmFpbF9vdXQtMjU3KSxUPXIuZG1heCxEPXIud3NpemUsdmU9ci53aGF2ZSx5ZT1yLnduZXh0LE9lPXIud2luZG93LGZ0PXIuaG9sZCxodD1yLmJpdHMsVnQ9ci5sZW5jb2RlLHd0PXIuZGlzdGNvZGUsRW49KDE8PHIubGVuYml0cyktMSxvbj0oMTw8ci5kaXN0Yml0cyktMTtlOmRve2h0PDE1JiYoZnQrPXZyW28rK108PGh0LGh0Kz04LGZ0Kz12cltvKytdPDxodCxodCs9OCksYW49VnRbZnQmRW5dO3Q6Zm9yKDs7KXtpZihTdD1hbj4+PjI0LGZ0Pj4+PVN0LGh0LT1TdCxTdD1hbj4+PjE2JjI1NSxTdD09PTApc25bZysrXT1hbiY2NTUzNTtlbHNlIGlmKFN0JjE2KXtYdD1hbiY2NTUzNSxTdCY9MTUsU3QmJihodDxTdCYmKGZ0Kz12cltvKytdPDxodCxodCs9OCksWHQrPWZ0JigxPDxTdCktMSxmdD4+Pj1TdCxodC09U3QpLGh0PDE1JiYoZnQrPXZyW28rK108PGh0LGh0Kz04LGZ0Kz12cltvKytdPDxodCxodCs9OCksYW49d3RbZnQmb25dO246Zm9yKDs7KXtpZihTdD1hbj4+PjI0LGZ0Pj4+PVN0LGh0LT1TdCxTdD1hbj4+PjE2JjI1NSxTdCYxNil7aWYoZG49YW4mNjU1MzUsU3QmPTE1LGh0PFN0JiYoZnQrPXZyW28rK108PGh0LGh0Kz04LGh0PFN0JiYoZnQrPXZyW28rK108PGh0LGh0Kz04KSksZG4rPWZ0JigxPDxTdCktMSxkbj5UKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHIubW9kZT1FYzticmVhayBlfWlmKGZ0Pj4+PVN0LGh0LT1TdCxTdD1nLWIsZG4+U3Qpe2lmKFN0PWRuLVN0LFN0PnZlJiZyLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPUVjO2JyZWFrIGV9aWYodG49MCxUbj1PZSx5ZT09PTApe2lmKHRuKz1ELVN0LFN0PFh0KXtYdC09U3Q7ZG8gc25bZysrXT1PZVt0bisrXTt3aGlsZSgtLVN0KTt0bj1nLWRuLFRuPXNufX1lbHNlIGlmKHllPFN0KXtpZih0bis9RCt5ZS1TdCxTdC09eWUsU3Q8WHQpe1h0LT1TdDtkbyBzbltnKytdPU9lW3RuKytdO3doaWxlKC0tU3QpO2lmKHRuPTAseWU8WHQpe1N0PXllLFh0LT1TdDtkbyBzbltnKytdPU9lW3RuKytdO3doaWxlKC0tU3QpO3RuPWctZG4sVG49c259fX1lbHNlIGlmKHRuKz15ZS1TdCxTdDxYdCl7WHQtPVN0O2RvIHNuW2crK109T2VbdG4rK107d2hpbGUoLS1TdCk7dG49Zy1kbixUbj1zbn1mb3IoO1h0PjI7KXNuW2crK109VG5bdG4rK10sc25bZysrXT1Ublt0bisrXSxzbltnKytdPVRuW3RuKytdLFh0LT0zO1h0JiYoc25bZysrXT1Ublt0bisrXSxYdD4xJiYoc25bZysrXT1Ublt0bisrXSkpfWVsc2V7dG49Zy1kbjtkbyBzbltnKytdPXNuW3RuKytdLHNuW2crK109c25bdG4rK10sc25bZysrXT1zblt0bisrXSxYdC09Mzt3aGlsZShYdD4yKTtYdCYmKHNuW2crK109c25bdG4rK10sWHQ+MSYmKHNuW2crK109c25bdG4rK10pKX19ZWxzZSBpZigoU3QmNjQpPT09MCl7YW49d3RbKGFuJjY1NTM1KSsoZnQmKDE8PFN0KS0xKV07Y29udGludWUgbn1lbHNle3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHIubW9kZT1FYzticmVhayBlfWJyZWFrfX1lbHNlIGlmKChTdCY2NCk9PT0wKXthbj1WdFsoYW4mNjU1MzUpKyhmdCYoMTw8U3QpLTEpXTtjb250aW51ZSB0fWVsc2UgaWYoU3QmMzIpe3IubW9kZT1obTticmVhayBlfWVsc2V7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsci5tb2RlPUVjO2JyZWFrIGV9YnJlYWt9fXdoaWxlKG88YyYmZzxWKTtYdD1odD4+MyxvLT1YdCxodC09WHQ8PDMsZnQmPSgxPDxodCktMSx0Lm5leHRfaW49byx0Lm5leHRfb3V0PWcsdC5hdmFpbF9pbj1vPGM/NSsoYy1vKTo1LShvLWMpLHQuYXZhaWxfb3V0PWc8Vj8yNTcrKFYtZyk6MjU3LShnLVYpLHIuaG9sZD1mdCxyLmJpdHM9aHR9LFdmPU5lLFNsPTE1LEdmPTg1MixZZj01OTIscWY9MCxfdT0xLEpmPTIscG09WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSx2bT1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLG1tPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxfbT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdLGJtPWZ1bmN0aW9uKHQsbixyLG8sYyxnLGIsVil7dmFyIFQ9Vi5iaXRzLEQ9MCx2ZT0wLHllPTAsT2U9MCxmdD0wLGh0PTAsVnQ9MCx3dD0wLEVuPTAsb249MCxhbixTdCxYdCxkbix0bixUbj1udWxsLHZyPTAsc24sQWE9bmV3IFdmLkJ1ZjE2KFNsKzEpLFpjPW5ldyBXZi5CdWYxNihTbCsxKSxYYz1udWxsLE5wPTAsa3AsUWMsZXU7Zm9yKEQ9MDtEPD1TbDtEKyspQWFbRF09MDtmb3IodmU9MDt2ZTxvO3ZlKyspQWFbbltyK3ZlXV0rKztmb3IoZnQ9VCxPZT1TbDtPZT49MSYmQWFbT2VdPT09MDtPZS0tKTtpZihmdD5PZSYmKGZ0PU9lKSxPZT09PTApcmV0dXJuIGNbZysrXT0xPDwyNHw2NDw8MTZ8MCxjW2crK109MTw8MjR8NjQ8PDE2fDAsVi5iaXRzPTEsMDtmb3IoeWU9MTt5ZTxPZSYmQWFbeWVdPT09MDt5ZSsrKTtmb3IoZnQ8eWUmJihmdD15ZSksd3Q9MSxEPTE7RDw9U2w7RCsrKWlmKHd0PDw9MSx3dC09QWFbRF0sd3Q8MClyZXR1cm4tMTtpZih3dD4wJiYodD09PXFmfHxPZSE9PTEpKXJldHVybi0xO2ZvcihaY1sxXT0wLEQ9MTtEPFNsO0QrKylaY1tEKzFdPVpjW0RdK0FhW0RdO2Zvcih2ZT0wO3ZlPG87dmUrKyluW3IrdmVdIT09MCYmKGJbWmNbbltyK3ZlXV0rK109dmUpO2lmKHQ9PT1xZj8oVG49WGM9Yixzbj0xOSk6dD09PV91PyhUbj1wbSx2ci09MjU3LFhjPXZtLE5wLT0yNTcsc249MjU2KTooVG49bW0sWGM9X20sc249LTEpLG9uPTAsdmU9MCxEPXllLHRuPWcsaHQ9ZnQsVnQ9MCxYdD0tMSxFbj0xPDxmdCxkbj1Fbi0xLHQ9PT1fdSYmRW4+R2Z8fHQ9PT1KZiYmRW4+WWYpcmV0dXJuIDE7Zm9yKDs7KXtrcD1ELVZ0LGJbdmVdPHNuPyhRYz0wLGV1PWJbdmVdKTpiW3ZlXT5zbj8oUWM9WGNbTnArYlt2ZV1dLGV1PVRuW3ZyK2JbdmVdXSk6KFFjPTMyKzY0LGV1PTApLGFuPTE8PEQtVnQsU3Q9MTw8aHQseWU9U3Q7ZG8gU3QtPWFuLGNbdG4rKG9uPj5WdCkrU3RdPWtwPDwyNHxRYzw8MTZ8ZXV8MDt3aGlsZShTdCE9PTApO2Zvcihhbj0xPDxELTE7b24mYW47KWFuPj49MTtpZihhbiE9PTA/KG9uJj1hbi0xLG9uKz1hbik6b249MCx2ZSsrLC0tQWFbRF09PT0wKXtpZihEPT09T2UpYnJlYWs7RD1uW3IrYlt2ZV1dfWlmKEQ+ZnQmJihvbiZkbikhPT1YdCl7Zm9yKFZ0PT09MCYmKFZ0PWZ0KSx0bis9eWUsaHQ9RC1WdCx3dD0xPDxodDtodCtWdDxPZSYmKHd0LT1BYVtodCtWdF0sISh3dDw9MCkpOylodCsrLHd0PDw9MTtpZihFbis9MTw8aHQsdD09PV91JiZFbj5HZnx8dD09PUpmJiZFbj5ZZilyZXR1cm4gMTtYdD1vbiZkbixjW1h0XT1mdDw8MjR8aHQ8PDE2fHRuLWd8MH19cmV0dXJuIG9uIT09MCYmKGNbdG4rb25dPUQtVnQ8PDI0fDY0PDwxNnwwKSxWLmJpdHM9ZnQsMH0sR289TmUsYnU9emUseGE9cWUsRW09Z20sWWw9Ym0seW09MCxLZj0xLFpmPTIsWGY9NCxTbT01LHljPTYsSnM9MCx3bT0xLENtPTIsdWE9LTIsUWY9LTMsZWQ9LTQsQW09LTUsdGQ9OCxuZD0xLHJkPTIsaWQ9MyxvZD00LGFkPTUsc2Q9NixsZD03LGNkPTgsdWQ9OSxmZD0xMCxTYz0xMSxucz0xMixFdT0xMyxkZD0xNCx5dT0xNSxoZD0xNixnZD0xNyxwZD0xOCx2ZD0xOSx3Yz0yMCxDYz0yMSxtZD0yMixfZD0yMyxiZD0yNCxFZD0yNSx5ZD0yNixTdT0yNyxTZD0yOCx3ZD0yOSxPcj0zMCxDZD0zMSxPbT0zMixUbT04NTIsUG09NTkyLEltPTE1LE5tPUltO2Z1bmN0aW9uIEFkKGUpe3JldHVybihlPj4+MjQmMjU1KSsoZT4+PjgmNjUyODApKygoZSY2NTI4MCk8PDgpKygoZSYyNTUpPDwyNCl9ZnVuY3Rpb24ga20oKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEdvLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBHby5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBPZChlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/dWE6KHQ9ZS5zdGF0ZSxlLnRvdGFsX2luPWUudG90YWxfb3V0PXQudG90YWw9MCxlLm1zZz0iIix0LndyYXAmJihlLmFkbGVyPXQud3JhcCYxKSx0Lm1vZGU9bmQsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IEdvLkJ1ZjMyKFRtKSx0LmRpc3Rjb2RlPXQuZGlzdGR5bj1uZXcgR28uQnVmMzIoUG0pLHQuc2FuZT0xLHQuYmFjaz0tMSxKcyl9ZnVuY3Rpb24gVGQoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP3VhOih0PWUuc3RhdGUsdC53c2l6ZT0wLHQud2hhdmU9MCx0LnduZXh0PTAsT2QoZSkpfWZ1bmN0aW9uIFBkKGUsdCl7dmFyIG4scjtyZXR1cm4hZXx8IWUuc3RhdGV8fChyPWUuc3RhdGUsdDwwPyhuPTAsdD0tdCk6KG49KHQ+PjQpKzEsdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8dD4xNSkpP3VhOihyLndpbmRvdyE9PW51bGwmJnIud2JpdHMhPT10JiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz10LFRkKGUpKX1mdW5jdGlvbiBJZChlLHQpe3ZhciBuLHI7cmV0dXJuIGU/KHI9bmV3IGttLGUuc3RhdGU9cixyLndpbmRvdz1udWxsLG49UGQoZSx0KSxuIT09SnMmJihlLnN0YXRlPW51bGwpLG4pOnVhfWZ1bmN0aW9uIFJtKGUpe3JldHVybiBJZChlLE5tKX12YXIgTmQ9ITAsd3UsQ3U7ZnVuY3Rpb24geG0oZSl7aWYoTmQpe3ZhciB0O2Zvcih3dT1uZXcgR28uQnVmMzIoNTEyKSxDdT1uZXcgR28uQnVmMzIoMzIpLHQ9MDt0PDE0NDspZS5sZW5zW3QrK109ODtmb3IoO3Q8MjU2OyllLmxlbnNbdCsrXT05O2Zvcig7dDwyODA7KWUubGVuc1t0KytdPTc7Zm9yKDt0PDI4ODspZS5sZW5zW3QrK109ODtmb3IoWWwoS2YsZS5sZW5zLDAsMjg4LHd1LDAsZS53b3JrLHtiaXRzOjl9KSx0PTA7dDwzMjspZS5sZW5zW3QrK109NTtZbChaZixlLmxlbnMsMCwzMixDdSwwLGUud29yayx7Yml0czo1fSksTmQ9ITF9ZS5sZW5jb2RlPXd1LGUubGVuYml0cz05LGUuZGlzdGNvZGU9Q3UsZS5kaXN0Yml0cz01fWZ1bmN0aW9uIGtkKGUsdCxuLHIpe3ZhciBvLGM9ZS5zdGF0ZTtyZXR1cm4gYy53aW5kb3c9PT1udWxsJiYoYy53c2l6ZT0xPDxjLndiaXRzLGMud25leHQ9MCxjLndoYXZlPTAsYy53aW5kb3c9bmV3IEdvLkJ1ZjgoYy53c2l6ZSkpLHI+PWMud3NpemU/KEdvLmFycmF5U2V0KGMud2luZG93LHQsbi1jLndzaXplLGMud3NpemUsMCksYy53bmV4dD0wLGMud2hhdmU9Yy53c2l6ZSk6KG89Yy53c2l6ZS1jLnduZXh0LG8+ciYmKG89ciksR28uYXJyYXlTZXQoYy53aW5kb3csdCxuLXIsbyxjLnduZXh0KSxyLT1vLHI/KEdvLmFycmF5U2V0KGMud2luZG93LHQsbi1yLHIsMCksYy53bmV4dD1yLGMud2hhdmU9Yy53c2l6ZSk6KGMud25leHQrPW8sYy53bmV4dD09PWMud3NpemUmJihjLnduZXh0PTApLGMud2hhdmU8Yy53c2l6ZSYmKGMud2hhdmUrPW8pKSksMH1mdW5jdGlvbiBCbShlLHQpe3ZhciBuLHIsbyxjLGcsYixWLFQsRCx2ZSx5ZSxPZSxmdCxodCxWdD0wLHd0LEVuLG9uLGFuLFN0LFh0LGRuLHRuLFRuPW5ldyBHby5CdWY4KDQpLHZyLHNuLEFhPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighZXx8IWUuc3RhdGV8fCFlLm91dHB1dHx8IWUuaW5wdXQmJmUuYXZhaWxfaW4hPT0wKXJldHVybiB1YTtuPWUuc3RhdGUsbi5tb2RlPT09bnMmJihuLm1vZGU9RXUpLGc9ZS5uZXh0X291dCxvPWUub3V0cHV0LFY9ZS5hdmFpbF9vdXQsYz1lLm5leHRfaW4scj1lLmlucHV0LGI9ZS5hdmFpbF9pbixUPW4uaG9sZCxEPW4uYml0cyx2ZT1iLHllPVYsdG49SnM7ZTpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSBuZDppZihuLndyYXA9PT0wKXtuLm1vZGU9RXU7YnJlYWt9Zm9yKDtEPDE2Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9aWYobi53cmFwJjImJlQ9PT0zNTYxNSl7bi5jaGVjaz0wLFRuWzBdPVQmMjU1LFRuWzFdPVQ+Pj44JjI1NSxuLmNoZWNrPXhhKG4uY2hlY2ssVG4sMiwwKSxUPTAsRD0wLG4ubW9kZT1yZDticmVha31pZihuLmZsYWdzPTAsbi5oZWFkJiYobi5oZWFkLmRvbmU9ITEpLCEobi53cmFwJjEpfHwoKChUJjI1NSk8PDgpKyhUPj44KSklMzEpe2UubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixuLm1vZGU9T3I7YnJlYWt9aWYoKFQmMTUpIT09dGQpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPU9yO2JyZWFrfWlmKFQ+Pj49NCxELT00LGRuPShUJjE1KSs4LG4ud2JpdHM9PT0wKW4ud2JpdHM9ZG47ZWxzZSBpZihkbj5uLndiaXRzKXtlLm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPU9yO2JyZWFrfW4uZG1heD0xPDxkbixlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9VCY1MTI/ZmQ6bnMsVD0wLEQ9MDticmVhaztjYXNlIHJkOmZvcig7RDwxNjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKG4uZmxhZ3M9VCwobi5mbGFncyYyNTUpIT09dGQpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPU9yO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe2UubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT1PcjticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1UPj44JjEpLG4uZmxhZ3MmNTEyJiYoVG5bMF09VCYyNTUsVG5bMV09VD4+PjgmMjU1LG4uY2hlY2s9eGEobi5jaGVjayxUbiwyLDApKSxUPTAsRD0wLG4ubW9kZT1pZDtjYXNlIGlkOmZvcig7RDwzMjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fW4uaGVhZCYmKG4uaGVhZC50aW1lPVQpLG4uZmxhZ3MmNTEyJiYoVG5bMF09VCYyNTUsVG5bMV09VD4+PjgmMjU1LFRuWzJdPVQ+Pj4xNiYyNTUsVG5bM109VD4+PjI0JjI1NSxuLmNoZWNrPXhhKG4uY2hlY2ssVG4sNCwwKSksVD0wLEQ9MCxuLm1vZGU9b2Q7Y2FzZSBvZDpmb3IoO0Q8MTY7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPVQmMjU1LG4uaGVhZC5vcz1UPj44KSxuLmZsYWdzJjUxMiYmKFRuWzBdPVQmMjU1LFRuWzFdPVQ+Pj44JjI1NSxuLmNoZWNrPXhhKG4uY2hlY2ssVG4sMiwwKSksVD0wLEQ9MCxuLm1vZGU9YWQ7Y2FzZSBhZDppZihuLmZsYWdzJjEwMjQpe2Zvcig7RDwxNjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fW4ubGVuZ3RoPVQsbi5oZWFkJiYobi5oZWFkLmV4dHJhX2xlbj1UKSxuLmZsYWdzJjUxMiYmKFRuWzBdPVQmMjU1LFRuWzFdPVQ+Pj44JjI1NSxuLmNoZWNrPXhhKG4uY2hlY2ssVG4sMiwwKSksVD0wLEQ9MH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5leHRyYT1udWxsKTtuLm1vZGU9c2Q7Y2FzZSBzZDppZihuLmZsYWdzJjEwMjQmJihPZT1uLmxlbmd0aCxPZT5iJiYoT2U9YiksT2UmJihuLmhlYWQmJihkbj1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgQXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLEdvLmFycmF5U2V0KG4uaGVhZC5leHRyYSxyLGMsT2UsZG4pKSxuLmZsYWdzJjUxMiYmKG4uY2hlY2s9eGEobi5jaGVjayxyLE9lLGMpKSxiLT1PZSxjKz1PZSxuLmxlbmd0aC09T2UpLG4ubGVuZ3RoKSlicmVhayBlO24ubGVuZ3RoPTAsbi5tb2RlPWxkO2Nhc2UgbGQ6aWYobi5mbGFncyYyMDQ4KXtpZihiPT09MClicmVhayBlO09lPTA7ZG8gZG49cltjK09lKytdLG4uaGVhZCYmZG4mJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZG4pKTt3aGlsZShkbiYmT2U8Yik7aWYobi5mbGFncyY1MTImJihuLmNoZWNrPXhhKG4uY2hlY2sscixPZSxjKSksYi09T2UsYys9T2UsZG4pYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPWNkO2Nhc2UgY2Q6aWYobi5mbGFncyY0MDk2KXtpZihiPT09MClicmVhayBlO09lPTA7ZG8gZG49cltjK09lKytdLG4uaGVhZCYmZG4mJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZG4pKTt3aGlsZShkbiYmT2U8Yik7aWYobi5mbGFncyY1MTImJihuLmNoZWNrPXhhKG4uY2hlY2sscixPZSxjKSksYi09T2UsYys9T2UsZG4pYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT11ZDtjYXNlIHVkOmlmKG4uZmxhZ3MmNTEyKXtmb3IoO0Q8MTY7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZihUIT09KG4uY2hlY2smNjU1MzUpKXtlLm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPU9yO2JyZWFrfVQ9MCxEPTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSxlLmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9bnM7YnJlYWs7Y2FzZSBmZDpmb3IoO0Q8MzI7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1lLmFkbGVyPW4uY2hlY2s9QWQoVCksVD0wLEQ9MCxuLm1vZGU9U2M7Y2FzZSBTYzppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gZS5uZXh0X291dD1nLGUuYXZhaWxfb3V0PVYsZS5uZXh0X2luPWMsZS5hdmFpbF9pbj1iLG4uaG9sZD1ULG4uYml0cz1ELENtO2UuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1ucztjYXNlIG5zOmlmKHQ9PT1TbXx8dD09PXljKWJyZWFrIGU7Y2FzZSBFdTppZihuLmxhc3Qpe1Q+Pj49RCY3LEQtPUQmNyxuLm1vZGU9U3U7YnJlYWt9Zm9yKDtEPDM7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1zd2l0Y2gobi5sYXN0PVQmMSxUPj4+PTEsRC09MSxUJjMpe2Nhc2UgMDpuLm1vZGU9ZGQ7YnJlYWs7Y2FzZSAxOmlmKHhtKG4pLG4ubW9kZT13Yyx0PT09eWMpe1Q+Pj49MixELT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOm4ubW9kZT1nZDticmVhaztjYXNlIDM6ZS5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPU9yfVQ+Pj49MixELT0yO2JyZWFrO2Nhc2UgZGQ6Zm9yKFQ+Pj49RCY3LEQtPUQmNztEPDMyOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9aWYoKFQmNjU1MzUpIT09KFQ+Pj4xNl42NTUzNSkpe2UubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9T3I7YnJlYWt9aWYobi5sZW5ndGg9VCY2NTUzNSxUPTAsRD0wLG4ubW9kZT15dSx0PT09eWMpYnJlYWsgZTtjYXNlIHl1Om4ubW9kZT1oZDtjYXNlIGhkOmlmKE9lPW4ubGVuZ3RoLE9lKXtpZihPZT5iJiYoT2U9YiksT2U+ViYmKE9lPVYpLE9lPT09MClicmVhayBlO0dvLmFycmF5U2V0KG8scixjLE9lLGcpLGItPU9lLGMrPU9lLFYtPU9lLGcrPU9lLG4ubGVuZ3RoLT1PZTticmVha31uLm1vZGU9bnM7YnJlYWs7Y2FzZSBnZDpmb3IoO0Q8MTQ7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZihuLm5sZW49KFQmMzEpKzI1NyxUPj4+PTUsRC09NSxuLm5kaXN0PShUJjMxKSsxLFQ+Pj49NSxELT01LG4ubmNvZGU9KFQmMTUpKzQsVD4+Pj00LEQtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7ZS5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9T3I7YnJlYWt9bi5oYXZlPTAsbi5tb2RlPXBkO2Nhc2UgcGQ6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7RDwzOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9bi5sZW5zW0FhW24uaGF2ZSsrXV09VCY3LFQ+Pj49MyxELT0zfWZvcig7bi5oYXZlPDE5OyluLmxlbnNbQWFbbi5oYXZlKytdXT0wO2lmKG4ubGVuY29kZT1uLmxlbmR5bixuLmxlbmJpdHM9Nyx2cj17Yml0czpuLmxlbmJpdHN9LHRuPVlsKHltLG4ubGVucywwLDE5LG4ubGVuY29kZSwwLG4ud29yayx2ciksbi5sZW5iaXRzPXZyLmJpdHMsdG4pe2UubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLG4ubW9kZT1PcjticmVha31uLmhhdmU9MCxuLm1vZGU9dmQ7Y2FzZSB2ZDpmb3IoO24uaGF2ZTxuLm5sZW4rbi5uZGlzdDspe2Zvcig7VnQ9bi5sZW5jb2RlW1QmKDE8PG4ubGVuYml0cyktMV0sd3Q9VnQ+Pj4yNCxFbj1WdD4+PjE2JjI1NSxvbj1WdCY2NTUzNSwhKHd0PD1EKTspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKG9uPDE2KVQ+Pj49d3QsRC09d3Qsbi5sZW5zW24uaGF2ZSsrXT1vbjtlbHNle2lmKG9uPT09MTYpe2Zvcihzbj13dCsyO0Q8c247KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZihUPj4+PXd0LEQtPXd0LG4uaGF2ZT09PTApe2UubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9T3I7YnJlYWt9ZG49bi5sZW5zW24uaGF2ZS0xXSxPZT0zKyhUJjMpLFQ+Pj49MixELT0yfWVsc2UgaWYob249PT0xNyl7Zm9yKHNuPXd0KzM7RDxzbjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fVQ+Pj49d3QsRC09d3QsZG49MCxPZT0zKyhUJjcpLFQ+Pj49MyxELT0zfWVsc2V7Zm9yKHNuPXd0Kzc7RDxzbjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fVQ+Pj49d3QsRC09d3QsZG49MCxPZT0xMSsoVCYxMjcpLFQ+Pj49NyxELT03fWlmKG4uaGF2ZStPZT5uLm5sZW4rbi5uZGlzdCl7ZS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1PcjticmVha31mb3IoO09lLS07KW4ubGVuc1tuLmhhdmUrK109ZG59fWlmKG4ubW9kZT09PU9yKWJyZWFrO2lmKG4ubGVuc1syNTZdPT09MCl7ZS5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPU9yO2JyZWFrfWlmKG4ubGVuYml0cz05LHZyPXtiaXRzOm4ubGVuYml0c30sdG49WWwoS2Ysbi5sZW5zLDAsbi5ubGVuLG4ubGVuY29kZSwwLG4ud29yayx2ciksbi5sZW5iaXRzPXZyLmJpdHMsdG4pe2UubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLG4ubW9kZT1PcjticmVha31pZihuLmRpc3RiaXRzPTYsbi5kaXN0Y29kZT1uLmRpc3RkeW4sdnI9e2JpdHM6bi5kaXN0Yml0c30sdG49WWwoWmYsbi5sZW5zLG4ubmxlbixuLm5kaXN0LG4uZGlzdGNvZGUsMCxuLndvcmssdnIpLG4uZGlzdGJpdHM9dnIuYml0cyx0bil7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsbi5tb2RlPU9yO2JyZWFrfWlmKG4ubW9kZT13Yyx0PT09eWMpYnJlYWsgZTtjYXNlIHdjOm4ubW9kZT1DYztjYXNlIENjOmlmKGI+PTYmJlY+PTI1OCl7ZS5uZXh0X291dD1nLGUuYXZhaWxfb3V0PVYsZS5uZXh0X2luPWMsZS5hdmFpbF9pbj1iLG4uaG9sZD1ULG4uYml0cz1ELEVtKGUseWUpLGc9ZS5uZXh0X291dCxvPWUub3V0cHV0LFY9ZS5hdmFpbF9vdXQsYz1lLm5leHRfaW4scj1lLmlucHV0LGI9ZS5hdmFpbF9pbixUPW4uaG9sZCxEPW4uYml0cyxuLm1vZGU9PT1ucyYmKG4uYmFjaz0tMSk7YnJlYWt9Zm9yKG4uYmFjaz0wO1Z0PW4ubGVuY29kZVtUJigxPDxuLmxlbmJpdHMpLTFdLHd0PVZ0Pj4+MjQsRW49VnQ+Pj4xNiYyNTUsb249VnQmNjU1MzUsISh3dDw9RCk7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZihFbiYmKEVuJjI0MCk9PT0wKXtmb3IoYW49d3QsU3Q9RW4sWHQ9b247VnQ9bi5sZW5jb2RlW1h0KygoVCYoMTw8YW4rU3QpLTEpPj5hbildLHd0PVZ0Pj4+MjQsRW49VnQ+Pj4xNiYyNTUsb249VnQmNjU1MzUsIShhbit3dDw9RCk7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1UPj4+PWFuLEQtPWFuLG4uYmFjays9YW59aWYoVD4+Pj13dCxELT13dCxuLmJhY2srPXd0LG4ubGVuZ3RoPW9uLEVuPT09MCl7bi5tb2RlPXlkO2JyZWFrfWlmKEVuJjMyKXtuLmJhY2s9LTEsbi5tb2RlPW5zO2JyZWFrfWlmKEVuJjY0KXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9T3I7YnJlYWt9bi5leHRyYT1FbiYxNSxuLm1vZGU9bWQ7Y2FzZSBtZDppZihuLmV4dHJhKXtmb3Ioc249bi5leHRyYTtEPHNuOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9bi5sZW5ndGgrPVQmKDE8PG4uZXh0cmEpLTEsVD4+Pj1uLmV4dHJhLEQtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT1fZDtjYXNlIF9kOmZvcig7VnQ9bi5kaXN0Y29kZVtUJigxPDxuLmRpc3RiaXRzKS0xXSx3dD1WdD4+PjI0LEVuPVZ0Pj4+MTYmMjU1LG9uPVZ0JjY1NTM1LCEod3Q8PUQpOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9aWYoKEVuJjI0MCk9PT0wKXtmb3IoYW49d3QsU3Q9RW4sWHQ9b247VnQ9bi5kaXN0Y29kZVtYdCsoKFQmKDE8PGFuK1N0KS0xKT4+YW4pXSx3dD1WdD4+PjI0LEVuPVZ0Pj4+MTYmMjU1LG9uPVZ0JjY1NTM1LCEoYW4rd3Q8PUQpOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9VD4+Pj1hbixELT1hbixuLmJhY2srPWFufWlmKFQ+Pj49d3QsRC09d3Qsbi5iYWNrKz13dCxFbiY2NCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsbi5tb2RlPU9yO2JyZWFrfW4ub2Zmc2V0PW9uLG4uZXh0cmE9RW4mMTUsbi5tb2RlPWJkO2Nhc2UgYmQ6aWYobi5leHRyYSl7Zm9yKHNuPW4uZXh0cmE7RDxzbjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fW4ub2Zmc2V0Kz1UJigxPDxuLmV4dHJhKS0xLFQ+Pj49bi5leHRyYSxELT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPU9yO2JyZWFrfW4ubW9kZT1FZDtjYXNlIEVkOmlmKFY9PT0wKWJyZWFrIGU7aWYoT2U9eWUtVixuLm9mZnNldD5PZSl7aWYoT2U9bi5vZmZzZXQtT2UsT2U+bi53aGF2ZSYmbi5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1PcjticmVha31PZT5uLnduZXh0PyhPZS09bi53bmV4dCxmdD1uLndzaXplLU9lKTpmdD1uLnduZXh0LU9lLE9lPm4ubGVuZ3RoJiYoT2U9bi5sZW5ndGgpLGh0PW4ud2luZG93fWVsc2UgaHQ9byxmdD1nLW4ub2Zmc2V0LE9lPW4ubGVuZ3RoO09lPlYmJihPZT1WKSxWLT1PZSxuLmxlbmd0aC09T2U7ZG8gb1tnKytdPWh0W2Z0KytdO3doaWxlKC0tT2UpO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1DYyk7YnJlYWs7Y2FzZSB5ZDppZihWPT09MClicmVhayBlO29bZysrXT1uLmxlbmd0aCxWLS0sbi5tb2RlPUNjO2JyZWFrO2Nhc2UgU3U6aWYobi53cmFwKXtmb3IoO0Q8MzI7KXtpZihiPT09MClicmVhayBlO2ItLSxUfD1yW2MrK108PEQsRCs9OH1pZih5ZS09VixlLnRvdGFsX291dCs9eWUsbi50b3RhbCs9eWUseWUmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz94YShuLmNoZWNrLG8seWUsZy15ZSk6YnUobi5jaGVjayxvLHllLGcteWUpKSx5ZT1WLChuLmZsYWdzP1Q6QWQoVCkpIT09bi5jaGVjayl7ZS5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixuLm1vZGU9T3I7YnJlYWt9VD0wLEQ9MH1uLm1vZGU9U2Q7Y2FzZSBTZDppZihuLndyYXAmJm4uZmxhZ3Mpe2Zvcig7RDwzMjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKFQhPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7ZS5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLG4ubW9kZT1PcjticmVha31UPTAsRD0wfW4ubW9kZT13ZDtjYXNlIHdkOnRuPXdtO2JyZWFrIGU7Y2FzZSBPcjp0bj1RZjticmVhayBlO2Nhc2UgQ2Q6cmV0dXJuIGVkO2Nhc2UgT206ZGVmYXVsdDpyZXR1cm4gdWF9cmV0dXJuIGUubmV4dF9vdXQ9ZyxlLmF2YWlsX291dD1WLGUubmV4dF9pbj1jLGUuYXZhaWxfaW49YixuLmhvbGQ9VCxuLmJpdHM9RCwobi53c2l6ZXx8eWUhPT1lLmF2YWlsX291dCYmbi5tb2RlPE9yJiYobi5tb2RlPFN1fHx0IT09WGYpKSYma2QoZSxlLm91dHB1dCxlLm5leHRfb3V0LHllLWUuYXZhaWxfb3V0KSx2ZS09ZS5hdmFpbF9pbix5ZS09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9dmUsZS50b3RhbF9vdXQrPXllLG4udG90YWwrPXllLG4ud3JhcCYmeWUmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz94YShuLmNoZWNrLG8seWUsZS5uZXh0X291dC15ZSk6YnUobi5jaGVjayxvLHllLGUubmV4dF9vdXQteWUpKSxlLmRhdGFfdHlwZT1uLmJpdHMrKG4ubGFzdD82NDowKSsobi5tb2RlPT09bnM/MTI4OjApKyhuLm1vZGU9PT13Y3x8bi5tb2RlPT09eXU/MjU2OjApLCh2ZT09PTAmJnllPT09MHx8dD09PVhmKSYmdG49PT1KcyYmKHRuPUFtKSx0bn1mdW5jdGlvbiBNbShlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIHVhO3ZhciB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiYodC53aW5kb3c9bnVsbCksZS5zdGF0ZT1udWxsLEpzfWZ1bmN0aW9uIExtKGUsdCl7dmFyIG47cmV0dXJuIWV8fCFlLnN0YXRlfHwobj1lLnN0YXRlLChuLndyYXAmMik9PT0wKT91YToobi5oZWFkPXQsdC5kb25lPSExLEpzKX1mdW5jdGlvbiBEbShlLHQpe3ZhciBuPXQubGVuZ3RoLHIsbyxjO3JldHVybiFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSxyLndyYXAhPT0wJiZyLm1vZGUhPT1TYyk/dWE6ci5tb2RlPT09U2MmJihvPTEsbz1idShvLHQsbiwwKSxvIT09ci5jaGVjayk/UWY6KGM9a2QoZSx0LG4sbiksYz8oci5tb2RlPUNkLGVkKTooci5oYXZlZGljdD0xLEpzKSl9YmEuaW5mbGF0ZVJlc2V0PVRkLGJhLmluZmxhdGVSZXNldDI9UGQsYmEuaW5mbGF0ZVJlc2V0S2VlcD1PZCxiYS5pbmZsYXRlSW5pdD1SbSxiYS5pbmZsYXRlSW5pdDI9SWQsYmEuaW5mbGF0ZT1CbSxiYS5pbmZsYXRlRW5kPU1tLGJhLmluZmxhdGVHZXRIZWFkZXI9TG0sYmEuaW5mbGF0ZVNldERpY3Rpb25hcnk9RG0sYmEuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBSZD17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fTtmdW5jdGlvbiBGbSgpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfXZhciBWbT1GbSx3bD1iYSxxbD1OZSxBYz1pcixacj1SZCxBdT1fdCxVbT1sYSwkbT1WbSx4ZD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEtzKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEtzKSlyZXR1cm4gbmV3IEtzKGUpO3RoaXMub3B0aW9ucz1xbC5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHMsdC53aW5kb3dCaXRzPT09MCYmKHQud2luZG93Qml0cz0tMTUpKSx0LndpbmRvd0JpdHM+PTAmJnQud2luZG93Qml0czwxNiYmIShlJiZlLndpbmRvd0JpdHMpJiYodC53aW5kb3dCaXRzKz0zMiksdC53aW5kb3dCaXRzPjE1JiZ0LndpbmRvd0JpdHM8NDgmJih0LndpbmRvd0JpdHMmMTUpPT09MCYmKHQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFVtLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj13bC5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLHQud2luZG93Qml0cyk7aWYobiE9PVpyLlpfT0spdGhyb3cgbmV3IEVycm9yKEF1W25dKTtpZih0aGlzLmhlYWRlcj1uZXcgJG0sd2wuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLHQuZGljdGlvbmFyeSYmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3QuZGljdGlvbmFyeT1BYy5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6eGQuY2FsbCh0LmRpY3Rpb25hcnkpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIiYmKHQuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpKSx0LnJhdyYmKG49d2wuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHQuZGljdGlvbmFyeSksbiE9PVpyLlpfT0spKSl0aHJvdyBuZXcgRXJyb3IoQXVbbl0pfUtzLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zdHJtLHI9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxvPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGMsZyxiLFYsVCxEPSExO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Zz10PT09fn50P3Q6dD09PSEwP1pyLlpfRklOSVNIOlpyLlpfTk9fRkxVU0gsdHlwZW9mIGU9PSJzdHJpbmciP24uaW5wdXQ9QWMuYmluc3RyaW5nMmJ1ZihlKTp4ZC5jYWxsKGUpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9uLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOm4uaW5wdXQ9ZSxuLm5leHRfaW49MCxuLmF2YWlsX2luPW4uaW5wdXQubGVuZ3RoO2Rve2lmKG4uYXZhaWxfb3V0PT09MCYmKG4ub3V0cHV0PW5ldyBxbC5CdWY4KHIpLG4ubmV4dF9vdXQ9MCxuLmF2YWlsX291dD1yKSxjPXdsLmluZmxhdGUobixaci5aX05PX0ZMVVNIKSxjPT09WnIuWl9ORUVEX0RJQ1QmJm8mJihjPXdsLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxvKSksYz09PVpyLlpfQlVGX0VSUk9SJiZEPT09ITAmJihjPVpyLlpfT0ssRD0hMSksYyE9PVpyLlpfU1RSRUFNX0VORCYmYyE9PVpyLlpfT0spcmV0dXJuIHRoaXMub25FbmQoYyksdGhpcy5lbmRlZD0hMCwhMTtuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHxjPT09WnIuWl9TVFJFQU1fRU5EfHxuLmF2YWlsX2luPT09MCYmKGc9PT1aci5aX0ZJTklTSHx8Zz09PVpyLlpfU1lOQ19GTFVTSCkpJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/KGI9QWMudXRmOGJvcmRlcihuLm91dHB1dCxuLm5leHRfb3V0KSxWPW4ubmV4dF9vdXQtYixUPUFjLmJ1ZjJzdHJpbmcobi5vdXRwdXQsYiksbi5uZXh0X291dD1WLG4uYXZhaWxfb3V0PXItVixWJiZxbC5hcnJheVNldChuLm91dHB1dCxuLm91dHB1dCxiLFYsMCksdGhpcy5vbkRhdGEoVCkpOnRoaXMub25EYXRhKHFsLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpLG4uYXZhaWxfaW49PT0wJiZuLmF2YWlsX291dD09PTAmJihEPSEwKX13aGlsZSgobi5hdmFpbF9pbj4wfHxuLmF2YWlsX291dD09PTApJiZjIT09WnIuWl9TVFJFQU1fRU5EKTtyZXR1cm4gYz09PVpyLlpfU1RSRUFNX0VORCYmKGc9WnIuWl9GSU5JU0gpLGc9PT1aci5aX0ZJTklTSD8oYz13bC5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChjKSx0aGlzLmVuZGVkPSEwLGM9PT1aci5aX09LKTooZz09PVpyLlpfU1lOQ19GTFVTSCYmKHRoaXMub25FbmQoWnIuWl9PSyksbi5hdmFpbF9vdXQ9MCksITApfSxLcy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LEtzLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09WnIuWl9PSyYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PXFsLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIE91KGUsdCl7dmFyIG49bmV3IEtzKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8QXVbbi5lcnJdO3JldHVybiBuLnJlc3VsdH1mdW5jdGlvbiBIbShlLHQpe3JldHVybiB0PXR8fHt9LHQucmF3PSEwLE91KGUsdCl9R2wuSW5mbGF0ZT1LcyxHbC5pbmZsYXRlPU91LEdsLmluZmxhdGVSYXc9SG0sR2wudW5nemlwPU91O3ZhciBqbT1OZS5hc3NpZ24sem09a3QsV209R2wsR209UmQsQmQ9e307am0oQmQsem0sV20sR20pO3ZhciBNZD1CZDtsZXQgWW09InVweDJweCIscW09W3tuYW1lOiJ1cHgiLHR5cGU6W051bWJlcixTdHJpbmddLHJlcXVpcmVkOiEwfV0sSm09MWUtNCxLbT03NTAsTGQ9ITEsVHU9MCxEZD0wLEZkPTk2MCxWZD0zNzUsVWQ9NzUwO2Z1bmN0aW9uIFptKCl7bGV0e3BsYXRmb3JtOmUscGl4ZWxSYXRpbzp0LHdpbmRvd1dpZHRoOm59PURyKCk7VHU9bixEZD10LExkPWU9PT0iaW9zIn1mdW5jdGlvbiBQdShlLHQpe2xldCBuPU51bWJlcihlKTtyZXR1cm4gaXNOYU4obik/dDpufWZ1bmN0aW9uIFhtKCl7bGV0IGU9Ui5nbG9iYWxTdHlsZXx8e307RmQ9UHUoZS5ycHhDYWxjTWF4RGV2aWNlV2lkdGgsOTYwKSxWZD1QdShlLnJweENhbGNCYXNlRGV2aWNlV2lkdGgsMzc1KSxVZD1QdShlLnJweENhbGNCYXNlRGV2aWNlV2lkdGgsNzUwKX1sZXQgUW09THQoWW0sKGUsdCk9PntpZihUdT09PTAmJihabSgpLFhtKCkpLGU9TnVtYmVyKGUpLGU9PT0wKXJldHVybiAwO2xldCBuPXR8fFR1O249ZT09PVVkfHxuPD1GZD9uOlZkO2xldCByPWUvS20qbjtyZXR1cm4gcjwwJiYocj0tcikscj1NYXRoLmZsb29yKHIrSm0pLHI9PT0wJiYoRGQ9PT0xfHwhTGQ/cj0xOnI9LjUpLGU8MD8tcjpyfSxxbSksZV89ImFkZEludGVyY2VwdG9yIix0Xz0icmVtb3ZlSW50ZXJjZXB0b3IiLCRkPVt7bmFtZToibWV0aG9kIix0eXBlOltTdHJpbmcsT2JqZWN0XSxyZXF1aXJlZDohMH1dLG5fPSRkO2Z1bmN0aW9uIEhkKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChuPT57ei5pc0Z1bmN0aW9uKHRbbl0pJiYoZVtuXT1yXyhlW25dLHRbbl0pKX0pfWZ1bmN0aW9uIGpkKGUsdCl7IWV8fCF0fHxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49PntsZXQgcj1lW25dLG89dFtuXTt6LmlzQXJyYXkocikmJnouaXNGdW5jdGlvbihvKSYmei5yZW1vdmUocixvKX0pfWZ1bmN0aW9uIHJfKGUsdCl7bGV0IG49dD9lP2UuY29uY2F0KHQpOnouaXNBcnJheSh0KT90Olt0XTplO3JldHVybiBuJiZpXyhuKX1mdW5jdGlvbiBpXyhlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0LmluZGV4T2YoZVtuXSk9PT0tMSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fWxldCBvXz1MdChlXywoZSx0KT0+e3ouaXNTdHJpbmcoZSkmJnouaXNQbGFpbk9iamVjdCh0KT9IZChUcltlXXx8KFRyW2VdPXt9KSx0KTp6LmlzUGxhaW5PYmplY3QoZSkmJkhkKHhuLGUpfSwkZCksYV89THQodF8sKGUsdCk9Pnt6LmlzU3RyaW5nKGUpP3ouaXNQbGFpbk9iamVjdCh0KT9qZChUcltlXSx0KTpkZWxldGUgVHJbZV06ei5pc1BsYWluT2JqZWN0KGUpJiZqZCh4bixlKX0sbl8pLHNfPXt9LGxfPSIkb24iLHpkPVt7bmFtZToiZXZlbnQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY2FsbGJhY2siLHR5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9XSxjXz0iJG9uY2UiLHVfPXpkLGZfPSIkb2ZmIixkXz1be25hbWU6ImV2ZW50Iix0eXBlOltTdHJpbmcsQXJyYXldfSx7bmFtZToiY2FsbGJhY2siLHR5cGU6RnVuY3Rpb259XSxoXz0iJGVtaXQiLGdfPVt7bmFtZToiZXZlbnQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sWnM9bmV3IEsuRW1pdHRlcixwXz1MdChsXywoZSx0KT0+KFpzLm9uKGUsdCksKCk9PlpzLm9mZihlLHQpKSx6ZCksdl89THQoY18sKGUsdCk9Pihacy5vbmNlKGUsdCksKCk9PlpzLm9mZihlLHQpKSx1XyksbV89THQoZl8sKGUsdCk9PntpZighZSl7WnMuZT17fTtyZXR1cm59ei5pc0FycmF5KGUpfHwoZT1bZV0pLGUuZm9yRWFjaChuPT5acy5vZmYobix0KSl9LGRfKSxfXz1MdChoXywoZSwuLi50KT0+e1pzLmVtaXQoZSwuLi50KX0sZ18pLFdkPVt7bmFtZToiaWQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sYl89ImNyZWF0ZVZpZGVvQ29udGV4dCIsRV89ImNyZWF0ZU1hcENvbnRleHQiLHlfPVdkLFNfPSJjcmVhdGVDYW52YXNDb250ZXh0Iix3Xz1be25hbWU6ImNhbnZhc0lkIix0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0se25hbWU6ImNvbXBvbmVudEluc3RhbmNlIix0eXBlOk9iamVjdH1dLENfPSJjcmVhdGVJbm5lckF1ZGlvQ29udGV4dCIsQV89ImNyZWF0ZUxpdmVQdXNoZXJDb250ZXh0IixPXz1XZC5jb25jYXQoe25hbWU6ImNvbXBvbmVudEluc3RhbmNlIix0eXBlOk9iamVjdH0pLFRfPVsuNSwuOCwxLDEuMjUsMS41LDJdO2NsYXNzIEl1e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW59cGxheSgpe2xuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBsYXkiKX1wYXVzZSgpe2xuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBhdXNlIil9c3RvcCgpe2xuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInN0b3AiKX1zZWVrKHQpe2xuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNlZWsiLHtwb3NpdGlvbjp0fSl9c2VuZERhbm11KHQpe2xuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNlbmREYW5tdSIsdCl9cGxheWJhY2tSYXRlKHQpe35UXy5pbmRleE9mKHQpfHwodD0xKSxsbih0aGlzLmlkLHRoaXMucGFnZUlkLCJwbGF5YmFja1JhdGUiLHtyYXRlOnR9KX1yZXF1ZXN0RnVsbFNjcmVlbih0PXt9KXtsbih0aGlzLmlkLHRoaXMucGFnZUlkLCJyZXF1ZXN0RnVsbFNjcmVlbiIsdCl9ZXhpdEZ1bGxTY3JlZW4oKXtsbih0aGlzLmlkLHRoaXMucGFnZUlkLCJleGl0RnVsbFNjcmVlbiIpfXNob3dTdGF0dXNCYXIoKXtsbih0aGlzLmlkLHRoaXMucGFnZUlkLCJzaG93U3RhdHVzQmFyIil9aGlkZVN0YXR1c0Jhcigpe2xuKHRoaXMuaWQsdGhpcy5wYWdlSWQsImhpZGVTdGF0dXNCYXIiKX19bGV0IFBfPUx0KGJfLChlLHQpPT50P25ldyBJdShlLEhuKHQpKTpuZXcgSXUoZSxIbih3cigpKSkpLElfPShlLHQpPT57bGV0IG49dC5lcnJNc2d8fCIiO25ldyBSZWdFeHAoIlxcOlxccypmYWlsIikudGVzdChuKT9lLmZhaWwmJmUuZmFpbCh0KTplLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KSxlLmNvbXBsZXRlJiZlLmNvbXBsZXRlKHQpfSxJaT0oZSx0LG4scik9PntZbihlLHQsbixyLG89PntyJiZJXyhyLG8pfSl9O2NsYXNzIE51e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW59Z2V0Q2VudGVyTG9jYXRpb24odCl7SWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwiZ2V0Q2VudGVyTG9jYXRpb24iLHQpfW1vdmVUb0xvY2F0aW9uKHQpe0lpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm1vdmVUb0xvY2F0aW9uIix0KX1nZXRTY2FsZSh0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJnZXRTY2FsZSIsdCl9Z2V0UmVnaW9uKHQpe0lpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImdldFJlZ2lvbiIsdCl9aW5jbHVkZVBvaW50cyh0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJpbmNsdWRlUG9pbnRzIix0KX10cmFuc2xhdGVNYXJrZXIodCl7SWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwidHJhbnNsYXRlTWFya2VyIix0KX0kZ2V0QXBwTWFwKCl7cmV0dXJuIHMubWFwcy5nZXRNYXBCeUlkKHRoaXMucGFnZUlkKyItbWFwLSIrdGhpcy5pZCl9YWRkQ3VzdG9tTGF5ZXIodCl7SWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWRkQ3VzdG9tTGF5ZXIiLHQpfXJlbW92ZUN1c3RvbUxheWVyKHQpe0lpKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlbW92ZUN1c3RvbUxheWVyIix0KX1hZGRHcm91bmRPdmVybGF5KHQpe0lpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImFkZEdyb3VuZE92ZXJsYXkiLHQpfXJlbW92ZUdyb3VuZE92ZXJsYXkodCl7SWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlR3JvdW5kT3ZlcmxheSIsdCl9dXBkYXRlR3JvdW5kT3ZlcmxheSh0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJ1cGRhdGVHcm91bmRPdmVybGF5Iix0KX1pbml0TWFya2VyQ2x1c3Rlcih0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJpbml0TWFya2VyQ2x1c3RlciIsdCl9YWRkTWFya2Vycyh0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJhZGRNYXJrZXJzIix0KX1yZW1vdmVNYXJrZXJzKHQpe0lpKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlbW92ZU1hcmtlcnMiLHQpfW1vdmVBbG9uZyh0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJtb3ZlQWxvbmciLHQpfXNldExvY01hcmtlckljb24odCl7SWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwic2V0TG9jTWFya2VySWNvbiIsdCl9b3Blbk1hcEFwcCh0KXtJaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJvcGVuTWFwQXBwIix0KX1vbih0LG4pe0lpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm9uIix7bmFtZTp0LGNhbGxiYWNrOm59KX19bGV0IE5fPUx0KEVfLChlLHQpPT50P25ldyBOdShlLEhuKHQpKTpuZXcgTnUoZSxIbih3cigpKSkseV8pO2Z1bmN0aW9uIEFzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7bj9yW2VdPU1hdGgucm91bmQobik6dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYocltlXT10KX19bGV0IEdkPUFzKCJ3aWR0aCIpLFlkPUFzKCJoZWlnaHQiKSxrXz0iY2FudmFzR2V0SW1hZ2VEYXRhIixxZD17Zm9ybWF0QXJnczp7eDpBcygieCIpLHk6QXMoInkiKSx3aWR0aDpHZCxoZWlnaHQ6WWR9fSxKZD17Y2FudmFzSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx4Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0seTp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITB9LHdpZHRoOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMH0saGVpZ2h0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LFJfPSJjYW52YXNQdXRJbWFnZURhdGEiLHhfPXFkLEJfPXouZXh0ZW5kKHtkYXRhOnt0eXBlOlVpbnQ4Q2xhbXBlZEFycmF5LHJlcXVpcmVkOiEwfX0sSmQse2hlaWdodDp7dHlwZTpOdW1iZXJ9fSksS2Q9e1BORzoicG5nIixKUEc6ImpwZyIsSlBFRzoianBnIn0sTV89ImNhbnZhc1RvVGVtcEZpbGVQYXRoIixMXz17Zm9ybWF0QXJnczp7eDpBcygieCIsMCkseTpBcygieSIsMCksd2lkdGg6R2QsaGVpZ2h0OllkLGRlc3RXaWR0aDpBcygiZGVzdFdpZHRoIiksZGVzdEhlaWdodDpBcygiZGVzdEhlaWdodCIpLGZpbGVUeXBlKGUsdCl7ZT0oZXx8IiIpLnRvVXBwZXJDYXNlKCk7bGV0IG49S2RbZV07bnx8KG49S2QuUE5HKSx0LmZpbGVUeXBlPW59LHF1YWxpdHkoZSx0KXt0LnF1YWxpdHk9ZSYmZT4wJiZlPDE/ZToxfX19LERfPXt4Ok51bWJlcix5Ok51bWJlcix3aWR0aDpOdW1iZXIsaGVpZ2h0Ok51bWJlcixkZXN0V2lkdGg6TnVtYmVyLGRlc3RIZWlnaHQ6TnVtYmVyLGNhbnZhc0lkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZmlsZVR5cGU6U3RyaW5nLHF1YWxpdHk6TnVtYmVyfTtmdW5jdGlvbiBPYyhlLHQsbixyLG8pe290Lmludm9rZVZpZXdNZXRob2QoYGNhbnZhcy4ke2V9YCx7dHlwZTpuLGRhdGE6cn0sdCxjPT57byYmbyhjKX0pfXZhciBGXz1bInNjYWxlIiwicm90YXRlIiwidHJhbnNsYXRlIiwic2V0VHJhbnNmb3JtIiwidHJhbnNmb3JtIl0sVl89WyJkcmF3SW1hZ2UiLCJmaWxsVGV4dCIsImZpbGwiLCJzdHJva2UiLCJmaWxsUmVjdCIsInN0cm9rZVJlY3QiLCJjbGVhclJlY3QiLCJzdHJva2VUZXh0Il0sVV89WyJzZXRGaWxsU3R5bGUiLCJzZXRUZXh0QWxpZ24iLCJzZXRTdHJva2VTdHlsZSIsInNldEdsb2JhbEFscGhhIiwic2V0U2hhZG93Iiwic2V0Rm9udFNpemUiLCJzZXRMaW5lQ2FwIiwic2V0TGluZUpvaW4iLCJzZXRMaW5lV2lkdGgiLCJzZXRNaXRlckxpbWl0Iiwic2V0VGV4dEJhc2VsaW5lIiwic2V0TGluZURhc2giXTtmdW5jdGlvbiAkXyhlLHQpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7cmV0dXJuIHIuZm9udD10LHIubWVhc3VyZVRleHQoZSkud2lkdGh8fDB9bGV0IFpkPXthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW46IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmV5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsc3RlZWxibHVlOiIjNDY4MmI0Iix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRvbWF0bzoiI2ZmNjM0NyIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCJ9O2Z1bmN0aW9uIGt1KGUpe2U9ZXx8IiMwMDAwMDAiO3ZhciB0PW51bGw7aWYoKHQ9L14jKFswLTl8QS1GfGEtZl17Nn0pJC8uZXhlYyhlKSkhPW51bGwpe2xldCByPXBhcnNlSW50KHRbMV0uc2xpY2UoMCwyKSwxNiksbz1wYXJzZUludCh0WzFdLnNsaWNlKDIsNCksMTYpLGM9cGFyc2VJbnQodFsxXS5zbGljZSg0KSwxNik7cmV0dXJuW3IsbyxjLDI1NV19aWYoKHQ9L14jKFswLTl8QS1GfGEtZl17M30pJC8uZXhlYyhlKSkhPW51bGwpe2xldCByPXRbMV0uc2xpY2UoMCwxKSxvPXRbMV0uc2xpY2UoMSwyKSxjPXRbMV0uc2xpY2UoMiwzKTtyZXR1cm4gcj1wYXJzZUludChyK3IsMTYpLG89cGFyc2VJbnQobytvLDE2KSxjPXBhcnNlSW50KGMrYywxNiksW3IsbyxjLDI1NV19aWYoKHQ9L15yZ2JcKCguKylcKSQvLmV4ZWMoZSkpIT1udWxsKXJldHVybiB0WzFdLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1pbigyNTUscGFyc2VJbnQoci50cmltKCkpKX0pLmNvbmNhdCgyNTUpO2lmKCh0PS9ecmdiYVwoKC4rKVwpJC8uZXhlYyhlKSkhPW51bGwpcmV0dXJuIHRbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocixvKXtyZXR1cm4gbz09PTM/TWF0aC5mbG9vcigyNTUqcGFyc2VGbG9hdChyLnRyaW0oKSkpOk1hdGgubWluKDI1NSxwYXJzZUludChyLnRyaW0oKSkpfSk7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO2lmKHouaGFzT3duKFpkLG4pKXt0PS9eIyhbMC05fEEtRnxhLWZdezYsOH0pJC8uZXhlYyhaZFtuXSk7bGV0IHI9cGFyc2VJbnQodFsxXS5zbGljZSgwLDIpLDE2KSxvPXBhcnNlSW50KHRbMV0uc2xpY2UoMiw0KSwxNiksYz1wYXJzZUludCh0WzFdLnNsaWNlKDQsNiksMTYpLGc9cGFyc2VJbnQodFsxXS5zbGljZSg2LDgpLDE2KTtyZXR1cm4gZz1nPj0wP2c6MjU1LFtyLG8sYyxnXX1yZXR1cm4gY29uc29sZS5lcnJvcigidW5zdXBwb3J0ZWQgY29sb3I6IitlKSxbMCwwLDAsMjU1XX1jbGFzcyBYZHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHlwZT10LHRoaXMuZGF0YT1uLHRoaXMuY29sb3JTdG9wPVtdfWFkZENvbG9yU3RvcCh0LG4pe3RoaXMuY29sb3JTdG9wLnB1c2goW3Qsa3UobildKX19Y2xhc3MgSF97Y29uc3RydWN0b3IodCxuKXt0aGlzLnR5cGU9InBhdHRlcm4iLHRoaXMuZGF0YT10LHRoaXMuY29sb3JTdG9wPW59fWNsYXNzIGpfe2NvbnN0cnVjdG9yKHQpe3RoaXMud2lkdGg9dH19Y2xhc3MgSmx7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bix0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXSx0aGlzLmRyYXdpbmdTdGF0ZT1bXSx0aGlzLnN0YXRlPXtsaW5lRGFzaDpbMCwwXSxzaGFkb3dPZmZzZXRYOjAsc2hhZG93T2Zmc2V0WTowLHNoYWRvd0JsdXI6MCxzaGFkb3dDb2xvcjpbMCwwLDAsMF0sZm9udDoiMTBweCBzYW5zLXNlcmlmIixmb250U2l6ZToxMCxmb250V2VpZ2h0OiJub3JtYWwiLGZvbnRTdHlsZToibm9ybWFsIixmb250RmFtaWx5OiJzYW5zLXNlcmlmIn19ZHJhdyh0PSExLG4pe3ZhciByPVsuLi50aGlzLmFjdGlvbnNdO3RoaXMuYWN0aW9ucz1bXSx0aGlzLnBhdGg9W10sT2ModGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWN0aW9uc0NoYW5nZWQiLHthY3Rpb25zOnIscmVzZXJ2ZTp0fSxuKX1jcmVhdGVMaW5lYXJHcmFkaWVudCh0LG4scixvKXtyZXR1cm4gbmV3IFhkKCJsaW5lYXIiLFt0LG4scixvXSl9Y3JlYXRlQ2lyY3VsYXJHcmFkaWVudCh0LG4scil7cmV0dXJuIG5ldyBYZCgicmFkaWFsIixbdCxuLHJdKX1jcmVhdGVQYXR0ZXJuKHQsbil7aWYobj09PXZvaWQgMCljb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlUGF0dGVybicgb24gJ0NhbnZhc0NvbnRleHQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgMSBwcmVzZW50LiIpO2Vsc2UgaWYoWyJyZXBlYXQiLCJyZXBlYXQteCIsInJlcGVhdC15Iiwibm8tcmVwZWF0Il0uaW5kZXhPZihuKTwwKWNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVQYXR0ZXJuJyBvbiAnQ2FudmFzQ29udGV4dCc6IFRoZSBwcm92aWRlZCB0eXBlICgnIituKyInKSBpcyBub3Qgb25lIG9mICdyZXBlYXQnLCAnbm8tcmVwZWF0JywgJ3JlcGVhdC14Jywgb3IgJ3JlcGVhdC15Jy4iKTtlbHNlIHJldHVybiBuZXcgSF8odCxuKX1tZWFzdXJlVGV4dCh0KXtsZXQgbj10aGlzLnN0YXRlLmZvbnQscj0wO3tsZXQgbz1zLndlYnZpZXcuYWxsKCkuZmluZChjPT5jLmdldFVSTCgpLmVuZHNXaXRoKCJ3d3cvX191bmlhcHB2aWV3Lmh0bWwiKSk7byYmKHI9TnVtYmVyKG8uZXZhbEpTU3luYyhgKCR7JF8udG9TdHJpbmcoKX0pKCR7SlNPTi5zdHJpbmdpZnkodCl9LCR7SlNPTi5zdHJpbmdpZnkobil9KWApKSl9cmV0dXJuIG5ldyBqXyhyKX1zYXZlKCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2F2ZSIsZGF0YTpbXX0pLHRoaXMuZHJhd2luZ1N0YXRlLnB1c2godGhpcy5zdGF0ZSl9cmVzdG9yZSgpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InJlc3RvcmUiLGRhdGE6W119KSx0aGlzLnN0YXRlPXRoaXMuZHJhd2luZ1N0YXRlLnBvcCgpfHx7bGluZURhc2g6WzAsMF0sc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxzaGFkb3dCbHVyOjAsc2hhZG93Q29sb3I6WzAsMCwwLDBdLGZvbnQ6IjEwcHggc2Fucy1zZXJpZiIsZm9udFNpemU6MTAsZm9udFdlaWdodDoibm9ybWFsIixmb250U3R5bGU6Im5vcm1hbCIsZm9udEZhbWlseToic2Fucy1zZXJpZiJ9fWJlZ2luUGF0aCgpe3RoaXMucGF0aD1bXSx0aGlzLnN1YnBhdGg9W10sdGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYmVnaW5QYXRoIixkYXRhOltdfSl9bW92ZVRvKHQsbil7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoibW92ZVRvIixkYXRhOlt0LG5dfSksdGhpcy5zdWJwYXRoPVtbdCxuXV19bGluZVRvKHQsbil7dGhpcy5wYXRoLmxlbmd0aD09PTAmJnRoaXMuc3VicGF0aC5sZW5ndGg9PT0wP3RoaXMucGF0aC5wdXNoKHttZXRob2Q6Im1vdmVUbyIsZGF0YTpbdCxuXX0pOnRoaXMucGF0aC5wdXNoKHttZXRob2Q6ImxpbmVUbyIsZGF0YTpbdCxuXX0pLHRoaXMuc3VicGF0aC5wdXNoKFt0LG5dKX1xdWFkcmF0aWNDdXJ2ZVRvKHQsbixyLG8pe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6InF1YWRyYXRpY0N1cnZlVG8iLGRhdGE6W3QsbixyLG9dfSksdGhpcy5zdWJwYXRoLnB1c2goW3Isb10pfWJlemllckN1cnZlVG8odCxuLHIsbyxjLGcpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImJlemllckN1cnZlVG8iLGRhdGE6W3QsbixyLG8sYyxnXX0pLHRoaXMuc3VicGF0aC5wdXNoKFtjLGddKX1hcmModCxuLHIsbyxjLGc9ITEpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyYyIsZGF0YTpbdCxuLHIsbyxjLGddfSksdGhpcy5zdWJwYXRoLnB1c2goW3Qsbl0pfXJlY3QodCxuLHIsbyl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoicmVjdCIsZGF0YTpbdCxuLHIsb119KSx0aGlzLnN1YnBhdGg9W1t0LG5dXX1hcmNUbyh0LG4scixvLGMpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyY1RvIixkYXRhOlt0LG4scixvLGNdfSksdGhpcy5zdWJwYXRoLnB1c2goW3Isb10pfWNsaXAoKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJjbGlwIixkYXRhOlsuLi50aGlzLnBhdGhdfSl9Y2xvc2VQYXRoKCl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiY2xvc2VQYXRoIixkYXRhOltdfSksdGhpcy5zdWJwYXRoLmxlbmd0aCYmKHRoaXMuc3VicGF0aD1bdGhpcy5zdWJwYXRoLnNoaWZ0KCldKX1jbGVhckFjdGlvbnMoKXt0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXX1nZXRBY3Rpb25zKCl7dmFyIHQ9Wy4uLnRoaXMuYWN0aW9uc107cmV0dXJuIHRoaXMuY2xlYXJBY3Rpb25zKCksdH1zZXQgbGluZURhc2hPZmZzZXQodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0TGluZURhc2hPZmZzZXQiLGRhdGE6W3RdfSl9c2V0IGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLGRhdGE6W3RdfSl9c2V0IHNoYWRvd0JsdXIodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Qmx1ciIsZGF0YTpbdF19KX1zZXQgc2hhZG93Q29sb3IodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Q29sb3IiLGRhdGE6W3RdfSl9c2V0IHNoYWRvd09mZnNldFgodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93T2Zmc2V0WCIsZGF0YTpbdF19KX1zZXQgc2hhZG93T2Zmc2V0WSh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dPZmZzZXRZIixkYXRhOlt0XX0pfXNldCBmb250KHQpe3ZhciBuPXRoaXM7dGhpcy5zdGF0ZS5mb250PXQ7dmFyIHI9dC5tYXRjaCgvXigoW1x3XC1dK1xzKSopKFxkK3I/cHgpKFwvKFxkK1wuP1xkKihyP3B4KT8pKT9ccysoLiopLyk7aWYocil7dmFyIG89clsxXS50cmltKCkuc3BsaXQoL1xzLyksYz1wYXJzZUZsb2F0KHJbM10pLGc9cls3XSxiPVtdO28uZm9yRWFjaChmdW5jdGlvbihULEQpe1siaXRhbGljIiwib2JsaXF1ZSIsIm5vcm1hbCJdLmluZGV4T2YoVCk+LTE/KGIucHVzaCh7bWV0aG9kOiJzZXRGb250U3R5bGUiLGRhdGE6W1RdfSksbi5zdGF0ZS5mb250U3R5bGU9VCk6WyJib2xkIiwibm9ybWFsIl0uaW5kZXhPZihUKT4tMT8oYi5wdXNoKHttZXRob2Q6InNldEZvbnRXZWlnaHQiLGRhdGE6W1RdfSksbi5zdGF0ZS5mb250V2VpZ2h0PVQpOkQ9PT0wPyhiLnB1c2goe21ldGhvZDoic2V0Rm9udFN0eWxlIixkYXRhOlsibm9ybWFsIl19KSxuLnN0YXRlLmZvbnRTdHlsZT0ibm9ybWFsIik6RD09PTEmJlYoKX0pLG8ubGVuZ3RoPT09MSYmVigpLG89Yi5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIFQuZGF0YVswXX0pLmpvaW4oIiAiKSx0aGlzLnN0YXRlLmZvbnRTaXplPWMsdGhpcy5zdGF0ZS5mb250RmFtaWx5PWcsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0Rm9udCIsZGF0YTpbYCR7b30gJHtjfXB4ICR7Z31gXX0pfWVsc2UgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gc2V0ICdmb250JyBvbiAnQ2FudmFzQ29udGV4dCc6IGludmFsaWQgZm9ybWF0LiIpO2Z1bmN0aW9uIFYoKXtiLnB1c2goe21ldGhvZDoic2V0Rm9udFdlaWdodCIsZGF0YTpbIm5vcm1hbCJdfSksbi5zdGF0ZS5mb250V2VpZ2h0PSJub3JtYWwifX1nZXQgZm9udCgpe3JldHVybiB0aGlzLnN0YXRlLmZvbnR9c2V0IGZpbGxTdHlsZSh0KXt0aGlzLnNldEZpbGxTdHlsZSh0KX1zZXQgc3Ryb2tlU3R5bGUodCl7dGhpcy5zZXRTdHJva2VTdHlsZSh0KX1zZXQgZ2xvYmFsQWxwaGEodCl7dD1NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHQpKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxBbHBoYSIsZGF0YTpbdF19KX1zZXQgdGV4dEFsaWduKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldFRleHRBbGlnbiIsZGF0YTpbdF19KX1zZXQgbGluZUNhcCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lQ2FwIixkYXRhOlt0XX0pfXNldCBsaW5lSm9pbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lSm9pbiIsZGF0YTpbdF19KX1zZXQgbGluZVdpZHRoKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldExpbmVXaWR0aCIsZGF0YTpbdF19KX1zZXQgbWl0ZXJMaW1pdCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRNaXRlckxpbWl0IixkYXRhOlt0XX0pfXNldCB0ZXh0QmFzZWxpbmUodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0VGV4dEJhc2VsaW5lIixkYXRhOlt0XX0pfX1sZXQgel89Sy5vbmNlKCgpPT57Wy4uLkZfLC4uLlZfXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7c3dpdGNoKG4pe2Nhc2UiZmlsbCI6Y2FzZSJzdHJva2UiOnJldHVybiBmdW5jdGlvbigpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bisiUGF0aCIsZGF0YTpbLi4udGhpcy5wYXRoXX0pfTtjYXNlImZpbGxSZWN0IjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsZyl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoiZmlsbFBhdGgiLGRhdGE6W3ttZXRob2Q6InJlY3QiLGRhdGE6W3IsbyxjLGddfV19KX07Y2FzZSJzdHJva2VSZWN0IjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsZyl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic3Ryb2tlUGF0aCIsZGF0YTpbe21ldGhvZDoicmVjdCIsZGF0YTpbcixvLGMsZ119XX0pfTtjYXNlImZpbGxUZXh0IjpjYXNlInN0cm9rZVRleHQiOnJldHVybiBmdW5jdGlvbihyLG8sYyxnKXt2YXIgYj1bci50b1N0cmluZygpLG8sY107dHlwZW9mIGc9PSJudW1iZXIiJiZiLnB1c2goZyksdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6Yn0pfTtjYXNlImRyYXdJbWFnZSI6cmV0dXJuIGZ1bmN0aW9uKHIsbyxjLGcsYixWLFQsRCx2ZSl7dmU9PT12b2lkIDAmJihWPW8sVD1jLEQ9Zyx2ZT1iLG89dm9pZCAwLGM9dm9pZCAwLGc9dm9pZCAwLGI9dm9pZCAwKTt2YXIgeWU7ZnVuY3Rpb24gT2UoZnQpe3JldHVybiB0eXBlb2YgZnQ9PSJudW1iZXIifXllPU9lKG8pJiZPZShjKSYmT2UoZykmJk9lKGIpP1tyLFYsVCxELHZlLG8sYyxnLGJdOk9lKEQpJiZPZSh2ZSk/W3IsVixULEQsdmVdOltyLFYsVF0sdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6eWV9KX07ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oLi4ucil7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6cn0pfX19SmwucHJvdG90eXBlW2VdPXQoZSl9KSxVXy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7c3dpdGNoKG4pe2Nhc2Uic2V0RmlsbFN0eWxlIjpjYXNlInNldFN0cm9rZVN0eWxlIjpyZXR1cm4gZnVuY3Rpb24ocil7dHlwZW9mIHIhPSJvYmplY3QiP3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOlsibm9ybWFsIixrdShyKV19KTp0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbci50eXBlLHIuZGF0YSxyLmNvbG9yU3RvcF19KX07Y2FzZSJzZXRHbG9iYWxBbHBoYSI6cmV0dXJuIGZ1bmN0aW9uKHIpe3I9TWF0aC5mbG9vcigyNTUqcGFyc2VGbG9hdChyKSksdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3JdfSl9O2Nhc2Uic2V0U2hhZG93IjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsZyl7Zz1rdShnKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbcixvLGMsZ119KSx0aGlzLnN0YXRlLnNoYWRvd0JsdXI9Yyx0aGlzLnN0YXRlLnNoYWRvd0NvbG9yPWcsdGhpcy5zdGF0ZS5zaGFkb3dPZmZzZXRYPXIsdGhpcy5zdGF0ZS5zaGFkb3dPZmZzZXRZPW99O2Nhc2Uic2V0TGluZURhc2giOnJldHVybiBmdW5jdGlvbihyLG8pe3I9cnx8WzAsMF0sbz1vfHwwLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyLG9dfSksdGhpcy5zdGF0ZS5saW5lRGFzaD1yfTtjYXNlInNldEZvbnRTaXplIjpyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdGF0ZS5mb250PXRoaXMuc3RhdGUuZm9udC5yZXBsYWNlKC9cZCtcLj9cZCpweC8scisicHgiKSx0aGlzLnN0YXRlLmZvbnRTaXplPXIsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3JdfSl9O2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOnJ9KX19fUpsLnByb3RvdHlwZVtlXT10KGUpfSl9KSxXXz1MdChTXywoZSx0KT0+e2lmKHpfKCksdClyZXR1cm4gbmV3IEpsKGUsSG4odCkpO2xldCBuPUhuKHdyKCkpO2lmKG4pcmV0dXJuIG5ldyBKbChlLG4pO290LmVtaXQoSy5PTl9FUlJPUiwiY3JlYXRlQ2FudmFzQ29udGV4dDpmYWlsIil9LHdfKSxHXz1FZShrXywoe2NhbnZhc0lkOmUseDp0LHk6bix3aWR0aDpyLGhlaWdodDpvfSx7cmVzb2x2ZTpjLHJlamVjdDpnfSk9PntsZXQgYj1Ibih3cigpKTtpZighYil7ZygpO3JldHVybn1mdW5jdGlvbiBWKFQpe2lmKFQuZXJyTXNnJiZULmVyck1zZy5pbmRleE9mKCJmYWlsIikhPT0tMSl7ZygiIixUKTtyZXR1cm59bGV0IEQ9VC5kYXRhO0QmJkQubGVuZ3RoJiYoVC5jb21wcmVzc2VkJiYoRD1NZC5pbmZsYXRlUmF3KEQpKSxULmRhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KEQpKSxkZWxldGUgVC5jb21wcmVzc2VkLGMoVCl9T2MoZSxiLCJnZXRJbWFnZURhdGEiLHt4OnQseTpuLHdpZHRoOnIsaGVpZ2h0Om99LFYpfSxKZCxxZCksWV89RWUoUl8sKHtjYW52YXNJZDplLGRhdGE6dCx4Om4seTpyLHdpZHRoOm8saGVpZ2h0OmN9LHtyZXNvbHZlOmcscmVqZWN0OmJ9KT0+e3ZhciBWPUhuKHdyKCkpO2lmKCFWKXtiKCk7cmV0dXJufWxldCBULEQ9KCk9PntPYyhlLFYsInB1dEltYWdlRGF0YSIse2RhdGE6dCx4Om4seTpyLHdpZHRoOm8saGVpZ2h0OmMsY29tcHJlc3NlZDpUfSx2ZT0+e2lmKHZlLmVyck1zZyYmdmUuZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXtiKCk7cmV0dXJufWcodmUpfSl9O3Mub3MubmFtZSE9PSJpT1MifHx0eXBlb2YgX19XRUVYX0RFVlRPT0xfXz09ImJvb2xlYW4iPyh0PU1kLmRlZmxhdGVSYXcodCx7dG86InN0cmluZyJ9KSxUPSEwKTp0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpLEQoKX0sQl8seF8pLHFfPUVlKE1fLCh7eDplPTAseTp0PTAsd2lkdGg6bixoZWlnaHQ6cixkZXN0V2lkdGg6byxkZXN0SGVpZ2h0OmMsY2FudmFzSWQ6ZyxmaWxlVHlwZTpiLHF1YWxpdHk6Vn0se3Jlc29sdmU6VCxyZWplY3Q6RH0pPT57dmFyIHZlPUhuKHdyKCkpO2lmKCF2ZSl7RCgpO3JldHVybn1sZXQgeWU9YCR7SnJ9L2NhbnZhc2A7T2MoZyx2ZSwidG9UZW1wRmlsZVBhdGgiLHt4OmUseTp0LHdpZHRoOm4saGVpZ2h0OnIsZGVzdFdpZHRoOm8sZGVzdEhlaWdodDpjLGZpbGVUeXBlOmIscXVhbGl0eTpWLGRpcm5hbWU6eWV9LE9lPT57aWYoT2UuZXJyTXNnJiZPZS5lcnJNc2cuaW5kZXhPZigiZmFpbCIpIT09LTEpe0QoIiIsT2UpO3JldHVybn1UKE9lKX0pfSxEXyxMXyksUWQ9WyJvbkNhbnBsYXkiLCJvblBsYXkiLCJvblBhdXNlIiwib25TdG9wIiwib25FbmRlZCIsIm9uVGltZVVwZGF0ZSIsIm9uRXJyb3IiLCJvbldhaXRpbmciLCJvblNlZWtpbmciLCJvblNlZWtlZCJdLEpfPVsib2ZmQ2FucGxheSIsIm9mZlBsYXkiLCJvZmZQYXVzZSIsIm9mZlN0b3AiLCJvZmZFbmRlZCIsIm9mZlRpbWVVcGRhdGUiLCJvZmZFcnJvciIsIm9mZldhaXRpbmciLCJvZmZTZWVraW5nIiwib2ZmU2Vla2VkIl0sS189e3RocmVzaG9sZHM6WzBdLGluaXRpYWxSYXRpbzowLG9ic2VydmVBbGw6ITF9LFpfPVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0sWF89MTtmdW5jdGlvbiBlaChlPXt9KXtyZXR1cm4gWl8ubWFwKHQ9PmAke051bWJlcihlW3RdKXx8MH1weGApLmpvaW4oIiAiKX1jbGFzcyB0aHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3BhZ2VJZD1Ibih0KSx0aGlzLl9jb21wb25lbnQ9dCx0aGlzLl9vcHRpb25zPXouZXh0ZW5kKHt9LEtfLG4pfXJlbGF0aXZlVG8odCxuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5yZWxhdGl2ZVRvU2VsZWN0b3I9dCx0aGlzLl9vcHRpb25zLnJvb3RNYXJnaW49ZWgobiksdGhpc31yZWxhdGl2ZVRvVmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX29wdGlvbnMucmVsYXRpdmVUb1NlbGVjdG9yPXZvaWQgMCx0aGlzLl9vcHRpb25zLnJvb3RNYXJnaW49ZWgodCksdGhpc31vYnNlcnZlKHQsbil7IXouaXNGdW5jdGlvbihuKXx8KHRoaXMuX29wdGlvbnMuc2VsZWN0b3I9dCx0aGlzLl9yZXFJZD1YXysrLFRpKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50LG9wdGlvbnM6dGhpcy5fb3B0aW9ucyxjYWxsYmFjazpufSx0aGlzLl9wYWdlSWQpKX1kaXNjb25uZWN0KCl7dGhpcy5fcmVxSWQmJnVzKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50fSx0aGlzLl9wYWdlSWQpfX1sZXQgUV89THQoImNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyIiwoZSx0KT0+KGU9Sy5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIUhuKGUpJiYodD1lLGU9bnVsbCksZT9uZXcgdGgoZSx0KTpuZXcgdGgod3IoKSx0KSkpLGViPTE7Y2xhc3Mgbmh7Y29uc3RydWN0b3IodCl7dGhpcy5fcGFnZUlkPXQuJHBhZ2UmJnQuJHBhZ2UuaWQsdGhpcy5fY29tcG9uZW50PXR9b2JzZXJ2ZSh0LG4peyF6LmlzRnVuY3Rpb24obil8fCh0aGlzLl9yZXFJZD1lYisrLElhKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50LG9wdGlvbnM6dCxjYWxsYmFjazpufSx0aGlzLl9wYWdlSWQpKX1kaXNjb25uZWN0KCl7dGhpcy5fcmVxSWQmJm5hKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50fSx0aGlzLl9wYWdlSWQpfX1sZXQgdGI9THQoImNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlciIsZT0+KGU9Sy5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIUhuKGUpJiYoZT1udWxsKSxlP25ldyBuaChlKTpuZXcgbmgod3IoKSkpKSxuYj0wLFJ1PXt9O2Z1bmN0aW9uIHJiKGUsdCxuLHIpe2xldCBvPXtvcHRpb25zOnJ9LGM9ciYmKCJzdWNjZXNzImluIHJ8fCJmYWlsImluIHJ8fCJjb21wbGV0ZSJpbiByKTtpZihjKXtsZXQgZz1TdHJpbmcobmIrKyk7by5jYWxsYmFja0lkPWcsUnVbZ109cn1vdC5pbnZva2VWaWV3TWV0aG9kKGBlZGl0b3IuJHtlfWAse3R5cGU6bixkYXRhOm99LHQsKHtjYWxsYmFja0lkOmcsZGF0YTpifSk9PntjJiYoSy5jYWxsT3B0aW9ucyhSdVtnXSxiKSxkZWxldGUgUnVbZ10pfSl9Y2xhc3MgaWJ7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1mb3JtYXQodCxuKXt0aGlzLl9leGVjKCJmb3JtYXQiLHtuYW1lOnQsdmFsdWU6bn0pfWluc2VydERpdmlkZXIoKXt0aGlzLl9leGVjKCJpbnNlcnREaXZpZGVyIil9aW5zZXJ0SW1hZ2UodCl7dGhpcy5fZXhlYygiaW5zZXJ0SW1hZ2UiLHQpfWluc2VydFRleHQodCl7dGhpcy5fZXhlYygiaW5zZXJ0VGV4dCIsdCl9c2V0Q29udGVudHModCl7dGhpcy5fZXhlYygic2V0Q29udGVudHMiLHQpfWdldENvbnRlbnRzKHQpe3RoaXMuX2V4ZWMoImdldENvbnRlbnRzIix0KX1jbGVhcih0KXt0aGlzLl9leGVjKCJjbGVhciIsdCl9cmVtb3ZlRm9ybWF0KHQpe3RoaXMuX2V4ZWMoInJlbW92ZUZvcm1hdCIsdCl9dW5kbyh0KXt0aGlzLl9leGVjKCJ1bmRvIix0KX1yZWRvKHQpe3RoaXMuX2V4ZWMoInJlZG8iLHQpfWJsdXIodCl7dGhpcy5fZXhlYygiYmx1ciIsdCl9Z2V0U2VsZWN0aW9uVGV4dCh0KXt0aGlzLl9leGVjKCJnZXRTZWxlY3Rpb25UZXh0Iix0KX1zY3JvbGxJbnRvVmlldyh0KXt0aGlzLl9leGVjKCJzY3JvbGxJbnRvVmlldyIsdCl9X2V4ZWModCxuKXtyYih0aGlzLmlkLHRoaXMucGFnZUlkLHQsbil9fWxldCBvYj17Y2FudmFzOkpsLG1hcDpOdSx2aWRlbzpJdSxlZGl0b3I6aWJ9O2Z1bmN0aW9uIHJoKGUpe2lmKGUmJmUuY29udGV4dEluZm8pe2xldHtpZDp0LHR5cGU6bixwYWdlOnJ9PWUuY29udGV4dEluZm8sbz1vYltuXTtlLmNvbnRleHQ9bmV3IG8odCxyKSxkZWxldGUgZS5jb250ZXh0SW5mb319Y2xhc3MgeHV7Y29uc3RydWN0b3IodCxuLHIsbyl7dGhpcy5fc2VsZWN0b3JRdWVyeT10LHRoaXMuX2NvbXBvbmVudD1uLHRoaXMuX3NlbGVjdG9yPXIsdGhpcy5fc2luZ2xlPW99Ym91bmRpbmdDbGllbnRSZWN0KHQpe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUse2lkOiEwLGRhdGFzZXQ6ITAscmVjdDohMCxzaXplOiEwfSx0KSx0aGlzLl9zZWxlY3RvclF1ZXJ5fWZpZWxkcyh0LG4pe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUsdCxuKSx0aGlzLl9zZWxlY3RvclF1ZXJ5fXNjcm9sbE9mZnNldCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtpZDohMCxkYXRhc2V0OiEwLHNjcm9sbE9mZnNldDohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX1jb250ZXh0KHQpe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUse2NvbnRleHQ6ITB9LHQpLHRoaXMuX3NlbGVjdG9yUXVlcnl9bm9kZSh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtub2RlOiEwfSx0KSx0aGlzLl9zZWxlY3RvclF1ZXJ5fX1jbGFzcyBhYntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jb21wb25lbnQ9dm9pZCAwLHRoaXMuX3BhZ2U9dCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9xdWV1ZUNiPVtdfWV4ZWModCl7cmV0dXJuIEJpKHRoaXMuX3BhZ2UsdGhpcy5fcXVldWUsbj0+e2xldCByPXRoaXMuX3F1ZXVlQ2I7bi5mb3JFYWNoKChvLGMpPT57ei5pc0FycmF5KG8pP28uZm9yRWFjaChyaCk6cmgobyk7bGV0IGc9cltjXTt6LmlzRnVuY3Rpb24oZykmJmcuY2FsbCh0aGlzLG8pfSksei5pc0Z1bmN0aW9uKHQpJiZ0LmNhbGwodGhpcyxuKX0pLHRoaXMuX25vZGVzUmVmfWluKHQpe3JldHVybiB0aGlzLl9jb21wb25lbnQ9Sy5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UodCksdGhpc31zZWxlY3QodCl7cmV0dXJuIHRoaXMuX25vZGVzUmVmPW5ldyB4dSh0aGlzLHRoaXMuX2NvbXBvbmVudCx0LCEwKX1zZWxlY3RBbGwodCl7cmV0dXJuIHRoaXMuX25vZGVzUmVmPW5ldyB4dSh0aGlzLHRoaXMuX2NvbXBvbmVudCx0LCExKX1zZWxlY3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl9ub2Rlc1JlZj1uZXcgeHUodGhpcyxudWxsLCIiLCEwKX1fcHVzaCh0LG4scixvLGMpe3RoaXMuX3F1ZXVlLnB1c2goe2NvbXBvbmVudDpuLHNlbGVjdG9yOnQsc2luZ2xlOnIsZmllbGRzOm99KSx0aGlzLl9xdWV1ZUNiLnB1c2goYyl9fWxldCBzYj1MdCgiY3JlYXRlU2VsZWN0b3JRdWVyeSIsZT0+KGU9Sy5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIUhuKGUpJiYoZT1udWxsKSxuZXcgYWIoZXx8d3IoKSkpKSxsYj0iY3JlYXRlQW5pbWF0aW9uIixjYj17Zm9ybWF0QXJnczp7fX0sdWI9e2R1cmF0aW9uOk51bWJlcix0aW1pbmdGdW5jdGlvbjpTdHJpbmcsZGVsYXk6TnVtYmVyLHRyYW5zZm9ybU9yaWdpbjpTdHJpbmd9LGZiPXtkdXJhdGlvbjo0MDAsdGltaW5nRnVuY3Rpb246ImxpbmVhciIsZGVsYXk6MCx0cmFuc2Zvcm1PcmlnaW46IjUwJSA1MCUgMCJ9O2NsYXNzIGloe2NvbnN0cnVjdG9yKHQpe3RoaXMuYWN0aW9ucz1bXSx0aGlzLmN1cnJlbnRUcmFuc2Zvcm09e30sdGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzPVtdLHRoaXMub3B0aW9uPXouZXh0ZW5kKHt9LGZiLHQpfV9nZXRPcHRpb24odCl7bGV0IG49e3RyYW5zaXRpb246ei5leHRlbmQoe30sdGhpcy5vcHRpb24sdCksdHJhbnNmb3JtT3JpZ2luOiIifTtyZXR1cm4gbi50cmFuc2Zvcm1PcmlnaW49bi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixkZWxldGUgbi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixufV9wdXNoQW5pbWF0ZXModCxuKXt0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXMucHVzaCh7dHlwZTp0LGFyZ3M6bn0pfV9jb252ZXJUeXBlKHQpe3JldHVybiB0LnJlcGxhY2UoL1tBLVpdL2csbj0+YC0ke24udG9Mb3dlckNhc2UoKX1gKX1fZ2V0VmFsdWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIj9gJHt0fXB4YDp0fWV4cG9ydCgpe2xldCB0PXRoaXMuYWN0aW9ucztyZXR1cm4gdGhpcy5hY3Rpb25zPVtdLHthY3Rpb25zOnR9fXN0ZXAodCl7cmV0dXJuIHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcy5mb3JFYWNoKG49PntuLnR5cGUhPT0ic3R5bGUiP3RoaXMuY3VycmVudFRyYW5zZm9ybVtuLnR5cGVdPW46dGhpcy5jdXJyZW50VHJhbnNmb3JtW2Ake24udHlwZX0uJHtuLmFyZ3NbMF19YF09bn0pLHRoaXMuYWN0aW9ucy5wdXNoKHthbmltYXRlczpPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudFRyYW5zZm9ybSksb3B0aW9uOnRoaXMuX2dldE9wdGlvbih0KX0pLHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcz1bXSx0aGlzfX1sZXQgZGI9Sy5vbmNlKCgpPT57bGV0IGU9WyJtYXRyaXgiLCJtYXRyaXgzZCIsInJvdGF0ZSIsInJvdGF0ZTNkIiwicm90YXRlWCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwic2NhbGUiLCJzY2FsZTNkIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwic2tldyIsInNrZXdYIiwic2tld1kiLCJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGUzZCIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwidHJhbnNsYXRlWiJdLHQ9WyJvcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIl0sbj1bIndpZHRoIiwiaGVpZ2h0IiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl07ZS5jb25jYXQodCxuKS5mb3JFYWNoKHI9PntpaC5wcm90b3R5cGVbcl09ZnVuY3Rpb24oLi4ubyl7cmV0dXJuIHQuY29uY2F0KG4pLmluY2x1ZGVzKHIpP3RoaXMuX3B1c2hBbmltYXRlcygic3R5bGUiLFt0aGlzLl9jb252ZXJUeXBlKHIpLG4uaW5jbHVkZXMocik/dGhpcy5fZ2V0VmFsdWUob1swXSk6b1swXV0pOnRoaXMuX3B1c2hBbmltYXRlcyhyLG8pLHRoaXN9fSl9KSxoYj1MdChsYixlPT4oZGIoKSxuZXcgaWgoZSkpLHViLGNiKSxvaD0ib25UYWJCYXJNaWRCdXR0b25UYXAiLGdiPWduKG9oLCgpPT57fSkscGI9Im9uV2luZG93UmVzaXplIix2Yj0ib2ZmV2luZG93UmVzaXplIixtYj1nbihwYiwoKT0+e30pLF9iPWZpKHZiLCgpPT57fSksYWg9InNldExvY2FsZSIsYmI9ImdldExvY2FsZSIsc2g9Im9uTG9jYWxlQ2hhbmdlIixLbD1MdChiYiwoKT0+e2xldCBlPUN0KHthbGxvd0RlZmF1bHQ6ITB9KTtyZXR1cm4gZSYmZS4kdm0/ZS4kdm0uJGxvY2FsZTpndCgpLmdldExvY2FsZSgpfSksRWI9Z24oc2gsKCk9Pnt9KSx5Yj1MdChhaCxlPT57bGV0IHQ9Q3QoKTtyZXR1cm4gdCYmdC4kdm0uJGxvY2FsZSE9PWU/KHQuJHZtLiRsb2NhbGU9ZSxSbigpLmZvckVhY2gobz0+e290LnB1Ymxpc2hIYW5kbGVyKGFoLGUsby4kcGFnZS5pZCl9KSxmLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5zZXRMYW5ndWFnZShlKSxvdC5pbnZva2VPbkNhbGxiYWNrKHNoLHtsb2NhbGU6ZX0pLCEwKTohMX0pLFNiPUVlKCJzZXRQYWdlTWV0YSIsKGUse3Jlc29sdmU6dH0pPT57dChJbyh3cigpLGUpKX0pLGxoPSJnZXRTZWxlY3RlZFRleHRSYW5nZSIsd2I9RWUobGgsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57b3QuaW52b2tlVmlld01ldGhvZChsaCx7fSxoYSgpLHI9Pnt0eXBlb2Ygci5lbmQ9PSJ1bmRlZmluZWQiJiZ0eXBlb2Ygci5zdGFydD09InVuZGVmaW5lZCI/bigibm8gZm9jdXNlZCIpOnQocil9KX0pLFRjPXtbSy5PTl9VTkhBTkRMRV9SRUpFQ1RJT05dOltdLFtLLk9OX1BBR0VfTk9UX0ZPVU5EXTpbXSxbSy5PTl9FUlJPUl06W10sW0suT05fU0hPV106W10sW0suT05fSElERV06W119O2Z1bmN0aW9uIFpsKGUsdCl7bGV0IG49Q3Qoe2FsbG93RGVmYXVsdDohMH0pO2lmKG4mJm4uJHZtKXJldHVybiBtbi5pbmplY3RIb29rKGUsdCxuLiR2bS4kKTtUY1tlXS5wdXNoKHQpfWZ1bmN0aW9uIENiKGUpe09iamVjdC5rZXlzKFRjKS5mb3JFYWNoKHQ9PntUY1t0XS5mb3JFYWNoKG49Pnttbi5pbmplY3RIb29rKHQsbixlKX0pfSl9ZnVuY3Rpb24gWGwoZSx0KXtsZXQgbj1DdCh7YWxsb3dEZWZhdWx0OiEwfSk7aWYobiYmbi4kdm0pcmV0dXJuIFBhKG4uJHZtLGUsdCk7ei5yZW1vdmUoVGNbZV0sdCl9ZnVuY3Rpb24gQWIoZSl7WmwoSy5PTl9VTkhBTkRMRV9SRUpFQ1RJT04sZSl9ZnVuY3Rpb24gT2IoZSl7WGwoSy5PTl9VTkhBTkRMRV9SRUpFQ1RJT04sZSl9ZnVuY3Rpb24gVGIoZSl7WmwoSy5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBQYihlKXtYbChLLk9OX1BBR0VfTk9UX0ZPVU5ELGUpfWZ1bmN0aW9uIEliKGUpe1psKEsuT05fRVJST1IsZSl9ZnVuY3Rpb24gTmIoZSl7WGwoSy5PTl9FUlJPUixlKX1mdW5jdGlvbiBrYihlKXtabChLLk9OX1NIT1csZSl9ZnVuY3Rpb24gUmIoZSl7WGwoSy5PTl9TSE9XLGUpfWZ1bmN0aW9uIHhiKGUpe1psKEsuT05fSElERSxlKX1mdW5jdGlvbiBCYihlKXtYbChLLk9OX0hJREUsZSl9bGV0IE1iPUx0KCJnZXRFbnRlck9wdGlvbnNTeW5jIiwoKT0+RG8oKSksTGI9THQoImdldExhdW5jaE9wdGlvbnNTeW5jIiwoKT0+ZHMoKSksUWwsQnUsTXUsY2g7ZnVuY3Rpb24gdWgoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHQpe31yZXR1cm4gZX1mdW5jdGlvbiBMdShlKXtpZihlLnR5cGU9PT0iZW5hYmxlZCIpTXU9ITAsY2g9ZS5vZmZsaW5lO2Vsc2UgaWYoZS50eXBlPT09ImNsaWVudElkIilRbD1lLmNpZCxCdT1lLmVyck1zZyxmaChRbCxlLmVyck1zZyk7ZWxzZSBpZihlLnR5cGU9PT0icHVzaE1zZyIpe2xldCB0PXt0eXBlOiJyZWNlaXZlIixkYXRhOnVoKGUubWVzc2FnZSl9O2ZvcihsZXQgbj0wO248T3MubGVuZ3RoJiYoT3Nbbl0odCksIXQuc3RvcHBlZCk7bisrKTt9ZWxzZSBlLnR5cGU9PT0iY2xpY2siJiZPcy5mb3JFYWNoKHQ9Pnt0KHt0eXBlOiJjbGljayIsZGF0YTp1aChlLm1lc3NhZ2UpfSl9KX1sZXQgRHU9W107ZnVuY3Rpb24gZmgoZSx0KXtEdS5mb3JFYWNoKG49PntuKGUsdCl9KSxEdS5sZW5ndGg9MH1sZXQgRGI9RWUoImdldFB1c2hDbGllbnRJZCIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aWYoY2gpe3MucHVzaC5nZXRDbGllbnRJbmZvQXN5bmMocj0+e3Qoe2NpZDpyLmNsaWVudGlkfSl9LHI9PntuKHIuY29kZSsiOiAiK3IubWVzc2FnZSl9KTtyZXR1cm59UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3R5cGVvZiBNdT09InVuZGVmaW5lZCImJihNdT0hMSxRbD0iIixCdT0idW5pUHVzaCBpcyBub3QgZW5hYmxlZCIpLER1LnB1c2goKHIsbyk9PntyP3Qoe2NpZDpyfSk6bihvKX0pLHR5cGVvZiBRbCE9InVuZGVmaW5lZCImJmZoKFFsLEJ1KX0pfSksT3M9W10sZGg9ITEsRmI9ZT0+e09zLmluZGV4T2YoZSk9PT0tMSYmT3MucHVzaChlKSxkaHx8KGRoPSEwLHMucHVzaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdD0+e0x1KHt0eXBlOiJjbGljayIsbWVzc2FnZTp0fSl9KSxzLnB1c2guYWRkRXZlbnRMaXN0ZW5lcigicmVjZWl2ZSIsdD0+e0x1KHt0eXBlOiJwdXNoTXNnIixtZXNzYWdlOnR9KX0pKX0sVmI9ZT0+e2lmKCFlKU9zLmxlbmd0aD0wO2Vsc2V7bGV0IHQ9T3MuaW5kZXhPZihlKTt0Pi0xJiZPcy5zcGxpY2UodCwxKX19LFViPSJjYW5JVXNlIiwkYj1be25hbWU6InNjaGVtYSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxIYj0iZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlciIsamI9Im1ha2VQaG9uZUNhbGwiLHpiPXtwaG9uZU51bWJlcjpTdHJpbmd9LFdiPSJhZGRQaG9uZUNvbnRhY3QiLEdiPXtmb3JtYXRBcmdzOntmaXJzdE5hbWUoZSl7aWYoIWUpcmV0dXJuImFkZFBob25lQ29udGFjdDpmYWlsIHBhcmFtZXRlciBlcnJvcjogcGFyYW1ldGVyLmZpcnN0TmFtZSBzaG91bGQgbm90IGJlIGVtcHR5OyJ9fX0sWWI9e2ZpcnN0TmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHBob3RvRmlsZVBhdGg6U3RyaW5nLG5pY2tOYW1lOlN0cmluZyxsYXN0TmFtZTpTdHJpbmcsbWlkZGxlTmFtZTpTdHJpbmcscmVtYXJrOlN0cmluZyxtb2JpbGVQaG9uZU51bWJlcjpTdHJpbmcsd2VDaGF0TnVtYmVyOlN0cmluZyxhZGRyZXNzQ291bnRyeTpTdHJpbmcsYWRkcmVzc1N0YXRlOlN0cmluZyxhZGRyZXNzQ2l0eTpTdHJpbmcsYWRkcmVzc1N0cmVldDpTdHJpbmcsYWRkcmVzc1Bvc3RhbENvZGU6U3RyaW5nLG9yZ2FuaXphdGlvbjpTdHJpbmcsdGl0bGU6U3RyaW5nLHdvcmtGYXhOdW1iZXI6U3RyaW5nLHdvcmtQaG9uZU51bWJlcjpTdHJpbmcsaG9zdE51bWJlcjpTdHJpbmcsZW1haWw6U3RyaW5nLHVybDpTdHJpbmcsd29ya0FkZHJlc3NDb3VudHJ5OlN0cmluZyx3b3JrQWRkcmVzc1N0YXRlOlN0cmluZyx3b3JrQWRkcmVzc0NpdHk6U3RyaW5nLHdvcmtBZGRyZXNzU3RyZWV0OlN0cmluZyx3b3JrQWRkcmVzc1Bvc3RhbENvZGU6U3RyaW5nLGhvbWVGYXhOdW1iZXI6U3RyaW5nLGhvbWVQaG9uZU51bWJlcjpTdHJpbmcsaG9tZUFkZHJlc3NDb3VudHJ5OlN0cmluZyxob21lQWRkcmVzc1N0YXRlOlN0cmluZyxob21lQWRkcmVzc0NpdHk6U3RyaW5nLGhvbWVBZGRyZXNzU3RyZWV0OlN0cmluZyxob21lQWRkcmVzc1Bvc3RhbENvZGU6U3RyaW5nfSxxYj0iZ2V0Q2xpcGJvYXJkRGF0YSIsSmI9InNldENsaXBib2FyZERhdGEiLEtiPXtmb3JtYXRBcmdzOntzaG93VG9hc3Q6ITB9LGJlZm9yZUludm9rZSgpe210KCl9LGJlZm9yZVN1Y2Nlc3MoZSx0KXtpZighdC5zaG93VG9hc3QpcmV0dXJuO2xldHt0Om59PWd0KCkscj1uKCJ1bmkuc2V0Q2xpcGJvYXJkRGF0YS5zdWNjZXNzIik7ciYmUC5zaG93VG9hc3Qoe3RpdGxlOnIsaWNvbjoic3VjY2VzcyIsbWFzazohMX0pfX0sWmI9e2RhdGE6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxzaG93VG9hc3Q6e3R5cGU6Qm9vbGVhbn19LGhoPSJvbkFjY2VsZXJvbWV0ZXIiLFhiPSJvZmZBY2NlbGVyb21ldGVyIixRYj0ic3RhcnRBY2NlbGVyb21ldGVyIixlMD0ic3RvcEFjY2VsZXJvbWV0ZXIiLGdoPSJvbkNvbXBhc3MiLHQwPSJvZmZDb21wYXNzIixuMD0ic3RhcnRDb21wYXNzIixyMD0ic3RvcENvbXBhc3MiLGkwPSJ2aWJyYXRlU2hvcnQiLG8wPSJ2aWJyYXRlTG9uZyIscGg9Im9uQmx1ZXRvb3RoRGV2aWNlRm91bmQiLHZoPSJvbkJsdWV0b290aEFkYXB0ZXJTdGF0ZUNoYW5nZSIsbWg9Im9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlIixfaD0ib25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlIixhMD0ic3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IixzMD17c2VydmljZXM6QXJyYXksYWxsb3dEdXBsaWNhdGVzS2V5OkJvb2xlYW4saW50ZXJ2YWw6TnVtYmVyfSxsMD0iZ2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcyIsYzA9e3NlcnZpY2VzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sdTA9ImNyZWF0ZUJMRUNvbm5lY3Rpb24iLGYwPXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxkMD0iY2xvc2VCTEVDb25uZWN0aW9uIixoMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZzA9ImdldEJMRURldmljZVNlcnZpY2VzIixwMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sdjA9ImdldEJMRURldmljZUNoYXJhY3RlcmlzdGljcyIsbTA9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LF8wPSJub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlIixiMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxzZXJ2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxjaGFyYWN0ZXJpc3RpY0lkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc3RhdGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMH19LEUwPSJyZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSIseTA9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxTMD0id3JpdGVCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlIix3MD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxzZXJ2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxjaGFyYWN0ZXJpc3RpY0lkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdmFsdWU6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxDMD0ic2V0QkxFTVRVIixBMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxtdHU6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sTzA9ImdldEJMRURldmljZVJTU0kiLFQwPXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxiaD0ib25CZWFjb25VcGRhdGUiLEVoPSJvbkJlYWNvblNlcnZpY2VDaGFuZ2UiLFAwPSJnZXRCZWFjb25zIixJMD0ic3RhcnRCZWFjb25EaXNjb3ZlcnkiLE4wPXt1dWlkczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH19LGswPSJzdG9wQmVhY29uRGlzY292ZXJ5IixSMD0iZ2V0U2NyZWVuQnJpZ2h0bmVzcyIseDA9InNldFNjcmVlbkJyaWdodG5lc3MiLEIwPSJzZXRLZWVwU2NyZWVuT24iLE0wPSJjaGVja0lzU3VwcG9ydFNvdGVyQXV0aGVudGljYXRpb24iLEwwPSJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlIixEMD1bImZpbmdlclByaW50IiwiZmFjaWFsIiwic3BlZWNoIl0sRjA9e2Zvcm1hdEFyZ3M6e2NoZWNrQXV0aE1vZGUoZSx0KXtpZighZXx8IUQwLmluY2x1ZGVzKGUpKXJldHVybiJjaGVja0F1dGhNb2RlIFx1NTg2Qlx1NTE5OVx1OTUxOVx1OEJFRiJ9fX0sVjA9e2NoZWNrQXV0aE1vZGU6U3RyaW5nfSxVMD0ic3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uIiwkMD17Zm9ybWF0QXJnczp7cmVxdWVzdEF1dGhNb2RlcyhlLHQpe2lmKCFlLmluY2x1ZGVzKCJmaW5nZXJQcmludCIpJiYhZS5pbmNsdWRlcygiZmFjaWFsIikpcmV0dXJuInJlcXVlc3RBdXRoTW9kZXMgXHU1ODZCXHU1MTk5XHU5NTE5XHU4QkVGIn19fSxIMD17cmVxdWVzdEF1dGhNb2Rlczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sY2hhbGxlbmdlOlN0cmluZyxhdXRoQ29udGVudDpTdHJpbmd9LGowPSJzY2FuQ29kZSIsejA9e29ubHlGcm9tQ2FtZXJhOkJvb2xlYW4sc2NhblR5cGU6QXJyYXksYXV0b0RlY29kZUNoYXJTZXQ6Qm9vbGVhbixzb3VuZDpTdHJpbmcsYXV0b1pvb206Qm9vbGVhbn0sVzA9WyJkZWZhdWx0Iiwibm9uZSJdLEcwPXtmb3JtYXRBcmdzOntzb3VuZChlLHQpe1cwLmluY2x1ZGVzKGUpfHwodC5zb3VuZD0ibm9uZSIpfSxhdXRvWm9vbShlLHQpe3R5cGVvZiBlPT0idW5kZWZpbmVkIiYmKHQuYXV0b1pvb209ITApfX19LFkwPSJnZXRTeXN0ZW1TZXR0aW5nIixxMD0iZ2V0QXBwQXV0aG9yaXplU2V0dGluZyIsSjA9Im9wZW5BcHBBdXRob3JpemVTZXR0aW5nIixLMD0iZ2V0U3RvcmFnZSIseWg9e2tleTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxaMD0iZ2V0U3RvcmFnZVN5bmMiLFNoPVt7bmFtZToia2V5Iix0eXBlOlN0cmluZyxyZXF1aXJlZDohMH1dLFgwPSJzZXRTdG9yYWdlIixRMD17a2V5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGF0YTp7cmVxdWlyZWQ6ITB9fSxlRT0ic2V0U3RvcmFnZVN5bmMiLHRFPVt7bmFtZToia2V5Iix0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0se25hbWU6ImRhdGEiLHJlcXVpcmVkOiEwfV0sd2g9InJlbW92ZVN0b3JhZ2UiLG5FPXloLHJFPVNoLGlFPSJzYXZlRmlsZSIsb0U9e2Zvcm1hdEFyZ3M6e3RlbXBGaWxlUGF0aChlLHQpe3QudGVtcEZpbGVQYXRoPUhlKGUpfX19LGFFPXt0ZW1wRmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sc0U9ImdldFNhdmVkRmlsZUxpc3QiLGxFPSJyZW1vdmVTYXZlZEZpbGUiLGNFPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9SGUoZSl9fX0sdUU9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGZFPSJnZXRGaWxlSW5mbyIsZEU9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1IZShlKX19fSxoRT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZ0U9ImdldFNhdmVkRmlsZUluZm8iLHBFPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9SGUoZSl9fX0sdkU9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LG1FPSJvcGVuRG9jdW1lbnQiLF9FPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9SGUoZSl9fX0sYkU9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZmlsZVR5cGU6U3RyaW5nfSxFRT0iaGlkZUtleWJvYXJkIix5RT0ic2hvd0tleWJvYXJkIixTRT0iY2hvb3NlTG9jYXRpb24iLHdFPXtrZXl3b3JkOlN0cmluZyxsYXRpdHVkZTpOdW1iZXIsbG9uZ2l0dWRlOk51bWJlcn0sQ0U9ImdldExvY2F0aW9uIixDaD1bIndnczg0IiwiZ2NqMDIiXSxBRT17Zm9ybWF0QXJnczp7dHlwZShlLHQpe2U9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLENoLmluZGV4T2YoZSk9PT0tMT90LnR5cGU9Q2hbMF06dC50eXBlPWV9LGFsdGl0dWRlKGUsdCl7dC5hbHRpdHVkZT1lfHwhMX19fSxPRT17dHlwZTpTdHJpbmcsYWx0aXR1ZGU6Qm9vbGVhbn0sVEU9Im9wZW5Mb2NhdGlvbiIsQWg9KGUsdCk9PntpZih0PT09dm9pZCAwKXJldHVybmAke2V9IHNob3VsZCBub3QgYmUgZW1wdHkuYDtpZih0eXBlb2YgdCE9Im51bWJlciIpe2xldCBuPXR5cGVvZiB0O3JldHVybiBuPW5bMF0udG9VcHBlckNhc2UoKStuLnN1YnN0cmluZygxKSxgRXhwZWN0ZWQgTnVtYmVyLCBnb3QgJHtufSB3aXRoIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkodCl9LmB9fSxQRT17Zm9ybWF0QXJnczp7bGF0aXR1ZGUoZSx0KXtsZXQgbj1BaCgibGF0aXR1ZGUiLGUpO2lmKG4pcmV0dXJuIG47dC5sYXRpdHVkZT1lfSxsb25naXR1ZGUoZSx0KXtsZXQgbj1BaCgibG9uZ2l0dWRlIixlKTtpZihuKXJldHVybiBuO3QubG9uZ2l0dWRlPWV9LHNjYWxlKGUsdCl7ZT1NYXRoLmZsb29yKGUpLHQuc2NhbGU9ZT49NSYmZTw9MTg/ZToxOH19fSxJRT17bGF0aXR1ZGU6TnVtYmVyLGxvbmdpdHVkZTpOdW1iZXIsc2NhbGU6TnVtYmVyLG5hbWU6U3RyaW5nLGFkZHJlc3M6U3RyaW5nfSxORT0iY2hvb3NlSW1hZ2UiLGtFPXtmb3JtYXRBcmdzOntjb3VudChlLHQpeyghZXx8ZTw9MCkmJih0LmNvdW50PTkpfSxzaXplVHlwZShlLHQpe3Quc2l6ZVR5cGU9X3IoZSxFaSl9LHNvdXJjZVR5cGUoZSx0KXt0LnNvdXJjZVR5cGU9X3IoZSxYcil9LGV4dGVuc2lvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSYmZS5sZW5ndGg9PT0wKXJldHVybiJwYXJhbSBleHRlbnNpb24gc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2V8fCh0LmV4dGVuc2lvbj1bIioiXSl9fX0sUkU9e2NvdW50Ok51bWJlcixzaXplVHlwZTpbQXJyYXksU3RyaW5nXSxzb3VyY2VUeXBlOkFycmF5LGV4dGVuc2lvbjpBcnJheX0seEU9ImNob29zZVZpZGVvIixCRT17Zm9ybWF0QXJnczp7c291cmNlVHlwZShlLHQpe3Quc291cmNlVHlwZT1fcihlLFhyKX0sY29tcHJlc3NlZDohMCxtYXhEdXJhdGlvbjo2MCxjYW1lcmE6ImJhY2siLGV4dGVuc2lvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSYmZS5sZW5ndGg9PT0wKXJldHVybiJwYXJhbSBleHRlbnNpb24gc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2V8fCh0LmV4dGVuc2lvbj1bIioiXSl9fX0sTUU9e3NvdXJjZVR5cGU6QXJyYXksY29tcHJlc3NlZDpCb29sZWFuLG1heER1cmF0aW9uOk51bWJlcixjYW1lcmE6U3RyaW5nLGV4dGVuc2lvbjpBcnJheX0sTEU9ImdldEltYWdlSW5mbyIsREU9e2Zvcm1hdEFyZ3M6e3NyYyhlLHQpe3Quc3JjPUhlKGUpfX19LEZFPXtzcmM6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sVkU9InByZXZpZXdJbWFnZSIsVUU9e2Zvcm1hdEFyZ3M6e3VybHMoZSx0KXt0LnVybHM9ZS5tYXAobj0+ei5pc1N0cmluZyhuKSYmbj9IZShuKToiIil9LGN1cnJlbnQoZSx0KXt0eXBlb2YgZT09Im51bWJlciI/dC5jdXJyZW50PWU+MCYmZTx0LnVybHMubGVuZ3RoP2U6MDp6LmlzU3RyaW5nKGUpJiZlJiYodC5jdXJyZW50PUhlKGUpKX19fSwkRT17dXJsczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sY3VycmVudDp7dHlwZTpbTnVtYmVyLFN0cmluZ119fSxIRT0iY2xvc2VQcmV2aWV3SW1hZ2UiLGpFPSJnZXRWaWRlb0luZm8iLHpFPXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1IZShlKX19fSxXRT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEdFPSJzYXZlSW1hZ2VUb1Bob3Rvc0FsYnVtIixZRT17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPUhlKGUpfX19LHFFPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxKRT0ic2F2ZVZpZGVvVG9QaG90b3NBbGJ1bSIsS0U9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1IZShlKX19fSxaRT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sWEU9ImdldFJlY29yZGVyTWFuYWdlciIsUUU9ImNvbXByZXNzSW1hZ2UiLGV5PXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1IZShlKX19fSx0eT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LG55PSJjb21wcmVzc1ZpZGVvIixyeT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9SGUoZSl9fX0saXk9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHF1YWxpdHk6U3RyaW5nLGJpdHJhdGU6TnVtYmVyLGZwczpOdW1iZXIscmVzb2x1dGlvbjpOdW1iZXJ9LG95PSJyZXF1ZXN0IixheT17SlNPTjoianNvbiJ9LHN5PVsidGV4dCIsImFycmF5YnVmZmVyIl0sbHk9InRleHQiLE9oPWVuY29kZVVSSUNvbXBvbmVudDtmdW5jdGlvbiBjeShlLHQpe2xldCBuPWUuc3BsaXQoIiMiKSxyPW5bMV18fCIiO249blswXS5zcGxpdCgiPyIpO2xldCBvPW5bMV18fCIiO2U9blswXTtsZXQgYz1vLnNwbGl0KCImIikuZmlsdGVyKGI9PmIpLGc9e307Yy5mb3JFYWNoKGI9PntsZXQgVj1iLnNwbGl0KCI9Iik7Z1tWWzBdXT1WWzFdfSk7Zm9yKGxldCBiIGluIHQpaWYoei5oYXNPd24odCxiKSl7bGV0IFY9dFtiXTt0eXBlb2YgVj09InVuZGVmaW5lZCJ8fFY9PT1udWxsP1Y9IiI6ei5pc1BsYWluT2JqZWN0KFYpJiYoVj1KU09OLnN0cmluZ2lmeShWKSksZ1tPaChiKV09T2goVil9cmV0dXJuIG89T2JqZWN0LmtleXMoZykubWFwKGI9PmAke2J9PSR7Z1tiXX1gKS5qb2luKCImIiksZSsobz8iPyIrbzoiIikrKHI/IiMiK3I6IiIpfWxldCB1eT17bWV0aG9kOlN0cmluZyxkYXRhOltPYmplY3QsU3RyaW5nLEFycmF5LEFycmF5QnVmZmVyXSx1cmw6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxoZWFkZXI6T2JqZWN0LGRhdGFUeXBlOlN0cmluZyxyZXNwb25zZVR5cGU6U3RyaW5nLHdpdGhDcmVkZW50aWFsczpCb29sZWFufSxmeT17Zm9ybWF0QXJnczp7bWV0aG9kKGUsdCl7dC5tZXRob2Q9Q24oKGV8fCIiKS50b1VwcGVyQ2FzZSgpLG1yKX0sZGF0YShlLHQpe3QuZGF0YT1lfHwiIn0sdXJsKGUsdCl7dC5tZXRob2Q9PT1tclswXSYmei5pc1BsYWluT2JqZWN0KHQuZGF0YSkmJk9iamVjdC5rZXlzKHQuZGF0YSkubGVuZ3RoJiYodC51cmw9Y3koZSx0LmRhdGEpKX0saGVhZGVyKGUsdCl7bGV0IG49dC5oZWFkZXI9ZXx8e307dC5tZXRob2QhPT1tclswXSYmKE9iamVjdC5rZXlzKG4pLmZpbmQocj0+ci50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSIpfHwoblsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL2pzb24iKSl9LGRhdGFUeXBlKGUsdCl7dC5kYXRhVHlwZT0oZXx8YXkuSlNPTikudG9Mb3dlckNhc2UoKX0scmVzcG9uc2VUeXBlKGUsdCl7dC5yZXNwb25zZVR5cGU9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLHN5LmluZGV4T2YodC5yZXNwb25zZVR5cGUpPT09LTEmJih0LnJlc3BvbnNlVHlwZT1seSl9fX0sZHk9ImNvbmZpZ01UTFMiLGh5PXtjZXJ0aWZpY2F0ZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxneT17Zm9ybWF0QXJnczp7Y2VydGlmaWNhdGVzKGUpe2lmKGUuc29tZSh0PT56LnRvUmF3VHlwZSh0Lmhvc3QpIT09IlN0cmluZyIpKXJldHVybiJcdTUzQzJcdTY1NzBcdTkxNERcdTdGNkVcdTk1MTlcdThCRUZcdUZGMENcdThCRjdcdTc4NkVcdThCQTRcdTU0MEVcdTkxQ0RcdThCRDUifX19LHB5PSJkb3dubG9hZEZpbGUiLHZ5PXtmb3JtYXRBcmdzOntoZWFkZXIoZSx0KXt0LmhlYWRlcj1lfHx7fX19fSxteT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOk9iamVjdCx0aW1lb3V0Ok51bWJlcn0sX3k9InVwbG9hZEZpbGUiLGJ5PXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe2UmJih0LmZpbGVQYXRoPUhlKGUpKX0saGVhZGVyKGUsdCl7dC5oZWFkZXI9ZXx8e319LGZvcm1EYXRhKGUsdCl7dC5mb3JtRGF0YT1lfHx7fX19fSxFeT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZmlsZXM6QXJyYXksZmlsZVBhdGg6U3RyaW5nLG5hbWU6U3RyaW5nLGhlYWRlcjpPYmplY3QsZm9ybURhdGE6T2JqZWN0LHRpbWVvdXQ6TnVtYmVyfSx5eT0iY29ubmVjdFNvY2tldCIsU3k9e2Zvcm1hdEFyZ3M6e2hlYWRlcihlLHQpe3QuaGVhZGVyPWV8fHt9fSxtZXRob2QoZSx0KXt0Lm1ldGhvZD1DbigoZXx8IiIpLnRvVXBwZXJDYXNlKCksbXIpfSxwcm90b2NvbHMoZSx0KXt6LmlzU3RyaW5nKGUpJiYodC5wcm90b2NvbHM9W2VdKX19fSx3eT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOnt0eXBlOk9iamVjdH0sbWV0aG9kOlN0cmluZyxwcm90b2NvbHM6W0FycmF5LFN0cmluZ119LEN5PSJzZW5kU29ja2V0TWVzc2FnZSIsQXk9e2RhdGE6W1N0cmluZyxBcnJheUJ1ZmZlcl19LE95PSJjbG9zZVNvY2tldCIsVHk9e2NvZGU6TnVtYmVyLHJlYXNvbjpTdHJpbmd9LFB5PSJzdGFydExvY2F0aW9uVXBkYXRlIixUaD0ib25Mb2NhdGlvbkNoYW5nZSIsSXk9InN0b3BMb2NhdGlvblVwZGF0ZSIsTnk9Im9mZkxvY2F0aW9uQ2hhbmdlIixreT0ib2ZmTG9jYXRpb25DaGFuZ2VFcnJvciIsUGg9Im9uTG9jYXRpb25DaGFuZ2VFcnJvciIsSWg9WyJ3Z3M4NCIsImdjajAyIl0sUnk9e3R5cGU6U3RyaW5nfSx4eT17Zm9ybWF0QXJnczp7dHlwZShlLHQpe2U9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLEloLmluZGV4T2YoZSk9PT0tMT90LnR5cGU9SWhbMV06dC50eXBlPWV9fX07ZnVuY3Rpb24gQnkoZSl7aWYoIXouaXNTdHJpbmcoZSkpcmV0dXJuIGU7bGV0IHQ9ZS5pbmRleE9mKCI/Iik7aWYodD09PS0xKXJldHVybiBlO2xldCBuPWUuc2xpY2UodCsxKS50cmltKCkucmVwbGFjZSgvXihcP3wjfCYpLywiIik7aWYoIW4pcmV0dXJuIGU7ZT1lLnNsaWNlKDAsdCk7bGV0IHI9W107cmV0dXJuIG4uc3BsaXQoIiYiKS5mb3JFYWNoKG89PntsZXQgYz1vLnJlcGxhY2UoL1wrL2csIiAiKS5zcGxpdCgiPSIpLGc9Yy5zaGlmdCgpLGI9Yy5sZW5ndGg+MD9jLmpvaW4oIj0iKToiIjtyLnB1c2goZysiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpKX0pLHIubGVuZ3RoP2UrIj8iK3Iuam9pbigiJiIpOmV9bGV0IE15PVsic2xpZGUtaW4tcmlnaHQiLCJzbGlkZS1pbi1sZWZ0Iiwic2xpZGUtaW4tdG9wIiwic2xpZGUtaW4tYm90dG9tIiwiZmFkZS1pbiIsInpvb20tb3V0Iiwiem9vbS1mYWRlLW91dCIsInBvcC1pbiIsIm5vbmUiXSxMeT1bInNsaWRlLW91dC1yaWdodCIsInNsaWRlLW91dC1sZWZ0Iiwic2xpZGUtb3V0LXRvcCIsInNsaWRlLW91dC1ib3R0b20iLCJmYWRlLW91dCIsInpvb20taW4iLCJ6b29tLWZhZGUtaW4iLCJwb3Atb3V0Iiwibm9uZSJdLENsPXt1cmw6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sRnU9Im5hdmlnYXRlVG8iLFZ1PSJyZWRpcmVjdFRvIixOaD0icmVMYXVuY2giLFBjPSJzd2l0Y2hUYWIiLER5PSJuYXZpZ2F0ZUJhY2siLFV1PSJwcmVsb2FkUGFnZSIsa2g9InVuUHJlbG9hZFBhZ2UiLEZ5PXouZXh0ZW5kKHt9LENsLFJoKE15KSksVnk9ei5leHRlbmQoe2RlbHRhOnt0eXBlOk51bWJlcn19LFJoKEx5KSksVXk9Q2wsJHk9Q2wsSHk9Q2wsank9Q2wsenk9Q2wsV3k9TmMoRnUpLEd5PU5jKFZ1KSxZeT1OYyhOaCkscXk9TmMoUGMpLEp5PXtmb3JtYXRBcmdzOntkZWx0YShlLHQpe2U9cGFyc2VJbnQoZSsiIil8fDEsdC5kZWx0YT1NYXRoLm1pbihSbigpLmxlbmd0aC0xLGUpfX19O2Z1bmN0aW9uIFJoKGUpe3JldHVybnthbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3IodCl7aWYodCYmZS5pbmRleE9mKHQpPT09LTEpcmV0dXJuImAiK3QrImAgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGFuaW1hdGlvblR5cGVgIChzdXBwb3J0ZWQgdmFsdWVzIGFyZTogYCIrZS5qb2luKCJgfGAiKSsiYCkifX0sYW5pbWF0aW9uRHVyYXRpb246e3R5cGU6TnVtYmVyfX19bGV0IEljO2Z1bmN0aW9uIEt5KCl7SWM9IiJ9ZnVuY3Rpb24gTmMoZSl7cmV0dXJue2Zvcm1hdEFyZ3M6e3VybDpaeShlKX0sYmVmb3JlQWxsOkt5fX1mdW5jdGlvbiBaeShlKXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZighbilyZXR1cm4nTWlzc2luZyByZXF1aXJlZCBhcmdzOiAidXJsIic7bj14byhuKTtsZXQgbz1uLnNwbGl0KCI/IilbMF0sYz1LaShvLCEwKTtpZighYylyZXR1cm4icGFnZSBgIituKyJgIGlzIG5vdCBmb3VuZCI7aWYoZT09PUZ1fHxlPT09VnUpe2lmKGMubWV0YS5pc1RhYkJhcilyZXR1cm5gY2FuIG5vdCAke2V9IGEgdGFiYmFyIHBhZ2VgfWVsc2UgaWYoZT09PVBjJiYhYy5tZXRhLmlzVGFiQmFyKXJldHVybiJjYW4gbm90IHN3aXRjaCB0byBuby10YWJCYXIgcGFnZSI7aWYoKGU9PT1QY3x8ZT09PVV1KSYmYy5tZXRhLmlzVGFiQmFyJiZyLm9wZW5UeXBlIT09ImFwcExhdW5jaCImJihuPW8pLGMubWV0YS5pc0VudHJ5JiYobj1uLnJlcGxhY2UoYy5hbGlhcywiLyIpKSxyLnVybD1CeShuKSxlIT09a2gpe2lmKGU9PT1VdSl7aWYoIWMubWV0YS5pc05WdWUpcmV0dXJuImNhbiBub3QgcHJlbG9hZCB2dWUgcGFnZSI7aWYoYy5tZXRhLmlzVGFiQmFyKXtsZXQgZz1SbigpLGI9Yy5wYXRoLnNsaWNlKDEpO2lmKGcuZmluZChWPT5WLnJvdXRlPT09YikpcmV0dXJuInRhYkJhciBwYWdlIGAiK2IrImAgYWxyZWFkeSBleGlzdHMifXJldHVybn1pZihJYz09PW4mJnIub3BlblR5cGUhPT0iYXBwTGF1bmNoIilyZXR1cm5gJHtJY30gbG9ja2VkYDtSLnJlYWR5JiYoSWM9bil9fX1sZXQgWHk9ImhpZGVMb2FkaW5nIixReT0iaGlkZVRvYXN0Iix4aD0ibG9hZEZvbnRGYWNlIixlUz17ZmFtaWx5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc291cmNlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGVzYzpPYmplY3R9LHRTPVsiI2ZmZmZmZiIsIiMwMDAwMDAiXSxuUz0ic2V0TmF2aWdhdGlvbkJhckNvbG9yIixyUz17Zm9ybWF0QXJnczp7YW5pbWF0aW9uKGUsdCl7ZXx8KGU9e2R1cmF0aW9uOjAsdGltaW5nRnVuYzoibGluZWFyIn0pLHQuYW5pbWF0aW9uPXtkdXJhdGlvbjplLmR1cmF0aW9ufHwwLHRpbWluZ0Z1bmM6ZS50aW1pbmdGdW5jfHwibGluZWFyIn19fX0saVM9e2Zyb250Q29sb3I6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwLHZhbGlkYXRvcihlKXtpZih0Uy5pbmRleE9mKGUpPT09LTEpcmV0dXJuYGludmFsaWQgZnJvbnRDb2xvciAiJHtlfSJgfX0sYmFja2dyb3VuZENvbG9yOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sYW5pbWF0aW9uOk9iamVjdH0sb1M9InNldE5hdmlnYXRpb25CYXJUaXRsZSIsYVM9e3RpdGxlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHNTPSJzaG93TmF2aWdhdGlvbkJhckxvYWRpbmciLGxTPSJoaWRlTmF2aWdhdGlvbkJhckxvYWRpbmciLEJoPSJwYWdlU2Nyb2xsVG8iLGNTPXtzY3JvbGxUb3A6TnVtYmVyLHNlbGVjdG9yOlN0cmluZyxkdXJhdGlvbjpOdW1iZXJ9LHVTPXtmb3JtYXRBcmdzOntkdXJhdGlvbjozMDB9fSxmUz0ic2hvd0FjdGlvblNoZWV0IixkUz17aXRlbUxpc3Q6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LHRpdGxlOlN0cmluZyxpdGVtQ29sb3I6U3RyaW5nLHBvcG92ZXI6T2JqZWN0fSxoUz17Zm9ybWF0QXJnczp7aXRlbUNvbG9yOiIjMDAwIn19LGdTPSJzaG93TG9hZGluZyIscFM9e3RpdGxlOlN0cmluZyxtYXNrOkJvb2xlYW59LHZTPXtmb3JtYXRBcmdzOnt0aXRsZToiIixtYXNrOiExfX0sbVM9InNob3dNb2RhbCIsX1M9e3RpdGxlOlN0cmluZyxjb250ZW50OlN0cmluZyxzaG93Q2FuY2VsOkJvb2xlYW4sY2FuY2VsVGV4dDpTdHJpbmcsY2FuY2VsQ29sb3I6U3RyaW5nLGNvbmZpcm1UZXh0OlN0cmluZyxjb25maXJtQ29sb3I6U3RyaW5nfSxiUz17YmVmb3JlSW52b2tlKCl7b2UoKX0sZm9ybWF0QXJnczp7dGl0bGU6IiIsY29udGVudDoiIixwbGFjZWhvbGRlclRleHQ6IiIsc2hvd0NhbmNlbDohMCxlZGl0YWJsZTohMSxjYW5jZWxUZXh0KGUsdCl7aWYoIXouaGFzT3duKHQsImNhbmNlbFRleHQiKSl7bGV0e3Q6bn09Z3QoKTt0LmNhbmNlbFRleHQ9bigidW5pLnNob3dNb2RhbC5jYW5jZWwiKX19LGNhbmNlbENvbG9yOiIjMDAwIixjb25maXJtVGV4dChlLHQpe2lmKCF6Lmhhc093bih0LCJjb25maXJtVGV4dCIpKXtsZXR7dDpufT1ndCgpO3QuY29uZmlybVRleHQ9bigidW5pLnNob3dNb2RhbC5jb25maXJtIil9fSxjb25maXJtQ29sb3I6Sy5QUklNQVJZX0NPTE9SfX0sRVM9InNob3dUb2FzdCIseVM9WyJzdWNjZXNzIiwibG9hZGluZyIsIm5vbmUiLCJlcnJvciJdLFNTPXt0aXRsZTpTdHJpbmcsaWNvbjpTdHJpbmcsaW1hZ2U6U3RyaW5nLGR1cmF0aW9uOk51bWJlcixtYXNrOkJvb2xlYW59LHdTPXtmb3JtYXRBcmdzOnt0aXRsZToiIixpY29uKGUsdCl7dC5pY29uPUNuKGUseVMpfSxpbWFnZShlLHQpe2U/dC5pbWFnZT1IZShlKTp0LmltYWdlPSIifSxkdXJhdGlvbjoxNTAwLG1hc2s6ITF9fSxDUz0ic3RhcnRQdWxsRG93blJlZnJlc2giLEFTPSJzdG9wUHVsbERvd25SZWZyZXNoIixlYz17aW5kZXg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sVHM9e2JlZm9yZUludm9rZSgpe2xldCBlPWlzKCk7aWYoZSYmIWUuaXNUYWJCYXIpcmV0dXJuIm5vdCBUYWJCYXIgcGFnZSJ9LGZvcm1hdEFyZ3M6e2luZGV4KGUpe2lmKCFSLnRhYkJhci5saXN0W2VdKXJldHVybiJ0YWJiYXIgaXRlbSBub3QgZm91bmQifX19LE9TPSJzZXRUYWJCYXJJdGVtIixUUz16LmV4dGVuZCh7dGV4dDpTdHJpbmcsaWNvblBhdGg6U3RyaW5nLHNlbGVjdGVkSWNvblBhdGg6U3RyaW5nLHBhZ2VQYXRoOlN0cmluZ30sZWMpLFBTPXtiZWZvcmVJbnZva2U6VHMuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6ei5leHRlbmQoe3BhZ2VQYXRoKGUsdCl7ZSYmKHQucGFnZVBhdGg9Sy5yZW1vdmVMZWFkaW5nU2xhc2goZSkpfX0sVHMuZm9ybWF0QXJncyl9LElTPSJzZXRUYWJCYXJTdHlsZSIsTlM9e2NvbG9yOlN0cmluZyxzZWxlY3RlZENvbG9yOlN0cmluZyxiYWNrZ3JvdW5kQ29sb3I6U3RyaW5nLGJhY2tncm91bmRJbWFnZTpTdHJpbmcsYmFja2dyb3VuZFJlcGVhdDpTdHJpbmcsYm9yZGVyU3R5bGU6U3RyaW5nfSxrUz0vXihsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudFwoLis/XCk7PyQvLFJTPXtiZWZvcmVJbnZva2U6VHMuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6e2JhY2tncm91bmRJbWFnZShlLHQpe2UmJiFrUy50ZXN0KGUpJiYodC5iYWNrZ3JvdW5kSW1hZ2U9SGUoZSkpfSxib3JkZXJTdHlsZShlLHQpe2UmJih0LmJvcmRlclN0eWxlPWU9PT0id2hpdGUiPyJ3aGl0ZSI6ImJsYWNrIil9fX0seFM9ImhpZGVUYWJCYXIiLE1oPXthbmltYXRpb246Qm9vbGVhbn0sQlM9InNob3dUYWJCYXIiLE1TPU1oLExTPSJoaWRlVGFiQmFyUmVkRG90IixEUz1lYyxGUz1UcyxWUz0ic2hvd1RhYkJhclJlZERvdCIsVVM9ZWMsJFM9VHMsSFM9InJlbW92ZVRhYkJhckJhZGdlIixqUz1lYyx6Uz1UcyxXUz0ic2V0VGFiQmFyQmFkZ2UiLEdTPXouZXh0ZW5kKHt0ZXh0Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGVjKSxZUz17YmVmb3JlSW52b2tlOlRzLmJlZm9yZUludm9rZSxmb3JtYXRBcmdzOnouZXh0ZW5kKHt0ZXh0KGUsdCl7Sy5nZXRMZW4oZSk+PTQmJih0LnRleHQ9Ii4uLiIpfX0sVHMuZm9ybWF0QXJncyl9LHFTPSJnZXRQcm92aWRlciIsSlM9e3NlcnZpY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sS1M9ImxvZ2luIixaUz17cHJvdmlkZXI6U3RyaW5nLHNjb3BlczpbU3RyaW5nLEFycmF5XSx0aW1lb3V0Ok51bWJlcix1bml2ZXJpZnlTdHlsZTpPYmplY3Qsb25seUF1dGhvcml6ZTpCb29sZWFufSxYUz0iZ2V0VXNlckluZm8iLFFTPXtwcm92aWRlcjpTdHJpbmcsd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sdGltZW91dDpOdW1iZXIsbGFuZzpTdHJpbmd9LGV3PSJnZ2V0VXNlclByb2ZpbGVnZXRVc2VyUHJvZmlsZSIsdHc9e3Byb3ZpZGVyOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbix0aW1lb3V0Ok51bWJlcixsYW5nOlN0cmluZ30sbnc9InByZUxvZ2luIixydz17VU5JVkVSSUZZOiJ1bml2ZXJpZnkifSxpdz17Zm9ybWF0QXJnczp7cHJvdmlkZXIoZSx0KXtpZihPYmplY3QudmFsdWVzKHJ3KS5pbmRleE9mKFN0cmluZyhlKSk8MClyZXR1cm4icHJvdmlkZXIgZXJyb3IifX19LG93PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxhdz0iY2xvc2VBdXRoVmlldyIsc3c9ImdldENoZWNrQm94U3RhdGUiLGx3PSJnZXRVbml2ZXJpZnlNYW5hZ2VyIixjdz0ic2hhcmUiLExoPVsiV1hTY2VuZVNlc3Npb24iLCJXWFNjZW5lVGltZWxpbmUiLCJXWFNjZW5lRmF2b3JpdGUiXSx1dz17Zm9ybWF0QXJnczp7c2NlbmUoZSx0KXtsZXR7cHJvdmlkZXI6bixvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpyfT10O2lmKG49PT0id2VpeGluIiYmIXImJighZXx8IUxoLmluY2x1ZGVzKGUpKSlyZXR1cm5gXHU1MjA2XHU0RUFCXHU1MjMwXHU1RkFFXHU0RkUxXHU2NUY2XHVGRjBDc2NlbmVcdTVGQzVcdTk4N0JcdTRFM0FcdTRFRTVcdTRFMEJcdTUxNzZcdTRFMkRcdTRFMDBcdTRFMkFcdUZGMUEke0xoLmpvaW4oIlx1MzAwMSIpfWB9LHN1bW1hcnkoZSx0KXtpZih0LnR5cGU9PT0xJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU3RUFGXHU2NTg3XHU2NzJDXHU2NUY2XHVGRjBDc3VtbWFyeVx1NUZDNVx1NTg2QiJ9LGhyZWYoZSx0KXtpZih0LnR5cGU9PT0wJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1NkZFXHU2NTg3XHU2NUY2XHVGRjBDaHJlZlx1NUZDNVx1NTg2QiJ9LGltYWdlVXJsKGUsdCl7aWYoWzAsMiw1XS5pbmNsdWRlcyhOdW1iZXIodC50eXBlKSkmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTU2RkVcdTY1ODdcdTMwMDFcdTdFQUZcdTU2RkVcdTcyNDdcdTMwMDFcdTVDMEZcdTdBMEJcdTVFOEZcdTY1RjZcdUZGMENpbWFnZVVybFx1NUZDNVx1NTg2Qlx1RkYwQ1x1NjNBOFx1ODM1MFx1NEY3Rlx1NzUyOFx1NUMwRlx1NEU4RTIwS2JcdTc2ODRcdTU2RkVcdTcyNDcifSxtZWRpYVVybChlLHQpe2lmKFszLDRdLmluY2x1ZGVzKE51bWJlcih0LnR5cGUpKSYmIWUpcmV0dXJuIlx1NTIwNlx1NEVBQlx1OTdGM1x1NEU1MFx1MzAwMVx1ODlDNlx1OTg5MVx1NjVGNlx1RkYwQ21lZGlhVXJsXHU1RkM1XHU1ODZCIn0sbWluaVByb2dyYW0oZSx0KXtpZih0LnR5cGU9PT01JiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1QzBGXHU3QTBCXHU1RThGXHU2NUY2XHVGRjBDbWluaVByb2dyYW1cdTVGQzVcdTU4NkIifSxjb3JwaWQoZSx0KXtpZih0Lm9wZW5DdXN0b21lclNlcnZpY2VDaGF0JiYhZSlyZXR1cm4iXHU0RjdGXHU3NTI4XHU2MjUzXHU1RjAwXHU1QkEyXHU2NzBEXHU1MjlGXHU4MEZEXHU2NUY2IGNvcnBpZCBcdTVGQzVcdTU4NkIifSxjdXN0b21lclVybChlLHQpe2lmKHQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQmJiFlKXJldHVybiJcdTRGN0ZcdTc1MjhcdTYyNTNcdTVGMDBcdTVCQTJcdTY3MERcdTUyOUZcdTgwRkRcdTY1RjYgY3VzdG9tZXJVcmwgXHU1RkM1XHU1ODZCIn19fSxmdz17cHJvdmlkZXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx0eXBlOk51bWJlcix0aXRsZTpTdHJpbmcsc2NlbmU6U3RyaW5nLHN1bW1hcnk6U3RyaW5nLGhyZWY6U3RyaW5nLGltYWdlVXJsOlN0cmluZyxtZWRpYVVybDpTdHJpbmcsbWluaVByb2dyYW06T2JqZWN0fSxkdz0ic2hhcmVXaXRoU3lzdGVtIixEaD1bInRleHQiLCJpbWFnZSJdLGh3PXtmb3JtYXRBcmdzOnt0eXBlKGUsdCl7aWYoZSYmIURoLmluY2x1ZGVzKGUpKXJldHVybiJcdTUyMDZcdTRFQUJcdTUzQzJcdTY1NzAgdHlwZSBcdTRFMERcdTZCNjNcdTc4NkVcdTMwMDJcdTUzRUFcdTY1MkZcdTYzMDF0ZXh0XHUzMDAxaW1hZ2UiO3QudHlwZT1DbihlLERoKX19fSxndz17dHlwZTpTdHJpbmcsc3VtbWFyeTpTdHJpbmcsaHJlZjpTdHJpbmcsaW1hZ2VVcmw6U3RyaW5nfSxwdz0icmVxdWVzdFBheW1lbnQiLHZ3PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LG9yZGVySW5mbzp7dHlwZTpbU3RyaW5nLE9iamVjdF0scmVxdWlyZWQ6ITB9LHRpbWVTdGFtcDpTdHJpbmcsbm9uY2VTdHI6U3RyaW5nLHBhY2thZ2U6U3RyaW5nLHNpZ25UeXBlOlN0cmluZyxwYXlTaWduOlN0cmluZ30sbXc9ImNyZWF0ZVB1c2hNZXNzYWdlIixfdz17Zm9ybWF0QXJnczp7Y29udGVudChlKXtpZighZSlyZXR1cm4iY29udGVudCBpcyByZXF1aXJlZCJ9fX0sYnc9ImdldENoYW5uZWxNYW5hZ2VyIixFdz0iY3JlYXRlUmV3YXJkZWRWaWRlb0FkIix5dz17Zm9ybWF0QXJnczp7YWRwaWQ6IiIsYWRVbml0SWQ6IiJ9fSxTdz17YWRwaWQ6U3RyaW5nLGFkVW5pdElkOlN0cmluZ30sd3c9ImNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0FkIixDdz17Zm9ybWF0QXJnczp7YWRwaWQ6IiJ9fSxBdz17YWRwaWQ6U3RyaW5nfSxPdz0iY3JlYXRlSW50ZXJzdGl0aWFsQWQiLFR3PXtmb3JtYXRBcmdzOnthZHBpZDoiIixhZFVuaXRJZDoiIn19LFB3PXthZHBpZDpTdHJpbmcsYWRVbml0SWQ6U3RyaW5nfSxJdz0iY3JlYXRlSW50ZXJhY3RpdmVBZCIsTnc9e2Zvcm1hdEFyZ3M6e2FkcGlkKGUsdCl7aWYoIWUpcmV0dXJuImFkcGlkIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlJiYodC5hZHBpZD1lKX0scHJvdmlkZXIoZSx0KXtpZighZSlyZXR1cm4icHJvdmlkZXIgc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2UmJih0LnByb3ZpZGVyPWUpfX19LGt3PXthZHBpZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHByb3ZpZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19O2Z1bmN0aW9uIFhzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2RlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSx6LmlzRnVuY3Rpb24odCkmJihyPXQocikpLGUocil9fWZ1bmN0aW9uIHByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3I9cnx8e30sdD1yLm1lc3NhZ2V8fHR8fCIiLGRlbGV0ZSByLm1lc3NhZ2UsZSh0LHouZXh0ZW5kKHtjb2RlOjB9LHIpKX19ZnVuY3Rpb24gQWwoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlKCkoZnVuY3Rpb24ocil7ciYmKGRlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSksb3QuaW52b2tlT25DYWxsYmFjayh0LHIpfSl9fWZ1bmN0aW9uIG1pKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocix7cmVzb2x2ZTpvLHJlamVjdDpjfSl7ZSgpKHouZXh0ZW5kKHt9LHouaXNGdW5jdGlvbih0KT90KHIpOnIse3N1Y2Nlc3M6WHMobyxuKSxmYWlsOnByKGMpfSkpfX1mdW5jdGlvbiB0YyhlPSIiKXtpZighKFIudGFiQmFyJiZ6LmlzQXJyYXkoUi50YWJCYXIubGlzdCkpKXJldHVybiExO3RyeXtpZighZSl7bGV0IG49Um4oKTtpZighbi5sZW5ndGgpcmV0dXJuITE7bGV0IHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gcj9yLiRwYWdlLm1ldGEuaXNUYWJCYXI6ITF9L15cLy8udGVzdChlKXx8KGU9Sy5hZGRMZWFkaW5nU2xhc2goZSkpO2xldCB0PUtpKGUpO3JldHVybiB0JiZ0Lm1ldGEuaXNUYWJCYXJ9Y2F0Y2godCl7fXJldHVybiExfWxldCBFYT0iX19UWVBFIixSdz0idW5pLXN0b3JhZ2Uta2V5cyI7ZnVuY3Rpb24gJHUoZSl7bGV0IHQ9WyJvYmplY3QiLCJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIiwidW5kZWZpbmVkIl07dHJ5e2xldCBuPXouaXNTdHJpbmcoZSk/SlNPTi5wYXJzZShlKTplLHI9bi50eXBlO2lmKHQuaW5kZXhPZihyKT49MCl7bGV0IG89T2JqZWN0LmtleXMobik7aWYoby5sZW5ndGg9PT0yJiYiZGF0YSJpbiBuKXtpZih0eXBlb2Ygbi5kYXRhPT09cilyZXR1cm4gbi5kYXRhO2lmKHI9PT0ib2JqZWN0IiYmL15cZHs0fS1cZHsyfS1cZHsyfVRcZHsyfVw6XGR7Mn1cOlxkezJ9XC5cZHszfVokLy50ZXN0KG4uZGF0YSkpcmV0dXJuIG5ldyBEYXRlKG4uZGF0YSl9ZWxzZSBpZihvLmxlbmd0aD09PTEpcmV0dXJuIiJ9fWNhdGNoKG4pe319bGV0IHh3PUx0KGVFLChlLHQpPT57bGV0IG49dHlwZW9mIHQscj1uPT09InN0cmluZyI/dDpKU09OLnN0cmluZ2lmeSh7dHlwZTpuLGRhdGE6dH0pO3RyeXtuPT09InN0cmluZyImJiR1KHIpIT09dm9pZCAwP3Muc3RvcmFnZS5zZXRJdGVtKGUrRWEsbik6cy5zdG9yYWdlLnJlbW92ZUl0ZW0oZStFYSkscy5zdG9yYWdlLnNldEl0ZW0oZSxyKX1jYXRjaChvKXt9fSx0RSksQnc9RWUoWDAsKHtrZXk6ZSxkYXRhOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBvPXR5cGVvZiB0LGM9bz09PSJzdHJpbmciP3Q6SlNPTi5zdHJpbmdpZnkoe3R5cGU6byxkYXRhOnR9KTt0cnl7bGV0IGc9cy5zdG9yYWdlO289PT0ic3RyaW5nIiYmJHUoYykhPT12b2lkIDA/Zy5zZXRJdGVtQXN5bmMoZStFYSxvLCgpPT57fSk6Zy5yZW1vdmVJdGVtQXN5bmMoZStFYSwoKT0+e30pLGcuc2V0SXRlbUFzeW5jKGUsYyxuLHByKHIpKX1jYXRjaChnKXtyKGcubWVzc2FnZSl9fSxRMCk7ZnVuY3Rpb24gSHUoZSx0KXtsZXQgbj10O2lmKGUhPT0ic3RyaW5nInx8ZT09PSJzdHJpbmciJiZ0PT09J3sidHlwZSI6InVuZGVmaW5lZCJ9Jyl0cnl7bGV0IHI9SlNPTi5wYXJzZSh0KSxvPSR1KHIpO2lmKG8hPT12b2lkIDApbj1vO2Vsc2UgaWYoZSYmKG49cix6LmlzU3RyaW5nKHIpKSl7cj1KU09OLnBhcnNlKHIpO2xldCBjPXR5cGVvZiByO2M9PT0ibnVtYmVyIiYmZT09PSJkYXRlIj9uPW5ldyBEYXRlKHIpOmM9PT0oWyJudWxsIiwiYXJyYXkiXS5pbmRleE9mKGUpPDA/ZToib2JqZWN0IikmJihuPXIpfX1jYXRjaChyKXt9cmV0dXJuIG59bGV0IE13PUx0KFowLGU9PntsZXQgdD1zLnN0b3JhZ2UuZ2V0SXRlbShlKSxyPShzLnN0b3JhZ2UuZ2V0SXRlbShlK0VhKXx8IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHouaXNTdHJpbmcodCk/SHUocix0KToiIn0sU2gpLEx3PUVlKEswLCh7a2V5OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXMuc3RvcmFnZTtyLmdldEl0ZW1Bc3luYyhlLGZ1bmN0aW9uKG8pe3IuZ2V0SXRlbUFzeW5jKGUrRWEsZnVuY3Rpb24oYyl7bGV0IGI9KGMuZGF0YXx8IiIpLnRvTG93ZXJDYXNlKCk7dCh7ZGF0YTpIdShiLG8uZGF0YSl9KX0sZnVuY3Rpb24oKXt0KHtkYXRhOkh1KCIiLG8uZGF0YSl9KX0pfSxwcihuKSl9LHloKSxEdz1MdCh3aCxlPT57cy5zdG9yYWdlLnJlbW92ZUl0ZW0oZStFYSkscy5zdG9yYWdlLnJlbW92ZUl0ZW0oZSl9LHJFKSxGdz1FZSh3aCwoe2tleTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLnN0b3JhZ2UucmVtb3ZlSXRlbUFzeW5jKGUrRWEsKCk9Pnt9KSxzLnN0b3JhZ2UucmVtb3ZlSXRlbUFzeW5jKGUsdCxwcihuKSl9LG5FKSxWdz1MdCgiY2xlYXJTdG9yYWdlU3luYyIsKCk9PntzLnN0b3JhZ2UuY2xlYXIoKX0pLFV3PUVlKCJjbGVhclN0b3JhZ2UiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3Muc3RvcmFnZS5jbGVhckFzeW5jKHQscHIobikpfSksRmg9THQoImdldFN0b3JhZ2VJbmZvU3luYyIsKCk9PntsZXQgZT1zLnN0b3JhZ2UuZ2V0TGVuZ3RoKCl8fDAsdD1bXSxuPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89cy5zdG9yYWdlLmtleShyKTtpZihvIT09UncmJihvLmluZGV4T2YoRWEpPDB8fG8uaW5kZXhPZihFYSkrRWEubGVuZ3RoIT09by5sZW5ndGgpKXtsZXQgYz1zLnN0b3JhZ2UuZ2V0SXRlbShvKTtuKz1vLmxlbmd0aCtjLmxlbmd0aCx0LnB1c2gobyl9fXJldHVybntrZXlzOnQsY3VycmVudFNpemU6TWF0aC5jZWlsKG4qMi8xMDI0KSxsaW1pdFNpemU6TnVtYmVyLk1BWF9WQUxVRX19KSwkdz1FZSgiZ2V0U3RvcmFnZUluZm8iLChlLHtyZXNvbHZlOnR9KT0+e3QoRmgoKSl9KSxIdz1FZShmRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmlvLmdldEZpbGVJbmZvKHouZXh0ZW5kKGUse3N1Y2Nlc3M6WHModCksZmFpbDpwcihuKX0pKX0saEUsZEUpLGp3PTAsVmg9InVuaWFwcF9zYXZlIix6dz1gX2RvYy8ke1ZofWA7ZnVuY3Rpb24gV3coZSx0KXt0PXR8fGZ1bmN0aW9uKCl7fSxzLmlvLnJlcXVlc3RGaWxlU3lzdGVtKHMuaW8uUFJJVkFURV9ET0Msbj0+e24ucm9vdC5nZXREaXJlY3RvcnkoVmgse2NyZWF0ZTohMH0sZSx0KX0sdCl9bGV0IEd3PUVlKGlFLCh7dGVtcEZpbGVQYXRoOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXByKG4pLG89YCR7RGF0ZS5ub3coKX0ke2p3Kyt9JHtZYShlKX1gO3MuaW8ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChlLGM9PntXdyhnPT57Yy5jb3B5VG8oZyxvLCgpPT57bGV0IGI9encrIi8iK287dCh7c2F2ZWRGaWxlUGF0aDpifSl9LHIpfSxyKX0scil9LGFFLG9FKSxZdz0idW5pYXBwX3NhdmUiO2Z1bmN0aW9uIHF3KGUsdCl7dD10fHxmdW5jdGlvbigpe30scy5pby5yZXF1ZXN0RmlsZVN5c3RlbShzLmlvLlBSSVZBVEVfRE9DLG49PntuLnJvb3QuZ2V0RGlyZWN0b3J5KFl3LHtjcmVhdGU6ITB9LGUsdCl9LHQpfWxldCBKdz1FZShzRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1wcihuKTtxdyhvPT57dmFyIGM9by5jcmVhdGVSZWFkZXIoKSxnPVtdO2MucmVhZEVudHJpZXMoYj0+e2ImJmIubGVuZ3RoP2IuZm9yRWFjaChWPT57Vi5nZXRNZXRhZGF0YShUPT57Zy5wdXNoKHtmaWxlUGF0aDpzLmlvLmNvbnZlcnRBYnNvbHV0ZUZpbGVTeXN0ZW0oVi5mdWxsUGF0aCksY3JlYXRlVGltZTpULm1vZGlmaWNhdGlvblRpbWUuZ2V0VGltZSgpLHNpemU6VC5zaXplfSksZy5sZW5ndGg9PT1iLmxlbmd0aCYmdCh7ZmlsZUxpc3Q6Z30pfSxyLCExKX0pOnQoe2ZpbGVMaXN0Omd9KX0scil9LHIpfSksS3c9RWUoZ0UsKHtmaWxlUGF0aDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1wcihuKTtzLmlvLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZSxvPT57by5nZXRNZXRhZGF0YShjPT57dCh7Y3JlYXRlVGltZTpjLm1vZGlmaWNhdGlvblRpbWUuZ2V0VGltZSgpLHNpemU6Yy5zaXplfSl9LHIsITEpfSxyKX0sdkUscEUpLFp3PUVlKGxFLCh7ZmlsZVBhdGg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9cHIobik7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsbz0+e28ucmVtb3ZlKCgpPT57dCgpfSxyKX0scil9LHVFLGNFKSxYdz1FZShtRSwoe2ZpbGVQYXRoOmUsZmlsZVR5cGU6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57bGV0IG89cHIocik7cy5ydW50aW1lLm9wZW5Eb2N1bWVudChIZShlKSx2b2lkIDAsbixvKX0sYkUsX0UpLFF3PUx0KFViLGU9PiEhei5oYXNPd24oUCxlKSwkYiksbmMsVWg9cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU7ZnVuY3Rpb24gZUMoZSl7VWg9ZX1mdW5jdGlvbiAkaChlKXtuYz1lLFVoKGUpfXMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlPSRoO2Z1bmN0aW9uIEJhKGUpe2lmKCFlKXtsZXQgdD1BaSgpO2lmKCF0fHwoZT10LiRwYWdlLnN0YXR1c0JhclN0eWxlLCFlfHxlPT09bmMpKXJldHVybn1lIT09bmMmJihuYz1lLHMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKGUpKX1mdW5jdGlvbiBIaChlKXtvdC5vbihLLk9OX1RIRU1FX0NIQU5HRSxlKX1mdW5jdGlvbiB0QyhlKXtvdC5vZmYoSy5PTl9USEVNRV9DSEFOR0UsZSl9ZnVuY3Rpb24gbkMoKXtyZXR1cm4gamgoKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIn1mdW5jdGlvbiBqaCgpe3JldHVybiBzLm5hdmlnYXRvci5nZXRVSVN0eWxlKCl9ZnVuY3Rpb24gckMoKXtpZihSLmRhcmttb2RlKXtsZXQgZT1uQygpO0JhKGUpLEduKCkuZm9yRWFjaChuPT57bi4kcGFnZS5zdGF0dXNCYXJTdHlsZT1lfSl9fWZ1bmN0aW9uIGp1KGUpe2lmKFIuZGFya21vZGUpe2xldCB0PXt9LG49cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpLHI9aWMoKTtyZXR1cm4gciYmci5ob3N0VGhlbWUmJihuPXIuaG9zdFRoZW1lKSx0PUsubm9ybWFsaXplU3R5bGVzKGUsUi50aGVtZUNvbmZpZyxuKSx0fXJldHVybiBlfWZ1bmN0aW9uIGlDKGUsdCl7aWYoUi5kYXJrbW9kZSl7bGV0IG49KCk9PntsZXR7bGlzdDpyPVtdLGNvbG9yOm8sc2VsZWN0ZWRDb2xvcjpjLGJhY2tncm91bmRDb2xvcjpnLGJvcmRlclN0eWxlOmJ9PWp1KHQpO2UmJmUuc2V0VGFiQmFyU3R5bGUoe2NvbG9yOm8sc2VsZWN0ZWRDb2xvcjpjLGJhY2tncm91bmRDb2xvcjpnLGJvcmRlclN0eWxlOmJ9KSxlJiZlLnNldFRhYkJhckl0ZW1zKHtsaXN0OnIubWFwKFY9Pih7aWNvblBhdGg6Vi5pY29uUGF0aCxzZWxlY3RlZEljb25QYXRoOlYuc2VsZWN0ZWRJY29uUGF0aCx2aXNpYmxlOlYudmlzaWJsZX0pKX0pfTtuKCksSGgobil9fWZ1bmN0aW9uIHpoKGUsdCl7aWYoUi5kYXJrbW9kZSl7bGV0IG49KCk9PntsZXQgcj10KCk7ci5hbmltYXRpb25BbHBoYUJHQ29sb3Isci5iYWNrZ3JvdW5kLHIuYmFja2dyb3VuZENvbG9yQm90dG9tLHIuYmFja2dyb3VuZENvbG9yVG9wO3ZhciBvPXIudGl0bGVOVmlldzt0eXBlb2YgbyE9InVuZGVmaW5lZCImJnR5cGVvZiBvPT0ib2JqZWN0IiYmKG8uYmFja2dyb3VuZENvbG9yLG8udGl0bGVDb2xvciksZSYmZS5zZXRTdHlsZShyKX07SGgobiksZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PnRDKG4pKX19bGV0IHJjLHp1PSEwLG9yO2Z1bmN0aW9uIG9DKGUsdCxuKXshb3J8fChlPT09Im5vbmUiPyhvci5oaWRlVGFiQmFyUmVkRG90KHtpbmRleDp0fSksb3IucmVtb3ZlVGFiQmFyQmFkZ2Uoe2luZGV4OnR9KSk6ZT09PSJ0ZXh0Ij9vci5zZXRUYWJCYXJCYWRnZSh7aW5kZXg6dCx0ZXh0Om59KTplPT09InJlZERvdCImJm9yLnNob3dUYWJCYXJSZWREb3Qoe2luZGV4OnR9KSl9ZnVuY3Rpb24gYUMoZSl7b3ImJm9yLnNldFRhYkJhckl0ZW1zKGUpfWZ1bmN0aW9uIHNDKGUsdCxuLHIsbyxjKXtsZXQgZz17aW5kZXg6ZX07aWYodCE9PXZvaWQgMCYmKGcudGV4dD10KSxuJiYoZy5pY29uUGF0aD1IZShuKSksciYmKGcuc2VsZWN0ZWRJY29uUGF0aD1IZShyKSksYyE9PXZvaWQgMCYmKGcuaWNvbmZvbnQ9YyksbyE9PXZvaWQgMCl7Zy52aXNpYmxlPXJjLmxpc3RbZV0udmlzaWJsZT1vLGRlbGV0ZSBnLmluZGV4O2xldCBiPXJjLmxpc3QubWFwKFY9Pih7dmlzaWJsZTpWLnZpc2libGV9KSk7YltlXT1nLGFDKHtsaXN0OmJ9KX1lbHNlIG9yJiZvci5zZXRUYWJCYXJJdGVtKGcpfWZ1bmN0aW9uIGxDKGUpe29yJiZvci5zZXRUYWJCYXJTdHlsZShlKX1mdW5jdGlvbiBjQyhlKXt6dT0hMSxvciYmb3IuaGlkZVRhYkJhcih7YW5pbWF0aW9uOmV9KX1mdW5jdGlvbiB1QyhlKXt6dT0hMCxvciYmb3Iuc2hvd1RhYkJhcih7YW5pbWF0aW9uOmV9KX1sZXQga2M9W107dmFyIF9pPXtpZDoiMCIsaW5pdChlLHQpe2UmJmUubGlzdC5sZW5ndGgmJihyYz1lKTt0cnl7b3I9Zi5yZXF1aXJlTW9kdWxlKCJ1bmktdGFidmlldyIpfWNhdGNoKG4pe2NvbnNvbGUubG9nKGB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbigidW5pLXRhYnZpZXciKSBlcnJvciAke259YCl9b3Iub25NYXNrQ2xpY2soKCk9PntrYy5mb3JFYWNoKG49PntuKCl9KX0pLG9yJiZvci5vbkNsaWNrKCh7aW5kZXg6bn0pPT57dChyYy5saXN0W25dLG4pfSksb3ImJm9yLm9uTWlkQnV0dG9uQ2xpY2soKCk9Pm90Lmludm9rZU9uQ2FsbGJhY2sob2gpKSxpQyhvcixlKX0saW5kZXhPZihlKXtsZXQgdD10aGlzLmNvbmZpZyxuPXQmJnQubGlzdCYmdC5saXN0Lmxlbmd0aDtpZihuKXtmb3IobGV0IHI9MDtyPG47cisrKWlmKHQubGlzdFtyXS5wYWdlUGF0aD09PWV8fHQubGlzdFtyXS5wYWdlUGF0aD09PWAke2V9Lmh0bWxgKXJldHVybiByfXJldHVybi0xfSxzd2l0Y2hUYWIoZSl7bGV0IHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0Pj0wPyhvciYmb3Iuc3dpdGNoU2VsZWN0KHtpbmRleDp0fSksITApOiExfSxzZXRUYWJCYXJCYWRnZTpvQyxzZXRUYWJCYXJJdGVtOnNDLHNldFRhYkJhclN0eWxlOmxDLGhpZGVUYWJCYXI6Y0Msc2hvd1RhYkJhcjp1QyxhcHBlbmQoZSl7b3ImJm9yLmFwcGVuZCh7aWQ6ZS5pZH0sKHtjb2RlOnR9KT0+e3QhPT0wJiZOKCgpPT57dGhpcy5hcHBlbmQoZSl9LDIwKX0pfSxnZXQgY29uZmlnKCl7cmV0dXJuIHJjfHxSLnRhYkJhcn0sZ2V0IHZpc2libGUoKXtyZXR1cm4genV9LGdldCBoZWlnaHQoKXtsZXQgZT10aGlzLmNvbmZpZztyZXR1cm4oZSYmZS5oZWlnaHQ/cGFyc2VGbG9hdChlLmhlaWdodCk6Sy5UQUJCQVJfSEVJR0hUKStzLm5hdmlnYXRvci5nZXRTYWZlQXJlYUluc2V0cygpLmRldmljZUJvdHRvbX0sZ2V0IGNvdmVyKCl7bGV0IGU9dGhpcy5jb25maWc7cmV0dXJuIGUmJlsiZXh0cmFsaWdodCIsImxpZ2h0IiwiZGFyayJdLmluZGV4T2YoZS5ibHVyRWZmZWN0KT49MH0sc2V0U3R5bGUoe21hc2s6ZX0pe29yLnNldE1hc2soe2NvbG9yOmV9KX0sYWRkRXZlbnRMaXN0ZW5lcihlLHQpe2tjLnB1c2godCl9LHJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KXtsZXQgbj1rYy5pbmRleE9mKHQpO2tjLnNwbGljZShuLDEpfX07ZnVuY3Rpb24gUmMoKXtsZXQgZT1BaSgpO3JldHVybiBlP2UuJGdldEFwcFdlYnZpZXcoKTpudWxsfWZ1bmN0aW9uIFdoKGUpe3JldHVybiBlP2UuJGdldEFwcFdlYnZpZXcoKTpSYygpfWxldCBHaD1udWxsO2Z1bmN0aW9uIFloKCl7cmV0dXJuIEdofWZ1bmN0aW9uIFd1KGUpe0doPWV9ZnVuY3Rpb24gR3UoKXtyZXR1cm4gcy5uYXZpZ2F0b3IuaXNJbW1lcnNlZFN0YXR1c2JhcigpP01hdGgucm91bmQocy5vcy5uYW1lPT09ImlPUyI/cy5uYXZpZ2F0b3IuZ2V0U2FmZUFyZWFJbnNldHMoKS50b3A6cy5uYXZpZ2F0b3IuZ2V0U3RhdHVzYmFySGVpZ2h0KCkpOjB9ZnVuY3Rpb24gcWgoKXtsZXQgZT1zLm5hdmlnYXRvci5nZXRTdGF0dXNCYXJTdHlsZSgpO3JldHVybiBlPT09IlVJU3RhdHVzQmFyU3R5bGVCbGFja1RyYW5zbHVjZW50Inx8ZT09PSJVSVN0YXR1c0JhclN0eWxlQmxhY2tPcGFxdWUifHxlPT09Im51bGwiP2U9ImxpZ2h0IjplPT09IlVJU3RhdHVzQmFyU3R5bGVEZWZhdWx0IiYmKGU9ImRhcmsiKSxlfWZ1bmN0aW9uIGZDKCl7bGV0e3Jlc29sdXRpb25XaWR0aDplLHJlc29sdXRpb25IZWlnaHQ6dH09cy5zY3JlZW4uZ2V0Q3VycmVudFNpemUoKXx8e3Jlc29sdXRpb25XaWR0aDowLHJlc29sdXRpb25IZWlnaHQ6MH07cmV0dXJue3NjcmVlbldpZHRoOk1hdGgucm91bmQoZSksc2NyZWVuSGVpZ2h0Ok1hdGgucm91bmQodCl9fWxldCBKaD1MdCgiZ2V0V2luZG93SW5mbyIsKCk9PntsZXQgZT1zLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJpb3MiLHtzY3JlZW5XaWR0aDp0LHNjcmVlbkhlaWdodDpufT1mQygpLHI9R3UoKSxvLGM9e2hlaWdodDowLGNvdmVyOiExfSxnPVJjKCk7aWYoZyl7bGV0IGZ0PWcuZ2V0U3R5bGUoKSxodD1mdCYmZnQudGl0bGVOVmlldztodCYmaHQudHlwZSYmaHQudHlwZSE9PSJub25lIiYmKGMuaGVpZ2h0PWh0LnR5cGU9PT0idHJhbnNwYXJlbnQiPzA6citLLk5BVkJBUl9IRUlHSFQsYy5jb3Zlcj1odC50eXBlPT09InRyYW5zcGFyZW50Inx8aHQudHlwZT09PSJmbG9hdCIpLG89Zy5nZXRTYWZlQXJlYUluc2V0cygpfWVsc2Ugbz1zLm5hdmlnYXRvci5nZXRTYWZlQXJlYUluc2V0cygpO2xldCBiPXtoZWlnaHQ6MCxjb3ZlcjohMX07dGMoKSYmKGIuaGVpZ2h0PV9pLnZpc2libGU/X2kuaGVpZ2h0OjAsYi5jb3Zlcj1faS5jb3Zlcik7bGV0IFY9Yy5jb3Zlcj9jLmhlaWdodDowLFQ9Yi5jb3Zlcj9iLmhlaWdodDowLEQ9bi1jLmhlaWdodC1iLmhlaWdodCx2ZT1uLShjLmNvdmVyPzA6Yy5oZWlnaHQpLShiLmNvdmVyPzA6Yi5oZWlnaHQpLHllPXQ7KCFiLmhlaWdodHx8Yi5jb3ZlcikmJiFvLmJvdHRvbSYmby5kZXZpY2VCb3R0b20mJihELT1vLmRldmljZUJvdHRvbSx2ZS09by5kZXZpY2VCb3R0b20pLG89ZT9vOntsZWZ0OjAscmlnaHQ6MCx0b3A6Yy5oZWlnaHQmJiFjLmNvdmVyPzA6cixib3R0b206MH07bGV0IE9lPXtsZWZ0Om8ubGVmdCxyaWdodDp5ZS1vLnJpZ2h0LHRvcDpvLnRvcCxib3R0b206dmUtby5ib3R0b20sd2lkdGg6eWUtby5sZWZ0LW8ucmlnaHQsaGVpZ2h0OnZlLW8udG9wLW8uYm90dG9tfTtyZXR1cm57cGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSxzY3JlZW5XaWR0aDp0LHNjcmVlbkhlaWdodDpuLHdpbmRvd1dpZHRoOnllLHdpbmRvd0hlaWdodDpELHN0YXR1c0JhckhlaWdodDpyLHNhZmVBcmVhOk9lLHNhZmVBcmVhSW5zZXRzOnt0b3A6by50b3AscmlnaHQ6by5yaWdodCxib3R0b206by5ib3R0b20sbGVmdDpvLmxlZnR9LHdpbmRvd1RvcDpWLHdpbmRvd0JvdHRvbTpULHNjcmVlblRvcDpuLUR9fSkseWEseGM9ITA7ZnVuY3Rpb24gaWMoKXtpZigheGMpcmV0dXJuO2xldHtnZXRTeXN0ZW1JbmZvU3luYzplfT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKTtpZih5YT1lKCksei5pc1N0cmluZyh5YSkpdHJ5e3lhPUpTT04ucGFyc2UoeWEpfWNhdGNoKHQpe31yZXR1cm4geWF9bGV0IEtoPUx0KCJnZXREZXZpY2VJbmZvIiwoKT0+e2ljKCk7bGV0e2RldmljZUJyYW5kOmU9IiIsZGV2aWNlTW9kZWw6dCxvc05hbWU6bixvc1ZlcnNpb246cixkZXZpY2VPcmllbnRhdGlvbjpvLGRldmljZVR5cGU6YyxkZXZpY2VJZDpnfT15YSxiPWUudG9Mb3dlckNhc2UoKSxWPW4udG9Mb3dlckNhc2UoKTtyZXR1cm57YnJhbmQ6YixkZXZpY2VCcmFuZDpiLGRldmljZU1vZGVsOnQsZGV2aWNlUGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSxkZXZpY2VJZDpnLGRldmljZU9yaWVudGF0aW9uOm8sZGV2aWNlVHlwZTpjLG1vZGVsOnQscGxhdGZvcm06VixzeXN0ZW06YCR7Vj09PSJpb3MiPyJpT1MiOiJBbmRyb2lkIn0gJHtyfWB9fSksWmg9THQoImdldEFwcEJhc2VJbmZvIiwoKT0+e2ljKCk7bGV0e2hvc3RQYWNrYWdlTmFtZTplLGhvc3ROYW1lOnQsaG9zdFZlcnNpb246bixob3N0TGFuZ3VhZ2U6cixvc0xhbmd1YWdlOm8saG9zdFRoZW1lOmMsYXBwSWQ6ZyxhcHBOYW1lOmIsYXBwVmVyc2lvbjpWLGFwcFZlcnNpb25Db2RlOlQsYXBwV2d0VmVyc2lvbjpEfT15YTtyZXR1cm57YXBwSWQ6ZyxhcHBOYW1lOmIsYXBwVmVyc2lvbjpWLGFwcFZlcnNpb25Db2RlOlQsYXBwV2d0VmVyc2lvbjpELGFwcExhbmd1YWdlOktsP0tsKCk6byxlbmFibGVEZWJ1ZzohMSxob3N0UGFja2FnZU5hbWU6ZSxob3N0TmFtZTp0LGhvc3RWZXJzaW9uOm4saG9zdExhbmd1YWdlOnIsaG9zdFRoZW1lOmMsaG9zdEZvbnRTaXplU2V0dGluZzp2b2lkIDAsaG9zdFNES1ZlcnNpb246dm9pZCAwLGxhbmd1YWdlOm8sU0RLVmVyc2lvbjoiIix0aGVtZTpqaCgpLHZlcnNpb246cy5ydW50aW1lLmlubmVyVmVyc2lvbn19KSxYaD1MdCgiZ2V0U3lzdGVtSW5mb1N5bmMiLCgpPT57eGM9ITAsaWMoKSx4Yz0hMTtsZXQgZT1KaCgpLHQ9S2goKSxuPVpoKCk7eGM9ITA7bGV0IHI9e2ZvbnRTaXplU2V0dGluZzpuLmhvc3RGb250U2l6ZVNldHRpbmcsb3NOYW1lOnlhLm9zTmFtZS50b0xvd2VyQ2FzZSgpfTt5YS5ob3N0TmFtZSYmKHIuaG9zdFNES1ZlcnNpb249eWEudW5pUnVudGltZVZlcnNpb24pO2xldCBvPXouZXh0ZW5kKHlhLGUsdCxuLHIpO3JldHVybiBkZWxldGUgby5zY3JlZW5Ub3AsZGVsZXRlIG8uZW5hYmxlRGVidWcsUi5kYXJrbW9kZXx8ZGVsZXRlIG8udGhlbWUsSy5zb3J0T2JqZWN0KG8pfSksZEM9RWUoImdldFN5c3RlbUluZm8iLChlLHtyZXNvbHZlOnR9KT0+dChYaCgpKSksT2w9bnVsbCxoQz1nbihnaCwoKT0+e1FoKCl9KSxnQz1maSh0MCwoKT0+e2VnKCl9KSxRaD1FZShuMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntPbHx8KE9sPXMub3JpZW50YXRpb24ud2F0Y2hPcmllbnRhdGlvbihyPT57b3QuaW52b2tlT25DYWxsYmFjayhnaCx7ZGlyZWN0aW9uOnIubWFnbmV0aWNIZWFkaW5nfSl9LHI9PntuKHIubWVzc2FnZSksT2w9bnVsbH0se2ZyZXF1ZW5jeTp1b30pKSxOKHQsdW8pfSksZWc9RWUocjAsKGUse3Jlc29sdmU6dH0pPT57T2wmJihzLm9yaWVudGF0aW9uLmNsZWFyV2F0Y2goT2wpLE9sPW51bGwpLHQoKX0pLHBDPUVlKGkwLChlLHtyZXNvbHZlOnR9KT0+e3MuZGV2aWNlLnZpYnJhdGUoMTUpLHQoKX0pLHZDPUVlKG8wLChlLHtyZXNvbHZlOnR9KT0+e3MuZGV2aWNlLnZpYnJhdGUoNDAwKSx0KCl9KSxUbD1udWxsLG1DPWduKGhoLCgpPT57dGcoKX0pLF9DPWZpKFhiLCgpPT57bmcoKX0pLHRnPUVlKFFiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e1RsfHwoVGw9cy5hY2NlbGVyb21ldGVyLndhdGNoQWNjZWxlcmF0aW9uKHI9PntvdC5pbnZva2VPbkNhbGxiYWNrKGhoLHt4OnImJnIueEF4aXN8fDAseTpyJiZyLnlBeGlzfHwwLHo6ciYmci56QXhpc3x8MH0pfSxyPT57VGw9bnVsbCxuKGBzdGFydEFjY2VsZXJvbWV0ZXI6ZmFpbCAke3IubWVzc2FnZX1gKX0se2ZyZXF1ZW5jeTp1b30pKSxOKHQsdW8pfSksbmc9RWUoZTAsKGUse3Jlc29sdmU6dH0pPT57VGwmJihzLmFjY2VsZXJvbWV0ZXIuY2xlYXJXYXRjaChUbCksVGw9bnVsbCksdCgpfSksYkM9Z24ocGgsQWwoKCk9PnMuYmx1ZXRvb3RoLm9uQmx1ZXRvb3RoRGV2aWNlRm91bmQuYmluZChzLmJsdWV0b290aCkscGgpKSxFQz1nbih2aCxBbCgoKT0+cy5ibHVldG9vdGgub25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UuYmluZChzLmJsdWV0b290aCksdmgpKSx5Qz1nbihtaCxBbCgoKT0+cy5ibHVldG9vdGgub25CTEVDb25uZWN0aW9uU3RhdGVDaGFuZ2UuYmluZChzLmJsdWV0b290aCksbWgpKSxTQz1nbihfaCxBbCgoKT0+cy5ibHVldG9vdGgub25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpLF9oKSksd0M9RWUoIm9wZW5CbHVldG9vdGhBZGFwdGVyIixtaSgoKT0+cy5ibHVldG9vdGgub3BlbkJsdWV0b290aEFkYXB0ZXIuYmluZChzLmJsdWV0b290aCkpKSxDQz1FZSgiY2xvc2VCbHVldG9vdGhBZGFwdGVyIixtaSgoKT0+cy5ibHVldG9vdGguY2xvc2VCbHVldG9vdGhBZGFwdGVyLmJpbmQocy5ibHVldG9vdGgpKSksQUM9RWUoImdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZSIsbWkoKCk9PnMuYmx1ZXRvb3RoLmdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZS5iaW5kKHMuYmx1ZXRvb3RoKSkpLE9DPUVlKGEwLG1pKCgpPT5zLmJsdWV0b290aC5zdGFydEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkuYmluZChzLmJsdWV0b290aCkpLHMwKSxUQz1FZSgic3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkiLG1pKCgpPT5zLmJsdWV0b290aC5zdG9wQmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeS5iaW5kKHMuYmx1ZXRvb3RoKSkpLFBDPUVlKCJnZXRCbHVldG9vdGhEZXZpY2VzIixtaSgoKT0+cy5ibHVldG9vdGguZ2V0Qmx1ZXRvb3RoRGV2aWNlcy5iaW5kKHMuYmx1ZXRvb3RoKSkpLElDPUVlKGwwLG1pKCgpPT5zLmJsdWV0b290aC5nZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzLmJpbmQocy5ibHVldG9vdGgpKSxjMCksTkM9RWUodTAsbWkoKCk9PnMuYmx1ZXRvb3RoLmNyZWF0ZUJMRUNvbm5lY3Rpb24uYmluZChzLmJsdWV0b290aCkpLGYwKSxrQz1FZShkMCxtaSgoKT0+cy5ibHVldG9vdGguY2xvc2VCTEVDb25uZWN0aW9uLmJpbmQocy5ibHVldG9vdGgpKSxoMCksUkM9RWUoZzAsbWkoKCk9PnMuYmx1ZXRvb3RoLmdldEJMRURldmljZVNlcnZpY2VzLmJpbmQocy5ibHVldG9vdGgpKSxwMCkseEM9RWUodjAsbWkoKCk9PnMuYmx1ZXRvb3RoLmdldEJMRURldmljZUNoYXJhY3RlcmlzdGljcy5iaW5kKHMuYmx1ZXRvb3RoKSksbTApLEJDPUVlKF8wLG1pKCgpPT5zLmJsdWV0b290aC5ub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpKSxiMCksTUM9RWUoRTAsbWkoKCk9PnMuYmx1ZXRvb3RoLnJlYWRCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlLmJpbmQocy5ibHVldG9vdGgpKSx5MCksTEM9RWUoUzAsbWkoKCk9PnMuYmx1ZXRvb3RoLndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZS5iaW5kKHMuYmx1ZXRvb3RoKSksdzApLERDPUVlKEMwLG1pKCgpPT5zLmJsdWV0b290aC5zZXRCTEVNVFUuYmluZChzLmJsdWV0b290aCkpLEEwKSxGQz1FZShPMCxtaSgoKT0+cy5ibHVldG9vdGguZ2V0QkxFRGV2aWNlUlNTSS5iaW5kKHMuYmx1ZXRvb3RoKSksVDApLFZDPWduKGJoLEFsKCgpPT5zLmliZWFjb24ub25CZWFjb25VcGRhdGUuYmluZChzLmliZWFjb24pLGJoKSksVUM9Z24oRWgsQWwoKCk9PnMuaWJlYWNvbi5vbkJlYWNvblNlcnZpY2VDaGFuZ2UuYmluZChzLmliZWFjb24pLEVoKSksJEM9RWUoUDAsbWkoKCk9PnMuaWJlYWNvbi5nZXRCZWFjb25zLmJpbmQocy5pYmVhY29uKSkpLEhDPUVlKEkwLG1pKCgpPT5zLmliZWFjb24uc3RhcnRCZWFjb25EaXNjb3ZlcnkuYmluZChzLmliZWFjb24pKSxOMCksakM9RWUoazAsbWkoKCk9PnMuaWJlYWNvbi5zdG9wQmVhY29uRGlzY292ZXJ5LmJpbmQocy5pYmVhY29uKSkpLHpDPUVlKGpiLCh7cGhvbmVOdW1iZXI6ZX0se3Jlc29sdmU6dH0pPT4ocy5kZXZpY2UuZGlhbChlKSx0KCkpLHpiKSxXQz17bmFtZTp7Z2l2ZW5OYW1lOiJmaXJzdE5hbWUiLG1pZGRsZU5hbWU6Im1pZGRsZU5hbWUiLGZhbWlseU5hbWU6Imxhc3ROYW1lIn0sbmlja25hbWU6Im5pY2tOYW1lIixwaG90b3M6e3R5cGU6InVybCIsdmFsdWU6InBob3RvRmlsZVBhdGgifSxub3RlOiJyZW1hcmsiLHBob25lTnVtYmVyczpbe3R5cGU6Im1vYmlsZSIsdmFsdWU6Im1vYmlsZVBob25lTnVtYmVyIn0se3R5cGU6IndvcmsiLHZhbHVlOiJ3b3JrUGhvbmVOdW1iZXIifSx7dHlwZToiY29tcGFueSIsdmFsdWU6Imhvc3ROdW1iZXIifSx7dHlwZToiaG9tZSBmYXgiLHZhbHVlOiJob21lRmF4TnVtYmVyIn0se3R5cGU6IndvcmsgZmF4Iix2YWx1ZToid29ya0ZheE51bWJlciJ9XSxlbWFpbHM6W3t0eXBlOiJob21lIix2YWx1ZToiZW1haWwifV0sdXJsczpbe3R5cGU6Im90aGVyIix2YWx1ZToidXJsIn1dLG9yZ2FuaXphdGlvbnM6W3t0eXBlOiJjb21wYW55IixuYW1lOiJvcmdhbml6YXRpb24iLHRpdGxlOiJ0aXRsZSJ9XSxpbXM6W3t0eXBlOiJvdGhlciIsdmFsdWU6IndlQ2hhdE51bWJlciJ9XSxhZGRyZXNzZXM6W3t0eXBlOiJvdGhlciIscHJlZmVycmVkOiEwLGNvdW50cnk6ImFkZHJlc3NDb3VudHJ5IixyZWdpb246ImFkZHJlc3NTdGF0ZSIsbG9jYWxpdHk6ImFkZHJlc3NDaXR5IixzdHJlZXRBZGRyZXNzOiJhZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJhZGRyZXNzUG9zdGFsQ29kZSJ9LHt0eXBlOiJob21lIixjb3VudHJ5OiJob21lQWRkcmVzc0NvdW50cnkiLHJlZ2lvbjoiaG9tZUFkZHJlc3NTdGF0ZSIsbG9jYWxpdHk6ImhvbWVBZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoiaG9tZUFkZHJlc3NTdHJlZXQiLHBvc3RhbENvZGU6ImhvbWVBZGRyZXNzUG9zdGFsQ29kZSJ9LHt0eXBlOiJjb21wYW55Iixjb3VudHJ5OiJ3b3JrQWRkcmVzc0NvdW50cnkiLHJlZ2lvbjoid29ya0FkZHJlc3NTdGF0ZSIsbG9jYWxpdHk6IndvcmtBZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoid29ya0FkZHJlc3NTdHJlZXQiLHBvc3RhbENvZGU6IndvcmtBZGRyZXNzUG9zdGFsQ29kZSJ9XX0sR0M9WyJ0eXBlIiwicHJlZmVycmVkIl07ZnVuY3Rpb24gWXUoZSx0LG4pe2xldCByPTA7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2gobz0+e2xldCBjPW5bb107dHlwZW9mIGMhPT0ib2JqZWN0Ij9HQy5pbmRleE9mKG8pIT09LTE/ZVtvXT1uW29dOnR5cGVvZiB0W2NdIT0idW5kZWZpbmVkIj8ocisrLGVbb109dFtjXSk6ZGVsZXRlIGVbb106YyBpbnN0YW5jZW9mIEFycmF5PyhlW29dPVtdLGMuZm9yRWFjaChiPT57bGV0IFY9e307WXUoVix0LGIpJiZlW29dLnB1c2goVil9KSxlW29dLmxlbmd0aD9yKys6ZGVsZXRlIGVbb10pOihlW29dPXt9LFl1KGVbb10sdCxjKT9yKys6ZGVsZXRlIGVbb10pfSkscn1sZXQgWUM9RWUoV2IsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57IWUucGhvdG9GaWxlUGF0aCYmKGUucGhvdG9GaWxlUGF0aD0iIikscy5jb250YWN0cy5nZXRBZGRyZXNzQm9vayhzLmNvbnRhY3RzLkFERFJFU1NCT09LX1BIT05FLHI9PntsZXQgbz1yLmNyZWF0ZSgpO1l1KG8sZSxXQyksby5zYXZlKCgpPT50KCksYz0+bigpKX0scj0+bigpKX0sWWIsR2IpO2Z1bmN0aW9uIFlvKGUpe3JldHVybiB0eXBlb2YgZiE9InVuZGVmaW5lZCI/Zi5yZXF1aXJlTW9kdWxlKGUpOl9fcmVxdWlyZU5hdGl2ZVBsdWdpbl9fKGUpfWZ1bmN0aW9uIHJnKGUsdCxuKXtyZXR1cm4gWW8oInBsdXMiKS5zZW5kTmF0aXZlRXZlbnQoZSx0LG4pfWxldCBxQz1FZShxYiwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntZbygiY2xpcGJvYXJkIikuZ2V0U3RyaW5nKG89PntvLnJlc3VsdD09PSJzdWNjZXNzIj90KHtkYXRhOm8uZGF0YX0pOm4oImdldENsaXBib2FyZERhdGE6ZmFpbCIpfSl9KSxKQz1FZShKYiwoZSx7cmVzb2x2ZTp0fSk9PntZbygiY2xpcGJvYXJkIikuc2V0U3RyaW5nKGUuZGF0YSksdCgpfSxaYixLYiksaWc9Im9uTmV0d29ya1N0YXR1c0NoYW5nZSI7ZnVuY3Rpb24gb2coKXthZygpLnRoZW4oKHtuZXR3b3JrVHlwZTplfSk9PntvdC5pbnZva2VPbkNhbGxiYWNrKGlnLHtpc0Nvbm5lY3RlZDplIT09Im5vbmUiLG5ldHdvcmtUeXBlOmV9KX0pfWxldCBLQz1nbihpZywoKT0+e3MuZ2xvYmFsRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigibmV0Y2hhbmdlIixvZyl9KSxaQz1maSgib2ZmTmV0d29ya1N0YXR1c0NoYW5nZSIsKCk9PntzLmdsb2JhbEV2ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm5ldGNoYW5nZSIsb2cpfSksYWc9RWUoImdldE5ldHdvcmtUeXBlIiwoZSx7cmVzb2x2ZTp0fSk9PntsZXQgbj1XYVtzLm5ldHdvcmtpbmZvLmdldEN1cnJlbnRUeXBlKCldfHwidW5rbm93biI7cmV0dXJuIHQoe25ldHdvcmtUeXBlOm59KX0pO2Z1bmN0aW9uIHNnKCl7aWYocy5vcy5uYW1lLnRvTG93ZXJDYXNlKCkhPT0iaW9zIilyZXR1cm4hMTtsZXQgdD1ZbygiZmFjZUlEIik7cmV0dXJuISEodCYmdC5pc1N1cHBvcnQoKSl9ZnVuY3Rpb24gbGcoKXtyZXR1cm4hIShzLmZpbmdlcnByaW50JiZzLmZpbmdlcnByaW50LmlzU3VwcG9ydCgpKX1sZXQgY2c9ZT0+e2xldCB0PVtdO3JldHVybiBsZygpJiZ0LnB1c2goImZpbmdlclByaW50Iiksc2coKSYmdC5wdXNoKCJmYWNpYWwiKSxlJiZlKHtzdXBwb3J0TW9kZTp0fSkse3N1cHBvcnRNb2RlOnQsZXJyTXNnOiJjaGVja0lzU3VwcG9ydFNvdGVyQXV0aGVudGljYXRpb246b2sifX0sWEM9RWUoTTAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57Y2codCl9KSx1Zz0oe2NoZWNrQXV0aE1vZGU6ZSxyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPShjLGcpPT5uJiZuKGMsZyksbz1jPT50JiZ0KGMpO2lmKGU9PT0iZmluZ2VyUHJpbnQiKXtpZihsZygpKXtsZXQgYz1zLmZpbmdlcnByaW50LmlzS2V5Z3VhcmRTZWN1cmUoKSYmcy5maW5nZXJwcmludC5pc0Vucm9sbGVkRmluZ2VycHJpbnRzKCk7cmV0dXJuIG8oe2lzRW5yb2xsZWQ6Y30pLHtpc0Vucm9sbGVkOmMsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOm9rIn19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19ZWxzZSBpZihlPT09ImZhY2lhbCIpe2lmKHNnKCkpe2xldCBjPVlvKCJmYWNlSUQiKSxnPWMmJmMuaXNLZXlndWFyZFNlY3VyZSgpJiZjLmlzRW5yb2xsZWRGYWNlSUQoKTtyZXR1cm4gbyh7aXNFbnJvbGxlZDpnfSkse2lzRW5yb2xsZWQ6ZyxlcnJNc2c6ImNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6b2sifX1yZXR1cm4gcigibm90IHN1cHBvcnQiLHtpc0Vucm9sbGVkOiExfSkse2lzRW5yb2xsZWQ6ITEsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOmZhaWwgbm90IHN1cHBvcnQifX1yZXR1cm4gcigibm90IHN1cHBvcnQiLHtpc0Vucm9sbGVkOiExfSkse2lzRW5yb2xsZWQ6ITEsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOmZhaWwgbm90IHN1cHBvcnQifX0sUUM9RWUoTDAsKHtjaGVja0F1dGhNb2RlOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3VnKHtjaGVja0F1dGhNb2RlOmUscmVzb2x2ZTp0LHJlamVjdDpufSl9LFYwLEYwKSxlQT1FZShVMCwoe3JlcXVlc3RBdXRoTW9kZXM6ZSxjaGFsbGVuZ2U6dD0hMSxhdXRoQ29udGVudDpufSx7cmVzb2x2ZTpyLHJlamVjdDpvfSk9PntKbigpO2xldHt0OmN9PWd0KCkse3N1cHBvcnRNb2RlOmd9PWNnKCk7aWYoIWcubGVuZ3RoKXJldHVybiBvKCJub3Qgc3VwcG9ydCIse2F1dGhNb2RlOiJmaW5nZXJQcmludCIsZXJyQ29kZTo5MDAwMX0pO2xldCBiPVtdO2lmKGUuZm9yRWFjaChmdD0+e2cuaW5kZXhPZihmdCk+LTEmJmIucHVzaChmdCl9KSwhYi5sZW5ndGgpcmV0dXJuIG8oInN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjpmYWlsIG5vIGNvcnJlc3BvbmRpbmcgbW9kZSIse2F1dGhNb2RlOiJmaW5nZXJQcmludCIsZXJyQ29kZTo5MDAwM30pO2xldCBWPVtdO2lmKGIuZm9yRWFjaChmdD0+e3VnKHtjaGVja0F1dGhNb2RlOmZ0fSkuaXNFbnJvbGxlZCYmVi5wdXNoKGZ0KX0pLCFWLmxlbmd0aClyZXR1cm4gbyhgc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uOmZhaWwgbm8gJHtiWzBdfSBlbnJvbGxlZGAse2F1dGhNb2RlOmJbMF0sZXJyQ29kZTo5MDAxMX0pO2xldCBUPVZbMF0sRD1udWxsLHZlLHllPW58fGMoInVuaS5zdGFydFNvdGVyQXV0aGVudGljYXRpb24uYXV0aENvbnRlbnQiKSxPZT1mdD0+e2xldHtjb2RlOmh0fT1mdCxWdD17YXV0aE1vZGU6VH0sd3Q9ezQ6KCk9PntEPyh5KHZlKSxELnNldFRpdGxlKGMoInVuaS5zdGFydFNvdGVyQXV0aGVudGljYXRpb24ud2FpdGluZ0NvbnRlbnQiKSksdmU9TigoKT0+e0QmJkQuc2V0VGl0bGUoeWUpfSwxZTMpKTpvKCIiLHouZXh0ZW5kKFZ0LHtlcnJDb2RlOjkwMDA5fSkpfSw1OigpPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSxvKCJhdXRoZW50aWNhdGUgZnJlZXplLiBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIix6LmV4dGVuZChWdCx7ZXJyQ29kZTo5MDAxMH0pKX0sNjooKT0+e3MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCksbygiY2FuY2VsIix6LmV4dGVuZChWdCx7ZXJyQ29kZTo5MDAwOH0pKX19O2h0JiZ3dFtodF0/d3RbaHRdKCk6KHMubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCksbygiIix6LmV4dGVuZChWdCx7ZXJyQ29kZTo5MDAwN30pKSl9O1Q9PT0iZmluZ2VyUHJpbnQiPyhzLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIiYmKEQ9cy5uYXRpdmVVSS5zaG93V2FpdGluZyh5ZSksRC5vbmNsb3NlPWZ1bmN0aW9uKCl7cy5maW5nZXJwcmludC5jYW5jZWwoKX0pLHMuZmluZ2VycHJpbnQuYXV0aGVudGljYXRlKCgpPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSxyKHthdXRoTW9kZTpULGVyckNvZGU6MH0pfSxPZSx7bWVzc2FnZTp5ZX0pKTpUPT09ImZhY2lhbCImJllvKCJmYWNlSUQiKS5hdXRoZW50aWNhdGUoe21lc3NhZ2U6eWV9LGh0PT57aHQudHlwZT09PSJzdWNjZXNzIiYmaHQuY29kZT09PTA/cih7YXV0aE1vZGU6VCxlcnJDb2RlOjB9KTpPZShodCl9KX0sSDAsJDApLHRBPUVlKGowLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3BuKCk7bGV0e3Q6cn09Z3QoKSxjPXFoKCkhPT0ibGlnaHQiLGcsYj0hMSxWPVhpKHt1cmw6Il9fdW5pYXBwc2NhbiIsZGF0YTpPYmplY3QuYXNzaWduKHt9LGUse21lc3NhZ2VzOntmYWlsOnIoInVuaS5zY2FuQ29kZS5mYWlsIiksImZsYXNoLm9uIjpyKCJ1bmkuc2NhbkNvZGUuZmxhc2gub24iKSwiZmxhc2gub2ZmIjpyKCJ1bmkuc2NhbkNvZGUuZmxhc2gub2ZmIil9fSksc3R5bGU6e2FuaW1hdGlvblR5cGU6ZS5hbmltYXRpb25UeXBlfHwicG9wLWluIix0aXRsZU5WaWV3OnthdXRvQmFja0J1dHRvbjohMCx0eXBlOiJmbG9hdCIsdGl0bGVUZXh0OmUudGl0bGVUZXh0fHxyKCJ1bmkuc2NhbkNvZGUudGl0bGUiKSx0aXRsZUNvbG9yOiIjZmZmZmZmIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkiLGJ1dHRvbnM6ZS5vbmx5RnJvbUNhbWVyYT9bXTpbe3RleHQ6ZS5hbGJ1bVRleHR8fHIoInVuaS5zY2FuQ29kZS5hbGJ1bSIpLGZvbnRTaXplOiIxN3B4Iix3aWR0aDoiNjBweCIsb25jbGljazooKT0+e1Yuc2VuZE1lc3NhZ2Uoe3R5cGU6ImdhbGxlcnkifSl9fV19LHBvcEdlc3R1cmU6ImNsb3NlIixiYWNrZ3JvdW5kOiIjMDAwMDAwIixiYWNrQnV0dG9uQXV0b0NvbnRyb2w6ImNsb3NlIn0sb25NZXNzYWdlKHtldmVudDpULGRldGFpbDpEfSl7Zz1ELGI9VD09PSJtYXJrZWQifSxvbkNsb3NlKCl7YyYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImRhcmsiKSxnP2I/KGRlbGV0ZSBnLm1lc3NhZ2UsdChnKSk6bihnLm1lc3NhZ2UpOm4oImNhbmNlbCIpfX0pO2MmJihzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgibGlnaHQiKSxWLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigicG9wR2VzdHVyZSIsKHt0eXBlOlQscmVzdWx0OkR9KT0+e1Q9PT0ic3RhcnQiP3MubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIik6VD09PSJlbmQiJiYhRCYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0Iil9KSl9LHowLEcwKSxmZz1lPT57b3QuaW52b2tlT25DYWxsYmFjayhLLk9OX1RIRU1FX0NIQU5HRSxlKX0sbkE9Z24oSy5PTl9USEVNRV9DSEFOR0UsKCk9PntvdC5vbihLLk9OX1RIRU1FX0NIQU5HRSxmZyl9KSxyQT1maShLLk9GRl9USEVNRV9DSEFOR0UsKCk9PntvdC5vZmYoSy5PTl9USEVNRV9DSEFOR0UsZmcpfSksaUE9RWUoUjAsKGUse3Jlc29sdmU6dH0pPT57bGV0IG49cy5zY3JlZW4uZ2V0QnJpZ2h0bmVzcyghMSk7dCh7dmFsdWU6bn0pfSksb0E9RWUoeDAsKGUse3Jlc29sdmU6dH0pPT57cy5zY3JlZW4uc2V0QnJpZ2h0bmVzcyhlLnZhbHVlLCExKSx0KCl9KSxhQT1FZShCMCwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS5zZXRXYWtlbG9jayghIWUua2VlcFNjcmVlbk9uKSx0KCl9KSxzQT1MdChZMCwoKT0+e2xldHtnZXRTeXN0ZW1TZXR0aW5nOmV9PWYucmVxdWlyZU1vZHVsZSgicGx1cyIpLHQ9ZSgpO3RyeXt0eXBlb2YgdD09InN0cmluZyImJih0PUpTT04ucGFyc2UodCkpfWNhdGNoKG4pe31yZXR1cm4gdH0pLGRnPUx0KHEwLCgpPT57bGV0e2dldEFwcEF1dGhvcml6ZVNldHRpbmc6ZX09Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIiksdD1lKCk7dHJ5e3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9SlNPTi5wYXJzZSh0KSl9Y2F0Y2gobil7fWZvcihsZXQgbiBpbiB0KXouaGFzT3duKHQsbikmJnRbbl09PT0idW5kZWZpbmVkIiYmKHRbbl09dm9pZCAwKTtyZXR1cm4gdH0pLGxBPUVlKEowLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtvcGVuQXBwQXV0aG9yaXplU2V0dGluZzpyfT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKTtyKGM9PntjLnR5cGU9PT0ic3VjY2VzcyI/dCgpOm4oKX0pfSksY0E9RWUoTEUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9SnIrIi9kb3dubG9hZC8iO3MuaW8uZ2V0SW1hZ2VJbmZvKHouZXh0ZW5kKGUse3NhdmVQYXRoOnIsZmlsZW5hbWU6cixzdWNjZXNzOlhzKHQpLGZhaWw6cHIobil9KSl9LEZFLERFKSx1QT1FZShqRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmlvLmdldFZpZGVvSW5mbyh7ZmlsZVBhdGg6ZS5zcmMsc3VjY2VzczpyPT57dCh7b3JpZW50YXRpb246ci5vcmllbnRhdGlvbix0eXBlOnIudHlwZSxkdXJhdGlvbjpyLmR1cmF0aW9uLHNpemU6ci5zaXplLGhlaWdodDpyLmhlaWdodCx3aWR0aDpyLndpZHRoLGZwczpyLmZwc3x8MzAsYml0cmF0ZTpyLmJpdHJhdGV9KX0sZmFpbDpwcihuKX0pfSxXRSx6RSksZkE9RWUoVkUsKHtjdXJyZW50OmU9MCxpbmRpY2F0b3I6dD0ibnVtYmVyIixsb29wOm49ITEsdXJsczpyLGxvbmdQcmVzc0FjdGlvbnM6b30se3Jlc29sdmU6YyxyZWplY3Q6Z30pPT57QmUoKTtsZXR7dDpifT1ndCgpO3I9ci5tYXAoVD0+SGUoVCkpO2xldCBWPU51bWJlcihlKTtpc05hTihWKT8oZT1yLmluZGV4T2YoSGUoZSkpLGU9ZTwwPzA6ZSk6ZT1WLHMubmF0aXZlVUkucHJldmlld0ltYWdlKHIse2N1cnJlbnQ6ZSxpbmRpY2F0b3I6dCxsb29wOm4sb25Mb25nUHJlc3M6ZnVuY3Rpb24oVCl7bGV0IEQ9W10sdmU9IiIseWU9byYmei5pc1BsYWluT2JqZWN0KG8pO3llPyhEPW8uaXRlbUxpc3Q/by5pdGVtTGlzdDpbXSx2ZT1vLml0ZW1Db2xvcj9vLml0ZW1Db2xvcjoiIzAwMDAwMCIpOihEPVtiKCJ1bmkucHJldmlld0ltYWdlLmJ1dHRvbi5zYXZlIildLHZlPSIjMDAwMDAwIik7bGV0IE9lPXtidXR0b25zOkQubWFwKGZ0PT4oe3RpdGxlOmZ0LGNvbG9yOnZlfSkpLGNhbmNlbDpiKCJ1bmkucHJldmlld0ltYWdlLmNhbmNlbCIpfTtzLm5hdGl2ZVVJLmFjdGlvblNoZWV0KE9lLGZ0PT57aWYoZnQuaW5kZXg+MCl7aWYoeWUpe3ouaXNGdW5jdGlvbihvLnN1Y2Nlc3MpJiZvLnN1Y2Nlc3Moe3RhcEluZGV4OmZ0LmluZGV4LTEsaW5kZXg6VC5pbmRleH0pO3JldHVybn1zLmdhbGxlcnkuc2F2ZShULnVybCwoKT0+e3MubmF0aXZlVUkudG9hc3QoYigidW5pLnByZXZpZXdJbWFnZS5zYXZlLnN1Y2Nlc3MiKSl9LGZ1bmN0aW9uKCl7cy5uYXRpdmVVSS50b2FzdChiKCJ1bmkucHJldmlld0ltYWdlLnNhdmUuZmFpbCIpKX0pfWVsc2UgeWUmJnouaXNGdW5jdGlvbihvLmZhaWwpJiZvLmZhaWwoe2Vyck1zZzoic2hvd0FjdGlvblNoZWV0OmZhaWwgY2FuY2VsIn0pfSl9fSksYygpfSwkRSxVRSksZEE9RWUoSEUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57dHJ5e3MubmF0aXZlVUkuY2xvc2VQcmV2aWV3SW1hZ2UoKSx0KCl9Y2F0Y2gocil7bigpfX0pLHF1LFBsPSExLEp1LElsPShlLHQ9e30pPT57aEEoei5leHRlbmQoe3N0YXRlOmV9LHQpKX0sb2M9e3N0YXJ0KHtkdXJhdGlvbjplPTZlNCxzYW1wbGVSYXRlOnQsbnVtYmVyT2ZDaGFubmVsczpuLGVuY29kZUJpdFJhdGU6cixmb3JtYXQ6bz0ibXAzIixmcmFtZVNpemU6Y309e30pe2lmKFBsKXJldHVybiBJbCgic3RhcnQiKTtxdT1zLmF1ZGlvLmdldFJlY29yZGVyKCkscXUucmVjb3JkKHtmb3JtYXQ6byxzYW1wbGVyYXRlOnQ/U3RyaW5nKHQpOnZvaWQgMCxmaWxlbmFtZTpKcisiL3JlY29yZGVyLyJ9LGc9PklsKCJzdG9wIix7dGVtcEZpbGVQYXRoOmd9KSxnPT5JbCgiZXJyb3IiLHtlcnJNc2c6Zy5tZXNzYWdlfSkpLEp1PU4oKCk9PntvYy5zdG9wKCl9LGUpLElsKCJzdGFydCIpLFBsPSEwfSxzdG9wKCl7UGwmJihxdS5zdG9wKCksUGw9ITEsSnUmJnkoSnUpKX0scGF1c2UoKXtQbCYmSWwoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHBhdXNlIn0pfSxyZXN1bWUoKXtQbCYmSWwoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHJlc3VtZSJ9KX19LFFzPXtwYXVzZTpudWxsLHJlc3VtZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLGVycm9yOm51bGx9O2Z1bmN0aW9uIGhBKGUpe2xldCB0PWUuc3RhdGU7ZGVsZXRlIGUuc3RhdGUsZGVsZXRlIGUuZXJyTXNnLHQmJnouaXNGdW5jdGlvbihRc1t0XSkmJlFzW3RdKGUpfWNsYXNzIGdBe2NvbnN0cnVjdG9yKCl7fW9uRXJyb3IodCl7UXMuZXJyb3I9dH1vbkZyYW1lUmVjb3JkZWQodCl7fW9uSW50ZXJydXB0aW9uQmVnaW4odCl7fW9uSW50ZXJydXB0aW9uRW5kKHQpe31vblBhdXNlKHQpe1FzLnBhdXNlPXR9b25SZXN1bWUodCl7UXMucmVzdW1lPXR9b25TdGFydCh0KXtRcy5zdGFydD10fW9uU3RvcCh0KXtRcy5zdG9wPXR9cGF1c2UoKXtvYy5wYXVzZSgpfXJlc3VtZSgpe29jLnJlc3VtZSgpfXN0YXJ0KHQ9e30pe29jLnN0YXJ0KHQpfXN0b3AoKXtvYy5zdG9wKCl9fWxldCBoZyxwQT1MdChYRSwoKT0+aGd8fChoZz1uZXcgZ0EpKSx2QT1FZShKRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmdhbGxlcnkuc2F2ZShlLmZpbGVQYXRoLFhzKHQpLHByKG4pKX0sWkUsS0UpLG1BPUVlKEdFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3MuZ2FsbGVyeS5zYXZlKGUuZmlsZVBhdGgsWHModCkscHIobikpfSxxRSxZRSksX0E9RWUoUUUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9YCR7SnJ9L2NvbXByZXNzZWQvJHtEYXRlLm5vdygpfV8ke0dhKGUuc3JjKX1gLHtjb21wcmVzc2VkV2lkdGg6byxjb21wcmVzc2VkSGVpZ2h0OmN9PWU7dHlwZW9mIG89PSJudW1iZXIiJiYoZS53aWR0aD1vKyJweCIpLHR5cGVvZiBjPT0ibnVtYmVyIiYmKGUuaGVpZ2h0PWMrInB4Iikscy56aXAuY29tcHJlc3NJbWFnZSh6LmV4dGVuZCh7fSxlLHtkc3Q6cn0pLCgpPT57dCh7dGVtcEZpbGVQYXRoOnJ9KX0sbil9LHR5LGV5KSxiQT1FZShueSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1gJHtKcn0vY29tcHJlc3NlZC8ke0RhdGUubm93KCl9XyR7R2EoZS5zcmMpfWA7cy56aXAuY29tcHJlc3NWaWRlbyh6LmV4dGVuZCh7fSxlLHtmaWxlbmFtZTpyfSksbz0+e3Qoe3RlbXBGaWxlUGF0aDpyLHNpemU6by5zaXplfSl9LG4pfSxpeSxyeSk7ZnVuY3Rpb24gRUEoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsZnVuY3Rpb24ocil7ci5nZXRNZXRhZGF0YSh0LG4sITEpfSxuKX0pfWxldCB5QT1FZShORSwoe2NvdW50OmUsc2l6ZVR5cGU6dCxzb3VyY2VUeXBlOm4sY3JvcDpyfT17fSx7cmVzb2x2ZTpvLHJlamVjdDpjfSk9PntYKCk7bGV0e3Q6Z309Z3QoKSxiPXByKGMpO2Z1bmN0aW9uIFYodmUpe2xldCB5ZT1bXSxPZT1bXTtQcm9taXNlLmFsbCh2ZS5tYXAoZnQ9PkVBKGZ0KSkpLnRoZW4oZnQ9PntmdC5mb3JFYWNoKChodCxWdCk9PntsZXQgd3Q9dmVbVnRdO09lLnB1c2god3QpLHllLnB1c2goe3BhdGg6d3Qsc2l6ZTpodC5zaXplfSl9KSxvKHt0ZW1wRmlsZVBhdGhzOk9lLHRlbXBGaWxlczp5ZX0pfSkuY2F0Y2goYil9ZnVuY3Rpb24gVCgpe3MuY2FtZXJhLmdldENhbWVyYSgpLmNhcHR1cmVJbWFnZSh5ZT0+VihbeWVdKSxiLHtmaWxlbmFtZTpKcisiL2NhbWVyYS8iLHJlc29sdXRpb246ImhpZ2giLGNyb3A6cixzaXplVHlwZTp0fSl9ZnVuY3Rpb24gRCgpe3MuZ2FsbGVyeS5waWNrKCh7ZmlsZXM6dmV9KT0+Vih2ZSksYix7bWF4aW11bTplLG11bHRpcGxlOiEwLHN5c3RlbTohMSxmaWxlbmFtZTpKcisiL2dhbGxlcnkvIixwZXJtaXNzaW9uQWxlcnQ6ITAsY3JvcDpyLHNpemVUeXBlOnR9KX1pZihuLmxlbmd0aD09PTEpe2lmKG4uaW5jbHVkZXMoImFsYnVtIikpe0QoKTtyZXR1cm59ZWxzZSBpZihuLmluY2x1ZGVzKCJjYW1lcmEiKSl7VCgpO3JldHVybn19cy5uYXRpdmVVSS5hY3Rpb25TaGVldCh7Y2FuY2VsOmcoInVuaS5jaG9vc2VJbWFnZS5jYW5jZWwiKSxidXR0b25zOlt7dGl0bGU6ZygidW5pLmNob29zZUltYWdlLnNvdXJjZVR5cGUuY2FtZXJhIil9LHt0aXRsZTpnKCJ1bmkuY2hvb3NlSW1hZ2Uuc291cmNlVHlwZS5hbGJ1bSIpfV19LHZlPT57c3dpdGNoKHZlLmluZGV4KXtjYXNlIDE6VCgpO2JyZWFrO2Nhc2UgMjpEKCk7YnJlYWs7ZGVmYXVsdDpiKCk7YnJlYWt9fSl9LFJFLGtFKSxTQT1FZSh4RSwoe3NvdXJjZVR5cGU6ZSxjb21wcmVzc2VkOnQsbWF4RHVyYXRpb246bixjYW1lcmE6cn0se3Jlc29sdmU6byxyZWplY3Q6Y30pPT57c2UoKTtsZXR7dDpnfT1ndCgpLGI9cHIoYyk7ZnVuY3Rpb24gVih2ZSl7cy5pby5nZXRWaWRlb0luZm8oe2ZpbGVQYXRoOnZlLHN1Y2Nlc3MoeWUpe2xldCBPZT17ZXJyTXNnOiJjaG9vc2VWaWRlbzpvayIsdGVtcEZpbGVQYXRoOnZlLHNpemU6eWUuc2l6ZSxkdXJhdGlvbjp5ZS5kdXJhdGlvbix3aWR0aDp5ZS53aWR0aCxoZWlnaHQ6eWUuaGVpZ2h0fTtvKE9lKX0sZmFpbDpifSl9ZnVuY3Rpb24gVCgpe3MuZ2FsbGVyeS5waWNrKCh7ZmlsZXM6dmV9KT0+Vih2ZVswXSksYix7ZmlsdGVyOiJ2aWRlbyIsc3lzdGVtOiExLG11bHRpcGxlOiEwLG1heGltdW06MSxmaWxlbmFtZTpKcisiL2dhbGxlcnkvIixwZXJtaXNzaW9uQWxlcnQ6ITAsdmlkZW9Db21wcmVzczp0fSl9ZnVuY3Rpb24gRCgpe3MuY2FtZXJhLmdldENhbWVyYSgpLnN0YXJ0VmlkZW9DYXB0dXJlKFYsYix7aW5kZXg6cj09PSJmcm9udCI/IjIiOiIxIix2aWRlb01heGltdW1EdXJhdGlvbjpuLGZpbGVuYW1lOkpyKyIvY2FtZXJhLyIsdmlkZW9Db21wcmVzczp0fSl9aWYoZS5sZW5ndGg9PT0xKXtpZihlLmluY2x1ZGVzKCJhbGJ1bSIpKXtUKCk7cmV0dXJufWVsc2UgaWYoZS5pbmNsdWRlcygiY2FtZXJhIikpe0QoKTtyZXR1cm59fXMubmF0aXZlVUkuYWN0aW9uU2hlZXQoe2NhbmNlbDpnKCJ1bmkuY2hvb3NlVmlkZW8uY2FuY2VsIiksYnV0dG9uczpbe3RpdGxlOmcoInVuaS5jaG9vc2VWaWRlby5zb3VyY2VUeXBlLmNhbWVyYSIpfSx7dGl0bGU6ZygidW5pLmNob29zZVZpZGVvLnNvdXJjZVR5cGUuYWxidW0iKX1dfSx2ZT0+e3N3aXRjaCh2ZS5pbmRleCl7Y2FzZSAxOkQoKTticmVhaztjYXNlIDI6VCgpO2JyZWFrO2RlZmF1bHQ6YigpO2JyZWFrfX0pfSxNRSxCRSksd0E9RWUoeUUsKGUse3Jlc29sdmU6dH0pPT57cy5rZXkuc2hvd1NvZnRLZXlib3JkKCksdCgpfSksQ0E9RWUoRUUsKGUse3Jlc29sdmU6dH0pPT57cy5rZXkuaGlkZVNvZnRLZXlib3JkKCksdCgpfSk7ZnVuY3Rpb24gZ2coZSl7b3QuaW52b2tlT25DYWxsYmFjayhLLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsZSl9bGV0IEFBPWduKEsuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e290Lm9uKEsuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSxnZyl9KSxPQT1maShLLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsKCk9PntvdC5vZmYoSy5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLGdnKX0pO2NsYXNzIFRBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9kb3dubG9hZGVyPXQsdC5hZGRFdmVudExpc3RlbmVyKCJzdGF0ZWNoYW5nZWQiLChuLHIpPT57bi5kb3dubG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKG89PntvKHtwcm9ncmVzczpNYXRoLnJvdW5kKG4uZG93bmxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSx0b3RhbEJ5dGVzV3JpdHRlbjpuLmRvd25sb2FkZWRTaXplLHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6bi50b3RhbFNpemV9KX0pfSl9YWJvcnQoKXt0aGlzLl9kb3dubG9hZGVyLmFib3J0KCl9b25Qcm9ncmVzc1VwZGF0ZSh0KXshei5pc0Z1bmN0aW9uKHQpfHx0aGlzLl9jYWxsYmFja3MucHVzaCh0KX1vZmZQcm9ncmVzc1VwZGF0ZSh0KXtsZXQgbj10aGlzLl9jYWxsYmFja3MuaW5kZXhPZih0KTtuPj0wJiZ0aGlzLl9jYWxsYmFja3Muc3BsaWNlKG4sMSl9b25IZWFkZXJzUmVjZWl2ZWQodCl7dGhyb3cgbmV3IEVycm9yKCJNZXRob2Qgbm90IGltcGxlbWVudGVkLiIpfW9mZkhlYWRlcnNSZWNlaXZlZCh0KXt0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuIil9fWxldCBQQT1QcihweSwoe3VybDplLGhlYWRlcjp0LHRpbWVvdXQ6bn0se3Jlc29sdmU6cixyZWplY3Q6b30pPT57bj0obnx8Ui5uZXR3b3JrVGltZW91dCYmUi5uZXR3b3JrVGltZW91dC5yZXF1ZXN0fHw2MCoxZTMpLzFlMztsZXQgYz1zLmRvd25sb2FkZXIuY3JlYXRlRG93bmxvYWQoZSx7dGltZW91dDpuLGZpbGVuYW1lOkpyKyIvZG93bmxvYWQvIixyZXRyeTowLHJldHJ5SW50ZXJ2YWw6MH0sKGIsVik9PntWP3Ioe3RlbXBGaWxlUGF0aDpiLmZpbGVuYW1lLHN0YXR1c0NvZGU6Vn0pOm8oYHN0YXR1c0NvZGU6ICR7Vn1gKX0pLGc9bmV3IFRBKGMpO2ZvcihsZXQgYiBpbiB0KXouaGFzT3duKHQsYikmJmMuc2V0UmVxdWVzdEhlYWRlcihiLHRbYl0pO3JldHVybiBjLnN0YXJ0KCksZ30sbXksdnkpLElBPWU9PntsZXQgdD1lWyJTZXQtQ29va2llIl18fGVbInNldC1jb29raWUiXSxuPVtdO2lmKCF0KXJldHVybltdO3RbMF09PT0iWyImJnRbdC5sZW5ndGgtMV09PT0iXSImJih0PXQuc2xpY2UoMSwtMSkpO2xldCByPXQuc3BsaXQoIjsiKTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylyW29dLmluZGV4T2YoIkV4cGlyZXM9IikhPT0tMXx8cltvXS5pbmRleE9mKCJleHBpcmVzPSIpIT09LTE/bi5wdXNoKHJbb10ucmVwbGFjZSgiLCIsIiIpKTpuLnB1c2gocltvXSk7cmV0dXJuIG49bi5qb2luKCI7Iikuc3BsaXQoIiwiKSxufTtmdW5jdGlvbiBOQShlLHQpe2lmKHouaXNTdHJpbmcoZS5kYXRhKSYmZS5kYXRhLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGUuZGF0YT1lLmRhdGEuc2xpY2UoMSkpLGUuc3RhdHVzQ29kZT1wYXJzZUludChTdHJpbmcoZS5zdGF0dXNDb2RlKSwxMCksei5pc1BsYWluT2JqZWN0KGUuaGVhZGVyKSYmKGUuaGVhZGVyPU9iamVjdC5rZXlzKGUuaGVhZGVyKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtsZXQgbz1lLmhlYWRlcltyXTtyZXR1cm4gei5pc0FycmF5KG8pP25bcl09by5qb2luKCIsIik6ei5pc1N0cmluZyhvKSYmKG5bcl09byksbn0se30pKSx0LmRhdGFUeXBlJiZ0LmRhdGFUeXBlLnRvTG93ZXJDYXNlKCk9PT0ianNvbiIpdHJ5e2UuZGF0YT1KU09OLnBhcnNlKGUuZGF0YSl9Y2F0Y2gobil7fXJldHVybiBlfWNsYXNzIGtBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlcXVlc3RUYXNrPXR9YWJvcnQoKXt0aGlzLl9yZXF1ZXN0VGFzay5hYm9ydCgpfW9mZkhlYWRlcnNSZWNlaXZlZCgpe31vbkhlYWRlcnNSZWNlaXZlZCgpe319bGV0IFJBPVByKG95LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtoZWFkZXI6cixtZXRob2Q6byxkYXRhOmMsdGltZW91dDpnLHVybDpiLHJlc3BvbnNlVHlwZTpWLHNzbFZlcmlmeTpULGZpcnN0SXB2NDpELHRsczp2ZX09ZSx5ZTtmb3IobGV0IFN0IGluIHIpaWYoU3QudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXt5ZT1yW1N0XTticmVha31vIT09IkdFVCImJnllJiZ5ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik9PT0wJiZ6LmlzUGxhaW5PYmplY3QoYykmJihjPUpTT04uc3RyaW5naWZ5KGMpKTtsZXQgT2U9WW8oInN0cmVhbSIpLGZ0PXt9LGh0LFZ0LHd0PSExO2ZvcihsZXQgU3QgaW4gcilpZighd3QmJlN0LnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIil7aWYod3Q9ITAsZnRbIkNvbnRlbnQtVHlwZSJdPXJbU3RdLG8hPT0iR0VUIiYmcltTdF0uaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik9PT0wJiYhei5pc1N0cmluZyhjKSYmIShjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXtsZXQgWHQ9W107Zm9yKGxldCBkbiBpbiBjKXouaGFzT3duKGMsZG4pJiZYdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChkbikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChjW2RuXSkpO2M9WHQuam9pbigiJiIpfX1lbHNlIGZ0W1N0XT1yW1N0XTshd3QmJm89PT0iUE9TVCImJihmdFsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIpLGcmJihodD1OKCgpPT57VnQ9ITAsbigidGltZW91dCIpfSxnKzIwMCkpO2xldCBFbj17bWV0aG9kOm8sdXJsOmIudHJpbSgpLGhlYWRlcnM6ZnQsdHlwZTpWPT09ImFycmF5YnVmZmVyIj8iYmFzZTY0IjoidGV4dCIsdGltZW91dDpnfHw2ZTUsc3NsVmVyaWZ5OiFULGZpcnN0SXB2NDpELHRsczp2ZX0sb249ITE7byE9PSJHRVQiJiYodG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/b249ITA6RW4uYm9keT16LmlzU3RyaW5nKGMpP2M6SlNPTi5zdHJpbmdpZnkoYykpO2xldCBhbj0oe29rOlN0LHN0YXR1czpYdCxkYXRhOmRuLGhlYWRlcnM6dG4sZXJyb3JNc2c6VG59KT0+e2lmKFZ0KXJldHVybjtodCYmeShodCk7bGV0IHZyPVh0O2lmKHZyPjApdChOQSh7ZGF0YTpTdCYmVj09PSJhcnJheWJ1ZmZlciI/enIoZG4pOmRuLHN0YXR1c0NvZGU6dnIsaGVhZGVyOnRuLGNvb2tpZXM6SUEodG4pfSxlKSk7ZWxzZXtsZXQgc249ImFib3J0IHN0YXR1c0NvZGU6Iit2cjtUbiYmKHNuPXNuKyIgIitUbiksbihzbil9fTtyZXR1cm4gb24/T2UuZmV0Y2hXaXRoQXJyYXlCdWZmZXIoeyJAdHlwZSI6ImJpbmFyeSIsYmFzZTY0OkxyKGMpfSxFbixhbik6T2UuZmV0Y2goRW4sYW4pLG5ldyBrQSh7YWJvcnQoKXtWdD0hMCxodCYmeShodCksbigiYWJvcnQiKX19KX0sdXksZnkpLHhBPUVlKGR5LCh7Y2VydGlmaWNhdGVzOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e1lvKCJzdHJlYW0iKS5jb25maWdNVExTKGUsKHt0eXBlOm8sY29kZTpjLG1lc3NhZ2U6Z30pPT57c3dpdGNoKG8pe2Nhc2Uic3VjY2VzcyI6dCh7Y29kZTpjfSk7YnJlYWs7Y2FzZSJmYWlsIjpuKGcse2NvZGU6Y30pO2JyZWFrfX0pfSxoeSxneSksTmw9W10sa2w9e30sS3U9e29wZW46IiIsY2xvc2U6IiIsZXJyb3I6IiIsbWVzc2FnZToiIn0sYWM7ZnVuY3Rpb24gQkEoZSl7bGV0IHQ9U3RyaW5nKERhdGUubm93KCkpLG47dHJ5e2FjfHwoYWM9WW8oInVuaS13ZWJTb2NrZXQiKSxNQShhYykpLGFjLldlYlNvY2tldCh7aWQ6dCx1cmw6ZS51cmwscHJvdG9jb2w6ei5pc0FycmF5KGUucHJvdG9jb2xzKT9lLnByb3RvY29scy5qb2luKCIsIik6ZS5wcm90b2NvbHMsaGVhZGVyOmUuaGVhZGVyfSl9Y2F0Y2gocil7bj1yfXJldHVybntzb2NrZXQ6YWMsc29ja2V0SWQ6dCxlcnJNc2c6bn19ZnVuY3Rpb24gTUEoZSl7ZS5vbm9wZW4odD0+e2xldCBuPWtsW3QuaWRdOyFufHxuLl9zb2NrZXRPbk9wZW4oKX0pLGUub25tZXNzYWdlKHQ9PntsZXQgbj1rbFt0LmlkXTshbnx8bi5fc29ja2V0T25NZXNzYWdlKHQpfSksZS5vbmVycm9yKHQ9PntsZXQgbj1rbFt0LmlkXTshbnx8bi5fc29ja2V0T25FcnJvcigpfSksZS5vbmNsb3NlKHQ9PntsZXR7aWQ6bixjb2RlOnIscmVhc29uOm99PXQsYz1rbFtuXTshY3x8Yy5fc29ja2V0T25DbG9zZSh7Y29kZTpyLHJlYXNvbjpvfSl9KX1jbGFzcyBMQXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9bix0aGlzLl9zb2NrZXQ9dCx0aGlzLl9jYWxsYmFja3M9e29wZW46W10sY2xvc2U6W10sZXJyb3I6W10sbWVzc2FnZTpbXX0sdGhpcy5DTE9TRUQ9Myx0aGlzLkNMT1NJTkc9Mix0aGlzLkNPTk5FQ1RJTkc9MCx0aGlzLk9QRU49MSx0aGlzLnJlYWR5U3RhdGU9dGhpcy5DTE9TRUQsISF0aGlzLl9zb2NrZXR9X3NvY2tldE9uT3Blbigpe3RoaXMucmVhZHlTdGF0ZT10aGlzLk9QRU4sdGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgib3BlbiIpfV9zb2NrZXRPbk1lc3NhZ2UodCl7dGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgibWVzc2FnZSIse2RhdGE6dHlwZW9mIHQuZGF0YT09Im9iamVjdCI/enIodC5kYXRhLmJhc2U2NCk6dC5kYXRhfSl9X3NvY2tldE9uRXJyb3IoKXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJlcnJvciIpLHRoaXMub25FcnJvck9yQ2xvc2UoKX1fc29ja2V0T25DbG9zZSh0KXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJjbG9zZSIsdCksdGhpcy5vbkVycm9yT3JDbG9zZSgpfW9uRXJyb3JPckNsb3NlKCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0VELGRlbGV0ZSBrbFt0aGlzLmlkXTtsZXQgdD1ObC5pbmRleE9mKHRoaXMpO3Q+PTAmJk5sLnNwbGljZSh0LDEpfXNvY2tldFN0YXRlQ2hhbmdlKHQsbj17fSl7bGV0e2NvZGU6cixyZWFzb246b309bixjPXQ9PT0ibWVzc2FnZSI/e2RhdGE6bi5kYXRhfTp0PT09ImNsb3NlIj97Y29kZTpyLHJlYXNvbjpvfTp7fTt0aGlzPT09TmxbMF0mJkt1W3RdJiZvdC5pbnZva2VPbkNhbGxiYWNrKEt1W3RdLGMpLHRoaXMuX2NhbGxiYWNrc1t0XS5mb3JFYWNoKGc9Pnt6LmlzRnVuY3Rpb24oZykmJmcoYyl9KX1zZW5kKHQsbj0hMCl7dGhpcy5yZWFkeVN0YXRlIT09dGhpcy5PUEVOJiZLLmNhbGxPcHRpb25zKHQsInNlbmRTb2NrZXRNZXNzYWdlOmZhaWwgV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiKTt0cnl7dGhpcy5fc29ja2V0LnNlbmQoe2lkOnRoaXMuaWQsZGF0YTp0eXBlb2YgdC5kYXRhPT0ib2JqZWN0Ij97IkB0eXBlIjoiYmluYXJ5IixiYXNlNjQ6THIodC5kYXRhKX06dC5kYXRhfSksbiYmSy5jYWxsT3B0aW9ucyh0LCJzZW5kU29ja2V0TWVzc2FnZTpvayIpfWNhdGNoKHIpe24mJksuY2FsbE9wdGlvbnModCxgc2VuZFNvY2tldE1lc3NhZ2U6ZmFpbCAke3J9YCl9fWNsb3NlKHQsbj0hMCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0lORzt0cnl7dGhpcy5fc29ja2V0LmNsb3NlKHouZXh0ZW5kKHtpZDp0aGlzLmlkLGFyZ3M6dH0pKSxuJiZLLmNhbGxPcHRpb25zKHQsImNsb3NlU29ja2V0Om9rIil9Y2F0Y2gocil7biYmSy5jYWxsT3B0aW9ucyh0LGBjbG9zZVNvY2tldDpmYWlsICR7cn1gKX19b25PcGVuKHQpe3RoaXMuX2NhbGxiYWNrcy5vcGVuLnB1c2godCl9b25DbG9zZSh0KXt0aGlzLl9jYWxsYmFja3MuY2xvc2UucHVzaCh0KX1vbkVycm9yKHQpe3RoaXMuX2NhbGxiYWNrcy5lcnJvci5wdXNoKHQpfW9uTWVzc2FnZSh0KXt0aGlzLl9jYWxsYmFja3MubWVzc2FnZS5wdXNoKHQpfX1sZXQgREE9UHIoeXksKHt1cmw6ZSxwcm90b2NvbHM6dCxoZWFkZXI6bixtZXRob2Q6cn0se3Jlc29sdmU6byxyZWplY3Q6Y30pPT57bGV0e3NvY2tldDpnLHNvY2tldElkOmIsZXJyTXNnOlZ9PUJBKHt1cmw6ZSxwcm90b2NvbHM6dCxoZWFkZXI6bixtZXRob2Q6cn0pLFQ9bmV3IExBKGcsYik7cmV0dXJuIFY/TigoKT0+e2MoVil9LDApOihObC5wdXNoKFQpLGtsW2JdPVQpLE4oKCk9PntvKCl9LDApLFR9LHd5LFN5KSxGQT1FZShDeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1ObFswXTtpZighcnx8ci5yZWFkeVN0YXRlIT09ci5PUEVOKXtuKCJXZWJTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCIpO3JldHVybn1yLnNlbmQoe2RhdGE6ZS5kYXRhfSwhMSksdCgpfSxBeSksVkE9RWUoT3ksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9TmxbMF07aWYoIXIpe24oIldlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7cmV0dXJufXIucmVhZHlTdGF0ZT1yLkNMT1NJTkcsci5jbG9zZShlLCExKSx0KCl9LFR5KTtmdW5jdGlvbiBCYyhlKXtsZXQgdD1gb25Tb2NrZXQke3ouY2FwaXRhbGl6ZShlKX1gO3JldHVybiBnbih0LCgpPT57S3VbZV09dH0pfWxldCBVQT1CYygib3BlbiIpLCRBPUJjKCJlcnJvciIpLEhBPUJjKCJtZXNzYWdlIiksakE9QmMoImNsb3NlIik7Y2xhc3MgekF7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX3VwbG9hZGVyPXQsdC5hZGRFdmVudExpc3RlbmVyKCJzdGF0ZWNoYW5nZWQiLChuLHIpPT57bi51cGxvYWRlZFNpemUmJm4udG90YWxTaXplJiZ0aGlzLl9jYWxsYmFja3MuZm9yRWFjaChvPT57byh7cHJvZ3Jlc3M6cGFyc2VJbnQoU3RyaW5nKG4udXBsb2FkZWRTaXplL24udG90YWxTaXplKjEwMCkpLHRvdGFsQnl0ZXNTZW50Om4udXBsb2FkZWRTaXplLHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZDpuLnRvdGFsU2l6ZX0pfSl9KX1hYm9ydCgpe3RoaXMuX3VwbG9hZGVyLmFib3J0KCl9b25Qcm9ncmVzc1VwZGF0ZSh0KXshei5pc0Z1bmN0aW9uKHQpfHx0aGlzLl9jYWxsYmFja3MucHVzaCh0KX1vbkhlYWRlcnNSZWNlaXZlZCgpe31vZmZQcm9ncmVzc1VwZGF0ZSh0KXtsZXQgbj10aGlzLl9jYWxsYmFja3MuaW5kZXhPZih0KTtuPj0wJiZ0aGlzLl9jYWxsYmFja3Muc3BsaWNlKG4sMSl9b2ZmSGVhZGVyc1JlY2VpdmVkKCl7fX1sZXQgV0E9UHIoX3ksKHt1cmw6ZSx0aW1lb3V0OnQsaGVhZGVyOm4sZm9ybURhdGE6cixmaWxlczpvLGZpbGVQYXRoOmMsbmFtZTpnfSx7cmVzb2x2ZTpiLHJlamVjdDpWfSk9Pnt0PSh0fHxSLm5ldHdvcmtUaW1lb3V0JiZSLm5ldHdvcmtUaW1lb3V0LnVwbG9hZEZpbGV8fDYwKjFlMykvMWUzO2xldCBUPXMudXBsb2FkZXIuY3JlYXRlVXBsb2FkKGUse3RpbWVvdXQ6dCxyZXRyeTowLHJldHJ5SW50ZXJ2YWw6MH0sKHZlLHllKT0+e3llP2Ioe2RhdGE6dmUucmVzcG9uc2VUZXh0LHN0YXR1c0NvZGU6eWV9KTpWKGBzdGF0dXNDb2RlOiAke3llfWApfSk7Zm9yKGxldCB2ZSBpbiBuKXouaGFzT3duKG4sdmUpJiZULnNldFJlcXVlc3RIZWFkZXIodmUsU3RyaW5nKG5bdmVdKSk7Zm9yKGxldCB2ZSBpbiByKXouaGFzT3duKHIsdmUpJiZULmFkZERhdGEodmUsU3RyaW5nKHJbdmVdKSk7byYmby5sZW5ndGg/by5mb3JFYWNoKHZlPT57VC5hZGRGaWxlKEhlKHZlLnVyaSkse2tleTp2ZS5uYW1lfHwiZmlsZSJ9KX0pOlQuYWRkRmlsZShIZShjKSx7a2V5Omd9KTtsZXQgRD1uZXcgekEoVCk7cmV0dXJuIFQuc3RhcnQoKSxEfSxFeSxieSksUHM9e30sR0E9WyJwbGF5IiwiY2FucGxheSIsImVuZGVkIiwic3RvcCIsIndhaXRpbmciLCJzZWVraW5nIiwic2Vla2VkIiwicGF1c2UiXSxwZz0icGxheWJhY2siLFlBPTIwMCxxQT1lPT57bGV0IHQ9UHNbZV07IXR8fHQuaW5pdFN0YXRlQ2hhZ2V8fCh0LmluaXRTdGF0ZUNoYWdlPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG49Pnt2Zyh7c3RhdGU6ImVycm9yIixhdWRpb0lkOmUsZXJyTXNnOiJNZWRpYUVycm9yIixlcnJDb2RlOm4uY29kZX0pfSksR0EuZm9yRWFjaChuPT57dC5hZGRFdmVudExpc3RlbmVyKG4sKCk9PntuPT09InBsYXkiP3QuaXNTdG9wcGVkPSExOm49PT0ic3RvcCImJih0LmlzU3RvcHBlZD0hMCksdmcoe3N0YXRlOm4sYXVkaW9JZDplfSl9KX0pKX07ZnVuY3Rpb24gSkEoKXtsZXQgZT1gJHtEYXRlLm5vdygpfSR7TWF0aC5yYW5kb20oKX1gLHQ9UHNbZV09cy5hdWRpby5jcmVhdGVQbGF5ZXIoIiIpO3JldHVybiB0LnNyYz0iIix0LnZvbHVtZT0xLHQuc3RhcnRUaW1lPTAsdC5zZXRTZXNzaW9uQ2F0ZWdvcnkocGcpLHtlcnJNc2c6ImNyZWF0ZUF1ZGlvSW5zdGFuY2U6b2siLGF1ZGlvSWQ6ZX19ZnVuY3Rpb24gS0Eoe2F1ZGlvSWQ6ZSxzcmM6dCxzdGFydFRpbWU6bixhdXRvcGxheTpyPSExLGxvb3A6bz0hMSxvYmV5TXV0ZVN3aXRjaDpjLHZvbHVtZTpnLHNlc3Npb25DYXRlZ29yeTpiPXBnLHBsYXliYWNrUmF0ZTpWfSl7bGV0IFQ9UHNbZV07aWYoVCl7bGV0IEQ9e2xvb3A6byxhdXRvcGxheTpyfTtpZih0KXtsZXQgdmU9SGUodCk7VC5zcmMhPT12ZSYmKFQuc3JjPUQuc3JjPXZlKX1uJiYoVC5zdGFydFRpbWU9RC5zdGFydFRpbWU9biksdHlwZW9mIGc9PSJudW1iZXIiJiYoVC52b2x1bWU9RC52b2x1bWU9ZyksVC5zZXRTdHlsZXMoRCksYiYmVC5zZXRTZXNzaW9uQ2F0ZWdvcnkoYiksViYmVC5wbGF5YmFja1JhdGUmJlQucGxheWJhY2tSYXRlKFYpLHFBKGUpfXJldHVybntlcnJNc2c6InNldEF1ZGlvU3RhdGU6b2sifX1mdW5jdGlvbiBaQSh7YXVkaW9JZDplfSl7bGV0IHQ9UHNbZV07aWYoIXQpcmV0dXJue2Vyck1zZzoiZ2V0QXVkaW9TdGF0ZTpmYWlsIn07bGV0e3NyYzpuLHN0YXJ0VGltZTpyLHZvbHVtZTpvfT10O3JldHVybntlcnJNc2c6ImdldEF1ZGlvU3RhdGU6b2siLGR1cmF0aW9uOjFlMyoodC5nZXREdXJhdGlvbigpfHwwKSxjdXJyZW50VGltZTp0LmlzU3RvcHBlZD8wOjFlMyp0LmdldFBvc2l0aW9uKCkscGF1c2VkOnQuaXNQYXVzZWQoKSxzcmM6bix2b2x1bWU6byxzdGFydFRpbWU6MWUzKnIsYnVmZmVyZWQ6MWUzKnQuZ2V0QnVmZmVyZWQoKX19ZnVuY3Rpb24gWEEoe29wZXJhdGlvblR5cGU6ZSxhdWRpb0lkOnQsY3VycmVudFRpbWU6bn0pe2xldCByPVBzW3RdO3N3aXRjaChlKXtjYXNlInBsYXkiOmNhc2UicGF1c2UiOmNhc2Uic3RvcCI6cltlPT09InBsYXkiJiZyLmlzUGF1c2VkKCk/InJlc3VtZSI6ZV0oKTticmVhaztjYXNlInNlZWsiOnR5cGVvZiBuIT0idW5kZWZpbmVkIiYmci5zZWVrVG8obi8xZTMpO2JyZWFrfXJldHVybntlcnJNc2c6Im9wZXJhdGVBdWRpbzpvayJ9fWxldCBadT1PYmplY3QuY3JlYXRlKG51bGwpLHZnPSh7c3RhdGU6ZSxhdWRpb0lkOnQsZXJyTXNnOm4sZXJyQ29kZTpyfSk9PntsZXQgbz1adVt0XTtpZihvKWlmKFF1KG8sZSxuLHIpLGU9PT0icGxheSIpe2xldCBjPW8uY3VycmVudFRpbWU7UXUobywidGltZVVwZGF0ZSIpLG8uX190aW1pbmc9aCgoKT0+e28uY3VycmVudFRpbWUhPT1jJiZRdShvLCJ0aW1lVXBkYXRlIil9LFlBKX1lbHNlKGU9PT0icGF1c2UifHxlPT09InN0b3AifHxlPT09ImVycm9yIikmJkUoby5fX3RpbWluZyl9LFFBPVt7bmFtZToic3JjIixjYWNoZTohMH0se25hbWU6InN0YXJ0VGltZSIsZGVmYXVsdDowLGNhY2hlOiEwfSx7bmFtZToiYXV0b3BsYXkiLGRlZmF1bHQ6ITEsY2FjaGU6ITB9LHtuYW1lOiJsb29wIixkZWZhdWx0OiExLGNhY2hlOiEwfSx7bmFtZToib2JleU11dGVTd2l0Y2giLGRlZmF1bHQ6ITAscmVhZG9ubHk6ITAsY2FjaGU6ITB9LHtuYW1lOiJkdXJhdGlvbiIscmVhZG9ubHk6ITB9LHtuYW1lOiJjdXJyZW50VGltZSIscmVhZG9ubHk6ITB9LHtuYW1lOiJwYXVzZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToiYnVmZmVyZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToidm9sdW1lIn0se25hbWU6InBsYXliYWNrUmF0ZSIsY2FjaGU6ITB9XTtjbGFzcyBYdXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmlkPXQsdGhpcy5fY2FsbGJhY2tzPXt9LHRoaXMuX29wdGlvbnM9e30sUWQuZm9yRWFjaChuPT57dGhpcy5fY2FsbGJhY2tzW25dPVtdfSksUUEuZm9yRWFjaChuPT57bGV0IHI9bi5uYW1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHIse2dldDooKT0+e2xldCBvPW4uY2FjaGU/dGhpcy5fb3B0aW9uczpaQSh7YXVkaW9JZDp0aGlzLmlkfSksYz1yIGluIG8/b1tyXTpuLmRlZmF1bHQ7cmV0dXJuIHR5cGVvZiBjPT0ibnVtYmVyIiYmciE9PSJ2b2x1bWUiP2MvMWUzOmN9LHNldDpuLnJlYWRvbmx5P3ZvaWQgMDpvPT57dGhpcy5fb3B0aW9uc1tyXT1vLEtBKHouZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMse2F1ZGlvSWQ6dGhpcy5pZH0pKX19KX0pLGVPKCl9cGxheSgpe3RoaXMuX29wZXJhdGUoInBsYXkiKX1wYXVzZSgpe3RoaXMuX29wZXJhdGUoInBhdXNlIil9c3RvcCgpe3RoaXMuX29wZXJhdGUoInN0b3AiKX1zZWVrKHQpe3RoaXMuX29wZXJhdGUoInNlZWsiLHtjdXJyZW50VGltZTp0KjFlM30pfWRlc3Ryb3koKXtFKHRoaXMuX190aW1pbmcpLFBzW3RoaXMuaWRdJiYoUHNbdGhpcy5pZF0uY2xvc2UoKSxkZWxldGUgUHNbdGhpcy5pZF0pLGRlbGV0ZSBadVt0aGlzLmlkXX1fb3BlcmF0ZSh0LG4pe1hBKHouZXh0ZW5kKHt9LG4se2F1ZGlvSWQ6dGhpcy5pZCxvcGVyYXRpb25UeXBlOnR9KSl9fWxldCBlTz1LLm9uY2UoKCk9PntRZC5mb3JFYWNoKGU9PntYdS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCl7ei5pc0Z1bmN0aW9uKHQpJiZ0aGlzLl9jYWxsYmFja3NbZV0ucHVzaCh0KX19KSxKXy5mb3JFYWNoKGU9PntYdS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCl7bGV0IG49dGhpcy5fY2FsbGJhY2tzW2VdLHI9bi5pbmRleE9mKHQpO3I+PTAmJm4uc3BsaWNlKHIsMSl9fSl9KTtmdW5jdGlvbiBRdShlLHQsbixyKXtsZXQgbz1gb24ke3ouY2FwaXRhbGl6ZSh0KX1gO2UuX2NhbGxiYWNrc1tvXS5mb3JFYWNoKGM9Pnt6LmlzRnVuY3Rpb24oYykmJmModD09PSJlcnJvciI/e2Vyck1zZzpuLGVyckNvZGU6cn06e30pfSl9bGV0IHRPPUx0KENfLCgpPT57bGV0e2F1ZGlvSWQ6ZX09SkEoKSx0PW5ldyBYdShlKTtyZXR1cm4gWnVbZV09dCx0fSksbk89WyJjYW5wbGF5IiwicGxheSIsInBhdXNlIiwic3RvcCIsImVuZGVkIiwidGltZVVwZGF0ZSIsInByZXYiLCJuZXh0IiwiZXJyb3IiLCJ3YWl0aW5nIl0sbWc9e2NhbnBsYXk6W10scGxheTpbXSxwYXVzZTpbXSxzdG9wOltdLGVuZGVkOltdLHRpbWVVcGRhdGU6W10scHJldjpbXSxuZXh0OltdLGVycm9yOltdLHdhaXRpbmc6W119LGZuLGVmPW51bGwsck89MjUwLGlPPVsicGxheSIsInBhdXNlIiwiZW5kZWQiLCJzdG9wIiwiY2FucGxheSJdO2Z1bmN0aW9uIG9PKCl7TWMoKSxlbCh7c3RhdGU6InRpbWVVcGRhdGUifSksZWY9aCgoKT0+e2VsKHtzdGF0ZToidGltZVVwZGF0ZSJ9KX0sck8pfWZ1bmN0aW9uIE1jKCl7ZWYhPT1udWxsJiZFKGVmKX1mdW5jdGlvbiBhTygpe2lmKGZuKXJldHVybjtsZXQgZT1vdC5pbnZva2VPbkNhbGxiYWNrO2ZuPXMuYXVkaW8uY3JlYXRlUGxheWVyKHthdXRvcGxheTohMCxiYWNrZ3JvdW5kQ29udHJvbDohMH0pLGZuLnNyYz1mbi50aXRsZT1mbi5lcG5hbWU9Zm4uc2luZ2VyPWZuLmNvdmVySW1nVXJsPWZuLndlYlVybD0iIixmbi5zdGFydFRpbWU9MCxpTy5mb3JFYWNoKHQ9Pntmbi5hZGRFdmVudExpc3RlbmVyKHQsKCk9Pnt0PT09InBsYXkiPyhmbi5pc1N0b3BwZWQ9ITEsb08oKSk6dD09PSJzdG9wIiYmKGZuLmlzU3RvcHBlZD0hMCksKHQ9PT0icGF1c2UifHx0PT09ImVuZGVkInx8dD09PSJzdG9wIikmJk1jKCk7bGV0IG49YG9uTXVzaWMke3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7ZShuLHtkYXRhVXJsOmZuLnNyYyxlcnJNc2c6YCR7bn06b2tgfSksZWwoe3N0YXRlOnQsZGF0YVVybDpmbi5zcmN9KX0pfSksZm4uYWRkRXZlbnRMaXN0ZW5lcigid2FpdGluZyIsKCk9PntNYygpLGVsKHtzdGF0ZToid2FpdGluZyIsZGF0YVVybDpmbi5zcmN9KX0pLGZuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0PT57TWMoKSxlKCJvbk11c2ljRXJyb3IiLHtkYXRhVXJsOmZuLnNyYyxlcnJNc2c6IkVycm9yOiIrdC5tZXNzYWdlfSksZWwoe3N0YXRlOiJlcnJvciIsZGF0YVVybDpmbi5zcmMsZXJyTXNnOnQubWVzc2FnZSxlcnJDb2RlOnQuY29kZX0pfSksZm4uYWRkRXZlbnRMaXN0ZW5lcigicHJldiIsKCk9PntlbCh7c3RhdGU6InByZXYifSl9KSxmbi5hZGRFdmVudExpc3RlbmVyKCJuZXh0IiwoKT0+e2VsKHtzdGF0ZToibmV4dCJ9KX0pfWZ1bmN0aW9uIHNPKCl7bGV0IGU9e2R1cmF0aW9uOjAsY3VycmVudFRpbWU6MCxwYXVzZWQ6ITEsc3JjOiIiLGJ1ZmZlcmVkOjAsdGl0bGU6IiIsZXBuYW1lOiIiLHNpbmdlcjoiIixjb3ZlckltZ1VybDoiIix3ZWJVcmw6IiIsc3RhcnRUaW1lOjAsZXJyTXNnOiJnZXRCYWNrZ3JvdW5kQXVkaW9TdGF0ZTpvayJ9O2lmKGZuKXtsZXQgdD17ZHVyYXRpb246Zm4uZ2V0RHVyYXRpb24oKXx8MCxjdXJyZW50VGltZTpmbi5pc1N0b3BwZWQ/MDpmbi5nZXRQb3NpdGlvbigpLHBhdXNlZDpmbi5pc1BhdXNlZCgpLHNyYzpmbi5zcmMsYnVmZmVyZWQ6Zm4uZ2V0QnVmZmVyZWQoKSx0aXRsZTpmbi50aXRsZSxlcG5hbWU6Zm4uZXBuYW1lLHNpbmdlcjpmbi5zaW5nZXIsY292ZXJJbWdVcmw6Zm4uY292ZXJJbWdVcmwsd2ViVXJsOmZuLndlYlVybCxzdGFydFRpbWU6Zm4uc3RhcnRUaW1lfTtlPXouZXh0ZW5kKGUsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gX2coZSx0KXthTygpO2xldCBuPVsic3JjIiwic3RhcnRUaW1lIiwiY292ZXJJbWdVcmwiLCJ3ZWJVcmwiLCJzaW5nZXIiLCJlcG5hbWUiLCJ0aXRsZSJdO2lmKHQ9PT0icGxheWJhY2tSYXRlIil7bGV0IG89ZVt0XTtmbi5wbGF5YmFja1JhdGUmJmZuLnBsYXliYWNrUmF0ZShwYXJzZUZsb2F0KG8pKTtyZXR1cm59bGV0IHI9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChvPT57aWYobi5pbmRleE9mKG8pPj0wKXtsZXQgYz1lW29dO289PT1uWzBdJiZjJiYoYz1IZShjKSksZm5bb109cltvXT1jfX0pLGZuLnNldFN0eWxlcyhyKX1mdW5jdGlvbiBsTyh7b3BlcmF0aW9uVHlwZTplLHNyYzp0LHBvc2l0aW9uOm4sYXBpOnI9Im9wZXJhdGVNdXNpY1BsYXllciIsdGl0bGU6byxjb3ZlckltZ1VybDpjfSl7dmFyIGc9WyJyZXN1bWUiLCJwYXVzZSIsInN0b3AiXTtyZXR1cm4gZy5pbmRleE9mKGUpPjA/Zm4mJmZuW2VdKCk6ZT09PSJwbGF5Ij8oX2coe3NyYzp0LHN0YXJ0VGltZTpuLHRpdGxlOm8sY292ZXJJbWdVcmw6Y30pLGZuLnBsYXkoKSk6ZT09PSJzZWVrIiYmZm4mJmZuLnNlZWtUbyhuKSx7ZXJyTXNnOmAke3J9Om9rYH19ZnVuY3Rpb24gY08oe29wZXJhdGlvblR5cGU6ZSxzcmM6dCxzdGFydFRpbWU6bixjdXJyZW50VGltZTpyfSl7cmV0dXJuIGxPKHtvcGVyYXRpb25UeXBlOmUsc3JjOnQscG9zaXRpb246bnx8cnx8MCxhcGk6Im9wZXJhdGVCYWNrZ3JvdW5kQXVkaW8ifSl9ZnVuY3Rpb24gZWwoe3N0YXRlOmUsZXJyTXNnOnQsZXJyQ29kZTpuLGRhdGFVcmw6cn0pe21nW2VdLmZvckVhY2gobz0+e3ouaXNGdW5jdGlvbihvKSYmbyhlPT09ImVycm9yIj97ZXJyTXNnOnQsZXJyQ29kZTpufTp7fSl9KX1sZXQgdU89Sy5vbmNlKCgpPT57bk8uZm9yRWFjaChlPT57YmcucHJvdG90eXBlW2BvbiR7ei5jYXBpdGFsaXplKGUpfWBdPWZ1bmN0aW9uKHQpe21nW2VdLnB1c2godCl9fSl9KSxmTz1be25hbWU6ImR1cmF0aW9uIixyZWFkb25seTohMH0se25hbWU6ImN1cnJlbnRUaW1lIixyZWFkb25seTohMH0se25hbWU6InBhdXNlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJzcmMiLGNhY2hlOiEwfSx7bmFtZToic3RhcnRUaW1lIixkZWZhdWx0OjAsY2FjaGU6ITB9LHtuYW1lOiJidWZmZXJlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJ0aXRsZSIsY2FjaGU6ITB9LHtuYW1lOiJlcG5hbWUiLGNhY2hlOiEwfSx7bmFtZToic2luZ2VyIixjYWNoZTohMH0se25hbWU6ImNvdmVySW1nVXJsIixjYWNoZTohMH0se25hbWU6IndlYlVybCIsY2FjaGU6ITB9LHtuYW1lOiJwcm90b2NvbCIscmVhZG9ubHk6ITAsZGVmYXVsdDoiaHR0cCJ9LHtuYW1lOiJwbGF5YmFja1JhdGUiLGRlZmF1bHQ6MSxjYWNoZTohMH1dO2NsYXNzIGJne2NvbnN0cnVjdG9yKCl7dGhpcy5fb3B0aW9ucz17fSxmTy5mb3JFYWNoKHQ9PntsZXQgbj10Lm5hbWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0OigpPT57bGV0IHI9dC5jYWNoZT90aGlzLl9vcHRpb25zOnNPKCk7cmV0dXJuIG4gaW4gcj9yW25dOnQuZGVmYXVsdH0sc2V0OnQucmVhZG9ubHk/dm9pZCAwOnI9Pnt0aGlzLl9vcHRpb25zW25dPXIsX2codGhpcy5fb3B0aW9ucyxuKX19KX0pLHVPKCl9cGxheSgpe3RoaXMuX29wZXJhdGUoInBsYXkiKX1wYXVzZSgpe3RoaXMuX29wZXJhdGUoInBhdXNlIil9c3RvcCgpe3RoaXMuX29wZXJhdGUoInN0b3AiKX1zZWVrKHQpe3RoaXMuX29wZXJhdGUoInNlZWsiLHtjdXJyZW50VGltZTp0fSl9X29wZXJhdGUodCxuKXtjTyh6LmV4dGVuZCh7fSxuLHtvcGVyYXRpb25UeXBlOnR9KSl9fWxldCBFZyxkTz1MdChIYiwoKT0+RWd8fChFZz1uZXcgYmcpKTtjbGFzcyBoT3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9dCx0aGlzLmN0eD1ufXN0YXJ0KHQpe3JldHVybiBKdCh0aGlzLmN0eCwic3RhcnQiLHQpfXN0b3AodCl7cmV0dXJuIEp0KHRoaXMuY3R4LCJzdG9wIix0KX1wYXVzZSh0KXtyZXR1cm4gSnQodGhpcy5jdHgsInBhdXNlIix0KX1yZXN1bWUodCl7cmV0dXJuIEp0KHRoaXMuY3R4LCJyZXN1bWUiLHQpfXN3aXRjaENhbWVyYSh0KXtyZXR1cm4gSnQodGhpcy5jdHgsInN3aXRjaENhbWVyYSIsdCl9c25hcHNob3QodCl7cmV0dXJuIEp0KHRoaXMuY3R4LCJzbmFwc2hvdCIsdCl9dG9nZ2xlVG9yY2godCl7cmV0dXJuIEp0KHRoaXMuY3R4LCJ0b2dnbGVUb3JjaCIsdCl9cGxheUJHTSh0KXtyZXR1cm4genQodGhpcy5jdHgsInBsYXlCR00iLHQpfXN0b3BCR00odCl7cmV0dXJuIEp0KHRoaXMuY3R4LCJzdG9wQkdNIix0KX1wYXVzZUJHTSh0KXtyZXR1cm4gSnQodGhpcy5jdHgsInBhdXNlQkdNIix0KX1yZXN1bWVCR00odCl7cmV0dXJuIEp0KHRoaXMuY3R4LCJyZXN1bWVCR00iLHQpfXNldEJHTVZvbHVtZSh0KXtyZXR1cm4genQodGhpcy5jdHgsInNldEJHTVZvbHVtZSIsdCl9c3RhcnRQcmV2aWV3KHQpe3JldHVybiBKdCh0aGlzLmN0eCwic3RhcnRQcmV2aWV3Iix0KX1zdG9wUHJldmlldyh0KXtyZXR1cm4gSnQodGhpcy5jdHgsInN0b3BQcmV2aWV3Iix0KX19ZnVuY3Rpb24gSXMoZSx0LG4scil7b3QuaW52b2tlVmlld01ldGhvZCgibGl2ZXB1c2hlci4iK2Use2xpdmVQdXNoZXJJZDplLHR5cGU6bixkYXRhOnJ9LHQpfWNsYXNzIGdPe2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW59c3RhcnQoKXtJcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzdGFydCIpfXN0b3AoKXtJcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzdG9wIil9cGF1c2UoKXtJcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJwYXVzZSIpfXJlc3VtZSgpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlc3VtZSIpfXN3aXRjaENhbWVyYSgpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInN3aXRjaENhbWVyYSIpfXN0YXJ0UHJldmlldygpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInByZXZpZXciKX1zdG9wUHJldmlldygpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInN0b3AiKX1zbmFwc2hvdCgpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNuYXBzaG90Iil9fWxldCBwTz1MdChBXywoZSx0KT0+e2lmKHQuJHBhZ2UubWV0YS5pc05WdWUpe2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oInVuaS5jcmVhdGVMaXZlUHVzaGVyQ29udGV4dDogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudCIpO2xldCBuPSR0KGUsdCk7cmV0dXJuIG4/bmV3IGhPKGUsbik6Y29uc29sZS53YXJuKCJDYW4gbm90IGZpbmQgYCIrZSsiYCIpfXJldHVybiBuZXcgZ08oZSx0LiRwYWdlLmlkKX0sT18pLE5pPTMuMTQxNTkyNjUzNTg5NzkzLExjPTYzNzgyNDUsRGM9LjAwNjY5MzQyMTYyMjk2NTk0MztmdW5jdGlvbiB2TyhlLHQpe2lmKHQ9K3QsZT0rZSx5ZyhlLHQpKXJldHVybltlLHRdO2xldCBuPVNnKGUtMTA1LHQtMzUpLHI9d2coZS0xMDUsdC0zNSksbz10LzE4MCpOaSxjPU1hdGguc2luKG8pO2M9MS1EYypjKmM7bGV0IGc9TWF0aC5zcXJ0KGMpO249bioxODAvKExjKigxLURjKS8oYypnKSpOaSkscj1yKjE4MC8oTGMvZypNYXRoLmNvcyhvKSpOaSk7bGV0IGI9dCtuLFY9ZStyO3JldHVybltlKjItVix0KjItYl19ZnVuY3Rpb24gbU8oZSx0KXtpZih0PSt0LGU9K2UseWcoZSx0KSlyZXR1cm5bZSx0XTtsZXQgbj1TZyhlLTEwNSx0LTM1KSxyPXdnKGUtMTA1LHQtMzUpLG89dC8xODAqTmksYz1NYXRoLnNpbihvKTtjPTEtRGMqYypjO2xldCBnPU1hdGguc3FydChjKTtuPW4qMTgwLyhMYyooMS1EYykvKGMqZykqTmkpLHI9cioxODAvKExjL2cqTWF0aC5jb3MobykqTmkpO2xldCBiPXQrbjtyZXR1cm5bZStyLGJdfWxldCB5Zz1mdW5jdGlvbihlLHQpe3JldHVybiBlPDcyLjAwNHx8ZT4xMzcuODM0N3x8dDwuODI5M3x8dD41NS44MjcxfHwhMX0sU2c9ZnVuY3Rpb24oZSx0KXtsZXQgbj0tMTAwKzIqZSszKnQrLjIqdCp0Ky4xKmUqdCsuMipNYXRoLnNxcnQoTWF0aC5hYnMoZSkpO3JldHVybiBuKz0oMjAqTWF0aC5zaW4oNiplKk5pKSsyMCpNYXRoLnNpbigyKmUqTmkpKSoyLzMsbis9KDIwKk1hdGguc2luKHQqTmkpKzQwKk1hdGguc2luKHQvMypOaSkpKjIvMyxuKz0oMTYwKk1hdGguc2luKHQvMTIqTmkpKzMyMCpNYXRoLnNpbih0Kk5pLzMwKSkqMi8zLG59LHdnPWZ1bmN0aW9uKGUsdCl7bGV0IG49MzAwK2UrMip0Ky4xKmUqZSsuMSplKnQrLjEqTWF0aC5zcXJ0KE1hdGguYWJzKGUpKTtyZXR1cm4gbis9KDIwKk1hdGguc2luKDYqZSpOaSkrMjAqTWF0aC5zaW4oMiplKk5pKSkqMi8zLG4rPSgyMCpNYXRoLnNpbihlKk5pKSs0MCpNYXRoLnNpbihlLzMqTmkpKSoyLzMsbis9KDE1MCpNYXRoLnNpbihlLzEyKk5pKSszMDAqTWF0aC5zaW4oZS8zMCpOaSkpKjIvMyxufTtmdW5jdGlvbiBDZyhlLHQsbil7bGV0IHI9dC5jb29yZHM7aWYoZSE9PXQuY29vcmRzVHlwZSl7bGV0IG87ZT09PSJ3Z3M4NCI/bz12TyhyLmxvbmdpdHVkZSxyLmxhdGl0dWRlKTplPT09ImdjajAyIiYmKG89bU8oci5sb25naXR1ZGUsci5sYXRpdHVkZSkpLG8mJihyLmxvbmdpdHVkZT1vWzBdLHIubGF0aXR1ZGU9b1sxXSl9bih7dHlwZTplLGFsdGl0dWRlOnIuYWx0aXR1ZGV8fDAsbGF0aXR1ZGU6ci5sYXRpdHVkZSxsb25naXR1ZGU6ci5sb25naXR1ZGUsc3BlZWQ6ci5zcGVlZCxhY2N1cmFjeTpyLmFjY3VyYWN5LGFkZHJlc3M6dC5hZGRyZXNzLGVyck1zZzoiZ2V0TG9jYXRpb246b2sifSl9bGV0IF9PPUVlKENFLCh7dHlwZTplPSJ3Z3M4NCIsZ2VvY29kZTp0PSExLGFsdGl0dWRlOm49ITEsaGlnaEFjY3VyYWN5RXhwaXJlVGltZTpyLGlzSGlnaEFjY3VyYWN5Om89ITF9LHtyZXNvbHZlOmMscmVqZWN0Omd9KT0+e3MuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGI9PntDZyhlLGIsYyl9LGI9PntpZihiLmNvZGU9PT0xNTAxKXtDZyhlLGIsYyk7cmV0dXJufWcoImdldExvY2F0aW9uOmZhaWwgIitiLm1lc3NhZ2UpfSx7Z2VvY29kZTp0LGVuYWJsZUhpZ2hBY2N1cmFjeTpvfHxuLHRpbWVvdXQ6cixjb29yZHNUeXBlOmV9KX0sT0UsQUUpLGJPPUVlKFNFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCBvPXFoKCkhPT0ibGlnaHQiLGMsZz1YaSh7dXJsOiJfX3VuaWFwcGNob29zZWxvY2F0aW9uIixkYXRhOnouZXh0ZW5kKHt9LGUse2xvY2FsZTpLbCgpfSksc3R5bGU6e2FuaW1hdGlvblR5cGU6ZS5hbmltYXRpb25UeXBlfHwic2xpZGUtaW4tYm90dG9tIix0aXRsZU5WaWV3OiExLHBvcEdlc3R1cmU6ImNsb3NlIixzY3JvbGxJbmRpY2F0b3I6Im5vbmUifSxvbk1lc3NhZ2Uoe2V2ZW50OmIsZGV0YWlsOlZ9KXtiPT09InNlbGVjdGVkIiYmKGM9Vil9LG9uQ2xvc2UoKXtvJiZzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgiZGFyayIpLGM/dChjKTpuKCJjYW5jZWwiKX19KTtvJiYocy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0IiksZy53ZWJ2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLCh7dHlwZTpiLHJlc3VsdDpWfSk9PntiPT09InN0YXJ0Ij9zLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgiZGFyayIpOmI9PT0iZW5kIiYmIVYmJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJsaWdodCIpfSkpfSx3RSksRU89RWUoVEUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT4oWGkoe3VybDoiX191bmlhcHBvcGVubG9jYXRpb24iLGRhdGE6ei5leHRlbmQoe30sZSx7bG9jYWxlOktsKCl9KSxzdHlsZTp7dGl0bGVOVmlldzp7dHlwZToidHJhbnNwYXJlbnQifSxwb3BHZXN0dXJlOiJjbG9zZSIsYmFja0J1dHRvbkF1dG9Db250cm9sOiJjbG9zZSJ9LG9uQ2xvc2UoKXtuKCJjYW5jZWwiKX19KSx0KCkpLElFLFBFKSxGYz0hMSxzYz0wLHlPPUVlKFB5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3NjPXNjfHxzLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24ocj0+e0ZjPSEwLG90Lmludm9rZU9uQ2FsbGJhY2soVGgsci5jb29yZHMpfSxyPT57RmN8fChuKHIubWVzc2FnZSksRmM9ITApLG90Lmludm9rZU9uQ2FsbGJhY2soUGgse2Vyck1zZzpgb25Mb2NhdGlvbkNoYW5nZTpmYWlsICR7ci5tZXNzYWdlfWB9KX0se2Nvb3Jkc1R5cGU6ZT09bnVsbD92b2lkIDA6ZS50eXBlfSksTih0LDEwMCl9LFJ5LHh5KSxTTz1FZShJeSwoZSx7cmVzb2x2ZTp0fSk9PntzYyYmKHMuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaChzYyksRmM9ITEsc2M9MCksdCgpfSksd089Z24oVGgsKCk9Pnt9KSxDTz1maShOeSwoKT0+e30pLEFPPWduKFBoLCgpPT57fSksT089Zmkoa3ksKCk9Pnt9KSxUTz1FZShtUywoe3RpdGxlOmU9IiIsY29udGVudDp0PSIiLHNob3dDYW5jZWw6bj0hMCxjYW5jZWxUZXh0OnIsY2FuY2VsQ29sb3I6byxjb25maXJtVGV4dDpjLGNvbmZpcm1Db2xvcjpnLGVkaXRhYmxlOmI9ITEscGxhY2Vob2xkZXJUZXh0OlY9IiJ9PXt9LHtyZXNvbHZlOlR9KT0+e2xldCBEPW4/W3IsY106W2NdLHZlPWI/VjpEO3Q9dHx8IiAiLHMubmF0aXZlVUlbYj8icHJvbXB0IjoiY29uZmlybSJdKHQseWU9PntpZihuKXtsZXQgT2U9eWUuaW5kZXg9PT0xLGZ0PXtjb25maXJtOk9lLGNhbmNlbDp5ZS5pbmRleD09PTB8fHllLmluZGV4PT09LTF9O09lJiZiJiYoZnQuY29udGVudD15ZS52YWx1ZSksVChmdCl9ZWxzZXtsZXQgT2U9e2NvbmZpcm06eWUuaW5kZXg9PT0wLGNhbmNlbDohMX07YiYmKE9lLmNvbnRlbnQ9eWUudmFsdWUpLFQoT2UpfX0sZSx2ZSxEKX0sX1MsYlMpLFBPPXtsaWdodDp7aXRlbUNvbG9yOiIjMDAwMDAwIn0sZGFyazp7aXRlbUNvbG9yOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCkifX0sSU89RWUoZlMsKHtpdGVtTGlzdDplPVtdLGl0ZW1Db2xvcjp0LHRpdGxlOm49IiIscG9wb3ZlcjpyfSx7cmVzb2x2ZTpvLHJlamVjdDpjfSk9Pnt0PT09IiMwMDAiJiZSLmRhcmttb2RlJiYodD1QT1tzLm5hdmlnYXRvci5nZXRVSVN0eWxlKCldLml0ZW1Db2xvciksYW8oKTtsZXR7dDpnfT1ndCgpLGI9e3RpdGxlOm4sY2FuY2VsOmcoInVuaS5zaG93QWN0aW9uU2hlZXQuY2FuY2VsIiksYnV0dG9uczplLm1hcChWPT4oe3RpdGxlOlYsY29sb3I6dH0pKX07cy5uYXRpdmVVSS5hY3Rpb25TaGVldCh6LmV4dGVuZChiLHtwb3BvdmVyOnJ9KSxWPT57Vi5pbmRleD4wP28oe3RhcEluZGV4OlYuaW5kZXgtMX0pOmMoInNob3dBY3Rpb25TaGVldDpmYWlsIGNhbmNlbCIpfSl9LGRTLGhTKSxsYyx0Zj0hMSxWYz0iIixVYyxOTz1FZShnUywoZSx0KT0+QWcoei5leHRlbmQoe30sZSx7dHlwZToibG9hZGluZyIsaWNvbjoibG9hZGluZyJ9KSx0KSxwUyx2UyksQWc9KHt0aXRsZTplPSIiLGljb246dD0ic3VjY2VzcyIsaW1hZ2U6bj0iIixkdXJhdGlvbjpyPTE1MDAsbWFzazpvPSExLHBvc2l0aW9uOmMsdHlwZTpnPSJ0b2FzdCIsc3R5bGU6Yn0se3Jlc29sdmU6VixyZWplY3Q6VH0pPT57aWYoJGMoIiIpLFZjPWcsWyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXS5pbmNsdWRlcyhTdHJpbmcoYykpKXMubmF0aXZlVUkudG9hc3QoZSx7dmVydGljYWxBbGlnbjpjfSksdGY9ITA7ZWxzZXt0JiYhflsic3VjY2VzcyIsImxvYWRpbmciLCJlcnJvciIsIm5vbmUiXS5pbmRleE9mKHQpJiYodD0ic3VjY2VzcyIpO2xldCBEPXttb2RhbDpvLGJhY2s6InRyYW5zbWl0IixwYWRkaW5nOiIxMHB4IixzaXplOiIxNnB4In07IW4mJighdHx8dD09PSJub25lIik/RC5sb2FkaW5nPXtkaXNwbGF5OiJub25lIn06KEQud2lkdGg9IjE0MHB4IixELmhlaWdodD0iMTEycHgiKSxuP0QubG9hZGluZz17ZGlzcGxheToiYmxvY2siLGhlaWdodDoiNTVweCIsaWNvbjpuLGludGVydmFsOnJ9Olsic3VjY2VzcyIsImVycm9yIl0uaW5kZXhPZih0KSE9PS0xJiYoRC5sb2FkaW5nPXtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OiI1NXB4IixpY29uOnQ9PT0ic3VjY2VzcyI/Il9fdW5pYXBwc3VjY2Vzcy5wbmciOiJfX3VuaWFwcGVycm9yLnBuZyIsaW50ZXJ2YWw6cn0pO3RyeXtsYz1zLm5hdGl2ZVVJLnNob3dXYWl0aW5nKGUsei5leHRlbmQoRCxiKSl9Y2F0Y2godmUpe1QoYCR7dmV9YCl9fXJldHVybiBWYz09PSJ0b2FzdCImJihVYz1OKCgpPT57JGMoIiIpfSxyKSksVigpfSxrTz1FZShFUyxBZyxTUyx3UyksUk89RWUoUXksKGUsdCk9PiRjKCJ0b2FzdCIsdCkpLHhPPUVlKFh5LChlLHQpPT4kYygibG9hZGluZyIsdCkpO2Z1bmN0aW9uICRjKGU9InRvYXN0Iix0KXtyZXR1cm4gZSYmZSE9PVZjfHwoVWMmJih5KFVjKSxVYz1udWxsKSx0Zj9zLm5hdGl2ZVVJLmNsb3NlVG9hc3QoKTpsYyYmbGMuY2xvc2UmJmxjLmNsb3NlKCksbGM9bnVsbCx0Zj0hMSxWYz0iIiksdCYmdC5yZXNvbHZlKCl9bGV0IEJPPUVlKENTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPVloKCk7aWYociYmci5lbmRQdWxsVG9SZWZyZXNoKCkscj1SYygpLCFyKXJldHVybiBuKCk7ci5iZWdpblB1bGxUb1JlZnJlc2goKSxXdShyKSx0KCl9KSxNTz1FZShBUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1ZaCgpfHxSYygpO2lmKCFyKXJldHVybiBuKCk7ci5lbmRQdWxsVG9SZWZyZXNoKCksV3UobnVsbCksdCgpfSksTE89RWUoeGgsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9SG4od3IoKSk7b3QuaW52b2tlVmlld01ldGhvZCh4aCxlLHIsbz0+e28/bihvKTp0KCl9KX0sZVMpLERPPUVlKEJoLChlLHtyZXNvbHZlOnR9KT0+e2xldCBuPUhuKHdyKCkpO290Lmludm9rZVZpZXdNZXRob2QoQmgsZSxuLHQpfSxjUyx1UyksRk89RWUob1MsKHtfX3BhZ2VfXzplLHRpdGxlOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBvPVdoKGUpO2lmKG8pe2xldCBjPW8uZ2V0U3R5bGUoKTtjJiZjLnRpdGxlTlZpZXcmJm8uc2V0U3R5bGUoe3RpdGxlTlZpZXc6e3RpdGxlVGV4dDp0fX0pLG4oKX1lbHNlIHIoKX0sYVMpLFZPPUVlKHNTLChlLHtyZXNvbHZlOnR9KT0+e3MubmF0aXZlVUkuc2hvd1dhaXRpbmcoIiIse21vZGFsOiExfSksdCgpfSksVU89RWUobFMsKGUse3Jlc29sdmU6dH0pPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSx0KCl9KTtmdW5jdGlvbiAkTyhlKXtsZXQgdD1SbigpOyF0Lmxlbmd0aHx8KHRbdC5sZW5ndGgtMV0uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU9ZSl9bGV0IEhPPUVlKG5TLCh7X19wYWdlX186ZSxmcm9udENvbG9yOnQsYmFja2dyb3VuZENvbG9yOm59LHtyZXNvbHZlOnIscmVqZWN0Om99KT0+e2xldCBjPVdoKGUpO2lmKGMpe2xldCBnPXt9O3QmJihnLnRpdGxlQ29sb3I9dCksbiYmKGcuYmFja2dyb3VuZENvbG9yPW4pO2xldCBiPXQ9PT0iIzAwMDAwMCI/ImRhcmsiOiJsaWdodCI7cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoYiksJE8oYik7bGV0IFY9Yy5nZXRTdHlsZSgpO1YmJlYudGl0bGVOVmlldyYmKFYudGl0bGVOVmlldy5hdXRvQmFja0J1dHRvbiYmKGcuYmFja0J1dHRvbj1nLmJhY2tCdXR0b258fHt9LGcuYmFja0J1dHRvbi5jb2xvcj10KSxjLnNldFN0eWxlKHt0aXRsZU5WaWV3Omd9KSkscigpfWVsc2UgbygpfSxpUyxyUyksak89RWUoV1MsKHtpbmRleDplLHRleHQ6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57X2kuc2V0VGFiQmFyQmFkZ2UoInRleHQiLGUsdCksbigpfSxHUyxZUyksek89RWUoT1MsKHtpbmRleDplLHRleHQ6dCxpY29uUGF0aDpuLHNlbGVjdGVkSWNvblBhdGg6cixwYWdlUGF0aDpvLHZpc2libGU6YyxpY29uZm9udDpnfSx7cmVzb2x2ZTpifSk9PntpZihfaS5zZXRUYWJCYXJJdGVtKGUsdCxuLHIsYyxnKSxvKXtsZXQgVj1SLnRhYkJhci5saXN0W2VdO2lmKFYpe2xldCBUPVYucGFnZVBhdGgsRD1LLnJlbW92ZUxlYWRpbmdTbGFzaChvKTtEIT09VCYmYXMoZSxULEQpfX1iKCl9LFRTLFBTKSxXTz1FZShJUywoZT17fSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntpZighdGMoKSlyZXR1cm4gbigibm90IFRhYkJhciBwYWdlIik7ZS5ib3JkZXJTdHlsZT1LLm5vcm1hbGl6ZVRhYkJhclN0eWxlcyhlLmJvcmRlclN0eWxlKSxfaS5zZXRUYWJCYXJTdHlsZShlKSx0KCl9LE5TLFJTKSxHTz1FZSh4UywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lJiZlLmFuaW1hdGlvbjtpZighdGMoKSlyZXR1cm4gbigibm90IFRhYkJhciBwYWdlIik7X2kuaGlkZVRhYkJhcihCb29sZWFuKHIpKSx0KCl9LE1oKSxZTz1FZShCUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lJiZlLmFuaW1hdGlvbjtpZighdGMoKSlyZXR1cm4gbigibm90IFRhYkJhciBwYWdlIik7X2kuc2hvd1RhYkJhcihCb29sZWFuKHIpKSx0KCl9LE1TKSxxTz1FZShWUywoe2luZGV4OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e19pLnNldFRhYkJhckJhZGdlKCJyZWREb3QiLGUpLHQoKX0sVVMsJFMpLE9nPWU9Pl9pLnNldFRhYkJhckJhZGdlKCJub25lIixlKSxKTz1FZShIUywoe2luZGV4OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e09nKGUpLHQoKX0salMselMpLEtPPUVlKExTLCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57T2coZSksdCgpfSxEUyxGUyksVGc9InZkU3luYyIsWk89Il9fdW5pYXBwX19zZXJ2aWNlIixSbD0ib25XZWJ2aWV3UmVhZHkiLFhPPTAsUU89IndlYnZpZXdJbnNlcnRlZCIsZVQ9IndlYnZpZXdSZW1vdmVkIixQZz0iVW5pQXBwU3ViTlZ1ZSI7Y2xhc3MgdFR7Y29uc3RydWN0b3IodCxuKXt0aGlzLmNhbGxiYWNrcz1bXTtsZXQgcj10aGlzLndlYnZpZXc9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQpO2lmKHRoaXMuaXNTdWI9bnx8ITEsci5fX3VuaWFwcF9tYXNrX2lkKXtsZXQgbz10aGlzLm1hc2tXZWJ2aWV3PXIuX191bmlhcHBfbWFza19pZD09PSIwIj97c2V0U3R5bGUoe21hc2s6Z30pe1lvKCJ1bmktdGFidmlldyIpLnNldE1hc2soe2NvbG9yOmd9KX19OnMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChyLl9fdW5pYXBwX21hc2tfaWQpLGM9ZnVuY3Rpb24oKXtvLnNldFN0eWxlKHttYXNrOiJub25lIn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLGMpfX1zaG93KC4uLnQpe2lmKHRoaXMubWFza1dlYnZpZXcpe2xldCBuPXRoaXMud2Vidmlldy5fX3VuaWFwcF9tYXNrO3RoaXMubWFza1dlYnZpZXcuc2V0U3R5bGUoe21hc2s6bn0pfXRoaXMud2Vidmlldy5zaG93KC4uLnQpfWhpZGUoLi4udCl7dGhpcy53ZWJ2aWV3LmhpZGUoLi4udCl9c2V0U3R5bGUodCl7dGhpcy53ZWJ2aWV3LnNldFN0eWxlKHQpfWluaXRNZXNzYWdlKCl7aWYodGhpcy5tZXNzYWdlUmVhZHkpcmV0dXJuO3RoaXMubWVzc2FnZVJlYWR5PSEwO2xldCB0PXI9PntpZihyLmRhdGEmJnIuZGF0YS50eXBlPT09UGcpe2xldCBvPXIuZGF0YS50YXJnZXQ7by5pZD09PXRoaXMud2Vidmlldy5pZCYmby5pc1N1Yj09PXRoaXMuaXNTdWImJnRoaXMuY2FsbGJhY2tzLmZvckVhY2goYz0+e2Moe29yaWdpbjp0aGlzLndlYnZpZXcuX191bmlhcHBfaG9zdCxkYXRhOnIuZGF0YS5kYXRhfSl9KX19O1lvKCJnbG9iYWxFdmVudCIpLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIix0KSx0aGlzLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT57dGhpcy5jYWxsYmFja3MubGVuZ3RoPTB9KX1wb3N0TWVzc2FnZSh0KXtzLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KHt0eXBlOlBnLGRhdGE6dCx0YXJnZXQ6e2lkOnRoaXMud2Vidmlldy5pZCxpc1N1YjohdGhpcy5pc1N1Yn19LFpPKX1vbk1lc3NhZ2UodCl7dGhpcy5pbml0TWVzc2FnZSgpLHRoaXMuY2FsbGJhY2tzLnB1c2godCl9fWxldCBuVD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdFQoZSx0KX07ZnVuY3Rpb24gclQoZSx0LG4scixvLGMsZyl7cyE9PW4mJih3PW1uPWUsZj10LHM9bixlQyhzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSkscy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU9JGgsTj1yLHk9byxoPWMsRT1nKSxSLnNlcnZpY2VSZWFkeT0hMH1mdW5jdGlvbiBpVCgpe2xldCBlPVsiQXJyYXlCdWZmZXIiLCJJbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXSx0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO3Rbcl09Z2xvYmFsW3JdfXJldHVybiB0fWZ1bmN0aW9uIG9UKGUpe3ouZXh0ZW5kKGdsb2JhbCxlKX1sZXQgSWc9e29hdXRoKGUpe3Mub2F1dGguZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e3Q9dCxlKHQpfSl9LHNoYXJlKGUpe3Muc2hhcmUuZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e2UodCl9KX0scGF5bWVudChlKXtzLnBheW1lbnQuZ2V0Q2hhbm5lbHModD0+e2xldCBuPVtdO3QuZm9yRWFjaCgoe2lkOnJ9KT0+e24ucHVzaChyKX0pLGUobnVsbCxuLHQpfSx0PT57ZSh0KX0pfSxwdXNoKGUpe2lmKHR5cGVvZiBmIT0idW5kZWZpbmVkInx8dHlwZW9mIHMhPSJ1bmRlZmluZWQiKXtsZXQgdD1zLnB1c2guZ2V0Q2xpZW50SW5mbygpO2UobnVsbCxbdC5pZF0sW3RdKX1lbHNlIGUobnVsbCxbXSl9fSxhVD1FZShxUywoe3NlcnZpY2U6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57SWdbZV0/SWdbZV0oKHIsbz1bXSxjPVtdKT0+e3I/bihyLm1lc3NhZ2UpOnQoe3NlcnZpY2U6ZSxwcm92aWRlcjpvLHByb3ZpZGVyczpjLm1hcChnPT4odHlwZW9mIGcuc2VydmljZVJlYWR5PT0iYm9vbGVhbiImJihnLmlzQXBwRXhpc3Q9Zy5zZXJ2aWNlUmVhZHkpLHR5cGVvZiBnLm5hdGl2ZUNsaWVudD09ImJvb2xlYW4iJiYoZy5pc0FwcEV4aXN0PWcubmF0aXZlQ2xpZW50KSxnKSl9KX0pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LEpTKSxIYztmdW5jdGlvbiBjYyhlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntzLm9hdXRoLmdldFNlcnZpY2VzKHI9PntsZXQgbz1yLmZpbmQoKHtpZDpjfSk9PmM9PT1lKTtvP3Qobyk6bihuZXcgRXJyb3IoInByb3ZpZGVyIG5vdCBmaW5kIikpfSxuKX0pfWxldCBOZz1FZShLUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyfHwid2VpeGluIixvPXByKG4pLGM9cj09PSJhcHBsZSIsZz1jP3tzY29wZToiZW1haWwifTplLnVuaXZlcmlmeVN0eWxlP3t1bml2ZXJpZnlTdHlsZTpjVChlLnVuaXZlcmlmeVN0eWxlLG8pfTp7fTtjYyhyKS50aGVuKGI9PntmdW5jdGlvbiBWKCl7aWYoZS5vbmx5QXV0aG9yaXplJiZyPT09IndlaXhpbiIpe2IuYXV0aG9yaXplKCh7Y29kZTpUfSk9Pnt0KHtjb2RlOlQsYXV0aFJlc3VsdDoiIn0pfSxvKTtyZXR1cm59Yi5sb2dpbihUPT57bGV0IEQ9VC50YXJnZXQuYXV0aFJlc3VsdCx2ZT1ULnRhcmdldC5hcHBsZUluZm87dCh7Y29kZTpELmNvZGUsYXV0aFJlc3VsdDpELGFwcGxlSW5mbzp2ZX0pfSxvLGcpfWN8fHI9PT0idW5pdmVyaWZ5Ij9WKCk6Yi5sb2dvdXQoVixWKX0pLmNhdGNoKG8pfSxaUyksa2c9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZS5wcm92aWRlcnx8IndlaXhpbiIsbz1wcihuKTtjYyhyKS50aGVuKGM9PntjLmdldFVzZXJJbmZvKGc9PntsZXQgYj17bmlja05hbWU6IiJ9O2lmKHI9PT0id2VpeGluIil7bGV0IFQ9Yy51c2VySW5mbztUJiYoYj17b3BlbklkOlQub3BlbmlkLG5pY2tOYW1lOlQubmlja25hbWUsZ2VuZGVyOlQuc2V4LGNpdHk6VC5jaXR5LHByb3ZpbmNlOlQucHJvdmluY2UsY291bnRyeTpULmNvdW50cnksYXZhdGFyVXJsOlQuaGVhZGltZ3VybCx1bmlvbklkOlQudW5pb25pZH0pfWVsc2UgaWYocj09PSJhcHBsZSIpe2xldCBUPWMuYXBwbGVJbmZvO1QmJihiPXtvcGVuSWQ6VC51c2VyLGZ1bGxOYW1lOlQuZnVsbE5hbWUsZW1haWw6VC5lbWFpbCxhdXRob3JpemF0aW9uQ29kZTpULmF1dGhvcml6YXRpb25Db2RlLGlkZW50aXR5VG9rZW46VC5pZGVudGl0eVRva2VuLHJlYWxVc2VyU3RhdHVzOlQucmVhbFVzZXJTdGF0dXN9KX1lbHNlIGI9Yy51c2VySW5mbyxiJiYoYi5vcGVuSWQ9Yi5vcGVuSWR8fGIub3BlbmlkfHxjLmF1dGhSZXN1bHQub3BlbmlkLGIubmlja05hbWU9Yi5uaWNrTmFtZXx8Yi5uaWNrbmFtZSxiLmF2YXRhclVybD1iLmF2YXRhclVybHx8Yi5oZWFkaW1ndXJsKTtsZXQgVj17fTtlLmRhdGEmJmUuZGF0YS5hcGlfbmFtZT09PSJ3ZWJhcGlfZ2V0dXNlcmluZm8iP1YuZGF0YT17ZGF0YTpKU09OLnN0cmluZ2lmeShiKSxyYXdEYXRhOiIiLHNpZ25hdHVyZToiIixlbmNyeXB0ZWREYXRhOiIiLGl2OiIifTpWLnVzZXJJbmZvPWIsdChWKX0sbyl9KS5jYXRjaCgoKT0+e24oIlx1OEJGN1x1NTE0OFx1OEMwM1x1NzUyOCB1bmkubG9naW4iKX0pfSxzVD1FZShYUyxrZyxRUyksbFQ9RWUoZXcsa2csdHcpLFJnPUVlKG53LCh7cHJvdmlkZXI6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9WHModCksbz1wcihuKTtjYyhlKS50aGVuKGM9PmMucHJlTG9naW4ocixvKSkuY2F0Y2gobyl9LG93LGl3KSx4Zz0oKT0+Y2MoInVuaXZlcmlmeSIpLnRoZW4oZT0+ZS5jbG9zZUF1dGhWaWV3KCkpLEJnPUx0KGF3LHhnKSxNZz1FZShzdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1Ycyh0KSxvPXByKG4pO3RyeXtjYygidW5pdmVyaWZ5IikudGhlbihjPT57bGV0IGc9Yy5nZXRDaGVja0JveFN0YXRlKCk7cih7c3RhdGU6Z30pfSl9Y2F0Y2goYyl7byhjKX19KTtmdW5jdGlvbiBjVChlLHQpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoZSkmJnouaXNQbGFpbk9iamVjdChlLmJ1dHRvbnMpJiZ6LnRvVHlwZVN0cmluZyhlLmJ1dHRvbnMubGlzdCk9PT0iW29iamVjdCBBcnJheV0iJiZlLmJ1dHRvbnMubGlzdC5mb3JFYWNoKChuLHIpPT57ZS5idXR0b25zLmxpc3Rbcl0ub25jbGljaz1mdW5jdGlvbigpe2xldCBvPXtjb2RlOiIzMDAwOCIsbWVzc2FnZToiXHU3NTI4XHU2MjM3XHU3MEI5XHU1MUZCXHU0RTg2XHU4MUVBXHU1QjlBXHU0RTQ5XHU2MzA5XHU5NEFFIixpbmRleDpyLHByb3ZpZGVyOm4ucHJvdmlkZXJ9O3ouaXNQbGFpbk9iamVjdChIYyk/SGMuX3RyaWdnZXJVbml2ZXJpZnlCdXR0b25zQ2xpY2sobyk6eGcoKS50aGVuKCgpPT57dChvKX0pfX0pLGV9Y2xhc3MgdVR7Y29uc3RydWN0b3IoKXt0aGlzLnByb3ZpZGVyPSJ1bml2ZXJpZnkiLHRoaXMuZXZlbnROYW1lPSJhcGkudW5pdmVyaWZ5QnV0dG9uc0NsaWNrIn1jbG9zZSgpe3JldHVybiBCZygpfWxvZ2luKHQpe3JldHVybiBOZyh0aGlzLl9nZXRPcHRpb25zKHQpKX1nZXRDaGVja0JveFN0YXRlKHQpe3JldHVybiBNZyh0KX1wcmVMb2dpbih0KXtyZXR1cm4gUmcodGhpcy5fZ2V0T3B0aW9ucyh0KSl9b25CdXR0b25zQ2xpY2sodCl7b3Qub24odGhpcy5ldmVudE5hbWUsdCl9b2ZmQnV0dG9uc0NsaWNrKHQpe290Lm9mZih0aGlzLmV2ZW50TmFtZSx0KX1fdHJpZ2dlclVuaXZlcmlmeUJ1dHRvbnNDbGljayh0KXtvdC5lbWl0KHRoaXMuZXZlbnROYW1lLHQpfV9nZXRPcHRpb25zKHQ9e30pe3JldHVybiB6LmV4dGVuZCh7fSx0LHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyfSl9fWxldCBmVD1MdChsdywoKT0+SGN8fChIYz1uZXcgdVQpKSxkVD1FZShtdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1kZygpO2lmKHIubm90aWZpY2F0aW9uQXV0aG9yaXplZCE9PSJhdXRob3JpemVkIilyZXR1cm4gbigibm90aWZpY2F0aW9uQXV0aG9yaXplZDogIityLm5vdGlmaWNhdGlvbkF1dGhvcml6ZWQpO2xldCBvPXouZXh0ZW5kKHt9LGUpO2RlbGV0ZSBvLmNvbnRlbnQsZGVsZXRlIG8ucGF5bG9hZCxzLnB1c2guY3JlYXRlTWVzc2FnZShlLmNvbnRlbnQsZS5wYXlsb2FkLG8pLHQoKX0sdm9pZCAwLF93KSxMZyxoVD1MdChidywoKT0+TGd8fChMZz1zLnB1c2guZ2V0Q2hhbm5lbE1hbmFnZXIoKSkpLGdUPUx0KCJyZWdpc3RlclJ1bnRpbWUiLGU9Pnt6LmV4dGVuZChqc1J1bnRpbWUsZSl9KSxwVD17MDp7bmFtZToid2ViIix0aXRsZToiXHU1NkZFXHU2NTg3In0sMTp7bmFtZToidGV4dCIsdGl0bGU6Ilx1N0VBRlx1NjU4N1x1NUI1NyJ9LDI6e25hbWU6ImltYWdlIix0aXRsZToiXHU3RUFGXHU1NkZFXHU3MjQ3In0sMzp7bmFtZToibXVzaWMiLHRpdGxlOiJcdTk3RjNcdTRFNTAifSw0OntuYW1lOiJ2aWRlbyIsdGl0bGU6Ilx1ODlDNlx1OTg5MSJ9LDU6e25hbWU6Im1pbmlQcm9ncmFtIix0aXRsZToiXHU1QzBGXHU3QTBCXHU1RThGIn19LHZUPWU9PntlLnR5cGU9ZS50eXBlfHwwO2xldHtwcm92aWRlcjp0LHR5cGU6bix0aXRsZTpyLHN1bW1hcnk6byxocmVmOmMsaW1hZ2VVcmw6ZyxtZWRpYVVybDpiLHNjZW5lOlYsbWluaVByb2dyYW06VCxvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpELGNvcnBpZDp2ZSxjdXN0b21lclVybDp5ZX09ZTt6LmlzU3RyaW5nKGcpJiZnJiYoZz1IZShnKSk7bGV0IE9lPXBUW25dO2lmKE9lKXtsZXQgZnQ9e3Byb3ZpZGVyOnQsdHlwZTpPZS5uYW1lLHRpdGxlOnIsY29udGVudDpvLGhyZWY6YyxwaWN0dXJlczpbZ10sdGh1bWJzOmc/W2ddOnZvaWQgMCxtZWRpYTpiLG1pbmlQcm9ncmFtOlQsZXh0cmE6e3NjZW5lOlZ9LG9wZW5DdXN0b21lclNlcnZpY2VDaGF0OkQsY29ycGlkOnZlLHVybDp5ZX07cmV0dXJuIHQ9PT0id2VpeGluIiYmKG49PT0xfHxuPT09MikmJmRlbGV0ZSBmdC50aHVtYnMsZnR9cmV0dXJuIlx1NTIwNlx1NEVBQlx1NTNDMlx1NjU3MCB0eXBlIFx1NEUwRFx1NkI2M1x1Nzg2RSJ9LERnPWZ1bmN0aW9uKGUsdCxuLHIsbz0ic2hhcmUiKXtsZXQgYz1wcihyKSxnPXQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQ/Im9wZW5DdXN0b21lclNlcnZpY2VDaGF0Ijoic2VuZCI7dHJ5e2VbZ10odCwoKT0+e24oKX0sYyl9Y2F0Y2goYil7Yyh7bWVzc2FnZTpgJHt0LnByb3ZpZGVyfSAke2d9IFx1NjVCOVx1NkNENVx1OEMwM1x1NzUyOFx1NTkzMVx1OEQyNWB9KX19LG1UPUVlKGN3LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXZUKGUpLG89cHIobik7aWYoei5pc1N0cmluZyhyKSlyZXR1cm4gbihyKTtzLnNoYXJlLmdldFNlcnZpY2VzKGM9PntsZXQgZz1jLmZpbmQoKHtpZDpifSk9PmI9PT1yLnByb3ZpZGVyKTtnP2cuYXV0aGVudGljYXRlZD9EZyhnLHIsdCxuKTpnLmF1dGhvcml6ZSgoKT0+RGcoZyxyLHQsbiksbyk6bigic2VydmljZSBub3QgZm91bmQiKX0sbyl9LGZ3LHV3KSxfVD1FZShkdywoe3R5cGU6ZSxpbWFnZVVybDp0LHN1bW1hcnk6bixocmVmOnJ9LHtyZXNvbHZlOm8scmVqZWN0OmN9KT0+e2xldCBnPXByKGMpO3ouaXNTdHJpbmcodCkmJnQmJih0PUhlKHQpKSxzLnNoYXJlLnNlbmRXaXRoU3lzdGVtKHt0eXBlOmUscGljdHVyZXM6dD9bdF06dm9pZCAwLGNvbnRlbnQ6bixocmVmOnJ9LCgpPT5vKCksZyl9LGd3LGh3KSxiVD1FZShwdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyLG89cHIobik7cy5wYXltZW50LmdldENoYW5uZWxzKGM9PntsZXQgZz1jLmZpbmQoKHtpZDpifSk9PmI9PT1yKTtnP3MucGF5bWVudC5yZXF1ZXN0KGcsZS5vcmRlckluZm8sYj0+e3QoYil9LG8pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LG8pfSx2dyksRmc9cmcsRVQ9RWUoIm5hdmlnYXRlVG9NaW5pUHJvZ3JhbSIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57RmcoIm5hdmlnYXRlVG9VbmlNUCIsZSxyPT57aWYoci5lcnJNc2cmJnIuZXJyTXNnLmluZGV4T2YoIjpvayIpPT09LTEpcmV0dXJuIG4oci5lcnJNc2cuc3BsaXQoIiAiKVsxXSk7dCgpfSl9KSxWZz1bXTtmdW5jdGlvbiBVZyhlKXtWZy5wdXNoKGUpfWxldCB5VD1VZztmdW5jdGlvbiBTVChlLHQpe1ZnLmZvckVhY2gobj0+bihlLHQpKX1mdW5jdGlvbiB3VChlLHQsLi4ubil7bGV0IHI9T1QoZSx0LG4pO3ImJmNvbnNvbGVbZV0ocil9ZnVuY3Rpb24gQ1QoKXtyZXR1cm4gdHlwZW9mIF9fY2hhbm5lbElkX189PSJzdHJpbmciJiZfX2NoYW5uZWxJZF9ffWZ1bmN0aW9uIEFUKGUsdCl7c3dpdGNoKHoudG9SYXdUeXBlKHQpKXtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4iZnVuY3Rpb24oKSB7IFtuYXRpdmUgY29kZV0gfSI7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gT1QoZSx0LG4pe3JldHVybiBDVCgpPyhuLnB1c2godC5yZXBsYWNlKCJhdCAiLCJ1bmktYXBwOi8vLyIpKSxjb25zb2xlW2VdLmFwcGx5KGNvbnNvbGUsbikpOm4ubWFwKGZ1bmN0aW9uKG8pe2xldCBjPXoudG9UeXBlU3RyaW5nKG8pLnRvTG93ZXJDYXNlKCk7aWYoWyJbb2JqZWN0IG9iamVjdF0iLCJbb2JqZWN0IGFycmF5XSIsIltvYmplY3QgbW9kdWxlXSJdLmluZGV4T2YoYykhPT0tMSl0cnl7bz0iLS0tQkVHSU46SlNPTi0tLSIrSlNPTi5zdHJpbmdpZnkobyxBVCkrIi0tLUVORDpKU09OLS0tIn1jYXRjaChnKXtvPWN9ZWxzZSBpZihvPT09bnVsbClvPSItLS1OVUxMLS0tIjtlbHNlIGlmKG89PT12b2lkIDApbz0iLS0tVU5ERUZJTkVELS0tIjtlbHNle2xldCBnPXoudG9SYXdUeXBlKG8pLnRvVXBwZXJDYXNlKCk7Zz09PSJOVU1CRVIifHxnPT09IkJPT0xFQU4iP289Ii0tLUJFR0lOOiIrZysiLS0tIitvKyItLS1FTkQ6IitnKyItLS0iOm89U3RyaW5nKG8pfXJldHVybiBvfSkuam9pbigiLS0tQ09NTUEtLS0iKSsiICIrdH1sZXQgVFQ9MSxuZix1Yz17fTtmdW5jdGlvbiAkZyhlKXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIil7bGV0IHQ9T2JqZWN0LmtleXModWMpLmZpbmQocj0+dWNbcl09PT1lKSxuPXQ/cGFyc2VJbnQodCk6VFQrKztyZXR1cm4gdWNbbl09ZSxufWVsc2Ugei5pc1BsYWluT2JqZWN0KGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9PntlW3RdPSRnKGVbdF0pfSk7cmV0dXJuIGV9ZnVuY3Rpb24gUFQoZSx0LG4scil7cmV0dXJuIG9mKGUsdCxuLHIpfWZ1bmN0aW9uIHJmKCl7cmV0dXJuIG5mfHwobmY9UC5yZXF1aXJlTmF0aXZlUGx1Z2luKCJVVFMtUHJveHkiKSksbmZ9ZnVuY3Rpb24gSGcoZSx0LG4scixvKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlx1OEZENFx1NTZERVx1NTAzQ1x1NEUzQVx1RkYxQSIrSlNPTi5zdHJpbmdpZnkodCkrIlx1RkYxQlx1OEJGN1x1NkM0Mlx1NTNDMlx1NjU3MFx1NEUzQVx1RkYxQSIrSlNPTi5zdHJpbmdpZnkoZSkpO2lmKHouaXNTdHJpbmcodCkpdHJ5e3Q9SlNPTi5wYXJzZSh0KX1jYXRjaChjKXt0aHJvdyBuZXcgRXJyb3IoYEpTT04ucGFyc2UoJHt0fSk6IGArYyl9aWYodC5lcnJNc2cpdGhyb3cgbmV3IEVycm9yKHQuZXJyTXNnKTtpZihuJiZuLnR5cGU9PT0iaW50ZXJmYWNlIiYmdHlwZW9mIHQucGFyYW1zPT0ibnVtYmVyIil7aWYoIXQucGFyYW1zKXJldHVybiBudWxsO2lmKHQucGFyYW1zPT09ciYmbylyZXR1cm4gbztpZihhZltuLm9wdGlvbnNdKXtsZXQgYz1HZyh6LmV4dGVuZCh7aW5zdGFuY2VJZDp0LnBhcmFtc30sYWZbbi5vcHRpb25zXSkpO3JldHVybiBuZXcgY319cmV0dXJuIHQucGFyYW1zfWZ1bmN0aW9uIGpnKGUpe2lmKGUuZXJyTXNnKXRocm93IG5ldyBFcnJvcihlLmVyck1zZyk7cmV0dXJuIGRlbGV0ZSBlLmVyck1zZyxIZyhlLHJmKCkuaW52b2tlU3luYyhlLCgpPT57fSkpfWZ1bmN0aW9uIG9mKGUse21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOm8sbmFtZTpjLG1ldGhvZDpnLGNvbXBhbmlvbjpiLHBhcmFtczpWLHJldHVybjpULGVyck1zZzpEfSx2ZSx5ZSl7bGV0IE9lPSh7aWQ6aHQsbmFtZTpWdCxwYXJhbXM6d3Qsa2VlcEFsaXZlOkVufSk9PntsZXQgb249dWNbaHRdO29uPyhvbiguLi53dCksRW58fGRlbGV0ZSB1Y1todF0pOmNvbnNvbGUuZXJyb3IoYCR7cn0ke299LiR7Y30gJHtWdH0gaXMgbm90IGZvdW5kYCl9LGZ0PXZlP3ttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLGlkOnZlLG5hbWU6YyxtZXRob2Q6Vn06e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOm8sbmFtZTpnfHxjLGNvbXBhbmlvbjpiLG1ldGhvZDpWfTtyZXR1cm4oLi4uaHQpPT57aWYoRCl0aHJvdyBuZXcgRXJyb3IoRCk7bGV0IFZ0PXouZXh0ZW5kKHt9LGZ0LHtwYXJhbXM6aHQubWFwKHd0PT4kZyh3dCkpfSk7cmV0dXJuIGU/bmV3IFByb21pc2UoKHd0LEVuKT0+e3JmKCkuaW52b2tlQXN5bmMoVnQsb249Pntvbi50eXBlIT09InJldHVybiI/T2Uob24pOm9uLmVyck1zZz9Fbihvbi5lcnJNc2cpOnd0KG9uLnBhcmFtcyl9KX0pOkhnKFZ0LHJmKCkuaW52b2tlU3luYyhWdCxPZSksVCx2ZSx5ZSl9fWZ1bmN0aW9uIHpnKGUsdCl7cmV0dXJuIHQubWFpbiYmIXQubWV0aG9kJiZZZygpJiYodC5tZXRob2Q9InNfIit0Lm5hbWUpLG9mKGUsdCwwKX1sZXQgSVQ9emc7ZnVuY3Rpb24gV2coZSx0KXtyZXR1cm4gei5oYXNPd24odCxlKyJCeUpzIik/ZSsiQnlKcyI6ZX1mdW5jdGlvbiBOVChlKXtyZXR1cm4gdHlwZW9mIGU9PSJ1bmRlZmluZWQifWZ1bmN0aW9uIGtUKGUpe3JldHVybiFOVChlLmluc3RhbmNlSWQpfWZ1bmN0aW9uIEdnKGUpe2xldHttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLHBhY2thZ2U6cixjbGFzczpvLG1ldGhvZHM6Yyxwcm9wczpnLGVyck1zZzpifT1lLFY9e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOm8sZXJyTXNnOmJ9LFQsRD1bXSx2ZT17fSx5ZT1bXSxPZT0hMTtrVChlKT8oT2U9ITAsVD1lLmluc3RhbmNlSWQpOihEPWUuY29uc3RydWN0b3IucGFyYW1zLHZlPWUuc3RhdGljTWV0aG9kcyx5ZT1lLnN0YXRpY1Byb3BzKSxZZygpJiZELmZpbmQoVnQ9PlZ0LnR5cGU9PT0iVVRTQ2FsbGJhY2sifHxWdC50eXBlLmluZGV4T2YoIkpTT05PYmplY3QiKT4wKSYmRC5wdXNoKHtuYW1lOiJfYnlKcyIsdHlwZToiYm9vbGVhbiJ9KTtsZXQgZnQ9Y2xhc3N7Y29uc3RydWN0b3IoLi4ud3Qpe2lmKHRoaXMuX19pbnN0YW5jZUlkPTAsYil0aHJvdyBuZXcgRXJyb3IoYik7bGV0IEVuPXt9O2lmKE9lP3R5cGVvZiBUPT0ibnVtYmVyIiYmKHRoaXMuX19pbnN0YW5jZUlkPVQpOnRoaXMuX19pbnN0YW5jZUlkPW9mKCExLHouZXh0ZW5kKHtuYW1lOiJjb25zdHJ1Y3RvciIscGFyYW1zOkR9LFYpLDApLmFwcGx5KG51bGwsd3QpLCF0aGlzLl9faW5zdGFuY2VJZCl0aHJvdyBuZXcgRXJyb3IoYG5ldyAke299IGlzIGZhaWxlZGApO2xldCBvbj10aGlzLGFuPW5ldyBQcm94eShvbix7Z2V0KFN0LFh0KXtpZihYdD09PSJfX3Zfc2tpcCIpcmV0dXJuITA7aWYoIUVuW1h0XSl7aWYoWHQ9V2coWHQsYyksei5oYXNPd24oYyxYdCkpe2xldHthc3luYzpkbixwYXJhbXM6dG4scmV0dXJuOlRufT1jW1h0XTtFbltYdF09UFQoISFkbix6LmV4dGVuZCh7bmFtZTpYdCxwYXJhbXM6dG4scmV0dXJuOlRufSxWKSxvbi5fX2luc3RhbmNlSWQsYW4pfWVsc2UgaWYoZy5pbmNsdWRlcyhYdCkpcmV0dXJuIGpnKHttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLGlkOm9uLl9faW5zdGFuY2VJZCxuYW1lOlh0LGVyck1zZzpifSl9cmV0dXJuIEVuW1h0XX19KTtyZXR1cm4gYW59fSxodD17fTtyZXR1cm4gbmV3IFByb3h5KGZ0LHtnZXQoVnQsd3QsRW4pe2lmKHd0PVdnKHd0LHZlKSx6Lmhhc093bih2ZSx3dCkpe2lmKCFodFt3dF0pe2xldHthc3luYzpvbixwYXJhbXM6YW4scmV0dXJuOlN0fT12ZVt3dF07aHRbd3RdPXpnKCEhb24sei5leHRlbmQoe25hbWU6d3QsY29tcGFuaW9uOiEwLHBhcmFtczphbixyZXR1cm46U3R9LFYpKX1yZXR1cm4gaHRbd3RdfXJldHVybiB5ZS5pbmNsdWRlcyh3dCk/amcoei5leHRlbmQoe25hbWU6d3QsY29tcGFuaW9uOiEwfSxWKSk6UmVmbGVjdC5nZXQoVnQsd3QsRW4pfX0pfWZ1bmN0aW9uIGpjKCl7cmV0dXJuIHR5cGVvZiBzIT0idW5kZWZpbmVkIiYmcy5vcy5uYW1lPT09IkFuZHJvaWQifWZ1bmN0aW9uIFlnKCl7cmV0dXJuIWpjKCl9ZnVuY3Rpb24gUlQoZSx0KXtyZXR1cm4gamMoKT8idXRzLnNkay4iKyh0PyJtb2R1bGVzLiI6IiIpK2U6IiJ9ZnVuY3Rpb24geFQoZSx0KXtyZXR1cm4gcWcoZSxqYygpPyJJbmRleEt0IjoiSW5kZXhTd2lmdCIsdCl9ZnVuY3Rpb24gcWcoZSx0LG4pe3JldHVybiBqYygpP3Q6IlVUU1NESyIrKG4/Ik1vZHVsZXMiOiIiKSt6LmNhcGl0YWxpemUoZSkrei5jYXBpdGFsaXplKHQpfWxldCBhZj17fTtmdW5jdGlvbiBCVChlLHQpe2FmW2VdPXR9bGV0IEpnPXt9O2Z1bmN0aW9uIE1UKGUsdCl7SmdbZV09dH1mdW5jdGlvbiBMVChlKXtsZXQgdD1KZ1tlXTtyZXR1cm4gdHx8Y29uc29sZS5lcnJvcihgJHtlfSBpcyBub3QgZm91bmRgKSx0fWxldCB3bz17bG9hZDoibG9hZCIsY2xvc2U6ImNsb3NlIixlcnJvcjoiZXJyb3IiLGFkQ2xpY2tlZDoiYWRDbGlja2VkIn07Y2xhc3MgS2d7Y29uc3RydWN0b3IoKXt0aGlzLl9jYWxsYmFja3M9e319b25Mb2FkKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIod28ubG9hZCx0KX1vbkNsb3NlKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIod28uY2xvc2UsdCl9b25FcnJvcih0KXt0aGlzLl9hZGRFdmVudExpc3RlbmVyKHdvLmVycm9yLHQpfW9mZkxvYWQodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcih3by5sb2FkLHQpfW9mZkNsb3NlKHQpe3RoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXIod28uY2xvc2UsdCl9b2ZmRXJyb3IodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcih3by5lcnJvcix0KX1fYWRkRXZlbnRMaXN0ZW5lcih0LG4peyF6LmlzRnVuY3Rpb24obil8fCh0aGlzLl9jYWxsYmFja3NbdF18fCh0aGlzLl9jYWxsYmFja3NbdF09W10pLHRoaXMuX2NhbGxiYWNrc1t0XS5wdXNoKG4pKX1fcmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCByPXRoaXMuX2NhbGxiYWNrc1t0XSxvPXIuaW5kZXhPZihuKTtvPi0xJiZyLnNwbGljZShvLDEpfV9kaXNwYXRjaEV2ZW50KHQsbil7dGhpcy5fY2FsbGJhY2tzW3RdLmZvckVhY2gocj0+e3Iobnx8e30pfSl9fWNsYXNzIHNmIGV4dGVuZHMgS2d7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3RoaXMucHJlbG9hZD0hMCx0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsLHRoaXMucHJlbG9hZD1uLnByZWxvYWQhPT12b2lkIDA/bi5wcmVsb2FkOiExO2xldCByPXRoaXMuX2FkSW5zdGFuY2U9dDtyLm9uTG9hZCgoKT0+e3RoaXMuX2lzTG9hZGVkPSEwLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUoKSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlKCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd0FkKCkpLHRoaXMuX2Rpc3BhdGNoRXZlbnQod28ubG9hZCx7fSl9KSxyLm9uQ2xvc2Uobz0+e3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9kaXNwYXRjaEV2ZW50KHdvLmNsb3NlLG8pLHRoaXMucHJlbG9hZD09PSEwJiZ0aGlzLl9sb2FkQWQoKX0pLHIub25FcnJvcihvPT57dGhpcy5faXNMb2FkaW5nPSExO2xldCBjPXtjb2RlOm8uY29kZSxlcnJNc2c6by5tZXNzYWdlfTt0aGlzLl9kaXNwYXRjaEV2ZW50KHdvLmVycm9yLGMpO2xldCBnPW5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShjKSk7dGhpcy5fbG9hZFByb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlamVjdChnKSx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KGcpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwpfSksci5vbkFkQ2xpY2tlZCYmci5vbkFkQ2xpY2tlZCgoKT0+e3RoaXMuX2Rpc3BhdGNoRXZlbnQod28uYWRDbGlja2VkLHt9KX0pfWdldFByb3ZpZGVyKCl7cmV0dXJuIHRoaXMuX2FkSW5zdGFuY2UuZ2V0UHJvdmlkZXIoKX1sb2FkKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nJiYodGhpcy5faXNMb2FkZWQ/dCgiIik6dGhpcy5fbG9hZEFkKCkpfSl9c2hvdygpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3RoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT10LHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW4sIXRoaXMuX2lzTG9hZGluZyYmKHRoaXMuX2lzTG9hZGVkPyh0aGlzLl9zaG93QWQoKSx0KCIiKSk6dGhpcy5fbG9hZEFkKCkpfSl9ZGVzdHJveSgpe3RoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSgpfV9sb2FkQWQoKXt0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITAsdGhpcy5fYWRJbnN0YW5jZS5sb2FkKCl9X3Nob3dBZCgpe3RoaXMuX2FkSW5zdGFuY2Uuc2hvdygpfX1jbGFzcyBEVCBleHRlbmRzIHNme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlUmV3YXJkZWRWaWRlb0FkKHQpLHQpO3RoaXMuX2xvYWRBZCgpfX1sZXQgRlQ9THQoRXcsZT0+bmV3IERUKGUpLFN3LHl3KTtjbGFzcyBWVCBleHRlbmRzIHNme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQodCksdCk7dGhpcy5wcmVsb2FkPSExfX1sZXQgVVQ9THQod3csZT0+bmV3IFZUKGUpLEF3LEN3KTtjbGFzcyAkVCBleHRlbmRzIHNme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlSW50ZXJzdGl0aWFsQWQodCksdCk7dGhpcy5wcmVsb2FkPSExLHRoaXMuX2xvYWRBZCgpfX1sZXQgSFQ9THQoT3csZT0+bmV3ICRUKGUpLFB3LFR3KSxTYT17fSx0bD17fTtmdW5jdGlvbiBqVChlKXtsZXQgdD1lLnByb3ZpZGVyO2lmKFNhW3RdfHwoU2FbdF09e30pLHR5cGVvZiBTYVt0XS5wbHVnaW49PSJvYmplY3QiKXtlLnN1Y2Nlc3MoU2FbdF0ucGx1Z2luKTtyZXR1cm59aWYodGxbdF18fCh0bFt0XT1bXSksdGxbdF0ucHVzaChlKSxTYVt0XS5zdGF0dXM9PT0hMCl7ZS5fX3BsdWdpbj1TYVt0XS5wbHVnaW47cmV0dXJufVNhW3RdLnN0YXR1cz0hMDtsZXQgbj1Zbyh0KTtpZighbnx8IW4uaW5pdFNESyl7dGxbdF0uZm9yRWFjaChyPT57ci5mYWlsKHtjb2RlOi0xLG1lc3NhZ2U6InByb3ZpZGVyIFsiK3QrIl0gaW52YWxpZCJ9KX0pLHRsW3RdLmxlbmd0aD0wLFNhW3RdLnN0YXR1cz0hMTtyZXR1cm59U2FbdF0ucGx1Z2luPW4sZS5fX3BsdWdpbj1uLG4uaW5pdFNESyhyPT57bGV0IG89ci5jb2RlPT09MXx8ci5jb2RlPT09IjEiO28/U2FbdF0ucGx1Z2luPW46U2FbdF0uc3RhdHVzPSExLHRsW3RdLmZvckVhY2goYz0+e28/Yy5zdWNjZXNzKGMuX19wbHVnaW4pOmMuZmFpbChyKX0pLHRsW3RdLmxlbmd0aD0wfSl9Y2xhc3MgelQgZXh0ZW5kcyBLZ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3RoaXMuX2FkcGlkPSIiLHRoaXMuX3Byb3ZpZGVyPSIiLHRoaXMuX3VzZXJEYXRhPW51bGwsdGhpcy5faXNMb2FkZWQ9ITEsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwsdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9hZEluc3RhbmNlPW51bGwsdGhpcy5fYWRFcnJvcj0iIix0aGlzLl9hZHBpZD10LmFkcGlkLHRoaXMuX3Byb3ZpZGVyPXQucHJvdmlkZXIsdGhpcy5fdXNlckRhdGE9dC51c2VyRGF0YSxOKCgpPT57dGhpcy5faW5pdCgpfSl9X2luaXQoKXt0aGlzLl9hZEVycm9yPSIiLGpUKHtwcm92aWRlcjp0aGlzLl9wcm92aWRlcixzdWNjZXNzOnQ9Pnt0aGlzLl9hZEluc3RhbmNlPXQsdGhpcy5fdXNlckRhdGEmJnRoaXMuYmluZFVzZXJEYXRhKHRoaXMuX3VzZXJEYXRhKSx0aGlzLl9sb2FkQWQoKX0sZmFpbDp0PT57dGhpcy5fYWRFcnJvcj10LHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fbG9hZFByb21pc2VSZWplY3QodGhpcy5fY3JlYXRlRXJyb3IodCkpLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX2Rpc3BhdGNoRXZlbnQod28uZXJyb3IsdCl9fSl9Z2V0UHJvdmlkZXIoKXtyZXR1cm4gdGhpcy5fcHJvdmlkZXJ9bG9hZCgpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2lmKHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT10LHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW4sIXRoaXMuX2lzTG9hZGluZyl7aWYodGhpcy5fYWRFcnJvcil7dGhpcy5faW5pdCgpO3JldHVybn10aGlzLl9pc0xvYWRlZD90KCIiKTp0aGlzLl9sb2FkQWQoKX19KX1zaG93KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57aWYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPXQsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nKXtpZih0aGlzLl9hZEVycm9yKXt0aGlzLl9pbml0KCk7cmV0dXJufXRoaXMuX2lzTG9hZGVkPyh0aGlzLl9zaG93QWQoKSx0KCIiKSk6dGhpcy5fbG9hZEFkKCl9fSl9cmVwb3J0RXhwb3N1cmUoKXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5fYWRJbnN0YW5jZS5yZXBvcnRFeHBvc3VyZSgpfWJpbmRVc2VyRGF0YSh0KXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5fYWRJbnN0YW5jZS5iaW5kVXNlckRhdGEodCl9ZGVzdHJveSgpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLmRlc3Ryb3kmJnRoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSh7YWRwaWQ6dGhpcy5fYWRwaWR9KX1fbG9hZEFkKCl7aWYodGhpcy5fYWRJbnN0YW5jZSE9PW51bGwpe2lmKHRoaXMuX2lzTG9hZGluZz09PSEwKXJldHVybjt0aGlzLl9pc0xvYWRpbmc9ITAsdGhpcy5fYWRJbnN0YW5jZS5sb2FkRGF0YSh7YWRwaWQ6dGhpcy5fYWRwaWR9LHQ9Pnt0aGlzLl9pc0xvYWRlZD0hMCx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fbG9hZFByb21pc2VSZXNvbHZlKCksdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwpLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZSE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX3Nob3dBZCgpKSx0aGlzLl9kaXNwYXRjaEV2ZW50KHdvLmxvYWQsdCl9LHQ9Pnt0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fc2hvd1Byb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9zaG93UHJvbWlzZVJlamVjdCh0aGlzLl9jcmVhdGVFcnJvcih0KSksdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCksdGhpcy5fZGlzcGF0Y2hFdmVudCh3by5lcnJvcix0KX0pfX1fc2hvd0FkKCl7dGhpcy5fYWRJbnN0YW5jZSE9PW51bGwmJnRoaXMuX2lzTG9hZGVkPT09ITAmJnRoaXMuX2FkSW5zdGFuY2Uuc2hvdyh7YWRwaWQ6dGhpcy5fYWRwaWR9LCgpPT57dGhpcy5faXNMb2FkZWQ9ITF9LHQ9Pnt0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KHRoaXMuX2NyZWF0ZUVycm9yKHQpKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9kaXNwYXRjaEV2ZW50KHdvLmVycm9yLHQpfSl9X2NyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodCkpfX1sZXQgV1Q9THQoSXcsZT0+bmV3IHpUKGUpLGt3LE53KSxaZz1zLm9zLm5hbWU9PT0iQW5kcm9pZCImJnBhcnNlSW50KHMub3MudmVyc2lvbik8NixHVD1aZz8ic2xpZGUtaW4tcmlnaHQiOiJwb3AtaW4iLHpjPTMwMCxYZz1aZz8ic2xpZGUtb3V0LXJpZ2h0IjoicG9wLW91dCIsWVQ9Il93d3cvX191bmlhcHB2aWV3Lmh0bWwiLHFUPSJ3ZWJ2aWV3SWQiLEpUPSJ1bmlNUE5hdGl2ZUV2ZW50IjtmdW5jdGlvbiBLVChlLHQsbil7biYmdC5pc05WdWUmJihlLnVuaU5WaWV3PXtwYXRoOm4sZGVmYXVsdEZvbnRTaXplOlIuZGVmYXVsdEZvbnRTaXplLHZpZXdwb3J0OlIudmlld3BvcnR9KX1sZXQgWlQ9L14jW2EtejAtOV17Nn0kL2k7ZnVuY3Rpb24gWFQoZSl7cmV0dXJuIGUmJihaVC50ZXN0KGUpfHxlPT09InRyYW5zcGFyZW50Iil9ZnVuY3Rpb24gUVQoZSx0KXtsZXR7YmFja2dyb3VuZENvbG9yOm59PXQ7IW58fCFYVChuKXx8KGUuYmFja2dyb3VuZD9uPWUuYmFja2dyb3VuZDplLmJhY2tncm91bmQ9bixlLmJhY2tncm91bmRDb2xvclRvcHx8KGUuYmFja2dyb3VuZENvbG9yVG9wPW4pLGUuYmFja2dyb3VuZENvbG9yQm90dG9tfHwoZS5iYWNrZ3JvdW5kQ29sb3JCb3R0b209biksZS5hbmltYXRpb25BbHBoYUJHQ29sb3J8fChlLmFuaW1hdGlvbkFscGhhQkdDb2xvcj1uKSx0eXBlb2YgZS53ZWJ2aWV3QkdUcmFuc3BhcmVudD09InVuZGVmaW5lZCImJihlLndlYnZpZXdCR1RyYW5zcGFyZW50PSEwKSl9ZnVuY3Rpb24gZVAoZSx0KXtlLnBvcEdlc3R1cmU9PT0iaGlkZSImJmRlbGV0ZSBlLnBvcEdlc3R1cmUsdC5pc1F1aXQmJihlLnBvcEdlc3R1cmU9cy5vcy5uYW1lPT09ImlPUyI/ImFwcGJhY2siOiJub25lIil9ZnVuY3Rpb24gdFAoZSx0KXtpZighdC5lbmFibGVQdWxsRG93blJlZnJlc2gpcmV0dXJuO2xldCBuPVVhKHouZXh0ZW5kKHt9LHMub3MubmFtZT09PSJBbmRyb2lkIj9yUDppUCx0LnB1bGxUb1JlZnJlc2gpKTtlLnB1bGxUb1JlZnJlc2g9blAobix0KX1mdW5jdGlvbiBuUChlLHQpe2xldCBuPVNyKGUpO2lmKCFuKXJldHVybiBlO2xldFtyLG8sY109bjtyZXR1cm4ocnx8b3x8YykmJlAub25Mb2NhbGVDaGFuZ2UoKCk9PntsZXQgZz1zLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQodC5pZCsiIik7aWYoIWcpcmV0dXJuO2xldCBiPXtzdXBwb3J0OiEwfTtyJiYoYi5jb250ZW50ZG93bj17Y2FwdGlvbjplLmNvbnRlbnRkb3duLmNhcHRpb259KSxvJiYoYi5jb250ZW50b3Zlcj17Y2FwdGlvbjplLmNvbnRlbnRvdmVyLmNhcHRpb259KSxjJiYoYi5jb250ZW50cmVmcmVzaD17Y2FwdGlvbjplLmNvbnRlbnRyZWZyZXNoLmNhcHRpb259KSxnLnNldFN0eWxlKHtwdWxsVG9SZWZyZXNoOmJ9KX0pLGV9bGV0IHJQPXtzdXBwb3J0OiEwLHN0eWxlOiJjaXJjbGUifSxpUD17c3VwcG9ydDohMCxzdHlsZToiZGVmYXVsdCIsaGVpZ2h0OiI1MHB4IixyYW5nZToiMjAwcHgiLGNvbnRlbnRkb3duOntjYXB0aW9uOiIifSxjb250ZW50b3Zlcjp7Y2FwdGlvbjoiIn0sY29udGVudHJlZnJlc2g6e2NhcHRpb246IiJ9fTtmdW5jdGlvbiBvUChlLHQpe2xldHtuYXZpZ2F0aW9uQmFyOm59PXQ7aWYobi5zdHlsZT09PSJjdXN0b20iKXJldHVybiExO2xldCByPSEwO3QuaXNRdWl0JiYocj0hMSk7bGV0IG89e2F1dG9CYWNrQnV0dG9uOnJ9O09iamVjdC5rZXlzKG4pLmZvckVhY2goYz0+e2xldCBnPW5bY107Yz09PSJ0aXRsZUltYWdlIiYmZz9vLnRhZ3M9c1AoZyk6Yz09PSJidXR0b25zIiYmei5pc0FycmF5KGcpP28uYnV0dG9ucz1nLm1hcCgoYixWKT0+KGIub25jbGljaz1sUChWKSxiKSk6b1tjXT1nfSksZS50aXRsZU5WaWV3PWFQKG8sdCl9ZnVuY3Rpb24gYVAoZSx0KXtsZXQgbj1VbihlKTtpZighbilyZXR1cm4gZTtsZXRbcixvXT1uO3JldHVybihyfHxvKSYmUC5vbkxvY2FsZUNoYW5nZSgoKT0+e2xldCBjPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0LmlkKyIiKTtpZighYylyZXR1cm47bGV0IGc9e307ciYmKGcudGl0bGVUZXh0PWUudGl0bGVUZXh0KSxvJiYoZy5zZWFyY2hJbnB1dD17cGxhY2Vob2xkZXI6ZS5zZWFyY2hJbnB1dC5wbGFjZWhvbGRlcn0pLGMuc2V0U3R5bGUoe3RpdGxlTlZpZXc6Z30pfSksZX1mdW5jdGlvbiBzUChlKXtyZXR1cm5be3RhZzoiaW1nIixzcmM6ZSxwb3NpdGlvbjp7bGVmdDoiYXV0byIsdG9wOiJhdXRvIix3aWR0aDoiYXV0byIsaGVpZ2h0OiIyNnB4In19XX1mdW5jdGlvbiBsUChlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5pbmRleD1lLGpuKEsuT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCxuKX19ZnVuY3Rpb24gUWcoZSx0LG4pe2xldCByPXtib3VuY2U6InZlcnRpY2FsIn07cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e2NQLmluZGV4T2Yobyk9PT0tMSYmKHJbb109dFtvXSl9KSxuLmlkIT09IjEiJiZLVChyLHQsZSksZVAocix0KSxRVChyLHQpLG9QKHIsdCksdFAocix0KSxyfWxldCBjUD1bImlkIiwicm91dGUiLCJpc05WdWUiLCJpc1F1aXQiLCJpc0VudHJ5IiwiaXNUYWJCYXIiLCJ0YWJCYXJJbmRleCIsIndpbmRvd1RvcCIsInRvcFdpbmRvdyIsImxlZnRXaW5kb3ciLCJyaWdodFdpbmRvdyIsIm1heFdpZHRoIiwidXNpbmdDb21wb25lbnRzIiwiZGlzYWJsZVNjcm9sbCIsImVuYWJsZVB1bGxEb3duUmVmcmVzaCIsIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIiwib25SZWFjaEJvdHRvbURpc3RhbmNlIiwicGFnZU9yaWVudGF0aW9uIiwiYmFja2dyb3VuZENvbG9yIl0sZXA9MjtmdW5jdGlvbiB0cCgpe3JldHVybiBlcH1mdW5jdGlvbiBucCgpe3JldHVybiBlcCsrfWZ1bmN0aW9uIHJwKGUpe3JldHVybiBlfWZ1bmN0aW9uIGlwKGUsdCl7bGV0IG49dD9LLnN0cmluZ2lmeVF1ZXJ5KHQscnApOiIiO3JldHVybntwYXRoOmUuc2xpY2UoMSkscXVlcnk6biYmbi5zbGljZSgxKX19ZnVuY3Rpb24gdVAoZSx0LG4pe2xldCByPW4/Sy5zdHJpbmdpZnlRdWVyeShuLHJwKToiIjtyZXR1cm57aXNUYWI6ZSxhcmd1bWVudHM6SlNPTi5zdHJpbmdpZnkoe3BhdGg6dC5zbGljZSgxKSxxdWVyeTpyJiZyLnNsaWNlKDEpfSl9fWZ1bmN0aW9uIGZQKHtwYXRoOmUscXVlcnk6dCxyb3V0ZU9wdGlvbnM6bix3ZWJ2aWV3RXh0cmFzOnJ9KXtsZXQgbz0oKT0+UWcoZSxqdShuLm1ldGEpLHtpZDpjKyIifSksYz1ucCgpLGc9bygpO2cudW5pUGFnZVVybD1pcChlLHQpLGcuaXNUYWI9ISFuLm1ldGEuaXNUYWJCYXI7bGV0IGI9cy53ZWJ2aWV3LmNyZWF0ZSgiIixTdHJpbmcoYyksZyx6LmV4dGVuZCh7bnZ1ZTohMCxfX3BhdGhfXzplLF9fcXVlcnlfXzpKU09OLnN0cmluZ2lmeSh0KX0scikpO3JldHVybiB6aChiLG8pLGJ9bGV0ICRpO2Z1bmN0aW9uIG9wKGUpeyRpPWV9ZnVuY3Rpb24gZFAoKXtyZXR1cm4gJGl9ZnVuY3Rpb24gaFAoKXtyZXR1cm4oISRpfHwkaS5fX3VuaWFwcF9yb3V0ZSkmJigkaT1zLndlYnZpZXcuY3JlYXRlKFlULFN0cmluZyhucCgpKSx7Y29udGVudEFkanVzdDohMX0pKSwkaX1mdW5jdGlvbiBnUChlKXtsZXR7cG9wdXBTdWJOVnVlV2Vidmlld3M6dH09ZTshdHx8ZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49Pnt0W25dLmNsb3NlKCJub25lIil9KX0pfWZ1bmN0aW9uIGFwKGUpe3JldHVybiBSLnJlYWxFbnRyeVBhZ2VQYXRoJiZlLiRwYWdlLnJvdXRlPT09Ui5lbnRyeVBhZ2VQYXRofWZ1bmN0aW9uIHNwKCl7Ui5lbnRyeVBhZ2VQYXRoPVIucmVhbEVudHJ5UGFnZVBhdGgsZGVsZXRlIFIucmVhbEVudHJ5UGFnZVBhdGgsUC5yZUxhdW5jaCh7dXJsOksuYWRkTGVhZGluZ1NsYXNoKFIuZW50cnlQYWdlUGF0aCl9KX1mdW5jdGlvbiBwUChlKXtsZXQgdDtlLmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLG49PntpZihuLnR5cGU9PT0ic3RhcnQiKXtsZXQgcj1SbigpLG89cltyLmxlbmd0aC0yXTt0PW5jO2xldCBjPW8mJm8uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU7YyYmQmEoYyl9ZWxzZSBpZihuLnR5cGU9PT0iZW5kIiYmIW4ucmVzdWx0KUJhKHQpO2Vsc2UgaWYobi50eXBlPT09ImVuZCImJm4ucmVzdWx0KXtsZXQgcj1SbigpLmxlbmd0aCxvPUFpKCk7cXIoKSxCYSgpLG8mJnI9PT0xJiZhcChvKT9zcCgpOmpuKEsuT05fU0hPVyl9fSl9ZnVuY3Rpb24gdlAoZSl7aWYoZS5udnVlKXJldHVybjtsZXQgdD1lLmlkLHtzdWJzY3JpYmU6bix1bnN1YnNjcmliZTpyfT1vdCxvPShjLGcpPT57aWYodCE9PWcpcmV0dXJuO3IoUmwsbyk7bGV0IGI9TnIocGFyc2VJbnQoZykpO2ImJmIuX19wYWdlX2NvbnRhaW5lcl9fLnJlc3RvcmUoKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZWNvdmVyeSIsKCk9PntuKFJsLG8pfSl9ZnVuY3Rpb24gbVAoZSl7bGV0e2VtaXQ6dH09b3Qsbj1mdW5jdGlvbih7d2lkdGg6cixoZWlnaHQ6b30pe2xldCBnPXtkZXZpY2VPcmllbnRhdGlvbjpNYXRoLmFicyhzLm5hdmlnYXRvci5nZXRPcmllbnRhdGlvbigpKT09PTkwPyJsYW5kc2NhcGUiOiJwb3J0cmFpdCIsc2l6ZTp7d2luZG93V2lkdGg6TWF0aC5jZWlsKHIpLHdpbmRvd0hlaWdodDpNYXRoLmNlaWwobyl9fTt0KEsuT05fUkVTSVpFLGcscGFyc2VJbnQoZS5pZCkpfTtlLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSy5kZWJvdW5jZShuLDUwLHtzZXRUaW1lb3V0Ok4sY2xlYXJUaW1lb3V0Onl9KSl9bGV0IGxwPXtwdWxsVG9SZWZyZXNoOksuT05fUFVMTF9ET1dOX1JFRlJFU0gsdGl0bGVOVmlld1NlYXJjaElucHV0Q2hhbmdlZDpLLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DSEFOR0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dENvbmZpcm1lZDpLLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DT05GSVJNRUQsdGl0bGVOVmlld1NlYXJjaElucHV0Q2xpY2tlZDpLLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dEZvY3VzQ2hhbmdlZDpLLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9GT0NVU19DSEFOR0VEfTtmdW5jdGlvbiBfUChlKXtsZXQgdD1wYXJzZUludChlLmlkKTtPYmplY3Qua2V5cyhscCkuZm9yRWFjaChuPT57bGV0IHI9bHBbbl07ZS5hZGRFdmVudExpc3RlbmVyKG4sbz0+e3I9PT1LLk9OX1BVTExfRE9XTl9SRUZSRVNIJiZXdShlKSxqbih0LHIsbyl9KX0pLGdQKGUpLG1QKGUpLHMub3MubmFtZT09PSJpT1MiJiYodlAoZSkscFAoZSkpfWZ1bmN0aW9uIGJQKGUsdCxuLHIpe2xldCBvPSgpPT5RZyh0LGp1KHIpLGUpLGM9bygpO2MudW5pUGFnZVVybD1pcCh0LG4pO2xldCBnPSEhci5pc1RhYkJhcjtyLmlzTlZ1ZT9jLmlzVGFiPWc6Yy5kZWJ1Z1JlZnJlc2g9dVAoZyx0LG4pLGMubG9jYWxlPWYucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldExhbmd1YWdlKCksemgoZSxvKSxlLnNldFN0eWxlKGMpfWZ1bmN0aW9uIEVQKGUsdCxuKXsobi5zdWJOVnVlc3x8W10pLmZvckVhY2gobz0+e2lmKCFvLnBhdGgpcmV0dXJuO2xldCBjPVZhKG8uc3R5bGV8fHt9KSxnPW8udHlwZT09PSJuYXZpZ2F0aW9uQmFyIixiPW8udHlwZT09PSJwb3B1cCI7Yy51bmlOVmlldz17cGF0aDpvLnBhdGgucmVwbGFjZSgiLm52dWUiLCIuanMiKSxkZWZhdWx0Rm9udFNpemU6Ui5kZWZhdWx0Rm9udFNpemUsdmlld3BvcnQ6Ui52aWV3cG9ydH07bGV0IFY9e19fdW5pYXBwX2hvc3Q6dCxfX3VuaWFwcF9vcmlnaW46Yy51bmlOVmlldy5wYXRoLnNwbGl0KCI/IilbMF0ucmVwbGFjZSgiLmpzIiwiIiksX191bmlhcHBfb3JpZ2luX2lkOmUuaWQsX191bmlhcHBfb3JpZ2luX3R5cGU6ZS5fX3VuaWFwcF90eXBlfSxUO2c/KGMucG9zaXRpb249ImRvY2siLGMuZG9jaz0idG9wIixjLnRvcD0iMCIsYy53aWR0aD0iMTAwJSIsYy5oZWlnaHQ9U3RyaW5nKEsuTkFWQkFSX0hFSUdIVCtHdSgpKSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGRlbGV0ZSBjLmJvdHRvbSxkZWxldGUgYy5tYXJnaW4pOmImJihjLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGModCk/VD1faTpUPWUsVi5fX3VuaWFwcF9tYXNrPWMubWFza3x8InJnYmEoMCwwLDAsMC41KSIsVi5fX3VuaWFwcF9tYXNrX2lkPVQuaWQpLGRlbGV0ZSBjLm1hc2s7bGV0IEQ9cy53ZWJ2aWV3LmNyZWF0ZSgiIixvLmlkLGMsVik7aWYoYil7VC5wb3B1cFN1Yk5WdWVXZWJ2aWV3c3x8KFQucG9wdXBTdWJOVnVlV2Vidmlld3M9e30pLFQucG9wdXBTdWJOVnVlV2Vidmlld3NbRC5pZF09RDtsZXQgdmU9ZnVuY3Rpb24oKXtULnNldFN0eWxlKHttYXNrOiJub25lIn0pLEQuaGlkZSgiYXV0byIpfTtULmFkZEV2ZW50TGlzdGVuZXIoIm1hc2tDbGljayIsdmUpO2xldCB5ZT0hMTtELmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57eWV8fChzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixVaSkscy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigiYmFja2J1dHRvbiIsdmUpLHllPSEwKX0pLEQuYWRkRXZlbnRMaXN0ZW5lcigiaGlkZSIsKCk9Pnt5ZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLHZlKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixVaSkseWU9ITEpfSksRC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntkZWxldGUgVC5wb3B1cFN1Yk5WdWVXZWJ2aWV3c1tELmlkXSx5ZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLHZlKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixVaSkseWU9ITEpfSl9ZWxzZSBlLmFwcGVuZChEKX0pfWZ1bmN0aW9uIHlQKGUsdCxuLHIpeyhlLmlkPT09IjEifHwhci5pc05WdWUpJiZiUChlLHQsbixyKSxFUChlLHQsciksX1AoZSl9ZnVuY3Rpb24gY3AoZSl7cmV0dXJuIGUucm91dGVPcHRpb25zLm1ldGEuaXNOVnVlP2ZQKGUpOnRwKCk9PT0yP3Mud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCk6ZFAoKX1mdW5jdGlvbiB1cChlLHQpe290Lm9uY2UoUmwrIi4iK2UsdCl9bGV0IHdhPSExO2Z1bmN0aW9uIGZwKGUsdCxuKXt3YT17cGF0aDplLG52dWU6b3MoZSkuaXNOVnVlLGNhbGxiYWNrOnR9fWZ1bmN0aW9uIGRwKGUsdCxuKXt0YShlKSxubChlLiRnZXRBcHBXZWJ2aWV3KCksdCxuKX1mdW5jdGlvbiBXYyhlLHQsbj0hMSl7aWYoIW4mJndhKXJldHVybiBjb25zb2xlLmVycm9yKGBXYWl0aW5nIHRvIG5hdmlnYXRlIHRvOiAke3dhLnBhdGh9LCBkbyBub3Qgb3BlcmF0ZSBjb250aW51b3VzbHk6ICR7ZX0uYCk7aWYoUi5yZW5kZXJlcj09PSJuYXRpdmUiKXJldHVybiBSbigpLmxlbmd0aD09PTA/ZnAoZSx0LCJ3YWl0Rm9yUmVhZHkiKTp0KCk7bGV0IHI9ISRpfHwkaSYmJGkuX191bmlhcHBfcm91dGUsbz0kaSYmISRpLmxvYWRlZDtyfHxvP2ZwKGUsdCxyPyJ3YWl0Rm9yQ3JlYXRlIjoid2FpdEZvclJlYWR5Iik6dCgpLG8mJnVwKCRpLmlkLEdjKX1mdW5jdGlvbiBHYygpe2lmKCF3YSlyZXR1cm47bGV0e2NhbGxiYWNrOmV9PXdhO3JldHVybiB3YT0hMSxlKCl9ZnVuY3Rpb24gaHAoKXtpZihSLnJlbmRlcmVyPT09Im5hdGl2ZSIpcmV0dXJuIHdhJiZ3YS5udnVlP0djKCk6dm9pZCAwO2xldCBlPWhQKCk7aWYoISF3YSl7aWYod2EubnZ1ZSlyZXR1cm4gR2MoKTtlLmxvYWRlZD93YS5jYWxsYmFjaygpOnVwKGUuaWQsR2MpfX1mdW5jdGlvbiBubChlLHQsbil7ZVtlLl9fcHJlbG9hZF9fPyJoaWRlIjoiY2xvc2UiXSh0LG4pfWZ1bmN0aW9uIFljKGUsdCxuLHIsbyl7dHlwZW9mIG89PSJ1bmRlZmluZWQiJiYobz1lLm52dWU/MDoxMDApO2xldCBjPWZ1bmN0aW9uKCl7Yy5fY2FsbGVkfHwoYy5fY2FsbGVkPSEwLHImJnIoKSxocCgpKX07Yy5fY2FsbGVkPSExLE4oKCk9PntsZXQgZz1OKCgpPT57YygpfSxuKzE1MCk7ZS5zaG93KHQsbiwoKT0+e2MuX2NhbGxlZHx8eShnKSxjKCl9KX0sbyl9ZnVuY3Rpb24gU1AoZSx0KXtsZXQgbj1lLmNoaWxkcmVuKCk7aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gdCgpO2xldCByPW4uZmluZChvPT5vLmlkLmluZGV4T2YocVQpPT09MCl8fG5bMF07ci5jYW5CYWNrKCh7Y2FuQmFjazpvfSk9PntvP3IuYmFjaygpOnQoKX0pfWxldCB3UD1FZShEeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1BaSgpO2lmKCFyKXJldHVybiBuKCJnZXRDdXJyZW50UGFnZXMgaXMgZW1wdHkiKTtpZihqbihyLEsuT05fQkFDS19QUkVTUyx7ZnJvbTplLmZyb218fCJuYXZpZ2F0ZUJhY2sifSkpcmV0dXJuIHQoKTtpZihQLmhpZGVUb2FzdCgpLFAuaGlkZUxvYWRpbmcoKSxyLiRwYWdlLm1ldGEuaXNRdWl0KUNQKCk7ZWxzZSBpZihhcChyKSlzcCgpO2Vsc2V7bGV0e2RlbHRhOm8sYW5pbWF0aW9uVHlwZTpjLGFuaW1hdGlvbkR1cmF0aW9uOmd9PWU7QVAobyxjLGcpfXJldHVybiB0KCl9LFZ5LEp5KSxxYz0wO2Z1bmN0aW9uIENQKCl7WXIoKSxxYz9EYXRlLm5vdygpLXFjPDJlMyYmcy5ydW50aW1lLnF1aXQoKToocWM9RGF0ZS5ub3coKSxzLm5hdGl2ZVVJLnRvYXN0KGd0KCkudCgidW5pLmFwcC5xdWl0IikpLE4oKCk9PntxYz0wfSwyZTMpKX1mdW5jdGlvbiBBUChlLHQsbil7bGV0IHI9Um4oKSxvPXIubGVuZ3RoLGM9cltvLTFdO2U+MSYmci5zbGljZShvLWUsby0xKS5yZXZlcnNlKCkuZm9yRWFjaChWPT57bmwocy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKFYuJHBhZ2UuaWQrIiIpLCJub25lIiwwKX0pO2xldCBnPWZ1bmN0aW9uKFYpe3Q/bmwoVix0LG58fHpjKTpjLiRwYWdlLm9wZW5UeXBlPT09InJlZGlyZWN0VG8iP25sKFYsWGcsemMpOm5sKFYsImF1dG8iKSxyLnNsaWNlKG8tZSxvKS5mb3JFYWNoKFQ9PnRhKFQpKSxCYSgpLGpuKEsuT05fU0hPVyl9LGI9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGMuJHBhZ2UuaWQrIiIpO2lmKCFjLl9fdW5pYXBwX3dlYnZpZXcpcmV0dXJuIGcoYik7U1AoYiwoKT0+e2coYil9KX1jbGFzcyBPUCBleHRlbmRzIEsuVW5pTm9kZXtjb25zdHJ1Y3Rvcih0LG4scj0hMSl7c3VwZXIoSy5OT0RFX1RZUEVfUEFHRSwiI3BhZ2UiLG51bGwpO3RoaXMuX2lkPTEsdGhpcy5fY3JlYXRlZD0hMSx0aGlzLl91cGRhdGluZz0hMSx0aGlzLl9jcmVhdGVBY3Rpb25NYXA9bmV3IE1hcCx0aGlzLnVwZGF0ZUFjdGlvbnM9W10sdGhpcy5kaWN0cz1bXSx0aGlzLm5vZGVJZD0wLHRoaXMucGFnZUlkPXQsdGhpcy5wYWdlTm9kZT10aGlzLHRoaXMub3B0aW9ucz1uLHRoaXMuaXNVbm1vdW50ZWQ9ITEsdGhpcy5jcmVhdGVBY3Rpb249W0suQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEUsbl0sdGhpcy5jcmVhdGVkQWN0aW9uPVtLLkFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFRF0sdGhpcy5ub3JtYWxpemVEaWN0PXRoaXMuX25vcm1hbGl6ZURpY3QuYmluZCh0aGlzKSx0aGlzLl91cGRhdGU9dGhpcy51cGRhdGUuYmluZCh0aGlzKSxyJiZ0aGlzLnNldHVwKCl9X25vcm1hbGl6ZURpY3QodCxuPSEwKXtpZighei5pc1BsYWluT2JqZWN0KHQpKXJldHVybiB0aGlzLmFkZERpY3QodCk7bGV0IHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e2xldCBjPVt0aGlzLmFkZERpY3QobyldLGc9dFtvXTtuP2MucHVzaCh0aGlzLmFkZERpY3QoZykpOmMucHVzaChnKSxyLnB1c2goYyl9KSxyfWFkZERpY3QodCl7bGV0e2RpY3RzOm59PXRoaXMscj1uLmluZGV4T2YodCk7cmV0dXJuIHI+LTE/cjpuLnB1c2godCktMX1vbkluamVjdEhvb2sodCl7KHQ9PT1LLk9OX1BBR0VfU0NST0xMfHx0PT09Sy5PTl9SRUFDSF9CT1RUT00pJiYhdGhpcy5zY3JvbGxBY3Rpb24mJih0aGlzLnNjcm9sbEFjdGlvbj1bSy5BQ1RJT05fVFlQRV9QQUdFX1NDUk9MTCx0aGlzLm9wdGlvbnMub25SZWFjaEJvdHRvbURpc3RhbmNlXSx0aGlzLnB1c2godGhpcy5zY3JvbGxBY3Rpb24pKX1vbkNyZWF0ZSh0LG4pe3JldHVybiBJUCh0aGlzLHQubm9kZUlkLG4pLHR9b25JbnNlcnRCZWZvcmUodCxuLHIpe3JldHVybiBOUCh0aGlzLG4sdC5ub2RlSWQsciYmci5ub2RlSWR8fC0xKSxufW9uUmVtb3ZlQ2hpbGQodCl7cmV0dXJuIGtQKHRoaXMsdC5ub2RlSWQpLHR9b25BZGRFdmVudCh0LG4scil7dC5wYXJlbnROb2RlJiZSUCh0aGlzLHQubm9kZUlkLG4scil9b25BZGRXeHNFdmVudCh0LG4scixvKXt0LnBhcmVudE5vZGUmJnhQKHRoaXMsdC5ub2RlSWQsbixyLG8pfW9uUmVtb3ZlRXZlbnQodCxuKXt0LnBhcmVudE5vZGUmJkJQKHRoaXMsdC5ub2RlSWQsbil9b25TZXRBdHRyaWJ1dGUodCxuLHIpe3QucGFyZW50Tm9kZSYmTFAodGhpcyx0Lm5vZGVJZCxuLHIpfW9uUmVtb3ZlQXR0cmlidXRlKHQsbil7dC5wYXJlbnROb2RlJiZEUCh0aGlzLHQubm9kZUlkLG4pfW9uVGV4dENvbnRlbnQodCxuKXt0LnBhcmVudE5vZGUmJnBwKHRoaXMsdC5ub2RlSWQsbil9b25Ob2RlVmFsdWUodCxuKXt0LnBhcmVudE5vZGUmJnBwKHRoaXMsdC5ub2RlSWQsbil9Z2VuSWQoKXtyZXR1cm4gdGhpcy5faWQrK31wdXNoKHQsbil7aWYoIXRoaXMuaXNVbm1vdW50ZWQpe3N3aXRjaCh0WzBdKXtjYXNlIEsuQUNUSU9OX1RZUEVfQ1JFQVRFOnRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5zZXQodFsxXSx0KTticmVhaztjYXNlIEsuQUNUSU9OX1RZUEVfSU5TRVJUOmxldCByPXRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5nZXQodFsxXSk7cj8oclszXT10WzJdLHJbNF09dFszXSxuJiYocls1XT1uKSk6KG4mJih0WzRdPW4pLHRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpKTticmVha310WzBdIT09Sy5BQ1RJT05fVFlQRV9JTlNFUlQmJnRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpLHRoaXMuX3VwZGF0aW5nfHwodGhpcy5fdXBkYXRpbmc9ITAsbW4ucXVldWVQb3N0Rmx1c2hDYih0aGlzLl91cGRhdGUpKX19cmVzdG9yZSgpe3RoaXMuY2xlYXIoKSx0aGlzLnNldHVwKCksdGhpcy5zY3JvbGxBY3Rpb24mJnRoaXMucHVzaCh0aGlzLnNjcm9sbEFjdGlvbik7bGV0IHQ9bj0+e3RoaXMub25DcmVhdGUobixuLm5vZGVOYW1lKSx0aGlzLm9uSW5zZXJ0QmVmb3JlKG4ucGFyZW50Tm9kZSxuLG51bGwpLG4uY2hpbGROb2Rlcy5mb3JFYWNoKHI9Pnt0KHIpfSl9O3RoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKG49PnQobikpLHRoaXMucHVzaCh0aGlzLmNyZWF0ZWRBY3Rpb24pfXNldHVwKCl7dGhpcy5zZW5kKFt0aGlzLmNyZWF0ZUFjdGlvbl0pfXVwZGF0ZSgpe2xldHtkaWN0czp0LHVwZGF0ZUFjdGlvbnM6bixfY3JlYXRlQWN0aW9uTWFwOnJ9PXRoaXM7dGhpcy5fY3JlYXRlZHx8KHRoaXMuX2NyZWF0ZWQ9ITAsbi5wdXNoKHRoaXMuY3JlYXRlZEFjdGlvbikpLG4ubGVuZ3RoJiYodC5sZW5ndGgmJm4udW5zaGlmdChbWE8sdF0pLHRoaXMuc2VuZChuKSksdGhpcy5jbGVhcigpfWNsZWFyKCl7dGhpcy5kaWN0cy5sZW5ndGg9MCx0aGlzLnVwZGF0ZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5fdXBkYXRpbmc9ITEsdGhpcy5fY3JlYXRlQWN0aW9uTWFwLmNsZWFyKCl9c2VuZCh0KXtvdC5wdWJsaXNoSGFuZGxlcihUZyx0LHRoaXMucGFnZUlkKX1maXJlRXZlbnQodCxuKXtsZXQgcj1ncCh0LHRoaXMpO3ImJnIuZGlzcGF0Y2hFdmVudChuKX19ZnVuY3Rpb24gVFAoZSl7bGV0IHQ9TnIoZSk7cmV0dXJuIHQ/dC5fX3BhZ2VfY29udGFpbmVyX186bnVsbH1mdW5jdGlvbiBsZihlLHQsbil7aWYodHlwZW9mIG49PSJudW1iZXIiJiYobj1UUChuKSksbltlXT09PXQpcmV0dXJuIG47bGV0e2NoaWxkTm9kZXM6cn09bjtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGM9bGYoZSx0LHJbb10pO2lmKGMpcmV0dXJuIGN9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZ3AoZSx0KXtyZXR1cm4gbGYoIm5vZGVJZCIsZSx0KX1mdW5jdGlvbiBQUChlLHQpe3JldHVybiBsZigibm9kZU5hbWUiLGUudG9VcHBlckNhc2UoKSx0KX1mdW5jdGlvbiBJUChlLHQsbil7ZS5wdXNoKFtLLkFDVElPTl9UWVBFX0NSRUFURSx0LGUuYWRkRGljdChuKSwtMSwtMV0pfWZ1bmN0aW9uIE5QKGUsdCxuLHIpe2xldCBvPXQudG9KU09OKHthdHRyOiEwLG5vcm1hbGl6ZTplLm5vcm1hbGl6ZURpY3R9KTtlLnB1c2goW0suQUNUSU9OX1RZUEVfSU5TRVJULHQubm9kZUlkLG4scl0sT2JqZWN0LmtleXMobykubGVuZ3RoP286dm9pZCAwKX1mdW5jdGlvbiBrUChlLHQpe2UucHVzaChbSy5BQ1RJT05fVFlQRV9SRU1PVkUsdF0pfWZ1bmN0aW9uIFJQKGUsdCxuLHIpe2UucHVzaChbSy5BQ1RJT05fVFlQRV9BRERfRVZFTlQsdCxlLmFkZERpY3Qobikscl0pfWZ1bmN0aW9uIHhQKGUsdCxuLHIsbyl7ZS5wdXNoKFtLLkFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQsdCxlLmFkZERpY3QobiksZS5hZGREaWN0KHIpLG9dKX1mdW5jdGlvbiBCUChlLHQsbil7ZS5wdXNoKFtLLkFDVElPTl9UWVBFX1JFTU9WRV9FVkVOVCx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIE1QKGUsdCxuKXtyZXR1cm4gdD09PSJzdHlsZSImJnouaXNQbGFpbk9iamVjdChuKT9lLm5vcm1hbGl6ZURpY3Qobik6ZS5hZGREaWN0KG4pfWZ1bmN0aW9uIExQKGUsdCxuLHIpe2UucHVzaChbSy5BQ1RJT05fVFlQRV9TRVRfQVRUUklCVVRFLHQsZS5hZGREaWN0KG4pLE1QKGUsbixyKV0pfWZ1bmN0aW9uIERQKGUsdCxuKXtlLnB1c2goW0suQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURSx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIHBwKGUsdCxuKXtlLnB1c2goW0suQUNUSU9OX1RZUEVfU0VUX1RFWFQsdCxlLmFkZERpY3QobildKX1mdW5jdGlvbiBGUChlLHQsbil7cmV0dXJuIG5ldyBPUChlLHQsbil9ZnVuY3Rpb24gdnAoZSl7bGV0IHQ9ZS5zZXR1cDtyZXR1cm4gZS5pbmhlcml0QXR0cnM9ITEsZS5zZXR1cD0obixyKT0+e2xldHthdHRyczp7X19wYWdlSWQ6byxfX3BhZ2VQYXRoOmMsX19wYWdlUXVlcnk6ZyxfX3BhZ2VJbnN0YW5jZTpifX09cixUPW1uLmdldEN1cnJlbnRJbnN0YW5jZSgpLnByb3h5O2lmKHB0KFQsYiksV24obXAobyxULGIpKSxtbi5vbk1vdW50ZWQoKCk9Pnttbi5uZXh0VGljaygoKT0+e2puKFQsSy5PTl9SRUFEWSl9KX0pLG1uLm9uQmVmb3JlVW5tb3VudCgoKT0+e2puKFQsSy5PTl9VTkxPQUQpfSksdClyZXR1cm4gdChnLHIpfSxlfWZ1bmN0aW9uIG1wKGUsdCxuKXt7bGV0IHI9KCk9PnMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChlKyIiKTt0LiRnZXRBcHBXZWJ2aWV3PXIsdC4kLmN0eC4kc2NvcGU9eyRnZXRBcHBXZWJ2aWV3OnJ9fXJldHVybiB0LmdldE9wZW5lckV2ZW50Q2hhbm5lbD0oKT0+KG4uZXZlbnRDaGFubmVsfHwobi5ldmVudENoYW5uZWw9bmV3IEsuRXZlbnRDaGFubmVsKGUpKSxuLmV2ZW50Q2hhbm5lbCksdH1mdW5jdGlvbiBWUChlKXtyZXR1cm4gei5pc0Z1bmN0aW9uKGUpfWxldCBfcD1uZXcgTWFwO2Z1bmN0aW9uIFVQKGUsdCl7X3Auc2V0KGUsSy5vbmNlKEhQKHQpKSl9ZnVuY3Rpb24gJFAoZSx0LG4scixvKXtsZXQgYz1GUChlLG8sITApLGc9UWkoKSxiPV9wLmdldCh0KSgpLFY9VD0+Zy5tb3VudFBhZ2UoVCx7X19wYWdlSWQ6ZSxfX3BhZ2VQYXRoOnQsX19wYWdlUXVlcnk6bixfX3BhZ2VJbnN0YW5jZTpyfSxjKTtyZXR1cm4gei5pc1Byb21pc2UoYik/Yi50aGVuKFQ9PlYoVCkpOlYoYil9ZnVuY3Rpb24gSFAoZSl7cmV0dXJuKCk9PlZQKGUpP2UoKS50aGVuKHQ9PnZwKHQpKTp2cChlKX1sZXQgYnA9ITE7ZnVuY3Rpb24gRXAoKXtpZihicClyZXR1cm47YnA9ITA7bGV0IGUsdDtpZihmLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRSZWRpcmVjdEluZm8pe2xldHtwYXRoOmMscXVlcnk6ZyxyZWZlcnJlckluZm86Yn09QnMoKTtjJiYoZT1jLHQ9ZyksUi5yZWZlcnJlckluZm89Yn1lbHNle2xldCBjPXMucnVudGltZS5hcmd1bWVudHM7aWYoIWMpcmV0dXJuO3RyeXtsZXQgZz1KU09OLnBhcnNlKGMpO2U9Zy5wYXRofHxnLnBhdGhOYW1lLHQ9Zy5xdWVyeT8iPyIrZy5xdWVyeToiIn1jYXRjaChnKXt9fWlmKCFlfHxlPT09Ui5lbnRyeVBhZ2VQYXRoKXt0JiYoUi5lbnRyeVBhZ2VRdWVyeT10KTtyZXR1cm59bGV0IHI9Sy5hZGRMZWFkaW5nU2xhc2goZSksbz1LaShyKTshb3x8KG8ubWV0YS5pc1RhYkJhcnx8KFIucmVhbEVudHJ5UGFnZVBhdGg9Ui5yZWFsRW50cnlQYWdlUGF0aHx8Ui5lbnRyeVBhZ2VQYXRoKSxSLmVudHJ5UGFnZVBhdGg9ZSxSLmVudHJ5UGFnZVF1ZXJ5PXQpfWZ1bmN0aW9uIEpjKGUsdCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShLaShlKSkpO3JldHVybiBuLm1ldGE9RmEobi5tZXRhKSx0IT09InByZWxvYWRQYWdlIiYmIVIucmVhbEVudHJ5UGFnZVBhdGgmJih0PT09InJlTGF1bmNoInx8Um4oKS5sZW5ndGg9PT0wKT9uLm1ldGEuaXNRdWl0PSEwOm4ubWV0YS5pc1RhYkJhcnx8KG4ubWV0YS5pc1F1aXQ9ITEpLG59bGV0IENhPXt9O2Z1bmN0aW9uIGpQKGUpe2xldCB0PU9iamVjdC5rZXlzKENhKS5maW5kKG49PkNhW25dLmlkPT09ZS5pZCk7dCYmZGVsZXRlIENhW3RdfWZ1bmN0aW9uIHpQKHt1cmw6ZX0pe2xldCB0PUNhW2VdO3JldHVybiB0JiYodC5fX3BhZ2VfXyYmUm4oKS5maW5kKG49Pm49PT10Ll9fcGFnZV9fKT90Ll9fcHJlbG9hZF9fPSExOnQuY2xvc2UoIm5vbmUiKSxkZWxldGUgQ2FbZV0pLHR9ZnVuY3Rpb24gV1Aoe3VybDplLHBhdGg6dCxxdWVyeTpufSl7aWYoIUNhW2VdKXtsZXQgcj1KYyh0LCJwcmVsb2FkUGFnZSIpO0NhW2VdPWNwKHtwYXRoOnQscm91dGVPcHRpb25zOnIscXVlcnk6bix3ZWJ2aWV3RXh0cmFzOntfX3ByZWxvYWRfXzohMH19KX1yZXR1cm4gQ2FbZV19ZnVuY3Rpb24gZmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOnIsd2VidmlldzpvLG52dWVQYWdlVm06YyxldmVudENoYW5uZWw6Z30pe2lmKG8mJkVwKCksQ2FbZV0pe289Q2FbZV07bGV0IHllPW87aWYoeWUuX19wYWdlX18paWYoUm4oKS5maW5kKE9lPT5PZT09PXllLl9fcGFnZV9fKSlvPXZvaWQgMDtlbHNlIHJldHVybiBnJiYoeWUuX19wYWdlX18uJHBhZ2UuZXZlbnRDaGFubmVsPWcpLHI9PT0ibGF1bmNoIj9HUChlLHQsbix5ZSxjLGcpOlduKHllLl9fcGFnZV9fKSx5ZX1sZXQgYj1KYyh0LHIpO28/KG89cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKG8uaWQpLG8ubnZ1ZT1iLm1ldGEuaXNOVnVlKTpvPWNwKHtwYXRoOnQscm91dGVPcHRpb25zOmIscXVlcnk6bn0pLGIubWV0YS5pZD1wYXJzZUludChvLmlkKSwhIWIubWV0YS5pc1RhYkJhciYmX2kuYXBwZW5kKG8pLHlQKG8sdCxuLGIubWV0YSk7bGV0IFQ9dC5zbGljZSgxKTtvLl9fdW5pYXBwX3JvdXRlPVQ7bGV0IEQ9Z2EocixlLG4sYi5tZXRhLGcsUi5kYXJrbW9kZT9zLm5hdmlnYXRvci5nZXRVSVN0eWxlKCk6ImxpZ2h0IiksdmU9cGFyc2VJbnQoby5pZCk7cmV0dXJuIG8ubnZ1ZT9jP3FQKHZlLGMsRCk6eXAodmUsbyxEKTokUCh2ZSxULG4sRCxZUChiKSksb31mdW5jdGlvbiBHUChlLHQsbixyLG8sYyl7bGV0IGc9SmModCwicHJlbG9hZFBhZ2UiKTtnLm1ldGEuaWQ9cGFyc2VJbnQoci5pZCk7bGV0IGI9Z2EoInByZWxvYWRQYWdlIixlLG4sZy5tZXRhLGMsUi5kYXJrbW9kZT9zLm5hdmlnYXRvci5nZXRVSVN0eWxlKCk6ImxpZ2h0Iik7cHQobyxiKSxyLl9fcGFnZV9fPW99ZnVuY3Rpb24gWVAoe21ldGE6ZX0pe2xldCB0PUd1KCkse3BsYXRmb3JtOm4scGl4ZWxSYXRpbzpyLHdpbmRvd1dpZHRoOm99PURyKCk7cmV0dXJue2NzczohMCxyb3V0ZTplLnJvdXRlLHZlcnNpb246MSxsb2NhbGU6IiIscGxhdGZvcm06bixwaXhlbFJhdGlvOnIsd2luZG93V2lkdGg6byxkaXNhYmxlU2Nyb2xsOmUuZGlzYWJsZVNjcm9sbD09PSEwLG9uUGFnZVNjcm9sbDohMSxvblBhZ2VSZWFjaEJvdHRvbTohMSxvblJlYWNoQm90dG9tRGlzdGFuY2U6ei5oYXNPd24oZSwib25SZWFjaEJvdHRvbURpc3RhbmNlIik/ZS5vblJlYWNoQm90dG9tRGlzdGFuY2U6Sy5PTl9SRUFDSF9CT1RUT01fRElTVEFOQ0Usc3RhdHVzYmFySGVpZ2h0OnQsd2luZG93VG9wOmUubmF2aWdhdGlvbkJhci50eXBlPT09ImZsb2F0Ij90K0suTkFWQkFSX0hFSUdIVDowLHdpbmRvd0JvdHRvbTpfaS5pbmRleE9mKGUucm91dGUpPj0wJiZfaS5jb3Zlcj9faS5oZWlnaHQ6MH19ZnVuY3Rpb24gcVAoZSx0LG4pe3B0KHQsbiksV24obXAoZSx0LG4pKSxlPT09MSYmKFIuc3BsYXNoc2NyZWVuJiZSLnNwbGFzaHNjcmVlbi5hdXRvY2xvc2UmJiFSLnNwbGFzaHNjcmVlbi5hbHdheXNTaG93QmVmb3JlUmVuZGVyJiZzLm5hdmlnYXRvci5jbG9zZVNwbGFzaHNjcmVlbigpLFIub25SZWFkeShmdW5jdGlvbigpe2hwKCl9KSl9ZnVuY3Rpb24geXAoZSx0LG4pe2xldCByPXskOnt9LCRnZXRBcHBXZWJ2aWV3KCl7cmV0dXJuIHR9LGdldE9wZW5lckV2ZW50Q2hhbm5lbCgpe3JldHVybiBuLmV2ZW50Q2hhbm5lbHx8KG4uZXZlbnRDaGFubmVsPW5ldyBLLkV2ZW50Q2hhbm5lbChlKSksbi5ldmVudENoYW5uZWx9LF9fc2V0dXAobyxjKXtvLiRnZXRBcHBXZWJ2aWV3PSgpPT50LG8uZ2V0T3BlbmVyRXZlbnRDaGFubmVsPWMuZ2V0T3BlbmVyRXZlbnRDaGFubmVsLHB0KG8sbiksdC5fX3ByZWxvYWRfXyYmKHQuX19wYWdlX189byk7bGV0IGc9R24oKSxiPWcuZmluZEluZGV4KFY9PlY9PT1jKTtiPi0xJiZnLnNwbGljZShiLDEsbyl9fTtwdChyLG4pLHQuX19wcmVsb2FkX18/KHQuX19wYWdlX189cix0LmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57am4odC5fX3BhZ2VfXyxLLk9OX1NIT1cpfSksdC5hZGRFdmVudExpc3RlbmVyKCJoaWRlIiwoKT0+e2puKHQuX19wYWdlX18sSy5PTl9ISURFKX0pKTpXbihyKX1sZXQgU3A9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3VybDpyLGV2ZW50czpvLGFuaW1hdGlvblR5cGU6YyxhbmltYXRpb25EdXJhdGlvbjpnfT1lLHtwYXRoOmIscXVlcnk6Vn09Sy5wYXJzZVVybChyKSxbVCxEXT1aUChiLGMsZyk7V2MoYiwoKT0+e0tQKHt1cmw6cixwYXRoOmIscXVlcnk6VixldmVudHM6byxhbmlUeXBlOlQsYW5pRHVyYXRpb246RH0pLnRoZW4odCkuY2F0Y2gobil9LGUub3BlblR5cGU9PT0iYXBwTGF1bmNoIil9LEpQPUVlKEZ1LFNwLEZ5LFd5KTtmdW5jdGlvbiBLUCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sZXZlbnRzOnIsYW5pVHlwZTpvLGFuaUR1cmF0aW9uOmN9KXtqbihLLk9OX0hJREUpO2xldCBnPW5ldyBLLkV2ZW50Q2hhbm5lbCh0cCgpKzEscik7cmV0dXJuIG5ldyBQcm9taXNlKGI9PntZYyhmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6Im5hdmlnYXRlVG8iLGV2ZW50Q2hhbm5lbDpnfSksbyxjLCgpPT57Yih7ZXZlbnRDaGFubmVsOmd9KX0pLEJhKCl9KX1mdW5jdGlvbiBaUChlLHQsbil7bGV0e2dsb2JhbFN0eWxlOnJ9PVIsbz1vcyhlKTtyZXR1cm5bdHx8by5hbmltYXRpb25UeXBlfHxyLmFuaW1hdGlvblR5cGV8fEdULG58fG8uYW5pbWF0aW9uRHVyYXRpb258fHIuYW5pbWF0aW9uRHVyYXRpb258fHpjXX1sZXQgWFA9RWUoVnUsKHt1cmw6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3BhdGg6cixxdWVyeTpvfT1LLnBhcnNlVXJsKGUpO1djKHIsKCk9PntRUCh7dXJsOmUscGF0aDpyLHF1ZXJ5Om99KS50aGVuKHQpLmNhdGNoKG4pfSl9LFV5LEd5KTtmdW5jdGlvbiBRUCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtsZXQgcj1BaSgpO3JldHVybiByJiZ0YShyKSxuZXcgUHJvbWlzZShvPT57WWMoZmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJyZWRpcmVjdFRvIn0pLCJub25lIiwwLCgpPT57aWYocil7bGV0IGM9ci4kZ2V0QXBwV2VidmlldygpO2MuX19wcmVsb2FkX18mJmpQKGMpLGMuY2xvc2UoIm5vbmUiKX1vKHZvaWQgMCl9KSxCYSgpfSl9bGV0IGVJPSh7dXJsOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtwYXRoOnIscXVlcnk6b309Sy5wYXJzZVVybChlKTtXYyhyLCgpPT57dEkoe3VybDplLHBhdGg6cixxdWVyeTpvfSkudGhlbih0KS5jYXRjaChuKX0pfTtmdW5jdGlvbiB0SSh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPUduKCkuc2xpY2UoMCk7RGUuZmluZChnPT5nLnBhdGg9PT10KS5tZXRhLmlzVGFiQmFyJiZfaS5zd2l0Y2hUYWIodC5zbGljZSgxKSksWWMoZmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJyZUxhdW5jaCJ9KSwibm9uZSIsMCwoKT0+e28uZm9yRWFjaChnPT5kcChnLCJub25lIikpLHIodm9pZCAwKX0pLEJhKCl9KX1sZXQgbkk9RWUoTmgsZUksJHksWXkpLHdwPShlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHt1cmw6cn09ZSx7cGF0aDpvLHF1ZXJ5OmN9PUsucGFyc2VVcmwocik7V2MobywoKT0+e2lJKHt1cmw6cixwYXRoOm8scXVlcnk6Y30pLnRoZW4odCkuY2F0Y2gobil9LGUub3BlblR5cGU9PT0iYXBwTGF1bmNoIil9LHJJPUVlKFBjLHdwLEh5LHF5KTtmdW5jdGlvbiBpSSh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtfaS5zd2l0Y2hUYWIodC5zbGljZSgxKSk7bGV0IHI9Um4oKSxvPXIubGVuZ3RoLGM9ITEsZz0hMSxiO28+PTEmJihiPXJbby0xXSxiJiYhYi4kLl9faXNUYWJCYXI/KGc9ITAsci5yZXZlcnNlKCkuZm9yRWFjaChUPT57IVQuJC5fX2lzVGFiQmFyJiZUIT09YiYmZHAoVCwibm9uZSIpfSksdGEoYiksTigoKT0+e2IuJHBhZ2Uub3BlblR5cGU9PT0icmVkaXJlY3RUbyI/bmwoYi4kZ2V0QXBwV2VidmlldygpLFhnLHpjKTpubChiLiRnZXRBcHBXZWJ2aWV3KCksImF1dG8iKX0sMTAwKSk6Yz0hMCk7bGV0IFY7cmV0dXJuIEduKCkuZm9yRWFjaChUPT57Sy5hZGRMZWFkaW5nU2xhc2goVC5yb3V0ZSk9PT10PyhULiQuX19pc0FjdGl2ZXx8KGc9ITApLFQuJC5fX2lzQWN0aXZlPSEwLFY9VCk6VC4kLl9faXNUYWJCYXImJihULiQuX19pc0FjdGl2ZT0hMSl9KSxiPT09ViYmKGM9ITEpLGImJmMmJmpuKGIsSy5PTl9ISURFKSxuZXcgUHJvbWlzZShUPT57aWYoVil7bGV0IEQ9Vi4kZ2V0QXBwV2VidmlldygpO0Quc2hvdygibm9uZSIpLGcmJiFELl9fcHJlbG9hZF9fJiZqbihWLEsuT05fU0hPVyksQmEoKSxUKHZvaWQgMCl9ZWxzZSBZYyhmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6InN3aXRjaFRhYiJ9KSwibm9uZSIsMCwoKT0+e0JhKCksVCh2b2lkIDApfSw3MCl9KX1sZXQgb0k9THQoa2gsKHt1cmw6ZX0pPT57bGV0IHQ9elAoe3VybDplfSk7cmV0dXJuIHQ/e2lkOnQuaWQsdXJsOmUsZXJyTXNnOiJ1blByZWxvYWRQYWdlOm9rIn06e3VybDplLGVyck1zZzoidW5QcmVsb2FkUGFnZTpmYWlsIG5vdCBmb3VuZCJ9fSx6eSksYUk9RWUoVXUsKHt1cmw6ZX0se3Jlc29sdmU6dH0pPT57aWYoQ2FbZV0pcmV0dXJuO2xldCBuPWUuc3BsaXQoIj8iKSxyPW5bMF0sbz1LLnBhcnNlUXVlcnkoblsxXXx8IiIpLGM9V1Aoe3VybDplLHBhdGg6cixxdWVyeTpvfSksZz1KYyhyLCJwcmVsb2FkUGFnZSIpO2cubWV0YS5pZD1wYXJzZUludChjLmlkKTtsZXQgYj1nYSgicHJlbG9hZFBhZ2UiLGUsbyxnLm1ldGEsdm9pZCAwLFIuZGFya21vZGU/cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpO3lwKHBhcnNlSW50KGMuaWQpLGMsYiksdCh7aWQ6Yy5pZCx1cmw6ZSxlcnJNc2c6InByZWxvYWRQYWdlOm9rIn0pfSxqeSk7dmFyIHNJPXtfX3Byb3RvX186bnVsbCwkZW1pdDpfXywkb2ZmOm1fLCRvbjpwXywkb25jZTp2XyxfX2xvZ19fOndULGFkZEludGVyY2VwdG9yOm9fLGFkZFBob25lQ29udGFjdDpZQyxhcnJheUJ1ZmZlclRvQmFzZTY0OkxyLGJhc2U2NFRvQXJyYXlCdWZmZXI6enIsY2FuSVVzZTpRdyxjYW52YXNHZXRJbWFnZURhdGE6R18sY2FudmFzUHV0SW1hZ2VEYXRhOllfLGNhbnZhc1RvVGVtcEZpbGVQYXRoOnFfLGNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6UUMsY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOlhDLGNob29zZUltYWdlOnlBLGNob29zZUxvY2F0aW9uOmJPLGNob29zZVZpZGVvOlNBLGNsZWFyU3RvcmFnZTpVdyxjbGVhclN0b3JhZ2VTeW5jOlZ3LGNsb3NlQXV0aFZpZXc6QmcsY2xvc2VCTEVDb25uZWN0aW9uOmtDLGNsb3NlQmx1ZXRvb3RoQWRhcHRlcjpDQyxjbG9zZVByZXZpZXdJbWFnZTpkQSxjbG9zZVNvY2tldDpWQSxjb21wcmVzc0ltYWdlOl9BLGNvbXByZXNzVmlkZW86YkEsY29uZmlnTVRMUzp4QSxjb25uZWN0U29ja2V0OkRBLGNyZWF0ZUFuaW1hdGlvbjpoYixjcmVhdGVCTEVDb25uZWN0aW9uOk5DLGNyZWF0ZUNhbnZhc0NvbnRleHQ6V18sY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQ6VVQsY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQ6dE8sY3JlYXRlSW50ZXJhY3RpdmVBZDpXVCxjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcjpRXyxjcmVhdGVJbnRlcnN0aXRpYWxBZDpIVCxjcmVhdGVMaXZlUHVzaGVyQ29udGV4dDpwTyxjcmVhdGVNYXBDb250ZXh0Ok5fLGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlcjp0YixjcmVhdGVQdXNoTWVzc2FnZTpkVCxjcmVhdGVSZXdhcmRlZFZpZGVvQWQ6RlQsY3JlYXRlU2VsZWN0b3JRdWVyeTpzYixjcmVhdGVWaWRlb0NvbnRleHQ6UF8sZG93bmxvYWRGaWxlOlBBLGdldEFwcEF1dGhvcml6ZVNldHRpbmc6ZGcsZ2V0QXBwQmFzZUluZm86WmgsZ2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzOnhDLGdldEJMRURldmljZVJTU0k6RkMsZ2V0QkxFRGV2aWNlU2VydmljZXM6UkMsZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlcjpkTyxnZXRCZWFjb25zOiRDLGdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZTpBQyxnZXRCbHVldG9vdGhEZXZpY2VzOlBDLGdldENoYW5uZWxNYW5hZ2VyOmhULGdldENoZWNrQm94U3RhdGU6TWcsZ2V0Q2xpcGJvYXJkRGF0YTpxQyxnZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzOklDLGdldERldmljZUluZm86S2gsZ2V0RW50ZXJPcHRpb25zU3luYzpNYixnZXRGaWxlSW5mbzpIdyxnZXRJbWFnZUluZm86Y0EsZ2V0TGF1bmNoT3B0aW9uc1N5bmM6TGIsZ2V0TG9jYWxlOktsLGdldExvY2F0aW9uOl9PLGdldE5ldHdvcmtUeXBlOmFnLGdldFByb3ZpZGVyOmFULGdldFB1c2hDbGllbnRJZDpEYixnZXRSZWNvcmRlck1hbmFnZXI6cEEsZ2V0U2F2ZWRGaWxlSW5mbzpLdyxnZXRTYXZlZEZpbGVMaXN0Okp3LGdldFNjcmVlbkJyaWdodG5lc3M6aUEsZ2V0U2VsZWN0ZWRUZXh0UmFuZ2U6d2IsZ2V0U3RvcmFnZTpMdyxnZXRTdG9yYWdlSW5mbzokdyxnZXRTdG9yYWdlSW5mb1N5bmM6RmgsZ2V0U3RvcmFnZVN5bmM6TXcsZ2V0U3ViTlZ1ZUJ5SWQ6blQsZ2V0U3lzdGVtSW5mbzpkQyxnZXRTeXN0ZW1JbmZvU3luYzpYaCxnZXRTeXN0ZW1TZXR0aW5nOnNBLGdldFVuaXZlcmlmeU1hbmFnZXI6ZlQsZ2V0VXNlckluZm86c1QsZ2V0VXNlclByb2ZpbGU6bFQsZ2V0VmlkZW9JbmZvOnVBLGdldFdpbmRvd0luZm86SmgsaGlkZUtleWJvYXJkOkNBLGhpZGVMb2FkaW5nOnhPLGhpZGVOYXZpZ2F0aW9uQmFyTG9hZGluZzpVTyxoaWRlVGFiQmFyOkdPLGhpZGVUYWJCYXJSZWREb3Q6S08saGlkZVRvYXN0OlJPLGluaXRVVFNDbGFzc05hbWU6cWcsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOnhULGluaXRVVFNQYWNrYWdlTmFtZTpSVCxpbml0VVRTUHJveHlDbGFzczpHZyxpbml0VVRTUHJveHlGdW5jdGlvbjpJVCxpbnRlcmNlcHRvcnM6c18saW52b2tlUHVzaENhbGxiYWNrOkx1LGxvYWRGb250RmFjZTpMTyxsb2dpbjpOZyxtYWtlUGhvbmVDYWxsOnpDLG5hdmlnYXRlQmFjazp3UCxuYXZpZ2F0ZVRvOkpQLG5hdmlnYXRlVG9NaW5pUHJvZ3JhbTpFVCxub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlOkJDLG9mZkFjY2VsZXJvbWV0ZXJDaGFuZ2U6X0Msb2ZmQXBwSGlkZTpCYixvZmZBcHBTaG93OlJiLG9mZkNvbXBhc3NDaGFuZ2U6Z0Msb2ZmRXJyb3I6TmIsb2ZmS2V5Ym9hcmRIZWlnaHRDaGFuZ2U6T0Esb2ZmTG9jYXRpb25DaGFuZ2U6Q08sb2ZmTG9jYXRpb25DaGFuZ2VFcnJvcjpPTyxvZmZOZXR3b3JrU3RhdHVzQ2hhbmdlOlpDLG9mZlBhZ2VOb3RGb3VuZDpQYixvZmZQdXNoTWVzc2FnZTpWYixvZmZUaGVtZUNoYW5nZTpyQSxvZmZVbmhhbmRsZWRSZWplY3Rpb246T2Isb2ZmV2luZG93UmVzaXplOl9iLG9uQWNjZWxlcm9tZXRlckNoYW5nZTptQyxvbkFwcEhpZGU6eGIsb25BcHBTaG93OmtiLG9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZTpTQyxvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZTp5QyxvbkJlYWNvblNlcnZpY2VDaGFuZ2U6VUMsb25CZWFjb25VcGRhdGU6VkMsb25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2U6RUMsb25CbHVldG9vdGhEZXZpY2VGb3VuZDpiQyxvbkNvbXBhc3NDaGFuZ2U6aEMsb25DcmVhdGVWdWVBcHA6Sy5vbkNyZWF0ZVZ1ZUFwcCxvbkVycm9yOkliLG9uSG9zdEV2ZW50UmVjZWl2ZTpVZyxvbktleWJvYXJkSGVpZ2h0Q2hhbmdlOkFBLG9uTG9jYWxlQ2hhbmdlOkViLG9uTG9jYXRpb25DaGFuZ2U6d08sb25Mb2NhdGlvbkNoYW5nZUVycm9yOkFPLG9uTmF0aXZlRXZlbnRSZWNlaXZlOnlULG9uTmV0d29ya1N0YXR1c0NoYW5nZTpLQyxvblBhZ2VOb3RGb3VuZDpUYixvblB1c2hNZXNzYWdlOkZiLG9uU29ja2V0Q2xvc2U6akEsb25Tb2NrZXRFcnJvcjokQSxvblNvY2tldE1lc3NhZ2U6SEEsb25Tb2NrZXRPcGVuOlVBLG9uVGFiQmFyTWlkQnV0dG9uVGFwOmdiLG9uVGhlbWVDaGFuZ2U6bkEsb25VbmhhbmRsZWRSZWplY3Rpb246QWIsb25XaW5kb3dSZXNpemU6bWIsb3BlbkFwcEF1dGhvcml6ZVNldHRpbmc6bEEsb3BlbkJsdWV0b290aEFkYXB0ZXI6d0Msb3BlbkRvY3VtZW50Olh3LG9wZW5Mb2NhdGlvbjpFTyxwYWdlU2Nyb2xsVG86RE8scHJlTG9naW46UmcscHJlbG9hZFBhZ2U6YUkscHJldmlld0ltYWdlOmZBLHJlTGF1bmNoOm5JLHJlYWRCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlOk1DLHJlZGlyZWN0VG86WFAscmVnaXN0ZXJSdW50aW1lOmdULHJlZ2lzdGVyVVRTSW50ZXJmYWNlOkJULHJlZ2lzdGVyVVRTUGx1Z2luOk1ULHJlbW92ZUludGVyY2VwdG9yOmFfLHJlbW92ZVNhdmVkRmlsZTpadyxyZW1vdmVTdG9yYWdlOkZ3LHJlbW92ZVN0b3JhZ2VTeW5jOkR3LHJlbW92ZVRhYkJhckJhZGdlOkpPLHJlcXVlc3Q6UkEscmVxdWVzdFBheW1lbnQ6YlQscmVxdWlyZUdsb2JhbDppVCxyZXF1aXJlTmF0aXZlUGx1Z2luOllvLHJlcXVpcmVVVFNQbHVnaW46TFQscmVzdG9yZUdsb2JhbDpyVCxzYXZlRmlsZTpHdyxzYXZlSW1hZ2VUb1Bob3Rvc0FsYnVtOm1BLHNhdmVWaWRlb1RvUGhvdG9zQWxidW06dkEsc2NhbkNvZGU6dEEsc2VuZEhvc3RFdmVudDpGZyxzZW5kTmF0aXZlRXZlbnQ6cmcsc2VuZFNvY2tldE1lc3NhZ2U6RkEsc2V0QkxFTVRVOkRDLHNldENsaXBib2FyZERhdGE6SkMsc2V0S2VlcFNjcmVlbk9uOmFBLHNldExvY2FsZTp5YixzZXROYXZpZ2F0aW9uQmFyQ29sb3I6SE8sc2V0TmF2aWdhdGlvbkJhclRpdGxlOkZPLHNldFBhZ2VNZXRhOlNiLHNldFNjcmVlbkJyaWdodG5lc3M6b0Esc2V0U3RvcmFnZTpCdyxzZXRTdG9yYWdlU3luYzp4dyxzZXRUYWJCYXJCYWRnZTpqTyxzZXRUYWJCYXJJdGVtOnpPLHNldFRhYkJhclN0eWxlOldPLHNoYXJlOm1ULHNoYXJlV2l0aFN5c3RlbTpfVCxzaG93QWN0aW9uU2hlZXQ6SU8sc2hvd0tleWJvYXJkOndBLHNob3dMb2FkaW5nOk5PLHNob3dNb2RhbDpUTyxzaG93TmF2aWdhdGlvbkJhckxvYWRpbmc6Vk8sc2hvd1RhYkJhcjpZTyxzaG93VGFiQmFyUmVkRG90OnFPLHNob3dUb2FzdDprTyxzdGFydEFjY2VsZXJvbWV0ZXI6dGcsc3RhcnRCZWFjb25EaXNjb3Zlcnk6SEMsc3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5Ok9DLHN0YXJ0Q29tcGFzczpRaCxzdGFydExvY2F0aW9uVXBkYXRlOnlPLHN0YXJ0UHVsbERvd25SZWZyZXNoOkJPLHN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjplQSxzdG9wQWNjZWxlcm9tZXRlcjpuZyxzdG9wQmVhY29uRGlzY292ZXJ5OmpDLHN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5OlRDLHN0b3BDb21wYXNzOmVnLHN0b3BMb2NhdGlvblVwZGF0ZTpTTyxzdG9wUHVsbERvd25SZWZyZXNoOk1PLHN3aXRjaFRhYjpySSxzeW5jRGF0YVRvR2xvYmFsOm9ULHVuUHJlbG9hZFBhZ2U6b0ksdXBsb2FkRmlsZTpXQSx1cHgycHg6UW0sdmlicmF0ZUxvbmc6dkMsdmlicmF0ZVNob3J0OnBDLHdlZXhHZXRTeXN0ZW1JbmZvU3luYzppYyx3cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWU6TEN9O2xldCBsST16LmV4dGVuZChVLHtwdWJsaXNoSGFuZGxlcjpjSX0pO2Z1bmN0aW9uIGNJKGUsdCxuKXt0PUpTT04uc3RyaW5naWZ5KHQpLHouaXNBcnJheShuKXx8KG49W25dKTtsZXQgcj1gdHlwZW9mIFVuaVZpZXdKU0JyaWRnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgVW5pVmlld0pTQnJpZGdlLnN1YnNjcmliZUhhbmRsZXIoIiR7ZX0iLCR7dH0sX19QQUdFX0lEX18pYDtuLmZvckVhY2gobz0+e2xldCBjPVN0cmluZyhvKSxnPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChjKTtnJiZnLmV2YWxKUyhyLnJlcGxhY2UoIl9fUEFHRV9JRF9fIixjKSl9KX1mdW5jdGlvbiB1SSgpe2xldHt0YWJCYXI6ZX09UjtpZighKGUmJmUubGlzdCYmZS5saXN0Lmxlbmd0aCkpcmV0dXJuO2xldHtlbnRyeVBhZ2VQYXRoOm59PVI7ZS5zZWxlY3RlZEluZGV4PTA7bGV0IHI9ZS5saXN0LmZpbmRJbmRleChvPT5vLnBhZ2VQYXRoPT09bik7X2kuaW5pdChlLChvLGMpPT57UC5zd2l0Y2hUYWIoe3VybDpLLmFkZExlYWRpbmdTbGFzaChvLnBhZ2VQYXRoKSxvcGVuVHlwZToic3dpdGNoVGFiIixmcm9tOiJ0YWJCYXIiLHN1Y2Nlc3MoKXtqbihLLk9OX1RBQl9JVEVNX1RBUCx7aW5kZXg6Yyx0ZXh0Om8udGV4dCxwYWdlUGF0aDpvLnBhZ2VQYXRofSl9fSl9KSxyIT09LTEmJihlLnNlbGVjdGVkSW5kZXg9cixyIT09MCYmX2kuc3dpdGNoVGFiKG4pKX1mdW5jdGlvbiBmSSgpe2xldCBlPXMuZ2xvYmFsRXZlbnQsdD1mLnJlcXVpcmVNb2R1bGUoImdsb2JhbEV2ZW50Iikse2VtaXQ6bixwdWJsaXNoSGFuZGxlcjpyfT1vdDtmLmNvbmZpZy5wcmVsb2FkP3Mua2V5LmFkZEV2ZW50TGlzdGVuZXIoTG8sVWkpOmUuYWRkRXZlbnRMaXN0ZW5lcigic3BsYXNoY2xvc2VkIiwoKT0+e3Mua2V5LmFkZEV2ZW50TGlzdGVuZXIoTG8sVWkpfSksZS5hZGRFdmVudExpc3RlbmVyKCJwYXVzZSIsKCk9PntuKEsuT05fQVBQX0VOVEVSX0JBQ0tHUk9VTkQpfSksZS5hZGRFdmVudExpc3RlbmVyKCJyZXN1bWUiLCgpPT57bGV0IGM9QnMoKTtjJiZjLnVzZXJBY3Rpb24mJnhzKGMpLG4oSy5PTl9BUFBfRU5URVJfRk9SRUdST1VORCxEbygpKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidWlzdHlsZWNoYW5nZSIsZnVuY3Rpb24oYyl7bGV0IGc9e3RoZW1lOmMudWlzdHlsZX07bihLLk9OX1RIRU1FX0NIQU5HRSxnKSxyKEsuT05fVEhFTUVfQ0hBTkdFLGcsaGEoKSksckMoKX0pO2xldCBvPTA7ZS5hZGRFdmVudExpc3RlbmVyKCJLZXlib2FyZEhlaWdodENoYW5nZSIsZnVuY3Rpb24oYyl7byE9PWMuaGVpZ2h0JiYobz1jLmhlaWdodCxuKEsuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSx7aGVpZ2h0Om99KSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoSlQsZnVuY3Rpb24oYyl7YyYmYy5ldmVudCYmU1QoYy5ldmVudCxjLmRhdGEpfSksZS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsQ3ApLGUuYWRkRXZlbnRMaXN0ZW5lcigiV2Vidmlld1Bvc3RNZXNzYWdlIixDcCl9ZnVuY3Rpb24gQ3Aoe2RhdGE6ZX0pe2UmJmUudHlwZSYmb3Quc3Vic2NyaWJlSGFuZGxlcigicGx1c01lc3NhZ2UuIitlLnR5cGUsZS5hcmdzKX1mdW5jdGlvbiBBcChlLHQsbj0hMSl7b3Quc3Vic2NyaWJlKCJwbHVzTWVzc2FnZS4iK2UsdCxuKX1mdW5jdGlvbiBkSShlKXtDYihlLiQpO2xldHtlbnRyeVBhZ2VQYXRoOnQsZW50cnlQYWdlUXVlcnk6bixyZWZlcnJlckluZm86cn09UixvPWhzKHtwYXRoOnQscXVlcnk6bixyZWZlcnJlckluZm86cn0pO2puKGUsSy5PTl9MQVVOQ0gsbyksam4oZSxLLk9OX1NIT1csbyk7bGV0IGM9Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIikuZ2V0QXBwU3RhdGU7KGMmJk51bWJlcihjKCkpKT09PTImJmpuKGUsSy5PTl9ISURFLG8pfWZ1bmN0aW9uIE9wKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXC8kLywiIiksZS5pbmRleE9mKCJfIik9PT0wP3MuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKTplfWZ1bmN0aW9uIGhJKCl7bGV0IGU9T3AoZnMpLHQ9T3AoSnIpLG49dC5zcGxpdCgiLyIpO24ucG9wKCk7bGV0IHI9bi5qb2luKCIvIik7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKHMuaW8uY29udmVydEFic29sdXRlRmlsZVN5c3RlbShyKSxvPT57by5jcmVhdGVSZWFkZXIoKS5yZWFkRW50cmllcyhmdW5jdGlvbihnKXtsZXQgYj1nO2ImJmIubGVuZ3RoJiZiLmZvckVhY2goZnVuY3Rpb24oVil7Vi5pc0RpcmVjdG9yeSYmVi5mdWxsUGF0aC5pbmRleE9mKGUpPT09MCYmVi5mdWxsUGF0aC5pbmRleE9mKHQpIT09MCYmVi5yZW1vdmVSZWN1cnNpdmVseSgpfSl9KX0pfWxldCBUcD0wLHhsPTAsS2M9bnVsbCxybD1udWxsO2Z1bmN0aW9uIGdJKGUsdCl7aWYoS2M9bnVsbCxybCYmKHkocmwpLHJsPW51bGwpLGUudHlwZT09PSJvbkZvY3VzIilpZih4bD4wKWUuZGV0YWlsLmhlaWdodD14bDtlbHNle3JsPU4oZnVuY3Rpb24oKXtlLmRldGFpbC5oZWlnaHQ9eGwsdChlKX0sVHApLEtjPWZ1bmN0aW9uKCl7cmwmJih5KHJsKSxybD1udWxsKSxlLmRldGFpbC5oZWlnaHQ9eGwsdChlKX07cmV0dXJufXQoZSl9ZnVuY3Rpb24gcEkoKXtUcD1zLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIj8zMDA6NzAwLG90Lm9uKEsuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSx0PT57aWYoeGw9dC5oZWlnaHQseGw+MCl7bGV0IG49S2M7S2M9bnVsbCxuJiZuKCl9fSl9ZnVuY3Rpb24gdkkoZSx0LG4pe2xldCByPXQudHlwZTtyPT09Im9uRm9jdXMifHxyPT09Im9uQmx1ciI/Z0kodCxvPT57bi5maXJlRXZlbnQoZSxvKX0pOm4uZmlyZUV2ZW50KGUsdCl9ZnVuY3Rpb24gbUkoZSx0KXtsZXQgbj1OcihwYXJzZUludCh0KSk7aWYoIW4pcmV0dXJuO2xldCByPW4uX19wYWdlX2NvbnRhaW5lcl9fO2UuZm9yRWFjaChvPT57c3dpdGNoKG9bMF0pe2Nhc2UgSy5BQ1RJT05fVFlQRV9FVkVOVDp2SShvWzFdLG9bMl0scik7YnJlYWt9fSl9bGV0IFBwPXt9O2Z1bmN0aW9uIF9JKGUsdCxuKXtsZXR7YWRwaWQ6cix3aWR0aDpvfT1lLGM9cisiLSIrbyxnPVBwW2NdO2lmKGcmJmcubGVuZ3RoPjApe3QoZy5zcGxpY2UoMCwxKVswXSk7cmV0dXJufXMuYWQuZ2V0QWRzKGUsYj0+e2xldCBWPWIuYWRzO3QoVi5zcGxpY2UoMCwxKVswXSksUHBbY109Zz9nLmNvbmNhdChWKTpWfSxiPT57bih7ZXJyQ29kZTpiLmNvZGUsZXJyTXNnOmIubWVzc2FnZX0pfSl9ZnVuY3Rpb24gYkkoKXt4KCJnZXRBZERhdGEiLChlLHQpPT57X0koZSxuPT57dCh7Y29kZTowLGRhdGE6bn0pfSxuPT57dCh7Y29kZToxLG1lc3NhZ2U6bn0pfSl9KX1sZXQgRUk9WyJzd2l0Y2hUYWIiLCJyZUxhdW5jaCIsInJlZGlyZWN0VG8iLCJuYXZpZ2F0ZVRvIiwibmF2aWdhdGVCYWNrIl07ZnVuY3Rpb24geUkoKXtFSS5mb3JFYWNoKGU9Pnt4KGUsdD0+e1BbZV0oei5leHRlbmQodCx7ZmFpbChuKXtjb25zb2xlLmVycm9yKG4uZXJyTXNnKX19KSl9KX0pfWxldCBJcD0hMTtmdW5jdGlvbiBTSShlLHQpe2xldCBuPXQ9PT0iMSI7aWYoIShuJiZJcCkpe2lmKG4/KElwPSEwLG9wKHMud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCkpKTokaXx8b3Aocy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQpKSwhJGkubG9hZGVkKXtpZigkaS5pZCE9PXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYHdlYnZpZXdSZWFkeVskeyRpLmlkfV1bJHt0fV0gbm90IG1hdGNoYCk7JGkubG9hZGVkPSEwfW90LmVtaXQoUmwrIi4iK3QpLG4mJndJKCl9fWZ1bmN0aW9uIHdJKCl7bGV0e2F1dG9jbG9zZTplLGFsd2F5c1Nob3dCZWZvcmVSZW5kZXI6dH09Ui5zcGxhc2hzY3JlZW47ZSYmIXQmJnMubmF2aWdhdG9yLmNsb3NlU3BsYXNoc2NyZWVuKCk7bGV0IG49Sy5hZGRMZWFkaW5nU2xhc2goUi5lbnRyeVBhZ2VQYXRoKSxyPUtpKG4pO2lmKCFyLm1ldGEuaXNOVnVlKXtsZXQgbz17dXJsOm4rKFIuZW50cnlQYWdlUXVlcnl8fCIiKSxvcGVuVHlwZToiYXBwTGF1bmNoIn0sYz17cmVzb2x2ZSgpe30scmVqZWN0KCl7fX07cmV0dXJuIHIubWV0YS5pc1RhYkJhcj93cChvLGMpOlNwKG8sYyl9fWZ1bmN0aW9uIENJKGUsdCl7bGV0IG49TnIocGFyc2VJbnQodCkpO24mJihuLl9fdW5pYXBwX3dlYnZpZXc9ITApfWZ1bmN0aW9uIEFJKGUsdCl7bGV0IG49TnIocGFyc2VJbnQodCkpO24mJmRlbGV0ZSBuLl9fdW5pYXBwX3dlYnZpZXd9bGV0IE9JPSh7bmFtZTplLGFyZzp0fSxuKT0+e2U9PT0icG9zdE1lc3NhZ2UiP1RJKG5bMF0sdCk6UFtlXSh6LmV4dGVuZCh0LHtmYWlsKHIpe2NvbnNvbGUuZXJyb3Ioci5lcnJNc2cpfX0pKX07ZnVuY3Rpb24gVEkoZSx0KXtsZXQgbj1QUCgid2ViLXZpZXciLHBhcnNlSW50KGUpKTtuJiZuLmRpc3BhdGNoRXZlbnQoSy5jcmVhdGVVbmlFdmVudCh7dHlwZToib25NZXNzYWdlIix0YXJnZXQ6T2JqZWN0LmNyZWF0ZShudWxsKSxjdXJyZW50VGFyZ2V0Ok9iamVjdC5jcmVhdGUobnVsbCksZGV0YWlsOntkYXRhOlt0XX19KSl9ZnVuY3Rpb24gUEkoe25vZGVJZDplLG93bmVySWQ6dCxtZXRob2Q6bixhcmdzOnJ9LG8pe2xldCBjPWdwKGUscGFyc2VJbnQobykpO2lmKCFjKXJldHVybjtsZXQgZz1JSSh0LGMuX192dWVQYXJlbnRDb21wb25lbnQpOyFnfHwhZ1tuXXx8Z1tuXShyKX1mdW5jdGlvbiBJSShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQudWlkPT09ZSlyZXR1cm4gdC5wcm94eTtsZXQgbj10LnBhcmVudDtmb3IoO247KXtpZihuLnVpZD09PWUpcmV0dXJuIG4ucHJveHk7bj1uLnBhcmVudH1yZXR1cm4gdC5wcm94eX1mdW5jdGlvbiBOSSgpe2xldHtzdWJzY3JpYmU6ZSxzdWJzY3JpYmVIYW5kbGVyOnQscHVibGlzaEhhbmRsZXI6bn09b3Q7aWYoQXAoInN1YnNjcmliZUhhbmRsZXIiLCh7dHlwZTpyLGRhdGE6byxwYWdlSWQ6Y30pPT57dChyLG8sYyl9KSxBcChLLldFQl9JTlZPS0VfQVBQU0VSVklDRSwoe2RhdGE6cix3ZWJ2aWV3SWRzOm99KT0+e09JKHIsbyl9KSxSLnJlbmRlcmVyIT09Im5hdGl2ZSIpe2UoUmwsU0kpLGUoVGcsbUkpLHYoKSxiSSgpLHlJKCksZShRTyxDSSksZShlVCxBSSksZShLLk9OX1dYU19JTlZPS0VfQ0FMTF9NRVRIT0QsUEkpO2xldCByPUtpKEsuYWRkTGVhZGluZ1NsYXNoKFIuZW50cnlQYWdlUGF0aCkpO3ImJiFyLm1ldGEuaXNOVnVlJiZuKFJsLHt9LDEpfX1sZXQgQmwsY2Y9e2dsb2JhbERhdGE6e319O2Z1bmN0aW9uIGtJKHthbGxvd0RlZmF1bHQ6ZT0hMX09e30pe2lmKEJsKXJldHVybiBCbDtpZihlKXJldHVybiBjZjtjb25zb2xlLmVycm9yKCJbd2Fybl06IGdldEFwcCgpIGZhaWxlZC4gTGVhcm4gbW9yZTogaHR0cHM6Ly91bmlhcHAuZGNsb3VkLmlvL2NvbGxvY2F0aW9uL2ZyYW1lL3dpbmRvdz9pZD1nZXRhcHAuIil9ZnVuY3Rpb24gUkkoZSl7aWYoUC5WdWV4JiZlLiRzdG9yZSl7bGV0e3VzZVN0b3JlOnR9PVAuVnVleDtQLlZ1ZXgudXNlU3RvcmU9bj0+bj90KG4pOmUuJHN0b3JlfWphKGUpLEJsPWUsbHQoQmwpLHouZXh0ZW5kKEJsLGNmKSx5dChCbCxjZi5nbG9iYWxEYXRhKSx3ZSgpLEVwKCksdUkoKSxmSSgpLHBJKCksTkkoKSxkSShlKSxOKGhJLDFlNCksUi5yZWFkeT0hMH12YXIgeEk9e3VuaTpzSSxnZXRBcHA6a0ksZ2V0Q3VycmVudFBhZ2VzOkNyLF9fZGVmaW5lUGFnZTpVUCxfX3JlZ2lzdGVyQXBwOlJJLF9fcmVnaXN0ZXJQYWdlOmZjLFVuaVNlcnZpY2VKU0JyaWRnZTpsSX07cmV0dXJuIHhJfShOdCxVdCx3KTtUdD1UdC5kZWZhdWx0fHxUdDtsZXQgUD1UdC51bmksQ3Q9VHQuZ2V0QXBwLFJuPVR0LmdldEN1cnJlbnRQYWdlcyxvdD1UdC5VbmlTZXJ2aWNlSlNCcmlkZ2U7cmV0dXJuIFR0fXZhciBndj1Fayh3ayk7ZnVuY3Rpb24gcHYoZil7fXZhciB2dj1mPT57fTt2YXIgbXY9Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6eSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsRT0iRENsb3VkVW5pQ3JlYXRlUmVxdWVzdFBlcm1pc3Npb25MaXN0ZW5lciIsUj0idW5pLWNyZWF0ZVJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXIiLERlPSJidWlsdC1pbiIsTnQ9IiIsVXQ9ITAsVHQ9TihFLFV0KSxQPXkoRSxVdCk7cygiUmVxdWVzdFBlcm1pc3Npb25MaXN0ZW5lck9wdGlvbnMiLE9iamVjdC5hc3NpZ24oe21vZHVsZU5hbWU6Uixtb2R1bGVUeXBlOkRlLGVyck1zZzpOdCxwYWNrYWdlOlR0LGNsYXNzOmgoRSwiUmVxdWVzdFBlcm1pc3Npb25MaXN0ZW5lckJ5SnNQcm94eSIsVXQpfSx7bWV0aG9kczp7b25SZXF1ZXN0QnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToiY2FsbGJhY2siLHR5cGU6IlVUU0NhbGxiYWNrIn1dLHJldHVybjp7fX0sb25Db25maXJtQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToiY2FsbGJhY2siLHR5cGU6IlVUU0NhbGxiYWNrIn1dLHJldHVybjp7fX0sb25Db21wbGV0ZUJ5SnM6e2FzeW5jOiExLHBhcmFtczpbe25hbWU6ImNhbGxiYWNrIix0eXBlOiJVVFNDYWxsYmFjayJ9XSxyZXR1cm46e319LHN0b3BCeUpzOnthc3luYzohMSxwYXJhbXM6W10scmV0dXJuOnt9fX0scHJvcHM6W119KSksZi5jcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyPXcoITEse21vZHVsZU5hbWU6Uixtb2R1bGVUeXBlOkRlLGVyck1zZzpOdCxtYWluOiEwLHBhY2thZ2U6VHQsY2xhc3M6UCxuYW1lOiJjcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyQnlKcyIscGFyYW1zOltdLHJldHVybjp7dHlwZToiaW50ZXJmYWNlIixvcHRpb25zOiJSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyT3B0aW9ucyJ9fSl9O3ZhciBfdj1mPT57fTt2YXIgYnY9Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6eSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsRT0iRENsb3VkVW5pRXhpdCIsUj0idW5pLWV4aXQiLERlPSJidWlsdC1pbiIsTnQ9IiIsVXQ9ITAsVHQ9TihFLFV0KSxQPXkoRSxVdCk7Zi5leGl0PXcoITEse21vZHVsZU5hbWU6Uixtb2R1bGVUeXBlOkRlLGVyck1zZzpOdCxtYWluOiEwLHBhY2thZ2U6VHQsY2xhc3M6UCxuYW1lOiJleGl0QnlKcyIscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUV4aXRFeGl0T3B0aW9uc0pTT05PYmplY3QiLGRlZmF1bHQ6IlVUU051bGwifV0scmV0dXJuOiIifSl9O3ZhciBFdj1mPT57bGV0e3JlZ2lzdGVyVVRTSW50ZXJmYWNlOnMsaW5pdFVUU1Byb3h5Q2xhc3M6cCxpbml0VVRTUHJveHlGdW5jdGlvbjp3LGluaXRVVFNQYWNrYWdlTmFtZTpOLGluaXRVVFNJbmRleENsYXNzTmFtZTp5LGluaXRVVFNDbGFzc05hbWU6aH09ZixFPSJEQ2xvdWRVbmlGYWNpYWxSZWNvZ25pdGlvblZlcmlmeSIsUj0iRmFjaWFsUmVjb2duaXRpb25WZXJpZnkoXHU1QjlFXHU0RUJBXHU4QkE0XHU4QkMxKSIsRGU9ImJ1aWx0LWluIixOdD0iIixVdD0hMCxUdD1OKEUsVXQpLFA9eShFLFV0KTtmLnN0YXJ0RmFjaWFsUmVjb2duaXRpb25WZXJpZnk9dyghMSx7bW9kdWxlTmFtZTpSLG1vZHVsZVR5cGU6RGUsZXJyTXNnOk50LG1haW46ITAscGFja2FnZTpUdCxjbGFzczpQLG5hbWU6InN0YXJ0RmFjaWFsUmVjb2duaXRpb25WZXJpZnlCeUpzIixwYXJhbXM6W3tuYW1lOiJmYWNlU3R5bGUiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGYWNpYWxSZWNvZ25pdGlvblZlcmlmeVN0YXJ0RmFjaWFsUmVjb2duaXRpb25WZXJpZnlPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46IiJ9KSxmLmdldEZhY2lhbFJlY29nbml0aW9uTWV0YUluZm89dyghMSx7bW9kdWxlTmFtZTpSLG1vZHVsZVR5cGU6RGUsZXJyTXNnOk50LG1haW46ITAscGFja2FnZTpUdCxjbGFzczpQLG5hbWU6ImdldEZhY2lhbFJlY29nbml0aW9uTWV0YUluZm9CeUpzIixwYXJhbXM6W10scmV0dXJuOiIifSl9O3ZhciB5dj1mPT57fTt2YXIgU3Y9Zj0+e307dmFyIHd2PWY9Pnt9O3ZhciBDdj1mPT57fTt2YXIgQXY9Zj0+e307dmFyIE92PWY9Pnt9O3ZhciBUdj1mPT57fTt2YXIgUHY9Zj0+e307dmFyIEl2PWY9Pnt9O3ZhciBOdj1mPT57bGV0e3JlZ2lzdGVyVVRTSW50ZXJmYWNlOnMsaW5pdFVUU1Byb3h5Q2xhc3M6cCxpbml0VVRTUHJveHlGdW5jdGlvbjp3LGluaXRVVFNQYWNrYWdlTmFtZTpOLGluaXRVVFNJbmRleENsYXNzTmFtZTp5LGluaXRVVFNDbGFzc05hbWU6aH09ZixFPSJEQ2xvdWRVbmlJbnN0YWxsQXBrIixSPSJ1bmktaW5zdGFsbEFwayIsRGU9ImJ1aWx0LWluIixOdD0iIixVdD0hMCxUdD1OKEUsVXQpLFA9eShFLFV0KTtmLmluc3RhbGxBcGs9dyghMSx7bW9kdWxlTmFtZTpSLG1vZHVsZVR5cGU6RGUsZXJyTXNnOk50LG1haW46ITAscGFja2FnZTpUdCxjbGFzczpQLG5hbWU6Imluc3RhbGxBcGtCeUpzIixwYXJhbXM6W3tuYW1lOiJvcHRpb25zIix0eXBlOiJVVFNTREtNb2R1bGVzRENsb3VkVW5pSW5zdGFsbEFwa0luc3RhbGxBcGtPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46IiJ9KX07dmFyIGt2PWY9Pnt9O3ZhciBSdj1mPT57fTt2YXIgeHY9Zj0+e307dmFyIEJ2PWY9Pnt9O3ZhciBNdj1mPT57fTt2YXIgTHY9Zj0+e307dmFyIER2PWY9Pnt9O3ZhciBGdj1mPT57fTt2YXIgVnY9Zj0+e307dmFyIFV2PWY9Pnt9O2Z1bmN0aW9uICR2KGYpe3Z2KGYpLG12KGYpLF92KGYpLGJ2KGYpLEV2KGYpLHl2KGYpLFN2KGYpLHd2KGYpLEN2KGYpLEF2KGYpLE92KGYpLFR2KGYpLFB2KGYpLEl2KGYpLE52KGYpLGt2KGYpLFJ2KGYpLHh2KGYpLEJ2KGYpLE12KGYpLEx2KGYpLER2KGYpLEZ2KGYpLFZ2KGYpLFV2KGYpLHB2KGYpfXZhciBSZix4ZixCZixMYSxNZixMZixEZjtmdW5jdGlvbiBIdigpe3JldHVybiBMYT97X19kZWZpbmVQYWdlOlJmLF9fcmVnaXN0ZXJBcHA6eGYsX19yZWdpc3RlclBhZ2U6QmYsdW5pOkxhLHd4OkxhLGdldEFwcDpNZixnZXRDdXJyZW50UGFnZXM6TGYsVW5pU2VydmljZUpTQnJpZGdlOkRmfTp7fX1mdW5jdGlvbiBqdihmKXtsZXR7d2VleDpzLHBsdXM6cCxWdWVTaGFyZWQ6d309ZjtyZXR1cm4gTGF8fCh7X19kZWZpbmVQYWdlOlJmLF9fcmVnaXN0ZXJBcHA6eGYsX19yZWdpc3RlclBhZ2U6QmYsdW5pOkxhLGdldEFwcDpNZixnZXRDdXJyZW50UGFnZXM6TGYsVW5pU2VydmljZUpTQnJpZGdlOkRmfT1odihzLHAsZiksTGEuVnVlU2hhcmVkPXcsJHYoTGEpLERwKExhKSkse19fZGVmaW5lUGFnZTpSZixfX3JlZ2lzdGVyQXBwOnhmLF9fcmVnaXN0ZXJQYWdlOkJmLHBsdXM6cCx1bmk6TGEsd3g6TGEsZ2V0QXBwOk1mLGdldEN1cnJlbnRQYWdlczpMZixVbmlTZXJ2aWNlSlNCcmlkZ2U6RGZ9fWZ1bmN0aW9uIHp2KGYscyl7bGV0e19fdW5pQ29uZmlnOnB9PXM7aWYoIXApcmV0dXJuO2xldCB3PXMud2VleDt3LmRvY3VtZW50Ll9fJGF1dG9tYXRvcl9fPSEhcC5hdXRvbWF0b3I7bGV0IE49cC5yZW5kZXJlciE9PSJuYXRpdmUiJiZ3LmNvbmZpZy5idW5kbGVVcmwuaW5kZXhPZigiYXBwLXNlcnZpY2UuanMiKSE9PS0xO2lmKEhpKHMsSHYoKSksTj9ndihzKTooJHAoZixzKSxhdihzLlZ1ZS5wYXJzZUNsYXNzU3R5bGVzKSksSGkocyxqdihzKSksdy5jb25maWcucGx1c193ZWJfaWQ9PT0iMSIpe2xldCBSPXcucmVxdWlyZU1vZHVsZSgicGx1cyIpO1Iuc2V0RGVmYXVsdEZvbnRTaXplJiZSLnNldERlZmF1bHRGb250U2l6ZShNYXRoLnJvdW5kKHMucGx1cy5zY3JlZW4ucmVzb2x1dGlvbldpZHRoLzIwKSl9bGV0e3NjYWxlOnksZGV2aWNlV2lkdGg6aCxwbGF0Zm9ybTpFfT1nbG9iYWwuV1hFbnZpcm9ubWVudDtpZihFLnRvTG93ZXJDYXNlKCk9PT0iaW9zIil7bGV0IFI9TWF0aC5jZWlsKGgveSk7dy5yZXF1aXJlTW9kdWxlKCJtZXRhIikuc2V0Vmlld3BvcnQoe3dpZHRoOlIscm91bmRPZmZEZXZpYXRpb246ITF9KX19dmFyIGNsPWNsYXNzIGV4dGVuZHMgbGx7Y29uc3RydWN0b3Iocyl7c3VwZXIoKTt0aGlzLm5vZGVUeXBlPTg7dGhpcy50eXBlPSJjb21tZW50Ijt0aGlzLnZhbHVlPSIiO3RoaXMudmFsdWU9c310b1N0cmluZygpe3JldHVybiI8IS0tICIrdGhpcy52YWx1ZSsiIC0tPiJ9fTtmdW5jdGlvbiBDbyhmLHM9W10pe3JldHVybnttb2R1bGU6ImRvbSIsbWV0aG9kOmYsYXJnczpzfX12YXIgVWw9Y2xhc3N7Y29uc3RydWN0b3IocyxwKXt0aGlzLmlkPXMsdGhpcy5iYXRjaGVkPSExLHRoaXMudXBkYXRlcz1bXSxGbihwKT9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaGFuZGxlciIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnB9KTpjb25zb2xlLmVycm9yKCJbSlMgUnVudGltZV0gaW52YWxpZCBwYXJhbWV0ZXIsIGhhbmRsZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9Y3JlYXRlRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW0NvKCJjcmVhdGVGaW5pc2giKV0scyl9dXBkYXRlRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW0NvKCJ1cGRhdGVGaW5pc2giKV0scyl9cmVmcmVzaEZpbmlzaChzKXtyZXR1cm4gdGhpcy5oYW5kbGVyKFtDbygicmVmcmVzaEZpbmlzaCIpXSxzKX1jcmVhdGVCb2R5KHMpe2xldCBwPXMudG9KU09OKCksdz1wLmNoaWxkcmVuO2RlbGV0ZSBwLmNoaWxkcmVuO2xldCBOPVtDbygiY3JlYXRlQm9keSIsW3BdKV07cmV0dXJuIHcmJk4ucHVzaC5hcHBseShOLHcubWFwKHk9PkNvKCJhZGRFbGVtZW50IixbcC5yZWYseSwtMV0pKSksdGhpcy5hZGRBY3Rpb25zKE4pfWFkZEVsZW1lbnQocyxwLHcpe3JldHVybiB3Pj0wfHwodz0tMSksdGhpcy5hZGRBY3Rpb25zKENvKCJhZGRFbGVtZW50IixbcCxzLnRvSlNPTigpLHddKSl9cmVtb3ZlRWxlbWVudChzKXtpZihraShzKSl7bGV0IHA9cy5tYXAodz0+Q28oInJlbW92ZUVsZW1lbnQiLFt3XSkpO3JldHVybiB0aGlzLmFkZEFjdGlvbnMocCl9cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhDbygicmVtb3ZlRWxlbWVudCIsW3NdKSl9bW92ZUVsZW1lbnQocyxwLHcpe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoQ28oIm1vdmVFbGVtZW50IixbcyxwLHddKSl9c2V0QXR0cihzLHAsdyl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhDbygidXBkYXRlQXR0cnMiLFtzLHtbcF06d31dKSl9c2V0U3R5bGUocyxwLHcpe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoQ28oInVwZGF0ZVN0eWxlIixbcyx7W3BdOnd9XSkpfXNldFN0eWxlcyhzLHApe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoQ28oInVwZGF0ZVN0eWxlIixbcyxwXSkpfWFkZEV2ZW50KHMscCl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhDbygiYWRkRXZlbnQiLFtzLHBdKSl9cmVtb3ZlRXZlbnQocyxwKXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKENvKCJyZW1vdmVFdmVudCIsW3MscF0pKX1oYW5kbGVyKHMscCl7cmV0dXJuIHAmJnAoKX1hZGRBY3Rpb25zKHMpe2xldCBwPXRoaXMudXBkYXRlcyx3PXRoaXMuaGFuZGxlcjtpZihraShzKXx8KHM9W3NdKSx0aGlzLmJhdGNoZWQpcC5wdXNoLmFwcGx5KHAscyk7ZWxzZSByZXR1cm4gdyhzKX19O3ZhciBGZj17Y3JlYXRlQm9keToiY2FsbENyZWF0ZUJvZHkiLGFkZEVsZW1lbnQ6ImNhbGxBZGRFbGVtZW50IixyZW1vdmVFbGVtZW50OiJjYWxsUmVtb3ZlRWxlbWVudCIsbW92ZUVsZW1lbnQ6ImNhbGxNb3ZlRWxlbWVudCIsdXBkYXRlQXR0cnM6ImNhbGxVcGRhdGVBdHRycyIsdXBkYXRlU3R5bGU6ImNhbGxVcGRhdGVTdHlsZSIsYWRkRXZlbnQ6ImNhbGxBZGRFdmVudCIscmVtb3ZlRXZlbnQ6ImNhbGxSZW1vdmVFdmVudCJ9O2Z1bmN0aW9uIFd2KGYscyl7bGV0IHA9c3x8Z2xvYmFsLmNhbGxOYXRpdmU7cmV0dXJuIEZuKHApfHxjb25zb2xlLmVycm9yKCJbSlMgUnVudGltZV0gbm8gZGVmYXVsdCBoYW5kbGVyIiksZnVuY3Rpb24oTil7a2koTil8fChOPVtOXSk7Zm9yKGxldCB5PTA7eTxOLmxlbmd0aDt5Kyspe2xldCBoPUFrKGYsTlt5XSxwKTtpZihoPT09LTEpcmV0dXJuIGh9fX1mdW5jdGlvbiBDayhmLHMpe3JldHVybiBmPT09ImRvbSImJkZmW3NdJiZGbihnbG9iYWxbRmZbc11dKX1mdW5jdGlvbiBBayhmLHMscCl7bGV0e21vZHVsZTp3LG1ldGhvZDpOLGFyZ3M6eX09cztyZXR1cm4gQ2sodyxOKT9nbG9iYWxbRmZbTl1dKGYsLi4ueSwiLTEiKTpwKGYsW3NdLCItMSIpfXZhciBodT1jbGFzcyBleHRlbmRzIG5ve2NvbnN0cnVjdG9yKHMpe3N1cGVyKCk7dGhpcy52YWx1ZT1zLHRoaXMubm9kZVR5cGU9Myx0aGlzLnR5cGU9InRleHQiLHRoaXMudmFsdWU9IiJ9dG9TdHJpbmcoKXtyZXR1cm4iIit0aGlzLnZhbHVlfX07dmFyIEd2PXtzbGlkZXI6e2NoYW5nZTpmdW5jdGlvbihmKXtyZXR1cm57aW5kZXg6Zi5pbmRleCxzb3VyY2U6Zi5zb3VyY2V9fSxzY3JvbGw6ZnVuY3Rpb24oZil7cmV0dXJue29mZnNldFhSYXRpbzpmLm9mZnNldFhSYXRpbyxvZmZzZXRZUmF0aW86Zi5vZmZzZXRZUmF0aW8sZHJhZzpmLmRyYWd9fX0sInNjcm9sbC12aWV3Ijp7c2Nyb2xsZW5kOmZ1bmN0aW9uKGYpe3JldHVybntjb250ZW50T2Zmc2V0OmYuY29udGVudE9mZnNldH19fX07ZnVuY3Rpb24gWXYoZil7bGV0e2F0dHI6cyxvZmZzZXRMZWZ0OnAsb2Zmc2V0VG9wOnd9PWYsTj17fTtyZXR1cm4gcyYmT2JqZWN0LmtleXMocykuZm9yRWFjaCh5PT57eS5pbmRleE9mKCJkYXRhLSIpPT09MCYmKE5beS5yZXBsYWNlKCJkYXRhLSIsIiIpXT1zW3ldKX0pLHtpZDpzJiZzLmlkfHwiIixkYXRhc2V0Ok4sb2Zmc2V0TGVmdDpwfHwwLG9mZnNldFRvcDp3fHwwfX12YXIgT2s9WyJhIiwiZGl2IiwibGlzdCIsImNlbGwiLCJsb2FkaW5nIiwicmVmcmVzaCIsInJlY3ljbGUtbGlzdCIsInNjcm9sbGVyIiwiaW5kaWNhdG9yIiwid2F0ZXJmYWxsIiwid2ViIiwicmljaHRleHQiXSxUaz1bInZpZXdhcHBlYXIiLCJ2aWV3ZGlzYXBwZWFyIl0sUGs9e21hcmtlcnRhcDpbIm1hcmtlcklkIl0sY29udHJvbHRhcDpbImNvbnRyb2xJZCJdLHJlZ2lvbmNoYW5nZTpbImNhdXNlZEJ5Il0sZW5kOlsiY2F1c2VkQnkiXSxhcHBlYXI6WyJkaXJlY3Rpb24iXSxkaXNhcHBlYXI6WyJkaXJlY3Rpb24iXX07ZnVuY3Rpb24gcXYoZixzKXtsZXQgcD1mLnR5cGU7aWYoVGsuaW5kZXhPZihwKSE9PS0xKXJldHVybiBmO2xldCB3PWYuY3VycmVudFRhcmdldCxOPXcudHlwZS5yZXBsYWNlKCJ1LSIsIiIpO2lmKE9rLmluZGV4T2YoTikhPT0tMSlyZXR1cm4gZjtsZXR7dGltZXN0YW1wOnksdGFyZ2V0Omh9PWY7aWYoIXMpe2xldCBEZT1HdltOXTtEZT9GbihEZVtwXSk/cz1EZVtwXShmKTpzPWYuZGV0YWlsfHx7fTpzPWYuZGV0YWlsfHx7fX1sZXQgRT17dHlwZTpwLHRpbWVTdGFtcDp5LHRhcmdldDpZdihoKSxjdXJyZW50VGFyZ2V0Oll2KHcpLGRldGFpbDpzLHRvdWNoZXM6cD09PSJ0b3VjaGVuZCJ8fHA9PT0icGFuZW5kIj9bXTpmLmNoYW5nZWRUb3VjaGVzLGNoYW5nZWRUb3VjaGVzOmYuY2hhbmdlZFRvdWNoZXN9O2YuY29tcG9uZW50SWQmJihFLmNvbXBvbmVudElkPWYuY29tcG9uZW50SWQpO2xldCBSPVBrW3BdO3JldHVybiBSJiZSLmZvckVhY2goRGU9PntpbChmLERlKSYmKEVbRGVdPWZbRGVdKX0pLEV9ZnVuY3Rpb24gSWsoZixzKXtsZXQgcD1zLmF0dHJzfHx7fTtmb3IobGV0IE4gaW4gcClmLnNldEF0dHIoTixwW05dLCEwKTtsZXQgdz1zLnN0eWxlfHx7fTtmb3IobGV0IE4gaW4gdylmLnNldFN0eWxlKE4sd1tOXSwhMCl9dmFyIHFvPWNsYXNze2NvbnN0cnVjdG9yKHMscD0iIix3KXtzPXM/cy50b1N0cmluZygpOiIiLHRoaXMuaWQ9cyx0aGlzLlVSTD1wLFFwKHMsdGhpcyksdGhpcy5ub2RlTWFwPXt9O2xldCBOPXFvLkxpc3RlbmVyfHxVbDt0aGlzLmxpc3RlbmVyPW5ldyBOKHMsd3x8V3Yocyxxby5oYW5kbGVyKSksdGhpcy50YXNrQ2VudGVyPW5ldyBWbChzLHc/KHksaCk9PncoaCk6cW8uaGFuZGxlciksdGhpcy5jcmVhdGVEb2N1bWVudEVsZW1lbnQoKX1nZXRSZWYocyl7cmV0dXJuIHRoaXMubm9kZU1hcFtzXX1vcGVuKCl7dGhpcy5saXN0ZW5lci5iYXRjaGVkPSExfWNsb3NlKCl7dGhpcy5saXN0ZW5lci5iYXRjaGVkPSEwfWNyZWF0ZURvY3VtZW50RWxlbWVudCgpe2lmKCF0aGlzLmRvY3VtZW50RWxlbWVudCl7bGV0IHM9bmV3IG5vKCJkb2N1bWVudCIpO3MuZG9jSWQ9dGhpcy5pZCxzLm93bmVyRG9jdW1lbnQ9dGhpcyxzLnJvbGU9ImRvY3VtZW50RWxlbWVudCIscy5yZWY9Il9kb2N1bWVudEVsZW1lbnQiLHRoaXMubm9kZU1hcC5fZG9jdW1lbnRFbGVtZW50PXMsdGhpcy5kb2N1bWVudEVsZW1lbnQ9cyxPYmplY3QuZGVmaW5lUHJvcGVydHkocywiYXBwZW5kQ2hpbGQiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpwPT57bWYodGhpcyxwKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocywiaW5zZXJ0QmVmb3JlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6KHAsdyk9PnttZih0aGlzLHAsdyl9fSksbnIoImRlYnVnIikmJmppKGBDcmVhdGUgZG9jdW1lbnQgZWxlbWVudCAoaWQ6ICIke3MuZG9jSWR9IiwgcmVmOiAiJHtzLnJlZn0iKWApfXJldHVybiB0aGlzLmRvY3VtZW50RWxlbWVudH1jcmVhdGVCb2R5KHMscCl7aWYoIXRoaXMuYm9keSl7bGV0IHc9bmV3IG5vKHMscCk7X2YodGhpcyx3KSxucigiZGVidWciKSYmamkoYFtjcmVhdGVCb2R5XSgke3RoaXMuaWR9LCR7dy50eXBlfSwke3cucmVmfSkgKCR7SlNPTi5zdHJpbmdpZnkody50b0pTT04oITApKX0pLmApfXJldHVybiB0aGlzLmJvZHl9Y3JlYXRlRWxlbWVudChzLHApe2xldCB3PW5ldyBubyhzLHApO3JldHVybiBucigiZGVidWciKSYmamkoYFtjcmVhdGVFbGVtZW50XSgke3RoaXMuaWR9LCR7dy50eXBlfSwke3cucmVmfSkgKCR7SlNPTi5zdHJpbmdpZnkody50b0pTT04oITApKX0pLmApLHd9Y3JlYXRlQ29tbWVudChzKXtyZXR1cm4gbmV3IGNsKHMpfWNyZWF0ZVRleHQocyl7cmV0dXJuIG5ldyBodShzKX1maXJlRXZlbnQocyxwLHcsTix5KXtpZighcylyZXR1cm47dz13fHx7fSx3LnR5cGU9dy50eXBlfHxwLHcudGFyZ2V0PXMsdy5jdXJyZW50VGFyZ2V0PXMsdy50aW1lc3RhbXA9RGF0ZS5ub3coKSxOJiZJayhzLE4pO2xldCBoPSEwLEU9dGhpcy5nZXRSZWYoIl9yb290Iik7aWYoRSYmRS5hdHRyKXtsZXQgUj1FLmF0dHIuYnViYmxlO2g9Uj09PSJ0cnVlInx8Uj09PSEwfHxoJiZSPT09dm9pZCAwfXJldHVybiB3PXF2KHcpLHMuZmlyZUV2ZW50KHAsdyxoLHkpfWRlc3Ryb3koKXtucigiZGVidWciKSYmamkoYFtkZXN0cm95XSgke3RoaXMuaWR9LGRvY3VtZW50KSBEZXN0cm95IGRvY3VtZW50IChpZDogIiR7dGhpcy5pZH0iLCBVUkw6ICIke3RoaXMuVVJMfSIpYCksdGhpcy50YXNrQ2VudGVyLmRlc3Ryb3lDYWxsYmFjaygpLGRlbGV0ZSB0aGlzLmxpc3RlbmVyLGRlbGV0ZSB0aGlzLm5vZGVNYXAsZGVsZXRlIHRoaXMudGFza0NlbnRlcixldih0aGlzLmlkKX19O3FvLmhhbmRsZXI9bnVsbDt2YXIgSnY9e0lucHV0RWxlbWVudERpdjoiPFdoaXRlU3BhY2U+fDxMaW5lVGVybWluYXRvcj58PFJlc2VydmVkV29yZD58PElkZW50aWZpZXI+fDxOdW1lcmljTGl0ZXJhbD58PFB1bmN0dWF0b3I+fDxTdHJpbmdMaXRlcmFsPiIsSW5wdXRFbGVtZW50UmVnRXhwOiI8V2hpdGVTcGFjZT58PExpbmVUZXJtaW5hdG9yPnw8UmVzZXJ2ZWRXb3JkPnw8SWRlbnRpZmllcj58PE51bWVyaWNMaXRlcmFsPnw8UHVuY3R1YXRvcj58PFN0cmluZ0xpdGVyYWw+IixSZXNlcnZlZFdvcmQ6IjxLZXl3b3JkPnw8TnVsbExpdGVyYWw+fDxCb29sZWFuTGl0ZXJhbD4iLFdoaXRlU3BhY2U6L1tcdFx2XGZcdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDBBXHUyMDJGXHUyMDVmXHUzMDAwXHVGRUZGXS8sTGluZVRlcm1pbmF0b3I6L1tcblxyXHUyMDI4XHUyMDI5XS8sS2V5d29yZDovbmV3KD8hW18kYS16QS1aMC05XSl8dm9pZCg/IVtfJGEtekEtWjAtOV0pfGRlbGV0ZSg/IVtfJGEtekEtWjAtOV0pfGluKD8hW18kYS16QS1aMC05XSl8aW5zdGFuY2VvZig/IVtfJGEtekEtWjAtOV0pfHR5cGVvZig/IVtfJGEtekEtWjAtOV0pLyxOdWxsTGl0ZXJhbDovbnVsbCg/IVtfJGEtekEtWjAtOV0pLyxCb29sZWFuTGl0ZXJhbDovKD86dHJ1ZXxmYWxzZSkoPyFbXyRhLXpBLVowLTldKS8sSWRlbnRpZmllcjovW18kYS16QS1aXVtfJGEtekEtWjAtOV0qLyxQdW5jdHVhdG9yOi9cL3w9PnxcKlwqfD4+Pj18Pj49fDw8PXw9PT18IT09fD4+Pnw8PHwlPXxcKj18LT18XCs9fDw9fD49fD09fCE9fFxePXxcfD18XHxcfHwmJnwmPXw+PnxcK1wrfC0tfFw6fH18XCp8JnxcfHxcXnwhfH58LXxcK3xcP3wlfD18Pnw8fCx8O3xcLig/IVswLTldKXxcXXxcW3xcKXxcKHx7LyxEaXZQdW5jdHVhdG9yOi9cLz18XC8vLE51bWVyaWNMaXRlcmFsOi8oPzowW3hYXVswLTlhLWZBLUZdKnxcLlswLTldK3woPzpbMS05XStbMC05XSp8MCkoPzpcLlswLTldKnxcLik/KSg/OltlRV1bKy1dezAsMX1bMC05XSspPyg/IVtfJGEtekEtWjAtOV0pLyxTdHJpbmdMaXRlcmFsOi8iKD86W14iXG5cXFxyXHUyMDI4XHUyMDI5XXxcXCg/OlsnIlxcYmZucnR2XG5cclx1MjAyOFx1MjAyOV18XHJcbil8XFx4WzAtOWEtZkEtRl17Mn18XFx1WzAtOWEtZkEtRl17NH18XFxbXjAtOXV4JyJcXGJmbnJ0dlxuXFxcclx1MjAyOFx1MjAyOV0pKiJ8Jyg/OlteJ1xuXFxcclx1MjAyOFx1MjAyOV18XFwoPzpbJyJcXGJmbnJ0dlxuXHJcdTIwMjhcdTIwMjldfFxyXG4pfFxceFswLTlhLWZBLUZdezJ9fFxcdVswLTlhLWZBLUZdezR9fFxcW14wLTl1eCciXFxiZm5ydHZcblxcXHJcdTIwMjhcdTIwMjldKSonLyxSZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6L1wvKD86XFsoPzpcXFtcc1xTXXxbXlxdXSkqXF18W14qXC9cXFxuXHJcdTIwMjhcdTIwMjldfFxcW15cblxyXHUyMDI4XHUyMDI5XSkoPzpcWyg/OlxcW1xzXFNdfFteXF1dKSpcXXxbXlwvXFxcblxyXHUyMDI4XHUyMDI5XXxcXFteXG5cclx1MjAyOFx1MjAyOV0pKlwvWzAtOWEtekEtWl0qL307ZnVuY3Rpb24gS3YoZixzLHApe3ZhciB3PVtzXTtmdW5jdGlvbiBOKGgpe3ZhciBFPW5ldyBSZWdFeHA7cmV0dXJuIEUuY29tcGlsZShoLnJlcGxhY2UoLzwoW14+XSspPi9nLGZ1bmN0aW9uKFIsRGUpe3JldHVybiBmW0RlXT8ody5wdXNoKERlKSxmW0RlXWluc3RhbmNlb2YgUmVnRXhwPyIoIitmW0RlXS5zb3VyY2UrIikiOiIoIitOKGZbRGVdKS5zb3VyY2UrIikiKToiIn0pLHApLEV9dmFyIHk9TihmW3NdKTt0aGlzLmV4ZWM9ZnVuY3Rpb24oaCl7dmFyIEU9eS5leGVjKGgpO2lmKEU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBSPW5ldyBTdHJpbmcoRVswXSksRGU9MDtEZTx3Lmxlbmd0aDtEZSsrKUVbRGVdJiYoUlt3W0RlXV09RVtEZV0pO3JldHVybiBSfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGFzdEluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkubGFzdEluZGV4fSxzZXQ6ZnVuY3Rpb24oaCl7eS5sYXN0SW5kZXg9aH19KX1mdW5jdGlvbiBOaygpe3ZhciBmPW5ldyBLdihKdiwiSW5wdXRFbGVtZW50RGl2IiwiZyIpLHM9bmV3IEt2KEp2LCJJbnB1dEVsZW1lbnRSZWdFeHAiLCJnIikscDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic291cmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbih3KXtwPXcsZi5sYXN0SW5kZXg9MCxzLmxhc3RJbmRleD0wfX0pLHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXtmLmxhc3RJbmRleD0wLHMubGFzdEluZGV4PTB9LHRoaXMuZ2V0TmV4dFRva2VuPWZ1bmN0aW9uKHcpe3ZhciBOPWYubGFzdEluZGV4LHk7dz95PWY6eT1zO3ZhciBoPXkuZXhlYyhwKTtpZihoJiZ5Lmxhc3RJbmRleC1OPmgubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiBJTExFR0FMIik7cmV0dXJuIGYubGFzdEluZGV4PXkubGFzdEluZGV4LHMubGFzdEluZGV4PXkubGFzdEluZGV4LGh9fXZhciBadj17SWRlbnRpZmllck5hbWU6W1siSWRlbnRpZmllciJdXSxMaXRlcmFsOltbIk51bGxMaXRlcmFsIl0sWyJCb29sZWFuTGl0ZXJhbCJdLFsiTnVtZXJpY0xpdGVyYWwiXSxbIlN0cmluZ0xpdGVyYWwiXSxbIlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbCJdXSxQcmltYXJ5RXhwcmVzc2lvbjpbWyJJZGVudGlmaWVyIl0sWyJMaXRlcmFsIl0sWyIoIiwiRXhwcmVzc2lvbiIsIikiXV0sQ2FsbEV4cHJlc3Npb246W1siUHJpbWFyeUV4cHJlc3Npb24iLCJBcmd1bWVudHMiXSxbIkNhbGxFeHByZXNzaW9uIiwiQXJndW1lbnRzIl1dLEFyZ3VtZW50czpbWyIoIiwiKSJdLFsiKCIsIkFyZ3VtZW50TGlzdCIsIikiXV0sQXJndW1lbnRMaXN0OltbIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdLFsiQXJndW1lbnRMaXN0IiwiLCIsIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdXSxMZWZ0SGFuZFNpZGVFeHByZXNzaW9uOltbIlByaW1hcnlFeHByZXNzaW9uIl0sWyJDYWxsRXhwcmVzc2lvbiJdXSxVbmFyeUV4cHJlc3Npb246W1siTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiJdLFsidm9pZCIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiKyIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiLSIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsifiIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiISIsIlVuYXJ5RXhwcmVzc2lvbiJdXSxFeHBvbmVudGlhdGlvbkV4cHJlc3Npb246W1siVW5hcnlFeHByZXNzaW9uIl0sWyJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iLCIqKiIsIlVuYXJ5RXhwcmVzc2lvbiJdXSxNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb246W1siTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uIiwiLyIsIkV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiJdLFsiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIqIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIlIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl1dLEFkZGl0aXZlRXhwcmVzc2lvbjpbWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXSxbIkFkZGl0aXZlRXhwcmVzc2lvbiIsIisiLCJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXSxbIkFkZGl0aXZlRXhwcmVzc2lvbiIsIi0iLCJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXV0sU2hpZnRFeHByZXNzaW9uOltbIkFkZGl0aXZlRXhwcmVzc2lvbiJdLFsiU2hpZnRFeHByZXNzaW9uIiwiPDwiLCJBZGRpdGl2ZUV4cHJlc3Npb24iXSxbIlNoaWZ0RXhwcmVzc2lvbiIsIj4+IiwiQWRkaXRpdmVFeHByZXNzaW9uIl0sWyJTaGlmdEV4cHJlc3Npb24iLCI+Pj4iLCJBZGRpdGl2ZUV4cHJlc3Npb24iXV0sUmVsYXRpb25hbEV4cHJlc3Npb246W1siU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIjwiLCJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiPiIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI8PSIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI+PSIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCJpbnN0YW5jZW9mIiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsImluIiwiU2hpZnRFeHByZXNzaW9uIl1dLEVxdWFsaXR5RXhwcmVzc2lvbjpbWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiPT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiIT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiPT09IiwiUmVsYXRpb25hbEV4cHJlc3Npb24iXSxbIkVxdWFsaXR5RXhwcmVzc2lvbiIsIiE9PSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl1dLEJpdHdpc2VBTkRFeHByZXNzaW9uOltbIkVxdWFsaXR5RXhwcmVzc2lvbiJdLFsiQml0d2lzZUFOREV4cHJlc3Npb24iLCImIiwiRXF1YWxpdHlFeHByZXNzaW9uIl1dLEJpdHdpc2VYT1JFeHByZXNzaW9uOltbIkJpdHdpc2VBTkRFeHByZXNzaW9uIl0sWyJCaXR3aXNlWE9SRXhwcmVzc2lvbiIsIl4iLCJCaXR3aXNlQU5ERXhwcmVzc2lvbiJdXSxCaXR3aXNlT1JFeHByZXNzaW9uOltbIkJpdHdpc2VYT1JFeHByZXNzaW9uIl0sWyJCaXR3aXNlT1JFeHByZXNzaW9uIiwifCIsIkJpdHdpc2VYT1JFeHByZXNzaW9uIl1dLExvZ2ljYWxBTkRFeHByZXNzaW9uOltbIkJpdHdpc2VPUkV4cHJlc3Npb24iXSxbIkxvZ2ljYWxBTkRFeHByZXNzaW9uIiwiJiYiLCJCaXR3aXNlT1JFeHByZXNzaW9uIl1dLExvZ2ljYWxPUkV4cHJlc3Npb246W1siTG9naWNhbEFOREV4cHJlc3Npb24iXSxbIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCJ8fCIsIkxvZ2ljYWxBTkRFeHByZXNzaW9uIl1dLENvbmRpdGlvbmFsRXhwcmVzc2lvbjpbWyJMb2dpY2FsT1JFeHByZXNzaW9uIl0sWyJMb2dpY2FsT1JFeHByZXNzaW9uIiwiPyIsIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCI6IiwiTG9naWNhbE9SRXhwcmVzc2lvbiJdXSxFeHByZXNzaW9uOltbIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXhwcmVzc2lvbiIsIiwiLCJDb25kaXRpb25hbEV4cHJlc3Npb24iXV0sUHJvZ3JhbTpbWyJFeHByZXNzaW9uIl1dfTtmdW5jdGlvbiB2YyhmLHMpe3RoaXMubmFtZT1mLHRoaXMudG9rZW49cyx0aGlzLmNoaWxkTm9kZXM9W10sdGhpcy50b1N0cmluZz1mdW5jdGlvbihwKXtpZihwfHwocD0iIiksdGhpcy5jaGlsZE5vZGVzLmxlbmd0aD09MSlyZXR1cm4gdGhpcy5jaGlsZE5vZGVzWzBdLnRvU3RyaW5nKHApO2Zvcih2YXIgdz1wK3RoaXMubmFtZSsodGhpcy50b2tlbiE9bnVsbCYmdGhpcy5uYW1lIT10aGlzLnRva2VuPyI6Iit0aGlzLnRva2VuOiIiKStgCmAsTj0wO048dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtOKyspdys9dGhpcy5jaGlsZE5vZGVzW05dLnRvU3RyaW5nKHArIiAgICAiKTtyZXR1cm4gd319ZnVuY3Rpb24ga2soKXt2YXIgZixzPXtQcm9ncmFtOiIkIn0scD17fTtmdW5jdGlvbiB3KEUpe3BbSlNPTi5zdHJpbmdpZnkoRSldPUU7Zm9yKHZhciBSPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEUpO1IubGVuZ3RoOyl7dmFyIERlPVIuc2hpZnQoKTshWnZbRGVdfHxadltEZV0uZm9yRWFjaChmdW5jdGlvbihVdCl7RVtVdFswXV18fFIucHVzaChVdFswXSk7dmFyIFR0PUUsUD1udWxsO1V0LmZvckVhY2goZnVuY3Rpb24oQ3Qpe1R0W0N0XXx8KFR0W0N0XT17fSksUD1UdCxUdD1UdFtDdF19KSxFW0RlXS4kZGl2JiYoVHQuJGRpdj0hMCksVHQuJHJlZHVjZT1EZSxUdC4kY291bnQ9VXQubGVuZ3RofSl9Zm9yKHZhciBOdCBpbiBFKXR5cGVvZiBFW050XSE9Im9iamVjdCJ8fE50LmNoYXJBdCgwKT09IiQifHxFW050XS4kY2xvc3VyZXx8KHBbSlNPTi5zdHJpbmdpZnkoRVtOdF0pXT9FW050XT1wW0pTT04uc3RyaW5naWZ5KEVbTnRdKV06dyhFW050XSkpO0UuJGNsb3N1cmU9ITB9dyhzKTt2YXIgTj1bXSx5PVtzXSxoPXM7dGhpcy5pbnNlcnRTeW1ib2w9ZnVuY3Rpb24oUixEZSl7Zm9yKDshaFtSLm5hbWVdJiZoLiRyZWR1Y2U7KXtmb3IodmFyIE50PWguJGNvdW50LFV0PW5ldyB2YyhoLiRyZWR1Y2UpO050LS07KVV0LmNoaWxkTm9kZXMucHVzaChOLnBvcCgpKSx5LnBvcCgpO2g9eVt5Lmxlbmd0aC0xXSx0aGlzLmluc2VydFN5bWJvbChVdCl9aWYoaD1oW1IubmFtZV0sTi5wdXNoKFIpLHkucHVzaChoKSwhaCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGguJGRpdn0sdGhpcy5yZXNldD1mdW5jdGlvbigpe2g9cyxOPVtdLHk9W3NdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ3JhbW1hclRyZWUiLHtnZXQ6ZnVuY3Rpb24oKXt0cnl7Zm9yKDtoLiRyZWR1Y2U7KXtmb3IodmFyIEU9aC4kY291bnQsUj1uZXcgdmMoaC4kcmVkdWNlKTtFLS07KVIuY2hpbGROb2Rlcy5wdXNoKE4ucG9wKCkpLHkucG9wKCk7aD15W3kubGVuZ3RoLTFdLHRoaXMuaW5zZXJ0U3ltYm9sKFIpfWlmKE4ubGVuZ3RoPjAmJmhbIjsiXSlyZXR1cm4gdGhpcy5pbnNlcnRTeW1ib2wobmV3IHZjKCI7IiwiOyIpKSx0aGlzLmdyYW1tYXJUcmVlO2lmKE4ubGVuZ3RoIT0xfHxOWzBdLm5hbWUhPSJQcm9ncmFtIil0aHJvdyBuZXcgRXJyb3J9Y2F0Y2goRGUpe3Rocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKX1yZXR1cm4gTlswXX19KX1mdW5jdGlvbiBSaygpe3RoaXMubGV4aWNhbFBhcnNlcj1uZXcgTmssdGhpcy5zeW50YWN0aWNhbFBhcnNlcj1uZXcga2s7dmFyIGY9WyJOdWxsTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmdMaXRlcmFsIiwiUmVndWxhckV4cHJlc3Npb25MaXRlcmFsIiwiSWRlbnRpZmllciIsIioqIiwiPT4iLCJ7IiwifSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiOyIsIiwiLCI8IiwiPiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiPT09IiwiIT09IiwiKyIsIi0iLCIqIiwiJSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPj4+IiwiJiIsInwiLCJeIiwiISIsIn4iLCImJiIsInx8IiwiPyIsIjoiLCI9IiwiKz0iLCItPSIsIio9IiwiJT0iLCI8PD0iLCI+Pj0iLCI+Pj49IiwiJj0iLCJ8PSIsIl49IiwiLyIsIi89IiwiaW5zdGFuY2VvZiIsInR5cGVvZiIsIm5ldyIsInZvaWQiLCJkZWJ1Z2dlciIsInRoaXMiLCJkZWxldGUiLCJpbiJdLHM9e307Zi5mb3JFYWNoKGZ1bmN0aW9uKHApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLHAse30pfSksdGhpcy5yZXNldD1mdW5jdGlvbigpe3RoaXMubGV4aWNhbFBhcnNlci5yZXNldCgpLHRoaXMuc3ludGFjdGljYWxQYXJzZXIucmVzZXQoKX0sdGhpcy5wYXJzZT1mdW5jdGlvbihwLHcpe3ZhciBOLHk9ITE7dGhpcy5sZXhpY2FsUGFyc2VyLnNvdXJjZT1wO2Zvcih2YXIgaD0hMTtOPXRoaXMubGV4aWNhbFBhcnNlci5nZXROZXh0VG9rZW4oaCk7KXt3JiZ3KE4pO3RyeXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhOKS5zb21lKEU9PnMuaGFzT3duUHJvcGVydHkoRSk/KGg9dGhpcy5zeW50YWN0aWNhbFBhcnNlci5pbnNlcnRTeW1ib2wobmV3IHZjKEUsTikseSkseT0hMSwhMCk6ITEpKWNvbnRpbnVlOyhOLktleXdvcmR8fE4uUHVuY3R1YXRvcnx8Ti5EaXZQdW5jdHVhdG9yKSYmcy5oYXNPd25Qcm9wZXJ0eShOLnRvU3RyaW5nKCkpJiYoaD10aGlzLnN5bnRhY3RpY2FsUGFyc2VyLmluc2VydFN5bWJvbChuZXcgdmMoTi50b1N0cmluZygpLE4pLHkpKX1jYXRjaChFKXt0aHJvdyBuZXcgU3ludGF4RXJyb3IoIlVuZXhwZWN0ZWQgdG9rZW4gIitOKX19cmV0dXJuIHRoaXMuc3ludGFjdGljYWxQYXJzZXIuZ3JhbW1hclRyZWV9fXZhciBYdj1uZXcgUms7ZnVuY3Rpb24geGsoZil7WHYucmVzZXQoKSx0aGlzLnRyZWU9WHYucGFyc2UoZiksdGhpcy5wYXRocz1bXTt2YXIgcz1PYmplY3QuY3JlYXRlKG51bGwpLHA9dGhpcyx3PU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5pc1NpbXBsZSx0aGlzLmlzQ29uc3QseSh0aGlzLnRyZWUpLE4odGhpcy50cmVlKSx0aGlzLnBhdGhzLmxlbmd0aD09PTAmJih0aGlzLmlzQ29uc3Q9ITApLHRoaXMuc2V0dGVyPWZ1bmN0aW9uKFIpe2Zvcih2YXIgRGU9cyxOdD0wO050PFIubGVuZ3RoLTE7TnQrKylEZVtSW050XV18fChEZVtSW050XV09T2JqZWN0LmNyZWF0ZShudWxsKSksRGU9RGVbUltOdF1dO3JldHVybntpc0NvbXBsZXRlZDpmdW5jdGlvbigpe2Zvcih2YXIgVXQgaW4gdylpZighd1tVdF0pcmV0dXJuITE7cmV0dXJuITB9LHNldDpmdW5jdGlvbihVdCl7aWYod1tSLmpvaW4oIi4iKV18fCh3W1Iuam9pbigiLiIpXT0hMCksRGVbUltOdF1dPVV0LHRoaXMuaXNDb21wbGV0ZWQoKSlyZXR1cm4gcC5leGVjKCl9fX0sdGhpcy52YWx1ZU9mPXRoaXMuZXhlYz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4oMCxldmFsKShmKX0uY2FsbChzKX1jYXRjaChSKXt9fTtmdW5jdGlvbiBOKFIpe2Zvcih2YXIgRGU9UjtEZS5jaGlsZE5vZGVzLmxlbmd0aDw9MSYmRGUubmFtZSE9PSJNZW1iZXJFeHByZXNzaW9uIjspRGU9RGUuY2hpbGROb2Rlc1swXTtEZS5uYW1lPT09Ik1lbWJlckV4cHJlc3Npb24iP3AuaXNTaW1wbGU9ITA6cC5pc1NpbXBsZT0hMX1mdW5jdGlvbiB5KFIpe2lmKFIubmFtZT09PSJDYWxsRXhwcmVzc2lvbiImJlIuY2hpbGROb2Rlc1tSLmNoaWxkTm9kZXMubGVuZ3RoLTFdLm5hbWUhPT0iQ2FsbEV4cHJlc3Npb24iKXt2YXIgRGU9aChSLmNoaWxkTm9kZXNbMV0pO3koUi5jaGlsZE5vZGVzWzBdKX1lbHNlIGlmKFIubmFtZT09PSJOZXdFeHByZXNzaW9uIiYmUi5jaGlsZE5vZGVzLmxlbmd0aD09PTEpdmFyIERlPWgoUi5jaGlsZE5vZGVzWzBdKTtlbHNlIGlmKFIubmFtZT09PSJNZW1iZXJFeHByZXNzaW9uIiYmUi5jaGlsZE5vZGVzLmxlbmd0aD09PTEpdmFyIERlPWgoUik7ZWxzZSBmb3IodmFyIE50PTA7TnQ8Ui5jaGlsZE5vZGVzLmxlbmd0aDtOdCsrKXkoUi5jaGlsZE5vZGVzW050XSl9ZnVuY3Rpb24gaChSKXtpZihSLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJJZGVudGlmaWVyTmFtZSIpe3ZhciBEZT1oKFIuY2hpbGROb2Rlc1syXSk7cmV0dXJuIERlJiYoRGU9RGUuY29uY2F0KFIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnRva2VuLnRvU3RyaW5nKCkpKSxFKERlKSxEZX1lbHNlIGlmKFIuY2hpbGROb2Rlc1swXS5uYW1lPT09IlByaW1hcnlFeHByZXNzaW9uIilpZihSLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5uYW1lPT09IklkZW50aWZpZXIiKXt2YXIgRGU9W1IuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnRva2VuLnRvU3RyaW5nKCldO3JldHVybiBFKERlKSxEZX1lbHNlIHJldHVybiBudWxsO2Vsc2V7aWYoUi5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iXSIpcmV0dXJuIGgoUi5jaGlsZE5vZGVzWzNdKSx5KFIuY2hpbGROb2Rlc1sxXSksbnVsbDtpZihSLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJBcmd1bWVudHMiKXJldHVybiB5KFIuY2hpbGROb2Rlc1swXSkseShSLmNoaWxkTm9kZXNbMV0pLG51bGw7Zm9yKHZhciBOdD0wO050PFIuY2hpbGROb2Rlcy5sZW5ndGg7TnQrKyl5KFIuY2hpbGROb2Rlc1tOdF0pfX1mdW5jdGlvbiBFKFIpe2Zvcih2YXIgRGU9cyxOdD0wO050PFIubGVuZ3RoLTE7TnQrKylEZVtSW050XV18fChEZVtSW050XV09T2JqZWN0LmNyZWF0ZShudWxsKSksRGU9RGVbUltOdF1dO3AucGF0aHMucHVzaChSKSx3W1Iuam9pbigiLiIpXT0hMX19ZnVuY3Rpb24gdWwoZil7dmFyIHM9Zi5jaGlsZE5vZGVzLnNsaWNlKCkucmV2ZXJzZSgpLHA9cy5maWx0ZXIoUj0+IVIudG9rZW58fCFSLnRva2VuLlB1bmN0dWF0b3IpO2lmKGYubmFtZT09PSJVbmFyeUV4cHJlc3Npb24iJiZzLmxlbmd0aD09PTImJnNbMF0ubmFtZT09PSItIiYmcC5sZW5ndGg9PT0xKXt2YXIgdz11bChwWzBdKTtyZXR1cm4gdy52YWx1ZT0tdy52YWx1ZSx3fWlmKGYubmFtZT09PSJBcmd1bWVudHMiKXtmb3IodmFyIE49W10seT1wWzBdO3k7KXkuY2hpbGROb2Rlcy5sZW5ndGg9PT0zJiYoTi51bnNoaWZ0KHkuY2hpbGROb2Rlc1swXSkseT15LmNoaWxkTm9kZXNbMl0pLHkuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiYoTi51bnNoaWZ0KHkuY2hpbGROb2Rlc1swXSkseT1udWxsKTtyZXR1cm57dHlwZToiQXJndW1lbnRzIixjaGlsZHJlbjpOLm1hcChSPT51bChSKSl9fWlmKHAmJnAubGVuZ3RoPT09MSl7dmFyIHc9dWwocFswXSk7cmV0dXJuIHd9aWYoZi50b2tlbiYmWyJOdWxsTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmdMaXRlcmFsIiwiSWRlbnRpZmllciJdLnNvbWUoUj0+Zi50b2tlbltSXSkpe3ZhciBoPU9iamVjdC5rZXlzKGYudG9rZW4pLmZpbHRlcihSPT5SLm1hdGNoKC9MaXRlcmFsLyl8fFIubWF0Y2goL0lkZW50aWZpZXIvKSlbMF0sRT17TnVsbExpdGVyYWw6bnVsbCxCb29sZWFuTGl0ZXJhbDpCb29sZWFuKGYudG9rZW4pLE51bWVyaWNMaXRlcmFsOk51bWJlcihmLnRva2VuKSxTdHJpbmdMaXRlcmFsOmYudG9rZW4sSWRlbnRpZmllcjpmLnRva2VufVtoXTtyZXR1cm57dHlwZTpoLHZhbHVlOkV9fXJldHVybiBmLm5hbWU9PT0iQ2FsbEV4cHJlc3Npb24iP3t0eXBlOiJDYWxsRXhwcmVzc2lvbiIsY2hpbGRyZW46W3VsKHNbMF0pLHVsKHNbMV0pXX06e3R5cGU6cy5maWx0ZXIoUj0+Ui50b2tlbiYmUi50b2tlbi5QdW5jdHVhdG9yKVswXS5uYW1lLGNoaWxkcmVuOnMuZmlsdGVyKFI9PiFSLnRva2VufHwhUi50b2tlbi5QdW5jdHVhdG9yKS5tYXAoUj0+dWwoUikpfX1mdW5jdGlvbiBRdihmKXt2YXIgcz1uZXcgeGsoZik7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHVsKHMudHJlZSksbnVsbCl9ZnVuY3Rpb24gQmsoZixzKXtyZXR1cm4gcz09PSJiaW5kIiYmKGY9PT0iYmluZGluZ3gifHxmPT09ImJpbmRpbmciKX1mdW5jdGlvbiBlbShmKXtpZighZilyZXR1cm47dHJ5e2Y9SlNPTi5wYXJzZShmKX1jYXRjaChwKXt9bGV0IHM9e307aWYoYmkoZik/cy5vcmlnaW49ZjpmJiYocy5vcmlnaW49Zi5vcmlnaW4scy50cmFuc2Zvcm1lZD1mLnRyYW5zZm9ybWVkKSwhKCFzLnRyYW5zZm9ybWVkJiYhcy5vcmlnaW4pKXJldHVybiBzLnRyYW5zZm9ybWVkPXMudHJhbnNmb3JtZWR8fFF2KHMub3JpZ2luKSxzfWZ1bmN0aW9uIE1rKGYpe3JldHVybiBmJiYoZi5leGl0RXhwcmVzc2lvbj1lbShmLmV4aXRFeHByZXNzaW9uKSxmLnByb3BzJiZmLnByb3BzLmZvckVhY2gocz0+e3MuZXhwcmVzc2lvbj1lbShzLmV4cHJlc3Npb24pfSksZil9ZnVuY3Rpb24gTGsoZil7cmV0dXJuIGZ1bmN0aW9uKHM9e30pe2lmKEZuKGYpKXJldHVybiBmKHtzdGF0ZTpzLnN0YXRlPT09ImVuZCI/ImV4aXQiOnMuc3RhdGUsdDpzLnQhPT12b2lkIDA/cy50OnMuZGVsdGFUfSl9fWZ1bmN0aW9uIHRtKGYscyxwKXtyZXR1cm4gcCYmKEJrKGYscyk/ZnVuY3Rpb24odyxOPWZ1bmN0aW9uKCl7fSl7aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJzaG91bGQgcGFzcyBvcHRpb25zIGZvciBiaW5kaW5nIik7cmV0dXJuIE1rKHcpLHAodyx3JiZ3LmV2ZW50VHlwZT09PSJ0aW1pbmciP0xrKE4pOk4pfTpwKX1mdW5jdGlvbiBEayhmLHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJbW0N1cnJlbnRJbnN0YW5jZUlkXV0iLHt2YWx1ZTpzfSl9ZnVuY3Rpb24gbm0oZil7cmV0dXJuIGZbIltbQ3VycmVudEluc3RhbmNlSWRdXSJdfWZ1bmN0aW9uIEZrKGYscyxwKXtsZXQgdz1VcihmKTtyZXR1cm4hd3x8IUZuKHcuc2VuZCk/KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBmaW5kIHRhc2tDZW50ZXIgKCR7Zn0pLmApLG51bGwpOiguLi5OKT0+dy5zZW5kKCJtb2R1bGUiLHttb2R1bGU6cyxtZXRob2Q6cH0sTil9ZnVuY3Rpb24gVmsoZixzLHAsdyl7bGV0IE49VXIoZik7cmV0dXJuIU58fCFGbihOLnNlbmQpPyhjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZmluZCB0YXNrQ2VudGVyICgke2Z9KS5gKSxudWxsKTpGbih3KT95PT5OLnNlbmQoIm1vZHVsZSIse21vZHVsZTpzLG1ldGhvZDpwfSxbeV0pOihjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSAke3N9LiR7cH0gbXVzdCBiZSBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uLmApLG51bGwpfXZhciBndT1jbGFzc3tjb25zdHJ1Y3RvcihzLHApe0RrKHRoaXMsU3RyaW5nKHMpKSx0aGlzLmNvbmZpZz1wfHx7fSx0aGlzLmRvY3VtZW50PW5ldyBxbyhzLHRoaXMuY29uZmlnLmJ1bmRsZVVybCksdGhpcy5yZXF1aXJlTW9kdWxlPXRoaXMucmVxdWlyZU1vZHVsZS5iaW5kKHRoaXMpLHRoaXMuaW1wb3J0U2NyaXB0PXRoaXMuaW1wb3J0U2NyaXB0LmJpbmQodGhpcyksdGhpcy5pc1JlZ2lzdGVyZWRNb2R1bGU9dXUsdGhpcy5pc1JlZ2lzdGVyZWRDb21wb25lbnQ9TmZ9cmVxdWlyZU1vZHVsZShzKXtsZXQgcD1ubSh0aGlzKTtpZighKHAmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQudGFza0NlbnRlcikpe2NvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZXF1aXJlTW9kdWxlKCIke3N9IiksIGluc3RhbmNlICgke3B9KSBkb2Vzbid0IGV4aXN0IGFueW1vcmUuYCk7cmV0dXJufWlmKCF1dShzKSl7Y29uc29sZS53YXJuKGBbSlMgRnJhbWV3b3JrXSBcdTVGNTNcdTUyNERcdThGRDBcdTg4NENcdTc2ODRcdTU3RkFcdTVFQTdcdTRFMERcdTUzMDVcdTU0MkJcdTUzOUZcdTc1MUZcdTYzRDJcdTRFRjZbJHtzfV1cdUZGMENcdThCRjdcdTU3MjhtYW5pZmVzdFx1NEUyRFx1OTE0RFx1N0Y2RVx1OEJFNVx1NjNEMlx1NEVGNlx1RkYwQ1x1OTFDRFx1NjVCMFx1NTIzNlx1NEY1Q1x1NTMwNVx1NjJFQ1x1OEJFNVx1NTM5Rlx1NzUxRlx1NjNEMlx1NEVGNlx1NzY4NFx1ODFFQVx1NUI5QVx1NEU0OVx1OEZEMFx1ODg0Q1x1NTdGQVx1NUVBN2ApO3JldHVybn1sZXQgdz17fSxOPWZ2KHMpO2ZvcihsZXQgeSBpbiBOKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LHkse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+dG0ocyx5LEZrKHAscyx5KSksc2V0Omg9PlZrKHAscyx5LGgpfSk7cmV0dXJuIHd9c3VwcG9ydHMocyl7aWYoIWJpKHMpKXJldHVybiBudWxsO2xldCBwPXMubWF0Y2goL15AKFx3KylcLyhbXHctXSspKFwuKFx3KykpPyQvaSk7aWYocCl7bGV0IHc9cFsxXSxOPXBbMl0seT1wWzRdO3N3aXRjaCh3KXtjYXNlIm1vZHVsZSI6cmV0dXJuIHV1KE4seSk7Y2FzZSJjb21wb25lbnQiOnJldHVybiBOZihOKX19cmV0dXJuIG51bGx9aW1wb3J0U2NyaXB0KHMscD17fSl7bGV0IHc9bm0odGhpcyksTj1Vcih3KTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeSxoKXtpZighTnx8IUZuKE4uc2VuZCkpcmV0dXJuIGgobmV3IEVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gaW1wb3J0IHNjcmlwdCAiJHtzfSIsIG5vIHRhc2tDZW50ZXIgKCR7d30pIG1hdGNoZWQuYCkpO3RyeXtOLnNlbmQoIm1vZHVsZSIse21vZHVsZToic2NyaXB0IixtZXRob2Q6ImltcG9ydFNjcmlwdCJ9LFtzLHBdLHtjYWxsYmFjazpbRT0+eShFKSxFPT5oKEUpXX0pfWNhdGNoKEUpe2goRSl9fSl9fTtmdW5jdGlvbiBVayhmLHMpe2xldCBwPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHAuc2VydmljZT1PYmplY3QuY3JlYXRlKG51bGwpLGtzLmZvckVhY2goKHtuYW1lOncsb3B0aW9uczpOfSk9PntsZXQgeT1OLmNyZWF0ZTtpZih5KXRyeXtsZXQgaD15KGYscyk7SGkocC5zZXJ2aWNlLGgpLEhpKHAsaC5pbnN0YW5jZSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihgW0pTIFJ1bnRpbWVdIEZhaWxlZCB0byBjcmVhdGUgc2VydmljZSAke3d9LmApfX0pLGRlbGV0ZSBwLnNlcnZpY2UuaW5zdGFuY2UsT2EocC5zZXJ2aWNlKSxwfXZhciAkaz17dWlkOjB9LEhrPUpwKGhjKSxqaz1xcChoYyk7ZnVuY3Rpb24gcm0oZixzLHApe2xldCB3PW5ldyBndShmLHMpLE49IlZ1ZSIseT1VayhmLHt3ZWV4OncsbnZ1ZTp3LGNvbmZpZzpzLGNyZWF0ZWQ6RGF0ZS5ub3coKSxmcmFtZXdvcms6Tn0pO09hKHkpO2xldCBoPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEhpKGgsS2sodykpLEhpKGgseSx7U2hhcmVkT2JqZWN0OiRrLHdlZXg6dyxudnVlOncscmVxdWlyZU1vZHVsZTpFPT53LnJlcXVpcmVNb2R1bGUoRSksX19XRUVYX0NBTExfSkFWQVNDUklQVF9fOlBmLHNlcnZpY2VzOnl9KSxoLnBsdXM9bmV3IGguV2VleFBsdXModyksaC5WdWVTaGFyZWQ9aGMsaC5VbmlTaGFyZWQ9SGssaC5WdWVSZWFjdGl2aXR5PWprLHp2KGYsaCksT2EoaCksaH1mdW5jdGlvbiB6ayhmLHMscD17fSl7bGV0IHc9IlZ1ZSI7cD1wZihwKSxwLmVudj1wZihnbG9iYWwuV1hFbnZpcm9ubWVudHx8e30pLHAuYnVuZGxlVHlwZT13O2xldCBOPXJtKGYscCk7V2socyxOKX1mdW5jdGlvbiBXayhmLHMpe2xldCBwPVtdLHc9W107Zm9yKGxldCBoIGluIHMpcC5wdXNoKGgpLHcucHVzaChzW2hdKTtsZXQgeT0iKGZ1bmN0aW9uIChnbG9iYWwpIHsgIitgCmdsb2JhbCA9IChmdW5jdGlvbiAoKSB7CiAgdmFyIGcKICAvLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQogIGcgPSAoZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMKICB9KSgpCiAgdHJ5IHsKICAgIC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKQogICAgZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkKICB9IGNhdGNoIChlKSB7CiAgICAvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZQogICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJvYmplY3QiKSBnID0gd2luZG93CiAgfQogIHJldHVybiBnCn0pKCkgfHwgZ2xvYmFsOwpgK2YrIiB9KShPYmplY3QuY3JlYXRlKHRoaXMpKSI7cmV0dXJuIG5ldyBGdW5jdGlvbiguLi5wLHkpKC4uLncpfWZ1bmN0aW9uIEdrKGYpe2xldCBzPXJzKGYpO3RyeXtpZihzJiZzLmJvZHkpcmV0dXJuIHMuYm9keS50b0pTT04oKX1jYXRjaChwKXtjb25zb2xlLmVycm9yKCJbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZ2V0IHRoZSB2aXJ0dWFsIGRvbSB0cmVlLiIpO3JldHVybn19ZnVuY3Rpb24gWWsoZil7VnAoZiksa3MuZm9yRWFjaChzPT57bGV0IHA9cy5vcHRpb25zLmRlc3Ryb3k7cCYmcChmKX0pfWZ1bmN0aW9uIHFrKGYpe1VwKGYpLGtzLmZvckVhY2gocz0+e2xldCBwPXMub3B0aW9ucy5yZWZyZXNoO3AmJnAoZil9KX12YXIgSms9e2NyZWF0ZUluc3RhbmNlOnprLGNyZWF0ZUluc3RhbmNlQ29udGV4dDpybSxnZXRSb290OkdrLGdldERvY3VtZW50OnJzLHJlZ2lzdGVyU2VydmljZTpmdSx1bnJlZ2lzdGVyU2VydmljZTpkdSxjYWxsSlMoZixzKXtyZXR1cm4gUGYoZixzKX0scmVnaXN0ZXJDb21wb25lbnRzOmR2LHJlZ2lzdGVyTW9kdWxlczp1dixkZXN0cm95SW5zdGFuY2U6WWsscmVmcmVzaEluc3RhbmNlOnFrfTtmdW5jdGlvbiBWZigpe3JldHVybiBjdigpLEprfWZ1bmN0aW9uIEtrKGYpe2lmKGdsb2JhbC5zZXRUaW1lb3V0JiZnbG9iYWwuc2V0SW50ZXJ2YWwpcmV0dXJue3NldFRpbWVvdXQ6Z2xvYmFsLnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6Z2xvYmFsLnNldEludGVydmFsLGNsZWFyVGltZW91dDpnbG9iYWwuY2xlYXJUaW1lb3V0LGNsZWFySW50ZXJ2YWw6Z2xvYmFsLmNsZWFySW50ZXJ2YWx9O2xldCBzPWYucmVxdWlyZU1vZHVsZSgidGltZXIiKTtyZXR1cm57c2V0VGltZW91dDooLi4udyk9PntsZXQgTj1mdW5jdGlvbigpe3dbMF0oLi4udy5zbGljZSgyKSl9O3JldHVybiBzLnNldFRpbWVvdXQoTix3WzFdKSxmLmRvY3VtZW50LnRhc2tDZW50ZXIuY2FsbGJhY2tNYW5hZ2VyLmxhc3RDYWxsYmFja0lkLnRvU3RyaW5nKCl9LHNldEludGVydmFsOiguLi53KT0+e2xldCBOPWZ1bmN0aW9uKCl7d1swXSguLi53LnNsaWNlKDIpKX07cmV0dXJuIHMuc2V0SW50ZXJ2YWwoTix3WzFdKSxmLmRvY3VtZW50LnRhc2tDZW50ZXIuY2FsbGJhY2tNYW5hZ2VyLmxhc3RDYWxsYmFja0lkLnRvU3RyaW5nKCl9LGNsZWFyVGltZW91dDp3PT57cy5jbGVhclRpbWVvdXQodyl9LGNsZWFySW50ZXJ2YWw6dz0+e3MuY2xlYXJJbnRlcnZhbCh3KX19fXZhciBpbT17RG9jdW1lbnQ6cW8sRWxlbWVudDpubyxDb21tZW50OmNsLExpc3RlbmVyOlVsLFRhc2tDZW50ZXI6Vmwsc2VuZFRhc2tzKC4uLmYpe3JldHVybiBGbihjYWxsTmF0aXZlKT9jYWxsTmF0aXZlKC4uLmYpOihnbG9iYWwuY2FsbE5hdGl2ZXx8KCgpPT57fSkpKC4uLmYpfX07cW8uaGFuZGxlcj1pbS5zZW5kVGFza3M7dmFyIGZsPWltO2Z1bmN0aW9uIFprKCl7T2EoZmwuQ29tbWVudCksT2EoZmwuTGlzdGVuZXIpLE9hKGZsLkRvY3VtZW50LnByb3RvdHlwZSksT2EoZmwuQ29tbWVudC5wcm90b3R5cGUpLE9hKGZsLkxpc3RlbmVyLnByb3RvdHlwZSl9dmFyIHB1PXtzZXJ2aWNlOntyZWdpc3RlcjpmdSx1bnJlZ2lzdGVyOmR1LGhhczprZn0sZnJlZXplUHJvdG90eXBlOlprLGluaXQ6VmYsY29uZmlnOmZsfTt2YXIgVWY9Y2xhc3N7Y29uc3RydWN0b3IocyxwPXt9KXt0aGlzLnR5cGU9c3x8Im1lc3NhZ2UiLHRoaXMuZGF0YT1wLmRhdGF8fG51bGwsdGhpcy5vcmlnaW49cC5vcmlnaW58fCIiLHRoaXMuc291cmNlPXAuc291cmNlfHxudWxsLHRoaXMucG9ydHM9cC5wb3J0c3x8W10sdGhpcy50YXJnZXQ9bnVsbCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfX07dmFyIFJzPXt9LG1jPXt9O2Z1bmN0aW9uICRmKCl7fSRmLnByb3RvdHlwZS5wb3N0TWVzc2FnZT1mdW5jdGlvbihmKXtpZih0aGlzLl9jbG9zZWQpdGhyb3cgbmV3IEVycm9yKGBCcm9hZGNhc3RDaGFubmVsICIke3RoaXMubmFtZX0iIGlzIGNsb3NlZC5gKTtsZXQgcz1Sc1t0aGlzLm5hbWVdO2lmKHMmJnMubGVuZ3RoKWZvcihsZXQgcD0wO3A8cy5sZW5ndGg7KytwKXtsZXQgdz1zW3BdO3cuX2Nsb3NlZHx8dz09PXRoaXN8fEZuKHcub25tZXNzYWdlKSYmdy5vbm1lc3NhZ2UobmV3IFVmKCJtZXNzYWdlIix7ZGF0YTpmfSkpfX07JGYucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Nsb3NlZCYmKHRoaXMuX2Nsb3NlZD0hMCxSc1t0aGlzLm5hbWVdKSl7bGV0IGY9UnNbdGhpcy5uYW1lXS5maWx0ZXIocz0+cyE9PXRoaXMpO2YubGVuZ3RoP1JzW3RoaXMubmFtZV09ZjpkZWxldGUgUnNbdGhpcy5uYW1lXX19O3ZhciBvbT17Y3JlYXRlOmY9PntpZihtY1tmXT1bXSxGbihnbG9iYWwuQnJvYWRjYXN0Q2hhbm5lbCkpcmV0dXJue307bGV0IHM9e0Jyb2FkY2FzdENoYW5uZWw6ZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTpTdHJpbmcocCl9KSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5vbm1lc3NhZ2U9bnVsbCxSc1t0aGlzLm5hbWVdfHwoUnNbdGhpcy5uYW1lXT1bXSksUnNbdGhpcy5uYW1lXS5wdXNoKHRoaXMpLG1jW2ZdLnB1c2godGhpcyl9fTtyZXR1cm4gcy5Ccm9hZGNhc3RDaGFubmVsLnByb3RvdHlwZT0kZi5wcm90b3R5cGUse2luc3RhbmNlOnN9fSxkZXN0cm95OmY9PnttY1tmXSYmKG1jW2ZdLmZvckVhY2gocz0+cy5jbG9zZSgpKSxkZWxldGUgbWNbZl0pfX07ZnVuY3Rpb24gSGYoKXtsZXR7aW5pdDpmfT1wdTtwdS5zZXJ2aWNlLnJlZ2lzdGVyKCJCcm9hZGNhc3RDaGFubmVsIixvbSkscHUuZnJlZXplUHJvdG90eXBlKCk7bGV0IHM9ZigpO2ZvcihsZXQgcCBpbiBzKWdsb2JhbFtwXT0oLi4udyk9PntsZXQgTj1zW3BdKC4uLncpO3JldHVybiBOIGluc3RhbmNlb2YgRXJyb3ImJmNvbnNvbGUuZXJyb3IoTi50b1N0cmluZygpKSxOfX12YXIgSEI9Z2xvYmFsLmNvbnNvbGU7ZnVuY3Rpb24gYW0oKXtpZihacCgpLGdsb2JhbC5XWEVudmlyb25tZW50JiZnbG9iYWwuV1hFbnZpcm9ubWVudC5wbGF0Zm9ybSE9PSJXZWIiKWdsb2JhbC5jb25zb2xlPXtkZWJ1ZzooLi4uZik9PntucigiZGVidWciKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5fYyhmKSwiX19ERUJVRyIpfSxsb2c6KC4uLmYpPT57bnIoImxvZyIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLl9jKGYpLCJfX0xPRyIpfSxpbmZvOiguLi5mKT0+e25yKCJpbmZvIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uX2MoZiksIl9fSU5GTyIpfSx3YXJuOiguLi5mKT0+e25yKCJ3YXJuIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uX2MoZiksIl9fV0FSTiIpfSxlcnJvcjooLi4uZik9PntucigiZXJyb3IiKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5fYyhmKSwiX19FUlJPUiIpfX07ZWxzZXtsZXR7ZGVidWc6Zixsb2c6cyxpbmZvOnAsd2Fybjp3LGVycm9yOk59PWNvbnNvbGU7Y29uc29sZS5fX29yaV9fPXtkZWJ1ZzpmLGxvZzpzLGluZm86cCx3YXJuOncsZXJyb3I6Tn0sY29uc29sZS5kZWJ1Zz0oLi4ueSk9PntucigiZGVidWciKSYmY29uc29sZS5fX29yaV9fLmRlYnVnLmFwcGx5KGNvbnNvbGUseSl9LGNvbnNvbGUubG9nPSguLi55KT0+e25yKCJsb2ciKSYmY29uc29sZS5fX29yaV9fLmxvZy5hcHBseShjb25zb2xlLHkpfSxjb25zb2xlLmluZm89KC4uLnkpPT57bnIoImluZm8iKSYmY29uc29sZS5fX29yaV9fLmluZm8uYXBwbHkoY29uc29sZSx5KX0sY29uc29sZS53YXJuPSguLi55KT0+e25yKCJ3YXJuIikmJmNvbnNvbGUuX19vcmlfXy53YXJuLmFwcGx5KGNvbnNvbGUseSl9LGNvbnNvbGUuZXJyb3I9KC4uLnkpPT57bnIoImVycm9yIikmJmNvbnNvbGUuX19vcmlfXy5lcnJvci5hcHBseShjb25zb2xlLHkpfX19ZnVuY3Rpb24gX2MoZil7cmV0dXJuIGYubWFwKHM9PntpZihNYShzKS50b0xvd2VyQ2FzZSgpPT09IltvYmplY3Qgb2JqZWN0XSIpdHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2godyl7cz0iW29iamVjdCBvYmplY3RdIn1lbHNlIHM9U3RyaW5nKHMpO3JldHVybiBzfSl9YW0oKTtIZigpO30pKCk7Cg==