LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgovKgogKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKICovCgojaWZuZGVmIF9fQ09ORklHX0gKI2RlZmluZSBfX0NPTkZJR19ICgojZGVmaW5lIEdSVVNTX1RFU1RJTkcKLyoKICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICogKGVhc3kgdG8gY2hhbmdlKQogKi8KCiNkZWZpbmUgQ09ORklHX1g4NgkJMQkvKiBUaGlzIGlzIGEgWDg2IENQVQkJKi8KI2RlZmluZSBDT05GSUdfU0M1MjAJCTEJLyogSW5jbHVkZSBzdXBwb3J0IGZvciBBTUQgU0M1MjAgKi8KI2RlZmluZSBDT05GSUdfQUxJMTUyWAkJMQkvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIEFsaSAxNTJ4IFNJTyAqLwoKI2RlZmluZSBDRkdfU0RSQU1fUFJFQ0hBUkdFX0RFTEFZIDYgICAgIC8qIDZUICovCiNkZWZpbmUgQ0ZHX1NEUkFNX1JFRlJFU0hfUkFURSAgICA3OCAgICAvKiA3Ljh1UyAoY2hvaWNlcyBhcmUgNy44LCAxNS42LCAzMS4yIG9yIDYyLjV1UykgKi8KI2RlZmluZSBDRkdfU0RSQU1fUkFTX0NBU19ERUxBWSAgIDMgICAgIC8qIDNUICovCgovKiBkZWZpbmUgYXQgbW9zdCBvbmUgb2YgdGhlc2UgKi8KI3VuZGVmIENGR19TRFJBTV9DQVNfTEFURU5DWV8yVAojZGVmaW5lIENGR19TRFJBTV9DQVNfTEFURU5DWV8zVAoKI2RlZmluZSBDRkdfU0M1MjBfSElHSF9TUEVFRCAgICAwICAgICAgIC8qIDEwMCBvciAxMzNNSHogKi8KI2RlZmluZSBDRkdfUkVTRVRfR0VORVJJQyAgICAgICAxICAgICAgIC8qIHVzZSB0cmlwcGxlLWZhdWx0IHRvIHJlc2V0IGNwdSAqLwojdW5kZWYgIENGR19SRVNFVF9TQzUyMCAgICAgICAgICAgICAgICAgLyogdXNlIFNDNTIwIE1NQ1IncyB0byByZXNldCBjcHUgKi8KI3VuZGVmICBDRkdfVElNRVJfU0M1MjAgICAgICAgICAgICAgICAgIC8qIHVzZSBTQzUyMCBzd3RpbWVycyAqLwojZGVmaW5lIENGR19USU1FUl9HRU5FUklDICAgICAgIDEgICAgICAgLyogdXNlIHRoZSBpODI1NCBQSVQgdGltZXJzICovCiN1bmRlZiAgQ0ZHX1RJTUVSX1RTQyAgICAgICAgICAgICAgICAgICAvKiB1c2UgdGhlIFBlbnRpdW0gVFNDIHRpbWVycyAqLwojZGVmaW5lICBDRkdfVVNFX1NJT19VQVJUICAgICAgIDAgICAgICAgLyogcHJlZmVyIHRoZSB1YXJ0cyBvbiB0aGUgU0lPIHRvIHRob3NlCgkJCQkJICogaW4gdGhlIFNDNTIwIG9uIHRoZSBDRFAgKi8KCiNkZWZpbmUgQ0ZHX1NUQUNLX1NJWkUgICAgICAgICAgMHg4MDAwICAvKiBTaXplIG9mIGJvb3Rsb2FkZXIgc3RhY2sgKi8KCiNkZWZpbmUgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUyAxCiNkZWZpbmUgQ09ORklHX0xBU1RfU1RBR0VfSU5JVCAgICAxCgovKgogKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICovCiNkZWZpbmUgQ09ORklHX01BTExPQ19TSVpFCShDT05GSUdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKCiNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCgovKgogKiBCT09UUCBvcHRpb25zCiAqLwojZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQojZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQoKCi8qCiAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgogKi8KI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgoKI2RlZmluZSBDT05GSUdfQ01EX1BDSQojaWZuZGVmIEdSVVNTX1RFU1RJTkcKI2RlZmluZSBDT05GSUdfQ01EX1NBVEEKI2Vsc2UKI3VuZGVmIENPTkZJR19DTURfU0FUQQojZW5kaWYKI2RlZmluZSBDT05GSUdfQ01EX0pGRlMyCiNkZWZpbmUgQ09ORklHX0NNRF9ORVQKI2RlZmluZSBDT05GSUdfQ01EX0VFUFJPTQoKI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTE1CiNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkicm9vdD0vZGV2L210ZGJsb2NrMCBjb25zb2xlPXR0eVMwLDk2MDAiCi8qICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJib290bSAzODAwMDAwMCIgKi8KCiNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkxMTUyMDAJCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCiNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLwojZW5kaWYKCi8qCiAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKICovCiNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLwojZGVmaW5lCUNGR19QUk9NUFQJCSJib290ID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCiNkZWZpbmUJQ0ZHX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwojZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLwojZGVmaW5lCUNGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KI2RlZmluZSBDRkdfQkFSR1NJWkUJCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwoKI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDAwMTAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDEwMDAwMDAJLyogMSAuLi4gMTYgTUIgaW4gRFJBTQkqLwoKI3VuZGVmICBDRkdfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLwoKI2RlZmluZQlDRkdfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwoKI2RlZmluZQlDRkdfSFoJCQkxMDI0CQkvKiBpbmNyZW1lbnRlciBmcmVxOiAxa0h6ICovCgoJCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBQaHlzaWNhbCBNZW1vcnkgTWFwCiAqLwojZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTQJICAgLyogd2UgaGF2ZSA0IGJhbmtzIG9mIERSQU0gKi8KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgogKi8KI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTMJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCiNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTY0CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwoKLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCiNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLwojZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgyKkNGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KCiNkZWZpbmUgQ09ORklHX1NQSV9FRVBST00gICAgICAvKiBTdXBwb3J0IGZvciBTUEkgRUVQUk9NcyAoQVQyNTEyOCkgKi8KI2RlZmluZSBDT05GSUdfTVdfRUVQUk9NICAgICAgIC8qIFN1cHBvcnQgZm9yIE1pY3JvV2lyZSBFRVBST01zIChBVDkzTEM0NikgKi8KCi8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQoKLyogRW52aXJvbm1lbnQgaW4gRUVQUk9NICovCiNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9FRVBST00gICAxCiNkZWZpbmUgQ09ORklHX1NQSQojZGVmaW5lIENPTkZJR19FTlZfU0laRQkgICAgICAgMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgRUVQUk9NIDE2ayBpcyBTUEkgaXMgdXNlZCBvciAxMjggYnl0ZXMgaWYgTVcgaXMgdXNlZCovCiNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQgICAgICAgICAwCiNkZWZpbmUgQ09ORklHX1NDNTIwX0NEUF9VU0VfU1BJICAvKiBTdG9yZSBjb25maWd1cmF0aW9uIGluIHRoZSBTUEkgcGFydCAqLwojdW5kZWYgQ09ORklHX1NDNTIwX0NEUF9VU0VfTVcgICAgLyogU3RvcmUgY29uZmlndXJhdGlvbiBpbiB0aGUgTWljcm9XaXJlIHBhcnQgKi8KI2RlZmluZSBDT05GSUdfU1BJX1ggMQoKLyoKICogSkZGUzIgcGFydGl0aW9ucwogKi8KLyogTm8gY29tbWFuZCBsaW5lLCBvbmUgc3RhdGljIHBhcnRpdGlvbiwgd2hvbGUgZGV2aWNlICovCiN1bmRlZiBDT05GSUdfSkZGUzJfQ01ETElORQojZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSJub3IwIgojZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJCTB4RkZGRkZGRkYKI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJMHgwMDAwMDAwMAoKLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KLyoKI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQojZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1TQzUyMENEUCBGbGFzaCBCYW5rICMwIgojZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVNDNTIwQ0RQIEZsYXNoIEJhbmsgIzA6LShqZmZzMikiCiovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIERldmljZSBkcml2ZXJzCiAqLwojZGVmaW5lIENPTkZJR19ORVRfTVVMVEkgICAgICAgIC8qIE11bHRpIGV0aGVybmV0IGNhcmRzIHN1cHBvcnQgKi8KI2RlZmluZSBDT05GSUdfUENORVQKI2RlZmluZSBDT05GSUdfUENORVRfNzlDOTczCiNkZWZpbmUgQ09ORklHX1BDTkVUXzc5Qzk3NQojZGVmaW5lIFBDTkVUX0hBU19QUk9NICAgICAgICAgMQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqU0FUQS9OYXRpdmUgU3R1ZmYKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaWZuZGVmIEdSVVNTX1RFU1RJTkcKI2RlZmluZSBDRkdfU0FUQV9NQVhCVVMgICAgICAgICAyICAgICAgIC8qTWF4IFNhdGEgYnVzZXMgc3VwcG9ydGVkICovCiNkZWZpbmUgQ0ZHX1NBVEFfREVWU19QRVJfQlVTICAgMiAgICAgIC8qTWF4IG5vLiBvZiBkZXZpY2VzIHBlciBidXMvcG9ydCAqLwojZGVmaW5lIENGR19TQVRBX01BWF9ERVZJQ0UgICAgIChDRkdfU0FUQV9NQVhCVVMqIENGR19TQVRBX0RFVlNfUEVSX0JVUykKI2RlZmluZSBDT05GSUdfQVRBX1BJSVgJCTEgICAgICAgLypTdXBwb3J0cyBhdGFfcGlpeCBkcml2ZXIgKi8KI2Vsc2UKI3VuZGVmIENGR19TQVRBX01BWEJVUwojdW5kZWYgQ0ZHX1NBVEFfREVWU19QRVJfQlVTCiN1bmRlZiBDRkdfU0FUQV9NQVhfREVWSUNFCiN1bmRlZiBDT05GSUdfQVRBX1BJSVgKI2VuZGlmCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBESVNLIFBhcnRpdGlvbiBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgojZGVmaW5lIENPTkZJR19JU09fUEFSVElUSU9OIC8qIEV4cGVyaW1lbnRhbCAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBWaWRlby9LZXlib2FyZCBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZm5kZWYgR1JVU1NfVEVTVElORwojZGVmaW5lIENPTkZJR19WSURFTwkJCS8qIFRvIGVuYWJsZSB2aWRlbyBjb250cm9sbGVyIHN1cHBvcnQgKi8KI2Vsc2UKI3VuZGVmIENPTkZJR19WSURFTwojZW5kaWYKI2RlZmluZSBDT05GSUdfSTgwNDJfS0JECiNkZWZpbmUgQ0ZHX0lTQV9JTyAwCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFJUQwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX1JUQ19NQzE0NjgxOAojdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCgovKgogKiBQQ0kgc3R1ZmYKICovCiNpZm5kZWYgR1JVU1NfVEVTVElORwojZGVmaW5lIENPTkZJR19QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGUgcGNpIHN1cHBvcnQgKi8KI2RlZmluZSBDT05GSUdfUENJX1BOUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwY2kgcGx1Zy1hbmQtcGxheSAqLwojZGVmaW5lIENPTkZJR19QQ0lfU0NBTl9TSE9XCgojZGVmaW5lCUNGR19GSVJTVF9QQ0lfSVJRICAgMTAKI2RlZmluZQlDRkdfU0VDT05EX1BDSV9JUlEgIDkKI2RlZmluZSBDRkdfVEhJUkRfUENJX0lSUSAgIDExCiNkZWZpbmUJQ0ZHX0ZPUlRIX1BDSV9JUlEgICAxNQojZWxzZQojdW5kZWYgQ09ORklHX1BDSQojdW5kZWYgQ09ORklHX1BDSV9QTlAKI3VuZGVmIENPTkZJR19QQ0lfU0NBTl9TSE9XCiNlbmRpZgoKCiNlbmRpZgkvKiBfX0NPTkZJR19IICovCg==