From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 83F02C4332F for ; Tue, 12 Dec 2023 20:00:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4F13410E20B; Tue, 12 Dec 2023 20:00:56 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 72B7910E210 for ; Tue, 12 Dec 2023 20:00:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702411254; x=1733947254; h=message-id:subject:from:to:date:in-reply-to:references: content-transfer-encoding:mime-version; bh=FRiR2Au4MlvY2PJ8XArBzE9R6r91zkA6q0wT/TJqtls=; b=BH9QjOq0ZTD2sCtIgrg5Y7ZGIfLC+tVLDn0CZkhIRWA5n5XyW9xCqxWn LOCFi/hZzx6ACTlg69O9ivmpQCj80eyMPkumDd97Wg9KeI8s2sIopuYHL PSDK42BsjeaPWWsAFZabN+so5xUJPUXm9t9VyWmdsn6WfAHkUa2lLk8uE B5kYYsqb2HM8ZVzFm4kDYYGfraixd8k6uF/Hf0gTaqbQam3K80AyJ3D00 3jLR5qa4j1si+ccWqNgZLvYJ8GrQnBjlyMngmANiCMI1MJkpTc+c8Amco 9K+Z/4yXhaO9rs45r7Zr4sEXQGD5VtonSe7GaO+ykiKgGOiqfcIYeIn3x A==; X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="392037415" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="392037415" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 12:00:44 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="766935272" X-IronPort-AV: E=Sophos;i="6.04,271,1695711600"; d="scan'208";a="766935272" Received: from skallurr-mobl1.ger.corp.intel.com (HELO [10.249.254.140]) ([10.249.254.140]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2023 12:00:42 -0800 Message-ID: <236b138f7f3c90234e04dc004ee0f61e4ccd0e0e.camel@linux.intel.com> Subject: Re: [PATCH] drm/xe: Allow num_batch_buffer / num_binds == 0 in IOCTLs From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Matthew Brost , intel-xe@lists.freedesktop.org Date: Tue, 12 Dec 2023 21:00:39 +0100 In-Reply-To: <20231212190537.529882-1-matthew.brost@intel.com> References: <20231212190537.529882-1-matthew.brost@intel.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gVHVlLCAyMDIzLTEyLTEyIGF0IDExOjA1IC0wODAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IFRoZSBpZGVhIGJlaW5nIG91dC1zeW5jcyBjYW4gc2lnbmFsIGluZGljYXRpbmcgYWxsIHByZXZp b3VzCj4gb3BlcmF0aW9ucwo+IG9uIHRoZSBiaW5kIHF1ZXVlIGFyZSBjb21wbGV0ZS4gQW4gZXhh bXBsZSB1c2UgY2FzZSBvZiB0aGlzIHdvdWxkIGJlCj4gc3VwcG9ydCBmb3IgaW1wbGVtZW50aW5n IHZrUXVldWVXYWl0SWRsZSBlYXNpbHkuCj4gCj4gQWxsIGluLXN5bmNzIGFyZSB3YWl0ZWQgb24g YmVmb3JlIHNpZ25hbGluZyBvdXQtc3luY3MuIFRoaXMgaXMKPiBpbXBsZW1lbnRlZCBieSBmb3Jt aW5nIGEgY29tcG9zaXRlIHNvZnR3YXJlIGZlbmNlIG9mIGluLXN5bmNzIGFuZAo+IGluc3RhbGxp bmcgdGhpcyBmZW5jZSBpbiB0aGUgb3V0LXN5bmNzIGFuZCBleGVjIHF1ZXVlIGxhc3QgZmVuY2UK PiBzbG90Lgo+IAo+IFRoZSBsYXN0IGZlbmNlIG11c3QgYmUgYWRkZWQgYXMgYSBkZXBlbmRlbmN5 IGZvciBqb2JzIG9uIHVzZXIgZXhlYwo+IHF1ZXVlcyBhcyBpdCBpcyBwb3NzaWJsZSBmb3IgdGhl IGxhc3QgZmVuY2UgdG8gYmUgYSBjb21wb3NpdGUKPiBzb2Z0d2FyZQo+IGZlbmNlICh1bm9yZGVy ZWQsIGlvY3RsIHdpdGggemVybyBiYiBvciBiaW5kcykgcmF0aGVyIHRoYW4gaGFyZHdhcmUKPiBm ZW5jZSAob3JkZXJlZCwgcHJldmlvdXMgam9iIG9uIHF1ZXVlKS4KPiAKPiBDYzogVGhvbWFzIEhl bGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYt Ynk6IE1hdHRoZXcgQnJvc3QgPG1hdHRoZXcuYnJvc3RAaW50ZWwuY29tPgoKUmV2aWV3ZWQtYnk6 IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KCj4g LS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHwgMjcgKysrKysrKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlLmPC oMKgwqDCoMKgwqAgfMKgIDUgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVl X3R5cGVzLmggfMKgIDUgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmPCoMKg wqDCoMKgwqDCoMKgwqAgfCAxNCArKysrLQo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NjaGVk X2pvYi5jwqDCoMKgwqDCoMKgwqAgfCAxOCArKysrKysKPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94 ZV9zY2hlZF9qb2IuaMKgwqDCoMKgwqDCoMKgIHzCoCA0ICsrCj4gwqBkcml2ZXJzL2dwdS9kcm0v eGUveGVfc3luYy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNzgKPiArKysrKysrKysrKysr KysrKysrKysrKysKPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeW5jLmjCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgIDYgKysKPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDc3ICsrKysrKysrKysrKysrKystLS0tLS0KPiAtCj4g wqA5IGZpbGVzIGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWMuYwo+IGIvZHJpdmVycy9n cHUvZHJtL3hlL3hlX2V4ZWMuYwo+IGluZGV4IDNjOWY4MDFkNTcwYi4uYmE5MmU1NjE5ZGEzIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0veGUveGVfZXhlYy5jCj4gQEAgLTEzMSw3ICsxMzEsOCBAQCBpbnQgeGVfZXhlY19p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkCj4gKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgcS0+ZmxhZ3Mg JiBFWEVDX1FVRVVFX0ZMQUdfVk0pKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FSU5WQUw7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhl LCBxLT53aWR0aCAhPSBhcmdzLT5udW1fYmF0Y2hfYnVmZmVyKSkKPiArwqDCoMKgwqDCoMKgwqBp ZiAoWEVfSU9DVExfREJHKHhlLCBhcmdzLT5udW1fYmF0Y2hfYnVmZmVyICYmCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcS0+d2lkdGggIT0gYXJncy0+ bnVtX2JhdGNoX2J1ZmZlcikpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVJTlZBTDsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCBx LT5mbGFncyAmIEVYRUNfUVVFVUVfRkxBR19CQU5ORUQpKSB7Cj4gQEAgLTIwNyw2ICsyMDgsMjQg QEAgaW50IHhlX2V4ZWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZAo+ICpkYXRh LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBnb3RvIGVycl9leGVjOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiArwqDCoMKgwqDCoMKg wqBpZiAoIWFyZ3MtPm51bV9iYXRjaF9idWZmZXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKCF4ZV92bV9pbl9scl9tb2RlKHZtKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmVuY2Ug PSB4ZV9zeW5jX2luX2ZlbmNlX2dldChzeW5jcywKPiBudW1fc3luY3MsIHEsIHZtKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZmVu Y2UpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZXJyID0gUFRSX0VSUihmZW5jZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfZXhl YzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7 IGkgPCBudW1fc3luY3M7IGkrKykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9zeW5jX2VudHJ5X3NpZ25hbCgmc3luY3Nb aV0sIE5VTEwsCj4gZmVuY2UpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9sYXN0X2ZlbmNlX3NldChxLCB2bSwgZmVuY2UpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNl X3B1dChmZW5jZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX2V4ZWM7Cj4gK8KgwqDCoMKgwqDC oMKgfQo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHhlX2V4ZWNfcXVldWVfaXNfbHIocSkgJiYg eGVfZXhlY19xdWV1ZV9yaW5nX2Z1bGwocSkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGVyciA9IC1FV09VTERCTE9DSzsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gZXJyX2V4ZWM7Cj4gQEAgLTI2Niw2ICsyODUsMTAgQEAgaW50IHhlX2V4ZWNfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZAo+ICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9wdXRfam9i Owo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICgheGVfdm1faW5fbHJfbW9kZSh2bSkpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0geGVfc2NoZWRfam9iX2xhc3RfZmVu Y2VfYWRkX2RlcChqb2IsIHZtKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KGVycikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdv dG8gZXJyX3B1dF9qb2I7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJy ID0gZG93bl9yZWFkX2ludGVycnVwdGlibGUoJnZtLQo+ID51c2VycHRyLm5vdGlmaWVyX2xvY2sp Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9wdXRfam9iOwo+ IEBAIC0yOTAsNiArMzEzLDggQEAgaW50IHhlX2V4ZWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZAo+ICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gwqAKPiDCoMKgwqDC oMKgwqDCoMKgaWYgKHhlX2V4ZWNfcXVldWVfaXNfbHIocSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBxLT5yaW5nX29wcy0+ZW1pdF9qb2Ioam9iKTsKPiArwqDCoMKgwqDCoMKg wqBpZiAoIXhlX3ZtX2luX2xyX21vZGUodm0pKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZV9leGVjX3F1ZXVlX2xhc3RfZmVuY2Vfc2V0KHEsIHZtLCAmam9iLQo+ID5kcm0uc19m ZW5jZS0+ZmluaXNoZWQpOwo+IMKgwqDCoMKgwqDCoMKgwqB4ZV9zY2hlZF9qb2JfcHVzaChqb2Ip Owo+IMKgwqDCoMKgwqDCoMKgwqB4ZV92bV9yZWFjdGl2YXRlX3JlYmluZCh2bSk7Cj4gwqAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWUuYwo+IGIvZHJpdmVy cy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWUuYwo+IGluZGV4IDg1YmMyNWZlOTllZC4uZWViOTYw NWRkNDVmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlY19xdWV1ZS5jCj4gQEAgLTg4Niw3ICs4 ODYsMTAgQEAgaW50IHhlX2V4ZWNfcXVldWVfZGVzdHJveV9pb2N0bChzdHJ1Y3QKPiBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gwqBzdGF0aWMgdm9pZCB4ZV9leGVjX3F1ZXVlX2xhc3Rf ZmVuY2VfbG9ja2RlcF9hc3NlcnQoc3RydWN0Cj4geGVfZXhlY19xdWV1ZSAqcSwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHhlX3ZtICp2bSkK PiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZ2bS0+bG9j ayk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHEtPmZsYWdzICYgRVhFQ19RVUVVRV9GTEFHX1ZNKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+ bG9jayk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZV92bV9hc3NlcnRfaGVsZCh2bSk7Cj4gwqB9Cj4gwqAKPiDCoC8qKgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlY19xdWV1ZV90eXBlcy5oCj4gYi9kcml2ZXJz L2dwdS9kcm0veGUveGVfZXhlY19xdWV1ZV90eXBlcy5oCj4gaW5kZXggNjgyNmZlYjY1MGYzLi5j N2FlZmExYzhjMzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVl dWVfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlX3R5cGVz LmgKPiBAQCAtNjYsOCArNjYsOSBAQCBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSB7Cj4gwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCB4ZV9od19mZW5jZV9pcnEgKmZlbmNlX2lycTsKPiDCoAo+IMKgwqDCoMKg wqDCoMKgwqAvKioKPiAtwqDCoMKgwqDCoMKgwqAgKiBAbGFzdF9mZW5jZTogbGFzdCBmZW5jZSBv biBlbmdpbmUsIHByb3RlY3RlZCBieSB2bS0+bG9jawo+IGluIHdyaXRlCj4gLcKgwqDCoMKgwqDC oMKgICogbW9kZSBpZiBiaW5kIGVuZ2luZQo+ICvCoMKgwqDCoMKgwqDCoCAqIEBsYXN0X2ZlbmNl OiBsYXN0IGZlbmNlIG9uIGV4ZWMgcXVldWUsIHByb3RlY3RlZCBieSB2bS0KPiA+bG9jayBpbiB3 cml0ZQo+ICvCoMKgwqDCoMKgwqDCoCAqIG1vZGUgaWYgYmluZCBleGVjIHF1ZXVlLCBwcm90ZWN0 ZWQgYnkgZG1hIHJlc3YgbG9jayBpZgo+IG5vbi1iaW5kIGV4ZWMKPiArwqDCoMKgwqDCoMKgwqAg KiBxdWV1ZQo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRt YV9mZW5jZSAqbGFzdF9mZW5jZTsKPiDCoAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v eGUveGVfbWlncmF0ZS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jCj4gaW5k ZXggMmNhOTI3ZjNmYjJhLi41ZmQwNzA2YTYwNDUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3hlL3hlX21pZ3JhdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRl LmMKPiBAQCAtMTE2MywxNyArMTE2MywyNCBAQCB4ZV9taWdyYXRlX3VwZGF0ZV9wZ3RhYmxlc19j cHUoc3RydWN0Cj4geGVfbWlncmF0ZSAqbSwKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZlbmNl Owo+IMKgfQo+IMKgCj4gLXN0YXRpYyBib29sIG5vX2luX3N5bmNzKHN0cnVjdCB4ZV9zeW5jX2Vu dHJ5ICpzeW5jcywgdTMyIG51bV9zeW5jcykKPiArc3RhdGljIGJvb2wgbm9faW5fc3luY3Moc3Ry dWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfc3luY19lbnRyeSAqc3lu Y3MsIHUzMiBudW1fc3luY3MpCj4gwqB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2U7Cj4gwqDCoMKgwqDCoMKgwqDCoGludCBpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oGZvciAoaSA9IDA7IGkgPCBudW1fc3luY3M7IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IHN5bmNzW2ldLmZlbmNlOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmZW5jZSA9IHN5bmNzW2ldLmZlbmNlOwo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZmVuY2UgJiYgIXRlc3RfYml0 KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZmZW5j ZS0+ZmxhZ3MpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBmYWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGlm IChxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZlbmNlID0geGVfZXhlY19x dWV1ZV9sYXN0X2ZlbmNlX2dldChxLCB2bSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICghdGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULCAmZmVuY2UtCj4g PmZsYWdzKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBmYWxzZTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHRydWU7Cj4gwqB9Cj4gQEAgLTEyMzQsNyArMTI0MSw3IEBAIHhlX21pZ3JhdGVfdXBk YXRlX3BndGFibGVzKHN0cnVjdCB4ZV9taWdyYXRlCj4gKm0sCj4gwqDCoMKgwqDCoMKgwqDCoHUx NiBwYXRfaW5kZXggPSB4ZS0+cGF0LmlkeFtYRV9DQUNIRV9XQl07Cj4gwqAKPiDCoMKgwqDCoMKg wqDCoMKgLyogVXNlIHRoZSBDUFUgaWYgbm8gaW4gc3luY3MgYW5kIGVuZ2luZSBpcyBpZGxlICov Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKG5vX2luX3N5bmNzKHN5bmNzLCBudW1fc3luY3MpICYmCj4g eGVfZXhlY19xdWV1ZV9pc19pZGxlKHFfb3ZlcnJpZGUpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgaWYg KG5vX2luX3N5bmNzKHZtLCBxLCBzeW5jcywgbnVtX3N5bmNzKSAmJgo+IHhlX2V4ZWNfcXVldWVf aXNfaWRsZShxX292ZXJyaWRlKSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZmVuY2UgPcKgIHhlX21pZ3JhdGVfdXBkYXRlX3BndGFibGVzX2NwdShtLCB2bSwgYm8sCj4gdXBk YXRlcywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbnVtX3VwZGF0ZXMsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZpcnN0X211bm1hcF8KPiByZWJpbmQsCj4gQEAgLTEzNTEsNiAr MTM1OCw3IEBAIHhlX21pZ3JhdGVfdXBkYXRlX3BndGFibGVzKHN0cnVjdCB4ZV9taWdyYXRlCj4g Km0sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBlcnJfam9iOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBlcnIg PSB4ZV9zY2hlZF9qb2JfbGFzdF9mZW5jZV9hZGRfZGVwKGpvYiwgdm0pOwo+IMKgwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyAhZXJyICYmIGkgPCBudW1fc3luY3M7IGkrKykKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHhlX3N5bmNfZW50cnlfYWRkX2RlcHMoJnN5bmNz W2ldLCBqb2IpOwo+IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zY2hl ZF9qb2IuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NjaGVkX2pvYi5jCj4gaW5kZXggYTlj N2FlODE1YmVjLi4wMTEwNmExMTU2YWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hl L3hlX3NjaGVkX2pvYi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NjaGVkX2pvYi5j Cj4gQEAgLTI2MCwzICsyNjAsMjEgQEAgdm9pZCB4ZV9zY2hlZF9qb2JfcHVzaChzdHJ1Y3QgeGVf c2NoZWRfam9iICpqb2IpCj4gwqDCoMKgwqDCoMKgwqDCoGRybV9zY2hlZF9lbnRpdHlfcHVzaF9q b2IoJmpvYi0+ZHJtKTsKPiDCoMKgwqDCoMKgwqDCoMKgeGVfc2NoZWRfam9iX3B1dChqb2IpOwo+ IMKgfQo+ICsKPiArLyoqCj4gKyAqIHhlX3NjaGVkX2pvYl9sYXN0X2ZlbmNlX2FkZF9kZXAgLSBB ZGQgbGFzdCBmZW5jZSBkZXBlbmRlbmN5IHRvCj4gam9iCj4gKyAqIEBqb2I6am9iIHRvIGFkZCB0 aGUgbGFzdCBmZW5jZSBkZXBlbmRlbmN5IHRvCj4gKyAqIEB2bTogdmlydHVhbCBtZW1vcnkgam9i IGJlbG9uZ3MgdG8KPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBvciBh biBlcnJvciBvbiBmYWlsaW5nIHRvIGV4cGFuZCB0aGUgYXJyYXkuCj4gKyAqLwo+ICtpbnQgeGVf c2NoZWRfam9iX2xhc3RfZmVuY2VfYWRkX2RlcChzdHJ1Y3QgeGVfc2NoZWRfam9iICpqb2IsIHN0 cnVjdAo+IHhlX3ZtICp2bSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBmZW5jZSA9IHhlX2V4ZWNfcXVldWVfbGFzdF9m ZW5jZV9nZXQoam9iLT5xLCB2bSk7Cj4gK8KgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX2dldChmZW5j ZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkcm1fc2NoZWRfam9iX2FkZF9kZXBlbmRl bmN5KCZqb2ItPmRybSwgZmVuY2UpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV9zY2hlZF9qb2IuaAo+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NjaGVkX2pvYi5o Cj4gaW5kZXggNmNhMWQ0MjZjMDM2Li4zNGY0NzViYTdmNTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3hlL3hlX3NjaGVkX2pvYi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hl X3NjaGVkX2pvYi5oCj4gQEAgLTgsNiArOCw4IEBACj4gwqAKPiDCoCNpbmNsdWRlICJ4ZV9zY2hl ZF9qb2JfdHlwZXMuaCIKPiDCoAo+ICtzdHJ1Y3QgeGVfdm07Cj4gKwo+IMKgI2RlZmluZSBYRV9T Q0hFRF9IQU5HX0xJTUlUIDEKPiDCoCNkZWZpbmUgWEVfU0NIRURfSk9CX1RJTUVPVVQgTE9OR19N QVgKPiDCoAo+IEBAIC01NCw2ICs1Niw4IEBAIGJvb2wgeGVfc2NoZWRfam9iX2NvbXBsZXRlZChz dHJ1Y3QgeGVfc2NoZWRfam9iCj4gKmpvYik7Cj4gwqB2b2lkIHhlX3NjaGVkX2pvYl9hcm0oc3Ry dWN0IHhlX3NjaGVkX2pvYiAqam9iKTsKPiDCoHZvaWQgeGVfc2NoZWRfam9iX3B1c2goc3RydWN0 IHhlX3NjaGVkX2pvYiAqam9iKTsKPiDCoAo+ICtpbnQgeGVfc2NoZWRfam9iX2xhc3RfZmVuY2Vf YWRkX2RlcChzdHJ1Y3QgeGVfc2NoZWRfam9iICpqb2IsIHN0cnVjdAo+IHhlX3ZtICp2bSk7Cj4g Kwo+IMKgc3RhdGljIGlubGluZSBzdHJ1Y3QgeGVfc2NoZWRfam9iICoKPiDCoHRvX3hlX3NjaGVk X2pvYihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqZHJtKQo+IMKgewo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0veGUveGVfc3luYy5jCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3luYy5j Cj4gaW5kZXggMmEzZjUwODcyMmZjLi5lNGMyMjBjZjkxMTUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3hlL3hlX3N5bmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeW5j LmMKPiBAQCAtNSw2ICs1LDcgQEAKPiDCoAo+IMKgI2luY2x1ZGUgInhlX3N5bmMuaCIKPiDCoAo+ ICsjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLWFycmF5Lmg+Cj4gwqAjaW5jbHVkZSA8bGludXgv a3RocmVhZC5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L3NjaGVkL21tLmg+Cj4gwqAjaW5jbHVkZSA8 bGludXgvdWFjY2Vzcy5oPgo+IEBAIC0xNCw2ICsxNSw3IEBACj4gwqAjaW5jbHVkZSA8ZHJtL3hl X2RybS5oPgo+IMKgCj4gwqAjaW5jbHVkZSAieGVfZGV2aWNlX3R5cGVzLmgiCj4gKyNpbmNsdWRl ICJ4ZV9leGVjX3F1ZXVlLmgiCj4gwqAjaW5jbHVkZSAieGVfbWFjcm9zLmgiCj4gwqAjaW5jbHVk ZSAieGVfc2NoZWRfam9iX3R5cGVzLmgiCj4gwqAKPiBAQCAtMTA0LDYgKzEwNiw3IEBAIGludCB4 ZV9zeW5jX2VudHJ5X3BhcnNlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAo+IHN0cnVjdCB4ZV9maWxl ICp4ZWYsCj4gwqDCoMKgwqDCoMKgwqDCoGludCBlcnI7Cj4gwqDCoMKgwqDCoMKgwqDCoGJvb2wg ZXhlYyA9IGZsYWdzICYgU1lOQ19QQVJTRV9GTEFHX0VYRUM7Cj4gwqDCoMKgwqDCoMKgwqDCoGJv b2wgaW5fbHJfbW9kZSA9IGZsYWdzICYgU1lOQ19QQVJTRV9GTEFHX0xSX01PREU7Cj4gK8KgwqDC oMKgwqDCoMKgYm9vbCBkaXNhbGxvd191c2VyX2ZlbmNlID0gZmxhZ3MgJgo+IFNZTkNfUEFSU0Vf RkxBR19ESVNBTExPV19VU0VSX0ZFTkNFOwo+IMKgwqDCoMKgwqDCoMKgwqBib29sIHNpZ25hbDsK PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV9mcm9tX3VzZXIoJnN5bmNfaW4sIHN5bmNf dXNlciwgc2l6ZW9mKCpzeW5jX3VzZXIpKSkKPiBAQCAtMTY0LDYgKzE2Nyw5IEBAIGludCB4ZV9z eW5jX2VudHJ5X3BhcnNlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAo+IHN0cnVjdCB4ZV9maWxlICp4 ZWYsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqBjYXNlIERSTV9YRV9TWU5DX1RZUEVfVVNFUl9GRU5DRToKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgZGlzYWxsb3dfdXNlcl9m ZW5jZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKFhFX0lPQ1RMX0RCRyh4ZSwgIXNpZ25hbCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FT1BOT1RTVVBQOwo+IMKgCj4gQEAgLTI2 NCwzICsyNzAsNzUgQEAgdm9pZCB4ZV9zeW5jX2VudHJ5X2NsZWFudXAoc3RydWN0IHhlX3N5bmNf ZW50cnkKPiAqc3luYykKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHN5bmMtPnVmZW5jZSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVzZXJfZmVuY2VfcHV0KHN5bmMtPnVmZW5jZSk7 Cj4gwqB9Cj4gKwo+ICsvKioKPiArICogeGVfc3luY19pbl9mZW5jZV9nZXQoKSAtIEdldCBhIGZl bmNlIGZyb20gc3luY3MsIGV4ZWMgcXVldWUsIGFuZAo+IFZNCj4gKyAqIEBzeW5jOiBpbnB1dCBz eW5jcwo+ICsgKiBAbnVtX3N5bmM6IG51bWJlciBvZiBzeW5jcwo+ICsgKiBAcTogZXhlYyBxdWV1 ZQo+ICsgKiBAdm06IFZNCj4gKyAqCj4gKyAqIEdldCBhIGZlbmNlIGZyb20gc3luY3MsIGV4ZWMg cXVldWUsIGFuZCBWTS4gSWYgc3luY3MgY29udGFpbiBpbi0KPiBmZW5jZXMgY3JlYXRlCj4gKyAq IGFuZCByZXR1cm4gYSBjb21wb3NpdGUgZmVuY2Ugb2YgYWxsIGluLWZlbmNlcyArIGxhc3QgZmVu Y2UuIElmIG5vCj4gaW4tZmVuY2VzCj4gKyAqIHJldHVybiBsYXN0IGZlbmNlIG9uwqAgaW5wdXQg ZXhlYyBxdWV1ZS4gQ2FsbGVyIG11c3QgZHJvcAo+IHJlZmVyZW5jZSB0bwo+ICsgKiByZXR1cm5l ZCBmZW5jZS4KPiArICoKPiArICogUmV0dXJuOiBmZW5jZSBvbiBzdWNjZXNzLCBFUlJfUFRSKC1F Tk9NRU0pIG9uIGZhaWx1cmUKPiArICovCj4gK3N0cnVjdCBkbWFfZmVuY2UgKgo+ICt4ZV9zeW5j X2luX2ZlbmNlX2dldChzdHJ1Y3QgeGVfc3luY19lbnRyeSAqc3luYywgaW50IG51bV9zeW5jLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgeGVfZXhlY19x dWV1ZSAqcSwgc3RydWN0IHhlX3ZtICp2bSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk bWFfZmVuY2UgKipmZW5jZXMgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkbWFfZmVu Y2VfYXJyYXkgKmNmID0gTlVMTDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwgbnVtX2luX2ZlbmNlID0gMCwgY3VycmVudF9m ZW5jZSA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtLT5s b2NrKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogQ291bnQgaW4tZmVuY2VzICovCj4gK8KgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IG51bV9zeW5jOyArK2kpIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN5bmNbaV0uZmVuY2UpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsrbnVtX2luX2ZlbmNlOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmVuY2UgPSBzeW5jW2ldLmZl bmNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBFYXN5IGNhc2UuLi4gKi8KPiArwqDCoMKgwqDCoMKg wqBpZiAoIW51bV9pbl9mZW5jZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBm ZW5jZSA9IHhlX2V4ZWNfcXVldWVfbGFzdF9mZW5jZV9nZXQocSwgdm0pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZlbmNlOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgLyogQ3JlYXRlIGNvbXBvc2l0ZSBmZW5jZSAqLwo+ICvCoMKgwqDCoMKg wqDCoGZlbmNlcyA9IGttYWxsb2NfYXJyYXkobnVtX2luX2ZlbmNlICsgMSwgc2l6ZW9mKCpmZW5j ZXMpLAo+IEdGUF9LRVJORUwpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZmVuY2VzKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArwqDC oMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbnVtX3N5bmM7ICsraSkgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3luY1tpXS5mZW5jZSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX2dldChzeW5jW2ldLmZl bmNlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZl bmNlc1tjdXJyZW50X2ZlbmNlKytdID0gc3luY1tpXS5mZW5jZTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqBmZW5j ZXNbY3VycmVudF9mZW5jZSsrXSA9IHhlX2V4ZWNfcXVldWVfbGFzdF9mZW5jZV9nZXQocSwKPiB2 bSk7Cj4gK8KgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX2dldChmZW5jZXNbY3VycmVudF9mZW5jZSAt IDFdKTsKPiArwqDCoMKgwqDCoMKgwqBjZiA9IGRtYV9mZW5jZV9hcnJheV9jcmVhdGUobnVtX2lu X2ZlbmNlLCBmZW5jZXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZtLT5jb21wb3NpdGVfZmVuY2VfY3R4LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2bS0+Y29tcG9zaXRlX2ZlbmNlX3NlcW5vKyssCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGZhbHNlKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNmKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC0tdm0tPmNvbXBvc2l0ZV9mZW5jZV9zZXFubzsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfb3V0Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuICZjZi0+YmFzZTsKPiArCj4gK2Vycl9vdXQ6Cj4gK8KgwqDC oMKgwqDCoMKgd2hpbGUgKGN1cnJlbnRfZmVuY2UpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRtYV9mZW5jZV9wdXQoZmVuY2VzWy0tY3VycmVudF9mZW5jZV0pOwo+ICvCoMKgwqDC oMKgwqDCoGtmcmVlKGZlbmNlcyk7Cj4gK8KgwqDCoMKgwqDCoMKga2ZyZWUoY2YpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArfQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3luYy5oCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVf c3luYy5oCj4gaW5kZXggMWI3NDhjZWM0Njc4Li5kMjg0YWZiZTkxN2MgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5bmMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94 ZV9zeW5jLmgKPiBAQCAtOSwxMSArOSwxNCBAQAo+IMKgI2luY2x1ZGUgInhlX3N5bmNfdHlwZXMu aCIKPiDCoAo+IMKgc3RydWN0IHhlX2RldmljZTsKPiArc3RydWN0IHhlX2V4ZWNfcXVldWU7Cj4g wqBzdHJ1Y3QgeGVfZmlsZTsKPiDCoHN0cnVjdCB4ZV9zY2hlZF9qb2I7Cj4gK3N0cnVjdCB4ZV92 bTsKPiDCoAo+IMKgI2RlZmluZSBTWU5DX1BBUlNFX0ZMQUdfRVhFQ8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDApCj4gwqAjZGVmaW5lIFNZTkNfUEFSU0VfRkxBR19M Ul9NT0RFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklU KDEpCj4gKyNkZWZpbmUgU1lOQ19QQVJTRV9GTEFHX0RJU0FMTE9XX1VTRVJfRkVOQ0XCoMKgwqDC oEJJVCgyKQo+IMKgCj4gwqBpbnQgeGVfc3luY19lbnRyeV9wYXJzZShzdHJ1Y3QgeGVfZGV2aWNl ICp4ZSwgc3RydWN0IHhlX2ZpbGUgKnhlZiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfc3luY19lbnRyeSAqc3luYywKPiBAQCAtMjYs NSArMjksOCBAQCB2b2lkIHhlX3N5bmNfZW50cnlfc2lnbmFsKHN0cnVjdCB4ZV9zeW5jX2VudHJ5 Cj4gKnN5bmMsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IHhlX3NjaGVkX2pvYiAqam9iLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPiDC oHZvaWQgeGVfc3luY19lbnRyeV9jbGVhbnVwKHN0cnVjdCB4ZV9zeW5jX2VudHJ5ICpzeW5jKTsK PiArc3RydWN0IGRtYV9mZW5jZSAqCj4gK3hlX3N5bmNfaW5fZmVuY2VfZ2V0KHN0cnVjdCB4ZV9z eW5jX2VudHJ5ICpzeW5jLCBpbnQgbnVtX3N5bmMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpxLCBzdHJ1Y3QgeGVfdm0gKnZt KTsKPiDCoAo+IMKgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92 bS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMKPiBpbmRleCBkMWU1MzkwNTI2OGYuLjJm M2RmOWVlNjdjOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jCj4gQEAgLTI3MjIsNyArMjcyMiw2IEBAIHN0 YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9jaGVja19hcmdzKHN0cnVjdAo+IHhlX2RldmljZSAqeGUs Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCBhcmdzLT5leHRlbnNpb25zKSB8 fAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsICFhcmdzLT5udW1fYmlu ZHMpIHx8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPm51 bV9iaW5kcyA+IE1BWF9CSU5EUykpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVJTlZBTDsKPiDCoAo+IEBAIC0yODM3LDYgKzI4MzYsMzcgQEAgc3RhdGljIGludCB2 bV9iaW5kX2lvY3RsX2NoZWNrX2FyZ3Moc3RydWN0Cj4geGVfZGV2aWNlICp4ZSwKPiDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGVycjsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW50IHZtX2JpbmRfaW9j dGxfc2lnbmFsX2ZlbmNlcyhzdHJ1Y3QgeGVfdm0gKnZtLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHhlX3N5 bmNfZW50cnkgKnN5bmNzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgbnVtX3N5bmNzKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gK8KgwqDCoMKgwqDC oMKgaW50IGksIGVyciA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZlbmNlID0geGVfc3luY19p bl9mZW5jZV9nZXQoc3luY3MsIG51bV9zeW5jcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0b193YWl0X2V4 ZWNfcXVldWUodm0sIHEpLCB2bSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihmZW5jZSkp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGZlbmNlKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IG51bV9zeW5jczsgaSsrKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9zeW5jX2VudHJ5X3NpZ25hbCgmc3luY3Nb aV0sIE5VTEwsIGZlbmNlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9sYXN0 X2ZlbmNlX3NldCh0b193YWl0X2V4ZWNfcXVldWUodm0sIHEpLCB2bSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBmZW5jZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZV92bV9zeW5jX21vZGUodm0sIHEp KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvbmcgdGltZW91dCA9IGRtYV9m ZW5jZV93YWl0KGZlbmNlLCB0cnVlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICh0aW1lb3V0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGVyciA9IC1FSU5UUjsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gZXJyOwo+ICt9Cj4gKwo+IMKgaW50IHhlX3ZtX2JpbmRfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0Cj4gZHJtX2ZpbGUgKmZpbGUpCj4gwqB7Cj4gwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gdG9feGVfZGV2aWNlKGRldik7Cj4g QEAgLTI4NzUsNyArMjkwNSw3IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcHV0X2V4ZWNfcXVl dWU7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgYXN5bmMgIT0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgYXJncy0+bnVt X2JpbmRzICYmIGFzeW5jICE9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhIShxLT5mbGFncyAmCj4gRVhFQ19RVUVVRV9G TEFHX1ZNX0FTWU5DKSkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBlcnIgPSAtRUlOVkFMOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcHV0X2V4ZWNfcXVldWU7Cj4gQEAgLTI4ODksNyArMjkx OSw3IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9p ZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAK PiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhcmdzLT5leGVjX3F1ZXVlX2lkKSB7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsIGFzeW5jICE9Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPm51 bV9iaW5kcyAmJiBhc3luYyAhPQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgISEodm0tPmZsYWdzICYKPiBYRV9WTV9GTEFH X0FTWU5DX0RFRkFVTFQpKSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBwdXRfdm07Cj4gQEAgLTI5MTYsMTYgKzI5NDYsMTgg QEAgaW50IHhlX3ZtX2JpbmRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiB2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGJvcyA9IGt6 YWxsb2Moc2l6ZW9mKCpib3MpICogYXJncy0+bnVtX2JpbmRzLCBHRlBfS0VSTkVMKTsKPiAtwqDC oMKgwqDCoMKgwqBpZiAoIWJvcykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl cnIgPSAtRU5PTUVNOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHJlbGVh c2Vfdm1fbG9jazsKPiAtwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGFyZ3Mt Pm51bV9iaW5kcykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib3MgPSBrY2Fs bG9jKGFyZ3MtPm51bV9iaW5kcywgc2l6ZW9mKCpib3MpLAo+IEdGUF9LRVJORUwpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWJvcykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gLUVOT01FTTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcmVsZWFzZV92bV9sb2Nr Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqDCoMKg wqBvcHMgPSBremFsbG9jKHNpemVvZigqb3BzKSAqIGFyZ3MtPm51bV9iaW5kcywgR0ZQX0tFUk5F TCk7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFvcHMpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZXJyID0gLUVOT01FTTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z290byByZWxlYXNlX3ZtX2xvY2s7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9w cyA9IGtjYWxsb2MoYXJncy0+bnVtX2JpbmRzLCBzaXplb2YoKm9wcyksCj4gR0ZQX0tFUk5FTCk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghb3BzKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRU5PTUVNOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byByZWxlYXNl X3ZtX2xvY2s7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKg wqDCoMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhcmdzLT5udW1f YmluZHM7ICsraSkgewo+IEBAIC0yOTk1LDEyICszMDI3LDE5IEBAIGludCB4ZV92bV9iaW5kX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqBmb3IgKG51bV9zeW5jcyA9IDA7IG51bV9zeW5jcyA8 IGFyZ3MtPm51bV9zeW5jczsgbnVtX3N5bmNzKyspCj4gewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZXJyID0geGVfc3luY19lbnRyeV9wYXJzZSh4ZSwgeGVmLCAmc3luY3NbbnVt X3N5bmNzXSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzeW5jc191c2VyW251bV9zeW5j c10sCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhlX3ZtX2luX2xyX21vZGUodm0pID8KPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU1lOQ19QQVJTRV9GTEFHX0xSX01PREUgOgo+IDApOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoeGVfdm1faW5fbHJfbW9kZSh2bSkgPwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNZTkNfUEFSU0VfRkxBR19MUl9NT0RFIDoKPiAwKSB8Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICghYXJncy0+bnVtX2JpbmRzID8KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoAo+IFNZTkNfUEFSU0VfRkxBR19ESVNBTExPV19VU0VSX0ZFTkNFIDog MCkpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZyZWVfc3luY3M7 Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+ICvCoMKgwqDCoMKgwqDCoGlmICghYXJncy0+bnVt X2JpbmRzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FTk9EQVRB Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZyZWVfc3luY3M7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFyZ3Mt Pm51bV9iaW5kczsgKytpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQg cmFuZ2UgPSBiaW5kX29wc1tpXS5yYW5nZTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHU2NCBhZGRyID0gYmluZF9vcHNbaV0uYWRkcjsKPiBAQCAtMzA1OCwxMiArMzA5Nyw4IEBA IGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0 YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgdW53aW5kX29wczoKPiDCoMKgwqDCoMKgwqDC oMKgdm1fYmluZF9pb2N0bF9vcHNfdW53aW5kKHZtLCBvcHMsIGFyZ3MtPm51bV9iaW5kcyk7Cj4g wqBmcmVlX3N5bmNzOgo+IC3CoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGVyciA9PSAtRU5PREFU QSAmJiBpIDwgbnVtX3N5bmNzOyBpKyspIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPQo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9sYXN0X2ZlbmNlX2dldCh0b193 YWl0X2V4ZWNfcXVldWUKPiAodm0sIHEpLCB2bSk7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB4ZV9zeW5jX2VudHJ5X3NpZ25hbCgmc3luY3NbaV0sIE5VTEwsIGZlbmNlKTsK PiAtwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGVyciA9PSAtRU5PREFUQSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gdm1fYmluZF9pb2N0bF9zaWdu YWxfZmVuY2VzKHZtLCBxLCBzeW5jcywKPiBudW1fc3luY3MpOwo+IMKgwqDCoMKgwqDCoMKgwqB3 aGlsZSAobnVtX3N5bmNzLS0pCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9z eW5jX2VudHJ5X2NsZWFudXAoJnN5bmNzW251bV9zeW5jc10pOwo+IMKgCj4gQEAgLTMwODMsNyAr MzExOCw3IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g dm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqBrZnJl ZShvcHMpOwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoYXJncy0+bnVtX2JpbmRzID4gMSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKGJpbmRfb3BzKTsKPiAtwqDCoMKgwqDC oMKgwqByZXR1cm4gZXJyID09IC1FTk9EQVRBID8gMCA6IGVycjsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZXJyOwo+IMKgfQo+IMKgCj4gwqAvKioKCg==