LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAogKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCiAqCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKI2lmbmRlZglfX0hBTERNT1VUU1JDX0hfXwojZGVmaW5lIF9fSEFMRE1PVVRTUkNfSF9fCgovKiAgRGVmaW5pdGlvbiAqLwovKiAgRGVmaW5lIGFsbCB0ZWFtIHN1cHBvcnQgYWJpbGl0eS4gKi8KCi8qICBEZWZpbmUgZm9yIGFsbCB0ZWFtcy4gUGxlYXNlIERlZmluZSB0aGUgY29uc3RhbnQgaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCi8qICBEZWZpbmUgT0RNIFNXIHRlYW0gc3VwcG9ydCBmbGFnLiAqLwoKLyogIEFudGVubmEgU3dpdGNoIFJlbGF0aXZlIERlZmluaXRpb24uICovCgovKiAgQWRkIG5ldyBmdW5jdGlvbiBTd0FudERpdkNoZWNrODE5MkMoKS4gKi8KLyogIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2YgQW50ZW5uYSBkaXZlcnNpdHkgZnVuY3Rpb24gYmVmb3JlIGxpbmsuICovCi8qICBNYWlubHksIGl0IGp1c3QgcmV0YWlucyBsYXN0IHNjYW4gcmVzdWx0IGFuZCBzY2FuIGFnYWluLiAqLwovKiAgQWZ0ZXIgdGhhdCwgaXQgY29tcGFyZXMgdGhlIHNjYW4gcmVzdWx0IHRvIHNlZSB3aGljaCBvbmUgZ2V0cyBiZXR0ZXIKICogIFJTU0kuIEl0IHNlbGVjdHMgYW50ZW5uYSB3aXRoIGJldHRlciByZWNlaXZpbmcgcG93ZXIgYW5kIHJldHVybnMgYmV0dGVyCiAqICBzY2FuIHJlc3VsdC4gKi8KCiNkZWZpbmUJVFBfTU9ERQkJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkJMQoKLyogMyBUeCBQb3dlciBUcmFja2luZyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURQS19ERUxUQV9NQVBQSU5HX05VTQkxMwojZGVmaW5lCQlpbmRleF9tYXBwaW5nX0hQX05VTQkxNQoKCi8qICAqLwovKiAzIFBTRCBIYW5kbGVyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiNkZWZpbmUJQUZIX1BTRAkJMQkvKiAwOm5vcm1hbCBQU0Qgc2NhbiwgMTogb25seSBkbyAyMCBwdHMgUFNEICovCiNkZWZpbmUJTU9ERV80ME0JMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITQkJMjAgICAvKiAgTWluaW11bSBjaGFubmVsIG51bWJlciBmb3IgQlQgQUZIICovCiNkZWZpbmUJU0lSX1NURVBfU0laRQkzCiNkZWZpbmUgU21vb3RoX1NpemVfMQk1CiNkZWZpbmUJU21vb3RoX1RIXzEJMwojZGVmaW5lIFNtb290aF9TaXplXzIJMTAKI2RlZmluZQlTbW9vdGhfVEhfMgk0CiNkZWZpbmUgU21vb3RoX1NpemVfMwkyMAojZGVmaW5lCVNtb290aF9USF8zCTQKI2RlZmluZSBTbW9vdGhfU3RlcF9TaXplIDUKI2RlZmluZQlBZGFwdGl2ZV9TSVIJMQojZGVmaW5lCVBTRF9SRVNDQU4JNAojZGVmaW5lCVBTRF9TQ0FOX0lOVEVSVkFMCTcwMCAvKiBtcyAqLwoKLyogODcyM0EgSGlnaCBQb3dlciBJR0kgU2V0dGluZyAqLwojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQJMHgyMgojZGVmaW5lIERNX0RJR19HbW9kZV9ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQgMHgyOAojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9USFJFU0hPTEQJMHgzYQoKLyogIExQUyBkZWZpbmUgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgwX0xQUwkJNCAvKiAgNCBpbiBscHMgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgxX0xQUwkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkzMCAvKiAgMzAgbHBzICovCiNkZWZpbmUgUlNTSV9PRkZTRVRfRElHCQkJMHgwNTsKCi8qIEFOVCBUZXN0ICovCiNkZWZpbmUgQU5UVEVTVEFMTAkJMHgwMAkvKiBBbnQgQSBvciBCIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lIEFOVFRFU1RBCQkweDAxCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lIEFOVFRFU1RCCQkweDAyCS8qIEFudCBCIHdpbGwgYmUgdGVzdGluZyAqLwoKLyogIHN0cnVjdHVyZSBhbmQgZGVmaW5lICovCgovKiAgQWRkIGZvciBBUC9BRFNMcHNldWRvIERNIHN0cnVjdHVlciByZXF1aXJlbWVudC4gKi8KLyogIFdlIG5lZWQgdG8gcmVtb3ZlIHRvIG90aGVyIHBvc2l0aW9uPz8/ICovCnN0cnVjdCBydGw4MTkyY2RfcHJpdiB7Cgl1OAkJdGVtcDsKfTsKCnN0cnVjdCBydHdfZGlnIHsKCXU4CQlEaWdfRW5hYmxlX0ZsYWc7Cgl1OAkJRGlnX0V4dF9Qb3J0X1N0YWdlOwoKCWludAkJUnNzaUxvd1RocmVzaDsKCWludAkJUnNzaUhpZ2hUaHJlc2g7CgoJdTMyCQlGQUxvd1RocmVzaDsKCXUzMgkJRkFIaWdoVGhyZXNoOwoKCXU4CQlDdXJTVEFDb25uZWN0U3RhdGU7Cgl1OAkJUHJlU1RBQ29ubmVjdFN0YXRlOwoJdTgJCUN1ck11bHRpU1RBQ29ubmVjdFN0YXRlOwoKCXU4CQlQcmVJR1ZhbHVlOwoJdTgJCUN1cklHVmFsdWU7Cgl1OAkJQmFja3VwSUdWYWx1ZTsKCglzOAkJQmFja29mZlZhbDsKCXM4CQlCYWNrb2ZmVmFsX3JhbmdlX21heDsKCXM4CQlCYWNrb2ZmVmFsX3JhbmdlX21pbjsKCXU4CQlyeF9nYWluX3JhbmdlX21heDsKCXU4CQlyeF9nYWluX3JhbmdlX21pbjsKCXU4CQlSc3NpX3ZhbF9taW47CgoJdTgJCVByZUNDS19DQ0FUaHJlczsKCXU4CQlDdXJDQ0tfQ0NBVGhyZXM7Cgl1OAkJUHJlQ0NLUERTdGF0ZTsKCXU4CQlDdXJDQ0tQRFN0YXRlOwoKCXU4CQlMYXJnZUZBSGl0OwoJdTgJCUZvcmJpZGRlbklHSTsKCXUzMgkJUmVjb3Zlcl9jbnQ7CgoJdTgJCURJR19EeW5hbWljX01JTl8wOwoJdTgJCURJR19EeW5hbWljX01JTl8xOwoJYm9vbAkJYk1lZGlhQ29ubmVjdF8wOwoJYm9vbAkJYk1lZGlhQ29ubmVjdF8xOwoKCXUzMgkJQW50RGl2X1JTU0lfbWF4OwoJdTMyCQlSU1NJX21heDsKfTsKCnN0cnVjdCBydGxfcHMgewoJdTgJCVByZUNDQVN0YXRlOwoJdTgJCUN1ckNDQVN0YXRlOwoKCXU4CQlQcmVSRlN0YXRlOwoJdTgJCUN1clJGU3RhdGU7CgoJaW50CQkgICAgUnNzaV92YWxfbWluOwoKCXU4CQlpbml0aWFsaXplOwoJdTMyCQlSZWc4NzQsUmVnQzcwLFJlZzg1QyxSZWdBNzQ7Cgp9OwoKc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIHsKCXUzMglDbnRfUGFyaXR5X0ZhaWw7Cgl1MzIJQ250X1JhdGVfSWxsZWdhbDsKCXUzMglDbnRfQ3JjOF9mYWlsOwoJdTMyCUNudF9NY3NfZmFpbDsKCXUzMglDbnRfT2ZkbV9mYWlsOwoJdTMyCUNudF9DY2tfZmFpbDsKCXUzMglDbnRfYWxsOwoJdTMyCUNudF9GYXN0X0ZzeW5jOwoJdTMyCUNudF9TQl9TZWFyY2hfZmFpbDsKCXUzMglDbnRfT0ZETV9DQ0E7Cgl1MzIJQ250X0NDS19DQ0E7Cgl1MzIJQ250X0NDQV9hbGw7Cgl1MzIJQ250X0JXX1VTQzsJLyogR2FyeSAqLwoJdTMyCUNudF9CV19MU0M7CS8qIEdhcnkgKi8KfTsKCnN0cnVjdCBkeW5fcHJpbWFyeV9jY2EgewoJdTgJCVByaUNDQV9mbGFnOwoJdTgJCWludGZfZmxhZzsKCXU4CQlpbnRmX3R5cGU7Cgl1OAkJRHVwUlRTX2ZsYWc7Cgl1OAkJTW9uaXRvcl9mbGFnOwp9OwoKc3RydWN0IHJ4X2hwYyB7Cgl1OAkJUlhIUF9mbGFnOwoJdTgJCVBTRF9mdW5jX3RyaWdnZXI7Cgl1OAkJUFNEX2JpdG1hcF9SWEhQWzgwXTsKCXU4CQlQcmVfSUdJOwoJdTgJCUN1cl9JR0k7Cgl1OAkJUHJlX3B3X3RoOwoJdTgJCUN1cl9wd190aDsKCWJvb2wJCUZpcnN0X3RpbWVfZW50ZXI7Cglib29sCQlSWEhQX2VuYWJsZTsKCXU4CQlUUF9Nb2RlOwoJc3RydWN0IHRpbWVyX2xpc3QgUFNEVGltZXI7Cn07CgojZGVmaW5lIEFTU09DSUFURV9FTlRSWV9OVU0JMzIgLyogIE1heCBzaXplIG9mIEFzb2NFbnRyeVtdLiAqLwojZGVmaW5lCU9ETV9BU1NPQ0lBVEVfRU5UUllfTlVNCUFTU09DSUFURV9FTlRSWV9OVU0KCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvCiAqICB0aGUgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluCiAqICBTV0FXX1NURVBfUEVBSyB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiAgc3dpdGNoIGFudGVubmEuICovCgojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lCVRQX01PREUJCQkwCiNkZWZpbmUJUlNTSV9NT0RFCQkxCiNkZWZpbmUJVFJBRkZJQ19MT1cJCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJCTEKCnN0cnVjdCBzd19hbnRfc3dpdGNoIHsKCXU4CXRyeV9mbGFnOwoJczMyCVByZVJTU0k7Cgl1OAlDdXJBbnRlbm5hOwoJdTgJUHJlQW50ZW5uYTsKCXU4CVJTU0lfVHJ5aW5nOwoJdTgJVGVzdE1vZGU7Cgl1OAliVHJpZ2dlckFudGVubmFTd2l0Y2g7Cgl1OAlTZWxlY3RBbnRlbm5hTWFwOwoJdTgJUlNTSV90YXJnZXQ7CgoJLyogIEJlZm9yZSBsaW5rIEFudGVubmEgU3dpdGNoIGNoZWNrICovCgl1OAlTV0FTX05vTGlua19TdGF0ZTsKCXUzMglTV0FTX05vTGlua19CS19SZWc4NjA7Cglib29sCUFOVEFfT047CS8qIFRvIGluZGljYXRlIEFudCBBIGlzIG9yIG5vdCAqLwoJYm9vbAlBTlRCX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQiBpcyBvbiBvciBub3QgKi8KCglzMzIJUlNTSV9zdW1fQTsKCXMzMglSU1NJX3N1bV9COwoJczMyCVJTU0lfY250X0E7CglzMzIJUlNTSV9jbnRfQjsKCXU2NAlsYXN0VHhPa0NudDsKCXU2NAlsYXN0UnhPa0NudDsKCXU2NAlUWEJ5dGVDbnRfQTsKCXU2NAlUWEJ5dGVDbnRfQjsKCXU2NAlSWEJ5dGVDbnRfQTsKCXU2NAlSWEJ5dGVDbnRfQjsKCXU4CVRyYWZmaWNMb2FkOwoJc3RydWN0IHRpbWVyX2xpc3QgU3dBbnRlbm5hU3dpdGNoVGltZXI7CgkvKiBIeWJyaWQgQW50ZW5uYSBEaXZlcnNpdHkgKi8KCXUzMglDQ0tfQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQ0NLX0FudDJfQ250W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU9GRE1fQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJT0ZETV9BbnQyX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglSU1NJX0FudDFfU3VtW0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCVJTU0lfQW50Ml9TdW1bQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlUeEFudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVRhcmdldFNUQTsKCXU4CWFudHNlbDsKCXU4CVJ4SWRsZUFudDsKfTsKCnN0cnVjdCBlZGNhX3R1cmJvIHsKCWJvb2wgYkN1cnJlbnRUdXJib0VEQ0E7Cglib29sIGJJc0N1clJETFN0YXRlOwoJdTMyCXBydl90cmFmZmljX2lkeDsgLyogIGVkY2EgdHVyYm8gKi8KfTsKCnN0cnVjdCBvZG1fcmF0ZV9hZGFwdCB7Cgl1OAlUeXBlOwkJLyogIERNX1R5cGVfQnlGVy9ETV9UeXBlX0J5RHJpdmVyICovCgl1OAlIaWdoUlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPiBIaWdoUlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfSElHSCAqLwoJdTgJTG93UlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPD0gTG93UlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfTE9XICovCgl1OAlSQVRSU3RhdGU7CS8qICBDdXJyZW50IFJTU0kgbGV2ZWwsIERNX1JBVFJfU1RBX0hJR0gvRE1fUkFUUl9TVEFfTUlERExFL0RNX1JBVFJfU1RBX0xPVyAqLwoJdTMyCUxhc3RSQVRSOwkvKiAgUkFUUiBSZWdpc3RlciBDb250ZW50ICovCn07CgojZGVmaW5lIElRS19NQUNfUkVHX05VTQkJNAojZGVmaW5lIElRS19BRERBX1JFR19OVU0JMTYKI2RlZmluZSBJUUtfQkJfUkVHX05VTV9NQVgJMTAKI2RlZmluZSBJUUtfQkJfUkVHX05VTQkJOQojZGVmaW5lIEhQX1RIRVJNQUxfTlVNCQk4CgojZGVmaW5lIEFWR19USEVSTUFMX05VTQkJOAojZGVmaW5lIElRS19NYXRyaXhfUkVHX05VTQk4CiNkZWZpbmUgSVFLX01hdHJpeF9TZXR0aW5nc19OVU0JMSsyNCsyMQoKI2RlZmluZQlETV9UeXBlX0J5RldpCQkwCiNkZWZpbmUJRE1fVHlwZV9CeURyaXZlcgkxCgovKiAgRGVjbGFyZSBmb3IgY29tbW9uIGluZm8gKi8KCnN0cnVjdCBvZG1fcGh5X3N0YXR1c19pbmZvIHsKCXU4CVJ4UFdEQkFsbDsKCXU4CVNpZ25hbFF1YWxpdHk7CSAvKiAgaW4gMC0xMDAgaW5kZXguICovCgl1OAlSeE1JTU9TaWduYWxRdWFsaXR5W01BWF9QQVRIX05VTV85MkNTXTsgLyogRVZNICovCgl1OAlSeE1JTU9TaWduYWxTdHJlbmd0aFtNQVhfUEFUSF9OVU1fOTJDU107LyogIGluIDB+MTAwIGluZGV4ICovCglzOAlSeFBvd2VyOyAvKiAgaW4gZEJtIFRyYW5zbGF0ZSBmcm9tIFBXZEIgKi8KCXM4CVJlY3ZTaWduYWxQb3dlcjsvKiAgUmVhbCBwb3dlciBpbiBkQm0gZm9yIHRoaXMgcGFja2V0LCBubwoJCQkJICogYmVhdXRpZmljYXRpb24gYW5kIGFnZ3JlZ2F0aW9uLiBLZWVwIHRoaXMgcmF3CgkJCQkgKiBpbmZvIHRvIGJlIHVzZWQgZm9yIHRoZSBvdGhlciBwcm9jZWR1cmVzLiAqLwoJdTgJQlRSeFJTU0lQZXJjZW50YWdlOwoJdTgJU2lnbmFsU3RyZW5ndGg7IC8qICBpbiAwLTEwMCBpbmRleC4gKi8KCXU4CVJ4UHdyW01BWF9QQVRIX05VTV85MkNTXTsvKiBwZXItcGF0aCdzIHB3ZGIgKi8KCXU4CVJ4U05SW01BWF9QQVRIX05VTV85MkNTXTsvKiBwZXItcGF0aCdzIFNOUiAqLwp9OwoKc3RydWN0IG9kbV9waHlfZGJnX2luZm8gewoJLyogT0RNIFdyaXRlLGRlYnVnIGluZm8gKi8KCXM4CVJ4U05SZEJbTUFYX1BBVEhfTlVNXzkyQ1NdOwoJdTY0CU51bVFyeVBoeVN0YXR1czsKCXU2NAlOdW1RcnlQaHlTdGF0dXNDQ0s7Cgl1NjQJTnVtUXJ5UGh5U3RhdHVzT0ZETTsKCS8qIE90aGVycyAqLwoJczMyCVJ4RVZNW01BWF9QQVRIX05VTV85MkNTXTsKfTsKCnN0cnVjdCBvZG1fcGVyX3BrdF9pbmZvIHsKCXM4CVJhdGU7Cgl1OAlTdGF0aW9uSUQ7Cglib29sCWJQYWNrZXRNYXRjaEJTU0lEOwoJYm9vbAliUGFja2V0VG9TZWxmOwoJYm9vbAliUGFja2V0QmVhY29uOwp9OwoKc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gewoJdTgJdGVzdDsKfTsKCmVudW0gb2RtX2FiaWxpdHkgewoJLyogIEJCIFRlYW0gKi8KCU9ETV9ESUcJCQk9IDB4MDAwMDAwMDEsCglPRE1fSElHSF9QT1dFUgkJPSAweDAwMDAwMDAyLAoJT0RNX0NDS19DQ0FfVEgJCT0gMHgwMDAwMDAwNCwKCU9ETV9GQV9TVEFUSVNUSUNTCT0gMHgwMDAwMDAwOCwKCU9ETV9SQU1BU0sJCT0gMHgwMDAwMDAxMCwKCU9ETV9SU1NJX01PTklUT1IJPSAweDAwMDAwMDIwLAoJT0RNX1NXX0FOVERJVgkJPSAweDAwMDAwMDQwLAoJT0RNX0hXX0FOVERJVgkJPSAweDAwMDAwMDgwLAoJT0RNX0JCX1BXUlNWCQk9IDB4MDAwMDAxMDAsCglPRE1fMlRQQVRIRElWCQk9IDB4MDAwMDAyMDAsCglPRE1fMVRQQVRIRElWCQk9IDB4MDAwMDA0MDAsCglPRE1fUFNEMkFGSAkJPSAweDAwMDAwODAwCn07CgovKiAgMjAxMS8yMC8yMCBNSCBGb3IgTVAgZHJpdmVyIFJUX1dMQU5fU1RBID0gIHN0cnVjdCBzdGFfaW5mbyAqLwovKiAgUGxlYXNlIGRlY2xhcmUgYmVsb3cgT0RNIHJlbGF0aXZlIGluZm8gaW4geW91ciBTVEEgaW5mbyBzdHJ1Y3R1cmUuICovCgpzdHJ1Y3Qgb2RtX3N0YV9pbmZvIHsKCS8qICBEcml2ZXIgV3JpdGUgKi8KCWJvb2wJYlVzZWQ7CQkvKiAgcmVjb3JkIHRoZSBzdGEgc3RhdHVzIGxpbmsgb3Igbm90PyAqLwoJdTgJSU9UUGVlcjsJLyogIEVudW0gdmFsdWUuCUhUX0lPVF9QRUVSX0UgKi8KCgkvKiAgT0RNIFdyaXRlICovCgkvKiAxIFBIWV9TVEFUVVNfSU5GTyAqLwoJdTgJUlNTSV9QYXRoWzRdOwkJLyogICovCgl1OAlSU1NJX0F2ZTsKCXU4CVJYRVZNWzRdOwoJdTgJUlhTTlJbNF07Cn07CgovKiAgMjAxMS8xMC8yMCBNSCBEZWZpbmUgQ29tbW9uIGluZm8gZW51bSBmb3IgYWxsIHRlYW0uICovCgplbnVtIG9kbV9jb21tb25faW5mb19kZWYgewoJLyogIEZpeGVkIHZhbHVlOiAqLwoKCS8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCU9ETV9DTU5JTkZPX1BMQVRGT1JNID0gMCwKCU9ETV9DTU5JTkZPX0FCSUxJVFksCQkvKiBPRE1fQUJJTElUWV9FICovCglPRE1fQ01OSU5GT19JTlRFUkZBQ0UsCQkvKiBPRE1fSU5URVJGQUNFX0UgKi8KCU9ETV9DTU5JTkZPX01QX1RFU1RfQ0hJUCwKCU9ETV9DTU5JTkZPX0lDX1RZUEUsCQkvKiBPRE1fSUNfVFlQRV9FICovCglPRE1fQ01OSU5GT19DVVRfVkVSLAkJLyogT0RNX0NVVF9WRVJTSU9OX0UgKi8KCU9ETV9DTU5JTkZPX0ZBQl9WRVIsCQkvKiBPRE1fRkFCX0UgKi8KCU9ETV9DTU5JTkZPX1JGX1RZUEUsCQkvKiBPRE1fUkZfUEFUSF9FIG9yIE9ETV9SRl9UWVBFX0U/ICovCglPRE1fQ01OSU5GT19CT0FSRF9UWVBFLAkJLyogT0RNX0JPQVJEX1RZUEVfRSAqLwoJT0RNX0NNTklORk9fRVhUX0xOQSwJCS8qIHRydWUgKi8KCU9ETV9DTU5JTkZPX0VYVF9QQSwKCU9ETV9DTU5JTkZPX0VYVF9UUlNXLAoJT0RNX0NNTklORk9fUEFUQ0hfSUQsCQkvKiBDVVNUT01FUiBJRCAqLwoJT0RNX0NNTklORk9fQklOSENUX1RFU1QsCglPRE1fQ01OSU5GT19CV0lGSV9URVNULAoJT0RNX0NNTklORk9fU01BUlRfQ09OQ1VSUkVOVCwKCS8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gICovCgoJLyogIER5bmFtaWMgdmFsdWU6ICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICAqLwoJT0RNX0NNTklORk9fTUFDX1BIWV9NT0RFLAkvKiAgT0RNX01BQ19QSFlfTU9ERV9FICovCglPRE1fQ01OSU5GT19UWF9VTkksCglPRE1fQ01OSU5GT19SWF9VTkksCglPRE1fQ01OSU5GT19XTV9NT0RFLAkJLyogIE9ETV9XSVJFTEVTU19NT0RFX0UgKi8KCU9ETV9DTU5JTkZPX0JBTkQsCQkvKiAgT0RNX0JBTkRfVFlQRV9FICovCglPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQsCS8qICBPRE1fU0VDX0NITkxfT0ZGU0VUX0UgKi8KCU9ETV9DTU5JTkZPX1NFQ19NT0RFLAkJLyogIE9ETV9TRUNVUklUWV9FICovCglPRE1fQ01OSU5GT19CVywJCQkvKiAgT0RNX0JXX0UgKi8KCU9ETV9DTU5JTkZPX0NITkwsCgoJT0RNX0NNTklORk9fRE1TUF9HRVRfVkFMVUUsCglPRE1fQ01OSU5GT19CVUREWV9BREFQVE9SLAoJT0RNX0NNTklORk9fRE1TUF9JU19NQVNURVIsCglPRE1fQ01OSU5GT19TQ0FOLAoJT0RNX0NNTklORk9fUE9XRVJfU0FWSU5HLAoJT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBLAkvKiAgT0RNX0NDQV9QQVRIX0UgKi8KCU9ETV9DTU5JTkZPX0RSVl9TVE9QLAoJT0RNX0NNTklORk9fUE5QX0lOLAoJT0RNX0NNTklORk9fSU5JVF9PTiwKCU9ETV9DTU5JTkZPX0FOVF9URVNULAoJT0RNX0NNTklORk9fTkVUX0NMT1NFRCwKCU9ETV9DTU5JTkZPX01QX01PREUsCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSAqLwoJT0RNX0NNTklORk9fV0lGSV9ESVJFQ1QsCglPRE1fQ01OSU5GT19XSUZJX0RJU1BMQVksCglPRE1fQ01OSU5GT19MSU5LLAoJT0RNX0NNTklORk9fUlNTSV9NSU4sCglPRE1fQ01OSU5GT19EQkdfQ09NUCwJCQkvKiAgdTY0ICovCglPRE1fQ01OSU5GT19EQkdfTEVWRUwsCQkJLyogIHUzMiAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0hJR0gsCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JBX1RIUkVTSE9MRF9MT1csCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JGX0FOVEVOTkFfVFlQRSwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRUQsCglPRE1fQ01OSU5GT19CVF9PUEVSQVRJT04sCglPRE1fQ01OSU5GT19CVF9ESUcsCglPRE1fQ01OSU5GT19CVF9CVVNZLAkJCS8qIENoZWNrIEJ0IGlzIHVzaW5nIG9yIG5vdCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRV9FRENBLAovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSovCgoJLyogIER5bmFtaWMgcHRyIGFycmF5IGhvb2sgaXRtcy4gKi8KCU9ETV9DTU5JTkZPX1NUQV9TVEFUVVMsCglPRE1fQ01OSU5GT19QSFlfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFDX1NUQVRVUywKCU9ETV9DTU5JTkZPX01BWCwKfTsKCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBPRE0gc3VwcG9ydCBhYmlsaXR5LiAgT0RNX0NNTklORk9fQUJJTElUWSAqLwoKZW51bSBvZG1fYWJpbGl0eV9kZWYgewoJLyogIEJCIE9ETSBzZWN0aW9uIEJJVCAwLTE1ICovCglPRE1fQkJfRElHCQkJPSBCSVQwLAoJT0RNX0JCX1JBX01BU0sJCQk9IEJJVDEsCglPRE1fQkJfRFlOQU1JQ19UWFBXUgkJPSBCSVQyLAoJT0RNX0JCX0ZBX0NOVAkJCT0gQklUMywKCU9ETV9CQl9SU1NJX01PTklUT1IJCT0gQklUNCwKCU9ETV9CQl9DQ0tfUEQJCQk9IEJJVDUsCglPRE1fQkJfQU5UX0RJVgkJCT0gQklUNiwKCU9ETV9CQl9QV1JfU0FWRQkJCT0gQklUNywKCU9ETV9CQl9QV1JfVFJBCQkJPSBCSVQ4LAoJT0RNX0JCX1JBVEVfQURBUFRJVkUJCT0gQklUOSwKCU9ETV9CQl9QQVRIX0RJVgkJCT0gQklUMTAsCglPRE1fQkJfUFNECQkJPSBCSVQxMSwKCU9ETV9CQl9SWEhQCQkJPSBCSVQxMiwKCgkvKiAgTUFDIERNIHNlY3Rpb24gQklUIDE2LTIzICovCglPRE1fTUFDX0VEQ0FfVFVSQk8JCT0gQklUMTYsCglPRE1fTUFDX0VBUkxZX01PREUJCT0gQklUMTcsCgoJLyogIFJGIE9ETSBzZWN0aW9uIEJJVCAyNC0zMSAqLwoJT0RNX1JGX1RYX1BXUl9UUkFDSwkJPSBCSVQyNCwKCU9ETV9SRl9SWF9HQUlOX1RSQUNLCQk9IEJJVDI1LAoJT0RNX1JGX0NBTElCUkFUSU9OCQk9IEJJVDI2LAp9OwoKLyogCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSAqLwplbnVtIG9kbV9pbnRlcmZhY2VfZGVmIHsKCU9ETV9JVFJGX1BDSUUJPQkweDEsCglPRE1fSVRSRl9VU0IJPQkweDIsCglPRE1fSVRSRl9TRElPCT0JMHg0LAoJT0RNX0lUUkZfQUxMCT0JMHg3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0lDX1RZUEUgKi8KZW51bSBvZG1faWNfdHlwZSB7CglPRE1fUlRMODE5MlMJPQlCSVQwLAoJT0RNX1JUTDgxOTJDCT0JQklUMSwKCU9ETV9SVEw4MTkyRAk9CUJJVDIsCglPRE1fUlRMODcyM0EJPQlCSVQzLAoJT0RNX1JUTDgxODhFCT0JQklUNCwKCU9ETV9SVEw4ODEyCT0JQklUNSwKCU9ETV9SVEw4ODIxCT0JQklUNiwKfTsKCiNkZWZpbmUgT0RNX0lDXzExTl9TRVJJRVMJCQkJCQlcCgkoT0RNX1JUTDgxOTJTIHwgT0RNX1JUTDgxOTJDIHwgT0RNX1JUTDgxOTJEIHwJCQlcCgkgT0RNX1JUTDg3MjNBIHwgT0RNX1JUTDgxODhFKQojZGVmaW5lIE9ETV9JQ18xMUFDX1NFUklFUwkJKE9ETV9SVEw4ODEyKQoKLyogT0RNX0NNTklORk9fQ1VUX1ZFUiAqLwplbnVtIG9kbV9jdXRfdmVyc2lvbiB7CglPRE1fQ1VUX0EJPQkxLAoJT0RNX0NVVF9CCT0JMiwKCU9ETV9DVVRfQwk9CTMsCglPRE1fQ1VUX0QJPQk0LAoJT0RNX0NVVF9FCT0JNSwKCU9ETV9DVVRfRgk9CTYsCglPRE1fQ1VUX1RFU1QJPQk3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0ZBQl9WRVIgKi8KZW51bSBvZG1fZmFiX1ZlcnNpb24gewoJT0RNX1RTTUMJPQkwLAoJT0RNX1VNQwkJPQkxLAp9OwoKLyogIE9ETV9DTU5JTkZPX1JGX1RZUEUgKi8KLyogIEZvciBleGFtcGxlIDFUMlIgKEErQUIgPSBCSVQwfEJJVDR8QklUNSkgKi8KZW51bSBvZG1fcmZfcGF0aCB7CglPRE1fUkZfVFhfQQk9CUJJVDAsCglPRE1fUkZfVFhfQgk9CUJJVDEsCglPRE1fUkZfVFhfQwk9CUJJVDIsCglPRE1fUkZfVFhfRAk9CUJJVDMsCglPRE1fUkZfUlhfQQk9CUJJVDQsCglPRE1fUkZfUlhfQgk9CUJJVDUsCglPRE1fUkZfUlhfQwk9CUJJVDYsCglPRE1fUkZfUlhfRAk9CUJJVDcsCn07CgplbnVtIG9kbV9yZl90eXBlIHsKCU9ETV8xVDFSCT0JMCwKCU9ETV8xVDJSCT0JMSwKCU9ETV8yVDJSCT0JMiwKCU9ETV8yVDNSCT0JMywKCU9ETV8yVDRSCT0JNCwKCU9ETV8zVDNSCT0JNSwKCU9ETV8zVDRSCT0JNiwKCU9ETV80VDRSCT0JNywKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCgplbnVtIG9kbV9tYWNfcGh5X21vZGUgewoJT0RNX1NNU1AJPSAwLAoJT0RNX0RNU1AJPSAxLAoJT0RNX0RNRFAJPSAyLAp9OwoKZW51bSBvZG1fYnRfY29leGlzdCB7CglPRE1fQlRfQlVTWQkJPSAxLAoJT0RNX0JUX09OCQk9IDIsCglPRE1fQlRfT0ZGCQk9IDMsCglPRE1fQlRfTk9ORQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09QX01PREUgKi8KZW51bSBvZG1fb3BlcmF0aW9uX21vZGUgewoJT0RNX05PX0xJTksJCT0gQklUMCwKCU9ETV9MSU5LCQk9IEJJVDEsCglPRE1fU0NBTgkJPSBCSVQyLAoJT0RNX1BPV0VSU0FWRQkJPSBCSVQzLAoJT0RNX0FQX01PREUJCT0gQklUNCwKCU9ETV9DTElFTlRfTU9ERQkJPSBCSVQ1LAoJT0RNX0FEX0hPQwkJPSBCSVQ2LAoJT0RNX1dJRklfRElSRUNUCQk9IEJJVDcsCglPRE1fV0lGSV9ESVNQTEFZCT0gQklUOCwKfTsKCi8qICBPRE1fQ01OSU5GT19XTV9NT0RFICovCmVudW0gb2RtX3dpcmVsZXNzX21vZGUgewoJT0RNX1dNX1VOS05PVwk9IDB4MCwKCU9ETV9XTV9CCT0gQklUMCwKCU9ETV9XTV9HCT0gQklUMSwKCU9ETV9XTV9BCT0gQklUMiwKCU9ETV9XTV9OMjRHCT0gQklUMywKCU9ETV9XTV9ONUcJPSBCSVQ0LAoJT0RNX1dNX0FVVE8JPSBCSVQ1LAoJT0RNX1dNX0FDCT0gQklUNiwKfTsKCi8qICBPRE1fQ01OSU5GT19CQU5EICovCmVudW0gb2RtX2JhbmRfdHlwZSB7CglPRE1fQkFORF8yXzRHCT0gQklUMCwKCU9ETV9CQU5EXzVHCT0gQklUMSwKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQgKi8KZW51bSBvZG1fc2VjX2Nobmxfb2Zmc2V0IHsKCU9ETV9ET05UX0NBUkUJPSAwLAoJT0RNX0JFTE9XCT0gMSwKCU9ETV9BQk9WRQk9IDIKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfTU9ERSAqLwplbnVtIG9kbV9zZWN1cml0eSB7CglPRE1fU0VDX09QRU4JCT0gMCwKCU9ETV9TRUNfV0VQNDAJCT0gMSwKCU9ETV9TRUNfVEtJUAkJPSAyLAoJT0RNX1NFQ19SRVNFUlZFCQk9IDMsCglPRE1fU0VDX0FFU0NDTVAJCT0gNCwKCU9ETV9TRUNfV0VQMTA0CQk9IDUsCglPRE1fV0VQX1dQQV9NSVhFRCAgIAk9IDYsIC8qICBXRVAgKyBXUEEgKi8KCU9ETV9TRUNfU01TNAkJPSA3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0JXICovCmVudW0gb2RtX2J3IHsKCU9ETV9CVzIwTQkJPSAwLAoJT0RNX0JXNDBNCQk9IDEsCglPRE1fQlc4ME0JCT0gMiwKCU9ETV9CVzE2ME0JCT0gMywKCU9ETV9CVzEwTQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX0JPQVJEX1RZUEUgKi8KZW51bSBvZG1fYm9hcmRfdHlwZSB7CglPRE1fQk9BUkRfTk9STUFMCT0gMCwKCU9ETV9CT0FSRF9ISUdIUFdSCT0gMSwKCU9ETV9CT0FSRF9NSU5JQ0FSRAk9IDIsCglPRE1fQk9BUkRfU0xJTQkJPSAzLAoJT0RNX0JPQVJEX0NPTUJPCQk9IDQsCn07CgovKiAgT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBICovCmVudW0gb2RtX2NjYV9wYXRoIHsKCU9ETV9DQ0FfMlIJCT0gMCwKCU9ETV9DQ0FfMVJfQQkJPSAxLAoJT0RNX0NDQV8xUl9CCQk9IDIsCn07CgpzdHJ1Y3Qgb2RtX3JhX2luZm8gewoJdTggUmF0ZUlEOwoJdTMyIFJhdGVNYXNrOwoJdTMyIFJBVXNlUmF0ZTsKCXU4IFJhdGVTR0k7Cgl1OCBSc3NpU3RhUkE7Cgl1OCBQcmVSc3NpU3RhUkE7Cgl1OCBTR0lFbmFibGU7Cgl1OCBEZWNpc2lvblJhdGU7Cgl1OCBQcmVSYXRlOwoJdTggSGlnaGVzdFJhdGU7Cgl1OCBMb3dlc3RSYXRlOwoJdTMyIE5zY1VwOwoJdTMyIE5zY0Rvd247Cgl1MTYgUlRZWzVdOwoJdTMyIFRPVEFMOwoJdTE2IERST1A7Cgl1OCBBY3RpdmU7Cgl1MTYgUnB0VGltZTsKCXU4IFJBV2FpdGluZ0NvdW50ZXI7Cgl1OCBSQVBlbmRpbmdDb3VudGVyOwoJdTggUFRBY3RpdmU7CS8qICBvbiBvciBvZmYgKi8KCXU4IFBUVHJ5U3RhdGU7CS8qICAwIHRyeWluZyBzdGF0ZSwgMSBmb3IgZGVjaXNpb24gc3RhdGUgKi8KCXU4IFBUU3RhZ2U7CS8qICAwfjYgKi8KCXU4IFBUU3RvcENvdW50OwkvKiBTdG9wIFBUIGNvdW50ZXIgKi8KCXU4IFBUUHJlUmF0ZTsJLyogIGlmIHJhdGUgY2hhbmdlIGRvIFBUICovCgl1OCBQVFByZVJzc2k7CS8qICBpZiBSU1NJIGNoYW5nZSA1JSBkbyBQVCAqLwoJdTggUFRNb2RlU1M7CS8qICBkZWNpZGUgd2hpdGNoIHJhdGUgc2hvdWxkIGRvIFBUICovCgl1OCBSQXN0YWdlOwkvKiAgU3RhZ2VSQSwgZGVjaWRlIGhvdyBtYW55IHRpbWVzIFJBIHdpbGwgYmUgZG9uZQoJCQkgKiBiZXR3ZWVuIFBUICovCgl1OCBQVFNtb290aEZhY3RvcjsKfTsKCnN0cnVjdCBpamtfbWF0cml4X3JlZ3Nfc2V0IHsKCWJvb2wJYklRS0RvbmU7CglzMzIJVmFsdWVbMV1bSVFLX01hdHJpeF9SRUdfTlVNXTsKfTsKCnN0cnVjdCBvZG1fcmZfY2FsIHsKCS8qIGZvciB0eCBwb3dlciB0cmFja2luZyAqLwoJdTMyCVJlZ0EyNDsgLyogIGZvciBUZW1wQ0NLICovCglzMzIJUmVnRTk0OwoJczMyCVJlZ0U5QzsKCXMzMglSZWdFQjQ7CglzMzIJUmVnRUJDOwoKCXU4CVRYUG93ZXJjb3VudDsKCWJvb2wJYlRYUG93ZXJUcmFja2luZ0luaXQ7Cglib29sCWJUWFBvd2VyVHJhY2tpbmc7Cgl1OAlUeFBvd2VyVHJhY2tDb250cm9sOyAvKiBmb3IgbXAgbW9kZSwgdHVybiBvZmYgdHhwd3J0cmFja2luZwoJCQkJICAgICAgKiBhcyBkZWZhdWx0ICovCgl1OAlUTV9UcmlnZ2VyOwoJdTgJSW50ZXJuYWxQQTVHWzJdOwkvKiBwYXRoQSAvIHBhdGhCICovCgoJdTgJVGhlcm1hbE1ldGVyWzJdOyAgICAvKiBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLAoJCQkJICAgICAqIGFuZCAxIGZvciBSRklDMSAqLwoJdTgJVGhlcm1hbFZhbHVlOwoJdTgJVGhlcm1hbFZhbHVlX0xDSzsKCXU4CVRoZXJtYWxWYWx1ZV9JUUs7Cgl1OAlUaGVybWFsVmFsdWVfRFBLOwoJdTgJVGhlcm1hbFZhbHVlX0FWR1tBVkdfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0FWR19pbmRleDsKCXU4CVRoZXJtYWxWYWx1ZV9SeEdhaW47Cgl1OAlUaGVybWFsVmFsdWVfQ3J5c3RhbDsKCXU4CVRoZXJtYWxWYWx1ZV9EUEtzdG9yZTsKCXU4CVRoZXJtYWxWYWx1ZV9EUEt0cmFjazsKCWJvb2wJVHhQb3dlclRyYWNraW5nSW5Qcm9ncmVzczsKCWJvb2wJYkRQS2VuYWJsZTsKCglib29sCWJSZWxvYWR0eHBvd2VyaW5kZXg7Cgl1OAliUmZQaUVuYWJsZTsKCXUzMglUWFBvd2VyVHJhY2tpbmdDYWxsYmFja0NudDsgLyogY29zYSBhZGQgZm9yIGRlYnVnICovCgoJdTgJYkNDS2luQ0gxNDsKCXU4CUNDS19pbmRleDsKCXU4CU9GRE1faW5kZXhbMl07Cglib29sIGJEb25lVHhwb3dlcjsKCgl1OAlUaGVybWFsVmFsdWVfSFBbSFBfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0hQX2luZGV4OwoJc3RydWN0IGlqa19tYXRyaXhfcmVnc19zZXQgSVFLTWF0cml4UmVnU2V0dGluZ1tJUUtfTWF0cml4X1NldHRpbmdzX05VTV07CgoJdTgJRGVsdGFfSVFLOwoJdTgJRGVsdGFfTENLOwoKCS8qIGZvciBJUUsgKi8KCXUzMglSZWdDMDQ7Cgl1MzIJUmVnODc0OwoJdTMyCVJlZ0MwODsKCXUzMglSZWdCNjg7Cgl1MzIJUmVnQjZDOwoJdTMyCVJlZzg3MDsKCXUzMglSZWc4NjA7Cgl1MzIJUmVnODY0OwoKCWJvb2wJYklRS0luaXRpYWxpemVkOwoJYm9vbAliTENLSW5Qcm9ncmVzczsKCWJvb2wJYkFudGVubmFEZXRlY3RlZDsKCXUzMglBRERBX2JhY2t1cFtJUUtfQUREQV9SRUdfTlVNXTsKCXUzMglJUUtfTUFDX2JhY2t1cFtJUUtfTUFDX1JFR19OVU1dOwoJdTMyCUlRS19CQl9iYWNrdXBfcmVjb3Zlcls5XTsKCXUzMglJUUtfQkJfYmFja3VwW0lRS19CQl9SRUdfTlVNXTsKCgkvKiBmb3IgQVBLICovCgl1MzIJQVBLb3V0cHV0WzJdWzJdOyAvKiBwYXRoIEEvQjsgb3V0cHV0MV8xYS9vdXRwdXQxXzJhICovCgl1OAliQVBLZG9uZTsKCXU4CWJBUEtUaGVybWFsTWV0ZXJJZ25vcmU7Cgl1OAliRFBkb25lOwoJdTgJYkRQUGF0aEFPSzsKCXU4CWJEUFBhdGhCT0s7Cn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKc3RydWN0IGZhc3RfYW50X3RyYWluIHsKCXU4CUJzc2lkWzZdOwoJdTgJYW50c2VsX3J4X2tlZXBfMDsKCXU4CWFudHNlbF9yeF9rZWVwXzE7Cgl1OAlhbnRzZWxfcnhfa2VlcF8yOwoJdTMyCWFudFN1bVJTU0lbN107Cgl1MzIJYW50UlNTSWNudFs3XTsKCXUzMglhbnRBdmVSU1NJWzddOwoJdTgJRkFUX1N0YXRlOwoJdTMyCVRyYWluSWR4OwoJdTgJYW50c2VsX2FbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2JbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2NbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglNYWluQW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQXV4QW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlSeElkbGVBbnQ7Cglib29sCWJCZWNvbWVMaW5rZWQ7Cn07CgplbnVtIGZhdF9zdGF0ZSB7CglGQVRfTk9STUFMX1NUQVRFCQk9IDAsCglGQVRfVFJBSU5JTkdfU1RBVEUJCT0gMSwKfTsKCmVudW0gYW50X2Rpdl90eXBlIHsKCU5PX0FOVERJVgkJCT0gMHhGRiwKCUNHX1RSWF9IV19BTlRESVYJCT0gMHgwMSwKCUNHQ1NfUlhfSFdfQU5URElWCQk9IDB4MDIsCglGSVhFRF9IV19BTlRESVYJCQk9IDB4MDMsCglDR19UUlhfU01BUlRfQU5URElWCQk9IDB4MDQsCglDR0NTX1JYX1NXX0FOVERJVgkJPSAweDA1LAp9OwoKLyogQ29weSBmcm9tIFNENCBkZWZpbmVkIHN0cnVjdHVyZS4gV2UgdXNlIHRvIHN1cHBvcnQgUEhZIERNIGludGVncmF0aW9uLiAqLwpzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCB7CgkvKiAJQWRkIGZvciBkaWZmZXJlbnQgdGVhbSB1c2UgdGVtcG9yYXJpbHkgKi8KCXN0cnVjdCBhZGFwdGVyICpBZGFwdGVyOwkvKiAgRm9yIENFL05JQyB0ZWFtICovCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKnByaXY7CS8qICBGb3IgQVAvQURTTCB0ZWFtICovCgkvKiAgV0hlbiB5b3UgdXNlIGFib3ZlIHBvaW50ZXJzLCB0aGV5IG11c3QgYmUgaW5pdGlhbGl6ZWQuICovCglib29sCW9kbV9yZWFkeTsKCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKmZha2VfcHJpdjsKCXU2NAlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJRGVidWdMZXZlbDsKCi8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCWJvb2wJYkNja0hpZ2hQb3dlcjsKCXU4CVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KCXU4CUNvbnRyb2xDaGFubmVsOwovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCgovKiAxICBDT01NT04gSU5GT1JNQVRJT04gKi8KCS8qICBJbml0IFZhbHVlICovCi8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCS8qICBPRE0gUGxhdGZvcm0gaW5mbyBBUC9BRFNML0NFL01QID0gMS8yLzMvNCAqLwoJdTgJU3VwcG9ydFBsYXRmb3JtOwoJLyogIE9ETSBTdXBwb3J0IEFiaWxpdHkgRElHL1JBVFIvVFhfUFdSX1RSQUNLLyChS6FLID0gMS8yLzMvoUsgKi8KCXUzMglTdXBwb3J0QWJpbGl0eTsKCS8qICBPRE0gUENJRS9VU0IvU0RJTy9HU1BJID0gMC8xLzIvMyAqLwoJdTgJU3VwcG9ydEludGVyZmFjZTsKCS8qICBPRE0gY29tcG9zaXRlIG9yIGluZGVwZW5kZW50LiBCaXQgb3JpZW50ZWQvIDkyQys5MkQrIC4uLi4gb3IgYW55CgkgKiAgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCVN1cHBvcnRJQ1R5cGU7CgkvKiAgQ3V0IFZlcnNpb24gVGVzdENoaXAvQS1jdXQvQi1jdXQuLi4gPSAwLzEvMi8zLy4uLiAqLwoJdTgJQ3V0VmVyc2lvbjsKCS8qICBGYWIgVmVyc2lvbiBUU01DL1VNQyA9IDAvMSAqLwoJdTgJRmFiVmVyc2lvbjsKCS8qICBSRiBUeXBlIDRUNFIvM1QzUi8yVDJSLzFUMlIvMVQxUi8uLi4gKi8KCXU4CVJGVHlwZTsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uID0gMC8xLzIvMy80Ly4gKi8KCXU4CUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRMTkE7CgkvKiAgd2l0aCBleHRlcm5hbCBQQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0VFJTVzsKCXU4CVBhdGNoSUQ7IC8qIEN1c3RvbWVyIElEICovCglib29sCWJJbkhjdFRlc3Q7Cglib29sCWJXSUZJVGVzdDsKCglib29sCWJEdWFsTWFjU21hcnRDb25jdXJyZW50OwoJdTMyCUJLX1N1cHBvcnRBYmlsaXR5OwoJdTgJQW50RGl2VHlwZTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICBEeW5hbWljIFZhbHVlICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJdThfdGVtcDsKCWJvb2wJYm9vbF90ZW1wOwoJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXJfdGVtcDsKCgkvKiAgTUFDIFBIWSBNb2RlIFNNU1AvRE1TUC9ETURQID0gMC8xLzIgKi8KCXU4CSpwTWFjUGh5TW9kZTsKCS8qIFRYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CSpwTnVtVHhCeXRlc1VuaWNhc3Q7CgkvKiBSWCBVbmljYXN0IGJ5dGUgY291bnQgKi8KCXU2NAkqcE51bVJ4Qnl0ZXNVbmljYXN0OwoJLyogIFdpcmVsZXNzIG1vZGUgQi9HL0EvTiA9IEJJVDAvQklUMS9CSVQyL0JJVDMgKi8KCXU4CSpwV2lyZWxlc3NNb2RlOyAvKiBPRE1fV0lSRUxFU1NfTU9ERV9FICovCgkvKiAgRnJlcXVlbmNlIGJhbmQgMi40Ry81RyA9IDAvMSAqLwoJdTgJKnBCYW5kVHlwZTsKCS8qICBTZWNvbmRhcnkgY2hhbm5lbCBvZmZzZXQgZG9uJ3RfY2FyZS9iZWxvdy9hYm92ZSA9IDAvMS8yICovCgl1OAkqcFNlY0NoT2Zmc2V0OwoJLyogIFNlY3VyaXR5IG1vZGUgT3Blbi9XRVAvQUVTL1RLSVAgPSAwLzEvMi8zICovCgl1OAkqcFNlY3VyaXR5OwoJLyogIEJXIGluZm8gMjBNLzQwTS84ME0gPSAwLzEvMiAqLwoJdTgJKnBCYW5kV2lkdGg7CgkvKiAgQ2VudHJhbCBjaGFubmVsIGxvY2F0aW9uIENoMS9DaDIvLi4uLiAqLwoJdTgJKnBDaGFubmVsOwkvKiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIDkyRCBETVNQICovCgoJYm9vbAkqcGJHZXRWYWx1ZUZyb21PdGhlck1hYzsKCXN0cnVjdCBhZGFwdGVyICoqcEJ1ZGR5QWRhcHRlcjsKCWJvb2wJKnBiTWFzdGVyT2ZETVNQOyAvKiBNQUMwOiBtYXN0ZXIsIE1BQzE6IHNsYXZlICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIFN0YXR1cyAqLwoJYm9vbAkqcGJTY2FuSW5Qcm9jZXNzOwoJYm9vbAkqcGJQb3dlclNhdmluZzsKCS8qICBDQ0EgUGF0aCAyLXBhdGgvcGF0aC1BL3BhdGgtQiA9IDAvMS8yOyB1c2luZyBPRE1fQ0NBX1BBVEhfRS4gKi8KCXU4CSpwT25lUGF0aENDQTsKCS8qIHBNZ250SW5mby0+QW50ZW5uYVRlc3QgKi8KCXU4CSpwQW50ZW5uYVRlc3Q7Cglib29sCSpwYk5ldF9jbG9zZWQ7Ci8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJYldJRklfRGlyZWN0OwoJYm9vbAliV0lGSV9EaXNwbGF5OwoJYm9vbAliTGlua2VkOwoJdTgJUlNTSV9NaW47Cgl1OAlJbnRlcmZhY2VJbmRleDsgLyogIEFkZCBmb3IgOTJEICBkdWFsIE1BQzogMC0tTWFjMCAxLS1NYWMxICovCglib29sCWJJc01QQ2hpcDsKCWJvb2wJYk9uZUVudHJ5T25seTsKCS8qICBDb21tb24gaW5mbyBmb3IgQlRETSAqLwoJYm9vbAliQnREaXNhYmxlZDsJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCWJCdEhzT3BlcmF0aW9uOwkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJYnRIc0RpZ1ZhbDsJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCWJCdERpc2FibGVFZGNhVHVyYm87LyogVW5kZXIgc29tZSBjb25kaXRpb24sIGRvbid0IGVuYWJsZSB0aGUKCQkJCSAgICAgKiBFRENBIFR1cmJvICovCglib29sCWJCdEJ1c3k7CQkJLyogIEJUIGlzIGJ1c3kuICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCgoJLyogMiBEZWZpbmUgU1RBIGluZm8uICovCgkvKiAgX09ETV9TVEFfSU5GTyAqLwoJLyogIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyAqLwoJc3RydWN0IHN0YV9pbmZvICpwT0RNX1N0YUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoKCXUxNglDdXJybWluUnB0VGltZTsKCXN0cnVjdCBvZG1fcmFfaW5mbyBSQUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOyAvKiBVc2UgTWFjSUQgYXMKCQkJKiBhcnJheSBpbmRleC4gU1RBIE1hY0lEPTAsCgkJCSogVldpRmkgQ2xpZW50IE1hY0lEPXsxLCBPRE1fQVNTT0NJQVRFX0VOVFJZX05VTS0xfSAqLwoJLyogICovCgkvKiAgMjAxMi8wMi8xNCBNSCBBZGQgdG8gc2hhcmUgODhFIHJhIHdpdGggb3RoZXIgU1cgdGVhbS4gKi8KCS8qICBXZSBuZWVkIHRvIGNvbGVsY3QgYWxsIHN1cHBvcnQgYWJpbGl0IHRvIGEgcHJvcGVyIGFyZWEuICovCgkvKiAgKi8KCWJvb2wJUmFTdXBwb3J0ODhFOwoKCS8qICBEZWZpbmUgLi4uLi4uLi4uLi4gKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9waHlfZGJnX2luZm8gUGh5RGJnSW5mbzsKCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gKnBNYWNJbmZvOwoKCS8qICBEaWZmZXJlbnQgVGVhbSBpbmRlcGVuZHQgc3RydWN0dXJlPz8gKi8KCgkvKiBPRE0gU3RydWN0dXJlICovCglzdHJ1Y3QgZmFzdF9hbnRfdHJhaW4gRE1fRmF0VGFibGU7CglzdHJ1Y3QgcnR3X2RpZwlETV9EaWdUYWJsZTsKCXN0cnVjdCBydGxfcHMJRE1fUFNUYWJsZTsKCXN0cnVjdCBkeW5fcHJpbWFyeV9jY2EgRE1fUHJpQ0NBOwoJc3RydWN0IHJ4X2hwYwlETV9SWEhQX1RhYmxlOwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIEZhbHNlQWxtQ250OwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIEZsYXNlQWxtQ250QnVkZHlBZGFwdGVyOwoJc3RydWN0IHN3X2FudF9zd2l0Y2ggRE1fU1dBVF9UYWJsZTsKCWJvb2wJCVJTU0lfdGVzdDsKCglzdHJ1Y3QgZWRjYV90dXJibyBETV9FRENBX1RhYmxlOwoJdTMyCQlXTU1FRENBX0JFOwoJLyogIENvcHkgZnJvbSBTRDQgc3RydWN0dXJlICovCgkvKiAgKi8KCS8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoJLyogICovCgoJYm9vbAkqcGJEcml2ZXJTdG9wcGVkOwoJYm9vbAkqcGJEcml2ZXJJc0dvaW5nVG9QbnBTZXRQb3dlclNsZWVwOwoJYm9vbAkqcGluaXRfYWRwdF9pbl9wcm9ncmVzczsKCgkvKiBQU0QgKi8KCWJvb2wJYlVzZXJBc3NpZ25MZXZlbDsKCXN0cnVjdCB0aW1lcl9saXN0IFBTRFRpbWVyOwoJdTgJUlNTSV9CVDsJCQkvKiBjb21lIGZyb20gQlQgKi8KCWJvb2wJYlBTRGluUHJvY2VzczsKCWJvb2wJYkRNSW5pdGlhbEdhaW5FbmFibGU7CgoJLyogZm9yIHJhdGUgYWRhcHRpdmUsIGluIGZhY3QsICA4OGMvOTJjIGZ3IHdpbGwgaGFuZGxlIHRoaXMgKi8KCXU4CWJVc2VSQU1hc2s7CgoJc3RydWN0IG9kbV9yYXRlX2FkYXB0IFJhdGVBZGFwdGl2ZTsKCglzdHJ1Y3Qgb2RtX3JmX2NhbCBSRkNhbGlicmF0ZUluZm87CgoJLyogIFRYIHBvd2VyIHRyYWNraW5nICovCgl1OAlCYlN3aW5nSWR4T2ZkbTsKCXU4CUJiU3dpbmdJZHhPZmRtQ3VycmVudDsKCXU4CUJiU3dpbmdJZHhPZmRtQmFzZTsKCWJvb2wJQmJTd2luZ0ZsYWdPZmRtOwoJdTgJQmJTd2luZ0lkeENjazsKCXU4CUJiU3dpbmdJZHhDY2tDdXJyZW50OwoJdTgJQmJTd2luZ0lkeENja0Jhc2U7Cglib29sCUJiU3dpbmdGbGFnQ2NrOwoJdTgJKm1wX21vZGU7CgkvKiAgT0RNIHN5c3RlbSByZXNvdXJjZS4gKi8KCgkvKiAgT0RNIHJlbGF0aXZlIHRpbWUuICovCglzdHJ1Y3QgdGltZXJfbGlzdCBQYXRoRGl2U3dpdGNoVGltZXI7CgkvKiAyMDExLjA5LjI3IGFkZCBmb3IgUGF0aCBEaXZlcnNpdHkgKi8KCXN0cnVjdCB0aW1lcl9saXN0IENDS1BhdGhEaXZlcnNpdHlUaW1lcjsKCXN0cnVjdCB0aW1lcl9saXN0IEZhc3RBbnRUcmFpbmluZ1RpbWVyOwp9OwkJLyogIERNX0R5bmFtaWNfTWVjaGFuaXNtX1N0cnVjdHVyZSAqLwoKI2RlZmluZSBPRE1fUkZfUEFUSF9NQVggMwoKZW51bSBPRE1fUkZfUkFESU9fUEFUSCB7CglPRE1fUkZfUEFUSF9BID0gMCwgICAvKiBSYWRpbyBQYXRoIEEgKi8KCU9ETV9SRl9QQVRIX0IgPSAxLCAgIC8qIFJhZGlvIFBhdGggQiAqLwoJT0RNX1JGX1BBVEhfQyA9IDIsICAgLyogUmFkaW8gUGF0aCBDICovCglPRE1fUkZfUEFUSF9EID0gMywgICAvKiBSYWRpbyBQYXRoIEQgKi8KfTsKCmVudW0gT0RNX1JGX0NPTlRFTlQgewoJb2RtX3JhZGlvYV90eHQgPSAweDEwMDAsCglvZG1fcmFkaW9iX3R4dCA9IDB4MTAwMSwKCW9kbV9yYWRpb2NfdHh0ID0gMHgxMDAyLAoJb2RtX3JhZGlvZF90eHQgPSAweDEwMDMKfTsKCmVudW0gb2RtX2JiX2NvbmZpZ190eXBlIHsKICAgIENPTkZJR19CQl9QSFlfUkVHLAogICAgQ09ORklHX0JCX0FHQ19UQUIsCiAgICBDT05GSUdfQkJfQUdDX1RBQl8yRywKICAgIENPTkZJR19CQl9BR0NfVEFCXzVHLAogICAgQ09ORklHX0JCX1BIWV9SRUdfUEcsCn07CgovKiAgU3RhdHVzIGNvZGUgKi8KZW51bSBydF9zdGF0dXMgewoJUlRfU1RBVFVTX1NVQ0NFU1MsCglSVF9TVEFUVVNfRkFJTFVSRSwKCVJUX1NUQVRVU19QRU5ESU5HLAoJUlRfU1RBVFVTX1JFU09VUkNFLAoJUlRfU1RBVFVTX0lOVkFMSURfQ09OVEVYVCwKCVJUX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiwKCVJUX1NUQVRVU19OT1RfU1VQUE9SVCwKCVJUX1NUQVRVU19PU19BUElfRkFJTEVELAp9OwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRElHICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKZW51bSBkbV9kaWdfb3AgewoJUlRfVFlQRV9USFJFU0hfSElHSAk9IDAsCglSVF9UWVBFX1RIUkVTSF9MT1cJPSAxLAoJUlRfVFlQRV9CQUNLT0ZGCQk9IDIsCglSVF9UWVBFX1JYX0dBSU5fTUlOCT0gMywKCVJUX1RZUEVfUlhfR0FJTl9NQVgJPSA0LAoJUlRfVFlQRV9FTkFCTEUJCT0gNSwKCVJUX1RZUEVfRElTQUJMRQkJPSA2LAoJRElHX09QX1RZUEVfTUFYCn07CgojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0hJR0gJNDAKI2RlZmluZQkJRE1fRElHX1RIUkVTSF9MT1cJMzUKCiNkZWZpbmUJCURNX1NDQU5fUlNTSV9USAkJMHgxNCAvKiBzY2FuIHJldHVybiBpc3N1ZSBmb3IgTEMgKi8KCgojZGVmaW5lCQlETV9mYWxzZV9BTEFSTV9USFJFU0hfTE9XCTQwMAojZGVmaW5lCQlETV9mYWxzZV9BTEFSTV9USFJFU0hfSElHSAkxMDAwCgojZGVmaW5lCQlETV9ESUdfTUFYX05JQwkJCTB4NGUKI2RlZmluZQkJRE1fRElHX01JTl9OSUMJCQkweDFlIC8qIDB4MjIvMHgxYyAqLwoKI2RlZmluZQkJRE1fRElHX01BWF9BUAkJCTB4MzIKI2RlZmluZQkJRE1fRElHX01JTl9BUAkJCTB4MjAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDX0hQCQkweDQ2CiNkZWZpbmUJCURNX0RJR19NSU5fTklDX0hQCQkweDJlCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQX0hQCQkweDQyCiNkZWZpbmUJCURNX0RJR19NSU5fQVBfSFAJCTB4MzAKCi8qIHZpdmkgOTJjJjkyZCBoYXMgZGlmZmVyZW50IGRlZmluaXRpb24sIDIwMTEwNTA0ICovCi8qIHRoaXMgaXMgZm9yIDkyYyAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgwCQkJMHgyMDAvKiAweDIwICovCiNkZWZpbmUJCURNX0RJR19GQV9USDEJCQkweDMwMC8qIDB4MTAwICovCiNkZWZpbmUJCURNX0RJR19GQV9USDIJCQkweDQwMC8qIDB4MjAwICovCi8qIHRoaXMgaXMgZm9yIDkyZCAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgwXzkyRAkJMHgxMDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMV85MkQJCTB4NDAwCiNkZWZpbmUJCURNX0RJR19GQV9USDJfOTJECQkweDYwMAoKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfTUFYCQkxMgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NSU4JCS00CiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX0RFRkFVTFQJCTEwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBBR0MgUlggSGlnaCBQb3dlciBNb2RlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojZGVmaW5lCSAgTE5BX0xvd19HYWluXzEJCTB4NjQKI2RlZmluZQkgIExOQV9Mb3dfR2Fpbl8yCQkweDVBCiNkZWZpbmUJICBMTkFfTG93X0dhaW5fMwkJMHg1OAoKI2RlZmluZQkgIEZBX1JYSFBfVEgxCQkJNTAwMAojZGVmaW5lCSAgRkFfUlhIUF9USDIJCQkxNTAwCiNkZWZpbmUJICBGQV9SWEhQX1RIMwkJCTgwMAojZGVmaW5lCSAgRkFfUlhIUF9USDQJCQk2MDAKI2RlZmluZQkgIEZBX1JYSFBfVEg1CQkJNTAwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBFRENBICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRHluYW1pYyBUeCBQb3dlciAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRHluYW1pYyBUeCBQb3dlciBDb250cm9sIFRocmVzaG9sZCAqLwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyCTc0CiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEJNjcKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfQVAJCTB4M0YKCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX05vcm1hbAkJMAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDEJCTEKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTGV2ZWwyCQkyCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMQkJMwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9CVDIJCTQKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTUJCTUKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMzUJCTYKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfNTAJCTcKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfNzAJCTgKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTAwCQk5CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBSYXRlIEFkYXB0aXZlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojZGVmaW5lCQlETV9SQVRSX1NUQV9JTklUCQkwCiNkZWZpbmUJCURNX1JBVFJfU1RBX0hJR0gJCTEKI2RlZmluZQkJRE1fUkFUUl9TVEFfTUlERExFCQkyCiNkZWZpbmUJCURNX1JBVFJfU1RBX0xPVwkJCTMKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEJCIFBvd2VyIFNhdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKZW51bSBkbV8xcl9jY2EgewoJQ0NBXzFSID0gMCwKCUNDQV8yUiA9IDEsCglDQ0FfTUFYID0gMiwKfTsKCmVudW0gZG1fcmYgewoJUkZfU2F2ZSA9IDAsCglSRl9Ob3JtYWwgPSAxLAoJUkZfTUFYID0gMiwKfTsKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFudGVubmEgRGl2ZXJzaXR5ICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwplbnVtIGRtX3N3YXMgewoJQW50ZW5uYV9BID0gMSwKCUFudGVubmFfQiA9IDIsCglBbnRlbm5hX01BWCA9IDMsCn07CgovKiAgTWF4aW1hbCBudW1iZXIgb2YgYW50ZW5uYSBkZXRlY3Rpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHBlcmZvcm0uICovCiNkZWZpbmUJTUFYX0FOVEVOTkFfREVURUNUSU9OX0NOVAkxMAoKLyogIEV4dGVybiBHbG9iYWwgVmFyaWFibGVzLiAqLwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkMJMzcKI2RlZmluZQlPRkRNX1RBQkxFX1NJWkVfOTJECTQzCiNkZWZpbmUJQ0NLX1RBQkxFX1NJWkUJCTMzCgpleHRlcm4JdTMyIE9GRE1Td2luZ1RhYmxlW09GRE1fVEFCTEVfU0laRV85MkRdOwpleHRlcm4JdTggQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxM1tDQ0tfVEFCTEVfU0laRV1bOF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMTQgW0NDS19UQUJMRV9TSVpFXVs4XTsKCi8qICBjaGVjayBTdGEgcG9pbnRlciB2YWxpZCBvciBub3QgKi8KI2RlZmluZSBJU19TVEFfVkFMSUQocFN0YSkJCShwU3RhKQovKiAgMjAxMDA1MTQgSm9zZXBoOiBBZGQgZGVmaW5pdGlvbiBmb3IgYW50ZW5uYSBzd2l0Y2hpbmcgdGVzdCBhZnRlciBsaW5rLiAqLwovKiAgVGhpcyBpbmRpY2F0ZXMgdHdvIGRpZmZlcmVudCB0aGUgc3RlcHMuICovCi8qICBJbiBTV0FXX1NURVBfUEVBSywgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBhbnRlbm5hIGFuZCBsaXN0ZW4gdG8gdGhlCiAqICBzaWduYWwgb24gdGhlIGFpci4gKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4KICogIFNXQVdfU1RFUF9QRUFLICovCi8qICB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggYW50ZW5uYS4gKi8KI2RlZmluZSBTV0FXX1NURVBfUEVBSwkJMAojZGVmaW5lIFNXQVdfU1RFUF9ERVRFUk1JTkUJMQoKdm9pZCBPRE1fV3JpdGVfRElHKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBDdXJyZW50SUdJKTsKdm9pZCBPRE1fV3JpdGVfQ0NLX0NDQV9UaHJlcyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggQ3VyQ0NLX0NDQVRocmVzKTsKCnZvaWQgT0RNX1NldEFudGVubmEoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IEFudGVubmEpOwoKCiNkZWZpbmUgZG1fUkZfU2F2aW5nCU9ETV9SRl9TYXZpbmcKdm9pZCBPRE1fUkZfU2F2aW5nKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBiRm9yY2VJbk5vcm1hbCk7CgojZGVmaW5lIFN3QW50RGl2UmVzdEFmdGVyTGluawlPRE1fU3dBbnREaXZSZXN0QWZ0ZXJMaW5rCnZvaWQgT0RNX1N3QW50RGl2UmVzdEFmdGVyTGluayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7CgojZGVmaW5lIGRtX0NoZWNrVFhQb3dlclRyYWNraW5nIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjawp2b2lkIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7Cgpib29sIE9ETV9SQVN0YXRlQ2hlY2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHMzMiBSU1NJLAoJCSAgICAgIGJvb2wgYkZvcmNlVXBkYXRlLCB1OCAqcFJBVFJTdGF0ZSk7CgojZGVmaW5lIGRtX1NXQVdfUlNTSV9DaGVjawlPRE1fU3dBbnREaXZDaGtQZXJQa3RSc3NpCnZvaWQgT0RNX1N3QW50RGl2Q2hrUGVyUGt0UnNzaShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggU3RhdGlvbklELAoJCQkgICAgICAgc3RydWN0IG9kbV9waHlfc3RhdHVzX2luZm8gKnBQaHlJbmZvKTsKCnUzMiBDb252ZXJ0VG9fZEIodTMyIFZhbHVlKTsKCnUzMiBHZXRQU0REYXRhKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1bnNpZ25lZCBpbnQgcG9pbnQsCgkgICAgICAgdTggaW5pdGlhbF9nYWluX3BzZCk7Cgp2b2lkIG9kbV9ESUdieVJTU0lfTFBTKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKCnUzMiBPRE1fR2V0X1JhdGVfQml0bWFwKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgbWFjaWQsCgkJCXUzMiByYV9tYXNrLCB1OCByc3NpX2xldmVsKTsKCnZvaWQgT0RNX0RNSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7Cgp2b2lkIE9ETV9ETVdhdGNoZG9nKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKCnZvaWQgT0RNX0NtbkluZm9Jbml0KHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLAoJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sIHUzMiBWYWx1ZSk7Cgp2b2lkIE9ETV9DbW5JbmZvSG9vayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwKCQkgICAgIGVudW0gb2RtX2NvbW1vbl9pbmZvX2RlZiBDbW5JbmZvLCB2b2lkICpwVmFsdWUpOwoKdm9pZCBPRE1fQ21uSW5mb1B0ckFycmF5SG9vayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwKCQkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywKCQkJICAgICB1MTYgSW5kZXgsIHZvaWQgKnBWYWx1ZSk7Cgp2b2lkIE9ETV9DbW5JbmZvVXBkYXRlKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgQ21uSW5mbywgdTY0IFZhbHVlKTsKCnZvaWQgT0RNX0luaXRBbGxUaW1lcnMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fQ2FuY2VsQWxsVGltZXJzKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKCnZvaWQgT0RNX1JlbGVhc2VBbGxUaW1lcnMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fUmVzZXRJUUtSZXN1bHQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fQW50c2VsU3RhdGlzdGljc184OEMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IE1hY0lkLAoJCQkgICAgICB1MzIgUFdEQkFsbCwgYm9vbCBpc0NDS3JhdGUpOwoKdm9pZCBPRE1fU2luZ2xlRHVhbEFudGVubmFEZWZhdWx0U2V0dGluZyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7Cgpib29sIE9ETV9TaW5nbGVEdWFsQW50ZW5uYURldGVjdGlvbihzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggbW9kZSk7Cgp2b2lkIG9kbV9kdGMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwoKI2VuZGlmCg==