ZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2lwYy9zaG0uYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2lwYy9zaG0uYwppbmRleCA0N2QzMjU1Li44YmY3ZjdiIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pcGMvc2htLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaXBjL3NobS5jCkBAIC03MiwxMSArNzIsNiBAQAogc3RhdGljIGludCBzeXN2aXBjX3NobV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TWVNWSVBDX0NST1NTX1NITQotZXh0ZXJuIGludCBzaG1fcmVtb3RlX2ZyZWVfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1bm1hcF92bWEpOwotZXh0ZXJuIGludCBzaG1fZG9fcmVtb3RlX21hcF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGtleV90IGtleSk7Ci0jZW5kaWYKLQogdm9pZCBzaG1faW5pdF9ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpCiB7CiAJbnMtPnNobV9jdGxtYXggPSBTSE1NQVg7CkBAIC0xNTAsMjAgKzE0NSw1MCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NZU1ZJUENfQ1JPU1NfU0hNCi12b2lkIHNobV9tbWFwX3BhZ2V0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZpbGUgKmZpbGUpCitrZXlfdCBzaG1fZG9fcmVtb3RlX2FuYWx5X2tleShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlrZXlfdCAga2V5ID0gMDsJCisJY2hhciAgICpzaG1fbmFtZSA9IE5VTEw7CiAJc3RydWN0IHNobV9maWxlX2RhdGEgKnNmZDsKIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICAqc2hwOworCXN0cnVjdCBwYXRoICAgICpzaG1fcGF0aCAgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgICpzaG1fZGVudHJ5ID0gTlVMTDsKIAotCXNmZCA9IHNobV9maWxlX2RhdGEoZmlsZSk7Ci0Jc2hwID0gc2htX2xvY2soc2ZkLT5ucywgc2ZkLT5pZCk7CisJaWYgKGZpbGUgJiYgKGZpbGUtPnNobV9mbGFncyA9PSBTSE1fUkVNT1RFX1NZU1ZfWUVTKSkKKwl7CisJCXNmZCA9IHNobV9maWxlX2RhdGEoZmlsZSk7CisJCXNocCA9IHNobV9sb2NrKHNmZC0+bnMsIHNmZC0+aWQpOworCQlrZXkgPSBzaHAtPnNobV9wZXJtLmtleTsKKwkJc2htX3VubG9jayhzaHApOworCX0KKwllbHNlIGlmIChmaWxlICYmIChmaWxlLT5zaG1fZmxhZ3MgPT0gU0hNX1JFTU9URV9QT1NJWF9ZRVMpKQorCXsKKwkJc2htX3BhdGggPSAmZmlsZS0+Zl9wYXRoOworCQkKKwkJaWYoc2htX3BhdGggJiYgKHNobV9wYXRoLT5kZW50cnkpKQorCQl7CisJCQlzaG1fbmFtZSA9IHNobV9wYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lOworCQkJaWYgKCFzaG1fbmFtZSkKKwkJCQlwYW5pYygic2htX3Bvc2l4X21tYXBfcGFnZXRhYmxlIG5hbWUgaXMgTlVMTFxuIik7CisJCX0KKwkJa2V5ID0gc2htX2hhc2hfbmFtZV90b19rZXkoc2htX25hbWUsIHN0cmxlbihzaG1fbmFtZSkpOworCX0KKwlyZXR1cm4ga2V5OworfQogCi0JcmV0ID0gc2htX2RvX3JlbW90ZV9tYXBfdm1hKHZtYSwgc2hwLT5zaG1fcGVybS5rZXkpOworaW50IHNobV9pcGNfbW1hcF9wYWdldGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCAgIHJldCA9IDA7CisJa2V5X3Qgc2htX2tleSA9IDA7CisJCQorCXNobV9rZXkgPSBzaG1fZG9fcmVtb3RlX2FuYWx5X2tleShmaWxlKTsKKwlyZXQgICAgID0gc2htX2RvX3JlbW90ZV9tYXBfdm1hKHZtYSwgc2htX2tleSk7CiAJaWYgKHJldCA8IDApCi0JCXByaW50aygic2htX21tYXBfcGFnZXRhYmxlIEVycm9yIik7Ci0KLQlzaG1fdW5sb2NrKHNocCk7CisJeworCQlwcmludGsoInNobV9pcGNfbW1hcF9wYWdldGFibGUgRXJyb3I6IE5vIE1lbVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKQEAgLTI2NiwxMCArMjkxLDcgQEAKIAlzaHAtPnNobV9scHJpZCA9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7CiAJc2hwLT5zaG1fZHRpbSA9IGdldF9zZWNvbmRzKCk7CiAJc2hwLT5zaG1fbmF0dGNoLS07Ci0jaWZkZWYgQ09ORklHX1NZU1ZJUENfQ1JPU1NfU0hNCi0JaWYgKHNocC0+c2htX3Blcm0ucnBtZmxhZyA9PSBUUlVFKQotCQlzaG1fcmVtb3RlX2ZyZWVfcGFnZXMoc2hwLT5zaG1fcGVybS5rZXkpOwotI2VuZGlmCisKIAlpZiAoc2htX21heV9kZXN0cm95KG5zLCBzaHApKQogCQlzaG1fZGVzdHJveShucywgc2hwKTsKIAllbHNlCkBAIC01NDgsMTAgKzU3MCwyMSBAQAogCXNocC0+c2htX2ZpbGUgPSBmaWxlOwogCXNocC0+c2htX2NyZWF0b3IgPSBjdXJyZW50OwogI2lmZGVmIENPTkZJR19TWVNWSVBDX0NST1NTX1NITQotCWlmKChrZXkgJiBTSE1fUkVNT1RFX0FUVFJfTUFTSykgPT0gU0hNX1JFTU9URV9BVFRSX01BU0spCi0JCXNocC0+c2htX3Blcm0ucnBtZmxhZyA9IFRSVUU7CisJaWYoKGtleSAmIFNITV9SRU1PVEVfU1lTVl9NQVNLKSA9PSBTSE1fUkVNT1RFX1NZU1ZfTUFTSykKKwl7CisJCWVycm9yID0gc2htX2RvX25ld3NlZ19jaGVjayhrZXksIHNpemUpOworCQlpZiAoZXJyb3IgPCAwKQorCQl7CisJCQlwcmludGsoInNobSBzaXplIGVycm9yLCBzaG91bGQgYmUgdGhlIHNhbWUgUEFHRV9BTElHTiBzaXplXG4iKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQllbHNlCisJCQlzaHAtPnNobV9wZXJtLnJwbWZsYWcgPSBUUlVFOworCX0KIAllbHNlCisJewogCQlzaHAtPnNobV9wZXJtLnJwbWZsYWcgPSBGQUxTRTsKKwl9CiAjZW5kaWYKIAkvKgogCSAqIHNobWlkIGdldHMgcmVwb3J0ZWQgYXMgImlub2RlIyIgaW4gL3Byb2MvcGlkL21hcHMuCkBAIC0xMDg3LDcgKzExMjAsNyBAQAogCXNmZC0+dm1fb3BzID0gTlVMTDsKICNpZmRlZiBDT05GSUdfU1lTVklQQ19DUk9TU19TSE0JCiAJaWYoc2hwLT5zaG1fcGVybS5ycG1mbGFnID09IFRSVUUpCi0JCWZpbGUtPmZfZmxhZ3MgPSBTSE1fUkVNT1RFX0FUVFJfWUVTOworCQlmaWxlLT5zaG1fZmxhZ3MgPSBTSE1fUkVNT1RFX1NZU1ZfWUVTOwogI2VuZGlmCiAJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAoYWRkciAmJiAhKHNobWZsZyAmIFNITV9SRU1BUCkpIHsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2lwYy9zaG1fY3RybC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaXBjL3NobV9jdHJsLmMKaW5kZXggNTk4Y2IyOC4uMTgzYThiZCAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaXBjL3NobV9jdHJsLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaXBjL3NobV9jdHJsLmMKQEAgLTIzLDYgKzIzLDEwIEBACiAjZGVmaW5lIFNITV9VTklUX0JVRkZfT1JERVIgICAgICAgKDEyKQogI2RlZmluZSBTSE1fS0VZU19TVEFUVVNfTEVOICAgICAgICg0KjEwMjQpCiAjZGVmaW5lIFNITV9SRU1PVEVfQlVGRl9MRU4gICAgICAgKDEyOCoxMDI0KQorI2RlZmluZSBTSE1fUE9TSVhfSEFTSF9DSEFSUyAgICAgICgyNikKKyNkZWZpbmUgU0hNX1BPU0lYX0hBU0hfQkFTRSAgICAgICAoNjIpCisjZGVmaW5lIFNITV9QT1NJWF9IQVNIX01BU0sgICAgICAgKDB4N0ZGKQorCiAjZGVmaW5lIFNITV9CVUZGX0JBU0VfUEhZX0FERFIgICAgKGdfc2htX3BoeUFkZHIpCiAgCiAjZGVmaW5lIFNITV9VTklUX0JVRkZfU0laRSAgICAgICAgKDFVTDw8U0hNX1VOSVRfQlVGRl9PUkRFUikgLyo0S0IqLwpAQCAtNTEsNiArNTUsMzYgQEAKIHN0cnVjdCBzaG1fZW50aXR5ICpzaG1fcmVtb3RlX21hbmFnZXI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqILmmxNzD6Mr2OiAgICAgc2htX2hhc2hfbmFtZV90b19rZXkKKyogss7K/cu1w/c6CisqICAgICi0q8jrss7K/SkgbmFtZTogubLP7cTatObD+7PGCisqICAgICi0q8jrss7K/SkgbGVuOiC5ss/txNq05sP7s8azpLbICisqICAgICi0q7P2ss7K/Skgzt4KKyogt7Ugu9gg1rU6ICAgICAKKyogxuTL/Mu1w/c6ICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGNhbGMgaGFzaCB2YWx1ZSBvZiB0aGUgbmFtZSgtMjA0OH4tNDA5NikKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrZXlfdCBzaG1faGFzaF9uYW1lX3RvX2tleShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworICAgIGludCAgIGkgICAgICAgID0gMDsKKyAgICBrZXlfdCB0bXBfa2V5ICA9IDA7CisgICAga2V5X3QgaGFzaF9rZXkgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpZCA9IDA7CisKKyAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgaWQgPSBpZCpTSE1fUE9TSVhfSEFTSF9CQVNFICsgbmFtZVtpXS0nQSc7CisgICAgICAgIGVsc2UgaWYgKG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgaWQgPSBpZCpTSE1fUE9TSVhfSEFTSF9CQVNFICsgbmFtZVtpXS0nYScgKyBTSE1fUE9TSVhfSEFTSF9DSEFSUzsKKyAgICAgICAgZWxzZSBpZiAobmFtZVtpXSA+PSAnMCcgJiYgbmFtZVtpXSA8PSAnOScpCisgICAgICAgICAgICBpZCA9IGlkKlNITV9QT1NJWF9IQVNIX0JBU0UgKyBuYW1lW2ldLScwJyArIDIqU0hNX1BPU0lYX0hBU0hfQ0hBUlM7CisgICAgfQorICAgIHRtcF9rZXkgPShpZCAmIFNITV9QT1NJWF9IQVNIX01BU0spICsgKFNITV9QT1NJWF9IQVNIX01BU0sgKyAxKTsKKyAgICBoYXNoX2tleSA9IH50bXBfa2V5ICsgMTsgCisgICAgcmV0dXJuIGhhc2hfa2V5OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiC5psTcw+jK9jogICAgIHNobV9xdWFyeV9rZXlBcnJheQogKiCyzsr9y7XD9zoKICogICAgKLSryOuyzsr9KSAgICB2b2lkCkBAIC0zMzAsNiArMzY0LDU4IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqILmmxNzD6Mr2OiAgICAgc2htX2RvX25ld3NlZ19jaGVjaworKiCyzsr9y7XD9zogICAgIAorKiAgICAotKvI67LOyv0pICAgIHZvaWQKKyogICAgKLSrs/ayzsr9KSAgICB2b2lkCisqILe1ILvYINa1OiAgICAgU0hNX0NUUkxfT0sgb3IgU0hNX0NUUkxfRVJST1IKKyogxuTL/Mu1w/c6ICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGNoZWNrIGtleSBhbmQgbGVuICAgICAgICAgICAgICAgICAgICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgc2htX2RvX25ld3NlZ19jaGVjayhrZXlfdCBrZXksIHVuc2lnbmVkIGxvbmcgbGVuKQoreworICAgIGludCAgICAgICAgICAgICAgICAgIHJldCAgICAgICAgPSAwOworICAgIGludCAgICAgICAgICAgICAgICAgIGtleV9pbmRleCAgPSAwOworICAgIHVuc2lnbmVkIGludCAgICAgICAgIHNobV93ZWlnaHQgPSAwOworICAgIHVuc2lnbmVkIGludCAgICAgICAgIHNobV9wYWdlcyAgPSAwOworICAgIHN0cnVjdCBzaG1fa2V5X25vZGUgICprZXlfbm9kZSAgPSBOVUxMOworCisgICAgaWYoZ19zaG1fcmVnaW9uID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGsoInNobV9kb19uZXdzZ19jaGVjazpTaG0gcmVnaW9uIGlzIG5vdCByZWFkeVxuIik7CisgICAgICAgIHJldHVybiBTSE1fQ1RSTF9FUlJPUjsKKyAgICB9CisgICAgc29mdF9zcGluX2xvY2soU0hNX1NGTE9DSyk7CisKKyAgICBrZXlfaW5kZXggPSBzaG1fcXVhcnlfa2V5QXJyYXkoa2V5KTsKKworICAgIGlmIChrZXlfaW5kZXggPCAwKSAKKyAgICB7CisgICAgICAgIHNvZnRfc3Bpbl91bmxvY2soU0hNX1NGTE9DSyk7ICAgIAorICAgICAgICByZXR1cm4gU0hNX0NUUkxfT0s7CisgICAgfQorICAgIAorICAgIGlmICgoMCA8PSBrZXlfaW5kZXgpICYmIChrZXlfaW5kZXggPCBTSE1fVU5JVF9OVU1fQklUUykpCisgICAgeworICAgICAgICBrZXlfbm9kZSA9ICZzaG1fcmVtb3RlX21hbmFnZXItPmtleXNfaW5mb19oZWFkW2tleV9pbmRleF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvZnRfc3Bpbl91bmxvY2soU0hNX1NGTE9DSyk7CisgICAgICAgIHBhbmljKCJrZXlfaW5kZXggb3V0IG9mIHJhbmdlOiBmYWlsZWRcbiIpOworICAgIH0KKworICAgIHNobV9wYWdlcyAgPSAgUEFHRV9BTElHTihsZW4pID4+IFBBR0VfU0hJRlQ7CisgICAgc2htX3dlaWdodCA9IGJpdG1hcF93ZWlnaHQoa2V5X25vZGUtPnNobV9pbnVzZV9pbmRleCwgU0hNX1VOSVRfTlVNX0JJVFMpOworICAgIHNvZnRfc3Bpbl91bmxvY2soU0hNX1NGTE9DSyk7CisKKyAgICAvKkFQus1DQVC5ss/txNq05rTz0KHTpsalxeQqLworICAgIGlmKHNobV93ZWlnaHQgIT0gc2htX3BhZ2VzKSAKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gU0hNX0NUUkxfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqILmmxNzD6Mr2OiAgICAgc2htX2RvX3JlbW90ZV9tYXBfdm1hCiAqILLOyv3LtcP3OiAgICAgCiAqICAgICi0q8jrss7K/SkgICAgdm9pZApAQCAtMzc0LDkgKzQ2MCwxNCBAQAogICAgIHZtX2FkZHIgPSB2bWEtPnZtX3N0YXJ0OwogICAgIAogICAgIGlmICgoMCA8PSBrZXlfaW5kZXgpICYmIChrZXlfaW5kZXggPCBTSE1fVU5JVF9OVU1fQklUUykpCisgICAgewogICAgICAgICBrZXlfbm9kZSA9ICZzaG1fcmVtb3RlX21hbmFnZXItPmtleXNfaW5mb19oZWFkW2tleV9pbmRleF07CisgICAgfQogICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvZnRfc3Bpbl91bmxvY2soU0hNX1NGTE9DSyk7CiAgICAgICAgIHBhbmljKCJrZXlfaW5kZXggb3V0IG9mIHJhbmdlOiBmYWlsZWRcbiIpOworICAgIH0KIAogICAgIG1lbWNweShzaG1faW51c2VfdG1wLCBrZXlfbm9kZS0+c2htX2ludXNlX2luZGV4LCBzaXplb2Yoc2htX2ludXNlX3RtcCkpOwogCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pcGMvc2htX2N0cmwuaCBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2lwYy9zaG1fY3RybC5oCmluZGV4IDVhODUwYTEuLjQ3MjZlYTggMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2lwYy9zaG1fY3RybC5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2lwYy9zaG1fY3RybC5oCkBAIC0yOSwxOSArMjksMjQgQEAKICNpbmNsdWRlIDxtYWNoL3NwaW5sb2NrLmg+CiAKIC8qKgotICogyv2+3cDg0M22qNLlCi0gKi8KKyAqILrqtqjS5QorKi8KICNkZWZpbmUgVFJVRSAgIDEKICNkZWZpbmUgRkFMU0UgIDAKLSNkZWZpbmUgU0hNX1JFTU9URV9BVFRSX1lFUyAgICAgICAoMHg1OTQ1NTMpIC8qWUVTIEFTQ0lJwusqLwotI2RlZmluZSBTSE1fUkVNT1RFX0FUVFJfTUFTSyAgICAgICgweEZGRkZGMDAwKQorCiAjZGVmaW5lIFNITV9DVFJMX09LICAgICAgICAgICAgICAgKDApCiAjZGVmaW5lIFNITV9DVFJMX0VSUk9SICAgICAgICAgICAgKC0xKQogI2RlZmluZSBTSE1fQ1RSTF9WTUFfTElOS19OVU0gICAgICgyKQogI2RlZmluZSBTSE1fQ1RSTF9NRU1TWU5DX0NIQU5ORUwgICgxNSkKICNkZWZpbmUgU0hNX0NUUkxfQ0hBTk5FTF9TSVpFICAgICAoMHg0MCkKICNkZWZpbmUgU0hNX0NUUkxfTE9OR18zMkJJVCAgICAgICAoMzIpCisjZGVmaW5lIFNITV9SRU1PVEVfU1lTVl9ZRVMgICAgICAgKDB4NzM3OTczNzYpIC8qU1lTViBBU0NJScLrKi8KKyNkZWZpbmUgU0hNX1JFTU9URV9QT1NJWF9ZRVMgICAgICAoMHg3MDZGNzM3OCkgIC8qUE9TWCBBU0NJScLrKi8KKyNkZWZpbmUgU0hNX1JFTU9URV9TWVNWX01BU0sgICAgICAoMHhGRkZGRjgwMCkgLyooa2V5Oi0xfi0yMDQ3KSovCiAKKy8qKgorICogyv2+3cDg0M22qNLlCisgKi8KIHN0cnVjdCBzaG1fcG9vbF9tc2cKIHsKICAgICB1bnNpZ25lZCBpbnQgc2htX2xlbjsKQEAgLTUwLDcgKzU1LDEyIEBACiAgICAgcGh5c19hZGRyX3QgIGtleV9tYW5hZ2VfcGh5OwogfTsKIAotCitleHRlcm4gaW50IHNobV9yZW1vdGVfZnJlZV9wYWdlcyhrZXlfdCBrZXkpOworZXh0ZXJuIGtleV90IHNobV9oYXNoX25hbWVfdG9fa2V5KGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworZXh0ZXJuIGludCBzaG1fZG9fbmV3c2VnX2NoZWNrKGtleV90IGtleSwgdW5zaWduZWQgbG9uZyBsZW4pOworZXh0ZXJuIGludCBzaG1fZG9fcmVtb3RlX21hcF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGtleV90IGtleSk7CitleHRlcm4gdm9pZCBzaG1fdW5tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKICNlbmRpZgogI2VuZGlmIC8vIF9TSE1fQ1RSTF9ICiAK