LyogQm9vc3QgaW50ZXJ2YWwvZGV0YWlsL3g4NmdjY19yb3VuZGluZ19jb250cm9sLmhwcCBmaWxlCiAqCiAqIENvcHlyaWdodCAyMDAwIEplbnMgTWF1cmVyCiAqIENvcHlyaWdodCAyMDAyIEhlcnbpIEJy9m5uaW1hbm4sIEd1aWxsYXVtZSBNZWxxdWlvbmQsIFN5bHZhaW4gUGlvbgogKgogKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCiAqIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yCiAqIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogKi8KCiNpZm5kZWYgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9ERVRBSUxfWDg2R0NDX1JPVU5ESU5HX0NPTlRST0xfSFBQCiNkZWZpbmUgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9ERVRBSUxfWDg2R0NDX1JPVU5ESU5HX0NPTlRST0xfSFBQCgojaWZuZGVmIF9fR05VQ19fCiMgIGVycm9yIFRoaXMgaGVhZGVyIG9ubHkgd29ya3Mgd2l0aCBHTlUgQ0MuCiNlbmRpZgoKI2lmbmRlZiBfX2kzODZfXwojICBlcnJvciBUaGlzIGhlYWRlciBvbmx5IHdvcmtzIG9uIHg4NiBDUFVzLgojZW5kaWYKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBudW1lcmljIHsKbmFtZXNwYWNlIGludGVydmFsX2xpYiB7Cm5hbWVzcGFjZSBkZXRhaWwgewoKc3RydWN0IHg4Nl9yb3VuZGluZwp7CiAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCByb3VuZGluZ19tb2RlOwoKICBzdGF0aWMgdm9pZCBzZXRfcm91bmRpbmdfbW9kZShjb25zdCByb3VuZGluZ19tb2RlJiBtb2RlKQogIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIihtb2RlKSk7IH0KCiAgc3RhdGljIHZvaWQgZ2V0X3JvdW5kaW5nX21vZGUocm91bmRpbmdfbW9kZSYgbW9kZSkKICB7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIobW9kZSkpOyB9CgogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3RhdGljIFQgdG9faW50KFQgcikKICB7CiAgICBUIHJfOwogICAgX19hc21fXyAoImZybmRpbnQiIDogIj0mdCIocl8pIDogIjAiKHIpKTsKICAgIHJldHVybiByXzsKICB9Cn07Cgp9IC8vIG5hbWVzcGFjZSBkZXRhaWwKfSAvLyBuYW1lc3BhY2UgaW50ZXJ2YWxfbGliCn0gLy8gbmFtZXNwYWNlIG51bWVyaWMKfSAvLyBuYW1lc3BhY2UgYm9vc3QKCiNlbmRpZiAvKiBCT09TVF9OVU1FUklDX0lOVEVSVkFMX0RFVEFJTF9YODZHQ0NfUk9VTkRJTkdfQ09OVFJPTF9IUFAgKi8K