LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgovKgogKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKICovCgojaWZuZGVmIF9fQ09ORklHX0gKI2RlZmluZSBfX0NPTkZJR19ICgovKgogKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogKiAoZWFzeSB0byBjaGFuZ2UpCiAqLwoKI2RlZmluZSBDT05GSUdfWDg2CQkxCS8qIFRoaXMgaXMgYSBYODYgQ1BVCQkqLwojZGVmaW5lIENPTkZJR19TQzUyMAkJMQkvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCBTQzUyMCAqLwoKI2RlZmluZSBDRkdfU0RSQU1fUFJFQ0hBUkdFX0RFTEFZIDYgICAgIC8qIDZUICovCiNkZWZpbmUgQ0ZHX1NEUkFNX1JFRlJFU0hfUkFURSAgICA3OCAgICAvKiA3Ljh1UyAoY2hvaWNlcyBhcmUgNy44LCAxNS42LCAzMS4yIG9yIDYyLjV1UykgKi8KI2RlZmluZSBDRkdfU0RSQU1fUkFTX0NBU19ERUxBWSAgIDMgICAgIC8qIDNUICovCgovKiBkZWZpbmUgYXQgbW9zdCBvbmUgb2YgdGhlc2UgKi8KI3VuZGVmIENGR19TRFJBTV9DQVNfTEFURU5DWV8yVAojZGVmaW5lIENGR19TRFJBTV9DQVNfTEFURU5DWV8zVAoKI2RlZmluZSBDRkdfU0M1MjBfSElHSF9TUEVFRCAgICAwICAgICAgIC8qIDEwMCBvciAxMzNNSHogKi8KI2RlZmluZSBDRkdfUkVTRVRfR0VORVJJQyAgICAgICAxICAgICAgIC8qIHVzZSB0cmlwcGxlLWZhdWx0IHRvIHJlc2V0IGNwdSAqLwojdW5kZWYgIENGR19SRVNFVF9TQzUyMCAgICAgICAgICAgICAgICAgLyogdXNlIFNDNTIwIE1NQ1IncyB0byByZXNldCBjcHUgKi8KI3VuZGVmICBDRkdfVElNRVJfU0M1MjAgICAgICAgICAgICAgICAgIC8qIHVzZSBTQzUyMCBzd3RpbWVycyAqLwojZGVmaW5lIENGR19USU1FUl9HRU5FUklDICAgICAgIDEgICAgICAgLyogdXNlIHRoZSBpODI1NCBQSVQgdGltZXJzICovCiN1bmRlZiAgQ0ZHX1RJTUVSX1RTQyAgICAgICAgICAgICAgICAgICAvKiB1c2UgdGhlIFBlbnRpdW0gVFNDIHRpbWVycyAqLwoKI2RlZmluZSBDRkdfU1RBQ0tfU0laRSAgICAgICAgICAweDgwMDAgIC8qIFNpemUgb2YgYm9vdGxvYWRlciBzdGFjayAqLwoKI2RlZmluZSBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTIDEKI2RlZmluZSBDT05GSUdfTEFTVF9TVEFHRV9JTklUICAgIDEKCi8qCiAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogKi8KI2RlZmluZSBDT05GSUdfTUFMTE9DX1NJWkUJKENGR19FTlZfU0laRSArIDEyOCoxMDI0KQoKCiNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCgoKLyoKICogQk9PVFAgb3B0aW9ucwogKi8KI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCiNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICiNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKCgovKgogKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KICovCiNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KCiNkZWZpbmUgQ09ORklHX0NNRF9QQ0kKI2RlZmluZSBDT05GSUdfQ01EX0pGRlMyCiNkZWZpbmUgQ09ORklHX0NNRF9JREUKI2RlZmluZSBDT05GSUdfQ01EX05FVAojZGVmaW5lIENPTkZJR19DTURfUENNQ0lBCiNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KCgojZGVmaW5lIENPTkZJR19CT09UREVMQVkJMTUKI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgCSJyb290PS9kZXYvbXRkYmxvY2sxIGNvbnNvbGU9dHR5UzAsOTYwMCBtdGRwYXJ0cz1waHlzOjc5MzZrKHJvb3QpLDI1NmsodWJvb3QpICIKI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIGlwPWF1dG9jb25mIGNvbnNvbGU9dHR5UzAsOTYwMCBtdGRwYXJ0cz1waHlzOjc4MDhrKHJvb3QpLDEyOGsoZW52KSwyNTZrKHVib290KTsgYm9vdHA7IGJvb3RtIgoKI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQojZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTExNTIwMAkJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCiNlbmRpZgoKCi8qCiAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKICovCiNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLwojZGVmaW5lCUNGR19QUk9NUFQJCSJib290ID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCiNkZWZpbmUJQ0ZHX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwojZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLwojZGVmaW5lCUNGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KI2RlZmluZSBDRkdfQkFSR1NJWkUJCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwoKI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDAwMTAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDEwMDAwMDAJLyogMSAuLi4gMTYgTUIgaW4gRFJBTQkqLwoKI3VuZGVmICBDRkdfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLwoKI2RlZmluZQlDRkdfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwoKI2RlZmluZQlDRkdfSFoJCQkxMDI0CQkvKiBpbmNyZW1lbnRlciBmcmVxOiAxa0h6ICovCgoJCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUGh5c2ljYWwgTWVtb3J5IE1hcAogKi8KI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwk0CSAgIC8qIHdlIGhhdmUgNCBiYW5rcyBvZiBEUkFNICovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KICovCgoKI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCiNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTUxMgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KCi8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLwojZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCSgyKkNGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkoMipDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCgoKI2RlZmluZSBDT05GSUdfU1BJX0VFUFJPTSAgICAgICAvKiBTUEkgRUVQUk9NcyBzdWNoIGFzIEFUMjUwMTAgb3IgQVQyNTY0MCAqLwojZGVmaW5lIENPTkZJR19NV19FRVBST00gICAgICAgIC8qIE1pY3JvV2lyZSBFRVBST01TIHN1Y2ggYXMgQVQ5M0xDNDYgKi8KI2RlZmluZSBDT05GSUdfRFMxNzIyICAgICAgICAgICAvKiBEYWxsYXMgRFMxNzIyIFNQSSBUZW1wZXJhdHVyZSBwcm9iZSAqLwoKCi8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQoKCiNpZiAwCi8qIEVudmlyb25tZW50IGluIGZsYXNoICovCiNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSCAgICAgMQojIGRlZmluZSBDRkdfRU5WX0FERFIJCSgweDM4N2EwMDAwKQkvKiBBZGRyIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwojIGRlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKG9yIDB4MTAwMDApICovCiMgZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgICAgMAoKI2Vsc2UKLyogRW52aXJvbm1lbnQgaW4gRUVQUk9NICovCgojIGRlZmluZSBDRkdfRU5WX0lTX0lOX0VFUFJPTSAgIDEKIyBkZWZpbmUgQ09ORklHX1NQSQojIGRlZmluZSBDT05GSUdfU1BJX1ggMQojIGRlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IEVFUFJPTQkqLwojIGRlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgIDB4MWMwMAoKI2VuZGlmCgovKgogKiBKRkZTMiBwYXJ0aXRpb25zCiAqCiAqLwovKiBObyBjb21tYW5kIGxpbmUsIG9uZSBzdGF0aWMgcGFydGl0aW9uLCB3aG9sZSBkZXZpY2UgKi8KI3VuZGVmIENPTkZJR19KRkZTMl9DTURMSU5FCiNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5vcjAiCiNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkJMHhGRkZGRkZGRgojZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkweDAwMDAwMDAwCgovKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLwovKiBOb3RlOiBmYWtlIG10ZF9pZCB1c2VkLCBubyBsaW51eCBtdGQgbWFwIGZpbGUgKi8KLyoKI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQojZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1zYzUyMF9zcHVuay0wIgojZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPXNjNTIwX3NwdW5rLTA6LShqZmZzMikiCiovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIERldmljZSBkcml2ZXJzCiAqLwojZGVmaW5lIENPTkZJR19ORVRfTVVMVEkgICAgICAgIC8qIE11bHRpIGV0aGVybmV0IGNhcmRzIHN1cHBvcnQgKi8KI2RlZmluZSBDT05GSUdfRUVQUk8xMDAKI2RlZmluZSBDRkdfUlhfRVRIX0JVRkZFUgk4ICAgICAgICAgICAgICAgLyogdXNlIDggcnggYnVmZmVyIG9uIGVlcHJvMTAwICAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJREUvQVRBIHN0dWZmCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ0ZHX0lERV9NQVhCVVMJCTIgICAvKiBtYXguIDIgSURFIGJ1c3NlcwkqLwojZGVmaW5lIENGR19JREVfTUFYREVWSUNFCShDRkdfSURFX01BWEJVUyoyKSAvKiBtYXguIDIgZHJpdmVzIHBlciBJREUgYnVzICovCiNkZWZpbmUgQ0ZHX0FUQV9CQVNFX0FERFIgICAgICAgMAojZGVmaW5lIENGR19BVEFfSURFMF9PRkZTRVQJMHgwMWYwCS8qIGlkZTAgb2Zmc2V0ICovCiNkZWZpbmUgQ0ZHX0FUQV9JREUxX09GRlNFVAkweGUwMDAJLyogaWRlMSBvZmZzZXQgKi8KI2RlZmluZSBDRkdfQVRBX0RBVEFfT0ZGU0VUCTAJLyogZGF0YSByZWcgb2Zmc2V0CSovCiNkZWZpbmUgQ0ZHX0FUQV9SRUdfT0ZGU0VUCTAJLyogcmVnIG9mZnNldCAqLwojZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDIwMAkvKiBhbHRlcm5hdGUgcmVnaXN0ZXIgb2Zmc2V0ICovCgojZGVmaW5lIENGR19GSVJTVF9QQ01DSUFfQlVTICAgIDEKCiN1bmRlZglDT05GSUdfSURFX0xFRAkJCS8qIG5vIGxlZCBmb3IgaWRlIHN1cHBvcnRlZAkqLwojdW5kZWYgIENPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgdW5zdXBwb3J0ZWQuLi4JKi8KI3VuZGVmICBDT05GSUdfSURFX1JFU0VUX1JPVVRJTkUJLyogbm8gc3BlY2lhbCByZXNldCBmdW5jdGlvbiAqLwoKI2RlZmluZSBDT05GSUdfSURFX1RJX0NBUkRCVVMKI2RlZmluZSBDRkdfUENNQ0lBX0NJU19XSU4gICAgICAgICAgMHgyN2YwMDAwMAojZGVmaW5lIENGR19QQ01DSUFfQ0lTX1dJTl9TSVpFICAgICAweDAwMTAwMDAwCiNkZWZpbmUgQ0ZHX1BDTUNJQV9JT19XSU4gICAgICAgICAgIDB4ZTAwMAojZGVmaW5lIENGR19QQ01DSUFfSU9fV0lOX1NJWkUgICAgICAxNgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBESVNLIFBhcnRpdGlvbiBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgojZGVmaW5lIENPTkZJR19JU09fUEFSVElUSU9OIC8qIEV4cGVyaW1lbnRhbCAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogUlRDCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBDT05GSUdfUlRDX01DMTQ2ODE4CiN1bmRlZiBDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KCi8qCiAqIFBDSSBzdHVmZgogKi8KI2RlZmluZSBDT05GSUdfUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRlIHBjaSBzdXBwb3J0ICovCiNkZWZpbmUgQ09ORklHX1BDSV9QTlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGNpIHBsdWctYW5kLXBsYXkgKi8KI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwoKI2RlZmluZQlDRkdfRklSU1RfUENJX0lSUSAgIDkKI2RlZmluZQlDRkdfU0VDT05EX1BDSV9JUlEgIDEwCiNkZWZpbmUJQ0ZHX1RISVJEX1BDSV9JUlEgICAxMQojZGVmaW5lCUNGR19GT1JUSF9QQ0lfSVJRICAgMTIKCiNlbmRpZgkvKiBfX0NPTkZJR19IICovCg==