{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDxzdHlsZT4KICAgICAgICAvKiBPcmlnaW5hbCBwb3J0YWwgaGVhZGVyIHN0eWxlcyAqLwogICAgICAgIC5wb3J0YWwtaGVhZGVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzZiNDZjMSwgIzU1M2M5YSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgcGFkZGluZzogMzBweCAyMHB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubG9nby1hcmVhIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLnBvcnRhbC10aXRsZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi41ZW07CiAgICAgICAgICAgIG1hcmdpbjogMjBweCAwOwogICAgICAgIH0KCiAgICAgICAgLnBvcnRhbC1zdWJ0aXRsZSB7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAvKiBOYXZpZ2F0aW9uIHN0eWxlcyAqLwogICAgICAgIC5uYXYtYmFyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgLm5hdi1jb250YWluZXIgewogICAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLm5hdi1saW5rcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5uYXYtbGluayB7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgY29sb3I6ICMzMzM7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLm5hdi1saW5rOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2U5ZDVmZjsKICAgICAgICAgICAgY29sb3I6ICM2YjQ2YzE7CiAgICAgICAgfQoKICAgICAgICAubmF2LWxpbmsuYWN0aXZlIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzZiNDZjMTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIH0KCiAgICAgICAgLm1haW4tY29udGVudCB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgICBtYXJnaW46IDIwcHggYXV0bzsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICB9CgogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgICAubmF2LWxpbmtzIHsKICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPCEtLSBGRkZGIEhlYWRlciAtLT4KICAgIDxkaXYgY2xhc3M9InBvcnRhbC1oZWFkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tYXJlYSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSIvYXBpL3BsYWNlaG9sZGVyLzEwMC8xMDAiIGFsdD0iRkZGRiBMb2dvIi8+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9InBvcnRhbC10aXRsZSI+RmluYW5jaWFsIEZpdG5lc3MgRm9ydHVuZXMgRm91bmRhdGlvbjwvaDE+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0icG9ydGFsLXN1YnRpdGxlIj5WaXNpb24gQm9hcmQgTWVtYmVyIFBvcnRhbDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIE5hdmlnYXRpb24gQmFyIC0tPgogICAgPG5hdiBjbGFzcz0ibmF2LWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmF2LWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1saW5rcyI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIvdmlzaW9uLWJvYXJkLXdvcmtzcGFjZSIgY2xhc3M9Im5hdi1saW5rIj5WaXNpb24gQm9hcmQ8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIvbGVhcm5pbmctaHViIiBjbGFzcz0ibmF2LWxpbmsiPkxlYXJuaW5nIEh1YjwvYT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9hY2hpZXZlbWVudHMiIGNsYXNzPSJuYXYtbGluayI+QWNoaWV2ZW1lbnRzPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Jlc291cmNlcyIgY2xhc3M9Im5hdi1saW5rIj5SZXNvdXJjZXM8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIvY29tbXVuaXR5IiBjbGFzcz0ibmF2LWxpbmsiPkNvbW11bml0eTwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L25hdj4KCiAgICA8IS0tIENvbnRlbnQgY29udGFpbmVyIC0tPgogICAgPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50Ij4KICAgICAgICA8IS0tIFBhZ2Ugc3BlY2lmaWMgY29udGVudCB3aWxsIGdvIGhlcmUgLS0+CiAgICA8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+CjwhLS0gQWRkaW5nIGFkdmFuY2VkIG1vYmlsZSBmZWF0dXJlcyBhbmQgYW5pbWF0aW9ucyAtLT4KPHN0eWxlPgogICAgLyogQWR2YW5jZWQgVG91Y2ggRmVlZGJhY2sgKi8KICAgIC50b3VjaC1yaXBwbGUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC50b3VjaC1yaXBwbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHdpZHRoOiA1cHg7CiAgICAgICAgaGVpZ2h0OiA1cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIGFuaW1hdGlvbjogcmlwcGxlIDFzIGVhc2Utb3V0OwogICAgfQoKICAgIEBrZXlmcmFtZXMgcmlwcGxlIHsKICAgICAgICAwJSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDQwKTsKICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICB9CgogICAgLyogRW5oYW5jZWQgTW9iaWxlIEdlc3R1cmVzICovCiAgICAuZ2VzdHVyZS1hcmVhIHsKICAgICAgICB0b3VjaC1hY3Rpb246IHBhbi15IHBpbmNoLXpvb207CiAgICB9CgogICAgLyogQm90dG9tIE5hdmlnYXRpb24gZm9yIE1vYmlsZSAqLwogICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmJvdHRvbS1uYXYgewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAtMnB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgLmJvdHRvbS1uYXYtaXRlbSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXB1cnBsZSk7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC5ib3R0b20tbmF2LWl0ZW0uYWN0aXZlIHsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWFjY2VudC1jb3JhbCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsKICAgICAgICB9CgogICAgICAgIC8qIEFkanVzdCBtYWluIGNvbnRlbnQgZm9yIGJvdHRvbSBuYXYgKi8KICAgICAgICAubWFpbi1jb250ZW50IHsKICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDcwcHg7CiAgICAgICAgfQogICAgfQoKICAgIC8qIFB1bGwgdG8gUmVmcmVzaCBBbmltYXRpb24gKi8KICAgIC5wdWxsLXJlZnJlc2ggewogICAgICAgIGhlaWdodDogNjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLXRvcDogLTYwcHg7CiAgICAgICAgdHJhbnNpdGlvbjogbWFyZ2luLXRvcCAwLjNzIGVhc2U7CiAgICB9CgogICAgLnB1bGwtcmVmcmVzaC5hY3RpdmUgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICB9CgogICAgLyogQWR2YW5jZWQgTG9hZGluZyBTdGF0ZXMgKi8KICAgIC5za2VsZXRvbi1sb2FkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNmMGYwZjAgMjUlLCAjZTBlMGUwIDUwJSwgI2YwZjBmMCA3NSUpOwogICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlOwogICAgICAgIGFuaW1hdGlvbjogc2tlbGV0b24tbG9hZGluZyAxLjVzIGluZmluaXRlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgc2tlbGV0b24tbG9hZGluZyB7CiAgICAgICAgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjAwJSAwOyB9CiAgICAgICAgMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfQogICAgfQoKICAgIC8qIEhhcHRpYyBGZWVkYmFjayBWaXN1YWwgKi8KICAgIC5oYXB0aWMtZmVlZGJhY2sgewogICAgICAgIGFuaW1hdGlvbjogaGFwdGljIDAuMTVzIGVhc2U7CiAgICB9CgogICAgQGtleWZyYW1lcyBoYXB0aWMgewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC45NSk7IH0KICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfQogICAgfQoKICAgIC8qIEVuaGFuY2VkIE1vYmlsZSBDYXJkcyAqLwogICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmNhcmQgewogICAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICB9CgogICAgICAgIC5jYXJkLXN3aXBlIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLmNhcmQtYWN0aW9ucyB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgcmlnaHQ6IC0xMDBweDsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIHRyYW5zaXRpb246IHJpZ2h0IDAuM3MgZWFzZTsKICAgICAgICB9CiAgICB9CgogICAgLyogTW9iaWxlIE5vdGlmaWNhdGlvbnMgKi8KICAgIC5ub3RpZmljYXRpb24tZG90IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1cHg7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1jb3JhbCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMnMgaW5maW5pdGU7CiAgICB9CgogICAgLyogTW9iaWxlIE9wdGltaXplZCBTY3JvbGxpbmcgKi8KICAgIC5zbW9vdGgtc2Nyb2xsIHsKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB9CgogICAgLyogRW5oYW5jZWQgTW9iaWxlIEJ1dHRvbnMgKi8KICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICAgICAgbWluLWhlaWdodDogNDRweDsgLyogaU9TIG1pbmltdW0gdG91Y2ggdGFyZ2V0ICovCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktcHVycGxlKTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMTA3LCA3MCwgMTkzLCAwLjMpOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmFjdGlvbi1idXR0b246YWN0aXZlIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMTA3LCA3MCwgMTkzLCAwLjIpOwogICAgICAgIH0KICAgIH0KPC9zdHlsZT4KCjwhLS0gQWRkIE1vYmlsZSBCb3R0b20gTmF2aWdhdGlvbiAtLT4KPG5hdiBjbGFzcz0iYm90dG9tLW5hdiI+CiAgICA8YSBocmVmPSIjaG9tZSIgY2xhc3M9ImJvdHRvbS1uYXYtaXRlbSBhY3RpdmUiPgogICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtaG9tZSI+PC9pPgogICAgICAgIDxzcGFuPkhvbWU8L3NwYW4+CiAgICA8L2E+CiAgICA8YSBocmVmPSIjdmlzaW9uIiBjbGFzcz0iYm90dG9tLW5hdi1pdGVtIj4KICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBhaW50LWJydXNoIj48L2k+CiAgICAgICAgPHNwYW4+VmlzaW9uPC9zcGFuPgogICAgPC9hPgogICAgPGEgaHJlZj0iI2xlYXJuIiBjbGFzcz0iYm90dG9tLW5hdi1pdGVtIj4KICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWJvb2siPjwvaT4KICAgICAgICA8c3Bhbj5MZWFybjwvc3Bhbj4KICAgIDwvYT4KICAgIDxhIGhyZWY9IiNwcm9maWxlIiBjbGFzcz0iYm90dG9tLW5hdi1pdGVtIj4KICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXVzZXIiPjwvaT4KICAgICAgICA8c3Bhbj5Qcm9maWxlPC9zcGFuPgogICAgPC9hPgo8L25hdj4KCjxzY3JpcHQ+CiAgICAvLyBFbmhhbmNlZCBNb2JpbGUgR2VzdHVyZSBIYW5kbGluZwogICAgbGV0IHRvdWNoU3RhcnRYID0gMDsKICAgIGxldCB0b3VjaEVuZFggPSAwOwoKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBlID0+IHsKICAgICAgICB0b3VjaFN0YXJ0WCA9IGUudG91Y2hlc1swXS5jbGllbnRYOwogICAgfSk7CgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZSA9PiB7CiAgICAgICAgaWYgKE1hdGguYWJzKGUudG91Y2hlc1swXS5jbGllbnRYIC0gdG91Y2hTdGFydFgpID4gNTApIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50IGRlZmF1bHQgb25seSBpZiBzd2lwaW5nCiAgICAgICAgfQogICAgfSwgeyBwYXNzaXZlOiBmYWxzZSB9KTsKCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGUgPT4gewogICAgICAgIHRvdWNoRW5kWCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDsKICAgICAgICBoYW5kbGVIb3Jpem9udGFsU3dpcGUoKTsKICAgIH0pOwoKICAgIGZ1bmN0aW9uIGhhbmRsZUhvcml6b250YWxTd2lwZSgpIHsKICAgICAgICBjb25zdCBzd2lwZURpc3RhbmNlID0gdG91Y2hFbmRYIC0gdG91Y2hTdGFydFg7CiAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlRGlzdGFuY2UpID4gMTAwKSB7CiAgICAgICAgICAgIC8vIEFkZCBzd2lwZSBuYXZpZ2F0aW9uIGxvZ2ljCiAgICAgICAgICAgIGlmIChzd2lwZURpc3RhbmNlID4gMCkgewogICAgICAgICAgICAgICAgLy8gU3dpcGUgcmlnaHQKICAgICAgICAgICAgICAgIG5hdmlnYXRlUHJldmlvdXMoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFN3aXBlIGxlZnQKICAgICAgICAgICAgICAgIG5hdmlnYXRlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIFB1bGwgdG8gUmVmcmVzaAogICAgbGV0IHRvdWNoU3RhcnRZID0gMDsKICAgIGxldCBwdWxsRGlzdGFuY2UgPSAwOwogICAgY29uc3QgcHVsbFRocmVzaG9sZCA9IDYwOwoKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBlID0+IHsKICAgICAgICB0b3VjaFN0YXJ0WSA9IGUudG91Y2hlc1swXS5jbGllbnRZOwogICAgfSk7CgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZSA9PiB7CiAgICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICAgICAgcHVsbERpc3RhbmNlID0gdG91Y2guY2xpZW50WSAtIHRvdWNoU3RhcnRZOwoKICAgICAgICBpZiAod2luZG93LnNjcm9sbFkgPT09IDAgJiYgcHVsbERpc3RhbmNlID4gMCkgewogICAgICAgICAgICBzaG93UHVsbFRvUmVmcmVzaChwdWxsRGlzdGFuY2UpOwogICAgICAgIH0KICAgIH0pOwoKICAgIGZ1bmN0aW9uIHNob3dQdWxsVG9SZWZyZXNoKGRpc3RhbmNlKSB7CiAgICAgICAgY29uc3QgcHVsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wdWxsLXJlZnJlc2gnKTsKICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKGRpc3RhbmNlIC8gcHVsbFRocmVzaG9sZCwgMSk7CiAgICAgICAgcHVsbC5zdHlsZS5tYXJnaW5Ub3AgPSBgJHstNjAgKyAoNjAgKiBwcm9ncmVzcyl9cHhgOwogICAgfQoKICAgIC8vIEVuaGFuY2VkIFRvdWNoIEZlZWRiYWNrCiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG91Y2gtcmlwcGxlJykuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBjcmVhdGVSaXBwbGUpOwogICAgfSk7CgogICAgZnVuY3Rpb24gY3JlYXRlUmlwcGxlKGV2ZW50KSB7CiAgICAgICAgY29uc3QgYnV0dG9uID0gZXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgICBjb25zdCByaXBwbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgY29uc3QgcmVjdCA9IGJ1dHRvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAKICAgICAgICByaXBwbGUuc3R5bGUubGVmdCA9IGAke2V2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAtIHJlY3QubGVmdH1weGA7CiAgICAgICAgcmlwcGxlLnN0eWxlLnRvcCA9IGAke2V2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSAtIHJlY3QudG9wfXB4YDsKICAgICAgICAKICAgICAgICBidXR0b24uYXBwZW5kQ2hpbGQocmlwcGxlKTsKICAgICAgICAKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJpcHBsZS5yZW1vdmUoKSwgMTAwMCk7CiAgICB9CgogICAgLy8gUGVyZm9ybWFuY2UgT3B0aW1pemF0aW9ucwogICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoCiAgICAgICAgKGVudHJpZXMpID0+IHsKICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHsKICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgewogICAgICAgICAgICAgICAgICAgIGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7CiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgeyB0aHJlc2hvbGQ6IDAuMSB9CiAgICApOwoKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sYXp5LWxvYWQnKS5mb3JFYWNoKAogICAgICAgIGVsZW1lbnQgPT4gb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KQogICAgKTsKPC9zY3JpcHQ+CjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KPGhlYWQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS82LjAuMC9jc3MvYWxsLm1pbi5jc3MiPgogICAgPHN0eWxlPgogICAgICAgIC8qIENvcmUgVmlzaW9uIFNwYWNlIFN0eWxlcyAqLwogICAgICAgIC52aXNpb24td29ya3NwYWNlIHsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyNTBweCAxZnI7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTAwcHgpOwogICAgICAgIH0KCiAgICAgICAgLyogVG9vbHMgUGFuZWwgKi8KICAgICAgICAudG9vbHMtcGFuZWwgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICB9CgogICAgICAgIC50b29sLWdyb3VwIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICB9CgogICAgICAgIC50b29sLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC50b29sLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOWQ1ZmY7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1cHgpOwogICAgICAgIH0KCiAgICAgICAgLyogQ2FudmFzIEFyZWEgKi8KICAgICAgICAuY2FudmFzLWFyZWEgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLmNhbnZhcy1jb250YWluZXIgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgI2NjYzsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAvKiBUZW1wbGF0ZXMgUGFuZWwgKi8KICAgICAgICAudGVtcGxhdGVzLXBhbmVsIHsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICByaWdodDogLTMwMHB4OwogICAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogLTJweCAwIDZweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIHRyYW5zaXRpb246IHJpZ2h0IDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC50ZW1wbGF0ZXMtcGFuZWwuc2hvdyB7CiAgICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgIH0KCiAgICAgICAgLnRlbXBsYXRlLWNhcmQgewogICAgICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC50ZW1wbGF0ZS1jYXJkOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2U5ZDVmZjsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KCiAgICAgICAgLyogQWN0aW9uIEJhciAqLwogICAgICAgIC5hY3Rpb24tYmFyIHsKICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgICBib3R0b206IDIwcHg7CiAgICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyNXB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAxNXB4OwogICAgICAgIH0KCiAgICAgICAgLmFjdGlvbi1idXR0b24gewogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNmI0NmMxOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgfQoKICAgICAgICAuYWN0aW9uLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICB9CgogICAgICAgIC8qIE1vYmlsZSBSZXNwb25zaXZlbmVzcyAqLwogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgICAudmlzaW9uLXdvcmtzcGFjZSB7CiAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLnRvb2xzLXBhbmVsIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgICAgICByaWdodDogMDsKICAgICAgICAgICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4IDE1cHggMCAwOwogICAgICAgICAgICAgICAgbWF4LWhlaWdodDogNTB2aDsKICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAudG9vbHMtcGFuZWwuc2hvdyB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5hY3Rpb24tYmFyIHsKICAgICAgICAgICAgICAgIGJvdHRvbTogODBweDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJ2aXNpb24td29ya3NwYWNlIj4KICAgICAgICA8IS0tIFRvb2xzIFBhbmVsIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRvb2xzLXBhbmVsIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbC1ncm91cCI+CiAgICAgICAgICAgICAgICA8aDM+QmFzaWMgVG9vbHM8L2gzPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24iPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtaW1hZ2UiPjwvaT4KICAgICAgICAgICAgICAgICAgICBBZGQgSW1hZ2UKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbC1idXR0b24iPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZm9udCI+PC9pPgogICAgICAgICAgICAgICAgICAgIEFkZCBUZXh0CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2wtYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXNoYXBlcyI+PC9pPgogICAgICAgICAgICAgICAgICAgIEFkZCBTaGFwZQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbC1ncm91cCI+CiAgICAgICAgICAgICAgICA8aDM+VmlzaW9uIEVsZW1lbnRzPC9oMz4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2wtYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICBHb2FscwogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1oZWFydCI+PC9pPgogICAgICAgICAgICAgICAgICAgIEluc3BpcmF0aW9ucwogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1jbG9jayI+PC9pPgogICAgICAgICAgICAgICAgICAgIFRpbWVsaW5lCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sLWdyb3VwIj4KICAgICAgICAgICAgICAgIDxoMz5EZWNvcmF0aW9uczwvaDM+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1wYWxldHRlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgQ29sb3JzCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2wtYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLW1hZ2ljIj48L2k+CiAgICAgICAgICAgICAgICAgICAgRWZmZWN0cwogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1ib3JkZXItYWxsIj48L2k+CiAgICAgICAgICAgICAgICAgICAgRnJhbWVzCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQ2FudmFzIEFyZWEgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iY2FudmFzLWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYW52YXMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxwPkRyb3AgZWxlbWVudHMgaGVyZSB0byBjcmVhdGUgeW91ciB2aXNpb24gYm9hcmQ8L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZXMgUGFuZWwgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlcy1wYW5lbCIgaWQ9InRlbXBsYXRlc1BhbmVsIj4KICAgICAgICAgICAgICAgIDxoMz5UZW1wbGF0ZXM8L2gzPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGg0PkRyZWFtIEJpZzwvaDQ+CiAgICAgICAgICAgICAgICAgICAgPHA+UGVyc29uYWwgZ29hbHMgdGVtcGxhdGU8L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxoND5CdXNpbmVzcyBWaXNpb248L2g0PgogICAgICAgICAgICAgICAgICAgIDxwPkVudHJlcHJlbmV1cmlhbCB0ZW1wbGF0ZTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGg0PkxlYXJuaW5nIFBhdGg8L2g0PgogICAgICAgICAgICAgICAgICAgIDxwPkVkdWNhdGlvbmFsIGdvYWxzIHRlbXBsYXRlPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBBY3Rpb24gQmFyIC0tPgogICAgPGRpdiBjbGFzcz0iYWN0aW9uLWJhciI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiIgb25jbGljaz0idG9nZ2xlVGVtcGxhdGVzKCkiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRoLWxhcmdlIj48L2k+CiAgICAgICAgICAgIFRlbXBsYXRlcwogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gcHJpbWFyeSI+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc2F2ZSI+PC9pPgogICAgICAgICAgICBTYXZlIFZpc2lvbiBCb2FyZAogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24iPgogICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXNoYXJlIj48L2k+CiAgICAgICAgICAgIFNoYXJlCiAgICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIHRvZ2dsZVRlbXBsYXRlcygpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlc1BhbmVsJykuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycpOwogICAgICAgIH0KCiAgICAgICAgLy8gTW9iaWxlIFRvb2xzIFBhbmVsIFRvZ2dsZQogICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA3NjgpIHsKICAgICAgICAgICAgY29uc3QgdG9vbHNCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgICAgICAgdG9vbHNCdXR0b24uY2xhc3NOYW1lID0gJ2FjdGlvbi1idXR0b24nOwogICAgICAgICAgICB0b29sc0J1dHRvbi5pbm5lckhUTUwgPSAnPGkgY2xhc3M9ImZhcyBmYS10b29scyI+PC9pPiBUb29scyc7CiAgICAgICAgICAgIHRvb2xzQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9vbHMtcGFuZWwnKS5jbGFzc0xpc3QudG9nZ2xlKCdzaG93Jyk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3Rpb24tYmFyJykucHJlcGVuZCh0b29sc0J1dHRvbik7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==","embed":""}
FFFF Logo

Financial Fitness Fortunes Foundation

Vision Board Member Portal

Vision Board Learning Hub Achievements Resources Community
Home Vision Learn Profile

Basic Tools

Vision Elements

Decorations

Drop elements here to create your vision board

Templates

Dream Big

Personal goals template

Business Vision

Entrepreneurial template

Learning Path

Educational goals template

Image Gallery Grid
T
Please Check Your Email
We Will Be Following Up Shortly
*
*
*

warning