From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 4/5] drm/i915: Tidy workaround batch buffer emission Date: Thu, 16 Feb 2017 12:23:24 +0000 Message-ID: <20170216122325.31391-5-tvrtko.ursulin@linux.intel.com> References: <20170216122325.31391-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2AE266EAF7 for ; Thu, 16 Feb 2017 12:23:47 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id r18so2857416wmd.3 for ; Thu, 16 Feb 2017 04:23:47 -0800 (PST) In-Reply-To: <20170216122325.31391-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClVzZSB0aGUg IipiYXRjaCsrID0gIiBzdHlsZSBhcyBpbiB0aGUgcmluZyBlbWlzc2lvbiBmb3IgYmV0dGVyCnJl YWRhYmlsaXR5IGFuZCBhbHNvIHNpbXBsaWZ5IHRoZSBsb2dpYyBhIGJpdCBieSBjb25zb2xpZGF0 aW5nCnRoZSBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIGFuZCBvdmVyZmxvdyBjaGVja2lu Zy4gVGhlCmxhdHRlciBpcyBhIHByb2dyYW1taW5nIGVycm9yIHNvIGl0IGlzIG5vdCByZXF1aXJl ZCB0byBjaGVjawpmb3IgaXQgYWZ0ZXIgZWFjaCB3cml0ZSB0byB0aGUgb2JqZWN0LCBidXQgcmF0 aGVyIGRvIGl0IG9uY2UgdGhlCndob2xlIHN0YXRlIGhhcyBiZWVuIHdyaXR0ZW4gYW5kIGZhaWwg dGhlIGRyaXZlciBpZiBzb21ldGhpbmcKd2VudCB3cm9uZy4KCnYyOiBSZWJhc2UuCgp2MzogS2Vl cCB0cmFjayBvZiBvZmZzZXRzIGFuZCBzaXplcyBpbiBieXRlcyBmb3Igc2ltcGxpY2l0eQogICAg YW5kIHJlbmFtZSBmdW5jdGlvbiBwb2ludGVyIHZhcmlhYmxlIHRvIF9mbiBzdWZmaXguCiAgICAo Q2hyaXMgV2lsc29uKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1 bGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2ls c29uLmNvLnVrPiAodjIpCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgfCAz MTYgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgMTEzIGluc2VydGlvbnMoKyksIDIwMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCmluZGV4IGVlNDMxZDM5Y2UwNi4uZWMzOWUzZTQyMmNhIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYwpAQCAtODkwLDE4ICs4OTAsNiBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1 ZXN0X2FsbG9jKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKIAlyZXR1cm4g cmV0OwogfQogCi0jZGVmaW5lIHdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgY21kKQkJCQkJXAot CWRvIHsJCQkJCQkJCVwKLQkJaW50IF9faW5kZXggPSAoaW5kZXgpKys7CQkJCVwKLQkJaWYgKFdB Uk5fT04oX19pbmRleCA+PSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHVpbnQzMl90KSkpKSB7IFwKLQkJ CXJldHVybiAtRU5PU1BDOwkJCQkJXAotCQl9CQkJCQkJCVwKLQkJYmF0Y2hbX19pbmRleF0gPSAo Y21kKTsJCQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIHdhX2N0eF9lbWl0X3JlZyhiYXRj aCwgaW5kZXgsIHJlZykgXAotCXdhX2N0eF9lbWl0KChiYXRjaCksIChpbmRleCksIGk5MTVfbW1p b19yZWdfb2Zmc2V0KHJlZykpCi0KIC8qCiAgKiBJbiB0aGlzIFdBIHdlIG5lZWQgdG8gc2V0IEdF TjhfTDNTUUNSRUc0WzIxOjIxXSBhbmQgcmVzZXQgaXQgYWZ0ZXIKICAqIFBJUEVfQ09OVFJPTCBp bnN0cnVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIGZsdXNoIHRvIGhhcHBlbiBjb3Jy ZWN0bHkKQEAgLTkxOCw1NiArOTA2LDMxIEBAIHN0YXRpYyBpbnQgZXhlY2xpc3RzX3JlcXVlc3Rf YWxsb2Moc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQogICogVGhpcyBXQSBp cyBhbHNvIHJlcXVpcmVkIGZvciBHZW45IHNvIGV4dHJhY3RpbmcgYXMgYSBmdW5jdGlvbiBhdm9p ZHMKICAqIGNvZGUgZHVwbGljYXRpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdlbjhfZW1p dF9mbHVzaF9jb2hlcmVudGwzX3dhKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJ CQkJCXVpbnQzMl90ICpiYXRjaCwKLQkJCQkJCXVpbnQzMl90IGluZGV4KQotewotCXVpbnQzMl90 IGwzc3FjNF9mbHVzaCA9ICgweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJ TkVTKTsKLQotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgKE1JX1NUT1JFX1JFR0lTVEVSX01F TV9HRU44IHwKLQkJCQkgICBNSV9TUk1fTFJNX0dMT0JBTF9HVFQpKTsKLQl3YV9jdHhfZW1pdF9y ZWcoYmF0Y2gsIGluZGV4LCBHRU44X0wzU1FDUkVHNCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGlu ZGV4LCBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyNTYpOwotCXdhX2N0eF9l bWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX0xP QURfUkVHSVNURVJfSU1NKDEpKTsKLQl3YV9jdHhfZW1pdF9yZWcoYmF0Y2gsIGluZGV4LCBHRU44 X0wzU1FDUkVHNCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBsM3NxYzRfZmx1c2gpOwot Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05UUk9MKDYpKTsKLQl3 YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAotCQkJCSAg IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEUpKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5k ZXgsIDApOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQoYmF0 Y2gsIGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCi0Jd2FfY3R4 X2VtaXQoYmF0Y2gsIGluZGV4LCAoTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCB8Ci0JCQkJICAg TUlfU1JNX0xSTV9HTE9CQUxfR1RUKSk7Ci0Jd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwg R0VOOF9MM1NRQ1JFRzQpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgaTkxNV9nZ3R0X29m ZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMjU2KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgs IDApOwotCi0JcmV0dXJuIGluZGV4OwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHdhX2N0 eF9zdGFydChzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJCQkgICAgdWludDMyX3Qg b2Zmc2V0LAotCQkJCSAgICB1aW50MzJfdCBzdGFydF9hbGlnbm1lbnQpCitzdGF0aWMgdTMyICoK K2dlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyICpiYXRjaCkKIHsKLQlyZXR1cm4gd2FfY3R4LT5vZmZzZXQgPSBBTElHTihvZmZz ZXQsIHN0YXJ0X2FsaWdubWVudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHdhX2N0eF9lbmQo c3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkgICAgIHVpbnQzMl90IG9mZnNldCwK LQkJCSAgICAgdWludDMyX3Qgc2l6ZV9hbGlnbm1lbnQpCi17Ci0Jd2FfY3R4LT5zaXplID0gb2Zm c2V0IC0gd2FfY3R4LT5vZmZzZXQ7Ci0KLQlXQVJOKHdhX2N0eC0+c2l6ZSAlIHNpemVfYWxpZ25t ZW50LAotCSAgICAgIndhX2N0eF9iYiBmYWlsZWQgc2FuaXR5IGNoZWNrczogc2l6ZSAlZCBpcyBu b3QgYWxpZ25lZCB0byAlZFxuIiwKLQkgICAgIHdhX2N0eC0+c2l6ZSwgc2l6ZV9hbGlnbm1lbnQp OwotCXJldHVybiAwOworCSpiYXRjaCsrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfCBN SV9TUk1fTFJNX0dMT0JBTF9HVFQ7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChH RU44X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2Ny YXRjaCkgKyAyNTY7CisJKmJhdGNoKysgPSAwOworCisJKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lT VEVSX0lNTSgxKTsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNS RUc0KTsKKwkqYmF0Y2grKyA9IDB4NDA0MDAwMDAgfCBHRU44X0xRU0NfRkxVU0hfQ09IRVJFTlRf TElORVM7CisKKwkqYmF0Y2grKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNik7CisJKmJhdGNoKysg PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOwor CSpiYXRjaCsrID0gMDsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAwOworCSpiYXRjaCsr ID0gMDsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCB8IE1JX1NSTV9M Uk1fR0xPQkFMX0dUVDsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNT UUNSRUc0KTsKKwkqYmF0Y2grKyA9IGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSAr IDI1NjsKKwkqYmF0Y2grKyA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC05ODUs NDIgKzk0OCwyOCBAQCBzdGF0aWMgaW5saW5lIGludCB3YV9jdHhfZW5kKHN0cnVjdCBpOTE1X3dh X2N0eF9iYiAqd2FfY3R4LAogICogTUlfQkFUQ0hfQlVGRkVSX0VORCB3aWxsIGJlIGFkZGVkIHRv IHBlcmN0eCBiYXRjaCBhbmQgYm90aCBvZiB0aGVtIHRvZ2V0aGVyCiAgKiBtYWtlcyBhIGNvbXBs ZXRlIGJhdGNoIGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhf YmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgICBzdHJ1Y3QgaTkxNV93 YV9jdHhfYmIgKndhX2N0eCwKLQkJCQkgICAgdWludDMyX3QgKmJhdGNoLAotCQkJCSAgICB1aW50 MzJfdCAqb2Zmc2V0KQorc3RhdGljIHUzMiAqZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKIHsKLQl1aW50MzJfdCBzY3Jh dGNoX2FkZHI7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhfc3RhcnQod2FfY3R4LCAqb2Zmc2V0 LCBDQUNIRUxJTkVfRFdPUkRTKTsKLQogCS8qIFdhRGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlv bjpiZHcsY2h2ICovCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9BUkJfT05fT0ZGIHwg TUlfQVJCX0RJU0FCTEUpOworCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNB QkxFOwogCiAJLyogV2FGbHVzaENvaGVyZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNoOmJk dyAqLwotCWlmIChJU19CUk9BRFdFTEwoZW5naW5lLT5pOTE1KSkgewotCQlpbnQgcmMgPSBnZW44 X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoLCBpbmRleCk7Ci0JCWlmIChy YyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWluZGV4ID0gcmM7Ci0JfQorCWlmIChJU19CUk9BRFdF TEwoZW5naW5lLT5pOTE1KSkKKwkJYmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193 YShlbmdpbmUsIGJhdGNoKTsKIAorCSpiYXRjaCsrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg2KTsK KwkqYmF0Y2grKyA9IFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8IFBJUEVfQ09OVFJPTF9HTE9CQUxf R1RUX0lWQiB8CisJCSAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8IFBJUEVfQ09OVFJPTF9RV19X UklURTsKIAkvKiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6YmR3LGNodiAqLwogCS8q IEFjdHVhbCBzY3JhdGNoIGxvY2F0aW9uIGlzIGF0IDEyOCBieXRlcyBvZmZzZXQgKi8KLQlzY3Jh dGNoX2FkZHIgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyICogQ0FDSEVM SU5FX0JZVEVTOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05U Uk9MKDYpKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRST0xfRkxVU0hf TDMgfAotCQkJCSAgIFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8Ci0JCQkJICAgUElQRV9D T05UUk9MX0NTX1NUQUxMIHwKLQkJCQkgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUpKTsKLQl3YV9j dHhfZW1pdChiYXRjaCwgaW5kZXgsIHNjcmF0Y2hfYWRkcik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gs IGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgMCk7CisJKmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+ c2NyYXRjaCkgKyAyICogQ0FDSEVMSU5FX0JZVEVTOworCSpiYXRjaCsrID0gMDsKKwkqYmF0Y2gr KyA9IDA7CisJKmJhdGNoKysgPSAwOwogCiAJLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8K LQl3aGlsZSAoaW5kZXggJSBDQUNIRUxJTkVfRFdPUkRTKQotCQl3YV9jdHhfZW1pdChiYXRjaCwg aW5kZXgsIE1JX05PT1ApOworCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElO RV9CWVRFUykKKwkJKmJhdGNoKysgPSBNSV9OT09QOwogCiAJLyoKIAkgKiBNSV9CQVRDSF9CVUZG RVJfRU5EIGlzIG5vdCByZXF1aXJlZCBpbiBJbmRpcmVjdCBjdHggQkIgYmVjYXVzZQpAQCAtMTAy OCw3ICs5NzcsNyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJICogaW4gdGhlIHJlZ2lzdGVyIENUWF9SQ1NfSU5E SVJFQ1RfQ1RYCiAJICovCiAKLQlyZXR1cm4gd2FfY3R4X2VuZCh3YV9jdHgsICpvZmZzZXQgPSBp bmRleCwgQ0FDSEVMSU5FX0RXT1JEUyk7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMTA0 MCw1OCArOTg5LDM4IEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKICAqICBUaGlzIGJhdGNoIGlzIHRlcm1pbmF0ZWQg d2l0aCBNSV9CQVRDSF9CVUZGRVJfRU5EIGFuZCBzbyB3ZSBuZWVkIG5vdCBhZGQgcGFkZGluZwog ICogIHRvIGFsaWduIGl0IHdpdGggY2FjaGVsaW5lIGFzIHBhZGRpbmcgYWZ0ZXIgTUlfQkFUQ0hf QlVGRkVSX0VORCBpcyByZWR1bmRhbnQuCiAgKi8KLXN0YXRpYyBpbnQgZ2VuOF9pbml0X3BlcmN0 eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgICAgc3RydWN0IGk5 MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkgICAgICAgdWludDMyX3QgKmJhdGNoLAotCQkJICAg ICAgIHVpbnQzMl90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpnZW44X2luaXRfcGVyY3R4X2JiKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKIHsKLQl1aW50MzJfdCBp bmRleCA9IHdhX2N0eF9zdGFydCh3YV9jdHgsICpvZmZzZXQsIENBQ0hFTElORV9EV09SRFMpOwot CiAJLyogV2FEaXNhYmxlQ3R4UmVzdG9yZUFyYml0cmF0aW9uOmJkdyxjaHYgKi8KLQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRU5BQkxFKTsKLQotCXdh X2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJKmJhdGNoKysg PSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKKwkqYmF0Y2grKyA9IE1JX0JBVENIX0JV RkZFUl9FTkQ7CiAKLQlyZXR1cm4gd2FfY3R4X2VuZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRleCwg MSk7CisJcmV0dXJuIGJhdGNoOwogfQogCi1zdGF0aWMgaW50IGdlbjlfaW5pdF9pbmRpcmVjdGN0 eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJICAgIHN0cnVjdCBpOTE1 X3dhX2N0eF9iYiAqd2FfY3R4LAotCQkJCSAgICB1aW50MzJfdCAqYmF0Y2gsCi0JCQkJICAgIHVp bnQzMl90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpnZW45X2luaXRfaW5kaXJlY3RjdHhfYmIoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewotCWludCByZXQ7Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OwotCXVpbnQz Ml90IGluZGV4ID0gd2FfY3R4X3N0YXJ0KHdhX2N0eCwgKm9mZnNldCwgQ0FDSEVMSU5FX0RXT1JE Uyk7Ci0KIAkvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hlTGluZXNBdENvbnRleHRTd2l0Y2g6c2ts LGJ4dCxnbGsgKi8KLQlyZXQgPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUs IGJhdGNoLCBpbmRleCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JaW5kZXggPSBy ZXQ7CisJYmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNo KTsKIAogCS8qIFdhRGlzYWJsZUdhdGhlckF0U2V0U2hhZGVyQ29tbW9uU2xpY2U6c2tsLGJ4dCxr YmwsZ2xrICovCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9MT0FEX1JFR0lTVEVSX0lN TSgxKSk7Ci0Jd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwgQ09NTU9OX1NMSUNFX0NISUNL RU4yKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIF9NQVNLRURfQklUX0RJU0FCTEUoCi0J CQkgICAgR0VOOV9ESVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVSX0NPTU1PTl9TTElDRSkpOwot CXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfTk9PUCk7CisJKmJhdGNoKysgPSBNSV9MT0FE X1JFR0lTVEVSX0lNTSgxKTsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KENPTU1P Tl9TTElDRV9DSElDS0VOMik7CisJKmJhdGNoKysgPSBfTUFTS0VEX0JJVF9ESVNBQkxFKAorCQkJ R0VOOV9ESVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVSX0NPTU1PTl9TTElDRSk7CisJKmJhdGNo KysgPSBNSV9OT09QOwogCiAJLyogV2FDbGVhclNsbVNwYWNlQXRDb250ZXh0U3dpdGNoOmtibCAq LwogCS8qIEFjdHVhbCBzY3JhdGNoIGxvY2F0aW9uIGlzIGF0IDEyOCBieXRlcyBvZmZzZXQgKi8K LQlpZiAoSVNfS0JMX1JFVklEKGRldl9wcml2LCAwLCBLQkxfUkVWSURfQTApKSB7Ci0JCXUzMiBz Y3JhdGNoX2FkZHIgPQotCQkJaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMiAq IENBQ0hFTElORV9CWVRFUzsKLQotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIEdGWF9PUF9Q SVBFX0NPTlRST0woNikpOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRS T0xfRkxVU0hfTDMgfAotCQkJCQkgICBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAotCQkJ CQkgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAotCQkJCQkgICBQSVBFX0NPTlRST0xfUVdfV1JJ VEUpKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBzY3JhdGNoX2FkZHIpOwotCQl3YV9j dHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDAp OwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOworCWlmIChJU19LQkxfUkVWSUQoZW5n aW5lLT5pOTE1LCAwLCBLQkxfUkVWSURfQTApKSB7CisJCSpiYXRjaCsrID0gR0ZYX09QX1BJUEVf Q09OVFJPTCg2KTsKKwkJKmJhdGNoKysgPSBQSVBFX0NPTlRST0xfRkxVU0hfTDMgfCBQSVBFX0NP TlRST0xfR0xPQkFMX0dUVF9JVkIgfAorCQkJICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwgUElQ RV9DT05UUk9MX1FXX1dSSVRFOworCQkqYmF0Y2grKyA9IGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5l LT5zY3JhdGNoKSArCisJCQkgICAyICogQ0FDSEVMSU5FX0JZVEVTOworCQkqYmF0Y2grKyA9IDA7 CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOwogCX0KIAogCS8qIFdhTWVkaWFQb29s U3RhdGVDbWRJbldBQkI6Ynh0LGdsayAqLwpAQCAtMTEwOSw0MSArMTAzOCwzNyBAQCBzdGF0aWMg aW50IGdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCiAJCSAqIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLCB0byBhdm9pZCBkdXBsaWNhdGlvbiB0 aGV5IGFyZQogCQkgKiBub3Qgc2hvd24gaGVyZSBhZ2Fpbi4KIAkJICovCi0JCXUzMiBldV9wb29s X2NvbmZpZyA9IDB4MDA3NzcwMDA7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0VOOV9N RURJQV9QT09MX1NUQVRFKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRU45X01FRElB X1BPT0xfRU5BQkxFKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBldV9wb29sX2NvbmZp Zyk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNo LCBpbmRleCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7CisJCSpiYXRjaCsr ID0gR0VOOV9NRURJQV9QT09MX1NUQVRFOworCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9F TkFCTEU7CisJCSpiYXRjaCsrID0gMHgwMDc3NzAwMDsKKwkJKmJhdGNoKysgPSAwOworCQkqYmF0 Y2grKyA9IDA7CisJCSpiYXRjaCsrID0gMDsKIAl9CiAKIAkvKiBQYWQgdG8gZW5kIG9mIGNhY2hl bGluZSAqLwotCXdoaWxlIChpbmRleCAlIENBQ0hFTElORV9EV09SRFMpCi0JCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgTUlfTk9PUCk7CisJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWJhdGNoICUg Q0FDSEVMSU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7CiAKLQlyZXR1cm4gd2FfY3R4 X2VuZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRleCwgQ0FDSEVMSU5FX0RXT1JEUyk7CisJcmV0dXJu IGJhdGNoOwogfQogCi1zdGF0aWMgaW50IGdlbjlfaW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLAotCQkJICAgICAgIHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2Ff Y3R4LAotCQkJICAgICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJCSAgICAgICB1aW50MzJfdCAqb2Zm c2V0KQorc3RhdGljIHUzMiAqZ2VuOV9pbml0X3BlcmN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhfc3Rh cnQod2FfY3R4LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRTKTsKLQotCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJKmJhdGNoKysgPSBNSV9CQVRDSF9C VUZGRVJfRU5EOwogCi0JcmV0dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5kZXgs IDEpOworCXJldHVybiBiYXRjaDsKIH0KIAotc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4X29i aihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBzaXplKQorI2RlZmluZSBDVFhf V0FfQkJfT0JKX1NJWkUgKFBBR0VfU0laRSkKKworc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCWludCBlcnI7CiAKLQlvYmog PSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNSwgUEFHRV9BTElHTihzaXplKSk7 CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShlbmdpbmUtPmk5MTUsIENUWF9XQV9CQl9P QkpfU0laRSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCkBA IC0xMTY1LDgwICsxMDkwLDY2IEBAIHN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eF9vYmooc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgc2l6ZSkKIAlyZXR1cm4gZXJyOwogfQog Ci1zdGF0aWMgdm9pZCBscmNfZGVzdHJveV93YV9jdHhfb2JqKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3N0YXRpYyB2b2lkIGxyY19kZXN0cm95X3dhX2N0eChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCiB7CiAJaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmVuZ2lu ZS0+d2FfY3R4LnZtYSk7CiB9CiAKK3R5cGVkZWYgdTMyICooKndhX2JiX2Z1bmNfdCkoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKTsKKwogc3RhdGljIGludCBpbnRl bF9pbml0X3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewog CXN0cnVjdCBpOTE1X2N0eF93b3JrYXJvdW5kcyAqd2FfY3R4ID0gJmVuZ2luZS0+d2FfY3R4Owot CXVpbnQzMl90ICpiYXRjaDsKLQl1aW50MzJfdCBvZmZzZXQ7CisJc3RydWN0IGk5MTVfd2FfY3R4 X2JiICp3YV9iYlsyXSA9IHsgJndhX2N0eC0+aW5kaXJlY3RfY3R4LAorCQkJCQkgICAgJndhX2N0 eC0+cGVyX2N0eCB9OworCXdhX2JiX2Z1bmNfdCB3YV9iYl9mblsyXTsKIAlzdHJ1Y3QgcGFnZSAq cGFnZTsKKwl2b2lkICpiYXRjaCwgKmJhdGNoX3B0cjsKKwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQg cmV0OwogCi0JV0FSTl9PTihlbmdpbmUtPmlkICE9IFJDUyk7CisJaWYgKFdBUk5fT04oZW5naW5l LT5pZCAhPSBSQ1MgfHwgIWVuZ2luZS0+c2NyYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOwogCi0J LyogdXBkYXRlIHRoaXMgd2hlbiBXQSBmb3IgaGlnaGVyIEdlbiBhcmUgYWRkZWQgKi8KLQlpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPiA5KSB7Ci0JCURSTV9FUlJPUigiV0EgYmF0Y2ggYnVm ZmVyIGlzIG5vdCBpbml0aWFsaXplZCBmb3IgR2VuJWRcbiIsCi0JCQkgIElOVEVMX0dFTihlbmdp bmUtPmk5MTUpKTsKKwlzd2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7CisJY2FzZSA5 OgorCQl3YV9iYl9mblswXSA9IGdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYjsKKwkJd2FfYmJfZm5b MV0gPSBnZW45X2luaXRfcGVyY3R4X2JiOworCQlicmVhazsKKwljYXNlIDg6CisJCXdhX2JiX2Zu WzBdID0gZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiOworCQl3YV9iYl9mblsxXSA9IGdlbjhfaW5p dF9wZXJjdHhfYmI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSk7CiAJCXJldHVybiAwOwogCX0KIAotCS8qIHNvbWUgV0EgcGVyZm9y bSB3cml0ZXMgdG8gc2NyYXRjaCBwYWdlLCBlbnN1cmUgaXQgaXMgdmFsaWQgKi8KLQlpZiAoIWVu Z2luZS0+c2NyYXRjaCkgewotCQlEUk1fRVJST1IoInNjcmF0Y2ggcGFnZSBub3QgYWxsb2NhdGVk IGZvciAlc1xuIiwgZW5naW5lLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0 ID0gbHJjX3NldHVwX3dhX2N0eF9vYmooZW5naW5lLCBQQUdFX1NJWkUpOworCXJldCA9IGxyY19z ZXR1cF93YV9jdHgoZW5naW5lKTsKIAlpZiAocmV0KSB7CiAJCURSTV9ERUJVR19EUklWRVIoIkZh aWxlZCB0byBzZXR1cCBjb250ZXh0IFdBIHBhZ2U6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0 OwogCX0KIAogCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uod2FfY3R4LT52 bWEtPm9iaiwgMCk7Ci0JYmF0Y2ggPSBrbWFwX2F0b21pYyhwYWdlKTsKLQlvZmZzZXQgPSAwOwot Ci0JaWYgKElTX0dFTjgoZW5naW5lLT5pOTE1KSkgewotCQlyZXQgPSBnZW44X2luaXRfaW5kaXJl Y3RjdHhfYmIoZW5naW5lLAotCQkJCQkgICAgICAgJndhX2N0eC0+aW5kaXJlY3RfY3R4LAotCQkJ CQkgICAgICAgYmF0Y2gsCi0JCQkJCSAgICAgICAmb2Zmc2V0KTsKLQkJaWYgKHJldCkKLQkJCWdv dG8gb3V0OworCWJhdGNoID0gYmF0Y2hfcHRyID0ga21hcF9hdG9taWMocGFnZSk7CiAKLQkJcmV0 ID0gZ2VuOF9pbml0X3BlcmN0eF9iYihlbmdpbmUsCi0JCQkJCSAgJndhX2N0eC0+cGVyX2N0eCwK LQkJCQkJICBiYXRjaCwKLQkJCQkJICAmb2Zmc2V0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0 OwotCX0gZWxzZSBpZiAoSVNfR0VOOShlbmdpbmUtPmk5MTUpKSB7Ci0JCXJldCA9IGdlbjlfaW5p dF9pbmRpcmVjdGN0eF9iYihlbmdpbmUsCi0JCQkJCSAgICAgICAmd2FfY3R4LT5pbmRpcmVjdF9j dHgsCi0JCQkJCSAgICAgICBiYXRjaCwKLQkJCQkJICAgICAgICZvZmZzZXQpOwotCQlpZiAocmV0 KQotCQkJZ290byBvdXQ7Ci0KLQkJcmV0ID0gZ2VuOV9pbml0X3BlcmN0eF9iYihlbmdpbmUsCi0J CQkJCSAgJndhX2N0eC0+cGVyX2N0eCwKLQkJCQkJICBiYXRjaCwKLQkJCQkJICAmb2Zmc2V0KTsK LQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCS8qCisJICogRW1pdCB0aGUgdHdvIHdvcmthcm91 bmQgYmF0Y2ggYnVmZmVycywgcmVjb3JkaW5nIHRoZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBzdGFy dCBvZiB0aGUgd29ya2Fyb3VuZCBiYXRjaCBidWZmZXIgb2JqZWN0IGZvciBlYWNoIGFuZCB0aGVp cgorCSAqIHJlc3BlY3RpdmUgc2l6ZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUod2FfYmJfZm4pOyBpKyspIHsKKwkJd2FfYmJbaV0tPm9mZnNldCA9IEFMSUdOKGJhdGNoX3B0 ciAtIGJhdGNoLCBDQUNIRUxJTkVfQllURVMpOworCQliYXRjaF9wdHIgPSB3YV9iYl9mbltpXShl bmdpbmUsIGJhdGNoX3B0cik7CisJCXdhX2JiW2ldLT5zaXplID0gYmF0Y2hfcHRyIC0gYmF0Y2gg KyB3YV9iYltpXS0+b2Zmc2V0OwogCX0KIAotb3V0OgorCUJVR19PTihiYXRjaF9wdHIgLSBiYXRj aCA+IENUWF9XQV9CQl9PQkpfU0laRSk7CisKIAlrdW5tYXBfYXRvbWljKGJhdGNoKTsKLQlpZiAo cmV0KQotCQlscmNfZGVzdHJveV93YV9jdHhfb2JqKGVuZ2luZSk7CiAKLQlyZXR1cm4gcmV0Owor CXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIHBvcnRfc2Vxbm8oc3RydWN0IGV4ZWNsaXN0X3Bv cnQgKnBvcnQpCkBAIC0xNjg1LDcgKzE1OTYsNyBAQCB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19j bGVhbnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCWludGVsX2VuZ2luZV9j bGVhbnVwX2NvbW1vbihlbmdpbmUpOwogCi0JbHJjX2Rlc3Ryb3lfd2FfY3R4X29iaihlbmdpbmUp OworCWxyY19kZXN0cm95X3dhX2N0eChlbmdpbmUpOwogCWVuZ2luZS0+aTkxNSA9IE5VTEw7CiAJ ZGV2X3ByaXYtPmVuZ2luZVtlbmdpbmUtPmlkXSA9IE5VTEw7CiAJa2ZyZWUoZW5naW5lKTsKQEAg LTE5NzEsMTUgKzE4ODIsMTQgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRl KHUzMiAqcmVnX3N0YXRlLAogCQkJdTMyIGdndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3 YV9jdHgtPnZtYSk7CiAKIAkJCXJlZ19zdGF0ZVtDVFhfUkNTX0lORElSRUNUX0NUWCsxXSA9Ci0J CQkJKGdndHRfb2Zmc2V0ICsgd2FfY3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0ICogc2l6ZW9mKHVp bnQzMl90KSkgfAotCQkJCSh3YV9jdHgtPmluZGlyZWN0X2N0eC5zaXplIC8gQ0FDSEVMSU5FX0RX T1JEUyk7CisJCQkJKGdndHRfb2Zmc2V0ICsgd2FfY3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0KSB8 CisJCQkJKHdhX2N0eC0+aW5kaXJlY3RfY3R4LnNpemUgLyBDQUNIRUxJTkVfQllURVMpOwogCiAJ CQlyZWdfc3RhdGVbQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUKzFdID0KIAkJCQlpbnRlbF9s cl9pbmRpcmVjdF9jdHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKIAogCQkJcmVnX3N0YXRlW0NUWF9C Ql9QRVJfQ1RYX1BUUisxXSA9Ci0JCQkJKGdndHRfb2Zmc2V0ICsgd2FfY3R4LT5wZXJfY3R4Lm9m ZnNldCAqIHNpemVvZih1aW50MzJfdCkpIHwKLQkJCQkweDAxOworCQkJCShnZ3R0X29mZnNldCAr IHdhX2N0eC0+cGVyX2N0eC5vZmZzZXQpIHwgMHgwMTsKIAkJfQogCX0KIAlyZWdfc3RhdGVbQ1RY X0xSSV9IRUFERVJfMV0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSg5KSB8IE1JX0xSSV9GT1JDRV9Q T1NURUQ7Ci0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==