From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 10/28] vmwgfx: Major KMS refactoring / cleanup in preparation of screen targets Date: Wed, 12 Aug 2015 22:42:59 -0700 Message-ID: <1439444597-4664-11-git-send-email-thellstrom@vmware.com> References: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx6.bahnhof.se (mx6.bahnhof.se [213.80.101.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E6DE6EBF1 for ; Wed, 12 Aug 2015 23:03:46 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx6-reinject (Postfix) with ESMTP id 37BA54417C for ; Thu, 13 Aug 2015 08:03:45 +0200 (CEST) Received: from mf3.bahnhof.se ([127.0.0.1]) by localhost (mf3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HfDt6Nfy1amn for ; Thu, 13 Aug 2015 08:03:36 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf3.bahnhof.se (Postfix) with ESMTP id 5EB0A3E8D27 for ; Thu, 13 Aug 2015 08:03:05 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 548F03F4002 for ; Thu, 13 Aug 2015 07:43:24 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 127D23DC008 for ; Thu, 13 Aug 2015 07:43:24 +0200 (CEST) In-Reply-To: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+CgpTaWduZWQtb2ZmLWJ5OiBTaW5j bGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJv bSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2Rydi5oICAgICB8ICAyMiArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlm by5jICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyAgICAg fCA1NjIgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ttcy5oICAgICB8ICA4MCArKystLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfbGR1LmMgICAgIHwgIDQ1ICsrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfb3ZlcmxheS5jIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3Ju LmMgICAgfCA0MjQgKysrKysrKysrKysrKysrKysrKysrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDU5 NyBpbnNlcnRpb25zKCspLCA1NDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaAppbmRleCBjMzAwYTBhLi5iNjVlYjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHly aWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQ29weXJp Z2h0IMKpIDIwMDktMjAxNCBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKICAqIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKQEAgLTMzMCw2ICszMzAs MTcgQEAgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSB7CiAJc3RydWN0IHZtd19jdHhfYmlu ZGluZyBzaGFkZXJzW1NWR0EzRF9TSEFERVJUWVBFX01BWF07CiB9OwogCisKKy8qCisgKiBlbnVt IHZtd19kaXNwbGF5X3VuaXRfdHlwZSAtIERlc2NyaWJlcyB0aGUgZGlzcGxheSB1bml0CisgKi8K K2VudW0gdm13X2Rpc3BsYXlfdW5pdF90eXBlIHsKKwl2bXdfZHVfaW52YWxpZCA9IDAsCisJdm13 X2R1X2xlZ2FjeSwKKwl2bXdfZHVfc2NyZWVuX29iamVjdAorfTsKKworCiBzdHJ1Y3Qgdm13X3N3 X2NvbnRleHR7CiAJc3RydWN0IGRybV9vcGVuX2hhc2ggcmVzX2h0OwogCWJvb2wgcmVzX2h0X2lu aXRpYWxpemVkOwpAQCAtNDIxLDYgKzQzMiw3IEBAIHN0cnVjdCB2bXdfcHJpdmF0ZSB7CiAJICov CiAKIAl2b2lkICpmYl9pbmZvOworCWVudW0gdm13X2Rpc3BsYXlfdW5pdF90eXBlIGFjdGl2ZV9k aXNwbGF5X3VuaXQ7CiAJc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheSAqbGR1X3ByaXY7CiAJc3Ry dWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKnNvdV9wcml2OwogCXN0cnVjdCB2bXdfb3Zl cmxheSAqb3ZlcmxheV9wcml2OwpAQCAtODQ0LDggKzg1Niw4IEBAIGV4dGVybiB2b2lkIHZtd19l eGVjYnVmX2NvcHlfZmVuY2VfdXNlcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCiBl eHRlcm4gaXJxcmV0dXJuX3Qgdm13X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZyk7CiBl eHRlcm4gaW50IHZtd193YWl0X3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIGJv b2wgbGF6eSwKLQkJCSAgICAgdWludDMyX3Qgc2Vxbm8sIGJvb2wgaW50ZXJydXB0aWJsZSwKLQkJ CSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKwkJCSAgdWludDMyX3Qgc2Vxbm8sIGJvb2wg aW50ZXJydXB0aWJsZSwKKwkJCSAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKIGV4dGVybiB2b2lk IHZtd19pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQg dm13X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lk IHZtd19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtODc2LDkgKzg4 OCw5IEBAIGV4dGVybiB2b2lkIHZtd19nZW5lcmljX3dhaXRlcl9yZW1vdmUoc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwKIGV4dGVybiB2b2lkIHZtd19tYXJrZXJfcXVldWVfaW5pdChzdHJ1 Y3Qgdm13X21hcmtlcl9xdWV1ZSAqcXVldWUpOwogZXh0ZXJuIHZvaWQgdm13X21hcmtlcl9xdWV1 ZV90YWtlZG93bihzdHJ1Y3Qgdm13X21hcmtlcl9xdWV1ZSAqcXVldWUpOwogZXh0ZXJuIGludCB2 bXdfbWFya2VyX3B1c2goc3RydWN0IHZtd19tYXJrZXJfcXVldWUgKnF1ZXVlLAotCQkJICB1aW50 MzJfdCBzZXFubyk7CisJCQkgICB1aW50MzJfdCBzZXFubyk7CiBleHRlcm4gaW50IHZtd19tYXJr ZXJfcHVsbChzdHJ1Y3Qgdm13X21hcmtlcl9xdWV1ZSAqcXVldWUsCi0JCQkgIHVpbnQzMl90IHNp Z25hbGVkX3NlcW5vKTsKKwkJCSAgIHVpbnQzMl90IHNpZ25hbGVkX3NlcW5vKTsKIGV4dGVybiBp bnQgdm13X3dhaXRfbGFnKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQlzdHJ1Y3Qg dm13X21hcmtlcl9xdWV1ZSAqcXVldWUsIHVpbnQzMl90IHVzKTsKIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZmlmby5jCmluZGV4IDE4OTEwMmQuLjIzOTgxNWMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9maWZvLmMKQEAgLTcxLDggKzcxLDggQEAgYm9vbCB2bXdfZmlmb19oYXZlXzNk KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYgKGh3dmVyc2lvbiA8IFNWR0EzRF9I V1ZFUlNJT05fV1M4X0IxKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBOb24tU2NyZWVuIE9iamVj dCBwYXRoIGRvZXMgbm90IHN1cHBvcnQgc3VyZmFjZXMgKi8KLQlpZiAoIWRldl9wcml2LT5zb3Vf cHJpdikKKwkvKiBMZWdhY3kgRGlzcGxheSBVbml0IGRvZXMgbm90IHN1cHBvcnQgc3VyZmFjZXMg Ki8KKwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X2xlZ2FjeSkK IAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2ttcy5jCmluZGV4IGI1NjMyYzIuLmNhYzE3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2ttcy5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJp Z2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBDb3B5cmln aHQgwqkgMjAwOS0yMDE0IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQogICogQWxs IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQpAQCAtMzIsMTUgKzMyLDEy IEBACiAjZGVmaW5lIFZNV0dGWF9QUkVTRU5UX1JBVEUgKChIWiAvIDYwID4gMCkgPyBIWiAvIDYw IDogMSkKIAogCi1zdHJ1Y3Qgdm13X2NsaXBfcmVjdCB7Ci0JaW50IHgxLCB4MiwgeTEsIHkyOwot fTsKIAogLyoqCiAgKiBDbGlwIEBudW1fcmVjdHMgbnVtYmVyIG9mIEByZWN0cyBhZ2FpbnN0IEBj bGlwIHN0b3JpbmcgdGhlCiAgKiByZXN1bHRzIGluIEBvdXRfcmVjdHMgYW5kIHRoZSBudW1iZXIg b2YgcGFzc2VkIHJlY3RzIGluIEBvdXRfbnVtLgogICovCi1zdGF0aWMgdm9pZCB2bXdfY2xpcF9j bGlwcmVjdHMoc3RydWN0IGRybV9jbGlwX3JlY3QgKnJlY3RzLAordm9pZCB2bXdfY2xpcF9jbGlw cmVjdHMoc3RydWN0IGRybV9jbGlwX3JlY3QgKnJlY3RzLAogCQkJaW50IG51bV9yZWN0cywKIAkJ CXN0cnVjdCB2bXdfY2xpcF9yZWN0IGNsaXAsCiAJCQlTVkdBU2lnbmVkUmVjdCAqb3V0X3JlY3Rz LApAQCAtNjksNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB2bXdfY2xpcF9jbGlwcmVjdHMoc3RydWN0 IGRybV9jbGlwX3JlY3QgKnJlY3RzLAogCSpvdXRfbnVtID0gazsKIH0KIAotdm9pZCB2bXdfZGlz cGxheV91bml0X2NsZWFudXAoc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1KQordm9pZCB2bXdf ZHVfY2xlYW51cChzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqZHUpCiB7CiAJaWYgKGR1LT5jdXJz b3Jfc3VyZmFjZSkKIAkJdm13X3N1cmZhY2VfdW5yZWZlcmVuY2UoJmR1LT5jdXJzb3Jfc3VyZmFj ZSk7CkBAIC0zNjcsMTUgKzM2NCw2IEBAIHZvaWQgdm13X2ttc19jdXJzb3Jfc25vb3Aoc3RydWN0 IHZtd19zdXJmYWNlICpzcmYsCiAKIAlzcmYtPnNub29wZXIuYWdlKys7CiAKLQkvKiB3ZSBjYW4n dCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGlzIGZ1bmN0aW9uIHNpbmNlIGV4ZWNidWYgaGFz Ci0JICogcmVzZXJ2ZWQgZmlmbyBzcGFjZS4KLQkgKgotCSAqIGlmIChzcmYtPnNub29wZXIuY3J0 YykKLQkgKgl2bXdfbGR1X2NydGNfY3Vyc29yX3VwZGF0ZV9pbWFnZShkZXZfcHJpdiwKLQkgKgkJ CQkJIHNyZi0+c25vb3Blci5pbWFnZSwgNjQsIDY0LAotCSAqCQkJCQkgZHUtPmhvdHNwb3RfeCwg ZHUtPmhvdHNwb3RfeSk7Ci0JICovCi0KIAl0dG1fYm9fa3VubWFwKCZtYXApOwogZXJyX3VucmVz ZXJ2ZToKIAl0dG1fYm9fdW5yZXNlcnZlKGJvKTsKQEAgLTQxMiwxNyArNDAwLDYgQEAgdm9pZCB2 bXdfa21zX2N1cnNvcl9wb3N0X2V4ZWNidWYoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikK ICAqIFN1cmZhY2UgZnJhbWVidWZmZXIgY29kZQogICovCiAKLSNkZWZpbmUgdm13X2ZyYW1lYnVm ZmVyX3RvX3ZmYnMoeCkgXAotCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVy X3N1cmZhY2UsIGJhc2UuYmFzZSkKLQotc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlIHsK LQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIGJhc2U7Ci0Jc3RydWN0IHZtd19zdXJmYWNlICpzdXJm YWNlOwotCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqYnVmZmVyOwotCXN0cnVjdCBsaXN0X2hlYWQg aGVhZDsKLQlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOwotfTsKLQogc3RhdGljIHZvaWQgdm13 X2ZyYW1lYnVmZmVyX3N1cmZhY2VfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFt ZWJ1ZmZlcikKIHsKIAlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2UgKnZmYnMgPQpAQCAt NDQyLDE1MyArNDE5LDYgQEAgc3RhdGljIHZvaWQgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2VfZGVz dHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKIAlrZnJlZSh2ZmJzKTsK IH0KIAotc3RhdGljIGludCBkb19zdXJmYWNlX2RpcnR5X3NvdShzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAotCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCXN0cnVjdCB2 bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAotCQkJCXVuc2lnbmVkIGZsYWdzLCB1bnNpZ25l ZCBjb2xvciwKLQkJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCi0JCQkJdW5zaWduZWQg bnVtX2NsaXBzLCBpbnQgaW5jLAotCQkJCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICoqb3V0X2ZlbmNl KQotewotCXN0cnVjdCB2bXdfZGlzcGxheV91bml0ICp1bml0c1tWTVdHRlhfTlVNX0RJU1BMQVlf VU5JVFNdOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwc19wdHI7Ci0Jc3RydWN0IGRybV9j bGlwX3JlY3QgKnRtcDsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc2l6ZV90IGZpZm9fc2l6 ZTsKLQlpbnQgaSwgbnVtX3VuaXRzOwotCWludCByZXQgPSAwOyAvKiBzaWxlbmNlIHdhcm5pbmcg Ki8KLQlpbnQgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tOwotCi0Jc3RydWN0IHsKLQkJU1ZHQTNk Q21kSGVhZGVyIGhlYWRlcjsKLQkJU1ZHQTNkQ21kQmxpdFN1cmZhY2VUb1NjcmVlbiBib2R5Owot CX0gKmNtZDsKLQlTVkdBU2lnbmVkUmVjdCAqYmxpdHM7Ci0KLQludW1fdW5pdHMgPSAwOwotCWxp c3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldl9wcml2LT5kZXYtPm1vZGVfY29uZmlnLmNydGNf bGlzdCwKLQkJCSAgICBoZWFkKSB7Ci0JCWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmZnJhbWVi dWZmZXItPmJhc2UpCi0JCQljb250aW51ZTsKLQkJdW5pdHNbbnVtX3VuaXRzKytdID0gdm13X2Ny dGNfdG9fZHUoY3J0Yyk7Ci0JfQotCi0JQlVHX09OKCFjbGlwcyB8fCAhbnVtX2NsaXBzKTsKLQot CXRtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXApICogbnVtX2NsaXBzLCBHRlBfS0VSTkVMKTsKLQlp ZiAodW5saWtlbHkodG1wID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiVGVtcG9yYXJ5IGNsaXBy ZWN0IG1lbW9yeSBhbGxvYyBmYWlsZWQuXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0J Zmlmb19zaXplID0gc2l6ZW9mKCpjbWQpICsgc2l6ZW9mKFNWR0FTaWduZWRSZWN0KSAqIG51bV9j bGlwczsKLQljbWQgPSBremFsbG9jKGZpZm9fc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlr ZWx5KGNtZCA9PSBOVUxMKSkgewotCQlEUk1fRVJST1IoIlRlbXBvcmFyeSBmaWZvIG1lbW9yeSBh bGxvYyBmYWlsZWQuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV90bXA7 Ci0JfQotCi0JLyogc2V0dXAgYmxpdHMgcG9pbnRlciAqLwotCWJsaXRzID0gKFNWR0FTaWduZWRS ZWN0ICopJmNtZFsxXTsKLQotCS8qIGluaXRpYWwgY2xpcCByZWdpb24gKi8KLQlsZWZ0ID0gY2xp cHMtPngxOwotCXJpZ2h0ID0gY2xpcHMtPngyOwotCXRvcCA9IGNsaXBzLT55MTsKLQlib3R0b20g PSBjbGlwcy0+eTI7Ci0KLQkvKiBza2lwIHRoZSBmaXJzdCBjbGlwIHJlY3QgKi8KLQlmb3IgKGkg PSAxLCBjbGlwc19wdHIgPSBjbGlwcyArIGluYzsKLQkgICAgIGkgPCBudW1fY2xpcHM7IGkrKywg Y2xpcHNfcHRyICs9IGluYykgewotCQlsZWZ0ID0gbWluX3QoaW50LCBsZWZ0LCAoaW50KWNsaXBz X3B0ci0+eDEpOwotCQlyaWdodCA9IG1heF90KGludCwgcmlnaHQsIChpbnQpY2xpcHNfcHRyLT54 Mik7Ci0JCXRvcCA9IG1pbl90KGludCwgdG9wLCAoaW50KWNsaXBzX3B0ci0+eTEpOwotCQlib3R0 b20gPSBtYXhfdChpbnQsIGJvdHRvbSwgKGludCljbGlwc19wdHItPnkyKTsKLQl9Ci0KLQkvKiBv bmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlICovCi0JY21kLT5oZWFkZXIuaWQgPSBjcHVfdG9fbGUz MihTVkdBXzNEX0NNRF9CTElUX1NVUkZBQ0VfVE9fU0NSRUVOKTsKLQljbWQtPmhlYWRlci5zaXpl ID0gY3B1X3RvX2xlMzIoZmlmb19zaXplIC0gc2l6ZW9mKGNtZC0+aGVhZGVyKSk7Ci0KLQljbWQt PmJvZHkuc3JjUmVjdC5sZWZ0ID0gbGVmdDsKLQljbWQtPmJvZHkuc3JjUmVjdC5yaWdodCA9IHJp Z2h0OwotCWNtZC0+Ym9keS5zcmNSZWN0LnRvcCA9IHRvcDsKLQljbWQtPmJvZHkuc3JjUmVjdC5i b3R0b20gPSBib3R0b207Ci0KLQljbGlwc19wdHIgPSBjbGlwczsKLQlmb3IgKGkgPSAwOyBpIDwg bnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0ciArPSBpbmMpIHsKLQkJdG1wW2ldLngxID0gY2xpcHNf cHRyLT54MSAtIGxlZnQ7Ci0JCXRtcFtpXS54MiA9IGNsaXBzX3B0ci0+eDIgLSBsZWZ0OwotCQl0 bXBbaV0ueTEgPSBjbGlwc19wdHItPnkxIC0gdG9wOwotCQl0bXBbaV0ueTIgPSBjbGlwc19wdHIt PnkyIC0gdG9wOwotCX0KLQotCS8qIGRvIHBlciB1bml0IHdyaXRpbmcsIHJldXNlIGZpZm8gZm9y IGVhY2ggKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3VuaXRzOyBpKyspIHsKLQkJc3RydWN0IHZt d19kaXNwbGF5X3VuaXQgKnVuaXQgPSB1bml0c1tpXTsKLQkJc3RydWN0IHZtd19jbGlwX3JlY3Qg Y2xpcDsKLQkJaW50IG51bTsKLQotCQljbGlwLngxID0gbGVmdCAtIHVuaXQtPmNydGMueDsKLQkJ Y2xpcC55MSA9IHRvcCAtIHVuaXQtPmNydGMueTsKLQkJY2xpcC54MiA9IHJpZ2h0IC0gdW5pdC0+ Y3J0Yy54OwotCQljbGlwLnkyID0gYm90dG9tIC0gdW5pdC0+Y3J0Yy55OwotCi0JCS8qIHNraXAg YW55IGNydGNzIHRoYXQgbWlzc2VzIHRoZSBjbGlwIHJlZ2lvbiAqLwotCQlpZiAoY2xpcC54MSA+ PSB1bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkgfHwKLQkJICAgIGNsaXAueTEgPj0gdW5pdC0+Y3J0 Yy5tb2RlLnZkaXNwbGF5IHx8Ci0JCSAgICBjbGlwLngyIDw9IDAgfHwgY2xpcC55MiA8PSAwKQot CQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSW4gb3JkZXIgZm9yIHRoZSBjbGlwIHJlY3RzIHRv IGJlIGNvcnJlY3RseSBzY2FsZWQKLQkJICogdGhlIHNyYyBhbmQgZGVzdCByZWN0cyBuZWVkcyB0 byBiZSB0aGUgc2FtZSBzaXplLgotCQkgKi8KLQkJY21kLT5ib2R5LmRlc3RSZWN0LmxlZnQgPSBj bGlwLngxOwotCQljbWQtPmJvZHkuZGVzdFJlY3QucmlnaHQgPSBjbGlwLngyOwotCQljbWQtPmJv ZHkuZGVzdFJlY3QudG9wID0gY2xpcC55MTsKLQkJY21kLT5ib2R5LmRlc3RSZWN0LmJvdHRvbSA9 IGNsaXAueTI7Ci0KLQkJLyogY3JlYXRlIGEgY2xpcCByZWN0IG9mIHRoZSBjcnRjIGluIGRlc3Qg Y29vcmRzICovCi0JCWNsaXAueDIgPSB1bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkgLSBjbGlwLngx OwotCQljbGlwLnkyID0gdW5pdC0+Y3J0Yy5tb2RlLnZkaXNwbGF5IC0gY2xpcC55MTsKLQkJY2xp cC54MSA9IDAgLSBjbGlwLngxOwotCQljbGlwLnkxID0gMCAtIGNsaXAueTE7Ci0KLQkJLyogbmVl ZCB0byByZXNldCBzaWQgYXMgaXQgaXMgY2hhbmdlZCBieSBleGVjYnVmICovCi0JCWNtZC0+Ym9k eS5zcmNJbWFnZS5zaWQgPSBjcHVfdG9fbGUzMihmcmFtZWJ1ZmZlci0+dXNlcl9oYW5kbGUpOwot CQljbWQtPmJvZHkuZGVzdFNjcmVlbklkID0gdW5pdC0+dW5pdDsKLQotCQkvKiBjbGlwIGFuZCB3 cml0ZSBibGl0cyB0byBjbWQgc3RyZWFtICovCi0JCXZtd19jbGlwX2NsaXByZWN0cyh0bXAsIG51 bV9jbGlwcywgY2xpcCwgYmxpdHMsICZudW0pOwotCi0JCS8qIGlmIG5vIGNsaXByZWN0cyBoaXQg c2tpcCB0aGlzICovCi0JCWlmIChudW0gPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIG9ubHkg cmV0dXJuIHRoZSBsYXN0IGZlbmNlICovCi0JCWlmIChvdXRfZmVuY2UgJiYgKm91dF9mZW5jZSkK LQkJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVuY2Uob3V0X2ZlbmNlKTsKLQotCQkvKiByZWNhbGN1 bGF0ZSBwYWNrYWdlIGxlbmd0aCAqLwotCQlmaWZvX3NpemUgPSBzaXplb2YoKmNtZCkgKyBzaXpl b2YoU1ZHQVNpZ25lZFJlY3QpICogbnVtOwotCQljbWQtPmhlYWRlci5zaXplID0gY3B1X3RvX2xl MzIoZmlmb19zaXplIC0gc2l6ZW9mKGNtZC0+aGVhZGVyKSk7Ci0JCXJldCA9IHZtd19leGVjYnVm X3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVMTCwgY21kLAotCQkJCQkgIGZpZm9fc2l6 ZSwgMCwgTlVMTCwgb3V0X2ZlbmNlKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJ YnJlYWs7Ci0JfQotCi0KLQlrZnJlZShjbWQpOwotb3V0X2ZyZWVfdG1wOgotCWtmcmVlKHRtcCk7 Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNl X2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQkJCSAgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkJICB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29s b3IsCkBAIC02MDQsOCArNDM0LDggQEAgc3RhdGljIGludCB2bXdfZnJhbWVidWZmZXJfc3VyZmFj ZV9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKIAlpZiAodW5saWtl bHkodmZicy0+bWFzdGVyICE9IGZpbGVfcHJpdi0+bWFzdGVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7 CiAKLQkvKiBSZXF1aXJlIFNjcmVlbk9iamVjdCBzdXBwb3J0IGZvciAzRCAqLwotCWlmICghZGV2 X3ByaXYtPnNvdV9wcml2KQorCS8qIExlZ2FjeSBEaXNwbGF5IFVuaXQgZG9lcyBub3Qgc3VwcG9y dCAzRCAqLworCWlmIChkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9PSB2bXdfZHVfbGVn YWN5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldl9wcml2 LT5kZXYpOwpAQCAtNjI3LDkgKzQ1NywxMiBAQCBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9z dXJmYWNlX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQlpbmMg PSAyOyAvKiBza2lwIHNvdXJjZSByZWN0cyAqLwogCX0KIAotCXJldCA9IGRvX3N1cmZhY2VfZGly dHlfc291KGRldl9wcml2LCBmaWxlX3ByaXYsICZ2ZmJzLT5iYXNlLAotCQkJCSAgIGZsYWdzLCBj b2xvciwKLQkJCQkgICBjbGlwcywgbnVtX2NsaXBzLCBpbmMsIE5VTEwpOworCWlmIChkZXZfcHJp di0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9PSB2bXdfZHVfc2NyZWVuX29iamVjdCkKKwkJcmV0ID0g dm13X2ttc19zb3VfZG9fc3VyZmFjZV9kaXJ0eShkZXZfcHJpdiwgZmlsZV9wcml2LAorCQkJCQkJ ICAgJnZmYnMtPmJhc2UsCisJCQkJCQkgICBmbGFncywgY29sb3IsCisJCQkJCQkgICBjbGlwcywg bnVtX2NsaXBzLAorCQkJCQkJICAgaW5jLCBOVUxMKTsKIAogCXZtd19maWZvX2ZsdXNoKGRldl9w cml2LCBmYWxzZSk7CiAJdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2Vt KTsKQEAgLTY1OCw4ICs0OTEsOCBAQCBzdGF0aWMgaW50IHZtd19rbXNfbmV3X2ZyYW1lYnVmZmVy X3N1cmZhY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAlzdHJ1Y3Qgdm13X21hc3Rl ciAqdm1hc3RlciA9IHZtd19tYXN0ZXIoZmlsZV9wcml2LT5tYXN0ZXIpOwogCWludCByZXQ7CiAK LQkvKiAzRCBpcyBvbmx5IHN1cHBvcnRlZCBvbiBIV3Y4IGhvc3RzIHdoaWNoIHN1cHBvcnRzIHNj cmVlbiBvYmplY3RzICovCi0JaWYgKCFkZXZfcHJpdi0+c291X3ByaXYpCisJLyogM0QgaXMgb25s eSBzdXBwb3J0ZWQgb24gSFd2OCBhbmQgbmV3ZXIgaG9zdHMgKi8KKwlpZiAoZGV2X3ByaXYtPmFj dGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X2xlZ2FjeSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAK IAkvKgpAQCAtNjkzLDkgKzUyNiw2IEBAIHN0YXRpYyBpbnQgdm13X2ttc19uZXdfZnJhbWVidWZm ZXJfc3VyZmFjZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCWNhc2UgMTU6CiAJCWZv cm1hdCA9IFNWR0EzRF9BMVI1RzVCNTsKIAkJYnJlYWs7Ci0JY2FzZSA4OgotCQlmb3JtYXQgPSBT VkdBM0RfTFVNSU5BTkNFODsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJJbnZh bGlkIGNvbG9yIGRlcHRoOiAlZFxuIiwgbW9kZV9jbWQtPmRlcHRoKTsKIAkJcmV0dXJuIC1FSU5W QUw7CkBAIC03NTMsMTQgKzU4Myw2IEBAIG91dF9lcnIxOgogICogRG1hYnVmIGZyYW1lYnVmZmVy IGNvZGUKICAqLwogCi0jZGVmaW5lIHZtd19mcmFtZWJ1ZmZlcl90b192ZmJkKHgpIFwKLQljb250 YWluZXJfb2YoeCwgc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWYsIGJhc2UuYmFzZSkKLQot c3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWYgewotCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIg YmFzZTsKLQlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZmZlcjsKLX07Ci0KIHN0YXRpYyB2b2lk IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm cmFtZWJ1ZmZlcikKIHsKIAlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1ZiAqdmZiZCA9CkBA IC03NzMsMTgwICs1OTUsNiBAQCBzdGF0aWMgdm9pZCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2Rl c3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCiAJa2ZyZWUodmZiZCk7 CiB9CiAKLXN0YXRpYyBpbnQgZG9fZG1hYnVmX2RpcnR5X2xkdShzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAotCQkJICAgICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy LAotCQkJICAgICAgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKLQkJCSAgICAgICBz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCi0JCQkgICAgICAgdW5zaWduZWQgbnVtX2NsaXBz LCBpbnQgaW5jcmVtZW50KQotewotCXNpemVfdCBmaWZvX3NpemU7Ci0JaW50IGk7Ci0KLQlzdHJ1 Y3QgewotCQl1aW50MzJfdCBoZWFkZXI7Ci0JCVNWR0FGaWZvQ21kVXBkYXRlIGJvZHk7Ci0JfSAq Y21kOwotCi0JZmlmb19zaXplID0gc2l6ZW9mKCpjbWQpICogbnVtX2NsaXBzOwotCWNtZCA9IHZt d19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIGZpZm9fc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KGNtZCA9 PSBOVUxMKSkgewotCQlEUk1fRVJST1IoIkZpZm8gcmVzZXJ2ZSBmYWlsZWQuXG4iKTsKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNtZCwgMCwgZmlmb19zaXplKTsKLQlmb3IgKGkg PSAwOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzICs9IGluY3JlbWVudCkgewotCQljbWRbaV0u aGVhZGVyID0gY3B1X3RvX2xlMzIoU1ZHQV9DTURfVVBEQVRFKTsKLQkJY21kW2ldLmJvZHkueCA9 IGNwdV90b19sZTMyKGNsaXBzLT54MSk7Ci0JCWNtZFtpXS5ib2R5LnkgPSBjcHVfdG9fbGUzMihj bGlwcy0+eTEpOwotCQljbWRbaV0uYm9keS53aWR0aCA9IGNwdV90b19sZTMyKGNsaXBzLT54MiAt IGNsaXBzLT54MSk7Ci0JCWNtZFtpXS5ib2R5LmhlaWdodCA9IGNwdV90b19sZTMyKGNsaXBzLT55 MiAtIGNsaXBzLT55MSk7Ci0JfQotCi0Jdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBmaWZvX3Np emUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRvX2RtYWJ1Zl9kZWZpbmVfZ21yZmIo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJICBzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAotCQkJCSAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCi17Ci0J aW50IGRlcHRoID0gZnJhbWVidWZmZXItPmJhc2UuZGVwdGg7Ci0Jc2l6ZV90IGZpZm9fc2l6ZTsK LQlpbnQgcmV0OwotCi0Jc3RydWN0IHsKLQkJdWludDMyX3QgaGVhZGVyOwotCQlTVkdBRmlmb0Nt ZERlZmluZUdNUkZCIGJvZHk7Ci0JfSAqY21kOwotCi0JLyogRW11bGF0ZSBSR0JBIHN1cHBvcnQs IGNvbnRyYXJ5IHRvIHN2Z2FfcmVnLmggdGhpcyBpcyBub3QKLQkgKiBzdXBwb3J0ZWQgYnkgaG9z dHMuIFRoaXMgaXMgb25seSBhIHByb2JsZW0gaWYgd2UgYXJlIHJlYWRpbmcKLQkgKiB0aGlzIHZh bHVlIGxhdGVyIGFuZCBleHBlY3Rpbmcgd2hhdCB3ZSB1cGxvYWRlZCBiYWNrLgotCSAqLwotCWlm IChkZXB0aCA9PSAzMikKLQkJZGVwdGggPSAyNDsKLQotCWZpZm9fc2l6ZSA9IHNpemVvZigqY21k KTsKLQljbWQgPSBrbWFsbG9jKGZpZm9fc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5 KGNtZCA9PSBOVUxMKSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSB0ZW1wb3Jh cnkgY21kIGJ1ZmZlci5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY21k LCAwLCBmaWZvX3NpemUpOwotCWNtZC0+aGVhZGVyID0gU1ZHQV9DTURfREVGSU5FX0dNUkZCOwot CWNtZC0+Ym9keS5mb3JtYXQuYml0c1BlclBpeGVsID0gZnJhbWVidWZmZXItPmJhc2UuYml0c19w ZXJfcGl4ZWw7Ci0JY21kLT5ib2R5LmZvcm1hdC5jb2xvckRlcHRoID0gZGVwdGg7Ci0JY21kLT5i b2R5LmZvcm1hdC5yZXNlcnZlZCA9IDA7Ci0JY21kLT5ib2R5LmJ5dGVzUGVyTGluZSA9IGZyYW1l YnVmZmVyLT5iYXNlLnBpdGNoZXNbMF07Ci0JY21kLT5ib2R5LnB0ci5nbXJJZCA9IGZyYW1lYnVm ZmVyLT51c2VyX2hhbmRsZTsKLQljbWQtPmJvZHkucHRyLm9mZnNldCA9IDA7Ci0KLQlyZXQgPSB2 bXdfZXhlY2J1Zl9wcm9jZXNzKGZpbGVfcHJpdiwgZGV2X3ByaXYsIE5VTEwsIGNtZCwKLQkJCQkg IGZpZm9fc2l6ZSwgMCwgTlVMTCwgTlVMTCk7Ci0KLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJl dDsKLX0KLQotc3RhdGljIGludCBkb19kbWFidWZfZGlydHlfc291KHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LAotCQkJICAgICAgIHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkg ICAgICAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCi0JCQkgICAgICAgdW5z aWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAotCQkJICAgICAgIHN0cnVjdCBkcm1fY2xpcF9y ZWN0ICpjbGlwcywKLQkJCSAgICAgICB1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQs Ci0JCQkgICAgICAgc3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRfZmVuY2UpCi17Ci0Jc3RydWN0 IHZtd19kaXNwbGF5X3VuaXQgKnVuaXRzW1ZNV0dGWF9OVU1fRElTUExBWV9VTklUU107Ci0Jc3Ry dWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzX3B0cjsKLQlpbnQgaSwgaywgbnVtX3VuaXRzLCByZXQ7 Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXNpemVfdCBmaWZvX3NpemU7Ci0KLQlzdHJ1Y3Qg ewotCQl1aW50MzJfdCBoZWFkZXI7Ci0JCVNWR0FGaWZvQ21kQmxpdEdNUkZCVG9TY3JlZW4gYm9k eTsKLQl9ICpibGl0czsKLQotCXJldCA9IGRvX2RtYWJ1Zl9kZWZpbmVfZ21yZmIoZmlsZV9wcml2 LCBkZXZfcHJpdiwgZnJhbWVidWZmZXIpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCXJl dHVybiByZXQ7IC8qIGRlZmluZV9nbXJmYiBwcmludHMgd2FybmluZ3MgKi8KLQotCWZpZm9fc2l6 ZSA9IHNpemVvZigqYmxpdHMpICogbnVtX2NsaXBzOwotCWJsaXRzID0ga21hbGxvYyhmaWZvX3Np emUsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseShibGl0cyA9PSBOVUxMKSkgewotCQlEUk1f RVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSB0ZW1wb3JhcnkgY21kIGJ1ZmZlci5cbiIpOwotCQly ZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQludW1fdW5pdHMgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50 cnkoY3J0YywgJmRldl9wcml2LT5kZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewot CQlpZiAoY3J0Yy0+cHJpbWFyeS0+ZmIgIT0gJmZyYW1lYnVmZmVyLT5iYXNlKQotCQkJY29udGlu dWU7Ci0JCXVuaXRzW251bV91bml0cysrXSA9IHZtd19jcnRjX3RvX2R1KGNydGMpOwotCX0KLQot CWZvciAoayA9IDA7IGsgPCBudW1fdW5pdHM7IGsrKykgewotCQlzdHJ1Y3Qgdm13X2Rpc3BsYXlf dW5pdCAqdW5pdCA9IHVuaXRzW2tdOwotCQlpbnQgaGl0X251bSA9IDA7Ci0KLQkJY2xpcHNfcHRy ID0gY2xpcHM7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7IGkrKywgY2xpcHNfcHRyICs9 IGluY3JlbWVudCkgewotCQkJaW50IGNsaXBfeDEgPSBjbGlwc19wdHItPngxIC0gdW5pdC0+Y3J0 Yy54OwotCQkJaW50IGNsaXBfeTEgPSBjbGlwc19wdHItPnkxIC0gdW5pdC0+Y3J0Yy55OwotCQkJ aW50IGNsaXBfeDIgPSBjbGlwc19wdHItPngyIC0gdW5pdC0+Y3J0Yy54OwotCQkJaW50IGNsaXBf eTIgPSBjbGlwc19wdHItPnkyIC0gdW5pdC0+Y3J0Yy55OwotCQkJaW50IG1vdmVfeCwgbW92ZV95 OwotCi0JCQkvKiBza2lwIGFueSBjcnRjcyB0aGF0IG1pc3NlcyB0aGUgY2xpcCByZWdpb24gKi8K LQkJCWlmIChjbGlwX3gxID49IHVuaXQtPmNydGMubW9kZS5oZGlzcGxheSB8fAotCQkJICAgIGNs aXBfeTEgPj0gdW5pdC0+Y3J0Yy5tb2RlLnZkaXNwbGF5IHx8Ci0JCQkgICAgY2xpcF94MiA8PSAw IHx8IGNsaXBfeTIgPD0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogY2xpcCBzaXplIHRvIGNy dGMgc2l6ZSAqLwotCQkJY2xpcF94MiA9IG1pbl90KGludCwgY2xpcF94MiwgdW5pdC0+Y3J0Yy5t b2RlLmhkaXNwbGF5KTsKLQkJCWNsaXBfeTIgPSBtaW5fdChpbnQsIGNsaXBfeTIsIHVuaXQtPmNy dGMubW9kZS52ZGlzcGxheSk7Ci0KLQkJCS8qIHRyYW5zbGF0ZSBib3RoIHNyYyBhbmQgZGVzdCB0 byBicmluZyBjbGlwIGludG8gc2NyZWVuICovCi0JCQltb3ZlX3ggPSBtaW5fdChpbnQsIGNsaXBf eDEsIDApOwotCQkJbW92ZV95ID0gbWluX3QoaW50LCBjbGlwX3kxLCAwKTsKLQotCQkJLyogYWN0 dWFsIHRyYW5zbGF0ZSBkb25lIGhlcmUgKi8KLQkJCWJsaXRzW2hpdF9udW1dLmhlYWRlciA9IFNW R0FfQ01EX0JMSVRfR01SRkJfVE9fU0NSRUVOOwotCQkJYmxpdHNbaGl0X251bV0uYm9keS5kZXN0 U2NyZWVuSWQgPSB1bml0LT51bml0OwotCQkJYmxpdHNbaGl0X251bV0uYm9keS5zcmNPcmlnaW4u eCA9IGNsaXBzX3B0ci0+eDEgLSBtb3ZlX3g7Ci0JCQlibGl0c1toaXRfbnVtXS5ib2R5LnNyY09y aWdpbi55ID0gY2xpcHNfcHRyLT55MSAtIG1vdmVfeTsKLQkJCWJsaXRzW2hpdF9udW1dLmJvZHku ZGVzdFJlY3QubGVmdCA9IGNsaXBfeDEgLSBtb3ZlX3g7Ci0JCQlibGl0c1toaXRfbnVtXS5ib2R5 LmRlc3RSZWN0LnRvcCA9IGNsaXBfeTEgLSBtb3ZlX3k7Ci0JCQlibGl0c1toaXRfbnVtXS5ib2R5 LmRlc3RSZWN0LnJpZ2h0ID0gY2xpcF94MjsKLQkJCWJsaXRzW2hpdF9udW1dLmJvZHkuZGVzdFJl Y3QuYm90dG9tID0gY2xpcF95MjsKLQkJCWhpdF9udW0rKzsKLQkJfQotCi0JCS8qIG5vIGNsaXBz IGhpdCB0aGUgY3J0YyAqLwotCQlpZiAoaGl0X251bSA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJ Lyogb25seSByZXR1cm4gdGhlIGxhc3QgZmVuY2UgKi8KLQkJaWYgKG91dF9mZW5jZSAmJiAqb3V0 X2ZlbmNlKQotCQkJdm13X2ZlbmNlX29ial91bnJlZmVyZW5jZShvdXRfZmVuY2UpOwotCi0JCWZp Zm9fc2l6ZSA9IHNpemVvZigqYmxpdHMpICogaGl0X251bTsKLQkJcmV0ID0gdm13X2V4ZWNidWZf cHJvY2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLCBibGl0cywKLQkJCQkJICBmaWZvX3Np emUsIDAsIE5VTEwsIG91dF9mZW5jZSk7Ci0KLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJ CWJyZWFrOwotCX0KLQotCWtmcmVlKGJsaXRzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRp YyBpbnQgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmcmFtZWJ1ZmZlciwKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkJIHVu c2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKQEAgLTk3OSwxMyArNjI3LDE1IEBAIHN0YXRp YyBpbnQgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmcmFtZWJ1ZmZlciwKIAl9CiAKIAlpZiAoZGV2X3ByaXYtPmxkdV9wcml2KSB7Ci0JCXJldCA9 IGRvX2RtYWJ1Zl9kaXJ0eV9sZHUoZGV2X3ByaXYsICZ2ZmJkLT5iYXNlLAotCQkJCQkgIGZsYWdz LCBjb2xvciwKLQkJCQkJICBjbGlwcywgbnVtX2NsaXBzLCBpbmNyZW1lbnQpOwotCX0gZWxzZSB7 Ci0JCXJldCA9IGRvX2RtYWJ1Zl9kaXJ0eV9zb3UoZmlsZV9wcml2LCBkZXZfcHJpdiwgJnZmYmQt PmJhc2UsCi0JCQkJCSAgZmxhZ3MsIGNvbG9yLAotCQkJCQkgIGNsaXBzLCBudW1fY2xpcHMsIGlu Y3JlbWVudCwgTlVMTCk7CisJCXJldCA9IHZtd19rbXNfbGR1X2RvX2RtYWJ1Zl9kaXJ0eShkZXZf cHJpdiwgJnZmYmQtPmJhc2UsCisJCQkJCQkgIGZsYWdzLCBjb2xvciwKKwkJCQkJCSAgY2xpcHMs IG51bV9jbGlwcywgaW5jcmVtZW50KTsKKwl9IGVsc2UgaWYgKGRldl9wcml2LT5hY3RpdmVfZGlz cGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fb2JqZWN0KSB7CisJCXJldCA9IHZtd19rbXNfc291 X2RvX2RtYWJ1Zl9kaXJ0eShmaWxlX3ByaXYsIGRldl9wcml2LAorCQkJCQkJICAmdmZiZC0+YmFz ZSwKKwkJCQkJCSAgZmxhZ3MsIGNvbG9yLAorCQkJCQkJICBjbGlwcywgbnVtX2NsaXBzLCBpbmNy ZW1lbnQsCisJCQkJCQkgIE5VTEwpOwogCX0KIAogCXZtd19maWZvX2ZsdXNoKGRldl9wcml2LCBm YWxzZSk7CkBAIC0xMDExLDggKzY2MSw4IEBAIHN0YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVyX2Rt YWJ1Zl9waW4oc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqdmZiKQogCQl2bXdfZnJhbWVidWZmZXJf dG9fdmZiZCgmdmZiLT5iYXNlKTsKIAlpbnQgcmV0OwogCi0JLyogVGhpcyBjb2RlIHNob3VsZCBu b3QgYmUgdXNlZCB3aXRoIHNjcmVlbiBvYmplY3RzICovCi0JQlVHX09OKGRldl9wcml2LT5zb3Vf cHJpdik7CisJLyogVGhpcyBjb2RlIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBMZWdhY3kgRGlz cGxheSBVbml0ICovCisJQlVHX09OKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ICE9IHZt d19kdV9sZWdhY3kpOwogCiAJdm13X292ZXJsYXlfcGF1c2VfYWxsKGRldl9wcml2KTsKIApAQCAt MTA1OSw3ICs3MDksNyBAQCBzdGF0aWMgaW50IHZtd19rbXNfbmV3X2ZyYW1lYnVmZmVyX2RtYWJ1 ZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCX0KIAogCS8qIExpbWl0ZWQgZnJhbWVi dWZmZXIgY29sb3IgZGVwdGggc3VwcG9ydCBmb3Igc2NyZWVuIG9iamVjdHMgKi8KLQlpZiAoZGV2 X3ByaXYtPnNvdV9wcml2KSB7CisJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09 IHZtd19kdV9zY3JlZW5fb2JqZWN0KSB7CiAJCXN3aXRjaCAobW9kZV9jbWQtPmRlcHRoKSB7CiAJ CWNhc2UgMzI6CiAJCWNhc2UgMjQ6CkBAIC0xMTAyLDcgKzc1Miw3IEBAIHN0YXRpYyBpbnQgdm13 X2ttc19uZXdfZnJhbWVidWZmZXJfZG1hYnVmKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJdmZiZC0+YmFzZS5iYXNlLmRlcHRoID0gbW9kZV9jbWQtPmRlcHRoOwogCXZmYmQtPmJhc2Uu YmFzZS53aWR0aCA9IG1vZGVfY21kLT53aWR0aDsKIAl2ZmJkLT5iYXNlLmJhc2UuaGVpZ2h0ID0g bW9kZV9jbWQtPmhlaWdodDsKLQlpZiAoIWRldl9wcml2LT5zb3VfcHJpdikgeworCWlmIChkZXZf cHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9PSB2bXdfZHVfbGVnYWN5KSB7CiAJCXZmYmQtPmJh c2UucGluID0gdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9waW47CiAJCXZmYmQtPmJhc2UudW5waW4g PSB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX3VucGluOwogCX0KQEAgLTExNTksNyArODA5LDcgQEAg c3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKnZtd19rbXNfZmJfY3JlYXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJaWYgKCF2bXdfa21zX3ZhbGlkYXRlX21vZGVfdnJhbShkZXZfcHJp diwKIAkJCQkJbW9kZV9jbWQucGl0Y2gsCiAJCQkJCW1vZGVfY21kLmhlaWdodCkpIHsKLQkJRFJN X0VSUk9SKCJWUkFNIHNpemUgaXMgdG9vIHNtYWxsIGZvciByZXF1ZXN0ZWQgbW9kZS5cbiIpOwor CQlEUk1fRVJST1IoIlJlcXVlc3RlZCBtb2RlIGV4Y2VlZCBib3VuZGluZyBib3ggbGltaXQuXG4i KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCkBAIC0xMjIwLDcgKzg3MCw3IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHZtd19rbXNfZnVuY3Mg PSB7CiAJLmZiX2NyZWF0ZSA9IHZtd19rbXNfZmJfY3JlYXRlLAogfTsKIAotaW50IHZtd19rbXNf cHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAoraW50IHZtd19rbXNfZ2VuZXJp Y19wcmVzZW50KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCSAgICBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKIAkJICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKIAkJ ICAgIHN0cnVjdCB2bXdfc3VyZmFjZSAqc3VyZmFjZSwKQEAgLTEzNTgsNiArMTAwOCwxOSBAQCBv dXRfZnJlZV90bXA6CiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHZtd19rbXNfcHJlc2VudChzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsCisJCSAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIsCisJCSAgICBzdHJ1Y3Qgdm13 X3N1cmZhY2UgKnN1cmZhY2UsCisJCSAgICB1aW50MzJfdCBzaWQsCisJCSAgICBpbnQzMl90IGRl c3RYLCBpbnQzMl90IGRlc3RZLAorCQkgICAgc3RydWN0IGRybV92bXdfcmVjdCAqY2xpcHMsCisJ CSAgICB1aW50MzJfdCBudW1fY2xpcHMpCit7CisJcmV0dXJuIHZtd19rbXNfZ2VuZXJpY19wcmVz ZW50KGRldl9wcml2LCBmaWxlX3ByaXYsIHZmYiwgc3VyZmFjZSwgc2lkLAorCQkJCSAgICAgICBk ZXN0WCwgZGVzdFksIGNsaXBzLCBudW1fY2xpcHMpOworfQorCiBpbnQgdm13X2ttc19yZWFkYmFj ayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LAogCQkgICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKQEAgLTE0Nzgs MjYgKzExNDEsMjkgQEAgaW50IHZtd19rbXNfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2KQogCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gODE5MjsKIAlkZXYtPm1vZGVfY29u ZmlnLm1heF9oZWlnaHQgPSA4MTkyOwogCi0JcmV0ID0gdm13X2ttc19pbml0X3NjcmVlbl9vYmpl Y3RfZGlzcGxheShkZXZfcHJpdik7CisJcmV0ID0gdm13X2ttc19zb3VfaW5pdF9kaXNwbGF5KGRl dl9wcml2KTsKIAlpZiAocmV0KSAvKiBGYWxsYmFjayAqLwotCQkodm9pZCl2bXdfa21zX2luaXRf bGVnYWN5X2Rpc3BsYXlfc3lzdGVtKGRldl9wcml2KTsKKwkJcmV0ID0gdm13X2ttc19sZHVfaW5p dF9kaXNwbGF5KGRldl9wcml2KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGlu dCB2bXdfa21zX2Nsb3NlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CisJaW50IHJl dDsKKwogCS8qCiAJICogRG9jcyBzYXlzIHdlIHNob3VsZCB0YWtlIHRoZSBsb2NrIGJlZm9yZSBj YWxsaW5nIHRoaXMgZnVuY3Rpb24KIAkgKiBidXQgc2luY2UgaXQgZGVzdHJveXMgZW5jb2RlcnMg YW5kIG91ciBkZXN0cnVjdG9yIGNhbGxzCiAJICogZHJtX2VuY29kZXJfY2xlYW51cCB3aGljaCB0 YWtlcyB0aGUgbG9jayB3ZSBkZWFkbG9jay4KIAkgKi8KIAlkcm1fbW9kZV9jb25maWdfY2xlYW51 cChkZXZfcHJpdi0+ZGV2KTsKLQlpZiAoZGV2X3ByaXYtPnNvdV9wcml2KQotCQl2bXdfa21zX2Ns b3NlX3NjcmVlbl9vYmplY3RfZGlzcGxheShkZXZfcHJpdik7CisJaWYgKGRldl9wcml2LT5hY3Rp dmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fb2JqZWN0KQorCQlyZXQgPSB2bXdfa21z X3NvdV9jbG9zZV9kaXNwbGF5KGRldl9wcml2KTsKIAllbHNlCi0JCXZtd19rbXNfY2xvc2VfbGVn YWN5X2Rpc3BsYXlfc3lzdGVtKGRldl9wcml2KTsKLQlyZXR1cm4gMDsKKwkJcmV0ID0gdm13X2tt c19sZHVfY2xvc2VfZGlzcGxheShkZXZfcHJpdik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQg dm13X2ttc19jdXJzb3JfYnlwYXNzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCkBAIC0xNTczLDcgKzEyMzksNyBAQCBpbnQgdm13X2ttc19zYXZlX3ZnYShzdHJ1Y3Qg dm13X3ByaXZhdGUgKnZtd19wcml2KQogCQkgIHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19Q SVRDSExPQ0spOwogCWVsc2UgaWYgKHZtd19maWZvX2hhdmVfcGl0Y2hsb2NrKHZtd19wcml2KSkK IAkJdm13X3ByaXYtPnZnYV9waXRjaGxvY2sgPSBpb3JlYWQzMih2bXdfcHJpdi0+bW1pb192aXJ0 ICsKLQkJCQkJCSAgICAgICBTVkdBX0ZJRk9fUElUQ0hMT0NLKTsKKwkJCQkJCSAgIFNWR0FfRklG T19QSVRDSExPQ0spOwogCiAJaWYgKCEodm13X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQ X0RJU1BMQVlfVE9QT0xPR1kpKQogCQlyZXR1cm4gMDsKQEAgLTE3MTksNzUgKzEzODUsNiBAQCBz dGF0aWMgaW50IHZtd19kdV91cGRhdGVfbGF5b3V0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYsIHVuc2lnbmVkIG51bSwKIAlyZXR1cm4gMDsKIH0KIAotaW50IHZtd19kdV9wYWdlX2ZsaXAo c3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LAotCQkgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LAotCQkgICAg IHVpbnQzMl90IHBhZ2VfZmxpcF9mbGFncykKLXsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2ID0gdm13X3ByaXYoY3J0Yy0+ZGV2KTsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRf ZmIgPSBjcnRjLT5wcmltYXJ5LT5mYjsKLQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIgPSB2 bXdfZnJhbWVidWZmZXJfdG9fdmZiKGZiKTsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA7 Ci0Jc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNlID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2NsaXBf cmVjdCBjbGlwczsKLQlpbnQgcmV0OwotCi0JaWYgKGV2ZW50ID09IE5VTEwpCi0JCXJldHVybiAt RUlOVkFMOwotCi0JLyogcmVxdWlyZSBTY3JlZW5PYmplY3Qgc3VwcG9ydCBmb3IgcGFnZSBmbGlw cGluZyAqLwotCWlmICghZGV2X3ByaXYtPnNvdV9wcml2KQotCQlyZXR1cm4gLUVOT1NZUzsKLQot CWZpbGVfcHJpdiA9IGV2ZW50LT5iYXNlLmZpbGVfcHJpdjsKLQlpZiAoIXZtd19rbXNfc2NyZWVu X29iamVjdF9mbGlwcGFibGUoZGV2X3ByaXYsIGNydGMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQot CWNydGMtPnByaW1hcnktPmZiID0gZmI7Ci0KLQkvKiBkbyBhIGZ1bGwgc2NyZWVuIGRpcnR5IHVw ZGF0ZSAqLwotCWNsaXBzLngxID0gY2xpcHMueTEgPSAwOwotCWNsaXBzLngyID0gZmItPndpZHRo OwotCWNsaXBzLnkyID0gZmItPmhlaWdodDsKLQotCWlmICh2ZmItPmRtYWJ1ZikKLQkJcmV0ID0g ZG9fZG1hYnVmX2RpcnR5X3NvdShmaWxlX3ByaXYsIGRldl9wcml2LCB2ZmIsCi0JCQkJCSAgMCwg MCwgJmNsaXBzLCAxLCAxLCAmZmVuY2UpOwotCWVsc2UKLQkJcmV0ID0gZG9fc3VyZmFjZV9kaXJ0 eV9zb3UoZGV2X3ByaXYsIGZpbGVfcHJpdiwgdmZiLAotCQkJCQkgICAwLCAwLCAmY2xpcHMsIDEs IDEsICZmZW5jZSk7Ci0KLQotCWlmIChyZXQgIT0gMCkKLQkJZ290byBvdXRfbm9fZmVuY2U7Ci0J aWYgKCFmZW5jZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9ub19mZW5jZTsKLQl9 Ci0KLQlyZXQgPSB2bXdfZXZlbnRfZmVuY2VfYWN0aW9uX3F1ZXVlKGZpbGVfcHJpdiwgZmVuY2Us Ci0JCQkJCSAgICZldmVudC0+YmFzZSwKLQkJCQkJICAgJmV2ZW50LT5ldmVudC50dl9zZWMsCi0J CQkJCSAgICZldmVudC0+ZXZlbnQudHZfdXNlYywKLQkJCQkJICAgdHJ1ZSk7Ci0KLQkvKgotCSAq IE5vIG5lZWQgdG8gaG9sZCBvbiB0byB0aGlzIG5vdy4gVGhlIG9ubHkgY2xlYW51cAotCSAqIHdl IG5lZWQgdG8gZG8gaWYgd2UgZmFpbCBpcyB1bnJlZiB0aGUgZmVuY2UuCi0JICovCi0Jdm13X2Zl bmNlX29ial91bnJlZmVyZW5jZSgmZmVuY2UpOwotCi0JaWYgKHZtd19jcnRjX3RvX2R1KGNydGMp LT5pc19pbXBsaWNpdCkKLQkJdm13X2ttc19zY3JlZW5fb2JqZWN0X3VwZGF0ZV9pbXBsaWNpdF9m YihkZXZfcHJpdiwgY3J0Yyk7Ci0KLQlyZXR1cm4gcmV0OwotCi1vdXRfbm9fZmVuY2U6Ci0JY3J0 Yy0+cHJpbWFyeS0+ZmIgPSBvbGRfZmI7Ci0JcmV0dXJuIHJldDsKLX0KLQotCiB2b2lkIHZtd19k dV9jcnRjX3NhdmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogfQpAQCAtMTk1OCwzNiArMTU1 NSwzNCBAQCBpbnQgdm13X2R1X2Nvbm5lY3Rvcl9maWxsX21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCiAJICogSWYgdXNpbmcgc2NyZWVuIG9iamVjdHMsIHRoZW4gYXNzdW1l IDMyLWJwcCBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZQogCSAqIFNWR0EgZGV2aWNlIGlzIGFzc3Vt aW5nCiAJICovCi0JaWYgKGRldl9wcml2LT5zb3VfcHJpdikKKwlpZiAoZGV2X3ByaXYtPmFjdGl2 ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl9vYmplY3QpCiAJCWFzc3VtZWRfYnBwID0g NDsKIAogCS8qIEFkZCBwcmVmZXJyZWQgbW9kZSAqLwotCXsKLQkJbW9kZSA9IGRybV9tb2RlX2R1 cGxpY2F0ZShkZXYsICZwcmVmbW9kZSk7Ci0JCWlmICghbW9kZSkKLQkJCXJldHVybiAwOwotCQlt b2RlLT5oZGlzcGxheSA9IGR1LT5wcmVmX3dpZHRoOwotCQltb2RlLT52ZGlzcGxheSA9IGR1LT5w cmVmX2hlaWdodDsKLQkJdm13X2d1ZXNzX21vZGVfdGltaW5nKG1vZGUpOwotCi0JCWlmICh2bXdf a21zX3ZhbGlkYXRlX21vZGVfdnJhbShkZXZfcHJpdiwKLQkJCQkJCW1vZGUtPmhkaXNwbGF5ICog YXNzdW1lZF9icHAsCi0JCQkJCQltb2RlLT52ZGlzcGxheSkpIHsKLQkJCWRybV9tb2RlX3Byb2Jl ZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKLQkJfSBlbHNlIHsKLQkJCWRybV9tb2RlX2Rlc3Ryb3ko ZGV2LCBtb2RlKTsKLQkJCW1vZGUgPSBOVUxMOwotCQl9CisJbW9kZSA9IGRybV9tb2RlX2R1cGxp Y2F0ZShkZXYsICZwcmVmbW9kZSk7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKwltb2RlLT5o ZGlzcGxheSA9IGR1LT5wcmVmX3dpZHRoOworCW1vZGUtPnZkaXNwbGF5ID0gZHUtPnByZWZfaGVp Z2h0OworCXZtd19ndWVzc19tb2RlX3RpbWluZyhtb2RlKTsKIAotCQlpZiAoZHUtPnByZWZfbW9k ZSkgewotCQkJbGlzdF9kZWxfaW5pdCgmZHUtPnByZWZfbW9kZS0+aGVhZCk7Ci0JCQlkcm1fbW9k ZV9kZXN0cm95KGRldiwgZHUtPnByZWZfbW9kZSk7Ci0JCX0KKwlpZiAodm13X2ttc192YWxpZGF0 ZV9tb2RlX3ZyYW0oZGV2X3ByaXYsCisJCQkJCW1vZGUtPmhkaXNwbGF5ICogYXNzdW1lZF9icHAs CisJCQkJCW1vZGUtPnZkaXNwbGF5KSkgeworCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3Rv ciwgbW9kZSk7CisJfSBlbHNlIHsKKwkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOworCQlt b2RlID0gTlVMTDsKKwl9CiAKLQkJLyogbW9kZSBtaWdodCBiZSBudWxsIGhlcmUsIHRoaXMgaXMg aW50ZW5kZWQgKi8KLQkJZHUtPnByZWZfbW9kZSA9IG1vZGU7CisJaWYgKGR1LT5wcmVmX21vZGUp IHsKKwkJbGlzdF9kZWxfaW5pdCgmZHUtPnByZWZfbW9kZS0+aGVhZCk7CisJCWRybV9tb2RlX2Rl c3Ryb3koZGV2LCBkdS0+cHJlZl9tb2RlKTsKIAl9CiAKKwkvKiBtb2RlIG1pZ2h0IGJlIG51bGwg aGVyZSwgdGhpcyBpcyBpbnRlbmRlZCAqLworCWR1LT5wcmVmX21vZGUgPSBtb2RlOworCiAJZm9y IChpID0gMDsgdm13X2ttc19jb25uZWN0b3JfYnVpbHRpbltpXS50eXBlICE9IDA7IGkrKykgewog CQlibW9kZSA9ICZ2bXdfa21zX2Nvbm5lY3Rvcl9idWlsdGluW2ldOwogCQlpZiAoYm1vZGUtPmhk aXNwbGF5ID4gbWF4X3dpZHRoIHx8CkBAIC0yMDM2LDYgKzE2MzEsNyBAQCBpbnQgdm13X2ttc191 cGRhdGVfbGF5b3V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJ aW50IHJldDsKIAlpbnQgaTsKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9 ICZkZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBkcm1fdm13X3JlY3QgYm91bmRpbmdfYm94ID0g ezB9OwogCiAJaWYgKCFhcmctPm51bV9vdXRwdXRzKSB7CiAJCXN0cnVjdCBkcm1fdm13X3JlY3Qg ZGVmX3JlY3QgPSB7MCwgMCwgODAwLCA2MDB9OwpAQCAtMjA2Niw2ICsxNjYyLDE2IEBAIGludCB2 bXdfa21zX3VwZGF0ZV9sYXlvdXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CisKKwkJLyoK KwkJICogYm91bmRpbmdfYm94LncgYW5kIGJ1bmRpbmdfYm94LmggYXJlIHVzZWQgYXMKKwkJICog bG93ZXItcmlnaHQgY29vcmRpbmF0ZXMKKwkJICovCisJCWlmIChyZWN0c1tpXS54ICsgcmVjdHNb aV0udyA+IGJvdW5kaW5nX2JveC53KQorCQkJYm91bmRpbmdfYm94LncgPSByZWN0c1tpXS54ICsg cmVjdHNbaV0udzsKKworCQlpZiAocmVjdHNbaV0ueSArIHJlY3RzW2ldLmggPiBib3VuZGluZ19i b3guaCkKKwkJCWJvdW5kaW5nX2JveC5oID0gcmVjdHNbaV0ueSArIHJlY3RzW2ldLmg7CiAJfQog CiAJdm13X2R1X3VwZGF0ZV9sYXlvdXQoZGV2X3ByaXYsIGFyZy0+bnVtX291dHB1dHMsIHJlY3Rz KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmgKaW5kZXggOGQwMzhjMy4uMGYyYzI5MSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwOSBWTXdhcmUsIEluYy4sIFBhbG8g QWx0bywgQ0EuLCBVU0EKKyAqIENvcHlyaWdodCDCqSAyMDA5LTIwMTQgVk13YXJlLCBJbmMuLCBQ YWxvIEFsdG8sIENBLiwgVVNBCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCkBAIC0zMiwxMSArMzIsMTcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+CiAjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgogCisKKwogI2RlZmluZSBWTVdHRlhfTlVN X0RJU1BMQVlfVU5JVFMgOAogCiAKICNkZWZpbmUgdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYih4KSBc CiAJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIsIGJhc2UpCisjZGVmaW5l IHZtd19mcmFtZWJ1ZmZlcl90b192ZmJzKHgpIFwKKwljb250YWluZXJfb2YoeCwgc3RydWN0IHZt d19mcmFtZWJ1ZmZlcl9zdXJmYWNlLCBiYXNlLmJhc2UpCisjZGVmaW5lIHZtd19mcmFtZWJ1ZmZl cl90b192ZmJkKHgpIFwKKwljb250YWluZXJfb2YoeCwgc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9k bWFidWYsIGJhc2UuYmFzZSkKIAogLyoqCiAgKiBCYXNlIGNsYXNzIGZvciBmcmFtZWJ1ZmZlcnMK QEAgLTUzLDkgKzU5LDM2IEBAIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgewogCXVpbnQzMl90IHVz ZXJfaGFuZGxlOwogfTsKIAorLyoKKyAqIENsaXAgcmVjdGFuZ2xlCisgKi8KK3N0cnVjdCB2bXdf Y2xpcF9yZWN0IHsKKwlpbnQgeDEsIHgyLCB5MSwgeTI7Cit9OworCitzdHJ1Y3Qgdm13X2ZyYW1l YnVmZmVyX3N1cmZhY2UgeworCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgYmFzZTsKKwlzdHJ1Y3Qg dm13X3N1cmZhY2UgKnN1cmZhY2U7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpidWZmZXI7CisJ c3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXI7Cit9Owog Ci0jZGVmaW5lIHZtd19jcnRjX3RvX2R1KHgpIFwKLQljb250YWluZXJfb2YoeCwgc3RydWN0IHZt d19kaXNwbGF5X3VuaXQsIGNydGMpCisKK3N0cnVjdCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmIHsK KwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIGJhc2U7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpi dWZmZXI7Cit9OworCisKKy8qCisgKiBCYXNpYyBjbGlwIHJlY3QgbWFuaXB1bGF0aW9uCisgKi8K K3ZvaWQgdm13X2NsaXBfY2xpcHJlY3RzKHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyZWN0cywKKwkJ CWludCBudW1fcmVjdHMsCisJCQlzdHJ1Y3Qgdm13X2NsaXBfcmVjdCBjbGlwLAorCQkJU1ZHQVNp Z25lZFJlY3QgKm91dF9yZWN0cywKKwkJCWludCAqb3V0X251bSk7CiAKIC8qCiAgKiBCYXNpYyBj dXJzb3IgbWFuaXB1bGF0aW9uCkBAIC0xMjAsMTEgKzE1Myw3IEBAIHN0cnVjdCB2bXdfZGlzcGxh eV91bml0IHsKIC8qCiAgKiBTaGFyZWQgZGlzcGxheSB1bml0IGZ1bmN0aW9ucyAtIHZtd2dmeF9r bXMuYwogICovCi12b2lkIHZtd19kaXNwbGF5X3VuaXRfY2xlYW51cChzdHJ1Y3Qgdm13X2Rpc3Bs YXlfdW5pdCAqZHUpOwotaW50IHZtd19kdV9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRj LAotCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgIHN0cnVjdCBkcm1f cGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LAotCQkgICAgIHVpbnQzMl90IHBhZ2VfZmxpcF9m bGFncyk7Cit2b2lkIHZtd19kdV9jbGVhbnVwKHN0cnVjdCB2bXdfZGlzcGxheV91bml0ICpkdSk7 CiB2b2lkIHZtd19kdV9jcnRjX3NhdmUoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgdm13 X2R1X2NydGNfcmVzdG9yZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogdm9pZCB2bXdfZHVfY3J0 Y19nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtMTQ4LDIwICsxNzcsMzEgQEAg aW50IHZtd19kdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCiAvKgogICogTGVnYWN5IGRpc3BsYXkgdW5pdCBmdW5jdGlvbnMgLSB2bXdnZnhf bGR1LmMKICAqLwotaW50IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdik7Ci1pbnQgdm13X2ttc19jbG9zZV9sZWdhY3lfZGlzcGxh eV9zeXN0ZW0oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ttc19sZHVf aW5pdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19rbXNf bGR1X2Nsb3NlX2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13 X2ttc19sZHVfZG9fZG1hYnVmX2RpcnR5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJ CQkJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJdW5zaWduZWQgZmxh Z3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJ CQl1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQpOwogCiAvKgogICogU2NyZWVuIE9i amVjdHMgZGlzcGxheSBmdW5jdGlvbnMgLSB2bXdnZnhfc2Nybi5jCiAgKi8KLWludCB2bXdfa21z X2luaXRfc2NyZWVuX29iamVjdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYp OwotaW50IHZtd19rbXNfY2xvc2Vfc2NyZWVuX29iamVjdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYpOwotaW50IHZtd19rbXNfc291X3VwZGF0ZV9sYXlvdXQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgbnVtLAotCQkJICAgICAgc3RydWN0IGRybV92 bXdfcmVjdCAqcmVjdHMpOwotYm9vbCB2bXdfa21zX3NjcmVlbl9vYmplY3RfZmxpcHBhYmxlKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwotdm9pZCB2bXdfa21zX3NjcmVlbl9vYmplY3RfdXBkYXRlX2ltcGxpY2l0X2ZiKHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yyk7Ci0KLQoraW50IHZtd19rbXNfc291X2luaXRfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2KTsKK2ludCB2bXdfa21zX3NvdV9jbG9zZV9kaXNwbGF5KHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19rbXNfc291X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs CisJCQkJIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAorCQkJCSB1bnNpZ25l ZCBmbGFncywgdW5zaWduZWQgY29sb3IsCisJCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlw cywKKwkJCQkgdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQgaW5jLAorCQkJCSBzdHJ1Y3Qgdm13X2Zl bmNlX29iaiAqKm91dF9mZW5jZSk7CitpbnQgdm13X2ttc19zb3VfZG9fZG1hYnVmX2RpcnR5KHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYsCisJCQkJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJdW5zaWdu ZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlw cywKKwkJCQl1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQsCisJCQkJc3RydWN0IHZt d19mZW5jZV9vYmogKipvdXRfZmVuY2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9sZHUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2xkdS5jCmluZGV4IDUzNTc5ZjIuLmYwZmQ1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2xkdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2xkdS5jCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXlfdW5pdCB7 CiBzdGF0aWMgdm9pZCB2bXdfbGR1X2Rlc3Ryb3koc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheV91 bml0ICpsZHUpCiB7CiAJbGlzdF9kZWxfaW5pdCgmbGR1LT5hY3RpdmUpOwotCXZtd19kaXNwbGF5 X3VuaXRfY2xlYW51cCgmbGR1LT5iYXNlKTsKKwl2bXdfZHVfY2xlYW51cCgmbGR1LT5iYXNlKTsK IAlrZnJlZShsZHUpOwogfQogCkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIGludCB2bXdfbGR1 X2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgdW5pdCkKIAlyZXR1 cm4gMDsKIH0KIAotaW50IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdikKK2ludCB2bXdfa21zX2xkdV9pbml0X2Rpc3BsYXkoc3Ry dWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g ZGV2X3ByaXYtPmRldjsKIAlpbnQgaSwgcmV0OwpAQCAtNDIzLDYgKzQyMywxMCBAQCBpbnQgdm13 X2ttc19pbml0X2xlZ2FjeV9kaXNwbGF5X3N5c3RlbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2KQogCWVsc2UKIAkJdm13X2xkdV9pbml0KGRldl9wcml2LCAwKTsKIAorCWRldl9wcml2LT5h Y3RpdmVfZGlzcGxheV91bml0ID0gdm13X2R1X2xlZ2FjeTsKKworCURSTV9JTkZPKCJMZWdhY3kg RGlzcGxheSBVbml0IGluaXRpYWxpemVkXG4iKTsKKwogCXJldHVybiAwOwogCiBlcnJfdmJsYW5r X2NsZWFudXA6CkBAIC00MzMsNyArNDM3LDcgQEAgZXJyX2ZyZWU6CiAJcmV0dXJuIHJldDsKIH0K IAotaW50IHZtd19rbXNfY2xvc2VfbGVnYWN5X2Rpc3BsYXlfc3lzdGVtKHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYpCitpbnQgdm13X2ttc19sZHVfY2xvc2VfZGlzcGxheShzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJp di0+ZGV2OwogCkBAIC00NDgsMyArNDUyLDM4IEBAIGludCB2bXdfa21zX2Nsb3NlX2xlZ2FjeV9k aXNwbGF5X3N5c3RlbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCiAJcmV0dXJuIDA7 CiB9CisKKworaW50IHZtd19rbXNfbGR1X2RvX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2LAorCQkJCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAor CQkJCXVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKKwkJCQlzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqY2xpcHMsCisJCQkJdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQgaW5jcmVtZW50KQorewor CXNpemVfdCBmaWZvX3NpemU7CisJaW50IGk7CisKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBoZWFk ZXI7CisJCVNWR0FGaWZvQ21kVXBkYXRlIGJvZHk7CisJfSAqY21kOworCisJZmlmb19zaXplID0g c2l6ZW9mKCpjbWQpICogbnVtX2NsaXBzOworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3By aXYsIGZpZm9fc2l6ZSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJS T1IoIkZpZm8gcmVzZXJ2ZSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ bWVtc2V0KGNtZCwgMCwgZmlmb19zaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBp KyssIGNsaXBzICs9IGluY3JlbWVudCkgeworCQljbWRbaV0uaGVhZGVyID0gY3B1X3RvX2xlMzIo U1ZHQV9DTURfVVBEQVRFKTsKKwkJY21kW2ldLmJvZHkueCA9IGNwdV90b19sZTMyKGNsaXBzLT54 MSk7CisJCWNtZFtpXS5ib2R5LnkgPSBjcHVfdG9fbGUzMihjbGlwcy0+eTEpOworCQljbWRbaV0u Ym9keS53aWR0aCA9IGNwdV90b19sZTMyKGNsaXBzLT54MiAtIGNsaXBzLT54MSk7CisJCWNtZFtp XS5ib2R5LmhlaWdodCA9IGNwdV90b19sZTMyKGNsaXBzLT55MiAtIGNsaXBzLT55MSk7CisJfQor CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBmaWZvX3NpemUpOworCXJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfb3ZlcmxheS5jIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfb3ZlcmxheS5jCmluZGV4IDg3ZTM5ZjYuLjdmNGIy ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X292ZXJsYXkuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9vdmVybGF5LmMKQEAgLTEwMCw3ICsx MDAsNyBAQCBzdGF0aWMgaW50IHZtd19vdmVybGF5X3NlbmRfcHV0KHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCiB7CiAJc3RydWN0IHZtd19lc2NhcGVfdmlkZW9fZmx1c2ggKmZsdXNoOwog CXNpemVfdCBmaWZvX3NpemU7Ci0JYm9vbCBoYXZlX3NvID0gZGV2X3ByaXYtPnNvdV9wcml2ID8g dHJ1ZSA6IGZhbHNlOworCWJvb2wgaGF2ZV9zbyA9IChkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlf dW5pdCA9PSB2bXdfZHVfc2NyZWVuX29iamVjdCk7CiAJaW50IGksIG51bV9pdGVtczsKIAlTVkdB R3Vlc3RQdHIgcHRyOwogCkBAIC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIGludCB2bXdfb3Zlcmxh eV9tb3ZlX2J1ZmZlcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCWlmICghcGluKQog CQlyZXR1cm4gdm13X2RtYWJ1Zl91bnBpbihkZXZfcHJpdiwgYnVmLCBpbnRlcik7CiAKLQlpZiAo IWRldl9wcml2LT5zb3VfcHJpdikKKwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQg PT0gdm13X2R1X2xlZ2FjeSkKIAkJcmV0dXJuIHZtd19kbWFidWZfdG9fdnJhbShkZXZfcHJpdiwg YnVmLCB0cnVlLCBpbnRlcik7CiAKIAlyZXR1cm4gdm13X2RtYWJ1Zl90b192cmFtX29yX2dtcihk ZXZfcHJpdiwgYnVmLCB0cnVlLCBpbnRlcik7CkBAIC00NTMsNyArNDUzLDcgQEAgaW50IHZtd19v dmVybGF5X3BhdXNlX2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCiBzdGF0aWMg Ym9vbCB2bXdfb3ZlcmxheV9hdmFpbGFibGUoY29uc3Qgc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdikKIHsKLQlyZXR1cm4gKGRldl9wcml2LT5vdmVybGF5X3ByaXYgIT0gTlVMTCAmJiAKKwly ZXR1cm4gKGRldl9wcml2LT5vdmVybGF5X3ByaXYgIT0gTlVMTCAmJgogCQkoKGRldl9wcml2LT5m aWZvLmNhcGFiaWxpdGllcyAmIFZNV19PVkVSTEFZX0NBUF9NQVNLKSA9PQogCQkgVk1XX09WRVJM QVlfQ0FQX01BU0spKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X3Njcm4uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYwppbmRleCA5 ZThlYjM2Li44MDdmYzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9zY3JuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2Nybi5jCkBAIC0x LDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0IMKpIDIwMTEg Vk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBDb3B5cmlnaHQgwqkgMjAxMS0y MDE0IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQogICogQWxsIFJpZ2h0cyBSZXNl cnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQpAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3Qgdm13 X3NjcmVlbl9vYmplY3RfdW5pdCB7CiAKIHN0YXRpYyB2b2lkIHZtd19zb3VfZGVzdHJveShzdHJ1 Y3Qgdm13X3NjcmVlbl9vYmplY3RfdW5pdCAqc291KQogewotCXZtd19kaXNwbGF5X3VuaXRfY2xl YW51cCgmc291LT5iYXNlKTsKKwl2bXdfZHVfY2xlYW51cCgmc291LT5iYXNlKTsKIAlrZnJlZShz b3UpOwogfQogCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIHZtd19zb3VfY3J0Y19kZXN0 cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIH0KIAogc3RhdGljIHZvaWQgdm13X3NvdV9kZWxf YWN0aXZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCi0JCQkgICAgICBzdHJ1Y3Qgdm13 X3NjcmVlbl9vYmplY3RfdW5pdCAqc291KQorCQkJICAgICAgIHN0cnVjdCB2bXdfc2NyZWVuX29i amVjdF91bml0ICpzb3UpCiB7CiAJc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKmxk ID0gdm13X3ByaXYtPnNvdV9wcml2OwogCkBAIC04NCw4ICs4NCw4IEBAIHN0YXRpYyB2b2lkIHZt d19zb3VfZGVsX2FjdGl2ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2LAogfQogCiBzdGF0 aWMgdm9pZCB2bXdfc291X2FkZF9hY3RpdmUoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwK LQkJCSAgICAgIHN0cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0ICpzb3UsCi0JCQkgICAgICBz dHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIpCisJCQkgICAgICAgc3RydWN0IHZtd19zY3JlZW5f b2JqZWN0X3VuaXQgKnNvdSwKKwkJCSAgICAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIp CiB7CiAJc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKmxkID0gdm13X3ByaXYtPnNv dV9wcml2OwogCkBAIC0yNzQsMTMgKzI3NCwxMyBAQCBzdGF0aWMgaW50IHZtd19zb3VfY3J0Y19z ZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKIAlkZXZfcHJpdiA9IHZtd19wcml2 KGNydGMtPmRldik7CiAKIAlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA+IDEpIHsKLQkJRFJNX0VS Uk9SKCJ0byBtYW55IGNvbm5lY3RvcnNcbiIpOworCQlEUk1fRVJST1IoIlRvbyBtYW55IGNvbm5l Y3RvcnNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoc2V0LT5udW1fY29ubmVj dG9ycyA9PSAxICYmCiAJICAgIHNldC0+Y29ubmVjdG9yc1swXSAhPSAmc291LT5iYXNlLmNvbm5l Y3RvcikgewotCQlEUk1fRVJST1IoImNvbm5lY3RvciBkb2Vzbid0IG1hdGNoICVwICVwXG4iLAor CQlEUk1fRVJST1IoIkNvbm5lY3RvciBkb2Vzbid0IG1hdGNoICVwICVwXG4iLAogCQkJc2V0LT5j b25uZWN0b3JzWzBdLCAmc291LT5iYXNlLmNvbm5lY3Rvcik7CiAJCXJldHVybiAtRUlOVkFMOwog CX0KQEAgLTM5MSw2ICszOTEsMjUwIEBAIHN0YXRpYyBpbnQgdm13X3NvdV9jcnRjX3NldF9jb25m aWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQogCXJldHVybiAwOwogfQogCisvKioKKyAqIFJl dHVybnMgaWYgdGhpcyB1bml0IGNhbiBiZSBwYWdlIGZsaXBwZWQuCisgKiBNdXN0IGJlIGNhbGxl ZCB3aXRoIHRoZSBtb2RlX2NvbmZpZyBtdXRleCBoZWxkLgorICovCitzdGF0aWMgYm9vbCB2bXdf c291X3NjcmVlbl9vYmplY3RfZmxpcHBhYmxlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHZtd19zY3JlZW5f b2JqZWN0X3VuaXQgKnNvdSA9IHZtd19jcnRjX3RvX3NvdShjcnRjKTsKKworCWlmICghc291LT5i YXNlLmlzX2ltcGxpY2l0KQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChkZXZfcHJpdi0+c291X3By aXYtPm51bV9pbXBsaWNpdCAhPSAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoqCisgKiBVcGRhdGUgdGhlIGltcGxpY2l0IGZiIHRvIHRoZSBjdXJyZW50IGZiIG9m IHRoaXMgY3J0Yy4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1vZGVfY29uZmlnIG11dGV4 IGhlbGQuCisgKi8KK3ZvaWQgdm13X3NvdV91cGRhdGVfaW1wbGljaXRfZmIoc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IHZtd19zY3JlZW5fb2JqZWN0X3VuaXQgKnNvdSA9IHZtd19jcnRjX3RvX3NvdShjcnRjKTsKKwor CUJVR19PTighc291LT5iYXNlLmlzX2ltcGxpY2l0KTsKKworCWRldl9wcml2LT5zb3VfcHJpdi0+ aW1wbGljaXRfZmIgPQorCQl2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHNvdS0+YmFzZS5jcnRjLnBy aW1hcnktPmZiKTsKK30KKworc3RhdGljIGludCB2bXdfc291X2NydGNfcGFnZV9mbGlwKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJ CSAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQsCisJCQkJICB1aW50MzJf dCBmbGFncykKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoY3J0 Yy0+ZGV2KTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBjcnRjLT5wcmltYXJ5 LT5mYjsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIgPSB2bXdfZnJhbWVidWZmZXJfdG9f dmZiKGZiKTsKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IGV2ZW50LT5iYXNlLmZpbGVf cHJpdjsKKwlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqZmVuY2UgPSBOVUxMOworCXN0cnVjdCBkcm1f Y2xpcF9yZWN0IGNsaXBzOworCWludCByZXQ7CisKKwkvKiByZXF1aXJlIFNjcmVlbk9iamVjdCBz dXBwb3J0IGZvciBwYWdlIGZsaXBwaW5nICovCisJaWYgKCFkZXZfcHJpdi0+c291X3ByaXYpCisJ CXJldHVybiAtRU5PU1lTOworCisJaWYgKCF2bXdfc291X3NjcmVlbl9vYmplY3RfZmxpcHBhYmxl KGRldl9wcml2LCBjcnRjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcnRjLT5wcmltYXJ5LT5m YiA9IGZiOworCisJLyogZG8gYSBmdWxsIHNjcmVlbiBkaXJ0eSB1cGRhdGUgKi8KKwljbGlwcy54 MSA9IGNsaXBzLnkxID0gMDsKKwljbGlwcy54MiA9IGZiLT53aWR0aDsKKwljbGlwcy55MiA9IGZi LT5oZWlnaHQ7CisKKwlpZiAodmZiLT5kbWFidWYpCisJCXJldCA9IHZtd19rbXNfc291X2RvX2Rt YWJ1Zl9kaXJ0eShmaWxlX3ByaXYsIGRldl9wcml2LCB2ZmIsCisJCQkJCQkgIDAsIDAsICZjbGlw cywgMSwgMSwgJmZlbmNlKTsKKwllbHNlCisJCXJldCA9IHZtd19rbXNfc291X2RvX3N1cmZhY2Vf ZGlydHkoZGV2X3ByaXYsIGZpbGVfcHJpdiwgdmZiLAorCQkJCQkJICAgMCwgMCwgJmNsaXBzLCAx LCAxLCAmZmVuY2UpOworCisKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0X25vX2ZlbmNlOwor CWlmICghZmVuY2UpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfbm9fZmVuY2U7CisJ fQorCisJcmV0ID0gdm13X2V2ZW50X2ZlbmNlX2FjdGlvbl9xdWV1ZShmaWxlX3ByaXYsIGZlbmNl LAorCQkJCQkgICAmZXZlbnQtPmJhc2UsCisJCQkJCSAgICZldmVudC0+ZXZlbnQudHZfc2VjLAor CQkJCQkgICAmZXZlbnQtPmV2ZW50LnR2X3VzZWMsCisJCQkJCSAgIHRydWUpOworCisJLyoKKwkg KiBObyBuZWVkIHRvIGhvbGQgb24gdG8gdGhpcyBub3cuIFRoZSBvbmx5IGNsZWFudXAKKwkgKiB3 ZSBuZWVkIHRvIGRvIGlmIHdlIGZhaWwgaXMgdW5yZWYgdGhlIGZlbmNlLgorCSAqLworCXZtd19m ZW5jZV9vYmpfdW5yZWZlcmVuY2UoJmZlbmNlKTsKKworCWlmICh2bXdfY3J0Y190b19kdShjcnRj KS0+aXNfaW1wbGljaXQpCisJCXZtd19zb3VfdXBkYXRlX2ltcGxpY2l0X2ZiKGRldl9wcml2LCBj cnRjKTsKKworCXJldHVybiByZXQ7CisKK291dF9ub19mZW5jZToKKwljcnRjLT5wcmltYXJ5LT5m YiA9IG9sZF9mYjsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X2ttc19zb3VfZG9fc3VyZmFj ZV9kaXJ0eShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdiwKKwkJCQkgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs CisJCQkJIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKKwkJCQkgc3RydWN0IGRybV9j bGlwX3JlY3QgKmNsaXBzLAorCQkJCSB1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmMsCisJCQkJ IHN0cnVjdCB2bXdfZmVuY2Vfb2JqICoqb3V0X2ZlbmNlKQoreworCXN0cnVjdCB2bXdfZGlzcGxh eV91bml0ICp1bml0c1tWTVdHRlhfTlVNX0RJU1BMQVlfVU5JVFNdOworCXN0cnVjdCBkcm1fY2xp cF9yZWN0ICpjbGlwc19wdHI7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKnRtcDsKKwlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGM7CisJc2l6ZV90IGZpZm9fc2l6ZTsKKwlpbnQgaSwgbnVtX3VuaXRzOwor CWludCByZXQgPSAwOyAvKiBzaWxlbmNlIHdhcm5pbmcgKi8KKwlpbnQgbGVmdCwgcmlnaHQsIHRv cCwgYm90dG9tOworCisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZH QTNkQ21kQmxpdFN1cmZhY2VUb1NjcmVlbiBib2R5OworCX0gKmNtZDsKKwlTVkdBU2lnbmVkUmVj dCAqYmxpdHM7CisKKwludW1fdW5pdHMgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0Yywg JmRldl9wcml2LT5kZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwKKwkJCSAgICBoZWFkKSB7CisJ CWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmZnJhbWVidWZmZXItPmJhc2UpCisJCQljb250aW51 ZTsKKwkJdW5pdHNbbnVtX3VuaXRzKytdID0gdm13X2NydGNfdG9fZHUoY3J0Yyk7CisJfQorCisJ QlVHX09OKCFjbGlwcyB8fCAhbnVtX2NsaXBzKTsKKworCXRtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0 bXApICogbnVtX2NsaXBzLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodG1wID09IE5VTEwp KSB7CisJCURSTV9FUlJPUigiVGVtcG9yYXJ5IGNsaXByZWN0IG1lbW9yeSBhbGxvYyBmYWlsZWQu XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlmb19zaXplID0gc2l6ZW9mKCpjbWQp ICsgc2l6ZW9mKFNWR0FTaWduZWRSZWN0KSAqIG51bV9jbGlwczsKKwljbWQgPSBremFsbG9jKGZp Zm9fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlE Uk1fRVJST1IoIlRlbXBvcmFyeSBmaWZvIG1lbW9yeSBhbGxvYyBmYWlsZWQuXG4iKTsKKwkJcmV0 ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV90bXA7CisJfQorCisJLyogc2V0dXAgYmxpdHMg cG9pbnRlciAqLworCWJsaXRzID0gKFNWR0FTaWduZWRSZWN0ICopJmNtZFsxXTsKKworCS8qIGlu aXRpYWwgY2xpcCByZWdpb24gKi8KKwlsZWZ0ID0gY2xpcHMtPngxOworCXJpZ2h0ID0gY2xpcHMt PngyOworCXRvcCA9IGNsaXBzLT55MTsKKwlib3R0b20gPSBjbGlwcy0+eTI7CisKKwkvKiBza2lw IHRoZSBmaXJzdCBjbGlwIHJlY3QgKi8KKwlmb3IgKGkgPSAxLCBjbGlwc19wdHIgPSBjbGlwcyAr IGluYzsKKwkgICAgIGkgPCBudW1fY2xpcHM7IGkrKywgY2xpcHNfcHRyICs9IGluYykgeworCQls ZWZ0ID0gbWluX3QoaW50LCBsZWZ0LCAoaW50KWNsaXBzX3B0ci0+eDEpOworCQlyaWdodCA9IG1h eF90KGludCwgcmlnaHQsIChpbnQpY2xpcHNfcHRyLT54Mik7CisJCXRvcCA9IG1pbl90KGludCwg dG9wLCAoaW50KWNsaXBzX3B0ci0+eTEpOworCQlib3R0b20gPSBtYXhfdChpbnQsIGJvdHRvbSwg KGludCljbGlwc19wdHItPnkyKTsKKwl9CisKKwkvKiBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNl ICovCisJY21kLT5oZWFkZXIuaWQgPSBjcHVfdG9fbGUzMihTVkdBXzNEX0NNRF9CTElUX1NVUkZB Q0VfVE9fU0NSRUVOKTsKKwljbWQtPmhlYWRlci5zaXplID0gY3B1X3RvX2xlMzIoZmlmb19zaXpl IC0gc2l6ZW9mKGNtZC0+aGVhZGVyKSk7CisKKwljbWQtPmJvZHkuc3JjUmVjdC5sZWZ0ID0gbGVm dDsKKwljbWQtPmJvZHkuc3JjUmVjdC5yaWdodCA9IHJpZ2h0OworCWNtZC0+Ym9keS5zcmNSZWN0 LnRvcCA9IHRvcDsKKwljbWQtPmJvZHkuc3JjUmVjdC5ib3R0b20gPSBib3R0b207CisKKwljbGlw c19wdHIgPSBjbGlwczsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0 ciArPSBpbmMpIHsKKwkJdG1wW2ldLngxID0gY2xpcHNfcHRyLT54MSAtIGxlZnQ7CisJCXRtcFtp XS54MiA9IGNsaXBzX3B0ci0+eDIgLSBsZWZ0OworCQl0bXBbaV0ueTEgPSBjbGlwc19wdHItPnkx IC0gdG9wOworCQl0bXBbaV0ueTIgPSBjbGlwc19wdHItPnkyIC0gdG9wOworCX0KKworCS8qIGRv IHBlciB1bml0IHdyaXRpbmcsIHJldXNlIGZpZm8gZm9yIGVhY2ggKi8KKwlmb3IgKGkgPSAwOyBp IDwgbnVtX3VuaXRzOyBpKyspIHsKKwkJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKnVuaXQgPSB1 bml0c1tpXTsKKwkJc3RydWN0IHZtd19jbGlwX3JlY3QgY2xpcDsKKwkJaW50IG51bTsKKworCQlj bGlwLngxID0gbGVmdCAtIHVuaXQtPmNydGMueDsKKwkJY2xpcC55MSA9IHRvcCAtIHVuaXQtPmNy dGMueTsKKwkJY2xpcC54MiA9IHJpZ2h0IC0gdW5pdC0+Y3J0Yy54OworCQljbGlwLnkyID0gYm90 dG9tIC0gdW5pdC0+Y3J0Yy55OworCisJCS8qIHNraXAgYW55IGNydGNzIHRoYXQgbWlzc2VzIHRo ZSBjbGlwIHJlZ2lvbiAqLworCQlpZiAoY2xpcC54MSA+PSB1bml0LT5jcnRjLm1vZGUuaGRpc3Bs YXkgfHwKKwkJICAgIGNsaXAueTEgPj0gdW5pdC0+Y3J0Yy5tb2RlLnZkaXNwbGF5IHx8CisJCSAg ICBjbGlwLngyIDw9IDAgfHwgY2xpcC55MiA8PSAwKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogSW4gb3JkZXIgZm9yIHRoZSBjbGlwIHJlY3RzIHRvIGJlIGNvcnJlY3RseSBzY2FsZWQKKwkJ ICogdGhlIHNyYyBhbmQgZGVzdCByZWN0cyBuZWVkcyB0byBiZSB0aGUgc2FtZSBzaXplLgorCQkg Ki8KKwkJY21kLT5ib2R5LmRlc3RSZWN0LmxlZnQgPSBjbGlwLngxOworCQljbWQtPmJvZHkuZGVz dFJlY3QucmlnaHQgPSBjbGlwLngyOworCQljbWQtPmJvZHkuZGVzdFJlY3QudG9wID0gY2xpcC55 MTsKKwkJY21kLT5ib2R5LmRlc3RSZWN0LmJvdHRvbSA9IGNsaXAueTI7CisKKwkJLyogY3JlYXRl IGEgY2xpcCByZWN0IG9mIHRoZSBjcnRjIGluIGRlc3QgY29vcmRzICovCisJCWNsaXAueDIgPSB1 bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkgLSBjbGlwLngxOworCQljbGlwLnkyID0gdW5pdC0+Y3J0 Yy5tb2RlLnZkaXNwbGF5IC0gY2xpcC55MTsKKwkJY2xpcC54MSA9IDAgLSBjbGlwLngxOworCQlj bGlwLnkxID0gMCAtIGNsaXAueTE7CisKKwkJLyogbmVlZCB0byByZXNldCBzaWQgYXMgaXQgaXMg Y2hhbmdlZCBieSBleGVjYnVmICovCisJCWNtZC0+Ym9keS5zcmNJbWFnZS5zaWQgPSBjcHVfdG9f bGUzMihmcmFtZWJ1ZmZlci0+dXNlcl9oYW5kbGUpOworCQljbWQtPmJvZHkuZGVzdFNjcmVlbklk ID0gdW5pdC0+dW5pdDsKKworCQkvKiBjbGlwIGFuZCB3cml0ZSBibGl0cyB0byBjbWQgc3RyZWFt ICovCisJCXZtd19jbGlwX2NsaXByZWN0cyh0bXAsIG51bV9jbGlwcywgY2xpcCwgYmxpdHMsICZu dW0pOworCisJCS8qIGlmIG5vIGNsaXByZWN0cyBoaXQgc2tpcCB0aGlzICovCisJCWlmIChudW0g PT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIG9ubHkgcmV0dXJuIHRoZSBsYXN0IGZlbmNlICov CisJCWlmIChvdXRfZmVuY2UgJiYgKm91dF9mZW5jZSkKKwkJCXZtd19mZW5jZV9vYmpfdW5yZWZl cmVuY2Uob3V0X2ZlbmNlKTsKKworCQkvKiByZWNhbGN1bGF0ZSBwYWNrYWdlIGxlbmd0aCAqLwor CQlmaWZvX3NpemUgPSBzaXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQVNpZ25lZFJlY3QpICogbnVt OworCQljbWQtPmhlYWRlci5zaXplID0gY3B1X3RvX2xlMzIoZmlmb19zaXplIC0gc2l6ZW9mKGNt ZC0+aGVhZGVyKSk7CisJCXJldCA9IHZtd19leGVjYnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZf cHJpdiwgTlVMTCwgY21kLAorCQkJCQkgIGZpZm9fc2l6ZSwgMCwgTlVMTCwgb3V0X2ZlbmNlKTsK KworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJYnJlYWs7CisJfQorCisKKwlrZnJlZShj bWQpOworb3V0X2ZyZWVfdG1wOgorCWtmcmVlKHRtcCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBz dGF0aWMgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZtd19zY3JlZW5fb2JqZWN0X2NydGNfZnVuY3Mg PSB7CiAJLnNhdmUgPSB2bXdfZHVfY3J0Y19zYXZlLAogCS5yZXN0b3JlID0gdm13X2R1X2NydGNf cmVzdG9yZSwKQEAgLTM5OSw3ICs2NDMsNyBAQCBzdGF0aWMgc3RydWN0IGRybV9jcnRjX2Z1bmNz IHZtd19zY3JlZW5fb2JqZWN0X2NydGNfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IHZtd19kdV9j cnRjX2dhbW1hX3NldCwKIAkuZGVzdHJveSA9IHZtd19zb3VfY3J0Y19kZXN0cm95LAogCS5zZXRf Y29uZmlnID0gdm13X3NvdV9jcnRjX3NldF9jb25maWcsCi0JLnBhZ2VfZmxpcCA9IHZtd19kdV9w YWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9IHZtd19zb3VfY3J0Y19wYWdlX2ZsaXAsCiB9OwogCiAv KgpAQCAtNDI0LDcgKzY2OCw3IEBAIHN0YXRpYyB2b2lkIHZtd19zb3VfY29ubmVjdG9yX2Rlc3Ry b3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAl2bXdfc291X2Rlc3Ryb3kodm13 X2Nvbm5lY3Rvcl90b19zb3UoY29ubmVjdG9yKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9mdW5jcyB2bXdfbGVnYWN5X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB2bXdfc291X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKIAkuZHBt cyA9IHZtd19kdV9jb25uZWN0b3JfZHBtcywKIAkuc2F2ZSA9IHZtd19kdV9jb25uZWN0b3Jfc2F2 ZSwKIAkucmVzdG9yZSA9IHZtd19kdV9jb25uZWN0b3JfcmVzdG9yZSwKQEAgLTQ1OSw3ICs3MDMs NyBAQCBzdGF0aWMgaW50IHZtd19zb3VfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LCB1bnNpZ25lZCB1bml0KQogCXNvdS0+YmFzZS5wcmVmX21vZGUgPSBOVUxMOwogCXNvdS0+YmFz ZS5pc19pbXBsaWNpdCA9IHRydWU7CiAKLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0 b3IsICZ2bXdfbGVnYWN5X2Nvbm5lY3Rvcl9mdW5jcywKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2 LCBjb25uZWN0b3IsICZ2bXdfc291X2Nvbm5lY3Rvcl9mdW5jcywKIAkJCSAgIERSTV9NT0RFX0NP Tk5FQ1RPUl9WSVJUVUFMKTsKIAljb25uZWN0b3ItPnN0YXR1cyA9IHZtd19kdV9jb25uZWN0b3Jf ZGV0ZWN0KGNvbm5lY3RvciwgdHJ1ZSk7CiAKQEAgLTQ4Miw3ICs3MjYsNyBAQCBzdGF0aWMgaW50 IHZtd19zb3VfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCB1bml0 KQogCXJldHVybiAwOwogfQogCi1pbnQgdm13X2ttc19pbml0X3NjcmVlbl9vYmplY3RfZGlzcGxh eShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoraW50IHZtd19rbXNfc291X2luaXRfZGlz cGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCWludCBpLCByZXQ7CkBAIC01MTcsNyArNzYxLDkgQEAg aW50IHZtd19rbXNfaW5pdF9zY3JlZW5fb2JqZWN0X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdikKIAlmb3IgKGkgPSAwOyBpIDwgVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTOyAr K2kpCiAJCXZtd19zb3VfaW5pdChkZXZfcHJpdiwgaSk7CiAKLQlEUk1fSU5GTygiU2NyZWVuIG9i amVjdHMgc3lzdGVtIGluaXRpYWxpemVkXG4iKTsKKwlkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlf dW5pdCA9IHZtd19kdV9zY3JlZW5fb2JqZWN0OworCisJRFJNX0lORk8oIlNjcmVlbiBPYmplY3Rz IERpc3BsYXkgVW5pdCBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtNTMwLDcg Kzc3Niw3IEBAIGVycl9ub19tZW06CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHZtd19rbXNfY2xv c2Vfc2NyZWVuX29iamVjdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCitp bnQgdm13X2ttc19zb3VfY2xvc2VfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCkBAIC01NDQs MzUgKzc5MCwxNDMgQEAgaW50IHZtd19rbXNfY2xvc2Vfc2NyZWVuX29iamVjdF9kaXNwbGF5KHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogUmV0 dXJucyBpZiB0aGlzIHVuaXQgY2FuIGJlIHBhZ2UgZmxpcHBlZC4KLSAqIE11c3QgYmUgY2FsbGVk IHdpdGggdGhlIG1vZGVfY29uZmlnIG11dGV4IGhlbGQuCi0gKi8KLWJvb2wgdm13X2ttc19zY3Jl ZW5fb2JqZWN0X2ZsaXBwYWJsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAg ICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQorc3RhdGljIGludCBkb19kbWFidWZfZGVmaW5lX2dt cmZiKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiwKKwkJCQkgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQog ewotCXN0cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0ICpzb3UgPSB2bXdfY3J0Y190b19zb3Uo Y3J0Yyk7CisJaW50IGRlcHRoID0gZnJhbWVidWZmZXItPmJhc2UuZGVwdGg7CisJc2l6ZV90IGZp Zm9fc2l6ZTsKKwlpbnQgcmV0OwogCi0JaWYgKCFzb3UtPmJhc2UuaXNfaW1wbGljaXQpCi0JCXJl dHVybiB0cnVlOworCXN0cnVjdCB7CisJCXVpbnQzMl90IGhlYWRlcjsKKwkJU1ZHQUZpZm9DbWRE ZWZpbmVHTVJGQiBib2R5OworCX0gKmNtZDsKIAotCWlmIChkZXZfcHJpdi0+c291X3ByaXYtPm51 bV9pbXBsaWNpdCAhPSAxKQotCQlyZXR1cm4gZmFsc2U7CisJLyogRW11bGF0ZSBSR0JBIHN1cHBv cnQsIGNvbnRyYXJ5IHRvIHN2Z2FfcmVnLmggdGhpcyBpcyBub3QKKwkgKiBzdXBwb3J0ZWQgYnkg aG9zdHMuIFRoaXMgaXMgb25seSBhIHByb2JsZW0gaWYgd2UgYXJlIHJlYWRpbmcKKwkgKiB0aGlz IHZhbHVlIGxhdGVyIGFuZCBleHBlY3Rpbmcgd2hhdCB3ZSB1cGxvYWRlZCBiYWNrLgorCSAqLwor CWlmIChkZXB0aCA9PSAzMikKKwkJZGVwdGggPSAyNDsKIAotCXJldHVybiB0cnVlOworCWZpZm9f c2l6ZSA9IHNpemVvZigqY21kKTsKKwljbWQgPSBrbWFsbG9jKGZpZm9fc2l6ZSwgR0ZQX0tFUk5F TCk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBhbGxvY2F0ZSB0ZW1wb3JhcnkgY21kIGJ1ZmZlci5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwltZW1zZXQoY21kLCAwLCBmaWZvX3NpemUpOworCWNtZC0+aGVhZGVyID0gU1ZHQV9D TURfREVGSU5FX0dNUkZCOworCWNtZC0+Ym9keS5mb3JtYXQuYml0c1BlclBpeGVsID0gZnJhbWVi dWZmZXItPmJhc2UuYml0c19wZXJfcGl4ZWw7CisJY21kLT5ib2R5LmZvcm1hdC5jb2xvckRlcHRo ID0gZGVwdGg7CisJY21kLT5ib2R5LmZvcm1hdC5yZXNlcnZlZCA9IDA7CisJY21kLT5ib2R5LmJ5 dGVzUGVyTGluZSA9IGZyYW1lYnVmZmVyLT5iYXNlLnBpdGNoZXNbMF07CisJY21kLT5ib2R5LnB0 ci5nbXJJZCA9IGZyYW1lYnVmZmVyLT51c2VyX2hhbmRsZTsKKwljbWQtPmJvZHkucHRyLm9mZnNl dCA9IDA7CisKKwlyZXQgPSB2bXdfZXhlY2J1Zl9wcm9jZXNzKGZpbGVfcHJpdiwgZGV2X3ByaXYs IE5VTEwsIGNtZCwKKwkJCQkgIGZpZm9fc2l6ZSwgMCwgTlVMTCwgTlVMTCk7CisKKwlrZnJlZShj bWQpOworCisJcmV0dXJuIHJldDsKIH0KIAotLyoqCi0gKiBVcGRhdGUgdGhlIGltcGxpY2l0IGZi IHRvIHRoZSBjdXJyZW50IGZiIG9mIHRoaXMgY3J0Yy4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgg dGhlIG1vZGVfY29uZmlnIG11dGV4IGhlbGQuCi0gKi8KLXZvaWQgdm13X2ttc19zY3JlZW5fb2Jq ZWN0X3VwZGF0ZV9pbXBsaWNpdF9mYihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkJ CQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCitpbnQgdm13X2ttc19zb3VfZG9fZG1hYnVm X2RpcnR5KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJ CQkJdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCXN0cnVjdCBkcm1fY2xpcF9y ZWN0ICpjbGlwcywKKwkJCQl1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQsCisJCQkJ c3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRfZmVuY2UpCiB7Ci0Jc3RydWN0IHZtd19zY3JlZW5f b2JqZWN0X3VuaXQgKnNvdSA9IHZtd19jcnRjX3RvX3NvdShjcnRjKTsKKwlzdHJ1Y3Qgdm13X2Rp c3BsYXlfdW5pdCAqdW5pdHNbVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTXTsKKwlzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHNfcHRyOworCWludCBpLCBrLCBudW1fdW5pdHMsIHJldDsKKwlzdHJ1 Y3QgZHJtX2NydGMgKmNydGM7CisJc2l6ZV90IGZpZm9fc2l6ZTsKIAotCUJVR19PTighc291LT5i YXNlLmlzX2ltcGxpY2l0KTsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBoZWFkZXI7CisJCVNWR0FG aWZvQ21kQmxpdEdNUkZCVG9TY3JlZW4gYm9keTsKKwl9ICpibGl0czsKIAotCWRldl9wcml2LT5z b3VfcHJpdi0+aW1wbGljaXRfZmIgPQotCQl2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHNvdS0+YmFz ZS5jcnRjLnByaW1hcnktPmZiKTsKKwlyZXQgPSBkb19kbWFidWZfZGVmaW5lX2dtcmZiKGZpbGVf cHJpdiwgZGV2X3ByaXYsIGZyYW1lYnVmZmVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQor CQlyZXR1cm4gcmV0OyAvKiBkZWZpbmVfZ21yZmIgcHJpbnRzIHdhcm5pbmdzICovCisKKwlmaWZv X3NpemUgPSBzaXplb2YoKmJsaXRzKSAqIG51bV9jbGlwczsKKwlibGl0cyA9IGttYWxsb2MoZmlm b19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoYmxpdHMgPT0gTlVMTCkpIHsKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgdGVtcG9yYXJ5IGNtZCBidWZmZXIuXG4iKTsK KwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbnVtX3VuaXRzID0gMDsKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGNydGMsICZkZXZfcHJpdi0+ZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQp IHsKKwkJaWYgKGNydGMtPnByaW1hcnktPmZiICE9ICZmcmFtZWJ1ZmZlci0+YmFzZSkKKwkJCWNv bnRpbnVlOworCQl1bml0c1tudW1fdW5pdHMrK10gPSB2bXdfY3J0Y190b19kdShjcnRjKTsKKwl9 CisKKwlmb3IgKGsgPSAwOyBrIDwgbnVtX3VuaXRzOyBrKyspIHsKKwkJc3RydWN0IHZtd19kaXNw bGF5X3VuaXQgKnVuaXQgPSB1bml0c1trXTsKKwkJaW50IGhpdF9udW0gPSAwOworCisJCWNsaXBz X3B0ciA9IGNsaXBzOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0 ciArPSBpbmNyZW1lbnQpIHsKKwkJCWludCBjbGlwX3gxID0gY2xpcHNfcHRyLT54MSAtIHVuaXQt PmNydGMueDsKKwkJCWludCBjbGlwX3kxID0gY2xpcHNfcHRyLT55MSAtIHVuaXQtPmNydGMueTsK KwkJCWludCBjbGlwX3gyID0gY2xpcHNfcHRyLT54MiAtIHVuaXQtPmNydGMueDsKKwkJCWludCBj bGlwX3kyID0gY2xpcHNfcHRyLT55MiAtIHVuaXQtPmNydGMueTsKKwkJCWludCBtb3ZlX3gsIG1v dmVfeTsKKworCQkJLyogc2tpcCBhbnkgY3J0Y3MgdGhhdCBtaXNzZXMgdGhlIGNsaXAgcmVnaW9u ICovCisJCQlpZiAoY2xpcF94MSA+PSB1bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkgfHwKKwkJCSAg ICBjbGlwX3kxID49IHVuaXQtPmNydGMubW9kZS52ZGlzcGxheSB8fAorCQkJICAgIGNsaXBfeDIg PD0gMCB8fCBjbGlwX3kyIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCS8qIGNsaXAgc2l6ZSB0 byBjcnRjIHNpemUgKi8KKwkJCWNsaXBfeDIgPSBtaW5fdChpbnQsIGNsaXBfeDIsIHVuaXQtPmNy dGMubW9kZS5oZGlzcGxheSk7CisJCQljbGlwX3kyID0gbWluX3QoaW50LCBjbGlwX3kyLCB1bml0 LT5jcnRjLm1vZGUudmRpc3BsYXkpOworCisJCQkvKiB0cmFuc2xhdGUgYm90aCBzcmMgYW5kIGRl c3QgdG8gYnJpbmcgY2xpcCBpbnRvIHNjcmVlbiAqLworCQkJbW92ZV94ID0gbWluX3QoaW50LCBj bGlwX3gxLCAwKTsKKwkJCW1vdmVfeSA9IG1pbl90KGludCwgY2xpcF95MSwgMCk7CisKKwkJCS8q IGFjdHVhbCB0cmFuc2xhdGUgZG9uZSBoZXJlICovCisJCQlibGl0c1toaXRfbnVtXS5oZWFkZXIg PSBTVkdBX0NNRF9CTElUX0dNUkZCX1RPX1NDUkVFTjsKKwkJCWJsaXRzW2hpdF9udW1dLmJvZHku ZGVzdFNjcmVlbklkID0gdW5pdC0+dW5pdDsKKwkJCWJsaXRzW2hpdF9udW1dLmJvZHkuc3JjT3Jp Z2luLnggPSBjbGlwc19wdHItPngxIC0gbW92ZV94OworCQkJYmxpdHNbaGl0X251bV0uYm9keS5z cmNPcmlnaW4ueSA9IGNsaXBzX3B0ci0+eTEgLSBtb3ZlX3k7CisJCQlibGl0c1toaXRfbnVtXS5i b2R5LmRlc3RSZWN0LmxlZnQgPSBjbGlwX3gxIC0gbW92ZV94OworCQkJYmxpdHNbaGl0X251bV0u Ym9keS5kZXN0UmVjdC50b3AgPSBjbGlwX3kxIC0gbW92ZV95OworCQkJYmxpdHNbaGl0X251bV0u Ym9keS5kZXN0UmVjdC5yaWdodCA9IGNsaXBfeDI7CisJCQlibGl0c1toaXRfbnVtXS5ib2R5LmRl c3RSZWN0LmJvdHRvbSA9IGNsaXBfeTI7CisJCQloaXRfbnVtKys7CisJCX0KKworCQkvKiBubyBj bGlwcyBoaXQgdGhlIGNydGMgKi8KKwkJaWYgKGhpdF9udW0gPT0gMCkKKwkJCWNvbnRpbnVlOwor CisJCS8qIG9ubHkgcmV0dXJuIHRoZSBsYXN0IGZlbmNlICovCisJCWlmIChvdXRfZmVuY2UgJiYg Km91dF9mZW5jZSkKKwkJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVuY2Uob3V0X2ZlbmNlKTsKKwor CQlmaWZvX3NpemUgPSBzaXplb2YoKmJsaXRzKSAqIGhpdF9udW07CisJCXJldCA9IHZtd19leGVj YnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVMTCwgYmxpdHMsCisJCQkJCSAgZmlm b19zaXplLCAwLCBOVUxMLCBvdXRfZmVuY2UpOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CisJCQlicmVhazsKKwl9CisKKwlrZnJlZShibGl0cyk7CisKKwlyZXR1cm4gcmV0OwogfQorCi0t IAoyLjEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==