From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH v2] drm/i915: Introduce an internal allocator for disposable private objects Date: Mon, 10 Oct 2016 09:19:00 +0100 Message-ID: <20161010081900.GC2718@nuc-i3427.alporthouse.com> References: <5c234e90-abfd-301b-5743-2116b15d67c9@linux.intel.com> <20161008083440.25083-1-chris@chris-wilson.co.uk> <0516b5f3-afa7-892d-39d3-fa7905640b34@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id E0B406E207 for ; Mon, 10 Oct 2016 08:19:04 +0000 (UTC) Content-Disposition: inline In-Reply-To: <0516b5f3-afa7-892d-39d3-fa7905640b34@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: Tvrtko Ursulin Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBPY3QgMTAsIDIwMTYgYXQgMDk6MTE6NDlBTSArMDEwMCwgVHZydGtvIFVyc3VsaW4g d3JvdGU6Cj4gT24gMDgvMTAvMjAxNiAwOTozNCwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+ID5RdWl0 ZSBhIGZldyBvZiBvdXIgb2JqZWN0cyB1c2VkIGZvciBpbnRlcm5hbCBoYXJkd2FyZSBwcm9ncmFt bWluZyBkbyBub3QKPiA+YmVuZWZpdCBmcm9tIGJlaW5nIHN3YXBwYWJsZSBvciBmcm9tIGJlaW5n IHplcm8gaW5pdGlhbGlzZWQuIEFzIHN1Y2gKPiA+dGhleSBkbyBub3QgYmVuZWZpdCBmcm9tIHVz aW5nIGEgc2htZW1mcyBiYWNraW5nIHN0b3JhZ2UgYW5kIHNpbmNlIHRoZXkKPiA+YXJlIGludGVy bmFsIGFuZCBuZXZlciBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSB1c2VyLCB3ZSBkbyBub3QgbmVl ZCB0bwo+ID53b3JyeSBhYm91dCBwcm92aWRpbmcgYSBmaWxwLiBGb3IgdGhlc2Ugd2UgY2FuIHVz ZSBhbgo+ID5kcm1faTkxNV9nZW1fb2JqZWN0IHdyYXBwZXIgYXJvdW5kIGEgc2dfdGFibGUgb2Yg cGxhaW4gc3RydWN0IHBhZ2UuIFRoZXkKPiA+YXJlIG5vdCBzd2FwIGJhY2tlZCBhbmQgbm90IGF1 dG9tYXRpY2FsbHkgcGlubmVkLiBJZiB0aGV5IGFyZSByZWFwZWQKPiA+YnkgdGhlIHNocmlua2Vy LCB0aGUgcGFnZXMgYXJlIHJlbGVhc2VkIGFuZCB0aGUgY29udGVudHMgZGlzY2FyZGVkLiBGb3IK PiA+dGhlIGludGVybmFsIHVzZSBjYXNlLCB0aGlzIGlzIGZpbmUgYXMgZm9yIGV4YW1wbGUsIHJp bmdidWZmZXJzIGFyZQo+ID5waW5uZWQgZnJvbSBiZWluZyB3cml0dGVuIGJ5IGEgcmVxdWVzdCB0 byBiZSByZWFkIGJ5IHRoZSBoYXJkd2FyZS4gT25jZQo+ID50aGV5IGFyZSBpZGxlLCB0aGV5IGNh biBiZSBkaXNjYXJkZWQgZW50aXJlbHkuIEFzIHN1Y2ggdGhleSBhcmUgYSBnb29kCj4gPm1hdGNo IGZvciBleGVjbGlzdCByaW5nYnVmZmVycyBhbmQgYSBzbWFsbCB2YXJpZXR5IG9mIG90aGVyIGlu dGVybmFsCj4gPm9iamVjdHMuCj4gPgo+ID5JbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCB0aGlzIGlz IGxpbWl0ZWQgdG8gdGhlIHNjcmF0Y2ggYmF0Y2ggYnVmZmVycyB3ZQo+ID51c2UgKGZvciBjb21t YW5kIHBhcnNpbmcgYW5kIHN0YXRlIGluaXRpYWxpc2F0aW9uKS4KPiA+Cj4gPnYyOiBBbGxvY2F0 ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMsIHdoZXJlIHBvc3NpYmxlLgo+IAo+IFNpbmNl IHRoZSBhbGxvY2F0b3Igd2lsbCBiZSB1c2VkIGNvbnN0YW50bHkgYXQgcnVudGltZSwgbXkKPiBy ZWNvbGxlY3Rpb24gaXMgdGhhdCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMgY2FuIGVhc2lseSBi ZWNvbWUgbmV4dAo+IHRvIGltcG9zc2libGUsIHNvIEkgYW0gd29uZGVyaW5nIHdoeT8gQWxzbywg b24geW91ciBsYXN0IHJlcGx5IHlvdQo+IGRpZCBub3Qgd3JpdGUgd2h5IHlvdSB0aGluayB0aGlz IGlzIGludGVyZXN0aW5nIHRvIHRyeT8KPiAKPiA+U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gPkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtv LnVyc3VsaW5AbGludXguaW50ZWwuY29tPgo+ID4tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgfCAgIDUgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYyAgIHwgIDI4ICsrLS0tCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1faW50ZXJuYWwuYyAgICAgfCAxNjIgKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRl LmMgfCAgIDIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAg ICAgICB8ICAgMiArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu YyAgICAgIHwgIDE0ICsrLQo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgMTkwIGluc2VydGlvbnMoKyks IDI0IGRlbGV0aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9pbnRlcm5hbC5jCj4gPgo+ID5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID5pbmRl eCBhOTk4YzJiY2U3MGEuLmI5NGE5MGYzNGQyZCAxMDA2NDQKPiA+LS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPiA+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK PiA+QEAgLTM1LDYgKzM1LDcgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiA+ICAJ ICBpOTE1X2dlbV9leGVjYnVmZmVyLm8gXAo+ID4gIAkgIGk5MTVfZ2VtX2ZlbmNlLm8gXAo+ID4g IAkgIGk5MTVfZ2VtX2d0dC5vIFwKPiA+KwkgIGk5MTVfZ2VtX2ludGVybmFsLm8gXAo+ID4gIAkg IGk5MTVfZ2VtLm8gXAo+ID4gIAkgIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5vIFwKPiA+ICAJICBp OTE1X2dlbV9yZXF1ZXN0Lm8gXAo+ID5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+aW5kZXggZmVl NWNjOTJlMmYyLi5iYWQ5N2YxZTUyNjUgMTAwNjQ0Cj4gPi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiA+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ ID5AQCAtMzUzOCw2ICszNTM4LDExIEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuX2Zv cl9wcmVhbGxvY2F0ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAJCQkJCSAgICAgICB1 MzIgZ3R0X29mZnNldCwKPiA+ICAJCQkJCSAgICAgICB1MzIgc2l6ZSk7Cj4gPisvKiBpOTE1X2dl bV9pbnRlcm5hbC5jICovCj4gPitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCj4gPitpOTE1 X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPisJ CQkJdW5zaWduZWQgaW50IHNpemUpOwo+ID4rCj4gPiAgLyogaTkxNV9nZW1fc2hyaW5rZXIuYyAq Lwo+ID4gIHVuc2lnbmVkIGxvbmcgaTkxNV9nZW1fc2hyaW5rKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiA+ICAJCQkgICAgICB1bnNpZ25lZCBsb25nIHRhcmdldCwKPiA+ZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYwo+ID5pbmRleCBjYjI1Y2Fk MzMxOGMuLjM5MzRjOTEwM2NmMiAxMDA2NDQKPiA+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fYmF0Y2hfcG9vbC5jCj4gPisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2JhdGNoX3Bvb2wuYwo+ID5AQCAtOTcsOSArOTcsOSBAQCBpOTE1X2dlbV9iYXRjaF9wb29s X2dldChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCwKPiA+ICAJCQlzaXplX3Qgc2l6 ZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBOVUxMOwo+ ID4tCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp0bXAsICpuZXh0Owo+ID4rCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICp0bXA7Cj4gPiAgCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Cj4g Pi0JaW50IG47Cj4gPisJaW50IG4sIHJldDsKPiA+ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcG9v bC0+ZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiA+QEAgLTExMiwxOSArMTEyLDEy IEBAIGk5MTVfZ2VtX2JhdGNoX3Bvb2xfZ2V0KHN0cnVjdCBpOTE1X2dlbV9iYXRjaF9wb29sICpw b29sLAo+ID4gIAkJbiA9IEFSUkFZX1NJWkUocG9vbC0+Y2FjaGVfbGlzdCkgLSAxOwo+ID4gIAls aXN0ID0gJnBvb2wtPmNhY2hlX2xpc3Rbbl07Cj4gPi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHRtcCwgbmV4dCwgbGlzdCwgYmF0Y2hfcG9vbF9saW5rKSB7Cj4gPisJbGlzdF9mb3JfZWFjaF9l bnRyeSh0bXAsIGxpc3QsIGJhdGNoX3Bvb2xfbGluaykgewo+ID4gIAkJLyogVGhlIGJhdGNoZXMg YXJlIHN0cmljdGx5IExSVSBvcmRlcmVkICovCj4gPiAgCQlpZiAoIWk5MTVfZ2VtX2FjdGl2ZV9p c19pZGxlKCZ0bXAtPmxhc3RfcmVhZFtwb29sLT5lbmdpbmUtPmlkXSwKPiA+ICAJCQkJCSAgICAg JnRtcC0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkpCj4gPiAgCQkJYnJlYWs7Cj4gPi0JCS8qIFdo aWxlIHdlJ3JlIGxvb3BpbmcsIGRvIHNvbWUgY2xlYW4gdXAgKi8KPiA+LQkJaWYgKHRtcC0+bWFk diA9PSBfX0k5MTVfTUFEVl9QVVJHRUQpIHsKPiA+LQkJCWxpc3RfZGVsKCZ0bXAtPmJhdGNoX3Bv b2xfbGluayk7Cj4gPi0JCQlpOTE1X2dlbV9vYmplY3RfcHV0KHRtcCk7Cj4gPi0JCQljb250aW51 ZTsKPiA+LQkJfQo+ID4tCj4gPiAgCQlpZiAodG1wLT5iYXNlLnNpemUgPj0gc2l6ZSkgewo+ID4g IAkJCW9iaiA9IHRtcDsKPiA+ICAJCQlicmVhazsKPiA+QEAgLTEzMiwxOSArMTI1LDE2IEBAIGk5 MTVfZ2VtX2JhdGNoX3Bvb2xfZ2V0KHN0cnVjdCBpOTE1X2dlbV9iYXRjaF9wb29sICpwb29sLAo+ ID4gIAl9Cj4gPiAgCWlmIChvYmogPT0gTlVMTCkgewo+ID4tCQlpbnQgcmV0Owo+ID4tCj4gPi0J CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoJnBvb2wtPmVuZ2luZS0+aTkxNS0+ZHJtLCBz aXplKTsKPiA+KwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbCgmcG9vbC0+ ZW5naW5lLT5pOTE1LT5kcm0sCj4gPisJCQkJCQkgICAgICBzaXplKTsKPiA+ICAJCWlmIChJU19F UlIob2JqKSkKPiA+ICAJCQlyZXR1cm4gb2JqOwo+ID4tCj4gPi0JCXJldCA9IGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZXMob2JqKTsKPiA+LQkJaWYgKHJldCkKPiA+LQkJCXJldHVybiBFUlJfUFRS KHJldCk7Cj4gPi0KPiA+LQkJb2JqLT5tYWR2ID0gSTkxNV9NQURWX0RPTlRORUVEOwo+ID4gIAl9 Cj4gPisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwo+ID4rCWlmIChyZXQp Cj4gPisJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPisKPiA+ICAJbGlzdF9tb3ZlX3RhaWwoJm9i ai0+YmF0Y2hfcG9vbF9saW5rLCBsaXN0KTsKPiA+ICAJaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdl cyhvYmopOwo+ID4gIAlyZXR1cm4gb2JqOwo+ID5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1faW50ZXJuYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2ludGVybmFsLmMKPiA+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+aW5kZXggMDAwMDAwMDAwMDAw Li4yNTViOTIzMmI4ZWYKPiA+LS0tIC9kZXYvbnVsbAo+ID4rKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9pbnRlcm5hbC5jCj4gPkBAIC0wLDAgKzEsMTYyIEBACj4gPisvKgo+ID4r ICogQ29weXJpZ2h0IMKpIDIwMTQtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4rICoKPiA+KyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCj4gPisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4rICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgo+ID4rICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+KyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4gPisgKgo+ID4rICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4rICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQo+ID4rICogU29mdHdhcmUuCj4gPisgKgo+ID4rICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiA+KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4rICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgo+ID4rICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+KyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKPiA+KyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+KyAqCj4gPisgKi8KPiA+Kwo+ID4r I2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPisjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+Cj4gPisj aW5jbHVkZSAiaTkxNV9kcnYuaCIKPiA+Kwo+ID4rI2RlZmluZSBRVUlFVCAoX19HRlBfTk9SRVRS WSB8IF9fR0ZQX05PV0FSTikKPiA+Kwo+ID4rc3RhdGljIHZvaWQgaW50ZXJuYWxfZnJlZV9wYWdl cyhzdHJ1Y3Qgc2dfdGFibGUgKnN0KQo+ID4rewo+ID4rCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7 Cj4gPisKPiA+Kwlmb3IgKHNnID0gc3QtPnNnbDsgc2c7IHNnID0gX19zZ19uZXh0KHNnKSkKPiA+ KwkJX19mcmVlX3BhZ2VzKHNnX3BhZ2Uoc2cpLCBnZXRfb3JkZXIoc2ctPmxlbmd0aCkpOwo+IAo+ IEZyYWdpbGUgc2luY2Ugd29udCB3b3JrIHRvZ2V0aGVyIHdpdGggY29hbGVzY2luZywgd2hpY2gg SSBhbSBzYWQgdG8KPiBzZWUgbm90IGltcGxlbWVudGVkLiBGb3Igc29tZSByZWFzb24gaXQgbWFr ZXMgbWUgZmVlbCByZWFsIGdvb2Qgd2hlbgo+IGl0IGlzIHRoZXJlLgoKV2UgZG8gdGhlIGNvYWxl c2NpbmcuCgo+ID4rCQlkbyB7Cj4gPisJCQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwIHwgKG9yZGVy ID8gUVVJRVQgOiAwKSwgb3JkZXIpOwo+ID4rCQkJaWYgKHBhZ2UpCj4gPisJCQkJYnJlYWs7Cj4g PisJCQlpZiAoIW9yZGVyLS0pCj4gPisJCQkJZ290byBlcnI7Cj4gPisJCX0gd2hpbGUgKDEpOwo+ IAo+IEZlZWxzIGxpa2UgaXQgY291bGQgaGFtbWVyIGhhcmQgb24gYSBmcmFnbWVudGVkIHN5c3Rl bSwgSSBoYXZlIGJpZwo+IGNvbmNlcm5zIGFib3V0IHRoaXMuCgpZb3UgZGlkIG5vdGljZSB0aGF0 IHRoZXNlIHdlcmUgbWFya2VkIGFzIHRlbXBvcmFyeSBhbGxvY2F0aW9ucyAoYmVjYXVzZQp0aGV5 IGFyZSByZWNsYWltZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlKSwgYW5kIG9uIGFuIGFscmVhZHkg ZnJhZ2VtZW50ZWQKc3lzdGVtIHdlIGRvIHRoZSByaWdodCB0aGluZyBhbnl3YXk/Ci1DaHJpcwoK LS0gCkNocmlzIFdpbHNvbiwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50cmUKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==