LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICogCiAqIChDKSBDb3B5cmlnaHQgMjAwMgogKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgogKgogKiAoQykgQ29weXJpZ2h0IDIwMDIKICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyoKICogQ1BVIHNwZWNpZmljIGNvZGUKICovCgojaW5jbHVkZSA8Y29tbW9uLmg+CiNpbmNsdWRlIDxjb21tYW5kLmg+CgppbnQgY3B1X2luaXQodm9pZCkKewoJLyogaW5pdGlhbGl6ZSBGUFUsIHJlc2V0IEVNLCBzZXQgTVAgYW5kIE5FICovCglhc20gKCJmbmluaXRcbiIgXAogICAgICAgICAgICAgIm1vdmwgJWNyMCwgJWVheFxuIiBcCiAgICAgICAgICAgICAiYW5kbCAkfjB4NCwgJWVheFxuIiBcCiAgICAgICAgICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCiAgICAgICAgICAgICAibW92bCAlZWF4LCAlY3IwXG4iICk7CgkKCXJldHVybiAwOwp9CgppbnQgZG9fcmVzZXQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKCWV4dGVybiB2b2lkIHJlc2V0X2NwdSh1bG9uZyBhZGRyKTsKCglwcmludGYgKCJyZXNldHRpbmcgLi4uXG4iKTsKCXVkZWxheSg1MDAwMCk7CQkJCS8qIHdhaXQgNTAgbXMgKi8KCWRpc2FibGVfaW50ZXJydXB0cygpOwoJcmVzZXRfY3B1KDApOwoKCS8qTk9UUkVBQ0hFRCovCglyZXR1cm4gMDsKfQoKdm9pZCAgZmx1c2hfY2FjaGUgKHVuc2lnbmVkIGxvbmcgZHVtbXkxLCB1bnNpZ25lZCBsb25nIGR1bW15MikKewoJYXNtKCJ3YmludmRcbiIpOwoJcmV0dXJuOwp9Cgo=