LyoKICogQ29weXJpZ2h0IChDKSBFeGNpdG8gRWxla3Ryb25payBpIFNr5W5lIEFCLCBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBBdXRob3I6IFRvciBLcmlsbCA8dG9yQGV4Y2l0by5jb20+CiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2lmbmRlZiBTQVRBX1NJTDMxMTRfSAojZGVmaW5lIFNBVEFfU0lMMzExNF9ICgpzdHJ1Y3Qgc2F0YV9pb3BvcnRzIHsKCXVuc2lnbmVkIGxvbmcgY21kX2FkZHI7Cgl1bnNpZ25lZCBsb25nIGRhdGFfYWRkcjsKCXVuc2lnbmVkIGxvbmcgZXJyb3JfYWRkcjsKCXVuc2lnbmVkIGxvbmcgZmVhdHVyZV9hZGRyOwoJdW5zaWduZWQgbG9uZyBuc2VjdF9hZGRyOwoJdW5zaWduZWQgbG9uZyBsYmFsX2FkZHI7Cgl1bnNpZ25lZCBsb25nIGxiYW1fYWRkcjsKCXVuc2lnbmVkIGxvbmcgbGJhaF9hZGRyOwoJdW5zaWduZWQgbG9uZyBkZXZpY2VfYWRkcjsKCXVuc2lnbmVkIGxvbmcgc3RhdHVzX2FkZHI7Cgl1bnNpZ25lZCBsb25nIGNvbW1hbmRfYWRkcjsKCXVuc2lnbmVkIGxvbmcgYWx0c3RhdHVzX2FkZHI7Cgl1bnNpZ25lZCBsb25nIGN0bF9hZGRyOwoJdW5zaWduZWQgbG9uZyBibWRtYV9hZGRyOwoJdW5zaWduZWQgbG9uZyBzY3JfYWRkcjsKfTsKCnN0cnVjdCBzYXRhX3BvcnQgewoJdW5zaWduZWQgY2hhciBwb3J0X25vOwkvKiBwcmltYXJ5PTAsIHNlY29uZGFyeT0xICAgICAgICovCglzdHJ1Y3Qgc2F0YV9pb3BvcnRzIGlvYWRkcjsJLyogQVRBIGNtZC9jdGwvZG1hIHJlZyBibGtzICAgICAqLwoJdW5zaWduZWQgY2hhciBjdGxfcmVnOwoJdW5zaWduZWQgY2hhciBsYXN0X2N0bDsKCXVuc2lnbmVkIGNoYXIgcG9ydF9zdGF0ZTsJLyogMS1wb3J0IGlzIGF2YWlsYWJsZSBhbmQgICAgICAqLwoJLyogMC1wb3J0IGlzIG5vdCBhdmFpbGFibGUgICAgICAqLwoJdW5zaWduZWQgY2hhciBkZXZfbWFzazsKfTsKCi8qIE1pc3NpbmcgYXRhIGRlZmluZXMgKi8KI2RlZmluZSBBVEFfQ01EX1NUQU5EQlkJCQkweEUyCiNkZWZpbmUgQVRBX0NNRF9TVEFOREJZTk9XMQkJMHhFMAojZGVmaW5lIEFUQV9DTURfSURMRQkJCTB4RTMKI2RlZmluZSBBVEFfQ01EX0lETEVJTU1FRElBVEUJMHhFMQoKLyogRGVmaW5lcyBmb3IgU0lMMzExNCBjaGlwICovCgovKiBQQ0kgZGVmaW5lcyAqLwojZGVmaW5lIFNJTF9WRU5EX0lECQkweDEwOTUKI2RlZmluZSBTSUwzMTE0X0RFVklDRV9JRAkweDMxMTQKCi8qIHNvbWUgdmVuZG9yIHNwZWNpZmljIHJlZ2lzdGVycyAqLwojZGVmaW5lCVZORF9TWVNDT05GU1RBVAkweDg4CS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFN0YXR1cyBhbmQgQ29tbWFuZCAqLwojZGVmaW5lIFZORF9TWVNDT05GU1RBVF9DSE5fMF9JTlRCTE9DSyAoMTw8MjIpCiNkZWZpbmUgVk5EX1NZU0NPTkZTVEFUX0NITl8xX0lOVEJMT0NLICgxPDwyMykKI2RlZmluZSBWTkRfU1lTQ09ORlNUQVRfQ0hOXzJfSU5UQkxPQ0sgKDE8PDI0KQojZGVmaW5lIFZORF9TWVNDT05GU1RBVF9DSE5fM19JTlRCTE9DSyAoMTw8MjUpCgovKiBpbnRlcm5hbCByZWdpc3RlcnMgbWFwcGVkIGJ5IEJBUjUgKi8KLyogU0FUQSBDb250cm9sKi8KI2RlZmluZSBWTkRfU0NPTlRST0xfQ0gwCTB4MTAwCiNkZWZpbmUgVk5EX1NDT05UUk9MX0NIMQkweDE4MAojZGVmaW5lIFZORF9TQ09OVFJPTF9DSDIJMHgzMDAKI2RlZmluZSBWTkRfU0NPTlRST0xfQ0gzCTB4MzgwCgojZGVmaW5lIFNBVEFfU0NfSVBNX1QyUAkJKDE8PDE2KQojZGVmaW5lIFNBVEFfU0NfSVBNX1QyUwkJKDI8PDE2KQojZGVmaW5lIFNBVEFfU0NfU1BEXzFfNQkJKDE8PDQpCiNkZWZpbmUgU0FUQV9TQ19TUERfM18wCQkoMjw8NCkKI2RlZmluZSBTQVRBX1NDX0RFVF9SU1QJCSgxKQkvKiBBVEEgUmVzZXQgc2VxdWVuY2UgKi8KI2RlZmluZSBTQVRBX1NDX0RFVF9QRElTCSg0KQkvKiBQSFkgRGlzYWJsZSAqLwoKLyogU0FUQSBTdGF0dXMgKi8KI2RlZmluZSBWTkRfU1NUQVRVU19DSDAJCTB4MTA0CiNkZWZpbmUgVk5EX1NTVEFUVVNfQ0gxCQkweDE4NAojZGVmaW5lIFZORF9TU1RBVFVTX0NIMgkJMHgzMDQKI2RlZmluZSBWTkRfU1NUQVRVU19DSDMJCTB4Mzg0CgojZGVmaW5lIFNBVEFfU1NfSVBNX0FDVElWRQkoMTw8OCkKI2RlZmluZSBTQVRBX1NTX0lQTV9QQVJUSUFMCSgyPDw4KQojZGVmaW5lIFNBVEFfU1NfSVBNX1NMVU1CRVIJKDY8PDgpCiNkZWZpbmUgU0FUQV9TU19TUERfMV81CQkoMTw8NCkKI2RlZmluZSBTQVRBX1NTX1NQRF8zXzAJCSgyPDw0KQojZGVmaW5lIFNBVEFfREVUX1BfTk9QSFkJKDEpCS8qIERldmljZSBwcmVzZW5jZSBidXQgbm8gUEhZIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgKi8KI2RlZmluZSBTQVRBX0RFVF9QUkVTCQkoMykJLyogRGV2aWNlIHByZXNlbmNlIGFuZCBhY3RpdmUgUEhZICovCiNkZWZpbmUgU0FUQV9ERVRfT0ZGTElORQkoNCkJLyogRGV2aWNlIG9mZmxpbmUgb3IgaW4gbG9vcGJhY2sgbW9kZSAqLwoKLyogVGFzayBmaWxlIHJlZ2lzdGVycyBpbiBCQVI1IG1hcHBpbmcgKi8KI2RlZmluZSBWTkRfVEYwX0NIMAkJCTB4ODAKI2RlZmluZSBWTkRfVEYwX0NIMQkJCTB4YzAKI2RlZmluZSBWTkRfVEYwX0NIMgkJCTB4MjgwCiNkZWZpbmUgVk5EX1RGMF9DSDMJCQkweDJjMAojZGVmaW5lIFZORF9URjFfQ0gwCQkJMHg4OAojZGVmaW5lIFZORF9URjFfQ0gxCQkJMHhjOAojZGVmaW5lIFZORF9URjFfQ0gyCQkJMHgyODgKI2RlZmluZSBWTkRfVEYxX0NIMwkJCTB4MmM4CiNkZWZpbmUgVk5EX1RGMl9DSDAJCQkweDg4CiNkZWZpbmUgVk5EX1RGMl9DSDEJCQkweGM4CiNkZWZpbmUgVk5EX1RGMl9DSDIJCQkweDI4OAojZGVmaW5lIFZORF9URjJfQ0gzCQkJMHgyYzgKCiNkZWZpbmUgVk5EX0JNRE1BX0NIMAkJMHgwMAojZGVmaW5lIFZORF9CTURNQV9DSDEJCTB4MDgKI2RlZmluZSBWTkRfQk1ETUFfQ0gyCQkweDIwMAojZGVmaW5lIFZORF9CTURNQV9DSDMJCTB4MjA4CiNkZWZpbmUgVk5EX0JNRE1BMl9DSDAJCTB4MTAKI2RlZmluZSBWTkRfQk1ETUEyX0NIMQkJMHgxOAojZGVmaW5lIFZORF9CTURNQTJfQ0gyCQkweDIxMAojZGVmaW5lIFZORF9CTURNQTJfQ0gzCQkweDIxOAoKLyogRklGTyBjb250cm9sICovCiNkZWZpbmUJVk5EX0ZJRk9DRkdfQ0gwCQkweDQwCiNkZWZpbmUJVk5EX0ZJRk9DRkdfQ0gxCQkweDQ0CiNkZWZpbmUJVk5EX0ZJRk9DRkdfQ0gyCQkweDI0MAojZGVmaW5lCVZORF9GSUZPQ0ZHX0NIMwkJMHgyNDQKCi8qIFRhc2sgRmlsZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgKi8KI2RlZmluZSBWTkRfVEZfQ05TVF9DSDAJCTB4YTAKI2RlZmluZSBWTkRfVEZfQ05TVF9DSDEJCTB4ZTAKI2RlZmluZSBWTkRfVEZfQ05TVF9DSDIJCTB4MmEwCiNkZWZpbmUgVk5EX1RGX0NOU1RfQ0gzCQkweDJlMAoKI2RlZmluZSBWTkRfVEZfQ05TVF9CRkNNRAkoMTw8MSkKI2RlZmluZSBWTkRfVEZfQ05TVF9DSE5SU1QJKDE8PDIpCiNkZWZpbmUgVk5EX1RGX0NOU1RfVkRNQQkoMTw8MTApCiNkZWZpbmUgVk5EX1RGX0NOU1RfSU5UU1QJKDE8PDExKQojZGVmaW5lIFZORF9URl9DTlNUX1dEVE8JKDE8PDEyKQojZGVmaW5lIFZORF9URl9DTlNUX1dERU4JKDE8PDEzKQojZGVmaW5lIFZORF9URl9DTlNUX1dESUVOCSgxPDwxNCkKCi8qIGZvciB0ZXN0aW5nICovCiNkZWZpbmUgVk5EX1NTRFIJCQkweDA0YwkvKiBTeXN0ZW0gU29mdHdhcmUgRGF0YSBSZWdpc3RlciAqLwojZGVmaW5lIFZORF9GTUFDUwkJCTB4MDUwCS8qIEZsYXNoIE1lbW9yeSBBZGRyZXNzIGNvbnRyb2wgYW5kIHN0YXR1cyAqLwoKI2VuZGlmCg==