LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAogKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCiAqCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKI2lmbmRlZglfX0hBTERNT1VUU1JDX0hfXwojZGVmaW5lIF9fSEFMRE1PVVRTUkNfSF9fCgovKiAgRGVmaW5pdGlvbiAqLwovKiAgRGVmaW5lIGFsbCB0ZWFtIHN1cHBvcnQgYWJpbGl0eS4gKi8KCi8qICBEZWZpbmUgZm9yIGFsbCB0ZWFtcy4gUGxlYXNlIERlZmluZSB0aGUgY29uc3RhbnQgaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCi8qICBEZWZpbmUgT0RNIFNXIHRlYW0gc3VwcG9ydCBmbGFnLiAqLwoKLyogIEFudGVubmEgU3dpdGNoIFJlbGF0aXZlIERlZmluaXRpb24uICovCgovKiAgQWRkIG5ldyBmdW5jdGlvbiBTd0FudERpdkNoZWNrODE5MkMoKS4gKi8KLyogIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2YgQW50ZW5uYSBkaXZlcnNpdHkgZnVuY3Rpb24gYmVmb3JlIGxpbmsuICovCi8qICBNYWlubHksIGl0IGp1c3QgcmV0YWlucyBsYXN0IHNjYW4gcmVzdWx0IGFuZCBzY2FuIGFnYWluLiAqLwovKiAgQWZ0ZXIgdGhhdCwgaXQgY29tcGFyZXMgdGhlIHNjYW4gcmVzdWx0IHRvIHNlZSB3aGljaCBvbmUgZ2V0cyBiZXR0ZXIKICogIFJTU0kuIEl0IHNlbGVjdHMgYW50ZW5uYSB3aXRoIGJldHRlciByZWNlaXZpbmcgcG93ZXIgYW5kIHJldHVybnMgYmV0dGVyCiAqICBzY2FuIHJlc3VsdC4gKi8KCiNkZWZpbmUJVFBfTU9ERQkJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkJMQoKLyogMyBUeCBQb3dlciBUcmFja2luZyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURQS19ERUxUQV9NQVBQSU5HX05VTQkxMwojZGVmaW5lCQlpbmRleF9tYXBwaW5nX0hQX05VTQkxNQoKCi8qICAqLwovKiAzIFBTRCBIYW5kbGVyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiNkZWZpbmUJQUZIX1BTRAkJMQkvKiAwOm5vcm1hbCBQU0Qgc2NhbiwgMTogb25seSBkbyAyMCBwdHMgUFNEICovCiNkZWZpbmUJTU9ERV80ME0JMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITQkJMjAgICAvKiAgTWluaW11bSBjaGFubmVsIG51bWJlciBmb3IgQlQgQUZIICovCiNkZWZpbmUJU0lSX1NURVBfU0laRQkzCiNkZWZpbmUgU21vb3RoX1NpemVfMQk1CiNkZWZpbmUJU21vb3RoX1RIXzEJMwojZGVmaW5lIFNtb290aF9TaXplXzIJMTAKI2RlZmluZQlTbW9vdGhfVEhfMgk0CiNkZWZpbmUgU21vb3RoX1NpemVfMwkyMAojZGVmaW5lCVNtb290aF9USF8zCTQKI2RlZmluZSBTbW9vdGhfU3RlcF9TaXplIDUKI2RlZmluZQlBZGFwdGl2ZV9TSVIJMQojZGVmaW5lCVBTRF9SRVNDQU4JNAojZGVmaW5lCVBTRF9TQ0FOX0lOVEVSVkFMCTcwMCAvKiBtcyAqLwoKLyogODcyM0EgSGlnaCBQb3dlciBJR0kgU2V0dGluZyAqLwojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQJMHgyMgojZGVmaW5lIERNX0RJR19HbW9kZV9ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQgMHgyOAojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9USFJFU0hPTEQJMHgzYQoKLyogIExQUyBkZWZpbmUgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgwX0xQUwkJNCAvKiAgNCBpbiBscHMgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgxX0xQUwkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkzMCAvKiAgMzAgbHBzICovCiNkZWZpbmUgUlNTSV9PRkZTRVRfRElHCQkJMHgwNTsKCi8qIEFOVCBUZXN0ICovCiNkZWZpbmUgQU5UVEVTVEFMTAkJMHgwMAkvKiBBbnQgQSBvciBCIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lIEFOVFRFU1RBCQkweDAxCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lIEFOVFRFU1RCCQkweDAyCS8qIEFudCBCIHdpbGwgYmUgdGVzdGluZyAqLwoKc3RydWN0IHJ0d19kaWcgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlBbnREaXZfUlNTSV9tYXg7Cgl1MzIJCVJTU0lfbWF4Owp9OwoKc3RydWN0IHJ0bF9wcyB7Cgl1OAkJUHJlQ0NBU3RhdGU7Cgl1OAkJQ3VyQ0NBU3RhdGU7CgoJdTgJCVByZVJGU3RhdGU7Cgl1OAkJQ3VyUkZTdGF0ZTsKCglpbnQJCSAgICBSc3NpX3ZhbF9taW47CgoJdTgJCWluaXRpYWxpemU7Cgl1MzIJCVJlZzg3NCwgUmVnQzcwLCBSZWc4NUMsIFJlZ0E3NDsKCn07CgpzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgewoJdTMyCUNudF9QYXJpdHlfRmFpbDsKCXUzMglDbnRfUmF0ZV9JbGxlZ2FsOwoJdTMyCUNudF9DcmM4X2ZhaWw7Cgl1MzIJQ250X01jc19mYWlsOwoJdTMyCUNudF9PZmRtX2ZhaWw7Cgl1MzIJQ250X0Nja19mYWlsOwoJdTMyCUNudF9hbGw7Cgl1MzIJQ250X0Zhc3RfRnN5bmM7Cgl1MzIJQ250X1NCX1NlYXJjaF9mYWlsOwoJdTMyCUNudF9PRkRNX0NDQTsKCXUzMglDbnRfQ0NLX0NDQTsKCXUzMglDbnRfQ0NBX2FsbDsKCXUzMglDbnRfQldfVVNDOwkvKiBHYXJ5ICovCgl1MzIJQ250X0JXX0xTQzsJLyogR2FyeSAqLwp9OwoKc3RydWN0IHJ4X2hwYyB7Cgl1OAkJUlhIUF9mbGFnOwoJdTgJCVBTRF9mdW5jX3RyaWdnZXI7Cgl1OAkJUFNEX2JpdG1hcF9SWEhQWzgwXTsKCXU4CQlQcmVfSUdJOwoJdTgJCUN1cl9JR0k7Cgl1OAkJUHJlX3B3X3RoOwoJdTgJCUN1cl9wd190aDsKCWJvb2wJCUZpcnN0X3RpbWVfZW50ZXI7Cglib29sCQlSWEhQX2VuYWJsZTsKCXU4CQlUUF9Nb2RlOwoJc3RydWN0IHRpbWVyX2xpc3QgUFNEVGltZXI7Cn07CgojZGVmaW5lIEFTU09DSUFURV9FTlRSWV9OVU0JMzIgLyogIE1heCBzaXplIG9mIEFzb2NFbnRyeVtdLiAqLwojZGVmaW5lCU9ETV9BU1NPQ0lBVEVfRU5UUllfTlVNCUFTU09DSUFURV9FTlRSWV9OVU0KCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvCiAqICB0aGUgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluCiAqICBTV0FXX1NURVBfUEVBSyB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiAgc3dpdGNoIGFudGVubmEuICovCgojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lCVRQX01PREUJCQkwCiNkZWZpbmUJUlNTSV9NT0RFCQkxCiNkZWZpbmUJVFJBRkZJQ19MT1cJCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJCTEKCnN0cnVjdCBzd19hbnRfc3dpdGNoIHsKCXU4CXRyeV9mbGFnOwoJczMyCVByZVJTU0k7Cgl1OAlDdXJBbnRlbm5hOwoJdTgJUHJlQW50ZW5uYTsKCXU4CVJTU0lfVHJ5aW5nOwoJdTgJVGVzdE1vZGU7Cgl1OAliVHJpZ2dlckFudGVubmFTd2l0Y2g7Cgl1OAlTZWxlY3RBbnRlbm5hTWFwOwoJdTgJUlNTSV90YXJnZXQ7CgoJLyogIEJlZm9yZSBsaW5rIEFudGVubmEgU3dpdGNoIGNoZWNrICovCgl1OAlTV0FTX05vTGlua19TdGF0ZTsKCXUzMglTV0FTX05vTGlua19CS19SZWc4NjA7Cglib29sCUFOVEFfT047CS8qIFRvIGluZGljYXRlIEFudCBBIGlzIG9yIG5vdCAqLwoJYm9vbAlBTlRCX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQiBpcyBvbiBvciBub3QgKi8KCglzMzIJUlNTSV9zdW1fQTsKCXMzMglSU1NJX3N1bV9COwoJczMyCVJTU0lfY250X0E7CglzMzIJUlNTSV9jbnRfQjsKCXU2NAlsYXN0VHhPa0NudDsKCXU2NAlsYXN0UnhPa0NudDsKCXU2NAlUWEJ5dGVDbnRfQTsKCXU2NAlUWEJ5dGVDbnRfQjsKCXU2NAlSWEJ5dGVDbnRfQTsKCXU2NAlSWEJ5dGVDbnRfQjsKCXU4CVRyYWZmaWNMb2FkOwoJc3RydWN0IHRpbWVyX2xpc3QgU3dBbnRlbm5hU3dpdGNoVGltZXI7CgkvKiBIeWJyaWQgQW50ZW5uYSBEaXZlcnNpdHkgKi8KCXUzMglDQ0tfQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQ0NLX0FudDJfQ250W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU9GRE1fQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJT0ZETV9BbnQyX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglSU1NJX0FudDFfU3VtW0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCVJTU0lfQW50Ml9TdW1bQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlUeEFudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVRhcmdldFNUQTsKCXU4CWFudHNlbDsKCXU4CVJ4SWRsZUFudDsKfTsKCnN0cnVjdCBlZGNhX3R1cmJvIHsKCWJvb2wgYkN1cnJlbnRUdXJib0VEQ0E7Cglib29sIGJJc0N1clJETFN0YXRlOwoJdTMyCXBydl90cmFmZmljX2lkeDsgLyogIGVkY2EgdHVyYm8gKi8KfTsKCnN0cnVjdCBvZG1fcmF0ZV9hZGFwdCB7Cgl1OAlUeXBlOwkJLyogIERNX1R5cGVfQnlGVy9ETV9UeXBlX0J5RHJpdmVyICovCgl1OAlIaWdoUlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPiBIaWdoUlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfSElHSCAqLwoJdTgJTG93UlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPD0gTG93UlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfTE9XICovCgl1OAlSQVRSU3RhdGU7CS8qICBDdXJyZW50IFJTU0kgbGV2ZWwsIERNX1JBVFJfU1RBX0hJR0gvRE1fUkFUUl9TVEFfTUlERExFL0RNX1JBVFJfU1RBX0xPVyAqLwoJdTMyCUxhc3RSQVRSOwkvKiAgUkFUUiBSZWdpc3RlciBDb250ZW50ICovCn07CgojZGVmaW5lIElRS19NQUNfUkVHX05VTQkJNAojZGVmaW5lIElRS19BRERBX1JFR19OVU0JMTYKI2RlZmluZSBJUUtfQkJfUkVHX05VTV9NQVgJMTAKI2RlZmluZSBJUUtfQkJfUkVHX05VTQkJOQojZGVmaW5lIEhQX1RIRVJNQUxfTlVNCQk4CgojZGVmaW5lIEFWR19USEVSTUFMX05VTQkJOAojZGVmaW5lIElRS19NYXRyaXhfUkVHX05VTQk4CiNkZWZpbmUgSVFLX01hdHJpeF9TZXR0aW5nc19OVU0JMSsyNCsyMQoKI2RlZmluZQlETV9UeXBlX0J5RldpCQkwCiNkZWZpbmUJRE1fVHlwZV9CeURyaXZlcgkxCgovKiAgRGVjbGFyZSBmb3IgY29tbW9uIGluZm8gKi8KCnN0cnVjdCBvZG1fcGh5X3N0YXR1c19pbmZvIHsKCXU4CVJ4UFdEQkFsbDsKCXU4CVNpZ25hbFF1YWxpdHk7CSAvKiAgaW4gMC0xMDAgaW5kZXguICovCgl1OAlSeE1JTU9TaWduYWxRdWFsaXR5W01BWF9QQVRIX05VTV85MkNTXTsgLyogRVZNICovCgl1OAlSeE1JTU9TaWduYWxTdHJlbmd0aFtNQVhfUEFUSF9OVU1fOTJDU107LyogIGluIDB+MTAwIGluZGV4ICovCglzOAlSeFBvd2VyOyAvKiAgaW4gZEJtIFRyYW5zbGF0ZSBmcm9tIFBXZEIgKi8KCXM4CVJlY3ZTaWduYWxQb3dlcjsvKiAgUmVhbCBwb3dlciBpbiBkQm0gZm9yIHRoaXMgcGFja2V0LCBubwoJCQkJICogYmVhdXRpZmljYXRpb24gYW5kIGFnZ3JlZ2F0aW9uLiBLZWVwIHRoaXMgcmF3CgkJCQkgKiBpbmZvIHRvIGJlIHVzZWQgZm9yIHRoZSBvdGhlciBwcm9jZWR1cmVzLiAqLwoJdTgJQlRSeFJTU0lQZXJjZW50YWdlOwoJdTgJU2lnbmFsU3RyZW5ndGg7IC8qICBpbiAwLTEwMCBpbmRleC4gKi8KCXU4CVJ4UHdyW01BWF9QQVRIX05VTV85MkNTXTsvKiBwZXItcGF0aCdzIHB3ZGIgKi8KCXU4CVJ4U05SW01BWF9QQVRIX05VTV85MkNTXTsvKiBwZXItcGF0aCdzIFNOUiAqLwp9OwoKc3RydWN0IG9kbV9waHlfZGJnX2luZm8gewoJLyogT0RNIFdyaXRlLGRlYnVnIGluZm8gKi8KCXM4CVJ4U05SZEJbTUFYX1BBVEhfTlVNXzkyQ1NdOwoJdTY0CU51bVFyeVBoeVN0YXR1czsKCXU2NAlOdW1RcnlQaHlTdGF0dXNDQ0s7Cgl1NjQJTnVtUXJ5UGh5U3RhdHVzT0ZETTsKCS8qIE90aGVycyAqLwoJczMyCVJ4RVZNW01BWF9QQVRIX05VTV85MkNTXTsKfTsKCnN0cnVjdCBvZG1fcGVyX3BrdF9pbmZvIHsKCXM4CVJhdGU7Cgl1OAlTdGF0aW9uSUQ7Cglib29sCWJQYWNrZXRNYXRjaEJTU0lEOwoJYm9vbAliUGFja2V0VG9TZWxmOwoJYm9vbAliUGFja2V0QmVhY29uOwp9OwoKc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gewoJdTgJdGVzdDsKfTsKCmVudW0gb2RtX2FiaWxpdHkgewoJLyogIEJCIFRlYW0gKi8KCU9ETV9ESUcJCQk9IDB4MDAwMDAwMDEsCglPRE1fSElHSF9QT1dFUgkJPSAweDAwMDAwMDAyLAoJT0RNX0NDS19DQ0FfVEgJCT0gMHgwMDAwMDAwNCwKCU9ETV9GQV9TVEFUSVNUSUNTCT0gMHgwMDAwMDAwOCwKCU9ETV9SQU1BU0sJCT0gMHgwMDAwMDAxMCwKCU9ETV9SU1NJX01PTklUT1IJPSAweDAwMDAwMDIwLAoJT0RNX1NXX0FOVERJVgkJPSAweDAwMDAwMDQwLAoJT0RNX0hXX0FOVERJVgkJPSAweDAwMDAwMDgwLAoJT0RNX0JCX1BXUlNWCQk9IDB4MDAwMDAxMDAsCglPRE1fMlRQQVRIRElWCQk9IDB4MDAwMDAyMDAsCglPRE1fMVRQQVRIRElWCQk9IDB4MDAwMDA0MDAsCglPRE1fUFNEMkFGSAkJPSAweDAwMDAwODAwCn07CgovKiAgMjAxMS8yMC8yMCBNSCBGb3IgTVAgZHJpdmVyIFJUX1dMQU5fU1RBID0gIHN0cnVjdCBzdGFfaW5mbyAqLwovKiAgUGxlYXNlIGRlY2xhcmUgYmVsb3cgT0RNIHJlbGF0aXZlIGluZm8gaW4geW91ciBTVEEgaW5mbyBzdHJ1Y3R1cmUuICovCgpzdHJ1Y3Qgb2RtX3N0YV9pbmZvIHsKCS8qICBEcml2ZXIgV3JpdGUgKi8KCWJvb2wJYlVzZWQ7CQkvKiAgcmVjb3JkIHRoZSBzdGEgc3RhdHVzIGxpbmsgb3Igbm90PyAqLwoJdTgJSU9UUGVlcjsJLyogIEVudW0gdmFsdWUuCUhUX0lPVF9QRUVSX0UgKi8KCgkvKiAgT0RNIFdyaXRlICovCgkvKiAxIFBIWV9TVEFUVVNfSU5GTyAqLwoJdTgJUlNTSV9QYXRoWzRdOwkJLyogICovCgl1OAlSU1NJX0F2ZTsKCXU4CVJYRVZNWzRdOwoJdTgJUlhTTlJbNF07Cn07CgovKiAgMjAxMS8xMC8yMCBNSCBEZWZpbmUgQ29tbW9uIGluZm8gZW51bSBmb3IgYWxsIHRlYW0uICovCgplbnVtIG9kbV9jb21tb25faW5mb19kZWYgewoJLyogIEZpeGVkIHZhbHVlOiAqLwoKCS8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCU9ETV9DTU5JTkZPX1BMQVRGT1JNID0gMCwKCU9ETV9DTU5JTkZPX0FCSUxJVFksCQkvKiBPRE1fQUJJTElUWV9FICovCglPRE1fQ01OSU5GT19JTlRFUkZBQ0UsCQkvKiBPRE1fSU5URVJGQUNFX0UgKi8KCU9ETV9DTU5JTkZPX01QX1RFU1RfQ0hJUCwKCU9ETV9DTU5JTkZPX0lDX1RZUEUsCQkvKiBPRE1fSUNfVFlQRV9FICovCglPRE1fQ01OSU5GT19DVVRfVkVSLAkJLyogT0RNX0NVVF9WRVJTSU9OX0UgKi8KCU9ETV9DTU5JTkZPX0ZBQl9WRVIsCQkvKiBPRE1fRkFCX0UgKi8KCU9ETV9DTU5JTkZPX1JGX1RZUEUsCQkvKiBPRE1fUkZfUEFUSF9FIG9yIE9ETV9SRl9UWVBFX0U/ICovCglPRE1fQ01OSU5GT19CT0FSRF9UWVBFLAkJLyogT0RNX0JPQVJEX1RZUEVfRSAqLwoJT0RNX0NNTklORk9fRVhUX0xOQSwJCS8qIHRydWUgKi8KCU9ETV9DTU5JTkZPX0VYVF9QQSwKCU9ETV9DTU5JTkZPX0VYVF9UUlNXLAoJT0RNX0NNTklORk9fUEFUQ0hfSUQsCQkvKiBDVVNUT01FUiBJRCAqLwoJT0RNX0NNTklORk9fQklOSENUX1RFU1QsCglPRE1fQ01OSU5GT19CV0lGSV9URVNULAoJT0RNX0NNTklORk9fU01BUlRfQ09OQ1VSUkVOVCwKCS8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gICovCgoJLyogIER5bmFtaWMgdmFsdWU6ICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICAqLwoJT0RNX0NNTklORk9fTUFDX1BIWV9NT0RFLAkvKiAgT0RNX01BQ19QSFlfTU9ERV9FICovCglPRE1fQ01OSU5GT19UWF9VTkksCglPRE1fQ01OSU5GT19SWF9VTkksCglPRE1fQ01OSU5GT19XTV9NT0RFLAkJLyogIE9ETV9XSVJFTEVTU19NT0RFX0UgKi8KCU9ETV9DTU5JTkZPX0JBTkQsCQkvKiAgT0RNX0JBTkRfVFlQRV9FICovCglPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQsCS8qICBPRE1fU0VDX0NITkxfT0ZGU0VUX0UgKi8KCU9ETV9DTU5JTkZPX1NFQ19NT0RFLAkJLyogIE9ETV9TRUNVUklUWV9FICovCglPRE1fQ01OSU5GT19CVywJCQkvKiAgT0RNX0JXX0UgKi8KCU9ETV9DTU5JTkZPX0NITkwsCgoJT0RNX0NNTklORk9fRE1TUF9HRVRfVkFMVUUsCglPRE1fQ01OSU5GT19CVUREWV9BREFQVE9SLAoJT0RNX0NNTklORk9fRE1TUF9JU19NQVNURVIsCglPRE1fQ01OSU5GT19TQ0FOLAoJT0RNX0NNTklORk9fUE9XRVJfU0FWSU5HLAoJT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBLAkvKiAgT0RNX0NDQV9QQVRIX0UgKi8KCU9ETV9DTU5JTkZPX0RSVl9TVE9QLAoJT0RNX0NNTklORk9fUE5QX0lOLAoJT0RNX0NNTklORk9fSU5JVF9PTiwKCU9ETV9DTU5JTkZPX0FOVF9URVNULAoJT0RNX0NNTklORk9fTkVUX0NMT1NFRCwKCU9ETV9DTU5JTkZPX01QX01PREUsCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSAqLwoJT0RNX0NNTklORk9fV0lGSV9ESVJFQ1QsCglPRE1fQ01OSU5GT19XSUZJX0RJU1BMQVksCglPRE1fQ01OSU5GT19MSU5LLAoJT0RNX0NNTklORk9fUlNTSV9NSU4sCglPRE1fQ01OSU5GT19EQkdfQ09NUCwJCQkvKiAgdTY0ICovCglPRE1fQ01OSU5GT19EQkdfTEVWRUwsCQkJLyogIHUzMiAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0hJR0gsCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JBX1RIUkVTSE9MRF9MT1csCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JGX0FOVEVOTkFfVFlQRSwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRUQsCglPRE1fQ01OSU5GT19CVF9PUEVSQVRJT04sCglPRE1fQ01OSU5GT19CVF9ESUcsCglPRE1fQ01OSU5GT19CVF9CVVNZLAkJCS8qIENoZWNrIEJ0IGlzIHVzaW5nIG9yIG5vdCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRV9FRENBLAovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSovCgoJLyogIER5bmFtaWMgcHRyIGFycmF5IGhvb2sgaXRtcy4gKi8KCU9ETV9DTU5JTkZPX1NUQV9TVEFUVVMsCglPRE1fQ01OSU5GT19QSFlfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFDX1NUQVRVUywKCU9ETV9DTU5JTkZPX01BWCwKfTsKCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBPRE0gc3VwcG9ydCBhYmlsaXR5LiAgT0RNX0NNTklORk9fQUJJTElUWSAqLwoKZW51bSBvZG1fYWJpbGl0eV9kZWYgewoJLyogIEJCIE9ETSBzZWN0aW9uIEJJVCAwLTE1ICovCglPRE1fQkJfRElHCQkJPSBCSVQwLAoJT0RNX0JCX1JBX01BU0sJCQk9IEJJVDEsCglPRE1fQkJfRFlOQU1JQ19UWFBXUgkJPSBCSVQyLAoJT0RNX0JCX0ZBX0NOVAkJCT0gQklUMywKCU9ETV9CQl9SU1NJX01PTklUT1IJCT0gQklUNCwKCU9ETV9CQl9DQ0tfUEQJCQk9IEJJVDUsCglPRE1fQkJfQU5UX0RJVgkJCT0gQklUNiwKCU9ETV9CQl9QV1JfU0FWRQkJCT0gQklUNywKCU9ETV9CQl9QV1JfVFJBCQkJPSBCSVQ4LAoJT0RNX0JCX1JBVEVfQURBUFRJVkUJCT0gQklUOSwKCU9ETV9CQl9QQVRIX0RJVgkJCT0gQklUMTAsCglPRE1fQkJfUFNECQkJPSBCSVQxMSwKCU9ETV9CQl9SWEhQCQkJPSBCSVQxMiwKCgkvKiAgTUFDIERNIHNlY3Rpb24gQklUIDE2LTIzICovCglPRE1fTUFDX0VEQ0FfVFVSQk8JCT0gQklUMTYsCglPRE1fTUFDX0VBUkxZX01PREUJCT0gQklUMTcsCgoJLyogIFJGIE9ETSBzZWN0aW9uIEJJVCAyNC0zMSAqLwoJT0RNX1JGX1RYX1BXUl9UUkFDSwkJPSBCSVQyNCwKCU9ETV9SRl9SWF9HQUlOX1RSQUNLCQk9IEJJVDI1LAoJT0RNX1JGX0NBTElCUkFUSU9OCQk9IEJJVDI2LAp9OwoKI2RlZmluZSBPRE1fUlRMODE4OEUJCUJJVDQKCi8qIE9ETV9DTU5JTkZPX0NVVF9WRVIgKi8KZW51bSBvZG1fY3V0X3ZlcnNpb24gewoJT0RNX0NVVF9BCT0JMSwKCU9ETV9DVVRfQgk9CTIsCglPRE1fQ1VUX0MJPQkzLAoJT0RNX0NVVF9ECT0JNCwKCU9ETV9DVVRfRQk9CTUsCglPRE1fQ1VUX0YJPQk2LAoJT0RNX0NVVF9URVNUCT0JNywKfTsKCi8qICBPRE1fQ01OSU5GT19GQUJfVkVSICovCmVudW0gb2RtX2ZhYl9WZXJzaW9uIHsKCU9ETV9UU01DCT0JMCwKCU9ETV9VTUMJCT0JMSwKfTsKCi8qICBPRE1fQ01OSU5GT19SRl9UWVBFICovCi8qICBGb3IgZXhhbXBsZSAxVDJSIChBK0FCID0gQklUMHxCSVQ0fEJJVDUpICovCmVudW0gb2RtX3JmX3BhdGggewoJT0RNX1JGX1RYX0EJPQlCSVQwLAoJT0RNX1JGX1RYX0IJPQlCSVQxLAoJT0RNX1JGX1RYX0MJPQlCSVQyLAoJT0RNX1JGX1RYX0QJPQlCSVQzLAoJT0RNX1JGX1JYX0EJPQlCSVQ0LAoJT0RNX1JGX1JYX0IJPQlCSVQ1LAoJT0RNX1JGX1JYX0MJPQlCSVQ2LAoJT0RNX1JGX1JYX0QJPQlCSVQ3LAp9OwoKZW51bSBvZG1fcmZfdHlwZSB7CglPRE1fMVQxUgk9CTAsCglPRE1fMVQyUgk9CTEsCglPRE1fMlQyUgk9CTIsCglPRE1fMlQzUgk9CTMsCglPRE1fMlQ0Ugk9CTQsCglPRE1fM1QzUgk9CTUsCglPRE1fM1Q0Ugk9CTYsCglPRE1fNFQ0Ugk9CTcsCn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKZW51bSBvZG1fbWFjX3BoeV9tb2RlIHsKCU9ETV9TTVNQCT0gMCwKCU9ETV9ETVNQCT0gMSwKCU9ETV9ETURQCT0gMiwKfTsKCmVudW0gb2RtX2J0X2NvZXhpc3QgewoJT0RNX0JUX0JVU1kJCT0gMSwKCU9ETV9CVF9PTgkJPSAyLAoJT0RNX0JUX09GRgkJPSAzLAoJT0RNX0JUX05PTkUJCT0gNCwKfTsKCi8qICBPRE1fQ01OSU5GT19PUF9NT0RFICovCmVudW0gb2RtX29wZXJhdGlvbl9tb2RlIHsKCU9ETV9OT19MSU5LCQk9IEJJVDAsCglPRE1fTElOSwkJPSBCSVQxLAoJT0RNX1NDQU4JCT0gQklUMiwKCU9ETV9QT1dFUlNBVkUJCT0gQklUMywKCU9ETV9BUF9NT0RFCQk9IEJJVDQsCglPRE1fQ0xJRU5UX01PREUJCT0gQklUNSwKCU9ETV9BRF9IT0MJCT0gQklUNiwKCU9ETV9XSUZJX0RJUkVDVAkJPSBCSVQ3LAoJT0RNX1dJRklfRElTUExBWQk9IEJJVDgsCn07CgovKiAgT0RNX0NNTklORk9fV01fTU9ERSAqLwplbnVtIG9kbV93aXJlbGVzc19tb2RlIHsKCU9ETV9XTV9VTktOT1cJPSAweDAsCglPRE1fV01fQgk9IEJJVDAsCglPRE1fV01fRwk9IEJJVDEsCglPRE1fV01fQQk9IEJJVDIsCglPRE1fV01fTjI0Rwk9IEJJVDMsCglPRE1fV01fTjVHCT0gQklUNCwKCU9ETV9XTV9BVVRPCT0gQklUNSwKCU9ETV9XTV9BQwk9IEJJVDYsCn07CgovKiAgT0RNX0NNTklORk9fQkFORCAqLwplbnVtIG9kbV9iYW5kX3R5cGUgewoJT0RNX0JBTkRfMl80Rwk9IEJJVDAsCglPRE1fQkFORF81Rwk9IEJJVDEsCn07CgovKiAgT0RNX0NNTklORk9fU0VDX0NITkxfT0ZGU0VUICovCmVudW0gb2RtX3NlY19jaG5sX29mZnNldCB7CglPRE1fRE9OVF9DQVJFCT0gMCwKCU9ETV9CRUxPVwk9IDEsCglPRE1fQUJPVkUJPSAyCn07CgovKiAgT0RNX0NNTklORk9fU0VDX01PREUgKi8KZW51bSBvZG1fc2VjdXJpdHkgewoJT0RNX1NFQ19PUEVOCQk9IDAsCglPRE1fU0VDX1dFUDQwCQk9IDEsCglPRE1fU0VDX1RLSVAJCT0gMiwKCU9ETV9TRUNfUkVTRVJWRQkJPSAzLAoJT0RNX1NFQ19BRVNDQ01QCQk9IDQsCglPRE1fU0VDX1dFUDEwNAkJPSA1LAoJT0RNX1dFUF9XUEFfTUlYRUQgICAJPSA2LCAvKiAgV0VQICsgV1BBICovCglPRE1fU0VDX1NNUzQJCT0gNywKfTsKCi8qICBPRE1fQ01OSU5GT19CVyAqLwplbnVtIG9kbV9idyB7CglPRE1fQlcyME0JCT0gMCwKCU9ETV9CVzQwTQkJPSAxLAoJT0RNX0JXODBNCQk9IDIsCglPRE1fQlcxNjBNCQk9IDMsCglPRE1fQlcxME0JCT0gNCwKfTsKCi8qICBPRE1fQ01OSU5GT19CT0FSRF9UWVBFICovCmVudW0gb2RtX2JvYXJkX3R5cGUgewoJT0RNX0JPQVJEX05PUk1BTAk9IDAsCglPRE1fQk9BUkRfSElHSFBXUgk9IDEsCglPRE1fQk9BUkRfTUlOSUNBUkQJPSAyLAoJT0RNX0JPQVJEX1NMSU0JCT0gMywKCU9ETV9CT0FSRF9DT01CTwkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09ORV9QQVRIX0NDQSAqLwplbnVtIG9kbV9jY2FfcGF0aCB7CglPRE1fQ0NBXzJSCQk9IDAsCglPRE1fQ0NBXzFSX0EJCT0gMSwKCU9ETV9DQ0FfMVJfQgkJPSAyLAp9OwoKc3RydWN0IG9kbV9yYV9pbmZvIHsKCXU4IFJhdGVJRDsKCXUzMiBSYXRlTWFzazsKCXUzMiBSQVVzZVJhdGU7Cgl1OCBSYXRlU0dJOwoJdTggUnNzaVN0YVJBOwoJdTggUHJlUnNzaVN0YVJBOwoJdTggU0dJRW5hYmxlOwoJdTggRGVjaXNpb25SYXRlOwoJdTggUHJlUmF0ZTsKCXU4IEhpZ2hlc3RSYXRlOwoJdTggTG93ZXN0UmF0ZTsKCXUzMiBOc2NVcDsKCXUzMiBOc2NEb3duOwoJdTE2IFJUWVs1XTsKCXUzMiBUT1RBTDsKCXUxNiBEUk9QOwoJdTggQWN0aXZlOwoJdTE2IFJwdFRpbWU7Cgl1OCBSQVdhaXRpbmdDb3VudGVyOwoJdTggUkFQZW5kaW5nQ291bnRlcjsKCXU4IFBUQWN0aXZlOwkvKiAgb24gb3Igb2ZmICovCgl1OCBQVFRyeVN0YXRlOwkvKiAgMCB0cnlpbmcgc3RhdGUsIDEgZm9yIGRlY2lzaW9uIHN0YXRlICovCgl1OCBQVFN0YWdlOwkvKiAgMH42ICovCgl1OCBQVFN0b3BDb3VudDsJLyogU3RvcCBQVCBjb3VudGVyICovCgl1OCBQVFByZVJhdGU7CS8qICBpZiByYXRlIGNoYW5nZSBkbyBQVCAqLwoJdTggUFRQcmVSc3NpOwkvKiAgaWYgUlNTSSBjaGFuZ2UgNSUgZG8gUFQgKi8KCXU4IFBUTW9kZVNTOwkvKiAgZGVjaWRlIHdoaXRjaCByYXRlIHNob3VsZCBkbyBQVCAqLwoJdTggUkFzdGFnZTsJLyogIFN0YWdlUkEsIGRlY2lkZSBob3cgbWFueSB0aW1lcyBSQSB3aWxsIGJlIGRvbmUKCQkJICogYmV0d2VlbiBQVCAqLwoJdTggUFRTbW9vdGhGYWN0b3I7Cn07CgpzdHJ1Y3QgaWprX21hdHJpeF9yZWdzX3NldCB7Cglib29sCWJJUUtEb25lOwoJczMyCVZhbHVlWzFdW0lRS19NYXRyaXhfUkVHX05VTV07Cn07CgpzdHJ1Y3Qgb2RtX3JmX2NhbCB7CgkvKiBmb3IgdHggcG93ZXIgdHJhY2tpbmcgKi8KCXUzMglSZWdBMjQ7IC8qICBmb3IgVGVtcENDSyAqLwoJczMyCVJlZ0U5NDsKCXMzMglSZWdFOUM7CglzMzIJUmVnRUI0OwoJczMyCVJlZ0VCQzsKCgl1OAlUWFBvd2VyY291bnQ7Cglib29sCWJUWFBvd2VyVHJhY2tpbmdJbml0OwoJYm9vbAliVFhQb3dlclRyYWNraW5nOwoJdTgJVHhQb3dlclRyYWNrQ29udHJvbDsgLyogZm9yIG1wIG1vZGUsIHR1cm4gb2ZmIHR4cHdydHJhY2tpbmcKCQkJCSAgICAgICogYXMgZGVmYXVsdCAqLwoJdTgJVE1fVHJpZ2dlcjsKCXU4CUludGVybmFsUEE1R1syXTsJLyogcGF0aEEgLyBwYXRoQiAqLwoKCXU4CVRoZXJtYWxNZXRlclsyXTsgICAgLyogVGhlcm1hbE1ldGVyLCBpbmRleCAwIGZvciBSRklDMCwKCQkJCSAgICAgKiBhbmQgMSBmb3IgUkZJQzEgKi8KCXU4CVRoZXJtYWxWYWx1ZTsKCXU4CVRoZXJtYWxWYWx1ZV9MQ0s7Cgl1OAlUaGVybWFsVmFsdWVfSVFLOwoJdTgJVGhlcm1hbFZhbHVlX0RQSzsKCXU4CVRoZXJtYWxWYWx1ZV9BVkdbQVZHX1RIRVJNQUxfTlVNXTsKCXU4CVRoZXJtYWxWYWx1ZV9BVkdfaW5kZXg7Cgl1OAlUaGVybWFsVmFsdWVfUnhHYWluOwoJdTgJVGhlcm1hbFZhbHVlX0NyeXN0YWw7Cgl1OAlUaGVybWFsVmFsdWVfRFBLc3RvcmU7Cgl1OAlUaGVybWFsVmFsdWVfRFBLdHJhY2s7Cglib29sCVR4UG93ZXJUcmFja2luZ0luUHJvZ3Jlc3M7Cglib29sCWJEUEtlbmFibGU7CgoJYm9vbAliUmVsb2FkdHhwb3dlcmluZGV4OwoJdTgJYlJmUGlFbmFibGU7Cgl1MzIJVFhQb3dlclRyYWNraW5nQ2FsbGJhY2tDbnQ7IC8qIGNvc2EgYWRkIGZvciBkZWJ1ZyAqLwoKCXU4CWJDQ0tpbkNIMTQ7Cgl1OAlDQ0tfaW5kZXg7Cgl1OAlPRkRNX2luZGV4WzJdOwoJYm9vbCBiRG9uZVR4cG93ZXI7CgoJdTgJVGhlcm1hbFZhbHVlX0hQW0hQX1RIRVJNQUxfTlVNXTsKCXU4CVRoZXJtYWxWYWx1ZV9IUF9pbmRleDsKCXN0cnVjdCBpamtfbWF0cml4X3JlZ3Nfc2V0IElRS01hdHJpeFJlZ1NldHRpbmdbSVFLX01hdHJpeF9TZXR0aW5nc19OVU1dOwoKCXU4CURlbHRhX0lRSzsKCXU4CURlbHRhX0xDSzsKCgkvKiBmb3IgSVFLICovCgl1MzIJUmVnQzA0OwoJdTMyCVJlZzg3NDsKCXUzMglSZWdDMDg7Cgl1MzIJUmVnQjY4OwoJdTMyCVJlZ0I2QzsKCXUzMglSZWc4NzA7Cgl1MzIJUmVnODYwOwoJdTMyCVJlZzg2NDsKCglib29sCWJJUUtJbml0aWFsaXplZDsKCWJvb2wJYkxDS0luUHJvZ3Jlc3M7Cglib29sCWJBbnRlbm5hRGV0ZWN0ZWQ7Cgl1MzIJQUREQV9iYWNrdXBbSVFLX0FEREFfUkVHX05VTV07Cgl1MzIJSVFLX01BQ19iYWNrdXBbSVFLX01BQ19SRUdfTlVNXTsKCXUzMglJUUtfQkJfYmFja3VwX3JlY292ZXJbOV07Cgl1MzIJSVFLX0JCX2JhY2t1cFtJUUtfQkJfUkVHX05VTV07CgoJLyogZm9yIEFQSyAqLwoJdTMyCUFQS291dHB1dFsyXVsyXTsgLyogcGF0aCBBL0I7IG91dHB1dDFfMWEvb3V0cHV0MV8yYSAqLwoJdTgJYkFQS2RvbmU7Cgl1OAliQVBLVGhlcm1hbE1ldGVySWdub3JlOwoJdTgJYkRQZG9uZTsKCXU4CWJEUFBhdGhBT0s7Cgl1OAliRFBQYXRoQk9LOwp9OwoKLyogIE9ETSBEeW5hbWljIGNvbW1vbiBpbmZvIHZhbHVlIGRlZmluaXRpb24gKi8KCnN0cnVjdCBmYXN0X2FudF90cmFpbiB7Cgl1OAlCc3NpZFs2XTsKCXU4CWFudHNlbF9yeF9rZWVwXzA7Cgl1OAlhbnRzZWxfcnhfa2VlcF8xOwoJdTgJYW50c2VsX3J4X2tlZXBfMjsKCXUzMglhbnRTdW1SU1NJWzddOwoJdTMyCWFudFJTU0ljbnRbN107Cgl1MzIJYW50QXZlUlNTSVs3XTsKCXU4CUZBVF9TdGF0ZTsKCXUzMglUcmFpbklkeDsKCXU4CWFudHNlbF9hW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CWFudHNlbF9iW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CWFudHNlbF9jW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglNYWluQW50X1N1bVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQXV4QW50X1N1bVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJTWFpbkFudF9DbnRbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCUF1eEFudF9DbnRbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJUnhJZGxlQW50OwoJYm9vbAliQmVjb21lTGlua2VkOwp9OwoKZW51bSBmYXRfc3RhdGUgewoJRkFUX05PUk1BTF9TVEFURQkJPSAwLAoJRkFUX1RSQUlOSU5HX1NUQVRFCQk9IDEsCn07CgplbnVtIGFudF9kaXZfdHlwZSB7CglOT19BTlRESVYJCQk9IDB4RkYsCglDR19UUlhfSFdfQU5URElWCQk9IDB4MDEsCglDR0NTX1JYX0hXX0FOVERJVgkJPSAweDAyLAoJRklYRURfSFdfQU5URElWCQkJPSAweDAzLAoJQ0dfVFJYX1NNQVJUX0FOVERJVgkJPSAweDA0LAoJQ0dDU19SWF9TV19BTlRESVYJCT0gMHgwNSwKfTsKCi8qIENvcHkgZnJvbSBTRDQgZGVmaW5lZCBzdHJ1Y3R1cmUuIFdlIHVzZSB0byBzdXBwb3J0IFBIWSBETSBpbnRlZ3JhdGlvbi4gKi8Kc3RydWN0IG9kbV9kbV9zdHJ1Y3QgewoJLyogCUFkZCBmb3IgZGlmZmVyZW50IHRlYW0gdXNlIHRlbXBvcmFyaWx5ICovCglzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlcjsJLyogIEZvciBDRS9OSUMgdGVhbSAqLwoJc3RydWN0IHJ0bDgxOTJjZF9wcml2ICpwcml2OwkvKiAgRm9yIEFQL0FEU0wgdGVhbSAqLwoJLyogIFdIZW4geW91IHVzZSBhYm92ZSBwb2ludGVycywgdGhleSBtdXN0IGJlIGluaXRpYWxpemVkLiAqLwoJYm9vbAlvZG1fcmVhZHk7CgoJc3RydWN0IHJ0bDgxOTJjZF9wcml2ICpmYWtlX3ByaXY7Cgl1NjQJRGVidWdDb21wb25lbnRzOwoJdTMyCURlYnVnTGV2ZWw7CgovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCglib29sCWJDY2tIaWdoUG93ZXI7Cgl1OAlSRlBhdGhSeEVuYWJsZTsJCS8qICBPRE1fQ01OSU5GT19SRlBBVEhfRU5BQkxFICovCgl1OAlDb250cm9sQ2hhbm5lbDsKLyogIE9ETSBIQU5ETEUsIERSSVZFUiBORUVEUyBOT1QgVE8gSE9PSy0tLS0tLSAqLwoKLyogMSAgQ09NTU9OIElORk9STUFUSU9OICovCgkvKiAgSW5pdCBWYWx1ZSAqLwovKiBIT09LIEJFRk9SRSBSRUcgSU5JVC0tLS0tLS0tLS0tICovCgkvKiAgT0RNIFBsYXRmb3JtIGluZm8gQVAvQURTTC9DRS9NUCA9IDEvMi8zLzQgKi8KCXU4CVN1cHBvcnRQbGF0Zm9ybTsKCS8qICBPRE0gU3VwcG9ydCBBYmlsaXR5IERJRy9SQVRSL1RYX1BXUl9UUkFDSy8goUuhSyA9IDEvMi8zL6FLICovCgl1MzIJU3VwcG9ydEFiaWxpdHk7CgkvKiAgT0RNIFBDSUUvVVNCL1NESU8vR1NQSSA9IDAvMS8yLzMgKi8KCXU4CVN1cHBvcnRJbnRlcmZhY2U7CgkvKiAgT0RNIGNvbXBvc2l0ZSBvciBpbmRlcGVuZGVudC4gQml0IG9yaWVudGVkLyA5MkMrOTJEKyAuLi4uIG9yIGFueQoJICogIG90aGVyIHR5cGUgPSAxLzIvMy8uLi4gKi8KCXUzMglTdXBwb3J0SUNUeXBlOwoJLyogIEN1dCBWZXJzaW9uIFRlc3RDaGlwL0EtY3V0L0ItY3V0Li4uID0gMC8xLzIvMy8uLi4gKi8KCXU4CUN1dFZlcnNpb247CgkvKiAgRmFiIFZlcnNpb24gVFNNQy9VTUMgPSAwLzEgKi8KCXU4CUZhYlZlcnNpb247CgkvKiAgUkYgVHlwZSA0VDRSLzNUM1IvMlQyUi8xVDJSLzFUMVIvLi4uICovCgl1OAlSRlR5cGU7CgkvKiAgQm9hcmQgVHlwZSBOb3JtYWwvSGlnaFBvd2VyL01pbmlDYXJkL1NMSU0vQ29tYm8vLiA9IDAvMS8yLzMvNC8uICovCgl1OAlCb2FyZFR5cGU7CgkvKiAgd2l0aCBleHRlcm5hbCBMTkEgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0TE5BOwoJLyogIHdpdGggZXh0ZXJuYWwgUEEgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0UEE7CgkvKiAgd2l0aCBleHRlcm5hbCBUUlNXICBOTy9ZZXMgPSAwLzEgKi8KCXU4CUV4dFRSU1c7Cgl1OAlQYXRjaElEOyAvKiBDdXN0b21lciBJRCAqLwoJYm9vbAliSW5IY3RUZXN0OwoJYm9vbAliV0lGSVRlc3Q7CgoJYm9vbAliRHVhbE1hY1NtYXJ0Q29uY3VycmVudDsKCXUzMglCS19TdXBwb3J0QWJpbGl0eTsKCXU4CUFudERpdlR5cGU7Ci8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCgkvKiAgRHluYW1pYyBWYWx1ZSAqLwovKiAgUE9JTlRFUiBSRUZFUkVOQ0UtLS0tLS0tLS0tLSAqLwoKCXU4CXU4X3RlbXA7Cglib29sCWJvb2xfdGVtcDsKCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyX3RlbXA7CgoJLyogIE1BQyBQSFkgTW9kZSBTTVNQL0RNU1AvRE1EUCA9IDAvMS8yICovCgl1OAkqcE1hY1BoeU1vZGU7CgkvKiBUWCBVbmljYXN0IGJ5dGUgY291bnQgKi8KCXU2NAkqcE51bVR4Qnl0ZXNVbmljYXN0OwoJLyogUlggVW5pY2FzdCBieXRlIGNvdW50ICovCgl1NjQJKnBOdW1SeEJ5dGVzVW5pY2FzdDsKCS8qICBXaXJlbGVzcyBtb2RlIEIvRy9BL04gPSBCSVQwL0JJVDEvQklUMi9CSVQzICovCgl1OAkqcFdpcmVsZXNzTW9kZTsgLyogT0RNX1dJUkVMRVNTX01PREVfRSAqLwoJLyogIEZyZXF1ZW5jZSBiYW5kIDIuNEcvNUcgPSAwLzEgKi8KCXU4CSpwQmFuZFR5cGU7CgkvKiAgU2Vjb25kYXJ5IGNoYW5uZWwgb2Zmc2V0IGRvbid0X2NhcmUvYmVsb3cvYWJvdmUgPSAwLzEvMiAqLwoJdTgJKnBTZWNDaE9mZnNldDsKCS8qICBTZWN1cml0eSBtb2RlIE9wZW4vV0VQL0FFUy9US0lQID0gMC8xLzIvMyAqLwoJdTgJKnBTZWN1cml0eTsKCS8qICBCVyBpbmZvIDIwTS80ME0vODBNID0gMC8xLzIgKi8KCXU4CSpwQmFuZFdpZHRoOwoJLyogIENlbnRyYWwgY2hhbm5lbCBsb2NhdGlvbiBDaDEvQ2gyLy4uLi4gKi8KCXU4CSpwQ2hhbm5lbDsJLyogY2VudHJhbCBjaGFubmVsIG51bWJlciAqLwoJLyogIENvbW1vbiBpbmZvIGZvciA5MkQgRE1TUCAqLwoKCWJvb2wJKnBiR2V0VmFsdWVGcm9tT3RoZXJNYWM7CglzdHJ1Y3QgYWRhcHRlciAqKnBCdWRkeUFkYXB0ZXI7Cglib29sCSpwYk1hc3Rlck9mRE1TUDsgLyogTUFDMDogbWFzdGVyLCBNQUMxOiBzbGF2ZSAqLwoJLyogIENvbW1vbiBpbmZvIGZvciBTdGF0dXMgKi8KCWJvb2wJKnBiU2NhbkluUHJvY2VzczsKCWJvb2wJKnBiUG93ZXJTYXZpbmc7CgkvKiAgQ0NBIFBhdGggMi1wYXRoL3BhdGgtQS9wYXRoLUIgPSAwLzEvMjsgdXNpbmcgT0RNX0NDQV9QQVRIX0UuICovCgl1OAkqcE9uZVBhdGhDQ0E7CgkvKiBwTWdudEluZm8tPkFudGVubmFUZXN0ICovCgl1OAkqcEFudGVubmFUZXN0OwoJYm9vbAkqcGJOZXRfY2xvc2VkOwovKiAgUE9JTlRFUiBSRUZFUkVOQ0UtLS0tLS0tLS0tLSAqLwoJLyogICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCglib29sCWJXSUZJX0RpcmVjdDsKCWJvb2wJYldJRklfRGlzcGxheTsKCWJvb2wJYkxpbmtlZDsKCXU4CVJTU0lfTWluOwoJdTgJSW50ZXJmYWNlSW5kZXg7IC8qICBBZGQgZm9yIDkyRCAgZHVhbCBNQUM6IDAtLU1hYzAgMS0tTWFjMSAqLwoJYm9vbAliSXNNUENoaXA7Cglib29sCWJPbmVFbnRyeU9ubHk7CgkvKiAgQ29tbW9uIGluZm8gZm9yIEJURE0gKi8KCWJvb2wJYkJ0RGlzYWJsZWQ7CS8qICBCVCBpcyBkaXNhYmxlZCAqLwoJYm9vbAliQnRIc09wZXJhdGlvbjsJLyogIEJUIEhTIG1vZGUgaXMgdW5kZXIgcHJvZ3Jlc3MgKi8KCXU4CWJ0SHNEaWdWYWw7CS8qICB1c2UgQlQgcnNzaSB0byBkZWNpZGUgdGhlIERJRyB2YWx1ZSAqLwoJYm9vbAliQnREaXNhYmxlRWRjYVR1cmJvOy8qIFVuZGVyIHNvbWUgY29uZGl0aW9uLCBkb24ndCBlbmFibGUgdGhlCgkJCQkgICAgICogRURDQSBUdXJibyAqLwoJYm9vbAliQnRCdXN5OwkJCS8qICBCVCBpcyBidXN5LiAqLwovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSAqLwoKCS8qIDIgRGVmaW5lIFNUQSBpbmZvLiAqLwoJLyogIF9PRE1fU1RBX0lORk8gKi8KCS8qICBGb3IgTVAsIHdlIG5lZWQgdG8gcmVkdWNlIG9uZSBhcnJheSBwb2ludGVyIGZvciBkZWZhdWx0IHBvcnQuPz8gKi8KCXN0cnVjdCBzdGFfaW5mbyAqcE9ETV9TdGFJbmZvW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCgl1MTYJQ3Vycm1pblJwdFRpbWU7CglzdHJ1Y3Qgb2RtX3JhX2luZm8gUkFJbmZvW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsgLyogVXNlIE1hY0lEIGFzCgkJCSogYXJyYXkgaW5kZXguIFNUQSBNYWNJRD0wLAoJCQkqIFZXaUZpIENsaWVudCBNYWNJRD17MSwgT0RNX0FTU09DSUFURV9FTlRSWV9OVU0tMX0gKi8KCS8qICAqLwoJLyogIDIwMTIvMDIvMTQgTUggQWRkIHRvIHNoYXJlIDg4RSByYSB3aXRoIG90aGVyIFNXIHRlYW0uICovCgkvKiAgV2UgbmVlZCB0byBjb2xlbGN0IGFsbCBzdXBwb3J0IGFiaWxpdCB0byBhIHByb3BlciBhcmVhLiAqLwoJLyogICovCglib29sCVJhU3VwcG9ydDg4RTsKCgkvKiAgRGVmaW5lIC4uLi4uLi4uLi4uICovCgoJLyogIExhdGVzdCBwYWNrZXQgcGh5IGluZm8gKE9ETSB3cml0ZSkgKi8KCXN0cnVjdCBvZG1fcGh5X2RiZ19pbmZvIFBoeURiZ0luZm87CgoJLyogIExhdGVzdCBwYWNrZXQgcGh5IGluZm8gKE9ETSB3cml0ZSkgKi8KCXN0cnVjdCBvZG1fbWFjX3N0YXR1c19pbmZvICpwTWFjSW5mbzsKCgkvKiAgRGlmZmVyZW50IFRlYW0gaW5kZXBlbmR0IHN0cnVjdHVyZT8/ICovCgoJLyogT0RNIFN0cnVjdHVyZSAqLwoJc3RydWN0IGZhc3RfYW50X3RyYWluIERNX0ZhdFRhYmxlOwoJc3RydWN0IHJ0d19kaWcJRE1fRGlnVGFibGU7CglzdHJ1Y3QgcnRsX3BzCURNX1BTVGFibGU7CglzdHJ1Y3QgcnhfaHBjCURNX1JYSFBfVGFibGU7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgRmFsc2VBbG1DbnQ7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgRmxhc2VBbG1DbnRCdWRkeUFkYXB0ZXI7CglzdHJ1Y3Qgc3dfYW50X3N3aXRjaCBETV9TV0FUX1RhYmxlOwoJYm9vbAkJUlNTSV90ZXN0OwoKCXN0cnVjdCBlZGNhX3R1cmJvIERNX0VEQ0FfVGFibGU7Cgl1MzIJCVdNTUVEQ0FfQkU7CgkvKiAgQ29weSBmcm9tIFNENCBzdHJ1Y3R1cmUgKi8KCS8qICAqLwoJLyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgkvKiAgKi8KCglib29sCSpwYkRyaXZlclN0b3BwZWQ7Cglib29sCSpwYkRyaXZlcklzR29pbmdUb1BucFNldFBvd2VyU2xlZXA7Cglib29sCSpwaW5pdF9hZHB0X2luX3Byb2dyZXNzOwoKCS8qIFBTRCAqLwoJYm9vbAliVXNlckFzc2lnbkxldmVsOwoJc3RydWN0IHRpbWVyX2xpc3QgUFNEVGltZXI7Cgl1OAlSU1NJX0JUOwkJCS8qIGNvbWUgZnJvbSBCVCAqLwoJYm9vbAliUFNEaW5Qcm9jZXNzOwoJYm9vbAliRE1Jbml0aWFsR2FpbkVuYWJsZTsKCgkvKiBmb3IgcmF0ZSBhZGFwdGl2ZSwgaW4gZmFjdCwgIDg4Yy85MmMgZncgd2lsbCBoYW5kbGUgdGhpcyAqLwoJdTgJYlVzZVJBTWFzazsKCglzdHJ1Y3Qgb2RtX3JhdGVfYWRhcHQgUmF0ZUFkYXB0aXZlOwoKCXN0cnVjdCBvZG1fcmZfY2FsIFJGQ2FsaWJyYXRlSW5mbzsKCgkvKiAgVFggcG93ZXIgdHJhY2tpbmcgKi8KCXU4CUJiU3dpbmdJZHhPZmRtOwoJdTgJQmJTd2luZ0lkeE9mZG1DdXJyZW50OwoJdTgJQmJTd2luZ0lkeE9mZG1CYXNlOwoJYm9vbAlCYlN3aW5nRmxhZ09mZG07Cgl1OAlCYlN3aW5nSWR4Q2NrOwoJdTgJQmJTd2luZ0lkeENja0N1cnJlbnQ7Cgl1OAlCYlN3aW5nSWR4Q2NrQmFzZTsKCWJvb2wJQmJTd2luZ0ZsYWdDY2s7Cgl1OAkqbXBfbW9kZTsKCS8qICBPRE0gc3lzdGVtIHJlc291cmNlLiAqLwoKCS8qICBPRE0gcmVsYXRpdmUgdGltZS4gKi8KCXN0cnVjdCB0aW1lcl9saXN0IFBhdGhEaXZTd2l0Y2hUaW1lcjsKCS8qIDIwMTEuMDkuMjcgYWRkIGZvciBQYXRoIERpdmVyc2l0eSAqLwoJc3RydWN0IHRpbWVyX2xpc3QgQ0NLUGF0aERpdmVyc2l0eVRpbWVyOwoJc3RydWN0IHRpbWVyX2xpc3QgRmFzdEFudFRyYWluaW5nVGltZXI7Cn07CQkvKiAgRE1fRHluYW1pY19NZWNoYW5pc21fU3RydWN0dXJlICovCgojZGVmaW5lIE9ETV9SRl9QQVRIX01BWCAzCgplbnVtIE9ETV9SRl9DT05URU5UIHsKCW9kbV9yYWRpb2FfdHh0ID0gMHgxMDAwLAoJb2RtX3JhZGlvYl90eHQgPSAweDEwMDEsCglvZG1fcmFkaW9jX3R4dCA9IDB4MTAwMiwKCW9kbV9yYWRpb2RfdHh0ID0gMHgxMDAzCn07CgovKiAgU3RhdHVzIGNvZGUgKi8KZW51bSBydF9zdGF0dXMgewoJUlRfU1RBVFVTX1NVQ0NFU1MsCglSVF9TVEFUVVNfRkFJTFVSRSwKCVJUX1NUQVRVU19QRU5ESU5HLAoJUlRfU1RBVFVTX1JFU09VUkNFLAoJUlRfU1RBVFVTX0lOVkFMSURfQ09OVEVYVCwKCVJUX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiwKCVJUX1NUQVRVU19OT1RfU1VQUE9SVCwKCVJUX1NUQVRVU19PU19BUElfRkFJTEVELAp9OwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRElHICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKZW51bSBkbV9kaWdfb3AgewoJUlRfVFlQRV9USFJFU0hfSElHSAk9IDAsCglSVF9UWVBFX1RIUkVTSF9MT1cJPSAxLAoJUlRfVFlQRV9CQUNLT0ZGCQk9IDIsCglSVF9UWVBFX1JYX0dBSU5fTUlOCT0gMywKCVJUX1RZUEVfUlhfR0FJTl9NQVgJPSA0LAoJUlRfVFlQRV9FTkFCTEUJCT0gNSwKCVJUX1RZUEVfRElTQUJMRQkJPSA2LAoJRElHX09QX1RZUEVfTUFYCn07CgojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0hJR0gJNDAKI2RlZmluZQkJRE1fRElHX1RIUkVTSF9MT1cJMzUKCiNkZWZpbmUJCURNX1NDQU5fUlNTSV9USAkJMHgxNCAvKiBzY2FuIHJldHVybiBpc3N1ZSBmb3IgTEMgKi8KCgojZGVmaW5lCQlETV9mYWxzZV9BTEFSTV9USFJFU0hfTE9XCTQwMAojZGVmaW5lCQlETV9mYWxzZV9BTEFSTV9USFJFU0hfSElHSAkxMDAwCgojZGVmaW5lCQlETV9ESUdfTUFYX05JQwkJCTB4NGUKI2RlZmluZQkJRE1fRElHX01JTl9OSUMJCQkweDFlIC8qIDB4MjIvMHgxYyAqLwoKI2RlZmluZQkJRE1fRElHX01BWF9BUAkJCTB4MzIKI2RlZmluZQkJRE1fRElHX01JTl9BUAkJCTB4MjAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDX0hQCQkweDQ2CiNkZWZpbmUJCURNX0RJR19NSU5fTklDX0hQCQkweDJlCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQX0hQCQkweDQyCiNkZWZpbmUJCURNX0RJR19NSU5fQVBfSFAJCTB4MzAKCi8qIHZpdmkgOTJjJjkyZCBoYXMgZGlmZmVyZW50IGRlZmluaXRpb24sIDIwMTEwNTA0ICovCi8qIHRoaXMgaXMgZm9yIDkyYyAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgwCQkJMHgyMDAvKiAweDIwICovCiNkZWZpbmUJCURNX0RJR19GQV9USDEJCQkweDMwMC8qIDB4MTAwICovCiNkZWZpbmUJCURNX0RJR19GQV9USDIJCQkweDQwMC8qIDB4MjAwICovCi8qIHRoaXMgaXMgZm9yIDkyZCAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgwXzkyRAkJMHgxMDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMV85MkQJCTB4NDAwCiNkZWZpbmUJCURNX0RJR19GQV9USDJfOTJECQkweDYwMAoKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfTUFYCQkxMgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NSU4JCS00CiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX0RFRkFVTFQJCTEwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBBR0MgUlggSGlnaCBQb3dlciBNb2RlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojZGVmaW5lCSAgTE5BX0xvd19HYWluXzEJCTB4NjQKI2RlZmluZQkgIExOQV9Mb3dfR2Fpbl8yCQkweDVBCiNkZWZpbmUJICBMTkFfTG93X0dhaW5fMwkJMHg1OAoKI2RlZmluZQkgIEZBX1JYSFBfVEgxCQkJNTAwMAojZGVmaW5lCSAgRkFfUlhIUF9USDIJCQkxNTAwCiNkZWZpbmUJICBGQV9SWEhQX1RIMwkJCTgwMAojZGVmaW5lCSAgRkFfUlhIUF9USDQJCQk2MDAKI2RlZmluZQkgIEZBX1JYSFBfVEg1CQkJNTAwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBFRENBICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRHluYW1pYyBUeCBQb3dlciAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRHluYW1pYyBUeCBQb3dlciBDb250cm9sIFRocmVzaG9sZCAqLwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyCTc0CiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEJNjcKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfQVAJCTB4M0YKCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX05vcm1hbAkJMAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDEJCTEKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTGV2ZWwyCQkyCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMQkJMwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9CVDIJCTQKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTUJCTUKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMzUJCTYKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfNTAJCTcKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfNzAJCTgKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTAwCQk5CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBSYXRlIEFkYXB0aXZlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojZGVmaW5lCQlETV9SQVRSX1NUQV9JTklUCQkwCiNkZWZpbmUJCURNX1JBVFJfU1RBX0hJR0gJCTEKI2RlZmluZQkJRE1fUkFUUl9TVEFfTUlERExFCQkyCiNkZWZpbmUJCURNX1JBVFJfU1RBX0xPVwkJCTMKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEJCIFBvd2VyIFNhdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKZW51bSBkbV8xcl9jY2EgewoJQ0NBXzFSID0gMCwKCUNDQV8yUiA9IDEsCglDQ0FfTUFYID0gMiwKfTsKCmVudW0gZG1fcmYgewoJUkZfU2F2ZSA9IDAsCglSRl9Ob3JtYWwgPSAxLAoJUkZfTUFYID0gMiwKfTsKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFudGVubmEgRGl2ZXJzaXR5ICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwplbnVtIGRtX3N3YXMgewoJQW50ZW5uYV9BID0gMSwKCUFudGVubmFfQiA9IDIsCglBbnRlbm5hX01BWCA9IDMsCn07CgovKiAgTWF4aW1hbCBudW1iZXIgb2YgYW50ZW5uYSBkZXRlY3Rpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHBlcmZvcm0uICovCiNkZWZpbmUJTUFYX0FOVEVOTkFfREVURUNUSU9OX0NOVAkxMAoKLyogIEV4dGVybiBHbG9iYWwgVmFyaWFibGVzLiAqLwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkMJMzcKI2RlZmluZQlPRkRNX1RBQkxFX1NJWkVfOTJECTQzCiNkZWZpbmUJQ0NLX1RBQkxFX1NJWkUJCTMzCgpleHRlcm4JdTMyIE9GRE1Td2luZ1RhYmxlW09GRE1fVEFCTEVfU0laRV85MkRdOwpleHRlcm4JdTggQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxM1tDQ0tfVEFCTEVfU0laRV1bOF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMTRbQ0NLX1RBQkxFX1NJWkVdWzhdOwoKLyogIGNoZWNrIFN0YSBwb2ludGVyIHZhbGlkIG9yIG5vdCAqLwojZGVmaW5lIElTX1NUQV9WQUxJRChwU3RhKQkJKHBTdGEpCi8qICAyMDEwMDUxNCBKb3NlcGg6IEFkZCBkZWZpbml0aW9uIGZvciBhbnRlbm5hIHN3aXRjaGluZyB0ZXN0IGFmdGVyIGxpbmsuICovCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHRoZSBzdGVwcy4gKi8KLyogIEluIFNXQVdfU1RFUF9QRUFLLCBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGFudGVubmEgYW5kIGxpc3RlbiB0byB0aGUKICogIHNpZ25hbCBvbiB0aGUgYWlyLiAqLwovKiAgSW4gU1dBV19TVEVQX0RFVEVSTUlORSwgZHJpdmVyIGp1c3QgY29tcGFyZXMgdGhlIHNpZ25hbCBjYXB0dXJlZCBpbgogKiAgU1dBV19TVEVQX1BFQUsgKi8KLyogIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBhbnRlbm5hLiAqLwojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lIGRtX0NoZWNrVFhQb3dlclRyYWNraW5nIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjawojZGVmaW5lIGRtX1JGX1NhdmluZwlPRE1fUkZfU2F2aW5nCgp2b2lkIE9ETV9SRl9TYXZpbmcoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IGJGb3JjZUluTm9ybWFsKTsKdm9pZCBPRE1fVFhQb3dlclRyYWNraW5nQ2hlY2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIG9kbV9ESUdieVJTU0lfTFBTKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKdm9pZCBPRE1fV3JpdGVfQ0NLX0NDQV9UaHJlcyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggQ3VyQ0NLX0NDQVRocmVzKTsKYm9vbCBPRE1fUkFTdGF0ZUNoZWNrKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCBzMzIgUlNTSSwKCQkgICAgICBib29sIGJGb3JjZVVwZGF0ZSwgdTggKnBSQVRSU3RhdGUpOwp1MzIgQ29udmVydFRvX2RCKHUzMiBWYWx1ZSk7CnUzMiBPRE1fR2V0X1JhdGVfQml0bWFwKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgbWFjaWQsCgkJCXUzMiByYV9tYXNrLCB1OCByc3NpX2xldmVsKTsKdm9pZCBPRE1fQ21uSW5mb0luaXQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywgdTMyIFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb1VwZGF0ZShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTMyIENtbkluZm8sIHU2NCBWYWx1ZSk7CnZvaWQgT0RNX0NtbkluZm9Ib29rKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLAoJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sIHZvaWQgKnBWYWx1ZSk7CnZvaWQgT0RNX0NtbkluZm9QdHJBcnJheUhvb2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sCgkJCSAgICAgdTE2IEluZGV4LCB2b2lkICpwVmFsdWUpOwp2b2lkIE9ETV9ETUluaXQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9ETVdhdGNoZG9nKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKdm9pZCBPRE1fV3JpdGVfRElHKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBDdXJyZW50SUdJKTsKCiNlbmRpZgo=