From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 16/28] drm/vmwgfx: Convert screen objects to the new helpers Date: Wed, 12 Aug 2015 22:43:05 -0700 Message-ID: <1439444597-4664-17-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 mx2.bahnhof.se (mx2.bahnhof.se [213.80.101.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 584A76EBEE for ; Wed, 12 Aug 2015 23:06:15 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx2-reinject (Postfix) with ESMTP id B35D64112B for ; Thu, 13 Aug 2015 07:43:34 +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 iCD297Afp6D1 for ; Thu, 13 Aug 2015 07:43:25 +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 B8CD73E8CF1 for ; Thu, 13 Aug 2015 07:43:25 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 86CD13DC002 for ; Thu, 13 Aug 2015 07:43:25 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 4E94F3F4004 for ; Thu, 13 Aug 2015 07:43:25 +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 VGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb24gZm9yIHN1cmZh Y2UgZGlydHkgYW5kCnByZXNlbnQuIEFsc28gZml4ZXMgcGFnZSBmbGlwIHdpdGhvdXQgZXZlbnRz LgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29t PgpSZXZpZXdlZC1ieTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggIHwgICA2IC0KIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ttcy5jICB8IDMxOSArKystLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggIHwgIDMzICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9zY3JuLmMgfCA2NDIgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0K IDQgZmlsZXMgY2hhbmdlZCwgNDQ0IGluc2VydGlvbnMoKyksIDU1NiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDc1MDRmOTIuLmQ2MGFlMjAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC05NTIsMTIgKzk1Miw2IEBAIGludCB2bXdf a21zX3ByZXNlbnQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgIHVpbnQzMl90 IHNpZCwgaW50MzJfdCBkZXN0WCwgaW50MzJfdCBkZXN0WSwKIAkJICAgIHN0cnVjdCBkcm1fdm13 X3JlY3QgKmNsaXBzLAogCQkgICAgdWludDMyX3QgbnVtX2NsaXBzKTsKLWludCB2bXdfa21zX3Jl YWRiYWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCSAgICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYsCi0JCSAgICAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqdmZiLAotCQkg ICAgIHN0cnVjdCBkcm1fdm13X2ZlbmNlX3JlcCBfX3VzZXIgKnVzZXJfZmVuY2VfcmVwLAotCQkg ICAgIHN0cnVjdCBkcm1fdm13X3JlY3QgKmNsaXBzLAotCQkgICAgIHVpbnQzMl90IG51bV9jbGlw cyk7CiBpbnQgdm13X2ttc191cGRhdGVfbGF5b3V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsCiAJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyBiL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCmluZGV4IGM0NmM2ODguLjU5MDFkMzIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCkBAIC0zMSw0MSArMzEsNiBAQAogLyogTWlnaHQgbmVl ZCBhIGhydGltZXIgaGVyZT8gKi8KICNkZWZpbmUgVk1XR0ZYX1BSRVNFTlRfUkFURSAoKEhaIC8g NjAgPiAwKSA/IEhaIC8gNjAgOiAxKQogCi0KLQotLyoqCi0gKiBDbGlwIEBudW1fcmVjdHMgbnVt YmVyIG9mIEByZWN0cyBhZ2FpbnN0IEBjbGlwIHN0b3JpbmcgdGhlCi0gKiByZXN1bHRzIGluIEBv dXRfcmVjdHMgYW5kIHRoZSBudW1iZXIgb2YgcGFzc2VkIHJlY3RzIGluIEBvdXRfbnVtLgotICov Ci12b2lkIHZtd19jbGlwX2NsaXByZWN0cyhzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdHMsCi0J CQlpbnQgbnVtX3JlY3RzLAotCQkJc3RydWN0IHZtd19jbGlwX3JlY3QgY2xpcCwKLQkJCVNWR0FT aWduZWRSZWN0ICpvdXRfcmVjdHMsCi0JCQlpbnQgKm91dF9udW0pCi17Ci0JaW50IGksIGs7Ci0K LQlmb3IgKGkgPSAwLCBrID0gMDsgaSA8IG51bV9yZWN0czsgaSsrKSB7Ci0JCWludCB4MSA9IG1h eF90KGludCwgY2xpcC54MSwgcmVjdHNbaV0ueDEpOwotCQlpbnQgeTEgPSBtYXhfdChpbnQsIGNs aXAueTEsIHJlY3RzW2ldLnkxKTsKLQkJaW50IHgyID0gbWluX3QoaW50LCBjbGlwLngyLCByZWN0 c1tpXS54Mik7Ci0JCWludCB5MiA9IG1pbl90KGludCwgY2xpcC55MiwgcmVjdHNbaV0ueTIpOwot Ci0JCWlmICh4MSA+PSB4MikKLQkJCWNvbnRpbnVlOwotCQlpZiAoeTEgPj0geTIpCi0JCQljb250 aW51ZTsKLQotCQlvdXRfcmVjdHNba10ubGVmdCAgID0geDE7Ci0JCW91dF9yZWN0c1trXS50b3Ag ICAgPSB5MTsKLQkJb3V0X3JlY3RzW2tdLnJpZ2h0ICA9IHgyOwotCQlvdXRfcmVjdHNba10uYm90 dG9tID0geTI7Ci0JCWsrKzsKLQl9Ci0KLQkqb3V0X251bSA9IGs7Ci19Ci0KIHZvaWQgdm13X2R1 X2NsZWFudXAoc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1KQogewogCWlmIChkdS0+Y3Vyc29y X3N1cmZhY2UpCkBAIC00NTgsMTEgKzQyMyw5IEBAIHN0YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVy X3N1cmZhY2VfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCiAJfQog CiAJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fb2Jq ZWN0KQotCQlyZXQgPSB2bXdfa21zX3NvdV9kb19zdXJmYWNlX2RpcnR5KGRldl9wcml2LCBmaWxl X3ByaXYsCi0JCQkJCQkgICAmdmZicy0+YmFzZSwKLQkJCQkJCSAgIGZsYWdzLCBjb2xvciwKLQkJ CQkJCSAgIGNsaXBzLCBudW1fY2xpcHMsCi0JCQkJCQkgICBpbmMsIE5VTEwpOworCQlyZXQgPSB2 bXdfa21zX3NvdV9kb19zdXJmYWNlX2RpcnR5KGRldl9wcml2LCAmdmZicy0+YmFzZSwKKwkJCQkJ CSAgIGNsaXBzLCBOVUxMLCBOVUxMLCAwLCAwLAorCQkJCQkJICAgbnVtX2NsaXBzLCBpbmMsIE5V TEwpOwogCWVsc2UKIAkJcmV0ID0gdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkoZGV2X3By aXYsIGZpbGVfcHJpdiwKIAkJCQkJCSAgICAmdmZicy0+YmFzZSwKQEAgLTQ3Nyw2ICs0NDAsNDIg QEAgc3RhdGljIGludCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9kaXJ0eShzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiB2bXdfa21z X3JlYWRiYWNrIC0gUGVyZm9ybSBhIHJlYWRiYWNrIGZyb20gdGhlIHNjcmVlbiBzeXN0ZW0gdG8K KyAqIGEgZG1hLWJ1ZmZlciBiYWNrZWQgZnJhbWVidWZmZXIuCisgKgorICogQGRldl9wcml2OiBQ b2ludGVyIHRvIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKiBAZmlsZV9wcml2OiBQ b2ludGVyIHRvIGEgc3RydWN0IGRybV9maWxlIGlkZW50aWZ5aW5nIHRoZSBjYWxsZXIuCisgKiBN dXN0IGJlIHNldCB0byBOVUxMIGlmIEB1c2VyX2ZlbmNlX3JlcCBpcyBOVUxMLgorICogQHZmYjog UG9pbnRlciB0byB0aGUgZG1hLWJ1ZmZlciBiYWNrZWQgZnJhbWVidWZmZXIuCisgKiBAdXNlcl9m ZW5jZV9yZXA6IFVzZXItc3BhY2UgcHJvdmlkZWQgc3RydWN0dXJlIGZvciBmZW5jZSBpbmZvcm1h dGlvbi4KKyAqIE11c3QgYmUgc2V0IHRvIG5vbi1OVUxMIGlmIEBmaWxlX3ByaXYgaXMgbm9uLU5V TEwuCisgKiBAdmNsaXBzOiBBcnJheSBvZiBjbGlwIHJlY3RzLgorICogQG51bV9jbGlwczogTnVt YmVyIG9mIGNsaXAgcmVjdHMgaW4gQHZjbGlwcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiAtRVJFU1RBUlRTWVMgaWYKKyAqIGlu dGVycnVwdGVkLgorICovCitpbnQgdm13X2ttc19yZWFkYmFjayhzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgIHN0 cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKKwkJICAgICBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9y ZXAgX191c2VyICp1c2VyX2ZlbmNlX3JlcCwKKwkJICAgICBzdHJ1Y3QgZHJtX3Ztd19yZWN0ICp2 Y2xpcHMsCisJCSAgICAgdWludDMyX3QgbnVtX2NsaXBzKQoreworCXN3aXRjaCAoZGV2X3ByaXYt PmFjdGl2ZV9kaXNwbGF5X3VuaXQpIHsKKwljYXNlIHZtd19kdV9zY3JlZW5fb2JqZWN0OgorCQly ZXR1cm4gdm13X2ttc19zb3VfcmVhZGJhY2soZGV2X3ByaXYsIGZpbGVfcHJpdiwgdmZiLAorCQkJ CQkgICAgdXNlcl9mZW5jZV9yZXAsIHZjbGlwcywgbnVtX2NsaXBzKTsKKwlkZWZhdWx0OgorCQlX QVJOX09OQ0UodHJ1ZSwKKwkJCSAgIlJlYWRiYWNrIGNhbGxlZCB3aXRoIGludmFsaWQgZGlzcGxh eSBzeXN0ZW0uXG4iKTsKKwl9CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworCiBzdGF0aWMgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9mdW5jcyA9 IHsKIAkuZGVzdHJveSA9IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlX2Rlc3Ryb3ksCiAJLmRpcnR5 ID0gdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2VfZGlydHksCkBAIC02MzgsMTAgKzYzNyw5IEBAIHN0 YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmcmFtZWJ1ZmZlciwKIAkJCQkJCSAgZmxhZ3MsIGNvbG9yLAogCQkJCQkJICBjbGlwcywg bnVtX2NsaXBzLCBpbmNyZW1lbnQpOwogCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNw bGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl9vYmplY3QpIHsKLQkJcmV0ID0gdm13X2ttc19zb3Vf ZG9fZG1hYnVmX2RpcnR5KGZpbGVfcHJpdiwgZGV2X3ByaXYsCi0JCQkJCQkgICZ2ZmJkLT5iYXNl LAotCQkJCQkJICBmbGFncywgY29sb3IsCisJCXJldCA9IHZtd19rbXNfc291X2RvX2RtYWJ1Zl9k aXJ0eShkZXZfcHJpdiwgJnZmYmQtPmJhc2UsCiAJCQkJCQkgIGNsaXBzLCBudW1fY2xpcHMsIGlu Y3JlbWVudCwKKwkJCQkJCSAgdHJ1ZSwKIAkJCQkJCSAgTlVMTCk7CiAJfSBlbHNlIHsKIAkJcmV0 ID0gdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkoZGV2X3ByaXYsIGZpbGVfcHJpdiwKQEAg LTk4NCwxMzEgKzk4Miw5IEBAIGludCB2bXdfa21zX2dlbmVyaWNfcHJlc2VudChzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgc3RydWN0IGRybV92bXdfcmVjdCAqY2xpcHMsCiAJ CSAgICB1aW50MzJfdCBudW1fY2xpcHMpCiB7Ci0Jc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKnVu aXRzW1ZNV0dGWF9OVU1fRElTUExBWV9VTklUU107Ci0Jc3RydWN0IGRybV9jbGlwX3JlY3QgKnRt cDsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc2l6ZV90IGZpZm9fc2l6ZTsKLQlpbnQgaSwg aywgbnVtX3VuaXRzOwotCWludCByZXQgPSAwOyAvKiBzaWxlbmNlIHdhcm5pbmcgKi8KLQlpbnQg bGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tOwotCi0Jc3RydWN0IHsKLQkJU1ZHQTNkQ21kSGVhZGVy IGhlYWRlcjsKLQkJU1ZHQTNkQ21kQmxpdFN1cmZhY2VUb1NjcmVlbiBib2R5OwotCX0gKmNtZDsK LQlTVkdBU2lnbmVkUmVjdCAqYmxpdHM7Ci0KLQludW1fdW5pdHMgPSAwOwotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY3J0YywgJmRldl9wcml2LT5kZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVh ZCkgewotCQlpZiAoY3J0Yy0+cHJpbWFyeS0+ZmIgIT0gJnZmYi0+YmFzZSkKLQkJCWNvbnRpbnVl OwotCQl1bml0c1tudW1fdW5pdHMrK10gPSB2bXdfY3J0Y190b19kdShjcnRjKTsKLQl9Ci0KLQlC VUdfT04oc3VyZmFjZSA9PSBOVUxMKTsKLQlCVUdfT04oIWNsaXBzIHx8ICFudW1fY2xpcHMpOwot Ci0JdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCkgKiBudW1fY2xpcHMsIEdGUF9LRVJORUwpOwot CWlmICh1bmxpa2VseSh0bXAgPT0gTlVMTCkpIHsKLQkJRFJNX0VSUk9SKCJUZW1wb3JhcnkgY2xp cHJlY3QgbWVtb3J5IGFsbG9jIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0K LQlmaWZvX3NpemUgPSBzaXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQVNpZ25lZFJlY3QpICogbnVt X2NsaXBzOwotCWNtZCA9IGttYWxsb2MoZmlmb19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5s aWtlbHkoY21kID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHRl bXBvcmFyeSBmaWZvIG1lbW9yeS5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9m cmVlX3RtcDsKLQl9Ci0KLQlsZWZ0ID0gY2xpcHMtPng7Ci0JcmlnaHQgPSBjbGlwcy0+eCArIGNs aXBzLT53OwotCXRvcCA9IGNsaXBzLT55OwotCWJvdHRvbSA9IGNsaXBzLT55ICsgY2xpcHMtPmg7 Ci0KLQlmb3IgKGkgPSAxOyBpIDwgbnVtX2NsaXBzOyBpKyspIHsKLQkJbGVmdCA9IG1pbl90KGlu dCwgbGVmdCwgKGludCljbGlwc1tpXS54KTsKLQkJcmlnaHQgPSBtYXhfdChpbnQsIHJpZ2h0LCAo aW50KWNsaXBzW2ldLnggKyBjbGlwc1tpXS53KTsKLQkJdG9wID0gbWluX3QoaW50LCB0b3AsIChp bnQpY2xpcHNbaV0ueSk7Ci0JCWJvdHRvbSA9IG1heF90KGludCwgYm90dG9tLCAoaW50KWNsaXBz W2ldLnkgKyBjbGlwc1tpXS5oKTsKLQl9Ci0KLQkvKiBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNl ICovCi0JbWVtc2V0KGNtZCwgMCwgZmlmb19zaXplKTsKLQljbWQtPmhlYWRlci5pZCA9IGNwdV90 b19sZTMyKFNWR0FfM0RfQ01EX0JMSVRfU1VSRkFDRV9UT19TQ1JFRU4pOwotCi0JYmxpdHMgPSAo U1ZHQVNpZ25lZFJlY3QgKikmY21kWzFdOwotCi0JY21kLT5ib2R5LnNyY1JlY3QubGVmdCA9IGxl ZnQ7Ci0JY21kLT5ib2R5LnNyY1JlY3QucmlnaHQgPSByaWdodDsKLQljbWQtPmJvZHkuc3JjUmVj dC50b3AgPSB0b3A7Ci0JY21kLT5ib2R5LnNyY1JlY3QuYm90dG9tID0gYm90dG9tOwotCi0JZm9y IChpID0gMDsgaSA8IG51bV9jbGlwczsgaSsrKSB7Ci0JCXRtcFtpXS54MSA9IGNsaXBzW2ldLngg LSBsZWZ0OwotCQl0bXBbaV0ueDIgPSBjbGlwc1tpXS54ICsgY2xpcHNbaV0udyAtIGxlZnQ7Ci0J CXRtcFtpXS55MSA9IGNsaXBzW2ldLnkgLSB0b3A7Ci0JCXRtcFtpXS55MiA9IGNsaXBzW2ldLnkg KyBjbGlwc1tpXS5oIC0gdG9wOwotCX0KLQotCWZvciAoayA9IDA7IGsgPCBudW1fdW5pdHM7IGsr KykgewotCQlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqdW5pdCA9IHVuaXRzW2tdOwotCQlzdHJ1 Y3Qgdm13X2NsaXBfcmVjdCBjbGlwOwotCQlpbnQgbnVtOwotCi0JCWNsaXAueDEgPSBsZWZ0ICsg ZGVzdFggLSB1bml0LT5jcnRjLng7Ci0JCWNsaXAueTEgPSB0b3AgKyBkZXN0WSAtIHVuaXQtPmNy dGMueTsKLQkJY2xpcC54MiA9IHJpZ2h0ICsgZGVzdFggLSB1bml0LT5jcnRjLng7Ci0JCWNsaXAu eTIgPSBib3R0b20gKyBkZXN0WSAtIHVuaXQtPmNydGMueTsKLQotCQkvKiBza2lwIGFueSBjcnRj cyB0aGF0IG1pc3NlcyB0aGUgY2xpcCByZWdpb24gKi8KLQkJaWYgKGNsaXAueDEgPj0gdW5pdC0+ Y3J0Yy5tb2RlLmhkaXNwbGF5IHx8Ci0JCSAgICBjbGlwLnkxID49IHVuaXQtPmNydGMubW9kZS52 ZGlzcGxheSB8fAotCQkgICAgY2xpcC54MiA8PSAwIHx8IGNsaXAueTIgPD0gMCkKLQkJCWNvbnRp bnVlOwotCi0JCS8qCi0JCSAqIEluIG9yZGVyIGZvciB0aGUgY2xpcCByZWN0cyB0byBiZSBjb3Jy ZWN0bHkgc2NhbGVkCi0JCSAqIHRoZSBzcmMgYW5kIGRlc3QgcmVjdHMgbmVlZHMgdG8gYmUgdGhl IHNhbWUgc2l6ZS4KLQkJICovCi0JCWNtZC0+Ym9keS5kZXN0UmVjdC5sZWZ0ID0gY2xpcC54MTsK LQkJY21kLT5ib2R5LmRlc3RSZWN0LnJpZ2h0ID0gY2xpcC54MjsKLQkJY21kLT5ib2R5LmRlc3RS ZWN0LnRvcCA9IGNsaXAueTE7Ci0JCWNtZC0+Ym9keS5kZXN0UmVjdC5ib3R0b20gPSBjbGlwLnky OwotCi0JCS8qIGNyZWF0ZSBhIGNsaXAgcmVjdCBvZiB0aGUgY3J0YyBpbiBkZXN0IGNvb3JkcyAq LwotCQljbGlwLngyID0gdW5pdC0+Y3J0Yy5tb2RlLmhkaXNwbGF5IC0gY2xpcC54MTsKLQkJY2xp cC55MiA9IHVuaXQtPmNydGMubW9kZS52ZGlzcGxheSAtIGNsaXAueTE7Ci0JCWNsaXAueDEgPSAw IC0gY2xpcC54MTsKLQkJY2xpcC55MSA9IDAgLSBjbGlwLnkxOwotCi0JCS8qIG5lZWQgdG8gcmVz ZXQgc2lkIGFzIGl0IGlzIGNoYW5nZWQgYnkgZXhlY2J1ZiAqLwotCQljbWQtPmJvZHkuc3JjSW1h Z2Uuc2lkID0gc2lkOwotCQljbWQtPmJvZHkuZGVzdFNjcmVlbklkID0gdW5pdC0+dW5pdDsKLQot CQkvKiBjbGlwIGFuZCB3cml0ZSBibGl0cyB0byBjbWQgc3RyZWFtICovCi0JCXZtd19jbGlwX2Ns aXByZWN0cyh0bXAsIG51bV9jbGlwcywgY2xpcCwgYmxpdHMsICZudW0pOwotCi0JCS8qIGlmIG5v IGNsaXByZWN0cyBoaXQgc2tpcCB0aGlzICovCi0JCWlmIChudW0gPT0gMCkKLQkJCWNvbnRpbnVl OwotCi0JCS8qIHJlY2FsY3VsYXRlIHBhY2thZ2UgbGVuZ3RoICovCi0JCWZpZm9fc2l6ZSA9IHNp emVvZigqY21kKSArIHNpemVvZihTVkdBU2lnbmVkUmVjdCkgKiBudW07Ci0JCWNtZC0+aGVhZGVy LnNpemUgPSBjcHVfdG9fbGUzMihmaWZvX3NpemUgLSBzaXplb2YoY21kLT5oZWFkZXIpKTsKLQkJ cmV0ID0gdm13X2V4ZWNidWZfcHJvY2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLCBjbWQs Ci0JCQkJCSAgZmlmb19zaXplLCAwLCAwLCBOVUxMLCBOVUxMKTsKLQotCQlpZiAodW5saWtlbHko cmV0ICE9IDApKQotCQkJYnJlYWs7Ci0JfQotCi0Ja2ZyZWUoY21kKTsKLW91dF9mcmVlX3RtcDoK LQlrZnJlZSh0bXApOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdm13X2ttc19zb3VfZG9fc3Vy ZmFjZV9kaXJ0eShkZXZfcHJpdiwgdmZiLCBOVUxMLCBjbGlwcywKKwkJCQkJICAgICZzdXJmYWNl LT5yZXMsIGRlc3RYLCBkZXN0WSwKKwkJCQkJICAgIG51bV9jbGlwcywgMSwgTlVMTCk7CiB9CiAK IGludCB2bXdfa21zX3ByZXNlbnQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTEx MzcsMTEzICsxMDEzLDYgQEAgaW50IHZtd19rbXNfcHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAogCXJldHVybiAwOwogfQogCi1pbnQgdm13X2ttc19yZWFkYmFjayhzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAotCQkgICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKLQkJICAgICBzdHJ1Y3QgZHJt X3Ztd19mZW5jZV9yZXAgX191c2VyICp1c2VyX2ZlbmNlX3JlcCwKLQkJICAgICBzdHJ1Y3QgZHJt X3Ztd19yZWN0ICpjbGlwcywKLQkJICAgICB1aW50MzJfdCBudW1fY2xpcHMpCi17Ci0Jc3RydWN0 IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWYgKnZmYmQgPQotCQl2bXdfZnJhbWVidWZmZXJfdG9fdmZi ZCgmdmZiLT5iYXNlKTsKLQlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmRtYWJ1ZiA9IHZmYmQtPmJ1 ZmZlcjsKLQlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqdW5pdHNbVk1XR0ZYX05VTV9ESVNQTEFZ X1VOSVRTXTsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc2l6ZV90IGZpZm9fc2l6ZTsKLQlp bnQgaSwgaywgcmV0LCBudW1fdW5pdHMsIGJsaXRzX3BvczsKLQotCXN0cnVjdCB7Ci0JCXVpbnQz Ml90IGhlYWRlcjsKLQkJU1ZHQUZpZm9DbWREZWZpbmVHTVJGQiBib2R5OwotCX0gKmNtZDsKLQlz dHJ1Y3QgewotCQl1aW50MzJfdCBoZWFkZXI7Ci0JCVNWR0FGaWZvQ21kQmxpdFNjcmVlblRvR01S RkIgYm9keTsKLQl9ICpibGl0czsKLQotCW51bV91bml0cyA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9l bnRyeShjcnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7 Ci0JCWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmdmZiLT5iYXNlKQotCQkJY29udGludWU7Ci0J CXVuaXRzW251bV91bml0cysrXSA9IHZtd19jcnRjX3RvX2R1KGNydGMpOwotCX0KLQotCUJVR19P TihkbWFidWYgPT0gTlVMTCk7Ci0JQlVHX09OKCFjbGlwcyB8fCAhbnVtX2NsaXBzKTsKLQotCS8q IHRha2UgYSBzYWZlIGd1ZXNzIGF0IGZpZm8gc2l6ZSAqLwotCWZpZm9fc2l6ZSA9IHNpemVvZigq Y21kKSArIHNpemVvZigqYmxpdHMpICogbnVtX2NsaXBzICogbnVtX3VuaXRzOwotCWNtZCA9IGtt YWxsb2MoZmlmb19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoY21kID09IE5VTEwp KSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBmaWZvIG1lbW9y eS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY21kLCAwLCBmaWZvX3Np emUpOwotCWNtZC0+aGVhZGVyID0gU1ZHQV9DTURfREVGSU5FX0dNUkZCOwotCWNtZC0+Ym9keS5m b3JtYXQuYml0c1BlclBpeGVsID0gdmZiLT5iYXNlLmJpdHNfcGVyX3BpeGVsOwotCWNtZC0+Ym9k eS5mb3JtYXQuY29sb3JEZXB0aCA9IHZmYi0+YmFzZS5kZXB0aDsKLQljbWQtPmJvZHkuZm9ybWF0 LnJlc2VydmVkID0gMDsKLQljbWQtPmJvZHkuYnl0ZXNQZXJMaW5lID0gdmZiLT5iYXNlLnBpdGNo ZXNbMF07Ci0JY21kLT5ib2R5LnB0ci5nbXJJZCA9IHZmYi0+dXNlcl9oYW5kbGU7Ci0JY21kLT5i b2R5LnB0ci5vZmZzZXQgPSAwOwotCi0JYmxpdHMgPSAodm9pZCAqKSZjbWRbMV07Ci0JYmxpdHNf cG9zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3VuaXRzOyBpKyspIHsKLQkJc3RydWN0IGRy bV92bXdfcmVjdCAqYyA9IGNsaXBzOwotCQlmb3IgKGsgPSAwOyBrIDwgbnVtX2NsaXBzOyBrKyss IGMrKykgewotCQkJLyogdHJhbnNmb3JtIGNsaXAgY29vcmRzIHRvIGNydGMgb3JpZ2luIGJhc2Vk IGNvb3JkcyAqLwotCQkJaW50IGNsaXBfeDEgPSBjLT54IC0gdW5pdHNbaV0tPmNydGMueDsKLQkJ CWludCBjbGlwX3gyID0gYy0+eCAtIHVuaXRzW2ldLT5jcnRjLnggKyBjLT53OwotCQkJaW50IGNs aXBfeTEgPSBjLT55IC0gdW5pdHNbaV0tPmNydGMueTsKLQkJCWludCBjbGlwX3kyID0gYy0+eSAt IHVuaXRzW2ldLT5jcnRjLnkgKyBjLT5oOwotCQkJaW50IGRlc3RfeCA9IGMtPng7Ci0JCQlpbnQg ZGVzdF95ID0gYy0+eTsKLQotCQkJLyogY29tcGVuc2F0ZSBmb3IgY2xpcHBpbmcsIHdlIG5lZ2F0 ZQotCQkJICogYSBuZWdhdGl2ZSBudW1iZXIgYW5kIGFkZCB0aGF0LgotCQkJICovCi0JCQlpZiAo Y2xpcF94MSA8IDApCi0JCQkJZGVzdF94ICs9IC1jbGlwX3gxOwotCQkJaWYgKGNsaXBfeTEgPCAw KQotCQkJCWRlc3RfeSArPSAtY2xpcF95MTsKLQotCQkJLyogY2xpcCAqLwotCQkJY2xpcF94MSA9 IG1heChjbGlwX3gxLCAwKTsKLQkJCWNsaXBfeTEgPSBtYXgoY2xpcF95MSwgMCk7Ci0JCQljbGlw X3gyID0gbWluKGNsaXBfeDIsIHVuaXRzW2ldLT5jcnRjLm1vZGUuaGRpc3BsYXkpOwotCQkJY2xp cF95MiA9IG1pbihjbGlwX3kyLCB1bml0c1tpXS0+Y3J0Yy5tb2RlLnZkaXNwbGF5KTsKLQotCQkJ LyogYW5kIGN1bGwgYW55IHJlY3RzIHRoYXQgbWlzc2VzIHRoZSBjcnRjICovCi0JCQlpZiAoY2xp cF94MSA+PSB1bml0c1tpXS0+Y3J0Yy5tb2RlLmhkaXNwbGF5IHx8Ci0JCQkgICAgY2xpcF95MSA+ PSB1bml0c1tpXS0+Y3J0Yy5tb2RlLnZkaXNwbGF5IHx8Ci0JCQkgICAgY2xpcF94MiA8PSAwIHx8 IGNsaXBfeTIgPD0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJYmxpdHNbYmxpdHNfcG9zXS5oZWFk ZXIgPSBTVkdBX0NNRF9CTElUX1NDUkVFTl9UT19HTVJGQjsKLQkJCWJsaXRzW2JsaXRzX3Bvc10u Ym9keS5zcmNTY3JlZW5JZCA9IHVuaXRzW2ldLT51bml0OwotCQkJYmxpdHNbYmxpdHNfcG9zXS5i b2R5LmRlc3RPcmlnaW4ueCA9IGRlc3RfeDsKLQkJCWJsaXRzW2JsaXRzX3Bvc10uYm9keS5kZXN0 T3JpZ2luLnkgPSBkZXN0X3k7Ci0KLQkJCWJsaXRzW2JsaXRzX3Bvc10uYm9keS5zcmNSZWN0Lmxl ZnQgPSBjbGlwX3gxOwotCQkJYmxpdHNbYmxpdHNfcG9zXS5ib2R5LnNyY1JlY3QudG9wID0gY2xp cF95MTsKLQkJCWJsaXRzW2JsaXRzX3Bvc10uYm9keS5zcmNSZWN0LnJpZ2h0ID0gY2xpcF94MjsK LQkJCWJsaXRzW2JsaXRzX3Bvc10uYm9keS5zcmNSZWN0LmJvdHRvbSA9IGNsaXBfeTI7Ci0JCQli bGl0c19wb3MrKzsKLQkJfQotCX0KLQkvKiByZXNldCBzaXplIGhlcmUgYW5kIHVzZSBjYWxjdWxh dGVkIGV4YWN0IHNpemUgZnJvbSBsb29wcyAqLwotCWZpZm9fc2l6ZSA9IHNpemVvZigqY21kKSAr IHNpemVvZigqYmxpdHMpICogYmxpdHNfcG9zOwotCi0JcmV0ID0gdm13X2V4ZWNidWZfcHJvY2Vz cyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLCBjbWQsIGZpZm9fc2l6ZSwKLQkJCQkgIDAsIDAs IHVzZXJfZmVuY2VfcmVwLCBOVUxMKTsKLQotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmV0Owot fQotCiBpbnQgdm13X2ttc19pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2ttcy5oCmluZGV4IGMxOWE1MTUuLjhhODIwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2ttcy5oCkBAIC0xMjYsMTUgKzEyNiw2IEBAIHN0cnVjdCB2bXdfZnJhbWVidWZmZXJf ZG1hYnVmIHsKIAogCiAvKgotICogQmFzaWMgY2xpcCByZWN0IG1hbmlwdWxhdGlvbgotICovCi12 b2lkIHZtd19jbGlwX2NsaXByZWN0cyhzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdHMsCi0JCQlp bnQgbnVtX3JlY3RzLAotCQkJc3RydWN0IHZtd19jbGlwX3JlY3QgY2xpcCwKLQkJCVNWR0FTaWdu ZWRSZWN0ICpvdXRfcmVjdHMsCi0JCQlpbnQgKm91dF9udW0pOwotCi0vKgogICogQmFzaWMgY3Vy c29yIG1hbmlwdWxhdGlvbgogICovCiBpbnQgdm13X2N1cnNvcl91cGRhdGVfaW1hZ2Uoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTI0MSw2ICsyMzIsMTIgQEAgaW50IHZtd19rbXNf aGVscGVyX3Jlc291cmNlX3ByZXBhcmUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAogdm9pZCB2 bXdfa21zX2hlbHBlcl9yZXNvdXJjZV9yZXZlcnQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsK IHZvaWQgdm13X2ttc19oZWxwZXJfcmVzb3VyY2VfZmluaXNoKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KnJlcywKIAkJCQkgICAgc3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRfZmVuY2UpOworaW50IHZt d19rbXNfcmVhZGJhY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2 ZmIsCisJCSAgICAgc3RydWN0IGRybV92bXdfZmVuY2VfcmVwIF9fdXNlciAqdXNlcl9mZW5jZV9y ZXAsCisJCSAgICAgc3RydWN0IGRybV92bXdfcmVjdCAqdmNsaXBzLAorCQkgICAgIHVpbnQzMl90 IG51bV9jbGlwcyk7CiAKIC8qCiAgKiBMZWdhY3kgZGlzcGxheSB1bml0IGZ1bmN0aW9ucyAtIHZt d2dmeF9sZHUuYwpAQCAtMjU5LDIwICsyNTYsMjYgQEAgaW50IHZtd19rbXNfbGR1X2RvX2RtYWJ1 Zl9kaXJ0eShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogaW50IHZtd19rbXNfc291X2lu aXRfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKIGludCB2bXdfa21zX3Nv dV9jbG9zZV9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IHZtd19r bXNfc291X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJ CQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkJIHN0cnVjdCB2bXdfZnJhbWVidWZm ZXIgKmZyYW1lYnVmZmVyLAotCQkJCSB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCiAJ CQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCQkgc3RydWN0IGRybV92bXdfcmVj dCAqdmNsaXBzLAorCQkJCSBzdHJ1Y3Qgdm13X3Jlc291cmNlICpzcmYsCisJCQkJIHMzMiBkZXN0 X3gsCisJCQkJIHMzMiBkZXN0X3ksCiAJCQkJIHVuc2lnbmVkIG51bV9jbGlwcywgaW50IGluYywK IAkJCQkgc3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRfZmVuY2UpOwotaW50IHZtd19rbXNfc291 X2RvX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCQlzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAoraW50IHZtd19rbXNfc291X2RvX2RtYWJ1Zl9kaXJ0eShz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIg KmZyYW1lYnVmZmVyLAotCQkJCXVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKIAkJCQlz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCiAJCQkJdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQg aW5jcmVtZW50LAorCQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKIAkJCQlzdHJ1Y3Qgdm13X2ZlbmNl X29iaiAqKm91dF9mZW5jZSk7Ci0KK2ludCB2bXdfa21zX3NvdV9yZWFkYmFjayhzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJ IHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKKwkJCSBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9y ZXAgX191c2VyICp1c2VyX2ZlbmNlX3JlcCwKKwkJCSBzdHJ1Y3QgZHJtX3Ztd19yZWN0ICp2Y2xp cHMsCisJCQkgdWludDMyX3QgbnVtX2NsaXBzKTsKIAogLyoKICAqIFNjcmVlbiBUYXJnZXQgRGlz cGxheSBVbml0IGZ1bmN0aW9ucyAtIHZtd2dmeF9zdGR1LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X3Njcm4uYwppbmRleCAwZDA2ZDg2Li43M2ZlMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3JuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfc2Nybi5jCkBAIC0zNiwxMCArMzYsNTUgQEAKICNkZWZpbmUgdm13X2Nvbm5lY3Rvcl90 b19zb3UoeCkgXAogCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X3NjcmVlbl9vYmplY3RfdW5p dCwgYmFzZS5jb25uZWN0b3IpCiAKKy8qKgorICogc3RydWN0IHZtd19rbXNfc291X3N1cmZhY2Vf ZGlydHkgLSBDbG9zdXJlIHN0cnVjdHVyZSBmb3IKKyAqIGJsaXQgc3VyZmFjZSB0byBzY3JlZW4g Y29tbWFuZC4KKyAqIEBiYXNlOiBUaGUgYmFzZSB0eXBlIHdlIGRlcml2ZSBmcm9tLiBVc2VkIGJ5 IHZtd19rbXNfaGVscGVyX2RpcnR5KCkuCisgKiBAbGVmdDogTGVmdCBzaWRlIG9mIGJvdW5kaW5n IGJveC4KKyAqIEByaWdodDogUmlnaHQgc2lkZSBvZiBib3VuZGluZyBib3guCisgKiBAdG9wOiBU b3Agc2lkZSBvZiBib3VuZGluZyBib3guCisgKiBAYm90dG9tOiBCb3R0b20gc2lkZSBvZiBib3Vu ZGluZyBib3guCisgKiBAZHN0X3g6IERpZmZlcmVuY2UgYmV0d2VlbiBzb3VyY2UgY2xpcCByZWN0 cyBhbmQgZnJhbWVidWZmZXIgY29vcmRpbmF0ZXMuCisgKiBAZHN0X3k6IERpZmZlcmVuY2UgYmV0 d2VlbiBzb3VyY2UgY2xpcCByZWN0cyBhbmQgZnJhbWVidWZmZXIgY29vcmRpbmF0ZXMuCisgKiBA c2lkOiBTdXJmYWNlIGlkIG9mIHN1cmZhY2UgdG8gY29weSBmcm9tLgorICovCitzdHJ1Y3Qgdm13 X2ttc19zb3Vfc3VyZmFjZV9kaXJ0eSB7CisJc3RydWN0IHZtd19rbXNfZGlydHkgYmFzZTsKKwlz MzIgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tOworCXMzMiBkc3RfeCwgZHN0X3k7CisJdTMyIHNp ZDsKK307CisKKy8qCisgKiBTVkdBIGNvbW1hbmRzIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBjb2Rl LiBQbGVhc2Ugc2VlIHRoZSBkZXZpY2UgaGVhZGVycworICogZm9yIGV4cGxhbmF0aW9uLgorICov CitzdHJ1Y3Qgdm13X2ttc19zb3VfcmVhZGJhY2tfYmxpdCB7CisJdWludDMyIGhlYWRlcjsKKwlT VkdBRmlmb0NtZEJsaXRTY3JlZW5Ub0dNUkZCIGJvZHk7Cit9OworCitzdHJ1Y3Qgdm13X2ttc19z b3VfZG1hYnVmX2JsaXQgeworCXVpbnQzMiBoZWFkZXI7CisJU1ZHQUZpZm9DbWRCbGl0R01SRkJU b1NjcmVlbiBib2R5OworfTsKKworc3RydWN0IHZtd19rbXNfc291X2RpcnR5X2NtZCB7CisJU1ZH QTNkQ21kSGVhZGVyIGhlYWRlcjsKKwlTVkdBM2RDbWRCbGl0U3VyZmFjZVRvU2NyZWVuIGJvZHk7 Cit9OworCisKKy8qCisgKiBPdGhlciBzdHJ1Y3RzLgorICovCisKIHN0cnVjdCB2bXdfc2NyZWVu X29iamVjdF9kaXNwbGF5IHsKIAl1bnNpZ25lZCBudW1faW1wbGljaXQ7CiAKIAlzdHJ1Y3Qgdm13 X2ZyYW1lYnVmZmVyICppbXBsaWNpdF9mYjsKKwlTVkdBRmlmb0NtZERlZmluZUdNUkZCIGN1cjsK KwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnBpbm5lZF9nbXJmYjsKIH07CiAKIC8qKgpAQCAtMjAy LDE0ICsyNDcsNyBAQCBzdGF0aWMgaW50IHZtd19zb3VfZmlmb19kZXN0cm95KHN0cnVjdCB2bXdf cHJpdmF0ZSAqZGV2X3ByaXYsCiBzdGF0aWMgdm9pZCB2bXdfc291X2JhY2tpbmdfZnJlZShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSBzdHJ1Y3Qgdm13X3NjcmVlbl9vYmplY3Rf dW5pdCAqc291KQogewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0KLQlpZiAodW5s aWtlbHkoc291LT5idWZmZXIgPT0gTlVMTCkpCi0JCXJldHVybjsKLQotCWJvID0gJnNvdS0+YnVm ZmVyLT5iYXNlOwotCXR0bV9ib191bnJlZigmYm8pOwotCXNvdS0+YnVmZmVyID0gTlVMTDsKKwl2 bXdfZG1hYnVmX3VucmVmZXJlbmNlKCZzb3UtPmJ1ZmZlcik7CiAJc291LT5idWZmZXJfc2l6ZSA9 IDA7CiB9CiAKQEAgLTQzMiw3ICs0NzAsNiBAQCBzdGF0aWMgaW50IHZtd19zb3VfY3J0Y19wYWdl X2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYgPSB2bXdfcHJpdihjcnRjLT5kZXYpOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9m YiA9IGNydGMtPnByaW1hcnktPmZiOwogCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiA9IHZt d19mcmFtZWJ1ZmZlcl90b192ZmIoZmIpOwotCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0g ZXZlbnQtPmJhc2UuZmlsZV9wcml2OwogCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSA9IE5V TEw7CiAJc3RydWN0IGRybV9jbGlwX3JlY3QgY2xpcHM7CiAJaW50IHJldDsKQEAgLTQ1MiwxMSAr NDg5LDEzIEBAIHN0YXRpYyBpbnQgdm13X3NvdV9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCiAJY2xpcHMueTIgPSBmYi0+aGVpZ2h0OwogCiAJaWYgKHZmYi0+ZG1hYnVmKQot CQlyZXQgPSB2bXdfa21zX3NvdV9kb19kbWFidWZfZGlydHkoZmlsZV9wcml2LCBkZXZfcHJpdiwg dmZiLAotCQkJCQkJICAwLCAwLCAmY2xpcHMsIDEsIDEsICZmZW5jZSk7CisJCXJldCA9IHZtd19r bXNfc291X2RvX2RtYWJ1Zl9kaXJ0eShkZXZfcHJpdiwgdmZiLAorCQkJCQkJICAmY2xpcHMsIDEs IDEsCisJCQkJCQkgIHRydWUsICZmZW5jZSk7CiAJZWxzZQotCQlyZXQgPSB2bXdfa21zX3NvdV9k b19zdXJmYWNlX2RpcnR5KGRldl9wcml2LCBmaWxlX3ByaXYsIHZmYiwKLQkJCQkJCSAgIDAsIDAs ICZjbGlwcywgMSwgMSwgJmZlbmNlKTsKKwkJcmV0ID0gdm13X2ttc19zb3VfZG9fc3VyZmFjZV9k aXJ0eShkZXZfcHJpdiwgdmZiLAorCQkJCQkJICAgJmNsaXBzLCBOVUxMLCBOVUxMLAorCQkJCQkJ ICAgMCwgMCwgMSwgMSwgJmZlbmNlKTsKIAogCiAJaWYgKHJldCAhPSAwKQpAQCAtNDY2LDExICs1 MDUsMTUgQEAgc3RhdGljIGludCB2bXdfc291X2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAkJZ290byBvdXRfbm9fZmVuY2U7CiAJfQogCi0JcmV0ID0gdm13X2V2ZW50X2Zl bmNlX2FjdGlvbl9xdWV1ZShmaWxlX3ByaXYsIGZlbmNlLAotCQkJCQkgICAmZXZlbnQtPmJhc2Us Ci0JCQkJCSAgICZldmVudC0+ZXZlbnQudHZfc2VjLAotCQkJCQkgICAmZXZlbnQtPmV2ZW50LnR2 X3VzZWMsCi0JCQkJCSAgIHRydWUpOworCWlmIChldmVudCkgeworCQlzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiA9IGV2ZW50LT5iYXNlLmZpbGVfcHJpdjsKKworCQlyZXQgPSB2bXdfZXZlbnRf ZmVuY2VfYWN0aW9uX3F1ZXVlKGZpbGVfcHJpdiwgZmVuY2UsCisJCQkJCQkgICAmZXZlbnQtPmJh c2UsCisJCQkJCQkgICAmZXZlbnQtPmV2ZW50LnR2X3NlYywKKwkJCQkJCSAgICZldmVudC0+ZXZl bnQudHZfdXNlYywKKwkJCQkJCSAgIHRydWUpOworCX0KIAogCS8qCiAJICogTm8gbmVlZCB0byBo b2xkIG9uIHRvIHRoaXMgbm93LiBUaGUgb25seSBjbGVhbnVwCkBAIC00ODgsMTUzICs1MzEsNiBA QCBvdXRfbm9fZmVuY2U6CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHZtd19rbXNfc291X2RvX3N1 cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsCi0JCQkJIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVm ZmVyLAotCQkJCSB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCi0JCQkJIHN0cnVjdCBk cm1fY2xpcF9yZWN0ICpjbGlwcywKLQkJCQkgdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQgaW5jLAot CQkJCSBzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91dF9mZW5jZSkKLXsKLQlzdHJ1Y3Qgdm13X2Rp c3BsYXlfdW5pdCAqdW5pdHNbVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTXTsKLQlzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHNfcHRyOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICp0bXA7Ci0Jc3Ry dWN0IGRybV9jcnRjICpjcnRjOwotCXNpemVfdCBmaWZvX3NpemU7Ci0JaW50IGksIG51bV91bml0 czsKLQlpbnQgcmV0ID0gMDsgLyogc2lsZW5jZSB3YXJuaW5nICovCi0JaW50IGxlZnQsIHJpZ2h0 LCB0b3AsIGJvdHRvbTsKLQotCXN0cnVjdCB7Ci0JCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7Ci0J CVNWR0EzZENtZEJsaXRTdXJmYWNlVG9TY3JlZW4gYm9keTsKLQl9ICpjbWQ7Ci0JU1ZHQVNpZ25l ZFJlY3QgKmJsaXRzOwotCi0JbnVtX3VuaXRzID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNy dGMsICZkZXZfcHJpdi0+ZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsCi0JCQkgICAgaGVhZCkg ewotCQlpZiAoY3J0Yy0+cHJpbWFyeS0+ZmIgIT0gJmZyYW1lYnVmZmVyLT5iYXNlKQotCQkJY29u dGludWU7Ci0JCXVuaXRzW251bV91bml0cysrXSA9IHZtd19jcnRjX3RvX2R1KGNydGMpOwotCX0K LQotCUJVR19PTighY2xpcHMgfHwgIW51bV9jbGlwcyk7Ci0KLQl0bXAgPSBremFsbG9jKHNpemVv ZigqdG1wKSAqIG51bV9jbGlwcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KHRtcCA9PSBO VUxMKSkgewotCQlEUk1fRVJST1IoIlRlbXBvcmFyeSBjbGlwcmVjdCBtZW1vcnkgYWxsb2MgZmFp bGVkLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZpZm9fc2l6ZSA9IHNpemVvZigq Y21kKSArIHNpemVvZihTVkdBU2lnbmVkUmVjdCkgKiBudW1fY2xpcHM7Ci0JY21kID0ga3phbGxv YyhmaWZvX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsK LQkJRFJNX0VSUk9SKCJUZW1wb3JhcnkgZmlmbyBtZW1vcnkgYWxsb2MgZmFpbGVkLlxuIik7Ci0J CXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWVfdG1wOwotCX0KLQotCS8qIHNldHVwIGJs aXRzIHBvaW50ZXIgKi8KLQlibGl0cyA9IChTVkdBU2lnbmVkUmVjdCAqKSZjbWRbMV07Ci0KLQkv KiBpbml0aWFsIGNsaXAgcmVnaW9uICovCi0JbGVmdCA9IGNsaXBzLT54MTsKLQlyaWdodCA9IGNs aXBzLT54MjsKLQl0b3AgPSBjbGlwcy0+eTE7Ci0JYm90dG9tID0gY2xpcHMtPnkyOwotCi0JLyog c2tpcCB0aGUgZmlyc3QgY2xpcCByZWN0ICovCi0JZm9yIChpID0gMSwgY2xpcHNfcHRyID0gY2xp cHMgKyBpbmM7Ci0JICAgICBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0ciArPSBpbmMpIHsK LQkJbGVmdCA9IG1pbl90KGludCwgbGVmdCwgKGludCljbGlwc19wdHItPngxKTsKLQkJcmlnaHQg PSBtYXhfdChpbnQsIHJpZ2h0LCAoaW50KWNsaXBzX3B0ci0+eDIpOwotCQl0b3AgPSBtaW5fdChp bnQsIHRvcCwgKGludCljbGlwc19wdHItPnkxKTsKLQkJYm90dG9tID0gbWF4X3QoaW50LCBib3R0 b20sIChpbnQpY2xpcHNfcHRyLT55Mik7Ci0JfQotCi0JLyogb25seSBuZWVkIHRvIGRvIHRoaXMg b25jZSAqLwotCWNtZC0+aGVhZGVyLmlkID0gY3B1X3RvX2xlMzIoU1ZHQV8zRF9DTURfQkxJVF9T VVJGQUNFX1RPX1NDUkVFTik7Ci0JY21kLT5oZWFkZXIuc2l6ZSA9IGNwdV90b19sZTMyKGZpZm9f c2l6ZSAtIHNpemVvZihjbWQtPmhlYWRlcikpOwotCi0JY21kLT5ib2R5LnNyY1JlY3QubGVmdCA9 IGxlZnQ7Ci0JY21kLT5ib2R5LnNyY1JlY3QucmlnaHQgPSByaWdodDsKLQljbWQtPmJvZHkuc3Jj UmVjdC50b3AgPSB0b3A7Ci0JY21kLT5ib2R5LnNyY1JlY3QuYm90dG9tID0gYm90dG9tOwotCi0J Y2xpcHNfcHRyID0gY2xpcHM7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jbGlwczsgaSsrLCBjbGlw c19wdHIgKz0gaW5jKSB7Ci0JCXRtcFtpXS54MSA9IGNsaXBzX3B0ci0+eDEgLSBsZWZ0OwotCQl0 bXBbaV0ueDIgPSBjbGlwc19wdHItPngyIC0gbGVmdDsKLQkJdG1wW2ldLnkxID0gY2xpcHNfcHRy LT55MSAtIHRvcDsKLQkJdG1wW2ldLnkyID0gY2xpcHNfcHRyLT55MiAtIHRvcDsKLQl9Ci0KLQkv KiBkbyBwZXIgdW5pdCB3cml0aW5nLCByZXVzZSBmaWZvIGZvciBlYWNoICovCi0JZm9yIChpID0g MDsgaSA8IG51bV91bml0czsgaSsrKSB7Ci0JCXN0cnVjdCB2bXdfZGlzcGxheV91bml0ICp1bml0 ID0gdW5pdHNbaV07Ci0JCXN0cnVjdCB2bXdfY2xpcF9yZWN0IGNsaXA7Ci0JCWludCBudW07Ci0K LQkJY2xpcC54MSA9IGxlZnQgLSB1bml0LT5jcnRjLng7Ci0JCWNsaXAueTEgPSB0b3AgLSB1bml0 LT5jcnRjLnk7Ci0JCWNsaXAueDIgPSByaWdodCAtIHVuaXQtPmNydGMueDsKLQkJY2xpcC55MiA9 IGJvdHRvbSAtIHVuaXQtPmNydGMueTsKLQotCQkvKiBza2lwIGFueSBjcnRjcyB0aGF0IG1pc3Nl cyB0aGUgY2xpcCByZWdpb24gKi8KLQkJaWYgKGNsaXAueDEgPj0gdW5pdC0+Y3J0Yy5tb2RlLmhk aXNwbGF5IHx8Ci0JCSAgICBjbGlwLnkxID49IHVuaXQtPmNydGMubW9kZS52ZGlzcGxheSB8fAot CQkgICAgY2xpcC54MiA8PSAwIHx8IGNsaXAueTIgPD0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8q Ci0JCSAqIEluIG9yZGVyIGZvciB0aGUgY2xpcCByZWN0cyB0byBiZSBjb3JyZWN0bHkgc2NhbGVk Ci0JCSAqIHRoZSBzcmMgYW5kIGRlc3QgcmVjdHMgbmVlZHMgdG8gYmUgdGhlIHNhbWUgc2l6ZS4K LQkJICovCi0JCWNtZC0+Ym9keS5kZXN0UmVjdC5sZWZ0ID0gY2xpcC54MTsKLQkJY21kLT5ib2R5 LmRlc3RSZWN0LnJpZ2h0ID0gY2xpcC54MjsKLQkJY21kLT5ib2R5LmRlc3RSZWN0LnRvcCA9IGNs aXAueTE7Ci0JCWNtZC0+Ym9keS5kZXN0UmVjdC5ib3R0b20gPSBjbGlwLnkyOwotCi0JCS8qIGNy ZWF0ZSBhIGNsaXAgcmVjdCBvZiB0aGUgY3J0YyBpbiBkZXN0IGNvb3JkcyAqLwotCQljbGlwLngy ID0gdW5pdC0+Y3J0Yy5tb2RlLmhkaXNwbGF5IC0gY2xpcC54MTsKLQkJY2xpcC55MiA9IHVuaXQt PmNydGMubW9kZS52ZGlzcGxheSAtIGNsaXAueTE7Ci0JCWNsaXAueDEgPSAwIC0gY2xpcC54MTsK LQkJY2xpcC55MSA9IDAgLSBjbGlwLnkxOwotCi0JCS8qIG5lZWQgdG8gcmVzZXQgc2lkIGFzIGl0 IGlzIGNoYW5nZWQgYnkgZXhlY2J1ZiAqLwotCQljbWQtPmJvZHkuc3JjSW1hZ2Uuc2lkID0gY3B1 X3RvX2xlMzIoZnJhbWVidWZmZXItPnVzZXJfaGFuZGxlKTsKLQkJY21kLT5ib2R5LmRlc3RTY3Jl ZW5JZCA9IHVuaXQtPnVuaXQ7Ci0KLQkJLyogY2xpcCBhbmQgd3JpdGUgYmxpdHMgdG8gY21kIHN0 cmVhbSAqLwotCQl2bXdfY2xpcF9jbGlwcmVjdHModG1wLCBudW1fY2xpcHMsIGNsaXAsIGJsaXRz LCAmbnVtKTsKLQotCQkvKiBpZiBubyBjbGlwcmVjdHMgaGl0IHNraXAgdGhpcyAqLwotCQlpZiAo bnVtID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKiBvbmx5IHJldHVybiB0aGUgbGFzdCBmZW5j ZSAqLwotCQlpZiAob3V0X2ZlbmNlICYmICpvdXRfZmVuY2UpCi0JCQl2bXdfZmVuY2Vfb2JqX3Vu cmVmZXJlbmNlKG91dF9mZW5jZSk7Ci0KLQkJLyogcmVjYWxjdWxhdGUgcGFja2FnZSBsZW5ndGgg Ki8KLQkJZmlmb19zaXplID0gc2l6ZW9mKCpjbWQpICsgc2l6ZW9mKFNWR0FTaWduZWRSZWN0KSAq IG51bTsKLQkJY21kLT5oZWFkZXIuc2l6ZSA9IGNwdV90b19sZTMyKGZpZm9fc2l6ZSAtIHNpemVv ZihjbWQtPmhlYWRlcikpOwotCQlyZXQgPSB2bXdfZXhlY2J1Zl9wcm9jZXNzKGZpbGVfcHJpdiwg ZGV2X3ByaXYsIE5VTEwsIGNtZCwKLQkJCQkJICBmaWZvX3NpemUsIDAsIDAsIE5VTEwsIG91dF9m ZW5jZSk7Ci0KLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCWJyZWFrOwotCX0KLQotCi0J a2ZyZWUoY21kKTsKLW91dF9mcmVlX3RtcDoKLQlrZnJlZSh0bXApOwotCi0JcmV0dXJuIHJldDsK LX0KLQogc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB2bXdfc2NyZWVuX29iamVjdF9jcnRj X2Z1bmNzID0gewogCS5zYXZlID0gdm13X2R1X2NydGNfc2F2ZSwKIAkucmVzdG9yZSA9IHZtd19k dV9jcnRjX3Jlc3RvcmUsCkBAIC03OTAsMTQgKzY4NiwxMyBAQCBpbnQgdm13X2ttc19zb3VfY2xv c2VfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiAwOwogfQog Ci1zdGF0aWMgaW50IGRvX2RtYWJ1Zl9kZWZpbmVfZ21yZmIoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCi0JCQkJICBzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorc3RhdGljIGludCBk b19kbWFidWZfZGVmaW5lX2dtcmZiKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJ ICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgdm13X2Rt YV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihmcmFtZWJ1ZmZlciwgc3RydWN0IHZtd19m cmFtZWJ1ZmZlcl9kbWFidWYsCisJCQkgICAgIGJhc2UpLT5idWZmZXI7CiAJaW50IGRlcHRoID0g ZnJhbWVidWZmZXItPmJhc2UuZGVwdGg7Ci0Jc2l6ZV90IGZpZm9fc2l6ZTsKLQlpbnQgcmV0Owot CiAJc3RydWN0IHsKIAkJdWludDMyX3QgaGVhZGVyOwogCQlTVkdBRmlmb0NtZERlZmluZUdNUkZC IGJvZHk7CkBAIC04MTAsMTIzICs3MDUsMzUwIEBAIHN0YXRpYyBpbnQgZG9fZG1hYnVmX2RlZmlu ZV9nbXJmYihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAlpZiAoZGVwdGggPT0gMzIpCiAJ CWRlcHRoID0gMjQ7CiAKLQlmaWZvX3NpemUgPSBzaXplb2YoKmNtZCk7Ci0JY21kID0ga21hbGxv YyhmaWZvX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsK LQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgdGVtcG9yYXJ5IGNtZCBidWZmZXIuXG4i KTsKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCWlm ICghY21kKSB7CisJCURSTV9FUlJPUigiT3V0IG9mIGZpZm8gc3BhY2UgZm9yIGRpcnR5IGZyYW1l YnVmZmVyIGNvbW1hbmQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGNt ZCwgMCwgZmlmb19zaXplKTsKIAljbWQtPmhlYWRlciA9IFNWR0FfQ01EX0RFRklORV9HTVJGQjsK IAljbWQtPmJvZHkuZm9ybWF0LmJpdHNQZXJQaXhlbCA9IGZyYW1lYnVmZmVyLT5iYXNlLmJpdHNf cGVyX3BpeGVsOwogCWNtZC0+Ym9keS5mb3JtYXQuY29sb3JEZXB0aCA9IGRlcHRoOwogCWNtZC0+ Ym9keS5mb3JtYXQucmVzZXJ2ZWQgPSAwOwogCWNtZC0+Ym9keS5ieXRlc1BlckxpbmUgPSBmcmFt ZWJ1ZmZlci0+YmFzZS5waXRjaGVzWzBdOwotCWNtZC0+Ym9keS5wdHIuZ21ySWQgPSBmcmFtZWJ1 ZmZlci0+dXNlcl9oYW5kbGU7Ci0JY21kLT5ib2R5LnB0ci5vZmZzZXQgPSAwOworCS8qIEJ1ZmZl ciBpcyByZXNlcnZlZCBpbiB2cmFtIG9yIEdNUiAqLworCXZtd19ib19nZXRfZ3Vlc3RfcHRyKCZi dWYtPmJhc2UsICZjbWQtPmJvZHkucHRyKTsKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNp emVvZigqY21kKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2bXdfc291X3N1cmZhY2Vf Zmlmb19jb21taXQgLSBDYWxsYmFjayB0byBmaWxsIGluIGFuZCBzdWJtaXQgYQorICogYmxpdCBz dXJmYWNlIHRvIHNjcmVlbiBjb21tYW5kLgorICoKKyAqIEBkaXJ0eTogVGhlIGNsb3N1cmUgc3Ry dWN0dXJlLgorICoKKyAqIEZpbGxzIGluIHRoZSBtaXNzaW5nIGZpZWxkcyBpbiB0aGUgY29tbWFu ZCwgYW5kIHRyYW5zbGF0ZXMgdGhlIGNsaXByZWN0cworICogdG8gbWF0Y2ggdGhlIGRlc3RpbmF0 aW9uIGJvdW5kaW5nIGJveCBlbmNvZGVkLgorICovCitzdGF0aWMgdm9pZCB2bXdfc291X3N1cmZh Y2VfZmlmb19jb21taXQoc3RydWN0IHZtd19rbXNfZGlydHkgKmRpcnR5KQoreworCXN0cnVjdCB2 bXdfa21zX3NvdV9zdXJmYWNlX2RpcnR5ICpzZGlydHkgPQorCQljb250YWluZXJfb2YoZGlydHks IHR5cGVvZigqc2RpcnR5KSwgYmFzZSk7CisJc3RydWN0IHZtd19rbXNfc291X2RpcnR5X2NtZCAq Y21kID0gZGlydHktPmNtZDsKKwlzMzIgdHJhbnNfeCA9IGRpcnR5LT51bml0LT5jcnRjLnggLSBz ZGlydHktPmRzdF94OworCXMzMiB0cmFuc195ID0gZGlydHktPnVuaXQtPmNydGMueSAtIHNkaXJ0 eS0+ZHN0X3k7CisJc2l6ZV90IHJlZ2lvbl9zaXplID0gZGlydHktPm51bV9oaXRzICogc2l6ZW9m KFNWR0FTaWduZWRSZWN0KTsKKwlTVkdBU2lnbmVkUmVjdCAqYmxpdCA9IChTVkdBU2lnbmVkUmVj dCAqKSAmY21kWzFdOworCWludCBpOworCisJY21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9C TElUX1NVUkZBQ0VfVE9fU0NSRUVOOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5i b2R5KSArIHJlZ2lvbl9zaXplOworCisJLyoKKwkgKiBVc2UgdGhlIGRlc3RpbmF0aW9uIGJvdW5k aW5nIGJveCB0byBzcGVjaWZ5IGRlc3RpbmF0aW9uIC0gYW5kCisJICogc291cmNlIGJvdW5kaW5n IHJlZ2lvbnMuCisJICovCisJY21kLT5ib2R5LmRlc3RSZWN0LmxlZnQgPSBzZGlydHktPmxlZnQ7 CisJY21kLT5ib2R5LmRlc3RSZWN0LnJpZ2h0ID0gc2RpcnR5LT5yaWdodDsKKwljbWQtPmJvZHku ZGVzdFJlY3QudG9wID0gc2RpcnR5LT50b3A7CisJY21kLT5ib2R5LmRlc3RSZWN0LmJvdHRvbSA9 IHNkaXJ0eS0+Ym90dG9tOworCisJY21kLT5ib2R5LnNyY1JlY3QubGVmdCA9IHNkaXJ0eS0+bGVm dCArIHRyYW5zX3g7CisJY21kLT5ib2R5LnNyY1JlY3QucmlnaHQgPSBzZGlydHktPnJpZ2h0ICsg dHJhbnNfeDsKKwljbWQtPmJvZHkuc3JjUmVjdC50b3AgPSBzZGlydHktPnRvcCArIHRyYW5zX3k7 CisJY21kLT5ib2R5LnNyY1JlY3QuYm90dG9tID0gc2RpcnR5LT5ib3R0b20gKyB0cmFuc195Owor CisJY21kLT5ib2R5LnNyY0ltYWdlLnNpZCA9IHNkaXJ0eS0+c2lkOworCWNtZC0+Ym9keS5kZXN0 U2NyZWVuSWQgPSBkaXJ0eS0+dW5pdC0+dW5pdDsKKworCS8qIEJsaXRzIGFyZSByZWxhdGl2ZSB0 byB0aGUgZGVzdGluYXRpb24gcmVjdC4gVHJhbnNsYXRlLiAqLworCWZvciAoaSA9IDA7IGkgPCBk aXJ0eS0+bnVtX2hpdHM7ICsraSwgKytibGl0KSB7CisJCWJsaXQtPmxlZnQgLT0gc2RpcnR5LT5s ZWZ0OworCQlibGl0LT5yaWdodCAtPSBzZGlydHktPmxlZnQ7CisJCWJsaXQtPnRvcCAtPSBzZGly dHktPnRvcDsKKwkJYmxpdC0+Ym90dG9tIC09IHNkaXJ0eS0+dG9wOworCX0KKworCXZtd19maWZv X2NvbW1pdChkaXJ0eS0+ZGV2X3ByaXYsIHJlZ2lvbl9zaXplICsgc2l6ZW9mKCpjbWQpKTsKKwor CXNkaXJ0eS0+bGVmdCA9IHNkaXJ0eS0+dG9wID0gUzMyX01BWDsKKwlzZGlydHktPnJpZ2h0ID0g c2RpcnR5LT5ib3R0b20gPSBTMzJfTUlOOworfQorCisvKioKKyAqIHZtd19zb3Vfc3VyZmFjZV9j bGlwIC0gQ2FsbGJhY2sgdG8gZW5jb2RlIGEgYmxpdCBzdXJmYWNlIHRvIHNjcmVlbiBjbGlwcmVj dC4KKyAqCisgKiBAZGlydHk6IFRoZSBjbG9zdXJlIHN0cnVjdHVyZQorICoKKyAqIEVuY29kZXMg YSBTVkdBU2lnbmVkUmVjdCBjbGlwcmVjdCBhbmQgdXBkYXRlcyB0aGUgYm91bmRpbmcgYm94IG9m IHRoZQorICogQkxJVF9TVVJGQUNFX1RPX1NDUkVFTiBjb21tYW5kLgorICovCitzdGF0aWMgdm9p ZCB2bXdfc291X3N1cmZhY2VfY2xpcChzdHJ1Y3Qgdm13X2ttc19kaXJ0eSAqZGlydHkpCit7CisJ c3RydWN0IHZtd19rbXNfc291X3N1cmZhY2VfZGlydHkgKnNkaXJ0eSA9CisJCWNvbnRhaW5lcl9v ZihkaXJ0eSwgdHlwZW9mKCpzZGlydHkpLCBiYXNlKTsKKwlzdHJ1Y3Qgdm13X2ttc19zb3VfZGly dHlfY21kICpjbWQgPSBkaXJ0eS0+Y21kOworCVNWR0FTaWduZWRSZWN0ICpibGl0ID0gKFNWR0FT aWduZWRSZWN0ICopICZjbWRbMV07CisKKwkvKiBEZXN0aW5hdGlvbiByZWN0LiAqLworCWJsaXQg Kz0gZGlydHktPm51bV9oaXRzOworCWJsaXQtPmxlZnQgPSBkaXJ0eS0+dW5pdF94MTsKKwlibGl0 LT50b3AgPSBkaXJ0eS0+dW5pdF95MTsKKwlibGl0LT5yaWdodCA9IGRpcnR5LT51bml0X3gyOwor CWJsaXQtPmJvdHRvbSA9IGRpcnR5LT51bml0X3kyOworCisJLyogRGVzdGluYXRpb24gYm91bmRp bmcgYm94ICovCisJc2RpcnR5LT5sZWZ0ID0gbWluX3QoczMyLCBzZGlydHktPmxlZnQsIGRpcnR5 LT51bml0X3gxKTsKKwlzZGlydHktPnRvcCA9IG1pbl90KHMzMiwgc2RpcnR5LT50b3AsIGRpcnR5 LT51bml0X3kxKTsKKwlzZGlydHktPnJpZ2h0ID0gbWF4X3QoczMyLCBzZGlydHktPnJpZ2h0LCBk aXJ0eS0+dW5pdF94Mik7CisJc2RpcnR5LT5ib3R0b20gPSBtYXhfdChzMzIsIHNkaXJ0eS0+Ym90 dG9tLCBkaXJ0eS0+dW5pdF95Mik7CisKKwlkaXJ0eS0+bnVtX2hpdHMrKzsKK30KKworLyoqCisg KiB2bXdfa21zX3NvdV9kb19zdXJmYWNlX2RpcnR5IC0gRGlydHkgcGFydCBvZiBhIHN1cmZhY2Ug YmFja2VkIGZyYW1lYnVmZmVyCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIHRoZSBkZXZp Y2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKiBAZnJhbWVidWZmZXI6IFBvaW50ZXIgdG8gdGhlIHN1 cmZhY2UtYnVmZmVyIGJhY2tlZCBmcmFtZWJ1ZmZlci4KKyAqIEBjbGlwczogQXJyYXkgb2YgY2xp cCByZWN0cy4gRWl0aGVyIEBjbGlwcyBvciBAdmNsaXBzIG11c3QgYmUgTlVMTC4KKyAqIEB2Y2xp cHM6IEFsdGVybmF0ZSBhcnJheSBvZiBjbGlwIHJlY3RzLiBFaXRoZXIgQGNsaXBzIG9yIEB2Y2xp cHMgbXVzdAorICogYmUgTlVMTC4KKyAqIEBzcmY6IFBvaW50ZXIgdG8gc3VyZmFjZSB0byBibGl0 IGZyb20uIElmIE5VTEwsIHRoZSBzdXJmYWNlIGF0dGFjaGVkCisgKiB0byBAZnJhbWVidWZmZXIg d2lsbCBiZSB1c2VkLgorICogQGRlc3RfeDogWCBjb29yZGluYXRlIG9mZnNldCB0byBhbGlnbiBA c3JmIHdpdGggZnJhbWVidWZmZXIgY29vcmRpbmF0ZXMuCisgKiBAZGVzdF95OiBZIGNvb3JkaW5h dGUgb2Zmc2V0IHRvIGFsaWduIEBzcmYgd2l0aCBmcmFtZWJ1ZmZlciBjb29yZGluYXRlcy4KKyAq IEBudW1fY2xpcHM6IE51bWJlciBvZiBjbGlwIHJlY3RzIGluIEBjbGlwcy4KKyAqIEBpbmM6IElu Y3JlbWVudCB0byB1c2Ugd2hlbiBsb29waW5nIG92ZXIgQGNsaXBzLgorICogQG91dF9mZW5jZTog SWYgbm9uLU5VTEwsIHdpbGwgcmV0dXJuIGEgcmVmLWNvdW50ZWQgcG9pbnRlciB0byBhCisgKiBz dHJ1Y3Qgdm13X2ZlbmNlX29iai4gVGhlIHJldHVybmVkIGZlbmNlIHBvaW50ZXIgbWF5IGJlIE5V TEwgaW4gd2hpY2gKKyAqIGNhc2UgdGhlIGRldmljZSBoYXMgYWxyZWFkeSBzeW5jaHJvbml6ZWQu CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4gLUVSRVNUQVJUU1lTIGlmCisgKiBpbnRlcnJ1cHRlZC4KKyAqLworaW50IHZtd19rbXNf c291X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkg c3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJIHN0cnVjdCBkcm1fY2xp cF9yZWN0ICpjbGlwcywKKwkJCQkgc3RydWN0IGRybV92bXdfcmVjdCAqdmNsaXBzLAorCQkJCSBz dHJ1Y3Qgdm13X3Jlc291cmNlICpzcmYsCisJCQkJIHMzMiBkZXN0X3gsCisJCQkJIHMzMiBkZXN0 X3ksCisJCQkJIHVuc2lnbmVkIG51bV9jbGlwcywgaW50IGluYywKKwkJCQkgc3RydWN0IHZtd19m ZW5jZV9vYmogKipvdXRfZmVuY2UpCit7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNl ICp2ZmJzID0KKwkJY29udGFpbmVyX29mKGZyYW1lYnVmZmVyLCB0eXBlb2YoKnZmYnMpLCBiYXNl KTsKKwlzdHJ1Y3Qgdm13X2ttc19zb3Vfc3VyZmFjZV9kaXJ0eSBzZGlydHk7CisJaW50IHJldDsK KworCWlmICghc3JmKQorCQlzcmYgPSAmdmZicy0+c3VyZmFjZS0+cmVzOworCisJcmV0ID0gdm13 X2ttc19oZWxwZXJfcmVzb3VyY2VfcHJlcGFyZShzcmYsIHRydWUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlzZGlydHkuYmFzZS5maWZvX2NvbW1pdCA9IHZtd19zb3Vfc3VyZmFjZV9m aWZvX2NvbW1pdDsKKwlzZGlydHkuYmFzZS5jbGlwID0gdm13X3NvdV9zdXJmYWNlX2NsaXA7CisJ c2RpcnR5LmJhc2UuZGV2X3ByaXYgPSBkZXZfcHJpdjsKKwlzZGlydHkuYmFzZS5maWZvX3Jlc2Vy dmVfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdm13X2ttc19zb3VfZGlydHlfY21kKSArCisJICBzaXpl b2YoU1ZHQVNpZ25lZFJlY3QpICogbnVtX2NsaXBzOwogCi0JcmV0ID0gdm13X2V4ZWNidWZfcHJv Y2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLCBjbWQsCi0JCQkJICBmaWZvX3NpemUsIDAs IDAsIE5VTEwsIE5VTEwpOworCXNkaXJ0eS5zaWQgPSBzcmYtPmlkOworCXNkaXJ0eS5sZWZ0ID0g c2RpcnR5LnRvcCA9IFMzMl9NQVg7CisJc2RpcnR5LnJpZ2h0ID0gc2RpcnR5LmJvdHRvbSA9IFMz Ml9NSU47CisJc2RpcnR5LmRzdF94ID0gZGVzdF94OworCXNkaXJ0eS5kc3RfeSA9IGRlc3RfeTsK IAotCWtmcmVlKGNtZCk7CisJcmV0ID0gdm13X2ttc19oZWxwZXJfZGlydHkoZGV2X3ByaXYsIGZy YW1lYnVmZmVyLCBjbGlwcywgdmNsaXBzLAorCQkJCSAgIGRlc3RfeCwgZGVzdF95LCBudW1fY2xp cHMsIGluYywKKwkJCQkgICAmc2RpcnR5LmJhc2UpOworCXZtd19rbXNfaGVscGVyX3Jlc291cmNl X2ZpbmlzaChzcmYsIG91dF9mZW5jZSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgdm13X2tt c19zb3VfZG9fZG1hYnVmX2RpcnR5KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCXN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisvKioKKyAqIHZtd19zb3VfZG1hYnVmX2ZpZm9f Y29tbWl0IC0gQ2FsbGJhY2sgdG8gc3VibWl0IGEgc2V0IG9mIHJlYWRiYWNrIGNsaXBzLgorICoK KyAqIEBkaXJ0eTogVGhlIGNsb3N1cmUgc3RydWN0dXJlLgorICoKKyAqIENvbW1pdHMgYSBwcmV2 aW91c2x5IGJ1aWx0IGNvbW1hbmQgYnVmZmVyIG9mIHJlYWRiYWNrIGNsaXBzLgorICovCitzdGF0 aWMgdm9pZCB2bXdfc291X2RtYWJ1Zl9maWZvX2NvbW1pdChzdHJ1Y3Qgdm13X2ttc19kaXJ0eSAq ZGlydHkpCit7CisJdm13X2ZpZm9fY29tbWl0KGRpcnR5LT5kZXZfcHJpdiwKKwkJCXNpemVvZihz dHJ1Y3Qgdm13X2ttc19zb3VfZG1hYnVmX2JsaXQpICoKKwkJCWRpcnR5LT5udW1faGl0cyk7Cit9 CisKKy8qKgorICogdm13X3NvdV9kbWFidWZfY2xpcCAtIENhbGxiYWNrIHRvIGVuY29kZSBhIHJl YWRiYWNrIGNsaXByZWN0LgorICoKKyAqIEBkaXJ0eTogVGhlIGNsb3N1cmUgc3RydWN0dXJlCisg KgorICogRW5jb2RlcyBhIEJMSVRfR01SRkJfVE9fU0NSRUVOIGNsaXByZWN0LgorICovCitzdGF0 aWMgdm9pZCB2bXdfc291X2RtYWJ1Zl9jbGlwKHN0cnVjdCB2bXdfa21zX2RpcnR5ICpkaXJ0eSkK K3sKKwlzdHJ1Y3Qgdm13X2ttc19zb3VfZG1hYnVmX2JsaXQgKmJsaXQgPSBkaXJ0eS0+Y21kOwor CisJYmxpdCArPSBkaXJ0eS0+bnVtX2hpdHM7CisJYmxpdC0+aGVhZGVyID0gU1ZHQV9DTURfQkxJ VF9HTVJGQl9UT19TQ1JFRU47CisJYmxpdC0+Ym9keS5kZXN0U2NyZWVuSWQgPSBkaXJ0eS0+dW5p dC0+dW5pdDsKKwlibGl0LT5ib2R5LnNyY09yaWdpbi54ID0gZGlydHktPmZiX3g7CisJYmxpdC0+ Ym9keS5zcmNPcmlnaW4ueSA9IGRpcnR5LT5mYl95OworCWJsaXQtPmJvZHkuZGVzdFJlY3QubGVm dCA9IGRpcnR5LT51bml0X3gxOworCWJsaXQtPmJvZHkuZGVzdFJlY3QudG9wID0gZGlydHktPnVu aXRfeTE7CisJYmxpdC0+Ym9keS5kZXN0UmVjdC5yaWdodCA9IGRpcnR5LT51bml0X3gyOworCWJs aXQtPmJvZHkuZGVzdFJlY3QuYm90dG9tID0gZGlydHktPnVuaXRfeTI7CisJZGlydHktPm51bV9o aXRzKys7Cit9CisKKy8qKgorICogdm13X2ttc19kb19kbWFidWZfZGlydHkgLSBEaXJ0eSBwYXJ0 IG9mIGEgZG1hLWJ1ZmZlciBiYWNrZWQgZnJhbWVidWZmZXIKKyAqCisgKiBAZGV2X3ByaXY6IFBv aW50ZXIgdG8gdGhlIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqIEBmcmFtZWJ1ZmZlcjog UG9pbnRlciB0byB0aGUgZG1hLWJ1ZmZlciBiYWNrZWQgZnJhbWVidWZmZXIuCisgKiBAY2xpcHM6 IEFycmF5IG9mIGNsaXAgcmVjdHMuCisgKiBAbnVtX2NsaXBzOiBOdW1iZXIgb2YgY2xpcCByZWN0 cyBpbiBAY2xpcHMuCisgKiBAaW5jcmVtZW50OiBJbmNyZW1lbnQgdG8gdXNlIHdoZW4gbG9vcGlu ZyBvdmVyIEBjbGlwcy4KKyAqIEBpbnRlcnJ1cHRpYmxlOiBXaGV0aGVyIHRvIHBlcmZvcm0gd2Fp dHMgaW50ZXJydXB0aWJsZSBpZiBwb3NzaWJsZS4KKyAqIEBvdXRfZmVuY2U6IElmIG5vbi1OVUxM LCB3aWxsIHJldHVybiBhIHJlZi1jb3VudGVkIHBvaW50ZXIgdG8gYQorICogc3RydWN0IHZtd19m ZW5jZV9vYmouIFRoZSByZXR1cm5lZCBmZW5jZSBwb2ludGVyIG1heSBiZSBOVUxMIGluIHdoaWNo CisgKiBjYXNlIHRoZSBkZXZpY2UgaGFzIGFscmVhZHkgc3luY2hyb25pemVkLgorICoKKyAqIFJl dHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIC1FUkVT VEFSVFNZUyBpZgorICogaW50ZXJydXB0ZWQuCisgKi8KK2ludCB2bXdfa21zX3NvdV9kb19kbWFi dWZfZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCQlzdHJ1Y3Qgdm13X2Zy YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKLQkJCQl1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29s b3IsCiAJCQkJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAogCQkJCXVuc2lnbmVkIG51bV9j bGlwcywgaW50IGluY3JlbWVudCwKKwkJCQlib29sIGludGVycnVwdGlibGUsCiAJCQkJc3RydWN0 IHZtd19mZW5jZV9vYmogKipvdXRfZmVuY2UpCiB7Ci0Jc3RydWN0IHZtd19kaXNwbGF5X3VuaXQg KnVuaXRzW1ZNV0dGWF9OVU1fRElTUExBWV9VTklUU107Ci0Jc3RydWN0IGRybV9jbGlwX3JlY3Qg KmNsaXBzX3B0cjsKLQlpbnQgaSwgaywgbnVtX3VuaXRzLCByZXQ7Ci0Jc3RydWN0IGRybV9jcnRj ICpjcnRjOwotCXNpemVfdCBmaWZvX3NpemU7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpidWYg PQorCQljb250YWluZXJfb2YoZnJhbWVidWZmZXIsIHN0cnVjdCB2bXdfZnJhbWVidWZmZXJfZG1h YnVmLAorCQkJICAgICBiYXNlKS0+YnVmZmVyOworCXN0cnVjdCB2bXdfa21zX2RpcnR5IGRpcnR5 OworCWludCByZXQ7CiAKLQlzdHJ1Y3QgewotCQl1aW50MzJfdCBoZWFkZXI7Ci0JCVNWR0FGaWZv Q21kQmxpdEdNUkZCVG9TY3JlZW4gYm9keTsKLQl9ICpibGl0czsKKwlyZXQgPSB2bXdfa21zX2hl bHBlcl9idWZmZXJfcHJlcGFyZShkZXZfcHJpdiwgYnVmLCBpbnRlcnJ1cHRpYmxlLAorCQkJCQkg ICAgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBkb19kbWFidWZf ZGVmaW5lX2dtcmZiKGZpbGVfcHJpdiwgZGV2X3ByaXYsIGZyYW1lYnVmZmVyKTsKKwlyZXQgPSBk b19kbWFidWZfZGVmaW5lX2dtcmZiKGRldl9wcml2LCBmcmFtZWJ1ZmZlcik7CiAJaWYgKHVubGlr ZWx5KHJldCAhPSAwKSkKLQkJcmV0dXJuIHJldDsgLyogZGVmaW5lX2dtcmZiIHByaW50cyB3YXJu aW5ncyAqLworCQlnb3RvIG91dF9yZXZlcnQ7CiAKLQlmaWZvX3NpemUgPSBzaXplb2YoKmJsaXRz KSAqIG51bV9jbGlwczsKLQlibGl0cyA9IGttYWxsb2MoZmlmb19zaXplLCBHRlBfS0VSTkVMKTsK LQlpZiAodW5saWtlbHkoYmxpdHMgPT0gTlVMTCkpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g YWxsb2NhdGUgdGVtcG9yYXJ5IGNtZCBidWZmZXIuXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0J fQorCWRpcnR5LmZpZm9fY29tbWl0ID0gdm13X3NvdV9kbWFidWZfZmlmb19jb21taXQ7CisJZGly dHkuY2xpcCA9IHZtd19zb3VfZG1hYnVmX2NsaXA7CisJZGlydHkuZmlmb19yZXNlcnZlX3NpemUg PSBzaXplb2Yoc3RydWN0IHZtd19rbXNfc291X2RtYWJ1Zl9ibGl0KSAqCisJCW51bV9jbGlwczsK KwlyZXQgPSB2bXdfa21zX2hlbHBlcl9kaXJ0eShkZXZfcHJpdiwgZnJhbWVidWZmZXIsIGNsaXBz LCBOVUxMLAorCQkJCSAgIDAsIDAsIG51bV9jbGlwcywgaW5jcmVtZW50LCAmZGlydHkpOworCXZt d19rbXNfaGVscGVyX2J1ZmZlcl9maW5pc2goZGV2X3ByaXYsIE5VTEwsIGJ1Ziwgb3V0X2ZlbmNl LCBOVUxMKTsKIAotCW51bV91bml0cyA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAm ZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCWlmIChjcnRj LT5wcmltYXJ5LT5mYiAhPSAmZnJhbWVidWZmZXItPmJhc2UpCi0JCQljb250aW51ZTsKLQkJdW5p dHNbbnVtX3VuaXRzKytdID0gdm13X2NydGNfdG9fZHUoY3J0Yyk7Ci0JfQorCXJldHVybiByZXQ7 CiAKLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3VuaXRzOyBrKyspIHsKLQkJc3RydWN0IHZtd19kaXNw bGF5X3VuaXQgKnVuaXQgPSB1bml0c1trXTsKLQkJaW50IGhpdF9udW0gPSAwOwotCi0JCWNsaXBz X3B0ciA9IGNsaXBzOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0 ciArPSBpbmNyZW1lbnQpIHsKLQkJCWludCBjbGlwX3gxID0gY2xpcHNfcHRyLT54MSAtIHVuaXQt PmNydGMueDsKLQkJCWludCBjbGlwX3kxID0gY2xpcHNfcHRyLT55MSAtIHVuaXQtPmNydGMueTsK LQkJCWludCBjbGlwX3gyID0gY2xpcHNfcHRyLT54MiAtIHVuaXQtPmNydGMueDsKLQkJCWludCBj bGlwX3kyID0gY2xpcHNfcHRyLT55MiAtIHVuaXQtPmNydGMueTsKLQkJCWludCBtb3ZlX3gsIG1v dmVfeTsKLQotCQkJLyogc2tpcCBhbnkgY3J0Y3MgdGhhdCBtaXNzZXMgdGhlIGNsaXAgcmVnaW9u ICovCi0JCQlpZiAoY2xpcF94MSA+PSB1bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkgfHwKLQkJCSAg ICBjbGlwX3kxID49IHVuaXQtPmNydGMubW9kZS52ZGlzcGxheSB8fAotCQkJICAgIGNsaXBfeDIg PD0gMCB8fCBjbGlwX3kyIDw9IDApCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGNsaXAgc2l6ZSB0 byBjcnRjIHNpemUgKi8KLQkJCWNsaXBfeDIgPSBtaW5fdChpbnQsIGNsaXBfeDIsIHVuaXQtPmNy dGMubW9kZS5oZGlzcGxheSk7Ci0JCQljbGlwX3kyID0gbWluX3QoaW50LCBjbGlwX3kyLCB1bml0 LT5jcnRjLm1vZGUudmRpc3BsYXkpOwotCi0JCQkvKiB0cmFuc2xhdGUgYm90aCBzcmMgYW5kIGRl c3QgdG8gYnJpbmcgY2xpcCBpbnRvIHNjcmVlbiAqLwotCQkJbW92ZV94ID0gbWluX3QoaW50LCBj bGlwX3gxLCAwKTsKLQkJCW1vdmVfeSA9IG1pbl90KGludCwgY2xpcF95MSwgMCk7Ci0KLQkJCS8q IGFjdHVhbCB0cmFuc2xhdGUgZG9uZSBoZXJlICovCi0JCQlibGl0c1toaXRfbnVtXS5oZWFkZXIg PSBTVkdBX0NNRF9CTElUX0dNUkZCX1RPX1NDUkVFTjsKLQkJCWJsaXRzW2hpdF9udW1dLmJvZHku ZGVzdFNjcmVlbklkID0gdW5pdC0+dW5pdDsKLQkJCWJsaXRzW2hpdF9udW1dLmJvZHkuc3JjT3Jp Z2luLnggPSBjbGlwc19wdHItPngxIC0gbW92ZV94OwotCQkJYmxpdHNbaGl0X251bV0uYm9keS5z cmNPcmlnaW4ueSA9IGNsaXBzX3B0ci0+eTEgLSBtb3ZlX3k7Ci0JCQlibGl0c1toaXRfbnVtXS5i b2R5LmRlc3RSZWN0LmxlZnQgPSBjbGlwX3gxIC0gbW92ZV94OwotCQkJYmxpdHNbaGl0X251bV0u Ym9keS5kZXN0UmVjdC50b3AgPSBjbGlwX3kxIC0gbW92ZV95OwotCQkJYmxpdHNbaGl0X251bV0u Ym9keS5kZXN0UmVjdC5yaWdodCA9IGNsaXBfeDI7Ci0JCQlibGl0c1toaXRfbnVtXS5ib2R5LmRl c3RSZWN0LmJvdHRvbSA9IGNsaXBfeTI7Ci0JCQloaXRfbnVtKys7Ci0JCX0KLQotCQkvKiBubyBj bGlwcyBoaXQgdGhlIGNydGMgKi8KLQkJaWYgKGhpdF9udW0gPT0gMCkKLQkJCWNvbnRpbnVlOwot Ci0JCS8qIG9ubHkgcmV0dXJuIHRoZSBsYXN0IGZlbmNlICovCi0JCWlmIChvdXRfZmVuY2UgJiYg Km91dF9mZW5jZSkKLQkJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVuY2Uob3V0X2ZlbmNlKTsKLQot CQlmaWZvX3NpemUgPSBzaXplb2YoKmJsaXRzKSAqIGhpdF9udW07Ci0JCXJldCA9IHZtd19leGVj YnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVMTCwgYmxpdHMsCi0JCQkJCSAgZmlm b19zaXplLCAwLCAwLCBOVUxMLCBvdXRfZmVuY2UpOworb3V0X3JldmVydDoKKwl2bXdfa21zX2hl bHBlcl9idWZmZXJfcmV2ZXJ0KGJ1Zik7CiAKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJ CWJyZWFrOwotCX0KKwlyZXR1cm4gcmV0OworfQogCi0Ja2ZyZWUoYmxpdHMpOwogCi0JcmV0dXJu IHJldDsKKy8qKgorICogdm13X3NvdV9yZWFkYmFja19maWZvX2NvbW1pdCAtIENhbGxiYWNrIHRv IHN1Ym1pdCBhIHNldCBvZiByZWFkYmFjayBjbGlwcy4KKyAqCisgKiBAZGlydHk6IFRoZSBjbG9z dXJlIHN0cnVjdHVyZS4KKyAqCisgKiBDb21taXRzIGEgcHJldmlvdXNseSBidWlsdCBjb21tYW5k IGJ1ZmZlciBvZiByZWFkYmFjayBjbGlwcy4KKyAqLworc3RhdGljIHZvaWQgdm13X3NvdV9yZWFk YmFja19maWZvX2NvbW1pdChzdHJ1Y3Qgdm13X2ttc19kaXJ0eSAqZGlydHkpCit7CisJdm13X2Zp Zm9fY29tbWl0KGRpcnR5LT5kZXZfcHJpdiwKKwkJCXNpemVvZihzdHJ1Y3Qgdm13X2ttc19zb3Vf cmVhZGJhY2tfYmxpdCkgKgorCQkJZGlydHktPm51bV9oaXRzKTsKIH0KIAorLyoqCisgKiB2bXdf c291X3JlYWRiYWNrX2NsaXAgLSBDYWxsYmFjayB0byBlbmNvZGUgYSByZWFkYmFjayBjbGlwcmVj dC4KKyAqCisgKiBAZGlydHk6IFRoZSBjbG9zdXJlIHN0cnVjdHVyZQorICoKKyAqIEVuY29kZXMg YSBCTElUX1NDUkVFTl9UT19HTVJGQiBjbGlwcmVjdC4KKyAqLworc3RhdGljIHZvaWQgdm13X3Nv dV9yZWFkYmFja19jbGlwKHN0cnVjdCB2bXdfa21zX2RpcnR5ICpkaXJ0eSkKK3sKKwlzdHJ1Y3Qg dm13X2ttc19zb3VfcmVhZGJhY2tfYmxpdCAqYmxpdCA9IGRpcnR5LT5jbWQ7CisKKwlibGl0ICs9 IGRpcnR5LT5udW1faGl0czsKKwlibGl0LT5oZWFkZXIgPSBTVkdBX0NNRF9CTElUX1NDUkVFTl9U T19HTVJGQjsKKwlibGl0LT5ib2R5LnNyY1NjcmVlbklkID0gZGlydHktPnVuaXQtPnVuaXQ7CisJ YmxpdC0+Ym9keS5kZXN0T3JpZ2luLnggPSBkaXJ0eS0+ZmJfeDsKKwlibGl0LT5ib2R5LmRlc3RP cmlnaW4ueSA9IGRpcnR5LT5mYl95OworCWJsaXQtPmJvZHkuc3JjUmVjdC5sZWZ0ID0gZGlydHkt PnVuaXRfeDE7CisJYmxpdC0+Ym9keS5zcmNSZWN0LnRvcCA9IGRpcnR5LT51bml0X3kxOworCWJs aXQtPmJvZHkuc3JjUmVjdC5yaWdodCA9IGRpcnR5LT51bml0X3gyOworCWJsaXQtPmJvZHkuc3Jj UmVjdC5ib3R0b20gPSBkaXJ0eS0+dW5pdF95MjsKKwlkaXJ0eS0+bnVtX2hpdHMrKzsKK30KKwor LyoqCisgKiB2bXdfa21zX3NvdV9yZWFkYmFjayAtIFBlcmZvcm0gYSByZWFkYmFjayBmcm9tIHRo ZSBzY3JlZW4gb2JqZWN0IHN5c3RlbSB0bworICogYSBkbWEtYnVmZmVyIGJhY2tlZCBmcmFtZWJ1 ZmZlci4KKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gdGhlIGRldmljZSBwcml2YXRlIHN0 cnVjdHVyZS4KKyAqIEBmaWxlX3ByaXY6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX2ZpbGUgaWRl bnRpZnlpbmcgdGhlIGNhbGxlci4KKyAqIE11c3QgYmUgc2V0IHRvIE5VTEwgaWYgQHVzZXJfZmVu Y2VfcmVwIGlzIE5VTEwuCisgKiBAdmZiOiBQb2ludGVyIHRvIHRoZSBkbWEtYnVmZmVyIGJhY2tl ZCBmcmFtZWJ1ZmZlci4KKyAqIEB1c2VyX2ZlbmNlX3JlcDogVXNlci1zcGFjZSBwcm92aWRlZCBz dHJ1Y3R1cmUgZm9yIGZlbmNlIGluZm9ybWF0aW9uLgorICogTXVzdCBiZSBzZXQgdG8gbm9uLU5V TEwgaWYgQGZpbGVfcHJpdiBpcyBub24tTlVMTC4KKyAqIEB2Y2xpcHM6IEFycmF5IG9mIGNsaXAg cmVjdHMuCisgKiBAbnVtX2NsaXBzOiBOdW1iZXIgb2YgY2xpcCByZWN0cyBpbiBAdmNsaXBzLgor ICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUuIC1FUkVTVEFSVFNZUyBpZgorICogaW50ZXJydXB0ZWQuCisgKi8KK2ludCB2bXdfa21zX3Nv dV9yZWFkYmFjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAorCQkJIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKKwkJCSBz dHJ1Y3QgZHJtX3Ztd19mZW5jZV9yZXAgX191c2VyICp1c2VyX2ZlbmNlX3JlcCwKKwkJCSBzdHJ1 Y3QgZHJtX3Ztd19yZWN0ICp2Y2xpcHMsCisJCQkgdWludDMyX3QgbnVtX2NsaXBzKQoreworCXN0 cnVjdCB2bXdfZG1hX2J1ZmZlciAqYnVmID0KKwkJY29udGFpbmVyX29mKHZmYiwgc3RydWN0IHZt d19mcmFtZWJ1ZmZlcl9kbWFidWYsIGJhc2UpLT5idWZmZXI7CisJc3RydWN0IHZtd19rbXNfZGly dHkgZGlydHk7CisJaW50IHJldDsKKworCXJldCA9IHZtd19rbXNfaGVscGVyX2J1ZmZlcl9wcmVw YXJlKGRldl9wcml2LCBidWYsIHRydWUsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0gZG9fZG1hYnVmX2RlZmluZV9nbXJmYihkZXZfcHJpdiwgdmZiKTsKKwlpZiAo dW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9yZXZlcnQ7CisKKwlkaXJ0eS5maWZvX2Nv bW1pdCA9IHZtd19zb3VfcmVhZGJhY2tfZmlmb19jb21taXQ7CisJZGlydHkuY2xpcCA9IHZtd19z b3VfcmVhZGJhY2tfY2xpcDsKKwlkaXJ0eS5maWZvX3Jlc2VydmVfc2l6ZSA9IHNpemVvZihzdHJ1 Y3Qgdm13X2ttc19zb3VfcmVhZGJhY2tfYmxpdCkgKgorCQludW1fY2xpcHM7CisJcmV0ID0gdm13 X2ttc19oZWxwZXJfZGlydHkoZGV2X3ByaXYsIHZmYiwgTlVMTCwgdmNsaXBzLAorCQkJCSAgIDAs IDAsIG51bV9jbGlwcywgMSwgJmRpcnR5KTsKKwl2bXdfa21zX2hlbHBlcl9idWZmZXJfZmluaXNo KGRldl9wcml2LCBmaWxlX3ByaXYsIGJ1ZiwgTlVMTCwKKwkJCQkgICAgIHVzZXJfZmVuY2VfcmVw KTsKKworCXJldHVybiByZXQ7CisKK291dF9yZXZlcnQ6CisJdm13X2ttc19oZWxwZXJfYnVmZmVy X3JldmVydChidWYpOworCisJcmV0dXJuIHJldDsKK30KLS0gCjIuMS4wCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK