From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v3 2/8] drm/i915: Adds graphic address space ballooning logic Date: Tue, 16 Dec 2014 13:41:34 +0000 Message-ID: <5490368E.6080202@linux.intel.com> References: <1415880169-7656-1-git-send-email-yu.c.zhang@linux.intel.com> <1415880169-7656-3-git-send-email-yu.c.zhang@linux.intel.com> <548AE6EA.4000200@linux.intel.com> <549031F9.8000108@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F9986E4B6 for ; Tue, 16 Dec 2014 05:41:36 -0800 (PST) In-Reply-To: <549031F9.8000108@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: "Yu, Zhang" , Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEyLzE2LzIwMTQgMDE6MjIgUE0sIFl1LCBaaGFuZyB3cm90ZToKPiBPbiAxMi8xMi8yMDE0 IDk6MDAgUE0sIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Pgo+PiBPbiAxMS8xMy8yMDE0IDEyOjAy IFBNLCBZdSBaaGFuZyB3cm90ZToKPj4+IFdpdGggSW50ZWwgR1ZULWcsIHRoZSBnbG9iYWwgZ3Jh cGhpYyBtZW1vcnkgc3BhY2UgaXMgcGFydGl0aW9uZWQgYnkKPj4+IG11bHRpcGxlIHZHUFUgaW5z dGFuY2VzIGluIGRpZmZlcmVudCBWTXMuIFRoZSBiYWxsb29uaW5nIGNvZGUgaXMgY2FsbGVkCj4+ PiBpbiBpOTE1X2dlbV9zZXR1cF9nbG9iYWxfZ3R0KCksIHV0aWxpemluZyB0aGUgZHJtIG1tIGFs bG9jYXRvciBBUElzIHRvCj4+PiBtYXJrIHRoZSBncmFwaGljIGFkZHJlc3Mgc3BhY2Ugd2hpY2gg YXJlIHBhcnRpdGlvbmVkIG91dCB0byBvdGhlciB2R1BVcwo+Pj4gYXMgcmVzZXJ2ZWQuCj4+Pgo+ Pj4gdjI6Cj4+PiB0YWtlIENocmlzIGFuZCBEYW5pZWwncyBjb21tZW50czoKPj4+ICAgICAtIG5v IGd1YXJkIHBhZ2UgYmV0d2VlbiBkaWZmZXJlbnQgVk1zCj4+PiAgICAgLSB1c2UgZHJtX21tX3Jl c2VydmVfbm9kZSgpIHRvIGRvIHRoZSByZXNlcnZhdGlvbiBmb3IgYmFsbG9vbmluZywKPj4+ICAg ICBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2Vu ZXJpYygpCj4+Pgo+Pj4gdjM6Cj4+PiB0YWtlIERhbmllbCdzIGNvbW1lbnRzOgo+Pj4gICAgIC0g bW92ZSBiYWxsb29uaW5nIGZ1bmN0aW9ucyBpbnRvIGk5MTVfdmdwdS5jCj4+PiAgICAgLSBhZGQg a2VybmVsZG9jIHRvIGJhbGxvb25pbmcgZnVuY3Rpb25zCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTog WXUgWmhhbmcgPHl1LmMuemhhbmdAbGludXguaW50ZWwuY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTog SmlrZSBTb25nIDxqaWtlLnNvbmdAaW50ZWwuY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTogWmhpIFdh bmcgPHpoaS5hLndhbmdAaW50ZWwuY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTogRWRkaWUgRG9uZyA8 ZWRkaWUuZG9uZ0BpbnRlbC5jb20+Cj4+PiAtLS0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmMgfCAgMTcgKysrLQo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3ZncHUuYyAgICB8IDE0OQo+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmdwdS5oICAgIHwgICAyICsKPj4+ICAg MyBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Cj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+IGluZGV4IGRlMTIwMTcuLjJk ZmFjMTMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu Ywo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+IEBAIC0y Nyw2ICsyNyw3IEBACj4+PiAgICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+Pj4gICAjaW5jbHVkZSA8 ZHJtL2k5MTVfZHJtLmg+Cj4+PiAgICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+Pj4gKyNpbmNsdWRl ICJpOTE1X3ZncHUuaCIKPj4+ICAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPj4+ICAgI2luY2x1 ZGUgImludGVsX2Rydi5oIgo+Pj4KPj4+IEBAIC0xNjgzLDYgKzE2ODQsMTYgQEAgaW50IGk5MTVf Z2VtX3NldHVwX2dsb2JhbF9ndHQoc3RydWN0IGRybV9kZXZpY2UKPj4+ICpkZXYsCj4+Pgo+Pj4g ICAgICAgLyogU3VidHJhY3QgdGhlIGd1YXJkIHBhZ2UgLi4uICovCj4+PiAgICAgICBkcm1fbW1f aW5pdCgmZ2d0dF92bS0+bW0sIHN0YXJ0LCBlbmQgLSBzdGFydCAtIFBBR0VfU0laRSk7Cj4+PiAr Cj4+PiArICAgIGRldl9wcml2LT5ndHQuYmFzZS5zdGFydCA9IHN0YXJ0Owo+Pj4gKyAgICBkZXZf cHJpdi0+Z3R0LmJhc2UudG90YWwgPSBlbmQgLSBzdGFydDsKPj4+ICsKPj4+ICsgICAgaWYgKGlu dGVsX3ZncHVfYWN0aXZlKGRldikpIHsKPj4+ICsgICAgICAgIHJldCA9IGludGVsX3ZndF9iYWxs b29uKGRldik7Cj4+PiArICAgICAgICBpZiAocmV0KQo+Pj4gKyAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4+PiArICAgIH0KPj4+ICsKPj4KPj4gT3V0IG9mIGN1cmlvc2l0eSwgd2hhdCB3aWxsIGJl IHRoZSBtZWNoYW5pc20gdG8gcHJldmVudCBhIHZHUFUgaW5zdGFuY2UKPj4gZnJvbSBpZ25vcmlu ZyB0aGUgYmFsbG9vbmluZyBkYXRhPyBNdXN0IGJlIHNvbWV0aGluZyBpbiB0aGUgaHlwZXJ2aXNv cgo+PiBibG9ja2luZyBwYXNzLXRocm91Z2ggYWNjZXNzIHRvIHN1Y2ggZG9tYWlucz8KPiBXZWxs LCBhbHRob3VnaCB3ZSBoYXZlIHJhbmdlIGNoZWNrIGxvZ2ljIGluIHRoZSBob3N0IHNpZGUod2hp Y2ggY2hlY2tzCj4gdGhlIGxlZ2FsaXR5IG9mIGEgR00gYWRkcmVzcyksIHRoZSBjb3JyZWN0bmVz cyBvZiBhIEdNIGZyb20gdkdQVSBzaWRlCgpPaCwgSSB0aG91Z2h0IHRoYXQgcGFydCBpcyBkaXJl Y3QgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKGF2b2lkaW5nIAp0cmFuc2xhdGlvbikuIEl0J3Mg bm90IHRoZW4/Cgo+IGFyZSBzdXBwb3NlZCB0byBiZSBndWFyYW50ZWVkIGJ5IHRoZSBkcm0gbW0g YWxsb2NhdG9yIC0gYWxsIHRob3NlCj4gYmFsbG9vbmVkIG91dCBzcGFjZXMgYXJlIG1hcmtlZCBh cyByZXNlcnZlZC4KCkkgd2FzIHRoaW5raW5nIGFib3V0IGEgbWFsaWNpb3VzIGk5MTUgZHJpdmVy IGluc3RhbmNlLCBvciBzaW1wbHkgYSBidWcgCmluIERSTSBvciBpOTE1IHdoaWNoIGJyZWFrcyB0 aGUgYmxvY2tlZCByYW5nZXMgYXNzdW1wdGlvbi4KCklmIHRoYXQgaXMgcG9zc2libGUgdGhlbiBp dCBzb3VuZHMgcHJldHR5IGJhZCBpZiBvbmUgVk0gY291bGQgc25vb3AgdGhlIApzdXJmYWNlcyBm cm9tIGFub3RoZXIuCgo+PiBBbmQgcHJvYmFibHkgR1BVIHJlc2V0IHNob3VsZCBhbHNvIGJlIGRp c2FsbG93ZWQgZm9yIHZHUFUgaW5zdGFuY2VzPwo+Pgo+Pj4gICAgICAgaWYgKCFIQVNfTExDKGRl dikpCj4+PiAgICAgICAgICAgZGV2X3ByaXYtPmd0dC5iYXNlLm1tLmNvbG9yX2FkanVzdCA9IGk5 MTVfZ3R0X2NvbG9yX2FkanVzdDsKPj4+Cj4+PiBAQCAtMTcwMiw5ICsxNzEzLDYgQEAgaW50IGk5 MTVfZ2VtX3NldHVwX2dsb2JhbF9ndHQoc3RydWN0IGRybV9kZXZpY2UKPj4+ICpkZXYsCj4+PiAg ICAgICAgICAgdm1hLT5ib3VuZCB8PSBHTE9CQUxfQklORDsKPj4+ICAgICAgIH0KPj4+Cj4+PiAt ICAgIGRldl9wcml2LT5ndHQuYmFzZS5zdGFydCA9IHN0YXJ0Owo+Pj4gLSAgICBkZXZfcHJpdi0+ Z3R0LmJhc2UudG90YWwgPSBlbmQgLSBzdGFydDsKPj4+IC0KPj4+ICAgICAgIC8qIENsZWFyIGFu eSBub24tcHJlYWxsb2NhdGVkIGJsb2NrcyAqLwo+Pj4gICAgICAgZHJtX21tX2Zvcl9lYWNoX2hv bGUoZW50cnksICZnZ3R0X3ZtLT5tbSwgaG9sZV9zdGFydCwgaG9sZV9lbmQpIHsKPj4+ICAgICAg ICAgICBEUk1fREVCVUdfS01TKCJjbGVhcmluZyB1bnVzZWQgR1RUIHNwYWNlOiBbJWx4LCAlbHhd XG4iLAo+Pj4gQEAgLTE3NTYsNiArMTc2NCw5IEBAIHZvaWQgaTkxNV9nbG9iYWxfZ3R0X2NsZWFu dXAoc3RydWN0IGRybV9kZXZpY2UKPj4+ICpkZXYpCj4+PiAgICAgICB9Cj4+Pgo+Pj4gICAgICAg aWYgKGRybV9tbV9pbml0aWFsaXplZCgmdm0tPm1tKSkgewo+Pj4gKyAgICAgICAgaWYgKGludGVs X3ZncHVfYWN0aXZlKGRldikpCj4+PiArICAgICAgICAgICAgaW50ZWxfdmd0X2RlYmFsbG9vbigp Owo+Pj4gKwo+Pj4gICAgICAgICAgIGRybV9tbV90YWtlZG93bigmdm0tPm1tKTsKPj4+ICAgICAg ICAgICBsaXN0X2RlbCgmdm0tPmdsb2JhbF9saW5rKTsKPj4+ICAgICAgIH0KPj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuYwo+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3ZncHUuYwo+Pj4gaW5kZXggM2Y2Yjc5Ny4uZmY1ZmJhMyAxMDA2NDQKPj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmdwdS5jCj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuYwo+Pj4gQEAgLTgzLDMgKzgzLDE1MiBAQCB2b2lkIGk5 MTVfY2hlY2tfdmdwdShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+Pj4gICAgICAgZGV2X3ByaXYt PnZncHUuYWN0aXZlID0gdHJ1ZTsKPj4+ICAgICAgIERSTV9JTkZPKCJWaXJ0dWFsIEdQVSBmb3Ig SW50ZWwgR1ZULWcgZGV0ZWN0ZWQuXG4iKTsKPj4+ICAgfQo+Pj4gKwo+Pj4gK3N0cnVjdCBfYmFs bG9vbl9pbmZvXyB7Cj4+PiArICAgIC8qCj4+PiArICAgICAqIFRoZXJlIGFyZSB1cCB0byAyIHJl Z2lvbnMgcGVyIGxvdy9oaWdoIGdyYXBoaWMgbWVtb3J5IHRoYXQKPj4+ICsgICAgICogbWlnaHQg YmUgYmFsbG9vbmVkLiBIZXJlLCBpbmRleCAwLzEgaXMgZm9yIGxvdwo+Pj4gKyAgICAgKiBncmFw aGljIG1lbW9yeSwgMi8zIGZvciBoaWdoIGdyYXBoaWMgbWVtb3J5Lgo+Pj4gKyAgICAgKi8KPj4+ ICsgICAgc3RydWN0IGRybV9tbV9ub2RlIHNwYWNlWzRdOwo+Pj4gK30gYmxfaW5mbzsKPj4KPj4g VGhpcyBzaG91bGQgYmUgc3RhdGljIEkgdGhpbmsuCj4gWWVzLCB5b3UgYXJlIHJpZ2h0Lgo+Pgo+ Pj4gKy8qKgo+Pj4gKyAqIGludGVsX3ZndF9kZWJhbGxvb24gLSBkZWJhbGxvb24gcmVzZXJ2ZWQg Z3JhcGhpY3MgYWRkcmVzcyB0cnVua3MKPj4+ICsgKgo+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHRvIGRlYWxsb2NhdGUgdGhlIGJhbGxvb25lZC1vdXQgZ3JhcGhpYwo+Pj4gbWVtb3J5 LCB3aGVuCj4+PiArICogZHJpdmVyIGlzIHVubG9hZGVkIG9yIHdoZW4gYmFsbG9vbmluZyBmYWls cy4KPj4+ICsgKi8KPj4+ICt2b2lkIGludGVsX3ZndF9kZWJhbGxvb24odm9pZCkKPj4+ICt7Cj4+ PiArICAgIGludCBpOwo+Pj4gKwo+Pj4gKyAgICBEUk1fSU5GTygiVkdUIGRlYmFsbG9vbi5cbiIp Owo+Pgo+PiBXb3VsZCBkZWJ1ZyBiZSBtb3JlIGFwcHJvcHJpYXRlPyBJIGRvbid0IHNlZSBtdWNo IHZhbHVlIG9mIHNheWluZyB0aGlzCj4+IG9uIGRyaXZlciB1bmxvYWQgLSBpdCdzIG5vdCB0aGF0 IGl0IGlzIG9wdGlvbmFsIGF0IHRoaXMgcG9pbnQuCj4gT0suIDopCj4+Cj4+IEFsc28gZm9yIGFs bCBsb2dnaW5nLCBpcyBpbnRlbmRlZCBodW1hbiByZWFkYWJsZSBuYW1lIFZHVCBvciB2R1Q/IElm IHRoZQo+PiBsYXR0ZXIgaXQgd291bGQgYmUgbmljZXIgdG8gbG9nIGl0IGluIHRoYXQgZm9ybS4K PiBXZWxsLCBJIHByZWZlciBWR1QuIDopCgpTbyBpdCdzIHZHUFUgYW5kIFZHVC4uIE9LLi4uIDop IChhbmQgR1ZULWQpIDopCgo+Pj4gKwo+Pj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7 Cj4+PiArICAgICAgICBpZiAoYmxfaW5mby5zcGFjZVtpXS5hbGxvY2F0ZWQpCj4+PiArICAgICAg ICAgICAgZHJtX21tX3JlbW92ZV9ub2RlKCZibF9pbmZvLnNwYWNlW2ldKTsKPj4+ICsgICAgfQo+ Pj4gKwo+Pj4gKyAgICBtZW1zZXQoJmJsX2luZm8sIDAsIHNpemVvZihibF9pbmZvKSk7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdmd0X2JhbGxvb25fc3BhY2Uoc3RydWN0IGRybV9tbSAq bW0sCj4+PiArICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4+PiAr ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkK Pj4+ICt7Cj4+PiArICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGVuZCAtIHN0YXJ0Owo+Pj4gKwo+ Pj4gKyAgICBpZiAoc3RhcnQgPT0gZW5kKQo+Pj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ PiArCj4+PiArICAgIERSTV9JTkZPKCJiYWxsb29uIHNwYWNlOiByYW5nZSBbIDB4JWx4IC0gMHgl bHggXSAlbHUgS0IuXG4iLAo+Pj4gKyAgICAgICAgIHN0YXJ0LCBlbmQsIHNpemUgLyAxMDI0KTsK Pj4KPj4gS2lCID8KPiBZZXMuIFRoYW5rcy4gOikKPj4KPj4+ICsgICAgbm9kZS0+c3RhcnQgPSBz dGFydDsKPj4+ICsgICAgbm9kZS0+c2l6ZSA9IHNpemU7Cj4+PiArCj4+PiArICAgIHJldHVybiBk cm1fbW1fcmVzZXJ2ZV9ub2RlKG1tLCBub2RlKTsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+PiAr ICogaW50ZWxfdmd0X2JhbGxvb24gLSBiYWxsb29uIG91dCByZXNlcnZlZCBncmFwaGljcyBhZGRy ZXNzIHRydW5rcwo+Pj4gKyAqIEBkZXY6IGRybSBkZXZpY2UKPj4+ICsgKgo+Pj4gKyAqIFRoaXMg ZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwgdG8gYmFsbG9v bgo+Pj4gb3V0IHRoZQo+Pj4gKyAqIGdyYXBoaWMgYWRkcmVzcyBzcGFjZSBhbGxvY2F0ZWQgdG8g b3RoZXIgVk1zLCBieSBtYXJraW5nIHRoZXNlCj4+PiBzcGFjZXMgYXMKPj4+ICsgKiByZXNlcnZl ZC4KPj4+ICsgKgo+Pj4gKyAqIFRoZSBiYWxsb29uaW5nIHJlbGF0ZWQga25vd2xlZGdlcyhzdGFy dGluZyBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZQo+Pj4gbG93L2hpZ2gKPj4KPj4gcy9rbm93bGVk Z2VzXCgva25vd2xlZGdlIC8KPiBHb3QgaXQuCj4+Cj4+PiArICogZ3JhcGhpYyBtZW1vcnkpIGFy ZSBkZXBpY3RlZCBpbiB0aGUgdmd0X2lmIHN0cnVjdHVyZSBpbiBhIHJlc2VydmVkCj4+PiBNTUlP Cj4+PiArICogcmFuZ2UuCj4+PiArICoKPj4+ICsgKiBSZXR1cm5zOgo+Pj4gKyAqIHplcm8gb24g c3VjY2Vzcywgbm9uLXplcm8gaWYgY29uZmlndXJhdGlvbiBpbnZhbGlkIG9yIGJhbGxvb25pbmcK Pj4+IGZhaWxlZAo+Pj4gKyAqLwo+Pj4gK2ludCBpbnRlbF92Z3RfYmFsbG9vbihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwo+Pj4gKyAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICpnZ3R0X3ZtID0gJmRldl9wcml2LT5ndHQuYmFzZTsKPj4+ICsgICAgdW5zaWduZWQgbG9uZyBn Z3R0X3ZtX2VuZCA9IGdndHRfdm0tPnN0YXJ0ICsgZ2d0dF92bS0+dG90YWw7Cj4+PiArCj4+PiAr ICAgIHVuc2lnbmVkIGxvbmcgbG93X2dtX2Jhc2UsIGxvd19nbV9zaXplLCBsb3dfZ21fZW5kOwo+ Pj4gKyAgICB1bnNpZ25lZCBsb25nIGhpZ2hfZ21fYmFzZSwgaGlnaF9nbV9zaXplLCBoaWdoX2dt X2VuZDsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgbG93X2dtX2Jhc2UgPSBJOTE1 X1JFQUQodmd0aWZfcmVnKGF2YWlsX3JzLmxvd19nbWFkci5teV9iYXNlKSk7Cj4+PiArICAgIGxv d19nbV9zaXplID0gSTkxNV9SRUFEKHZndGlmX3JlZyhhdmFpbF9ycy5sb3dfZ21hZHIubXlfc2l6 ZSkpOwo+Pj4gKyAgICBoaWdoX2dtX2Jhc2UgPSBJOTE1X1JFQUQodmd0aWZfcmVnKGF2YWlsX3Jz LmhpZ2hfZ21hZHIubXlfYmFzZSkpOwo+Pj4gKyAgICBoaWdoX2dtX3NpemUgPSBJOTE1X1JFQUQo dmd0aWZfcmVnKGF2YWlsX3JzLmhpZ2hfZ21hZHIubXlfc2l6ZSkpOwo+Pgo+PiBHZXQgcmlkIG9m IG15XyBwcmVmaXggPwo+IE9LLiBXaWxsIGRvLiA6KQo+Pgo+Pj4gKwo+Pj4gKyAgICBsb3dfZ21f ZW5kID0gbG93X2dtX2Jhc2UgKyBsb3dfZ21fc2l6ZTsKPj4+ICsgICAgaGlnaF9nbV9lbmQgPSBo aWdoX2dtX2Jhc2UgKyBoaWdoX2dtX3NpemU7Cj4+PiArCj4+PiArICAgIERSTV9JTkZPKCJWR1Qg YmFsbG9vbmluZyBjb25maWd1cmF0aW9uOlxuIik7Cj4+PiArICAgIERSTV9JTkZPKCJMb3cgZ3Jh cGhpYyBtZW1vcnk6IGJhc2UgMHglbHggc2l6ZSAlbGRLQlxuIiwKPj4+ICsgICAgICAgICBsb3df Z21fYmFzZSwgbG93X2dtX3NpemUgLyAxMDI0KTsKPj4+ICsgICAgRFJNX0lORk8oIkhpZ2ggZ3Jh cGhpYyBtZW1vcnk6IGJhc2UgMHglbHggc2l6ZSAlbGRLQlxuIiwKPj4+ICsgICAgICAgICBoaWdo X2dtX2Jhc2UsIGhpZ2hfZ21fc2l6ZSAvIDEwMjQpOwo+Pj4gKwo+Pj4gKyAgICBpZiAobG93X2dt X2Jhc2UgPCBnZ3R0X3ZtLT5zdGFydAo+Pj4gKyAgICAgICAgfHwgbG93X2dtX2VuZCA+IGRldl9w cml2LT5ndHQubWFwcGFibGVfZW5kCj4+PiArICAgICAgICB8fCBoaWdoX2dtX2Jhc2UgPCBkZXZf cHJpdi0+Z3R0Lm1hcHBhYmxlX2VuZAo+Pj4gKyAgICAgICAgfHwgaGlnaF9nbV9lbmQgPiBnZ3R0 X3ZtX2VuZCkgewo+Pj4gKyAgICAgICAgRFJNX0VSUk9SKCJJbnZhbGlkIGJhbGxvb25pbmcgY29u ZmlndXJhdGlvbiFcbiIpOwo+Pj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArICAgIH0K Pj4+ICsKPj4+ICsgICAgbWVtc2V0KCZibF9pbmZvLCAwLCBzaXplb2YoYmxfaW5mbykpOwo+Pgo+ PiBJZiBibF9pbmZvIGlzIHN0YXRpYyB0aGVuIHlvdSBkb24ndCBuZWVkIHRoaXMgbWVtc2V0Pwo+ IE9oLCB5ZXMuIDopCj4+Cj4+PiArICAgIC8qIEhpZ2ggZ3JhcGhpYyBtZW1vcnkgYmFsbG9vbmlu ZyAqLwo+Pj4gKyAgICBpZiAoaGlnaF9nbV9iYXNlID4gZGV2X3ByaXYtPmd0dC5tYXBwYWJsZV9l bmQpIHsKPj4+ICsgICAgICAgIHJldCA9IHZndF9iYWxsb29uX3NwYWNlKCZnZ3R0X3ZtLT5tbSwK Pj4+ICsgICAgICAgICAgICAgICAgICAgICZibF9pbmZvLnNwYWNlWzJdLAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgZGV2X3ByaXYtPmd0dC5tYXBwYWJsZV9lbmQsCj4+PiArICAgICAgICAgICAg ICAgICAgICBoaWdoX2dtX2Jhc2UpOwo+Pj4gKwo+Pj4gKyAgICAgICAgaWYgKHJldCkKPj4+ICsg ICAgICAgICAgICBnb3RvIGVycjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAvKgo+Pj4gKyAg ICAgKiBObyBuZWVkIHRvIHBhcnRpdGlvbiBvdXQgdGhlIGxhc3QgcGh5c2ljYWwgcGFnZSwKPj4+ ICsgICAgICogYmVjYXVzZSBpdCBpcyByZXNlcnZlZCB0byB0aGUgZ3VhcmQgcGFnZS4KPj4+ICsg ICAgICovCj4+PiArICAgIGlmIChoaWdoX2dtX2VuZCA8IGdndHRfdm1fZW5kIC0gUEFHRV9TSVpF KSB7Cj4+PiArICAgICAgICByZXQgPSB2Z3RfYmFsbG9vbl9zcGFjZSgmZ2d0dF92bS0+bW0sCj4+ PiArICAgICAgICAgICAgICAgICAgICAmYmxfaW5mby5zcGFjZVszXSwKPj4+ICsgICAgICAgICAg ICAgICAgICAgIGhpZ2hfZ21fZW5kLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgZ2d0dF92bV9l bmQgLSBQQUdFX1NJWkUpOwo+Pj4gKyAgICAgICAgaWYgKHJldCkKPj4+ICsgICAgICAgICAgICBn b3RvIGVycjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAvKiBMb3cgZ3JhcGhpYyBtZW1vcnkg YmFsbG9vbmluZyAqLwo+Pj4gKyAgICBpZiAobG93X2dtX2Jhc2UgPiBnZ3R0X3ZtLT5zdGFydCkg ewo+Pj4gKyAgICAgICAgcmV0ID0gdmd0X2JhbGxvb25fc3BhY2UoJmdndHRfdm0tPm1tLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgJmJsX2luZm8uc3BhY2VbMF0sCj4+PiArICAgICAgICAgICAg ICAgICAgICBnZ3R0X3ZtLT5zdGFydCwgbG93X2dtX2Jhc2UpOwo+Pj4gKwo+Pj4gKyAgICAgICAg aWYgKHJldCkKPj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4g KyAgICBpZiAobG93X2dtX2VuZCA8IGRldl9wcml2LT5ndHQubWFwcGFibGVfZW5kKSB7Cj4+PiAr ICAgICAgICByZXQgPSB2Z3RfYmFsbG9vbl9zcGFjZSgmZ2d0dF92bS0+bW0sCj4+PiArICAgICAg ICAgICAgICAgICAgICAmYmxfaW5mby5zcGFjZVsxXSwKPj4+ICsgICAgICAgICAgICAgICAgICAg IGxvd19nbV9lbmQsCj4+PiArICAgICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+Z3R0Lm1hcHBh YmxlX2VuZCk7Cj4+PiArCj4+PiArICAgICAgICBpZiAocmV0KQo+Pj4gKyAgICAgICAgICAgIGdv dG8gZXJyOwo+Pj4gKyAgICB9Cj4+Cj4+IE9rYXksIEkndmUgZmlndXJlZCBpdCBvdXQuIDopIEkg c3VwcG9zZSBnb2luZyBiYWNrIHRvIHBhdGNoIDEsIHdoZXJlIGl0Cj4+IHNheXMgIkVhY2ggVk0g Y2FuIG9ubHkgaGF2ZSBvbmUgcG9ydGlvbiBvZiBjb250aW51b3VzIGFyZWEgZm9yIG5vdyIsCj4+ IHdpdGggdGhlIGVtcGhhc2lzIG9uIF9vbmVfLiBUaGF0IHRocmV3IG1lIG9mZiB0aGlua2luZyB5 b3UgaGF2ZSB0d28KPj4gImJhbGxvb25zIiBtZWFuaW5nIGZvcmJpZGRlbiBhcmVhcy4gQW5kIHRo ZW4gd2l0aCBsb3cgYW5kIGhpZ2ggbmFtaW5nIEkKPj4gZ290IHRoZSB3cm9uZyBpZGVhIHRoYXQg b25lIGJhbGxvb24gbWFya3MgdGhlIGJvdHRvbSBpbmFjY2Vzc2libGUgcGFydCwKPj4gYW5kIHRo ZSBvdGhlciB0b3AuIEkgZGlkbid0IGZpZ3VyZSBvdXQgdGhlIHdob2xlIGxvdyA9PSBtYXBwYWJs ZSwgaGlnaAo+PiA9PSBub24tbWFwcGFibGUgc3BsaXQuIEkgc3VwcG9zZSBpdCB3YXMgbXkgaW5l eHBlcmllbmNlLCBidXQgaWYgeW91IGNhbgo+PiB0aGluayBvZiBhIHdheSBvbiBob3cgdG8gaW1w cm92ZSB0aGUgY29tbWVudCwgZXZlbiBBU0NJSSBhcnQgd291bGQgYmUKPj4gdmVyeSBuaWNlIGlm IHBvc3NpYmxlLgo+IEhhaC4gR3Vlc3MgSSBuZWVkIGEgYmV0dGVyIGNvbW1lbnRzIGFib3ZlLiBM ZXQgbWUgdGhpbmsgaG93IHRvCj4gb3JnYW5pemUuICA6KQoKQ29vbCB0aGFua3MhCgo+PiBBY3R1 YWxseSBiYWxsb29uaW5nIGluIHRoZSBmaXJzdCBwbGFjZSBjb25mdXNlcyBtZSBiZWNhdXNlIEkg dGhvdWdodAo+PiBwcmlvciB1c2UgZm9yIHRoYXQgaW4gdmlydHVhbGlzYXRpb24gd2FzIGZvciBt ZW1vcnkgd2hpY2ggY2FuIHNocmluayBhbmQKPj4gZ3JvdyBhdCBydW50aW1lLiBEaWQgSSBnZXQg dGhhdCB3cm9uZz8KPj4KPiBXZWxsLCBmb3IgbWVtb3J5IHZpcnR1YWxpemF0aW9uLCB0aGUgd29y ZCAnYmFsbG9vbmluZycgZG9lcyBtZWFuIHRoaXMgLQo+IGl0IGNhbiBzaHJpbmsgYW5kIGdyb3cu Cj4gWWV0IGZvciBvdXIgSW50ZWwgR1ZULWcsIHRoZSAnYmFsbG9vbmluZycgaXMgdXNlZCwgdG8g ZW1waGFzaXMgdGhhdCB3ZQo+IGFyZSBub3QganVzdCBwYXJ0aXRpb25pbmcgdGhlIEdNIHNwYWNl IHRvIGVhY2ggdmdwdSwgdGhlIHZncHUgY2FuIGFsc28KPiBwZXJjZWl2ZSBpdHMgR00gYWRkcmVz cyBzcGFjZSBhcyBzdGFydGluZyBmcm9tIHplcm8oYWx0aG91Z2ggdGhlIHVzYWJsZQo+IEdNIHNw YWNlcyBtYXkgcHJvYmFibHkgbm90KS4KPiBCeSBub3csIHdlIGRvIG5vdCBncm93L3Nocmluay4g OikKClVubGVzcyB0aGVyZSBhcmUgcGxhbiB0byBtYWtlIGl0IGdyb3cgYW5kIHNocmluayBpdCBz ZWVtcyB0aGF0IHdlIGFncmVlIAppdCBpcyBjb25mdXNpbmcuIEJ1dCBJIHN1cHBvc2UgaXQgaXMg dG9vIGxhdGUgdG8gY2hhbmdlIHRoZSB0ZXJtIG5vdz8KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK