QkVHSU4gICB7CgkjIHNvbWUgaW5pdGlhbGl6YXRpb24gdmFyaWFibGVzCglhc2NpaWFydD0ibm8iOwoJd2Fzc2V0PSJubyI7CglsaW5lc2V0PTA7CglzYW1wbGU9Im5vIjsKCXdoaWxlICggZ2V0bGluZSB0aSA8InRhZ3MucmVmIiA+IDAgKSB7CgkJbmY9c3BsaXQodGksdGFnLCIJIik7CgkJdGFna2V5W3RhZ1sxXV09InllcyI7dGFncmVmW3RhZ1sxXV09dGFnWzJdOwoJfQoJc2tpcF93b3JkWyJhbmQiXT0ieWVzIjsKCXNraXBfd29yZFsiYmFja3NwYWNlIl09InllcyI7Cglza2lwX3dvcmRbImJlZXAiXT0ieWVzIjsKCXNraXBfd29yZFsiYnVncyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJkYSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJlbmQiXT0ieWVzIjsKCXNraXBfd29yZFsiZnRwIl09InllcyI7Cglza2lwX3dvcmRbImdvIl09InllcyI7Cglza2lwX3dvcmRbImhlbHAiXT0ieWVzIjsKCXNraXBfd29yZFsiaG9tZSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJuZXdzIl09InllcyI7Cglza2lwX3dvcmRbImluZGV4Il09InllcyI7Cglza2lwX3dvcmRbImluc2VydCJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJpbnRvIl09InllcyI7Cglza2lwX3dvcmRbInB1dCJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJyZWZlcmVuY2UiXT0ieWVzIjsKCXNraXBfd29yZFsic2VjdGlvbiJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJzcGFjZSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJzdGFydGluZyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJ0b2dnbGUiXT0ieWVzIjsKCXNraXBfd29yZFsidmFyaW91cyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJ2ZXJzaW9uIl09InllcyI7Cglza2lwX3dvcmRbImlzIl09InllcyI7Cn0KIwojIHByb3RlY3Qgc3BlY2lhbCBjaGFycwojCi9bPjwm4V0vIHtnc3ViKC8mLywiXFwmYW1wOyIpO2dzdWIoLz4vLCJcXCZndDsiKTtnc3ViKC88LywiXFwmbHQ7Iik7Z3N1Yigi4SIsIlxcJmFhY3V0ZTsiKTt9CiMKIyBlbmQgb2Ygc2FtcGxlIGxpbmVzIGJ5IG5vbi1ibGFuayBpbiBmaXJzdCBjb2x1bW4KIwpzYW1wbGUgPT0gInllcyIgJiYgc3Vic3RyKCQwLDEsNCkgPT0gIiZsdDsiIHsgc2FtcGxlID0gIm5vIjsgZ3N1YigvXiZsdDsvLCAiICIpOyB9CnNhbXBsZSA9PSAieWVzIiAmJiBzdWJzdHIoJDAsMSwxKSAhPSAiICIgJiYgc3Vic3RyKCQwLDEsMSkgIT0gIgkiICYmIGxlbmd0aCgkMCkgPiAwIHsgc2FtcGxlID0gIm5vIiB9CiMKIyBzYW1wbGUgbGluZXMgcHJpbnRlZCBib2xkIHVubGVzcyBlbXB0eS4uLgojCnNhbXBsZSA9PSAieWVzIiAmJiAkMCA9PSIiIHsgcHJpbnQgIiI7IG5leHQ7IH0Kc2FtcGxlID09ICJ5ZXMiICYmICQwICE9IiIgeyBwcmludCAiPEI+IiAkMCAiPC9CPiI7IG5leHQ7IH0KIwojIHN0YXJ0IG9mIHNhbXBsZSBsaW5lcyBpbiBuZXh0IGxpbmUKIwokMCA9PSAiJmd0OyIgeyBzYW1wbGUgPSAieWVzIjsgcHJpbnQgIiI7IG5leHQ7IH0Kc3Vic3RyKCQwLGxlbmd0aCgkMCktNCw1KSA9PSAiICZndDsiIHsgc2FtcGxlID0gInllcyI7IGdzdWIoLyAmZ3Q7JC8sICIiKTsgfQojCiMgaGVhZGVyIGxpbmVzIHByaW50ZWQgYm9sZCwgY29sb3JlZAojCnN1YnN0cigkMCxsZW5ndGgoJDApLDEpID09ICJ+IiB7IHByaW50ICI8Qj48Rk9OVCBDT0xPUj1cIlBVUlBMRVwiPiIgc3Vic3RyKCQwLDEsbGVuZ3RoKCQwKS0xKSAiPC9GT05UPjwvQj4iOyBuZXh0OyB9CiMKI2FkIGhvYyBjb2RlCiMKL14iXHxcJiAvIHtnc3ViKC9cfC8sIlxcJiMxMjQ7Iik7IH0KLyA9IGIgLyB7Z3N1YigvIGIgLywiIFxcJiM5ODsgIik7IH0KIwojIG9uZSBsZXR0ZXIgdGFnCiMKL1sgCV1cKi5cKlsgCV0vIHtnc3ViKC9cKi8sIlpXV1oiKTsgfQojCiMgaXNvbGF0ZWQgIioiCiMKL1sgCV1cKlsgCV0vIHtnc3ViKC8gXCogLywiIFxcJiM0MjsgIik7CgkJICAgIGdzdWIoLyBcKgkvLCIgXFwmIzQyOwkiKTsKCQkgICAgZ3N1YigvCVwqIC8sIglcXCYjNDI7ICIpOwoJCSAgICBnc3ViKC8JXCoJLywiCVxcJiM0MjsJIik7IH0KIwojIHRhZyBzdGFydAojCi9bIAldXCpbXiAJXS8Je2dzdWIoLyBcKi8sIiBaV1daIik7Z3N1YigvCVwqLywiCVpXV1oiKTt9Ci9eXCpbXiAJXS8gCSB7Z3N1YigvXlwqLywiWldXWiIpO30KIwojIHRhZyBlbmQKIwovW14gCV1cKiQvIAkge2dzdWIoL1wqJC8sIlpXV1oiKTt9Ci9bXiBcLwldXCpbIAldLyAge2dzdWIoL1wqLywiWldXWiIpO30KIwojIGlzb2xhdGVkICJ8IgojCi9bIAldXHxbIAldLyB7Z3N1YigvIFx8IC8sIiBcXCYjMTI0OyAiKTsKCQkgICAgZ3N1YigvIFx8CS8sIiBcXCYjMTI0OwkiKTsKCQkgICAgZ3N1YigvCVx8IC8sIglcXCYjMTI0OyAiKTsKCQkgICAgZ3N1YigvCVx8CS8sIglcXCYjMTI0OwkiKTsgfQovJ1x8Jy8geyBnc3ViKC8nXHwnLywiJ1xcJiMxMjQ7JyIpOyB9Ci9cXlZcfC8ge2dzdWIoL1xeVlx8LywiXlZcXCYjMTI0OyIpO30KLyBcXFx8CS8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTt9CiMKIyBvbmUgbGV0dGVyIHBpcGVzIGFuZCAifHwiIGZhbHNlIHBpcGUgKGRpZ3JhcGhzKQojCi9bIAldXHwuXHxbIAldLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfC8sIllYWFkiKTsgfQovXlx8Llx8WyAJXS8ge2dzdWIoL1x8LywiWVhYWSIpOyB9Ci9cfFx8LyB7Z3N1YigvXHxcfC8sIlxcJiMxMjQ7XFwmIzEyNDsiKTsgfQovXnNoZWxscGlwZS8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTsgfQojCiMgcGlwZSBzdGFydAojCi9bIAldXHxbXiAJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIgl7Z3N1YigvIFx8LywiIFlYWFkiKTsKCQkJZ3N1YigvCVx8LywiCVlYWFkiKTt9Ci9eXHxbXiAJXS8gCSB7Z3N1YigvXlx8LywiWVhYWSIpO30KIwojIHBpcGUgZW5kCiMKL1teIAldXHwkLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfCQvLCJZWFhZIik7fQovW14gCV1cfFtzICwuKTsJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIiB7Z3N1YigvXHwvLCJZWFhZIik7fQovW14gCV1cfF0vICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8LywiWVhYWSIpO30KIwojIHZhcmlvdXMKIwovJyIvIAl7Z3N1YigvJyIvLCJcXCYjMzk7XFwmIzM0OyciKTt9Ci8iLwl7Z3N1YigvIi8sIlxcJnF1b3Q7Iik7fQovJS8Je2dzdWIoLyUvLCJcXCYjMzc7Iik7fQoKTlIgPT0gMSB7IG5mPXNwbGl0KEZJTEVOQU1FLGYsIi4iKQoJcHJpbnQgIjxIVE1MPiI7CgoJcHJpbnQgIjxIRUFEPiIKCWlmICggRklMRU5BTUUgPT0gIm1ieXRlLnR4dCIgKSB7CgkgICAgIyBuZWVkcyB1dGYtOCBhcyB1c2VzIG1hbnkgbGFuZ3VhZ2VzCgkgICAgcHJpbnQgIjxNRVRBIEhUVFAtRVFVSVY9XCJDb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCI+IjsKCX0gZWxzZSB7CgkgICAgIyBjb21tb24gY2FzZSAtIExhdGluMQoJICAgIHByaW50ICI8TUVUQSBIVFRQLUVRVUlWPVwiQ29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xXCI+IjsKCX0KCXByaW50ICI8VElUTEU+VmltIGRvY3VtZW50YXRpb246ICIgZlsxXSAiPC9USVRMRT4iOwoJcHJpbnQgIjwvSEVBRD4iOwoKCXByaW50ICI8Qk9EWSBCR0NPTE9SPVwiI2ZmZmZmZlwiPiI7CglwcmludCAiPEgxPlZpbSBkb2N1bWVudGF0aW9uOiAiIGZbMV0gIjwvSDE+IjsKCXByaW50ICI8QSBOQU1FPVwidG9wXCI+PC9BPiI7CglpZiAoIEZJTEVOQU1FICE9ICJoZWxwLnR4dCIgKSB7CgkgIHByaW50ICI8QSBIUkVGPVwiaGVscC5odG1sXCI+bWFpbiBoZWxwIGZpbGU8L0E+XG4iOwoJfQoJcHJpbnQgIjxIUj4iOwoJcHJpbnQgIjxQUkU+IjsKCWZpbGVuYW1lPWZbMV0iLmh0bWwiOwp9CgojIHNldCB0byBhIGxvdyB2YWx1ZSB0byB0ZXN0IGZvciBmZXcgbGluZXMgb2YgdGV4dAojIE5SID09IDk5OTk5IHsgZXhpdDsgfQoKIyBpZ25vcmUgdW5kZXJsaW5lcyBhbmQgdGFncwpzdWJzdHIoJDAsMSw1KSA9PSAiIHZpbToiIHsgbmV4dDsgfQpzdWJzdHIoJDAsMSw0KSA9PSAidmltOiIgeyBuZXh0OyB9CiMga2VlcCBqdXN0IHdob2xlIGxpbmVzIG9mICItIiwgIj0iCnN1YnN0cigkMCwxLDMpID09ICI9PT0iICYmIHN1YnN0cigkMCw3NSwxKSAhPSAiPSIgeyBuZXh0OyB9CnN1YnN0cigkMCwxLDMpID09ICItLS0iICYmIHN1YnN0cigkMCw3NSwxKSAhPSAiLSIgeyBuZXh0OyB9Cgp7Cgluc3RhciA9IHNwbGl0KCQwLHMsIlpXV1oiKTsKCWZvciAoIGk9MiA7IGkgPD0gbnN0YXIgOyBpPWkrMiApIHsKCQluYmxhPXNwbGl0KHNbaV0sYmxhdGEsIlsgCV0iKTsKCQlpZiAoIG5ibGEgPiAxICkgewoJCQlnc3ViKCJaV1daIiwiKiIpOwoJCQluc3RhciA9IHNwbGl0KCQwLHMsIlpXV1oiKTsKCQl9Cgl9CglucGlwZSA9IHNwbGl0KCQwLHAsIllYWFkiKTsKCWZvciAoIGk9MiA7IGkgPD0gbnBpcGUgOyBpPWkrMiApIHsKCQluYmxhPXNwbGl0KHBbaV0sYmxhdGEsIlsgCV0iKTsKCQlpZiAoIG5ibGEgPiAxICkgewoJCQlnc3ViKCJZWFhZIiwifCIpOwoJCQludGFicyA9IHNwbGl0KCQwLHAsIllYWFkiKTsKCQl9Cgl9Cn0KCgpGSUxFTkFNRSA9PSAiZ3VpLnR4dCIgJiYgYXNjaWlhcnQgPT0gIm5vIiAgXAoJICAmJiAkMCB+IC9cKy0tLS0vICYmICQwIH4gLy0tLS1cKy8gewoJYXNjaWlhcnQ9ICJ5ZXMiOwoJYXNjaWljbnQ9MDsKCX0KCkZJTEVOQU1FID09ICJxdW90ZXMudHh0IiAmJiBhc2NpaWFydCA9PSAibm8iIFwKCSAgJiYgJDAgfiAvSW4gc3VtbWFyeTovIHsKCWFzY2lpYXJ0PSAieWVzIjsKCWFzY2lpY250PTA7Cgl9CgpGSUxFTkFNRSA9PSAidXNyXzIwLnR4dCIgJiYgYXNjaWlhcnQgPT0gIm5vIiBcCgkgICYmICQwIH4gL2FuIGVtcHR5IGxpbmUgYXQgdGhlIGVuZDovIHsKCWFzY2lpYXJ0PSAieWVzIjsKCWFzY2lpY250PTA7Cgl9Cgphc2NpaWFydCA9PSAieWVzIiAmJiAkMD09IiIgeyBhc2NpaWNudCsrOyB9Cgphc2NpaWFydCA9PSAieWVzIiAmJiBhc2NpaWNudCA9PSAyIHsgYXNjaWlhcnQgPSAibm8iOyB9Cgphc2NpaWFydCA9PSAieWVzIiB7IG5waXBlID0gMTsgfQojCXsgcHJpbnQgTlIgIiA8PT4gIiBhc2NpaWFydDsgfQoKIwojIGxpbmUgY29udGFpbnMgICIqIgojCm5zdGFyID4gMiAmJiBucGlwZSA8IDMgewoJcHJpbnRmKCJcbiIpOwoJZm9yICggaT0xOyBpIDw9IG5zdGFyIDsgaT1pKzIgKSB7CgkJdGhpcz1zW2ldOwoJCXB1dF90aGlzKCk7CgkJaWk9aSsxOwoJCW5ibGEgPSBzcGxpdChzW2lpXSxibGF0YSwiICIpOwoJCWlmICggaWkgPD0gbnN0YXIgKSB7CgkJCWlmICggbmJsYSA9PSAxICYmIHN1YnN0cihzW2lpXSxsZW5ndGgoc1tpaV0pLDEpICE9ICIgIiApIHsKCQkJcHJpbnRmKCIqPEEgTkFNRT1cIiVzXCI+PC9BPiIsc1tpaV0pOwoJCQkJcHJpbnRmKCI8Qj4lczwvQj4qIixzW2lpXSk7CgkJCX0gZWxzZSB7CgkJCXByaW50ZigiKiVzKiIsc1tpaV0pOwoJCQl9CgkJfQoJfQoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgInwiCiMKbnBpcGUgPiAyICYmIG5zdGFyIDwgMyB7CglpZiAgKCBucGlwZSUyID09IDAgKSB7CgkJZm9yICggaT0xOyBpIDwgbnBpcGUgOyBpKysgKSB7CgkJCWdzdWIoIlpXV1oiLCIqIixwW2ldKTsKCQkJcHJpbnRmKCIlc3wiLHBbaV0pOwoJCX0KCQlwcmludGYoIiVzXG4iLHBbbnBpcGVdKTsKCQluZXh0OwoJCX0KCWZvciAoIGk9MTsgaSA8PSBucGlwZSA7IGkrKyApCgkJewoJCWlmICggaSAlIDIgPT0gMSApIHsKCQkJZ3N1YigiWldXWiIsIioiLHBbaV0pOwoJCQl0aGlzPXBbaV07CgkJCXB1dF90aGlzKCk7CgkJCX0KCQkJZWxzZSB7CgkJCW5mbj1zcGxpdChwW2ldLGYsIi4iKTsKCQkJaWYgKCBuZm4gPT0gMSB8fCBmWzJdID09ICIiIHx8IGZbMV0gPT0gIiIgfHwgbGVuZ3RoKGZbMl0pIDwgMyApIHsKCQkJCWZpbmRfdGFnMSgpOwoJCQkJfQoJCQkJZWxzZSB7CgkJcHJpbnRmICJ8PEEgSFJFRj1cIiIgZlsxXSAiLmh0bWxcIj4iIHBbaV0gIjwvQT58IjsKCQkJCX0KCQkJfQoJCX0KCQlwcmludGYoIlxuIik7CgkJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgYm90aCAifCIgYW5kICIqIgojCm5waXBlID4gMiAmJiBuc3RhciA+IDIgewoJcHJpbnRmKCJcbiIpOwoJZm9yICggaj0xOyBqIDw9IG5zdGFyIDsgaj1qKzIgKSB7CgkJbnBpcGUgPSBzcGxpdChzW2pdLHAsIllYWFkiKTsKCQlpZiAoIG5waXBlID4gMSApIHsKCQkJZm9yICggbnA9MTsgbnA8PW5waXBlOyBucD1ucCsyICkgewoJCQkJdGhpcz1wW25wXTsKCQkJCXB1dF90aGlzKCk7CgkJCQlpPW5wKzE7ZmluZF90YWcxKCk7CgkJCX0KCQl9IGVsc2UgewoJCQl0aGlzPXNbal07CgkJCXB1dF90aGlzKCk7CgkJfQoJCWpqPWorMTsKCQluYmxhID0gc3BsaXQoc1tqal0sYmxhdGEsIiAiKTsKCQlpZiAoIGpqIDw9IG5zdGFyICYmIG5ibGEgPT0gMSAmJiBzW2pqXSAhPSAiIiApIHsKCQlwcmludGYoIio8QSBOQU1FPVwiJXNcIj48L0E+IixzW2pqXSk7CgkJCXByaW50ZigiPEI+JXM8L0I+KiIsc1tqal0pOwoJCX0gZWxzZSB7CgkJCWlmICggc1tqal0gIT0gIiIgKSB7CgkJCXByaW50ZigiKiVzKiIsc1tqal0pOwoJCQl9CgkJfQoJfQoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgZS1tYWlsIGFkZHJlc3Mgam9obi5kb2VAc29tZS5wbGFjZS5lZHUKIwokMCB+IC9ALyAmJiAkMCB+IC9bYS16QS1aMC05XUBbYS16XS8gXAoJewoJbmVtYWlsPXNwbGl0KCQwLGVtLCIgIik7CglpZiAoIHN1YnN0cigkMCwxLDEpID09ICIJIiApIHsgcHJpbnRmKCIJIik7IH0KCWZvciAoIGk9MTsgaSA8PSBuZW1haWw7IGkrKyApIHsKCQlpZiAoIGVtW2ldIH4gL0AvICkgewoJCQlpZiAoIHN1YnN0cihlbVtpXSwyLDMpID09ICJsdDsiICYmIHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLTIsMykgPT0gImd0OyIgKSB7CgkJCQltYWlsYWRkcj1zdWJzdHIoZW1baV0sNSxsZW5ndGgoZW1baV0pLTgpOwoJCQkJcHJpbnRmKCI8QSBIUkVGPVwibWFpbHRvOiVzXCI+Jmx0OyVzJmd0OzwvQT4gIixtYWlsYWRkcixtYWlsYWRkcik7CgkJCX0gZWxzZSB7CgkJCQlpZiAoIHN1YnN0cihlbVtpXSwyLDMpID09ICJsdDsiICYmIHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLTMsMykgPT0gImd0OyIgKSB7CgkJCQkJbWFpbGFkZHI9c3Vic3RyKGVtW2ldLDUsbGVuZ3RoKGVtW2ldKS05KTsKCQkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4mbHQ7JXMmZ3Q7PC9BPiVzICIsbWFpbGFkZHIsbWFpbGFkZHIsc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSksMSkpOwoJCQkJfSBlbHNlIHsKCQkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4lczwvQT4gIixlbVtpXSxlbVtpXSk7CgkJCQl9CgkJCX0KCQl9IGVsc2UgewoJCQkJcHJpbnRmKCIlcyAiLGVtW2ldKTsKCQl9Cgl9CgkjcHJpbnQgIioqKiAiIE5SICIgIiBGSUxFTkFNRSAiIC0gcG9zc2libGUgbWFpbCByZWYiOwoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgaHR0cCAvIGZ0cCByZWZlcmVuY2UKIwokMCB+IC9odHRwOlwvXC8vIHx8ICQwIH4gL2Z0cDpcL1wvLyB7Cglnc3ViKCJVUkw6IiwiIik7Cglnc3ViKCImbHQ7IiwiIik7Cglnc3ViKCImZ3Q7IiwiIik7Cglnc3ViKCJcXCgiLCIiKTsKCWdzdWIoIlxcKSIsIiIpOwoJbmVtYWlsPXNwbGl0KCQwLGVtLCIgIik7Cglmb3IgKCBpPTE7IGkgPD0gbmVtYWlsOyBpKysgKSB7CgkJaWYgKCBzdWJzdHIoZW1baV0sMSw1KSA9PSAiaHR0cDoiIHx8CgkgICAgIAlzdWJzdHIoZW1baV0sMSw0KSA9PSAiZnRwOiIgKSB7CgkJCWlmICggc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSksMSkgIT0gIi4iICkgewoJCQkJcHJpbnRmKCIJPEEgSFJFRj1cIiVzXCI+JXM8L0E+IixlbVtpXSxlbVtpXSk7CgkJCX0gZWxzZSB7CgkJCQllbVtpXT1zdWJzdHIoZW1baV0sMSxsZW5ndGgoZW1baV0pLTEpOwoJCQkJcHJpbnRmKCIJPEEgSFJFRj1cIiVzXCI+JXM8L0E+LiIsZW1baV0sZW1baV0pOwoJCQl9CgkJfSBlbHNlIHsKCQlwcmludGYoIiAlcyIsZW1baV0pOwoJCX0KCX0KCSNwcmludCAiKioqICIgTlIgIiAiIEZJTEVOQU1FICIgLSBwb3NzaWJsZSBodHRwIHJlZiI7CglwcmludGYoIlxuIik7CgluZXh0OwoJfQojCiMgc29tZSBsaW5lcyBjb250YWlucyBqdXN0IG9uZSAiYWxtb3N0IHJlZ3VsYXIiICIqIi4uLgojCm5zdGFyID09IDIgIHsKCXRoaXM9c1sxXTsKCXB1dF90aGlzKCk7CglwcmludGYoIioiKTsKCXRoaXM9c1syXTsKCXB1dF90aGlzKCk7CglwcmludGYoIlxuIik7CgluZXh0OwoJfQojCiMgcmVndWxhciBsaW5lCiMKCXsgbnRhYnMgPSBzcGxpdCgkMCx0YiwiCSIpOwoJZm9yICggaT0xOyBpIDwgbnRhYnMgOyBpKyspIHsKCQl0aGlzPXRiW2ldOwoJCXB1dF90aGlzKCk7CgkJcHJpbnRmKCIJIik7CgkJfQoJdGhpcz10YltudGFic107CglwdXRfdGhpcygpOwoJcHJpbnRmKCJcbiIpOwoJfQoKCmFzY2lpYXJ0ID09ICJ5ZXMiICAmJiAkMCB+IC9cKy1cKy0tLyAgXAoJJiYgJDAgfiAic2Nyb2xsYmFyIiB7IGFzY2lpYXJ0ID0gIm5vIjsgfQoKRU5EIHsKCXRvcGJhY2soKTsKCXByaW50ICI8L1BSRT5cbjwvQk9EWT5cblxuXG48L0hUTUw+IjsgfQoKIwojIGFzIG1haW4gd2Uga2VlcCBpbmRleC50eHQgKGJ5IGRlZmF1bHQpCiMgb3RoZXIgY2FuZGlkYXRlLCBoZWxwLnR4dAojCmZ1bmN0aW9uIHRvcGJhY2sgKCkgewoJaWYgKCBGSUxFTkFNRSAhPSAidGFncyIgKSB7CglpZiAoIEZJTEVOQU1FICE9ICJoZWxwLnR4dCIgKSB7CglwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPiAtICIpOwoJcHJpbnRmKCI8QSBIUkVGPVwiaGVscC5odG1sXCI+bWFpbiBoZWxwIGZpbGU8L0E+XG4iKTsKCX0gZWxzZSB7CglwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPlxuIik7Cgl9Cgl9Cn0KCmZ1bmN0aW9uIGZpbmRfdGFnMSgpIHsKCWlmICggcFtpXSA9PSAiIiApIHsgcmV0dXJuOyB9CglpZiAoIHRhZ2tleVtwW2ldXSA9PSAieWVzIiApIHsKCQl3aGljaD10YWdyZWZbcFtpXV07CgkJcHV0X2hyZWYoKTsKCQlyZXR1cm47Cgl9CgkjIGlmIG5vdCBmb3VuZCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbQoJcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAgPj4iZXJyb3JzLmxvZyI7CglwcmludCBGSUxFTkFNRSAiLCBsaW5lICIgTlIgIiwgcG9pbnRlcjogPj4iIHBbaV0gIjw8IiA+PiJlcnJvcnMubG9nIjsKCXByaW50ICQwID4+ImVycm9ycy5sb2ciOwoJd2hpY2g9ImludHJvLmh0bWwiOwoJcHV0X2hyZWYoKTsKfQoKZnVuY3Rpb24gc2VlX3RhZygpIHsKIyBhZC1ob2MgY29kZToKaWYgKCBhdGFnID09ICJcIi0tIiB8fCBhdGFnID09ICItLVwiIiApIHsgcmV0dXJuOyB9CmlmX2FscmVhZHkoKTsKaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJcHJpbnRmKCIlcyIsYXdvcmQpOwoJcmV0dXJuOwoJfQphbGxvd19vbmVfY2hhcj0ibm8iOwpmaW5kX3RhZzIoKTsKaWYgKCBkb25lID09ICJ5ZXMiICkgeyByZXR1cm47IH0KcmlnaHRjaGFyPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKSwxKTsKaWYgKCAgICByaWdodGNoYXIgPT0gIi4iIFwKICAgICB8fCByaWdodGNoYXIgPT0gIiwiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIjoiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIjsiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIiEiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIj8iIFwKICAgICB8fCByaWdodGNoYXIgPT0gIikiICkgewoJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0xKTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJfQoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLHJpZ2h0Y2hhcik7cmV0dXJuOyB9CglsZWZ0Y2hhcj1zdWJzdHIoYXRhZywxLDEpOwoJbGFzdGJ1dDE9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLDEpOwoJaWYgKCAgICBsZWZ0Y2hhciA9PSAiJyIgJiYgbGFzdGJ1dDEgPT0gIiciICApIHsKCQlhbGxvd19vbmVfY2hhcj0ieWVzIjsKCQlhdGFnPXN1YnN0cihhdGFnLDIsbGVuZ3RoKGF0YWcpLTIpOwoJCWlmX2FscmVhZHkoKTsKCQlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJCXByaW50ZigiJXMiLGF3b3JkKTsKCQkJcmV0dXJuOwoJCX0KCQlwcmludGYoIiVzIixsZWZ0Y2hhcik7CgkJYXdvcmQ9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZykpIiJsYXN0YnV0MSIicmlnaHRjaGFyOwoJCWZpbmRfdGFnMigpOwoJCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyVzIixsYXN0YnV0MSxyaWdodGNoYXIpO3JldHVybjsgfQoJCX0KCX0KYXRhZz1hd29yZDsKbGVmdGNoYXI9c3Vic3RyKGF0YWcsMSwxKTsKaWYgKCAgICBsZWZ0Y2hhciA9PSAiJyIgJiYgcmlnaHRjaGFyID09ICInIiAgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsMixsZW5ndGgoYXRhZyktMik7CglpZiAgKCBhdGFnID09ICI8IiApIHsgcHJpbnRmKCIgfCVzfCVzfCAiLGF0YWcscFsyXSk7IH0KCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCXByaW50ZigiJXMiLGxlZnRjaGFyKTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixyaWdodGNoYXIpO3JldHVybjsgfQoJcHJpbnRmKCIlcyVzIixhdGFnLHJpZ2h0Y2hhcik7CglyZXR1cm47Cgl9Cmxhc3QyPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKS0xLDIpOwpmaXJzdDI9c3Vic3RyKGF0YWcsMSwyKTsKaWYgKCAgICBmaXJzdDIgPT0gIignIiAmJiBsYXN0MiA9PSAiJykiICApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZywzLGxlbmd0aChhdGFnKS00KTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCXByaW50ZigiJXMiLGZpcnN0Mik7CglmaW5kX3RhZzIoKTsKCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIsbGFzdDIpO3JldHVybjsgfQoJcHJpbnRmKCIlcyVzIixhdGFnLGxhc3QyKTsKCXJldHVybjsKCX0KaWYgKCBsYXN0MiA9PSAiLikiICkgewoJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0yKTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Mik7cmV0dXJuOyB9CglwcmludGYoIiVzJXMiLGF0YWcsbGFzdDIpOwoJcmV0dXJuOwoJfQppZiAoIGxhc3QyID09ICIpLiIgKSB7CglhdGFnPXN1YnN0cihhdGFnLDEsbGVuZ3RoKGF0YWcpLTIpOwoJZmluZF90YWcyKCk7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3QyKTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Mik7CglyZXR1cm47Cgl9CmZpcnN0Nj1zdWJzdHIoYXRhZywxLDYpOwpsYXN0Nj1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNSw2KTsKaWYgKCBsYXN0NiA9PSBhdGFnICkgewoJcHJpbnRmKCIlcyIsYXdvcmQpOwoJcmV0dXJuOwoJfQpsYXN0Nm9mNz1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNiw2KTsKaWYgKCBmaXJzdDYgPT0gIiZxdW90OyIgJiYgbGFzdDZvZjcgPT0gIiZxdW90OyIgJiYgbGVuZ3RoKGF0YWcpID4gMTIgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTMpOwoJaWZfYWxyZWFkeSgpOwoJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJCXByaW50ZigiJXMiLGF3b3JkKTsKCQlyZXR1cm47CgkJfQoJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiZxdW90OyVzIixyaWdodGNoYXIpOyByZXR1cm47IH0KCXByaW50ZigiJXMmcXVvdDslcyIsYXRhZyxyaWdodGNoYXIpOwoJcmV0dXJuOwoJfQppZiAoIGZpcnN0NiA9PSAiJnF1b3Q7IiAmJiBsYXN0NiAhPSAiJnF1b3Q7IiApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS02KTsKCWlmICggYXRhZyA9PSAiWyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiLiIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiOiIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiYSIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiQSIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiZyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiZxdW90OyVzIixhdGFnKTsKCQlyZXR1cm47CgkJfQoJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyByZXR1cm47IH0KCXByaW50ZigiJXMiLGF0YWcpOwoJcmV0dXJuOwoJfQppZiAoIGxhc3Q2ID09ICImcXVvdDsiICYmIGZpcnN0NiA9PSAiJnF1b3Q7IiApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS0xMik7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglwcmludGYoIiVzIixmaXJzdDYpOwoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3Q2KTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Nik7CglyZXR1cm47Cgl9Cmxhc3Q2b2Y3PXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKS02LDYpOwppZiAoIGxhc3Q2b2Y3ID09ICImcXVvdDsiICYmIGZpcnN0NiA9PSAiJnF1b3Q7IiApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS0xMyk7CgkjcHJpbnRmKCJcbmF0YWc9JXMsYXdvcmQ9JXNcbiIsYXRhZyxhd29yZCk7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglwcmludGYoIiVzIixmaXJzdDYpOwoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMlcyIsbGFzdDZvZjcscmlnaHRjaGFyKTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyVzIixhdGFnLGxhc3Q2b2Y3LHJpZ2h0Y2hhcik7CglyZXR1cm47Cgl9CnByaW50ZigiJXMiLGF3b3JkKTsKfQoKZnVuY3Rpb24gZmluZF90YWcyKCkgewoJZG9uZT0ibm8iOwoJIyBubyBibGFua3MgcHJlc2VudCBpbiBhIHRhZy4uLgoJbnRhZ3M9c3BsaXQoYXRhZyxibGF0YSwiWyAJXSIpOwoJaWYgKCBudGFncyA+IDEgKSB7IHJldHVybjsgfQoJaWYgCSggKCBhbGxvd19vbmVfY2hhciA9PSAibm8iICkgJiYgXAoJCSAgKCBpbmRleCgiISMkJVwmJygpKywtLi8wOjs9P0BBQ0lOWFxcW1xcXV5fYGF0XFx7XFx9fiIsYXRhZykgIT0wICkgKSB7CgkJcmV0dXJuOwoJfQoJaWYgKCBza2lwX3dvcmRbYXRhZ10gPT0gInllcyIgKSB7IHJldHVybjsgfQoJaWYgKCB3YXNzZXQgPT0gInllcyIgJiYgbGluZXNldCA9PSBOUiApIHsKCXdhc3NldD0ibm8iOwoJc2VlX29wdCgpOwoJaWYgKCBkb25lX29wdCA9PSAieWVzIiApIHtyZXR1cm47fQoJfQoJaWYgKCB3YXNzZXQgPT0gInllcyIgJiYgbGluZXNldCAhPSBOUiApIHsKCXdhc3NldD0ibm8iOwoJfQoJaWYgKCBhdGFnID09ICI6c2V0IiApIHsKCXdhc3NldD0ieWVzIjsKCWxpbmVzZXQ9TlI7Cgl9CglpZiAoIHRhZ2tleVthdGFnXSA9PSAieWVzIiApIHsKCQl3aGljaD10YWdyZWZbYXRhZ107CgkJcHV0X2hyZWYyKCk7CgkJZG9uZT0ieWVzIjsKCX0KfQoKZnVuY3Rpb24gZmluZF90YWczKCkgewoJZG9uZT0ibm8iOwoJIyBubyBibGFua3MgcHJlc2VudCBpbiBhIHRhZy4uLgoJbnRhZ3M9c3BsaXQoYnRhZyxibGF0YSwiWyAJXSIpOwoJaWYgKCBudGFncyA+IDEgKSB7IHJldHVybjsgfQoJaWYgCSggKCBhbGxvd19vbmVfY2hhciA9PSAibm8iICkgJiYgXAoJCSAgKCBpbmRleCgiISMkJVwmJygpKywtLi8wOjs9P0BBQ0lOWFxcW1xcXV5fYGF0XFx7XFx9fiIsYnRhZykgIT0wICkgKSB7CgkgIAlyZXR1cm47Cgl9CglpZiAoIHNraXBfd29yZFtidGFnXSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CglpZiAoIHRhZ2tleVtidGFnXSA9PSAieWVzIiApIHsKCQl3aGljaD10YWdyZWZbYnRhZ107CgkJcHV0X2hyZWYzKCk7CgkJZG9uZT0ieWVzIjsKCX0KfQoKZnVuY3Rpb24gcHV0X2hyZWYoKSB7CglpZiAoIHBbaV0gPT0gIiIgKSB7IHJldHVybjsgfQoJaWYgKCB3aGljaCA9PSBGSUxFTkFNRSApIHsKCQlwcmludGYoInw8QSBIUkVGPVwiIyVzXCI+JXM8L0E+fCIscFtpXSxwW2ldKTsKCQl9CgkJZWxzZSB7CgkJbno9c3BsaXQod2hpY2gsenosIi4iKTsKCQlpZiAoIHp6WzJdID09ICJ0eHQiIHx8IHp6WzFdID09ICJ0YWdzIiApIHsKCQlwcmludGYoInw8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPnwiLHp6WzFdLHBbaV0scFtpXSk7CgkJfQoJCWVsc2UgewoJCXByaW50ZigifDxBIEhSRUY9XCJpbnRyby5odG1sIyVzXCI+JXM8L0E+fCIscFtpXSxwW2ldKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIHB1dF9ocmVmMigpIHsKCWlmICggYXRhZyA9PSAiIiApIHsgcmV0dXJuOyB9CglpZiAoIHdoaWNoID09IEZJTEVOQU1FICkgewoJCXByaW50ZigiPEEgSFJFRj1cIiMlc1wiPiVzPC9BPiIsYXRhZyxhdGFnKTsKCQl9CgkJZWxzZSB7CgkJbno9c3BsaXQod2hpY2gsenosIi4iKTsKCQlpZiAoIHp6WzJdID09ICJ0eHQiIHx8IHp6WzFdID09ICJ0YWdzIiApIHsKCQlwcmludGYoIjxBIEhSRUY9XCIlcy5odG1sIyVzXCI+JXM8L0E+Iix6elsxXSxhdGFnLGF0YWcpOwoJCX0KCQllbHNlIHsKCQlwcmludGYoIjxBIEhSRUY9XCJpbnRyby5odG1sIyVzXCI+JXM8L0E+IixhdGFnLGF0YWcpOwoJCX0KCX0KfQoKZnVuY3Rpb24gcHV0X2hyZWYzKCkgewoJaWYgKCBidGFnID09ICIiICkgeyByZXR1cm47IH0KCWlmICggd2hpY2ggPT0gRklMRU5BTUUgKSB7CgkJcHJpbnRmKCI8QSBIUkVGPVwiIyVzXCI+JXM8L0E+IixidGFnLGJ0YWcyKTsKCQl9CgkJZWxzZSB7CgkJbno9c3BsaXQod2hpY2gsenosIi4iKTsKCQlpZiAoIHp6WzJdID09ICJ0eHQiIHx8IHp6WzFdID09ICJ0YWdzIiApIHsKCQlwcmludGYoIjxBIEhSRUY9XCIlcy5odG1sIyVzXCI+JXM8L0E+Iix6elsxXSxidGFnLGJ0YWcyKTsKCQl9CgkJZWxzZSB7CgkJcHJpbnRmKCI8QSBIUkVGPVwiaW50cm8uaHRtbCMlc1wiPiVzPC9BPiIsYnRhZyxidGFnMik7CgkJfQoJfQp9CgpmdW5jdGlvbiBwdXRfdGhpcygpIHsKCW50YWI9c3BsaXQodGhpcyx0YSwiCSIpOwoJZm9yICggbnRhPTEgOyBudGEgPD0gbnRhYiA7IG50YSsrICkgewoJCWF0YT10YVtudGFdOwoJCWxhdGE9bGVuZ3RoKGF0YSk7CgkJYXdvcmQ9IiI7CgkJZm9yICggaWF0YT0xIDsgaWF0YSA8PWxhdGEgOyBpYXRhKysgKSB7CgkJCWFjaGFyPXN1YnN0cihhdGEsaWF0YSwxKTsKCQkJaWYgKCBhY2hhciAhPSAiICIgKSB7IGF3b3JkPWF3b3JkIiJhY2hhcjsgfQoJCQllbHNlIHsKCQkJCWlmICggYXdvcmQgIT0gIiIgKSB7IGF0YWc9YXdvcmQ7CgkJCQkJc2VlX3RhZygpOwoJCQkJCWF3b3JkPSIiOwoJCQkJCXByaW50ZigiICIpOyB9CgkJCQllbHNlCXsKCQkJCQlwcmludGYoIiAiKTsKCQkJCQl9CgkJCX0KCQl9CgkJaWYgKCBhd29yZCAhPSAiIiApIHsgYXRhZz1hd29yZDsKCQkJCQlzZWVfdGFnKCk7CgkJCQkJfQoJCWlmICggbnRhICE9IG50YWIgKSB7IHByaW50ZigiCSIpOyB9Cgl9Cn0KCmZ1bmN0aW9uIGlmX2FscmVhZHkoKSB7CglhbHJlYWR5PSJubyI7CglpZiAgKCBucGlwZSA8IDIgKSB7IHJldHVybjsgfQoJaWYgICggYXRhZyA9PSAiOmF1IiAmJiBwWzJdID09ICI6YXV0b2NtZCIgKSB7IGFscmVhZHk9InllcyI7cmV0dXJuOyB9Cglmb3IgKCBucHA9MiA7IG5wcCA8PSBucGlwZSA7IG5wcD1ucHArMiApIHsKCQlpZiAJKCAgKCAgKGluZGV4KHBbbnBwXSxhdGFnKSkgIT0gMCBcCgkJCSAgICAgICYmIGxlbmd0aChwW25wcF0pID4gbGVuZ3RoKGF0YWcpIFwKCQkJICAgICAgJiYgbGVuZ3RoKGF0YWcpID49IDEgIFwKCQkJICAgICkgXAoJCQkgICAgfHwgKHBbbnBwXSA9PSBhdGFnKSBcCgkJCSkgewoJCSMgcHJpbnRmKCJwPXwlc3wsdGFnPXwlc3wgIixwW25wcF0sYXRhZyk7CgkJYWxyZWFkeT0ieWVzIjsgcmV0dXJuOyB9Cgl9Cn0KCmZ1bmN0aW9uIHNlZV9vcHQoKSB7Cglkb25lX29wdD0ibm8iOwoJc3RhZz1hdGFnOwoJbmZpZWxkcyA9IHNwbGl0KGF0YWcsdGFlLCI9Iik7CglpZiAoIG5maWVsZHMgPiAxICkgIHsKCQlidGFnPSInInRhZVsxXSInIjsKCQlidGFnMj10YWVbMV07CgkgICAgZmluZF90YWczKCk7CgkJaWYgKGRvbmUgPT0gInllcyIpIHsKCQkJZm9yICggbnRhZT0yIDsgbnRhZSA8PSBuZmllbGRzIDsgbnRhZSsrICkgewoJCQkJcHJpbnRmKCI9JXMiLHRhZVtudGFlXSk7CgkJCX0KCQkJYXRhZz1zdGFnOwoJCQlkb25lX29wdD0ieWVzIjsKCQkJcmV0dXJuOwoJCX0KCQlidGFnPXRhZVsxXTsKCQlidGFnMj10YWVbMV07CgkgICAgZmluZF90YWczKCk7CgkJaWYgKCBkb25lPT0ieWVzIiApIHsKCQkJZm9yICggbnRhZT0yIDsgbnRhZSA8PSBuZmllbGRzIDsgbnRhZSsrICkgewoJCQkJcHJpbnRmKCI9JXMiLHRhZVtudGFlXSk7CgkJCX0KCQkJYXRhZz1zdGFnOwoJCQlkb25lX29wdD0ieWVzIjsKCQkJcmV0dXJuOwoJCX0KCX0KCW5maWVsZHMgPSBzcGxpdChhdGFnLHRhZSwiJnF1b3Q7Iik7CglpZiAoIG5maWVsZHMgPiAxICkgIHsKCQlidGFnPSInInRhZVsxXSInIjsKCQlidGFnMj10YWVbMV07CgkgICAJZmluZF90YWczKCk7CgkJaWYgKGRvbmUgPT0gInllcyIpIHsKCQkJcHJpbnRmKCImcXVvdDsiKTsKCQkJYXRhZz1zdGFnOwoJCQlkb25lX29wdD0ieWVzIjsKCQkJcmV0dXJuOwoJCX0KCQlidGFnPXRhZVsxXTsKCQlidGFnMj10YWVbMV07CgkgICAgZmluZF90YWczKCk7CgkJaWYgKGRvbmUgPT0gInllcyIpIHsKCQkJcHJpbnRmKCImcXVvdDsiKTsKCQkJYXRhZz1zdGFnOwoJCQlkb25lX29wdD0ieWVzIjsKCQkJcmV0dXJuOwoJCX0KCX0KCWJ0YWc9IicidGFlWzFdIiciOwoJYnRhZzI9dGFlWzFdOwoJZmluZF90YWczKCk7CglpZiAoZG9uZSA9PSAieWVzIikgewoJCWF0YWc9c3RhZzsKCQlkb25lX29wdD0ieWVzIjsKCQlyZXR1cm47Cgl9CglidGFnPXRhZVsxXTsKCWJ0YWcyPXRhZVsxXTsKCWZpbmRfdGFnMygpOwoJaWYgKGRvbmUgPT0gInllcyIpIHsKCQlhdGFnPXN0YWc7CgkJZG9uZV9vcHQ9InllcyI7CgkJcmV0dXJuOwoJfQoJYXRhZz1zdGFnOwp9Cg==