LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtaW5ndy13NjQgcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUi5QRCB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KI2luY2x1ZGUgPF9taW5nd19tYWMuaD4KCgkuZmlsZQkibG9nMXBsLlMiCgkudGV4dAoJLyogVGhlIGZ5bDJ4cDEgY2FuIG9ubHkgYmUgdXNlZCBmb3IgdmFsdWVzIGluCgkgICAtMSArIHNxcnQoMikgLyAyIDw9IHggPD0gMSAtIHNxcnQoMikgLyAyCgkgICAwLjI5IGlzIGEgc2FmZSB2YWx1ZS4KCSAqLwoKCS8qIE9ubHkgZ2NjIHVuZGVyc3RhbmRzIHRoZSAudGZsb2F0IHR5cGUKCSAgIFRoZSBzZXJpZXMgb2YgLmxvbmcgYmVsb3cgcmVwcmVzZW50cwoJICAgbGltaXQ6CS50ZmxvYXQgMC4yOQoJICovCgkuYWxpZ24gMTYKbGltaXQ6CgkubG9uZyAyOTIwNTc3NzYxCgkubG9uZyAyNDkxMDgxMDMxCgkubG9uZyAxNjM4MQojaWZkZWYgX1dJTjY0CgkuYWxpZ24gOAojZWxzZQoJLmFsaWduIDQKI2VuZGlmCgkvKiBQbGVhc2Ugbm90ZToJIHdlIHVzZSBhIGRvdWJsZSB2YWx1ZSBoZXJlLiAgU2luY2UgMS4wIGhhcwoJICAgYW4gZXhhY3QgcmVwcmVzZW50YXRpb24gdGhpcyBkb2VzIG5vdCBlZmZlY3QgdGhlIGFjY3VyYWN5CgkgICBidXQgaXQgaGVscHMgdG8gb3B0aW1pemUgdGhlIGNvZGUuICAqLwpvbmU6CS5kb3VibGUgMS4wCgovKgogKiBVc2UgdGhlIGZ5bDJ4cDEgZnVuY3Rpb24gd2hlbiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIHJhbmdlIC0wLjI5IHRvIDAuMjksCiAqIG90aGVyd2lzZSBmeWwyeCB3aXRoIHRoZSBuZWVkZWQgZXh0cmEgY29tcHV0YXRpb24uCiAqLwouZ2xvYmwgX19NSU5HV19VU1lNQk9MKGxvZzFwbCkKCS5kZWYJX19NSU5HV19VU1lNQk9MKGxvZzFwbCk7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgpfX01JTkdXX1VTWU1CT0wobG9nMXBsKToKI2lmZGVmIF9XSU42NAoJZmxkbG4yCglmbGR0CSglcmR4KQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CglmYWJzCglmbGR0CWxpbWl0KCVyaXApCglmY29tcHAKCWZuc3RzdwoJc2FoZgoJam5jCTJmCglmYWRkbAlvbmUoJXJpcCkKCWZ5bDJ4Cgltb3ZxCSVyY3gsJXJheAoJbW92cQkkMCw4KCVyY3gpCglmc3RwdAkoJXJjeCkKCXJldAoKMjoJZnlsMnhwMQoJbW92cQklcmN4LCVyYXgKCW1vdnEJJDAsOCglcmN4KQoJZnN0cHQJKCVyY3gpCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCgltb3ZxCSVyY3gsJXJheAoJbW92cQkkMCw4KCVyY3gpCglmc3RwdAkoJXJjeCkKCXJldAojZWxzZQoJZmxkbG4yCglmbGR0CTQoJWVzcCkKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0OgoJZmFicwoJZmxkdAlsaW1pdAoJZmNvbXBwCglmbnN0c3cKCXNhaGYKCWpuYwkyZgoJZmFkZGwJb25lCglmeWwyeAoJcmV0CgoyOglmeWwyeHAxCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCglyZXQKI2VuZGlmCg==