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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 954A0C32772 for ; Wed, 17 Aug 2022 07:35:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231933AbiHQHfT (ORCPT ); Wed, 17 Aug 2022 03:35:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232206AbiHQHfD (ORCPT ); Wed, 17 Aug 2022 03:35:03 -0400 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 024E16D57B for ; Wed, 17 Aug 2022 00:34:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660721697; x=1692257697; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=cbxpU/raWOKvEQ98A79iZrIgRaxLlpfVle7uDaueNXk=; b=kxG6xr5OEGAxG4sIekN8DNNyf7ewuVKKfIsWtVUwBAOvQP2hcCCx0rbL YjIbRfikITLU+gHYAB7LKj0MWGhb/UO7K0BOKC3XWuDpZAY2q2cMQg06X ahA7SMEbBMKdtPvcI/0mP2SgX3mRoJkcRTfqbsQnm0Q31reVelFrjxeyH /LmUUjSRDj5250V/P2RTA0L3QTAlAdj+YO+yJNr9Q1NhM9ydyGc4mjHRS DRZRypxhqMS/f+5uHOwtiLlJu2eUJ4fKeo5lsRDAJ+JWttHFtaG27f5bz e4azC7RDt2QQIy88RMEcichuU35XHHMHXIFpFxLo4JsbVGxa3snmjmxVj w==; X-IronPort-AV: E=McAfee;i="6400,9594,10441"; a="292424393" X-IronPort-AV: E=Sophos;i="5.93,242,1654585200"; d="scan'208";a="292424393" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2022 00:34:57 -0700 X-IronPort-AV: E=Sophos;i="5.93,242,1654585200"; d="scan'208";a="558016792" Received: from flayounx-mobl.ger.corp.intel.com (HELO [10.249.254.101]) ([10.249.254.101]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2022 00:34:54 -0700 Message-ID: <49c1adc00bdd7aba3d3ffd1ed5e53de2d7d5f1a1.camel@linux.intel.com> Subject: Re: [PATCH] drm/i915: Fix random -ENOSPC eviction errors due to locked vma objects From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Sviatoslav Peleshko Cc: Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , David Airlie , Daniel Vetter , Maarten Lankhorst , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Date: Wed, 17 Aug 2022 09:34:40 +0200 In-Reply-To: <20220817065541.30101-1-sviatoslav.peleshko@globallogic.com> References: <20220817065541.30101-1-sviatoslav.peleshko@globallogic.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.4 (3.44.4-1.fc36) MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gV2VkLCAyMDIyLTA4LTE3IGF0IDA5OjU1ICswMzAwLCBTdmlhdG9zbGF2IFBlbGVzaGtvIHdy b3RlOgo+IFRoZSBpOTE1X2dlbV9vYmplY3RfdHJ5bG9jayB3ZSBoYWQgaW4gdGhlIGdyYWJfdm1h KCkgbWFrZXMgaXQgcmV0dXJuCj4gZmFsc2UKPiB3aGVuIHRoZSB2bWEtPm9iaiBpcyBhbHJlYWR5 IGxvY2tlZC4gSW4gdGhpcyBjYXNlIHdlJ2xsIHNraXAgdGhpcyB2bWEKPiBkdXJpbmcgZXZpY3Rp b24sIGFuZCBldmVudHVhbGx5IG1pZ2h0IGJlIGZvcmNlZCB0byByZXR1cm4gLUVOT1NQQwo+IGV2 ZW4KPiB0aG91Z2ggd2UgY291bGQndmUgZXZpY3RlZCB0aGlzIHZtYSBpZiB3ZSB3YWl0ZWQgZm9y IHRoZSBsb2NrIGEgYml0Lgo+IAo+IFRvIGZpeCB0aGlzLCByZXBsYWNlIHRoZSBpOTE1X2dlbV9v YmplY3RfdHJ5bG9jayB3aXRoCj4gaTkxNV9nZW1fb2JqZWN0X2xvY2suCj4gQW5kIGJlY2F1c2Ug d2UgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgcG90ZW50aWFsIGRlYWRsb2NrIG5vdywKPiBidWJi bGUtdXAKPiB0aGUgZXJyb3IgY29kZSwgc28gaXQgd2lsbCBiZSBjb3JyZWN0bHkgaGFuZGxlZCBi eSB0aGUgV1cgbWVjaGFuaXNtLgo+IAo+IFRoaXMgZml4ZXMgdGhlIGlzc3VlCj4gaHR0cHM6Ly9n aXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RybS9pbnRlbC8tL2lzc3Vlcy82NTY0Cj4gCj4gRml4ZXM6 IDdlMDA4OTdiZThiZiAoImRybS9pOTE1OiBBZGQgb2JqZWN0IGxvY2tpbmcgdG8KPiBpOTE1X2dl bV9ldmljdF9mb3Jfbm9kZSBhbmQgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nLCB2Mi4iKQo+IFNp Z25lZC1vZmYtYnk6IFN2aWF0b3NsYXYgUGVsZXNoa28KPiA8c3ZpYXRvc2xhdi5wZWxlc2hrb0Bn bG9iYWxsb2dpYy5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9l dmljdC5jIHwgNjkgKysrKysrKysrKysrKysrKysrLS0tLS0tLQo+IC0tCj4gwqAxIGZpbGUgY2hh bmdlZCwgNDYgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMKPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMKPiBpbmRleCBmMDI1ZWU0ZmE1MjYuLjlkNDNmMjEzZjY4 ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYwo+IEBAIC01NSw0OSAr NTUsNTggQEAgc3RhdGljIGludCBnZ3R0X2ZsdXNoKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gwqDC oMKgwqDCoMKgwqDCoHJldHVybiBpbnRlbF9ndF93YWl0X2Zvcl9pZGxlKGd0LCBNQVhfU0NIRURV TEVfVElNRU9VVCk7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIGJvb2wgZ3JhYl92bWEoc3RydWN0IGk5 MTVfdm1hICp2bWEsIHN0cnVjdCBpOTE1X2dlbV93d19jdHgKPiAqd3cpCj4gK3N0YXRpYyBpbnQg Z3JhYl92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsIHN0cnVjdCBpOTE1X2dlbV93d19jdHgKPiAq d3cpCj4gwqB7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IDA7Cj4gKwo+IMKgwqDCoMKgwqDC oMKgwqAvKgo+IMKgwqDCoMKgwqDCoMKgwqAgKiBXZSBhZGQgdGhlIGV4dHJhIHJlZmNvdW50IHNv IHRoZSBvYmplY3QgZG9lc24ndCBkcm9wIHRvCj4gemVybyB1bnRpbAo+IMKgwqDCoMKgwqDCoMKg wqAgKiBhZnRlciB1bmdyYWJfdm1hKCksIHRoaXMgd2F5IHRyeWxvY2sgaXMgYWx3YXlzIHBhaXJl ZCB3aXRoCj4gdW5sb2NrLgo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKg aWYgKGk5MTVfZ2VtX29iamVjdF9nZXRfcmN1KHZtYS0+b2JqKSkgewo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIWk5MTVfZ2VtX29iamVjdF90cnlsb2NrKHZtYS0+b2JqLCB3 dykpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X2xvY2sodm1hLT5vYmosIHd3KTsKCklzbid0IHRoZSB2bS0+bXV0ZXggaGVsZCBoZXJlPyBJ ZiBzbywgdGhlbiB0aGlzIHdvdWxkIGJlIGEgbG9ja2RlcAp2aW9sYXRpb24uCgovVGhvbWFzCgoK Cgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGk5MTVfZ2VtX29iamVjdF9wdXQo dm1hLT5vYmopOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIGZhbHNlOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDC oMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv KiBEZWFkIG9iamVjdHMgZG9uJ3QgbmVlZCBwaW5zICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBhdG9taWNfYW5kKH5JOTE1X1ZNQV9QSU5fTUFTSywgJnZtYS0+ZmxhZ3MpOwo+ IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIHVuZ3Jh Yl92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gK3N0YXRpYyB2b2lkIHVuZ3JhYl92bWEoc3Ry dWN0IGk5MTVfdm1hICp2bWEsIHN0cnVjdCBpOTE1X2dlbV93d19jdHgKPiAqd3cpCj4gwqB7Cj4g wqDCoMKgwqDCoMKgwqDCoGlmIChkeWluZ192bWEodm1hKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGk5MTVfZ2VtX29iamVj dF91bmxvY2sodm1hLT5vYmopOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghd3cpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGk5MTVfZ2VtX29iamVjdF91bmxvY2sodm1hLT5vYmopOwo+ ICsKPiDCoMKgwqDCoMKgwqDCoMKgaTkxNV9nZW1fb2JqZWN0X3B1dCh2bWEtPm9iaik7Cj4gwqB9 Cj4gwqAKPiAtc3RhdGljIGJvb2wKPiArc3RhdGljIGludAo+IMKgbWFya19mcmVlKHN0cnVjdCBk cm1fbW1fc2NhbiAqc2NhbiwKPiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX3d3 X2N0eCAqd3csCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IMKg wqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgZmxhZ3MsCj4gwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBsaXN0X2hlYWQgKnVud2luZCkKPiDCoHsKPiArwqDCoMKgwqDCoMKgwqBpbnQgZXJy Owo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PU1BDOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKg aWYgKCFncmFiX3ZtYSh2bWEsIHd3KSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoGVyciA9IGdyYWJfdm1hKHZtYSwgd3cpOwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBlcnI7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgbGlzdF9hZGQoJnZtYS0+ZXZpY3Rf bGluaywgdW53aW5kKTsKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gZHJtX21tX3NjYW5fYWRkX2Js b2NrKHNjYW4sICZ2bWEtPm5vZGUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZHJtX21tX3NjYW5f YWRkX2Jsb2NrKHNjYW4sICZ2bWEtPm5vZGUpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gLUVOT1NQQzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqB9 Cj4gwqAKPiDCoHN0YXRpYyBib29sIGRlZmVyX2V2aWN0KHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ IEBAIC0xNTAsNiArMTU5LDcgQEAgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdAo+IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gwqDCoMKgwqDCoMKgwqDCoGVudW0gZHJtX21tX2luc2Vy dF9tb2RlIG1vZGU7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X3ZtYSAqYWN0aXZlOwo+ IMKgwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ICvCoMKgwqDCoMKgwqDCoGludCBlcnIgPSAwOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtLT5tdXRleCk7Cj4g wqDCoMKgwqDCoMKgwqDCoHRyYWNlX2k5MTVfZ2VtX2V2aWN0KHZtLCBtaW5fc2l6ZSwgYWxpZ25t ZW50LCBmbGFncyk7Cj4gQEAgLTIxMCwxNyArMjIwLDIzIEBAIGk5MTVfZ2VtX2V2aWN0X3NvbWV0 aGluZyhzdHJ1Y3QKPiBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChtYXJrX2ZyZWUoJnNjYW4sIHd3LCB2bWEsIGZsYWdzLCAmZXZpY3Rpb25fbGlzdCkpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IG1hcmtfZnJlZSgmc2Nhbiwgd3cs IHZtYSwgZmxhZ3MsCj4gJmV2aWN0aW9uX2xpc3QpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoIWVycikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBnb3RvIGZvdW5kOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoZXJyID09IC1FREVBRExLKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqAvKiBOb3RoaW5nIGZvdW5kLCBjbGVhbiB1cCBhbmQgYmFpbCBvdXQhICovCj4gwqDCoMKg wqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZldmljdGlvbl9s aXN0LAo+IGV2aWN0X2xpbmspIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IGRybV9tbV9zY2FuX3JlbW92ZV9ibG9jaygmc2NhbiwgJnZtYS0+bm9kZSk7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCVUdfT04ocmV0KTsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdW5ncmFiX3ZtYSh2bWEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB1bmdyYWJfdm1hKHZtYSwgd3cpOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAr wqDCoMKgwqDCoMKgwqBpZiAoZXJyID09IC1FREVBRExLKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgLyoKPiDCoMKgwqDC oMKgwqDCoMKgICogQ2FuIHdlIHVucGluIHNvbWUgb2JqZWN0cyBzdWNoIGFzIGlkbGUgaHcgY29u dGVudHMsCj4gwqDCoMKgwqDCoMKgwqDCoCAqIG9yIHBlbmRpbmcgZmxpcHM/IEJ1dCBzaW5jZSBv bmx5IHRoZSBHR1RUIGhhcyBnbG9iYWwKPiBlbnRyaWVzCj4gQEAgLTI2Nyw3ICsyODMsNyBAQCBp OTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0Cj4gaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX2k5MTVf dm1hX3Bpbih2bWEpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Rl bCgmdm1hLT5ldmljdF9saW5rKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHVuZ3JhYl92bWEodm1hKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuZ3JhYl92bWEodm1hLCB3dyk7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IEBAIC0yNzcs MTcgKzI5MywyMSBAQCBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0Cj4gaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9faTkxNV92 bWFfdW5waW4odm1hKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQg PT0gMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXQgPSBfX2k5MTVfdm1hX3VuYmluZCh2bWEpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1bmdyYWJfdm1hKHZtYSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVu Z3JhYl92bWEodm1hLCB3dyk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqB3aGlsZSAocmV0ID09IDAgJiYgKG5vZGUgPSBkcm1fbW1fc2Nhbl9jb2xvcl9ldmljdCgm c2NhbikpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEgPSBjb250YWlu ZXJfb2Yobm9kZSwgc3RydWN0IGk5MTVfdm1hLCBub2RlKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyogSWYgd2UgZmluZCBhbnkgbm9uLW9iamVjdHMgKCF2bWEpLCB3 ZSBjYW5ub3QgZXZpY3QKPiB0aGVtICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmICh2bWEtPm5vZGUuY29sb3IgIT0gSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSAmJgo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3JhYl92bWEodm1hLCB3dykpIHsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IF9faTkx NV92bWFfdW5iaW5kKHZtYSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1bmdyYWJfdm1hKHZtYSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICh2bWEtPm5vZGUuY29sb3IgIT0gSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZ3JhYl92 bWEodm1hLCB3dyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoIXJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IF9faTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdW5ncmFiX3ZtYSh2bWEsIHd3KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAocmV0ICE9IC1FREVBRExLKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0ID0gLUVOT1NQQzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVOT1NQ QzsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiBAQCAtMzgyLDggKzQwMiwx MSBAQCBpbnQgaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUoc3RydWN0Cj4gaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWdyYWJfdm1hKHZtYSwgd3cpKSB7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRU5PU1BD Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBncmFiX3ZtYSh2bWEsIHd3 KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAtRURFQURM SykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSAtRU5PU1BDOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiDCoAo+IEBAIC00MDUsNyArNDI4LDcgQEAgaW50IGk5MTVfZ2VtX2V2aWN0X2Zv cl9ub2RlKHN0cnVjdAo+IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ID09IDApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gX19pOTE1X3ZtYV91bmJpbmQodm1hKTsKPiDC oAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bmdyYWJfdm1hKHZtYSk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuZ3JhYl92bWEodm1hLCB3dyk7Cj4gwqDCoMKg wqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0OwoK