Golf Events & Tournaments
Events
-
-
Summer Golf Stay & Play Package for Two!
Double JJ Resort 5900 Water Rd, Rothbury, MI, United StatesSummer Golf Stay & Play Package for Two Memorial Day – Labor Day 2026 May 25 – September 1, 2026 Escape for a refined summer retreat with our exclusive golf package for two. This offer combines cozy accommodations with a full day on the greens at our premier courses, ensuring a perfect getaway for golf […]
-
-
Double JJ’s Annual Corkscrews & Brews
Thoroughbred Golf Club 5900 S Water Rd, Rothbury, MIPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ29ya3NjcmV3cyAmIEJyZXdzIGF0IERvdWJsZSBKSiBSZXNvcnQg4oCUIGEgZmFsbCBjb2xvciBhbmQgdGFzdGluZyB0b3VyIHRocm91Z2ggdGhlIFRob3JvdWdoYnJlZCBHb2xmIENsdWIgb24gT2N0b2JlciAzIGZyb20gMTEgQU0gdG8gNCBQTS4iPgogIDx0aXRsZT5Db3Jrc2NyZXdzICZhbXA7IEJyZXdzIHwgRG91YmxlIEpKIFJlc29ydDwvdGl0bGU+CiAgPHN0eWxlPgogICAgOnJvb3R7LS13aW5lOiM4ZjE3MTQ7LS13aW5lLWRhcms6IzU0MTAwZjstLXJ1c3Q6I2I4NDIxZjstLWNsYXk6I2RjOTE2ODstLWdvbGQ6I2U5YTMzYjstLWNyZWFtOiNmZmZhZjA7LS1wYXBlcjojZjZlZWRmOy0tZm9yZXN0OiMyODM5MWQ7LS1pbms6IzFlMTkxNTstLW11dGVkOiM2NjViNTA7LS13aGl0ZTojZmZmfQogICAgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9CiAgICBodG1se3Njcm9sbC1iZWhhdmlvcjpzbW9vdGh9CiAgICBib2R5e21hcmdpbjowO2JhY2tncm91bmQ6IzFkMTIwZTtjb2xvcjp2YXIoLS1pbmspO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjEuNX0KICAgIC5ldmVudHtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjEwMHZoO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjI4cHggMTZweCA1MnB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxMiUgOCUscmdiYSgyMzEsMTU0LDU4LC4yNyksdHJhbnNwYXJlbnQgMjQlKSxyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDkxJSA0NSUscmdiYSgxNDMsMjMsMjAsLjI0KSx0cmFuc3BhcmVudCAyNSUpLGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIzJhMTcxMCwjMTIwZDBhIDYwJSwjMmIxODEwKX0KICAgIC5zY3JvbGwtbGluZXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjIwO3RvcDowO2xlZnQ6MDt3aWR0aDowO2hlaWdodDo1cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tZ29sZCksI2VlN2EzNCx2YXIoLS13aW5lKSk7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSgwLDAsMCwuMjUpfQogICAgLmxlYWZ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDozO3RvcDotODBweDtsZWZ0OnZhcigtLXgpO2ZvbnQtc2l6ZTp2YXIoLS1zaXplKTtvcGFjaXR5Oi45O3BvaW50ZXItZXZlbnRzOm5vbmU7ZmlsdGVyOmRyb3Atc2hhZG93KDAgNXB4IDNweCByZ2JhKDAsMCwwLC4yNSkpO2FuaW1hdGlvbjpsZWFmRmFsbCB2YXIoLS1zcGVlZCkgbGluZWFyIHZhcigtLWRlbGF5KSBpbmZpbml0ZX0KICAgIC5zaGVsbHtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7bWF4LXdpZHRoOjExMjBweDttYXJnaW46MCBhdXRvO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWNyZWFtKTtib3JkZXI6NHB4IHNvbGlkICMwZDA5MDc7Ym9yZGVyLXJhZGl1czoyNnB4O2JveC1zaGFkb3c6MCAyMHB4IDAgIzBiMDcwNSwwIDQwcHggODBweCByZ2JhKDAsMCwwLC41NCl9CiAgICAuaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjU3MHB4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDk1MTI4fQogICAgLmhlcm8tcGhvdG97cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXI7b2JqZWN0LXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7ZmlsdGVyOnNhdHVyYXRlKDEuMDcpIGNvbnRyYXN0KDEuMDMpO2FuaW1hdGlvbjpoZXJvRHJpZnQgMTZzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZX0KICAgIC5oZXJvOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7Y29udGVudDoiIjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcscmdiYSgzMSwxOCwxMSwuMTIpLHJnYmEoMzAsMTMsNywuMjQpIDMzJSxyZ2JhKDI5LDEwLDcsLjkzKSAxMDAlKX0KICAgIC5oZXJvLWNvcHl7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjkwMHB4O3BhZGRpbmc6NThweCBjbGFtcCgyMnB4LDZ2dyw2OHB4KTt0ZXh0LWFsaWduOmNlbnRlcn0KICAgIC5raWNrZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDoxMXB4O21hcmdpbjowIDAgMTNweDtjb2xvcjojZmZkMThhO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjkwMDtsZXR0ZXItc3BhY2luZzoyLjVweDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9CiAgICAua2lja2VyOmJlZm9yZSwua2lja2VyOmFmdGVye3dpZHRoOjQycHg7aGVpZ2h0OjJweDtjb250ZW50OiIiO2JhY2tncm91bmQ6I2ZmZDE4YX0KICAgIC5kamotY2ItZXZlbnQgaDF7bWF4LXdpZHRoOjgwMHB4O21hcmdpbjowIGF1dG87Y29sb3I6I2ZmZjtmb250LWZhbWlseTpHZW9yZ2lhLCJUaW1lcyBOZXcgUm9tYW4iLHNlcmlmO2ZvbnQtc2l6ZTpjbGFtcCg1MHB4LDl2dyw4OHB4KTtmb250LXdlaWdodDo5MDA7bGV0dGVyLXNwYWNpbmc6LTRweDtsaW5lLWhlaWdodDouODY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6M3B4IDVweCAwIHJnYmEoNzksMTIsMTAsLjkpLDAgMTBweCAzNXB4IHJnYmEoMCwwLDAsLjUpfQogICAgLmRqai1jYi1ldmVudCBoMSBlbXtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MTNweDtjb2xvcjojZjNhNjRjO2ZvbnQtZmFtaWx5OiJCcnVzaCBTY3JpcHQgTVQiLCJTZWdvZSBTY3JpcHQiLGN1cnNpdmU7Zm9udC1zaXplOi43MmVtO2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzotMnB4fQogICAgLmhlcm8taW50cm97bWF4LXdpZHRoOjY4MHB4O21hcmdpbjoyM3B4IGF1dG8gMDtjb2xvcjojZmZmOWVlO2ZvbnQtc2l6ZTpjbGFtcCgxN3B4LDIuNnZ3LDIxcHgpO2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDJweCA4cHggIzFiMDkwNn0KICAgIC50aWNrZXJ7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOiNmZmY7YmFja2dyb3VuZDp2YXIoLS13aW5lKTtib3JkZXItdG9wOjRweCBzb2xpZCAjZjBhNjUyO2JvcmRlci1ib3R0b206NHB4IHNvbGlkICM1MjEwMGV9CiAgICAudGlja2VyLXRyYWNre2Rpc3BsYXk6ZmxleDt3aWR0aDptYXgtY29udGVudDtwYWRkaW5nOjExcHggMDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo5MDA7bGV0dGVyLXNwYWNpbmc6Mi41cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2FuaW1hdGlvbjp0aWNrZXIgMjRzIGxpbmVhciBpbmZpbml0ZX0KICAgIC50aWNrZXItdHJhY2sgc3BhbntkaXNwbGF5OmJsb2NrO3BhZGRpbmctcmlnaHQ6MzRweDt3aGl0ZS1zcGFjZTpub3dyYXB9CiAgICAudGlja2VyOmhvdmVyIC50aWNrZXItdHJhY2t7YW5pbWF0aW9uLXBsYXktc3RhdGU6cGF1c2VkfQogICAgLmNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzpjbGFtcCgzNnB4LDd2dyw3MHB4KSBjbGFtcCgyMHB4LDZ2dyw2NXB4KSA2MHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY3JlYW0pO2JhY2tncm91bmQtaW1hZ2U6cmFkaWFsLWdyYWRpZW50KHJnYmEoMTU1LDQzLDI3LC4wOSkgMS4ycHgsdHJhbnNwYXJlbnQgMS4ycHgpO2JhY2tncm91bmQtc2l6ZToxM3B4IDEzcHh9CiAgICAuc3RhbXAtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsLjk2ZnIpIG1pbm1heCgwLDEuMDRmcik7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozMnB4O21heC13aWR0aDo5NDBweDttYXJnaW46MCBhdXRvIDU4cHh9CiAgICAuc3RhbXAtcm93Pip7bWluLXdpZHRoOjB9CiAgICAuZGpqLWNiLWV2ZW50IC5zdGFtcHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7d2lkdGg6bWluKDEwMCUsNDIwcHgpO21heC13aWR0aDo0MjBweDthc3BlY3QtcmF0aW86MTttYXJnaW46YXV0bztwbGFjZS1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MzJweDtjb2xvcjojMTkxNDEwO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6NXB4IHNvbGlkICMyMTFhMTU7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzowIDAgMCA4cHggI2ZmZiwwIDAgMCAxMXB4ICMyMTFhMTUsMCAxN3B4IDMycHggcmdiYSg2OCwyOCwxNywuMik7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjM1cyBlYXNlfQogICAgLmRqai1jYi1ldmVudCAuc3RhbXA6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjE1cHg7Y29udGVudDoiIjtib3JkZXI6M3B4IGRhc2hlZCAjMjExYTE1O2JvcmRlci1yYWRpdXM6NTAlfQogICAgLmRqai1jYi1ldmVudCAuc3RhbXA6aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMDI1KX0KICAgIC5kamotY2ItZXZlbnQgLnN0YW1wIHNtYWxsLC5kamotY2ItZXZlbnQgLnN0YW1wIHN0cm9uZywuZGpqLWNiLWV2ZW50IC5zdGFtcCBzcGFue3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyfQogICAgLmRqai1jYi1ldmVudCAuc3RhbXAgc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6OTAwO2xldHRlci1zcGFjaW5nOjEuNXB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KICAgIC5kamotY2ItZXZlbnQgLnN0YW1wIHN0cm9uZ3t3aWR0aDoxMDAlO21hcmdpbjo4cHggMCAzcHg7Zm9udC1mYW1pbHk6R2VvcmdpYSwiVGltZXMgTmV3IFJvbWFuIixzZXJpZjtmb250LXNpemU6Y2xhbXAoMjRweCwyLjd2dywzMXB4KSFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6OTAwO2xldHRlci1zcGFjaW5nOi0xcHg7bGluZS1oZWlnaHQ6Ljk7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTE0cHgpIHNjYWxlWCguOSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9CiAgICAuZGpqLWNiLWV2ZW50IC5zdGFtcCBzdHJvbmcgZW17ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjhweDtjb2xvcjp2YXIoLS13aW5lKTtmb250LWZhbWlseToiQnJ1c2ggU2NyaXB0IE1UIiwiU2Vnb2UgU2NyaXB0IixjdXJzaXZlO2ZvbnQtc2l6ZToxLjNlbSFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOi0xcHg7bGluZS1oZWlnaHQ6Ljk7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lfQogICAgLmRqai1jYi1ldmVudCAuc3RhbXAgc3Bhbntmb250LXNpemU6MTFweDtmb250LXdlaWdodDo5MDA7bGV0dGVyLXNwYWNpbmc6MS4ycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfQogICAgLmRqai1jYi1ldmVudCAuc3RhbXAsLmRqai1jYi1ldmVudCAuc3RhbXA6YmVmb3JlLC5kamotY2ItZXZlbnQgLnN0YW1wOmFmdGVye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7Y29udGVudDpub25lIWltcG9ydGFudH0KICAgIC5kamotY2ItZXZlbnQgLnN0YW1wLWxvZ297cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazt3aWR0aDptaW4oMTAwJSw0MjBweCk7bWF4LXdpZHRoOjQyMHB4O2hlaWdodDphdXRvO2FzcGVjdC1yYXRpbzoxO21hcmdpbjphdXRvO29iamVjdC1maXQ6Y29udGFpbjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMzVzIGVhc2V9CiAgICAuZGpqLWNiLWV2ZW50IC5zdGFtcC1sb2dvOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjAyNSl9CiAgICAuaW50cm8gaDJ7bWFyZ2luOjA7Y29sb3I6dmFyKC0td2luZS1kYXJrKTtmb250LWZhbWlseTpHZW9yZ2lhLCJUaW1lcyBOZXcgUm9tYW4iLHNlcmlmO2ZvbnQtc2l6ZTpjbGFtcCgzNHB4LDZ2dyw1NHB4KTtsaW5lLWhlaWdodDouOTh9CiAgICAuaW50cm8gaDIgZW17Y29sb3I6dmFyKC0tcnVzdCk7Zm9udC13ZWlnaHQ6NTAwfQogICAgLmludHJvIHB7bWFyZ2luOjIwcHggMCAwO2NvbG9yOiM0NjM4MmU7Zm9udC1zaXplOmNsYW1wKDE3cHgsMi41dncsMjBweCk7bGluZS1oZWlnaHQ6MS43fQogICAgLmludHJvIHN0cm9uZ3tjb2xvcjp2YXIoLS13aW5lKX0KICAgIC5kZXRhaWxze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsbWlubWF4KDAsMWZyKSk7Z2FwOjE1cHg7bWF4LXdpZHRoOjk0MHB4O21hcmdpbjowIGF1dG8gNTVweH0KICAgIC5kZXRhaWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O21pbi13aWR0aDowO21pbi1oZWlnaHQ6MTcwcHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MjRweCAxNnB4IDIycHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsI2M5NmI0MiwjYTIyZDFlKTtib3JkZXI6MnB4IHNvbGlkICM3ZTFlMTY7Ym9yZGVyLXJhZGl1czo1cHg7Ym94LXNoYWRvdzowIDhweCAwICM2ZDFhMTQsMCAxNXB4IDI2cHggcmdiYSgxMDAsMzYsMjAsLjIpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgZWFzZSxib3gtc2hhZG93IC4yNXMgZWFzZX0KICAgIC5kZXRhaWw6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE5cHg7Ym90dG9tOi0yNXB4O3dpZHRoOjc1cHg7aGVpZ2h0Ojc1cHg7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA5KTtib3JkZXItcmFkaXVzOjUwJX0KICAgIC5kZXRhaWw6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTZweCk7Ym94LXNoYWRvdzowIDE0cHggMCAjNmQxYTE0LDAgMjBweCAzMHB4IHJnYmEoMTAwLDM2LDIwLC4yNCl9CiAgICAuZGV0YWlsIHNtYWxse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo3cHg7Y29sb3I6I2ZmZTdjNTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo5MDA7bGV0dGVyLXNwYWNpbmc6MnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KICAgIC5kamotY2ItZXZlbnQgLmRldGFpbCBzdHJvbmd7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwJTtmb250LWZhbWlseTpHZW9yZ2lhLCJUaW1lcyBOZXcgUm9tYW4iLHNlcmlmO2ZvbnQtc2l6ZTpjbGFtcCgyMnB4LDIuM3Z3LDMwcHgpO2xpbmUtaGVpZ2h0OjEuMDU7d2hpdGUtc3BhY2U6bm9ybWFsfQogICAgLmRqai1jYi1ldmVudCAuZGV0YWlsLWxvY2F0aW9uIHN0cm9uZ3tmb250LXNpemU6Y2xhbXAoMTlweCwxLjh2dywyNHB4KSFpbXBvcnRhbnQ7bGV0dGVyLXNwYWNpbmc6LS40cHg7bGluZS1oZWlnaHQ6MS4wOH0KICAgIC5kamotY2ItZXZlbnQgLmRldGFpbHMgLmRldGFpbC1sb2NhdGlvbn4uZGV0YWlsLWxvY2F0aW9ue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9CiAgICAuZGpqLWNiLWV2ZW50IC5kZXRhaWwgc3Vwe2ZvbnQtc2l6ZTouNThlbTtsaW5lLWhlaWdodDowfQogICAgLnRvdXItdGl0bGV7bWFyZ2luOjAgMCAyNHB4O2NvbG9yOiM2ZDFhMTQ7Zm9udC1mYW1pbHk6R2VvcmdpYSwiVGltZXMgTmV3IFJvbWFuIixzZXJpZjtmb250LXNpemU6Y2xhbXAoMzBweCw1dncsNDRweCk7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcn0KICAgIC5yb3V0ZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjE0cHg7bWF4LXdpZHRoOjk0MHB4O21hcmdpbjowIGF1dG8gNTZweH0KICAgIC5yb3V0ZTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjM5cHg7cmlnaHQ6OCU7bGVmdDo4JTtoZWlnaHQ6NHB4O2NvbnRlbnQ6IiI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0td2luZSksdmFyKC0tZ29sZCksdmFyKC0tZm9yZXN0KSx2YXIoLS13aW5lKSk7Ym9yZGVyLXJhZGl1czo0cHh9CiAgICAuc3RvcHtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7dGV4dC1hbGlnbjpjZW50ZXJ9CiAgICAuc3RvcC1pY29ue3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6ODRweDtoZWlnaHQ6ODRweDttYXJnaW46MCBhdXRvIDE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6NHB4IHNvbGlkIHZhcigtLXdpbmUpO2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6MCA2cHggMCAjZDViZmEyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLGJhY2tncm91bmQgLjNzIGVhc2V9CiAgICAuc3RvcC1pY29uIC5lbW9qaXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjUycHg7bGluZS1oZWlnaHQ6MTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUyJSkgc2NhbGUoMS4xMik7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMnB4IDFweCByZ2JhKDYyLDM2LDI1LC4xNCkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfQogICAgLnN0b3AtaWNvbiAuZW1vamktZ29sZnt0cmFuc2Zvcm06dHJhbnNsYXRlKC00OCUsLTQ4JSkgc2NhbGUoMS4xKX0KICAgIC5zdG9wLWljb24gLmVtb2ppLXdpbmV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC00OSUpIHNjYWxlKDEuMTQpfQogICAgLnN0b3AtaWNvbiAuZW1vamktbGVhZnt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4xNil9CiAgICAuc3RvcC1pY29uIC5lbW9qaS13aWRle2ZvbnQtc2l6ZTo0NXB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjE0KX0KICAgIC5zdG9wOmhvdmVyIC5zdG9wLWljb257YmFja2dyb3VuZDojZmZmMGQ2O3RyYW5zZm9ybTpyb3RhdGUoLTdkZWcpIHNjYWxlKDEuMDgpfQogICAgLnN0b3A6aG92ZXIgLnN0b3AtaWNvbiAuZW1vaml7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MiUpIHNjYWxlKDEuMjIpIHJvdGF0ZSg1ZGVnKX0KICAgIC5zdG9wIHN0cm9uZ3tkaXNwbGF5OmJsb2NrO2NvbG9yOiMzZTI0MTk7Zm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS4yNX0KICAgIC5zdG9wIHNwYW57ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjRweDtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS4zNX0KICAgIC50aWNrZXQtd3JhcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjEuMmZyIC44ZnI7bWF4LXdpZHRoOjk0MHB4O21hcmdpbjowIGF1dG87b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6M3B4IHNvbGlkICMyYzIxMWE7Ym9yZGVyLXJhZGl1czoyMHB4O2JveC1zaGFkb3c6MCAxNHB4IDM1cHggcmdiYSg1OCwyOSwxOCwuMTgpfQogICAgLnRpY2tldHN7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzozNHB4O2JhY2tncm91bmQ6I2ZmZmRmOH0KICAgIC50aWNrZXRzOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0Oi0xMHB4O3dpZHRoOjIwcHg7aGVpZ2h0OjEwMCU7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTBweCAxMHB4LHRyYW5zcGFyZW50IDlweCwjZmZmZGY4IDEwcHgpO2JhY2tncm91bmQtc2l6ZToyMHB4IDIycHh9CiAgICAudGlja2V0cyBoMnttYXJnaW46MDtjb2xvcjp2YXIoLS13aW5lKTtmb250LWZhbWlseTpHZW9yZ2lhLCJUaW1lcyBOZXcgUm9tYW4iLHNlcmlmO2ZvbnQtc2l6ZTpjbGFtcCgzMHB4LDV2dyw0M3B4KTtsaW5lLWhlaWdodDoxfQogICAgLnRpY2tldC1vcHRpb25ze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTFweDttYXJnaW46MjBweCAwIDEzcHh9CiAgICAudGlja2V0LW9wdGlvbntmbGV4OjEgMSAxNTBweDtwYWRkaW5nOjE1cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWZvcmVzdCk7Ym9yZGVyLXJhZGl1czoxMHB4fQogICAgLnRpY2tldC1vcHRpb24gc3Ryb25ne2Rpc3BsYXk6YmxvY2s7Y29sb3I6I2ZmZDg4ZTtmb250LWZhbWlseTpHZW9yZ2lhLCJUaW1lcyBOZXcgUm9tYW4iLHNlcmlmO2ZvbnQtc2l6ZToyN3B4fQogICAgLnRpY2tldC1vcHRpb24gc3Bhbntmb250LXNpemU6MTNweDtmb250LXdlaWdodDo4MDB9CiAgICAucG91cnttYXJnaW46MDtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC13ZWlnaHQ6NzAwfQogICAgLmFjdGlvbntkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3BhZGRpbmc6MzRweCAyOHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCM4ZjE3MTQsIzVjMGYwZSl9CiAgICAuY2FydHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDVweDtoZWlnaHQ6NzZweDttYXJnaW46MCBhdXRvIDE0cHg7YW5pbWF0aW9uOmNhcnRCb3VuY2UgMi43cyBlYXNlLWluLW91dCBpbmZpbml0ZX0KICAgIC5jYXJ0LXJvb2Z7cG9zaXRpb246YWJzb2x1dGU7dG9wOjRweDtsZWZ0OjlweDt3aWR0aDo4MnB4O2hlaWdodDo3cHg7Ym9yZGVyOjRweCBzb2xpZCAjZmZkMThhO2JvcmRlci1yYWRpdXM6OHB4fQogICAgLmNhcnQtcm9vZjpiZWZvcmUsLmNhcnQtcm9vZjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3dpZHRoOjRweDtoZWlnaHQ6NDBweDtjb250ZW50OiIiO2JhY2tncm91bmQ6I2ZmZDE4YX0KICAgIC5jYXJ0LXJvb2Y6YmVmb3Jle2xlZnQ6NXB4O3RyYW5zZm9ybTpyb3RhdGUoOWRlZyl9CiAgICAuY2FydC1yb29mOmFmdGVye3JpZ2h0OjVweH0KICAgIC5jYXJ0LWJvZHl7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjE0cHg7bGVmdDo5cHg7d2lkdGg6ODdweDtoZWlnaHQ6MzBweDtib3JkZXI6NHB4IHNvbGlkICNmZmQxOGE7Ym9yZGVyLXJhZGl1czo3cHggMTdweCA4cHggOHB4fQogICAgLmNhcnQtYm9keTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotOHB4O2JvdHRvbTozcHg7d2lkdGg6MTdweDtoZWlnaHQ6MTNweDtjb250ZW50OiIiO2JvcmRlci10b3A6NHB4IHNvbGlkICNmZmQxOGE7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCAjZmZkMThhO2JvcmRlci1yYWRpdXM6MCAxM3B4IDAgMDt0cmFuc2Zvcm06c2tld1goMThkZWcpfQogICAgLmNhcnQtc2VhdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjlweDtsZWZ0OjUxcHg7d2lkdGg6MjhweDtoZWlnaHQ6MTVweDtib3JkZXItdG9wOjVweCBzb2xpZCAjZmZkMThhO2JvcmRlci1yaWdodDo0cHggc29saWQgI2ZmZDE4YTtib3JkZXItcmFkaXVzOjRweH0KICAgIC53aGVlbHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjI7Ym90dG9tOjA7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiM2ZDEwMGY7Ym9yZGVyOjVweCBzb2xpZCAjZmZkMThhO2JvcmRlci1yYWRpdXM6NTAlfQogICAgLndoZWVsLW9uZXtsZWZ0OjE4cHh9LndoZWVsLXR3b3tyaWdodDoxMXB4fQogICAgLmFjdGlvbiBzdHJvbmd7ZGlzcGxheTpibG9jazttYXJnaW46MTBweCAwIDVweDtmb250LXNpemU6MTlweDtsaW5lLWhlaWdodDoxLjJ9CiAgICAuYWN0aW9uIHNwYW57ZGlzcGxheTpibG9jaztjb2xvcjojZjVkOWM0O2ZvbnQtc2l6ZToxNHB4fQogICAgLmNhbGx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxOHB4O3BhZGRpbmc6MTNweCAxOHB4O2NvbG9yOiM1ODEwMGU7Zm9udC13ZWlnaHQ6OTAwO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQ6I2Y0YjA1OTtib3JkZXI6M3B4IHNvbGlkICNmZmQzOTU7Ym9yZGVyLXJhZGl1czo4cHg7Ym94LXNoYWRvdzowIDZweCAwICMzZDBiMGE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE4cyBlYXNlLGJveC1zaGFkb3cgLjE4cyBlYXNlfQogICAgLmNhbGw6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTNweCk7Ym94LXNoYWRvdzowIDlweCAwICMzZDBiMGF9CiAgICAubm90ZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpO2dhcDoxNHB4O21heC13aWR0aDo5NDBweDttYXJnaW46MjRweCBhdXRvIDB9CiAgICAubm90ZXtwYWRkaW5nOjE4cHg7Y29sb3I6IzQ5MzkyZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmMGRmYzY7Ym9yZGVyOjJweCBzb2xpZCAjZDViOThkO2JvcmRlci1yYWRpdXM6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDB9CiAgICAubm90ZSBzdHJvbmd7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNweDtjb2xvcjp2YXIoLS13aW5lKTtmb250LXNpemU6MTZweH0KICAgIC5zaHV0dGxle2dyaWQtY29sdW1uOjEvLTE7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLXdpbmUpO2JvcmRlci1jb2xvcjojNWQwZDBifQogICAgLnNodXR0bGUgc3Ryb25ne2NvbG9yOiNmZmQwODd9CiAgICAuZm9vdGVye3BhZGRpbmc6MjdweCAyMHB4O2NvbG9yOiNlYWRiYzk7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojMWQxMzBmO2JvcmRlci10b3A6NHB4IHNvbGlkIHZhcigtLWdvbGQpfQogICAgLmZvb3RlciBzdHJvbmd7Y29sb3I6I2ZmZjtmb250LXNpemU6MThweH0KICAgIC5mb290ZXIgYXtjb2xvcjojZjJhNzRlO2ZvbnQtd2VpZ2h0OjkwMDt0ZXh0LWRlY29yYXRpb246bm9uZX0KICAgIC5yZXZlYWx7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI0cHgpO3RyYW5zaXRpb246b3BhY2l0eSAuNjVzIGVhc2UsdHJhbnNmb3JtIC42NXMgZWFzZX0KICAgIC5yZXZlYWwudmlzaWJsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmV9CiAgICBhOmZvY3VzLXZpc2libGV7b3V0bGluZTo0cHggc29saWQgI2ZmZDE2ZDtvdXRsaW5lLW9mZnNldDo0cHh9CiAgICBAa2V5ZnJhbWVzIGhlcm9EcmlmdHswJXt0cmFuc2Zvcm06c2NhbGUoMS4wMSkgdHJhbnNsYXRlM2QoMCwwLDApfTEwMCV7dHJhbnNmb3JtOnNjYWxlKDEuMDcpIHRyYW5zbGF0ZTNkKC0xLjMlLDElLDApfX0KICAgIEBrZXlmcmFtZXMgdGlja2Vye3Rve3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfX0KICAgIEBrZXlmcmFtZXMgbGVhZkZhbGx7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTgwcHgsMCkgcm90YXRlKDApO29wYWNpdHk6MH04JXtvcGFjaXR5Oi45fTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLWRyaWZ0KSwxMjUwcHgsMCkgcm90YXRlKDU0MGRlZyk7b3BhY2l0eTouMTV9fQogICAgQGtleWZyYW1lcyBjYXJ0Qm91bmNlezAlLDEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCkgcm90YXRlKC0yZGVnKX01MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTdweCkgcm90YXRlKDJkZWcpfX0KICAgIEBtZWRpYShtYXgtd2lkdGg6NzgwcHgpey5oZXJve21pbi1oZWlnaHQ6NTQwcHh9LnN0YW1wLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKX0uZGpqLWNiLWV2ZW50IC5zdGFtcHt3aWR0aDptaW4oMTAwJSwzNTBweCk7bWF4LXdpZHRoOjM1MHB4fS5kamotY2ItZXZlbnQgLnN0YW1wIHN0cm9uZ3tmb250LXNpemU6MjhweCFpbXBvcnRhbnR9LmRldGFpbHN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcil9LmRqai1jYi1ldmVudCAuZGV0YWlsIHN0cm9uZ3tmb250LXNpemU6MjhweH0uZGpqLWNiLWV2ZW50IC5kZXRhaWwtbG9jYXRpb24gc3Ryb25ne2ZvbnQtc2l6ZToyNHB4IWltcG9ydGFudH0ucm91dGV7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLG1pbm1heCgwLDFmcikpO3Jvdy1nYXA6MjhweH0ucm91dGU6YmVmb3Jle2Rpc3BsYXk6bm9uZX0udGlja2V0LXdyYXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcil9LnRpY2tldHM6YWZ0ZXJ7ZGlzcGxheTpub25lfS5ub3Rlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKX0uc2h1dHRsZXtncmlkLWNvbHVtbjphdXRvfS5oZXJvLWNvcHl7cGFkZGluZy1ib3R0b206NDNweH19CiAgICBAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsuZXZlbnR7cGFkZGluZzo4cHggNnB4IDM1cHh9LnNoZWxse2JvcmRlci13aWR0aDozcHg7Ym9yZGVyLXJhZGl1czoxNnB4fS5oZXJve21pbi1oZWlnaHQ6NTIwcHh9Lmhlcm8tcGhvdG97b2JqZWN0LXBvc2l0aW9uOmNlbnRlciBjZW50ZXJ9LmtpY2tlcntmb250LXNpemU6MTFweDtsZXR0ZXItc3BhY2luZzoxLjVweH0ua2lja2VyOmJlZm9yZSwua2lja2VyOmFmdGVye3dpZHRoOjE4cHh9LmRqai1jYi1ldmVudCBoMXtmb250LXNpemU6Y2xhbXAoNDBweCwxM3Z3LDQ4cHgpO2xldHRlci1zcGFjaW5nOi0ycHh9Lmhlcm8tY29weXtwYWRkaW5nLXJpZ2h0OjE4cHg7cGFkZGluZy1sZWZ0OjE4cHh9LmNvbnRlbnR7cGFkZGluZy1yaWdodDoxMnB4O3BhZGRpbmctbGVmdDoxMnB4fS5kamotY2ItZXZlbnQgLnN0YW1we3dpZHRoOm1pbigxMDAlLDMwMHB4KTttYXgtd2lkdGg6MzAwcHg7cGFkZGluZzoyNHB4fS5kamotY2ItZXZlbnQgLnN0YW1wIHN0cm9uZ3tmb250LXNpemU6MjNweCFpbXBvcnRhbnR9LmRqai1jYi1ldmVudCAuc3RhbXAgc3Ryb25nIGVte2ZvbnQtc2l6ZToxLjI1ZW0haW1wb3J0YW50fS5kamotY2ItZXZlbnQgLnN0YW1wIHNtYWxsLC5kamotY2ItZXZlbnQgLnN0YW1wIHNwYW57Zm9udC1zaXplOjlweDtsZXR0ZXItc3BhY2luZzoxcHh9LmRldGFpbHttaW4taGVpZ2h0OjE0NXB4fS5kamotY2ItZXZlbnQgLmRldGFpbCBzdHJvbmd7Zm9udC1zaXplOjI3cHh9LmRqai1jYi1ldmVudCAuZGV0YWlsLWxvY2F0aW9uIHN0cm9uZ3tmb250LXNpemU6MjJweCFpbXBvcnRhbnR9LnJvdXRle2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpfS50aWNrZXQtb3B0aW9uc3tkaXNwbGF5OmdyaWR9LnRpY2tldHMsLmFjdGlvbntwYWRkaW5nOjI3cHggMThweH0ubGVhZntkaXNwbGF5Om5vbmV9fQogICAgQG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXtodG1se3Njcm9sbC1iZWhhdmlvcjphdXRvfS5sZWFme2Rpc3BsYXk6bm9uZX0uaGVyby1waG90bywudGlja2VyLXRyYWNrLC5jYXJ0e2FuaW1hdGlvbjpub25lfS5yZXZlYWx7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246bm9uZX0uZGV0YWlsLC5zdG9wLWljb24sLnN0b3AtaWNvbiAuZW1vamksLnN0YW1wLC5jYWxse3RyYW5zaXRpb246bm9uZX0uc3RvcDpob3ZlciAuc3RvcC1pY29ue3RyYW5zZm9ybTpub25lfS5zdG9wOmhvdmVyIC5zdG9wLWljb24gLmVtb2ppe3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTIlKSBzY2FsZSgxLjEyKX19CiAgICBAbWVkaWEobWF4LXdpZHRoOjc4MHB4KXsuaGVyb3ttaW4taGVpZ2h0OjU0MHB4fS5zdGFtcC1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcil9LmRqai1jYi1ldmVudCAuc3RhbXAtbG9nb3t3aWR0aDptaW4oMTAwJSwzNTBweCk7bWF4LXdpZHRoOjM1MHB4fS5kZXRhaWxze2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpfS5kamotY2ItZXZlbnQgLmRldGFpbCBzdHJvbmd7Zm9udC1zaXplOjI4cHh9LmRqai1jYi1ldmVudCAuZGV0YWlsLWxvY2F0aW9uIHN0cm9uZ3tmb250LXNpemU6MjRweCFpbXBvcnRhbnR9LnJvdXRle2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKTtyb3ctZ2FwOjI4cHh9LnJvdXRlOmJlZm9yZXtkaXNwbGF5Om5vbmV9LnRpY2tldC13cmFwe2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpfS50aWNrZXRzOmFmdGVye2Rpc3BsYXk6bm9uZX0ubm90ZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcil9LnNodXR0bGV7Z3JpZC1jb2x1bW46YXV0b30uaGVyby1jb3B5e3BhZGRpbmctYm90dG9tOjQzcHh9fQogICAgQG1lZGlhKG1heC13aWR0aDo0ODBweCl7LmV2ZW50e3BhZGRpbmc6OHB4IDZweCAzNXB4fS5zaGVsbHtib3JkZXItd2lkdGg6M3B4O2JvcmRlci1yYWRpdXM6MTZweH0uaGVyb3ttaW4taGVpZ2h0OjUyMHB4fS5oZXJvLXBob3Rve29iamVjdC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyfS5raWNrZXJ7Zm9udC1zaXplOjExcHg7bGV0dGVyLXNwYWNpbmc6MS41cHh9LmtpY2tlcjpiZWZvcmUsLmtpY2tlcjphZnRlcnt3aWR0aDoxOHB4fS5kamotY2ItZXZlbnQgaDF7Zm9udC1zaXplOmNsYW1wKDQwcHgsMTN2dyw0OHB4KTtsZXR0ZXItc3BhY2luZzotMnB4fS5oZXJvLWNvcHl7cGFkZGluZy1yaWdodDoxOHB4O3BhZGRpbmctbGVmdDoxOHB4fS5jb250ZW50e3BhZGRpbmctcmlnaHQ6MTJweDtwYWRkaW5nLWxlZnQ6MTJweH0uZGpqLWNiLWV2ZW50IC5zdGFtcC1sb2dve3dpZHRoOm1pbigxMDAlLDMwMHB4KTttYXgtd2lkdGg6MzAwcHh9LmRldGFpbHttaW4taGVpZ2h0OjE0NXB4fS5kamotY2ItZXZlbnQgLmRldGFpbCBzdHJvbmd7Zm9udC1zaXplOjI3cHh9LmRqai1jYi1ldmVudCAuZGV0YWlsLWxvY2F0aW9uIHN0cm9uZ3tmb250LXNpemU6MjJweCFpbXBvcnRhbnR9LnJvdXRle2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpfS50aWNrZXQtb3B0aW9uc3tkaXNwbGF5OmdyaWR9LnRpY2tldHMsLmFjdGlvbntwYWRkaW5nOjI3cHggMThweH0ubGVhZntkaXNwbGF5Om5vbmV9fQogICAgQG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXtodG1se3Njcm9sbC1iZWhhdmlvcjphdXRvfS5sZWFme2Rpc3BsYXk6bm9uZX0uaGVyby1waG90bywudGlja2VyLXRyYWNrLC5jYXJ0e2FuaW1hdGlvbjpub25lfS5yZXZlYWx7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246bm9uZX0uZGV0YWlsLC5zdG9wLWljb24sLnN0b3AtaWNvbiAuZW1vamksLnN0YW1wLWxvZ28sLmNhbGx7dHJhbnNpdGlvbjpub25lfS5zdG9wOmhvdmVyIC5zdG9wLWljb257dHJhbnNmb3JtOm5vbmV9LnN0b3A6aG92ZXIgLnN0b3AtaWNvbiAuZW1vaml7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MiUpIHNjYWxlKDEuMTIpfX0KICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxkaXYgY2xhc3M9InNjcm9sbC1saW5lIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgPG1haW4gY2xhc3M9ImV2ZW50IGRqai1jYi1ldmVudCI+CiAgICA8c3BhbiBjbGFzcz0ibGVhZiIgc3R5bGU9Ii0teDo1JTstLXNpemU6MjhweDstLXNwZWVkOjEzczstLWRlbGF5Oi0yczstLWRyaWZ0OjkwcHgiIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn42CPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImxlYWYiIHN0eWxlPSItLXg6MTglOy0tc2l6ZToyMXB4Oy0tc3BlZWQ6MTZzOy0tZGVsYXk6LTEwczstLWRyaWZ0Oi00NXB4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+8J+NgTwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJsZWFmIiBzdHlsZT0iLS14OjM4JTstLXNpemU6MjZweDstLXNwZWVkOjE1czstLWRlbGF5Oi01czstLWRyaWZ0OjcwcHgiIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn42CPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImxlYWYiIHN0eWxlPSItLXg6NjAlOy0tc2l6ZToyM3B4Oy0tc3BlZWQ6MThzOy0tZGVsYXk6LTEzczstLWRyaWZ0Oi04MHB4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+8J+NgTwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJsZWFmIiBzdHlsZT0iLS14Ojc2JTstLXNpemU6MzBweDstLXNwZWVkOjE0czstLWRlbGF5Oi03czstLWRyaWZ0OjQwcHgiIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn42CPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImxlYWYiIHN0eWxlPSItLXg6OTIlOy0tc2l6ZToyMnB4Oy0tc3BlZWQ6MTdzOy0tZGVsYXk6LTE1czstLWRyaWZ0Oi02NXB4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+8J+NgTwvc3Bhbj4KICAgIDxhcnRpY2xlIGNsYXNzPSJzaGVsbCIgYXJpYS1sYWJlbGxlZGJ5PSJldmVudC10aXRsZSI+CiAgICAgIDxoZWFkZXIgY2xhc3M9Imhlcm8iPgogICAgICAgIDxpbWcgY2xhc3M9Imhlcm8tcGhvdG8iIHNyYz0iaHR0cHM6Ly9kb3VibGVqai5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDgvQ29kZXgtSW1hZ2UtQXVnLTI0LTIwMjYtMTBfMzRfMzAtQU0uanBnIiBhbHQ9IlN1bnNldCBvdmVyIHRoZSByb2xsaW5nIGhpbGxzIGFuZCBnb2xmIGNvdXJzZSBhdCBEb3VibGUgSkogUmVzb3J0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWNvcHkiPgogICAgICAgICAgPHAgY2xhc3M9ImtpY2tlciI+RmFsbCBDb2xvciAmYW1wOyBUYXN0aW5nIFRvdXI8L3A+CiAgICAgICAgICA8aDEgaWQ9ImV2ZW50LXRpdGxlIj5Db3Jrc2NyZXdzIDxlbT4mYW1wOyBCcmV3czwvZW0+PC9oMT4KICAgICAgICAgIDxwIGNsYXNzPSJoZXJvLWludHJvIj5TaXAsIHNhbXBsZSwgYW5kIGV4cGxvcmUgdGhlIHJvbGxpbmcgaGlsbHMgb2YgVGhvcm91Z2hicmVkIEdvbGYgQ2x1YuKAlHN1cnJvdW5kZWQgYnkgZXZlcnl0aGluZyB0aGF0IG1ha2VzIGZhbGwgaW4gTWljaGlnYW4gc28gc3BlY2lhbC48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaGVhZGVyPgogICAgICA8ZGl2IGNsYXNzPSJ0aWNrZXIiIGFyaWEtbGFiZWw9IkNyYWZ0IGJlZXIsIHdpbmUsIGVudGVydGFpbm1lbnQsIGFuZCBmYWxsIGNvbG9yIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWNrZXItdHJhY2siIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgIDxzcGFuPkNyYWZ0IEJlZXImbmJzcDsg4oCiICZuYnNwO1dpbmUmbmJzcDsg4oCiICZuYnNwO0VudGVydGFpbm1lbnQmbmJzcDsg4oCiICZuYnNwO0ZhbGwgQ29sb3ImbmJzcDsg4oCiICZuYnNwO1Rhc3RpbmcgVG91ciZuYnNwOyDigKIgJm5ic3A7PC9zcGFuPgogICAgICAgICAgPHNwYW4+Q3JhZnQgQmVlciZuYnNwOyDigKIgJm5ic3A7V2luZSZuYnNwOyDigKIgJm5ic3A7RW50ZXJ0YWlubWVudCZuYnNwOyDigKIgJm5ic3A7RmFsbCBDb2xvciZuYnNwOyDigKIgJm5ic3A7VGFzdGluZyBUb3VyJm5ic3A7IOKAoiAmbmJzcDs8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RhbXAtcm93IHJldmVhbCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGFtcCIgYXJpYS1oaWRkZW49InRydWUiPjxzbWFsbD5DcmFmdCBCZWVyIOKAoiBXaW5lPC9zbWFsbD48c3Ryb25nPkNvcmtzY3Jld3MgPGVtPiZhbXA7IEJyZXdzPC9lbT48L3N0cm9uZz48c3Bhbj5Sb3RoYnVyeSwgTWljaGlnYW48L3NwYW4+PC9kaXY+CiAgICAgICAgICA8aW1nIGNsYXNzPSJzdGFtcC1sb2dvIiBzcmM9Imh0dHBzOi8vZG91YmxlamouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA4L2V4ZWMtNjdhYTE3ZDQtYzkxOC00YjM1LTg3ZWItNmJhZmRhYjhmNjFjLnBuZyIgYWx0PSJDb3Jrc2NyZXdzIGFuZCBCcmV3cyDigJQgY3JhZnQgYmVlciwgd2luZSwgZW50ZXJ0YWlubWVudCwgZmFsbCBjb2xvciBhbmQgdGFzdGluZyB0b3VyIGF0IERvdWJsZSBKSiBSZXNvcnQgaW4gUm90aGJ1cnksIE1pY2hpZ2FuIiBsb2FkaW5nPSJsYXp5IiBkZWNvZGluZz0iYXN5bmMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW50cm8iPgogICAgICAgICAgICA8aDI+RmFsbCB0YXN0ZXMgYmV0dGVyIDxlbT5vdXQgaGVyZS48L2VtPjwvaDI+CiAgICAgICAgICAgIDxwPkVuam95IGEgZmFsbCBjb2xvciBhbmQgdGFzdGluZyB0b3VyIHRocm91Z2ggdGhlIHJvbGxpbmcgaGlsbHMgb2YgdGhlIFRob3JvdWdoYnJlZCBHb2xmIENsdWIuIEF0IGVhY2ggc3RvcCwgY2hvb3NlIGEgPHN0cm9uZz5jcmFmdCBiZWVyIG9yIHdpbmUgc2FtcGxlPC9zdHJvbmc+IGFuZCB0YWtlIGluIHRoZSB2aWJyYW50IGNvbG9ycyBvZiB0aGUgc2Vhc29uLjwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMgcmV2ZWFsIiBhcmlhLWxhYmVsPSJFdmVudCBkZXRhaWxzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbCI+PHNtYWxsPlNhdmUgdGhlIGRhdGU8L3NtYWxsPjxzdHJvbmc+T2N0b2JlciAzPHN1cD5yZDwvc3VwPjwvc3Ryb25nPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsIGRldGFpbC1sb2NhdGlvbiI+PHNtYWxsPk1lZXQgdXMgYXQ8L3NtYWxsPjxzdHJvbmc+VGhvcm91Z2hicmVkPGJyPkdvbGYgQ2x1Yjwvc3Ryb25nPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsIj48c21hbGw+VG91ciBob3Vyczwvc21hbGw+PHN0cm9uZz4xMSBBTeKAkzQgUE08L3N0cm9uZz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDIgY2xhc3M9InRvdXItdGl0bGUgcmV2ZWFsIj5DaG9vc2UgeW91ciB3YXkgdGhyb3VnaCB0aGUgdG91cjwvaDI+CiAgICAgICAgPGRpdiBjbGFzcz0icm91dGUgcmV2ZWFsIiBhcmlhLWxhYmVsPSJUb3VyIGV4cGVyaWVuY2UiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RvcCI+PHNwYW4gY2xhc3M9InN0b3AtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiPjxzcGFuIGNsYXNzPSJlbW9qaSBlbW9qaS1nb2xmIj7im7M8L3NwYW4+PC9zcGFuPjxzdHJvbmc+RXhwbG9yZSB0aGUgQ291cnNlPC9zdHJvbmc+PHNwYW4+UmlkZSB0aHJvdWdoIHJvbGxpbmcgZmFsbCBzY2VuZXJ5PC9zcGFuPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RvcCI+PHNwYW4gY2xhc3M9InN0b3AtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiPjxzcGFuIGNsYXNzPSJlbW9qaSBlbW9qaS13aW5lIj7wn423PC9zcGFuPjwvc3Bhbj48c3Ryb25nPkNob29zZSBZb3VyIFBvdXI8L3N0cm9uZz48c3Bhbj5DcmFmdCBiZWVyIG9yIHdpbmUgYXQgZWFjaCBzdG9wPC9zcGFuPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RvcCI+PHNwYW4gY2xhc3M9InN0b3AtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiPjxzcGFuIGNsYXNzPSJlbW9qaSBlbW9qaS1sZWFmIj7wn42BPC9zcGFuPjwvc3Bhbj48c3Ryb25nPlRha2UgSW4gdGhlIENvbG9yPC9zdHJvbmc+PHNwYW4+UGVhayBNaWNoaWdhbiBmYWxsIGF0bW9zcGhlcmU8L3NwYW4+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdG9wIj48c3BhbiBjbGFzcz0ic3RvcC1pY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHNwYW4gY2xhc3M9ImVtb2ppIGVtb2ppLXdpZGUiPvCfjb3vuI88L3NwYW4+PC9zcGFuPjxzdHJvbmc+U3RheSBmb3IgRGlubmVyPC9zdHJvbmc+PHNwYW4+UmVzdGF1cmFudCBzcGVjaWFscyBhdmFpbGFibGU8L3NwYW4+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRpY2tldC13cmFwIHJldmVhbCIgYXJpYS1sYWJlbGxlZGJ5PSJ0aWNrZXRzLXRpdGxlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRpY2tldHMiPgogICAgICAgICAgICA8aDIgaWQ9InRpY2tldHMtdGl0bGUiPlBpY2sgWW91ciBUYXN0aW5nIFBhY2s8L2gyPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWNrZXQtb3B0aW9ucyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlja2V0LW9wdGlvbiI+PHN0cm9uZz4xMCBmb3IgJDI1PC9zdHJvbmc+PHNwYW4+VGFzdGluZyB0aWNrZXRzPC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpY2tldC1vcHRpb24iPjxzdHJvbmc+MTUgZm9yICQzNTwvc3Ryb25nPjxzcGFuPlRhc3RpbmcgdGlja2V0czwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwb3VyIj5FYWNoIHRpY2tldCBpcyBnb29kIGZvciBvbmUgMyBveiB0YXN0aW5nIHBvdXIuIFJlZ2lzdGVyIGFuZCBwYXkgaW4gdGhlIFBybyBTaG9wLjwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHNwYW4gY2xhc3M9ImNhcnQtcm9vZiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJjYXJ0LWJvZHkiPjwvc3Bhbj48c3BhbiBjbGFzcz0iY2FydC1zZWF0Ij48L3NwYW4+PHNwYW4gY2xhc3M9IndoZWVsIHdoZWVsLW9uZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJ3aGVlbCB3aGVlbC10d28iPjwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICA8c3Ryb25nPlJlc2VydmUgYSBHb2xmIENhcnQ8L3N0cm9uZz4KICAgICAgICAgICAgICA8c3Bhbj5DYWxsIHRoZSBQcm8gU2hvcCB0byByZXNlcnZlIHlvdXJzLjwvc3Bhbj4KICAgICAgICAgICAgICA8YSBjbGFzcz0iY2FsbCIgaHJlZj0idGVsOisxMjMxODk0NDQ0NCI+Q2FsbCAoMjMxKSA4OTQtNDQ0NDwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgPGRpdiBjbGFzcz0ibm90ZXMgcmV2ZWFsIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxzdHJvbmc+UmVnaXN0ZXIgJmFtcDsgUGF5PC9zdHJvbmc+VmlzaXQgdGhlIFBybyBTaG9wIHRvIGdldCBzdGFydGVkLjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+PHN0cm9uZz5DaG9vc2UgYXQgRXZlcnkgU3RvcDwvc3Ryb25nPkVuam95IGNyYWZ0IGJlZXIgb3Igd2luZSBzYW1wbGVzLjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+PHN0cm9uZz5EaW5uZXIgU3BlY2lhbHM8L3N0cm9uZz5BdmFpbGFibGUgYXQgdGhlIHJlc3RhdXJhbnQuPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIHNodXR0bGUiPjxzdHJvbmc+Q29tcGxpbWVudGFyeSBTaHV0dGxlIFNlcnZpY2U8L3N0cm9uZz5BdmFpbGFibGUgZm9yIGFsbCBndWVzdHMgb24gdGhlIHByb3BlcnR5LjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICAgIDxmb290ZXIgY2xhc3M9ImZvb3RlciI+PHN0cm9uZz5Eb3VibGUgSkogUmVzb3J0PC9zdHJvbmc+PGJyPlRob3JvdWdoYnJlZCBHb2xmIENsdWIg4oCiIFJvdGhidXJ5LCBNaWNoaWdhbiDigKIgPGEgaHJlZj0idGVsOisxMjMxODk0NDQ0NCI+KDIzMSkgODk0LTQ0NDQ8L2E+PC9mb290ZXI+CiAgICA8L2FydGljbGU+CiAgPC9tYWluPgogIDxzY3JpcHQ+CiAgICAoKCkgPT4gewogICAgICBjb25zdCBkZXRhaWxDYXJkcyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRqai1jYi1ldmVudCAuZGV0YWlscyAuZGV0YWlsJykpOwogICAgICBjb25zdCBzZWVuRGV0YWlscyA9IG5ldyBTZXQoKTsKICAgICAgZGV0YWlsQ2FyZHMuZm9yRWFjaChjYXJkID0+IHsKICAgICAgICBjb25zdCBrZXkgPSBjYXJkLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChzZWVuRGV0YWlscy5oYXMoa2V5KSkgY2FyZC5yZW1vdmUoKTsKICAgICAgICBlbHNlIHNlZW5EZXRhaWxzLmFkZChrZXkpOwogICAgICB9KTsKICAgICAgY29uc3QgcmVkdWNlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICAgICAgY29uc3QgYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbC1saW5lJyk7CiAgICAgIGNvbnN0IHVwZGF0ZUJhciA9ICgpID0+IHsKICAgICAgICBjb25zdCBtYXggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0OwogICAgICAgIGJhci5zdHlsZS53aWR0aCA9IChtYXggPiAwID8gKHdpbmRvdy5zY3JvbGxZIC8gbWF4KSAqIDEwMCA6IDApICsgJyUnOwogICAgICB9OwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlQmFyLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICAgIHVwZGF0ZUJhcigpOwogICAgICBjb25zdCBpdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZXZlYWwnKTsKICAgICAgaWYgKHJlZHVjZSB8fCAhKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSkgewogICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gewogICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7CiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHsKICAgICAgICAgICAgZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTsKICAgICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sIHsgdGhyZXNob2xkOiAuMTMgfSk7CiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiBvYnNlcnZlci5vYnNlcnZlKGl0ZW0pKTsKICAgIH0pKCk7CiAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==