From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 60/73] drm/i915: Update i915_gem_get_ggtt_size/_alignment to use drm_i915_private Date: Mon, 01 Aug 2016 15:30:13 +0300 Message-ID: <1470054613.4174.13.camel@linux.intel.com> References: <1470042681-25318-1-git-send-email-chris@chris-wilson.co.uk> <1470042681-25318-61-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 995BB892AA for ; Mon, 1 Aug 2016 12:30:16 +0000 (UTC) In-Reply-To: <1470042681-25318-61-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gbWEsIDIwMTYtMDgtMDEgYXQgMTA6MTEgKzAxMDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBG b3IgY29uc2lzdGVuY3ksIGludGVybmFsIGZ1bmN0aW9ucyBzaG91bGQgdGFrZSBkcm1faTkxNV9w cml2YXRlIHJhdGhlcgo+IHRoYW4gZHJtX2RldmljZS4gTm93IHRoYXQgd2UgYXJlIHN1YmNsYXNz aW5nIGRybV9kZXZpY2UsIHRoZXJlIGFyZSBubwo+IG1vcmUgc2l6ZSB3aW5zLCBidXQgYmVpbmcg Y29uc2lzdGVudCBpcyBpdHMgb3duIGJsZXNzaW5nLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgoKUmV2aWV3ZWQtYnk6IEpvb25hcyBM YWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KCj4gLS0tCj4gwqBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5owqDCoMKgwqDCoMKgwqDCoHzCoMKgNSArKystLQo+ IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uY8KgwqDCoMKgwqDCoMKgwqB8IDMwICsr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdGlsaW5nLmMgfMKgwqA4ICsrKystLS0tCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDIzIGlu c2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ IGluZGV4IGI2ZTU2ZWNiODYzNy4uM2Q3MzM5NGI1MmQ3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gQEAgLTMyNDEsOCArMzI0MSw5IEBAIGludCBpOTE1X2dlbV9vYmplY3RfYXR0YWNo X3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiDCoGludCBpOTE1X2dlbV9v cGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gwqB2 b2lkIGk5MTVfZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9m aWxlICpmaWxlKTsKPiDCoAo+IC11NjQgaTkxNV9nZW1fZ2V0X2dndHRfc2l6ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB1NjQgc2l6ZSwgaW50IHRpbGluZ19tb2RlKTsKPiAtdTY0IGk5MTVfZ2Vt X2dldF9nZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgc2l6ZSwKPiAr dTY0IGk5MTVfZ2VtX2dldF9nZ3R0X3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCB1NjQgc2l6ZSwKPiArCQkJwqDCoMKgaW50IHRpbGluZ19tb2RlKTsKPiArdTY0IGk5MTVf Z2VtX2dldF9nZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHU2NCBzaXplLAo+IMKgCQkJCWludCB0aWxpbmdfbW9kZSwgYm9vbCBmZW5jZWQpOwo+IMKgCj4g wqBpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZlbChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDQzMjg2OGVhZmE2 MC4uZjExYmY2YzRmODZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTE4NDYs MjUgKzE4NDYsMjYgQEAgaTkxNV9nZW1fcmVsZWFzZV9hbGxfbW1hcHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+IMKgCj4gwqAvKioKPiDCoCAqIGk5MTVfZ2VtX2dldF9nZ3R0 X3NpemUgLSByZXR1cm4gcmVxdWlyZWQgZ2xvYmFsIEdUVCBzaXplIGZvciBhbiBvYmplY3QKPiAt ICogQGRldjogZHJtIGRldmljZQo+ICsgKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlCj4gwqAgKiBA c2l6ZTogb2JqZWN0IHNpemUKPiDCoCAqIEB0aWxpbmdfbW9kZTogdGlsaW5nIG1vZGUKPiDCoCAq Cj4gwqAgKiBSZXR1cm4gdGhlIHJlcXVpcmVkIEdUVCBzaXplIGZvciBhbiBvYmplY3QsIHRha2lu ZyBpbnRvIGFjY291bnQKPiDCoCAqIHBvdGVudGlhbCBmZW5jZSByZWdpc3RlciBtYXBwaW5nLgo+ IMKgICovCj4gLXU2NCBpOTE1X2dlbV9nZXRfZ2d0dF9zaXplKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHU2NCBzaXplLCBpbnQgdGlsaW5nX21vZGUpCj4gK3U2NCBpOTE1X2dlbV9nZXRfZ2d0dF9z aXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJwqDCoMKgdTY0IHNp emUsIGludCB0aWxpbmdfbW9kZSkKPiDCoHsKPiDCoAl1NjQgZ2d0dF9zaXplOwo+IMKgCj4gwqAJ R0VNX0JVR19PTihzaXplID09IDApOwo+IMKgCj4gLQlpZiAoSU5URUxfR0VOKGRldikgPj0gNCB8 fAo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCB8fAo+IMKgCcKgwqDCoMKgdGlsaW5n X21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSkKPiDCoAkJcmV0dXJuIHNpemU7Cj4gwqAKPiDCoAkv KiBQcmV2aW91cyBjaGlwcyBuZWVkIGEgcG93ZXItb2YtdHdvIGZlbmNlIHJlZ2lvbiB3aGVuIHRp bGluZyAqLwo+IC0JaWYgKElTX0dFTjMoZGV2KSkKPiArCWlmIChJU19HRU4zKGRldl9wcml2KSkK PiDCoAkJZ2d0dF9zaXplID0gMTAyNCoxMDI0Owo+IMKgCWVsc2UKPiDCoAkJZ2d0dF9zaXplID0g NTEyKjEwMjQ7Cj4gQEAgLTE4NzcsNyArMTg3OCw3IEBAIHU2NCBpOTE1X2dlbV9nZXRfZ2d0dF9z aXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBzaXplLCBpbnQgdGlsaW5nX21vZGUpCj4g wqAKPiDCoC8qKgo+IMKgICogaTkxNV9nZW1fZ2V0X2dndHRfYWxpZ25tZW50IC0gcmV0dXJuIHJl cXVpcmVkIEdUVCBhbGlnbm1lbnQgZm9yIGFuIG9iamVjdAo+IC0gKiBAZGV2OiBkcm0gZGV2aWNl Cj4gKyAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UKPiDCoCAqIEBzaXplOiBvYmplY3Qgc2l6ZQo+ IMKgICogQHRpbGluZ19tb2RlOiB0aWxpbmcgbW9kZQo+IMKgICogQGZlbmNlZDogaXMgZmVuY2Vk IGFsaWduZW1uZWQgcmVxdWlyZWQgb3Igbm90Cj4gQEAgLTE4ODUsNyArMTg4Niw3IEBAIHU2NCBp OTE1X2dlbV9nZXRfZ2d0dF9zaXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBzaXplLCBp bnQgdGlsaW5nX21vZGUpCj4gwqAgKiBSZXR1cm4gdGhlIHJlcXVpcmVkIEdUVCBhbGlnbm1lbnQg Zm9yIGFuIG9iamVjdCwgdGFraW5nIGludG8gYWNjb3VudAo+IMKgICogcG90ZW50aWFsIGZlbmNl IHJlZ2lzdGVyIG1hcHBpbmcuCj4gwqAgKi8KPiAtdTY0IGk5MTVfZ2VtX2dldF9nZ3R0X2FsaWdu bWVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgc2l6ZSwKPiArdTY0IGk5MTVfZ2VtX2dl dF9nZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCBz aXplLAo+IMKgCQkJCWludCB0aWxpbmdfbW9kZSwgYm9vbCBmZW5jZWQpCj4gwqB7Cj4gwqAJR0VN X0JVR19PTihzaXplID09IDApOwo+IEBAIC0xODk0LDcgKzE4OTUsNyBAQCB1NjQgaTkxNV9nZW1f Z2V0X2dndHRfYWxpZ25tZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBzaXplLAo+IMKg CcKgKiBNaW5pbXVtIGFsaWdubWVudCBpcyA0ayAoR1RUIHBhZ2Ugc2l6ZSksIGJ1dCBtaWdodCBi ZSBncmVhdGVyCj4gwqAJwqAqIGlmIGEgZmVuY2UgcmVnaXN0ZXIgaXMgbmVlZGVkIGZvciB0aGUg b2JqZWN0Lgo+IMKgCcKgKi8KPiAtCWlmIChJTlRFTF9HRU4oZGV2KSA+PSA0IHx8ICghZmVuY2Vk ICYmIElTX0czMyhkZXYpKSB8fAo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCB8fCAo IWZlbmNlZCAmJiBJU19HMzMoZGV2X3ByaXYpKSB8fAo+IMKgCcKgwqDCoMKgdGlsaW5nX21vZGUg PT0gSTkxNV9USUxJTkdfTk9ORSkKPiDCoAkJcmV0dXJuIDQwOTY7Cj4gwqAKPiBAQCAtMTkwMiw3 ICsxOTAzLDcgQEAgdTY0IGk5MTVfZ2VtX2dldF9nZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1NjQgc2l6ZSwKPiDCoAnCoCogUHJldmlvdXMgY2hpcHMgbmVlZCB0byBiZSBh bGlnbmVkIHRvIHRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdAo+IMKgCcKgKiBmZW5jZSByZWdpc3Rl ciB0aGF0IGNhbiBjb250YWluIHRoZSBvYmplY3QuCj4gwqAJwqAqLwo+IC0JcmV0dXJuIGk5MTVf Z2VtX2dldF9nZ3R0X3NpemUoZGV2LCBzaXplLCB0aWxpbmdfbW9kZSk7Cj4gKwlyZXR1cm4gaTkx NV9nZW1fZ2V0X2dndHRfc2l6ZShkZXZfcHJpdiwgc2l6ZSwgdGlsaW5nX21vZGUpOwo+IMKgfQo+ IMKgCj4gwqBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfbW1hcF9vZmZzZXQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiBAQCAtMjk5MSwxNCArMjk5MiwxNCBAQCBp OTE1X2dlbV9vYmplY3RfaW5zZXJ0X2ludG9fdm0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiDCoAo+IMKgCQl2aWV3X3NpemUgPSBpOTE1X2dndHRfdmlld19zaXplKG9iaiwgZ2d0 dF92aWV3KTsKPiDCoAo+IC0JCWZlbmNlX3NpemUgPSBpOTE1X2dlbV9nZXRfZ2d0dF9zaXplKGRl diwKPiArCQlmZW5jZV9zaXplID0gaTkxNV9nZW1fZ2V0X2dndHRfc2l6ZShkZXZfcHJpdiwKPiDC oAkJCQkJCcKgwqDCoMKgdmlld19zaXplLAo+IMKgCQkJCQkJwqDCoMKgwqBvYmotPnRpbGluZ19t b2RlKTsKPiAtCQlmZW5jZV9hbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ2d0dF9hbGlnbm1lbnQo ZGV2LAo+ICsJCWZlbmNlX2FsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9nZ3R0X2FsaWdubWVudChk ZXZfcHJpdiwKPiDCoAkJCQkJCQnCoMKgwqDCoMKgwqB2aWV3X3NpemUsCj4gwqAJCQkJCQkJwqDC oMKgwqDCoMKgb2JqLT50aWxpbmdfbW9kZSwKPiDCoAkJCQkJCQnCoMKgwqDCoMKgwqB0cnVlKTsK PiAtCQl1bmZlbmNlZF9hbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ2d0dF9hbGlnbm1lbnQoZGV2 LAo+ICsJCXVuZmVuY2VkX2FsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9nZ3R0X2FsaWdubWVudChk ZXZfcHJpdiwKPiDCoAkJCQkJCQkJwqB2aWV3X3NpemUsCj4gwqAJCQkJCQkJCcKgb2JqLT50aWxp bmdfbW9kZSwKPiDCoAkJCQkJCQkJwqBmYWxzZSk7Cj4gQEAgLTM3MDIsMTMgKzM3MDMsMTQgQEAg aTkxNV92bWFfbWlzcGxhY2VkKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgc2l6ZSwgdTY0IGFs aWdubWVudCwgdTY0IGZsYWdzKQo+IMKgdm9pZCBfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNl YWJsZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiDCoHsKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gdm1hLT5vYmo7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwo+IMKgCWJvb2wgbWFwcGFibGUsIGZlbmNl YWJsZTsKPiDCoAl1MzIgZmVuY2Vfc2l6ZSwgZmVuY2VfYWxpZ25tZW50Owo+IMKgCj4gLQlmZW5j ZV9zaXplID0gaTkxNV9nZW1fZ2V0X2dndHRfc2l6ZShvYmotPmJhc2UuZGV2LAo+ICsJZmVuY2Vf c2l6ZSA9IGk5MTVfZ2VtX2dldF9nZ3R0X3NpemUoZGV2X3ByaXYsCj4gwqAJCQkJCcKgwqDCoMKg b2JqLT5iYXNlLnNpemUsCj4gwqAJCQkJCcKgwqDCoMKgb2JqLT50aWxpbmdfbW9kZSk7Cj4gLQlm ZW5jZV9hbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ2d0dF9hbGlnbm1lbnQob2JqLT5iYXNlLmRl diwKPiArCWZlbmNlX2FsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9nZ3R0X2FsaWdubWVudChkZXZf cHJpdiwKPiDCoAkJCQkJCcKgwqDCoMKgwqDCoG9iai0+YmFzZS5zaXplLAo+IMKgCQkJCQkJwqDC oMKgwqDCoMKgb2JqLT50aWxpbmdfbW9kZSwKPiDCoAkJCQkJCcKgwqDCoMKgwqDCoHRydWUpOwo+ IEBAIC0zNzE3LDcgKzM3MTksNyBAQCB2b2lkIF9faTkxNV92bWFfc2V0X21hcF9hbmRfZmVuY2Vh YmxlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+IMKgCQnCoMKgwqDCoMKgKHZtYS0+bm9kZS5zdGFy dCAmIChmZW5jZV9hbGlnbm1lbnQgLSAxKSkgPT0gMCk7Cj4gwqAKPiDCoAltYXBwYWJsZSA9ICh2 bWEtPm5vZGUuc3RhcnQgKyBmZW5jZV9zaXplIDw9Cj4gLQkJwqDCoMKgwqB0b19pOTE1KG9iai0+ YmFzZS5kZXYpLT5nZ3R0Lm1hcHBhYmxlX2VuZCk7Cj4gKwkJwqDCoMKgwqBkZXZfcHJpdi0+Z2d0 dC5tYXBwYWJsZV9lbmQpOwo+IMKgCj4gwqAJb2JqLT5tYXBfYW5kX2ZlbmNlYWJsZSA9IG1hcHBh YmxlICYmIGZlbmNlYWJsZTsKPiDCoH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxp bmcuYwo+IGluZGV4IDRlNDJkYTY5MWU0ZS4uYjdmOTg3NWY2OWI0IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKPiBAQCAtMTE3LDE1ICsxMTcsMTYgQEAgaTkxNV90 aWxpbmdfb2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0cmlkZSwgaW50IHNpemUsIGlu dCB0aWxpbmdfbW9kZSkKPiDCoHN0YXRpYyBib29sCj4gwqBpOTE1X2dlbV9vYmplY3RfZmVuY2Vf b2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IHRpbGluZ19tb2RlKQo+IMKg ewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShvYmotPmJh c2UuZGV2KTsKPiDCoAl1MzIgc2l6ZTsKPiDCoAo+IMKgCWlmICh0aWxpbmdfbW9kZSA9PSBJOTE1 X1RJTElOR19OT05FKQo+IMKgCQlyZXR1cm4gdHJ1ZTsKPiDCoAo+IC0JaWYgKElOVEVMX0lORk8o b2JqLT5iYXNlLmRldiktPmdlbiA+PSA0KQo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkKPiDCoAkJcmV0dXJuIHRydWU7Cj4gwqAKPiAtCWlmIChJU19HRU4zKG9iai0+YmFzZS5kZXYp KSB7Cj4gKwlpZiAoSVNfR0VOMyhkZXZfcHJpdikpIHsKPiDCoAkJaWYgKGk5MTVfZ2VtX29ial9n Z3R0X29mZnNldChvYmopICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykKPiDCoAkJCXJldHVybiBm YWxzZTsKPiDCoAl9IGVsc2Ugewo+IEBAIC0xMzMsOCArMTM0LDcgQEAgaTkxNV9nZW1fb2JqZWN0 X2ZlbmNlX29rKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCB0aWxpbmdfbW9k ZSkKPiDCoAkJCXJldHVybiBmYWxzZTsKPiDCoAl9Cj4gwqAKPiAtCXNpemUgPSBpOTE1X2dlbV9n ZXRfZ2d0dF9zaXplKG9iai0+YmFzZS5kZXYsCj4gLQkJCQnCoMKgwqDCoMKgwqBvYmotPmJhc2Uu c2l6ZSwgdGlsaW5nX21vZGUpOwo+ICsJc2l6ZSA9IGk5MTVfZ2VtX2dldF9nZ3R0X3NpemUoZGV2 X3ByaXYsIG9iai0+YmFzZS5zaXplLCB0aWxpbmdfbW9kZSk7Cj4gwqAJaWYgKGk5MTVfZ2VtX29i al9nZ3R0X3NpemUob2JqKSAhPSBzaXplKQo+IMKgCQlyZXR1cm4gZmFsc2U7Cj4gwqAKLS0gCkpv b25hcyBMYWh0aW5lbgpPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRlcgpJbnRlbCBDb3Jwb3Jh dGlvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK