I2lmbmRlZiBNUDEwMDBfU0VQUk9NX0gKI2RlZmluZSBNUDEwMDBfU0VQUk9NX0gKCi8qCiAqIG1wMTAwMC1zZXByb20uaAogKgogKgogKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBTZXJpYWwgRUVQUk9NIGRlZmluaXRpb25zIGZvciB0aGUgTVAxMDAwIGJvYXJkCiAqCiAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQ29tZGlhbCBDb3Jwb3JhdGlvbgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqLwoKI2RlZmluZSBDT01NQU5EX0VSQVNFCQkoMHgxQzApCiNkZWZpbmUgQ09NTUFORF9FUkFTRV9BTEwJKDB4MTIwKQojZGVmaW5lIENPTU1BTkRfV1JJVEVfRElTQUJMRQkoMHgxMDApCiNkZWZpbmUgQ09NTUFORF9XUklURV9FTkFCTEUJKDB4MTMwKQojZGVmaW5lIENPTU1BTkRfUkVBRAkJKDB4MTgwKQojZGVmaW5lIENPTU1BTkRfV1JJVEUJCSgweDE0MCkKI2RlZmluZSBDT01NQU5EX1dSSVRFX0FMTAkoMHgxMTApCgovLwovLyBTZXJpYWwgRUVQUk9NIGRhdGEgZm9ybWF0Ci8vCgojZGVmaW5lIFBBQ0tFRCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKCnR5cGVkZWYgc3RydWN0IF9FRVBST00gewoJdW5pb24gewoJCXVuc2lnbmVkIGNoYXIgZXByb21fYnl0ZV9kYXRhWzEyOF07CgkJdW5zaWduZWQgc2hvcnQgZXByb21fc2hvcnRfZGF0YVs2NF07CgkJc3RydWN0IHsKCQkJdW5zaWduZWQgY2hhciB2ZXJzaW9uIFBBQ0tFRDsJLy8gRUVQUk9NIFZlcnNpb24gIjEiIGZvciBub3cKCQkJdW5zaWduZWQgY2hhciBib3hfaWQgUEFDS0VEOyAJLy8gQm94IElEIChTdGFuZGFsb25lLCBTT0hPLCBlbWJlZGRlZCwgZXRjKQoJCQl1bnNpZ25lZCBjaGFyIG1ham9yX2h3X3ZlcnNpb24gUEFDS0VEOwkvLyBNYWpvciBIYXJkd2FyZSB2ZXJzaW9uIChIZXgpCgkJCXVuc2lnbmVkIGNoYXIgbWlub3JfaHdfdmVyc2lvbiBQQUNLRUQ7CS8vIE1pbm9yIEhhcmR3YXJlIFZlcnNpb24gKEhleCkKCQkJdW5zaWduZWQgY2hhciBtZmdfaWRbM10gUEFDS0VEOwkvLyBNYW51ZmFjdHVyZXIgSUQgKDMgY2hhcmFjdGVyIEFscGhhYmV0aWMpCgkJCXVuc2lnbmVkIGNoYXIgbWZnX3NlcmlhbF9udW1iZXJbMTBdIFBBQ0tFRDsJLy8gTWFudWZhY3R1cmVyIFNlcmlhbCBudW1iZXIKCQkJdW5zaWduZWQgY2hhciBtZmdfZGF0ZVszXSBQQUNLRUQ7CS8vIERhdGUgb2YgTWZnIChGb3JtYXR0ZWQgWVk6TU06REQpCgkJCXVuc2lnbmVkIGNoYXIgY291bnRyeSBQQUNLRUQ7CS8vIENvdW50cnkgb2YgZGVwbG95bWVudAoJCQl1bnNpZ25lZCBjaGFyIG1hY19BZGRyZXNzWzZdIFBBQ0tFRDsJLy8gTUFDIEFkZHJlc3MKCQkJdW5zaWduZWQgY2hhciBvZW1fc3RyaW5nWzIwXSBQQUNLRUQ7CS8vIE9FTSBJRCBzdHJpbmcKCQkJdW5zaWduZWQgc2hvcnQgZmVhdHVyZV9iaXRzMSBQQUNLRUQ7CS8vIEZlYXR1cmUgQml0cyAxCgkJCXVuc2lnbmVkIHNob3J0IGZlYXR1cmVfYml0czIgUEFDS0VEOwkvLyBGZWF0dXJlIEJpdHMgMgoJCQl1bnNpZ25lZCBjaGFyIGZpbGxlcls3NV0gUEFDS0VEOwkJLy8gVW51c2VkL1VuZGVmaW5lZAmTMJQgaW5pdGlhbGl6ZWQKCQkJdW5zaWduZWQgc2hvcnQgY2hlY2tzdW0gUEFDS0VEOwkJLy8gYnl0ZSBhY2N1bXVsYXRlZCBzaG9ydCBjaGVja3N1bQoJCX0gZXByb21fc3RydWN0OwoJfSB2YXJpYW50Owp9ICBlZXByb21fc3RydWN0OwoKLyogVGhlc2Ugc2V0dGluZ3MgbXVzdCBiZSBtdXR1YWxseSBleGNsdXNpdmUgKi8KI2RlZmluZQlGRUFUVVJFX0JJVFMxX0RSQU1TSVpFXzE2TUVHCTB4MDAwMSAgLyogMCBzaWduaWZpZXMgNCBNRUcgc3lzdGVtICovCiNkZWZpbmUJRkVBVFVSRV9CSVRTMV9EUkFNU0laRV84TUVHCTB4MDAwMiAgLyogMSBpbiBiaXQgMSA9IDhNRUcgc3lzdGVtICovCiNkZWZpbmUJRkVBVFVSRV9CSVRTMV9EUkFNU0laRV82NE1FRwkweDAwMDQgIC8qIDEgaW4gYml0IDIgPSA2NE1FRyBzeXN0ZW0gKi8KCiNkZWZpbmUgRkVBVFVSRV9CSVRTMV9DUFVJUzkwTUVHICAgICAweDAwMTAKCmV4dGVybiB2b2lkIHNlcHJvbV9pbml0KHZvaWQpOwpleHRlcm4gZWVwcm9tX3N0cnVjdCogZ2V0X3NlcHJvbV9wdHIodm9pZCk7CmV4dGVybiB1bnNpZ25lZCBjaGFyKiBnZXRfZWVwcm9tX21hY19hZGRyZXNzKHZvaWQpOwoKI2VuZGlmIC8qIE1QMTAwMF9TRVBST01fSCAqLwoK