LyoKICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKICoKICogIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgogKiAgQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAqLwojaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICgovKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAxICovCiNkZWZpbmUgT01BUF9ETUFfQkFTRQkJCSgweGZmZmVkODAwKQojZGVmaW5lIE9NQVBfRE1BX0dDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDApCiNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCiNkZWZpbmUgT01BUF9ETUFfR1JTVAkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDgpCiNkZWZpbmUgT01BUF9ETUFfSFdfSUQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDQyKQojZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCiNkZWZpbmUgT01BUF9ETUFfUENIMF9JRAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0NikKI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQojZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCiNkZWZpbmUgT01BUF9ETUFfUENIRF9JRAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0YykKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MikKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQojZGVmaW5lIE9NQVBfRE1BX0NBUFNfMwkJCShPTUFQX0RNQV9CQVNFICsgMHg0NTgpCiNkZWZpbmUgT01BUF9ETUFfQ0FQU180CQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQojZGVmaW5lIE9NQVBfRE1BX1BDSDBfU1IJCShPTUFQX0RNQV9CQVNFICsgMHg0ODApCiNkZWZpbmUgT01BUF9ETUFfUENIMV9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQoKLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9CQVNFCQkoTDRfMjRYWF9CQVNFICsgMHg1NjAwMCkKI2RlZmluZSBPTUFQX0RNQTRfUkVWSVNJT04JCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MDApCiNkZWZpbmUgT01BUF9ETUE0X0dDUl9SRUcJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzgpCiNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwOCkKI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wxCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDBjKQojZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTApCiNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxNCkKI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wwCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDE4KQojZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDEJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MWMpCiNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyMCkKI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wzCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDI0KQojZGVmaW5lIE9NQVBfRE1BNF9TWVNTVEFUVVMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjgpCiNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2NCkKI2RlZmluZSBPTUFQX0RNQTRfQ0FQU18yCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDZjKQojZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzApCiNkZWZpbmUgT01BUF9ETUE0X0NBUFNfNAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3NCkKCiNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQoKI2RlZmluZSBPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UCTE3CgovKiBDb21tb24gY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIG9tYXAxICovCiNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAwKQojZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAyKQojZGVmaW5lIE9NQVBfRE1BX0NJQ1JfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNikKI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMCkKI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMikKI2RlZmluZSBPTUFQX0RNQV9DU0ZJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTQpCiNkZWZpbmUgT01BUF9ETUFfQ1NFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQojZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxOCkKI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWEpCiNkZWZpbmUgT01BUF9ETUFfQ0RFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQojZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxZSkKI2RlZmluZSBPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI4KQoKI2Vsc2UKCiNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkzMgkvKiBSRVZJU0lUOiBJcyB0aGlzIDMyICsgMj8gKi8KCi8qIENvbW1vbiBjaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBmb3Igb21hcDIgKi8KI2RlZmluZSBPTUFQX0RNQV9DQ1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODApCiNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhuKQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODQpCiNkZWZpbmUgT01BUF9ETUFfQ0lDUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4OCkKI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OGMpCiNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5MCkKI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTQpCiNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk4KQojZGVmaW5lIE9NQVBfRE1BX0NTRUlfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTQpCiNkZWZpbmUgT01BUF9ETUFfQ1NGSV9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhOCkKI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGFjKQojZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjApCiNkZWZpbmUgT01BUF9ETUFfQ1NBQ19SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiNCkKI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI4KQoKI2VuZGlmCgovKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBvbmx5IG9uIG9tYXAxICovCiNkZWZpbmUgT01BUDFfRE1BX0NTU0FfTF9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA4KQojZGVmaW5lIE9NQVAxX0RNQV9DU1NBX1VfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYSkKI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9MX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGMpCiNkZWZpbmUgT01BUDFfRE1BX0NEU0FfVV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBlKQojZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9MX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKI2RlZmluZSBPTUFQMV9ETUFfQ0NSMl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQojZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9VX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMikKI2RlZmluZSBPTUFQMV9ETUFfTENIX0NUUkxfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQoKLyogQ2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgb25seSBvbiBvbWFwMiAqLwojZGVmaW5lIE9NQVAyX0RNQV9DU1NBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDljKQojZGVmaW5lIE9NQVAyX0RNQV9DRFNBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGEwKQojZGVmaW5lIE9NQVAyX0RNQV9DQ0VOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGJjKQojZGVmaW5lIE9NQVAyX0RNQV9DQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGMwKQojZGVmaW5lIE9NQVAyX0RNQV9DT0xPUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjNCkKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKiBETUEgY2hhbm5lbHMgZm9yIG9tYXAxICovCiNkZWZpbmUgT01BUF9ETUFfTk9fREVWSUNFCQkwCiNkZWZpbmUgT01BUF9ETUFfTUNTSTFfVFgJCTEKI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9SWAkJMgojZGVmaW5lIE9NQVBfRE1BX0kyQ19SWAkJCTMKI2RlZmluZSBPTUFQX0RNQV9JMkNfVFgJCQk0CiNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRCQk1CiNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRMgkJNgojZGVmaW5lIE9NQVBfRE1BX1VXSVJFX1RYCQk3CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1RYCQk4CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1JYCQk5CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AzX1RYCQkxMAojZGVmaW5lIE9NQVBfRE1BX01DQlNQM19SWAkJMTEKI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9UWAkJMTIKI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9SWAkJMTMKI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9UWAkJMTQKI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9SWAkJMTUKI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDJfVFgJCTE2CiNkZWZpbmUgT01BUF9ETUFfTUNCU1AyX1JYCQkxNwojZGVmaW5lIE9NQVBfRE1BX1VBUlQzX1RYCQkxOAojZGVmaW5lIE9NQVBfRE1BX1VBUlQzX1JYCQkxOQojZGVmaW5lIE9NQVBfRE1BX0NBTUVSQV9JRl9SWAkJMjAKI2RlZmluZSBPTUFQX0RNQV9NTUNfVFgJCQkyMQojZGVmaW5lIE9NQVBfRE1BX01NQ19SWAkJCTIyCiNkZWZpbmUgT01BUF9ETUFfTkFORAkJCTIzCiNkZWZpbmUgT01BUF9ETUFfSVJRX0xDRF9MSU5FCQkyNAojZGVmaW5lIE9NQVBfRE1BX01FTU9SWV9TVElDSwkJMjUKI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDAJCTI2CiNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgxCQkyNwojZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMgkJMjgKI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDAJCTI5CiNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgxCQkzMAojZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1RYMgkJMzEKCi8qIFRoZXNlIGFyZSBvbmx5IGZvciAxNjEwICovCiNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19JTgkJMzIKI2RlZmluZSBPTUFQX0RNQV9TUElfVFgJCQkzMwojZGVmaW5lIE9NQVBfRE1BX1NQSV9SWAkJCTM0CiNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0hBU0gJCTM1CiNkZWZpbmUgT01BUF9ETUFfQ0NQX0FUVE4JCTM2CiNkZWZpbmUgT01BUF9ETUFfQ0NQX0ZJRk9fTk9UX0VNUFRZCTM3CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzAJMzgKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMAkzOQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8xCTQwCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzEJNDEKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMgk0MgojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8yCTQzCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzMJNDQKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMwk0NQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl80CTQ2CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzQJNDcKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNQk0OAojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl81CTQ5CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzYJNTAKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNgk1MQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl83CTUyCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzcJNTMKI2RlZmluZSBPTUFQX0RNQV9NTUMyX1RYCQk1NAojZGVmaW5lIE9NQVBfRE1BX01NQzJfUlgJCTU1CiNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19PVVQJCTU2CgovKiBETUEgY2hhbm5lbHMgZm9yIDI0eHggKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTk9fREVWSUNFCQkwCiNkZWZpbmUgT01BUDI0WFhfRE1BX1hUSV9ETUEJCTEJLyogU19ETUFfMCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMAkyCS8qIFNfRE1BXzEgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTEJMwkvKiBTX0RNQV8yICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0dQTUMJCTQJLyogU19ETUFfMyAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9HRlgJCTUJLyogU19ETUFfNCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9EU1MJCTYJLyogU19ETUFfNSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9WTFlOUV9UWAkJNwkvKiBTX0RNQV82ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0NXVAkJOAkvKiBTX0RNQV83ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19UWAkJOQkvKiBTX0RNQV84ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19SWAkJMTAJLyogU19ETUFfOSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfVFgJCTExCS8qIFNfRE1BXzEwICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0RFU19SWAkJMTIJLyogU19ETUFfMTEgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfU0hBMU1ENV9SWAkJMTMJLyogU19ETUFfMTIgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTIJMTQJLyogU19ETUFfMTMgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTMJMTUJLyogU19ETUFfMTQgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTQJMTYJLyogU19ETUFfMTUgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1JECQkxNwkvKiBTX0RNQV8xNiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQUNfV1IJCTE4CS8qIFNfRE1BXzE3ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9SRAkxOQkvKiBTX0RNQV8xOCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfVUxfV1IJMjAJLyogU19ETUFfMTkgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1JECTIxCS8qIFNfRE1BXzIwICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9XUgkyMgkvKiBTX0RNQV8yMSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfUkQJMjMJLyogU19ETUFfMjIgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX1VMX1dSCTI0CS8qIFNfRE1BXzIzICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9ETF9SRAkyNQkvKiBTX0RNQV8yNCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfRExfV1IJMjYJLyogU19ETUFfMjUgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMV9UWAkJMjcJLyogU19ETUFfMjYgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMV9SWAkJMjgJLyogU19ETUFfMjcgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMl9UWAkJMjkJLyogU19ETUFfMjggKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMl9SWAkJMzAJLyogU19ETUFfMjkgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYCQkzMQkvKiBTRE1BXzMwICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMV9SWAkJMzIJLyogU0RNQV8zMSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgJCTMzCS8qIFNETUFfMzIgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYCQkzNAkvKiBTRE1BXzMzICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgwCQkzNQkvKiBTRE1BXzM0ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgwCQkzNgkvKiBTRE1BXzM1ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgxCQkzNwkvKiBTRE1BXzM2ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgxCQkzOAkvKiBTRE1BXzM3ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgyCQkzOQkvKiBTRE1BXzM4ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgyCQk0MAkvKiBTRE1BXzM5ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgzCQk0MQkvKiBTRE1BXzQwICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgzCQk0MgkvKiBTRE1BXzQxICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfVFgwCQk0MwkvKiBTRE1BXzQyICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgwCQk0NAkvKiBTRE1BXzQzICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfVFgxCQk0NQkvKiBTRE1BXzQ0ICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgxCQk0NgkvKiBTRE1BXzQ1ICovCgojZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9UWAkJNDkJLyogU0RNQV80OCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9SWAkJNTAJLyogU0RNQV80OSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9UWAkJNTEJLyogU0RNQV81MCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9SWAkJNTIJLyogU0RNQV81MSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19UWAkJNTMJLyogU0RNQV81MiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19SWAkJNTQJLyogU0RNQV81MyAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDAJNTUJLyogU0RNQV81NCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDAJNTYJLyogU0RNQV81NSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDEJNTcJLyogU0RNQV81NiAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDEJNTgJLyogU0RNQV81NyAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDIJNTkJLyogU0RNQV81OCAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDIJNjAJLyogU0RNQV81OSAqLwojZGVmaW5lIE9NQVAyNFhYX0RNQV9NTUMxX1RYCQk2MQkvKiBTRE1BXzYwICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfUlgJCTYyCS8qIFNETUFfNjEgKi8KI2RlZmluZSBPTUFQMjRYWF9ETUFfTVMJCQk2MwkvKiBTRE1BXzYyICovCiNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVE1CTY0CS8qIFNfRE1BXzYzICovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBMQ0QgRE1BICovCiNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZGIwMCkKI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0NUUkwJCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAwKQojZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDIpCiNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfVQkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwNCkKI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9MCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA2KQojZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCgojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWUzMDApCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NDUgkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzIpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DVFJMCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjNCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM4KQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2EpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYykKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNlKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IyX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDApCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMikKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMl9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQ0KQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDYpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRUlfQjEJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDgpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkYSkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FTl9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlMCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GTl9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlNCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGVhKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZjQpCgojZGVmaW5lIE9NQVAxX0RNQV9UT1VUX0lSUQkJKDEgPDwgMCkKI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUQkJKDEgPDwgMSkKI2RlZmluZSBPTUFQX0RNQV9IQUxGX0lSUQkJKDEgPDwgMikKI2RlZmluZSBPTUFQX0RNQV9GUkFNRV9JUlEJCSgxIDw8IDMpCiNkZWZpbmUgT01BUF9ETUFfTEFTVF9JUlEJCSgxIDw8IDQpCiNkZWZpbmUgT01BUF9ETUFfQkxPQ0tfSVJRCQkoMSA8PCA1KQojZGVmaW5lIE9NQVAxX0RNQV9TWU5DX0lSUQkJKDEgPDwgNikKI2RlZmluZSBPTUFQMl9ETUFfUEtUX0lSUQkJKDEgPDwgNykKI2RlZmluZSBPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUQkJKDEgPDwgOCkKI2RlZmluZSBPTUFQMl9ETUFfU0VDVVJFX0VSUl9JUlEJKDEgPDwgOSkKI2RlZmluZSBPTUFQMl9ETUFfU1VQRVJWSVNPUl9FUlJfSVJRCSgxIDw8IDEwKQojZGVmaW5lIE9NQVAyX0RNQV9NSVNBTElHTkVEX0VSUl9JUlEJKDEgPDwgMTEpCgojZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TOAkJMHgwMAojZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYJCTB4MDEKI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyCQkweDAyCgojZGVmaW5lIE9NQVBfRE1BX1NZTkNfRUxFTUVOVAkJMHgwMAojZGVmaW5lIE9NQVBfRE1BX1NZTkNfRlJBTUUJCTB4MDEKI2RlZmluZSBPTUFQX0RNQV9TWU5DX0JMT0NLCQkweDAyCgojZGVmaW5lIE9NQVBfRE1BX1BPUlRfRU1JRkYJCTB4MDAKI2RlZmluZSBPTUFQX0RNQV9QT1JUX0VNSUZTCQkweDAxCiNkZWZpbmUgT01BUF9ETUFfUE9SVF9PQ1BfVDEJCTB4MDIKI2RlZmluZSBPTUFQX0RNQV9QT1JUX1RJUEIJCTB4MDMKI2RlZmluZSBPTUFQX0RNQV9QT1JUX09DUF9UMgkJMHgwNAojZGVmaW5lIE9NQVBfRE1BX1BPUlRfTVBVSQkJMHgwNQoKI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVAkJMHgwMAojZGVmaW5lIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DCQkweDAxCiNkZWZpbmUgT01BUF9ETUFfQU1PREVfU0lOR0xFX0lEWAkweDAyCiNkZWZpbmUgT01BUF9ETUFfQU1PREVfRE9VQkxFX0lEWAkweDAzCgovKiBMQ0QgRE1BIGJsb2NrIG51bWJlcnMgKi8KZW51bSB7CglPTUFQX0xDRF9ETUFfQjFfVE9QLAoJT01BUF9MQ0RfRE1BX0IxX0JPVFRPTSwKCU9NQVBfTENEX0RNQV9CMl9UT1AsCglPTUFQX0xDRF9ETUFfQjJfQk9UVE9NCn07CgplbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgewoJT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAoJT01BUF9ETUFfREFUQV9CVVJTVF80LAoJT01BUF9ETUFfREFUQV9CVVJTVF84LAoJT01BUF9ETUFfREFUQV9CVVJTVF8xNiwKfTsKCmVudW0gb21hcF9kbWFfY29sb3JfbW9kZSB7CglPTUFQX0RNQV9DT0xPUl9ESVMgPSAwLAoJT01BUF9ETUFfQ09OU1RBTlRfRklMTCwKCU9NQVBfRE1BX1RSQU5TUEFSRU5UX0NPUFkKfTsKCmVudW0gb21hcF9kbWFfd3JpdGVfbW9kZSB7CglPTUFQX0RNQV9XUklURV9OT05fUE9TVEVEID0gMCwKCU9NQVBfRE1BX1dSSVRFX1BPU1RFRCwKCU9NQVBfRE1BX1dSSVRFX0xBU1RfTk9OX1BPU1RFRAp9OwoKc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zIHsKCWludCBkYXRhX3R5cGU7CQkvKiBkYXRhIHR5cGUgOCwxNiwzMiAqLwoJaW50IGVsZW1fY291bnQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBmcmFtZSAqLwoJaW50IGZyYW1lX2NvdW50OwkvKiBudW1iZXIgb2YgZnJhbWVzIGluIGEgZWxlbWVudCAqLwoKCWludCBzcmNfcG9ydDsJCS8qIE9ubHkgb24gT01BUDEgUkVWSVNJVDogSXMgdGhpcyBuZWVkZWQ/ICovCglpbnQgc3JjX2Ftb2RlOwkJLyogY29uc3RhbnQgLCBwb3N0IGluY3JlbWVudCwgaW5kZXhlZCAsIGRvdWJsZSBpbmRleGVkICovCgl1bnNpZ25lZCBsb25nIHNyY19zdGFydDsJLyogc291cmNlIGFkZHJlc3MgOiBwaHlzaWNhbCAqLwoJaW50IHNyY19laTsJCS8qIHNvdXJjZSBlbGVtZW50IGluZGV4ICovCglpbnQgc3JjX2ZpOwkJLyogc291cmNlIGZyYW1lIGluZGV4ICovCgoJaW50IGRzdF9wb3J0OwkJLyogT25seSBvbiBPTUFQMSBSRVZJU0lUOiBJcyB0aGlzIG5lZWRlZD8gKi8KCWludCBkc3RfYW1vZGU7CQkvKiBjb25zdGFudCAsIHBvc3QgaW5jcmVtZW50LCBpbmRleGVkICwgZG91YmxlIGluZGV4ZWQgKi8KCXVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0OwkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCglpbnQgZHN0X2VpOwkJLyogc291cmNlIGVsZW1lbnQgaW5kZXggKi8KCWludCBkc3RfZmk7CQkvKiBzb3VyY2UgZnJhbWUgaW5kZXggKi8KCglpbnQgdHJpZ2dlcjsJCS8qIHRyaWdnZXIgYXR0YWNoZWQgaWYgdGhlIGNoYW5uZWwgaXMgc3luY2hyb25pemVkICovCglpbnQgc3luY19tb2RlOwkJLyogc3ljbiBvbiBlbGVtZW50LCBmcmFtZSAsIGJsb2NrIG9yIHBhY2tldCAqLwoJaW50IHNyY19vcl9kc3Rfc3luY2g7CS8qIHNvdXJjZSBzeW5jaCgxKSBvciBkZXN0aW5hdGlvbiBzeW5jaCgwKSAqLwoKCWludCBpZTsJCQkvKiBpbnRlcnJ1cHQgZW5hYmxlZCAqLwp9OwoKCmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wcmlvcml0eShpbnQgbGNoLCBpbnQgZHN0X3BvcnQsIGludCBwcmlvcml0eSk7CmV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2RtYShpbnQgZGV2X2lkLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKCQkJICAgIHZvaWQgKCogY2FsbGJhY2spKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpLAoJCQkgICAgdm9pZCAqZGF0YSwgaW50ICpkbWFfY2gpOwpleHRlcm4gdm9pZCBvbWFwX2VuYWJsZV9kbWFfaXJxKGludCBjaCwgdTE2IGlycV9iaXRzKTsKZXh0ZXJuIHZvaWQgb21hcF9kaXNhYmxlX2RtYV9pcnEoaW50IGNoLCB1MTYgaXJxX2JpdHMpOwpleHRlcm4gdm9pZCBvbWFwX2ZyZWVfZG1hKGludCBjaCk7CmV4dGVybiB2b2lkIG9tYXBfc3RhcnRfZG1hKGludCBsY2gpOwpleHRlcm4gdm9pZCBvbWFwX3N0b3BfZG1hKGludCBsY2gpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGludCBsY2gsIGludCBkYXRhX3R5cGUsCgkJCQkJIGludCBlbGVtX2NvdW50LCBpbnQgZnJhbWVfY291bnQsCgkJCQkJIGludCBzeW5jX21vZGUsCgkJCQkJIGludCBkbWFfdHJpZ2dlciwgaW50IHNyY19vcl9kc3Rfc3luY2gpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfY29sb3JfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgbW9kZSwKCQkJCSAgICB1MzIgY29sb3IpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfd3JpdGVfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX3dyaXRlX21vZGUgbW9kZSk7CgpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCgkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCgkJCQkgICAgaW50IHNyY19laSwgaW50IHNyY19maSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLAoJCQkJCWVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKTsKCmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkZXN0X3N0YXJ0LAoJCQkJICAgICBpbnQgZHN0X2VpLCBpbnQgZHN0X2ZpKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGludCBsY2gsCgkJCQkJIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSBidXJzdF9tb2RlKTsKCmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wYXJhbXMoaW50IGxjaCwKCQkJCXN0cnVjdCBvbWFwX2RtYV9jaGFubmVsX3BhcmFtcyAqIHBhcmFtcyk7CgpleHRlcm4gdm9pZCBvbWFwX2RtYV9saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKZXh0ZXJuIHZvaWQgb21hcF9kbWFfdW5saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKCmV4dGVybiBpbnQgb21hcF9zZXRfZG1hX2NhbGxiYWNrKGludCBsY2gsCgkJCXZvaWQgKCogY2FsbGJhY2spKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpLAoJCQl2b2lkICpkYXRhKTsKZXh0ZXJuIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX3NyY19wb3MoaW50IGxjaCk7CmV4dGVybiBkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9kc3RfcG9zKGludCBsY2gpOwpleHRlcm4gaW50IG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKGludCBsY2gpOwpleHRlcm4gdm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKTsKZXh0ZXJuIGludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpOwoKLyogTENEIERNQSBmdW5jdGlvbnMgKi8KZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfbGNkX2RtYSh2b2lkICgqIGNhbGxiYWNrKSh1MTYgc3RhdHVzLCB2b2lkICpkYXRhKSwKCQkJCXZvaWQgKmRhdGEpOwpleHRlcm4gdm9pZCBvbWFwX2ZyZWVfbGNkX2RtYSh2b2lkKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXR1cF9sY2RfZG1hKHZvaWQpOwpleHRlcm4gdm9pZCBvbWFwX2VuYWJsZV9sY2RfZG1hKHZvaWQpOwpleHRlcm4gdm9pZCBvbWFwX3N0b3BfbGNkX2RtYSh2b2lkKTsKZXh0ZXJuIGludCAgb21hcF9sY2RfZG1hX2V4dF9ydW5uaW5nKHZvaWQpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2V4dF9jb250cm9sbGVyKGludCBleHRlcm5hbCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKGludCBzaW5nbGUpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IGZiX3hyZXMsIHUxNiBmYl95cmVzLAoJCQkJaW50IGRhdGFfdHlwZSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfdnhyZXModW5zaWduZWQgbG9uZyB2eHJlcyk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfbWlycm9yKGludCBtaXJyb3IpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpOwoKI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1BX0ggKi8K