ZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbTg2LmMgYi9mcy9iaW5mbXRfZW04Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMmQxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9iaW5mbXRfZW04Ni5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIGxpbnV4L2ZzL2JpbmZtdF9lbTg2LmMKKyAqCisgKiAgQmFzZWQgb24gbGludXgvZnMvYmluZm10X3NjcmlwdC5jCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2ICBNYXJ0aW4gdm9uIEz2d2lzCisgKiAgb3JpZ2luYWwgIyEtY2hlY2tpbmcgaW1wbGVtZW50ZWQgYnkgdHl0c28uCisgKgorICogIGVtODYgY2hhbmdlcyBDb3B5cmlnaHQgKEMpIDE5OTcgIEppbSBQYXJhZGlzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKworI2RlZmluZSBFTTg2X0lOVEVSUAkiL3Vzci9iaW4vZW04NiIKKyNkZWZpbmUgRU04Nl9JX05BTUUJImVtODYiCisKK3N0YXRpYyBpbnQgbG9hZF9lbTg2KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY2hhciAqaW50ZXJwLCAqaV9uYW1lLCAqaV9hcmc7CisJc3RydWN0IGZpbGUgKiBmaWxlOworCWludCByZXR2YWw7CisJc3RydWN0IGVsZmhkcgllbGZfZXg7CisKKwkvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIExpbnV4L0ludGVsIEVMRiBleGVjdXRhYmxlLi4uICovCisJZWxmX2V4ID0gKigoc3RydWN0IGVsZmhkciAqKWJwcm0tPmJ1Zik7CisKKwlpZiAobWVtY21wKGVsZl9leC5lX2lkZW50LCBFTEZNQUcsIFNFTEZNQUcpICE9IDApCisJCXJldHVybiAgLUVOT0VYRUM7CisKKwkvKiBGaXJzdCBvZiBhbGwsIHNvbWUgc2ltcGxlIGNvbnNpc3RlbmN5IGNoZWNrcyAqLworCWlmICgoZWxmX2V4LmVfdHlwZSAhPSBFVF9FWEVDICYmIGVsZl9leC5lX3R5cGUgIT0gRVRfRFlOKSB8fAorCQkoISgoZWxmX2V4LmVfbWFjaGluZSA9PSBFTV8zODYpIHx8IChlbGZfZXguZV9tYWNoaW5lID09IEVNXzQ4NikpKSB8fAorCQkoIWJwcm0tPmZpbGUtPmZfb3AgfHwgIWJwcm0tPmZpbGUtPmZfb3AtPm1tYXApKSB7CisJCQlyZXR1cm4gLUVOT0VYRUM7CisJfQorCisJYnBybS0+c2hfYmFuZysrOwkvKiBXZWxsLCB0aGUgYmFuZy1zaGVsbCBpcyBpbXBsaWNpdC4uLiAqLworCWFsbG93X3dyaXRlX2FjY2VzcyhicHJtLT5maWxlKTsKKwlmcHV0KGJwcm0tPmZpbGUpOworCWJwcm0tPmZpbGUgPSBOVUxMOworCisJLyogVW5saWtlIGluIHRoZSBzY3JpcHQgY2FzZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkgaGFpcnkKKwkgKiBwYXJzaW5nIHRvIGZpbmQgb3VyIGludGVycHJldGVyLi4uIGl0J3MgaGFyZGNvZGVkIQorCSAqLworCWludGVycCA9IEVNODZfSU5URVJQOworCWlfbmFtZSA9IEVNODZfSV9OQU1FOworCWlfYXJnID0gTlVMTDsJCS8qIFdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGFkZCBhbiBhcmcgbGF0ZXIgKi8KKworCS8qCisJICogU3BsaWNlIGluICgxKSB0aGUgaW50ZXJwcmV0ZXIncyBuYW1lIGZvciBhcmd2WzBdCisJICogICAgICAgICAgICgyKSAob3B0aW9uYWwpIGFyZ3VtZW50IHRvIGludGVycHJldGVyCisJICogICAgICAgICAgICgzKSBmaWxlbmFtZSBvZiBlbXVsYXRlZCBmaWxlIChyZXBsYWNlIGFyZ3ZbMF0pCisJICoKKwkgKiBUaGlzIGlzIGRvbmUgaW4gcmV2ZXJzZSBvcmRlciwgYmVjYXVzZSBvZiBob3cgdGhlCisJICogdXNlciBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnRzIGFyZSBzdG9yZWQuCisJICovCisJcmVtb3ZlX2FyZ196ZXJvKGJwcm0pOworCXJldHZhbCA9IGNvcHlfc3RyaW5nc19rZXJuZWwoMSwgJmJwcm0tPmZpbGVuYW1lLCBicHJtKTsKKwlpZiAocmV0dmFsIDwgMCkgcmV0dXJuIHJldHZhbDsgCisJYnBybS0+YXJnYysrOworCWlmIChpX2FyZykgeworCQlyZXR2YWwgPSBjb3B5X3N0cmluZ3Nfa2VybmVsKDEsICZpX2FyZywgYnBybSk7CisJCWlmIChyZXR2YWwgPCAwKSByZXR1cm4gcmV0dmFsOyAKKwkJYnBybS0+YXJnYysrOworCX0KKwlyZXR2YWwgPSBjb3B5X3N0cmluZ3Nfa2VybmVsKDEsICZpX25hbWUsIGJwcm0pOworCWlmIChyZXR2YWwgPCAwKQlyZXR1cm4gcmV0dmFsOworCWJwcm0tPmFyZ2MrKzsKKworCS8qCisJICogT0ssIG5vdyByZXN0YXJ0IHRoZSBwcm9jZXNzIHdpdGggdGhlIGludGVycHJldGVyJ3MgaW5vZGUuCisJICogTm90ZSB0aGF0IHdlIHVzZSBvcGVuX2V4ZWMoKSBhcyB0aGUgbmFtZSBpcyBub3cgaW4ga2VybmVsCisJICogc3BhY2UsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGNvcHkgaXQuCisJICovCisJZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnApOworCWlmIChJU19FUlIoZmlsZSkpCisJCXJldHVybiBQVFJfRVJSKGZpbGUpOworCisJYnBybS0+ZmlsZSA9IGZpbGU7CisKKwlyZXR2YWwgPSBwcmVwYXJlX2JpbnBybShicHJtKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoYnBybSwgcmVncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IGVtODZfZm9ybWF0ID0geworCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmxvYWRfYmluYXJ5CT0gbG9hZF9lbTg2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9lbTg2X2JpbmZtdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9iaW5mbXQoJmVtODZfZm9ybWF0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZW04Nl9iaW5mbXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2JpbmZtdCgmZW04Nl9mb3JtYXQpOworfQorCitjb3JlX2luaXRjYWxsKGluaXRfZW04Nl9iaW5mbXQpOworbW9kdWxlX2V4aXQoZXhpdF9lbTg2X2JpbmZtdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cg==