{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICAKICAgIDwhLS0gU0VPIE1FVEEgVEFHUyAtLT4KICAgIDx0aXRsZT5Ud28gSGVhcnRzIEFzc2Vzc21lbnTihKIgfCBEaXNjb3ZlciBZb3VyIER1YWwgSWRlbnRpdHkgQWR2YW50YWdlPC90aXRsZT4KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcmUgeW91IGEgTW90aGVybGFuZCBXYXJyaW9yIG9yIERpYXNwb3JhIEJyaWRnZS1CdWlsZGVyPyBUYWtlIG91ciBhc3Nlc3NtZW50IHRvIGRpc2NvdmVyIHlvdXIgdW5pcXVlIGN1bHR1cmFsIGNhcGl0YWwgYW5kIHVubG9jayB5b3VyIHJlbGF0aW9uYWwgbW9hdC4iPgogICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InR3byBoZWFydHMgYXNzZXNzbWVudCwgZGlhc3BvcmEgZW50cmVwcmVuZXVyIGFzc2Vzc21lbnQsIGN1bHR1cmFsIGN1cnJlbmN5LCBtb3RoZXJsYW5kIHdhcnJpb3IsIGJyaWRnZSBidWlsZGVyLCBwYW4tYWZyaWNhbiBidXNpbmVzcyI+CiAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9ImluZGV4LCBmb2xsb3ciPgogICAgCiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUNpbnplbDp3Z2h0QDYwMDs3MDA7ODAwOzkwMCZmYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzgwMDs5MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogICAgCiAgICA8c3R5bGU+CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLXJveWFsLWJsdWU6ICMwMDAwODA7CiAgICAgICAgICAgIC0tZGVlcC1ibHVlOiAjMDAwMDY2OwogICAgICAgICAgICAtLWJyaWdodC1nb2xkOiAjRkZENzAwOwogICAgICAgICAgICAtLWxpZ2h0LWdvbGQ6ICNGRkY4REM7CiAgICAgICAgICAgIC0td2hpdGU6ICNGRkZGRkY7CiAgICAgICAgfQoKICAgICAgICAqIHsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzYW5zLXNlcmlmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1saWdodC1nb2xkKSAwJSwgdmFyKC0td2hpdGUpIDEwMCUpOwogICAgICAgICAgICBjb2xvcjogIzJDM0U1MDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLyogSEVSTyAqLwogICAgICAgIC5oZXJvIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZGVlcC1ibHVlKSAwJSwgdmFyKC0tcm95YWwtYmx1ZSkgMTAwJSk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZSk7CiAgICAgICAgICAgIHBhZGRpbmc6IDVyZW0gMnJlbSA0cmVtOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CgogICAgICAgIC5oZXJvOjpiZWZvcmUgewogICAgICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICB0b3A6IC01MCU7CiAgICAgICAgICAgIGxlZnQ6IC01MCU7CiAgICAgICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDIwMCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHZhcigtLWJyaWdodC1nb2xkKSAwJSwgdHJhbnNwYXJlbnQgNzAlKTsKICAgICAgICAgICAgb3BhY2l0eTogMC4xOwogICAgICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAyNXMgbGluZWFyIGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyByb3RhdGUgewogICAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgICAgfQoKICAgICAgICAuaGVyby1jb250ZW50IHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICB6LWluZGV4OiAyOwogICAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIC5jcm93bi1pY29uIHsKICAgICAgICAgICAgZm9udC1zaXplOiA1cmVtOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAzMHB4IHZhcigtLWJyaWdodC1nb2xkKSk7CiAgICAgICAgICAgIGFuaW1hdGlvbjogcHVsc2UtZ2xvdyAyLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBwdWxzZS1nbG93IHsKICAgICAgICAgICAgMCUsIDEwMCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDMwcHggdmFyKC0tYnJpZ2h0LWdvbGQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICA1MCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogICAgICAgICAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgNTBweCB2YXIoLS1icmlnaHQtZ29sZCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuaGVybyBoMSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQ2luemVsJywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMi41cmVtLCA2dncsIDRyZW0pOwogICAgICAgICAgICBmb250LXdlaWdodDogODAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07CiAgICAgICAgICAgIHRleHQtc2hhZG93OiAycHggMnB4IDhweCByZ2JhKDAsMCwwLDAuNCk7CiAgICAgICAgfQoKICAgICAgICAuaGVybyBwIHsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjFyZW0sIDIuNXZ3LCAxLjRyZW0pOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS44OwogICAgICAgICAgICBvcGFjaXR5OiAwLjk1OwogICAgICAgIH0KCiAgICAgICAgLmRpdmlkZXIgewogICAgICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgICAgIGhlaWdodDogM3B4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCB2YXIoLS1icmlnaHQtZ29sZCksIHRyYW5zcGFyZW50KTsKICAgICAgICAgICAgbWFyZ2luOiAycmVtIGF1dG87CiAgICAgICAgfQoKICAgICAgICAvKiBDT05UQUlORVIgKi8KICAgICAgICAuY29udGFpbmVyIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICBwYWRkaW5nOiAwIDJyZW07CiAgICAgICAgfQoKICAgICAgICAvKiBTVEVQIElORElDQVRPUiAqLwogICAgICAgIC5zdGVwLWluZGljYXRvciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDFyZW07CiAgICAgICAgICAgIHBhZGRpbmc6IDJyZW0gMDsKICAgICAgICAgICAgbWFyZ2luOiAycmVtIDA7CiAgICAgICAgfQoKICAgICAgICAuc3RlcCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMC41cmVtOwogICAgICAgIH0KCiAgICAgICAgLnN0ZXAtbnVtYmVyIHsKICAgICAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZGRkOwogICAgICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuc3RlcC5hY3RpdmUgLnN0ZXAtbnVtYmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tcm95YWwtYmx1ZSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsKICAgICAgICB9CgogICAgICAgIC5zdGVwLWxhYmVsIHsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIH0KCiAgICAgICAgLnN0ZXAuYWN0aXZlIC5zdGVwLWxhYmVsIHsKICAgICAgICAgICAgY29sb3I6IHZhcigtLXJveWFsLWJsdWUpOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIH0KCiAgICAgICAgLnN0ZXAtYXJyb3cgewogICAgICAgICAgICBjb2xvcjogI2RkZDsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW07CiAgICAgICAgfQoKICAgICAgICAvKiBJREVOVElUWSBTRUxFQ1RJT04gKi8KICAgICAgICAuaWRlbnRpdHktc2VjdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDNyZW0gMDsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5pZGVudGl0eS1zZWN0aW9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgICBmb250LWZhbWlseTogJ0NpbnplbCcsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDJyZW0sIDR2dywgM3JlbSk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1yb3lhbC1ibHVlKTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tc3VidGl0bGUgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMXJlbSwgMnZ3LCAxLjJyZW0pOwogICAgICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogM3JlbTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgICAgICB9CgogICAgICAgIC5pZGVudGl0eS1jYXJkcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpOwogICAgICAgICAgICBnYXA6IDNyZW07CiAgICAgICAgICAgIG1hcmdpbjogM3JlbSAwOwogICAgICAgIH0KCiAgICAgICAgLmlkZW50aXR5LWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1kZWVwLWJsdWUpLCB2YXIoLS1yb3lhbC1ibHVlKSk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZSk7CiAgICAgICAgICAgIHBhZGRpbmc6IDNyZW0gMnJlbTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsKICAgICAgICAgICAgYm9yZGVyOiA0cHggc29saWQgdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLmlkZW50aXR5LWNhcmQ6OmJlZm9yZSB7CiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgbGVmdDogLTEwMCU7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LDIxNSwwLDAuMiksIHRyYW5zcGFyZW50KTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjZzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuaWRlbnRpdHktY2FyZDpob3Zlcjo6YmVmb3JlIHsKICAgICAgICAgICAgbGVmdDogMTAwJTsKICAgICAgICB9CgogICAgICAgIC5pZGVudGl0eS1jYXJkOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KSBzY2FsZSgxLjA1KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAzMHB4IDcwcHggcmdiYSgyNTUsMjE1LDAsMC41KTsKICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiA2cHg7CiAgICAgICAgfQoKICAgICAgICAuaWRlbnRpdHktaWNvbiB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogNXJlbTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIC5pZGVudGl0eS1jYXJkIGgzIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdDaW56ZWwnLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAycmVtOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLmlkZW50aXR5LWNhcmQgcCB7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjg7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuOTU7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3QtYnV0dG9uIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tcm95YWwtYmx1ZSk7CiAgICAgICAgICAgIHBhZGRpbmc6IDFyZW0gMi41cmVtOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0NpbnplbCcsIHNlcmlmOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgyNTUsMjE1LDAsMC41KTsKICAgICAgICB9CgogICAgICAgIC8qIFFVRVNUSU9OUyBTRUNUSU9OICovCiAgICAgICAgLnF1ZXN0aW9ucy1zZWN0aW9uIHsKICAgICAgICAgICAgcGFkZGluZzogM3JlbSAwOwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1ZXN0aW9ucy1zZWN0aW9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLnF1ZXN0aW9uLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICAgICAgICAgIHBhZGRpbmc6IDIuNXJlbTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBtYXJnaW46IDJyZW0gMDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgIH0KCiAgICAgICAgLnF1ZXN0aW9uLW51bWJlciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tcm95YWwtYmx1ZSk7CiAgICAgICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgICAgICBoZWlnaHQ6IDM1cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKICAgICAgICB9CgogICAgICAgIC5xdWVzdGlvbi10ZXh0IHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1yb3lhbC1ibHVlKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgICAgIH0KCiAgICAgICAgLm9wdGlvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDFyZW07CiAgICAgICAgfQoKICAgICAgICAub3B0aW9uIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tbGlnaHQtZ29sZCk7CiAgICAgICAgICAgIHBhZGRpbmc6IDEuMnJlbTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLm9wdGlvbjpob3ZlciB7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1cHgpOwogICAgICAgIH0KCiAgICAgICAgLm9wdGlvbiBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgICAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICAgICAgYWNjZW50LWNvbG9yOiB2YXIoLS1icmlnaHQtZ29sZCk7CiAgICAgICAgfQoKICAgICAgICAub3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmlnaHQtZ29sZCk7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMjBweCByZ2JhKDI1NSwyMTUsMCwwLjMpOwogICAgICAgIH0KCiAgICAgICAgLmZvcm0taW5wdXQgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMXJlbTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYnJpZ2h0LWdvbGQpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzYW5zLXNlcmlmOwogICAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjVyZW07CiAgICAgICAgfQoKICAgICAgICAubmF2aWdhdGlvbi1idXR0b25zIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgICBtYXJnaW46IDNyZW0gMDsKICAgICAgICAgICAgZ2FwOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLm5hdi1idXR0b24gewogICAgICAgICAgICBwYWRkaW5nOiAxcmVtIDIuNXJlbTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTBweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdDaW56ZWwnLCBzZXJpZjsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLm5hdi1idXR0b24uYmFjayB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNkZGQ7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIH0KCiAgICAgICAgLm5hdi1idXR0b24ubmV4dCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWRlZXAtYmx1ZSksIHZhcigtLXJveWFsLWJsdWUpKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWJyaWdodC1nb2xkKTsKICAgICAgICB9CgogICAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMik7CiAgICAgICAgfQoKICAgICAgICAubmF2LWJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLyogUkVTVUxUUyBTRUNUSU9OICovCiAgICAgICAgLnJlc3VsdHMtc2VjdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDNyZW0gMDsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5yZXN1bHRzLXNlY3Rpb24uYWN0aXZlIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQoKICAgICAgICAucmVzdWx0cy1jYXJkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYnJpZ2h0LWdvbGQpLCAjRkZDMTA3KTsKICAgICAgICAgICAgcGFkZGluZzogM3JlbTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDI1NSwyMTUsMCwwLjQpOwogICAgICAgICAgICBtYXJnaW46IDJyZW0gMDsKICAgICAgICB9CgogICAgICAgIC5yZXN1bHRzLWNhcmQgaDIgewogICAgICAgICAgICBmb250LWZhbWlseTogJ0NpbnplbCcsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDIuNXJlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLXJveWFsLWJsdWUpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLnJlc3VsdHMtY2FyZCBwIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1yb3lhbC1ibHVlKTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMnJlbTsKICAgICAgICB9CgogICAgICAgIC5yZWNvbW1lbmRhdGlvbi1jYXJkcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjgwcHgsIDFmcikpOwogICAgICAgICAgICBnYXA6IDJyZW07CiAgICAgICAgICAgIG1hcmdpbjogM3JlbSAwOwogICAgICAgIH0KCiAgICAgICAgLnJlY29tbWVuZGF0aW9uLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICAgICAgICAgIHBhZGRpbmc6IDJyZW07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWJyaWdodC1nb2xkKTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLnJlY29tbWVuZGF0aW9uLWNhcmQgaDMgewogICAgICAgICAgICBmb250LWZhbWlseTogJ0NpbnplbCcsIHNlcmlmOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tcm95YWwtYmx1ZSk7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLnJlY29tbWVuZGF0aW9uLWNhcmQgcCB7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS43OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07CiAgICAgICAgfQoKICAgICAgICAucmVjb21tZW5kYXRpb24tY2FyZCAucHJpY2UgewogICAgICAgICAgICBmb250LXNpemU6IDJyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1yb3lhbC1ibHVlKTsKICAgICAgICAgICAgbWFyZ2luOiAxcmVtIDA7CiAgICAgICAgfQoKICAgICAgICAuY3RhLWJ1dHRvbiB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWRlZXAtYmx1ZSksIHZhcigtLXJveWFsLWJsdWUpKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWJyaWdodC1nb2xkKTsKICAgICAgICAgICAgcGFkZGluZzogMXJlbSAycmVtOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0NpbnplbCcsIHNlcmlmOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLmN0YS1idXR0b246aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTVweCA0MHB4IHJnYmEoMCwwLDEyOCwwLjQpOwogICAgICAgIH0KCiAgICAgICAgLyogRk9PVEVSICovCiAgICAgICAgLmZvb3RlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWRlZXAtYmx1ZSksIHZhcigtLXJveWFsLWJsdWUpKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlKTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiAycmVtOwogICAgICAgICAgICBtYXJnaW4tdG9wOiA0cmVtOwogICAgICAgIH0KCiAgICAgICAgLyogTU9CSUxFICovCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAgIC5pZGVudGl0eS1jYXJkcywKICAgICAgICAgICAgLnJlY29tbWVuZGF0aW9uLWNhcmRzIHsKICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuc3RlcC1pbmRpY2F0b3IgewogICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgICAgIGdhcDogMC41cmVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuc3RlcC1hcnJvdyB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5uYXZpZ2F0aW9uLWJ1dHRvbnMgewogICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLm5hdi1idXR0b24gewogICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPCEtLSBIRVJPIC0tPgogICAgPHNlY3Rpb24gY2xhc3M9Imhlcm8iPgogICAgICAgIDxkaXYgY2xhc3M9Imhlcm8tY29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNyb3duLWljb24iPvCfko48L2Rpdj4KICAgICAgICAgICAgPGgxPlRoZSBUd28gSGVhcnRzIEFzc2Vzc21lbnTihKI8L2gxPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgPHA+RGlzY292ZXIgeW91ciB1bmlxdWUgY3VsdHVyYWwgY2FwaXRhbCBhbmQgdW5sb2NrIHRoZSBjb21wZXRpdGl2ZSBhZHZhbnRhZ2VzIGhpZGluZyBpbiB5b3VyIGR1YWwgaWRlbnRpdHkuPC9wPgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoKICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPCEtLSBTVEVQIElORElDQVRPUiAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWluZGljYXRvciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAgYWN0aXZlIiBpZD0ic3RlcDEtaW5kaWNhdG9yIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbnVtYmVyIj4xPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWxhYmVsIj5DaG9vc2UgSWRlbnRpdHk8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtYXJyb3ciPuKGkjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIiBpZD0ic3RlcDItaW5kaWNhdG9yIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbnVtYmVyIj4yPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWxhYmVsIj5Bc3Nlc3NtZW50PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWFycm93Ij7ihpI8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcCIgaWQ9InN0ZXAzLWluZGljYXRvciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLW51bWJlciI+MzwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sYWJlbCI+UmVzdWx0czwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBTVEVQIDE6IElERU5USVRZIFNFTEVDVElPTiAtLT4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iaWRlbnRpdHktc2VjdGlvbiBhY3RpdmUiIGlkPSJzdGVwMSI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Rmlyc3QsIFRlbGwgVXMgV2hvIFlvdSBBcmU8L2gyPgogICAgICAgICAgICA8cCBjbGFzcz0ic2VjdGlvbi1zdWJ0aXRsZSI+WW91ciBqb3VybmV5IGlzIHVuaXF1ZS4gQ2hvb3NlIHRoZSBpZGVudGl0eSB0aGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgY3VycmVudCByZWFsaXR5LjwvcD4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlkZW50aXR5LWNhcmRzIj4KICAgICAgICAgICAgICAgIDwhLS0gTU9USEVSTEFORCBXQVJSSU9SIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWRlbnRpdHktY2FyZCIgb25jbGljaz0ic2VsZWN0SWRlbnRpdHkoJ21vdGhlcmxhbmQnKSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aXR5LWljb24iPvCfjI08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGgzPkkgQW0gYSBNb3RoZXJsYW5kIFdhcnJpb3I8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwPkkgYW0gYmFzZWQgb24gdGhlIEFmcmljYW4gY29udGluZW50LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBkaWFzcG9yYSBwYXJ0bmVycyBiZXR0ZXIgYW5kIGJ1aWxkIHN0cm9uZ2VyIGJyaWRnZXMgd2l0aCB0aG9zZSB3aG8ndmUgbGVmdCBidXQgd2FudCB0byBjb250cmlidXRlLjwvcD4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzZWxlY3QtYnV0dG9uIj5TZWxlY3QgVGhpcyBQYXRoIOKGkjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBESUFTUE9SQSBCUklER0UtQlVJTERFUiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlkZW50aXR5LWNhcmQiIG9uY2xpY2s9InNlbGVjdElkZW50aXR5KCdkaWFzcG9yYScpIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpdHktaWNvbiI+8J+Sjjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8aDM+SSBBbSBhIERpYXNwb3JhIEJyaWRnZS1CdWlsZGVyPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cD5JIGFtIGJhc2VkIGFicm9hZCBidXQgbXkgaGVhcnQgYmVsb25ncyB0byBBZnJpY2EuIEkgd2FudCB0byBuYXZpZ2F0ZSBtb3RoZXJsYW5kIHJlbGF0aW9uc2hpcHMgYW5kIGJ1aWxkIGF1dGhlbnRpYyBwYXJ0bmVyc2hpcHMgdGhhdCBob25vciBib3RoIHdvcmxkcy48L3A+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiI+U2VsZWN0IFRoaXMgUGF0aCDihpI8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDwhLS0gU1RFUCAyOiBBU1NFU1NNRU5UIFFVRVNUSU9OUyAtLT4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0icXVlc3Rpb25zLXNlY3Rpb24iIGlkPSJzdGVwMiI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+WW91ciBUd28gSGVhcnRzIEFzc2Vzc21lbnQ8L2gyPgogICAgICAgICAgICA8cCBjbGFzcz0ic2VjdGlvbi1zdWJ0aXRsZSI+QW5zd2VyIGhvbmVzdGx54oCUdGhlcmUgYXJlIG5vIHdyb25nIGFuc3dlcnMsIG9ubHkgaW5zaWdodHMgd2FpdGluZyB0byBiZSBkaXNjb3ZlcmVkLjwvcD4KCiAgICAgICAgICAgIDxmb3JtIGlkPSJhc3Nlc3NtZW50Rm9ybSI+CiAgICAgICAgICAgICAgICA8IS0tIEVtYWlsIENhcHR1cmUgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJxdWVzdGlvbi1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icXVlc3Rpb24tbnVtYmVyIj7wn5OnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1ZXN0aW9uLXRleHQiPldoYXQncyB5b3VyIGVtYWlsPyAoV2UnbGwgc2VuZCB5b3VyIHBlcnNvbmFsaXplZCByZXN1bHRzKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIGNsYXNzPSJmb3JtLWlucHV0IiBwbGFjZWhvbGRlcj0ieW91ckBlbWFpbC5jb20iIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBOYW1lIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icXVlc3Rpb24tY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InF1ZXN0aW9uLW51bWJlciI+8J+RpDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJxdWVzdGlvbi10ZXh0Ij5XaGF0J3MgeW91ciBmaXJzdCBuYW1lPzwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaXJzdE5hbWUiIGNsYXNzPSJmb3JtLWlucHV0IiBwbGFjZWhvbGRlcj0iWW91ciBuYW1lIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBRdWVzdGlvbnMgQ29udGFpbmVyIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0iZHluYW1pY1F1ZXN0aW9ucyI+PC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2aWdhdGlvbi1idXR0b25zIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdi1idXR0b24gYmFjayIgb25jbGljaz0iZ29CYWNrKCkiPuKGkCBCYWNrPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJuYXYtYnV0dG9uIG5leHQiPkdldCBNeSBSZXN1bHRzIOKGkjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDwhLS0gU1RFUCAzOiBSRVNVTFRTIC0tPgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHRzLXNlY3Rpb24iIGlkPSJzdGVwMyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc3VsdHMtY2FyZCI+CiAgICAgICAgICAgICAgICA8aDI+8J+OiSBZb3VyIFJlc3VsdHMgQXJlIFJlYWR5ITwvaDI+CiAgICAgICAgICAgICAgICA8cCBpZD0icmVzdWx0c01lc3NhZ2UiPkNoZWNrIHlvdXIgZW1haWwgZm9yIHlvdXIgY29tcGxldGUgVHdvIEhlYXJ0cyBBc3Nlc3NtZW50IHJlc3VsdHMgYW5kIHBlcnNvbmFsaXplZCBhY3Rpb24gcGxhbi48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Zb3VyIFJlY29tbWVuZGVkIE5leHQgU3RlcHM8L2gyPgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVjb21tZW5kYXRpb24tY2FyZHMiIGlkPSJyZWNvbW1lbmRhdGlvbnMiPgogICAgICAgICAgICAgICAgPCEtLSBQb3B1bGF0ZWQgZHluYW1pY2FsbHkgLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gRk9PVEVSIC0tPgogICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KICAgICAgICA8cD48c3Ryb25nPvCfkZEgVGhlIFR3byBIZWFydHMgUHJvdG9jb2zihKI8L3N0cm9uZz48L3A+CiAgICAgICAgPHA+VHJhbnNmb3JtIFlvdXIgRHVhbCBJZGVudGl0eSBJbnRvIERvbWluYW5jZTwvcD4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMXJlbTsgb3BhY2l0eTogMC44OyI+wqkgMjAyNSBNb21lbnR1bSBEaWdpdGFsPC9wPgogICAgPC9mb290ZXI+CgogICAgPHNjcmlwdD4KICAgICAgICBsZXQgc2VsZWN0ZWRJZGVudGl0eSA9ICcnOwogICAgICAgIAogICAgICAgIGNvbnN0IG1vdGhlcmxhbmRRdWVzdGlvbnMgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcjogMSwKICAgICAgICAgICAgICAgIHRleHQ6ICJIb3cgb2Z0ZW4gZG8geW91IGNvbGxhYm9yYXRlIHdpdGggZGlhc3BvcmEgcGFydG5lcnMgb3IgaW52ZXN0b3JzPyIsCiAgICAgICAgICAgICAgICBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgIkZyZXF1ZW50bHkgLSBJdCdzIHBhcnQgb2YgbXkgcmVndWxhciB3b3JrIiwKICAgICAgICAgICAgICAgICAgICAiT2NjYXNpb25hbGx5IC0gQSBmZXcgdGltZXMgYSB5ZWFyIiwKICAgICAgICAgICAgICAgICAgICAiUmFyZWx5IC0gSSd2ZSB0cmllZCBidXQgaXQncyBjaGFsbGVuZ2luZyIsCiAgICAgICAgICAgICAgICAgICAgIk5ldmVyIC0gSSdtIGxvb2tpbmcgdG8gc3RhcnQiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcjogMiwKICAgICAgICAgICAgICAgIHRleHQ6ICJXaGF0J3MgeW91ciBiaWdnZXN0IGNoYWxsZW5nZSB3aGVuIHdvcmtpbmcgd2l0aCBkaWFzcG9yYSBwcm9mZXNzaW9uYWxzPyIsCiAgICAgICAgICAgICAgICBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgIkNvbW11bmljYXRpb24gc3R5bGVzIGFuZCBleHBlY3RhdGlvbnMiLAogICAgICAgICAgICAgICAgICAgICJUaGV5IGRvbid0IHVuZGVyc3RhbmQgbG9jYWwgcmVhbGl0aWVzIiwKICAgICAgICAgICAgICAgICAgICAiQnVpbGRpbmcgdHJ1c3QgZnJvbSBhIGRpc3RhbmNlIiwKICAgICAgICAgICAgICAgICAgICAiVGhleSBpbXBvc2UgV2VzdGVybiBzb2x1dGlvbnMgd2l0aG91dCBsaXN0ZW5pbmciCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcjogMywKICAgICAgICAgICAgICAgIHRleHQ6ICJIb3cgY29uZmlkZW50IGFyZSB5b3UgdHJhbnNsYXRpbmcgeW91ciBncm91bmQtdHJ1dGggaW50ZWxsaWdlbmNlIHRvIFdlc3Rlcm4gZnJhbWV3b3Jrcz8iLAogICAgICAgICAgICAgICAgb3B0aW9uczogWwogICAgICAgICAgICAgICAgICAgICJWZXJ5IGNvbmZpZGVudCAtIEkgc3BlYWsgYm90aCBsYW5ndWFnZXMgZmx1ZW50bHkiLAogICAgICAgICAgICAgICAgICAgICJTb21ld2hhdCBjb25maWRlbnQgLSBJJ20gbGVhcm5pbmciLAogICAgICAgICAgICAgICAgICAgICJOb3QgdmVyeSBjb25maWRlbnQgLSBJdCBmZWVscyB1bm5hdHVyYWwiLAogICAgICAgICAgICAgICAgICAgICJOZWVkIGhlbHAgLSBJIHdhbnQgdG8gbGVhcm4gdGhpcyBza2lsbCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbnVtYmVyOiA0LAogICAgICAgICAgICAgICAgdGV4dDogIldoYXQgd291bGQgbWFrZSB5b3UgbW9yZSBzdWNjZXNzZnVsIGluIGRpYXNwb3JhIHBhcnRuZXJzaGlwcz8iLAogICAgICAgICAgICAgICAgb3B0aW9uczogWwogICAgICAgICAgICAgICAgICAgICJVbmRlcnN0YW5kaW5nIHRoZWlyIHBzeWNob2xvZ3kgYW5kIG1pbmRzZXQiLAogICAgICAgICAgICAgICAgICAgICJCZXR0ZXIgY29tbXVuaWNhdGlvbiBmcmFtZXdvcmtzIiwKICAgICAgICAgICAgICAgICAgICAiTW9yZSBhdXRoZW50aWMgcmVsYXRpb25zaGlwLWJ1aWxkaW5nIHRvb2xzIiwKICAgICAgICAgICAgICAgICAgICAiQ2FzZSBzdHVkaWVzIG9mIHN1Y2Nlc3NmdWwgcGFydG5lcnNoaXBzIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgXTsKCiAgICAgICAgY29uc3QgZGlhc3BvcmFRdWVzdGlvbnMgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcjogMSwKICAgICAgICAgICAgICAgIHRleHQ6ICJIb3cgbG9uZyBzaW5jZSB5b3Ugc3BlbnQgc2lnbmlmaWNhbnQgdGltZSAoMysgbW9udGhzKSBpbiB5b3VyIG1vdGhlcmxhbmQ/IiwKICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsKICAgICAgICAgICAgICAgICAgICAiQ3VycmVudGx5IHRoZXJlIG9yIHdpdGhpbiB0aGUgbGFzdCB5ZWFyIiwKICAgICAgICAgICAgICAgICAgICAiMS0zIHllYXJzIGFnbyIsCiAgICAgICAgICAgICAgICAgICAgIjMtNSB5ZWFycyBhZ28iLAogICAgICAgICAgICAgICAgICAgICJNb3JlIHRoYW4gNSB5ZWFycyBhZ28iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcjogMiwKICAgICAgICAgICAgICAgIHRleHQ6ICJXaGF0J3MgeW91ciBiaWdnZXN0IGZlYXIgYWJvdXQgYnVpbGRpbmcgYnVzaW5lc3Mgb24gdGhlIGNvbnRpbmVudD8iLAogICAgICAgICAgICAgICAgb3B0aW9uczogWwogICAgICAgICAgICAgICAgICAgICJCZWluZyBzZWVuIGFzIGFuIG91dHNpZGVyIHdobyBkb2Vzbid0IHVuZGVyc3RhbmQiLAogICAgICAgICAgICAgICAgICAgICJOb3Qga25vd2luZyB3aG8gdG8gdHJ1c3QiLAogICAgICAgICAgICAgICAgICAgICJNYWtpbmcgY3VsdHVyYWwgbWlzdGFrZXMiLAogICAgICAgICAgICAgICAgICAgICJGYWlsaW5nIGJlY2F1c2UgSSdtIGRpc2Nvbm5lY3RlZCBmcm9tIHJlYWxpdHkiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcjogMywKICAgICAgICAgICAgICAgIHRleHQ6ICJIb3cgY29uZmlkZW50IGFyZSB5b3UgbmF2aWdhdGluZyBsb2NhbCBidXNpbmVzcyByZWxhdGlvbnNoaXBzPyIsCiAgICAgICAgICAgICAgICBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgIlZlcnkgY29uZmlkZW50IC0gSSB1bmRlcnN0YW5kIHRoZSBjdWx0dXJhbCBjb2RlIiwKICAgICAgICAgICAgICAgICAgICAiU29tZXdoYXQgY29uZmlkZW50IC0gSSdtIGxlYXJuaW5nIiwKICAgICAgICAgICAgICAgICAgICAiTm90IHZlcnkgY29uZmlkZW50IC0gSXQgZmVlbHMgZm9yZWlnbiIsCiAgICAgICAgICAgICAgICAgICAgIk5lZWQgaGVscCAtIEkgd2FudCBsb2NhbCBwYXJ0bmVyc2hpcCBndWlkYW5jZSIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbnVtYmVyOiA0LAogICAgICAgICAgICAgICAgdGV4dDogIldoYXQgd291bGQgaGVscCB5b3UgZmVlbCBtb3JlICdhdCBob21lJyB3aGVuIGRvaW5nIGJ1c2luZXNzIGluIEFmcmljYT8iLAogICAgICAgICAgICAgICAgb3B0aW9uczogWwogICAgICAgICAgICAgICAgICAgICJVbmRlcnN0YW5kaW5nIHJlbGF0aW9uc2hpcCBwcm90b2NvbHMiLAogICAgICAgICAgICAgICAgICAgICJBIGZyYW1ld29yayBmb3IgYnVpbGRpbmcgTVZScyIsCiAgICAgICAgICAgICAgICAgICAgIk1lbnRvcnNoaXAgZnJvbSBzdWNjZXNzZnVsIGJyaWRnZS1idWlsZGVycyIsCiAgICAgICAgICAgICAgICAgICAgIkFuICdpbnRlcm5zaGlwIG9mIHByb3hpbWl0eScgc3RyYXRlZ3kiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICBdOwoKICAgICAgICBmdW5jdGlvbiBzZWxlY3RJZGVudGl0eShpZGVudGl0eSkgewogICAgICAgICAgICBzZWxlY3RlZElkZW50aXR5ID0gaWRlbnRpdHk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwMScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcDInKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAxLWluZGljYXRvcicpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcDItaW5kaWNhdG9yJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBsb2FkUXVlc3Rpb25zKCk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBsb2FkUXVlc3Rpb25zKCkgewogICAgICAgICAgICBjb25zdCBxdWVzdGlvbnMgPSBzZWxlY3RlZElkZW50aXR5ID09PSAnbW90aGVybGFuZCcgPyBtb3RoZXJsYW5kUXVlc3Rpb25zIDogZGlhc3BvcmFRdWVzdGlvbnM7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkeW5hbWljUXVlc3Rpb25zJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gcXVlc3Rpb25zLm1hcChxID0+IGAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1ZXN0aW9uLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJxdWVzdGlvbi1udW1iZXIiPiR7cS5udW1iZXJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1ZXN0aW9uLXRleHQiPiR7cS50ZXh0fTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9wdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAke3Eub3B0aW9ucy5tYXAoKG9wdCwgaSkgPT4gYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJvcHRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icSR7cS5udW1iZXJ9IiB2YWx1ZT0iJHtpfSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JHtvcHR9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgYCkuam9pbignJyl9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCkuam9pbignJyk7CgogICAgICAgICAgICAvLyBBZGQgY2xpY2sgaGFuZGxlcnMKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9wdGlvbicpLmZvckVhY2gob3B0aW9uID0+IHsKICAgICAgICAgICAgICAgIG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhZGlvID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJyYWRpbyJdJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHJhZGlvLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgaW5wdXRbbmFtZT0iJHtuYW1lfSJdYCkuZm9yRWFjaChyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgci5jbG9zZXN0KCcub3B0aW9uJykuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICAgICAgcmFkaW8uY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnb0JhY2soKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwMicpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcDEnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAyLWluZGljYXRvcicpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcDEtaW5kaWNhdG9yJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgfQoKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXNzZXNzbWVudEZvcm0nKS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKHRoaXMpOwogICAgICAgICAgICBjb25zdCBlbWFpbCA9IGZvcm1EYXRhLmdldCgnZW1haWwnKTsKICAgICAgICAgICAgY29uc3QgZmlyc3ROYW1lID0gZm9ybURhdGEuZ2V0KCdmaXJzdE5hbWUnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNob3cgcmVzdWx0cwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcDInKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAzJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwMi1pbmRpY2F0b3InKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAzLWluZGljYXRvcicpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ3VzdG9taXplIHJlc3VsdHMgbWVzc2FnZQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0c01lc3NhZ2UnKS5pbm5lckhUTUwgPSAKICAgICAgICAgICAgICAgIGBHcmVhdCBqb2IsICR7Zmlyc3ROYW1lfSEgQ2hlY2sgeW91ciBlbWFpbCAoJHtlbWFpbH0pIGZvciB5b3VyIGNvbXBsZXRlIFR3byBIZWFydHMgQXNzZXNzbWVudCByZXN1bHRzIGFuZCBwZXJzb25hbGl6ZWQgYWN0aW9uIHBsYW4uYDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNob3cgcmVjb21tZW5kYXRpb25zCiAgICAgICAgICAgIHNob3dSZWNvbW1lbmRhdGlvbnMoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFRPRE86IFNlbmQgdG8geW91ciBlbWFpbCBzZXJ2aWNlIC8gYmFja2VuZAogICAgICAgICAgICBjb25zb2xlLmxvZygnQXNzZXNzbWVudCBzdWJtaXR0ZWQ6Jywge2lkZW50aXR5OiBzZWxlY3RlZElkZW50aXR5LCBlbWFpbCwgZmlyc3ROYW1lfSk7CiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIHNob3dSZWNvbW1lbmRhdGlvbnMoKSB7CiAgICAgICAgICAgIGNvbnN0IHJlY29tbWVuZGF0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvbW1lbmRhdGlvbnMnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJlY29tbWVuZGF0aW9ucy5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWNvbW1lbmRhdGlvbi1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8aDM+8J+MsSBNb2R1bGUgWmVybzwvaDM+CiAgICAgICAgICAgICAgICAgICAgPHA+R2V0IHlvdXIgZmlyc3QgdGFzdGUhIDkwLW1pbnV0ZSBMSVZFIHdvcmtzaG9wIHRvIG1hcCB5b3VyIFR3byBIZWFydHMgd2l0aCBNYWplc3RpYy48L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPiQ0OTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9lbXBpcmUtYXJjaGl0ZWN0cy10d28taGVhcnRzLW1vZHVsZS16ZXJvIiBjbGFzcz0iY3RhLWJ1dHRvbiI+U3RhcnQgSGVyZSDihpI8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVjb21tZW5kYXRpb24tY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGgzPvCfjq8gU2VsZi1QYWNlZCBNb2R1bGVzPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cD5CdWlsZCB5b3VyIHRvb2xraXQgb25lIG1vZHVsZSBhdCBhIHRpbWUuIENob29zZSB3aGF0IHlvdSBuZWVkIG1vc3QuPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4kOTctJDk5NzwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9lbXBpcmUtYXJjaGl0ZWN0cy10d28taGVhcnRzLW1vZHVsZXMiIGNsYXNzPSJjdGEtYnV0dG9uIj5FeHBsb3JlIE1vZHVsZXMg4oaSPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlY29tbWVuZGF0aW9uLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxoMz7wn5GRIEZ1bGwgTWFzdGVyY2xhc3M8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwPjEyLXdlZWsgaW50ZW5zaXZlIHRyYW5zZm9ybWF0aW9uLiBMaW1pdGVkIHRvIDI1IHBhcnRpY2lwYW50cy48L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPiQ0LDk5NzwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii90d28taGVhcnRzLW1hc3RlcnkiIGNsYXNzPSJjdGEtYnV0dG9uIj5UcmFuc2Zvcm0gTm93IOKGkjwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=","embed":""}
💎
The Two Hearts Assessment™
Discover your unique cultural capital and unlock the competitive advantages hiding in your dual identity.
1
Choose Identity
→
2
Assessment
→
3
Results
First, Tell Us Who You Are
Your journey is unique. Choose the identity that best describes your current reality.
🌍
I Am a Motherland Warrior
I am based on the African continent. I want to understand diaspora partners better and build stronger bridges with those who've left but want to contribute.
💎
I Am a Diaspora Bridge-Builder
I am based abroad but my heart belongs to Africa. I want to navigate motherland relationships and build authentic partnerships that honor both worlds.
Your Two Hearts Assessment
Answer honestly—there are no wrong answers, only insights waiting to be discovered.
🎉 Your Results Are Ready!
Check your email for your complete Two Hearts Assessment results and personalized action plan.