LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogUHVibGljIGRvbWFpbi4KICoKICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqLwoKI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CgoJLnNlY3Rpb24gLnJvZGF0YS5jc3Q4LCJhTSIsQHByb2diaXRzLDgKCgkucDJhbGlnbiAzCgkudHlwZSBvbmUsQG9iamVjdApvbmU6CS5kb3VibGUgMS4wCglBU01fU0laRV9ESVJFQ1RJVkUob25lKQoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkKCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8KCS50eXBlIGxpbWl0LEBvYmplY3QKbGltaXQ6CS5kb3VibGUgMC4yOQoJQVNNX1NJWkVfRElSRUNUSVZFKGxpbWl0KQoKCiNpZmRlZiBQSUMKIyBkZWZpbmUgTU8ob3ApIG9wIyNAR09UT0ZGKCVlZHgpCiNlbHNlCiMgZGVmaW5lIE1PKG9wKSBvcAojZW5kaWYKCgkudGV4dApFTlRSWShfX2llZWU3NTRfbG9nMTApCglmbGRsZzIJCQkvLyBsb2cxMCgyKQoJZmxkbAk0KCVlc3ApCQkvLyB4IDogbG9nMTAoMikKI2lmZGVmIFBJQwoJTE9BRF9QSUNfUkVHIChkeCkKI2VuZGlmCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogbG9nMTAoMikKCXNhaGYKCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKNDoJZnN1YmwJTU8ob25lKQkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiBsb2cxMCgyKQoJZmNvbXBsCU1PKGxpbWl0KQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJYW5kYgkkMHg0NSwgJWFoCglqegkyZgoJZnhhbQoJZm5zdHN3CglhbmRiCSQweDQ1LCAlYWgKCWNtcGIJJDB4NDAsICVhaAoJam5lCTVmCglmYWJzCQkJLy8gbG9nMTAoMSkgaXMgKzAgaW4gYWxsIHJvdW5kaW5nIG1vZGVzLgo1Oglmc3RwCSVzdCgxKQkJLy8geC0xIDogbG9nMTAoMikKCWZ5bDJ4cDEJCQkvLyBsb2cxMCh4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IGxvZzEwKDIpCglmeWwyeAkJCS8vIGxvZzEwKHgpCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCglyZXQKRU5EIChfX2llZWU3NTRfbG9nMTApCnN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X2xvZzEwLCBfX2xvZzEwX2Zpbml0ZSkK