From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4E72F89EA6 for ; Mon, 13 Jan 2020 09:19:17 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 13 Jan 2020 10:19:07 +0100 Message-Id: <20200113091908.11983-5-zbigniew.kempczynski@intel.com> In-Reply-To: <20200113091908.11983-1-zbigniew.kempczynski@intel.com> References: <20200113091908.11983-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v7 4/5] i915/gem_render_copy.c: Simplify code by switch to rendercopy bufmgr List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: U3dpdGNoIHRvIHJlbmRlcmNvcHkgYnVmbWdyIHRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCB0aWxl ZCBzdXJmYWNlcy4KClNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25p ZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+CkNjOiBLYXRhcnp5bmEgRGVjIDxrYXRhcnp5bmEuZGVjQGludGVsLmNvbT4K LS0tCiB0ZXN0cy9pOTE1L2dlbV9yZW5kZXJfY29weS5jIHwgNDIzICsrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTE3IGluc2VydGlvbnMoKyksIDMw NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9yZW5kZXJfY29weS5j IGIvdGVzdHMvaTkxNS9nZW1fcmVuZGVyX2NvcHkuYwppbmRleCA1YWJiMjAzNi4uNTNlZWQ4ZmQg MTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMKKysrIGIvdGVzdHMvaTkx NS9nZW1fcmVuZGVyX2NvcHkuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGRybS5oPgog CiAjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAicmVuZGVyY29weV9idWZtZ3Iu aCIKIAogSUdUX1RFU1RfREVTQ1JJUFRJT04oIkJhc2ljIHRlc3QgZm9yIHRoZSByZW5kZXJfY29w eSgpIGZ1bmN0aW9uLiIpOwogCkBAIC02MCw5ICs2MSwxMSBAQCB0eXBlZGVmIHN0cnVjdCB7CiAJ c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKIAlpZ3RfcmVuZGVyX2NvcHlmdW5jX3Qg cmVuZGVyX2NvcHk7CiAJaWd0X3ZlYm94X2NvcHlmdW5jX3QgdmVib3hfY29weTsKKwlzdHJ1Y3Qg cmVuZGVyY29weV9idWZtZ3IgKmJtZ3I7CiB9IGRhdGFfdDsKIHN0YXRpYyBpbnQgb3B0X2R1bXBf cG5nID0gZmFsc2U7CiBzdGF0aWMgaW50IGNoZWNrX2FsbF9waXhlbHMgPSBmYWxzZTsKK3N0YXRp YyBib29sIGR1bXBfY29tcHJlc3NlZF9zcmNfYnVmID0gZmFsc2U7CiAKIHN0YXRpYyBjb25zdCBj aGFyICptYWtlX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewpAQCAtNzMsMTMxICs3 NiwxMyBAQCBzdGF0aWMgY29uc3QgY2hhciAqbWFrZV9maWxlbmFtZShjb25zdCBjaGFyICpmaWxl bmFtZSkKIAlyZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgdm9pZCAqeWZfcHRyKHZvaWQgKnB0ciwK LQkJICAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwKLQkJICAgIHVuc2lnbmVkIGlu dCBzdHJpZGUsIHVuc2lnbmVkIGludCBjcHApCitzdGF0aWMgdm9pZCAqYWxsb2NfYWxpZ25lZCh1 aW50NjRfdCBzaXplKQogewotCWNvbnN0IGludCB0aWxlX3NpemUgPSA0ICogMTAyNDsKLQljb25z dCBpbnQgdGlsZV93aWR0aCA9IDEyODsKLQlpbnQgcm93X3NpemUgPSAoc3RyaWRlIC8gdGlsZV93 aWR0aCkgKiB0aWxlX3NpemU7CisJdm9pZCAqcDsKIAotCXggKj0gY3BwOyAvKiBjb252ZXJ0IHRv IEJ5dGUgb2Zmc2V0ICovCisJaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1hbGlnbigmcCwgMTYsIHNp emUpLCAwKTsKIAotCi0JLyoKLQkgKiBXaXRoaW4gYSA0ayBZZiB0aWxlLCB0aGUgYnl0ZSBzd2l6 emxpbmcgcGF0dGVybiBpcwotCSAqIG1zYi4uLi4uLmxzYgotCSAqIHh5eHl4eXl5eHh4eAotCSAq IFRoZSB0aWxlcyB0aGVtc2VsdmVzIGFyZSBsYWlkIG91dCBpbiByb3cgbWFqb3Igb3JkZXIuCi0J ICovCi0JcmV0dXJuIHB0ciArCi0JCSgoeCAmIDB4ZikgKiAxKSArIC8qIDR4MSBwaXhlbHMoMzJi cHApID0gMTZCICovCi0JCSgoeSAmIDB4MykgKiAxNikgKyAvKiA0eDQgcGl4ZWxzID0gNjRCICov Ci0JCSgoKHkgJiAweDQpID4+IDIpICogNjQpICsgLyogMXgyIDY0QiBibG9ja3MgKi8KLQkJKCgo eCAmIDB4MTApID4+IDQpICogMTI4KSArIC8qIDJ4MiA2NEIgYmxvY2tzID0gMjU2QiBibG9jayAq LwotCQkoKCh5ICYgMHg4KSA+PiAzKSAqIDI1NikgKyAvKiAyeDEgMjU2QiBibG9ja3MgKi8KLQkJ KCgoeCAmIDB4MjApID4+IDUpICogNTEyKSArIC8qIDJ4MiAyNTZCIGJsb2NrcyAqLwotCQkoKCh5 ICYgMHgxMCkgPj4gNCkgKiAxMDI0KSArIC8qIDR4MiAyNTYgYmxvY2tzICovCi0JCSgoKHggJiAw eDQwKSA+PiA2KSAqIDIwNDgpICsgLyogNHg0IDI1NkIgYmxvY2tzID0gNGsgdGlsZSAqLwotCQko KCh4ICYgfjB4N2YpID4+IDcpICogdGlsZV9zaXplKSArIC8qIHJvdyBvZiB0aWxlcyAqLwotCQko KCh5ICYgfjB4MWYpID4+IDUpICogcm93X3NpemUpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X2xp bmVhcl90b195ZihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCi0JCQkgICAgICBj b25zdCB1aW50MzJfdCAqbGluZWFyKQotewotCWludCBoZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChi dWYpOwotCWludCB3aWR0aCA9IGlndF9idWZfd2lkdGgoYnVmKTsKLQl2b2lkICptYXA7Ci0KLQln ZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKLQkJICAgICAgIEk5 MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUpOwotCW1hcCA9IGdlbV9tbWFw X19jcHUoZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsIDAsCi0JCQkgICAgYnVmLT5iby0+ c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0KLQlmb3IgKGludCB5ID0gMDsgeSA8IGhl aWdodDsgeSsrKSB7Ci0JCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotCQkJdWlu dDMyX3QgKnB0ciA9IHlmX3B0cihtYXAsIHgsIHksCi0JCQkJCSAgICAgICBidWYtPnN1cmZhY2Vb MF0uc3RyaWRlLAotCQkJCQkgICAgICAgYnVmLT5icHAgLyA4KTsKLQotCQkJKnB0ciA9IGxpbmVh clt5ICogd2lkdGggKyB4XTsKLQkJfQotCX0KLQotCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUp OwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X3lmX3RvX2xpbmVhcihkYXRhX3QgKmRhdGEsIHN0cnVj dCBpZ3RfYnVmICpidWYsCi0JCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQotewotCWludCBoZWln aHQgPSBpZ3RfYnVmX2hlaWdodChidWYpOwotCWludCB3aWR0aCA9IGlndF9idWZfd2lkdGgoYnVm KTsKLQl2b2lkICptYXA7Ci0KLQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8t PmhhbmRsZSwKLQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOwotCW1hcCA9IGdlbV9t bWFwX19jcHUoZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsIDAsCi0JCQkgICAgYnVmLT5i by0+c2l6ZSwgUFJPVF9SRUFEKTsKLQotCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKLQkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0JCQl1aW50MzJfdCAqcHRy ID0geWZfcHRyKG1hcCwgeCwgeSwKLQkJCQkJICAgICAgIGJ1Zi0+c3VyZmFjZVswXS5zdHJpZGUs Ci0JCQkJCSAgICAgICBidWYtPmJwcCAvIDgpOwotCi0JCQlsaW5lYXJbeSAqIHdpZHRoICsgeF0g PSAqcHRyOwotCQl9Ci0JfQotCi0JbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7Ci19Ci0KLXN0 YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX2d0dChkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVm ICpidWYsCi0JCQkgICAgICAgY29uc3QgdWludDMyX3QgKmxpbmVhcikKLXsKLQl2b2lkICptYXA7 Ci0KLQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKLQkJICAg ICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwotCi0JbWFwID0g Z2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKLQkJCSAgICBidWYt PmJvLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQotCW1lbWNweShtYXAsIGxpbmVh ciwgYnVmLT5iby0+c2l6ZSk7Ci0KLQltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKLX0KLQot c3RhdGljIHZvaWQgY29weV9ndHRfdG9fbGluZWFyKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9i dWYgKmJ1ZiwKLQkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQotewotCXZvaWQgKm1hcDsKLQot CWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkgICAgICAg STkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Ci0KLQltYXAgPSBnZW1fbW1hcF9fZ3R0KGRhdGEtPmRy bV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCk7 Ci0KLQlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBtYXAsIGJ1Zi0+Ym8tPnNpemUpOwotCi0J bXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkICpsaW5lYXJfY29w eShkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYpCi17Ci0Jdm9pZCAqbGluZWFyOwot Ci0JLyogMTZCIGFsaWdubWVudCBhbGxvd3MgdG8gcG90ZW50aWFsbHkgbWFrZSB1c2Ugb2YgU1NF NCBmb3IgY29weWluZyAqLwotCWlndF9hc3NlcnRfZXEocG9zaXhfbWVtYWxpZ24oJmxpbmVhciwg MTYsIGJ1Zi0+Ym8tPnNpemUpLCAwKTsKLQotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElO R19ZZikKLQkJY29weV95Zl90b19saW5lYXIoZGF0YSwgYnVmLCBsaW5lYXIpOwotCWVsc2UKLQkJ Y29weV9ndHRfdG9fbGluZWFyKGRhdGEsIGJ1ZiwgbGluZWFyKTsKLQotCXJldHVybiBsaW5lYXI7 CisJcmV0dXJuIHA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDksMTMgKzk0LDEzIEBAIGNvcHlf ZnJvbV9saW5lYXJfYnVmKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKnNyYywgc3RydWN0 IGlndF9idWYgKmRzdCkKIAogCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgc3JjLT5iby0+ aGFuZGxlLAogCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Ci0JbGluZWFyID0gZ2Vt X21tYXBfX2NwdShkYXRhLT5kcm1fZmQsIHNyYy0+Ym8tPmhhbmRsZSwgMCwKLQkJCSAgICAgICBz cmMtPmJvLT5zaXplLCBQUk9UX1JFQUQpOworCWxpbmVhciA9IF9fZ2VtX21tYXBfb2Zmc2V0X19j cHUoZGF0YS0+ZHJtX2ZkLCBzcmMtPmJvLT5oYW5kbGUsIDAsCisJCQkJCXNyYy0+Ym8tPnNpemUs IFBST1RfUkVBRCk7CisJaWYgKCFsaW5lYXIpCisJCWxpbmVhciA9IGdlbV9tbWFwX19jcHUoZGF0 YS0+ZHJtX2ZkLCBzcmMtPmJvLT5oYW5kbGUsIDAsCisJCQkJICAgICAgIHNyYy0+Ym8tPnNpemUs IFBST1RfUkVBRCk7CiAKLQlpZiAoZHN0LT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpCi0JCWNv cHlfbGluZWFyX3RvX3lmKGRhdGEsIGRzdCwgbGluZWFyKTsKLQllbHNlCi0JCWNvcHlfbGluZWFy X3RvX2d0dChkYXRhLCBkc3QsIGxpbmVhcik7CisJbGluZWFyX3RvX2lndF9idWYoZGF0YS0+Ym1n ciwgZHN0LCBsaW5lYXIpOwogCiAJbXVubWFwKGxpbmVhciwgc3JjLT5iby0+c2l6ZSk7CiB9CkBA IC0yMjcsNyArMTEyLDggQEAgc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfd3JpdGVfdG9fcG5nKGRh dGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAljYWlyb19zdGF0dXNfdCByZXQ7CiAJ dm9pZCAqbGluZWFyOwogCi0JbGluZWFyID0gbGluZWFyX2NvcHkoZGF0YSwgYnVmKTsKKwlsaW5l YXIgPSBhbGxvY19hbGlnbmVkKGJ1Zi0+Ym8tPnNpemUpOworCWlndF9idWZfdG9fbGluZWFyKGRh dGEtPmJtZ3IsIGJ1ZiwgbGluZWFyKTsKIAogCXN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNl X2NyZWF0ZV9mb3JfZGF0YShsaW5lYXIsCiAJCQkJCQkgICAgICBDQUlST19GT1JNQVRfUkdCMjQs CkBAIC0yNDEsNjcgKzEyNyw0MSBAQCBzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl93cml0ZV90b19w bmcoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCWZyZWUobGluZWFyKTsKIH0K IAotc3RhdGljIGludCBzY3JhdGNoX2J1Zl9hdXhfd2lkdGgodWludDMyX3QgZGV2aWQsIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpidWYpCi17Ci0JLyoKLQkgKiBHRU4xMis6IFRoZSBBVVggQ0NTIHVu aXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQgbWFpbiBzdXJmYWNlCi0JICogdGlsZXMuIFRo dXMgdGhlIHdpZHRoIG9mIHRoZSBDQ1MgdW5pdCBpcyA0KjMyPTEyOCBwaXhlbHMgb24gdGhlCi0J ICogbWFpbiBzdXJmYWNlLgotCSAqLwotCWlmIChpbnRlbF9nZW4oZGV2aWQpID49IDEyKQotCQly ZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lkdGgoYnVmKSwgMTI4KSAqIDY0OwotCi0JcmV0 dXJuIERJVl9ST1VORF9VUChpZ3RfYnVmX3dpZHRoKGJ1ZiksIDEwMjQpICogMTI4OwotfQotCi1z dGF0aWMgaW50IHNjcmF0Y2hfYnVmX2F1eF9oZWlnaHQodWludDMyX3QgZGV2aWQsIGNvbnN0IHN0 cnVjdCBpZ3RfYnVmICpidWYpCi17Ci0JLyoKLQkgKiBHRU4xMis6IFRoZSBBVVggQ0NTIHVuaXQg c2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQgbWFpbiBzdXJmYWNlCi0JICogdGlsZXMuIFRodXMg dGhlIGhlaWdodCBvZiB0aGUgQ0NTIHVuaXQgaXMgMzIgcGl4ZWwgcm93cyBvbiB0aGUgbWFpbgot CSAqIHN1cmZhY2UuCi0JICovCi0JaWYgKGludGVsX2dlbihkZXZpZCkgPj0gMTIpCi0JCXJldHVy biBESVZfUk9VTkRfVVAoaWd0X2J1Zl9oZWlnaHQoYnVmKSwgMzIpOwotCi0JcmV0dXJuIERJVl9S T1VORF9VUChpZ3RfYnVmX2hlaWdodChidWYpLCA1MTIpICogMzI7Ci19Ci0KLXN0YXRpYyB2b2lk ICpsaW5lYXJfY29weV9hdXgoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQorc3Rh dGljIHZvaWQgKmxpbmVhcl9jb3B5X2NjcyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpi dWYpCiB7Ci0Jdm9pZCAqbWFwLCAqbGluZWFyOwotCWludCBhdXhfc2l6ZSA9IHNjcmF0Y2hfYnVm X2F1eF93aWR0aChkYXRhLT5kZXZpZCwgYnVmKSAqCi0JCXNjcmF0Y2hfYnVmX2F1eF9oZWlnaHQo ZGF0YS0+ZGV2aWQsIGJ1Zik7Ci0KLQlpZ3RfYXNzZXJ0X2VxKHBvc2l4X21lbWFsaWduKCZsaW5l YXIsIDE2LCBhdXhfc2l6ZSksIDApOwotCi0JZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBi dWYtPmJvLT5oYW5kbGUsCi0JCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKKwl2b2lk ICpjY3NfZGF0YSwgKmxpbmVhcjsKKwlpbnQgZ2VuID0gaW50ZWxfZ2VuKGRhdGEtPmRldmlkKTsK KwlpbnQgY2NzX3NpemUgPSBpZ3RfYnVmX2ludGVsX2Njc193aWR0aChnZW4sIGJ1ZikgKgorCQlp Z3RfYnVmX2ludGVsX2Njc19oZWlnaHQoZ2VuLCBidWYpOwogCi0JbWFwID0gZ2VtX21tYXBfX2d0 dChkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKLQkJCSAgICBidWYtPmJvLT5zaXplLCBQ Uk9UX1JFQUQpOworCWNjc19kYXRhID0gYWxsb2NfYWxpZ25lZChjY3Nfc2l6ZSk7CisJbGluZWFy ID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXplKTsKKwltZW1zZXQobGluZWFyLCAwLCBidWYt PmJvLT5zaXplKTsKIAotCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCArIGJ1Zi0+Y2Nz WzBdLm9mZnNldCwgYXV4X3NpemUpOworCWlndF9idWZfdG9fbGluZWFyKGRhdGEtPmJtZ3IsIGJ1 ZiwgbGluZWFyKTsKKwlpZ3RfbWVtY3B5X2Zyb21fd2MoY2NzX2RhdGEsIGxpbmVhciArIGJ1Zi0+ Y2NzWzBdLm9mZnNldCwgY2NzX3NpemUpOwogCi0JbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7 CisJZnJlZShsaW5lYXIpOwogCi0JcmV0dXJuIGxpbmVhcjsKKwlyZXR1cm4gY2NzX2RhdGE7CiB9 CiAKLXN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2F1eF93cml0ZV90b19wbmcoZGF0YV90ICpkYXRh LAorc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfY2NzX3dyaXRlX3RvX3BuZyhkYXRhX3QgKmRhdGEs CiAJCQkJCSBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUp CiB7CiAJY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOwogCWNhaXJvX3N0YXR1c190IHJldDsKIAl2 b2lkICpsaW5lYXI7CisJaW50IGdlbiA9IGludGVsX2dlbihkYXRhLT5kZXZpZCk7CisJdW5zaWdu ZWQgaW50IGNjc193aWR0aCA9IGlndF9idWZfaW50ZWxfY2NzX3dpZHRoKGdlbiwgYnVmKTsKKwl1 bnNpZ25lZCBpbnQgY2NzX2hlaWdodCA9IGlndF9idWZfaW50ZWxfY2NzX2hlaWdodChnZW4sIGJ1 Zik7CiAKLQlsaW5lYXIgPSBsaW5lYXJfY29weV9hdXgoZGF0YSwgYnVmKTsKKwlsaW5lYXIgPSBs aW5lYXJfY29weV9jY3MoZGF0YSwgYnVmKTsKIAogCXN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJm YWNlX2NyZWF0ZV9mb3JfZGF0YShsaW5lYXIsCiAJCQkJCQkgICAgICBDQUlST19GT1JNQVRfQTgs Ci0JCQkJCQkgICAgICBzY3JhdGNoX2J1Zl9hdXhfd2lkdGgoZGF0YS0+ZGV2aWQsIGJ1ZiksCi0J CQkJCQkgICAgICBzY3JhdGNoX2J1Zl9hdXhfaGVpZ2h0KGRhdGEtPmRldmlkLCBidWYpLAorCQkJ CQkJICAgICAgY2NzX3dpZHRoLCBjY3NfaGVpZ2h0LAogCQkJCQkJICAgICAgYnVmLT5jY3NbMF0u c3RyaWRlKTsKIAlyZXQgPSBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZyhzdXJmYWNlLCBtYWtl X2ZpbGVuYW1lKGZpbGVuYW1lKSk7CiAJaWd0X2Fzc2VydChyZXQgPT0gQ0FJUk9fU1RBVFVTX1NV Q0NFU1MpOwpAQCAtMzIwLDcgKzE4MCw3IEBAIHN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2RyYXdf cGF0dGVybihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCiAJY2Fpcm9fdCAqY3I7 CiAJdm9pZCAqbGluZWFyOwogCi0JbGluZWFyID0gbGluZWFyX2NvcHkoZGF0YSwgYnVmKTsKKwls aW5lYXIgPSBhbGxvY19hbGlnbmVkKGJ1Zi0+Ym8tPnNpemUpOwogCiAJc3VyZmFjZSA9IGNhaXJv X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGxpbmVhciwKIAkJCQkJCSAgICAgIENBSVJP X0ZPUk1BVF9SR0IyNCwKQEAgLTM2MSwxMCArMjIxLDcgQEAgc3RhdGljIHZvaWQgc2NyYXRjaF9i dWZfZHJhd19wYXR0ZXJuKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAogCWNh aXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKIAotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1 X1RJTElOR19ZZikKLQkJY29weV9saW5lYXJfdG9feWYoZGF0YSwgYnVmLCBsaW5lYXIpOwotCWVs c2UKLQkJY29weV9saW5lYXJfdG9fZ3R0KGRhdGEsIGJ1ZiwgbGluZWFyKTsKKwlsaW5lYXJfdG9f aWd0X2J1ZihkYXRhLT5ibWdyLCBidWYsIGxpbmVhcik7CiAKIAlmcmVlKGxpbmVhcik7CiB9CkBA IC0zNzcsNiArMjM0LDcgQEAgc2NyYXRjaF9idWZfY29weShkYXRhX3QgKmRhdGEsCiAJaW50IHdp ZHRoID0gaWd0X2J1Zl93aWR0aChkc3QpOwogCWludCBoZWlnaHQgID0gaWd0X2J1Zl9oZWlnaHQo ZHN0KTsKIAl1aW50MzJfdCAqbGluZWFyX2RzdDsKKwl1aW50MzJfdCAqbGluZWFyX3NyYzsKIAog CWlndF9hc3NlcnRfZXEoaWd0X2J1Zl93aWR0aChkc3QpLCBpZ3RfYnVmX3dpZHRoKHNyYykpOwog CWlndF9hc3NlcnRfZXEoaWd0X2J1Zl9oZWlnaHQoZHN0KSwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7 CkBAIC0zODksNDkgKzI0NywyMCBAQCBzY3JhdGNoX2J1Zl9jb3B5KGRhdGFfdCAqZGF0YSwKIAlo ID0gbWluKGgsIGhlaWdodCAtIHN5KTsKIAloID0gbWluKGgsIGhlaWdodCAtIGR5KTsKIAotCWdl bV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgZHN0LT5iby0+aGFuZGxlLAotCQkgICAgICAgSTkx NV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Ci0JbGluZWFyX2RzdCA9IGdl bV9tbWFwX19ndHQoZGF0YS0+ZHJtX2ZkLCBkc3QtPmJvLT5oYW5kbGUsCi0JCQkJICAgZHN0LT5i by0+c2l6ZSwgUFJPVF9XUklURSk7Ci0KLQlpZiAoc3JjLT50aWxpbmcgPT0gSTkxNV9USUxJTkdf WWYpIHsKLQkJdm9pZCAqbWFwOwotCi0JCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgc3Jj LT5iby0+aGFuZGxlLAotCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOwotCQltYXAg PSBnZW1fbW1hcF9fY3B1KGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxlLCAwLAotCQkJCSAg ICBzcmMtPmJvLT5zaXplLCBQUk9UX1JFQUQpOwotCi0JCWZvciAoaW50IHkgPSAwOyB5IDwgaDsg eSsrKSB7Ci0JCQlmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewotCQkJCWNvbnN0IHVpbnQz Ml90ICpwdHIgPSB5Zl9wdHIobWFwLCBzeCt4LCBzeSt5LAotCQkJCQkJCSAgICAgc3JjLT5zdXJm YWNlWzBdLnN0cmlkZSwKLQkJCQkJCQkgICAgIHNyYy0+YnBwIC8gOCk7Ci0KLQkJCQlsaW5lYXJf ZHN0WyhkeSt5KSAqIHdpZHRoICsgZHgreF0gPSAqcHRyOwotCQkJfQotCQl9Ci0KLQkJbXVubWFw KG1hcCwgc3JjLT5iby0+c2l6ZSk7Ci0JfSBlbHNlIHsKLQkJdWludDMyX3QgKmxpbmVhcl9zcmM7 Ci0KLQkJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBzcmMtPmJvLT5oYW5kbGUsCi0JCQkg ICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Ci0KLQkJbGluZWFyX3NyYyA9IGdlbV9tbWFw X19ndHQoZGF0YS0+ZHJtX2ZkLCBzcmMtPmJvLT5oYW5kbGUsCi0JCQkJCSAgIHNyYy0+Ym8tPnNp emUsIFBST1RfUkVBRCk7Ci0KLQkJZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKLQkJCWln dF9tZW1jcHlfZnJvbV93YygmbGluZWFyX2RzdFsoZHkreSkgKiB3aWR0aCArIGR4XSwKLQkJCQkJ ICAgJmxpbmVhcl9zcmNbKHN5K3kpICogd2lkdGggKyBzeF0sCi0JCQkJCSAgIHcgKiAoc3JjLT5i cHAgLyA4KSk7Ci0JCX0KKwlsaW5lYXJfZHN0ID0gYWxsb2NfYWxpZ25lZChkc3QtPmJvLT5zaXpl KTsKKwlsaW5lYXJfc3JjID0gYWxsb2NfYWxpZ25lZChzcmMtPmJvLT5zaXplKTsKKwlpZ3RfYnVm X3RvX2xpbmVhcihkYXRhLT5ibWdyLCBzcmMsIGxpbmVhcl9zcmMpOworCWlndF9idWZfdG9fbGlu ZWFyKGRhdGEtPmJtZ3IsIGRzdCwgbGluZWFyX2RzdCk7CiAKLQkJbXVubWFwKGxpbmVhcl9zcmMs IHNyYy0+Ym8tPnNpemUpOworCWZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisJCW1lbWNw eSgmbGluZWFyX2RzdFsoZHkreSkgKiB3aWR0aCArIGR4XSwKKwkJCQkmbGluZWFyX3NyY1soc3kr eSkgKiB3aWR0aCArIHN4XSwKKwkJCQl3ICogKHNyYy0+YnBwIC8gOCkpOwogCX0KKwlmcmVlKGxp bmVhcl9zcmMpOwogCi0JbXVubWFwKGxpbmVhcl9kc3QsIGRzdC0+Ym8tPnNpemUpOworCWxpbmVh cl90b19pZ3RfYnVmKGRhdGEtPmJtZ3IsIGRzdCwgbGluZWFyX2RzdCk7CisJZnJlZShsaW5lYXJf ZHN0KTsKIH0KIAogc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5pdChkYXRhX3QgKmRhdGEsIHN0 cnVjdCBpZ3RfYnVmICpidWYsCkBAIC00MzksNzYgKzI2OCwxMCBAQCBzdGF0aWMgdm9pZCBzY3Jh dGNoX2J1Zl9pbml0KGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAkJCSAgICAg dWludDMyX3QgcmVxX3RpbGluZywKIAkJCSAgICAgZW51bSBpOTE1X2NvbXByZXNzaW9uIGNvbXBy ZXNzaW9uKQogewotCXVpbnQzMl90IHRpbGluZyA9IHJlcV90aWxpbmc7Ci0JdW5zaWduZWQgbG9u ZyBwaXRjaDsKIAlpbnQgYnBwID0gMzI7CiAKLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1Zikp OwotCi0JaWYgKGNvbXByZXNzaW9uICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkgewotCQlpbnQg YXV4X3dpZHRoLCBhdXhfaGVpZ2h0OwotCQlpbnQgc2l6ZTsKLQotCQlpZ3RfcmVxdWlyZShpbnRl bF9nZW4oZGF0YS0+ZGV2aWQpID49IDkpOwotCQlpZ3RfYXNzZXJ0KHRpbGluZyA9PSBJOTE1X1RJ TElOR19ZIHx8Ci0JCQkgICB0aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpOwotCi0JCS8qCi0JCSAq IE9uIEdFTjEyKyB3ZSBhbGlnbiB0aGUgbWFpbiBzdXJmYWNlIHRvIDQgKiA0IG1haW4gc3VyZmFj ZQotCQkgKiB0aWxlcywgd2hpY2ggaXMgNjRrQi4gVGhlc2UgMTYgdGlsZXMgYXJlIG1hcHBlZCBi eSA0IEFVWAotCQkgKiBDQ1MgdW5pdHMsIHRoYXQgaXMgNCAqIDY0IGJ5dGVzLiBUaGVzZSA0IEND UyB1bml0cyBhcmUgaW4KLQkJICogdHVybiBtYXBwZWQgYnkgb25lIEwxIEFVWCBwYWdlIHRhYmxl IGVudHJ5LgotCQkgKi8KLQkJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPj0gMTIpCi0JCQli dWYtPnN1cmZhY2VbMF0uc3RyaWRlID0gQUxJR04od2lkdGggKiAoYnBwIC8gOCksIDEyOCAqIDQp OwotCQllbHNlCi0JCQlidWYtPnN1cmZhY2VbMF0uc3RyaWRlID0gQUxJR04od2lkdGggKiAoYnBw IC8gOCksIDEyOCk7Ci0KLQkJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPj0gMTIpCi0JCQlo ZWlnaHQgPSBBTElHTihoZWlnaHQsIDQgKiAzMik7Ci0KLQkJYnVmLT5zdXJmYWNlWzBdLnNpemUg PSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlICogaGVpZ2h0OwotCQlidWYtPnRpbGluZyA9IHRpbGlu ZzsKLQkJYnVmLT5icHAgPSBicHA7Ci0KLQkJYXV4X3dpZHRoID0gc2NyYXRjaF9idWZfYXV4X3dp ZHRoKGRhdGEtPmRldmlkLCBidWYpOwotCQlhdXhfaGVpZ2h0ID0gc2NyYXRjaF9idWZfYXV4X2hl aWdodChkYXRhLT5kZXZpZCwgYnVmKTsKLQotCQlidWYtPmNvbXByZXNzaW9uID0gY29tcHJlc3Np b247Ci0JCWJ1Zi0+Y2NzWzBdLm9mZnNldCA9IGJ1Zi0+c3VyZmFjZVswXS5zdHJpZGUgKiBBTElH TihoZWlnaHQsIDMyKTsKLQkJYnVmLT5jY3NbMF0uc3RyaWRlID0gYXV4X3dpZHRoOwotCi0JCXNp emUgPSBidWYtPmNjc1swXS5vZmZzZXQgKyBhdXhfd2lkdGggKiBhdXhfaGVpZ2h0OwotCi0JCWJ1 Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2MoZGF0YS0+YnVmbWdyLCAiIiwgc2l6ZSwgNDA5Nik7 Ci0KLQkJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19ZKSB7Ci0JCQlkcm1faW50ZWxfYm9fc2V0 X3RpbGluZyhidWYtPmJvLCAmdGlsaW5nLAotCQkJCQkJYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSk7 Ci0JCQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7Ci0JCX0KLQl9IGVsc2UgaWYg KHJlcV90aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpIHsKLQkJaW50IHNpemU7Ci0KLQkJYnVmLT5z dXJmYWNlWzBdLnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjgpOwotCQlidWYt PnN1cmZhY2VbMF0uc2l6ZSA9IGJ1Zi0+c3VyZmFjZVswXS5zdHJpZGUgKiBoZWlnaHQ7Ci0JCWJ1 Zi0+dGlsaW5nID0gdGlsaW5nOwotCQlidWYtPmJwcCA9IGJwcDsKLQotCQlzaXplID0gYnVmLT5z dXJmYWNlWzBdLnN0cmlkZSAqIEFMSUdOKGhlaWdodCwgMzIpOwotCi0JCWJ1Zi0+Ym8gPSBkcm1f aW50ZWxfYm9fYWxsb2MoZGF0YS0+YnVmbWdyLCAiIiwgc2l6ZSwgNDA5Nik7Ci0JfSBlbHNlIHsK LQkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19hbGxvY190aWxlZChkYXRhLT5idWZtZ3IsICIiLAot CQkJCQkJICAgd2lkdGgsIGhlaWdodCwgYnBwIC8gOCwKLQkJCQkJCSAgICZ0aWxpbmcsICZwaXRj aCwgMCk7Ci0JCWlndF9hc3NlcnRfZXEodGlsaW5nLCByZXFfdGlsaW5nKTsKLQotCQlidWYtPnN1 cmZhY2VbMF0uc3RyaWRlID0gcGl0Y2g7Ci0JCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOwotCQlidWYt PnN1cmZhY2VbMF0uc2l6ZSA9IHBpdGNoICogaGVpZ2h0OwotCQlidWYtPmJwcCA9IGJwcDsKLQl9 CisJaWd0X2J1Zl9pbml0KGRhdGEtPmJtZ3IsIGJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBwLCByZXFf dGlsaW5nLAorCQkgICAgIGNvbXByZXNzaW9uKTsKIAogCWlndF9hc3NlcnQoaWd0X2J1Zl93aWR0 aChidWYpID09IHdpZHRoKTsKIAlpZ3RfYXNzZXJ0KGlndF9idWZfaGVpZ2h0KGJ1ZikgPT0gaGVp Z2h0KTsKQEAgLTUzMywxMSArMjk2LDEzIEBAIHNjcmF0Y2hfYnVmX2NoZWNrKGRhdGFfdCAqZGF0 YSwKIAlpZ3RfYXNzZXJ0X2VxKGlndF9idWZfaGVpZ2h0KGJ1ZiksIGlndF9idWZfaGVpZ2h0KHJl ZikpOwogCWlndF9hc3NlcnRfZXEoYnVmLT5iby0+c2l6ZSwgcmVmLT5iby0+c2l6ZSk7CiAKLQls aW5lYXIgPSBsaW5lYXJfY29weShkYXRhLCBidWYpOworCWxpbmVhciA9IGFsbG9jX2FsaWduZWQo YnVmLT5iby0+c2l6ZSk7CisJaWd0X2J1Zl90b19saW5lYXIoZGF0YS0+Ym1nciwgYnVmLCBsaW5l YXIpOwogCWJ1Zl92YWwgPSBsaW5lYXJbeSAqIHdpZHRoICsgeF07CiAJZnJlZShsaW5lYXIpOwog Ci0JbGluZWFyID0gbGluZWFyX2NvcHkoZGF0YSwgcmVmKTsKKwlsaW5lYXIgPSBhbGxvY19hbGln bmVkKHJlZi0+Ym8tPnNpemUpOworCWlndF9idWZfdG9fbGluZWFyKGRhdGEtPmJtZ3IsIGJ1Ziwg bGluZWFyKTsKIAlyZWZfdmFsID0gbGluZWFyW3kgKiB3aWR0aCArIHhdOwogCWZyZWUobGluZWFy KTsKIApAQCAtNTU5LDggKzMyNCwxMCBAQCBzY3JhdGNoX2J1Zl9jaGVja19hbGwoZGF0YV90ICpk YXRhLAogCWlndF9hc3NlcnRfZXEoaWd0X2J1Zl9oZWlnaHQoYnVmKSwgaWd0X2J1Zl9oZWlnaHQo cmVmKSk7CiAJaWd0X2Fzc2VydF9lcShidWYtPmJvLT5zaXplLCByZWYtPmJvLT5zaXplKTsKIAot CWxpbmVhcl9idWYgPSBsaW5lYXJfY29weShkYXRhLCBidWYpOwotCWxpbmVhcl9yZWYgPSBsaW5l YXJfY29weShkYXRhLCByZWYpOworCWxpbmVhcl9idWYgPSBhbGxvY19hbGlnbmVkKGJ1Zi0+Ym8t PnNpemUpOworCWxpbmVhcl9yZWYgPSBhbGxvY19hbGlnbmVkKHJlZi0+Ym8tPnNpemUpOworCWln dF9idWZfdG9fbGluZWFyKGRhdGEtPmJtZ3IsIGJ1ZiwgbGluZWFyX2J1Zik7CisJaWd0X2J1Zl90 b19saW5lYXIoZGF0YS0+Ym1nciwgcmVmLCBsaW5lYXJfcmVmKTsKIAogCWZvciAoaW50IHkgPSAw OyB5IDwgaGVpZ2h0OyB5KyspIHsKIAkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7 CkBAIC01NzcsMjUgKzM0NCw0OSBAQCBzY3JhdGNoX2J1Zl9jaGVja19hbGwoZGF0YV90ICpkYXRh LAogCWZyZWUobGluZWFyX2J1Zik7CiB9CiAKLXN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2F1eF9j aGVjayhkYXRhX3QgKmRhdGEsCitzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9jY3NfY2hlY2soZGF0 YV90ICpkYXRhLAogCQkJCSAgc3RydWN0IGlndF9idWYgKmJ1ZikKIHsKLQlpbnQgYXV4X3NpemUg PSBzY3JhdGNoX2J1Zl9hdXhfd2lkdGgoZGF0YS0+ZGV2aWQsIGJ1ZikgKgotCQlzY3JhdGNoX2J1 Zl9hdXhfaGVpZ2h0KGRhdGEtPmRldmlkLCBidWYpOworCWludCBnZW4gPSBpbnRlbF9nZW4oZGF0 YS0+ZGV2aWQpOworCWludCBjY3Nfc2l6ZSA9IGlndF9idWZfaW50ZWxfY2NzX3dpZHRoKGdlbiwg YnVmKSAqCisJCWlndF9idWZfaW50ZWxfY2NzX2hlaWdodChnZW4sIGJ1Zik7CiAJdWludDhfdCAq bGluZWFyOwogCWludCBpOwogCi0JbGluZWFyID0gbGluZWFyX2NvcHlfYXV4KGRhdGEsIGJ1Zik7 CisJbGluZWFyID0gbGluZWFyX2NvcHlfY2NzKGRhdGEsIGJ1Zik7CiAKLQlmb3IgKGkgPSAwOyBp IDwgYXV4X3NpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjY3Nfc2l6ZTsgaSsrKSB7CiAJ CWlmIChsaW5lYXJbaV0pCiAJCQlicmVhazsKIAl9CiAKIAlmcmVlKGxpbmVhcik7CiAKLQlpZ3Rf YXNzZXJ0X2YoaSA8IGF1eF9zaXplLAotCQkgICAgICJBdXggc3VyZmFjZSBpbmRpY2F0ZXMgdGhh dCBub3RoaW5nIHdhcyBjb21wcmVzc2VkXG4iKTsKKwlpZ3RfYXNzZXJ0X2YoaSA8IGNjc19zaXpl LAorCQkgICAgICJDY3Mgc3VyZmFjZSBpbmRpY2F0ZXMgdGhhdCBub3RoaW5nIHdhcyBjb21wcmVz c2VkXG4iKTsKK30KKworc3RhdGljIHZvaWQKK2R1bXBfaWd0X2J1Zl90b19maWxlKGRhdGFfdCAq ZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJRklM RSAqb3V0OworCXZvaWQgKmxpbmVhcjsKKworCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwg YnVmLT5iby0+aGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisKKwls aW5lYXIgPSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFu ZGxlLCAwLAorCQkJCQlidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQpOworCWlmICghbGluZWFyKQor CQlsaW5lYXIgPSBnZW1fbW1hcF9fY3B1KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLCAw LAorCQkJCSAgICAgICBidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQpOworCW91dCA9IGZvcGVuKGZp bGVuYW1lLCAid2IiKTsKKwlpZ3RfYXNzZXJ0KG91dCk7CisJZndyaXRlKGxpbmVhciwgYnVmLT5i by0+c2l6ZSwgMSwgb3V0KTsKKwlmY2xvc2Uob3V0KTsKKworCW11bm1hcChsaW5lYXIsIGJ1Zi0+ Ym8tPnNpemUpOworCiB9CiAKICNkZWZpbmUgU09VUkNFX01JWEVEX1RJTEVECTEKQEAgLTY3MSw2 ICs0NjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0KGRhdGFfdCAqZGF0YSwgdWludDMyX3Qgc3JjX3Rp bGluZywgdWludDMyX3QgZHN0X3RpbGluZywKIAkJCQkgSTkxNV9DT01QUkVTU0lPTl9OT05FKTsK IAlzY3JhdGNoX2J1Zl9pbml0KGRhdGEsICZkc3QsIFdJRFRILCBIRUlHSFQsIGRzdF90aWxpbmcs CiAJCQkgSTkxNV9DT01QUkVTU0lPTl9OT05FKTsKKwogCWlmIChzcmNfY29tcHJlc3NlZCkKIAkJ c2NyYXRjaF9idWZfaW5pdChkYXRhLCAmc3JjX2NjcywgV0lEVEgsIEhFSUdIVCwKIAkJCQkgc3Jj X3RpbGluZywgc3JjX2NvbXByZXNzaW9uKTsKQEAgLTY4Myw3ICs0NzUsOCBAQCBzdGF0aWMgdm9p ZCB0ZXN0KGRhdGFfdCAqZGF0YSwgdWludDMyX3Qgc3JjX3RpbGluZywgdWludDMyX3QgZHN0X3Rp bGluZywKIAlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zcmM7IGkrKykKIAkJc2NyYXRjaF9idWZf ZHJhd19wYXR0ZXJuKGRhdGEsICZzcmNbaV0uYnVmLAogCQkJCQkgMCwgMCwgV0lEVEgsIEhFSUdI VCwKLQkJCQkJIDAsIDAsIFdJRFRILCBIRUlHSFQsIHRydWUpOworCQkJCQkgMCwgMCwgV0lEVEgs IEhFSUdIVCwgKGkgJSAyKSk7CisKIAlzY3JhdGNoX2J1Zl9kcmF3X3BhdHRlcm4oZGF0YSwgJmRz dCwKIAkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwKIAkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwg ZmFsc2UpOwpAQCAtNzQyLDE1ICs1MzUsMjkgQEAgc3RhdGljIHZvaWQgdGVzdChkYXRhX3QgKmRh dGEsIHVpbnQzMl90IHNyY190aWxpbmcsIHVpbnQzMl90IGRzdF90aWxpbmcsCiAJCQkJCSAgJmRz dCwgMCwgMCk7CiAKIAl9IGVsc2UgewotCQlpZiAoc3JjX2NvbXByZXNzaW9uID09IEk5MTVfQ09N UFJFU1NJT05fUkVOREVSKQorCQlpZiAoc3JjX2NvbXByZXNzaW9uID09IEk5MTVfQ09NUFJFU1NJ T05fUkVOREVSKSB7CiAJCQlkYXRhLT5yZW5kZXJfY29weShkYXRhLT5iYXRjaCwgTlVMTCwKIAkJ CQkJICAmc3JjX3RpbGVkLCAwLCAwLCBXSURUSCwgSEVJR0hULAogCQkJCQkgICZzcmNfY2NzLAog CQkJCQkgIDAsIDApOwotCQllbHNlIGlmIChzcmNfY29tcHJlc3Npb24gPT0gSTkxNV9DT01QUkVT U0lPTl9NRURJQSkKKwkJCWlmIChkdW1wX2NvbXByZXNzZWRfc3JjX2J1ZikgeworCQkJCWR1bXBf aWd0X2J1Zl90b19maWxlKGRhdGEsICZzcmNfdGlsZWQsCisJCQkJCQkgICAgICJyZW5kZXItc3Jj X3RpbGVkLmJpbiIpOworCQkJCWR1bXBfaWd0X2J1Zl90b19maWxlKGRhdGEsICZzcmNfY2NzLAor CQkJCQkJICAgICAicmVuZGVyLXNyY19jY3MuYmluIik7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAo c3JjX2NvbXByZXNzaW9uID09IEk5MTVfQ09NUFJFU1NJT05fTUVESUEpIHsKIAkJCWRhdGEtPnZl Ym94X2NvcHkoZGF0YS0+YmF0Y2gsCiAJCQkJCSAmc3JjX3RpbGVkLCBXSURUSCwgSEVJR0hULAog CQkJCQkgJnNyY19jY3MpOworCQkJaWYgKGR1bXBfY29tcHJlc3NlZF9zcmNfYnVmKSB7CisJCQkJ ZHVtcF9pZ3RfYnVmX3RvX2ZpbGUoZGF0YSwgJnNyY190aWxlZCwKKwkJCQkJCSAgICAgInZlYm94 LXNyY190aWxlZC5iaW4iKTsKKwkJCQlkdW1wX2lndF9idWZfdG9fZmlsZShkYXRhLCAmc3JjX2Nj cywKKwkJCQkJCSAgICAgInZlYm94LXNyY19jY3MuYmluIik7CisJCQl9CisJCX0KIAogCQlpZiAo ZHN0X2NvbXByZXNzaW9uID09IEk5MTVfQ09NUFJFU1NJT05fUkVOREVSKSB7CiAJCQlkYXRhLT5y ZW5kZXJfY29weShkYXRhLT5iYXRjaCwgTlVMTCwKQEAgLTc5MywxNCArNjAwLDE0IEBAIHN0YXRp YyB2b2lkIHRlc3QoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBzcmNfdGlsaW5nLCB1aW50MzJfdCBk c3RfdGlsaW5nLAogCQlpZiAoc3JjX2NvbXByZXNzZWQpIHsKIAkJCXNjcmF0Y2hfYnVmX3dyaXRl X3RvX3BuZyhkYXRhLCAmc3JjX2NjcywKIAkJCQkJCSAiY29tcHJlc3NlZC1zcmMucG5nIik7Ci0J CQlzY3JhdGNoX2J1Zl9hdXhfd3JpdGVfdG9fcG5nKGRhdGEsICZzcmNfY2NzLAotCQkJCQkJICAg ICAiY29tcHJlc3NlZC1zcmMtYXV4LnBuZyIpOworCQkJc2NyYXRjaF9idWZfY2NzX3dyaXRlX3Rv X3BuZyhkYXRhLCAmc3JjX2NjcywKKwkJCQkJCSAgICAgImNvbXByZXNzZWQtc3JjLWNjcy5wbmci KTsKIAkJfQogCQlpZiAoZHN0X2NvbXByZXNzZWQpIHsKIAkJCXNjcmF0Y2hfYnVmX3dyaXRlX3Rv X3BuZyhkYXRhLCAmZHN0X2NjcywKIAkJCQkJCSAiY29tcHJlc3NlZC1kc3QucG5nIik7Ci0JCQlz Y3JhdGNoX2J1Zl9hdXhfd3JpdGVfdG9fcG5nKGRhdGEsICZkc3RfY2NzLAotCQkJCQkJICAgICAi Y29tcHJlc3NlZC1kc3QtYXV4LnBuZyIpOworCQkJc2NyYXRjaF9idWZfY2NzX3dyaXRlX3RvX3Bu ZyhkYXRhLCAmZHN0X2NjcywKKwkJCQkJCSAgICAgImNvbXByZXNzZWQtZHN0LWNjcy5wbmciKTsK IAkJfQogCX0KIApAQCAtODE5LDkgKzYyNiw5IEBAIHN0YXRpYyB2b2lkIHRlc3QoZGF0YV90ICpk YXRhLCB1aW50MzJfdCBzcmNfdGlsaW5nLCB1aW50MzJfdCBkc3RfdGlsaW5nLAogCX0KIAogCWlm IChzcmNfY29tcHJlc3NlZCkKLQkJc2NyYXRjaF9idWZfYXV4X2NoZWNrKGRhdGEsICZzcmNfY2Nz KTsKKwkJc2NyYXRjaF9idWZfY2NzX2NoZWNrKGRhdGEsICZzcmNfY2NzKTsKIAlpZiAoZHN0X2Nv bXByZXNzZWQpCi0JCXNjcmF0Y2hfYnVmX2F1eF9jaGVjayhkYXRhLCAmZHN0X2Njcyk7CisJCXNj cmF0Y2hfYnVmX2Njc19jaGVjayhkYXRhLCAmZHN0X2Njcyk7CiAKIAlzY3JhdGNoX2J1Zl9maW5p KCZyZWYpOwogCWlmIChkc3RfY29tcHJlc3NlZCkKQEAgLTEwNTQsNiArODYxLDkgQEAgaWd0X21h aW5fYXJncygiZGEiLCBOVUxMLCBoZWxwX3N0ciwgb3B0X2hhbmRsZXIsIE5VTEwpCiAJCWRhdGEu YmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLmJ1Zm1nciwgZGF0YS5kZXZpZCk7 CiAJCWlndF9hc3NlcnQoZGF0YS5iYXRjaCk7CiAKKwkJZGF0YS5ibWdyID0gcmVuZGVyY29weV9i dWZtZ3JfY3JlYXRlKGRhdGEuZHJtX2ZkLCBkYXRhLmJ1Zm1ncik7CisJCWlndF9hc3NlcnQoZGF0 YS5ibWdyKTsKKwogCQlpZ3RfZm9ya19oYW5nX2RldGVjdG9yKGRhdGEuZHJtX2ZkKTsKIAl9CiAK QEAgLTExMDcsNSArOTE3LDYgQEAgaWd0X21haW5fYXJncygiZGEiLCBOVUxMLCBoZWxwX3N0ciwg b3B0X2hhbmRsZXIsIE5VTEwpCiAJCWlndF9zdG9wX2hhbmdfZGV0ZWN0b3IoKTsKIAkJaW50ZWxf YmF0Y2hidWZmZXJfZnJlZShkYXRhLmJhdGNoKTsKIAkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95 KGRhdGEuYnVmbWdyKTsKKwkJcmVuZGVyY29weV9idWZtZ3JfZGVzdHJveShkYXRhLmJtZ3IpOwog CX0KIH0KLS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2 Cg==