Ci8vICAgdmltOnR3PTExMDp0cz00OgojaWZuZGVmIEhDRl9ICiNkZWZpbmUgSENGX0ggMQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRklMRQkgOiBoY2YuaAoqCiogREFURSAgIDogJERhdGU6IDIwMDQvMDgvMDUgMTE6NDc6MTAgJCAgICRSZXZpc2lvbjogMS43ICQKKiBPcmlnaW5hbDogMjAwNC8wNS8xOSAwNzoyNjowMSAgICBSZXZpc2lvbjogMS41NiAgICAgIFRhZzogaGNmN190MjAwNDA2MDJfMDEKKiBPcmlnaW5hbDogMjAwNC8wNS8xMiAwODo0NzoyMyAgICBSZXZpc2lvbjogMS41MyAgICAgIFRhZzogaGNmN190N18yMDA0MDUxM18wMQoqIE9yaWdpbmFsOiAyMDA0LzA0LzE1IDA5OjI0OjQyICAgIFJldmlzaW9uOiAxLjQ2ICAgICAgVGFnOiBoY2Y3X3Q3XzIwMDQwNDE1XzAxCiogT3JpZ2luYWw6IDIwMDQvMDQvMDggMTU6MTg6MTYgICAgUmV2aXNpb246IDEuNDUgICAgICBUYWc6IHQ3XzIwMDQwNDEzXzAxCiogT3JpZ2luYWw6IDIwMDQvMDQvMDEgMTU6MzI6NTUgICAgUmV2aXNpb246IDEuNDMgICAgICBUYWc6IHQ3XzIwMDQwNDAxXzAxCiogT3JpZ2luYWw6IDIwMDQvMDMvMTAgMTU6Mzk6MjggICAgUmV2aXNpb246IDEuMzkgICAgICBUYWc6IHQyMDA0MDMxMF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAzLzA0IDExOjAzOjM4ICAgIFJldmlzaW9uOiAxLjM3ICAgICAgVGFnOiB0MjAwNDAzMDRfMDEKKiBPcmlnaW5hbDogMjAwNC8wMy8wMiAxNDo1MToyMSAgICBSZXZpc2lvbjogMS4zNSAgICAgIFRhZzogdDIwMDQwMzAyXzAzCiogT3JpZ2luYWw6IDIwMDQvMDIvMjQgMTM6MDA6MjggICAgUmV2aXNpb246IDEuMjggICAgICBUYWc6IHQyMDA0MDIyNF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAyLzA5IDE0OjUwOjE0ICAgIFJldmlzaW9uOiAxLjI2ICAgICAgVGFnOiB0MjAwNDAyMTlfMDEKKgoqIEFVVEhPUiA6IE5pY28gVmFsc3RlcgoqCiogU1BFQ0lGSUNBVElPTjogLi4uLi4uLi4uLgoqCiogREVTQyAgIDogRGVmaW5pdGlvbnMgYW5kIFByb3RvdHlwZXMgZm9yIE1TRiBhcyB3ZWxsIGFzIEhDRiBzb3VyY2VzCioKKgkJICAgQ3VzdG9taXphYmxlIHZpYSBIQ0ZDRkcuSAoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKgoqIFNPRlRXQVJFIExJQ0VOU0UKKgoqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAoqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgoqCiogQ09QWVJJR0hUIKkgMTk5NCAtIDE5OTUJYnkgQVQmVC4JCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIENPUFlSSUdIVCCpIDE5OTYgLSAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMuCUFsbCBSaWdodHMgUmVzZXJ2ZWQKKiBDT1BZUklHSFQgqSAyMDAxIC0gMjAwNAlieSBBZ2VyZSBTeXN0ZW1zIEluYy4JQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCioKKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAoqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKgoqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKiAgICBkaXN0cmlidXRpb24uCioKKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCioKKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwoqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQoqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoqCiogRGlzY2xhaW1lcgoqCiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgoqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwoqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAoqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICiogREFNQUdFLgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaW5jbHVkZSAiaGNmY2ZnLmgiCS8vIFN5c3RlbSBDb25zdGFudHMgdG8gYmUgZGVmaW5lZCBieSB0aGUgTVNGLXByb2dyYW1tZXIgdG8gdGFpbG9yIHRoZSBIQ0YKI2luY2x1ZGUgIm1kZC5oIgkvLyBJbmNsdWRlIGZpbGUgY29tbW9uIGZvciBIQ0YsIE1TRgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgTUFDUk9TICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojZGVmaW5lIExPRih4KSAJCQkoc2l6ZW9mKHgpL3NpemVvZihoY2ZfMTYpLTEpCgovKglFbmRpYW5lc3MKICoJTGl0dGxlIEVuZGlhbiAoYS5rLmEuIEludGVsKSwgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdAogKglCaWcgRW5kaWFuIChhLmsuYS4gTW90b3JvbGEpLCBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QKICoKICogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHN1cHBsaWVkCiAqICBvIENOVl9MSVRUTEVfVE9fU0hPUlQodykJCQlpbnRlcnByZXRzIHRoZSAxNi1iaXRzIGlucHV0IHZhbHVlIGFzIExpdHRsZSBFbmRpYW4sIHJldHVybnMgYW4gaGNmXzE2CiAqIAlvIENOVl9CSUdfVE9fU0hPUlQodykJCQkJaW50ZXJwcmV0cyB0aGUgMTYtYml0cyBpbnB1dCB2YWx1ZSBhcyBCaWcgRW5kaWFuLCByZXR1cm5zIGFuIGhjZl8xNgogKgogKi8KCi8qIFRvIGluY3JlYXNlIHBvcnRhYmlsaXR5LCB1c2UgdW5zaWduZWQgY2hhciBhbmQgdW5zaWduZWQgY2hhciAqIHdoZW4gYWNjZXNzaW5nIHBhcnRzIG9mIGxhcmdlcgogKiB0eXBlcyB0byBjb252ZXJ0IHRoZWlyIEVuZGlhbmVzcwogKi8KCiNkZWZpbmUgQ05WX0VORF9TSE9SVCh3KSAgKGhjZl8xNikoICgoaGNmXzE2KSh3KSAmIDB4MDBGRikgPDwgOCB8ICgoaGNmXzE2KSh3KSAmIDB4RkYwMCkgPj4gOCApCiNkZWZpbmUgQ05WX0VORF9MT05HKGR3KSAgKGhjZl8zMikoIChkdyA+PiAyNCkgfCAoKGR3ID4+IDgpICYgMHhmZjAwKSB8ICgoZHcgPDwgOCkgJiAweGZmMDAwMCkgfCAoZHcgPDwgMjQpICkKCiNpZiBIQ0ZfQklHX0VORElBTgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEIgSSBHICAgRSBOIEQgSSBBIE4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojZGVmaW5lIENOVl9MSVRUTEVfVE9fU0hPUlQodykJQ05WX0VORF9TSE9SVCh3KQkvLyAgICBlbmRpYW5lc3MgY29udmVyc2lvbiBuZWVkZWQKI2RlZmluZSBDTlZfQklHX1RPX1NIT1JUKHcpCQkodykJCQkJLy8gbm8gZW5kaWFuZXNzIGNvbnZlcnNpb24gbmVlZGVkCiNkZWZpbmUgQ05WX0xJVFRMRV9UT19MT05HKGR3KQlDTlZfRU5EX0xPTkcoZHcpCiNkZWZpbmUgQ05WX0xPTkdfVE9fTElUVExFKGR3KQlDTlZfRU5EX0xPTkcoZHcpCiNlbHNlCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEwgSSBUIFQgTCBFICAgRSBOIEQgSSBBIE4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojZGVmaW5lIENOVl9MSVRUTEVfVE9fU0hPUlQodykgCSh3KQkJCQkvLyBubyBlbmRpYW5lc3MgY29udmVyc2lvbiBuZWVkZWQKI2RlZmluZSBDTlZfQklHX1RPX1NIT1JUKHcpCQlDTlZfRU5EX1NIT1JUKHcpCS8vICAgIGVuZGlhbmVzcyBjb252ZXJzaW9uIG5lZWRlZAojZGVmaW5lIENOVl9MSVRUTEVfVE9fTE9ORyhkdykJKGR3KQojZGVmaW5lIENOVl9MT05HX1RPX0xJVFRMRShkdykJKGR3KQoKI2lmIGRlZmluZWQgSENGX0FMSUdOICYmIEhDRl9BTElHTiA+IDEKI2RlZmluZSBDTlZfU0hPUlRQX1RPX0xJVFRMRShwdykJKChoY2ZfMTYpKCooaGNmXzggKilwdykpIAkJCXwgKChoY2ZfMTYpKCooKGhjZl84ICopcHcrMSkpIDw8IDgpCiNkZWZpbmUgQ05WX0xPTkdQX1RPX0xJVFRMRShwZHcpCSgoaGNmXzMyKSgqKGhjZl84ICopcGR3KSkgCQkJfCAoKGhjZl8zMikoKigoaGNmXzggKilwZHcrMSkpIDw8IDgpIAl8IFwKCQkJCQkJCQkJKChoY2ZfMzIpKCooKGhjZl84ICopcGR3KzIpKSA8PCAxNikgfCAoKGhjZl8zMikoKigoaGNmXzggKilwZHcrMykpIDw8IDI0KQojZWxzZQojZGVmaW5lIENOVl9MT05HUF9UT19MSVRUTEUocGR3KQkoKihoY2ZfMzIgKilwZHcpCiNkZWZpbmUgQ05WX1NIT1JUUF9UT19MSVRUTEUocHcpCSgqKGhjZl8xNiAqKXB3KQojZW5kaWYKCiNlbmRpZiAvLyBIQ0ZfQklHX0VORElBTgoKLy8gY29udmVyc2lvbiBtYWNyb3Mgd2hpY2ggY2FuIGJlIGV4cHJlc3NlZCBpbiBvdGhlciBtYWNyb3MKI2RlZmluZSBDTlZfU0hPUlRfVE9fTElUVExFKHcpCUNOVl9MSVRUTEVfVE9fU0hPUlQodykKI2RlZmluZSBDTlZfU0hPUlRfVE9fQklHKHcpCQlDTlZfQklHX1RPX1NIT1JUKHcpCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIEVORCBPRiBNQUNST1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIG9mZnNldHMgVHJhbnNtaXQvUmVjZWl2ZSBGcmFtZSBTdHJ1Y3R1cmUKI2RlZmluZSBIRlNfU1RBVAkJCQkweDAwMDAKI2RlZmluZSBIRlNfU1dTVVAJCQkJMHgwMDA2CQkJCQkvL1NXIFN1cHBvcnQKI2RlZmluZSBIRlNfUV9JTkZPCQkJCTB4MDAwNgkJCQkJLy9TaWduYWwvU2lsZW5jZSBsZXZlbAojZGVmaW5lIEhGU19SQVRFCQkJCTB4MDAwOAkJCQkJLy9SeEZsb3cvUmF0ZQojZGVmaW5lIAlIRlNfU1RBVF9FUlIJCVJYX1NUQVRfRVJSCQkJCS8vbGluayAibmF0dXJhbCIgSENGIG5hbWUgdG8gIm5hdHVyYWwiIE1TRiBuYW1lCiNkZWZpbmUgSEZTX1RYX0NOVEwJCQkJMHgwMDM2CgkJCQkJCQkJCQkJCQkJLy8gSC1JICAgICBILUlJCiNkZWZpbmUgSEZTX0RBVF9MRU4JCQkJKEhGU19BRERSX0RFU1QgLSAyKQkJLy8gMHgwMDJDICAweDAwMzgKI2RlZmluZSBIRlNfQUREUl9ERVNUCQkJMHgwMDNBCQkJCQkvLyAweDAwMkUgIDB4MDAzQQojZGVmaW5lIEhGU19BRERSX1NSQwkJCShIRlNfQUREUl9ERVNUICsgNikJCS8vIDB4MDAzNCAgMHgwMDQwCiNkZWZpbmUgSEZTX0xFTgkJCQkJKEhGU19BRERSX1NSQyAgKyA2KQkJLy8gMHgwMDNBICAweDAwNDYKI2RlZmluZSBIRlNfREFUCQkJCQkoSEZTX0xFTiAgICAgICArIDIpCQkvLyAweDAwM0MgIDB4MDA0OAojZGVmaW5lIEhGU19UWVBFCQkJCShIRlNfREFUICAgICAgICsgNikJCS8vIDB4MDA0MiAgMHgwMDRFCgoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgRCBFIFMgQyBSIEkgUCBUIE8gUiAgIFMgVCBSIFUgQyBUIFUgUiBFICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy87P01ERC5IIHN0dWZmIDs/CgojaWYgSENGX0JJR19FTkRJQU4KI2RlZmluZSBERVNDX1NUUkNUX0NOVAkJMAojZGVmaW5lIERFU0NfU1RSQ1RfU0laRQkJMQojZWxzZQojZGVmaW5lIERFU0NfU1RSQ1RfQ05UCQkxCiNkZWZpbmUgREVTQ19TVFJDVF9TSVpFCQkwCiNlbmRpZiAvLyBIQ0ZfQklHX0VORElBTgoKI2RlZmluZQlCVUZfQ05UCQkJCWJ1Zl9kaW1bREVTQ19TVFJDVF9DTlRdCiNkZWZpbmUJQlVGX1NJWkUJCQlidWZfZGltW0RFU0NfU1RSQ1RfU0laRV0KCnR5cGVkZWYgc3RydWN0IERFU0NfU1RSQ1QgewoJaGNmXzE2CQkJCQlidWZfZGltWzJdOwoJaGNmXzMyCQkJCQlidWZfcGh5c19hZGRyOwoJaGNmXzMyCQkJCQluZXh0X2Rlc2NfcGh5c19hZGRyOwkvLyBwaHlzaWNhbCBhZGRyZXNzIG9mIG5leHQgZGVzY3JpcHRvcgoJaGNmXzMyCQkJCQlkZXNjX3BoeXNfYWRkcjsJCQkvLyBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgZGVzY3JpcHRvcgoJc3RydWN0IERFU0NfU1RSQ1QgCQkqbmV4dF9kZXNjX2FkZHI7CgloY2ZfOAlGQVIJCQkJKmJ1Zl9hZGRyOwojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9ERVNDX1NUUkNUCgl2b2lkIEZBUgkJCSAgICpERVNDX01TRlN1cDsJCQkvLyBwb2ludGVyIGZvciBhcmJpdHJhcnkgdXNlIGJ5IHRoZSBNU0YKI2VuZGlmIC8vIEhDRl9ERVNDX1NUUkNUX0VYVAp9IERFU0NfU1RSQ1Q7CgojZGVmaW5lIEhDRl9EQVNBX1NJWkUJCQkxMgkJCQkJCQkvL3NpemUgaW4gYnl0ZXMgZm9yIERBL1NBCgojZGVmaW5lIERFU0NfQ05UX01BU0sgCQkJMHgwRkZGCgojZGVmaW5lIEdFVF9CVUZfU0laRShkZXNjcCkgICAgICAgKChkZXNjcCktPkJVRl9TSVpFKQojZGVmaW5lIEdFVF9CVUZfQ05UKGRlc2NwKSAgICAgICAgKChkZXNjcCktPkJVRl9DTlQpCiNkZWZpbmUgU0VUX0JVRl9TSVpFKGRlc2NwLCBzaXplKSAoZGVzY3ApLT5CVUZfU0laRSA9IHNpemU7CiNkZWZpbmUgU0VUX0JVRl9DTlQoZGVzY3AsIGNvdW50KSAoZGVzY3ApLT5CVUZfQ05UID0gY291bnQ7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICBUIEEgTCBMIEkgRSBTICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnR5cGVkZWYgc3RydWN0ICB7ICAvL0hlcm1lcyBUYWxsaWVzIChJRkIgc3Vic3RydWN0dXJlKQogIGhjZl8zMglUeFVuaWNhc3RGcmFtZXM7CiAgaGNmXzMyCVR4TXVsdGljYXN0RnJhbWVzOwogIGhjZl8zMglUeEZyYWdtZW50czsKICBoY2ZfMzIJVHhVbmljYXN0T2N0ZXRzOwogIGhjZl8zMglUeE11bHRpY2FzdE9jdGV0czsKICBoY2ZfMzIJVHhEZWZlcnJlZFRyYW5zbWlzc2lvbnM7CiAgaGNmXzMyCVR4U2luZ2xlUmV0cnlGcmFtZXM7CiAgaGNmXzMyCVR4TXVsdGlwbGVSZXRyeUZyYW1lczsKICBoY2ZfMzIJVHhSZXRyeUxpbWl0RXhjZWVkZWQ7CiAgaGNmXzMyCVR4RGlzY2FyZHM7CiAgaGNmXzMyCVJ4VW5pY2FzdEZyYW1lczsKICBoY2ZfMzIJUnhNdWx0aWNhc3RGcmFtZXM7CiAgaGNmXzMyCVJ4RnJhZ21lbnRzOwogIGhjZl8zMglSeFVuaWNhc3RPY3RldHM7CiAgaGNmXzMyCVJ4TXVsdGljYXN0T2N0ZXRzOwogIGhjZl8zMglSeEZDU0Vycm9yczsKICBoY2ZfMzIJUnhEaXNjYXJkc05vQnVmZmVyOwogIGhjZl8zMglUeERpc2NhcmRzV3JvbmdTQTsKICBoY2ZfMzIJUnhXRVBVbmRlY3J5cHRhYmxlOwogIGhjZl8zMglSeE1zZ0luTXNnRnJhZ21lbnRzOwogIGhjZl8zMglSeE1zZ0luQmFkTXNnRnJhZ21lbnRzOwogIGhjZl8zMglSeERpc2NhcmRzV0VQSUNWRXJyb3I7CiAgaGNmXzMyCVJ4RGlzY2FyZHNXRVBFeGNsdWRlZDsKI2lmIChIQ0ZfRVhUKSAmIEhDRl9FWFRfVEFMTElFU19GVwogIGhjZl8zMglUYWxsaWVzRXh0cmFbMzJdOwojZW5kaWYgLy8gSENGX0VYVF9UQUxMSUVTX0ZXCn0gQ0ZHX0hFUk1FU19UQUxMSUVTX1NUUkNUOwoKdHlwZWRlZiBzdHJ1Y3QgIHsgIC8vSENGIFRhbGxpZXMgKElGQiBzdWJzdHJ1Y3R1cmUpCiAgaGNmXzMyCU5vQnVmSW5mbzsgIAkJCQkvL05vIGJ1ZmZlciBhdmFpbGFibGUgZm9yIHVuc29saWNpdGVkIE5vdGlmeSBmcmFtZQogIGhjZl8zMglOb0J1Zk1COwkJCQkJLy9ObyBzcGFjZSBhdmFpbGFibGUgaW4gTWFpbEJveAogIGhjZl8zMglNaXNjRXJyOwkJCQkJLyogQ29tbWFuZCBlcnJvcnMKICAJCQkJCQkJCQkJICogIC0gdGltZSBvdXQgb24gY29tcGxldGlvbiBzeW5jaHJvbm91cyBwYXJ0IEhlcm1lcyBDb21tYW5kCiAgCQkJCQkJCQkJCSAqICAtIGNvbXBsZXRlZCBIZXJtZXMgQ29tbWFuZCBkb2Vzbid0IG1hdGNoIG9yaWdpbmFsIGNvbW1hbmQKICAJCQkJCQkJCQkJICogIC0gc3RhdHVzIG9mIGNvbXBsZXRlZCBIZXJtZXMgQ29tbWFuZCBjb250YWlucyBlcnJvciBiaXRzCiAgCQkJCQkJCQkJCSAqLwojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9UQUxMSUVTX0ZXCiAgaGNmXzMyCUVuZ0NudFs4XTsKI2VuZGlmIC8vIEhDRl9FWFRfVEFMTElFU19GVwp9IENGR19IQ0ZfVEFMTElFU19TVFJDVDsKCi8vTm90ZSB0aGlzIHdheSB0byBkZWZpbmUgLi4uX1RBTF9DTlQgaW1wbGllcyB0aGF0IGFsbCB0YWxsaWVzIG11c3Qga2VlcCB0aGUgc2FtZSAoaGNmXzMyKSBzaXplCiNpZiAoSENGX1RBTExJRVMpICYgKCBIQ0ZfVEFMTElFU19OSUMgfCBIQ0ZfVEFMTElFU19IQ0YgKQojaWYgKEhDRl9UQUxMSUVTKSAmIEhDRl9UQUxMSUVTX05JQwkvL0hlcm1lcyB0YWxseSBzdXBwb3J0CiNkZWZpbmUJCUhDRl9OSUNfVEFMX0NOVAkoc2l6ZW9mKENGR19IRVJNRVNfVEFMTElFU19TVFJDVCkvIHNpemVvZihoY2ZfMzIpKQojZWxzZQojZGVmaW5lCQlIQ0ZfTklDX1RBTF9DTlQJMAojZW5kaWYgLy8gSENGX1RBTExJRVMKI2lmIChIQ0ZfVEFMTElFUykgJiBIQ0ZfVEFMTElFU19IQ0YJLy9IQ0YgdGFsbHkgc3VwcG9ydAojZGVmaW5lCQlIQ0ZfSENGX1RBTF9DTlQJKHNpemVvZihDRkdfSENGX1RBTExJRVNfU1RSQ1QpICAgLyBzaXplb2YoaGNmXzMyKSkKI2Vsc2UKI2RlZmluZQkJSENGX0hDRl9UQUxfQ05UCTAKI2VuZGlmIC8vIEhDRl9UQUxMSUVTCiNkZWZpbmUgSENGX1RPVF9UQUxfQ05UICggSENGX05JQ19UQUxfQ05UICsgSENGX05JQ19UQUxfQ05UICkKI2VuZGlmIC8vIEhDRl9UQUxMSUVTX05JQyAvIEhDRl9UQUxMSUVTX0hDRgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSSBOIFQgRSBSIEYgQSBDIEUgICBCIEwgTyBDIEsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojZGVmaW5lIElGQl9WRVJTSU9OIDB4MEUJIAkJCS8vIGluaXRpYWxseSAwLCB0byBiZSBpbmNyZW1lbnRlZCBieSBldmVyeSBJRkIgbGF5b3V0IGNoYW5nZQoKdHlwZWRlZiBzdHJ1Y3QgIHsKICBoY2ZfaW8JCUlGQl9JT0Jhc2U7CQkJCS8vIEkvTyBhZGRyZXNzIG9mIEhlcm1lcyBjaGlwIGFzIHBhc3NlZCBieSBNU0YgYXQgaGNmX2Nvbm5lY3QgY2FsbAogIGhjZl8xNgkJSUZCX0lPUmFuZ2U7CQkJLy8gSS9PIFJhbmdlIHVzZWQgYnkgSGVybWVzIGNoaXAKICBoY2ZfMTYJCUlGQl9ETE1vZGU7CQkJCS8vIERvd25sb2FkIE1vZGUgc3RhdGUKICBoY2ZfMTYJCUlGQl9DbWQ7CQkJCS8vIGNtZCBpbiBwcm9ncmVzcyBmbGFnLCB0byBiZSBhY2stZWQgYmVmb3JlIG5leHQgY21kIGNhbiBiZSBpc3N1ZWQKICBoY2ZfMTYJCUlGQl9SeEZJRDsJCQkJLy8gRklEIG9mICJjdXJyZW50IiBSeEZTIChub24tRE1BIG1vZGUpCi8vOz8jaWYgdHhfZGVsYXkgb3B0aW9uCiAgaGNmXzE2CQlJRkJfVHhGSUQ7CQkJCS8vIGZpZCBzdG9yYWdlIGR1cmluZyAiZGVsYXllZCIgc2VuZAovLzs/I2VuZGlmIHR4X2RlbGF5IG9wdGlvbgogIGhjZl8xNgkJSUZCX1J4TGVuOwkJCQkvLwogIGhjZl8xNgkJSUZCX0RlZnVuY3RTdGF0OwkJLy8gQkFQIGluaXRpYWxpemF0aW9uIG9yIENtZCBDb21wbGV0aW9uIGZhaWxlZAogIGhjZl8xNgkJSUZCX0VyckNtZDsJCQkJLy8gY29udGVudHMgU3RhdHVzIHJlZyB3aGVuIGVycm9yIGJpdHMgYW5kL29yIG1pc21hdGNoIGluIGNtZF93YWl0CiAgaGNmXzE2CQlJRkJfRXJyUXVhbGlmaWVyOwkJLy8gY29udGVudHMgUmVzcDAgIHJlZyB3aGVuIGVycm9yIGJpdHMgYW5kL29yIG1pc21hdGNoIGluIGNtZF93YWl0CiAgaGNmXzE2CQlJRkJfbGFsOwkJCQkvLyBMb29rQWhlYWQgTGVuZ3RoCiAgd2NpX2J1ZnAJCUlGQl9sYXA7CQkJCS8vIExvb2tBaGVhZCBCdWZmZXIgcG9pbnRlcgogIGhjZl8xNgkJSUZCX0xpbmtTdGF0OwkJCS8vIExpbmsgU3RhdHVzCiAgaGNmXzE2CQlJRkJfRFNMaW5rU3RhdDsJCQkvLyBMaW5rIFN0YXR1cywgbmV3IHN0cmF0ZWd5IGludHJvZHVjZWQgZm9yIERlZXBTbGVlcAogIGhjZl8xNgkJSUZCX0NhcnJ5SW47CQkJLy8gY2FycnkgYW5kIGNhcnJ5LWZsYWcgdG8gbW92ZSAxIGJ5dGUgZnJvbSBvbmUgZ2V0X2ZyYWcgdG8gdGhlIG5leHQKICBoY2ZfMTYJCUlGQl9DYXJyeU91dDsJCQkvLyBjYXJyeSBhbmQgY2FycnktZmxhZyB0byBtb3ZlIDEgYnl0ZSBmcm9tIG9uZSBwdXRfZnJhZyB0byB0aGUgbmV4dAogIGhjZl8xNgkJSUZCX1ZlcnNpb247CQkJLy8gSUZCX1ZFUlNJT04sIGluY3JlbWVudGVkIGJ5IGV2ZXJ5IFNJR05JRklDQU5UIElGQiBsYXlvdXQgY2hhbmdlCiAgaGNmXzE2CQlJRkJfQ2FyZFN0YXQ7CQkJLy8gTklDIGVycm9yIC8gRi9XIGluY29tcGF0aWJpbGl0eSBzdGF0dXMKICBoY2ZfMTYgIAkJSUZCX1JzY0luZDsJCQkJLy8gbm9uLURNQTogVHhGSUQgYXZhaWxhYmxlLCBETUE6IGFsd2F5cyAxCiAgaGNmXzE2CQlJRkJfQ250bE9wdDsJCQkvLyBmbGFnczogMzIgYml0cyBJL08sIERNQSBhdmFpbGFibGUsIERNQSBlbmFibGVkCiAgaGNmXzE2CQlJRkJfQnVzVHlwZTsJCQkvLyBCdXNUeXBlLCBkZXJpdmVkIHZpYSBDRkdfTklDX0JVU19UWVBFCiAgQ0ZHX0ZXX0lERU5USVRZX1NUUkNUCSBJRkJfRldJZGVudGl0eTsgLyoga2VlcCBGV0lkZW50aXR5L1N1cCBhbmQgUFJJSWRlbnRpdHkvU3VwIGluIHNlcXVlbmNlCgkJCQkJCQkJCQkgICogYmVjYXVzZSBvZiB0aGUgKGR1bWIpIGNvcHkgaW4gaW5pdCgpICovCiNpZiBkZWZpbmVkIE1TRl9DT01QT05FTlRfSUQKICBDRkdfU1VQX1JBTkdFX1NUUkNUCSBJRkJfRldTdXA7CiAgQ0ZHX1BSSV9JREVOVElUWV9TVFJDVCBJRkJfUFJJSWRlbnRpdHk7CiAgQ0ZHX1NVUF9SQU5HRV9TVFJDVAkgSUZCX1BSSVN1cDsKICBDRkdfU1VQX1JBTkdFX1NUUkNUCSBJRkJfSFNJU3VwOwojZW5kaWYgLy8gTVNGX0NPTVBPTkVOVF9JRAojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9JTkZPX0xPRwogIFJJRF9MT0dQCQlJRkJfUklETG9ncDsJCQkvLyBwb2ludGVyIHRvIFJJRF9MT0cgc3RydWN0dXJlCiNlbmRpZiAvLyBIQ0ZfRVhUX0lORk9fTE9HCiNpZiBIQ0ZfUFJPVF9USU1FCiAgaGNmXzMyCSAJSUZCX1RpY2tJbmk7CQkJLy8gaW5pdGlhbGl6YXRpb24gb2YgUy9XIGNvdW50ZXIgYmFzZWQgcHJvdGVjdGlvbiBsb29wCiNlbmRpZiAvLyBIQ0ZfUFJPVF9USU1FCiNpZiAoSENGX0VYVCkgJiBIQ0ZfRVhUX0lOVF9USUNLCiAgaW50CQkJSUZCX1RpY2tDbnQ7CQkJLy8gSGVybWVzIFRpbWVyIFRpY2sgQ291bnRlcgojZW5kaWYgLy8gSENGX0VYVF9JTlRfVElDSwogIGhjZl8xNiAJICAgKklGQl9NQnA7CQkJCS8vIHBvaW50ZXIgdG8gdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQlNpemU7CQkJCS8vIHNpemUgb2YgdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQldwOwkJCQkvLyB6ZXJvLWJhc2VkIHdyaXRlIGluZGV4IGludG8gdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQlJwOwkJCQkvLyB6ZXJvLWJhc2VkIHJlYWQgIGluZGV4IGludG8gdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQkluZm9MZW47CQkJLy8gY29udGVudHMgb2YgTC1maWVsZCBvZiB0aGUgb2xkZXN0IGF2YWlsYWJsZSBNYWlsQm94SW5mb0Jsb2NrCiNpZiAoSENGX1RZUEUpICYgSENGX1RZUEVfV1BBCiAgaGNmXzE2CQlJRkJfTUlDVHhDbnRsOwkJCS8vIE1JQyBiaXQgYW5kIEtleSBpbmRleCBpbiBUeENvbnRyb2wgZmllbGQgb2YgVHhGUwogIGhjZl8zMgkJSUZCX01JQ1R4S2V5WzJdOwkJLy8gY2FsY3VsYXRpbmcga2V5CiAgaGNmXzMyCQlJRkJfTUlDVHhbMl07ICAgCSAgCS8vIFR4IE1JQyBjYWxjdWxhdGlvbiBFbmdpbmUgc3RhdGUKICBoY2ZfMTYJCUlGQl9NSUNUeENhcnJ5OwkJCS8vIHRlbXAgbGVuZ3RoLCBjYXJyaWVzIG92ZXIgZnJvbSBvbmUgVHggZnJhZ21lbnQgdG8gYW5vdGhlcgogIGhjZl8xNgkJSUZCX01JQ1J4Q2Fycnk7CQkJLy8gdGVtcCBsZW5ndGgsIGNhcnJpZXMgb3ZlciBmcm9tIG9uZSBSeCBmcmFnbWVudCB0byBhbm90aGVyCiAgaGNmXzMyCQlJRkJfTUlDUnhLZXlbNCoyXTsJCS8vIDQgY2hlY2tpbmcga2V5cwogIGhjZl8zMgkJSUZCX01JQ1J4WzJdOyAJIAkJLy8gUnggTUlDIGNhbGN1bGF0aW9uIEVuZ2luZSBzdGF0ZQojZW5kaWYgLy8gSENGX1RZUEVfV1BBCiNpZiBIQ0ZfQVNTRVJUCiNpZiAoSENGX0FTU0VSVCkgJiBIQ0ZfQVNTRVJUX01CCiAgQ0ZHX01CX0lORk9fUkFOR0UxX1NUUkNUCUlGQl9Bc3NlcnRTdHJjdDsgLy8gQWRkIHNvbWUgY29tcGxpY2F0aW9uIHRvIHRoZSBIQ0YgYXMgcHJpemUgZm9yIHRoZSBuZXcgTVNGIEkvRgojZW5kaWYgLy8gSENGX0FTU0VSVF9NQgogIAkJCQkJCQkJCQkvLyB0YXJnZXQgb2YgYWJvdmUgSUZCX0Fzc2VydFN0cmN0CiAgaGNmXzE2CQlJRkJfQXNzZXJ0TGluZTsJCQkvLyAgLSBsaW5lIG51bWJlciAoICsgZW5jb2RlZCBtb2R1bGUgbmFtZSApCiAgaGNmXzE2CQlJRkJfQXNzZXJ0VHJhY2U7CQkvLyAgLSBiaXQgYmFzZWQgdHJhY2Ugb2YgYWxsIGhjZl8uLi4uIGludm9jYXRpb25zCiAgaGNmXzMyCQlJRkJfQXNzZXJ0UXVhbGlmaWVyOwkvLyAgLSBxdWFsaWZpZXIKICBoY2ZfMTYJCUlGQl9Bc3NlcnRMdmw7CQkJLy8gQXNzZXJ0IEZpbHRlcmluZywgTm90IHlldCBpbXBsZW1lbnRlZAogIGhjZl8xNgkJSUZCX0Fzc2VydFdoZXJlOwkJLy8gV2hlcmUgcGFyYW1ldGVyIG9mIHRoZSBBc3NlcnQgbWFjcm8KI2lmIChIQ0ZfQVNTRVJUKSAmICggSENGX0FTU0VSVF9MTktfTVNGX1JUTiB8IEhDRl9BU1NFUlRfUlRfTVNGX1JUTiApCiAgTVNGX0FTU0VSVF9SVE5QCUlGQl9Bc3NlcnRSdG47CQkvLyBNU0YgQXNzZXJ0IENhbGwgYmFjayByb3V0aW5lIChpbnNwaXJlZCBieSBHRUYsIERyRG9iYnMgTm92IDE5OTggKQojZW5kaWYgLy8gSENGX0FTU0VSVF9MTktfTVNGX1JUTgojaWYgKEhDRl9BU1NFUlQpICYgSENGX0FTU0VSVF9QUklOVEYJLy8gZW5naW5lZXJpbmcgZmFjaWx0eSBpbnRlbmRlZCBhcyBGL1cgZGVidWdnaW5nIGFpZAogICBoY2ZfMTYgICAgICAgSUZCX0RiZ1ByaW50Rl9DbnQ7CiAgIENGR19GV19QUklOVEZfQlVGRkVSX0xPQ0FUSU9OX1NUUkNUIElGQl9Gd1BmQnVmZjsKI2VuZGlmIC8vIEhDRl9BU1NFUlRfUFJJTlRGCiNlbmRpZiAvLyBIQ0ZfQVNTRVJUCiAgaGNmXzE2IHZvbGF0aWxlIElGQl9JbnRPZmZDbnQ7CQkvLyAweEZGRkYgYmFzZWQgSENGX0FDVF9JTlRfT0ZGIG5lc3RpbmcgY291bnRlciwgRGVlcFNsZWVwIGZsYWcKI2lmIChIQ0ZfVEFMTElFUykgJiAoIEhDRl9UQUxMSUVTX05JQyB8IEhDRl9UQUxMSUVTX0hDRiApCS8vSGVybWVzIGFuZC9vciBIQ0YgdGFsbHkgc3VwcG9ydAogIGhjZl8zMgkJSUZCX1NpbGx5X3lvdV9zaG91bGRfYWxpZ247CS8vOz8KICBoY2ZfMTYJCUlGQl9UYWxseUxlbjsJCQkvLyBUYWxseSBsZW5ndGggKHRvIGJ1aWxkIGFuIExUVikKICBoY2ZfMTYJCUlGQl9UYWxseVR5cDsJCQkvLyBUYWxseSBUeXBlICh0byBidWlsZCBhbiBMVFYpCiNlbmRpZiAvLyBIQ0ZfVEFMTElFU19OSUMgLyBIQ0ZfVEFMTElFU19IQ0YKI2lmIChIQ0ZfVEFMTElFUykgJiBIQ0ZfVEFMTElFU19OSUMJCS8vSGVybWVzIHRhbGx5IHN1cHBvcnQKICBDRkdfSEVSTUVTX1RBTExJRVNfU1RSQ1QJSUZCX05JQ19UYWxsaWVzOwojZW5kaWYgLy8gSENGX1RBTExJRVNfTklDCiNpZiAoSENGX1RBTExJRVMpICYgSENGX1RBTExJRVNfSENGCQkvL0hDRiB0YWxseSBzdXBwb3J0CiAgQ0ZHX0hDRl9UQUxMSUVTX1NUUkNUCQlJRkJfSENGX1RhbGxpZXM7CiNlbmRpZiAvLyBIQ0ZfVEFMTElFU19IQ0YKI2lmIEhDRl9ETUEKICAvL3VzZWQgZm9yIGEgcG9vbCBvZiBkZXN0aW5hdGlvbl9hZGRyZXNzIGRlc2NyaXB0b3IvYnVmZmVycywgdXNlZCBkdXJpbmcgdHggZW5jYXBzdWxhdGlvbiBwb2ludHMgdG8gdGhlCiAgLy9maXJzdC9sYXN0IGRlc2NyaXB0b3IgaW4gdGhlIGRlc2NyaXB0b3IgY2hhaW4sIHNvIHdlIGNhbiBlYXNpbHkgcmVtb3ZlIGFuZCBhcHBlbmQgYSBwYWNrZXQuCiAgREVTQ19TVFJDVAkqSUZCX0ZpcnN0RGVzY1syXTsKICBERVNDX1NUUkNUCSpJRkJfTGFzdERlc2NbMl07CiAgREVTQ19TVFJDVAkqSUZCX0NvbmZpbmVkRGVzY1syXTsJLy8gcG9pbnRlcnMgdG8gZGVzY3JpcHRvciB1c2VkIGZvciBob3N0IHJlY2xhaW0gcHVycG9zZXMuCiAgaGNmXzE2CQlJRkJfRG1hUGFja2V0czsJCQkvLyBIUkVHX0VWX1tUWC9SWF1ETUFfRE9ORSBmbGFncywgcmVwb3J0cyBETUEgRnJhbWUgYXZhaWxhYmlsaXR5IHRvIE1TRgojZW5kaWYgLy8gSENGX0RNQQojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9JTlRfVFhfRVgKICBoY2ZfMTYJCUlGQl9UeEZzU3RhdDsJCQkvLyBUeCBtZXNzYWdlIG1vbml0b3JpbmcKICBoY2ZfMTYJCUlGQl9UeEZzR2FwWzJdOwkJCS8vOz9tYWtlIHRoaXMgcm9idXN0CiAgaGNmXzE2CQlJRkJfVHhGc1N3U3VwOwojZW5kaWYgLy8gSENGX0VYVF9JTlRfVFhfRVgKICBoY2ZfMTYJCUlGQl9NYWdpYzsJCQkJLyogIk1hZ2ljIiBzaWduYXR1cmUsIHRvIGhlbHAgdGhlIGRlYnVnZ2VyIGludGVycHJldCBhIG1lbW9yeSBkdW1wCgkJCQkJCQkJCQkgKiBhbHNvIHRoZSBsYXN0IGZpZWxkIGNsZWFyZWQgYXQgaGNmX2Nvbm5lY3QKCQkJCQkJCQkJCSAqLwojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9JRkJfU1RSQ1QJCS8vIGZvciB1c2FnZSBieSB0aGUgTVNGCiAgdm9pZCBGQVIJICAgKklGQl9NU0ZTdXA7CQkJCS8vIHBvaW50ZXIgZm9yIGFyYml0cmFyeSB1c2UgYnkgdGhlIE1TRgojZW5kaWYgLy8gSENGX0VYVF9JRkJfU1RSQ1RfRVhUCn0gSUZCX1NUUkNUOwoKdHlwZWRlZiBJRkJfU1RSQ1QqCUlGQlA7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKiAgIFcgQyBJICAgIEYgVSBOIEMgVCBJIE8gTiBTICAgIFAgUiBPIFQgTyBUIFkgUCBFIFMgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkVYVEVSTl9DIGludAkJIGhjZl9hY3Rpb24JCQkoSUZCUCBpZmJwLCBoY2ZfMTYgY21kICk7CkVYVEVSTl9DIGludAkJIGhjZl9jb25uZWN0CQkoSUZCUCBpZmJwLCBoY2ZfaW8gaW9fYmFzZSApOwpFWFRFUk5fQyBpbnQJCSBoY2ZfZ2V0X2luZm8JCShJRkJQIGlmYnAsIExUVlAgbHR2cCApOwpFWFRFUk5fQyBpbnQJCSBoY2Zfc2VydmljZV9uaWMJKElGQlAgaWZicCwgd2NpX2J1ZnAgYnVmcCwgdW5zaWduZWQgaW50IGxlbiApOwpFWFRFUk5fQyBpbnQJCSBoY2ZfY250bAkJCShJRkJQIGlmYnAsIGhjZl8xNiBjbWQgKTsKRVhURVJOX0MgaW50CQkgaGNmX3B1dF9pbmZvCQkoSUZCUCBpZmJwLCBMVFZQIGx0dnAgKTsKRVhURVJOX0MgaW50CQkgaGNmX3Jjdl9tc2cJCShJRkJQIGlmYnAsIERFU0NfU1RSQ1QgKmRlc2NwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0ICk7CkVYVEVSTl9DIGludAkJIGhjZl9zZW5kX21zZyAgICAgICAoSUZCUCBpZmJwLCBERVNDX1NUUkNUICpkcCwgaGNmXzE2IHR4X2NudGwgKTsKI2lmIEhDRl9ETUEKRVhURVJOX0Mgdm9pZAkJIGhjZl9kbWFfdHhfcHV0IAkoSUZCUCBpZmJwLCBERVNDX1NUUkNUICpkLCBoY2ZfMTYgdHhfY250bCApOwpFWFRFUk5fQyBERVNDX1NUUkNUKiBoY2ZfZG1hX3R4X2dldAkJKElGQlAgaWZicCApOwpFWFRFUk5fQyBERVNDX1NUUkNUKiBoY2ZfZG1hX3J4X2dldAkJKElGQlAgaWZicCApOwpFWFRFUk5fQyB2b2lkCQkgaGNmX2RtYV9yeF9wdXQJCShJRkJQIGlmYnAsIERFU0NfU1RSQ1QgKmQgKTsKI2VuZGlmIC8vIEhDRl9ETUEKI2lmIChIQ0ZfQVNTRVJUKSAmIEhDRl9BU1NFUlRfTE5LX01TRl9SVE4KRVhURVJOX0Mgdm9pZAkJIG1zZl9hc3NlcnQJIAkJKHVuc2lnbmVkIGludCBsaW5lX251bWJlciwgaGNmXzE2IHRyYWNlLCBoY2ZfMzIgcXVhbCApOwojZW5kaWYgLy8gSENGX0FTU0VSVF9MTktfTVNGX1JUTgoKI2VuZGlmICAvLyBIQ0ZfSAoK