LyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCwyMDA1IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgogKgkJICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFMzQzI0MTAgY2xvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKICoKICogIENoYW5nZWxvZzoKICogICAgMTgtQXVnLTIwMDQgQmVuIERvb2tzICAgICAgICAgQWRkZWQgMjQ0MCBkZWZpbml0aW9ucwogKiAgICAwOC1BdWctMjAwNCBIZXJiZXJ0IFD2dHpsICAgICBBZGRlZCBDTEtDT04gZGVmaW5pdGlvbnMKICogICAgMTktMDYtMjAwMyAgQmVuIERvb2tzICAgICAgICAgQ3JlYXRlZCBmaWxlCiAqICAgIDEyLTAzLTIwMDQgIEJlbiBEb29rcyAgICAgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCiAqICAgIDI5LVNlcC0yMDA0IEJlbiBEb29rcwkgICAgRml4ZWQgdXNhZ2UgZm9yIGFzc2VtYmx5IGluY2x1c2lvbgogKiAgICAxMC1GZWItMjAwNSBCZW4gRG9va3MJICAgIEZpeGVkIENBTURJVk4gYWRkcmVzcyAoR3VpbGxhdW1lIEdvdXJhdCkKICogICAgMTAtTWFyLTIwMDUgTHVjYXMgVmlsbGEgUmVhbCAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKICogICAgMjctQXVnLTIwMDUgQmVuIERvb2tzCSAgICBBZGQgY2xvY2stc2xvdyBpbmZvCiAqLwoKI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19DTE9DSwojZGVmaW5lIF9fQVNNX0FSTV9SRUdTX0NMT0NLICIkSWQ6IGNsb2NrLmgsdiAxLjQgMjAwMy8wNC8zMCAxNDo1MDo1MSBiZW4gRXhwICQiCgojZGVmaW5lIFMzQzI0MTBfQ0xLUkVHKHgpICgoeCkgKyBTM0MyNFhYX1ZBX0NMS1BXUikKCiNkZWZpbmUgUzNDMjQxMF9QTExWQUwoX20sX3AsX3MpICgoX20pIDw8IDEyIHwgKChfcCkgPDwgNCkgfCAoKF9zKSkpCgojZGVmaW5lIFMzQzI0MTBfTE9DS1RJTUUgICAgUzNDMjQxMF9DTEtSRUcoMHgwMCkKI2RlZmluZSBTM0MyNDEwX01QTExDT04JICAgIFMzQzI0MTBfQ0xLUkVHKDB4MDQpCiNkZWZpbmUgUzNDMjQxMF9VUExMQ09OCSAgICBTM0MyNDEwX0NMS1JFRygweDA4KQojZGVmaW5lIFMzQzI0MTBfQ0xLQ09OCSAgICBTM0MyNDEwX0NMS1JFRygweDBDKQojZGVmaW5lIFMzQzI0MTBfQ0xLU0xPVwkgICAgUzNDMjQxMF9DTEtSRUcoMHgxMCkKI2RlZmluZSBTM0MyNDEwX0NMS0RJVk4JICAgIFMzQzI0MTBfQ0xLUkVHKDB4MTQpCgojZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX0lETEUJICAgICAoMTw8MikKI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9QT1dFUgkgICAgICgxPDwzKQojZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX05BTkQJICAgICAoMTw8NCkKI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9MQ0RDCSAgICAgKDE8PDUpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fVVNCSAkgICAgICgxPDw2KQojZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX1VTQkQJICAgICAoMTw8NykKI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9QV01UCSAgICAgKDE8PDgpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fU0RJCSAgICAgKDE8PDkpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fVUFSVDAJICAgICAoMTw8MTApCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fVUFSVDEJICAgICAoMTw8MTEpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fVUFSVDIJICAgICAoMTw8MTIpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fR1BJTwkgICAgICgxPDwxMykKI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9SVEMJICAgICAoMTw8MTQpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fQURDCSAgICAgKDE8PDE1KQojZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX0lJQwkgICAgICgxPDwxNikKI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9JSVMJICAgICAoMTw8MTcpCiNkZWZpbmUgUzNDMjQxMF9DTEtDT05fU1BJCSAgICAgKDE8PDE4KQoKI2RlZmluZSBTM0MyNDEwX1BMTENPTl9NRElWU0hJRlQgICAgIDEyCiNkZWZpbmUgUzNDMjQxMF9QTExDT05fUERJVlNISUZUICAgICA0CiNkZWZpbmUgUzNDMjQxMF9QTExDT05fU0RJVlNISUZUICAgICAwCiNkZWZpbmUgUzNDMjQxMF9QTExDT05fTURJVk1BU0sJICAgICAoKDE8PCgxKygxOS0xMikpKS0xKQojZGVmaW5lIFMzQzI0MTBfUExMQ09OX1BESVZNQVNLCSAgICAgKCgxPDw1KS0xKQojZGVmaW5lIFMzQzI0MTBfUExMQ09OX1NESVZNQVNLCSAgICAgMwoKLyogRENMS0NPTiByZWdpc3RlciBhZGRyZXNzZXMgaW4gZ3Bpby5oICovCgojZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOCSAgICAgKDE8PDApCiNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX1BDTEsgICAoMDw8MSkKI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSyAgICgxPDwxKQojZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMF9ESVYoeCkgKCgoeCkgLSAxICk8PDQpCiNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUCh4KSAoKCh4KSAtIDEgKTw8OCkKCiNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxRU4JICAgICAoMTw8MTYpCiNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1BDTEsgICAoMDw8MTcpCiNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1VDTEsgICAoMTw8MTcpCiNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0RJVih4KSAoKCh4KSAtIDEpIDw8MjApCgojZGVmaW5lIFMzQzI0MTBfQ0xLRElWTl9QRElWTgkgICAgICgxPDwwKQojZGVmaW5lIFMzQzI0MTBfQ0xLRElWTl9IRElWTgkgICAgICgxPDwxKQoKI2RlZmluZSBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYJKDE8PDcpCiNkZWZpbmUgUzNDMjQxMF9DTEtTTE9XX01QTExfT0ZGCSgxPDw1KQojZGVmaW5lIFMzQzI0MTBfQ0xLU0xPV19TTE9XCQkoMTw8NCkKI2RlZmluZSBTM0MyNDEwX0NMS1NMT1dfU0xPV1ZBTCh4KQkoeCkKI2RlZmluZSBTM0MyNDEwX0NMS1NMT1dfR0VUX1NMT1dWQUwoeCkJKCh4KSAmIDcpCgojaWZuZGVmIF9fQVNTRU1CTFlfXwoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKczNjMjQxMF9nZXRfcGxsKGludCBwbGx2YWwsIGludCBiYXNlY2xrKQp7CglpbnQgbWRpdiwgcGRpdiwgc2RpdjsKCgltZGl2ID0gcGxsdmFsID4+IFMzQzI0MTBfUExMQ09OX01ESVZTSElGVDsKCXBkaXYgPSBwbGx2YWwgPj4gUzNDMjQxMF9QTExDT05fUERJVlNISUZUOwoJc2RpdiA9IHBsbHZhbCA+PiBTM0MyNDEwX1BMTENPTl9TRElWU0hJRlQ7CgoJbWRpdiAmPSBTM0MyNDEwX1BMTENPTl9NRElWTUFTSzsKCXBkaXYgJj0gUzNDMjQxMF9QTExDT05fUERJVk1BU0s7CglzZGl2ICY9IFMzQzI0MTBfUExMQ09OX1NESVZNQVNLOwoKCXJldHVybiAoYmFzZWNsayAqIChtZGl2ICsgOCkpIC8gKChwZGl2ICsgMikgPDwgc2Rpdik7Cn0KCiNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KCiNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKCi8qIGV4dHJhIHJlZ2lzdGVycyAqLwojZGVmaW5lIFMzQzI0NDBfQ0FNRElWTgkgICAgUzNDMjQxMF9DTEtSRUcoMHgxOCkKCiNkZWZpbmUgUzNDMjQ0MF9DTEtDT05fQ0FNRVJBICAgICAgICAoMTw8MTkpCiNkZWZpbmUgUzNDMjQ0MF9DTEtDT05fQUM5NyAgICAgICAgICAoMTw8MjApCgojZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9QRElWTgkgICAgICgxPDwwKQojZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl9NQVNLICAgKDM8PDEpCiNkZWZpbmUgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzEgICAgICAoMDw8MSkKI2RlZmluZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMiAgICAgICgxPDwxKQojZGVmaW5lIFMzQzI0NDBfQ0xLRElWTl9IRElWTl80XzggICAgKDI8PDEpCiNkZWZpbmUgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzNfNiAgICAoMzw8MSkKI2RlZmluZSBTM0MyNDQwX0NMS0RJVk5fVUNMSyAgICAgICAgICgxPDwzKQoKI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX01BU0sgICgweGY8PDApCiNkZWZpbmUgUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19TRUwgICAoMTw8NCkKI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fSENMSzNfSEFMRiAgICgxPDw4KQojZGVmaW5lIFMzQzI0NDBfQ0FNRElWTl9IQ0xLNF9IQUxGICAgKDE8PDkpCiNkZWZpbmUgUzNDMjQ0MF9DQU1ESVZOX0RWU0VOICAgICAgICAoMTw8MTIpCgojZW5kaWYgLyogQ09ORklHX0NQVV9TM0MyNDQwICovCgoKI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX0NMT0NLICovCg==