@sprig-technologies/sprig-browser 2.14.8 → 2.14.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjguanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezc3ODg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lci0tbW9iaWxlIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi51bC1jYXJkX19jb250YWluZXIge1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNXB4IDIwcHg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udWwtY2FyZC1tYWluLWNvbnRlbnRfX2xpbmsge1xuICBmbGV4LWdyb3c6IDU1O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogMzUlO1xufVxuXG4udWwtY2FyZC1tYWluLWNvbnRlbnRfX3dlYiB7XG4gIHBhZGRpbmctdG9wOiAxNXB4O1xufVxuXG4udWwtcXVlc3Rpb24ge1xuICBmbGV4OiAxIDAgYXV0bztcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxMjUlO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXB0aW9uIHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMTMwLjM1JTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgY29sb3I6ICM2YzZjNmU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXJkX19jaG9pY2VzIHtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG4gIGZsZXg6IDEgMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uY2hvaWNlLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNob2ljZSB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG5cbiAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLmNob2ljZS0tZGVza3RvcDphY3RpdmUsXG4uY2hvaWNlLS1tb2JpbGU6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnVsLXRoYW5rcy1jaGVjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcy1jb250ZW50IHtcbiAgcGFkZGluZzogMjBweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcyAudWwtcXVlc3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgaHlwaGVuczogYXV0bztcbiAgaHlwaGVuYXRlLWxpbWl0LWxpbmVzOiBuby1saW1pdDtcbn1cblxuLnNlbGVjdC1jaGVja2JveCB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlbGVjdC1yYWRpbyB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMjMyMzI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJ3RyYW5zcGFyZW50JztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5mYWRlLWluLXRyYW5zaXRpb24ge1xuICBhbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1tb3otYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW8tYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW1zLWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW1vei1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW8ta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1tcy1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0NzA2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxODk4Niksbz1uKDEwNjY5KSxpPW4oNzc4OCksYT1uKDg2NTU4KSxjPW4oNjA2MzIpLHM9big0MjAwNSksdT1uKDc2NDI4KSxsPW4oNzM1MjMpLGY9big2MzU1Myk7KGU9cighMSkpLmkobyksZS5pKGkpLGUuaShhKSxlLmkoYyksZS5pKHMpLGUuaSh1KSxlLmkobCksZS5pKGYpLGUucHVzaChbdC5pZCwiaHRtbCxcbmJvZHkge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG59XG5cbmIge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4jdWwtYXBwIHtcbiAgb3BhY2l0eTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZ3JvdzogMjtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuI3VsLWFwcC51bC1hcHAtLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2Utb3V0O1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGJvdHRvbTogMDtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5cbi51bC1mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgZmxleC1ncm93OiAxO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLWZvb3Rlci1idWJibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wLFxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jbG9zZS1jb250YWluZXItLWRlc2t0b3Age1xuICB0b3A6IDI1cHg7XG4gIHJpZ2h0OiAyNXB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1tb2JpbGUge1xuICB0b3A6IDE1cHg7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uY2xvc2UtYnRuIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMThweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2Utb3V0O1xufVxuXG4jdWwtcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIG1heC13aWR0aDogMjUwcHg7XG4gIG1hcmdpbjogMjVweCAwO1xufVxuXG4jdWwtcHJvZ3Jlc3MtYmFyLWN1cnJlbnQge1xuICB3aWR0aDogMHB4O1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sODY1NTg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIG5wcy5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLmxpa2VydC1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5saWtlcnQtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmxpa2VydC1udW1iZXItMSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci01IHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MDYzMjpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIuc2VsZWN0LWxhYmVsIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0MjAwNTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbGlrZXJ0LmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1ucHNfX251bWJlcnMge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogNXB4IDAgMCAwO1xufVxuXG4ubnBzLW51bWJlci0tbW9iaWxlIHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTZlNjtcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XG59XG5cbi5ucHMtbnVtYmVyLS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5ucHMtbnVtYmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleDogMSAwO1xuXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIGhlaWdodDogNjdweDtcbn1cblxuLm5wcy1udW1iZXI6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5wcy1udW1iZXItLWRlc2t0b3A6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnBzLW51bWJlci0wIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG59XG5cbi5ucHMtbnVtYmVyLTEwIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSwxMDY2OTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKipcbiAqIG1pbmlyZXNldC5jc3NcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qZ3RobXMvbWluaXJlc2V0LmNzc1xuICovXG5cbmh0bWwsXG5ib2R5LFxucCxcbm9sLFxudWwsXG5saSxcbmRsLFxuZHQsXG5kZCxcbmJsb2NrcXVvdGUsXG5maWd1cmUsXG5maWVsZHNldCxcbmxlZ2VuZCxcbnRleHRhcmVhLFxucHJlLFxuaWZyYW1lLFxuaHIsXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxudWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG5idXR0b24sXG5pbnB1dCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgbWFyZ2luOiAwO1xufVxuXG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3NjQyODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZC10ZXh0IHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4udWwtY2FyZC10ZXh0X19jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBmbGV4OiAxIDAgMTAwJTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDYzcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWF4LWhlaWdodDogMTUwcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0IHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgbWluLWhlaWdodDogNjNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTJweDtcbiAgcmVzaXplOiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSgxMDgsIDEwOCwgMTEwLCAwLjUpO1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4udWwtY2FyZC10ZXh0X19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgcGFkZGluZzogMTAuNXB4IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3MzUyMzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIsXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHkge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHkge1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzAuMzUlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICBjb2xvcjogIzM0MzQ0MjtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHk6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIge1xuICBtaW4taGVpZ2h0OiAyZW07XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDYzNTUzOmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi51bC1jYXJkLS12aWRlbyB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbiN1bC1jYXJkLXZvaWNlX192aWRlbyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4udWwtY2FyZC10ZXh0X19idXR0b24udWwtYnV0dG9uLWluYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDtcbiAgY29sb3I6ICM1ZDY5NmYgIWltcG9ydGFudDtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICB3aWR0aDogLW1vei1hdmFpbGFibGU7IC8qIFdlYktpdC1iYXNlZCBicm93c2VycyB3aWxsIGlnbm9yZSB0aGlzLiAqL1xuICB3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTsgLyogTW96aWxsYS1iYXNlZCBicm93c2VycyB3aWxsIGlnbm9yZSB0aGlzLiAqL1xuICB3aWR0aDogZmlsbC1hdmFpbGFibGU7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDYyNTgyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspbltlXT10W2VdO3JldHVybiBufX19LDQ0NjIxOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4scixvLGksYSl7dHJ5e3ZhciBjPXRbaV0oYSkscz1jLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIG4odCl9Yy5kb25lP2Uocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4ocixvKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saSl7dmFyIGE9dC5hcHBseShuLHIpO2Z1bmN0aW9uIGModCl7ZShhLG8saSxjLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7ZShhLG8saSxjLHMsInRocm93Iix0KX1jKHZvaWQgMCl9KSl9fX0sMzA1OTM6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9fSw0NDUzOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX10LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0sNjQxNTc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH19LDY2MDgxOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5leHBvcnRzPWU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKX1yZXR1cm4gdH0sZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dC5leHBvcnRzPWV9LDk0MjY2OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX19LDk0NTY2OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSw5MjgxNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU4Miksbz1uKDk0MjY2KSxpPW4oOTQ1NjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KXx8byh0KXx8aSgpfX0sNzYzOTA6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj90LmV4cG9ydHM9ZT1mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OnQuZXhwb3J0cz1lPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZShuKX10LmV4cG9ydHM9ZX0sNDQ2NzQ6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKDQ2Njc5KX0sOTczNDM6ZnVuY3Rpb24odCxlKXt2YXIgbixyLG87cj1bdCxlXSxuPWZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3ZhciBuLHIsbz0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6KG49W10scj1bXSx7aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk+LTF9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gcltuLmluZGV4T2YodCldfSxzZXQ6ZnVuY3Rpb24odCxlKXstMT09PW4uaW5kZXhPZih0KSYmKG4ucHVzaCh0KSxyLnB1c2goZSkpfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbmRleE9mKHQpO2U+LTEmJihuLnNwbGljZShlLDEpLHIuc3BsaWNlKGUsMSkpfX0pLGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFdmVudCh0LHtidWJibGVzOiEwfSl9O3RyeXtuZXcgRXZlbnQoInRlc3QiKX1jYXRjaCh0KXtpPWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCExKSxlfX1mdW5jdGlvbiBhKHQpe2lmKHQmJnQubm9kZU5hbWUmJiJURVhUQVJFQSI9PT10Lm5vZGVOYW1lJiYhby5oYXModCkpe3ZhciBlPW51bGwsbj1udWxsLHI9bnVsbCxhPWZ1bmN0aW9uKCl7dC5jbGllbnRXaWR0aCE9PW4mJmQoKX0sYz1mdW5jdGlvbihlKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixhLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixkLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixkLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImF1dG9zaXplOmRlc3Ryb3kiLGMsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6dXBkYXRlIixkLCExKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt0LnN0eWxlW25dPWVbbl19KSksby5kZWxldGUodCl9LmJpbmQodCx7aGVpZ2h0OnQuc3R5bGUuaGVpZ2h0LHJlc2l6ZTp0LnN0eWxlLnJlc2l6ZSxvdmVyZmxvd1k6dC5zdHlsZS5vdmVyZmxvd1ksb3ZlcmZsb3dYOnQuc3R5bGUub3ZlcmZsb3dYLHdvcmRXcmFwOnQuc3R5bGUud29yZFdyYXB9KTt0LmFkZEV2ZW50TGlzdGVuZXIoImF1dG9zaXplOmRlc3Ryb3kiLGMsITEpLCJvbnByb3BlcnR5Y2hhbmdlImluIHQmJiJvbmlucHV0ImluIHQmJnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGQsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGEsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGQsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6dXBkYXRlIixkLCExKSx0LnN0eWxlLm92ZXJmbG93WD0iaGlkZGVuIix0LnN0eWxlLndvcmRXcmFwPSJicmVhay13b3JkIixvLnNldCh0LHtkZXN0cm95OmMsdXBkYXRlOmR9KSxzKCl9ZnVuY3Rpb24gcygpe3ZhciBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk7InZlcnRpY2FsIj09PW4ucmVzaXplP3Quc3R5bGUucmVzaXplPSJub25lIjoiYm90aCI9PT1uLnJlc2l6ZSYmKHQuc3R5bGUucmVzaXplPSJob3Jpem9udGFsIiksZT0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/LShwYXJzZUZsb2F0KG4ucGFkZGluZ1RvcCkrcGFyc2VGbG9hdChuLnBhZGRpbmdCb3R0b20pKTpwYXJzZUZsb2F0KG4uYm9yZGVyVG9wV2lkdGgpK3BhcnNlRmxvYXQobi5ib3JkZXJCb3R0b21XaWR0aCksaXNOYU4oZSkmJihlPTApLGQoKX1mdW5jdGlvbiB1KGUpe3ZhciBuPXQuc3R5bGUud2lkdGg7dC5zdHlsZS53aWR0aD0iMHB4Iix0Lm9mZnNldFdpZHRoLHQuc3R5bGUud2lkdGg9bix0LnN0eWxlLm92ZXJmbG93WT1lfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdO3QmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudDspdC5wYXJlbnROb2RlLnNjcm9sbFRvcCYmZS5wdXNoKHtub2RlOnQucGFyZW50Tm9kZSxzY3JvbGxUb3A6dC5wYXJlbnROb2RlLnNjcm9sbFRvcH0pLHQ9dC5wYXJlbnROb2RlO3JldHVybiBlfWZ1bmN0aW9uIGYoKXtpZigwIT09dC5zY3JvbGxIZWlnaHQpe3ZhciByPWwodCksbz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7dC5zdHlsZS5oZWlnaHQ9IiIsdC5zdHlsZS5oZWlnaHQ9dC5zY3JvbGxIZWlnaHQrZSsicHgiLG49dC5jbGllbnRXaWR0aCxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZS5zY3JvbGxUb3A9dC5zY3JvbGxUb3B9KSksbyYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A9byl9fWZ1bmN0aW9uIGQoKXtmKCk7dmFyIGU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KHQuc3R5bGUuaGVpZ2h0KSksbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLG89ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nP01hdGgucm91bmQocGFyc2VGbG9hdChuLmhlaWdodCkpOnQub2Zmc2V0SGVpZ2h0O2lmKG88ZT8iaGlkZGVuIj09PW4ub3ZlcmZsb3dZJiYodSgic2Nyb2xsIiksZigpLG89ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nP01hdGgucm91bmQocGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmhlaWdodCkpOnQub2Zmc2V0SGVpZ2h0KToiaGlkZGVuIiE9PW4ub3ZlcmZsb3dZJiYodSgiaGlkZGVuIiksZigpLG89ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nP01hdGgucm91bmQocGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmhlaWdodCkpOnQub2Zmc2V0SGVpZ2h0KSxyIT09byl7cj1vO3ZhciBhPWkoImF1dG9zaXplOnJlc2l6ZWQiKTt0cnl7dC5kaXNwYXRjaEV2ZW50KGEpfWNhdGNoKHQpe319fX1mdW5jdGlvbiBjKHQpe3ZhciBlPW8uZ2V0KHQpO2UmJmUuZGVzdHJveSgpfWZ1bmN0aW9uIHModCl7dmFyIGU9by5nZXQodCk7ZSYmZS51cGRhdGUoKX12YXIgdT1udWxsOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwiZnVuY3Rpb24iIT10eXBlb2Ygd2luZG93LmdldENvbXB1dGVkU3R5bGU/KCh1PWZ1bmN0aW9uKHQpe3JldHVybiB0fSkuZGVzdHJveT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KTooKHU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0Lmxlbmd0aD90Olt0XSwoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSx0fSkuZGVzdHJveT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0Lmxlbmd0aD90Olt0XSxjKSx0fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0Lmxlbmd0aD90Olt0XSxzKSx0fSksZS5kZWZhdWx0PXUsdC5leHBvcnRzPWUuZGVmYXVsdH0sdm9pZCAwPT09KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLHIpOm4pfHwodC5leHBvcnRzPW8pfSw0MDA0NjpmdW5jdGlvbih0LGUsbil7big2NTY3OSksbig1MTA5MCksbigyNDc4NSksbig4OTE3KSxuKDU0Nzg2KSxuKDEyODE2KSxuKDYxOTI0KSxuKDk4MzA2KSxuKDEyMDI1KSxuKDI4MzMpLG4oOTY0NTMpLG4oNzA4NjMpLG4oMjQ4MDIpLG4oMTgyNzMpLG4oNDI0MTEpLG4oMzc0ODEpLG4oNDU1NTApLG4oNTgxNjUpLG4oNTExNzMpLG4oODc0Myksbig3NTgwNCksbig0NjE0NiksbigxNTA3Nyksbig1ODMyOSksbig2MDUyNSksbig3NDk1Myksbig1NDc4MSksbig1MTY2KSxuKDg5NzU4KSxuKDE4Mzc4KSxuKDkyNTIpLG4oOTMyNzIpLG4oNTYxNTgpLG4oNDE0NTYpLG4oNzI4NTEpLG4oMzQ1MjkpLG4oMTkyNzgpLG4oOTEyMDkpLG4oNzI1NjApLG4oMTA2Myksbig5NjQ5OCksbigyMjQ0Miksbig3NTg5NCksbig3MTYyMiksbig3NDUzOCksbigyMTI3KSxuKDY5OTg4KSxuKDU3Mzg3KSxuKDMwODE3KSxuKDUyMDU1KSxuKDczMzYwKSxuKDQ3NTAyKSxuKDMzMTk1KSxuKDkwOTEyKSxuKDI4MjAzKSxuKDc5MjI3KSxuKDQzNTkxKSxuKDIyMjc3KSxuKDI0MTI5KSxuKDc0MTIwKSxuKDk0OTYzKSxuKDI3Mzg4KSxuKDgwNTIyKSxuKDQ1NTI4KSxuKDgwMTE2KSxuKDI5MTEwKSxuKDg1NTk0KSxuKDY3ODEyKSxuKDMzNzkyKSxuKDg2MjE0KSxuKDcwMTQ2KSxuKDcxODQ2KSxuKDUwMDYzKSxuKDEwNzQzKSxuKDgwNTExKSxuKDE1MzczKSxuKDk3Njg4KSxuKDc0NTYzKSxuKDY1MDAzKSxuKDgxMjc3KSxuKDQ0MDE5KSxuKDM4MiksbigxODgyMyksbigzMzMyMiksbigzMzA2NSksbigxNzQ5NCksbig4MDM2Myksbig0MzM5Niksbig2OTE4OCksbig3NDc5NSksbig4MjIwMSksbig0MTc3MyksbigzMDQwMiksbigxODE3NSksbig2Njg5Niksbig4NTc2Nyksbig4NDM2KSxuKDkyMTkyKSxuKDEyMTU1KSxuKDI2MDE2KSxuKDc0MTE3KSxuKDI4MDAzKSxuKDY3OTQxKSxuKDQ0MDUxKSxuKDQ5NDk1KSxuKDg3MjA5KSxuKDE4Mjc2KSxuKDM3NTQpLG4oMzM0MzcpLG4oMTk0MzMpLG4oNzE4MjcpLG4oMjYwNjMpLG4oOTY3KSxuKDMzMTAwKSxuKDQxOTI4KSxuKDE1ODY5KSxuKDg4NzE1KSxuKDM2OTk1KSxuKDExMjI0KSxuKDYzNzY1KSxuKDEzMDY0KSxuKDMyMjkzKSxuKDIxMDMyKSxuKDM3OTM2KSxuKDkzOTk1KSxuKDEzMzkzKSxuKDExMjgxKSxuKDM4MDM2KSxuKDExMzgpLG4oNDYwNzgpLG4oMzAwODMpLG4oNDczODMpLG4oNzE1NTgpLG4oOTkyMTgpLG4oOTg5NzgpLG4oODA2OSksbig3MDIwNCksbig4NTc1OCksbigxMTc3MyksbigxNTc2Myksbig0MTYzMiksbigzNjIzMyksbig0MDA0NSksbigyMTM3Niksbig4NDA3KSxuKDE2NTApLG4oODExMDQpLG4oMTE2ODgpLG4oMTc2MjkpLG4oNDI0OTApLG4oOTQ5MDYpLG4oNzQwNjEpLG4oNTg2MDYpLG4oNDUxNTcpLG4oNjEyNDUpLG4oMjkyNzMpLG4oOTA1NjApLG4oNDUxNTQpLG4oNzAzNzMpLG4oODA3NTcpLG4oNjk4NzkpLG4oMjQ0OTgpLG4oMTY5NzgpLG4oMTcxNTIpLG4oMzc5ODcpLG4oMjY4MCksbigzODI4MCksbigxODU1OSksbig1MDQ4Miksbig3NDIzMCksbigxODUwNiksbigyMDI0MiksbigyODE1NSksbigzMzkwMSksbig3NjQ0Miksbig4ODYzNiksbig4MTQ2Myksbig5NTE2Myksbig4MzY3MyksbigyMzU2OCksbigyNzI5NCksbigyNDQ1NyksbigzOTMyKSxuKDc1NDk5KSxuKDg3NTY0KSxuKDg0NTApLG4oMTc2MDUpLG4oNzM1NjIpLG4oMTE4NzgpLG4oNjA5MjkpLG4oNDM5NTEpLG4oOTEzNDcpLG4oMjkyODQpLG4oNjE5NDMpLG4oMjY5ODYpLG4oMTM2Niksbig4MzMxMCksbig0NjU5Nyksbig3MDEzNiksbig2MDg2NSksbig2NzcwOCksbig5NjYzOCksbigzOTczMCksbig3NDExNSksbig4NTY4Nik7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDYwNDkxOmZ1bmN0aW9uKHQsZSxuKXtuKDQwMDQ2KSxuKDE1NjI0KSxuKDkyNDA0KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sODY0NzA6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiB0fX0sNzk4NjE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBzZXQgIitTdHJpbmcodCkrIiBhcyBhIHByb3RvdHlwZSIpO3JldHVybiB0fX0sNzY1MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpLG89big1MDg2OCksaT1uKDY2OTcxKSxhPXIoInVuc2NvcGFibGVzIiksYz1BcnJheS5wcm90b3R5cGU7bnVsbD09Y1thXSYmaShjLGEsbyhudWxsKSksdC5leHBvcnRzPWZ1bmN0aW9uKHQpe2NbYV1bdF09ITB9fSw1MzE0MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAxNDApLmNoYXJBdDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlKyhuP3IodCxlKS5sZW5ndGg6MSl9fSw1OTM3OTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0ICIrKG4/bisiICI6IiIpKyJpbnZvY2F0aW9uIik7cmV0dXJuIHR9fSw4NzU3OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIHR9fSw3MzA3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89big2MjU1NiksaT1uKDg5NTU4KSxhPW4oMTA1OTIpLGM9big3NjI5OCkscz1uKDU5NTkxKSx1PW4oNjY5NzEpLGw9big5MjkxMyksZj1uKDM3NjIwKS5mLGQ9big2NDk2NSkscD1uKDcxODQyKSxoPW4oMjM3MjQpLHY9big2NzI5KSxnPWkuRGF0YVZpZXcseT1nJiZnLnByb3RvdHlwZSxtPWkuSW50OEFycmF5LGI9bSYmbS5wcm90b3R5cGUseD1pLlVpbnQ4Q2xhbXBlZEFycmF5LHc9eCYmeC5wcm90b3R5cGUsRT1tJiZkKG0pLGo9YiYmZChiKSxDPU9iamVjdC5wcm90b3R5cGUsaz1DLmlzUHJvdG90eXBlT2YsUz1oKCJ0b1N0cmluZ1RhZyIpLE89digiVFlQRURfQVJSQVlfVEFHIiksQT0hKCFpLkFycmF5QnVmZmVyfHwhZyksST1BJiYhIXAmJiJPcGVyYSIhPT1zKGkub3BlcmEpLE09ITEsVD17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LF89ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkmJmMoVCxzKHQpKX07Zm9yKHIgaW4gVClpW3JdfHwoST0hMSk7aWYoKCFJfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8RT09PUZ1bmN0aW9uLnByb3RvdHlwZSkmJihFPWZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxJKSlmb3IociBpbiBUKWlbcl0mJnAoaVtyXSxFKTtpZigoIUl8fCFqfHxqPT09QykmJihqPUUucHJvdG90eXBlLEkpKWZvcihyIGluIFQpaVtyXSYmcChpW3JdLnByb3RvdHlwZSxqKTtpZihJJiZkKHcpIT09aiYmcCh3LGopLG8mJiFjKGosUykpZm9yKHIgaW4gTT0hMCxmKGosUyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyk/dGhpc1tPXTp2b2lkIDB9fSksVClpW3JdJiZ1KGlbcl0sTyxyKTtBJiZwJiZkKHkpIT09QyYmcCh5LEMpLHQuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUjpBLE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6SSxUWVBFRF9BUlJBWV9UQUc6TSYmTyxhVHlwZWRBcnJheTpmdW5jdGlvbih0KXtpZihfKHQpKXJldHVybiB0O3Rocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYocCl7aWYoay5jYWxsKEUsdCkpcmV0dXJuIHR9ZWxzZSBmb3IodmFyIGUgaW4gVClpZihjKFQscikpe3ZhciBuPWlbZV07aWYobiYmKHQ9PT1ufHxrLmNhbGwobix0KSkpcmV0dXJuIHR9dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbih0LGUsbil7aWYobyl7aWYobilmb3IodmFyIHIgaW4gVCl7dmFyIGE9aVtyXTthJiZjKGEucHJvdG90eXBlLHQpJiZkZWxldGUgYS5wcm90b3R5cGVbdF19alt0XSYmIW58fGwoaix0LG4/ZTpJJiZiW3RdfHxlKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGE7aWYobyl7aWYocCl7aWYobilmb3IociBpbiBUKShhPWlbcl0pJiZjKGEsdCkmJmRlbGV0ZSBhW3RdO2lmKEVbdF0mJiFuKXJldHVybjt0cnl7cmV0dXJuIGwoRSx0LG4/ZTpJJiZtW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihyIGluIFQpIShhPWlbcl0pfHxhW3RdJiYhbnx8bChhLHQsZSl9fSxpc1ZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8YyhULGUpfSxpc1R5cGVkQXJyYXk6XyxUeXBlZEFycmF5OkUsVHlwZWRBcnJheVByb3RvdHlwZTpqfX0sODI4MzU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNjI1NTYpLGk9big3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUixhPW4oNjY5NzEpLGM9bigxOTI2KSxzPW4oMzIxODcpLHU9big1OTM3OSksbD1uKDQzNDE2KSxmPW4oMjc4ODQpLGQ9big4MzkxNCkscD1uKDkwNzI1KSxoPW4oMTMzMzQpLmYsdj1uKDM3NjIwKS5mLGc9big2NTg5NSkseT1uKDUxMTI4KSxtPW4oODk4MjcpLGI9bS5nZXQseD1tLnNldCx3PSJBcnJheUJ1ZmZlciIsRT0iRGF0YVZpZXciLGo9Ildyb25nIGluZGV4IixDPXIuQXJyYXlCdWZmZXIsaz1DLFM9ci5EYXRhVmlldyxPPXIuUmFuZ2VFcnJvcixBPXAucGFjayxJPXAudW5wYWNrLE09ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0XX0sVD1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfSxfPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NSx0Pj4xNiYyNTUsdD4+MjQmMjU1XX0sTD1mdW5jdGlvbih0KXtyZXR1cm4gdFszXTw8MjR8dFsyXTw8MTZ8dFsxXTw8OHx0WzBdfSxSPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsMjMsNCl9LFA9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCw1Miw4KX0sTj1mdW5jdGlvbih0LGUpe3YodC5wcm90b3R5cGUsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcylbZV19fSl9LEQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89ZChuKSxpPWIodCk7aWYobytlPmkuYnl0ZUxlbmd0aCl0aHJvdyBPKGopO3ZhciBhPWIoaS5idWZmZXIpLmJ5dGVzLGM9bytpLmJ5dGVPZmZzZXQscz1hLnNsaWNlKGMsYytlKTtyZXR1cm4gcj9zOnMucmV2ZXJzZSgpfSxGPWZ1bmN0aW9uKHQsZSxuLHIsbyxpKXt2YXIgYT1kKG4pLGM9Yih0KTtpZihhK2U+Yy5ieXRlTGVuZ3RoKXRocm93IE8oaik7Zm9yKHZhciBzPWIoYy5idWZmZXIpLmJ5dGVzLHU9YStjLmJ5dGVPZmZzZXQsbD1yKCtvKSxmPTA7ZjxlO2YrKylzW3UrZl09bFtpP2Y6ZS1mLTFdfTtpZihpKXtpZighcygoZnVuY3Rpb24oKXtDKDEpfSkpfHwhcygoZnVuY3Rpb24oKXtuZXcgQygtMSl9KSl8fHMoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDLG5ldyBDKDEuNSksbmV3IEMoTmFOKSxDLm5hbWUhPXd9KSkpe2Zvcih2YXIgVSxCPShrPWZ1bmN0aW9uKHQpe3JldHVybiB1KHRoaXMsayksbmV3IEMoZCh0KSl9KS5wcm90b3R5cGU9Qy5wcm90b3R5cGUsej1oKEMpLEg9MDt6Lmxlbmd0aD5IOykoVT16W0grK10paW4ga3x8YShrLFUsQ1tVXSk7Qi5jb25zdHJ1Y3Rvcj1rfXZhciBWPW5ldyBTKG5ldyBrKDIpKSxxPVMucHJvdG90eXBlLnNldEludDg7Vi5zZXRJbnQ4KDAsMjE0NzQ4MzY0OCksVi5zZXRJbnQ4KDEsMjE0NzQ4MzY0OSksIVYuZ2V0SW50OCgwKSYmVi5nZXRJbnQ4KDEpfHxjKFMucHJvdG90eXBlLHtzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7cS5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe3EuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX19LHt1bnNhZmU6ITB9KX1lbHNlIGs9ZnVuY3Rpb24odCl7dSh0aGlzLGssdyk7dmFyIGU9ZCh0KTt4KHRoaXMse2J5dGVzOmcuY2FsbChuZXcgQXJyYXkoZSksMCksYnl0ZUxlbmd0aDplfSksb3x8KHRoaXMuYnl0ZUxlbmd0aD1lKX0sUz1mdW5jdGlvbih0LGUsbil7dSh0aGlzLFMsRSksdSh0LGssRSk7dmFyIHI9Yih0KS5ieXRlTGVuZ3RoLGk9bChlKTtpZihpPDB8fGk+cil0aHJvdyBPKCJXcm9uZyBvZmZzZXQiKTtpZihpKyhuPXZvaWQgMD09PW4/ci1pOmYobikpPnIpdGhyb3cgTygiV3JvbmcgbGVuZ3RoIik7eCh0aGlzLHtidWZmZXI6dCxieXRlTGVuZ3RoOm4sYnl0ZU9mZnNldDppfSksb3x8KHRoaXMuYnVmZmVyPXQsdGhpcy5ieXRlTGVuZ3RoPW4sdGhpcy5ieXRlT2Zmc2V0PWkpfSxvJiYoTihrLCJieXRlTGVuZ3RoIiksTihTLCJidWZmZXIiKSxOKFMsImJ5dGVMZW5ndGgiKSxOKFMsImJ5dGVPZmZzZXQiKSksYyhTLnByb3RvdHlwZSx7Z2V0SW50ODpmdW5jdGlvbih0KXtyZXR1cm4gRCh0aGlzLDEsdClbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24odCl7cmV0dXJuIEQodGhpcywxLHQpWzBdfSxnZXRJbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1EKHRoaXMsMix0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4oZVsxXTw8OHxlWzBdKTw8MTY+PjE2fSxnZXRVaW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9RCh0aGlzLDIsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIGVbMV08PDh8ZVswXX0sZ2V0SW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEwoRCh0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpfSxnZXRVaW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEwoRCh0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbih0KXtyZXR1cm4gSShEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSwyMyl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24odCl7cmV0dXJuIEkoRCh0aGlzLDgsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksNTIpfSxzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDEsdCxNLGUpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe0YodGhpcywxLHQsTSxlKX0sc2V0SW50MTY6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMix0LFQsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQxNjpmdW5jdGlvbih0LGUpe0YodGhpcywyLHQsVCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0SW50MzI6ZnVuY3Rpb24odCxlKXtGKHRoaXMsNCx0LF8sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsXyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsUixlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQ2NDpmdW5jdGlvbih0LGUpe0YodGhpcyw4LHQsUCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX19KTt5KGssdykseShTLEUpLHQuZXhwb3J0cz17QXJyYXlCdWZmZXI6ayxEYXRhVmlldzpTfX0sOTk0MzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjA5KSxvPW4oNzY5NzYpLGk9bigyNzg4NCksYT1NYXRoLm1pbjt0LmV4cG9ydHM9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHRoaXMpLGM9aShuLmxlbmd0aCkscz1vKHQsYyksdT1vKGUsYyksbD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxmPWEoKHZvaWQgMD09PWw/YzpvKGwsYykpLXUsYy1zKSxkPTE7Zm9yKHU8cyYmczx1K2YmJihkPS0xLHUrPWYtMSxzKz1mLTEpO2YtLSA+MDspdSBpbiBuP25bc109blt1XTpkZWxldGUgbltzXSxzKz1kLHUrPWQ7cmV0dXJuIG59fSw2NTg5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyMDkpLG89big3Njk3NiksaT1uKDI3ODg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXIodGhpcyksbj1pKGUubGVuZ3RoKSxhPWFyZ3VtZW50cy5sZW5ndGgsYz1vKGE+MT9hcmd1bWVudHNbMV06dm9pZCAwLG4pLHM9YT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsdT12b2lkIDA9PT1zP246byhzLG4pO3U+YzspZVtjKytdPXQ7cmV0dXJuIGV9fSwzMTM2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzAwMjUpLmZvckVhY2gsbz1uKDIyOTA5KTt0LmV4cG9ydHM9bygiZm9yRWFjaCIpP2Z1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9OltdLmZvckVhY2h9LDg1MTY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NjEzMCksbz1uKDE5MjA5KSxpPW4oMTIyNzgpLGE9big0NDk4NCksYz1uKDI3ODg0KSxzPW4oNTg4MTApLHU9big3Mzg5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbCxmLGQscD1vKHQpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSx2PWFyZ3VtZW50cy5sZW5ndGgsZz12PjE/YXJndW1lbnRzWzFdOnZvaWQgMCx5PXZvaWQgMCE9PWcsbT0wLGI9dShwKTtpZih5JiYoZz1yKGcsdj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLG51bGw9PWJ8fGg9PUFycmF5JiZhKGIpKWZvcihuPW5ldyBoKGU9YyhwLmxlbmd0aCkpO2U+bTttKyspcyhuLG0seT9nKHBbbV0sbSk6cFttXSk7ZWxzZSBmb3IoZD0oZj1iLmNhbGwocCkpLm5leHQsbj1uZXcgaDshKGw9ZC5jYWxsKGYpKS5kb25lO20rKylzKG4sbSx5P2koZixnLFtsLnZhbHVlLG1dLCEwKTpsLnZhbHVlKTtyZXR1cm4gbi5sZW5ndGg9bSxufX0sODU4MDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTU3Myksbz1uKDI3ODg0KSxpPW4oNzY5NzYpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixhKXt2YXIgYyxzPXIoZSksdT1vKHMubGVuZ3RoKSxsPWkoYSx1KTtpZih0JiZuIT1uKXtmb3IoO3U+bDspaWYoKGM9c1tsKytdKSE9YylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigodHx8bCBpbiBzKSYmc1tsXT09PW4pcmV0dXJuIHR8fGx8fDA7cmV0dXJuIXQmJi0xfX07dC5leHBvcnRzPXtpbmNsdWRlczphKCEwKSxpbmRleE9mOmEoITEpfX0sMzAwMjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDYxMzApLG89bigyNDk4KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDcwMDkpLHM9W10ucHVzaCx1PWZ1bmN0aW9uKHQpe3ZhciBlPTE9PXQsbj0yPT10LHU9Mz09dCxsPTQ9PXQsZj02PT10LGQ9NT09dHx8ZjtyZXR1cm4gZnVuY3Rpb24ocCxoLHYsZyl7Zm9yKHZhciB5LG0sYj1pKHApLHg9byhiKSx3PXIoaCx2LDMpLEU9YSh4Lmxlbmd0aCksaj0wLEM9Z3x8YyxrPWU/QyhwLEUpOm4/QyhwLDApOnZvaWQgMDtFPmo7aisrKWlmKChkfHxqIGluIHgpJiYobT13KHk9eFtqXSxqLGIpLHQpKWlmKGUpa1tqXT1tO2Vsc2UgaWYobSlzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIGo7Y2FzZSAyOnMuY2FsbChrLHkpfWVsc2UgaWYobClyZXR1cm4hMTtyZXR1cm4gZj8tMTp1fHxsP2w6a319O3QuZXhwb3J0cz17Zm9yRWFjaDp1KDApLG1hcDp1KDEpLGZpbHRlcjp1KDIpLHNvbWU6dSgzKSxldmVyeTp1KDQpLGZpbmQ6dSg1KSxmaW5kSW5kZXg6dSg2KX19LDQ5MjQ5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5NTczKSxvPW4oNDM0MTYpLGk9bigyNzg4NCksYT1uKDIyOTA5KSxjPU1hdGgubWluLHM9W10ubGFzdEluZGV4T2YsdT0hIXMmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDAsbD1hKCJsYXN0SW5kZXhPZiIpO3QuZXhwb3J0cz11fHxsP2Z1bmN0aW9uKHQpe2lmKHUpcmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBlPXIodGhpcyksbj1pKGUubGVuZ3RoKSxhPW4tMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYoYT1jKGEsbyhhcmd1bWVudHNbMV0pKSksYTwwJiYoYT1uK2EpO2E+PTA7YS0tKWlmKGEgaW4gZSYmZVthXT09PXQpcmV0dXJuIGF8fDA7cmV0dXJuLTF9OnN9LDYxOTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjM3MjQpLGk9big3OTA3MSksYT1vKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpPj01MXx8IXIoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuKGUuY29uc3RydWN0b3I9e30pW2FdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PWVbdF0oQm9vbGVhbikuZm9vfSkpfX0sMTIzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODY0NzApLG89bigxOTIwOSksaT1uKDI0OTgpLGE9bigyNzg4NCksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGMscyl7cihuKTt2YXIgdT1vKGUpLGw9aSh1KSxmPWEodS5sZW5ndGgpLGQ9dD9mLTE6MCxwPXQ/LTE6MTtpZihjPDIpZm9yKDs7KXtpZihkIGluIGwpe3M9bFtkXSxkKz1wO2JyZWFrfWlmKGQrPXAsdD9kPDA6Zjw9ZCl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3Q/ZD49MDpmPmQ7ZCs9cClkIGluIGwmJihzPW4ocyxsW2RdLGQsdSkpO3JldHVybiBzfX07dC5leHBvcnRzPXtsZWZ0OmMoITEpLHJpZ2h0OmMoITApfX0sNzAwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDYxOTkpLGk9bigyMzcyNCkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbyh0KSYmKCJmdW5jdGlvbiIhPXR5cGVvZihuPXQuY29uc3RydWN0b3IpfHxuIT09QXJyYXkmJiFvKG4ucHJvdG90eXBlKT9yKG4pJiZudWxsPT09KG49bltpXSkmJihuPXZvaWQgMCk6bj12b2lkIDApLG5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKDA9PT1lPzA6ZSl9fSw0NTY2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89big4NzU3OSksaT1uKDc3MDEpKCJQcm9taXNlIiksYT1bXS5wdXNoLGM9ZnVuY3Rpb24odCl7dmFyIGU9MD09dCxuPTE9PXQsYz0yPT10LHM9Mz09dDtyZXR1cm4gZnVuY3Rpb24odCx1KXtvKHQpO3ZhciBsPXIodC5uZXh0KSxmPWU/W106dm9pZCAwO3JldHVybiBlfHxyKHUpLG5ldyBpKChmdW5jdGlvbihyLGQpe3ZhciBwPWZ1bmN0aW9uKCl7dHJ5e2kucmVzb2x2ZShvKGwuY2FsbCh0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZihvKHQpLmRvbmUpcihlP2Y6IXMmJihjfHx2b2lkIDApKTtlbHNle3ZhciBsPXQudmFsdWU7ZT8oYS5jYWxsKGYsbCkscCgpKTppLnJlc29sdmUodShsKSkudGhlbigoZnVuY3Rpb24odCl7bj9wKCk6Yz90P3AoKTpyKCExKTp0P3Ioc3x8bCk6cCgpfSksZCl9fWNhdGNoKHQpe2QodCl9fSksZCl9Y2F0Y2godCl7ZCh0KX19O3AoKX0pKX19O3QuZXhwb3J0cz17dG9BcnJheTpjKDApLGZvckVhY2g6YygxKSxldmVyeTpjKDIpLHNvbWU6YygzKSxmaW5kOmMoNCl9fSw2Mzg0NTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPW4oODk1NTgpLGE9bigzNDc0MSksYz1uKDY0OTY1KSxzPW4oNzYyOTgpLHU9big2Njk3MSksbD1uKDIzNzI0KSxmPW4oNjU2NzIpLGQ9bCgiYXN5bmNJdGVyYXRvciIpLHA9aS5Bc3luY0l0ZXJhdG9yLGg9YS5Bc3luY0l0ZXJhdG9yUHJvdG90eXBlO2lmKCFmKWlmKGgpcj1oO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHApcj1wLnByb3RvdHlwZTtlbHNlIGlmKGEuVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SfHxpLlVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUil0cnl7bz1jKGMoYyhGdW5jdGlvbigicmV0dXJuIGFzeW5jIGZ1bmN0aW9uKigpe30oKSIpKCkpKSksYyhvKT09PU9iamVjdC5wcm90b3R5cGUmJihyPW8pfWNhdGNoKHQpe31yfHwocj17fSkscyhyLGQpfHx1KHIsZCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9cn0sNDYxMzA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYocih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuY2FsbChlKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5jYWxsKGUsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gdC5jYWxsKGUsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIHQuY2FsbChlLG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LDEyMjc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbyl7dHJ5e3JldHVybiBvP2UocihuKVswXSxuWzFdKTplKG4pfWNhdGNoKGUpe3ZhciBpPXQucmV0dXJuO3Rocm93IHZvaWQgMCE9PWkmJnIoaS5jYWxsKHQpKSxlfX19LDQ3OTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBpPTAsYT17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhaSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7bz0hMH19O2Fbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShhLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2godCl7fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFlJiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9e307aVtyXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19fX0sdChpKX1jYXRjaCh0KXt9cmV0dXJuIG59fSwyNDU5NDpmdW5jdGlvbih0KXt2YXIgZT17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0KS5zbGljZSg4LC0xKX19LDU5NTkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwNjEzKSxvPW4oMjQ1OTQpLGk9bigyMzcyNCkoInRvU3RyaW5nVGFnIiksYT0iQXJndW1lbnRzIj09byhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7dmFyIGUsbixyO3JldHVybiB2b2lkIDA9PT10PyJVbmRlZmluZWQiOm51bGw9PT10PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHRbZV19Y2F0Y2godCl7fX0oZT1PYmplY3QodCksaSkpP246YT9vKGUpOiJPYmplY3QiPT0ocj1vKGUpKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsbGVlPyJBcmd1bWVudHMiOnJ9fSw5ODE3OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIodGhpcyksZT1vKHQuYWRkKSxuPTAsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspZS5jYWxsKHQsYXJndW1lbnRzW25dKTtyZXR1cm4gdH19LDE0NjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXIodGhpcyksbj1vKGUuZGVsZXRlKSxpPSEwLGE9MCxjPWFyZ3VtZW50cy5sZW5ndGg7YTxjO2ErKyl0PW4uY2FsbChlLGFyZ3VtZW50c1thXSksaT1pJiZ0O3JldHVybiEhaX19LDEyOTAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDQ2MTMwKSxpPW4oNDEzMzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLGEsYyxzPWFyZ3VtZW50cy5sZW5ndGgsdT1zPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gcih0aGlzKSwoZT12b2lkIDAhPT11KSYmcih1KSxudWxsPT10P25ldyB0aGlzOihuPVtdLGU/KGE9MCxjPW8odSxzPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSxpKHQsKGZ1bmN0aW9uKHQpe24ucHVzaChjKHQsYSsrKSl9KSkpOmkodCxuLnB1c2gsbiksbmV3IHRoaXMobikpfX0sMjUwMjY6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpO3QtLTspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG5ldyB0aGlzKGUpfX0sNjQ1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzc2MjApLmYsbz1uKDUwODY4KSxpPW4oMTkyNiksYT1uKDQ2MTMwKSxjPW4oNTkzNzkpLHM9big0MTMzNCksdT1uKDQ2MDYxKSxsPW4oNjc1MzgpLGY9big2MjU1NiksZD1uKDk2MDMpLmZhc3RLZXkscD1uKDg5ODI3KSxoPXAuc2V0LHY9cC5nZXR0ZXJGb3I7dC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUsbix1KXt2YXIgbD10KChmdW5jdGlvbih0LHIpe2ModCxsLGUpLGgodCx7dHlwZTplLGluZGV4Om8obnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGZ8fCh0LnNpemU9MCksbnVsbCE9ciYmcyhyLHRbdV0sdCxuKX0pKSxwPXYoZSksZz1mdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPXAodCksYT15KHQsZSk7cmV0dXJuIGE/YS52YWx1ZT1uOihpLmxhc3Q9YT17aW5kZXg6bz1kKGUsITApLGtleTplLHZhbHVlOm4scHJldmlvdXM6cj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9YSksciYmKHIubmV4dD1hKSxmP2kuc2l6ZSsrOnQuc2l6ZSsrLCJGIiE9PW8mJihpLmluZGV4W29dPWEpKSx0fSx5PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1wKHQpLG89ZChlKTtpZigiRiIhPT1vKXJldHVybiByLmluZGV4W29dO2ZvcihuPXIuZmlyc3Q7bjtuPW4ubmV4dClpZihuLmtleT09ZSlyZXR1cm4gbn07cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXAodGhpcyksZT10LmluZGV4LG49dC5maXJzdDtuOyluLnJlbW92ZWQ9ITAsbi5wcmV2aW91cyYmKG4ucHJldmlvdXM9bi5wcmV2aW91cy5uZXh0PXZvaWQgMCksZGVsZXRlIGVbbi5pbmRleF0sbj1uLm5leHQ7dC5maXJzdD10Lmxhc3Q9dm9pZCAwLGY/dC5zaXplPTA6dGhpcy5zaXplPTB9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49cChlKSxyPXkoZSx0KTtpZihyKXt2YXIgbz1yLm5leHQsaT1yLnByZXZpb3VzO2RlbGV0ZSBuLmluZGV4W3IuaW5kZXhdLHIucmVtb3ZlZD0hMCxpJiYoaS5uZXh0PW8pLG8mJihvLnByZXZpb3VzPWkpLG4uZmlyc3Q9PXImJihuLmZpcnN0PW8pLG4ubGFzdD09ciYmKG4ubGFzdD1pKSxmP24uc2l6ZS0tOmUuc2l6ZS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj1wKHRoaXMpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO2U9ZT9lLm5leHQ6bi5maXJzdDspZm9yKHIoZS52YWx1ZSxlLmtleSx0aGlzKTtlJiZlLnJlbW92ZWQ7KWU9ZS5wcmV2aW91c30saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEheSh0aGlzLHQpfX0pLGkobC5wcm90b3R5cGUsbj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXkodGhpcyx0KTtyZXR1cm4gZSYmZS52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcodGhpcywwPT09dD8wOnQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsdD0wPT09dD8wOnQsdCl9fSksZiYmcihsLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLnNpemV9fSksbH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lKyIgSXRlcmF0b3IiLG89dihlKSxpPXYocik7dSh0LGUsKGZ1bmN0aW9uKHQsZSl7aCh0aGlzLHt0eXBlOnIsdGFyZ2V0OnQsc3RhdGU6byh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1pKHRoaXMpLGU9dC5raW5kLG49dC5sYXN0O24mJm4ucmVtb3ZlZDspbj1uLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1uPW4/bi5uZXh0OnQuc3RhdGUuZmlyc3QpPyJrZXlzIj09ZT97dmFsdWU6bi5rZXksZG9uZTohMX06InZhbHVlcyI9PWU/e3ZhbHVlOm4udmFsdWUsZG9uZTohMX06e3ZhbHVlOltuLmtleSxuLnZhbHVlXSxkb25lOiExfToodC50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSksbj8iZW50cmllcyI6InZhbHVlcyIsIW4sITApLGwoZSl9fX0sNzEzMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjYpLG89big5NjAzKS5nZXRXZWFrRGF0YSxpPW4oODc1NzkpLGE9bigxMDU5MiksYz1uKDU5Mzc5KSxzPW4oNDEzMzQpLHU9bigzMDAyNSksbD1uKDc2Mjk4KSxmPW4oODk4MjcpLGQ9Zi5zZXQscD1mLmdldHRlckZvcixoPXUuZmluZCx2PXUuZmluZEluZGV4LGc9MCx5PWZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBtKX0sbT1mdW5jdGlvbigpe3RoaXMuZW50cmllcz1bXX0sYj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHQuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSkpfTttLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWIodGhpcyx0KTtpZihlKXJldHVybiBlWzFdfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LGUpe3ZhciBuPWIodGhpcyx0KTtuP25bMV09ZTp0aGlzLmVudHJpZXMucHVzaChbdCxlXSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT12KHRoaXMuZW50cmllcywoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpO3JldHVybn5lJiZ0aGlzLmVudHJpZXMuc3BsaWNlKGUsMSksISF+ZX19LHQuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLG4sdSl7dmFyIGY9dCgoZnVuY3Rpb24odCxyKXtjKHQsZixlKSxkKHQse3R5cGU6ZSxpZDpnKyssZnJvemVuOnZvaWQgMH0pLG51bGwhPXImJnMocix0W3VdLHQsbil9KSksaD1wKGUpLHY9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWgodCksYT1vKGkoZSksITApO3JldHVybiEwPT09YT95KHIpLnNldChlLG4pOmFbci5pZF09bix0fTtyZXR1cm4gcihmLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPWgodGhpcyk7aWYoIWEodCkpcmV0dXJuITE7dmFyIG49byh0KTtyZXR1cm4hMD09PW4/eShlKS5kZWxldGUodCk6biYmbChuLGUuaWQpJiZkZWxldGUgbltlLmlkXX0saGFzOmZ1bmN0aW9uKHQpe3ZhciBlPWgodGhpcyk7aWYoIWEodCkpcmV0dXJuITE7dmFyIG49byh0KTtyZXR1cm4hMD09PW4/eShlKS5oYXModCk6biYmbChuLGUuaWQpfX0pLHIoZi5wcm90b3R5cGUsbj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWgodGhpcyk7aWYoYSh0KSl7dmFyIG49byh0KTtyZXR1cm4hMD09PW4/eShlKS5nZXQodCk6bj9uW2UuaWRdOnZvaWQgMH19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB2KHRoaXMsdCxlKX19OnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHYodGhpcyx0LCEwKX19KSxmfX19LDgxOTUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9big5MjkxMyksYz1uKDk2MDMpLHM9big0MTMzNCksdT1uKDU5Mzc5KSxsPW4oMTA1OTIpLGY9bigzMjE4NyksZD1uKDQ3OTYpLHA9big1MTEyOCksaD1uKDMwMjcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB2PS0xIT09dC5pbmRleE9mKCJNYXAiKSxnPS0xIT09dC5pbmRleE9mKCJXZWFrIikseT12PyJzZXQiOiJhZGQiLG09b1t0XSxiPW0mJm0ucHJvdG90eXBlLHg9bSx3PXt9LEU9ZnVuY3Rpb24odCl7dmFyIGU9Ylt0XTthKGIsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0KSx0aGlzfToiZGVsZXRlIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGcmJiFsKHQpKSYmZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ImdldCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIGcmJiFsKHQpP3ZvaWQgMDplLmNhbGwodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGcmJiFsKHQpKSYmZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0LG4pLHRoaXN9KX07aWYoaSh0LCJmdW5jdGlvbiIhPXR5cGVvZiBtfHwhKGd8fGIuZm9yRWFjaCYmIWYoKGZ1bmN0aW9uKCl7KG5ldyBtKS5lbnRyaWVzKCkubmV4dCgpfSkpKSkpeD1uLmdldENvbnN0cnVjdG9yKGUsdCx2LHkpLGMuUkVRVUlSRUQ9ITA7ZWxzZSBpZihpKHQsITApKXt2YXIgaj1uZXcgeCxDPWpbeV0oZz97fTotMCwxKSE9aixrPWYoKGZ1bmN0aW9uKCl7ai5oYXMoMSl9KSksUz1kKChmdW5jdGlvbih0KXtuZXcgbSh0KX0pKSxPPSFnJiZmKChmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgbSxlPTU7ZS0tOyl0W3ldKGUsZSk7cmV0dXJuIXQuaGFzKC0wKX0pKTtTfHwoKHg9ZSgoZnVuY3Rpb24oZSxuKXt1KGUseCx0KTt2YXIgcj1oKG5ldyBtLGUseCk7cmV0dXJuIG51bGwhPW4mJnMobixyW3ldLHIsdikscn0pKSkucHJvdG90eXBlPWIsYi5jb25zdHJ1Y3Rvcj14KSwoa3x8TykmJihFKCJkZWxldGUiKSxFKCJoYXMiKSx2JiZFKCJnZXQiKSksKE98fEMpJiZFKHkpLGcmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfXJldHVybiB3W3RdPXgscih7Z2xvYmFsOiEwLGZvcmNlZDp4IT1tfSx3KSxwKHgsdCksZ3x8bi5zZXRTdHJvbmcoeCx0LHYpLHh9fSw3NDY4NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NDkwNiksbz1uKDU4NjA2KSxpPW4oNTA4NjgpLGE9bigxMDU5MiksYz1mdW5jdGlvbigpe3RoaXMub2JqZWN0PW51bGwsdGhpcy5zeW1ib2w9bnVsbCx0aGlzLnByaW1pdGl2ZXM9bnVsbCx0aGlzLm9iamVjdHNCeUluZGV4PWkobnVsbCl9O2MucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW3RdfHwodGhpc1t0XT1lKCkpfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uP3RoaXMub2JqZWN0c0J5SW5kZXhbdF18fCh0aGlzLm9iamVjdHNCeUluZGV4W3RdPW5ldyBvKTp0aGlzLnByaW1pdGl2ZXN8fCh0aGlzLnByaW1pdGl2ZXM9bmV3IHIpLGE9aS5nZXQoZSk7cmV0dXJuIGF8fGkuc2V0KGUsYT1uZXcgYyksYX07dmFyIHM9bmV3IGM7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPXMscj1hcmd1bWVudHMubGVuZ3RoO2Zvcih0PTA7dDxyO3QrKylhKGU9YXJndW1lbnRzW3RdKSYmKG49bi5uZXh0KHQsZSwhMCkpO2lmKHRoaXM9PT1PYmplY3QmJm49PT1zKXRocm93IFR5cGVFcnJvcigiQ29tcG9zaXRlIGtleXMgbXVzdCBjb250YWluIGEgbm9uLXByaW1pdGl2ZSBjb21wb25lbnQiKTtmb3IodD0wO3Q8cjt0KyspYShlPWFyZ3VtZW50c1t0XSl8fChuPW4ubmV4dCh0LGUsITEpKTtyZXR1cm4gbn19LDk5NjI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oMjQ0MTUpLGk9big5NzI1NyksYT1uKDM3NjIwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49byhlKSxjPWEuZixzPWkuZix1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBsPW5bdV07cih0LGwpfHxjKHQsbCxzKGUsbCkpfX19LDkzOTE1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXsiLy4vIlt0XShlKX1jYXRjaChuKXt0cnl7cmV0dXJuIGVbcl09ITEsIi8uLyJbdF0oZSl9Y2F0Y2godCl7fX1yZXR1cm4hMX19LDcxNjA4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSl9LDI3MDA0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NjIzOCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big1MDg2OCksYz1uKDY2OTcxKSxzPW4oMTkyNiksdT1uKDIzNzI0KSxsPW4oODk4MjcpLGY9big3NzAxKSgiUHJvbWlzZSIpLGQ9bC5zZXQscD1sLmdldCxoPXUoInRvU3RyaW5nVGFnIiksdj1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMpLml0ZXJhdG9yLG49ZS5yZXR1cm47cmV0dXJuIHZvaWQgMD09PW4/Zi5yZXNvbHZlKHtkb25lOiEwLHZhbHVlOnR9KTppKG4uY2FsbChlLHQpKX0sZz1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMpLml0ZXJhdG9yLG49ZS50aHJvdztyZXR1cm4gdm9pZCAwPT09bj9mLnJlamVjdCh0KTpuLmNhbGwoZSx0KX07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7dC5uZXh0PW8odC5pdGVyYXRvci5uZXh0KSx0LmRvbmU9ITEsZCh0aGlzLHQpfTtyZXR1cm4gbi5wcm90b3R5cGU9cyhhKHIuQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciBuPXAodGhpcyk7aWYobi5kb25lKXJldHVybiBmLnJlc29sdmUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7dHJ5e3JldHVybiBmLnJlc29sdmUoaSh0LmNhbGwobixlLGYpKSl9Y2F0Y2godCl7cmV0dXJuIGYucmVqZWN0KHQpfX0scmV0dXJuOnYsdGhyb3c6Z30pLGV8fGMobi5wcm90b3R5cGUsaCwiR2VuZXJhdG9yIiksbn19LDMxMzUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKSxvPS8iL2c7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPVN0cmluZyhyKHQpKSxjPSI8IitlO3JldHVybiIiIT09biYmKGMrPSIgIituKyc9IicrU3RyaW5nKGkpLnJlcGxhY2UobywiJnF1b3Q7IikrJyInKSxjKyI+IithKyI8LyIrZSsiPiJ9fSw3MTIwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjQxNzYpLkl0ZXJhdG9yUHJvdG90eXBlLG89big1MDg2OCksaT1uKDE0MjA5KSxhPW4oNTExMjgpLGM9bigxMjM1KSxzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHU9ZSsiIEl0ZXJhdG9yIjtyZXR1cm4gdC5wcm90b3R5cGU9byhyLHtuZXh0OmkoMSxuKX0pLGEodCx1LCExLCEwKSxjW3VdPXMsdH19LDg4MDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU2MjM4KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDUwODY4KSxjPW4oNjY5NzEpLHM9bigxOTI2KSx1PW4oMjM3MjQpLGw9big4OTgyNyksZj1sLnNldCxkPWwuZ2V0LHA9dSgidG9TdHJpbmdUYWciKSxoPWZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcykuaXRlcmF0b3Isbj1lLnJldHVybjtyZXR1cm4gdm9pZCAwPT09bj97ZG9uZTohMCx2YWx1ZTp0fTppKG4uY2FsbChlLHQpKX0sdj1mdW5jdGlvbih0KXt2YXIgZT1kKHRoaXMpLml0ZXJhdG9yLG49ZS50aHJvdztpZih2b2lkIDA9PT1uKXRocm93IHQ7cmV0dXJuIG4uY2FsbChlLHQpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXt0Lm5leHQ9byh0Lml0ZXJhdG9yLm5leHQpLHQuZG9uZT0hMSxmKHRoaXMsdCl9O3JldHVybiBuLnByb3RvdHlwZT1zKGEoci5JdGVyYXRvci5wcm90b3R5cGUpLHtuZXh0OmZ1bmN0aW9uKCl7dmFyIGU9ZCh0aGlzKSxuPWUuZG9uZT92b2lkIDA6dC5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJue2RvbmU6ZS5kb25lLHZhbHVlOm59fSxyZXR1cm46aCx0aHJvdzp2fSksZXx8YyhuLnByb3RvdHlwZSxwLCJHZW5lcmF0b3IiKSxufX0sNjY5NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDE0MjA5KTt0LmV4cG9ydHM9cj9mdW5jdGlvbih0LGUsbil7cmV0dXJuIG8uZih0LGUsaSgxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH19LDE0MjA5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LDU4ODEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1MzQ5OCksbz1uKDM3NjIwKSxpPW4oMTQyMDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9cihlKTthIGluIHQ/by5mKHQsYSxpKDAsbikpOnRbYV09bn19LDc5MTY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMjE4Nyksbz1uKDI2NTczKS5zdGFydCxpPU1hdGguYWJzLGE9RGF0ZS5wcm90b3R5cGUsYz1hLmdldFRpbWUscz1hLnRvSVNPU3RyaW5nO3QuZXhwb3J0cz1yKChmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT1zLmNhbGwobmV3IERhdGUoLTUwMDAwMDAwMDAwMDAxKSl9KSl8fCFyKChmdW5jdGlvbigpe3MuY2FsbChuZXcgRGF0ZShOYU4pKX0pKT9mdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShjLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO3ZhciB0PXRoaXMsZT10LmdldFVUQ0Z1bGxZZWFyKCksbj10LmdldFVUQ01pbGxpc2Vjb25kcygpLHI9ZTwwPyItIjplPjk5OTk/IisiOiIiO3JldHVybiByK28oaShlKSxyPzY6NCwwKSsiLSIrbyh0LmdldFVUQ01vbnRoKCkrMSwyLDApKyItIitvKHQuZ2V0VVRDRGF0ZSgpLDIsMCkrIlQiK28odC5nZXRVVENIb3VycygpLDIsMCkrIjoiK28odC5nZXRVVENNaW51dGVzKCksMiwwKSsiOiIrbyh0LmdldFVUQ1NlY29uZHMoKSwyLDApKyIuIitvKG4sMywwKSsiWiJ9OnN9LDc2OTc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDUzNDk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPT10JiYibnVtYmVyIiE9PXQmJiJkZWZhdWx0IiE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBvKHIodGhpcyksIm51bWJlciIhPT10KX19LDQ2MDYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcxMjAxKSxpPW4oNjQ5NjUpLGE9big3MTg0MiksYz1uKDUxMTI4KSxzPW4oNjY5NzEpLHU9big5MjkxMyksbD1uKDIzNzI0KSxmPW4oNjU2NzIpLGQ9bigxMjM1KSxwPW4oNjQxNzYpLGg9cC5JdGVyYXRvclByb3RvdHlwZSx2PXAuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxnPWwoIml0ZXJhdG9yIikseT0ia2V5cyIsbT0idmFsdWVzIixiPSJlbnRyaWVzIix4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixsLHAsdyxFKXtvKG4sZSxsKTt2YXIgaixDLGssUz1mdW5jdGlvbih0KXtpZih0PT09cCYmVClyZXR1cm4gVDtpZighdiYmdCBpbiBJKXJldHVybiBJW3RdO3N3aXRjaCh0KXtjYXNlIHk6Y2FzZSBtOmNhc2UgYjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMpfX0sTz1lKyIgSXRlcmF0b3IiLEE9ITEsST10LnByb3RvdHlwZSxNPUlbZ118fElbIkBAaXRlcmF0b3IiXXx8cCYmSVtwXSxUPSF2JiZNfHxTKHApLF89IkFycmF5Ij09ZSYmSS5lbnRyaWVzfHxNO2lmKF8mJihqPWkoXy5jYWxsKG5ldyB0KSksaCE9PU9iamVjdC5wcm90b3R5cGUmJmoubmV4dCYmKGZ8fGkoaik9PT1ofHwoYT9hKGosaCk6ImZ1bmN0aW9uIiE9dHlwZW9mIGpbZ10mJnMoaixnLHgpKSxjKGosTywhMCwhMCksZiYmKGRbT109eCkpKSxwPT1tJiZNJiZNLm5hbWUhPT1tJiYoQT0hMCxUPWZ1bmN0aW9uKCl7cmV0dXJuIE0uY2FsbCh0aGlzKX0pLGYmJiFFfHxJW2ddPT09VHx8cyhJLGcsVCksZFtlXT1ULHApaWYoQz17dmFsdWVzOlMobSksa2V5czp3P1Q6Uyh5KSxlbnRyaWVzOlMoYil9LEUpZm9yKGsgaW4gQykodnx8QXx8IShrIGluIEkpKSYmdShJLGssQ1trXSk7ZWxzZSByKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6dnx8QX0sQyk7cmV0dXJuIEN9fSw5MjI3NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NjIzOCksbz1uKDc2Mjk4KSxpPW4oNzM5MTYpLGE9bigzNzYyMCkuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9ci5TeW1ib2x8fChyLlN5bWJvbD17fSk7byhlLHQpfHxhKGUsdCx7dmFsdWU6aS5mKHQpfSl9fSw2MjU1NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSwxOTIzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oMTA1OTIpLGk9ci5kb2N1bWVudCxhPW8oaSkmJm8oaS5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/aS5jcmVhdGVFbGVtZW50KHQpOnt9fX0sNDcwOTQ6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfX0sNTkxMzU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDE0MDQ0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oOTcyNTcpLmYsaT1uKDY2OTcxKSxhPW4oOTI5MTMpLGM9big5ODI2OSkscz1uKDk5NjI1KSx1PW4oNjQ1MDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGwsZixkLHAsaD10LnRhcmdldCx2PXQuZ2xvYmFsLGc9dC5zdGF0O2lmKG49dj9yOmc/cltoXXx8YyhoLHt9KToocltoXXx8e30pLnByb3RvdHlwZSlmb3IobCBpbiBlKXtpZihkPWVbbF0sZj10Lm5vVGFyZ2V0R2V0PyhwPW8obixsKSkmJnAudmFsdWU6bltsXSwhdSh2P2w6aCsoZz8iLiI6IiMiKStsLHQuZm9yY2VkKSYmdm9pZCAwIT09Zil7aWYodHlwZW9mIGQ9PXR5cGVvZiBmKWNvbnRpbnVlO3MoZCxmKX0odC5zaGFtfHxmJiZmLnNoYW0pJiZpKGQsInNoYW0iLCEwKSxhKG4sbCxkLHQpfX19LDMyMTg3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sMzU4NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY2OTcxKSxvPW4oOTI5MTMpLGk9bigzMjE4NyksYT1uKDIzNzI0KSxjPW4oMzg1OTgpLHM9YSgic3BlY2llcyIpLHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9Ly4vO3JldHVybiB0LmV4ZWM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdC5ncm91cHM9e2E6IjcifSx0fSwiNyIhPT0iIi5yZXBsYWNlKHQsIiQ8YT4iKX0pKSxsPSFpKChmdW5jdGlvbigpe3ZhciB0PS8oPzopLyxlPXQuZXhlYzt0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBuPSJhYiIuc3BsaXQodCk7cmV0dXJuIDIhPT1uLmxlbmd0aHx8ImEiIT09blswXXx8ImIiIT09blsxXX0pKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sZil7dmFyIGQ9YSh0KSxwPSFpKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBlW2RdPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPSIiW3RdKGUpfSkpLGg9cCYmIWkoKGZ1bmN0aW9uKCl7dmFyIGU9ITEsbj0vYS87cmV0dXJuInNwbGl0Ij09PXQmJigobj17fSkuY29uc3RydWN0b3I9e30sbi5jb25zdHJ1Y3RvcltzXT1mdW5jdGlvbigpe3JldHVybiBufSxuLmZsYWdzPSIiLG5bZF09Ly4vW2RdKSxuLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxudWxsfSxuW2RdKCIiKSwhZX0pKTtpZighcHx8IWh8fCJyZXBsYWNlIj09PXQmJiF1fHwic3BsaXQiPT09dCYmIWwpe3ZhciB2PS8uL1tkXSxnPW4oZCwiIlt0XSwoZnVuY3Rpb24odCxlLG4scixvKXtyZXR1cm4gZS5leGVjPT09Yz9wJiYhbz97ZG9uZTohMCx2YWx1ZTp2LmNhbGwoZSxuLHIpfTp7ZG9uZTohMCx2YWx1ZTp0LmNhbGwobixlLHIpfTp7ZG9uZTohMX19KSkseT1nWzBdLG09Z1sxXTtvKFN0cmluZy5wcm90b3R5cGUsdCx5KSxvKFJlZ0V4cC5wcm90b3R5cGUsZCwyPT1lP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG0uY2FsbCh0LHRoaXMsZSl9OmZ1bmN0aW9uKHQpe3JldHVybiBtLmNhbGwodCx0aGlzKX0pLGYmJnIoUmVnRXhwLnByb3RvdHlwZVtkXSwic2hhbSIsITApfX19LDgwNjY1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MTk5KSxvPW4oMjc4ODQpLGk9big0NjEzMCksYT1mdW5jdGlvbih0LGUsbixjLHMsdSxsLGYpe2Zvcih2YXIgZCxwPXMsaD0wLHY9ISFsJiZpKGwsZiwzKTtoPGM7KXtpZihoIGluIG4pe2lmKGQ9dj92KG5baF0saCxlKTpuW2hdLHU+MCYmcihkKSlwPWEodCxlLGQsbyhkLmxlbmd0aCkscCx1LTEpLTE7ZWxzZXtpZihwPj05MDA3MTk5MjU0NzQwOTkxKXRocm93IFR5cGVFcnJvcigiRXhjZWVkIHRoZSBhY2NlcHRhYmxlIGFycmF5IGxlbmd0aCIpO3RbcF09ZH1wKyt9aCsrfXJldHVybiBwfTt0LmV4cG9ydHM9YX0sNDc4MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY1NjcyKSxvPW4oODk1NTgpLGk9bigzMjE4Nyk7dC5leHBvcnRzPXJ8fCFpKChmdW5jdGlvbigpe3ZhciB0PU1hdGgucmFuZG9tKCk7X19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsdCwoZnVuY3Rpb24oKXt9KSksZGVsZXRlIG9bdF19KSl9LDUyMTI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKCl7dmFyIGU9IiJbdF0oJyInKTtyZXR1cm4gZSE9PWUudG9Mb3dlckNhc2UoKXx8ZS5zcGxpdCgnIicpLmxlbmd0aD4zfSkpfX0sODQ3NTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89big1MDA1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbigpe3JldHVybiEhb1t0XSgpfHwi4oCLwoXhoI4iIT0i4oCLwoXhoI4iW3RdKCl8fG9bdF0ubmFtZSE9PXR9KSl9fSw3NDUyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkpfSw3MzczOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89bigxMDU5MiksaT1bXS5zbGljZSxhPXt9LGM9ZnVuY3Rpb24odCxlLG4pe2lmKCEoZSBpbiBhKSl7Zm9yKHZhciByPVtdLG89MDtvPGU7bysrKXJbb109ImFbIitvKyJdIjthW2VdPUZ1bmN0aW9uKCJDLGEiLCJyZXR1cm4gbmV3IEMoIityLmpvaW4oIiwiKSsiKSIpfXJldHVybiBhW2VdKHQsbil9O3QuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMpLG49aS5jYWxsKGFyZ3VtZW50cywxKSxhPWZ1bmN0aW9uKCl7dmFyIHI9bi5jb25jYXQoaS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgYT9jKGUsci5sZW5ndGgscik6ZS5hcHBseSh0LHIpfTtyZXR1cm4gbyhlLnByb3RvdHlwZSkmJihhLnByb3RvdHlwZT1lLnByb3RvdHlwZSksYX19LDY2OTIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDczODkwKSxvPW4oMjM3MjQpKCJhc3luY0l0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbb107cmV0dXJuIHZvaWQgMD09PWU/cih0KTplfX0sNzcwMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NjIzOCksbz1uKDg5NTU4KSxpPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dm9pZCAwfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2koclt0XSl8fGkob1t0XSk6clt0XSYmclt0XVtlXXx8b1t0XSYmb1t0XVtlXX19LDczODkwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5NTkxKSxvPW4oMTIzNSksaT1uKDIzNzI0KSgiaXRlcmF0b3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbCE9dClyZXR1cm4gdFtpXXx8dFsiQEBpdGVyYXRvciJdfHxvW3IodCldfX0sMzEwNzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big3Mzg5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW8odCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO3JldHVybiByKGUuY2FsbCh0KSl9fSw0MTk4OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDMxMDc0KTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3JldHVybiBNYXAucHJvdG90eXBlLmVudHJpZXMuY2FsbCh0KX19LDQxNDc1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzEwNzQpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7cmV0dXJuIFNldC5wcm90b3R5cGUudmFsdWVzLmNhbGwodCl9fSw4OTU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuTWF0aD09TWF0aCYmdH07dC5leHBvcnRzPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2Ygbi5nJiZuLmcpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSw3NjI5ODpmdW5jdGlvbih0KXt2YXIgZT17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbil9fSwyMzA3MDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e319LDgzNjIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbnNvbGU7biYmbi5lcnJvciYmKDE9PT1hcmd1bWVudHMubGVuZ3RoP24uZXJyb3IodCk6bi5lcnJvcih0LGUpKX19LDUxNTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpO3QuZXhwb3J0cz1yKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSw2Mjc5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDMyMTg3KSxpPW4oMTkyMyk7dC5leHBvcnRzPSFyJiYhbygoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sOTA3MjU6ZnVuY3Rpb24odCl7dmFyIGU9MS8wLG49TWF0aC5hYnMscj1NYXRoLnBvdyxvPU1hdGguZmxvb3IsaT1NYXRoLmxvZyxhPU1hdGguTE4yO3QuZXhwb3J0cz17cGFjazpmdW5jdGlvbih0LGMscyl7dmFyIHUsbCxmLGQ9bmV3IEFycmF5KHMpLHA9OCpzLWMtMSxoPSgxPDxwKS0xLHY9aD4+MSxnPTIzPT09Yz9yKDIsLTI0KS1yKDIsLTc3KTowLHk9dDwwfHwwPT09dCYmMS90PDA/MTowLG09MDtmb3IoKHQ9bih0KSkhPXR8fHQ9PT1lPyhsPXQhPXQ/MTowLHU9aCk6KHU9byhpKHQpL2EpLHQqKGY9cigyLC11KSk8MSYmKHUtLSxmKj0yKSwodCs9dSt2Pj0xP2cvZjpnKnIoMiwxLXYpKSpmPj0yJiYodSsrLGYvPTIpLHUrdj49aD8obD0wLHU9aCk6dSt2Pj0xPyhsPSh0KmYtMSkqcigyLGMpLHUrPXYpOihsPXQqcigyLHYtMSkqcigyLGMpLHU9MCkpO2M+PTg7ZFttKytdPTI1NSZsLGwvPTI1NixjLT04KTtmb3IodT11PDxjfGwscCs9YztwPjA7ZFttKytdPTI1NSZ1LHUvPTI1NixwLT04KTtyZXR1cm4gZFstLW1dfD0xMjgqeSxkfSx1bnBhY2s6ZnVuY3Rpb24odCxuKXt2YXIgbyxpPXQubGVuZ3RoLGE9OCppLW4tMSxjPSgxPDxhKS0xLHM9Yz4+MSx1PWEtNyxsPWktMSxmPXRbbC0tXSxkPTEyNyZmO2ZvcihmPj49Nzt1PjA7ZD0yNTYqZCt0W2xdLGwtLSx1LT04KTtmb3Iobz1kJigxPDwtdSktMSxkPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2xdLGwtLSx1LT04KTtpZigwPT09ZClkPTEtcztlbHNle2lmKGQ9PT1jKXJldHVybiBvP05hTjpmPy0xLzA6ZTtvKz1yKDIsbiksZC09c31yZXR1cm4oZj8tMToxKSpvKnIoMixkLW4pfX19LDI0OTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyNDU5NCksaT0iIi5zcGxpdDt0LmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24odCl7cmV0dXJuIlN0cmluZyI9PW8odCk/aS5jYWxsKHQsIiIpOk9iamVjdCh0KX06T2JqZWN0fSwzMDI3MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDcxODQyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE7cmV0dXJuIG8mJiJmdW5jdGlvbiI9PXR5cGVvZihpPWUuY29uc3RydWN0b3IpJiZpIT09biYmcihhPWkucHJvdG90eXBlKSYmYSE9PW4ucHJvdG90eXBlJiZvKHQsYSksdH19LDc2NzczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0NzQxKSxvPUZ1bmN0aW9uLnRvU3RyaW5nOyJmdW5jdGlvbiIhPXR5cGVvZiByLmluc3BlY3RTb3VyY2UmJihyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY2FsbCh0KX0pLHQuZXhwb3J0cz1yLmluc3BlY3RTb3VyY2V9LDk2MDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjMwNzApLG89bigxMDU5MiksaT1uKDc2Mjk4KSxhPW4oMzc2MjApLmYsYz1uKDY3MjkpLHM9big3NDUyMCksdT1jKCJtZXRhIiksbD0wLGY9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZD1mdW5jdGlvbih0KXthKHQsdSx7dmFsdWU6e29iamVjdElEOiJPIisgKytsLHdlYWtEYXRhOnt9fX0pfSxwPXQuZXhwb3J0cz17UkVRVUlSRUQ6ITEsZmFzdEtleTpmdW5jdGlvbih0LGUpe2lmKCFvKHQpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgdD90Oigic3RyaW5nIj09dHlwZW9mIHQ/IlMiOiJQIikrdDtpZighaSh0LHUpKXtpZighZih0KSlyZXR1cm4iRiI7aWYoIWUpcmV0dXJuIkUiO2QodCl9cmV0dXJuIHRbdV0ub2JqZWN0SUR9LGdldFdlYWtEYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIWkodCx1KSl7aWYoIWYodCkpcmV0dXJuITA7aWYoIWUpcmV0dXJuITE7ZCh0KX1yZXR1cm4gdFt1XS53ZWFrRGF0YX0sb25GcmVlemU6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJnAuUkVRVUlSRUQmJmYodCkmJiFpKHQsdSkmJmQodCksdH19O3JbdV09ITB9LDg5ODI3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGksYT1uKDE5NTkxKSxjPW4oODk1NTgpLHM9bigxMDU5MiksdT1uKDY2OTcxKSxsPW4oNzYyOTgpLGY9big4MzE5NyksZD1uKDIzMDcwKSxwPWMuV2Vha01hcDtpZihhKXt2YXIgaD1uZXcgcCx2PWguZ2V0LGc9aC5oYXMseT1oLnNldDtyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuY2FsbChoLHQsZSksZX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdi5jYWxsKGgsdCl8fHt9fSxpPWZ1bmN0aW9uKHQpe3JldHVybiBnLmNhbGwoaCx0KX19ZWxzZXt2YXIgbT1mKCJzdGF0ZSIpO2RbbV09ITAscj1mdW5jdGlvbih0LGUpe3JldHVybiB1KHQsbSxlKSxlfSxvPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbSk/dFttXTp7fX0saT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LG0pfX10LmV4cG9ydHM9e3NldDpyLGdldDpvLGhhczppLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/byh0KTpyKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuO2lmKCFzKGUpfHwobj1vKGUpKS50eXBlIT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fX0sNDQ5ODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpLG89bigxMjM1KSxpPXIoIml0ZXJhdG9yIiksYT1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiYoby5BcnJheT09PXR8fGFbaV09PT10KX19LDYxOTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iQXJyYXkiPT1yKHQpfX0sNjQ1MDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89LyN8XC5wcm90b3R5cGVcLi8saT1mdW5jdGlvbih0LGUpe3ZhciBuPWNbYSh0KV07cmV0dXJuIG49PXV8fG4hPXMmJigiZnVuY3Rpb24iPT10eXBlb2YgZT9yKGUpOiEhZSl9LGE9aS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKG8sIi4iKS50b0xvd2VyQ2FzZSgpfSxjPWkuZGF0YT17fSxzPWkuTkFUSVZFPSJOIix1PWkuUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1pfSwzODI1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hcih0KSYmaXNGaW5pdGUodCkmJm8odCk9PT10fX0sMjEyMzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzk0NzYpO3QuZXhwb3J0cz0vKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3Qocil9LDEwNTkyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQ/bnVsbCE9PXQ6ImZ1bmN0aW9uIj09dHlwZW9mIHR9fSw2NTY3MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ITF9LDQzMjIzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oMjQ1OTQpLGk9bigyMzcyNCkoIm1hdGNoIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiByKHQpJiYodm9pZCAwIT09KGU9dFtpXSk/ISFlOiJSZWdFeHAiPT1vKHQpKX19LDQxMzM0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNDQ5ODQpLGk9bigyNzg4NCksYT1uKDQ2MTMwKSxjPW4oNzM4OTApLHM9bigxMjI3OCksdT1mdW5jdGlvbih0LGUpe3RoaXMuc3RvcHBlZD10LHRoaXMucmVzdWx0PWV9Oyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbCxmKXt2YXIgZCxwLGgsdixnLHksbSxiPWEoZSxuLGw/MjoxKTtpZihmKWQ9dDtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZihwPWModCkpKXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSIpO2lmKG8ocCkpe2ZvcihoPTAsdj1pKHQubGVuZ3RoKTt2Pmg7aCsrKWlmKChnPWw/YihyKG09dFtoXSlbMF0sbVsxXSk6Yih0W2hdKSkmJmcgaW5zdGFuY2VvZiB1KXJldHVybiBnO3JldHVybiBuZXcgdSghMSl9ZD1wLmNhbGwodCl9Zm9yKHk9ZC5uZXh0OyEobT15LmNhbGwoZCkpLmRvbmU7KWlmKCJvYmplY3QiPT10eXBlb2YoZz1zKGQsYixtLnZhbHVlLGwpKSYmZyYmZyBpbnN0YW5jZW9mIHUpcmV0dXJuIGc7cmV0dXJuIG5ldyB1KCExKX0pLnN0b3A9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1KCEwLHQpfX0sNjQxNzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGksYT1uKDY0OTY1KSxjPW4oNjY5NzEpLHM9big3NjI5OCksdT1uKDIzNzI0KSxsPW4oNjU2NzIpLGY9dSgiaXRlcmF0b3IiKSxkPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KG89YShhKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYocj1vKTpkPSEwKSxudWxsPT1yJiYocj17fSksbHx8cyhyLGYpfHxjKHIsZiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOnIsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpkfX0sMTIzNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e319LDQ3OTI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1yKHRoaXMpLGk9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBpKXRocm93IFR5cGVFcnJvcigiQXQgbGVhc3Qgb25lIGNhbGxiYWNrIHJlcXVpcmVkIik7cmV0dXJuIG8uaGFzKHQpPyhuPW8uZ2V0KHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobj1lKG4pLG8uc2V0KHQsbikpKToiZnVuY3Rpb24iPT10eXBlb2YgaSYmKG49aSgpLG8uc2V0KHQsbikpLG59fSw3Mjk3MDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmV4cG0xLG49TWF0aC5leHA7dC5leHBvcnRzPSFlfHxlKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGUoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1lKC0yZS0xNyk/ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90OnQ+LTFlLTYmJnQ8MWUtNj90K3QqdC8yOm4odCktMX06ZX0sNTMyNTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzg3ODcpLG89TWF0aC5hYnMsaT1NYXRoLnBvdyxhPWkoMiwtNTIpLGM9aSgyLC0yMykscz1pKDIsMTI3KSooMi1jKSx1PWkoMiwtMTI2KTt0LmV4cG9ydHM9TWF0aC5mcm91bmR8fGZ1bmN0aW9uKHQpe3ZhciBlLG4saT1vKHQpLGw9cih0KTtyZXR1cm4gaTx1P2wqKGkvdS9jKzEvYS0xL2EpKnUqYzoobj0oZT0oMStjL2EpKmkpLShlLWkpKT5zfHxuIT1uP2wqKDEvMCk6bCpufX0sMjE5MzI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5sb2c7dC5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6ZSgxK3QpfX0sNzc0MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9TWF0aC5zY2FsZXx8ZnVuY3Rpb24odCxlLG4scixvKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHQhPXR8fGUhPWV8fG4hPW58fHIhPXJ8fG8hPW8/TmFOOnQ9PT0xLzB8fHQ9PT0tMS8wP3Q6KHQtZSkqKG8tcikvKG4tZSkrcn19LDM4Nzg3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LDY1NTU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGksYSxjLHMsdSxsLGY9big4OTU1OCksZD1uKDk3MjU3KS5mLHA9bigyNDU5NCksaD1uKDIxNzQ0KS5zZXQsdj1uKDIxMjMxKSxnPWYuTXV0YXRpb25PYnNlcnZlcnx8Zi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHk9Zi5wcm9jZXNzLG09Zi5Qcm9taXNlLGI9InByb2Nlc3MiPT1wKHkpLHg9ZChmLCJxdWV1ZU1pY3JvdGFzayIpLHc9eCYmeC52YWx1ZTt3fHwocj1mdW5jdGlvbigpe3ZhciB0LGU7Zm9yKGImJih0PXkuZG9tYWluKSYmdC5leGl0KCk7bzspe2U9by5mbixvPW8ubmV4dDt0cnl7ZSgpfWNhdGNoKHQpe3Rocm93IG8/YSgpOmk9dm9pZCAwLHR9fWk9dm9pZCAwLHQmJnQuZW50ZXIoKX0sYj9hPWZ1bmN0aW9uKCl7eS5uZXh0VGljayhyKX06ZyYmIXY/KGM9ITAscz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksbmV3IGcocikub2JzZXJ2ZShzLHtjaGFyYWN0ZXJEYXRhOiEwfSksYT1mdW5jdGlvbigpe3MuZGF0YT1jPSFjfSk6bSYmbS5yZXNvbHZlPyh1PW0ucmVzb2x2ZSh2b2lkIDApLGw9dS50aGVuLGE9ZnVuY3Rpb24oKXtsLmNhbGwodSxyKX0pOmE9ZnVuY3Rpb24oKXtoLmNhbGwoZixyKX0pLHQuZXhwb3J0cz13fHxmdW5jdGlvbih0KXt2YXIgZT17Zm46dCxuZXh0OnZvaWQgMH07aSYmKGkubmV4dD1lKSxvfHwobz1lLGEoKSksaT1lfX0sMzk0NTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1yLlByb21pc2V9LDkwMTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFyKChmdW5jdGlvbigpe3JldHVybiFTdHJpbmcoU3ltYm9sKCkpfSkpfSw1NzU5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDIzNzI0KSxpPW4oNjU2NzIpLGE9bygiaXRlcmF0b3IiKTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVSTCgiYj9hPTEmYj0yJmM9MyIsImh0dHA6Ly9hIiksZT10LnNlYXJjaFBhcmFtcyxuPSIiO3JldHVybiB0LnBhdGhuYW1lPSJjJTIwZCIsZS5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2UuZGVsZXRlKCJiIiksbis9cit0fSkpLGkmJiF0LnRvSlNPTnx8IWUuc29ydHx8Imh0dHA6Ly9hL2MlMjBkP2E9MSZjPTMiIT09dC5ocmVmfHwiMyIhPT1lLmdldCgiYyIpfHwiYT0xIiE9PVN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCI/YT0xIikpfHwhZVthXXx8ImEiIT09bmV3IFVSTCgiaHR0cHM6Ly9hQGIiKS51c2VybmFtZXx8ImIiIT09bmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCJhPWIiKSkuZ2V0KCJhIil8fCJ4bi0tZTFheWJjIiE9PW5ldyBVUkwoImh0dHA6Ly/RgtC10YHRgiIpLmhvc3R8fCIjJUQwJUIxIiE9PW5ldyBVUkwoImh0dHA6Ly9hI9CxIikuaGFzaHx8ImExYzMiIT09bnx8IngiIT09bmV3IFVSTCgiaHR0cDovL3giLHZvaWQgMCkuaG9zdH0pKX0sMTk1OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big3Njc3MyksaT1yLldlYWtNYXA7dC5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBpJiYvbmF0aXZlIGNvZGUvLnRlc3QobyhpKSl9LDgzMDgzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1mdW5jdGlvbih0KXt2YXIgZSxuO3RoaXMucHJvbWlzZT1uZXcgdCgoZnVuY3Rpb24odCxyKXtpZih2b2lkIDAhPT1lfHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTtlPXQsbj1yfSkpLHRoaXMucmVzb2x2ZT1yKGUpLHRoaXMucmVqZWN0PXIobil9O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0KX19LDk5MzQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzMjIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYocih0KSl0aHJvdyBUeXBlRXJyb3IoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiB0fX0sODk1NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLmlzRmluaXRlO3QuZXhwb3J0cz1OdW1iZXIuaXNGaW5pdGV8fGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmcih0KX19LDc4Njg1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDMyMTg3KSxpPW4oMjU1MDcpLGE9big1Njk5MSksYz1uKDQxNjI4KSxzPW4oMTkyMDkpLHU9bigyNDk4KSxsPU9iamVjdC5hc3NpZ24sZj1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5leHBvcnRzPSFsfHxvKChmdW5jdGlvbigpe2lmKHImJjEhPT1sKHtiOjF9LGwoZih7fSwiYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7Zih0aGlzLCJiIix7dmFsdWU6MyxlbnVtZXJhYmxlOiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciB0PXt9LGU9e30sbj1TeW1ib2woKSxvPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHRbbl09NyxvLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPXR9KSksNyE9bCh7fSx0KVtuXXx8aShsKHt9LGUpKS5qb2luKCIiKSE9b30pKT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1zKHQpLG89YXJndW1lbnRzLmxlbmd0aCxsPTEsZj1hLmYsZD1jLmY7bz5sOylmb3IodmFyIHAsaD11KGFyZ3VtZW50c1tsKytdKSx2PWY/aShoKS5jb25jYXQoZihoKSk6aShoKSxnPXYubGVuZ3RoLHk9MDtnPnk7KXA9dlt5KytdLHImJiFkLmNhbGwoaCxwKXx8KG5bcF09aFtwXSk7cmV0dXJuIG59Omx9LDUwODY4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oODY0MDEpLGk9big1OTEzNSksYT1uKDIzMDcwKSxjPW4oNTE1NzEpLHM9bigxOTIzKSx1PW4oODMxOTcpKCJJRV9QUk9UTyIpLGw9ZnVuY3Rpb24oKXt9LGY9ZnVuY3Rpb24oKXt2YXIgdCxlPXMoImlmcmFtZSIpLG49aS5sZW5ndGg7Zm9yKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZChlKSxlLnNyYz1TdHJpbmcoImphdmFzY3JpcHQ6IiksKHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksdC53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSx0LmNsb3NlKCksZj10LkY7bi0tOylkZWxldGUgZi5wcm90b3R5cGVbaVtuXV07cmV0dXJuIGYoKX07dC5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhsLnByb3RvdHlwZT1yKHQpLG49bmV3IGwsbC5wcm90b3R5cGU9bnVsbCxuW3VdPXQpOm49ZigpLHZvaWQgMD09PWU/bjpvKG4sZSl9LGFbdV09ITB9LDg2NDAxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9big4NzU3OSksYT1uKDI1NTA3KTt0LmV4cG9ydHM9cj9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe2kodCk7Zm9yKHZhciBuLHI9YShlKSxjPXIubGVuZ3RoLHM9MDtjPnM7KW8uZih0LG49cltzKytdLGVbbl0pO3JldHVybiB0fX0sMzc2MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big2Mjc5OSksaT1uKDg3NTc5KSxhPW4oNTM0OTgpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yP2M6ZnVuY3Rpb24odCxlLG4pe2lmKGkodCksZT1hKGUsITApLGkobiksbyl0cnl7cmV0dXJuIGModCxlLG4pfWNhdGNoKHQpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9fSw5NzI1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDQxNjI4KSxpPW4oMTQyMDkpLGE9big5NTczKSxjPW4oNTM0OTgpLHM9big3NjI5OCksdT1uKDYyNzk5KSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPXI/bDpmdW5jdGlvbih0LGUpe2lmKHQ9YSh0KSxlPWMoZSwhMCksdSl0cnl7cmV0dXJuIGwodCxlKX1jYXRjaCh0KXt9aWYocyh0LGUpKXJldHVybiBpKCFvLmYuY2FsbCh0LGUpLHRbZV0pfX0sMjY5Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTU3Myksbz1uKDEzMzM0KS5mLGk9e30udG9TdHJpbmcsYT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBhJiYiW29iamVjdCBXaW5kb3ddIj09aS5jYWxsKHQpP2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gbyh0KX1jYXRjaCh0KXtyZXR1cm4gYS5zbGljZSgpfX0odCk6byhyKHQpKX19LDEzMzM0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQxNzYpLG89big1OTEzNSkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSw1Njk5MTpmdW5jdGlvbih0LGUpe2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSw2NDk2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDE5MjA5KSxpPW4oODMxOTcpLGE9big3MTYwOCksYz1pKCJJRV9QUk9UTyIpLHM9T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9YT9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9byh0KSxyKHQsYyk/dFtjXToiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD9zOm51bGx9fSw4NjQwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk4MjcpLG89big3MTIwMSksaT1uKDc2Mjk4KSxhPW4oMjU1MDcpLGM9bigxOTIwOSkscz0iT2JqZWN0IEl0ZXJhdG9yIix1PXIuc2V0LGw9ci5nZXR0ZXJGb3Iocyk7dC5leHBvcnRzPW8oKGZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0KTt1KHRoaXMse3R5cGU6cyxtb2RlOmUsb2JqZWN0Om4sa2V5czphKG4pLGluZGV4OjB9KX0pLCJPYmplY3QiLChmdW5jdGlvbigpe2Zvcih2YXIgdD1sKHRoaXMpLGU9dC5rZXlzOzspe2lmKG51bGw9PT1lfHx0LmluZGV4Pj1lLmxlbmd0aClyZXR1cm4gdC5vYmplY3Q9dC5rZXlzPW51bGwse3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt2YXIgbj1lW3QuaW5kZXgrK10scj10Lm9iamVjdDtpZihpKHIsbikpe3N3aXRjaCh0Lm1vZGUpe2Nhc2Uia2V5cyI6cmV0dXJue3ZhbHVlOm4sZG9uZTohMX07Y2FzZSJ2YWx1ZXMiOnJldHVybnt2YWx1ZTpyW25dLGRvbmU6ITF9fXJldHVybnt2YWx1ZTpbbixyW25dXSxkb25lOiExfX19fSkpfSw0MTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oOTU3MyksaT1uKDg1ODAzKS5pbmRleE9mLGE9bigyMzA3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sYz1vKHQpLHM9MCx1PVtdO2ZvcihuIGluIGMpIXIoYSxuKSYmcihjLG4pJiZ1LnB1c2gobik7Zm9yKDtlLmxlbmd0aD5zOylyKGMsbj1lW3MrK10pJiYofmkodSxuKXx8dS5wdXNoKG4pKTtyZXR1cm4gdX19LDI1NTA3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQxNzYpLG89big1OTEzNSk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sNDE2Mjg6ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dmFyIG49e30ucHJvcGVydHlJc0VudW1lcmFibGUscj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLG89ciYmIW4uY2FsbCh7MToyfSwxKTtlLmY9bz9mdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMsdCk7cmV0dXJuISFlJiZlLmVudW1lcmFibGV9Om59LDcxODQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNzk4NjEpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLG49e307dHJ5eyh0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KS5jYWxsKG4sW10pLGU9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKHQpe31yZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gcihuKSxvKGkpLGU/dC5jYWxsKG4saSk6bi5fX3Byb3RvX189aSxufX0oKTp2b2lkIDApfSwzNTY3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMjU1MDcpLGk9big5NTczKSxhPW4oNDE2MjgpLmYsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuLGM9aShlKSxzPW8oYyksdT1zLmxlbmd0aCxsPTAsZj1bXTt1Pmw7KW49c1tsKytdLHImJiFhLmNhbGwoYyxuKXx8Zi5wdXNoKHQ/W24sY1tuXV06Y1tuXSk7cmV0dXJuIGZ9fTt0LmV4cG9ydHM9e2VudHJpZXM6YyghMCksdmFsdWVzOmMoITEpfX0sMTk3NTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDkwNjEzKSxvPW4oNTk1OTEpO3QuZXhwb3J0cz1yP3t9LnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIitvKHRoaXMpKyJdIn19LDI0NDE1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpLG89bigxMzMzNCksaT1uKDU2OTkxKSxhPW4oODc1NzkpO3QuZXhwb3J0cz1yKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbih0KXt2YXIgZT1vLmYoYSh0KSksbj1pLmY7cmV0dXJuIG4/ZS5jb25jYXQobih0KSk6ZX19LDI0NDk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oODIzNTApLnRyaW0saT1uKDUwMDU1KSxhPXIucGFyc2VGbG9hdCxjPTEvYShpKyItMCIpIT0tMS8wO3QuZXhwb3J0cz1jP2Z1bmN0aW9uKHQpe3ZhciBlPW8oU3RyaW5nKHQpKSxuPWEoZSk7cmV0dXJuIDA9PT1uJiYiLSI9PWUuY2hhckF0KDApPy0wOm59OmF9LDc4NDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big4MjM1MCkudHJpbSxpPW4oNTAwNTUpLGE9ci5wYXJzZUludCxjPS9eWystXT8wW1h4XS8scz04IT09YShpKyIwOCIpfHwyMiE9PWEoaSsiMHgxNiIpO3QuZXhwb3J0cz1zP2Z1bmN0aW9uKHQsZSl7dmFyIG49byhTdHJpbmcodCkpO3JldHVybiBhKG4sZT4+PjB8fChjLnRlc3Qobik/MTY6MTApKX06YX0sNTYyMzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1yfSwzMTE1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOnQoKX19Y2F0Y2godCl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOnR9fX19LDYzMTM0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oMTA1OTIpLGk9big4MzA4Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocih0KSxvKGUpJiZlLmNvbnN0cnVjdG9yPT09dClyZXR1cm4gZTt2YXIgbj1pLmYodCk7cmV0dXJuKDAsbi5yZXNvbHZlKShlKSxuLnByb21pc2V9fSw2OTkyNzpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9MjE0NzQ4MzY0NyxuPS9bXlwwLVx1MDA3RV0vLHI9L1suXHUzMDAyXHVGRjBFXHVGRjYxXS9nLG89Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIixpPU1hdGguZmxvb3IsYT1TdHJpbmcuZnJvbUNoYXJDb2RlLGM9ZnVuY3Rpb24odCl7cmV0dXJuIHQrMjIrNzUqKHQ8MjYpfSxzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0wO2Zvcih0PW4/aSh0LzcwMCk6dD4+MSx0Kz1pKHQvZSk7dD40NTU7cis9MzYpdD1pKHQvMzUpO3JldHVybiBpKHIrMzYqdC8odCszOCkpfSx1PWZ1bmN0aW9uKHQpe3ZhciBuPVtdO3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MCxyPXQubGVuZ3RoO248cjspe3ZhciBvPXQuY2hhckNvZGVBdChuKyspO2lmKG8+PTU1Mjk2JiZvPD01NjMxOSYmbjxyKXt2YXIgaT10LmNoYXJDb2RlQXQobisrKTs1NjMyMD09KDY0NTEyJmkpP2UucHVzaCgoKDEwMjMmbyk8PDEwKSsoMTAyMyZpKSs2NTUzNik6KGUucHVzaChvKSxuLS0pfWVsc2UgZS5wdXNoKG8pfXJldHVybiBlfSh0KTt2YXIgcix1LGw9dC5sZW5ndGgsZj0xMjgsZD0wLHA9NzI7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykodT10W3JdKTwxMjgmJm4ucHVzaChhKHUpKTt2YXIgaD1uLmxlbmd0aCx2PWg7Zm9yKGgmJm4ucHVzaCgiLSIpO3Y8bDspe3ZhciBnPWU7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykodT10W3JdKT49ZiYmdTxnJiYoZz11KTt2YXIgeT12KzE7aWYoZy1mPmkoKGUtZCkveSkpdGhyb3cgUmFuZ2VFcnJvcihvKTtmb3IoZCs9KGctZikqeSxmPWcscj0wO3I8dC5sZW5ndGg7cisrKXtpZigodT10W3JdKTxmJiYrK2Q+ZSl0aHJvdyBSYW5nZUVycm9yKG8pO2lmKHU9PWYpe2Zvcih2YXIgbT1kLGI9MzY7O2IrPTM2KXt2YXIgeD1iPD1wPzE6Yj49cCsyNj8yNjpiLXA7aWYobTx4KWJyZWFrO3ZhciB3PW0teCxFPTM2LXg7bi5wdXNoKGEoYyh4K3clRSkpKSxtPWkody9FKX1uLnB1c2goYShjKG0pKSkscD1zKGQseSx2PT1oKSxkPTAsKyt2fX0rK2QsKytmfXJldHVybiBuLmpvaW4oIiIpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbyxpPVtdLGE9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UociwiLiIpLnNwbGl0KCIuIik7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylvPWFbZV0saS5wdXNoKG4udGVzdChvKT8ieG4tLSIrdShvKTpvKTtyZXR1cm4gaS5qb2luKCIuIil9fSwxOTI2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyOTEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgbyBpbiBlKXIodCxvLGVbb10sbik7cmV0dXJuIHR9fSw5MjkxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDY2OTcxKSxpPW4oNzYyOTgpLGE9big5ODI2OSksYz1uKDc2NzczKSxzPW4oODk4MjcpLHU9cy5nZXQsbD1zLmVuZm9yY2UsZj1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIik7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixjKXt2YXIgcz0hIWMmJiEhYy51bnNhZmUsdT0hIWMmJiEhYy5lbnVtZXJhYmxlLGQ9ISFjJiYhIWMubm9UYXJnZXRHZXQ7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJigic3RyaW5nIiE9dHlwZW9mIGV8fGkobiwibmFtZSIpfHxvKG4sIm5hbWUiLGUpLGwobikuc291cmNlPWYuam9pbigic3RyaW5nIj09dHlwZW9mIGU/ZToiIikpLHQhPT1yPyhzPyFkJiZ0W2VdJiYodT0hMCk6ZGVsZXRlIHRbZV0sdT90W2VdPW46byh0LGUsbikpOnU/dFtlXT1uOmEoZSxuKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ1KHRoaXMpLnNvdXJjZXx8Yyh0aGlzKX0pKX0sNzcwMjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQ5MDYpLG89big1ODYwNiksaT1uKDYyMDU0KSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyBvKSxjPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1hLmdldCh0KTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KHQsbz1uZXcgcil9dmFyIGk9by5nZXQoZSk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldChlLGk9bmV3IHIpfXJldHVybiBpfTt0LmV4cG9ydHM9e3N0b3JlOmEsZ2V0TWFwOmMsaGFzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jKGUsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKHQpfSxnZXQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMoZSxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCl9LHNldDpmdW5jdGlvbih0LGUsbixyKXtjKG4sciwhMCkuc2V0KHQsZSl9LGtleXM6ZnVuY3Rpb24odCxlKXt2YXIgbj1jKHQsZSwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3IucHVzaChlKX0pKSxyfSx0b0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dHx8InN5bWJvbCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfX19LDM1NDU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KSxvPW4oMzg1OTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIGk9bi5jYWxsKHQsZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBpKXRocm93IFR5cGVFcnJvcigiUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsIik7cmV0dXJuIGl9aWYoIlJlZ0V4cCIhPT1yKHQpKXRocm93IFR5cGVFcnJvcigiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlciIpO3JldHVybiBvLmNhbGwodCxlKX19LDM4NTk4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpPW4oMjU0MTkpLGE9UmVnRXhwLnByb3RvdHlwZS5leGVjLGM9U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLHM9YSx1PShyPS9hLyxvPS9iKi9nLGEuY2FsbChyLCJhIiksYS5jYWxsKG8sImEiKSwwIT09ci5sYXN0SW5kZXh8fDAhPT1vLmxhc3RJbmRleCksbD12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KHV8fGwpJiYocz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxzPXRoaXM7cmV0dXJuIGwmJihuPW5ldyBSZWdFeHAoIl4iK3Muc291cmNlKyIkKD8hXFxzKSIsaS5jYWxsKHMpKSksdSYmKGU9cy5sYXN0SW5kZXgpLHI9YS5jYWxsKHMsdCksdSYmciYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP3IuaW5kZXgrclswXS5sZW5ndGg6ZSksbCYmciYmci5sZW5ndGg+MSYmYy5jYWxsKHJbMF0sbiwoZnVuY3Rpb24oKXtmb3Iobz0xO288YXJndW1lbnRzLmxlbmd0aC0yO28rKyl2b2lkIDA9PT1hcmd1bWVudHNbb10mJihyW29dPXZvaWQgMCl9KSkscn0pLHQuZXhwb3J0cz1zfSwyNTQxOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PXIodGhpcyksZT0iIjtyZXR1cm4gdC5nbG9iYWwmJihlKz0iZyIpLHQuaWdub3JlQ2FzZSYmKGUrPSJpIiksdC5tdWx0aWxpbmUmJihlKz0ibSIpLHQuZG90QWxsJiYoZSs9InMiKSx0LnVuaWNvZGUmJihlKz0idSIpLHQuc3RpY2t5JiYoZSs9InkiKSxlfX0sNzAxMzI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK3QpO3JldHVybiB0fX0sMzgxODk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfX0sNzY0ODI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWU/MCE9PXR8fDEvdD09MS9lOnQhPXQmJmUhPWV9fSw5ODI2OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDY2OTcxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7byhyLHQsZSl9Y2F0Y2gobil7clt0XT1lfXJldHVybiBlfX0sNjc1Mzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDc3MDEpLG89bigzNzYyMCksaT1uKDIzNzI0KSxhPW4oNjI1NTYpLGM9aSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQpLG49by5mO2EmJmUmJiFlW2NdJiZuKGUsYyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sNTExMjg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzc2MjApLmYsbz1uKDc2Mjk4KSxpPW4oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dCYmIW8odD1uP3Q6dC5wcm90b3R5cGUsaSkmJnIodCxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pfX0sODMxOTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjIwNTQpLG89big2NzI5KSxpPXIoImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlbdF18fChpW3RdPW8odCkpfX0sMzQ3NDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big5ODI2OSksaT0iX19jb3JlLWpzX3NoYXJlZF9fIixhPXJbaV18fG8oaSx7fSk7dC5leHBvcnRzPWF9LDYyMDU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzQ3NDEpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gb1t0XXx8KG9bdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuNS4wIixtb2RlOnI/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sMjI5MDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXVt0XTtyZXR1cm4hbnx8IXIoKGZ1bmN0aW9uKCl7bi5jYWxsKG51bGwsZXx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pKX19LDEzOTc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApLGk9bigyMzcyNCkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixhPXIodCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWF8fG51bGw9PShuPXIoYSlbaV0pP2U6byhuKX19LDYwMTQwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPW4oNzAxMzIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGksYSxjPVN0cmluZyhvKGUpKSxzPXIobiksdT1jLmxlbmd0aDtyZXR1cm4gczwwfHxzPj11P3Q/IiI6dm9pZCAwOihpPWMuY2hhckNvZGVBdChzKSk8NTUyOTZ8fGk+NTYzMTl8fHMrMT09PXV8fChhPWMuY2hhckNvZGVBdChzKzEpKTw1NjMyMHx8YT41NzM0Mz90P2MuY2hhckF0KHMpOmk6dD9jLnNsaWNlKHMscysyKTphLTU2MzIwKyhpLTU1Mjk2PDwxMCkrNjU1MzZ9fTt0LmV4cG9ydHM9e2NvZGVBdDppKCExKSxjaGFyQXQ6aSghMCl9fSwyNjU3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzg4NCksbz1uKDY4MjUzKSxpPW4oNzAxMzIpLGE9TWF0aC5jZWlsLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjKXt2YXIgcyx1LGw9U3RyaW5nKGkoZSkpLGY9bC5sZW5ndGgsZD12b2lkIDA9PT1jPyIgIjpTdHJpbmcoYykscD1yKG4pO3JldHVybiBwPD1mfHwiIj09ZD9sOihzPXAtZiwodT1vLmNhbGwoZCxhKHMvZC5sZW5ndGgpKSkubGVuZ3RoPnMmJih1PXUuc2xpY2UoMCxzKSksdD9sK3U6dStsKX19O3QuZXhwb3J0cz17c3RhcnQ6YyghMSksZW5kOmMoITApfX0sNjgyNTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQzNDE2KSxvPW4oNzAxMzIpO3QuZXhwb3J0cz0iIi5yZXBlYXR8fGZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhvKHRoaXMpKSxuPSIiLGk9cih0KTtpZihpPDB8fGk9PTEvMCl0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKGUrPWUpKTEmaSYmKG4rPWUpO3JldHVybiBufX0sODIzNTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpLG89IlsiK24oNTAwNTUpKyJdIixpPVJlZ0V4cCgiXiIrbytvKyIqIiksYT1SZWdFeHAobytvKyIqJCIpLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPVN0cmluZyhyKGUpKTtyZXR1cm4gMSZ0JiYobj1uLnJlcGxhY2UoaSwiIikpLDImdCYmKG49bi5yZXBsYWNlKGEsIiIpKSxufX07dC5leHBvcnRzPXtzdGFydDpjKDEpLGVuZDpjKDIpLHRyaW06YygzKX19LDIxNzQ0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGksYT1uKDg5NTU4KSxjPW4oMzIxODcpLHM9bigyNDU5NCksdT1uKDQ2MTMwKSxsPW4oNTE1NzEpLGY9bigxOTIzKSxkPW4oMjEyMzEpLHA9YS5sb2NhdGlvbixoPWEuc2V0SW1tZWRpYXRlLHY9YS5jbGVhckltbWVkaWF0ZSxnPWEucHJvY2Vzcyx5PWEuTWVzc2FnZUNoYW5uZWwsbT1hLkRpc3BhdGNoLGI9MCx4PXt9LHc9Im9ucmVhZHlzdGF0ZWNoYW5nZSIsRT1mdW5jdGlvbih0KXtpZih4Lmhhc093blByb3BlcnR5KHQpKXt2YXIgZT14W3RdO2RlbGV0ZSB4W3RdLGUoKX19LGo9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7RSh0KX19LEM9ZnVuY3Rpb24odCl7RSh0LmRhdGEpfSxrPWZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2UodCsiIixwLnByb3RvY29sKyIvLyIrcC5ob3N0KX07aCYmdnx8KGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTthcmd1bWVudHMubGVuZ3RoPm47KWUucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJuIHhbKytiXT1mdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgdD90OkZ1bmN0aW9uKHQpKS5hcHBseSh2b2lkIDAsZSl9LHIoYiksYn0sdj1mdW5jdGlvbih0KXtkZWxldGUgeFt0XX0sInByb2Nlc3MiPT1zKGcpP3I9ZnVuY3Rpb24odCl7Zy5uZXh0VGljayhqKHQpKX06bSYmbS5ub3c/cj1mdW5jdGlvbih0KXttLm5vdyhqKHQpKX06eSYmIWQ/KGk9KG89bmV3IHkpLnBvcnQyLG8ucG9ydDEub25tZXNzYWdlPUMscj11KGkucG9zdE1lc3NhZ2UsaSwxKSk6IWEuYWRkRXZlbnRMaXN0ZW5lcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHBvc3RNZXNzYWdlfHxhLmltcG9ydFNjcmlwdHN8fGMoayk/cj13IGluIGYoInNjcmlwdCIpP2Z1bmN0aW9uKHQpe2wuYXBwZW5kQ2hpbGQoZigic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcyksRSh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoaih0KSwwKX06KHI9ayxhLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEMsITEpKSksdC5leHBvcnRzPXtzZXQ6aCxjbGVhcjp2fX0sNTM5OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJiJOdW1iZXIiIT1yKHQpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGludm9jYXRpb24iKTtyZXR1cm4rdH19LDc2OTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPU1hdGgubWF4LGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0KTtyZXR1cm4gbjwwP28obitlLDApOmkobixlKX19LDgzOTE0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPW4oMjc4ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXJldHVybiAwO3ZhciBlPXIodCksbj1vKGUpO2lmKGUhPT1uKXRocm93IFJhbmdlRXJyb3IoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiBufX0sOTU3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDk4KSxvPW4oNzAxMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcihvKHQpKX19LDQzNDE2OmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY2VpbCxuPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/bjplKSh0KX19LDI3ODg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28ocih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sMTkyMDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIodCkpfX0sNjA1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDU2ODApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodCk7aWYobiVlKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG9mZnNldCIpO3JldHVybiBufX0sNDU2ODA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQpO2lmKGU8MCl0aHJvdyBSYW5nZUVycm9yKCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDAiKTtyZXR1cm4gZX19LDUzNDk4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighcih0KSlyZXR1cm4gdDt2YXIgbixvO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49dC52YWx1ZU9mKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO2lmKCFlJiYiZnVuY3Rpb24iPT10eXBlb2Yobj10LnRvU3RyaW5nKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw5MDYxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9e307cltuKDIzNzI0KSgidG9TdHJpbmdUYWciKV09InoiLHQuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcocil9LDkzMDE3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjI1NTYpLGE9bigzNTYyNyksYz1uKDczMDc0KSxzPW4oODI4MzUpLHU9big1OTM3OSksbD1uKDE0MjA5KSxmPW4oNjY5NzEpLGQ9bigyNzg4NCkscD1uKDgzOTE0KSxoPW4oNjA1NTgpLHY9big1MzQ5OCksZz1uKDc2Mjk4KSx5PW4oNTk1OTEpLG09bigxMDU5MiksYj1uKDUwODY4KSx4PW4oNzE4NDIpLHc9bigxMzMzNCkuZixFPW4oMjA0NTUpLGo9bigzMDAyNSkuZm9yRWFjaCxDPW4oNjc1MzgpLGs9bigzNzYyMCksUz1uKDk3MjU3KSxPPW4oODk4MjcpLEE9bigzMDI3MiksST1PLmdldCxNPU8uc2V0LFQ9ay5mLF89Uy5mLEw9TWF0aC5yb3VuZCxSPW8uUmFuZ2VFcnJvcixQPXMuQXJyYXlCdWZmZXIsTj1zLkRhdGFWaWV3LEQ9Yy5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLEY9Yy5UWVBFRF9BUlJBWV9UQUcsVT1jLlR5cGVkQXJyYXksQj1jLlR5cGVkQXJyYXlQcm90b3R5cGUsej1jLmFUeXBlZEFycmF5Q29uc3RydWN0b3IsSD1jLmlzVHlwZWRBcnJheSxWPSJCWVRFU19QRVJfRUxFTUVOVCIscT0iV3JvbmcgbGVuZ3RoIixXPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aCxvPW5ldyh6KHQpKShyKTtyPm47KW9bbl09ZVtuKytdO3JldHVybiBvfSxHPWZ1bmN0aW9uKHQsZSl7VCh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiBJKHRoaXMpW2VdfX0pfSxaPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0IGluc3RhbmNlb2YgUHx8IkFycmF5QnVmZmVyIj09KGU9eSh0KSl8fCJTaGFyZWRBcnJheUJ1ZmZlciI9PWV9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSCh0KSYmInN5bWJvbCIhPXR5cGVvZiBlJiZlIGluIHQmJlN0cmluZygrZSk9PVN0cmluZyhlKX0sWT1mdW5jdGlvbih0LGUpe3JldHVybiAkKHQsZT12KGUsITApKT9sKDIsdFtlXSk6Xyh0LGUpfSxKPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hKCQodCxlPXYoZSwhMCkpJiZtKG4pJiZnKG4sInZhbHVlIikpfHxnKG4sImdldCIpfHxnKG4sInNldCIpfHxuLmNvbmZpZ3VyYWJsZXx8ZyhuLCJ3cml0YWJsZSIpJiYhbi53cml0YWJsZXx8ZyhuLCJlbnVtZXJhYmxlIikmJiFuLmVudW1lcmFibGU/VCh0LGUsbik6KHRbZV09bi52YWx1ZSx0KX07aT8oRHx8KFMuZj1ZLGsuZj1KLEcoQiwiYnVmZmVyIiksRyhCLCJieXRlT2Zmc2V0IiksRyhCLCJieXRlTGVuZ3RoIiksRyhCLCJsZW5ndGgiKSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFEfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlksZGVmaW5lUHJvcGVydHk6Sn0pLHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5tYXRjaCgvXGQrJC8pWzBdLzgsYz10KyhuPyJDbGFtcGVkIjoiIikrIkFycmF5IixzPSJnZXQiK3QsbD0ic2V0Iit0LHY9b1tjXSxnPXYseT1nJiZnLnByb3RvdHlwZSxrPXt9LFM9ZnVuY3Rpb24odCxlKXtUKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49SSh0KTtyZXR1cm4gbi52aWV3W3NdKGUqaStuLmJ5dGVPZmZzZXQsITApfSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1JKHQpO24mJihyPShyPUwocikpPDA/MDpyPjI1NT8yNTU6MjU1JnIpLG8udmlld1tsXShlKmkrby5ieXRlT2Zmc2V0LHIsITApfSh0aGlzLGUsdCl9LGVudW1lcmFibGU6ITB9KX07RD9hJiYoZz1lKChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdSh0LGcsYyksQShtKGUpP1ooZSk/dm9pZCAwIT09cj9uZXcgdihlLGgobixpKSxyKTp2b2lkIDAhPT1uP25ldyB2KGUsaChuLGkpKTpuZXcgdihlKTpIKGUpP1coZyxlKTpFLmNhbGwoZyxlKTpuZXcgdihwKGUpKSx0LGcpfSkpLHgmJngoZyxVKSxqKHcodiksKGZ1bmN0aW9uKHQpe3QgaW4gZ3x8ZihnLHQsdlt0XSl9KSksZy5wcm90b3R5cGU9eSk6KGc9ZSgoZnVuY3Rpb24odCxlLG4scil7dSh0LGcsYyk7dmFyIG8sYSxzLGw9MCxmPTA7aWYobShlKSl7aWYoIVooZSkpcmV0dXJuIEgoZSk/VyhnLGUpOkUuY2FsbChnLGUpO289ZSxmPWgobixpKTt2YXIgdj1lLmJ5dGVMZW5ndGg7aWYodm9pZCAwPT09cil7aWYodiVpKXRocm93IFIocSk7aWYoKGE9di1mKTwwKXRocm93IFIocSl9ZWxzZSBpZigoYT1kKHIpKmkpK2Y+dil0aHJvdyBSKHEpO3M9YS9pfWVsc2Ugcz1wKGUpLG89bmV3IFAoYT1zKmkpO2ZvcihNKHQse2J1ZmZlcjpvLGJ5dGVPZmZzZXQ6ZixieXRlTGVuZ3RoOmEsbGVuZ3RoOnMsdmlldzpuZXcgTihvKX0pO2w8czspUyh0LGwrKyl9KSkseCYmeChnLFUpLHk9Zy5wcm90b3R5cGU9YihCKSkseS5jb25zdHJ1Y3RvciE9PWcmJmYoeSwiY29uc3RydWN0b3IiLGcpLEYmJmYoeSxGLGMpLGtbY109ZyxyKHtnbG9iYWw6ITAsZm9yY2VkOmchPXYsc2hhbTohRH0sayksViBpbiBnfHxmKGcsVixpKSxWIGluIHl8fGYoeSxWLGkpLEMoYyl9KTp0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSwyMDQ1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxOTIwOSksbz1uKDI3ODg0KSxpPW4oNzM4OTApLGE9big0NDk4NCksYz1uKDQ2MTMwKSxzPW4oNzMwNzQpLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sdSxsLGYsZCxwPXIodCksaD1hcmd1bWVudHMubGVuZ3RoLHY9aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZz12b2lkIDAhPT12LHk9aShwKTtpZihudWxsIT15JiYhYSh5KSlmb3IoZD0oZj15LmNhbGwocCkpLm5leHQscD1bXTshKGw9ZC5jYWxsKGYpKS5kb25lOylwLnB1c2gobC52YWx1ZSk7Zm9yKGcmJmg+MiYmKHY9Yyh2LGFyZ3VtZW50c1syXSwyKSksbj1vKHAubGVuZ3RoKSx1PW5ldyhzKHRoaXMpKShuKSxlPTA7bj5lO2UrKyl1W2VdPWc/dihwW2VdLGUpOnBbZV07cmV0dXJuIHV9fSwzNTYyNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDMyMTg3KSxpPW4oNDc5NiksYT1uKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLGM9ci5BcnJheUJ1ZmZlcixzPXIuSW50OEFycmF5O3QuZXhwb3J0cz0hYXx8IW8oKGZ1bmN0aW9uKCl7cygxKX0pKXx8IW8oKGZ1bmN0aW9uKCl7bmV3IHMoLTEpfSkpfHwhaSgoZnVuY3Rpb24odCl7bmV3IHMsbmV3IHMobnVsbCksbmV3IHMoMS41KSxuZXcgcyh0KX0pLCEwKXx8bygoZnVuY3Rpb24oKXtyZXR1cm4gMSE9PW5ldyBzKG5ldyBjKDIpLDEsdm9pZCAwKS5sZW5ndGh9KSl9LDY3Mjk6ZnVuY3Rpb24odCl7dmFyIGU9MCxuPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJTeW1ib2woIitTdHJpbmcodm9pZCAwPT09dD8iIjp0KSsiKV8iKygrK2UrbikudG9TdHJpbmcoMzYpfX0sMTY0MTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTAxNCk7dC5leHBvcnRzPXImJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woKX0sMzk0NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSk7dC5leHBvcnRzPXIoIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sNzkwNzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1uKDg5NTU4KSxhPW4oMzk0NzYpLGM9aS5wcm9jZXNzLHM9YyYmYy52ZXJzaW9ucyx1PXMmJnMudjg7dT9vPShyPXUuc3BsaXQoIi4iKSlbMF0rclsxXTphJiYoIShyPWEubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxyWzFdPj03NCkmJihyPWEubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihvPXJbMV0pLHQuZXhwb3J0cz1vJiYrb30sNDIxODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzk0NzYpO3QuZXhwb3J0cz0vVmVyc2lvblwvMTBcLlxkKyhcLlxkKyk/KCBNb2JpbGVcL1x3Kyk/IFNhZmFyaVwvLy50ZXN0KHIpfSwyMzcyNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDYyMDU0KSxpPW4oNzYyOTgpLGE9big2NzI5KSxjPW4oOTAxNCkscz1uKDE2NDEwKSx1PW8oIndrcyIpLGw9ci5TeW1ib2wsZj1zP2w6YTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodSx0KXx8KGMmJmkobCx0KT91W3RdPWxbdF06dVt0XT1mKCJTeW1ib2wuIit0KSksdVt0XX19LDUwMDU1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz0iXHRcblx2XGZcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDczOTE2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KTtlLmY9cn0sNjEyNDU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big4MjgzNSksYT1uKDY3NTM4KSxjPSJBcnJheUJ1ZmZlciIscz1pLkFycmF5QnVmZmVyO3Ioe2dsb2JhbDohMCxmb3JjZWQ6by5BcnJheUJ1ZmZlciE9PXN9LHtBcnJheUJ1ZmZlcjpzfSksYShjKX0sMjkyNzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3MzA3NCk7cih7dGFyZ2V0OiJBcnJheUJ1ZmZlciIsc3RhdDohMCxmb3JjZWQ6IW8uTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXU30se2lzVmlldzpvLmlzVmlld30pfSw5MDU2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDgyODM1KSxhPW4oODc1NzkpLGM9big3Njk3Nikscz1uKDI3ODg0KSx1PW4oMTM5NzkpLGw9aS5BcnJheUJ1ZmZlcixmPWkuRGF0YVZpZXcsZD1sLnByb3RvdHlwZS5zbGljZTtyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixwcm90bzohMCx1bnNhZmU6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIW5ldyBsKDIpLnNsaWNlKDEsdm9pZCAwKS5ieXRlTGVuZ3RofSkpfSx7c2xpY2U6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1kJiZ2b2lkIDA9PT1lKXJldHVybiBkLmNhbGwoYSh0aGlzKSx0KTtmb3IodmFyIG49YSh0aGlzKS5ieXRlTGVuZ3RoLHI9Yyh0LG4pLG89Yyh2b2lkIDA9PT1lP246ZSxuKSxpPW5ldyh1KHRoaXMsbCkpKHMoby1yKSkscD1uZXcgZih0aGlzKSxoPW5ldyBmKGkpLHY9MDtyPG87KWguc2V0VWludDgodisrLHAuZ2V0VWludDgocisrKSk7cmV0dXJuIGl9fSl9LDU3Mzg3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNjE5OSksYT1uKDEwNTkyKSxjPW4oMTkyMDkpLHM9bigyNzg4NCksdT1uKDU4ODEwKSxsPW4oNzAwOSksZj1uKDYxOTYzKSxkPW4oMjM3MjQpLHA9big3OTA3MSksaD1kKCJpc0NvbmNhdFNwcmVhZGFibGUiKSx2PTkwMDcxOTkyNTQ3NDA5OTEsZz0iTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIix5PXA+PTUxfHwhbygoZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdFtoXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxtPWYoImNvbmNhdCIpLGI9ZnVuY3Rpb24odCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIGU9dFtoXTtyZXR1cm4gdm9pZCAwIT09ZT8hIWU6aSh0KX07cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiF5fHwhbX0se2NvbmNhdDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGE9Yyh0aGlzKSxmPWwoYSwwKSxkPTA7Zm9yKGU9LTEscj1hcmd1bWVudHMubGVuZ3RoO2U8cjtlKyspaWYoYihpPS0xPT09ZT9hOmFyZ3VtZW50c1tlXSkpe2lmKGQrKG89cyhpLmxlbmd0aCkpPnYpdGhyb3cgVHlwZUVycm9yKGcpO2ZvcihuPTA7bjxvO24rKyxkKyspbiBpbiBpJiZ1KGYsZCxpW25dKX1lbHNle2lmKGQ+PXYpdGhyb3cgVHlwZUVycm9yKGcpO3UoZixkKyssaSl9cmV0dXJuIGYubGVuZ3RoPWQsZn19KX0sMzA4MTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big5OTQzMSksaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2NvcHlXaXRoaW46b30pLGkoImNvcHlXaXRoaW4iKX0sNTIwNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmV2ZXJ5O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgiZXZlcnkiKX0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDczMzYwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU4OTUpLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmaWxsOm99KSxpKCJmaWxsIil9LDQ3NTAyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5maWx0ZXIsaT1uKDMyMTg3KSxhPW4oNjE5NjMpKCJmaWx0ZXIiKSxjPWEmJiFpKChmdW5jdGlvbigpe1tdLmZpbHRlci5jYWxsKHtsZW5ndGg6LTEsMDoxfSwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKX0pKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWF8fCFjfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDkwOTEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5maW5kSW5kZXgsaT1uKDc2NTEzKSxhPSJmaW5kSW5kZXgiLGM9ITA7YSBpbltdJiZBcnJheSgxKS5maW5kSW5kZXgoKGZ1bmN0aW9uKCl7Yz0hMX0pKSxyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y30se2ZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoYSl9LDMzMTk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5maW5kLGk9big3NjUxMyksYT0iZmluZCIsYz0hMDthIGluW10mJkFycmF5KDEpLmZpbmQoKGZ1bmN0aW9uKCl7Yz0hMX0pKSxyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y30se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKGEpfSw3OTIyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MDY2NSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big4NjQ3MCkscz1uKDcwMDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXt2YXIgZSxuPWkodGhpcykscj1hKG4ubGVuZ3RoKTtyZXR1cm4gYyh0KSwoZT1zKG4sMCkpLmxlbmd0aD1vKGUsbixuLHIsMCwxLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLGV9fSl9LDI4MjAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgwNjY1KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDQzNDE2KSxzPW4oNzAwOSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLGU9aSh0aGlzKSxuPWEoZS5sZW5ndGgpLHI9cyhlLDApO3JldHVybiByLmxlbmd0aD1vKHIsZSxlLG4sMCx2b2lkIDA9PT10PzE6Yyh0KSkscn19KX0sNDM1OTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNjgpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpbXS5mb3JFYWNoIT1vfSx7Zm9yRWFjaDpvfSl9LDc0NTM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODUxNjYpO3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITAsZm9yY2VkOiFuKDQ3OTYpKChmdW5jdGlvbih0KXtBcnJheS5mcm9tKHQpfSkpfSx7ZnJvbTpvfSl9LDIyMjc3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg1ODAzKS5pbmNsdWRlcyxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKCJpbmNsdWRlcyIpfSwyNDEyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NTgwMykuaW5kZXhPZixpPW4oMjI5MDkpLGE9W10uaW5kZXhPZixjPSEhYSYmMS9bMV0uaW5kZXhPZigxLC0wKTwwLHM9aSgiaW5kZXhPZiIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfHxzfSx7aW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gYz9hLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDpvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDIxMjc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwfSx7aXNBcnJheTpuKDYxOTkpfSl9LDUwMDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5NTczKSxvPW4oNzY1MTMpLGk9bigxMjM1KSxhPW4oODk4MjcpLGM9big0NjA2MSkscz0iQXJyYXkgSXRlcmF0b3IiLHU9YS5zZXQsbD1hLmdldHRlckZvcihzKTt0LmV4cG9ydHM9YyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3UodGhpcyx7dHlwZTpzLHRhcmdldDpyKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMpLGU9dC50YXJnZXQsbj10LmtpbmQscj10LmluZGV4Kys7cmV0dXJuIWV8fHI+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6ImtleXMiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OiJ2YWx1ZXMiPT1uP3t2YWx1ZTplW3JdLGRvbmU6ITF9Ont2YWx1ZTpbcixlW3JdXSxkb25lOiExfX0pLCJ2YWx1ZXMiKSxpLkFyZ3VtZW50cz1pLkFycmF5LG8oImtleXMiKSxvKCJ2YWx1ZXMiKSxvKCJlbnRyaWVzIil9LDc0MTIwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI0OTgpLGk9big5NTczKSxhPW4oMjI5MDkpLGM9W10uam9pbixzPW8hPU9iamVjdCx1PWEoImpvaW4iLCIsIik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOnN8fHV9LHtqb2luOmZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwoaSh0aGlzKSx2b2lkIDA9PT10PyIsIjp0KX19KX0sOTQ5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big0OTI0OSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm8hPT1bXS5sYXN0SW5kZXhPZn0se2xhc3RJbmRleE9mOm99KX0sMjczODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLm1hcCxpPW4oMzIxODcpLGE9big2MTk2MykoIm1hcCIpLGM9YSYmIWkoKGZ1bmN0aW9uKCl7W10ubWFwLmNhbGwoe2xlbmd0aDotMSwwOjF9LChmdW5jdGlvbih0KXt0aHJvdyB0fSkpfSkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohYXx8IWN9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjk5ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big1ODgxMCk7cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoQXJyYXkub2YuY2FsbCh0KWluc3RhbmNlb2YgdCl9KSl9LHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5KShlKTtlPnQ7KWkobix0LGFyZ3VtZW50c1t0KytdKTtyZXR1cm4gbi5sZW5ndGg9ZSxufX0pfSw0NTUyODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigxMjM2NikucmlnaHQ7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJyZWR1Y2VSaWdodCIpfSx7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDUyMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigxMjM2NikubGVmdDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInJlZHVjZSIpfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODAxMTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjE5OSksaT1bXS5yZXZlcnNlLGE9WzEsMl07cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOlN0cmluZyhhKT09PVN0cmluZyhhLnJldmVyc2UoKSl9LHtyZXZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcykmJih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aCksaS5jYWxsKHRoaXMpfX0pfSwyOTExMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDYxOTkpLGE9big3Njk3NiksYz1uKDI3ODg0KSxzPW4oOTU3MyksdT1uKDU4ODEwKSxsPW4oNjE5NjMpLGY9bigyMzcyNCkoInNwZWNpZXMiKSxkPVtdLnNsaWNlLHA9TWF0aC5tYXg7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFsKCJzbGljZSIpfSx7c2xpY2U6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGwsaD1zKHRoaXMpLHY9YyhoLmxlbmd0aCksZz1hKHQsdikseT1hKHZvaWQgMD09PWU/djplLHYpO2lmKGkoaCkmJigiZnVuY3Rpb24iIT10eXBlb2Yobj1oLmNvbnN0cnVjdG9yKXx8biE9PUFycmF5JiYhaShuLnByb3RvdHlwZSk/byhuKSYmbnVsbD09PShuPW5bZl0pJiYobj12b2lkIDApOm49dm9pZCAwLG49PT1BcnJheXx8dm9pZCAwPT09bikpcmV0dXJuIGQuY2FsbChoLGcseSk7Zm9yKHI9bmV3KHZvaWQgMD09PW4/QXJyYXk6bikocCh5LWcsMCkpLGw9MDtnPHk7ZysrLGwrKylnIGluIGgmJnUocixsLGhbZ10pO3JldHVybiByLmxlbmd0aD1sLHJ9fSl9LDg1NTk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5zb21lO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgic29tZSIpfSx7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2NzgxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDE5MjA5KSxhPW4oMzIxODcpLGM9bigyMjkwOSkscz1bXSx1PXMuc29ydCxsPWEoKGZ1bmN0aW9uKCl7cy5zb3J0KHZvaWQgMCl9KSksZj1hKChmdW5jdGlvbigpe3Muc29ydChudWxsKX0pKSxkPWMoInNvcnQiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bHx8IWZ8fGR9LHtzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3UuY2FsbChpKHRoaXMpKTp1LmNhbGwoaSh0aGlzKSxvKHQpKX19KX0sODYyMTQ6ZnVuY3Rpb24odCxlLG4pe24oNjc1MzgpKCJBcnJheSIpfSwzMzc5MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3Njk3NiksaT1uKDQzNDE2KSxhPW4oMjc4ODQpLGM9bigxOTIwOSkscz1uKDcwMDkpLHU9big1ODgxMCksbD1uKDYxOTYzKSxmPU1hdGgubWF4LGQ9TWF0aC5taW4scD05MDA3MTk5MjU0NzQwOTkxLGg9Ik1heGltdW0gYWxsb3dlZCBsZW5ndGggZXhjZWVkZWQiO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohbCgic3BsaWNlIil9LHtzcGxpY2U6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGwsdixnLHksbT1jKHRoaXMpLGI9YShtLmxlbmd0aCkseD1vKHQsYiksdz1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT13P249cj0wOjE9PT13PyhuPTAscj1iLXgpOihuPXctMixyPWQoZihpKGUpLDApLGIteCkpLGIrbi1yPnApdGhyb3cgVHlwZUVycm9yKGgpO2ZvcihsPXMobSxyKSx2PTA7djxyO3YrKykoZz14K3YpaW4gbSYmdShsLHYsbVtnXSk7aWYobC5sZW5ndGg9cixuPHIpe2Zvcih2PXg7djxiLXI7disrKXk9dituLChnPXYrcilpbiBtP21beV09bVtnXTpkZWxldGUgbVt5XTtmb3Iodj1iO3Y+Yi1yK247di0tKWRlbGV0ZSBtW3YtMV19ZWxzZSBpZihuPnIpZm9yKHY9Yi1yO3Y+eDt2LS0peT12K24tMSwoZz12K3ItMSlpbiBtP21beV09bVtnXTpkZWxldGUgbVt5XTtmb3Iodj0wO3Y8bjt2KyspbVt2K3hdPWFyZ3VtZW50c1t2KzJdO3JldHVybiBtLmxlbmd0aD1iLXIrbixsfX0pfSw3MTg0NjpmdW5jdGlvbih0LGUsbil7big3NjUxMykoImZsYXRNYXAiKX0sNzAxNDY6ZnVuY3Rpb24odCxlLG4pe24oNzY1MTMpKCJmbGF0Iil9LDQ1MTU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODI4MzUpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6IW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVJ9LHtEYXRhVmlldzpvLkRhdGFWaWV3fSl9LDQxNjMyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJEYXRlIixzdGF0OiEwfSx7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LDQwMDQ1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzkxNjcpO3Ioe3RhcmdldDoiRGF0ZSIscHJvdG86ITAsZm9yY2VkOkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIT09b30se3RvSVNPU3RyaW5nOm99KX0sMzYyMzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxOTIwOSksYT1uKDUzNDk4KTtyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSkpfSx7dG9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUpO3JldHVybiJudW1iZXIiIT10eXBlb2Ygbnx8aXNGaW5pdGUobik/ZS50b0lTT1N0cmluZygpOm51bGx9fSl9LDg0MDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjY5NzEpLG89big3Njk3NCksaT1uKDIzNzI0KSgidG9QcmltaXRpdmUiKSxhPURhdGUucHJvdG90eXBlO2kgaW4gYXx8cihhLGksbyl9LDIxMzc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyOTEzKSxvPURhdGUucHJvdG90eXBlLGk9IkludmFsaWQgRGF0ZSIsYT0idG9TdHJpbmciLGM9by50b1N0cmluZyxzPW8uZ2V0VGltZTtuZXcgRGF0ZShOYU4pKyIiIT1pJiZyKG8sYSwoZnVuY3Rpb24oKXt2YXIgdD1zLmNhbGwodGhpcyk7cmV0dXJuIHQ9PXQ/Yy5jYWxsKHRoaXMpOml9KSl9LDk2NDk4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJGdW5jdGlvbiIscHJvdG86ITB9LHtiaW5kOm4oNzM3MzkpfSl9LDc1ODk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMDU5Miksbz1uKDM3NjIwKSxpPW4oNjQ5NjUpLGE9bigyMzcyNCkoImhhc0luc3RhbmNlIiksYz1GdW5jdGlvbi5wcm90b3R5cGU7YSBpbiBjfHxvLmYoYyxhLHt2YWx1ZTpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IXIodCkpcmV0dXJuITE7aWYoIXIodGhpcy5wcm90b3R5cGUpKXJldHVybiB0IGluc3RhbmNlb2YgdGhpcztmb3IoO3Q9aSh0KTspaWYodGhpcy5wcm90b3R5cGU9PT10KXJldHVybiEwO3JldHVybiExfX0pfSwyMjQ0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKS5mLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS50b1N0cmluZyxjPS9eXHMqZnVuY3Rpb24gKFteIChdKikvLHM9Im5hbWUiO3ImJiEocyBpbiBpKSYmbyhpLHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGEuY2FsbCh0aGlzKS5tYXRjaChjKVsxXX1jYXRjaCh0KXtyZXR1cm4iIn19fSl9LDcxNjIyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7Z2xvYmFsOiEwfSx7Z2xvYmFsVGhpczpuKDg5NTU4KX0pfSwxNjUwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDMyMTg3KSxhPW8oIkpTT04iLCJzdHJpbmdpZnkiKSxjPS9bXHVEODAwLVx1REZGRl0vZyxzPS9eW1x1RDgwMC1cdURCRkZdJC8sdT0vXltcdURDMDAtXHVERkZGXSQvLGw9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4uY2hhckF0KGUtMSksbz1uLmNoYXJBdChlKzEpO3JldHVybiBzLnRlc3QodCkmJiF1LnRlc3Qobyl8fHUudGVzdCh0KSYmIXMudGVzdChyKT8iXFx1Iit0LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOnR9LGY9aSgoZnVuY3Rpb24oKXtyZXR1cm4nIlxcdWRmMDZcXHVkODM0IichPT1hKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1hKCJcdWRlYWQiKX0pKTthJiZyKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsZm9yY2VkOmZ9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWEuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiJzdHJpbmciPT10eXBlb2Ygcj9yLnJlcGxhY2UoYyxsKTpyfX0pfSw4MTEwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7big1MTEyOCkoci5KU09OLCJKU09OIiwhMCl9LDk0OTA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4MTk1MSksbz1uKDY0NTApO3QuZXhwb3J0cz1yKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbyl9LDIxMDMyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjE5MzIpLGk9TWF0aC5hY29zaCxhPU1hdGgubG9nLGM9TWF0aC5zcXJ0LHM9TWF0aC5MTjI7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohaXx8NzEwIT1NYXRoLmZsb29yKGkoTnVtYmVyLk1BWF9WQUxVRSkpfHxpKDEvMCkhPTEvMH0se2Fjb3NoOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KTwxP05hTjp0Pjk0OTA2MjY1LjYyNDI1MTU2P2EodCkrczpvKHQtMStjKHQtMSkqYyh0KzEpKX19KX0sMzc5MzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5hc2luaCxpPU1hdGgubG9nLGE9TWF0aC5zcXJ0O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IShvJiYxL28oMCk+MCl9LHthc2luaDpmdW5jdGlvbiB0KGUpe3JldHVybiBpc0Zpbml0ZShlPStlKSYmMCE9ZT9lPDA/LXQoLWUpOmkoZSthKGUqZSsxKSk6ZX19KX0sOTM5OTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5hdGFuaCxpPU1hdGgubG9nO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IShvJiYxL28oLTApPDApfSx7YXRhbmg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90OmkoKDErdCkvKDEtdCkpLzJ9fSl9LDEzMzkzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzg3ODcpLGk9TWF0aC5hYnMsYT1NYXRoLnBvdztyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjYnJ0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQ9K3QpKmEoaSh0KSwxLzMpfX0pfSwxMTI4MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmZsb29yLGk9TWF0aC5sb2csYT1NYXRoLkxPRzJFO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NsejMyOmZ1bmN0aW9uKHQpe3JldHVybih0Pj4+PTApPzMxLW8oaSh0Ky41KSphKTozMn19KX0sMzgwMzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Mjk3MCksaT1NYXRoLmNvc2gsYT1NYXRoLmFicyxjPU1hdGguRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiFpfHxpKDcxMCk9PT0xLzB9LHtjb3NoOmZ1bmN0aW9uKHQpe3ZhciBlPW8oYSh0KS0xKSsxO3JldHVybihlKzEvKGUqYypjKSkqKGMvMil9fSl9LDExMzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Mjk3MCk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDpvIT1NYXRoLmV4cG0xfSx7ZXhwbTE6b30pfSw0NjA3ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2Zyb3VuZDpuKDUzMjUxKX0pfSwzMDA4MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmh5cG90LGk9TWF0aC5hYnMsYT1NYXRoLnNxcnQ7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohIW8mJm8oMS8wLE5hTikhPT0xLzB9LHtoeXBvdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyLG89MCxjPTAscz1hcmd1bWVudHMubGVuZ3RoLHU9MDtjPHM7KXU8KG49aShhcmd1bWVudHNbYysrXSkpPyhvPW8qKHI9dS9uKSpyKzEsdT1uKTpvKz1uPjA/KHI9bi91KSpyOm47cmV0dXJuIHU9PT0xLzA/MS8wOnUqYShvKX19KX0sNDczODM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1NYXRoLmltdWw7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybi01IT1pKDQyOTQ5NjcyOTUsNSl8fDIhPWkubGVuZ3RofSkpfSx7aW11bDpmdW5jdGlvbih0LGUpe3ZhciBuPTY1NTM1LHI9K3Qsbz0rZSxpPW4mcixhPW4mbztyZXR1cm4gMHxpKmErKChuJnI+Pj4xNikqYStpKihuJm8+Pj4xNik8PDE2Pj4+MCl9fSl9LDcxNTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubG9nLGk9TWF0aC5MT0cxMEU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMTA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkqaX19KX0sOTkyMTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cxcDpuKDIxOTMyKX0pfSw5ODk3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmxvZyxpPU1hdGguTE4yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkvaX19KX0sODA2OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NpZ246bigzODc4Nyl9KX0sNzAyMDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDcyOTcwKSxhPU1hdGguYWJzLGM9TWF0aC5leHAscz1NYXRoLkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9TWF0aC5zaW5oKC0yZS0xNyl9KSl9LHtzaW5oOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQ9K3QpPDE/KGkodCktaSgtdCkpLzI6KGModC0xKS1jKC10LTEpKSoocy8yKX19KX0sODU3NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Mjk3MCksaT1NYXRoLmV4cDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHt0YW5oOmZ1bmN0aW9uKHQpe3ZhciBlPW8odD0rdCksbj1vKC10KTtyZXR1cm4gZT09MS8wPzE6bj09MS8wPy0xOihlLW4pLyhpKHQpK2koLXQpKX19KX0sMTE3NzM6ZnVuY3Rpb24odCxlLG4pe24oNTExMjgpKE1hdGgsIk1hdGgiLCEwKX0sMTU3NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5jZWlsLGk9TWF0aC5mbG9vcjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHt0cnVuYzpmdW5jdGlvbih0KXtyZXR1cm4odD4wP2k6bykodCl9fSl9LDcxODI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9big5MjkxMyksYz1uKDc2Mjk4KSxzPW4oMjQ1OTQpLHU9bigzMDI3MiksbD1uKDUzNDk4KSxmPW4oMzIxODcpLGQ9big1MDg2OCkscD1uKDEzMzM0KS5mLGg9big5NzI1NykuZix2PW4oMzc2MjApLmYsZz1uKDgyMzUwKS50cmltLHk9Ik51bWJlciIsbT1vLk51bWJlcixiPW0ucHJvdG90eXBlLHg9cyhkKGIpKT09eSx3PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYSxjLHMsdT1sKHQsITEpO2lmKCJzdHJpbmciPT10eXBlb2YgdSYmdS5sZW5ndGg+MilpZig0Mz09PShlPSh1PWcodSkpLmNoYXJDb2RlQXQoMCkpfHw0NT09PWUpe2lmKDg4PT09KG49dS5jaGFyQ29kZUF0KDIpKXx8MTIwPT09bilyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1lKXtzd2l0Y2godS5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6cj0yLG89NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpyPTgsbz01NTticmVhaztkZWZhdWx0OnJldHVybit1fWZvcihhPShpPXUuc2xpY2UoMikpLmxlbmd0aCxjPTA7YzxhO2MrKylpZigocz1pLmNoYXJDb2RlQXQoYykpPDQ4fHxzPm8pcmV0dXJuIE5hTjtyZXR1cm4gcGFyc2VJbnQoaSxyKX1yZXR1cm4rdX07aWYoaSh5LCFtKCIgMG8xIil8fCFtKCIwYjEiKXx8bSgiKzB4MSIpKSl7Zm9yKHZhciBFLGo9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwxPzA6dCxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBqJiYoeD9mKChmdW5jdGlvbigpe2IudmFsdWVPZi5jYWxsKG4pfSkpOnMobikhPXkpP3UobmV3IG0odyhlKSksbixqKTp3KGUpfSxDPXI/cChtKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksaz0wO0MubGVuZ3RoPms7aysrKWMobSxFPUNba10pJiYhYyhqLEUpJiZ2KGosRSxoKG0sRSkpO2oucHJvdG90eXBlPWIsYi5jb25zdHJ1Y3Rvcj1qLGEobyx5LGopfX0sMjYwNjM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LDk2NzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNGaW5pdGU6big4OTU0Mil9KX0sMzMxMDA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzSW50ZWdlcjpuKDM4MjU3KX0pfSw0MTkyODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNOYU46ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSl9LDE1ODY5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzgyNTcpLGk9TWF0aC5hYnM7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpJiZpKHQpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSw4ODcxNTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LDM2OTk1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtNSU5fU0FGRV9JTlRFR0VSOi05MDA3MTk5MjU0NzQwOTkxfSl9LDExMjI0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ0OTcpO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwLGZvcmNlZDpOdW1iZXIucGFyc2VGbG9hdCE9b30se3BhcnNlRmxvYXQ6b30pfSw2Mzc2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4NDYpO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwLGZvcmNlZDpOdW1iZXIucGFyc2VJbnQhPW99LHtwYXJzZUludDpvfSl9LDEzMDY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQzNDE2KSxpPW4oNTM5OTcpLGE9big2ODI1MyksYz1uKDMyMTg3KSxzPTEuLnRvRml4ZWQsdT1NYXRoLmZsb29yLGw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZT9uOmUlMj09MT9sKHQsZS0xLG4qdCk6bCh0KnQsZS8yLG4pfTtyKHt0YXJnZXQ6Ik51bWJlciIscHJvdG86ITAsZm9yY2VkOnMmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMpfHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhYygoZnVuY3Rpb24oKXtzLmNhbGwoe30pfSkpfSx7dG9GaXhlZDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsYyxzPWkodGhpcyksZj1vKHQpLGQ9WzAsMCwwLDAsMCwwXSxwPSIiLGg9IjAiLHY9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1lOysrbjw2OylyKz10KmRbbl0sZFtuXT1yJTFlNyxyPXUoci8xZTcpfSxnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT02LG49MDstLWU+PTA7KW4rPWRbZV0sZFtlXT11KG4vdCksbj1uJXQqMWU3fSx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTYsZT0iIjstLXQ+PTA7KWlmKCIiIT09ZXx8MD09PXR8fDAhPT1kW3RdKXt2YXIgbj1TdHJpbmcoZFt0XSk7ZT0iIj09PWU/bjplK2EuY2FsbCgiMCIsNy1uLmxlbmd0aCkrbn1yZXR1cm4gZX07aWYoZjwwfHxmPjIwKXRocm93IFJhbmdlRXJyb3IoIkluY29ycmVjdCBmcmFjdGlvbiBkaWdpdHMiKTtpZihzIT1zKXJldHVybiJOYU4iO2lmKHM8PS0xZTIxfHxzPj0xZTIxKXJldHVybiBTdHJpbmcocyk7aWYoczwwJiYocD0iLSIscz0tcykscz4xZS0yMSlpZihuPShlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dDtuPj00MDk2OyllKz0xMixuLz00MDk2O2Zvcig7bj49MjspZSs9MSxuLz0yO3JldHVybiBlfShzKmwoMiw2OSwxKSktNjkpPDA/cypsKDIsLWUsMSk6cy9sKDIsZSwxKSxuKj00NTAzNTk5NjI3MzcwNDk2LChlPTUyLWUpPjApe2Zvcih2KDAsbikscj1mO3I+PTc7KXYoMWU3LDApLHItPTc7Zm9yKHYobCgxMCxyLDEpLDApLHI9ZS0xO3I+PTIzOylnKDE8PDIzKSxyLT0yMztnKDE8PHIpLHYoMSwxKSxnKDIpLGg9eSgpfWVsc2UgdigwLG4pLHYoMTw8LWUsMCksaD15KCkrYS5jYWxsKCIwIixmKTtyZXR1cm4gaD1mPjA/cCsoKGM9aC5sZW5ndGgpPD1mPyIwLiIrYS5jYWxsKCIwIixmLWMpK2g6aC5zbGljZSgwLGMtZikrIi4iK2guc2xpY2UoYy1mKSk6cCtofX0pfSwzMjI5MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDUzOTk3KSxhPTEuLnRvUHJlY2lzaW9uO3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1hLmNhbGwoMSx2b2lkIDApfSkpfHwhbygoZnVuY3Rpb24oKXthLmNhbGwoe30pfSkpfSx7dG9QcmVjaXNpb246ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/YS5jYWxsKGkodGhpcykpOmEuY2FsbChpKHRoaXMpLHQpfX0pfSwzNzQ4MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4Njg1KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PW99LHthc3NpZ246b30pfSw0NTU1MDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLHNoYW06IW4oNjI1NTYpfSx7Y3JlYXRlOm4oNTA4NjgpfSl9LDE5Mjc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDg2NDcwKSxzPW4oMzc2MjApO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fZGVmaW5lR2V0dGVyX186ZnVuY3Rpb24odCxlKXtzLmYoYSh0aGlzKSx0LHtnZXQ6YyhlKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSw1MTE3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnRpZXM6big4NjQwMSl9KX0sNTgxNjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1Nik7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFvLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0eTpuKDM3NjIwKS5mfSl9LDkxMjA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDg2NDcwKSxzPW4oMzc2MjApO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fZGVmaW5lU2V0dGVyX186ZnVuY3Rpb24odCxlKXtzLmYoYSh0aGlzKSx0LHtzZXQ6YyhlKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSw4NzQzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzU2NykuZW50cmllcztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2VudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9fSl9LDc1ODA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ1MjApLGk9bigzMjE4NyksYT1uKDEwNTkyKSxjPW4oOTYwMykub25GcmVlemUscz1PYmplY3QuZnJlZXplO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDppKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohb30se2ZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyYmYSh0KT9zKGModCkpOnR9fSl9LDQ2MTQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big1ODgxMCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtmcm9tRW50cmllczpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gbyh0LChmdW5jdGlvbih0LG4pe2koZSx0LG4pfSksdm9pZCAwLCEwKSxlfX0pfSwxNTA3NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oOTU3MyksYT1uKDk3MjU3KS5mLGM9big2MjU1Nikscz1vKChmdW5jdGlvbigpe2EoMSl9KSk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFjfHxzLHNoYW06IWN9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShpKHQpLGUpfX0pfSw1ODMyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oMjQ0MTUpLGE9big5NTczKSxjPW4oOTcyNTcpLHM9big1ODgxMCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohb30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj1hKHQpLG89Yy5mLHU9aShyKSxsPXt9LGY9MDt1Lmxlbmd0aD5mOyl2b2lkIDAhPT0obj1vKHIsZT11W2YrK10pKSYmcyhsLGUsbik7cmV0dXJuIGx9fSl9LDYwNTI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigyNjkzNykuZjtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOml9KX0sNzQ5NTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDE5MjA5KSxhPW4oNjQ5NjUpLGM9big3MTYwOCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKSxzaGFtOiFjfSx7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fSl9LDUxNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc0V4dGVuc2libGU7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKX0se2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighYXx8YSh0KSl9fSl9LDg5NzU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNGcm96ZW47cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKX0se2lzRnJvemVuOmZ1bmN0aW9uKHQpe3JldHVybiFpKHQpfHwhIWEmJmEodCl9fSl9LDE4Mzc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNTZWFsZWQ7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKX0se2lzU2VhbGVkOmZ1bmN0aW9uKHQpe3JldHVybiFpKHQpfHwhIWEmJmEodCl9fSl9LDU0NzgxOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpczpuKDc2NDgyKX0pfSw5MjUyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTkyMDkpLGk9bigyNTUwNyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm4oMzIxODcpKChmdW5jdGlvbigpe2koMSl9KSl9LHtrZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSw3MjU2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big1MzQ5OCkscz1uKDY0OTY1KSx1PW4oOTcyNTcpLmY7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19sb29rdXBHZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxuPWEodGhpcykscj1jKHQsITApO2Rve2lmKGU9dShuLHIpKXJldHVybiBlLmdldH13aGlsZShuPXMobikpfX0pfSwxMDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDUzNDk4KSxzPW4oNjQ5NjUpLHU9big5NzI1NykuZjtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2xvb2t1cFNldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLG49YSh0aGlzKSxyPWModCwhMCk7ZG97aWYoZT11KG4scikpcmV0dXJuIGUuc2V0fXdoaWxlKG49cyhuKSl9fSl9LDkzMjcyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big5NjAzKS5vbkZyZWV6ZSxhPW4oNzQ1MjApLGM9bigzMjE4Nykscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFhfSx7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJm8odCk/cyhpKHQpKTp0fX0pfSw1NjE1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oOTYwMykub25GcmVlemUsYT1uKDc0NTIwKSxjPW4oMzIxODcpLHM9T2JqZWN0LnNlYWw7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFhfSx7c2VhbDpmdW5jdGlvbih0KXtyZXR1cm4gcyYmbyh0KT9zKGkodCkpOnR9fSl9LDQxNDU2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtzZXRQcm90b3R5cGVPZjpuKDcxODQyKX0pfSwzNDUyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDYxMyksbz1uKDkyOTEzKSxpPW4oMTk3NTgpO3J8fG8oT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSw3Mjg1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM1NjcpLnZhbHVlcztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3ZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KX19KX0sMTk0MzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyNDQ5Nyk7cih7Z2xvYmFsOiEwLGZvcmNlZDpwYXJzZUZsb2F0IT1vfSx7cGFyc2VGbG9hdDpvfSl9LDMzNDM3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg0Nik7cih7Z2xvYmFsOiEwLGZvcmNlZDpwYXJzZUludCE9b30se3BhcnNlSW50Om99KX0sMTc2Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4MzA4MyksYT1uKDMxMTUpLGM9big0MTMzNCk7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7YWxsU2V0dGxlZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49aS5mKGUpLHI9bi5yZXNvbHZlLHM9bi5yZWplY3QsdT1hKChmdW5jdGlvbigpe3ZhciBuPW8oZS5yZXNvbHZlKSxpPVtdLGE9MCxzPTE7Yyh0LChmdW5jdGlvbih0KXt2YXIgbz1hKyssYz0hMTtpLnB1c2godm9pZCAwKSxzKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7Y3x8KGM9ITAsaVtvXT17c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnR9LC0tc3x8cihpKSl9KSwoZnVuY3Rpb24odCl7Y3x8KGM9ITAsaVtvXT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOnR9LC0tc3x8cihpKSl9KSl9KSksLS1zfHxyKGkpfSkpO3JldHVybiB1LmVycm9yJiZzKHUudmFsdWUpLG4ucHJvbWlzZX19KX0sNDI0OTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigzOTQ1NyksYT1uKDMyMTg3KSxjPW4oNzcwMSkscz1uKDEzOTc5KSx1PW4oNjMxMzQpLGw9big5MjkxMyk7cih7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohIWkmJmEoKGZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuZmluYWxseS5jYWxsKHt0aGVuOmZ1bmN0aW9uKCl7fX0sKGZ1bmN0aW9uKCl7fSkpfSkpfSx7ZmluYWxseTpmdW5jdGlvbih0KXt2YXIgZT1zKHRoaXMsYygiUHJvbWlzZSIpKSxuPSJmdW5jdGlvbiI9PXR5cGVvZiB0O3JldHVybiB0aGlzLnRoZW4obj9mdW5jdGlvbihuKXtyZXR1cm4gdShlLHQoKSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX06dCxuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKChmdW5jdGlvbigpe3Rocm93IG59KSl9OnQpfX0pLG98fCJmdW5jdGlvbiIhPXR5cGVvZiBpfHxpLnByb3RvdHlwZS5maW5hbGx5fHxsKGkucHJvdG90eXBlLCJmaW5hbGx5IixjKCJQcm9taXNlIikucHJvdG90eXBlLmZpbmFsbHkpfSwxMTY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhLGM9bigxNDA0NCkscz1uKDY1NjcyKSx1PW4oODk1NTgpLGw9big3NzAxKSxmPW4oMzk0NTcpLGQ9big5MjkxMykscD1uKDE5MjYpLGg9big1MTEyOCksdj1uKDY3NTM4KSxnPW4oMTA1OTIpLHk9big4NjQ3MCksbT1uKDU5Mzc5KSxiPW4oMjQ1OTQpLHg9big3Njc3Myksdz1uKDQxMzM0KSxFPW4oNDc5Niksaj1uKDEzOTc5KSxDPW4oMjE3NDQpLnNldCxrPW4oNjU1NTUpLFM9big2MzEzNCksTz1uKDgzNjIwKSxBPW4oODMwODMpLEk9bigzMTE1KSxNPW4oODk4MjcpLFQ9big2NDUwNCksXz1uKDIzNzI0KSxMPW4oNzkwNzEpLFI9Xygic3BlY2llcyIpLFA9IlByb21pc2UiLE49TS5nZXQsRD1NLnNldCxGPU0uZ2V0dGVyRm9yKFApLFU9ZixCPXUuVHlwZUVycm9yLHo9dS5kb2N1bWVudCxIPXUucHJvY2VzcyxWPWwoImZldGNoIikscT1BLmYsVz1xLEc9InByb2Nlc3MiPT1iKEgpLFo9ISEoeiYmei5jcmVhdGVFdmVudCYmdS5kaXNwYXRjaEV2ZW50KSwkPSJ1bmhhbmRsZWRyZWplY3Rpb24iLFk9VChQLChmdW5jdGlvbigpe2lmKCEoeChVKSE9PVN0cmluZyhVKSkpe2lmKDY2PT09TClyZXR1cm4hMDtpZighRyYmImZ1bmN0aW9uIiE9dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudClyZXR1cm4hMH1pZihzJiYhVS5wcm90b3R5cGUuZmluYWxseSlyZXR1cm4hMDtpZihMPj01MSYmL25hdGl2ZSBjb2RlLy50ZXN0KFUpKXJldHVybiExO3ZhciB0PVUucmVzb2x2ZSgxKSxlPWZ1bmN0aW9uKHQpe3QoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4odC5jb25zdHJ1Y3Rvcj17fSlbUl09ZSwhKHQudGhlbigoZnVuY3Rpb24oKXt9KSlpbnN0YW5jZW9mIGUpfSkpLEo9WXx8IUUoKGZ1bmN0aW9uKHQpe1UuYWxsKHQpLmNhdGNoKChmdW5jdGlvbigpe30pKX0pKSxLPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiEoIWcodCl8fCJmdW5jdGlvbiIhPXR5cGVvZihlPXQudGhlbikpJiZlfSxYPWZ1bmN0aW9uKHQsZSxuKXtpZighZS5ub3RpZmllZCl7ZS5ub3RpZmllZD0hMDt2YXIgcj1lLnJlYWN0aW9ucztrKChmdW5jdGlvbigpe2Zvcih2YXIgbz1lLnZhbHVlLGk9MT09ZS5zdGF0ZSxhPTA7ci5sZW5ndGg+YTspe3ZhciBjLHMsdSxsPXJbYSsrXSxmPWk/bC5vazpsLmZhaWwsZD1sLnJlc29sdmUscD1sLnJlamVjdCxoPWwuZG9tYWluO3RyeXtmPyhpfHwoMj09PWUucmVqZWN0aW9uJiZudCh0LGUpLGUucmVqZWN0aW9uPTEpLCEwPT09Zj9jPW86KGgmJmguZW50ZXIoKSxjPWYobyksaCYmKGguZXhpdCgpLHU9ITApKSxjPT09bC5wcm9taXNlP3AoQigiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKToocz1LKGMpKT9zLmNhbGwoYyxkLHApOmQoYykpOnAobyl9Y2F0Y2godCl7aCYmIXUmJmguZXhpdCgpLHAodCl9fWUucmVhY3Rpb25zPVtdLGUubm90aWZpZWQ9ITEsbiYmIWUucmVqZWN0aW9uJiZ0dCh0LGUpfSkpfX0sUT1mdW5jdGlvbih0LGUsbil7dmFyIHIsbztaPygocj16LmNyZWF0ZUV2ZW50KCJFdmVudCIpKS5wcm9taXNlPWUsci5yZWFzb249bixyLmluaXRFdmVudCh0LCExLCEwKSx1LmRpc3BhdGNoRXZlbnQocikpOnI9e3Byb21pc2U6ZSxyZWFzb246bn0sKG89dVsib24iK3RdKT9vKHIpOnQ9PT0kJiZPKCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG4pfSx0dD1mdW5jdGlvbih0LGUpe0MuY2FsbCh1LChmdW5jdGlvbigpe3ZhciBuLHI9ZS52YWx1ZTtpZihldChlKSYmKG49SSgoZnVuY3Rpb24oKXtHP0guZW1pdCgidW5oYW5kbGVkUmVqZWN0aW9uIixyLHQpOlEoJCx0LHIpfSkpLGUucmVqZWN0aW9uPUd8fGV0KGUpPzI6MSxuLmVycm9yKSl0aHJvdyBuLnZhbHVlfSkpfSxldD1mdW5jdGlvbih0KXtyZXR1cm4gMSE9PXQucmVqZWN0aW9uJiYhdC5wYXJlbnR9LG50PWZ1bmN0aW9uKHQsZSl7Qy5jYWxsKHUsKGZ1bmN0aW9uKCl7Rz9ILmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLHQpOlEoInJlamVjdGlvbmhhbmRsZWQiLHQsZS52YWx1ZSl9KSl9LHJ0PWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihvKXt0KGUsbixvLHIpfX0sb3Q9ZnVuY3Rpb24odCxlLG4scil7ZS5kb25lfHwoZS5kb25lPSEwLHImJihlPXIpLGUudmFsdWU9bixlLnN0YXRlPTIsWCh0LGUsITApKX0saXQ9ZnVuY3Rpb24odCxlLG4scil7aWYoIWUuZG9uZSl7ZS5kb25lPSEwLHImJihlPXIpO3RyeXtpZih0PT09bil0aHJvdyBCKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBvPUsobik7bz9rKChmdW5jdGlvbigpe3ZhciByPXtkb25lOiExfTt0cnl7by5jYWxsKG4scnQoaXQsdCxyLGUpLHJ0KG90LHQscixlKSl9Y2F0Y2gobil7b3QodCxyLG4sZSl9fSkpOihlLnZhbHVlPW4sZS5zdGF0ZT0xLFgodCxlLCExKSl9Y2F0Y2gobil7b3QodCx7ZG9uZTohMX0sbixlKX19fTtZJiYoVT1mdW5jdGlvbih0KXttKHRoaXMsVSxQKSx5KHQpLHIuY2FsbCh0aGlzKTt2YXIgZT1OKHRoaXMpO3RyeXt0KHJ0KGl0LHRoaXMsZSkscnQob3QsdGhpcyxlKSl9Y2F0Y2godCl7b3QodGhpcyxlLHQpfX0sKHI9ZnVuY3Rpb24odCl7RCh0aGlzLHt0eXBlOlAsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOltdLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPXAoVS5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24odCxlKXt2YXIgbj1GKHRoaXMpLHI9cShqKHRoaXMsVSkpO3JldHVybiByLm9rPSJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0LHIuZmFpbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxyLmRvbWFpbj1HP0guZG9tYWluOnZvaWQgMCxuLnBhcmVudD0hMCxuLnJlYWN0aW9ucy5wdXNoKHIpLDAhPW4uc3RhdGUmJlgodGhpcyxuLCExKSxyLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLG89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcixlPU4odCk7dGhpcy5wcm9taXNlPXQsdGhpcy5yZXNvbHZlPXJ0KGl0LHQsZSksdGhpcy5yZWplY3Q9cnQob3QsdCxlKX0sQS5mPXE9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1VfHx0PT09aT9uZXcgbyh0KTpXKHQpfSxzfHwiZnVuY3Rpb24iIT10eXBlb2YgZnx8KGE9Zi5wcm90b3R5cGUudGhlbixkKGYucHJvdG90eXBlLCJ0aGVuIiwoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgVSgoZnVuY3Rpb24odCxlKXthLmNhbGwobix0LGUpfSkpLnRoZW4odCxlKX0pLHt1bnNhZmU6ITB9KSwiZnVuY3Rpb24iPT10eXBlb2YgViYmYyh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiEwfSx7ZmV0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIFMoVSxWLmFwcGx5KHUsYXJndW1lbnRzKSl9fSkpKSxjKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6WX0se1Byb21pc2U6VX0pLGgoVSxQLCExLCEwKSx2KFApLGk9bChQKSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpZfSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXEodGhpcyk7cmV0dXJuIGUucmVqZWN0LmNhbGwodm9pZCAwLHQpLGUucHJvbWlzZX19KSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpzfHxZfSx7cmVzb2x2ZTpmdW5jdGlvbih0KXtyZXR1cm4gUyhzJiZ0aGlzPT09aT9VOnRoaXMsdCl9fSksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6Sn0se2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49cShlKSxyPW4ucmVzb2x2ZSxvPW4ucmVqZWN0LGk9SSgoZnVuY3Rpb24oKXt2YXIgbj15KGUucmVzb2x2ZSksaT1bXSxhPTAsYz0xO3codCwoZnVuY3Rpb24odCl7dmFyIHM9YSsrLHU9ITE7aS5wdXNoKHZvaWQgMCksYysrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3V8fCh1PSEwLGlbc109dCwtLWN8fHIoaSkpfSksbyl9KSksLS1jfHxyKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49cShlKSxyPW4ucmVqZWN0LG89SSgoZnVuY3Rpb24oKXt2YXIgbz15KGUucmVzb2x2ZSk7dyh0LChmdW5jdGlvbih0KXtvLmNhbGwoZSx0KS50aGVuKG4ucmVzb2x2ZSxyKX0pKX0pKTtyZXR1cm4gby5lcnJvciYmcihvLnZhbHVlKSxuLnByb21pc2V9fSl9LDI5Mjg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigzMjE4Nykscz1vKCJSZWZsZWN0IiwiYXBwbHkiKSx1PUZ1bmN0aW9uLmFwcGx5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6IWMoKGZ1bmN0aW9uKCl7cygoZnVuY3Rpb24oKXt9KSl9KSl9LHthcHBseTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGkodCksYShuKSxzP3ModCxlLG4pOnUuY2FsbCh0LGUsbil9fSl9LDYxOTQzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxMDU5Mikscz1uKDUwODY4KSx1PW4oNzM3MzkpLGw9bigzMjE4NyksZj1vKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZD1sKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShmKChmdW5jdGlvbigpe30pLFtdLHQpaW5zdGFuY2VvZiB0KX0pKSxwPSFsKChmdW5jdGlvbigpe2YoKGZ1bmN0aW9uKCl7fSkpfSkpLGg9ZHx8cDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOmgsc2hhbTpofSx7Y29uc3RydWN0OmZ1bmN0aW9uKHQsZSl7aSh0KSxhKGUpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz90OmkoYXJndW1lbnRzWzJdKTtpZihwJiYhZClyZXR1cm4gZih0LGUsbik7aWYodD09bil7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZVswXSk7Y2FzZSAyOnJldHVybiBuZXcgdChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSl9dmFyIHI9W251bGxdO3JldHVybiByLnB1c2guYXBwbHkocixlKSxuZXcodS5hcHBseSh0LHIpKX12YXIgbz1uLnByb3RvdHlwZSxsPXMoYyhvKT9vOk9iamVjdC5wcm90b3R5cGUpLGg9RnVuY3Rpb24uYXBwbHkuY2FsbCh0LGwsZSk7cmV0dXJuIGMoaCk/aDpsfX0pfSwyNjk4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oODc1NzkpLGE9big1MzQ5OCksYz1uKDM3NjIwKTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOm4oMzIxODcpKChmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkoYy5mKHt9LDEse3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSksc2hhbTohb30se2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXtpKHQpO3ZhciByPWEoZSwhMCk7aShuKTt0cnl7cmV0dXJuIGMuZih0LHIsbiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSwxMzY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big5NzI1NykuZjtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3ZhciBuPWkobyh0KSxlKTtyZXR1cm4hKG4mJiFuLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB0W2VdfX0pfSw0NjU5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oODc1NzkpLGE9big5NzI1Nyk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLHNoYW06IW99LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5mKGkodCksZSl9fSl9LDcwMTM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big2NDk2NSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLHNoYW06IW4oNzE2MDgpfSx7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LDgzMzEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big4NzU3OSksYT1uKDc2Mjk4KSxjPW4oOTcyNTcpLHM9big2NDk2NSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0OmZ1bmN0aW9uIHQoZSxuKXt2YXIgcix1LGw9YXJndW1lbnRzLmxlbmd0aDwzP2U6YXJndW1lbnRzWzJdO3JldHVybiBpKGUpPT09bD9lW25dOihyPWMuZihlLG4pKT9hKHIsInZhbHVlIik/ci52YWx1ZTp2b2lkIDA9PT1yLmdldD92b2lkIDA6ci5nZXQuY2FsbChsKTpvKHU9cyhlKSk/dCh1LG4sbCk6dm9pZCAwfX0pfSw2MDg2NTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhczpmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHR9fSl9LDY3NzA4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9T2JqZWN0LmlzRXh0ZW5zaWJsZTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCksIWl8fGkodCl9fSl9LDk2NjM4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7b3duS2V5czpuKDI0NDE1KX0pfSwzOTczMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NzU3OSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLHNoYW06IW4oNzQ1MjApfSx7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24odCl7aSh0KTt0cnl7dmFyIGU9bygiT2JqZWN0IiwicHJldmVudEV4dGVuc2lvbnMiKTtyZXR1cm4gZSYmZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDg1Njg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big3OTg2MSksYT1uKDcxODQyKTthJiZyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0LGUpe28odCksaShlKTt0cnl7cmV0dXJuIGEodCxlKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDc0MTE1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9bigxMDU5MiksYT1uKDc2Mjk4KSxjPW4oMzIxODcpLHM9bigzNzYyMCksdT1uKDk3MjU3KSxsPW4oNjQ5NjUpLGY9bigxNDIwOSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3ZhciB0PXMuZih7fSwiYSIse2NvbmZpZ3VyYWJsZTohMH0pO3JldHVybiExIT09UmVmbGVjdC5zZXQobCh0KSwiYSIsMSx0KX0pKX0se3NldDpmdW5jdGlvbiB0KGUsbixyKXt2YXIgYyxkLHA9YXJndW1lbnRzLmxlbmd0aDw0P2U6YXJndW1lbnRzWzNdLGg9dS5mKG8oZSksbik7aWYoIWgpe2lmKGkoZD1sKGUpKSlyZXR1cm4gdChkLG4scixwKTtoPWYoMCl9aWYoYShoLCJ2YWx1ZSIpKXtpZighMT09PWgud3JpdGFibGV8fCFpKHApKXJldHVybiExO2lmKGM9dS5mKHAsbikpe2lmKGMuZ2V0fHxjLnNldHx8ITE9PT1jLndyaXRhYmxlKXJldHVybiExO2MudmFsdWU9cixzLmYocCxuLGMpfWVsc2Ugcy5mKHAsbixmKDAscikpO3JldHVybiEwfXJldHVybiB2b2lkIDAhPT1oLnNldCYmKGguc2V0LmNhbGwocCxyKSwhMCl9fSl9LDQ5NDk1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDMwMjcyKSxjPW4oMzc2MjApLmYscz1uKDEzMzM0KS5mLHU9big0MzIyMyksbD1uKDI1NDE5KSxmPW4oOTI5MTMpLGQ9bigzMjE4NykscD1uKDY3NTM4KSxoPW4oMjM3MjQpKCJtYXRjaCIpLHY9by5SZWdFeHAsZz12LnByb3RvdHlwZSx5PS9hL2csbT0vYS9nLGI9bmV3IHYoeSkhPT15O2lmKHImJmkoIlJlZ0V4cCIsIWJ8fGQoKGZ1bmN0aW9uKCl7cmV0dXJuIG1baF09ITEsdih5KSE9eXx8dihtKT09bXx8Ii9hL2kiIT12KHksImkiKX0pKSkpe2Zvcih2YXIgeD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMgaW5zdGFuY2VvZiB4LHI9dSh0KSxvPXZvaWQgMD09PWU7cmV0dXJuIW4mJnImJnQuY29uc3RydWN0b3I9PT14JiZvP3Q6YShiP25ldyB2KHImJiFvP3Quc291cmNlOnQsZSk6digocj10IGluc3RhbmNlb2YgeCk/dC5zb3VyY2U6dCxyJiZvP2wuY2FsbCh0KTplKSxuP3RoaXM6Zyx4KX0sdz1mdW5jdGlvbih0KXt0IGluIHh8fGMoeCx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZbdF19LHNldDpmdW5jdGlvbihlKXt2W3RdPWV9fSl9LEU9cyh2KSxqPTA7RS5sZW5ndGg+ajspdyhFW2orK10pO2cuY29uc3RydWN0b3I9eCx4LnByb3RvdHlwZT1nLGYobywiUmVnRXhwIix4KX1wKCJSZWdFeHAiKX0sODcyMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzg1OTgpO3Ioe3RhcmdldDoiUmVnRXhwIixwcm90bzohMCxmb3JjZWQ6Ly4vLmV4ZWMhPT1vfSx7ZXhlYzpvfSl9LDE4Mjc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9bigyNTQxOSk7ciYmImciIT0vLi9nLmZsYWdzJiZvLmYoUmVnRXhwLnByb3RvdHlwZSwiZmxhZ3MiLHtjb25maWd1cmFibGU6ITAsZ2V0Oml9KX0sMzc1NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTI5MTMpLG89big4NzU3OSksaT1uKDMyMTg3KSxhPW4oMjU0MTkpLGM9InRvU3RyaW5nIixzPVJlZ0V4cC5wcm90b3R5cGUsdT1zLnRvU3RyaW5nLGw9aSgoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pKSxmPXUubmFtZSE9YzsobHx8ZikmJnIoUmVnRXhwLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3ZhciB0PW8odGhpcyksZT1TdHJpbmcodC5zb3VyY2UpLG49dC5mbGFncztyZXR1cm4iLyIrZSsiLyIrU3RyaW5nKHZvaWQgMD09PW4mJnQgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIHMpP2EuY2FsbCh0KTpuKX0pLHt1bnNhZmU6ITB9KX0sNzQwNjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgxOTUxKSxvPW4oNjQ1MCk7dC5leHBvcnRzPXIoIlNldCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxvKX0sNDE3NzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImFuY2hvciIpfSx7YW5jaG9yOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImEiLCJuYW1lIix0KX19KX0sMzA0MDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJpZyIpfSx7YmlnOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYmlnIiwiIiwiIil9fSl9LDE4MTc1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJibGluayIpfSx7Ymxpbms6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJibGluayIsIiIsIiIpfX0pfSw2Njg5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYm9sZCIpfSx7Ym9sZDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImIiLCIiLCIiKX19KX0sMTUzNzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjAxNDApLmNvZGVBdDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtjb2RlUG9pbnRBdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSw5NzY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigxNDA0NCksaT1uKDk3MjU3KS5mLGE9bigyNzg4NCksYz1uKDk5MzQ2KSxzPW4oNzAxMzIpLHU9big5MzkxNSksbD1uKDY1NjcyKSxmPSIiLmVuZHNXaXRoLGQ9TWF0aC5taW4scD11KCJlbmRzV2l0aCIpO28oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6ISEobHx8cHx8KHI9aShTdHJpbmcucHJvdG90eXBlLCJlbmRzV2l0aCIpLCFyfHxyLndyaXRhYmxlKSkmJiFwfSx7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHModGhpcykpO2ModCk7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAscj1hKGUubGVuZ3RoKSxvPXZvaWQgMD09PW4/cjpkKGEobiksciksaT1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUsaSxvKTplLnNsaWNlKG8taS5sZW5ndGgsbyk9PT1pfX0pfSw4NTc2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZml4ZWQiKX0se2ZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywidHQiLCIiLCIiKX19KX0sODQzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZm9udGNvbG9yIil9LHtmb250Y29sb3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiZm9udCIsImNvbG9yIix0KX19KX0sOTIxOTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZvbnRzaXplIil9LHtmb250c2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJmb250Iiwic2l6ZSIsdCl9fSl9LDEwNzQzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzY5NzYpLGk9U3RyaW5nLmZyb21DaGFyQ29kZSxhPVN0cmluZy5mcm9tQ29kZVBvaW50O3Ioe3RhcmdldDoiU3RyaW5nIixzdGF0OiEwLGZvcmNlZDohIWEmJjEhPWEubGVuZ3RofSx7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGgsYT0wO3I+YTspe2lmKGU9K2FyZ3VtZW50c1thKytdLG8oZSwxMTE0MTExKSE9PWUpdGhyb3cgUmFuZ2VFcnJvcihlKyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO24ucHVzaChlPDY1NTM2P2koZSk6aSg1NTI5NisoKGUtPTY1NTM2KT4+MTApLGUlMTAyNCs1NjMyMCkpfXJldHVybiBuLmpvaW4oIiIpfX0pfSw3NDU2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big5OTM0NiksaT1uKDcwMTMyKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiFuKDkzOTE1KSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhflN0cmluZyhpKHRoaXMpKS5pbmRleE9mKG8odCksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwxMjE1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiaXRhbGljcyIpfSx7aXRhbGljczpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImkiLCIiLCIiKX19KX0sODIyMDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwMTQwKS5jaGFyQXQsbz1uKDg5ODI3KSxpPW4oNDYwNjEpLGE9IlN0cmluZyBJdGVyYXRvciIsYz1vLnNldCxzPW8uZ2V0dGVyRm9yKGEpO2koU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbih0KXtjKHRoaXMse3R5cGU6YSxzdHJpbmc6U3RyaW5nKHQpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciB0LGU9cyh0aGlzKSxuPWUuc3RyaW5nLG89ZS5pbmRleDtyZXR1cm4gbz49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1yKG4sbyksZS5pbmRleCs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSkpfSwyNjAxNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgibGluayIpfSx7bGluazpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJhIiwiaHJlZiIsdCl9fSl9LDgxMjc3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcxMjAxKSxpPW4oNzAxMzIpLGE9bigyNzg4NCksYz1uKDg2NDcwKSxzPW4oODc1NzkpLHU9bigyNDU5NCksbD1uKDQzMjIzKSxmPW4oMjU0MTkpLGQ9big2Njk3MSkscD1uKDMyMTg3KSxoPW4oMjM3MjQpLHY9bigxMzk3OSksZz1uKDUzMTQxKSx5PW4oODk4MjcpLG09big2NTY3MiksYj1oKCJtYXRjaEFsbCIpLHg9IlJlZ0V4cCBTdHJpbmciLHc9IlJlZ0V4cCBTdHJpbmcgSXRlcmF0b3IiLEU9eS5zZXQsaj15LmdldHRlckZvcih3KSxDPVJlZ0V4cC5wcm90b3R5cGUsaz1DLmV4ZWMsUz0iIi5tYXRjaEFsbCxPPSEhUyYmIXAoKGZ1bmN0aW9uKCl7ImEiLm1hdGNoQWxsKC8uLyl9KSksQT1vKChmdW5jdGlvbih0LGUsbixyKXtFKHRoaXMse3R5cGU6dyxyZWdleHA6dCxzdHJpbmc6ZSxnbG9iYWw6bix1bmljb2RlOnIsZG9uZTohMX0pfSkseCwoZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpO2lmKHQuZG9uZSlyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBlPXQucmVnZXhwLG49dC5zdHJpbmcscj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXtpZigib2JqZWN0IiE9dHlwZW9mKG49ci5jYWxsKHQsZSkpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGV4ZWMgcmVzdWx0Iik7cmV0dXJuIG59cmV0dXJuIGsuY2FsbCh0LGUpfShlLG4pO3JldHVybiBudWxsPT09cj97dmFsdWU6dm9pZCAwLGRvbmU6dC5kb25lPSEwfTp0Lmdsb2JhbD8oIiI9PVN0cmluZyhyWzBdKSYmKGUubGFzdEluZGV4PWcobixhKGUubGFzdEluZGV4KSx0LnVuaWNvZGUpKSx7dmFsdWU6cixkb25lOiExfSk6KHQuZG9uZT0hMCx7dmFsdWU6cixkb25lOiExfSl9KSksST1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGMsdT1zKHRoaXMpLGw9U3RyaW5nKHQpO3JldHVybiBlPXYodSxSZWdFeHApLHZvaWQgMD09PShuPXUuZmxhZ3MpJiZ1IGluc3RhbmNlb2YgUmVnRXhwJiYhKCJmbGFncyJpbiBDKSYmKG49Zi5jYWxsKHUpKSxyPXZvaWQgMD09PW4/IiI6U3RyaW5nKG4pLG89bmV3IGUoZT09PVJlZ0V4cD91LnNvdXJjZTp1LHIpLGk9ISF+ci5pbmRleE9mKCJnIiksYz0hIX5yLmluZGV4T2YoInUiKSxvLmxhc3RJbmRleD1hKHUubGFzdEluZGV4KSxuZXcgQShvLGwsaSxjKX07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpPfSx7bWF0Y2hBbGw6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG89aSh0aGlzKTtpZihudWxsIT10KXtpZihsKHQpJiYhflN0cmluZyhpKCJmbGFncyJpbiBDP3QuZmxhZ3M6Zi5jYWxsKHQpKSkuaW5kZXhPZigiZyIpKXRocm93IFR5cGVFcnJvcigiYC5tYXRjaEFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzIik7aWYoTylyZXR1cm4gUy5hcHBseShvLGFyZ3VtZW50cyk7aWYodm9pZCAwPT09KG49dFtiXSkmJm0mJiJSZWdFeHAiPT11KHQpJiYobj1JKSxudWxsIT1uKXJldHVybiBjKG4pLmNhbGwodCxvKX1lbHNlIGlmKE8pcmV0dXJuIFMuYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBlPVN0cmluZyhvKSxyPW5ldyBSZWdFeHAodCwiZyIpLG0/SS5jYWxsKHIsZSk6cltiXShlKX19KSxtfHxiIGluIEN8fGQoQyxiLEkpfSw2NTAwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big4NzU3OSksaT1uKDI3ODg0KSxhPW4oNzAxMzIpLGM9big1MzE0MSkscz1uKDM1NDU1KTtyKCJtYXRjaCIsMSwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihlKXt2YXIgbj1hKHRoaXMpLHI9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09cj9yLmNhbGwoZSxuKTpuZXcgUmVnRXhwKGUpW3RdKFN0cmluZyhuKSl9LGZ1bmN0aW9uKHQpe3ZhciByPW4oZSx0LHRoaXMpO2lmKHIuZG9uZSlyZXR1cm4gci52YWx1ZTt2YXIgYT1vKHQpLHU9U3RyaW5nKHRoaXMpO2lmKCFhLmdsb2JhbClyZXR1cm4gcyhhLHUpO3ZhciBsPWEudW5pY29kZTthLmxhc3RJbmRleD0wO2Zvcih2YXIgZixkPVtdLHA9MDtudWxsIT09KGY9cyhhLHUpKTspe3ZhciBoPVN0cmluZyhmWzBdKTtkW3BdPWgsIiI9PT1oJiYoYS5sYXN0SW5kZXg9Yyh1LGkoYS5sYXN0SW5kZXgpLGwpKSxwKyt9cmV0dXJuIDA9PT1wP251bGw6ZH1dfSkpfSw0NDAxOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNjU3MykuZW5kO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big0MjE4NCl9LHtwYWRFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMzgyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI2NTczKS5zdGFydDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNDIxODQpfSx7cGFkU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODA1MTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big5NTczKSxpPW4oMjc4ODQpO3Ioe3RhcmdldDoiU3RyaW5nIixzdGF0OiEwfSx7cmF3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKHQucmF3KSxuPWkoZS5sZW5ndGgpLHI9YXJndW1lbnRzLmxlbmd0aCxhPVtdLGM9MDtuPmM7KWEucHVzaChTdHJpbmcoZVtjKytdKSksYzxyJiZhLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tjXSkpO3JldHVybiBhLmpvaW4oIiIpfX0pfSwxODgyMzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGVhdDpuKDY4MjUzKX0pfSwzMzMyMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big4NzU3OSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big0MzQxNikscz1uKDcwMTMyKSx1PW4oNTMxNDEpLGw9bigzNTQ1NSksZj1NYXRoLm1heCxkPU1hdGgubWluLHA9TWF0aC5mbG9vcixoPS9cJChbJCYnYF18XGRcZD98PFtePl0qPikvZyx2PS9cJChbJCYnYF18XGRcZD8pL2c7cigicmVwbGFjZSIsMiwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihuLHIpe3ZhciBvPXModGhpcyksaT1udWxsPT1uP3ZvaWQgMDpuW3RdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChuLG8scik6ZS5jYWxsKFN0cmluZyhvKSxuLHIpfSxmdW5jdGlvbih0LGkpe3ZhciBzPW4oZSx0LHRoaXMsaSk7aWYocy5kb25lKXJldHVybiBzLnZhbHVlO3ZhciBwPW8odCksaD1TdHJpbmcodGhpcyksdj0iZnVuY3Rpb24iPT10eXBlb2YgaTt2fHwoaT1TdHJpbmcoaSkpO3ZhciBnPXAuZ2xvYmFsO2lmKGcpe3ZhciB5PXAudW5pY29kZTtwLmxhc3RJbmRleD0wfWZvcih2YXIgbT1bXTs7KXt2YXIgYj1sKHAsaCk7aWYobnVsbD09PWIpYnJlYWs7aWYobS5wdXNoKGIpLCFnKWJyZWFrOyIiPT09U3RyaW5nKGJbMF0pJiYocC5sYXN0SW5kZXg9dShoLGEocC5sYXN0SW5kZXgpLHkpKX1mb3IodmFyIHgsdz0iIixFPTAsaj0wO2o8bS5sZW5ndGg7aisrKXtiPW1bal07Zm9yKHZhciBDPVN0cmluZyhiWzBdKSxrPWYoZChjKGIuaW5kZXgpLGgubGVuZ3RoKSwwKSxTPVtdLE89MTtPPGIubGVuZ3RoO08rKylTLnB1c2godm9pZCAwPT09KHg9YltPXSk/eDpTdHJpbmcoeCkpO3ZhciBBPWIuZ3JvdXBzO2lmKHYpe3ZhciBJPVtDXS5jb25jYXQoUyxrLGgpO3ZvaWQgMCE9PUEmJkkucHVzaChBKTt2YXIgTT1TdHJpbmcoaS5hcHBseSh2b2lkIDAsSSkpfWVsc2UgTT1yKEMsaCxrLFMsQSxpKTtrPj1FJiYodys9aC5zbGljZShFLGspK00sRT1rK0MubGVuZ3RoKX1yZXR1cm4gdytoLnNsaWNlKEUpfV07ZnVuY3Rpb24gcih0LG4scixvLGEsYyl7dmFyIHM9cit0Lmxlbmd0aCx1PW8ubGVuZ3RoLGw9djtyZXR1cm4gdm9pZCAwIT09YSYmKGE9aShhKSxsPWgpLGUuY2FsbChjLGwsKGZ1bmN0aW9uKGUsaSl7dmFyIGM7c3dpdGNoKGkuY2hhckF0KDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiB0O2Nhc2UiYCI6cmV0dXJuIG4uc2xpY2UoMCxyKTtjYXNlIiciOnJldHVybiBuLnNsaWNlKHMpO2Nhc2UiPCI6Yz1hW2kuc2xpY2UoMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIGw9K2k7aWYoMD09PWwpcmV0dXJuIGU7aWYobD51KXt2YXIgZj1wKGwvMTApO3JldHVybiAwPT09Zj9lOmY8PXU/dm9pZCAwPT09b1tmLTFdP2kuY2hhckF0KDEpOm9bZi0xXStpLmNoYXJBdCgxKTplfWM9b1tsLTFdfXJldHVybiB2b2lkIDA9PT1jPyIiOmN9KSl9fSkpfSwzMzA2NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big4NzU3OSksaT1uKDcwMTMyKSxhPW4oNzY0ODIpLGM9bigzNTQ1NSk7cigic2VhcmNoIiwxLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKGUpe3ZhciBuPWkodGhpcykscj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLG4pOm5ldyBSZWdFeHAoZSlbdF0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIHI9bihlLHQsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBpPW8odCkscz1TdHJpbmcodGhpcyksdT1pLmxhc3RJbmRleDthKHUsMCl8fChpLmxhc3RJbmRleD0wKTt2YXIgbD1jKGkscyk7cmV0dXJuIGEoaS5sYXN0SW5kZXgsdSl8fChpLmxhc3RJbmRleD11KSxudWxsPT09bD8tMTpsLmluZGV4fV19KSl9LDc0MTE3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzbWFsbCIpfSx7c21hbGw6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzbWFsbCIsIiIsIiIpfX0pfSwxNzQ5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big0MzIyMyksaT1uKDg3NTc5KSxhPW4oNzAxMzIpLGM9bigxMzk3OSkscz1uKDUzMTQxKSx1PW4oMjc4ODQpLGw9bigzNTQ1NSksZj1uKDM4NTk4KSxkPW4oMzIxODcpLHA9W10ucHVzaCxoPU1hdGgubWluLHY9NDI5NDk2NzI5NSxnPSFkKChmdW5jdGlvbigpe3JldHVybiFSZWdFeHAodiwieSIpfSkpO3IoInNwbGl0IiwyLChmdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9ImMiPT0iYWJiYyIuc3BsaXQoLyhiKSovKVsxXXx8NCE9InRlc3QiLnNwbGl0KC8oPzopLywtMSkubGVuZ3RofHwyIT0iYWIiLnNwbGl0KC8oPzphYikqLykubGVuZ3RofHw0IT0iLiIuc3BsaXQoLyguPykoLj8pLykubGVuZ3RofHwiLiIuc3BsaXQoLygpKCkvKS5sZW5ndGg+MXx8IiIuc3BsaXQoLy4/LykubGVuZ3RoP2Z1bmN0aW9uKHQsbil7dmFyIHI9U3RyaW5nKGEodGhpcykpLGk9dm9pZCAwPT09bj92Om4+Pj4wO2lmKDA9PT1pKXJldHVybltdO2lmKHZvaWQgMD09PXQpcmV0dXJuW3JdO2lmKCFvKHQpKXJldHVybiBlLmNhbGwocix0LGkpO2Zvcih2YXIgYyxzLHUsbD1bXSxkPSh0Lmlnbm9yZUNhc2U/ImkiOiIiKSsodC5tdWx0aWxpbmU/Im0iOiIiKSsodC51bmljb2RlPyJ1IjoiIikrKHQuc3RpY2t5PyJ5IjoiIiksaD0wLGc9bmV3IFJlZ0V4cCh0LnNvdXJjZSxkKyJnIik7KGM9Zi5jYWxsKGcscikpJiYhKChzPWcubGFzdEluZGV4KT5oJiYobC5wdXNoKHIuc2xpY2UoaCxjLmluZGV4KSksYy5sZW5ndGg+MSYmYy5pbmRleDxyLmxlbmd0aCYmcC5hcHBseShsLGMuc2xpY2UoMSkpLHU9Y1swXS5sZW5ndGgsaD1zLGwubGVuZ3RoPj1pKSk7KWcubGFzdEluZGV4PT09Yy5pbmRleCYmZy5sYXN0SW5kZXgrKztyZXR1cm4gaD09PXIubGVuZ3RoPyF1JiZnLnRlc3QoIiIpfHxsLnB1c2goIiIpOmwucHVzaChyLnNsaWNlKGgpKSxsLmxlbmd0aD5pP2wuc2xpY2UoMCxpKTpsfToiMCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDA9PT10JiYwPT09bj9bXTplLmNhbGwodGhpcyx0LG4pfTplLFtmdW5jdGlvbihlLG4pe3ZhciBvPWEodGhpcyksaT1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChlLG8sbik6ci5jYWxsKFN0cmluZyhvKSxlLG4pfSxmdW5jdGlvbih0LG8pe3ZhciBhPW4ocix0LHRoaXMsbyxyIT09ZSk7aWYoYS5kb25lKXJldHVybiBhLnZhbHVlO3ZhciBmPWkodCksZD1TdHJpbmcodGhpcykscD1jKGYsUmVnRXhwKSx5PWYudW5pY29kZSxtPShmLmlnbm9yZUNhc2U/ImkiOiIiKSsoZi5tdWx0aWxpbmU/Im0iOiIiKSsoZi51bmljb2RlPyJ1IjoiIikrKGc/InkiOiJnIiksYj1uZXcgcChnP2Y6Il4oPzoiK2Yuc291cmNlKyIpIixtKSx4PXZvaWQgMD09PW8/djpvPj4+MDtpZigwPT09eClyZXR1cm5bXTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIG51bGw9PT1sKGIsZCk/W2RdOltdO2Zvcih2YXIgdz0wLEU9MCxqPVtdO0U8ZC5sZW5ndGg7KXtiLmxhc3RJbmRleD1nP0U6MDt2YXIgQyxrPWwoYixnP2Q6ZC5zbGljZShFKSk7aWYobnVsbD09PWt8fChDPWgodShiLmxhc3RJbmRleCsoZz8wOkUpKSxkLmxlbmd0aCkpPT09dylFPXMoZCxFLHkpO2Vsc2V7aWYoai5wdXNoKGQuc2xpY2UodyxFKSksai5sZW5ndGg9PT14KXJldHVybiBqO2Zvcih2YXIgUz0xO1M8PWsubGVuZ3RoLTE7UysrKWlmKGoucHVzaChrW1NdKSxqLmxlbmd0aD09PXgpcmV0dXJuIGo7RT13PUN9fXJldHVybiBqLnB1c2goZC5zbGljZSh3KSksan1dfSksIWcpfSw4MDM2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigxNDA0NCksaT1uKDk3MjU3KS5mLGE9bigyNzg4NCksYz1uKDk5MzQ2KSxzPW4oNzAxMzIpLHU9big5MzkxNSksbD1uKDY1NjcyKSxmPSIiLnN0YXJ0c1dpdGgsZD1NYXRoLm1pbixwPXUoInN0YXJ0c1dpdGgiKTtvKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEhKGx8fHB8fChyPWkoU3RyaW5nLnByb3RvdHlwZSwic3RhcnRzV2l0aCIpLCFyfHxyLndyaXRhYmxlKSkmJiFwfSx7c3RhcnRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcocyh0aGlzKSk7Yyh0KTt2YXIgbj1hKGQoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZS5sZW5ndGgpKSxyPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxyLG4pOmUuc2xpY2UobixuK3IubGVuZ3RoKT09PXJ9fSl9LDI4MDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdHJpa2UiKX0se3N0cmlrZTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN0cmlrZSIsIiIsIiIpfX0pfSw2Nzk0MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3ViIil9LHtzdWI6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdWIiLCIiLCIiKX19KX0sNDQwNTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN1cCIpfSx7c3VwOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3VwIiwiIiwiIil9fSl9LDc0Nzk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS5lbmQsaT1uKDg0NzU0KSgidHJpbUVuZCIpLGE9aT9mdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfToiIi50cmltRW5kO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6aX0se3RyaW1FbmQ6YSx0cmltUmlnaHQ6YX0pfSw2OTE4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkuc3RhcnQsaT1uKDg0NzU0KSgidHJpbVN0YXJ0IiksYT1pP2Z1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9OiIiLnRyaW1TdGFydDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOml9LHt0cmltU3RhcnQ6YSx0cmltTGVmdDphfSl9LDQzMzk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS50cmltO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big4NDc1NCkoInRyaW0iKX0se3RyaW06ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX19KX0sNTEwOTA6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJhc3luY0l0ZXJhdG9yIil9LDI0Nzg1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oODk1NTgpLGE9big3NjI5OCksYz1uKDEwNTkyKSxzPW4oMzc2MjApLmYsdT1uKDk5NjI1KSxsPWkuU3ltYm9sO2lmKG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBsJiYoISgiZGVzY3JpcHRpb24iaW4gbC5wcm90b3R5cGUpfHx2b2lkIDAhPT1sKCkuZGVzY3JpcHRpb24pKXt2YXIgZj17fSxkPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDwxfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/dm9pZCAwOlN0cmluZyhhcmd1bWVudHNbMF0pLGU9dGhpcyBpbnN0YW5jZW9mIGQ/bmV3IGwodCk6dm9pZCAwPT09dD9sKCk6bCh0KTtyZXR1cm4iIj09PXQmJihmW2VdPSEwKSxlfTt1KGQsbCk7dmFyIHA9ZC5wcm90b3R5cGU9bC5wcm90b3R5cGU7cC5jb25zdHJ1Y3Rvcj1kO3ZhciBoPXAudG9TdHJpbmcsdj0iU3ltYm9sKHRlc3QpIj09U3RyaW5nKGwoInRlc3QiKSksZz0vXlN5bWJvbFwoKC4qKVwpW14pXSskLztzKHAsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWModGhpcyk/dGhpcy52YWx1ZU9mKCk6dGhpcyxlPWguY2FsbCh0KTtpZihhKGYsdCkpcmV0dXJuIiI7dmFyIG49dj9lLnNsaWNlKDcsLTEpOmUucmVwbGFjZShnLCIkMSIpO3JldHVybiIiPT09bj92b2lkIDA6bn19KSxyKHtnbG9iYWw6ITAsZm9yY2VkOiEwfSx7U3ltYm9sOmR9KX19LDg5MTc6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJoYXNJbnN0YW5jZSIpfSw1NDc4NjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImlzQ29uY2F0U3ByZWFkYWJsZSIpfSwxMjgxNjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIml0ZXJhdG9yIil9LDY1Njc5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNzcwMSksYT1uKDY1NjcyKSxjPW4oNjI1NTYpLHM9big5MDE0KSx1PW4oMTY0MTApLGw9bigzMjE4NyksZj1uKDc2Mjk4KSxkPW4oNjE5OSkscD1uKDEwNTkyKSxoPW4oODc1NzkpLHY9bigxOTIwOSksZz1uKDk1NzMpLHk9big1MzQ5OCksbT1uKDE0MjA5KSxiPW4oNTA4NjgpLHg9bigyNTUwNyksdz1uKDEzMzM0KSxFPW4oMjY5MzcpLGo9big1Njk5MSksQz1uKDk3MjU3KSxrPW4oMzc2MjApLFM9big0MTYyOCksTz1uKDY2OTcxKSxBPW4oOTI5MTMpLEk9big2MjA1NCksTT1uKDgzMTk3KSxUPW4oMjMwNzApLF89big2NzI5KSxMPW4oMjM3MjQpLFI9big3MzkxNiksUD1uKDkyMjc1KSxOPW4oNTExMjgpLEQ9big4OTgyNyksRj1uKDMwMDI1KS5mb3JFYWNoLFU9TSgiaGlkZGVuIiksQj0iU3ltYm9sIix6PUwoInRvUHJpbWl0aXZlIiksSD1ELnNldCxWPUQuZ2V0dGVyRm9yKEIpLHE9T2JqZWN0LnByb3RvdHlwZSxXPW8uU3ltYm9sLEc9aSgiSlNPTiIsInN0cmluZ2lmeSIpLFo9Qy5mLCQ9ay5mLFk9RS5mLEo9Uy5mLEs9SSgic3ltYm9scyIpLFg9SSgib3Atc3ltYm9scyIpLFE9SSgic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeSIpLHR0PUkoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKSxldD1JKCJ3a3MiKSxudD1vLlFPYmplY3QscnQ9IW50fHwhbnQucHJvdG90eXBlfHwhbnQucHJvdG90eXBlLmZpbmRDaGlsZCxvdD1jJiZsKChmdW5jdGlvbigpe3JldHVybiA3IT1iKCQoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJCh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/ZnVuY3Rpb24odCxlLG4pe3ZhciByPVoocSxlKTtyJiZkZWxldGUgcVtlXSwkKHQsZSxuKSxyJiZ0IT09cSYmJChxLGUscil9OiQsaXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1LW3RdPWIoVy5wcm90b3R5cGUpO3JldHVybiBIKG4se3R5cGU6Qix0YWc6dCxkZXNjcmlwdGlvbjplfSksY3x8KG4uZGVzY3JpcHRpb249ZSksbn0sYXQ9cyYmInN5bWJvbCI9PXR5cGVvZiBXLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdCh0KWluc3RhbmNlb2YgV30sY3Q9ZnVuY3Rpb24odCxlLG4pe3Q9PT1xJiZjdChYLGUsbiksaCh0KTt2YXIgcj15KGUsITApO3JldHVybiBoKG4pLGYoSyxyKT8obi5lbnVtZXJhYmxlPyhmKHQsVSkmJnRbVV1bcl0mJih0W1VdW3JdPSExKSxuPWIobix7ZW51bWVyYWJsZTptKDAsITEpfSkpOihmKHQsVSl8fCQodCxVLG0oMSx7fSkpLHRbVV1bcl09ITApLG90KHQscixuKSk6JCh0LHIsbil9LHN0PWZ1bmN0aW9uKHQsZSl7aCh0KTt2YXIgbj1nKGUpLHI9eChuKS5jb25jYXQoZHQobikpO3JldHVybiBGKHIsKGZ1bmN0aW9uKGUpe2MmJiF1dC5jYWxsKG4sZSl8fGN0KHQsZSxuW2VdKX0pKSx0fSx1dD1mdW5jdGlvbih0KXt2YXIgZT15KHQsITApLG49Si5jYWxsKHRoaXMsZSk7cmV0dXJuISh0aGlzPT09cSYmZihLLGUpJiYhZihYLGUpKSYmKCEobnx8IWYodGhpcyxlKXx8IWYoSyxlKXx8Zih0aGlzLFUpJiZ0aGlzW1VdW2VdKXx8bil9LGx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Zyh0KSxyPXkoZSwhMCk7aWYobiE9PXF8fCFmKEsscil8fGYoWCxyKSl7dmFyIG89WihuLHIpO3JldHVybiFvfHwhZihLLHIpfHxmKG4sVSkmJm5bVV1bcl18fChvLmVudW1lcmFibGU9ITApLG99fSxmdD1mdW5jdGlvbih0KXt2YXIgZT1ZKGcodCkpLG49W107cmV0dXJuIEYoZSwoZnVuY3Rpb24odCl7ZihLLHQpfHxmKFQsdCl8fG4ucHVzaCh0KX0pKSxufSxkdD1mdW5jdGlvbih0KXt2YXIgZT10PT09cSxuPVkoZT9YOmcodCkpLHI9W107cmV0dXJuIEYobiwoZnVuY3Rpb24odCl7IWYoSyx0KXx8ZSYmIWYocSx0KXx8ci5wdXNoKEtbdF0pfSkpLHJ9OyhzfHwoVz1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBXKXRocm93IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP1N0cmluZyhhcmd1bWVudHNbMF0pOnZvaWQgMCxlPV8odCksbj1mdW5jdGlvbih0KXt0aGlzPT09cSYmbi5jYWxsKFgsdCksZih0aGlzLFUpJiZmKHRoaXNbVV0sZSkmJih0aGlzW1VdW2VdPSExKSxvdCh0aGlzLGUsbSgxLHQpKX07cmV0dXJuIGMmJnJ0JiZvdChxLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLGl0KGUsdCl9LEEoVy5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gVih0aGlzKS50YWd9KSksUy5mPXV0LGsuZj1jdCxDLmY9bHQsdy5mPUUuZj1mdCxqLmY9ZHQsYyYmKCQoVy5wcm90b3R5cGUsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWKHRoaXMpLmRlc2NyaXB0aW9ufX0pLGF8fEEocSwicHJvcGVydHlJc0VudW1lcmFibGUiLHV0LHt1bnNhZmU6ITB9KSkpLHV8fChSLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGl0KEwodCksdCl9KSxyKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6IXMsc2hhbTohc30se1N5bWJvbDpXfSksRih4KGV0KSwoZnVuY3Rpb24odCl7UCh0KX0pKSxyKHt0YXJnZXQ6QixzdGF0OiEwLGZvcmNlZDohc30se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCk7aWYoZihRLGUpKXJldHVybiBRW2VdO3ZhciBuPVcoZSk7cmV0dXJuIFFbZV09bix0dFtuXT1lLG59LGtleUZvcjpmdW5jdGlvbih0KXtpZighYXQodCkpdGhyb3cgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBzeW1ib2wiKTtpZihmKHR0LHQpKXJldHVybiB0dFt0XX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7cnQ9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3J0PSExfX0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohcyxzaGFtOiFjfSx7Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/Yih0KTpzdChiKHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpjdCxkZWZpbmVQcm9wZXJ0aWVzOnN0LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpsdH0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohc30se2dldE93blByb3BlcnR5TmFtZXM6ZnQsZ2V0T3duUHJvcGVydHlTeW1ib2xzOmR0fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmwoKGZ1bmN0aW9uKCl7ai5mKDEpfSkpfSx7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKHQpe3JldHVybiBqLmYodih0KSl9fSksRykmJnIoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6IXN8fGwoKGZ1bmN0aW9uKCl7dmFyIHQ9VygpO3JldHVybiJbbnVsbF0iIT1HKFt0XSl8fCJ7fSIhPUcoe2E6dH0pfHwie30iIT1HKE9iamVjdCh0KSl9KSl9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixvPVt0XSxpPTE7YXJndW1lbnRzLmxlbmd0aD5pOylvLnB1c2goYXJndW1lbnRzW2krK10pO2lmKHI9ZSwocChlKXx8dm9pZCAwIT09dCkmJiFhdCh0KSlyZXR1cm4gZChlKXx8KGU9ZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgciYmKGU9ci5jYWxsKHRoaXMsdCxlKSksIWF0KGUpKXJldHVybiBlfSksb1sxXT1lLEcuYXBwbHkobnVsbCxvKX19KTtXLnByb3RvdHlwZVt6XXx8TyhXLnByb3RvdHlwZSx6LFcucHJvdG90eXBlLnZhbHVlT2YpLE4oVyxCKSxUW1VdPSEwfSw5ODMwNjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm1hdGNoQWxsIil9LDYxOTI0OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgibWF0Y2giKX0sMTIwMjU6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJyZXBsYWNlIil9LDI4MzM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzZWFyY2giKX0sOTY0NTM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzcGVjaWVzIil9LDcwODYzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic3BsaXQiKX0sMjQ4MDI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ0b1ByaW1pdGl2ZSIpfSwxODI3MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInRvU3RyaW5nVGFnIil9LDQyNDExOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidW5zY29wYWJsZXMiKX0sNzQyMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oOTk0MzEpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJjb3B5V2l0aGluIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gby5jYWxsKGkodGhpcyksdCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0pKX0sMTg1MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmV2ZXJ5LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJldmVyeSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDIwMjQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDY1ODk1KSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLmFwcGx5KGkodGhpcyksYXJndW1lbnRzKX0pKX0sMjgxNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbHRlcixpPW4oMTM5NzkpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWx0ZXIiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9byhhKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLG49aSh0aGlzLHRoaXMuY29uc3RydWN0b3IpLHI9MCxzPWUubGVuZ3RoLHU9bmV3KGMobikpKHMpO3M+cjspdVtyXT1lW3IrK107cmV0dXJuIHV9KSl9LDc2NDQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maW5kSW5kZXgsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmRJbmRleCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDMzOTAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maW5kLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjY4MDpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkZsb2F0MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMzgyODA6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJGbG9hdDY0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDg4NjM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5mb3JFYWNoLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmb3JFYWNoIiwoZnVuY3Rpb24odCl7byhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwxODU1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU2MjcpOygwLG4oNzMwNzQpLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QpKCJmcm9tIixuKDIwNDU1KSxyKX0sODE0NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oODU4MDMpLmluY2x1ZGVzLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJpbmNsdWRlcyIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDk1MTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDg1ODAzKS5pbmRleE9mLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJpbmRleE9mIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjQ0OTg6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQxNiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwxNzE1MjpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDcwMzczOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4MzY3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big3MzA3NCksaT1uKDUwMDYzKSxhPW4oMjM3MjQpKCJpdGVyYXRvciIpLGM9ci5VaW50OEFycmF5LHM9aS52YWx1ZXMsdT1pLmtleXMsbD1pLmVudHJpZXMsZj1vLmFUeXBlZEFycmF5LGQ9by5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHA9YyYmYy5wcm90b3R5cGVbYV0saD0hIXAmJigidmFsdWVzIj09cC5uYW1lfHxudWxsPT1wLm5hbWUpLHY9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKGYodGhpcykpfTtkKCJlbnRyaWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKGYodGhpcykpfSkpLGQoImtleXMiLChmdW5jdGlvbigpe3JldHVybiB1LmNhbGwoZih0aGlzKSl9KSksZCgidmFsdWVzIix2LCFoKSxkKGEsdiwhaCl9LDIzNTY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uam9pbjtpKCJqb2luIiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuYXBwbHkobyh0aGlzKSxhcmd1bWVudHMpfSkpfSwyNzI5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big0OTI0OSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImxhc3RJbmRleE9mIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfSkpfSwyNDQ1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkubWFwLGk9bigxMzk3OSksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoIm1hcCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGEodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3KGMoaSh0LHQuY29uc3RydWN0b3IpKSkoZSl9KSl9KSl9LDUwNDgyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDM1NjI3KSxpPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QpKCJvZiIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3KGkodGhpcykpKGUpO2U+dDspblt0XT1hcmd1bWVudHNbdCsrXTtyZXR1cm4gbn0pLG8pfSw3NTQ5OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMjM2NikucmlnaHQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZVJpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwzOTMyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEyMzY2KS5sZWZ0LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2UiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDg3NTY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9TWF0aC5mbG9vcjtpKCJyZXZlcnNlIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLG49byhlKS5sZW5ndGgscj1hKG4vMiksaT0wO2k8cjspdD1lW2ldLGVbaSsrXT1lWy0tbl0sZVtuXT10O3JldHVybiBlfSkpfSw4NDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDI3ODg0KSxpPW4oNjA1NTgpLGE9bigxOTIwOSksYz1uKDMyMTg3KSxzPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic2V0IiwoZnVuY3Rpb24odCl7cyh0aGlzKTt2YXIgZT1pKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDEpLG49dGhpcy5sZW5ndGgscj1hKHQpLGM9byhyLmxlbmd0aCksdT0wO2lmKGMrZT5uKXRocm93IFJhbmdlRXJyb3IoIldyb25nIGxlbmd0aCIpO2Zvcig7dTxjOyl0aGlzW2UrdV09clt1KytdfSksYygoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNldCh7fSl9KSkpfSwxNzYwNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMzk3OSksaT1uKDMyMTg3KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3Iscz1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT1bXS5zbGljZTtzKCJzbGljZSIsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXUuY2FsbChhKHRoaXMpLHQsZSkscj1vKHRoaXMsdGhpcy5jb25zdHJ1Y3RvciksaT0wLHM9bi5sZW5ndGgsbD1uZXcoYyhyKSkocyk7cz5pOylsW2ldPW5baSsrXTtyZXR1cm4gbH0pLGkoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zbGljZSgpfSkpKX0sNzM1NjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLnNvbWUsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInNvbWUiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwxMTg3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPVtdLnNvcnQ7aSgic29ydCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLmNhbGwobyh0aGlzKSx0KX0pKX0sNjA5Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMjc4ODQpLGk9big3Njk3NiksYT1uKDEzOTc5KSxjPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic3ViYXJyYXkiLChmdW5jdGlvbih0LGUpe3ZhciBuPWModGhpcykscj1uLmxlbmd0aCxzPWkodCxyKTtyZXR1cm4gbmV3KGEobixuLmNvbnN0cnVjdG9yKSkobi5idWZmZXIsbi5ieXRlT2Zmc2V0K3Mqbi5CWVRFU19QRVJfRUxFTUVOVCxvKCh2b2lkIDA9PT1lP3I6aShlLHIpKS1zKSl9KSl9LDQzOTUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDczMDc0KSxpPW4oMzIxODcpLGE9ci5JbnQ4QXJyYXksYz1vLmFUeXBlZEFycmF5LHM9by5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHU9W10udG9Mb2NhbGVTdHJpbmcsbD1bXS5zbGljZSxmPSEhYSYmaSgoZnVuY3Rpb24oKXt1LmNhbGwobmV3IGEoMSkpfSkpO3MoInRvTG9jYWxlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS5hcHBseShmP2wuY2FsbChjKHRoaXMpKTpjKHRoaXMpLGFyZ3VtZW50cyl9KSxpKChmdW5jdGlvbigpe3JldHVyblsxLDJdLnRvTG9jYWxlU3RyaW5nKCkhPW5ldyBhKFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSkpfHwhaSgoZnVuY3Rpb24oKXthLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLDJdKX0pKSl9LDkxMzQ3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxvPW4oMzIxODcpLGk9big4OTU1OCkuVWludDhBcnJheSxhPWkmJmkucHJvdG90eXBlfHx7fSxjPVtdLnRvU3RyaW5nLHM9W10uam9pbjtvKChmdW5jdGlvbigpe2MuY2FsbCh7fSl9KSkmJihjPWZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0pO3ZhciB1PWEudG9TdHJpbmchPWM7cigidG9TdHJpbmciLGMsdSl9LDE2OTc4OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDE2IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDM3OTg3OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDgwNzU3OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sNjk4Nzk6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSksITApfSw1ODYwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89big4OTU1OCksaT1uKDE5MjYpLGE9big5NjAzKSxjPW4oODE5NTEpLHM9big3MTMwMyksdT1uKDEwNTkyKSxsPW4oODk4MjcpLmVuZm9yY2UsZj1uKDE5NTkxKSxkPSFvLkFjdGl2ZVhPYmplY3QmJiJBY3RpdmVYT2JqZWN0ImluIG8scD1PYmplY3QuaXNFeHRlbnNpYmxlLGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sdj10LmV4cG9ydHM9YygiV2Vha01hcCIsaCxzKTtpZihmJiZkKXtyPXMuZ2V0Q29uc3RydWN0b3IoaCwiV2Vha01hcCIsITApLGEuUkVRVUlSRUQ9ITA7dmFyIGc9di5wcm90b3R5cGUseT1nLmRlbGV0ZSxtPWcuaGFzLGI9Zy5nZXQseD1nLnNldDtpKGcse2RlbGV0ZTpmdW5jdGlvbih0KXtpZih1KHQpJiYhcCh0KSl7dmFyIGU9bCh0aGlzKTtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgcikseS5jYWxsKHRoaXMsdCl8fGUuZnJvemVuLmRlbGV0ZSh0KX1yZXR1cm4geS5jYWxsKHRoaXMsdCl9LGhhczpmdW5jdGlvbih0KXtpZih1KHQpJiYhcCh0KSl7dmFyIGU9bCh0aGlzKTtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgciksbS5jYWxsKHRoaXMsdCl8fGUuZnJvemVuLmhhcyh0KX1yZXR1cm4gbS5jYWxsKHRoaXMsdCl9LGdldDpmdW5jdGlvbih0KXtpZih1KHQpJiYhcCh0KSl7dmFyIGU9bCh0aGlzKTtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgciksbS5jYWxsKHRoaXMsdCk/Yi5jYWxsKHRoaXMsdCk6ZS5mcm96ZW4uZ2V0KHQpfXJldHVybiBiLmNhbGwodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7aWYodSh0KSYmIXAodCkpe3ZhciBuPWwodGhpcyk7bi5mcm96ZW58fChuLmZyb3plbj1uZXcgciksbS5jYWxsKHRoaXMsdCk/eC5jYWxsKHRoaXMsdCxlKTpuLmZyb3plbi5zZXQodCxlKX1lbHNlIHguY2FsbCh0aGlzLHQsZSk7cmV0dXJuIHRoaXN9fSl9fSw0NTE1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oODE5NTEpKCJXZWFrU2V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG4oNzEzMDMpKX0sOTY3NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big2NDk2NSksYT1uKDcxODQyKSxjPW4oNTA4NjgpLHM9bigzNzYyMCksdT1uKDE0MjA5KSxsPW4oNDEzMzQpLGY9big2Njk3MSksZD1uKDg5ODI3KSxwPWQuc2V0LGg9ZC5nZXR0ZXJGb3IoIkFnZ3JlZ2F0ZUVycm9yIiksdj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYoIShuIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7YSYmKG49YShuZXcgRXJyb3IoZSksaShuKSkpO3ZhciByPVtdO3JldHVybiBsKHQsci5wdXNoLHIpLG8/cChuLHtlcnJvcnM6cix0eXBlOiJBZ2dyZWdhdGVFcnJvciJ9KTpuLmVycm9ycz1yLHZvaWQgMCE9PWUmJmYobiwibWVzc2FnZSIsU3RyaW5nKGUpKSxufTt2LnByb3RvdHlwZT1jKEVycm9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6dSg1LHYpLG1lc3NhZ2U6dSg1LCIiKSxuYW1lOnUoNSwiQWdncmVnYXRlRXJyb3IiKX0pLG8mJnMuZih2LnByb3RvdHlwZSwiZXJyb3JzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcykuZXJyb3JzfSxjb25maWd1cmFibGU6ITB9KSxyKHtnbG9iYWw6ITB9LHtBZ2dyZWdhdGVFcnJvcjp2fSl9LDE0MDg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjE5OSksaT1PYmplY3QuaXNGcm96ZW4sYT1mdW5jdGlvbih0LGUpe2lmKCFpfHwhbyh0KXx8IWkodCkpcmV0dXJuITE7Zm9yKHZhciBuLHI9MCxhPXQubGVuZ3RoO3I8YTspaWYoISgic3RyaW5nIj09dHlwZW9mKG49dFtyKytdKXx8ZSYmdm9pZCAwPT09bikpcmV0dXJuITE7cmV0dXJuIDAhPT1hfTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwfSx7aXNUZW1wbGF0ZU9iamVjdDpmdW5jdGlvbih0KXtpZighYSh0LCEwKSlyZXR1cm4hMTt2YXIgZT10LnJhdztyZXR1cm4hKGUubGVuZ3RoIT09dC5sZW5ndGh8fCFhKGUsITEpKX19KX0sNDkzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big3NjUxMyksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9bigzNzYyMCkuZjtyJiYhKCJsYXN0SW5kZXgiaW5bXSkmJihjKEFycmF5LnByb3RvdHlwZSwibGFzdEluZGV4Iix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWkodGhpcyksZT1hKHQubGVuZ3RoKTtyZXR1cm4gMD09ZT8wOmUtMX19KSxvKCJsYXN0SW5kZXgiKSl9LDYzNjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oNzY1MTMpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oMzc2MjApLmY7ciYmISgibGFzdEl0ZW0iaW5bXSkmJihjKEFycmF5LnByb3RvdHlwZSwibGFzdEl0ZW0iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKSxlPWEodC5sZW5ndGgpO3JldHVybiAwPT1lP3ZvaWQgMDp0W2UtMV19LHNldDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmxlbmd0aCk7cmV0dXJuIGVbMD09bj8wOm4tMV09dH19KSxvKCJsYXN0SXRlbSIpKX0sNDcwMDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4uaXRlcmF0b3I7cmV0dXJuIGUucmVzb2x2ZShvKG4ubmV4dC5jYWxsKHIsdCkpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0KS5kb25lPyhuLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk6e2RvbmU6ITEsdmFsdWU6W24uaW5kZXgrKyx0LnZhbHVlXX19KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7YXNJbmRleGVkUGFpcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoe2l0ZXJhdG9yOm8odGhpcyksaW5kZXg6MH0pfX0pfSw2MTI5ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big1OTM3OSksaT1uKDY2OTcxKSxhPW4oNzYyOTgpLGM9bigyMzcyNCkscz1uKDYzODQ1KSx1PW4oNjU2NzIpLGw9YygidG9TdHJpbmdUYWciKSxmPWZ1bmN0aW9uKCl7byh0aGlzLGYpfTtmLnByb3RvdHlwZT1zLGEocyxsKXx8aShzLGwsIkFzeW5jSXRlcmF0b3IiKSxhKHMsImNvbnN0cnVjdG9yIikmJnMuY29uc3RydWN0b3IhPT1PYmplY3R8fGkocywiY29uc3RydWN0b3IiLGYpLHIoe2dsb2JhbDohMCxmb3JjZWQ6dX0se0FzeW5jSXRlcmF0b3I6Zn0pfSw2NzQ2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihyLGkpe3ZhciBhPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShvKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3Isbi5yZW1haW5pbmc/dm9pZCAwOnQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e28odCkuZG9uZT8obi5kb25lPSEwLHIoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSkpOm4ucmVtYWluaW5nPyhuLnJlbWFpbmluZy0tLGEoKSk6cih7ZG9uZTohMSx2YWx1ZTp0LnZhbHVlfSl9Y2F0Y2godCl7aSh0KX19KSxpKX1jYXRjaCh0KXtpKHQpfX07YSgpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2Ryb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDkwNjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmV2ZXJ5O3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDIwMTI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4uZmlsdGVyZXI7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihvLGEpe3ZhciBjPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShpKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYoaSh0KS5kb25lKW4uZG9uZT0hMCxvKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO2Vsc2V7dmFyIHM9dC52YWx1ZTtlLnJlc29sdmUocihzKSkudGhlbigoZnVuY3Rpb24odCl7dD9vKHtkb25lOiExLHZhbHVlOnN9KTpjKCl9KSxhKX19Y2F0Y2godCl7YSh0KX19KSxhKX1jYXRjaCh0KXthKHQpfX07YygpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOmkodGhpcyksZmlsdGVyZXI6byh0KX0pfX0pfSwyMTM3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZmluZDtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDM4OTg0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCksYz1uKDY2OTIwKSxzPWEoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scixhPXRoaXMscz1hLm1hcHBlcjtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHUsbCl7dmFyIGY9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKGkoYS5uZXh0LmNhbGwoYS5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpKHQpLmRvbmU/KGEuZG9uZT0hMCx1KHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pKTplLnJlc29sdmUocyh0LnZhbHVlKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKHZvaWQgMCE9PShyPWModCkpKXJldHVybiBhLmlubmVySXRlcmF0b3I9bj1pKHIuY2FsbCh0KSksYS5pbm5lck5leHQ9byhuLm5leHQpLGQoKTtsKFR5cGVFcnJvcigiLmZsYXRNYXAgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QiKSl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9fSxkPWZ1bmN0aW9uKCl7aWYobj1hLmlubmVySXRlcmF0b3IpdHJ5e2UucmVzb2x2ZShpKGEuaW5uZXJOZXh0LmNhbGwobikpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aSh0KS5kb25lPyhhLmlubmVySXRlcmF0b3I9YS5pbm5lck5leHQ9bnVsbCxmKCkpOnUoe2RvbmU6ITEsdmFsdWU6dC52YWx1ZX0pfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX1lbHNlIGYoKX07ZCgpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpLGlubmVySXRlcmF0b3I6bnVsbCxpbm5lck5leHQ6bnVsbH0pfX0pfSw2OTIzNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZm9yRWFjaDtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDI2NDk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNTYyMzgpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTkyMDkpLHM9bigyNzAwNCksdT1uKDY2OTIwKSxsPW8uQXN5bmNJdGVyYXRvcixmPXMoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpfSksITApO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIsc3RhdDohMH0se2Zyb206ZnVuY3Rpb24odCl7dmFyIGUsbj1jKHQpLHI9dShuKTtpZihudWxsIT1yKXtpZigoZT1pKHIpLmNhbGwobikpaW5zdGFuY2VvZiBsKXJldHVybiBlfWVsc2UgZT1uO3JldHVybiBuZXcgZih7aXRlcmF0b3I6ZX0pfX0pfSw1MzE2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLm1hcHBlcjtyZXR1cm4gZS5yZXNvbHZlKGkobi5uZXh0LmNhbGwobi5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmRvbmU/KG4uZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTplLnJlc29sdmUocih0LnZhbHVlKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2RvbmU6ITEsdmFsdWU6dH19KSl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KX0pfX0pfSw3Mzk0OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNzcwMSkoIlByb21pc2UiKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPW8oZS5uZXh0KSxyPWFyZ3VtZW50cy5sZW5ndGg8MixjPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtyZXR1cm4gbyh0KSxuZXcgYSgoZnVuY3Rpb24obyxzKXt2YXIgdT1mdW5jdGlvbigpe3RyeXthLnJlc29sdmUoaShuLmNhbGwoZSkpKS50aGVuKChmdW5jdGlvbihlKXt0cnl7aWYoaShlKS5kb25lKXI/cyhUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKSk6byhjKTtlbHNle3ZhciBuPWUudmFsdWU7cj8ocj0hMSxjPW4sdSgpKTphLnJlc29sdmUodChjLG4pKS50aGVuKChmdW5jdGlvbih0KXtjPXQsdSgpfSkscyl9fWNhdGNoKHQpe3ModCl9fSkscyl9Y2F0Y2godCl7cyh0KX19O3UoKX0pKX19KX0sODgyMTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLnNvbWU7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSw3Mzc2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oMjcwMDQpKChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1haW5pbmctLT90aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpOih0aGlzLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dGFrZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNDIxOTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLnRvQXJyYXk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfX0pfSwzNjU3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0Njg1KSxpPW4oNzcwMSksYT1uKDUwODY4KSxjPWZ1bmN0aW9uKCl7dmFyIHQ9aSgiT2JqZWN0IiwiZnJlZXplIik7cmV0dXJuIHQ/dChhKG51bGwpKTphKG51bGwpfTtyKHtnbG9iYWw6ITB9LHtjb21wb3NpdGVLZXk6ZnVuY3Rpb24oKXtyZXR1cm4gby5hcHBseShPYmplY3QsYXJndW1lbnRzKS5nZXQoIm9iamVjdCIsYyl9fSl9LDQzMDg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ2ODUpLGk9big3NzAxKTtyKHtnbG9iYWw6ITB9LHtjb21wb3NpdGVTeW1ib2w6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJndW1lbnRzWzBdP2koIlN5bWJvbCIpLmZvcihhcmd1bWVudHNbMF0pOm8uYXBwbHkobnVsbCxhcmd1bWVudHMpLmdldCgic3ltYm9sIixpKCJTeW1ib2wiKSl9fSl9LDk5NjI4OmZ1bmN0aW9uKHQsZSxuKXtuKDcxNjIyKX0sOTI2MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big4ODA3KSgoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtpZighKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuW3RoaXMuaW5kZXgrKyxlLnZhbHVlXX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7YXNJbmRleGVkUGFpcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoe2l0ZXJhdG9yOm8odGhpcyksaW5kZXg6MH0pfX0pfSw0MzMzMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDU5Mzc5KSxhPW4oNjY5NzEpLGM9bigzMjE4Nykscz1uKDc2Mjk4KSx1PW4oMjM3MjQpLGw9big2NDE3NikuSXRlcmF0b3JQcm90b3R5cGUsZj1uKDY1NjcyKSxkPXUoIml0ZXJhdG9yIikscD11KCJ0b1N0cmluZ1RhZyIpLGg9by5JdGVyYXRvcix2PWZ8fCJmdW5jdGlvbiIhPXR5cGVvZiBofHxoLnByb3RvdHlwZSE9PWx8fCFjKChmdW5jdGlvbigpe2goe30pfSkpLGc9ZnVuY3Rpb24oKXtpKHRoaXMsZyl9O2YmJmEobD17fSxkLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHMobCxwKXx8YShsLHAsIkl0ZXJhdG9yIiksIXYmJnMobCwiY29uc3RydWN0b3IiKSYmbC5jb25zdHJ1Y3RvciE9PU9iamVjdHx8YShsLCJjb25zdHJ1Y3RvciIsZyksZy5wcm90b3R5cGU9bCxyKHtnbG9iYWw6ITAsZm9yY2VkOnZ9LHtJdGVyYXRvcjpnfSl9LDIwNDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9big4ODA3KSgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5pdGVyYXRvcixyPXRoaXMubmV4dDt0aGlzLnJlbWFpbmluZzspaWYodGhpcy5yZW1haW5pbmctLSxlPW8oci5jYWxsKG4pKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKGU9byhyLmNhbGwobix0KSksISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVybiBlLnZhbHVlfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtkcm9wOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw1NDU1NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzKSxpKHQpLCFvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKCF0KGUpKXJldHVybiBvLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNDA2Mzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDg4MDcpLGM9bigxMjI3OCkscz1hKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMuaXRlcmF0b3Isbz10aGlzLmZpbHRlcmVyLGE9dGhpcy5uZXh0Ozspe2lmKGU9aShhLmNhbGwocix0KSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihuPWUudmFsdWUsYyhyLG8sbikpcmV0dXJuIG59fSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLGZpbHRlcmVyOm8odCl9KX19KX0sOTY2NTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzKSxpKHQpLG8odGhpcywoZnVuY3Rpb24oZSl7aWYodChlKSlyZXR1cm4gby5zdG9wKGUpfSksdm9pZCAwLCExLCEwKS5yZXN1bHR9fSl9LDE0Njg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big3Mzg5MCksYz1uKDg4MDcpLHM9bigxMjI3OCksdT1jKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGMsdT10aGlzLml0ZXJhdG9yOzspe2lmKGM9dGhpcy5pbm5lckl0ZXJhdG9yKXtpZighKGU9aSh0aGlzLmlubmVyTmV4dC5jYWxsKGMpKSkuZG9uZSlyZXR1cm4gZS52YWx1ZTt0aGlzLmlubmVySXRlcmF0b3I9dGhpcy5pbm5lck5leHQ9bnVsbH1pZihlPWkodGhpcy5uZXh0LmNhbGwodSx0KSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihuPXModSx0aGlzLm1hcHBlcixlLnZhbHVlKSx2b2lkIDA9PT0ocj1hKG4pKSl0aHJvdyBUeXBlRXJyb3IoIi5mbGF0TWFwIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0Iik7dGhpcy5pbm5lckl0ZXJhdG9yPWM9aShyLmNhbGwobikpLHRoaXMuaW5uZXJOZXh0PW8oYy5uZXh0KX19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1KHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpLGlubmVySXRlcmF0b3I6bnVsbCxpbm5lck5leHQ6bnVsbH0pfX0pfSw3Mzc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmb3JFYWNoOmZ1bmN0aW9uKHQpe28oaSh0aGlzKSx0LHZvaWQgMCwhMSwhMCl9fSl9LDI3NDI4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNTYyMzgpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTkyMDkpLHM9big4ODA3KSx1PW4oNzM4OTApLGw9by5JdGVyYXRvcixmPXMoKGZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7aWYoISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVybiBlLnZhbHVlfSksITApO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHN0YXQ6ITB9LHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLG49Yyh0KSxyPXUobik7aWYobnVsbCE9cil7aWYoKGU9aShyKS5jYWxsKG4pKWluc3RhbmNlb2YgbClyZXR1cm4gZX1lbHNlIGU9bjtyZXR1cm4gbmV3IGYoe2l0ZXJhdG9yOmV9KX19KX0sMzM0MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDg4MDcpLGM9bigxMjI3OCkscz1hKChmdW5jdGlvbih0KXt2YXIgZT10aGlzLml0ZXJhdG9yLG49aSh0aGlzLm5leHQuY2FsbChlLHQpKTtpZighKHRoaXMuZG9uZT0hIW4uZG9uZSkpcmV0dXJuIGMoZSx0aGlzLm1hcHBlcixuLnZhbHVlKX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KX0pfX0pfSw4NDM4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7YSh0aGlzKSxpKHQpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MixuPWU/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihvKHRoaXMsKGZ1bmN0aW9uKHIpe2U/KGU9ITEsbj1yKTpuPXQobixyKX0pLHZvaWQgMCwhMSwhMCksZSl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gbn19KX0sNTk2MjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzKSxpKHQpLG8odGhpcywoZnVuY3Rpb24oZSl7aWYodChlKSlyZXR1cm4gby5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDMyODUzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9big4ODA3KSgoZnVuY3Rpb24odCl7aWYodGhpcy5yZW1haW5pbmctLSl7dmFyIGU9byh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtyZXR1cm4odGhpcy5kb25lPSEhZS5kb25lKT92b2lkIDA6ZS52YWx1ZX10aGlzLmRvbmU9ITB9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3Rha2U6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDY3MDcyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODc1NzkpLGE9W10ucHVzaDtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dG9BcnJheTpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiBvKGkodGhpcyksYSx0LCExLCEwKSx0fX0pfSw0ODQ0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDM1NTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtldmVyeTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4hcyhuLChmdW5jdGlvbih0LG4pe2lmKCFyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDE4ODQ0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe3Iobix0LGUpJiZkLmNhbGwobyx0LG4pfSksdm9pZCAwLCEwLCEwKSxvfX0pfSw0OTA1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmRLZXk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKHQpfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDM1NjU2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3Aobil9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sMzg3OTI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNTM1MTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCk7cih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtncm91cEJ5OmZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHRoaXM7aShlKTt2YXIgcj1pKG4uaGFzKSxhPWkobi5nZXQpLGM9aShuLnNldCk7cmV0dXJuIG8odCwoZnVuY3Rpb24odCl7dmFyIG89ZSh0KTtyLmNhbGwobixvKT9hLmNhbGwobixvKS5wdXNoKHQpOmMuY2FsbChuLG8sW3RdKX0pKSxufX0pfSw5Mzg0MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDE5ODkpLGM9bigzODE4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBzKGEoaSh0aGlzKSksKGZ1bmN0aW9uKGUsbil7aWYoYyhuLHQpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sOTkyNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCk7cih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtrZXlCeTpmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB0aGlzO2koZSk7dmFyIHI9aShuLnNldCk7cmV0dXJuIG8odCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sZSh0KSx0KX0pKSxufX0pfSw2NjIyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDE5ODkpLGM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtrZXlPZjpmdW5jdGlvbih0KXtyZXR1cm4gYyhhKGkodGhpcykpLChmdW5jdGlvbihlLG4pe2lmKG49PT10KXJldHVybiBjLnN0b3AoZSl9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sNzE3MDA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcEtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe2QuY2FsbChvLHIobix0LGUpLG4pfSksdm9pZCAwLCEwLCEwKSxvfX0pfSw2OTUyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwVmFsdWVzOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtkLmNhbGwobyx0LHIobix0LGUpKX0pLHZvaWQgMCwhMCwhMCksb319KX0sMjc3MzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodGhpcyksbj1hKGUuc2V0KSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoOyljKGFyZ3VtZW50c1tyKytdLG4sZSwhMCk7cmV0dXJuIGV9fSl9LDE5OTA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDc3MzY5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG89cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKGEodCkscyhuLChmdW5jdGlvbihuLGkpe3I/KHI9ITEsbz1pKTpvPXQobyxpLG4sZSl9KSx2b2lkIDAsITAsITApLHIpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgbWFwIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBvfX0pfSw2OTg0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDQzMjkwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpuKDY1NjcyKX0se3VwZGF0ZU9ySW5zZXJ0Om4oNDc5MjcpfSl9LDk3OTI4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHt1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1pKHRoaXMpLHI9YXJndW1lbnRzLmxlbmd0aDthKGUpO3ZhciBvPW4uaGFzKHQpO2lmKCFvJiZyPDMpdGhyb3cgVHlwZUVycm9yKCJVcGRhdGluZyBhYnNlbnQgdmFsdWUiKTt2YXIgYz1vP24uZ2V0KHQpOmEocj4yP2FyZ3VtZW50c1syXTp2b2lkIDApKHQsbik7cmV0dXJuIG4uc2V0KHQsZShjLHQsbikpLG59fSl9LDE0NjgyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpuKDY1NjcyKX0se3Vwc2VydDpuKDQ3OTI3KX0pfSw3MDIyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLm1pbixpPU1hdGgubWF4O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbyhuLGkoZSx0KSl9fSl9LDIzOTk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtERUdfUEVSX1JBRDpNYXRoLlBJLzE4MH0pfSwxNjgwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz0xODAvTWF0aC5QSTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtkZWdyZWVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Km99fSl9LDY3MTQxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzc0MiksaT1uKDUzMjUxKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtmc2NhbGU6ZnVuY3Rpb24odCxlLG4scixhKXtyZXR1cm4gaShvKHQsZSxuLHIsYSkpfX0pfSwzMDYxMzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2lhZGRoOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXQ+Pj4wLGk9bj4+PjA7cmV0dXJuKGU+Pj4wKSsocj4+PjApKygobyZpfChvfGkpJn4obytpPj4+MCkpPj4+MzEpfDB9fSl9LDQ5Nzk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpbXVsaDpmdW5jdGlvbih0LGUpe3ZhciBuPTY1NTM1LHI9K3Qsbz0rZSxpPXImbixhPW8mbixjPXI+PjE2LHM9bz4+MTYsdT0oYyphPj4+MCkrKGkqYT4+PjE2KTtyZXR1cm4gYypzKyh1Pj4xNikrKChpKnM+Pj4wKSsodSZuKT4+MTYpfX0pfSw2ODQwNjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2lzdWJoOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXQ+Pj4wLGk9bj4+PjA7cmV0dXJuKGU+Pj4wKS0ocj4+PjApLSgofm8maXx+KG9eaSkmby1pPj4+MCk+Pj4zMSl8MH19KX0sOTA3Njk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtSQURfUEVSX0RFRzoxODAvTWF0aC5QSX0pfSw1Nzg5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLlBJLzE4MDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtyYWRpYW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0Km99fSl9LDE1NzIyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2NhbGU6big3NzQyKX0pfSwxNzY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big4OTU0MiksYT1uKDcxMjAxKSxjPW4oODk4MjcpLHM9IlNlZWRlZCBSYW5kb20iLHU9IlNlZWRlZCBSYW5kb20gR2VuZXJhdG9yIixsPWMuc2V0LGY9Yy5nZXR0ZXJGb3IodSksZD1hKChmdW5jdGlvbih0KXtsKHRoaXMse3R5cGU6dSxzZWVkOnQlMjE0NzQ4MzY0N30pfSkscywoZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMpO3JldHVybnt2YWx1ZTooMTA3Mzc0MTgyMyYodC5zZWVkPSgxMTAzNTE1MjQ1KnQuc2VlZCsxMjM0NSklMjE0NzQ4MzY0NykpLzEwNzM3NDE4MjMsZG9uZTohMX19KSk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohMH0se3NlZWRlZFBSTkc6ZnVuY3Rpb24odCl7dmFyIGU9byh0KS5zZWVkO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcignTWF0aC5zZWVkZWRQUk5HKCkgYXJndW1lbnQgc2hvdWxkIGhhdmUgYSAic2VlZCIgZmllbGQgd2l0aCBhIGZpbml0ZSB2YWx1ZS4nKTtyZXR1cm4gbmV3IGQoZSl9fSl9LDc3OTA3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2lnbmJpdDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk9PXQmJjA9PXQ/MS90PT0tMS8wOnQ8MH19KX0sNDQ2NDY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHt1bXVsaDpmdW5jdGlvbih0LGUpe3ZhciBuPTY1NTM1LHI9K3Qsbz0rZSxpPXImbixhPW8mbixjPXI+Pj4xNixzPW8+Pj4xNix1PShjKmE+Pj4wKSsoaSphPj4+MTYpO3JldHVybiBjKnMrKHU+Pj4xNikrKChpKnM+Pj4wKSsodSZuKT4+PjE2KX19KX0sNzU2NDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDM0MTYpLGk9big3ODQ2KSxhPSJJbnZhbGlkIG51bWJlciByZXByZXNlbnRhdGlvbiIsYz0vXltcZGEtel0rJC87cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtmcm9tU3RyaW5nOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixzPTE7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcihhKTtpZighdC5sZW5ndGgpdGhyb3cgU3ludGF4RXJyb3IoYSk7aWYoIi0iPT10LmNoYXJBdCgwKSYmKHM9LTEsISh0PXQuc2xpY2UoMSkpLmxlbmd0aCkpdGhyb3cgU3ludGF4RXJyb3IoYSk7aWYoKG49dm9pZCAwPT09ZT8xMDpvKGUpKTwyfHxuPjM2KXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgcmFkaXgiKTtpZighYy50ZXN0KHQpfHwocj1pKHQsbikpLnRvU3RyaW5nKG4pIT09dCl0aHJvdyBTeW50YXhFcnJvcihhKTtyZXR1cm4gcypyfX0pfSw4NDMwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQwMyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpdGVyYXRlRW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwiZW50cmllcyIpfX0pfSw3Mjk2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQwMyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpdGVyYXRlS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwia2V5cyIpfX0pfSw1NjM1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQwMyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpdGVyYXRlVmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJ2YWx1ZXMiKX19KX0sMjAyMzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big2NzUzOCksYT1uKDg2NDcwKSxjPW4oODc1NzkpLHM9bigxMDU5MiksdT1uKDU5Mzc5KSxsPW4oMzc2MjApLmYsZj1uKDY2OTcxKSxkPW4oMTkyNikscD1uKDMxMDc0KSxoPW4oNDEzMzQpLHY9big4MzYyMCksZz1uKDIzNzI0KSx5PW4oODk4MjcpLG09Zygib2JzZXJ2YWJsZSIpLGI9eS5nZXQseD15LnNldCx3PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDphKHQpfSxFPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xlYW51cDtpZihlKXt0LmNsZWFudXA9dm9pZCAwO3RyeXtlKCl9Y2F0Y2godCl7dih0KX19fSxqPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10Lm9ic2VydmVyfSxDPWZ1bmN0aW9uKHQsZSl7aWYoIW8pe3QuY2xvc2VkPSEwO3ZhciBuPWUuc3Vic2NyaXB0aW9uT2JzZXJ2ZXI7biYmKG4uY2xvc2VkPSEwKX1lLm9ic2VydmVyPXZvaWQgMH0saz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9eCh0aGlzLHtjbGVhbnVwOnZvaWQgMCxvYnNlcnZlcjpjKHQpLHN1YnNjcmlwdGlvbk9ic2VydmVyOnZvaWQgMH0pO298fCh0aGlzLmNsb3NlZD0hMSk7dHJ5eyhuPXcodC5zdGFydCkpJiZuLmNhbGwodCx0aGlzKX1jYXRjaCh0KXt2KHQpfWlmKCFqKHIpKXt2YXIgaT1yLnN1YnNjcmlwdGlvbk9ic2VydmVyPW5ldyBTKHRoaXMpO3RyeXt2YXIgcz1lKGkpLHU9cztudWxsIT1zJiYoci5jbGVhbnVwPSJmdW5jdGlvbiI9PXR5cGVvZiBzLnVuc3Vic2NyaWJlP2Z1bmN0aW9uKCl7dS51bnN1YnNjcmliZSgpfTphKHMpKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBpLmVycm9yKHQpfWoocikmJkUocil9fTtrLnByb3RvdHlwZT1kKHt9LHt1bnN1YnNjcmliZTpmdW5jdGlvbigpe3ZhciB0PWIodGhpcyk7aih0KXx8KEModGhpcyx0KSxFKHQpKX19KSxvJiZsKGsucHJvdG90eXBlLCJjbG9zZWQiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGooYih0aGlzKSl9fSk7dmFyIFM9ZnVuY3Rpb24odCl7eCh0aGlzLHtzdWJzY3JpcHRpb246dH0pLG98fCh0aGlzLmNsb3NlZD0hMSl9O1MucHJvdG90eXBlPWQoe30se25leHQ6ZnVuY3Rpb24odCl7dmFyIGU9YihiKHRoaXMpLnN1YnNjcmlwdGlvbik7aWYoIWooZSkpe3ZhciBuPWUub2JzZXJ2ZXI7dHJ5e3ZhciByPXcobi5uZXh0KTtyJiZyLmNhbGwobix0KX1jYXRjaCh0KXt2KHQpfX19LGVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPWIodGhpcykuc3Vic2NyaXB0aW9uLG49YihlKTtpZighaihuKSl7dmFyIHI9bi5vYnNlcnZlcjtDKGUsbik7dHJ5e3ZhciBvPXcoci5lcnJvcik7bz9vLmNhbGwocix0KTp2KHQpfWNhdGNoKHQpe3YodCl9RShuKX19LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKS5zdWJzY3JpcHRpb24sZT1iKHQpO2lmKCFqKGUpKXt2YXIgbj1lLm9ic2VydmVyO0ModCxlKTt0cnl7dmFyIHI9dyhuLmNvbXBsZXRlKTtyJiZyLmNhbGwobil9Y2F0Y2godCl7dih0KX1FKGUpfX19KSxvJiZsKFMucHJvdG90eXBlLCJjbG9zZWQiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGooYihiKHRoaXMpLnN1YnNjcmlwdGlvbikpfX0pO3ZhciBPPWZ1bmN0aW9uKHQpe3UodGhpcyxPLCJPYnNlcnZhYmxlIikseCh0aGlzLHtzdWJzY3JpYmVyOmEodCl9KX07ZChPLnByb3RvdHlwZSx7c3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIG5ldyBrKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3tuZXh0OnQsZXJyb3I6ZT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsY29tcGxldGU6ZT4yP2FyZ3VtZW50c1syXTp2b2lkIDB9OnModCk/dDp7fSxiKHRoaXMpLnN1YnNjcmliZXIpfX0pLGQoTyx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOk8sbj13KGModClbbV0pO2lmKG4pe3ZhciByPWMobi5jYWxsKHQpKTtyZXR1cm4gci5jb25zdHJ1Y3Rvcj09PWU/cjpuZXcgZSgoZnVuY3Rpb24odCl7cmV0dXJuIHIuc3Vic2NyaWJlKHQpfSkpfXZhciBvPXAodCk7cmV0dXJuIG5ldyBlKChmdW5jdGlvbih0KXtoKG8sKGZ1bmN0aW9uKGUpe2lmKHQubmV4dChlKSx0LmNsb3NlZClyZXR1cm4gaC5zdG9wKCl9KSx2b2lkIDAsITEsITApLHQuY29tcGxldGUoKX0pKX0sb2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpPLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPWFyZ3VtZW50c1tyKytdO3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCl7Zm9yKHZhciByPTA7cjxlO3IrKylpZih0Lm5leHQobltyXSksdC5jbG9zZWQpcmV0dXJuO3QuY29tcGxldGUoKX0pKX19KSxmKE8ucHJvdG90eXBlLG0sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscih7Z2xvYmFsOiEwfSx7T2JzZXJ2YWJsZTpPfSksaSgiT2JzZXJ2YWJsZSIpfSwyNzc1OmZ1bmN0aW9uKHQsZSxuKXtuKDE3NjI5KX0sNzMyMjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big3NzAxKSxhPW4oODMwODMpLGM9bigzMTE1KSxzPW4oNDEzMzQpLHU9Ik5vIG9uZSBwcm9taXNlIHJlc29sdmVkIjtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbnk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWEuZihlKSxyPW4ucmVzb2x2ZSxsPW4ucmVqZWN0LGY9YygoZnVuY3Rpb24oKXt2YXIgbj1vKGUucmVzb2x2ZSksYT1bXSxjPTAsZj0xLGQ9ITE7cyh0LChmdW5jdGlvbih0KXt2YXIgbz1jKysscz0hMTthLnB1c2godm9pZCAwKSxmKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7c3x8ZHx8KGQ9ITAscih0KSl9KSwoZnVuY3Rpb24odCl7c3x8ZHx8KHM9ITAsYVtvXT10LC0tZnx8bChuZXcoaSgiQWdncmVnYXRlRXJyb3IiKSkoYSx1KSkpfSkpfSkpLC0tZnx8bChuZXcoaSgiQWdncmVnYXRlRXJyb3IiKSkoYSx1KSl9KSk7cmV0dXJuIGYuZXJyb3ImJmwoZi52YWx1ZSksbi5wcm9taXNlfX0pfSwxMTA3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MzA4MyksaT1uKDMxMTUpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se3RyeTpmdW5jdGlvbih0KXt2YXIgZT1vLmYodGhpcyksbj1pKHQpO3JldHVybihuLmVycm9yP2UucmVqZWN0OmUucmVzb2x2ZSkobi52YWx1ZSksZS5wcm9taXNlfX0pfSw0OTY0MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uc2V0O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDQ/dm9pZCAwOmEoYXJndW1lbnRzWzNdKTtjKHQsZSxpKG4pLHIpfX0pfSw3NDk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uZ2V0TWFwLHM9by5zdG9yZTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pLHI9YyhpKGUpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZSh0KSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIG89cy5nZXQoZSk7cmV0dXJuIG8uZGVsZXRlKG4pLCEhby5zaXplfHxzLmRlbGV0ZShlKX19KX0sNDkxNTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDA2MSksaT1uKDc3MDIwKSxhPW4oODc1NzkpLGM9big2NDk2NSkscz1uKDQxMzM0KSx1PWkua2V5cyxsPWkudG9LZXksZj1mdW5jdGlvbih0LGUpe3ZhciBuPXUodCxlKSxyPWModCk7aWYobnVsbD09PXIpcmV0dXJuIG47dmFyIGksYSxsPWYocixlKTtyZXR1cm4gbC5sZW5ndGg/bi5sZW5ndGg/KGk9bmV3IG8obi5jb25jYXQobCkpLHMoaSwoYT1bXSkucHVzaCxhKSxhKTpsOm59O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmwoYXJndW1lbnRzWzFdKTtyZXR1cm4gZihhKHQpLGUpfX0pfSw2OTQ1OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9big2NDk2NSksYz1vLmhhcyxzPW8uZ2V0LHU9by50b0tleSxsPWZ1bmN0aW9uKHQsZSxuKXtpZihjKHQsZSxuKSlyZXR1cm4gcyh0LGUsbik7dmFyIHI9YShlKTtyZXR1cm4gbnVsbCE9PXI/bCh0LHIsbik6dm9pZCAwfTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pO3JldHVybiBsKHQsaShlKSxuKX19KX0sODc0NzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8ua2V5cyxjPW8udG9LZXk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6Yyhhcmd1bWVudHNbMV0pO3JldHVybiBhKGkodCksZSl9fSl9LDI2ODk2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmdldCxjPW8udG9LZXk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKTtyZXR1cm4gYSh0LGkoZSksbil9fSl9LDk3NDMzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1uKDY0OTY1KSxjPW8uaGFzLHM9by50b0tleSx1PWZ1bmN0aW9uKHQsZSxuKXtpZihjKHQsZSxuKSlyZXR1cm4hMDt2YXIgcj1hKGUpO3JldHVybiBudWxsIT09ciYmdSh0LHIsbil9O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhc01ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSk7cmV0dXJuIHUodCxpKGUpLG4pfX0pfSw3MTA4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmhhcyxjPW8udG9LZXk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKTtyZXR1cm4gYSh0LGkoZSksbil9fSl9LDIzNjMxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5zZXQ7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7bWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obixyKXtjKHQsZSxpKG4pLGEocikpfX19KX0sOTM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oOTgxNzkpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7YWRkQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw2MTQ2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw5ODM1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkaWZmZXJlbmNlOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkoZSkscj1jKG4uZGVsZXRlKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwobix0KX0pKSxufX0pfSwxNjEyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiFzKG4sKGZ1bmN0aW9uKHQpe2lmKCFyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDUzNTg5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE0NzUpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIlNldCIpKSksZD1jKG8uYWRkKTtyZXR1cm4gZihuLChmdW5jdGlvbih0KXtyKHQsdCxlKSYmZC5jYWxsKG8sdCl9KSx2b2lkIDAsITEsITApLG99fSl9LDgxMDQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0KXtpZihyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKHQpfSksdm9pZCAwLCExLCEwKS5yZXN1bHR9fSl9LDk3Mjg0OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTZXQiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDQxNzE4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ludGVyc2VjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpLHI9YyhlLmhhcyksbz1jKG4uYWRkKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwoZSx0KSYmby5jYWxsKG4sdCl9KSksbn19KX0sNTczNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNEaXNqb2ludEZyb206ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5oYXMpO3JldHVybiFjKHQsKGZ1bmN0aW9uKHQpe2lmKCEwPT09bi5jYWxsKGUsdCkpcmV0dXJuIGMuc3RvcCgpfSkpLnN0b3BwZWR9fSl9LDg5MjMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigzMTA3NCksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzU3Vic2V0T2Y6ZnVuY3Rpb24odCl7dmFyIGU9cyh0aGlzKSxuPWEodCkscj1uLmhhcztyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgciYmKG49bmV3KGkoIlNldCIpKSh0KSxyPWMobi5oYXMpKSwhdShlLChmdW5jdGlvbih0KXtpZighMT09PXIuY2FsbChuLHQpKXJldHVybiB1LnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sMzIzMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNTdXBlcnNldE9mOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUuaGFzKTtyZXR1cm4hYyh0LChmdW5jdGlvbih0KXtpZighMT09PW4uY2FsbChlLHQpKXJldHVybiBjLnN0b3AoKX0pKS5zdG9wcGVkfX0pfSwxNjc1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDE0NzUpLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtqb2luOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUpLHI9dm9pZCAwPT09dD8iLCI6U3RyaW5nKHQpLG89W107cmV0dXJuIGMobixvLnB1c2gsbywhMSwhMCksby5qb2luKHIpfX0pfSwxMTA3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxNDc1KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJTZXQiKSkpLGQ9YyhvLmFkZCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCl7ZC5jYWxsKG8scih0LHQsZSkpfSksdm9pZCAwLCExLCEwKSxvfX0pfSwyNDU5ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU2V0IixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sMzM1Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hcmd1bWVudHMubGVuZ3RoPDIsbz1yP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoYSh0KSxzKG4sKGZ1bmN0aW9uKG4pe3I/KHI9ITEsbz1uKTpvPXQobyxuLG4sZSl9KSx2b2lkIDAsITEsITApLHIpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgc2V0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBvfX0pfSwyNDEwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCl7aWYocih0LHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw2NjE4MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzeW1tZXRyaWNEaWZmZXJlbmNlOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkoZSkscj1jKG4uZGVsZXRlKSxvPWMobi5hZGQpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLHQpfHxvLmNhbGwobix0KX0pKSxufX0pfSw2MjkxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3VuaW9uOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkoZSk7cmV0dXJuIHUodCxjKG4uYWRkKSxuKSxufX0pfSw3MzQ2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MDE0MCkuY2hhckF0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2F0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDMyMDYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcxMjAxKSxpPW4oNzAxMzIpLGE9big4OTgyNyksYz1uKDYwMTQwKSxzPWMuY29kZUF0LHU9Yy5jaGFyQXQsbD0iU3RyaW5nIEl0ZXJhdG9yIixmPWEuc2V0LGQ9YS5nZXR0ZXJGb3IobCkscD1vKChmdW5jdGlvbih0KXtmKHRoaXMse3R5cGU6bCxzdHJpbmc6dCxpbmRleDowfSl9KSwiU3RyaW5nIiwoZnVuY3Rpb24oKXt2YXIgdCxlPWQodGhpcyksbj1lLnN0cmluZyxyPWUuaW5kZXg7cmV0dXJuIHI+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9dShuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLHt2YWx1ZTp7Y29kZVBvaW50OnModCwwKSxwb3NpdGlvbjpyfSxkb25lOiExfSl9KSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7Y29kZVBvaW50czpmdW5jdGlvbigpe3JldHVybiBuZXcgcChTdHJpbmcoaSh0aGlzKSkpfX0pfSw3NDUyNTpmdW5jdGlvbih0LGUsbil7big4MTI3Nyl9LDY0MDI2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcwMTMyKSxpPW4oNDMyMjMpLGE9bigyNTQxOSksYz1uKDIzNzI0KSxzPW4oNjU2NzIpLHU9YygicmVwbGFjZSIpLGw9UmVnRXhwLnByb3RvdHlwZTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBsYWNlQWxsOmZ1bmN0aW9uIHQoZSxuKXt2YXIgcixjLGYsZCxwLGgsdixnLHk9byh0aGlzKTtpZihudWxsIT1lKXtpZigocj1pKGUpKSYmIX5TdHJpbmcobygiZmxhZ3MiaW4gbD9lLmZsYWdzOmEuY2FsbChlKSkpLmluZGV4T2YoImciKSl0aHJvdyBUeXBlRXJyb3IoImAucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzIik7aWYodm9pZCAwIT09KGM9ZVt1XSkpcmV0dXJuIGMuY2FsbChlLHksbik7aWYocyYmcilyZXR1cm4gU3RyaW5nKHkpLnJlcGxhY2UoZSxuKX1pZihmPVN0cmluZyh5KSwiIj09PShkPVN0cmluZyhlKSkpcmV0dXJuIHQuY2FsbChmLC8oPzopL2csbik7aWYocD1mLnNwbGl0KGQpLCJmdW5jdGlvbiIhPXR5cGVvZiBuKXJldHVybiBwLmpvaW4oU3RyaW5nKG4pKTtmb3Iodj0oaD1wWzBdKS5sZW5ndGgsZz0xO2c8cC5sZW5ndGg7ZysrKWgrPVN0cmluZyhuKGQsdixmKSksdis9ZC5sZW5ndGgrcFtnXS5sZW5ndGgsaCs9cFtnXTtyZXR1cm4gaH19KX0sNjk0MjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImFzeW5jRGlzcG9zZSIpfSw5NDI0OTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImRpc3Bvc2UiKX0sNTEzNzQ6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJvYnNlcnZhYmxlIil9LDUzNzcyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicGF0dGVybk1hdGNoIil9LDg2MDc3OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicmVwbGFjZUFsbCIpfSw2NDgxMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiV2Vha01hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sOTk5Nzk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDE4MjA1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sODc1NTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpuKDY1NjcyKX0se3Vwc2VydDpuKDQ3OTI3KX0pfSw2ODk5OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDk4MTc5KTtyKHt0YXJnZXQ6IldlYWtTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHthZGRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDUzODI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJXZWFrU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw4NTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtTZXQiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDY0ODk5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrU2V0IixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sNjcwMzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big0NzA5NCksaT1uKDMxMzY4KSxhPW4oNjY5NzEpO2Zvcih2YXIgYyBpbiBvKXt2YXIgcz1yW2NdLHU9cyYmcy5wcm90b3R5cGU7aWYodSYmdS5mb3JFYWNoIT09aSl0cnl7YSh1LCJmb3JFYWNoIixpKX1jYXRjaCh0KXt1LmZvckVhY2g9aX19fSw3OTc5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDQ3MDk0KSxpPW4oNTAwNjMpLGE9big2Njk3MSksYz1uKDIzNzI0KSxzPWMoIml0ZXJhdG9yIiksdT1jKCJ0b1N0cmluZ1RhZyIpLGw9aS52YWx1ZXM7Zm9yKHZhciBmIGluIG8pe3ZhciBkPXJbZl0scD1kJiZkLnByb3RvdHlwZTtpZihwKXtpZihwW3NdIT09bCl0cnl7YShwLHMsbCl9Y2F0Y2godCl7cFtzXT1sfWlmKHBbdV18fGEocCx1LGYpLG9bZl0pZm9yKHZhciBoIGluIGkpaWYocFtoXSE9PWlbaF0pdHJ5e2EocCxoLGlbaF0pfWNhdGNoKHQpe3BbaF09aVtoXX19fX0sNzQwMTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDIxNzQ0KTtyKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohby5zZXRJbW1lZGlhdGV8fCFvLmNsZWFySW1tZWRpYXRlfSx7c2V0SW1tZWRpYXRlOmkuc2V0LGNsZWFySW1tZWRpYXRlOmkuY2xlYXJ9KX0sNjU5NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDY1NTU1KSxhPW4oMjQ1OTQpLGM9by5wcm9jZXNzLHM9InByb2Nlc3MiPT1hKGMpO3Ioe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLG5vVGFyZ2V0R2V0OiEwfSx7cXVldWVNaWNyb3Rhc2s6ZnVuY3Rpb24odCl7dmFyIGU9cyYmYy5kb21haW47aShlP2UuYmluZCh0KTp0KX19KX0sODE5OTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDM5NDc2KSxhPVtdLnNsaWNlLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLG89cj9hLmNhbGwoYXJndW1lbnRzLDIpOnZvaWQgMDtyZXR1cm4gdChyP2Z1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSkpLmFwcGx5KHRoaXMsbyl9OmUsbil9fTtyKHtnbG9iYWw6ITAsYmluZDohMCxmb3JjZWQ6L01TSUUgLlwuLy50ZXN0KGkpfSx7c2V0VGltZW91dDpjKG8uc2V0VGltZW91dCksc2V0SW50ZXJ2YWw6YyhvLnNldEludGVydmFsKX0pfSw1NTU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big1MDA2Myk7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big1NzU5NyksYT1uKDkyOTEzKSxjPW4oMTkyNikscz1uKDUxMTI4KSx1PW4oNzEyMDEpLGw9big4OTgyNyksZj1uKDU5Mzc5KSxkPW4oNzYyOTgpLHA9big0NjEzMCksaD1uKDU5NTkxKSx2PW4oODc1NzkpLGc9bigxMDU5MikseT1uKDUwODY4KSxtPW4oMTQyMDkpLGI9bigzMTA3NCkseD1uKDczODkwKSx3PW4oMjM3MjQpLEU9bygiZmV0Y2giKSxqPW8oIkhlYWRlcnMiKSxDPXcoIml0ZXJhdG9yIiksaz0iVVJMU2VhcmNoUGFyYW1zIixTPSJVUkxTZWFyY2hQYXJhbXNJdGVyYXRvciIsTz1sLnNldCxBPWwuZ2V0dGVyRm9yKGspLEk9bC5nZXR0ZXJGb3IoUyksTT0vXCsvZyxUPUFycmF5KDQpLF89ZnVuY3Rpb24odCl7cmV0dXJuIFRbdC0xXXx8KFRbdC0xXT1SZWdFeHAoIigoPzolW1xcZGEtZl17Mn0peyIrdCsifSkiLCJnaSIpKX0sTD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1jYXRjaChlKXtyZXR1cm4gdH19LFI9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKE0sIiAiKSxuPTQ7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7Zm9yKDtuOyllPWUucmVwbGFjZShfKG4tLSksTCk7cmV0dXJuIGV9fSxQPS9bIScoKX5dfCUyMC9nLE49eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisifSxEPWZ1bmN0aW9uKHQpe3JldHVybiBOW3RdfSxGPWZ1bmN0aW9uKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZShQLEQpfSxVPWZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IodmFyIG4scixvPWUuc3BsaXQoIiYiKSxpPTA7aTxvLmxlbmd0aDspKG49b1tpKytdKS5sZW5ndGgmJihyPW4uc3BsaXQoIj0iKSx0LnB1c2goe2tleTpSKHIuc2hpZnQoKSksdmFsdWU6UihyLmpvaW4oIj0iKSl9KSl9LEI9ZnVuY3Rpb24odCl7dGhpcy5lbnRyaWVzLmxlbmd0aD0wLFUodGhpcy5lbnRyaWVzLHQpfSx6PWZ1bmN0aW9uKHQsZSl7aWYodDxlKXRocm93IFR5cGVFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKX0sSD11KChmdW5jdGlvbih0LGUpe08odGhpcyx7dHlwZTpTLGl0ZXJhdG9yOmIoQSh0KS5lbnRyaWVzKSxraW5kOmV9KX0pLCJJdGVyYXRvciIsKGZ1bmN0aW9uKCl7dmFyIHQ9SSh0aGlzKSxlPXQua2luZCxuPXQuaXRlcmF0b3IubmV4dCgpLHI9bi52YWx1ZTtyZXR1cm4gbi5kb25lfHwobi52YWx1ZT0ia2V5cyI9PT1lP3Iua2V5OiJ2YWx1ZXMiPT09ZT9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSksbn0pKSxWPWZ1bmN0aW9uKCl7Zih0aGlzLFYsayk7dmFyIHQsZSxuLHIsbyxpLGEsYyxzLHU9YXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDAsbD10aGlzLHA9W107aWYoTyhsLHt0eXBlOmssZW50cmllczpwLHVwZGF0ZVVSTDpmdW5jdGlvbigpe30sdXBkYXRlU2VhcmNoUGFyYW1zOkJ9KSx2b2lkIDAhPT11KWlmKGcodSkpaWYoImZ1bmN0aW9uIj09dHlwZW9mKHQ9eCh1KSkpZm9yKG49KGU9dC5jYWxsKHUpKS5uZXh0OyEocj1uLmNhbGwoZSkpLmRvbmU7KXtpZigoYT0oaT0obz1iKHYoci52YWx1ZSkpKS5uZXh0KS5jYWxsKG8pKS5kb25lfHwoYz1pLmNhbGwobykpLmRvbmV8fCFpLmNhbGwobykuZG9uZSl0aHJvdyBUeXBlRXJyb3IoIkV4cGVjdGVkIHNlcXVlbmNlIHdpdGggbGVuZ3RoIDIiKTtwLnB1c2goe2tleTphLnZhbHVlKyIiLHZhbHVlOmMudmFsdWUrIiJ9KX1lbHNlIGZvcihzIGluIHUpZCh1LHMpJiZwLnB1c2goe2tleTpzLHZhbHVlOnVbc10rIiJ9KTtlbHNlIFUocCwic3RyaW5nIj09dHlwZW9mIHU/Ij8iPT09dS5jaGFyQXQoMCk/dS5zbGljZSgxKTp1OnUrIiIpfSxxPVYucHJvdG90eXBlO2MocSx7YXBwZW5kOmZ1bmN0aW9uKHQsZSl7eihhcmd1bWVudHMubGVuZ3RoLDIpO3ZhciBuPUEodGhpcyk7bi5lbnRyaWVzLnB1c2goe2tleTp0KyIiLHZhbHVlOmUrIiJ9KSxuLnVwZGF0ZVVSTCgpfSxkZWxldGU6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1BKHRoaXMpLG49ZS5lbnRyaWVzLHI9dCsiIixvPTA7bzxuLmxlbmd0aDspbltvXS5rZXk9PT1yP24uc3BsaWNlKG8sMSk6bysrO2UudXBkYXRlVVJMKCl9LGdldDpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUEodGhpcykuZW50cmllcyxuPXQrIiIscj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0ua2V5PT09bilyZXR1cm4gZVtyXS52YWx1ZTtyZXR1cm4gbnVsbH0sZ2V0QWxsOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9QSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPVtdLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmtleT09PW4mJnIucHVzaChlW29dLnZhbHVlKTtyZXR1cm4gcn0saGFzOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9QSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPTA7cjxlLmxlbmd0aDspaWYoZVtyKytdLmtleT09PW4pcmV0dXJuITA7cmV0dXJuITF9LHNldDpmdW5jdGlvbih0LGUpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIG4scj1BKHRoaXMpLG89ci5lbnRyaWVzLGk9ITEsYT10KyIiLGM9ZSsiIixzPTA7czxvLmxlbmd0aDtzKyspKG49b1tzXSkua2V5PT09YSYmKGk/by5zcGxpY2Uocy0tLDEpOihpPSEwLG4udmFsdWU9YykpO2l8fG8ucHVzaCh7a2V5OmEsdmFsdWU6Y30pLHIudXBkYXRlVVJMKCl9LHNvcnQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1BKHRoaXMpLG89ci5lbnRyaWVzLGk9by5zbGljZSgpO2ZvcihvLmxlbmd0aD0wLG49MDtuPGkubGVuZ3RoO24rKyl7Zm9yKHQ9aVtuXSxlPTA7ZTxuO2UrKylpZihvW2VdLmtleT50LmtleSl7by5zcGxpY2UoZSwwLHQpO2JyZWFrfWU9PT1uJiZvLnB1c2godCl9ci51cGRhdGVVUkwoKX0sZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj1BKHRoaXMpLmVudHJpZXMscj1wKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz0wO288bi5sZW5ndGg7KXIoKGU9bltvKytdKS52YWx1ZSxlLmtleSx0aGlzKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBuZXcgSCh0aGlzLCJrZXlzIil9LHZhbHVlczpmdW5jdGlvbigpe3JldHVybiBuZXcgSCh0aGlzLCJ2YWx1ZXMiKX0sZW50cmllczpmdW5jdGlvbigpe3JldHVybiBuZXcgSCh0aGlzLCJlbnRyaWVzIil9fSx7ZW51bWVyYWJsZTohMH0pLGEocSxDLHEuZW50cmllcyksYShxLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9QSh0aGlzKS5lbnRyaWVzLG49W10scj0wO3I8ZS5sZW5ndGg7KXQ9ZVtyKytdLG4ucHVzaChGKHQua2V5KSsiPSIrRih0LnZhbHVlKSk7cmV0dXJuIG4uam9pbigiJiIpfSkse2VudW1lcmFibGU6ITB9KSxzKFYsaykscih7Z2xvYmFsOiEwLGZvcmNlZDohaX0se1VSTFNlYXJjaFBhcmFtczpWfSksaXx8ImZ1bmN0aW9uIiE9dHlwZW9mIEV8fCJmdW5jdGlvbiIhPXR5cGVvZiBqfHxyKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbz1bdF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKGcoZT1hcmd1bWVudHNbMV0pJiYobj1lLmJvZHksaChuKT09PWsmJigocj1lLmhlYWRlcnM/bmV3IGooZS5oZWFkZXJzKTpuZXcgaikuaGFzKCJjb250ZW50LXR5cGUiKXx8ci5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IiksZT15KGUse2JvZHk6bSgwLFN0cmluZyhuKSksaGVhZGVyczptKDAscil9KSkpLG8ucHVzaChlKSksRS5hcHBseSh0aGlzLG8pfX0pLHQuZXhwb3J0cz17VVJMU2VhcmNoUGFyYW1zOlYsZ2V0U3RhdGU6QX19LDEzOTEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big4MjIwMSk7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oNjI1NTYpLGE9big1NzU5NyksYz1uKDg5NTU4KSxzPW4oODY0MDEpLHU9big5MjkxMyksbD1uKDU5Mzc5KSxmPW4oNzYyOTgpLGQ9big3ODY4NSkscD1uKDg1MTY2KSxoPW4oNjAxNDApLmNvZGVBdCx2PW4oNjk5MjcpLGc9big1MTEyOCkseT1uKDU1NTcpLG09big4OTgyNyksYj1jLlVSTCx4PXkuVVJMU2VhcmNoUGFyYW1zLHc9eS5nZXRTdGF0ZSxFPW0uc2V0LGo9bS5nZXR0ZXJGb3IoIlVSTCIpLEM9TWF0aC5mbG9vcixrPU1hdGgucG93LFM9IkludmFsaWQgc2NoZW1lIixPPSJJbnZhbGlkIGhvc3QiLEE9IkludmFsaWQgcG9ydCIsST0vW0EtWmEtel0vLE09L1tcZCtcLS5BLVphLXpdLyxUPS9cZC8sXz0vXigweHwwWCkvLEw9L15bMC03XSskLyxSPS9eXGQrJC8sUD0vXltcZEEtRmEtZl0rJC8sTj0vW1x1MDAwMFx1MDAwOVx1MDAwQVx1MDAwRCAjJS86P0BbXFxdXS8sRD0vW1x1MDAwMFx1MDAwOVx1MDAwQVx1MDAwRCAjLzo/QFtcXF1dLyxGPS9eW1x1MDAwMC1cdTAwMUYgXSt8W1x1MDAwMC1cdTAwMUYgXSskL2csVT0vW1x1MDAwOVx1MDAwQVx1MDAwRF0vZyxCPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixvO2lmKCJbIj09ZS5jaGFyQXQoMCkpe2lmKCJdIiE9ZS5jaGFyQXQoZS5sZW5ndGgtMSkpcmV0dXJuIE87aWYoIShuPUgoZS5zbGljZSgxLC0xKSkpKXJldHVybiBPO3QuaG9zdD1ufWVsc2UgaWYoSih0KSl7aWYoZT12KGUpLE4udGVzdChlKSlyZXR1cm4gTztpZihudWxsPT09KG49eihlKSkpcmV0dXJuIE87dC5ob3N0PW59ZWxzZXtpZihELnRlc3QoZSkpcmV0dXJuIE87Zm9yKG49IiIscj1wKGUpLG89MDtvPHIubGVuZ3RoO28rKyluKz0kKHJbb10scSk7dC5ob3N0PW59fSx6PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYSxjLHM9dC5zcGxpdCgiLiIpO2lmKHMubGVuZ3RoJiYiIj09c1tzLmxlbmd0aC0xXSYmcy5wb3AoKSwoZT1zLmxlbmd0aCk+NClyZXR1cm4gdDtmb3Iobj1bXSxyPTA7cjxlO3IrKyl7aWYoIiI9PShvPXNbcl0pKXJldHVybiB0O2lmKGk9MTAsby5sZW5ndGg+MSYmIjAiPT1vLmNoYXJBdCgwKSYmKGk9Xy50ZXN0KG8pPzE2Ojgsbz1vLnNsaWNlKDg9PWk/MToyKSksIiI9PT1vKWE9MDtlbHNle2lmKCEoMTA9PWk/Ujo4PT1pP0w6UCkudGVzdChvKSlyZXR1cm4gdDthPXBhcnNlSW50KG8saSl9bi5wdXNoKGEpfWZvcihyPTA7cjxlO3IrKylpZihhPW5bcl0scj09ZS0xKXtpZihhPj1rKDI1Niw1LWUpKXJldHVybiBudWxsfWVsc2UgaWYoYT4yNTUpcmV0dXJuIG51bGw7Zm9yKGM9bi5wb3AoKSxyPTA7cjxuLmxlbmd0aDtyKyspYys9bltyXSprKDI1NiwzLXIpO3JldHVybiBjfSxIPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYSxjLHM9WzAsMCwwLDAsMCwwLDAsMF0sdT0wLGw9bnVsbCxmPTAsZD1mdW5jdGlvbigpe3JldHVybiB0LmNoYXJBdChmKX07aWYoIjoiPT1kKCkpe2lmKCI6IiE9dC5jaGFyQXQoMSkpcmV0dXJuO2YrPTIsbD0rK3V9Zm9yKDtkKCk7KXtpZig4PT11KXJldHVybjtpZigiOiIhPWQoKSl7Zm9yKGU9bj0wO248NCYmUC50ZXN0KGQoKSk7KWU9MTYqZStwYXJzZUludChkKCksMTYpLGYrKyxuKys7aWYoIi4iPT1kKCkpe2lmKDA9PW4pcmV0dXJuO2lmKGYtPW4sdT42KXJldHVybjtmb3Iocj0wO2QoKTspe2lmKG89bnVsbCxyPjApe2lmKCEoIi4iPT1kKCkmJnI8NCkpcmV0dXJuO2YrK31pZighVC50ZXN0KGQoKSkpcmV0dXJuO2Zvcig7VC50ZXN0KGQoKSk7KXtpZihpPXBhcnNlSW50KGQoKSwxMCksbnVsbD09PW8pbz1pO2Vsc2V7aWYoMD09bylyZXR1cm47bz0xMCpvK2l9aWYobz4yNTUpcmV0dXJuO2YrK31zW3VdPTI1NipzW3VdK28sMiE9KytyJiY0IT1yfHx1Kyt9aWYoNCE9cilyZXR1cm47YnJlYWt9aWYoIjoiPT1kKCkpe2lmKGYrKywhZCgpKXJldHVybn1lbHNlIGlmKGQoKSlyZXR1cm47c1t1KytdPWV9ZWxzZXtpZihudWxsIT09bClyZXR1cm47ZisrLGw9Kyt1fX1pZihudWxsIT09bClmb3IoYT11LWwsdT03OzAhPXUmJmE+MDspYz1zW3VdLHNbdS0tXT1zW2wrYS0xXSxzW2wrLS1hXT1jO2Vsc2UgaWYoOCE9dSlyZXR1cm47cmV0dXJuIHN9LFY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG87aWYoIm51bWJlciI9PXR5cGVvZiB0KXtmb3IoZT1bXSxuPTA7bjw0O24rKyllLnVuc2hpZnQodCUyNTYpLHQ9Qyh0LzI1Nik7cmV0dXJuIGUuam9pbigiLiIpfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKGU9IiIscj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxuPTEscj1udWxsLG89MCxpPTA7aTw4O2krKykwIT09dFtpXT8obz5uJiYoZT1yLG49bykscj1udWxsLG89MCk6KG51bGw9PT1yJiYocj1pKSwrK28pO3JldHVybiBvPm4mJihlPXIsbj1vKSxlfSh0KSxuPTA7bjw4O24rKylvJiYwPT09dFtuXXx8KG8mJihvPSExKSxyPT09bj8oZSs9bj8iOiI6Ijo6IixvPSEwKTooZSs9dFtuXS50b1N0cmluZygxNiksbjw3JiYoZSs9IjoiKSkpO3JldHVybiJbIitlKyJdIn1yZXR1cm4gdH0scT17fSxXPWQoe30scSx7IiAiOjEsJyInOjEsIjwiOjEsIj4iOjEsImAiOjF9KSxHPWQoe30sVyx7IiMiOjEsIj8iOjEsInsiOjEsIn0iOjF9KSxaPWQoe30sRyx7Ii8iOjEsIjoiOjEsIjsiOjEsIj0iOjEsIkAiOjEsIlsiOjEsIlxcIjoxLCJdIjoxLCJeIjoxLCJ8IjoxfSksJD1mdW5jdGlvbih0LGUpe3ZhciBuPWgodCwwKTtyZXR1cm4gbj4zMiYmbjwxMjcmJiFmKGUsdCk/dDplbmNvZGVVUklDb21wb25lbnQodCl9LFk9e2Z0cDoyMSxmaWxlOm51bGwsaHR0cDo4MCxodHRwczo0NDMsd3M6ODAsd3NzOjQ0M30sSj1mdW5jdGlvbih0KXtyZXR1cm4gZihZLHQuc2NoZW1lKX0sSz1mdW5jdGlvbih0KXtyZXR1cm4iIiE9dC51c2VybmFtZXx8IiIhPXQucGFzc3dvcmR9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIXQuaG9zdHx8dC5jYW5ub3RCZUFCYXNlVVJMfHwiZmlsZSI9PXQuc2NoZW1lfSxRPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIDI9PXQubGVuZ3RoJiZJLnRlc3QodC5jaGFyQXQoMCkpJiYoIjoiPT0obj10LmNoYXJBdCgxKSl8fCFlJiYifCI9PW4pfSx0dD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdC5sZW5ndGg+MSYmUSh0LnNsaWNlKDAsMikpJiYoMj09dC5sZW5ndGh8fCIvIj09PShlPXQuY2hhckF0KDIpKXx8IlxcIj09PWV8fCI/Ij09PWV8fCIjIj09PWUpfSxldD1mdW5jdGlvbih0KXt2YXIgZT10LnBhdGgsbj1lLmxlbmd0aDshbnx8ImZpbGUiPT10LnNjaGVtZSYmMT09biYmUShlWzBdLCEwKXx8ZS5wb3AoKX0sbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIi4iPT09dHx8IiUyZSI9PT10LnRvTG93ZXJDYXNlKCl9LHJ0PXt9LG90PXt9LGl0PXt9LGF0PXt9LGN0PXt9LHN0PXt9LHV0PXt9LGx0PXt9LGZ0PXt9LGR0PXt9LHB0PXt9LGh0PXt9LHZ0PXt9LGd0PXt9LHl0PXt9LG10PXt9LGJ0PXt9LHh0PXt9LHd0PXt9LEV0PXt9LGp0PXt9LEN0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBpLGEsYyxzLHUsbD1ufHxydCxkPTAsaD0iIix2PSExLGc9ITEseT0hMTtmb3Iobnx8KHQuc2NoZW1lPSIiLHQudXNlcm5hbWU9IiIsdC5wYXNzd29yZD0iIix0Lmhvc3Q9bnVsbCx0LnBvcnQ9bnVsbCx0LnBhdGg9W10sdC5xdWVyeT1udWxsLHQuZnJhZ21lbnQ9bnVsbCx0LmNhbm5vdEJlQUJhc2VVUkw9ITEsZT1lLnJlcGxhY2UoRiwiIikpLGU9ZS5yZXBsYWNlKFUsIiIpLGk9cChlKTtkPD1pLmxlbmd0aDspe3N3aXRjaChhPWlbZF0sbCl7Y2FzZSBydDppZighYXx8IUkudGVzdChhKSl7aWYobilyZXR1cm4gUztsPWl0O2NvbnRpbnVlfWgrPWEudG9Mb3dlckNhc2UoKSxsPW90O2JyZWFrO2Nhc2Ugb3Q6aWYoYSYmKE0udGVzdChhKXx8IisiPT1hfHwiLSI9PWF8fCIuIj09YSkpaCs9YS50b0xvd2VyQ2FzZSgpO2Vsc2V7aWYoIjoiIT1hKXtpZihuKXJldHVybiBTO2g9IiIsbD1pdCxkPTA7Y29udGludWV9aWYobiYmKEoodCkhPWYoWSxoKXx8ImZpbGUiPT1oJiYoSyh0KXx8bnVsbCE9PXQucG9ydCl8fCJmaWxlIj09dC5zY2hlbWUmJiF0Lmhvc3QpKXJldHVybjtpZih0LnNjaGVtZT1oLG4pcmV0dXJuIHZvaWQoSih0KSYmWVt0LnNjaGVtZV09PXQucG9ydCYmKHQucG9ydD1udWxsKSk7aD0iIiwiZmlsZSI9PXQuc2NoZW1lP2w9Z3Q6Sih0KSYmbyYmby5zY2hlbWU9PXQuc2NoZW1lP2w9YXQ6Sih0KT9sPWx0OiIvIj09aVtkKzFdPyhsPWN0LGQrKyk6KHQuY2Fubm90QmVBQmFzZVVSTD0hMCx0LnBhdGgucHVzaCgiIiksbD13dCl9YnJlYWs7Y2FzZSBpdDppZighb3x8by5jYW5ub3RCZUFCYXNlVVJMJiYiIyIhPWEpcmV0dXJuIFM7aWYoby5jYW5ub3RCZUFCYXNlVVJMJiYiIyI9PWEpe3Quc2NoZW1lPW8uc2NoZW1lLHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIix0LmNhbm5vdEJlQUJhc2VVUkw9ITAsbD1qdDticmVha31sPSJmaWxlIj09by5zY2hlbWU/Z3Q6c3Q7Y29udGludWU7Y2FzZSBhdDppZigiLyIhPWF8fCIvIiE9aVtkKzFdKXtsPXN0O2NvbnRpbnVlfWw9ZnQsZCsrO2JyZWFrO2Nhc2UgY3Q6aWYoIi8iPT1hKXtsPWR0O2JyZWFrfWw9eHQ7Y29udGludWU7Y2FzZSBzdDppZih0LnNjaGVtZT1vLnNjaGVtZSxhPT1yKXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnk7ZWxzZSBpZigiLyI9PWF8fCJcXCI9PWEmJkoodCkpbD11dDtlbHNlIGlmKCI/Ij09YSl0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT0iIixsPUV0O2Vsc2V7aWYoIiMiIT1hKXt0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5wYXRoLnBvcCgpLGw9eHQ7Y29udGludWV9dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLGw9anR9YnJlYWs7Y2FzZSB1dDppZighSih0KXx8Ii8iIT1hJiYiXFwiIT1hKXtpZigiLyIhPWEpe3QudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LGw9eHQ7Y29udGludWV9bD1kdH1lbHNlIGw9ZnQ7YnJlYWs7Y2FzZSBsdDppZihsPWZ0LCIvIiE9YXx8Ii8iIT1oLmNoYXJBdChkKzEpKWNvbnRpbnVlO2QrKzticmVhaztjYXNlIGZ0OmlmKCIvIiE9YSYmIlxcIiE9YSl7bD1kdDtjb250aW51ZX1icmVhaztjYXNlIGR0OmlmKCJAIj09YSl7diYmKGg9IiU0MCIraCksdj0hMCxjPXAoaCk7Zm9yKHZhciBtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBiPWNbbV07aWYoIjoiIT1ifHx5KXt2YXIgeD0kKGIsWik7eT90LnBhc3N3b3JkKz14OnQudXNlcm5hbWUrPXh9ZWxzZSB5PSEwfWg9IiJ9ZWxzZSBpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZKKHQpKXtpZih2JiYiIj09aClyZXR1cm4iSW52YWxpZCBhdXRob3JpdHkiO2QtPXAoaCkubGVuZ3RoKzEsaD0iIixsPXB0fWVsc2UgaCs9YTticmVhaztjYXNlIHB0OmNhc2UgaHQ6aWYobiYmImZpbGUiPT10LnNjaGVtZSl7bD1tdDtjb250aW51ZX1pZigiOiIhPWF8fGcpe2lmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCkpe2lmKEoodCkmJiIiPT1oKXJldHVybiBPO2lmKG4mJiIiPT1oJiYoSyh0KXx8bnVsbCE9PXQucG9ydCkpcmV0dXJuO2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKGg9IiIsbD1idCxuKXJldHVybjtjb250aW51ZX0iWyI9PWE/Zz0hMDoiXSI9PWEmJihnPSExKSxoKz1hfWVsc2V7aWYoIiI9PWgpcmV0dXJuIE87aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoaD0iIixsPXZ0LG49PWh0KXJldHVybn1icmVhaztjYXNlIHZ0OmlmKCFULnRlc3QoYSkpe2lmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCl8fG4pe2lmKCIiIT1oKXt2YXIgdz1wYXJzZUludChoLDEwKTtpZih3PjY1NTM1KXJldHVybiBBO3QucG9ydD1KKHQpJiZ3PT09WVt0LnNjaGVtZV0/bnVsbDp3LGg9IiJ9aWYobilyZXR1cm47bD1idDtjb250aW51ZX1yZXR1cm4gQX1oKz1hO2JyZWFrO2Nhc2UgZ3Q6aWYodC5zY2hlbWU9ImZpbGUiLCIvIj09YXx8IlxcIj09YSlsPXl0O2Vsc2V7aWYoIW98fCJmaWxlIiE9by5zY2hlbWUpe2w9eHQ7Y29udGludWV9aWYoYT09cil0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnk7ZWxzZSBpZigiPyI9PWEpdC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT0iIixsPUV0O2Vsc2V7aWYoIiMiIT1hKXt0dChpLnNsaWNlKGQpLmpvaW4oIiIpKXx8KHQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLGV0KHQpKSxsPXh0O2NvbnRpbnVlfXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLGw9anR9fWJyZWFrO2Nhc2UgeXQ6aWYoIi8iPT1hfHwiXFwiPT1hKXtsPW10O2JyZWFrfW8mJiJmaWxlIj09by5zY2hlbWUmJiF0dChpLnNsaWNlKGQpLmpvaW4oIiIpKSYmKFEoby5wYXRoWzBdLCEwKT90LnBhdGgucHVzaChvLnBhdGhbMF0pOnQuaG9zdD1vLmhvc3QpLGw9eHQ7Y29udGludWU7Y2FzZSBtdDppZihhPT1yfHwiLyI9PWF8fCJcXCI9PWF8fCI/Ij09YXx8IiMiPT1hKXtpZighbiYmUShoKSlsPXh0O2Vsc2UgaWYoIiI9PWgpe2lmKHQuaG9zdD0iIixuKXJldHVybjtsPWJ0fWVsc2V7aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoImxvY2FsaG9zdCI9PXQuaG9zdCYmKHQuaG9zdD0iIiksbilyZXR1cm47aD0iIixsPWJ0fWNvbnRpbnVlfWgrPWE7YnJlYWs7Y2FzZSBidDppZihKKHQpKXtpZihsPXh0LCIvIiE9YSYmIlxcIiE9YSljb250aW51ZX1lbHNlIGlmKG58fCI/IiE9YSlpZihufHwiIyIhPWEpe2lmKGEhPXImJihsPXh0LCIvIiE9YSkpY29udGludWV9ZWxzZSB0LmZyYWdtZW50PSIiLGw9anQ7ZWxzZSB0LnF1ZXJ5PSIiLGw9RXQ7YnJlYWs7Y2FzZSB4dDppZihhPT1yfHwiLyI9PWF8fCJcXCI9PWEmJkoodCl8fCFuJiYoIj8iPT1hfHwiIyI9PWEpKXtpZigiLi4iPT09KHU9KHU9aCkudG9Mb3dlckNhc2UoKSl8fCIlMmUuIj09PXV8fCIuJTJlIj09PXV8fCIlMmUlMmUiPT09dT8oZXQodCksIi8iPT1hfHwiXFwiPT1hJiZKKHQpfHx0LnBhdGgucHVzaCgiIikpOm50KGgpPyIvIj09YXx8IlxcIj09YSYmSih0KXx8dC5wYXRoLnB1c2goIiIpOigiZmlsZSI9PXQuc2NoZW1lJiYhdC5wYXRoLmxlbmd0aCYmUShoKSYmKHQuaG9zdCYmKHQuaG9zdD0iIiksaD1oLmNoYXJBdCgwKSsiOiIpLHQucGF0aC5wdXNoKGgpKSxoPSIiLCJmaWxlIj09dC5zY2hlbWUmJihhPT1yfHwiPyI9PWF8fCIjIj09YSkpZm9yKDt0LnBhdGgubGVuZ3RoPjEmJiIiPT09dC5wYXRoWzBdOyl0LnBhdGguc2hpZnQoKTsiPyI9PWE/KHQucXVlcnk9IiIsbD1FdCk6IiMiPT1hJiYodC5mcmFnbWVudD0iIixsPWp0KX1lbHNlIGgrPSQoYSxHKTticmVhaztjYXNlIHd0OiI/Ij09YT8odC5xdWVyeT0iIixsPUV0KToiIyI9PWE/KHQuZnJhZ21lbnQ9IiIsbD1qdCk6YSE9ciYmKHQucGF0aFswXSs9JChhLHEpKTticmVhaztjYXNlIEV0Om58fCIjIiE9YT9hIT1yJiYoIiciPT1hJiZKKHQpP3QucXVlcnkrPSIlMjciOnQucXVlcnkrPSIjIj09YT8iJTIzIjokKGEscSkpOih0LmZyYWdtZW50PSIiLGw9anQpO2JyZWFrO2Nhc2UganQ6YSE9ciYmKHQuZnJhZ21lbnQrPSQoYSxXKSl9ZCsrfX0sa3Q9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWwodGhpcyxrdCwiVVJMIiksbz1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxhPVN0cmluZyh0KSxjPUUocix7dHlwZToiVVJMIn0pO2lmKHZvaWQgMCE9PW8paWYobyBpbnN0YW5jZW9mIGt0KWU9aihvKTtlbHNlIGlmKG49Q3QoZT17fSxTdHJpbmcobykpKXRocm93IFR5cGVFcnJvcihuKTtpZihuPUN0KGMsYSxudWxsLGUpKXRocm93IFR5cGVFcnJvcihuKTt2YXIgcz1jLnNlYXJjaFBhcmFtcz1uZXcgeCx1PXcocyk7dS51cGRhdGVTZWFyY2hQYXJhbXMoYy5xdWVyeSksdS51cGRhdGVVUkw9ZnVuY3Rpb24oKXtjLnF1ZXJ5PVN0cmluZyhzKXx8bnVsbH0saXx8KHIuaHJlZj1PdC5jYWxsKHIpLHIub3JpZ2luPUF0LmNhbGwociksci5wcm90b2NvbD1JdC5jYWxsKHIpLHIudXNlcm5hbWU9TXQuY2FsbChyKSxyLnBhc3N3b3JkPVR0LmNhbGwociksci5ob3N0PV90LmNhbGwociksci5ob3N0bmFtZT1MdC5jYWxsKHIpLHIucG9ydD1SdC5jYWxsKHIpLHIucGF0aG5hbWU9UHQuY2FsbChyKSxyLnNlYXJjaD1OdC5jYWxsKHIpLHIuc2VhcmNoUGFyYW1zPUR0LmNhbGwociksci5oYXNoPUZ0LmNhbGwocikpfSxTdD1rdC5wcm90b3R5cGUsT3Q9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5zY2hlbWUsbj10LnVzZXJuYW1lLHI9dC5wYXNzd29yZCxvPXQuaG9zdCxpPXQucG9ydCxhPXQucGF0aCxjPXQucXVlcnkscz10LmZyYWdtZW50LHU9ZSsiOiI7cmV0dXJuIG51bGwhPT1vPyh1Kz0iLy8iLEsodCkmJih1Kz1uKyhyPyI6IityOiIiKSsiQCIpLHUrPVYobyksbnVsbCE9PWkmJih1Kz0iOiIraSkpOiJmaWxlIj09ZSYmKHUrPSIvLyIpLHUrPXQuY2Fubm90QmVBQmFzZVVSTD9hWzBdOmEubGVuZ3RoPyIvIithLmpvaW4oIi8iKToiIixudWxsIT09YyYmKHUrPSI/IitjKSxudWxsIT09cyYmKHUrPSIjIitzKSx1fSxBdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnNjaGVtZSxuPXQucG9ydDtpZigiYmxvYiI9PWUpdHJ5e3JldHVybiBuZXcgVVJMKGUucGF0aFswXSkub3JpZ2lufWNhdGNoKHQpe3JldHVybiJudWxsIn1yZXR1cm4iZmlsZSIhPWUmJkoodCk/ZSsiOi8vIitWKHQuaG9zdCkrKG51bGwhPT1uPyI6IituOiIiKToibnVsbCJ9LEl0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykuc2NoZW1lKyI6In0sTXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS51c2VybmFtZX0sVHQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5wYXNzd29yZH0sX3Q9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5ob3N0LG49dC5wb3J0O3JldHVybiBudWxsPT09ZT8iIjpudWxsPT09bj9WKGUpOlYoZSkrIjoiK259LEx0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5ob3N0O3JldHVybiBudWxsPT09dD8iIjpWKHQpfSxSdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykucG9ydDtyZXR1cm4gbnVsbD09PXQ/IiI6U3RyaW5nKHQpfSxQdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnBhdGg7cmV0dXJuIHQuY2Fubm90QmVBQmFzZVVSTD9lWzBdOmUubGVuZ3RoPyIvIitlLmpvaW4oIi8iKToiIn0sTnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLnF1ZXJ5O3JldHVybiB0PyI/Iit0OiIifSxEdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnNlYXJjaFBhcmFtc30sRnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLmZyYWdtZW50O3JldHVybiB0PyIjIit0OiIifSxVdD1mdW5jdGlvbih0LGUpe3JldHVybntnZXQ6dCxzZXQ6ZSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19O2lmKGkmJnMoU3Qse2hyZWY6VXQoT3QsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1TdHJpbmcodCkscj1DdChlLG4pO2lmKHIpdGhyb3cgVHlwZUVycm9yKHIpO3coZS5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyhlLnF1ZXJ5KX0pKSxvcmlnaW46VXQoQXQpLHByb3RvY29sOlV0KEl0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO0N0KGUsU3RyaW5nKHQpKyI6IixydCl9KSksdXNlcm5hbWU6VXQoTXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1wKFN0cmluZyh0KSk7aWYoIVgoZSkpe2UudXNlcm5hbWU9IiI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspZS51c2VybmFtZSs9JChuW3JdLFopfX0pKSxwYXNzd29yZDpVdChUdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPXAoU3RyaW5nKHQpKTtpZighWChlKSl7ZS5wYXNzd29yZD0iIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllLnBhc3N3b3JkKz0kKG5bcl0sWil9fSkpLGhvc3Q6VXQoX3QsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7ZS5jYW5ub3RCZUFCYXNlVVJMfHxDdChlLFN0cmluZyh0KSxwdCl9KSksaG9zdG5hbWU6VXQoTHQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7ZS5jYW5ub3RCZUFCYXNlVVJMfHxDdChlLFN0cmluZyh0KSxodCl9KSkscG9ydDpVdChSdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtYKGUpfHwoIiI9PSh0PVN0cmluZyh0KSk/ZS5wb3J0PW51bGw6Q3QoZSx0LHZ0KSl9KSkscGF0aG5hbWU6VXQoUHQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7ZS5jYW5ub3RCZUFCYXNlVVJMfHwoZS5wYXRoPVtdLEN0KGUsdCsiIixidCkpfSkpLHNlYXJjaDpVdChOdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTsiIj09KHQ9U3RyaW5nKHQpKT9lLnF1ZXJ5PW51bGw6KCI/Ij09dC5jaGFyQXQoMCkmJih0PXQuc2xpY2UoMSkpLGUucXVlcnk9IiIsQ3QoZSx0LEV0KSksdyhlLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKGUucXVlcnkpfSkpLHNlYXJjaFBhcmFtczpVdChEdCksaGFzaDpVdChGdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTsiIiE9KHQ9U3RyaW5nKHQpKT8oIiMiPT10LmNoYXJBdCgwKSYmKHQ9dC5zbGljZSgxKSksZS5mcmFnbWVudD0iIixDdChlLHQsanQpKTplLmZyYWdtZW50PW51bGx9KSl9KSx1KFN0LCJ0b0pTT04iLChmdW5jdGlvbigpe3JldHVybiBPdC5jYWxsKHRoaXMpfSkse2VudW1lcmFibGU6ITB9KSx1KFN0LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90LmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLGIpe3ZhciBCdD1iLmNyZWF0ZU9iamVjdFVSTCx6dD1iLnJldm9rZU9iamVjdFVSTDtCdCYmdShrdCwiY3JlYXRlT2JqZWN0VVJMIiwoZnVuY3Rpb24odCl7cmV0dXJuIEJ0LmFwcGx5KGIsYXJndW1lbnRzKX0pKSx6dCYmdShrdCwicmV2b2tlT2JqZWN0VVJMIiwoZnVuY3Rpb24odCl7cmV0dXJuIHp0LmFwcGx5KGIsYXJndW1lbnRzKX0pKX1nKGt0LCJVUkwiKSxvKHtnbG9iYWw6ITAsZm9yY2VkOiFhLHNoYW06IWl9LHtVUkw6a3R9KX0sOTg0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiVVJMIixwcm90bzohMCxlbnVtZXJhYmxlOiEwfSx7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIFVSTC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX19KX0sMzY0Njc6ZnVuY3Rpb24odCxlLG4pe24oMTQwODYpfSw2NjU1NDpmdW5jdGlvbih0LGUsbil7big0OTMwKSxuKDYzNjQpfSw5MzI3MDpmdW5jdGlvbih0LGUsbil7big1MzUxMyksbig5OTI1NSksbig0ODQ0KSxuKDM1NTQpLG4oMTg4NDQpLG4oMzU2NTYpLG4oNDkwNTApLG4oOTM4NDMpLG4oNjYyMjQpLG4oNzE3MDApLG4oNjk1MjkpLG4oMjc3MzQpLG4oNzczNjkpLG4oNjk4NDIpLG4oOTc5MjgpLG4oOTM5KSxuKDYxNDY3KSxuKDE2MTI3KSxuKDUzNTg5KSxuKDgxMDQyKSxuKDE2NzU3KSxuKDExMDc0KSxuKDMzNTM5KSxuKDI0MTAzKSxuKDY0ODEzKSxuKDY4OTk5KSxuKDUzODI0KX0sODk3NDA6ZnVuY3Rpb24odCxlLG4pe24oMzg3OTIpLG4oMTk5MCksbig5NzI4NCksbigyNDU5OCksbig5OTk3OSksbigxODIwNSksbig4NTgpLG4oNjQ4OTkpfSw2ODAwMTpmdW5jdGlvbih0LGUsbil7bigzMDYxMyksbig2ODQwNiksbig0OTc5KSxuKDQ0NjQ2KX0sMjg2OTk6ZnVuY3Rpb24odCxlLG4pe24oOTk2MjgpO3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1yfSwxNTYyNDpmdW5jdGlvbih0LGUsbil7big1NzM2MCl9LDgxMjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDYxMjk4KSxuKDQ3MDA0KSxuKDY3NDYyKSxuKDkwNjcpLG4oMjAxMjQpLG4oMjEzNzEpLG4oMzg5ODQpLG4oNjkyMzcpLG4oMjY0OTcpLG4oNTMxNjgpLG4oNzM5NDkpLG4oODgyMTEpLG4oNzM3NjEpLG4oNDIxOTYpLG4oNDMzMzIpLG4oOTI2MDEpLG4oMjA0NzQpLG4oNTQ1NTYpLG4oNDA2MzgpLG4oOTY2NTkpLG4oMTQ2ODgpLG4oNzM3OCksbigyNzQyOCksbigzMzQzNiksbig4NDM4OCksbig1OTYyMyksbigzMjg1Myksbig2NzA3Mil9LDYyNjc3OmZ1bmN0aW9uKHQsZSxuKXtuKDM2NTcxKSxuKDQzMDg2KX0sMzc2MTM6ZnVuY3Rpb24odCxlLG4pe24oNDMyOTApLG4oMTQ2ODIpLG4oODc1NTUpfSwxNDcxNTpmdW5jdGlvbih0LGUsbil7big3MDIyNSksbigyMzk5KSxuKDE2ODA5KSxuKDY3MTQxKSxuKDkwNzY5KSxuKDU3ODkxKSxuKDE1NzIyKX0sMzY2ODY6ZnVuY3Rpb24odCxlLG4pe24oNzc5MDcpfSw2Nzc5MzpmdW5jdGlvbih0LGUsbil7big3NTY0Nyl9LDk0Nzc6ZnVuY3Rpb24odCxlLG4pe24oODQzMDkpLG4oNzI5NjMpLG4oNTYzNTkpfSw3MjM1NDpmdW5jdGlvbih0LGUsbil7bigyMDIzNCksbig1MTM3NCl9LDc0Njc5OmZ1bmN0aW9uKHQsZSxuKXtuKDUzNzcyKX0sOTQ3OTpmdW5jdGlvbih0LGUsbil7bigyNzc1KX0sODU2NTk6ZnVuY3Rpb24odCxlLG4pe24oOTY3NTEpLG4oNzMyMjApfSw1NDk4NjpmdW5jdGlvbih0LGUsbil7bigxMTA3MSl9LDE4ODE6ZnVuY3Rpb24odCxlLG4pe24oNDk2NDApLG4oNzQ5NjMpLG4oNjk0NTkpLG4oNDkxNTUpLG4oMjY4OTYpLG4oODc0NzQpLG4oOTc0MzMpLG4oNzEwOCksbigyMzYzMSl9LDU3NjAzOmZ1bmN0aW9uKHQsZSxuKXtuKDE3NjUpfSw4MTU0ODpmdW5jdGlvbih0LGUsbil7big5ODM1MCksbig0MTcxOCksbig1NzM3MSksbig4OTIzMCksbigzMjMwMyksbig2MjkxKSxuKDY2MTgxKX0sMjMxMDI6ZnVuY3Rpb24odCxlLG4pe24oNzM0NjApfSw0NDE1MzpmdW5jdGlvbih0LGUsbil7bigzMjA2Mil9LDczOTI6ZnVuY3Rpb24odCxlLG4pe24oNzQ1MjUpfSw3Nzc5OmZ1bmN0aW9uKHQsZSxuKXtuKDY0MDI2KSxuKDg2MDc3KX0sNjA4MjY6ZnVuY3Rpb24odCxlLG4pe24oMTM5MTApLG4oOTg0KSxuKDU1NTcpfSw1NTkzMzpmdW5jdGlvbih0LGUsbil7big2OTQyKSxuKDk0MjQ5KX0sODc2MDI6ZnVuY3Rpb24odCxlLG4pe24oNjgwMDEpLG4oMjMxMDIpLG4oNjA4MjYpO3ZhciByPW4oOTU5NjgpO3QuZXhwb3J0cz1yfSw5NTk2ODpmdW5jdGlvbih0LGUsbil7big2NjU1NCksbig5MzI3MCksbig4OTc0MCksbig2MjY3NyksbigxNDcxNSksbigzNjY4Niksbig2Nzc5Myksbig5NDc3KSxuKDcyMzU0KSxuKDc0Njc5KSxuKDU0OTg2KSxuKDU3NjAzKSxuKDQ0MTUzKTt2YXIgcj1uKDQ3OTcyKTt0LmV4cG9ydHM9cn0sNDc5NzI6ZnVuY3Rpb24odCxlLG4pe24oMzY0NjcpLG4oODEyMTMpLG4oMzc2MTMpLG4oODE1NDgpLG4oNTU5MzMpO3ZhciByPW4oNTkwMTEpO3QuZXhwb3J0cz1yfSw1OTAxMTpmdW5jdGlvbih0LGUsbil7big4NTY1OSksbig3Nzc5KTt2YXIgcj1uKDY4Njg1KTt0LmV4cG9ydHM9cn0sNjg2ODU6ZnVuY3Rpb24odCxlLG4pe24oMjg2OTkpLG4oOTQ3OSksbig3MzkyKTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sNTczNjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTMzMzUpO3QuZXhwb3J0cz1yfSw1MzMzNTpmdW5jdGlvbih0LGUsbil7bigxODgxKTt2YXIgcj1uKDg3NjAyKTt0LmV4cG9ydHM9cn0sOTI0MDQ6ZnVuY3Rpb24odCxlLG4pe24oNjcwMzkpLG4oNzk3OTkpLG4oNzQwMTApLG4oNjU5NzYpLG4oODE5OTQpLG4oMTM5MTApLG4oOTg0KSxuKDU1NTcpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSwxODk4NjpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV18fCIiLHI9dFszXTtpZighcilyZXR1cm4gbjtpZihlJiYiZnVuY3Rpb24iPT10eXBlb2YgYnRvYSl7dmFyIG89KGE9cixjPWJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGEpKSkpLHM9InNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCIuY29uY2F0KGMpLCIvKiMgIi5jb25jYXQocywiICovIikpLGk9ci5zb3VyY2VzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIi8qIyBzb3VyY2VVUkw9Ii5jb25jYXQoci5zb3VyY2VSb290KS5jb25jYXQodCwiICovIil9KSk7cmV0dXJuW25dLmNvbmNhdChpKS5jb25jYXQoW29dKS5qb2luKCJcbiIpfXZhciBhLGMscztyZXR1cm5bbl0uam9pbigiXG4iKX0oZSx0KTtyZXR1cm4gZVsyXT8iQG1lZGlhICIuY29uY2F0KGVbMl0sIiB7IikuY29uY2F0KG4sIn0iKTpufSkpLmpvaW4oIiIpfSxlLmk9ZnVuY3Rpb24odCxuKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVtbbnVsbCx0LCIiXV0pO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz1bXS5jb25jYXQodFtyXSk7biYmKG9bMl0/b1syXT0iIi5jb25jYXQobiwiIGFuZCAiKS5jb25jYXQob1syXSk6b1syXT1uKSxlLnB1c2gobyl9fSxlfX0sNDY2Nzk6ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPW8uaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixhPW8uYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1vLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtzKHt9LCIiKX1jYXRjaCh0KXtzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtlXT1ufX1mdW5jdGlvbiB1KHQsZSxuLHIpe3ZhciBvPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgZz9lOmcsaT1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxhPW5ldyBBKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mO3JldHVybiBmdW5jdGlvbihvLGkpe2lmKHI9PT1wKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKHI9PT1oKXtpZigidGhyb3ciPT09byl0aHJvdyBpO3JldHVybiBNKCl9Zm9yKG4ubWV0aG9kPW8sbi5hcmc9aTs7KXt2YXIgYT1uLmRlbGVnYXRlO2lmKGEpe3ZhciBjPWsoYSxuKTtpZihjKXtpZihjPT09diljb250aW51ZTtyZXR1cm4gY319aWYoIm5leHQiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZigidGhyb3ciPT09bi5tZXRob2Qpe2lmKHI9PT1mKXRocm93IHI9aCxuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5hYnJ1cHQoInJldHVybiIsbi5hcmcpO3I9cDt2YXIgcz1sKHQsZSxuKTtpZigibm9ybWFsIj09PXMudHlwZSl7aWYocj1uLmRvbmU/aDpkLHMuYXJnPT09diljb250aW51ZTtyZXR1cm57dmFsdWU6cy5hcmcsZG9uZTpuLmRvbmV9fSJ0aHJvdyI9PT1zLnR5cGUmJihyPWgsbi5tZXRob2Q9InRocm93IixuLmFyZz1zLmFyZyl9fX0odCxuLGEpLGl9ZnVuY3Rpb24gbCh0LGUsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxuKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBmPSJzdXNwZW5kZWRTdGFydCIsZD0ic3VzcGVuZGVkWWllbGQiLHA9ImV4ZWN1dGluZyIsaD0iY29tcGxldGVkIix2PXt9O2Z1bmN0aW9uIGcoKXt9ZnVuY3Rpb24geSgpe31mdW5jdGlvbiBtKCl7fXZhciBiPXt9O3MoYixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB4PU9iamVjdC5nZXRQcm90b3R5cGVPZix3PXgmJngoeChJKFtdKSkpO3cmJnchPT1uJiZyLmNhbGwodyxpKSYmKGI9dyk7dmFyIEU9bS5wcm90b3R5cGU9Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKTtmdW5jdGlvbiBqKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cyh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBDKHQsZSl7ZnVuY3Rpb24gbihvLGksYSxjKXt2YXIgcz1sKHRbb10sdCxpKTtpZigidGhyb3ciIT09cy50eXBlKXt2YXIgdT1zLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT10eXBlb2YgZiYmci5jYWxsKGYsIl9fYXdhaXQiKT9lLnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtuKCJuZXh0Iix0LGEsYyl9KSwoZnVuY3Rpb24odCl7bigidGhyb3ciLHQsYSxjKX0pKTplLnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LGEodSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG4oInRocm93Iix0LGEsYyl9KSl9YyhzLmFyZyl9dmFyIG87dGhpcy5faW52b2tlPWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gaSgpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxvKXtuKHQscixlLG8pfSkpfXJldHVybiBvPW8/by50aGVuKGksaSk6aSgpfX1mdW5jdGlvbiBrKHQsbil7dmFyIHI9dC5pdGVyYXRvcltuLm1ldGhvZF07aWYocj09PWUpe2lmKG4uZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09bi5tZXRob2Qpe2lmKHQuaXRlcmF0b3IucmV0dXJuJiYobi5tZXRob2Q9InJldHVybiIsbi5hcmc9ZSxrKHQsbiksInRocm93Ij09PW4ubWV0aG9kKSlyZXR1cm4gdjtuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4gdn12YXIgbz1sKHIsdC5pdGVyYXRvcixuLmFyZyk7aWYoInRocm93Ij09PW8udHlwZSlyZXR1cm4gbi5tZXRob2Q9InRocm93IixuLmFyZz1vLmFyZyxuLmRlbGVnYXRlPW51bGwsdjt2YXIgaT1vLmFyZztyZXR1cm4gaT9pLmRvbmU/KG5bdC5yZXN1bHROYW1lXT1pLnZhbHVlLG4ubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPSJuZXh0IixuLmFyZz1lKSxuLmRlbGVnYXRlPW51bGwsdik6aToobi5tZXRob2Q9InRocm93IixuLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLG4uZGVsZWdhdGU9bnVsbCx2KX1mdW5jdGlvbiBTKHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIEEodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaChTLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIEkodCl7aWYodCl7dmFyIG49dFtpXTtpZihuKXJldHVybiBuLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbz0tMSxhPWZ1bmN0aW9uIG4oKXtmb3IoOysrbzx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbykpcmV0dXJuIG4udmFsdWU9dFtvXSxuLmRvbmU9ITEsbjtyZXR1cm4gbi52YWx1ZT1lLG4uZG9uZT0hMCxufTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0Ok19fWZ1bmN0aW9uIE0oKXtyZXR1cm57dmFsdWU6ZSxkb25lOiEwfX1yZXR1cm4geS5wcm90b3R5cGU9bSxzKEUsImNvbnN0cnVjdG9yIixtKSxzKG0sImNvbnN0cnVjdG9yIix5KSx5LmRpc3BsYXlOYW1lPXMobSxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09eXx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsbSk6KHQuX19wcm90b19fPW0scyh0LGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRSksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0saihDLnByb3RvdHlwZSkscyhDLnByb3RvdHlwZSxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1DLHQuYXN5bmM9ZnVuY3Rpb24oZSxuLHIsbyxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgYT1uZXcgQyh1KGUsbixyLG8pLGkpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24obik/YTphLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6YS5uZXh0KCl9KSl9LGooRSkscyhFLGMsIkdlbmVyYXRvciIpLHMoRSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHMoRSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGUucmV2ZXJzZSgpLGZ1bmN0aW9uIG4oKXtmb3IoO2UubGVuZ3RoOyl7dmFyIHI9ZS5wb3AoKTtpZihyIGluIHQpcmV0dXJuIG4udmFsdWU9cixuLmRvbmU9ITEsbn1yZXR1cm4gbi5kb25lPSEwLG59fSx0LnZhbHVlcz1JLEEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PWUsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9ZSx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChPKSwhdClmb3IodmFyIG4gaW4gdGhpcykidCI9PT1uLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsbikmJiFpc05hTigrbi5zbGljZSgxKSkmJih0aGlzW25dPWUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIG49dGhpcztmdW5jdGlvbiBvKHIsbyl7cmV0dXJuIGMudHlwZT0idGhyb3ciLGMuYXJnPXQsbi5uZXh0PXIsbyYmKG4ubWV0aG9kPSJuZXh0IixuLmFyZz1lKSwhIW99Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLGM9YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBvKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSx1PXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmdSl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighdSl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgbz10aGlzLnRyeUVudHJpZXNbbl07aWYoby50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKG8sImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PG8uZmluYWxseUxvYyl7dmFyIGk9bzticmVha319aSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmkudHJ5TG9jPD1lJiZlPD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBhPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBhLnR5cGU9dCxhLmFyZz1lLGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLHYpOnRoaXMuY29tcGxldGUoYSl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksdn0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKG4uY29tcGxldGlvbixuLmFmdGVyTG9jKSxPKG4pLHZ9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbZV07aWYobi50cnlMb2M9PT10KXt2YXIgcj1uLmNvbXBsZXRpb247aWYoInRocm93Ij09PXIudHlwZSl7dmFyIG89ci5hcmc7TyhuKX1yZXR1cm4gb319dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LG4scil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOkkodCkscmVzdWx0TmFtZTpuLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz1lKSx2fX0sdH0odC5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPWV9Y2F0Y2godCl7Im9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lPWU6RnVuY3Rpb24oInIiLCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByIikoZSl9fX0sZT17fTtmdW5jdGlvbiBuKHIpe3ZhciBvPWVbcl07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBpPWVbcl09e2lkOnIsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUse2E6ZX0pLGV9LG4uZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKW4ubyhlLHIpJiYhbi5vKHQscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2VudW1lcmFibGU6ITAsZ2V0OmVbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9e307bi5yKHQpLG4uZCh0LHtkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF90fSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gVHR9fSk7dmFyIGU9big2NDE1Nykscj1uLm4oZSksbz0obig2MDQ5MSksbig0NjY3OSksIlVSTFNlYXJjaFBhcmFtcyJpbiBzZWxmKSxpPSJTeW1ib2wiaW4gc2VsZiYmIml0ZXJhdG9yImluIFN5bWJvbCxhPSJGaWxlUmVhZGVyImluIHNlbGYmJiJCbG9iImluIHNlbGYmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksYz0iRm9ybURhdGEiaW4gc2VsZixzPSJBcnJheUJ1ZmZlciJpbiBzZWxmO2lmKHMpdmFyIHU9WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSxsPUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnUuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpPi0xfTtmdW5jdGlvbiBmKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSwvW15hLXowLTlcLSMkJSYnKisuXl9gfH5dL2kudGVzdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZSIpO3JldHVybiB0LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PVN0cmluZyh0KSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dC5zaGlmdCgpO3JldHVybntkb25lOnZvaWQgMD09PWUsdmFsdWU6ZX19fTtyZXR1cm4gaSYmKGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBlfSksZX1mdW5jdGlvbiBoKHQpe3RoaXMubWFwPXt9LHQgaW5zdGFuY2VvZiBoP3QuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0aGlzLmFwcGVuZChlLHQpfSksdGhpcyk6QXJyYXkuaXNBcnJheSh0KT90LmZvckVhY2goKGZ1bmN0aW9uKHQpe3RoaXMuYXBwZW5kKHRbMF0sdFsxXSl9KSx0aGlzKTp0JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0aGlzLmFwcGVuZChlLHRbZV0pfSksdGhpcyl9ZnVuY3Rpb24gdih0KXtpZih0LmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7dC5ib2R5VXNlZD0hMH1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxuKXt0Lm9ubG9hZD1mdW5jdGlvbigpe2UodC5yZXN1bHQpfSx0Lm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHQuZXJyb3IpfX0pKX1mdW5jdGlvbiB5KHQpe3ZhciBlPW5ldyBGaWxlUmVhZGVyLG49ZyhlKTtyZXR1cm4gZS5yZWFkQXNBcnJheUJ1ZmZlcih0KSxufWZ1bmN0aW9uIG0odCl7aWYodC5zbGljZSlyZXR1cm4gdC5zbGljZSgwKTt2YXIgZT1uZXcgVWludDhBcnJheSh0LmJ5dGVMZW5ndGgpO3JldHVybiBlLnNldChuZXcgVWludDhBcnJheSh0KSksZS5idWZmZXJ9ZnVuY3Rpb24gYigpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuX2JvZHlJbml0PXQsdD8ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5fYm9keVRleHQ9dDphJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlCbG9iPXQ6YyYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keUZvcm1EYXRhPXQ6byYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlUZXh0PXQudG9TdHJpbmcoKTpzJiZhJiYoKGU9dCkmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKT8odGhpcy5fYm9keUFycmF5QnVmZmVyPW0odC5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk6cyYmKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpfHxsKHQpKT90aGlzLl9ib2R5QXJyYXlCdWZmZXI9bSh0KTp0aGlzLl9ib2R5VGV4dD10PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTp0aGlzLl9ib2R5VGV4dD0iIix0aGlzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKXx8KCJzdHJpbmciPT10eXBlb2YgdD90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOm8mJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KSYmdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSl9LGEmJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgdD12KHRoaXMpO2lmKHQpcmV0dXJuIHQ7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/dih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbih5KX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciB0LGUsbixyPXYodGhpcyk7aWYocilyZXR1cm4gcjtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gdD10aGlzLl9ib2R5QmxvYixlPW5ldyBGaWxlUmVhZGVyLG49ZyhlKSxlLnJlYWRBc1RleHQodCksbjtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCksbj1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIG4uam9pbigiIil9KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxjJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEUpfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9aC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dD1mKHQpLGU9ZChlKTt2YXIgbj10aGlzLm1hcFt0XTt0aGlzLm1hcFt0XT1uP24rIiwgIitlOmV9LGgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5tYXBbZih0KV19LGgucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdD1mKHQpLHRoaXMuaGFzKHQpP3RoaXMubWFwW3RdOm51bGx9LGgucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoZih0KSl9LGgucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3RoaXMubWFwW2YodCldPWQoZSl9LGgucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobikmJnQuY2FsbChlLHRoaXMubWFwW25dLG4sdGhpcyl9LGgucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3QucHVzaChuKX0pKSxwKHQpfSxoLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSkscCh0KX0saC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dC5wdXNoKFtuLGVdKX0pKSxwKHQpfSxpJiYoaC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1oLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgeD1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2Z1bmN0aW9uIHcodCxlKXt2YXIgbixyLG89KGU9ZXx8e30pLmJvZHk7aWYodCBpbnN0YW5jZW9mIHcpe2lmKHQuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9dC51cmwsdGhpcy5jcmVkZW50aWFscz10LmNyZWRlbnRpYWxzLGUuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaCh0LmhlYWRlcnMpKSx0aGlzLm1ldGhvZD10Lm1ldGhvZCx0aGlzLm1vZGU9dC5tb2RlLHRoaXMuc2lnbmFsPXQuc2lnbmFsLG98fG51bGw9PXQuX2JvZHlJbml0fHwobz10Ll9ib2R5SW5pdCx0LmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyh0KTtpZih0aGlzLmNyZWRlbnRpYWxzPWUuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJzYW1lLW9yaWdpbiIsIWUuaGVhZGVycyYmdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKGUuaGVhZGVycykpLHRoaXMubWV0aG9kPShuPWUubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIscj1uLnRvVXBwZXJDYXNlKCkseC5pbmRleE9mKHIpPi0xP3I6biksdGhpcy5tb2RlPWUubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMuc2lnbmFsPWUuc2lnbmFsfHx0aGlzLnNpZ25hbCx0aGlzLnJlZmVycmVyPW51bGwsKCJHRVQiPT09dGhpcy5tZXRob2R8fCJIRUFEIj09PXRoaXMubWV0aG9kKSYmbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KG8pfWZ1bmN0aW9uIEUodCl7dmFyIGU9bmV3IEZvcm1EYXRhO3JldHVybiB0LnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBuPXQuc3BsaXQoIj0iKSxyPW4uc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIiksbz1uLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7ZS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KHIpLGRlY29kZVVSSUNvbXBvbmVudChvKSl9fSkpLGV9ZnVuY3Rpb24gaih0KXt2YXIgZT1uZXcgaDtyZXR1cm4gdC5yZXBsYWNlKC9ccj9cbltcdCBdKy9nLCIgIikuc3BsaXQoL1xyP1xuLykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5zcGxpdCgiOiIpLHI9bi5zaGlmdCgpLnRyaW0oKTtpZihyKXt2YXIgbz1uLmpvaW4oIjoiKS50cmltKCk7ZS5hcHBlbmQocixvKX19KSksZX1mdW5jdGlvbiBDKHQsZSl7ZXx8KGU9e30pLHRoaXMudHlwZT0iZGVmYXVsdCIsdGhpcy5zdGF0dXM9dm9pZCAwPT09ZS5zdGF0dXM/MjAwOmUuc3RhdHVzLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD0ic3RhdHVzVGV4dCJpbiBlP2Uuc3RhdHVzVGV4dDoiT0siLHRoaXMuaGVhZGVycz1uZXcgaChlLmhlYWRlcnMpLHRoaXMudXJsPWUudXJsfHwiIix0aGlzLl9pbml0Qm9keSh0KX13LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdyh0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGIuY2FsbCh3LnByb3RvdHlwZSksYi5jYWxsKEMucHJvdG90eXBlKSxDLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgQyh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IGgodGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0sQy5lcnJvcj1mdW5jdGlvbigpe3ZhciB0PW5ldyBDKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6IiJ9KTtyZXR1cm4gdC50eXBlPSJlcnJvciIsdH07dmFyIGs9WzMwMSwzMDIsMzAzLDMwNywzMDhdO0MucmVkaXJlY3Q9ZnVuY3Rpb24odCxlKXtpZigtMT09PWsuaW5kZXhPZihlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZSIpO3JldHVybiBuZXcgQyhudWxsLHtzdGF0dXM6ZSxoZWFkZXJzOntsb2NhdGlvbjp0fX0pfTt2YXIgUz1zZWxmLkRPTUV4Y2VwdGlvbjt0cnl7bmV3IFN9Y2F0Y2godCl7KFM9ZnVuY3Rpb24odCxlKXt0aGlzLm1lc3NhZ2U9dCx0aGlzLm5hbWU9ZTt2YXIgbj1FcnJvcih0KTt0aGlzLnN0YWNrPW4uc3RhY2t9KS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLFMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVN9ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXt2YXIgbz1uZXcgdyh0LGUpO2lmKG8uc2lnbmFsJiZvLnNpZ25hbC5hYm9ydGVkKXJldHVybiByKG5ldyBTKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gYygpe2kuYWJvcnQoKX1pLm9ubG9hZD1mdW5jdGlvbigpe3ZhciB0PXtzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczpqKGkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07dC51cmw9InJlc3BvbnNlVVJMImluIGk/aS5yZXNwb25zZVVSTDp0LmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIGU9InJlc3BvbnNlImluIGk/aS5yZXNwb25zZTppLnJlc3BvbnNlVGV4dDtuKG5ldyBDKGUsdCkpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxpLm9uYWJvcnQ9ZnVuY3Rpb24oKXtyKG5ldyBTKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX0saS5vcGVuKG8ubWV0aG9kLG8udXJsLCEwKSwiaW5jbHVkZSI9PT1vLmNyZWRlbnRpYWxzP2kud2l0aENyZWRlbnRpYWxzPSEwOiJvbWl0Ij09PW8uY3JlZGVudGlhbHMmJihpLndpdGhDcmVkZW50aWFscz0hMSksInJlc3BvbnNlVHlwZSJpbiBpJiZhJiYoaS5yZXNwb25zZVR5cGU9ImJsb2IiKSxvLmhlYWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpLnNldFJlcXVlc3RIZWFkZXIoZSx0KX0pKSxvLnNpZ25hbCYmKG8uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1pLnJlYWR5U3RhdGUmJm8uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKX0pLGkuc2VuZCh2b2lkIDA9PT1vLl9ib2R5SW5pdD9udWxsOm8uX2JvZHlJbml0KX0pKX1mdW5jdGlvbiBBKHQsZSl7Zm9yKHZhciBuPVtdLHI9W10sbz1hcmd1bWVudHMubGVuZ3RoO28tLSA+Mjspbi5wdXNoKGFyZ3VtZW50c1tvXSk7Zm9yKDtuLmxlbmd0aDspe3ZhciBpPW4ucG9wKCk7aWYoaSYmaS5wb3ApZm9yKG89aS5sZW5ndGg7by0tOyluLnB1c2goaVtvXSk7ZWxzZSBudWxsIT1pJiYhMCE9PWkmJiExIT09aSYmci5wdXNoKGkpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoZXx8e30scik6e25vZGVOYW1lOnQsYXR0cmlidXRlczplfHx7fSxjaGlsZHJlbjpyLGtleTplJiZlLmtleX19Ty5wb2x5ZmlsbD0hMCxzZWxmLmZldGNofHwoc2VsZi5mZXRjaD1PLHNlbGYuSGVhZGVycz1oLHNlbGYuUmVxdWVzdD13LHNlbGYuUmVzcG9uc2U9Qyk7dmFyIEk9big2NjA4MSksTT1uLm4oSSksVD1uKDkyODE2KSxfPW4ubihUKSxMPW4oNDQ2NzQpLFI9bi5uKEwpLFA9big0NDYyMSksTj1uLm4oUCksRD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIEYodCl7dmFyIGUsbixyPXR5cGVvZiB0LG89IiI7aWYoInN0cmluZyI9PT1yfHwibnVtYmVyIj09PXIpcmV0dXJuIHR8fCIiO2lmKEQodCkmJnQubGVuZ3RoPjApZm9yKGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspIiIhPT0ocj1GKHRbZV0pKSYmKG8rPShvJiYiICIpK3IpO2Vsc2UgZm9yKGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdJiYobys9KG8mJiIgIikrZSk7cmV0dXJuIG99dmFyIFU9IngtdWwtZW52aXJvbm1lbnQtaWQiLEI9IngtdWwtYW5vbnltb3VzLWlkIix6PSJ4LXVsLXVzZXItaWQiLEg9IngtdWwtdmlzaXRvci1pZCIsVj0ieC11bC1pbnN0YWxsYXRpb24tbWV0aG9kIixxPSJ3ZWItZ3RtIixXPSJ3ZWItc2VnbWVudCIsRz0id2ViLXNuaXBwZXQiLFo9InVsLWN1c3RvbS1zdHlsZSIsJD0idWwtY2FyZF9fY29udGFpbmVyIixZPSJ1bC1jYXJkLS12aWRlbyIsSj0iY2xvc2UtY29udGFpbmVyIixLPSJjbG9zZS1idG4iLFg9Imxpa2VydC1udW1iZXIiLFE9Im5wcy1udW1iZXIiLHR0PSJjaG9pY2UiLGV0PSJzZWxlY3QtbGFiZWwiLG50PSJzZWxlY3QtY2hlY2tib3giLHJ0PSJzZWxlY3QtcmFkaW8iLG90PSJ1bC1jYXJkX19jaG9pY2VzIixpdD0idWwtY2FyZC10ZXh0X19pbnB1dCIsYXQ9Ii0tZGVza3RvcCIsY3Q9Ii0tbW9iaWxlIixzdD0idWwtcXVlc3Rpb24iLHV0PSJ1bC1jYXB0aW9uIixsdD0iZmFkZS1pbi10cmFuc2l0aW9uIixmdD0idWwtY2FyZC1tYWluLWNvbnRlbnQiLGR0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QrKGU/Y3Q6YXQpLHRdfSxwdD1mdW5jdGlvbih0LGUpe3JldHVyblt0LCIiLmNvbmNhdCh0LCJfXyIpLmNvbmNhdChlKV19LGh0PWZ1bmN0aW9uKCl7cmV0dXJuIEEoInN2ZyIse3dpZHRoOiIxMDAiLGhlaWdodDoiMTMiLHZpZXdCb3g6IjAgMCAxMDAgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYWx0OiJQb3dlcmVkIGJ5IFNwcmlnIn0sQSgicGF0aCIse2Q6Ik0zLjAzNjkgMC44Mzk5ODFIMC4wMjQ5MDIzVjguOTk5OThIMS4zMjA5VjYuNTM5OThIMi44NTY5QzQuODk2OSA2LjUzOTk4IDYuMjQwOSA1LjM3NTk4IDYuMjQwOSAzLjYyMzk4QzYuMjQwOSAxLjk1NTk4IDQuOTY4OSAwLjgzOTk4MSAzLjAzNjkgMC44Mzk5ODFaTTMuMDAwOSA1LjM1MTk4SDEuMzIwOVYyLjAyNzk4SDMuMDAwOUM0LjE3NjkgMi4wMjc5OCA0Ljk2ODkgMi42NzU5OCA0Ljk2ODkgMy42MjM5OEM0Ljk2ODkgNC42NTU5OCA0LjE3NjkgNS4zNTE5OCAzLjAwMDkgNS4zNTE5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik05LjkwNjUzIDMuMjE1OThDOC4xNTQ1MyAzLjIxNTk4IDYuOTA2NTMgNC40NTE5OCA2LjkwNjUzIDYuMTc5OThDNi45MDY1MyA3LjkwNzk4IDguMTU0NTMgOS4xNDM5OCA5LjkwNjUzIDkuMTQzOThDMTEuNjU4NSA5LjE0Mzk4IDEyLjkwNjUgNy45MDc5OCAxMi45MDY1IDYuMTc5OThDMTIuOTA2NSA0LjQ1MTk4IDExLjY1ODUgMy4yMTU5OCA5LjkwNjUzIDMuMjE1OThaTTkuOTA2NTMgOC4wMTU5OEM4Ljg4NjUzIDguMDE1OTggOC4xNTQ1MyA3LjIzNTk4IDguMTU0NTMgNi4xNzk5OEM4LjE1NDUzIDUuMTExOTggOC44ODY1MyA0LjM0Mzk4IDkuOTA2NTMgNC4zNDM5OEMxMC45MjY1IDQuMzQzOTggMTEuNjU4NSA1LjExMTk4IDExLjY1ODUgNi4xNzk5OEMxMS42NTg1IDcuMjM1OTggMTAuOTI2NSA4LjAxNTk4IDkuOTA2NTMgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik0yMC45NjMxIDMuMzU5OThMMTkuNzM5MSA3LjExNTk4TDE4LjM5NTEgMy4zNTk5OEgxNy4zMjcxTDE1Ljk4MzEgNy4xMjc5OEwxNC43NTkxIDMuMzU5OThIMTMuNDE1MUwxNS40NDMxIDguOTk5OThIMTYuNTM1MUwxNy44NjcxIDUuMDg3OThMMTkuMTg3MSA4Ljk5OTk4SDIwLjI3OTFMMjIuMzA3MSAzLjM1OTk4SDIwLjk2MzFaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNMjUuNzI0NiAzLjIxNTk4QzI0LjAwODYgMy4yMTU5OCAyMi44MjA2IDQuNTExOTggMjIuODIwNiA2LjE3OTk4QzIyLjgyMDYgNy44NTk5OCAyNC4wMjA2IDkuMTQzOTggMjUuNzk2NiA5LjE0Mzk4QzI3LjAyMDYgOS4xNDM5OCAyOC4wMTY2IDguNTQzOTggMjguMzc2NiA3LjUyMzk4SDI3LjAwODZDMjYuNzgwNiA3Ljg4Mzk4IDI2LjM2MDYgOC4wNTE5OCAyNS44MDg2IDguMDUxOThDMjQuNzUyNiA4LjA1MTk4IDI0LjIxMjYgNy40MDM5OCAyNC4wOTI2IDYuNTUxOThIMjguNTIwNkMyOC43NjA2IDQuNjQzOTggMjcuNTk2NiAzLjIxNTk4IDI1LjcyNDYgMy4yMTU5OFpNMjUuNzM2NiA0LjI3MTk4QzI2LjYxMjYgNC4yNzE5OCAyNy4yMTI2IDQuNzYzOTggMjcuMjg0NiA1LjY4Nzk4SDI0LjExNjZDMjQuMjYwNiA0Ljg5NTk4IDI0LjgwMDYgNC4yNzE5OCAyNS43MzY2IDQuMjcxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNMzEuMTI5NyA0LjEyNzk4VjMuMzU5OThIMjkuODgxN1Y4Ljk5OTk4SDMxLjEyOTdWNS40NDc5OEMzMS42MzM3IDQuNzg3OTggMzIuMzE3NyA0LjQ1MTk4IDMzLjIxNzcgNC40MTU5OFYzLjIzOTk4QzMyLjM1MzcgMy4yMzk5OCAzMS42NDU3IDMuNTYzOTggMzEuMTI5NyA0LjEyNzk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTM2LjgyMjIgMy4yMTU5OEMzNS4xMDYyIDMuMjE1OTggMzMuOTE4MiA0LjUxMTk4IDMzLjkxODIgNi4xNzk5OEMzMy45MTgyIDcuODU5OTggMzUuMTE4MiA5LjE0Mzk4IDM2Ljg5NDIgOS4xNDM5OEMzOC4xMTgyIDkuMTQzOTggMzkuMTE0MiA4LjU0Mzk4IDM5LjQ3NDIgNy41MjM5OEgzOC4xMDYyQzM3Ljg3ODIgNy44ODM5OCAzNy40NTgyIDguMDUxOTggMzYuOTA2MiA4LjA1MTk4QzM1Ljg1MDIgOC4wNTE5OCAzNS4zMTAyIDcuNDAzOTggMzUuMTkwMiA2LjU1MTk4SDM5LjYxODJDMzkuODU4MiA0LjY0Mzk4IDM4LjY5NDIgMy4yMTU5OCAzNi44MjIyIDMuMjE1OThaTTM2LjgzNDIgNC4yNzE5OEMzNy43MTAyIDQuMjcxOTggMzguMzEwMiA0Ljc2Mzk4IDM4LjM4MjIgNS42ODc5OEgzNS4yMTQyQzM1LjM1ODIgNC44OTU5OCAzNS44OTgyIDQuMjcxOTggMzYuODM0MiA0LjI3MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTQ1LjQ4ODYgMC40Nzk5OFYzLjgwMzk4QzQ1LjAwODYgMy40MzE5OCA0NC4zOTY2IDMuMjE1OTggNDMuNjc2NiAzLjIxNTk4QzQyLjA5MjYgMy4yMTU5OCA0MC44MjA2IDQuNTM1OTggNDAuODIwNiA2LjE2Nzk4QzQwLjgyMDYgNy44MjM5OCA0Mi4wOTI2IDkuMTQzOTggNDMuNjc2NiA5LjE0Mzk4QzQ0LjM5NjYgOS4xNDM5OCA0NS4wMDg2IDguOTI3OTggNDUuNDg4NiA4LjU0Mzk4VjguOTk5OThINDYuNzI0NlYwLjQ3OTk4SDQ1LjQ4ODZaTTQzLjg1NjYgOC4wMTU5OEM0Mi44MjQ2IDguMDE1OTggNDIuMDY4NiA3LjE3NTk4IDQyLjA2ODYgNi4xNjc5OEM0Mi4wNjg2IDUuMTcxOTggNDIuODI0NiA0LjM0Mzk4IDQzLjg1NjYgNC4zNDM5OEM0NC40ODA2IDQuMzQzOTggNDUuMDY4NiA0LjU1OTk4IDQ1LjQ4ODYgNS4xNTk5OFY3LjE4Nzk4QzQ1LjA2ODYgNy43OTk5OCA0NC40ODA2IDguMDE1OTggNDMuODU2NiA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTU0LjY3OTcgMy4yMTU5OEM1My45NTk3IDMuMjE1OTggNTMuMzQ3NyAzLjQzMTk4IDUyLjg3OTcgMy43OTE5OFYwLjQ3OTk4SDUxLjYzMTdWOC45OTk5OEg1Mi44Nzk3VjguNTU1OThDNTMuMzQ3NyA4LjkyNzk4IDUzLjk1OTcgOS4xNDM5OCA1NC42Nzk3IDkuMTQzOThDNTYuMjYzNyA5LjE0Mzk4IDU3LjU0NzcgNy44MjM5OCA1Ny41NDc3IDYuMTY3OThDNTcuNTQ3NyA0LjUzNTk4IDU2LjI2MzcgMy4yMTU5OCA1NC42Nzk3IDMuMjE1OThaTTU0LjQ5OTcgOC4wMTU5OEM1My44NzU3IDguMDE1OTggNTMuMjk5NyA3Ljc5OTk4IDUyLjg3OTcgNy4yMTE5OFY1LjEzNTk4QzUzLjI5OTcgNC41NDc5OCA1My44NzU3IDQuMzQzOTggNTQuNDk5NyA0LjM0Mzk4QzU1LjU0MzcgNC4zNDM5OCA1Ni4yOTk3IDUuMTcxOTggNTYuMjk5NyA2LjE2Nzk4QzU2LjI5OTcgNy4xNzU5OCA1NS41NDM3IDguMDE1OTggNTQuNDk5NyA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTYzLjMzNDcgMy4zNDc5OEw2MS4zOTA3IDcuNzYzOThMNTkuMjY2NyAzLjM0Nzk4SDU3LjkzNDdMNjAuODE0NyA5LjA4Mzk4TDU5LjYyNjcgMTEuNzg0SDYwLjkzNDdMNjQuNjU0NyAzLjM0Nzk4SDYzLjMzNDdaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNNzEuMTQ2NiA0LjM0NjYxQzY5LjgwOTIgNC4wNTAzOCA2OS4xMzEgMy41MzAwMSA2OS4xMzEgMi44MDA2NUM2OS4xMzEgMi4wNDcwNSA2OS44NTQ2IDEuNDc4MjIgNzAuODE0MiAxLjQ3ODIyQzcxLjgwMzQgMS40NzgyMiA3Mi41NDk2IDIuMTAzMzkgNzIuNTQ5NiAyLjkzMjFWMi45OTgxM0g3My45MTY1VjIuOTMyMUM3My45MTY1IDEuNDE3NjQgNzIuNTg4MyAwLjI3MjcwNSA3MC44MjcxIDAuMjcyNzA1QzY5Ljk3ODQgMC4yNzI3MDUgNjkuMjAwOSAwLjUzMzE5MSA2OC42Mzc5IDEuMDA1N0M2OC4zNTg0IDEuMjM2MTkgNjguMTMzOSAxLjUyNDg3IDY3Ljk4MDUgMS44NTExQzY3LjgyNzEgMi4xNzczMyA2Ny43NDg2IDIuNTMzMDMgNjcuNzUwNiAyLjg5MjczQzY3Ljc0NTEgMy4yMjI1NSA2Ny44MTM3IDMuNTQ5NDkgNjcuOTUxNSAzLjg0OTk0QzY4LjA4OTQgNC4xNTAzOCA2OC4yOTMgNC40MTY4NiA2OC41NDc4IDQuNjMwMTJDNjkuMDIxOCA1LjA0MjY2IDY5LjY5NDUgNS4zNDc5OCA3MC41NDYzIDUuNTM4OEM3MS45ODA2IDUuODU1MDIgNzIuNzA3OCA2LjM5Mjk2IDcyLjcwNzggNy4xMzY4NkM3Mi43MDc4IDcuOTQzMTYgNzEuOTE1NiA4LjU1MDc2IDcwLjg2ODIgOC41NTA3NkM2OS43ODA0IDguNTUwNzYgNjguOTU5OSA3Ljg3NTMxIDY4Ljk1OTkgNi45Nzk5NlY2LjkxMzkzSDY3LjU5MThWNi45Nzk5NkM2Ny41OTE4IDguNTYzNDggNjguOTk0MiA5Ljc1Njg4IDcwLjg1MzUgOS43NTY4OEM3MS43NDI2IDkuNzU2ODggNzIuNTU4OCA5LjQ4NzMxIDczLjE1MTggOC45OTY2MkM3My40NDYgOC43NTgzMSA3My42ODI3IDguNDU4MSA3My44NDQ1IDguMTE3OUM3NC4wMDYzIDcuNzc3NyA3NC4wODkxIDcuNDA2MTEgNzQuMDg3IDcuMDMwMjRDNzQuMDg3IDUuNjg1NCA3My4wOTkxIDQuNzgyMTcgNzEuMTQ2NiA0LjM0NjYxWiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTc4Ljc5ODYgMi41MDgwNkM3OC4yODc0IDIuNTAxNzUgNzcuNzgyMyAyLjYxNzYgNzcuMzI2MyAyLjg0NTc2Qzc2Ljg3MDMgMy4wNzM5MSA3Ni40NzY4IDMuNDA3NTkgNzYuMTc5NSAzLjgxODM3VjIuNjY3MzhINzQuODc4OVYxMi4wNzUySDc2LjE3OTVWOC40ODcxNkM3Ni40NzY4IDguODk3OSA3Ni44NzAzIDkuMjMxNTIgNzcuMzI2MyA5LjQ1OTU3Qzc3Ljc4MjQgOS42ODc2MyA3OC4yODc1IDkuODAzMzUgNzguNzk4NiA5Ljc5Njg3QzgwLjgxNjcgOS43OTY4NyA4Mi4zMzgxIDguMjMwMzEgODIuMzM4MSA2LjE1MjQ2QzgyLjMzODEgNC4wNzQ2MiA4MC44MTY3IDIuNTA4MDYgNzguNzk4NiAyLjUwODA2Wk04MC45ODM1IDYuNDIyNjRDODAuOTMxNiA2Ljk2MjkgODAuNjkyMSA3LjQ2ODc5IDgwLjMwNTYgNy44NTQ0Qzc5LjkxOSA4LjI0MDAxIDc5LjQwOTMgOC40ODE1NiA3OC44NjMgOC41MzgwNEM3OC4xMzY5IDguNjEwNzQgNzcuNDYwNSA4LjQwMjk1IDc2Ljk1ODMgNy45NTQwN0M3Ni40NTYxIDcuNTA1MTggNzYuMTc5NSA2Ljg2MzY1IDc2LjE3OTUgNi4xNTI0NkM3Ni4xNzk1IDQuNzg0NiA3Ny4yMTIyIDMuNzUyOTUgNzguNTgxNSAzLjc1Mjk1Qzc5LjI5MDQgMy43NTI5NSA3OS45MzA2IDQuMDIxOTEgODAuMzc3NiA0LjUxMDE4QzgwLjgzODcgNS4wMTExNiA4MS4wNTQgNS42OTAyNSA4MC45ODM1IDYuNDIyNjRaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNOTguMjkwOCAyLjY2OTJWMy44MDc0N0M5Ny42Nzc2IDIuOTc4NzUgOTYuNzMwMiAyLjUwODA2IDk1LjY1ODMgMi41MDgwNkM5My42NDgyIDIuNTA4MDYgOTIuMTMyMyA0LjA0NjE1IDkyLjEzMjMgNi4wODU4MkM5Mi4xMzIzIDguMTI1NSA5My42NDgyIDkuNjYyOTkgOTUuNjU4MyA5LjY2Mjk5Qzk2LjczNDUgOS42NjI5OSA5Ny42ODE5IDkuMTk3MTQgOTguMjkwOCA4LjM3NjkxVjguNTUxOThDOTguMjkwOCA5Ljk2ODkxIDk3LjM5MDYgMTAuODg0MyA5NS45OTc0IDEwLjg4NDNDOTUuMDU2MSAxMC44ODQzIDk0LjI3MTggMTAuNDc2NiA5My44OTk2IDkuNzkzODRMOTMuODgwNiA5Ljc1ODdIOTIuNTM4OUw5Mi41Njk1IDkuODQ2NTRDOTIuNzk2MSAxMC41MTQgOTMuMjM5MiAxMS4wODg5IDkzLjgzMDMgMTEuNDgyMkM5NC40MjMzIDExLjg3MjMgOTUuMTcyNiAxMi4wNzgzIDk1Ljk5NzQgMTIuMDc4M0M5Ny4wNTUyIDEyLjA3ODMgOTcuOTU1NCAxMS43NDUxIDk4LjYwMTcgMTEuMTE1N0M5OS4yNDgxIDEwLjQ4NjIgOTkuNTkxNSA5LjYwMTIgOTkuNTkxNSA4LjU2NzczVjIuNjY5Mkg5OC4yOTA4Wk05Ny41NjExIDcuODQyQzk3LjAwOTIgOC4zNjQxOCA5Ni4yMjI1IDguNTgzNDggOTUuNDAwMSA4LjQ0Mjk0Qzk0LjkxMzIgOC4zNTc5NiA5NC40NjY0IDguMTIxODQgOTQuMTI0NSA3Ljc2ODg5QzkzLjc4MjcgNy40MTU5MyA5My41NjM2IDYuOTY0NTIgOTMuNDk5MiA2LjQ4MDE5QzkzLjM4MzMgNS42NjU0MSA5My42MzEgNC44OTM2NCA5NC4xNzg2IDQuMzY0MThDOTQuNjM4MyAzLjkyNzQxIDk1LjI1NDIgMy42ODc4OCA5NS44OTE5IDMuNjk3ODJDOTYuMDQ2NCAzLjY5Nzk1IDk2LjIwMDYgMy43MTAzMSA5Ni4zNTMxIDMuNzM0NzdDOTcuMzQ1OSAzLjg5MzQ5IDk4LjEzMTQgNC43MDQwMyA5OC4yNjMyIDUuNzEwMjRDOTguMzc0OSA2LjUzODM1IDk4LjExNzkgNy4zMTQzNiA5Ny41NjExIDcuODQyWiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTkwLjcwNSAwLjA5OTU5NzVDOTAuNDYwMiAwLjA0Njc3MyA5MC4yMDQzIDAuMDkxMTk3MSA4OS45OTI1IDAuMjIzMjY5Qzg5Ljc4MDYgMC4zNTUzNCA4OS42Mjk5IDAuNTY0NDUyIDg5LjU3MjkgMC44MDU0MDlDODkuNTE1OSAxLjA0NjM3IDg5LjU1NzEgMS4yOTk4MiA4OS42ODc3IDEuNTEwOThDODkuODE4MyAxLjcyMjE1IDkwLjAyNzcgMS44NzQwNyA5MC4yNzA4IDEuOTMzOTFDOTAuMzQxNSAxLjk0OTU0IDkwLjQxMzYgMS45NTc0NyA5MC40ODYgMS45NTc1NEM5MC43MiAxLjk1NzkgOTAuOTQ1OCAxLjg3MzI1IDkxLjEyMDYgMS43MTk3M0M5MS4yOTU1IDEuNTY2MiA5MS40MDcgMS4zNTQ1MiA5MS40MzQxIDEuMTI1QzkxLjQ2MTEgMC44OTU0NyA5MS40MDE3IDAuNjY0MTM1IDkxLjI2NzMgMC40NzUwNDZDOTEuMTMyOSAwLjI4NTk1OCA5MC45MzI3IDAuMTUyMzI1IDkwLjcwNSAwLjA5OTU5NzVWMC4wOTk1OTc1WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTg5LjgzNjYgOC4zOTE0M0g4OC43MTVDODcuOTE3OCA4LjM5MTQzIDg3LjQzODkgNy44NTUzMSA4Ny40Mzg5IDYuOTU2OTNDODcuNDM4OSA2LjA4MDk2IDg3Ljg2ODEgNS4wMzY1OSA4OC43NDMyIDMuNzY0NDRMODguNzU0OCAzLjc0NzQ4VjMuMzg4MjVMODUuMDI3MSAyLjg2NzI3Qzg1LjAyODQgMi43MTU1MyA4NC45ODg2IDIuNTY2MjIgODQuOTExOCAyLjQzNDc4Qzg0LjgzNTEgMi4zMDMzNSA4NC43MjQxIDIuMTk0NTggODQuNTkwNSAyLjExOTczQzg0LjI1NjMgMS45MzggODMuODkwOCAxLjkzOCA4My41ODc5IDIuMTEzNjhDODMuNDM2MSAyLjIwMjMgODMuMzEyMiAyLjMzMDc3IDgzLjIzIDIuNDg0OEM4My4xNDc3IDIuNjM4ODQgODMuMTEwMyAyLjgxMjQgODMuMTIxOSAyLjk4NjE4QzgzLjEzMzYgMy4xNTk5NiA4My4xOTM4IDMuMzI3MTQgODMuMjk1OCAzLjQ2OTE0QzgzLjM5NzkgMy42MTExNCA4My41Mzc5IDMuNzIyMzggODMuNzAwMSAzLjc5MDQ5TDgyLjU0MDUgOS42Mzc1M0g4My44MjgzTDg0Ljg5NzcgNC4wODU1MUw4Ni45MTE1IDQuNDIxMTFDODYuMzcwMSA1LjM4MDA3IDg2LjA5NTMgNi4yNzQyMSA4Ni4wOTUzIDcuMDc4NjlDODYuMDk1MyA4LjU2MzQ3IDg3LjAwNDEgOS41MzU3NiA4OC40NzM0IDkuNjI5NjVWOS42Mzc1M0g5MS4xMzQxVjIuNjkwOTlIODkuODM2NlY4LjM5MTQzWiIsZmlsbDoiIzVENjk2RiJ9KSl9LHZ0PW4oNzYzOTApLGd0PW4ubih2dCkseXQ9e2VxOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PWV9LG5lcTpmdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLmVxKHQsZSl9LGd0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0sZ3RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+PWV9LGx0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX0sbHRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8PWV9LGxpc3RfZXhhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJnQuc2xpY2UoKS5zb3J0KCkuam9pbigiLCIpPT09ZS5zbGljZSgpLnNvcnQoKS5qb2luKCIsIil9LGxpc3RfYWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiYhZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMT09PXQuaW5kZXhPZihlKX0pKX0sbGlzdF9hbG86ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJmUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPXQuaW5kZXhPZihlKX0pKX19O2Z1bmN0aW9uIG10KHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UibXVsdGlwbGVzZWxlY3QiOnJldHVybiB0JiZ0LnByb3BzJiZ0LnByb3BzLm9wdGlvbnM/dC5wcm9wcy5vcHRpb25zLmxlbmd0aD4xMz90LnByb3BzLm9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdC52YWx1ZV19KSk6dC5wcm9wcy5vcHRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdCh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW10uY29uY2F0KF8oKSh0KSxbZV0pfSkpKX0pLFtbXV0pOm51bGw7Y2FzZSJtdWx0aXBsZWNob2ljZSI6cmV0dXJuIHQmJnQucHJvcHMmJnQucHJvcHMub3B0aW9ucz90LnByb3BzLm9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKTpudWxsO2Nhc2UibGlrZXJ0IjpyZXR1cm5bMSwyLDMsNCw1XTtjYXNlIm5wcyI6cmV0dXJuWzAsMSwyLDMsNCw1LDYsNyw4LDksMTBdO2RlZmF1bHQ6cmV0dXJuWzFdfX12YXIgYnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9KHQuYXBwLmRlY2suY2FyZHN8fFtdKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSksbj10LmFwcC5kZWNrLmluZGV4LG89dC5hcHAsaT1vLnNob3dTdXJ2ZXlCcmFuZCxhPW8ubWFya2V0aW5nVXJsLGM9by5zbHVnTmFtZSxzPW8uc3VydmV5SWQsdT1vLnZpZXdlZENhcmRDb3VudCxsPW8uaGVhZGVycyxmPW8uZGVjayxkPW8uYm9yZGVyLHA9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZighdHx8IXQubGVuZ3RofHxlPj10Lmxlbmd0aHx8ZTwwKXJldHVybiAwO2lmKCF0W2VdLnR5cGUpcmV0dXJuIDA7dmFyIG89dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7aWYoZT09PW8ubGVuZ3RoLTEpcmV0dXJuIDE7Zm9yKHZhciBpPShuPXt9LHIoKShuLG8ubGVuZ3RoLTEsMSkscigpKG4sLTEsMCksbiksYT1vLmxlbmd0aC0yO2E+PWU7YS0tKXt2YXIgYz1vW2FdLHM9YyYmYy5wcm9wcyYmYy5wcm9wcy5yb3V0aW5nT3B0aW9uc3x8W107aWYoMCE9PXMubGVuZ3RoKXt2YXIgdT0wLGw9bXQoYyk7aWYobnVsbD09PWwpcmV0dXJuIG8ubGVuZ3RoLTEtZTtmb3IodmFyIGY9ZnVuY3Rpb24odCl7aWYoMD09PWwubGVuZ3RoKXJldHVybiJicmVhayI7dmFyIG49c1t0XSxyPW4uY29tcGFyYXRvcixjPW4udGFyZ2V0LGY9bi52YWx1ZSxkPWwuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hKCJhbnN3ZXJlZCI9PT1yfHx5dFtyXSYmeXRbcl0odCxmKSl9KSk7aWYoZC5sZW5ndGg8bC5sZW5ndGgpe3ZhciBwPXBhcnNlSW50KGMsMTApO2lmKC0xIT09cCYmcDw9YXx8cD49by5sZW5ndGgpcmV0dXJue3Y6by5sZW5ndGgtMS1lfTt1PU1hdGgubWF4KGlbcF0rMSx1KX1sPWR9LGQ9MDtkPHMubGVuZ3RoO2QrKyl7dmFyIHA9ZihkKTtpZigiYnJlYWsiPT09cClicmVhaztpZigib2JqZWN0Ij09PWd0KCkocCkpcmV0dXJuIHAudn0obC5sZW5ndGg+MHx8InZpZGVvdm9pY2UiPT09Yy50eXBlKSYmKHU9TWF0aC5tYXgoaVthKzFdKzEsdSkpLGlbYV09dX1lbHNlIGlbYV09aVthKzFdKzF9cmV0dXJuIGlbZV19KGYuY2FyZHN8fFtdLGYuaW5kZXgpLGg9dSsxLHY9aC8oaCtwKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGk/QSgiYSIse3N0eWxlOiJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiA1cHggMCAxMHB4IDAiLGhyZWY6IiIuY29uY2F0KGEsIj91dG1fc291cmNlPXN1cnZleV9icmFuZGluZyZ1dG1fbWVkaXVtPXdlYnNpdGUmdXRtX2NhbXBhaWduPSIpLmNvbmNhdChjLCImdXRtX2NvbnRlbnQ9IikuY29uY2F0KHMpLHRhcmdldDoiX2JsYW5rIn0saHQpOm51bGx9O2lmKCFlfHwxPT09ZS5sZW5ndGgpcmV0dXJuIEEoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sZyk7dmFyIHk9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciIpLGU9dD90LmNsaWVudFdpZHRoOjI1MCxuPXQ/IiIuY29uY2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1wcm9ncmVzcy1iYXItY3VycmVudCIpLnN0eWxlLndpZHRoLnJlcGxhY2UoInB4IiwiIikpOjAscj0iIi5jb25jYXQocGFyc2VGbG9hdCgodiplKS50b0ZpeGVkKDQpKSk7cmV0dXJuIG4hPT1yJiZtKG4scikse3dpZHRoOiIiLmNvbmNhdChyLCJweCIpLGFuaW1hdGlvbjoiZ3Jvd1JpZ2h0IDFzIixib3JkZXI6IjFweCBzb2xpZCAiLmNvbmNhdChkfHwiIzAwMCIpfX0sbT1mdW5jdGlvbih0LGUpe3ZhciBuPSJcbiAgICAgIEBrZXlmcmFtZXMgZ3Jvd1JpZ2h0IHtcbiAgICAgICAgZnJvbSB7XG4gICAgICAgICAgd2lkdGg6ICIuY29uY2F0KHQsInB4O1xuICAgICAgICB9XG4gICAgICAgIHRvIHtcbiAgICAgICAgICB3aWR0aDogIikuY29uY2F0KGUsInB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgIikscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3IudHlwZT0idGV4dC9jc3MiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQociksci5zaGVldC5pbnNlcnRSdWxlKG4sci5sZW5ndGgpfTtyZXR1cm4gQSgiZm9vdGVyIix7Y2xhc3NOYW1lOiJ1bC1mb290ZXIgIi5jb25jYXQoImxpbmsiPT09bFsidXNlcmxlYXAtcGxhdGZvcm0iXT8idWwtZm9vdGVyX19saW5rIjoiIiksa2V5Om59LChmdW5jdGlvbigpe3JldHVybiBlLmxlbmd0aD4xP0EoImRpdiIse2lkOiJ1bC1wcm9ncmVzcy1iYXItY29udGFpbmVyIn0sQSgiZGl2Iix7aWQ6InVsLXByb2dyZXNzLWJhci1jdXJyZW50IixzdHlsZTp5KCl9KSk6bnVsbH0pLGcpfX07ZnVuY3Rpb24geHQodCxlKXt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkodCl8fChuPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gd3QodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09bnx8IlNldCI9PT1uKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKCJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHd0KHQsZSl9KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7biYmKHQ9bik7dmFyIHI9MCxvPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpvLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjpvfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksYT0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gYT10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtjPSEwLGk9dH0sZjpmdW5jdGlvbigpe3RyeXthfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiB3dCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBFdD0idWwtYXBwIixqdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwO24ucnVubmluZ3x8ZS5kZXN0cm95KEV0KTt2YXIgbyxpPW4uZGVjay5jYXJkc1tuLmRlY2suaW5kZXhdLGE9aS5DYXJkLGM9aS5wcm9wcyxzPWkudHlwZSx1PWkubmFtZSxsPW4uYm9yZGVyLGY9ZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixlLmNsb3NlKEV0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPW4uZGVjay5jYXJkcyxwPW4uZGVjay5pbmRleCxoPW4uZm9udEZhbWlseT97Zm9udEZhbWlseTpuLmZvbnRGYW1pbHkucmVwbGFjZSgiOyIsIiIpfTp7fSx2PW4uZW5kQ2FyZCxnPWZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KG4pe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6ZS5hcHAubmV4dCh7ZGF0YTpuLGNvbXBsZXRlU3VydmV5OmZ1bmN0aW9uKCl7ZS5kZXN0cm95KEV0KX0sZW5kQ2FyZDp2fSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHk9eHQobi5hbnN3ZXJzfHxbXSk7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIHQ9by52YWx1ZTtpZih0LnF1ZXN0aW9uSWQ9PT11KXt2YXIgZTtpZigibXVsdGlwbGVjaG9pY2UiPT09cyl7dmFyIG49Yy5vcHRpb25zLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dC52YWx1ZX0pKTtpZighbilyZXR1cm4iYnJlYWsiO2U9cigpKHt9LG4uaWQsbi52YWx1ZSl9ZWxzZSBlPXQudmFsdWU7cmV0dXJuIGcoe3ZhbHVlOmV9KSwiYnJlYWsifX07Zm9yKHkucygpOyEobz15Lm4oKSkuZG9uZTspe2lmKCJicmVhayI9PT1tKCkpYnJlYWt9fWNhdGNoKHQpe3kuZSh0KX1maW5hbGx5e3kuZigpfXJldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6InVsLWFwcCIsaWQ6RXQsb25jcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPVsidHJhbnNpdGlvbmVuZCIsIndlYmtpdFRyYW5zaXRpb25FbmQiLCJtb3pUcmFuc2l0aW9uRW5kIl0sbz0hMSxpPWZ1bmN0aW9uIG4oKXtpZighbyYmd2luZG93LmZyYW1lRWxlbWVudCl7dmFyIGk9bmV3IEV2ZW50KCJ1bDpmcmFtZTpyZW5kZXJlZCIpO3dpbmRvdy5mcmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChpKX1vPSEwLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoRXQpfSksMzAwKX07ci5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxpKX0pKSxuLmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljaygoZnVuY3Rpb24oKXtlLmNsb3NlKEV0KX0pKSxlLnVwZGF0ZShFdCl9KHQpfSxvbnVwZGF0ZTpmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZShFdCl9LHN0eWxlOmh9LEEoImRpdiIse2NsYXNzTmFtZToidWwtYXBwX19jb250YWluZXIifSxBKCJkaXYiLHtjbGFzc05hbWU6RihfKCkoZHQoJCxuLnVzZU1vYmlsZVN0eWxpbmcpKSksc3R5bGU6ImxpbmsiPT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdP3tib3hTaGFkb3c6InVuc2V0Iixib3JkZXJSYWRpdXM6InVuc2V0Iixib3JkZXI6Im5vbmUgIWltcG9ydGFudCJ9Om4udXNlTW9iaWxlU3R5bGluZz97Ym9yZGVyQ29sb3I6bH06e2JvcmRlckNvbG9yOmwsbWFyZ2luOiIxNXB4In19LEEoYSxNKCkoe30sYyx7Ym9yZGVyOmwsY2xhc3NOYW1lOiJ1bC1jYXJkIixuZXh0OmcsZW5kQ2FyZDp2LGxvY2FsZTpuLmxvY2FsZSxxdWVzdGlvbklkOnUsdXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKEV0KX19KSksQShidCxudWxsKSksImVtYWlsIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmImxpbmsiIT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdJiYoIXZ8fHArMSE9PWQubGVuZ3RoKSYmQSgiZGl2Iix7Y2xhc3NOYW1lOkYoZHQoSixuLnVzZU1vYmlsZVN0eWxpbmcpKX0sQSgiZGl2Iix7Y2xhc3NOYW1lOkssb25jbGljazpmLG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTM9PXQua2V5Q29kZSYmZigpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UgYnV0dG9uIix0YWJpbmRleDowfSxBKCJzdmciLHt3aWR0aDoiMThweCIsaGVpZ2h0OiIxOHB4Iix2aWV3Qm94OiIwIDAgMTMgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEEoInBhdGgiLHtkOiJNMi41NDk2NCAxLjc4MzY5TDEuNzgzNjkgMi41NDk2NEw1LjczNDA1IDYuNUwxLjc4MzY5IDEwLjQ1MDRMMi41NDk2NCAxMS4yMTYzTDYuNSA3LjI2NTk1TDEwLjQ1MDQgMTEuMjE2M0wxMS4yMTYzIDEwLjQ1MDRMNy4yNjU5NSA2LjVMMTEuMjE2MyAyLjU0OTY0TDEwLjQ1MDQgMS43ODM2OUw2LjUgNS43MzQwNUwyLjU0OTY0IDEuNzgzNjlaIixmaWxsOiIjMjYyMTM2In0pKSkpKSl9LEN0PW4oNDcwNjYpLGt0PW4ubihDdCksU3Q9bigzMDU5MyksT3Q9bi5uKFN0KSxBdD1uKDQ0NTMpLEl0PW4ubihBdCksTXQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5wYXJlbnQuSW50ZXJjb219Y2F0Y2godCl7fX0sVHQ9ZnVuY3Rpb24oKXt2YXIgdD1NdCgpO3QmJih0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMX0pLGRlbGV0ZSB0LnVsX3dhc1Zpc2libGUpfSxfdD1mdW5jdGlvbigpe3ZhciB0PU10KCk7dCYmKHQudWxfd2FzVmlzaWJsZT0hIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZS5pbnRlcmNvbS1sYXVuY2hlci1mcmFtZSIpLHQudWxfd2FzVmlzaWJsZSYmdCgidXBkYXRlIix7aGlkZV9kZWZhdWx0X2xhdW5jaGVyOiEwfSkpfSxMdD1bdF0sUnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7T3QoKSh0aGlzLHQpfXJldHVybiBJdCgpKHQsbnVsbCxbe2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtMdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlKCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7THQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5hYmxlKCl9KSl9fV0pLHR9KCksUHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuY2FwdGlvblRleHQ/QSgicCIse2lkOnV0LGNsYXNzTmFtZTp1dH0sdC5jYXB0aW9uVGV4dCk6bnVsbH0sTnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQSgicCIsdD97aWQ6c3QsY2xhc3NOYW1lOnN0LHJvbGU6ImhlYWRpbmcifTp7aWQ6c3QsY2xhc3NOYW1lOnN0LHN0eWxlOiJtYXJnaW4tYm90dG9tOiAxNXB4Iixyb2xlOiJoZWFkaW5nIn0sZSl9LER0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmJ1dHRvblRleHQ/dC5idXR0b25UZXh0OiJOZXh0In0sRnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuc2tpcEJ1dHRvblRleHQ/dC5za2lwQnV0dG9uVGV4dDoiU2tpcCJ9LFV0PW4oOTczNDMpLEJ0PW4ubihVdCk7ZnVuY3Rpb24genQodCxlKXtlKHQpfXZhciBIdD1mdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQubGFiZWwscj10LnNlbGVjdGVkLG89KHQuaW5kZXgsdC5pZCksaT10Lm9uU2VsZWN0LGE9dC5pc1JhZGlvLGM9dC51c2VNb2JpbGVTdHlsaW5nLHM9ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNob2ljZS1kaXYtIi5jb25jYXQobykpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhZGlvLSIuY29uY2F0KG8pKTtuJiYobi5zdHlsZS5ib3JkZXJDb2xvcj1lKSxyJiYoci5zdHlsZS5ib3JkZXJXaWR0aD0iNnB4IixyLnN0eWxlLmJvcmRlckNvbG9yPWUsci5zdHlsZS5ib3hTaGFkb3c9Im5vbmUiKX0sdT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO2UmJihlLnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2IiksbiYmKG4uc3R5bGUuYm9yZGVyV2lkdGg9IjFweCIsbi5zdHlsZS5ib3JkZXJDb2xvcj0iIzMyMzIzMiIsbi5zdHlsZS5ib3hTaGFkb3c9Imluc2V0IDNweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSIpfSxsPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdSgpLGkobyl9LGY9e29uY2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGwodCl9KHQpfX07Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KGYub250b3VjaHN0YXJ0PXMsZi5vbnRvdWNoY2FuY2VsPXUsZi5vbnRvdWNobW92ZT11LGYub250b3VjaGVuZD11KTooZi5vbm1vdXNlZG93bj1zLGYub25tb3VzZWxlYXZlPXUpO3ZhciBkPWE/InJhZGlvLSIuY29uY2F0KG8pOiJjaGVja2JveC0iLmNvbmNhdChvKTtyZXR1cm4gQSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKGR0KHR0LGMpKSxpZDoiY2hvaWNlLWRpdi0iLmNvbmNhdChvKX0sZiksIWEmJkEoImRpdiIse2NsYXNzTmFtZTpudCxpZDpkLHN0eWxlOnI/e2JhY2tncm91bmRDb2xvcjplLGJvcmRlckNvbG9yOmUsYm94U2hhZG93OiJub25lIn06e30scm9sZToiY2hlY2tib3giLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIGxhYmVsLSIpLmNvbmNhdChvKSwiYXJpYS1jaGVja2VkIjpyLHRhYmluZGV4OjB9LHImJkEoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDEwIDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxBKCJwYXRoIix7ZDoiTTkuMTUzNzcgMS4zMDc3NEw0LjA3Njg1IDguMjMwODJMMS4zMDc2MiA1LjAwMDA1IixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoiMiIsInN0cm9rZS1saW5lY2FwIjoicm91bmQifSkpKSxhJiZBKCJkaXYiLHtjbGFzc05hbWU6cnQsaWQ6ZCxyb2xlOiJyYWRpbyIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLHRhYmluZGV4OjB9KSxBKCJsYWJlbCIse2NsYXNzTmFtZTpGKGR0KGV0LGMpKSxmb3I6ZCxpZDoibGFiZWwtIi5jb25jYXQobyl9LG4pKX07Y29uc3QgVnQ9Imh0dHBzOi8vY2RuLnNwcmlnLmNvbSIscXQ9dD0+dCsiLWxvYWRpbmctc3BpbmVyIixXdD0iaGlkZGVuIixHdD0idmlzaWJsZSIsWnQ9InVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIiwkdD0idWwtcmVjb3JkaW5nLWluLXNlc3Npb24iLFl0PVt7dHlwZToibGluayIsY29udGVudDpgJHtWdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAke1Z0fS9kZXBlbmRlbmNpZXMvUmVjb3JkUlRDLTUuNi4yLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHtWdH0vZGVwZW5kZW5jaWVzL2FkYXB0ZXIuOC4wLjAubWluLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHtWdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7VnR9L3VzZXJsZWFwLXdlYi11cGNodW5rLXYyLjIuMi5qc2B9XSxKdD1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7VnR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmNzc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7VnR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmpzYH0se3R5cGU6InN0eWxlIixjb250ZW50OiIvKiBwcm9ncmVzcyBjb250cm9sIHN0eWxlcyAqL1xuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXByb2dyZXNzLWhvbGRlciB7XG4gIG1hcmdpbjogMCAwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogM3B4O1xuICB3aWR0aDogMTAwJTtcbn1cbi8qIHBvc2l0aW9uIGFuZCBhbGlnbiB0aGUgYnV0dG9ucyBhbmQgYnV0dG9uIHRleHRzICovXG4udWwtY29udHJvbC1wYW5lbCB7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICB6LWluZGV4OiAyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiBibGFjaztcbiAgaGVpZ2h0OiA1MHB4O1xuICBwYWRkaW5nOiAycHggMTRweCAwO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHdpZHRoOiA0MHB4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCA+IC52anMtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDNlbTtcbiAgd2lkdGg6IDNlbTtcbiAgbWFyZ2luOiAwIDEwcHg7XG59XG5cbnNwYW4udWwtYnV0dG9uLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMjVweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAyNXB4KTtcbn1cblxuI3VsLWNhbWVyYS1idXR0b24ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udWwtaW5hY3RpdmUge1xuICBvcGFjaXR5OiAwLjM7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtaG9yaXpvbnRhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHotaW5kZXg6IDE7XG59XG5cbi52anMtdm9sdW1lLWJhci52anMtc2xpZGVyLWhvcml6b250YWwgLnZqcy12b2x1bWUtbGV2ZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtaG92ZXIsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbDphY3RpdmUge1xuICB3aWR0aDogNDBweDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXNsaWRlci1hY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwgLnZqcy12b2x1bWUtY29udHJvbDphY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtbXV0ZS1jb250cm9sIH4gLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDphY3RpdmUgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDpmb2N1cyAudmpzLXZvbHVtZS1jb250cm9sIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgbGVmdDogNDBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuMXMsIG9wYWNpdHkgMC4xcywgaGVpZ2h0IDAuMXMsIHdpZHRoIDAuMXMsIGxlZnQgMHMsIHRvcCAwcztcbn1cblxuLyogcGxheSBidXR0b24gY3VzdG9taXphdGlvbiAqL1xuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLyogcG9zaXRpb24gYW5kIHN0eWxlIHRoZSBjdXJyZW50IHRpbWVyICovXG4udWwtdGltZS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA4MHB4O1xuICBsZWZ0OiAxMHB4O1xuICBoZWlnaHQ6IDIycHg7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlYjtcbiAgYm9yZGVyLXJhZGl1czogMjNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbn1cblxuLnZpZGVvLWpzIC52anMtY3VycmVudC10aW1lLFxuLnZqcy1uby1mbGV4IC52anMtY3VycmVudC10aW1lIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiByZW1vdmUgdGhlIGRvdCBwcm9ncmVzcyBpbmRpY2F0b3IgKi9cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3M6YmVmb3JlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWxldmVsOmJlZm9yZSxcbi52anMtaWNvbi1jaXJjbGU6YmVmb3JlLFxuLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNS4zMjRBLjc1Ljc1IDAgMDE5LjI1IDF2MTEuNjY3YS43NS43NSAwIDAxLTEuMjE5LjU4NWwtMy45Ni0zLjE2OUgxYS43NS43NSAwIDAxLS43NS0uNzV2LTVhLjc1Ljc1IDAgMDEuNzUtLjc1aDMuMDdMOC4wMzEuNDE0YS43NS43NSAwIDAxLjc5NC0uMDl6TTcuNzUgMi41Nkw0LjgwMiA0LjkyYS43NS43NSAwIDAxLS40NjkuMTY0SDEuNzV2My41aDIuNTgzYS43NS43NSAwIDAxLjQ2OS4xNjVsMi45NDggMi4zNThWMi41NnpNMTQuOTExLjQ3YS43NS43NSAwIDAxMS4wNjEgMCA5LjA4NCA5LjA4NCAwIDAxMCAxMi44NDQuNzUuNzUgMCAwMS0xLjA2LTEuMDYgNy41ODQgNy41ODQgMCAwMDAtMTAuNzI0Ljc1Ljc1IDAgMDEwLTEuMDZ6TTExLjk3IDMuNDFhLjc1Ljc1IDAgMDExLjA2IDAgNC45MTcgNC45MTcgMCAwMTAgNi45NTMuNzUuNzUgMCAxMS0xLjA2LTEuMDYgMy40MTcgMy40MTcgMCAwMDAtNC44MzIuNzUuNzUgMCAwMTAtMS4wNnonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J004LjUgMS4xNjdMNC4zMzMgNC41SDF2NWgzLjMzM0w4LjUgMTIuODMzVjEuMTY3ek0xNy4xNyA0LjVsLTUgNU0xMi4xNyA0LjVsNSA1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0yIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgdmlld0JveD0nMCAwIDE5IDE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTguODI0ODkgMC4zMjQwM0M5LjA4NDc0IDAuNDQ4OTIgOS4yNSAwLjcxMTcwMyA5LjI1IDEuMDAwMDFWMTIuNjY2N0M5LjI1IDEyLjk1NSA5LjA4NDc0IDEzLjIxNzggOC44MjQ4OSAxMy4zNDI3QzguNTY1MDQgMTMuNDY3NSA4LjI1NjYxIDEzLjQzMjQgOC4wMzE0OCAxMy4yNTIzTDQuMDcwMjUgMTAuMDgzM0gxQzAuNTg1Nzg2IDEwLjA4MzMgMC4yNSA5Ljc0NzU1IDAuMjUgOS4zMzMzNFY0LjMzMzM0QzAuMjUgMy45MTkxMyAwLjU4NTc4NiAzLjU4MzM0IDEgMy41ODMzNEg0LjA3MDI1TDguMDMxNDggMC40MTQzNTVDOC4yNTY2MSAwLjIzNDI1MyA4LjU2NTA0IDAuMTk5MTQgOC44MjQ4OSAwLjMyNDAzWk03Ljc1IDIuNTYwNDhMNC44MDE4NSA0LjkxODk5QzQuNjY4ODcgNS4wMjUzOCA0LjUwMzY0IDUuMDgzMzQgNC4zMzMzMyA1LjA4MzM0SDEuNzVWOC41ODMzNEg0LjMzMzMzQzQuNTAzNjQgOC41ODMzNCA0LjY2ODg3IDguNjQxMyA0LjgwMTg1IDguNzQ3NjlMNy43NSAxMS4xMDYyVjIuNTYwNDhaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS45Njk4IDMuNDExMjRDMTIuMjYyNyAzLjExODM5IDEyLjczNzYgMy4xMTg0NiAxMy4wMzA0IDMuNDExNEMxMy45NTIxIDQuMzMzNDEgMTQuNDY5OSA1LjU4Mzc2IDE0LjQ2OTkgNi44ODc0OEMxNC40Njk5IDguMTkxMjEgMTMuOTUyMSA5LjQ0MTU2IDEzLjAzMDQgMTAuMzYzNkMxMi43Mzc2IDEwLjY1NjUgMTIuMjYyNyAxMC42NTY2IDExLjk2OTggMTAuMzYzN0MxMS42NzY4IDEwLjA3MDkgMTEuNjc2NyA5LjU5NiAxMS45Njk2IDkuMzAzMDdDMTIuNjEwMSA4LjY2MjM1IDEyLjk2OTkgNy43OTM0NiAxMi45Njk5IDYuODg3NDhDMTIuOTY5OSA1Ljk4MTUxIDEyLjYxMDEgNS4xMTI2MiAxMS45Njk2IDQuNDcxOUMxMS42NzY3IDQuMTc4OTYgMTEuNjc2OCAzLjcwNDA5IDExLjk2OTggMy40MTEyNFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWNvbnRyb2w6aG92ZXIgLnZqcy1tb3VzZS1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi8qIHBvc2l0aW9uIHZpZGVvIHBsYXllciBpbnNpZGUgdGhlIGNvbnRhaW5lciAqL1xuLnZpZGVvLWpzIC52anMtdGVjaCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG59XG5cbi52aWRlby1qcyAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0b3A6IC0yNXB4O1xuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDUwcHggIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcy52anMtc2xpZGVyLWJhciAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi51bC12aWRlby1wbGF5ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52aWRlby1qcy52anMtZnVsbHNjcmVlbjpub3QoLnZqcy1pb3MtbmF0aXZlLWZzKSB7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlci12aWRlby1yZWNvcmRlci52anMtZnVsbHNjcmVlbiB7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4udmlkZW8tanMgZGl2LnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgbWFyZ2luLXRvcDogLTNweDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXNsaWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCMkJCQkQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIC52anMtY29udHJvbC52anMtYnV0dG9uLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wge1xuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgb24gY2lyY3VsYXIgcGxheSBjb250cm9sIGJ1dHRvbnMgKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA1cHgpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLXBsYXlpbmcgPiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA0cHgpO1xufVxuXG4vKiBmaXggb3Bwb3NpdGUgbWlzYWxpZ25tZW50IGJ1ZyBvbiBub25jaXJjdWxhciBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS44MjE0MyAyLjU0MDA0TDEyLjI2MTQgMi41NDAwNEMxMi45MjQyIDIuNTQwMDQgMTMuNDYxNCAzLjA3NzMgMTMuNDYxNCAzLjc0MDA0TDEzLjQ2MTQgNi4xODAwNCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4xNzk1NSAxMy40NkwzLjczOTU1IDEzLjQ2QzMuMDc2ODEgMTMuNDYgMi41Mzk1NSAxMi45MjI3IDIuNTM5NTUgMTIuMjZMMi41Mzk1NSA5LjgxOTk2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J00xMi43NzcyIDMuMjIyNjZMOS4zNjQ3NSA2LjYzNTE2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J002LjI5NDM0IDkuNzA2MDVMMi44ODE4NCAxMy4xMTg2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4gLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMS41ODMgOS44MTNINS4yNWExIDEgMCAwMTEgMXYzLjY2Nk01LjM3NSAxMC42ODhMMSAxNS4wNjFNMTQuOTE3IDUuODEzSDExLjI1YTEgMSAwIDAxLTEtMVYxLjE0Nk0xNS4wNjMgMWwtNC4zNzYgNC4zNzUnIHN0cm9rZT0nJTIzMjYyMTM2JyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLWVuZGVkIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLWljb24tcmVwbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcmVjdCB4PSczLjYxODg1JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0NyZWN0IHg9JzkuMjE3OTcnIHk9JzIuMDYwNzQnIHdpZHRoPSczLjE2MTg1JyBoZWlnaHQ9JzExLjg4JyByeD0nMC45JyBmaWxsPSdibGFjaycgc3Ryb2tlPSclMjNFREVERUQnIHN0cm9rZS13aWR0aD0nMC42JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG4gIHBhZGRpbmc6IDJweDtcbn1cblxuLnZqcy1lcnJvci1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnVsLXZpZGVvLXBsYXllci12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLXZpZGVvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGxlZnQ6IDBweDtcbiAgdG9wOiAwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLyogSW5zaWRlIEF1dG8gTGF5b3V0ICovXG5cbiAgZmxleDogbm9uZTtcbiAgb3JkZXI6IDA7XG4gIGZsZXgtZ3JvdzogMDtcbiAgbWFyZ2luOiAxMHB4IDBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmpzLXJlY29yZCBidXR0b24udmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDk2KTtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgbGluZS1oZWlnaHQ6IDAuNjtcbiAgcGFkZGluZzogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDM7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDpiZWZvcmUge1xuICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzM7XG4gIGNvbnRlbnQ6IFwiWW91ciBicm93c2VyIG5lZWRzIHRvIGFjY2VzcyB5b3VyIGNhbWVyYSBhbmQgbWljcm9waG9uZSBmb3IgdmlkZW8gcmVjb3JkaW5nXCI7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjb250ZW50OiBcIlVuYWJsZSB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmVcIjtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiAjRjBGMEY1O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29udGVudDogXCJSZXF1ZXN0IFBlcm1pc3Npb25zXCI7XG4gIHBhZGRpbmc6IDFlbSAyZW07XG4gIGNvbG9yOiAjMzMzO1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbnRlbnQ6IFwiUGxlYXNlIGdvIHRvIHlvdXIgYnJvd3NlciBzZXR0aW5ncyBhbmQgdXBkYXRlIHBlcm1pc3Npb25zIHRvIGVuYWJsZSByZWNvcmRpbmdcIjtcbiAgcGFkZGluZzogMWVtO1xuICBjb2xvcjogIzRCNTc1RDtcbiAgbWFyZ2luOiA1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHksIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuMjEyMzQgNy4zNzU0OVYxMS4xMTkzTTIuNTM5MzEgNC4yNTU5NUgxMy40NTkzSDIuNTM5MzFaTTUuNTcyMzQgNC4yNTU5NVYzLjAwODMzQzUuNTcyMjIgMi44NDQzMyA1LjYwMzU0IDIuNjgxOTIgNS42NjQ1IDIuNTMwMzhDNS43MjU0NiAyLjM3ODg0IDUuODE0ODggMi4yNDExNSA1LjkyNzYyIDIuMTI1MTlDNi4wNDAzNyAyLjAwOTIyIDYuMTc0MjQgMS45MTcyNiA2LjMyMTU4IDEuODU0NTZDNi40Njg5MiAxLjc5MTg1IDYuNjI2ODMgMS43NTk2NCA2Ljc4NjI4IDEuNzU5NzdIOS4yMTIzNEM5LjM3MTc5IDEuNzU5NjQgOS41Mjk3IDEuNzkxODUgOS42NzcwMyAxLjg1NDU2QzkuODI0MzcgMS45MTcyNiA5Ljk1ODI0IDIuMDA5MjIgMTAuMDcxIDIuMTI1MTlDMTAuMTgzNyAyLjI0MTE1IDEwLjI3MzIgMi4zNzg4NCAxMC4zMzQxIDIuNTMwMzhDMTAuMzk1MSAyLjY4MTkyIDEwLjQyNjQgMi44NDQzMyAxMC40MjYzIDMuMDA4MzNWNC4yNTU5NUg1LjU3MjM0Wk0xMi4yNDYzIDQuMjU1OTVWMTIuOTkxMkMxMi4yNDYzIDEzLjMyMjMgMTIuMTE4NCAxMy42Mzk5IDExLjg5MDcgMTMuODc0MUMxMS42NjMxIDE0LjEwODIgMTEuMzU0MyAxNC4yMzk4IDExLjAzMjMgMTQuMjM5OEg0Ljk2NjI4QzQuNjQ0MzIgMTQuMjM5OCA0LjMzNTU1IDE0LjEwODIgNC4xMDc4OSAxMy44NzQxQzMuODgwMjMgMTMuNjM5OSAzLjc1MjM0IDEzLjMyMjMgMy43NTIzNCAxMi45OTEyVjQuMjU1OTVIMTIuMjQ2M1pNNi43ODYyOCA3LjM3NTQ5VjExLjExOTNWNy4zNzU0OVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwWicgZmlsbD0nJTIzRDE1MTUzJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbi51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyIDEwTDEyIDJDMTIgMC44OTU0MyAxMS4xMDQ2IC00Ljg1Mzk2ZS0wNyAxMCAtNC4zNzExNGUtMDdMMiAtOC43NDIyOGUtMDhDMC44OTU0MyAtMy45MTQwNWUtMDggLTQuODUzOTZlLTA3IDAuODk1NDMxIC00LjM3MTE0ZS0wNyAyTC04Ljc0MjI4ZS0wOCAxMEMtMy45MTQwNWUtMDggMTEuMTA0NiAwLjg5NTQzMSAxMiAyIDEyTDEwIDEyQzExLjEwNDYgMTIgMTIgMTEuMTA0NiAxMiAxMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtcmVjb3JkaW5nLWluLXNlc3Npb24udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDVweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpIHRyYW5zbGF0ZSgxcHgsIDhweCk7XG4gIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xufVxuXG4vKiBmaXggYSBzdWJ0bGUgbWlzYWxpZ25tZW50IGJ1ZyBmb3IgZnVsbCBzY3JlZW4gYnV0dG9ucyAqL1xuLnZqcy1mdWxsc2NyZWVuIC51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDZweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcGF0aD0ndXJsKCUyM2NsaXAwXzI2NDVfNDY1NCknJTNFJTNDcGF0aCBkPSdNMTUuMTQ5MSA0Ljc1TDEwLjU5OTEgOEwxNS4xNDkxIDExLjI1VjQuNzVaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J005LjI5OTEyIDMuNDUwMkgyLjE0OTEyQzEuNDMxMTUgMy40NTAyIDAuODQ5MTIxIDQuMDMyMjMgMC44NDkxMjEgNC43NTAyVjExLjI1MDJDMC44NDkxMjEgMTEuOTY4MiAxLjQzMTE1IDEyLjU1MDIgMi4xNDkxMiAxMi41NTAySDkuMjk5MTJDMTAuMDE3MSAxMi41NTAyIDEwLjU5OTEgMTEuOTY4MiAxMC41OTkxIDExLjI1MDJWNC43NTAyQzEwLjU5OTEgNC4wMzIyMyAxMC4wMTcxIDMuNDUwMiA5LjI5OTEyIDMuNDUwMlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9nJTNFJTNDZGVmcyUzRSUzQ2NsaXBQYXRoIGlkPSdjbGlwMF8yNjQ1XzQ2NTQnJTNFJTNDcmVjdCB3aWR0aD0nMTUuNicgaGVpZ2h0PScxNS42JyBmaWxsPSd3aGl0ZScgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMC4xOTk5NTEgMC4yMDAxOTUpJy8lM0UlM0MvY2xpcFBhdGglM0UlM0MvZGVmcyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScyMicgaGVpZ2h0PScxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00uNzUgM0EyLjc1IDIuNzUgMCAwMTMuNS4yNWg5LjA4MUEyLjc1IDIuNzUgMCAwMTE1LjMzMSAzdjlhMi43NSAyLjc1IDAgMDEtMi43NSAyLjc1SDMuNUEyLjc1IDIuNzUgMCAwMS43NSAxMlYzek0zLjUgMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjV2OWMwIC42OS41NiAxLjI1IDEuMjUgMS4yNWg5LjA4MWMuNjkgMCAxLjI1LS41NiAxLjI1LTEuMjVWM2MwLS42OS0uNTYtMS4yNS0xLjI1LTEuMjVIMy41eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNTMgMi4wM2wtMTIgMTItMS4wNi0xLjA2IDEyLTEyIDEuMDYgMS4wNnpNMjAuODcgMS41MjVhLjc1Ljc1IDAgMDEuMzguNjUydjEwLjU4OGEuNzUuNzUgMCAwMS0xLjEzNC42NDRsLTUuOTItMy41M2EuNzUuNzUgMCAwMS0uMzY1LS42NDN2LTMuNTNhLjc1Ljc1IDAgMDEuMzY2LS42NDRsNS45MTktMy41M2EuNzUuNzUgMCAwMS43NTQtLjAwN3ptLTUuNTM5IDQuNjA3VjguODFsNC40MTkgMi42MzVWMy40OTdsLTQuNDE5IDIuNjM1eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIHtcbiAgcGFkZGluZzogMC4xNWVtIDAuNzVlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDc1cHg7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNjVweCk7XG4gIHdpZHRoOiAxMzBweDtcbiAgei1pbmRleDogNTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBtYXJnaW4tbGVmdDogMC44ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFQjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjhlbTtcbn1cblxuQGtleWZyYW1lcyBncm93IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxuICA1MCUgIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0UxREZGNDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHdpZHRoOiA4MHB4O1xuICBoZWlnaHQ6IDgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDEyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNDBweCk7XG4gIHRvcDogY2FsYyg1MCUgLSA0MHB4KTtcbiAgYW5pbWF0aW9uOiA2cyBpbmZpbml0ZSBncm93O1xuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNjAlO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXI6YWZ0ZXIge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ21hc2sgaWQ9J2EnIG1hc2tVbml0cz0ndXNlclNwYWNlT25Vc2UnIHg9JzAnIHk9JzAnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCclM0UlM0NjaXJjbGUgY3g9JzQ5JyBjeT0nNDknIHI9JzQ5JyBmaWxsPSclMjNFREVDRjgnLyUzRSUzQy9tYXNrJTNFJTNDZyBtYXNrPSd1cmwoJTIzYSknJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc1MCcgZmlsbD0nJTIzNjQ1Q0MyJy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuNDIyIDgxLjgxMmM1LjQwNS0xNS41NDcgMjAuMTg3LTI2LjcwNiAzNy41NzYtMjYuNzA2IDE3LjM5IDAgMzIuMTcyIDExLjE1OSAzNy41NzcgMjYuNzA3LTkuMTY0IDEwLjQzLTIyLjYwMSAxNy4wMTMtMzcuNTc2IDE3LjAxMy0xNC45NzYgMC0yOC40MTQtNi41ODMtMzcuNTc3LTE3LjAxNHonIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNicvJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzI5JyByPScxNycgZmlsbD0nJTIzZmZmJyBmaWxsLW9wYWNpdHk9Jy43Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcIik7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDAuNik7XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIG1pbi1oZWlnaHQ6IDE1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZmNmZDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtY29udHJvbC1wYW5lbCB7XG4gIGhlaWdodDogODBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY4Rjg7XG59XG5cbi51bC1idXR0b25zLXBhbmVsIHtcbiAgbWFyZ2luOiAxMHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtcGxheWJhY2stcmF0ZS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgM3B4KTtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtbWVudSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC02cHgsIDEycHgpO1xuICBwb3NpdGlvbjogdW5zZXQ7XG59XG5cbi52anMtbWVudS1idXR0b24tcG9wdXAgLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IHVuc2V0O1xufVxuXG4udmpzLW1lbnUgbGkge1xuICBmb250LXNpemU6IDEycHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuXG4udmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkIHtcbiAgY29sb3I6IGxpZ2h0Z3JheTtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1tZW51LWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWJ1dHRvbnMtcGFuZWwge1xuICB0b3A6IGNhbGMoNTAlIC0gMzBweCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC52anMtcmVjb3JkLWluZGljYXRvci52anMtY29udHJvbCB7XG4gIGJvdHRvbTogOTBweCAhaW1wb3J0YW50O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3Ige1xuICBwYWRkaW5nOiAwLjNlbSAwLjc1ZW0gMC4xNWVtIDE1cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGNhbGMoNTAlIC0gMjFweCk7XG4gIHdpZHRoOiA0M3B4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFQjU3NTc7XG4gIHdpZHRoOiA2cHg7XG4gIGhlaWdodDogNnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgdG9wOiA0cHg7XG4gIGxlZnQ6IDVweDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yOmJlZm9yZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiA5cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgb3BhY2l0eTogMTtcbiAgY29sb3I6ICMzMzM7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbn1cblxuLnVsLXZpZGVvLXBsYXllci1sb2FkaW5nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA2cmVtO1xuICBoZWlnaHQ6IDZyZW07XG5cbn1cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyBkaXYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogODAlO1xuICBoZWlnaHQ6IDgwJTtcbiAgbWFyZ2luOiA1cHg7XG4gIGJvcmRlcjogNXB4IHNvbGlkICM2NjY7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYW5pbWF0aW9uOiBsZHMtcmluZyAxLjJzIGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMSkgaW5maW5pdGU7XG4gIGJvcmRlci1jb2xvcjogIzY2NiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbn1cblxuLmZpcnN0IHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC40NXM7XG59XG4uc2Vjb25kIHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC4zcztcbn1cbi50aGlyZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuMTVzO1xufVxuXG5Aa2V5ZnJhbWVzIGxkcy1yaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLnVsLXZpZGVvLWJ0biB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMik7XG4gIHBhZGRpbmc6IDhweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUsIC51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyLCAudWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlLCAudWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBtYXJnaW46IDAgNXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMnB4KTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnUmVjb3JkIHlvdXIgUmVzcG9uc2UnO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNSAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzLjg3NTcgOC4yMjM2MUwxLjExMTggMTQuNjA1NkMwLjk0NTU3OCAxNC42ODg3IDAuNzUgMTQuNTY3OCAwLjc1IDE0LjM4MlYxLjYxODAzQzAuNzUgMS40MzIxOSAwLjk0NTU3OSAxLjMxMTMxIDEuMTExOCAxLjM5NDQzTDEzLjg3NTcgNy43NzYzOUMxNC4wNiA3Ljg2ODUyIDE0LjA2IDguMTMxNDggMTMuODc1NyA4LjIyMzYxWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAxcHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC44NSkgdHJhbnNsYXRlKDAsIDJweCk7XG59XG5cbi51bC1iYWNrLXF1ZXN0aW9uLWJ0bjphZnRlciB7XG4gIGNvbnRlbnQ6ICdCYWNrIHRvIFF1ZXN0aW9uJztcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4udmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG4gIGFuaW1hdGlvbjogZmFkZSAwLjNzO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGUge1xuICAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbiN1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxNXB4O1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnVsLWNvdW50ZG93bi10ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1cHgpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gPiAjdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICBmb250LXNpemU6IDI1cHg7XG4gIHRyYW5zZm9ybTogdW5zZXQ7XG59XG5cbi52anMtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiN1bC1TcGVlZCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDM1cHgpO1xufVxuXG4udmpzLXBvc3RlciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHVuc2V0O1xufVxuIn1dLEt0PSItdmlkZW8tcGxheWVyIixYdD0iLXZpZGVvLXJlY29yZGVyIjtsZXQgUXQsdGU7Y29uc3QgZWU9YXN5bmModCxlLG4scixvLGkpPT57Y29uc3QgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz17c2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6YS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6YS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6bmF2aWdhdG9yLmxhbmd1YWdlfSxzPXthY3Rpb246ZSxlcnI6e21lc3NhZ2U6dC5tZXNzYWdlLHN0YWNrOnQuc3RhY2t9LG1ldGE6Yyx2aWQ6byxlbnZJZDppfTsoYXdhaXQgZmV0Y2goYCR7bn0vc2RrLzEvZXJyb3JzYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6ey4uLnIsInVzZXJsZWFwLXBsYXRmb3JtIjoidmlkZW9fcmVjb3JkZXIiLCJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYShgdXNlcmxlYXAtJHtEYXRlLm5vdygpfS1lcnJvcmApfSxib2R5OkpTT04uc3RyaW5naWZ5KHMpfSkpLm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIix0KX0sbmU9KHQsZSxuKT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbiYmbigpO1Byb21pc2UuYWxsKGUucmVkdWNlKCgoZSxuKT0+KGUucHVzaCgoKHQse3R5cGU6ZSxjb250ZW50Om59KT0+bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7bGV0IGk7InNjcmlwdCI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGkuc3JjPW4pOiJsaW5rIj09PWU/KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLGkucmVsPSJzdHlsZXNoZWV0IixpLmhyZWY9bixpLnR5cGU9InRleHQvY3NzIik6KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxpLmlubmVySFRNTD1uKSxpLm9ubG9hZD1mdW5jdGlvbigpe3Iobil9LGkub25lcnJvcj1mdW5jdGlvbigpe28obil9LGkuYXN5bmM9ITEsaS5pZD1idG9hKG4pLHQuYXBwZW5kQ2hpbGQoaSl9KSkpKHQsbikpLGUpKSxbXSkpLnRoZW4oKCgpPT57biYmbigpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KyIgZmFpbGVkIHRvIGxvYWQiKX0pKX0scmU9KHQsZSxuKT0+e2lmKCJzdGFydCI9PT1lJiYodC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIiksIm5vbmUiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9V3Q7ZWxzZSBpZigic3VjY2VzcyI9PT1lKXQuc3R5bGUudmlzaWJpbGl0eT1XdCx0LmlubmVySFRNTD0iVXBsb2FkIHN1Y2NlZWRlZCEiO2Vsc2V7Y29uc3QgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQobikpO3QuaW5uZXJIVE1MPWBVcGxvYWRpbmcgPHNwYW4gY2xhc3M9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSI+JHtlfSU8L3NwYW4+YCx0LnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI0UwRTBFQiAwJSwgI0UwRTBFQiAke2V9JSwgI0ZDRkNGRCAke2V9JSwgI0ZDRkNGRCAxMDAlKWB9fSxvZT0odCxlKT0+e2NvbnN0IG49bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO3JldHVybiBuLmFkZENsYXNzKCJ1bC1idXR0b25zLXBhbmVsIiksZS5tYXAoKHQ9PntuLmFkZENoaWxkKHQpfSkpLGllKG4pLG59LGllPXQ9Pnt0LmNoaWxkcmVuKCkuZm9yRWFjaCgodD0+e2lmKG1lW3QubmFtZV9dKXtjb25zdCBlPWFlKG1lW3QubmFtZV9dLGB1bC0ke21lW3QubmFtZV9dfWApO3QuZWxfLmFwcGVuZENoaWxkKGUpfX0pKX0sYWU9KHQsZT0iIik9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gbi5jbGFzc05hbWU9InVsLWJ1dHRvbi10ZXh0IixuLmlubmVySFRNTD10LG4uaWQ9ZSxufSxjZT0odCxlLG4scixvPSExKT0+e3QuYWRkQ2xhc3MoInVsLXZpZGVvLXBsYXllciIpO2NvbnN0IGk9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO2kuYWRkQ2xhc3MoInVsLWNvbnRyb2wtcGFuZWwiKSx0LnByb2dyZXNzQmFyPWkuYWRkQ2hpbGQoIlByb2dyZXNzQ29udHJvbCIpLG4mJnQuc3JjKG4pLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcj1uZXcod2luZG93LnZpZGVvanMuZ2V0Q29tcG9uZW50KCJDb21wb25lbnQiKSkodCksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmFkZENsYXNzKCJ1bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciIpO2NvbnN0IGE9biYmbi5zcmM/Z2Uobi5zcmMpOm51bGw7IW58fCFvJiZhPyh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIixhJiZ0LnBvc3RlcihhKSk6KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjBweCIpLHQub24oInBsYXkiLCgoKT0+e298fCFufHxhfHxkZSh0LCExKX0pKSx0LmFkZENoaWxkKHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcix7fSwxKSxpLmFkZENoaWxkKGUpLHQuYWRkQ2hpbGQoaSksciYmcih0KX0sc2U9KHQsZSxuLHIsbyxpLGEsYz0hMSk9Pnt0ZT1EYXRlLm5vdygpO2NvbnN0IHM9d2luZG93LnZpZGVvanMsdT1zKGUse2NvbnRyb2xzOiExLGJpZ1BsYXlCdXR0b246ITEsZmx1aWQ6ITEsd2lkdGg6MTI4MCxoZWlnaHQ6NzIwLHBsYXlzaW5saW5lOiEwLHBsdWdpbnM6e3JlY29yZDp7YXVkaW86ITAsdmlkZW86e21hbmRhdG9yeTp7bWluV2lkdGg6MTI4MCxtaW5IZWlnaHQ6NzIwfX0sZnJhbWVXaWR0aDoxMjgwLGZyYW1lSGVpZ2h0OjcyMCxtYXhMZW5ndGg6NjAwLGF1dG9NdXRlRGV2aWNlOiEwfX19KTt1LnBheWxvYWQ9bjtjb25zdCBsPXQ9Pntjb25zdCBlPVp0LG49WnQrIi1hdWRpby1vbmx5IjtyZSh1LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxRdCYmUXQuc3RhcnRUaW1lPj10ZSYmUXQuYWJvcnQoKTtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1jYW1lcmEtYnV0dG9uIik7dD8odS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSxoLnJlbW92ZUNsYXNzKGUpLGguYWRkQ2xhc3Mobiksci5pbm5lckhUTUw9bWUuVHVybk9uQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5yZW1vdmVDbGFzcygidmpzLWhpZGRlbiIpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57dS5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2godS5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQodS5yZWNvcmQoKSkpKToodS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx1LnJlY29yZCgpLmdldERldmljZSgpLGgucmVtb3ZlQ2xhc3MobiksaC5hZGRDbGFzcyhlKSxyLmlubmVySFRNTD1tZS5UdXJuT2ZmQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidmpzLWhpZGRlbiIpKX0sZj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9PntmLmhhc0NsYXNzKFd0KXx8KGwodS5jYW1lcmFPZmYpLG8oeWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKFd0KSxmLmFkZENsYXNzKFd0KSl9fSk7Zi5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpLGYuZWxfLmFwcGVuZENoaWxkKGFlKG1lLkRlbGV0ZUJ1dHRvbiwidWwtZGVsZXRlLWJ1dHRvbiIpKTtjb25zdCBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHA9KCk9PntkLmNsYXNzTGlzdC5jb250YWlucygidmpzLWZ1bGxzY3JlZW4iKSYmdS5jYW1lcmFPZmY/ZC5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI6ZC5zdHlsZS5kaXNwbGF5PSJmbGV4In07cCgpO2NvbnN0IGg9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57dS5yZWNvcmQoKS5pc1JlY29yZGluZygpfHwodS5jYW1lcmFPZmY9IXUuY2FtZXJhT2ZmLGwodS5jYW1lcmFPZmYpLCFmLmhhc0NsYXNzKFd0KSYmZi5hZGRDbGFzcyhXdCksbyh5ZS5ERUxFVEUse30pLHAoKSl9fSk7aC5hZGRDbGFzcyhadCksaC5lbF8uYXBwZW5kQ2hpbGQoYWUobWUuVHVybk9mZkNhbWVyYSwidWwtY2FtZXJhLWJ1dHRvbiIpKTtjb25zdCB2PW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGVyLXRvZ2dsZSIpO2lmKHUucmVjb3JkKCkuaXNSZWNvcmRpbmcoKSl1LnJlY29yZCgpLnN0b3AoKSx0JiYodC5pbm5lckhUTUw9bWUuUmVjb3JkQnV0dG9uKSx2LnJlbW92ZUNsYXNzKCR0KSxmLnJlbW92ZUNsYXNzKFd0KTtlbHNle2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7aWYoZSllLnJlbW92ZSgpLHQmJih0LmlubmVySFRNTD1tZS5SZWNvcmRCdXR0b24pLGwodS5jYW1lcmFPZmYpLG8oeWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKFd0KSxmLmFkZENsYXNzKFd0KSx2LnJlbW92ZUNsYXNzKCR0KSxtLnNob3coKTtlbHNle3YuYWRkQ2xhc3MoJHQpLG0uaGlkZSgpLGguYWRkQ2xhc3MoV3QpLGYuYWRkQ2xhc3MoV3QpLHQmJih0LmlubmVySFRNTD1tZS5TdG9wQnV0dG9uKTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaWQ9InVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIixkLmluc2VydEJlZm9yZShlLGQuY2hpbGRyZW5bMV0pLGUuc3R5bGUuaGVpZ2h0PWAke2Qub2Zmc2V0SGVpZ2h0fXB4YCx1ZSh1LDMpfX19fSk7di5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiIpLHYuZWxfLmFwcGVuZENoaWxkKGFlKG1lLlJlY29yZEJ1dHRvbiwidWwtcmVjb3JkZXItdG9nZ2xlIikpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO2cuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixnLmNsYXNzTmFtZT0idWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIix0LmFwcGVuZENoaWxkKGcpLHUudXBsb2FkUHJvZ3Jlc3NMYWJlbD1nO2NvbnN0IHk9b2UodSxbZixoLCJQbGF5VG9nZ2xlIix2LCJGdWxsc2NyZWVuVG9nZ2xlIl0pLG09eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJGdWxsc2NyZWVuVG9nZ2xlIj09PXQubmFtZV8pKTttLmhhc0NsYXNzKCJ2anMtZGlzYWJsZWQiKSYmbS5oaWRlKCk7Y29uc3QgYj15LmNoaWxkcmVuKCkuZmluZCgodD0+IlBsYXlUb2dnbGUiPT09dC5uYW1lXykpO2IuaGlkZSgpLGkmJmguYWRkQ2xhc3MoV3QpLCFpJiZmLmFkZENsYXNzKFd0KSxjZSh1LHksaSwhMSxjKSx1Lm9uKCJzdG9wUmVjb3JkIiwoKCk9Pnt2LmhpZGUoKSxiLnNob3coKSxtLnNob3coKSxmLnJlbW92ZUNsYXNzKFd0KX0pKSx1Lm9uKCJkZXZpY2VSZWFkeSIsKCgpPT57di5zaG93KCksYi5oaWRlKCksZi5hZGRDbGFzcyhXdCl9KSksKCh0LGUsbixyLG8pPT57dC5vbigiZGV2aWNlRXJyb3IiLChmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJkZXZpY2UgZXJyb3I6Iix0LmRldmljZUVycm9yQ29kZSksIlBlcm1pc3Npb24gZGVuaWVkIj09PXQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2U/KHQuZGV2aWNlQnV0dG9uLmFkZENsYXNzKCJwZXJtaXNzaW9uLWRlbmllZCIpLG4mJm4oeWUuRVJST1Ise3R5cGU6eWUuUEVSTUlTU0lPTl9ERU5JRUR9KSk6KG4mJm4oeWUuRVJST1Ise3R5cGU6eWUuT1RIRVJ9KSxlZShuZXcgRXJyb3IodC5kZXZpY2VFcnJvckNvZGUubWVzc2FnZSksInJlY29yZGVyRGV2aWNlRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCkpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24obixyKXtlZShyfHx0LmVycm9yKCksInJlY29yZGVyRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCl9KSksdC5vbigic3RhcnRSZWNvcmQiLChmdW5jdGlvbihlLG4pe3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIil9KSksdC5vbigiZmluaXNoUmVjb3JkIiwoYXN5bmMgZnVuY3Rpb24oKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwic3RhcnQiLDApO2NvbnN0e3N1cnZleUlkOmkscXVlc3Rpb25JZDphLHJlc3BvbnNlR3JvdXBVaWQ6Yyx2aXNpdG9ySWQ6cyxlbnZJZDp1fT10LnBheWxvYWQ7aWYoIWkpe2NvbnN0IHQ9ImludGVybmFsIGVycm9yOiBtaXNzaW5nIGZpZWxkcyBpbiBwYXlsb2FkIjtyZXR1cm4gbiYmbih5ZS5FUlJPUix7dHlwZTp5ZS5PVEhFUn0pLGVlKG5ldyBFcnJvcih0KSwiZmluaXNoUmVjb3JkIixlLG8scyx1KSxudWxsfXQucmVjb3JkKCkuc3RvcERldmljZSgpO2NvbnN0IGw9dC5jYW1lcmFPZmY/eWUuTUVESUFfVFlQRV9BVURJTzp5ZS5NRURJQV9UWVBFX1ZJREVPLGY9e3N1cnZleUlkOmksdXBkYXRlZEF0OihuZXcgRGF0ZSkudG9JU09TdHJpbmcoKSxtZWRpYVR5cGU6bH07YSYmKGYucXVlc3Rpb25JZD1hKSxjJiYoZi5yZXNwb25zZUdyb3VwVWlkPWMpLHMmJihmLnZpc2l0b3JJZD1zKTtjb25zdCBkPWF3YWl0KGFzeW5jKCk9Pntjb25zdCByPWF3YWl0IGZldGNoKGAke2V9LzIvZW52aXJvbm1lbnRzL2ludGVncmF0aW9ucy91cGxvYWRgLHttZXRob2Q6IlBPU1QiLGNhY2hlOiJuby1jYWNoZSIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KGYpfSk7aWYoci5vayl7Y29uc3QgdD1hd2FpdCByLmpzb24oKTtyZXR1cm4gbiYmbih5ZS5VUExPQURfU1RBUlRFRCx7W3llLlVQTE9BRF9JRF06dC51cGxvYWQuaWQsW3llLk1FRElBX1RZUEVdOmx9KSx0LnVwbG9hZC51cmx9cmV0dXJuIG4mJm4oeWUuRVJST1Ise3R5cGU6eWUuT1RIRVIscmVzcG9uc2U6cn0pLGVlKG5ldyBFcnJvcigiZmFpbGVkIHRvIGdldCB1cGxvYWQgcmVzcG9uc2Ugd2l0aCB1cmwiKSwiZmluaXNoUmVjb3JkIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpLG51bGx9KSgpO2QmJihRdD13aW5kb3cuVXBDaHVuay5jcmVhdGVVcGxvYWQoe2VuZHBvaW50OmQsZmlsZTpuZXcgRmlsZShbdC5yZWNvcmRlZERhdGFdLGByZWNvcmRpbmcgJHtsfSAke0RhdGUubm93KCl9YCksY2h1bmtTaXplOjUxMjB9KSxRdC5zdGFydFRpbWU9RGF0ZS5ub3coKSxRdC5vbigiZXJyb3IiLChuPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxlZShuLCJmaW5pc2hSZWNvcmQiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCl9KSksUXQub24oInByb2dyZXNzIiwoZT0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJwcm9ncmVzcyIsZS5kZXRhaWwpfSkpLFF0Lm9uKCJzdWNjZXNzIiwoKCk9PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwic3VjY2VzcyIpLG4mJm4oeWUuVVBMT0FEX0ZJTklTSEVEKX0pKSl9KSl9KSh1LHIsbyxyZSxhKSxpJiYodS5kZXZpY2VCdXR0b24mJnUuZGV2aWNlQnV0dG9uLmhpZGUoKSx1LnNyYyhpKSxiLnNob3coKSx2LmhpZGUoKSxmLnJlbW92ZUNsYXNzKFd0KSk7Y29uc3QgeD1be25hbWU6Im1pY3JvcGhvbmUifV07IXUuY2FtZXJhT2ZmJiZ4LnB1c2goe25hbWU6ImNhbWVyYSJ9KSxQcm9taXNlLmFsbCh4Lm1hcCgodD0+bmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHQpKSkpLnRoZW4oKHQ9Pnt0LnJlZHVjZSgoKHQsZSk9PnQmImdyYW50ZWQiPT09ZS5zdGF0ZSksITApJiZ1JiYodS5kZXZpY2VCdXR0b24mJnUuZGV2aWNlQnV0dG9uLmhpZGUoKSwhaSYmdS5yZWNvcmQoKS5nZXREZXZpY2UoKSl9KSkuY2F0Y2goKHQ9Pnt9KSl9LHVlPSh0LGU9Myk9Pntjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIpO24mJjA9PT1lPyhuLnJlbW92ZSgpLHQucmVjb3JkKCkuc3RhcnQoKSk6biYmKG4uaW5uZXJIVE1MPWA8c3BhbiBjbGFzcz0ndWwtY291bnRkb3duLXRleHQnPlJlY29yZGluZyBpbi4uLiAke2V9PC9zcGFuPmAsc2V0VGltZW91dCgoKCk9Pnt1ZSh0LGUtMSl9KSwxZTMpKX0sbGU9dD0+e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIiLGUuYXBwZW5kQ2hpbGQoKHQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tcGxheWVyLWxvYWRpbmciLGUuaWQ9cXQodCksWyJmaXJzdCIsInNlY29uZCIsInRoaXJkIiwiZm91cnRoIl0ubWFwKCh0PT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT10LGUuYXBwZW5kQ2hpbGQobil9KSksZX0pKHQpKSxlfSxmZT0odCxlKT0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtuLmlkPXQsbi5jbGFzc05hbWU9InZpZGVvLWpzIHZqcy1kZWZhdWx0LXNraW4gdWwtdmlkZW8tcGxheWVyLXZpZGVvIjtjb25zdCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyLmNsYXNzTmFtZT0idmpzLW5vLWpzIixyLmlubmVySFRNTD0iVG8gdmlldyB0aGlzIHZpZGVvIHBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCwgYW5kIGNvbnNpZGVyIHVwZ3JhZGluZyB0byBhIHdlYiBicm93c2VyIHRoYXQiO2NvbnN0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBvLmhyZWY9Imh0dHBzOi8vdmlkZW9qcy5jb20vaHRtbDUtdmlkZW8tc3VwcG9ydC8iLG8udGFyZ2V0PSJfYmxhbmsiLG8uaW5uZXJIVE1MPSJzdXBwb3J0cyBIVE1MNSB2aWRlbyIsci5hcHBlbmRDaGlsZChvKSxuLmFwcGVuZENoaWxkKHIpLGUuYXBwZW5kQ2hpbGQobiksZX0sZGU9KHQsZSk9PntlPyh0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LmFkZCgidmpzLWhpZGRlbiIpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5zaG93KCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjBweCIpOih0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LnJlbW92ZSgidmpzLWhpZGRlbiIpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5oaWRlKCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjEwMCUiKX0scGU9dD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMsbj10K1h0O2lmKGUpe3RyeXtpZighZShuKS5yZWNvcmQoKS5zdHJlYW0pcmV0dXJufWNhdGNoKHQpe3JldHVybn1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKSYmZShuKS5yZWNvcmQoKS5zdG9wKCksZShuKS5yZWNvcmQoKS5zdG9wRGV2aWNlKCl9fSxoZT10PT57d2luZG93LnZpZGVvanModCtLdCkucGF1c2UoKX0sdmU9KHQsZSxuLHIpPT57d2luZG93LnZpZGVvanModCtLdCk7Y29uc3Qgbz13aW5kb3cudmlkZW9qcyh0K1h0KTsoKHQsZSxuKT0+e2NvbnN0IHI9d2luZG93LnZpZGVvanModCtLdCk7IXIucGF1c2VkKCkmJnIucGF1c2UoKSxyLnNyYyh7c3JjOmUsdHlwZToiYXBwbGljYXRpb24veC1tcGVnVVJMIn0pLHIuY3VycmVudFRpbWUoMCksZGUocixuKTtjb25zdCBvPWdlKGUpOyFuJiZlJiYobz9yLnBvc3RlcihvKTpkZShyLCEwKSksci5vbigicGxheSIsKCgpPT57bnx8IWV8fG98fGRlKHIsITEpfSkpfSkodCxlLHIpLG8ucmVjb3JkKCkucmVzZXRTdGF0ZSgpLG8ucmVjb3JkKCkuZ2V0RGV2aWNlKCk7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpWzBdLmNsYXNzTGlzdC5hZGQoV3QpLG8uY2FtZXJhT2ZmKXtkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IilbMF0uY2xhc3NMaXN0LnJlbW92ZShXdCksd2luZG93Lm5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHt2aWRlbzohMCxhdWRpbzohMH0pLnRoZW4oKHQ9PntvLnJlY29yZCgpLm9uRGV2aWNlUmVhZHkodCksdC5nZXRWaWRlb1RyYWNrcygpLmZvckVhY2goKHQ9Pnt0LnN0b3AoKX0pKX0pKS5jYXRjaChvLnJlY29yZCgpLm9uRGV2aWNlRXJyb3IuYmluZChvLnJlY29yZCgpKSl9ZWxzZXtkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiIpWzBdLmNsYXNzTGlzdC5yZW1vdmUoV3QpfW8ucGF5bG9hZD1uLHJlKG8udXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpLHRlPURhdGUubm93KCl9LGdlPXQ9Pntjb25zdCBlPXQubWF0Y2goL2h0dHBzOlwvXC9zdHJlYW0ubXV4LmNvbVwvKC4qKS8pLG49ZT9lWzFdOm51bGw7cmV0dXJuIG4/YGh0dHBzOi8vaW1hZ2UubXV4LmNvbS8ke259L3RodW1ibmFpbC5qcGc/dGltZT0wYDpudWxsfSx5ZT17VVBMT0FEX1NUQVJURUQ6InVwbG9hZC5zdGFydGVkIixVUExPQURfRklOSVNIRUQ6InVwbG9hZC5maW5pc2hlZCIsREVMRVRFOiJkZWxldGUiLEVSUk9SOiJlcnJvciIsTUVESUFfVFlQRToibWVkaWEudHlwZSIsUEVSTUlTU0lPTl9ERU5JRUQ6InBlcm1pc3Npb25fZGVuaWVkIixPVEhFUjoib3RoZXIiLFVQTE9BRF9JRDoidXBsb2FkLmlkIixNRURJQV9UWVBFX1ZJREVPOiJ2aWRlbyIsTUVESUFfVFlQRV9BVURJTzoiYXVkaW8ifSxtZT17UGxheWJhY2tSYXRlTWVudUJ1dHRvbjoiU3BlZWQiLFBsYXlUb2dnbGU6IlBsYXkiLEZ1bGxzY3JlZW5Ub2dnbGU6IkV4cGFuZCIsVHVybk9uQ2FtZXJhOiJUdXJuIG9uIixUdXJuT2ZmQ2FtZXJhOiJUdXJuIG9mZiIsRGVsZXRlQnV0dG9uOiJEZWxldGUiLFJlY29yZEJ1dHRvbjoiUmVjb3JkIixTdG9wQnV0dG9uOiJTdG9wIixQYXVzZUJ1dHRvbjoiUGF1c2UifTtmdW5jdGlvbiBiZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIHhlPSJ1bC1idXR0b24taW5hY3RpdmUiO2Z1bmN0aW9uIHdlKHQsZSl7ZSh0KX12YXIgRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7T3QoKSh0aGlzLHQpLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnBheWxvYWQ9ZSxuLnJlamVjdD1yLG4ucmVzb2x2ZT10fSkpfXJldHVybiBJdCgpKHQsW3trZXk6InJlc29sdmVSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnJlc29sdmUodCl9fV0pLHR9KCk7ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobi5iaW5kKG51bGwsZSksdCl9KSl9dmFyIENlPTEwLGtlPSExLFNlPSIiLE9lPSExLEFlPVtdO2Z1bmN0aW9uIEllKHQpe3JldHVybiB0Ll9jb25maWcmJnQuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q/dC5fY29uZmlnLmluc3RhbGxhdGlvbk1ldGhvZDp0Ll9ndG0/cTp0Ll9zZWdtZW50P1c6R31mdW5jdGlvbiBNZSh0KXtrZT0hMCxTZT10fWZ1bmN0aW9uIFRlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwidXNlcmxlYXAtcGxhdGZvcm0iOiJ3ZWIiLCJ4LXVsLXNkay12ZXJzaW9uIjoiMi4xNC44In07aWYodC5lbnZJZCYmKGVbVV09dC5lbnZJZCksdC50b2tlbiYmKGUuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIrdC50b2tlbiksdC51c2VySWQmJihlW3pdPXQudXNlcklkKSx0LnZpc2l0b3JJZCYmKGVbSF09dC52aXNpdG9ySWQpLHQucGFydG5lckFub255bW91c0lkJiYoZVtCXT10LnBhcnRuZXJBbm9ueW1vdXNJZCksdC5tb2JpbGVIZWFkZXJzSlNPTil7dmFyIG49SlNPTi5wYXJzZSh0Lm1vYmlsZUhlYWRlcnNKU09OKTtPYmplY3QuYXNzaWduKGUsbil9cmV0dXJuIGVbVl09SWUodCksdC5sb2NhbGUmJihlWyJhY2NlcHQtbGFuZ3VhZ2UiXT10LmxvY2FsZSksZX1mdW5jdGlvbiBfZSh0LGUsbil7cmV0dXJuIExlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMZSgpe3JldHVybihMZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUpe3QubmV4dD00O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7c3RhdHVzOjQyOX0pO2Nhc2UgNDpyZXR1cm4gbz1uZXcgRWUociksQWUucHVzaChvKSx0LmFicnVwdCgicmV0dXJuIixvLnByb21pc2UpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJlKHQsZSl7cmV0dXJuIFBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBQZSgpe3JldHVybiBQZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuKXt2YXIgcixvLGksYSxjLHMsdSxsLGYsZD1hcmd1bWVudHM7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWQubGVuZ3RoPjImJnZvaWQgMCE9PWRbMl0/ZFsyXTowLG89ZC5sZW5ndGg+MyYmdm9pZCAwIT09ZFszXSYmZFszXSxpPWQubGVuZ3RoPjQmJnZvaWQgMCE9PWRbNF0mJmRbNF0sYT17dXJsOmUsb3B0aW9uczpuLGF0dGVtcHQ6cixzaG91bGREcm9wT25SYXRlTGltaXQ6b30sIU9lfHxpKXt0Lm5leHQ9NjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsX2UobyxpLGEpKTtjYXNlIDY6aWYoYz17b2s6ITEscmVwb3J0RXJyb3I6ITF9LCFrZSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiBjb25zb2xlLmxvZygiVXNlckxlYXAgLSAiLmNvbmNhdChTZSkpLHQuYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgMTA6cmV0dXJuIHQucHJldj0xMCxuLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihUZSgpLG4uaGVhZGVycyksdC5uZXh0PTE0LGZldGNoKGUsbik7Y2FzZSAxNDppZig0MjkhPT0ocz10LnNlbnQpLnN0YXR1cyl7dC5uZXh0PTI0O2JyZWFrfWlmKCEoIU9lJiYhb3x8aSkpe3QubmV4dD0yMzticmVha31yZXR1cm4gT2U9ITAsdT1zLmhlYWRlcnMuaGFzKCJyYXRlbGltaXQtcmVzZXQiKT9OdW1iZXIocy5oZWFkZXJzLmdldCgicmF0ZWxpbWl0LXJlc2V0IikpOkNlLHQuYWJydXB0KCJyZXR1cm4iLGplKDFlMyp1KS50aGVuKE4oKShSKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFJlKGUsbiwwLG8sITApKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpKTtjYXNlIDIzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixfZShvLCExLGEpKTtjYXNlIDI0OmlmKE9lPSExLEFlLmxlbmd0aCYmKEFlLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXlsb2FkO1JlKGUudXJsLGUub3B0aW9ucyxlLmF0dGVtcHQsZS5zaG91bGREcm9wT25SYXRlTGltaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZVJlcXVlc3QoZSl9KSl9KSksQWU9W10pLCFzLm9rKXt0Lm5leHQ9NDE7YnJlYWt9aWYoMjQ5IT09cy5zdGF0dXMpe3QubmV4dD0zMDticmVha31yZXR1cm4gTWUoKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDMwOnJldHVybiB0Lm5leHQ9MzIscy50ZXh0KCk7Y2FzZSAzMjpyZXR1cm4gbD10LnNlbnQsdC5wcmV2PTMzLGwmJiJPSyIhPT1sJiYocy5qc29uPUpTT04ucGFyc2UobCkpLHQuYWJydXB0KCJyZXR1cm4iLHMpO2Nhc2UgMzg6cmV0dXJuIHQucHJldj0zOCx0LnQwPXQuY2F0Y2goMzMpLHQuYWJydXB0KCJyZXR1cm4iLHtvazohMSxyZXBvcnRFcnJvcjohMCxlcnJvcjpuZXcgRXJyb3IoImZhaWxlZCBwYXJzaW5nIHJlc3BvbnNlIGpzb24gZm9yICIuY29uY2F0KGUsIiAtICIpLmNvbmNhdChsKSl9KTtjYXNlIDQxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDQ0OmlmKHQucHJldj00NCx0LnQxPXQuY2F0Y2goMTApLCEoKGY9cisxKT4yKSl7dC5uZXh0PTQ5O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITEsZXJyb3I6dC50MX0pO2Nhc2UgNDk6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLGplKDFlMypmKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBSZShlLG4sZil9KSkpO2Nhc2UgNTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LG51bGwsW1sxMCw0NF0sWzMzLDM4XV0pfSkpKSxQZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIERlKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP05lKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpOZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiBGZSh0LGUsbil7cmV0dXJuIFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVZSgpe3JldHVybiBVZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvLGksYSxjLHMsdSxsLGY7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gbz1lLm1vZGUsaT1lLnVzZXJJZCxhPWUuZW52SWQsYz1lLmFwaVVSTCxzPWUuaGVhZGVycyx1PXdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbD17bW9kZTpvLHNjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOnUuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OnUuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9LGY9e2FjdGlvbjpuLGVycjp7bWVzc2FnZTpyLm1lc3NhZ2Usc3RhY2s6ci5zdGFja30sbWV0YTpsLHZpZDppLGVudklkOmF9LHQubmV4dD02LFJlKCIiLmNvbmNhdChjLCIvc2RrLzEvZXJyb3JzIikse21ldGhvZDoiUE9TVCIsaGVhZGVyczpPYmplY3QuYXNzaWduKHsieC11bC1lcnJvciI6d2luZG93LmJ0b2EoInVzZXJsZWFwLSIuY29uY2F0KERhdGUubm93KCksIi1lcnJvciIpKX0scyksYm9keTpKU09OLnN0cmluZ2lmeShmKX0pO2Nhc2UgNjp0LnNlbnQub2t8fGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQ0NCkgRmFpbGVkIHRvIHJlcG9ydCBlcnJvciB0byBBUEkiLHIpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSxVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEJlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC51c2VySWR8fHQubWV0YSYmInRlc3QiPT09dC5tZXRhLm1vZGV8fHQuaXNQcmV2aWV3fSx6ZT17c3VydmV5SWQ6bnVsbCxydW5uaW5nOiExLGZyYW1lOm51bGwsZW52SWQ6bnVsbCx1c2VySWQ6bnVsbCxtZXRhOnt9LGJvcmRlcjpudWxsLGZvbnRGYW1pbHk6bnVsbCxmb250RmFtaWx5VVJMOm51bGwsdGltZW91dDpudWxsLGludGVydmFsOm51bGwsbW9kZTpudWxsLGRlY2s6e2luZGV4OjAsY2FyZHM6W119LGNvbnRleHQ6e30sc2VuZGluZzohMSxjYXJkczp7b3BlbjpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjPXQuYXBwLHM9Yy51c2VNb2JpbGVTdHlsaW5nLHU9Yy5ib3JkZXIsbD1jLmhlYWRlcnMsZj1GKFtlLCJ1bC1jYXJkLS10ZXh0IixsdF0pLGQ9UHQocikscD1yJiZyLm9wZW5UZXh0UGxhY2Vob2xkZXI/ci5vcGVuVGV4dFBsYWNlaG9sZGVyOm51bGw7cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCxsWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOmYsb25zdWJtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHp0KHQsbyl9LGtleTppfSxOdChkLG4pLGQsQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fY29udGFpbmVyIn0sQSgidGV4dGFyZWEiLHsiZGF0YS1ncmFtbSI6ImZhbHNlIixtYXhsZW5ndGg6IjUwMDAiLGNsYXNzTmFtZTpGKGR0KGl0LHMpKSxuYW1lOiJ0ZXh0IixwbGFjZWhvbGRlcjpwLCJhcmlhLXBsYWNlaG9sZGVyIjpwLCJhcmlhLW11bHRpbGluZSI6InRydWUiLHZhbHVlOnQub3BlblRleHQudmFsdWUsb25jcmVhdGU6QnQoKSxvbmlucHV0OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGEub3BlblRleHQub25UZXh0Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0sb25mb2N1czpmdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj11fSxvbmJsdXI6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSx0YWJpbmRleDowLCJhcmlhLWxhYmVsbGVkYnkiOnN0LGNvbnRlbnRlZGl0YWJsZToidHJ1ZSIscm9sZToidGV4dGJveCIsImFyaWEtbGFiZWwiOnB9KSksQSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOnV9LG9uY2xpY2s6ZnVuY3Rpb24oZSl7KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmZvcm1zWyJ0ZXh0LWZvcm0iXSkmJih6dCh0Lm9wZW5UZXh0LnZhbHVlLnRyaW0oKSxvKSx0Lm9wZW5UZXh0LnZhbHVlPSIiKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxEdChyKSkpKSl9fSx0ZXh0dXJscHJvbXB0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLHI9dC5wcm9wZXJ0aWVzLG89KHQubG9jYWxlLHQubmV4dCksaT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGM9RihbZSwidWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0IixsdF0pLHM9dC5hcHAsdT1zLmJvcmRlcixsPXMuaGVhZGVycztyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGxbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEEoImRpdiIse2NsYXNzTmFtZTpjLGtleTppfSxBKCJwIix7aWQ6c3QsY2xhc3NOYW1lOiJ1bC1xdWVzdGlvbiJ9LG4pLEEoImRpdiIse2lkOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciIsY2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciJ9LChyJiZyLmJvZHk/ci5ib2R5LnNwbGl0KC9cblxzKlxuL2cpOltdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBBKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSJ9LHQpfSkpKSxBKCJhIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIHVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6dSwibWFyZ2luLXJpZ2h0IjoiYXV0byIsInRleHQtb3ZlcmZsb3ciOiJlbGxpcHNpcyIsdGV4dERlY29yYXRpb246Im5vbmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sb25jbGljazpmdW5jdGlvbih0KXtvKCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bygpfSxocmVmOnImJnIuYnV0dG9uVXJsLHRhcmdldDoiX2JsYW5rIixyb2xlOiJidXR0b24iLHRhYmluZGV4OjAsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKSwiYXJpYS1kZXNjcmliZWRieSI6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sciYmci5idXR0b25UZXh0P3IuYnV0dG9uVGV4dDoiTmV4dCIpKSl9fSxtdWx0aXBsZWNob2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9KHQubG9jYWxlLHQub3B0aW9ucyksYz12b2lkIDA9PT1hP1tdOmEscz10Lm5leHQsdT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGw9dC5hcHAsZj1sLnVzZU1vYmlsZVN0eWxpbmcsZD1sLmhlYWRlcnMscD1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKTtmdW5jdGlvbiBoKHQsZSl7cyh7dmFsdWU6cigpKHt9LHQsZSl9KX12YXIgdj1jLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbCxpPXQudmFsdWU7cmV0dXJuIEEoSHQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byx0YWJpbmRleDplKzEsb25TZWxlY3Q6aC5iaW5kKG51bGwscixpKSxpZDpyLGlzUmFkaW86ITAsdXNlTW9iaWxlU3R5bGluZzpmfSl9KSksZz1QdChpKTtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGRbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEEoImRpdiIse2NsYXNzTmFtZTpwLGtleTp1fSxOdChnLG8pLGcsQSgiZGl2Iix7Y2xhc3NOYW1lOkYoZHQob3QsZikpLHJvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLWxhYmVsZWRieSI6c3R9LHYpKSl9fSxtdWx0aXBsZXNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLHI9dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9KHQubG9jYWxlLHQub3B0aW9ucyksYT12b2lkIDA9PT1pP1tdOmksYz0odC5pc0xhc3QsdC5uZXh0KSxzPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgdT1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKSxsPXQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGY9aS5tdWx0aXBsZXNlbGVjdCxkPWYuaW5pdCxwPWYucmVzZXQsaD1mLnVwZGF0ZVNlbGVjdGVkLHY9dC5hcHAsZz12LnVzZU1vYmlsZVN0eWxpbmcseT12LmhlYWRlcnMsbT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxmdW5jdGlvbih0LGUpe2Uoe3ZhbHVlOnR9KX0odC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsYykscCgpfSxiPWEubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsO3QudmFsdWU7cmV0dXJuIEEoSHQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byxvblNlbGVjdDpoLHNlbGVjdGVkOmxbcl0saWQ6cixpc1JhZGlvOiExLHVzZU1vYmlsZVN0eWxpbmc6Z30pfSkpLHg9UHQobyk7cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCx5WyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOnUsb25zdWJtaXQ6bSxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZT17fSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdC5pZF09ITF9KSksdm9pZCBkKGUpO3ZhciBlfSxrZXk6c30sTnQoeCxyKSx4LEEoImRpdiIse2NsYXNzTmFtZTpGKGR0KG90LGcpKSxyb2xlOiJyYWRpb2dyb3VwIn0sYiksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJidXR0b24iLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6bn0sb25jbGljazptLHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sRHQobykpKSkpfX0sbGlrZXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5jbGFzc05hbWUscj0odC5sb2NhbGUsdC5sYWJlbHMpLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9dC5uZXh0LGM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PXQuYXBwLGw9dS51c2VNb2JpbGVTdHlsaW5nLGY9dS5kZWNrLmluZGV4LGQ9dS5oZWFkZXJzLHA9RihbbiwidWwtY2FyZC0tbGlrZXJ0IixsdF0pLGg9ciYmci5sZWZ0LHY9ciYmci5yaWdodCxnPV8oKShBcnJheSg1KSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPW4rMSxvPSJvcHRpb24tIi5jb25jYXQociksaT1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9Mix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1lfSxjPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0iYXV0byIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSxzPXtvbmNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGEocil9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGEocil9KHQpfX07cmV0dXJuIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KHMub250b3VjaHN0YXJ0PWkscy5vbnRvdWNoY2FuY2VsPWMscy5vbnRvdWNobW92ZT1jLHMub250b3VjaGVuZD1jKToocy5vbm1vdXNlZG93bj1pLHMub25tb3VzZWxlYXZlPWMpLEEoImRpdiIsTSgpKHtpZDpvLGNsYXNzTmFtZTpGKFtdLmNvbmNhdChfKCkoZHQoWCxsKSksXygpKGR0KCIiLmNvbmNhdChYLCItIikuY29uY2F0KHIpLGwpKSkpfSxzLHsiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiAiKS5jb25jYXQobykscm9sZToidGV4dGJveCIsdGFiaW5kZXg6MCwiYXJpYS1kZXNjcmliZWRieSI6dXR9KSxyKX0pKSx5PVB0KGkpO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsZFsidXNlcmxlYXAtcGxhdGZvcm0iXSkpKX0sQSgiZm9ybSIse2NsYXNzTmFtZTpwLGtleTpjfSxOdCh5LG8pLHksZiUyPT0wJiZBKCJkaXYiLG51bGwpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIn0sZyksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX2xhYmVscyJ9LEEoInNwYW4iLG51bGwsaCksQSgic3BhbiIsbnVsbCx2KSkpKX19LHRoYW5rczpmdW5jdGlvbih0KXt2YXIgZT10LmVuZENhcmQsbj10LmJvcmRlcixyPXQuY2xhc3NOYW1lLG89KHQubG9jYWxlLHQucXVlc3Rpb25JZCk7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIGE9RihbciwidWwtY2FyZC0tdGhhbmtzIixsdF0pLGM9ZSYmZS5zdWJoZWFkZXI/QSgicCIse2NsYXNzTmFtZToidWwtY2FwdGlvbiJ9LGUuc3ViaGVhZGVyKTpudWxsLHM9ZSYmZS5oZWFkbGluZT9lLmhlYWRsaW5lOm51bGw7cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCx0LmFwcC5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxBKCJkaXYiLHtjbGFzc05hbWU6YSxrZXk6b30sQSgiZGl2Iix7b25jcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHAuY29tcGxldGUoKX19LEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLXRoYW5rcy1jaGVjayJ9LEEoInN2ZyIse3dpZHRoOiI4MSIsaGVpZ2h0OiI5OSIsdmlld0JveDoiMCAwIDgxIDk5IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWxhYmVsbGVkYnkiOiJ0aXRsZSJ9LEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik00MC41IDc3QzYwLjkzNDUgNzcgNzcuNSA2MC40MzQ1IDc3LjUgNDBDNzcuNSAxOS41NjU1IDYwLjkzNDUgMyA0MC41IDNDMjAuMDY1NSAzIDMuNSAxOS41NjU1IDMuNSA0MEMzLjUgNjAuNDM0NSAyMC4wNjU1IDc3IDQwLjUgNzdaTTgwLjUgNDBDODAuNSA2Mi4wOTE0IDYyLjU5MTQgODAgNDAuNSA4MEMxOC40MDg2IDgwIDAuNSA2Mi4wOTE0IDAuNSA0MEMwLjUgMTcuOTA4NiAxOC40MDg2IDAgNDAuNSAwQzYyLjU5MTQgMCA4MC41IDE3LjkwODYgODAuNSA0MFoiLGZpbGw6bn0pLEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik01NS4wMjUgMjIuOTA0NkM1NS42Mjk5IDIzLjQ3MDUgNTUuNjYxNiAyNC40MTk4IDU1LjA5NTYgMjUuMDI0N0M1NC44NzI0IDI1LjI2MzQgNTQuNjEwOSAyNS41Mjg1IDU0LjMxNTcgMjUuODI3N0M1Mi4yNTQ3IDI3LjkxNjggNDguNTU0OSAzMS42NjcgNDQuODEzNSAzOS42NjU4QzQzLjI4MTggNDIuOTQwNiA0Mi4wODY0IDQ1LjgzODYgNDEuMDgyMyA0OC4yNzI5QzQwLjY1MzkgNDkuMzExNiA0MC4yNjAzIDUwLjI2NTkgMzkuODkwMiA1MS4xMjlDMzkuMjg3IDUyLjUzNTkgMzguNzI0OCA1My43NTA4IDM4LjE3NDQgNTQuNjI1QzM3Ljg5OTcgNTUuMDYxMyAzNy41ODA2IDU1LjQ5MDUgMzcuMjAxNyA1NS44MjQ1QzM2LjgyMDEgNTYuMTYwNyAzNi4yNjEzIDU2LjUgMzUuNTQ1NyA1Ni41QzM0LjY3NDIgNTYuNSAzNC4wODkyIDU1Ljk2OTIgMzMuNzc3NCA1NS42MDgzQzMzLjQ1MDIgNTUuMjI5NiAzMy4xNzUyIDU0Ljc1MTEgMzIuOTM5NiA1NC4zMDFDMzIuNzMwNSA1My45MDEzIDMyLjUwODggNTMuNDM2NyAzMi4yNzk3IDUyLjk1NjVDMzIuMjQyOSA1Mi44Nzk0IDMyLjIwNTkgNTIuODAxOSAzMi4xNjg4IDUyLjcyNDNDMzEuODk0MiA1Mi4xNDk5IDMxLjU5NTkgNTEuNTM0IDMxLjI1MzcgNTAuODg2OEMyOS44ODg2IDQ4LjMwNSAyNy44NTM5IDQ1LjI4NzggMjQuMjM0MyA0My4xMzgyQzIzLjUyMiA0Mi43MTUyIDIzLjI4NzUgNDEuNzk0OSAyMy43MTA1IDQxLjA4MjZDMjQuMTMzNSA0MC4zNzAzIDI1LjA1MzkgNDAuMTM1OCAyNS43NjYyIDQwLjU1ODhDMzAuMDU1NiA0My4xMDYyIDMyLjQxNDkgNDYuNjY0NyAzMy45MDU4IDQ5LjQ4NDVDMzQuMjc3NiA1MC4xODc2IDM0LjU5NzMgNTAuODQ4NyAzNC44NzUzIDUxLjQzMDJDMzQuOTE0NyA1MS41MTI0IDM0Ljk1MjkgNTEuNTkyNiAzNC45OTAyIDUxLjY3MDdDMzUuMjIyMiA1Mi4xNTY3IDM1LjQxNjQgNTIuNTYzNyAzNS41OTc4IDUyLjkxMDJDMzUuNjE1MSA1Mi45NDM0IDM1LjYzMjEgNTIuOTc1NCAzNS42NDg1IDUzLjAwNjFDMzYuMDU2NSA1Mi4zNTMxIDM2LjUzNDEgNTEuMzQzNCAzNy4xMzMgNDkuOTQ2OEMzNy40NzgxIDQ5LjE0MTggMzcuODU3MiA0OC4yMjI5IDM4LjI3NjEgNDcuMjA3NEMzOS4yODg2IDQ0Ljc1MzIgNDAuNTMzOSA0MS43MzQ3IDQyLjA5NjEgMzguMzk0OEM0Ni4wNTkxIDI5LjkyMjEgNTAuMDY0MSAyNS44NjQ4IDUyLjE1MzUgMjMuNzQ4MkM1Mi40NDIzIDIzLjQ1NTYgNTIuNjk0NCAyMy4yMDAyIDUyLjkwNDggMjIuOTc1M0M1My40NzA4IDIyLjM3MDMgNTQuNDIgMjIuMzM4NyA1NS4wMjUgMjIuOTA0NlpNMzUuMTk5NCA1My41ODkyQzM1LjE5OTQgNTMuNTg5MiAzNS4yIDUzLjU4ODggMzUuMjAxMiA1My41ODc5QzM1LjIgNTMuNTg4OSAzNS4xOTk0IDUzLjU4OTMgMzUuMTk5NCA1My41ODkyWk0zNi4wNjY2IDUzLjY2ODJDMzYuMDczMiA1My42NzQgMzYuMDc2NSA1My42Nzc1IDM2LjA3NjUgNTMuNjc3N0MzNi4wNzY1IDUzLjY3OCAzNi4wNzMyIDUzLjY3NTEgMzYuMDY2NiA1My42NjgyWiIsZmlsbDpufSksQSgicGF0aCIse2Q6Ik02OS41IDk3QzY5LjUgOTguMTA0NiA1Ni4yOTI0IDk5IDQwIDk5QzIzLjcwNzYgOTkgMTAuNSA5OC4xMDQ2IDEwLjUgOTdDMTAuNSA5NS44OTU0IDIzLjcwNzYgOTUgNDAgOTVDNTYuMjkyNCA5NSA2OS41IDk1Ljg5NTQgNjkuNSA5N1oiLGZpbGw6ImJsYWNrIiwiZmlsbC1vcGFjaXR5IjoiMC4yIn0pKSksQSgicCIse2NsYXNzTmFtZTpzdCxpZDpzdH0scyksYykpKSl9fSxucHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5ib3JkZXIsbj10LmNsYXNzTmFtZSxyPSh0LmxvY2FsZSx0LmxhYmVscyksbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT10Lm5leHQsYz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9dC5hcHAsbD11LnVzZU1vYmlsZVN0eWxpbmcsZj11LmRlY2suaW5kZXgsZD11LmhlYWRlcnMscD1GKFtuLCJ1bC1jYXJkLS1ucHMiLGx0XSksaD1yJiZyLmxlZnQsdj1yJiZyLnJpZ2h0LGc9XygpKEFycmF5KDExKSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPW4sbz0ib3B0aW9uLSIuY29uY2F0KHIpLGk9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PTIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9ZX0sYz1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9ImF1dG8iLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0scz17b25jbGljazpmdW5jdGlvbigpe3JldHVybiBhKHIpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxhKHIpfSh0KX19O3JldHVybiJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyhzLm9udG91Y2hzdGFydD1pLHMub250b3VjaGNhbmNlbD1jLHMub250b3VjaG1vdmU9YyxzLm9udG91Y2hlbmQ9Yyk6KHMub25tb3VzZWRvd249aSxzLm9ubW91c2VsZWF2ZT1jKSxBKCJkaXYiLE0oKSh7Y2xhc3NOYW1lOkYoW10uY29uY2F0KF8oKShkdChRLGwpKSxfKCkoZHQoIiIuY29uY2F0KFEsIi0iKS5jb25jYXQociksbCkpKSl9LHMseyJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiICIpLmNvbmNhdChvKSxyb2xlOiJyYWRpbyIsdGFiaW5kZXg6MCxpZDpvfSkscil9KSkseT1QdChpKTtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGRbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEEoImZvcm0iLHtjbGFzc05hbWU6cCxrZXk6Y30sTnQoeSxvKSx5LGYlMj09MCYmQSgiZGl2IixudWxsKSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbnVtYmVycyJ9LGcpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19sYWJlbHMifSxBKCJzcGFuIixudWxsLGgpLEEoInNwYW4iLG51bGwsdikpKSl9fSx2aWRlb3ZvaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9dC5uZXh0LGE9dC5xdWVzdGlvbklkLGM9dC51cGRhdGVIZWlnaHQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9RihbZSxZXSksbD0idWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIixmPSJ1bC1jYXJkLXZpZGVvX19uZXh0X2J1dHRvbiIsZD0idWwtdmlkZW8taW50ZXJ2aWV3LWZvcm0iLHA9InVsLXF1ZXN0aW9uLXBsYXllci1jb250YWluZXIiLGg9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHY9byYmby52aWRlb1VybCxnPXQuYXBwLHk9Zy5zdXJ2ZXlJZCxtPWcucmVzcG9uc2VHcm91cFVpZCxiPWcuYXBpVVJMLHg9Zy51c2VySWQsdz1nLmJvcmRlcixFPWcuZW52SWQsaj1nLmhlYWRlcnM7aWYodC5jYXJkRGF0YXx8KHQuY2FyZERhdGE9e30pLHQuY2FyZERhdGEudXBsb2FkSWQ9dm9pZCAwLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9dm9pZCAwLHQuY2FyZERhdGEuYnV0dG9uVGV4dD1EdChvKSx0LmNhcmREYXRhLnNraXBCdXR0b25UZXh0PUZ0KG8pLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGwpKXt2ZShsLHYse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eH0sby5tZWRpYVR5cGU9PT15ZS5NRURJQV9UWVBFX0FVRElPKTt2YXIgQz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTtDLmlubmVyVGV4dD10LmNhcmREYXRhLnNraXBCdXR0b25UZXh0LEMuY2xhc3NMaXN0LmFkZCh4ZSl9dmFyIGs9ZnVuY3Rpb24oZSxuKXt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTtlPT09eWUuVVBMT0FEX1NUQVJURUQ/KHQuY2FyZERhdGEudXBsb2FkSWQ9blt5ZS5VUExPQURfSURdLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9blt5ZS5NRURJQV9SRUNPUkRJTkdfVUlEXSxyLmlubmVyVGV4dD10LmNhcmREYXRhLmJ1dHRvblRleHQsci5jbGFzc0xpc3QucmVtb3ZlKHhlKSxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjp3fSkpOmU9PT15ZS5ERUxFVEUmJih0LmNhcmREYXRhLnVwbG9hZElkPW51bGwsdC5jYXJkRGF0YS5tZWRpYVJlY29yZGluZ1VpZD1udWxsLHIuY2xhc3NMaXN0LmFkZCh4ZSksci5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjoiIn0pKX0sUz1mdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3JldHVybiBuLmNsYXNzTmFtZT0iIi5jb25jYXQoInVsLXZpZGVvLWJ0biIsIiAiKS5jb25jYXQodCksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaCk7dD8oZS5jbGFzc0xpc3QucmVtb3ZlKFd0KSxlLmNsYXNzTGlzdC5hZGQoR3QpLG4uY2xhc3NMaXN0LmFkZChXdCksbi5jbGFzc0xpc3QucmVtb3ZlKEd0KSk6KGhlKGwpLGUuY2xhc3NMaXN0LmFkZChXdCksZS5jbGFzc0xpc3QucmVtb3ZlKEd0KSxuLmNsYXNzTGlzdC5yZW1vdmUoV3QpLG4uY2xhc3NMaXN0LmFkZChHdCkpfShlKX0pKSxufSxPPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdChHdCksdC5hcHBlbmRDaGlsZCgoKHQsZSxuLHI9ITEsbz0iaHR0cHM6Ly9hcGkuc3ByaWcuY29tIik9Pntjb25zdCBpPXQrS3QsYT1sZShpKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57ZWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSBxdWVzdGlvbiBwbGF5ZXIuYCksInBsYXllckRldmljZUVycm9yIixvLHt9KX0pKSxuZShhLEp0LCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF0KGkpKS5yZW1vdmUoKSxmZShpLGEpO2NvbnN0IHQ9d2luZG93LnZpZGVvanMoaSx7cGxheXNpbmxpbmU6ITAscGxheWJhY2tSYXRlczpbLjUsMSwxLjUsMl19KSxvPW9lKHQsWyJQbGF5YmFja1JhdGVNZW51QnV0dG9uIiwiUGxheVRvZ2dsZSIsIkZ1bGxzY3JlZW5Ub2dnbGUiXSksYz1vLmNoaWxkcmVuKCkuZmluZCgodD0+IkZ1bGxzY3JlZW5Ub2dnbGUiPT09dC5uYW1lXykpO2MuaGFzQ2xhc3MoInZqcy1kaXNhYmxlZCIpJiZjLmhpZGUoKSxjZSh0LG8sZSxuLHIpfSkpLGF9KShsLHtzcmM6dix0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSx2b2lkIDAsby5tZWRpYVR5cGU9PT15ZS5NRURJQV9UWVBFX0FVRElPLGIpKTt2YXIgZT1TKCJ1bC1yZWNvcmQtcmVzcG9uc2UtYnRuIiwhMSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdH0sST1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaWQ9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHQuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIgIi5jb25jYXQoV3QpO3ZhciBlPVMoInVsLWJhY2stcXVlc3Rpb24tYnRuIiwhMCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdC5hcHBlbmRDaGlsZCgoKHQsZT17fSxuPSJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHIsbyxpLGE9ITEpPT57Y29uc3QgYz10K1h0LHM9bGUoYyk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlY3VyaXR5cG9saWN5dmlvbGF0aW9uIiwodD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMoYyk7ZWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSByZWNvcmRlciBwbGF5ZXIuYCksInJlY29yZGVyRGV2aWNlRXJyb3IiLG4saSxlLnBheWxvYWQudmlzaXRvcklkLGUucGF5bG9hZC5lbnZJZCl9KSksbmUocyxKdC5jb25jYXQoWXQpLCgoKT0+e2ZlKGMscyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXQoYykpLnJlbW92ZSgpLHNlKHMsYyxlLG4scixvLGksYSl9KSksc30pKGwse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eCxlbnZJZDpFfSxiLGssITEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/YmUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmJlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxqLHsieC11bC12aWRlby1yZWNvcmRlci1vcmlnaW4iOiJzZGsifSksby5tZWRpYVR5cGU9PT15ZS5NRURJQV9UWVBFX0FVRElPKSksdH0sTT1QdChvKTtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGpbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSksc3R5bGU6e21hcmdpblRvcDoidW5zZXQifX0sQSgiZGl2Iix7Y2xhc3NOYW1lOmx0LGtleTphfSxBKCJmb3JtIix7aWQ6ZCxjbGFzc05hbWU6dSxvbmNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24odCl7cmV0dXJuIGMoKX0pKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdChZKSk7dC5vYnNlcnZlKGUpfSxvbnN1Ym1pdDpmdW5jdGlvbih0KXtyZXR1cm4gd2UodCxpKX19LE50KE0sbiksTSxBKCJkaXYiLHtpZDoidWwtY2FyZC12b2ljZV9fdmlkZW8ifSxBKCJkaXYiLHtpZDpsLG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTygpKSx0LmFwcGVuZENoaWxkKEkoKSksdH19KSxBKCJidXR0b24iLHtpZDpmLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gIi5jb25jYXQoeGUpLG9uY2xpY2s6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkscGUobCksZG9jdW1lbnQuZm9ybXNbZF0pe3QuY2FyZERhdGEudXBsb2FkSWQ/d2Uoe3ZhbHVlOnttZWRpYVJlY29yZGluZ1VpZDp0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkfX0saSk6d2Uoe2RlbGV0ZWRBdDpEYXRlLm5vdygpfSxpKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChwKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKS5jbGFzc0xpc3QuYWRkKFd0KSxuLmNsYXNzTGlzdC5yZW1vdmUoV3QpfX0scm9sZToiYnV0dG9uIn0sRnQobykpKSkpKX19fSxsb2NhbGU6ImVuIixhcGlVUkw6Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIsc2hvd1N1cnZleUJyYW5kOiEwLG1hcmtldGluZ1VybDoiaHR0cHM6Ly91c2VybGVhcC5jb20iLHNsdWdOYW1lOm51bGwscmVzcG9uc2VHcm91cFVpZDpudWxsLGhlYWRlcnM6e30saXNQcmV2aWV3OiExLGFuc3dlcnM6W10sY3VzdG9tTWV0YWRhdGE6e30sdmlld2VkQ2FyZENvdW50OjB9LEhlPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3VydmV5SWQsbj10LmZyYW1lLHI9dC5jYXJkcyxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5tb2RlLGY9dC5jb250ZXh0LGQ9dC5sb2NhbGUscD10LmFwaVVSTCxoPXQuc2hvd1N1cnZleUJyYW5kLHY9dC5tYXJrZXRpbmdVcmwsZz10LnNsdWdOYW1lLHk9dC5yZXNwb25zZUdyb3VwVWlkLG09dC5oZWFkZXJzLGI9dC5lbmRDYXJkLHg9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssdz10LmlzUHJldmlldyxFPXQuYW5zd2VycyxqPXQuY3VzdG9tTWV0YWRhdGEsQz10LmV4cGVyaW1lbnRGbGFncyxrPXQudXNlTW9iaWxlU3R5bGluZyxTPXQuZXZlbnRFbWl0dGVyO3JldHVybiBmdW5jdGlvbih0LE8pe3JldHVybiBEZSh7fSxPLmFkZERlY2soe2RlY2s6cixoYXNFbmRDYXJkOmJ9KSx7c3VydmV5SWQ6ZSxydW5uaW5nOiEwLGZyYW1lOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSx0aW1lb3V0OjEsbW9kZTpsLGNvbnRleHQ6Zixsb2NhbGU6ZCxhcGlVUkw6cCxzaG93U3VydmV5QnJhbmQ6aCxtYXJrZXRpbmdVcmw6dixzbHVnTmFtZTpnLHJlc3BvbnNlR3JvdXBVaWQ6eSxoZWFkZXJzOm0sZW5kQ2FyZDpiLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazp4LGlzUHJldmlldzp3LGFuc3dlcnM6RSxjdXN0b21NZXRhZGF0YTpqLGV4cGVyaW1lbnRGbGFnczpDLHVzZU1vYmlsZVN0eWxpbmc6ayxldmVudEVtaXR0ZXI6Uyx2aWV3ZWRDYXJkQ291bnQ6MH0pfX0sYWRkRGVjazpmdW5jdGlvbih0KXt2YXIgZT10LmRlY2ssbj10Lmhhc0VuZENhcmQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gRGUoe30sZSx7Q2FyZDp0LmNhcmRzW2UudHlwZV19KX0pKTtyZXR1cm4gbiYmci5wdXNoKHtDYXJkOnQuY2FyZHMudGhhbmtzfSkse2RlY2s6e2luZGV4OjAsY2FyZHM6cn19fX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57aW50ZXJ2YWw6c2V0SW50ZXJ2YWwoZS5kZWR1Y3QsMWUzKX19fSxzZWVuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7QmUodCl8fGUudHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaXNOZXc6ITB9KX19LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIUJlKHQpKXJldHVybiBlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6ImNsb3NlZCJ9KX19LHN1Ym1pdDpmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlLG49dC5yZXNwb25zZUdyb3VwVWlkLHI9dC5jb21wbGV0ZWRBdDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQobyl7dmFyIGksYTtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKG4mJiFCZShvKSl7dC5uZXh0PTI7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGk9e3Jlc3BvbnNlR3JvdXBVaWQ6bixtZXRhOm8ubWV0YSxjdXN0b21NZXRhZGF0YTpvLmN1c3RvbU1ldGFkYXRhLHJlc3BvbnNlczpbZV0sY29tcGxldGVkQXQ6cn0sdC5uZXh0PTUsUmUoIiIuY29uY2F0KG8uYXBpVVJMLCIvc2RrLzEvZW52aXJvbm1lbnRzLyIpLmNvbmNhdChvLmVudklkLCIvdmlzaXRvcnMvIikuY29uY2F0KG8udXNlcklkLCIvcmVzcG9uc2VzL3N1Ym1pdCIpLHtib2R5OkpTT04uc3RyaW5naWZ5KGkpLGhlYWRlcnM6by5oZWFkZXJzLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDU6aWYoYT10LnNlbnQsZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksYS5vayl7dC5uZXh0PTEzO2JyZWFrfWlmKCFhLnJlcG9ydEVycm9yKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQyNykgRmFpbGVkIHRvIHN1Ym1pdCByZXNwb25zZSIsYS5lcnJvciksdC5uZXh0PTEyLEZlKG8sInN1Ym1pdFJlc3BvbnNlIixhLmVycm9yKTtjYXNlIDEyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVkdWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGltZW91dC0xO3JldHVybiBlPD0wPyhjbGVhckludGVydmFsKHQuaW50ZXJ2YWwpLFJ0LmVuYWJsZSgpLHtydW5uaW5nOiExLGludGVydmFsOm51bGwsdGltZW91dDplfSk6e3RpbWVvdXQ6ZX19fSxuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPURhdGUubm93KCksbz1lLmRlY2ssaT1vLmNhcmRzLGE9by5pbmRleCxjPWlbYV0scz1jLm5hbWUsdT1jLnR5cGUsbD1lLnJlc3BvbnNlR3JvdXBVaWQsZj0ib2JqZWN0Ij09PWd0KCkodC5kYXRhKT90LmRhdGE6e3ZhbHVlOnQuZGF0YX0sZD1mLnZhbHVlO2lbYV0udmFsdWU9ZCxmLnF1ZXN0aW9uSWQ9cyxmLmFuc3dlcmVkQXQ9cjt2YXIgcD17cmVzcG9uc2U6ZixyZXNwb25zZUdyb3VwVWlkOmwsdHlwZTp1fSxoPSJtdWx0aXBsZWNob2ljZSI9PT11P09iamVjdC52YWx1ZXMoZCkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuITEhPT10fSkpOmQsdj0idmlkZW92b2ljZSIhPT11fHwhZi5kZWxldGVkQXQ7Im11bHRpcGxlc2VsZWN0Ij09PXUmJihoPWlbYV0ucHJvcHMub3B0aW9ucy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbZS5pZF0mJnQucHVzaChlLnZhbHVlKSx0fSksW10pKTt2YXIgZz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdO2lmKGU+PXQubGVuZ3RofHxlPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPXRbZV0mJnRbZV0ucHJvcHMmJnRbZV0ucHJvcHMucm91dGluZ09wdGlvbnN8fFtdLGE9TWF0aC5taW4oZSsxLHQubGVuZ3RoLTEpLGM9bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc10sbD11LmNvbXBhcmF0b3IsZj11LnRhcmdldCxkPXUudmFsdWU7aWYoImFuc3dlcmVkIj09PWwmJm8pe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9aWYoeXRbbF0mJnl0W2xdKG4sZCkpe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9fXJldHVybiBudWxsPT09YyYmZT09PXQubGVuZ3RoLTE/bnVsbDotMT09PWM/cj90Lmxlbmd0aC0xOm51bGw6bnVsbD09PWM/YTpjfShpLGEsaCwhIXQuZW5kQ2FyZCx2KTtpZihudWxsPT09ZylyZXR1cm4gcC5jb21wbGV0ZWRBdD1yLG4uc3VibWl0KHApLHZvaWQgdC5jb21wbGV0ZVN1cnZleSgpO2lbZ10uQ2FyZD09PWUuY2FyZHMudGhhbmtzJiYocC5jb21wbGV0ZWRBdD1yKTt2YXIgeT1uLnN1Ym1pdChwKTtyZXR1cm4gaVtnXS5DYXJkIT1lLmNhcmRzLnRoYW5rcyYmeS5maW5hbGx5KChmdW5jdGlvbigpe24udHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaW5kZXg6Z30pfSkpLHt2aWV3ZWRDYXJkQ291bnQ6ZS52aWV3ZWRDYXJkQ291bnQrMSxkZWNrOntjYXJkczppLGluZGV4Omd9fX19LHRyYWNrSGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10LmV2ZW50LG49dC5pbmRleCxyPXQuaXNOZXcsbz12b2lkIDAhPT1yJiZyO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgaSxhLGMscyx1LGw7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighQmUocikpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXIuZGVjayxhPWkuY2FyZHMsYz1pLmluZGV4LHM9dm9pZCAwIT09bj9hW25dOmFbY10sdT17c2lkOnIuc3VydmV5SWQscWlkOnMubmFtZSxhY3Rpb246ZSx2aWQ6ci51c2VySWQsZWlkOnIuZW52SWQsaXNOZXc6byxyZXNwb25zZUdyb3VwVWlkOnIucmVzcG9uc2VHcm91cFVpZH0sdC5uZXh0PTcsUmUoIiIuY29uY2F0KHIuYXBpVVJMLCIvc2RrLzEvdmlzaXRvcnMvIikuY29uY2F0KHIudXNlcklkLCIvc3VydmV5cy8iKS5jb25jYXQoci5zdXJ2ZXlJZCwiL2hpc3RvcnkiKSx7Ym9keTpKU09OLnN0cmluZ2lmeSh1KSxoZWFkZXJzOnIuaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA3OmlmKChsPXQuc2VudCkub2spe3QubmV4dD0xMzticmVha31pZighbC5yZXBvcnRFcnJvcil7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjgpIEZhaWxlZCB0byB0cmFjayBzdXJ2ZXkgZXZlbnQiLGwuZXJyb3IpLHQubmV4dD0xMyxGZShyLCJ0cmFja0hpc3RvcnkiLGwuZXJyb3IpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fTtmdW5jdGlvbiBWZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcWUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/VmUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fXZhciBXZT17aW5pdDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHFlKHt9LGUse3NlbGVjdGVkT3B0aW9uczp0fSl9fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcWUoe30sdCx7c2VsZWN0ZWRPcHRpb25zOnt9fSl9fSx1cGRhdGVTZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobnVsbCE9dCl7dmFyIG49T2JqZWN0LmFzc2lnbihlLnNlbGVjdGVkT3B0aW9ucyk7cmV0dXJuIG5bdF09IW5bdF0scWUoe30sZSx7c2VsZWN0ZWRPcHRpb25zOm59KX19fX07ZnVuY3Rpb24gR2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBaZT17b25UZXh0Q2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/R2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkdlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxlLHt2YWx1ZTp0fSl9fX0sJGU9InN1cnZleS5hcHBlYXJlZCIsWWU9InN1cnZleS5mYWRpbmdPdXQiLEplPSJzdXJ2ZXkud2lsbENsb3NlIixLZT17VkVSSUZZX1ZJRVdfVkVSU0lPTjoidmVyaWZ5LnZpZXcudmVyc2lvbiJ9LFhlPXtWSUVXX1ZFUlNJT046InZpZXcudmVyc2lvbiJ9LFFlPSJjbG9zZS5jbGljayIsdG49InN1cnZleS5jb21wbGV0ZWQiO2Z1bmN0aW9uIGVuKHQpe3JldHVybiJ3ZWIiIT09dFsidXNlcmxlYXAtcGxhdGZvcm0iXX1mdW5jdGlvbiBubih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIHJuPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhbWUsbj10LmNhcmRzLHI9dC5zdXJ2ZXlJZCxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5jb250ZXh0LGY9dC5sb2NhbGUsZD10LmFwaVVSTCxwPXQuc2hvd1N1cnZleUJyYW5kLGg9dC5tYXJrZXRpbmdVcmwsdj10LnNsdWdOYW1lLGc9dC5yZXNwb25zZUdyb3VwVWlkLHk9dC5oZWFkZXJzLG09dC5lbmRDYXJkLGI9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2sseD10LmlzUHJldmlldyx3PXQuYW5zd2VycyxFPXQuY3VzdG9tTWV0YWRhdGEsaj10LmV4cGVyaW1lbnRGbGFncyxDPXQudXNlTW9iaWxlU3R5bGluZyxrPXQubW9iaWxlUGxhdGZvcm0sUz10LmV2ZW50RW1pdHRlcixPPXQudmlld2VkQ2FyZENvdW50O3JldHVybiBmdW5jdGlvbih0LEEpe3ZhciBJPWVuKHkpP3dpbmRvdy5kb2N1bWVudDp3aW5kb3cucGFyZW50LmRvY3VtZW50O0EuYXBwLmluaXQoe2ZyYW1lOkkuZ2V0RWxlbWVudEJ5SWQoZSksc3VydmV5SWQ6cixjYXJkczpuLGVudklkOm8sdXNlcklkOmksbWV0YTphLGJvcmRlcjpjLGZvbnRGYW1pbHk6cyxmb250RmFtaWx5VVJMOnUsY29udGV4dDpsLGxvY2FsZTpmLGFwaVVSTDpkLHNob3dTdXJ2ZXlCcmFuZDpwLG1hcmtldGluZ1VybDpoLHNsdWdOYW1lOnYscmVzcG9uc2VHcm91cFVpZDpnLGhlYWRlcnM6eSxlbmRDYXJkOm0sY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrOmIsaXNQcmV2aWV3OngsYW5zd2Vyczp3LGN1c3RvbU1ldGFkYXRhOkUsZXhwZXJpbWVudEZsYWdzOmosdXNlTW9iaWxlU3R5bGluZzpDLG1vYmlsZVBsYXRmb3JtOmssZXZlbnRFbWl0dGVyOlMsdmlld2VkQ2FyZENvdW50Ok99KSxBLmFwcC5zZWVuKCl9fSx1cGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUuYXBwLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkuY2xhc3NMaXN0O24ucnVubmluZyYmIXIuY29udGFpbnMoInVsLWFwcC0tdmlzaWJsZSIpJiYoZW4obi5oZWFkZXJzKT9yLmFkZCgidWwtYXBwLS12aXNpYmxlIik6KHIuYWRkKCJ1bC1hcHAtLW92ZXJsYXkiKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3IuYWRkKCJ1bC1hcHAtLXZpc2libGUiKX0pLDEwMCkpLG4uZXZlbnRFbWl0dGVyJiZuLmV2ZW50RW1pdHRlci5lbWl0KCRlKSksZW4obi5oZWFkZXJzKXx8bi5mcmFtZS5zZXRIZWlnaHQoZnVuY3Rpb24odCl7dmFyIGU9dC5xdWVyeVNlbGVjdG9yKCIuIi5jb25jYXQoJCkpO3JldHVybihlP2Uuc2Nyb2xsSGVpZ2h0OjYwMCkrKGUmJmUucGFyZW50RWxlbWVudD9lLnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LWUuY2xpZW50SGVpZ2h0OjApfShkb2N1bWVudCkpfX0sZmFkZW91dDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIGUobil7dmFyIHIsbztyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHI9bi5hcHAsbz1yLmV2ZW50RW1pdHRlciwhZW4oci5oZWFkZXJzKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQ6cmV0dXJuIG8uZW1pdChZZSksZS5hYnJ1cHQoInJldHVybiIsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO24uYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsKGZ1bmN0aW9uKHQpeyJvcGFjaXR5Ij09PXQucHJvcGVydHlOYW1lJiZlKCl9KSksbi5jbGFzc0xpc3QucmVtb3ZlKCJ1bC1hcHAtLXZpc2libGUiKX0pKSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbml0aWF0b3I7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQuYXBwLHI9bi5mcmFtZSxvPW4uZXZlbnRFbWl0dGVyO1siaW9zIiwiYW5kcm9pZCJdLmluY2x1ZGVzKG4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSkmJm8uZW1pdChKZSx7aW5pdGlhdG9yOmV9KSxlbihuLmhlYWRlcnMpfHwoby5lbWl0KEplLHtpbml0aWF0b3I6ZX0pLHIucmVtb3ZlKCkpfX0sY2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiBlKG4scil7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5mYWRlb3V0KHQpO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsci5hcHAuY2xvc2UoKTtjYXNlIDQ6UnQuZW5hYmxlKCksci5yZW1vdmUoe2luaXRpYXRvcjpRZX0pO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxkZXN0cm95OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gZShuLHIpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHIuZmFkZW91dCh0KTtjYXNlIDI6UnQuZW5hYmxlKCksci5yZW1vdmUoe2luaXRpYXRvcjp0bn0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfX0sb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/bm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOm5uKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7YXBwOkhlLG11bHRpcGxlc2VsZWN0OldlLG9wZW5UZXh0OlplfSxybiksYW49e2FwcDp6ZSxtdWx0aXBsZXNlbGVjdDp7c2VsZWN0ZWRPcHRpb25zOnt9fSxvcGVuVGV4dDp7dmFsdWU6IiJ9fTt2YXIgY249d2luZG93Ll9fY2ZnLHNuPWNuLmZyYW1lLHVuPWNuLmVudklkLGxuPWNuLnN1cnZleUlkLGZuPWNuLnVzZXJJZCxkbj1jbi5jYXJkcyxwbj1jbi5tb2RlLGhuPWNuLmJvcmRlcix2bj12b2lkIDA9PT1obj8iIzY2NjRmNyI6aG4sZ249Y24uY29udGV4dCx5bj1jbi5sb2NhbGUsbW49Y24uZm9udEZhbWlseSxibj1jbi5mb250RmFtaWx5VVJMLHhuPWNuLmFwaVVSTCx3bj1jbi5zaG93U3VydmV5QnJhbmQsRW49Y24ubWFya2V0aW5nVXJsLGpuPWNuLnNsdWdOYW1lLENuPWNuLnJlc3BvbnNlR3JvdXBVaWQsa249Y24uaGVhZGVycyxTbj1jbi5lbmRDYXJkLE9uPWNuLmN1c3RvbVN0eWxlcyxBbj1jbi5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssSW49Y24uaXNQcmV2aWV3LE1uPWNuLmFuc3dlcnMsVG49Y24uY3VzdG9tTWV0YWRhdGEsX249Y24uZXhwZXJpbWVudEZsYWdzLExuPWNuLnVzZU1vYmlsZVN0eWxpbmcsUm49Y24ubW9iaWxlUGxhdGZvcm0sUG49Y24uZXZlbnRFbWl0dGVyLE5uPWRvY3VtZW50LmhlYWQsRG49UG58fHNuLmV2ZW50RW1pdHRlcjtEbiYmRG4uZW1pdChLZS5WRVJJRllfVklFV19WRVJTSU9OLHIoKSh7fSxYZS5WSUVXX1ZFUlNJT04sIjIuMTQuOCIpKTt2YXIgRm49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpZihGbi50eXBlPSJ0ZXh0L2NzcyIsRm4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa3QoKSkpLE5uLmFwcGVuZENoaWxkKEZuKSxPbiYmZnVuY3Rpb24odCxlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bi50eXBlPSJ0ZXh0L2NzcyIsbi50ZXh0Q29udGVudD1lLG4uaWQ9Wix0LmhlYWQuYXBwZW5kQ2hpbGQobil9KGRvY3VtZW50LE9uKSxtbiYmYm4mJnBhcmVudCl7dmFyIFVuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtVbi5yZWw9InN0eWxlc2hlZXQiLFVuLmhyZWY9Ym4sTm4uYXBwZW5kQ2hpbGQoVW4pfXZhciBCbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgbyxpPVtdLm1hcCxhPXImJnIuY2hpbGRyZW5bMF18fG51bGwsYz1hJiZmdW5jdGlvbiB0KGUpe3JldHVybntub2RlTmFtZTplLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYXR0cmlidXRlczp7fSxjaGlsZHJlbjppLmNhbGwoZS5jaGlsZE5vZGVzLChmdW5jdGlvbihlKXtyZXR1cm4gMz09PWUubm9kZVR5cGU/ZS5ub2RlVmFsdWU6dChlKX0pKX19KGEpLHM9W10sdT0hMCxsPXYodCksZj1mdW5jdGlvbiB0KGUsbixyKXtmb3IodmFyIG8gaW4gcikiZnVuY3Rpb24iPT10eXBlb2YgcltvXT9mdW5jdGlvbih0LG8pe3JbdF09ZnVuY3Rpb24odCl7dmFyIGk9byh0KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh5KGUsbCkscikpLGkmJmkhPT0obj15KGUsbCkpJiYhaS50aGVuJiZoKGw9ZyhlLHYobixpKSxsKSksaX19KG8scltvXSk6dChlLmNvbmNhdChvKSxuW29dPXYobltvXSkscltvXT12KHJbb10pKTtyZXR1cm4gcn0oW10sbCx2KGUpKTtyZXR1cm4gaCgpLGY7ZnVuY3Rpb24gZCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9kKHQobCxmKSk6bnVsbCE9dD90OiIifWZ1bmN0aW9uIHAoKXtvPSFvO3ZhciB0PWQobik7Zm9yKHImJiFvJiYoYT1DKHIsYSxjLGM9dCkpLHU9ITE7cy5sZW5ndGg7KXMucG9wKCkoKX1mdW5jdGlvbiBoKCl7b3x8KG89ITAsc2V0VGltZW91dChwKSl9ZnVuY3Rpb24gdih0LGUpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyh0LGUsbil7dmFyIHI9e307cmV0dXJuIHQubGVuZ3RoPyhyW3RbMF1dPXQubGVuZ3RoPjE/Zyh0LnNsaWNlKDEpLGUsblt0WzBdXSk6ZSx2KG4scikpOmV9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KWU9ZVt0W24rK11dO3JldHVybiBlfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQ/dC5rZXk6bnVsbH1mdW5jdGlvbiBiKHQpe3JldHVybiB0LmN1cnJlbnRUYXJnZXQuZXZlbnRzW3QudHlwZV0odCl9ZnVuY3Rpb24geCh0LGUsbixyLG8pe2lmKCJrZXkiPT09ZSk7ZWxzZSBpZigic3R5bGUiPT09ZSlpZigic3RyaW5nIj09dHlwZW9mIG4pdC5zdHlsZS5jc3NUZXh0PW47ZWxzZSBmb3IodmFyIGkgaW4ic3RyaW5nIj09dHlwZW9mIHImJihyPXQuc3R5bGUuY3NzVGV4dD0iIiksdihyLG4pKXt2YXIgYT1udWxsPT1ufHxudWxsPT1uW2ldPyIiOm5baV07Ii0iPT09aVswXT90LnN0eWxlLnNldFByb3BlcnR5KGksYSk6dC5zdHlsZVtpXT1hfWVsc2UibyI9PT1lWzBdJiYibiI9PT1lWzFdPyhlPWUuc2xpY2UoMiksdC5ldmVudHM/cnx8KHI9dC5ldmVudHNbZV0pOnQuZXZlbnRzPXt9LHQuZXZlbnRzW2VdPW4sbj9yfHx0LmFkZEV2ZW50TGlzdGVuZXIoZSxiKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxiKSk6ZSBpbiB0JiYibGlzdCIhPT1lJiYidHlwZSIhPT1lJiYiZHJhZ2dhYmxlIiE9PWUmJiJzcGVsbGNoZWNrIiE9PWUmJiJ0cmFuc2xhdGUiIT09ZSYmIW8/dFtlXT1udWxsPT1uPyIiOm46bnVsbCE9biYmITEhPT1uJiZ0LnNldEF0dHJpYnV0ZShlLG4pLG51bGwhPW4mJiExIT09bnx8dC5yZW1vdmVBdHRyaWJ1dGUoZSl9ZnVuY3Rpb24gdyh0LGUpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0P2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpOihlPWV8fCJzdmciPT09dC5ub2RlTmFtZSk/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdC5ub2RlTmFtZSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0Lm5vZGVOYW1lKSxyPXQuYXR0cmlidXRlcztpZihyKXtyLm9uY3JlYXRlJiZzLnB1c2goKGZ1bmN0aW9uKCl7ci5vbmNyZWF0ZShuKX0pKTtmb3IodmFyIG89MDtvPHQuY2hpbGRyZW4ubGVuZ3RoO28rKyluLmFwcGVuZENoaWxkKHcodC5jaGlsZHJlbltvXT1kKHQuY2hpbGRyZW5bb10pLGUpKTtmb3IodmFyIGkgaW4gcil4KG4saSxyW2ldLG51bGwsZSl9cmV0dXJuIG59ZnVuY3Rpb24gRSh0LGUpe3ZhciBuPWUuYXR0cmlidXRlcztpZihuKXtmb3IodmFyIHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKylFKHQuY2hpbGROb2Rlc1tyXSxlLmNoaWxkcmVuW3JdKTtuLm9uZGVzdHJveSYmbi5vbmRlc3Ryb3kodCl9cmV0dXJuIHR9ZnVuY3Rpb24gaih0LGUsbil7ZnVuY3Rpb24gcigpe3QucmVtb3ZlQ2hpbGQoRShlLG4pKX12YXIgbz1uLmF0dHJpYnV0ZXMmJm4uYXR0cmlidXRlcy5vbnJlbW92ZTtvP28oZSxyKTpyKCl9ZnVuY3Rpb24gQyh0LGUsbixyLG8pe2lmKHI9PT1uKTtlbHNlIGlmKG51bGw9PW58fG4ubm9kZU5hbWUhPT1yLm5vZGVOYW1lKXt2YXIgaT13KHIsbyk7dC5pbnNlcnRCZWZvcmUoaSxlKSxudWxsIT1uJiZqKHQsZSxuKSxlPWl9ZWxzZSBpZihudWxsPT1uLm5vZGVOYW1lKWUubm9kZVZhbHVlPXI7ZWxzZXshZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBvIGluIHYoZSxuKSluW29dIT09KCJ2YWx1ZSI9PT1vfHwiY2hlY2tlZCI9PT1vP3Rbb106ZVtvXSkmJngodCxvLG5bb10sZVtvXSxyKTt2YXIgaT11P24ub25jcmVhdGU6bi5vbnVwZGF0ZTtpJiZzLnB1c2goKGZ1bmN0aW9uKCl7aSh0LGUpfSkpfShlLG4uYXR0cmlidXRlcyxyLmF0dHJpYnV0ZXMsbz1vfHwic3ZnIj09PXIubm9kZU5hbWUpO2Zvcih2YXIgYT17fSxjPXt9LGw9W10sZj1uLmNoaWxkcmVuLHA9ci5jaGlsZHJlbixoPTA7aDxmLmxlbmd0aDtoKyspe2xbaF09ZS5jaGlsZE5vZGVzW2hdLG51bGwhPSh5PW0oZltoXSkpJiYoYVt5XT1bbFtoXSxmW2hdXSl9aD0wO2Zvcih2YXIgZz0wO2c8cC5sZW5ndGg7KXt2YXIgeT1tKGZbaF0pLGI9bShwW2ddPWQocFtnXSkpO2lmKGNbeV0paCsrO2Vsc2UgaWYobnVsbD09Ynx8YiE9PW0oZltoKzFdKSlpZihudWxsPT1ifHx1KW51bGw9PXkmJihDKGUsbFtoXSxmW2hdLHBbZ10sbyksZysrKSxoKys7ZWxzZXt2YXIgRT1hW2JdfHxbXTt5PT09Yj8oQyhlLEVbMF0sRVsxXSxwW2ddLG8pLGgrKyk6RVswXT9DKGUsZS5pbnNlcnRCZWZvcmUoRVswXSxsW2hdKSxFWzFdLHBbZ10sbyk6QyhlLGxbaF0sbnVsbCxwW2ddLG8pLGNbYl09cFtnXSxnKyt9ZWxzZSBudWxsPT15JiZqKGUsbFtoXSxmW2hdKSxoKyt9Zm9yKDtoPGYubGVuZ3RoOyludWxsPT1tKGZbaF0pJiZqKGUsbFtoXSxmW2hdKSxoKys7Zm9yKHZhciBoIGluIGEpY1toXXx8aihlLGFbaF1bMF0sYVtoXVsxXSl9cmV0dXJuIGV9fShhbixvbixqdCxlbihrbik/d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNuKTpkb2N1bWVudC5ib2R5KTtCbi5pbml0KHtzdXJ2ZXlJZDpsbixmcmFtZTpzbixlbnZJZDp1bix1c2VySWQ6Zm4sY2FyZHM6ZG4sbW9kZTpwbixtZXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGlyZWN0RW1iZWQsbj10Lm1vZGUscj12b2lkIDA9PT1uP251bGw6bixvPWU/d2luZG93OndpbmRvdy5wYXJlbnQsaT1vLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm57bW9kZTpyLHN3Om8uc2NyZWVuLndpZHRoLHNoOm8uc2NyZWVuLmhlaWdodCxjdzppLmNsaWVudFdpZHRoLGNoOmkuY2xpZW50SGVpZ2h0LHA6by5sb2NhdGlvbi5ocmVmLGw6by5uYXZpZ2F0b3IubGFuZ3VhZ2V9fSh7bW9kZTpwbixkaXJlY3RFbWJlZDplbihrbil9KSxib3JkZXI6dm4sZm9udEZhbWlseTptbixjb250ZXh0OmduLGxvY2FsZTp5bixhcGlVUkw6eG4sc2hvd1N1cnZleUJyYW5kOnduLG1hcmtldGluZ1VybDpFbixzbHVnTmFtZTpqbixyZXNwb25zZUdyb3VwVWlkOkNuLGhlYWRlcnM6a24sZW5kQ2FyZDpTbixjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6QW4saXNQcmV2aWV3OkluLGFuc3dlcnM6TW4sY3VzdG9tTWV0YWRhdGE6VG4sZXhwZXJpbWVudEZsYWdzOl9uLHVzZU1vYmlsZVN0eWxpbmc6TG4sbW9iaWxlUGxhdGZvcm06Um4sZXZlbnRFbWl0dGVyOlBufSl9KCl9KCk7';
1
+ export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjkuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezc3ODg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lci0tbW9iaWxlIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi51bC1jYXJkX19jb250YWluZXIge1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNXB4IDIwcHg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udWwtcmljaC10ZXh0LWJvZHkge1xuICBtaW4taGVpZ2h0OiAyZW07XG59XG5cbi51bC1yaWNoLXRleHQtYm9keSxcbi51bC1yaWNoLXRleHQtYm9keSBwIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnVsLXJpY2gtdGV4dC1ib2R5IGxpIHtcbiAgbWFyZ2luOiA1cHggMHB4IDVweCAyMHB4O1xufVxuXG4udWwtcmljaC10ZXh0LWJvZHkgcCxcbi51bC1yaWNoLXRleHQtYm9keSBsaSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjMzQzNDQyO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG59XG5cbi51bC1yaWNoLXRleHQtYm9keTpsYXN0LWNoaWxkLFxuLnVsLXJpY2gtdGV4dC1ib2R5IGxpOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4udWwtY2FyZC1tYWluLWNvbnRlbnRfX2xpbmsge1xuICBmbGV4LWdyb3c6IDU1O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogMzUlO1xufVxuXG4udWwtY2FyZC1tYWluLWNvbnRlbnRfX3dlYiB7XG4gIHBhZGRpbmctdG9wOiAxNXB4O1xufVxuXG4udWwtcXVlc3Rpb24ge1xuICBmbGV4OiAxIDAgYXV0bztcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxMjUlO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXB0aW9uIHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMTMwLjM1JTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgY29sb3I6ICM2YzZjNmU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXJkX19jaG9pY2VzIHtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG4gIGZsZXg6IDEgMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uY2hvaWNlLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNob2ljZSB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG5cbiAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLmNob2ljZS0tZGVza3RvcDphY3RpdmUsXG4uY2hvaWNlLS1tb2JpbGU6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnVsLXRoYW5rcy1jaGVjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcy1jb250ZW50IHtcbiAgcGFkZGluZzogMjBweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcyAudWwtcXVlc3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgaHlwaGVuczogYXV0bztcbiAgaHlwaGVuYXRlLWxpbWl0LWxpbmVzOiBuby1saW1pdDtcbn1cblxuLnNlbGVjdC1jaGVja2JveCB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlbGVjdC1yYWRpbyB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMjMyMzI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJ3RyYW5zcGFyZW50JztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5mYWRlLWluLXRyYW5zaXRpb24ge1xuICBhbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1tb3otYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW8tYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW1zLWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW1vei1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW8ta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1tcy1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0NzA2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxODk4Niksbz1uKDEwNjY5KSxpPW4oNzc4OCksYT1uKDg2NTU4KSxjPW4oNjA2MzIpLHM9big0MjAwNSksdT1uKDc2NDI4KSxsPW4oNzM1MjMpLGY9big2MzU1Myk7KGU9cighMSkpLmkobyksZS5pKGkpLGUuaShhKSxlLmkoYyksZS5pKHMpLGUuaSh1KSxlLmkobCksZS5pKGYpLGUucHVzaChbdC5pZCwiaHRtbCxcbmJvZHkge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG59XG5cbmIge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4jdWwtYXBwIHtcbiAgb3BhY2l0eTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZ3JvdzogMjtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuI3VsLWFwcC51bC1hcHAtLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2Utb3V0O1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGJvdHRvbTogMDtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5cbi51bC1mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgZmxleC1ncm93OiAxO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLWZvb3Rlci1idWJibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wLFxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jbG9zZS1jb250YWluZXItLWRlc2t0b3Age1xuICB0b3A6IDI1cHg7XG4gIHJpZ2h0OiAyNXB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1tb2JpbGUge1xuICB0b3A6IDE1cHg7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uY2xvc2UtYnRuIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMThweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2Utb3V0O1xufVxuXG4jdWwtcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIG1heC13aWR0aDogMjUwcHg7XG4gIG1hcmdpbjogMjVweCAwO1xufVxuXG4jdWwtcHJvZ3Jlc3MtYmFyLWN1cnJlbnQge1xuICB3aWR0aDogMHB4O1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sODY1NTg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIG5wcy5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLmxpa2VydC1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5saWtlcnQtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmxpa2VydC1udW1iZXItMSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci01IHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MDYzMjpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIuc2VsZWN0LWxhYmVsIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0MjAwNTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbGlrZXJ0LmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1ucHNfX251bWJlcnMge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogNXB4IDAgMCAwO1xufVxuXG4ubnBzLW51bWJlci0tbW9iaWxlIHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTZlNjtcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XG59XG5cbi5ucHMtbnVtYmVyLS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5ucHMtbnVtYmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleDogMSAwO1xuXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIGhlaWdodDogNjdweDtcbn1cblxuLm5wcy1udW1iZXI6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5wcy1udW1iZXItLWRlc2t0b3A6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnBzLW51bWJlci0wIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG59XG5cbi5ucHMtbnVtYmVyLTEwIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSwxMDY2OTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKipcbiAqIG1pbmlyZXNldC5jc3NcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qZ3RobXMvbWluaXJlc2V0LmNzc1xuICovXG5cbmh0bWwsXG5ib2R5LFxucCxcbm9sLFxudWwsXG5saSxcbmRsLFxuZHQsXG5kZCxcbmJsb2NrcXVvdGUsXG5maWd1cmUsXG5maWVsZHNldCxcbmxlZ2VuZCxcbnRleHRhcmVhLFxucHJlLFxuaWZyYW1lLFxuaHIsXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIG1hcmdpbjogMDtcbn1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosXG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3NjQyODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZC10ZXh0IHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4udWwtY2FyZC10ZXh0X19jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBmbGV4OiAxIDAgMTAwJTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDYzcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWF4LWhlaWdodDogMTUwcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0IHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgbWluLWhlaWdodDogNjNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTJweDtcbiAgcmVzaXplOiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSgxMDgsIDEwOCwgMTEwLCAwLjUpO1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4udWwtY2FyZC10ZXh0X19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgcGFkZGluZzogMTAuNXB4IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3MzUyMzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjM1NTM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiI3VsLWNhcmQtdm9pY2VfX3ZpZGVvIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi51bC1jYXJkLXRleHRfX2J1dHRvbi51bC1idXR0b24taW5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xuICBjb2xvcjogIzVkNjk2ZiAhaW1wb3J0YW50O1xufVxuXG4jdWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHdpZHRoOiAtbW96LWF2YWlsYWJsZTsgLyogV2ViS2l0LWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlOyAvKiBNb3ppbGxhLWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiBmaWxsLWF2YWlsYWJsZTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjI1ODI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fX0sNDQ2MjE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUsbixyLG8saSxhKXt0cnl7dmFyIGM9dFtpXShhKSxzPWMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbih0KX1jLmRvbmU/ZShzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT10LmFwcGx5KG4scik7ZnVuY3Rpb24gYyh0KXtlKGEsbyxpLGMscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtlKGEsbyxpLGMscywidGhyb3ciLHQpfWModm9pZCAwKX0pKX19fSwzMDU5MzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LDQ0NTM6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXQuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSw2NDE1NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fX0sNjYwODE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmV4cG9ydHM9ZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10LmV4cG9ydHM9ZX0sOTQyNjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfX0sOTQ1NjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LDkyODE2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTgyKSxvPW4oOTQyNjYpLGk9big5NDU2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpfHxvKHQpfHxpKCl9fSw3NjM5MDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP3QuZXhwb3J0cz1lPWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxlKG4pfXQuZXhwb3J0cz1lfSw0NDY3NDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oNDY2NzkpfSw5NzM0MzpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbztyPVt0LGVdLG49ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dmFyIG4scixvPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDoobj1bXSxyPVtdLHtoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT4tMX0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiByW24uaW5kZXhPZih0KV19LHNldDpmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiYobi5wdXNoKHQpLHIucHVzaChlKSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksci5zcGxpY2UoZSwxKSl9fSksaT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEV2ZW50KHQse2J1YmJsZXM6ITB9KX07dHJ5e25ldyBFdmVudCgidGVzdCIpfWNhdGNoKHQpe2k9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KHQsITAsITEpLGV9fWZ1bmN0aW9uIGEodCl7aWYodCYmdC5ub2RlTmFtZSYmIlRFWFRBUkVBIj09PXQubm9kZU5hbWUmJiFvLmhhcyh0KSl7dmFyIGU9bnVsbCxuPW51bGwscj1udWxsLGE9ZnVuY3Rpb24oKXt0LmNsaWVudFdpZHRoIT09biYmZCgpfSxjPWZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3Quc3R5bGVbbl09ZVtuXX0pKSxvLmRlbGV0ZSh0KX0uYmluZCh0LHtoZWlnaHQ6dC5zdHlsZS5oZWlnaHQscmVzaXplOnQuc3R5bGUucmVzaXplLG92ZXJmbG93WTp0LnN0eWxlLm92ZXJmbG93WSxvdmVyZmxvd1g6dC5zdHlsZS5vdmVyZmxvd1gsd29yZFdyYXA6dC5zdHlsZS53b3JkV3JhcH0pO3QuYWRkRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksIm9ucHJvcGVydHljaGFuZ2UiaW4gdCYmIm9uaW5wdXQiaW4gdCYmdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLHQuc3R5bGUub3ZlcmZsb3dYPSJoaWRkZW4iLHQuc3R5bGUud29yZFdyYXA9ImJyZWFrLXdvcmQiLG8uc2V0KHQse2Rlc3Ryb3k6Yyx1cGRhdGU6ZH0pLHMoKX1mdW5jdGlvbiBzKCl7dmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTsidmVydGljYWwiPT09bi5yZXNpemU/dC5zdHlsZS5yZXNpemU9Im5vbmUiOiJib3RoIj09PW4ucmVzaXplJiYodC5zdHlsZS5yZXNpemU9Imhvcml6b250YWwiKSxlPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz8tKHBhcnNlRmxvYXQobi5wYWRkaW5nVG9wKStwYXJzZUZsb2F0KG4ucGFkZGluZ0JvdHRvbSkpOnBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCkrcGFyc2VGbG9hdChuLmJvcmRlckJvdHRvbVdpZHRoKSxpc05hTihlKSYmKGU9MCksZCgpfWZ1bmN0aW9uIHUoZSl7dmFyIG49dC5zdHlsZS53aWR0aDt0LnN0eWxlLndpZHRoPSIwcHgiLHQub2Zmc2V0V2lkdGgsdC5zdHlsZS53aWR0aD1uLHQuc3R5bGUub3ZlcmZsb3dZPWV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9W107dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50Oyl0LnBhcmVudE5vZGUuc2Nyb2xsVG9wJiZlLnB1c2goe25vZGU6dC5wYXJlbnROb2RlLHNjcm9sbFRvcDp0LnBhcmVudE5vZGUuc2Nyb2xsVG9wfSksdD10LnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2lmKDAhPT10LnNjcm9sbEhlaWdodCl7dmFyIHI9bCh0KSxvPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDt0LnN0eWxlLmhlaWdodD0iIix0LnN0eWxlLmhlaWdodD10LnNjcm9sbEhlaWdodCtlKyJweCIsbj10LmNsaWVudFdpZHRoLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2RlLnNjcm9sbFRvcD10LnNjcm9sbFRvcH0pKSxvJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1vKX19ZnVuY3Rpb24gZCgpe2YoKTt2YXIgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQodC5zdHlsZS5oZWlnaHQpKSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4uaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQ7aWYobzxlPyJoaWRkZW4iPT09bi5vdmVyZmxvd1kmJih1KCJzY3JvbGwiKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpOiJoaWRkZW4iIT09bi5vdmVyZmxvd1kmJih1KCJoaWRkZW4iKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpLHIhPT1vKXtyPW87dmFyIGE9aSgiYXV0b3NpemU6cmVzaXplZCIpO3RyeXt0LmRpc3BhdGNoRXZlbnQoYSl9Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGModCl7dmFyIGU9by5nZXQodCk7ZSYmZS5kZXN0cm95KCl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLnVwZGF0ZSgpfXZhciB1PW51bGw7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPXR5cGVvZiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT8oKHU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pOigodT1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLChmdW5jdGlvbih0KXtyZXR1cm4gYSh0LGUpfSkpLHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLGMpLHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLHMpLHR9KSxlLmRlZmF1bHQ9dSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSx2b2lkIDA9PT0obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUscik6bil8fCh0LmV4cG9ydHM9byl9LDQwMDQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDY1Njc5KSxuKDUxMDkwKSxuKDI0Nzg1KSxuKDg5MTcpLG4oNTQ3ODYpLG4oMTI4MTYpLG4oNjE5MjQpLG4oOTgzMDYpLG4oMTIwMjUpLG4oMjgzMyksbig5NjQ1Myksbig3MDg2MyksbigyNDgwMiksbigxODI3Myksbig0MjQxMSksbigzNzQ4MSksbig0NTU1MCksbig1ODE2NSksbig1MTE3Myksbig4NzQzKSxuKDc1ODA0KSxuKDQ2MTQ2KSxuKDE1MDc3KSxuKDU4MzI5KSxuKDYwNTI1KSxuKDc0OTUzKSxuKDU0NzgxKSxuKDUxNjYpLG4oODk3NTgpLG4oMTgzNzgpLG4oOTI1Miksbig5MzI3Miksbig1NjE1OCksbig0MTQ1Niksbig3Mjg1MSksbigzNDUyOSksbigxOTI3OCksbig5MTIwOSksbig3MjU2MCksbigxMDYzKSxuKDk2NDk4KSxuKDIyNDQyKSxuKDc1ODk0KSxuKDcxNjIyKSxuKDc0NTM4KSxuKDIxMjcpLG4oNjk5ODgpLG4oNTczODcpLG4oMzA4MTcpLG4oNTIwNTUpLG4oNzMzNjApLG4oNDc1MDIpLG4oMzMxOTUpLG4oOTA5MTIpLG4oMjgyMDMpLG4oNzkyMjcpLG4oNDM1OTEpLG4oMjIyNzcpLG4oMjQxMjkpLG4oNzQxMjApLG4oOTQ5NjMpLG4oMjczODgpLG4oODA1MjIpLG4oNDU1MjgpLG4oODAxMTYpLG4oMjkxMTApLG4oODU1OTQpLG4oNjc4MTIpLG4oMzM3OTIpLG4oODYyMTQpLG4oNzAxNDYpLG4oNzE4NDYpLG4oNTAwNjMpLG4oMTA3NDMpLG4oODA1MTEpLG4oMTUzNzMpLG4oOTc2ODgpLG4oNzQ1NjMpLG4oNjUwMDMpLG4oODEyNzcpLG4oNDQwMTkpLG4oMzgyKSxuKDE4ODIzKSxuKDMzMzIyKSxuKDMzMDY1KSxuKDE3NDk0KSxuKDgwMzYzKSxuKDQzMzk2KSxuKDY5MTg4KSxuKDc0Nzk1KSxuKDgyMjAxKSxuKDQxNzczKSxuKDMwNDAyKSxuKDE4MTc1KSxuKDY2ODk2KSxuKDg1NzY3KSxuKDg0MzYpLG4oOTIxOTIpLG4oMTIxNTUpLG4oMjYwMTYpLG4oNzQxMTcpLG4oMjgwMDMpLG4oNjc5NDEpLG4oNDQwNTEpLG4oNDk0OTUpLG4oODcyMDkpLG4oMTgyNzYpLG4oMzc1NCksbigzMzQzNyksbigxOTQzMyksbig3MTgyNyksbigyNjA2Myksbig5NjcpLG4oMzMxMDApLG4oNDE5MjgpLG4oMTU4NjkpLG4oODg3MTUpLG4oMzY5OTUpLG4oMTEyMjQpLG4oNjM3NjUpLG4oMTMwNjQpLG4oMzIyOTMpLG4oMjEwMzIpLG4oMzc5MzYpLG4oOTM5OTUpLG4oMTMzOTMpLG4oMTEyODEpLG4oMzgwMzYpLG4oMTEzOCksbig0NjA3OCksbigzMDA4Myksbig0NzM4Myksbig3MTU1OCksbig5OTIxOCksbig5ODk3OCksbig4MDY5KSxuKDcwMjA0KSxuKDg1NzU4KSxuKDExNzczKSxuKDE1NzYzKSxuKDQxNjMyKSxuKDM2MjMzKSxuKDQwMDQ1KSxuKDIxMzc2KSxuKDg0MDcpLG4oMTY1MCksbig4MTEwNCksbigxMTY4OCksbigxNzYyOSksbig0MjQ5MCksbig5NDkwNiksbig3NDA2MSksbig1ODYwNiksbig0NTE1Nyksbig2MTI0NSksbigyOTI3Myksbig5MDU2MCksbig0NTE1NCksbig3MDM3Myksbig4MDc1Nyksbig2OTg3OSksbigyNDQ5OCksbigxNjk3OCksbigxNzE1MiksbigzNzk4NyksbigyNjgwKSxuKDM4MjgwKSxuKDE4NTU5KSxuKDUwNDgyKSxuKDc0MjMwKSxuKDE4NTA2KSxuKDIwMjQyKSxuKDI4MTU1KSxuKDMzOTAxKSxuKDc2NDQyKSxuKDg4NjM2KSxuKDgxNDYzKSxuKDk1MTYzKSxuKDgzNjczKSxuKDIzNTY4KSxuKDI3Mjk0KSxuKDI0NDU3KSxuKDM5MzIpLG4oNzU0OTkpLG4oODc1NjQpLG4oODQ1MCksbigxNzYwNSksbig3MzU2MiksbigxMTg3OCksbig2MDkyOSksbig0Mzk1MSksbig5MTM0NyksbigyOTI4NCksbig2MTk0MyksbigyNjk4NiksbigxMzY2KSxuKDgzMzEwKSxuKDQ2NTk3KSxuKDcwMTM2KSxuKDYwODY1KSxuKDY3NzA4KSxuKDk2NjM4KSxuKDM5NzMwKSxuKDc0MTE1KSxuKDg1Njg2KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sNjA0OTE6ZnVuY3Rpb24odCxlLG4pe24oNDAwNDYpLG4oMTU2MjQpLG4oOTI0MDQpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw4NjQ3MDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSw3OTg2MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IHNldCAiK1N0cmluZyh0KSsiIGFzIGEgcHJvdG90eXBlIik7cmV0dXJuIHR9fSw3NjUxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDUwODY4KSxpPW4oNjY5NzEpLGE9cigidW5zY29wYWJsZXMiKSxjPUFycmF5LnByb3RvdHlwZTtudWxsPT1jW2FdJiZpKGMsYSxvKG51bGwpKSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Y1thXVt0XT0hMH19LDUzMTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUrKG4/cih0LGUpLmxlbmd0aDoxKX19LDU5Mzc5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgIisobj9uKyIgIjoiIikrImludm9jYXRpb24iKTtyZXR1cm4gdH19LDg3NTc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gdH19LDczMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDYyNTU2KSxpPW4oODk1NTgpLGE9bigxMDU5MiksYz1uKDc2Mjk4KSxzPW4oNTk1OTEpLHU9big2Njk3MSksbD1uKDkyOTEzKSxmPW4oMzc2MjApLmYsZD1uKDY0OTY1KSxwPW4oNzE4NDIpLGg9bigyMzcyNCksdj1uKDY3MjkpLGc9aS5EYXRhVmlldyx5PWcmJmcucHJvdG90eXBlLG09aS5JbnQ4QXJyYXksYj1tJiZtLnByb3RvdHlwZSx4PWkuVWludDhDbGFtcGVkQXJyYXksdz14JiZ4LnByb3RvdHlwZSxFPW0mJmQobSksQz1iJiZkKGIpLGo9T2JqZWN0LnByb3RvdHlwZSxrPWouaXNQcm90b3R5cGVPZixTPWgoInRvU3RyaW5nVGFnIiksTz12KCJUWVBFRF9BUlJBWV9UQUciKSxJPSEoIWkuQXJyYXlCdWZmZXJ8fCFnKSxBPUkmJiEhcCYmIk9wZXJhIiE9PXMoaS5vcGVyYSksTT0hMSxUPXtJbnQ4QXJyYXk6MSxVaW50OEFycmF5OjEsVWludDhDbGFtcGVkQXJyYXk6MSxJbnQxNkFycmF5OjIsVWludDE2QXJyYXk6MixJbnQzMkFycmF5OjQsVWludDMyQXJyYXk6NCxGbG9hdDMyQXJyYXk6NCxGbG9hdDY0QXJyYXk6OH0sXz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmYyhULHModCkpfTtmb3IociBpbiBUKWlbcl18fChBPSExKTtpZigoIUF8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHxFPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKEU9ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEEpKWZvcihyIGluIFQpaVtyXSYmcChpW3JdLEUpO2lmKCghQXx8IUN8fEM9PT1qKSYmKEM9RS5wcm90b3R5cGUsQSkpZm9yKHIgaW4gVClpW3JdJiZwKGlbcl0ucHJvdG90eXBlLEMpO2lmKEEmJmQodykhPT1DJiZwKHcsQyksbyYmIWMoQyxTKSlmb3IociBpbiBNPSEwLGYoQyxTLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKT90aGlzW09dOnZvaWQgMH19KSxUKWlbcl0mJnUoaVtyXSxPLHIpO0kmJnAmJmQoeSkhPT1qJiZwKHksaiksdC5leHBvcnRzPXtOQVRJVkVfQVJSQVlfQlVGRkVSOkksTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpBLFRZUEVEX0FSUkFZX1RBRzpNJiZPLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKF8odCkpcmV0dXJuIHQ7dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbih0KXtpZihwKXtpZihrLmNhbGwoRSx0KSlyZXR1cm4gdH1lbHNlIGZvcih2YXIgZSBpbiBUKWlmKGMoVCxyKSl7dmFyIG49aVtlXTtpZihuJiYodD09PW58fGsuY2FsbChuLHQpKSlyZXR1cm4gdH10aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXtpZihvKXtpZihuKWZvcih2YXIgciBpbiBUKXt2YXIgYT1pW3JdO2EmJmMoYS5wcm90b3R5cGUsdCkmJmRlbGV0ZSBhLnByb3RvdHlwZVt0XX1DW3RdJiYhbnx8bChDLHQsbj9lOkEmJmJbdF18fGUpfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUsbil7dmFyIHIsYTtpZihvKXtpZihwKXtpZihuKWZvcihyIGluIFQpKGE9aVtyXSkmJmMoYSx0KSYmZGVsZXRlIGFbdF07aWYoRVt0XSYmIW4pcmV0dXJuO3RyeXtyZXR1cm4gbChFLHQsbj9lOkEmJm1bdF18fGUpfWNhdGNoKHQpe319Zm9yKHIgaW4gVCkhKGE9aVtyXSl8fGFbdF0mJiFufHxsKGEsdCxlKX19LGlzVmlldzpmdW5jdGlvbih0KXt2YXIgZT1zKHQpO3JldHVybiJEYXRhVmlldyI9PT1lfHxjKFQsZSl9LGlzVHlwZWRBcnJheTpfLFR5cGVkQXJyYXk6RSxUeXBlZEFycmF5UHJvdG90eXBlOkN9fSw4MjgzNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big2MjU1NiksaT1uKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSLGE9big2Njk3MSksYz1uKDE5MjYpLHM9bigzMjE4NyksdT1uKDU5Mzc5KSxsPW4oNDM0MTYpLGY9bigyNzg4NCksZD1uKDgzOTE0KSxwPW4oOTA3MjUpLGg9bigxMzMzNCkuZix2PW4oMzc2MjApLmYsZz1uKDY1ODk1KSx5PW4oNTExMjgpLG09big4OTgyNyksYj1tLmdldCx4PW0uc2V0LHc9IkFycmF5QnVmZmVyIixFPSJEYXRhVmlldyIsQz0iV3JvbmcgaW5kZXgiLGo9ci5BcnJheUJ1ZmZlcixrPWosUz1yLkRhdGFWaWV3LE89ci5SYW5nZUVycm9yLEk9cC5wYWNrLEE9cC51bnBhY2ssTT1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxUPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NV19LF89ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfSxSPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEkodCwyMyw0KX0sUD1mdW5jdGlvbih0KXtyZXR1cm4gSSh0LDUyLDgpfSxOPWZ1bmN0aW9uKHQsZSl7dih0LnByb3RvdHlwZSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKVtlXX19KX0sRD1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz1kKG4pLGk9Yih0KTtpZihvK2U+aS5ieXRlTGVuZ3RoKXRocm93IE8oQyk7dmFyIGE9YihpLmJ1ZmZlcikuYnl0ZXMsYz1vK2kuYnl0ZU9mZnNldCxzPWEuc2xpY2UoYyxjK2UpO3JldHVybiByP3M6cy5yZXZlcnNlKCl9LEY9ZnVuY3Rpb24odCxlLG4scixvLGkpe3ZhciBhPWQobiksYz1iKHQpO2lmKGErZT5jLmJ5dGVMZW5ndGgpdGhyb3cgTyhDKTtmb3IodmFyIHM9YihjLmJ1ZmZlcikuYnl0ZXMsdT1hK2MuYnl0ZU9mZnNldCxsPXIoK28pLGY9MDtmPGU7ZisrKXNbdStmXT1sW2k/ZjplLWYtMV19O2lmKGkpe2lmKCFzKChmdW5jdGlvbigpe2ooMSl9KSl8fCFzKChmdW5jdGlvbigpe25ldyBqKC0xKX0pKXx8cygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGosbmV3IGooMS41KSxuZXcgaihOYU4pLGoubmFtZSE9d30pKSl7Zm9yKHZhciBVLEI9KGs9ZnVuY3Rpb24odCl7cmV0dXJuIHUodGhpcyxrKSxuZXcgaihkKHQpKX0pLnByb3RvdHlwZT1qLnByb3RvdHlwZSx6PWgoaiksVj0wO3oubGVuZ3RoPlY7KShVPXpbVisrXSlpbiBrfHxhKGssVSxqW1VdKTtCLmNvbnN0cnVjdG9yPWt9dmFyIEg9bmV3IFMobmV3IGsoMikpLHE9Uy5wcm90b3R5cGUuc2V0SW50ODtILnNldEludDgoMCwyMTQ3NDgzNjQ4KSxILnNldEludDgoMSwyMTQ3NDgzNjQ5KSwhSC5nZXRJbnQ4KDApJiZILmdldEludDgoMSl8fGMoUy5wcm90b3R5cGUse3NldEludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7cS5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfX0se3Vuc2FmZTohMH0pfWVsc2Ugaz1mdW5jdGlvbih0KXt1KHRoaXMsayx3KTt2YXIgZT1kKHQpO3godGhpcyx7Ynl0ZXM6Zy5jYWxsKG5ldyBBcnJheShlKSwwKSxieXRlTGVuZ3RoOmV9KSxvfHwodGhpcy5ieXRlTGVuZ3RoPWUpfSxTPWZ1bmN0aW9uKHQsZSxuKXt1KHRoaXMsUyxFKSx1KHQsayxFKTt2YXIgcj1iKHQpLmJ5dGVMZW5ndGgsaT1sKGUpO2lmKGk8MHx8aT5yKXRocm93IE8oIldyb25nIG9mZnNldCIpO2lmKGkrKG49dm9pZCAwPT09bj9yLWk6ZihuKSk+cil0aHJvdyBPKCJXcm9uZyBsZW5ndGgiKTt4KHRoaXMse2J1ZmZlcjp0LGJ5dGVMZW5ndGg6bixieXRlT2Zmc2V0Oml9KSxvfHwodGhpcy5idWZmZXI9dCx0aGlzLmJ5dGVMZW5ndGg9bix0aGlzLmJ5dGVPZmZzZXQ9aSl9LG8mJihOKGssImJ5dGVMZW5ndGgiKSxOKFMsImJ1ZmZlciIpLE4oUywiYnl0ZUxlbmd0aCIpLE4oUywiYnl0ZU9mZnNldCIpKSxjKFMucHJvdG90eXBlLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBEKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gRCh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUQodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1EKHRoaXMsMix0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gZVsxXTw8OHxlWzBdfSxnZXRJbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gUihEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gUihEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKHQpe3JldHVybiBBKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDIzKX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbih0KXtyZXR1cm4gQShEKHRoaXMsOCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMSx0LE0sZSl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDEsdCxNLGUpfSxzZXRJbnQxNjpmdW5jdGlvbih0LGUpe0YodGhpcywyLHQsVCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDIsdCxULGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRJbnQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsXyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxMLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDgsdCxQLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfX0pO3koayx3KSx5KFMsRSksdC5leHBvcnRzPXtBcnJheUJ1ZmZlcjprLERhdGFWaWV3OlN9fSw5OTQzMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyMDkpLG89big3Njk3NiksaT1uKDI3ODg0KSxhPU1hdGgubWluO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih0LGUpe3ZhciBuPXIodGhpcyksYz1pKG4ubGVuZ3RoKSxzPW8odCxjKSx1PW8oZSxjKSxsPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGY9YSgodm9pZCAwPT09bD9jOm8obCxjKSktdSxjLXMpLGQ9MTtmb3IodTxzJiZzPHUrZiYmKGQ9LTEsdSs9Zi0xLHMrPWYtMSk7Zi0tID4wOyl1IGluIG4/bltzXT1uW3VdOmRlbGV0ZSBuW3NdLHMrPWQsdSs9ZDtyZXR1cm4gbn19LDY1ODk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9YXJndW1lbnRzLmxlbmd0aCxjPW8oYT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbikscz1hPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx1PXZvaWQgMD09PXM/bjpvKHMsbik7dT5jOyllW2MrK109dDtyZXR1cm4gZX19LDMxMzY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMDAyNSkuZm9yRWFjaCxvPW4oMjI5MDkpO3QuZXhwb3J0cz1vKCJmb3JFYWNoIik/ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX06W10uZm9yRWFjaH0sODUxNjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ2MTMwKSxvPW4oMTkyMDkpLGk9bigxMjI3OCksYT1uKDQ0OTg0KSxjPW4oMjc4ODQpLHM9big1ODgxMCksdT1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixsLGYsZCxwPW8odCksaD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHY9YXJndW1lbnRzLmxlbmd0aCxnPXY+MT9hcmd1bWVudHNbMV06dm9pZCAwLHk9dm9pZCAwIT09ZyxtPTAsYj11KHApO2lmKHkmJihnPXIoZyx2PjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09Ynx8aD09QXJyYXkmJmEoYikpZm9yKG49bmV3IGgoZT1jKHAubGVuZ3RoKSk7ZT5tO20rKylzKG4sbSx5P2cocFttXSxtKTpwW21dKTtlbHNlIGZvcihkPShmPWIuY2FsbChwKSkubmV4dCxuPW5ldyBoOyEobD1kLmNhbGwoZikpLmRvbmU7bSsrKXMobixtLHk/aShmLGcsW2wudmFsdWUsbV0sITApOmwudmFsdWUpO3JldHVybiBuLmxlbmd0aD1tLG59fSw4NTgwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMjc4ODQpLGk9big3Njk3NiksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGEpe3ZhciBjLHM9cihlKSx1PW8ocy5sZW5ndGgpLGw9aShhLHUpO2lmKHQmJm4hPW4pe2Zvcig7dT5sOylpZigoYz1zW2wrK10pIT1jKXJldHVybiEwfWVsc2UgZm9yKDt1Pmw7bCsrKWlmKCh0fHxsIGluIHMpJiZzW2xdPT09bilyZXR1cm4gdHx8bHx8MDtyZXR1cm4hdCYmLTF9fTt0LmV4cG9ydHM9e2luY2x1ZGVzOmEoITApLGluZGV4T2Y6YSghMSl9fSwzMDAyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NjEzMCksbz1uKDI0OTgpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNzAwOSkscz1bXS5wdXNoLHU9ZnVuY3Rpb24odCl7dmFyIGU9MT09dCxuPTI9PXQsdT0zPT10LGw9ND09dCxmPTY9PXQsZD01PT10fHxmO3JldHVybiBmdW5jdGlvbihwLGgsdixnKXtmb3IodmFyIHksbSxiPWkocCkseD1vKGIpLHc9cihoLHYsMyksRT1hKHgubGVuZ3RoKSxDPTAsaj1nfHxjLGs9ZT9qKHAsRSk6bj9qKHAsMCk6dm9pZCAwO0U+QztDKyspaWYoKGR8fEMgaW4geCkmJihtPXcoeT14W0NdLEMsYiksdCkpaWYoZSlrW0NdPW07ZWxzZSBpZihtKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gQztjYXNlIDI6cy5jYWxsKGsseSl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOnV8fGw/bDprfX07dC5leHBvcnRzPXtmb3JFYWNoOnUoMCksbWFwOnUoMSksZmlsdGVyOnUoMiksc29tZTp1KDMpLGV2ZXJ5OnUoNCksZmluZDp1KDUpLGZpbmRJbmRleDp1KDYpfX0sNDkyNDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big0MzQxNiksaT1uKDI3ODg0KSxhPW4oMjI5MDkpLGM9TWF0aC5taW4scz1bXS5sYXN0SW5kZXhPZix1PSEhcyYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MCxsPWEoImxhc3RJbmRleE9mIik7dC5leHBvcnRzPXV8fGw/ZnVuY3Rpb24odCl7aWYodSlyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9bi0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihhPWMoYSxvKGFyZ3VtZW50c1sxXSkpKSxhPDAmJihhPW4rYSk7YT49MDthLS0paWYoYSBpbiBlJiZlW2FdPT09dClyZXR1cm4gYXx8MDtyZXR1cm4tMX06c30sNjE5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDc5MDcxKSxhPW8oInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk+PTUxfHwhcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbYV09ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9fSwxMjM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCksbz1uKDE5MjA5KSxpPW4oMjQ5OCksYT1uKDI3ODg0KSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyxzKXtyKG4pO3ZhciB1PW8oZSksbD1pKHUpLGY9YSh1Lmxlbmd0aCksZD10P2YtMTowLHA9dD8tMToxO2lmKGM8Milmb3IoOzspe2lmKGQgaW4gbCl7cz1sW2RdLGQrPXA7YnJlYWt9aWYoZCs9cCx0P2Q8MDpmPD1kKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7dD9kPj0wOmY+ZDtkKz1wKWQgaW4gbCYmKHM9bihzLGxbZF0sZCx1KSk7cmV0dXJuIHN9fTt0LmV4cG9ydHM9e2xlZnQ6YyghMSkscmlnaHQ6YyghMCl9fSw3MDA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNjE5OSksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBvKHQpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49dC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpP3IobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKTpuPXZvaWQgMCksbmV3KHZvaWQgMD09PW4/QXJyYXk6bikoMD09PWU/MDplKX19LDQ1NjY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDg3NTc5KSxpPW4oNzcwMSkoIlByb21pc2UiKSxhPVtdLnB1c2gsYz1mdW5jdGlvbih0KXt2YXIgZT0wPT10LG49MT09dCxjPTI9PXQscz0zPT10O3JldHVybiBmdW5jdGlvbih0LHUpe28odCk7dmFyIGw9cih0Lm5leHQpLGY9ZT9bXTp2b2lkIDA7cmV0dXJuIGV8fHIodSksbmV3IGkoKGZ1bmN0aW9uKHIsZCl7dmFyIHA9ZnVuY3Rpb24oKXt0cnl7aS5yZXNvbHZlKG8obC5jYWxsKHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKG8odCkuZG9uZSlyKGU/ZjohcyYmKGN8fHZvaWQgMCkpO2Vsc2V7dmFyIGw9dC52YWx1ZTtlPyhhLmNhbGwoZixsKSxwKCkpOmkucmVzb2x2ZSh1KGwpKS50aGVuKChmdW5jdGlvbih0KXtuP3AoKTpjP3Q/cCgpOnIoITEpOnQ/cihzfHxsKTpwKCl9KSxkKX19Y2F0Y2godCl7ZCh0KX19KSxkKX1jYXRjaCh0KXtkKHQpfX07cCgpfSkpfX07dC5leHBvcnRzPXt0b0FycmF5OmMoMCksZm9yRWFjaDpjKDEpLGV2ZXJ5OmMoMiksc29tZTpjKDMpLGZpbmQ6Yyg0KX19LDYzODQ1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM0NzQxKSxjPW4oNjQ5NjUpLHM9big3NjI5OCksdT1uKDY2OTcxKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1sKCJhc3luY0l0ZXJhdG9yIikscD1pLkFzeW5jSXRlcmF0b3IsaD1hLkFzeW5jSXRlcmF0b3JQcm90b3R5cGU7aWYoIWYpaWYoaClyPWg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcClyPXAucHJvdG90eXBlO2Vsc2UgaWYoYS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1J8fGkuVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SKXRyeXtvPWMoYyhjKEZ1bmN0aW9uKCJyZXR1cm4gYXN5bmMgZnVuY3Rpb24qKCl7fSgpIikoKSkpKSxjKG8pPT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byl9Y2F0Y2godCl7fXJ8fChyPXt9KSxzKHIsZCl8fHUocixkLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz1yfSw0NjEzMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZihyKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5jYWxsKGUpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwoZSxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiB0LmNhbGwoZSxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gdC5jYWxsKGUsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sMTIyNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixvKXt0cnl7cmV0dXJuIG8/ZShyKG4pWzBdLG5bMV0pOmUobil9Y2F0Y2goZSl7dmFyIGk9dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwodCkpLGV9fX0sNDc5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9MCxhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtvPSEwfX07YVtyXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT17fTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX19fSx0KGkpfWNhdGNoKHQpe31yZXR1cm4gbn19LDI0NTk0OmZ1bmN0aW9uKHQpe3ZhciBlPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sNTk1OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89bigyNDU5NCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKSxhPSJBcmd1bWVudHMiPT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXt2YXIgZSxuLHI7cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPU9iamVjdCh0KSxpKSk/bjphP28oZSk6Ik9iamVjdCI9PShyPW8oZSkpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsZWU/IkFyZ3VtZW50cyI6cn19LDk4MTc5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cih0aGlzKSxlPW8odC5hZGQpLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKyllLmNhbGwodCxhcmd1bWVudHNbbl0pO3JldHVybiB0fX0sMTQ2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9cih0aGlzKSxuPW8oZS5kZWxldGUpLGk9ITAsYT0wLGM9YXJndW1lbnRzLmxlbmd0aDthPGM7YSsrKXQ9bi5jYWxsKGUsYXJndW1lbnRzW2FdKSxpPWkmJnQ7cmV0dXJuISFpfX0sMTI5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oNDYxMzApLGk9big0MTMzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sYSxjLHM9YXJndW1lbnRzLmxlbmd0aCx1PXM+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiByKHRoaXMpLChlPXZvaWQgMCE9PXUpJiZyKHUpLG51bGw9PXQ/bmV3IHRoaXM6KG49W10sZT8oYT0wLGM9byh1LHM+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpLGkodCwoZnVuY3Rpb24odCl7bi5wdXNoKGModCxhKyspKX0pKSk6aSh0LG4ucHVzaCxuKSxuZXcgdGhpcyhuKSl9fSwyNTAyNjpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gbmV3IHRoaXMoZSl9fSw2NDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNzYyMCkuZixvPW4oNTA4NjgpLGk9bigxOTI2KSxhPW4oNDYxMzApLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oNDYwNjEpLGw9big2NzUzOCksZj1uKDYyNTU2KSxkPW4oOTYwMykuZmFzdEtleSxwPW4oODk4MjcpLGg9cC5zZXQsdj1wLmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBsPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGwsZSksaCh0LHt0eXBlOmUsaW5kZXg6byhudWxsKSxmaXJzdDp2b2lkIDAsbGFzdDp2b2lkIDAsc2l6ZTowfSksZnx8KHQuc2l6ZT0wKSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLHA9dihlKSxnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9cCh0KSxhPXkodCxlKTtyZXR1cm4gYT9hLnZhbHVlPW46KGkubGFzdD1hPXtpbmRleDpvPWQoZSwhMCksa2V5OmUsdmFsdWU6bixwcmV2aW91czpyPWkubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxpLmZpcnN0fHwoaS5maXJzdD1hKSxyJiYoci5uZXh0PWEpLGY/aS5zaXplKys6dC5zaXplKyssIkYiIT09byYmKGkuaW5kZXhbb109YSkpLHR9LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXAodCksbz1kKGUpO2lmKCJGIiE9PW8pcmV0dXJuIHIuaW5kZXhbb107Zm9yKG49ci5maXJzdDtuO249bi5uZXh0KWlmKG4ua2V5PT1lKXJldHVybiBufTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cCh0aGlzKSxlPXQuaW5kZXgsbj10LmZpcnN0O247KW4ucmVtb3ZlZD0hMCxuLnByZXZpb3VzJiYobi5wcmV2aW91cz1uLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgZVtuLmluZGV4XSxuPW4ubmV4dDt0LmZpcnN0PXQubGFzdD12b2lkIDAsZj90LnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKGUpLHI9eShlLHQpO2lmKHIpe3ZhciBvPXIubmV4dCxpPXIucHJldmlvdXM7ZGVsZXRlIG4uaW5kZXhbci5pbmRleF0sci5yZW1vdmVkPSEwLGkmJihpLm5leHQ9byksbyYmKG8ucHJldmlvdXM9aSksbi5maXJzdD09ciYmKG4uZmlyc3Q9byksbi5sYXN0PT1yJiYobi5sYXN0PWkpLGY/bi5zaXplLS06ZS5zaXplLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXAodGhpcykscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2UubmV4dDpuLmZpcnN0Oylmb3IocihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF5KHRoaXMsdCl9fSksaShsLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9eSh0aGlzLHQpO3JldHVybiBlJiZlLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyh0aGlzLDA9PT10PzA6dCxlKX19OnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcodGhpcyx0PTA9PT10PzA6dCx0KX19KSxmJiZyKGwucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykuc2l6ZX19KSxsfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUrIiBJdGVyYXRvciIsbz12KGUpLGk9dihyKTt1KHQsZSwoZnVuY3Rpb24odCxlKXtoKHRoaXMse3R5cGU6cix0YXJnZXQ6dCxzdGF0ZTpvKHQpLGtpbmQ6ZSxsYXN0OnZvaWQgMH0pfSksKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWkodGhpcyksZT10LmtpbmQsbj10Lmxhc3Q7biYmbi5yZW1vdmVkOyluPW4ucHJldmlvdXM7cmV0dXJuIHQudGFyZ2V0JiYodC5sYXN0PW49bj9uLm5leHQ6dC5zdGF0ZS5maXJzdCk/ImtleXMiPT1lP3t2YWx1ZTpuLmtleSxkb25lOiExfToidmFsdWVzIj09ZT97dmFsdWU6bi52YWx1ZSxkb25lOiExfTp7dmFsdWU6W24ua2V5LG4udmFsdWVdLGRvbmU6ITF9Oih0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksbChlKX19fSw3MTMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyNiksbz1uKDk2MDMpLmdldFdlYWtEYXRhLGk9big4NzU3OSksYT1uKDEwNTkyKSxjPW4oNTkzNzkpLHM9big0MTMzNCksdT1uKDMwMDI1KSxsPW4oNzYyOTgpLGY9big4OTgyNyksZD1mLnNldCxwPWYuZ2V0dGVyRm9yLGg9dS5maW5kLHY9dS5maW5kSW5kZXgsZz0wLHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IG0pfSxtPWZ1bmN0aW9uKCl7dGhpcy5lbnRyaWVzPVtdfSxiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodC5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KSl9O20ucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzLHQpO2lmKGUpcmV0dXJuIGVbMV19LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIWIodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIG49Yih0aGlzLHQpO24/blsxXT1lOnRoaXMuZW50cmllcy5wdXNoKFt0LGVdKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXYodGhpcy5lbnRyaWVzLChmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KSk7cmV0dXJufmUmJnRoaXMuZW50cmllcy5zcGxpY2UoZSwxKSwhIX5lfX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUsbix1KXt2YXIgZj10KChmdW5jdGlvbih0LHIpe2ModCxmLGUpLGQodCx7dHlwZTplLGlkOmcrKyxmcm96ZW46dm9pZCAwfSksbnVsbCE9ciYmcyhyLHRbdV0sdCxuKX0pKSxoPXAoZSksdj1mdW5jdGlvbih0LGUsbil7dmFyIHI9aCh0KSxhPW8oaShlKSwhMCk7cmV0dXJuITA9PT1hP3kocikuc2V0KGUsbik6YVtyLmlkXT1uLHR9O3JldHVybiByKGYucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmRlbGV0ZSh0KTpuJiZsKG4sZS5pZCkmJmRlbGV0ZSBuW2UuaWRdfSxoYXM6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmhhcyh0KTpuJiZsKG4sZS5pZCl9fSkscihmLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZihhKHQpKXt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmdldCh0KTpuP25bZS5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYodGhpcyx0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdih0aGlzLHQsITApfX0pLGZ9fX0sODE5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oOTYwMykscz1uKDQxMzM0KSx1PW4oNTkzNzkpLGw9bigxMDU5MiksZj1uKDMyMTg3KSxkPW4oNDc5NikscD1uKDUxMTI4KSxoPW4oMzAyNzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHY9LTEhPT10LmluZGV4T2YoIk1hcCIpLGc9LTEhPT10LmluZGV4T2YoIldlYWsiKSx5PXY/InNldCI6ImFkZCIsbT1vW3RdLGI9bSYmbS5wcm90b3R5cGUseD1tLHc9e30sRT1mdW5jdGlvbih0KXt2YXIgZT1iW3RdO2EoYix0LCJhZGQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQpLHRoaXN9OiJkZWxldGUiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gZyYmIWwodCk/dm9pZCAwOmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJoYXMiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQsbiksdGhpc30pfTtpZihpKHQsImZ1bmN0aW9uIiE9dHlwZW9mIG18fCEoZ3x8Yi5mb3JFYWNoJiYhZigoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PW4uZ2V0Q29uc3RydWN0b3IoZSx0LHYseSksYy5SRVFVSVJFRD0hMDtlbHNlIGlmKGkodCwhMCkpe3ZhciBDPW5ldyB4LGo9Q1t5XShnP3t9Oi0wLDEpIT1DLGs9ZigoZnVuY3Rpb24oKXtDLmhhcygxKX0pKSxTPWQoKGZ1bmN0aW9uKHQpe25ldyBtKHQpfSkpLE89IWcmJmYoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBtLGU9NTtlLS07KXRbeV0oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO1N8fCgoeD1lKChmdW5jdGlvbihlLG4pe3UoZSx4LHQpO3ZhciByPWgobmV3IG0sZSx4KTtyZXR1cm4gbnVsbCE9biYmcyhuLHJbeV0scix2KSxyfSkpKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPXgpLChrfHxPKSYmKEUoImRlbGV0ZSIpLEUoImhhcyIpLHYmJkUoImdldCIpKSwoT3x8aikmJkUoeSksZyYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9cmV0dXJuIHdbdF09eCxyKHtnbG9iYWw6ITAsZm9yY2VkOnghPW19LHcpLHAoeCx0KSxnfHxuLnNldFN0cm9uZyh4LHQsdikseH19LDc0Njg1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big1MDg2OCksYT1uKDEwNTkyKSxjPWZ1bmN0aW9uKCl7dGhpcy5vYmplY3Q9bnVsbCx0aGlzLnN5bWJvbD1udWxsLHRoaXMucHJpbWl0aXZlcz1udWxsLHRoaXMub2JqZWN0c0J5SW5kZXg9aShudWxsKX07Yy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbdF18fCh0aGlzW3RdPWUoKSl9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4/dGhpcy5vYmplY3RzQnlJbmRleFt0XXx8KHRoaXMub2JqZWN0c0J5SW5kZXhbdF09bmV3IG8pOnRoaXMucHJpbWl0aXZlc3x8KHRoaXMucHJpbWl0aXZlcz1uZXcgciksYT1pLmdldChlKTtyZXR1cm4gYXx8aS5zZXQoZSxhPW5ldyBjKSxhfTt2YXIgcz1uZXcgYzt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLG49cyxyPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pJiYobj1uLm5leHQodCxlLCEwKSk7aWYodGhpcz09PU9iamVjdCYmbj09PXMpdGhyb3cgVHlwZUVycm9yKCJDb21wb3NpdGUga2V5cyBtdXN0IGNvbnRhaW4gYSBub24tcHJpbWl0aXZlIGNvbXBvbmVudCIpO2Zvcih0PTA7dDxyO3QrKylhKGU9YXJndW1lbnRzW3RdKXx8KG49bi5uZXh0KHQsZSwhMSkpO3JldHVybiBufX0sOTk2MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigyNDQxNSksaT1uKDk3MjU3KSxhPW4oMzc2MjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1vKGUpLGM9YS5mLHM9aS5mLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGw9blt1XTtyKHQsbCl8fGModCxsLHMoZSxsKSl9fX0sOTM5MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5eyIvLi8iW3RdKGUpfWNhdGNoKG4pe3RyeXtyZXR1cm4gZVtyXT0hMSwiLy4vIlt0XShlKX1jYXRjaCh0KXt9fXJldHVybiExfX0sNzE2MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKX0sMjcwMDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU2MjM4KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDUwODY4KSxjPW4oNjY5NzEpLHM9bigxOTI2KSx1PW4oMjM3MjQpLGw9big4OTgyNyksZj1uKDc3MDEpKCJQcm9taXNlIiksZD1sLnNldCxwPWwuZ2V0LGg9dSgidG9TdHJpbmdUYWciKSx2PWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnJldHVybjtyZXR1cm4gdm9pZCAwPT09bj9mLnJlc29sdmUoe2RvbmU6ITAsdmFsdWU6dH0pOmkobi5jYWxsKGUsdCkpfSxnPWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O3JldHVybiB2b2lkIDA9PT1uP2YucmVqZWN0KHQpOm4uY2FsbChlLHQpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXt0Lm5leHQ9byh0Lml0ZXJhdG9yLm5leHQpLHQuZG9uZT0hMSxkKHRoaXMsdCl9O3JldHVybiBuLnByb3RvdHlwZT1zKGEoci5Bc3luY0l0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oZSl7dmFyIG49cCh0aGlzKTtpZihuLmRvbmUpcmV0dXJuIGYucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTt0cnl7cmV0dXJuIGYucmVzb2x2ZShpKHQuY2FsbChuLGUsZikpKX1jYXRjaCh0KXtyZXR1cm4gZi5yZWplY3QodCl9fSxyZXR1cm46dix0aHJvdzpnfSksZXx8YyhuLnByb3RvdHlwZSxoLCJHZW5lcmF0b3IiKSxufX0sMzEzNTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpLG89LyIvZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9U3RyaW5nKHIodCkpLGM9IjwiK2U7cmV0dXJuIiIhPT1uJiYoYys9IiAiK24rJz0iJytTdHJpbmcoaSkucmVwbGFjZShvLCImcXVvdDsiKSsnIicpLGMrIj4iK2ErIjwvIitlKyI+In19LDcxMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NDE3NikuSXRlcmF0b3JQcm90b3R5cGUsbz1uKDUwODY4KSxpPW4oMTQyMDkpLGE9big1MTEyOCksYz1uKDEyMzUpLHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1vKHIse25leHQ6aSgxLG4pfSksYSh0LHUsITEsITApLGNbdV09cyx0fX0sODgwNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPWwuc2V0LGQ9bC5nZXQscD11KCJ0b1N0cmluZ1RhZyIpLGg9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP3tkb25lOiEwLHZhbHVlOnR9Omkobi5jYWxsKGUsdCkpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O2lmKHZvaWQgMD09PW4pdGhyb3cgdDtyZXR1cm4gbi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGYodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkl0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oKXt2YXIgZT1kKHRoaXMpLG49ZS5kb25lP3ZvaWQgMDp0LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm57ZG9uZTplLmRvbmUsdmFsdWU6bn19LHJldHVybjpoLHRocm93OnZ9KSxlfHxjKG4ucHJvdG90eXBlLHAsIkdlbmVyYXRvciIpLG59fSw2Njk3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMTQyMDkpO3QuZXhwb3J0cz1yP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gby5mKHQsZSxpKDEsbikpfTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bix0fX0sMTQyMDk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sNTg4MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUzNDk4KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1yKGUpO2EgaW4gdD9vLmYodCxhLGkoMCxuKSk6dFthXT1ufX0sNzkxNjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMyMTg3KSxvPW4oMjY1NzMpLnN0YXJ0LGk9TWF0aC5hYnMsYT1EYXRlLnByb3RvdHlwZSxjPWEuZ2V0VGltZSxzPWEudG9JU09TdHJpbmc7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXIoKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSkpP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGMuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPXQuZ2V0VVRDRnVsbFllYXIoKSxuPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIHIrbyhpKGUpLHI/Njo0LDApKyItIitvKHQuZ2V0VVRDTW9udGgoKSsxLDIsMCkrIi0iK28odC5nZXRVVENEYXRlKCksMiwwKSsiVCIrbyh0LmdldFVUQ0hvdXJzKCksMiwwKSsiOiIrbyh0LmdldFVUQ01pbnV0ZXMoKSwyLDApKyI6IitvKHQuZ2V0VVRDU2Vjb25kcygpLDIsMCkrIi4iK28obiwzLDApKyJaIn06c30sNzY5NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oNTM0OTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9PXQmJiJudW1iZXIiIT09dCYmImRlZmF1bHQiIT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBoaW50Iik7cmV0dXJuIG8ocih0aGlzKSwibnVtYmVyIiE9PXQpfX0sNDYwNjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big2NDk2NSksYT1uKDcxODQyKSxjPW4oNTExMjgpLHM9big2Njk3MSksdT1uKDkyOTEzKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1uKDEyMzUpLHA9big2NDE3NiksaD1wLkl0ZXJhdG9yUHJvdG90eXBlLHY9cC5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLGc9bCgiaXRlcmF0b3IiKSx5PSJrZXlzIixtPSJ2YWx1ZXMiLGI9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwscCx3LEUpe28obixlLGwpO3ZhciBDLGosayxTPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZUKXJldHVybiBUO2lmKCF2JiZ0IGluIEEpcmV0dXJuIEFbdF07c3dpdGNoKHQpe2Nhc2UgeTpjYXNlIG06Y2FzZSBiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxPPWUrIiBJdGVyYXRvciIsST0hMSxBPXQucHJvdG90eXBlLE09QVtnXXx8QVsiQEBpdGVyYXRvciJdfHxwJiZBW3BdLFQ9IXYmJk18fFMocCksXz0iQXJyYXkiPT1lJiZBLmVudHJpZXN8fE07aWYoXyYmKEM9aShfLmNhbGwobmV3IHQpKSxoIT09T2JqZWN0LnByb3RvdHlwZSYmQy5uZXh0JiYoZnx8aShDKT09PWh8fChhP2EoQyxoKToiZnVuY3Rpb24iIT10eXBlb2YgQ1tnXSYmcyhDLGcseCkpLGMoQyxPLCEwLCEwKSxmJiYoZFtPXT14KSkpLHA9PW0mJk0mJk0ubmFtZSE9PW0mJihJPSEwLFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTS5jYWxsKHRoaXMpfSksZiYmIUV8fEFbZ109PT1UfHxzKEEsZyxUKSxkW2VdPVQscClpZihqPXt2YWx1ZXM6UyhtKSxrZXlzOnc/VDpTKHkpLGVudHJpZXM6UyhiKX0sRSlmb3IoayBpbiBqKSh2fHxJfHwhKGsgaW4gQSkpJiZ1KEEsayxqW2tdKTtlbHNlIHIoe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDp2fHxJfSxqKTtyZXR1cm4gan19LDkyMjc1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oNzYyOTgpLGk9big3MzkxNiksYT1uKDM3NjIwKS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yLlN5bWJvbHx8KHIuU3ltYm9sPXt9KTtvKGUsdCl8fGEoZSx0LHt2YWx1ZTppLmYodCl9KX19LDYyNTU2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDE5MjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigxMDU5MiksaT1yLmRvY3VtZW50LGE9byhpKSYmbyhpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYT9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSw0NzA5NDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9fSw1OTEzNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sMTQwNDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big5NzI1NykuZixpPW4oNjY5NzEpLGE9big5MjkxMyksYz1uKDk4MjY5KSxzPW4oOTk2MjUpLHU9big2NDUwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbCxmLGQscCxoPXQudGFyZ2V0LHY9dC5nbG9iYWwsZz10LnN0YXQ7aWYobj12P3I6Zz9yW2hdfHxjKGgse30pOihyW2hdfHx7fSkucHJvdG90eXBlKWZvcihsIGluIGUpe2lmKGQ9ZVtsXSxmPXQubm9UYXJnZXRHZXQ/KHA9byhuLGwpKSYmcC52YWx1ZTpuW2xdLCF1KHY/bDpoKyhnPyIuIjoiIyIpK2wsdC5mb3JjZWQpJiZ2b2lkIDAhPT1mKXtpZih0eXBlb2YgZD09dHlwZW9mIGYpY29udGludWU7cyhkLGYpfSh0LnNoYW18fGYmJmYuc2hhbSkmJmkoZCwic2hhbSIsITApLGEobixsLGQsdCl9fX0sMzIxODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSwzNTg2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjY5NzEpLG89big5MjkxMyksaT1uKDMyMTg3KSxhPW4oMjM3MjQpLGM9bigzODU5OCkscz1hKCJzcGVjaWVzIiksdT0haSgoZnVuY3Rpb24oKXt2YXIgdD0vLi87cmV0dXJuIHQuZXhlYz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0Lmdyb3Vwcz17YToiNyJ9LHR9LCI3IiE9PSIiLnJlcGxhY2UodCwiJDxhPiIpfSkpLGw9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9Lyg/OikvLGU9dC5leGVjO3QuZXhlYz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49ImFiIi5zcGxpdCh0KTtyZXR1cm4gMiE9PW4ubGVuZ3RofHwiYSIhPT1uWzBdfHwiYiIhPT1uWzFdfSkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixmKXt2YXIgZD1hKHQpLHA9IWkoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGVbZF09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbdF0oZSl9KSksaD1wJiYhaSgoZnVuY3Rpb24oKXt2YXIgZT0hMSxuPS9hLztyZXR1cm4ic3BsaXQiPT09dCYmKChuPXt9KS5jb25zdHJ1Y3Rvcj17fSxuLmNvbnN0cnVjdG9yW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG4uZmxhZ3M9IiIsbltkXT0vLi9bZF0pLG4uZXhlYz1mdW5jdGlvbigpe3JldHVybiBlPSEwLG51bGx9LG5bZF0oIiIpLCFlfSkpO2lmKCFwfHwhaHx8InJlcGxhY2UiPT09dCYmIXV8fCJzcGxpdCI9PT10JiYhbCl7dmFyIHY9Ly4vW2RdLGc9bihkLCIiW3RdLChmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiBlLmV4ZWM9PT1jP3AmJiFvP3tkb25lOiEwLHZhbHVlOnYuY2FsbChlLG4scil9Ontkb25lOiEwLHZhbHVlOnQuY2FsbChuLGUscil9Ontkb25lOiExfX0pKSx5PWdbMF0sbT1nWzFdO28oU3RyaW5nLnByb3RvdHlwZSx0LHkpLG8oUmVnRXhwLnByb3RvdHlwZSxkLDI9PWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbS5jYWxsKHQsdGhpcyxlKX06ZnVuY3Rpb24odCl7cmV0dXJuIG0uY2FsbCh0LHRoaXMpfSksZiYmcihSZWdFeHAucHJvdG90eXBlW2RdLCJzaGFtIiwhMCl9fX0sODA2NjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYxOTkpLG89bigyNzg4NCksaT1uKDQ2MTMwKSxhPWZ1bmN0aW9uKHQsZSxuLGMscyx1LGwsZil7Zm9yKHZhciBkLHA9cyxoPTAsdj0hIWwmJmkobCxmLDMpO2g8Yzspe2lmKGggaW4gbil7aWYoZD12P3YobltoXSxoLGUpOm5baF0sdT4wJiZyKGQpKXA9YSh0LGUsZCxvKGQubGVuZ3RoKSxwLHUtMSktMTtlbHNle2lmKHA+PTkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgVHlwZUVycm9yKCJFeGNlZWQgdGhlIGFjY2VwdGFibGUgYXJyYXkgbGVuZ3RoIik7dFtwXT1kfXArK31oKyt9cmV0dXJuIHB9O3QuZXhwb3J0cz1hfSw0NzgxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjU2NzIpLG89big4OTU1OCksaT1uKDMyMTg3KTt0LmV4cG9ydHM9cnx8IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5yYW5kb20oKTtfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCx0LChmdW5jdGlvbigpe30pKSxkZWxldGUgb1t0XX0pKX0sNTIxMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXt2YXIgZT0iIlt0XSgnIicpO3JldHVybiBlIT09ZS50b0xvd2VyQ2FzZSgpfHxlLnNwbGl0KCciJykubGVuZ3RoPjN9KSl9fSw4NDc1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDUwMDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKCl7cmV0dXJuISFvW3RdKCl8fCLigIvCheGgjiIhPSLigIvCheGgjiJbdF0oKXx8b1t0XS5uYW1lIT09dH0pKX19LDc0NTIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LDczNzM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDEwNTkyKSxpPVtdLnNsaWNlLGE9e30sYz1mdW5jdGlvbih0LGUsbil7aWYoIShlIGluIGEpKXtmb3IodmFyIHI9W10sbz0wO288ZTtvKyspcltvXT0iYVsiK28rIl0iO2FbZV09RnVuY3Rpb24oIkMsYSIsInJldHVybiBuZXcgQygiK3Iuam9pbigiLCIpKyIpIil9cmV0dXJuIGFbZV0odCxuKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyksbj1pLmNhbGwoYXJndW1lbnRzLDEpLGE9ZnVuY3Rpb24oKXt2YXIgcj1uLmNvbmNhdChpLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhP2MoZSxyLmxlbmd0aCxyKTplLmFwcGx5KHQscil9O3JldHVybiBvKGUucHJvdG90eXBlKSYmKGEucHJvdG90eXBlPWUucHJvdG90eXBlKSxhfX0sNjY5MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzM4OTApLG89bigyMzcyNCkoImFzeW5jSXRlcmF0b3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFtvXTtyZXR1cm4gdm9pZCAwPT09ZT9yKHQpOmV9fSw3NzAxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oODk1NTgpLGk9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDB9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aShyW3RdKXx8aShvW3RdKTpyW3RdJiZyW3RdW2VdfHxvW3RdJiZvW3RdW2VdfX0sNzM4OTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTk1OTEpLG89bigxMjM1KSxpPW4oMjM3MjQpKCJpdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXJldHVybiB0W2ldfHx0WyJAQGl0ZXJhdG9yIl18fG9bcih0KV19fSwzMTA3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGl0ZXJhYmxlIik7cmV0dXJuIHIoZS5jYWxsKHQpKX19LDQxOTg5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzEwNzQpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7cmV0dXJuIE1hcC5wcm90b3R5cGUuZW50cmllcy5jYWxsKHQpfX0sNDE0NzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gU2V0LnByb3RvdHlwZS52YWx1ZXMuY2FsbCh0KX19LDg5NTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9cigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxyKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHIoIm9iamVjdCI9PXR5cGVvZiBuLmcmJm4uZyl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDc2Mjk4OmZ1bmN0aW9uKHQpe3ZhciBlPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuKX19LDIzMDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sODM2MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29uc29sZTtuJiZuLmVycm9yJiYoMT09PWFyZ3VtZW50cy5sZW5ndGg/bi5lcnJvcih0KTpuLmVycm9yKHQsZSkpfX0sNTE1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSk7dC5leHBvcnRzPXIoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDYyNzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigxOTIzKTt0LmV4cG9ydHM9IXImJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoaSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSw5MDcyNTpmdW5jdGlvbih0KXt2YXIgZT0xLzAsbj1NYXRoLmFicyxyPU1hdGgucG93LG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MTjI7dC5leHBvcnRzPXtwYWNrOmZ1bmN0aW9uKHQsYyxzKXt2YXIgdSxsLGYsZD1uZXcgQXJyYXkocykscD04KnMtYy0xLGg9KDE8PHApLTEsdj1oPj4xLGc9MjM9PT1jP3IoMiwtMjQpLXIoMiwtNzcpOjAseT10PDB8fDA9PT10JiYxL3Q8MD8xOjAsbT0wO2ZvcigodD1uKHQpKSE9dHx8dD09PWU/KGw9dCE9dD8xOjAsdT1oKToodT1vKGkodCkvYSksdCooZj1yKDIsLXUpKTwxJiYodS0tLGYqPTIpLCh0Kz11K3Y+PTE/Zy9mOmcqcigyLDEtdikpKmY+PTImJih1KyssZi89MiksdSt2Pj1oPyhsPTAsdT1oKTp1K3Y+PTE/KGw9KHQqZi0xKSpyKDIsYyksdSs9dik6KGw9dCpyKDIsdi0xKSpyKDIsYyksdT0wKSk7Yz49ODtkW20rK109MjU1JmwsbC89MjU2LGMtPTgpO2Zvcih1PXU8PGN8bCxwKz1jO3A+MDtkW20rK109MjU1JnUsdS89MjU2LHAtPTgpO3JldHVybiBkWy0tbV18PTEyOCp5LGR9LHVucGFjazpmdW5jdGlvbih0LG4pe3ZhciBvLGk9dC5sZW5ndGgsYT04Kmktbi0xLGM9KDE8PGEpLTEscz1jPj4xLHU9YS03LGw9aS0xLGY9dFtsLS1dLGQ9MTI3JmY7Zm9yKGY+Pj03O3U+MDtkPTI1NipkK3RbbF0sbC0tLHUtPTgpO2ZvcihvPWQmKDE8PC11KS0xLGQ+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbbF0sbC0tLHUtPTgpO2lmKDA9PT1kKWQ9MS1zO2Vsc2V7aWYoZD09PWMpcmV0dXJuIG8/TmFOOmY/LTEvMDplO28rPXIoMixuKSxkLT1zfXJldHVybihmPy0xOjEpKm8qcigyLGQtbil9fX0sMjQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDI0NTk0KSxpPSIiLnNwbGl0O3QuZXhwb3J0cz1yKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09byh0KT9pLmNhbGwodCwiIik6T2JqZWN0KHQpfTpPYmplY3R9LDMwMjcyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNzE4NDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYTtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mKGk9ZS5jb25zdHJ1Y3RvcikmJmkhPT1uJiZyKGE9aS5wcm90b3R5cGUpJiZhIT09bi5wcm90b3R5cGUmJm8odCxhKSx0fX0sNzY3NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQ3NDEpLG89RnVuY3Rpb24udG9TdHJpbmc7ImZ1bmN0aW9uIiE9dHlwZW9mIHIuaW5zcGVjdFNvdXJjZSYmKHIuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKHQpfSksdC5leHBvcnRzPXIuaW5zcGVjdFNvdXJjZX0sOTYwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzA3MCksbz1uKDEwNTkyKSxpPW4oNzYyOTgpLGE9bigzNzYyMCkuZixjPW4oNjcyOSkscz1uKDc0NTIwKSx1PWMoIm1ldGEiKSxsPTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxkPWZ1bmN0aW9uKHQpe2EodCx1LHt2YWx1ZTp7b2JqZWN0SUQ6Ik8iKyArK2wsd2Vha0RhdGE6e319fSl9LHA9dC5leHBvcnRzPXtSRVFVSVJFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7ZCh0KX1yZXR1cm4gdFt1XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighaSh0LHUpKXtpZighZih0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtkKHQpfXJldHVybiB0W3VdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyYmcC5SRVFVSVJFRCYmZih0KSYmIWkodCx1KSYmZCh0KSx0fX07clt1XT0hMH0sODk4Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oMTk1OTEpLGM9big4OTU1OCkscz1uKDEwNTkyKSx1PW4oNjY5NzEpLGw9big3NjI5OCksZj1uKDgzMTk3KSxkPW4oMjMwNzApLHA9Yy5XZWFrTWFwO2lmKGEpe3ZhciBoPW5ldyBwLHY9aC5nZXQsZz1oLmhhcyx5PWguc2V0O3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5jYWxsKGgsdCxlKSxlfSxvPWZ1bmN0aW9uKHQpe3JldHVybiB2LmNhbGwoaCx0KXx8e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChoLHQpfX1lbHNle3ZhciBtPWYoInN0YXRlIik7ZFttXT0hMCxyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodCxtLGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKT90W21dOnt9fSxpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbSl9fXQuZXhwb3J0cz17c2V0OnIsZ2V0Om8saGFzOmksZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9vKHQpOnIodCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG47aWYoIXMoZSl8fChuPW8oZSkpLnR5cGUhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCIpO3JldHVybiBufX19fSw0NDk4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDEyMzUpLGk9cigiaXRlcmF0b3IiKSxhPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihvLkFycmF5PT09dHx8YVtpXT09PXQpfX0sNjE5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PXIodCl9fSw2NDUwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz0vI3xcLnByb3RvdHlwZVwuLyxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49Y1thKHQpXTtyZXR1cm4gbj09dXx8biE9cyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3IoZSk6ISFlKX0sYT1pLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpLnJlcGxhY2UobywiLiIpLnRvTG93ZXJDYXNlKCl9LGM9aS5kYXRhPXt9LHM9aS5OQVRJVkU9Ik4iLHU9aS5QT0xZRklMTD0iUCI7dC5leHBvcnRzPWl9LDM4MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFyKHQpJiZpc0Zpbml0ZSh0KSYmbyh0KT09PXR9fSwyMTIzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChyKX0sMTA1OTI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDoiZnVuY3Rpb24iPT10eXBlb2YgdH19LDY1NjcyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz0hMX0sNDMyMjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89bigyNDU5NCksaT1uKDIzNzI0KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHIodCkmJih2b2lkIDAhPT0oZT10W2ldKT8hIWU6IlJlZ0V4cCI9PW8odCkpfX0sNDEzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big0NDk4NCksaT1uKDI3ODg0KSxhPW4oNDYxMzApLGM9big3Mzg5MCkscz1uKDEyMjc4KSx1PWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wcGVkPXQsdGhpcy5yZXN1bHQ9ZX07KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixsLGYpe3ZhciBkLHAsaCx2LGcseSxtLGI9YShlLG4sbD8yOjEpO2lmKGYpZD10O2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKHA9Yyh0KSkpdGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGl0ZXJhYmxlIik7aWYobyhwKSl7Zm9yKGg9MCx2PWkodC5sZW5ndGgpO3Y+aDtoKyspaWYoKGc9bD9iKHIobT10W2hdKVswXSxtWzFdKTpiKHRbaF0pKSYmZyBpbnN0YW5jZW9mIHUpcmV0dXJuIGc7cmV0dXJuIG5ldyB1KCExKX1kPXAuY2FsbCh0KX1mb3IoeT1kLm5leHQ7IShtPXkuY2FsbChkKSkuZG9uZTspaWYoIm9iamVjdCI9PXR5cGVvZihnPXMoZCxiLG0udmFsdWUsbCkpJiZnJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfSkuc3RvcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoITAsdCl9fSw2NDE3NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhPW4oNjQ5NjUpLGM9big2Njk3MSkscz1uKDc2Mjk4KSx1PW4oMjM3MjQpLGw9big2NTY3MiksZj11KCJpdGVyYXRvciIpLGQ9ITE7W10ua2V5cyYmKCJuZXh0ImluKGk9W10ua2V5cygpKT8obz1hKGEoaSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihyPW8pOmQ9ITApLG51bGw9PXImJihyPXt9KSxsfHxzKHIsZil8fGMocixmLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6cixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmR9fSwxMjM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sNDc5Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPXIodGhpcyksaT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJBdCBsZWFzdCBvbmUgY2FsbGJhY2sgcmVxdWlyZWQiKTtyZXR1cm4gby5oYXModCk/KG49by5nZXQodCksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihuPWUobiksby5zZXQodCxuKSkpOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYobj1pKCksby5zZXQodCxuKSksbn19LDcyOTcwOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZXhwbTEsbj1NYXRoLmV4cDt0LmV4cG9ydHM9IWV8fGUoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZSgxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWUoLTJlLTE3KT9mdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6dD4tMWUtNiYmdDwxZS02P3QrdCp0LzI6bih0KS0xfTplfSw1MzI1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzODc4Nyksbz1NYXRoLmFicyxpPU1hdGgucG93LGE9aSgyLC01MiksYz1pKDIsLTIzKSxzPWkoMiwxMjcpKigyLWMpLHU9aSgyLC0xMjYpO3QuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24odCl7dmFyIGUsbixpPW8odCksbD1yKHQpO3JldHVybiBpPHU/bCooaS91L2MrMS9hLTEvYSkqdSpjOihuPShlPSgxK2MvYSkqaSktKGUtaSkpPnN8fG4hPW4/bCooMS8wKTpsKm59fSwyMTkzMjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmxvZzt0LmV4cG9ydHM9TWF0aC5sb2cxcHx8ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPi0xZS04JiZ0PDFlLTg/dC10KnQvMjplKDErdCl9fSw3NzQyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1NYXRoLnNjYWxlfHxmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8dCE9dHx8ZSE9ZXx8biE9bnx8ciE9cnx8byE9bz9OYU46dD09PTEvMHx8dD09PS0xLzA/dDoodC1lKSooby1yKS8obi1lKStyfX0sMzg3ODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sNjU1NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhLGMscyx1LGwsZj1uKDg5NTU4KSxkPW4oOTcyNTcpLmYscD1uKDI0NTk0KSxoPW4oMjE3NDQpLnNldCx2PW4oMjEyMzEpLGc9Zi5NdXRhdGlvbk9ic2VydmVyfHxmLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIseT1mLnByb2Nlc3MsbT1mLlByb21pc2UsYj0icHJvY2VzcyI9PXAoeSkseD1kKGYsInF1ZXVlTWljcm90YXNrIiksdz14JiZ4LnZhbHVlO3d8fChyPWZ1bmN0aW9uKCl7dmFyIHQsZTtmb3IoYiYmKHQ9eS5kb21haW4pJiZ0LmV4aXQoKTtvOyl7ZT1vLmZuLG89by5uZXh0O3RyeXtlKCl9Y2F0Y2godCl7dGhyb3cgbz9hKCk6aT12b2lkIDAsdH19aT12b2lkIDAsdCYmdC5lbnRlcigpfSxiP2E9ZnVuY3Rpb24oKXt5Lm5leHRUaWNrKHIpfTpnJiYhdj8oYz0hMCxzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgZyhyKS5vYnNlcnZlKHMse2NoYXJhY3RlckRhdGE6ITB9KSxhPWZ1bmN0aW9uKCl7cy5kYXRhPWM9IWN9KTptJiZtLnJlc29sdmU/KHU9bS5yZXNvbHZlKHZvaWQgMCksbD11LnRoZW4sYT1mdW5jdGlvbigpe2wuY2FsbCh1LHIpfSk6YT1mdW5jdGlvbigpe2guY2FsbChmLHIpfSksdC5leHBvcnRzPXd8fGZ1bmN0aW9uKHQpe3ZhciBlPXtmbjp0LG5leHQ6dm9pZCAwfTtpJiYoaS5uZXh0PWUpLG98fChvPWUsYSgpKSxpPWV9fSwzOTQ1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXIuUHJvbWlzZX0sOTAxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIXIoKGZ1bmN0aW9uKCl7cmV0dXJuIVN0cmluZyhTeW1ib2woKSl9KSl9LDU3NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjM3MjQpLGk9big2NTY3MiksYT1vKCJpdGVyYXRvciIpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXt2YXIgdD1uZXcgVVJMKCJiP2E9MSZiPTImYz0zIiwiaHR0cDovL2EiKSxlPXQuc2VhcmNoUGFyYW1zLG49IiI7cmV0dXJuIHQucGF0aG5hbWU9ImMlMjBkIixlLmZvckVhY2goKGZ1bmN0aW9uKHQscil7ZS5kZWxldGUoImIiKSxuKz1yK3R9KSksaSYmIXQudG9KU09OfHwhZS5zb3J0fHwiaHR0cDovL2EvYyUyMGQ/YT0xJmM9MyIhPT10LmhyZWZ8fCIzIiE9PWUuZ2V0KCJjIil8fCJhPTEiIT09U3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoIj9hPTEiKSl8fCFlW2FdfHwiYSIhPT1uZXcgVVJMKCJodHRwczovL2FAYiIpLnVzZXJuYW1lfHwiYiIhPT1uZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoImE9YiIpKS5nZXQoImEiKXx8InhuLS1lMWF5YmMiIT09bmV3IFVSTCgiaHR0cDovL9GC0LXRgdGCIikuaG9zdHx8IiMlRDAlQjEiIT09bmV3IFVSTCgiaHR0cDovL2Ej0LEiKS5oYXNofHwiYTFjMyIhPT1ufHwieCIhPT1uZXcgVVJMKCJodHRwOi8veCIsdm9pZCAwKS5ob3N0fSkpfSwxOTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDc2NzczKSxpPXIuV2Vha01hcDt0LmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIGkmJi9uYXRpdmUgY29kZS8udGVzdChvKGkpKX0sODMwODM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPWZ1bmN0aW9uKHQpe3ZhciBlLG47dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxuPXJ9KSksdGhpcy5yZXNvbHZlPXIoZSksdGhpcy5yZWplY3Q9cihuKX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0sOTkzNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMyMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihyKHQpKXRocm93IFR5cGVFcnJvcigiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9fSw4OTU0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCkuaXNGaW5pdGU7dC5leHBvcnRzPU51bWJlci5pc0Zpbml0ZXx8ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZyKHQpfX0sNzg2ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigyNTUwNyksYT1uKDU2OTkxKSxjPW4oNDE2MjgpLHM9bigxOTIwOSksdT1uKDI0OTgpLGw9T2JqZWN0LmFzc2lnbixmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmV4cG9ydHM9IWx8fG8oKGZ1bmN0aW9uKCl7aWYociYmMSE9PWwoe2I6MX0sbChmKHt9LCJhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtmKHRoaXMsImIiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIHQ9e30sZT17fSxuPVN5bWJvbCgpLG89ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gdFtuXT03LG8uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09dH0pKSw3IT1sKHt9LHQpW25dfHxpKGwoe30sZSkpLmpvaW4oIiIpIT1vfSkpP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXModCksbz1hcmd1bWVudHMubGVuZ3RoLGw9MSxmPWEuZixkPWMuZjtvPmw7KWZvcih2YXIgcCxoPXUoYXJndW1lbnRzW2wrK10pLHY9Zj9pKGgpLmNvbmNhdChmKGgpKTppKGgpLGc9di5sZW5ndGgseT0wO2c+eTspcD12W3krK10sciYmIWQuY2FsbChoLHApfHwobltwXT1oW3BdKTtyZXR1cm4gbn06bH0sNTA4Njg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQwMSksaT1uKDU5MTM1KSxhPW4oMjMwNzApLGM9big1MTU3MSkscz1uKDE5MjMpLHU9big4MzE5NykoIklFX1BST1RPIiksbD1mdW5jdGlvbigpe30sZj1mdW5jdGlvbigpe3ZhciB0LGU9cygiaWZyYW1lIiksbj1pLmxlbmd0aDtmb3IoZS5zdHlsZS5kaXNwbGF5PSJub25lIixjLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZygiamF2YXNjcmlwdDoiKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLHQuY2xvc2UoKSxmPXQuRjtuLS07KWRlbGV0ZSBmLnByb3RvdHlwZVtpW25dXTtyZXR1cm4gZigpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PXQ/KGwucHJvdG90eXBlPXIodCksbj1uZXcgbCxsLnByb3RvdHlwZT1udWxsLG5bdV09dCk6bj1mKCksdm9pZCAwPT09ZT9uOm8obixlKX0sYVt1XT0hMH0sODY0MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDg3NTc5KSxhPW4oMjU1MDcpO3QuZXhwb3J0cz1yP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTtmb3IodmFyIG4scj1hKGUpLGM9ci5sZW5ndGgscz0wO2M+czspby5mKHQsbj1yW3MrK10sZVtuXSk7cmV0dXJuIHR9fSwzNzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDYyNzk5KSxpPW4oODc1NzkpLGE9big1MzQ5OCksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXI/YzpmdW5jdGlvbih0LGUsbil7aWYoaSh0KSxlPWEoZSwhMCksaShuKSxvKXRyeXtyZXR1cm4gYyh0LGUsbil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gbiYmKHRbZV09bi52YWx1ZSksdH19LDk3MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNDE2MjgpLGk9bigxNDIwOSksYT1uKDk1NzMpLGM9big1MzQ5OCkscz1uKDc2Mjk4KSx1PW4oNjI3OTkpLGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtlLmY9cj9sOmZ1bmN0aW9uKHQsZSl7aWYodD1hKHQpLGU9YyhlLCEwKSx1KXRyeXtyZXR1cm4gbCh0LGUpfWNhdGNoKHQpe31pZihzKHQsZSkpcmV0dXJuIGkoIW8uZi5jYWxsKHQsZSksdFtlXSl9fSwyNjkzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMTMzMzQpLmYsaT17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1pLmNhbGwodCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBvKHQpfWNhdGNoKHQpe3JldHVybiBhLnNsaWNlKCl9fSh0KTpvKHIodCkpfX0sMTMzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDU2OTkxOmZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDY0OTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oMTkyMDkpLGk9big4MzE5NyksYT1uKDcxNjA4KSxjPWkoIklFX1BST1RPIikscz1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1hP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gdD1vKHQpLHIodCxjKT90W2NdOiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3M6bnVsbH19LDg2NDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTgyNyksbz1uKDcxMjAxKSxpPW4oNzYyOTgpLGE9bigyNTUwNyksYz1uKDE5MjA5KSxzPSJPYmplY3QgSXRlcmF0b3IiLHU9ci5zZXQsbD1yLmdldHRlckZvcihzKTt0LmV4cG9ydHM9bygoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHQpO3UodGhpcyx7dHlwZTpzLG1vZGU6ZSxvYmplY3Q6bixrZXlzOmEobiksaW5kZXg6MH0pfSksIk9iamVjdCIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWwodGhpcyksZT10LmtleXM7Oyl7aWYobnVsbD09PWV8fHQuaW5kZXg+PWUubGVuZ3RoKXJldHVybiB0Lm9iamVjdD10LmtleXM9bnVsbCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBuPWVbdC5pbmRleCsrXSxyPXQub2JqZWN0O2lmKGkocixuKSl7c3dpdGNoKHQubW9kZSl7Y2FzZSJrZXlzIjpyZXR1cm57dmFsdWU6bixkb25lOiExfTtjYXNlInZhbHVlcyI6cmV0dXJue3ZhbHVlOnJbbl0sZG9uZTohMX19cmV0dXJue3ZhbHVlOltuLHJbbl1dLGRvbmU6ITF9fX19KSl9LDQxNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89big5NTczKSxpPW4oODU4MDMpLmluZGV4T2YsYT1uKDIzMDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixjPW8odCkscz0wLHU9W107Zm9yKG4gaW4gYykhcihhLG4pJiZyKGMsbikmJnUucHVzaChuKTtmb3IoO2UubGVuZ3RoPnM7KXIoYyxuPWVbcysrXSkmJih+aSh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sMjU1MDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSw0MTYyODpmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1yJiYhbi5jYWxsKHsxOjJ9LDEpO2UuZj1vP2Z1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06bn0sNzE4NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big3OTg2MSk7dC5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciB0LGU9ITEsbj17fTt0cnl7KHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwobixbXSksZT1uIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2godCl7fXJldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiByKG4pLG8oaSksZT90LmNhbGwobixpKTpuLl9fcHJvdG9fXz1pLG59fSgpOnZvaWQgMCl9LDM1Njc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigyNTUwNyksaT1uKDk1NzMpLGE9big0MTYyOCkuZixjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG4sYz1pKGUpLHM9byhjKSx1PXMubGVuZ3RoLGw9MCxmPVtdO3U+bDspbj1zW2wrK10sciYmIWEuY2FsbChjLG4pfHxmLnB1c2godD9bbixjW25dXTpjW25dKTtyZXR1cm4gZn19O3QuZXhwb3J0cz17ZW50cmllczpjKCEwKSx2YWx1ZXM6YyghMSl9fSwxOTc1ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTA2MTMpLG89big1OTU5MSk7dC5leHBvcnRzPXI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK28odGhpcykrIl0ifX0sMjQ0MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSksbz1uKDEzMzM0KSxpPW4oNTY5OTEpLGE9big4NzU3OSk7dC5leHBvcnRzPXIoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPW8uZihhKHQpKSxuPWkuZjtyZXR1cm4gbj9lLmNvbmNhdChuKHQpKTplfX0sMjQ0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big4MjM1MCkudHJpbSxpPW4oNTAwNTUpLGE9ci5wYXJzZUZsb2F0LGM9MS9hKGkrIi0wIikhPS0xLzA7dC5leHBvcnRzPWM/ZnVuY3Rpb24odCl7dmFyIGU9byhTdHJpbmcodCkpLG49YShlKTtyZXR1cm4gMD09PW4mJiItIj09ZS5jaGFyQXQoMCk/LTA6bn06YX0sNzg0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlSW50LGM9L15bKy1dPzBbWHhdLyxzPTghPT1hKGkrIjA4Iil8fDIyIT09YShpKyIweDE2Iik7dC5leHBvcnRzPXM/ZnVuY3Rpb24odCxlKXt2YXIgbj1vKFN0cmluZyh0KSk7cmV0dXJuIGEobixlPj4+MHx8KGMudGVzdChuKT8xNjoxMCkpfTphfSw1NjIzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDMxMTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaCh0KXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6dH19fX0sNjMxMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89bigxMDU5MiksaT1uKDgzMDgzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpLG8oZSkmJmUuY29uc3RydWN0b3I9PT10KXJldHVybiBlO3ZhciBuPWkuZih0KTtyZXR1cm4oMCxuLnJlc29sdmUpKGUpLG4ucHJvbWlzZX19LDY5OTI3OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT0yMTQ3NDgzNjQ3LG49L1teXDAtXHUwMDdFXS8scj0vWy5cdTMwMDJcdUZGMEVcdUZGNjFdL2csbz0iT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLGk9TWF0aC5mbG9vcixhPVN0cmluZy5mcm9tQ2hhckNvZGUsYz1mdW5jdGlvbih0KXtyZXR1cm4gdCsyMis3NSoodDwyNil9LHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTA7Zm9yKHQ9bj9pKHQvNzAwKTp0Pj4xLHQrPWkodC9lKTt0PjQ1NTtyKz0zNil0PWkodC8zNSk7cmV0dXJuIGkociszNip0Lyh0KzM4KSl9LHU9ZnVuY3Rpb24odCl7dmFyIG49W107dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0wLHI9dC5sZW5ndGg7bjxyOyl7dmFyIG89dC5jaGFyQ29kZUF0KG4rKyk7aWYobz49NTUyOTYmJm88PTU2MzE5JiZuPHIpe3ZhciBpPXQuY2hhckNvZGVBdChuKyspOzU2MzIwPT0oNjQ1MTImaSk/ZS5wdXNoKCgoMTAyMyZvKTw8MTApKygxMDIzJmkpKzY1NTM2KTooZS5wdXNoKG8pLG4tLSl9ZWxzZSBlLnB1c2gobyl9cmV0dXJuIGV9KHQpO3ZhciByLHUsbD10Lmxlbmd0aCxmPTEyOCxkPTAscD03Mjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPDEyOCYmbi5wdXNoKGEodSkpO3ZhciBoPW4ubGVuZ3RoLHY9aDtmb3IoaCYmbi5wdXNoKCItIik7djxsOyl7dmFyIGc9ZTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPj1mJiZ1PGcmJihnPXUpO3ZhciB5PXYrMTtpZihnLWY+aSgoZS1kKS95KSl0aHJvdyBSYW5nZUVycm9yKG8pO2ZvcihkKz0oZy1mKSp5LGY9ZyxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCh1PXRbcl0pPGYmJisrZD5lKXRocm93IFJhbmdlRXJyb3Iobyk7aWYodT09Zil7Zm9yKHZhciBtPWQsYj0zNjs7Yis9MzYpe3ZhciB4PWI8PXA/MTpiPj1wKzI2PzI2OmItcDtpZihtPHgpYnJlYWs7dmFyIHc9bS14LEU9MzYteDtuLnB1c2goYShjKHgrdyVFKSkpLG09aSh3L0UpfW4ucHVzaChhKGMobSkpKSxwPXMoZCx5LHY9PWgpLGQ9MCwrK3Z9fSsrZCwrK2Z9cmV0dXJuIG4uam9pbigiIil9O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxvLGk9W10sYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZShyLCIuIikuc3BsaXQoIi4iKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKW89YVtlXSxpLnB1c2gobi50ZXN0KG8pPyJ4bi0tIit1KG8pOm8pO3JldHVybiBpLmpvaW4oIi4iKX19LDE5MjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvIGluIGUpcih0LG8sZVtvXSxuKTtyZXR1cm4gdH19LDkyOTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpLGk9big3NjI5OCksYT1uKDk4MjY5KSxjPW4oNzY3NzMpLHM9big4OTgyNyksdT1zLmdldCxsPXMuZW5mb3JjZSxmPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe3ZhciBzPSEhYyYmISFjLnVuc2FmZSx1PSEhYyYmISFjLmVudW1lcmFibGUsZD0hIWMmJiEhYy5ub1RhcmdldEdldDsiZnVuY3Rpb24iPT10eXBlb2YgbiYmKCJzdHJpbmciIT10eXBlb2YgZXx8aShuLCJuYW1lIil8fG8obiwibmFtZSIsZSksbChuKS5zb3VyY2U9Zi5qb2luKCJzdHJpbmciPT10eXBlb2YgZT9lOiIiKSksdCE9PXI/KHM/IWQmJnRbZV0mJih1PSEwKTpkZWxldGUgdFtlXSx1P3RbZV09bjpvKHQsZSxuKSk6dT90W2VdPW46YShlLG4pfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnUodGhpcykuc291cmNlfHxjKHRoaXMpfSkpfSw3NzAyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NDkwNiksbz1uKDU4NjA2KSxpPW4oNjIwNTQpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3IG8pLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPWEuZ2V0KHQpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQodCxvPW5ldyByKX12YXIgaT1vLmdldChlKTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KGUsaT1uZXcgcil9cmV0dXJuIGl9O3QuZXhwb3J0cz17c3RvcmU6YSxnZXRNYXA6YyxoYXM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMoZSxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXModCl9LGdldDpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KX0sc2V0OmZ1bmN0aW9uKHQsZSxuLHIpe2MobixyLCEwKS5zZXQodCxlKX0sa2V5czpmdW5jdGlvbih0LGUpe3ZhciBuPWModCxlLCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ci5wdXNoKGUpfSkpLHJ9LHRvS2V5OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fHwic3ltYm9sIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9fX0sMzU0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpLG89bigzODU5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgaT1uLmNhbGwodCxlKTtpZigib2JqZWN0IiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gaX1pZigiUmVnRXhwIiE9PXIodCkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIG8uY2FsbCh0LGUpfX0sMzg1OTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGk9bigyNTQxOSksYT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsYz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Uscz1hLHU9KHI9L2EvLG89L2IqL2csYS5jYWxsKHIsImEiKSxhLmNhbGwobywiYSIpLDAhPT1yLmxhc3RJbmRleHx8MCE9PW8ubGFzdEluZGV4KSxsPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsodXx8bCkmJihzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLHM9dGhpcztyZXR1cm4gbCYmKG49bmV3IFJlZ0V4cCgiXiIrcy5zb3VyY2UrIiQoPyFcXHMpIixpLmNhbGwocykpKSx1JiYoZT1zLmxhc3RJbmRleCkscj1hLmNhbGwocyx0KSx1JiZyJiYocy5sYXN0SW5kZXg9cy5nbG9iYWw/ci5pbmRleCtyWzBdLmxlbmd0aDplKSxsJiZyJiZyLmxlbmd0aD4xJiZjLmNhbGwoclswXSxuLChmdW5jdGlvbigpe2ZvcihvPTE7bzxhcmd1bWVudHMubGVuZ3RoLTI7bysrKXZvaWQgMD09PWFyZ3VtZW50c1tvXSYmKHJbb109dm9pZCAwKX0pKSxyfSksdC5leHBvcnRzPXN9LDI1NDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9cih0aGlzKSxlPSIiO3JldHVybiB0Lmdsb2JhbCYmKGUrPSJnIiksdC5pZ25vcmVDYXNlJiYoZSs9ImkiKSx0Lm11bHRpbGluZSYmKGUrPSJtIiksdC5kb3RBbGwmJihlKz0icyIpLHQudW5pY29kZSYmKGUrPSJ1IiksdC5zdGlja3kmJihlKz0ieSIpLGV9fSw3MDEzMjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSwzODE4OTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSw3NjQ4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT0xL2U6dCE9dCYmZSE9ZX19LDk4MjY5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtvKHIsdCxlKX1jYXRjaChuKXtyW3RdPWV9cmV0dXJuIGV9fSw2NzUzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzcwMSksbz1uKDM3NjIwKSxpPW4oMjM3MjQpLGE9big2MjU1NiksYz1pKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1vLmY7YSYmZSYmIWVbY10mJm4oZSxjLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSw1MTEyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzYyMCkuZixvPW4oNzYyOTgpLGk9bigyMzcyNCkoInRvU3RyaW5nVGFnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt0JiYhbyh0PW4/dDp0LnByb3RvdHlwZSxpKSYmcih0LGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSw4MzE5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjA1NCksbz1uKDY3MjkpLGk9cigia2V5cyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09byh0KSl9fSwzNDc0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk4MjY5KSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9cltpXXx8byhpLHt9KTt0LmV4cG9ydHM9YX0sNjIwNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzNDc0MSk7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvW3RdfHwob1t0XT12b2lkIDAhPT1lP2U6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy41LjAiLG1vZGU6cj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSwyMjkwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdW3RdO3JldHVybiFufHwhcigoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3Rocm93IDF9LDEpfSkpfX0sMTM5Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQ3MCksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGE9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09YXx8bnVsbD09KG49cihhKVtpXSk/ZTpvKG4pfX0sNjAxNDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89big3MDEzMiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaSxhLGM9U3RyaW5nKG8oZSkpLHM9cihuKSx1PWMubGVuZ3RoO3JldHVybiBzPDB8fHM+PXU/dD8iIjp2b2lkIDA6KGk9Yy5jaGFyQ29kZUF0KHMpKTw1NTI5Nnx8aT41NjMxOXx8cysxPT09dXx8KGE9Yy5jaGFyQ29kZUF0KHMrMSkpPDU2MzIwfHxhPjU3MzQzP3Q/Yy5jaGFyQXQocyk6aTp0P2Muc2xpY2UocyxzKzIpOmEtNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19O3QuZXhwb3J0cz17Y29kZUF0OmkoITEpLGNoYXJBdDppKCEwKX19LDI2NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3ODg0KSxvPW4oNjgyNTMpLGk9big3MDEzMiksYT1NYXRoLmNlaWwsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGMpe3ZhciBzLHUsbD1TdHJpbmcoaShlKSksZj1sLmxlbmd0aCxkPXZvaWQgMD09PWM/IiAiOlN0cmluZyhjKSxwPXIobik7cmV0dXJuIHA8PWZ8fCIiPT1kP2w6KHM9cC1mLCh1PW8uY2FsbChkLGEocy9kLmxlbmd0aCkpKS5sZW5ndGg+cyYmKHU9dS5zbGljZSgwLHMpKSx0P2wrdTp1K2wpfX07dC5leHBvcnRzPXtzdGFydDpjKCExKSxlbmQ6YyghMCl9fSw2ODI1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDM0MTYpLG89big3MDEzMik7dC5leHBvcnRzPSIiLnJlcGVhdHx8ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKG8odGhpcykpLG49IiIsaT1yKHQpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG51bWJlciBvZiByZXBldGl0aW9ucyIpO2Zvcig7aT4wOyhpPj4+PTEpJiYoZSs9ZSkpMSZpJiYobis9ZSk7cmV0dXJuIG59fSw4MjM1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0iWyIrbig1MDA1NSkrIl0iLGk9UmVnRXhwKCJeIitvK28rIioiKSxhPVJlZ0V4cChvK28rIiokIiksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49U3RyaW5nKHIoZSkpO3JldHVybiAxJnQmJihuPW4ucmVwbGFjZShpLCIiKSksMiZ0JiYobj1uLnJlcGxhY2UoYSwiIikpLG59fTt0LmV4cG9ydHM9e3N0YXJ0OmMoMSksZW5kOmMoMiksdHJpbTpjKDMpfX0sMjE3NDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oODk1NTgpLGM9bigzMjE4Nykscz1uKDI0NTk0KSx1PW4oNDYxMzApLGw9big1MTU3MSksZj1uKDE5MjMpLGQ9bigyMTIzMSkscD1hLmxvY2F0aW9uLGg9YS5zZXRJbW1lZGlhdGUsdj1hLmNsZWFySW1tZWRpYXRlLGc9YS5wcm9jZXNzLHk9YS5NZXNzYWdlQ2hhbm5lbCxtPWEuRGlzcGF0Y2gsYj0wLHg9e30sdz0ib25yZWFkeXN0YXRlY2hhbmdlIixFPWZ1bmN0aW9uKHQpe2lmKHguaGFzT3duUHJvcGVydHkodCkpe3ZhciBlPXhbdF07ZGVsZXRlIHhbdF0sZSgpfX0sQz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtFKHQpfX0saj1mdW5jdGlvbih0KXtFKHQuZGF0YSl9LGs9ZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh0KyIiLHAucHJvdG9jb2wrIi8vIitwLmhvc3QpfTtoJiZ2fHwoaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO2FyZ3VtZW50cy5sZW5ndGg+bjspZS5wdXNoKGFyZ3VtZW50c1tuKytdKTtyZXR1cm4geFsrK2JdPWZ1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCkpLmFwcGx5KHZvaWQgMCxlKX0scihiKSxifSx2PWZ1bmN0aW9uKHQpe2RlbGV0ZSB4W3RdfSwicHJvY2VzcyI9PXMoZyk/cj1mdW5jdGlvbih0KXtnLm5leHRUaWNrKEModCkpfTptJiZtLm5vdz9yPWZ1bmN0aW9uKHQpe20ubm93KEModCkpfTp5JiYhZD8oaT0obz1uZXcgeSkucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9aixyPXUoaS5wb3N0TWVzc2FnZSxpLDEpKTohYS5hZGRFdmVudExpc3RlbmVyfHwiZnVuY3Rpb24iIT10eXBlb2YgcG9zdE1lc3NhZ2V8fGEuaW1wb3J0U2NyaXB0c3x8YyhrKT9yPXcgaW4gZigic2NyaXB0Iik/ZnVuY3Rpb24odCl7bC5hcHBlbmRDaGlsZChmKCJzY3JpcHQiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bC5yZW1vdmVDaGlsZCh0aGlzKSxFKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChDKHQpLDApfToocj1rLGEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaiwhMSkpKSx0LmV4cG9ydHM9e3NldDpoLGNsZWFyOnZ9fSw1Mzk5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCYmIk51bWJlciIhPXIodCkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpO3JldHVybit0fX0sNzY5NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO3JldHVybiBuPDA/byhuK2UsMCk6aShuLGUpfX0sODM5MTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIDA7dmFyIGU9cih0KSxuPW8oZSk7aWYoZSE9PW4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIG9yIGluZGV4Iik7cmV0dXJuIG59fSw5NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0OTgpLG89big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sNDM0MTY6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jZWlsLG49TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9uOmUpKHQpfX0sMjc4ODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwxOTIwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSw2MDU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NTY4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0KTtpZihuJWUpdGhyb3cgUmFuZ2VFcnJvcigiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIG59fSw0NTY4MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7aWYoZTwwKXRocm93IFJhbmdlRXJyb3IoIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMCIpO3JldHVybiBlfX0sNTM0OTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFyKHQpKXJldHVybiB0O3ZhciBuLG87aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZigiZnVuY3Rpb24iPT10eXBlb2Yobj10LnZhbHVlT2YpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87aWYoIWUmJiJmdW5jdGlvbiI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDkwNjEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fTtyW24oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhyKX0sOTMwMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2MjU1NiksYT1uKDM1NjI3KSxjPW4oNzMwNzQpLHM9big4MjgzNSksdT1uKDU5Mzc5KSxsPW4oMTQyMDkpLGY9big2Njk3MSksZD1uKDI3ODg0KSxwPW4oODM5MTQpLGg9big2MDU1OCksdj1uKDUzNDk4KSxnPW4oNzYyOTgpLHk9big1OTU5MSksbT1uKDEwNTkyKSxiPW4oNTA4NjgpLHg9big3MTg0Miksdz1uKDEzMzM0KS5mLEU9bigyMDQ1NSksQz1uKDMwMDI1KS5mb3JFYWNoLGo9big2NzUzOCksaz1uKDM3NjIwKSxTPW4oOTcyNTcpLE89big4OTgyNyksST1uKDMwMjcyKSxBPU8uZ2V0LE09Ty5zZXQsVD1rLmYsXz1TLmYsUj1NYXRoLnJvdW5kLEw9by5SYW5nZUVycm9yLFA9cy5BcnJheUJ1ZmZlcixOPXMuRGF0YVZpZXcsRD1jLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsRj1jLlRZUEVEX0FSUkFZX1RBRyxVPWMuVHlwZWRBcnJheSxCPWMuVHlwZWRBcnJheVByb3RvdHlwZSx6PWMuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixWPWMuaXNUeXBlZEFycmF5LEg9IkJZVEVTX1BFUl9FTEVNRU5UIixxPSJXcm9uZyBsZW5ndGgiLFc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLG89bmV3KHoodCkpKHIpO3I+bjspb1tuXT1lW24rK107cmV0dXJuIG99LEc9ZnVuY3Rpb24odCxlKXtUKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEEodGhpcylbZV19fSl9LFo9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQgaW5zdGFuY2VvZiBQfHwiQXJyYXlCdWZmZXIiPT0oZT15KHQpKXx8IlNoYXJlZEFycmF5QnVmZmVyIj09ZX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBWKHQpJiYic3ltYm9sIiE9dHlwZW9mIGUmJmUgaW4gdCYmU3RyaW5nKCtlKT09U3RyaW5nKGUpfSxZPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICQodCxlPXYoZSwhMCkpP2woMix0W2VdKTpfKHQsZSl9LEo9ZnVuY3Rpb24odCxlLG4pe3JldHVybiEoJCh0LGU9dihlLCEwKSkmJm0obikmJmcobiwidmFsdWUiKSl8fGcobiwiZ2V0Iil8fGcobiwic2V0Iil8fG4uY29uZmlndXJhYmxlfHxnKG4sIndyaXRhYmxlIikmJiFuLndyaXRhYmxlfHxnKG4sImVudW1lcmFibGUiKSYmIW4uZW51bWVyYWJsZT9UKHQsZSxuKToodFtlXT1uLnZhbHVlLHQpfTtpPyhEfHwoUy5mPVksay5mPUosRyhCLCJidWZmZXIiKSxHKEIsImJ5dGVPZmZzZXQiKSxHKEIsImJ5dGVMZW5ndGgiKSxHKEIsImxlbmd0aCIpKSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUR9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6WSxkZWZpbmVQcm9wZXJ0eTpKfSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Lm1hdGNoKC9cZCskLylbMF0vOCxjPXQrKG4/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLHM9ImdldCIrdCxsPSJzZXQiK3Qsdj1vW2NdLGc9dix5PWcmJmcucHJvdG90eXBlLGs9e30sUz1mdW5jdGlvbih0LGUpe1QodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj1BKHQpO3JldHVybiBuLnZpZXdbc10oZSppK24uYnl0ZU9mZnNldCwhMCl9KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBvPUEodCk7biYmKHI9KHI9UihyKSk8MD8wOnI+MjU1PzI1NToyNTUmciksby52aWV3W2xdKGUqaStvLmJ5dGVPZmZzZXQsciwhMCl9KHRoaXMsZSx0KX0sZW51bWVyYWJsZTohMH0pfTtEP2EmJihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB1KHQsZyxjKSxJKG0oZSk/WihlKT92b2lkIDAhPT1yP25ldyB2KGUsaChuLGkpLHIpOnZvaWQgMCE9PW4/bmV3IHYoZSxoKG4saSkpOm5ldyB2KGUpOlYoZSk/VyhnLGUpOkUuY2FsbChnLGUpOm5ldyB2KHAoZSkpLHQsZyl9KSkseCYmeChnLFUpLEModyh2KSwoZnVuY3Rpb24odCl7dCBpbiBnfHxmKGcsdCx2W3RdKX0pKSxnLnByb3RvdHlwZT15KTooZz1lKChmdW5jdGlvbih0LGUsbixyKXt1KHQsZyxjKTt2YXIgbyxhLHMsbD0wLGY9MDtpZihtKGUpKXtpZighWihlKSlyZXR1cm4gVihlKT9XKGcsZSk6RS5jYWxsKGcsZSk7bz1lLGY9aChuLGkpO3ZhciB2PWUuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1yKXtpZih2JWkpdGhyb3cgTChxKTtpZigoYT12LWYpPDApdGhyb3cgTChxKX1lbHNlIGlmKChhPWQocikqaSkrZj52KXRocm93IEwocSk7cz1hL2l9ZWxzZSBzPXAoZSksbz1uZXcgUChhPXMqaSk7Zm9yKE0odCx7YnVmZmVyOm8sYnl0ZU9mZnNldDpmLGJ5dGVMZW5ndGg6YSxsZW5ndGg6cyx2aWV3Om5ldyBOKG8pfSk7bDxzOylTKHQsbCsrKX0pKSx4JiZ4KGcsVSkseT1nLnByb3RvdHlwZT1iKEIpKSx5LmNvbnN0cnVjdG9yIT09ZyYmZih5LCJjb25zdHJ1Y3RvciIsZyksRiYmZih5LEYsYyksa1tjXT1nLHIoe2dsb2JhbDohMCxmb3JjZWQ6ZyE9dixzaGFtOiFEfSxrKSxIIGluIGd8fGYoZyxILGkpLEggaW4geXx8Zih5LEgsaSksaihjKX0pOnQuZXhwb3J0cz1mdW5jdGlvbigpe319LDIwNDU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5MjA5KSxvPW4oMjc4ODQpLGk9big3Mzg5MCksYT1uKDQ0OTg0KSxjPW4oNDYxMzApLHM9big3MzA3NCkuYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbix1LGwsZixkLHA9cih0KSxoPWFyZ3VtZW50cy5sZW5ndGgsdj1oPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxnPXZvaWQgMCE9PXYseT1pKHApO2lmKG51bGwhPXkmJiFhKHkpKWZvcihkPShmPXkuY2FsbChwKSkubmV4dCxwPVtdOyEobD1kLmNhbGwoZikpLmRvbmU7KXAucHVzaChsLnZhbHVlKTtmb3IoZyYmaD4yJiYodj1jKHYsYXJndW1lbnRzWzJdLDIpKSxuPW8ocC5sZW5ndGgpLHU9bmV3KHModGhpcykpKG4pLGU9MDtuPmU7ZSsrKXVbZV09Zz92KHBbZV0sZSk6cFtlXTtyZXR1cm4gdX19LDM1NjI3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oMzIxODcpLGk9big0Nzk2KSxhPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsYz1yLkFycmF5QnVmZmVyLHM9ci5JbnQ4QXJyYXk7dC5leHBvcnRzPSFhfHwhbygoZnVuY3Rpb24oKXtzKDEpfSkpfHwhbygoZnVuY3Rpb24oKXtuZXcgcygtMSl9KSl8fCFpKChmdW5jdGlvbih0KXtuZXcgcyxuZXcgcyhudWxsKSxuZXcgcygxLjUpLG5ldyBzKHQpfSksITApfHxvKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IHMobmV3IGMoMiksMSx2b2lkIDApLmxlbmd0aH0pKX0sNjcyOTpmdW5jdGlvbih0KXt2YXIgZT0wLG49TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiK1N0cmluZyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrKCsrZStuKS50b1N0cmluZygzNil9fSwxNjQxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDE0KTt0LmV4cG9ydHM9ciYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgpfSwzOTQ3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIifSw3OTA3MTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPW4oODk1NTgpLGE9bigzOTQ3NiksYz1pLnByb2Nlc3Mscz1jJiZjLnZlcnNpb25zLHU9cyYmcy52ODt1P289KHI9dS5zcGxpdCgiLiIpKVswXStyWzFdOmEmJighKHI9YS5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fHJbMV0+PTc0KSYmKHI9YS5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKG89clsxXSksdC5leHBvcnRzPW8mJitvfSw0MjE4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8oIE1vYmlsZVwvXHcrKT8gU2FmYXJpXC8vLnRlc3Qocil9LDIzNzI0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjIwNTQpLGk9big3NjI5OCksYT1uKDY3MjkpLGM9big5MDE0KSxzPW4oMTY0MTApLHU9bygid2tzIiksbD1yLlN5bWJvbCxmPXM/bDphO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh1LHQpfHwoYyYmaShsLHQpP3VbdF09bFt0XTp1W3RdPWYoIlN5bWJvbC4iK3QpKSx1W3RdfX0sNTAwNTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSJcdFxuXHZcZlxyIMKg4ZqA4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXHUyMDI4XHUyMDI5XHVmZWZmIn0sNzM5MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpO2UuZj1yfSw2MTI0NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDgyODM1KSxhPW4oNjc1MzgpLGM9IkFycmF5QnVmZmVyIixzPWkuQXJyYXlCdWZmZXI7cih7Z2xvYmFsOiEwLGZvcmNlZDpvLkFycmF5QnVmZmVyIT09c30se0FycmF5QnVmZmVyOnN9KSxhKGMpfSwyOTI3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDczMDc0KTtyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixzdGF0OiEwLGZvcmNlZDohby5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTfSx7aXNWaWV3Om8uaXNWaWV3fSl9LDkwNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oODI4MzUpLGE9big4NzU3OSksYz1uKDc2OTc2KSxzPW4oMjc4ODQpLHU9bigxMzk3OSksbD1pLkFycmF5QnVmZmVyLGY9aS5EYXRhVmlldyxkPWwucHJvdG90eXBlLnNsaWNlO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwLHVuc2FmZTohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGwoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSl9LHtzbGljZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWQmJnZvaWQgMD09PWUpcmV0dXJuIGQuY2FsbChhKHRoaXMpLHQpO2Zvcih2YXIgbj1hKHRoaXMpLmJ5dGVMZW5ndGgscj1jKHQsbiksbz1jKHZvaWQgMD09PWU/bjplLG4pLGk9bmV3KHUodGhpcyxsKSkocyhvLXIpKSxwPW5ldyBmKHRoaXMpLGg9bmV3IGYoaSksdj0wO3I8bzspaC5zZXRVaW50OCh2KysscC5nZXRVaW50OChyKyspKTtyZXR1cm4gaX19KX0sNTczODc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big2MTk5KSxhPW4oMTA1OTIpLGM9bigxOTIwOSkscz1uKDI3ODg0KSx1PW4oNTg4MTApLGw9big3MDA5KSxmPW4oNjE5NjMpLGQ9bigyMzcyNCkscD1uKDc5MDcxKSxoPWQoImlzQ29uY2F0U3ByZWFkYWJsZSIpLHY9OTAwNzE5OTI1NDc0MDk5MSxnPSJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiLHk9cD49NTF8fCFvKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W2hdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLG09ZigiY29uY2F0IiksYj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT10W2hdO3JldHVybiB2b2lkIDAhPT1lPyEhZTppKHQpfTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IXl8fCFtfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYT1jKHRoaXMpLGY9bChhLDApLGQ9MDtmb3IoZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrKylpZihiKGk9LTE9PT1lP2E6YXJndW1lbnRzW2VdKSl7aWYoZCsobz1zKGkubGVuZ3RoKSk+dil0aHJvdyBUeXBlRXJyb3IoZyk7Zm9yKG49MDtuPG87bisrLGQrKyluIGluIGkmJnUoZixkLGlbbl0pfWVsc2V7aWYoZD49dil0aHJvdyBUeXBlRXJyb3IoZyk7dShmLGQrKyxpKX1yZXR1cm4gZi5sZW5ndGg9ZCxmfX0pfSwzMDgxNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk5NDMxKSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7Y29weVdpdGhpbjpvfSksaSgiY29weVdpdGhpbiIpfSw1MjA1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZXZlcnk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJldmVyeSIpfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNzMzNjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2NTg5NSksaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZpbGw6b30pLGkoImZpbGwiKX0sNDc1MDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbHRlcixpPW4oMzIxODcpLGE9big2MTk2MykoImZpbHRlciIpLGM9YSYmIWkoKGZ1bmN0aW9uKCl7W10uZmlsdGVyLmNhbGwoe2xlbmd0aDotMSwwOjF9LChmdW5jdGlvbih0KXt0aHJvdyB0fSkpfSkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohYXx8IWN9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sOTA5MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPW4oNzY1MTMpLGE9ImZpbmRJbmRleCIsYz0hMDthIGluW10mJkFycmF5KDEpLmZpbmRJbmRleCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sMzMxOTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmQsaT1uKDc2NTEzKSxhPSJmaW5kIixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoYSl9LDc5MjI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgwNjY1KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDg2NDcwKSxzPW4oNzAwOSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3ZhciBlLG49aSh0aGlzKSxyPWEobi5sZW5ndGgpO3JldHVybiBjKHQpLChlPXMobiwwKSkubGVuZ3RoPW8oZSxuLG4sciwwLDEsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksZX19KX0sMjgyMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXQ6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDAsZT1pKHRoaXMpLG49YShlLmxlbmd0aCkscj1zKGUsMCk7cmV0dXJuIHIubGVuZ3RoPW8ocixlLGUsbiwwLHZvaWQgMD09PXQ/MTpjKHQpKSxyfX0pfSw0MzU5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM2OCk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPW99LHtmb3JFYWNoOm99KX0sNzQ1Mzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NTE2Nik7cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMCxmb3JjZWQ6IW4oNDc5NikoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOm99KX0sMjIyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluY2x1ZGVzLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoImluY2x1ZGVzIil9LDI0MTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg1ODAzKS5pbmRleE9mLGk9bigyMjkwOSksYT1bXS5pbmRleE9mLGM9ISFhJiYxL1sxXS5pbmRleE9mKDEsLTApPDAscz1pKCJpbmRleE9mIik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN8fHN9LHtpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBjP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOm8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjEyNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc0FycmF5Om4oNjE5OSl9KX0sNTAwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big3NjUxMyksaT1uKDEyMzUpLGE9big4OTgyNyksYz1uKDQ2MDYxKSxzPSJBcnJheSBJdGVyYXRvciIsdT1hLnNldCxsPWEuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7dSh0aGlzLHt0eXBlOnMsdGFyZ2V0OnIodCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PWwodGhpcyksZT10LnRhcmdldCxuPXQua2luZCxyPXQuaW5kZXgrKztyZXR1cm4hZXx8cj49ZS5sZW5ndGg/KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KToia2V5cyI9PW4/e3ZhbHVlOnIsZG9uZTohMX06InZhbHVlcyI9PW4/e3ZhbHVlOmVbcl0sZG9uZTohMX06e3ZhbHVlOltyLGVbcl1dLGRvbmU6ITF9fSksInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbygia2V5cyIpLG8oInZhbHVlcyIpLG8oImVudHJpZXMiKX0sNzQxMjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ5OCksaT1uKDk1NzMpLGE9bigyMjkwOSksYz1bXS5qb2luLHM9byE9T2JqZWN0LHU9YSgiam9pbiIsIiwiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6c3x8dX0se2pvaW46ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbChpKHRoaXMpLHZvaWQgMD09PXQ/IiwiOnQpfX0pfSw5NDk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQ5MjQ5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6byE9PVtdLmxhc3RJbmRleE9mfSx7bGFzdEluZGV4T2Y6b30pfSwyNzM4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkubWFwLGk9bigzMjE4NyksYT1uKDYxOTYzKSgibWFwIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5tYXAuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2OTk4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHQpaW5zdGFuY2VvZiB0KX0pKX0se29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKGUpO2U+dDspaShuLHQsYXJndW1lbnRzW3QrK10pO3JldHVybiBuLmxlbmd0aD1lLG59fSl9LDQ1NTI4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5yaWdodDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInJlZHVjZVJpZ2h0Iil9LHtyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5sZWZ0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlIil9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDExNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPVtdLnJldmVyc2UsYT1bMSwyXTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKGEpPT09U3RyaW5nKGEucmV2ZXJzZSgpKX0se3JldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxpLmNhbGwodGhpcyl9fSl9LDI5MTEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oNjE5OSksYT1uKDc2OTc2KSxjPW4oMjc4ODQpLHM9big5NTczKSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1uKDIzNzI0KSgic3BlY2llcyIpLGQ9W10uc2xpY2UscD1NYXRoLm1heDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNsaWNlIil9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCxoPXModGhpcyksdj1jKGgubGVuZ3RoKSxnPWEodCx2KSx5PWEodm9pZCAwPT09ZT92OmUsdik7aWYoaShoKSYmKCJmdW5jdGlvbiIhPXR5cGVvZihuPWguY29uc3RydWN0b3IpfHxuIT09QXJyYXkmJiFpKG4ucHJvdG90eXBlKT9vKG4pJiZudWxsPT09KG49bltmXSkmJihuPXZvaWQgMCk6bj12b2lkIDAsbj09PUFycmF5fHx2b2lkIDA9PT1uKSlyZXR1cm4gZC5jYWxsKGgsZyx5KTtmb3Iocj1uZXcodm9pZCAwPT09bj9BcnJheTpuKShwKHktZywwKSksbD0wO2c8eTtnKyssbCsrKWcgaW4gaCYmdShyLGwsaFtnXSk7cmV0dXJuIHIubGVuZ3RoPWwscn19KX0sODU1OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLnNvbWU7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJzb21lIil9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oMTkyMDkpLGE9bigzMjE4NyksYz1uKDIyOTA5KSxzPVtdLHU9cy5zb3J0LGw9YSgoZnVuY3Rpb24oKXtzLnNvcnQodm9pZCAwKX0pKSxmPWEoKGZ1bmN0aW9uKCl7cy5zb3J0KG51bGwpfSkpLGQ9Yygic29ydCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpsfHwhZnx8ZH0se3NvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dS5jYWxsKGkodGhpcykpOnUuY2FsbChpKHRoaXMpLG8odCkpfX0pfSw4NjIxNDpmdW5jdGlvbih0LGUsbil7big2NzUzOCkoIkFycmF5Iil9LDMzNzkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPW4oNDM0MTYpLGE9bigyNzg4NCksYz1uKDE5MjA5KSxzPW4oNzAwOSksdT1uKDU4ODEwKSxsPW4oNjE5NjMpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPTkwMDcxOTkyNTQ3NDA5OTEsaD0iTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBleGNlZWRlZCI7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFsKCJzcGxpY2UiKX0se3NwbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCx2LGcseSxtPWModGhpcyksYj1hKG0ubGVuZ3RoKSx4PW8odCxiKSx3PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXc/bj1yPTA6MT09PXc/KG49MCxyPWIteCk6KG49dy0yLHI9ZChmKGkoZSksMCksYi14KSksYituLXI+cCl0aHJvdyBUeXBlRXJyb3IoaCk7Zm9yKGw9cyhtLHIpLHY9MDt2PHI7disrKShnPXgrdilpbiBtJiZ1KGwsdixtW2ddKTtpZihsLmxlbmd0aD1yLG48cil7Zm9yKHY9eDt2PGItcjt2KyspeT12K24sKGc9dityKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PWI7dj5iLXIrbjt2LS0pZGVsZXRlIG1bdi0xXX1lbHNlIGlmKG4+cilmb3Iodj1iLXI7dj54O3YtLSl5PXYrbi0xLChnPXYrci0xKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PTA7djxuO3YrKyltW3YreF09YXJndW1lbnRzW3YrMl07cmV0dXJuIG0ubGVuZ3RoPWItcituLGx9fSl9LDcxODQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdE1hcCIpfSw3MDE0NjpmdW5jdGlvbih0LGUsbil7big3NjUxMykoImZsYXQiKX0sNDUxNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4MjgzNSk7cih7Z2xvYmFsOiEwLGZvcmNlZDohbig3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUn0se0RhdGFWaWV3Om8uRGF0YVZpZXd9KX0sNDE2MzI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkRhdGUiLHN0YXQ6ITB9LHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sNDAwNDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3OTE2Nyk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1vfSx7dG9JU09TdHJpbmc6b30pfSwzNjIzMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDE5MjA5KSxhPW4oNTM0OTgpO3Ioe3RhcmdldDoiRGF0ZSIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSl9LHt0b0pTT046ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBufHxpc0Zpbml0ZShuKT9lLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sODQwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Njk3MSksbz1uKDc2OTc0KSxpPW4oMjM3MjQpKCJ0b1ByaW1pdGl2ZSIpLGE9RGF0ZS5wcm90b3R5cGU7aSBpbiBhfHxyKGEsaSxvKX0sMjEzNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpLG89RGF0ZS5wcm90b3R5cGUsaT0iSW52YWxpZCBEYXRlIixhPSJ0b1N0cmluZyIsYz1vLnRvU3RyaW5nLHM9by5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWkmJnIobyxhLChmdW5jdGlvbigpe3ZhciB0PXMuY2FsbCh0aGlzKTtyZXR1cm4gdD09dD9jLmNhbGwodGhpcyk6aX0pKX0sOTY0OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkZ1bmN0aW9uIixwcm90bzohMH0se2JpbmQ6big3MzczOSl9KX0sNzU4OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwNTkyKSxvPW4oMzc2MjApLGk9big2NDk2NSksYT1uKDIzNzI0KSgiaGFzSW5zdGFuY2UiKSxjPUZ1bmN0aW9uLnByb3RvdHlwZTthIGluIGN8fG8uZihjLGEse3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzfHwhcih0KSlyZXR1cm4hMTtpZighcih0aGlzLnByb3RvdHlwZSkpcmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzO2Zvcig7dD1pKHQpOylpZih0aGlzLnByb3RvdHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9fSl9LDIyNDQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLmYsaT1GdW5jdGlvbi5wcm90b3R5cGUsYT1pLnRvU3RyaW5nLGM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8scz0ibmFtZSI7ciYmIShzIGluIGkpJiZvKGkscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5jYWxsKHRoaXMpLm1hdGNoKGMpWzFdfWNhdGNoKHQpe3JldHVybiIifX19KX0sNzE2MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOm4oODk1NTgpfSl9LDE2NTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oMzIxODcpLGE9bygiSlNPTiIsInN0cmluZ2lmeSIpLGM9L1tcdUQ4MDAtXHVERkZGXS9nLHM9L15bXHVEODAwLVx1REJGRl0kLyx1PS9eW1x1REMwMC1cdURGRkZdJC8sbD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5jaGFyQXQoZS0xKSxvPW4uY2hhckF0KGUrMSk7cmV0dXJuIHMudGVzdCh0KSYmIXUudGVzdChvKXx8dS50ZXN0KHQpJiYhcy50ZXN0KHIpPyJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik6dH0sZj1pKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PWEoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWEoIlx1ZGVhZCIpfSkpO2EmJnIoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6Zn0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByP3IucmVwbGFjZShjLGwpOnJ9fSl9LDgxMTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTtuKDUxMTI4KShyLkpTT04sIkpTT04iLCEwKX0sOTQ5MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgxOTUxKSxvPW4oNjQ1MCk7dC5leHBvcnRzPXIoIk1hcCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxvKX0sMjEwMzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyMTkzMiksaT1NYXRoLmFjb3NoLGE9TWF0aC5sb2csYz1NYXRoLnNxcnQscz1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiFpfHw3MTAhPU1hdGguZmxvb3IoaShOdW1iZXIuTUFYX1ZBTFVFKSl8fGkoMS8wKSE9MS8wfSx7YWNvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPDE/TmFOOnQ+OTQ5MDYyNjUuNjI0MjUxNTY/YSh0KStzOm8odC0xK2ModC0xKSpjKHQrMSkpfX0pfSwzNzkzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmFzaW5oLGk9TWF0aC5sb2csYT1NYXRoLnNxcnQ7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygwKT4wKX0se2FzaW5oOmZ1bmN0aW9uIHQoZSl7cmV0dXJuIGlzRmluaXRlKGU9K2UpJiYwIT1lP2U8MD8tdCgtZSk6aShlK2EoZSplKzEpKTplfX0pfSw5Mzk5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmF0YW5oLGk9TWF0aC5sb2c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygtMCk8MCl9LHthdGFuaDpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6aSgoMSt0KS8oMS10KSkvMn19KX0sMTMzOTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODc4NyksaT1NYXRoLmFicyxhPU1hdGgucG93O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NicnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odD0rdCkqYShpKHQpLDEvMyl9fSl9LDExMjgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguZmxvb3IsaT1NYXRoLmxvZyxhPU1hdGguTE9HMkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2x6MzI6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj49MCk/MzEtbyhpKHQrLjUpKmEpOjMyfX0pfSwzODAzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguY29zaCxhPU1hdGguYWJzLGM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fGkoNzEwKT09PTEvMH0se2Nvc2g6ZnVuY3Rpb24odCl7dmFyIGU9byhhKHQpLTEpKzE7cmV0dXJuKGUrMS8oZSpjKmMpKSooYy8yKX19KX0sMTEzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8hPU1hdGguZXhwbTF9LHtleHBtMTpvfSl9LDQ2MDc4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnJvdW5kOm4oNTMyNTEpfSl9LDMwMDgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguaHlwb3QsaT1NYXRoLmFicyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEhbyYmbygxLzAsTmFOKSE9PTEvMH0se2h5cG90OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsbz0wLGM9MCxzPWFyZ3VtZW50cy5sZW5ndGgsdT0wO2M8czspdTwobj1pKGFyZ3VtZW50c1tjKytdKSk/KG89byoocj11L24pKnIrMSx1PW4pOm8rPW4+MD8ocj1uL3UpKnI6bjtyZXR1cm4gdT09PTEvMD8xLzA6dSphKG8pfX0pfSw0NzM4MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPU1hdGguaW11bDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPWkoNDI5NDk2NzI5NSw1KXx8MiE9aS5sZW5ndGh9KSl9LHtpbXVsOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9biZyLGE9biZvO3JldHVybiAwfGkqYSsoKG4mcj4+PjE2KSphK2kqKG4mbz4+PjE2KTw8MTY+Pj4wKX19KX0sNzE1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxPRzEwRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cxMDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSppfX0pfSw5OTIxODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzFwOm4oMjE5MzIpfSl9LDk4OTc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubG9nLGk9TWF0aC5MTjI7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KS9pfX0pfSw4MDY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2lnbjpuKDM4Nzg3KX0pfSw3MDIwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNzI5NzApLGE9TWF0aC5hYnMsYz1NYXRoLmV4cCxzPU1hdGguRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT1NYXRoLnNpbmgoLTJlLTE3KX0pKX0se3Npbmg6ZnVuY3Rpb24odCl7cmV0dXJuIGEodD0rdCk8MT8oaSh0KS1pKC10KSkvMjooYyh0LTEpLWMoLXQtMSkpKihzLzIpfX0pfSw4NTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguZXhwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3Rhbmg6ZnVuY3Rpb24odCl7dmFyIGU9byh0PSt0KSxuPW8oLXQpO3JldHVybiBlPT0xLzA/MTpuPT0xLzA/LTE6KGUtbikvKGkodCkraSgtdCkpfX0pfSwxMTc3MzpmdW5jdGlvbih0LGUsbil7big1MTEyOCkoTWF0aCwiTWF0aCIsITApfSwxNTc2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmNlaWwsaT1NYXRoLmZsb29yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3RydW5jOmZ1bmN0aW9uKHQpe3JldHVybih0PjA/aTpvKSh0KX19KX0sNzE4Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oNzYyOTgpLHM9bigyNDU5NCksdT1uKDMwMjcyKSxsPW4oNTM0OTgpLGY9bigzMjE4NyksZD1uKDUwODY4KSxwPW4oMTMzMzQpLmYsaD1uKDk3MjU3KS5mLHY9bigzNzYyMCkuZixnPW4oODIzNTApLnRyaW0seT0iTnVtYmVyIixtPW8uTnVtYmVyLGI9bS5wcm90b3R5cGUseD1zKGQoYikpPT15LHc9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscyx1PWwodCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiB1JiZ1Lmxlbmd0aD4yKWlmKDQzPT09KGU9KHU9Zyh1KSkuY2hhckNvZGVBdCgwKSl8fDQ1PT09ZSl7aWYoODg9PT0obj11LmNoYXJDb2RlQXQoMikpfHwxMjA9PT1uKXJldHVybiBOYU59ZWxzZSBpZig0OD09PWUpe3N3aXRjaCh1LmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpyPTIsbz00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOnI9OCxvPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK3V9Zm9yKGE9KGk9dS5zbGljZSgyKSkubGVuZ3RoLGM9MDtjPGE7YysrKWlmKChzPWkuY2hhckNvZGVBdChjKSk8NDh8fHM+bylyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChpLHIpfXJldHVybit1fTtpZihpKHksIW0oIiAwbzEiKXx8IW0oIjBiMSIpfHxtKCIrMHgxIikpKXtmb3IodmFyIEUsQz1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDE/MDp0LG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIEMmJih4P2YoKGZ1bmN0aW9uKCl7Yi52YWx1ZU9mLmNhbGwobil9KSk6cyhuKSE9eSk/dShuZXcgbSh3KGUpKSxuLEMpOncoZSl9LGo9cj9wKG0pOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxrPTA7ai5sZW5ndGg+aztrKyspYyhtLEU9altrXSkmJiFjKEMsRSkmJnYoQyxFLGgobSxFKSk7Qy5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPUMsYShvLHksQyl9fSwyNjA2MzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sOTY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0Zpbml0ZTpuKDg5NTQyKX0pfSwzMzEwMDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNJbnRlZ2VyOm4oMzgyNTcpfSl9LDQxOTI4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc05hTjpmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19KX0sMTU4Njk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODI1NyksaT1NYXRoLmFicztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmkodCk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDg4NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sMzY5OTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sMTEyMjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyNDQ5Nyk7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUZsb2F0IT1vfSx7cGFyc2VGbG9hdDpvfSl9LDYzNzY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg0Nik7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUludCE9b30se3BhcnNlSW50Om99KX0sMTMwNjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDM0MTYpLGk9big1Mzk5NyksYT1uKDY4MjUzKSxjPW4oMzIxODcpLHM9MS4udG9GaXhlZCx1PU1hdGguZmxvb3IsbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lP246ZSUyPT0xP2wodCxlLTEsbip0KTpsKHQqdCxlLzIsbil9O3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6cyYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFjKChmdW5jdGlvbigpe3MuY2FsbCh7fSl9KSl9LHt0b0ZpeGVkOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixjLHM9aSh0aGlzKSxmPW8odCksZD1bMCwwLDAsMCwwLDBdLHA9IiIsaD0iMCIsdj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWU7KytuPDY7KXIrPXQqZFtuXSxkW25dPXIlMWU3LHI9dShyLzFlNyl9LGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTYsbj0wOy0tZT49MDspbis9ZFtlXSxkW2VdPXUobi90KSxuPW4ldCoxZTd9LHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9NixlPSIiOy0tdD49MDspaWYoIiIhPT1lfHwwPT09dHx8MCE9PWRbdF0pe3ZhciBuPVN0cmluZyhkW3RdKTtlPSIiPT09ZT9uOmUrYS5jYWxsKCIwIiw3LW4ubGVuZ3RoKStufXJldHVybiBlfTtpZihmPDB8fGY+MjApdGhyb3cgUmFuZ2VFcnJvcigiSW5jb3JyZWN0IGZyYWN0aW9uIGRpZ2l0cyIpO2lmKHMhPXMpcmV0dXJuIk5hTiI7aWYoczw9LTFlMjF8fHM+PTFlMjEpcmV0dXJuIFN0cmluZyhzKTtpZihzPDAmJihwPSItIixzPS1zKSxzPjFlLTIxKWlmKG49KGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10O24+PTQwOTY7KWUrPTEyLG4vPTQwOTY7Zm9yKDtuPj0yOyllKz0xLG4vPTI7cmV0dXJuIGV9KHMqbCgyLDY5LDEpKS02OSk8MD9zKmwoMiwtZSwxKTpzL2woMixlLDEpLG4qPTQ1MDM1OTk2MjczNzA0OTYsKGU9NTItZSk+MCl7Zm9yKHYoMCxuKSxyPWY7cj49NzspdigxZTcsMCksci09Nztmb3IodihsKDEwLHIsMSksMCkscj1lLTE7cj49MjM7KWcoMTw8MjMpLHItPTIzO2coMTw8ciksdigxLDEpLGcoMiksaD15KCl9ZWxzZSB2KDAsbiksdigxPDwtZSwwKSxoPXkoKSthLmNhbGwoIjAiLGYpO3JldHVybiBoPWY+MD9wKygoYz1oLmxlbmd0aCk8PWY/IjAuIithLmNhbGwoIjAiLGYtYykraDpoLnNsaWNlKDAsYy1mKSsiLiIraC5zbGljZShjLWYpKTpwK2h9fSl9LDMyMjkzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTM5OTcpLGE9MS4udG9QcmVjaXNpb247cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiIxIiE9PWEuY2FsbCgxLHZvaWQgMCl9KSl8fCFvKChmdW5jdGlvbigpe2EuY2FsbCh7fSl9KSl9LHt0b1ByZWNpc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9hLmNhbGwoaSh0aGlzKSk6YS5jYWxsKGkodGhpcyksdCl9fSl9LDM3NDgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg2ODUpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuYXNzaWduIT09b30se2Fzc2lnbjpvfSl9LDQ1NTUwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohbig2MjU1Nil9LHtjcmVhdGU6big1MDg2OCl9KX0sMTkyNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVHZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse2dldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDUxMTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydGllczpuKDg2NDAxKX0pfSw1ODE2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnR5Om4oMzc2MjApLmZ9KX0sOTEyMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVTZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse3NldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDg3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS5lbnRyaWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KX19KX0sNzU4MDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDUyMCksaT1uKDMyMTg3KSxhPW4oMTA1OTIpLGM9big5NjAzKS5vbkZyZWV6ZSxzPU9iamVjdC5mcmVlemU7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmkoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFvfSx7ZnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZhKHQpP3MoYyh0KSk6dH19KX0sNDYxNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsbil7aShlLHQsbil9KSx2b2lkIDAsITApLGV9fSl9LDE1MDc3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big5NTczKSxhPW4oOTcyNTcpLmYsYz1uKDYyNTU2KSxzPW8oKGZ1bmN0aW9uKCl7YSgxKX0pKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWN8fHMsc2hhbTohY30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSl9LDU4MzI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9bigyNDQxNSksYT1uKDk1NzMpLGM9big5NzI1Nykscz1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPWEodCksbz1jLmYsdT1pKHIpLGw9e30sZj0wO3UubGVuZ3RoPmY7KXZvaWQgMCE9PShuPW8ocixlPXVbZisrXSkpJiZzKGwsZSxuKTtyZXR1cm4gbH19KX0sNjA1MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDI2OTM3KS5mO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKX0pKX0se2dldE93blByb3BlcnR5TmFtZXM6aX0pfSw3NDk1MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big2NDk2NSksYz1uKDcxNjA4KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpLHNoYW06IWN9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19KX0sNTE2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRXh0ZW5zaWJsZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCFhfHxhKHQpKX19KX0sODk3NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc0Zyb3plbjtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNGcm96ZW46ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sMTgzNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc1NlYWxlZDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNTZWFsZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sNTQ3ODE6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2lzOm4oNzY0ODIpfSl9LDkyNTI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxOTIwOSksaT1uKDI1NTA3KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7aSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LDcyNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDUzNDk4KSxzPW4oNjQ5NjUpLHU9big5NzI1NykuZjtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2xvb2t1cEdldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLG49YSh0aGlzKSxyPWModCwhMCk7ZG97aWYoZT11KG4scikpcmV0dXJuIGUuZ2V0fXdoaWxlKG49cyhuKSl9fSl9LDEwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5zZXR9d2hpbGUobj1zKG4pKX19KX0sOTMyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtyZXR1cm4gcyYmbyh0KT9zKGkodCkpOnR9fSl9LDU2MTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big5NjAzKS5vbkZyZWV6ZSxhPW4oNzQ1MjApLGM9bigzMjE4Nykscz1PYmplY3Quc2VhbDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtzZWFsOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNDE0NTY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOm4oNzE4NDIpfSl9LDM0NTI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwNjEzKSxvPW4oOTI5MTMpLGk9bigxOTc1OCk7cnx8byhPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIsaSx7dW5zYWZlOiEwfSl9LDcyODUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzU2NykudmFsdWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSwxOTQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sMzM0Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxNzYyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDgzMDgzKSxhPW4oMzExNSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1pLmYoZSkscj1uLnJlc29sdmUscz1uLnJlamVjdCx1PWEoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGk9W10sYT0wLHM9MTtjKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWErKyxjPSExO2kucHVzaCh2b2lkIDApLHMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6dH0sLS1zfHxyKGkpKX0pLChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6InJlamVjdGVkIixyZWFzb246dH0sLS1zfHxyKGkpKX0pKX0pKSwtLXN8fHIoaSl9KSk7cmV0dXJuIHUuZXJyb3ImJnModS52YWx1ZSksbi5wcm9taXNlfX0pfSw0MjQ5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDM5NDU3KSxhPW4oMzIxODcpLGM9big3NzAxKSxzPW4oMTM5NzkpLHU9big2MzEzNCksbD1uKDkyOTEzKTtyKHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhaSYmYSgoZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5maW5hbGx5LmNhbGwoe3RoZW46ZnVuY3Rpb24oKXt9fSwoZnVuY3Rpb24oKXt9KSl9KSl9LHtmaW5hbGx5OmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyxjKCJQcm9taXNlIikpLG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBufSkpfTp0LG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgbn0pKX06dCl9fSksb3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGl8fGkucHJvdG90eXBlLmZpbmFsbHl8fGwoaS5wcm90b3R5cGUsImZpbmFsbHkiLGMoIlByb21pc2UiKS5wcm90b3R5cGUuZmluYWxseSl9LDExNjg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGEsYz1uKDE0MDQ0KSxzPW4oNjU2NzIpLHU9big4OTU1OCksbD1uKDc3MDEpLGY9bigzOTQ1NyksZD1uKDkyOTEzKSxwPW4oMTkyNiksaD1uKDUxMTI4KSx2PW4oNjc1MzgpLGc9bigxMDU5MikseT1uKDg2NDcwKSxtPW4oNTkzNzkpLGI9bigyNDU5NCkseD1uKDc2NzczKSx3PW4oNDEzMzQpLEU9big0Nzk2KSxDPW4oMTM5NzkpLGo9bigyMTc0NCkuc2V0LGs9big2NTU1NSksUz1uKDYzMTM0KSxPPW4oODM2MjApLEk9big4MzA4MyksQT1uKDMxMTUpLE09big4OTgyNyksVD1uKDY0NTA0KSxfPW4oMjM3MjQpLFI9big3OTA3MSksTD1fKCJzcGVjaWVzIiksUD0iUHJvbWlzZSIsTj1NLmdldCxEPU0uc2V0LEY9TS5nZXR0ZXJGb3IoUCksVT1mLEI9dS5UeXBlRXJyb3Isej11LmRvY3VtZW50LFY9dS5wcm9jZXNzLEg9bCgiZmV0Y2giKSxxPUkuZixXPXEsRz0icHJvY2VzcyI9PWIoViksWj0hISh6JiZ6LmNyZWF0ZUV2ZW50JiZ1LmRpc3BhdGNoRXZlbnQpLCQ9InVuaGFuZGxlZHJlamVjdGlvbiIsWT1UKFAsKGZ1bmN0aW9uKCl7aWYoISh4KFUpIT09U3RyaW5nKFUpKSl7aWYoNjY9PT1SKXJldHVybiEwO2lmKCFHJiYiZnVuY3Rpb24iIT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KXJldHVybiEwfWlmKHMmJiFVLnByb3RvdHlwZS5maW5hbGx5KXJldHVybiEwO2lmKFI+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoVSkpcmV0dXJuITE7dmFyIHQ9VS5yZXNvbHZlKDEpLGU9ZnVuY3Rpb24odCl7dCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXt9KSl9O3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVtMXT1lLCEodC50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2YgZSl9KSksSj1ZfHwhRSgoZnVuY3Rpb24odCl7VS5hbGwodCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfSkpLEs9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuISghZyh0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LFg9ZnVuY3Rpb24odCxlLG4pe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciByPWUucmVhY3Rpb25zO2soKGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWUudmFsdWUsaT0xPT1lLnN0YXRlLGE9MDtyLmxlbmd0aD5hOyl7dmFyIGMscyx1LGw9clthKytdLGY9aT9sLm9rOmwuZmFpbCxkPWwucmVzb2x2ZSxwPWwucmVqZWN0LGg9bC5kb21haW47dHJ5e2Y/KGl8fCgyPT09ZS5yZWplY3Rpb24mJm50KHQsZSksZS5yZWplY3Rpb249MSksITA9PT1mP2M9bzooaCYmaC5lbnRlcigpLGM9ZihvKSxoJiYoaC5leGl0KCksdT0hMCkpLGM9PT1sLnByb21pc2U/cChCKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihzPUsoYykpP3MuY2FsbChjLGQscCk6ZChjKSk6cChvKX1jYXRjaCh0KXtoJiYhdSYmaC5leGl0KCkscCh0KX19ZS5yZWFjdGlvbnM9W10sZS5ub3RpZmllZD0hMSxuJiYhZS5yZWplY3Rpb24mJnR0KHQsZSl9KSl9fSxRPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvO1o/KChyPXouY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KHQsITEsITApLHUuZGlzcGF0Y2hFdmVudChyKSk6cj17cHJvbWlzZTplLHJlYXNvbjpufSwobz11WyJvbiIrdF0pP28ocik6dD09PSQmJk8oIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsbil9LHR0PWZ1bmN0aW9uKHQsZSl7ai5jYWxsKHUsKGZ1bmN0aW9uKCl7dmFyIG4scj1lLnZhbHVlO2lmKGV0KGUpJiYobj1BKChmdW5jdGlvbigpe0c/Vi5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLHIsdCk6USgkLHQscil9KSksZS5yZWplY3Rpb249R3x8ZXQoZSk/MjoxLG4uZXJyb3IpKXRocm93IG4udmFsdWV9KSl9LGV0PWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sbnQ9ZnVuY3Rpb24odCxlKXtqLmNhbGwodSwoZnVuY3Rpb24oKXtHP1YuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsdCk6USgicmVqZWN0aW9uaGFuZGxlZCIsdCxlLnZhbHVlKX0pKX0scnQ9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKG8pe3QoZSxuLG8scil9fSxvdD1mdW5jdGlvbih0LGUsbixyKXtlLmRvbmV8fChlLmRvbmU9ITAsciYmKGU9ciksZS52YWx1ZT1uLGUuc3RhdGU9MixYKHQsZSwhMCkpfSxpdD1mdW5jdGlvbih0LGUsbixyKXtpZighZS5kb25lKXtlLmRvbmU9ITAsciYmKGU9cik7dHJ5e2lmKHQ9PT1uKXRocm93IEIoIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7dmFyIG89SyhuKTtvP2soKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtvLmNhbGwobixydChpdCx0LHIsZSkscnQob3QsdCxyLGUpKX1jYXRjaChuKXtvdCh0LHIsbixlKX19KSk6KGUudmFsdWU9bixlLnN0YXRlPTEsWCh0LGUsITEpKX1jYXRjaChuKXtvdCh0LHtkb25lOiExfSxuLGUpfX19O1kmJihVPWZ1bmN0aW9uKHQpe20odGhpcyxVLFApLHkodCksci5jYWxsKHRoaXMpO3ZhciBlPU4odGhpcyk7dHJ5e3QocnQoaXQsdGhpcyxlKSxydChvdCx0aGlzLGUpKX1jYXRjaCh0KXtvdCh0aGlzLGUsdCl9fSwocj1mdW5jdGlvbih0KXtEKHRoaXMse3R5cGU6UCxkb25lOiExLG5vdGlmaWVkOiExLHBhcmVudDohMSxyZWFjdGlvbnM6W10scmVqZWN0aW9uOiExLHN0YXRlOjAsdmFsdWU6dm9pZCAwfSl9KS5wcm90b3R5cGU9cChVLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciBuPUYodGhpcykscj1xKEModGhpcyxVKSk7cmV0dXJuIHIub2s9ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQsci5mYWlsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLHIuZG9tYWluPUc/Vi5kb21haW46dm9pZCAwLG4ucGFyZW50PSEwLG4ucmVhY3Rpb25zLnB1c2gociksMCE9bi5zdGF0ZSYmWCh0aGlzLG4sITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksbz1mdW5jdGlvbigpe3ZhciB0PW5ldyByLGU9Tih0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cnQoaXQsdCxlKSx0aGlzLnJlamVjdD1ydChvdCx0LGUpfSxJLmY9cT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVV8fHQ9PT1pP25ldyBvKHQpOlcodCl9LHN8fCJmdW5jdGlvbiIhPXR5cGVvZiBmfHwoYT1mLnByb3RvdHlwZS50aGVuLGQoZi5wcm90b3R5cGUsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBVKChmdW5jdGlvbih0LGUpe2EuY2FsbChuLHQsZSl9KSkudGhlbih0LGUpfSkse3Vuc2FmZTohMH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBIJiZjKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gUyhVLEguYXBwbHkodSxhcmd1bWVudHMpKX19KSkpLGMoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDpZfSx7UHJvbWlzZTpVfSksaChVLFAsITEsITApLHYoUCksaT1sKFApLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOll9LHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9cSh0aGlzKTtyZXR1cm4gZS5yZWplY3QuY2FsbCh2b2lkIDAsdCksZS5wcm9taXNlfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOnN8fFl9LHtyZXNvbHZlOmZ1bmN0aW9uKHQpe3JldHVybiBTKHMmJnRoaXM9PT1pP1U6dGhpcyx0KX19KSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpKfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZXNvbHZlLG89bi5yZWplY3QsaT1BKChmdW5jdGlvbigpe3ZhciBuPXkoZS5yZXNvbHZlKSxpPVtdLGE9MCxjPTE7dyh0LChmdW5jdGlvbih0KXt2YXIgcz1hKyssdT0hMTtpLnB1c2godm9pZCAwKSxjKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7dXx8KHU9ITAsaVtzXT10LC0tY3x8cihpKSl9KSxvKX0pKSwtLWN8fHIoaSl9KSk7cmV0dXJuIGkuZXJyb3ImJm8oaS52YWx1ZSksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZWplY3Qsbz1BKChmdW5jdGlvbigpe3ZhciBvPXkoZS5yZXNvbHZlKTt3KHQsKGZ1bmN0aW9uKHQpe28uY2FsbChlLHQpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBvLmVycm9yJiZyKG8udmFsdWUpLG4ucHJvbWlzZX19KX0sMjkyODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDMyMTg3KSxzPW8oIlJlZmxlY3QiLCJhcHBseSIpLHU9RnVuY3Rpb24uYXBwbHk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDohYygoZnVuY3Rpb24oKXtzKChmdW5jdGlvbigpe30pKX0pKX0se2FwcGx5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaSh0KSxhKG4pLHM/cyh0LGUsbik6dS5jYWxsKHQsZSxuKX19KX0sNjE5NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDEwNTkyKSxzPW4oNTA4NjgpLHU9big3MzczOSksbD1uKDMyMTg3KSxmPW8oIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxkPWwoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKGYoKGZ1bmN0aW9uKCl7fSksW10sdClpbnN0YW5jZW9mIHQpfSkpLHA9IWwoKGZ1bmN0aW9uKCl7ZigoZnVuY3Rpb24oKXt9KSl9KSksaD1kfHxwO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6aCxzaGFtOmh9LHtjb25zdHJ1Y3Q6ZnVuY3Rpb24odCxlKXtpKHQpLGEoZSk7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3Q6aShhcmd1bWVudHNbMl0pO2lmKHAmJiFkKXJldHVybiBmKHQsZSxuKTtpZih0PT1uKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdKX12YXIgcj1bbnVsbF07cmV0dXJuIHIucHVzaC5hcHBseShyLGUpLG5ldyh1LmFwcGx5KHQscikpfXZhciBvPW4ucHJvdG90eXBlLGw9cyhjKG8pP286T2JqZWN0LnByb3RvdHlwZSksaD1GdW5jdGlvbi5hcHBseS5jYWxsKHQsbCxlKTtyZXR1cm4gYyhoKT9oOmx9fSl9LDI2OTg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPW4oMzc2MjApO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pKSxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2kodCk7dmFyIHI9YShlLCEwKTtpKG4pO3RyeXtyZXR1cm4gYy5mKHQscixuKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDEzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDk3MjU3KS5mO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7dmFyIG49aShvKHQpLGUpO3JldHVybiEobiYmIW4uY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbZV19fSl9LDQ2NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDk3MjU3KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohb30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhLmYoaSh0KSxlKX19KX0sNzAxMzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3MTYwOCl9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sODMzMTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDg3NTc5KSxhPW4oNzYyOTgpLGM9big5NzI1Nykscz1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXQ6ZnVuY3Rpb24gdChlLG4pe3ZhciByLHUsbD1hcmd1bWVudHMubGVuZ3RoPDM/ZTphcmd1bWVudHNbMl07cmV0dXJuIGkoZSk9PT1sP2Vbbl06KHI9Yy5mKGUsbikpP2EociwidmFsdWUiKT9yLnZhbHVlOnZvaWQgMD09PXIuZ2V0P3ZvaWQgMDpyLmdldC5jYWxsKGwpOm8odT1zKGUpKT90KHUsbixsKTp2b2lkIDB9fSl9LDYwODY1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH19KX0sNjc3MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSwhaXx8aSh0KX19KX0sOTY2Mzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtvd25LZXlzOm4oMjQ0MTUpfSl9LDM5NzMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3NDUyMCl9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtpKHQpO3RyeXt2YXIgZT1vKCJPYmplY3QiLCJwcmV2ZW50RXh0ZW5zaW9ucyIpO3JldHVybiBlJiZlKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sODU2ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDc5ODYxKSxhPW4oNzE4NDIpO2EmJnIoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQsZSl7byh0KSxpKGUpO3RyeXtyZXR1cm4gYSh0LGUpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sNzQxMTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDEwNTkyKSxhPW4oNzYyOTgpLGM9bigzMjE4Nykscz1uKDM3NjIwKSx1PW4oOTcyNTcpLGw9big2NDk2NSksZj1uKDE0MjA5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7dmFyIHQ9cy5mKHt9LCJhIix7Y29uZmlndXJhYmxlOiEwfSk7cmV0dXJuITEhPT1SZWZsZWN0LnNldChsKHQpLCJhIiwxLHQpfSkpfSx7c2V0OmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBjLGQscD1hcmd1bWVudHMubGVuZ3RoPDQ/ZTphcmd1bWVudHNbM10saD11LmYobyhlKSxuKTtpZighaCl7aWYoaShkPWwoZSkpKXJldHVybiB0KGQsbixyLHApO2g9ZigwKX1pZihhKGgsInZhbHVlIikpe2lmKCExPT09aC53cml0YWJsZXx8IWkocCkpcmV0dXJuITE7aWYoYz11LmYocCxuKSl7aWYoYy5nZXR8fGMuc2V0fHwhMT09PWMud3JpdGFibGUpcmV0dXJuITE7Yy52YWx1ZT1yLHMuZihwLG4sYyl9ZWxzZSBzLmYocCxuLGYoMCxyKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PWguc2V0JiYoaC5zZXQuY2FsbChwLHIpLCEwKX19KX0sNDk0OTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oMzAyNzIpLGM9bigzNzYyMCkuZixzPW4oMTMzMzQpLmYsdT1uKDQzMjIzKSxsPW4oMjU0MTkpLGY9big5MjkxMyksZD1uKDMyMTg3KSxwPW4oNjc1MzgpLGg9bigyMzcyNCkoIm1hdGNoIiksdj1vLlJlZ0V4cCxnPXYucHJvdG90eXBlLHk9L2EvZyxtPS9hL2csYj1uZXcgdih5KSE9PXk7aWYociYmaSgiUmVnRXhwIiwhYnx8ZCgoZnVuY3Rpb24oKXtyZXR1cm4gbVtoXT0hMSx2KHkpIT15fHx2KG0pPT1tfHwiL2EvaSIhPXYoeSwiaSIpfSkpKSl7Zm9yKHZhciB4PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyBpbnN0YW5jZW9mIHgscj11KHQpLG89dm9pZCAwPT09ZTtyZXR1cm4hbiYmciYmdC5jb25zdHJ1Y3Rvcj09PXgmJm8/dDphKGI/bmV3IHYociYmIW8/dC5zb3VyY2U6dCxlKTp2KChyPXQgaW5zdGFuY2VvZiB4KT90LnNvdXJjZTp0LHImJm8/bC5jYWxsKHQpOmUpLG4/dGhpczpnLHgpfSx3PWZ1bmN0aW9uKHQpe3QgaW4geHx8Yyh4LHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdlt0XX0sc2V0OmZ1bmN0aW9uKGUpe3ZbdF09ZX19KX0sRT1zKHYpLEM9MDtFLmxlbmd0aD5DOyl3KEVbQysrXSk7Zy5jb25zdHJ1Y3Rvcj14LHgucHJvdG90eXBlPWcsZihvLCJSZWdFeHAiLHgpfXAoIlJlZ0V4cCIpfSw4NzIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzODU5OCk7cih7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PW99LHtleGVjOm99KX0sMTgyNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDI1NDE5KTtyJiYiZyIhPS8uL2cuZmxhZ3MmJm8uZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6aX0pfSwzNzU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MjkxMyksbz1uKDg3NTc5KSxpPW4oMzIxODcpLGE9bigyNTQxOSksYz0idG9TdHJpbmciLHM9UmVnRXhwLnByb3RvdHlwZSx1PXMudG9TdHJpbmcsbD1pKChmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9dS5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSkpLGY9dS5uYW1lIT1jOyhsfHxmKSYmcihSZWdFeHAucHJvdG90eXBlLGMsKGZ1bmN0aW9uKCl7dmFyIHQ9byh0aGlzKSxlPVN0cmluZyh0LnNvdXJjZSksbj10LmZsYWdzO3JldHVybiIvIitlKyIvIitTdHJpbmcodm9pZCAwPT09biYmdCBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gcyk/YS5jYWxsKHQpOm4pfSkse3Vuc2FmZTohMH0pfSw3NDA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiU2V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSw0MTc3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYW5jaG9yIil9LHthbmNob3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsIm5hbWUiLHQpfX0pfSwzMDQwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmlnIil9LHtiaWc6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiaWciLCIiLCIiKX19KX0sMTgxNzU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJsaW5rIil9LHtibGluazpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDY2ODk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJib2xkIil9LHtib2xkOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYiIsIiIsIiIpfX0pfSwxNTM3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MDE0MCkuY29kZUF0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludEF0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDk3Njg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuZW5kc1dpdGgsZD1NYXRoLm1pbixwPXUoImVuZHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsImVuZHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcocyh0aGlzKSk7Yyh0KTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPWEoZS5sZW5ndGgpLG89dm9pZCAwPT09bj9yOmQoYShuKSxyKSxpPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxpLG8pOmUuc2xpY2Uoby1pLmxlbmd0aCxvKT09PWl9fSl9LDg1NzY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmaXhlZCIpfSx7Zml4ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJ0dCIsIiIsIiIpfX0pfSw4NDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250Y29sb3IiKX0se2ZvbnRjb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJmb250IiwiY29sb3IiLHQpfX0pfSw5MjE5MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZm9udHNpemUiKX0se2ZvbnRzaXplOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJzaXplIix0KX19KX0sMTA3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Njk3NiksaT1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITAsZm9yY2VkOiEhYSYmMSE9YS5sZW5ndGh9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPVtdLHI9YXJndW1lbnRzLmxlbmd0aCxhPTA7cj5hOyl7aWYoZT0rYXJndW1lbnRzW2ErK10sbyhlLDExMTQxMTEpIT09ZSl0aHJvdyBSYW5nZUVycm9yKGUrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7bi5wdXNoKGU8NjU1MzY/aShlKTppKDU1Mjk2KygoZS09NjU1MzYpPj4xMCksZSUxMDI0KzU2MzIwKSl9cmV0dXJuIG4uam9pbigiIil9fSl9LDc0NTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDk5MzQ2KSxpPW4oNzAxMzIpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW4oOTM5MTUpKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+U3RyaW5nKGkodGhpcykpLmluZGV4T2Yobyh0KSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDEyMTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJpdGFsaWNzIil9LHtpdGFsaWNzOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiaSIsIiIsIiIpfX0pfSw4MjIwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAxNDApLmNoYXJBdCxvPW4oODk4MjcpLGk9big0NjA2MSksYT0iU3RyaW5nIEl0ZXJhdG9yIixjPW8uc2V0LHM9by5nZXR0ZXJGb3IoYSk7aShTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKHQpe2ModGhpcyx7dHlwZTphLHN0cmluZzpTdHJpbmcodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1zKHRoaXMpLG49ZS5zdHJpbmcsbz1lLmluZGV4O3JldHVybiBvPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXIobixvKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KSl9LDI2MDE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJsaW5rIil9LHtsaW5rOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImEiLCJocmVmIix0KX19KX0sODEyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big4NzU3OSksdT1uKDI0NTk0KSxsPW4oNDMyMjMpLGY9bigyNTQxOSksZD1uKDY2OTcxKSxwPW4oMzIxODcpLGg9bigyMzcyNCksdj1uKDEzOTc5KSxnPW4oNTMxNDEpLHk9big4OTgyNyksbT1uKDY1NjcyKSxiPWgoIm1hdGNoQWxsIikseD0iUmVnRXhwIFN0cmluZyIsdz0iUmVnRXhwIFN0cmluZyBJdGVyYXRvciIsRT15LnNldCxDPXkuZ2V0dGVyRm9yKHcpLGo9UmVnRXhwLnByb3RvdHlwZSxrPWouZXhlYyxTPSIiLm1hdGNoQWxsLE89ISFTJiYhcCgoZnVuY3Rpb24oKXsiYSIubWF0Y2hBbGwoLy4vKX0pKSxJPW8oKGZ1bmN0aW9uKHQsZSxuLHIpe0UodGhpcyx7dHlwZTp3LHJlZ2V4cDp0LHN0cmluZzplLGdsb2JhbDpuLHVuaWNvZGU6cixkb25lOiExfSl9KSx4LChmdW5jdGlvbigpe3ZhciB0PUModGhpcyk7aWYodC5kb25lKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGU9dC5yZWdleHAsbj10LnN0cmluZyxyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe2lmKCJvYmplY3QiIT10eXBlb2Yobj1yLmNhbGwodCxlKSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgZXhlYyByZXN1bHQiKTtyZXR1cm4gbn1yZXR1cm4gay5jYWxsKHQsZSl9KGUsbik7cmV0dXJuIG51bGw9PT1yP3t2YWx1ZTp2b2lkIDAsZG9uZTp0LmRvbmU9ITB9OnQuZ2xvYmFsPygiIj09U3RyaW5nKHJbMF0pJiYoZS5sYXN0SW5kZXg9ZyhuLGEoZS5sYXN0SW5kZXgpLHQudW5pY29kZSkpLHt2YWx1ZTpyLGRvbmU6ITF9KToodC5kb25lPSEwLHt2YWx1ZTpyLGRvbmU6ITF9KX0pKSxBPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYyx1PXModGhpcyksbD1TdHJpbmcodCk7cmV0dXJuIGU9dih1LFJlZ0V4cCksdm9pZCAwPT09KG49dS5mbGFncykmJnUgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIGopJiYobj1mLmNhbGwodSkpLHI9dm9pZCAwPT09bj8iIjpTdHJpbmcobiksbz1uZXcgZShlPT09UmVnRXhwP3Uuc291cmNlOnUsciksaT0hIX5yLmluZGV4T2YoImciKSxjPSEhfnIuaW5kZXhPZigidSIpLG8ubGFzdEluZGV4PWEodS5sYXN0SW5kZXgpLG5ldyBJKG8sbCxpLGMpfTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOk99LHttYXRjaEFsbDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbz1pKHRoaXMpO2lmKG51bGwhPXQpe2lmKGwodCkmJiF+U3RyaW5nKGkoImZsYWdzImluIGo/dC5mbGFnczpmLmNhbGwodCkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLm1hdGNoQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtpZih2b2lkIDA9PT0obj10W2JdKSYmbSYmIlJlZ0V4cCI9PXUodCkmJihuPUEpLG51bGwhPW4pcmV0dXJuIGMobikuY2FsbCh0LG8pfWVsc2UgaWYoTylyZXR1cm4gUy5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIGU9U3RyaW5nKG8pLHI9bmV3IFJlZ0V4cCh0LCJnIiksbT9BLmNhbGwocixlKTpyW2JdKGUpfX0pLG18fGIgaW4ganx8ZChqLGIsQSl9LDY1MDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMjc4ODQpLGE9big3MDEzMiksYz1uKDUzMTQxKSxzPW4oMzU0NTUpO3IoIm1hdGNoIiwxLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKGUpe3ZhciBuPWEodGhpcykscj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLG4pOm5ldyBSZWdFeHAoZSlbdF0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIHI9bihlLHQsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBhPW8odCksdT1TdHJpbmcodGhpcyk7aWYoIWEuZ2xvYmFsKXJldHVybiBzKGEsdSk7dmFyIGw9YS51bmljb2RlO2EubGFzdEluZGV4PTA7Zm9yKHZhciBmLGQ9W10scD0wO251bGwhPT0oZj1zKGEsdSkpOyl7dmFyIGg9U3RyaW5nKGZbMF0pO2RbcF09aCwiIj09PWgmJihhLmxhc3RJbmRleD1jKHUsaShhLmxhc3RJbmRleCksbCkpLHArK31yZXR1cm4gMD09PXA/bnVsbDpkfV19KSl9LDQ0MDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI2NTczKS5lbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwzODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLnN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big0MjE4NCl9LHtwYWRTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDUxMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk1NzMpLGk9bigyNzg4NCk7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITB9LHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8odC5yYXcpLG49aShlLmxlbmd0aCkscj1hcmd1bWVudHMubGVuZ3RoLGE9W10sYz0wO24+YzspYS5wdXNoKFN0cmluZyhlW2MrK10pKSxjPHImJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW2NdKSk7cmV0dXJuIGEuam9pbigiIil9fSl9LDE4ODIzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwZWF0Om4oNjgyNTMpfSl9LDMzMzIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDQzNDE2KSxzPW4oNzAxMzIpLHU9big1MzE0MSksbD1uKDM1NDU1KSxmPU1hdGgubWF4LGQ9TWF0aC5taW4scD1NYXRoLmZsb29yLGg9L1wkKFskJidgXXxcZFxkP3w8W14+XSo+KS9nLHY9L1wkKFskJidgXXxcZFxkPykvZztyKCJyZXBsYWNlIiwyLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKG4scil7dmFyIG89cyh0aGlzKSxpPW51bGw9PW4/dm9pZCAwOm5bdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKG4sbyxyKTplLmNhbGwoU3RyaW5nKG8pLG4scil9LGZ1bmN0aW9uKHQsaSl7dmFyIHM9bihlLHQsdGhpcyxpKTtpZihzLmRvbmUpcmV0dXJuIHMudmFsdWU7dmFyIHA9byh0KSxoPVN0cmluZyh0aGlzKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiBpO3Z8fChpPVN0cmluZyhpKSk7dmFyIGc9cC5nbG9iYWw7aWYoZyl7dmFyIHk9cC51bmljb2RlO3AubGFzdEluZGV4PTB9Zm9yKHZhciBtPVtdOzspe3ZhciBiPWwocCxoKTtpZihudWxsPT09YilicmVhaztpZihtLnB1c2goYiksIWcpYnJlYWs7IiI9PT1TdHJpbmcoYlswXSkmJihwLmxhc3RJbmRleD11KGgsYShwLmxhc3RJbmRleCkseSkpfWZvcih2YXIgeCx3PSIiLEU9MCxDPTA7QzxtLmxlbmd0aDtDKyspe2I9bVtDXTtmb3IodmFyIGo9U3RyaW5nKGJbMF0pLGs9ZihkKGMoYi5pbmRleCksaC5sZW5ndGgpLDApLFM9W10sTz0xO088Yi5sZW5ndGg7TysrKVMucHVzaCh2b2lkIDA9PT0oeD1iW09dKT94OlN0cmluZyh4KSk7dmFyIEk9Yi5ncm91cHM7aWYodil7dmFyIEE9W2pdLmNvbmNhdChTLGssaCk7dm9pZCAwIT09SSYmQS5wdXNoKEkpO3ZhciBNPVN0cmluZyhpLmFwcGx5KHZvaWQgMCxBKSl9ZWxzZSBNPXIoaixoLGssUyxJLGkpO2s+PUUmJih3Kz1oLnNsaWNlKEUsaykrTSxFPWsrai5sZW5ndGgpfXJldHVybiB3K2guc2xpY2UoRSl9XTtmdW5jdGlvbiByKHQsbixyLG8sYSxjKXt2YXIgcz1yK3QubGVuZ3RoLHU9by5sZW5ndGgsbD12O3JldHVybiB2b2lkIDAhPT1hJiYoYT1pKGEpLGw9aCksZS5jYWxsKGMsbCwoZnVuY3Rpb24oZSxpKXt2YXIgYztzd2l0Y2goaS5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIHQ7Y2FzZSJgIjpyZXR1cm4gbi5zbGljZSgwLHIpO2Nhc2UiJyI6cmV0dXJuIG4uc2xpY2Uocyk7Y2FzZSI8IjpjPWFbaS5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbD0raTtpZigwPT09bClyZXR1cm4gZTtpZihsPnUpe3ZhciBmPXAobC8xMCk7cmV0dXJuIDA9PT1mP2U6Zjw9dT92b2lkIDA9PT1vW2YtMV0/aS5jaGFyQXQoMSk6b1tmLTFdK2kuY2hhckF0KDEpOmV9Yz1vW2wtMV19cmV0dXJuIHZvaWQgMD09PWM/IiI6Y30pKX19KSl9LDMzMDY1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oNzAxMzIpLGE9big3NjQ4MiksYz1uKDM1NDU1KTtyKCJzZWFyY2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49aSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGk9byh0KSxzPVN0cmluZyh0aGlzKSx1PWkubGFzdEluZGV4O2EodSwwKXx8KGkubGFzdEluZGV4PTApO3ZhciBsPWMoaSxzKTtyZXR1cm4gYShpLmxhc3RJbmRleCx1KXx8KGkubGFzdEluZGV4PXUpLG51bGw9PT1sPy0xOmwuaW5kZXh9XX0pKX0sNzQxMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInNtYWxsIil9LHtzbWFsbDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDE3NDk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDQzMjIzKSxpPW4oODc1NzkpLGE9big3MDEzMiksYz1uKDEzOTc5KSxzPW4oNTMxNDEpLHU9bigyNzg4NCksbD1uKDM1NDU1KSxmPW4oMzg1OTgpLGQ9bigzMjE4NykscD1bXS5wdXNoLGg9TWF0aC5taW4sdj00Mjk0OTY3Mjk1LGc9IWQoKGZ1bmN0aW9uKCl7cmV0dXJuIVJlZ0V4cCh2LCJ5Iil9KSk7cigic3BsaXQiLDIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iYyI9PSJhYmJjIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT0idGVzdCIuc3BsaXQoLyg/OikvLC0xKS5sZW5ndGh8fDIhPSJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xfHwiIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXt2YXIgcj1TdHJpbmcoYSh0aGlzKSksaT12b2lkIDA9PT1uP3Y6bj4+PjA7aWYoMD09PWkpcmV0dXJuW107aWYodm9pZCAwPT09dClyZXR1cm5bcl07aWYoIW8odCkpcmV0dXJuIGUuY2FsbChyLHQsaSk7Zm9yKHZhciBjLHMsdSxsPVtdLGQ9KHQuaWdub3JlQ2FzZT8iaSI6IiIpKyh0Lm11bHRpbGluZT8ibSI6IiIpKyh0LnVuaWNvZGU/InUiOiIiKSsodC5zdGlja3k/InkiOiIiKSxoPTAsZz1uZXcgUmVnRXhwKHQuc291cmNlLGQrImciKTsoYz1mLmNhbGwoZyxyKSkmJiEoKHM9Zy5sYXN0SW5kZXgpPmgmJihsLnB1c2goci5zbGljZShoLGMuaW5kZXgpKSxjLmxlbmd0aD4xJiZjLmluZGV4PHIubGVuZ3RoJiZwLmFwcGx5KGwsYy5zbGljZSgxKSksdT1jWzBdLmxlbmd0aCxoPXMsbC5sZW5ndGg+PWkpKTspZy5sYXN0SW5kZXg9PT1jLmluZGV4JiZnLmxhc3RJbmRleCsrO3JldHVybiBoPT09ci5sZW5ndGg/IXUmJmcudGVzdCgiIil8fGwucHVzaCgiIik6bC5wdXNoKHIuc2xpY2UoaCkpLGwubGVuZ3RoPmk/bC5zbGljZSgwLGkpOmx9OiIwIi5zcGxpdCh2b2lkIDAsMCkubGVuZ3RoP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJjA9PT1uP1tdOmUuY2FsbCh0aGlzLHQsbil9OmUsW2Z1bmN0aW9uKGUsbil7dmFyIG89YSh0aGlzKSxpPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKGUsbyxuKTpyLmNhbGwoU3RyaW5nKG8pLGUsbil9LGZ1bmN0aW9uKHQsbyl7dmFyIGE9bihyLHQsdGhpcyxvLHIhPT1lKTtpZihhLmRvbmUpcmV0dXJuIGEudmFsdWU7dmFyIGY9aSh0KSxkPVN0cmluZyh0aGlzKSxwPWMoZixSZWdFeHApLHk9Zi51bmljb2RlLG09KGYuaWdub3JlQ2FzZT8iaSI6IiIpKyhmLm11bHRpbGluZT8ibSI6IiIpKyhmLnVuaWNvZGU/InUiOiIiKSsoZz8ieSI6ImciKSxiPW5ldyBwKGc/ZjoiXig/OiIrZi5zb3VyY2UrIikiLG0pLHg9dm9pZCAwPT09bz92Om8+Pj4wO2lmKDA9PT14KXJldHVybltdO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gbnVsbD09PWwoYixkKT9bZF06W107Zm9yKHZhciB3PTAsRT0wLEM9W107RTxkLmxlbmd0aDspe2IubGFzdEluZGV4PWc/RTowO3ZhciBqLGs9bChiLGc/ZDpkLnNsaWNlKEUpKTtpZihudWxsPT09a3x8KGo9aCh1KGIubGFzdEluZGV4KyhnPzA6RSkpLGQubGVuZ3RoKSk9PT13KUU9cyhkLEUseSk7ZWxzZXtpZihDLnB1c2goZC5zbGljZSh3LEUpKSxDLmxlbmd0aD09PXgpcmV0dXJuIEM7Zm9yKHZhciBTPTE7Uzw9ay5sZW5ndGgtMTtTKyspaWYoQy5wdXNoKGtbU10pLEMubGVuZ3RoPT09eClyZXR1cm4gQztFPXc9an19cmV0dXJuIEMucHVzaChkLnNsaWNlKHcpKSxDfV19KSwhZyl9LDgwMzYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuc3RhcnRzV2l0aCxkPU1hdGgubWluLHA9dSgic3RhcnRzV2l0aCIpO28oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6ISEobHx8cHx8KHI9aShTdHJpbmcucHJvdG90eXBlLCJzdGFydHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtzdGFydHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWEoZChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlLmxlbmd0aCkpLHI9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLHIsbik6ZS5zbGljZShuLG4rci5sZW5ndGgpPT09cn19KX0sMjgwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN0cmlrZSIpfSx7c3RyaWtlOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDY3OTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdWIiKX0se3N1YjpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw0NDA1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3VwIil9LHtzdXA6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdXAiLCIiLCIiKX19KX0sNzQ3OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLmVuZCxpPW4oODQ3NTQpKCJ0cmltRW5kIiksYT1pP2Z1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9OiIiLnRyaW1FbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbUVuZDphLHRyaW1SaWdodDphfSl9LDY5MTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS5zdGFydCxpPW4oODQ3NTQpKCJ0cmltU3RhcnQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbVN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6aX0se3RyaW1TdGFydDphLHRyaW1MZWZ0OmF9KX0sNDMzOTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnRyaW07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDg0NzU0KSgidHJpbSIpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfX0pfSw1MTA5MDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImFzeW5jSXRlcmF0b3IiKX0sMjQ3ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDc2Mjk4KSxjPW4oMTA1OTIpLHM9bigzNzYyMCkuZix1PW4oOTk2MjUpLGw9aS5TeW1ib2w7aWYobyYmImZ1bmN0aW9uIj09dHlwZW9mIGwmJighKCJkZXNjcmlwdGlvbiJpbiBsLnByb3RvdHlwZSl8fHZvaWQgMCE9PWwoKS5kZXNjcmlwdGlvbikpe3ZhciBmPXt9LGQ9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPDF8fHZvaWQgMD09PWFyZ3VtZW50c1swXT92b2lkIDA6U3RyaW5nKGFyZ3VtZW50c1swXSksZT10aGlzIGluc3RhbmNlb2YgZD9uZXcgbCh0KTp2b2lkIDA9PT10P2woKTpsKHQpO3JldHVybiIiPT09dCYmKGZbZV09ITApLGV9O3UoZCxsKTt2YXIgcD1kLnByb3RvdHlwZT1sLnByb3RvdHlwZTtwLmNvbnN0cnVjdG9yPWQ7dmFyIGg9cC50b1N0cmluZyx2PSJTeW1ib2wodGVzdCkiPT1TdHJpbmcobCgidGVzdCIpKSxnPS9eU3ltYm9sXCgoLiopXClbXildKyQvO3MocCwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9Yyh0aGlzKT90aGlzLnZhbHVlT2YoKTp0aGlzLGU9aC5jYWxsKHQpO2lmKGEoZix0KSlyZXR1cm4iIjt2YXIgbj12P2Uuc2xpY2UoNywtMSk6ZS5yZXBsYWNlKGcsIiQxIik7cmV0dXJuIiI9PT1uP3ZvaWQgMDpufX0pLHIoe2dsb2JhbDohMCxmb3JjZWQ6ITB9LHtTeW1ib2w6ZH0pfX0sODkxNzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImhhc0luc3RhbmNlIil9LDU0Nzg2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXNDb25jYXRTcHJlYWRhYmxlIil9LDEyODE2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXRlcmF0b3IiKX0sNjU2Nzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big3NzAxKSxhPW4oNjU2NzIpLGM9big2MjU1Nikscz1uKDkwMTQpLHU9bigxNjQxMCksbD1uKDMyMTg3KSxmPW4oNzYyOTgpLGQ9big2MTk5KSxwPW4oMTA1OTIpLGg9big4NzU3OSksdj1uKDE5MjA5KSxnPW4oOTU3MykseT1uKDUzNDk4KSxtPW4oMTQyMDkpLGI9big1MDg2OCkseD1uKDI1NTA3KSx3PW4oMTMzMzQpLEU9bigyNjkzNyksQz1uKDU2OTkxKSxqPW4oOTcyNTcpLGs9bigzNzYyMCksUz1uKDQxNjI4KSxPPW4oNjY5NzEpLEk9big5MjkxMyksQT1uKDYyMDU0KSxNPW4oODMxOTcpLFQ9bigyMzA3MCksXz1uKDY3MjkpLFI9bigyMzcyNCksTD1uKDczOTE2KSxQPW4oOTIyNzUpLE49big1MTEyOCksRD1uKDg5ODI3KSxGPW4oMzAwMjUpLmZvckVhY2gsVT1NKCJoaWRkZW4iKSxCPSJTeW1ib2wiLHo9UigidG9QcmltaXRpdmUiKSxWPUQuc2V0LEg9RC5nZXR0ZXJGb3IoQikscT1PYmplY3QucHJvdG90eXBlLFc9by5TeW1ib2wsRz1pKCJKU09OIiwic3RyaW5naWZ5IiksWj1qLmYsJD1rLmYsWT1FLmYsSj1TLmYsSz1BKCJzeW1ib2xzIiksWD1BKCJvcC1zeW1ib2xzIiksUT1BKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksdHQ9QSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpLGV0PUEoIndrcyIpLG50PW8uUU9iamVjdCxydD0hbnR8fCFudC5wcm90b3R5cGV8fCFudC5wcm90b3R5cGUuZmluZENoaWxkLG90PWMmJmwoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWIoJCh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiAkKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbih0LGUsbil7dmFyIHI9WihxLGUpO3ImJmRlbGV0ZSBxW2VdLCQodCxlLG4pLHImJnQhPT1xJiYkKHEsZSxyKX06JCxpdD1mdW5jdGlvbih0LGUpe3ZhciBuPUtbdF09YihXLnByb3RvdHlwZSk7cmV0dXJuIFYobix7dHlwZTpCLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxjfHwobi5kZXNjcmlwdGlvbj1lKSxufSxhdD1zJiYic3ltYm9sIj09dHlwZW9mIFcuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHQpaW5zdGFuY2VvZiBXfSxjdD1mdW5jdGlvbih0LGUsbil7dD09PXEmJmN0KFgsZSxuKSxoKHQpO3ZhciByPXkoZSwhMCk7cmV0dXJuIGgobiksZihLLHIpPyhuLmVudW1lcmFibGU/KGYodCxVKSYmdFtVXVtyXSYmKHRbVV1bcl09ITEpLG49YihuLHtlbnVtZXJhYmxlOm0oMCwhMSl9KSk6KGYodCxVKXx8JCh0LFUsbSgxLHt9KSksdFtVXVtyXT0hMCksb3QodCxyLG4pKTokKHQscixuKX0sc3Q9ZnVuY3Rpb24odCxlKXtoKHQpO3ZhciBuPWcoZSkscj14KG4pLmNvbmNhdChkdChuKSk7cmV0dXJuIEYociwoZnVuY3Rpb24oZSl7YyYmIXV0LmNhbGwobixlKXx8Y3QodCxlLG5bZV0pfSkpLHR9LHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXkodCwhMCksbj1KLmNhbGwodGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1xJiZmKEssZSkmJiFmKFgsZSkpJiYoIShufHwhZih0aGlzLGUpfHwhZihLLGUpfHxmKHRoaXMsVSkmJnRoaXNbVV1bZV0pfHxuKX0sbHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1nKHQpLHI9eShlLCEwKTtpZihuIT09cXx8IWYoSyxyKXx8ZihYLHIpKXt2YXIgbz1aKG4scik7cmV0dXJuIW98fCFmKEsscil8fGYobixVKSYmbltVXVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LGZ0PWZ1bmN0aW9uKHQpe3ZhciBlPVkoZyh0KSksbj1bXTtyZXR1cm4gRihlLChmdW5jdGlvbih0KXtmKEssdCl8fGYoVCx0KXx8bi5wdXNoKHQpfSkpLG59LGR0PWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT1xLG49WShlP1g6Zyh0KSkscj1bXTtyZXR1cm4gRihuLChmdW5jdGlvbih0KXshZihLLHQpfHxlJiYhZihxLHQpfHxyLnB1c2goS1t0XSl9KSkscn07KHN8fChXPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFcpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTt2YXIgdD1hcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/U3RyaW5nKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9Xyh0KSxuPWZ1bmN0aW9uKHQpe3RoaXM9PT1xJiZuLmNhbGwoWCx0KSxmKHRoaXMsVSkmJmYodGhpc1tVXSxlKSYmKHRoaXNbVV1bZV09ITEpLG90KHRoaXMsZSxtKDEsdCkpfTtyZXR1cm4gYyYmcnQmJm90KHEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpufSksaXQoZSx0KX0sSShXLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBIKHRoaXMpLnRhZ30pKSxTLmY9dXQsay5mPWN0LGouZj1sdCx3LmY9RS5mPWZ0LEMuZj1kdCxjJiYoJChXLnByb3RvdHlwZSwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykuZGVzY3JpcHRpb259fSksYXx8SShxLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsdXQse3Vuc2FmZTohMH0pKSksdXx8KEwuZj1mdW5jdGlvbih0KXtyZXR1cm4gaXQoUih0KSx0KX0pLHIoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDohcyxzaGFtOiFzfSx7U3ltYm9sOld9KSxGKHgoZXQpLChmdW5jdGlvbih0KXtQKHQpfSkpLHIoe3RhcmdldDpCLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyh0KTtpZihmKFEsZSkpcmV0dXJuIFFbZV07dmFyIG49VyhlKTtyZXR1cm4gUVtlXT1uLHR0W25dPWUsbn0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFhdCh0KSl0aHJvdyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGYodHQsdCkpcmV0dXJuIHR0W3RdfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtydD0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7cnQ9ITF9fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzLHNoYW06IWN9LHtjcmVhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZT9iKHQpOnN0KGIodCksZSl9LGRlZmluZVByb3BlcnR5OmN0LGRlZmluZVByb3BlcnRpZXM6c3QsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmx0fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Z2V0T3duUHJvcGVydHlOYW1lczpmdCxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bCgoZnVuY3Rpb24oKXtDLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7cmV0dXJuIEMuZih2KHQpKX19KSxHKSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDohc3x8bCgoZnVuY3Rpb24oKXt2YXIgdD1XKCk7cmV0dXJuIltudWxsXSIhPUcoW3RdKXx8Int9IiE9Ryh7YTp0fSl8fCJ7fSIhPUcoT2JqZWN0KHQpKX0pKX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLG89W3RdLGk9MTthcmd1bWVudHMubGVuZ3RoPmk7KW8ucHVzaChhcmd1bWVudHNbaSsrXSk7aWYocj1lLChwKGUpfHx2b2lkIDAhPT10KSYmIWF0KHQpKXJldHVybiBkKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yLmNhbGwodGhpcyx0LGUpKSwhYXQoZSkpcmV0dXJuIGV9KSxvWzFdPWUsRy5hcHBseShudWxsLG8pfX0pO1cucHJvdG90eXBlW3pdfHxPKFcucHJvdG90eXBlLHosVy5wcm90b3R5cGUudmFsdWVPZiksTihXLEIpLFRbVV09ITB9LDk4MzA2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgibWF0Y2hBbGwiKX0sNjE5MjQ6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaCIpfSwxMjAyNTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2UiKX0sMjgzMzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNlYXJjaCIpfSw5NjQ1MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwZWNpZXMiKX0sNzA4NjM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzcGxpdCIpfSwyNDgwMjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInRvUHJpbWl0aXZlIil9LDE4MjczOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9TdHJpbmdUYWciKX0sNDI0MTE6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ1bnNjb3BhYmxlcyIpfSw3NDIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big5OTQzMSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImNvcHlXaXRoaW4iLChmdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkpfSwxODUwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZXZlcnksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImV2ZXJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjAyNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNjU4OTUpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfSkpfSwyODE1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigxMzk3OSksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbHRlciIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKGEodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1pKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcikscj0wLHM9ZS5sZW5ndGgsdT1uZXcoYyhuKSkocyk7cz5yOyl1W3JdPWVbcisrXTtyZXR1cm4gdX0pKX0sNzY0NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZEluZGV4IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzM5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzODI4MDpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkZsb2F0NjQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODg2MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZvckVhY2gsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZvckVhY2giLChmdW5jdGlvbih0KXtvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDE4NTU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTYyNyk7KDAsbig3MzA3NCkuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoImZyb20iLG4oMjA0NTUpLHIpfSw4MTQ2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5jbHVkZXMsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluY2x1ZGVzIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sOTUxNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNDQ5ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDE2IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDE3MTUyOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sNzAzNzM6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDgzNjczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDczMDc0KSxpPW4oNTAwNjMpLGE9bigyMzcyNCkoIml0ZXJhdG9yIiksYz1yLlVpbnQ4QXJyYXkscz1pLnZhbHVlcyx1PWkua2V5cyxsPWkuZW50cmllcyxmPW8uYVR5cGVkQXJyYXksZD1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QscD1jJiZjLnByb3RvdHlwZVthXSxoPSEhcCYmKCJ2YWx1ZXMiPT1wLm5hbWV8fG51bGw9PXAubmFtZSksdj1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwoZih0aGlzKSl9O2QoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiBsLmNhbGwoZih0aGlzKSl9KSksZCgia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY2FsbChmKHRoaXMpKX0pKSxkKCJ2YWx1ZXMiLHYsIWgpLGQoYSx2LCFoKX0sMjM1Njg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5qb2luO2koImpvaW4iLChmdW5jdGlvbih0KXtyZXR1cm4gYS5hcHBseShvKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI3Mjk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDQ5MjQ5KSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibGFzdEluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI0NDU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5tYXAsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLChmdW5jdGlvbih0LGUpe3JldHVybiBuZXcoYyhpKHQsdC5jb25zdHJ1Y3RvcikpKShlKX0pKX0pKX0sNTA0ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzU2MjcpLGk9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoIm9mIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoaSh0aGlzKSkoZSk7ZT50OyluW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiBufSksbyl9LDc1NDk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEyMzY2KS5yaWdodCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlUmlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDM5MzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLmxlZnQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sODc1NjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1NYXRoLmZsb29yO2koInJldmVyc2UiLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMsbj1vKGUpLmxlbmd0aCxyPWEobi8yKSxpPTA7aTxyOyl0PWVbaV0sZVtpKytdPWVbLS1uXSxlW25dPXQ7cmV0dXJuIGV9KSl9LDg0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMjc4ODQpLGk9big2MDU1OCksYT1uKDE5MjA5KSxjPW4oMzIxODcpLHM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzZXQiLChmdW5jdGlvbih0KXtzKHRoaXMpO3ZhciBlPWkoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMSksbj10aGlzLmxlbmd0aCxyPWEodCksYz1vKHIubGVuZ3RoKSx1PTA7aWYoYytlPm4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIik7Zm9yKDt1PGM7KXRoaXNbZSt1XT1yW3UrK119KSxjKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2V0KHt9KX0pKSl9LDE3NjA1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEzOTc5KSxpPW4oMzIxODcpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixzPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnNsaWNlO3MoInNsaWNlIiwoZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dS5jYWxsKGEodGhpcyksdCxlKSxyPW8odGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxpPTAscz1uLmxlbmd0aCxsPW5ldyhjKHIpKShzKTtzPmk7KWxbaV09bltpKytdO3JldHVybiBsfSksaSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpfSw3MzU2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuc29tZSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic29tZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDExODc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uc29ydDtpKCJzb3J0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuY2FsbChvKHRoaXMpLHQpfSkpfSw2MDkyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPW4oMTM5NzkpLGM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0aGlzKSxyPW4ubGVuZ3RoLHM9aSh0LHIpO3JldHVybiBuZXcoYShuLG4uY29uc3RydWN0b3IpKShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrcypuLkJZVEVTX1BFUl9FTEVNRU5ULG8oKHZvaWQgMD09PWU/cjppKGUscikpLXMpKX0pKX0sNDM5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9bigzMjE4NyksYT1yLkludDhBcnJheSxjPW8uYVR5cGVkQXJyYXkscz1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT1bXS50b0xvY2FsZVN0cmluZyxsPVtdLnNsaWNlLGY9ISFhJiZpKChmdW5jdGlvbigpe3UuY2FsbChuZXcgYSgxKSl9KSk7cygidG9Mb2NhbGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KGY/bC5jYWxsKGModGhpcykpOmModGhpcyksYXJndW1lbnRzKX0pLGkoKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IGEoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KSl8fCFpKChmdW5jdGlvbigpe2EucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKX0sOTEzNDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLG89bigzMjE4NyksaT1uKDg5NTU4KS5VaW50OEFycmF5LGE9aSYmaS5wcm90b3R5cGV8fHt9LGM9W10udG9TdHJpbmcscz1bXS5qb2luO28oKGZ1bmN0aW9uKCl7Yy5jYWxsKHt9KX0pKSYmKGM9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSk7dmFyIHU9YS50b1N0cmluZyE9YztyKCJ0b1N0cmluZyIsYyx1KX0sMTY5Nzg6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMzc5ODc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODA3NTc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw2OTg3OTpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSwhMCl9LDU4NjA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDg5NTU4KSxpPW4oMTkyNiksYT1uKDk2MDMpLGM9big4MTk1MSkscz1uKDcxMzAzKSx1PW4oMTA1OTIpLGw9big4OTgyNykuZW5mb3JjZSxmPW4oMTk1OTEpLGQ9IW8uQWN0aXZlWE9iamVjdCYmIkFjdGl2ZVhPYmplY3QiaW4gbyxwPU9iamVjdC5pc0V4dGVuc2libGUsaD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXQuZXhwb3J0cz1jKCJXZWFrTWFwIixoLHMpO2lmKGYmJmQpe3I9cy5nZXRDb25zdHJ1Y3RvcihoLCJXZWFrTWFwIiwhMCksYS5SRVFVSVJFRD0hMDt2YXIgZz12LnByb3RvdHlwZSx5PWcuZGVsZXRlLG09Zy5oYXMsYj1nLmdldCx4PWcuc2V0O2koZyx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSx5LmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uZGVsZXRlKHQpfXJldHVybiB5LmNhbGwodGhpcyx0KX0saGFzOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uaGFzKHQpfXJldHVybiBtLmNhbGwodGhpcyx0KX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT9iLmNhbGwodGhpcyx0KTplLmZyb3plbi5nZXQodCl9cmV0dXJuIGIuY2FsbCh0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXtpZih1KHQpJiYhcCh0KSl7dmFyIG49bCh0aGlzKTtuLmZyb3plbnx8KG4uZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT94LmNhbGwodGhpcyx0LGUpOm4uZnJvemVuLnNldCh0LGUpfWVsc2UgeC5jYWxsKHRoaXMsdCxlKTtyZXR1cm4gdGhpc319KX19LDQ1MTU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big4MTk1MSkoIldlYWtTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbig3MTMwMykpfSw5Njc1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MDg2OCkscz1uKDM3NjIwKSx1PW4oMTQyMDkpLGw9big0MTMzNCksZj1uKDY2OTcxKSxkPW4oODk4MjcpLHA9ZC5zZXQsaD1kLmdldHRlckZvcigiQWdncmVnYXRlRXJyb3IiKSx2PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighKG4gaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTthJiYobj1hKG5ldyBFcnJvcihlKSxpKG4pKSk7dmFyIHI9W107cmV0dXJuIGwodCxyLnB1c2gsciksbz9wKG4se2Vycm9yczpyLHR5cGU6IkFnZ3JlZ2F0ZUVycm9yIn0pOm4uZXJyb3JzPXIsdm9pZCAwIT09ZSYmZihuLCJtZXNzYWdlIixTdHJpbmcoZSkpLG59O3YucHJvdG90eXBlPWMoRXJyb3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp1KDUsdiksbWVzc2FnZTp1KDUsIiIpLG5hbWU6dSg1LCJBZ2dyZWdhdGVFcnJvciIpfSksbyYmcy5mKHYucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzKS5lcnJvcnN9LGNvbmZpZ3VyYWJsZTohMH0pLHIoe2dsb2JhbDohMH0se0FnZ3JlZ2F0ZUVycm9yOnZ9KX0sMTQwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPU9iamVjdC5pc0Zyb3plbixhPWZ1bmN0aW9uKHQsZSl7aWYoIWl8fCFvKHQpfHwhaSh0KSlyZXR1cm4hMTtmb3IodmFyIG4scj0wLGE9dC5sZW5ndGg7cjxhOylpZighKCJzdHJpbmciPT10eXBlb2Yobj10W3IrK10pfHxlJiZ2b2lkIDA9PT1uKSlyZXR1cm4hMTtyZXR1cm4gMCE9PWF9O3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc1RlbXBsYXRlT2JqZWN0OmZ1bmN0aW9uKHQpe2lmKCFhKHQsITApKXJldHVybiExO3ZhciBlPXQucmF3O3JldHVybiEoZS5sZW5ndGghPT10Lmxlbmd0aHx8IWEoZSwhMSkpfX0pfSw0OTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJbmRleCJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SW5kZXgiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKSxlPWEodC5sZW5ndGgpO3JldHVybiAwPT1lPzA6ZS0xfX0pLG8oImxhc3RJbmRleCIpKX0sNjM2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big3NjUxMyksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9bigzNzYyMCkuZjtyJiYhKCJsYXN0SXRlbSJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SXRlbSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/dm9pZCAwOnRbZS0xXX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUubGVuZ3RoKTtyZXR1cm4gZVswPT1uPzA6bi0xXT10fX0pLG8oImxhc3RJdGVtIikpfSw0NzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5pdGVyYXRvcjtyZXR1cm4gZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwocix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLmRvbmU/KG4uZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTp7ZG9uZTohMSx2YWx1ZTpbbi5pbmRleCsrLHQudmFsdWVdfX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDYxMjk4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDU5Mzc5KSxpPW4oNjY5NzEpLGE9big3NjI5OCksYz1uKDIzNzI0KSxzPW4oNjM4NDUpLHU9big2NTY3MiksbD1jKCJ0b1N0cmluZ1RhZyIpLGY9ZnVuY3Rpb24oKXtvKHRoaXMsZil9O2YucHJvdG90eXBlPXMsYShzLGwpfHxpKHMsbCwiQXN5bmNJdGVyYXRvciIpLGEocywiY29uc3RydWN0b3IiKSYmcy5jb25zdHJ1Y3RvciE9PU9iamVjdHx8aShzLCJjb25zdHJ1Y3RvciIsZikscih7Z2xvYmFsOiEwLGZvcmNlZDp1fSx7QXN5bmNJdGVyYXRvcjpmfSl9LDY3NDYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwobi5pdGVyYXRvcixuLnJlbWFpbmluZz92b2lkIDA6dCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7byh0KS5kb25lPyhuLmRvbmU9ITAscih7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6bi5yZW1haW5pbmc/KG4ucmVtYWluaW5nLS0sYSgpKTpyKHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtpKHQpfX0pLGkpfWNhdGNoKHQpe2kodCl9fTthKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sOTA2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZXZlcnk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjAxMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5maWx0ZXJlcjtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKG8sYSl7dmFyIGM9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKGkobi5uZXh0LmNhbGwobi5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZihpKHQpLmRvbmUpbi5kb25lPSEwLG8oe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7ZWxzZXt2YXIgcz10LnZhbHVlO2UucmVzb2x2ZShyKHMpKS50aGVuKChmdW5jdGlvbih0KXt0P28oe2RvbmU6ITEsdmFsdWU6c30pOmMoKX0pLGEpfX1jYXRjaCh0KXthKHQpfX0pLGEpfWNhdGNoKHQpe2EodCl9fTtjKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDIxMzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5maW5kO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzg5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSxjPW4oNjY5MjApLHM9YSgoZnVuY3Rpb24odCxlKXt2YXIgbixyLGE9dGhpcyxzPWEubWFwcGVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odSxsKXt2YXIgZj1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShhLm5leHQuY2FsbChhLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5kb25lPSEwLHUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSkpOmUucmVzb2x2ZShzKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYodm9pZCAwIT09KHI9Yyh0KSkpcmV0dXJuIGEuaW5uZXJJdGVyYXRvcj1uPWkoci5jYWxsKHQpKSxhLmlubmVyTmV4dD1vKG4ubmV4dCksZCgpO2woVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpKX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19LGQ9ZnVuY3Rpb24oKXtpZihuPWEuaW5uZXJJdGVyYXRvcil0cnl7ZS5yZXNvbHZlKGkoYS5pbm5lck5leHQuY2FsbChuKSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpKHQpLmRvbmU/KGEuaW5uZXJJdGVyYXRvcj1hLmlubmVyTmV4dD1udWxsLGYoKSk6dSh7ZG9uZTohMSx2YWx1ZTp0LnZhbHVlfSl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfWVsc2UgZigpfTtkKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDY5MjM3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5mb3JFYWNoO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjY0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDI3MDA0KSx1PW4oNjY5MjApLGw9by5Bc3luY0l0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSl9KSwhMCk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDUzMTY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4ubWFwcGVyO3JldHVybiBlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOmUucmVzb2x2ZShyKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57ZG9uZTohMSx2YWx1ZTp0fX0pKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDczOTQ5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big3NzAxKSgiUHJvbWlzZSIpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49byhlLm5leHQpLHI9YXJndW1lbnRzLmxlbmd0aDwyLGM9cj92b2lkIDA6YXJndW1lbnRzWzFdO3JldHVybiBvKHQpLG5ldyBhKChmdW5jdGlvbihvLHMpe3ZhciB1PWZ1bmN0aW9uKCl7dHJ5e2EucmVzb2x2ZShpKG4uY2FsbChlKSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3RyeXtpZihpKGUpLmRvbmUpcj9zKFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpKTpvKGMpO2Vsc2V7dmFyIG49ZS52YWx1ZTtyPyhyPSExLGM9bix1KCkpOmEucmVzb2x2ZSh0KGMsbikpLnRoZW4oKGZ1bmN0aW9uKHQpe2M9dCx1KCl9KSxzKX19Y2F0Y2godCl7cyh0KX19KSxzKX1jYXRjaCh0KXtzKHQpfX07dSgpfSkpfX0pfSw4ODIxMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2Nikuc29tZTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDczNzYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy0tP3RoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCk6KHRoaXMuZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw0MjE5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikudG9BcnJheTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDM2NTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ2ODUpLGk9big3NzAxKSxhPW4oNTA4NjgpLGM9ZnVuY3Rpb24oKXt2YXIgdD1pKCJPYmplY3QiLCJmcmVlemUiKTtyZXR1cm4gdD90KGEobnVsbCkpOmEobnVsbCl9O3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZUtleTpmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KE9iamVjdCxhcmd1bWVudHMpLmdldCgib2JqZWN0IixjKX19KX0sNDMwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpO3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZVN5bWJvbDpmdW5jdGlvbigpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMF0/aSgiU3ltYm9sIikuZm9yKGFyZ3VtZW50c1swXSk6by5hcHBseShudWxsLGFyZ3VtZW50cykuZ2V0KCJzeW1ib2wiLGkoIlN5bWJvbCIpKX19KX0sOTk2Mjg6ZnVuY3Rpb24odCxlLG4pe24oNzE2MjIpfSw5MjYwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg4MDcpKChmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm5bdGhpcy5pbmRleCsrLGUudmFsdWVdfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDQzMzMyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNTkzNzkpLGE9big2Njk3MSksYz1uKDMyMTg3KSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxmPW4oNjU2NzIpLGQ9dSgiaXRlcmF0b3IiKSxwPXUoInRvU3RyaW5nVGFnIiksaD1vLkl0ZXJhdG9yLHY9Znx8ImZ1bmN0aW9uIiE9dHlwZW9mIGh8fGgucHJvdG90eXBlIT09bHx8IWMoKGZ1bmN0aW9uKCl7aCh7fSl9KSksZz1mdW5jdGlvbigpe2kodGhpcyxnKX07ZiYmYShsPXt9LGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhsLHApfHxhKGwscCwiSXRlcmF0b3IiKSwhdiYmcyhsLCJjb25zdHJ1Y3RvciIpJiZsLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxhKGwsImNvbnN0cnVjdG9yIixnKSxnLnByb3RvdHlwZT1sLHIoe2dsb2JhbDohMCxmb3JjZWQ6dn0se0l0ZXJhdG9yOmd9KX0sMjA0NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10aGlzLml0ZXJhdG9yLHI9dGhpcy5uZXh0O3RoaXMucmVtYWluaW5nOylpZih0aGlzLnJlbWFpbmluZy0tLGU9byhyLmNhbGwobikpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYoZT1vKHIuY2FsbChuLHQpKSwhKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2Ryb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDU0NTU2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksIW8odGhpcywoZnVuY3Rpb24oZSl7aWYoIXQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw0MDYzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcy5pdGVyYXRvcixvPXRoaXMuZmlsdGVyZXIsYT10aGlzLm5leHQ7Oyl7aWYoZT1pKGEuY2FsbChyLHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49ZS52YWx1ZSxjKHIsbyxuKSlyZXR1cm4gbn19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksZmlsdGVyZXI6byh0KX0pfX0pfSw5NjY1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoZSl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sMTQ2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDczODkwKSxjPW4oODgwNykscz1uKDEyMjc4KSx1PWMoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsYyx1PXRoaXMuaXRlcmF0b3I7Oyl7aWYoYz10aGlzLmlubmVySXRlcmF0b3Ipe2lmKCEoZT1pKHRoaXMuaW5uZXJOZXh0LmNhbGwoYykpKS5kb25lKXJldHVybiBlLnZhbHVlO3RoaXMuaW5uZXJJdGVyYXRvcj10aGlzLmlubmVyTmV4dD1udWxsfWlmKGU9aSh0aGlzLm5leHQuY2FsbCh1LHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49cyh1LHRoaXMubWFwcGVyLGUudmFsdWUpLHZvaWQgMD09PShyPWEobikpKXRocm93IFR5cGVFcnJvcigiLmZsYXRNYXAgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QiKTt0aGlzLmlubmVySXRlcmF0b3I9Yz1pKHIuY2FsbChuKSksdGhpcy5pbm5lck5leHQ9byhjLm5leHQpfX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDczNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7byhpKHRoaXMpLHQsdm9pZCAwLCExLCEwKX19KX0sMjc0Mjg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDg4MDcpLHU9big3Mzg5MCksbD1vLkl0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtpZighKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSwhMCk7cih7dGFyZ2V0OiJJdGVyYXRvciIsc3RhdDohMH0se2Zyb206ZnVuY3Rpb24odCl7dmFyIGUsbj1jKHQpLHI9dShuKTtpZihudWxsIT1yKXtpZigoZT1pKHIpLmNhbGwobikpaW5zdGFuY2VvZiBsKXJldHVybiBlfWVsc2UgZT1uO3JldHVybiBuZXcgZih7aXRlcmF0b3I6ZX0pfX0pfSwzMzQzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXRlcmF0b3Isbj1pKHRoaXMubmV4dC5jYWxsKGUsdCkpO2lmKCEodGhpcy5kb25lPSEhbi5kb25lKSlyZXR1cm4gYyhlLHRoaXMubWFwcGVyLG4udmFsdWUpfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDg0Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXthKHRoaXMpLGkodCk7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyLG49ZT92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG8odGhpcywoZnVuY3Rpb24ocil7ZT8oZT0hMSxuPXIpOm49dChuLHIpfSksdm9pZCAwLCExLCEwKSxlKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBufX0pfSw1OTYyMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sMzI4NTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtpZih0aGlzLnJlbWFpbmluZy0tKXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO3JldHVybih0aGlzLmRvbmU9ISFlLmRvbmUpP3ZvaWQgMDplLnZhbHVlfXRoaXMuZG9uZT0hMH0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dGFrZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNjcwNzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSksYT1bXS5wdXNoO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIG8oaSh0aGlzKSxhLHQsITEsITApLHR9fSl9LDQ4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sMzU1NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiFzKG4sKGZ1bmN0aW9uKHQsbil7aWYoIXIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sMTg4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7cihuLHQsZSkmJmQuY2FsbChvLHQsbil9KSx2b2lkIDAsITAsITApLG99fSl9LDQ5MDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZEtleTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sMzU2NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcChuKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzODc5MjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw1MzUxMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5oYXMpLGE9aShuLmdldCksYz1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQpO3IuY2FsbChuLG8pP2EuY2FsbChuLG8pLnB1c2godCk6Yy5jYWxsKG4sbyxbdF0pfSkpLG59fSl9LDkzODQzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDM4MTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihjKG4sdCkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw5OTI1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2tleUJ5OmZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHRoaXM7aShlKTt2YXIgcj1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXtyLmNhbGwobixlKHQpLHQpfSkpLG59fSl9LDY2MjI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2tleU9mOmZ1bmN0aW9uKHQpe3JldHVybiBjKGEoaSh0aGlzKSksKGZ1bmN0aW9uKGUsbil7aWYobj09PXQpcmV0dXJuIGMuc3RvcChlKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSw3MTcwMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8scihuLHQsZSksbil9KSx2b2lkIDAsITAsITApLG99fSl9LDY5NTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe2QuY2FsbChvLHQscihuLHQsZSkpfSksdm9pZCAwLCEwLCEwKSxvfX0pfSwyNzczNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0aGlzKSxuPWEoZS5zZXQpLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7KWMoYXJndW1lbnRzW3IrK10sbixlLCEwKTtyZXR1cm4gZX19KX0sMTk5MDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sNzczNjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hcmd1bWVudHMubGVuZ3RoPDIsbz1yP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoYSh0KSxzKG4sKGZ1bmN0aW9uKG4saSl7cj8ocj0hMSxvPWkpOm89dChvLGksbixlKX0pLHZvaWQgMCwhMCwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBtYXAgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDY5ODQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sNDMyOTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBkYXRlT3JJbnNlcnQ6big0NzkyNyl9KX0sOTc5Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3VwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBuPWkodGhpcykscj1hcmd1bWVudHMubGVuZ3RoO2EoZSk7dmFyIG89bi5oYXModCk7aWYoIW8mJnI8Myl0aHJvdyBUeXBlRXJyb3IoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBjPW8/bi5nZXQodCk6YShyPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxuKTtyZXR1cm4gbi5zZXQodCxlKGMsdCxuKSksbn19KX0sMTQ2ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDcwMjI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubWluLGk9TWF0aC5tYXg7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvKG4saShlLHQpKX19KX0sMjM5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se0RFR19QRVJfUkFEOk1hdGguUEkvMTgwfSl9LDE2ODA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPTE4MC9NYXRoLlBJO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2RlZ3JlZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sNjcxNDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzQyKSxpPW4oNTMyNTEpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ZzY2FsZTpmdW5jdGlvbih0LGUsbixyLGEpe3JldHVybiBpKG8odCxlLG4scixhKSl9fSl9LDMwNjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aWFkZGg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApKyhyPj4+MCkrKChvJml8KG98aSkmfihvK2k+Pj4wKSk+Pj4zMSl8MH19KX0sNDk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ltdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+MTYscz1vPj4xNix1PShjKmE+Pj4wKSsoaSphPj4+MTYpO3JldHVybiBjKnMrKHU+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4xNil9fSl9LDY4NDA2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aXN1Ymg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApLShyPj4+MCktKCh+byZpfH4ob15pKSZvLWk+Pj4wKT4+PjMxKXwwfX0pfSw5MDc2OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se1JBRF9QRVJfREVHOjE4MC9NYXRoLlBJfSl9LDU3ODkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguUEkvMTgwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3JhZGlhbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sMTU3MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzY2FsZTpuKDc3NDIpfSl9LDE3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg5NTQyKSxhPW4oNzEyMDEpLGM9big4OTgyNykscz0iU2VlZGVkIFJhbmRvbSIsdT0iU2VlZGVkIFJhbmRvbSBHZW5lcmF0b3IiLGw9Yy5zZXQsZj1jLmdldHRlckZvcih1KSxkPWEoKGZ1bmN0aW9uKHQpe2wodGhpcyx7dHlwZTp1LHNlZWQ6dCUyMTQ3NDgzNjQ3fSl9KSxzLChmdW5jdGlvbigpe3ZhciB0PWYodGhpcyk7cmV0dXJue3ZhbHVlOigxMDczNzQxODIzJih0LnNlZWQ9KDExMDM1MTUyNDUqdC5zZWVkKzEyMzQ1KSUyMTQ3NDgzNjQ3KSkvMTA3Mzc0MTgyMyxkb25lOiExfX0pKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7c2VlZGVkUFJORzpmdW5jdGlvbih0KXt2YXIgZT1vKHQpLnNlZWQ7aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCdNYXRoLnNlZWRlZFBSTkcoKSBhcmd1bWVudCBzaG91bGQgaGF2ZSBhICJzZWVkIiBmaWVsZCB3aXRoIGEgZmluaXRlIHZhbHVlLicpO3JldHVybiBuZXcgZChlKX19KX0sNzc5MDc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduYml0OmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT09dCYmMD09dD8xL3Q9PS0xLzA6dDwwfX0pfSw0NDY0NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3VtdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+PjE2LHM9bz4+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4+MTYpfX0pfSw3NTY0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDc4NDYpLGE9IkludmFsaWQgbnVtYmVyIHJlcHJlc2VudGF0aW9uIixjPS9eW1xkYS16XSskLztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2Zyb21TdHJpbmc6ZnVuY3Rpb24odCxlKXt2YXIgbixyLHM9MTtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKGEpO2lmKCF0Lmxlbmd0aCl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigiLSI9PXQuY2hhckF0KDApJiYocz0tMSwhKHQ9dC5zbGljZSgxKSkubGVuZ3RoKSl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigobj12b2lkIDA9PT1lPzEwOm8oZSkpPDJ8fG4+MzYpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCByYWRpeCIpO2lmKCFjLnRlc3QodCl8fChyPWkodCxuKSkudG9TdHJpbmcobikhPT10KXRocm93IFN5bnRheEVycm9yKGEpO3JldHVybiBzKnJ9fSl9LDg0MzA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVFbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJlbnRyaWVzIil9fSl9LDcyOTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJrZXlzIil9fSl9LDU2MzU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsInZhbHVlcyIpfX0pfSwyMDIzNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY3NTM4KSxhPW4oODY0NzApLGM9big4NzU3OSkscz1uKDEwNTkyKSx1PW4oNTkzNzkpLGw9bigzNzYyMCkuZixmPW4oNjY5NzEpLGQ9bigxOTI2KSxwPW4oMzEwNzQpLGg9big0MTMzNCksdj1uKDgzNjIwKSxnPW4oMjM3MjQpLHk9big4OTgyNyksbT1nKCJvYnNlcnZhYmxlIiksYj15LmdldCx4PXkuc2V0LHc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOmEodCl9LEU9ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGVhbnVwO2lmKGUpe3QuY2xlYW51cD12b2lkIDA7dHJ5e2UoKX1jYXRjaCh0KXt2KHQpfX19LEM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQub2JzZXJ2ZXJ9LGo9ZnVuY3Rpb24odCxlKXtpZighbyl7dC5jbG9zZWQ9ITA7dmFyIG49ZS5zdWJzY3JpcHRpb25PYnNlcnZlcjtuJiYobi5jbG9zZWQ9ITApfWUub2JzZXJ2ZXI9dm9pZCAwfSxrPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj14KHRoaXMse2NsZWFudXA6dm9pZCAwLG9ic2VydmVyOmModCksc3Vic2NyaXB0aW9uT2JzZXJ2ZXI6dm9pZCAwfSk7b3x8KHRoaXMuY2xvc2VkPSExKTt0cnl7KG49dyh0LnN0YXJ0KSkmJm4uY2FsbCh0LHRoaXMpfWNhdGNoKHQpe3YodCl9aWYoIUMocikpe3ZhciBpPXIuc3Vic2NyaXB0aW9uT2JzZXJ2ZXI9bmV3IFModGhpcyk7dHJ5e3ZhciBzPWUoaSksdT1zO251bGwhPXMmJihyLmNsZWFudXA9ImZ1bmN0aW9uIj09dHlwZW9mIHMudW5zdWJzY3JpYmU/ZnVuY3Rpb24oKXt1LnVuc3Vic2NyaWJlKCl9OmEocykpfWNhdGNoKHQpe3JldHVybiB2b2lkIGkuZXJyb3IodCl9QyhyKSYmRShyKX19O2sucHJvdG90eXBlPWQoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKTtDKHQpfHwoaih0aGlzLHQpLEUodCkpfX0pLG8mJmwoay5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQyhiKHRoaXMpKX19KTt2YXIgUz1mdW5jdGlvbih0KXt4KHRoaXMse3N1YnNjcmlwdGlvbjp0fSksb3x8KHRoaXMuY2xvc2VkPSExKX07Uy5wcm90b3R5cGU9ZCh7fSx7bmV4dDpmdW5jdGlvbih0KXt2YXIgZT1iKGIodGhpcykuc3Vic2NyaXB0aW9uKTtpZighQyhlKSl7dmFyIG49ZS5vYnNlcnZlcjt0cnl7dmFyIHI9dyhuLm5leHQpO3ImJnIuY2FsbChuLHQpfWNhdGNoKHQpe3YodCl9fX0sZXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzKS5zdWJzY3JpcHRpb24sbj1iKGUpO2lmKCFDKG4pKXt2YXIgcj1uLm9ic2VydmVyO2ooZSxuKTt0cnl7dmFyIG89dyhyLmVycm9yKTtvP28uY2FsbChyLHQpOnYodCl9Y2F0Y2godCl7dih0KX1FKG4pfX0sY29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpLnN1YnNjcmlwdGlvbixlPWIodCk7aWYoIUMoZSkpe3ZhciBuPWUub2JzZXJ2ZXI7aih0LGUpO3RyeXt2YXIgcj13KG4uY29tcGxldGUpO3ImJnIuY2FsbChuKX1jYXRjaCh0KXt2KHQpfUUoZSl9fX0pLG8mJmwoUy5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQyhiKGIodGhpcykuc3Vic2NyaXB0aW9uKSl9fSk7dmFyIE89ZnVuY3Rpb24odCl7dSh0aGlzLE8sIk9ic2VydmFibGUiKSx4KHRoaXMse3N1YnNjcmliZXI6YSh0KX0pfTtkKE8ucHJvdG90eXBlLHtzdWJzY3JpYmU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IGsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/e25leHQ6dCxlcnJvcjplPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjb21wbGV0ZTplPjI/YXJndW1lbnRzWzJdOnZvaWQgMH06cyh0KT90Ont9LGIodGhpcykuc3Vic2NyaWJlcil9fSksZChPLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxuPXcoYyh0KVttXSk7aWYobil7dmFyIHI9YyhuLmNhbGwodCkpO3JldHVybiByLmNvbnN0cnVjdG9yPT09ZT9yOm5ldyBlKChmdW5jdGlvbih0KXtyZXR1cm4gci5zdWJzY3JpYmUodCl9KSl9dmFyIG89cCh0KTtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHQpe2gobywoZnVuY3Rpb24oZSl7aWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybiBoLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCksdC5jb21wbGV0ZSgpfSkpfSxvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOk8sZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09YXJndW1lbnRzW3IrK107cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0KXtmb3IodmFyIHI9MDtyPGU7cisrKWlmKHQubmV4dChuW3JdKSx0LmNsb3NlZClyZXR1cm47dC5jb21wbGV0ZSgpfSkpfX0pLGYoTy5wcm90b3R5cGUsbSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxyKHtnbG9iYWw6ITB9LHtPYnNlcnZhYmxlOk99KSxpKCJPYnNlcnZhYmxlIil9LDI3NzU6ZnVuY3Rpb24odCxlLG4pe24oMTc2MjkpfSw3MzIyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDc3MDEpLGE9big4MzA4MyksYz1uKDMxMTUpLHM9big0MTMzNCksdT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FueTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49YS5mKGUpLHI9bi5yZXNvbHZlLGw9bi5yZWplY3QsZj1jKChmdW5jdGlvbigpe3ZhciBuPW8oZS5yZXNvbHZlKSxhPVtdLGM9MCxmPTEsZD0hMTtzKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWMrKyxzPSExO2EucHVzaCh2b2lkIDApLGYrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtzfHxkfHwoZD0hMCxyKHQpKX0pLChmdW5jdGlvbih0KXtzfHxkfHwocz0hMCxhW29dPXQsLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKSl9KSl9KSksLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKX0pKTtyZXR1cm4gZi5lcnJvciYmbChmLnZhbHVlKSxuLnByb21pc2V9fSl9LDExMDcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgzMDgzKSxpPW4oMzExNSk7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7dHJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW8uZih0aGlzKSxuPWkodCk7cmV0dXJuKG4uZXJyb3I/ZS5yZWplY3Q6ZS5yZXNvbHZlKShuLnZhbHVlKSxlLnByb21pc2V9fSl9LDQ5NjQwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5zZXQ7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8ND92b2lkIDA6YShhcmd1bWVudHNbM10pO2ModCxlLGkobikscil9fSl9LDc0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5nZXRNYXAscz1vLnN0b3JlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkscj1jKGkoZSksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVsZXRlKHQpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgbz1zLmdldChlKTtyZXR1cm4gby5kZWxldGUobiksISFvLnNpemV8fHMuZGVsZXRlKGUpfX0pfSw0OTE1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0MDYxKSxpPW4oNzcwMjApLGE9big4NzU3OSksYz1uKDY0OTY1KSxzPW4oNDEzMzQpLHU9aS5rZXlzLGw9aS50b0tleSxmPWZ1bmN0aW9uKHQsZSl7dmFyIG49dSh0LGUpLHI9Yyh0KTtpZihudWxsPT09cilyZXR1cm4gbjt2YXIgaSxhLGw9ZihyLGUpO3JldHVybiBsLmxlbmd0aD9uLmxlbmd0aD8oaT1uZXcgbyhuLmNvbmNhdChsKSkscyhpLChhPVtdKS5wdXNoLGEpLGEpOmw6bn07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6bChhcmd1bWVudHNbMV0pO3JldHVybiBmKGEodCksZSl9fSl9LDY5NDU5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1uKDY0OTY1KSxjPW8uaGFzLHM9by5nZXQsdT1vLnRvS2V5LGw9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiBzKHQsZSxuKTt2YXIgcj1hKGUpO3JldHVybiBudWxsIT09cj9sKHQscixuKTp2b2lkIDB9O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSk7cmV0dXJuIGwodCxpKGUpLG4pfX0pfSw4NzQ3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5rZXlzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpjKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGEoaSh0KSxlKX19KX0sMjY4OTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uZ2V0LGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sOTc0MzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLnRvS2V5LHU9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiEwO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yJiZ1KHQscixuKX07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKTtyZXR1cm4gdSh0LGkoZSksbil9fSl9LDcxMDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uaGFzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sMjM2MzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHttZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe2ModCxlLGkobiksYShyKSl9fX0pfSw5Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHthZGRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDYxNDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk4MzUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLHQpfSkpLG59fSl9LDE2MTI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCl7aWYoIXIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNTM1ODk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe3IodCx0LGUpJiZkLmNhbGwobyx0KX0pLHZvaWQgMCwhMSwhMCksb319KX0sODEwNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sOTcyODQ6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNDE3MTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkscj1jKGUuaGFzKSxvPWMobi5hZGQpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChlLHQpJiZvLmNhbGwobix0KX0pKSxufX0pfSw1NzM3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc0Rpc2pvaW50RnJvbTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITA9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sODkyMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDMxMDc0KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNTdWJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1zKHRoaXMpLG49YSh0KSxyPW4uaGFzO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiByJiYobj1uZXcoaSgiU2V0IikpKHQpLHI9YyhuLmhhcykpLCF1KGUsKGZ1bmN0aW9uKHQpe2lmKCExPT09ci5jYWxsKG4sdCkpcmV0dXJuIHUuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1cGVyc2V0T2Y6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5oYXMpO3JldHVybiFjKHQsKGZ1bmN0aW9uKHQpe2lmKCExPT09bi5jYWxsKGUsdCkpcmV0dXJuIGMuc3RvcCgpfSkpLnN0b3BwZWR9fSl9LDE2NzU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTQ3NSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2pvaW46ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSkscj12b2lkIDA9PT10PyIsIjpTdHJpbmcodCksbz1bXTtyZXR1cm4gYyhuLG8ucHVzaCxvLCExLCEwKSxvLmpvaW4ocil9fSl9LDExMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE0NzUpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXA6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIlNldCIpKSksZD1jKG8uYWRkKTtyZXR1cm4gZihuLChmdW5jdGlvbih0KXtkLmNhbGwobyxyKHQsdCxlKSl9KSx2b2lkIDAsITEsITApLG99fSl9LDI0NTk4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSwzMzUzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obil7cj8ocj0hMSxvPW4pOm89dChvLG4sbixlKX0pLHZvaWQgMCwhMSwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBzZXQgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDI0MTAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0KXtpZihyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDY2MTgxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3N5bW1ldHJpY0RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl8fG8uY2FsbChuLHQpfSkpLG59fSl9LDYyOTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dW5pb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKTtyZXR1cm4gdSh0LGMobi5hZGQpLG4pLG59fSl9LDczNDYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jaGFyQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzIwNjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDg5ODI3KSxjPW4oNjAxNDApLHM9Yy5jb2RlQXQsdT1jLmNoYXJBdCxsPSJTdHJpbmcgSXRlcmF0b3IiLGY9YS5zZXQsZD1hLmdldHRlckZvcihsKSxwPW8oKGZ1bmN0aW9uKHQpe2YodGhpcyx7dHlwZTpsLHN0cmluZzp0LGluZGV4OjB9KX0pLCJTdHJpbmciLChmdW5jdGlvbigpe3ZhciB0LGU9ZCh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD11KG4sciksZS5pbmRleCs9dC5sZW5ndGgse3ZhbHVlOntjb2RlUG9pbnQ6cyh0LDApLHBvc2l0aW9uOnJ9LGRvbmU6ITF9KX0pKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtjb2RlUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKFN0cmluZyhpKHRoaXMpKSl9fSl9LDc0NTI1OmZ1bmN0aW9uKHQsZSxuKXtuKDgxMjc3KX0sNjQwMjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzAxMzIpLGk9big0MzIyMyksYT1uKDI1NDE5KSxjPW4oMjM3MjQpLHM9big2NTY3MiksdT1jKCJyZXBsYWNlIiksbD1SZWdFeHAucHJvdG90eXBlO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGxhY2VBbGw6ZnVuY3Rpb24gdChlLG4pe3ZhciByLGMsZixkLHAsaCx2LGcseT1vKHRoaXMpO2lmKG51bGwhPWUpe2lmKChyPWkoZSkpJiYhflN0cmluZyhvKCJmbGFncyJpbiBsP2UuZmxhZ3M6YS5jYWxsKGUpKSkuaW5kZXhPZigiZyIpKXRocm93IFR5cGVFcnJvcigiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZih2b2lkIDAhPT0oYz1lW3VdKSlyZXR1cm4gYy5jYWxsKGUseSxuKTtpZihzJiZyKXJldHVybiBTdHJpbmcoeSkucmVwbGFjZShlLG4pfWlmKGY9U3RyaW5nKHkpLCIiPT09KGQ9U3RyaW5nKGUpKSlyZXR1cm4gdC5jYWxsKGYsLyg/OikvZyxuKTtpZihwPWYuc3BsaXQoZCksImZ1bmN0aW9uIiE9dHlwZW9mIG4pcmV0dXJuIHAuam9pbihTdHJpbmcobikpO2Zvcih2PShoPXBbMF0pLmxlbmd0aCxnPTE7ZzxwLmxlbmd0aDtnKyspaCs9U3RyaW5nKG4oZCx2LGYpKSx2Kz1kLmxlbmd0aCtwW2ddLmxlbmd0aCxoKz1wW2ddO3JldHVybiBofX0pfSw2OTQyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNEaXNwb3NlIil9LDk0MjQ5OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiZGlzcG9zZSIpfSw1MTM3NDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm9ic2VydmFibGUiKX0sNTM3NzI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJwYXR0ZXJuTWF0Y2giKX0sODYwNzc6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJyZXBsYWNlQWxsIil9LDY0ODEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJXZWFrTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw5OTk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sMTgyMDU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw4NzU1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDY4OTk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oOTgxNzkpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNTM4MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDg1ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNjQ4OTk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw2NzAzOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDQ3MDk0KSxpPW4oMzEzNjgpLGE9big2Njk3MSk7Zm9yKHZhciBjIGluIG8pe3ZhciBzPXJbY10sdT1zJiZzLnByb3RvdHlwZTtpZih1JiZ1LmZvckVhY2ghPT1pKXRyeXthKHUsImZvckVhY2giLGkpfWNhdGNoKHQpe3UuZm9yRWFjaD1pfX19LDc5Nzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9big1MDA2MyksYT1uKDY2OTcxKSxjPW4oMjM3MjQpLHM9YygiaXRlcmF0b3IiKSx1PWMoInRvU3RyaW5nVGFnIiksbD1pLnZhbHVlcztmb3IodmFyIGYgaW4gbyl7dmFyIGQ9cltmXSxwPWQmJmQucHJvdG90eXBlO2lmKHApe2lmKHBbc10hPT1sKXRyeXthKHAscyxsKX1jYXRjaCh0KXtwW3NdPWx9aWYocFt1XXx8YShwLHUsZiksb1tmXSlmb3IodmFyIGggaW4gaSlpZihwW2hdIT09aVtoXSl0cnl7YShwLGgsaVtoXSl9Y2F0Y2godCl7cFtoXT1pW2hdfX19fSw3NDAxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMjE3NDQpO3Ioe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiFvLnNldEltbWVkaWF0ZXx8IW8uY2xlYXJJbW1lZGlhdGV9LHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSw2NTk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjU1NTUpLGE9bigyNDU5NCksYz1vLnByb2Nlc3Mscz0icHJvY2VzcyI9PWEoYyk7cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsbm9UYXJnZXRHZXQ6ITB9LHtxdWV1ZU1pY3JvdGFzazpmdW5jdGlvbih0KXt2YXIgZT1zJiZjLmRvbWFpbjtpKGU/ZS5iaW5kKHQpOnQpfX0pfSw4MTk5NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMzk0NzYpLGE9W10uc2xpY2UsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsbz1yP2EuY2FsbChhcmd1bWVudHMsMik6dm9pZCAwO3JldHVybiB0KHI/ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkuYXBwbHkodGhpcyxvKX06ZSxuKX19O3Ioe2dsb2JhbDohMCxiaW5kOiEwLGZvcmNlZDovTVNJRSAuXC4vLnRlc3QoaSl9LHtzZXRUaW1lb3V0OmMoby5zZXRUaW1lb3V0KSxzZXRJbnRlcnZhbDpjKG8uc2V0SW50ZXJ2YWwpfSl9LDU1NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDUwMDYzKTt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDU3NTk3KSxhPW4oOTI5MTMpLGM9bigxOTI2KSxzPW4oNTExMjgpLHU9big3MTIwMSksbD1uKDg5ODI3KSxmPW4oNTkzNzkpLGQ9big3NjI5OCkscD1uKDQ2MTMwKSxoPW4oNTk1OTEpLHY9big4NzU3OSksZz1uKDEwNTkyKSx5PW4oNTA4NjgpLG09bigxNDIwOSksYj1uKDMxMDc0KSx4PW4oNzM4OTApLHc9bigyMzcyNCksRT1vKCJmZXRjaCIpLEM9bygiSGVhZGVycyIpLGo9dygiaXRlcmF0b3IiKSxrPSJVUkxTZWFyY2hQYXJhbXMiLFM9IlVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yIixPPWwuc2V0LEk9bC5nZXR0ZXJGb3IoayksQT1sLmdldHRlckZvcihTKSxNPS9cKy9nLFQ9QXJyYXkoNCksXz1mdW5jdGlvbih0KXtyZXR1cm4gVFt0LTFdfHwoVFt0LTFdPVJlZ0V4cCgiKCg/OiVbXFxkYS1mXXsyfSl7Iit0KyJ9KSIsImdpIikpfSxSPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoKGUpe3JldHVybiB0fX0sTD1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UoTSwiICIpLG49NDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtmb3IoO247KWU9ZS5yZXBsYWNlKF8obi0tKSxSKTtyZXR1cm4gZX19LFA9L1shJygpfl18JTIwL2csTj17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9LEQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5bdF19LEY9ZnVuY3Rpb24odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKFAsRCl9LFU9ZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgbixyLG89ZS5zcGxpdCgiJiIpLGk9MDtpPG8ubGVuZ3RoOykobj1vW2krK10pLmxlbmd0aCYmKHI9bi5zcGxpdCgiPSIpLHQucHVzaCh7a2V5Okwoci5zaGlmdCgpKSx2YWx1ZTpMKHIuam9pbigiPSIpKX0pKX0sQj1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMubGVuZ3RoPTAsVSh0aGlzLmVudHJpZXMsdCl9LHo9ZnVuY3Rpb24odCxlKXtpZih0PGUpdGhyb3cgVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpfSxWPXUoKGZ1bmN0aW9uKHQsZSl7Tyh0aGlzLHt0eXBlOlMsaXRlcmF0b3I6YihJKHQpLmVudHJpZXMpLGtpbmQ6ZX0pfSksIkl0ZXJhdG9yIiwoZnVuY3Rpb24oKXt2YXIgdD1BKHRoaXMpLGU9dC5raW5kLG49dC5pdGVyYXRvci5uZXh0KCkscj1uLnZhbHVlO3JldHVybiBuLmRvbmV8fChuLnZhbHVlPSJrZXlzIj09PWU/ci5rZXk6InZhbHVlcyI9PT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdKSxufSkpLEg9ZnVuY3Rpb24oKXtmKHRoaXMsSCxrKTt2YXIgdCxlLG4scixvLGksYSxjLHMsdT1hcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCxsPXRoaXMscD1bXTtpZihPKGwse3R5cGU6ayxlbnRyaWVzOnAsdXBkYXRlVVJMOmZ1bmN0aW9uKCl7fSx1cGRhdGVTZWFyY2hQYXJhbXM6Qn0pLHZvaWQgMCE9PXUpaWYoZyh1KSlpZigiZnVuY3Rpb24iPT10eXBlb2YodD14KHUpKSlmb3Iobj0oZT10LmNhbGwodSkpLm5leHQ7IShyPW4uY2FsbChlKSkuZG9uZTspe2lmKChhPShpPShvPWIodihyLnZhbHVlKSkpLm5leHQpLmNhbGwobykpLmRvbmV8fChjPWkuY2FsbChvKSkuZG9uZXx8IWkuY2FsbChvKS5kb25lKXRocm93IFR5cGVFcnJvcigiRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMiIpO3AucHVzaCh7a2V5OmEudmFsdWUrIiIsdmFsdWU6Yy52YWx1ZSsiIn0pfWVsc2UgZm9yKHMgaW4gdSlkKHUscykmJnAucHVzaCh7a2V5OnMsdmFsdWU6dVtzXSsiIn0pO2Vsc2UgVShwLCJzdHJpbmciPT10eXBlb2YgdT8iPyI9PT11LmNoYXJBdCgwKT91LnNsaWNlKDEpOnU6dSsiIil9LHE9SC5wcm90b3R5cGU7YyhxLHthcHBlbmQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMik7dmFyIG49SSh0aGlzKTtuLmVudHJpZXMucHVzaCh7a2V5OnQrIiIsdmFsdWU6ZSsiIn0pLG4udXBkYXRlVVJMKCl9LGRlbGV0ZTpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcyksbj1lLmVudHJpZXMscj10KyIiLG89MDtvPG4ubGVuZ3RoOyluW29dLmtleT09PXI/bi5zcGxpY2UobywxKTpvKys7ZS51cGRhdGVVUkwoKX0sZ2V0OmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9SSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5rZXk9PT1uKXJldHVybiBlW3JdLnZhbHVlO3JldHVybiBudWxsfSxnZXRBbGw6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9W10sbz0wO288ZS5sZW5ndGg7bysrKWVbb10ua2V5PT09biYmci5wdXNoKGVbb10udmFsdWUpO3JldHVybiByfSxoYXM6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoOylpZihlW3IrK10ua2V5PT09bilyZXR1cm4hMDtyZXR1cm4hMX0sc2V0OmZ1bmN0aW9uKHQsZSl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgbixyPUkodGhpcyksbz1yLmVudHJpZXMsaT0hMSxhPXQrIiIsYz1lKyIiLHM9MDtzPG8ubGVuZ3RoO3MrKykobj1vW3NdKS5rZXk9PT1hJiYoaT9vLnNwbGljZShzLS0sMSk6KGk9ITAsbi52YWx1ZT1jKSk7aXx8by5wdXNoKHtrZXk6YSx2YWx1ZTpjfSksci51cGRhdGVVUkwoKX0sc29ydDpmdW5jdGlvbigpe3ZhciB0LGUsbixyPUkodGhpcyksbz1yLmVudHJpZXMsaT1vLnNsaWNlKCk7Zm9yKG8ubGVuZ3RoPTAsbj0wO248aS5sZW5ndGg7bisrKXtmb3IodD1pW25dLGU9MDtlPG47ZSsrKWlmKG9bZV0ua2V5PnQua2V5KXtvLnNwbGljZShlLDAsdCk7YnJlYWt9ZT09PW4mJm8ucHVzaCh0KX1yLnVwZGF0ZVVSTCgpfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPUkodGhpcykuZW50cmllcyxyPXAodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPTA7bzxuLmxlbmd0aDspcigoZT1uW28rK10pLnZhbHVlLGUua2V5LHRoaXMpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImtleXMiKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsInZhbHVlcyIpfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImVudHJpZXMiKX19LHtlbnVtZXJhYmxlOiEwfSksYShxLGoscS5lbnRyaWVzKSxhKHEsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1JKHRoaXMpLmVudHJpZXMsbj1bXSxyPTA7cjxlLmxlbmd0aDspdD1lW3IrK10sbi5wdXNoKEYodC5rZXkpKyI9IitGKHQudmFsdWUpKTtyZXR1cm4gbi5qb2luKCImIil9KSx7ZW51bWVyYWJsZTohMH0pLHMoSCxrKSxyKHtnbG9iYWw6ITAsZm9yY2VkOiFpfSx7VVJMU2VhcmNoUGFyYW1zOkh9KSxpfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8ImZ1bmN0aW9uIiE9dHlwZW9mIEN8fHIoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPVt0XTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiYoZyhlPWFyZ3VtZW50c1sxXSkmJihuPWUuYm9keSxoKG4pPT09ayYmKChyPWUuaGVhZGVycz9uZXcgQyhlLmhlYWRlcnMpOm5ldyBDKS5oYXMoImNvbnRlbnQtdHlwZSIpfHxyLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSxlPXkoZSx7Ym9keTptKDAsU3RyaW5nKG4pKSxoZWFkZXJzOm0oMCxyKX0pKSksby5wdXNoKGUpKSxFLmFwcGx5KHRoaXMsbyl9fSksdC5leHBvcnRzPXtVUkxTZWFyY2hQYXJhbXM6SCxnZXRTdGF0ZTpJfX0sMTM5MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgyMjAxKTt2YXIgcixvPW4oMTQwNDQpLGk9big2MjU1NiksYT1uKDU3NTk3KSxjPW4oODk1NTgpLHM9big4NjQwMSksdT1uKDkyOTEzKSxsPW4oNTkzNzkpLGY9big3NjI5OCksZD1uKDc4Njg1KSxwPW4oODUxNjYpLGg9big2MDE0MCkuY29kZUF0LHY9big2OTkyNyksZz1uKDUxMTI4KSx5PW4oNTU1NyksbT1uKDg5ODI3KSxiPWMuVVJMLHg9eS5VUkxTZWFyY2hQYXJhbXMsdz15LmdldFN0YXRlLEU9bS5zZXQsQz1tLmdldHRlckZvcigiVVJMIiksaj1NYXRoLmZsb29yLGs9TWF0aC5wb3csUz0iSW52YWxpZCBzY2hlbWUiLE89IkludmFsaWQgaG9zdCIsST0iSW52YWxpZCBwb3J0IixBPS9bQS1aYS16XS8sTT0vW1xkK1wtLkEtWmEtel0vLFQ9L1xkLyxfPS9eKDB4fDBYKS8sUj0vXlswLTddKyQvLEw9L15cZCskLyxQPS9eW1xkQS1GYS1mXSskLyxOPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMlLzo/QFtcXF1dLyxEPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMvOj9AW1xcXV0vLEY9L15bXHUwMDAwLVx1MDAxRiBdK3xbXHUwMDAwLVx1MDAxRiBdKyQvZyxVPS9bXHUwMDA5XHUwMDBBXHUwMDBEXS9nLEI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLG87aWYoIlsiPT1lLmNoYXJBdCgwKSl7aWYoIl0iIT1lLmNoYXJBdChlLmxlbmd0aC0xKSlyZXR1cm4gTztpZighKG49VihlLnNsaWNlKDEsLTEpKSkpcmV0dXJuIE87dC5ob3N0PW59ZWxzZSBpZihKKHQpKXtpZihlPXYoZSksTi50ZXN0KGUpKXJldHVybiBPO2lmKG51bGw9PT0obj16KGUpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNle2lmKEQudGVzdChlKSlyZXR1cm4gTztmb3Iobj0iIixyPXAoZSksbz0wO288ci5sZW5ndGg7bysrKW4rPSQocltvXSxxKTt0Lmhvc3Q9bn19LHo9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz10LnNwbGl0KCIuIik7aWYocy5sZW5ndGgmJiIiPT1zW3MubGVuZ3RoLTFdJiZzLnBvcCgpLChlPXMubGVuZ3RoKT40KXJldHVybiB0O2ZvcihuPVtdLHI9MDtyPGU7cisrKXtpZigiIj09KG89c1tyXSkpcmV0dXJuIHQ7aWYoaT0xMCxvLmxlbmd0aD4xJiYiMCI9PW8uY2hhckF0KDApJiYoaT1fLnRlc3Qobyk/MTY6OCxvPW8uc2xpY2UoOD09aT8xOjIpKSwiIj09PW8pYT0wO2Vsc2V7aWYoISgxMD09aT9MOjg9PWk/UjpQKS50ZXN0KG8pKXJldHVybiB0O2E9cGFyc2VJbnQobyxpKX1uLnB1c2goYSl9Zm9yKHI9MDtyPGU7cisrKWlmKGE9bltyXSxyPT1lLTEpe2lmKGE+PWsoMjU2LDUtZSkpcmV0dXJuIG51bGx9ZWxzZSBpZihhPjI1NSlyZXR1cm4gbnVsbDtmb3IoYz1uLnBvcCgpLHI9MDtyPG4ubGVuZ3RoO3IrKyljKz1uW3JdKmsoMjU2LDMtcik7cmV0dXJuIGN9LFY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz1bMCwwLDAsMCwwLDAsMCwwXSx1PTAsbD1udWxsLGY9MCxkPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY2hhckF0KGYpfTtpZigiOiI9PWQoKSl7aWYoIjoiIT10LmNoYXJBdCgxKSlyZXR1cm47Zis9MixsPSsrdX1mb3IoO2QoKTspe2lmKDg9PXUpcmV0dXJuO2lmKCI6IiE9ZCgpKXtmb3IoZT1uPTA7bjw0JiZQLnRlc3QoZCgpKTspZT0xNiplK3BhcnNlSW50KGQoKSwxNiksZisrLG4rKztpZigiLiI9PWQoKSl7aWYoMD09bilyZXR1cm47aWYoZi09bix1PjYpcmV0dXJuO2ZvcihyPTA7ZCgpOyl7aWYobz1udWxsLHI+MCl7aWYoISgiLiI9PWQoKSYmcjw0KSlyZXR1cm47ZisrfWlmKCFULnRlc3QoZCgpKSlyZXR1cm47Zm9yKDtULnRlc3QoZCgpKTspe2lmKGk9cGFyc2VJbnQoZCgpLDEwKSxudWxsPT09bylvPWk7ZWxzZXtpZigwPT1vKXJldHVybjtvPTEwKm8raX1pZihvPjI1NSlyZXR1cm47ZisrfXNbdV09MjU2KnNbdV0rbywyIT0rK3ImJjQhPXJ8fHUrK31pZig0IT1yKXJldHVybjticmVha31pZigiOiI9PWQoKSl7aWYoZisrLCFkKCkpcmV0dXJufWVsc2UgaWYoZCgpKXJldHVybjtzW3UrK109ZX1lbHNle2lmKG51bGwhPT1sKXJldHVybjtmKyssbD0rK3V9fWlmKG51bGwhPT1sKWZvcihhPXUtbCx1PTc7MCE9dSYmYT4wOyljPXNbdV0sc1t1LS1dPXNbbCthLTFdLHNbbCstLWFdPWM7ZWxzZSBpZig4IT11KXJldHVybjtyZXR1cm4gc30sSD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbztpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihlPVtdLG49MDtuPDQ7bisrKWUudW5zaGlmdCh0JTI1NiksdD1qKHQvMjU2KTtyZXR1cm4gZS5qb2luKCIuIil9aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IoZT0iIixyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLG49MSxyPW51bGwsbz0wLGk9MDtpPDg7aSsrKTAhPT10W2ldPyhvPm4mJihlPXIsbj1vKSxyPW51bGwsbz0wKToobnVsbD09PXImJihyPWkpLCsrbyk7cmV0dXJuIG8+biYmKGU9cixuPW8pLGV9KHQpLG49MDtuPDg7bisrKW8mJjA9PT10W25dfHwobyYmKG89ITEpLHI9PT1uPyhlKz1uPyI6IjoiOjoiLG89ITApOihlKz10W25dLnRvU3RyaW5nKDE2KSxuPDcmJihlKz0iOiIpKSk7cmV0dXJuIlsiK2UrIl0ifXJldHVybiB0fSxxPXt9LFc9ZCh7fSxxLHsiICI6MSwnIic6MSwiPCI6MSwiPiI6MSwiYCI6MX0pLEc9ZCh7fSxXLHsiIyI6MSwiPyI6MSwieyI6MSwifSI6MX0pLFo9ZCh7fSxHLHsiLyI6MSwiOiI6MSwiOyI6MSwiPSI6MSwiQCI6MSwiWyI6MSwiXFwiOjEsIl0iOjEsIl4iOjEsInwiOjF9KSwkPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCh0LDApO3JldHVybiBuPjMyJiZuPDEyNyYmIWYoZSx0KT90OmVuY29kZVVSSUNvbXBvbmVudCh0KX0sWT17ZnRwOjIxLGZpbGU6bnVsbCxodHRwOjgwLGh0dHBzOjQ0Myx3czo4MCx3c3M6NDQzfSxKPWZ1bmN0aW9uKHQpe3JldHVybiBmKFksdC5zY2hlbWUpfSxLPWZ1bmN0aW9uKHQpe3JldHVybiIiIT10LnVzZXJuYW1lfHwiIiE9dC5wYXNzd29yZH0sWD1mdW5jdGlvbih0KXtyZXR1cm4hdC5ob3N0fHx0LmNhbm5vdEJlQUJhc2VVUkx8fCJmaWxlIj09dC5zY2hlbWV9LFE9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gMj09dC5sZW5ndGgmJkEudGVzdCh0LmNoYXJBdCgwKSkmJigiOiI9PShuPXQuY2hhckF0KDEpKXx8IWUmJiJ8Ij09bil9LHR0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0Lmxlbmd0aD4xJiZRKHQuc2xpY2UoMCwyKSkmJigyPT10Lmxlbmd0aHx8Ii8iPT09KGU9dC5jaGFyQXQoMikpfHwiXFwiPT09ZXx8Ij8iPT09ZXx8IiMiPT09ZSl9LGV0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucGF0aCxuPWUubGVuZ3RoOyFufHwiZmlsZSI9PXQuc2NoZW1lJiYxPT1uJiZRKGVbMF0sITApfHxlLnBvcCgpfSxudD1mdW5jdGlvbih0KXtyZXR1cm4iLiI9PT10fHwiJTJlIj09PXQudG9Mb3dlckNhc2UoKX0scnQ9e30sb3Q9e30saXQ9e30sYXQ9e30sY3Q9e30sc3Q9e30sdXQ9e30sbHQ9e30sZnQ9e30sZHQ9e30scHQ9e30saHQ9e30sdnQ9e30sZ3Q9e30seXQ9e30sbXQ9e30sYnQ9e30seHQ9e30sd3Q9e30sRXQ9e30sQ3Q9e30sanQ9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIGksYSxjLHMsdSxsPW58fHJ0LGQ9MCxoPSIiLHY9ITEsZz0hMSx5PSExO2ZvcihufHwodC5zY2hlbWU9IiIsdC51c2VybmFtZT0iIix0LnBhc3N3b3JkPSIiLHQuaG9zdD1udWxsLHQucG9ydD1udWxsLHQucGF0aD1bXSx0LnF1ZXJ5PW51bGwsdC5mcmFnbWVudD1udWxsLHQuY2Fubm90QmVBQmFzZVVSTD0hMSxlPWUucmVwbGFjZShGLCIiKSksZT1lLnJlcGxhY2UoVSwiIiksaT1wKGUpO2Q8PWkubGVuZ3RoOyl7c3dpdGNoKGE9aVtkXSxsKXtjYXNlIHJ0OmlmKCFhfHwhQS50ZXN0KGEpKXtpZihuKXJldHVybiBTO2w9aXQ7Y29udGludWV9aCs9YS50b0xvd2VyQ2FzZSgpLGw9b3Q7YnJlYWs7Y2FzZSBvdDppZihhJiYoTS50ZXN0KGEpfHwiKyI9PWF8fCItIj09YXx8Ii4iPT1hKSloKz1hLnRvTG93ZXJDYXNlKCk7ZWxzZXtpZigiOiIhPWEpe2lmKG4pcmV0dXJuIFM7aD0iIixsPWl0LGQ9MDtjb250aW51ZX1pZihuJiYoSih0KSE9ZihZLGgpfHwiZmlsZSI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KXx8ImZpbGUiPT10LnNjaGVtZSYmIXQuaG9zdCkpcmV0dXJuO2lmKHQuc2NoZW1lPWgsbilyZXR1cm4gdm9pZChKKHQpJiZZW3Quc2NoZW1lXT09dC5wb3J0JiYodC5wb3J0PW51bGwpKTtoPSIiLCJmaWxlIj09dC5zY2hlbWU/bD1ndDpKKHQpJiZvJiZvLnNjaGVtZT09dC5zY2hlbWU/bD1hdDpKKHQpP2w9bHQ6Ii8iPT1pW2QrMV0/KGw9Y3QsZCsrKToodC5jYW5ub3RCZUFCYXNlVVJMPSEwLHQucGF0aC5wdXNoKCIiKSxsPXd0KX1icmVhaztjYXNlIGl0OmlmKCFvfHxvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIiE9YSlyZXR1cm4gUztpZihvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIj09YSl7dC5zY2hlbWU9by5zY2hlbWUsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLHQuY2Fubm90QmVBQmFzZVVSTD0hMCxsPUN0O2JyZWFrfWw9ImZpbGUiPT1vLnNjaGVtZT9ndDpzdDtjb250aW51ZTtjYXNlIGF0OmlmKCIvIiE9YXx8Ii8iIT1pW2QrMV0pe2w9c3Q7Y29udGludWV9bD1mdCxkKys7YnJlYWs7Y2FzZSBjdDppZigiLyI9PWEpe2w9ZHQ7YnJlYWt9bD14dDtjb250aW51ZTtjYXNlIHN0OmlmKHQuc2NoZW1lPW8uc2NoZW1lLGE9PXIpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCIvIj09YXx8IlxcIj09YSYmSih0KSlsPXV0O2Vsc2UgaWYoIj8iPT1hKXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3QudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnBhdGgucG9wKCksbD14dDtjb250aW51ZX10LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1DdH1icmVhaztjYXNlIHV0OmlmKCFKKHQpfHwiLyIhPWEmJiJcXCIhPWEpe2lmKCIvIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsbD14dDtjb250aW51ZX1sPWR0fWVsc2UgbD1mdDticmVhaztjYXNlIGx0OmlmKGw9ZnQsIi8iIT1hfHwiLyIhPWguY2hhckF0KGQrMSkpY29udGludWU7ZCsrO2JyZWFrO2Nhc2UgZnQ6aWYoIi8iIT1hJiYiXFwiIT1hKXtsPWR0O2NvbnRpbnVlfWJyZWFrO2Nhc2UgZHQ6aWYoIkAiPT1hKXt2JiYoaD0iJTQwIitoKSx2PSEwLGM9cChoKTtmb3IodmFyIG09MDttPGMubGVuZ3RoO20rKyl7dmFyIGI9Y1ttXTtpZigiOiIhPWJ8fHkpe3ZhciB4PSQoYixaKTt5P3QucGFzc3dvcmQrPXg6dC51c2VybmFtZSs9eH1lbHNlIHk9ITB9aD0iIn1lbHNlIGlmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCkpe2lmKHYmJiIiPT1oKXJldHVybiJJbnZhbGlkIGF1dGhvcml0eSI7ZC09cChoKS5sZW5ndGgrMSxoPSIiLGw9cHR9ZWxzZSBoKz1hO2JyZWFrO2Nhc2UgcHQ6Y2FzZSBodDppZihuJiYiZmlsZSI9PXQuc2NoZW1lKXtsPW10O2NvbnRpbnVlfWlmKCI6IiE9YXx8Zyl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KSl7aWYoSih0KSYmIiI9PWgpcmV0dXJuIE87aWYobiYmIiI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KSlyZXR1cm47aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoaD0iIixsPWJ0LG4pcmV0dXJuO2NvbnRpbnVlfSJbIj09YT9nPSEwOiJdIj09YSYmKGc9ITEpLGgrPWF9ZWxzZXtpZigiIj09aClyZXR1cm4gTztpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9dnQsbj09aHQpcmV0dXJufWJyZWFrO2Nhc2UgdnQ6aWYoIVQudGVzdChhKSl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KXx8bil7aWYoIiIhPWgpe3ZhciB3PXBhcnNlSW50KGgsMTApO2lmKHc+NjU1MzUpcmV0dXJuIEk7dC5wb3J0PUoodCkmJnc9PT1ZW3Quc2NoZW1lXT9udWxsOncsaD0iIn1pZihuKXJldHVybjtsPWJ0O2NvbnRpbnVlfXJldHVybiBJfWgrPWE7YnJlYWs7Y2FzZSBndDppZih0LnNjaGVtZT0iZmlsZSIsIi8iPT1hfHwiXFwiPT1hKWw9eXQ7ZWxzZXtpZighb3x8ImZpbGUiIT1vLnNjaGVtZSl7bD14dDtjb250aW51ZX1pZihhPT1yKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCI/Ij09YSl0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3R0KGkuc2xpY2UoZCkuam9pbigiIikpfHwodC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksZXQodCkpLGw9eHQ7Y29udGludWV9dC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1DdH19YnJlYWs7Y2FzZSB5dDppZigiLyI9PWF8fCJcXCI9PWEpe2w9bXQ7YnJlYWt9byYmImZpbGUiPT1vLnNjaGVtZSYmIXR0KGkuc2xpY2UoZCkuam9pbigiIikpJiYoUShvLnBhdGhbMF0sITApP3QucGF0aC5wdXNoKG8ucGF0aFswXSk6dC5ob3N0PW8uaG9zdCksbD14dDtjb250aW51ZTtjYXNlIG10OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YXx8Ij8iPT1hfHwiIyI9PWEpe2lmKCFuJiZRKGgpKWw9eHQ7ZWxzZSBpZigiIj09aCl7aWYodC5ob3N0PSIiLG4pcmV0dXJuO2w9YnR9ZWxzZXtpZihzPUIodCxoKSlyZXR1cm4gcztpZigibG9jYWxob3N0Ij09dC5ob3N0JiYodC5ob3N0PSIiKSxuKXJldHVybjtoPSIiLGw9YnR9Y29udGludWV9aCs9YTticmVhaztjYXNlIGJ0OmlmKEoodCkpe2lmKGw9eHQsIi8iIT1hJiYiXFwiIT1hKWNvbnRpbnVlfWVsc2UgaWYobnx8Ij8iIT1hKWlmKG58fCIjIiE9YSl7aWYoYSE9ciYmKGw9eHQsIi8iIT1hKSljb250aW51ZX1lbHNlIHQuZnJhZ21lbnQ9IiIsbD1DdDtlbHNlIHQucXVlcnk9IiIsbD1FdDticmVhaztjYXNlIHh0OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YSYmSih0KXx8IW4mJigiPyI9PWF8fCIjIj09YSkpe2lmKCIuLiI9PT0odT0odT1oKS50b0xvd2VyQ2FzZSgpKXx8IiUyZS4iPT09dXx8Ii4lMmUiPT09dXx8IiUyZSUyZSI9PT11PyhldCh0KSwiLyI9PWF8fCJcXCI9PWEmJkoodCl8fHQucGF0aC5wdXNoKCIiKSk6bnQoaCk/Ii8iPT1hfHwiXFwiPT1hJiZKKHQpfHx0LnBhdGgucHVzaCgiIik6KCJmaWxlIj09dC5zY2hlbWUmJiF0LnBhdGgubGVuZ3RoJiZRKGgpJiYodC5ob3N0JiYodC5ob3N0PSIiKSxoPWguY2hhckF0KDApKyI6IiksdC5wYXRoLnB1c2goaCkpLGg9IiIsImZpbGUiPT10LnNjaGVtZSYmKGE9PXJ8fCI/Ij09YXx8IiMiPT1hKSlmb3IoO3QucGF0aC5sZW5ndGg+MSYmIiI9PT10LnBhdGhbMF07KXQucGF0aC5zaGlmdCgpOyI/Ij09YT8odC5xdWVyeT0iIixsPUV0KToiIyI9PWEmJih0LmZyYWdtZW50PSIiLGw9Q3QpfWVsc2UgaCs9JChhLEcpO2JyZWFrO2Nhc2Ugd3Q6Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YT8odC5mcmFnbWVudD0iIixsPUN0KTphIT1yJiYodC5wYXRoWzBdKz0kKGEscSkpO2JyZWFrO2Nhc2UgRXQ6bnx8IiMiIT1hP2EhPXImJigiJyI9PWEmJkoodCk/dC5xdWVyeSs9IiUyNyI6dC5xdWVyeSs9IiMiPT1hPyIlMjMiOiQoYSxxKSk6KHQuZnJhZ21lbnQ9IiIsbD1DdCk7YnJlYWs7Y2FzZSBDdDphIT1yJiYodC5mcmFnbWVudCs9JChhLFcpKX1kKyt9fSxrdD1mdW5jdGlvbih0KXt2YXIgZSxuLHI9bCh0aGlzLGt0LCJVUkwiKSxvPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGE9U3RyaW5nKHQpLGM9RShyLHt0eXBlOiJVUkwifSk7aWYodm9pZCAwIT09bylpZihvIGluc3RhbmNlb2Yga3QpZT1DKG8pO2Vsc2UgaWYobj1qdChlPXt9LFN0cmluZyhvKSkpdGhyb3cgVHlwZUVycm9yKG4pO2lmKG49anQoYyxhLG51bGwsZSkpdGhyb3cgVHlwZUVycm9yKG4pO3ZhciBzPWMuc2VhcmNoUGFyYW1zPW5ldyB4LHU9dyhzKTt1LnVwZGF0ZVNlYXJjaFBhcmFtcyhjLnF1ZXJ5KSx1LnVwZGF0ZVVSTD1mdW5jdGlvbigpe2MucXVlcnk9U3RyaW5nKHMpfHxudWxsfSxpfHwoci5ocmVmPU90LmNhbGwociksci5vcmlnaW49SXQuY2FsbChyKSxyLnByb3RvY29sPUF0LmNhbGwociksci51c2VybmFtZT1NdC5jYWxsKHIpLHIucGFzc3dvcmQ9VHQuY2FsbChyKSxyLmhvc3Q9X3QuY2FsbChyKSxyLmhvc3RuYW1lPVJ0LmNhbGwociksci5wb3J0PUx0LmNhbGwociksci5wYXRobmFtZT1QdC5jYWxsKHIpLHIuc2VhcmNoPU50LmNhbGwociksci5zZWFyY2hQYXJhbXM9RHQuY2FsbChyKSxyLmhhc2g9RnQuY2FsbChyKSl9LFN0PWt0LnByb3RvdHlwZSxPdD1mdW5jdGlvbigpe3ZhciB0PUModGhpcyksZT10LnNjaGVtZSxuPXQudXNlcm5hbWUscj10LnBhc3N3b3JkLG89dC5ob3N0LGk9dC5wb3J0LGE9dC5wYXRoLGM9dC5xdWVyeSxzPXQuZnJhZ21lbnQsdT1lKyI6IjtyZXR1cm4gbnVsbCE9PW8/KHUrPSIvLyIsSyh0KSYmKHUrPW4rKHI/IjoiK3I6IiIpKyJAIiksdSs9SChvKSxudWxsIT09aSYmKHUrPSI6IitpKSk6ImZpbGUiPT1lJiYodSs9Ii8vIiksdSs9dC5jYW5ub3RCZUFCYXNlVVJMP2FbMF06YS5sZW5ndGg/Ii8iK2Euam9pbigiLyIpOiIiLG51bGwhPT1jJiYodSs9Ij8iK2MpLG51bGwhPT1zJiYodSs9IiMiK3MpLHV9LEl0PWZ1bmN0aW9uKCl7dmFyIHQ9Qyh0aGlzKSxlPXQuc2NoZW1lLG49dC5wb3J0O2lmKCJibG9iIj09ZSl0cnl7cmV0dXJuIG5ldyBVUkwoZS5wYXRoWzBdKS5vcmlnaW59Y2F0Y2godCl7cmV0dXJuIm51bGwifXJldHVybiJmaWxlIiE9ZSYmSih0KT9lKyI6Ly8iK0godC5ob3N0KSsobnVsbCE9PW4/IjoiK246IiIpOiJudWxsIn0sQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gQyh0aGlzKS5zY2hlbWUrIjoifSxNdD1mdW5jdGlvbigpe3JldHVybiBDKHRoaXMpLnVzZXJuYW1lfSxUdD1mdW5jdGlvbigpe3JldHVybiBDKHRoaXMpLnBhc3N3b3JkfSxfdD1mdW5jdGlvbigpe3ZhciB0PUModGhpcyksZT10Lmhvc3Qsbj10LnBvcnQ7cmV0dXJuIG51bGw9PT1lPyIiOm51bGw9PT1uP0goZSk6SChlKSsiOiIrbn0sUnQ9ZnVuY3Rpb24oKXt2YXIgdD1DKHRoaXMpLmhvc3Q7cmV0dXJuIG51bGw9PT10PyIiOkgodCl9LEx0PWZ1bmN0aW9uKCl7dmFyIHQ9Qyh0aGlzKS5wb3J0O3JldHVybiBudWxsPT09dD8iIjpTdHJpbmcodCl9LFB0PWZ1bmN0aW9uKCl7dmFyIHQ9Qyh0aGlzKSxlPXQucGF0aDtyZXR1cm4gdC5jYW5ub3RCZUFCYXNlVVJMP2VbMF06ZS5sZW5ndGg/Ii8iK2Uuam9pbigiLyIpOiIifSxOdD1mdW5jdGlvbigpe3ZhciB0PUModGhpcykucXVlcnk7cmV0dXJuIHQ/Ij8iK3Q6IiJ9LER0PWZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcykuc2VhcmNoUGFyYW1zfSxGdD1mdW5jdGlvbigpe3ZhciB0PUModGhpcykuZnJhZ21lbnQ7cmV0dXJuIHQ/IiMiK3Q6IiJ9LFV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2dldDp0LHNldDplLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX07aWYoaSYmcyhTdCx7aHJlZjpVdChPdCwoZnVuY3Rpb24odCl7dmFyIGU9Qyh0aGlzKSxuPVN0cmluZyh0KSxyPWp0KGUsbik7aWYocil0aHJvdyBUeXBlRXJyb3Iocik7dyhlLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKGUucXVlcnkpfSkpLG9yaWdpbjpVdChJdCkscHJvdG9jb2w6VXQoQXQsKGZ1bmN0aW9uKHQpe3ZhciBlPUModGhpcyk7anQoZSxTdHJpbmcodCkrIjoiLHJ0KX0pKSx1c2VybmFtZTpVdChNdCwoZnVuY3Rpb24odCl7dmFyIGU9Qyh0aGlzKSxuPXAoU3RyaW5nKHQpKTtpZighWChlKSl7ZS51c2VybmFtZT0iIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllLnVzZXJuYW1lKz0kKG5bcl0sWil9fSkpLHBhc3N3b3JkOlV0KFR0LChmdW5jdGlvbih0KXt2YXIgZT1DKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnBhc3N3b3JkPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUucGFzc3dvcmQrPSQobltyXSxaKX19KSksaG9zdDpVdChfdCwoZnVuY3Rpb24odCl7dmFyIGU9Qyh0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fGp0KGUsU3RyaW5nKHQpLHB0KX0pKSxob3N0bmFtZTpVdChSdCwoZnVuY3Rpb24odCl7dmFyIGU9Qyh0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fGp0KGUsU3RyaW5nKHQpLGh0KX0pKSxwb3J0OlV0KEx0LChmdW5jdGlvbih0KXt2YXIgZT1DKHRoaXMpO1goZSl8fCgiIj09KHQ9U3RyaW5nKHQpKT9lLnBvcnQ9bnVsbDpqdChlLHQsdnQpKX0pKSxwYXRobmFtZTpVdChQdCwoZnVuY3Rpb24odCl7dmFyIGU9Qyh0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fChlLnBhdGg9W10sanQoZSx0KyIiLGJ0KSl9KSksc2VhcmNoOlV0KE50LChmdW5jdGlvbih0KXt2YXIgZT1DKHRoaXMpOyIiPT0odD1TdHJpbmcodCkpP2UucXVlcnk9bnVsbDooIj8iPT10LmNoYXJBdCgwKSYmKHQ9dC5zbGljZSgxKSksZS5xdWVyeT0iIixqdChlLHQsRXQpKSx3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksc2VhcmNoUGFyYW1zOlV0KER0KSxoYXNoOlV0KEZ0LChmdW5jdGlvbih0KXt2YXIgZT1DKHRoaXMpOyIiIT0odD1TdHJpbmcodCkpPygiIyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLmZyYWdtZW50PSIiLGp0KGUsdCxDdCkpOmUuZnJhZ21lbnQ9bnVsbH0pKX0pLHUoU3QsInRvSlNPTiIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90LmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLHUoU3QsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksYil7dmFyIEJ0PWIuY3JlYXRlT2JqZWN0VVJMLHp0PWIucmV2b2tlT2JqZWN0VVJMO0J0JiZ1KGt0LCJjcmVhdGVPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4gQnQuYXBwbHkoYixhcmd1bWVudHMpfSkpLHp0JiZ1KGt0LCJyZXZva2VPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4genQuYXBwbHkoYixhcmd1bWVudHMpfSkpfWcoa3QsIlVSTCIpLG8oe2dsb2JhbDohMCxmb3JjZWQ6IWEsc2hhbTohaX0se1VSTDprdH0pfSw5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJVUkwiLHByb3RvOiEwLGVudW1lcmFibGU6ITB9LHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfX0pfSwzNjQ2NzpmdW5jdGlvbih0LGUsbil7bigxNDA4Nil9LDY2NTU0OmZ1bmN0aW9uKHQsZSxuKXtuKDQ5MzApLG4oNjM2NCl9LDkzMjcwOmZ1bmN0aW9uKHQsZSxuKXtuKDUzNTEzKSxuKDk5MjU1KSxuKDQ4NDQpLG4oMzU1NCksbigxODg0NCksbigzNTY1Niksbig0OTA1MCksbig5Mzg0Myksbig2NjIyNCksbig3MTcwMCksbig2OTUyOSksbigyNzczNCksbig3NzM2OSksbig2OTg0Miksbig5NzkyOCksbig5MzkpLG4oNjE0NjcpLG4oMTYxMjcpLG4oNTM1ODkpLG4oODEwNDIpLG4oMTY3NTcpLG4oMTEwNzQpLG4oMzM1MzkpLG4oMjQxMDMpLG4oNjQ4MTMpLG4oNjg5OTkpLG4oNTM4MjQpfSw4OTc0MDpmdW5jdGlvbih0LGUsbil7bigzODc5MiksbigxOTkwKSxuKDk3Mjg0KSxuKDI0NTk4KSxuKDk5OTc5KSxuKDE4MjA1KSxuKDg1OCksbig2NDg5OSl9LDY4MDAxOmZ1bmN0aW9uKHQsZSxuKXtuKDMwNjEzKSxuKDY4NDA2KSxuKDQ5NzkpLG4oNDQ2NDYpfSwyODY5OTpmdW5jdGlvbih0LGUsbil7big5OTYyOCk7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDE1NjI0OmZ1bmN0aW9uKHQsZSxuKXtuKDU3MzYwKX0sODEyMTM6ZnVuY3Rpb24odCxlLG4pe24oNjEyOTgpLG4oNDcwMDQpLG4oNjc0NjIpLG4oOTA2NyksbigyMDEyNCksbigyMTM3MSksbigzODk4NCksbig2OTIzNyksbigyNjQ5Nyksbig1MzE2OCksbig3Mzk0OSksbig4ODIxMSksbig3Mzc2MSksbig0MjE5Niksbig0MzMzMiksbig5MjYwMSksbigyMDQ3NCksbig1NDU1Niksbig0MDYzOCksbig5NjY1OSksbigxNDY4OCksbig3Mzc4KSxuKDI3NDI4KSxuKDMzNDM2KSxuKDg0Mzg4KSxuKDU5NjIzKSxuKDMyODUzKSxuKDY3MDcyKX0sNjI2Nzc6ZnVuY3Rpb24odCxlLG4pe24oMzY1NzEpLG4oNDMwODYpfSwzNzYxMzpmdW5jdGlvbih0LGUsbil7big0MzI5MCksbigxNDY4Miksbig4NzU1NSl9LDE0NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDcwMjI1KSxuKDIzOTkpLG4oMTY4MDkpLG4oNjcxNDEpLG4oOTA3NjkpLG4oNTc4OTEpLG4oMTU3MjIpfSwzNjY4NjpmdW5jdGlvbih0LGUsbil7big3NzkwNyl9LDY3NzkzOmZ1bmN0aW9uKHQsZSxuKXtuKDc1NjQ3KX0sOTQ3NzpmdW5jdGlvbih0LGUsbil7big4NDMwOSksbig3Mjk2Myksbig1NjM1OSl9LDcyMzU0OmZ1bmN0aW9uKHQsZSxuKXtuKDIwMjM0KSxuKDUxMzc0KX0sNzQ2Nzk6ZnVuY3Rpb24odCxlLG4pe24oNTM3NzIpfSw5NDc5OmZ1bmN0aW9uKHQsZSxuKXtuKDI3NzUpfSw4NTY1OTpmdW5jdGlvbih0LGUsbil7big5Njc1MSksbig3MzIyMCl9LDU0OTg2OmZ1bmN0aW9uKHQsZSxuKXtuKDExMDcxKX0sMTg4MTpmdW5jdGlvbih0LGUsbil7big0OTY0MCksbig3NDk2Myksbig2OTQ1OSksbig0OTE1NSksbigyNjg5Niksbig4NzQ3NCksbig5NzQzMyksbig3MTA4KSxuKDIzNjMxKX0sNTc2MDM6ZnVuY3Rpb24odCxlLG4pe24oMTc2NSl9LDgxNTQ4OmZ1bmN0aW9uKHQsZSxuKXtuKDk4MzUwKSxuKDQxNzE4KSxuKDU3MzcxKSxuKDg5MjMwKSxuKDMyMzAzKSxuKDYyOTEpLG4oNjYxODEpfSwyMzEwMjpmdW5jdGlvbih0LGUsbil7big3MzQ2MCl9LDQ0MTUzOmZ1bmN0aW9uKHQsZSxuKXtuKDMyMDYyKX0sNzM5MjpmdW5jdGlvbih0LGUsbil7big3NDUyNSl9LDc3Nzk6ZnVuY3Rpb24odCxlLG4pe24oNjQwMjYpLG4oODYwNzcpfSw2MDgyNjpmdW5jdGlvbih0LGUsbil7bigxMzkxMCksbig5ODQpLG4oNTU1Nyl9LDU1OTMzOmZ1bmN0aW9uKHQsZSxuKXtuKDY5NDIpLG4oOTQyNDkpfSw4NzYwMjpmdW5jdGlvbih0LGUsbil7big2ODAwMSksbigyMzEwMiksbig2MDgyNik7dmFyIHI9big5NTk2OCk7dC5leHBvcnRzPXJ9LDk1OTY4OmZ1bmN0aW9uKHQsZSxuKXtuKDY2NTU0KSxuKDkzMjcwKSxuKDg5NzQwKSxuKDYyNjc3KSxuKDE0NzE1KSxuKDM2Njg2KSxuKDY3NzkzKSxuKDk0NzcpLG4oNzIzNTQpLG4oNzQ2NzkpLG4oNTQ5ODYpLG4oNTc2MDMpLG4oNDQxNTMpO3ZhciByPW4oNDc5NzIpO3QuZXhwb3J0cz1yfSw0Nzk3MjpmdW5jdGlvbih0LGUsbil7bigzNjQ2Nyksbig4MTIxMyksbigzNzYxMyksbig4MTU0OCksbig1NTkzMyk7dmFyIHI9big1OTAxMSk7dC5leHBvcnRzPXJ9LDU5MDExOmZ1bmN0aW9uKHQsZSxuKXtuKDg1NjU5KSxuKDc3NzkpO3ZhciByPW4oNjg2ODUpO3QuZXhwb3J0cz1yfSw2ODY4NTpmdW5jdGlvbih0LGUsbil7bigyODY5OSksbig5NDc5KSxuKDczOTIpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw1NzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1MzMzNSk7dC5leHBvcnRzPXJ9LDUzMzM1OmZ1bmN0aW9uKHQsZSxuKXtuKDE4ODEpO3ZhciByPW4oODc2MDIpO3QuZXhwb3J0cz1yfSw5MjQwNDpmdW5jdGlvbih0LGUsbil7big2NzAzOSksbig3OTc5OSksbig3NDAxMCksbig2NTk3Niksbig4MTk5NCksbigxMzkxMCksbig5ODQpLG4oNTU1Nyk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDE4OTg2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXXx8IiIscj10WzNdO2lmKCFyKXJldHVybiBuO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgbz0oYT1yLGM9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSkscz0ic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIi5jb25jYXQoYyksIi8qIyAiLmNvbmNhdChzLCIgKi8iKSksaT1yLnNvdXJjZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iLmNvbmNhdChyLnNvdXJjZVJvb3QpLmNvbmNhdCh0LCIgKi8iKX0pKTtyZXR1cm5bbl0uY29uY2F0KGkpLmNvbmNhdChbb10pLmpvaW4oIlxuIil9dmFyIGEsYyxzO3JldHVybltuXS5qb2luKCJcbiIpfShlLHQpO3JldHVybiBlWzJdPyJAbWVkaWEgIi5jb25jYXQoZVsyXSwiIHsiKS5jb25jYXQobiwifSIpOm59KSkuam9pbigiIil9LGUuaT1mdW5jdGlvbih0LG4peyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsIiJdXSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPVtdLmNvbmNhdCh0W3JdKTtuJiYob1syXT9vWzJdPSIiLmNvbmNhdChuLCIgYW5kICIpLmNvbmNhdChvWzJdKTpvWzJdPW4pLGUucHVzaChvKX19LGV9fSw0NjY3OTpmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGUsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9by5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9by5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPW8udG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e3Moe30sIiIpfWNhdGNoKHQpe3M9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW59fWZ1bmN0aW9uIHUodCxlLG4scil7dmFyIG89ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBnP2U6ZyxpPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGE9bmV3IEkocnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWY7cmV0dXJuIGZ1bmN0aW9uKG8saSl7aWYocj09PXApdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYocj09PWgpe2lmKCJ0aHJvdyI9PT1vKXRocm93IGk7cmV0dXJuIE0oKX1mb3Iobi5tZXRob2Q9byxuLmFyZz1pOzspe3ZhciBhPW4uZGVsZWdhdGU7aWYoYSl7dmFyIGM9ayhhLG4pO2lmKGMpe2lmKGM9PT12KWNvbnRpbnVlO3JldHVybiBjfX1pZigibmV4dCI9PT1uLm1ldGhvZCluLnNlbnQ9bi5fc2VudD1uLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2UicmV0dXJuIj09PW4ubWV0aG9kJiZuLmFicnVwdCgicmV0dXJuIixuLmFyZyk7cj1wO3ZhciBzPWwodCxlLG4pO2lmKCJub3JtYWwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT12KWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19InRocm93Ij09PXMudHlwZSYmKHI9aCxuLm1ldGhvZD0idGhyb3ciLG4uYXJnPXMuYXJnKX19fSh0LG4sYSksaX1mdW5jdGlvbiBsKHQsZSxuKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLG4pfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPXU7dmFyIGY9InN1c3BlbmRlZFN0YXJ0IixkPSJzdXNwZW5kZWRZaWVsZCIscD0iZXhlY3V0aW5nIixoPSJjb21wbGV0ZWQiLHY9e307ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIG0oKXt9dmFyIGI9e307cyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHg9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eCYmeCh4KEEoW10pKSk7dyYmdyE9PW4mJnIuY2FsbCh3LGkpJiYoYj13KTt2YXIgRT1tLnByb3RvdHlwZT1nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpO2Z1bmN0aW9uIEModCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtzKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIGoodCxlKXtmdW5jdGlvbiBuKG8saSxhLGMpe3ZhciBzPWwodFtvXSx0LGkpO2lmKCJ0aHJvdyIhPT1zLnR5cGUpe3ZhciB1PXMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXR5cGVvZiBmJiZyLmNhbGwoZiwiX19hd2FpdCIpP2UucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe24oIm5leHQiLHQsYSxjKX0pLChmdW5jdGlvbih0KXtuKCJ0aHJvdyIsdCxhLGMpfSkpOmUucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsYSh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gbigidGhyb3ciLHQsYSxjKX0pKX1jKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe24odCxyLGUsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIGsodCxuKXt2YXIgcj10Lml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09ZSl7aWYobi5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYodC5pdGVyYXRvci5yZXR1cm4mJihuLm1ldGhvZD0icmV0dXJuIixuLmFyZz1lLGsodCxuKSwidGhyb3ciPT09bi5tZXRob2QpKXJldHVybiB2O24ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiB2fXZhciBvPWwocix0Lml0ZXJhdG9yLG4uYXJnKTtpZigidGhyb3ciPT09by50eXBlKXJldHVybiBuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW8uYXJnLG4uZGVsZWdhdGU9bnVsbCx2O3ZhciBpPW8uYXJnO3JldHVybiBpP2kuZG9uZT8oblt0LnJlc3VsdE5hbWVdPWkudmFsdWUsbi5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PW4ubWV0aG9kJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLG4uZGVsZWdhdGU9bnVsbCx2KTppOihuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksbi5kZWxlZ2F0ZT1udWxsLHYpfWZ1bmN0aW9uIFModCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gSSh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gQSh0KXtpZih0KXt2YXIgbj10W2ldO2lmKG4pcmV0dXJuIG4uY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBvPS0xLGE9ZnVuY3Rpb24gbigpe2Zvcig7KytvPHQubGVuZ3RoOylpZihyLmNhbGwodCxvKSlyZXR1cm4gbi52YWx1ZT10W29dLG4uZG9uZT0hMSxuO3JldHVybiBuLnZhbHVlPWUsbi5kb25lPSEwLG59O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6TX19ZnVuY3Rpb24gTSgpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fXJldHVybiB5LnByb3RvdHlwZT1tLHMoRSwiY29uc3RydWN0b3IiLG0pLHMobSwiY29uc3RydWN0b3IiLHkpLHkuZGlzcGxheU5hbWU9cyhtLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT15fHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxtKToodC5fX3Byb3RvX189bSxzKHQsYywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxDKGoucHJvdG90eXBlKSxzKGoucHJvdG90eXBlLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPWosdC5hc3luYz1mdW5jdGlvbihlLG4scixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyBqKHUoZSxuLHIsbyksaSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0sQyhFKSxzKEUsYywiR2VuZXJhdG9yIikscyhFLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhFLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gbigpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgcj1lLnBvcCgpO2lmKHIgaW4gdClyZXR1cm4gbi52YWx1ZT1yLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHQudmFsdWVzPUEsSS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkkscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKE8pLCF0KWZvcih2YXIgbiBpbiB0aGlzKSJ0Ij09PW4uY2hhckF0KDApJiZyLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgbj10aGlzO2Z1bmN0aW9uIG8ocixvKXtyZXR1cm4gYy50eXBlPSJ0aHJvdyIsYy5hcmc9dCxuLm5leHQ9cixvJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sYz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLHU9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZ1KXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCF1KXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8by5maW5hbGx5TG9jKXt2YXIgaT1vO2JyZWFrfX1pJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmaS50cnlMb2M8PWUmJmU8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2Msdik6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSx2fSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4uZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUobi5jb21wbGV0aW9uLG4uYWZ0ZXJMb2MpLE8obiksdn19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLnRyeUxvYz09PXQpe3ZhciByPW4uY29tcGxldGlvbjtpZigidGhyb3ciPT09ci50eXBlKXt2YXIgbz1yLmFyZztPKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6QSh0KSxyZXN1bHROYW1lOm4sbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPWUpLHZ9fSx0fSh0LmV4cG9ydHMpO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9ZX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9ZTpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShlKX19fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17aWQ6cixleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpbi5vKGUscikmJiFuLm8odCxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LG4ucj1mdW5jdGlvbih0KXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17fTtuLnIodCksbi5kKHQse2Rpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiBUdH19KTt2YXIgZT1uKDY0MTU3KSxyPW4ubihlKSxvPShuKDYwNDkxKSxuKDQ2Njc5KSwiVVJMU2VhcmNoUGFyYW1zImluIHNlbGYpLGk9IlN5bWJvbCJpbiBzZWxmJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGE9IkZpbGVSZWFkZXIiaW4gc2VsZiYmIkJsb2IiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxjPSJGb3JtRGF0YSJpbiBzZWxmLHM9IkFycmF5QnVmZmVyImluIHNlbGY7aWYocyl2YXIgdT1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLGw9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdS5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSk+LTF9O2Z1bmN0aW9uIGYodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSx0fWZ1bmN0aW9uIHAodCl7dmFyIGU9e25leHQ6ZnVuY3Rpb24oKXt2YXIgZT10LnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09ZSx2YWx1ZTplfX19O3JldHVybiBpJiYoZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGV9KSxlfWZ1bmN0aW9uIGgodCl7dGhpcy5tYXA9e30sdCBpbnN0YW5jZW9mIGg/dC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3RoaXMuYXBwZW5kKGUsdCl9KSx0aGlzKTpBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dGhpcy5hcHBlbmQodFswXSx0WzFdKX0pLHRoaXMpOnQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RoaXMuYXBwZW5kKGUsdFtlXSl9KSx0aGlzKX1mdW5jdGlvbiB2KHQpe2lmKHQuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTt0LmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3Qub25sb2FkPWZ1bmN0aW9uKCl7ZSh0LnJlc3VsdCl9LHQub25lcnJvcj1mdW5jdGlvbigpe24odC5lcnJvcil9fSkpfWZ1bmN0aW9uIHkodCl7dmFyIGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpO3JldHVybiBlLnJlYWRBc0FycmF5QnVmZmVyKHQpLG59ZnVuY3Rpb24gbSh0KXtpZih0LnNsaWNlKXJldHVybiB0LnNsaWNlKDApO3ZhciBlPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aCk7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpKSxlLmJ1ZmZlcn1mdW5jdGlvbiBiKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fYm9keUluaXQ9dCx0PyJzdHJpbmciPT10eXBlb2YgdD90aGlzLl9ib2R5VGV4dD10OmEmJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keUJsb2I9dDpjJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5Rm9ybURhdGE9dDpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keVRleHQ9dC50b1N0cmluZygpOnMmJmEmJigoZT10KSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9bSh0LmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpzJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCl8fGwodCkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQpOnRoaXMuX2JvZHlUZXh0PXQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwoInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6byYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYSYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciB0PXYodGhpcyk7aWYodClyZXR1cm4gdDtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj92KHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKHkpfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9dih0aGlzKTtpZihyKXJldHVybiByO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiB0PXRoaXMuX2JvZHlCbG9iLGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpLGUucmVhZEFzVGV4dCh0KSxuO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbi5qb2luKCIiKX0odGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oRSl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31oLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0PWYodCksZT1kKGUpO3ZhciBuPXRoaXMubWFwW3RdO3RoaXMubWFwW3RdPW4/bisiLCAiK2U6ZX0saC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLm1hcFtmKHQpXX0saC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PWYodCksdGhpcy5oYXModCk/dGhpcy5tYXBbdF06bnVsbH0saC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShmKHQpKX0saC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXBbZih0KV09ZChlKX0saC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuKSYmdC5jYWxsKGUsdGhpcy5tYXBbbl0sbix0aGlzKX0saC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dC5wdXNoKG4pfSkpLHAodCl9LGgucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSxwKHQpfSxoLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2goW24sZV0pfSkpLHAodCl9LGkmJihoLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWgucHJvdG90eXBlLmVudHJpZXMpO3ZhciB4PVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07ZnVuY3Rpb24gdyh0LGUpe3ZhciBuLHIsbz0oZT1lfHx7fSkuYm9keTtpZih0IGluc3RhbmNlb2Ygdyl7aWYodC5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD10LnVybCx0aGlzLmNyZWRlbnRpYWxzPXQuY3JlZGVudGlhbHMsZS5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKHQuaGVhZGVycykpLHRoaXMubWV0aG9kPXQubWV0aG9kLHRoaXMubW9kZT10Lm1vZGUsdGhpcy5zaWduYWw9dC5zaWduYWwsb3x8bnVsbD09dC5fYm9keUluaXR8fChvPXQuX2JvZHlJbml0LHQuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKHQpO2lmKHRoaXMuY3JlZGVudGlhbHM9ZS5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8InNhbWUtb3JpZ2luIiwhZS5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9KG49ZS5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIixyPW4udG9VcHBlckNhc2UoKSx4LmluZGV4T2Yocik+LTE/cjpuKSx0aGlzLm1vZGU9ZS5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9ZS5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwoIkdFVCI9PT10aGlzLm1ldGhvZHx8IkhFQUQiPT09dGhpcy5tZXRob2QpJiZvKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkobyl9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uZXcgRm9ybURhdGE7cmV0dXJuIHQudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodCl7dmFyIG49dC5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxvPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTtlLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KG8pKX19KSksZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW5ldyBoO3JldHVybiB0LnJlcGxhY2UoL1xyP1xuW1x0IF0rL2csIiAiKS5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KCI6Iikscj1uLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBvPW4uam9pbigiOiIpLnRyaW0oKTtlLmFwcGVuZChyLG8pfX0pKSxlfWZ1bmN0aW9uIGoodCxlKXtlfHwoZT17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz12b2lkIDA9PT1lLnN0YXR1cz8yMDA6ZS5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGU/ZS5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBoKGUuaGVhZGVycyksdGhpcy51cmw9ZS51cmx8fCIiLHRoaXMuX2luaXRCb2R5KHQpfXcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sYi5jYWxsKHcucHJvdG90eXBlKSxiLmNhbGwoai5wcm90b3R5cGUpLGoucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgaCh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxqLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGoobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDoiIn0pO3JldHVybiB0LnR5cGU9ImVycm9yIix0fTt2YXIgaz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07ai5yZWRpcmVjdD1mdW5jdGlvbih0LGUpe2lmKC0xPT09ay5pbmRleE9mKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBqKG51bGwse3N0YXR1czplLGhlYWRlcnM6e2xvY2F0aW9uOnR9fSl9O3ZhciBTPXNlbGYuRE9NRXhjZXB0aW9uO3RyeXtuZXcgU31jYXRjaCh0KXsoUz1mdW5jdGlvbih0LGUpe3RoaXMubWVzc2FnZT10LHRoaXMubmFtZT1lO3ZhciBuPUVycm9yKHQpO3RoaXMuc3RhY2s9bi5zdGFja30pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksUy5wcm90b3R5cGUuY29uc3RydWN0b3I9U31mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyB3KHQsZSk7aWYoby5zaWduYWwmJm8uc2lnbmFsLmFib3J0ZWQpcmV0dXJuIHIobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBjKCl7aS5hYm9ydCgpfWkub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9e3N0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOkMoaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTt0LnVybD0icmVzcG9uc2VVUkwiaW4gaT9pLnJlc3BvbnNlVVJMOnQuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgZT0icmVzcG9uc2UiaW4gaT9pLnJlc3BvbnNlOmkucmVzcG9uc2VUZXh0O24obmV3IGooZSx0KSl9LGkub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub25hYm9ydD1mdW5jdGlvbigpe3IobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSxpLm9wZW4oby5tZXRob2Qsby51cmwsITApLCJpbmNsdWRlIj09PW8uY3JlZGVudGlhbHM/aS53aXRoQ3JlZGVudGlhbHM9ITA6Im9taXQiPT09by5jcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSExKSwicmVzcG9uc2VUeXBlImluIGkmJmEmJihpLnJlc3BvbnNlVHlwZT0iYmxvYiIpLG8uaGVhZGVycy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2kuc2V0UmVxdWVzdEhlYWRlcihlLHQpfSkpLG8uc2lnbmFsJiYoby5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWkucmVhZHlTdGF0ZSYmby5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfSksaS5zZW5kKHZvaWQgMD09PW8uX2JvZHlJbml0P251bGw6by5fYm9keUluaXQpfSkpfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIG49W10scj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7by0tID4yOyluLnB1c2goYXJndW1lbnRzW29dKTtmb3IoO24ubGVuZ3RoOyl7dmFyIGk9bi5wb3AoKTtpZihpJiZpLnBvcClmb3Iobz1pLmxlbmd0aDtvLS07KW4ucHVzaChpW29dKTtlbHNlIG51bGwhPWkmJiEwIT09aSYmITEhPT1pJiZyLnB1c2goaSl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChlfHx7fSxyKTp7bm9kZU5hbWU6dCxhdHRyaWJ1dGVzOmV8fHt9LGNoaWxkcmVuOnIsa2V5OmUmJmUua2V5fX1PLnBvbHlmaWxsPSEwLHNlbGYuZmV0Y2h8fChzZWxmLmZldGNoPU8sc2VsZi5IZWFkZXJzPWgsc2VsZi5SZXF1ZXN0PXcsc2VsZi5SZXNwb25zZT1qKTt2YXIgQT1uKDY2MDgxKSxNPW4ubihBKSxUPW4oOTI4MTYpLF89bi5uKFQpLFI9big0NDY3NCksTD1uLm4oUiksUD1uKDQ0NjIxKSxOPW4ubihQKSxEPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gRih0KXt2YXIgZSxuLHI9dHlwZW9mIHQsbz0iIjtpZigic3RyaW5nIj09PXJ8fCJudW1iZXIiPT09cilyZXR1cm4gdHx8IiI7aWYoRCh0KSYmdC5sZW5ndGg+MClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKykiIiE9PShyPUYodFtlXSkpJiYobys9KG8mJiIgIikrcik7ZWxzZSBmb3IoZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0mJihvKz0obyYmIiAiKStlKTtyZXR1cm4gb312YXIgVT0ieC11bC1lbnZpcm9ubWVudC1pZCIsQj0ieC11bC1hbm9ueW1vdXMtaWQiLHo9IngtdWwtdXNlci1pZCIsVj0ieC11bC12aXNpdG9yLWlkIixIPSJ4LXVsLWluc3RhbGxhdGlvbi1tZXRob2QiLHE9IndlYi1ndG0iLFc9IndlYi1zZWdtZW50IixHPSJ3ZWItc25pcHBldCIsWj0idWwtY3VzdG9tLXN0eWxlIiwkPSJ1bC1jYXJkX19jb250YWluZXIiLFk9InVsLWNhcmQtLXZpZGVvIixKPSJjbG9zZS1jb250YWluZXIiLEs9ImNsb3NlLWJ0biIsWD0ibGlrZXJ0LW51bWJlciIsUT0ibnBzLW51bWJlciIsdHQ9ImNob2ljZSIsZXQ9InNlbGVjdC1sYWJlbCIsbnQ9InNlbGVjdC1jaGVja2JveCIscnQ9InNlbGVjdC1yYWRpbyIsb3Q9InVsLWNhcmRfX2Nob2ljZXMiLGl0PSJ1bC1jYXJkLXRleHRfX2lucHV0IixhdD0iLS1kZXNrdG9wIixjdD0iLS1tb2JpbGUiLHN0PSJ1bC1xdWVzdGlvbiIsdXQ9InVsLWNhcHRpb24iLGx0PSJmYWRlLWluLXRyYW5zaXRpb24iLGZ0PSJ1bC1jYXJkLW1haW4tY29udGVudCIsZHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCsoZT9jdDphdCksdF19LHB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsIiIuY29uY2F0KHQsIl9fIikuY29uY2F0KGUpXX0saHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSgic3ZnIix7d2lkdGg6IjEwMCIsaGVpZ2h0OiIxMyIsdmlld0JveDoiMCAwIDEwMCAxMyIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhbHQ6IlBvd2VyZWQgYnkgU3ByaWcifSxJKCJwYXRoIix7ZDoiTTMuMDM2OSAwLjgzOTk4MUgwLjAyNDkwMjNWOC45OTk5OEgxLjMyMDlWNi41Mzk5OEgyLjg1NjlDNC44OTY5IDYuNTM5OTggNi4yNDA5IDUuMzc1OTggNi4yNDA5IDMuNjIzOThDNi4yNDA5IDEuOTU1OTggNC45Njg5IDAuODM5OTgxIDMuMDM2OSAwLjgzOTk4MVpNMy4wMDA5IDUuMzUxOThIMS4zMjA5VjIuMDI3OThIMy4wMDA5QzQuMTc2OSAyLjAyNzk4IDQuOTY4OSAyLjY3NTk4IDQuOTY4OSAzLjYyMzk4QzQuOTY4OSA0LjY1NTk4IDQuMTc2OSA1LjM1MTk4IDMuMDAwOSA1LjM1MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTkuOTA2NTMgMy4yMTU5OEM4LjE1NDUzIDMuMjE1OTggNi45MDY1MyA0LjQ1MTk4IDYuOTA2NTMgNi4xNzk5OEM2LjkwNjUzIDcuOTA3OTggOC4xNTQ1MyA5LjE0Mzk4IDkuOTA2NTMgOS4xNDM5OEMxMS42NTg1IDkuMTQzOTggMTIuOTA2NSA3LjkwNzk4IDEyLjkwNjUgNi4xNzk5OEMxMi45MDY1IDQuNDUxOTggMTEuNjU4NSAzLjIxNTk4IDkuOTA2NTMgMy4yMTU5OFpNOS45MDY1MyA4LjAxNTk4QzguODg2NTMgOC4wMTU5OCA4LjE1NDUzIDcuMjM1OTggOC4xNTQ1MyA2LjE3OTk4QzguMTU0NTMgNS4xMTE5OCA4Ljg4NjUzIDQuMzQzOTggOS45MDY1MyA0LjM0Mzk4QzEwLjkyNjUgNC4zNDM5OCAxMS42NTg1IDUuMTExOTggMTEuNjU4NSA2LjE3OTk4QzExLjY1ODUgNy4yMzU5OCAxMC45MjY1IDguMDE1OTggOS45MDY1MyA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTIwLjk2MzEgMy4zNTk5OEwxOS43MzkxIDcuMTE1OThMMTguMzk1MSAzLjM1OTk4SDE3LjMyNzFMMTUuOTgzMSA3LjEyNzk4TDE0Ljc1OTEgMy4zNTk5OEgxMy40MTUxTDE1LjQ0MzEgOC45OTk5OEgxNi41MzUxTDE3Ljg2NzEgNS4wODc5OEwxOS4xODcxIDguOTk5OThIMjAuMjc5MUwyMi4zMDcxIDMuMzU5OThIMjAuOTYzMVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0yNS43MjQ2IDMuMjE1OThDMjQuMDA4NiAzLjIxNTk4IDIyLjgyMDYgNC41MTE5OCAyMi44MjA2IDYuMTc5OThDMjIuODIwNiA3Ljg1OTk4IDI0LjAyMDYgOS4xNDM5OCAyNS43OTY2IDkuMTQzOThDMjcuMDIwNiA5LjE0Mzk4IDI4LjAxNjYgOC41NDM5OCAyOC4zNzY2IDcuNTIzOThIMjcuMDA4NkMyNi43ODA2IDcuODgzOTggMjYuMzYwNiA4LjA1MTk4IDI1LjgwODYgOC4wNTE5OEMyNC43NTI2IDguMDUxOTggMjQuMjEyNiA3LjQwMzk4IDI0LjA5MjYgNi41NTE5OEgyOC41MjA2QzI4Ljc2MDYgNC42NDM5OCAyNy41OTY2IDMuMjE1OTggMjUuNzI0NiAzLjIxNTk4Wk0yNS43MzY2IDQuMjcxOThDMjYuNjEyNiA0LjI3MTk4IDI3LjIxMjYgNC43NjM5OCAyNy4yODQ2IDUuNjg3OThIMjQuMTE2NkMyNC4yNjA2IDQuODk1OTggMjQuODAwNiA0LjI3MTk4IDI1LjczNjYgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0zMS4xMjk3IDQuMTI3OThWMy4zNTk5OEgyOS44ODE3VjguOTk5OThIMzEuMTI5N1Y1LjQ0Nzk4QzMxLjYzMzcgNC43ODc5OCAzMi4zMTc3IDQuNDUxOTggMzMuMjE3NyA0LjQxNTk4VjMuMjM5OThDMzIuMzUzNyAzLjIzOTk4IDMxLjY0NTcgMy41NjM5OCAzMS4xMjk3IDQuMTI3OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNMzYuODIyMiAzLjIxNTk4QzM1LjEwNjIgMy4yMTU5OCAzMy45MTgyIDQuNTExOTggMzMuOTE4MiA2LjE3OTk4QzMzLjkxODIgNy44NTk5OCAzNS4xMTgyIDkuMTQzOTggMzYuODk0MiA5LjE0Mzk4QzM4LjExODIgOS4xNDM5OCAzOS4xMTQyIDguNTQzOTggMzkuNDc0MiA3LjUyMzk4SDM4LjEwNjJDMzcuODc4MiA3Ljg4Mzk4IDM3LjQ1ODIgOC4wNTE5OCAzNi45MDYyIDguMDUxOThDMzUuODUwMiA4LjA1MTk4IDM1LjMxMDIgNy40MDM5OCAzNS4xOTAyIDYuNTUxOThIMzkuNjE4MkMzOS44NTgyIDQuNjQzOTggMzguNjk0MiAzLjIxNTk4IDM2LjgyMjIgMy4yMTU5OFpNMzYuODM0MiA0LjI3MTk4QzM3LjcxMDIgNC4yNzE5OCAzOC4zMTAyIDQuNzYzOTggMzguMzgyMiA1LjY4Nzk4SDM1LjIxNDJDMzUuMzU4MiA0Ljg5NTk4IDM1Ljg5ODIgNC4yNzE5OCAzNi44MzQyIDQuMjcxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNDUuNDg4NiAwLjQ3OTk4VjMuODAzOThDNDUuMDA4NiAzLjQzMTk4IDQ0LjM5NjYgMy4yMTU5OCA0My42NzY2IDMuMjE1OThDNDIuMDkyNiAzLjIxNTk4IDQwLjgyMDYgNC41MzU5OCA0MC44MjA2IDYuMTY3OThDNDAuODIwNiA3LjgyMzk4IDQyLjA5MjYgOS4xNDM5OCA0My42NzY2IDkuMTQzOThDNDQuMzk2NiA5LjE0Mzk4IDQ1LjAwODYgOC45Mjc5OCA0NS40ODg2IDguNTQzOThWOC45OTk5OEg0Ni43MjQ2VjAuNDc5OThINDUuNDg4NlpNNDMuODU2NiA4LjAxNTk4QzQyLjgyNDYgOC4wMTU5OCA0Mi4wNjg2IDcuMTc1OTggNDIuMDY4NiA2LjE2Nzk4QzQyLjA2ODYgNS4xNzE5OCA0Mi44MjQ2IDQuMzQzOTggNDMuODU2NiA0LjM0Mzk4QzQ0LjQ4MDYgNC4zNDM5OCA0NS4wNjg2IDQuNTU5OTggNDUuNDg4NiA1LjE1OTk4VjcuMTg3OThDNDUuMDY4NiA3Ljc5OTk4IDQ0LjQ4MDYgOC4wMTU5OCA0My44NTY2IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNTQuNjc5NyAzLjIxNTk4QzUzLjk1OTcgMy4yMTU5OCA1My4zNDc3IDMuNDMxOTggNTIuODc5NyAzLjc5MTk4VjAuNDc5OThINTEuNjMxN1Y4Ljk5OTk4SDUyLjg3OTdWOC41NTU5OEM1My4zNDc3IDguOTI3OTggNTMuOTU5NyA5LjE0Mzk4IDU0LjY3OTcgOS4xNDM5OEM1Ni4yNjM3IDkuMTQzOTggNTcuNTQ3NyA3LjgyMzk4IDU3LjU0NzcgNi4xNjc5OEM1Ny41NDc3IDQuNTM1OTggNTYuMjYzNyAzLjIxNTk4IDU0LjY3OTcgMy4yMTU5OFpNNTQuNDk5NyA4LjAxNTk4QzUzLjg3NTcgOC4wMTU5OCA1My4yOTk3IDcuNzk5OTggNTIuODc5NyA3LjIxMTk4VjUuMTM1OThDNTMuMjk5NyA0LjU0Nzk4IDUzLjg3NTcgNC4zNDM5OCA1NC40OTk3IDQuMzQzOThDNTUuNTQzNyA0LjM0Mzk4IDU2LjI5OTcgNS4xNzE5OCA1Ni4yOTk3IDYuMTY3OThDNTYuMjk5NyA3LjE3NTk4IDU1LjU0MzcgOC4wMTU5OCA1NC40OTk3IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNjMuMzM0NyAzLjM0Nzk4TDYxLjM5MDcgNy43NjM5OEw1OS4yNjY3IDMuMzQ3OThINTcuOTM0N0w2MC44MTQ3IDkuMDgzOThMNTkuNjI2NyAxMS43ODRINjAuOTM0N0w2NC42NTQ3IDMuMzQ3OThINjMuMzM0N1oiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik03MS4xNDY2IDQuMzQ2NjFDNjkuODA5MiA0LjA1MDM4IDY5LjEzMSAzLjUzMDAxIDY5LjEzMSAyLjgwMDY1QzY5LjEzMSAyLjA0NzA1IDY5Ljg1NDYgMS40NzgyMiA3MC44MTQyIDEuNDc4MjJDNzEuODAzNCAxLjQ3ODIyIDcyLjU0OTYgMi4xMDMzOSA3Mi41NDk2IDIuOTMyMVYyLjk5ODEzSDczLjkxNjVWMi45MzIxQzczLjkxNjUgMS40MTc2NCA3Mi41ODgzIDAuMjcyNzA1IDcwLjgyNzEgMC4yNzI3MDVDNjkuOTc4NCAwLjI3MjcwNSA2OS4yMDA5IDAuNTMzMTkxIDY4LjYzNzkgMS4wMDU3QzY4LjM1ODQgMS4yMzYxOSA2OC4xMzM5IDEuNTI0ODcgNjcuOTgwNSAxLjg1MTFDNjcuODI3MSAyLjE3NzMzIDY3Ljc0ODYgMi41MzMwMyA2Ny43NTA2IDIuODkyNzNDNjcuNzQ1MSAzLjIyMjU1IDY3LjgxMzcgMy41NDk0OSA2Ny45NTE1IDMuODQ5OTRDNjguMDg5NCA0LjE1MDM4IDY4LjI5MyA0LjQxNjg2IDY4LjU0NzggNC42MzAxMkM2OS4wMjE4IDUuMDQyNjYgNjkuNjk0NSA1LjM0Nzk4IDcwLjU0NjMgNS41Mzg4QzcxLjk4MDYgNS44NTUwMiA3Mi43MDc4IDYuMzkyOTYgNzIuNzA3OCA3LjEzNjg2QzcyLjcwNzggNy45NDMxNiA3MS45MTU2IDguNTUwNzYgNzAuODY4MiA4LjU1MDc2QzY5Ljc4MDQgOC41NTA3NiA2OC45NTk5IDcuODc1MzEgNjguOTU5OSA2Ljk3OTk2VjYuOTEzOTNINjcuNTkxOFY2Ljk3OTk2QzY3LjU5MTggOC41NjM0OCA2OC45OTQyIDkuNzU2ODggNzAuODUzNSA5Ljc1Njg4QzcxLjc0MjYgOS43NTY4OCA3Mi41NTg4IDkuNDg3MzEgNzMuMTUxOCA4Ljk5NjYyQzczLjQ0NiA4Ljc1ODMxIDczLjY4MjcgOC40NTgxIDczLjg0NDUgOC4xMTc5Qzc0LjAwNjMgNy43Nzc3IDc0LjA4OTEgNy40MDYxMSA3NC4wODcgNy4wMzAyNEM3NC4wODcgNS42ODU0IDczLjA5OTEgNC43ODIxNyA3MS4xNDY2IDQuMzQ2NjFaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNzguNzk4NiAyLjUwODA2Qzc4LjI4NzQgMi41MDE3NSA3Ny43ODIzIDIuNjE3NiA3Ny4zMjYzIDIuODQ1NzZDNzYuODcwMyAzLjA3MzkxIDc2LjQ3NjggMy40MDc1OSA3Ni4xNzk1IDMuODE4MzdWMi42NjczOEg3NC44Nzg5VjEyLjA3NTJINzYuMTc5NVY4LjQ4NzE2Qzc2LjQ3NjggOC44OTc5IDc2Ljg3MDMgOS4yMzE1MiA3Ny4zMjYzIDkuNDU5NTdDNzcuNzgyNCA5LjY4NzYzIDc4LjI4NzUgOS44MDMzNSA3OC43OTg2IDkuNzk2ODdDODAuODE2NyA5Ljc5Njg3IDgyLjMzODEgOC4yMzAzMSA4Mi4zMzgxIDYuMTUyNDZDODIuMzM4MSA0LjA3NDYyIDgwLjgxNjcgMi41MDgwNiA3OC43OTg2IDIuNTA4MDZaTTgwLjk4MzUgNi40MjI2NEM4MC45MzE2IDYuOTYyOSA4MC42OTIxIDcuNDY4NzkgODAuMzA1NiA3Ljg1NDRDNzkuOTE5IDguMjQwMDEgNzkuNDA5MyA4LjQ4MTU2IDc4Ljg2MyA4LjUzODA0Qzc4LjEzNjkgOC42MTA3NCA3Ny40NjA1IDguNDAyOTUgNzYuOTU4MyA3Ljk1NDA3Qzc2LjQ1NjEgNy41MDUxOCA3Ni4xNzk1IDYuODYzNjUgNzYuMTc5NSA2LjE1MjQ2Qzc2LjE3OTUgNC43ODQ2IDc3LjIxMjIgMy43NTI5NSA3OC41ODE1IDMuNzUyOTVDNzkuMjkwNCAzLjc1Mjk1IDc5LjkzMDYgNC4wMjE5MSA4MC4zNzc2IDQuNTEwMThDODAuODM4NyA1LjAxMTE2IDgxLjA1NCA1LjY5MDI1IDgwLjk4MzUgNi40MjI2NFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik05OC4yOTA4IDIuNjY5MlYzLjgwNzQ3Qzk3LjY3NzYgMi45Nzg3NSA5Ni43MzAyIDIuNTA4MDYgOTUuNjU4MyAyLjUwODA2QzkzLjY0ODIgMi41MDgwNiA5Mi4xMzIzIDQuMDQ2MTUgOTIuMTMyMyA2LjA4NTgyQzkyLjEzMjMgOC4xMjU1IDkzLjY0ODIgOS42NjI5OSA5NS42NTgzIDkuNjYyOTlDOTYuNzM0NSA5LjY2Mjk5IDk3LjY4MTkgOS4xOTcxNCA5OC4yOTA4IDguMzc2OTFWOC41NTE5OEM5OC4yOTA4IDkuOTY4OTEgOTcuMzkwNiAxMC44ODQzIDk1Ljk5NzQgMTAuODg0M0M5NS4wNTYxIDEwLjg4NDMgOTQuMjcxOCAxMC40NzY2IDkzLjg5OTYgOS43OTM4NEw5My44ODA2IDkuNzU4N0g5Mi41Mzg5TDkyLjU2OTUgOS44NDY1NEM5Mi43OTYxIDEwLjUxNCA5My4yMzkyIDExLjA4ODkgOTMuODMwMyAxMS40ODIyQzk0LjQyMzMgMTEuODcyMyA5NS4xNzI2IDEyLjA3ODMgOTUuOTk3NCAxMi4wNzgzQzk3LjA1NTIgMTIuMDc4MyA5Ny45NTU0IDExLjc0NTEgOTguNjAxNyAxMS4xMTU3Qzk5LjI0ODEgMTAuNDg2MiA5OS41OTE1IDkuNjAxMiA5OS41OTE1IDguNTY3NzNWMi42NjkySDk4LjI5MDhaTTk3LjU2MTEgNy44NDJDOTcuMDA5MiA4LjM2NDE4IDk2LjIyMjUgOC41ODM0OCA5NS40MDAxIDguNDQyOTRDOTQuOTEzMiA4LjM1Nzk2IDk0LjQ2NjQgOC4xMjE4NCA5NC4xMjQ1IDcuNzY4ODlDOTMuNzgyNyA3LjQxNTkzIDkzLjU2MzYgNi45NjQ1MiA5My40OTkyIDYuNDgwMTlDOTMuMzgzMyA1LjY2NTQxIDkzLjYzMSA0Ljg5MzY0IDk0LjE3ODYgNC4zNjQxOEM5NC42MzgzIDMuOTI3NDEgOTUuMjU0MiAzLjY4Nzg4IDk1Ljg5MTkgMy42OTc4MkM5Ni4wNDY0IDMuNjk3OTUgOTYuMjAwNiAzLjcxMDMxIDk2LjM1MzEgMy43MzQ3N0M5Ny4zNDU5IDMuODkzNDkgOTguMTMxNCA0LjcwNDAzIDk4LjI2MzIgNS43MTAyNEM5OC4zNzQ5IDYuNTM4MzUgOTguMTE3OSA3LjMxNDM2IDk3LjU2MTEgNy44NDJaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNOTAuNzA1IDAuMDk5NTk3NUM5MC40NjAyIDAuMDQ2NzczIDkwLjIwNDMgMC4wOTExOTcxIDg5Ljk5MjUgMC4yMjMyNjlDODkuNzgwNiAwLjM1NTM0IDg5LjYyOTkgMC41NjQ0NTIgODkuNTcyOSAwLjgwNTQwOUM4OS41MTU5IDEuMDQ2MzcgODkuNTU3MSAxLjI5OTgyIDg5LjY4NzcgMS41MTA5OEM4OS44MTgzIDEuNzIyMTUgOTAuMDI3NyAxLjg3NDA3IDkwLjI3MDggMS45MzM5MUM5MC4zNDE1IDEuOTQ5NTQgOTAuNDEzNiAxLjk1NzQ3IDkwLjQ4NiAxLjk1NzU0QzkwLjcyIDEuOTU3OSA5MC45NDU4IDEuODczMjUgOTEuMTIwNiAxLjcxOTczQzkxLjI5NTUgMS41NjYyIDkxLjQwNyAxLjM1NDUyIDkxLjQzNDEgMS4xMjVDOTEuNDYxMSAwLjg5NTQ3IDkxLjQwMTcgMC42NjQxMzUgOTEuMjY3MyAwLjQ3NTA0NkM5MS4xMzI5IDAuMjg1OTU4IDkwLjkzMjcgMC4xNTIzMjUgOTAuNzA1IDAuMDk5NTk3NVYwLjA5OTU5NzVaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNODkuODM2NiA4LjM5MTQzSDg4LjcxNUM4Ny45MTc4IDguMzkxNDMgODcuNDM4OSA3Ljg1NTMxIDg3LjQzODkgNi45NTY5M0M4Ny40Mzg5IDYuMDgwOTYgODcuODY4MSA1LjAzNjU5IDg4Ljc0MzIgMy43NjQ0NEw4OC43NTQ4IDMuNzQ3NDhWMy4zODgyNUw4NS4wMjcxIDIuODY3MjdDODUuMDI4NCAyLjcxNTUzIDg0Ljk4ODYgMi41NjYyMiA4NC45MTE4IDIuNDM0NzhDODQuODM1MSAyLjMwMzM1IDg0LjcyNDEgMi4xOTQ1OCA4NC41OTA1IDIuMTE5NzNDODQuMjU2MyAxLjkzOCA4My44OTA4IDEuOTM4IDgzLjU4NzkgMi4xMTM2OEM4My40MzYxIDIuMjAyMyA4My4zMTIyIDIuMzMwNzcgODMuMjMgMi40ODQ4QzgzLjE0NzcgMi42Mzg4NCA4My4xMTAzIDIuODEyNCA4My4xMjE5IDIuOTg2MThDODMuMTMzNiAzLjE1OTk2IDgzLjE5MzggMy4zMjcxNCA4My4yOTU4IDMuNDY5MTRDODMuMzk3OSAzLjYxMTE0IDgzLjUzNzkgMy43MjIzOCA4My43MDAxIDMuNzkwNDlMODIuNTQwNSA5LjYzNzUzSDgzLjgyODNMODQuODk3NyA0LjA4NTUxTDg2LjkxMTUgNC40MjExMUM4Ni4zNzAxIDUuMzgwMDcgODYuMDk1MyA2LjI3NDIxIDg2LjA5NTMgNy4wNzg2OUM4Ni4wOTUzIDguNTYzNDcgODcuMDA0MSA5LjUzNTc2IDg4LjQ3MzQgOS42Mjk2NVY5LjYzNzUzSDkxLjEzNDFWMi42OTA5OUg4OS44MzY2VjguMzkxNDNaIixmaWxsOiIjNUQ2OTZGIn0pKX0sdnQ9big3NjM5MCksZ3Q9bi5uKHZ0KSx5dD17ZXE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09ZX0sbmVxOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuZXEodCxlKX0sZ3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSxndGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD49ZX0sbHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfSxsdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw9ZX0sbGlzdF9leGFjdDpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmdC5zbGljZSgpLnNvcnQoKS5qb2luKCIsIik9PT1lLnNsaWNlKCkuc29ydCgpLmpvaW4oIiwiKX0sbGlzdF9hbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJiFlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09dC5pbmRleE9mKGUpfSkpfSxsaXN0X2FsbzpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMSE9dC5pbmRleE9mKGUpfSkpfX07ZnVuY3Rpb24gbXQodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJtdWx0aXBsZXNlbGVjdCI6cmV0dXJuIHQmJnQucHJvcHMmJnQucHJvcHMub3B0aW9ucz90LnByb3BzLm9wdGlvbnMubGVuZ3RoPjEzP3QucHJvcHMub3B0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblt0LnZhbHVlXX0pKTp0LnByb3BzLm9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bXS5jb25jYXQoXygpKHQpLFtlXSl9KSkpfSksW1tdXSk6bnVsbDtjYXNlIm11bHRpcGxlY2hvaWNlIjpyZXR1cm4gdCYmdC5wcm9wcyYmdC5wcm9wcy5vcHRpb25zP3QucHJvcHMub3B0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpOm51bGw7Y2FzZSJsaWtlcnQiOnJldHVyblsxLDIsMyw0LDVdO2Nhc2UibnBzIjpyZXR1cm5bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMF07ZGVmYXVsdDpyZXR1cm5bMV19fXZhciBidD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT0odC5hcHAuZGVjay5jYXJkc3x8W10pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKSxuPXQuYXBwLmRlY2suaW5kZXgsbz10LmFwcCxpPW8uc2hvd1N1cnZleUJyYW5kLGE9by5tYXJrZXRpbmdVcmwsYz1vLnNsdWdOYW1lLHM9by5zdXJ2ZXlJZCx1PW8udmlld2VkQ2FyZENvdW50LGw9by5oZWFkZXJzLGY9by5kZWNrLGQ9by5ib3JkZXIscD1mdW5jdGlvbih0LGUpe3ZhciBuO2lmKCF0fHwhdC5sZW5ndGh8fGU+PXQubGVuZ3RofHxlPDApcmV0dXJuIDA7aWYoIXRbZV0udHlwZSlyZXR1cm4gMDt2YXIgbz10LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtpZihlPT09by5sZW5ndGgtMSlyZXR1cm4gMTtmb3IodmFyIGk9KG49e30scigpKG4sby5sZW5ndGgtMSwxKSxyKCkobiwtMSwwKSxuKSxhPW8ubGVuZ3RoLTI7YT49ZTthLS0pe3ZhciBjPW9bYV0scz1jJiZjLnByb3BzJiZjLnByb3BzLnJvdXRpbmdPcHRpb25zfHxbXTtpZigwIT09cy5sZW5ndGgpe3ZhciB1PTAsbD1tdChjKTtpZihudWxsPT09bClyZXR1cm4gby5sZW5ndGgtMS1lO2Zvcih2YXIgZj1mdW5jdGlvbih0KXtpZigwPT09bC5sZW5ndGgpcmV0dXJuImJyZWFrIjt2YXIgbj1zW3RdLHI9bi5jb21wYXJhdG9yLGM9bi50YXJnZXQsZj1uLnZhbHVlLGQ9bC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiEoImFuc3dlcmVkIj09PXJ8fHl0W3JdJiZ5dFtyXSh0LGYpKX0pKTtpZihkLmxlbmd0aDxsLmxlbmd0aCl7dmFyIHA9cGFyc2VJbnQoYywxMCk7aWYoLTEhPT1wJiZwPD1hfHxwPj1vLmxlbmd0aClyZXR1cm57djpvLmxlbmd0aC0xLWV9O3U9TWF0aC5tYXgoaVtwXSsxLHUpfWw9ZH0sZD0wO2Q8cy5sZW5ndGg7ZCsrKXt2YXIgcD1mKGQpO2lmKCJicmVhayI9PT1wKWJyZWFrO2lmKCJvYmplY3QiPT09Z3QoKShwKSlyZXR1cm4gcC52fShsLmxlbmd0aD4wfHwidmlkZW92b2ljZSI9PT1jLnR5cGUpJiYodT1NYXRoLm1heChpW2ErMV0rMSx1KSksaVthXT11fWVsc2UgaVthXT1pW2ErMV0rMX1yZXR1cm4gaVtlXX0oZi5jYXJkc3x8W10sZi5pbmRleCksaD11KzEsdj1oLyhoK3ApLGc9ZnVuY3Rpb24oKXtyZXR1cm4gaT9JKCJhIix7c3R5bGU6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDVweCAwIDEwcHggMCIsaHJlZjoiIi5jb25jYXQoYSwiP3V0bV9zb3VyY2U9c3VydmV5X2JyYW5kaW5nJnV0bV9tZWRpdW09d2Vic2l0ZSZ1dG1fY2FtcGFpZ249IikuY29uY2F0KGMsIiZ1dG1fY29udGVudD0iKS5jb25jYXQocyksdGFyZ2V0OiJfYmxhbmsifSxodCk6bnVsbH07aWYoIWV8fDE9PT1lLmxlbmd0aClyZXR1cm4gSSgiZm9vdGVyIix7Y2xhc3NOYW1lOiJ1bC1mb290ZXIifSxnKTt2YXIgeT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1wcm9ncmVzcy1iYXItY29udGFpbmVyIiksZT10P3QuY2xpZW50V2lkdGg6MjUwLG49dD8iIi5jb25jYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXByb2dyZXNzLWJhci1jdXJyZW50Iikuc3R5bGUud2lkdGgucmVwbGFjZSgicHgiLCIiKSk6MCxyPSIiLmNvbmNhdChwYXJzZUZsb2F0KCh2KmUpLnRvRml4ZWQoNCkpKTtyZXR1cm4gbiE9PXImJm0obixyKSx7d2lkdGg6IiIuY29uY2F0KHIsInB4IiksYW5pbWF0aW9uOiJncm93UmlnaHQgMXMiLGJvcmRlcjoiMXB4IHNvbGlkICIuY29uY2F0KGR8fCIjMDAwIil9fSxtPWZ1bmN0aW9uKHQsZSl7dmFyIG49IlxuICAgICAgQGtleWZyYW1lcyBncm93UmlnaHQge1xuICAgICAgICBmcm9tIHtcbiAgICAgICAgICB3aWR0aDogIi5jb25jYXQodCwicHg7XG4gICAgICAgIH1cbiAgICAgICAgdG8ge1xuICAgICAgICAgIHdpZHRoOiAiKS5jb25jYXQoZSwicHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAiKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci50eXBlPSJ0ZXh0L2NzcyIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKSxyLnNoZWV0Lmluc2VydFJ1bGUobixyLmxlbmd0aCl9O3JldHVybiBJKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciAiLmNvbmNhdCgibGluayI9PT1sWyJ1c2VybGVhcC1wbGF0Zm9ybSJdPyJ1bC1mb290ZXJfX2xpbmsiOiIiKSxrZXk6bn0sKGZ1bmN0aW9uKCl7cmV0dXJuIGUubGVuZ3RoPjE/SSgiZGl2Iix7aWQ6InVsLXByb2dyZXNzLWJhci1jb250YWluZXIifSxJKCJkaXYiLHtpZDoidWwtcHJvZ3Jlc3MtYmFyLWN1cnJlbnQiLHN0eWxlOnkoKX0pKTpudWxsfSksZyl9fTtmdW5jdGlvbiB4dCh0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB3dCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gd3QodCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxhPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBhPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2M9ITAsaT10fSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHd0KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEV0PSJ1bC1hcHAiLEN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHA7bi5ydW5uaW5nfHxlLmRlc3Ryb3koRXQpO3ZhciBvLGk9bi5kZWNrLmNhcmRzW24uZGVjay5pbmRleF0sYT1pLkNhcmQsYz1pLnByb3BzLHM9aS50eXBlLHU9aS5uYW1lLGw9bi5ib3JkZXIsZj1mdW5jdGlvbigpe3ZhciB0PU4oKShMKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGUuY2xvc2UoRXQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9bi5kZWNrLmNhcmRzLHA9bi5kZWNrLmluZGV4LGg9bi5mb250RmFtaWx5P3tmb250RmFtaWx5Om4uZm9udEZhbWlseS5yZXBsYWNlKCI7IiwiIil9Ont9LHY9bi5lbmRDYXJkLGc9ZnVuY3Rpb24oKXt2YXIgdD1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQobil7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDplLmFwcC5uZXh0KHtkYXRhOm4sY29tcGxldGVTdXJ2ZXk6ZnVuY3Rpb24oKXtlLmRlc3Ryb3koRXQpfSxlbmRDYXJkOnZ9KTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkseT14dChuLmFuc3dlcnN8fFtdKTt0cnl7dmFyIG09ZnVuY3Rpb24oKXt2YXIgdD1vLnZhbHVlO2lmKHQucXVlc3Rpb25JZD09PXUpe3ZhciBlO2lmKCJtdWx0aXBsZWNob2ljZSI9PT1zKXt2YXIgbj1jLm9wdGlvbnMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10LnZhbHVlfSkpO2lmKCFuKXJldHVybiJicmVhayI7ZT1yKCkoe30sbi5pZCxuLnZhbHVlKX1lbHNlIGU9dC52YWx1ZTtyZXR1cm4gZyh7dmFsdWU6ZX0pLCJicmVhayJ9fTtmb3IoeS5zKCk7IShvPXkubigpKS5kb25lOyl7aWYoImJyZWFrIj09PW0oKSlicmVha319Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZToidWwtYXBwIixpZDpFdCxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9WyJ0cmFuc2l0aW9uZW5kIiwid2Via2l0VHJhbnNpdGlvbkVuZCIsIm1velRyYW5zaXRpb25FbmQiXSxvPSExLGk9ZnVuY3Rpb24gbigpe2lmKCFvJiZ3aW5kb3cuZnJhbWVFbGVtZW50KXt2YXIgaT1uZXcgRXZlbnQoInVsOmZyYW1lOnJlbmRlcmVkIik7d2luZG93LmZyYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGkpfW89ITAsci5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuKX0pKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZShFdCl9KSwzMDApfTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuYWRkRXZlbnRMaXN0ZW5lcihlLGkpfSkpLG4uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrKChmdW5jdGlvbigpe2UuY2xvc2UoRXQpfSkpLGUudXBkYXRlKEV0KX0odCl9LG9udXBkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKEV0KX0sc3R5bGU6aH0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHBfX2NvbnRhaW5lciJ9LEkoImRpdiIse2NsYXNzTmFtZTpGKF8oKShkdCgkLG4udXNlTW9iaWxlU3R5bGluZykpKSxzdHlsZTpbImVtYWlsIiwibGluayJdLmluY2x1ZGVzKG4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSk/e2JveFNoYWRvdzoidW5zZXQiLGJvcmRlclJhZGl1czoidW5zZXQiLGJvcmRlcjoibm9uZSAhaW1wb3J0YW50In06bi51c2VNb2JpbGVTdHlsaW5nP3tib3JkZXJDb2xvcjpsfTp7Ym9yZGVyQ29sb3I6bCxtYXJnaW46IjE1cHgifX0sSShhLE0oKSh7fSxjLHtib3JkZXI6bCxjbGFzc05hbWU6InVsLWNhcmQiLG5leHQ6ZyxlbmRDYXJkOnYsbG9jYWxlOm4ubG9jYWxlLHF1ZXN0aW9uSWQ6dSx1cGRhdGVIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoRXQpfX0pKSxJKGJ0LG51bGwpKSwhWyJlbWFpbCIsImxpbmsiXS5pbmNsdWRlcyhuLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0pJiYoIXZ8fHArMSE9PWQubGVuZ3RoKSYmSSgiZGl2Iix7Y2xhc3NOYW1lOkYoZHQoSixuLnVzZU1vYmlsZVN0eWxpbmcpKX0sSSgiZGl2Iix7Y2xhc3NOYW1lOkssb25jbGljazpmLG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTM9PXQua2V5Q29kZSYmZigpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UgYnV0dG9uIix0YWJpbmRleDowfSxJKCJzdmciLHt3aWR0aDoiMThweCIsaGVpZ2h0OiIxOHB4Iix2aWV3Qm94OiIwIDAgMTMgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEkoInBhdGgiLHtkOiJNMi41NDk2NCAxLjc4MzY5TDEuNzgzNjkgMi41NDk2NEw1LjczNDA1IDYuNUwxLjc4MzY5IDEwLjQ1MDRMMi41NDk2NCAxMS4yMTYzTDYuNSA3LjI2NTk1TDEwLjQ1MDQgMTEuMjE2M0wxMS4yMTYzIDEwLjQ1MDRMNy4yNjU5NSA2LjVMMTEuMjE2MyAyLjU0OTY0TDEwLjQ1MDQgMS43ODM2OUw2LjUgNS43MzQwNUwyLjU0OTY0IDEuNzgzNjlaIixmaWxsOiIjMjYyMTM2In0pKSkpKSl9LGp0PW4oNDcwNjYpLGt0PW4ubihqdCksU3Q9bigzMDU5MyksT3Q9bi5uKFN0KSxJdD1uKDQ0NTMpLEF0PW4ubihJdCksTXQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5wYXJlbnQuSW50ZXJjb219Y2F0Y2godCl7fX0sVHQ9ZnVuY3Rpb24oKXt2YXIgdD1NdCgpO3QmJih0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMX0pLGRlbGV0ZSB0LnVsX3dhc1Zpc2libGUpfSxfdD1mdW5jdGlvbigpe3ZhciB0PU10KCk7dCYmKHQudWxfd2FzVmlzaWJsZT0hIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZS5pbnRlcmNvbS1sYXVuY2hlci1mcmFtZSIpLHQudWxfd2FzVmlzaWJsZSYmdCgidXBkYXRlIix7aGlkZV9kZWZhdWx0X2xhdW5jaGVyOiEwfSkpfSxSdD1bdF0sTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7T3QoKSh0aGlzLHQpfXJldHVybiBBdCgpKHQsbnVsbCxbe2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtSdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlKCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7UnQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5hYmxlKCl9KSl9fV0pLHR9KCksUHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuY2FwdGlvblRleHQ/SSgicCIse2lkOnV0LGNsYXNzTmFtZTp1dH0sdC5jYXB0aW9uVGV4dCk6bnVsbH0sTnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSSgicCIsdD97aWQ6c3QsY2xhc3NOYW1lOnN0LHJvbGU6ImhlYWRpbmcifTp7aWQ6c3QsY2xhc3NOYW1lOnN0LHN0eWxlOiJtYXJnaW4tYm90dG9tOiAxNXB4Iixyb2xlOiJoZWFkaW5nIn0sZSl9LER0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmJ1dHRvblRleHQ/dC5idXR0b25UZXh0OiJOZXh0In0sRnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuc2tpcEJ1dHRvblRleHQ/dC5za2lwQnV0dG9uVGV4dDoiU2tpcCJ9LFV0PW4oOTczNDMpLEJ0PW4ubihVdCk7ZnVuY3Rpb24genQodCxlKXtlKHQpfXZhciBWdD1mdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQubGFiZWwscj10LnNlbGVjdGVkLG89KHQuaW5kZXgsdC5pZCksaT10Lm9uU2VsZWN0LGE9dC5pc1JhZGlvLGM9dC51c2VNb2JpbGVTdHlsaW5nLHM9ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNob2ljZS1kaXYtIi5jb25jYXQobykpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhZGlvLSIuY29uY2F0KG8pKTtuJiYobi5zdHlsZS5ib3JkZXJDb2xvcj1lKSxyJiYoci5zdHlsZS5ib3JkZXJXaWR0aD0iNnB4IixyLnN0eWxlLmJvcmRlckNvbG9yPWUsci5zdHlsZS5ib3hTaGFkb3c9Im5vbmUiKX0sdT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO2UmJihlLnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2IiksbiYmKG4uc3R5bGUuYm9yZGVyV2lkdGg9IjFweCIsbi5zdHlsZS5ib3JkZXJDb2xvcj0iIzMyMzIzMiIsbi5zdHlsZS5ib3hTaGFkb3c9Imluc2V0IDNweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSIpfSxsPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdSgpLGkobyl9LGY9e29uY2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGwodCl9KHQpfX07Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KGYub250b3VjaHN0YXJ0PXMsZi5vbnRvdWNoY2FuY2VsPXUsZi5vbnRvdWNobW92ZT11LGYub250b3VjaGVuZD11KTooZi5vbm1vdXNlZG93bj1zLGYub25tb3VzZWxlYXZlPXUpO3ZhciBkPWE/InJhZGlvLSIuY29uY2F0KG8pOiJjaGVja2JveC0iLmNvbmNhdChvKTtyZXR1cm4gSSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKGR0KHR0LGMpKSxpZDoiY2hvaWNlLWRpdi0iLmNvbmNhdChvKX0sZiksIWEmJkkoImRpdiIse2NsYXNzTmFtZTpudCxpZDpkLHN0eWxlOnI/e2JhY2tncm91bmRDb2xvcjplLGJvcmRlckNvbG9yOmUsYm94U2hhZG93OiJub25lIn06e30scm9sZToiY2hlY2tib3giLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIGxhYmVsLSIpLmNvbmNhdChvKSwiYXJpYS1jaGVja2VkIjpyLHRhYmluZGV4OjB9LHImJkkoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDEwIDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxJKCJwYXRoIix7ZDoiTTkuMTUzNzcgMS4zMDc3NEw0LjA3Njg1IDguMjMwODJMMS4zMDc2MiA1LjAwMDA1IixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoiMiIsInN0cm9rZS1saW5lY2FwIjoicm91bmQifSkpKSxhJiZJKCJkaXYiLHtjbGFzc05hbWU6cnQsaWQ6ZCxyb2xlOiJyYWRpbyIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLHRhYmluZGV4OjB9KSxJKCJsYWJlbCIse2NsYXNzTmFtZTpGKGR0KGV0LGMpKSxmb3I6ZCxpZDoibGFiZWwtIi5jb25jYXQobyl9LG4pKX07dmFyIEh0LHF0PW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBXdCgpe2lmKCFIdCYmIShIdD0idW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fCJ1bmRlZmluZWQiIT10eXBlb2YgbXNDcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMmJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBIdChxdCl9dmFyIEd0PS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmb3IodmFyIFp0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmR3QudGVzdCh0KX0sJHQ9W10sWXQ9MDtZdDwyNTY7KytZdCkkdC5wdXNoKChZdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO3ZhciBKdD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPSgkdFt0W2UrMF1dKyR0W3RbZSsxXV0rJHRbdFtlKzJdXSskdFt0W2UrM11dKyItIiskdFt0W2UrNF1dKyR0W3RbZSs1XV0rIi0iKyR0W3RbZSs2XV0rJHRbdFtlKzddXSsiLSIrJHRbdFtlKzhdXSskdFt0W2UrOV1dKyItIiskdFt0W2UrMTBdXSskdFt0W2UrMTFdXSskdFt0W2UrMTJdXSskdFt0W2UrMTNdXSskdFt0W2UrMTRdXSskdFt0W2UrMTVdXSkudG9Mb3dlckNhc2UoKTtpZighWnQobikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn07dmFyIEt0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0odD10fHx7fSkucmFuZG9tfHwodC5ybmd8fFd0KSgpO2lmKHJbNl09MTUmcls2XXw2NCxyWzhdPTYzJnJbOF18MTI4LGUpe249bnx8MDtmb3IodmFyIG89MDtvPDE2OysrbyllW24rb109cltvXTtyZXR1cm4gZX1yZXR1cm4gSnQocil9O2NvbnN0IFh0PSJodHRwczovL2Nkbi5zcHJpZy5jb20iLFF0PXQ9PnQrIi1sb2FkaW5nLXNwaW5lciIsdGU9ImhpZGRlbiIsZWU9InZpc2libGUiLG5lPSJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiIscmU9InVsLXJlY29yZGluZy1pbi1zZXNzaW9uIixvZT1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7WHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uY3NzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHtYdH0vZGVwZW5kZW5jaWVzL1JlY29yZFJUQy01LjYuMi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7WHR9L2RlcGVuZGVuY2llcy9hZGFwdGVyLjguMC4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7WHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uanNgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAke1h0fS91c2VybGVhcC13ZWItdXBjaHVuay12Mi4yLjIuanNgfV0saWU9W3t0eXBlOiJsaW5rIixjb250ZW50OmAke1h0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAke1h0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5qc2B9LHt0eXBlOiJzdHlsZSIsY29udGVudDoiLyogcHJvZ3Jlc3MgY29udHJvbCBzdHlsZXMgKi9cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1wcm9ncmVzcy1ob2xkZXIge1xuICBtYXJnaW46IDAgMHB4O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDNweDtcbiAgd2lkdGg6IDEwMCU7XG59XG4vKiBwb3NpdGlvbiBhbmQgYWxpZ24gdGhlIGJ1dHRvbnMgYW5kIGJ1dHRvbiB0ZXh0cyAqL1xuLnVsLWNvbnRyb2wtcGFuZWwge1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjhGODtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogYmxhY2s7XG4gIGhlaWdodDogNTBweDtcbiAgcGFkZGluZzogMnB4IDE0cHggMDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogNDBweDtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwgPiAudmpzLWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgaGVpZ2h0OiAzZW07XG4gIHdpZHRoOiAzZW07XG4gIG1hcmdpbjogMCAxMHB4O1xufVxuXG5zcGFuLnVsLWJ1dHRvbi10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDI1cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMjVweCk7XG59XG5cbiN1bC1jYW1lcmEtYnV0dG9uIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnVsLWluYWN0aXZlIHtcbiAgb3BhY2l0eTogMC4zO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtY29udHJvbC52anMtdm9sdW1lLWhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB6LWluZGV4OiAxO1xufVxuXG4udmpzLXZvbHVtZS1iYXIudmpzLXNsaWRlci1ob3Jpem9udGFsIC52anMtdm9sdW1lLWxldmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLWhvdmVyLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtc2xpZGVyLWFjdGl2ZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6YWN0aXZlIHtcbiAgd2lkdGg6IDQwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2w6YWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy1ob3ZlciAudmpzLW11dGUtY29udHJvbCB+IC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6YWN0aXZlIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6Zm9jdXMgLnZqcy12b2x1bWUtY29udHJvbCB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGxlZnQ6IDQwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwLjFzLCBvcGFjaXR5IDAuMXMsIGhlaWdodCAwLjFzLCB3aWR0aCAwLjFzLCBsZWZ0IDBzLCB0b3AgMHM7XG59XG5cbi8qIHBsYXkgYnV0dG9uIGN1c3RvbWl6YXRpb24gKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCB7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi8qIHBvc2l0aW9uIGFuZCBzdHlsZSB0aGUgY3VycmVudCB0aW1lciAqL1xuLnVsLXRpbWUtcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogODBweDtcbiAgbGVmdDogMTBweDtcbiAgaGVpZ2h0OiAyMnB4O1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZWI7XG4gIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLWN1cnJlbnQtdGltZSxcbi52anMtbm8tZmxleCAudmpzLWN1cnJlbnQtdGltZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogcmVtb3ZlIHRoZSBkb3QgcHJvZ3Jlc3MgaW5kaWNhdG9yICovXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzOmJlZm9yZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1sZXZlbDpiZWZvcmUsXG4udmpzLWljb24tY2lyY2xlOmJlZm9yZSxcbi52anMtc2Vlay10by1saXZlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjUuMzI0QS43NS43NSAwIDAxOS4yNSAxdjExLjY2N2EuNzUuNzUgMCAwMS0xLjIxOS41ODVsLTMuOTYtMy4xNjlIMWEuNzUuNzUgMCAwMS0uNzUtLjc1di01YS43NS43NSAwIDAxLjc1LS43NWgzLjA3TDguMDMxLjQxNGEuNzUuNzUgMCAwMS43OTQtLjA5ek03Ljc1IDIuNTZMNC44MDIgNC45MmEuNzUuNzUgMCAwMS0uNDY5LjE2NEgxLjc1djMuNWgyLjU4M2EuNzUuNzUgMCAwMS40NjkuMTY1bDIuOTQ4IDIuMzU4VjIuNTZ6TTE0LjkxMS40N2EuNzUuNzUgMCAwMTEuMDYxIDAgOS4wODQgOS4wODQgMCAwMTAgMTIuODQ0Ljc1Ljc1IDAgMDEtMS4wNi0xLjA2IDcuNTg0IDcuNTg0IDAgMDAwLTEwLjcyNC43NS43NSAwIDAxMC0xLjA2ek0xMS45NyAzLjQxYS43NS43NSAwIDAxMS4wNiAwIDQuOTE3IDQuOTE3IDAgMDEwIDYuOTUzLjc1Ljc1IDAgMTEtMS4wNi0xLjA2IDMuNDE3IDMuNDE3IDAgMDAwLTQuODMyLjc1Ljc1IDAgMDEwLTEuMDZ6JyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTAgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOC41IDEuMTY3TDQuMzMzIDQuNUgxdjVoMy4zMzNMOC41IDEyLjgzM1YxLjE2N3pNMTcuMTcgNC41bC01IDVNMTIuMTcgNC41bDUgNScgc3Ryb2tlPSclMjMyNjIxMzYnIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTEgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTkgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjQ4OSAwLjMyNDAzQzkuMDg0NzQgMC40NDg5MiA5LjI1IDAuNzExNzAzIDkuMjUgMS4wMDAwMVYxMi42NjY3QzkuMjUgMTIuOTU1IDkuMDg0NzQgMTMuMjE3OCA4LjgyNDg5IDEzLjM0MjdDOC41NjUwNCAxMy40Njc1IDguMjU2NjEgMTMuNDMyNCA4LjAzMTQ4IDEzLjI1MjNMNC4wNzAyNSAxMC4wODMzSDFDMC41ODU3ODYgMTAuMDgzMyAwLjI1IDkuNzQ3NTUgMC4yNSA5LjMzMzM0VjQuMzMzMzRDMC4yNSAzLjkxOTEzIDAuNTg1Nzg2IDMuNTgzMzQgMSAzLjU4MzM0SDQuMDcwMjVMOC4wMzE0OCAwLjQxNDM1NUM4LjI1NjYxIDAuMjM0MjUzIDguNTY1MDQgMC4xOTkxNCA4LjgyNDg5IDAuMzI0MDNaTTcuNzUgMi41NjA0OEw0LjgwMTg1IDQuOTE4OTlDNC42Njg4NyA1LjAyNTM4IDQuNTAzNjQgNS4wODMzNCA0LjMzMzMzIDUuMDgzMzRIMS43NVY4LjU4MzM0SDQuMzMzMzNDNC41MDM2NCA4LjU4MzM0IDQuNjY4ODcgOC42NDEzIDQuODAxODUgOC43NDc2OUw3Ljc1IDExLjEwNjJWMi41NjA0OFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuOTY5OCAzLjQxMTI0QzEyLjI2MjcgMy4xMTgzOSAxMi43Mzc2IDMuMTE4NDYgMTMuMDMwNCAzLjQxMTRDMTMuOTUyMSA0LjMzMzQxIDE0LjQ2OTkgNS41ODM3NiAxNC40Njk5IDYuODg3NDhDMTQuNDY5OSA4LjE5MTIxIDEzLjk1MjEgOS40NDE1NiAxMy4wMzA0IDEwLjM2MzZDMTIuNzM3NiAxMC42NTY1IDEyLjI2MjcgMTAuNjU2NiAxMS45Njk4IDEwLjM2MzdDMTEuNjc2OCAxMC4wNzA5IDExLjY3NjcgOS41OTYgMTEuOTY5NiA5LjMwMzA3QzEyLjYxMDEgOC42NjIzNSAxMi45Njk5IDcuNzkzNDYgMTIuOTY5OSA2Ljg4NzQ4QzEyLjk2OTkgNS45ODE1MSAxMi42MTAxIDUuMTEyNjIgMTEuOTY5NiA0LjQ3MTlDMTEuNjc2NyA0LjE3ODk2IDExLjY3NjggMy43MDQwOSAxMS45Njk4IDMuNDExMjRaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sOmhvdmVyIC52anMtbW91c2UtZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xufVxuXG4vKiBwb3NpdGlvbiB2aWRlbyBwbGF5ZXIgaW5zaWRlIHRoZSBjb250YWluZXIgKi9cbi52aWRlby1qcyAudmpzLXRlY2gge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4udmlkZW8tanMgLnZqcy10aW1lLXRvb2x0aXAge1xuICBwYWRkaW5nOiAwLjI1ZW0gMC43NWVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdG9wOiAtMjVweDtcbiAgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA1MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3MudmpzLXNsaWRlci1iYXIgLnZqcy10aW1lLXRvb2x0aXAge1xuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLW1vdXNlLWRpc3BsYXkge1xuICB6LWluZGV4OiAyO1xufVxuXG4udWwtdmlkZW8tcGxheWVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW46bm90KC52anMtaW9zLW5hdGl2ZS1mcykge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXItdmlkZW8tcmVjb3JkZXIudmpzLWZ1bGxzY3JlZW4ge1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnZpZGVvLWpzIGRpdi52anMtcHJvZ3Jlc3MtY29udHJvbCB7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1zbGlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQjJCQkJEO1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi52anMtZnVsbHNjcmVlbi1jb250cm9sIHtcbiAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi8qIGZpeCBhIHN1YnRsZSBtaXNhbGlnbm1lbnQgYnVnIG9uIGNpcmN1bGFyIHBsYXkgY29udHJvbCBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNXB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nID4gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNHB4KTtcbn1cblxuLyogZml4IG9wcG9zaXRlIG1pc2FsaWdubWVudCBidWcgb24gbm9uY2lyY3VsYXIgYnV0dG9ucyAqL1xuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi52aWRlby1qcyAudmpzLWZ1bGxzY3JlZW4tY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuODIxNDMgMi41NDAwNEwxMi4yNjE0IDIuNTQwMDRDMTIuOTI0MiAyLjU0MDA0IDEzLjQ2MTQgMy4wNzczIDEzLjQ2MTQgMy43NDAwNEwxMy40NjE0IDYuMTgwMDQnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTYuMTc5NTUgMTMuNDZMMy43Mzk1NSAxMy40NkMzLjA3NjgxIDEzLjQ2IDIuNTM5NTUgMTIuOTIyNyAyLjUzOTU1IDEyLjI2TDIuNTM5NTUgOS44MTk5Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNMTIuNzc3MiAzLjIyMjY2TDkuMzY0NzUgNi42MzUxNicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4yOTQzNCA5LjcwNjA1TDIuODgxODQgMTMuMTE4Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzLnZqcy1mdWxsc2NyZWVuIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEuNTgzIDkuODEzSDUuMjVhMSAxIDAgMDExIDF2My42NjZNNS4zNzUgMTAuNjg4TDEgMTUuMDYxTTE0LjkxNyA1LjgxM0gxMS4yNWExIDEgMCAwMS0xLTFWMS4xNDZNMTUuMDYzIDFsLTQuMzc2IDQuMzc1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1lbmRlZCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1pY29uLXJlcGxheTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtcGxheWluZyAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3JlY3QgeD0nMy42MTg4NScgeT0nMi4wNjA3NCcgd2lkdGg9JzMuMTYxODUnIGhlaWdodD0nMTEuODgnIHJ4PScwLjknIGZpbGw9J2JsYWNrJyBzdHJva2U9JyUyM0VERURFRCcgc3Ryb2tlLXdpZHRoPScwLjYnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDcmVjdCB4PSc5LjIxNzk3JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xuICBwYWRkaW5nOiAycHg7XG59XG5cbi52anMtZXJyb3ItZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi51bC12aWRlby1wbGF5ZXItdmlkZW8ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi51bC12aWRlby1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsZWZ0OiAwcHg7XG4gIHRvcDogMHB4O1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC8qIEluc2lkZSBBdXRvIExheW91dCAqL1xuXG4gIGZsZXg6IG5vbmU7XG4gIG9yZGVyOiAwO1xuICBmbGV4LWdyb3c6IDA7XG4gIG1hcmdpbjogMTBweCAwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1yZWNvcmQgYnV0dG9uLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCA5Nik7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCBcIkFwcGxlIENvbG9yIEVtb2ppXCIsIFwiU2Vnb2UgVUkgRW1vamlcIiwgXCJTZWdvZSBVSSBTeW1ib2xcIjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGxpbmUtaGVpZ2h0OiAwLjY7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiAzO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2w6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzO1xuICBjb250ZW50OiBcIllvdXIgYnJvd3NlciBuZWVkcyB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgZm9yIHZpZGVvIHJlY29yZGluZ1wiO1xuICBsaW5lLWhlaWdodDogMTM1JTtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY29udGVudDogXCJVbmFibGUgdG8gYWNjZXNzIHlvdXIgY2FtZXJhIGFuZCBtaWNyb3Bob25lXCI7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDphZnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogI0YwRjBGNTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbnRlbnQ6IFwiUmVxdWVzdCBQZXJtaXNzaW9uc1wiO1xuICBwYWRkaW5nOiAxZW0gMmVtO1xuICBjb2xvcjogIzMzMztcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjb250ZW50OiBcIlBsZWFzZSBnbyB0byB5b3VyIGJyb3dzZXIgc2V0dGluZ3MgYW5kIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byBlbmFibGUgcmVjb3JkaW5nXCI7XG4gIHBhZGRpbmc6IDFlbTtcbiAgY29sb3I6ICM0QjU3NUQ7XG4gIG1hcmdpbjogNXB4O1xuICBsaW5lLWhlaWdodDogMTM1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5LCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J005LjIxMjM0IDcuMzc1NDlWMTEuMTE5M00yLjUzOTMxIDQuMjU1OTVIMTMuNDU5M0gyLjUzOTMxWk01LjU3MjM0IDQuMjU1OTVWMy4wMDgzM0M1LjU3MjIyIDIuODQ0MzMgNS42MDM1NCAyLjY4MTkyIDUuNjY0NSAyLjUzMDM4QzUuNzI1NDYgMi4zNzg4NCA1LjgxNDg4IDIuMjQxMTUgNS45Mjc2MiAyLjEyNTE5QzYuMDQwMzcgMi4wMDkyMiA2LjE3NDI0IDEuOTE3MjYgNi4zMjE1OCAxLjg1NDU2QzYuNDY4OTIgMS43OTE4NSA2LjYyNjgzIDEuNzU5NjQgNi43ODYyOCAxLjc1OTc3SDkuMjEyMzRDOS4zNzE3OSAxLjc1OTY0IDkuNTI5NyAxLjc5MTg1IDkuNjc3MDMgMS44NTQ1NkM5LjgyNDM3IDEuOTE3MjYgOS45NTgyNCAyLjAwOTIyIDEwLjA3MSAyLjEyNTE5QzEwLjE4MzcgMi4yNDExNSAxMC4yNzMyIDIuMzc4ODQgMTAuMzM0MSAyLjUzMDM4QzEwLjM5NTEgMi42ODE5MiAxMC40MjY0IDIuODQ0MzMgMTAuNDI2MyAzLjAwODMzVjQuMjU1OTVINS41NzIzNFpNMTIuMjQ2MyA0LjI1NTk1VjEyLjk5MTJDMTIuMjQ2MyAxMy4zMjIzIDEyLjExODQgMTMuNjM5OSAxMS44OTA3IDEzLjg3NDFDMTEuNjYzMSAxNC4xMDgyIDExLjM1NDMgMTQuMjM5OCAxMS4wMzIzIDE0LjIzOThINC45NjYyOEM0LjY0NDMyIDE0LjIzOTggNC4zMzU1NSAxNC4xMDgyIDQuMTA3ODkgMTMuODc0MUMzLjg4MDIzIDEzLjYzOTkgMy43NTIzNCAxMy4zMjIzIDMuNzUyMzQgMTIuOTkxMlY0LjI1NTk1SDEyLjI0NjNaTTYuNzg2MjggNy4zNzU0OVYxMS4xMTkzVjcuMzc1NDlaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTggMEMxMi40MTgzIDAgMTYgMy41ODE3MiAxNiA4QzE2IDEyLjQxODMgMTIuNDE4MyAxNiA4IDE2QzMuNTgxNzIgMTYgMCAxMi40MTgzIDAgOEMwIDMuNTgxNzIgMy41ODE3MiAwIDggMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24udWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMiAxMEwxMiAyQzEyIDAuODk1NDMgMTEuMTA0NiAtNC44NTM5NmUtMDcgMTAgLTQuMzcxMTRlLTA3TDIgLTguNzQyMjhlLTA4QzAuODk1NDMgLTMuOTE0MDVlLTA4IC00Ljg1Mzk2ZS0wNyAwLjg5NTQzMSAtNC4zNzExNGUtMDcgMkwtOC43NDIyOGUtMDggMTBDLTMuOTE0MDVlLTA4IDExLjEwNDYgMC44OTU0MzEgMTIgMiAxMkwxMCAxMkMxMS4xMDQ2IDEyIDEyIDExLjEwNDYgMTIgMTBaJyBmaWxsPSclMjNEMTUxNTMnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNXB4KTtcbn1cblxuLnVsLXJlY29yZGluZy1pbi1zZXNzaW9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC43NSkgdHJhbnNsYXRlKDFweCwgOHB4KTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgZm9yIGZ1bGwgc2NyZWVuIGJ1dHRvbnMgKi9cbi52anMtZnVsbHNjcmVlbiAudWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMjInIGhlaWdodD0nMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNLjc1IDNBMi43NSAyLjc1IDAgMDEzLjUuMjVoOS4wODFBMi43NSAyLjc1IDAgMDExNS4zMzEgM3Y5YTIuNzUgMi43NSAwIDAxLTIuNzUgMi43NUgzLjVBMi43NSAyLjc1IDAgMDEuNzUgMTJWM3pNMy41IDEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1djljMCAuNjkuNTYgMS4yNSAxLjI1IDEuMjVoOS4wODFjLjY5IDAgMS4yNS0uNTYgMS4yNS0xLjI1VjNjMC0uNjktLjU2LTEuMjUtMS4yNS0xLjI1SDMuNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0LjUzIDIuMDNsLTEyIDEyLTEuMDYtMS4wNiAxMi0xMiAxLjA2IDEuMDZ6TTIwLjg3IDEuNTI1YS43NS43NSAwIDAxLjM4LjY1MnYxMC41ODhhLjc1Ljc1IDAgMDEtMS4xMzQuNjQ0bC01LjkyLTMuNTNhLjc1Ljc1IDAgMDEtLjM2NS0uNjQzdi0zLjUzYS43NS43NSAwIDAxLjM2Ni0uNjQ0bDUuOTE5LTMuNTNhLjc1Ljc1IDAgMDEuNzU0LS4wMDd6bS01LjUzOSA0LjYwN1Y4LjgxbDQuNDE5IDIuNjM1VjMuNDk3bC00LjQxOSAyLjYzNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCB7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICBsZWZ0OiBjYWxjKDUwJSAtIDY1cHgpO1xuICB3aWR0aDogMTMwcHg7XG4gIHotaW5kZXg6IDU7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgbWFyZ2luLWxlZnQ6IDAuOGVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsX190aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFMEUwRUI7XG4gIG1hcmdpbi1yaWdodDogMC44ZW07XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBib3JkZXItcmFkaXVzOiAxMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDQwcHgpO1xuICB0b3A6IGNhbGMoNTAlIC0gNDBweCk7XG4gIGFuaW1hdGlvbjogNnMgaW5maW5pdGUgZ3JvdztcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDYwJTtcbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmFmdGVyIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NtYXNrIGlkPSdhJyBtYXNrVW5pdHM9J3VzZXJTcGFjZU9uVXNlJyB4PScwJyB5PScwJyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc0OScgZmlsbD0nJTIzRURFQ0Y4Jy8lM0UlM0MvbWFzayUzRSUzQ2cgbWFzaz0ndXJsKCUyM2EpJyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PSc0OScgcj0nNTAnIGZpbGw9JyUyMzY0NUNDMicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjQyMiA4MS44MTJjNS40MDUtMTUuNTQ3IDIwLjE4Ny0yNi43MDYgMzcuNTc2LTI2LjcwNiAxNy4zOSAwIDMyLjE3MiAxMS4xNTkgMzcuNTc3IDI2LjcwNy05LjE2NCAxMC40My0yMi42MDEgMTcuMDEzLTM3LjU3NiAxNy4wMTMtMTQuOTc2IDAtMjguNDE0LTYuNTgzLTM3LjU3Ny0xNy4wMTR6JyBmaWxsPSclMjNmZmYnIGZpbGwtb3BhY2l0eT0nLjYnLyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PScyOScgcj0nMTcnIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNycvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXCIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjYpO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuXG5Aa2V5ZnJhbWVzIGdyb3cge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG4gIDUwJSAge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTFERkY0O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWNvbnRyb2wtcGFuZWwge1xuICBoZWlnaHQ6IDgwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIG1hcmdpbjogMTBweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLXBsYXliYWNrLXJhdGUtdmFsdWUge1xuICBmb250LXNpemU6IDEycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDNweCk7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLW1lbnUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNnB4LCAxMnB4KTtcbiAgcG9zaXRpb246IHVuc2V0O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUge1xuICBtYXJnaW4tYm90dG9tOiB1bnNldDtcbn1cblxuLnZqcy1tZW51IGxpIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1zZWxlY3RlZCB7XG4gIGNvbG9yOiBsaWdodGdyYXk7XG59XG5cbi52anMtbWVudSBsaS52anMtbWVudS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1idXR0b25zLXBhbmVsIHtcbiAgdG9wOiBjYWxjKDUwJSAtIDMwcHgpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudmpzLXJlY29yZC1pbmRpY2F0b3IudmpzLWNvbnRyb2wge1xuICBib3R0b206IDkwcHggIWltcG9ydGFudDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yIHtcbiAgcGFkZGluZzogMC4zZW0gMC43NWVtIDAuMTVlbSAxNXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNzVweDtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDIxcHgpO1xuICB3aWR0aDogNDNweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiA0O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3I6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUI1NzU3O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA1cHg7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjpiZWZvcmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiAjMzMzO1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNnJlbTtcbiAgaGVpZ2h0OiA2cmVtO1xuXG59XG4udWwtdmlkZW8tcGxheWVyLWxvYWRpbmcgZGl2IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG4gIG1hcmdpbjogNXB4O1xuICBib3JkZXI6IDVweCBzb2xpZCAjNjY2O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICBib3JkZXItY29sb3I6ICM2NjYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi5maXJzdCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuNDVzO1xufVxuLnNlY29uZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuM3M7XG59XG4udGhpcmQge1xuICBhbmltYXRpb24tZGVsYXk6IC0wLjE1cztcbn1cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi51bC12aWRlby1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlLCAudWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjphZnRlciwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmFmdGVyIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1wYXRoPSd1cmwoJTIzY2xpcDBfMjY0NV80NjU0KSclM0UlM0NwYXRoIGQ9J00xNS4xNDkxIDQuNzVMMTAuNTk5MSA4TDE1LjE0OTEgMTEuMjVWNC43NVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTkuMjk5MTIgMy40NTAySDIuMTQ5MTJDMS40MzExNSAzLjQ1MDIgMC44NDkxMjEgNC4wMzIyMyAwLjg0OTEyMSA0Ljc1MDJWMTEuMjUwMkMwLjg0OTEyMSAxMS45NjgyIDEuNDMxMTUgMTIuNTUwMiAyLjE0OTEyIDEyLjU1MDJIOS4yOTkxMkMxMC4wMTcxIDEyLjU1MDIgMTAuNTk5MSAxMS45NjgyIDEwLjU5OTEgMTEuMjUwMlY0Ljc1MDJDMTAuNTk5MSA0LjAzMjIzIDEwLjAxNzEgMy40NTAyIDkuMjk5MTIgMy40NTAyWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL2clM0UlM0NkZWZzJTNFJTNDY2xpcFBhdGggaWQ9J2NsaXAwXzI2NDVfNDY1NCclM0UlM0NyZWN0IHdpZHRoPScxNS42JyBoZWlnaHQ9JzE1LjYnIGZpbGw9J3doaXRlJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwLjE5OTk1MSAwLjIwMDE5NSknLyUzRSUzQy9jbGlwUGF0aCUzRSUzQy9kZWZzJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG59XG5cbi51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyIHtcbiAgY29udGVudDogJ1JlY29yZCB5b3VyIFJlc3BvbnNlJztcbn1cblxuLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTUgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMy44NzU3IDguMjIzNjFMMS4xMTE4IDE0LjYwNTZDMC45NDU1NzggMTQuNjg4NyAwLjc1IDE0LjU2NzggMC43NSAxNC4zODJWMS42MTgwM0MwLjc1IDEuNDMyMTkgMC45NDU1NzkgMS4zMTEzMSAxLjExMTggMS4zOTQ0M0wxMy44NzU3IDcuNzc2MzlDMTQuMDYgNy44Njg1MiAxNC4wNiA4LjEzMTQ4IDEzLjg3NTcgOC4yMjM2MVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KSB0cmFuc2xhdGUoMCwgMXB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAycHgpO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnQmFjayB0byBRdWVzdGlvbic7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnZpc2libGUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBhbmltYXRpb246IGZhZGUgMC4zcztcbn1cblxuQGtleWZyYW1lcyBmYWRlIHtcbiAgMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4jdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjb2xvcjogYmxhY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi51bC1jb3VudGRvd24tdGV4dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNXB4KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuID4gI3VsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIHtcbiAgZm9udC1zaXplOiAyNXB4O1xuICB0cmFuc2Zvcm06IHVuc2V0O1xufVxuXG4udmpzLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jdWwtU3BlZWQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAzNXB4KTtcbn1cblxuLnZqcy1wb3N0ZXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB1bnNldDtcbn1cbiJ9XSxhZT0iLXZpZGVvLXBsYXllciIsY2U9Ii12aWRlby1yZWNvcmRlciI7bGV0IHNlLHVlO2NvbnN0IGxlPWFzeW5jKHQsZSxuLHIsbyxpKT0+e2NvbnN0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGM9e3NjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOmEuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OmEuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOm5hdmlnYXRvci5sYW5ndWFnZX0scz17YWN0aW9uOmUsZXJyOnttZXNzYWdlOnQubWVzc2FnZSxzdGFjazp0LnN0YWNrfSxtZXRhOmMsdmlkOm8sZW52SWQ6aX07KGF3YWl0IGZldGNoKGAke259L3Nkay8xL2Vycm9yc2Ase21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsuLi5yLCJ1c2VybGVhcC1wbGF0Zm9ybSI6InZpZGVvX3JlY29yZGVyIiwieC11bC1lcnJvciI6d2luZG93LmJ0b2EoYHVzZXJsZWFwLSR7RGF0ZS5ub3coKX0tZXJyb3JgKX0sYm9keTpKU09OLnN0cmluZ2lmeShzKX0pKS5va3x8Y29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDQ0KSBGYWlsZWQgdG8gcmVwb3J0IGVycm9yIHRvIEFQSSIsdCl9LGZlPSh0LGUsbik9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG4mJm4oKTtQcm9taXNlLmFsbChlLnJlZHVjZSgoKGUsbik9PihlLnB1c2goKCh0LHt0eXBlOmUsY29udGVudDpufSk9Pm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8pe2xldCBpOyJzY3JpcHQiPT09ZT8oaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxpLnNyYz1uKToibGluayI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxpLnJlbD0ic3R5bGVzaGVldCIsaS5ocmVmPW4saS50eXBlPSJ0ZXh0L2NzcyIpOihpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaS5pbm5lckhUTUw9biksaS5vbmxvYWQ9ZnVuY3Rpb24oKXtyKG4pfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtvKG4pfSxpLmFzeW5jPSExLGkuaWQ9YnRvYShuKSx0LmFwcGVuZENoaWxkKGkpfSkpKSh0LG4pKSxlKSksW10pKS50aGVuKCgoKT0+e24mJm4oKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCsiIGZhaWxlZCB0byBsb2FkIil9KSl9LGRlPSh0LGUsbik9PntpZigic3RhcnQiPT09ZSYmKHQuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLCJub25lIj09PWUpdC5zdHlsZS52aXNpYmlsaXR5PXRlO2Vsc2UgaWYoInN1Y2Nlc3MiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9dGUsdC5pbm5lckhUTUw9IlVwbG9hZCBzdWNjZWVkZWQhIjtlbHNle2NvbnN0IGU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4pKTt0LmlubmVySFRNTD1gVXBsb2FkaW5nIDxzcGFuIGNsYXNzPSJ1bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUiPiR7ZX0lPC9zcGFuPmAsdC5zdHlsZS5iYWNrZ3JvdW5kPWBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNFMEUwRUIgMCUsICNFMEUwRUIgJHtlfSUsICNGQ0ZDRkQgJHtlfSUsICNGQ0ZDRkQgMTAwJSlgfX0scGU9KHQsZSk9Pntjb25zdCBuPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtyZXR1cm4gbi5hZGRDbGFzcygidWwtYnV0dG9ucy1wYW5lbCIpLGUubWFwKCh0PT57bi5hZGRDaGlsZCh0KX0pKSxoZShuKSxufSxoZT10PT57dC5jaGlsZHJlbigpLmZvckVhY2goKHQ9PntpZihPZVt0Lm5hbWVfXSl7Y29uc3QgZT12ZShPZVt0Lm5hbWVfXSxgdWwtJHtPZVt0Lm5hbWVfXX1gKTt0LmVsXy5hcHBlbmRDaGlsZChlKX19KSl9LHZlPSh0LGU9IiIpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIG4uY2xhc3NOYW1lPSJ1bC1idXR0b24tdGV4dCIsbi5pbm5lckhUTUw9dCxuLmlkPWUsbn0sZ2U9KHQsZSxuLHIsbz0hMSk9Pnt0LmFkZENsYXNzKCJ1bC12aWRlby1wbGF5ZXIiKTtjb25zdCBpPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtpLmFkZENsYXNzKCJ1bC1jb250cm9sLXBhbmVsIiksdC5wcm9ncmVzc0Jhcj1pLmFkZENoaWxkKCJQcm9ncmVzc0NvbnRyb2wiKSxuJiZ0LnNyYyhuKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXI9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIiKTtjb25zdCBhPW4mJm4uc3JjP2tlKG4uc3JjKTpudWxsOyFufHwhbyYmYT8odC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMTAwJSIsYSYmdC5wb3N0ZXIoYSkpOih0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LmFkZCgidmpzLWhpZGRlbiIpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKSx0Lm9uKCJwbGF5IiwoKCk9PntvfHwhbnx8YXx8d2UodCwhMSl9KSksdC5hZGRDaGlsZCh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIse30sMSksaS5hZGRDaGlsZChlKSx0LmFkZENoaWxkKGkpLHImJnIodCl9LHllPSh0LGUsbixyLG8saSxhLGM9ITEpPT57dWU9RGF0ZS5ub3coKTtjb25zdCBzPXdpbmRvdy52aWRlb2pzLHU9cyhlLHtjb250cm9sczohMSxiaWdQbGF5QnV0dG9uOiExLGZsdWlkOiExLHdpZHRoOjEyODAsaGVpZ2h0OjcyMCxwbGF5c2lubGluZTohMCxwbHVnaW5zOntyZWNvcmQ6e2F1ZGlvOiEwLHZpZGVvOnttYW5kYXRvcnk6e21pbldpZHRoOjEyODAsbWluSGVpZ2h0OjcyMH19LGZyYW1lV2lkdGg6MTI4MCxmcmFtZUhlaWdodDo3MjAsbWF4TGVuZ3RoOjYwMCxhdXRvTXV0ZURldmljZTohMH19fSk7dS5wYXlsb2FkPW47Y29uc3QgbD10PT57Y29uc3QgZT1uZSxuPW5lKyItYXVkaW8tb25seSI7ZGUodS51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksc2UmJnNlLnN0YXJ0VGltZT49dWUmJnNlLmFib3J0KCk7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtY2FtZXJhLWJ1dHRvbiIpO3Q/KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksaC5yZW1vdmVDbGFzcyhlKSxoLmFkZENsYXNzKG4pLHIuaW5uZXJIVE1MPU9lLlR1cm5PbkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIucmVtb3ZlQ2xhc3MoInZqcy1oaWRkZW4iKSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e3UucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKHUucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKHUucmVjb3JkKCkpKSk6KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QucmVtb3ZlKCJ2anMtaGlkZGVuIiksdS5yZWNvcmQoKS5nZXREZXZpY2UoKSxoLnJlbW92ZUNsYXNzKG4pLGguYWRkQ2xhc3MoZSksci5pbm5lckhUTUw9T2UuVHVybk9mZkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuYWRkQ2xhc3MoInZqcy1oaWRkZW4iKSl9LGY9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57Zi5oYXNDbGFzcyh0ZSl8fChsKHUuY2FtZXJhT2ZmKSxvKFNlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyh0ZSksZi5hZGRDbGFzcyh0ZSkpfX0pO2YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKSxmLmVsXy5hcHBlbmRDaGlsZCh2ZShPZS5EZWxldGVCdXR0b24sInVsLWRlbGV0ZS1idXR0b24iKSk7Y29uc3QgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxwPSgpPT57ZC5jbGFzc0xpc3QuY29udGFpbnMoInZqcy1mdWxsc2NyZWVuIikmJnUuY2FtZXJhT2ZmP2Quc3R5bGUuZGlzcGxheT0idGFibGUiOmQuc3R5bGUuZGlzcGxheT0iZmxleCJ9O3AoKTtjb25zdCBoPW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e3UucmVjb3JkKCkuaXNSZWNvcmRpbmcoKXx8KHUuY2FtZXJhT2ZmPSF1LmNhbWVyYU9mZixsKHUuY2FtZXJhT2ZmKSwhZi5oYXNDbGFzcyh0ZSkmJmYuYWRkQ2xhc3ModGUpLG8oU2UuREVMRVRFLHt9KSxwKCkpfX0pO2guYWRkQ2xhc3MobmUpLGguZWxfLmFwcGVuZENoaWxkKHZlKE9lLlR1cm5PZmZDYW1lcmEsInVsLWNhbWVyYS1idXR0b24iKSk7Y29uc3Qgdj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRlci10b2dnbGUiKTtpZih1LnJlY29yZCgpLmlzUmVjb3JkaW5nKCkpdS5yZWNvcmQoKS5zdG9wKCksdCYmKHQuaW5uZXJIVE1MPU9lLlJlY29yZEJ1dHRvbiksdi5yZW1vdmVDbGFzcyhyZSksZi5yZW1vdmVDbGFzcyh0ZSk7ZWxzZXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIpO2lmKGUpZS5yZW1vdmUoKSx0JiYodC5pbm5lckhUTUw9T2UuUmVjb3JkQnV0dG9uKSxsKHUuY2FtZXJhT2ZmKSxvKFNlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyh0ZSksZi5hZGRDbGFzcyh0ZSksdi5yZW1vdmVDbGFzcyhyZSksbS5zaG93KCk7ZWxzZXt2LmFkZENsYXNzKHJlKSxtLmhpZGUoKSxoLmFkZENsYXNzKHRlKSxmLmFkZENsYXNzKHRlKSx0JiYodC5pbm5lckhUTUw9T2UuU3RvcEJ1dHRvbik7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmlkPSJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIsZC5pbnNlcnRCZWZvcmUoZSxkLmNoaWxkcmVuWzFdKSxlLnN0eWxlLmhlaWdodD1gJHtkLm9mZnNldEhlaWdodH1weGAsbWUodSwzKX19fX0pO3YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24iKSx2LmVsXy5hcHBlbmRDaGlsZCh2ZShPZS5SZWNvcmRCdXR0b24sInVsLXJlY29yZGVyLXRvZ2dsZSIpKTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtnLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsZy5jbGFzc05hbWU9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCIsdC5hcHBlbmRDaGlsZChnKSx1LnVwbG9hZFByb2dyZXNzTGFiZWw9Zztjb25zdCB5PXBlKHUsW2YsaCwiUGxheVRvZ2dsZSIsdiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxtPXkuY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7bS5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJm0uaGlkZSgpO2NvbnN0IGI9eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJQbGF5VG9nZ2xlIj09PXQubmFtZV8pKTtiLmhpZGUoKSxpJiZoLmFkZENsYXNzKHRlKSwhaSYmZi5hZGRDbGFzcyh0ZSksZ2UodSx5LGksITEsYyksdS5vbigic3RvcFJlY29yZCIsKCgpPT57di5oaWRlKCksYi5zaG93KCksbS5zaG93KCksZi5yZW1vdmVDbGFzcyh0ZSl9KSksdS5vbigiZGV2aWNlUmVhZHkiLCgoKT0+e3Yuc2hvdygpLGIuaGlkZSgpLGYuYWRkQ2xhc3ModGUpfSkpLCgodCxlLG4scixvKT0+e3Qub24oImRldmljZUVycm9yIiwoZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiZGV2aWNlIGVycm9yOiIsdC5kZXZpY2VFcnJvckNvZGUpLCJQZXJtaXNzaW9uIGRlbmllZCI9PT10LmRldmljZUVycm9yQ29kZS5tZXNzYWdlPyh0LmRldmljZUJ1dHRvbi5hZGRDbGFzcygicGVybWlzc2lvbi1kZW5pZWQiKSxuJiZuKFNlLkVSUk9SLHt0eXBlOlNlLlBFUk1JU1NJT05fREVOSUVEfSkpOihuJiZuKFNlLkVSUk9SLHt0eXBlOlNlLk9USEVSfSksbGUobmV3IEVycm9yKHQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2UpLCJyZWNvcmRlckRldmljZUVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKG4scil7bGUocnx8dC5lcnJvcigpLCJyZWNvcmRlckVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLHQub24oInN0YXJ0UmVjb3JkIiwoZnVuY3Rpb24oZSxuKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpfSkpLHQub24oImZpbmlzaFJlY29yZCIsKGFzeW5jIGZ1bmN0aW9uKCl7cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN0YXJ0IiwwKTtjb25zdHtzdXJ2ZXlJZDppLHF1ZXN0aW9uSWQ6YSxyZXNwb25zZUdyb3VwVWlkOmMsdmlzaXRvcklkOnMsZW52SWQ6dX09dC5wYXlsb2FkO2lmKCFpKXtjb25zdCB0PSJpbnRlcm5hbCBlcnJvcjogbWlzc2luZyBmaWVsZHMgaW4gcGF5bG9hZCI7cmV0dXJuIG4mJm4oU2UuRVJST1Ise3R5cGU6U2UuT1RIRVJ9KSxsZShuZXcgRXJyb3IodCksImZpbmlzaFJlY29yZCIsZSxvLHMsdSksbnVsbH10LnJlY29yZCgpLnN0b3BEZXZpY2UoKTtjb25zdCBsPXQuY2FtZXJhT2ZmP1NlLk1FRElBX1RZUEVfQVVESU86U2UuTUVESUFfVFlQRV9WSURFTyxmPUt0KCksZD17c3VydmV5SWQ6aSx1cGRhdGVkQXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpLG1lZGlhVHlwZTpsLG1lZGlhUmVjb3JkaW5nVWlkOmZ9O2EmJihkLnF1ZXN0aW9uSWQ9YSksYyYmKGQucmVzcG9uc2VHcm91cFVpZD1jKSxzJiYoZC52aXNpdG9ySWQ9cyk7Y29uc3QgcD1hd2FpdChhc3luYygpPT57Y29uc3Qgcj1hd2FpdCBmZXRjaChgJHtlfS8yL2Vudmlyb25tZW50cy9pbnRlZ3JhdGlvbnMvdXBsb2FkYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShkKX0pO2lmKHIub2spe2NvbnN0IHQ9YXdhaXQgci5qc29uKCk7cmV0dXJuIG4mJm4oU2UuVVBMT0FEX1NUQVJURUQse1tTZS5VUExPQURfSURdOnQudXBsb2FkLmlkLFtTZS5NRURJQV9UWVBFXTpsLFtTZS5NRURJQV9SRUNPUkRJTkdfVUlEXTpmfSksdC51cGxvYWQudXJsfXJldHVybiBuJiZuKFNlLkVSUk9SLHt0eXBlOlNlLk9USEVSLHJlc3BvbnNlOnJ9KSxsZShuZXcgRXJyb3IoImZhaWxlZCB0byBnZXQgdXBsb2FkIHJlc3BvbnNlIHdpdGggdXJsIiksImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKSxudWxsfSkoKTtwJiYoc2U9d2luZG93LlVwQ2h1bmsuY3JlYXRlVXBsb2FkKHtlbmRwb2ludDpwLGZpbGU6bmV3IEZpbGUoW3QucmVjb3JkZWREYXRhXSxgcmVjb3JkaW5nICR7bH0gJHtEYXRlLm5vdygpfWApLGNodW5rU2l6ZTo1MTIwfSksc2Uuc3RhcnRUaW1lPURhdGUubm93KCksc2Uub24oImVycm9yIiwobj0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksbGUobiwiZmluaXNoUmVjb3JkIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLHNlLm9uKCJwcm9ncmVzcyIsKGU9PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwicHJvZ3Jlc3MiLGUuZGV0YWlsKX0pKSxzZS5vbigic3VjY2VzcyIsKCgpPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN1Y2Nlc3MiKSxuJiZuKFNlLlVQTE9BRF9GSU5JU0hFRCl9KSkpfSkpfSkodSxyLG8sZGUsYSksaSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksdS5zcmMoaSksYi5zaG93KCksdi5oaWRlKCksZi5yZW1vdmVDbGFzcyh0ZSkpO2NvbnN0IHg9W3tuYW1lOiJtaWNyb3Bob25lIn1dOyF1LmNhbWVyYU9mZiYmeC5wdXNoKHtuYW1lOiJjYW1lcmEifSksUHJvbWlzZS5hbGwoeC5tYXAoKHQ9Pm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh0KSkpKS50aGVuKCh0PT57dC5yZWR1Y2UoKCh0LGUpPT50JiJncmFudGVkIj09PWUuc3RhdGUpLCEwKSYmdSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksIWkmJnUucmVjb3JkKCkuZ2V0RGV2aWNlKCkpfSkpLmNhdGNoKCh0PT57fSkpfSxtZT0odCxlPTMpPT57Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4iKTtuJiYwPT09ZT8obi5yZW1vdmUoKSx0LnJlY29yZCgpLnN0YXJ0KCkpOm4mJihuLmlubmVySFRNTD1gPHNwYW4gY2xhc3M9J3VsLWNvdW50ZG93bi10ZXh0Jz5SZWNvcmRpbmcgaW4uLi4gJHtlfTwvc3Bhbj5gLHNldFRpbWVvdXQoKCgpPT57bWUodCxlLTEpfSksMWUzKSl9LGJlPXQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyIixlLmFwcGVuZENoaWxkKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLXBsYXllci1sb2FkaW5nIixlLmlkPVF0KHQpLFsiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCJdLm1hcCgodD0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9dCxlLmFwcGVuZENoaWxkKG4pfSkpLGV9KSh0KSksZX0seGU9KHQsZSk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7bi5pZD10LG4uY2xhc3NOYW1lPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHVsLXZpZGVvLXBsYXllci12aWRlbyI7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7ci5jbGFzc05hbWU9InZqcy1uby1qcyIsci5pbm5lckhUTUw9IlRvIHZpZXcgdGhpcyB2aWRlbyBwbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQsIGFuZCBjb25zaWRlciB1cGdyYWRpbmcgdG8gYSB3ZWIgYnJvd3NlciB0aGF0Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gby5ocmVmPSJodHRwczovL3ZpZGVvanMuY29tL2h0bWw1LXZpZGVvLXN1cHBvcnQvIixvLnRhcmdldD0iX2JsYW5rIixvLmlubmVySFRNTD0ic3VwcG9ydHMgSFRNTDUgdmlkZW8iLHIuYXBwZW5kQ2hpbGQobyksbi5hcHBlbmRDaGlsZChyKSxlLmFwcGVuZENoaWxkKG4pLGV9LHdlPSh0LGUpPT57ZT8odC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuc2hvdygpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKToodC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIil9LEVlPXQ9Pntjb25zdCBlPXdpbmRvdy52aWRlb2pzLG49dCtjZTtpZihlKXt0cnl7aWYoIWUobikucmVjb3JkKCkuc3RyZWFtKXJldHVybn1jYXRjaCh0KXtyZXR1cm59ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobikmJmUobikucmVjb3JkKCkuc3RvcCgpLGUobikucmVjb3JkKCkuc3RvcERldmljZSgpfX0sQ2U9dD0+e3dpbmRvdy52aWRlb2pzKHQrYWUpLnBhdXNlKCl9LGplPSh0LGUsbixyKT0+e3dpbmRvdy52aWRlb2pzKHQrYWUpO2NvbnN0IG89d2luZG93LnZpZGVvanModCtjZSk7KCh0LGUsbik9Pntjb25zdCByPXdpbmRvdy52aWRlb2pzKHQrYWUpOyFyLnBhdXNlZCgpJiZyLnBhdXNlKCksci5zcmMoe3NyYzplLHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9KSxyLmN1cnJlbnRUaW1lKDApLHdlKHIsbik7Y29uc3Qgbz1rZShlKTshbiYmZSYmKG8/ci5wb3N0ZXIobyk6d2UociwhMCkpLHIub24oInBsYXkiLCgoKT0+e258fCFlfHxvfHx3ZShyLCExKX0pKX0pKHQsZSxyKSxvLnJlY29yZCgpLnJlc2V0U3RhdGUoKSxvLnJlY29yZCgpLmdldERldmljZSgpO2lmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKVswXS5jbGFzc0xpc3QuYWRkKHRlKSxvLmNhbWVyYU9mZil7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSIpWzBdLmNsYXNzTGlzdC5yZW1vdmUodGUpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57by5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2goby5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQoby5yZWNvcmQoKSkpfWVsc2V7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24iKVswXS5jbGFzc0xpc3QucmVtb3ZlKHRlKX1vLnBheWxvYWQ9bixkZShvLnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSx1ZT1EYXRlLm5vdygpfSxrZT10PT57Y29uc3QgZT10Lm1hdGNoKC9odHRwczpcL1wvc3RyZWFtLm11eC5jb21cLyguKikvKSxuPWU/ZVsxXTpudWxsO3JldHVybiBuP2BodHRwczovL2ltYWdlLm11eC5jb20vJHtufS90aHVtYm5haWwuanBnP3RpbWU9MGA6bnVsbH0sU2U9e1VQTE9BRF9TVEFSVEVEOiJ1cGxvYWQuc3RhcnRlZCIsVVBMT0FEX0ZJTklTSEVEOiJ1cGxvYWQuZmluaXNoZWQiLERFTEVURToiZGVsZXRlIixFUlJPUjoiZXJyb3IiLE1FRElBX1RZUEU6Im1lZGlhLnR5cGUiLFBFUk1JU1NJT05fREVOSUVEOiJwZXJtaXNzaW9uX2RlbmllZCIsT1RIRVI6Im90aGVyIixVUExPQURfSUQ6InVwbG9hZC5pZCIsTUVESUFfUkVDT1JESU5HX1VJRDoibWVkaWEucmVjb3JkaW5nLnVpZCIsTUVESUFfVFlQRV9WSURFTzoidmlkZW8iLE1FRElBX1RZUEVfQVVESU86ImF1ZGlvIn0sT2U9e1BsYXliYWNrUmF0ZU1lbnVCdXR0b246IlNwZWVkIixQbGF5VG9nZ2xlOiJQbGF5IixGdWxsc2NyZWVuVG9nZ2xlOiJFeHBhbmQiLFR1cm5PbkNhbWVyYToiVHVybiBvbiIsVHVybk9mZkNhbWVyYToiVHVybiBvZmYiLERlbGV0ZUJ1dHRvbjoiRGVsZXRlIixSZWNvcmRCdXR0b246IlJlY29yZCIsU3RvcEJ1dHRvbjoiU3RvcCIsUGF1c2VCdXR0b246IlBhdXNlIn07ZnVuY3Rpb24gSWUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBBZT0idWwtYnV0dG9uLWluYWN0aXZlIjtmdW5jdGlvbiBNZSh0LGUpe2UodCl9dmFyIFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO090KCkodGhpcyx0KSx0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7bi5wYXlsb2FkPWUsbi5yZWplY3Q9cixuLnJlc29sdmU9dH0pKX1yZXR1cm4gQXQoKSh0LFt7a2V5OiJyZXNvbHZlUmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5yZXNvbHZlKHQpfX1dKSx0fSgpO2Z1bmN0aW9uIF9lKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4uYmluZChudWxsLGUpLHQpfSkpfXZhciBSZT0xMCxMZT0hMSxQZT0iIixOZT0hMSxEZT1bXTtmdW5jdGlvbiBGZSh0KXtyZXR1cm4gdC5fY29uZmlnJiZ0Ll9jb25maWcuaW5zdGFsbGF0aW9uTWV0aG9kP3QuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q6dC5fZ3RtP3E6dC5fc2VnbWVudD9XOkd9ZnVuY3Rpb24gVWUodCl7TGU9ITAsUGU9dH1mdW5jdGlvbiBCZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsInVzZXJsZWFwLXBsYXRmb3JtIjoid2ViIiwieC11bC1zZGstdmVyc2lvbiI6IjIuMTQuOSJ9O2lmKHQuZW52SWQmJihlW1VdPXQuZW52SWQpLHQudG9rZW4mJihlLkF1dGhvcml6YXRpb249IkJlYXJlciAiK3QudG9rZW4pLHQudXNlcklkJiYoZVt6XT10LnVzZXJJZCksdC52aXNpdG9ySWQmJihlW1ZdPXQudmlzaXRvcklkKSx0LnBhcnRuZXJBbm9ueW1vdXNJZCYmKGVbQl09dC5wYXJ0bmVyQW5vbnltb3VzSWQpLHQubW9iaWxlSGVhZGVyc0pTT04pe3ZhciBuPUpTT04ucGFyc2UodC5tb2JpbGVIZWFkZXJzSlNPTik7T2JqZWN0LmFzc2lnbihlLG4pfXJldHVybiBlW0hdPUZlKHQpLHQubG9jYWxlJiYoZVsiYWNjZXB0LWxhbmd1YWdlIl09dC5sb2NhbGUpLGV9ZnVuY3Rpb24gemUodCxlLG4pe3JldHVybiBWZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVmUoKXtyZXR1cm4oVmU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbztyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCFlKXt0Lm5leHQ9NDticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3N0YXR1czo0Mjl9KTtjYXNlIDQ6cmV0dXJuIG89bmV3IFRlKHIpLERlLnB1c2gobyksdC5hYnJ1cHQoInJldHVybiIsby5wcm9taXNlKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBIZSh0LGUpe3JldHVybiBxZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWUoKXtyZXR1cm4gcWU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmLGQ9YXJndW1lbnRzO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1kLmxlbmd0aD4yJiZ2b2lkIDAhPT1kWzJdP2RbMl06MCxvPWQubGVuZ3RoPjMmJnZvaWQgMCE9PWRbM10mJmRbM10saT1kLmxlbmd0aD40JiZ2b2lkIDAhPT1kWzRdJiZkWzRdLGE9e3VybDplLG9wdGlvbnM6bixhdHRlbXB0OnIsc2hvdWxkRHJvcE9uUmF0ZUxpbWl0Om99LCFOZXx8aSl7dC5uZXh0PTY7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHplKG8saSxhKSk7Y2FzZSA2OmlmKGM9e29rOiExLHJlcG9ydEVycm9yOiExfSwhTGUpe3QubmV4dD0xMDticmVha31yZXR1cm4gY29uc29sZS5sb2coIlVzZXJMZWFwIC0gIi5jb25jYXQoUGUpKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDEwOnJldHVybiB0LnByZXY9MTAsbi5oZWFkZXJzPU9iamVjdC5hc3NpZ24oQmUoKSxuLmhlYWRlcnMpLHQubmV4dD0xNCxmZXRjaChlLG4pO2Nhc2UgMTQ6aWYoNDI5IT09KHM9dC5zZW50KS5zdGF0dXMpe3QubmV4dD0yNDticmVha31pZighKCFOZSYmIW98fGkpKXt0Lm5leHQ9MjM7YnJlYWt9cmV0dXJuIE5lPSEwLHU9cy5oZWFkZXJzLmhhcygicmF0ZWxpbWl0LXJlc2V0Iik/TnVtYmVyKHMuaGVhZGVycy5nZXQoInJhdGVsaW1pdC1yZXNldCIpKTpSZSx0LmFicnVwdCgicmV0dXJuIixfZSgxZTMqdSkudGhlbihOKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixIZShlLG4sMCxvLCEwKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKSk7Y2FzZSAyMzpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsemUobywhMSxhKSk7Y2FzZSAyNDppZihOZT0hMSxEZS5sZW5ndGgmJihEZS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGF5bG9hZDtIZShlLnVybCxlLm9wdGlvbnMsZS5hdHRlbXB0LGUuc2hvdWxkRHJvcE9uUmF0ZUxpbWl0KS50aGVuKChmdW5jdGlvbihlKXt0LnJlc29sdmVSZXF1ZXN0KGUpfSkpfSkpLERlPVtdKSwhcy5vayl7dC5uZXh0PTQxO2JyZWFrfWlmKDI0OSE9PXMuc3RhdHVzKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIFVlKCksdC5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAzMDpyZXR1cm4gdC5uZXh0PTMyLHMudGV4dCgpO2Nhc2UgMzI6cmV0dXJuIGw9dC5zZW50LHQucHJldj0zMyxsJiYiT0siIT09bCYmKHMuanNvbj1KU09OLnBhcnNlKGwpKSx0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDM4OnJldHVybiB0LnByZXY9MzgsdC50MD10LmNhdGNoKDMzKSx0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITAsZXJyb3I6bmV3IEVycm9yKCJmYWlsZWQgcGFyc2luZyByZXNwb25zZSBqc29uIGZvciAiLmNvbmNhdChlLCIgLSAiKS5jb25jYXQobCkpfSk7Y2FzZSA0MTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIscyk7Y2FzZSA0NDppZih0LnByZXY9NDQsdC50MT10LmNhdGNoKDEwKSwhKChmPXIrMSk+Mikpe3QubmV4dD00OTticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse29rOiExLHJlcG9ydEVycm9yOiExLGVycm9yOnQudDF9KTtjYXNlIDQ5OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixfZSgxZTMqZikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gSGUoZSxuLGYpfSkpKTtjYXNlIDUwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCxudWxsLFtbMTAsNDRdLFszMywzOF1dKX0pKSkscWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFdlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBHZSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9XZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6V2UoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiAkZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJGUoKXtyZXR1cm4gJGU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbyxpLGEsYyxzLHUsbCxmO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG89ZS5tb2RlLGk9ZS51c2VySWQsYT1lLmVudklkLGM9ZS5hcGlVUkwscz1lLmhlYWRlcnMsdT13aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGw9e21vZGU6byxzY3JlZW5XaWR0aDp3aW5kb3cuc2NyZWVuLndpZHRoLHNjcmVlbkhlaWdodDp3aW5kb3cuc2NyZWVuLmhlaWdodCxjbGllbnRXaWR0aDp1LmNsaWVudFdpZHRoLGNsaWVudEhlaWdodDp1LmNsaWVudEhlaWdodCxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24uaHJlZixsYW5ndWFnZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSxmPXthY3Rpb246bixlcnI6e21lc3NhZ2U6ci5tZXNzYWdlLHN0YWNrOnIuc3RhY2t9LG1ldGE6bCx2aWQ6aSxlbnZJZDphfSx0Lm5leHQ9NixIZSgiIi5jb25jYXQoYywiL3Nkay8xL2Vycm9ycyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6T2JqZWN0LmFzc2lnbih7IngtdWwtZXJyb3IiOndpbmRvdy5idG9hKCJ1c2VybGVhcC0iLmNvbmNhdChEYXRlLm5vdygpLCItZXJyb3IiKSl9LHMpLGJvZHk6SlNPTi5zdHJpbmdpZnkoZil9KTtjYXNlIDY6dC5zZW50Lm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIixyKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSksJGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBZZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQudXNlcklkfHx0Lm1ldGEmJiJ0ZXN0Ij09PXQubWV0YS5tb2RlfHx0LmlzUHJldmlld30sSmU9e3N1cnZleUlkOm51bGwscnVubmluZzohMSxmcmFtZTpudWxsLGVudklkOm51bGwsdXNlcklkOm51bGwsbWV0YTp7fSxib3JkZXI6bnVsbCxmb250RmFtaWx5Om51bGwsZm9udEZhbWlseVVSTDpudWxsLHRpbWVvdXQ6bnVsbCxpbnRlcnZhbDpudWxsLG1vZGU6bnVsbCxkZWNrOntpbmRleDowLGNhcmRzOltdfSxjb250ZXh0Ont9LHNlbmRpbmc6ITEsY2FyZHM6e29wZW46ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Uscj10LnByb3BlcnRpZXMsbz0odC5sb2NhbGUsdC5uZXh0KSxpPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgYz10LmFwcCxzPWMudXNlTW9iaWxlU3R5bGluZyx1PWMuYm9yZGVyLGw9Yy5oZWFkZXJzLGY9RihbZSwidWwtY2FyZC0tdGV4dCIsbHRdKSxkPVB0KHIpLHA9ciYmci5vcGVuVGV4dFBsYWNlaG9sZGVyP3Iub3BlblRleHRQbGFjZWhvbGRlcjpudWxsO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsbFsidXNlcmxlYXAtcGxhdGZvcm0iXSkpKX0sSSgiZm9ybSIse2lkOiJ0ZXh0LWZvcm0iLGNsYXNzTmFtZTpmLG9uc3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiB6dCh0LG8pfSxrZXk6aX0sTnQoZCxuKSxkLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC10ZXh0In0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2NvbnRhaW5lciJ9LEkoInRleHRhcmVhIix7ImRhdGEtZ3JhbW0iOiJmYWxzZSIsbWF4bGVuZ3RoOiI1MDAwIixjbGFzc05hbWU6RihkdChpdCxzKSksbmFtZToidGV4dCIscGxhY2Vob2xkZXI6cCwiYXJpYS1wbGFjZWhvbGRlciI6cCwiYXJpYS1tdWx0aWxpbmUiOiJ0cnVlIix2YWx1ZTp0Lm9wZW5UZXh0LnZhbHVlLG9uY3JlYXRlOkJ0KCksb25pbnB1dDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxhLm9wZW5UZXh0Lm9uVGV4dENoYW5nZSh0LnRhcmdldC52YWx1ZSl9LG9uZm9jdXM6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9dX0sb25ibHVyOmZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0sdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjpzdCxjb250ZW50ZWRpdGFibGU6InRydWUiLHJvbGU6InRleHRib3giLCJhcmlhLWxhYmVsIjpwfSkpLEkoImJ1dHRvbiIse2lkOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjp1fSxvbmNsaWNrOmZ1bmN0aW9uKGUpeyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5mb3Jtc1sidGV4dC1mb3JtIl0pJiYoenQodC5vcGVuVGV4dC52YWx1ZS50cmltKCksbyksdC5vcGVuVGV4dC52YWx1ZT0iIil9LHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sRHQocikpKSkpfX0sdGV4dHVybHByb21wdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjLHMsdT1GKFtlLCJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQiLGx0XSksbD10LmFwcCxmPWwuYm9yZGVyLGQ9bC5oZWFkZXJzO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsZFsidXNlcmxlYXAtcGxhdGZvcm0iXSkpKX0sSSgiZGl2Iix7Y2xhc3NOYW1lOnUsa2V5Oml9LEkoInAiLHtpZDpzdCxjbGFzc05hbWU6InVsLXF1ZXN0aW9uIn0sbiksKGM9ciYmci5yaWNoVGV4dEJvZHkscz1yJiZyLmJvZHksYz9JKCJkaXYiLHtpZDoidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIiLGNsYXNzTmFtZToidWwtcmljaC10ZXh0LWJvZHkiLGlubmVySFRNTDpjfSk6SSgiZGl2Iix7aWQ6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIixjbGFzc05hbWU6InVsLXJpY2gtdGV4dC1ib2R5In0sKHM/cy5zcGxpdCgvXG5ccypcbi9nKTpbXSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gSSgicCIsbnVsbCx0KX0pKSkpLEkoImEiLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gdWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpmLCJtYXJnaW4tcmlnaHQiOiJhdXRvIiwidGV4dC1vdmVyZmxvdyI6ImVsbGlwc2lzIix0ZXh0RGVjb3JhdGlvbjoibm9uZSIsb3ZlcmZsb3c6InZpc2libGUifSxvbmNsaWNrOmZ1bmN0aW9uKHQpe28oKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxvKCl9LGhyZWY6ciYmci5idXR0b25VcmwsdGFyZ2V0OiJfYmxhbmsiLHJvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpLCJhcmlhLWRlc2NyaWJlZGJ5IjoidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIifSxyJiZyLmJ1dHRvblRleHQ/ci5idXR0b25UZXh0OiJOZXh0IikpKX19LG11bHRpcGxlY2hvaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5ib3JkZXIsbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT0odC5sb2NhbGUsdC5vcHRpb25zKSxjPXZvaWQgMD09PWE/W106YSxzPXQubmV4dCx1PXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgbD10LmFwcCxmPWwudXNlTW9iaWxlU3R5bGluZyxkPWwuaGVhZGVycyxwPUYoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pO2Z1bmN0aW9uIGgodCxlKXtzKHt2YWx1ZTpyKCkoe30sdCxlKX0pfXZhciB2PWMubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsLGk9dC52YWx1ZTtyZXR1cm4gSShWdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLHRhYmluZGV4OmUrMSxvblNlbGVjdDpoLmJpbmQobnVsbCxyLGkpLGlkOnIsaXNSYWRpbzohMCx1c2VNb2JpbGVTdHlsaW5nOmZ9KX0pKSxnPVB0KGkpO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsZFsidXNlcmxlYXAtcGxhdGZvcm0iXSkpKX0sSSgiZGl2Iix7Y2xhc3NOYW1lOnAsa2V5OnV9LE50KGcsbyksZyxJKCJkaXYiLHtjbGFzc05hbWU6RihkdChvdCxmKSkscm9sZToicmFkaW9ncm91cCIsImFyaWEtbGFiZWxlZGJ5IjpzdH0sdikpKX19LG11bHRpcGxlc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5ib3JkZXIscj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT0odC5sb2NhbGUsdC5vcHRpb25zKSxhPXZvaWQgMD09PWk/W106aSxjPSh0LmlzTGFzdCx0Lm5leHQpLHM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciB1PUYoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pLGw9dC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsZj1pLm11bHRpcGxlc2VsZWN0LGQ9Zi5pbml0LHA9Zi5yZXNldCxoPWYudXBkYXRlU2VsZWN0ZWQsdj10LmFwcCxnPXYudXNlTW9iaWxlU3R5bGluZyx5PXYuaGVhZGVycyxtPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKHQsZSl7ZSh7dmFsdWU6dH0pfSh0Lm11bHRpcGxlc2VsZWN0LnNlbGVjdGVkT3B0aW9ucyxjKSxwKCl9LGI9YS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pZCxvPXQubGFiZWw7dC52YWx1ZTtyZXR1cm4gSShWdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLG9uU2VsZWN0Omgsc2VsZWN0ZWQ6bFtyXSxpZDpyLGlzUmFkaW86ITEsdXNlTW9iaWxlU3R5bGluZzpnfSl9KSkseD1QdChvKTtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LHlbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEkoImZvcm0iLHtpZDoidGV4dC1mb3JtIixjbGFzc05hbWU6dSxvbnN1Ym1pdDptLG9uY3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlPXt9LGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0LmlkXT0hMX0pKSx2b2lkIGQoZSk7dmFyIGV9LGtleTpzfSxOdCh4LHIpLHgsSSgiZGl2Iix7Y2xhc3NOYW1lOkYoZHQob3QsZykpLHJvbGU6InJhZGlvZ3JvdXAifSxiKSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dCJ9LEkoImJ1dHRvbiIse2lkOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpufSxvbmNsaWNrOm0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxEdChvKSkpKSl9fSxsaWtlcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5ib3JkZXIsbj10LmNsYXNzTmFtZSxyPSh0LmxvY2FsZSx0LmxhYmVscyksbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT10Lm5leHQsYz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9dC5hcHAsbD11LnVzZU1vYmlsZVN0eWxpbmcsZj11LmRlY2suaW5kZXgsZD11LmhlYWRlcnMscD1GKFtuLCJ1bC1jYXJkLS1saWtlcnQiLGx0XSksaD1yJiZyLmxlZnQsdj1yJiZyLnJpZ2h0LGc9XygpKEFycmF5KDUpKS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bisxLG89Im9wdGlvbi0iLmNvbmNhdChyKSxpPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0yLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPWV9LGM9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PSJhdXRvIix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHM9e29uY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShyKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8YShyKX0odCl9fTtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ocy5vbnRvdWNoc3RhcnQ9aSxzLm9udG91Y2hjYW5jZWw9YyxzLm9udG91Y2htb3ZlPWMscy5vbnRvdWNoZW5kPWMpOihzLm9ubW91c2Vkb3duPWkscy5vbm1vdXNlbGVhdmU9YyksSSgiZGl2IixNKCkoe2lkOm8sY2xhc3NOYW1lOkYoW10uY29uY2F0KF8oKShkdChYLGwpKSxfKCkoZHQoIiIuY29uY2F0KFgsIi0iKS5jb25jYXQociksbCkpKSl9LHMseyJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiICIpLmNvbmNhdChvKSxyb2xlOiJ0ZXh0Ym94Iix0YWJpbmRleDowLCJhcmlhLWRlc2NyaWJlZGJ5Ijp1dH0pLHIpfSkpLHk9UHQoaSk7cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCxkWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxJKCJmb3JtIix7Y2xhc3NOYW1lOnAsa2V5OmN9LE50KHksbykseSxmJTI9PTAmJkkoImRpdiIsbnVsbCksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX251bWJlcnMifSxnKSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIn0sSSgic3BhbiIsbnVsbCxoKSxJKCJzcGFuIixudWxsLHYpKSkpfX0sdGhhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZW5kQ2FyZCxuPXQuYm9yZGVyLHI9dC5jbGFzc05hbWUsbz0odC5sb2NhbGUsdC5xdWVzdGlvbklkKTtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgYT1GKFtyLCJ1bC1jYXJkLS10aGFua3MiLGx0XSksYz1lJiZlLnN1YmhlYWRlcj9JKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXB0aW9uIn0sZS5zdWJoZWFkZXIpOm51bGwscz1lJiZlLmhlYWRsaW5lP2UuaGVhZGxpbmU6bnVsbDtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LHQuYXBwLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEkoImRpdiIse2NsYXNzTmFtZTphLGtleTpvfSxJKCJkaXYiLHtvbmNyZWF0ZTpmdW5jdGlvbigpe3JldHVybiBpLmFwcC5jb21wbGV0ZSgpfX0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS10aGFua3MtY29udGVudCJ9LEkoImRpdiIse2NsYXNzTmFtZToidWwtdGhhbmtzLWNoZWNrIn0sSSgic3ZnIix7d2lkdGg6IjgxIixoZWlnaHQ6Ijk5Iix2aWV3Qm94OiIwIDAgODEgOTkiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtbGFiZWxsZWRieSI6InRpdGxlIn0sSSgicGF0aCIseyJmaWxsLXJ1bGUiOiJldmVub2RkIiwiY2xpcC1ydWxlIjoiZXZlbm9kZCIsZDoiTTQwLjUgNzdDNjAuOTM0NSA3NyA3Ny41IDYwLjQzNDUgNzcuNSA0MEM3Ny41IDE5LjU2NTUgNjAuOTM0NSAzIDQwLjUgM0MyMC4wNjU1IDMgMy41IDE5LjU2NTUgMy41IDQwQzMuNSA2MC40MzQ1IDIwLjA2NTUgNzcgNDAuNSA3N1pNODAuNSA0MEM4MC41IDYyLjA5MTQgNjIuNTkxNCA4MCA0MC41IDgwQzE4LjQwODYgODAgMC41IDYyLjA5MTQgMC41IDQwQzAuNSAxNy45MDg2IDE4LjQwODYgMCA0MC41IDBDNjIuNTkxNCAwIDgwLjUgMTcuOTA4NiA4MC41IDQwWiIsZmlsbDpufSksSSgicGF0aCIseyJmaWxsLXJ1bGUiOiJldmVub2RkIiwiY2xpcC1ydWxlIjoiZXZlbm9kZCIsZDoiTTU1LjAyNSAyMi45MDQ2QzU1LjYyOTkgMjMuNDcwNSA1NS42NjE2IDI0LjQxOTggNTUuMDk1NiAyNS4wMjQ3QzU0Ljg3MjQgMjUuMjYzNCA1NC42MTA5IDI1LjUyODUgNTQuMzE1NyAyNS44Mjc3QzUyLjI1NDcgMjcuOTE2OCA0OC41NTQ5IDMxLjY2NyA0NC44MTM1IDM5LjY2NThDNDMuMjgxOCA0Mi45NDA2IDQyLjA4NjQgNDUuODM4NiA0MS4wODIzIDQ4LjI3MjlDNDAuNjUzOSA0OS4zMTE2IDQwLjI2MDMgNTAuMjY1OSAzOS44OTAyIDUxLjEyOUMzOS4yODcgNTIuNTM1OSAzOC43MjQ4IDUzLjc1MDggMzguMTc0NCA1NC42MjVDMzcuODk5NyA1NS4wNjEzIDM3LjU4MDYgNTUuNDkwNSAzNy4yMDE3IDU1LjgyNDVDMzYuODIwMSA1Ni4xNjA3IDM2LjI2MTMgNTYuNSAzNS41NDU3IDU2LjVDMzQuNjc0MiA1Ni41IDM0LjA4OTIgNTUuOTY5MiAzMy43Nzc0IDU1LjYwODNDMzMuNDUwMiA1NS4yMjk2IDMzLjE3NTIgNTQuNzUxMSAzMi45Mzk2IDU0LjMwMUMzMi43MzA1IDUzLjkwMTMgMzIuNTA4OCA1My40MzY3IDMyLjI3OTcgNTIuOTU2NUMzMi4yNDI5IDUyLjg3OTQgMzIuMjA1OSA1Mi44MDE5IDMyLjE2ODggNTIuNzI0M0MzMS44OTQyIDUyLjE0OTkgMzEuNTk1OSA1MS41MzQgMzEuMjUzNyA1MC44ODY4QzI5Ljg4ODYgNDguMzA1IDI3Ljg1MzkgNDUuMjg3OCAyNC4yMzQzIDQzLjEzODJDMjMuNTIyIDQyLjcxNTIgMjMuMjg3NSA0MS43OTQ5IDIzLjcxMDUgNDEuMDgyNkMyNC4xMzM1IDQwLjM3MDMgMjUuMDUzOSA0MC4xMzU4IDI1Ljc2NjIgNDAuNTU4OEMzMC4wNTU2IDQzLjEwNjIgMzIuNDE0OSA0Ni42NjQ3IDMzLjkwNTggNDkuNDg0NUMzNC4yNzc2IDUwLjE4NzYgMzQuNTk3MyA1MC44NDg3IDM0Ljg3NTMgNTEuNDMwMkMzNC45MTQ3IDUxLjUxMjQgMzQuOTUyOSA1MS41OTI2IDM0Ljk5MDIgNTEuNjcwN0MzNS4yMjIyIDUyLjE1NjcgMzUuNDE2NCA1Mi41NjM3IDM1LjU5NzggNTIuOTEwMkMzNS42MTUxIDUyLjk0MzQgMzUuNjMyMSA1Mi45NzU0IDM1LjY0ODUgNTMuMDA2MUMzNi4wNTY1IDUyLjM1MzEgMzYuNTM0MSA1MS4zNDM0IDM3LjEzMyA0OS45NDY4QzM3LjQ3ODEgNDkuMTQxOCAzNy44NTcyIDQ4LjIyMjkgMzguMjc2MSA0Ny4yMDc0QzM5LjI4ODYgNDQuNzUzMiA0MC41MzM5IDQxLjczNDcgNDIuMDk2MSAzOC4zOTQ4QzQ2LjA1OTEgMjkuOTIyMSA1MC4wNjQxIDI1Ljg2NDggNTIuMTUzNSAyMy43NDgyQzUyLjQ0MjMgMjMuNDU1NiA1Mi42OTQ0IDIzLjIwMDIgNTIuOTA0OCAyMi45NzUzQzUzLjQ3MDggMjIuMzcwMyA1NC40MiAyMi4zMzg3IDU1LjAyNSAyMi45MDQ2Wk0zNS4xOTk0IDUzLjU4OTJDMzUuMTk5NCA1My41ODkyIDM1LjIgNTMuNTg4OCAzNS4yMDEyIDUzLjU4NzlDMzUuMiA1My41ODg5IDM1LjE5OTQgNTMuNTg5MyAzNS4xOTk0IDUzLjU4OTJaTTM2LjA2NjYgNTMuNjY4MkMzNi4wNzMyIDUzLjY3NCAzNi4wNzY1IDUzLjY3NzUgMzYuMDc2NSA1My42Nzc3QzM2LjA3NjUgNTMuNjc4IDM2LjA3MzIgNTMuNjc1MSAzNi4wNjY2IDUzLjY2ODJaIixmaWxsOm59KSxJKCJwYXRoIix7ZDoiTTY5LjUgOTdDNjkuNSA5OC4xMDQ2IDU2LjI5MjQgOTkgNDAgOTlDMjMuNzA3NiA5OSAxMC41IDk4LjEwNDYgMTAuNSA5N0MxMC41IDk1Ljg5NTQgMjMuNzA3NiA5NSA0MCA5NUM1Ni4yOTI0IDk1IDY5LjUgOTUuODk1NCA2OS41IDk3WiIsZmlsbDoiYmxhY2siLCJmaWxsLW9wYWNpdHkiOiIwLjIifSkpKSxJKCJwIix7Y2xhc3NOYW1lOnN0LGlkOnN0fSxzKSxjKSkpKX19LG5wczpmdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQuY2xhc3NOYW1lLHI9KHQubG9jYWxlLHQubGFiZWxzKSxvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPXQubmV4dCxjPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT10LmFwcCxsPXUudXNlTW9iaWxlU3R5bGluZyxmPXUuZGVjay5pbmRleCxkPXUuaGVhZGVycyxwPUYoW24sInVsLWNhcmQtLW5wcyIsbHRdKSxoPXImJnIubGVmdCx2PXImJnIucmlnaHQsZz1fKCkoQXJyYXkoMTEpKS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bixvPSJvcHRpb24tIi5jb25jYXQociksaT1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9Mix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1lfSxjPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0iYXV0byIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSxzPXtvbmNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGEocil9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGEocil9KHQpfX07cmV0dXJuIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KHMub250b3VjaHN0YXJ0PWkscy5vbnRvdWNoY2FuY2VsPWMscy5vbnRvdWNobW92ZT1jLHMub250b3VjaGVuZD1jKToocy5vbm1vdXNlZG93bj1pLHMub25tb3VzZWxlYXZlPWMpLEkoImRpdiIsTSgpKHtjbGFzc05hbWU6RihbXS5jb25jYXQoXygpKGR0KFEsbCkpLF8oKShkdCgiIi5jb25jYXQoUSwiLSIpLmNvbmNhdChyKSxsKSkpKX0scyx7ImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgIikuY29uY2F0KG8pLHJvbGU6InJhZGlvIix0YWJpbmRleDowLGlkOm99KSxyKX0pKSx5PVB0KGkpO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsZFsidXNlcmxlYXAtcGxhdGZvcm0iXSkpKX0sSSgiZm9ybSIse2NsYXNzTmFtZTpwLGtleTpjfSxOdCh5LG8pLHksZiUyPT0wJiZJKCJkaXYiLG51bGwpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19udW1iZXJzIn0sZyksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1ucHNfX2xhYmVscyJ9LEkoInNwYW4iLG51bGwsaCksSSgic3BhbiIsbnVsbCx2KSkpKX19LHZpZGVvdm9pY2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT10Lm5leHQsYT10LnF1ZXN0aW9uSWQsYz10LnVwZGF0ZUhlaWdodDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT1GKFtlLFldKSxsPSJ1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXIiLGY9InVsLWNhcmQtdmlkZW9fX25leHRfYnV0dG9uIixkPSJ1bC12aWRlby1pbnRlcnZpZXctZm9ybSIscD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsaD0idWwtcmVjb3JkZXItcGxheWVyLWNvbnRhaW5lciIsdj1vJiZvLnZpZGVvVXJsLGc9dC5hcHAseT1nLnN1cnZleUlkLG09Zy5yZXNwb25zZUdyb3VwVWlkLGI9Zy5hcGlVUkwseD1nLnVzZXJJZCx3PWcuYm9yZGVyLEU9Zy5lbnZJZCxDPWcuaGVhZGVycztpZih0LmNhcmREYXRhfHwodC5jYXJkRGF0YT17fSksdC5jYXJkRGF0YS51cGxvYWRJZD12b2lkIDAsdC5jYXJkRGF0YS5tZWRpYVJlY29yZGluZ1VpZD12b2lkIDAsdC5jYXJkRGF0YS5idXR0b25UZXh0PUR0KG8pLHQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQ9RnQobyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCkpe2plKGwsdix7c3VydmV5SWQ6eSxyZXNwb25zZUdyb3VwVWlkOm0scXVlc3Rpb25JZDphLHZpc2l0b3JJZDp4fSxvLm1lZGlhVHlwZT09PVNlLk1FRElBX1RZUEVfQVVESU8pO3ZhciBqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2ouaW5uZXJUZXh0PXQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQsai5jbGFzc0xpc3QuYWRkKEFlKX12YXIgaz1mdW5jdGlvbihlLG4pe3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2U9PT1TZS5VUExPQURfU1RBUlRFRD8odC5jYXJkRGF0YS51cGxvYWRJZD1uW1NlLlVQTE9BRF9JRF0sdC5jYXJkRGF0YS5tZWRpYVJlY29yZGluZ1VpZD1uW1NlLk1FRElBX1JFQ09SRElOR19VSURdLHIuaW5uZXJUZXh0PXQuY2FyZERhdGEuYnV0dG9uVGV4dCxyLmNsYXNzTGlzdC5yZW1vdmUoQWUpLE9iamVjdC5hc3NpZ24oci5zdHlsZSx7YmFja2dyb3VuZENvbG9yOnd9KSk6ZT09PVNlLkRFTEVURSYmKHQuY2FyZERhdGEudXBsb2FkSWQ9bnVsbCx0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkPW51bGwsci5jbGFzc0xpc3QuYWRkKEFlKSxyLmlubmVyVGV4dD10LmNhcmREYXRhLnNraXBCdXR0b25UZXh0LE9iamVjdC5hc3NpZ24oci5zdHlsZSx7YmFja2dyb3VuZENvbG9yOiIifSkpfSxTPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7cmV0dXJuIG4uY2xhc3NOYW1lPSIiLmNvbmNhdCgidWwtdmlkZW8tYnRuIiwiICIpLmNvbmNhdCh0KSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksZnVuY3Rpb24oKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocCksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKTt0PyhlLmNsYXNzTGlzdC5yZW1vdmUodGUpLGUuY2xhc3NMaXN0LmFkZChlZSksbi5jbGFzc0xpc3QuYWRkKHRlKSxuLmNsYXNzTGlzdC5yZW1vdmUoZWUpKTooQ2UobCksZS5jbGFzc0xpc3QuYWRkKHRlKSxlLmNsYXNzTGlzdC5yZW1vdmUoZWUpLG4uY2xhc3NMaXN0LnJlbW92ZSh0ZSksbi5jbGFzc0xpc3QuYWRkKGVlKSl9KGUpfSkpLG59LE89ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlkPSJ1bC1xdWVzdGlvbi1wbGF5ZXItY29udGFpbmVyIix0LmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyICIuY29uY2F0KGVlKSx0LmFwcGVuZENoaWxkKCgodCxlLG4scj0hMSxvPSJodHRwczovL2FwaS5zcHJpZy5jb20iKT0+e2NvbnN0IGk9dCthZSxhPWJlKGkpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWN1cml0eXBvbGljeXZpb2xhdGlvbiIsKHQ9PntsZShuZXcgRXJyb3IoYFZvaWNlICYgVmlkZW8gZmVhdHVyZSB2aW9sYXRlcyAke3QudmlvbGF0ZWREaXJlY3RpdmV9IHdlYiBwYWdlIENTUCBwb2xpY2llcyBmb3IgdGhlIHF1ZXN0aW9uIHBsYXllci5gKSwicGxheWVyRGV2aWNlRXJyb3IiLG8se30pfSkpLGZlKGEsaWUsKCgpPT57ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUXQoaSkpLnJlbW92ZSgpLHhlKGksYSk7Y29uc3QgdD13aW5kb3cudmlkZW9qcyhpLHtwbGF5c2lubGluZTohMCxwbGF5YmFja1JhdGVzOlsuNSwxLDEuNSwyXX0pLG89cGUodCxbIlBsYXliYWNrUmF0ZU1lbnVCdXR0b24iLCJQbGF5VG9nZ2xlIiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxjPW8uY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7Yy5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJmMuaGlkZSgpLGdlKHQsbyxlLG4scil9KSksYX0pKGwse3NyYzp2LHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9LHZvaWQgMCxvLm1lZGlhVHlwZT09PVNlLk1FRElBX1RZUEVfQVVESU8sYikpO3ZhciBlPVMoInVsLXJlY29yZC1yZXNwb25zZS1idG4iLCExKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0fSxBPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcmVjb3JkZXItcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdCh0ZSk7dmFyIGU9UygidWwtYmFjay1xdWVzdGlvbi1idG4iLCEwKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0LmFwcGVuZENoaWxkKCgodCxlPXt9LG49Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIscixvLGksYT0hMSk9Pntjb25zdCBjPXQrY2Uscz1iZShjKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57Y29uc3QgZT13aW5kb3cudmlkZW9qcyhjKTtsZShuZXcgRXJyb3IoYFZvaWNlICYgVmlkZW8gZmVhdHVyZSB2aW9sYXRlcyAke3QudmlvbGF0ZWREaXJlY3RpdmV9IHdlYiBwYWdlIENTUCBwb2xpY2llcyBmb3IgdGhlIHJlY29yZGVyIHBsYXllci5gKSwicmVjb3JkZXJEZXZpY2VFcnJvciIsbixpLGUucGF5bG9hZC52aXNpdG9ySWQsZS5wYXlsb2FkLmVudklkKX0pKSxmZShzLGllLmNvbmNhdChvZSksKCgpPT57eGUoYyxzKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChRdChjKSkucmVtb3ZlKCkseWUocyxjLGUsbixyLG8saSxhKX0pKSxzfSkobCx7c3VydmV5SWQ6eSxyZXNwb25zZUdyb3VwVWlkOm0scXVlc3Rpb25JZDphLHZpc2l0b3JJZDp4LGVudklkOkV9LGIsaywhMSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9JZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6SWUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHt9LEMseyJ4LXVsLXZpZGVvLXJlY29yZGVyLW9yaWdpbiI6InNkayJ9KSxvLm1lZGlhVHlwZT09PVNlLk1FRElBX1RZUEVfQVVESU8pKSx0fSxNPVB0KG8pO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsQ1sidXNlcmxlYXAtcGxhdGZvcm0iXSkpKSxzdHlsZTp7bWFyZ2luVG9wOiJ1bnNldCJ9fSxJKCJkaXYiLHtjbGFzc05hbWU6bHQsa2V5OmF9LEkoImZvcm0iLHtpZDpkLGNsYXNzTmFtZTp1LG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFJlc2l6ZU9ic2VydmVyKChmdW5jdGlvbih0KXtyZXR1cm4gYygpfSkpLGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KFkpKTt0Lm9ic2VydmUoZSl9LG9uc3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiBNZSh0LGkpfX0sTnQoTSxuKSxNLEkoImRpdiIse2lkOiJ1bC1jYXJkLXZvaWNlX192aWRlbyJ9LEkoImRpdiIse2lkOmwsb25jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChPKCkpLHQuYXBwZW5kQ2hpbGQoQSgpKSx0fX0pLEkoImJ1dHRvbiIse2lkOmYsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiAiLmNvbmNhdChBZSksb25jbGljazpmdW5jdGlvbihlKXtpZihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxFZShsKSxkb2N1bWVudC5mb3Jtc1tkXSl7dC5jYXJkRGF0YS51cGxvYWRJZD9NZSh7dmFsdWU6e21lZGlhUmVjb3JkaW5nVWlkOnQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWR9fSxpKTpNZSh7ZGVsZXRlZEF0OkRhdGUubm93KCl9LGkpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpLmNsYXNzTGlzdC5hZGQodGUpLG4uY2xhc3NMaXN0LnJlbW92ZSh0ZSl9fSxyb2xlOiJidXR0b24ifSxGdChvKSkpKSkpfX19LGxvY2FsZToiZW4iLGFwaVVSTDoiaHR0cHM6Ly9hcGkudXNlcmxlYXAuY29tIixzaG93U3VydmV5QnJhbmQ6ITAsbWFya2V0aW5nVXJsOiJodHRwczovL3VzZXJsZWFwLmNvbSIsc2x1Z05hbWU6bnVsbCxyZXNwb25zZUdyb3VwVWlkOm51bGwsaGVhZGVyczp7fSxpc1ByZXZpZXc6ITEsYW5zd2VyczpbXSxjdXN0b21NZXRhZGF0YTp7fSx2aWV3ZWRDYXJkQ291bnQ6MH0sS2U9e2luaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdXJ2ZXlJZCxuPXQuZnJhbWUscj10LmNhcmRzLG89dC5lbnZJZCxpPXQudXNlcklkLGE9dC5tZXRhLGM9dC5ib3JkZXIscz10LmZvbnRGYW1pbHksdT10LmZvbnRGYW1pbHlVUkwsbD10Lm1vZGUsZj10LmNvbnRleHQsZD10LmxvY2FsZSxwPXQuYXBpVVJMLGg9dC5zaG93U3VydmV5QnJhbmQsdj10Lm1hcmtldGluZ1VybCxnPXQuc2x1Z05hbWUseT10LnJlc3BvbnNlR3JvdXBVaWQsbT10LmhlYWRlcnMsYj10LmVuZENhcmQseD10LmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljayx3PXQuaXNQcmV2aWV3LEU9dC5hbnN3ZXJzLEM9dC5jdXN0b21NZXRhZGF0YSxqPXQuZXhwZXJpbWVudEZsYWdzLGs9dC51c2VNb2JpbGVTdHlsaW5nLFM9dC5ldmVudEVtaXR0ZXI7cmV0dXJuIGZ1bmN0aW9uKHQsTyl7cmV0dXJuIEdlKHt9LE8uYWRkRGVjayh7ZGVjazpyLGhhc0VuZENhcmQ6Yn0pLHtzdXJ2ZXlJZDplLHJ1bm5pbmc6ITAsZnJhbWU6bixlbnZJZDpvLHVzZXJJZDppLG1ldGE6YSxib3JkZXI6Yyxmb250RmFtaWx5OnMsZm9udEZhbWlseVVSTDp1LHRpbWVvdXQ6MSxtb2RlOmwsY29udGV4dDpmLGxvY2FsZTpkLGFwaVVSTDpwLHNob3dTdXJ2ZXlCcmFuZDpoLG1hcmtldGluZ1VybDp2LHNsdWdOYW1lOmcscmVzcG9uc2VHcm91cFVpZDp5LGhlYWRlcnM6bSxlbmRDYXJkOmIsY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrOngsaXNQcmV2aWV3OncsYW5zd2VyczpFLGN1c3RvbU1ldGFkYXRhOkMsZXhwZXJpbWVudEZsYWdzOmosdXNlTW9iaWxlU3R5bGluZzprLGV2ZW50RW1pdHRlcjpTLHZpZXdlZENhcmRDb3VudDowfSl9fSxhZGREZWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGVjayxuPXQuaGFzRW5kQ2FyZDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBHZSh7fSxlLHtDYXJkOnQuY2FyZHNbZS50eXBlXX0pfSkpO3JldHVybiBuJiZyLnB1c2goe0NhcmQ6dC5jYXJkcy50aGFua3N9KSx7ZGVjazp7aW5kZXg6MCxjYXJkczpyfX19fSxjb21wbGV0ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybntpbnRlcnZhbDpzZXRJbnRlcnZhbChlLmRlZHVjdCwxZTMpfX19LHNlZW46ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtZZSh0KXx8ZS50cmFja0hpc3Rvcnkoe2V2ZW50OiJzZWVuIixpc05ldzohMH0pfX0sY2xvc2U6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighWWUodCkpcmV0dXJuIGUudHJhY2tIaXN0b3J5KHtldmVudDoiY2xvc2VkIn0pfX0sc3VibWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXQucmVzcG9uc2Usbj10LnJlc3BvbnNlR3JvdXBVaWQscj10LmNvbXBsZXRlZEF0O3JldHVybiBmdW5jdGlvbigpe3ZhciB0PU4oKShMKCkubWFyaygoZnVuY3Rpb24gdChvKXt2YXIgaSxhO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYobiYmIVllKG8pKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjpyZXR1cm4gaT17cmVzcG9uc2VHcm91cFVpZDpuLG1ldGE6by5tZXRhLGN1c3RvbU1ldGFkYXRhOm8uY3VzdG9tTWV0YWRhdGEscmVzcG9uc2VzOltlXSxjb21wbGV0ZWRBdDpyfSx0Lm5leHQ9NSxIZSgiIi5jb25jYXQoby5hcGlVUkwsIi9zZGsvMS9lbnZpcm9ubWVudHMvIikuY29uY2F0KG8uZW52SWQsIi92aXNpdG9ycy8iKS5jb25jYXQoby51c2VySWQsIi9yZXNwb25zZXMvc3VibWl0Iikse2JvZHk6SlNPTi5zdHJpbmdpZnkoaSksaGVhZGVyczpvLmhlYWRlcnMsbWV0aG9kOiJQT1NUIn0pO2Nhc2UgNTppZihhPXQuc2VudCxkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKSxhLm9rKXt0Lm5leHQ9MTM7YnJlYWt9aWYoIWEucmVwb3J0RXJyb3Ipe3QubmV4dD0xMjticmVha31yZXR1cm4gY29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDI3KSBGYWlsZWQgdG8gc3VibWl0IHJlc3BvbnNlIixhLmVycm9yKSx0Lm5leHQ9MTIsWmUobywic3VibWl0UmVzcG9uc2UiLGEuZXJyb3IpO2Nhc2UgMTI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxkZWR1Y3Q6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50aW1lb3V0LTE7cmV0dXJuIGU8PTA/KGNsZWFySW50ZXJ2YWwodC5pbnRlcnZhbCksTHQuZW5hYmxlKCkse3J1bm5pbmc6ITEsaW50ZXJ2YWw6bnVsbCx0aW1lb3V0OmV9KTp7dGltZW91dDplfX19LG5leHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9RGF0ZS5ub3coKSxvPWUuZGVjayxpPW8uY2FyZHMsYT1vLmluZGV4LGM9aVthXSxzPWMubmFtZSx1PWMudHlwZSxsPWUucmVzcG9uc2VHcm91cFVpZCxmPSJvYmplY3QiPT09Z3QoKSh0LmRhdGEpP3QuZGF0YTp7dmFsdWU6dC5kYXRhfSxkPWYudmFsdWU7aVthXS52YWx1ZT1kLGYucXVlc3Rpb25JZD1zLGYuYW5zd2VyZWRBdD1yO3ZhciBwPXtyZXNwb25zZTpmLHJlc3BvbnNlR3JvdXBVaWQ6bCx0eXBlOnV9LGg9Im11bHRpcGxlY2hvaWNlIj09PXU/T2JqZWN0LnZhbHVlcyhkKS5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4hMSE9PXR9KSk6ZCx2PSJ2aWRlb3ZvaWNlIiE9PXV8fCFmLmRlbGV0ZWRBdDsibXVsdGlwbGVzZWxlY3QiPT09dSYmKGg9aVthXS5wcm9wcy5vcHRpb25zLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZFtlLmlkXSYmdC5wdXNoKGUudmFsdWUpLHR9KSxbXSkpO3ZhciBnPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF07aWYoZT49dC5sZW5ndGh8fGU8MClyZXR1cm4gbnVsbDtmb3IodmFyIGk9dFtlXSYmdFtlXS5wcm9wcyYmdFtlXS5wcm9wcy5yb3V0aW5nT3B0aW9uc3x8W10sYT1NYXRoLm1pbihlKzEsdC5sZW5ndGgtMSksYz1udWxsLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIHU9aVtzXSxsPXUuY29tcGFyYXRvcixmPXUudGFyZ2V0LGQ9dS52YWx1ZTtpZigiYW5zd2VyZWQiPT09bCYmbyl7Yz1wYXJzZUludChmLDEwKTticmVha31pZih5dFtsXSYmeXRbbF0obixkKSl7Yz1wYXJzZUludChmLDEwKTticmVha319cmV0dXJuIG51bGw9PT1jJiZlPT09dC5sZW5ndGgtMT9udWxsOi0xPT09Yz9yP3QubGVuZ3RoLTE6bnVsbDpudWxsPT09Yz9hOmN9KGksYSxoLCEhdC5lbmRDYXJkLHYpO2lmKG51bGw9PT1nKXJldHVybiBwLmNvbXBsZXRlZEF0PXIsbi5zdWJtaXQocCksdm9pZCB0LmNvbXBsZXRlU3VydmV5KCk7aVtnXS5DYXJkPT09ZS5jYXJkcy50aGFua3MmJihwLmNvbXBsZXRlZEF0PXIpO3ZhciB5PW4uc3VibWl0KHApO3JldHVybiBpW2ddLkNhcmQhPWUuY2FyZHMudGhhbmtzJiZ5LmZpbmFsbHkoKGZ1bmN0aW9uKCl7bi50cmFja0hpc3Rvcnkoe2V2ZW50OiJzZWVuIixpbmRleDpnfSl9KSkse3ZpZXdlZENhcmRDb3VudDplLnZpZXdlZENhcmRDb3VudCsxLGRlY2s6e2NhcmRzOmksaW5kZXg6Z319fX0sdHJhY2tIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZXZlbnQsbj10LmluZGV4LHI9dC5pc05ldyxvPXZvaWQgMCE9PXImJnI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KHIpe3ZhciBpLGEsYyxzLHUsbDtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCFZZShyKSl7dC5uZXh0PTI7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGk9ci5kZWNrLGE9aS5jYXJkcyxjPWkuaW5kZXgscz12b2lkIDAhPT1uP2Fbbl06YVtjXSx1PXtzaWQ6ci5zdXJ2ZXlJZCxxaWQ6cy5uYW1lLGFjdGlvbjplLHZpZDpyLnVzZXJJZCxlaWQ6ci5lbnZJZCxpc05ldzpvLHJlc3BvbnNlR3JvdXBVaWQ6ci5yZXNwb25zZUdyb3VwVWlkfSx0Lm5leHQ9NyxIZSgiIi5jb25jYXQoci5hcGlVUkwsIi9zZGsvMS92aXNpdG9ycy8iKS5jb25jYXQoci51c2VySWQsIi9zdXJ2ZXlzLyIpLmNvbmNhdChyLnN1cnZleUlkLCIvaGlzdG9yeSIpLHtib2R5OkpTT04uc3RyaW5naWZ5KHUpLGhlYWRlcnM6ci5oZWFkZXJzLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDc6aWYoKGw9dC5zZW50KS5vayl7dC5uZXh0PTEzO2JyZWFrfWlmKCFsLnJlcG9ydEVycm9yKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQyOCkgRmFpbGVkIHRvIHRyYWNrIHN1cnZleSBldmVudCIsbC5lcnJvciksdC5uZXh0PTEzLFplKHIsInRyYWNrSGlzdG9yeSIsbC5lcnJvcik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX19O2Z1bmN0aW9uIFhlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBRZSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9YZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6WGUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9dmFyIHRuPXtpbml0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUWUoe30sZSx7c2VsZWN0ZWRPcHRpb25zOnR9KX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBRZSh7fSx0LHtzZWxlY3RlZE9wdGlvbnM6e319KX19LHVwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihudWxsIT10KXt2YXIgbj1PYmplY3QuYXNzaWduKGUuc2VsZWN0ZWRPcHRpb25zKTtyZXR1cm4gblt0XT0hblt0XSxRZSh7fSxlLHtzZWxlY3RlZE9wdGlvbnM6bn0pfX19fTtmdW5jdGlvbiBlbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIG5uPXtvblRleHRDaGFuZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9lbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZW4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHt9LGUse3ZhbHVlOnR9KX19fSxybj0ic3VydmV5LmFwcGVhcmVkIixvbj0ic3VydmV5LmZhZGluZ091dCIsYW49InN1cnZleS53aWxsQ2xvc2UiLGNuPXtWRVJJRllfVklFV19WRVJTSU9OOiJ2ZXJpZnkudmlldy52ZXJzaW9uIn0sc249e1ZJRVdfVkVSU0lPTjoidmlldy52ZXJzaW9uIn0sdW49ImNsb3NlLmNsaWNrIixsbj0ic3VydmV5LmNvbXBsZXRlZCI7ZnVuY3Rpb24gZm4odCl7cmV0dXJuIndlYiIhPT10WyJ1c2VybGVhcC1wbGF0Zm9ybSJdfWZ1bmN0aW9uIGRuKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIgcG49e2luaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFtZSxuPXQuY2FyZHMscj10LnN1cnZleUlkLG89dC5lbnZJZCxpPXQudXNlcklkLGE9dC5tZXRhLGM9dC5ib3JkZXIscz10LmZvbnRGYW1pbHksdT10LmZvbnRGYW1pbHlVUkwsbD10LmNvbnRleHQsZj10LmxvY2FsZSxkPXQuYXBpVVJMLHA9dC5zaG93U3VydmV5QnJhbmQsaD10Lm1hcmtldGluZ1VybCx2PXQuc2x1Z05hbWUsZz10LnJlc3BvbnNlR3JvdXBVaWQseT10LmhlYWRlcnMsbT10LmVuZENhcmQsYj10LmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljayx4PXQuaXNQcmV2aWV3LHc9dC5hbnN3ZXJzLEU9dC5jdXN0b21NZXRhZGF0YSxDPXQuZXhwZXJpbWVudEZsYWdzLGo9dC51c2VNb2JpbGVTdHlsaW5nLGs9dC5tb2JpbGVQbGF0Zm9ybSxTPXQuZXZlbnRFbWl0dGVyLE89dC52aWV3ZWRDYXJkQ291bnQ7cmV0dXJuIGZ1bmN0aW9uKHQsSSl7dmFyIEE9Zm4oeSk/d2luZG93LmRvY3VtZW50OndpbmRvdy5wYXJlbnQuZG9jdW1lbnQ7SS5hcHAuaW5pdCh7ZnJhbWU6QS5nZXRFbGVtZW50QnlJZChlKSxzdXJ2ZXlJZDpyLGNhcmRzOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSxjb250ZXh0OmwsbG9jYWxlOmYsYXBpVVJMOmQsc2hvd1N1cnZleUJyYW5kOnAsbWFya2V0aW5nVXJsOmgsc2x1Z05hbWU6dixyZXNwb25zZUdyb3VwVWlkOmcsaGVhZGVyczp5LGVuZENhcmQ6bSxjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6Yixpc1ByZXZpZXc6eCxhbnN3ZXJzOncsY3VzdG9tTWV0YWRhdGE6RSxleHBlcmltZW50RmxhZ3M6Qyx1c2VNb2JpbGVTdHlsaW5nOmosbW9iaWxlUGxhdGZvcm06ayxldmVudEVtaXR0ZXI6Uyx2aWV3ZWRDYXJkQ291bnQ6T30pLEkuYXBwLnNlZW4oKX19LHVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5hcHAscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KS5jbGFzc0xpc3Q7bi5ydW5uaW5nJiYhci5jb250YWlucygidWwtYXBwLS12aXNpYmxlIikmJihmbihuLmhlYWRlcnMpP3IuYWRkKCJ1bC1hcHAtLXZpc2libGUiKTooci5hZGQoInVsLWFwcC0tb3ZlcmxheSIpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpfSksMTAwKSksbi5ldmVudEVtaXR0ZXImJm4uZXZlbnRFbWl0dGVyLmVtaXQocm4pKSxmbihuLmhlYWRlcnMpfHxuLmZyYW1lLnNldEhlaWdodChmdW5jdGlvbih0KXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdCgkKSk7cmV0dXJuKGU/ZS5zY3JvbGxIZWlnaHQ6NjAwKSsoZSYmZS5wYXJlbnRFbGVtZW50P2UucGFyZW50RWxlbWVudC5jbGllbnRIZWlnaHQtZS5jbGllbnRIZWlnaHQ6MCl9KGRvY3VtZW50KSl9fSxmYWRlb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShMKCkubWFyaygoZnVuY3Rpb24gZShuKXt2YXIgcixvO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj1uLmFwcCxvPXIuZXZlbnRFbWl0dGVyLCFmbihyLmhlYWRlcnMpKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDpyZXR1cm4gby5lbWl0KG9uKSxlLmFicnVwdCgicmV0dXJuIixuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7bi5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwoZnVuY3Rpb24odCl7Im9wYWNpdHkiPT09dC5wcm9wZXJ0eU5hbWUmJmUoKX0pKSxuLmNsYXNzTGlzdC5yZW1vdmUoInVsLWFwcC0tdmlzaWJsZSIpfSkpKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluaXRpYXRvcjtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5hcHAscj1uLmZyYW1lLG89bi5ldmVudEVtaXR0ZXI7WyJpb3MiLCJhbmRyb2lkIl0uaW5jbHVkZXMobi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSYmby5lbWl0KGFuLHtpbml0aWF0b3I6ZX0pLGZuKG4uaGVhZGVycyl8fChvLmVtaXQoYW4se2luaXRpYXRvcjplfSksci5yZW1vdmUoKSl9fSxjbG9zZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmFwcC5jbG9zZSgpO2Nhc2UgNDpMdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOnVufSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlc3Ryb3k6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiBlKG4scil7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5mYWRlb3V0KHQpO2Nhc2UgMjpMdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOmxufSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fSxobj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9kbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZG4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHthcHA6S2UsbXVsdGlwbGVzZWxlY3Q6dG4sb3BlblRleHQ6bm59LHBuKSx2bj17YXBwOkplLG11bHRpcGxlc2VsZWN0OntzZWxlY3RlZE9wdGlvbnM6e319LG9wZW5UZXh0Ont2YWx1ZToiIn19O3ZhciBnbj13aW5kb3cuX19jZmcseW49Z24uZnJhbWUsbW49Z24uZW52SWQsYm49Z24uc3VydmV5SWQseG49Z24udXNlcklkLHduPWduLmNhcmRzLEVuPWduLm1vZGUsQ249Z24uYm9yZGVyLGpuPXZvaWQgMD09PUNuPyIjNjY2NGY3IjpDbixrbj1nbi5jb250ZXh0LFNuPWduLmxvY2FsZSxPbj1nbi5mb250RmFtaWx5LEluPWduLmZvbnRGYW1pbHlVUkwsQW49Z24uYXBpVVJMLE1uPWduLnNob3dTdXJ2ZXlCcmFuZCxUbj1nbi5tYXJrZXRpbmdVcmwsX249Z24uc2x1Z05hbWUsUm49Z24ucmVzcG9uc2VHcm91cFVpZCxMbj1nbi5oZWFkZXJzLFBuPWduLmVuZENhcmQsTm49Z24uY3VzdG9tU3R5bGVzLERuPWduLmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljayxGbj1nbi5pc1ByZXZpZXcsVW49Z24uYW5zd2VycyxCbj1nbi5jdXN0b21NZXRhZGF0YSx6bj1nbi5leHBlcmltZW50RmxhZ3MsVm49Z24udXNlTW9iaWxlU3R5bGluZyxIbj1nbi5tb2JpbGVQbGF0Zm9ybSxxbj1nbi5ldmVudEVtaXR0ZXIsV249ZG9jdW1lbnQuaGVhZCxHbj1xbnx8eW4uZXZlbnRFbWl0dGVyO0duJiZHbi5lbWl0KGNuLlZFUklGWV9WSUVXX1ZFUlNJT04scigpKHt9LHNuLlZJRVdfVkVSU0lPTiwiMi4xNC45IikpO3ZhciBabj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKFpuLnR5cGU9InRleHQvY3NzIixabi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrdCgpKSksV24uYXBwZW5kQ2hpbGQoWm4pLE5uJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnR5cGU9InRleHQvY3NzIixuLnRleHRDb250ZW50PWUsbi5pZD1aLHQuaGVhZC5hcHBlbmRDaGlsZChuKX0oZG9jdW1lbnQsTm4pLE9uJiZJbiYmcGFyZW50KXt2YXIgJG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOyRuLnJlbD0ic3R5bGVzaGVldCIsJG4uaHJlZj1JbixXbi5hcHBlbmRDaGlsZCgkbil9dmFyIFluPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvLGk9W10ubWFwLGE9ciYmci5jaGlsZHJlblswXXx8bnVsbCxjPWEmJmZ1bmN0aW9uIHQoZSl7cmV0dXJue25vZGVOYW1lOmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhdHRyaWJ1dGVzOnt9LGNoaWxkcmVuOmkuY2FsbChlLmNoaWxkTm9kZXMsKGZ1bmN0aW9uKGUpe3JldHVybiAzPT09ZS5ub2RlVHlwZT9lLm5vZGVWYWx1ZTp0KGUpfSkpfX0oYSkscz1bXSx1PSEwLGw9dih0KSxmPWZ1bmN0aW9uIHQoZSxuLHIpe2Zvcih2YXIgbyBpbiByKSJmdW5jdGlvbiI9PXR5cGVvZiByW29dP2Z1bmN0aW9uKHQsbyl7clt0XT1mdW5jdGlvbih0KXt2YXIgaT1vKHQpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHkoZSxsKSxyKSksaSYmaSE9PShuPXkoZSxsKSkmJiFpLnRoZW4mJmgobD1nKGUsdihuLGkpLGwpKSxpfX0obyxyW29dKTp0KGUuY29uY2F0KG8pLG5bb109dihuW29dKSxyW29dPXYocltvXSkpO3JldHVybiByfShbXSxsLHYoZSkpO3JldHVybiBoKCksZjtmdW5jdGlvbiBkKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P2QodChsLGYpKTpudWxsIT10P3Q6IiJ9ZnVuY3Rpb24gcCgpe289IW87dmFyIHQ9ZChuKTtmb3IociYmIW8mJihhPWoocixhLGMsYz10KSksdT0hMTtzLmxlbmd0aDspcy5wb3AoKSgpfWZ1bmN0aW9uIGgoKXtvfHwobz0hMCxzZXRUaW1lb3V0KHApKX1mdW5jdGlvbiB2KHQsZSl7dmFyIG49e307Zm9yKHZhciByIGluIHQpbltyXT10W3JdO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKHQsZSxuKXt2YXIgcj17fTtyZXR1cm4gdC5sZW5ndGg/KHJbdFswXV09dC5sZW5ndGg+MT9nKHQuc2xpY2UoMSksZSxuW3RbMF1dKTplLHYobixyKSk6ZX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDspZT1lW3RbbisrXV07cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD90LmtleTpudWxsfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQuY3VycmVudFRhcmdldC5ldmVudHNbdC50eXBlXSh0KX1mdW5jdGlvbiB4KHQsZSxuLHIsbyl7aWYoImtleSI9PT1lKTtlbHNlIGlmKCJzdHlsZSI9PT1lKWlmKCJzdHJpbmciPT10eXBlb2Ygbil0LnN0eWxlLmNzc1RleHQ9bjtlbHNlIGZvcih2YXIgaSBpbiJzdHJpbmciPT10eXBlb2YgciYmKHI9dC5zdHlsZS5jc3NUZXh0PSIiKSx2KHIsbikpe3ZhciBhPW51bGw9PW58fG51bGw9PW5baV0/IiI6bltpXTsiLSI9PT1pWzBdP3Quc3R5bGUuc2V0UHJvcGVydHkoaSxhKTp0LnN0eWxlW2ldPWF9ZWxzZSJvIj09PWVbMF0mJiJuIj09PWVbMV0/KGU9ZS5zbGljZSgyKSx0LmV2ZW50cz9yfHwocj10LmV2ZW50c1tlXSk6dC5ldmVudHM9e30sdC5ldmVudHNbZV09bixuP3J8fHQuYWRkRXZlbnRMaXN0ZW5lcihlLGIpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGIpKTplIGluIHQmJiJsaXN0IiE9PWUmJiJ0eXBlIiE9PWUmJiJkcmFnZ2FibGUiIT09ZSYmInNwZWxsY2hlY2siIT09ZSYmInRyYW5zbGF0ZSIhPT1lJiYhbz90W2VdPW51bGw9PW4/IiI6bjpudWxsIT1uJiYhMSE9PW4mJnQuc2V0QXR0cmlidXRlKGUsbiksbnVsbCE9biYmITEhPT1ufHx0LnJlbW92ZUF0dHJpYnV0ZShlKX1mdW5jdGlvbiB3KHQsZSl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHQ/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk6KGU9ZXx8InN2ZyI9PT10Lm5vZGVOYW1lKT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0Lm5vZGVOYW1lKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQubm9kZU5hbWUpLHI9dC5hdHRyaWJ1dGVzO2lmKHIpe3Iub25jcmVhdGUmJnMucHVzaCgoZnVuY3Rpb24oKXtyLm9uY3JlYXRlKG4pfSkpO2Zvcih2YXIgbz0wO288dC5jaGlsZHJlbi5sZW5ndGg7bysrKW4uYXBwZW5kQ2hpbGQodyh0LmNoaWxkcmVuW29dPWQodC5jaGlsZHJlbltvXSksZSkpO2Zvcih2YXIgaSBpbiByKXgobixpLHJbaV0sbnVsbCxlKX1yZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSl7dmFyIG49ZS5hdHRyaWJ1dGVzO2lmKG4pe2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKUUodC5jaGlsZE5vZGVzW3JdLGUuY2hpbGRyZW5bcl0pO24ub25kZXN0cm95JiZuLm9uZGVzdHJveSh0KX1yZXR1cm4gdH1mdW5jdGlvbiBDKHQsZSxuKXtmdW5jdGlvbiByKCl7dC5yZW1vdmVDaGlsZChFKGUsbikpfXZhciBvPW4uYXR0cmlidXRlcyYmbi5hdHRyaWJ1dGVzLm9ucmVtb3ZlO28/byhlLHIpOnIoKX1mdW5jdGlvbiBqKHQsZSxuLHIsbyl7aWYocj09PW4pO2Vsc2UgaWYobnVsbD09bnx8bi5ub2RlTmFtZSE9PXIubm9kZU5hbWUpe3ZhciBpPXcocixvKTt0Lmluc2VydEJlZm9yZShpLGUpLG51bGwhPW4mJkModCxlLG4pLGU9aX1lbHNlIGlmKG51bGw9PW4ubm9kZU5hbWUpZS5ub2RlVmFsdWU9cjtlbHNleyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIG8gaW4gdihlLG4pKW5bb10hPT0oInZhbHVlIj09PW98fCJjaGVja2VkIj09PW8/dFtvXTplW29dKSYmeCh0LG8sbltvXSxlW29dLHIpO3ZhciBpPXU/bi5vbmNyZWF0ZTpuLm9udXBkYXRlO2kmJnMucHVzaCgoZnVuY3Rpb24oKXtpKHQsZSl9KSl9KGUsbi5hdHRyaWJ1dGVzLHIuYXR0cmlidXRlcyxvPW98fCJzdmciPT09ci5ub2RlTmFtZSk7Zm9yKHZhciBhPXt9LGM9e30sbD1bXSxmPW4uY2hpbGRyZW4scD1yLmNoaWxkcmVuLGg9MDtoPGYubGVuZ3RoO2grKyl7bFtoXT1lLmNoaWxkTm9kZXNbaF0sbnVsbCE9KHk9bShmW2hdKSkmJihhW3ldPVtsW2hdLGZbaF1dKX1oPTA7Zm9yKHZhciBnPTA7ZzxwLmxlbmd0aDspe3ZhciB5PW0oZltoXSksYj1tKHBbZ109ZChwW2ddKSk7aWYoY1t5XSloKys7ZWxzZSBpZihudWxsPT1ifHxiIT09bShmW2grMV0pKWlmKG51bGw9PWJ8fHUpbnVsbD09eSYmKGooZSxsW2hdLGZbaF0scFtnXSxvKSxnKyspLGgrKztlbHNle3ZhciBFPWFbYl18fFtdO3k9PT1iPyhqKGUsRVswXSxFWzFdLHBbZ10sbyksaCsrKTpFWzBdP2ooZSxlLmluc2VydEJlZm9yZShFWzBdLGxbaF0pLEVbMV0scFtnXSxvKTpqKGUsbFtoXSxudWxsLHBbZ10sbyksY1tiXT1wW2ddLGcrK31lbHNlIG51bGw9PXkmJkMoZSxsW2hdLGZbaF0pLGgrK31mb3IoO2g8Zi5sZW5ndGg7KW51bGw9PW0oZltoXSkmJkMoZSxsW2hdLGZbaF0pLGgrKztmb3IodmFyIGggaW4gYSljW2hdfHxDKGUsYVtoXVswXSxhW2hdWzFdKX1yZXR1cm4gZX19KHZuLGhuLEN0LGZuKExuKT93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeW4pOmRvY3VtZW50LmJvZHkpO1luLmluaXQoe3N1cnZleUlkOmJuLGZyYW1lOnluLGVudklkOm1uLHVzZXJJZDp4bixjYXJkczp3bixtb2RlOkVuLG1ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dC5kaXJlY3RFbWJlZCxuPXQubW9kZSxyPXZvaWQgMD09PW4/bnVsbDpuLG89ZT93aW5kb3c6d2luZG93LnBhcmVudCxpPW8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybnttb2RlOnIsc3c6by5zY3JlZW4ud2lkdGgsc2g6by5zY3JlZW4uaGVpZ2h0LGN3OmkuY2xpZW50V2lkdGgsY2g6aS5jbGllbnRIZWlnaHQscDpvLmxvY2F0aW9uLmhyZWYsbDpvLm5hdmlnYXRvci5sYW5ndWFnZX19KHttb2RlOkVuLGRpcmVjdEVtYmVkOmZuKExuKX0pLGJvcmRlcjpqbixmb250RmFtaWx5Ok9uLGNvbnRleHQ6a24sbG9jYWxlOlNuLGFwaVVSTDpBbixzaG93U3VydmV5QnJhbmQ6TW4sbWFya2V0aW5nVXJsOlRuLHNsdWdOYW1lOl9uLHJlc3BvbnNlR3JvdXBVaWQ6Um4saGVhZGVyczpMbixlbmRDYXJkOlBuLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpEbixpc1ByZXZpZXc6Rm4sYW5zd2VyczpVbixjdXN0b21NZXRhZGF0YTpCbixleHBlcmltZW50RmxhZ3M6em4sdXNlTW9iaWxlU3R5bGluZzpWbixtb2JpbGVQbGF0Zm9ybTpIbixldmVudEVtaXR0ZXI6cW59KX0oKX0oKTs=';