From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagar Arun Kamble Subject: Re: [PATCH igt] igt: Add gem_ctx_freq to exercise requesting freq on a ctx Date: Tue, 13 Mar 2018 18:08:04 +0530 Message-ID: References: <20180308171335.31595-1-chris@chris-wilson.co.uk> <20180309213502.31509-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA60B89C89 for ; Tue, 13 Mar 2018 12:38:08 +0000 (UTC) In-Reply-To: <20180309213502.31509-1-chris@chris-wilson.co.uk> Content-Language: en-US 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 Cc: Praveen Paneri List-Id: intel-gfx@lists.freedesktop.org CgpPbiAzLzEwLzIwMTggMzowNSBBTSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IEV4ZXJjaXNlIHNv bWUgbmV3IEFQSSB0aGF0IGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcmVxdWVzdCB0aGF0Cj4gaW5k aXZpZHVhbCBjb250ZXh0cyBhcmUgZXhlY3V0ZWQgd2l0aGluIGEgZGVzaXJlZCBmcmVxdWVuY3kg cmFuZ2UuCj4KPiB2MjogU3BsaXQgc2luZ2xlL2NvbnRpbnVvdXMgc2V0X2ZyZXEgc3VidGVzdHMK PiB2MzogRG8gYW4gdXAvZG93biByYW1wIGZvciBpbmRpdmlkdWFsIGZyZXEgcmVxdWVzdCwgY2hl Y2sgbm90aGluZwo+IGNoYW5nZXMgYWZ0ZXIgZWFjaCBpbnZhbGlkIHJlcXVlc3QKPiB2NDogQ2hl Y2sgdGhlIGZyZXF1ZW5jaWVzIHJlcG9ydGVkIGJ5IHRoZSBrZXJuZWwgYWNyb3NzIHRoZSBlbnRp cmUKPiByYW5nZS4KPiB2NTogUmV3cml0ZSBzYW5kd2ljaCB0byBjcmVhdGUgYSBzYW5kd2ljaCBi ZXR3ZWVuIG11bHRpcGxlIGNvbmN1cnJlbnQKPiBlbmdpbmVzLgo+Cj4gU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFByYXZlZW4gUGFu ZXJpIDxwcmF2ZWVuLnBhbmVyaUBpbnRlbC5jb20+Cj4gQ2M6IFNhZ2FyIEEgS2FtYmxlIDxzYWdh ci5hLmthbWJsZUBpbnRlbC5jb20+Cj4gQ2M6IEFudG9uaW8gQXJnZW56aWFubyA8YW50b25pby5h cmdlbnppYW5vQGludGVsLmNvbT4KPHNuaXA+Cj4gK3N0YXRpYyB2b2lkIHNpbmdsZShpbnQgZmQs IGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lICplKQo+ICt7Cj4gKyNkZWZpbmUg Tl9TVEVQUyAxMAo+ICsJY29uc3QgdW5zaWduZWQgaW50IGVuZ2luZSA9IGUtPmV4ZWNfaWQgfCBl LT5mbGFnczsKPiArCXVpbnQzMl90IGN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7Cj4gKwl1 aW50MzJfdCBtaW4sIG1heDsKPiArCWRvdWJsZSBtZWFzdXJlZDsKPiArCWlndF9zcGluX3QgKnNw aW47Cj4gKwlpbnQgcG11Owo+ICsKPiArCWdldF9mcmVxKGZkLCBjdHgsICZtaW4sICZtYXgpOwo+ ICsJaWd0X2luZm8oIk1pbiBmcmVxOiAlZE1IejsgTWF4IGZyZXE6ICVkTUh6XG4iLCBtaW4sIG1h eCk7Cj4gKwo+ICsJcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFV RU5DWSk7Cj4gKwlpZ3RfcmVxdWlyZShwbXUgPj0gMCk7ClRoaXMgaWd0X3JlcXVpcmUgY2FuIGdv IHRvIGlndF9maXh0dXJlIGJlbG93Lgo+ICsKPiArCWZvciAoaW50IHN0ZXAgPSAwOyBzdGVwIDw9 IDIqTl9TVEVQUzsgc3RlcCsrKSB7Cj4gKwkJaW50IGZyYWMgPSBzdGVwID4gTl9TVEVQUyA/IDIq Tl9TVEVQUyAtIHN0ZXAgOiBzdGVwOwo+ICsJCXVpbnQzMl90IGZyZXEgPSBtaW4gKyAobWF4IC0g bWluKSAqIGZyYWMgLyBOX1NURVBTOwo+ICsJCXVpbnQzMl90IGN1ciwgZGlzY2FyZDsKPiArCj4g KwkJc2V0X2ZyZXEoZmQsIGN0eCwgZnJlcSwgZnJlcSk7Cj4gKwkJZ2V0X2ZyZXEoZmQsIGN0eCwg JmN1ciwgJmRpc2NhcmQpOwo+ICsKPiArCQlnZW1fcXVpZXNjZW50X2dwdShmZCk7Cj4gKwkJc3Bp biA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVuZ2luZSwgMCk7Cj4gKwkJdXNsZWVw KDEwMDAwKTsKPiArCj4gKwkJbWVhc3VyZWQgPSBtZWFzdXJlX2ZyZXF1ZW5jeShwbXUsIFNBTVBM RV9QRVJJT0QpOwo+ICsJCWlndF9kZWJ1Z2ZzX2R1bXAoZmQsICJpOTE1X3Jwc19ib29zdF9pbmZv Iik7Cj4gKwo+ICsJCWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOwo+ICsJCWlndF9pbmZv KCIlcyhzaW5nbGUpOiBNZWFzdXJlZCAlLjFmTUh6LCBleHBlY3RlZCAlZE1oelxuIiwKPiArCQkJ IGUtPm5hbWUsIG1lYXN1cmVkLCBjdXIpOwo+ICsJCWlndF9hc3NlcnQobWVhc3VyZWQgPiBjdXIg LSAxMDAgJiYgbWVhc3VyZWQgPCBjdXIgKyAxMDApOwpJcyB0aGlzIG1hcmdpbiBvZiAxMDBNaHog Zm9yIFBNVSBhY2N1cmFjeT8KPiArCX0KPiArCWdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPiArCj4g KwljbG9zZShwbXUpOwo+ICsJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKPiArCj4gKyN1 bmRlZiBOX1NURVBTCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvbnRpbnVvdXMoaW50IGZkLCBj b25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZSkKPiArewo+ICsjZGVmaW5lIE5f U1RFUFMgMTAKPiArCWNvbnN0IHVuc2lnbmVkIGludCBlbmdpbmUgPSBlLT5leGVjX2lkIHwgZS0+ ZmxhZ3M7Cj4gKwl1aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ICsJdWlu dDMyX3QgbWluLCBtYXg7Cj4gKwlkb3VibGUgbWVhc3VyZWQ7Cj4gKwlpZ3Rfc3Bpbl90ICpzcGlu Owo+ICsJaW50IHBtdTsKPiArCj4gKwlnZXRfZnJlcShmZCwgY3R4LCAmbWluLCAmbWF4KTsKPiAr CWlndF9pbmZvKCJNaW4gZnJlcTogJWRNSHo7IE1heCBmcmVxOiAlZE1IelxuIiwgbWluLCBtYXgp Owo+ICsKPiArCXBtdSA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVO Q1kpOwo+ICsJaWd0X3JlcXVpcmUocG11ID49IDApOwo+ICsKPiArCWdlbV9xdWllc2NlbnRfZ3B1 KGZkKTsKPiArCXNwaW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUsIDAp Owo+ICsJZm9yIChpbnQgc3RlcCA9IDA7IHN0ZXAgPD0gMipOX1NURVBTOyBzdGVwKyspIHsKPiAr CQlpbnQgZnJhYyA9IHN0ZXAgPiBOX1NURVBTID8gMipOX1NURVBTIC0gc3RlcCA6IHN0ZXA7Cj4g KwkJdWludDMyX3QgZnJlcSA9IG1pbiArIChtYXggLSBtaW4pICogZnJhYyAvIE5fU1RFUFM7Cj4g KwkJdWludDMyX3QgY3VyLCBkaXNjYXJkOwo+ICsJCWlndF9zcGluX3QgKmtpY2s7Cj4gKwo+ICsJ CXNldF9mcmVxKGZkLCBjdHgsIGZyZXEsIGZyZXEpOwo+ICsJCWdldF9mcmVxKGZkLCBjdHgsICZj dXIsICZkaXNjYXJkKTsKPiArCj4gKwkJLyoKPiArCQkgKiBXaGVuIHJlcXVlc3RpbmcgYSBuZXcg ZnJlcXVlbmN5IG9uIHRoZSBjdXJyZW50bHkKPiArCQkgKiBleGVjdXRpbmcgY29udGV4dCwgaXQg ZG9lcyBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlCj4gKwkJICogbmV4dCBjb250ZXh0IHN3aXRj aC4gSW4gdGhpcyBjYXNlLCB3ZSB0cmlnZ2VyIGEgbGl0ZQo+ICsJCSAqIHJlc3RvcmUuCj4gKwkJ ICovCj4gKwkJa2ljayA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVuZ2luZSwgMCk7 Cj4gKwkJaWd0X3NwaW5fYmF0Y2hfZnJlZShmZCwgc3Bpbik7Cj4gKwkJc3BpbiA9IGtpY2s7Cj4g Kwo+ICsJCXVzbGVlcCgxMDAwMCk7Cj4gKwo+ICsJCW1lYXN1cmVkID0gbWVhc3VyZV9mcmVxdWVu Y3kocG11LCBTQU1QTEVfUEVSSU9EKTsKPiArCQlpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9y cHNfYm9vc3RfaW5mbyIpOwo+ICsKPiArCQlpZ3RfaW5mbygiJXMoY29udGludW91cyk6IE1lYXN1 cmVkICUuMWZNSHosIGV4cGVjdGVkICVkTWh6XG4iLAo+ICsJCQkgZS0+bmFtZSwgbWVhc3VyZWQs IGN1cik7Cj4gKwkJaWd0X2Fzc2VydChtZWFzdXJlZCA+IGN1ciAtIDEwMCAmJiBtZWFzdXJlZCA8 IGN1ciArIDEwMCk7Cj4gKwl9Cj4gKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKPiAr CWdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPiArCj4gKwljbG9zZShwbXUpOwo+ICsJZ2VtX2NvbnRl eHRfZGVzdHJveShmZCwgY3R4KTsKPiArI3VuZGVmIE5fU1RFUFMKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgaW5mbGlnaHQoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZSAqZSkKPiArewo+ICsJY29uc3QgdW5zaWduZWQgaW50IGVuZ2luZSA9IGUtPmV4ZWNfaWQgfCBl LT5mbGFnczsKPiArCXVpbnQzMl90IGN0eCwgbWluLCBtYXgsIGZyZXEsIGRpc2NhcmQ7Cj4gKwlk b3VibGUgbWVhc3VyZWQ7Cj4gKwlpZ3Rfc3Bpbl90ICpwbHVnLCAqd29ya1syXTsKPiArCWludCBw bXU7Cj4gKwo+ICsJcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFV RU5DWSk7Cj4gKwlpZ3RfcmVxdWlyZShwbXUgPj0gMCk7Cj4gKwo+ICsJY3R4ID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGZkKTsKPiArCWdldF9mcmVxKGZkLCBjdHgsICZtaW4sICZtYXgpOwo+ICsJc2V0 X2ZyZXEoZmQsIGN0eCwgbWluLCBtaW4pOwo+ICsKPiArCWlndF9pbmZvKCJNaW4gZnJlcTogJWRN SHo7IE1heCBmcmVxOiAlZE1IelxuIiwgbWluLCBtYXgpOwo+ICsKPiArCWdlbV9xdWllc2NlbnRf Z3B1KGZkKTsKPiArCXBsdWcgPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCAw KTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cj4gKwlmb3IgKGludCBuID0gMDsg biA8IDE2OyBuKyspIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmog PSB7Cj4gKwkJCS5oYW5kbGUgPSBwbHVnLT5oYW5kbGUsCj4gKwkJfTsKPiArCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+ICsJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiAr CQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAo+ICsJCQkuZmxhZ3MgPSBl bmdpbmUsCj4gKwkJCS5yc3ZkMSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCj4gKwkJfTsKPiAr CQlzZXRfZnJlcShmZCwgZWIucnN2ZDEsIG1pbiwgbWluKTsKPiArCQlnZW1fZXhlY2J1ZihmZCwg JmViKTsKPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBlYi5yc3ZkMSk7Cj4gKwl9Cj4gKwlt ZWFzdXJlZCA9IG1lYXN1cmVfZnJlcXVlbmN5KHBtdSwgU0FNUExFX1BFUklPRCk7Cj4gKwlpZ3Rf ZGVidWdmc19kdW1wKGZkLCAiaTkxNV9ycHNfYm9vc3RfaW5mbyIpOwo+ICsJaWd0X2luZm8oIiVz KHBsdWcpOiBNZWFzdXJlZCAlLjFmTUh6LCBleHBlY3RlZCAlZE1oelxuIiwKPiArCQkgZS0+bmFt ZSwgbWVhc3VyZWQsIG1pbik7Cj4gKwlpZ3RfYXNzZXJ0KG1lYXN1cmVkID4gbWluIC0gMTAwICYm IG1lYXN1cmVkIDwgbWluICsgMTAwKTsKPiArCj4gKwljdHggPSBnZW1fY29udGV4dF9jcmVhdGUo ZmQpOwo+ICsJc2V0X2ZyZXEoZmQsIGN0eCwgbWF4LCBtYXgpOwp0aGlzIHNldF9mcmVxIGNhbiBi ZSByZW1vdmVkLgo+ICsJd29ya1swXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVu Z2luZSwgMCk7Cj4gKwo+ICsJLyogd29yayBpcyBub3cgcXVldWVkIGJ1dCBub3QgZXhlY3V0aW5n ICovCj4gKwlmcmVxID0gKG1heCArIG1pbikgLyAyOwo+ICsJc2V0X2ZyZXEoZmQsIGN0eCwgZnJl cSwgZnJlcSk7Cj4gKwlnZXRfZnJlcShmZCwgY3R4LCAmZnJlcSwgJmRpc2NhcmQpOwo+ICsJZ2Vt X2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKPiArCj4gKwljdHggPSBnZW1fY29udGV4dF9jcmVh dGUoZmQpOwo+ICsJc2V0X2ZyZXEoZmQsIGN0eCwgbWF4LCBtYXgpOwo+ICsJd29ya1sxXSA9IF9f aWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVuZ2luZSwgMCk7Cj4gKwlnZW1fY29udGV4dF9k ZXN0cm95KGZkLCBjdHgpOwo+ICsKPiArCWlndF9zcGluX2JhdGNoX2VuZChwbHVnKTsKPiArCWRv Cj4gKwkJdXNsZWVwKDEwMDAwKTsKPiArCXdoaWxlIChnZW1fYm9fYnVzeShmZCwgcGx1Zy0+aGFu ZGxlKSk7Cj4gKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBwbHVnKTsKPiArCj4gKwkvKiBOb3cg d29yayB3aWxsIGV4ZWN1dGUgKi8KPiArCW1lYXN1cmVkID0gbWVhc3VyZV9mcmVxdWVuY3kocG11 LCBTQU1QTEVfUEVSSU9EKTsKPiArCWlndF9kZWJ1Z2ZzX2R1bXAoZmQsICJpOTE1X2VuZ2luZV9p bmZvIik7Cj4gKwlpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9ycHNfYm9vc3RfaW5mbyIpOwo+ ICsJaWd0X2luZm8oIiVzKHdvcmswKTogTWVhc3VyZWQgJS4xZk1IeiwgZXhwZWN0ZWQgJWRNaHpc biIsCj4gKwkJIGUtPm5hbWUsIG1lYXN1cmVkLCBmcmVxKTsKPiArCWlndF9hc3NlcnQobWVhc3Vy ZWQgPiBmcmVxIC0gMTAwICYmIG1lYXN1cmVkIDwgZnJlcSArIDEwMCk7Cj4gKwo+ICsJaWd0X3Nw aW5fYmF0Y2hfZW5kKHdvcmtbMF0pOwo+ICsJZG8KPiArCQl1c2xlZXAoMTAwMDApOwo+ICsJd2hp bGUgKGdlbV9ib19idXN5KGZkLCB3b3JrWzBdLT5oYW5kbGUpKTsKPiArCWlndF9zcGluX2JhdGNo X2ZyZWUoZmQsIHdvcmtbMF0pOwo+ICsKPiArCW1lYXN1cmVkID0gbWVhc3VyZV9mcmVxdWVuY3ko cG11LCBTQU1QTEVfUEVSSU9EKTsKPiArCWlndF9kZWJ1Z2ZzX2R1bXAoZmQsICJpOTE1X2VuZ2lu ZV9pbmZvIik7Cj4gKwlpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9ycHNfYm9vc3RfaW5mbyIp Owo+ICsJaWd0X2luZm8oIiVzKHdvcmsxKTogTWVhc3VyZWQgJS4xZk1IeiwgZXhwZWN0ZWQgJWRN aHpcbiIsCj4gKwkJIGUtPm5hbWUsIG1lYXN1cmVkLCBtYXgpOwo+ICsJaWd0X2Fzc2VydChtZWFz dXJlZCA+IG1heCAtIDEwMCAmJiBtZWFzdXJlZCA8IG1heCArIDEwMCk7Cj4gKwo+ICsJaWd0X3Nw aW5fYmF0Y2hfZnJlZShmZCwgd29ya1sxXSk7Cj4gKwljbG9zZShwbXUpOwo+ICsJZ2VtX3F1aWVz Y2VudF9ncHUoZmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzYW5kd2ljaF9lbmdpbmUoaW50 IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5lLCBpbnQgdGltZW91dCkKPiArewo+ICsJdWludDMyX3Qg Y3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKPiArCXVpbnQzMl90IG1pbiwgbWF4Owo+ICsJ aW50IHBtdTsKPiArCj4gKwlwbXUgPSBwZXJmX2k5MTVfb3BlbihJOTE1X1BNVV9SRVFVRVNURURf RlJFUVVFTkNZKTsKPiArCWlndF9yZXF1aXJlKHBtdSA+PSAwKTsKPiArCj4gKwlnZXRfZnJlcShm ZCwgY3R4LCAmbWluLCAmbWF4KTsKPiArCj4gKwlpZ3RfdW50aWxfdGltZW91dCh0aW1lb3V0KSB7 Cj4gKwkJdWludDMyX3QgcmFuZ2VbMl07Cj4gKwkJaWd0X3NwaW5fdCAqc3BpbjsKPiArCQlkb3Vi bGUgbWVhc3VyZWQ7Cj4gKwo+ICsJCS8qIG1ha2Ugc3VyZSB3ZSBrZWVwIGFuIG92ZXJsYXAgYmV0 d2VlbiBhbGwgZW5naW5lcyAqLwo+ICsJCXJhbmdlWzBdID0gbWluICsgKHJhbmQoKSAlIChtYXgg LSBtaW4pIC8gMik7Cj4gKwkJcmFuZ2VbMV0gPSBtYXggLSAocmFuZCgpICUgKG1heCAtIG1pbikg LyAyKTsKPiArCj4gKwkJc2V0X2ZyZXEoZmQsIGN0eCwgcmFuZ2VbMF0sIHJhbmdlWzFdKTsKPiAr CQlnZXRfZnJlcShmZCwgY3R4LCAmcmFuZ2VbMF0sICZyYW5nZVsxXSk7Cj4gKwo+ICsJCXNwaW4g PSBfX2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUsIDApOwo+ICsKPiArCQl1c2xl ZXAoMTAwMDApOwo+ICsJCW1lYXN1cmVkID0gbWVhc3VyZV9mcmVxdWVuY3kocG11LCBTQU1QTEVf UEVSSU9EKTsKPiArCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKPiArCj4gKwkJaWd0 X2Fzc2VydChtZWFzdXJlZCA+PSByYW5nZVswXSAtIDEwMCAmJgo+ICsJCQkgICBtZWFzdXJlZCA8 PSByYW5nZVsxXSArIDEwMCk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwg Y3R4KTsKPiArCWNsb3NlKHBtdSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNhbmR3aWNoKGlu dCBmZCwgaW50IHRpbWVvdXQpCj4gK3sKPiArCXVuc2lnbmVkIGludCBlbmdpbmU7Cj4gKwo+ICsJ Zm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlbmdpbmUpIHsKPiArCQlpZ3RfZm9yayhjaGls ZCwgMSkKPiArCQkJc2FuZHdpY2hfZW5naW5lKGZkLCBlbmdpbmUsIHRpbWVvdXQpOwo+ICsJfQo+ ICsKPiArCWlndF93YWl0Y2hpbGRyZW4oKTsKPiArCWdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgcHdtKGludCBmZCwgdW5zaWduZWQgaW50ICplbmdpbmVzLCB1 bnNpZ25lZCBpbnQgbmVuZ2luZSwgaW50IGxpbmspCj4gK3sKPiArCXVpbnQzMl90IGN0eFtuZW5n aW5lXTsKPiArCj4gKwlmY250bChsaW5rLCBGX1NFVEZMLCBmY250bChmZCwgRl9HRVRGTCkgfCBP X05PTkJMT0NLKTsKPiArCj4gKwlmb3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8IG5lbmdpbmU7 IG4rKykKPiArCQljdHhbbl0gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ICsKPiArCWRvIHsK PiArCQlpZ3Rfc3Bpbl90ICpzcGluOwo+ICsJCXN0cnVjdCB7Cj4gKwkJCXVpbnQzMl90IGVuZ2lu ZTsKPiArCQkJdWludDMyX3QgbWluOwo+ICsJCQl1aW50MzJfdCBtYXg7Cj4gKwkJfSByZXE7Cj4g Kwo+ICsJCXdoaWxlIChyZWFkKGxpbmssICZyZXEsIHNpemVvZihyZXEpKSA+IDApIHsKPiArCQkJ aWYgKChyZXEuZW5naW5lIHwgcmVxLm1pbiB8IHJlcS5tYXgpID09IDApCj4gKwkJCQlnb3RvIG91 dDsKPiArCj4gKwkJCWlndF9hc3NlcnQocmVxLmVuZ2luZSA8IG5lbmdpbmUpOwo+ICsJCQlzZXRf ZnJlcShmZCwgY3R4W3JlcS5lbmdpbmVdLCByZXEubWluLCByZXEubWF4KTsKPiArCQl9Cj4gKwo+ ICsJCS8qIENyZWF0ZSBhIDIwJSBsb2FkIHVzaW5nIGJ1c3kgc3Bpbm5lcnMgKi8KPiArCQlzcGlu ID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eFswXSwgZW5naW5lc1swXSwgMCk7Cj4gKwkJ Zm9yICh1bnNpZ25lZCBpbnQgbiA9IDE7IG4gPCBuZW5naW5lOyBuKyspIHsKPiArCQkJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewo+ICsJCQkJLmhhbmRsZSA9IHNwaW4t PmhhbmRsZSwKPiArCQkJfTsKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl YiA9IHsKPiArCQkJCS5idWZmZXJfY291bnQgPSAxLAo+ICsJCQkJLmJ1ZmZlcnNfcHRyID0gdG9f dXNlcl9wb2ludGVyKCZvYmopLAo+ICsJCQkJLmZsYWdzID0gZW5naW5lc1tuXSwKPiArCQkJCS5y c3ZkMSA9IGN0eFtuXSwKPiArCQkJfTsKPiArCQkJZ2VtX2V4ZWNidWYoZmQsICZlYik7Cj4gKwkJ fQo+ICsJCXVzbGVlcCgxMDApOwo+ICsJCWlndF9zcGluX2JhdGNoX2VuZChzcGluKTsKPiArCj4g KwkJZG8KPiArCQkJdXNsZWVwKDEwKTsKPiArCQl3aGlsZSAoZ2VtX2JvX2J1c3koZmQsIHNwaW4t PmhhbmRsZSkpOwo+ICsJCWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOwo+ICsJCXVzbGVl cCg0MDApOwo+ICsJfSB3aGlsZSAoMSk7Cj4gKwo+ICtvdXQ6Cj4gKwlmb3IgKHVuc2lnbmVkIGlu dCBuID0gMDsgbiA8IG5lbmdpbmU7IG4rKykKPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBj dHhbbl0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzbW9rZXRlc3QoaW50IGZkLCBpbnQgdGlt ZW91dCkKPiArewo+ICsJdW5zaWduZWQgaW50IGVuZ2luZXNbMTZdOwo+ICsJdW5zaWduZWQgaW50 IG5lbmdpbmU7Cj4gKwl1bnNpZ25lZCBpbnQgZW5naW5lOwo+ICsJdWludDMyX3QgbWluWzE2XSwg bWF4WzE2XTsKPiArCWludCBwbXUsIGxpbmtbMl07Cj4gKwo+ICsJZ2V0X2ZyZXEoZmQsIDAsICZt aW5bMF0sICZtYXhbMF0pOwo+ICsKPiArCW5lbmdpbmUgPSAwOwo+ICsJZm9yX2VhY2hfcGh5c2lj YWxfZW5naW5lKGZkLCBlbmdpbmUpIHsKPiArCQlpZiAobmVuZ2luZSA9PSBBUlJBWV9TSVpFKGVu Z2luZXMpIC0gMSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCW1pbltuZW5naW5lXSA9IG1pblswXTsK PiArCQltYXhbbmVuZ2luZV0gPSBtYXhbMF07Cj4gKwkJZW5naW5lc1tuZW5naW5lXSA9IGVuZ2lu ZTsKPiArCQluZW5naW5lKys7Cj4gKwl9Cj4gKwlpZ3RfcmVxdWlyZShuZW5naW5lKTsKPiArCj4g KwlpZ3RfYXNzZXJ0KHBpcGUobGluaykgPT0gMCk7Cj4gKwlpZ3RfZm9yayhjaGlsZCwgMSkKPiAr CQlwd20oZmQsIGVuZ2luZXMsIG5lbmdpbmUsIGxpbmtbMF0pOwo+ICsJY2xvc2UobGlua1swXSk7 Cj4gKwo+ICsJcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5D WSk7Cj4gKwlpZ3RfcmVxdWlyZShwbXUgPj0gMCk7Cj4gKwo+ICsJaWd0X3VudGlsX3RpbWVvdXQo dGltZW91dCkgewo+ICsJCXN0cnVjdCB7Cj4gKwkJCXVpbnQzMl90IGVuZ2luZTsKPiArCQkJdWlu dDMyX3QgbWluOwo+ICsJCQl1aW50MzJfdCBtYXg7Cj4gKwkJfSByZXE7Cj4gKwkJZG91YmxlIG1l YXN1cmVkOwo+ICsJCXVpbnQzMl90IGN0eDsKPiArCj4gKwkJcmVxLmVuZ2luZSA9IHJhbmQoKSAl IG5lbmdpbmU7Cj4gKwo+ICsJCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7Cj4gKwkJZ2V0 X2ZyZXEoZmQsIGN0eCwgJnJlcS5taW4sICZyZXEubWF4KTsKPiArCQlyZXEubWluID0gcmFuZCgp ICUgKHJlcS5tYXggLSByZXEubWluKSArIHJlcS5taW47Cj4gKwkJcmVxLm1heCA9IHJhbmQoKSAl IChyZXEubWF4IC0gcmVxLm1pbikgKyByZXEubWluOwo+ICsJCXNldF9mcmVxKGZkLCBjdHgsIHJl cS5taW4sIHJlcS5tYXgpOwo+ICsJCWdldF9mcmVxKGZkLCBjdHgsICZyZXEubWluLCAmcmVxLm1h eCk7Cj4gKwo+ICsJCWlndF9kZWJ1ZygiUmVwbGFjaW5nICglZCwgJWQpIG9uIGVuZ2luZSAleCB3 aXRoICglZCwgJWQpXG4iLAo+ICsJCQkgIG1pbltyZXEuZW5naW5lXSwgbWF4W3JlcS5lbmdpbmVd LCByZXEuZW5naW5lLAo+ICsJCQkgIHJlcS5taW4sIHJlcS5tYXgpOwo+ICsJCWlndF9hc3NlcnQo d3JpdGUobGlua1sxXSwgJnJlcSwgc2l6ZW9mKHJlcSkpID09IHNpemVvZihyZXEpKTsKPiArCQln ZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHgpOwo+ICsKPiArCQltaW5bcmVxLmVuZ2luZV0gPSBy ZXEubWluOwo+ICsJCW1heFtyZXEuZW5naW5lXSA9IHJlcS5tYXg7Cj4gKwo+ICsJCWZvciAodW5z aWduZWQgaW50IG4gPSAwOyBuIDwgbmVuZ2luZTsgbisrKSB7Cj4gKwkJCWlndF9kZWJ1ZygiWyVk XTogWyVkLCAlZF1cbiIsIG4sIG1pbltuXSwgbWF4W25dKTsKPiArCQkJaWYgKG1pbltuXSA8IHJl cS5taW4pCj4gKwkJCQlyZXEubWluID0gbWluW25dOwo+ICsJCQlpZiAobWF4W25dID4gcmVxLm1h eCkKPiArCQkJCXJlcS5tYXggPSBtYXhbbl07Cj4gKwkJfQpJIHRob3VnaHQgcG9saWN5IGk5MTUg d2lsbCBiZSBpbXBsZW1lbnRpbmcgaXMgbWF4IG9mIG1pbnMgYW5kIG1pbiBvZiBtYXhlcy4KPiAr CQlpZ3RfYXNzZXJ0KHJlcS5tYXggPj0gcmVxLm1pbik7Cj4gKwo+ICsJCXVzbGVlcCg1MDAwMCk7 Cj4gKwkJbWVhc3VyZWQgPSBtZWFzdXJlX2ZyZXF1ZW5jeShwbXUsIFNBTVBMRV9QRVJJT0QpOwo+ ICsKPiArCQlpZiAobWVhc3VyZWQgPD0gcmVxLm1pbiAtIDEwMCB8fCBtZWFzdXJlZCA+PSByZXEu bWF4ICsgMTAwKQo+ICsJCQlpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9ycHNfYm9vc3RfaW5m byIpOwo+ICsJCWlndF9pbmZvKCJNZWFzdXJlZCAlLjFmTUh6LCBleHBlY3RlZCBbJWQsICVkXU1o elxuIiwKPiArCQkJIG1lYXN1cmVkLCByZXEubWluLCByZXEubWF4KTsKPiArCQlpZ3RfYXNzZXJ0 KG1lYXN1cmVkID4gcmVxLm1pbiAtIDEwMCAmJgo+ICsJCQkgICBtZWFzdXJlZCA8IHJlcS5tYXgg KyAxMDApOwo+ICsJfQo+ICsKPiArCWRvIHsKPiArCQlzdHJ1Y3Qgewo+ICsJCQl1aW50MzJfdCBl bmdpbmU7Cj4gKwkJCXVpbnQzMl90IG1pbjsKPiArCQkJdWludDMyX3QgbWF4Owo+ICsJCX0gcmVx ID0ge307Cj4gKwo+ICsJCXdyaXRlKGxpbmtbMV0sICZyZXEsIHNpemVvZihyZXEpKTsKPiArCQlj bG9zZShsaW5rWzFdKTsKPiArCX0gd2hpbGUgKDApOwo+ICsJaWd0X3dhaXRjaGlsZHJlbigpOwo+ ICsJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+ICsKPiArCWNsb3NlKHBtdSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGludmFsaWRfY29udGV4dChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMy X3QgbWluLCB1aW50MzJfdCBtYXgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCB0ZXN0IHsKPiArCQl1 aW50MzJfdCBtaW4sIG1heDsKPiArCX0gdGVzdHNbXSA9IHsKPiArCQl7IG1pbiAtIDUwLCBtYXgg LSA1MCB9LAo+ICsJCXsgbWluIC0gNTAsIG1heCB9LAo+ICsJCXsgbWluIC0gNTAsIG1heCArIDUw IH0sCj4gKwkJeyBtaW4sIG1heCArIDUwIH0sCj4gKwkJeyBtaW4gKyA1MCwgbWF4ICsgNTAgfSwK PiArCj4gKwkJeyBtaW4gLSA1MCwgbWluIC0gNTAgfSwKPiArCj4gKwkJeyBtaW4gLSA1MCwgbWlu IH0sClRoaXMgb25lIGlzIHNpbWlsYXIgdG8geyBtaW4gLcKgIDUwLCBtYXggfSB3aGVyZSBtYXgg aXMgaW4gcmFuZ2UgYnV0IG1pbiAKaXMgb3V0c2lkZS4KU2ltaWxhcmx5IG9uIG1heCBzaWRlLiB3 aGF0IGlzIHRoZSByZWFzb25pbmcgZm9yIHRoZXNlIGNhc2VzPwo+ICsJCXsgbWluICsgNTAsIG1p biB9LAo+ICsJCXsgbWluLCBtaW4gLSA1MCB9LAo+ICsKPiArCQl7IG1heCArIDUwLCBtYXggfSwK PiArCQl7IG1heCwgbWF4ICsgNTAgfSwKPiArCQl7IG1heCwgbWF4IC0gNTAgfSwKPiArCj4gKwkJ eyBtYXggKyA1MCwgbWF4ICsgNTAgfSwKPiArCj4gKwkJe30KPiArCX07Cj4gKwo+ICsJZm9yIChj b25zdCBzdHJ1Y3QgdGVzdCAqdCA9IHRlc3RzOyB0LT5taW4gfCB0LT5tYXg7IHQrKykgewo+ICsJ CXVpbnQzMl90IGN1cl9taW4sIGN1cl9tYXg7Cj4gKwo+ICsJCWlndF9hc3NlcnRfZihfX3NldF9m cmVxKGZkLCBjdHgsIHQtPm1pbiwgdC0+bWF4KSA9PSAtRUlOVkFMLAo+ICsJCQkgICAgICJGYWls ZWQgdG8gcmVqZWN0IGludmFsaWQgWyVkLCAlZF0gKHZhbGlkIHJhbmdlIFslZCwgJWRdKSBvbiBj b250ZXh0ICVkXG4iLAo+ICsJCQkgICAgIHQtPm1pbiwgdC0+bWF4LCBtaW4sIG1heCwgY3R4KTsK PiArCj4gKwkJZ2V0X2ZyZXEoZmQsIDAsICZjdXJfbWluLCAmY3VyX21heCk7Cj4gKwkJaWd0X2Fz c2VydF9lcShjdXJfbWluLCBtaW4pOwo+ICsJCWlndF9hc3NlcnRfZXEoY3VyX21heCwgbWF4KTsK PiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW52YWxpZChpbnQgZmQpCj4gK3sKPiArCXVp bnQzMl90IG1pbiwgbWF4LCBjdHg7Cj4gKwo+ICsJZ2V0X2ZyZXEoZmQsIDAsICZtaW4sICZtYXgp Owo+ICsKPiArCWludmFsaWRfY29udGV4dChmZCwgMCwgbWluLCBtYXgpOwo+ICsKPiArCWN0eCA9 IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7Cj4gKwlpbnZhbGlkX2NvbnRleHQoZmQsIGN0eCwgbWlu LCBtYXgpOwo+ICsJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgaWRlbXBvdGVudF9jb250ZXh0KGludCBmZCwgdWludDMyX3QgY3R4KQo+ICt7Cj4g Kwl1aW50MzJfdCBtaW4sIG1heDsKPiArCXVpbnQzMl90IGN1cl9taW4sIGN1cl9tYXg7Cj4gKwo+ ICsJZ2V0X2ZyZXEoZmQsIGN0eCwgJm1pbiwgJm1heCk7Cj4gKwo+ICsJc2V0X2ZyZXEoZmQsIGN0 eCwgbWF4LCBtYXgpOwo+ICsJZ2V0X2ZyZXEoZmQsIGN0eCwgJmN1cl9taW4sICZjdXJfbWF4KTsK PiArCWlndF9hc3NlcnRfZXEoY3VyX21pbiwgbWF4KTsKPiArCWlndF9hc3NlcnRfZXEoY3VyX21h eCwgbWF4KTsKPiArCj4gKwlzZXRfZnJlcShmZCwgY3R4LCBtaW4sIG1pbik7Cj4gKwlnZXRfZnJl cShmZCwgY3R4LCAmY3VyX21pbiwgJmN1cl9tYXgpOwo+ICsJaWd0X2Fzc2VydF9lcShjdXJfbWlu LCBtaW4pOwo+ICsJaWd0X2Fzc2VydF9lcShjdXJfbWF4LCBtaW4pOwo+ICsKPiArCXNldF9mcmVx KGZkLCBjdHgsIG1pbiwgbWF4KTsKPiArCWdldF9mcmVxKGZkLCBjdHgsICZjdXJfbWluLCAmY3Vy X21heCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKGN1cl9taW4sIG1pbik7Cj4gKwlpZ3RfYXNzZXJ0X2Vx KGN1cl9tYXgsIG1heCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlkZW1wb3RlbnQoaW50IGZk KQo+ICt7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gKwo+ICsJaWRlbXBvdGVudF9jb250ZXh0KGZkLCAw KTsKPiArCj4gKwljdHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ICsJaWRlbXBvdGVudF9j b250ZXh0KGZkLCBjdHgpOwo+ICsJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgcmFuZ2VfY29udGV4dChpbnQgZmQsIHVpbnQzMl90IGN0eCkKPiAr ewo+ICsJdWludDMyX3QgbWluLCBtYXg7Cj4gKwl1aW50MzJfdCBjdXJfbWluLCBjdXJfbWF4Owo+ ICsKPiArCWdldF9mcmVxKGZkLCBjdHgsICZtaW4sICZtYXgpOwo+ICsKPiArCWZvciAodWludDMy X3QgZnJlcSA9IG1pbjsgZnJlcSA8PSBtYXg7IGZyZXErKykgewo+ICsJCXNldF9mcmVxKGZkLCBj dHgsIGZyZXEsIGZyZXEpOwo+ICsJCWdldF9mcmVxKGZkLCBjdHgsICZjdXJfbWluLCAmY3VyX21h eCk7Cj4gKwo+ICsJCWlndF9hc3NlcnQoY3VyX21pbiA+PSBtaW4pOwo+ICsJCWlndF9hc3NlcnQo Y3VyX21heCA8PSBtYXgpOwo+ICsJfQo+ICsKPiArCXNldF9mcmVxKGZkLCBjdHgsIG1pbiwgbWF4 KTsKPiArCWdldF9mcmVxKGZkLCBjdHgsICZjdXJfbWluLCAmY3VyX21heCk7Cj4gKwlpZ3RfYXNz ZXJ0X2VxKGN1cl9taW4sIG1pbik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKGN1cl9tYXgsIG1heCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHJhbmdlKGludCBmZCkKPiArewo+ICsJdWludDMyX3QgY3R4 Owo+ICsKPiArCXJhbmdlX2NvbnRleHQoZmQsIDApOwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0 X2NyZWF0ZShmZCk7Cj4gKwlyYW5nZV9jb250ZXh0KGZkLCBjdHgpOwo+ICsJZ2VtX2NvbnRleHRf ZGVzdHJveShmZCwgY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5kZXBlbmRlbnQoaW50 IGZkKQo+ICt7Cj4gKwl1aW50MzJfdCBtaW4sIG1heDsKPiArCXVpbnQzMl90IGN1cl9taW4sIGN1 cl9tYXg7Cj4gKwl1aW50MzJfdCBjdHhbMl07Cj4gKwo+ICsJZ2V0X2ZyZXEoZmQsIDAsICZtaW4s ICZtYXgpOwo+ICsKPiArCXNldF9mcmVxKGZkLCAwLCBtYXgsIG1heCk7Cj4gKwljdHhbMF0gPSBn ZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ICsJZ2V0X2ZyZXEoZmQsIGN0eFswXSwgJmN1cl9taW4s ICZjdXJfbWF4KTsKPiArCWlndF9hc3NlcnRfZXEoY3VyX21pbiwgbWluKTsKPiArCWlndF9hc3Nl cnRfZXEoY3VyX21heCwgbWF4KTsKPiArCj4gKwlzZXRfZnJlcShmZCwgMCwgbWluLCBtaW4pOwo+ ICsJZ2V0X2ZyZXEoZmQsIGN0eFswXSwgJmN1cl9taW4sICZjdXJfbWF4KTsKPiArCWlndF9hc3Nl cnRfZXEoY3VyX21pbiwgbWluKTsKPiArCWlndF9hc3NlcnRfZXEoY3VyX21heCwgbWF4KTsKPiAr Cj4gKwljdHhbMV0gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+ICsJZ2V0X2ZyZXEoZmQsIGN0 eFsxXSwgJmN1cl9taW4sICZjdXJfbWF4KTsKPiArCWlndF9hc3NlcnRfZXEoY3VyX21pbiwgbWlu KTsKPiArCWlndF9hc3NlcnRfZXEoY3VyX21heCwgbWF4KTsKPiArCj4gKwlzZXRfZnJlcShmZCwg Y3R4WzFdLCBtYXgsIG1heCk7Cj4gKwlnZXRfZnJlcShmZCwgY3R4WzBdLCAmY3VyX21pbiwgJmN1 cl9tYXgpOwo+ICsJaWd0X2Fzc2VydF9lcShjdXJfbWluLCBtaW4pOwo+ICsJaWd0X2Fzc2VydF9l cShjdXJfbWF4LCBtYXgpOwo+ICsKPiArCWdldF9mcmVxKGZkLCAwLCAmY3VyX21pbiwgJmN1cl9t YXgpOwo+ICsJaWd0X2Fzc2VydF9lcShjdXJfbWluLCBtaW4pOwo+ICsJaWd0X2Fzc2VydF9lcShj dXJfbWF4LCBtaW4pOwo+ICsKPiArCWdldF9mcmVxKGZkLCBjdHhbMV0sICZjdXJfbWluLCAmY3Vy X21heCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKGN1cl9taW4sIG1heCk7Cj4gKwlpZ3RfYXNzZXJ0X2Vx KGN1cl9tYXgsIG1heCk7Cj4gKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhbMV0pOwo+ICsK PiArCWdldF9mcmVxKGZkLCBjdHhbMF0sICZjdXJfbWluLCAmY3VyX21heCk7ClRoZXJlIGlzIG5v IHNldF9mcmVxIGJldHdlZW4gZWFybGllciBnZXRfZnJlcSBhbmQgdGhpcyBvbmUgZm9yIGN0eFsw XSBzbyAKd2UgY2FuIHNraXAgb25lLgo+ICsJaWd0X2Fzc2VydF9lcShjdXJfbWluLCBtaW4pOwo+ ICsJaWd0X2Fzc2VydF9lcShjdXJfbWF4LCBtYXgpOwo+ICsJZ2VtX2NvbnRleHRfZGVzdHJveShm ZCwgY3R4WzBdKTsKTmVlZCB0byByZXN0b3JlIG1pbi9tYXggZm9yIGRlZmF1bHQgY29udGV4dD8K PiArfQo+ICsKPiArc3RhdGljIGJvb2wgaGFzX2N0eF9mcmVxKGludCBmZCkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHBhcmFtID0gewo+ICsJCS5wYXJhbSA9IExP Q0FMX0NPTlRFWFRfUEFSQU1fRlJFUVVFTkNZLAo+ICsJfTsKPiArCj4gKwlyZXR1cm4gX19nZW1f Y29udGV4dF9nZXRfcGFyYW0oZmQsICZwYXJhbSkgPT0gMDsKPiArfQo+ICsKPiAraWd0X21haW4K PiArewo+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmU7Cj4gKwlpbnQg ZmQgPSAtMTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIo RFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZV9nZW0oZmQpOwo+ICsKPiArCQlpZ3RfcmVx dWlyZShoYXNfY3R4X2ZyZXEoZmQpKTsKPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxp ZCIpCj4gKwkJaW52YWxpZChmZCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoImlkZW1wb3RlbnQiKQo+ ICsJCWlkZW1wb3RlbnQoZmQpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJyYW5nZSIpCj4gKwkJcmFu Z2UoZmQpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJpbmRlcGVuZGVudCIpCj4gKwkJaW5kZXBlbmRl bnQoZmQpOwo+ICsKPiArCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiArCj4gKwlmb3IgKGUg PSBpbnRlbF9leGVjdXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKSB7Cj4gKwkJaWd0X3N1YnRl c3RfZ3JvdXAgewo+ICsJCQlpZ3RfZml4dHVyZSB7Cj4gKwkJCQlnZW1fcmVxdWlyZV9yaW5nKGZk LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOwo+ICsJCQl9Cj4gKwo+ICsJCQlpZ3Rfc3VidGVzdF9m KCIlcy1zaW5nbGUiLCBlLT5uYW1lKQo+ICsJCQkJc2luZ2xlKGZkLCBlKTsKPiArCQkJaWd0X3N1 YnRlc3RfZigiJXMtY29udGludW91cyIsIGUtPm5hbWUpCj4gKwkJCQljb250aW51b3VzKGZkLCBl KTsKPiArCQkJaWd0X3N1YnRlc3RfZigiJXMtaW5mbGlnaHQiLCBlLT5uYW1lKQo+ICsJCQkJaW5m bGlnaHQoZmQsIGUpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdCgic2FuZHdpY2gi KQo+ICsJCXNhbmR3aWNoKGZkLCAyMCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInNtb2tldGVzdCIp Cj4gKwkJc21va2V0ZXN0KGZkLCAyMCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24u YnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+IGluZGV4IDZlNzc2YmI3Li5mYTVlMzE2OSAxMDA2 NDQKPiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4g QEAgLTM2LDYgKzM2LDcgQEAgdGVzdF9wcm9ncyA9IFsKPiAgIAknZ2VtX2N0eF9jcmVhdGUnLAo+ ICAgCSdnZW1fY3R4X2V4ZWMnLAo+ICAgCSdnZW1fY3R4X2lzb2xhdGlvbicsCj4gKwknZ2VtX2N0 eF9mcmVxJywKdGhpcyBzaG91bGQgYmUgb25lIGVudHJ5IGFib3ZlCj4gICAJJ2dlbV9jdHhfcGFy YW0nLAo+ICAgCSdnZW1fY3R4X3N3aXRjaCcsCj4gICAJJ2dlbV9jdHhfdGhyYXNoJywKCi0tIApU aGFua3MsClNhZ2FyCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK