From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 10DBD6E5B3 for ; Wed, 11 Apr 2018 10:42:15 +0000 (UTC) References: <20180316110628.9407-1-arkadiusz.hiler@intel.com> <043616cd-0cda-4558-9aea-ee138406e61c@linux.intel.com> <152339362605.13225.5685348291376606896@mail.alporthouse.com> From: Tvrtko Ursulin Message-ID: Date: Wed, 11 Apr 2018 11:42:12 +0100 MIME-Version: 1.0 In-Reply-To: <152339362605.13225.5685348291376606896@mail.alporthouse.com> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t] igt: Add gem_ctx_freq to exercise requesting freq on a ctx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , Arkadiusz Hiler , igt-dev@lists.freedesktop.org Cc: Praveen Paneri List-ID: Ck9uIDEwLzA0LzIwMTggMjE6NTMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE4LTA0LTEwIDE3OjE3OjEzKQo+Pgo+PiBPbiAxNi8wMy8yMDE4IDExOjA2 LCBBcmthZGl1c3ogSGlsZXIgd3JvdGU6Cj4+PiBGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KPj4+Cj4+PiBFeGVyY2lzZSBzb21lIG5ldyBBUEkgdGhhdCBhbGxv d3MgYXBwbGljYXRpb25zIHRvIHJlcXVlc3QgdGhhdAo+Pj4gaW5kaXZpZHVhbCBjb250ZXh0cyBh cmUgZXhlY3V0ZWQgd2l0aGluIGEgZGVzaXJlZCBmcmVxdWVuY3kgcmFuZ2UuCgpbc25pcF0KCj4+ PiArc3RhdGljIHZvaWQgaW5mbGlnaHQoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZSAqZSkKPj4+ICt7Cj4+PiArICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZW5naW5l ID0gZS0+ZXhlY19pZCB8IGUtPmZsYWdzOwo+Pj4gKyAgICAgdWludDMyX3QgY3R4LCBtaW4sIG1h eCwgZnJlcSwgZGlzY2FyZDsKPj4+ICsgICAgIGRvdWJsZSBtZWFzdXJlZDsKPj4+ICsgICAgIGln dF9zcGluX3QgKnBsdWcsICp3b3JrWzJdOwo+Pj4gKyAgICAgaW50IHBtdTsKPj4+ICsKPj4+ICsg ICAgIHBtdSA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kpOwo+ Pj4gKyAgICAgaWd0X3JlcXVpcmUocG11ID49IDApOwo+Pj4gKwo+Pj4gKyAgICAgY3R4ID0gZ2Vt X2NvbnRleHRfY3JlYXRlKGZkKTsKPj4+ICsgICAgIGdldF9mcmVxKGZkLCBjdHgsICZtaW4sICZt YXgpOwo+Pj4gKyAgICAgc2V0X2ZyZXEoZmQsIGN0eCwgbWluLCBtaW4pOwo+Pj4gKwo+Pj4gKyAg ICAgaWd0X2luZm8oIk1pbiBmcmVxOiAlZE1IejsgTWF4IGZyZXE6ICVkTUh6XG4iLCBtaW4sIG1h eCk7Cj4+PiArCj4+PiArICAgICBnZW1fcXVpZXNjZW50X2dwdShmZCk7Cj4+PiArICAgICBwbHVn ID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVuZ2luZSwgMCk7Cj4+PiArICAgICBnZW1f Y29udGV4dF9kZXN0cm95KGZkLCBjdHgpOwo+Pj4gKyAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCAx NjsgbisrKSB7Cj4+PiArICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyIG9iaiA9IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAuaGFuZGxlID0gcGx1Zy0+aGFu ZGxlLAo+Pj4gKyAgICAgICAgICAgICB9Owo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIC5idWZm ZXJfY291bnQgPSAxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIC5idWZmZXJzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmb2JqKSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAuZmxhZ3MgPSBl bmdpbmUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgLnJzdmQxID0gZ2VtX2NvbnRleHRfY3Jl YXRlKGZkKSwKPj4+ICsgICAgICAgICAgICAgfTsKPj4+ICsgICAgICAgICAgICAgc2V0X2ZyZXEo ZmQsIGViLnJzdmQxLCBtaW4sIG1pbik7Cj4+PiArICAgICAgICAgICAgIGdlbV9leGVjYnVmKGZk LCAmZWIpOwo+Pj4gKyAgICAgICAgICAgICBnZW1fY29udGV4dF9kZXN0cm95KGZkLCBlYi5yc3Zk MSk7Cj4+PiArICAgICB9Cj4+PiArICAgICBtZWFzdXJlZCA9IG1lYXN1cmVfZnJlcXVlbmN5KHBt dSwgU0FNUExFX1BFUklPRCk7Cj4+PiArICAgICBpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9y cHNfYm9vc3RfaW5mbyIpOwo+Pj4gKyAgICAgaWd0X2luZm8oIiVzKHBsdWcpOiBNZWFzdXJlZCAl LjFmTUh6LCBleHBlY3RlZCAlZE1oelxuIiwKPj4+ICsgICAgICAgICAgICAgIGUtPm5hbWUsIG1l YXN1cmVkLCBtaW4pOwo+Pj4gKyAgICAgcG11X2Fzc2VydChtZWFzdXJlZCwgbWluKTsKPj4KPj4g SSB3b3VsZCBleHBlY3QgcXVldWVkIGNvbnRleHRzIHdvdWxkIGhhdmUgZGlmZmVyZW50IGxpbWl0 cyBzbyBoZXJlIHlvdQo+PiBjYW4gY2hlY2sgdGhhdCB0aGUgbGltaXQgZnJvbSB0aGUgY3VycmVu dGx5IGV4ZWN1dGluZyBvbmUgcmVtYWlucyBpbgo+PiBmb3JjZT8gTGlrZSBpdCBpcyBJIGFtIG5v dCBzdXJlIHdoYXQgaXQncyB0ZXN0aW5nPwo+IAo+IFRoZSBjaGFsbGVuZ2UgaGVyZSBpcyB0byBk ZXRlY3QgdGhhdCBzZXR0aW5nIGEgZnJlcXVlbmN5IGlzIGRvbmUgb24gYQo+IGxpdGUtcmVzdG9y ZSwgaS5lLiB0aGF0IHRoZSB1cGRhdGVkIGNvbnRleHQgZnJlcXVlbmN5IGlzIHVzZWQgZm9yIHRo ZQo+IG5leHQgYmF0Y2ggZXZlbiB0aG91Z2ggdGhlIGNvbnRleHQgaXMgY3VycmVudGx5IGxpdmUu CgpJIGRvbid0IGZvbGxvdy4gSGVyZSB5b3UgaGF2ZSBjdHgwIHdpdGggZnJlcSBzZXQgdG8gbWlu L21pbiwgdGhlbiB5b3UgCnF1ZXVlIGN0eDEuLjE2IGFsbCB3aXRoIGZyZXEgc2V0IHRvIG1pbi9t aW4sIGFuZCBhc3NlcnQgbWluIGlzIG1lYXN1cmVkLiAKSSBkb24ndCBzZWUgbGl0ZS1yZXN0b3Jl IG9yIHN0aWxsIHRoZSBwb2ludCBvZiB0aGUgdGVzdC4gSWYgY3R4MS4uMTYgCndvdWxkIGhhdmUg ZnJlcSBzZXQgdG8gc29tZXRoaW5nIGVsc2UgeW91IGNvdWxkIGFzc2VydCB0aGUgY3VycmVudGx5 IApydW5uaW5nIGN0eCBkaWQgbm90IGhhdmUgaXQncyBsaW1pdCBvdmVyd3JpdHRlbi4KCj4+PiAr ICAgICB3b3JrWzBdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCAwKTsK Pj4+ICsKPj4+ICsgICAgIC8qIHdvcmsgaXMgbm93IHF1ZXVlZCBidXQgbm90IGV4ZWN1dGluZyAq Lwo+Pj4gKyAgICAgZnJlcSA9IChtYXggKyBtaW4pIC8gMjsKPj4+ICsgICAgIHNldF9mcmVxKGZk LCBjdHgsIGZyZXEsIGZyZXEpOwo+Pj4gKyAgICAgZ2V0X2ZyZXEoZmQsIGN0eCwgJmZyZXEsICZk aXNjYXJkKTsKPj4+ICsgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cj4+PiArCj4+ PiArICAgICBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+Pj4gKyAgICAgc2V0X2ZyZXEo ZmQsIGN0eCwgbWF4LCBtYXgpOwo+Pj4gKyAgICAgd29ya1sxXSA9IF9faWd0X3NwaW5fYmF0Y2hf bmV3KGZkLCBjdHgsIGVuZ2luZSwgMCk7Cj4+PiArICAgICBnZW1fY29udGV4dF9kZXN0cm95KGZk LCBjdHgpOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X3NwaW5fYmF0Y2hfZW5kKHBsdWcpOwo+Pj4gKyAg ICAgZG8KPj4+ICsgICAgICAgICAgICAgdXNsZWVwKDEwMDAwKTsKPj4+ICsgICAgIHdoaWxlIChn ZW1fYm9fYnVzeShmZCwgcGx1Zy0+aGFuZGxlKSk7Cj4+Cj4+IGdlbV9zeW5jIHdvdWxkbid0IGN1 dCBpdD8gU29tZXRoaW5nIGludGVybmFsIGNvdWxkIGZvb2wgdXMgaGVyZSBhcyB0aGUKPj4gcXVl dWVkIHVwIGJhdGNoZXMgcHJvY2VlZCB0byBzdGFydCBhbmQgY29tcGxldGU/Cj4gCj4gZ2VtX3N5 bmMgLT4gd2FpdGJvb3N0LiBJIHdhcyB3cml0aW5nIHRoaXMgdG8gYXZvaWQgdHJpZ2dlcmluZwo+ IHdhaXRib29zdHMsIGFuZCBhbHNvIHRvIGNhbmNlbCBvdXQgdW53YW50ZWQgYm9vc3RzIGJldHdl ZW4gbG9vcHMuCgpPa2F5LCBzbyBoZWxwZXIgd2l0aCBhIGNvbW1lbnQgd291bGQgYmUgZ29vZC4K Cj4+Cj4+PiArICAgICBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBwbHVnKTsKPj4+ICsKPj4+ICsg ICAgIC8qIE5vdyB3b3JrIHdpbGwgZXhlY3V0ZSAqLwo+Pj4gKyAgICAgbWVhc3VyZWQgPSBtZWFz dXJlX2ZyZXF1ZW5jeShwbXUsIFNBTVBMRV9QRVJJT0QpOwo+Pj4gKyAgICAgaWd0X2RlYnVnZnNf ZHVtcChmZCwgImk5MTVfZW5naW5lX2luZm8iKTsKPj4KPj4gTmVlZCB0aGlzPwo+IAo+IE5lZWQg aXQ/IEhhdmUgeW91IHRyaWVkIGRlYnVnZ2luZyBpdCB3aXRob3V0IGl0PyA6KQoKSXMgaXQgYSBk ZWJ1Z2dpbmcgbGVmdG92ZXIgaXMgd2hlcmUgSSB3YXMgdHJ5aW5nIHRvIGdldCBhdC4gOikKCj4g Cj4+PiArICAgICBpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9ycHNfYm9vc3RfaW5mbyIpOwo+ Pj4gKyAgICAgaWd0X2luZm8oIiVzKHdvcmswKTogTWVhc3VyZWQgJS4xZk1IeiwgZXhwZWN0ZWQg JWRNaHpcbiIsCj4+PiArICAgICAgICAgICAgICBlLT5uYW1lLCBtZWFzdXJlZCwgZnJlcSk7Cj4+ PiArICAgICBwbXVfYXNzZXJ0KG1lYXN1cmVkLCBmcmVxKTsKPj4+ICsKPj4+ICsgICAgIGlndF9z cGluX2JhdGNoX2VuZCh3b3JrWzBdKTsKPj4+ICsgICAgIGRvCj4+PiArICAgICAgICAgICAgIHVz bGVlcCgxMDAwMCk7Cj4+PiArICAgICB3aGlsZSAoZ2VtX2JvX2J1c3koZmQsIHdvcmtbMF0tPmhh bmRsZSkpOwo+Pj4gKyAgICAgaWd0X3NwaW5fYmF0Y2hfZnJlZShmZCwgd29ya1swXSk7Cj4+PiAr Cj4+PiArICAgICBtZWFzdXJlZCA9IG1lYXN1cmVfZnJlcXVlbmN5KHBtdSwgU0FNUExFX1BFUklP RCk7Cj4+PiArICAgICBpZ3RfZGVidWdmc19kdW1wKGZkLCAiaTkxNV9lbmdpbmVfaW5mbyIpOwo+ Pj4gKyAgICAgaWd0X2RlYnVnZnNfZHVtcChmZCwgImk5MTVfcnBzX2Jvb3N0X2luZm8iKTsKPj4+ ICsgICAgIGlndF9pbmZvKCIlcyh3b3JrMSk6IE1lYXN1cmVkICUuMWZNSHosIGV4cGVjdGVkICVk TWh6XG4iLAo+Pj4gKyAgICAgICAgICAgICAgZS0+bmFtZSwgbWVhc3VyZWQsIG1heCk7Cj4+PiAr ICAgICBwbXVfYXNzZXJ0KG1lYXN1cmVkLCBtYXgpOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X3NwaW5f YmF0Y2hfZnJlZShmZCwgd29ya1sxXSk7Cj4+PiArICAgICBjbG9zZShwbXUpOwo+Pj4gKyAgICAg Z2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBzZXRf c3lzZnNfZnJlcSh1aW50MzJfdCBtaW4sIHVpbnQzMl90IG1heCkKPj4+ICt7Cj4+PiArICAgICBp Z3Rfc3lzZnNfcHJpbnRmKHN5c2ZzLCAiZ3RfbWluX2ZyZXFfbWh6IiwgIiV1IiwgbWluKTsKPj4+ ICsgICAgIGlndF9zeXNmc19wcmludGYoc3lzZnMsICJndF9tYXhfZnJlcV9taHoiLCAiJXUiLCBt YXgpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBnZXRfc3lzZnNfZnJlcSh1aW50MzJf dCAqbWluLCB1aW50MzJfdCAqbWF4KQo+Pj4gK3sKPj4+ICsgICAgIGlndF9zeXNmc19zY2FuZihz eXNmcywgImd0X21pbl9mcmVxX21oeiIsICIldSIsIG1pbik7Cj4+PiArICAgICBpZ3Rfc3lzZnNf c2NhbmYoc3lzZnMsICJndF9tYXhfZnJlcV9taHoiLCAiJXUiLCBtYXgpOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgdm9pZCBzeXNmc19jbGFtcChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9l eGVjdXRpb25fZW5naW5lICplKQo+Pj4gK3sKPj4+ICsjZGVmaW5lIE5fU1RFUFMgMTAKPj4+ICsg ICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbmdpbmUgPSBlLT5leGVjX2lkIHwgZS0+ZmxhZ3M7Cj4+ PiArICAgICB1aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+Pj4gKyAgICAg dWludDMyX3Qgc3lzX21pbiwgc3lzX21heDsKPj4+ICsgICAgIHVpbnQzMl90IG1pbiwgbWF4Owo+ Pj4gKyAgICAgZG91YmxlIG1lYXN1cmVkOwo+Pj4gKyAgICAgaWd0X3NwaW5fdCAqc3BpbjsKPj4+ ICsgICAgIGludCBwbXU7Cj4+PiArCj4+PiArICAgICBnZXRfc3lzZnNfZnJlcSgmc3lzX21pbiwg JnN5c19tYXgpOwo+Pj4gKyAgICAgaWd0X2luZm8oIlN5c3RlbSBtaW4gZnJlcTogJWRNSHo7IG1h eCBmcmVxOiAlZE1IelxuIiwgc3lzX21pbiwgc3lzX21heCk7Cj4+PiArCj4+PiArICAgICBnZXRf ZnJlcShmZCwgY3R4LCAmbWluLCAmbWF4KTsKPj4+ICsgICAgIGlndF9pbmZvKCJDb250ZXh0IG1p biBmcmVxOiAlZE1IejsgbWF4IGZyZXE6ICVkTUh6XG4iLCBtaW4sIG1heCk7Cj4+Cj4+IEFzc2Vy dCBpdCBtYXRjaGVzIHN5c2ZzIHZhbHVlcz8KPiAKPiBJdCBkb2Vzbid0LiBUaGUgY29udGV4dCBp dHNlbGYgc3RhcnRzIGF0IGh3IGxpbWl0cywgYXMgdGhlIHN5c2ZzIGxpbWl0cwo+IG1heSBjaGFu Z2Ugb3ZlciB0aW1lOyBhbmQgdGhlIHdob2xlIHNoZWJhbmcgb2YgbGltaXRzIGlzIGFwcGxpZWQg YXQgdGhlCj4gZW5kIHRvIGRlY2lkZSB3aG8gd2lucy4KCkJ1dCBhdCB0aGlzIHBvaW50IGhvdyBj YW4gYSBwcmlzdGluZSBjb250ZXh0IGhhdmUgZGlmZmVyZW50IGxpbWl0cyBhbmQgCnN5c3RlbSBn bG9iYWw/Cgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGludCBpZnJhYyA9IGlubmVyID4gTl9T VEVQUyA/IDIqTl9TVEVQUyAtIGlubmVyIDogaW5uZXI7Cj4+PiArICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgaWZyZXEgPSBtaW4gKyAobWF4IC0gbWluKSAqIGlmcmFjIC8gTl9TVEVQUzsK Pj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzZXRfZnJlcShmZCwgY3R4LCBpZnJlcSwg aWZyZXEpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdlbV9xdWllc2NlbnRfZ3B1 KGZkKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9u ZXcoZmQsIGN0eCwgZW5naW5lLCAwKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB1c2xlZXAo MTAwMDApOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHNldF9zeXNmc19mcmVxKG9m cmVxLCBvZnJlcSk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2V0X3N5c2ZzX2ZyZXEoJmN1 ciwgJmRpc2NhcmQpOwo+Pgo+PiBSZWFkLWJhY2sgY3R4IGZyZXEgYW5kIGNoZWNrIGlzIGNvcnJl Y3Q/Cj4gCj4gRGVmaW5lIGNvcnJlY3QuIFdlIHNwZW50IG1hbnkgdGVzdCBjeWNsZXMgdG8gdmVy aWZ5IHRoZXNlIGFyZSBhY2N1cmF0ZQo+IGF0IHRoZSBwb2ludHMgd2UgY2FuIGRlY2lkZSB0aGV5 IGFyZS4gRHVwbGljYXRpbmcgdGhhdCBmdXp6eSBsb2dpYyBoZXJlLAo+IEkgZGlkIG5vdCB3YW50 IHRvIGRvIGFzIGl0IGlzIG5vdCB0aGUgdGVzdCB3ZSBhcmUgZm9jdXNpbmcgb24uCj4gCj4gSXQg anVzdCBoYXBwZW5zIHRoYXQgdGhvc2UgYmFzaWMgQVBJIHRlc3RzIGFyZSBhZnRlciB0aGUgYmVo YXZpb3VyCj4gdGVzdHMuIChCb3JpbmcgdGVzdHMgY2FtZSBhZnRlciB0aGUgdGVzdHMgdG8gY2hl Y2sgdGhlIGNvZGUgd2FzCj4gYmVoYXZpbmcuKQoKSSB3YXMgYXNzdW1pbmcgdGhhdCBzZXR0aW5n IHN5c2ZzIGxpbWl0cyB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB3aGF0IAp0aGUgY29udGV4dCBo YXMgc2V0LCB0aGUgcmVhZGluZyBiYWNrIHRoZSBjb250ZXh0IGxpbWl0cywgd291bGQgcmVhZCAK YmFjayB0aGUgdXBkYXRlZCB2YWx1ZXMgaWYgdGhleSBhcmUgbW9yZSByZXN0cmljdGl2ZS4KCk1h eWJlIGl0IGlzIG5vdCB0aGUgY2FzZT8KClNvIGN0eCBmcmVxIGNhbm5vdCBiZSBzZXQgb3V0c2lk ZSB0aGUgX2N1cnJlbnRfIGdsb2JhbCBsaW1pdHMsIGJ1dCAKZ2xvYmFsIGxpbWl0cyBjYW4gYmUg Y2hhbmdlZCBhZnRlcndhcmRzIHdoaWNoIHF1ZXJ5IG9uIGN0eCB3aWxsIG5vdCAKcmVmbGVjdD8g UHJvYmFibHkgc28sIGJlY2F1c2Ugb3RoZXJ3aXNlIHlvdSB3b3VsZCBoYXZlIHRvIHdhbGsgYWxs IApjb250ZXh0cyBvbiBzeXNmcyB3cml0ZXMuCgo+ICAgCj4+PiArCj4+PiArICAgICAgICAgICAg ICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlX2ZyZXF1ZW5jeShwbXUsIFNBTVBMRV9QRVJJT0Qp Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGlndF9kZWJ1Z2ZzX2R1bXAoZmQsICJpOTE1X3Jw c19ib29zdF9pbmZvIik7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgc2V0X3N5c2Zz X2ZyZXEoc3lzX21pbiwgc3lzX21heCk7Cj4+Cj4+IEp1c3Qgc28gd2UgZG8gbm90IGV4aXQgd2l0 aCByYW5kb20gbWluL21heCBzZXQ/Cj4gCj4gWWVzLCBhcyBtdWNoIGFzIHBvc3NpYmxlIHRyeSB0 byBlbnN1cmUgd2Ugb25seSBhc3NlcnQgYW5kIGVuZCB0aGUKPiBzdWJ0ZXN0IG9uIGtub3duIHN0 YXRlLgoKVGhlcmUgaXMgYW4gZXhpdCBoYW5kbGVyIGFscmVhZHkgYnV0IGl0IGRvZXNuJ3QgaGFy bSBJIGd1ZXNzLgoKPj4KPj4+ICsgICAgICAgICAgICAgcmFuZ2VbMF0gPSBtaW4gKyAocmFuZCgp ICUgKG1heCAtIG1pbikgLyAyKTsKPj4+ICsgICAgICAgICAgICAgcmFuZ2VbMV0gPSBtYXggLSAo cmFuZCgpICUgKG1heCAtIG1pbikgLyAyKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgc2V0X2Zy ZXEoZmQsIGN0eCwgcmFuZ2VbMF0sIHJhbmdlWzFdKTsKPj4+ICsgICAgICAgICAgICAgZ2V0X2Zy ZXEoZmQsIGN0eCwgJnJhbmdlWzBdLCAmcmFuZ2VbMV0pOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAg ICBzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCAwKTsKPj4+ICsK Pj4+ICsgICAgICAgICAgICAgdXNsZWVwKDEwMDAwKTsKPj4+ICsgICAgICAgICAgICAgbWVhc3Vy ZWQgPSBtZWFzdXJlX2ZyZXF1ZW5jeShwbXUsIFNBTVBMRV9QRVJJT0QpOwo+Pj4gKyAgICAgICAg ICAgICBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKPj4+ICsKPj4+ICsgICAgICAgICAg ICAgaWd0X2Fzc2VydChtZWFzdXJlZCA+PSByYW5nZVswXSAtIFBNVV9UT0xFUkFOQ0UgJiYKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZCA8PSByYW5nZVsxXSArIFBNVV9UT0xF UkFOQ0UpOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgZ2VtX2NvbnRleHRfZGVzdHJveShm ZCwgY3R4KTsKPj4+ICsgICAgIGNsb3NlKHBtdSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2 b2lkIHNhbmR3aWNoKGludCBmZCwgaW50IHRpbWVvdXQpCj4+PiArewo+Pj4gKyAgICAgdW5zaWdu ZWQgaW50IGVuZ2luZTsKPj4+ICsKPj4+ICsgICAgIGZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShm ZCwgZW5naW5lKSB7Cj4+PiArICAgICAgICAgICAgIGlndF9mb3JrKGNoaWxkLCAxKQo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgIHNhbmR3aWNoX2VuZ2luZShmZCwgZW5naW5lLCB0aW1lb3V0KTsK Pj4+ICsgICAgIH0KPj4KPj4gSG1tLi4gc28gZW5naW5lcyBydW4gaW4gcGFyYWxsZWwgLSBidXQg aG93IGNvbWUgYWxsIGNhbiBhc3NlcnQgdGhleSBnb3QKPj4gZXhhY3RseSB0aGUgbGltaXRzIHRo ZXkgd2FudGVkPyBTdXJlbHkgc29tZW9uZSBtdXN0IGdldCBhIGRpZmZlcmVudAo+PiByYW5nZSBk ZXBlbmRpbmcgb24gd2hhdCdzIHJ1bm5pbmcgb24gYW5vdGhlciBlbmdpbmU/Cj4gCj4gVGhhdCdz IHRoZSBzZXR1cCB3aXRoIHRoZSBvdmVybGFwcGluZyBmcmVxdWVuY3kgcmFuZ2VzLCBpdCBlbnN1 cmVzIHRoYXQKPiB3ZSBjYW4gc2F0aXNmeSBhbGwgdGhlIHJlcXVlc3RzIHNpbXVsdGFuZW91c2x5 LiBJZiB0aGUgcmFuZ2VzIGFyZQo+IGRpc2pvaW50LCB0aGVuIGF0IGxlYXN0IG9uZSBlbmdpbmUn cyByZXF1ZXN0IGNhbm5vdCBiZSBzYXRpc2ZpZWQuCgpPa2F5LCBidXQgaWYgb25lIGVuZ2luZSB3 YW50cyAyMDAtODAwLCBhbmQgYW5vdGhlciA2MDAtMTAwMCwgaG93IGNhbiAKYm90aCBhc3NlcnQg dGhhdCB3aGF0IHRoZXkgbWVhc3VyZSBpcyBpbiB0aGUgcmFuZ2Ugb2Ygd2hhdCB0aGV5IGFza2Vk IApmb3I/IFdoYXQgd2lsbCBhY3R1YWxseSBiZSB0aGUgcmVzdWx0aW5nIHJhbmdlIGhlcmU/IDIw MC0xMDAwIG9yIAo2MDAtODAwPyBIbSBJIGd1ZXNzIGlmIDYwMC04MDAgdGhlIGFzc2VydCB3b3Jr cy4KCj4+PiArCj4+PiArICAgICBmb3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8IG5lbmdpbmU7 IG4rKykKPj4+ICsgICAgICAgICAgICAgY3R4W25dID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsK Pj4+ICsKPj4+ICsgICAgIGRvIHsKPj4+ICsgICAgICAgICAgICAgaWd0X3NwaW5fdCAqc3BpbjsK Pj4+ICsgICAgICAgICAgICAgc3RydWN0IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBlbmdpbmU7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWluOwo+Pj4g KyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1heDsKPj4+ICsgICAgICAgICAgICAgfSBy ZXE7Cj4+PiArCj4+PiArICAgICAgICAgICAgIHdoaWxlIChyZWFkKGxpbmssICZyZXEsIHNpemVv ZihyZXEpKSA+IDApIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoKHJlcS5lbmdpbmUg fCByZXEubWluIHwgcmVxLm1heCkgPT0gMCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gb3V0Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnQo cmVxLmVuZ2luZSA8IG5lbmdpbmUpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHNldF9mcmVx KGZkLCBjdHhbcmVxLmVuZ2luZV0sIHJlcS5taW4sIHJlcS5tYXgpOwo+Pj4gKyAgICAgICAgICAg ICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgIC8qIENyZWF0ZSBhIDIwJSBsb2FkIHVzaW5nIGJ1 c3kgc3Bpbm5lcnMgKi8KPj4+ICsgICAgICAgICAgICAgc3BpbiA9IF9faWd0X3NwaW5fYmF0Y2hf bmV3KGZkLCBjdHhbMF0sIGVuZ2luZXNbMF0sIDApOwo+Pj4gKyAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBuID0gMTsgbiA8IG5lbmdpbmU7IG4rKykgewo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC5oYW5kbGUgPSBzcGluLT5oYW5kbGUsCj4+PiArICAg ICAgICAgICAgICAgICAgICAgfTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmJ1ZmZlcl9jb3VudCA9IDEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuZmxhZ3MgPSBlbmdpbmVzW25dLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLnJzdmQxID0gY3R4W25dLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg IH07Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2VtX2V4ZWNidWYoZmQsICZlYik7Cj4+PiAr ICAgICAgICAgICAgIH0KPj4+ICsgICAgICAgICAgICAgdXNsZWVwKDEwMCk7Cj4+PiArICAgICAg ICAgICAgIGlndF9zcGluX2JhdGNoX2VuZChzcGluKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAg ZG8KPj4+ICsgICAgICAgICAgICAgICAgICAgICB1c2xlZXAoMTApOwo+Pj4gKyAgICAgICAgICAg ICB3aGlsZSAoZ2VtX2JvX2J1c3koZmQsIHNwaW4tPmhhbmRsZSkpOwo+Pgo+PiBUaGlzIGxvb3Ag c2hvdWxkIGJlIG1vdmVkIHRvIGEgaGVscGVyIHNpbmNlIGl0IGlzIHJlcGVhdGVkIGEgZmV3IHRp bWVzLgo+PiAoSWYgaXQgaXMgcmVxdWlyZWQgaW4gdGhpcyBmb3JtLikKPj4KPj4+ICsgICAgICAg ICAgICAgaWd0X3NwaW5fYmF0Y2hfZnJlZShmZCwgc3Bpbik7Cj4+PiArICAgICAgICAgICAgIHVz bGVlcCg0MDApOwo+Pgo+PiAxMDB1cy80MDB1cyBpcyBJIHRoaW5rIHRvbyBzaG9ydCBpZiB5b3Ug d2FudCB0byBnZXQgY2xvc2UgdG8gdGFyZ2V0Cj4+IHJhdGlvLiBXaWxsIHNlZSBsYXRlciB3aGV0 aGVyIHlvdSBhY3R1YWx5IGRlcGVuZCBvbiBpdC4KPiAKPiBUaGUgdGFyZ2V0IHJhdGlvIGhlcmUg aXMgbWlzbGVhZGluZywgYnVzeW5lc3MgaXMgc3VtbWVkIG92ZXIgZW5naW5lcywgc28KPiBhIDV4 IHB1bHNlcyBoYXZlIGEgd2VpcmQgZWZmZWN0LiBJJ3ZlIG5vIGlkZWEgd2hhdCB0aGUgbG9hZCBz aG91bGQgbG9vawo+IGxpa2UsIHRoZSBjaGFsbGVuZ2UgaXMganVzdCB0byBlbnN1cmUgdGhhdCB3 ZSBkbyBub3QgaGF2ZSBhIDEwMCUgc2F0dXJhdGVkCj4gbG9hZCBhbmQgc28gYWxsb3cgdGhlIEdQ VSB0byBkb3duY2xvY2suIFRvIGFsbG93IGRvd25jbG9ja2luZyB3ZSBoYXZlCj4gdG8gYmUgbGVz cyB0aGFuIDY1JSBidXN5ICh3b3JzdCBjYXNlKS4gT3RoZXIgdGhhbiBieSB3YXRjaGluZyBhbmQK PiBjb25maXJtaW5nIHdlIHVwL2Rvd25jbG9jayBpLmUuIHRoZSBsb2FkaW5nIHdhcyBnb29kIGVu b3VnaCwgSSBkb24ndAo+IHRoaW5rIHRoZSBwdWxzZXMgYXJlIHRoZSBiZXN0IG1ldGhvZC4KCldo eSBpdCBpcyBpbXBvcnRhbnQgdG8gYWxsb3cgZG93bmNsb2NraW5nPwoKPiAKPj4+ICsgICAgIH0g d2hpbGUgKDEpOwo+Pj4gKwo+Pj4gK291dDoKPj4+ICsgICAgIGZvciAodW5zaWduZWQgaW50IG4g PSAwOyBuIDwgbmVuZ2luZTsgbisrKQo+Pj4gKyAgICAgICAgICAgICBnZW1fY29udGV4dF9kZXN0 cm95KGZkLCBjdHhbbl0pOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBzbW9rZXRlc3Qo aW50IGZkLCBpbnQgdGltZW91dCkKPj4+ICt7Cj4+PiArICAgICB1bnNpZ25lZCBpbnQgZW5naW5l c1sxNl07Cj4+PiArICAgICB1bnNpZ25lZCBpbnQgbmVuZ2luZTsKPj4+ICsgICAgIHVuc2lnbmVk IGludCBlbmdpbmU7Cj4+PiArICAgICB1aW50MzJfdCBtaW5bMTZdLCBtYXhbMTZdOwo+Pj4gKyAg ICAgaW50IHBtdSwgbGlua1syXTsKPj4+ICsKPj4+ICsgICAgIGdldF9mcmVxKGZkLCAwLCAmbWlu WzBdLCAmbWF4WzBdKTsKPj4+ICsKPj4+ICsgICAgIG5lbmdpbmUgPSAwOwo+Pj4gKyAgICAgZm9y X2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlbmdpbmUpIHsKPj4+ICsgICAgICAgICAgICAgaWYg KG5lbmdpbmUgPT0gQVJSQVlfU0laRShlbmdpbmVzKSAtIDEpCj4+PiArICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Cj4+PiArCj4+PiArICAgICAgICAgICAgIG1pbltuZW5naW5lXSA9IG1pblsw XTsKPj4+ICsgICAgICAgICAgICAgbWF4W25lbmdpbmVdID0gbWF4WzBdOwo+Pj4gKyAgICAgICAg ICAgICBlbmdpbmVzW25lbmdpbmVdID0gZW5naW5lOwo+Pj4gKyAgICAgICAgICAgICBuZW5naW5l Kys7Cj4+PiArICAgICB9Cj4+PiArICAgICBpZ3RfcmVxdWlyZShuZW5naW5lKTsKPj4+ICsKPj4+ ICsgICAgIGlndF9hc3NlcnQocGlwZShsaW5rKSA9PSAwKTsKPj4+ICsgICAgIGlndF9mb3JrKGNo aWxkLCAxKQo+Pj4gKyAgICAgICAgICAgICBwd20oZmQsIGVuZ2luZXMsIG5lbmdpbmUsIGxpbmtb MF0pOwo+Pj4gKyAgICAgY2xvc2UobGlua1swXSk7Cj4+PiArCj4+PiArICAgICBwbXUgPSBwZXJm X2k5MTVfb3BlbihJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKTsKPj4+ICsgICAgIGlndF9y ZXF1aXJlKHBtdSA+PSAwKTsKPj4+ICsKPj4+ICsgICAgIGlndF91bnRpbF90aW1lb3V0KHRpbWVv dXQpIHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IHsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBlbmdpbmU7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlu Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1heDsKPj4+ICsgICAgICAgICAg ICAgfSByZXE7Cj4+PiArICAgICAgICAgICAgIGRvdWJsZSBtZWFzdXJlZDsKPj4+ICsgICAgICAg ICAgICAgdWludDMyX3QgY3R4Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICByZXEuZW5naW5lID0g cmFuZCgpICUgbmVuZ2luZTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgY3R4ID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGZkKTsKPj4+ICsgICAgICAgICAgICAgZ2V0X2ZyZXEoZmQsIGN0eCwgJnJlcS5t aW4sICZyZXEubWF4KTsKPj4+ICsgICAgICAgICAgICAgcmVxLm1pbiA9IHJhbmQoKSAlIChyZXEu bWF4IC0gcmVxLm1pbikgKyByZXEubWluOwo+Pj4gKyAgICAgICAgICAgICByZXEubWF4ID0gcmFu ZCgpICUgKHJlcS5tYXggLSByZXEubWluKSArIHJlcS5taW47Cj4+PiArICAgICAgICAgICAgIHNl dF9mcmVxKGZkLCBjdHgsIHJlcS5taW4sIHJlcS5tYXgpOwo+Pj4gKyAgICAgICAgICAgICBnZXRf ZnJlcShmZCwgY3R4LCAmcmVxLm1pbiwgJnJlcS5tYXgpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAg ICBpZ3RfZGVidWcoIlJlcGxhY2luZyAoJWQsICVkKSBvbiBlbmdpbmUgJXggd2l0aCAoJWQsICVk KVxuIiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIG1pbltyZXEuZW5naW5lXSwgbWF4W3Jl cS5lbmdpbmVdLCByZXEuZW5naW5lLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVxLm1p biwgcmVxLm1heCk7Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnQod3JpdGUobGlua1sxXSwg JnJlcSwgc2l6ZW9mKHJlcSkpID09IHNpemVvZihyZXEpKTsKPj4+ICsgICAgICAgICAgICAgZ2Vt X2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgbWluW3Jl cS5lbmdpbmVdID0gcmVxLm1pbjsKPj4+ICsgICAgICAgICAgICAgbWF4W3JlcS5lbmdpbmVdID0g cmVxLm1heDsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7 IG4gPCBuZW5naW5lOyBuKyspIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZ3RfZGVidWco IlslZF06IFslZCwgJWRdXG4iLCBuLCBtaW5bbl0sIG1heFtuXSk7Cj4+PiArICAgICAgICAgICAg ICAgICAgICAgaWYgKG1pbltuXSA8IHJlcS5taW4pCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXEubWluID0gbWluW25dOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGlmICht YXhbbl0gPiByZXEubWF4KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm1h eCA9IG1heFtuXTsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICBpZ3RfYXNz ZXJ0KHJlcS5tYXggPj0gcmVxLm1pbik7Cj4+PiArCj4+PiArICAgICAgICAgICAgIHVzbGVlcCg1 MDAwMCk7Cj4+Cj4+IEhhdmUgYmktZGlyZWN0aW9uYWwgY29tbXMgc28geW91IGtub3cgd2hlbiBj aGlsZCBoYXMgcHJvY2Vzc2VkIHRoZQo+PiB1cGRhdGVkIHJlcXVlc3Q/Cj4gCj4gTm90IGp1c3Qg dXBkYXRlZCByZXF1ZXN0LCBidXQgdGhlIGtlcm5lbCBycHMgd29ya2VyIHRvIGRvIHNvbWV0aGlu Zy4KPiBBIGJpdCBoYXp5LgoKVGllcyB3aXRoIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBhbmQgbmVl ZHMgc29tZSBiaWcgZmF0IGNvbW1lbnRzIGF0IGxlYXN0LgoKQW5kIHdoYXQgSSBmb3Jnb3QgdG8g c2F5IGluIHRoZSBmaXJzdCBwYXNzIC0gc29tZSBvZiB0aGVzZSBzdWJ0ZXN0cyBuZWVkIApjb21t ZW50cyB0byBleHBsYWluIHRoZSBnZW5lcmFsIGlkZWEgb2Ygd2hhdCB0aGV5IGFyZSBhYm91dCB0 byBkby4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p Z3QtZGV2Cg==