LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUi5QRCB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KI2luY2x1ZGUgPF9taW5nd19tYWMuaD4KCgkuZmlsZQkibG9nMi5TIgoJLnRleHQKI2lmZGVmIF9XSU42NAoJLmFsaWduIDgKI2Vsc2UKCS5hbGlnbiA0CiNlbmRpZgpvbmU6CS5kb3VibGUgMS4wCgkvKiBJdCBpcyBub3QgaW1wb3J0YW50IHRoYXQgdGhpcyBjb25zdGFudCBpcyBwcmVjaXNlLiAgSXQgaXMgb25seQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUKCSAgIGZ5bDJ4cDEgaW5zdHJ1Y3Rpb24uICAqLwpsaW1pdDoJLmRvdWJsZSAwLjI5CgouZ2xvYmwgX19NSU5HV19VU1lNQk9MKGxvZzIpCgkuZGVmCV9fTUlOR1dfVVNZTUJPTChsb2cyKTsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9fTUlOR1dfVVNZTUJPTChsb2cyKToKI2lmZGVmIF9XSU42NAoJbW92c2QJJXhtbTAsLTE2KCVyc3ApCglmbGRsCW9uZQoJZmxkbAktMTYoJXJzcCkJCS8vIHggOiAxCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogMQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IDEKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IDEKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxCglhbmRiCSQweDQ1LCAlYWgKCWp6CTJmCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQoJZnlsMnhwMQkJCS8vIGxvZyh4KQoJZnN0cGwJLTE2KCVyc3ApCgltb3ZzZAktMTYoJXJzcCksJXhtbTAKCXJldAoKMjoJZnN0cAklc3QoMCkJCS8vIHggOiAxCglmeWwyeAkJCS8vIGxvZyh4KQoJZnN0cGwJLTE2KCVyc3ApCgltb3ZzZAktMTYoJXJzcCksJXhtbTAKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCWZzdHBsCS0xNiglcnNwKQoJbW92c2QJLTE2KCVyc3ApLCV4bW0wCglyZXQKI2Vsc2UKCWZsZGwJb25lCglmbGRsCTQoJWVzcCkJCS8vIHggOiAxCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogMQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IDEKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IDEKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxCglhbmRiCSQweDQ1LCAlYWgKCWp6CTJmCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQoJZnlsMnhwMQkJCS8vIGxvZyh4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IDEKCWZ5bDJ4CQkJLy8gbG9nKHgpCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCglyZXQKI2VuZGlmCg==