ZGlmZiAtLWdpdCBhL3plYnJhL2lyZHBfcGFja2V0LmMgYi96ZWJyYS9pcmRwX3BhY2tldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0N2Q1OTcKLS0tIC9kZXYvbnVsbAorKysgYi96ZWJyYS9pcmRwX3BhY2tldC5jCkBAIC0wLDAgKzEsMzY0IEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgUm9iZXJ0IE9sc3Nvbi4KKyAqIFN3ZWRpc2ggVW5pdmVyc2l0eSBvZiBBZ3JpY3VsdHVyYWwgU2NpZW5jZXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgWmVicmEuCisgKgorICogR05VIFplYnJhIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBHTlUgWmVicmEgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIEdOVSBaZWJyYTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqIDAyMTExLTEzMDcsIFVTQS4gIAorICovCisKKy8qIAorICogVGhpcyB3b3JrIGluY2x1ZGVzIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIGNvcHl3cml0ZToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAgS3VuaWhpcm8gSXNoaWd1cm8KKyAqCisgKi8KKworLyogCisgKiBUaGFua3MgdG8gSmVucyBM5eVzIGF0IFN3ZWRpc2ggVW5pdmVyc2l0eSBvZiBBZ3JpY3VsdHVyYWwgU2NpZW5jZXMKKyAqIGZvciByZXZpZXdpbmcgYW5kIHRlc3RzLgorICovCisKKworI2luY2x1ZGUgPHplYnJhLmg+CisKKworI2lmZGVmIEhBVkVfSVJEUAorCisjaW5jbHVkZSAiaWYuaCIKKyNpbmNsdWRlICJ2dHkuaCIKKyNpbmNsdWRlICJzb2NrdW5pb24uaCIKKyNpbmNsdWRlICJwcmVmaXguaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSAic3RyZWFtLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJjb25uZWN0ZWQuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ6Y2xpZW50LmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAiemVicmEvaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiemVicmEvcnRhZHYuaCIKKyNpbmNsdWRlICJ6ZWJyYS9yaWIuaCIKKyNpbmNsdWRlICJ6ZWJyYS96c2Vydi5oIgorI2luY2x1ZGUgInplYnJhL3JlZGlzdHJpYnV0ZS5oIgorI2luY2x1ZGUgInplYnJhL2lyZHAuaCIKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNpbmNsdWRlICJpZi5oIgorI2luY2x1ZGUgInNvY2t1bmlvbi5oIgorI2luY2x1ZGUgImxvZy5oIgorCisKKworLyogR0xPQkFMIFZBUlMgKi8KKworaW50IGlyZHBfc29jazsKK2NoYXIgYjFbMTZdLCBiMlsxNl0sIGIzWzE2XSwgYjRbMTZdOyAgLyogRm9yIGluZXRfMmEgKi8KKworZXh0ZXJuIHN0cnVjdCB6ZWJyYV90IHplYnJhZDsKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkICp0X2lyZHBfcmF3OworZXh0ZXJuIHN0cnVjdCBpbnRlcmZhY2UgKmdldF9pZmxpc3RfaWZwKGludCBpZHgpOworaW50IGluX2Nrc3VtICh2b2lkICpwdHIsIGludCBuYnl0ZXMpOwordm9pZCBwcm9jZXNzX3NvbGljaXQgKHN0cnVjdCBpbnRlcmZhY2UgKmlmcCk7CisKK3ZvaWQgcGFyc2VfaXJkcF9wYWNrZXQoY2hhciAqcCwgCisJCSAgaW50IGxlbiwgCisJCSAgc3RydWN0IGludGVyZmFjZSAqaWZwKQoreworICBzdHJ1Y3QgaXAgKmlwID0gKHN0cnVjdCBpcCAqKXAgOworICBzdHJ1Y3QgaWNtcGhkciAqaWNtcDsKKyAgc3RydWN0IGluX2FkZHIgc3JjOworICBpbnQgaXBfaGxlbiwgaXBfbGVuOworICBzdHJ1Y3QgemVicmFfaWYgKnppOworICBzdHJ1Y3QgaXJkcF9pbnRlcmZhY2UgKmlyZHA7CisKKyAgemkgPSBpZnAtPmluZm87CisgIGlmKCF6aSkgcmV0dXJuOworCisgIGlyZHAgPSAmemktPmlyZHA7CisgIGlmKCFpcmRwKSByZXR1cm47CisKKyAgaXBfaGxlbiA9IGlwLT5pcF9obCo0OyAKKyAgaXBfbGVuID0gbnRvaHMoaXAtPmlwX2xlbik7CisgIGxlbiA9IGxlbiAtIGlwX2hsZW47CisgIHNyYyA9IGlwLT5pcF9zcmM7CisKKyAgaWYoaXBfbGVuIDwgSUNNUF9NSU5MRU4pIHsKKyAgICB6bG9nX2VyciAoIklSRFA6IFJYIElDTVAgcGFja2V0IHRvbyBzaG9ydCBmcm9tICVzXG4iLAorCSAgICAgIGluZXRfbnRvYSAoc3JjKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogQ2hlY2sgc28gd2UgZG9uJ3QgY2hlY2tzdW0gcGFja2V0cyBsb25nZXIgdGhhbiBvdXJlIFJYX0JVRiAtIChldGhsZW4gKworICAgbGVuIG9mIElQLWhlYWRlcikgMTQrMjAgKi8KKworICBpZihpcF9sZW4gPiBJUkRQX1JYX0JVRi0zNCkgeworICAgIHpsb2dfZXJyICgiSVJEUDogUlggSUNNUCBwYWNrZXQgdG9vIGxvbmcgZnJvbSAlc1xuIiwKKwkgICAgICBpbmV0X250b2EgKHNyYykpOworICAgIHJldHVybjsKKyAgfQorCisKKyAgaWYgKGluX2Nrc3VtIChpcCwgaXBfbGVuKSkgeworICAgIHpsb2dfd2FybiAoIklSRFA6IFJYIElDTVAgcGFja2V0IGZyb20gJXMuIEJhZCBjaGVja3N1bSwgc2lsZW50bHkgaWdub3JlZCIsCisJICAgICAgIGluZXRfbnRvYSAoc3JjKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWNtcCA9IChzdHJ1Y3QgaWNtcGhkciAqKSAocCtpcF9obGVuKTsKKworCisgIC8qIEhhbmRsZSBqdXN0IG9ubHkgSVJEUCAqLworCisgIGlmKCBpY21wLT50eXBlID09IElDTVBfUk9VVEVSQURWRVJUKTsKKyAgZWxzZSBpZiggaWNtcC0+dHlwZSA9PSBJQ01QX1JPVVRFUlNPTElDSVQpOworICBlbHNlIHJldHVybjsKKworIAorICBpZiAoaWNtcC0+Y29kZSAhPSAwKSB7CisgICAgemxvZ193YXJuICgiSVJEUDogUlggcGFja2V0IHR5cGUgJWQgZnJvbSAlcy4gQmFkIElDTVAgdHlwZSBjb2RlLCBzaWxlbnRseSBpZ25vcmVkIiwKKwkgICAgICAgaWNtcC0+dHlwZSwKKwkgICAgICAgaW5ldF9udG9hIChzcmMpKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZihpcC0+aXBfZHN0LnNfYWRkciA9PSBJTkFERFJfQlJPQURDQVNUICYmIAorICAgICBpcmRwLT5mbGFncyAmIElGX0JST0FEQ0FTVCk7CisKKyAgZWxzZSBpZiAoIG50b2hsKGlwLT5pcF9kc3Quc19hZGRyKSA9PSBJTkFERFJfQUxMUlRSU19HUk9VUCAmJiAKKwkgICAgISAoaXJkcC0+ZmxhZ3MgJiAgSUZfQlJPQURDQVNUKSk7CisKKyAgZWxzZSB7IC8qIEVSUk9SICovCisKKyAgICB6bG9nX3dhcm4gKCJJUkRQOiBSWCBpbGxlZ2FsIGZyb20gJXMgdG8gJXMgd2hpbGUgJXMgb3BlcmF0ZXMgaW4gJXNcbiIsCisJICAgICAgIGluZXRfbnRvYSAoc3JjKSwgCisJICAgICAgIG50b2hsKGlwLT5pcF9kc3Quc19hZGRyKSA9PSBJTkFERFJfQUxMUlRSU19HUk9VUD8gCisJICAgICAgICJtdWx0aWNhc3QiIDogaW5ldF9udG9hKGlwLT5pcF9kc3QpLAorCSAgICAgICBpZnAtPm5hbWUsCisJICAgICAgIGlyZHAtPmZsYWdzICYgIElGX0JST0FEQ0FTVD8gCisJICAgICAgICJicm9hZGNhc3QiIDogIm11bHRpY2FzdCIpOworCisgICAgemxvZ193YXJuICgiSVJEUDogUGxlYXNlIGNvcnJlY3Qgc2V0dGluZ3NcbiIpOworICAgIHJldHVybjsKKyAgfQorCisgIHN3aXRjaCAoaWNtcC0+dHlwZSkgCisgICAgeworICAgIGNhc2UgSUNNUF9ST1VURVJBRFZFUlQ6CisgICAgICBicmVhazsKKworICAgIGNhc2UgSUNNUF9ST1VURVJTT0xJQ0lUOgorCisgICAgICBpZihpcmRwLT5mbGFncyAmIElGX0RFQlVHX01FU1NBR0VTKSAKKwl6bG9nX3dhcm4gKCJJUkRQOiBSWCBTb2xpY2l0IG9uICVzIGZyb20gJXNcbiIsCisJCSAgIGlmcC0+bmFtZSwKKwkJICAgaW5ldF9udG9hIChzcmMpKTsKKworICAgICAgcHJvY2Vzc19zb2xpY2l0KGlmcCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICB6bG9nX3dhcm4gKCJJUkRQOiBSWCB0eXBlICVkIGZyb20gJXMuIEJhZCBJQ01QIHR5cGUsIHNpbGVudGx5IGlnbm9yZWQiLAorCQkgaWNtcC0+dHlwZSwKKwkJIGluZXRfbnRvYSAoc3JjKSk7CisgICAgfQorfQorDAoraW50IGlyZHBfcmVjdm1zZyAoaW50IHNvY2ssIAorCSAgICAgIHVfY2hhciAqYnVmLCAKKwkgICAgICBpbnQgc2l6ZSwgCisJICAgICAgaW50ICppZmluZGV4KQoreworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3RydWN0IGlvdmVjIGlvdjsKKyAgc3RydWN0IGNtc2doZHIgKnB0cjsKKyAgY2hhciBhZGF0YVsxMDI0XTsKKyAgaW50IHJldDsKKworICBtc2cubXNnX25hbWUgPSAodm9pZCAqKTA7CisgIG1zZy5tc2dfbmFtZWxlbiA9IDA7CisgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICBtc2cubXNnX2NvbnRyb2wgPSAodm9pZCAqKSBhZGF0YTsKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mIGFkYXRhOworCisgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgaW92Lmlvdl9sZW4gPSBzaXplOworCisgIHJldCA9IHJlY3Ztc2cgKHNvY2ssICZtc2csIDApOworICBpZiAocmV0IDwgMCkgeworICAgIHpsb2dfd2FybigiSVJEUDogcmVjdm1zZzogcmVhZCBlcnJvciAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIGlmIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSB7CisgICAgemxvZ193YXJuKCJJUkRQOiByZWN2bXNnOiB0cnVuY2F0ZWQgbWVzc2FnZSIpOworICAgIHJldHVybiByZXQ7CisgIH0KKyAgaWYgKG1zZy5tc2dfZmxhZ3MgJiBNU0dfQ1RSVU5DKSB7CisgICAgemxvZ193YXJuKCJJUkRQOiByZWN2bXNnOiB0cnVuY2F0ZWQgY29udHJvbCBtZXNzYWdlIik7CisgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIGZvciAocHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgcHRyIDsgcHRyID0gQ01TR19OWFRIRFIoJm1zZywgcHRyKSkKKyAgICBpZiAocHRyLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBwdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSAKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGluX3BrdGluZm8gKnBrdGluZm87CisgICAgICAgICAgIHBrdGluZm8gPSAoc3RydWN0IGluX3BrdGluZm8gKikgQ01TR19EQVRBIChwdHIpOworICAgICAgICAqaWZpbmRleCA9IHBrdGluZm8tPmlwaV9pZmluZGV4OworICAgICAgfQorICByZXR1cm4gcmV0OworfQorDAoraW50IGlyZHBfcmVhZF9yYXcoc3RydWN0IHRocmVhZCAqcikKK3sKKyAgc3RydWN0IGludGVyZmFjZSAqaWZwOworICBzdHJ1Y3QgemVicmFfaWYgKnppOworICBzdHJ1Y3QgaXJkcF9pbnRlcmZhY2UgKmlyZHA7CisgIGNoYXIgYnVmW0lSRFBfUlhfQlVGXTsKKyAgaW50IHJldCwgaWZpbmRleDsKKyAgCisgIGludCBpcmRwX3NvY2sgPSBUSFJFQURfRkQgKHIpOworICB0X2lyZHBfcmF3ID0gdGhyZWFkX2FkZF9yZWFkICh6ZWJyYWQubWFzdGVyLCBpcmRwX3JlYWRfcmF3LCBOVUxMLCBpcmRwX3NvY2spOworICAKKyAgcmV0ID0gaXJkcF9yZWN2bXNnIChpcmRwX3NvY2ssIGJ1ZiwgSVJEUF9SWF9CVUYsICAmaWZpbmRleCk7CisgCisgIGlmIChyZXQgPCAwKSB6bG9nX3dhcm4gKCJJUkRQOiBSWCBFcnJvciBsZW5ndGggPSAlZCIsIHJldCk7CisKKyAgaWZwID0gZ2V0X2lmbGlzdF9pZnAoaWZpbmRleCk7CisgIGlmKCEgaWZwICkgcmV0dXJuIHJldDsKKworICB6aT0gaWZwLT5pbmZvOworICBpZighIHppICkgcmV0dXJuIHJldDsKKworICBpcmRwID0gJnppLT5pcmRwOworICBpZighIGlyZHAgKSByZXR1cm4gcmV0OworCisgIGlmKCEgKGlyZHAtPmZsYWdzICYgSUZfQUNUSVZFKSkgeworCisgICAgaWYoaXJkcC0+ZmxhZ3MgJiBJRl9ERUJVR19NSVNDKSAKKyAgICAgIHpsb2dfd2FybigiSVJEUDogUlggSUNNUCBmb3IgZGlzYWJsZWQgaW50ZXJmYWNlICVzXG4iLAorCQlpZnAtPm5hbWUpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYoaXJkcC0+ZmxhZ3MgJiBJRl9ERUJVR19QQUNLRVQpIHsKKyAgICBpbnQgaTsKKyAgICB6bG9nX3dhcm4oIklSRFA6IFJYIChpZHggJWQpICIsIGlmaW5kZXgpOworICAgIGZvcihpPTA7IGkgPCByZXQ7IGkrKykgemxvZ193YXJuKCAiSVJEUDogUlggJXggIiwgYnVmW2ldJjB4RkYpOworICB9CisKKyAgcGFyc2VfaXJkcF9wYWNrZXQoYnVmLCByZXQsIGlmcCk7CisgIHJldHVybiByZXQ7Cit9CisMCit2b2lkIHNlbmRfcGFja2V0KHN0cnVjdCBpbnRlcmZhY2UgKmlmcCwgCisJICAgIHN0cnVjdCBzdHJlYW0gKnMsCisJICAgIHVfaW50MzJfdCBkc3QsCisJICAgIHN0cnVjdCBwcmVmaXggKnAsCisJICAgIHVfaW50MzJfdCB0dGwpCit7CisgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2RzdCA9IHtBRl9JTkVUfTsKKyAgc3RydWN0IGlwICppcDsKKyAgc3RydWN0IGljbXBoZHIgKmljbXA7CisgIHN0cnVjdCBtc2doZHIgKm1zZzsKKyAgc3RydWN0IGNtc2doZHIgKmNtc2c7CisgIHN0cnVjdCBpb3ZlYyBpb3ZlY3RvcjsKKyAgY2hhciBtc2didWZbMjU2XTsKKyAgY2hhciBidWZbMjU2XTsKKyAgc3RydWN0IGluX3BrdGluZm8gKnBrdGluZm87CisgIHVfbG9uZyBzcmM7CisgIGludCBvbjsKKyAKKyAgaWYgKCEgKGlmcC0+ZmxhZ3MgJiBJRkZfVVApKSByZXR1cm47CisKKyAgaWYoIXApIHNyYyA9IG50b2hsKHAtPnUucHJlZml4NC5zX2FkZHIpOworICBlbHNlIHNyYyA9IDA7IC8qIElzIGZpbGxlZCBpbiAqLworICAKKyAgaXAgPSAoc3RydWN0IGlwICopIGJ1ZjsKKyAgaXAtPmlwX2hsID0gc2l6ZW9mKHN0cnVjdCBpcCkgPj4gMjsKKyAgaXAtPmlwX3YgPSBJUFZFUlNJT047CisgIGlwLT5pcF90b3MgPSAweEMwOworICBpcC0+aXBfb2ZmID0gMEw7CisgIGlwLT5pcF9wID0gMTsgICAgICAgLyogSVBfSUNNUCAqLworICBpcC0+aXBfdHRsID0gdHRsOworICBpcC0+aXBfc3JjLnNfYWRkciA9IHNyYzsKKyAgaXAtPmlwX2RzdC5zX2FkZHIgPSBkc3Q7CisgIGljbXAgPSAoc3RydWN0IGljbXBoZHIgKikgKGJ1ZiArIDIwKTsKKworICAvKiBNZXJnZSBJUCBoZWFkZXIgd2l0aCBpY21wIHBhY2tldCAqLworCisgIHN0cmVhbV9nZXQoaWNtcCwgcywgcy0+cHV0cCk7CisKKyAgLyogaWNtcC0+Y2hlY2tzdW0gaXMgYWxyZWFkeSBjYWxjdWxhdGVkICovCisgIGlwLT5pcF9sZW4gID0gc2l6ZW9mKHN0cnVjdCBpcCkgKyBzLT5wdXRwOworICBzdHJlYW1fZnJlZShzKTsgCisKKyAgb24gPSAxOworICBpZiAoc2V0c29ja29wdChpcmRwX3NvY2ssIElQUFJPVE9fSVAsIElQX0hEUklOQ0wsCisJCSAoY2hhciAqKSAmb24sIHNpemVvZihvbikpIDwgMCkKKyAgICB6bG9nX3dhcm4oInNlbmR0byAlcyIsIHN0cmVycm9yIChlcnJubykpOworCisKKyAgaWYoZHN0ID09IElOQUREUl9CUk9BRENBU1QgKSB7CisgICAgb24gPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGlyZHBfc29jaywgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULAorCQkgICAoY2hhciAqKSAmb24sIHNpemVvZihvbikpIDwgMCkKKyAgICAgIHpsb2dfd2Fybigic2VuZHRvICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgIH0KKworICBpZihkc3QgIT0gIElOQUREUl9CUk9BRENBU1QpIHsKKyAgICAgIG9uID0gMDsgCisgICAgICBpZiggc2V0c29ja29wdChpcmRwX3NvY2ssSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX0xPT1AsIAorCQkgICAgIChjaGFyICopJm9uLHNpemVvZihvbikpIDwgMCkKKwl6bG9nX3dhcm4oInNlbmR0byAlcyIsIHN0cmVycm9yIChlcnJubykpOworICB9CisKKyAgYnplcm8oJnNvY2tkc3Qsc2l6ZW9mKHNvY2tkc3QpKTsKKyAgc29ja2RzdC5zaW5fZmFtaWx5PUFGX0lORVQ7CisgIHNvY2tkc3Quc2luX2FkZHIuc19hZGRyID0gZHN0OworCisgIGNtc2cgPSAoc3RydWN0IGNtc2doZHIgKikgKG1zZ2J1ZiArIHNpemVvZihzdHJ1Y3QgbXNnaGRyKSk7CisgIGNtc2ctPmNtc2dfbGVuID0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbyk7CisgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfSVA7CisgIGNtc2ctPmNtc2dfdHlwZSA9IElQX1BLVElORk87CisgIHBrdGluZm8gPSAoc3RydWN0IGluX3BrdGluZm8gKikgQ01TR19EQVRBKGNtc2cpOworICBwa3RpbmZvLT5pcGlfaWZpbmRleCA9IGlmcC0+aWZpbmRleDsKKyAgcGt0aW5mby0+aXBpX3NwZWNfZHN0LnNfYWRkciA9IHNyYzsKKyAgcGt0aW5mby0+aXBpX2FkZHIuc19hZGRyID0gc3JjOworIAorICBpb3ZlY3Rvci5pb3ZfYmFzZSA9ICh2b2lkICopIGJ1ZjsKKyAgaW92ZWN0b3IuaW92X2xlbiA9IGlwLT5pcF9sZW47IAorICBtc2cgPSAoc3RydWN0IG1zZ2hkciAqKSBtc2didWY7CisgIG1zZy0+bXNnX25hbWUgPSAmc29ja2RzdDsKKyAgbXNnLT5tc2dfbmFtZWxlbiA9IHNpemVvZihzb2NrZHN0KTsKKyAgbXNnLT5tc2dfaW92ID0gJmlvdmVjdG9yOworICBtc2ctPm1zZ19pb3ZsZW4gPSAxOworICBtc2ctPm1zZ19jb250cm9sID0gY21zZzsKKyAgbXNnLT5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOworIAorICBpZiAoc2VuZG1zZyhpcmRwX3NvY2ssIG1zZywgMCkgPCAwKSB7CisgICAgemxvZ193YXJuKCJzZW5kdG8gJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgfQorICAvKiAgIHByaW50ZigiVFggb24gJXMgaWR4ICVkXG4iLCBpZnAtPm5hbWUsIGlmcC0+aWZpbmRleCk7ICovCit9CisKKworI2VuZGlmIC8qIEhBVkVfSVJEUCAqLworCisKKwo=