LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICAqLwovKiAgRGVmaW5pdGlvbiAqLwovKiAgKi8KLyogICovCi8qICAyMDExLzA5LzIyIE1IIERlZmluZSBhbGwgdGVhbSBzdXBwcnQgYWJpbGl0eS4gKi8KLyogICovCgovKiAgKi8KLyogIDIwMTEvMDkvMjIgTUggRGVmaW5lIGZvciBhbGwgdGVhbXMuIFBsZWFzZSBEZWZpbmUgdGhlIGNvbnN0YW4gaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KLyogICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCiNkZWZpbmUJVFBfTU9ERQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJMQoKCi8qICAqLwovKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRFBLX0RFTFRBX01BUFBJTkdfTlVNCTEzCiNkZWZpbmUJCWluZGV4X21hcHBpbmdfSFBfTlVNCTE1CgoKLyogICovCi8qIDMgUFNEIEhhbmRsZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKI2RlZmluZQlBRkhfUFNECQkxCS8qIDA6bm9ybWFsIFBTRCBzY2FuLCAxOiBvbmx5IGRvIDIwIHB0cyBQU0QgKi8KI2RlZmluZQlNT0RFXzQwTQkJMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITUlOCQkyMCAgIC8qICBNaW5pbXVtIGNoYW5uZWwgbnVtYmVyIGZvciBCVCBBRkggKi8KI2RlZmluZQlTSVJfU1RFUF9TSVpFCTMKI2RlZmluZSAgIFNtb290aF9TaXplXzEJCTUKI2RlZmluZQlTbW9vdGhfVEhfMQkzCiNkZWZpbmUgICBTbW9vdGhfU2l6ZV8yCQkxMAojZGVmaW5lCVNtb290aF9USF8yCTQKI2RlZmluZSAgIFNtb290aF9TaXplXzMJCTIwCiNkZWZpbmUJU21vb3RoX1RIXzMJNAojZGVmaW5lICAgU21vb3RoX1N0ZXBfU2l6ZSA1CiNkZWZpbmUJQWRhcHRpdmVfU0lSCTEKI2RlZmluZQlQU0RfUkVTQ0FOCQk0CiNkZWZpbmUJUFNEX1NDQU5fSU5URVJWQUwJNzAwIC8qIG1zICovCgovKiA4NzIzQSBIaWdoIFBvd2VyIElHSSBTZXR0aW5nICovCiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORAkweDIyCiNkZWZpbmUgRE1fRElHX0dtb2RlX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORCAweDI4CiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX1RIUkVTSE9MRAkweDNhCgovKiAgTFBTIGRlZmluZSAqLwojZGVmaW5lIERNX0RJR19GQV9USDBfTFBTCQkJCTQgLyogIDQgaW4gbHBzICovCiNkZWZpbmUgRE1fRElHX0ZBX1RIMV9MUFMJCQkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkJCTMwIC8qICAzMCBscHMgKi8KI2RlZmluZSBSU1NJX09GRlNFVF9ESUcJCQkJCTB4MDU7CgovKiBBTlQgVGVzdCAqLwojZGVmaW5lCQkJQU5UVEVTVEFMTAkJMHgwMAkJLyogQW50IEEgb3IgQiB3aWxsIGJlIFRlc3RpbmcgKi8KI2RlZmluZQkJQU5UVEVTVEEJCTB4MDEJCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lCQlBTlRURVNUQgkJMHgwMgkJLyogQW50IEIgd2lsbCBiZSB0ZXN0aW5nICovCgoKLyogICovCi8qICBzdHJ1Y3R1cmUgYW5kIGRlZmluZSAqLwovKiAgKi8KCnN0cnVjdCAgZGlnX3QgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlSU1NJX21heDsKfTsKCnN0cnVjdCBkeW5hbWljX3B3cl9zYXYgewoJdTgJCVByZUNDQVN0YXRlOwoJdTgJCUN1ckNDQVN0YXRlOwoKCXU4CQlQcmVSRlN0YXRlOwoJdTgJCUN1clJGU3RhdGU7CgoJaW50CQkgICAgUnNzaV92YWxfbWluOwoKCXU4CQlpbml0aWFsaXplOwoJdTMyCQlSZWc4NzQsIFJlZ0M3MCwgUmVnODVDLCBSZWdBNzQ7Cn07CgpzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgewoJdTMyCUNudF9QYXJpdHlfRmFpbDsKCXUzMglDbnRfUmF0ZV9JbGxlZ2FsOwoJdTMyCUNudF9DcmM4X2ZhaWw7Cgl1MzIJQ250X01jc19mYWlsOwoJdTMyCUNudF9PZmRtX2ZhaWw7Cgl1MzIJQ250X0Nja19mYWlsOwoJdTMyCUNudF9hbGw7Cgl1MzIJQ250X0Zhc3RfRnN5bmM7Cgl1MzIJQ250X1NCX1NlYXJjaF9mYWlsOwoJdTMyCUNudF9PRkRNX0NDQTsKCXUzMglDbnRfQ0NLX0NDQTsKCXUzMglDbnRfQ0NBX2FsbDsKCXUzMglDbnRfQldfVVNDOwkvKiBHYXJ5ICovCgl1MzIJQ250X0JXX0xTQzsJLyogR2FyeSAqLwp9OwoKI2RlZmluZSBBU1NPQ0lBVEVfRU5UUllfTlVNCQkJCQkzMiAvKiAgTWF4IHNpemUgb2YgQXNvY0VudHJ5W10uICovCiNkZWZpbmUJT0RNX0FTU09DSUFURV9FTlRSWV9OVU0JCQkJQVNTT0NJQVRFX0VOVFJZX05VTQoKLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgdGhlIHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvIHRoZSBzaWduYWwgb24gdGhlIGFpci4gKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4gU1dBV19TVEVQX1BFQUsgKi8KLyogIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBhbnRlbm5hLiAqLwojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lCVRQX01PREUJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkwCiNkZWZpbmUJVFJBRkZJQ19ISUdICTEKCnN0cnVjdCBzd19hbnRfc3cgewoJdTgJCXRyeV9mbGFnOwoJczMyCQlQcmVSU1NJOwoJdTgJCUN1ckFudGVubmE7Cgl1OAkJUHJlQW50ZW5uYTsKCXU4CQlSU1NJX1RyeWluZzsKCXU4CQlUZXN0TW9kZTsKCXU4CQliVHJpZ2dlckFudGVubmFTd2l0Y2g7Cgl1OAkJU2VsZWN0QW50ZW5uYU1hcDsKCXU4CQlSU1NJX3RhcmdldDsKCgkvKiAgQmVmb3JlIGxpbmsgQW50ZW5uYSBTd2l0Y2ggY2hlY2sgKi8KCXU4CQlTV0FTX05vTGlua19TdGF0ZTsKCXUzMgkJU1dBU19Ob0xpbmtfQktfUmVnODYwOwoJYm9vbAkJQU5UQV9PTjsJLyogVG8gaW5kaWNhdGUgQW50IEEgaXMgb3Igbm90ICovCglib29sCQlBTlRCX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQiBpcyBvbiBvciBub3QgKi8KCglzMzIJCVJTU0lfc3VtX0E7CglzMzIJCVJTU0lfc3VtX0I7CglzMzIJCVJTU0lfY250X0E7CglzMzIJCVJTU0lfY250X0I7CgoJdTY0CQlsYXN0VHhPa0NudDsKCXU2NAkJbGFzdFJ4T2tDbnQ7Cgl1NjQJCVRYQnl0ZUNudF9BOwoJdTY0CQlUWEJ5dGVDbnRfQjsKCXU2NAkJUlhCeXRlQ250X0E7Cgl1NjQJCVJYQnl0ZUNudF9COwoJdTgJCVRyYWZmaWNMb2FkOwp9OwoKc3RydWN0IGVkY2FfdHVyYm8gewoJYm9vbCBiQ3VycmVudFR1cmJvRURDQTsKCXUzMglwcnZfdHJhZmZpY19pZHg7IC8qICBlZGNhIHR1cmJvICovCn07CgpzdHJ1Y3Qgb2RtX3JhdGVfYWRhcHQgewoJdTgJVHlwZTsJCS8qICBETV9UeXBlX0J5RlcvRE1fVHlwZV9CeURyaXZlciAqLwoJdTgJSGlnaFJTU0lUaHJlc2g7CS8qICBpZiBSU1NJID4gSGlnaFJTU0lUaHJlc2gJPT4gUkFUUlN0YXRlIGlzIERNX1JBVFJfU1RBX0hJR0ggKi8KCXU4CUxvd1JTU0lUaHJlc2g7CS8qICBpZiBSU1NJIDw9IExvd1JTU0lUaHJlc2gJPT4gUkFUUlN0YXRlIGlzIERNX1JBVFJfU1RBX0xPVyAqLwoJdTgJUkFUUlN0YXRlOwkvKiAgQ3VycmVudCBSU1NJIGxldmVsLCBETV9SQVRSX1NUQV9ISUdIL0RNX1JBVFJfU1RBX01JRERMRS9ETV9SQVRSX1NUQV9MT1cgKi8KCXUzMglMYXN0UkFUUjsJLyogIFJBVFIgUmVnaXN0ZXIgQ29udGVudCAqLwp9OwoKI2RlZmluZSBJUUtfTUFDX1JFR19OVU0JCTQKI2RlZmluZSBJUUtfQUREQV9SRUdfTlVNCQkxNgojZGVmaW5lIElRS19CQl9SRUdfTlVNX01BWAkxMAojZGVmaW5lIElRS19CQl9SRUdfTlVNCQk5CiNkZWZpbmUgSFBfVEhFUk1BTF9OVU0JCTgKCiNkZWZpbmUgQVZHX1RIRVJNQUxfTlVNCQk4CiNkZWZpbmUgSVFLX01hdHJpeF9SRUdfTlVNCTgKI2RlZmluZSBJUUtfTWF0cml4X1NldHRpbmdzX05VTQkxKzI0KzIxCgojZGVmaW5lCQlETV9UeXBlX0J5RlcJCQkwCiNkZWZpbmUJCURNX1R5cGVfQnlEcml2ZXIJCTEKCi8qICBEZWNsYXJlIGZvciBjb21tb24gaW5mbyAqLwoKc3RydWN0IG9kbV9waHlfZGJnX2luZm8gewoJLyogT0RNIFdyaXRlLGRlYnVnIGluZm8gKi8KCXM4CQlSeFNOUmRCW1JGX1BBVEhfTUFYXTsKCXU2NAkJTnVtUXJ5UGh5U3RhdHVzOwoJdTY0CQlOdW1RcnlQaHlTdGF0dXNDQ0s7Cgl1NjQJCU51bVFyeVBoeVN0YXR1c09GRE07CgkvKiBPdGhlcnMgKi8KCXMzMgkJUnhFVk1bUkZfUEFUSF9NQVhdOwoKfTsKCnN0cnVjdCBvZG1fcGFja2V0X2luZm8gewoJdTgJCVJhdGU7Cgl1OAkJU3RhdGlvbklEOwoJYm9vbAkJYlBhY2tldE1hdGNoQlNTSUQ7Cglib29sCQliUGFja2V0VG9TZWxmOwoJYm9vbAkJYlBhY2tldEJlYWNvbjsKfTsKCgplbnVtIHsKCS8qICBCQiBUZWFtICovCglPRE1fRElHCQkJPSAweDAwMDAwMDAxLAoJT0RNX0hJR0hfUE9XRVIJCT0gMHgwMDAwMDAwMiwKCU9ETV9DQ0tfQ0NBX1RICQk9IDB4MDAwMDAwMDQsCglPRE1fRkFfU1RBVElTVElDUwk9IDB4MDAwMDAwMDgsCglPRE1fUkFNQVNLCQk9IDB4MDAwMDAwMTAsCglPRE1fUlNTSV9NT05JVE9SCT0gMHgwMDAwMDAyMCwKCU9ETV9TV19BTlRESVYJCT0gMHgwMDAwMDA0MCwKCU9ETV9IV19BTlRESVYJCT0gMHgwMDAwMDA4MCwKCU9ETV9CQl9QV1JTVgkJPSAweDAwMDAwMTAwLAoJT0RNXzJUUEFUSERJVgkJPSAweDAwMDAwMjAwLAoJT0RNXzFUUEFUSERJVgkJPSAweDAwMDAwNDAwLAoJT0RNX1BTRDJBRkgJCT0gMHgwMDAwMDgwMAp9OwoKLyogICovCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBDb21tb24gaW5mbyBlbnVtIGZvciBhbGwgdGVhbS4gKi8KLyogICovCgplbnVtIG9kbV9jbW5pbmZvIHsKCS8qICBGaXhlZCB2YWx1ZTogKi8KCS8qICAqLwoKCU9ETV9DTU5JTkZPX01QX1RFU1RfQ0hJUCA9IDIsCglPRE1fQ01OSU5GT19JQ19UWVBFLAkJCS8qICBlbnVtIG9kbV9pY190eXBlX2RlZiAqLwoJT0RNX0NNTklORk9fQ1VUX1ZFUiwJCQkvKiAgZW51bSBvZG1fY3V0X3ZlcnNpb24gKi8KCU9ETV9DTU5JTkZPX0ZBQl9WRVIsCQkJLyogIGVudW0gb2RtX2ZhYl92ZXJzaW9uICovCglPRE1fQ01OSU5GT19CT0FSRF9UWVBFLAkJCS8qICBlbnVtIG9kbV9ib2FyZF90eXBlICovCglPRE1fQ01OSU5GT19FWFRfTE5BLAkJCS8qICB0cnVlICovCglPRE1fQ01OSU5GT19FWFRfUEEsCglPRE1fQ01OSU5GT19FWFRfVFJTVywKCU9ETV9DTU5JTkZPX0JJTkhDVF9URVNULAoJT0RNX0NNTklORk9fQldJRklfVEVTVCwKCU9ETV9DTU5JTkZPX1NNQVJUX0NPTkNVUlJFTlQsCgoKCS8qICAqLwoJLyogIER5bmFtaWMgdmFsdWU6ICovCgkvKiAgKi8KCU9ETV9DTU5JTkZPX01QX01PREUsCgoJT0RNX0NNTklORk9fV0lGSV9ESVJFQ1QsCglPRE1fQ01OSU5GT19XSUZJX0RJU1BMQVksCglPRE1fQ01OSU5GT19MSU5LLAoJT0RNX0NNTklORk9fUlNTSV9NSU4sCglPRE1fQ01OSU5GT19EQkdfQ09NUCwJCQkJLyogIHU2NCAqLwoJT0RNX0NNTklORk9fREJHX0xFVkVMLAkJCQkvKiAgdTMyICovCglPRE1fQ01OSU5GT19SQV9USFJFU0hPTERfSElHSCwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0xPVywJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkZfQU5URU5OQV9UWVBFLAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFRCwKCU9ETV9DTU5JTkZPX0JUX09QRVJBVElPTiwKCU9ETV9DTU5JTkZPX0JUX0RJRywKCU9ETV9DTU5JTkZPX0JUX0JVU1ksCQkJCQkvKiBDaGVjayBCdCBpcyB1c2luZyBvciBub3QgKi8KCU9ETV9DTU5JTkZPX0JUX0RJU0FCTEVfRURDQSwKCgkvKiAgKi8KCS8qICBEeW5hbWljIHB0ciBhcnJheSBob29rIGl0bXMuICovCgkvKiAgKi8KCU9ETV9DTU5JTkZPX1NUQV9TVEFUVVMsCglPRE1fQ01OSU5GT19QSFlfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFDX1NUQVRVUywKCglPRE1fQ01OSU5GT19NQVgsCn07CgovKiAgRGVmaW5lIE9ETSBzdXBwb3J0IGFiaWxpdHkuICBPRE1fQ01OSU5GT19BQklMSVRZICovCmVudW0gewoJLyogIEJCIE9ETSBzZWN0aW9uIEJJVCAwLTE1ICovCglPRE1fQkJfQU5UX0RJVgkJCQk9IEJJVCg2KSwKfTsKCi8qCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSAqLwplbnVtIG9kbV9pbnRlcmZhY2VfZGVmIHsKCU9ETV9JVFJGX1BDSUUJPQkweDEsCglPRE1fSVRSRl9VU0IJPQkweDIsCglPRE1fSVRSRl9TRElPCT0JMHg0LAoJT0RNX0lUUkZfQUxMCT0JMHg3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0lDX1RZUEUgKi8KZW51bSBvZG1faWNfdHlwZV9kZWYgewoJT0RNX1JUTDgxOTJTCT0JQklUKDApLAoJT0RNX1JUTDgxOTJDCT0JQklUKDEpLAoJT0RNX1JUTDgxOTJECT0JQklUKDIpLAoJT0RNX1JUTDg3MjNBCT0JQklUKDMpLAoJT0RNX1JUTDgxODhFCT0JQklUKDQpLAoJT0RNX1JUTDg4MTIJPQlCSVQoNSksCglPRE1fUlRMODgyMQk9CUJJVCg2KSwKfTsKCi8qIE9ETV9DTU5JTkZPX0NVVF9WRVIgKi8KZW51bSBvZG1fY3V0X3ZlcnNpb24gewoJT0RNX0NVVF9BCQk9CTEsCglPRE1fQ1VUX0IJCT0JMiwKCU9ETV9DVVRfQwkJPQkzLAoJT0RNX0NVVF9ECQk9CTQsCglPRE1fQ1VUX0UJCT0JNSwKCU9ETV9DVVRfRgkJPQk2LAoJT0RNX0NVVF9URVNUCQk9CTcsCn07CgovKiAgT0RNX0NNTklORk9fRkFCX1ZFUiAqLwplbnVtIG9kbV9mYWJfdmVyc2lvbiB7CglPRE1fVFNNQwk9CTAsCglPRE1fVU1DCQk9CTEsCn07CgovKiAgRm9yIGV4YW1wbGUgMVQyUiAoQStBQiA9IEJJVDB8QklUNHxCSVQ1KSAqLwplbnVtIHJmX3BhdGhfZGVmIHsKCU9ETV9SRl9UWF9BCT0JQklUKDApLAoJT0RNX1JGX1RYX0IJPQlCSVQoMSksCglPRE1fUkZfVFhfQwk9CUJJVCgyKSwKCU9ETV9SRl9UWF9ECT0JQklUKDMpLAoJT0RNX1JGX1JYX0EJPQlCSVQoNCksCglPRE1fUkZfUlhfQgk9CUJJVCg1KSwKCU9ETV9SRl9SWF9DCT0JQklUKDYpLAoJT0RNX1JGX1JYX0QJPQlCSVQoNyksCn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKZW51bSBvZG1fbWFjX3BoeV9tb2RlIHsKCU9ETV9TTVNQCT0gMCwKCU9ETV9ETVNQCT0gMSwKCU9ETV9ETURQCT0gMiwKfTsKCgplbnVtIG9kbV9idF9jb2V4aXN0IHsKCU9ETV9CVF9CVVNZCQk9IDEsCglPRE1fQlRfT04JCT0gMiwKCU9ETV9CVF9PRkYJCT0gMywKCU9ETV9CVF9OT05FCQk9IDQsCn07CgovKiAgT0RNX0NNTklORk9fT1BfTU9ERSAqLwplbnVtIG9kbV9vcGVyYXRpb25fbW9kZSB7CglPRE1fTk9fTElOSwkJPSBCSVQoMCksCglPRE1fTElOSwkJPSBCSVQoMSksCglPRE1fU0NBTgkJPSBCSVQoMiksCglPRE1fUE9XRVJTQVZFCQk9IEJJVCgzKSwKCU9ETV9BUF9NT0RFCQk9IEJJVCg0KSwKCU9ETV9DTElFTlRfTU9ERQkJPSBCSVQoNSksCglPRE1fQURfSE9DCQk9IEJJVCg2KSwKCU9ETV9XSUZJX0RJUkVDVAkJPSBCSVQoNyksCglPRE1fV0lGSV9ESVNQTEFZCT0gQklUKDgpLAp9OwoKLyogIE9ETV9DTU5JTkZPX1dNX01PREUgKi8KZW51bSBvZG1fd2lyZWxlc3NfbW9kZSB7CglPRE1fV01fVU5LTk9XCQk9IDB4MCwKCU9ETV9XTV9CCQk9IEJJVCgwKSwKCU9ETV9XTV9HCQk9IEJJVCgxKSwKCU9ETV9XTV9BCQk9IEJJVCgyKSwKCU9ETV9XTV9OMjRHCQk9IEJJVCgzKSwKCU9ETV9XTV9ONUcJCT0gQklUKDQpLAoJT0RNX1dNX0FVVE8JCT0gQklUKDUpLAoJT0RNX1dNX0FDCQk9IEJJVCg2KSwKfTsKCi8qICBPRE1fQ01OSU5GT19CQU5EICovCmVudW0gb2RtX2JhbmRfdHlwZSB7CglPRE1fQkFORF8yXzRHCQk9IEJJVCgwKSwKCU9ETV9CQU5EXzVHCQk9IEJJVCgxKSwKCn07CgovKiAgT0RNX0NNTklORk9fU0VDX0NITkxfT0ZGU0VUICovCmVudW0gb2RtX3NlY19jaG5sX29mZnNldCB7CglPRE1fRE9OVF9DQVJFCQk9IDAsCglPRE1fQkVMT1cJCT0gMSwKCU9ETV9BQk9WRQkJPSAyCn07CgovKiAgT0RNX0NNTklORk9fQ0hOTCAqLwoKLyogIE9ETV9DTU5JTkZPX0JPQVJEX1RZUEUgKi8KZW51bSBvZG1fYm9hcmRfdHlwZSB7CglPRE1fQk9BUkRfTk9STUFMCT0gMCwKCU9ETV9CT0FSRF9ISUdIUFdSCT0gMSwKCU9ETV9CT0FSRF9NSU5JQ0FSRAk9IDIsCglPRE1fQk9BUkRfU0xJTQkJPSAzLAoJT0RNX0JPQVJEX0NPTUJPCQk9IDQsCgp9OwoKLyogIE9ETV9DTU5JTkZPX09ORV9QQVRIX0NDQSAqLwplbnVtIG9kbV9jY2FfcGF0aCB7CglPRE1fQ0NBXzJSCQkJPSAwLAoJT0RNX0NDQV8xUl9BCQkJPSAxLAoJT0RNX0NDQV8xUl9CCQkJPSAyLAp9OwoKc3RydWN0IGlxa19tYXRyaXhfcmVnc19zZXQgewoJYm9vbAliSVFLRG9uZTsKCXMzMglWYWx1ZVsxXVtJUUtfTWF0cml4X1JFR19OVU1dOwp9OwoKc3RydWN0IG9kbV9yZl9jYWxfdCB7CgkvKiBmb3IgdHggcG93ZXIgdHJhY2tpbmcgKi8KCgl1MzIJUmVnQTI0OyAvKiAgZm9yIFRlbXBDQ0sgKi8KCXMzMglSZWdFOTQ7CglzMzIJUmVnRTlDOwoJczMyCVJlZ0VCNDsKCXMzMglSZWdFQkM7CgoJLyogdTggYlRYUG93ZXJUcmFja2luZzsgKi8KCXU4CQlUWFBvd2VyY291bnQ7Cglib29sIGJUWFBvd2VyVHJhY2tpbmdJbml0OwoJYm9vbCBiVFhQb3dlclRyYWNraW5nOwoJdTgJCVR4UG93ZXJUcmFja0NvbnRyb2w7IC8qIGZvciBtcCBtb2RlLCB0dXJuIG9mZiB0eHB3cnRyYWNraW5nIGFzIGRlZmF1bHQgKi8KCXU4CQlUTV9UcmlnZ2VyOwoJdTgJCUludGVybmFsUEE1R1syXTsJLyogcGF0aEEgLyBwYXRoQiAqLwoKCXU4CQlUaGVybWFsTWV0ZXJbMl07ICAgIC8qICBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLCBhbmQgMSBmb3IgUkZJQzEgKi8KCXU4CQlUaGVybWFsVmFsdWU7Cgl1OAkJVGhlcm1hbFZhbHVlX0xDSzsKCXU4CQlUaGVybWFsVmFsdWVfSVFLOwoJdTgJVGhlcm1hbFZhbHVlX0RQSzsKCXU4CVRoZXJtYWxWYWx1ZV9BVkdbQVZHX1RIRVJNQUxfTlVNXTsKCXU4CVRoZXJtYWxWYWx1ZV9BVkdfaW5kZXg7Cgl1OAlUaGVybWFsVmFsdWVfUnhHYWluOwoJdTgJVGhlcm1hbFZhbHVlX0NyeXN0YWw7Cgl1OAlUaGVybWFsVmFsdWVfRFBLc3RvcmU7Cgl1OAlUaGVybWFsVmFsdWVfRFBLdHJhY2s7Cglib29sCVR4UG93ZXJUcmFja2luZ0luUHJvZ3Jlc3M7Cglib29sCWJEUEtlbmFibGU7CgoJYm9vbAliUmVsb2FkdHhwb3dlcmluZGV4OwoJdTgJYlJmUGlFbmFibGU7Cgl1MzIJVFhQb3dlclRyYWNraW5nQ2FsbGJhY2tDbnQ7IC8qIGNvc2EgYWRkIGZvciBkZWJ1ZyAqLwoKCXU4CWJDQ0tpbkNIMTQ7Cgl1OAlDQ0tfaW5kZXg7Cgl1OAlPRkRNX2luZGV4WzJdOwoJYm9vbCBiRG9uZVR4cG93ZXI7CgoJdTgJVGhlcm1hbFZhbHVlX0hQW0hQX1RIRVJNQUxfTlVNXTsKCXU4CVRoZXJtYWxWYWx1ZV9IUF9pbmRleDsKCXN0cnVjdCBpcWtfbWF0cml4X3JlZ3Nfc2V0IElRS01hdHJpeFJlZ1NldHRpbmdbSVFLX01hdHJpeF9TZXR0aW5nc19OVU1dOwoKCXU4CURlbHRhX0lRSzsKCXU4CURlbHRhX0xDSzsKCgkvKiBmb3IgSVFLICovCgl1MzIJUmVnQzA0OwoJdTMyCVJlZzg3NDsKCXUzMglSZWdDMDg7Cgl1MzIJUmVnQjY4OwoJdTMyCVJlZ0I2QzsKCXUzMglSZWc4NzA7Cgl1MzIJUmVnODYwOwoJdTMyCVJlZzg2NDsKCglib29sCWJJUUtJbml0aWFsaXplZDsKCWJvb2wgYkxDS0luUHJvZ3Jlc3M7Cglib29sCWJBbnRlbm5hRGV0ZWN0ZWQ7Cgl1MzIJQUREQV9iYWNrdXBbSVFLX0FEREFfUkVHX05VTV07Cgl1MzIJSVFLX01BQ19iYWNrdXBbSVFLX01BQ19SRUdfTlVNXTsKCXUzMglJUUtfQkJfYmFja3VwX3JlY292ZXJbOV07Cgl1MzIJSVFLX0JCX2JhY2t1cFtJUUtfQkJfUkVHX05VTV07CgoJLyogZm9yIEFQSyAqLwoJdTMyCUFQS291dHB1dFsyXVsyXTsgLyogcGF0aCBBL0I7IG91dHB1dDFfMWEvb3V0cHV0MV8yYSAqLwoJdTgJYkFQS2RvbmU7Cgl1OAliQVBLVGhlcm1hbE1ldGVySWdub3JlOwoJdTgJYkRQZG9uZTsKCXU4CWJEUFBhdGhBT0s7Cgl1OAliRFBQYXRoQk9LOwp9OwoKZW51bSBhbnRfZGlmX3R5cGUgewoJTk9fQU5URElWCQkJPSAweEZGLAoJQ0dfVFJYX0hXX0FOVERJVgkJPSAweDAxLAoJQ0dDU19SWF9IV19BTlRESVYJCT0gMHgwMiwKCUZJWEVEX0hXX0FOVERJVgkJCT0gMHgwMywKCUNHX1RSWF9TTUFSVF9BTlRESVYJCT0gMHgwNCwKCUNHQ1NfUlhfU1dfQU5URElWCQk9IDB4MDUsCn07CgovKiAgMjAxMS8wOS8yMiBNSCBDb3B5IGZyb20gU0Q0IGRlZmluZWQgc3RydWN0dXJlLiBXZSB1c2UgdG8gc3VwcG9ydCBQSFkgRE0gaW50ZWdyYXRpb24uICovCnN0cnVjdCBkbV9vZG1fdCB7CgkvKiAgKi8KCS8qCUFkZCBmb3IgZGlmZmVyZW50IHRlYW0gdXNlIHRlbXBvcmFyaWx5ICovCgkvKiAgKi8KCXN0cnVjdCBydHdfYWRhcHRlcgkqQWRhcHRlcjsJCS8qICBGb3IgQ0UvTklDIHRlYW0gKi8KCgl1NjQJCQlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJCQlEZWJ1Z0xldmVsOwoKLyogIE9ETSBIQU5ETEUsIERSSVZFUiBORUVEUyBOT1QgVE8gSE9PSy0tLS0tLSAqLwoJYm9vbAkJCWJDY2tIaWdoUG93ZXI7Cgl1OAkJCVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KLyogIE9ETSBIQU5ETEUsIERSSVZFUiBORUVEUyBOT1QgVE8gSE9PSy0tLS0tLSAqLwoKLyogMSAgQ09NTU9OIElORk9STUFUSU9OICovCgoJLyogIEluaXQgVmFsdWUgKi8KLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoJLyogIE9ETSBTdXBwb3J0IEFiaWxpdHkgRElHL1JBVFIvVFhfUFdSX1RSQUNLLyChS6FLID0gMS8yLzMvoUsgKi8KCXUzMgkJCVN1cHBvcnRBYmlsaXR5OwoJLyogIE9ETSBjb21wb3NpdGUgb3IgaW5kZXBlbmRlbnQuIEJpdCBvcmllbnRlZC8gOTJDKzkyRCsgLi4uLiBvciBhbnkgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCQkJU3VwcG9ydElDVHlwZTsKCS8qICBDdXQgVmVyc2lvbiBUZXN0Q2hpcC9BLWN1dC9CLWN1dC4uLiA9IDAvMS8yLzMvLi4uICovCgl1OAkJCUN1dFZlcnNpb247CgkvKiAgRmFiIFZlcnNpb24gVFNNQy9VTUMgPSAwLzEgKi8KCXU4CQkJRmFiVmVyc2lvbjsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uLi4gPSAwLzEvMi8zLzQvLi4uICovCgl1OAkJCUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAkJCUV4dExOQTsKCS8qICB3aXRoIGV4dGVybmFsIFBBICBOTy9ZZXMgPSAwLzEgKi8KCXU4CQkJRXh0UEE7CgkvKiAgd2l0aCBleHRlcm5hbCBUUlNXICBOTy9ZZXMgPSAwLzEgKi8KCXU4CQkJRXh0VFJTVzsKCWJvb2wJCQliSW5IY3RUZXN0OwoJYm9vbAkJCWJXSUZJVGVzdDsKCglib29sCQkJYkR1YWxNYWNTbWFydENvbmN1cnJlbnQ7Cgl1MzIJCQlCS19TdXBwb3J0QWJpbGl0eTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICAqLwoJLyogIER5bmFtaWMgVmFsdWUgKi8KCS8qICAqLwovKiAgUE9JTlRFUiBSRUZFUkVOQ0UtLS0tLS0tLS0tLSAqLwoKCXU4CQkJdThfdGVtcDsKCWJvb2wJCQlib29sX3RlbXA7CglzdHJ1Y3QgcnR3X2FkYXB0ZXIJKlBBREFQVEVSX3RlbXA7CgovKiAgUE9JTlRFUiBSRUZFUkVOQ0UtLS0tLS0tLS0tLSAqLwoJLyogICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCglib29sCQkJYldJRklfRGlyZWN0OwoJYm9vbAkJCWJXSUZJX0Rpc3BsYXk7Cglib29sCQkJYkxpbmtlZDsKCXU4CQkJUlNTSV9NaW47Cgl1OAkJCUludGVyZmFjZUluZGV4OyAvKiAgQWRkIGZvciA5MkQgIGR1YWwgTUFDOiAwLS1NYWMwIDEtLU1hYzEgKi8KCWJvb2wJCWJJc01QQ2hpcDsKCWJvb2wJCQliT25lRW50cnlPbmx5OwoJLyogIENvbW1vbiBpbmZvIGZvciBCVERNICovCglib29sCQkJYkJ0RGlzYWJsZWQ7CQkJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCQkJYkJ0SHNPcGVyYXRpb247CQkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJCQlidEhzRGlnVmFsOwkJCS8qICB1c2UgQlQgcnNzaSB0byBkZWNpZGUgdGhlIERJRyB2YWx1ZSAqLwoJYm9vbAkJCWJCdERpc2FibGVFZGNhVHVyYm87CS8qICBVbmRlciBzb21lIGNvbmRpdGlvbiwgZG9uJ3QgZW5hYmxlIHRoZSBFRENBIFR1cmJvICovCglib29sCQkJYkJ0QnVzeTsJCQkvKiAgQlQgaXMgYnVzeS4gKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCgkvKiAyIERlZmluZSBTVEEgaW5mby4gKi8KCS8qICBfT0RNX1NUQV9JTkZPICovCgkvKiAgMjAxMi8wMS8xMiBNSCBGb3IgTVAsIHdlIG5lZWQgdG8gcmVkdWNlIG9uZSBhcnJheSBwb2ludGVyIGZvciBkZWZhdWx0IHBvcnQuPz8gKi8KCXN0cnVjdCBzdGFfaW5mbyAqCQlwT0RNX1N0YUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoKCS8qICBMYXRlc3QgcGFja2V0IHBoeSBpbmZvIChPRE0gd3JpdGUpICovCglzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbwkgUGh5RGJnSW5mbzsKCS8qIFBIWV9JTkZPXzg4RQkJUGh5SW5mbzsgKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJLyogTUFDX0lORk9fODhFCQlNYWNJbmZvOyAqLwoKCS8qICBEaWZmZXJlbnQgVGVhbSBpbmRlcGVuZHQgc3RydWN0dXJlPz8gKi8KCgkvKiAgKi8KCS8qIFRYX1JUUF9DTU4JCVRYX3JldHJwbzsgKi8KCS8qIFRYX1JUUF84OEUJCVRYX3JldHJwbzsgKi8KCS8qIFRYX1JUUF84MTk1CQlUWF9yZXRycG87ICovCgoJLyogICovCgkvKiBPRE0gU3RydWN0dXJlICovCgkvKiAgKi8KCXN0cnVjdCBkaWdfdAlETV9EaWdUYWJsZTsKCXN0cnVjdCBkeW5hbWljX3B3cl9zYXYJCURNX1BTVGFibGU7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMJRmFsc2VBbG1DbnQ7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMJRmxhc2VBbG1DbnRCdWRkeUFkYXB0ZXI7CglzdHJ1Y3Qgc3dfYW50X3N3CQlETV9TV0FUX1RhYmxlOwoKCXN0cnVjdCBlZGNhX3R1cmJvCQlETV9FRENBX1RhYmxlOwoJdTMyCQlXTU1FRENBX0JFOwoJLyogIENvcHkgZnJvbSBTRDQgc3RydWN0dXJlICovCgkvKiAgKi8KCS8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoJLyogICovCgoJLyogUFNEICovCgl1OAkJCVJTU0lfQlQ7CQkvKiBjb21lIGZyb20gQlQgKi8KCXN0cnVjdCBvZG1fcmF0ZV9hZGFwdAlSYXRlQWRhcHRpdmU7CgoKCXN0cnVjdCBvZG1fcmZfY2FsX3QJUkZDYWxpYnJhdGVJbmZvOwp9OwkvKiAgRE1fRHluYW1pY19NZWNoYW5pc21fU3RydWN0dXJlICovCgplbnVtIG9kbV9yZl9jb250ZW50IHsKCW9kbV9yYWRpb2FfdHh0ID0gMHgxMDAwLAoJb2RtX3JhZGlvYl90eHQgPSAweDEwMDEsCglvZG1fcmFkaW9jX3R4dCA9IDB4MTAwMiwKCW9kbV9yYWRpb2RfdHh0ID0gMHgxMDAzCn07CgovKiAgU3RhdHVzIGNvZGUgKi8KZW51bSBydF9zdGF0dXMgewoJUlRfU1RBVFVTX1NVQ0NFU1MsCglSVF9TVEFUVVNfRkFJTFVSRSwKCVJUX1NUQVRVU19QRU5ESU5HLAoJUlRfU1RBVFVTX1JFU09VUkNFLAoJUlRfU1RBVFVTX0lOVkFMSURfQ09OVEVYVCwKCVJUX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiwKCVJUX1NUQVRVU19OT1RfU1VQUE9SVCwKCVJUX1NUQVRVU19PU19BUElfRkFJTEVELAp9OwoKLyogaW5jbHVkZSAib2RtX2Z1bmN0aW9uLmgiICovCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBESUcgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgplbnVtIGRtX2RpZ19vcCB7CglESUdfVFlQRV9USFJFU0hfSElHSAk9IDAsCglESUdfVFlQRV9USFJFU0hfTE9XCT0gMSwKCURJR19UWVBFX0JBQ0tPRkYJCT0gMiwKCURJR19UWVBFX1JYX0dBSU5fTUlOCT0gMywKCURJR19UWVBFX1JYX0dBSU5fTUFYCT0gNCwKCURJR19UWVBFX0VOQUJMRQkJCT0gNSwKCURJR19UWVBFX0RJU0FCTEUJCT0gNiwKCURJR19PUF9UWVBFX01BWAp9OwoKI2RlZmluZQkJRE1fRElHX1RIUkVTSF9ISUdICQkJNDAKI2RlZmluZQkJRE1fRElHX1RIUkVTSF9MT1cJCQkzNQoKI2RlZmluZQkJRE1fU0NBTl9SU1NJX1RICQkJCTB4MTQgLyogc2NhbiByZXR1cm4gaXNzdWUgZm9yIExDICovCgoKI2RlZmluZQkJRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XCTQwMAojZGVmaW5lCQlETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICTEwMDAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDCQkJCTB4NGUKI2RlZmluZQkJRE1fRElHX01JTl9OSUMJCQkJMHgxZQoKI2RlZmluZQkJRE1fRElHX01BWF9BUAkJCQkweDMyCiNkZWZpbmUJCURNX0RJR19NSU5fQVAJCQkJMHgyMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUNfSFAJCQkweDQ2CiNkZWZpbmUJCURNX0RJR19NSU5fTklDX0hQCQkJMHgyZQoKI2RlZmluZQkJRE1fRElHX01BWF9BUF9IUAkJCQkweDQyCiNkZWZpbmUJCURNX0RJR19NSU5fQVBfSFAJCQkJMHgzMAoKLyogdml2aSA5MmMmOTJkIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiwgMjAxMTA1MDQgKi8KLyogdGhpcyBpcyBmb3IgOTJjICovCiNkZWZpbmUJCURNX0RJR19GQV9USDAJCQkJMHgyMDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMQkJCQkweDMwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgyCQkJCTB4NDAwCi8qIHRoaXMgaXMgZm9yIDkyZCAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgwXzkyRAkJCTB4MTAwCiNkZWZpbmUJCURNX0RJR19GQV9USDFfOTJECQkJMHg0MDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMl85MkQJCQkweDYwMAoKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfTUFYCQkJMTIKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfTUlOCQkJLTQKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJMTAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFHQyBSWCBIaWdoIFBvd2VyIE1vZGUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUgICAgICAgICAgTE5BX0xvd19HYWluXzEgICAgICAgICAgICAgICAgICAgICAgMHg2NAojZGVmaW5lICAgICAgICAgIExOQV9Mb3dfR2Fpbl8yICAgICAgICAgICAgICAgICAgICAgIDB4NUEKI2RlZmluZSAgICAgICAgICBMTkFfTG93X0dhaW5fMyAgICAgICAgICAgICAgICAgICAgICAweDU4CgojZGVmaW5lICAgICAgICAgIEZBX1JYSFBfVEgxICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwMAojZGVmaW5lICAgICAgICAgIEZBX1JYSFBfVEgyICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwMAojZGVmaW5lICAgICAgICAgIEZBX1JYSFBfVEgzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDAKI2RlZmluZSAgICAgICAgICBGQV9SWEhQX1RINCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAwCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMAoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRURDQSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIER5bmFtaWMgVHggUG93ZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIER5bmFtaWMgVHggUG93ZXIgQ29udHJvbCBUaHJlc2hvbGQgKi8KI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMgk3NAojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxCTY3CiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0FQCQkweDNGCgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9Ob3JtYWwJCTAKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTGV2ZWwxCQkxCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0xldmVsMgkJMgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9CVDEJCQkzCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMgkJCTQKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfMTUJCQk1CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzM1CQkJNgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF81MAkJCTcKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfNzAJCQk4CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzEwMAkJCTkKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIFJhdGUgQWRhcHRpdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURNX1JBVFJfU1RBX0lOSVQJCQkwCiNkZWZpbmUJCURNX1JBVFJfU1RBX0hJR0gJCQkxCiNkZWZpbmUJCQlETV9SQVRSX1NUQV9NSURETEUJCTIKI2RlZmluZQkJCURNX1JBVFJfU1RBX0xPVwkJCTMKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEJCIFBvd2VyIFNhdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKZW51bSBkbV8xcl9jY2EgewoJQ0NBXzFSID0wLAoJQ0NBXzJSID0gMSwKCUNDQV9NQVggPSAyLAp9OwoKZW51bSBkbV9yZl9kZWYgewoJUkZfU2F2ZSA9MCwKCVJGX05vcm1hbCA9IDEsCglSRl9NQVggPSAyLAp9OwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQW50ZW5uYSBEaXZlcnNpdHkgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmVudW0gZG1fc3dhcyB7CglBbnRlbm5hX0EgPSAxLAoJQW50ZW5uYV9CID0gMiwKCUFudGVubmFfTUFYID0gMywKfTsKCi8qICBNYXhpbWFsIG51bWJlciBvZiBhbnRlbm5hIGRldGVjdGlvbiBtZWNoYW5pc20gbmVlZHMgdG8gcGVyZm9ybSwgYWRkZWQgYnkgUm9nZXIsIDIwMTEuMTIuMjguICovCiNkZWZpbmUJTUFYX0FOVEVOTkFfREVURUNUSU9OX0NOVAkxMAoKLyogICovCi8qICBFeHRlcm4gR2xvYmFsIFZhcmlhYmxlcy4gKi8KLyogICovCiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyQwkzNwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkQJNDMKI2RlZmluZQlDQ0tfVEFCTEVfU0laRQkJMzMKCmV4dGVybgl1MzIgT0ZETVN3aW5nVGFibGUyM0FbT0ZETV9UQUJMRV9TSVpFXzkyRF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzMjNBW0NDS19UQUJMRV9TSVpFXVs4XTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxNDIzQSBbQ0NLX1RBQkxFX1NJWkVdWzhdOwoKCgovKiAgMjAxMDA1MTQgSm9zZXBoOiBBZGQgZGVmaW5pdGlvbiBmb3IgYW50ZW5uYSBzd2l0Y2hpbmcgdGVzdCBhZnRlciBsaW5rLiAqLwovKiAgVGhpcyBpbmRpY2F0ZXMgdHdvIGRpZmZlcmVudCB0aGUgc3RlcHMuICovCi8qICBJbiBTV0FXX1NURVBfUEVBSywgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBhbnRlbm5hIGFuZCBsaXN0ZW4gdG8gdGhlIHNpZ25hbCBvbiB0aGUgYWlyLiAqLwovKiAgSW4gU1dBV19TVEVQX0RFVEVSTUlORSwgZHJpdmVyIGp1c3QgY29tcGFyZXMgdGhlIHNpZ25hbCBjYXB0dXJlZCBpbiBTV0FXX1NURVBfUEVBSyAqLwovKiAgd2l0aCBvcmlnaW5hbCBSU1NJIHRvIGRldGVybWluZSBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGFudGVubmEuICovCiNkZWZpbmUgU1dBV19TVEVQX1BFQUsJCTAKI2RlZmluZSBTV0FXX1NURVBfREVURVJNSU5FCTEKCnN0cnVjdCBoYWxfZGF0YV84NzIzYTsKCnZvaWQgT0RNX1dyaXRlX0RJRzIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCXU4CUN1cnJlbnRJR0kpOwp2b2lkIE9ETV9Xcml0ZV9DQ0tfQ0NBX1RocmVzMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTgJQ3VyQ0NLX0NDQVRocmVzKTsKCnZvaWQgT0RNX1NldEFudGVubmEoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OCBBbnRlbm5hKTsKCgojZGVmaW5lIGRtX1JGX1NhdmluZwlPRE1fUkZfU2F2aW5nMjNhCnZvaWQgT0RNX1JGX1NhdmluZzIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4IGJGb3JjZUluTm9ybWFsKTsKCiNkZWZpbmUgZG1fQ2hlY2tUWFBvd2VyVHJhY2tpbmcJCU9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjazIzYQp2b2lkIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjazIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKYm9vbCBPRE1fUkFTdGF0ZUNoZWNrMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgczMyIFJTU0ksIGJvb2wgYkZvcmNlVXBkYXRlLAoJCSAgICAgIHU4ICpwUkFUUlN0YXRlKTsKCgp1MzIgQ29udmVydFRvX2RCMjNhKHUzMiBWYWx1ZSk7Cgp1MzIgR2V0UFNERGF0YShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHVuc2lnbmVkIGludCBwb2ludCwgdTggaW5pdGlhbF9nYWluX3BzZCk7Cgp2b2lkIG9kbV9ESUcyM2FieVJTU0lfTFBTKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgp1MzIgT0RNX0dldF9SYXRlX0JpdG1hcDIzYShzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhLCB1MzIgbWFjaWQsIHUzMiByYV9tYXNrLCB1OCByc3NpX2xldmVsKTsKCgp2b2lkIE9ETTIzYV9ETUluaXQoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCnZvaWQgT0RNX0RNV2F0Y2hkb2cyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKCnZvaWQgT0RNX0NtbkluZm9Jbml0MjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgZW51bSBvZG1fY21uaW5mbwlDbW5JbmZvLCB1MzIgVmFsdWUpOwoKdm9pZCBPRE1fQ21uSW5mb1B0ckFycmF5SG9vazIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIGVudW0gb2RtX2NtbmluZm8JQ21uSW5mbywgdTE2IEluZGV4LCB2b2lkICpwVmFsdWUpOwoKdm9pZCBPRE1fQ21uSW5mb1VwZGF0ZTIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBDbW5JbmZvLCB1NjQgVmFsdWUpOwoKdm9pZCBPRE1fUmVzZXRJUUtSZXN1bHQoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKCnZvaWQgT0RNX0FudHNlbFN0YXRpc3RpY3NfODhDKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggTWFjSWQsIHUzMiBQV0RCQWxsLCBib29sIGlzQ0NLcmF0ZSk7Cgp2b2lkIE9ETV9TaW5nbGVEdWFsQW50ZW5uYURlZmF1bHRTZXR0aW5nKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgpib29sIE9ETV9TaW5nbGVEdWFsQW50ZW5uYURldGVjdGlvbihzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4IG1vZGUpOwoKI2VuZGlmCg==