LyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqLwoKCiNpZm5kZWYgX0FQUl9BVURJT19WMl9IXwojZGVmaW5lIF9BUFJfQVVESU9fVjJfSF8KCiNpbmNsdWRlIDxpcGMvYXByLmg+CiNpbmNsdWRlIDxsaW51eC9tc21fYXVkaW8uaD4KCi8qIHNpemUgb2YgaGVhZGVyIG5lZWRlZCBmb3IgcGFzc2luZyBkYXRhIG91dCBvZiBiYW5kICovCiNkZWZpbmUgQVBSX0NNRF9PQl9IRFJfU1ogIDEyCgovKiBzaXplIG9mIGhlYWRlciBuZWVkZWQgZm9yIGdldHRpbmcgZGF0YSAqLwojZGVmaW5lIEFQUl9DTURfR0VUX0hEUl9TWiAxNgoKc3RydWN0IHBhcmFtX291dGJhbmQgewoJc2l6ZV90ICAgICAgIHNpemU7Cgl2b2lkICAgICAgICAqa3ZhZGRyOwoJcGh5c19hZGRyX3QgIHBhZGRyOwp9OwoKI2RlZmluZSBBRFNQX0FETV9WRVJTSU9OICAgIDB4MDAwNzAwMDAKCiNkZWZpbmUgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICAgIDB4MDAwMTAzMjIKI2RlZmluZSBBRE1fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgMHgwMDAxMDMyMwojZGVmaW5lIEFETV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TIDB4MDAwMTAzMjQKCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfTUFQX1JPVVRJTkdTX1Y1IDB4MDAwMTAzMjUKI2RlZmluZSBBRE1fQ01EX1NUUkVBTV9ERVZJQ0VfTUFQX1JPVVRJTkdTX1Y1IDB4MDAwMTAzM0QKLyogRW51bWVyYXRpb24gZm9yIGFuIGF1ZGlvIFJ4IG1hdHJpeCBJRC4qLwojZGVmaW5lIEFETV9NQVRSSVhfSURfQVVESU9fUlggICAgICAgICAgICAgIDAKCiNkZWZpbmUgQURNX01BVFJJWF9JRF9BVURJT19UWCAgICAgICAgICAgICAgMQoKI2RlZmluZSBBRE1fTUFUUklYX0lEX0NPTVBSRVNTRURfQVVESU9fUlggICAyCgojZGVmaW5lIEFETV9NQVRSSVhfSURfQ09NUFJFU1NFRF9BVURJT19UWCAgIDMKCiNkZWZpbmUgQURNX01BVFJJWF9JRF9MSVNURU5fVFggICAgICAgICAgICAgNAovKiBFbnVtZXJhdGlvbiBmb3IgYW4gYXVkaW8gVHggbWF0cml4IElELiovCiNkZWZpbmUgQURNX01BVFJJWF9JRF9BVURJT1ggICAgICAgICAgICAgIDEKCiNkZWZpbmUgQURNX01BWF9DT1BQUyA1CgovKiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzIHdpdGggbXNtX2F1ZGlvX2NhbGlicmF0aW9uICovCiNkZWZpbmUgU1BfVjJfTlVNX01BWF9TUEtSIDIKCi8qIFNlc3Npb24gbWFwIG5vZGUgc3RydWN0dXJlLgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgYXJlIG51bV9jb3BwcwogKiBlbnRyaWVzIG9mIENPUFAgSURzLiBUaGUgQ09QUCBJRHMgYXJlIDE2IGJpdHMsIHNvCiAqIHRoZXJlIG1pZ2h0IGJlIGEgcGFkZGluZyAxNi1iaXQgZmllbGQgaWYgbnVtX2NvcHBzCiAqIGlzIG9kZC4KICovCnN0cnVjdCBhZG1fc2Vzc2lvbl9tYXBfbm9kZV92NSB7Cgl1MTYgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwoJLyogSGFuZGxlIG9mIHRoZSBBU00gc2Vzc2lvbiB0byBiZSByb3V0ZWQuIFN1cHBvcnRlZCB2YWx1ZXM6IDEKCSAqIHRvIDguCgkgKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NvcHBzOwoJLyogTnVtYmVyIG9mIENPUFBzIHRvIHdoaWNoIHRoaXMgc2Vzc2lvbiBpcyB0byBiZSByb3V0ZWQuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIDwgbnVtX2NvcHBzIDw9IEFETV9NQVhfQ09QUFMuCgkgKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRF9NQVRSSVhfTUFQX1JPVVRJTkdTX1Y1IGNvbW1hbmQuCiAqCUltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUgbnVtX3Nlc3Npb25zIG9mIHRoZSBzZXNzaW9uIG1hcAogKglub2RlIHBheWxvYWQgKGFkbV9zZXNzaW9uX21hcF9ub2RlX3Y1KS4KICovCgpzdHJ1Y3QgYWRtX2NtZF9tYXRyaXhfbWFwX3JvdXRpbmdzX3Y1IHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCgl1MzIgICAgICAgICAgICAgICAgICBtYXRyaXhfaWQ7CgkvKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbWF0cml4IElEIGlzIEF1ZGlvIFJ4ICgwKSBvciBBdWRpbyBUeAoJICogKDEpLiBVc2UgdGhlIEFETV9NQVRSSVhfSURfQVVESU9fUlggb3IgQURNX01BVFJJWF9JRF9BVURJT1gKCSAqIG1hY3JvcyB0byBzZXQgdGhpcyBmaWVsZC4KCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgbnVtX3Nlc3Npb25zOwoJLyogTnVtYmVyIG9mIHNlc3Npb25zIGJlaW5nIHVwZGF0ZWQgYnkgdGhpcyBjb21tYW5kIChvcHRpb25hbCkuICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MuIFRYIG1vZHVsZQogKiBhbmQgc2V0cyB1cCB0aGUgZGV2aWNlIHNlc3Npb246IE1hdHJpeCAtPiBDT1BQIC0+IEFGRSBvbiB0aGUgUlgKICogYW5kIEFGRSAtPiBDT1BQIC0+IE1hdHJpeCBvbiB0aGUgVFguIFRoaXMgZW5hYmxlcyBQQ00gZGF0YSB0bwogKiBiZSB0cmFuc2ZlcnJlZCB0by9mcm9tIHRoZSBlbmRwb2ludCAoQUZFUG9ydElEKS4KICoKICogQHJldHVybgogKiAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNSB3aXRoIHRoZSByZXN1bHRpbmcgc3RhdHVzIGFuZCBDT1BQIElELgogKi8KI2RlZmluZSBBRE1fQ01EX0RFVklDRV9PUEVOX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzI2CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MgdGhlCiAqCXdheSBhcyBBRE1fQ01EX0RFVklDRV9PUEVOX1Y1IGJ1dCBzdXBwb3J0cyBtdWx0aXBsZSBlbmRwb2ludDIKICoJY2hhbm5lbHMuCiAqCiAqCUByZXR1cm4KICoJI0FETV9DTURSU1BfREVWSUNFX09QRU5fVjYgd2l0aCB0aGUgcmVzdWx0aW5nIHN0YXR1cyBhbmQKICoJQ09QUCBJRC4KICovCiNkZWZpbmUgQURNX0NNRF9ERVZJQ0VfT1BFTl9WNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzU2CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MgdGhlCioJd2F5IGFzIEFETV9DTURfREVWSUNFX09QRU5fVjggYnV0IHN1cHBvcnRzIGFueSBudW1iZXIgY2hhbm5lbAoqCW9mIGNvbmZpZ3VyYXRpb24uCioKKglAcmV0dXJuCioJI0FETV9DTURSU1BfREVWSUNFX09QRU5fVjggd2l0aCB0aGUgcmVzdWx0aW5nIHN0YXR1cyBhbmQKKglDT1BQIElELgoqLwojZGVmaW5lIEFETV9DTURfREVWSUNFX09QRU5fVjggICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDM2QQoKCi8qIERlZmluaXRpb24gZm9yIGEgbG93IGxhdGVuY3kgc3RyZWFtIHNlc3Npb24uICovCiNkZWZpbmUgQURNX0xPV19MQVRFTkNZX0RFVklDRV9TRVNTSU9OCQkJMHgyMDAwCgovKiBEZWZpbml0aW9uIGZvciBhIHVsdHJhIGxvdyBsYXRlbmN5IHN0cmVhbSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9VTFRSQV9MT1dfTEFURU5DWV9ERVZJQ0VfU0VTU0lPTgkJMHg0MDAwCgovKiBEZWZpbml0aW9uIGZvciBhIHVsdHJhIGxvdyBsYXRlbmN5IHdpdGggUG9zdCBQcm9jZXNzaW5nIHN0cmVhbSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9VTExfUE9TVF9QUk9DRVNTSU5HX0RFVklDRV9TRVNTSU9OCQkweDgwMDAKCi8qIERlZmluaXRpb24gZm9yIGEgbGVnYWN5IGRldmljZSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9MRUdBQ1lfREVWSUNFX1NFU1NJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKCi8qIEluZGljYXRlcyB0aGF0IGVuZHBvaW50X2lkXzIgaXMgdG8gYmUgaWdub3JlZC4qLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX0VORF9QT0lOVF9JRF8yX0lHTk9SRQkJCQkweEZGRkYKCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fUlhfUEFUSF9DT1BQCQkgMQoKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9NT0RFX09GX09QRVJBVElPTlhfUEFUSF9MSVZFX0NPUFAJCSAyCgojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX01PREVfT0ZfT1BFUkFUSU9OWF9QQVRIX05PTl9MSVZFX0NPUFAJIDMKCi8qIEluZGljYXRlcyB0aGF0IGFuIGF1ZGlvIENPUFAgaXMgdG8gc2VuZC9yZWNlaXZlIGEgbW9ubyBQQ00KICogc3RyZWFtIHRvL2Zyb20KICoJRU5EX1BPSU5UX0lEXzEuCiAqLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX0NIQU5ORUxfQ09ORklHX01PTk8JCTEKCi8qIEluZGljYXRlcyB0aGF0IGFuIGF1ZGlvIENPUFAgaXMgdG8gc2VuZC9yZWNlaXZlIGEKICoJc3RlcmVvIFBDTSBzdHJlYW0gdG8vZnJvbSBFTkRfUE9JTlRfSURfMS4KICovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fQ0hBTk5FTF9DT05GSUdfU1RFUkVPCQkyCgovKiBTYW1wbGUgcmF0ZSBpcyA4MDAwIEh6LiovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fU0FNUExFX1JBVEVfOEsgODAwMAoKLyogU2FtcGxlIHJhdGUgaXMgMTYwMDAgSHouKi8KI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9TQU1QTEVfUkFURV8xNksgMTYwMDAKCi8qIFNhbXBsZSByYXRlIGlzIDQ4MDAwIEh6LiovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fU0FNUExFX1JBVEVfNDhLIDQ4MDAwCgovKiBEZWZpbml0aW9uIGZvciBhIENPUFAgbGl2ZSBpbnB1dCBmbGFnIGJpdG1hc2suKi8KI2RlZmluZSBBRE1fQklUX01BU0tfQ09QUF9MSVZFX0lOUFVUX0ZMQUcgKDB4MDAwMVUpCgovKiBEZWZpbml0aW9uIGZvciBhIENPUFAgbGl2ZSBzaGlmdCB2YWx1ZSBiaXRtYXNrLiovCiNkZWZpbmUgQURNX1NISUZUX0NPUFBfTElWRV9JTlBVVF9GTEFHCSAwCgovKiBEZWZpbml0aW9uIGZvciB0aGUgQ09QUCBJRCBiaXRtYXNrLiovCiNkZWZpbmUgQURNX0JJVF9NQVNLX0NPUFBfSUQgICgweDAwMDBGRkZGVUwpCgovKiBEZWZpbml0aW9uIGZvciB0aGUgQ09QUCBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFETV9TSElGVF9DT1BQX0lECTAKCi8qIERlZmluaXRpb24gZm9yIHRoZSBzZXJ2aWNlIElEIGJpdG1hc2suKi8KI2RlZmluZSBBRE1fQklUX01BU0tfU0VSVklDRV9JRCAgKDB4MDBGRjAwMDBVTCkKCi8qIERlZmluaXRpb24gZm9yIHRoZSBzZXJ2aWNlIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQURNX1NISUZUX1NFUlZJQ0VfSUQJMTYKCi8qIERlZmluaXRpb24gZm9yIHRoZSBkb21haW4gSUQgYml0bWFzay4qLwojZGVmaW5lIEFETV9CSVRfTUFTS19ET01BSU5fSUQgICAgKDB4RkYwMDAwMDBVTCkKCi8qIERlZmluaXRpb24gZm9yIHRoZSBkb21haW4gSUQgc2hpZnQgdmFsdWUuKi8KI2RlZmluZSBBRE1fU0hJRlRfRE9NQUlOX0lECTI0CgovKiBBRE0gZGV2aWNlIG9wZW4gY29tbWFuZCBwYXlsb2FkIG9mIHRoZQogKiAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WNSBjb21tYW5kLgogKi8Kc3RydWN0IGFkbV9jbWRfZGV2aWNlX29wZW5fdjUgewoJc3RydWN0IGFwcl9oZHIJCWhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIGZsYWdzOwovKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkCiAqIHRvIHplcm8uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIG1vZGVfb2Zfb3BlcmF0aW9uOwovKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgQ09QUCBtdXN0IGJlIG9wZW5lZCBvbiB0aGUgVHggb3IgUngKICogcGF0aC4gVXNlIHRoZSBBRE1fQ01EX0NPUFBfT1BFTl9NT0RFX09GX09QRVJBVElPTl8qIG1hY3JvcyBmb3IKICogc3VwcG9ydGVkIHZhbHVlcyBhbmQgaW50ZXJwcmV0YXRpb24uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMHgxIC0tIFJ4IHBhdGggQ09QUAogKiAtIDB4MiAtLSBUeCBwYXRoIGxpdmUgQ09QUAogKiAtIDB4MyAtLSBUeCBwYXRoIG5vbmxpdmUgQ09QUAogKiBMaXZlIGNvbm5lY3Rpb25zIGNhdXNlIHNhbXBsZSBkaXNjYXJkaW5nIGluIHRoZSBUeCBkZXZpY2UKICogbWF0cml4IGlmIHRoZSBkZXN0aW5hdGlvbiBvdXRwdXQgcG9ydHMgZG8gbm90IHB1bGwgdGhlbQogKiBmYXN0IGVub3VnaC4gTm9ubGl2ZSBjb25uZWN0aW9ucyBxdWV1ZSB0aGUgc2FtcGxlcwogKiBpbmRlZmluaXRlbHkuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzE7Ci8qIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIG9mIHRoZSBhdWRpbyBwYXRoLgogKiBJZiB0aGUgSUQgaXMgYSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2ssIGl0IHJlY2VpdmVzIG5lYXIKICogc2FtcGxlcy4JU3VwcG9ydGVkIHZhbHVlczogQW55IHBzZXVkb3BvcnQsIEFGRSBSeCBwb3J0LAogKiBvciBBRkUgVHggcG9ydCBGb3IgYSBsaXN0IG9mIHZhbGlkIElEcywgcmVmZXIgdG8KICogQHhoeXBlcnJlZntRNCxbUTRdfS4KICogUTQgPSBIZXhhZ29uIE11bHRpbWVkaWE6IEFGRSBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmRwb2ludF9pZF8yOwovKiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBlbmRwb2ludCBJRCAyIGZvciBhIHZvaWNlIHByb2Nlc3NvcgogKiBUeCBibG9jay4KICogVGhpcyBpcyBub3QgYXBwbGljYWJsZSB0byBhdWRpbyBDT1BQLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIEFGRSBSeCBwb3J0CiAqIC0gMHhGRkZGIC0tIEVuZHBvaW50IDIgaXMgdW5hdmFpbGFibGUgYW5kIHRoZSB2b2ljZQogKiBwcm9jZXNzb3IgVHgKICogYmxvY2sgaWdub3JlcyB0aGlzIGVuZHBvaW50CiAqIFdoZW4gdGhlIHZvaWNlIHByb2Nlc3NvciBUeCBibG9jayBpcyBjcmVhdGVkIG9uIHRoZSBhdWRpbwogKiByZWNvcmQgcGF0aCwKICogaXQgY2FuIHJlY2VpdmUgZmFyLWVuZCBzYW1wbGVzIGZyb20gYW4gQUZFIFJ4IHBvcnQgaWYgdGhlCiAqIHZvaWNlIGNhbGwKICogaXMgYWN0aXZlLiBUaGUgSUQgb2YgdGhlIEFGRSBwb3J0IGlzIHByb3ZpZGVkIGluIHRoaXMKICogZmllbGQuCiAqIEZvciBhIGxpc3Qgb2YgdmFsaWQgSURzLCByZWZlciBAeGh5cGVycmVme1E0LFtRNF19LgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICB0b3BvbG9neV9pZDsKLyogQXVkaW8gQ09QUCB0b3BvbG9neSBJRDsgMzItYml0IEdVSUQuICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZGV2X251bV9jaGFubmVsOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgdGhlIGF1ZGlvIENPUFAgc2VuZHMgdG8vcmVjZWl2ZXMgZnJvbQogKiB0aGUgZW5kcG9pbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOC4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2ssCiAqIHdoZXJlIGNoYW5uZWwKICogY29uZmlndXJhdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIHRvcG9sb2d5IElELgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCAoaW4gYml0cykgdGhhdCB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcwogKiBmcm9tIHRoZQogKiBlbmRwb2ludC4gVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzaW5nCiAqIFR4IGJsb2NrLAogKiB3aGVyZSB0aGUgUENNIHdpZHRoIGlzIDE2IGJpdHMuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIGF0IHdoaWNoIHRoZSBhdWRpbyBDT1BQL3ZvaWNlIHByb2Nlc3NvcgogKiBUeCBibG9jawogKiBpbnRlcmZhY2VzIHdpdGggdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciB2b2ljZSBwcm9jZXNzb3IgVHg6IDgwMDAsIDE2MDAwLAogKiA0ODAwMCBIegogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBhdWRpbyBDT1BQOiA+MCBhbmQgPD0xOTIga0h6CiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgIGRldl9jaGFubmVsX21hcHBpbmdbOF07Ci8qIEFycmF5IG9mIGNoYW5uZWwgbWFwcGluZyBvZiBidWZmZXJzIHRoYXQgdGhlIGF1ZGlvIENPUFAKICogc2VuZHMgdG8gdGhlIGVuZHBvaW50LiBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwKICogSSBpbnNpZGUgdGhlIGJ1ZmZlciwgd2hlcmUgMCA8IGkgPCBkZXZfbnVtX2NoYW5uZWwuCiAqIFRoaXMgdmFsdWUgaXMgcmVsZXZhbnQgb25seSBmb3IgYW4gYXVkaW8gUnggQ09QUC4KICogRm9yIHRoZSB2b2ljZSBwcm9jZXNzb3IgYmxvY2sgYW5kIFR4IGF1ZGlvIGJsb2NrLCB0aGlzIGZpZWxkCiAqIGlzIHNldCB0byB6ZXJvIGFuZCBpcyBpZ25vcmVkLgogKi8KfSBfX3BhY2tlZDsKCi8qICBBRE0gZGV2aWNlIG9wZW4gY29tbWFuZCBwYXlsb2FkIG9mIHRoZQogKiAgI0FETV9DTURfREVWSUNFX09QRU5fVjYgY29tbWFuZC4KICovCnN0cnVjdCBhZG1fY21kX2RldmljZV9vcGVuX3Y2IHsKCXN0cnVjdCBhcHJfaGRyCQloZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBmbGFnczsKLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZAogKiB0byB6ZXJvLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBtb2RlX29mX29wZXJhdGlvbjsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIENPUFAgbXVzdCBiZSBvcGVuZWQgb24gdGhlIFR4IG9yIFJ4CiAqIHBhdGguIFVzZSB0aGUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fKiBtYWNyb3MgZm9yCiAqIHN1cHBvcnRlZCB2YWx1ZXMgYW5kIGludGVycHJldGF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4MSAtLSBSeCBwYXRoIENPUFAKICogLSAweDIgLS0gVHggcGF0aCBsaXZlIENPUFAKICogLSAweDMgLS0gVHggcGF0aCBub25saXZlIENPUFAKICogTGl2ZSBjb25uZWN0aW9ucyBjYXVzZSBzYW1wbGUgZGlzY2FyZGluZyBpbiB0aGUgVHggZGV2aWNlCiAqIG1hdHJpeCBpZiB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHBvcnRzIGRvIG5vdCBwdWxsIHRoZW0KICogZmFzdCBlbm91Z2guIE5vbmxpdmUgY29ubmVjdGlvbnMgcXVldWUgdGhlIHNhbXBsZXMKICogaW5kZWZpbml0ZWx5LgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmRwb2ludF9pZF8xOwovKiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBlbmRwb2ludCBJRCBvZiB0aGUgYXVkaW8gcGF0aC4KICogSWYgdGhlIElEIGlzIGEgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrLCBpdCByZWNlaXZlcyBuZWFyCiAqIHNhbXBsZXMuCVN1cHBvcnRlZCB2YWx1ZXM6IEFueSBwc2V1ZG9wb3J0LCBBRkUgUnggcG9ydCwKICogb3IgQUZFIFR4IHBvcnQgRm9yIGEgbGlzdCBvZiB2YWxpZCBJRHMsIHJlZmVyIHRvCiAqIEB4aHlwZXJyZWZ7UTQsW1E0XX0uCiAqIFE0ID0gSGV4YWdvbiBNdWx0aW1lZGlhOiBBRkUgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRfMjsKLyogTG9naWNhbCBhbmQgcGh5c2ljYWwgZW5kcG9pbnQgSUQgMiBmb3IgYSB2b2ljZSBwcm9jZXNzb3IKICogVHggYmxvY2suCiAqIFRoaXMgaXMgbm90IGFwcGxpY2FibGUgdG8gYXVkaW8gQ09QUC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBRkUgUnggcG9ydAogKiAtIDB4RkZGRiAtLSBFbmRwb2ludCAyIGlzIHVuYXZhaWxhYmxlIGFuZCB0aGUgdm9pY2UKICogcHJvY2Vzc29yIFR4CiAqIGJsb2NrIGlnbm9yZXMgdGhpcyBlbmRwb2ludAogKiBXaGVuIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2sgaXMgY3JlYXRlZCBvbiB0aGUgYXVkaW8KICogcmVjb3JkIHBhdGgsCiAqIGl0IGNhbiByZWNlaXZlIGZhci1lbmQgc2FtcGxlcyBmcm9tIGFuIEFGRSBSeCBwb3J0IGlmIHRoZQogKiB2b2ljZSBjYWxsCiAqIGlzIGFjdGl2ZS4gVGhlIElEIG9mIHRoZSBBRkUgcG9ydCBpcyBwcm92aWRlZCBpbiB0aGlzCiAqIGZpZWxkLgogKiBGb3IgYSBsaXN0IG9mIHZhbGlkIElEcywgcmVmZXIgQHhoeXBlcnJlZntRNCxbUTRdfS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgdG9wb2xvZ3lfaWQ7Ci8qIEF1ZGlvIENPUFAgdG9wb2xvZ3kgSUQ7IDMyLWJpdCBHVUlELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRldl9udW1fY2hhbm5lbDsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIHRoZSBhdWRpbyBDT1BQIHNlbmRzIHRvL3JlY2VpdmVzIGZyb20KICogdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDguCiAqIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrLAogKiB3aGVyZSBjaGFubmVsCiAqIGNvbmZpZ3VyYXRpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSB0b3BvbG9neSBJRC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggKGluIGJpdHMpIHRoYXQgdGhlIGF1ZGlvIENPUFAgc2VuZHMgdG8vcmVjZWl2ZXMKICogZnJvbSB0aGUKICogZW5kcG9pbnQuIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciB0aGUgdm9pY2UgcHJvY2Vzc2luZwogKiBUeCBibG9jaywKICogd2hlcmUgdGhlIFBDTSB3aWR0aCBpcyAxNiBiaXRzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBhdCB3aGljaCB0aGUgYXVkaW8gQ09QUC92b2ljZSBwcm9jZXNzb3IKICogVHggYmxvY2sKICogaW50ZXJmYWNlcyB3aXRoIHRoZSBlbmRwb2ludC4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3Igdm9pY2UgcHJvY2Vzc29yIFR4OiA4MDAwLCAxNjAwMCwKICogNDgwMDAgSHoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYXVkaW8gQ09QUDogPjAgYW5kIDw9MTkyIGtIegogKi8KCgl1OCAgICAgICAgICAgICAgICAgICBkZXZfY2hhbm5lbF9tYXBwaW5nWzhdOwovKiBBcnJheSBvZiBjaGFubmVsIG1hcHBpbmcgb2YgYnVmZmVycyB0aGF0IHRoZSBhdWRpbyBDT1BQCiAqIHNlbmRzIHRvIHRoZSBlbmRwb2ludC4gQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsCiAqIEkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlIDAgPCBpIDwgZGV2X251bV9jaGFubmVsLgogKiBUaGlzIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgZm9yIGFuIGF1ZGlvIFJ4IENPUFAuCiAqIEZvciB0aGUgdm9pY2UgcHJvY2Vzc29yIGJsb2NrIGFuZCBUeCBhdWRpbyBibG9jaywgdGhpcyBmaWVsZAogKiBpcyBzZXQgdG8gemVybyBhbmQgaXMgaWdub3JlZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZGV2X251bV9jaGFubmVsX2VpZDI7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0aGUgdm9pY2UgcHJvY2Vzc29yIGJsb2NrIHNlbmRzCiAqIHRvL3JlY2VpdmVzIGZyb20gdGhlIGVuZHBvaW50Mi4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4LgogKiBUaGUgdmFsdWUgaXMgaWdub3JlZCBmb3IgYXVkaW8gQ09QUCBvciBpZiBlbmRwb2ludF9pZF8yIGlzCiAqIHNldCB0byAweEZGRkYuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aF9laWQyOwovKiBCaXQgd2lkdGggKGluIGJpdHMpIHRoYXQgdGhlIHZvaWNlIHByb2Nlc3NvciBzZW5kcwogKiB0by9yZWNlaXZlcyBmcm9tIHRoZSBlbmRwb2ludDIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2IGFuZCAyNC4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIGF1ZGlvIENPUFAgb3IgaWYgZW5kcG9pbnRfaWRfMiBpcwogKiBzZXQgdG8gMHhGRkZGLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZV9laWQyOwovKiBTYW1wbGluZyByYXRlIGF0IHdoaWNoIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2sKICogaW50ZXJmYWNlcyB3aXRoIHRoZSBlbmRwb2ludDIuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIFR4IHZvaWNlIHByb2Nlc3NvcjogPjAgYW5kIDw9Mzg0IGtIegogKiBUaGUgdmFsdWUgaXMgaWdub3JlZCBmb3IgYXVkaW8gQ09QUCBvciBpZiBlbmRwb2ludF9pZF8yIGlzCiAqIHNldCB0byAweEZGRkYuCiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgIGRldl9jaGFubmVsX21hcHBpbmdfZWlkMls4XTsKLyogQXJyYXkgb2YgY2hhbm5lbCBtYXBwaW5nIG9mIGJ1ZmZlcnMgdGhhdCB0aGUgdm9pY2UgcHJvY2Vzc29yCiAqIHNlbmRzIHRvIHRoZSBlbmRwb2ludC4gQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsCiAqIEkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlIDAgPCBpIDwgZGV2X251bV9jaGFubmVsLgogKiBUaGlzIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgZm9yIHRoZSBUeCB2b2ljZSBwcm9jZXNzb3IuCiAqIFRoZSB2YWx1ZXMgYXJlIGlnbm9yZWQgZm9yIGF1ZGlvIENPUFAgb3IgaWYgZW5kcG9pbnRfaWRfMiBpcwogKiBzZXQgdG8gMHhGRkZGLgogKi8KfSBfX3BhY2tlZDsKCgovKiBBRE0gZGV2aWNlIG9wZW4gZW5kcG9pbnQgcGF5bG9hZCB0aGUKICogICAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WOCBjb21tYW5kLgogKi8Kc3RydWN0IGFkbV9kZXZpY2VfZW5kcG9pbnRfcGF5bG9hZCB7Cgl1MTYgICAgICAgICAgICAgICAgICBkZXZfbnVtX2NoYW5uZWw7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcyBmcm9tCiAqIHRoZSBlbmRwb2ludC4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAzMi4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2ssCiAqIHdoZXJlIGNoYW5uZWwKICogY29uZmlndXJhdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIHRvcG9sb2d5IElELgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCAoaW4gYml0cykgdGhhdCB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcwogKiBmcm9tIHRoZQogKiBlbmRwb2ludC4gVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzaW5nCiAqIFR4IGJsb2NrLAogKiB3aGVyZSB0aGUgUENNIHdpZHRoIGlzIDE2IGJpdHMuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIGF0IHdoaWNoIHRoZSBhdWRpbyBDT1BQL3ZvaWNlIHByb2Nlc3NvcgogKiBUeCBibG9jawogKiBpbnRlcmZhY2VzIHdpdGggdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciB2b2ljZSBwcm9jZXNzb3IgVHg6IDgwMDAsIDE2MDAwLAogKiA0ODAwMCBIegogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBhdWRpbyBDT1BQOiA+MCBhbmQgPD0xOTIga0h6CiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgICBkZXZfY2hhbm5lbF9tYXBwaW5nWzMyXTsKfSBfX3BhY2tlZDsKCi8qICBBRE0gZGV2aWNlIG9wZW4gY29tbWFuZCBwYXlsb2FkIG9mIHRoZQogKiAgICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y4IGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9kZXZpY2Vfb3Blbl92OCB7CglzdHJ1Y3QgYXByX2hkciAgICAgICBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBmbGFnczsKLyogQml0IHdpZHRoIE5hdGl2ZSBtb2RlIGVuYWJsZWQgOiAxMXRoIGJpdCBvZiBmbGFnIHBhcmFtZXRlcgoqICBJZiAxMXRoIGJpdCBvZiBmbGFnIGlzIHNldCB0aGVuIHRoYXQgbWVhbnMgbWF0cml4IG1peGVyIHdpbGwgYmUKKiAgcnVubmluZyBpbiBuYXRpdmUgbW9kZSBmb3IgYml0IHdpZHRoIGZvciB0aGlzIGRldmljZSBzZXNzaW9uLgoqCiogIENoYW5uZWwgTmF0aXZlIG1vZGUgZW5hYmxlZCA6IDEydGggYml0IG9mIGZsYWcgcGFyYW1ldGVyCiogIElmIDEydGggYml0IG9mIGZsYWcgaXMgc2V0IHRoZW4gdGhhdCBtZWFucyBtYXRyaXggbWl4ZXIgd2lsbCBiZQoqICBydW5uaW5nIGluIG5hdGl2ZSBtb2RlIGZvciBjaGFubmVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGV2aWNlIHNlc3Npb24uCiogIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIDAuCiovCgl1MTYgICAgICAgICAgICAgICAgICBtb2RlX29mX29wZXJhdGlvbjsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIENPUFAgbXVzdCBiZSBvcGVuZWQgb24gdGhlIFR4IG9yIFJ4CiAqIHBhdGguIFVzZSB0aGUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fKiBtYWNyb3MgZm9yCiAqIHN1cHBvcnRlZCB2YWx1ZXMgYW5kIGludGVycHJldGF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4MSAtLSBSeCBwYXRoIENPUFAKICogLSAweDIgLS0gVHggcGF0aCBsaXZlIENPUFAKICogLSAweDMgLS0gVHggcGF0aCBub25saXZlIENPUFAKICogTGl2ZSBjb25uZWN0aW9ucyBjYXVzZSBzYW1wbGUgZGlzY2FyZGluZyBpbiB0aGUgVHggZGV2aWNlCiAqIG1hdHJpeCBpZiB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHBvcnRzIGRvIG5vdCBwdWxsIHRoZW0KICogZmFzdCBlbm91Z2guIE5vbmxpdmUgY29ubmVjdGlvbnMgcXVldWUgdGhlIHNhbXBsZXMKICogaW5kZWZpbml0ZWx5LgogKi8KCXUzMiAgICAgICAgICAgICAgICAgIHRvcG9sb2d5X2lkOwovKiBBdWRpbyBDT1BQIHRvcG9sb2d5IElEOyAzMi1iaXQgR1VJRC4gKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRfMTsKLyogTG9naWNhbCBhbmQgcGh5c2ljYWwgZW5kcG9pbnQgSUQgb2YgdGhlIGF1ZGlvIHBhdGguCiAqIElmIHRoZSBJRCBpcyBhIHZvaWNlIHByb2Nlc3NvciBUeCBibG9jaywgaXQgcmVjZWl2ZXMgbmVhcgogKiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkgcHNldWRvcG9ydCwgQUZFIFJ4IHBvcnQsCiAqIG9yIEFGRSBUeCBwb3J0IEZvciBhIGxpc3Qgb2YgdmFsaWQgSURzLCByZWZlciB0bwogKiBAeGh5cGVycmVme1E0LFtRNF19LgogKiBRNCA9IEhleGFnb24gTXVsdGltZWRpYTogQUZFIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzI7Ci8qIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIDIgZm9yIGEgdm9pY2UgcHJvY2Vzc29yCiAqIFR4IGJsb2NrLgogKiBUaGlzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGF1ZGlvIENPUFAuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gQUZFIFJ4IHBvcnQKICogLSAweEZGRkYgLS0gRW5kcG9pbnQgMiBpcyB1bmF2YWlsYWJsZSBhbmQgdGhlIHZvaWNlCiAqIHByb2Nlc3NvciBUeAogKiBibG9jayBpZ25vcmVzIHRoaXMgZW5kcG9pbnQKICogV2hlbiB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrIGlzIGNyZWF0ZWQgb24gdGhlIGF1ZGlvCiAqIHJlY29yZCBwYXRoLAogKiBpdCBjYW4gcmVjZWl2ZSBmYXItZW5kIHNhbXBsZXMgZnJvbSBhbiBBRkUgUnggcG9ydCBpZiB0aGUKICogdm9pY2UgY2FsbAogKiBpcyBhY3RpdmUuIFRoZSBJRCBvZiB0aGUgQUZFIHBvcnQgaXMgcHJvdmlkZWQgaW4gdGhpcwogKiBmaWVsZC4KICogRm9yIGEgbGlzdCBvZiB2YWxpZCBJRHMsIHJlZmVyIEB4aHlwZXJyZWZ7UTQsW1E0XX0uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzM7Ci8qCiAqIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIG9mIHRoZSBhdWRpbyBwYXRoLgogKiBUaGlzIGluZGljYXRlZCBhZmUgcnggcG9ydCBpbiBBRE0gbG9vcGJhY2sgdXNlIGNhc2VzLgogKiBJbiBhbGwgb3RoZXIgdXNlIGNhc2VzIHRoaXMgc2hvdWxkIGJlIHNldCB0byAweGZmZmYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgovKgogKglUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBjbGllbnQgdG8gY2xvc2UgYSBDT1BQIGFuZCBkaXNjb25uZWN0CiAqCXRoZSBkZXZpY2Ugc2Vzc2lvbi4KICovCiNkZWZpbmUgQURNX0NNRF9ERVZJQ0VfQ0xPU0VfVjUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDMyNwoKLyogU2V0cyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIHRvIGEgQ09QUC4gKi8KI2RlZmluZSBBRE1fQ01EX1NFVF9QUF9QQVJBTVNfVjUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzI4CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfU0VUX1BQX1BBUkFNU19WNSBjb21tYW5kLgogKglJZiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZWxlbWVudAogKglhcmUgTlVMTCwgYSBzZXJpZXMgb2YgYWRtX3BhcmFtX2RhdGFzdHJ1Y3R1cmVzIGltbWVkaWF0ZWx5CiAqCWZvbGxvd3MsIHdob3NlIHRvdGFsIHNpemUgaXMgZGF0YV9wYXlsb2FkX3NpemUgYnl0ZXMuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMgkJcGF5bG9hZF9hZGRyX2xzdzsKLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCXUzMgkJcGF5bG9hZF9hZGRyX21zdzsKLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwovKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZAogKgogKiBJZiBtZW1fbWFwX2hhbmRsZSBpcyB6ZXJvIGltcGxpZXMgdGhlIG1lc3NhZ2UgaXMgaW4KICogdGhlIHBheWxvYWQKICovCgoJdTMyCQlwYXlsb2FkX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgYWNjb21wYW55aW5nIHRoaXMKICogbWVzc2FnZSBvcgogKiBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlIHBhcmFtZXRlcgogKiBwYXlsb2FkLgogKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIGZvcm1hdCBmb3IgQ09QUCBwYXJhbWV0ZXIgZGF0YS4KICogSW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZSBwYXJhbV9zaXplIGJ5dGVzCiAqIG9mIHBhcmFtZXRlcgogKiBkYXRhLgogKi8Kc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKCS8qIFVuaXF1ZSBJRCBvZiB0aGUgbW9kdWxlLiAqLwoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgSUQgb2YgdGhlIHBhcmFtZXRlci4gKi8KCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7CgkvKiBEYXRhIHNpemUgb2YgdGhlIHBhcmFtX2lkL21vZHVsZV9pZCBjb21iaW5hdGlvbi4KCSAqIFRoaXMgdmFsdWUgaXMgYQoJICogbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cy4KCSAqIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KCSAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9SRUdJU1RFUl9QUF9FVkVOVFMgMHgwMDAxMzIxMwojZGVmaW5lIEFTTV9TVFJFQU1fUFBfRVZFTlQgMHgwMDAxMzIxNAojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1JFR0lTVEVSX0lFQ182MTkzN19GTVRfVVBEQVRFIDB4MTMzMzMKI2RlZmluZSBBU01fSUVDXzYxOTM3X01FRElBX0ZNVF9FVkVOVCAweDEzMzM0CgojZGVmaW5lIERTUF9TVFJFQU1fQ01EICJBRFNQIFN0cmVhbSBDbWQiCiNkZWZpbmUgRFNQX1NUUkVBTV9DQUxMQkFDSyAiQURTUCBTdHJlYW0gQ2FsbGJhY2sgRXZlbnQiCiNkZWZpbmUgRFNQX1NUUkVBTV9DQUxMQkFDS19RVUVVRV9TSVpFIDEwMjQKCnN0cnVjdCBkc3Bfc3RyZWFtX2NhbGxiYWNrX2xpc3QgewoJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwoJc3RydWN0IG1zbV9hZHNwX2V2ZW50X2RhdGEgZXZlbnQ7Cn07CgpzdHJ1Y3QgZHNwX3N0cmVhbV9jYWxsYmFja19wcnRkIHsKCXVpbnQxNl90IGV2ZW50X2NvdW50OwoJc3RydWN0IGxpc3RfaGVhZCBldmVudF9xdWV1ZTsKCXNwaW5sb2NrX3QgcHJ0ZF9zcGluX2xvY2s7Cn07CgovKiBzZXQgY3VzdG9taXplZCBtaXhpbmcgb24gbWF0cml4IG1peGVyICovCiNkZWZpbmUgQURNX0NNRF9TRVRfUFNQRF9NVE1YX1NUUlRSX1BBUkFNU19WNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzNDQKc3RydWN0IGFkbV9jbWRfc2V0X3BzcGRfbXRteF9zdHJ0cl9wYXJhbXNfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbHN3OwoJLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbXN3OwoJLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICovCgkvKiBjb21tYW5kLiBJZiBtZW1fbWFwX2hhbmRsZSBpcyB6ZXJvIGltcGxpZXMgdGhlIG1lc3NhZ2UgaXMgaW4gKi8KCS8qIHRoZSBwYXlsb2FkICovCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwoJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgcGF5bG9hZCBhY2NvbXBhbnlpbmcgdGhpcyAqLwoJLyogbWVzc2FnZSBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlICovCgkvKiBwYXJhbWV0ZXIgcGF5bG9hZC4gKi8KCXUzMgkJcGF5bG9hZF9zaXplOwoJdTE2CQlkaXJlY3Rpb247Cgl1MTYJCXNlc3Npb25pZDsKCXUxNgkJZGV2aWNlaWQ7Cgl1MTYJCXJlc2VydmVkOwp9IF9fcGFja2VkOwoKLyogRGVmaW5lZCBzcGVjaWZpY2FsbHkgZm9yIGluLWJhbmQgdXNlLCBpbmNsdWRlcyBwYXJhbXMgKi8Kc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc19pbmJhbmRfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyICAgICAgICAgICAgIHBheWxvYWRfYWRkcl9sc3c7CgkvKiBNU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIgICAgICAgICAgICAgcGF5bG9hZF9hZGRyX21zdzsKCS8qIE1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IEFETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAqLwoJLyogY29tbWFuZC4gSWYgbWVtX21hcF9oYW5kbGUgaXMgemVybyBpbXBsaWVzIHRoZSBtZXNzYWdlIGlzIGluICovCgkvKiB0aGUgcGF5bG9hZCAqLwoJdTMyICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgcGF5bG9hZCBhY2NvbXBhbnlpbmcgdGhpcyAqLwoJLyogbWVzc2FnZSBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlICovCgkvKiBwYXJhbWV0ZXIgcGF5bG9hZC4gKi8KCXUzMiAgICAgICAgICAgICBwYXlsb2FkX3NpemU7CgkvKiBQYXJhbWV0ZXJzIHBhc3NlZCBmb3IgaW4gYmFuZCBwYXlsb2FkICovCglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgICAgICAgIHBhcmFtczsKfSBfX3BhY2tlZDsKCi8qIFJldHVybnMgdGhlIHN0YXR1cyBhbmQgQ09QUCBJRCB0byBhbiAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WNSBjb21tYW5kLgogKi8KI2RlZmluZSBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzMjkKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNSBtZXNzYWdlLAogKgl3aGljaCByZXR1cm5zIHRoZQogKglzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjUgY29tbWFuZC4KICovCnN0cnVjdCBhZG1fY21kX3JzcF9kZXZpY2Vfb3Blbl92NSB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjb3BwX2lkOwoJLyogQ09QUCBJRDogIFN1cHBvcnRlZCB2YWx1ZXM6IDAgPD0gY29wcF9pZCA8IEFETV9NQVhfQ09QUFMqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogUmV0dXJucyB0aGUgc3RhdHVzIGFuZCBDT1BQIElEIHRvIGFuICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y2IGNvbW1hbmQuICovCiNkZWZpbmUgQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzU3CgovKiBSZXR1cm5zIHRoZSBzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjggY29tbWFuZC4gKi8KI2RlZmluZSBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzNkIKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNiBtZXNzYWdlLAogKgl3aGljaCByZXR1cm5zIHRoZQogKglzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjYgY29tbWFuZAogKglpcyB0aGUgZXhhY3Qgc2FtZSBhcyBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y1LgogKi8KCi8qIFRoaXMgY29tbWFuZCBhbGxvd3MgYSBxdWVyeSBvZiBvbmUgQ09QUCBwYXJhbWV0ZXIuICovCiNkZWZpbmUgQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzJBCgovKiAgUGF5bG9hZCBhbiAjQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1IGNvbW1hbmQuICovCnN0cnVjdCBhZG1fY21kX2dldF9wcF9wYXJhbXNfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoKCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qIE1TVyBvZiBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuKi8KCgkvKiBJZiB0aGUgbWVtX21hcF9oYW5kbGUgaXMgbm9uIHplcm8sCgkgKiBvbiBBQ0ssIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgYmVnaW4gYXQKCSAqIHRoZSBhZGRyZXNzIHNwZWNpZmllZCAob3V0LW9mLWJhbmQpLgoJICovCgoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7CgkvKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZAoJICogYnkgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCgkgKiBJZiB0aGUgbWVtX21hcF9oYW5kbGUgaXMgMCwgaXQgaW1wbGllcyB0aGF0CgkgKiB0aGUgQUNLJ3MgcGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIFBhcmFtRGF0YSAoaW4tYmFuZCkuCgkgKi8KCgl1MzIgICAgICAgICAgICAgICAgICBtb2R1bGVfaWQ7CgkvKiBVbmlxdWUgSUQgb2YgdGhlIG1vZHVsZS4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIFVuaXF1ZSBJRCBvZiB0aGUgcGFyYW1ldGVyLiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX21heF9zaXplOwoJLyogTWF4aW11bSBkYXRhIHNpemUgb2YgdGhlIHBhcmFtZXRlcgoJICpJRC9tb2R1bGUgSUQgY29tYmluYXRpb24uIFRoaXMKCSAqIGZpZWxkIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cy4KCSAqIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KCSAqLwp9IF9fcGFja2VkOwoKLyogUmV0dXJucyBwYXJhbWV0ZXIgdmFsdWVzCiAqCWluIHJlc3BvbnNlIHRvIGFuICNBRE1fQ01EX0dFVF9QUF9QQVJBTVNfVjUgY29tbWFuZC4KICovCiNkZWZpbmUgQURNX0NNRFJTUF9HRVRfUFBfUEFSQU1TX1Y1CQkweDAwMDEwMzJCCgovKiBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9HRVRfUFBfUEFSQU1TX1Y1IG1lc3NhZ2UsCiAqIHdoaWNoIHJldHVybnMgcGFyYW1ldGVyIHZhbHVlcyBpbiByZXNwb25zZQogKiB0byBhbiAjQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1IGNvbW1hbmQuCiAqIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzCiAqIHN0cnVjdHVyZSBpcyB0aGUgYWRtX3BhcmFtX2RhdGFfdjUKICogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHByZS9wb3N0cHJvY2Vzc2luZwogKiBwYXJhbWV0ZXIgZGF0YS4gRm9yIGFuIGluLWJhbmQKICogc2NlbmFyaW8sIHRoZSB2YXJpYWJsZSBwYXlsb2FkIGRlcGVuZHMKICogb24gdGhlIHNpemUgb2YgdGhlIHBhcmFtZXRlci4KICovCnN0cnVjdCBhZG1fY21kX3JzcF9nZXRfcHBfcGFyYW1zX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKCS8qIFN0YXR1cyBtZXNzYWdlIChlcnJvciBjb2RlKS4qLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHNvZnQgc3RlcHBpbmcgdm9sdW1lIHBhcmFtZXRlcnMuICovCgovKgogKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1NPRlRfVk9MX1NURVBQSU5HX1BBUkFNRVRFUlMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKc3RydWN0IGF1ZHByb2Nfc29mdHZvbHVtZV9wYXJhbXMgewoJdTMyIHBlcmlvZDsKCXUzMiBzdGVwOwoJdTMyIHJhbXBpbmdjdXJ2ZTsKfSBfX3BhY2tlZDsKCi8qCiAqIElEIG9mIHRoZSBNZWRpYSBGb3JtYXQgQ29udmVydGVyIChNRkMpIG1vZHVsZS4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAjQVVEUFJPQ19QQVJBTV9JRF9NRkNfT1VUUFVUX01FRElBX0ZPUk1BVAogKiAjQVVEUFJPQ19DSE1JWEVSX1BBUkFNX0lEX0NPRUZGCiAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX01GQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOTEyCgovKiBJRCBvZiB0aGUgT3V0cHV0IE1lZGlhIEZvcm1hdCBwYXJhbWV0ZXJzIHVzZWQgYnkgQVVEUFJPQ19NT0RVTEVfSURfTUZDLgogKgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX01GQ19PVVRQVVRfTUVESUFfRk9STUFUICAgICAgICAgICAgMHgwMDAxMDkxMwoKLyogUGFyYW0gSUQgb2YgQ2hhbm5lbCBNaXhlciB1c2VkIGJ5IEFVRFBST0NfTU9EVUxFX0lEX01GQyAqLwojZGVmaW5lIEFVRFBST0NfQ0hNSVhFUl9QQVJBTV9JRF9DT0VGRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzQyCgoKc3RydWN0IGF1ZHByb2NfbWZjX291dHB1dF9tZWRpYV9mbXQgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCXVpbnQzMl90IHNhbXBsaW5nX3JhdGU7Cgl1aW50MTZfdCBiaXRzX3Blcl9zYW1wbGU7Cgl1aW50MTZfdCBudW1fY2hhbm5lbHM7Cgl1aW50MTZfdCBjaGFubmVsX3R5cGVbOF07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXVkcHJvY192b2x1bWVfY3RybF9tYXN0ZXJfZ2FpbiB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwoJLyogTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdC4gKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbWFzdGVyX2dhaW47CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXVkcHJvY19zb2Z0X3N0ZXBfdm9sdW1lX3BhcmFtcyB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwovKgogKiBQZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwCiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwZXJpb2Q7Ci8qCiAqIFN0ZXAgaW4gbWljcm9zZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwMDAwCiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBzdGVwOwovKgogKiBSYW1waW5nIGN1cnZlIHR5cGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FVRFBST0NfUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9MSU5FQVIKICogLSAjQVVEUFJPQ19QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0VYUAogKiAtICNBVURQUk9DX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTE9HCiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICByYW1waW5nX2N1cnZlOwp9IF9fcGFja2VkOwoKc3RydWN0IGF1ZHByb2NfZW5hYmxlX3BhcmFtX3QgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc19pbmJhbmRfdjUgcHBfcGFyYW1zOwoJLyoKCSAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBBdWRpbyBwcm9jZXNzaW5nIG1vZHVsZSBpcyBlbmFibGVkLgoJICogVGhpcyBwYXJhbWV0ZXIgaXMgZ2VuZXJpYy9jb21tb24gcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZSBvcgoJICogZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiBhbnkgYXVkaW8gcHJvY2Vzc2luZyBtb2R1bGUuCgoJICogQHZhbHVlcyAwIDogRGlzYWJsZSAxOiBFbmFibGUKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGU7Cn07CgovKgogKiBBbGxvd3MgYSBjbGllbnQgdG8gY29udHJvbCB0aGUgZ2FpbnMgb24gdmFyaW91cyBzZXNzaW9uLXRvLUNPUFAgcGF0aHMuCiAqLwojZGVmaW5lIEFETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzJDCgovKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IGdhaW4gaW4gdGhlCiAqCWN1cnJlbnQgYWRtX3Nlc3Npb25fY29wcF9nYWluX3Y1CiAqCXN0cnVjdHVyZSBpcyB0byBiZSBhcHBsaWVkIHRvIGFsbAogKgl0aGUgc2Vzc2lvbi10by1DT1BQIHBhdGhzIHRoYXQgZXhpc3QgZm9yCiAqCXRoZSBzcGVjaWZpZWQgc2Vzc2lvbi4KICovCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19DT1BQX0lEX0FMTF9DT05ORUNURURfQ09QUFMgICAgIDB4RkZGRgoKLyogSW5kaWNhdGVzIHRoYXQgdGhlIHRhcmdldCBnYWluIGlzCiAqIHRvIGJlIGltbWVkaWF0ZWx5IGFwcGxpZWQgdG8gdGhlCiAqIHNwZWNpZmllZCBzZXNzaW9uLXRvLUNPUFAgcGF0aCwKICogd2l0aG91dCBhIHJhbXBpbmcgZmFzaGlvbi4KICovCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19SQU1QX0RVUkFUSU9OX0lNTUVESUFURSAgICAgICAgIDB4MDAwMAoKLyogRW51bWVyYXRpb24gZm9yIGEgbGluZWFyIHJhbXBpbmcgY3VydmUuKi8KI2RlZmluZSBBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1JBTVBfQ1VSVkVfTElORUFSICAgICAgICAgICAgICAgMHgwMDAwCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfVjUgY29tbWFuZC4KICogSW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZSBudW1fZ2FpbnMgb2YgdGhlCiAqIGFkbV9zZXNzaW9uX2NvcHBfZ2Fpbl92NXN0cnVjdHVyZS4KICovCnN0cnVjdCBhZG1fY21kX21hdHJpeF9yYW1wX2dhaW5zX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIG1hdHJpeF9pZDsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1hdHJpeCBJRCBpcyBBdWRpbyBSeCAoMCkgb3IgQXVkaW8gVHggKDEpLgogKiBVc2UgdGhlIEFETV9NQVRSSVhfSURfQVVESU9fUlggb3IgIEFETV9NQVRSSVhfSURfQVVESU9YCiAqIG1hY3JvcyB0byBzZXQgdGhpcyBmaWVsZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2dhaW5zOwoJLyogTnVtYmVyIG9mIGdhaW5zIGJlaW5nIGFwcGxpZWQuICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfZm9yX2FsaWduOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogIFNlc3Npb24tdG8tQ09QUCBwYXRoIGdhaW4gc3RydWN0dXJlLCB1c2VkIGJ5IHRoZQogKgkjQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19WNSBjb21tYW5kLgogKglUaGlzIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIHRhcmdldAogKglnYWluIChwZXIgY2hhbm5lbCkgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICoJdG8gYSBwYXJ0aWN1bGFyIHNlc3Npb24tdG8tQ09QUCBwYXRoIGluCiAqCXRoZSBhdWRpbyBtYXRyaXguIFRoZSBzdHJ1Y3R1cmUgY2FuCiAqCWFsc28gYmUgdXNlZCB0byBhcHBseSB0aGUgZ2FpbiBnbG9iYWxseQogKgl0byBhbGwgc2Vzc2lvbi10by1DT1BQIHBhdGhzIHRoYXQKICoJZXhpc3QgZm9yIHRoZSBnaXZlbiBzZXNzaW9uLgogKglUaGUgYURTUCB1c2VzIGRldmljZSBjaGFubmVsIG1hcHBpbmcgdG8KICoJZGV0ZXJtaW5lIHdoaWNoIGNoYW5uZWwgZ2FpbnMgdG8KICoJdXNlIGZyb20gdGhpcyBjb21tYW5kLiBGb3IgZXhhbXBsZSwKICoJaWYgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIGFzIHN0ZXJlbywKICoJdGhlIGFEU1AgdXNlcyBvbmx5IHRhcmdldF9nYWluX2NoXzEgYW5kCiAqCXRhcmdldF9nYWluX2NoXzIsIGFuZCBpdCBpZ25vcmVzCiAqCXRoZSBvdGhlcnMuCiAqLwpzdHJ1Y3QgYWRtX3Nlc3Npb25fY29wcF9nYWluX3Y1IHsKCXUxNiAgICAgICAgICAgICAgICAgIHNlc3Npb25faWQ7Ci8qIEhhbmRsZSBvZiB0aGUgQVNNIHNlc3Npb24uCiAqCVN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgY29wcF9pZDsKLyogSGFuZGxlIG9mIHRoZSBDT1BQLiBHYWluIHdpbGwgYmUgYXBwbGllZCBvbiB0aGUgU2Vzc2lvbiBJRAogKiBDT1BQIElEIHBhdGguCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJhbXBfZHVyYXRpb247Ci8qIER1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIG9mIHRoZSByYW1wIG92ZXIKICogd2hpY2ggdGFyZ2V0IGdhaW5zIGFyZQogKiB0byBiZSBhcHBsaWVkLiBVc2UKICogI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9EVVJBVElPTl9JTU1FRElBVEUKICogdG8gaW5kaWNhdGUgdGhhdCBnYWluIG11c3QgYmUgYXBwbGllZCBpbW1lZGlhdGVseS4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgc3RlcF9kdXJhdGlvbjsKLyogRHVyYXRpb24gKGluIG1pbGxpc2Vjb25kcykgb2YgZWFjaCBzdGVwIGluIHRoZSByYW1wLgogKiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIHJhbXBfZHVyYXRpb24gaXMgZXF1YWwgdG8KICogI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9EVVJBVElPTl9JTU1FRElBVEUuCiAqIFN1cHBvcnRlZCB2YWx1ZTogMQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByYW1wX2N1cnZlOwovKiBUeXBlIG9mIHJhbXBpbmcgY3VydmUuCiAqIFN1cHBvcnRlZCB2YWx1ZTogI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9DVVJWRV9MSU5FQVIKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfZm9yX2FsaWduOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF8xOwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDEgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF8yOwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDIgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF8zOwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDMgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF80OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDQgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF81OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDUgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF82OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDYgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF83OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDcgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF84OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDggaW4gUTEzIGZvcm1hdDsgKi8KfSBfX3BhY2tlZDsKCi8qIEFsbG93cyB0byBzZXQgbXV0ZS91bm11dGUgb24gdmFyaW91cyBzZXNzaW9uLXRvLUNPUFAgcGF0aHMuCiAqCUZvciBldmVyeSBzZXNzaW9uLXRvLUNPUFAgcGF0aCAoc3RyZWFtLWRldmljZSBpbnRlcmNvbm5lY3Rpb24pLAogKgltdXRlL3VubXV0ZSBjYW4gYmUgc2V0IGluZGl2aWR1YWxseSBvbiB0aGUgb3V0cHV0IGNoYW5uZWxzLgogKi8KI2RlZmluZSBBRE1fQ01EX01BVFJJWF9NVVRFX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzJECgovKiBJbmRpY2F0ZXMgdGhhdCBtdXRlL3VubXV0ZSBpbiB0aGUKICoJY3VycmVudCBhZG1fc2Vzc2lvbl9jb3BwX211dGVfdjVzdHJ1Y3R1cmUKICoJaXMgdG8gYmUgYXBwbGllZCB0byBhbGwgdGhlIHNlc3Npb24tdG8tQ09QUAogKglwYXRocyB0aGF0IGV4aXN0IGZvciB0aGUgc3BlY2lmaWVkIHNlc3Npb24uCiAqLwojZGVmaW5lIEFETV9DTURfTUFUUklYX01VVEVfQ09QUF9JRF9BTExfQ09OTkVDVEVEX0NPUFBTICAgICAweEZGRkYKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRF9NQVRSSVhfTVVURV9WNSBjb21tYW5kKi8Kc3RydWN0IGFkbV9jbWRfbWF0cml4X211dGVfdjUgewoJdTMyICAgICAgICAgICAgICAgICAgbWF0cml4X2lkOwovKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbWF0cml4IElEIGlzIEF1ZGlvIFJ4ICgwKSBvciBBdWRpbyBUeCAoMSkuCiAqIFVzZSB0aGUgQURNX01BVFJJWF9JRF9BVURJT19SWCBvciAgQURNX01BVFJJWF9JRF9BVURJT1gKICogbWFjcm9zIHRvIHNldCB0aGlzIGZpZWxkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwovKiBIYW5kbGUgb2YgdGhlIEFTTSBzZXNzaW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDguCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNvcHBfaWQ7Ci8qIEhhbmRsZSBvZiB0aGUgQ09QUC4KICogVXNlIEFETV9DTURfTUFUUklYX01VVEVfQ09QUF9JRF9BTExfQ09OTkVDVEVEX0NPUFBTCiAqIHRvIGluZGljYXRlIHRoYXQgbXV0ZS91bm11dGUgbXVzdCBiZSBhcHBsaWVkIHRvCiAqIGFsbCB0aGUgQ09QUHMgY29ubmVjdGVkIHRvIHNlc3Npb25faWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMHhGRkZGIC0tIEFwcGx5IG11dGUvdW5tdXRlIHRvIGFsbCBjb25uZWN0ZWQgQ09QUHMKICogLSBPdGhlciB2YWx1ZXMgLS0gVmFsaWQgQ09QUCBJRAogKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF8xOwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDEgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfMjsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCAyIGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzM7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgMyBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF80OwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDQgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfNTsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCA1IGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzY7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgNiBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF83OwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDcgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfODsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCA4IGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgcmFtcF9kdXJhdGlvbjsKLyogUGVyaW9kIChpbiBtaWxsaXNlY29uZHMpIG92ZXIgd2hpY2ggdGhlIHNvZnQgbXV0ZS91bm11dGUgd2lsbCBiZQogKiBhcHBsaWVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIChEZWZhdWx0KSB0byAweEZGRkYKICogVGhlIGRlZmF1bHQgb2YgMCBtZWFucyBtdXRlL3VubXV0ZSB3aWxsIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfZm9yX2FsaWduOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FBQ19TVEVSRU9fTUlYX0NPRUZGX1NFTEVDVElPTl9GTEFHX1YyICgweDAwMDEwREQ4KQoKc3RydWN0IGFzbV9hYWNfc3RlcmVvX21peF9jb2VmZl9zZWxlY3Rpb25fcGFyYW1fdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICAgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7Cgl1MzIgICAgICAgICAgICAgICAgICAgICBwYXJhbV9zaXplOwoJdTMyICAgICAgICAgICAgICAgICAgICAgYWFjX3N0ZXJlb19taXhfY29lZmZfZmxhZzsKfSBfX3BhY2tlZDsKCi8qIEFsbG93cyBhIGNsaWVudCB0byBjb25uZWN0IHRoZSBkZXNpcmVkIHN0cmVhbSB0bwogKiB0aGUgZGVzaXJlZCBBRkUgcG9ydCB0aHJvdWdoIHRoZSBzdHJlYW0gcm91dGVyCiAqCiAqIFRoaXMgY29tbWFuZCBhbGxvd3MgdGhlIGNsaWVudCB0byBjb25uZWN0IHNwZWNpZmllZCBzZXNzaW9uIHRvCiAqIHNwZWNpZmllZCBBRkUgcG9ydC4gVGhpcyBpcyB1c2VkIGZvciBjb21wcmVzc2VkIHN0cmVhbXMgb25seQogKiBvcGVuZWQgdXNpbmcgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9DT01QUkVTU0VEIGNvbW1hbmQuCiAqCiAqIEBwcmVyZXF1aXNpdGVzCiAqIFNlc3Npb24gSUQgYW5kIEFGRSBQb3J0IElEIG11c3QgYmUgdmFsaWQuCiAqICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9DT01QUkVTU0VECiAqIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBvbiB0aGlzIHNlc3Npb24uCiAqLwoKI2RlZmluZSBBRE1fQ01EX0NPTk5FQ1RfQUZFX1BPUlRfVjUJMHgwMDAxMDMyRQojZGVmaW5lIEFETV9DTURfRElTQ09OTkVDVF9BRkVfUE9SVF9WNQkweDAwMDEwMzJGCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgUnggc3RyZWFtIHJvdXRlciBJRC4qLwojZGVmaW5lIEFETV9TVFJUUl9JRF9SWCAgICAgICAgICAgICAgICAgICAgMAovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFR4IHN0cmVhbSByb3V0ZXIgSUQuKi8KI2RlZmluZSBBRE1fU1RSVFJfSURYICAgICAgICAgICAgICAgICAgICAxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfQ09OTkVDVF9BRkVfUE9SVF9WNSBjb21tYW5kLiovCnN0cnVjdCBhZG1fY21kX2Nvbm5lY3RfYWZlX3BvcnRfdjUgewoJc3RydWN0IGFwcl9oZHIgICAgIGhkcjsKCXU4ICAgICAgICAgICAgICAgICAgbW9kZTsKLyogSUQgb2YgdGhlIHN0cmVhbSByb3V0ZXIgKFJYL1RYKS4gVXNlIHRoZQogKiBBRE1fU1RSVFJfSURfUlggb3IgQURNX1NUUlRSX0lEWCBtYWNyb3MKICogdG8gc2V0IHRoaXMgZmllbGQuCiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9pZDsKCS8qIFNlc3Npb24gSUQgb2YgdGhlIHN0cmVhbSB0byBjb25uZWN0ICovCgoJdTE2ICAgICAgICAgICAgICAgICBhZmVfcG9ydF9pZDsKCS8qIFBvcnQgSUQgb2YgdGhlIEFGRSBwb3J0IHRvIGNvbm5lY3QgdG8uKi8KCXUzMiAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgZGV2aWNlIGNoYW5uZWxzCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIoQXVkaW8gU2FtcGxlIFBhY2tldCksCiAqIDggKEhCUiBBdWRpbyBTdHJlYW0gU2FtcGxlIFBhY2tldCkKICovCgoJdTMyICAgICAgICAgICAgICAgICBzYW1wbGluZ19yYXRlOwovKiBEZXZpY2Ugc2FtcGxpbmcgcmF0ZQogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkKICovCn0gX19wYWNrZWQ7CgoKLyogYWRzcF9hZG1fYXBpLmggKi8KCgovKiBQb3J0IElELiBVcGRhdGUgYWZlX2dldF9wb3J0X2luZGV4CiAqIHdoZW4gYSBuZXcgcG9ydCBpcyBhZGRlZCBoZXJlLgogKi8KI2RlZmluZSBQUklNQVJZX0kyU19SWCAwCiNkZWZpbmUgUFJJTUFSWV9JMlNfVFggMQojZGVmaW5lIFNFQ09OREFSWV9JMlNfUlggNAojZGVmaW5lIFNFQ09OREFSWV9JMlNfVFggNQojZGVmaW5lIE1JMlNfUlggNgojZGVmaW5lIE1JMlNfVFggNwojZGVmaW5lIEhETUlfUlggOAojZGVmaW5lIFJTVkRfMiA5CiNkZWZpbmUgUlNWRF8zIDEwCiNkZWZpbmUgRElHSV9NSUNfVFggMTEKI2RlZmluZSBWT0lDRTJfUExBWUJBQ0tfVFggMHg4MDAyCiNkZWZpbmUgVk9JQ0VfUkVDT1JEX1JYIDB4ODAwMwojZGVmaW5lIFZPSUNFX1JFQ09SRF9UWCAweDgwMDQKI2RlZmluZSBWT0lDRV9QTEFZQkFDS19UWCAweDgwMDUKCi8qIFNsaW1idXMgTXVsdGkgY2hhbm5lbCBwb3J0IGlkIHBvb2wgICovCiNkZWZpbmUgU0xJTUJVU18wX1JYCQkweDQwMDAKI2RlZmluZSBTTElNQlVTXzBfVFgJCTB4NDAwMQojZGVmaW5lIFNMSU1CVVNfMV9SWAkJMHg0MDAyCiNkZWZpbmUgU0xJTUJVU18xX1RYCQkweDQwMDMKI2RlZmluZSBTTElNQlVTXzJfUlgJCTB4NDAwNAojZGVmaW5lIFNMSU1CVVNfMl9UWAkJMHg0MDA1CiNkZWZpbmUgU0xJTUJVU18zX1JYCQkweDQwMDYKI2RlZmluZSBTTElNQlVTXzNfVFgJCTB4NDAwNwojZGVmaW5lIFNMSU1CVVNfNF9SWAkJMHg0MDA4CiNkZWZpbmUgU0xJTUJVU180X1RYCQkweDQwMDkKI2RlZmluZSBTTElNQlVTXzVfUlgJCTB4NDAwYQojZGVmaW5lIFNMSU1CVVNfNV9UWAkJMHg0MDBiCiNkZWZpbmUgU0xJTUJVU182X1JYCQkweDQwMGMKI2RlZmluZSBTTElNQlVTXzZfVFgJCTB4NDAwZAojZGVmaW5lIFNMSU1CVVNfN19SWAkJMHg0MDBlCiNkZWZpbmUgU0xJTUJVU183X1RYCQkweDQwMGYKI2RlZmluZSBTTElNQlVTXzhfUlgJCTB4NDAxMAojZGVmaW5lIFNMSU1CVVNfOF9UWAkJMHg0MDExCiNkZWZpbmUgU0xJTUJVU19QT1JUX0xBU1QJU0xJTUJVU184X1RYCiNkZWZpbmUgSU5UX0JUX1NDT19SWCAweDMwMDAKI2RlZmluZSBJTlRfQlRfU0NPX1RYIDB4MzAwMQojZGVmaW5lIElOVF9CVF9BMkRQX1JYIDB4MzAwMgojZGVmaW5lIElOVF9GTV9SWCAweDMwMDQKI2RlZmluZSBJTlRfRk1fVFggMHgzMDA1CiNkZWZpbmUgUlRfUFJPWFlfUE9SVF8wMDFfUlgJMHgyMDAwCiNkZWZpbmUgUlRfUFJPWFlfUE9SVF8wMDFfVFgJMHgyMDAxCiNkZWZpbmUgQUZFX0xPT1BCQUNLX1RYCTB4NjAwMQojZGVmaW5lIERJU1BMQVlfUE9SVF9SWAkweDYwMjAKCiNkZWZpbmUgQUZFX1BPUlRfSU5WQUxJRCAweEZGRkYKI2RlZmluZSBTTElNQlVTX0lOVkFMSUQgQUZFX1BPUlRfSU5WQUxJRAoKI2RlZmluZSBBRkVfUE9SVF9DTURfU1RBUlQgMHgwMDAxMDBjYQoKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX1NUQVJUIDAKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX1NUT1AgMQojZGVmaW5lIEFGRV9FVkVOVF9SVFBPUlRfTE9XX1dNIDIKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX0hJX1dNIDMKCiNkZWZpbmUgQURTUF9BRkVfVkVSU0lPTiAgICAweDAwMjAwMDAwCgovKiBTaXplIG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgdGhlIGF1ZGlvIGludGVyZmFjZS4gKi8KI2RlZmluZSAgQUZFX1BPUlRfSURfQVVESU9fSUZfUE9SVF9SQU5HRV9TSVpFCTB4RgoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIGludGVybmFsIEJULUZNIHBvcnRzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX0ZNX1JBTkdFX1NJWkUJMHg2CgovKiBTaXplIG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgU0xJTWJ1czxzdXA+JnJlZzsKICogPC9zdXA+IG11bHRpY2hhbm5lbAogKiBwb3J0cy4KICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TSVpFCTB4QQoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHJlYWwtdGltZSBwcm94eSBwb3J0cy4gKi8KI2RlZmluZSAgQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TSVpFCTB4MgoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHBzZXVkb3BvcnRzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU0laRQkweDUKCi8qIFN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgdGhlIGF1ZGlvIGludGVyZmFjZS4gKi8KI2RlZmluZSAgQUZFX1BPUlRfSURfQVVESU9fSUZfUE9SVF9SQU5HRV9TVEFSVAkweDEwMDAKCi8qIEVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHRoZSBhdWRpbyBpbnRlcmZhY2UuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX0FVRElPX0lGX1BPUlRfUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9BVURJT19JRl9QT1JUX1JBTkdFX1NUQVJUICtcCglBRkVfUE9SVF9JRF9BVURJT19JRl9QT1JUX1JBTkdFX1NJWkUgLSAxKQoKLyogU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciByZWFsLXRpbWUgcHJveHkgcG9ydHMuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQJMHgyMDAwCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciByZWFsLXRpbWUgcHJveHkgcG9ydHMuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NUQVJUICtcCglBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NJWkUtMSkKCi8qIFN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgaW50ZXJuYWwgQlQtRk0gZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9GTV9SQU5HRV9TVEFSVAkweDMwMDAKCi8qIEVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIGludGVybmFsIEJULUZNIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5URVJOQUxfQlRfRk1fUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9GTV9SQU5HRV9TVEFSVCArXAoJQUZFX1BPUlRfSURfSU5URVJOQUxfQlRfRk1fUkFOR0VfU0laRS0xKQoKLyoJU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBTTElNYnVzIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TVEFSVAkweDQwMDAKCi8qCUVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFNMSU1idXMgZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TVEFSVCArXAoJQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TSVpFLTEpCgovKiBTdGFydCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHBzZXVkb3BvcnRzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU1RBUlQJMHg4MDAxCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBwc2V1ZG9wb3J0cy4gICovCiNkZWZpbmUgQUZFX1BPUlRfSURfUFNFVURPUE9SVF9SQU5HRV9FTkQgXAoJKEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU1RBUlQgK1wKCUFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU0laRS0xKQoKLyogU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBURE0gZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVAkweDkwMDAKCi8qIEVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFRETSBkZXZpY2VzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQrMHg1MC0xKQoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFRETSBwb3J0cy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TSVpFIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9FTkQgLSBcCglBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCsxKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX01JMlNfUlggICAgICAgICAweDEwMDAKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX01JMlNfVFggICAgICAgICAweDEwMDEKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfTUkyU19SWCAgICAgICAweDEwMDIKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfTUkyU19UWCAgICAgICAweDEwMDMKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9NSTJTX1JYICAgICAgICAweDEwMDQKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9NSTJTX1RYICAgICAgICAweDEwMDUKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX01JMlNfUlggICAgICAweDEwMDYKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX01JMlNfVFggICAgICAweDEwMDcKI2RlZmluZSBBVURJT19QT1JUX0lEX0kyU19SWCAgICAgICAgICAgICAgICAweDEwMDgKI2RlZmluZSBBRkVfUE9SVF9JRF9ESUdJVEFMX01JQ19UWCAgICAgICAgICAweDEwMDkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1BDTV9SWCAgICAgICAgICAweDEwMEEKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1BDTV9UWCAgICAgICAgICAweDEwMEIKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfUENNX1JYICAgICAgICAweDEwMEMKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfUENNX1RYICAgICAgICAweDEwMEQKI2RlZmluZSBBRkVfUE9SVF9JRF9NVUxUSUNIQU5fSERNSV9SWCAgICAgICAweDEwMEUKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfTUkyU19SWF9TRDEgICAweDEwMTAKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9QQ01fUlggICAgICAgICAweDEwMTIKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9QQ01fVFggICAgICAgICAweDEwMTMKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1BDTV9SWCAgICAgICAweDEwMTQKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1BDTV9UWCAgICAgICAweDEwMTUKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX01JMlNfUlggICAgICAgICAweDEwMTYKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX01JMlNfVFggICAgICAgICAweDEwMTcKLyogSUQgb2YgdGhlIHNlbmFyeSBNSTJTIFJ4IHBvcnQuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VOQVJZX01JMlNfUlggICAgICAgICAgMHgxMDE4Ci8qIElEIG9mIHRoZSBzZW5hcnkgTUkyUyBUeCBwb3J0LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NFTkFSWV9NSTJTX1RYICAgICAgICAgIDB4MTAxOQoKLyogSUQgb2YgdGhlIEludGVybmFsIDAgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMF9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMkUKLyogSUQgb2YgdGhlIEludGVybmFsIDAgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMF9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMkYKLyogSUQgb2YgdGhlIEludGVybmFsIDEgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMV9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzAKLyogSUQgb2YgdGhlIEludGVybmFsIDEgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMV9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzEKLyogSUQgb2YgdGhlIEludGVybmFsIDIgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMl9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzIKLyogSUQgb2YgdGhlIEludGVybmFsIDIgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMl9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzMKLyogSUQgb2YgdGhlIEludGVybmFsIDMgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UM19NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzQKLyogSUQgb2YgdGhlIEludGVybmFsIDMgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UM19NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzUKLyogSUQgb2YgdGhlIEludGVybmFsIDQgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNF9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzYKLyogSUQgb2YgdGhlIEludGVybmFsIDQgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNF9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzcKLyogSUQgb2YgdGhlIEludGVybmFsIDUgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNV9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzgKLyogSUQgb2YgdGhlIEludGVybmFsIDUgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNV9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzkKLyogSUQgb2YgdGhlIEludGVybmFsIDYgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNl9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwM0EKLyogSUQgb2YgdGhlIEludGVybmFsIDYgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNl9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwM0IKCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9QQ01fUlggICAgICAgMHgxMDNDCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9QQ01fVFggICAgICAgMHgxMDNECgojZGVmaW5lIEFGRV9QT1JUX0lEX1NQRElGX1JYICAgICAgICAgICAgICAgIDB4NTAwMAojZGVmaW5lICBBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUXzAwMV9SWCAgIDB4MjAwMAojZGVmaW5lICBBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUXzAwMV9UWCAgIDB4MjAwMQojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX1NDT19SWCAgICAgIDB4MzAwMAojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX1NDT19UWCAgICAgIDB4MzAwMQojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX0EyRFBfUlggICAgIDB4MzAwMgojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0ZNX1JYICAgICAgICAgIDB4MzAwNAojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0ZNX1RYICAgICAgICAgIDB4MzAwNQovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCAwLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8wX1JYICAgICAgMHg0MDAwCi8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDAuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzBfVFggICAgICAweDQwMDEKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgMS4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fMV9SWCAgICAgIDB4NDAwMgovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCAxLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8xX1RYICAgICAgMHg0MDAzCi8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDIuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzJfUlggICAgICAweDQwMDQKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgMi4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fMl9UWCAgICAgIDB4NDAwNQovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCAzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8zX1JYICAgICAgMHg0MDA2Ci8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzNfVFggICAgICAweDQwMDcKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgNC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fNF9SWCAgICAgIDB4NDAwOAovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCA0LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl80X1RYICAgICAgMHg0MDA5Ci8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDUuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzVfUlggICAgICAweDQwMGEKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgNS4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fNV9UWCAgICAgIDB4NDAwYgovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCA2LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl82X1JYICAgICAgMHg0MDBjCi8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDYuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzZfVFggICAgICAweDQwMGQKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgNy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fN19SWCAgICAgIDB4NDAwZQovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCA3LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl83X1RYICAgICAgMHg0MDBmCi8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDguICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzhfUlggICAgICAweDQwMTAKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgOC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fOF9UWCAgICAgIDB4NDAxMQovKiBBRkUgUnggcG9ydCBmb3IgYXVkaW8gb3ZlciBEaXNwbGF5IHBvcnQgKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9IRE1JX09WRVJfRFBfUlggICAgICAgICAgICAgIDB4NjAyMAovKlVTQiBBRkUgcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1VTQl9SWCAgICAgICAgICAgICAgICAgICAgICAgMHg3MDAwCiNkZWZpbmUgQUZFX1BPUlRfSURfVVNCX1RYICAgICAgICAgICAgICAgICAgICAgICAweDcwMDEKCi8qIEdlbmVyaWMgcHNldWRvcG9ydCAxLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfMDEgICAgICAweDgwMDEKLyogR2VuZXJpYyBwc2V1ZG9wb3J0IDIuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfUFNFVURPUE9SVF8wMiAgICAgIDB4ODAwMgoKLyogQHhyZWZsYWJlbHtoZHI6QWZlUG9ydElkUHJpbWFyeUF1eFBjbVR4fQogKiBQcmltYXJ5IEF1eCBQQ00gVHggcG9ydCBJRC4KICovCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9QQ01fVFggICAgICAweDEwMEIKLyogUHNldWRvcG9ydCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB2b2ljZSBSeCBwYXRoLgogKiBGb3IgcmVjb3JkaW5nLCB0aGUgdm9pY2UgUnggcGF0aCBzYW1wbGVzIGFyZSB3cml0dGVuIHRvIHRoaXMKICogcG9ydCBhbmQgY29uc3VtZWQgYnkgdGhlIGF1ZGlvIHBhdGguCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9JRF9WT0lDRV9SRUNPUkRfUlgJMHg4MDAzCgovKiBQc2V1ZG9wb3J0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHZvaWNlIFR4IHBhdGguCiAqIEZvciByZWNvcmRpbmcsIHRoZSB2b2ljZSBUeCBwYXRoIHNhbXBsZXMgYXJlIHdyaXR0ZW4gdG8gdGhpcwogKiBwb3J0IGFuZCBjb25zdW1lZCBieSB0aGUgYXVkaW8gcGF0aC4KICovCgojZGVmaW5lIEFGRV9QT1JUX0lEX1ZPSUNFX1JFQ09SRF9UWAkweDgwMDQKLyogUHNldWRvcG9ydCB0aGF0IGNvcnJlc3BvbmRzIHRvIGluLWNhbGwgdm9pY2UgZGVsaXZlcnkgc2FtcGxlcy4KICogRHVyaW5nIGluLWNhbGwgYXVkaW8gZGVsaXZlcnksIHRoZSBhdWRpbyBwYXRoIGRlbGl2ZXJzIHNhbXBsZXMKICogdG8gdGhpcyBwb3J0IGZyb20gd2hlcmUgdGhlIHZvaWNlIHBhdGggZGVsaXZlcnMgdGhlbSBvbiB0aGUKICogUnggcGF0aC4KICovCiNkZWZpbmUgQUZFX1BPUlRfSURfVk9JQ0UyX1BMQVlCQUNLX1RYICAweDgwMDIKI2RlZmluZSBBRkVfUE9SVF9JRF9WT0lDRV9QTEFZQkFDS19UWCAgIDB4ODAwNQoKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDAwKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF8yIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMyBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF81IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNiBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgwMSkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfMiBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzMgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfNSBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzYgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgxMCkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfMiBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF8zIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfNSBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF82IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MTEpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzIgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfMyBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzUgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNiBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MjApCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzIgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzMgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzUgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzYgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDIxKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8yIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8zIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF81IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF82IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDMwKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF8yIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMyBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF81IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNiBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgzMSkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfMiBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzMgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfNSBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzYgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4NDApCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfMSBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzIgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwNCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWF8zIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfNCBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzUgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwQSkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWF82IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfNyBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDQxKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzEgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF8yIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFhfMyBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzQgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF81IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFhfNiBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzcgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5WQUxJRCAgICAgICAgICAgICAweEZGRkYKCiNkZWZpbmUgQUFDX0VOQ19NT0RFX0FBQ19MQyAweDAyCiNkZWZpbmUgQUFDX0VOQ19NT0RFX0FBQ19QIDB4MDUKI2RlZmluZSBBQUNfRU5DX01PREVfRUFBQ19QIDB4MUQKCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfQ01EX1NUQVJUIDB4MDAwMTAwY2YKc3RydWN0IGFmZV9wc2V1ZG9wb3J0X3N0YXJ0X2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2IHBvcnRfaWQ7CQkvKiBQc2V1ZG8gUG9ydCAxID0gMHg4MDAwICovCgkJCQkvKiBQc2V1ZG8gUG9ydCAyID0gMHg4MDAxICovCgkJCQkvKiBQc2V1ZG8gUG9ydCAzID0gMHg4MDAyICovCgl1MTYgdGltaW5nOwkJLyogRlRSVCA9IDAgLCBBVlRpbWVyID0gMSwgKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfQ01EX1NUT1AgMHgwMDAxMDBkMApzdHJ1Y3QgYWZlX3BzZXVkb3BvcnRfc3RvcF9jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiBwb3J0X2lkOwkJLyogUHNldWRvIFBvcnQgMSA9IDB4ODAwMCAqLwoJCQkJLyogUHNldWRvIFBvcnQgMiA9IDB4ODAwMSAqLwoJCQkJLyogUHNldWRvIFBvcnQgMyA9IDB4ODAwMiAqLwoJdTE2IHJlc2VydmVkOwp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQUZFX01PRFVMRV9TSURFVE9ORV9JSVJfRklMVEVSCTB4MDAwMTAyMDIKI2RlZmluZSBBRkVfUEFSQU1fSURfRU5BQkxFCTB4MDAwMTAyMDMKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0VOQUJMRQogKiBwYXJhbWV0ZXIsIHdoaWNoIGVuYWJsZXMgb3IKICogZGlzYWJsZXMgYW55IG1vZHVsZS4KICogVGhlIGZpeGVkIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgZm91ciBieXRlcy4KICovCgpzdHJ1Y3QgYWZlX21vZF9lbmFibGVfcGFyYW0gewoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlOwoJLyogRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBtb2R1bGUuICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgovKiBJRCBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FGRV9NT0RVTEVfU0lERVRPTkVfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9TSURFVE9ORV9JSVJfRklMVEVSX0NPTkZJRwkweDAwMDEwMjA0CiNkZWZpbmUgTUFYX1NJREVUT05FX0lJUl9EQVRBX1NJWkUgMjI0CiNkZWZpbmUgTUFYX05PX0lJUl9GSUxURVJfU1RBR0UgICAgMTAKCnN0cnVjdCBhZmVfc2lkZXRvbmVfaWlyX2ZpbHRlcl9jb25maWdfcGFyYW1zIHsKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9iaXF1YWRfc3RhZ2VzOwovKiBOdW1iZXIgb2Ygc3RhZ2VzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBNaW5pbXVtIG9mIDUgYW5kIG1heGltdW0gb2YgMTAKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcHJlZ2FpbjsKLyogUHJlZ2FpbiBmb3IgdGhlIGNvbXBlbnNhdGluZyBmaWx0ZXIgcmVzcG9uc2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFueSBudW1iZXIgaW4gUTEzIGZvcm1hdAogKi8KCXVpbnQ4X3QgICBpaXJfY29uZmlnW01BWF9TSURFVE9ORV9JSVJfREFUQV9TSVpFXTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX01PRFVMRV9MT09QQkFDSwkweDAwMDEwMjA1CiNkZWZpbmUgQUZFX1BBUkFNX0lEX0xPT1BCQUNLX0dBSU5fUEVSX1BBVEgJMHgwMDAxMDIwNgoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9MT09QQkFDS19HQUlOX1BFUl9QQVRIIHBhcmFtZXRlciwKICogd2hpY2ggZ2V0cy9zZXRzIGxvb3BiYWNrIGdhaW4gb2YgYSBwb3J0IHRvIGFuIFJ4IHBvcnQuCiAqIFRoZSBUeCBwb3J0IElEIG9mIHRoZSBsb29wYmFjayBpcyBwYXJ0IG9mIHRoZSBzZXRfcGFyYW0gY29tbWFuZC4KICovCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIgY29tbWFuZCdzCiAqIGNvbmZpZ3VyYXRpb24vY2FsaWJyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBBRkUgcG9ydC4KICovCnN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHsKCXUxNiBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuICovCgoJdTE2IHBheWxvYWRfc2l6ZTsKLyogQWN0dWFsIHNpemUgb2YgdGhlIHBheWxvYWQgaW4gYnl0ZXMuCiAqIFRoaXMgaXMgdXNlZCBmb3IgcGFyc2luZyB0aGUgcGFyYW1ldGVyIHBheWxvYWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiBwYXlsb2FkX2FkZHJlc3NfbHN3OwovKiBMU1cgb2YgNjQgYml0IFBheWxvYWQgYWRkcmVzcy4KICogQWRkcmVzcyBzaG91bGQgYmUgMzItYnl0ZSwKICogNGtieXRlIGFsaWduZWQgYW5kIG11c3QgYmUgY29udGlndW91cyBtZW1vcnkuCiAqLwoKdTMyIHBheWxvYWRfYWRkcmVzc19tc3c7Ci8qIE1TVyBvZiA2NCBiaXQgUGF5bG9hZCBhZGRyZXNzLgogKiBJbiBjYXNlIG9mIDMyLWJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsCiAqIHRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KICogSW4gY2FzZSBvZiAzNi1iaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLAogKiBiaXQtNCB0byBiaXQtMzEgbXVzdCBiZSBzZXQgdG8gemVyby4KICogQWRkcmVzcyBzaG91bGQgYmUgMzItYnl0ZSwgNGtieXRlIGFsaWduZWQKICogYW5kIG11c3QgYmUgY29udGlndW91cyBtZW1vcnkuCiAqLwoKdTMyIG1lbV9tYXBfaGFuZGxlOwovKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieQogKiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kcy4KICogU3VwcG9ydGVkIFZhbHVlczoKICogLSBOVUxMIC0tIE1lc3NhZ2UuIFRoZSBwYXJhbWV0ZXIgZGF0YSBpcyBpbi1iYW5kLgogKiAtIE5vbi1OVUxMIC0tIFRoZSBwYXJhbWV0ZXIgZGF0YSBpcyBPdXQtYmFuZC5Qb2ludGVyIHRvCiAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzCiAqIGluIHNoYXJlZCBtZW1vcnkgb2YgdGhlIHBheWxvYWQgZGF0YS4KICogQW4gb3B0aW9uYWwgZmllbGQgaXMgYXZhaWxhYmxlIGlmIHBhcmFtZXRlcgogKiBkYXRhIGlzIGluLWJhbmQ6CiAqIGFmZV9wYXJhbV9kYXRhX3YyIHBhcmFtX2RhdGFbLi4uXS4KICogRm9yIGRldGFpbGVkIHBheWxvYWQgY29udGVudCwgc2VlIHRoZQogKiBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHN0cnVjdHVyZS4KICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIJMHgwMDAxMDBFRgoKc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgewoJdTMyIG1vZHVsZV9pZDsKLyogSUQgb2YgdGhlIG1vZHVsZSB0byBiZSBjb25maWd1cmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBWYWxpZCBtb2R1bGUgSUQKICovCgp1MzIgcGFyYW1faWQ7Ci8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMKICogZm9yIHRoZSBtb2R1bGUgSUQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFZhbGlkIHBhcmFtZXRlciBJRAogKi8KCnUxNiBwYXJhbV9zaXplOwovKiBBY3R1YWwgc2l6ZSBvZiB0aGUgZGF0YSBmb3IgdGhlCiAqIG1vZHVsZV9pZC9wYXJhbV9pZCBwYWlyLiBUaGUgc2l6ZSBpcyBhCiAqIG11bHRpcGxlIG9mIGZvdXIgYnl0ZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUxNiByZXNlcnZlZDsKLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfbG9vcGJhY2tfZ2Fpbl9wZXJfcGF0aF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJdTE2ICAgICAgICAgICAgICAgICAgcnhfcG9ydF9pZDsKLyogUnggcG9ydCBvZiB0aGUgbG9vcGJhY2suICovCgp1MTYgICAgICAgICAgICAgICAgICBnYWluOwovKiBMb29wYmFjayBnYWluIHBlciBwYXRoIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkgbnVtYmVyIGluIFExMyBmb3JtYXQKICovCn0gX19wYWNrZWQ7CgovKiBQYXJhbWV0ZXIgSUQgdXNlZCB0byBjb25maWd1cmUgYW5kIGVuYWJsZS9kaXNhYmxlIHRoZQogKiBsb29wYmFjayBwYXRoLiBUaGUgZGlmZmVyZW5jZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGV4aXN0aW5nCiAqIEFQSSwgQUZFX1BPUlRfQ01EX0xPT1BCQUNLLCBpcyB0aGF0IGl0IGFsbG93cyBSeCBwb3J0IHRvIGJlCiAqIGNvbmZpZ3VyZWQgYXMgc291cmNlIHBvcnQgaW4gbG9vcGJhY2sgcGF0aC4gUG9ydC1pZCBpbgogKiBBRkVfUE9SVF9DTURfU0VUX1BBUkFNIGNtZCBpcyB0aGUgc291cmNlIHBvcnQgd2hpY2ggY2FuIGJlCiAqIFR4IG9yIFJ4IHBvcnQuIEluIGFkZGl0aW9uLCB3ZSBjYW4gY29uZmlndXJlIHRoZSB0eXBlIG9mCiAqIHJvdXRpbmcgbW9kZSB0byBoYW5kbGUgZGlmZmVyZW50IHVzZSBjYXNlcy4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0xPT1BCQUNLX0NPTkZJRwkweDAwMDEwMjBCCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0xPT1BCQUNLX0NPTkZJRwkweDEKCmVudW0gYWZlX2xvb3BiYWNrX3JvdXRpbmdfbW9kZSB7CglMQl9NT0RFX0RFRkFVTFQgPSAxLAoJLyogUmVndWxhciBsb29wYmFjayBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiBwb3J0ICovCglMQl9NT0RFX1NJREVUT05FLAoJLyogU2lkZXRvbmUgZmVlZCBmcm9tIFR4IHNvdXJjZSB0byBSeCBkZXN0aW5hdGlvbiBwb3J0ICovCglMQl9NT0RFX0VDX1JFRl9WT0lDRV9BVURJTywKCS8qIEVjaG8gY2FuY2VsbGVyIHJlZmVyZW5jZSwgdm9pY2UgKyBhdWRpbyArIERUTUYgKi8KCUxCX01PREVfRUNfUkVGX1ZPSUNFCgkvKiBFY2hvIGNhbmNlbGxlciByZWZlcmVuY2UsIHZvaWNlIGFsb25lICovCn0gX19wYWNrZWQ7CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9MT09QQkFDS19DT05GSUcgLAogKiB3aGljaCBlbmFibGVzL2Rpc2FibGVzIG9uZSBBRkUgbG9vcGJhY2suCiAqLwpzdHJ1Y3QgYWZlX2xvb3BiYWNrX2NmZ192MSB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJdTMyCQlsb29wYmFja19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgUk1DIG1vZHVsZQogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9MT09QQkFDS19DT05GSUcKICovCgl1MTYgICAgICAgICAgICAgICAgICBkc3RfcG9ydF9pZDsKCS8qIERlc3RpbmF0aW9uIFBvcnQgSWQuICovCgl1MTYgICAgICAgICAgICAgICAgICByb3V0aW5nX21vZGU7Ci8qIFNwZWNpZmllcyBkYXRhIHBhdGggdHlwZSBmcm9tIHNyYyB0byBkZXN0IHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqICNMQl9NT0RFX0RFRkFVTFQKICogI0xCX01PREVfU0lERVRPTkUKICogI0xCX01PREVfRUNfUkVGX1ZPSUNFX0FVRElPCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRV9BCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmFibGU7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSAoMSkgb3IKICogZGlzYWJsZSAoMCkgYW4gQUZFIGxvb3BiYWNrLgogKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgMzItYml0IGFsaWdubWVudC4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byAwLgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xvb3BiYWNrX3NpZGV0b25lX2dhaW4gewoJdTE2ICAgICAgICAgICAgICAgICAgcnhfcG9ydF9pZDsKCXUxNiAgICAgICAgICAgICAgICAgIGdhaW47Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgbG9vcGJhY2tfY2ZnX2RhdGEgewoJdTMyICAgICAgICAgICAgICAgICAgbG9vcGJhY2tfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIFJNQyBtb2R1bGUKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fTE9PUEJBQ0tfQ09ORklHCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgZHN0X3BvcnRfaWQ7CgkvKiBEZXN0aW5hdGlvbiBQb3J0IElkLiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcm91dGluZ19tb2RlOwovKiBTcGVjaWZpZXMgZGF0YSBwYXRoIHR5cGUgZnJvbSBzcmMgdG8gZGVzdCBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAjTEJfTU9ERV9ERUZBVUxUCiAqICNMQl9NT0RFX1NJREVUT05FCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRV9BVURJTwogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0VfQQogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0UKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlOwovKiBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgKDEpIG9yCiAqIGRpc2FibGUgKDApIGFuIEFGRSBsb29wYmFjay4KICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIDMyLWJpdCBhbGlnbm1lbnQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N0X2xvb3BiYWNrX2NmZ192MSB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgICAgICAgICAgICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgIGdhaW5fcGRhdGE7CglzdHJ1Y3QgYWZlX2xvb3BiYWNrX3NpZGV0b25lX2dhaW4gZ2Fpbl9kYXRhOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgIGNmZ19wZGF0YTsKCXN0cnVjdCBsb29wYmFja19jZmdfZGF0YSAgICAgICAgICBjZmdfZGF0YTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfbG9vcGJhY2tfaWlyX2NmZ192MiB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgICAgICAgIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgICAgICAgIHN0X2lpcl9lbmFibGVfcGRhdGE7CglzdHJ1Y3QgYWZlX21vZF9lbmFibGVfcGFyYW0gICAgICAgICAgICAgc3RfaWlyX21vZGVfZW5hYmxlX2RhdGE7CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICAgICAgICAgc3RfaWlyX2ZpbHRlcl9jb25maWdfcGRhdGE7CglzdHJ1Y3QgYWZlX3NpZGV0b25lX2lpcl9maWx0ZXJfY29uZmlnX3BhcmFtcyBzdF9paXJfZmlsdGVyX2NvbmZpZ19kYXRhOwp9IF9fcGFja2VkOwojZGVmaW5lIEFGRV9NT0RVTEVfU1BFQUtFUl9QUk9URUNUSU9OCTB4MDAwMTAyMDkKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BLUl9QUk9UX0NPTkZJRwkweDAwMDEwMjBhCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NQS1JfUFJPVF9DT05GSUcJMHgxCiNkZWZpbmUgQUZFX1NQS1JfUFJPVF9FWENVUlNJT05GX0xFTgk1MTIKc3RydWN0IGFmZV9zcGtyX3Byb3RfY2ZnX3BhcmFtX3YxIHsKCXUzMiAgICAgICBzcGtyX3Byb3RfbWlub3JfdmVyc2lvbjsKLyoKICogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUKICogc3BlYWtlciBwcm90ZWN0aW9uIG1vZHVsZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9TUEtSX1BST1RfQ09ORklHCiAqLwoKaW50MTZfdCAgICAgICAgd2luX3NpemU7Ci8qIEFuYWx5c2lzIGFuZCBzeW50aGVzaXMgd2luZG93IHNpemUgKG5XaW5TaXplKS4KICogU3VwcG9ydGVkIHZhbHVlczogMTAyNCwgNTEyLCAyNTYgc2FtcGxlcwogKi8KCmludDE2X3QgICAgICAgIG1hcmdpbjsKLyogQWxsb3dhYmxlIG1hcmdpbiBmb3IgZXhjdXJzaW9uIHByZWRpY3Rpb24sCiAqIGluIEwxNlExNSBmb3JtYXQuIFRoaXMgaXMgYQogKiBjb250cm9sIHBhcmFtZXRlciB0byBhbGxvdwogKiBmb3Igb3ZlcmVzdGltYXRpb24gb2YgcGVhayBleGN1cnNpb24uCiAqLwoKaW50MTZfdCAgICAgICAgc3Brcl9leGNfbGltaXQ7Ci8qIFNwZWFrZXIgZXhjdXJzaW9uIGxpbWl0LCBpbiBMMTZRMTUgZm9ybWF0LiovCgppbnQxNl90ICAgICAgICBzcGtyX3Jlc29uYW5jZV9mcmVxOwovKiBSZXNvbmFuY2UgZnJlcXVlbmN5IG9mIHRoZSBzcGVha2VyOyB1c2VkCiAqIHRvIGRlZmluZSBhIGZyZXF1ZW5jeSByYW5nZQogKiBmb3Igc2lnbmFsIG1vZGlmaWNhdGlvbi4KICoKICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAyMDAwIEh6CiAqLwoKaW50MTZfdCAgICAgICAgbGltaHJlc2g7Ci8qIFRocmVzaG9sZCBvZiB0aGUgaGFyZCBsaW1pdGVyOyB1c2VkIHRvCiAqIHByZXZlbnQgb3ZlcnNob290aW5nIGJleW9uZCBhCiAqIHNpZ25hbCBsZXZlbCB0aGF0IHdhcyBzZXQgYnkgdGhlIGxpbWl0ZXIKICogcHJpb3IgdG8gc3BlYWtlciBwcm90ZWN0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDMyNzY3CiAqLwoKaW50MTZfdCAgICAgICAgaHBmX2N1dF9vZmZfZnJlcTsKLyogSGlnaCBwYXNzIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMDAsIDIwMCwgMzAwIEh6CiAqLwoKaW50MTZfdCAgICAgICAgaHBmX2VuYWJsZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGhpZ2ggcGFzcyBmaWx0ZXIKICogaXMgZW5hYmxlZCAoMCkgb3IgZGlzYWJsZWQgKDEpLgogKi8KCmludDE2X3QgICAgICAgIHJlc2VydmVkOwovKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgppbnQzMl90ICAgICAgICBhbXBfZ2FpbjsKLyogQW1wbGlmaWVyIGdhaW4gaW4gTDMyUTE1IGZvcm1hdC4KICogVGhpcyBpcyB0aGUgUk1TIHZvbHRhZ2UgYXQgdGhlCiAqIGxvdWRzcGVha2VyIHdoZW4gYSAwZEJGUyB0b25lCiAqIGlzIHBsYXllZCBpbiB0aGUgZGlnaXRhbCBkb21haW4uCiAqLwoKaW50MTZfdCAgICAgICAgZXhjdXJzaW9uZltBRkVfU1BLUl9QUk9UX0VYQ1VSU0lPTkZfTEVOXTsKLyogQXJyYXkgb2YgdGhlIGV4Y3Vyc2lvbiB0cmFuc2ZlciBmdW5jdGlvbi4KICogVGhlIHBlYWsgZXhjdXJzaW9uIG9mIHRoZQogKiBsb3Vkc3BlYWtlciBkaWFwaHJhZ20gaXMKICogbWVhc3VyZWQgaW4gbWlsbGltZXRlcnMgZm9yIDEgVnJtcyBTaW5lCiAqIHRvbmUgYXQgYWxsIEZGVCBiaW4gZnJlcXVlbmNpZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFExNSBmb3JtYXQKICovCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfUkVHSVNURVJfUlRfUE9SVF9EUklWRVIJMHgwMDAxMDBFMAoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfU0VSVklDRV9DTURfUkVHSVNURVJfUlRfUE9SVF9EUklWRVIKICogY29tbWFuZCwgd2hpY2ggcmVnaXN0ZXJzIGEgcmVhbC10aW1lIHBvcnQgZHJpdmVyCiAqIHdpdGggdGhlIEFGRSBzZXJ2aWNlLgogKi8Kc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF9yZWdpc3Rlcl9ydF9wb3J0X2RyaXZlciB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IElEIHdpdGggd2hpY2ggdGhlIHJlYWwtdGltZSBkcml2ZXIgZXhjaGFuZ2VzIGRhdGEKICogKHJlZ2lzdGVycyBmb3IgZXZlbnRzKS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfVU5SRUdJU1RFUl9SVF9QT1JUX0RSSVZFUgkweDAwMDEwMEUxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9TRVJWSUNFX0NNRF9VTlJFR0lTVEVSX1JUX1BPUlRfRFJJVkVSCiAqIGNvbW1hbmQsIHdoaWNoIHVucmVnaXN0ZXJzIGEgcmVhbC10aW1lIHBvcnQgZHJpdmVyIGZyb20KICogdGhlIEFGRSBzZXJ2aWNlLgogKi8Kc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF91bnJlZ2lzdGVyX3J0X3BvcnRfZHJpdmVyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFBvcnQgSUQgZnJvbSB3aGljaCB0aGUgcmVhbC10aW1lCiAqIGRyaXZlciB1bnJlZ2lzdGVycyBmb3IgZXZlbnRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TVEFSVCB0bwogKiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9FTkQKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uCSovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwkweDAwMDEwMTA1CiNkZWZpbmUgQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfU1RBUlQJMAojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUT1AJMQojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX0xPV19XQVRFUl9NQVJLCTIKI2RlZmluZSBBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9ISUdIX1dBVEVSX01BUksJMwojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX0lOVkFMSUQJMHhGRkZGCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwogKiBtZXNzYWdlLCB3aGljaCBzZW5kcyBhbiBldmVudCBmcm9tIHRoZSBBRkUgc2VydmljZQogKiB0byBhIHJlZ2lzdGVyZWQgY2xpZW50LgogKi8Kc3RydWN0IGFmZV9ldmVudF9ydF9wcm94eV9wb3J0X3N0YXR1cyB7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IElEIHRvIHdoaWNoIHRoZSBldmVudCBpcyBzZW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TVEFSVCB0bwogKiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9FTkQKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZXZlbnR5cGU7Ci8qIFR5cGUgb2YgZXZlbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUQVJUCiAqIC0gI0FGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUT1AKICogLSAjQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfTE9XX1dBVEVSX01BUksKICogLSAjQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfSElHSF9XQVRFUl9NQVJLCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9EQVRBX0NNRF9SVF9QUk9YWV9QT1JUX1dSSVRFX1YyIDB4MDAwMTAwRUQKCnN0cnVjdCBhZmVfcG9ydF9kYXRhX2NtZF9ydF9wcm94eV9wb3J0X3dyaXRlX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFR4IChtaWMpIHByb3h5IHBvcnQgSUQgd2l0aCB3aGljaCB0aGUgcmVhbC10aW1lCiAqIGRyaXZlciBleGNoYW5nZXMgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9hZGRyZXNzX2xzdzsKLyogTFNXIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZQogKiBkYXRhIGZyb20gdGhlIHJlYWwtdGltZSBzb3VyY2UKICogZGV2aWNlIG9uIGEgY2xpZW50LgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19tc3c7Ci8qIE1TVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUKICogZGF0YSBmcm9tIHRoZSByZWFsLXRpbWUgc291cmNlCiAqIGRldmljZSBvbiBhIGNsaWVudC4KICovCgoJdTMyCQkJCQltZW1fbWFwX2hhbmRsZTsKLyogQSBtZW1vcnkgbWFwIGhhbmRsZSBlbmNhcHN1bGF0aW5nIHNoYXJlZCBtZW1vcnkKICogYXR0cmlidXRlcyBpcyByZXR1cm5lZCBpZgogKiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwogKiBjb21tYW5kIGlzIHN1Y2Nlc3NmdWwuCiAqIFN1cHBvcnRlZCBWYWx1ZXM6CiAqIC0gQW55IDMyIGJpdCB2YWx1ZQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhdmFpbGFibGVfYnl0ZXM7Ci8qIE51bWJlciBvZiB2YWxpZCBieXRlcyBhdmFpbGFibGUKICogaW4gdGhlIGJ1ZmZlciAoaW5jbHVkaW5nIGFsbAogKiBjaGFubmVsczogbnVtYmVyIG9mIGJ5dGVzIHBlcgogKiBjaGFubmVsID0gYXZhaWxhYmxlQnl0ZXN1bUNoYW5uZWxzKS4KICogU3VwcG9ydGVkIHZhbHVlczogPiAwCiAqCiAqIFRoaXMgZmllbGQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZnJhbWUKICogc2l6ZSBzcGVjaWZpZWQgaW4gdGhlICNBRkVfUE9SVF9BVURJT19JRl9DT05GSUcKICogY29tbWFuZCB0aGF0IHdhcyBzZW50IHRvIGNvbmZpZ3VyZSB0aGlzCiAqIHBvcnQuCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9EQVRBX0NNRF9SVF9QUk9YWV9QT1JUX1JFQURfVjIJMHgwMDAxMDBFRQoKLyogIFBheWxvYWQgb2YgdGhlCiAqICNBRkVfUE9SVF9EQVRBX0NNRF9SVF9QUk9YWV9QT1JUX1JFQURfVjIgY29tbWFuZCwgd2hpY2gKICogZGVsaXZlcnMgYW4gZW1wdHkgYnVmZmVyIHRvIHRoZSBBRkUgc2VydmljZS4gT24KICogYWNrbm93bGVkZ21lbnQsIGRhdGEgaXMgZmlsbGVkIGluIHRoZSBidWZmZXIuCiAqLwpzdHJ1Y3QgYWZlX3BvcnRfZGF0YV9jbWRfcnRfcHJveHlfcG9ydF9yZWFkX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFJ4IHByb3h5IHBvcnQgSUQgd2l0aCB3aGljaCB0aGUgcmVhbC10aW1lCiAqIGRyaXZlciBleGNoYW5nZXMgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqIChUaGlzIG11c3QgYmUgYW4gUnggKHNwZWFrZXIpIHBvcnQuKQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19sc3c7Ci8qIExTVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSBzZW50IGZyb20gdGhlIEFGRQogKiBzZXJ2aWNlIHRvIGEgcmVhbC10aW1lIHNpbmsgZGV2aWNlIG9uIHRoZSBjbGllbnQuCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19tc3c7Ci8qIE1TVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSBzZW50IGZyb20gdGhlIEFGRQogKiBzZXJ2aWNlIHRvIGEgcmVhbC10aW1lIHNpbmsgZGV2aWNlIG9uIHRoZSBjbGllbnQuCiAqLwoKCQl1MzIJCQkJbWVtX21hcF9oYW5kbGU7Ci8qIEEgbWVtb3J5IG1hcCBoYW5kbGUgZW5jYXBzdWxhdGluZyBzaGFyZWQgbWVtb3J5IGF0dHJpYnV0ZXMgaXMKICogcmV0dXJuZWQgaWYgQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZCBpcwogKiBzdWNjZXNzZnVsLgogKiBTdXBwb3J0ZWQgVmFsdWVzOgogKiAtIEFueSAzMiBiaXQgdmFsdWUKICovCgoJdTMyICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX2J5dGVzOwovKiBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIgKGluY2x1ZGluZyBhbGwKICogY2hhbm5lbHMpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICogVGhpcyBmaWVsZCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBmcmFtZSBzaXplIHNwZWNpZmllZCBpbiB0aGUKICogI0FGRV9QT1JUX0FVRElPX0lGX0NPTkZJRyBjb21tYW5kIHRoYXQgd2FzIHNlbnQgdG8gY29uZmlndXJlCiAqIHRoaXMgcG9ydC4KICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIG1vZHVsZSBJRCBpcyByZWxhdGVkIHRvIGRldmljZSBjb25maWd1cmluZyBsaWtlIEkyUyxQQ00sCiAqIEhETUksIFNMSU1CdXMgZXRjLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBmb2xsb3dpbmcgcGFyYW1ldGVyIGlkcy4KICogLSAjQUZFX1BBUkFNX0lEX0kyU19DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX1BDTV9DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX0RJR0lfTUlDX0NPTkZJRwogKiAtICNBRkVfUEFSQU1fSURfSERNSV9DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX0lOVEVSTkFMX0JUX0ZNX0NPTkZJRwogKiAtICNBRkVfUEFSQU1fSURfU0xJTUJVU19DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX1JUX1BST1hZX0NPTkZJRwogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFICAgIDB4MDAwMTAyMEMKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV84SyAgICAgICAgICAgODAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SyAgICAgICAgICAxNjAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SyAgICAgICAgICA0ODAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SyAgICAgICAgICA5NjAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE3NlA0SyAgICAgICAxNzY0MDAKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV8xOTJLICAgICAgICAgMTkyMDAwCiNkZWZpbmUgQUZFX1BPUlRfU0FNUExFX1JBVEVfMzUyUDhLICAgICAgIDM1MjgwMAojZGVmaW5lIEFGRV9MSU5FQVJfUENNX0RBVEEJCQkJMHgwCiNkZWZpbmUgQUZFX05PTl9MSU5FQVJfREFUQQkJCQkweDEKI2RlZmluZSBBRkVfTElORUFSX1BDTV9EQVRBX1BBQ0tFRF82MDk1OCAweDIKI2RlZmluZSBBRkVfTk9OX0xJTkVBUl9EQVRBX1BBQ0tFRF82MDk1OCAweDMKI2RlZmluZSBBRkVfR0VORVJJQ19DT01QUkVTU0VEICAgICAgICAgICAweDgKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgSTJTIGludGVyZmFjZSAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9JMlNfQ09ORklHCTB4MDAwMTAyMEQKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fSTJTX0NPTkZJRwkweDEKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIEkyUyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8KICogc2VyaWFsIGRhdGEgd2lyZSBudW1iZXIgMS0zIChTRDMpLgogKi8KI2RlZmluZSBBRkVfUE9SVF9JMlNfU0QwICAgICAgICAgICAgICAgICAgICAgMHgxCiNkZWZpbmUgQUZFX1BPUlRfSTJTX1NEMSAgICAgICAgICAgICAgICAgICAgIDB4MgojZGVmaW5lIEFGRV9QT1JUX0kyU19TRDIgICAgICAgICAgICAgICAgICAgICAweDMKI2RlZmluZSBBRkVfUE9SVF9JMlNfU0QzICAgICAgICAgICAgICAgICAgICAgMHg0CiNkZWZpbmUgQUZFX1BPUlRfSTJTX1FVQUQwMSAgICAgICAgICAgICAgICAgIDB4NQojZGVmaW5lIEFGRV9QT1JUX0kyU19RVUFEMjMgICAgICAgICAgICAgICAgICAweDYKI2RlZmluZSBBRkVfUE9SVF9JMlNfNkNIUyAgICAgICAgICAgICAgICAgICAgMHg3CiNkZWZpbmUgQUZFX1BPUlRfSTJTXzhDSFMgICAgICAgICAgICAgICAgICAgIDB4OAojZGVmaW5lIEFGRV9QT1JUX0kyU19NT05PICAgICAgICAgICAgICAgICAgICAweDAKI2RlZmluZSBBRkVfUE9SVF9JMlNfU1RFUkVPICAgICAgICAgICAgICAgICAgMHgxCiNkZWZpbmUgQUZFX1BPUlRfQ09ORklHX0kyU19XU19TUkNfRVhURVJOQUwgIDB4MAojZGVmaW5lIEFGRV9QT1JUX0NPTkZJR19JMlNfV1NfU1JDX0lOVEVSTkFMICAweDEKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0kyU19DT05GSUcKICogY29tbWFuZCdzIChJMlMgY29uZmlndXJhdGlvbgogKiBwYXJhbWV0ZXIpLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9pMnNfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIGkyc19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgSTJTCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX0kyU19DT05GSUcKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbW9kZTsKLyogSTJTIGxpbmVzIGFuZCBtdWx0aWNoYW5uZWwgb3BlcmF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9JMlNfU0QwCiAqIC0gI0FGRV9QT1JUX0kyU19TRDEKICogLSAjQUZFX1BPUlRfSTJTX1NEMgogKiAtICNBRkVfUE9SVF9JMlNfU0QzCiAqIC0gI0FGRV9QT1JUX0kyU19RVUFEMDEKICogLSAjQUZFX1BPUlRfSTJTX1FVQUQyMwogKiAtICNBRkVfUE9SVF9JMlNfNkNIUwogKiAtICNBRkVfUE9SVF9JMlNfOENIUwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBtb25vX3N0ZXJlbzsKLyogU3BlY2lmaWVzIG1vbm8gb3Igc3RlcmVvLiBUaGlzIGFwcGxpZXMgb25seSB3aGVuCiAqIGEgc2luZ2xlIEkyUyBsaW5lIGlzIHVzZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX0kyU19NT05PCiAqIC0gI0FGRV9QT1JUX0kyU19TVEVSRU8KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgd3Nfc3JjOwovKiBXb3JkIHNlbGVjdCBzb3VyY2U6IGludGVybmFsIG9yIGV4dGVybmFsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9DT05GSUdfSTJTX1dTX1NSQ19FWFRFUk5BTAogKiAtICNBRkVfUE9SVF9DT05GSUdfSTJTX1dTX1NSQ19JTlRFUk5BTAogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySwogKi8KCgl1MTYJCQkJCWRhdGFfZm9ybWF0OwovKiBkYXRhIGZvcm1hdAogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNMSU5FQVJfUENNX0RBVEEKICogLSAjTk9OX0xJTkVBUl9EQVRBCiAqIC0gI0xJTkVBUl9QQ01fREFUQV9QQUNLRURfSU5fNjA5NTgKICogLSAjTk9OX0xJTkVBUl9EQVRBX1BBQ0tFRF9JTl82MDk1OAogKi8KCQl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KfSBfX3BhY2tlZDsKCi8qCiAqIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgUENNIGludGVyZmFjZQogKi8KCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NQRElGX0NPTkZJRyAweDEKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fU1BESUZfQ0hfU1RBVFVTX0NPTkZJRyAweDEKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fU1BESUZfQ0xLX0NPTkZJRyAweDEKI2RlZmluZSBBRkVfQ0hfU1RBVFVTX0EgMQojZGVmaW5lIEFGRV9DSF9TVEFUVVNfQiAyCgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUERJRl9DT05GSUcgMHgwMDAxMDI0NAojZGVmaW5lIEFGRV9QQVJBTV9JRF9DSF9TVEFUVVNfQ09ORklHIDB4MDAwMTAyNDUKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BESUZfQ0xLX0NPTkZJRyAweDAwMDEwMjQ2CgojZGVmaW5lIEFGRV9QT1JUX0NMS19ST09UX0xQQVBMTCAweDMKI2RlZmluZSBBRkVfUE9SVF9DTEtfUk9PVF9MUEFRNlBMTCAgIDB4NAoKc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBTUERJRgogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9TUERJRl9DT05GSUcKICovCgl1MzIJc3BkaWZfY2ZnX21pbm9yX3ZlcnNpb247CgovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yMl8wNUsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ0XzFLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTc2XzRLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCgl1MzIJc2FtcGxlX3JhdGU7CgovKiBkYXRhIGZvcm1hdAogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfTElORUFSX1BDTV9EQVRBCiAqIC0gI0FGRV9OT05fTElORUFSX0RBVEEKICovCgl1MTYJZGF0YV9mb3JtYXQ7Ci8qIE51bWJlciBvZiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgdGhlIHBvcnQKICogLSBQQ00gLSAxLCBDb21wcmVzc2VkIENhc2UgLSAyCiAqLwoJdTE2CW51bV9jaGFubmVsczsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCXUxNgliaXRfd2lkdGg7Ci8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCXUxNglyZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2hfc3RhdHVzX2NmZyB7Cgl1MzIgY2hfc3RhdHVzX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIGNoYW5uZWwKICogc3RhdHVzIGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgc3VwcG9ydGVkIHZlcnNpb24gaXMgMQogKi8KCgl1MzIgc3RhdHVzX3R5cGU7Ci8qIEluZGljYXRlIGlmIHRoZSBjaGFubmVsIHN0YXR1cyBpcyBmb3IgY2hhbm5lbCBBIG9yIEIKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX0NIX1NUQVRVU19BCiAqIC0gI0FGRV9DSF9TVEFUVVNfQgogKi8KCgl1OCBzdGF0dXNfYml0c1syNF07Ci8qIENoYW5uZWwgc3RhdHVzIC0gMTkyIGJpdHMgZm9yIGNoYW5uZWwKICogQnl0ZSBvcmRlcmluZyBhcyBkZWZpbmVkIGJ5IElFQzYwOTU4LTMKICovCgoJdTggc3RhdHVzX21hc2tbMjRdOwovKiBDaGFubmVsIHN0YXR1cyB3aXRoIG1hc2sgYml0cyAxIHdpbGwgYmUgYXBwbGllZC4KICogQnl0ZSBvcmRlcmluZyBhcyBkZWZpbmVkIGJ5IElFQzYwOTU4LTMKICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2Nsa19jZmcgewoJdTMyIGNsa19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiBTUERJRgogKiBpbnRlcmZhY2UgY2xvY2sgY29uZmlndXJhdGlvbi4gQ3VycmVudCBzdXBwb3J0ZWQgdmVyc2lvbgogKiBpcyAxCiAqLwoKCXUzMiBjbGtfdmFsdWU7Ci8qIFNwZWNpZmllcyB0aGUgY2xvY2sgZnJlcXVlbmN5IGluIEh6IHRvIHNldAogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAwIC0gRGlzYWJsZSB0aGUgY2xvY2sKICogMiAoYnlwaGFzZSkgKiAzMiAoNjA5NTggc3ViZnJhbWUgc2l6ZSkgKiBzYW1wbGluZyByYXRlICogMgogKiAoY2hhbm5lbHMgQSBhbmQgQikKICovCgoJdTMyIGNsa19yb290OwovKiBTcGVjaWZpZXMgU1BESUYgcm9vdCBjbGsgc291cmNlCiAqIFN1cHBvcnRlZCBWYWx1ZXM6CiAqIC0gI0FGRV9QT1JUX0NMS19ST09UX0xQQVBMTAogKiAtICNBRkVfUE9SVF9DTEtfUk9PVF9MUEFRNlBMTAogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BkaWZfY2xrX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgICAgICAgICAgICBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiAgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICAgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2Nsa19jZmcgY2xrX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BkaWZfY2hzdGF0dXNfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICAgICAgICAgICAgIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyICBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgICBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2hfc3RhdHVzX2NmZyBjaF9zdGF0dXM7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwZGlmX3BvcnRfY29uZmlnIHsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2ZnICAgICAgICAgICAgY2ZnOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jaF9zdGF0dXNfY2ZnICBjaF9zdGF0dXM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9QQ01fQ09ORklHICAgICAgICAweDAwMDEwMjBFCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1BDTV9DT05GSUcJMHgxCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgYXV4aWxpYXJ5IFBDTSBzeW5jaHJvbml6YXRpb24gc2lnbmFsCiAqIHByb3ZpZGVkIGJ5IGFuIGV4dGVybmFsIHNvdXJjZS4KICovCgojZGVmaW5lIEFGRV9QT1JUX1BDTV9TWU5DX1NSQ19FWFRFUk5BTCAweDAKLyoJRW51bWVyYXRpb24gZm9yIHRoZSBhdXhpbGlhcnkgUENNIHN5bmNocm9uaXphdGlvbiBzaWduYWwKICogcHJvdmlkZWQgYnkgYW4gaW50ZXJuYWwgc291cmNlLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fU1lOQ19TUkNfSU5URVJOQUwgIDB4MQovKglFbnVtZXJhdGlvbiBmb3IgdGhlIFBDTSBjb25maWd1cmF0aW9uIGF1eF9tb2RlIHBhcmFtZXRlciwKICogd2hpY2ggY29uZmlndXJlcyB0aGUgYXV4aWxpYXJ5IFBDTSBpbnRlcmZhY2UgdG8gdXNlCiAqIHNob3J0IHN5bmNocm9uaXphdGlvbi4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0FVWF9NT0RFX1BDTSAgMHgwCi8qCiAqIEVudW1lcmF0aW9uIGZvciB0aGUgUENNIGNvbmZpZ3VyYXRpb24gYXV4X21vZGUgcGFyYW1ldGVyLAogKiB3aGljaCBjb25maWd1cmVzIHRoZSBhdXhpbGlhcnkgUENNIGludGVyZmFjZSB0byB1c2UgbG9uZwogKiBzeW5jaHJvbml6YXRpb24uCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9BVVhfTU9ERV9BVVggICAgMHgxCi8qCiAqIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byA4LgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfOCAgMHgwCi8qCiAqIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byAxNi4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzE2ICAgMHgxCgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gMzIuKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMzIgMHgyCgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gNjQuKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfNjQgICAweDMKCi8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byAxMjguKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMTI4IDB4NAoKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIGZyYW1lIHRvIDI1Ni4qLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8yNTYgMHg1CgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24KICogcXVhbnR5cGUgcGFyYW1ldGVyIHRvIEEtbGF3IHdpdGggbm8gcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0FMQVdfTk9QQURESU5HIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIHF1YW50eXBlCiAqIHBhcmFtZXRlciB0byBtdS1sYXcgd2l0aCBubyBwYWRkaW5nLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fTVVMQVdfTk9QQURESU5HIDB4MQovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gcXVhbnR5cGUKICogcGFyYW1ldGVyIHRvIGxpbmVhciB3aXRoIG5vIHBhZGRpbmcuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9MSU5FQVJfTk9QQURESU5HIDB4MgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gcXVhbnR5cGUKICogcGFyYW1ldGVyIHRvIEEtbGF3IHdpdGggcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0FMQVdfUEFERElORyAgMHgzCi8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBxdWFudHlwZQogKiBwYXJhbWV0ZXIgdG8gbXUtbGF3IHdpdGggcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX01VTEFXX1BBRERJTkcgMHg0Ci8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBxdWFudHlwZQogKiBwYXJhbWV0ZXIgdG8gbGluZWFyIHdpdGggcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0xJTkVBUl9QQURESU5HIDB4NQovKglFbnVtZXJhdGlvbiBmb3IgZGlzYWJsaW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbgogKiBjdHJsX2RhdGFfb3V0X2VuYWJsZSBwYXJhbWV0ZXIuCiAqIFRoZSBQQ00gYmxvY2sgaXMgdGhlIG9ubHkgbWFzdGVyLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQ1RSTF9EQVRBX09FX0RJU0FCTEUgMHgwCi8qCiAqIEVudW1lcmF0aW9uIGZvciBlbmFibGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24KICogY3RybF9kYXRhX291dF9lbmFibGUgcGFyYW1ldGVyLiBUaGUgUENNIGJsb2NrIHNoYXJlcwogKiB0aGUgc2lnbmFsIHdpdGggb3RoZXIgbWFzdGVycy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0NUUkxfREFUQV9PRV9FTkFCTEUgIDB4MQoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfUENNX0NPTkZJRyBjb21tYW5kJ3MKICogKFBDTSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcikuCiAqLwoKc3RydWN0IGFmZV9wYXJhbV9pZF9wY21fY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIHBjbV9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQVVYIFBDTQogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9QQ01fQ09ORklHCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGF1eF9tb2RlOwovKiBQQ00gc3luY2hyb25pemF0aW9uIHNldHRpbmcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1BDTV9BVVhfTU9ERV9QQ00KICogLSAjQUZFX1BPUlRfUENNX0FVWF9NT0RFX0FVWAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBzeW5jX3NyYzsKLyogU3luY2hyb25pemF0aW9uIHNvdXJjZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfUENNX1NZTkNfU1JDX0VYVEVSTkFMCiAqIC0gI0FGRV9QT1JUX1BDTV9TWU5DX1NSQ19JTlRFUk5BTAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBmcmFtZV9zZXR0aW5nOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgZnJhbWUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV84CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8xNgogKiAtICNBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMzIKICogLSAjQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzY0CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8xMjgKICogLSAjQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzI1NgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBxdWFudHlwZTsKLyogUENNIHF1YW50aXphdGlvbiB0eXBlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9QQ01fQUxBV19OT1BBRERJTkcKICogLSAjQUZFX1BPUlRfUENNX01VTEFXX05PUEFERElORwogKiAtICNBRkVfUE9SVF9QQ01fTElORUFSX05PUEFERElORwogKiAtICNBRkVfUE9SVF9QQ01fQUxBV19QQURESU5HCiAqIC0gI0FGRV9QT1JUX1BDTV9NVUxBV19QQURESU5HCiAqIC0gI0FGRV9QT1JUX1BDTV9MSU5FQVJfUEFERElORwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjdHJsX2RhdGFfb3V0X2VuYWJsZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFBDTSBibG9jayBzaGFyZXMgdGhlIGRhdGEtb3V0CiAqIHNpZ25hbCB0byB0aGUgZHJpdmUgd2l0aCBvdGhlciBtYXN0ZXJzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9QQ01fQ1RSTF9EQVRBX09FX0RJU0FCTEUKICogLSAjQUZFX1BPUlRfUENNX0NUUkxfREFUQV9PRV9FTkFCTEUKICovCgkJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA0CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHNsb3RfbnVtYmVyX21hcHBpbmdbNF07Ci8qIFNwZWNpZmllcyB0aGUgc2xvdCBudW1iZXIgZm9yIHRoZSBlYWNoIGNoYW5uZWwgaW4KICogbXVsdGkgY2hhbm5lbCBzY2VuYXJpby4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAzMgogKi8KfSBfX3BhY2tlZDsKCi8qCiAqIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgRElHSSBNSUMgaW50ZXJmYWNlCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9ESUdJX01JQ19DT05GSUcJMHgwMDAxMDIwRgovKiAgVGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBuZXcKICogICBhZGRpdGlvbnMgdG8gdGhlIGNvbmZpZyBpbnRlcmZhY2UgaW4gZnV0dXJlIGluIGJhY2t3YXJkCiAqICAgY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9ESUdJX01JQ19DT05GSUcgMHgxCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlnaXRhbCBtaWMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvIGxlZnQgMC4KICovCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfTEVGVDAgIDB4MQoKLypFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlnaXRhbCBtaWMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvIHJpZ2h0IDAuCiAqLwoKCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9SSUdIVDAgIDB4MgoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBsZWZ0IDEuCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9ESUdJX01JQ19NT0RFX0xFRlQxICAweDMKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gcmlnaHQgMS4KICovCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfUklHSFQxIDB4NAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBzdGVyZW8gMC4KICovCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9TVEVSRU8wICAweDUKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gc3RlcmVvIDEuCiAqLwoKCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9TVEVSRU8xICAgIDB4NgoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBxdWFkLgogKi8KCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9RVUFEICAgICAweDcKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0RJR0lfTUlDX0NPTkZJRyBjb21tYW5kJ3MKICogKERJR0kgTUlDIGNvbmZpZ3VyYXRpb24KICogcGFyYW1ldGVyKS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfZGlnaV9taWNfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIGRpZ2lfbWljX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBESUdJIE1pYwogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9ESUdJX01JQ19DT05GSUcKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgY2hhbm5lbF9tb2RlOwovKiBEaWdpdGFsIG1pYyBhbmQgbXVsdGljaGFubmVsIG9wZXJhdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9MRUZUMAogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1JJR0hUMAogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX0xFRlQxCiAqIC0gI0FGRV9QT1JUX0RJR0lfTUlDX01PREVfUklHSFQxCiAqIC0gI0FGRV9QT1JUX0RJR0lfTUlDX01PREVfU1RFUkVPMAogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1NURVJFTzEKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9RVUFECiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCiAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBIRE1JIGludGVyZmFjZSAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9IRE1JX0NPTkZJRyAgICAgMHgwMDAxMDIxMAoKLyogVGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBuZXcKICogYWRkaXRpb25zIHRvIHRoZSBjb25maWcgaW50ZXJmYWNlIGluIGZ1dHVyZSBpbiBiYWNrd2FyZAogKiBjb21wYXRpYmxlIG1hbm5lci4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0hETUlfQ09ORklHIDB4MQoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9IRE1JX0NPTkZJRyBjb21tYW5kLAogKiB3aGljaCBjb25maWd1cmVzIGEgbXVsdGljaGFubmVsIEhETUkgYXVkaW8gaW50ZXJmYWNlLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9oZG1pX211bHRpX2NoYW5fYXVkaW9fY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIGhkbWlfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEhETUkKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fSERNSV9DT05GSUcKICovCgp1MTYgICAgICAgICAgICAgICAgICBkYXRhdHlwZTsKLyogZGF0YSB0eXBlCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0xJTkVBUl9QQ01fREFUQQogKiAtICNOT05fTElORUFSX0RBVEEKICogLSAjTElORUFSX1BDTV9EQVRBX1BBQ0tFRF9JTl82MDk1OAogKiAtICNOT05fTElORUFSX0RBVEFfUEFDS0VEX0lOXzYwOTU4CiAqLwoKdTE2ICAgICAgICAgICAgICAgICAgY2hhbm5lbF9hbGxvY2F0aW9uOwovKiBIRE1JIGNoYW5uZWwgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgcHJvZ3JhbW1pbmcgYW4gSERNSQogKiBmcmFtZS4gVGhlIGRlZmF1bHQgaXMgMCAoU3RlcmVvKS4KICoKICogVGhpcyBpbmZvcm1hdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBIRE1JIHN0YW5kYXJkLCBDRUEgODYxLUQKICogKHJlZmVyIHRvIEB4aHlwZXJyZWZ7UzEsW1MxXX0pLiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIGlzIGFsc28KICogaW5mZXJyZWQgZnJvbSB0aGlzIHBhcmFtZXRlci4KICovCgoKdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCiAqIC0gMjIwNTAsIDQ0MTAwLCAxNzY0MDAgZm9yIGNvbXByZXNzZWQgc3RyZWFtcwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgkJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIEJUIG9yIEZNKFJJVkEpIGludGVyZmFjZSAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9JTlRFUk5BTF9CVF9GTV9DT05GSUcgIDB4MDAwMTAyMTEKCi8qIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqIGFkZGl0aW9ucyB0byB0aGUgY29uZmlnIGludGVyZmFjZSBpbiBmdXR1cmUgaW4gYmFja3dhcmQKICogY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9JTlRFUk5BTF9CVF9GTV9DT05GSUcJMHgxCgovKiBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0lOVEVSTkFMX0JUX0ZNX0NPTkZJRwogKiBjb21tYW5kJ3MgQlQgdm9pY2UvQlQgYXVkaW8vRk0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2ludGVybmFsX2J0X2ZtX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBidF9mbV9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQlQgYW5kIEZNCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX0lOVEVSTkFMX0JUX0ZNX0NPTkZJRwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAyCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2CiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SyAob25seSBmb3IgQlRTQ08pCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SyAob25seSBmb3IgQlRTQ08pCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SyAoRk0gYW5kIEEyRFApCiAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBTTElNQlVTIGludGVyZmFjZSB1c2luZwogKiBzaGFyZWQgY2hhbm5lbCBhcHByb2FjaC4KICovCgoKI2RlZmluZSBBRkVfUEFSQU1fSURfU0xJTUJVU19DT05GSUcgICAgMHgwMDAxMDIxMgoKLyogVGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBuZXcKICogYWRkaXRpb25zIHRvIHRoZSBjb25maWcgaW50ZXJmYWNlIGluIGZ1dHVyZSBpbiBiYWNrd2FyZAogKiBjb21wYXRpYmxlIG1hbm5lci4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NMSU1CVVNfQ09ORklHIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgU0xJTWJ1cyBkZXZpY2UgSUQgMS4gKi8KI2RlZmluZSBBRkVfU0xJTUJVU19ERVZJQ0VfMSAgICAgICAgICAgMHgwCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyBTTElNYnVzIGRldmljZSBJRCAyLiAqLwojZGVmaW5lIEFGRV9TTElNQlVTX0RFVklDRV8yICAgICAgICAgIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFNMSU1idXMgZGF0YSBmb3JtYXRzLiAqLwojZGVmaW5lIEFGRV9TQl9EQVRBX0ZPUk1BVF9OT1RfSU5ESUNBVEVEIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN0cmVhbXMgcGVyCiAqIGRldmljZS4KICovCgojZGVmaW5lIEFGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVAkweDgKCi8qIFBheWxvYWQgb2YgdGhlICNBRkVfUE9SVF9DTURfU0xJTUJVU19DT05GSUcgY29tbWFuZCdzIFNMSU1idXMKICogcG9ydCBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KICovCgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NsaW1idXNfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIHNiX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBTTElNQlVTCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX1NMSU1CVVNfQ09ORklHCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHNsaW1idXNfZGV2X2lkOwovKiBTTElNYnVzIGhhcmR3YXJlIGRldmljZSBJRCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gaGFuZGxlCiAqIG11bHRpcGxlIFNMSU1idXMgaGFyZHdhcmUgYmxvY2tzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtICNBRkVfU0xJTUJVU19ERVZJQ0VfMSAtICNBRkVfU0xJTUJVU19ERVZJQ0VfMgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0OwovKiBEYXRhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIFNMSU1idXMgaGFyZHdhcmUuIFRoZSBkZWZhdWx0IGlzCiAqIDAgKCNBRkVfU0JfREFUQV9GT1JNQVRfTk9UX0lORElDQVRFRCksIHdoaWNoIGluZGljYXRlcyB0aGUKICogaGFyZHdhcmUgZG9lcyBub3QgcGVyZm9ybSBhbnkgZm9ybWF0IGNvbnZlcnNpb25zIGJlZm9yZSB0aGUgZGF0YQogKiB0cmFuc2Zlci4KICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvICNBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlQKICovCgoJdTggIHNoYXJlZF9jaF9tYXBwaW5nW0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVF07Ci8qIE1hcHBpbmcgb2Ygc2hhcmVkIGNoYW5uZWwgSURzICgxMjggdG8gMjU1KSB0byB3aGljaCB0aGUKICogbWFzdGVyIHBvcnQgaXMgdG8gYmUgY29ubmVjdGVkLgogKiBTaGFyZWRfY2hhbm5lbF9tYXBwaW5nW2ldIHJlcHJlc2VudHMgdGhlIHNoYXJlZCBjaGFubmVsIGFzc2lnbmVkCiAqIGZvciBhdWRpbyBjaGFubmVsIGkgaW4gbXVsdGljaGFubmVsIGF1ZGlvIGRhdGEuCiAqLwoKCXUzMiAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCn0gX19wYWNrZWQ7CgoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5IEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX1BBUkFNUyB0byBjb25maWd1cmUKICogVVNCIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXIuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGgKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX1BBUkFNUyAgICAweDAwMDEwMkE1CgoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIHRvIHNldCB0aGUgZW5kaWFubmVzcyB2YWx1ZSBmb3IgdGhlCiAqIFVTQiBhdWRpbyBkZXZpY2UuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGgKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX0xQQ01fRk1UIDB4MDAwMTAyQUEKCi8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvICBjb25maWd1cmF0aW9uICovCiNkZWZpbmUgQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHIDB4MQoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIHRvIHNldCB0aGUgbGF0ZW5jeSBtb2RlIG9mIHRoZQogKiBVU0IgYXVkaW8gZGV2aWNlLgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUE9SVF9MQVRFTkNZX01PREVfQ09ORklHICAweDAwMDEwMkIzCgovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIFVTQiBhdWRpbyBsYXRlbmN5IG1vZGUgKi8KI2RlZmluZSBBRkVfQVBJX01JTk9SX1ZFUlNJT05fVVNCX0FVRElPX0xBVEVOQ1lfTU9ERSAweDEKCi8qIFN1cHBvcnRlZCBBRkUgcG9ydCBsYXRlbmN5IG1vZGVzICovCiNkZWZpbmUgQUZFX1BPUlRfREVGQVVMVF9MQVRFTkNZX01PREUgICAgIDB4MAojZGVmaW5lIEFGRV9QT1JUX0xPV19MQVRFTkNZX01PREUgICAgICAgICAweDEKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX1BBUkFNUyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfcGFyYW1zIHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gZGV2aWNlIHBhcmFtZXRlci4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2ZnX21pbm9yX3ZlcnNpb247Ci8qIFRva2VuIG9mIGFjdHVhbCBlbmQgVVNCIGFkdWlvIGRldmljZSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZGV2X3Rva2VuOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X2xwY21fZm10IHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gZGV2aWNlIHBhcmFtZXRlci4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2ZnX21pbm9yX3ZlcnNpb247Ci8qIEVuZGlhbm5lc3Mgb2YgYWN0dWFsIGVuZCBVU0IgYXVkaW8gZGV2aWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBlbmRpYW47Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfbGF0ZW5jeV9tb2RlIHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gZGV2aWNlIHBhcmFtZXRlci4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5PUl9WRVJTSU9OX1VTQl9BVURJT19MQVRFTkNZX01PREUKICovCgl1MzIgICAgICAgICAgICAgICAgICBtaW5vcl92ZXJzaW9uOwovKiBsYXRlbmN5IG1vZGUgZm9yIHRoZSBVU0IgYXVkaW8gZGV2aWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBtb2RlOwp9IF9fcGFja2VkOwoKCgovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHVzZWQgYnkgQUZFX1BBUkFNX0lEX1VTQl9BVURJT19DT05GSUcgdG8gY29uZmlndXJlCiAqIFVTQiBhdWRpbyBpbnRlcmZhY2UuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGggQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fQ09ORklHICAgIDB4MDAwMTAyQTQKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fQ09ORklHIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2NmZyB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvIGRldmljZSBjb25maWd1cmF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBRkVfQVBJX01JTklPUl9WRVJTSU9OX1VTQl9BVURJT19DT05GSUcKICovCgl1MzIgICAgICAgICAgICAgICAgICBjZmdfbWlub3JfdmVyc2lvbjsKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzExMDI1CiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMTJLCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMjIwNTAKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV8yNEsKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV8zMksKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV80NFAxSwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogTnVtYmVyIG9mIGNoYW5uZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIGFuZCAyCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBEYXRhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIFVTQi4gVGhlIHN1cHBvcnRlZCB2YWx1ZSBpcwogKiAwICgjQUZFX1VTQl9BVURJT19EQVRBX0ZPUk1BVF9MSU5FQVJfUENNKS4KICovCgl1MTYgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdDsKLyogdGhpcyBmaWVsZCBtdXN0IGJlIDAgKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBkZXZpY2UgdG9rZW4gb2YgYWN0dWFsIGVuZCBVU0IgYWR1aW8gZGV2aWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBkZXZfdG9rZW47Ci8qIGVuZGlhbm5lc3Mgb2YgdGhpcyBpbnRlcmZhY2UgKi8KCXUzMiAgICAgICAgICAgICAgICAgIGVuZGlhbjsKLyogc2VydmljZSBpbnRlcnZhbCAqLwoJdTMyICAgICAgICAgICAgICAgICAgc2VydmljZV9pbnRlcnZhbDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfdXNiX2F1ZGlvX2Rldl9wYXJhbV9jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgcGRhdGE7Cgl1bmlvbiB7CgkJc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X3BhcmFtcyB1c2JfZGV2OwoJCXN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2Rldl9scGNtX2ZtdCBscGNtX2ZtdDsKCQlzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfbGF0ZW5jeV9tb2RlIGxhdGVuY3lfY29uZmlnOwoJfTsKfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgUmVhbCBUaW1lIFByb3h5IGludGVyZmFjZS4gKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUlRfUFJPWFlfQ09ORklHIDB4MDAwMTAyMTMKCi8qIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqIGFkZGl0aW9ucyB0byB0aGUgY29uZmlnIGludGVyZmFjZSBpbiBmdXR1cmUgaW4gYmFja3dhcmQKICogY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9SVF9QUk9YWV9DT05GSUcgMHgxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9SVF9QUk9YWV9DT05GSUcKICogY29tbWFuZCAocmVhbC10aW1lIHByb3h5IHBvcnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIpLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9ydF9wcm94eV9wb3J0X2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBydF9wcm94eV9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiBydC1wcm94eQogKiBjb25maWcgaW50ZXJmYWNlLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBpbnRlcmxlYXZlZDsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdGhlIEFGRQogKiBpbnRlcmZhY2UgYW5kIHJlYWwtdGltZSBwb3J0IGlzIGludGVybGVhdmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDAgLS0gTm9uLWludGVybGVhdmVkIChzYW1wbGVzIGZyb20gZWFjaAogKiBjaGFubmVsIGFyZSBjb250aWd1b3VzIGluIHRoZSBidWZmZXIpIC0gMSAtLSBJbnRlcmxlYXZlZAogKiAoY29ycmVzcG9uZGluZyBzYW1wbGVzIGZyb20gZWFjaCBpbnB1dCBjaGFubmVsIGFyZSBpbnRlcmxlYXZlZAogKiB3aXRoaW4gdGhlIGJ1ZmZlcikKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIGZyYW1lX3NpemU7Ci8qIFNpemUgb2YgdGhlIGZyYW1lcyB0aGF0IGFyZSB1c2VkIGZvciBQQ00gZXhjaGFuZ2VzIHdpdGggdGhpcwogKiBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAsIGluIGJ5dGVzCiAqIEZvciBleGFtcGxlLCA1IG1zIGJ1ZmZlcnMgb2YgMTYgYml0cyBhbmQgMTYga0h6IHN0ZXJlbyBzYW1wbGVzCiAqIGlzIDUgbXMgKiAxNiBzYW1wbGVzL21zICogMiBieXRlcy9zYW1wbGUgKiAyIGNoYW5uZWxzID0gMzIwCiAqIGJ5dGVzLgogKi8KCXUxNiAgICAgICAgICAgICAgICAgIGppdHRlcl9hbGxvd2FuY2U7Ci8qIENvbmZpZ3VyZXMgdGhlIGFtb3VudCBvZiBqaXR0ZXIgdGhhdCB0aGUgcG9ydCB3aWxsIGFsbG93LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICogRm9yIGV4YW1wbGUsIGlmICsvLTEwIG1zIG9mIGppdHRlciBpcyBhbnRpY2lwYXRlZCBpbiB0aGUgdGltaW5nCiAqIG9mIHNlbmRpbmcgZnJhbWVzIHRvIHRoZSBwb3J0LCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgMTYga0h6CiAqIG1vbm8gd2l0aCAxNi1iaXQgc2FtcGxlcywgdGhpcyBmaWVsZCBpcyAxMCBtcyAqIDE2IHNhbXBsZXMvbXMgKiAyCiAqIGJ5dGVzL3NhbXBsZSA9IDMyMC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbG93X3dhdGVyX21hcms7Ci8qIExvdyB3YXRlcm1hcmsgaW4gYnl0ZXMgKGluY2x1ZGluZyBhbGwgY2hhbm5lbHMpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRG8gbm90IHNlbmQgYW55IGxvdyB3YXRlcm1hcmsgZXZlbnRzCiAqIC0gPiAwIC0tIExvdyB3YXRlcm1hcmsgZm9yIHRyaWdnZXJpbmcgYW4gZXZlbnQKICogSWYgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhbiBpbnRlcm5hbCBjaXJjdWxhciBidWZmZXIgaXMgbG93ZXIKICogdGhhbiB0aGlzIGxvd193YXRlcl9tYXJrIHBhcmFtZXRlciwgYSBMT1dfV0FURVJfTUFSSyBldmVudCBpcwogKiBzZW50IHRvIGFwcGxpY2F0aW9ucyAodmlhIHRoZSAjQUZFX0VWRU5UX1JUX1BST1hZX1BPUlRfU1RBVFVTCiAqIGV2ZW50KS4KICogVXNlIG9mIHdhdGVybWFyayBldmVudHMgaXMgb3B0aW9uYWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgaGlnaF93YXRlcl9tYXJrOwovKiBIaWdoIHdhdGVybWFyayBpbiBieXRlcyAoaW5jbHVkaW5nIGFsbCBjaGFubmVscykuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBEbyBub3Qgc2VuZCBhbnkgaGlnaCB3YXRlcm1hcmsgZXZlbnRzCiAqIC0gPiAwIC0tIEhpZ2ggd2F0ZXJtYXJrIGZvciB0cmlnZ2VyaW5nIGFuIGV2ZW50CiAqIElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gaW50ZXJuYWwgY2lyY3VsYXIgYnVmZmVyIGV4Y2VlZHMKICogVE9UQUxfQ0lSQ19CVUZfU0laRSBtaW51cyBoaWdoX3dhdGVyX21hcmssIGEgaGlnaCB3YXRlcm1hcmsgZXZlbnQKICogaXMgc2VudCB0byBhcHBsaWNhdGlvbnMgKHZpYSB0aGUgI0FGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwogKiBldmVudCkuCiAqIFRoZSB1c2Ugb2Ygd2F0ZXJtYXJrIGV2ZW50cyBpcyBvcHRpb25hbCBhbmQgZm9yIGRlYnVnZ2luZwogKiBwdXJwb3Nlcy4KICovCgoKCXUzMgkJCQkJc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gI0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIEZvciAzMiBiaXQgYWxpZ25tZW50LiAqLwp9IF9fcGFja2VkOwoKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFBzZXVkb3BvcnQgaW50ZXJmYWNlICovCgojZGVmaW5lIEFGRV9QQVJBTV9JRF9QU0VVRE9fUE9SVF9DT05GSUcJMHgwMDAxMDIxOQoKLyogVmVyc2lvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRsZSBmdXR1cmUgYWRkaXRpb25zIHRvIHRoZSBjb25maWd1cmF0aW9uCiAqIGludGVyZmFjZSAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fUFNFVURPX1BPUlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSB0aW1pbmdfbW9kZSBwYXJhbWV0ZXIgdG8gZmFzdGVyIHRoYW4gcmVhbAogKiB0aW1lLgogKi8KI2RlZmluZSBBRkVfUFNFVURPUE9SVF9USU1JTkdfTU9ERV9GVFJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSB0aW1pbmdfbW9kZSBwYXJhbWV0ZXIgdG8gcmVhbCB0aW1lIHVzaW5nCiAqIHRpbWVycy4KICovCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfUFNFVURPX1BPUlRfQ09ORklHIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfcHNldWRvX3BvcnRfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIHBzZXVkX3BvcnRfY2ZnX21pbm9yX3ZlcnNpb247CgkvKgoJICogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgcHNldWRvcG9ydAoJICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCgkgKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7CgkvKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZSBhdCB2YWx1ZXMgMTYsIDI0ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwoJLyogTnVtYmVyIG9mIGNoYW5uZWxzIGF0IHZhbHVlcyAgMSB0byA4ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ7CgkvKiBOb24tbGluZWFyIGRhdGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgcHNldWRvcG9ydCAoZm9yIGZ1dHVyZSB1c2UpLgoJICogQXQgdmFsdWVzICNBRkVfTElORUFSX1BDTV9EQVRBCgkgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0aW1pbmdfbW9kZTsKCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwc2V1ZG9wb3J0IHN5bmNocm9uaXplcyB0byB0aGUgY2xvY2sgb3IKCSAqIG9wZXJhdGVzIGZhc3RlciB0aGFuIHJlYWwgdGltZS4KCSAqIGF0IHZhbHVlcwoJICogLSAjQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfRlRSVAoJICogLSAjQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfVElNRVIgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKCS8qIFNhbXBsZSByYXRlIGF0IHdoaWNoIHRoZSBwc2V1ZG9wb3J0IHdpbGwgcnVuLgoJICogYXQgdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySyBAdGFibGVidWxsZXRlbmQKCSAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfVERNX0NPTkZJRwkJMHgwMDAxMDI5RAoKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fVERNX0NPTkZJRyAgICAgICAgICAgICAgMQoKI2RlZmluZSBBRkVfUE9SVF9URE1fU0hPUlRfU1lOQ19CSVRfTU9ERSAgICAgICAgMAojZGVmaW5lIEFGRV9QT1JUX1RETV9MT05HX1NZTkNfTU9ERSAgICAgICAgICAgICAxCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NIT1JUX1NZTkNfU0xPVF9NT0RFICAgICAgIDIKCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NZTkNfU1JDX0VYVEVSTkFMICAgICAgICAgIDAKI2RlZmluZSBBRkVfUE9SVF9URE1fU1lOQ19TUkNfSU5URVJOQUwgICAgICAgICAgMQoKI2RlZmluZSBBRkVfUE9SVF9URE1fQ1RSTF9EQVRBX09FX0RJU0FCTEUgICAgICAgMAojZGVmaW5lIEFGRV9QT1JUX1RETV9DVFJMX0RBVEFfT0VfRU5BQkxFICAgICAgICAxCgojZGVmaW5lIEFGRV9QT1JUX1RETV9TWU5DX05PUk1BTCAgICAgICAgICAgICAgICAwCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NZTkNfSU5WRVJUICAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgQUZFX1BPUlRfVERNX0RBVEFfREVMQVlfMF9CQ0xLX0NZQ0xFICAgIDAKI2RlZmluZSBBRkVfUE9SVF9URE1fREFUQV9ERUxBWV8xX0JDTEtfQ1lDTEUgICAgMQojZGVmaW5lIEFGRV9QT1JUX1RETV9EQVRBX0RFTEFZXzJfQkNMS19DWUNMRSAgICAyCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfVERNX0NPTkZJRyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3RkbV9jZmcgewoJdTMyCXRkbV9jZmdfbWlub3JfdmVyc2lvbjsKCS8qIDwgTWlub3IgdmVyc2lvbiB1c2VkIHRvIHRyYWNrIFRETSBjb25maWd1cmF0aW9uLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX1RETV9DT05GSUcKCSAqLwoKCXUzMgludW1fY2hhbm5lbHM7CgkvKiA8IE51bWJlciBvZiBlbmFibGVkIHNsb3RzIGZvciBURE0gZnJhbWUuCgkgKiBAdmFsdWVzIDEgdG8gOAoJICovCgoJdTMyCXNhbXBsZV9yYXRlOwoJLyogPCBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMjRLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8zMksKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTc2UDRLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8zNTJQOEsgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MzIJYml0X3dpZHRoOwoJLyogPCBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KCSAqIEB2YWx1ZXMgMTYsIDI0CgkgKi8KCgl1MTYJZGF0YV9mb3JtYXQ7CgkvKiA8IERhdGEgZm9ybWF0OiBsaW5lYXIgLGNvbXByZXNzZWQsIGdlbmVyaWMgY29tcHJlc3NzZWQKCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9MSU5FQVJfUENNX0RBVEEKCSAqIC0gI0FGRV9OT05fTElORUFSX0RBVEEKCSAqIC0gI0FGRV9HRU5FUklDX0NPTVBSRVNTRUQKCSAqLwoKCXUxNglzeW5jX21vZGU7CgkvKiA8IFRETSBzeW5jaHJvbml6YXRpb24gc2V0dGluZy4KCSAqIEB2YWx1ZXMgKHNob3J0LCBsb25nLCBzbG90KSBzeW5jIG1vZGUKCSAqIC0gI0FGRV9QT1JUX1RETV9TSE9SVF9TWU5DX0JJVF9NT0RFCgkgKiAtICNBRkVfUE9SVF9URE1fTE9OR19TWU5DX01PREUKCSAqIC0gI0FGRV9QT1JUX1RETV9TSE9SVF9TWU5DX1NMT1RfTU9ERSBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNglzeW5jX3NyYzsKCS8qIDwgU3luY2hyb25pemF0aW9uIHNvdXJjZS4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1RETV9TWU5DX1NSQ19FWFRFUk5BTAoJICogLSAjQUZFX1BPUlRfVERNX1NZTkNfU1JDX0lOVEVSTkFMIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTE2CW5zbG90c19wZXJfZnJhbWU7CgkvKiA8IE51bWJlciBvZiBzbG90cyBwZXIgZnJhbWUuIFR5cGljYWwgOiAxLCAyLCA0LCA4LCAxNiwgMzIuCgkgKiBAdmFsdWVzIDEgLSAzMgoJICovCgoJdTE2CWN0cmxfZGF0YV9vdXRfZW5hYmxlOwoJLyogPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgVERNIGJsb2NrIHNoYXJlcyB0aGUgZGF0YS1vdXQgc2lnbmFsIHRvIHRoZQoJICogZHJpdmUgd2l0aCBvdGhlciBtYXN0ZXJzLgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfVERNX0NUUkxfREFUQV9PRV9ESVNBQkxFCgkgKiAtICNBRkVfUE9SVF9URE1fQ1RSTF9EQVRBX09FX0VOQUJMRSBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNgljdHJsX2ludmVydF9zeW5jX3B1bHNlOwoJLyogPCBTcGVjaWZpZXMgd2hldGhlciB0byBpbnZlcnQgdGhlIHN5bmMgb3Igbm90LgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfVERNX1NZTkNfTk9STUFMCgkgKiAtICNBRkVfUE9SVF9URE1fU1lOQ19JTlZFUlQgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MTYJY3RybF9zeW5jX2RhdGFfZGVsYXk7CgkvKiA8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdCBjbG9jayB0byBkZWxheSBkYXRhIHdpdGggcmVzcGVjdCB0bwoJICogc3luYyBlZGdlLgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfVERNX0RBVEFfREVMQVlfMF9CQ0xLX0NZQ0xFCgkgKiAtICNBRkVfUE9SVF9URE1fREFUQV9ERUxBWV8xX0JDTEtfQ1lDTEUKCSAqIC0gI0FGRV9QT1JUX1RETV9EQVRBX0RFTEFZXzJfQkNMS19DWUNMRSBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNglzbG90X3dpZHRoOwoJLyogPCBTbG90IHdpZHRoIG9mIHRoZSBzbG90IGluIGEgVERNIGZyYW1lLiAgKHNsb3Rfd2lkdGggPj0gYml0X3dpZHRoKQoJICogaGF2ZSB0byBiZSBzYXRpc2ZpZWQuCgkgKiBAdmFsdWVzIDE2LCAyNCwgMzIKCSAqLwoKCXUzMglzbG90X21hc2s7CgkvKiA8IFBvc2l0aW9uIG9mIGFjdGl2ZSBzbG90cy4gIFdoZW4gdGhhdCBiaXQgaXMgc2V0LAoJICogdGhhdCBwYXJpY3VsYXIgc2xvdCBpcyBhY3RpdmUuCgkgKiBOdW1iZXIgb2YgYWN0aXZlIHNsb3RzIGNhbiBiZSBpbmZlcnJlZCBieSBudW1iZXIgb2YKCSAqIGJpdHMgc2V0IGluIHRoZSBtYXNrLiAgT25seSA4IGluZGl2aWR1YWwgYml0cyBjYW4gYmUgZW5hYmxlZC4KCSAqIEJpdHMgMC4uMzEgY29ycmVzcG9uZGluZyB0byBzbG90IDAuLjMxCgkgKiBAdmFsdWVzIDEgdG8gMl4zMiAtIDEKCSAqLwp9IF9fcGFja2VkOwoKLyogSUQgb2YgVGltZSBEaXZzaW9uIE11bHRpcGxleGluZyAoVERNKSBtb2R1bGUsCiAqIHdoaWNoIGlzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBBRkUgVERNLgogKgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQUZFX1BPUlRfVERNX1NMT1RfQ09ORklHCiAqCiAqIFRvIGNvbmZpZ3VyZSB0aGUgVERNIGludGVyZmFjZSwgdGhlIGNsaWVudCBtdXN0IHVzZSB0aGUKICogI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU0gY29tbWFuZCwgYW5kIGZpbGwgdGhlIG1vZHVsZSBJRCB3aXRoIHRoZQogKiByZXNwZWN0aXZlIHBhcmFtZXRlciBJRHMgYXMgbGlzdGVkIGFib3ZlLgogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9URE0JCTB4MDAwMTAyOEEKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSAjQUZFX01PRFVMRV9URE0gdG8gY29uZmlndXJlCiAqIHRoZSBURE0gc2xvdCBtYXBwaW5nLiAjQUZFX1BPUlRfQ01EX1NFVF9QQVJBTSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIElELgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUE9SVF9TTE9UX01BUFBJTkdfQ09ORklHCTB4MDAwMTAyOTcKCi8qIFZlcnNpb24gaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUgZnV0dXJlIGFkZGl0aW9ucyB0byBzbG90IG1hcHBpbmcKICogY29uZmlndXJhdGlvbiAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fU0xPVF9NQVBQSU5HX0NPTkZJRwkweDEKCi8qIERhdGEgYWxpZ24gdHlwZSAgKi8KI2RlZmluZSBBRkVfU0xPVF9NQVBQSU5HX0RBVEFfQUxJR05fTVNCCQkwCiNkZWZpbmUgQUZFX1NMT1RfTUFQUElOR19EQVRBX0FMSUdOX0xTQgkJMQoKI2RlZmluZSBBRkVfU0xPVF9NQVBQSU5HX09GRlNFVF9JTlZBTElECQkweEZGRkYKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9QT1JUX1NMT1RfTUFQUElOR19DT05GSUcKICogY29tbWFuZCdzIFRETSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfc2xvdF9tYXBwaW5nX2NmZyB7Cgl1MzIJbWlub3JfdmVyc2lvbjsKCS8qIDwgTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBURE0gc2xvdCBjb25maWd1cmF0aW9uLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX1RETV9TTE9UX0NPTkZJRwoJICovCgoJdTE2CW51bV9jaGFubmVsOwoJLyogPCBudW1iZXIgb2YgY2hhbm5lbCBvZiB0aGUgYXVkaW8gc2FtcGxlLgoJICogQHZhbHVlcyAxLCAyLCA0LCA2LCA4IEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTE2CWJpdHdpZHRoOwoJLyogPCBTbG90IGJpdCB3aWR0aCBmb3IgZWFjaCBjaGFubmVsCgkgKiBAdmFsdWVzIDE2LCAyNCwgMzIKCSAqLwoKCXUzMglkYXRhX2FsaWduX3R5cGU7CgkvKiA8IGluZGljYXRlIGhvdyBkYXRhIHBhY2tlZCBmcm9tIHNsb3Rfb2Zmc2V0IGZvciAzMiBzbG90IGJpdCB3aWR0aAoJICogaW4gY2FzZSBvZiBzYW1wbGUgYml0IHdpZHRoIGlzIDI0LgoJICogQHZhbHVlcwoJICogI0FGRV9TTE9UX01BUFBJTkdfREFUQV9BTElHTl9NU0IKCSAqICNBRkVfU0xPVF9NQVBQSU5HX0RBVEFfQUxJR05fTFNCCgkgKi8KCgl1MTYJb2Zmc2V0W0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVF07CgkvKiA8IEFycmF5IG9mIHRoZSBzbG90IG1hcHBpbmcgc3RhcnQgb2Zmc2V0IGluIGJ5dGVzIGZvciB0aGlzIGZyYW1lLgoJICogVGhlIGJ5dGVzIGlzIGNvdW50ZWQgZnJvbSAwLiBUaGUgMCBpcyBtYXBwZWQgdG8gdGhlIDFzdCBieXRlCgkgKiBpbiBvciBvdXQgb2YgdGhlIGRpZ2l0YWwgc2VyaWFsIGRhdGEgbGluZSB0aGlzIHN1Yi1mcmFtZSBiZWxvbmcgdG8uCgkgKiBzbG90X29mZnNldFtdIHNldHRpbmcgaXMgcGVyLWNoYW5uZWwgYmFzZWQuCgkgKiBUaGUgbWF4IG51bSBvZiBjaGFubmVsIHN1cHBvcnRlZCBpcyA4LgoJICogVGhlIHZhbGlkIG9mZnNldCB2YWx1ZSBtdXN0IGFsd2F5cyBiZSBjb250aW51bHkgcGxhY2VkIGluIGZyb20KCSAqIGluZGV4IDAuCgkgKiBTZXQgb2Zmc2V0IGFzIEFGRV9TTE9UX01BUFBJTkdfT0ZGU0VUX0lOVkFMSUQgZm9yIG5vdCB1c2VkIGFycmF5cy4KCSAqIElmICJzbG90X2JpdHdpZHRoX3Blcl9jaGFubmVsIiBpcyAzMiBhbmQgInNhbXBsZV9iaXR3aWR0aCIgaXMgMjQsCgkgKiAiZGF0YV9hbGlnbl90eXBlIiBpcyB1c2VkIHRvIGluZGljYXRlIGhvdyAyNCBiaXQgc2FtcGxlIGRhdGEgaW4KCSAqIGFsaWduaW5nIHdpdGggMzIgYml0IHNsb3Qgd2lkdGggcGVyLWNoYW5uZWwuCgkgKiBAdmFsdWVzLCBpbiBieXRlCgkgKi8KfSBfX3BhY2tlZDsKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSAjQUZFX01PRFVMRV9URE0gdG8gY29uZmlndXJlCiAqIHRoZSBjdXN0b21lciBURE0gaGVhZGVyLiAjQUZFX1BPUlRfQ01EX1NFVF9QQVJBTSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIElELgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfQ1VTVE9NX1RETV9IRUFERVJfQ09ORklHCQkweDAwMDEwMjk4CgovKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8gY3VzdG9tIFRETSBoZWFkZXIKICogY29uZmlndXJhdGlvbiAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fQ1VTVE9NX1RETV9IRUFERVJfQ09ORklHCTB4MQoKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9JTlZBTElECQkweDAKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9ERUZBVUxUCQkweDEKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9FTlRFUlRBSU5NRU5UX01PU1QJMHgyCgojZGVmaW5lIEFGRV9DVVNUT01fVERNX0hFQURFUl9NQVhfQ05UCTB4OAoKLyogUGF5bG9hZCBvZiB0aGUgQUZFX1BBUkFNX0lEX0NVU1RPTV9URE1fSEVBREVSX0NPTkZJRyBwYXJhbWV0ZXIgSUQgKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9jdXN0b21fdGRtX2hlYWRlcl9jZmcgewoJdTMyCW1pbm9yX3ZlcnNpb247CgkvKiA8IE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgY3VzdG9tIFRETSBoZWFkZXIgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9DVVNUT01fVERNX0hFQURFUl9DT05GSUcKCSAqLwoKCXUxNglzdGFydF9vZmZzZXQ7CgkvKiA8IHRoZSBzbG90IG1hcHBpbmcgc3RhcnQgb2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhpcyBzdWItZnJhbWUKCSAqIFRoZSBieXRlcyBpcyBjb3VudGVkIGZyb20gMC4gVGhlIDAgaXMgbWFwcGVkIHRvIHRoZSAxc3QgYnl0ZSBpbiBvcgoJICogb3V0IG9mIHRoZSBkaWdpdGFsIHNlcmlhbCBkYXRhIGxpbmUgdGhpcyBzdWItZnJhbWUgYmVsb25nIHRvLgoJICogQHZhbHVlcywgaW4gYnl0ZSwKCSAqIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIDAsIDQsIDgKCSAqLwoKCXUxNgloZWFkZXJfd2lkdGg7CgkvKiA8IHRoZSBoZWFkZXIgd2lkdGggcGVyLWZyYW1lIGZvbGxvd2VkLgoJICogMiBieXRlcyBmb3IgTU9TVC9URE0gY2FzZQoJICogQHZhbHVlcywgaW4gYnl0ZQoJICogc3VwcG9ydGVkIHZhbHVlIGlzIDIKCSAqLwoKCXUxNgloZWFkZXJfdHlwZTsKCS8qIDwgSW5kaWNhdGUgd2hhdCBraW5kIG9mIGN1c3RvbSBURE0gaGVhZGVyIGl0IGlzLgoJICogQHZhbHVlcyAjQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfSU5WQUxJRCA9IDAKCSAqICNBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9ERUZBVUxUID0gMSAgKGZvciBBQU4gY2hhbm5lbCBwZXIgTU9TVCkKCSAqICNBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9FTlRFUlRBSU5NRU5UX01PU1QgPSAyCgkgKiAoZm9yIGVudGVydGFpbm1lbnQgY2hhbm5lbCwgd2hpY2ggd2lsbCBvdmVyd3JpdGUKCSAqIEFGRV9BUElfVkVSU0lPTl9URE1fU0FEX0hFQURFUl9UWVBFX0RFRkFVTFQgcGVyIE1PU1QpCgkgKi8KCgl1MTYJbnVtX2ZyYW1lX3JlcGVhdDsKCS8qIDwgbnVtIG9mIGhlYWRlciBmb2xsb3dlZC4KCSAqIEB2YWx1ZXMsIHN1cHBvcnRlZCB2YWx1ZSBpcyA4CgkgKi8KCXUxNgloZWFkZXJbQUZFX0NVU1RPTV9URE1fSEVBREVSX01BWF9DTlRdOwoJLyogPCBTQUQgaGVhZGVyIGZvciBNT1NUL1RETSBjYXNlIGlzIGZvbGxvd2VkIGFzIHBheWxvYWQgYXMgYmVsb3cuCgkgKiBUaGUgc2l6ZSBvZiBmb2xsb3dlZCBTQUQgaGVhZGVyIGluIGJ5dGVzIGlzIG51bV9vZl9mcmFtZV9yZXBlYXQgKgoJICogaGVhZGVyX3dpZHRoX3Blcl9mcmFtZSwgd2hpY2ggaXMgMiAqIDggPSAxNiBieXRlcyBoZXJlLgoJICogdGhlIHN1cHBvcnRlZCBwYXlsb2FkIGZvcm1hdCBpcyBpbiB1aW50MTZfdCBhcyBiZWxvdwoJICogdWludDE2X3QgaGVhZGVyMDsgU3luY0hpIDB4M0MgSW5mb1s0XSAtIENvZGVjVHlwZSAtPiAweDNDMDAKCSAqIHVpbnQxNl90IGhlYWRlcjE7IFN5bmNMbyAweEIyIEluZm9bNV0gLSBTYW1wbGVXaWR0aCAtPiAweEIyMTgKCSAqIHVpbnQxNl90IGhlYWRlcjI7IERUQ1AgSW5mbyAgICAgSW5mb1s2XSAtIHVudXNlZCAtPiAweDAKCSAqIHVpbnQxNl90IGhlYWRlcjM7IEV4dGVuc2lvbiBJbmZvWzddIC0gQVNBRC1WYWx1ZSAtPiAweEMwCgkgKiB1aW50MTZfdCBoZWFkZXI0OyBSZXNlcnZlZCBJbmZvWzBdIC0gTnVtIG9mIGJ5dGVzIGZvbGxvd2luZyAgLT4gMHg3CgkgKiB1aW50MTZfdCBoZWFkZXI1OyBSZXNlcnZlZCBJbmZvWzFdIC0gTWVkaWEgVHlwZSAtPiAweDAKCSAqIHVpbnQxNl90IGhlYWRlcjY7IFJlc2VydmVkIEluZm9bMl0gLSBCaXRyYXRlW2ticHNdIC0gSGlnaCBCeXRlIC0+IDB4MAoJICogdWludDE2X3QgaGVhZGVyNzsgUmVzZXJ2ZWQgSW5mb1szXSAtIEJpdHJhdGVba2Jwc10gLSBMb3cgIEJ5dGUgLT4gMHgwCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc2xvdF9tYXBwaW5nX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyCXBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIJcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3Nsb3RfbWFwcGluZ19jZmcJc2xvdF9tYXBwaW5nOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9jdXN0b21fdGRtX2hlYWRlcl9jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MglwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyCXBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9jdXN0b21fdGRtX2hlYWRlcl9jZmcJY3VzdG9tX3RkbV9oZWFkZXI7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3RkbV9wb3J0X2NvbmZpZyB7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3RkbV9jZmcJCQkJdGRtOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zbG90X21hcHBpbmdfY2ZnCQlzbG90X21hcHBpbmc7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2N1c3RvbV90ZG1faGVhZGVyX2NmZwljdXN0b21fdGRtX2hlYWRlcjsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0RFVklDRV9IV19ERUxBWSAgICAgMHgwMDAxMDI0MwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9ERVZJQ0VfSFdfREVMQVkgIDB4MQoKc3RydWN0IGFmZV9wYXJhbV9pZF9kZXZpY2VfaHdfZGVsYXlfY2ZnIHsKCXVpbnQzMl90ICAgIGRldmljZV9od19kZWxheV9taW5vcl92ZXJzaW9uOwoJdWludDMyX3QgICAgZGVsYXlfaW5fdXM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TRVRfVE9QT0xPR1kgICAgMHgwMDAxMDI1QQojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9UT1BPTE9HWV9WMSAweDEKCnN0cnVjdCBhZmVfcGFyYW1faWRfc2V0X3RvcG9sb2d5X2NmZyB7CgkvKgoJICogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBhZmUgdG9wb2xvZ3kgaWQgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9UT1BPTE9HWV9WMQoJICovCgl1MzIJCW1pbm9yX3ZlcnNpb247CgkvKgoJICogSWQgb2YgdGhlIHRvcG9sb2d5IGZvciB0aGUgYWZlIHNlc3Npb24uCgkgKiBAdmFsdWVzIEFueSB2YWxpZCBBRkUgdG9wb2xvZ3kgSUQKCSAqLwoJdTMyCQl0b3BvbG9neV9pZDsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgTUFYX0FCUl9MRVZFTFMgNQoKc3RydWN0IGFmZV9iaXRfcmF0ZV9sZXZlbF9tYXBfdCB7CgkvKgoJICogS2V5IHZhbHVlIHBhaXIgZm9yIGxpbmsgcXVhbGl0eSBsZXZlbCB0byBiaXRyYXRlCgkgKiBtYXBwaW5nIGluIEFGRQoJICovCgl1aW50MzJfdCBsaW5rX3F1YWxpdHlfbGV2ZWw7Cgl1aW50MzJfdCBiaXRyYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9xdWFsaXR5X2xldmVsX3RvX2JpdHJhdGVfaW5mbyB7CgkvKgoJICogTnVtYmVyIG9mIHF1YWxpdHkgbGV2ZWxzIGJlaW5nIG1hcHBlZC4KCSAqIFRoaXMgd2lsbCBiZSBlcXVhbCB0byB0aGUgc2l6ZSBvZiBtYXBwaW5nIHRhYmxlLgoJICovCgl1aW50MzJfdCBudW1fbGV2ZWxzOwoJLyoKCSAqIFF1YWxpdHkgbGV2ZWwgdG8gYml0cmF0ZSBtYXBwaW5nIHRhYmxlCgkgKi8KCXN0cnVjdCBhZmVfYml0X3JhdGVfbGV2ZWxfbWFwX3QgYml0X3JhdGVfbGV2ZWxfbWFwW01BWF9BQlJfTEVWRUxTXTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfaW1jX2RlY19lbmNfaW5mbyB7CgkvKgoJICogRGVjb2RlciB0byBlbmNvZGVyIGNvbW11bmljYXRpb24gZGlyZWN0aW9uLgoJICogVHJhbnNtaXQgPSAwIC8gUmVjZWl2ZSA9IDEKCSAqLwoJdWludDMyX3QgZGlyZWN0aW9uOwoJLyoKCSAqIEVuYWJsZSAvIGRpc2FibGUgSU1DIGJldHdlZW4gZGVjb2RlciBhbmQgZW5jb2RlcgoJICovCgl1aW50MzJfdCBlbmFibGU7CgkvKgoJICogUHVycG9zZSBvZiBJTUMgYmVpbmcgc2V0IHVwIGJldHdlZW4gZGVjb2RlciBhbmQgZW5jb2Rlci4KCSAqIFBhcmFtIElEIGRlZmluZWQgZm9yIGxpbmsgcXVhbGl0eSBmZWVkYmFjayBpbiBMUEFTUyB3aWxsCgkgKiBiZSB0aGUgZGVmYXVsdCB2YWx1ZSBzZW50IGFzIHB1cnBvc2UuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOgoJICogQUZFX0VOQ0RFQ19QVVJQT1NFX0lEX0JUX0lORk8KCSAqLwoJdWludDMyX3QgcHVycG9zZTsKCS8qCgkgKiBVbmlxdWUgY29tbXVuaWNhdGlvbiBpbnN0YW5jZSBJRC4KCSAqIERhdGEgdHlwZSBhMmRwX2Ficl9pbnN0YW5jZSB1c2VkIHRvIHNldCBpbnN0YW5jZSBJRC4KCSAqIHB1cnBvc2UgYW5kIGNvbW1faW5zdGFuY2UgdG9nZXRoZXIgZm9ybSB0aGUgYWN0dWFsIGtleQoJICogdXNlZCBpbiBJTUMgcmVnaXN0cmF0aW9uLCB3aGljaCBtdXN0IGJlIHRoZSBzYW1lIGZvcgoJICogZW5jb2RlciBhbmQgZGVjb2RlciBmb3Igd2hpY2ggSU1DIGlzIGJlaW5nIHNldCB1cC4KCSAqLwoJdWludDMyX3QgY29tbV9pbnN0YW5jZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfYWJyX2RlY19jZmdfdCB7CglzdHJ1Y3QgYWZlX2ltY19kZWNfZW5jX2luZm8gaW1jX2luZm87Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2Ficl9lbmNfY2ZnX3QgewoJLyoKCSAqIExpbmsgcXVhbGl0eSBsZXZlbCB0byBiaXRyYXRlIG1hcHBpbmcgaW5mbyBzZW50IHRvIERTUC4KCSAqLwoJc3RydWN0IGFmZV9xdWFsaXR5X2xldmVsX3RvX2JpdHJhdGVfaW5mbyBtYXBwaW5nX2luZm87CgkvKgoJICogSW5mb3JtYXRpb24gdG8gc2V0IHVwIElNQyBiZXR3ZWVuIGRlY29kZXIgYW5kIGVuY29kZXIuCgkgKi8KCXN0cnVjdCBhZmVfaW1jX2RlY19lbmNfaW5mbyBpbWNfaW5mbzsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0FQVFhfU1lOQ19NT0RFICAweDAwMDEzMjA1CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2FwdHhfc3luY19tb2RlIHsKCS8qCgkgKiBzeW5jIG1vZGU6IDB4MCA9IHN0ZXJlbyBzeW5jIG1vZGUgKGRlZmF1bHQpCgkgKiAgICAgICAgICAgIDB4MDEgPSBkdWFsIG1vbm8gc3luYyBtb2RlCgkgKiAgICAgICAgICAgIDB4MDIgPSBkdWFsIG1vbm8gd2l0aCBubyBzeW5jIG9uIGVpdGhlciBMIG9yIFIKCSAqLwoJdWludDMyX3QgICAgIHN5bmNfbW9kZTsKfSBfX3BhY2tlZDsKCi8qCiAqIEdlbmVyaWMgZW5jb2RlciBtb2R1bGUgSUQuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogI0FWU19FTkNPREVSX1BBUkFNX0lEX0VOQ19GTVRfSUQgKGNhbm5vdCBiZSBzZXQgcnVuIHRpbWUpCiAqICNBVlNfRU5DT0RFUl9QQVJBTV9JRF9FTkNfQ0ZHX0JMSyAobWF5IGJlIHNldCBydW4gdGltZSkKICogI0FWU19FTkNPREVSX1BBUkFNX0lEX0VOQ19CSVRSQVRFIChtYXkgYmUgc2V0IHJ1biB0aW1lKQogKiAjQVZTX0VOQ09ERVJfUEFSQU1fSURfUEFDS0VUSVpFUl9JRCAoY2Fubm90IGJlIHNldCBydW4gdGltZSkKICogT3Bjb2RlIC0gQVZTX01PRFVMRV9JRF9FTkNPREVSCiAqIEFGRSBDb21tYW5kIEFGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIgc3VwcG9ydHMgdGhpcyBtb2R1bGUgSUQuCiAqLwojZGVmaW5lIEFGRV9NT0RVTEVfSURfRU5DT0RFUiAgICAgICAgMHgwMDAxMzIyOQoKLyogTWFjcm8gZm9yIGRlZmluaW5nIHRoZSBwYWNrZXRpemVyIElEOiBDT1AuICovCiNkZWZpbmUgQUZFX01PRFVMRV9JRF9QQUNLRVRJWkVSX0NPUCAweDAwMDEzMjJBCgovKgogKiBQYWNrZXRpemVyIHR5cGUgcGFyYW1ldGVyIGZvciB0aGUgI0FWU19NT0RVTEVfSURfRU5DT0RFUiBtb2R1bGUuCiAqIFRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQgcnVudGltZS4KICovCiNkZWZpbmUgQUZFX0VOQ09ERVJfUEFSQU1fSURfUEFDS0VUSVpFUl9JRCAweDAwMDEzMjJFCgovKgogKiBFbmNvZGVyIGNvbmZpZyBibG9jayAgcGFyYW1ldGVyIGZvciB0aGUgI0FWU19NT0RVTEVfSURfRU5DT0RFUiBtb2R1bGUuCiAqIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBzZXQgcnVudGltZS4KICovCiNkZWZpbmUgQUZFX0VOQ09ERVJfUEFSQU1fSURfRU5DX0NGR19CTEsgMHgwMDAxMzIyQwoKLyoKICogRW5jb2RlciBmb3JtYXQgSUQgcGFyYW1ldGVyIGZvciB0aGUgI0FWU19NT0RVTEVfSURfRU5DT0RFUiBtb2R1bGUuCiAqIFRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQgcnVudGltZS4KICovCiNkZWZpbmUgQUZFX0VOQ09ERVJfUEFSQU1fSURfRU5DX0ZNVF9JRCAgICAgICAgIDB4MDAwMTMyMkIKCi8qCiAqIEVuY29kZXIgc2NyYW1ibGVyIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0VOQUJMRV9TQ1JBTUJMSU5HICAgICAgICAgMHgwMDAxMzIzQwoKLyoKICogTGluayBxdWFsaXR5IGxldmVsIHRvIGJpdHJhdGUgbWFwcGluZyBpbmZvIHNlbnQgdG8gQUZFIEVuY29kZXIuCiAqIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBzZXQgcnVudGltZS4KICovCiNkZWZpbmUgQUZFX0VOQ09ERVJfUEFSQU1fSURfQklUX1JBVEVfTEVWRUxfTUFQICAgICAgICAweDAwMDEzMkUxCgovKgogKiBQYXJhbWV0ZXIgdG8gc2V0IHVwIEludGVyIE1vZHVsZSBDb21tdW5pY2F0aW9uIChJTUMpIGJldHdlZW4KICogQUZFIERlY29kZXIgYW5kIEVuY29kZXIuCiAqIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBzZXQgcnVudGltZS4KICovCiNkZWZpbmUgQUZFX0VOQ0RFQ19QQVJBTV9JRF9ERUNfVE9fRU5DX0NPTU1VTklDQVRJT04gICAgICAgIDB4MDAwMTMyM0QKCi8qCiAqIFB1cnBvc2Ugb2YgSU1DIHNldCB1cCBiZXR3ZWVuIGVuY29kZXIgYW5kIGRlY29kZXIuCiAqIENvbW11bmljYXRpb24gaW5zdGFuY2UgYW5kIHB1cnBvc2UgdG9nZXRoZXIgZm9ybSB0aGUKICogYWN0dWFsIGtleSB1c2VkIGZvciBJTUMgcmVnaXN0cmF0aW9uLgogKi8KI2RlZmluZSBBRkVfRU5DREVDX1BVUlBPU0VfSURfQlRfSU5GTyAgICAgICAgMHgwMDAxMzJFMgoKI2RlZmluZSBBRkVfTU9EVUxFX0lEX0RFQ09ERVIgICAgICAgIDB4MDAwMTMyMzEKCi8qCiAqIE1hY3JvIGZvciBkZWZpbmluZyB0aGUgZGVwYWNrZXRpemVyIElEOiBDT1AuCiAqLwojZGVmaW5lIEFGRV9NT0RVTEVfSURfREVQQUNLRVRJWkVSX0NPUCAgICAgICAgMHgwMDAxMzIzMwoKLyoKICogRGVwYWNrZXRpemVyIHR5cGUgcGFyYW1ldGVyIGZvciB0aGUgI0FWU19NT0RVTEVfSURfREVDT0RFUiBtb2R1bGUuCiAqIFRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQgcnVudGltZS4KICovCiNkZWZpbmUgQUZFX0RFQ09ERVJfUEFSQU1fSURfREVQQUNLRVRJWkVSX0lEICAgICAgICAweDAwMDEzMjM1CgojZGVmaW5lIENBUElfVjJfUEFSQU1fSURfQVBUWF9FTkNfU1dJVENIX1RPX01PTk8gICAgMHgwMDAxMzMyQQoKc3RydWN0IGFwdHhfY2hhbm5lbF9tb2RlX3BhcmFtX3QgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXUzMiBjaGFubmVsX21vZGU7Cn0gX19wYWNrZWQ7Ci8qCiAqIERhdGEgZm9ybWF0IHRvIHNlbmQgY29tcHJlc3NlZCBkYXRhCiAqIGlzIHRyYW5zbWl0dGVkL3JlY2VpdmVkIG92ZXIgU2xpbWJ1cyBsaW5lcy4KICovCiNkZWZpbmUgQUZFX1NCX0RBVEFfRk9STUFUX0dFTkVSSUNfQ09NUFJFU1NFRCAgICAweDMKCi8qCiAqIElEIGZvciBBRkUgcG9ydCBtb2R1bGUuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGRlZmluZSBwb3J0IHByb3BlcnRpZXMuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAjQUZFX1BBUkFNX0lEX1BPUlRfTUVESUFfVFlQRQogKiBUbyBjb25maWd1cmUgdGhlIHBvcnQgcHJvcGVydHksIHRoZSBjbGllbnQgbXVzdCB1c2UgdGhlCiAqICNBRkVfUE9SVF9DTURfU0VUX1BBUkFNX1YyIGNvbW1hbmQsCiAqIGFuZCBmaWxsIHRoZSBtb2R1bGUgSUQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXIgSURzIGFzIGxpc3RlZCBhYm92ZS4KICogQGFwcl9oZHJfZmllbGRzCiAqIE9wY29kZSAtLSBBRkVfTU9EVUxFX1BPUlQKICovCiNkZWZpbmUgQUZFX01PRFVMRV9QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMmE2CgovKgogKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHVzZWQgYnkgI0FGRV9NT0RVTEVfUE9SVCB0byBzZXQgdGhlIHBvcnQgbWVkaWEgdHlwZS4KICogcGFyYW1ldGVyIElEIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgdXNpbmcjQUZFX1BPUlRfQ01EX1NFVF9QQVJBTV9WMiBjb21tYW5kLgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUE9SVF9NRURJQV9UWVBFICAgICAgICAgICAgICAweDAwMDEwMmE3CgovKgogKiBNYWNyb3MgZm9yIGRlZmluaW5nIHRoZSAiZGF0YV9mb3JtYXQiIGZpZWxkIGluIHRoZQogKiAjQUZFX1BBUkFNX0lEX1BPUlRfTUVESUFfVFlQRQogKi8KI2RlZmluZSBBRkVfUE9SVF9EQVRBX0ZPUk1BVF9QQ00gICAgICAgICAgICAgICAgICAweDAKI2RlZmluZSBBRkVfUE9SVF9EQVRBX0ZPUk1BVF9HRU5FUklDX0NPTVBSRVNTRUQgICAweDEKCi8qCiAqIE1hY3JvIGZvciBkZWZpbmluZyB0aGUgIm1pbm9yX3ZlcnNpb24iIGZpZWxkIGluIHRoZQogKiAjQUZFX1BBUkFNX0lEX1BPUlRfTUVESUFfVFlQRQogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fUE9SVF9NRURJQV9UWVBFICAgICAgICAgICAweDEKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgMHgwCgovKgogKiBNZWRpYSBmb3JtYXQgSUQgZm9yIFNCQyBlbmNvZGUgY29uZmlndXJhdGlvbi4KICogQHBhciBTQkMgZW5jb2RlIGNvbmZpZ3VyYXRpb24gKGFzbV9zYmNfZW5jX2NmZ190KQogKiBAdGFibGV7d2Vha19fYXNtX19zYmNfX2VuY19fY2ZnX190fQogKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1NCQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQkYyCgovKiBTQkMgY2hhbm5lbCBNb25vIG1vZGUuKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfTU9OTyAgICAgICAgICAgICAgICAgICAgIDEKCi8qIFNCQyBjaGFubmVsIFN0ZXJlbyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU8gICAgICAgICAgICAgICAgICAgMgoKLyogU0JDIGNoYW5uZWwgRHVhbCBNb25vIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX0RVQUxfTU9OTyAgICAgICAgICAgICAgICA4CgovKiBTQkMgY2hhbm5lbCBKb2ludCBTdGVyZW8gbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfSk9JTlRfU1RFUkVPICAgICAgICAgICAgIDkKCi8qIFNCQyBiaXQgYWxsb2NhdGlvbiBtZXRob2QgPSBsb3VkbmVzcy4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9MT1VETkVTUyAgICAgICAgICAgIDAKCi8qIFNCQyBiaXQgYWxsb2NhdGlvbiBtZXRob2QgPSBTTlIuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQUxMT0NBVElPTl9NRVRIT0RfU05SICAgICAgICAgICAgICAgICAxCgoKLyoKICogUGF5bG9hZCBvZiB0aGUgU0JDIGVuY29kZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZQogKiAjQVNNX01FRElBX0ZNVF9TQkMgbWVkaWEgZm9ybWF0LgogKi8Kc3RydWN0IGFzbV9zYmNfZW5jX2NmZ190IHsKCS8qCgkgKiBOdW1iZXIgb2Ygc3ViYmFuZHMuCgkgKiBAdmFsdWVzIDQsIDgKCSAqLwoJdWludDMyX3QgICAgbnVtX3N1YmJhbmRzOwoKCS8qCgkgKiBTaXplIG9mIHRoZSBlbmNvZGVkIGJsb2NrIGluIHNhbXBsZXMuCgkgKiBAdmFsdWVzIDQsIDgsIDEyLCAxNgoJICovCgl1aW50MzJfdCAgICBibGtfbGVuOwoKCS8qCgkgKiBNb2RlIHVzZWQgdG8gYWxsb2NhdGUgYml0cyBiZXR3ZWVuIGNoYW5uZWxzLgoJICogQHZhbHVlcwoJICogMCAoTmF0aXZlIG1vZGUpCgkgKiAjQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX01PTk8KCSAqICNBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfU1RFUkVPCgkgKiAjQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX0RVQUxfTU9OTwoJICogI0FTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU8KCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlIG51bWJlcgoJICogb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgoJICogSWYgcG9zdHByb2Nlc3Npbmcgb3V0cHV0cyBvbmUtY2hhbm5lbCBkYXRhLCBNb25vIG1vZGUgaXMgdXNlZC4gSWYKCSAqIHBvc3Rwcm9jZXNzaW5nIG91dHB1dHMgdHdvLWNoYW5uZWwgZGF0YSwgU3RlcmVvIG1vZGUgaXMgdXNlZC4KCSAqIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgbXVzdCBub3QgY2hhbmdlIGR1cmluZyBlbmNvZGluZy4KCSAqLwoJdWludDMyX3QgICAgY2hhbm5lbF9tb2RlOwoKCS8qCgkgKiBFbmNvZGVyIGJpdCBhbGxvY2F0aW9uIG1ldGhvZC4KCSAqIEB2YWx1ZXMKCSAqICNBU01fTUVESUFfRk1UX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9MT1VETkVTUwoJICogI0FTTV9NRURJQV9GTVRfU0JDX0FMTE9DQVRJT05fTUVUSE9EX1NOUiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDMyX3QgICAgYWxsb2NfbWV0aG9kOwoKCS8qCgkgKiBOdW1iZXIgb2YgZW5jb2RlZCBiaXRzIHBlciBzZWNvbmQuCgkgKiBAdmFsdWVzCgkgKiBNb25vIGNoYW5uZWwgLS0gTWF4aW11bSBvZiAzMjAga2JwcwoJICogU3RlcmVvIGNoYW5uZWwgLS0gTWF4aW11bSBvZiA1MTIga2JwcyBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDMyX3QgICAgYml0X3JhdGU7CgoJLyoKCSAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCgkgKiBAdmFsdWVzIDAgKE5hdGl2ZSBtb2RlKSwgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAmbmJzcDtIegoJICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKCSAqIHNhbXBsaW5nIHJhdGUgYXQgdGhlIGlucHV0LgoJICogVGhlIHNhbXBsaW5nIHJhdGUgbXVzdCBub3QgY2hhbmdlIGR1cmluZyBlbmNvZGluZy4KCSAqLwoJdWludDMyX3QgICAgc2FtcGxlX3JhdGU7Cn07CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0FPVF9MQyAgICAgICAgICAgIDIKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfU0JSICAgICAgICAgICA1CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX1BTICAgICAgICAgICAgMjkKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19BRFRTICAwCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXICAgMwoKc3RydWN0IGFzbV9hYWNfZW5jX2NmZ192Ml90IHsKCgkvKiBFbmNvZGluZyByYXRlIGluIGJpdHMgcGVyIHNlY29uZC4qLwoJdWludDMyX3QgICAgIGJpdF9yYXRlOwoKCS8qCgkgKiBFbmNvZGluZyBtb2RlLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqICNBU01fTUVESUFfRk1UX0FBQ19BT1RfTEMKCSAqICNBU01fTUVESUFfRk1UX0FBQ19BT1RfU0JSCgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1BTCgkgKi8KCXVpbnQzMl90ICAgICBlbmNfbW9kZTsKCgkvKgoJICogQUFDIGZvcm1hdCBmbGFnLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19BRFRTCgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXCgkgKi8KCXVpbnQxNl90ICAgICBhYWNfZm10X2ZsYWc7CgoJLyoKCSAqIE51bWJlciBvZiBjaGFubmVscyB0byBlbmNvZGUuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOgoJICogMCAtIE5hdGl2ZSBtb2RlCgkgKiAxIC0gTW9ubwoJICogMiAtIFN0ZXJlbwoJICogT3RoZXIgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkLgoJICogQG5vdGUxaGFuZyBUaGUgZUFBQysgZW5jb2RlciBtb2RlIHN1cHBvcnRzIG9ubHkgc3RlcmVvLgoJICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKCSAqIG51bWJlciBvZiBjaGFubmVscyBhdCB0aGUgaW5wdXQuCgkgKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCgkgKi8KCXVpbnQxNl90ICAgICBjaGFubmVsX2NmZzsKCgkvKgoJICogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gMCAtLSBOYXRpdmUgbW9kZSAtIEZvciBvdGhlciB2YWx1ZXMsCgkgKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZQoJICogc2FtcGxpbmcgcmF0ZSBhdCB0aGUgaW5wdXQuCgkgKiBUaGUgc2FtcGxpbmcgcmF0ZSBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgoJICovCgl1aW50MzJfdCAgICAgc2FtcGxlX3JhdGU7Cn0gX19wYWNrZWQ7CgovKiBGTVQgSUQgZm9yIGFwdC1YIENsYXNzaWMgKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FQVFggMHgwMDAxMzFmZgoKLyogRk1UIElEIGZvciBhcHQtWCBIRCAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQVBUWF9IRCAweDAwMDEzMjAwCgojZGVmaW5lIFBDTV9DSEFOTkVMX0wgICAgICAgICAxCiNkZWZpbmUgUENNX0NIQU5ORUxfUiAgICAgICAgIDIKI2RlZmluZSBQQ01fQ0hBTk5FTF9DICAgICAgICAgMwoKc3RydWN0IGFzbV9jdXN0b21fZW5jX2NmZ190IHsKCXVpbnQzMl90ICAgIHNhbXBsZV9yYXRlOwoJLyogTW9ubyBvciBzdGVyZW8gKi8KCXVpbnQxNl90ICAgIG51bV9jaGFubmVsczsKCXVpbnQxNl90ICAgIHJlc2VydmVkOwoJLyogbnVtX2NoID09IDEsIHRoZW4gUENNX0NIQU5ORUxfQywKCSAqIG51bV9jaCA9PSAyLCB0aGVuIHtQQ01fQ0hBTk5FTF9MLCBQQ01fQ0hBTk5FTF9SfQoJICovCgl1aW50OF90ICAgICBjaGFubmVsX21hcHBpbmdbOF07Cgl1aW50MzJfdCAgICBjdXN0b21fc2l6ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYXB0eF92Ml9lbmNfY2ZnX2V4dF90IHsKCS8qCgkgKiBzeW5jIG1vZGU6IDB4MCA9IHN0ZXJlbyBzeW5jIG1vZGUgKGRlZmF1bHQpCgkgKiAgICAgICAgICAgIDB4MDEgPSBkdWFsIG1vbm8gc3luYyBtb2RlCgkgKiAgICAgICAgICAgIDB4MDIgPSBkdWFsIG1vbm8gd2l0aCBubyBzeW5jIG9uIGVpdGhlciBMIG9yIFIKCSAqLwoJdWludDMyX3QgICAgIHN5bmNfbW9kZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYXB0eF9lbmNfY2ZnX3QgewoJc3RydWN0IGFzbV9jdXN0b21fZW5jX2NmZ190IGN1c3RvbV9jZmc7CglzdHJ1Y3QgYXNtX2FwdHhfdjJfZW5jX2NmZ19leHRfdCBhcHR4X3YyX2NmZzsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9DRUxUIDB4MDAwMTMyMjEKc3RydWN0IGFzbV9jZWx0X3NwZWNpZmljX2VuY19jZmdfdCB7CgkvKgoJICogQml0IHJhdGUgdXNlZCBmb3IgZW5jb2RpbmcuCgkgKiBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB1cHBlciB0aHJlc2hvbGQKCSAqIGZvciBieXRlcyBwZXIgZnJhbWUgaWYgdmJyX2ZsYWcgaXMgMS4KCSAqIE9yIGVsc2UsIHRoaXMgd2lsbCBiZSB1c2VkIGFzIGEgcmVndWxhciBjb25zdGFudAoJICogYml0IHJhdGUgZm9yIGVuY29kZXIgb3V0cHV0LgoJICogQFJhbmdlIDogMzIwMDAgdG8gMTUzNjAwMAoJICogQERlZmF1bHQ6IDEyOAoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgIGJpdF9yYXRlOwoJLyoKCSAqIEZyYW1lIHNpemUgdXNlZCBmb3IgZW5jb2RpbmcuCgkgKiBAUmFuZ2UgOiA2NCwgMTI4LCAyNTYsIDUxMgoJICogQERlZmF1bHQ6IDI1NgoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIGZyYW1lX3NpemU7CgkvKgoJICogY29tcGxleGl0eSBvZiBhbGdvcml0aG0uCgkgKiBAUmFuZ2UgOiAwLTEwCgkgKiBARGVmYXVsdDogMwoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhpdHk7CgkvKgoJICogU3dpdGNoIHZhcmlhYmxlIGZvciBwcmVkaWN0aW9uIGZlYXR1cmUuCgkgKiBVc2VkIHRvIGNob29zZSBiZXR3ZWVuIHRoZSBsZXZlbCBvZiBpbnRlcmZyYW1lCgkgKiBwcmVkaWN0aW9ucyBhbGxvd2VkIHdoaWxlIGVuY29kaW5nLgoJICogQFJhbmdlOgoJICogMDogSW5kZXBlbmRlbnQgRnJhbWVzLgoJICogMTogU2hvcnQgVGVybSBpbnRlcmZyYW1lIHByZWRpY3Rpb24gYWxsb3dlZC4KCSAqIDI6IExvbmcgdGVybSBwcmVkaWN0aW9uIGFsbG93ZWQuCgkgKiBARGVmYXVsdDogMgoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb25fbW9kZTsKCS8qCgkgKiBWYXJpYWJsZSBCaXQgUmF0ZSBmbGFnLgoJICogQERlZmF1bHQ6IDAKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICB2YnJfZmxhZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fY2VsdF9lbmNfY2ZnX3QgewoJc3RydWN0IGFzbV9jdXN0b21fZW5jX2NmZ190ICBjdXN0b21fY29uZmlnOwoJc3RydWN0IGFzbV9jZWx0X3NwZWNpZmljX2VuY19jZmdfdCAgY2VsdF9zcGVjaWZpY19jb25maWc7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTERBQyAweDAwMDEzMjI0CnN0cnVjdCBhc21fbGRhY19zcGVjaWZpY19lbmNfY2ZnX3QgewoJLyoKCSAqIFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGVuY29kZXIgb3V0cHV0CgkgKiBieXRlcyBwZXIgZnJhbWUgKGkuZS4gYnl0ZXMgcGVyIHBhY2tldCkuCgkgKiBCaXQgcmF0ZSBhbHNvIGNvbmZpZ3VyZXMgdGhlIEVRTUlELgoJICogVGhlIG1pbiBiaXQgcmF0ZSAzMDMwMDAgYnBzIGlzIGNhbGN1bGF0ZWQgZm9yCgkgKiA0NC4xIGtIeiBhbmQgODguMiBLSHogc2FtcGxpbmcgZnJlcXVlbmNpZXMgd2l0aAoJICogTW9iaWxlIHVzZSBRdWFsaXR5LgoJICogVGhlIG1heCBiaXQgcmF0ZSBvZiA5OTAwMDAgYnBzIGlzIGNhbGN1bGF0ZWQgZm9yCgkgKiA5NmtIeiBhbmQgNDggS0h6IHdpdGggSGlnaCBRdWFsaXR5CgkgKiBAUmFuZ2UoaW4gYml0cyBwZXIgc2Vjb25kKQoJICogMzAzMDAwIGZvciBNb2JpbGUgdXNlIFF1YWxpdHkKCSAqIDYwNjAwMCBmb3Igc3RhbmRhcmQgUXVhbGl0eQoJICogOTA5MDAwIGZvciBIaWdoIFF1YWxpdHkKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBiaXRfcmF0ZTsKCS8qCgkgKiBUaGUgY2hhbm5lbCBzZXR0aW5nIGluZm9ybWF0aW9uIGZvciBMREFDIHNwZWNpZmljYXRpb24KCSAqIG9mIEJsdWV0b290aCBBMkRQIHdoaWNoIGlzIGRldGVybWluZWQgYnkgU1JDIGFuZCBTTksKCSAqIGRldmljZXMgaW4gQmx1ZXRvb3RoIHRyYW5zbWlzc2lvbi4KCSAqIEBSYW5nZToKCSAqIDAgZm9yIG5hdGl2ZSBtb2RlCgkgKiA0IGZvciBtb25vCgkgKiAyIGZvciBkdWFsIGNoYW5uZWwKCSAqIDEgZm9yIHN0ZXJlbwoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbW9kZTsKCS8qCgkgKiBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IChNVFUpLgoJICogVGhlIG1pbmltdW0gTVRVIHRoYXQgYSBMMkNBUCBpbXBsZW1lbnRhdGlvbiBmb3IgTERBQyBzaGFsbAoJICogc3VwcG9ydCBpcyA2NzkgYnl0ZXMsIGJlY2F1c2UgTERBQyBpcyBvcHRpbWl6ZWQgd2l0aCAyLURINQoJICogcGFja2V0IGFzIGl0cyB0YXJnZXQuCgkgKiBAUmFuZ2UgOiA2NzkKCSAqIEBEZWZhdWx0OiA2NzkgZm9yIExEQUNCVF9NVFVfMkRINQoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIG10dTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fbGRhY19lbmNfY2ZnX3QgewoJc3RydWN0IGFzbV9jdXN0b21fZW5jX2NmZ190ICBjdXN0b21fY29uZmlnOwoJc3RydWN0IGFzbV9sZGFjX3NwZWNpZmljX2VuY19jZmdfdCAgbGRhY19zcGVjaWZpY19jb25maWc7CglzdHJ1Y3QgYWZlX2Ficl9lbmNfY2ZnX3QgYWJyX2NvbmZpZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfZW5jX2ZtdF9pZF9wYXJhbV90IHsKCS8qCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOgoJICogICNBU01fTUVESUFfRk1UX1NCQwoJICogICNBU01fTUVESUFfRk1UX0FBQ19WMgoJICogQW55IE9wZW5EU1Agc3VwcG9ydGVkIHZhbHVlcwoJICovCgl1aW50MzJfdCAgICBmbXRfaWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BvcnRfbWVkaWFfdHlwZV90IHsKCS8qCgkgKiBNaW5vciB2ZXJzaW9uCgkgKiBAdmFsdWVzICNBRkVfQVBJX1ZFUlNJT05fUE9SVF9NRURJQV9UWVBFLgoJICovCgl1aW50MzJfdCAgICBtaW5vcl92ZXJzaW9uOwoKCS8qCgkgKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgoJICogQHZhbHVlcwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTFfMDI1SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzEySwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzIyXzA1SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzI0SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzMySwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ0XzFLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfODhfMksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNzZfNEsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xOTJLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzUyXzhLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzg0SwoJICovCgl1aW50MzJfdCAgICBzYW1wbGVfcmF0ZTsKCgkvKgoJICogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCgkgKiBAdmFsdWVzIDE2LCAyNAoJICovCgl1aW50MTZfdCAgICBiaXRfd2lkdGg7CgoJLyoKCSAqIE51bWJlciBvZiBjaGFubmVscy4KCSAqIEB2YWx1ZXMgMSB0byAjQUZFX1BPUlRfTUFYX0FVRElPX0NIQU5fQ05UCgkgKi8KCXVpbnQxNl90ICAgIG51bV9jaGFubmVsczsKCgkvKgoJICogRGF0YSBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoaXMgcG9ydC4KCSAqIElmIHRoZSBwb3J0IG1lZGlhIHR5cGUgYW5kIGRldmljZSBtZWRpYSB0eXBlIGFyZSBkaWZmZXJlbnQsCgkgKiBpdCBzaWduaWZpZXMgYSBlbmNvZGluZy9kZWNvZGluZyB1c2UgY2FzZQoJICogQHZhbHVlcwoJICogI0FGRV9QT1JUX0RBVEFfRk9STUFUX1BDTQoJICogI0FGRV9QT1JUX0RBVEFfRk9STUFUX0dFTkVSSUNfQ09NUFJFU1NFRAoJICovCgl1aW50MTZfdCAgIGRhdGFfZm9ybWF0OwoKCS8qVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiovCgl1aW50MTZfdCAgIHJlc2VydmVkOwp9IF9fcGFja2VkOwoKdW5pb24gYWZlX2VuY19jb25maWdfZGF0YSB7CglzdHJ1Y3QgYXNtX3NiY19lbmNfY2ZnX3Qgc2JjX2NvbmZpZzsKCXN0cnVjdCBhc21fYWFjX2VuY19jZmdfdjJfdCBhYWNfY29uZmlnOwoJc3RydWN0IGFzbV9jdXN0b21fZW5jX2NmZ190ICBjdXN0b21fY29uZmlnOwoJc3RydWN0IGFzbV9jZWx0X2VuY19jZmdfdCAgY2VsdF9jb25maWc7CglzdHJ1Y3QgYXNtX2FwdHhfZW5jX2NmZ190ICBhcHR4X2NvbmZpZzsKCXN0cnVjdCBhc21fbGRhY19lbmNfY2ZnX3QgIGxkYWNfY29uZmlnOwp9OwoKc3RydWN0IGFmZV9lbmNfY29uZmlnIHsKCXUzMiBmb3JtYXQ7Cgl1MzIgc2NyYW1ibGVyX21vZGU7Cgl1MzIgbW9ub19tb2RlOwoJdW5pb24gYWZlX2VuY19jb25maWdfZGF0YSBkYXRhOwp9OwoKc3RydWN0IGFmZV9kZWNfY29uZmlnIHsKCXUzMiBmb3JtYXQ7CglzdHJ1Y3QgYWZlX2Ficl9kZWNfY2ZnX3QgYWJyX2RlY19jZmc7Cn07CgpzdHJ1Y3QgYWZlX2VuY19jZmdfYmxrX3BhcmFtX3QgewoJdWludDMyX3QgZW5jX2NmZ19ibGtfc2l6ZTsKCS8qCgkgKlNpemUgb2YgdGhlIGVuY29kZXIgY29uZmlndXJhdGlvbiBibG9jayB0aGF0IGZvbGxvd3MgdGhpcyBtZW1iZXIKCSAqLwoJdW5pb24gYWZlX2VuY19jb25maWdfZGF0YSBlbmNfYmxrX2NvbmZpZzsKfTsKCi8qCiAqIFBheWxvYWQgb2YgdGhlIEFWU19FTkNPREVSX1BBUkFNX0lEX1BBQ0tFVElaRVJfSUQgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGF2c19lbmNfcGFja2V0aXplcl9pZF9wYXJhbV90IHsKCS8qCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOgoJICogI0FWU19NT0RVTEVfSURfUEFDS0VUSVpFUl9DT1AKCSAqIEFueSBPcGVuRFNQIHN1cHBvcnRlZCB2YWx1ZXMKCSAqLwoJdWludDMyX3QgZW5jX3BhY2tldGl6ZXJfaWQ7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DT0RFUl9QQVJBTV9JRF9FTkFCTEVfU0NSQU1CTElORyBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYXZzX2VuY19zZXRfc2NyYW1ibGVyX3BhcmFtX3QgewoJLyoKCSAqICBTdXBwb3J0ZWQgdmFsdWVzOgoJICogIDEgOiBlbmFibGUgc2NyYW1ibGVyCgkgKiAgMCA6IGRpc2FibGUgc2NyYW1ibGVyCgkgKi8KCXVpbnQzMl90IGVuYWJsZV9zY3JhbWJsZXI7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBDQVBJX1YyX1BBUkFNX0lEX0FQVFhfRU5DX1NXSVRDSF9UT19NT05PIHBhcmFtZXRlci4KICovCnN0cnVjdCBhZmVfZW5jX3NldF9jaGFubmVsX21vZGVfcGFyYW1fdCB7CgkvKgoJKiAgU3VwcG9ydGVkIHZhbHVlczoKCSogIDEgOiBtb25vCgkqICAyIDogZHVhbF9tb25vCgkqLwoJdTMyIGNoYW5uZWxfbW9kZTsKfTsKCi8qCiAqIFBheWxvYWQgb2YgdGhlIEFWU19FTkNPREVSX1BBUkFNX0lEX0JJVF9SQVRFX0xFVkVMX01BUCBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX2VuY19sZXZlbF90b19iaXRyYXRlX21hcF9wYXJhbV90IHsKCS8qCgkgKiBQYXJhbWV0ZXIgZm9yIG1hcHBpbmcgbGluayBxdWFsaXR5IGxldmVsIHRvIGJpdHJhdGUuCgkgKi8KCXN0cnVjdCBhZmVfcXVhbGl0eV9sZXZlbF90b19iaXRyYXRlX2luZm8gbWFwcGluZ190YWJsZTsKfTsKCi8qCiAqIFBheWxvYWQgb2YgdGhlIEFWU19FTkNERUNfUEFSQU1fSURfREVDX1RPX0VOQ19DT01NVU5JQ0FUSU9OIHBhcmFtZXRlci4KICovCnN0cnVjdCBhZmVfZW5jX2RlY19pbWNfaW5mb19wYXJhbV90IHsKCS8qCgkgKiBQYXJhbWV0ZXIgdG8gc2V0IHVwIEludGVyIE1vZHVsZSBDb21tdW5pY2F0aW9uIChJTUMpIGJldHdlZW4KCSAqIEFGRSBEZWNvZGVyIGFuZCBFbmNvZGVyLgoJICovCglzdHJ1Y3QgYWZlX2ltY19kZWNfZW5jX2luZm8gaW1jX2luZm87Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfREVDT0RFUl9QQVJBTV9JRF9ERVBBQ0tFVElaRVJfSUQgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGF2c19kZWNfZGVwYWNrZXRpemVyX2lkX3BhcmFtX3QgewoJLyoKCSAqIFN1cHBvcnRlZCB2YWx1ZXM6CgkgKiAjQVZTX01PRFVMRV9JRF9ERVBBQ0tFVElaRVJfQ09QCgkgKiBBbnkgT3BlbkRTUCBzdXBwb3J0ZWQgdmFsdWVzCgkgKi8KCXVpbnQzMl90IGRlY19kZXBhY2tldGl6ZXJfaWQ7Cn07Cgp1bmlvbiBhZmVfcG9ydF9jb25maWcgewoJc3RydWN0IGFmZV9wYXJhbV9pZF9wY21fY2ZnICAgICAgICAgICAgICAgcGNtOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9pMnNfY2ZnICAgICAgICAgICAgICAgaTJzOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9oZG1pX211bHRpX2NoYW5fYXVkaW9fY2ZnIGhkbWlfbXVsdGlfY2g7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NsaW1idXNfY2ZnICAgICAgICAgICBzbGltX3NjaDsKCXN0cnVjdCBhZmVfcGFyYW1faWRfcnRfcHJveHlfcG9ydF9jZmcgICAgIHJ0cHJveHk7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2ludGVybmFsX2J0X2ZtX2NmZyAgICBpbnRfYnRfZm07CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3BzZXVkb19wb3J0X2NmZyAgICAgICBwc2V1ZG9fcG9ydDsKCXN0cnVjdCBhZmVfcGFyYW1faWRfZGV2aWNlX2h3X2RlbGF5X2NmZyAgIGh3X2RlbGF5OwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jZmcgICAgICAgICAgICAgc3BkaWY7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NldF90b3BvbG9neV9jZmcgICAgICB0b3BvbG9neTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfdGRtX2NmZyAgICAgICAgICAgICAgIHRkbTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2NmZyAgICAgICAgIHVzYl9hdWRpbzsKCXN0cnVjdCBhZmVfcGFyYW1faWRfYXB0eF9zeW5jX21vZGUgICAgICAgIHN5bmNfbW9kZV9wYXJhbTsKCXN0cnVjdCBhZmVfZW5jX2ZtdF9pZF9wYXJhbV90ICAgICAgICAgICAgIGVuY19mbXQ7CglzdHJ1Y3QgYWZlX3BvcnRfbWVkaWFfdHlwZV90ICAgICAgICAgICAgICBtZWRpYV90eXBlOwoJc3RydWN0IGFmZV9lbmNfY2ZnX2Jsa19wYXJhbV90ICAgICAgICAgICAgZW5jX2Jsa19wYXJhbTsKCXN0cnVjdCBhdnNfZW5jX3BhY2tldGl6ZXJfaWRfcGFyYW1fdCAgICAgIGVuY19wa3RfaWRfcGFyYW07CglzdHJ1Y3QgYXZzX2VuY19zZXRfc2NyYW1ibGVyX3BhcmFtX3QgICAgICBlbmNfc2V0X3NjcmFtYmxlcl9wYXJhbTsKCXN0cnVjdCBhdnNfZGVjX2RlcGFja2V0aXplcl9pZF9wYXJhbV90ICAgIGRlY19kZXBrdF9pZF9wYXJhbTsKCXN0cnVjdCBhZmVfZW5jX2xldmVsX3RvX2JpdHJhdGVfbWFwX3BhcmFtX3QgICAgbWFwX3BhcmFtOwoJc3RydWN0IGFmZV9lbmNfZGVjX2ltY19pbmZvX3BhcmFtX3QgICAgICAgaW1jX2luZm9fcGFyYW07CglzdHJ1Y3QgYWZlX2VuY19zZXRfY2hhbm5lbF9tb2RlX3BhcmFtX3QgICBjaGFubmVsX21vZGVfcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2F1ZGlvaWZfY29uZmlnX2NvbW1hbmRfbm9fcGF5bG9hZCB7CglzdHJ1Y3QgYXByX2hkcgkJCWhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hdWRpb2lmX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCQkJaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXVuaW9uIGFmZV9wb3J0X2NvbmZpZyAgICAgICAgICAgIHBvcnQ7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QT1JUX0NNRF9ERVZJQ0VfU1RBUlQgMHgwMDAxMDBFNQoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUE9SVF9DTURfREVWSUNFX1NUQVJULiovCnN0cnVjdCBhZmVfcG9ydF9jbWRfZGV2aWNlX3N0YXJ0IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFBvcnQgaW50ZXJmYWNlIGFuZCBkaXJlY3Rpb24gKFJ4IG9yIFR4KSB0byBzdGFydC4gQW4gZXZlbgogKiBudW1iZXIgcmVwcmVzZW50cyB0aGUgUnggZGlyZWN0aW9uLCBhbmQgYW4gb2RkIG51bWJlciByZXByZXNlbnRzCiAqIHRoZSBUeCBkaXJlY3Rpb24uCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIDMyLWJpdCBhbGlnbm1lbnQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4qLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BPUlRfQ01EX0RFVklDRV9TVE9QICAweDAwMDEwMEU2CgovKiBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EX0RFVklDRV9TVE9QLiAqLwpzdHJ1Y3QgYWZlX3BvcnRfY21kX2RldmljZV9zdG9wIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFBvcnQgaW50ZXJmYWNlIGFuZCBkaXJlY3Rpb24gKFJ4IG9yIFR4KSB0byBzdGFydC4gQW4gZXZlbgogKiBudW1iZXIgcmVwcmVzZW50cyB0aGUgUnggZGlyZWN0aW9uLCBhbmQgYW4gb2RkIG51bWJlciByZXByZXNlbnRzCiAqIHRoZSBUeCBkaXJlY3Rpb24uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgMzItYml0IGFsaWdubWVudC4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byAwLiovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9TRVJWSUNFX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIDB4MDAwMTAwRUEKCi8qICBNZW1vcnkgbWFwIHJlZ2lvbnMgY29tbWFuZCBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqICNBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAuCiAqIFRoaXMgc3RydWN0dXJlIGFsbG93cyBjbGllbnRzIHRvIG1hcCBtdWx0aXBsZSBzaGFyZWQgbWVtb3J5CiAqIHJlZ2lvbnMgaW4gYSBzaW5nbGUgY29tbWFuZC4gRm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZQogKiBudW1fcmVnaW9ucyBvZiBhZmVfc2VydmljZV9zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkLgogKi8Kc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF9zaGFyZWRfbWVtX21hcF9yZWdpb25zIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKdTE2ICAgICAgICAgICAgICAgICAgbWVtX3Bvb2xfaWQ7Ci8qIFR5cGUgb2YgbWVtb3J5IG9uIHdoaWNoIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBtYXBwZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FEU1BfTUVNT1JZX01BUF9FQklfUE9PTAogKiAtICNBRFNQX01FTU9SWV9NQVBfU01JX1BPT0wKICogLSAjQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MCiAqIC0gT3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZAogKgogKiBUaGUgbWVtb3J5IHBvb2wgSUQgaW1wbGljaXRseSBkZWZpbmVzIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlCiAqIG1lbW9yeS4gQ2hhcmFjdGVyaXN0aWNzIG1heSBpbmNsdWRlIGFsaWdubWVudCB0eXBlLCBwZXJtaXNzaW9ucywKICogZXRjLgogKgogKiBBRFNQX01FTU9SWV9NQVBfRUJJX1BPT0wgaXMgRXh0ZXJuYWwgQnVmZmVyIEludGVyZmFjZSB0eXBlIG1lbW9yeQogKiBBRFNQX01FTU9SWV9NQVBfU01JX1BPT0wgaXMgU2hhcmVkIE1lbW9yeSBJbnRlcmZhY2UgdHlwZSBtZW1vcnkKICogQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MIGlzIHNoYXJlZCBtZW1vcnksIGJ5dGUKICogYWRkcmVzc2FibGUsIGFuZCA0IEtCIGFsaWduZWQuCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICBudW1fcmVnaW9uczsKLyogTnVtYmVyIG9mIHJlZ2lvbnMgdG8gbWFwLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIEFueSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybwogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9mbGFnOwovKiBDb25maWd1cmVzIG9uZSBjb21tb24gcHJvcGVydHkgZm9yIGFsbCB0aGUgcmVnaW9ucyBpbiB0aGUKICogcGF5bG9hZC4KICoKICogU3VwcG9ydGVkIHZhbHVlczogLSAweDAwMDAwMDAwIHRvIDB4MDAwMDAwMDEKICoKICogYjAgLSBiaXQgMCBpbmRpY2F0ZXMgcGh5c2ljYWwgb3IgdmlydHVhbCBtYXBwaW5nIDAgU2hhcmVkIG1lbW9yeQogKiBhZGRyZXNzIHByb3ZpZGVkIGluIGFmZV9zZXJ2aWNlX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWRpcyBhCiAqIHBoeXNpY2FsIGFkZHJlc3MuIFRoZSBzaGFyZWQgbWVtb3J5IG5lZWRzIHRvIGJlIG1hcHBlZCggaGFyZHdhcmUKICogVExCIGVudHJ5KSBhbmQgYSBzb2Z0d2FyZSBlbnRyeSBuZWVkcyB0byBiZSBhZGRlZCBmb3IgaW50ZXJuYWwKICogYm9vayBrZWVwaW5nLgogKgogKiAxIFNoYXJlZCBtZW1vcnkgYWRkcmVzcyBwcm92aWRlZCBpbgogKiBhZmVfc2VydmljZV9zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkaXMgYSB2aXJ0dWFsIGFkZHJlc3MuIFRoZQogKiBzaGFyZWQgbWVtb3J5IG11c3Qgbm90IGJlIG1hcHBlZCAoc2luY2UgaGFyZHdhcmUgVExCIGVudHJ5IGlzCiAqIGFscmVhZHkgYXZhaWxhYmxlKSBidXQgYSBzb2Z0d2FyZSBlbnRyeSBuZWVkcyB0byBiZSBhZGRlZCBmb3IKICogaW50ZXJuYWwgYm9vayBrZWVwaW5nLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdHdvIHNlcnZpY2VzIHdpdGggaW4KICogQURTUCBpcyBjb21tdW5pY2F0aW5nIHZpYSBBUFIuIFRoZXkgY2FuIG5vdyBkaXJlY3RseSBjb21tdW5pY2F0ZQogKiB2aWEgdGhlIFZpcnR1YWwgYWRkcmVzcyBpbnN0ZWFkIG9mIFBoeXNpY2FsIGFkZHJlc3MuIFRoZSB2aXJ0dWFsCiAqIHJlZ2lvbnMgbXVzdCBiZSBjb250aWd1b3VzLiBudW1fcmVnaW9ucyBtdXN0IGJlIDEgaW4gdGhpcyBjYXNlLgogKgogKiBiMzEtYjEgLSByZXNlcnZlZCBiaXRzLiBtdXN0IGJlIHNldCB0byB6ZXJvCiAqLwoKCn0gX19wYWNrZWQ7Ci8qICBNYXAgcmVnaW9uIHBheWxvYWQgdXNlZCBieSB0aGUKICogYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZHN0cnVjdHVyZS4KICovCnN0cnVjdCBhZmVfc2VydmljZV9zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkIHsKCXUzMiAgICAgICAgICAgICAgICAgIHNobV9hZGRyX2xzdzsKLyogbGVhc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBzdGFydGluZyBhZGRyZXNzIGluIHRoZSBtZW1vcnkKICogcmVnaW9uIHRvIG1hcC4gSXQgbXVzdCBiZSBjb250aWd1b3VzIG1lbW9yeSwgYW5kIGl0IG11c3QgYmUgNCBLQgogKiBhbGlnbmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIEFueSAzMiBiaXQgdmFsdWUKICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIHNobV9hZGRyX21zdzsKLyogbW9zdCBzaWduaWZpY2FudCB3b3JkIG9mIHN0YXJ0bmcgYWRkcmVzcyBpbiB0aGUgbWVtb3J5IHJlZ2lvbgogKiB0byBtYXAuIEZvciAzMiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCB0aGlzIGZpZWxkIG11c3QgYmUgc2V0CiAqIHRvIHplcm8uIEZvciAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQzMSB0byBiaXQgNCBtdXN0IGJlCiAqIHNldCB0byB6ZXJvCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gRm9yIDMyIGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIHRoaXMgZmllbGQKICogbXVzdCBiZSBzZXQgdG8gemVyby4gLSBGb3IgMzYgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYml0MzEgdG8KICogYml0IDQgbXVzdCBiZSBzZXQgdG8gemVybyAtIEZvciA2NCBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBhbnkKICogMzIgYml0IHZhbHVlCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBtZW1fc2l6ZV9ieXRlczsKLyogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZWdpb24uIFRoZSBhRFNQIHdpbGwgYWx3YXlzIG1hcCB0aGUKICogcmVnaW9ucyBhcyB2aXJ0dWFsIGNvbnRpZ3VvdXMgbWVtb3J5LCBidXQgdGhlIG1lbW9yeSBzaXplIG11c3QgYmUKICogaW4gbXVsdGlwbGVzIG9mIDQgS0IgdG8gYXZvaWQgZ2FwcyBpbiB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMKICogbWFwcGVkIG1lbW9yeS4KICoKICogU3VwcG9ydGVkIHZhbHVlczogLSBtdWx0aXBsZXMgb2YgNEtCCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1NFUlZJQ0VfQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgMHgwMDAxMDBFQgpzdHJ1Y3QgYWZlX3NlcnZpY2VfY21kcnNwX3NoYXJlZF9tZW1fbWFwX3JlZ2lvbnMgewoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIEEgbWVtb3J5IG1hcCBoYW5kbGUgZW5jYXBzdWxhdGluZyBzaGFyZWQgbWVtb3J5IGF0dHJpYnV0ZXMgaXMKICogcmV0dXJuZWQgaWZmIEFGRV9TRVJWSUNFX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQgaXMKICogc3VjY2Vzc2Z1bC4gSW4gdGhlIGNhc2Ugb2YgZmFpbHVyZSAsIGEgZ2VuZXJpYyBBUFIgZXJyb3IgcmVzcG9uc2UKICogaXMgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KICoKICogU3VwcG9ydGVkIFZhbHVlczogLSBBbnkgMzIgYml0IHZhbHVlCiAqLwoKfSBfX3BhY2tlZDsKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TIDB4MDAwMTAwRUMKLyogTWVtb3J5IHVubWFwIHJlZ2lvbnMgY29tbWFuZCBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqICNBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TCiAqCiAqIFRoaXMgc3RydWN0dXJlIGFsbG93cyBjbGllbnRzIHRvIHVubWFwIG11bHRpcGxlIHNoYXJlZCBtZW1vcnkKICogcmVnaW9ucyBpbiBhIHNpbmdsZSBjb21tYW5kLgogKi8KCgpzdHJ1Y3QgYWZlX3NlcnZpY2VfY21kX3NoYXJlZF9tZW1fdW5tYXBfcmVnaW9ucyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CnUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieQogKiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kcwogKgogKiBTdXBwb3J0ZWQgVmFsdWVzOgogKiAtIEFueSAzMiBiaXQgdmFsdWUKICovCn0gX19wYWNrZWQ7CgojZGVmaW5lICBBRkVfUE9SVF9DTURfR0VUX1BBUkFNX1YyIDB4MDAwMTAwRjAKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EX0dFVF9QQVJBTV9WMiBjb21tYW5kLAogKiB3aGljaCBxdWVyaWVzIGZvciBvbmUgcG9zdC9wcmVwcm9jZXNzaW5nIHBhcmFtZXRlciBvZiBhCiAqIHN0cmVhbS4KICovCnN0cnVjdCBhZmVfcG9ydF9jbWRfZ2V0X3BhcmFtX3YyIHsKCXUxNiBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuICovCgoJdTE2IHBheWxvYWRfc2l6ZTsKLyogTWF4aW11bSBkYXRhIHNpemUgb2YgdGhlIHBhcmFtZXRlciBJRC9tb2R1bGUgSUQgY29tYmluYXRpb24uCiAqIFRoaXMgaXMgYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCgl1MzIgcGF5bG9hZF9hZGRyZXNzX2xzdzsKLyogTFNXIG9mIDY0IGJpdCBQYXlsb2FkIGFkZHJlc3MuIEFkZHJlc3Mgc2hvdWxkIGJlIDMyLWJ5dGUsCiAqIDRrYnl0ZSBhbGlnbmVkIGFuZCBtdXN0IGJlIGNvbnRpZyBtZW1vcnkuCiAqLwoKCgl1MzIgcGF5bG9hZF9hZGRyZXNzX21zdzsKLyogTVNXIG9mIDY0IGJpdCBQYXlsb2FkIGFkZHJlc3MuIEluIGNhc2Ugb2YgMzItYml0IHNoYXJlZAogKiBtZW1vcnkgYWRkcmVzcywgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiBJbiBjYXNlIG9mIDM2LWJpdAogKiBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdC00IHRvIGJpdC0zMSBtdXN0IGJlIHNldCB0byB6ZXJvLgogKiBBZGRyZXNzIHNob3VsZCBiZSAzMi1ieXRlLCA0a2J5dGUgYWxpZ25lZCBhbmQgbXVzdCBiZSBjb250aWd1b3VzCiAqIG1lbW9yeS4KICovCgoJdTMyIG1lbV9tYXBfaGFuZGxlOwovKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieQogKiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kcy4KICogU3VwcG9ydGVkIFZhbHVlczogLSBOVUxMIC0tIE1lc3NhZ2UuIFRoZSBwYXJhbWV0ZXIgZGF0YSBpcwogKiBpbi1iYW5kLiAtIE5vbi1OVUxMIC0tIFRoZSBwYXJhbWV0ZXIgZGF0YSBpcyBPdXQtYmFuZC5Qb2ludGVyIHRvCiAqIC0gdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW4gc2hhcmVkIG1lbW9yeSBvZiB0aGUgcGF5bG9hZCBkYXRhLgogKiBGb3IgZGV0YWlsZWQgcGF5bG9hZCBjb250ZW50LCBzZWUgdGhlIGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIKICogc3RydWN0dXJlCiAqLwoKCgl1MzIgbW9kdWxlX2lkOwovKiBJRCBvZiB0aGUgbW9kdWxlIHRvIGJlIHF1ZXJpZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFZhbGlkIG1vZHVsZSBJRAogKi8KCgl1MzIgcGFyYW1faWQ7Ci8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdG8gYmUgcXVlcmllZC4KICogU3VwcG9ydGVkIHZhbHVlczogVmFsaWQgcGFyYW1ldGVyIElECiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9DTURSU1BfR0VUX1BBUkFNX1YyIDB4MDAwMTAxMDYKCi8qIFBheWxvYWQgb2YgdGhlICNBRkVfUE9SVF9DTURSU1BfR0VUX1BBUkFNX1YyIG1lc3NhZ2UsIHdoaWNoCiAqIHJlc3BvbmRzIHRvIGFuICNBRkVfUE9SVF9DTURfR0VUX1BBUkFNX1YyIGNvbW1hbmQuCiAqCiAqIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgcGFyYW1ldGVycyBzdHJ1Y3R1cmUKICogKGFmZV9wb3J0X3BhcmFtX2RhdGEpIGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlKGFja25vd2xlZGdtZW50KQogKiBwYXJhbWV0ZXIgcGF5bG9hZC4gVGhpcyBwYXlsb2FkIGlzIGluY2x1ZGVkIGZvciBhbiBpbi1iYW5kCiAqIHNjZW5hcmlvLiBGb3IgYW4gYWRkcmVzcy9zaGFyZWQgbWVtb3J5LWJhc2VkIHNldCBwYXJhbWV0ZXIsIHRoaXMKICogcGF5bG9hZCBpcyBub3QgbmVlZGVkLgogKi8KCgpzdHJ1Y3QgYWZlX3BvcnRfY21kcnNwX2dldF9wYXJhbV92MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9MUEFTU19DT1JFX1NIQVJFRF9DTE9DS19DT05GSUcJMHgwMDAxMDI4QwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9MUEFTU19DT1JFX1NIQVJFRF9DTEtfQ09ORklHCTB4MQoKLyogUGF5bG9hZCBvZiB0aGUgQUZFX1BBUkFNX0lEX0xQQVNTX0NPUkVfU0hBUkVEX0NMT0NLX0NPTkZJRyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2xwYXNzX2NvcmVfc2hhcmVkX2Nsa19jZmcgewoJdTMyCWxwYXNzX2NvcmVfc2hhcmVkX2Nsa19jZmdfbWlub3JfdmVyc2lvbjsKLyoKICogTWlub3IgdmVyc2lvbiB1c2VkIGZvciBscGFzcyBjb3JlIHNoYXJlZCBjbG9jayBjb25maWd1cmF0aW9uCiAqIFN1cHBvcnRlZCB2YWx1ZTogQUZFX0FQSV9WRVJTSU9OX0xQQVNTX0NPUkVfU0hBUkVEX0NMS19DT05GSUcKICovCgl1MzIJZW5hYmxlOwovKgogKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbHBhc3MgY29yZSBzaGFyZWQgY2xvY2sgaXMKICogZW5hYmxlZCAoMSkgb3IgZGlzYWJsZWQgKDApLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfbHBhc3NfY29yZV9zaGFyZWRfY2xrX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCQkgICBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9scGFzc19jb3JlX3NoYXJlZF9jbGtfY2ZnIGNsa19jZmc7Cn0gX19wYWNrZWQ7CgovKiBhZHNwX2FmZV9zZXJ2aWNlX2NvbW1hbmRzLmggKi8KCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX0VCSV9QT09MICAgICAgMAoKI2RlZmluZSBBRFNQX01FTU9SWV9NQVBfU01JX1BPT0wgICAgICAxCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX0lNRU1fUE9PTCAgICAgIDIKI2RlZmluZSBBRFNQX01FTU9SWV9NQVBfU0hNRU04XzRLX1BPT0wgICAgICAzCgovKiBEZWZpbml0aW9uIG9mIHZpcnR1YWwgbWVtb3J5IGZsYWcgKi8KI2RlZmluZSBBRFNQX01FTU9SWV9NQVBfVklSVFVBTF9NRU1PUlkgMQoKLyogRGVmaW5pdGlvbiBvZiBwaHlzaWNhbCBtZW1vcnkgZmxhZyAqLwojZGVmaW5lIEFEU1BfTUVNT1JZX01BUF9QSFlTSUNBTF9NRU1PUlkgMAoKI2RlZmluZSBOVUxMX1BPUFBfVE9QT0xPR1kJCQkJMHgwMDAxMEM2OAojZGVmaW5lIE5VTExfQ09QUF9UT1BPTE9HWQkJCQkweDAwMDEwMzEyCiNkZWZpbmUgREVGQVVMVF9DT1BQX1RPUE9MT0dZCQkJCTB4MDAwMTAzMTQKI2RlZmluZSBERUZBVUxUX1BPUFBfVE9QT0xPR1kJCQkJMHgwMDAxMEJFNAojZGVmaW5lIENPTVBSRVNTRURfUEFTU1RIUk9VR0hfREVGQVVMVF9UT1BPTE9HWSAgICAgICAgIDB4MDAwMTA3NkIKI2RlZmluZSBDT01QUkVTU0VEX1BBU1NUSFJPVUdIX05PTkVfVE9QT0xPR1kgICAgICAgICAgICAweDAwMDEwNzc0CiNkZWZpbmUgVlBNX1RYX1NNX0VDTlNfQ09QUF9UT1BPTE9HWQkJCTB4MDAwMTBGNzEKI2RlZmluZSBWUE1fVFhfU01fRUNOU19WMl9DT1BQX1RPUE9MT0dZCQkJMHgwMDAxMEY4OQojZGVmaW5lIFZQTV9UWF9ETV9GTFVFTkNFX0NPUFBfVE9QT0xPR1kJCQkweDAwMDEwRjcyCiNkZWZpbmUgVlBNX1RYX1FNSUNfRkxVRU5DRV9DT1BQX1RPUE9MT0dZCQkweDAwMDEwRjc1CiNkZWZpbmUgVlBNX1RYX0RNX1JGRUNOU19DT1BQX1RPUE9MT0dZCQkJMHgwMDAxMEY4NgojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX1RPUE9MT0dZX0lEX0RUU19IUFgJCTB4MTAwMTUwMDIKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9UT1BPTE9HWV9JRF9BVURJT1NQSEVSRQkweDEwMDI4MDAwCgovKiBNZW1vcnkgbWFwIHJlZ2lvbnMgY29tbWFuZCBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqICNBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgLCNBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZHMuCiAqCiAqIFRoaXMgc3RydWN0dXJlIGFsbG93cyBjbGllbnRzIHRvIG1hcCBtdWx0aXBsZSBzaGFyZWQgbWVtb3J5CiAqIHJlZ2lvbnMgaW4gYSBzaW5nbGUgY29tbWFuZC4gRm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZQogKiBudW1fcmVnaW9ucyBvZiBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZC4KICovCgoKc3RydWN0IGF2c19jbWRfc2hhcmVkX21lbV9tYXBfcmVnaW9ucyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBtZW1fcG9vbF9pZDsKLyogVHlwZSBvZiBtZW1vcnkgb24gd2hpY2ggdGhpcyBtZW1vcnkgcmVnaW9uIGlzIG1hcHBlZC4KICoKICogU3VwcG9ydGVkIHZhbHVlczogLSAjQURTUF9NRU1PUllfTUFQX0VCSV9QT09MIC0KICogI0FEU1BfTUVNT1JZX01BUF9TTUlfUE9PTCAtICNBRFNQX01FTU9SWV9NQVBfSU1FTV9QT09MCiAqICh1bnN1cHBvcnRlZCkgLSAjQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MIC0gT3RoZXIgdmFsdWVzCiAqIGFyZSByZXNlcnZlZAogKgogKiBUaGUgbWVtb3J5IElEIGltcGxpY2l0bHkgZGVmaW5lcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQogKiBtZW1vcnkuIENoYXJhY3RlcmlzdGljcyBtYXkgaW5jbHVkZSBhbGlnbm1lbnQgdHlwZSwgcGVybWlzc2lvbnMsCiAqIGV0Yy4KICoKICogU0hNRU04XzRLIGlzIHNoYXJlZCBtZW1vcnksIGJ5dGUgYWRkcmVzc2FibGUsIGFuZCA0IEtCIGFsaWduZWQuCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICBudW1fcmVnaW9uczsKCS8qIE51bWJlciBvZiByZWdpb25zIHRvIG1hcC4qLwoKCXUzMiAgICAgICAgICAgICAgICAgIHByb3BlcnR5X2ZsYWc7Ci8qIENvbmZpZ3VyZXMgb25lIGNvbW1vbiBwcm9wZXJ0eSBmb3IgYWxsIHRoZSByZWdpb25zIGluIHRoZQogKiBwYXlsb2FkLiBObyB0d28gcmVnaW9ucyBpbiB0aGUgc2FtZSBtZW1vcnkgbWFwIHJlZ2lvbnMgY21kIGNhbgogKiBoYXZlIGRpZmZlcm50IHByb3BlcnR5LiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDB4MDAwMDAwMDAgdG8KICogMHgwMDAwMDAwMQogKgogKiBiMCAtIGJpdCAwIGluZGljYXRlcyBwaHlzaWNhbCBvciB2aXJ0dWFsIG1hcHBpbmcgMCBzaGFyZWQgbWVtb3J5CiAqIGFkZHJlc3MgcHJvdmlkZWQgaW4gYXZzX3NoYXJlZF9tYXBfcmVnaW9uc19wYXlsb2FkIGlzIHBoeXNpY2FsCiAqIGFkZHJlc3MuIFRoZSBzaGFyZWQgbWVtb3J5IG5lZWRzIHRvIGJlIG1hcHBlZCggaGFyZHdhcmUgVExCCiAqIGVudHJ5KQogKgogKiBhbmQgYSBzb2Z0d2FyZSBlbnRyeSBuZWVkcyB0byBiZSBhZGRlZCBmb3IgaW50ZXJuYWwgYm9vayBrZWVwaW5nLgogKgogKiAxIFNoYXJlZCBtZW1vcnkgYWRkcmVzcyBwcm92aWRlZCBpbiBNYXlQYXlsb2FkW3VzUmVnaW9uc10gaXMKICogdmlydHVhbCBhZGRyZXNzLiBUaGUgc2hhcmVkIG1lbW9yeSBtdXN0IG5vdCBiZSBtYXBwZWQgKHNpbmNlCiAqIGhhcmR3YXJlIFRMQiBlbnRyeSBpcyBhbHJlYWR5IGF2YWlsYWJsZSkgYnV0IGEgc29mdHdhcmUgZW50cnkKICogbmVlZHMgdG8gYmUgYWRkZWQgZm9yIGludGVybmFsIGJvb2sga2VlcGluZy4gVGhpcyBjYW4gYmUgdXNlZnVsCiAqIGlmIHR3byBzZXJ2aWNlcyB3aXRoIGluIEFEU1AgaXMgY29tbXVuaWNhdGluZyB2aWEgQVBSLiBUaGV5IGNhbgogKiBub3cgZGlyZWN0bHkgY29tbXVuaWNhdGUgdmlhIHRoZSBWaXJ0dWFsIGFkZHJlc3MgaW5zdGVhZCBvZgogKiBQaHlzaWNhbCBhZGRyZXNzLiBUaGUgdmlydHVhbCByZWdpb25zIG11c3QgYmUgY29udGlndW91cy4KICoKICogYjMxLWIxIC0gcmVzZXJ2ZWQgYml0cy4gbXVzdCBiZSBzZXQgdG8gemVybwogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXZzX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWQgewoJdTMyICAgICAgICAgICAgICAgICAgc2htX2FkZHJfbHN3OwovKiBsZWFzdCBzaWduaWZpY2FudCB3b3JkIG9mIHNoYXJlZCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CiAqIHJlZ2lvbiB0byBtYXAuIEl0IG11c3QgYmUgY29udGlndW91cyBtZW1vcnksIGFuZCBpdCBtdXN0IGJlIDQgS0IKICogYWxpZ25lZC4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2htX2FkZHJfbXN3OwovKiBtb3N0IHNpZ25pZmljYW50IHdvcmQgb2Ygc2hhcmVkIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKICogcmVnaW9uIHRvIG1hcC4gRm9yIDMyIGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIHRoaXMgZmllbGQgbXVzdAogKiB0YmUgc2V0IHRvIHplcm8uIEZvciAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQzMSB0byBiaXQgNAogKiBtdXN0IGJlIHNldCB0byB6ZXJvCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9zaXplX2J5dGVzOwovKiBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHJlZ2lvbi4KICoKICogVGhlIGFEU1Agd2lsbCBhbHdheXMgbWFwIHRoZSByZWdpb25zIGFzIHZpcnR1YWwgY29udGlndW91cwogKiBtZW1vcnksIGJ1dCB0aGUgbWVtb3J5IHNpemUgbXVzdCBiZSBpbiBtdWx0aXBsZXMgb2YgNCBLQiB0byBhdm9pZAogKiBnYXBzIGluIHRoZSB2aXJ0dWFsbHkgY29udGlndW91cyBtYXBwZWQgbWVtb3J5LgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXZzX2NtZF9zaGFyZWRfbWVtX3VubWFwX3JlZ2lvbnMgewoJc3RydWN0IGFwcl9oZHIgICAgICAgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIG1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IEFTTV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwogKiAsIEFETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUywgY29tbWFuZHMKICovCgp9IF9fcGFja2VkOwoKLyogTWVtb3J5IG1hcCBjb21tYW5kIHJlc3BvbnNlIHBheWxvYWQgdXNlZCBieSB0aGUKICogI0FTTV9DTURSU1BfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwogKiAsI0FETV9DTURSU1BfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwogKi8KCgpzdHJ1Y3QgYXZzX2NtZHJzcF9zaGFyZWRfbWVtX21hcF9yZWdpb25zIHsKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBBIG1lbW9yeSBtYXAgaGFuZGxlIGVuY2Fwc3VsYXRpbmcgc2hhcmVkIG1lbW9yeSBhdHRyaWJ1dGVzIGlzCiAqIHJldHVybmVkCiAqLwoKfSBfX3BhY2tlZDsKCi8qYWRzcF9hdWRpb19tZW1tYXBfYXBpLmgqLwoKLyogQVNNIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzICovCnN0cnVjdCBhc21fd21hX2NmZyB7Cgl1MTYgZm9ybWF0X3RhZzsKCXUxNiBjaF9jZmc7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgYXZnX2J5dGVzX3Blcl9zZWM7Cgl1MTYgYmxvY2tfYWxpZ247Cgl1MTYgdmFsaWRfYml0c19wZXJfc2FtcGxlOwoJdTMyIGNoX21hc2s7Cgl1MTYgZW5jb2RlX29wdDsKCXUxNiBhZHZfZW5jb2RlX29wdDsKCXUzMiBhZHZfZW5jb2RlX29wdDI7Cgl1MzIgZHJjX3BlYWtfcmVmOwoJdTMyIGRyY19wZWFrX3RhcmdldDsKCXUzMiBkcmNfYXZlX3JlZjsKCXUzMiBkcmNfYXZlX3RhcmdldDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fd21hcHJvX2NmZyB7Cgl1MTYgZm9ybWF0X3RhZzsKCXUxNiBjaF9jZmc7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgYXZnX2J5dGVzX3Blcl9zZWM7Cgl1MTYgYmxvY2tfYWxpZ247Cgl1MTYgdmFsaWRfYml0c19wZXJfc2FtcGxlOwoJdTMyIGNoX21hc2s7Cgl1MTYgZW5jb2RlX29wdDsKCXUxNiBhZHZfZW5jb2RlX29wdDsKCXUzMiBhZHZfZW5jb2RlX29wdDI7Cgl1MzIgZHJjX3BlYWtfcmVmOwoJdTMyIGRyY19wZWFrX3RhcmdldDsKCXUzMiBkcmNfYXZlX3JlZjsKCXUzMiBkcmNfYXZlX3RhcmdldDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYWFjX2NmZyB7Cgl1MTYgZm9ybWF0OwoJdTE2IGFvdDsKCXUxNiBlcF9jb25maWc7Cgl1MTYgc2VjdGlvbl9kYXRhX3Jlc2lsaWVuY2U7Cgl1MTYgc2NhbGVmYWN0b3JfZGF0YV9yZXNpbGllbmNlOwoJdTE2IHNwZWN0cmFsX2RhdGFfcmVzaWxpZW5jZTsKCXUxNiBjaF9jZmc7Cgl1MTYgcmVzZXJ2ZWQ7Cgl1MzIgc2FtcGxlX3JhdGU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FtcndicGx1c19jZmcgewoJdTMyICBzaXplX2J5dGVzOwoJdTMyICB2ZXJzaW9uOwoJdTMyICBudW1fY2hhbm5lbHM7Cgl1MzIgIGFtcl9iYW5kX21vZGU7Cgl1MzIgIGFtcl9kdHhfbW9kZTsKCXUzMiAgYW1yX2ZyYW1lX2ZtdDsKCXUzMiAgYW1yX2xzZl9pZHg7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2ZsYWNfY2ZnIHsKCXUzMiBzYW1wbGVfcmF0ZTsKCXUzMiBleHRfc2FtcGxlX3JhdGU7Cgl1MzIgbWluX2ZyYW1lX3NpemU7Cgl1MzIgbWF4X2ZyYW1lX3NpemU7Cgl1MTYgc3RyZWFtX2luZm9fcHJlc2VudDsKCXUxNiBtaW5fYmxrX3NpemU7Cgl1MTYgbWF4X2Jsa19zaXplOwoJdTE2IGNoX2NmZzsKCXUxNiBzYW1wbGVfc2l6ZTsKCXUxNiBtZDVfc3VtOwp9OwoKc3RydWN0IGFzbV9hbGFjX2NmZyB7Cgl1MzIgZnJhbWVfbGVuZ3RoOwoJdTggY29tcGF0aWJsZV92ZXJzaW9uOwoJdTggYml0X2RlcHRoOwoJdTggcGI7Cgl1OCBtYjsKCXU4IGtiOwoJdTggbnVtX2NoYW5uZWxzOwoJdTE2IG1heF9ydW47Cgl1MzIgbWF4X2ZyYW1lX2J5dGVzOwoJdTMyIGF2Z19iaXRfcmF0ZTsKCXUzMiBzYW1wbGVfcmF0ZTsKCXUzMiBjaGFubmVsX2xheW91dF90YWc7Cn07CgpzdHJ1Y3QgYXNtX2c3MTFfZGVjX2NmZyB7Cgl1MzIgc2FtcGxlX3JhdGU7Cn07CgpzdHJ1Y3QgYXNtX3ZvcmJpc19jZmcgewoJdTMyIGJpdF9zdHJlYW1fZm10Owp9OwoKc3RydWN0IGFzbV9hcGVfY2ZnIHsKCXUxNiBjb21wYXRpYmxlX3ZlcnNpb247Cgl1MTYgY29tcHJlc3Npb25fbGV2ZWw7Cgl1MzIgZm9ybWF0X2ZsYWdzOwoJdTMyIGJsb2Nrc19wZXJfZnJhbWU7Cgl1MzIgZmluYWxfZnJhbWVfYmxvY2tzOwoJdTMyIHRvdGFsX2ZyYW1lczsKCXUxNiBiaXRzX3Blcl9zYW1wbGU7Cgl1MTYgbnVtX2NoYW5uZWxzOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIHNlZWtfdGFibGVfcHJlc2VudDsKfTsKCnN0cnVjdCBhc21fZHNkX2NmZyB7Cgl1MTYgbnVtX3ZlcnNpb247Cgl1MTYgaXNfYml0d2lzZV9iaWdfZW5kaWFuOwoJdTE2IGRzZF9jaGFubmVsX2Jsb2NrX3NpemU7Cgl1MTYgbnVtX2NoYW5uZWxzOwoJdTggIGNoYW5uZWxfbWFwcGluZ1s4XTsKCXUzMiBkc2RfZGF0YV9yYXRlOwp9OwoKc3RydWN0IGFzbV9zb2Z0cGF1c2VfcGFyYW1zIHsKCXUzMiBlbmFibGU7Cgl1MzIgcGVyaW9kOwoJdTMyIHN0ZXA7Cgl1MzIgcmFtcGluZ2N1cnZlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9zb2Z0dm9sdW1lX3BhcmFtcyB7Cgl1MzIgcGVyaW9kOwoJdTMyIHN0ZXA7Cgl1MzIgcmFtcGluZ2N1cnZlOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fRU5EX1BPSU5UX0RFVklDRV9NQVRSSVggICAgIDAKCiNkZWZpbmUgUENNX0NIQU5ORUxfTlVMTCAwCgovKiBGcm9udCBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRkwgICAgMQoKLyogRnJvbnQgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9GUiAgICAyCgovKiBGcm9udCBjZW50ZXIgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9GQyAgICAzCgovKiBMZWZ0IHN1cnJvdW5kIGNoYW5uZWwuKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9MUyAgIDQKCi8qIFJpZ2h0IHN1cnJvdW5kIGNoYW5uZWwuKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9SUyAgIDUKCi8qIExvdyBmcmVxdWVuY3kgZWZmZWN0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfTEZFICA2CgovKiBDZW50ZXIgc3Vycm91bmQgY2hhbm5lbDsgUmVhciBjZW50ZXIgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9DUyAgIDcKCi8qIExlZnQgYmFjayBjaGFubmVsOyBSZWFyIGxlZnQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9MQiAgIDgKCi8qIFJpZ2h0IGJhY2sgY2hhbm5lbDsgUmVhciByaWdodCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JCICAgOQoKLyogVG9wIHN1cnJvdW5kIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxTICAgMTAKCi8qIENlbnRlciB2ZXJ0aWNhbCBoZWlnaHQgY2hhbm5lbC4qLwojZGVmaW5lIFBDTV9DSEFOTkVMX0NWSCAgMTEKCi8qIE1vbm8gc3Vycm91bmQgY2hhbm5lbC4qLwojZGVmaW5lIFBDTV9DSEFOTkVMX01TICAgMTIKCi8qIEZyb250IGxlZnQgb2YgY2VudGVyLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0ZMQyAgMTMKCi8qIEZyb250IHJpZ2h0IG9mIGNlbnRlci4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9GUkMgIDE0CgovKiBSZWFyIGxlZnQgb2YgY2VudGVyLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JMQyAgMTUKCi8qIFJlYXIgcmlnaHQgb2YgY2VudGVyLiBVcGRhdGUgUENNX01BWF9DSE1BUF9JRCB3aGVuCiAqIHRoaXMgbGlzdCBpcyBleHRlbmRlZC4KICovCiNkZWZpbmUgUENNX0NIQU5ORUxfUlJDICAxNgoKLyogU2Vjb25kIGxvdyBmcmVxdWVuY3kgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9MRkUyIDE3CgovKiBTaWRlIGxlZnQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9TTCAgIDE4CgovKiBTaWRlIHJpZ2h0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfU1IgICAxOQoKLyogVG9wIGZyb250IGxlZnQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9URkwgIDIwCgovKiBMZWZ0IHZlcnRpY2FsIGhlaWdodCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0xWSCAgMjAKCi8qIFRvcCBmcm9udCByaWdodCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1RGUiAgMjEKCi8qIFJpZ2h0IHZlcnRpY2FsIGhlaWdodCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JWSCAgMjEKCi8qIFRvcCBjZW50ZXIgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9UQyAgIDIyCgovKiBUb3AgYmFjayBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVEJMICAyMwoKLyogVG9wIGJhY2sgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9UQlIgIDI0CgovKiBUb3Agc2lkZSBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVFNMICAyNQoKLyogVG9wIHNpZGUgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9UU1IgIDI2CgovKiBUb3AgYmFjayBjZW50ZXIgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9UQkMgIDI3CgovKiBCb3R0b20gZnJvbnQgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfQkZDICAyOAoKLyogQm90dG9tIGZyb250IGxlZnQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9CRkwgIDI5CgovKiBCb3R0b20gZnJvbnQgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9CRlIgIDMwCgovKiBMZWZ0IHdpZGUgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9MVyAgIDMxCgovKiBSaWdodCB3aWRlIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfUlcgICAzMgoKLyogTGVmdCBzaWRlIGRpcmVjdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0xTRCAgMzMKCgovKiBSaWdodCBzaWRlIGRpcmVjdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JTRCAgMzQKCiNkZWZpbmUgUENNX01BWF9DSE1BUF9JRCBQQ01fQ0hBTk5FTF9SUkMKCiNkZWZpbmUgUENNX0ZPUk1BVF9NQVhfTlVNX0NIQU5ORUwgIDgKCi8qIFVzZWQgZm9yIEFETV9DTURfREVWSUNFX09QRU5fVjggKi8KI2RlZmluZSBQQ01fRk9STUFUX01BWF9OVU1fQ0hBTk5FTF9WOCAgMzIKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMiAweDAwMDEwREE1CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjMgMHgwMDAxMEREQwoKI2RlZmluZSBBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1Y0IDB4MDAwMTMyMEMKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNSAweDAwMDEzMjIyCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfRVZSQ0JfRlMgMHgwMDAxMEJFRgoKI2RlZmluZSBBU01fTUVESUFfRk1UX0VWUkNXQl9GUyAweDAwMDEwQkYwCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfR0VORVJJQ19DT01QUkVTU0VEICAweDAwMDEzMjEyCgojZGVmaW5lIEFTTV9NQVhfRVFfQkFORFMgMTIKCiNkZWZpbmUgQVNNX0RBVEFfQ01EX01FRElBX0ZNVF9VUERBVEVfVjIgMHgwMDAxMEQ5OAoKc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIHsKdTMyICAgICAgICAgICAgICAgICAgICBmbXRfYmxrX3NpemU7CgkvKiBNZWRpYSBmb3JtYXQgYmxvY2sgc2l6ZSBpbiBieXRlcy4qLwp9ICBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZ2VuZXJpY19jb21wcmVzc2VkX2ZtdF9ibGtfdCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10X2JsazsKCgkvKgoJICogQ2hhbm5lbCBtYXBwaW5nIGFycmF5IG9mIGJpdHN0cmVhbSBvdXRwdXQuCgkgKiBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwgaSBpbnNpZGUgdGhlIGJ1ZmZlciwgd2hlcmUKCSAqIGkgPCBudW1fY2hhbm5lbHMuIEFsbCB2YWxpZCB1c2VkIGNoYW5uZWxzIG11c3QgYmUKCSAqIHByZXNlbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuCgkgKi8KCXVpbnQ4X3QgY2hhbm5lbF9tYXBwaW5nWzhdOwoKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGluY29taW5nIGJpdHN0cmVhbS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEsMiwzLDQsNSw2LDcsOAoJICovCgl1aW50MTZfdCBudW1fY2hhbm5lbHM7CgoJLyoKCSAqIE5vbWluYWwgYml0cyBwZXIgc2FtcGxlIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMzIKCSAqLwoJdWludDE2X3QgYml0c19wZXJfc2FtcGxlOwoKCS8qCgkgKiBOb21pbmFsIHNhbXBsaW5nIHJhdGUgb2YgdGhlIGluY29taW5nIGJpdHN0cmVhbS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwKCSAqICAgICAgICAgICAgICAgICAgIDQ0MTAwLCA0ODAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCwKCSAqICAgICAgICAgICAgICAgICAgIDM1MjgwMCwgMzg0MDAwCgkgKi8KCXVpbnQzMl90IHNhbXBsaW5nX3JhdGU7Cgp9IF9fcGFja2VkOwoKCi8qIENvbW1hbmQgdG8gc2VuZCBzYW1wbGUgcmF0ZSAmIGNoYW5uZWxzIGZvciBJRUM2MTkzNyAoY29tcHJlc3NlZCkgb3IgSUVDNjA5NTgKICogKHBjbSkgc3RyZWFtcy4gQm90aCBhdWRpbyBzdGFuZGFyZHMgdXNlIHRoZSBzYW1lIGZvcm1hdCBhbmQgYXJlIHVzZWQgZm9yCiAqIEhETUkgb3IgU1BESUYuCiAqLwojZGVmaW5lIEFTTV9EQVRBX0NNRF9JRUNfNjA5NThfTUVESUFfRk1UICAgICAgICAweDAwMDEzMjFFCgpzdHJ1Y3QgYXNtX2llY19jb21wcmVzc2VkX2ZtdF9ibGtfdCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CgoJLyoKCSAqIE5vbWluYWwgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgaW5jb21pbmcgYml0c3RyZWFtLgoJICogU3VwcG9ydGVkIHZhbHVlczogODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLAoJICogICAgICAgICAgICAgICAgICAgNDQxMDAsIDQ4MDAwLCA4ODIwMCwgOTYwMDAsIDE3NjQwMCwgMTkyMDAwLAoJICogICAgICAgICAgICAgICAgICAgMzUyODAwLCAzODQwMDAKCSAqLwoJdWludDMyX3Qgc2FtcGxpbmdfcmF0ZTsKCgkvKgoJICogTnVtYmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxLDIsMyw0LDUsNiw3LDgKCSAqLwoJdWludDMyX3QgbnVtX2NoYW5uZWxzOwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10X2JsazsKCgl1MTYgIG51bV9jaGFubmVsczsKCS8qIE51bWJlciBvZiBjaGFubmVscy4gU3VwcG9ydGVkIHZhbHVlczogMSB0byA4ICovCgl1MTYgIGJpdHNfcGVyX3NhbXBsZTsKLyogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbC4gKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAxNiwgMjQgKiBXaGVuIHVzZWQgZm9yIHBsYXliYWNrLCB0aGUgY2xpZW50IG11c3Qgc2VuZCAyNC1iaXQKICogc2FtcGxlcyBwYWNrZWQgaW4gMzItYml0IHdvcmRzLiBUaGUgMjQtYml0IHNhbXBsZXMgbXVzdCBiZSBwbGFjZWQKICogaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiB0aGUgMzItYml0IHdvcmQuIFdoZW4gdXNlZCBmb3IKICogcmVjb3JkaW5nLCB0aGUgYURTUCBzZW5kcyAyNC1iaXQgc2FtcGxlcyBwYWNrZWQgaW4gMzItYml0IHdvcmRzLgogKiBUaGUgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCAyNCBiaXRzIG9mCiAqIHRoZSAzMi1iaXQgd29yZC4KICovCgoKCXUzMiAgc2FtcGxlX3JhdGU7Ci8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQgKGluIEhlcnR6KS4KICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMAogKi8KCgl1MTYgIGlzX3NpZ25lZDsKCS8qIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIHNhbXBsZXMgYXJlIHNpZ25lZCAoMSkuICovCgoJdTE2ICByZXNlcnZlZDsKCS8qIHJlc2VydmVkIGZpZWxkIGZvciAzMiBiaXQgYWxpZ25tZW50LiBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoKCXU4ICAgY2hhbm5lbF9tYXBwaW5nWzhdOwovKiBDaGFubmVsIGFycmF5IG9mIHNpemUgOC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjUENNX0NIQU5ORUxfTAogKiAtICNQQ01fQ0hBTk5FTF9SCiAqIC0gI1BDTV9DSEFOTkVMX0MKICogLSAjUENNX0NIQU5ORUxfTFMKICogLSAjUENNX0NIQU5ORUxfUlMKICogLSAjUENNX0NIQU5ORUxfTEZFCiAqIC0gI1BDTV9DSEFOTkVMX0NTCiAqIC0gI1BDTV9DSEFOTkVMX0xCCiAqIC0gI1BDTV9DSEFOTkVMX1JCCiAqIC0gI1BDTV9DSEFOTkVMUwogKiAtICNQQ01fQ0hBTk5FTF9DVkgKICogLSAjUENNX0NIQU5ORUxfTVMKICogLSAjUENNX0NIQU5ORUxfRkxDCiAqIC0gI1BDTV9DSEFOTkVMX0ZSQwogKiAtICNQQ01fQ0hBTk5FTF9STEMKICogLSAjUENNX0NIQU5ORUxfUlJDCiAqCiAqIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbCBJLiBFYWNoIGVsZW1lbnQgaSBvZiB0aGUKICogYXJyYXkgZGVzY3JpYmVzIGNoYW5uZWwgSSBpbnNpZGUgdGhlIGJ1ZmZlciB3aGVyZSAwIEBsZSBJIDwKICogbnVtX2NoYW5uZWxzLiBBbiB1bnVzZWQgY2hhbm5lbCBpcyBzZXQgdG8gemVyby4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKgogKiBOdW1iZXIgb2YgY2hhbm5lbHMKICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyoKICogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbAogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQKICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMCwgOTYwMDAsMTkyMDAwIEh6CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGlzX3NpZ25lZDsKLyogRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgc2FtcGxlX3dvcmRfc2l6ZTsKLyoKICogU2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMiwyNCwzMgogKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Ci8qCiAqIEVhY2ggZWxlbWVudCwgaSwgaW4gdGhlIGFycmF5IGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIgd2hlcmUKICogMCA8PSBpIDwgbnVtX2NoYW5uZWxzLiBVbnVzZWQgY2hhbm5lbHMgYXJlIHNldCB0byAwLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192NCB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qCiAqIE51bWJlciBvZiBjaGFubmVscwogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKgogKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNCwgMzIKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQKICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMCwgOTYwMDAsMTkyMDAwIEh6CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGlzX3NpZ25lZDsKLyogRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgc2FtcGxlX3dvcmRfc2l6ZTsKLyoKICogU2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMiwyNCwzMgogKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Ci8qCiAqIEVhY2ggZWxlbWVudCwgaSwgaW4gdGhlIGFycmF5IGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIgd2hlcmUKICogMCA8PSBpIDwgbnVtX2NoYW5uZWxzLiBVbnVzZWQgY2hhbm5lbHMgYXJlIHNldCB0byAwLgogKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIGVuZGlhbm5lc3M7Ci8qCiAqIEZsYWcgdG8gaW5kaWNhdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIHBjbSBzYW1wbGUKICogU3VwcG9ydGVkIHZhbHVlczogMCAtIExpdHRsZSBlbmRpYW4gKGFsbCBvdGhlciBmb3JtYXRzKQogKiAgICAgICAgICAgICAgICAgICAxIC0gQmlnIGVuZGlhbiAoQUlGRikKICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBtb2RlOwovKgogKiBNb2RlIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvIGFib3V0IHRoZSBwY20gaW5wdXQgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogMCAtIERlZmF1bHQgUUZzIChRMTUgZm9yIDE2YiwgUTIzIGZvciBwYWNrZWQgMjRiLAogKiAgICAgICAgICAgICAgICAgICAgICAgUTMxIGZvciB1bnBhY2tlZCAyNGIgb3IgMzJiKQogKiAgICAgICAgICAgICAgICAgIDE1IC0gZm9yIDE2IGJpdAogKiAgICAgICAgICAgICAgICAgIDIzIC0gZm9yIDI0YiBwYWNrZWQgb3IgOC4yNCBmb3JtYXQKICogICAgICAgICAgICAgICAgICAzMSAtIGZvciAyNGIgdW5wYWNrZWQgb3IgMzJiaXQKICovCn0gX19wYWNrZWQ7CgoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3Y1IHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyoKICogTnVtYmVyIG9mIGNoYW5uZWxzCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gMzIKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKgogKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNCwgMzIKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQKICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMCwgOTYwMDAsMTkyMDAwIEh6CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGlzX3NpZ25lZDsKLyogRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgc2FtcGxlX3dvcmRfc2l6ZTsKLyoKICogU2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMiwyNCwzMgogKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIGVuZGlhbm5lc3M7Ci8qCiAqIEZsYWcgdG8gaW5kaWNhdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIHBjbSBzYW1wbGUKICogU3VwcG9ydGVkIHZhbHVlczogMCAtIExpdHRsZSBlbmRpYW4gKGFsbCBvdGhlciBmb3JtYXRzKQogKiAgICAgICAgICAgICAgICAgICAxIC0gQmlnIGVuZGlhbiAoQUlGRikKICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBtb2RlOwovKgogKiBNb2RlIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvIGFib3V0IHRoZSBwY20gaW5wdXQgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogMCAtIERlZmF1bHQgUUZzIChRMTUgZm9yIDE2YiwgUTIzIGZvciBwYWNrZWQgMjRiLAogKiAgICAgICAgICAgICAgICAgICAgICAgUTMxIGZvciB1bnBhY2tlZCAyNGIgb3IgMzJiKQogKiAgICAgICAgICAgICAgICAgIDE1IC0gZm9yIDE2IGJpdAogKiAgICAgICAgICAgICAgICAgIDIzIC0gZm9yIDI0YiBwYWNrZWQgb3IgOC4yNCBmb3JtYXQKICogICAgICAgICAgICAgICAgICAzMSAtIGZvciAyNGIgdW5wYWNrZWQgb3IgMzJiaXQKICovCgoJdWludDhfdCAgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXBwaW5nWzMyXTsKLyoKICogRWFjaCBlbGVtZW50LCBpLCBpbiB0aGUgYXJyYXkgZGVzY3JpYmVzIGNoYW5uZWwgaSBpbnNpZGUgdGhlIGJ1ZmZlciB3aGVyZQogKiAwIDw9IGkgPCBudW1fY2hhbm5lbHMuIFVudXNlZCBjaGFubmVscyBhcmUgc2V0IHRvIDAuCiAqLwp9IF9fcGFja2VkOwovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMyBtZWRpYSBmb3JtYXQuCiAqLwpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfcGFyYW1fdjMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CglzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjMgcGFyYW07Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNCBtZWRpYSBmb3JtYXQuCiAqLwpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfcGFyYW1fdjQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CglzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjQgcGFyYW07Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNSBtZWRpYSBmb3JtYXQuCiAqLwpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfcGFyYW1fdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CglzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjUgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSB7Cgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIElEIG9mIHRoZSBwYXJhbWV0ZXIuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1fc2l6ZTsKLyogRGF0YSBzaXplIG9mIHRoaXMgcGFyYW1ldGVyLCBpbiBieXRlcy4gVGhlIHNpemUgaXMgYSBtdWx0aXBsZQogKiBvZiA0IGJ5dGVzLgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIGZyYW1lc19wZXJfYnVmOwovKiBOdW1iZXIgb2YgZW5jb2RlZCBmcmFtZXMgdG8gcGFjayBpbnRvIGVhY2ggYnVmZmVyLgogKgogKiBAbm90ZTFoYW5nIFRoaXMgaXMgb25seSBndWlkYW5jZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGFEU1AuIFRoZQogKiBudW1iZXIgb2YgZW5jb2RlZCBmcmFtZXMgcHV0IGludG8gZWFjaCBidWZmZXIgKHNwZWNpZmllZCBieSB0aGUKICogY2xpZW50KSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBudW1iZXIuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGVuY19jZmdfYmxrX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGVuY29kZXIgY29uZmlndXJhdGlvbiBibG9jayB0aGF0IGZvbGxvd3MKICogdGhpcyBtZW1iZXIuCiAqLwoKfSBfX3BhY2tlZDsKCi8qIEBicmllZiBEb2xieSBEaWdpdGFsIFBsdXMgZW5kIHBvaW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAqLwpzdHJ1Y3QgYXNtX2RlY19kZHBfZW5kcF9wYXJhbV92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJaW50IGVuZHBfcGFyYW1fdmFsdWU7Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGVuY29kZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGluCiAqIHRoZSBBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1Y1IG1lZGlhIGZvcm1hdC4KICovCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZW5jX2NmZ192NSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyIGVuY2JsazsKCXVpbnQxNl90IG51bV9jaGFubmVsczsKLyoKICogTnVtYmVyIG9mIFBDTSBjaGFubmVscy4KICogQHZhbHVlcwogKiAtIDAgLS0gTmF0aXZlIG1vZGUKICogLSAxIC0tIDggY2hhbm5lbHMKICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgbnVtYmVyCiAqIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KICovCgl1aW50MTZfdCAgYml0c19wZXJfc2FtcGxlOwovKgogKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsLgogKiBAdmFsdWVzIDE2LCAyNAogKi8KCXVpbnQzMl90ICBzYW1wbGVfcmF0ZTsKLyoKICogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogQHZhbHVlcyAwLCA4MDAwIHRvIDQ4MDAwIEh6CiAqIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhlIG5hdGl2ZSBzYW1wbGluZyByYXRlLiBFbmNvZGluZyBpcwogKiBwZXJmb3JtZWQgYXQgdGhlIGlucHV0IHNhbXBsaW5nIHJhdGUuCiAqLwoJdWludDE2X3QgIGlzX3NpZ25lZDsKLyoKICogRmxhZyB0aGF0IGluZGljYXRlcyB0aGUgUENNIHNhbXBsZXMgYXJlIHNpZ25lZCAoMSkuIEN1cnJlbnRseSwgb25seQogKiBzaWduZWQgUENNIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4KICovCgl1aW50MTZfdCAgICBzYW1wbGVfd29yZF9zaXplOwovKgogKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgogKiBAdmFsdWVzIDE2LCAyNCwgMzIKICogMTYtYml0IHNhbXBsZXMgYXJlIGFsd2F5cyBwbGFjZWQgaW4gMTYtYml0IHdvcmRzOgogKiBzYW1wbGVfd29yZF9zaXplID0gMS4KICogMjQtYml0IHNhbXBsZXMgY2FuIGJlIHBsYWNlZCBpbiAzMi1iaXQgd29yZHMgb3IgaW4gY29uc2VjdXRpdmUKICogMjQtYml0IHdvcmRzLgogKiAtIElmIHNhbXBsZV93b3JkX3NpemUgPSAzMiwgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbiB0aGUKICogbW9zdCBzaWduaWZpY2FudCAyNCBiaXRzIG9mIGEgMzItYml0IHdvcmQuCiAqIC0gSWYgc2FtcGxlX3dvcmRfc2l6ZSA9IDI0LCAyNC1iaXQgc2FtcGxlcyBhcmUgcGxhY2VkIGluCiAqIDI0LWJpdCB3b3Jkcy4gQHRhYmxlYnVsbGV0ZW5kCiAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgZW5kaWFubmVzczsKLyoKICogRmxhZyB0byBpbmRpY2F0ZSB0aGUgZW5kaWFubmVzcyBvZiB0aGUgcGNtIHNhbXBsZQogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIC0gTGl0dGxlIGVuZGlhbiAoYWxsIG90aGVyIGZvcm1hdHMpCiAqICAgICAgICAgICAgICAgICAgIDEgLSBCaWcgZW5kaWFuIChBSUZGKQogKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIG1vZGU7Ci8qCiAqIE1vZGUgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGluZm8gYWJvdXQgdGhlIHBjbSBpbnB1dCBkYXRhLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIC0gRGVmYXVsdCBRRnMgKFExNSBmb3IgMTZiLCBRMjMgZm9yIHBhY2tlZCAyNGIsCiAqICAgICAgICAgICAgICAgICAgICAgICBRMzEgZm9yIHVucGFja2VkIDI0YiBvciAzMmIpCiAqICAgICAgICAgICAgICAgICAgMTUgLSBmb3IgMTYgYml0CiAqICAgICAgICAgICAgICAgICAgMjMgLSBmb3IgMjRiIHBhY2tlZCBvciA4LjI0IGZvcm1hdAogKi8KCXVpbnQ4X3QgICBjaGFubmVsX21hcHBpbmdbUENNX0ZPUk1BVF9NQVhfTlVNX0NIQU5ORUxfVjhdOwovKgogKiBDaGFubmVsIG1hcHBpbmcgYXJyYXkgZXhwZWN0ZWQgYXQgdGhlIGVuY29kZXIgb3V0cHV0LgogKiBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwgaSBpbnNpZGUgdGhlIGJ1ZmZlciwgd2hlcmUKICogMCBAbGUgaSA8IG51bV9jaGFubmVscy4gQWxsIHZhbGlkIHVzZWQgY2hhbm5lbHMgbXVzdCBiZSBwcmVzZW50IGF0CiAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgogKiBJZiBOYXRpdmUgbW9kZSBpcyBzZXQgZm9yIHRoZSBjaGFubmVscywgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLgogKiBAdmFsdWVzIFNlZSBTZWN0aW9uIEB4cmVme2RveDpQY21DaGFubmVsRGVmc30KICovCn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGVuY29kZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGluCiAqIHRoZSBBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1Y0IG1lZGlhIGZvcm1hdC4KICovCgpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2VuY19jZmdfdjQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MiBlbmNibGs7Cgl1aW50MTZfdCBudW1fY2hhbm5lbHM7CgkvKgoJICogTnVtYmVyIG9mIFBDTSBjaGFubmVscy4KCSAqIEB2YWx1ZXMKCSAqIC0gMCAtLSBOYXRpdmUgbW9kZQoJICogLSAxIC0tIDggY2hhbm5lbHMKCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlIG51bWJlcgoJICogb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgoJICovCgl1aW50MTZfdCAgYml0c19wZXJfc2FtcGxlOwoJLyoKCSAqIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcGVyIGNoYW5uZWwuCgkgKiBAdmFsdWVzIDE2LCAyNAoJICovCgl1aW50MzJfdCAgc2FtcGxlX3JhdGU7CgkvKgoJICogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KCSAqIEB2YWx1ZXMgMCwgODAwMCB0byA0ODAwMCBIegoJICogQSB2YWx1ZSBvZiAwIGluZGljYXRlcyB0aGUgbmF0aXZlIHNhbXBsaW5nIHJhdGUuIEVuY29kaW5nIGlzCgkgKiBwZXJmb3JtZWQgYXQgdGhlIGlucHV0IHNhbXBsaW5nIHJhdGUuCgkgKi8KCXVpbnQxNl90ICBpc19zaWduZWQ7CgkvKgoJICogRmxhZyB0aGF0IGluZGljYXRlcyB0aGUgUENNIHNhbXBsZXMgYXJlIHNpZ25lZCAoMSkuIEN1cnJlbnRseSwgb25seQoJICogc2lnbmVkIFBDTSBzYW1wbGVzIGFyZSBzdXBwb3J0ZWQuCgkgKi8KCXVpbnQxNl90ICAgIHNhbXBsZV93b3JkX3NpemU7CgkvKgoJICogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgd29yZCB0aGF0IGhvbGRzIGEgc2FtcGxlIG9mIGEgY2hhbm5lbC4KCSAqIEB2YWx1ZXMgMTYsIDI0LCAzMgoJICogMTYtYml0IHNhbXBsZXMgYXJlIGFsd2F5cyBwbGFjZWQgaW4gMTYtYml0IHdvcmRzOgoJICogc2FtcGxlX3dvcmRfc2l6ZSA9IDEuCgkgKiAyNC1iaXQgc2FtcGxlcyBjYW4gYmUgcGxhY2VkIGluIDMyLWJpdCB3b3JkcyBvciBpbiBjb25zZWN1dGl2ZQoJICogMjQtYml0IHdvcmRzLgoJICogLSBJZiBzYW1wbGVfd29yZF9zaXplID0gMzIsIDI0LWJpdCBzYW1wbGVzIGFyZSBwbGFjZWQgaW4gdGhlCgkgKiBtb3N0IHNpZ25pZmljYW50IDI0IGJpdHMgb2YgYSAzMi1iaXQgd29yZC4KCSAqIC0gSWYgc2FtcGxlX3dvcmRfc2l6ZSA9IDI0LCAyNC1iaXQgc2FtcGxlcyBhcmUgcGxhY2VkIGluCgkgKiAyNC1iaXQgd29yZHMuIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50OF90ICAgY2hhbm5lbF9tYXBwaW5nWzhdOwoJLyoKCSAqIENoYW5uZWwgbWFwcGluZyBhcnJheSBleHBlY3RlZCBhdCB0aGUgZW5jb2RlciBvdXRwdXQuCgkgKiAgQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlCgkgKiAgMCBAbGUgaSA8IG51bV9jaGFubmVscy4gQWxsIHZhbGlkIHVzZWQgY2hhbm5lbHMgbXVzdCBiZSBwcmVzZW50IGF0CgkgKiAgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuCgkgKiBJZiBOYXRpdmUgbW9kZSBpcyBzZXQgZm9yIHRoZSBjaGFubmVscywgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLgoJICogQHZhbHVlcyBTZWUgU2VjdGlvbiBAeHJlZntkb3g6UGNtQ2hhbm5lbERlZnN9CgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIGVuZGlhbm5lc3M7CgkvKgoJICogRmxhZyB0byBpbmRpY2F0ZSB0aGUgZW5kaWFubmVzcyBvZiB0aGUgcGNtIHNhbXBsZQoJICogU3VwcG9ydGVkIHZhbHVlczogMCAtIExpdHRsZSBlbmRpYW4gKGFsbCBvdGhlciBmb3JtYXRzKQoJICogICAgICAgICAgICAgICAgICAgMSAtIEJpZyBlbmRpYW4gKEFJRkYpCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIG1vZGU7CgkvKgoJICogTW9kZSB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5mbyBhYm91dCB0aGUgcGNtIGlucHV0IGRhdGEuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIC0gRGVmYXVsdCBRRnMgKFExNSBmb3IgMTZiLCBRMjMgZm9yIHBhY2tlZCAyNGIsCgkgKiAgICAgICAgICAgICAgICAgICAgICAgUTMxIGZvciB1bnBhY2tlZCAyNGIgb3IgMzJiKQoJICogICAgICAgICAgICAgICAgICAxNSAtIGZvciAxNiBiaXQKCSAqICAgICAgICAgICAgICAgICAgMjMgLSBmb3IgMjRiIHBhY2tlZCBvciA4LjI0IGZvcm1hdAoJICogICAgICAgICAgICAgICAgICAzMSAtIGZvciAyNGIgdW5wYWNrZWQgb3IgMzJiaXQKCSAqLwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMyBtZWRpYSBmb3JtYXQuCiAqLwoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9lbmNfY2ZnX3YzIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIgZW5jYmxrOwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoJLyoKCSAqIE51bWJlciBvZiBQQ00gY2hhbm5lbHMuCgkgKiBAdmFsdWVzCgkgKiAtIDAgLS0gTmF0aXZlIG1vZGUKCSAqIC0gMSAtLSA4IGNoYW5uZWxzCgkgKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBudW1iZXIKCSAqIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KCSAqLwoJdWludDE2X3QgIGJpdHNfcGVyX3NhbXBsZTsKCS8qCgkgKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsLgoJICogQHZhbHVlcyAxNiwgMjQKCSAqLwoJdWludDMyX3QgIHNhbXBsZV9yYXRlOwoJLyoKCSAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCgkgKiBAdmFsdWVzIDAsIDgwMDAgdG8gNDgwMDAgSHoKCSAqIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhlIG5hdGl2ZSBzYW1wbGluZyByYXRlLiBFbmNvZGluZyBpcwoJICogcGVyZm9ybWVkIGF0IHRoZSBpbnB1dCBzYW1wbGluZyByYXRlLgoJICovCgl1aW50MTZfdCAgaXNfc2lnbmVkOwoJLyoKCSAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiBDdXJyZW50bHksIG9ubHkKCSAqIHNpZ25lZCBQQ00gc2FtcGxlcyBhcmUgc3VwcG9ydGVkLgoJICovCgl1aW50MTZfdCAgICBzYW1wbGVfd29yZF9zaXplOwoJLyoKCSAqIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHdvcmQgdGhhdCBob2xkcyBhIHNhbXBsZSBvZiBhIGNoYW5uZWwuCgkgKiBAdmFsdWVzIDE2LCAyNCwgMzIKCSAqIDE2LWJpdCBzYW1wbGVzIGFyZSBhbHdheXMgcGxhY2VkIGluIDE2LWJpdCB3b3JkczoKCSAqIHNhbXBsZV93b3JkX3NpemUgPSAxLgoJICogMjQtYml0IHNhbXBsZXMgY2FuIGJlIHBsYWNlZCBpbiAzMi1iaXQgd29yZHMgb3IgaW4gY29uc2VjdXRpdmUKCSAqIDI0LWJpdCB3b3Jkcy4KCSAqIC0gSWYgc2FtcGxlX3dvcmRfc2l6ZSA9IDMyLCAyNC1iaXQgc2FtcGxlcyBhcmUgcGxhY2VkIGluIHRoZQoJICogbW9zdCBzaWduaWZpY2FudCAyNCBiaXRzIG9mIGEgMzItYml0IHdvcmQuCgkgKiAtIElmIHNhbXBsZV93b3JkX3NpemUgPSAyNCwgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbgoJICogMjQtYml0IHdvcmRzLiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDhfdCAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKCS8qCgkgKiBDaGFubmVsIG1hcHBpbmcgYXJyYXkgZXhwZWN0ZWQgYXQgdGhlIGVuY29kZXIgb3V0cHV0LgoJICogIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbCBpIGluc2lkZSB0aGUgYnVmZmVyLCB3aGVyZQoJICogIDAgQGxlIGkgPCBudW1fY2hhbm5lbHMuIEFsbCB2YWxpZCB1c2VkIGNoYW5uZWxzIG11c3QgYmUgcHJlc2VudCBhdAoJICogIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoJICogSWYgTmF0aXZlIG1vZGUgaXMgc2V0IGZvciB0aGUgY2hhbm5lbHMsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4KCSAqIEB2YWx1ZXMgU2VlIFNlY3Rpb24gQHhyZWZ7ZG94OlBjbUNoYW5uZWxEZWZzfQoJICovCn07CgovKiBAYnJpZWYgTXVsdGljaGFubmVsIFBDTSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHVzZWQKICogaW4gdGhlICNBU01fUEFSQU1fSURfRU5DREVDX0VOQ19DRkdfQkxLX1YyIGNvbW1hbmQuCiAqLwoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9lbmNfY2ZnX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCXVpbnQxNl90ICBudW1fY2hhbm5lbHM7Ci8qPCBOdW1iZXIgb2YgUENNIGNoYW5uZWxzLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDAgLS0gTmF0aXZlIG1vZGUgLSAxIC0tIDggTmF0aXZlIG1vZGUKICogaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgbnVtYmVyIG9mCiAqIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KICovCgoJdWludDE2X3QgIGJpdHNfcGVyX3NhbXBsZTsKLyo8IE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcGVyIGNoYW5uZWwuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgl1aW50MzJfdCAgc2FtcGxlX3JhdGU7Ci8qPCBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAsIDgwMDAgdG8gNDgwMDAgQSB2YWx1ZSBvZiAwIGluZGljYXRlcyB0aGUKICogbmF0aXZlIHNhbXBsaW5nIHJhdGUuIEVuY29kaW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgaW5wdXQgc2FtcGxpbmcKICogcmF0ZS4KICovCgoJdWludDE2X3QgIGlzX3NpZ25lZDsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiBDdXJyZW50bHksCiAqIG9ubHkgc2lnbmVkIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4KICovCgoJdWludDE2X3QgIHJlc2VydmVkOwovKjwgcmVzZXJ2ZWQgZmllbGQgZm9yIDMyIGJpdCBhbGlnbm1lbnQuIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KCgoJdWludDhfdCAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NUDMgMHgwMDAxMEJFOQojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX1YyIDB4MDAwMTBEQTYKCi8qIEB4cmVmbGFiZWwKICoge2hkcjpBc21NZWRpYUZtdERvbGJ5QWFjfSBNZWRpYSBmb3JtYXQgSUQgZm9yIHRoZQogKiBEb2xieSBBQUMgZGVjb2Rlci4gVGhpcyBmb3JtYXQgSUQgaXMgYmUgdXNlZCBpZiB0aGUgY2xpZW50IHdhbnRzCiAqIHRvIHVzZSB0aGUgRG9sYnkgQUFDIGRlY29kZXIgdG8gZGVjb2RlIE1QRUcyIGFuZCBNUEVHNCBBQUMKICogY29udGVudHMuCiAqLwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0RPTEJZX0FBQyAweDAwMDEwRDg2CgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIGF1ZGlvIGRhdGEgdHJhbnNwb3J0IHN0cmVhbSBBQUMgZm9ybWF0LiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0FEVFMgMAoKLyogRW51bWVyYXRpb24gZm9yIGxvdyBvdmVyaGVhZCBhdWRpbyBzdHJlYW0gQUFDIGZvcm1hdC4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19MT0FTICAgICAgICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgYXVkaW8gZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKICogQUFDIGZvcm1hdC4KICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURJRiAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgcmF3IEFBQyBmb3JtYXQuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXICAgIDMKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgQUFDIExBVE0gZm9ybWF0LiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0xBVE0gICA0CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0FPVF9MQyAgICAgICAgICAgICAyCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUiAgICAgICAgICAgIDUKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfUFMgICAgICAgICAgICAgMjkKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfQlNBQyAgICAgICAgICAgMjIKCnN0cnVjdCBhc21fYWFjX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CgoJCXUxNiAgICAgICAgICBhYWNfZm10X2ZsYWc7Ci8qIEJpdHN0cmVhbSBmb3JtYXQgb3B0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19BRFRTCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0xPQVMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURJRgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19SQVcKICovCgoJdTE2ICAgICAgICAgIGF1ZGlvX29ianlwZTsKLyogQXVkaW8gT2JqZWN0IFR5cGUgKEFPVCkgcHJlc2VudCBpbiB0aGUgQUFDIHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0xDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9TQlIKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0JTQUMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1BTCiAqIC0gT3RoZXJ3aXNlIC0tIE5vdCBzdXBwb3J0ZWQKICovCgoJdTE2ICAgICAgICAgIGNoYW5uZWxfY29uZmlnOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGUgQUFDIHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAxIC0tIE1vbm8KICogLSAyIC0tIFN0ZXJlbwogKiAtIDYgLS0gNS4xIGNvbnRlbnQKICovCgoJdTE2ICAgICAgICAgIHRvdGFsX3NpemVfb2ZfUENFX2JpdHM7Ci8qIGdyZWF0ZXIgb3IgZXF1YWwgdG8gemVyby4gKiAtSW4gY2FzZSBvZiBSQVcgZm9ybWF0cyBhbmQKICogY2hhbm5lbCBjb25maWcgPSAwIChQQ0UpLCBjbGllbnQgY2FuIHNlbmQgKiB0aGUgYml0IHN0cmVhbQogKiBjb250YWluaW5nIFBDRSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgKiAoaW4tYmFuZCkuCiAqIC1UaGlzIG51bWJlciBkb2VzIG5vdCBpbmNsdWRlIGJpdHMgaW5jbHVkZWQgZm9yIDMyIGJpdCBhbGlnbm1lbnQuCiAqIC1JZiB6ZXJvLCB0aGVuIHRoZSBQQ0UgaW5mbyBpcyBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUKICogYXVkaW8gLWJpdCBzdHJlYW0gJiBub3QgaW4tYmFuZC4KICovCgoJdTMyICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAsIDExMDI1LCAxMjAwMCwgMTYwMDAsIDIyMDUwLCAyNDAwMCwgMzIwMDAsCiAqIDQ0MTAwLCA0ODAwMAogKgogKiBUaGlzIGZpZWxkIG11c3QgYmUgZXF1YWwgdG8gdGhlIHNhbXBsZSByYXRlIG9mIHRoZSBBQUMtTEMKICogZGVjb2RlcidzIG91dHB1dC4gLSBGb3IgTVA0IG9yIDNHUCBjb250YWluZXJzLCB0aGlzIGlzIGluZGljYXRlZAogKiBieSB0aGUgc2FtcGxpbmdGcmVxdWVuY3lJbmRleCBmaWVsZCBpbiB0aGUgQXVkaW9TcGVjaWZpY0NvbmZpZwogKiBlbGVtZW50LiAtIEZvciBBRFRTIGZvcm1hdCwgdGhpcyBpcyBpbmRpY2F0ZWQgYnkgdGhlCiAqIHNhbXBsaW5nRnJlcXVlbmN5SW5kZXggaW4gdGhlIEFEVFMgZml4ZWQgaGVhZGVyLiAtIEZvciBBRElGCiAqIGZvcm1hdCwgdGhpcyBpcyBpbmRpY2F0ZWQgYnkgdGhlIHNhbXBsaW5nRnJlcXVlbmN5SW5kZXggaW4gdGhlCiAqIHByb2dyYW1fY29uZmlnX2VsZW1lbnQgcHJlc2VudCBpbiB0aGUgQURJRiBoZWFkZXIuCiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYWFjX2VuY19jZmdfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoKCXUzMiAgICAgICAgICBiaXRfcmF0ZTsKCS8qIEVuY29kaW5nIHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLiAqLwoJdTMyICAgICAgICAgIGVuY19tb2RlOwovKiBFbmNvZGluZyBtb2RlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19BT1RfTEMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19BT1RfUFMKICovCgl1MTYgICAgICAgICAgYWFjX2ZtdF9mbGFnOwovKiBBQUMgZm9ybWF0IGZsYWcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0FEVFMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXCiAqLwoJdTE2ICAgICAgICAgIGNoYW5uZWxfY2ZnOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gZW5jb2RlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTmF0aXZlIG1vZGUKICogLSAxIC0tIE1vbm8KICogLSAyIC0tIFN0ZXJlbwogKiAtIE90aGVyIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZC4KICogQG5vdGUxaGFuZyBUaGUgZUFBQysgZW5jb2RlciBtb2RlIHN1cHBvcnRzIG9ubHkgc3RlcmVvLgogKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZQogKiBudW1iZXIgb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgogKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogLSAwIC0tIE5hdGl2ZSBtb2RlIC0gRm9yIG90aGVyIHZhbHVlcywKICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKICogc2FtcGxpbmcgcmF0ZSBhdCB0aGUgaW5wdXQuCiAqIFRoZSBzYW1wbGluZyByYXRlIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMgMHgwMDAxMEJGNwojZGVmaW5lIEFTTV9NRURJQV9GTVRfRzcxMV9NTEFXX0ZTIDB4MDAwMTBDMkUKCnN0cnVjdCBhc21fZzcxMV9lbmNfY2ZnX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIgZW5jYmxrOwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyoKICogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogODAwMCwgMTYwMDAgSHoKICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV92b3JiaXNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoJdTMyICAgICAgICAgIGJpdF9zdHJlYW1fZm10OwovKiBCaXQgc3RyZWFtIGZvcm1hdC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIFJhdyBiaXRzdHJlYW0KICogLSAxIC0tIFRyYW5zY29kZWQgYml0c3RyZWFtCiAqCiAqIFRyYW5zY29kZWQgYml0c3RyZWFtIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgdGhlIGZyYW1lIGFzIHRoZSBmaXJzdAogKiB3b3JkIGluIGVhY2ggZnJhbWUuCiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZmxhY19mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTE2IGlzX3N0cmVhbV9pbmZvX3ByZXNlbnQ7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHN0cmVhbSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50IGluIHRoZSBGTEFDIGZvcm1hdAogKiBibG9jay4KICoKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIFN0cmVhbSBpbmZvcm1hdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGlzIG1lc3NhZ2UKICogLSAxIC0tIFN0cmVhbSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50IGluIHRoaXMgbWVzc2FnZQogKgogKiBXaGVuIHNldCB0byAxLCB0aGUgRkxBQyBiaXRzdHJlYW0gd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYnkgdGhlCiAqIGNsaWVudCwgYW5kIG90aGVyIGZpZWxkcyBpbiB0aGUgRkxBQyBmb3JtYXQgYmxvY2sgY2FuIGJlIHJlYWQgYnkgdGhlCiAqIGRlY29kZXIgdG8gZ2V0IG1ldGFkYXRhIHN0cmVhbSBpbmZvcm1hdGlvbi4KICovCgoJdTE2IG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIGZvciBkZWNvZGluZy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAyCiAqLwoKCXUxNiBtaW5fYmxrX3NpemU7Ci8qIE1pbmltdW0gYmxvY2sgc2l6ZSAoaW4gc2FtcGxlcykgdXNlZCBpbiB0aGUgc3RyZWFtLiBJdCBtdXN0IGJlIGxlc3MKICogdGhhbiBvciBlcXVhbCB0byBtYXhfYmxrX3NpemUuCiAqLwoKCXUxNiBtYXhfYmxrX3NpemU7Ci8qIE1heGltdW0gYmxvY2sgc2l6ZSAoaW4gc2FtcGxlcykgdXNlZCBpbiB0aGUgc3RyZWFtLiBJZiB0aGUKICogbWluaW11bSBibG9jayBzaXplIGVxdWFscyB0aGUgbWF4aW11bSBibG9jayBzaXplLCBhIGZpeGVkIGJsb2NrCiAqIHNpemUgc3RyZWFtIGlzIGltcGxpZWQuCiAqLwoKCXUxNiBtZDVfc3VtWzhdOwovKiBNRDUgc2lnbmF0dXJlIGFycmF5IG9mIHRoZSB1bmVuY29kZWQgYXVkaW8gZGF0YS4gVGhpcyBhbGxvd3MgdGhlCiAqIGRlY29kZXIgdG8gZGV0ZXJtaW5lIGlmIGFuIGVycm9yIGV4aXN0cyBpbiB0aGUgYXVkaW8gZGF0YSwgZXZlbiB3aGVuCiAqIHRoZSBlcnJvciBkb2VzIG5vdCByZXN1bHQgaW4gYW4gaW52YWxpZCBiaXRzdHJlYW0uCiAqLwoKCXUzMiBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogODAwMCB0byA0ODAwMCBIegogKi8KCgl1MzIgbWluX2ZyYW1lX3NpemU7Ci8qIE1pbmltdW0gZnJhbWUgc2l6ZSB1c2VkIGluIHRoZSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gPiAwIGJ5dGVzCiAqIC0gMCAtLSBUaGUgdmFsdWUgaXMgdW5rbm93bgogKi8KCgl1MzIgbWF4X2ZyYW1lX3NpemU7Ci8qIE1heGltdW0gZnJhbWUgc2l6ZSB1c2VkIGluIHRoZSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0tID4gMCBieXRlcwogKiAtLSAwIC4gVGhlIHZhbHVlIGlzIHVua25vd24KICovCgoJdTE2IHNhbXBsZV9zaXplOwovKiBCaXRzIHBlciBzYW1wbGUuU3VwcG9ydGVkIHZhbHVlczogOCwgMTYgKi8KCgl1MTYgcmVzZXJ2ZWQ7Ci8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvCiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYWxhY19mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTMyIGZyYW1lX2xlbmd0aDsKCXU4IGNvbXBhdGlibGVfdmVyc2lvbjsKCXU4IGJpdF9kZXB0aDsKCXU4IHBiOwoJdTggbWI7Cgl1OCBrYjsKCXU4IG51bV9jaGFubmVsczsKCXUxNiBtYXhfcnVuOwoJdTMyIG1heF9mcmFtZV9ieXRlczsKCXUzMiBhdmdfYml0X3JhdGU7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgY2hhbm5lbF9sYXlvdXRfdGFnOwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZzcxMV9kZWNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoJdTMyIHNhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9hcGVfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoKCXUxNiBjb21wYXRpYmxlX3ZlcnNpb247Cgl1MTYgY29tcHJlc3Npb25fbGV2ZWw7Cgl1MzIgZm9ybWF0X2ZsYWdzOwoJdTMyIGJsb2Nrc19wZXJfZnJhbWU7Cgl1MzIgZmluYWxfZnJhbWVfYmxvY2tzOwoJdTMyIHRvdGFsX2ZyYW1lczsKCXUxNiBiaXRzX3Blcl9zYW1wbGU7Cgl1MTYgbnVtX2NoYW5uZWxzOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIHNlZWtfdGFibGVfcHJlc2VudDsKCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2RzZF9mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTE2IG51bV92ZXJzaW9uOwoJdTE2IGlzX2JpdHdpc2VfYmlnX2VuZGlhbjsKCXUxNiBkc2RfY2hhbm5lbF9ibG9ja19zaXplOwoJdTE2IG51bV9jaGFubmVsczsKCXU4ICBjaGFubmVsX21hcHBpbmdbOF07Cgl1MzIgZHNkX2RhdGFfcmF0ZTsKCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlMgICAgICAgICAgICAgICAgICAweDAwMDEwQkVCCgovKiBFbnVtZXJhdGlvbiBmb3IgNC43NSBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTVI0NzUgICAgICAgICAgICAgICAgMAoKLyogRW51bWVyYXRpb24gZm9yIDUuMTUga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01SNTE1ICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciA1LjkwIGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NTVI1OSAgICAgICAgICAgICAgICAyCgovKiBFbnVtZXJhdGlvbiBmb3IgNi43MCBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTU1SNjcgICAgICAgICAgICAgICAgMwoKLyogRW51bWVyYXRpb24gZm9yIDcuNDAga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01NUjc0ICAgICAgICAgICAgICAgIDQKCi8qIEVudW1lcmF0aW9uIGZvciA3Ljk1IGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NTVI3OTUgICAgICAgICAgICAgICA1CgovKiBFbnVtZXJhdGlvbiBmb3IgMTAuMjAga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01NUjEwMiAgICAgICAgICAgICAgIDYKCi8qIEVudW1lcmF0aW9uIGZvciAxMi4yMCBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTU1SMTIyICAgICAgICAgICAgICAgNwoKLyogRW51bWVyYXRpb24gZm9yIEFNUi1OQiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBtb2RlIG9mZi4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX09GRiAgICAgICAgICAgICAgICAgICAgIDAKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRFRYIG1vZGUgVkFEMS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX1ZBRDEgICAgICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRFRYIG1vZGUgVkFEMi4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX1ZBRDIgICAgICAgICAgICAgICAgICAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRFRYIG1vZGUgYXV0by4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX0FVVE8gICAgICAgICAgICAgICAgICAgIDMKCnN0cnVjdCBhc21fYW1ybmJfZW5jX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7CgoJdTE2ICAgICAgICAgIGVuY19tb2RlOwovKiBBTVItTkIgZW5jb2RpbmcgcmF0ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogVXNlIHRoZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFXyoKICogbWFjcm9zCiAqLwoKCXUxNiAgICAgICAgICBkdHhfbW9kZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgRFRYIG1vZGUgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9PRkYKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9WQUQxCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTICAgICAgICAgICAgICAgICAgMHgwMDAxMEJFQwoKLyogRW51bWVyYXRpb24gZm9yIDYuNiBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVI2NiAgICAgICAgICAgICAgICAgMAoKLyogRW51bWVyYXRpb24gZm9yIDguODUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SODg1ICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciAxMi42NSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIxMjY1ICAgICAgICAgICAgICAgMgoKLyogRW51bWVyYXRpb24gZm9yIDE0LjI1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjE0MjUgICAgICAgICAgICAgICAzCgovKiBFbnVtZXJhdGlvbiBmb3IgMTUuODUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMTU4NSAgICAgICAgICAgICAgIDQKCi8qIEVudW1lcmF0aW9uIGZvciAxOC4yNSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIxODI1ICAgICAgICAgICAgICAgNQoKLyogRW51bWVyYXRpb24gZm9yIDE5Ljg1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjE5ODUgICAgICAgICAgICAgICA2CgovKiBFbnVtZXJhdGlvbiBmb3IgMjMuMDUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMjMwNSAgICAgICAgICAgICAgIDcKCi8qIEVudW1lcmF0aW9uIGZvciAyMy44NSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIyMzg1ICAgICAgICAgICAgICAgOAoKc3RydWN0IGFzbV9hbXJ3Yl9lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCgl1MTYgICAgICAgICAgZW5jX21vZGU7Ci8qIEFNUi1XQiBlbmNvZGluZyByYXRlLgogKiBTdXVwcG9ydGVkIHZhbHVlczoKICogVXNlIHRoZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFXyoKICogbWFjcm9zCiAqLwoKCXUxNiAgICAgICAgICBkdHhfbW9kZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgRFRYIG1vZGUgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9PRkYKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9WQUQxCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEJFRAoKLyogRW51bWVyYXRpb24gZm9yIDE0LjQga2JwcyBWMTNLIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTQ0MCAgICAgICAgICAgICAgICAwCgovKiBFbnVtZXJhdGlvbiBmb3IgMTIuMiBrYnBzIFYxM0sgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVIxMjIwICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciAxMS4yIGticHMgVjEzSyBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjExMjAgICAgICAgICAgICAgICAgMgoKLyogRW51bWVyYXRpb24gZm9yIDkuMCBrYnBzIFYxM0sgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVI5MCAgICAgICAgICAgICAgICAgIDMKCi8qIEVudW1lcmF0aW9uIGZvciA3LjIga2JwcyBWMTNLIGVFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjcyMCAgICAgICAgICAgICAgICAgNAoKLyogRW51bWVyYXRpb24gZm9yIDEvOCB2b2NvZGVyIHJhdGUuKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1ZPQ19PTkVfRUlHSFRIX1JBVEUgICAgICAgICAgMQoKLyogRW51bWVyYXRpb24gZm9yIDEvNCB2b2NvZGVyIHJhdGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WT0NfT05FX0ZPVVJUSF9SQVRFICAgICAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciAxLzIgdm9jb2RlciByYXRlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVk9DX0hBTEZfUkFURSAgICAgICAgICAgICAzCgovKiBFbnVtZXJhdGlvbiBmb3IgZnVsbCB2b2NvZGVyIHJhdGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WT0NfRlVMTF9SQVRFICAgICAgICAgICAgIDQKCnN0cnVjdCBhc21fdjEza19lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCQl1MTYgICAgICAgICAgbWF4X3JhdGU7Ci8qIE1heGltdW0gYWxsb3dlZCBlbmNvZGVyIGZyYW1lIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9FSUdIVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRk9VUlRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfSEFMRl9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURQogKi8KCgl1MTYgICAgICAgICAgbWluX3JhdGU7Ci8qIE1pbmltdW0gYWxsb3dlZCBlbmNvZGVyIGZyYW1lIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9FSUdIVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRk9VUlRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfSEFMRl9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURQogKi8KCgl1MTYgICAgICAgICAgcmVkdWNlZF9yYXRlX2NtZDsKLyogUmVkdWNlZCByYXRlIGNvbW1hbmQsIHVzZWQgdG8gY2hhbmdlCiAqIHRoZSBhdmVyYWdlIGJpdHJhdGUgb2YgdGhlIFYxM0sKICogdm9jb2Rlci4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTQ0MCAoRGVmYXVsdCkKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTIyMAogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVIxMTIwCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjkwCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjcyMAogKi8KCgl1MTYgICAgICAgICAgcmF0ZV9tb2RfY21kOwovKiBSYXRlIG1vZHVsYXRpb24gY29tbWFuZC4gRGVmYXVsdCA9IDAuCiAqLSBJZiBiaXQgMD0xLCByYXRlIGNvbnRyb2wgaXMgZW5hYmxlZC4KICotIElmIGJpdCAxPTEsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBmdWxsIHJhdGUKICoJCQlmcmFtZXMgaXMgbGltaXRlZCB3aXRoIG51bWJlcnMgc3VwcGxpZWQgaW4KICoJCQliaXRzIDIgdG8gMTAuCiAqLSBJZiBiaXQgMT0wLCB0aGUgbWluaW11bSBudW1iZXIgb2Ygbm9uLWZ1bGwgcmF0ZSBmcmFtZXMKICoJCQlpbiBiZXR3ZWVuIHR3byBmdWxsIHJhdGUgZnJhbWVzIGlzIGZvcmNlZCB0bwogKiB0aGUgbnVtYmVyIHN1cHBsaWVkIGluIGJpdHMgMiB0byAxMC4gSW4gYm90aCBjYXNlcywgaWYgbmVjZXNzYXJ5LAogKiBoYWxmIHJhdGUgaXMgdXNlZCB0byBzdWJzdGl0dXRlIGZ1bGwgcmF0ZS4gLSBCaXRzIDE1IHRvIDEwIGFyZQogKiByZXNlcnZlZCBhbmQgbXVzdCBhbGwgYmUgc2V0IHRvIHplcm8uCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9FVlJDX0ZTICAgICAgICAgICAgICAgICAgIDB4MDAwMTBCRUUKCi8qICBFVlJDIGVuY29kZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUKICogI0FTTV9QQVJBTV9JRF9FTkNERUNfRU5DX0NGR19CTEtfVjIgY29tbWFuZC4KICovCnN0cnVjdCBhc21fZXZyY19lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCXUxNiAgICAgICAgICBtYXhfcmF0ZTsKLyogTWF4aW11bSBhbGxvd2VkIGVuY29kZXIgZnJhbWUgcmF0ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfT05FX0VJR0hUSF9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9GT1VSVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19IQUxGX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfRlVMTF9SQVRFCiAqLwoKCXUxNiAgICAgICAgICBtaW5fcmF0ZTsKLyogTWluaW11bSBhbGxvd2VkIGVuY29kZXIgZnJhbWUgcmF0ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfT05FX0VJR0hUSF9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9GT1VSVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19IQUxGX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfRlVMTF9SQVRFCiAqLwoKCXUxNiAgICAgICAgICByYXRlX21vZF9jbWQ7Ci8qIFJhdGUgbW9kdWxhdGlvbiBjb21tYW5kLiBEZWZhdWx0OiAwLgogKiAtIElmIGJpdCAwPTEsIHJhdGUgY29udHJvbCBpcyBlbmFibGVkLgogKiAtIElmIGJpdCAxPTEsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBmdWxsIHJhdGUgZnJhbWVzCiAqIGlzIGxpbWl0ZWQgd2l0aCBudW1iZXJzIHN1cHBsaWVkIGluIGJpdHMgMiB0byAxMC4KICoKICogLSBJZiBiaXQgMT0wLCB0aGUgbWluaW11bSBudW1iZXIgb2Ygbm9uLWZ1bGwgcmF0ZSBmcmFtZXMgaW4KICogYmV0d2VlbiB0d28gZnVsbCByYXRlIGZyYW1lcyBpcyBmb3JjZWQgdG8gdGhlIG51bWJlciBzdXBwbGllZCBpbgogKiBiaXRzIDIgdG8gMTAuIEluIGJvdGggY2FzZXMsIGlmIG5lY2Vzc2FyeSwgaGFsZiByYXRlIGlzIHVzZWQgdG8KICogc3Vic3RpdHV0ZSBmdWxsIHJhdGUuCiAqCiAqIC0gQml0cyAxNSB0byAxMCBhcmUgcmVzZXJ2ZWQgYW5kIG11c3QgYWxsIGJlIHNldCB0byB6ZXJvLgogKi8KCgl1MTYgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZC4gQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfV01BX1YxMFBST19WMiAgICAgICAgICAgICAgICAweDAwMDEwREE3CgpzdHJ1Y3QgYXNtX3dtYXByb3YxMF9mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTE2ICAgICAgICAgIGZtdGFnOwovKiBXTUEgZm9ybWF0IHR5cGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMHgxNjIgLS0gV01BIDkgUHJvCiAqIC0gMHgxNjMgLS0gV01BIDkgUHJvIExvc3NsZXNzCiAqIC0gMHgxNjYgLS0gV01BIDEwIFBybwogKiAtIDB4MTY3IC0tIFdNQSAxMCBQcm8gTG9zc2xlc3MKICovCgoJdTE2ICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIGVuY29kZWQgaW4gdGhlIGlucHV0IHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZCAoaW4gSGVydHopLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMTAyNSwgMTYwMDAsIDIyMDUwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwLAogKiA4ODIwMCwgOTYwMDAKICovCgoJdTMyICAgICAgICAgIGF2Z19ieXRlc19wZXJfc2VjOwovKiBCaXRyYXRlIGV4cHJlc3NlZCBhcyB0aGUgYXZlcmFnZSBieXRlcyBwZXIgc2Vjb25kLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyMDAwIHRvIDk2MDAwCiAqLwoKCXUxNiAgICAgICAgICBibGtfYWxpZ247Ci8qIFNpemUgb2YgdGhlIGJpdHN0cmVhbSBwYWNrZXQgc2l6ZSBpbiBieXRlcy4gV01BIFBybyBmaWxlcwogKiBoYXZlIGEgcGF5bG9hZCBvZiBvbmUgYmxvY2sgcGVyIGJpdHN0cmVhbSBwYWNrZXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEBsZSAxMzM3NgogKi8KCgl1MTYgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIGluIHRoZSBlbmNvZGVkIFdNQSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgl1MzIgICAgICAgICAgY2hhbm5lbF9tYXNrOwovKiBCaXQtcGFja2VkIGRvdWJsZSB3b3JkICgzMi1iaXRzKSB0aGF0IGluZGljYXRlcyB0aGUKICogcmVjb21tZW5kZWQgc3BlYWtlciBwb3NpdGlvbnMgZm9yIGVhY2ggc291cmNlIGNoYW5uZWwuCiAqLwoKCXUxNiAgICAgICAgICBlbmNfb3B0aW9uczsKLyogQml0LXBhY2tlZCB3b3JkIHdpdGggdmFsdWVzIHRoYXQgaW5kaWNhdGUgd2hldGhlciBjZXJ0YWluCiAqIGZlYXR1cmVzIG9mIHRoZSBiaXRzdHJlYW0gYXJlIHVzZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gMHgwMDAxIC0tIEVOQ09QVDNfUFVSRV9MT1NTTEVTUyAtIDB4MDAwNiAtLQogKiBFTkNPUFQzX0ZSTV9TSVpFX01PRCAtIDB4MDAzOCAtLSBFTkNPUFQzX1NVQkZSTV9ESVYgLSAweDAwNDAgLS0KICogRU5DT1BUM19XUklURV9GUkFNRVNJWkVfSU5fSERSIC0gMHgwMDgwIC0tCiAqIEVOQ09QVDNfR0VORVJBVEVfRFJDX1BBUkFNUyAtIDB4MDEwMCAtLSBFTkNPUFQzX1JUTUJJVFMKICovCgoKCXUxNiAgICAgICAgICB1c0FkdmFuY2VkRW5jb2RlT3B0OwoJLyogQWR2YW5jZWQgZW5jb2Rpbmcgb3B0aW9uLiAgKi8KCgl1MzIgICAgICAgICAgYWR2YW5jZWRfZW5jX29wdGlvbnMyOwoJLyogQWR2YW5jZWQgZW5jb2Rpbmcgb3B0aW9uIDIuICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX1dNQV9WOV9WMiAgICAgICAgICAgICAgICAgICAgMHgwMDAxMERBOApzdHJ1Y3QgYXNtX3dtYXN0ZHY5X2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUxNiAgICAgICAgICBmbXRhZzsKLyogV01BIGZvcm1hdCB0YWcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDB4MTYxIChXTUEgOSBzdGFuZGFyZCkKICovCgoJdTE2ICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEsIDIKICovCgoJdTMyICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDQ4MDAwCiAqLwoKCXUzMiAgICAgICAgICBhdmdfYnl0ZXNfcGVyX3NlYzsKCS8qIEJpdHJhdGUgZXhwcmVzc2VkIGFzIHRoZSBhdmVyYWdlIGJ5dGVzIHBlciBzZWNvbmQuICovCgoJdTE2ICAgICAgICAgIGJsa19hbGlnbjsKLyogQmxvY2sgYWxpZ24uIEFsbCBXTUEgZmlsZXMgd2l0aCBhIG1heGltdW0gcGFja2V0IHNpemUgb2YKICogMTMzNzYgYXJlIHN1cHBvcnRlZC4KICovCgoKCXUxNiAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgaW4gdGhlIG91dHB1dC4KICogU3VwcG9ydGVkIHZhbHVlczogMTYKICovCgoJdTMyICAgICAgICAgIGNoYW5uZWxfbWFzazsKLyogQ2hhbm5lbCBtYXNrLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDMgLS0gU3RlcmVvIChmcm9udCBsZWZ0L2Zyb250IHJpZ2h0KQogKiAtIDQgLS0gTW9ubyAoY2VudGVyKQogKi8KCgl1MTYgICAgICAgICAgZW5jX29wdGlvbnM7CgkvKiBPcHRpb25zIHVzZWQgZHVyaW5nIGVuY29kaW5nLiAqLwoKCXUxNiAgICAgICAgICByZXNlcnZlZDsKCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfV01BX1Y4ICAgICAgICAgICAgICAgICAgICAweDAwMDEwRDkxCgpzdHJ1Y3QgYXNtX3dtYXN0ZHY4X2VuY19jZmcgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoJdTMyICAgICAgICAgIGJpdF9yYXRlOwoJLyogRW5jb2RpbmcgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuICovCgoJdTMyICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTmF0aXZlIG1vZGUKICogLSBPdGhlciBTdXBwb3J0ZWQgdmFsdWVzIGFyZSAyMjA1MCwgMzIwMDAsIDQ0MTAwLCBhbmQgNDgwMDAuCiAqCiAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCiAqIHNhbXBsaW5nIHJhdGUgYXQgdGhlIGlucHV0LgogKiBUaGUgc2FtcGxpbmcgcmF0ZSBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgogKi8KCgl1MTYgICAgICAgICAgY2hhbm5lbF9jZmc7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0byBlbmNvZGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBOYXRpdmUgbW9kZQogKiAtIDEgLS0gTW9ubwogKiAtIDIgLS0gU3RlcmVvCiAqIC0gT3RoZXIgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkLgogKgogKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZQogKiBudW1iZXIgb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgogKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCiAqLwoKCXUxNiAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkLiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwoJfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJfV0JfUExVU19WMiAgICAgICAgICAgICAgIDB4MDAwMTBEQTkKCnN0cnVjdCBhc21fYW1yd2JwbHVzX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUzMiAgICAgICAgICBhbXJfZnJhbWVfZm10OwovKiBBTVIgZnJhbWUgZm9ybWF0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDYgLS0gVHJhbnNwb3J0IEludGVyZmFjZSBGb3JtYXQgKFRJRikKICogLSBBbnkgb3RoZXIgdmFsdWUgLS0gRmlsZSBzdG9yYWdlIGZvcm1hdCAoRlNGKQogKgogKiBUSUYgc3RyZWFtIGNvbnRhaW5zIDItYnl0ZSBoZWFkZXIgZm9yIGVhY2ggZnJhbWUgd2l0aGluIHRoZQogKiBzdXBlcmZyYW1lLiBGU0Ygc3RyZWFtIGNvbnRhaW5zIG9uZSAyLWJ5dGUgaGVhZGVyIHBlciBzdXBlcmZyYW1lLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUMzICAgICAgICAgICAgICAgICAgICAweDAwMDEwREVFCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9FQUMzICAgICAgICAgICAgICAgICAgIDB4MDAwMTBERUYKI2RlZmluZSBBU01fTUVESUFfRk1UX0RUUyAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEQ4OAojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVAyICAgICAgICAgICAgICAgICAgICAweDAwMDEwREU5CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9GTEFDICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDMTYKI2RlZmluZSBBU01fTUVESUFfRk1UX0FMQUMgICAgICAgICAgICAgICAgICAgMHgwMDAxMkYzMQojZGVmaW5lIEFTTV9NRURJQV9GTVRfVk9SQklTICAgICAgICAgICAgICAgICAweDAwMDEwQzE1CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BUEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMTJGMzIKI2RlZmluZSBBU01fTUVESUFfRk1UX0RTRCAgICAgICAgICAgICAgICAgICAgMHgwMDAxMkYzRQojZGVmaW5lIEFTTV9NRURJQV9GTVRfVFJVRUhEICAgICAgICAgICAgICAgICAweDAwMDEzMjE1Ci8qIDB4MCBpcyB1c2VkIGZvciBmb21hdCBJRCBzaW5jZSBBRFNQIGR5bmFtaWNhbGx5IGRldGVybWluZXMgdGhlCiAqIGZvcm1hdCBlbmNhcHN1bGF0ZWQgaW4gdGhlIElFQzYxOTM3IChjb21wcmVzc2VkKSBvciBJRUM2MDk1OAogKiAocGNtKSBwYWNrZXRzLgogKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0lFQyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAoKLyogTWVkaWEgZm9ybWF0IElEIGZvciBhZGFwdGl2ZSB0cmFuc2Zvcm0gYWNvdXN0aWMgY29kaW5nLiBUaGlzCiAqIElEIGlzIHVzZWQgYnkgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgY29tbWFuZAogKiBvbmx5LgogKi8KCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BVFJBQyAgICAgICAgICAgICAgICAgIDB4MDAwMTBEODkKCi8qIE1lZGlhIGZvcm1hdCBJRCBmb3IgbWV0YWRhdGEtZW5oYW5jZWQgYXVkaW8gdHJhbnNtaXNzaW9uLgogKiBUaGlzIElEIGlzIHVzZWQgYnkgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQKICogY29tbWFuZCBvbmx5LgogKi8KCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NQVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBEOEEKCi8qICBhZHNwX21lZGlhX2ZtdC5oICovCgojZGVmaW5lIEFTTV9EQVRBX0NNRF9XUklURV9WMiAweDAwMDEwREFCCgpzdHJ1Y3QgYXNtX2RhdGFfY21kX3dyaXRlX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9hZGRyX2xzdzsKLyogVGhlIDY0IGJpdCBhZGRyZXNzIG1zdy1sc3cgc2hvdWxkIGJlIGEgdmFsaWQsIG1hcHBlZCBhZGRyZXNzLgogKiA2NCBiaXQgYWRkcmVzcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiAzMiBieXRlcwogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9tc3c7Ci8qIFRoZSA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IHNob3VsZCBiZSBhIHZhbGlkLCBtYXBwZWQgYWRkcmVzcy4KICogNjQgYml0IGFkZHJlc3Mgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuCiAqIC1BZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBkZWNvZGVkLgogKiBUaGUgYnVmZmVyIHNob3VsZCBiZSBhbGlnbmVkIHRvIGEgMzIgYnl0ZSBib3VuZGFyeS4KICogLUluIHRoZSBjYXNlIG9mIDMyIGJpdCBTaGFyZWQgbWVtb3J5IGFkZHJlc3MsIG1zdyBmaWVsZCBtdXN0CiAqIC1iZSBzZXQgdG8gemVyby4KICogLUluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQgNAogKiAtb2YgbXN3IG11c3QgYmUgc2V0IHRvIHplcm8uCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIG1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IERTUCB0aHJvdWdoCiAqIEFTTV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgYnVmX3NpemU7Ci8qIE51bWJlciBvZiB2YWxpZCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciBmb3IgZGVjb2RpbmcuIFRoZQogKiBmaXJzdCBieXRlIHN0YXJ0cyBhdCBidWZfYWRkci4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2VxX2lkOwoJLyogT3B0aW9uYWwgYnVmZmVyIHNlcXVlbmNlIElELiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzIG9mIHRoZQogKiBmaXJzdCBidWZmZXIgc2FtcGxlLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyBvZiB0aGUKICogZmlyc3QgYnVmZmVyIHNhbXBsZS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIEJpdGZpZWxkIG9mIGZsYWdzLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMSAtLSBWYWxpZCB0aW1lc3RhbXAuCiAqIC0gMCAtLSBJbnZhbGlkIHRpbWVzdGFtcC4KICogLSBVc2UgI0FTTV9CSVRfTUFTS0lNRVNUQU1QX1ZBTElEX0ZMQUcgYXMgdGhlIGJpdG1hc2sgYW5kCiAqICNBU01fU0hJRlRJTUVTVEFNUF9WQUxJRF9GTEFHIGFzIHRoZSBzaGlmdCB2YWx1ZSB0byBzZXQgdGhpcyBiaXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAzMDoKICogLSAxIC0tIExhc3QgYnVmZmVyLgogKiAtIDAgLS0gTm90IHRoZSBsYXN0IGJ1ZmZlci4KICoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDI5OgogKiAtIDEgLS0gQ29udGludWUgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSBwcmV2aW91cyBidWZmZXIuCiAqIC0gMCAtLSBUaW1lc3RhbXAgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIG5vdCByZWxhdGVkCiAqIHRvIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHByZXZpb3VzIGJ1ZmZlci4KICogLSBVc2UgI0FTTV9CSVRfTUFTS1NfQ09OVElOVUVfRkxBRyBhbmQgI0FTTV9TSElGVFNfQ09OVElOVUVfRkxBRwogKiB0byBzZXQgdGhpcyBiaXQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCA0OgogKiAtIDEgLS0gRW5kIG9mIHRoZSBmcmFtZS4KICogLSAwIC0tIE5vdCB0aGUgZW5kIG9mIGZyYW1lLCBvciB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBrbm93bi4KICogLSBVc2UgI0FTTV9CSVRfTUFTS19FT0ZfRkxBRyBhcyB0aGUgYml0bWFzayBhbmQgI0FTTV9TSElGVF9FT0ZfRkxBRwogKiBhcyB0aGUgc2hpZnQgdmFsdWUgdG8gc2V0IHRoaXMgYml0LgogKgogKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQgYW5kIG11c3QgYmUgc2V0IHRvIDAuCiAqCiAqIElmIGJpdCAzMT0wIGFuZCBiaXQgMjk9MTogVGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3Qgc2FtcGxlIGluCiAqIHRoaXMgYnVmZmVyIGNvbnRpbnVlcyBmcm9tIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3Qgc2FtcGxlIGluCiAqIHRoZSBwcmV2aW91cyBidWZmZXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIGJ1ZmZlciAoaS5lLiwgdGhpcwogKiBpcyB0aGUgZmlyc3QgYnVmZmVyIHNlbnQgYWZ0ZXIgb3BlbmluZyB0aGUgc3RyZWFtIG9yIGFmdGVyIGEKICogZmx1c2ggb3BlcmF0aW9uKSwgb3IgaWYgdGhlIHByZXZpb3VzIGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQKICogdGltZXN0YW1wLCB0aGUgc2FtcGxlcyBpbiB0aGUgY3VycmVudCBidWZmZXIgYWxzbyBkbyBub3QgaGF2ZSBhCiAqIHZhbGlkIHRpbWVzdGFtcC4gVGhleSBhcmUgcGxheWVkIG91dCBhcyBzb29uIGFzIHBvc3NpYmxlLgogKgogKgogKiBJZiBiaXQgMzE9MCBhbmQgYml0IDI5PTA6IE5vIHRpbWVzdGFtcCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIGZpcnN0IHNhbXBsZSBpbiB0aGlzIGJ1ZmZlci4gVGhlIHNhbXBsZXMgYXJlIHBsYXllZCBvdXQgYXMgc29vbgogKiBhcyBwb3NzaWJsZS4KICoKICoKICogSWYgYml0IDMxPTEgYW5kIGJpdCAyOSBpcyBpZ25vcmVkOiBUaGUgdGltZXN0YW1wIHNwZWNpZmllZCBpbgogKiB0aGlzIHBheWxvYWQgaXMgaG9ub3JlZC4KICoKICoKICogSWYgYml0IDMwPTA6IE5vdCB0aGUgbGFzdCBidWZmZXIgaW4gdGhlIHN0cmVhbS4gVGhpcyBpcyB1c2VmdWwKICogaW4gcmVtb3ZpbmcgdHJhaWxpbmcgc2FtcGxlcy4KICoKICoKICogRm9yIGJpdCA0OiBUaGUgY2xpZW50IGNhbiBzZXQgdGhpcyBmbGFnIGZvciBldmVyeSBidWZmZXIgc2VudCBpbgogKiB3aGljaCB0aGUgbGFzdCBieXRlIGlzIHRoZSBlbmQgb2YgYSBmcmFtZS4gSWYgdGhpcyBmbGFnIGlzIHNldCwKICogdGhlIGJ1ZmZlciBjYW4gY29udGFpbiBkYXRhIGZyb20gbXVsdGlwbGUgZnJhbWVzLCBidXQgaXQgc2hvdWxkCiAqIGFsd2F5cyBlbmQgYXQgYSBmcmFtZSBib3VuZGFyeS4gUmVzdHJpY3Rpb25zIGFsbG93IHRoZSBhRFNQIHRvCiAqIGRldGVjdCBhbiBlbmQgb2YgZnJhbWUgd2l0aG91dCByZXF1aXJpbmcgYWRkaXRpb25hbCBwcm9jZXNzaW5nLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9EQVRBX0NNRF9SRUFEX1YyIDB4MDAwMTBEQUMKCnN0cnVjdCBhc21fZGF0YV9jbWRfcmVhZF92MiB7CglzdHJ1Y3QgYXByX2hkciAgICAgICBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9sc3c7Ci8qIHRoZSA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IHNob3VsZCBiZSBhIHZhbGlkIG1hcHBlZCBhZGRyZXNzCiAqIGFuZCBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiAzMiBieXRlcwogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwovKiB0aGUgNjQgYml0IGFkZHJlc3MgbXN3LWxzdyBzaG91bGQgYmUgYSB2YWxpZCBtYXBwZWQgYWRkcmVzcwogKiBhbmQgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuCiAqIC0gQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdoZXJlIHRoZSBEU1AgcHV0cyB0aGUgZW5jb2RlZCBkYXRhLAogKiBwb3RlbnRpYWxseSwgYXQgYW4gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgdU9mZnNldCBmaWVsZCBpbgogKiBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkUgc3RydWN0dXJlLiBUaGUgYnVmZmVyIHNob3VsZCBiZSBhbGlnbmVkCiAqIHRvIGEgMzIgYnl0ZSBib3VuZGFyeS4KICogLSBJbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgZmllbGQgbXVzdAogKiAtIGJlIHNldCB0byB6ZXJvLgogKiAtIEluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQKICogLSA0IG9mIG1zdyBtdXN0IGJlIHNldCB0byB6ZXJvLgogKi8KCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBEU1AgdGhyb3VnaAogKiBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZC4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmX3NpemU7Ci8qIE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgZm9yIHRoZSBhRFNQIHRvIHdyaXRlLiBUaGUgYURTUAogKiBzdGFydHMgd3JpdGluZyBmcm9tIGJ1Zl9hZGRyLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzZXFfaWQ7CgkvKiBPcHRpb25hbCBidWZmZXIgc2VxdWVuY2UgSUQuICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9EQVRBX0NNRF9FT1MgICAgICAgICAgICAgICAweDAwMDEwQkRCCiNkZWZpbmUgQVNNX0RBVEFfRVZFTlRfUkVOREVSRURfRU9TICAgIDB4MDAwMTBDMUMKI2RlZmluZSBBU01fREFUQV9FVkVOVF9FT1MgICAgICAgICAgICAgMHgwMDAxMEJERAoKI2RlZmluZSBBU01fREFUQV9FVkVOVF9XUklURV9ET05FX1YyIDB4MDAwMTBEOTkKc3RydWN0IGFzbV9kYXRhX2V2ZW50X3dyaXRlX2RvbmVfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbHN3OwoJLyogbHN3IG9mIHRoZSA2NCBiaXQgYWRkcmVzcyAqLwoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwoJLyogbXN3IG9mIHRoZSA2NCBiaXQgYWRkcmVzcy4gYWRkcmVzcyBnaXZlbiBieSB0aGUgY2xpZW50IGluCgkgKiBBU01fREFUQV9DTURfV1JJVEVfVjIgY29tbWFuZC4KCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7CgkvKiBtZW1vcnkgbWFwIGhhbmRsZSBpbiB0aGUgQVNNX0RBVEFfQ01EX1dSSVRFX1YyICovCgoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwovKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUKICogcmVmZXJlbmNlZCBidWZmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbnN1bWVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkVfVjIgMHgwMDAxMEQ5QQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgZnJhbWUgbWV0YWRhdGEgZmxhZyBiaXRtYXNrLiovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX0ZSQU1FX01FVEFEQVRBX0ZMQUcgKDB4NDAwMDAwMDBVTCkKCi8qIERlZmluaXRpb24gb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGZsYWcgc2hpZnQgdmFsdWUuICovCiNkZWZpbmUgQVNNX1NISUZUX0ZSQU1FX01FVEFEQVRBX0ZMQUcgMzAKCnN0cnVjdCBhc21fZGF0YV9ldmVudF9yZWFkX2RvbmVfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwovKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFJlZmVyIHRvIEB4aHlwZXJyZWZ7UTMsW1EzXX0KICovCgp1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9sc3c7Ci8qIDY0IGJpdCBhZGRyZXNzIG1zdy1sc3cgaXMgYSB2YWxpZCwgbWFwcGVkIGFkZHJlc3MuIDY0IGJpdAogKiBhZGRyZXNzIGlzIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuCiAqLwoKdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwovKiA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IGlzIGEgdmFsaWQsIG1hcHBlZCBhZGRyZXNzLiA2NCBiaXQKICogYWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIDMyIGJ5dGVzLgogKgogKiAtU2FtZSBhZGRyZXNzIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgaW4gQVNNX0RBVEFfQ01EX1JFQURfVjIKICogLUluIHRoZSBjYXNlIG9mIDMyIGJpdCBTaGFyZWQgbWVtb3J5IGFkZHJlc3MsIG1zdyBmaWVsZCBpcyBzZXQgdG8KICogemVyby4KICogLUluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQgNAogKiAtb2YgbXN3IGlzIHNldCB0byB6ZXJvLgogKi8KCnUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSBpbiB0aGUgQVNNX0RBVEFfQ01EX1JFQURfVjIgICovCgp1MzIgICAgICAgICAgICAgICAgICBlbmNfZnJhbWVzb3RhbF9zaXplOwovKiBUb3RhbCBzaXplIG9mIHRoZSBlbmNvZGVkIGZyYW1lcyBpbiBieXRlcy4KICogU3VwcG9ydGVkIHZhbHVlczogPjAKICovCgp1MzIgICAgICAgICAgICAgICAgICBvZmZzZXQ7Ci8qIE9mZnNldCAoZnJvbSBidWZfYWRkcikgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpcnN0IGVuY29kZWQKICogZnJhbWUuIEFsbCBlbmNvZGVkIGZyYW1lcyBhcmUgY29uc2VjdXRpdmUsIHN0YXJ0aW5nIGZyb20gdGhpcwogKiBvZmZzZXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzIG9mCiAqIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIGJ1ZmZlci4gSWYgQml0IDUgb2YgbW9kZV9mbGFncyBmbGFnIG9mCiAqIEFTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9WMiBpcyAxIHRoZW4gdGhlIDY0IGJpdCB0aW1lc3RhbXAgaXMKICogYWJzb2x1dGUgY2FwdHVyZSB0aW1lIG90aGVyd2lzZSBpdCBpcyByZWxhdGl2ZSBzZXNzaW9uIHRpbWUuIFRoZQogKiBhYnNvbHV0ZSB0aW1lc3RhbXAgZG9lc24ndCByZXNldCB1bmxlc3MgdGhlIHN5c3RlbSBpcyByZXNldC4KICovCgoKdTMyICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgb2YKICogdGhlIGZpcnN0IHNhbXBsZSBpbiB0aGUgYnVmZmVyLgogKi8KCgp1MzIgICAgICAgICAgICAgICAgICBmbGFnczsKLyogQml0ZmllbGQgb2YgZmxhZ3MuIEJpdCAzMCBpbmRpY2F0ZXMgd2hldGhlciBmcmFtZSBtZXRhZGF0YSBpcwogKiBwcmVzZW50LiBJZiBmcmFtZSBtZXRhZGF0YSBpcyBwcmVzZW50LCBudW1fZnJhbWVzIGNvbnNlY3V0aXZlCiAqIGluc3RhbmNlcyBvZiBAeGh5cGVycmVme2hkcjpGcmFtZU1ldGFEYXRhLEZyYW1lIG1ldGFkYXRhfSBzdGFydAogKiBhdCB0aGUgYnVmZmVyIGFkZHJlc3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAzMToKICogLSAxIC0tIFRpbWVzdGFtcCBpcyB2YWxpZC4KICogLSAwIC0tIFRpbWVzdGFtcCBpcyBpbnZhbGlkLgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLSU1FU1RBTVBfVkFMSURfRkxBRyBhbmQKICogI0FTTV9TSElGVElNRVNUQU1QX1ZBTElEX0ZMQUcgdG8gc2V0IHRoaXMgYml0LgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzA6CiAqIC0gMSAtLSBGcmFtZSBtZXRhZGF0YSBpcyBwcmVzZW50LgogKiAtIDAgLS0gRnJhbWUgbWV0YWRhdGEgaXMgYWJzZW50LgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLX0ZSQU1FX01FVEFEQVRBX0ZMQUcgYW5kCiAqICNBU01fU0hJRlRfRlJBTUVfTUVUQURBVEFfRkxBRyB0byBzZXQgdGhpcyBiaXQuCiAqCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgdGhlIGFEU1Agc2V0cyB0aGVtIHRvIDAuCiAqLwoKdTMyICAgICAgICAgICAgICAgICAgbnVtX2ZyYW1lczsKLyogTnVtYmVyIG9mIGVuY29kZWQgZnJhbWVzIGluIHRoZSBidWZmZXIuICovCgp1MzIgICAgICAgICAgICAgICAgICBzZXFfaWQ7Ci8qIE9wdGlvbmFsIGJ1ZmZlciBzZXF1ZW5jZSBJRC4JKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZGF0YV9yZWFkX2J1Zl9tZXRhZGF0YV92MiB7Cgl1MzIgICAgICAgICAgb2Zmc2V0OwovKiBPZmZzZXQgZnJvbSBidWZfYWRkciBpbiAjQVNNX0RBVEFfRVZFTlRfUkVBRF9ET05FX1BBWUxPQUQgdG8KICogdGhlIGZyYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGFkYXRhLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MzIgICAgICAgICAgZnJtX3NpemU7Ci8qIFNpemUgb2YgdGhlIGVuY29kZWQgZnJhbWUgaW4gYnl0ZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiAgICAgICAgICBudW1fZW5jb2RlZF9wY21fc2FtcGxlczsKLyogTnVtYmVyIG9mIGVuY29kZWQgUENNIHNhbXBsZXMgKHBlciBjaGFubmVsKSBpbiB0aGUgZnJhbWUKICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWV0YWRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiAgICAgICAgICB0aW1lc3RhbXBfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyBvZiB0aGUKICogZmlyc3Qgc2FtcGxlIGZvciB0aGlzIGZyYW1lLgogKiBJZiBCaXQgNSBvZiBtb2RlX2ZsYWdzIGZsYWcgb2YgQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEX1YyIGlzIDEKICogdGhlbiB0aGUgNjQgYml0IHRpbWVzdGFtcCBpcyBhYnNvbHV0ZSBjYXB0dXJlIHRpbWUgb3RoZXJ3aXNlIGl0CiAqIGlzIHJlbGF0aXZlIHNlc3Npb24gdGltZS4gVGhlIGFic29sdXRlIHRpbWVzdGFtcCBkb2Vzbid0IHJlc2V0CiAqIHVubGVzcyB0aGUgc3lzdGVtIGlzIHJlc2V0LgogKi8KCgp1MzIgICAgICAgICAgdGltZXN0YW1wX21zdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlCiAqIGZpcnN0IHNhbXBsZSBmb3IgdGhpcyBmcmFtZS4KICovCgp1MzIgICAgICAgICAgZmxhZ3M7Ci8qIEZyYW1lIGZsYWdzLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMSAtLSBUaW1lIHN0YW1wIGlzIHZhbGlkCiAqIC0gMCAtLSBUaW1lIHN0YW1wIGlzIG5vdCB2YWxpZAogKiAtIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgdGhlIGFEU1Agc2V0cyB0aGVtIHRvIDAuCiAqLwp9IF9fcGFja2VkOwoKLyogTm90aWZpZXMgdGhlIGNsaWVudCBvZiBhIGNoYW5nZSBpbiB0aGUgZGF0YSBzYW1wbGluZyByYXRlIG9yCiAqIENoYW5uZWwgbW9kZS4gVGhpcyBldmVudCBpcyByYWlzZWQgYnkgdGhlIGRlY29kZXIgc2VydmljZS4gVGhlCiAqIGV2ZW50IGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgbW9kZSBmbGFncyBvZgogKiAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9WMiBvcgogKiAjQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEV1JJVEVfVjIuIC0gVGhlIGRlY29kZXIgZGV0ZWN0cyBhIGNoYW5nZQogKiBpbiB0aGUgb3V0cHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBvciB0aGUgbnVtYmVyL3Bvc2l0aW9uaW5nIG9mCiAqIG91dHB1dCBjaGFubmVscywgb3IgaWYgaXQgaXMgdGhlIGZpcnN0IGZyYW1lIGRlY29kZWQuVGhlIG5ldwogKiBzYW1wbGluZyBmcmVxdWVuY3kgb3IgdGhlIG5ldyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMKICogY29tbXVuaWNhdGVkIGJhY2sgdG8gdGhlIGNsaWVudCBhc3luY2hyb25vdXNseS4KICovCgojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX1NSX0NNX0NIQU5HRV9OT1RJRlkgMHgwMDAxMEM2NQoKLyogIFBheWxvYWQgb2YgdGhlICNBU01fREFUQV9FVkVOVF9TUl9DTV9DSEFOR0VfTk9USUZZIGV2ZW50LgogKiBUaGlzIGV2ZW50IGlzIHJhaXNlZCB3aGVuIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYm90aCB0cnVlOgogKiAtIFRoZSBldmVudCBpcyBlbmFibGVkIHRocm91Z2ggdGhlIG1vZGVfZmxhZ3Mgb2YKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fV1JJVEVfVjIgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRFdSSVRFX1YyLiAtIFRoZSBkZWNvZGVyIGRldGVjdHMgYSBjaGFuZ2UKICogaW4gZWl0aGVyIHRoZSBvdXRwdXQgc2FtcGxpbmcgZnJlcXVlbmN5IG9yIHRoZSBudW1iZXIvcG9zaXRpb25pbmcKICogb2Ygb3V0cHV0IGNoYW5uZWxzLCBvciBpZiBpdCBpcyB0aGUgZmlyc3QgZnJhbWUgZGVjb2RlZC4KICogVGhpcyBldmVudCBpcyBub3QgcmFpc2VkIChldmVuIGlmIGVuYWJsZWQpIGlmIHRoZSBkZWNvZGVyIGlzCiAqIE1JREksIGJlY2F1c2UKICovCgoKc3RydWN0IGFzbV9kYXRhX2V2ZW50X3NyX2NtX2NoYW5nZV9ub3RpZnkgewoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIE5ldyBzYW1wbGluZyByYXRlIChpbiBIZXJ0eikgYWZ0ZXIgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZQogKiBiaXRzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOZXcgbnVtYmVyIG9mIGNoYW5uZWxzIGFmdGVyIGRldGVjdGluZyBhIGNoYW5nZSBpbiB0aGUKICogYml0c3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4qLwoKCXU4ICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKCn0gX19wYWNrZWQ7CgovKiBOb3RpZmllcyB0aGUgY2xpZW50IG9mIGEgZGF0YSBzYW1wbGluZyByYXRlIG9yIGNoYW5uZWwgbW9kZQogKiBjaGFuZ2UuIFRoaXMgZXZlbnQgaXMgcmFpc2VkIGJ5IHRoZSBlbmNvZGVyIHNlcnZpY2UuCiAqIFRoaXMgZXZlbnQgaXMgcmFpc2VkIHdoZW4gOgogKiAtIE5hdGl2ZSBtb2RlIGVuY29kaW5nIHdhcyByZXF1ZXN0ZWQgaW4gdGhlIGVuY29kZXIKICogY29uZmlndXJhdGlvbiAoaS5lLiwgdGhlIGNoYW5uZWwgbnVtYmVyIHdhcyAwKSwgdGhlIHNhbXBsZSByYXRlCiAqIHdhcyAwLCBvciBib3RoIHdlcmUgMC4KICoKICogLSBUaGUgaW5wdXQgZGF0YSBmcmFtZSBhdCB0aGUgZW5jb2RlciBpcyB0aGUgZmlyc3Qgb25lLCBvciB0aGUKICogc2FtcGxpbmcgcmF0ZS9jaGFubmVsIG1vZGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIGlucHV0CiAqIGRhdGEgZnJhbWUuCiAqCiAqLwojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX0VOQ19TUl9DTV9DSEFOR0VfTk9USUZZIDB4MDAwMTBCREUKCnN0cnVjdCBhc21fZGF0YV9ldmVudF9lbmNfc3JfY21fY2hhbmdlX25vdGlmeSB7Cgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTmV3IHNhbXBsaW5nIHJhdGUgKGluIEhlcnR6KSBhZnRlciBkZXRlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlCiAqIGlucHV0IGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTmV3IG51bWJlciBvZiBjaGFubmVscyBhZnRlciBkZXRlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlIGlucHV0CiAqIGRhdGEuIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOAogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOZXcgYml0cyBwZXIgc2FtcGxlIGFmdGVyIGRldGVjdGluZyBhIGNoYW5nZSBpbiB0aGUgaW5wdXQKICogZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCgl1OCAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Cgp9IF9fcGFja2VkOwojZGVmaW5lIEFTTV9EQVRBX0NNRF9JRUNfNjA5NThfRlJBTUVfUkFURSAweDAwMDEwRDg3CgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9EQVRBX0NNRF9JRUNfNjA5NThfRlJBTUVfUkFURSBjb21tYW5kLAogKiB3aGljaCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBJRUMgNjA5NTggZnJhbWUgcmF0ZSBvZiBhIGdpdmVuCiAqIHBhY2tldGl6ZWQgYXVkaW8gc3RyZWFtLgogKi8KCnN0cnVjdCBhc21fZGF0YV9jbWRfaWVjXzYwOTU4X2ZyYW1lX3JhdGUgewoJdTMyICAgICAgICAgICAgICAgICAgZnJhbWVfcmF0ZTsKLyogSUVDIDYwOTU4IGZyYW1lIHJhdGUgb2YgdGhlIGluY29taW5nIElFQyA2MTkzNyBwYWNrZXRpemVkIHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczogQW55IHZhbGlkIGZyYW1lIHJhdGUKICovCn0gX19wYWNrZWQ7CgovKiBhZHNwX2FzbV9kYXRhX2NvbW1hbmRzLmgqLwovKiBEZWZpbml0aW9uIG9mIHRoZSBzdHJlYW0gSUQgYml0bWFzay4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TVFJFQU1fSUQgICAgICAgICAgICAgICAgICgweDAwMDAwMEZGVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSBzdHJlYW0gSUQgc2hpZnQgdmFsdWUuKi8KI2RlZmluZSBBU01fU0hJRlRfU1RSRUFNX0lEICAgICAgICAgICAgICAgICAgICAwCgovKiBEZWZpbml0aW9uIG9mIHRoZSBzZXNzaW9uIElEIGJpdG1hc2suKi8KI2RlZmluZSBBU01fQklUX01BU0tfU0VTU0lPTl9JRCAgICAgICAgICAgICAgICAoMHgwMDAwRkYwMFVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgc2Vzc2lvbiBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFTTV9TSElGVF9TRVNTSU9OX0lEICAgICAgICAgICAgICAgICAgIDgKCi8qIERlZmluaXRpb24gb2YgdGhlIHNlcnZpY2UgSUQgYml0bWFzay4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TRVJWSUNFX0lEICAgICAgICAgICAgICAgICgweDAwRkYwMDAwVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSBzZXJ2aWNlIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQVNNX1NISUZUX1NFUlZJQ0VfSUQgICAgICAgICAgICAgICAgICAgMTYKCi8qIERlZmluaXRpb24gb2YgdGhlIGRvbWFpbiBJRCBiaXRtYXNrLiovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX0RPTUFJTl9JRCAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMFVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgZG9tYWluIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQVNNX1NISUZUX0RPTUFJTl9JRCAgICAgICAgICAgICAgICAgICAgMjQKCiNkZWZpbmUgQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICAgICAgICAgICAgICAgMHgwMDAxMEQ5MgojZGVmaW5lIEFTTV9DTURSU1BfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAgICAgMHgwMDAxMEQ5MwojZGVmaW5lIEFTTV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TICAgICAgICAgICAgICAweDAwMDEwRDk0CgovKiBhZHNwX2FzbV9zZXJ2aWNlX2NvbW1hbmRzLmggKi8KCiNkZWZpbmUgQVNNX01BWF9TRVNTSU9OX0lEICAoMTUpCgovKiBNYXhpbXVtIG51bWJlciBvZiBzZXNzaW9ucy4qLwojZGVmaW5lIEFTTV9NQVhfTlVNX1NFU1NJT05TICAgICAgICAgICAgICAgIEFTTV9NQVhfU0VTU0lPTl9JRAoKLyogTWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtcyBwZXIgc2Vzc2lvbi4qLwojZGVmaW5lIEFTTV9NQVhfU1RSRUFNU19QRVJfU0VTU0lPTiAoOCkKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1YyICAgICAgICAgICAgICAgICAgIDB4MDAwMTBEQUEKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9JTU1FRElBVEUgIDAKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9BVF9BQlNPTFVURUlNRSAxCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fQVRfUkVMQVRJVkVJTUUgMgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRJTUVfUlVOX1dJVEhfREVMQVkgICAgIDMKCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1JVTl9TVEFSVElNRSAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDNVTCkKCi8qIEJpdCBzaGlmdCB2YWx1ZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IHRpbWUgZm9yIHRoZQogKiBBU01fU0VTU0lPTl9DTURfUlVOX1YyIGNvbW1hbmQuCiAqLwojZGVmaW5lIEFTTV9TSElGVF9SVU5fU1RBUlRJTUUgMApzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX3J1bl92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICBmbGFnczsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcnVuIGltbWVkaWF0ZWx5IG9yIGF0IGEgc3BlY2lmaWMKICogcmVuZGVyaW5nIHRpbWUgb3Igd2l0aCBhIHNwZWNpZmllZCBkZWxheS4gUnVuIHdpdGggZGVsYXkgaXMKICogdXNlZnVsIGZvciBkZWxheWluZyBpbiBjYXNlIG9mIEFTTSBsb29wYmFjayBvcGVuZWQgdGhyb3VnaAogKiBBU01fU1RSRUFNX0NNRF9PUEVOX0xPT1BCQUNLX1YyLiBVc2UgI0FTTV9CSVRfTUFTS19SVU5fU1RBUlRJTUUKICogYW5kICNBU01fU0hJRlRfUlVOX1NUQVJUSU1FIHRvIHNldCB0aGlzIDItYml0IGZsYWcuCiAqCiAqCiAqQml0cyAwIGFuZCAxIGNhbiB0YWtlIG9uZSBvZiBmb3VyIHBvc3NpYmxlIHZhbHVlczoKICoKICotICNBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9JTU1FRElBVEUKICotICNBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9BVF9BQlNPTFVURUlNRQogKi0gI0FTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRJTUVfUlVOX0FUX1JFTEFUSVZFSU1FCiAqLSAjQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fV0lUSF9ERUxBWQogKgogKkFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHRpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSB0aW1lIGluIG1pY3Jvc2Vjb25kcyB1c2VkIHRvIGFsaWduIHRoZQogKiBzZXNzaW9uIG9yaWdpbiB0aW1lLiBXaGVuIGJpdHMgMC0xIG9mIGZsYWdzIGlzCiAqIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRfUlVOX1dJVEhfREVMQVksIHRpbWUgbHN3IGlzIHRoZSBsc3cgb2YKICogdGhlIGRlbGF5IGluIHVzLiBGb3IgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVF9SVU5fV0lUSF9ERUxBWSwKICogbWF4aW11bSB2YWx1ZSBvZiB0aGUgNjQgYml0IGRlbGF5IGlzIDE1MCBtcy4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgdGltZV9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIHRpbWUgaW4gbWljcm9zZWNvbmRzIHVzZWQgdG8gYWxpZ24gdGhlCiAqIHNlc3Npb24gb3JpZ2luIHRpbWUuIFdoZW4gYml0cyAwLTEgb2YgZmxhZ3MgaXMKICogQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVF9SVU5fV0lUSF9ERUxBWSwgdGltZSBtc3cgaXMgdGhlIG1zdyBvZgogKiB0aGUgZGVsYXkgaW4gdXMuIEZvciBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUX1JVTl9XSVRIX0RFTEFZLAogKiBtYXhpbXVtIHZhbHVlIG9mIHRoZSA2NCBiaXQgZGVsYXkgaXMgMTUwIG1zLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9QQVVTRSAweDAwMDEwQkQzCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1NVU1BFTkQgMHgwMDAxMERFQwojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9HRVRfU0VTU0lPTlRJTUVfVjMgMHgwMDAxMEQ5RAojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9SRUdJU1RFUl9GT1JfUlhfVU5ERVJGTE9XX0VWRU5UUyAweDAwMDEwQkQ1CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX3Jnc3RyX3J4X3VuZGVyZmxvdyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyogU3BlY2lmaWVzIHdoZXRoZXIgYSBjbGllbnQgaXMgdG8gcmVjZWl2ZSBldmVudHMgd2hlbiBhbiBSeAogKiBzZXNzaW9uIHVuZGVyZmxvd3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBEbyBub3Qgc2VuZCB1bmRlcmZsb3cgZXZlbnRzCiAqIC0gMSAtLSBTZW5kIHVuZGVyZmxvdyBldmVudHMKICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JFR0lTVEVSX0ZPUlhfT1ZFUkZMT1dfRVZFTlRTIDB4MDAwMTBCRDYKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfcmVneF9vdmVyZmxvdyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyogU3BlY2lmaWVzIHdoZXRoZXIgYSBjbGllbnQgaXMgdG8gcmVjZWl2ZSBldmVudHMgd2hlbiBhIFR4CiAqIHNlc3Npb24gb3ZlcmZsb3dzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRG8gbm90IHNlbmQgb3ZlcmZsb3cgZXZlbnRzCiAqIC0gMSAtLSBTZW5kIG92ZXJmbG93IGV2ZW50cwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NFU1NJT05fRVZFTlRfUlhfVU5ERVJGTE9XICAgICAgICAweDAwMDEwQzE3CiNkZWZpbmUgQVNNX1NFU1NJT05fRVZFTlRYX09WRVJGTE9XICAgICAgICAgICAweDAwMDEwQzE4CiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EUlNQX0dFVF9TRVNTSU9OVElNRV9WMyAweDAwMDEwRDlFCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kcnNwX2dldF9zZXNzaW9udGltZV92MyB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CgkgKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzZXNzaW9udGltZV9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzZXNzaW9udGltZV9tc3c7CgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhYnNvbHV0ZXRpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIGluIG1pY3JvIHNlY29uZHMgb2YgdGhlIGFic29sdXRlIHRpbWUgYXQgd2hpY2gKICogdGhlICogc2FtcGxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFib3ZlIHNlc3Npb24gdGltZSBnZXRzCiAqIHJlbmRlcmVkICogdG8gaGFyZHdhcmUuIFRoaXMgYWJzb2x1dGUgdGltZSBtYXkgYmUgc2xpZ2h0bHkgaW4gdGhlCiAqIGZ1dHVyZSBvciBwYXN0LgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYWJzb2x1dGV0aW1lX21zdzsKLyogVXBwZXIgMzIgYml0cyBpbiBtaWNybyBzZWNvbmRzIG9mIHRoZSBhYnNvbHV0ZSB0aW1lIGF0IHdoaWNoCiAqIHRoZSAqIHNhbXBsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHRpbWUgZ2V0cwogKiByZW5kZXJlZCB0byAqIGhhcmR3YXJlLiBUaGlzIGFic29sdXRlIHRpbWUgbWF5IGJlIHNsaWdodGx5IGluIHRoZQogKiBmdXR1cmUgb3IgcGFzdC4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfQURKVVNUX1NFU1NJT05fQ0xPQ0tfVjIgICAgIDB4MDAwMTBEOUYKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfYWRqdXN0X3Nlc3Npb25fY2xvY2tfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwp1MzIgICAgICAgICAgICAgICAgICBhZGp1c3RpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBzaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzIHRoZQogKiBhZGp1c3RtZW50IHRpbWUgaW4gbWljcm9zZWNvbmRzIHRvIHRoZSBzZXNzaW9uIGNsb2NrLgogKgogKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgYWR2YW5jZW1lbnQgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqIE5lZ2F0aXZlIHZhbHVlcyBpbmRpY2F0ZSBkZWxheSBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGFkanVzdGltZV9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIHNpZ25lZCA2NC1iaXQgcXVhbnRpdHkgdGhhdCBzcGVjaWZpZXMKICogdGhlIGFkanVzdG1lbnQgdGltZSBpbiBtaWNyb3NlY29uZHMgdG8gdGhlIHNlc3Npb24gY2xvY2suCiAqIFBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0ZSBhZHZhbmNlbWVudCBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICogTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGRlbGF5IG9mIHRoZSBzZXNzaW9uIGNsb2NrLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRFJTUF9BREpVU1RfU0VTU0lPTl9DTE9DS19WMiAgICAweDAwMDEwREEwCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kcnNwX2FkanVzdF9zZXNzaW9uX2Nsb2NrX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CiAqIEFuIGVycm9yIG1lYW5zIHRoZSBzZXNzaW9uIGNsb2NrIGlzIG5vdCBhZGp1c3RlZC4gSW4gdGhpcyBjYXNlLAogKiB0aGUgbmV4dCB0d28gZmllbGRzIGFyZSBpcnJlbGV2YW50LgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYWN0dWFsX2FkanVzdGltZV9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIHNpZ25lZCA2NC1iaXQgcXVhbnRpdHkgdGhhdCBzcGVjaWZpZXMKICogdGhlIGFjdHVhbCBhZGp1c3RtZW50IGluIG1pY3Jvc2Vjb25kcyBwZXJmb3JtZWQgYnkgdGhlIGFEU1AuCiAqIEEgcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIGFkdmFuY2VtZW50IG9mIHRoZSBzZXNzaW9uIGNsb2NrLiBBCiAqIG5lZ2F0aXZlIHZhbHVlIGluZGljYXRlcyBkZWxheSBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGFjdHVhbF9hZGp1c3RpbWVfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBzaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzCiAqIHRoZSBhY3R1YWwgYWRqdXN0bWVudCBpbiBtaWNyb3NlY29uZHMgcGVyZm9ybWVkIGJ5IHRoZSBhRFNQLgogKiBBIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBhZHZhbmNlbWVudCBvZiB0aGUgc2Vzc2lvbiBjbG9jay4gQQogKiBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgZGVsYXkgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBjbWRfbGF0ZW5jeV9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIHVuc2lnbmVkIDY0LWJpdCBxdWFudGl0eSB0aGF0IHNwZWNpZmllcwogKiB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWljcm9zZWNvbmRzIHRha2VuIHRvIHBlcmZvcm0gdGhlIHNlc3Npb24KICogY2xvY2sgYWRqdXN0bWVudC4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGNtZF9sYXRlbmN5X21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgdW5zaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzCiAqIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWNyb3NlY29uZHMgdGFrZW4gdG8gcGVyZm9ybSB0aGUgc2Vzc2lvbgogKiBjbG9jayBhZGp1c3RtZW50LgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9HRVRfUEFUSF9ERUxBWV9WMgkgMHgwMDAxMERBRgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRFJTUF9HRVRfUEFUSF9ERUxBWV9WMiAweDAwMDEwREIwCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kcnNwX2dldF9wYXRoX2RlbGF5X3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLiBXaGV0aGVyIHRoaXMgZ2V0IGRlbGF5IG9wZXJhdGlvbgogKiBpcyBzdWNjZXNzZnVsIG9yIG5vdC4gRGVsYXkgdmFsdWUgaXMgdmFsaWQgb25seSBpZiBzdGF0dXMgaXMKICogc3VjY2Vzcy4KICogU3VwcG9ydGVkIHZhbHVlczogUmVmZXIgdG8gQHhoeXBlcnJlZntRNSxbUTVdfQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhdWRpb19kZWxheV9sc3c7CgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBhRFNQIGRlbGF5IGluIG1pY3Jvc2Vjb25kcy4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhdWRpb19kZWxheV9tc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBhRFNQIGRlbGF5ICBpbiBtaWNyb3NlY29uZHMuICovCgp9IF9fcGFja2VkOwoKLyogYWRzcF9hc21fc2Vzc2lvbl9jb21tYW5kLmgqLwojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fV1JJVEVfVjMgICAgICAgMHgwMDAxMERCMwoKI2RlZmluZSBBU01fTE9XX0xBVEVOQ1lfU1RSRUFNX1NFU1NJT04JCQkJMHgxMDAwMDAwMAoKI2RlZmluZSBBU01fVUxUUkFfTE9XX0xBVEVOQ1lfU1RSRUFNX1NFU1NJT04JCQkweDIwMDAwMDAwCgojZGVmaW5lIEFTTV9VTExfUE9TVF9QUk9DRVNTSU5HX1NUUkVBTV9TRVNTSU9OCQkJMHg0MDAwMDAwMAoKI2RlZmluZSBBU01fTEVHQUNZX1NUUkVBTV9TRVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCgoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fd3JpdGVfdjMgewoJc3RydWN0IGFwcl9oZHIJCQloZHI7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBmbGFncyB0aGF0IGNvbmZpZ3VyZSB0aGUgc3RyZWFtIHRvIG5vdGlmeSB0aGUgY2xpZW50CiAqIHdoZW5ldmVyIGl0IGRldGVjdHMgYW4gU1IvQ00gY2hhbmdlIGF0IHRoZSBpbnB1dCB0byBpdHMgUE9QUC4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0cyAwIHRvIDE6CiAqIC0gUmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMjoKICogLSAwIC0tIFNSL0NNIGNoYW5nZSBub3RpZmljYXRpb24gZXZlbnQgaXMgZGlzYWJsZWQuCiAqIC0gMSAtLSBTUi9DTSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGV2ZW50IGlzIGVuYWJsZWQuCiAqIC0gVXNlICNBU01fQklUX01BU0tfU1JfQ01fQ0hBTkdFX05PVElGWV9GTEFHIGFuZAogKiAjQVNNX1NISUZUX1NSX0NNX0NIQU5HRV9OT1RJRllfRkxBRyB0byBzZXQgb3IgZ2V0IHRoaXMgYml0LgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMCAtLSBTdHJlYW0gdG8gYmUgb3BlbmVkIGluIG9uLUdhcGxlc3MgbW9kZS4KICogLSAxIC0tIFN0cmVhbSB0byBiZSBvcGVuZWQgaW4gR2FwbGVzcyBtb2RlLiBJbiBHYXBsZXNzIG1vZGUsCiAqIHN1Y2Nlc3NpdmUgc3RyZWFtcyBtdXN0IGJlIG9wZW5lZCB3aXRoIHNhbWUgc2Vzc2lvbiBJRCBidXQKICogZGlmZmVyZW50IHN0cmVhbSBJRHMuCiAqCiAqIC0gVXNlICNBU01fQklUX01BU0tfR0FQTEVTU19NT0RFX0ZMQUcgYW5kCiAqICNBU01fU0hJRlRfR0FQTEVTU19NT0RFX0ZMQUcgdG8gc2V0IG9yIGdldCB0aGlzIGJpdC4KICoKICoKICogQG5vdGUxaGFuZyBNSURJIGFuZCBEVE1GIHN0cmVhbXMgY2Fubm90IGJlIG9wZW5lZCBpbiBHYXBsZXNzIG1vZGUuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBzaW5rX2VuZHBvaW50eXBlOwovKjwgU2luayBwb2ludCB0eXBlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRGV2aWNlIG1hdHJpeAogKiAtIE90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQuCiAqCiAqIFRoZSBkZXZpY2UgbWF0cml4IGlzIHRoZSBnYXRld2F5IHRvIHRoZSBoYXJkd2FyZSBwb3J0cy4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyo8IE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IEFTTSBtb2R1bGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBwb3N0cHJvY29wb19pZDsKLyo8IFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mIHByb2Nlc3NpbmcpIG9mCiAqIHBvc3Rwcm9jZXNzaW5nIGFsZ29yaXRobXMuIDxpPk5vbmU8L2k+IG1lYW5zIG5vIHBvc3Rwcm9jZXNzaW5nLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX0RFRkFVTFQKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9NQ0hfUEVBS19WT0wKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FCiAqCiAqIFRoaXMgZmllbGQgY2FuIGFsc28gYmUgZW5hYmxlZCB0aHJvdWdoIFNldFBhcmFtcyBmbGFncy4KICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICAgIGRlY19mbXRfaWQ7Ci8qPCBDb25maWd1cmF0aW9uIElEIG9mIHRoZSBkZWNvZGVyIG1lZGlhIGZvcm1hdC4KICoKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX0FEUENNCiAqIC0gI0FTTV9NRURJQV9GTVRfTVAzCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfRE9MQllfQUFDCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0FNUl9XQl9QTFVTX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1NCQwogKiAtICNBU01fTUVESUFfRk1UX1dNQV9WMTBQUk9fVjIKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjlfVjIKICogLSAjQVNNX01FRElBX0ZNVF9BQzMKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9BTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9NTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcyOUFfRlMKICogLSAjQVNNX01FRElBX0ZNVF9GUl9GUwogKiAtICNBU01fTUVESUFfRk1UX1ZPUkJJUwogKiAtICNBU01fTUVESUFfRk1UX0ZMQUMKICogLSAjQVNNX01FRElBX0ZNVF9BTEFDCiAqIC0gI0FTTV9NRURJQV9GTVRfQVBFCiAqIC0gI0FTTV9NRURJQV9GTVRfRVhBTVBMRQogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9QVUxMX01PREVfV1JJVEUgICAgMHgwMDAxMEREOQoKLyogQml0bWFzayBmb3IgdGhlIHN0cmVhbV9wZXJmX21vZGUgc3ViZmllbGQuICovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1NUUkVBTV9QRVJGX0ZMQUdfUFVMTF9NT0RFX1dSSVRFIDB4RTAwMDAwMDBVTAoKLyogQml0bWFzayBmb3IgdGhlIHN0cmVhbV9wZXJmX21vZGUgc3ViZmllbGQuICovCiNkZWZpbmUgQVNNX1NISUZUX1NUUkVBTV9QRVJGX0ZMQUdfUFVMTF9NT0RFX1dSSVRFIDI5CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fUFVTSF9NT0RFX1JFQUQgIDB4MDAwMTBEREEKCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1NUUkVBTV9QRVJGX0ZMQUdfUFVTSF9NT0RFX1JFQUQgMHhFMDAwMDAwMFVMCgojZGVmaW5lIEFTTV9TSElGVF9TVFJFQU1fUEVSRl9GTEFHX1BVU0hfTU9ERV9SRUFEIDI5CgojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX1dBVEVSTUFSSyAweDAwMDEwRERCCgpzdHJ1Y3QgYXNtX3NoYXJlZF9wb3NpdGlvbl9idWZmZXIgewoJdm9sYXRpbGUgdWludDMyX3QgICAgICAgICAgICAgICBmcmFtZV9jb3VudGVyOwovKiBDb3VudGVyIHVzZWQgdG8gaGFuZGxlIGludGVycHJvY2Vzc29yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuCiAqIFdoZW4gZnJhbWVfY291bnRlciBpcyAwOiByZWFkX2luZGV4LCB3YWxsX2Nsb2NrX3VzX2xzdywgYW5kCiAqIHdhbGxfY2xvY2tfdXNfbXN3IGFyZSBpbnZhbGlkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+PSAwLgogKi8KCgl2b2xhdGlsZSB1aW50MzJfdCAgICAgICAgICAgICAgIGluZGV4OwovKiBJbmRleCBpbiBieXRlcyBmcm9tIHdoZXJlIHRoZSBhRFNQIGlzIHJlYWRpbmcvd3JpdGluZy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byBjaXJjdWxhciBidWZmZXIgc2l6ZSAtIDEKICovCgoJdm9sYXRpbGUgdWludDMyX3QgICAgICAgICAgICAgICB3YWxsX2Nsb2NrX3VzX2xzdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHdhbGwgY2xvY2sgdGltZSBpbiBtaWNyb3NlY29uZHMgd2hlbiB0aGUKICogcmVhZCBpbmRleCB3YXMgdXBkYXRlZC4KICogU3VwcG9ydGVkIHZhbHVlczogPj0gMAogKi8KCgl2b2xhdGlsZSB1aW50MzJfdCAgICAgICAgICAgICAgIHdhbGxfY2xvY2tfdXNfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NCBiaXQgd2FsbCBjbG9jayB0aW1lIGluIG1pY3Jvc2Vjb25kcyB3aGVuIHRoZQogKiByZWFkIGluZGV4IHdhcyB1cGRhdGVkCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID49IDAKICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX3NoYXJlZF93YXRlcm1hcmtfbGV2ZWwgewoJdWludDMyX3QgICAgICAgICAgICAgICAgd2F0ZXJtYXJrX2xldmVsX2J5dGVzOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fc2hhcmVkX2lvIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgIGhkcjsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBlbmRwb2ludF90eXBlOwoJdWludDE2X3QgICAgICAgICAgICAgICAgdG9wb19iaXRzX3Blcl9zYW1wbGU7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICB0b3BvX2lkOwoJdWludDMyX3QgICAgICAgICAgICAgICAgZm10X2lkOwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfcGh5X2FkZHJfbHN3OwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfcGh5X2FkZHJfbXN3OwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfbWVtX3Bvb2xfaWQ7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBzaGFyZWRfcG9zX2J1Zl9udW1fcmVnaW9uczsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9wb3NfYnVmX3Byb3BlcnR5X2ZsYWc7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBzaGFyZWRfY2lyY19idWZfc3RhcnRfcGh5X2FkZHJfbHN3OwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX3N0YXJ0X3BoeV9hZGRyX21zdzsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9jaXJjX2J1Zl9zaXplOwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX21lbV9wb29sX2lkOwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX251bV9yZWdpb25zOwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX3Byb3BlcnR5X2ZsYWc7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBudW1fd2F0ZXJtYXJrX2xldmVsczsKCXN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192MyAgICAgICAgIGZtdDsKCXN0cnVjdCBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCAgICAgICAgICAgIG1hcF9yZWdpb25fcG9zX2J1ZjsKCXN0cnVjdCBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCAgICAgICAgICAgIG1hcF9yZWdpb25fY2lyY19idWY7CglzdHJ1Y3QgYXNtX3NoYXJlZF93YXRlcm1hcmtfbGV2ZWwgd2F0ZXJtYXJrWzBdOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURfVjMgICAgICAgICAgICAgICAgIDB4MDAwMTBEQjQKCi8qIERlZmluaXRpb24gb2YgdGhlIHRpbWVzdGFtcCB0eXBlIGZsYWcgYml0bWFzayAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS0lNRVNUQU1QWVBFX0ZMQUcgICAgICAgICgweDAwMDAwMDIwVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSB0aW1lc3RhbXAgdHlwZSBmbGFnIHNoaWZ0IHZhbHVlLiAqLwojZGVmaW5lIEFTTV9TSElGVElNRVNUQU1QWVBFX0ZMQUcgNQoKLyogUmVsYXRpdmUgdGltZXN0YW1wIGlzIGlkZW50aWZpZWQgYnkgdGhpcyB2YWx1ZS4qLwojZGVmaW5lIEFTTV9SRUxBVElWRUlNRVNUQU1QICAgICAgMAoKLyogQWJzb2x1dGUgdGltZXN0YW1wIGlzIGlkZW50aWZpZWQgYnkgdGhpcyB2YWx1ZS4qLwojZGVmaW5lIEFTTV9BQlNPTFVURUlNRVNUQU1QICAgICAgMQoKLyogQml0IHZhbHVlIGZvciBMb3cgTGF0ZW5jeSBUeCBzdHJlYW0gc3ViZmllbGQgKi8KI2RlZmluZSBBU01fTE9XX0xBVEVOQ1lfVFhfU1RSRUFNX1NFU1NJT04JCQkxCgovKiBCaXQgc2hpZnQgZm9yIHRoZSBzdHJlYW1fcGVyZl9tb2RlIHN1YmZpZWxkLiAqLwojZGVmaW5lIEFTTV9TSElGVF9TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9SRUFEICAgICAgICAgICAgICAyOQoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fcmVhZF92MyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MgdGhhdCBpbmRpY2F0ZSB3aGV0aGVyIG1ldGEgaW5mb3JtYXRpb24gcGVyIGVuY29kZWQKICogZnJhbWUgaXMgdG8gYmUgcHJvdmlkZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCA0OgogKgogKiAtIDAgLS0gUmV0dXJuIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFsbCBlbmNvZGVkIGZyYW1lcyBvbmx5OyBpdAogKiBkb2VzIG5vdCBjb250YWluIGZyYW1lIG1ldGFkYXRhLgogKgogKiAtIDEgLS0gUmV0dXJuIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFuIGFycmF5IG9mIG1ldGFkYXRhIGFuZAogKiBlbmNvZGVkIGZyYW1lcy4KICoKICogLSBVc2UgI0FTTV9CSVRfTUFTS19NRVRBX0lORk9fRkxBRyBhcyB0aGUgYml0bWFzayBhbmQKICogI0FTTV9TSElGVF9NRVRBX0lORk9fRkxBRyBhcyB0aGUgc2hpZnQgdmFsdWUgZm9yIHRoaXMgYml0LgogKgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNToKICoKICogLSBBU01fUkVMQVRJVkVJTUVTVEFNUCAtLSBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkVfVjIgd2lsbCBoYXZlCiAqIC0gcmVsYXRpdmUgdGltZS1zdGFtcC4KICogLSBBU01fQUJTT0xVVEVJTUVTVEFNUCAtLSBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkVfVjIgd2lsbAogKiAtIGhhdmUgYWJzb2x1dGUgdGltZS1zdGFtcC4KICoKICogLSBVc2UgI0FTTV9CSVRfTUFTS0lNRVNUQU1QWVBFX0ZMQUcgYXMgdGhlIGJpdG1hc2sgYW5kCiAqICNBU01fU0hJRlRJTUVTVEFNUFlQRV9GTEFHIGFzIHRoZSBzaGlmdCB2YWx1ZSBmb3IgdGhpcyBiaXQuCiAqCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgc3JjX2VuZHBvaW50eXBlOwovKiBTcGVjaWZpZXMgdGhlIGVuZHBvaW50IHByb3ZpZGluZyB0aGUgaW5wdXQgc2FtcGxlcy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIERldmljZSBtYXRyaXgKICogLSBBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqIE90aGVyd2lzZSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCiAqIFRoZSBkZXZpY2UgbWF0cml4IGlzIHRoZSBnYXRld2F5IGZyb20gdGhlIHR1bm5lbGVkIFR4IHBvcnRzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIHByZXByb2NvcG9faWQ7Ci8qIFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mIHByb2Nlc3NpbmcpIG9mIHByZXByb2Nlc3NpbmcKICogYWxnb3JpdGhtcy4gPGk+Tm9uZTwvaT4gbWVhbnMgbm8gcHJlcHJvY2Vzc2luZy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1NUUkVBTV9QUkVQUk9DT1BPX0lEX0RFRkFVTFQKICogLSAjQVNNX1NUUkVBTV9QUkVQUk9DT1BPX0lEX05PTkUKICoKICogVGhpcyBmaWVsZCBjYW4gYWxzbyBiZSBlbmFibGVkIHRocm91Z2ggU2V0UGFyYW1zIGZsYWdzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGVuY19jZmdfaWQ7Ci8qIE1lZGlhIGNvbmZpZ3VyYXRpb24gSUQgZm9yIGVuY29kZWQgb3V0cHV0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9TQkMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX01MQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzI5QV9GUwogKiAtICNBU01fTUVESUFfRk1UX0VYQU1QTEUKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjgKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IEFTTSBtb2R1bGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BPUFBfT1VUUFVUX1NSX05BVElWRV9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgbWF4aW11bSBzYW1wbGluZyByYXRlIGF0IHRoZSBQT1BQIG91dHB1dC4qLwojZGVmaW5lIEFTTV9QT1BQX09VVFBVVF9TUl9NQVhfUkFURSAgICAgICAgICAgICA0ODAwMAoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURXUklURV9WMiAgICAgICAgMHgwMDAxMEQ4RAojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fUkVBRFdSSVRFX1YyICAgICAgICAweDAwMDEwRDhECgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl9yZWFkd3JpdGVfdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAyOgogKiAtIDAgLS0gU1IvQ00gY2hhbmdlIG5vdGlmaWNhdGlvbiBldmVudCBpcyBkaXNhYmxlZC4KICogLSAxIC0tIFNSL0NNIGNoYW5nZSBub3RpZmljYXRpb24gZXZlbnQgaXMgZW5hYmxlZC4gVXNlCiAqICNBU01fQklUX01BU0tfU1JfQ01fQ0hBTkdFX05PVElGWV9GTEFHIGFuZAogKiAjQVNNX1NISUZUX1NSX0NNX0NIQU5HRV9OT1RJRllfRkxBRyB0byBzZXQgb3IKICogZ2V0dGluZyB0aGlzIGZsYWcuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCA0OgogKiAtIDAgLS0gUmV0dXJuIHJlYWQgZGF0YSBidWZmZXIgY29udGFpbnMgYWxsIGVuY29kZWQgZnJhbWVzIG9ubHk7IGl0CiAqIGRvZXMgbm90IGNvbnRhaW4gZnJhbWUgbWV0YWRhdGEuCiAqIC0gMSAtLSBSZXR1cm4gcmVhZCBkYXRhIGJ1ZmZlciBjb250YWlucyBhbiBhcnJheSBvZiBtZXRhZGF0YSBhbmQKICogZW5jb2RlZCBmcmFtZXMuCiAqCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgcG9zdHByb2NvcG9faWQ7Ci8qIFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mIHByb2Nlc3NpbmcpIG9mIHBvc3Rwcm9jZXNzaW5nCiAqIGFsZ29yaXRobXMuIDxpPk5vbmU8L2k+IG1lYW5zIG5vIHBvc3Rwcm9jZXNzaW5nLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX0RFRkFVTFQKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9NQ0hfUEVBS19WT0wKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgZGVjX2ZtdF9pZDsKLyogU3BlY2lmaWVzIHRoZSBtZWRpYSB0eXBlIG9mIHRoZSBpbnB1dCBkYXRhLiBQQ00gaW5kaWNhdGVzIHRoYXQKICogbm8gZGVjb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQsIGUuZy4sIHRoaXMgaXMgYW4gTlQgZW5jb2RlcgogKiBzZXNzaW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQURQQ00KICogLSAjQVNNX01FRElBX0ZNVF9NUDMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfVjIKICogLSAjQVNNX01FRElBX0ZNVF9ET0xCWV9BQUMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0FNUldCX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1NCQwogKiAtICNBU01fTUVESUFfRk1UX1dNQV9WMTBQUk9fVjIKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjlfVjIKICogLSAjQVNNX01FRElBX0ZNVF9BTVJfV0JfUExVU19WMgogKiAtICNBU01fTUVESUFfRk1UX0FDMwogKiAtICNBU01fTUVESUFfRk1UX0c3MTFfQUxBV19GUwogKiAtICNBU01fTUVESUFfRk1UX0c3MTFfTUxBV19GUwogKiAtICNBU01fTUVESUFfRk1UX0c3MjlBX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVhBTVBMRQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGVuY19jZmdfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBmb3IgdGhlIG91dHB1dCBvZiB0aGUgc3RyZWFtLiBQQ00KICogaW5kaWNhdGVzIHRoYXQgbm8gZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQsIGUuZy4sIHRoaXMgaXMgYW4gTlQKICogZGVjb2RlciBzZXNzaW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9TQkMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX01MQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzI5QV9GUwogKiAtICNBU01fTUVESUFfRk1UX0VYQU1QTEUKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjgKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IEFTTSBtb2R1bGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fTE9PUEJBQ0tfVjIgMHgwMDAxMEQ4RQpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl9sb29wYmFja192MiB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBmbGFncy4KICogQml0IDAtMzE6IHJlc2VydmVkOyBjbGllbnQgc2hvdWxkIHNldCB0aGVzZSBiaXRzIHRvIDAKICovCgl1MTYgICAgICAgICAgICAgICAgICAgIHNyY19lbmRwb2ludHlwZTsKCS8qIEVuZHBvaW50IHR5cGUuIDAgPSBUeCBNYXRyaXggKi8KCXUxNiAgICAgICAgICAgICAgICAgICAgc2lua19lbmRwb2ludHlwZTsKCS8qIEVuZHBvaW50IHR5cGUuIDAgPSBSeCBNYXRyaXggKi8KCXUzMiAgICAgICAgICAgICAgICAgICAgcG9zdHByb2NvcG9faWQ7Ci8qIFBvc3Rwcm9jZXNzb3IgdG9wb2xvZ3kgSUQuIFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgb2YKICogcG9zdHByb2Nlc3NpbmcgYWxnb3JpdGhtcy4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIFRoZSBudW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHByb2Nlc3NlZCBieSBBU00gbW9kdWxlcwogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KfSBfX3BhY2tlZDsKCgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLICAgIDB4MDAwMTBEQkEKCi8qIEJpdG1hc2sgZm9yIHRoZSBzdHJlYW0ncyBQZXJmb3JtYW5jZSBtb2RlLiAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9UUkFOU0NPREVfTE9PUEJBQ0sgXAoJKDB4NzAwMDAwMDBVTCkKCi8qIEJpdCBzaGlmdCBmb3IgdGhlIHN0cmVhbSdzIFBlcmZvcm1hbmNlIG1vZGUuICovCiNkZWZpbmUgQVNNX1NISUZUX1NUUkVBTV9QRVJGX01PREVfRkxBR19JTl9PUEVOX1RSQU5TQ09ERV9MT09QQkFDSyAgICAyOAoKLyogQml0bWFzayBmb3IgdGhlIGRlY29kZXIgY29udmVydGVyIGVuYWJsZSBmbGFnLiAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS19ERUNPREVSX0NPTlZFUlRFUl9GTEFHICAgICgweDAwMDAwMDc4VUwpCgovKiBTaGlmdCB2YWx1ZSBmb3IgdGhlIGRlY29kZXIgY29udmVydGVyIGVuYWJsZSBmbGFnLiAqLwojZGVmaW5lIEFTTV9TSElGVF9ERUNPREVSX0NPTlZFUlRFUl9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwoKLyogQ29udmVydGVyIG1vZGUgaXMgTm9uZSAoRGVmYXVsdCkuICovCiNkZWZpbmUgQVNNX0NPTlZFUlRFUl9NT0RFX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCgovKiBDb252ZXJ0ZXIgbW9kZSBpcyBERFAtdG8tREQuICovCiNkZWZpbmUgQVNNX0REUF9ERF9DT05WRVJURVJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCgovKiAgSWRlbnRpZmllcyBhIHNwZWNpYWwgY29udmVydGVyIG1vZGUgd2hlcmUgc291cmNlIGFuZCBzaW5rIGZvcm1hdHMKICogIGFyZSB0aGUgc2FtZSBidXQgcG9zdHByb2Nlc3NpbmcgbXVzdCBhcHBsaWVkLiBUaGVyZWZvcmUsIERlY29kZQogKiAgQHJhcnJvdyBSZS1lbmNvZGUgaXMgbmVjZXNzYXJ5LgogKi8KI2RlZmluZSBBU01fUE9TVF9QUk9DRVNTX0NPTlZFUlRFUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKCgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl90cmFuc2NvZGVfbG9vcGJhY2tfdCB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBGbGFncyBzcGVjaWZpZXMgdGhlIHBlcmZvcm1hbmNlIG1vZGUgaW4gd2hpY2ggdGhpcyBzdHJlYW0KICogaXMgdG8gYmUgb3BlbmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVze2ZvciBiaXRzIDMwIHRvIDI4fShzdHJlYW1fcGVyZl9tb2RlIGZsYWcpCiAqCiAqICNBU01fTEVHQUNZX1NUUkVBTV9TRVNTSU9OIC0tIFRoaXMgbW9kZSBlbnN1cmVzIGJhY2t3YXJkCiAqICAgICAgIGNvbXBhdGliaWxpdHkgdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yCiAqICAgICAgIG9mIEFTTV9TVFJFQU1fQ01EX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLCiAqCiAqICNBU01fTE9XX0xBVEVOQ1lfU1RSRUFNX1NFU1NJT04gLS0gT3BlbnMgYSBsb29wYmFjayBzZXNzaW9uIGJ5IHVzaW5nCiAqICBzaG9ydGVuZWQgYnVmZmVycyBpbiBsb3cgbGF0ZW5jeSBQT1BQCiAqICAtIFJlY29tbWVuZGF0aW9uOiBEbyBub3QgZW5hYmxlIGhpZ2ggbGF0ZW5jeSBhbGdvcml0aG1zLiBUaGV5IG1pZ2h0CiAqICAgIG5lZ2F0ZSB0aGUgYmVuZWZpdHMgb2Ygb3BlbmluZyBhIGxvdyBsYXRlbmN5IHN0cmVhbSwgYW5kIHRoZXkKICogICAgbWlnaHQgYWxzbyBzdWZmZXIgcXVhbGl0eSBkZWdyYWRhdGlvbiBmcm9tIHVuZXhwZWN0ZWQgaml0dGVyLgogKiAgLSBUaGlzIExvdyBMYXRlbmN5IG1vZGUgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIFBDTSBJbiBhbmQgUENNIE91dAogKiAgICBsb29wYmFja3MuIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIExvdyBMYXRlbmN5IG1vZGUgaXMgb3BlbmVkIGZvcgogKiAgICBvdGhlciB0cmFuc2NvZGUgbG9vcGJhY2sgbW9kZXMuCiAqICAtIFRvIGNvbmZpZ3VyZSB0aGlzIHN1YmZpZWxkLCB1c2UKICogICAgIEFTTV9CSVRfTUFTS19TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9UUkFOU0NPREVfTE9PUEJBQ0sgYW5kCiAqICAgICBBU01fU0hJRlRfU1RSRUFNX1BFUkZfTU9ERV9GTEFHX0lOX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVze2ZvciBiaXRzIDYgdG8gM30gKGRlY29kZXItY29udmVydGVyIGNvbXBhdGliaWxpdHkpCiAqICNBU01fQ09OVkVSVEVSX01PREVfTk9ORSAoMHgwKSAtLSBEZWZhdWx0CiAqICNBU01fRERQX0REX0NPTlZFUlRFUl9NT0RFICgweDEpCiAqICNBU01fUE9TVF9QUk9DRVNTX0NPTlZFUlRFUl9NT0RFICgweDIpCiAqIDB4My0weEYgLS0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKICogLSBVc2UgI0FTTV9CSVRfTUFTS19ERUNPREVSX0NPTlZFUlRFUl9GTEFHIGFuZAogKiAgICAgICAgQVNNX1NISUZUX0RFQ09ERVJfQ09OVkVSVEVSX0ZMQUcgdG8gc2V0IHRoaXMgYml0CiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIDAuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgc3JjX2Zvcm1hdF9pZDsKLyogU3BlY2lmaWVzIHRoZSBtZWRpYSBmb3JtYXQgb2YgdGhlIGlucHV0IGF1ZGlvIHN0cmVhbS4KICoKICogU3VwcG9ydGVkIHZhbHVlcwogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjMKICogLSAjQVNNX01FRElBX0ZNVF9EVFMKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzX0RFQwogKiAtICNBU01fTUVESUFfRk1UX0VBQzMKICogLSAjQVNNX01FRElBX0ZNVF9BQzNfREVDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUMzCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgICBzaW5rX2Zvcm1hdF9pZDsKLyogU3BlY2lmaWVzIHRoZSBtZWRpYSBmb3JtYXQgb2YgdGhlIG91dHB1dCBzdHJlYW0uCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YzCiAqIC0gI0FTTV9NRURJQV9GTVRfRFRTIChub3Qgc3VwcG9ydGVkIGluIExvdyBMYXRlbmN5IG1vZGUpCiAqIC0gI0FTTV9NRURJQV9GTVRfRUFDM19ERUMgKG5vdCBzdXBwb3J0ZWQgaW4gTG93IExhdGVuY3kgbW9kZSkKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzIChub3Qgc3VwcG9ydGVkIGluIExvdyBMYXRlbmN5IG1vZGUpCiAqIC0gI0FTTV9NRURJQV9GTVRfQUMzX0RFQyAobm90IHN1cHBvcnRlZCBpbiBMb3cgTGF0ZW5jeSBtb2RlKQogKiAtICNBU01fTUVESUFfRk1UX0FDMyAobm90IHN1cHBvcnRlZCBpbiBMb3cgTGF0ZW5jeSBtb2RlKQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGF1ZHByb2NfdG9wb19pZDsKLyogUG9zdHByb2Nlc3NpbmcgdG9wb2xvZ3kgSUQsIHdoaWNoIHNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mCiAqICAgICAgICBwcm9jZXNzaW5nKSBvZiBwb3N0cHJvY2Vzc2luZyBhbGdvcml0aG1zLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzCiAqICAgIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9ERUZBVUxUCiAqICAgIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9QRUFLTUVURVIKICogICAgLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ19UT1BPX0lEX01DSF9QRUFLX1ZPTAogKiAgICAtICNBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfTk9ORQogKiAgVG9wb2xvZ2llcyBjYW4gYmUgYWRkZWQgdGhyb3VnaCAjQVNNX0NNRF9BRERfVE9QT0xPR0lFUy4KICogIFRoaXMgZmllbGQgaXMgaWdub3JlZCBmb3IgdGhlIENvbnZlcnRlciBtb2RlLCBpbiB3aGljaCBubwogKiAgcG9zdHByb2Nlc3NpbmcgaXMgcGVyZm9ybWVkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHNyY19lbmRwb2ludF90eXBlOwovKiBTcGVjaWZpZXMgdGhlIHNvdXJjZSBlbmRwb2ludCB0aGF0IHByb3ZpZGVzIHRoZSBpbnB1dCBzYW1wbGVzLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzCiAqICAtIDAgLS0gVHggZGV2aWNlIG1hdHJpeCBvciBzdHJlYW0gcm91dGVyIChnYXRld2F5IHRvIHRoZSBoYXJkd2FyZQogKiAgICBwb3J0cykKICogIC0gQWxsIG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQKICogIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byAwLiBPdGhlcndpc2UsIGFuIGVycm9yIGlzIHJldHVybmVkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHNpbmtfZW5kcG9pbnRfdHlwZTsKLyogIFNwZWNpZmllcyB0aGUgc2luayBlbmRwb2ludCB0eXBlLgogKgogKiAgU3VwcG9ydGVkIHZhbHVlcwogKiAgLSAwIC0tIFJ4IGRldmljZSBtYXRyaXggb3Igc3RyZWFtIHJvdXRlciAoZ2F0ZXdheSB0byB0aGUgaGFyZHdhcmUKICogICAgcG9ydHMpCiAqICAtIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkCiAqICAgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIDAuIE90aGVyd2lzZSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiAgIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IHRoZSBBU00gbW9kdWxlcy4KICogICBTdXBwb3J0ZWQgdmFsdWVzIDE2LCAyNAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiAgIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KICovCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9DTE9TRSAgICAgICAgICAgICAweDAwMDEwQkNECiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfRkxVU0ggICAgICAgICAgICAgMHgwMDAxMEJDRQoKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfRkxVU0hfUkVBREJVRlMgICAweDAwMDEwQzA5CiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfU0VUX1BQX1BBUkFNU19WMiAweDAwMDEwREExCgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9sc3c7Ci8qIExTVyBvZiBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuIFN1cHBvcnRlZCB2YWx1ZXM6IGFueS4gKi8KCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKLyogTVNXIG9mIFBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gU3VwcG9ydGVkIHZhbHVlczogYW55LgogKiAtIE11c3QgYmUgc2V0IHRvIHplcm8gZm9yIGluLWJhbmQgZGF0YS4KICogLSBJbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgIGZpZWxkIG11c3QgYmUKICogLSBzZXQgdG8gemVyby4KICogLSBJbiB0aGUgY2FzZSBvZiAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQgMzEgdG8gYml0IDQgb2YKICogbXN3CiAqCiAqIC0gbXVzdCBiZSBzZXQgdG8gemVyby4KICovCgl1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogU3VwcG9ydGVkIFZhbHVlczogQW55LgogKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBEU1AgdGhyb3VnaAogKiBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZC4KICogaWYgbW1oYW5kbGUgaXMgTlVMTCwgdGhlIFBhcmFtRGF0YSBwYXlsb2FkcyBhcmUgd2l0aGluIHRoZQogKiBtZXNzYWdlIHBheWxvYWQgKGluLWJhbmQpLgogKiBJZiBtbWhhbmRsZSBpcyBub24tTlVMTCwgdGhlIFBhcmFtRGF0YSBwYXlsb2FkcyBiZWdpbiBhdCB0aGUKICogYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlIGFkZHJlc3MgbXN3IGFuZCBsc3cgKG91dC1vZi1iYW5kKS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgYWNjb21wYW55aW5nIHRoZQogKiBtZXNzYWdlLCBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlCiAqIHBhcmFtZXRlciBwYXlsb2FkLgogKi8KfSBfX3BhY2tlZDsKCgpzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKCS8qIFVuaXF1ZSBtb2R1bGUgSUQuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgcGFyYW1ldGVyIElELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7Ci8qIERhdGEgc2l6ZSBvZiB0aGUgcGFyYW1faWQvbW9kdWxlX2lkIGNvbWJpbmF0aW9uLiBUaGlzIGlzCiAqIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvCiAqIHplcm8uCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfR0VUX1BQX1BBUkFNU19WMgkJMHgwMDAxMERBMgoKc3RydWN0IGFzbV9zdHJlYW1fY21kX2dldF9wcF9wYXJhbXNfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwoJLyogTFNXIG9mIHRoZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuICovCgl1MzIgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7Ci8qIE1TVyBvZiB0aGUgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLgogKiAtIFNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnksIGlmIHNwZWNpZmllZCwgc2hhbGwgYmUgbGFyZ2UgZW5vdWdoCiAqIHRvIGNvbnRhaW4gdGhlIHdob2xlIFBhcmFtRGF0YSBwYXlsb2FkLCBpbmNsdWRpbmcgTW9kdWxlIElELAogKiBQYXJhbSBJRCwgUGFyYW0gU2l6ZSwgYW5kIFBhcmFtIFZhbHVlcwogKiAtIE11c3QgYmUgc2V0IHRvIHplcm8gZm9yIGluLWJhbmQgZGF0YQogKiAtIEluIHRoZSBjYXNlIG9mIDMyIGJpdCBTaGFyZWQgbWVtb3J5IGFkZHJlc3MsIG1zdyBmaWVsZCBtdXN0IGJlCiAqIHNldCB0byB6ZXJvLgogKiAtIEluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQgNCBvZgogKiBtc3cgbXVzdCBiZSBzZXQgdG8gemVyby4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIFN1cHBvcnRlZCBWYWx1ZXM6IEFueS4KICogbWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgRFNQIHRocm91Z2ggQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TCiAqIGNvbW1hbmQuCiAqIGlmIG1taGFuZGxlIGlzIE5VTEwsIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgaW4gdGhlIEFDSyBhcmUgd2l0aGluIHRoZQogKiBtZXNzYWdlIHBheWxvYWQgKGluLWJhbmQpLgogKiBJZiBtbWhhbmRsZSBpcyBub24tTlVMTCwgdGhlIFBhcmFtRGF0YSBwYXlsb2FkcyBpbiB0aGUgQUNLIGJlZ2luIGF0IHRoZQogKiBhZGRyZXNzIHNwZWNpZmllZCBpbiB0aGUgYWRkcmVzcyBtc3cgYW5kIGxzdy4KICogKG91dC1vZi1iYW5kKS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgbW9kdWxlX2lkOwovKiBVbmlxdWUgbW9kdWxlIElELiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHBhcmFtX2lkOwovKiBVbmlxdWUgcGFyYW1ldGVyIElELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX21heF9zaXplOwovKiBNYXhpbXVtIGRhdGEgc2l6ZSBvZiB0aGUgbW9kdWxlX2lkL3BhcmFtX2lkIGNvbWJpbmF0aW9uLiBUaGlzCiAqIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gQ2xpZW50cyBtdXN0IHNldCB0aGlzCiAqIGZpZWxkIHRvIHplcm8uCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9TRVRfRU5DREVDX1BBUkFNIDB4MDAwMTBDMTAKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTV9WMiAgICAgMHgwMDAxMzIxOAoKc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW1fdjIgewoJdTE2ICAgICAgICAgICAgICAgICAgc2VydmljZV9pZDsKCS8qIDAgLSBBU01fRU5DT0RFUl9TVkM7IDEgLSBBU01fREVDT0RFUl9TVkMgKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIElEIG9mIHRoZSBwYXJhbWV0ZXIuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1fc2l6ZTsKCS8qCgkgKiBEYXRhIHNpemUgb2YgdGhpcyBwYXJhbWV0ZXIsIGluIGJ5dGVzLiBUaGUgc2l6ZSBpcyBhIG11bHRpcGxlCgkgKiBvZiA0IGJ5dGVzLgoJICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1JFR0lTVEVSX0VOQ0RFQ19FVkVOVFMgIDB4MDAwMTMyMTkKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfRU5DREVDX0VWRU5UUyAgICAgICAgICAgMHgwMDAxMzIxQQoKI2RlZmluZSBBVlNfUEFSQU1fSURfUlRJQ19TSEFSRURfTUVNT1JZX0FERFIgICAweDAwMDEzMjM3CgpzdHJ1Y3QgYXZzX3J0aWNfc2hhcmVkX21lbV9hZGRyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtX3YyICBlbmNkZWM7Cgl1MzIgICAgICAgICAgICAgICAgIHNobV9idWZfYWRkcl9sc3c7CgkvKiBMb3dlciAzMiBiaXQgb2YgdGhlIFJUSUMgc2hhcmVkIG1lbW9yeSAqLwoKCXUzMiAgICAgICAgICAgICAgICAgc2htX2J1Zl9hZGRyX21zdzsKCS8qIFVwcGVyIDMyIGJpdCBvZiB0aGUgUlRJQyBzaGFyZWQgbWVtb3J5ICovCgoJdTMyICAgICAgICAgICAgICAgICBidWZfc2l6ZTsKCS8qIFNpemUgb2YgYnVmZmVyICovCgoJdTE2ICAgICAgICAgICAgICAgICBzaG1fYnVmX21lbV9wb29sX2lkOwoJLyogQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MICovCgoJdTE2ICAgICAgICAgICAgICAgICBzaG1fYnVmX251bV9yZWdpb25zOwoJLyogbnVtYmVyIG9mIHJlZ2lvbnMgdG8gbWFwICovCgoJdTMyICAgICAgICAgICAgICAgICBzaG1fYnVmX2ZsYWc7CgkvKiBidWZmZXIgcHJvcGVydHkgZmxhZyAqLwoKCXN0cnVjdCBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCBtYXBfcmVnaW9uOwoJLyogbWVtb3J5IG1hcCByZWdpb24qLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBVlNfUEFSQU1fSURfUlRJQ19FVkVOVF9BQ0sgICAgICAgICAgIDB4MDAwMTMyMzgKCnN0cnVjdCBhdnNfcGFyYW1fcnRpY19ldmVudF9hY2sgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW1fdjIgIGVuY2RlYzsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0VOQ0RFQ19CSVRSQVRFICAgICAweDAwMDEwQzEzCgpzdHJ1Y3QgYXNtX2JpdHJhdGVfcGFyYW0gewoJdTMyICAgICAgICAgICAgICAgICAgYml0cmF0ZTsKLyogTWF4aW11bSBzdXBwb3J0ZWQgYml0cmF0ZS4gT25seSB0aGUgQUFDIGVuY29kZXIgaXMgc3VwcG9ydGVkLiovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fUEFSQU1fSURfRU5DREVDX0VOQ19DRkdfQkxLX1YyIDB4MDAwMTBEQTMKI2RlZmluZSBBU01fUEFSQU1fSURfQUFDX1NCUl9QU19GTEFHCQkgMHgwMDAxMEM2MwoKLyogRmxhZyB0byB0dXJuIG9mZiBib3RoIFNCUiBhbmQgUFMgcHJvY2Vzc2luZywgaWYgdGhleSBhcmUKICogcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtLgogKi8KCiNkZWZpbmUgQVNNX0FBQ19TQlJfT0ZGX1BTX09GRiAoMikKCi8qIEZsYWcgdG8gdHVybiBvbiBTQlIgYnV0IHR1cm4gb2ZmIFBTIHByb2Nlc3NpbmcsaWYgdGhleSBhcmUKICogcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtLgogKi8KCiNkZWZpbmUgQVNNX0FBQ19TQlJfT05fUFNfT0ZGICAoMSkKCi8qIEZsYWcgdG8gdHVybiBvbiBib3RoIFNCUiBhbmQgUFMgcHJvY2Vzc2luZywgaWYgdGhleSBhcmUKICogcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtIChkZWZhdWx0IGJlaGF2aW9yKS4KICovCgoKI2RlZmluZSBBU01fQUFDX1NCUl9PTl9QU19PTiAgICgwKQoKLyogU3RydWN0dXJlIGZvciBhbiBBQUMgU0JSIFBTIHByb2Nlc3NpbmcgZmxhZy4gKi8KCi8qICBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0FBQ19TQlJfUFNfRkxBRyBwYXJhbWV0ZXIgaW4gdGhlCiAqICNBU01fU1RSRUFNX0NNRF9TRVRfRU5DREVDX1BBUkFNIGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYXNtX2FhY19zYnJfcHNfZmxhZ19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7CgoJdTMyICAgICAgICAgICAgICAgICAgc2JyX3BzX2ZsYWc7Ci8qIENvbnRyb2wgcGFyYW1ldGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNCUi9QUyBwcm9jZXNzaW5nIGluCiAqIHRoZSBBQUMgYml0c3RyZWFtLiBVc2UgdGhlIGZvbGxvd2luZyBtYWNyb3MgdG8gc2V0IHRoaXMgZmllbGQ6CiAqIC0gI0FTTV9BQUNfU0JSX09GRl9QU19PRkYgLS0gVHVybiBvZmYgYm90aCBTQlIgYW5kIFBTCiAqIHByb2Nlc3NpbmcsIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbS4KICogLSAjQVNNX0FBQ19TQlJfT05fUFNfT0ZGIC0tIFR1cm4gb24gU0JSIHByb2Nlc3NpbmcsIGJ1dCBub3QgUFMKICogcHJvY2Vzc2luZywgaWYgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtLgogKiAtICNBU01fQUFDX1NCUl9PTl9QU19PTiAtLSBUdXJuIG9uIGJvdGggU0JSIGFuZCBQUyBwcm9jZXNzaW5nLAogKiBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBiaXRzdHJlYW0gKGRlZmF1bHQgYmVoYXZpb3IpLgogKiAtIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGludmFsaWQuCiAqIENoYW5nZXMgYXJlIGFwcGxpZWQgdG8gdGhlIG5leHQgZGVjb2RlZCBmcmFtZS4KICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQUNfRFVBTF9NT05PX01BUFBJTkcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM2NAoKLyoJRmlyc3Qgc2luZ2xlIGNoYW5uZWwgZWxlbWVudCBpbiBhIGR1YWwgbW9ubyBiaXRzdHJlYW0uKi8KI2RlZmluZSBBU01fQUFDX0RVQUxfTU9OT19NQVBfU0NFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKCi8qCVNlY29uZCBzaW5nbGUgY2hhbm5lbCBlbGVtZW50IGluIGEgZHVhbCBtb25vIGJpdHN0cmVhbS4qLwojZGVmaW5lIEFTTV9BQUNfRFVBTF9NT05PX01BUF9TQ0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKQoKLyogU3RydWN0dXJlIGZvciBBQUMgZGVjb2RlciBkdWFsIG1vbm8gY2hhbm5lbCBtYXBwaW5nLiAqLwoKCnN0cnVjdCBhc21fYWFjX2R1YWxfbW9ub19tYXBwaW5nX3BhcmFtIHsKCXN0cnVjdCBhcHJfaGRyCQkJCQkJCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtCWVuY2RlYzsKCXUxNiAgICBsZWZ0X2NoYW5uZWxfc2NlOwoJdTE2ICAgIHJpZ2h0X2NoYW5uZWxfc2NlOwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURSU1BfR0VUX1BQX1BBUkFNU19WMiAweDAwMDEwREE0CgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRyc3BfZ2V0X3BwX3BhcmFtc192MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfS0FSQU9LRV9NT0RFIDB4MDAwMTBENzMKCi8qIEVudW1lcmF0aW9uIGZvciBib3RoIHZvY2FscyBpbiBhIGthcmFva2Ugc3RyZWFtLiovCiNkZWZpbmUgQUMzX0tBUkFPS0VfTU9ERV9OT19WT0NBTCAgICAgKDApCgovKiBFbnVtZXJhdGlvbiBmb3Igb25seSB0aGUgbGVmdCB2b2NhbCBpbiBhIGthcmFva2Ugc3RyZWFtLiovCiNkZWZpbmUgQUMzX0tBUkFPS0VfTU9ERV9MRUZUX1ZPQ0FMICAgKDEpCgovKiBFbnVtZXJhdGlvbiBmb3Igb25seSB0aGUgcmlnaHQgdm9jYWwgaW4gYSBrYXJhb2tlIHN0cmVhbS4qLwojZGVmaW5lIEFDM19LQVJBT0tFX01PREVfUklHSFRfVk9DQUwgKDIpCgovKiBFbnVtZXJhdGlvbiBmb3IgYm90aCB2b2NhbCBjaGFubmVscyBpbiBhIGthcmFva2Ugc3RyZWFtLiovCiNkZWZpbmUgQUMzX0tBUkFPS0VfTU9ERV9CT1RIX1ZPQ0FMICAgICAgICAgICAgICgzKQojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfRFJDX01PREUgICAgICAgICAgICAgICAweDAwMDEwRDc0Ci8qIEVudW1lcmF0aW9uIGZvciB0aGUgQ3VzdG9tIEFuYWxvZyBtb2RlLiovCiNkZWZpbmUgQUMzX0RSQ19NT0RFX0NVU1RPTV9BTkFMT0cgICAgICAgICAgICAgICgwKQoKLyogRW51bWVyYXRpb24gZm9yIHRoZSBDdXN0b20gRGlnaXRhbCBtb2RlLiovCiNkZWZpbmUgQUMzX0RSQ19NT0RFX0NVU1RPTV9ESUdJVEFMICAgICAgICAgICAgICgxKQovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIExpbmUgT3V0IG1vZGUgKGxpZ2h0IGNvbXByZXNzaW9uKS4qLwojZGVmaW5lIEFDM19EUkNfTU9ERV9MSU5FX09VVCAgKDIpCgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFJGIHJlbW9kdWxhdGlvbiBtb2RlIChoZWF2eSBjb21wcmVzc2lvbikuKi8KI2RlZmluZSBBQzNfRFJDX01PREVfUkZfUkVNT0QgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19EVUFMX01PTk9fTU9ERSAgICAgICAgICAgICAgIDB4MDAwMTBENzUKCi8qIEVudW1lcmF0aW9uIGZvciBwbGF5aW5nIGR1YWwgbW9ubyBpbiBzdGVyZW8gbW9kZS4qLwojZGVmaW5lIEFDM19EVUFMX01PTk9fTU9ERV9TVEVSRU8gICAgICAgICAgICAgICAgICAgICAoMCkKCi8qIEVudW1lcmF0aW9uIGZvciBwbGF5aW5nIGxlZnQgbW9uby4qLwojZGVmaW5lIEFDM19EVUFMX01PTk9fTU9ERV9MRUZUX01PTk8gICAgICAgICAgICAgICAgICAoMSkKCi8qIEVudW1lcmF0aW9uIGZvciBwbGF5aW5nIHJpZ2h0IG1vbm8uKi8KI2RlZmluZSBBQzNfRFVBTF9NT05PX01PREVfUklHSFRfTU9OTyAgICAgICAgICAgICAgICAgKDIpCgovKiBFbnVtZXJhdGlvbiBmb3IgbWl4aW5nIGJvdGggZHVhbCBtb25vIGNoYW5uZWxzIGFuZCBwbGF5aW5nIHRoZW0uKi8KI2RlZmluZSBBQzNfRFVBTF9NT05PX01PREVfTUlYRURfTU9OTyAgICAgICAgKDMpCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19TVEVSRU9fRE9XTk1JWF9NT0RFIDB4MDAwMTBENzYKCi8qIEVudW1lcmF0aW9uIGZvciB1c2luZyB0aGUgRG93bm1peCBtb2RlIGluZGljYXRlZCBpbiB0aGUgYml0c3RyZWFtLiAqLwoKI2RlZmluZSBBQzNfU1RFUkVPX0RPV05NSVhfTU9ERV9BVVRPX0RFVEVDVCAgKDApCgovKiBFbnVtZXJhdGlvbiBmb3IgU3Vycm91bmQgQ29tcGF0aWJsZSBtb2RlIChwcmVzZXJ2ZXMgdGhlCiAqIHN1cnJvdW5kIGluZm9ybWF0aW9uKS4KICovCgojZGVmaW5lIEFDM19TVEVSRU9fRE9XTk1JWF9NT0RFX0xUX1JUICAgICAgICAoMSkKLyogRW51bWVyYXRpb24gZm9yIE1vbm8gQ29tcGF0aWJsZSBtb2RlIChpZiB0aGUgb3V0cHV0IGlzIHRvIGJlCiAqIGZ1cnRoZXIgZG93bm1peGVkIHRvIG1vbm8pLgogKi8KCiNkZWZpbmUgQUMzX1NURVJFT19ET1dOTUlYX01PREVfTE9fUk8gKDIpCgovKiBJRCBvZiB0aGUgQUMzIFBDTSBzY2FsZSBmYWN0b3IgcGFyYW1ldGVyIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfQUMzX1BDTV9TQ0FMRUZBQ1RPUiAweDAwMDEwRDc4CgovKiBJRCBvZiB0aGUgQUMzIERSQyBib29zdCBzY2FsZSBmYWN0b3IgcGFyYW1ldGVyIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfQUMzX0RSQ19CT09TVF9TQ0FMRUZBQ1RPUiAweDAwMDEwRDc5CgovKiBJRCBvZiB0aGUgQUMzIERSQyBjdXQgc2NhbGUgZmFjdG9yIHBhcmFtZXRlciBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19EUkNfQ1VUX1NDQUxFRkFDVE9SIDB4MDAwMTBEN0EKCi8qIFN0cnVjdHVyZSBmb3IgQUMzIEdlbmVyaWMgUGFyYW1ldGVyLiAqLwoKLyogIFBheWxvYWQgb2YgdGhlIEFDMyBwYXJhbWV0ZXJzIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8Kc3RydWN0IGFzbV9hYzNfZ2VuZXJpY19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7Cgl1MzIgICAgICAgICAgICAgICAgICBnZW5lcmljX3BhcmFtZXRlcjsKLyogQUMzIGdlbmVyaWMgcGFyYW1ldGVyLiBTZWxlY3QgZnJvbSBvbmUgb2YgdGhlIGZvbGxvd2luZwogKiBwb3NzaWJsZSB2YWx1ZXMuCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19LQVJBT0tFX01PREUsIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogKiAtIEFDM19LQVJBT0tFX01PREVfTk9fVk9DQUwKICogLSBBQzNfS0FSQU9LRV9NT0RFX0xFRlRfVk9DQUwKICogLSBBQzNfS0FSQU9LRV9NT0RFX1JJR0hUX1ZPQ0FMCiAqIC0gQUMzX0tBUkFPS0VfTU9ERV9CT1RIX1ZPQ0FMCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19EUkNfTU9ERSwgc3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAqIC0gQUMzX0RSQ19NT0RFX0NVU1RPTV9BTkFMT0cKICogLSBBQzNfRFJDX01PREVfQ1VTVE9NX0RJR0lUQUwKICogLSBBQzNfRFJDX01PREVfTElORV9PVVQKICogLSBBQzNfRFJDX01PREVfUkZfUkVNT0QKICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX0RVQUxfTU9OT19NT0RFLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZToKICogLSBBQzNfRFVBTF9NT05PX01PREVfU1RFUkVPCiAqIC0gQUMzX0RVQUxfTU9OT19NT0RFX0xFRlRfTU9OTwogKiAtIEFDM19EVUFMX01PTk9fTU9ERV9SSUdIVF9NT05PCiAqIC0gQUMzX0RVQUxfTU9OT19NT0RFX01JWEVEX01PTk8KICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX1NURVJFT19ET1dOTUlYX01PREUsIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogKiAtIEFDM19TVEVSRU9fRE9XTk1JWF9NT0RFX0FVVE9fREVURUNUCiAqIC0gQUMzX1NURVJFT19ET1dOTUlYX01PREVfTFRfUlQKICogLSBBQzNfU1RFUkVPX0RPV05NSVhfTU9ERV9MT19STwogKgogKiBGb3IgI0FTTV9QQVJBTV9JRF9BQzNfUENNX1NDQUxFRkFDVE9SLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZQogKiAwIHRvIDEgaW4gUTMxIGZvcm1hdC4KICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX0RSQ19CT09TVF9TQ0FMRUZBQ1RPUiwgc3VwcG9ydGVkIHZhbHVlcyBhcmUKICogMCB0byAxIGluIFEzMSBmb3JtYXQuCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19EUkNfQ1VUX1NDQUxFRkFDVE9SLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZQogKiAwIHRvIDEgaW4gUTMxIGZvcm1hdC4KICovCn0gX19wYWNrZWQ7CgovKiBFbnVtZXJhdGlvbiBmb3IgUmF3IG1vZGUgKG5vIGRvd25taXhpbmcpLCB3aGljaCBzcGVjaWZpZXMKICogdGhhdCBhbGwgY2hhbm5lbHMgaW4gdGhlIGJpdHN0cmVhbSBhcmUgdG8gYmUgcGxheWVkIG91dCBhcyBpcwogKiB3aXRob3V0IGFueSBkb3dubWl4aW5nLiAoRGVmYXVsdCkKICovCgojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfUkFXICgtMSkKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBjaGFubmVsIG1hc2sgdG8gMC4gVGhlIDcuMSBtb2RlCiAqIChIb21lIFRoZWF0ZXIpIGlzIGFzc2lnbmVkLgogKi8KCgojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfWkVSTyAweDAwMDAKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIG9uZSBjaGFubmVsIChIb21lIFRoZWF0ZXIsIG1vbm8pLgogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfMV9DIDB4MDAwNAoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgdHdvIGNoYW5uZWxzIChIb21lIFRoZWF0ZXIsIHN0ZXJlbykuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzJfTF9SIDB4MDAwMwoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgdGhyZWUgY2hhbm5lbHMgKEhvbWUgVGhlYXRlcikuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfM19MX0NfUiAweDAwMDcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHR3byBjaGFubmVscyAoc3RlcmVvKS4KICogLSBTcGVha2VyIGJhY2sgbGVmdAogKiAtIFNwZWFrZXIgYmFjayByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzJfQmxfQnIgIDB4MDAzMAoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgZm91ciBjaGFubmVscy4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS180X0xfUl9CbF9CciAweDAwMzMKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZvdXIgY2hhbm5lbHMgKEhvbWUgVGhlYXRlcikuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGNlbnRlcgogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzRfTF9SX0NfQmNfSFQgMHgwMTA3Ci8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZpdmUgY2hhbm5lbHMuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181X0xfQ19SX0JsX0JyICAweDAwMzcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZpdmUgY2hhbm5lbHMgKDUgbW9kZSwgSG9tZSBUaGVhdGVyKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIHNpZGUgbGVmdAogKiAtIFNwZWFrZXIgc2lkZSByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzVfTF9DX1JfU2xfU3JfSFQgICAweDA2MDcKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2l4IGNoYW5uZWxzICg1LjEgbW9kZSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181RE9UMV9MX0NfUl9CbF9Ccl9TTEYgIDB4MDAzRgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBzaXggY2hhbm5lbHMgKDUuMSBtb2RlLCBIb21lIFRoZWF0ZXIpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgbG93IGZyZXF1ZW5jeQogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNURPVDFfTF9DX1JfU2xfU3JfU0xGX0hUICAweDA2MEYKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2l4IGNoYW5uZWxzICg1LjEgbW9kZSwgbm8gTEZFKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGJhY2sgbGVmdAogKiAtIFNwZWFrZXIgYmFjayByaWdodAogKiAtIFNwZWFrZXIgYmFjayBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181RE9UMV9MX0NfUl9CbF9Ccl9CYyAgMHgwMTM3Ci8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNpeCBjaGFubmVscyAoNS4xIG1vZGUsIEhvbWUgVGhlYXRlciwKICogbm8gTEZFKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGJhY2sgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181RE9UMV9MX0NfUl9TbF9Tcl9CY19IVCAgIDB4MDcwNwoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2V2ZW4gY2hhbm5lbHMgKDYuMSBtb2RlKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIGJhY2sgbGVmdAogKiAtIFNwZWFrZXIgYmFjayByaWdodAogKiAtIFNwZWFrZXIgYmFjayBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9CbF9Ccl9CY19TTEYgICAweDAxM0YKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNldmVuIGNoYW5uZWxzICg2LjEgbW9kZSwgSG9tZQogKiBUaGVhdGVyKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIGJhY2sgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9TbF9Tcl9CY19TTEZfSFQgMHgwNzBGCgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBzZXZlbiBjaGFubmVscyAoNi4xIG1vZGUsIG5vIExGRSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGxlZnQgb2YgY2VudGVyCiAqIC0gU3BlYWtlciBmcm9udCByaWdodCBvZiBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9CbF9Ccl9TRkxPQ19TRlJPQyAgIDB4MDBGNwoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2V2ZW4gY2hhbm5lbHMgKDYuMSBtb2RlLCBIb21lCiAqIFRoZWF0ZXIsIG5vIExGRSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGxlZnQgb2YgY2VudGVyCiAqIC0gU3BlYWtlciBmcm9udCByaWdodCBvZiBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9TbF9Tcl9TRkxPQ19TRlJPQ19IVCAweDA2MzcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGVpZ2h0IGNoYW5uZWxzICg3LjEgbW9kZSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIGZyb250IGxlZnQgb2YgY2VudGVyCiAqIC0gU3BlYWtlciBmcm9udCByaWdodCBvZiBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS183RE9UMV9MX0NfUl9CbF9Ccl9TTEZfU0ZMT0NfU0ZST0MgXAoJCQkJCTB4MDBGRgoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgZWlnaHQgY2hhbm5lbHMgKDcuMSBtb2RlLCBIb21lIFRoZWF0ZXIpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0IG9mIGNlbnRlcgogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQgb2YgY2VudGVyCiAqCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfN0RPVDFfTF9DX1JfU2xfU3JfU0xGX1NGTE9DX1NGUk9DX0hUIFwKCQkJCQkweDA2M0YKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0RFQ19PVVRQVVRfQ0hBTl9NQVAgIDB4MDAwMTBEODIKCi8qIE1heGltdW0gbnVtYmVyIG9mIGRlY29kZXIgb3V0cHV0IGNoYW5uZWxzLiAqLwojZGVmaW5lIE1BWF9DSEFOX01BUF9DSEFOTkVMUyAgMTYKCi8qIFN0cnVjdHVyZSBmb3IgZGVjb2RlciBvdXRwdXQgY2hhbm5lbCBtYXBwaW5nLiAqLwoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9ERUNfT1VUUFVUX0NIQU5fTUFQIHBhcmFtZXRlciBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCnN0cnVjdCBhc21fZGVjX291dF9jaGFuX21hcF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJdTMyICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBkZWNvZGVyIG91dHB1dCBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAjTUFYX0NIQU5fTUFQX0NIQU5ORUxTCiAqCiAqIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgbmF0aXZlIGNoYW5uZWwgbWFwcGluZywgd2hpY2ggaXMgdmFsaWQKICogb25seSBmb3IgTlQgbW9kZS4gVGhpcyBtZWFucyB0aGUgb3V0cHV0IG9mIHRoZSBkZWNvZGVyIGlzIHRvIGJlCiAqIHByZXNlcnZlZCBhcyBpcy4KICovCgl1OCAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwcGluZ1tNQVhfQ0hBTl9NQVBfQ0hBTk5FTFNdOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgIDB4MDAwMTBEODQKCi8qIEJpdG1hc2sgZm9yIHRoZSBJRUMgNjE5MzcgZW5hYmxlIGZsYWcuKi8KI2RlZmluZSBBU01fQklUX01BU0tfSUVDXzYxOTM3X1NUUkVBTV9GTEFHICAgKDB4MDAwMDAwMDFVTCkKCi8qIFNoaWZ0IHZhbHVlIGZvciB0aGUgSUVDIDYxOTM3IGVuYWJsZSBmbGFnLiovCiNkZWZpbmUgQVNNX1NISUZUX0lFQ182MTkzN19TVFJFQU1fRkxBRyAgMAoKLyogQml0bWFzayBmb3IgdGhlIElFQyA2MDk1OCBlbmFibGUgZmxhZy4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19JRUNfNjA5NThfU1RSRUFNX0ZMQUcgICAoMHgwMDAwMDAwMlVMKQoKLyogU2hpZnQgdmFsdWUgZm9yIHRoZSBJRUMgNjA5NTggZW5hYmxlIGZsYWcuKi8KI2RlZmluZSBBU01fU0hJRlRfSUVDXzYwOTU4X1NUUkVBTV9GTEFHICAgMQoKLyogUGF5bG9hZCBmb3JtYXQgZm9yIG9wZW4gd3JpdGUgY29tcHJlc3NlZCBjb21tYW5kICovCgovKiBQYXlsb2FkIGZvcm1hdCBmb3IgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQKICogY29tbWFuZCwgd2hpY2ggb3BlbnMgYSBzdHJlYW0gZm9yIGEgZ2l2ZW4gc2Vzc2lvbiBJRCBhbmQgc3RyZWFtIElECiAqIHRvIGJlIHJlbmRlcmVkIGluIHRoZSBjb21wcmVzc2VkIGZvcm1hdC4KICovCgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl93cml0ZV9jb21wcmVzc2VkIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MgdGhhdCBjb25maWd1cmUgdGhlIHN0cmVhbSBmb3IgYSBzcGVjaWZpYyBmb3JtYXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gQml0IDAgLS0gSUVDIDYxOTM3IGNvbXBhdGliaWxpdHkKICogICAtIDAgLS0gU3RyZWFtIGlzIG5vdCBpbiBJRUMgNjE5MzcgZm9ybWF0CiAqICAgLSAxIC0tIFN0cmVhbSBpcyBpbiBJRUMgNjE5MzcgZm9ybWF0CiAqIC0gQml0IDEgLS0gSUVDIDYwOTU4IGNvbXBhdGliaWxpdHkKICogICAtIDAgLS0gU3RyZWFtIGlzIG5vdCBpbiBJRUMgNjA5NTggZm9ybWF0CiAqICAgLSAxIC0tIFN0cmVhbSBpcyBpbiBJRUMgNjA5NTggZm9ybWF0CiAqIC0gQml0cyAyIHRvIDMxIC0tIDAgKFJlc2VydmVkKQogKgogKiBGb3IgdGhlIHNhbWUgc3RyZWFtLCBiaXQgMCBjYW5ub3QgYmUgc2V0IHRvIDAgYW5kIGJpdCAxIGNhbm5vdAogKiBiZSBzZXQgdG8gMS4gQSBjb21wcmVzc2VkIHN0cmVhbSBjb25ub3QgaGF2ZSBJRUMgNjA5NTgKICogcGFja2V0aXphdGlvbiBhcHBsaWVkIHdpdGhvdXQgSUVDIDYxOTM3IHBhY2tldGl6YXRpb24uCiAqIEBub3RlMWhhbmcgQ3VycmVudGx5LCBJRUMgNjA5NTggcGFja2V0aXplZCBpbnB1dCBzdHJlYW1zIGFyZSBub3QKICogc3VwcG9ydGVkLgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgICBmbXRfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgSERNSSBzdHJlYW0gdG8gYmUgb3BlbmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FDMwogKiAtICNBU01fTUVESUFfRk1UX0VBQzMKICogLSAjQVNNX01FRElBX0ZNVF9EVFMKICogLSAjQVNNX01FRElBX0ZNVF9BVFJBQwogKiAtICNBU01fTUVESUFfRk1UX01BVAogKgogKiBAbm90ZTFoYW5nIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gYSB2YWxpZCBtZWRpYSB0eXBlIGV2ZW4gaWYKICogSUVDIDYxOTM3IHBhY2tldGl6YXRpb24gaXMgbm90IHBlcmZvcm1lZCBieSB0aGUgYURTUC4KICovCgp9IF9fcGFja2VkOwoKCi8qIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGNoYW5uZWwgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbS4KICovCiNkZWZpbmUgQVNNX0RBVEFfQ01EX1JFTU9WRV9JTklUSUFMX1NJTEVOQ0UgMHgwMDAxMEQ2NwoKLyogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgY2hhbm5lbCB0byBiZSByZW1vdmVkIGZyb20KICogdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgogKi8KI2RlZmluZSBBU01fREFUQV9DTURfUkVNT1ZFX1RSQUlMSU5HX1NJTEVOQ0UgMHgwMDAxMEQ2OAoKc3RydWN0IGFzbV9kYXRhX2NtZF9yZW1vdmVfc2lsZW5jZSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIJbnVtX3NhbXBsZXNfdG9fcmVtb3ZlOwoJLyogPCBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgY2hhbm5lbCB0byBiZSByZW1vdmVkLgoJICogQHZhbHVlcyAwIHRvICgyQHNzY3J7MzJ9LTEpCgkgKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEX0NPTVBSRVNTRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwRDk1CgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl9yZWFkX2NvbXByZXNzZWQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgICBtb2RlX2ZsYWdzOwovKiBNb2RlIGZsYWdzIHRoYXQgaW5kaWNhdGUgd2hldGhlciBtZXRhIGluZm9ybWF0aW9uIHBlciBlbmNvZGVkCiAqIGZyYW1lIGlzIHRvIGJlIHByb3ZpZGVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNDoKICogLSAwIC0tIFJldHVybiBkYXRhIGJ1ZmZlciBjb250YWlucyBhbGwgZW5jb2RlZCBmcmFtZXMgb25seTsgaXQgZG9lcwogKiAgICAgIG5vdCBjb250YWluIGZyYW1lIG1ldGFkYXRhLgogKiAtIDEgLS0gUmV0dXJuIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFuIGFycmF5IG9mIG1ldGFkYXRhIGFuZCBlbmNvZGVkCiAqICAgICAgZnJhbWVzLgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLX01FVEFfSU5GT19GTEFHIHRvIHNldCB0aGUgYml0bWFzayBhbmQKICogI0FTTV9TSElGVF9NRVRBX0lORk9fRkxBRyB0byBzZXQgdGhlIHNoaWZ0IHZhbHVlIGZvciB0aGlzIGJpdC4KICogQWxsIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkOyBjbGllbnRzIG11c3Qgc2V0IHRoZW0gdG8gemVyby4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgICBmcmFtZXNfcGVyX2J1ZjsKLyogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgbmVlZCB0byBiZSByZXR1cm5lZCBwZXIKICogcmVhZCBidWZmZXIKICogU3VwcG9ydGVkIHZhbHVlczogc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCiAqLwoKfSBfX3BhY2tlZDsKCi8qIGFkc3BfYXNtX3N0cmVhbV9jb21tYW5kcy5oKi8KCgovKiBhZHNwX2FzbV9hcGkuaCAobm8gY2hhbmdlcykqLwojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfREVGQVVMVCBcCgkJCQkJCQkJMHgwMDAxMEJFNAojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfUEVBS01FVEVSIFwKCQkJCQkJCQkweDAwMDEwRDgzCiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FIFwKCQkJCQkJCQkweDAwMDEwQzY4CiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9NQ0hfUEVBS19WT0wgXAoJCQkJCQkJCTB4MDAwMTBEOEIKI2RlZmluZSBBU01fU1RSRUFNX1BSRVBST0NPUE9fSURfREVGQVVMVCBcCgkJCUFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfREVGQVVMVAojZGVmaW5lIEFTTV9TVFJFQU1fUFJFUFJPQ09QT19JRF9OT05FIFwKCQkJQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX05PTkVfQVVESU9fQ09QUCBcCgkJCTB4MDAwMTAzMTIKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9NT05PX0FVRElPX0NPUFAgXAoJCQkJCQkJCTB4MDAwMTAzMTMKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fQVVESU9fQ09QUCBcCgkJCQkJCQkJMHgwMDAxMDMxNAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX1NURVJFT19JSVJfQVVESU9fQ09QUFwKCQkJCQkJCQkweDAwMDEwNzA0CiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX1NQRUFLRVJfTU9OT19BVURJT19DT1BQX01CRFJDVjJcCgkJCQkJCQkJMHgwMDAxMDcwRAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX1NURVJFT19BVURJT19DT1BQX01CRFJDVjJcCgkJCQkJCQkJMHgwMDAxMDcwRQojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX1NURVJFT19JSVJfQVVESU9fQ09QUF9NQkRSQ1YyXAoJCQkJCQkJCTB4MDAwMTA3MEYKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fQVVESU9fQ09QUF9NQkRSQ19WMyBcCgkJCQkJCQkJMHgxMTAwMDAwMAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX01DSF9QRUFLX1ZPTCBcCgkJCQkJCQkJMHgwMDAxMDMxQgojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9NSUNfTU9OT19BVURJT19DT1BQICAweDAwMDEwMzE1CiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX01JQ19TVEVSRU9fQVVESU9fQ09QUCAweDAwMDEwMzE2CiNkZWZpbmUgQVVEUFJPQ19DT1BQT1BPTE9HWV9JRF9NQ0hBTl9JSVJfQVVESU8gICAgICAgICAgIDB4MDAwMTA3MTUKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfREVGQVVMVF9BVURJT19DT1BQICAgMHgwMDAxMEJFMwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9QRUFLTUVURVJfQVVESU9fQ09QUCAweDAwMDEwMzE3CiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQUlHICAgMHgwMDAxMDcxNgojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQUlHX0VOQUJMRQkJMHgwMDAxMDcxNwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQUlHX0NPTkZJRwkJMHgwMDAxMDcxOAoKc3RydWN0IEF1ZGlvX0FpZ1BhcmFtIHsKCXVpbnQxNl90CW1vZGU7Ci8qPCBNb2RlIHdvcmQgZm9yIGVuYWJsaW5nIEFJRy9TSUcgbW9kZSAuCiAqIEJ5dGUgb2Zmc2V0OiAwCiAqLwoJaW50MTZfdAkJc3RhdGljR2FpbkwxNlExMjsKLyo8IFN0YXRpYyBpbnB1dCBnYWluIHdoZW4gYWlnTW9kZSBpcyBzZXQgdG8gMS4KICogQnl0ZSBvZmZzZXQ6IDIKICovCglpbnQxNl90CQlpbml0aWFsR2FpbkRCTDE2UTc7Ci8qPEluaXRpYWwgdmFsdWUgdGhhdCB0aGUgYWRhcHRpdmUgZ2FpbiB1cGRhdGUgc3RhcnRzIGZyb20gZEIKICogUTcgQnl0ZSBvZmZzZXQ6IDQKICovCglpbnQxNl90CQlpZGVhbFJNU0RCTDE2UTc7Ci8qPEF2ZXJhZ2UgUk1TIGxldmVsIHRoYXQgQUlHIGF0dGVtcHRzIHRvIGFjaGlldmUgUTguNwogKiBCeXRlIG9mZnNldDogNgogKi8KCWludDMyX3QJCW5vaXNlR2F0ZUwzMjsKLypUaHJlc2hvbGQgYmVsb3cgd2hpY2ggc2lnbmFsIGlzIGNvbnNpZGVyZWQgYXMgbm9pc2UgYW5kIEFJRwogKiBCeXRlIG9mZnNldDogOAogKi8KCWludDMyX3QJCW1pbkdhaW5MMzJRMTU7Ci8qTWluaW11bSBnYWluIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IEFJRyBRMTYuMTUKICogQnl0ZSBvZmZzZXQ6IDEyCiAqLwoJaW50MzJfdAkJbWF4R2FpbkwzMlExNTsKLypNYXhpbXVtIGdhaW4gdGhhdCBjYW4gYmUgcHJvdmlkZWQgYnkgQUlHIFExNi4xNQogKiBCeXRlIG9mZnNldDogMTYKICovCgl1aW50MzJfdAkJZ2FpbkF0UnRVTDMyUTMxOwovKkF0dGFjay9yZWxlYXNlIHRpbWUgZm9yIEFJRyB1cGRhdGUgUTEuMzEKICogQnl0ZSBvZmZzZXQ6IDIwCiAqLwoJdWludDMyX3QJCWxvbmdHYWluQXRSdFVMMzJRMzE7Ci8qTG9uZyBhdHRhY2svcmVsZWFzZSB0aW1lIHdoaWxlIHVwZGF0aW5nIGdhaW4gZm9yCiAqIG5vaXNlL3NpbGVuY2UgUTEuMzEgQnl0ZSBvZmZzZXQ6IDI0CiAqLwoKCXVpbnQzMl90CQlybXNUYXZVTDMyUTMyOwovKiBSTVMgc21vb3RoaW5nIHRpbWUgY29uc3RhbnQgdXNlZCBmb3IgbG9uZy10ZXJtIFJNUyBlc3RpbWF0ZQogKiBRMC4zMiBCeXRlIG9mZnNldDogMjgKICovCgoJdWludDMyX3QJCWdhaW5VcGRhdGVTdGFydFRpbU1zVUwzMlEwOwovKiBUaGUgd2FpdGluZyB0aW1lIGJlZm9yZSB3aGljaCBBSUcgc3RhcnRzIHRvIGFwcGx5IGFkYXB0aXZlCiAqIGdhaW4gdXBkYXRlIFEzMi4wIEJ5dGUgb2Zmc2V0OiAzMgogKi8KCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBRE1fTU9EVUxFX0lEX0VBTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM0QQojZGVmaW5lIEFETV9QQVJBTV9JRF9FQU5TX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzRCCiNkZWZpbmUgQURNX1BBUkFNX0lEX0VBTlNfUEFSQU1TICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDNEMKCnN0cnVjdCBhZG1fZWFuc19lbmFibGUgewoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBFQU5TIGlzIGRpc2FibGVkICgwKSBvciBlbmFibGVkCiAqIChub256ZXJvKS4KICogVGhpcyBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2FtcGxpbmcgcmF0ZXMgb2YgOCwgMTIsIDE2LCAyNCwgMzIsCiAqIGFuZCA0OCBrSHouIEl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNhbXBsaW5nIHJhdGVzIG9mIDExLjAyNSwKICogMjIuMDUsIG9yIDQ0LjEga0h6LgogKi8KCn0gX19wYWNrZWQ7CgoKc3RydWN0IGFkbV9lYW5zX3BhcmFtcyB7CglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbW9kZTsKLyo8IE1vZGUgd29yZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHN1Ym1vZHVsZXMuCiAqIEJ5dGUgb2Zmc2V0OiAwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19pbnB1dF9nYWluOwovKjwgUTIuMTMgaW5wdXQgZ2FpbiB0byB0aGUgRUFOUyBtb2R1bGUuCiAqIEJ5dGUgb2Zmc2V0OiAyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19vdXRwdXRfZ2FpbjsKLyo8IFEyLjEzIG91dHB1dCBnYWluIHRvIHRoZSBFQU5TIG1vZHVsZS4KICogQnl0ZSBvZmZzZXQ6IDQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zYXJnZXRfbnM7Ci8qPCBUYXJnZXQgbm9pc2Ugc3VwcHJlc3Npb24gbGV2ZWwgaW4gZEIuCiAqIEJ5dGUgb2Zmc2V0OiA2CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zX2FscGhhOwovKjwgUTMuMTIgb3Zlci1zdWJ0cmFjdGlvbiBmYWN0b3IgZm9yIHN0YXRpb25hcnkgbm9pc2UKICogc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiA4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19uX2FscGhhOwovKiA8IFEzLjEyIG92ZXItc3VidHJhY3Rpb24gZmFjdG9yIGZvciBub25zdGF0aW9uYXJ5IG5vaXNlCiAqIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fYWxwaGFtYXg7Ci8qPCBRMy4xMiBtYXhpbXVtIG92ZXItc3VidHJhY3Rpb24gZmFjdG9yIGZvciBub25zdGF0aW9uYXJ5CiAqIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTIKICovCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZV9hbHBoYTsKLyo8IFExNSBzY2FsaW5nIGZhY3RvciBmb3IgZXhjZXNzIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25zX3Nucm1heDsKLyo8IFVwcGVyIGJvdW5kYXJ5IGluIGRCIGZvciBTTlIgZXN0aW1hdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDE2CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zbnNfYmxvY2s7Ci8qPCBRdWFydGVyIGJsb2NrIHNpemUgZm9yIHN0YXRpb25hcnkgbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiAxOAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbnNfaTsKLyo8IEluaXRpYWxpemF0aW9uIGJsb2NrIHNpemUgZm9yIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMjAKICovCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbnBfc2NhbGU7Ci8qPCBQb3dlciBzY2FsZSBmYWN0b3IgZm9yIG5vbnN0YXRpb25hcnkgbm9pc2UgdXBkYXRlLgogKiBCeXRlIG9mZnNldDogMjIKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fbGFtYmRhOwovKjwgU21vb3RoaW5nIGZhY3RvciBmb3IgaGlnaGVyIGxldmVsIG5vbnN0YXRpb25hcnkgbm9pc2UKICogdXBkYXRlLgogKiBCeXRlIG9mZnNldDogMjQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fbGFtYmRhZjsKLyo8IE1lZGl1bSBhdmVyYWdpbmcgZmFjdG9yIGZvciBub2lzZSB1cGRhdGUuCiAqIEJ5dGUgb2Zmc2V0OiAyNgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZ3NfYmlhczsKLyo8IEJpYXMgZmFjdG9yIGluIGRCIGZvciBnYWluIGNhbGN1bGF0aW9uLgogKiBCeXRlIG9mZnNldDogMjgKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2dzX21heDsKLyo8IFNOUiBsb3dlciBib3VuZGFyeSBpbiBkQiBmb3IgYWdncmVzc2l2ZSBnYWluIGNhbGN1bGF0aW9uLgogKiBCeXRlIG9mZnNldDogMzAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX3NfYWxwaGFfaGI7Ci8qPCBRMy4xMiBvdmVyLXN1YnRyYWN0aW9uIGZhY3RvciBmb3IgaGlnaC1iYW5kIHN0YXRpb25hcnkKICogbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiAzMgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbl9hbHBoYW1heF9oYjsKLyo8IFEzLjEyIG1heGltdW0gb3Zlci1zdWJ0cmFjdGlvbiBmYWN0b3IgZm9yIGhpZ2gtYmFuZAogKiBub25zdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMzQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2VfYWxwaGFfaGI7Ci8qPCBRMTUgc2NhbGluZyBmYWN0b3IgZm9yIGhpZ2gtYmFuZCBleGNlc3Mgbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiAzNgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbl9sYW1iZGEwOwovKjwgU21vb3RoaW5nIGZhY3RvciBmb3Igbm9uc3RhdGlvbmFyeSBub2lzZSB1cGRhdGUgZHVyaW5nCiAqIHNwZWVjaCBhY3Rpdml0eS4KICogQnl0ZSBvZmZzZXQ6IDM4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNoOwovKjwgVGhyZXNob2xkIGZvciBnZW5lcmF0aW5nIGEgYmluYXJ5IFZBRCBkZWNpc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDQwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgcHdyX3NjYWxlOwovKjwgSW5kaXJlY3QgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG5vaXNlIGxldmVsIGVzdGltYXRlLgogKiBCeXRlIG9mZnNldDogNDIKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBoYW5nb3Zlcl9tYXg7Ci8qPCBBdm9pZHMgbWlkLXNwZWVjaCBjbGlwcGluZyBhbmQgcmVsaWFibHkgZGV0ZWN0cyB3ZWFrIHNwZWVjaAogKiBidXJzdHMgYXQgdGhlIGVuZCBvZiBzcGVlY2ggYWN0aXZpdHkuCiAqIEJ5dGUgb2Zmc2V0OiA0NAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX3NucjsKLyo8IENvbnRyb2xzIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBWQUQuCiAqIEJ5dGUgb2Zmc2V0OiA0NgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHNucl9kaWZmX21heDsKLyo8IE1heGltdW0gU05SIGRpZmZlcmVuY2UuIERlY3JlYXNpbmcgdGhpcyBwYXJhbWV0ZXIgdmFsdWUgbWF5CiAqIGhlbHAgaW4gbWFraW5nIGNvcnJlY3QgZGVjaXNpb25zIGR1cmluZyBhYnJ1cHQgY2hhbmdlczsgaG93ZXZlciwKICogZGVjcmVhc2luZyB0b28gbXVjaCBtYXkgaW5jcmVhc2UgZmFsc2UgYWxhcm1zIGR1cmluZyBsb25nCiAqIHBhdXNlcy9zaWxlbmNlcy4KICogQnl0ZSBvZmZzZXQ6IDQ4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgc25yX2RpZmZfbWluOwovKjwgTWluaW11bSBTTlIgZGlmZmVyZW5jZS4gRGVjcmVhc2luZyB0aGlzIHBhcmFtZXRlciB2YWx1ZSBtYXkKICogaGVscCBpbiBtYWtpbmcgY29ycmVjdCBkZWNpc2lvbnMgZHVyaW5nIGFicnVwdCBjaGFuZ2VzOyBob3dldmVyLAogKiBkZWNyZWFzaW5nIHRvbyBtdWNoIG1heSBpbmNyZWFzZSBmYWxzZSBhbGFybXMgZHVyaW5nIGxvbmcKICogcGF1c2VzL3NpbGVuY2VzLgogKiBCeXRlIG9mZnNldDogNTAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2xlbmd0aDsKLyo8IERlZmluZXMgdGhlIG51bWJlciBvZiBmcmFtZXMgZm9yIHdoaWNoIGEgbm9pc2UgbGV2ZWwKICogZXN0aW1hdGUgaXMgc2V0IHRvIGEgZml4ZWQgdmFsdWUuCiAqIEJ5dGUgb2Zmc2V0OiA1MgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIG1heF92YWw7Ci8qPCBEZWZpbmVzIHRoZSB1cHBlciBsaW1pdCBvZiB0aGUgbm9pc2UgbGV2ZWwuCiAqIEJ5dGUgb2Zmc2V0OiA1NAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfYm91bmQ7Ci8qPCBEZWZpbmVzIHRoZSBpbml0aWFsIGJvdW5kaW5nIHZhbHVlIGZvciB0aGUgbm9pc2UgbGV2ZWwKICogZXN0aW1hdGUuIFRoaXMgaXMgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgc2VnbWVudCBkZWZpbmVkIGJ5IHRoZQogKiBpbml0X2xlbmd0aCBwYXJhbWV0ZXIuCiAqIEJ5dGUgb2Zmc2V0OiA1NgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2JvdW5kOwovKjwgUmVzZXQgYm91bmRhcnkgZm9yIG5vaXNlIHRyYWNraW5nLgogKiBCeXRlIG9mZnNldDogNTgKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBhdmFyX3NjYWxlOwovKjwgRGVmaW5lcyB0aGUgYmlhcyBmYWN0b3IgaW4gbm9pc2UgZXN0aW1hdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDYwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX25jOwovKjwgRGVmaW5lcyB0aGUgd2luZG93IGxlbmd0aCBmb3Igbm9pc2UgZXN0aW1hdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDYyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgc3Bvd19taW47Ci8qPCBEZWZpbmVzIHRoZSBtaW5pbXVtIHNpZ25hbCBwb3dlciByZXF1aXJlZCB0byB1cGRhdGUgdGhlCiAqIGJvdW5kYXJpZXMgZm9yIHRoZSBub2lzZSBmbG9vciBlc3RpbWF0ZS4KICogQnl0ZSBvZmZzZXQ6IDY0CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19nc19mYXN0OwovKjwgRmFzdCBzbW9vdGhpbmcgZmFjdG9yIGZvciBwb3N0cHJvY2Vzc29yIGdhaW4uCiAqIEJ5dGUgb2Zmc2V0OiA2NgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZ3NfbWVkOwovKjwgTWVkaXVtIHNtb290aGluZyBmYWN0b3IgZm9yIHBvc3Rwcm9jZXNzb3IgZ2Fpbi4KICogQnl0ZSBvZmZzZXQ6IDY4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19nc19zbG93OwovKjwgU2xvdyBzbW9vdGhpbmcgZmFjdG9yIGZvciBwb3N0cHJvY2Vzc29yIGdhaW4uCiAqIEJ5dGUgb2Zmc2V0OiA3MAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfc3diX3NhbHBoYTsKLyo8IFEzLjEyIHN1cGVyIHdpZGViYW5kIGFnZ3Jlc3NpdmVuZXNzIGZhY3RvciBmb3Igc3RhdGlvbmFyeQogKiBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDcyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zd2JfbmFscGhhOwovKjwgUTMuMTIgc3VwZXIgd2lkZWJhbmQgYWdncmVzc2l2ZW5lc3MgZmFjdG9yIGZvcgogKiBub25zdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogNzQKICovCn0gX19wYWNrZWQ7CiNkZWZpbmUgQURNX01PRFVMRV9JRFhfTUlDX0dBSU5fQ1RSTCAgIDB4MDAwMTBDMzUKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcwogKiBJRCBvZiB0aGUgVHggbWljIGdhaW4gY29udHJvbCBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURYX01JQ19HQUlOX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X21pY19nYWlufQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURYX01JQ19HQUlOLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEWF9NSUNfR0FJTiAgICAgICAweDAwMDEwQzM2CgovKiBTdHJ1Y3R1cmUgZm9yIGEgVHggbWljIGdhaW4gcGFyYW1ldGVyIGZvciB0aGUgbWljIGdhaW4KICogY29udHJvbCBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEWF9NSUNfR0FJTiBwYXJhbWV0ZXIgaW4gdGhlCiAqIFR4IE1pYyBHYWluIENvbnRyb2wgbW9kdWxlLgogKi8Kc3RydWN0IGFkbXhfbWljX2dhaW4gewoJdWludDE2X3QgICAgICAgICAgICAgICAgICB0eF9taWNfZ2FpbjsKCS8qPCBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWRtX3NldF9taWNfZ2Fpbl9wYXJhbXMgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCXN0cnVjdCBhZG14X21pY19nYWluIG1pY19nYWluX2RhdGE7Cn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIEBpbmdyb3VwIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIFJ4IENvZGVjIEdhaW4gQ29udHJvbCBtb2R1bGUuCiAqCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEOgogKiAtICNBRE1fUEFSQU1fSURfUlhfQ09ERUNfR0FJTgogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEX1JYX0NPREVDX0dBSU5fQ1RSTCAgICAgICAweDAwMDEwQzM3CgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMKICogSUQgb2YgdGhlIFJ4IGNvZGVjIGdhaW4gY29udHJvbCBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUlhfQ09ERUNfR0FJTl9DVFJMIG1vZHVsZS4KICoKICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3J4X2NvZGVjX2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9SWF9DT0RFQ19HQUlOLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEX1JYX0NPREVDX0dBSU4gICAweDAwMDEwQzM4CgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBSeCBjb21tb24gY29kZWMgZ2FpbiBjb250cm9sIG1vZHVsZS4gKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRF9SWF9DT0RFQ19HQUlOIHBhcmFtZXRlcgogKiBpbiB0aGUgUnggQ29kZWMgR2FpbiBDb250cm9sIG1vZHVsZS4KICovCgoKc3RydWN0IGFkbV9yeF9jb2RlY19nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcnhfY29kZWNfZ2FpbjsKCS8qIExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIEBpbmdyb3VwIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIEhQRiBUdW5pbmcgRmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0VOQUJMRV9DT05GSUcKICogLSAjQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9QUkVfR0FJTgogKiAtICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQVJBTVMKICovCiNkZWZpbmUgQURNX01PRFVMRV9JRF9IUEZfSUlSWF9GSUxURVIgICAgMHgwMDAxMEMzRAoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBUeCBIUEYgSUlSIGZpbHRlciBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX0hQRl9JSVJYX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG1faHBmeF9paXJfZmlsdGVyX2VuYWJsZV9jZmd9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfRU5BQkxFX0NPTkZJRy50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfRU5BQkxFX0NPTkZJRyAgIDB4MDAwMTBDM0UKCi8qIElEIG9mIHRoZSBUeCBIUEYgSUlSIGZpbHRlciBwcmVnYWluIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRF9IUEZfSUlSWF9GSUxURVIgbW9kdWxlLgogKiBAcGFyc3BhY2UgTWVzc2FnZSBwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX2hwZnhfaWlyX2ZpbHRlcl9wcmVfZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9QUkVfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfUFJFX0dBSU4gICAweDAwMDEwQzNGCgovKiBJRCBvZiB0aGUgVHggSFBGIElJUiBmaWx0ZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX0hQRl9JSVJYX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG1faHBmeF9paXJfZmlsdGVyX2NmZ19wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfQ09ORklHX1BBCiAqIFJBTVMudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQVJBTVMgIDB4MDAwMTBDNDAKCi8qIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IKICogdGhlIEhQRiBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqLwoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0VOQUJMRV9DT05GSUcKICogcGFyYW1ldGVyIGluIHRoZSBUeCBwYXRoIEhQRiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCnN0cnVjdCBhZG1faHBmeF9paXJfZmlsdGVyX2VuYWJsZV9jZmcgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEhQRiB0dW5pbmcgZmlsdGVyIGlzIGRpc2FibGVkICgwKSBvcgogKiBlbmFibGVkIChub256ZXJvKS4KICovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgcHJlZ2FpbiBwYXJhbWV0ZXIgZm9yIHRoZSBIUEYKICogSUlSIHR1bmluZyBmaWx0ZXIgbW9kdWxlIG9uIHRoZSBUeCBwYXRoLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfUFJFX0dBSU4gcGFyYW1ldGVyCiAqIGluIHRoZSBUeCBwYXRoIEhQRiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCnN0cnVjdCBhZG1faHBmeF9paXJfZmlsdGVyX3ByZV9nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcHJlX2dhaW47CgkvKiBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUKICogSFBGIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVycyBpbiB0aGUgVHggcGF0aCBIUEYgVHVuaW5nIEZpbHRlciBtb2R1bGUuIFxuCiAqIFxuCiAqIFRoaXMgc3RydWN0dXJlIGlzIGZvbGxvd2VkIGJ5IHR1bmluZyBmaWx0ZXIgY29lZmZpY2llbnRzIGFzIGZvbGxvd3M6IFxuCiAqIC0gU2VxdWVuY2Ugb2YgaW50MzJfdCBGaWx0ZXJDb2VmZnMuCiAqIEVhY2ggYmFuZCBoYXMgZml2ZSBjb2VmZmljaWVudHMsIGVhY2ggaW4gaW50MzJfdCBmb3JtYXQgaW4gdGhlIG9yZGVyIG9mCiAqIGIwLCBiMSwgYjIsIGExLCBhMi4KICogLSBTZXF1ZW5jZSBvZiBpbnQxNl90IE51bVNoaWZ0RmFjdG9yLgogKiBPbmUgaW50MTZfdCBwZXIgYmFuZC4gVGhlIG51bWVyYXRvciBzaGlmdCBmYWN0b3IgaXMgcmVsYXRlZCB0byB0aGUgUQogKiBmYWN0b3Igb2YgdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCiAqIC0gU2VxdWVuY2Ugb2YgdWludDE2X3QgUGFuU2V0dGluZy4KICogT25lIHVpbnQxNl90IGZvciBlYWNoIGJhbmQgdG8gaW5kaWNhdGUgYXBwbGljYXRpb24gb2YgdGhlIGZpbHRlciB0bwogKiBsZWZ0ICgwKSwgcmlnaHQgKDEpLCBvciBib3RoICgyKSBjaGFubmVscy4KICovCnN0cnVjdCBhZG1faHBmeF9paXJfZmlsdGVyX2NmZ19wYXJhbXMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBudW1fYmlxdWFkX3N0YWdlczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAyMAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCi8qIElEIG9mIHRoZSBUeCBwYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICoJVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKgktICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfRU5BQkxFX0NPTkZJRwogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEWF9JSVJfRklMVEVSIDB4MDAwMTBDNDEKCi8qIElEIG9mIHRoZSBSeCBwYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZSBmb3IgdGhlIGxlZnQgY2hhbm5lbC4KICoJVGhlIHBhcmFtZXRlciBJRHMgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZQogKgkoI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSKSBhcmUgdXNlZCBmb3IgdGhlIGxlZnQgSUlSIFJ4IHR1bmluZwogKglmaWx0ZXIuCiAqCiAqIFBhbiBwYXJhbWV0ZXJzIGFyZSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcGVyLWNoYW5uZWwgSUlSIGZpbHRlcjsgdGhlIHBhbgogKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGJ5IHRoaXMgbW9kdWxlLgogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEX0xFRlRfSUlSVU5JTkdfRklMVEVSICAgICAgMHgwMDAxMDcwNQoKLyogSUQgb2YgdGhlIHRoZSBSeCBwYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZSBmb3IgdGhlIHJpZ2h0CiAqIGNoYW5uZWwuCiAqIFRoZSBwYXJhbWV0ZXIgSURzIG9mIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUKICogKCNBU01fTU9EVUxFX0lEX0lJUlVOSU5HX0ZJTFRFUikgYXJlIHVzZWQgZm9yIHRoZSByaWdodCBJSVIgUngKICogdHVuaW5nIGZpbHRlci4KICoKICogUGFuIHBhcmFtZXRlcnMgYXJlIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBwZXItY2hhbm5lbCBJSVIgZmlsdGVyOwogKiB0aGUgcGFuIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQgYnkgdGhpcyBtb2R1bGUuCiAqLwojZGVmaW5lIEFETV9NT0RVTEVfSURfUklHSFRfSUlSVU5JTkdfRklMVEVSICAgIDB4MDAwMTA3MDYKCi8qIGVuZF9hZGR0b2dyb3VwIGF1ZGlvX3BwX21vZHVsZV9pZHMgKi8KCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwoKLyogSUQgb2YgdGhlIFR4IElJUiBmaWx0ZXIgZW5hYmxlIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRFhfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X2lpcl9maWx0ZXJfZW5hYmxlX2NmZ30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0VOQUJMRV9DT05GSUcudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfRU5BQkxFX0NPTkZJRyAgIDB4MDAwMTBDNDIKCi8qIElEIG9mIHRoZSBUeCBJSVIgZmlsdGVyIHByZWdhaW4gcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEWF9JSVJfRklMVEVSIG1vZHVsZS4KICogQHBhcnNwYWNlIE1lc3NhZ2UgcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbXhfaWlyX2ZpbHRlcl9wcmVfZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX1BSRV9HQUlOLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX1BSRV9HQUlOICAgIDB4MDAwMTBDNDMKCi8qIElEIG9mIHRoZSBUeCBJSVIgZmlsdGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRFhfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X2lpcl9maWx0ZXJfY2ZnX3BhcmFtc30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0NPTkZJR19QQVJBTVMudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfQ09ORklHX1BBUkFNUyAgICAgMHgwMDAxMEM0NAoKLyogU3RydWN0dXJlIGZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBJSVIgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRFhfSUlSX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIHBhcmFtZXRlciBpbiB0aGUgVHggUGF0aCBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwoKc3RydWN0IGFkbXhfaWlyX2ZpbHRlcl9lbmFibGVfY2ZnIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgSUlSIHR1bmluZyBmaWx0ZXIgaXMgZGlzYWJsZWQgKDApIG9yCiAqIGVuYWJsZWQgKG5vbnplcm8pLgogKi8KCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgcHJlZ2FpbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBJSVIgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfUFJFX0dBSU4KICogcGFyYW1ldGVyIGluIHRoZSBUeCBQYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCgpzdHJ1Y3QgYWRteF9paXJfZmlsdGVyX3ByZV9nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcHJlX2dhaW47CgkvKjwgTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdC4gKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBJSVIgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfQ09ORklHX1BBUkFNUwogKiBwYXJhbWV0ZXIgaW4gdGhlIFR4IFBhdGggSUlSIFR1bmluZyBGaWx0ZXIgbW9kdWxlLiBcbgogKglcbgogKiBUaGlzIHN0cnVjdHVyZSBpcyBmb2xsb3dlZCBieSB0aGUgSFBGIElJUiBmaWx0ZXIgY29lZmZpY2llbnRzIG9uCiAqIHRoZSBUeCBwYXRoIGFzIGZvbGxvd3M6IFxuCiAqIC0gU2VxdWVuY2Ugb2YgaW50MzJfdCB1bEZpbHRlckNvZWZmcy4gRWFjaCBiYW5kIGhhcyBmaXZlCiAqIGNvZWZmaWNpZW50cywgZWFjaCBpbiBpbnQzMl90IGZvcm1hdCBpbiB0aGUgb3JkZXIgb2YgYjAsIGIxLCBiMiwKICogYTEsIGEyLgogKiAtIFNlcXVlbmNlIG9mIGludDE2X3Qgc051bVNoaWZ0RmFjdG9yLiBPbmUgaW50MTZfdCBwZXIgYmFuZC4gVGhlCiAqIG51bWVyYXRvciBzaGlmdCBmYWN0b3IgaXMgcmVsYXRlZCB0byB0aGUgUSBmYWN0b3Igb2YgdGhlIGZpbHRlcgogKiBjb2VmZmljaWVudHMuCiAqIC0gU2VxdWVuY2Ugb2YgdWludDE2X3QgdXNQYW5TZXR0aW5nLiBPbmUgdWludDE2X3QgZm9yIGVhY2ggYmFuZAogKiB0byBpbmRpY2F0ZSBpZiB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8gbGVmdCAoMCksIHJpZ2h0ICgxKSwgb3IKICogYm90aCAoMikgY2hhbm5lbHMuCiAqLwpzdHJ1Y3QgYWRteF9paXJfZmlsdGVyX2NmZ19wYXJhbXMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBudW1fYmlxdWFkX3N0YWdlczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAyMAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAaW5ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzCiAqCUlEIG9mIHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKglUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqCS0gI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFCiAqCS0gI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfQkFDS0dBSU4KICoJLSAjQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9TRVRfTkVXX0FOR0xFCiAqLwojZGVmaW5lIEFETV9NT0RVTEVfSURfUUVOU0VNQkxFICAgIDB4MDAwMTBDNTkKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwovKiBJRCBvZiB0aGUgUUVuc2VtYmxlIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUUVOU0VNQkxFIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3FlbnNlbWJsZV9lbmFibGV9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9FTkFCTEUgICAweDAwMDEwQzYwCgovKiBJRCBvZiB0aGUgUUVuc2VtYmxlIGJhY2sgZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUUVOU0VNQkxFIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3FlbnNlbWJsZV9wYXJhbV9iYWNrZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9CQUNLR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9RRU5TRU1CTEVfQkFDS0dBSU4gICAweDAwMDEwQzYxCgovKiBJRCBvZiB0aGUgUUVuc2VtYmxlIG5ldyBhbmdsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUUVOU0VNQkxFIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3FlbnNlbWJsZV9wYXJhbV9zZXRfbmV3X2FuZ2xlfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURfUUVOU0VNQkxFX1NFVF9ORVdfQU5HTEUudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfUUVOU0VNQkxFX1NFVF9ORVdfQU5HTEUgICAgMHgwMDAxMEM2MgoKLyogU3RydWN0dXJlIGZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBRRW5zZW1ibGUgbW9kdWxlLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKi8Kc3RydWN0IGFkbV9xZW5zZW1ibGVfZW5hYmxlIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgUUVuc2VtYmxlIG1vZHVsZSBpcyBkaXNhYmxlZCAoMCkgb3IgZW5hYmxlZAogKiAobm9uemVybykuCiAqLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGJhY2tncm91bmQgZ2FpbiBmb3IgdGhlIFFFbnNlbWJsZSBtb2R1bGUuICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX0JBQ0tHQUlOCiAqIHBhcmFtZXRlciB1c2VkIGJ5CiAqIHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKi8Kc3RydWN0IGFkbV9xZW5zZW1ibGVfcGFyYW1fYmFja2dhaW4gewoJaW50MTZfdCAgICAgICAgICAgICAgICAgIGJhY2tfZ2FpbjsKLyo8IExpbmVhciBnYWluIGluIFExNSBmb3JtYXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMzI3NjcKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7Ci8qIFN0cnVjdHVyZSBmb3Igc2V0dGluZyBhIG5ldyBhbmdsZSBmb3IgdGhlIFFFbnNlbWJsZSBtb2R1bGUuICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX1NFVF9ORVdfQU5HTEUKICogcGFyYW1ldGVyIHVzZWQKICogYnkgdGhlIFFFbnNlbWJsZSBtb2R1bGUuCiAqLwpzdHJ1Y3QgYWRtX3FlbnNlbWJsZV9wYXJhbV9zZXRfbmV3X2FuZ2xlIHsKCWludDE2X3QgICAgICAgICAgICAgICAgICAgIG5ld19hbmdsZTsKLyo8IE5ldyBhbmdsZSBpbiBkZWdyZWVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDM1OQogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICB0aW1lX21zOwovKjwgVHJhbnNpdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzZXQgdGhlIG5ldyBhbmdsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAzMjc2NwogKi8KfSBfX3BhY2tlZDsKCgojZGVmaW5lIEFETV9DTURfR0VUX1BQX1RPUE9fTU9EVUxFX0xJU1QJCQkJMHgwMDAxMDM0OQojZGVmaW5lIEFETV9DTURSU1BfR0VUX1BQX1RPUE9fTU9EVUxFX0xJU1QJCQkweDAwMDEwMzUwCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FTkFCTEUJCQkJCTB4MDAwMTA5MDQKIC8qCiAgKiBQYXlsb2FkIG9mIHRoZSBBRE1fQ01EX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUIGNvbW1hbmQuCiAgKi8Kc3RydWN0IGFkbV9jbWRfZ2V0X3BwX3RvcG9fbW9kdWxlX2xpc3RfdCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9sc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4KCSAqCgkgKgoJICogVGhlIHNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnksIGlmIHNwZWNpZmllZCwgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8KCSAqIGNvbnRhaW4gdGhlIGVudGlyZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkLCBpbmNsdWRpbmcgdGhlIG1vZHVsZSBJRCwKCSAqIHBhcmFtZXRlciBJRCwgcGFyYW1ldGVyIHNpemUsIGFuZCBwYXJhbWV0ZXIgdmFsdWVzLgoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qCgkgKiAgVW5pcXVlIGlkZW50aWZpZXIgZm9yIGFuIGFkZHJlc3MuCgkgKgoJICogVGhpcyBtZW1vcnkgbWFwIGhhbmRsZSBpcyByZXR1cm5lZCBieSB0aGUgYURTUCB0aHJvdWdoIHRoZQoJICogI0FETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kLgoJICoKCSAqIEB2YWx1ZXMKCSAqIC0gTm9uLU5VTEwgLS0gT24gYWNrbm93bGVkZ21lbnQsIHRoZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBiZWdpbiBhdAoJICogdGhlIGFkZHJlc3Mgc3BlY2lmaWVkIChvdXQtb2YtYmFuZCkKCSAqIC0gTlVMTCAtLSBUaGUgYWNrbm93bGVkZ21lbnQncyBwYXlsb2FkIGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgZGF0YQoJICogKGluLWJhbmQpIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyoKCSAqIE1heGltdW0gZGF0YSBzaXplIG9mIHRoZSBsaXN0IG9mIG1vZHVsZXMuIFRoaXMKCSAqIGZpZWxkIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBwYXJhbV9tYXhfc2l6ZTsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBRE1fQ01EUlNQX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUIG1lc3NhZ2UsIHdoaWNoIHJldHVybnMKICogbW9kdWxlIGlkcyBpbiByZXNwb25zZSB0byBhbiBBRE1fQ01EX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUIGNvbW1hbmQuCiAqIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgYWNrbm93bGVkZ21lbnQgPGI+bW9kdWxlIGlkCiAqIGRhdGEgdmFyaWFibGUgcGF5bG9hZDwvYj4gY29udGFpbmluZyB0aGUgcHJlL3Bvc3Rwcm9jZXNzaW5nIG1vZHVsZSBpZAogKiB2YWx1ZXMuIEZvciBhbiBpbi1iYW5kIHNjZW5hcmlvLCB0aGUgdmFyaWFibGUgcGF5bG9hZCBkZXBlbmRzIG9uIHRoZSBzaXplCiAqIG9mIHRoZSBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9yc3BfZ2V0X3BwX3RvcG9fbW9kdWxlX2xpc3RfdCB7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHN0YXR1czsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhdWRwcm9jX3RvcG9sb2d5X21vZHVsZV9pZF9pbmZvX3QgewoJdWludDMyX3QJbnVtX21vZHVsZXM7Cn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAaW5ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUgcHJlL3Bvc3Rwcm9jZXNzaW5nIGJsb2NrLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTgogKiAtICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4KICogLSAjQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHCiAqIC0gI0FTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTCiAqIC0gI0FTTV9QQVJBTV9JRF9TT0ZUX1BBVVNFX1BBUkFNRVRFUlMKICogLSAjQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOCiAqIC0gI0FTTV9QQVJBTV9JRF9NVUxUSUNIQU5ORUxfTVVURQogKi8KI2RlZmluZSBBU01fTU9EVUxFX0lEX1ZPTF9DVFJMICAgMHgwMDAxMEJGRQojZGVmaW5lIEFTTV9NT0RVTEVfSURfVk9MX0NUUkwyICAweDAwMDEwOTEwCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfVk9MX0NUUkwgQVNNX01PRFVMRV9JRF9WT0xfQ1RSTAoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBtYXN0ZXIgZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUgI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwKICogbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fdm9sdW1lX2N0cmxfbWFzdGVyX2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTiAgICAweDAwMDEwQkZGCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTiBBU01fUEFSQU1fSURfVk9MX0NUUkxfTUFTVEVSX0dBSU4KCi8qIElEIG9mIHRoZSBsZWZ0L3JpZ2h0IGNoYW5uZWwgZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fdm9sdW1lX2N0cmxfbHJfY2hhbl9nYWlufQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4udGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfVk9MX0NUUkxfTFJfQ0hBTk5FTF9HQUlOICAgICAweDAwMDEwQzAwCgovKiBJRCBvZiB0aGUgbXV0ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTCBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FzbV92b2x1bWVfY3RybF9tdXRlX2NvbmZpZ30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHLnRleH0KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHICAgMHgwMDAxMEMwMQoKLyogSUQgb2YgdGhlIHNvZnQgc3RlcHBpbmcgdm9sdW1lIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fc29mdF9zdGVwX3ZvbHVtZV9wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVUCiAqIEVSUy50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTICAweDAwMDEwQzI5CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTXAoJCQlBU01fUEFSQU1fSURfU09GVF9WT0xfU1RFUFBJTkdfUEFSQU1FVEVSUwoKLyogSUQgb2YgdGhlIHNvZnQgcGF1c2UgcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTAogKiBtb2R1bGUuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9TT0ZUX1BBVVNFX1BBUkFNRVRFUlMgICAweDAwMDEwRDZBCgovKiBJRCBvZiB0aGUgbXVsdGlwbGUtY2hhbm5lbCB2b2x1bWUgY29udHJvbCBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX1ZPTF9DVFJMIG1vZHVsZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOICAweDAwMDEwNzEzCgovKiBJRCBvZiB0aGUgbXVsdGlwbGUtY2hhbm5lbCBtdXRlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTCBtb2R1bGUuCiAqLwoKI2RlZmluZSBBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUgIDB4MDAwMTA3MTQKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIG1hc3RlciBnYWluIHBhcmFtZXRlciBmb3IgYSB2b2x1bWUgY29udHJvbAogKiBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01BU1RFUl9HQUlOCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX21hc3Rlcl9nYWluIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBtYXN0ZXJfZ2FpbjsKCS8qIExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbHJfY2hhbl9nYWluIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbF9jaGFuX2dhaW47CgkvKjwgTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdCBmb3IgdGhlIGxlZnQgY2hhbm5lbC4gKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJfY2hhbl9nYWluOwoJLyo8IExpbmVhciBnYWluIGluIFExMyBmb3JtYXQgZm9yIHRoZSByaWdodCBjaGFubmVsLiovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgbXV0ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgYQogKiB2b2x1bWUgY29udHJvbCBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbXV0ZV9jb25maWcgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZzsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIG11dGUgaXMgZGlzYWJsZWQgKDApIG9yIGVuYWJsZWQgKG5vbnplcm8pLiovCgp9IF9fcGFja2VkOwoKLyoKICogU3VwcG9ydGVkIHBhcmFtZXRlcnMgZm9yIGEgc29mdCBzdGVwcGluZyBsaW5lYXIgcmFtcGluZyBjdXJ2ZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSICAwCgovKgogKiBFeHBvbmVudGlhbCByYW1waW5nIGN1cnZlLgogKi8KI2RlZmluZSBBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9FWFAgICAgMQoKLyoKICogTG9nYXJpdGhtaWMgcmFtcGluZyBjdXJ2ZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTE9HICAgIDIKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBzb2Z0IHN0ZXBwaW5nIHZvbHVtZSBwYXJhbWV0ZXJzLiAqLwoKCi8qICBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1NPRlRfVk9MX1NURVBQSU5HX1BBUkFNRVRFUlMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX3NvZnRfc3RlcF92b2x1bWVfcGFyYW1zIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwZXJpb2Q7Ci8qPCBQZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgc3RlcDsKLyo8IFN0ZXAgaW4gbWljcm9zZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwMDAwCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcmFtcGluZ19jdXJ2ZTsKLyo8IFJhbXBpbmcgY3VydmUgdHlwZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSCiAqIC0gI0FTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0VYUAogKiAtICNBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9MT0cKICovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHNvZnQgcGF1c2UgcGFyYW1ldGVycy4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1NPRlRfUEFVU0VfUEFSQU1FVEVSUwogKiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIFZvbHVtZSBDb250cm9sIG1vZHVsZS4KICovCgoKc3RydWN0IGFzbV9zb2Z0X3BhdXNlX3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBzb2Z0IHBhdXNlIGlzIGRpc2FibGVkICgwKSBvciBlbmFibGVkCiAqIChub256ZXJvKS4KICovCgoKCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHBlcmlvZDsKLyo8IFBlcmlvZCBpbiBtaWxsaXNlY29uZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMTUwMDAKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBzdGVwOwovKjwgU3RlcCBpbiBtaWNyb3NlY29uZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMTUwMDAwMDAKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICByYW1waW5nX2N1cnZlOwovKjwgUmFtcGluZyBjdXJ2ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSCiAqIC0gI0FTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0VYUAogKiAtICNBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9MT0cKICovCn0gX19wYWNrZWQ7CgoKLyogTWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMuKi8KI2RlZmluZSBWT0xVTUVfQ09OVFJPTF9NQVhfQ0hBTk5FTFMgICAgICAgICAgICAgICAgICAgICAgIDgKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBvbmUgY2hhbm5lbCB0eXBlIC0gZ2FpbiBwYWlyLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4gY2hhbm5lbAogKiB0eXBlL2dhaW4gcGFpcnMgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLiBcbiBcbiBUaGlzCiAqIHN0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZQogKiBhc21fdm9sdW1lX2N0cmxfbXVsdGljaGFubmVsX2dhaW4gc3RydWN0dXJlLgogKi8KCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX2NoYW5uZWx0eXBlX2dhaW5fcGFpciB7Cgl1aW50OF90ICAgICAgICAgICAgICAgICAgIGNoYW5uZWx0eXBlOwoJLyoKCSAqIENoYW5uZWwgdHlwZSBmb3Igd2hpY2ggdGhlIGdhaW4gc2V0dGluZyBpcyB0byBiZSBhcHBsaWVkLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqIC0gI1BDTV9DSEFOTkVMX0wKCSAqIC0gI1BDTV9DSEFOTkVMX1IKCSAqIC0gI1BDTV9DSEFOTkVMX0MKCSAqIC0gI1BDTV9DSEFOTkVMX0xTCgkgKiAtICNQQ01fQ0hBTk5FTF9SUwoJICogLSAjUENNX0NIQU5ORUxfTEZFCgkgKiAtICNQQ01fQ0hBTk5FTF9DUwoJICogLSAjUENNX0NIQU5ORUxfTEIKCSAqIC0gI1BDTV9DSEFOTkVMX1JCCgkgKiAtICNQQ01fQ0hBTk5FTFMKCSAqIC0gI1BDTV9DSEFOTkVMX0NWSAoJICogLSAjUENNX0NIQU5ORUxfTVMKCSAqIC0gI1BDTV9DSEFOTkVMX0ZMQwoJICogLSAjUENNX0NIQU5ORUxfRlJDCgkgKiAtICNQQ01fQ0hBTk5FTF9STEMKCSAqIC0gI1BDTV9DSEFOTkVMX1JSQwoJICovCgoJdWludDhfdCAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBnYWluOwoJLyoKCSAqIEdhaW4gdmFsdWUgZm9yIHRoaXMgY2hhbm5lbCBpbiBRMjggZm9ybWF0LgoJICogU3VwcG9ydGVkIHZhbHVlczogQW55CgkgKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBtdWx0aWNoYW5uZWwgZ2FpbiBjb21tYW5kICovCgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9NVUxUSUNIQU5ORUxfR0FJTgogKiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIFZvbHVtZSBDb250cm9sIG1vZHVsZS4KICovCgoKc3RydWN0IGFzbV92b2x1bWVfY3RybF9tdWx0aWNoYW5uZWxfZ2FpbiB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwoJLyoKCSAqIE51bWJlciBvZiBjaGFubmVscyBmb3Igd2hpY2ggZ2FpbiB2YWx1ZXMgYXJlIHByb3ZpZGVkLiBBbnkKCSAqIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhlIGRhdGEgZm9yIHdoaWNoIGdhaW4gaXMgbm90IHByb3ZpZGVkIGFyZQoJICogc2V0IHRvIHVuaXR5IGdhaW4uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKCSAqLwoKCXN0cnVjdCBhc21fdm9sdW1lX2N0cmxfY2hhbm5lbHR5cGVfZ2Fpbl9wYWlyCgkJZ2Fpbl9kYXRhW1ZPTFVNRV9DT05UUk9MX01BWF9DSEFOTkVMU107CgkvKiBBcnJheSBvZiBjaGFubmVsIHR5cGUvZ2FpbiBwYWlycy4qLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBvbmUgY2hhbm5lbCB0eXBlIC0gbXV0ZSBwYWlyLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUgY2hhbm5lbAogKiB0eXBlL211dGUgc2V0dGluZyBwYWlycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuIFxuIFxuCiAqIFRoaXMgc3RydWN0dXJlIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlCiAqIGFzbV92b2x1bWVfY3RybF9tdWx0aWNoYW5uZWxfbXV0ZSBzdHJ1Y3R1cmUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfY2hhbm5lbHlwZV9tdXRlX3BhaXIgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50OF90ICAgICAgICAgICAgICAgICAgIGNoYW5uZWx5cGU7Ci8qPCBDaGFubmVsIHR5cGUgZm9yIHdoaWNoIHRoZSBtdXRlIHNldHRpbmcgaXMgdG8gYmUgYXBwbGllZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjUENNX0NIQU5ORUxfTAogKiAtICNQQ01fQ0hBTk5FTF9SCiAqIC0gI1BDTV9DSEFOTkVMX0MKICogLSAjUENNX0NIQU5ORUxfTFMKICogLSAjUENNX0NIQU5ORUxfUlMKICogLSAjUENNX0NIQU5ORUxfTEZFCiAqIC0gI1BDTV9DSEFOTkVMX0NTCiAqIC0gI1BDTV9DSEFOTkVMX0xCCiAqIC0gI1BDTV9DSEFOTkVMX1JCCiAqIC0gI1BDTV9DSEFOTkVMUwogKiAtICNQQ01fQ0hBTk5FTF9DVkgKICogLSAjUENNX0NIQU5ORUxfTVMKICogLSAjUENNX0NIQU5ORUxfRkxDCiAqIC0gI1BDTV9DSEFOTkVMX0ZSQwogKiAtICNQQ01fQ0hBTk5FTF9STEMKICogLSAjUENNX0NIQU5ORUxfUlJDCiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgbXV0ZTsKLyo8IE11dGUgc2V0dGluZyBmb3IgdGhpcyBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgPSBVbm11dGUKICogLSBOb256ZXJvID0gTXV0ZQogKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBtdWx0aWNoYW5uZWwgbXV0ZSBjb21tYW5kICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbXVsdGljaGFubmVsX211dGUgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyo8IE51bWJlciBvZiBjaGFubmVscyBmb3Igd2hpY2ggbXV0ZSBjb25maWd1cmF0aW9uIGlzCiAqIHByb3ZpZGVkLiBBbnkgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGUgZGF0YSBmb3Igd2hpY2ggbXV0ZQogKiBjb25maWd1cmF0aW9uIGlzIG5vdCBwcm92aWRlZCBhcmUgc2V0IHRvIHVubXV0ZS4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKc3RydWN0IGFzbV92b2x1bWVfY3RybF9jaGFubmVseXBlX211dGVfcGFpcgoJCQkJbXV0ZV9kYXRhW1ZPTFVNRV9DT05UUk9MX01BWF9DSEFOTkVMU107CgkvKjwgQXJyYXkgb2YgY2hhbm5lbCB0eXBlL211dGUgc2V0dGluZyBwYWlycy4qLwp9IF9fcGFja2VkOwovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0VOQUJMRV9DT05GSUcKICogLSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9QUkVfR0FJTgogKiAtICNBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0NPTkZJR19QQVJBTVMKICovCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9JSVJVTklOR19GSUxURVIgICAweDAwMDEwQzAyCgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KLyogSUQgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX2lpcnVuaW5nX2ZpbHRlcl9lbmFibGV9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9JSVJVTklOR19GSUxURVJfRU5BQkxFX0NPCiAqIE5GSUcudGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0VOQUJMRV9DT05GSUcgICAweDAwMDEwQzAzCgovKiBJRCBvZiB0aGUgSUlSIHR1bmluZyBmaWx0ZXIgcHJlZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSIG1vZHVsZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9QUkVfR0FJTiAgMHgwMDAxMEMwNAoKLyogSUQgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9JSVJVTklOR19GSUxURVIgbW9kdWxlLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0NPTkZJR19QQVJBTVMgIDB4MDAwMTBDMDUKCi8qIFN0cnVjdHVyZSBmb3IgYW4gZW5hYmxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciBhbgogKiBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX2lpcnVuaW5nX2ZpbHRlcl9lbmFibGUgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBpcyBkaXNhYmxlZCAoMCkgb3IKICogZW5hYmxlZCAoMSkuCiAqLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciB0aGUgcHJlZ2FpbiBwYXJhbWV0ZXIgZm9yIGFuIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZS4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9QUkVfR0FJTgogKiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCnN0cnVjdCBhc21faWlydW5pbmdfZmlsdGVyX3ByZWdhaW4gewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBwcmVnYWluOwoJLyo8IExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIGFuIElJUiB0dW5pbmcgZmlsdGVyCiAqIG1vZHVsZS4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuIFxuCiAqIFxuCiAqIFRoaXMgc3RydWN0dXJlIGlzIGZvbGxvd2VkIGJ5IHRoZSBJSVIgZmlsdGVyIGNvZWZmaWNpZW50czogXG4KICogLSBTZXF1ZW5jZSBvZiBpbnQzMl90IEZpbHRlckNvZWZmcyBcbgogKiBGaXZlIGNvZWZmaWNpZW50cyBmb3IgZWFjaCBiYW5kLiBFYWNoIGNvZWZmaWNpZW50IGlzIGluIGludDMyX3QgZm9ybWF0LCBpbgogKiB0aGUgb3JkZXIgb2YgYjAsIGIxLCBiMiwgYTEsIGEyLgogKiAtIFNlcXVlbmNlIG9mIGludDE2X3QgTnVtU2hpZnRGYWN0b3IgXG4KICogT25lIGludDE2X3QgcGVyIGJhbmQuIFRoZSBudW1lcmF0b3Igc2hpZnQgZmFjdG9yIGlzIHJlbGF0ZWQgdG8gdGhlIFEKICogZmFjdG9yIG9mIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgogKiAtIFNlcXVlbmNlIG9mIHVpbnQxNl90IFBhblNldHRpbmcgXG4KICogT25lIHVpbnQxNl90IHBlciBiYW5kLCBpbmRpY2F0aW5nIGlmIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0byBsZWZ0ICgwKSwKICogcmlnaHQgKDEpLCBvciBib3RoICgyKSBjaGFubmVscy4KICovCnN0cnVjdCBhc21faWlyX2ZpbHRlcl9jb25maWdfcGFyYW1zIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbnVtX2JpcXVhZF9zdGFnZXM7Ci8qPCBOdW1iZXIgb2YgYmFuZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMjAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogYXVkaW9fcHBfbW9kdWxlX2lkcwogKiBJRCBvZiB0aGUgTXVsdGliYW5kIER5bmFtaWMgUmFuZ2UgQ29udHJvbCAoTUJEUkMpIG1vZHVsZSBvbiB0aGUgVHgvUngKICogcGF0aHMuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRQogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUwogKi8KI2RlZmluZSBBU01fTU9EVUxFX0lEX01CRFJDICAgMHgwMDAxMEMwNgoKLyogYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBNQkRSQyBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlICNBU01fTU9EVUxFX0lEX01CRFJDIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX21iZHJjX2VuYWJsZX0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRS50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9NQkRSQ19FTkFCTEUgICAweDAwMDEwQzA3CgovKiBJRCBvZiB0aGUgTUJEUkMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX01CRFJDIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX21iZHJjX2NvbmZpZ19wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TLnRleH0KICoKICogQHBhcnNwYWNlIFN1Yi1iYW5kIERSQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKICogQHN0cnVjdHVyZXthc21fc3ViYmFuZF9kcmNfY29uZmlnX3BhcmFtc30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVNfc3ViYmFuZF9EUkMudGV4fQogKgogKiBAa2VlcHs2fQogKiBUbyBvYnRhaW4gbGVnYWN5IEFEUkMgZnJvbSBNQkRSQywgdXNlIHRoZSBjYWxpYnJhdGlvbiB0b29sIHRvOgogKgogKiAtIEVuYWJsZSBNQkRSQyAoRW5hYmxlRmxhZyA9IFRSVUUpCiAqIC0gU2V0IG51bWJlciBvZiBiYW5kcyB0byAxICh1aU51bUJhbmRzID0gMSkKICogLSBFbmFibGUgdGhlIGZpcnN0IE1CRFJDIGJhbmQgKERyY01vZGVbMF0gPSBEUkNfRU5BQkxFRCA9IDEpCiAqIC0gQ2xlYXIgdGhlIGZpcnN0IGJhbmQgbXV0ZSBmbGFnIChNdXRlRmxhZ1swXSA9IDApCiAqIC0gU2V0IHRoZSBmaXJzdCBiYW5kIG1ha2V1cCBnYWluIHRvIHVuaXR5IChjb21wTWFrZVVwR2FpblswXSA9IDB4MjAwMCkKICogLSBVc2UgdGhlIGxlZ2FjeSBBRFJDIHBhcmFtZXRlcnMgdG8gY2FsaWJyYXRlIHRoZSByZXN0IG9mIHRoZSBNQkRSQwogKiBwYXJhbWV0ZXJzLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUyAgMHgwMDAxMEMwOAoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCgovKiBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBNTUJEUkMgbW9kdWxlIHZlcnNpb24gMiBwcmUvcG9zdHByb2Nlc3NpbmcgYmxvY2suCiAqIFRoaXMgbW9kdWxlIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYWwgTUJEUkMgKCNBU01fTU9EVUxFX0lEX01CRFJDKSBpbgogKiB0aGUgbGVuZ3RoIG9mIHRoZSBmaWx0ZXJzIHVzZWQgaW4gZWFjaCBzdWItYmFuZC4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSUQ6CiAqIC0gI0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TX0lNUFJPVkVEX0ZJTFRCQU5LX1YyCiAqLwojZGVmaW5lIEFTTV9NT0RVTEVfSURfTUJEUkNWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDcwQgoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfTUJEUkNWMiBtb2R1bGUgZm9yIHRoZSBpbXByb3ZlZCBmaWx0ZXIgc3RydWN0dXJlCiAqIG9mIHRoZSBNQkRSQyB2MiBwcmUvcG9zdHByb2Nlc3NpbmcgYmxvY2suCiAqIFRoZSB1cGRhdGUgdG8gdGhpcyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmcm9tIHRoZSBvcmlnaW5hbAogKiBNQkRSQyBpcyB0aGUgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlcgogKiBzdHJ1Y3R1cmUuIFRoZSBzZXF1ZW5jZSBmb3IgaXMgYXMgZm9sbG93czoKICogLSAxIGJhbmQgPSAwIEZJUiBjb2VmZmljaWVudCArIDEgbXV0ZSBmbGFnICsgdWludDE2X3QgcGFkZGluZwogKiAtIDIgYmFuZHMgPSAxNDEgRklSIGNvZWZmaWNpZW50cyArIDIgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICogLSAzIGJhbmRzID0gMTQxKzgxIEZJUiBjb2VmZmljaWVudHMgKyAzIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNCBiYW5kcyA9IDE0MSs4MSs2MSBGSVIgY29lZmZpY2llbnRzICsgNCBtdXRlIGZsYWdzICsgdWludDE2X3QKICogcGFkZGluZwogKiAtIDUgYmFuZHMgPSAxNDErODErNjErNjEgRklSIGNvZWZmaWNpZW50cyArIDUgbXV0ZSBmbGFncyArCiAqIHVpbnQxNl90IHBhZGRpbmcKICoJVGhpcyBibG9jayB1c2VzIHRoZSBzYW1lIHBhcmFtZXRlciBzdHJ1Y3R1cmUgYXMKICoJI0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNU19JTVBST1ZFRF9GSUxUQkFOS19WMiBcCgkJCQkJCQkJMHgwMDAxMDcwQwoKI2RlZmluZSBBU01fTU9EVUxFX0lEX01CRFJDVjMJCQkJCTB4MDAwMTA5MEIKLyoKICogSUQgb2YgdGhlIE1NQkRSQyBtb2R1bGUgdmVyc2lvbiAzIHByZS9wb3N0cHJvY2Vzc2luZyBibG9jay4KICogVGhpcyBtb2R1bGUgZGlmZmVycyBmcm9tIE1CRFJDdjIgKCNBU01fTU9EVUxFX0lEX01CRFJDVjIpIGluCiAqIHRoYXQgaXQgc3VwcG9ydHMgYm90aCAxNi0gYW5kIDI0LWJpdCBkYXRhLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRDoKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRQogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUwogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNU19WMwogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfRklMVEVSX1hPVkVSX0ZSRVFTCiAqLwoKLyogU3RydWN0dXJlIGZvciB0aGUgZW5hYmxlIHBhcmFtZXRlciBmb3IgYW4gTUJEUkMgbW9kdWxlLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTUJEUkNfRU5BQkxFIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiBNQkRSQyBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX21iZHJjX2VuYWJsZSB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgTUJEUkMgaXMgZGlzYWJsZWQgKDApIG9yIGVuYWJsZWQgKG5vbnplcm8pLiovCn0gX19wYWNrZWQ7CgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGFuIE1CRFJDIG1vZHVsZS4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBNQkRSQyBtb2R1bGUuIFxuIFxuIEZvbGxvd2luZyB0aGlzCiAqIHN0cnVjdHVyZSBpcyB0aGUgcGF5bG9hZCBmb3Igc3ViLWJhbmQgRFJDIGNvbmZpZ3VyYXRpb24KICogcGFyYW1ldGVycyAoYXNtX3N1YmJhbmRfZHJjX2NvbmZpZ19wYXJhbXMpLiBUaGlzIHN1Yi1iYW5kCiAqIHN0cnVjdHVyZSBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIGJhbmQuCiAqLwoKCnN0cnVjdCBhc21fbWJkcmNfY29uZmlnX3BhcmFtcyB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIG51bV9iYW5kczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA1CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgbGltaXRlcmhyZXNob2xkOwovKjwgVGhyZXNob2xkIGluIGRlY2liZWxzIGZvciB0aGUgbGltaXRlciBvdXRwdXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC03MiB0byAxOCBcbgogKiBSZWNvbW1lbmRlZCB2YWx1ZTogMzk5NCAoLTAuMjIgZGIgaW4gUTMuMTIgZm9ybWF0KQogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGxpbWl0ZXJfbWFrZXVwX2dhaW47Ci8qPCBNYWtldXAgZ2FpbiBpbiBkZWNpYmVscyBmb3IgdGhlIGxpbWl0ZXIgb3V0cHV0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtNDIgdG8gNDIgXG4KICogUmVjb21tZW5kZWQgdmFsdWU6IDI1NiAoMCBkQiBpbiBRNy44IGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX2djOwovKjwgTGltaXRlciBnYWluIHJlY292ZXJ5IGNvZWZmaWNpZW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwLjUgdG8gMC45OSBcbgogKiBSZWNvbW1lbmRlZCB2YWx1ZTogMzI0NDAgKDAuOTkgaW4gUTE1IGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX2RlbGF5OwovKjwgTGltaXRlciBkZWxheSBpbiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDEwIFxuCiAqIFJlY29tbWVuZGVkIHZhbHVlOiAyNjIgKDAuMDA4IHNhbXBsZXMgaW4gUTE1IGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX21heF93YWl0OwovKjwgTWF4aW11bSBsaW1pdGVyIHdhaXRpbmcgdGltZSBpbiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDEwIFxuCiAqIFJlY29tbWVuZGVkIHZhbHVlOiAyNjIgKDAuMDA4IHNhbXBsZXMgaW4gUTE1IGZvcm1hdCkKICovCn0gX19wYWNrZWQ7CgovKiBEUkMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIGVhY2ggc3ViLWJhbmQgb2YgYW4gTUJEUkMgbW9kdWxlLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUyBEUkMKICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIHN1Yi1iYW5kIGluIHRoZSBNQkRSQyBtb2R1bGUuCiAqIEFmdGVyIHRoaXMgRFJDIHN0cnVjdHVyZSBpcyBjb25maWd1cmVkIGZvciB2YWxpZCBiYW5kcywgdGhlIG5leHQKICogTUJEUkMgc2V0cGFyYW1zIGV4cGVjdHMgdGhlIHNlcXVlbmNlIG9mIHN1Yi1iYW5kIE1CRFJDIGZpbHRlcgogKiBjb2VmZmljaWVudHMgKHRoZSBsZW5ndGggZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGJhbmRzKSBwbHVzIHRoZQogKiBtdXRlIGZsYWcgZm9yIHRoYXQgYmFuZCBwbHVzIHVpbnQxNl90IHBhZGRpbmcuCiAqCiAqIEBrZWVwezEwfQogKiBUaGUgZmlsdGVyIGNvZWZmaWNpZW50IGFuZCBtdXRlIGZsYWcgYXJlIG9mIHR5cGUgaW50MTZfdDoKICogLSBGSVIgY29lZmZpY2llbnQgPSBpbnQxNl90IGZpckZpbHRlcgogKiAtIE11dGUgZmxhZyA9IGludDE2X3QgZk11dGVGbGFnCiAqCiAqIFRoZSBzZXF1ZW5jZSBpcyBhcyBmb2xsb3dzOgogKiAtIDEgYmFuZCA9IDAgRklSIGNvZWZmaWNpZW50ICsgMSBtdXRlIGZsYWcgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gMiBiYW5kcyA9IDk3IEZJUiBjb2VmZmljaWVudHMgKyAyIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gMyBiYW5kcyA9IDk3KzMzIEZJUiBjb2VmZmljaWVudHMgKyAzIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNCBiYW5kcyA9IDk3KzMzKzMzIEZJUiBjb2VmZmljaWVudHMgKyA0IG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNSBiYW5kcyA9IDk3KzMzKzMzKzMzIEZJUiBjb2VmZmljaWVudHMgKyA1IG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqCiAqIEZvciBpbXByb3ZlZCBmaWx0ZXJiYW5rLCB0aGUgc2VxdWVuY2UgaXMgYXMgZm9sbG93czoKICogLSAxIGJhbmQgPSAwIEZJUiBjb2VmZmljaWVudCArIDEgbXV0ZSBmbGFnICsgdWludDE2X3QgcGFkZGluZwogKiAtIDIgYmFuZHMgPSAxNDEgRklSIGNvZWZmaWNpZW50cyArIDIgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICogLSAzIGJhbmRzID0gMTQxKzgxIEZJUiBjb2VmZmljaWVudHMgKyAzIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNCBiYW5kcyA9IDE0MSs4MSs2MSBGSVIgY29lZmZpY2llbnRzICsgNCBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDUgYmFuZHMgPSAxNDErODErNjErNjEgRklSIGNvZWZmaWNpZW50cyArIDUgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICovCnN0cnVjdCBhc21fc3ViYmFuZF9kcmNfY29uZmlnX3BhcmFtcyB7CglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRyY19zdGVyZW9fbGlua2VkX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBhbGwgc3RlcmVvIGNoYW5uZWxzIGhhdmUgdGhlIHNhbWUgYXBwbGllZAogKiBkeW5hbWljcyAoMSkgb3IgaWYgdGhleSBwcm9jZXNzIHRoZWlyIGR5bmFtaWNzIGluZGVwZW5kZW50bHkgKDApLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTm90IGxpbmtlZAogKiAtIDEgLS0gTGlua2VkCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZHJjX21vZGU7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBEUkMgbW9kZSBpcyBieXBhc3NlZCBmb3Igc3ViLWJhbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRGlzYWJsZWQKICogLSAxIC0tIEVuYWJsZWQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBkcmNfZG93bl9zYW1wbGVfbGV2ZWw7Ci8qPCBEUkMgZG93biBzYW1wbGUgbGV2ZWwuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEBnZSAxCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZHJjX2RlbGF5OwovKjwgRFJDIGRlbGF5IGluIHNhbXBsZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMTIwMAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGRyY19ybXNpbWVfYXZnX2NvbnN0OwovKjwgUk1TIHNpZ25hbCBlbmVyZ3kgdGltZS1hdmVyYWdpbmcgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMl4xNi0xCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgZHJjX21ha2V1cF9nYWluOwovKjwgRFJDIG1ha2V1cCBnYWluIGluIGRlY2liZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyNTggdG8gNjQ5MTcKICovCgkvKiBEb3duIGV4cGFuZGVyIHNldHRpbmdzICovCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJocmVzaG9sZDsKLyo8IERvd24gZXhwYW5kZXIgdGhyZXNob2xkLgogKiBTdXBwb3J0ZWQgUTcgZm9ybWF0IHZhbHVlczogMTMyMCB0byB1cF9jbXBzcmhyZXNob2xkCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZG93bl9leHBkcl9zbG9wZTsKLyo8IERvd24gZXhwYW5kZXIgc2xvcGUuCiAqIFN1cHBvcnRlZCBROCBmb3JtYXQgdmFsdWVzOiAtMzI3NjggdG8gMC4KICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkb3duX2V4cGRyX2F0dGFjazsKLyo8IERvd24gZXhwYW5kZXIgYXR0YWNrIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTMxIGZvcm1hdCB2YWx1ZXM6IDE5Njg0NCB0byAyXjMxLgogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJfcmVsZWFzZTsKLyo8IERvd24gZXhwYW5kZXIgcmVsZWFzZSBjb25zdGFudC4KICogU3VwcG9ydGVkIFEzMSBmb3JtYXQgdmFsdWVzOiAxOTY4NSB0byAyXjMxCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgZG93bl9leHBkcl9oeXN0ZXJlc2lzOwovKjwgRG93biBleHBhbmRlciBoeXN0ZXJlc2lzIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTE0IGZvcm1hdCB2YWx1ZXM6IDEgdG8gMzI2OTAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCglpbnQzMl90ICAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJfbWluX2dhaW5fZGI7Ci8qPCBEb3duIGV4cGFuZGVyIG1pbmltdW0gZ2Fpbi4KICogU3VwcG9ydGVkIFEyMyBmb3JtYXQgdmFsdWVzOiAtODA1MzA2MzY4IHRvIDAuCiAqLwoKCS8qIFVwIGNvbXByZXNzb3Igc2V0dGluZ3MgKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIHVwX2NtcHNyaHJlc2hvbGQ7Ci8qPCBVcCBjb21wcmVzc29yIHRocmVzaG9sZC4KICogU3VwcG9ydGVkIFE3IGZvcm1hdCB2YWx1ZXM6IGRvd25fZXhwZHJocmVzaG9sZCB0bwogKiBkb3duX2NtcHNyaHJlc2hvbGQuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgdXBfY21wc3Jfc2xvcGU7Ci8qPCBVcCBjb21wcmVzc29yIHNsb3BlLgogKiBTdXBwb3J0ZWQgUTE2IGZvcm1hdCB2YWx1ZXM6IDAgdG8gNjQ4ODEuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdXBfY21wc3JfYXR0YWNrOwovKjwgVXAgY29tcHJlc3NvciBhdHRhY2sgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODQ0IHRvIDJeMzEuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdXBfY21wc3JfcmVsZWFzZTsKLyo8IFVwIGNvbXByZXNzb3IgcmVsZWFzZSBjb25zdGFudC4KICogU3VwcG9ydGVkIFEzMSBmb3JtYXQgdmFsdWVzOiAxOTY4NSB0byAyXjMxLgogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHVwX2NtcHNyX2h5c3RlcmVzaXM7Ci8qPCBVcCBjb21wcmVzc29yIGh5c3RlcmVzaXMgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMTQgZm9ybWF0IHZhbHVlczogMSB0byAzMjY5MC4KICovCgoJLyogRG93biBjb21wcmVzc29yIHNldHRpbmdzICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyaHJlc2hvbGQ7Ci8qPCBEb3duIGNvbXByZXNzb3IgdGhyZXNob2xkLgogKiBTdXBwb3J0ZWQgUTcgZm9ybWF0IHZhbHVlczogdXBfY21wc3JocmVzaG9sZCB0byAxMTU2MC4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyX3Nsb3BlOwovKjwgRG93biBjb21wcmVzc29yIHNsb3BlLgogKiBTdXBwb3J0ZWQgUTE2IGZvcm1hdCB2YWx1ZXM6IDAgdG8gNjQ4ODEuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwovKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyX2F0dGFjazsKLyo8IERvd24gY29tcHJlc3NvciBhdHRhY2sgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODQ0IHRvIDJeMzEuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZG93bl9jbXBzcl9yZWxlYXNlOwovKjwgRG93biBjb21wcmVzc29yIHJlbGVhc2UgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODUgdG8gMl4zMS4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyX2h5c3RlcmVzaXM7Ci8qPCBEb3duIGNvbXByZXNzb3IgaHlzdGVyZXNpcyBjb25zdGFudC4KICogU3VwcG9ydGVkIFExNCB2YWx1ZXM6IDEgdG8gMzI2OTAuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOwovKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9FUVVBTElaRVIgICAgICAgICAgICAweDAwMDEwQzI3CiNkZWZpbmUgQVNNX1BBUkFNX0lEX0VRVUFMSVpFUl9QQVJBTUVURVJTICAweDAwMDEwQzI4CgojZGVmaW5lIEFTTV9NQVhfRVFfQkFORFMgMTIKCnN0cnVjdCBhc21fZXFfcGVyX2JhbmRfcGFyYW1zIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgYmFuZF9pZHg7Ci8qPCBCYW5kIGluZGV4LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDExCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZmlsdGVyeXBlOwovKjwgVHlwZSBvZiBmaWx0ZXIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9QQVJBTV9FUVlQRV9OT05FCiAqIC0gI0FTTV9QQVJBTV9FUV9CQVNTX0JPT1NUCiAqIC0gI0FTTV9QQVJBTV9FUV9CQVNTX0NVVAogKiAtICNBU01fUEFSQU1fRVFSRUJMRV9CT09TVAogKiAtICNBU01fUEFSQU1fRVFSRUJMRV9DVVQKICogLSAjQVNNX1BBUkFNX0VRX0JBTkRfQk9PU1QKICogLSAjQVNNX1BBUkFNX0VRX0JBTkRfQ1VUCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgY2VudGVyX2ZyZXFfaHo7CgkvKjwgRmlsdGVyIGJhbmQgY2VudGVyIGZyZXF1ZW5jeSBpbiBIZXJ0ei4gKi8KCglpbnQzMl90ICAgICAgICAgICAgICAgICAgIGZpbHRlcl9nYWluOwovKjwgRmlsdGVyIGJhbmQgaW5pdGlhbCBnYWluLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiArMTIgdG8gLTEyIGRCIGluIDEgZEIgaW5jcmVtZW50cwogKi8KCglpbnQzMl90ICAgICAgICAgICAgICAgICAgIHFfZmFjdG9yOwovKjwgRmlsdGVyIGJhbmQgcXVhbGl0eSBmYWN0b3IgZXhwcmVzc2VkIGFzIGEgUTggbnVtYmVyLCBpLmUuLCBhCiAqIGZpeGVkLXBvaW50IG51bWJlciB3aXRoIHEgZmFjdG9yIG9mIDguIEZvciBleGFtcGxlLCAzMDAwLygyXjgpLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZXFfcGFyYW1zIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgZXF1YWxpemVyIG1vZHVsZSBpcyBkaXNhYmxlZCAoMCkgb3IgZW5hYmxlZAogKiAobm9uemVybykuCiAqLwoKCQl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG51bV9iYW5kczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAxMgogKi8KCXN0cnVjdCBhc21fZXFfcGVyX2JhbmRfcGFyYW1zIGVxX2JhbmRzW0FTTV9NQVhfRVFfQkFORFNdOwoKfSBfX3BhY2tlZDsKCi8qCU5vIGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFZUEVfTk9ORSAgICAgIDAKCi8qCUJhc3MgYm9vc3QgZXF1YWxpemVyIGVmZmVjdC4qLwojZGVmaW5lIEFTTV9QQVJBTV9FUV9CQVNTX0JPT1NUICAgICAxCgovKkJhc3MgY3V0IGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFfQkFTU19DVVQgICAgICAgMgoKLyoJVHJlYmxlIGJvb3N0IGVxdWFsaXplciBlZmZlY3QgKi8KI2RlZmluZSBBU01fUEFSQU1fRVFSRUJMRV9CT09TVCAgIDMKCi8qCVRyZWJsZSBjdXQgZXF1YWxpemVyIGVmZmVjdC4qLwojZGVmaW5lIEFTTV9QQVJBTV9FUVJFQkxFX0NVVCAgICAgNAoKLyoJQmFuZCBib29zdCBlcXVhbGl6ZXIgZWZmZWN0LiovCiNkZWZpbmUgQVNNX1BBUkFNX0VRX0JBTkRfQk9PU1QgICAgIDUKCi8qCUJhbmQgY3V0IGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFfQkFORF9DVVQgICAgICAgNgoKLyogR2V0ICYgc2V0IHBhcmFtcyAqLwojZGVmaW5lIFZTU19JQ09NTU9OX0NNRF9TRVRfUEFSQU1fVjIJMHgwMDAxMTMzRAojZGVmaW5lIFZTU19JQ09NTU9OX0NNRF9HRVRfUEFSQU1fVjIJMHgwMDAxMTMzRQojZGVmaW5lIFZTU19JQ09NTU9OX1JTUF9HRVRfUEFSQU0JMHgwMDAxMTAwOAoKI2RlZmluZSBWU1NfTUFYX0FWQ1NfTlVNX1NFUlZJQ0VTCTI1CgovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBtb2R1bGUuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogIC0gI0FVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9FTkFCTEUKICogIC0gI0FVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9NT0RFCiAqICAtICNBVURQUk9DX1BBUkFNX0lEX0JBU1NfQk9PU1RfU1RSRU5HVEgKICovCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBMQovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9CQVNTX0JPT1NUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBMgovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBtb2RlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX0JBU1NfQk9PU1QuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTMKLyogSUQgb2YgdGhlIEJhc3MgQm9vc3Qgc3RyZW5ndGggcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9CQVNTX0JPT1NUX1NUUkVOR1RIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBNAoKLyogSUQgb2YgdGhlIFBCRSBtb2R1bGUuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9QQkVfRU5BQkxFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUEJFX1BBUkFNX0NPTkZJRwogKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9QQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzJBCi8qIElEIG9mIHRoZSBCYXNzIEJvb3N0IGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9CQVNTX0JPT1NULgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1BCRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzJCCi8qIElEIG9mIHRoZSBCYXNzIEJvb3N0IG1vZGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9QQkVfUEFSQU1fQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM0OQoKLyogSUQgb2YgdGhlIFZpcnR1YWxpemVyIG1vZHVsZS4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlCiAqIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX0VOQUJMRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX1NUUkVOR1RICiAqIC0gI0FVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfT1VUX1RZUEUKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9HQUlOX0FESlVTVAogKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9WSVJUVUFMSVpFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEE1Ci8qIElEIG9mIHRoZSBWaXJ0dWFsaXplciBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfVklSVFVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTYKLyogSUQgb2YgdGhlIFZpcnR1YWxpemVyIHN0cmVuZ3RoIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1ZJUlRVQUxJWkVSLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX1NUUkVOR1RIICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEE3Ci8qIElEIG9mIHRoZSBWaXJ0dWFsaXplciBvdXQgdHlwZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9WSVJUVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9PVVRfVFlQRSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBOAovKiBJRCBvZiB0aGUgVmlydHVhbGl6ZXIgb3V0IHR5cGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfVklSVFVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfR0FJTl9BREpVU1QgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTkKCi8qIElEIG9mIHRoZSBSZXZlcmIgbW9kdWxlLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nCiAqIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0VOQUJMRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9NT0RFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1BSRVNFVAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9XRVRfTUlYCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0dBSU5fQURKVVNUCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JPT01fTEVWRUwKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUk9PTV9IRl9MRVZFTAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUNBWV9USU1FCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFQ0FZX0hGX1JBVElPCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JFRkxFQ1RJT05TX0xFVkVMCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JFRkxFQ1RJT05TX0RFTEFZCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0xFVkVMCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFTEFZCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RJRkZVU0lPTgogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERU5TSVRZCiAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBQQovKiBJRCBvZiB0aGUgUmV2ZXJiIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBQgovKiBJRCBvZiB0aGUgUmV2ZXJiIG1vZGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QUMKLyogSUQgb2YgdGhlIFJldmVyYiBwcmVzZXQgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9QUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QUQKLyogSUQgb2YgdGhlIFJldmVyYiB3ZXQgbWl4IHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfV0VUX01JWCAgICAgICAgICAgICAgICAgICAweDAwMDEwOEFFCi8qIElEIG9mIHRoZSBSZXZlcmIgZ2FpbiBhZGp1c3QgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9HQUlOX0FESlVTVCAgICAgICAgICAgICAgIDB4MDAwMTA4QUYKLyogSUQgb2YgdGhlIFJldmVyYiByb29tIGxldmVsIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUk9PTV9MRVZFTCAgICAgICAgICAgICAgICAweDAwMDEwOEIwCi8qIElEIG9mIHRoZSBSZXZlcmIgcm9vbSBoZiBsZXZlbCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JPT01fSEZfTEVWRUwgICAgICAgICAgICAgMHgwMDAxMDhCMQovKiBJRCBvZiB0aGUgUmV2ZXJiIGRlY2F5IHRpbWUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUNBWV9USU1FICAgICAgICAgICAgICAgIDB4MDAwMTA4QjIKLyogSUQgb2YgdGhlIFJldmVyYiBkZWNheSBoZiByYXRpbyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFQ0FZX0hGX1JBVElPICAgICAgICAgICAgMHgwMDAxMDhCMwovKiBJRCBvZiB0aGUgUmV2ZXJiIHJlZmxlY3Rpb25zIGxldmVsIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUkVGTEVDVElPTlNfTEVWRUwgICAgICAgICAweDAwMDEwOEI0Ci8qIElEIG9mIHRoZSBSZXZlcmIgcmVmbGVjdGlvbnMgZGVsYXkgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9SRUZMRUNUSU9OU19ERUxBWSAgICAgICAgIDB4MDAwMTA4QjUKLyogSUQgb2YgdGhlIFJldmVyYiBsZXZlbCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0xFVkVMICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QjYKLyogSUQgb2YgdGhlIFJldmVyYiBkZWxheSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFTEFZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QjcKLyogSUQgb2YgdGhlIFJldmVyYiBkaWZmdXNpb24gcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ESUZGVVNJT04gICAgICAgICAgICAgICAgICAweDAwMDEwOEI4Ci8qIElEIG9mIHRoZSBSZXZlcmIgZGVuc2l0eSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFTlNJVFkgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QjkKCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBtb2R1bGUuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZQogKiBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9FTkFCTEUKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9DT05GSUcKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9OVU1fQkFORFMKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0xFVkVMUwogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX0JBTkRfTEVWRUxfUkFOR0UKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0ZSRVFTCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfU0lOR0xFX0JBTkRfRlJFUV9SQU5HRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVEKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0lOREVYCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfUFJFU0VUX0lECiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfTlVNX1BSRVNFVFMKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9HRVRfUFJFU0VUX05BTUUKICovCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkEKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkIKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGNvbmZpZyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkMKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIG51bWJlciBvZiBiYW5kcyBwYXJhbWV0ZXIgdXNlZAogKiBieSBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcwogKiB1c2VkIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9OVU1fQkFORFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkQKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGJhbmQgbGV2ZWxzIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElEIGlzCiAqIHVzZWQgZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX0JBTkRfTEVWRUxTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhCRQovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgYmFuZCBsZXZlbCByYW5nZSBwYXJhbWV0ZXIgdXNlZAogKiBieSBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcwogKiB1c2VkIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0xFVkVMX1JBTkdFICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkYKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGJhbmQgZnJlcXVlbmNpZXMgcGFyYW1ldGVyIHVzZWQKICogYnkgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMKICogdXNlZCBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfQkFORF9GUkVRUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEMwCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBzaW5nbGUgYmFuZCBmcmVxdWVuY3kgcmFuZ2UKICogcGFyYW1ldGVyIHVzZWQgYnkgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuCiAqICBUaGlzIHBhcmFtIElEIGlzIHVzZWQgZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVFfUkFOR0UgICAgICAgICAgICAgMHgwMDAxMDhDMQovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgc2luZ2xlIGJhbmQgZnJlcXVlbmN5IHBhcmFtZXRlcgogKiB1c2VkIGJ5IEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElECiAqIGlzIHVzZWQgZm9yIHNldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVEgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhDMgovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgYmFuZCBpbmRleCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QzMKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIHByZXNldCBpZCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcyB1c2VkCiAqIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9QUkVTRVRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QzQKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIG51bWJlciBvZiBwcmVzZXRzIHBhcmFtZXRlciB1c2VkCiAqIGJ5IEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElEIGlzIHVzZWQKICogZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX05VTV9QUkVTRVRTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhDNQovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgcHJlc2V0IG5hbWUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMgdXNlZAogKiBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfUFJFU0VUX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEM2CgovKiBTZXQgUTYgdG9wb2xvZ2llcyAqLwojZGVmaW5lIEFTTV9DTURfQUREX1RPUE9MT0dJRVMJCQkJMHgwMDAxMERCRQojZGVmaW5lIEFETV9DTURfQUREX1RPUE9MT0dJRVMJCQkJMHgwMDAxMDMzNQojZGVmaW5lIEFGRV9DTURfQUREX1RPUE9MT0dJRVMJCQkJMHgwMDAxMDBmOAovKiBzdHJ1Y3R1cmUgdXNlZCBmb3IgYm90aCBpb2N0bHMgKi8Kc3RydWN0IGNtZF9zZXRfdG9wb2xvZ2llcyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIJCXBheWxvYWRfYWRkcl9sc3c7CgkvKiBMU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIJCXBheWxvYWRfYWRkcl9tc3c7CgkvKiBNU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwoJLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgbWVtIG1hcCBjb21tYW5kICovCgl1MzIJCXBheWxvYWRfc2l6ZTsKCS8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgaW4gc2hhcmVkIG1lbW9yeSAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBtb2R1bGUgcmVwcmVzZW50cyB0aGUgUnggcHJvY2Vzc2luZyBvZiBGZWVkYmFjayBzcGVha2VyIHByb3RlY3Rpb24uCiAqIEl0IGNvbnRhaW5zIHRoZSBleGN1cnNpb24gY29udHJvbCwgdGhlcm1hbCBwcm90ZWN0aW9uLAogKiBhbmFsb2cgY2xpcCBtYW5hZ2VyIGZlYXR1cmVzIGluIGl0LgogKiBUaGlzIG1vZHVsZSBpZCB3aWxsIHN1cHBvcnQgZm9sbG93aW5nIHBhcmFtIGlkcy4KICogLSBBRkVfUEFSQU1fSURfRkJTUF9NT0RFX1JYX0NGRwogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9GQl9TUEtSX1BST1RfUlggMHgwMDAxMDIxQwojZGVmaW5lIEFGRV9NT0RVTEVfRkJfU1BLUl9QUk9UX1YyX1JYIDB4MDAwMTAyNUYKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BfUlhfTElNSVRFUl9USCAweDAwMDEwMkIxCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0ZCU1BfTU9ERV9SWF9DRkcgMHgwMDAxMDIxRAojZGVmaW5lIEFGRV9QQVJBTV9JRF9GQlNQX1BUT05FX1JBTVBfQ0ZHIDB4MDAwMTAyNjAKCnN0cnVjdCBhc21fZmJzcF9tb2RlX3J4X2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3QgbW9kZTsKfSBfX3BhY2tlZDsKCi8qIFRoaXMgbW9kdWxlIHJlcHJlc2VudHMgdGhlIFZJIHByb2Nlc3Npbmcgb2YgZmVlZGJhY2sgc3BlYWtlciBwcm90ZWN0aW9uLgogKiBJdCB3aWxsIHJlY2VpdmUgVnNlbnMgYW5kIElzZW5zIGZyb20gY29kZWMgYW5kIGdlbmVyYXRlcyBuZWNlc3NhcnkKICogcGFyYW1ldGVycyBuZWVkZWQgYnkgUnggcHJvY2Vzc2luZy4KICogVGhpcyBtb2R1bGUgaWQgd2lsbCBzdXBwb3J0IGZvbGxvd2luZyBwYXJhbSBpZHMuCiAqIC0gQUZFX1BBUkFNX0lEX1NQS1JfQ0FMSUJfVklfUFJPQ19DRkcKICogLSBBRkVfUEFSQU1fSURfQ0FMSUJfUkVTX0NGRwogKiAtIEFGRV9QQVJBTV9JRF9GRUVEQkFDS19QQVRIX0NGRwogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9GQl9TUEtSX1BST1RfVklfUFJPQyAweDAwMDEwMjI2CiNkZWZpbmUgQUZFX01PRFVMRV9GQl9TUEtSX1BST1RfVklfUFJPQ19WMiAweDAwMDEwMjZBCgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUEtSX0NBTElCX1ZJX1BST0NfQ0ZHIDB4MDAwMTAyMkEKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BLUl9DQUxJQl9WSV9QUk9DX0NGR19WMiAgMHgwMDAxMDI2QgoKc3RydWN0IGFzbV9zcGtyX2NhbGliX3ZpX3Byb2NfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBvcGVyYXRpb25fbW9kZTsKCXVpbnQzMl90IHIwX3QwX3NlbGVjdGlvbl9mbGFnW1NQX1YyX05VTV9NQVhfU1BLUl07CglpbnQzMl90IHIwX2NhbGlfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CglpbnQxNl90CXQwX2NhbGlfcTZbU1BfVjJfTlVNX01BWF9TUEtSXTsKCXVpbnQzMl90IHF1aWNrX2NhbGliX2ZsYWc7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9DQUxJQl9SRVNfQ0ZHIDB4MDAwMTAyMkIKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0FMSUJfUkVTX0NGR19WMiAweDAwMDEwMjZFCgpzdHJ1Y3QgYXNtX2NhbGliX3Jlc19jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCWludDMyX3QJcjBfY2FsaV9xMjRbU1BfVjJfTlVNX01BWF9TUEtSXTsKCXVpbnQzMl90IHRoX3ZpX2NhX3N0YXRlOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfRkVFREJBQ0tfUEFUSF9DRkcgMHgwMDAxMDIyQwojZGVmaW5lIEFGRV9NT0RVTEVfRkVFREJBQ0sgMHgwMDAxMDI1NwoKc3RydWN0IGFzbV9mZWVkYmFja19wYXRoX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJaW50MzJfdAlkc3RfcG9ydGlkOwoJaW50MzJfdAludW1fY2hhbm5lbHM7CglpbnQzMl90CWNoYW5faW5mb1s0XTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX01PREVfVklfUFJPQ19DRkcgMHgwMDAxMDIyNwoKc3RydWN0IGFzbV9tb2RlX3ZpX3Byb2NfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBjYWxfbW9kZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX01PRFVMRV9TUEVBS0VSX1BST1RFQ1RJT05fVjJfVEhfVkkJMHgwMDAxMDI2QQojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9USF9WSV9NT0RFX0NGRwkweDAwMDEwMjZCCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQX1YyX1RIX1ZJX0ZUTV9DRkcJMHgwMDAxMDI5RgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9USF9WSV9GVE1fUEFSQU1TCTB4MDAwMTAyQTAKCnN0cnVjdCBhZmVfc3BfdGhfdmlfbW9kZV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IG9wZXJhdGlvbl9tb2RlOwoJLyoKCSAqIE9wZXJhdGlvbiBtb2RlIG9mIHRoZXJtYWwgVkkgbW9kdWxlLgoJICogICAwIC0tIE5vcm1hbCBSdW5uaW5nIG1vZGUKCSAqICAgMSAtLSBDYWxpYnJhdGlvbiBtb2RlCgkgKiAgIDIgLS0gRlRNIG1vZGUKCSAqLwoJdWludDMyX3QgcjB0MF9zZWxlY3Rpb25fZmxhZ1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIFNwZWNpZmllcyB3aGljaCBzZXQgb2YgUjAsIFQwIHZhbHVlcyB0aGUgYWxnb3JpdGhtIHdpbGwgdXNlLgoJICogVGhpcyBmaWVsZCBpcyB2YWxpZCBvbmx5IGluIE5vcm1hbCBtb2RlIChvcGVyYXRpb25fbW9kZSA9IDApLgoJICogMCAtLSBVc2UgY2FsaWJyYXRlZCBSMCwgVDAgdmFsdWUKCSAqIDEgLS0gVXNlIHNhZmUgUjAsIFQwIHZhbHVlCgkgKi8KCWludDMyX3QgcjBfY2FsaV9xMjRbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBDYWxpYnJhdGlvbiBwb2ludCByZXNpc3RhbmNlIHBlciBkZXZpY2UuIFRoaXMgZmllbGQgaXMgdmFsaWQKCSAqIG9ubHkgaW4gTm9ybWFsIG1vZGUgKG9wZXJhdGlvbl9tb2RlID0gMCkuCgkgKiB2YWx1ZXMgMzM1NTQ0MzIgdG8gMTA3Mzc0MTgyNCBPaG1zIChpbiBRMjQgZm9ybWF0KQoJICovCglpbnQxNl90IHQwX2NhbGlfcTZbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBDYWxpYnJhdGlvbiBwb2ludCB0ZW1wZXJhdHVyZSBwZXIgZGV2aWNlLiBUaGlzIGZpZWxkIGlzIHZhbGlkCgkgKiBpbiBib3RoIE5vcm1hbCBtb2RlIGFuZCBDYWxpYnJhdGlvbiBtb2RlLgoJICogdmFsdWVzIC0xOTIwIHRvIDUxMjAgZGVncmVlcyBDIChpbiBRNiBmb3JtYXQpCgkgKi8KCXVpbnQzMl90IHF1aWNrX2NhbGliX2ZsYWc7CgkvKgoJICogSW5kaWNhdGVzIHdoZXRoZXIgY2FsaWJyYXRpb24gaXMgdG8gYmUgZG9uZSBpbiBxdWljayBtb2RlIG9yIG5vdC4KCSAqIFRoaXMgZmllbGQgaXMgdmFsaWQgb25seSBpbiBDYWxpYnJhdGlvbiBtb2RlIChvcGVyYXRpb25fbW9kZSA9IDEpLgoJICogMCAtLSBEaXNhYmxlZAoJICogMSAtLSBFbmFibGVkCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3Qgd2FpdF90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogV2FpdCB0aW1lIHRvIGhlYXQgdXAgc3BlYWtlciBiZWZvcmUgY29sbGVjdGluZyBzdGF0aXN0aWNzCgkgKiBmb3IgZnRtIG1vZGUgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byA0Mjk0OTY3Mjk1IG1zCgkgKi8KCXVpbnQzMl90IGZ0bV90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogZHVyYXRpb24gZm9yIHdoaWNoIEZUTSBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byAyMDAwIG1zCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX3BhcmFtcyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJaW50MzJfdCBkY19yZXNfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogREMgcmVzaXN0YW5jZSB2YWx1ZSBpbiBxMjQgZm9ybWF0CgkgKiB2YWx1ZXMgMCB0byAyMTQ3NDgzNjQ3IE9obXMgKGluIFEyNCBmb3JtYXQpCgkgKi8KCWludDMyX3QgdGVtcF9xMjJbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiB0ZW1wZXJhdHVyZSB2YWx1ZSBpbiBxMjIgZm9ybWF0CgkgKiB2YWx1ZXMgLTEyNTgyOTEyMCB0byAyMTQ3NDgzNjQ3IGRlZ0MgKGluIFEyMiBmb3JtYXQpCgkgKi8KCXVpbnQzMl90IHN0YXR1c1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIEZUTSBwYWNrZXQgc3RhdHVzCgkgKiAwIC0gSW5jb3JyZWN0IG9wZXJhdGlvbiBtb2RlLlRoaXMgc3RhdHVzIGlzIHJldHVybmVkCgkgKiAgICAgd2hlbiBHRVRfUEFSQU0gaXMgY2FsbGVkIGluIG5vbiBGVE0gTW9kZQoJICogMSAtIEluYWN0aXZlIG1vZGUgLS0gUG9ydCBpcyBub3QgeWV0IHN0YXJ0ZWQuCgkgKiAyIC0gV2FpdCBzdGF0ZS4gd2FpdF90aW1lX21zIGhhcyBub3QgeWV0IGVsYXBzZWQKCSAqIDMgLSBJbiBwcm9ncmVzcyBzdGF0ZS4gZnRtX3RpbWVfbXMgaGFzIG5vdCB5ZXQgZWxhcHNlZC4KCSAqIDQgLSBTdWNjZXNzLgoJICogNSAtIEZhaWxlZC4KCSAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcF90aF92aV9nZXRfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9nZXRfcGFyYW1fdjIgZ2V0X3BhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2Z0bV9wYXJhbXMgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2dldF9wYXJhbV9yZXNwIHsKCXVpbnQzMl90IHN0YXR1czsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9zcF90aF92aV9mdG1fcGFyYW1zIHBhcmFtOwp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQUZFX01PRFVMRV9TUEVBS0VSX1BST1RFQ1RJT05fVjJfRVhfVkkJMHgwMDAxMDI2RgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9FWF9WSV9NT0RFX0NGRwkweDAwMDEwMkExCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQX1YyX0VYX1ZJX0ZUTV9DRkcJMHgwMDAxMDJBMgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9FWF9WSV9GVE1fUEFSQU1TCTB4MDAwMTAyQTMKCnN0cnVjdCBhZmVfc3BfZXhfdmlfbW9kZV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IG9wZXJhdGlvbl9tb2RlOwoJLyoKCSAqIE9wZXJhdGlvbiBtb2RlIG9mIEV4Y3Vyc2lvbiBWSSBtb2R1bGUuCgkgKiAwIC0gTm9ybWFsIFJ1bm5pbmcgbW9kZQoJICogMiAtIEZUTSBtb2RlCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3Qgd2FpdF90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogV2FpdCB0aW1lIHRvIGhlYXQgdXAgc3BlYWtlciBiZWZvcmUgY29sbGVjdGluZyBzdGF0aXN0aWNzCgkgKiBmb3IgZnRtIG1vZGUgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byA0Mjk0OTY3Mjk1IG1zCgkgKi8KCXVpbnQzMl90IGZ0bV90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogZHVyYXRpb24gZm9yIHdoaWNoIEZUTSBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byAyMDAwIG1zCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX3BhcmFtcyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJaW50MzJfdCBmcmVxX3EyMFtTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIFJlc29uYW5jZSBmcmVxdWVuY3kgaW4gcTIwIGZvcm1hdAoJICogdmFsdWVzIDAgdG8gMjE0NzQ4MzY0NyBIeiAoaW4gUTIwIGZvcm1hdCkKCSAqLwoJaW50MzJfdCByZXNpc19xMjRbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBNZWNoYW5pY2FsIHJlc2lzdGFuY2UgaW4gcTI0IGZvcm1hdAoJICogdmFsdWVzIDAgdG8gMjE0NzQ4MzY0NyBPaG1zIChpbiBRMjQgZm9ybWF0KQoJICovCglpbnQzMl90IHFtY3RfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogTWVjaGFuaWNhbCBRZmFjdG9yIGluIHEyNCBmb3JtYXQKCSAqIHZhbHVlcyAwIHRvIDIxNDc0ODM2NDcgKGluIFEyNCBmb3JtYXQpCgkgKi8KCXVpbnQzMl90IHN0YXR1c1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIEZUTSBwYWNrZXQgc3RhdHVzCgkgKiAwIC0gSW5jb3JyZWN0IG9wZXJhdGlvbiBtb2RlLlRoaXMgc3RhdHVzIGlzIHJldHVybmVkCgkgKiAgICAgIHdoZW4gR0VUX1BBUkFNIGlzIGNhbGxlZCBpbiBub24gRlRNIE1vZGUuCgkgKiAxIC0gSW5hY3RpdmUgbW9kZSAtLSBQb3J0IGlzIG5vdCB5ZXQgc3RhcnRlZC4KCSAqIDIgLSBXYWl0IHN0YXRlLiB3YWl0X3RpbWVfbXMgaGFzIG5vdCB5ZXQgZWxhcHNlZAoJICogMyAtIEluIHByb2dyZXNzIHN0YXRlLiBmdG1fdGltZV9tcyBoYXMgbm90IHlldCBlbGFwc2VkLgoJICogNCAtIFN1Y2Nlc3MuCgkgKiA1IC0gRmFpbGVkLgoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2dldF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX2dldF9wYXJhbV92MiBnZXRfcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX3BhcmFtcyBwYXJhbTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfZXhfdmlfZ2V0X3BhcmFtX3Jlc3AgewoJdWludDMyX3Qgc3RhdHVzOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2Z0bV9wYXJhbXMgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX3J4X2xpbWl0ZXJfdGhfcGFyYW0gewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IGxpbV90aHJfcGVyX2NhbGliX3EyN1tTUF9WMl9OVU1fTUFYX1NQS1JdOwp9IF9fcGFja2VkOwoKdW5pb24gYWZlX3Nwa3JfcHJvdF9jb25maWcgewoJc3RydWN0IGFzbV9mYnNwX21vZGVfcnhfY2ZnIG1vZGVfcnhfY2ZnOwoJc3RydWN0IGFzbV9zcGtyX2NhbGliX3ZpX3Byb2NfY2ZnIHZpX3Byb2NfY2ZnOwoJc3RydWN0IGFzbV9mZWVkYmFja19wYXRoX2NmZyBmZWVkYmFja19wYXRoX2NmZzsKCXN0cnVjdCBhc21fbW9kZV92aV9wcm9jX2NmZyBtb2RlX3ZpX3Byb2NfY2ZnOwoJc3RydWN0IGFmZV9zcF90aF92aV9tb2RlX2NmZyB0aF92aV9tb2RlX2NmZzsKCXN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX2NmZyB0aF92aV9mdG1fY2ZnOwoJc3RydWN0IGFmZV9zcF9leF92aV9tb2RlX2NmZyBleF92aV9tb2RlX2NmZzsKCXN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX2NmZyBleF92aV9mdG1fY2ZnOwoJc3RydWN0IGFmZV9zcF9yeF9saW1pdGVyX3RoX3BhcmFtIGxpbWl0ZXJfdGhfY2ZnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcGtyX3Byb3RfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXVuaW9uIGFmZV9zcGtyX3Byb3RfY29uZmlnIHByb3RfY29uZmlnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcGtyX3Byb3RfZ2V0X3ZpX2NhbGliIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfZ2V0X3BhcmFtX3YyIGdldF9wYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFzbV9jYWxpYl9yZXNfY2ZnIHJlc19jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3Nwa3JfcHJvdF9jYWxpYl9nZXRfcmVzcCB7Cgl1aW50MzJfdCBzdGF0dXM7CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhc21fY2FsaWJfcmVzX2NmZyByZXNfY2ZnOwp9IF9fcGFja2VkOwoKCi8qIFNSUyBUUlVNRURJQSBzdGFydCAqLwovKiB0b3BvbG9neSAqLwojZGVmaW5lIFNSU19UUlVNRURJQV9UT1BPTE9HWV9JRAkJCTB4MDAwMTBEOTAKLyogbW9kdWxlICovCiNkZWZpbmUgU1JTX1RSVU1FRElBX01PRFVMRV9JRAkJCQkweDEwMDA1MDEwCi8qIHBhcmFtZXRlcnMgKi8KI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TCQkJCTB4MTAwMDUwMTEKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX1dPV0hECQkJMHgxMDAwNTAxMgojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfQ1NIUAkJCTB4MTAwMDUwMTMKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX0hQRgkJCQkweDEwMDA1MDE0CiNkZWZpbmUgU1JTX1RSVU1FRElBX1BBUkFNU19BRVEJCQkJMHgxMDAwNTAxNQojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfSEwJCQkJMHgxMDAwNTAxNgojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfR0VRCQkJCTB4MTAwMDUwMTcKCiNkZWZpbmUgU1JTX0lEX0dMT0JBTAkweDAwMDAwMDAxCiNkZWZpbmUgU1JTX0lEX1dPV0hECTB4MDAwMDAwMDIKI2RlZmluZSBTUlNfSURfQ1NIUAkweDAwMDAwMDAzCiNkZWZpbmUgU1JTX0lEX0hQRgkweDAwMDAwMDA0CiNkZWZpbmUgU1JTX0lEX0FFUQkweDAwMDAwMDA1CiNkZWZpbmUgU1JTX0lEX0hMCQkweDAwMDAwMDA2CiNkZWZpbmUgU1JTX0lEX0dFUQkweDAwMDAwMDA3CgojZGVmaW5lIFNSU19DTURfVVBMT0FECQkweDdGRkYwMDAwCiNkZWZpbmUgU1JTX1BBUkFNX09GRlNFVF9NQVNLCTB4M0ZGRjAwMDAKI2RlZmluZSBTUlNfUEFSQU1fVkFMVUVfTUFTSwkweDAwMDBGRkZGCgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19HTE9CQUwgewoJdWludDhfdCAgICAgICAgICAgICAgICAgIHYxOwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHYyOwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHYzOwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY0OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY1OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY2OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY3OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY4OwoJdWludDE2X3QgICAgICAgICAgICAgICAgIHY5Owp9IF9fcGFja2VkOwoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfV09XSEQgewoJdWludDMyX3QJCQkJdjE7Cgl1aW50MTZfdAkJCQl2MjsKCXVpbnQxNl90CQkJCXYzOwoJdWludDE2X3QJCQkJdjQ7Cgl1aW50MTZfdAkJCQl2NTsKCXVpbnQxNl90CQkJCXY2OwoJdWludDE2X3QJCQkJdjc7Cgl1aW50MTZfdAkJCQl2ODsKCXVpbnQxNl90CQkJCXZfX19fQTE7Cgl1aW50MzJfdAkJCQl2OTsKCXVpbnQxNl90CQkJCXYxMDsKCXVpbnQxNl90CQkJCXYxMTsKCXVpbnQzMl90CQkJCXYxMlsxNl07Cgl1aW50MzJfdAl2MTNbMTZdOwoJdWludDMyX3QJdjE0WzE2XTsKCXVpbnQzMl90CXYxNVsxNl07Cgl1aW50MzJfdAl2MTY7Cgl1aW50MTZfdAl2MTc7Cgl1aW50MTZfdAl2MTg7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19DU0hQIHsKCXVpbnQzMl90CQl2MTsKCXVpbnQxNl90CQl2MjsKCXVpbnQxNl90CQl2MzsKCXVpbnQxNl90CQl2NDsKCXVpbnQxNl90CQl2NTsKCXVpbnQxNl90CQl2NjsKCXVpbnQxNl90CQl2X19fX0ExOwoJdWludDMyX3QJCXY3OwoJdWludDE2X3QJCXY4OwoJdWludDE2X3QJCXY5OwoJdWludDMyX3QJCXYxMFsxNl07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19IUEYgewoJdWludDMyX3QJCXYxOwoJdWludDMyX3QJCXYyWzI2XTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0FFUSB7Cgl1aW50MzJfdAkJdjE7Cgl1aW50MTZfdAkJdjI7Cgl1aW50MTZfdAkJdjM7Cgl1aW50MTZfdAkJdjQ7Cgl1aW50MTZfdAkJdl9fX19BMTsKCXVpbnQzMl90CXY1Wzc0XTsKCXVpbnQzMl90CXY2Wzc0XTsKCXVpbnQxNl90CXY3WzIwNDhdOwp9IF9fcGFja2VkOwoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfSEwgewoJdWludDE2X3QJCXYxOwoJdWludDE2X3QJCXYyOwoJdWludDE2X3QJCXYzOwoJdWludDE2X3QJCXZfX19fQTE7CglpbnQzMl90CQkJdjQ7Cgl1aW50MzJfdAkJdjU7Cgl1aW50MTZfdAkJdjY7Cgl1aW50MTZfdAkJdl9fX19BMjsKCXVpbnQzMl90CQl2NzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0dFUSB7CglpbnQxNl90CQl2MVsxMF07Cn0gX19wYWNrZWQ7CnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zIHsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0dMT0JBTAlnbG9iYWw7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19XT1dIRAl3b3doZDsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0NTSFAJCWNzaHA7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19IUEYJCWhwZjsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0FFUQkJYWVxOwoJc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfSEwJCWhsOwoJc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfR0VRCQlnZXE7Cn0gX19wYWNrZWQ7Ci8qIFNSUyBUcnVNZWRpYSBlbmQgKi8KCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FTkFCTEUJCTB4MDAwMTA5MDQKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfU0FfUExVUyAweDEwMDBGRkZGCi8qIERUUyBFYWdsZSAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX0RUU19IUFhfUFJFTUlYIDB4MDAwMTA3N0MKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9EVFNfSFBYX1BPU1RNSVggMHgwMDAxMDc3QgojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9EVFNfSFBYIDB4MDAwMTBERUQKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfSFBYX1BMVVMgIDB4MTAwMTUwMDAKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfSFBYX01BU1RFUiAgMHgxMDAxNTAwMQpzdHJ1Y3QgYXNtX2R0c19lYWdsZV9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZHRzX2VhZ2xlX3BhcmFtX2dldCB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfZ2V0X3BwX3BhcmFtc192MiBwYXJhbTsKfSBfX3BhY2tlZDsKCi8qIE9wY29kZSB0byBzZXQgQlQgYWRkcmVzcyBhbmQgbGljZW5zZSBmb3IgYXB0eCBkZWNvZGVyICovCiNkZWZpbmUgQVBUWF9ERUNPREVSX0JUX0FERFJFU1MgMHgwMDAxMzIwMQojZGVmaW5lIEFQVFhfQ0xBU1NJQ19ERUNfTElDRU5TRV9JRCAweDAwMDEzMjAyCgpzdHJ1Y3QgYXB0eF9kZWNfYnRfYWRkcl9jZmcgewoJdWludDMyX3QgbGFwOwoJdWludDMyX3QgdWFwOwoJdWludDMyX3QgbmFwOwp9IF9fcGFja2VkOwoKc3RydWN0IGFwdHhfZGVjX2J0X2Rldl9hZGRyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhcHR4X2RlY19idF9hZGRyX2NmZyBidF9hZGRyX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYXB0eF9kZWNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoJdTMyICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogNDQxMDAgYW5kIDQ4MDAwIEh6CiAqLwp9IF9fcGFja2VkOwoKLyogUTZDb3JlIFNwZWNpZmljICovCiNkZWZpbmUgQVZDU19DTURfR0VUX0ZXS19WRVJTSU9OICgweDAwMDEyOTJDKQojZGVmaW5lIEFWQ1NfQ01EUlNQX0dFVF9GV0tfVkVSU0lPTiAoMHgwMDAxMjkyRCkKCiNkZWZpbmUgQVZDU19TRVJWSUNFX0lEX0FMTCAoMHhGRkZGRkZGRikKI2RlZmluZSBBVkNTX1NFUlZJQ0VfSURfQUZFICgweDQpCiNkZWZpbmUgQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9DVlBfVgkoMHhCKQoKc3RydWN0IGF2Y3NfZ2V0X2Z3a192ZXJzaW9uIHsKCS8qCgkgKiBJbmRpY2F0ZXMgdGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIEFWUyBidWlsZC4KCSAqIFRoaXMgdmFsdWUgaXMgaW5jcmVtZW50ZWQgb24gY2hpcHNldCBmYW1pbHkgYm91bmRhcmllcy4KCSAqLwoJdWludDMyX3QgYnVpbGRfbWFqb3JfdmVyc2lvbjsKCgkvKgoJICogTWlub3IgdmVyc2lvbiBvZiB0aGUgQVZTIGJ1aWxkLgoJICogVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBtYWlubGluZSB0byB3aGljaCB0aGUgQVZTIGJ1aWxkIGJlbG9uZ3MuCgkgKi8KCXVpbnQzMl90IGJ1aWxkX21pbm9yX3ZlcnNpb247CgoJLyogSW5kaWNhdGVzIHRoZSBBVlMgYnJhbmNoIHZlcnNpb24gdG8gd2hpY2ggdGhlIGltYWdlIGJlbG9uZ3MuICovCgl1aW50MzJfdCBidWlsZF9icmFuY2hfdmVyc2lvbjsKCgkvKiBJbmRpY2F0ZXMgdGhlIEFWUyBzdWItYnJhbmNoIG9yIGN1c3RvbWVyIHByb2R1Y3QgbGluZSBpbmZvcm1hdGlvbi4gKi8KCXVpbnQzMl90IGJ1aWxkX3N1YmJyYW5jaF92ZXJzaW9uOwoKCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgQVZTIHNlcnZpY2VzIGluIHRoZSBjdXJyZW50IGJ1aWxkLiAqLwoJdWludDMyX3QgbnVtX3NlcnZpY2VzOwp9OwoKc3RydWN0IGF2c19zdmNfYXBpX2luZm8gewoJLyoKCSAqIEFQUlYyIHNlcnZpY2UgSURzIGZvciB0aGUgaW5kaXZpZHVhbCBzdGF0aWMgc2VydmljZXMuCgkgKgoJICoJIEB2YWx1ZXMKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQ09SRV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FGRV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FTTV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FETV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX01WTV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0NWU19WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0NWUF9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0xTTV9WCgkgKi8KCXVpbnQzMl90IHNlcnZpY2VfaWQ7CgoJLyoKCSAqIEluZGljYXRlcyB0aGUgQVBJIHZlcnNpb24gb2YgdGhlIHNlcnZpY2UuCgkgKgoJICogRWFjaCBuZXcgQVBJIHVwZGF0ZSB0aGF0IHdhcnJhbnRzIGEgY2hhbmdlIG9uIHRoZSBITE9TIHNpZGUgdHJpZ2dlcnMKCSAqIGFuIGluY3JlbWVudCBpbiB0aGUgdmVyc2lvbi4KCSAqLwoJdWludDMyX3QgYXBpX3ZlcnNpb247CgoJLyoKCSAqIEluZGljYXRlcyB0aGUgQVBJIGluY3JlbWVudHMgb24gYSBzdWItYnJhbmNoIChub3Qgb24gdGhlIG1haW5saW5lKS4KCSAqCgkgKiBBUEkgYnJhbmNoIHZlcnNpb24gbnVtYmVycyBjYW4gaW5jcmVtZW50IGluZGVwZW5kZW50bHkgb24gZGlmZmVyZW50CgkgKiBzdWItYnJhbmNoZXMuCgkgKi8KCXVpbnQzMl90IGFwaV9icmFuY2hfdmVyc2lvbjsKfTsKCnN0cnVjdCBhdmNzX2Z3a192ZXJfaW5mbyB7CglzdHJ1Y3QgYXZjc19nZXRfZndrX3ZlcnNpb24gYXZjc19md2tfdmVyc2lvbjsKCXN0cnVjdCBhdnNfc3ZjX2FwaV9pbmZvIHNlcnZpY2VzWzBdOwp9IF9fcGFja2VkOwoKLyogTFNNIFNwZWNpZmljICovCiNkZWZpbmUgVldfRkVBVF9ESU0JCQkJCSgzOSkKCiNkZWZpbmUgQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9BU01fVgkJCSgweDcpCiNkZWZpbmUgQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9BRE1fVgkJCSgweDgpCiNkZWZpbmUgQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9MU01fVgkJCSgweEQpCiNkZWZpbmUgQVBSVjJfSURTX0RPTUFJTl9JRF9BRFNQX1YJCQkoMHg0KQojZGVmaW5lIEFQUlYyX0lEU19ET01BSU5fSURfQVBQU19WCQkJKDB4NSkKCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMJCSgweDAwMDEyQTdGKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRFJTUF9TSEFSRURfTUVNX01BUF9SRUdJT05TCSgweDAwMDEyQTgwKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9TSEFSRURfTUVNX1VOTUFQX1JFR0lPTlMJKDB4MDAwMTJBODEpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX09QRU5fVFgJCQkJKDB4MDAwMTJBODIpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX0NMT1NFX1RYCQkJKDB4MDAwMTJBODgpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1NFVF9QQVJBTVMJCQkoMHgwMDAxMkE4MykKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfU0VUX1BBUkFNU19WMgkJCSgweDAwMDEyQThGKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9SRUdJU1RFUl9TT1VORF9NT0RFTAkJKDB4MDAwMTJBODQpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX0RFUkVHSVNURVJfU09VTkRfTU9ERUwJCSgweDAwMDEyQTg1KQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9TVEFSVAkJCQkoMHgwMDAxMkE4NikKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfU1RPUAkJCQkoMHgwMDAxMkE4NykKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfRU9CCQkJCSgweDAwMDEyQTg5KQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9SRUFECQkJCSgweDAwMDEyQThBKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9PUEVOX1RYX1YyCQkJKDB4MDAwMTJBOEIpCiNkZWZpbmUgTFNNX0NNRF9BRERfVE9QT0xPR0lFUwkJCQkoMHgwMDAxMkE4QykKCiNkZWZpbmUgTFNNX1NFU1NJT05fRVZFTlRfREVURUNUSU9OX1NUQVRVUwkJKDB4MDAwMTJCMDApCiNkZWZpbmUgTFNNX1NFU1NJT05fRVZFTlRfREVURUNUSU9OX1NUQVRVU19WMgkJKDB4MDAwMTJCMDEpCiNkZWZpbmUgTFNNX0RBVEFfRVZFTlRfUkVBRF9ET05FCQkJKDB4MDAwMTJCMDIpCiNkZWZpbmUgTFNNX0RBVEFfRVZFTlRfU1RBVFVTCQkJCSgweDAwMDEyQjAzKQojZGVmaW5lIExTTV9TRVNTSU9OX0VWRU5UX0RFVEVDVElPTl9TVEFUVVNfVjMJCSgweDAwMDEyQjA0KQoKI2RlZmluZSBMU01fTU9EVUxFX0lEX1ZPSUNFX1dBS0VVUAkJCSgweDAwMDEyQzAwKQojZGVmaW5lIExTTV9QQVJBTV9JRF9FTkRQT0lOVF9ERVRFQ1RfVEhSRVNIT0xECQkoMHgwMDAxMkMwMSkKI2RlZmluZSBMU01fUEFSQU1fSURfT1BFUkFUSU9OX01PREUJCQkoMHgwMDAxMkMwMikKI2RlZmluZSBMU01fUEFSQU1fSURfR0FJTgkJCQkoMHgwMDAxMkMwMykKI2RlZmluZSBMU01fUEFSQU1fSURfQ09OTkVDVF9UT19QT1JUCQkJKDB4MDAwMTJDMDQpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0ZFQVRVUkVfQ09NUEVOU0FUSU9OX0RBVEEJCSgweDAwMDEyQzA3KQojZGVmaW5lIExTTV9QQVJBTV9JRF9NSU5fQ09ORklERU5DRV9MRVZFTFMJCSgweDAwMDEyQzA3KQojZGVmaW5lIExTTV9NT0RVTEVfSURfTEFCCQkJCSgweDAwMDEyQzA4KQojZGVmaW5lIExTTV9QQVJBTV9JRF9MQUJfRU5BQkxFCQkJCSgweDAwMDEyQzA5KQojZGVmaW5lIExTTV9QQVJBTV9JRF9MQUJfQ09ORklHCQkJCSgweDAwMDEyQzBBKQojZGVmaW5lIExTTV9NT0RVTEVfSURfRlJBTUVXT1JLCQkJCSgweDAwMDEyQzBFKQojZGVmaW5lIExTTV9QQVJBTV9JRF9TV01BRF9DRkcJCQkJKDB4MDAwMTJDMTgpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX1NXTUFEX01PREVMCQkJKDB4MDAwMTJDMTkpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX1NXTUFEX0VOQUJMRQkJCSgweDAwMDEyQzFBKQojZGVmaW5lIExTTV9QQVJBTV9JRF9QT0xMSU5HX0VOQUJMRQkJCSgweDAwMDEyQzFCKQojZGVmaW5lIExTTV9QQVJBTV9JRF9NRURJQV9GTVQJCQkJKDB4MDAwMTJDMUUpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0ZXS19NT0RFX0NPTkZJRwkJCSgweDAwMDEyQzI3KQoKLyogSFcgTUFEIHNwZWNpZmljICovCiNkZWZpbmUgQUZFX01PRFVMRV9IV19NQUQJCQkJKDB4MDAwMTAyMzApCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0hXX01BRF9DRkcJCQkJKDB4MDAwMTAyMzEpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0hXX01BRF9DVFJMCQkJKDB4MDAwMTAyMzIpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NMSU1CVVNfU0xBVkVfUE9SVF9DRkcJCSgweDAwMDEwMjMzKQoKLyogU1cgTUFEIHNwZWNpZmljICovCiNkZWZpbmUgQUZFX01PRFVMRV9TV19NQUQJCQkJKDB4MDAwMTAyMkQpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NXX01BRF9DRkcJCQkJKDB4MDAwMTAyMkUpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NWTV9NT0RFTAkJCQkoMHgwMDAxMDIyRikKCi8qIENvbW1hbmRzL1BhcmFtcyB0byBwYXNzIHRoZSBjb2RlYy9zbGltYnVzIGRhdGEgdG8gRFNQICovCiNkZWZpbmUgQUZFX1NWQ19DTURfU0VUX1BBUkFNCQkJCSgweDAwMDEwMGYzKQojZGVmaW5lIEFGRV9NT0RVTEVfQ0RDX0RFVl9DRkcJCQkJKDB4MDAwMTAyMzQpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19TTElNQlVTX1NMQVZFX0NGRwkJKDB4MDAwMTAyMzUpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19SRUdfQ0ZHCQkJKDB4MDAwMTAyMzYpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19SRUdfQ0ZHX0lOSVQJCQkoMHgwMDAxMDIzNykKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0RDX1JFR19QQUdFX0NGRyAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDI5NikKCiNkZWZpbmUgQUZFX01BWF9DRENfUkVHSVNURVJTX1RPX0NPTkZJRwkJCSgyMCkKCi8qIEFBTkMgUG9ydCBDb25maWcgU3BlY2lmaWMgKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfQUFOQ19QT1JUX0NPTkZJRwkJCSgweDAwMDEwMjE1KQojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9BQU5DX1BPUlRfQ09ORklHCQkoMHgxKQojZGVmaW5lIEFBTkNfVFhfTUlDX1VOVVNFRAkJCQkoMCkKI2RlZmluZSBBQU5DX1RYX1ZPSUNFX01JQwkJCQkoMSkKI2RlZmluZSBBQU5DX1RYX0VSUk9SX01JQwkJCQkoMikKI2RlZmluZSBBQU5DX1RYX05PSVNFX01JQwkJCQkoMykKI2RlZmluZSBBRkVfUE9SVF9NQVhfQ0hBTk5FTF9DTlQJCQkoOCkKI2RlZmluZSBBRkVfTU9EVUxFX0FBTkMJCQkJCSgweDAwMDEwMjE0KQojZGVmaW5lIEFGRV9QQVJBTV9JRF9DRENfQUFOQ19WRVJTSU9OCQkJKDB4MDAwMTAyM0EpCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0NEQ19BQU5DX1ZFUlNJT04JCSgweDEpCiNkZWZpbmUgQUFOQ19IV19CTE9DS19WRVJTSU9OXzEJCQkJKDEpCiNkZWZpbmUgQUFOQ19IV19CTE9DS19WRVJTSU9OXzIJCQkJKDIpCgovKkNsaXAgYmFuayBzZWxlY3Rpb24qLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9DTElQX0JBTktfU0VMX0NGRyAweDEKI2RlZmluZSBBRkVfQ0xJUF9NQVhfQkFOS1MJCTQKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0xJUF9CQU5LX1NFTF9DRkcgMHgwMDAxMDI0MgoKc3RydWN0IGFmZV9wYXJhbV9hYW5jX3BvcnRfY2ZnIHsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSdzCgkgKiBzb3VyY2UgcG9ydCBjb25maWd1cmF0aW9uLgoJICovCgl1aW50MzJfdCBhYW5jX3BvcnRfY2ZnX21pbm9yX3ZlcnNpb247CgoJLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIFR4IHBvcnQuIDhrIC0gMTkyayovCgl1aW50MzJfdCB0eF9wb3J0X3NhbXBsZV9yYXRlOwoKCS8qIENoYW5uZWwgbWFwcGluZyBmb3IgdGhlIFR4IHBvcnQgc2lnbmFsIGNhcnJ5aW5nIE5vaXNlIChYKSwKCSAqIEVycm9yIChFKSwgYW5kIFZvaWNlIChWKSBzaWduYWxzLgoJICovCgl1aW50OF90IHR4X3BvcnRfY2hhbm5lbF9tYXBbQUZFX1BPUlRfTUFYX0NIQU5ORUxfQ05UXTsKCgkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgb24gdGhlIHNvdXJjZSBUeCBwb3J0LiAqLwoJdWludDE2X3QgdHhfcG9ydF9udW1fY2hhbm5lbHM7CgoJLyogUG9ydCBJRCBvZiB0aGUgUnggcGF0aCByZWZlcmVuY2Ugc2lnbmFsLiAqLwoJdWludDE2X3QgcnhfcGF0aF9yZWZfcG9ydF9pZDsKCgkvKiBTYW1wbGluZyByYXRlIG9mIHRoZSByZWZlcmVuY2UgcG9ydC4gOGsgLSAxOTJrKi8KCXVpbnQzMl90IHJlZl9wb3J0X3NhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF9jZGNfYWFuY192ZXJzaW9uIHsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSdzCgkgKiBodyB2ZXJzaW9uCgkgKi8KCXVpbnQzMl90IGNkY19hYW5jX21pbm9yX3ZlcnNpb247CgoJLyogSFcgdmVyc2lvbi4gKi8KCXVpbnQzMl90IGFhbmNfaHdfdmVyc2lvbjsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faWRfY2xpcF9iYW5rX3NlbCB7CgkvKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUncwoJICogaHcgdmVyc2lvbgoJICovCgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoKCS8qIE51bWJlciBvZiBiYW5rcyB0byBiZSByZWFkICovCgl1aW50MzJfdCBudW1fYmFua3M7CgoJdWludDMyX3QgYmFua19tYXBbQUZFX0NMSVBfTUFYX0JBTktTXTsKfSBfX3BhY2tlZDsKCi8qIEVSUk9SIENPREVTICovCi8qIFN1Y2Nlc3MuIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHdpdGggbm8gZXJyb3JzLiAqLwojZGVmaW5lIEFEU1BfRU9LICAgICAgICAgIDB4MDAwMDAwMDAKLyogR2VuZXJhbCBmYWlsdXJlLiAqLwojZGVmaW5lIEFEU1BfRUZBSUxFRCAgICAgIDB4MDAwMDAwMDEKLyogQmFkIG9wZXJhdGlvbiBwYXJhbWV0ZXIuICovCiNkZWZpbmUgQURTUF9FQkFEUEFSQU0gICAgMHgwMDAwMDAwMgovKiBVbnN1cHBvcnRlZCByb3V0aW5lIG9yIG9wZXJhdGlvbi4gKi8KI2RlZmluZSBBRFNQX0VVTlNVUFBPUlRFRCAweDAwMDAwMDAzCi8qIFVuc3VwcG9ydGVkIHZlcnNpb24uICovCiNkZWZpbmUgQURTUF9FVkVSU0lPTiAgICAgMHgwMDAwMDAwNAovKiBVbmV4cGVjdGVkIHByb2JsZW0gZW5jb3VudGVyZWQuICovCiNkZWZpbmUgQURTUF9FVU5FWFBFQ1RFRCAgMHgwMDAwMDAwNQovKiBVbmhhbmRsZWQgcHJvYmxlbSBvY2N1cnJlZC4gKi8KI2RlZmluZSBBRFNQX0VQQU5JQyAgICAgICAweDAwMDAwMDA2Ci8qIFVuYWJsZSB0byBhbGxvY2F0ZSByZXNvdXJjZS4gKi8KI2RlZmluZSBBRFNQX0VOT1JFU09VUkNFICAweDAwMDAwMDA3Ci8qIEludmFsaWQgaGFuZGxlLiAqLwojZGVmaW5lIEFEU1BfRUhBTkRMRSAgICAgIDB4MDAwMDAwMDgKLyogT3BlcmF0aW9uIGlzIGFscmVhZHkgcHJvY2Vzc2VkLiAqLwojZGVmaW5lIEFEU1BfRUFMUkVBRFkgICAgIDB4MDAwMDAwMDkKLyogT3BlcmF0aW9uIGlzIG5vdCByZWFkeSB0byBiZSBwcm9jZXNzZWQuICovCiNkZWZpbmUgQURTUF9FTk9UUkVBRFkgICAgMHgwMDAwMDAwQQovKiBPcGVyYXRpb24gaXMgcGVuZGluZyBjb21wbGV0aW9uLiAqLwojZGVmaW5lIEFEU1BfRVBFTkRJTkcgICAgIDB4MDAwMDAwMEIKLyogT3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBhY2NlcHRlZCBvciBwcm9jZXNzZWQuICovCiNkZWZpbmUgQURTUF9FQlVTWSAgICAgICAgMHgwMDAwMDAwQwovKiBPcGVyYXRpb24gYWJvcnRlZCBkdWUgdG8gYW4gZXJyb3IuICovCiNkZWZpbmUgQURTUF9FQUJPUlRFRCAgICAgMHgwMDAwMDAwRAovKiBPcGVyYXRpb24gcHJlZW1wdGVkIGJ5IGEgaGlnaGVyIHByaW9yaXR5LiAqLwojZGVmaW5lIEFEU1BfRVBSRUVNUFRFRCAgIDB4MDAwMDAwMEUKLyogT3BlcmF0aW9uIHJlcXVlc3RzIGludGVydmVudGlvbiB0byBjb21wbGV0ZS4gKi8KI2RlZmluZSBBRFNQX0VDT05USU5VRSAgICAweDAwMDAwMDBGCi8qIE9wZXJhdGlvbiByZXF1ZXN0cyBpbW1lZGlhdGUgaW50ZXJ2ZW50aW9uIHRvIGNvbXBsZXRlLiAqLwojZGVmaW5lIEFEU1BfRUlNTUVESUFURSAgIDB4MDAwMDAwMTAKLyogT3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4gKi8KI2RlZmluZSBBRFNQX0VOT1RJTVBMICAgICAweDAwMDAwMDExCi8qIE9wZXJhdGlvbiBuZWVkcyBtb3JlIGRhdGEgb3IgcmVzb3VyY2VzLiAqLwojZGVmaW5lIEFEU1BfRU5FRURNT1JFICAgIDB4MDAwMDAwMTIKLyogT3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgbWVtb3J5LiAqLwojZGVmaW5lIEFEU1BfRU5PTUVNT1JZICAgIDB4MDAwMDAwMTQKLyogSXRlbSBkb2VzIG5vdCBleGlzdC4gKi8KI2RlZmluZSBBRFNQX0VOT1RFWElTVCAgICAweDAwMDAwMDE1Ci8qIE1heCBjb3VudCBmb3IgYWRzcCBlcnJvciBjb2RlIHNlbnQgdG8gSExPUyovCiNkZWZpbmUgQURTUF9FUlJfTUFYICAgICAgKEFEU1BfRU5PVEVYSVNUICsgMSkKLyogT3BlcmF0aW9uIGlzIGZpbmlzaGVkLiAqLwojZGVmaW5lIEFEU1BfRVRFUk1JTkFURUQgICAgMHgwMDAxMTE3NAoKLypiaGFyYXRoLCBhZHNwX2Vycm9yX2NvZGVzLmggKi8KCi8qIExQQVNTIGNsb2NrIGZvciBJMlMgSW50ZXJmYWNlICovCgovKiBTdXBwb3J0ZWQgT1NSIGNsb2NrIHZhbHVlcyAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfMTJfUDI4OF9NSFoJCTB4QkI4MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18xMV9QMjg5Nl9NSFoJCTB4QUM0NDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS185X1A2MDBfTUhaCQkweDkyN0MwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfOF9QMTkyX01IWgkJMHg3RDAwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzZfUDE0NF9NSFoJCTB4NURDMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS180X1AwOTZfTUhaCQkweDNFODAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfM19QMDcyX01IWgkJMHgyRUUwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzJfUDA0OF9NSFoJCTB4MUY0MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18xX1A1MzZfTUhaCQkweDE3NzAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfMV9QMDI0X01IWgkJIDB4RkEwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzc2OF9rSFoJCSAweEJCODAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS181MTJfa0haCQkgMHg3RDAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfRElTQUJMRQkJICAgICAweDAKCi8qIFN1cHBvcnRlZCBCaXQgY2xvY2sgdmFsdWVzICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfMTJfUDI4OF9NSFoJMHhCQjgwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xMV9QMjg5Nl9NSFoJMHhBQzQ0MDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS184X1AxOTJfTUhaCQkweDdEMDAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzZfUDE0NF9NSFoJCTB4NURDMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfNF9QMDk2X01IWgkJMHgzRTgwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18zX1AwNzJfTUhaCQkweDJFRTAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzJfUDgyMjRfTUhaCQkweDJiMTEwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzJfUDA0OF9NSFoJCTB4MUY0MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfMV9QNTM2X01IWgkJMHgxNzcwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xX1A0MTEyX01IWgkJMHgxNTg4ODAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xX1AwMjRfTUhaCQkgMHhGQTAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzc2OF9LSFoJCSAweEJCODAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfNTEyX0tIWgkJIDB4N0QwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18yNTZfS0haCQkgMHgzRTgwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLX0RJU0FCTEUJCSAgICAgMHgwCgovKiBTdXBwb3J0ZWQgTFBBU1MgQ0xLIHNvdXJjZXMgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfU1JDX0VYVEVSTkFMIDAKI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfU1JDX0lOVEVSTkFMIDEKCi8qIFN1cHBvcnRlZCBMUEFTUyBDTEsgcm9vdCovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX1JPT1RfREVGQVVMVCAwCgplbnVtIGFmZV9scGFzc19jbGtfbW9kZSB7CglRNkFGRV9MUEFTU19NT0RFX0JPVEhfSU5WQUxJRCwKCVE2QUZFX0xQQVNTX01PREVfQ0xLMV9WQUxJRCwKCVE2QUZFX0xQQVNTX01PREVfQ0xLMl9WQUxJRCwKCVE2QUZFX0xQQVNTX01PREVfQk9USF9WQUxJRCwKfSBfX3BhY2tlZDsKCi8qIENsb2NrIElEIEVudW1lcmF0aW9uIERlZmluZS4gKi8KLyogQ2xvY2sgSUQgZm9yIFByaW1hcnkgSTJTIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKLyogQ2xvY2sgSUQgZm9yIFByaW1hcnkgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX01JMlNfRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDEKLyogQ2xvY2sgSUQgZm9yIFNlY29uZGFyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TRUNfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMgovKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19NSTJTX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAzCi8qIENsb2NrIElEIGZvciBUZXJ0aWFyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwNAovKiBDbG9jayBJRCBmb3IgVGVydGlhcnkgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfVEVSX01JMlNfRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDUKLyogQ2xvY2sgSUQgZm9yIFF1YXJ0bmVyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUFEX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwNgovKiBDbG9jayBJRCBmb3IgUXVhcnRuZXJ5IEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfTUkyU19FQklUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA3Ci8qIENsb2NrIElEIGZvciBTcGVha2VyIEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NQRUFLRVJfSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTA4Ci8qIENsb2NrIElEIGZvciBTcGVha2VyIEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NQRUFLRVJfSTJTX0VCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTA5Ci8qIENsb2NrIElEIGZvciBTcGVha2VyIEkyUyBPU1IgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU1BFQUtFUl9JMlNfT1NSICAgICAgICAgICAgICAgICAgICAgICAgMHgxMEEKCi8qIENsb2NrIElEIGZvciBRVUlOQVJZICBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlfTUkyU19JQklUCQkJMHgxMEIKLyogQ2xvY2sgSUQgZm9yIFFVSU5BUlkgIEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSV9NSTJTX0VCSVQJCQkweDEwQwovKiBDbG9jayBJRCBmb3IgU0VOQVJZICBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TRU5fTUkyU19JQklUCQkJMHgxMEQKLyogQ2xvY2sgSUQgZm9yIFNFTkFSWSAgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VOX01JMlNfRUJJVAkJCTB4MTBFCi8qIENsb2NrIElEIGZvciBJTlQwIEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQwX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMEYKLyogQ2xvY2sgSUQgZm9yIElOVDEgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDFfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDExMAovKiBDbG9jayBJRCBmb3IgSU5UMiBJMlMgSUJJVCAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UMl9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTExCi8qIENsb2NrIElEIGZvciBJTlQzIEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQzX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMTIKLyogQ2xvY2sgSUQgZm9yIElOVDQgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDRfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDExMwovKiBDbG9jayBJRCBmb3IgSU5UNSBJMlMgSUJJVCAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UNV9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTE0Ci8qIENsb2NrIElEIGZvciBJTlQ2IEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQ2X01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMTUKCi8qIENsb2NrIElEIGZvciBRVUlOQVJZIE1JMlMgT1NSIENMSyAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJX01JMlNfT1NSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE2CgovKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBQQ00gSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfUENNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMAovKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBQQ00gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMQovKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyCi8qIENsb2NrIElEIGZvciBTZWNvbmRhcnkgUENNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VDX1BDTV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDMKLyogQ2xvY2sgSUQgZm9yIFRlcnRpYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1RFUl9QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0Ci8qIENsb2NrIElEIGZvciBUZXJ0aWFyeSBQQ00gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNQovKiBDbG9jayBJRCBmb3IgUXVhcnRlcnkgUENNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDYKLyogQ2xvY2sgSUQgZm9yIFF1YXJ0ZXJ5IFBDTSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA3Ci8qIENsb2NrIElEIGZvciBRdWluYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fUENNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4Ci8qIENsb2NrIElEIGZvciBRdWluYXJ5IFBDTSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA5Ci8qIENsb2NrIElEIGZvciBRVUlOQVJZIFBDTSBPU1IgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSV9QQ01fT1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBBCgovKiogQ2xvY2sgSUQgZm9yIFByaW1hcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX1RETV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAKLyoqIENsb2NrIElEIGZvciBQcmltYXJ5IFRETSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1BSSV9URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCi8qKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IFRETSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19URE1fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyCi8qKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IFRETSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAzCi8qKiBDbG9jayBJRCBmb3IgVGVydGlhcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfVEVSX1RETV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDQKLyoqIENsb2NrIElEIGZvciBUZXJ0aWFyeSBURE0gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfVERNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNQovKiogQ2xvY2sgSUQgZm9yIFF1YXJ0ZXJ5IFRETSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfVERNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA2Ci8qKiBDbG9jayBJRCBmb3IgUXVhcnRlcnkgVERNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDcKLyoqIENsb2NrIElEIGZvciBRdWluYXJ5IFRETSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fVERNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4Ci8qKiBDbG9jayBJRCBmb3IgUXVpbmFyeSBURE0gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlOX1RETV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwOQovKiogQ2xvY2sgSUQgZm9yIFF1aW5hcnkgVERNIE9TUiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlOX1RETV9PU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwQQoKLyogQ2xvY2sgSUQgZm9yIE1DTEsxICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX01DTEtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwCi8qIENsb2NrIElEIGZvciBNQ0xLMiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9NQ0xLXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMQovKiBDbG9jayBJRCBmb3IgTUNMSzMgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfTUNMS18zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDIKLyogQ2xvY2sgSUQgZm9yIE1DTEs0ICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX01DTEtfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0Ci8qIENsb2NrIElEIGZvciBJbnRlcm5hbCBEaWdpdGFsIENvZGVjIENvcmUgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5URVJOQUxfRElHSVRBTF9DT0RFQ19DT1JFICAgICAgICAgICAgMHgzMDMKLyogQ2xvY2sgSUQgZm9yIElOVCBNQ0xLMCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlRfTUNMS18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwNQovKiBDbG9jayBJRCBmb3IgSU5UIE1DTEsxICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVF9NQ0xLXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA2Ci8qCiAqIENsb2NrIElEIGZvciBzb3VuZHdpcmUgTlBMLgogKiBUaGlzIGlzIHRoZSBjbG9jayB0byBiZSB1c2VkIHRvIGVuYWJsZSBOUEwgY2xvY2sgZm9yICBpbnRlcm5hbCBTb3VuZHdpcmUuCiAqLwojZGVmaW5lIEFGRV9DTE9DS19TRVRfQ0xPQ0tfSURfU1dSX05QTF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDcKCi8qIENsb2NrIElEIGZvciBBSEIgSERNSSBpbnB1dCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9BSEJfSERNSV9JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMAoKLyogQ2xvY2sgSUQgZm9yIFNQRElGIGNvcmUgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU1BESUZfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDAKCgovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGludmFsaWQgdXNlIChyZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UpICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9JTlZBTElECQkweDAKLyogQ2xvY2sgYXR0cmlidXRlIGZvciBubyBjb3VwbGUgY2FzZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX05PCQkweDEKLyogQ2xvY2sgYXR0cmlidXRlIGZvciBkaXZpZGVuZCBjb3VwbGUgY2FzZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX0RJVklERU5ECTB4MgovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGRpdmlzb3IgY291cGxlIGNhc2UgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0NPVVBMRV9ESVZJU09SCTB4MwovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGludmVydCBhbmQgbm8gY291cGxlIGNhc2UgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0lOVkVSVF9DT1VQTEVfTk8JMHg0Ci8qIENsb2NrIHNldCBBUEkgdmVyc2lvbiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19DT05GSUdfQVBJX1ZFUlNJT04JCTB4MQoKc3RydWN0IGFmZV9jbGtfc2V0IHsKCS8qCgkgKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIGNsb2NrIHNldC4KCSAqCUB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9DTE9DS19TRVQKCSAqLwoJdWludDMyX3QgY2xrX3NldF9taW5vcl92ZXJzaW9uOwoKCS8qCgkgKiBDbG9jayBJRAoJICoJQHZhbHVlcwoJICoJLSAweDEwMCB0byAweDEwQSAtIE1TTTg5OTYKCSAqCS0gMHgyMDAgdG8gMHgyMDcgLSBNU004OTk2CgkgKgktIDB4MzAwIHRvIDB4MzAyIC0gTVNNODk5NiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDMyX3QgY2xrX2lkOwoKCS8qCgkgKiBDbG9jayBmcmVxdWVuY3kgIChpbiBIZXJ0eikgdG8gYmUgc2V0LgoJICoJQHZhbHVlcwoJICoJLSA+PSAwIGZvciBjbG9jayBmcmVxdWVuY3kgdG8gc2V0IEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCBjbGtfZnJlcV9pbl9oejsKCgkvKiBVc2UgdG8gc3BlY2lmaWMgZGl2aWRlciBmb3IgdHdvIGNsb2NrcyBpZiBuZWVkZWQuCgkgKglTZXQgdG8gUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfTk8gZm9yIG5vIGRpdmlkZXIKCSAqCXJlbGF0aW9uIGNsb2NrcwoJICoJQHZhbHVlcwoJICoJLSAjUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfTk8KCSAqCS0gI1E2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX0RJVklERU5ECgkgKgktICNRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0NPVVBMRV9ESVZJU09SIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MTZfdCBjbGtfYXR0cmk7CgoJLyoKCSAqIFNwZWNpZmllcyB0aGUgcm9vdCBjbG9jayBzb3VyY2UuCgkgKglDdXJyZW50bHksIG9ubHkgUTZBRkVfTFBBU1NfQ0xLX1JPT1RfREVGQVVMVCBpcyB2YWxpZAoJICoJQHZhbHVlcwoJICoJLSAwIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MTZfdCBjbGtfcm9vdDsKCgkvKgoJICogZm9yIGVuYWJsZSBhbmQgZGlzYWJsZSBjbG9jay4KCSAqCSJjbGtfZnJlcV9pbl9oeiIsICJjbGtfYXR0cmkiLCBhbmQgImNsa19yb290IgoJICoJYXJlIGlnbm9yZWQgaW4gZGlzYWJsZSBjbG9jayBjYXNlLgoJICoJQHZhbHVlc6AKCSAqCS0gMCAtLSBEaXNhYmxlZAoJICoJLSAxIC0tIEVuYWJsZWQgIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCBlbmFibGU7Cn07CgpzdHJ1Y3QgYWZlX2Nsa19jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBJMlMKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fSTJTX0NPTkZJRwogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGkyc19jZmdfbWlub3JfdmVyc2lvbjsKCi8qIGNsayB2YWx1ZSAxIGluIE1Iei4gKi8KCXUzMiAgICAgICAgICAgICAgICAgIGNsa192YWwxOwoKLyogY2xrIHZhbHVlIDIgaW4gTUh6LiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2xrX3ZhbDI7CgovKiBjbGtfc3JjCiAqICNRNkFGRV9MUEFTU19DTEtfU1JDX0VYVEVSTkFMCiAqICNRNkFGRV9MUEFTU19DTEtfU1JDX0lOVEVSTkFMCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNsa19zcmM7CgovKiBjbGtfcm9vdCAtMCBmb3IgZGVmYXVsdCAqLwoJdTE2ICAgICAgICAgICAgICAgICAgY2xrX3Jvb3Q7CgovKiBjbGtfc2V0X21vZGUKICogI1E2QUZFX0xQQVNTX01PREVfQk9USF9JTlZBTElECiAqICNRNkFGRV9MUEFTU19NT0RFX0NMSzFfVkFMSUQKICogI1E2QUZFX0xQQVNTX01PREVfQ0xLMl9WQUxJRAogKiAjUTZBRkVfTFBBU1NfTU9ERV9CT1RIX1ZBTElECiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgY2xrX3NldF9tb2RlOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBJMlMgY2xrICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgSTJTIGNsayAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9MUEFJRl9DTEtfQ09ORklHCTB4MDAwMTAyMzgKI2RlZmluZSBBRkVfTU9EVUxFX0NMT0NLX1NFVAkJMHgwMDAxMDI4RgojZGVmaW5lIEFGRV9QQVJBTV9JRF9DTE9DS19TRVQJCTB4MDAwMTAyOTAKCnN0cnVjdCBhZmVfbHBhc3NfY2xrX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCQkJIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgcGRhdGE7CglzdHJ1Y3QgYWZlX2Nsa19jZmcgY2xrX2NmZzsKfSBfX3BhY2tlZDsKCmVudW0gYWZlX2xwYXNzX2RpZ2l0YWxfY2xrX3NyYyB7CglRNkFGRV9MUEFTU19ESUdJVEFMX1JPT1RfSU5WQUxJRCwKCVE2QUZFX0xQQVNTX0RJR0lUQUxfUk9PVF9QUklfTUkyU19PU1IsCglRNkFGRV9MUEFTU19ESUdJVEFMX1JPT1RfU0VDX01JMlNfT1NSLAoJUTZBRkVfTFBBU1NfRElHSVRBTF9ST09UX1RFUl9NSTJTX09TUiwKCVE2QUZFX0xQQVNTX0RJR0lUQUxfUk9PVF9RVUFEX01JMlNfT1NSLAoJUTZBRkVfTFBBU1NfRElHSVRBTF9ST09UX0NEQ19ST09UX0NMSywKfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgY2xrICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0lOVEVSTkFMX0RJR0lBVExfQ0RDX0NMS19DT05GSUcJMHgwMDAxMDIzOQoKc3RydWN0IGFmZV9kaWdpdGFsX2Nsa19jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBJMlMKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fSTJTX0NPTkZJRwogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGkyc19jZmdfbWlub3JfdmVyc2lvbjsKCi8qIGNsayB2YWx1ZSBpbiBNSHouICovCgl1MzIgICAgICAgICAgICAgICAgICBjbGtfdmFsOwoKLyoJSU5WQUxJRAogKglQUklfTUkyU19PU1IKICoJU0VDX01JMlNfT1NSCiAqCVRFUl9NSTJTX09TUgogKglRVUFEX01JMlNfT1NSCiAqCURJR1RfQ0RDX1JPT1QKICovCgl1MTYgICAgICAgICAgICAgICAgICBjbGtfcm9vdDsKCi8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwp9IF9fcGFja2VkOwoKCnN0cnVjdCBhZmVfbHBhc3NfZGlnaXRhbF9jbGtfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIJCQkgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXN0cnVjdCBhZmVfZGlnaXRhbF9jbGtfY2ZnIGNsa19jZmc7Cn0gX19wYWNrZWQ7CgovKgogKiBPcGNvZGUgZm9yIEFGRSB0byBzdGFydCBEVE1GLgogKi8KI2RlZmluZSBBRkVfUE9SVFNfQ01EX0RUTUZfQ1RMCTB4MDAwMTAxMDIKCi8qKiBEVE1GIHBheWxvYWQuKi8Kc3RydWN0IGFmZV9kdG1mX2dlbmVyYXRpb25fY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CgoJLyoKCSAqIER1cmF0aW9uIG9mIHRoZSBEVE1GIHRvbmUgaW4gbXMuCgkgKiAtMSAgICAgIC0+IGNvbnRpbnVvdXMsCgkgKiAgMCAgICAgIC0+IGRpc2FibGUKCSAqLwoJaW50NjRfdCAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9pbl9tczsKCgkvKgoJICogVGhlIERUTUYgaGlnaCB0b25lIGZyZXF1ZW5jeS4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBoaWdoX2ZyZXE7CgoJLyoKCSAqIFRoZSBEVE1GIGxvdyB0b25lIGZyZXF1ZW5jeS4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBsb3dfZnJlcTsKCgkvKgoJICogVGhlIERUTUYgdm9sdW1lIHNldHRpbmcKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBnYWluOwoKCS8qCgkgKiBUaGUgbnVtYmVyIG9mIHBvcnRzIHRvIGVuYWJsZS9kaXNhYmxlIG9uLgoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIG51bV9wb3J0czsKCgkvKgoJICogVGhlIERlc3RpbmF0aW9uIHBvcnRzIC0gYXJyYXkgIC4KCSAqIEZvciBEVE1GIG9uIG11bHRpcGxlIHBvcnRzLCBwb3J0SWRzIG5lZWRzIHRvCgkgKiBiZSBwb3B1bGF0ZWQgbnVtUG9ydHMgdGltZXMuCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcG9ydF9pZHM7CgoJLyoKCSAqIHZhcmlhYmxlIGZvciAzMiBiaXQgYWxpZ25tZW50IG9mIEFQUiBwYWNrZXQuCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgplbnVtIGFmZV9jb25maWdfdHlwZSB7CglBRkVfU0xJTUJVU19TTEFWRV9QT1JUX0NPTkZJRywKCUFGRV9TTElNQlVTX1NMQVZFX0NPTkZJRywKCUFGRV9DRENfUkVHSVNURVJTX0NPTkZJRywKCUFGRV9BQU5DX1ZFUlNJT04sCglBRkVfQ0RDX0NMSVBfUkVHSVNURVJTX0NPTkZJRywKCUFGRV9DTElQX0JBTktfU0VMLAoJQUZFX0NEQ19SRUdJU1RFUl9QQUdFX0NPTkZJRywKCUFGRV9NQVhfQ09ORklHX1RZUEVTLAp9OwoKc3RydWN0IGFmZV9wYXJhbV9zbGltYnVzX3NsYXZlX3BvcnRfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MTZfdCBzbGltYnVzX2Rldl9pZDsKCXVpbnQxNl90IHNsYXZlX2Rldl9wZ2RfbGE7Cgl1aW50MTZfdCBzbGF2ZV9kZXZfaW50ZmRldl9sYTsKCXVpbnQxNl90IGJpdF93aWR0aDsKCXVpbnQxNl90IGRhdGFfZm9ybWF0OwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoJdWludDE2X3Qgc2xhdmVfcG9ydF9tYXBwaW5nW0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVF07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19zbGltYnVzX3NsYXZlX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3QgZGV2aWNlX2VudW1fYWRkcl9sc3c7Cgl1aW50MzJfdCBkZXZpY2VfZW51bV9hZGRyX21zdzsKCXVpbnQxNl90IHR4X3NsYXZlX3BvcnRfb2Zmc2V0OwoJdWludDE2X3Qgcnhfc2xhdmVfcG9ydF9vZmZzZXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCByZWdfbG9naWNhbF9hZGRyOwoJdWludDMyX3QgcmVnX2ZpZWxkX3R5cGU7Cgl1aW50MzJfdCByZWdfZmllbGRfYml0X21hc2s7Cgl1aW50MTZfdCByZWdfYml0X3dpZHRoOwoJdWludDE2X3QgcmVnX29mZnNldF9zY2FsZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0NEQ19SRUdfUEFHRV9DRkcgICAxCgplbnVtIHsKCUFGRV9DRENfUkVHX1BBR0VfQVNTSUdOX1BST0NfSURfMCA9IDAsCglBRkVfQ0RDX1JFR19QQUdFX0FTU0lHTl9QUk9DX0lEXzEsCglBRkVfQ0RDX1JFR19QQUdFX0FTU0lHTl9QUk9DX0lEXzIsCglBRkVfQ0RDX1JFR19QQUdFX0FTU0lHTl9QUk9DX0lEXzMsCn07CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfcGFnZV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IGVuYWJsZTsKCXVpbnQzMl90IHByb2NfaWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfY2ZnX2RhdGEgewoJdWludDMyX3QgbnVtX3JlZ2lzdGVyczsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmcgKnJlZ19kYXRhOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSB7Cgl1aW50MzJfdCBwYXlsb2FkX3NpemU7Cgl1aW50MzJfdCBwYXlsb2FkX2FkZHJlc3NfbHN3OwoJdWludDMyX3QgcGF5bG9hZF9hZGRyZXNzX21zdzsKCXVpbnQzMl90IG1lbV9tYXBfaGFuZGxlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfcGFyYW1fZGF0YSB7Cgl1aW50MzJfdCBtb2R1bGVfaWQ7Cgl1aW50MzJfdCBwYXJhbV9pZDsKCXVpbnQxNl90IHBhcmFtX3NpemU7Cgl1aW50MTZfdCByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faHdfbWFkX2N0cmwgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQxNl90IG1hZF90eXBlOwoJdWludDE2X3QgbWFkX2VuYWJsZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfY21kX2h3X21hZF9jdHJsIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2h3X21hZF9jdHJsIHBheWxvYWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2NtZF9od19tYWRfc2xpbWJ1c19zbGF2ZV9wb3J0X2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9zbGltYnVzX3NsYXZlX3BvcnRfY2ZnIHNiX3BvcnRfY2ZnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9jbWRfc3dfbWFkX2VuYWJsZSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9jZGNfcmVnX2NmZ19wYXlsb2FkIHsKCXN0cnVjdCBhZmVfc3ZjX3BhcmFtX2RhdGEgICAgIGNvbW1vbjsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmcgIHJlZ19jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xwYXNzX2Nsa19jb25maWdfY29tbWFuZF92MiB7CglzdHJ1Y3QgYXByX2hkcgkJCWhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0JcGFyYW07CglzdHJ1Y3QgYWZlX3N2Y19wYXJhbV9kYXRhCXBkYXRhOwoJc3RydWN0IGFmZV9jbGtfc2V0CQljbGtfY2ZnOwp9IF9fcGFja2VkOwoKLyoKICogcmVnX2RhdGEncyBzaXplIGNhbiBiZSB1cCB0byBBRkVfTUFYX0NEQ19SRUdJU1RFUlNfVE9fQ09ORklHCiAqLwpzdHJ1Y3QgYWZlX3N2Y19jbWRfY2RjX3JlZ19jZmcgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSBwYXJhbTsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmdfcGF5bG9hZCByZWdfZGF0YVswXTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3ZjX2NtZF9pbml0X2NkY19yZWdfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBpbml0Owp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfY21kX3NiX3NsYXZlX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X3BhcmFtIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2NkY19zbGltYnVzX3NsYXZlX2NmZyBzYl9zbGF2ZV9jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N2Y19jbWRfY2RjX3JlZ19wYWdlX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X3BhcmFtIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfcGFnZV9jZmcgY2RjX3JlZ19wYWdlX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3ZjX2NtZF9jZGNfYWFuY192ZXJzaW9uIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfY2RjX2FhbmNfdmVyc2lvbiB2ZXJzaW9uOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfYWFuY19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJdW5pb24gewoJCXN0cnVjdCBhZmVfcGFyYW1fYWFuY19wb3J0X2NmZyBhYW5jX3BvcnRfY2ZnOwoJCXN0cnVjdCBhZmVfbW9kX2VuYWJsZV9wYXJhbSAgICBtb2RfZW5hYmxlOwoJfSBfX3BhY2tlZCBkYXRhOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfYWFuY19hY2RiX3RhYmxlIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwp9IF9fcGFja2VkOwoKLyogRG9sYnkgREFQIHRvcG9sb2d5ICovCiNkZWZpbmUgRE9MQllfQURNX0NPUFBfVE9QT0xPR1lfSUQJMHgwMDAxMDMzQgojZGVmaW5lIERTMl9BRE1fQ09QUF9UT1BPTE9HWV9JRAkweDEzMDEwMzNCCgovKiBSTVMgdmFsdWUgZnJvbSBEU1AgKi8KI2RlZmluZSBSTVNfTU9EVUxFSURfQVBQSV9QQVNTVEhSVSAgMHgxMDAwOTAxMQojZGVmaW5lIFJNU19QQVJBTV9GSVJTVF9TQU1QTEUgMHgxMDAwOTAxMgojZGVmaW5lIFJNU19QQVlMT0FEX0xFTiA0CgovKiBDdXN0b21pemVkIG1peGluZyBpbiBtYXRpeCBtaXhlciAqLwojZGVmaW5lIE1UTVhfTU9EVUxFX0lEX0RFRkFVTFRfQ0hNSVhFUiAgMHgwMDAxMDM0MQojZGVmaW5lIERFRkFVTFRfQ0hNSVhFUl9QQVJBTV9JRF9DT0VGRiAgMHgwMDAxMDM0MgojZGVmaW5lIENVU1RPTV9TVEVSRU9fUEFZTE9BRF9TSVpFCTkKI2RlZmluZSBDVVNUT01fU1RFUkVPX0NNRF9QQVJBTV9TSVpFCTI0CiNkZWZpbmUgQ1VTVE9NX1NURVJFT19OVU1fT1VUX0NICTB4MDAwMgojZGVmaW5lIENVU1RPTV9TVEVSRU9fTlVNX0lOX0NICQkweDAwMDIKI2RlZmluZSBDVVNUT01fU1RFUkVPX0lOREVYX1BBUkFNCTB4MDAwMgojZGVmaW5lIFExNF9HQUlOX1pFUk9fUE9JTlRfRklWRQkweDIwMDAKI2RlZmluZSBRMTRfR0FJTl9VTklUWQkJCTB4NDAwMAoKc3RydWN0IGFmZV9zdmNfY21kX3NldF9jbGlwX2Jhbmtfc2VsZWN0aW9uIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfY2xpcF9iYW5rX3NlbCBiYW5rX3NlbDsKfSBfX3BhY2tlZDsKCi8qIFVsdHJhc291bmQgc3VwcG9ydGVkIGZvcm1hdHMgKi8KI2RlZmluZSBVU19QT0lOVF9FUE9TX0ZPUk1BVF9WMiAweDAwMDEyNzJECiNkZWZpbmUgVVNfUkFXX0ZPUk1BVF9WMiAgICAgICAgMHgwMDAxMjcyQwojZGVmaW5lIFVTX1BST1hfRk9STUFUX1Y0ICAgICAgIDB4MDAwMTI3M0IKI2RlZmluZSBVU19SQVdfU1lOQ19GT1JNQVQgICAgICAweDAwMDEyNzJGCiNkZWZpbmUgVVNfR0VTX1NZTkNfRk9STUFUICAgICAgMHgwMDAxMjczMAoKI2RlZmluZSBBRkVfTU9EVUxFX0dST1VQX0RFVklDRQkweDAwMDEwMjU0CiNkZWZpbmUgQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9DRkcJMHgwMDAxMDI1NQojZGVmaW5lIEFGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfRU5BQkxFIDB4MDAwMTAyNTYKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1NFQ09OREFSWV9NSTJTX1JYCTB4MTEwMgoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfR1JPVVBfREVWSUNFX0NGRwogKiBwYXJhbWV0ZXIsIHdoaWNoIGNvbmZpZ3VyZXMgbWF4IG9mIDggQUZFIHBvcnRzCiAqIGludG8gYSBncm91cC4KICogVGhlIGZpeGVkIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgc2l4dGVlbiBieXRlcy4KICovCnN0cnVjdCBhZmVfZ3JvdXBfZGV2aWNlX2dyb3VwX2NmZyB7Cgl1MzIgbWlub3JfdmVyc2lvbjsKCXUxNiBncm91cF9pZDsKCXUxNiBudW1fY2hhbm5lbHM7Cgl1MTYgcG9ydF9pZFs4XTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9QUklNQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfVEVSVElBUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1RFUlRJQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9RVUFURVJOQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfUVVJTkFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9RVUlOQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDEwMCkKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSAjQUZFX01PRFVMRV9HUk9VUF9ERVZJQ0UgdG8gY29uZmlndXJlIHRoZQogKiBncm91cCBkZXZpY2UuICNBRkVfU1ZDX0NNRF9TRVRfUEFSQU0gY2FuIHVzZSB0aGlzIHBhcmFtZXRlciBJRC4KICoKICogUmVxdWlyZW1lbnRzOgogKiAtIENvbmZpZ3VyZSB0aGUgZ3JvdXAgYmVmb3JlIHRoZSBtZW1iZXIgcG9ydHMgaW4gdGhlIGdyb3VwIGFyZQogKiBjb25maWd1cmVkIGFuZCBzdGFydGVkLgogKiAtIEVuYWJsZSB0aGUgZ3JvdXAgb25seSBhZnRlciBpdCBpcyBjb25maWd1cmVkLgogKiAtIFN0b3AgYWxsIG1lbWJlciBwb3J0cyBpbiB0aGUgZ3JvdXAgYmVmb3JlIGRpc2FibGluZyB0aGUgZ3JvdXAuCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfVERNX0NPTkZJRwkweDAwMDEwMjlFCgovKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8KICogQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9URE1fQ09ORklHIHByb2Nlc3NpbmcgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0dST1VQX0RFVklDRV9URE1fQ09ORklHCTB4MQoKLyogTnVtYmVyIG9mIEFGRSBwb3J0cyBpbiBncm91cCBkZXZpY2UgICovCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9OVU1fUE9SVFMJCQkJCTgKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfVERNX0NPTkZJRyBwYXJhbWV0ZXIgSUQKICogdXNlZCBieSBBRkVfTU9EVUxFX0dST1VQX0RFVklDRS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfZ3JvdXBfZGV2aWNlX3RkbV9jZmcgewoJdTMyCWdyb3VwX2RldmljZV9jZmdfbWlub3JfdmVyc2lvbjsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCB0byB0cmFjayBncm91cCBkZXZpY2UgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9HUk9VUF9ERVZJQ0VfVERNX0NPTkZJRwoJICovCgoJdTE2CWdyb3VwX2lkOwoJLyogSUQgZm9yIHRoZSBncm91cCBkZXZpY2UuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1JYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1RYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1NFQ09OREFSWV9URE1fUlgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9UWAoJICogLSAjQUZFX0dST1VQX0RFVklDRV9JRF9URVJUSUFSWV9URE1fUlgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfVEVSVElBUllfVERNX1RYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1JYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1RYCgkgKi8KCgl1MTYJcmVzZXJ2ZWQ7CgkvKiAwICovCgoJdTE2CXBvcnRfaWRbQUZFX0dST1VQX0RFVklDRV9OVU1fUE9SVFNdOwoJLyogQXJyYXkgb2YgbWVtYmVyIHBvcnQgSURzIG9mIHRoaXMgZ3JvdXAuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWAoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMQoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMgoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMwoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNAoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNQoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNgoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF80CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF81CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF82CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF83CgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWAoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfMwoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF80CgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfNgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF83CgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWAoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfMwoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF80CgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF83CgoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfMQoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfNAoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF82CgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWAoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzEKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfMwoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzQKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF81CgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNgoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzcKCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWAoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMQoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMgoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMwoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNAoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNQoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNgoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF80CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF81CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF82CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF83CgkgKiBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUzMgludW1fY2hhbm5lbHM7CgkvKiBOdW1iZXIgb2YgZW5hYmxlZCBzbG90cyBmb3IgVERNIGZyYW1lLgoJICogQHZhbHVlcyAxIHRvIDgKCSAqLwoKCXUzMglzYW1wbGVfcmF0ZTsKCS8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yNEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzMySwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTMyCWJpdF93aWR0aDsKCS8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgoJICogQHZhbHVlcyAxNiwgMjQsICgzMikKCSAqLwoKCXUxNgluc2xvdHNfcGVyX2ZyYW1lOwoJLyogTnVtYmVyIG9mIHNsb3RzIHBlciBmcmFtZS4gVHlwaWNhbCA6IDEsIDIsIDQsIDgsIDE2LCAzMi4KCSAqIEB2YWx1ZXMgMSAtIDMyCgkgKi8KCgl1MTYJc2xvdF93aWR0aDsKCS8qIFNsb3Qgd2lkdGggb2YgdGhlIHNsb3QgaW4gYSBURE0gZnJhbWUuICAoc2xvdF93aWR0aCA+PSBiaXRfd2lkdGgpCgkgKiBoYXZlIHRvIGJlIHNhdGlzZmllZC4KCSAqIEB2YWx1ZXMgMTYsIDI0LCAzMgoJICovCgoJdTMyCXNsb3RfbWFzazsKCS8qIFBvc2l0aW9uIG9mIGFjdGl2ZSBzbG90cy4gIFdoZW4gdGhhdCBiaXQgaXMgc2V0LCB0aGF0IHBhcmljdWxhcgoJICogc2xvdCBpcyBhY3RpdmUuCgkgKiBOdW1iZXIgb2YgYWN0aXZlIHNsb3RzIGNhbiBiZSBpbmZlcnJlZCBieSBudW1iZXIgb2YgYml0cyBzZXQgaW4KCSAqIHRoZSBtYXNrLiAgT25seSA4IGluZGl2aWR1YWwgYml0cyBjYW4gYmUgZW5hYmxlZC4KCSAqIEJpdHMgMC4uMzEgY29ycmVzcG9uZGluZyB0byBzbG90IDAuLjMxCgkgKiBAdmFsdWVzIDEgdG8gMl4zMiAtMQoJICovCn0gX19wYWNrZWQ7CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfRU5BQkxFCiAqIHBhcmFtZXRlciwgd2hpY2ggZW5hYmxlcyBvcgogKiBkaXNhYmxlcyBhbnkgbW9kdWxlLgogKiBUaGUgZml4ZWQgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBmb3VyIGJ5dGVzLgogKi8KCnN0cnVjdCBhZmVfZ3JvdXBfZGV2aWNlX2VuYWJsZSB7Cgl1MTYgZ3JvdXBfaWQ7CgkvKiB2YWxpZCB2YWx1ZSBpcyBBRkVfR1JPVVBfREVWSUNFX0lEX1NFQ09OREFSWV9NSTJTX1JYICovCgl1MTYgZW5hYmxlOwoJLyogRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBtb2R1bGUuICovCn0gX19wYWNrZWQ7Cgp1bmlvbiBhZmVfcG9ydF9ncm91cF9jb25maWcgewoJc3RydWN0IGFmZV9ncm91cF9kZXZpY2VfZ3JvdXBfY2ZnIGdyb3VwX2NmZzsKCXN0cnVjdCBhZmVfZ3JvdXBfZGV2aWNlX2VuYWJsZSBncm91cF9lbmFibGU7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2dyb3VwX2RldmljZV90ZG1fY2ZnIHRkbV9jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BvcnRfZ3JvdXBfY3JlYXRlIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXVuaW9uIGFmZV9wb3J0X2dyb3VwX2NvbmZpZyBkYXRhOwp9IF9fcGFja2VkOwoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5ICNBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UgdG8gc3BlY2lmeQogKiB0aGUgdGltaW5nIHN0YXRpc3RpY3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGludGVyZmFjZS4KICogQ2xpZW50IGNhbiBwZXJpb2RpY2FsbHkgcXVlcnkgZm9yIHRoZSBkZXZpY2UgdGltZSBzdGF0aXN0aWNzIHRvIGhlbHAgYWRqdXN0CiAqIHRoZSBQTEwgYmFzZWQgb24gdGhlIGRyaWZ0IHZhbHVlLiBUaGUgZ2V0IHBhcmFtIGNvbW1hbmQgbXVzdCBiZSBzZW50IHRvCiAqIEFGRSBwb3J0IElEIGNvcnJlc3BvbmRpbmcgdG8gZGV2aWNlIGludGVyZmFjZQoKICogVGhpcyBwYXJhbWV0ZXIgSUQgc3VwcG9ydHMgZm9sbG93aW5nIGdldCBwYXJhbSBjb21tYW5kczoKICogI0FGRV9QT1JUX0NNRF9HRVRfUEFSQU1fVjIgYW5kCiAqICNBRkVfUE9SVF9DTURfR0VUX1BBUkFNX1YzLgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfREVWX1RJTUlOR19TVEFUUyAgICAgICAgICAgMHgwMDAxMDJBRAoKLyogVmVyc2lvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRsZSBmdXR1cmUgYWRkaXRpb25zIHRvIEFGRSBkZXZpY2UKICogaW50ZXJmYWNlIHRpbWluZyBzdGF0aXN0aWNzIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9ERVZfVElNSU5HX1NUQVRTICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzcGVjaWZ5aW5nIGEgc2luayhSeCkgZGV2aWNlICovCiNkZWZpbmUgQUZFX1NJTktfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNwZWNpZnlpbmcgYSBzb3VyY2UoVHgpIGRldmljZSAqLwojZGVmaW5lIEFGRV9TT1VSQ0VfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBkcmlmdCByZWZlcmVuY2UgaXMgb2YgdHlwZSBBViBUaW1lciAqLwojZGVmaW5lIEFGRV9SRUZfVElNRVJfVFlQRV9BVlRJTUVSICAgICAgICAgICAgICAweDAKCi8qIE1lc3NhZ2UgcGF5bG9hZCBzdHJ1Y3R1cmUgZm9yIHRoZQogKiBBRkVfUEFSQU1fSURfREVWX1RJTUlOR19TVEFUUyBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2Rldl90aW1pbmdfc3RhdHMgewoJLyogTWlub3IgdmVyc2lvbiB1c2VkIHRvIHRyYWNrIHRoZSB2ZXJzaW9uIG9mIGRldmljZSBpbnRlcmZhY2UgdGltaW5nCgkgKiBzdGF0aXN0aWNzLiBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBpcyAxLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX0RFVl9USU1JTkdfU1RBVFMKCSAqLwoJdTMyICAgICAgIG1pbm9yX3ZlcnNpb247CgoJLyogSW5kaWNhdGVzIHRoZSBkZXZpY2UgaW50ZXJmYWNlIGRpcmVjdGlvbiBhcyBlaXRoZXIKCSAqIHNvdXJjZSAoVHgpIG9yIHNpbmsgKFJ4KS4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfU0lOS19ERVZJQ0UKCSAqICNBRkVfU09VUkNFX0RFVklDRQoJICovCgl1MTYgICAgICAgIGRldmljZV9kaXJlY3Rpb247CgoJLyogUmVmZXJlbmNlIHRpbWVyIGZvciBkcmlmdCBhY2N1bXVsYXRpb24gYW5kIHRpbWUgc3RhbXAgaW5mb3JtYXRpb24uCgkgKiBAdmFsdWVzCgkgKiAjQUZFX1JFRl9USU1FUl9UWVBFX0FWVElNRVIgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXUxNiAgICAgICAgcmVmZXJlbmNlX3RpbWVyOwoKCS8qCgkgKiBGbGFnIHRvIGluZGljYXRlIGlmIHJlc3luYyBpcyByZXF1aXJlZCBvbiB0aGUgY2xpZW50IHNpZGUgZm9yCgkgKiBkcmlmdCBjb3JyZWN0aW9uLiBGbGFnIGlzIHNldCB0byBUUlVFIGZvciB0aGUgZmlyc3QgZ2V0X3BhcmFtCgkgKiByZXNwb25zZSBhZnRlciBkZXZpY2UgaW50ZXJmYWNlIHN0YXJ0cy4gVGhpcyBmbGFnIHZhbHVlIGNhbiBiZQoJICogdXNlZCBieSBjbGllbnQgdG8gaWRlbnRpZnkgaWYgZGV2aWNlIGludGVyZmFjZSByZXN0YXJ0IGhhcwoJICogaGFwcGVuZWQgYW5kIGlmIGFueSByZS1zeW5jIGlzIHJlcXVpcmVkIGF0IHRoZWlyIGVuZCBmb3IgZHJpZnQKCSAqIGNvcnJlY3Rpb24uCgkgKiBAdmFsdWVzCgkgKiAwOiBGQUxTRSAoUmVzeW5jIG5vdCByZXF1aXJlZCkKCSAqIDE6IFRSVUUgKFJlc3luYyByZXF1aXJlZCkgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXUzMiAgICAgICAgcmVzeW5jX2ZsYWc7CgoJLyogQWNjdW11bGF0ZWQgZHJpZnQgdmFsdWUgaW4gbWljcm9zZWNvbmRzLiBUaGlzIHZhbHVlIGlzIHVwZGF0ZWQKCSAqIGV2ZXJ5IDEwMHRoIG1zLgoJICogUG9zaXRpdmUgZHJpZnQgdmFsdWUgaW5kaWNhdGVzIEFWIHRpbWVyIGlzIHJ1bm5pbmcgZmFzdGVyIHRoYW4gZGV2aWNlCgkgKiBOZWdhdGl2ZSBkcmlmdCB2YWx1ZSBpbmRpY2F0ZXMgQVYgdGltZXIgaXMgcnVubmluZyBzbG93ZXIgdGhhbiBkZXZpY2UKCSAqIEB2YWx1ZXMgQW55IHZhbGlkIGludDMyIG51bWJlcgoJICovCglzMzIgICAgICAgICBhY2NfZHJpZnRfdmFsdWU7CgoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGFic29sdXRlIHRpbWVzdGFtcCBvZiByZWZlcmVuY2UKCSAqIHRpbWVyIGluIG1pY3Jvc2Vjb25kcy4KCgkgKiBUaGlzIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgdGltZSB3aGVuIHRoZSBkcmlmdCB2YWx1ZXMKCSAqIGFyZSBhY2N1bWxhdGVkIGZvciBldmVyeSAxMDB0aCBtcy4KCSAqIEB2YWx1ZXMgQW55IHZhbGlkIHVpbnQzMiBudW1iZXIKCSAqLwoJdTMyICAgICAgICByZWZfdGltZXJfYWJzX3RzX2xzdzsKCgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgYWJzb2x1dGUgdGltZXN0YW1wIG9mIHJlZmVyZW5jZQoJICogdGltZXIgaW4gbWljcm9zZWNvbmRzLgoJICogVGhpcyB0aW1lc3RhbXAgY29ycmVzcG9uZHMgdG8gdGhlIHRpbWUgd2hlbiB0aGUgZHJpZnQgdmFsdWVzCgkgKiBhcmUgYWNjdW1sYXRlZCBmb3IgZXZlcnkgMTAwdGggbXMuCgkgKiBAdmFsdWVzIEFueSB2YWxpZCB1aW50MzIgbnVtYmVyCgkgKi8KCXUzMiAgICAgICAgcmVmX3RpbWVyX2Fic190c19tc3c7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2F2X2Rldl9kcmlmdF9nZXRfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9nZXRfcGFyYW1fdjIgZ2V0X3BhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2Rldl90aW1pbmdfc3RhdHMgdGltaW5nX3N0YXRzOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hdl9kZXZfZHJpZnRfZ2V0X3BhcmFtX3Jlc3AgewoJdWludDMyX3Qgc3RhdHVzOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2Rldl90aW1pbmdfc3RhdHMgdGltaW5nX3N0YXRzOwp9IF9fcGFja2VkOwoKLyogQ29tbWFuZCBmb3IgTWF0cml4IG9yIFN0cmVhbSBSb3V0ZXIgKi8KI2RlZmluZSBBU01fU0VTU0lPTl9DTURfU0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyICAgIDB4MDAwMTBEQ0UKLyogTW9kdWxlIGZvciBBVlNZTkMgKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX01PRFVMRV9JRF9BVlNZTkMgICAgMHgwMDAxMERDNgoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB0byBzcGVjaWZ5IHRoZQogKiByZW5kZXIgd2luZG93IHN0YXJ0IHZhbHVlLiBUaGlzIHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQgb25seSBmb3IgYSBTZXQKICogY29tbWFuZCAobm90IGEgR2V0IGNvbW1hbmQpIGluIHRoZSBSeCBkaXJlY3Rpb24KICogKCNBU01fU0VTU0lPTl9DTURfU0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyKS4KICogUmVuZGVyIHdpbmRvdyBzdGFydCBpcyBhIHZhbHVlIChzZXNzaW9uIHRpbWUgbWludXMgdGltZXN0YW1wLCBvciBTVC1UUykKICogYmVsb3cgd2hpY2ggZnJhbWVzIGFyZSBoZWxkLCBhbmQgYWZ0ZXIgd2hpY2ggZnJhbWVzIGFyZSBpbW1lZGlhdGVseQogKiByZW5kZXJlZC4KICovCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfV0lORE9XX1NUQVJUX1YyIDB4MDAwMTBERDEKCi8qIFBhcmFtZXRlciB1c2VkIGJ5ICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX01PRFVMRV9JRF9BVlNZTkMgdG8gc3BlY2lmeSB0aGUKICogcmVuZGVyIHdpbmRvdyBlbmQgdmFsdWUuIFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBhIFNldAogKiBjb21tYW5kIChub3QgYSBHZXQgY29tbWFuZCkgaW4gdGhlIFJ4IGRpcmVjdGlvbgogKiAoI0FTTV9TRVNTSU9OX0NNRF9TRVRfTVRNWF9TVFJUUl9QQVJBTVNfVjIpLiBSZW5kZXIgd2luZG93IGVuZCBpcyBhIHZhbHVlCiAqIChzZXNzaW9uIHRpbWUgbWludXMgdGltZXN0YW1wKSBhYm92ZSB3aGljaCBmcmFtZXMgYXJlIGRyb3BwZWQsIGFuZCBiZWxvdwogKiB3aGljaCBmcmFtZXMgYXJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfRU5EX1YyICAgMHgwMDAxMEREMgoKLyogR2VuZXJpYyBwYXlsb2FkIG9mIHRoZSB3aW5kb3cgcGFyYW1ldGVycyBpbiB0aGUKICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyBtb2R1bGUuCiAqIFRoaXMgcGF5bG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgYSBTZXQgY29tbWFuZAogKiAobm90IGEgR2V0IGNvbW1hbmQpIG9uIHRoZSBSeCBwYXRoLgogKi8Kc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fd2luZG93X3YyX3QgewoJdTMyICAgIHdpbmRvd19sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSByZW5kZXIgd2luZG93IHN0YXJ0IHZhbHVlLiAqLwoKCXUzMiAgICB3aW5kb3dfbXN3OwoJLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgcmVuZGVyIHdpbmRvdyBzdGFydCB2YWx1ZS4KCSAqCgkgKiBUaGUgNjQtYml0IG51bWJlciBmb3JtZWQgYnkgd2luZG93X2xzdyBhbmQgd2luZG93X21zdyBzcGVjaWZpZXMgYQoJICogc2lnbmVkIDY0LWJpdCB3aW5kb3cgdmFsdWUgaW4gbWljcm9zZWNvbmRzLiBUaGUgc2lnbiBleHRlbnNpb24gaXMKCSAqIG5lY2Vzc2FyeS4gVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfU1RBUlRfVjIKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfRU5EX1YyCgkgKiAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9TVEFUX1dJTkRPV19TVEFSVF9WMgoJICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fU1RBVF9XSU5ET1dfRU5EX1YyCgkgKiBUaGUgdmFsdWUgZGVwZW5kcyBvbiB3aGljaCBwYXJhbWV0ZXIgSUQgaXMgdXNlZC4KCSAqIFRoZSBhRFNQIGhvbm9ycyB0aGUgd2luZG93cyBhdCBhIGdyYW51bGFyaXR5IG9mIDEgbXMuCgkgKi8KfTsKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfc2V0X210bXhfc3Ryc3RyX3BhcmFtc192MiB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX2xzdzsKCS8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBkYXRhIHBheWxvYWQgYWRkcmVzcy4KCSAqIElmIHRoZSBhZGRyZXNzIGlzIG5vdCBzZW50IChOVUxMKSwgdGhlIG1lc3NhZ2UgaXMgaW4gdGhlIHBheWxvYWQuCgkgKiBJZiB0aGUgYWRkcmVzcyBpcyBzZW50IChub24tTlVMTCksIHRoZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcwoJICogYmVnaW4gYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzLgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKCS8qIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBhZGRyZXNzLiBUaGlzIG1lbW9yeSBtYXAgaGFuZGxlIGlzIHJldHVybmVkCgkgKiBieSB0aGUgYURTUCB0aHJvdWdoIHRoZSAjQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCgkgKiB2YWx1ZXMKCSAqIC0gTlVMTCAtLSBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBhcmUgd2l0aGluIHRoZSBtZXNzYWdlIHBheWxvYWQKCSAqIChpbi1iYW5kKS4KCSAqIC0gTm9uLU5VTEwgLS0gUGFyYW1ldGVyIGRhdGEgcGF5bG9hZHMgYmVnaW4gYXQgdGhlIGFkZHJlc3Mgc3BlY2lmaWVkCgkgKiBpbiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZmllbGRzCgkgKiAob3V0LW9mLWJhbmQpLgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfc2l6ZTsKCS8qIEFjdHVhbCBzaXplIG9mIHRoZSB2YXJpYWJsZSBwYXlsb2FkIGFjY29tcGFueWluZyB0aGUgbWVzc2FnZSwgb3IgaW4KCSAqIHNoYXJlZCBtZW1vcnkuIFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgcGFyc2luZyB0aGUgcGFyYW1ldGVyIHBheWxvYWQuCgkgKiB2YWx1ZXMgPiAwIGJ5dGVzCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKCS8qIERpcmVjdGlvbiBvZiB0aGUgZW50aXR5IChtYXRyaXggbWl4ZXIgb3Igc3RyZWFtIHJvdXRlcikgb24gd2hpY2gKCSAqIHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgc2V0LgoJICogdmFsdWVzCgkgKiAtIDAgLS0gUnggKGZvciBSeCBzdHJlYW0gcm91dGVyIG9yIFJ4IG1hdHJpeCBtaXhlcikKCSAqIC0gMSAtLSBUeCAoZm9yIFR4IHN0cmVhbSByb3V0ZXIgb3IgVHggbWF0cml4IG1peGVyKQoJICovCn07CgovKiBQYXJhbWV0ZXIgdXNlZCBieSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9NT0RVTEVfSURfQVZTWU5DIHdoaWNoIGFsbG93cyB0aGUKICogYXVkaW8gY2xpZW50IGNob29zZSB0aGUgcmVuZGVyaW5nIGRlY2lzaW9uIHRoYXQgdGhlIGF1ZGlvIERTUCBzaG91bGQgdXNlLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9NT0RFX0NNRCAgMHgwMDAxMkYwRAoKLyogSW5kaWNhdGVzIHRoYXQgcmVuZGVyaW5nIGRlY2lzaW9uIHdpbGwgYmUgYmFzZWQgb24gZGVmYXVsdCByYXRlCiAqIChzZXNzaW9uIGNsb2NrIGJhc2VkIHJlbmRlcmluZywgZGV2aWNlIGRyaXZlbikuCiAqIDEuIFRoZSBkZWZhdWx0IHNlc3Npb24gY2xvY2sgYmFzZWQgcmVuZGVyaW5nIGlzIGluaGVyZW50bHkgZHJpdmVuCiAqICAgIGJ5IHRoZSB0aW1pbmcgb2YgdGhlIGRldmljZS4KICogMi4gQWZ0ZXIgdGhlIGluaXRpYWwgZGVjaXNpb24gaXMgbWFkZSAoZmlyc3QgYnVmZmVyIGFmdGVyIGEgcnVuCiAqICAgIGNvbW1hbmQpLCBzdWJzZXF1ZW50IGRhdGEgcmVuZGVyaW5nIGRlY2lzaW9ucyBhcmUgbWFkZSB3aXRoCiAqICAgIHJlc3BlY3QgdG8gdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGRldmljZSBpcyByZW5kZXJpbmcsIHRodXMgZGVyaXZpbmcKICogICAgaXRzIHRpbWluZyBmcm9tIHRoZSBkZXZpY2UuCiAqIDMuIFdoaWxlIHRoaXMgZGVjaXNpb24gbWFraW5nIGlzIHNpbXBsZSwgaXQgaGFzIHNvbWUgaW5oZXJlbnQgbGltaXRhdGlvbnMKICogICAgKG1lbnRpb25lZCBpbiB0aGUgbmV4dCBzZWN0aW9uKS4KICogNC4gSWYgdGhpcyBBUEkgaXMgbm90IHNldCwgdGhlIHNlc3Npb24gY2xvY2sgYmFzZWQgcmVuZGVyaW5nIHdpbGwgYmUgYXNzdW1lZAogKiAgICBhbmQgdGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBEU1AgaXMgYmFja3dhcmQgY29tcGF0aWJsZS4KICovCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfREVGQVVMVCAwCgovKiBJbmRpY2F0ZXMgdGhhdCByZW5kZXJpbmcgZGVjaXNpb24gd2lsbCBiZSBiYXNlZCBvbiBsb2NhbCBjbG9jayByYXRlLgogKiAxLiBJbiB0aGUgRFNQIGxvb3BiYWNrL2NsaWVudCBsb29wYmFjayB1c2UgY2FzZXMgKGZyYW1lIGJhc2VkCiAqICAgIGlucHV0cyksIHRoZSBpbmNvbWluZyBkYXRhIGludG8gYXVkaW8gRFNQIGlzIHRpbWUtc3RhbXBlZCBhdCB0aGUKICogICAgbG9jYWwgY2xvY2sgcmF0ZSAoU1RDKS4KICogMi4gVGhpcyBUUyByYXRlIG1heSBtYXRjaCB0aGUgaW5jb21pbmcgZGF0YSByYXRlIG9yIG1heWJlIGRpZmZlcmVudAogKiAgICBmcm9tIHRoZSBpbmNvbWluZyBkYXRhIHJhdGUuCiAqIDMuIFJlZ2FyZGxlc3MsIHRoZSBkYXRhIHdpbGwgYmUgdGltZS1zdGFtcGVkIHdpdGggbG9jYWwgU1RDIGFuZAogKiAgICB0aGVyZWZvcmUsIHRoZSBjbGllbnQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IHRoaXMgbW9kZSBmb3IgdGhlc2UKICogICAgdXNlIGNhc2VzLiBUaGlzIG1ldGhvZCBpcyBpbmhlcmVudGx5IG1vcmUgcm9idXN0IHRvIHNlcXVlbmNpbmcKICogICAgKEFGRSBTdGFydC9TdG9wKSBhbmQgZGV2aWNlIHN3aXRjaGVzLCBhbW9uZyBvdGhlciBiZW5lZml0cy4KICogNC4gVGhpcyBBUEkgd2lsbCBpbmZvcm0gdGhlIERTUCB0byBjb21wYXJlIGV2ZXJ5IGluY29taW5nIGJ1ZmZlciBUUwogKiAgICBhZ2FpbnN0IGxvY2FsIFNUQy4KICogNS4gRFNQIHdpbGwgY29udGludWUgdG8gaG9ub3IgcmVuZGVyIHdpbmRvd3MgQVBJcywgYXMgYmVmb3JlLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9MT0NBTF9TVEMgMQoKLyogU3RydWN0dXJlIGZvciByZW5kZXJpbmcgZGVjaXNpb24gcGFyYW1ldGVyICovCnN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3JlbmRlcl9tb2RlX3QgewoJLyogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHJlbmRlcmluZyBkZWNpc2lvbiB0aGUgYXVkaW8gRFNQIHNob3VsZCB1c2UuCgkgKgoJICogQHZhbHVlcwoJICogLSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfREVGQVVMVAoJICogLSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfTE9DQUxfU1RDCgkgKi8KCXUzMiAgICAgICAgICAgICAgICAgIGZsYWdzOwp9IF9fcGFja2VkOwoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB3aGljaCBhbGxvd3MgdGhlCiAqIGF1ZGlvIGNsaWVudCB0byBzcGVjaWZ5IHRoZSBjbG9jayByZWNvdmVyeSBtZWNoYW5pc20gdGhhdCB0aGUgYXVkaW8gRFNQCiAqIHNob3VsZCB1c2UuCiAqLwoKI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfQ01EIDB4MDAwMTJGMEUKCi8qIEluZGljYXRlcyB0aGF0IGRlZmF1bHQgY2xvY2sgcmVjb3Zlcnkgd2lsbCBiZSB1c2VkIChubyBjbG9jayByZWNvdmVyeSkuCiAqIElmIHRoZSBjbGllbnQgd2lzaGVzIHRoYXQgbm8gY2xvY2sgcmVjb3ZlcnkgYmUgZG9uZSwgdGhlIGNsaWVudCBjYW4KICogY2hvb3NlIHRoaXMuIFRoaXMgbWVhbnMgdGhhdCBubyBhdHRlbXB0IHdpbGwgbWFkZSBieSB0aGUgRFNQIHRvIHRyeSBhbmQKICogbWF0Y2ggdGhlIHJhdGVzIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGF1ZGlvLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfTk9ORSAwCgovKiBJbmRpY2F0ZXMgdGhhdCBpbmRlcGVuZGVudCBjbG9jayByZWNvdmVyeSBuZWVkcyB0byBiZSB1c2VkLgogKiAxLiBJbiB0aGUgRFNQIGxvb3BiYWNrL2NsaWVudCBsb29wYmFjayB1c2UgY2FzZXMgKGZyYW1lIGJhc2VkIGlucHV0cyksCiAqICAgIHRoZSBjbGllbnQgc2hvdWxkIGNob29zZSB0aGUgaW5kZXBlbmRlbnQgY2xvY2sgcmVjb3Zlcnkgb3B0aW9uLgogKiAyLiBUaGlzIGJhc2ljYWxseSBkZS1jb3VwbGVzIHRoZSBhdWRpbyBhbmQgdmlkZW8gZnJvbSBrbm93aW5nIGVhY2ggb3RoZXJzCiAqICAgIGNsb2NrIHNvdXJjZXMgYW5kIGxldHMgdGhlIGF1ZGlvIERTUCBpbmRlcGVuZGVudGx5IHJhdGUgbWF0Y2ggdGhlIGlucHV0CiAqICAgIGFuZCBvdXRwdXQgcmF0ZXMuCiAqIDMuIEFmdGVyIGRyaWZ0IGRldGVjdGlvbiwgdGhlIGRyaWZ0IGNvcnJlY3Rpb24gaXMgYWNoaWV2ZWQgYnkgZWl0aGVyIHB1bGxpbmcKICogICAgdGhlIFBMTHMgKGlmIGFwcGxpY2FibGUpIG9yIGJ5IHN0cmVhbSB0byBkZXZpY2UgcmF0ZSBtYXRjaGluZwogKiAgICAoZm9yIFBDTSB1c2UgY2FzZXMpIGJ5IGNvbXBhcmluZyBkcmlmdCB3aXRoIHJlc3BlY3QgdG8gU1RDLgogKiA0LiBGb3IgcGFzc3Rocm91Z2ggdXNlIGNhc2VzLCBzaW5jZSB0aGUgUExMIHB1bGxpbmcgaXMgdGhlIG9ubHkgb3B0aW9uLAogKiAgICBhIGJlc3QgZWZmb3J0IHdpbGwgYmUgbWFkZS4KICogICAgSWYgUExMIHB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIC8gYXZhaWxhYmxlLCB0aGUgcmVuZGVyaW5nIHdpbGwgYmUKICogICAgZG9uZSB3aXRob3V0IHJhdGUgbWF0Y2hpbmcuCiAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fQ0xLX1JFQ19BVVRPIDEKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUMgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fY2xrX3JlY190IHsKCS8qIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBjbG9jayByZWNvdmVyeSB0aGF0IHRoZSBhdWRpbyBEU1Agc2hvdWxkCgkgKiB1c2UgZm9yIHJhdGUgbWF0Y2hpbmcuCgkgKi8KCgkvKiBAdmFsdWVzCgkgKiAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9DTEtfUkVDX0RFRkFVTFQKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfSU5ERVBFTkRFTlQKCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Cn0gX19wYWNrZWQ7CgoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB0bwogKiByZWFsaXplIHNtb290aGVyIGFkanVzdG1lbnQgb2YgYXVkaW8gc2Vzc2lvbiBjbG9jayBmb3IgYSBzcGVjaWZpZWQgc2Vzc2lvbi4KICogVGhlIGRlc2lyZWQgYXVkaW8gc2Vzc2lvbiBjbG9jayBhZGp1c3RtZW50KGluIG1pY3JvIHNlY29uZHMpIGlzIHNwZWNpZmllZAogKiB1c2luZyB0aGUgY29tbWFuZCAjQVNNX1NFU1NJT05fQ01EX0FESlVTVF9TRVNTSU9OX0NMT0NLX1YyLgogKiBEZWxheWluZy9BZHZhbmNpbmcgdGhlIHNlc3Npb24gY2xvY2sgd291bGQgYmUgaW1wbGVtZW50ZWQgYnkgaW5zZXJ0aW5nCiAqIGludGVycG9sYXRlZC9kcm9wcGluZyBhdWRpbyBzYW1wbGVzIGluIHRoZSBwbGF5YmFjayBwYXRoIHJlc3BlY3RpdmVseS4KICogQWxzbywgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgYmVmb3JlIHRoZSBBdWRpbyBTZXNzaW9uIGlzIHB1dAogKiB0byBSVU4gc3RhdGUgdG8gYXZvaWQgY29sZCBzdGFydCBsYXRlbmN5L2dsaXRjaGVzIGluIHRoZSBwbGF5YmFjay4KICovCgojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfUEFSQU1fQURKVVNUX1NFU1NJT05fVElNRV9DVEwgICAgICAgICAweDAwMDEzMjE3CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9wYXJhbV9hZGp1c3Rfc2Vzc2lvbl90aW1lX2N0bF90IHsKCS8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBtb2R1bGUgaXMgZW5hYmxlZCBvciBub3QKCSAqIEB2YWx1ZXMKCSAqIDAgLS0gZGlzYWJsZWQKCSAqIDEgLS0gZW5hYmxlZAoJICovCgl1MzIgICAgICAgICAgICAgICAgIGVuYWJsZTsKfTsKCnVuaW9uIGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fY29uZmlnIHsKCXN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3dpbmRvd192Ml90IHdpbmRvd19wYXJhbTsKCXN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3JlbmRlcl9tb2RlX3QgcmVuZGVyX3BhcmFtOwoJc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fY2xrX3JlY190IGNsa19yZWNfcGFyYW07CglzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9wYXJhbV9hZGp1c3Rfc2Vzc2lvbl90aW1lX2N0bF90IGFkal90aW1lX3BhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9tdG14X3N0cnRyX3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkciAgaGRyOwoJc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9zZXRfbXRteF9zdHJzdHJfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdW5pb24gYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9jb25maWcgY29uZmlnOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfR0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyIDB4MDAwMTBEQ0YKI2RlZmluZSBBU01fU0VTU0lPTl9DTURSU1BfR0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyIDB4MDAwMTBERDAKCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9TRVNTSU9OX1RJTUVfVjMgMHgwMDAxMkYwQgojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fU1RJTUVfVFNUTVBfRkxHX0JNQVNLICgweDgwMDAwMDAwVUwpCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX2dldF9tdG14X3N0cnN0cl9wYXJhbXNfdjIgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgZGF0YSBwYXlsb2FkIGFkZHJlc3MuICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGRhdGEgcGF5bG9hZCBhZGRyZXNzLgoJICogSWYgdGhlIGFkZHJlc3MgaXMgbm90IHNlbnQgKE5VTEwpLCB0aGUgbWVzc2FnZSBpcyBpbiB0aGUgcGF5bG9hZC4KCSAqIElmIHRoZSBhZGRyZXNzIGlzIHNlbnQgKG5vbi1OVUxMKSwgdGhlIHBhcmFtZXRlciBkYXRhIHBheWxvYWRzCgkgKiBiZWdpbiBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyoKCSAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBhZGRyZXNzLiBUaGlzIG1lbW9yeSBtYXAgaGFuZGxlIGlzIHJldHVybmVkCgkgKiBieSB0aGUgYURTUCB0aHJvdWdoIHRoZSAjQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCgkgKiB2YWx1ZXMKCSAqIC0gTlVMTCAtLSBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBhcmUgd2l0aGluIHRoZSBtZXNzYWdlIHBheWxvYWQKCSAqIChpbi1iYW5kKS4KCSAqIC0gTm9uLU5VTEwgLS0gUGFyYW1ldGVyIGRhdGEgcGF5bG9hZHMgYmVnaW4gYXQgdGhlIGFkZHJlc3Mgc3BlY2lmaWVkCgkgKiBpbiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZmllbGRzCgkgKiAob3V0LW9mLWJhbmQpLgoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKCS8qCgkgKiBEaXJlY3Rpb24gb2YgdGhlIGVudGl0eSAobWF0cml4IG1peGVyIG9yIHN0cmVhbSByb3V0ZXIpIG9uIHdoaWNoCgkgKiB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIHNldC4KCSAqIHZhbHVlcwoJICogLSAwIC0tIFJ4IChmb3IgUnggc3RyZWFtIHJvdXRlciBvciBSeCBtYXRyaXggbWl4ZXIpCgkgKiAtIDEgLS0gVHggKGZvciBUeCBzdHJlYW0gcm91dGVyIG9yIFR4IG1hdHJpeCBtaXhlcikKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBtb2R1bGVfaWQ7CgkvKiBVbmlxdWUgbW9kdWxlIElELiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgcGFyYW1ldGVyIElELiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGFyYW1fbWF4X3NpemU7Cn07CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9zZXNzaW9uX3RpbWVfdjNfdCB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHNlc3Npb25fdGltZV9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHNlc3Npb25fdGltZV9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgY3VycmVudCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzLgoJICogVGhlIDY0LWJpdCBudW1iZXIgZm9ybWVkIGJ5IHNlc3Npb25fdGltZV9sc3cgYW5kIHNlc3Npb25fdGltZV9tc3cKCSAqIGlzIHRyZWF0ZWQgYXMgc2lnbmVkLgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBhYnNvbHV0ZV90aW1lX2xzdzsKCS8qCgkgKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgYWJzb2x1dGUgdGltZSBpbiBtaWNyb3NlY29uZHMuCgkgKiBUaGlzIGlzIHRoZSB0aW1lIHdoZW4gdGhlIHNhbXBsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQoJICogc2Vzc2lvbl90aW1lX2xzdyBpcyByZW5kZXJlZCB0byB0aGUgaGFyZHdhcmUuIFRoaXMgYWJzb2x1dGUKCSAqIHRpbWUgY2FuIGJlIHNsaWdodGx5IGluIHRoZSBmdXR1cmUgb3IgcGFzdC4KCSAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgYWJzb2x1dGVfdGltZV9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGFic29sdXRlIHRpbWUgaW4gbWljcm9zZWNvbmRzLgoJICogVGhpcyBpcyB0aGUgdGltZSB3aGVuIHRoZSBzYW1wbGUgY29ycmVzcG9uZGluZyB0byB0aGUKCSAqIHNlc3Npb25fdGltZV9tc3cgaXMgcmVuZGVyZWQgdG8gaGFyZHdhcmUuIFRoaXMgYWJzb2x1dGUKCSAqIHRpbWUgY2FuIGJlIHNsaWdodGx5IGluIHRoZSBmdXR1cmUgb3IgcGFzdC4gVGhlIDY0LWJpdCBudW1iZXIKCSAqIGZvcm1lZCBieSBhYnNvbHV0ZV90aW1lX2xzdyBhbmQgYWJzb2x1dGVfdGltZV9tc3cgaXMgdHJlYXRlZCBhcwoJICogdW5zaWduZWQuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHRpbWVfc3RhbXBfbHN3OwoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgdGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcyAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdGltZV9zdGFtcF9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgdGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcy4KCSAqIFRoZSA2NC1iaXQgbnVtYmVyIGZvcm1lZCBieSB0aW1lX3N0YW1wX2xzdyBhbmQgdGltZV9zdGFtcF9sc3cKCSAqIGlzIHRyZWF0ZWQgYXMgdW5zaWduZWQuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGZsYWdzOwoJLyoKCSAqIEtlZXBzIHRyYWNrIG9mIGFueSBhZGRpdGlvbmFsIGZsYWdzIG5lZWRlZC4KCSAqIEB2YWx1ZXN7Zm9yIGJpdCAzMX0KCSAqIC0gMCAtLSBVbmluaXRpYWxpemVkL2ludmFsaWQKCSAqIC0gMSAtLSBWYWxpZAoJICogQWxsIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkOyBjbGllbnRzIG11c3Qgc2V0IHRoZW0gdG8gemVyby4KCSAqLwp9OwoKdW5pb24gYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9kYXRhX3R5cGUgewoJc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fc2Vzc2lvbl90aW1lX3YzX3Qgc2Vzc2lvbl90aW1lOwp9OwoKc3RydWN0IGFzbV9tdG14X3N0cnRyX2dldF9wYXJhbXMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9nZXRfbXRteF9zdHJzdHJfcGFyYW1zX3YyIHBhcmFtX2luZm87Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX210bXhfc3RydHJfZ2V0X3BhcmFtc19jbWRyc3AgewoJdWludDMyX3QgZXJyX2NvZGU7CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIHBhcmFtX2luZm87Cgl1bmlvbiBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX2RhdGFfdHlwZSBwYXJhbV9kYXRhOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9SRVNBTVBMRVIgMHgwMDAxMDcxOQoKZW51bSB7CglMRUdBQ1lfUENNID0gMCwKCUNPTVBSRVNTRURfUEFTU1RIUk9VR0gsCglDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0NPTlZFUlQsCglDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0RTRCwKCUxJU1RFTiwKCUNPTVBSRVNTRURfUEFTU1RIUk9VR0hfR0VOLAoJQ09NUFJFU1NFRF9QQVNTVEhST1VHSF9JRUM2MTkzNwp9OwoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9DT01QUkVTU0VEX01VVEUgICAgICAgICAgICAgICAgMHgwMDAxMDc3MAojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQ09NUFJFU1NFRF9NVVRFICAgICAgICAgICAgICAgICAweDAwMDEwNzcxCgpzdHJ1Y3QgYWRtX3NldF9jb21wcmVzc2VkX2RldmljZV9tdXRlIHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfdjUgY29tbWFuZDsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBwYXJhbXM7Cgl1MzIgICAgbXV0ZV9vbjsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQ09NUFJFU1NFRF9MQVRFTkNZICAgICAgICAgICAgIDB4MDAwMTA3NkUKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0NPTVBSRVNTRURfTEFURU5DWSAgICAgICAgICAgICAgMHgwMDAxMDc2RgoKc3RydWN0IGFkbV9zZXRfY29tcHJlc3NlZF9kZXZpY2VfbGF0ZW5jeSB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IGNvbW1hbmQ7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgcGFyYW1zOwoJdTMyICAgIGxhdGVuY3k7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIFZPSUNFUFJPQ19NT0RVTEVfSURfR0VORVJJQ19UWCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwRUY2CiNkZWZpbmUgVk9JQ0VQUk9DX1BBUkFNX0lEX0ZMVUVOQ0VfU09VTkRGT0NVUyAgICAgICAgICAgICAgIDB4MDAwMTBFMzcKI2RlZmluZSBWT0lDRVBST0NfUEFSQU1fSURfRkxVRU5DRV9TT1VSQ0VUUkFDS0lORyAgICAgICAgICAgMHgwMDAxMEUzOAojZGVmaW5lIE1BWF9TRUNUT1JTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CiNkZWZpbmUgTUFYX05PSVNFX1NPVVJDRV9JTkRJQ0FUT1JTICAgICAgICAgICAgICAgICAgICAgICAgIDMKI2RlZmluZSBNQVhfUE9MQVJfQUNUSVZJVFlfSU5ESUNBVE9SUyAgICAgICAgICAgICAgICAgICAgICAgMzYwCgpzdHJ1Y3Qgc291bmRfZm9jdXNfcGFyYW0gewoJdWludDE2X3Qgc3RhcnRfYW5nbGVbTUFYX1NFQ1RPUlNdOwoJdWludDhfdCBlbmFibGVbTUFYX1NFQ1RPUlNdOwoJdWludDE2X3QgZ2Fpbl9zdGVwOwp9IF9fcGFja2VkOwoKc3RydWN0IHNvdXJjZV90cmFja2luZ19wYXJhbSB7Cgl1aW50OF90IHZhZFtNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBkb2Ffc3BlZWNoOwoJdWludDE2X3QgZG9hX25vaXNlW01BWF9OT0lTRV9TT1VSQ0VfSU5ESUNBVE9SU107Cgl1aW50OF90IHBvbGFyX2FjdGl2aXR5W01BWF9QT0xBUl9BQ1RJVklUWV9JTkRJQ0FUT1JTXTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZG1fcGFyYW1fZmx1ZW5jZV9zb3VuZGZvY3VzX3QgewoJdWludDE2X3Qgc3RhcnRfYW5nbGVzW01BWF9TRUNUT1JTXTsKCXVpbnQ4X3QgZW5hYmxlc1tNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBnYWluX3N0ZXA7Cgl1aW50MTZfdCByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZG1fc2V0X2ZsdWVuY2Vfc291bmRmb2N1c19wYXJhbSB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwoJc3RydWN0IGFkbV9wYXJhbV9mbHVlbmNlX3NvdW5kZm9jdXNfdCBzb3VuZGZvY3VzX2RhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWRtX3BhcmFtX2ZsdWVuY2Vfc291cmNldHJhY2tpbmdfdCB7Cgl1aW50OF90IHZhZFtNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBkb2Ffc3BlZWNoOwoJdWludDE2X3QgZG9hX25vaXNlW01BWF9OT0lTRV9TT1VSQ0VfSU5ESUNBVE9SU107Cgl1aW50OF90IHBvbGFyX2FjdGl2aXR5W01BWF9QT0xBUl9BQ1RJVklUWV9JTkRJQ0FUT1JTXTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQVVESU9TUEhFUkUgICAgICAgICAgICAgICAweDAwMDEwOTE2CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9FTkFCTEUgICAgICAgICAweDAwMDEwOTE3CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9TVFJFTkdUSCAgICAgICAweDAwMDEwOTE4CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9DT05GSUdfTU9ERSAgICAweDAwMDEwOTE5CgojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQVVESU9TUEhFUkVfQ09FRkZTX1NURVJFT19JTlBVVCAgICAgICAgIDB4MDAwMTA5MUEKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX0NPRUZGU19NVUxUSUNIQU5ORUxfSU5QVVQgICAweDAwMDEwOTFCCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9ERVNJR05fU1RFUkVPX0lOUFVUICAgICAgICAgMHgwMDAxMDkxQwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQVVESU9TUEhFUkVfREVTSUdOX01VTFRJQ0hBTk5FTF9JTlBVVCAgIDB4MDAwMTA5MUQKCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9PUEVSQVRJTkdfSU5QVVRfTUVESUFfSU5GTyAgMHgwMDAxMDkxRQoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9WT0lDRV9UWF9TRUNOUyAgIDB4MTAwMjcwNTkKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEWF9TRUNfUFJJTUFSWV9NSUNfQ0ggMHgxMDAxNDQ0NAoKc3RydWN0IGFkbXhfc2VjX3ByaW1hcnlfbWljX2NoIHsKCXVpbnQxNl90IHZlcnNpb247Cgl1aW50MTZfdCByZXNlcnZlZDsKCXVpbnQxNl90IHNlY19wcmltYXJ5X21pY19jaDsKCXVpbnQxNl90IHJlc2VydmVkMTsKfSBfX3BhY2tlZDsKCgpzdHJ1Y3QgYWRtX3NldF9zZWNfcHJpbWFyeV9jaF9wYXJhbXMgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCXN0cnVjdCBhZG14X3NlY19wcmltYXJ5X21pY19jaCBzZWNfcHJpbWFyeV9taWNfY2hfZGF0YTsKfSBfX3BhY2tlZDsKI2VuZGlmIC8qX0FQUl9BVURJT19WMl9IXyAqLwo=