From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AAA26E2E4 for ; Thu, 7 Mar 2019 14:16:16 +0000 (UTC) References: <20190305131611.2367-1-andi.shyti@intel.com> <20190305131611.2367-3-andi.shyti@intel.com> <20190307134248.GB1418@intel.intel> From: Tvrtko Ursulin Message-ID: <6f8893d4-62f9-0fe5-b211-da8cbe2c1ebe@linux.intel.com> Date: Thu, 7 Mar 2019 14:16:13 +0000 MIME-Version: 1.0 In-Reply-To: <20190307134248.GB1418@intel.intel> Content-Language: en-US Subject: Re: [igt-dev] [RFC PATCH v10 2/6] lib/i915: add gem_engine_topology library 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: Andi Shyti Cc: IGT dev , Andi Shyti List-ID: Ck9uIDA3LzAzLzIwMTkgMTM6NDIsIEFuZGkgU2h5dGkgd3JvdGU6Cj4gSGkgVHZydGtvLAo+IAo+ Pj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4+PiArI2luY2x1ZGUgImlndF9ndC5oIgo+Pj4gKyNp bmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJpOTE1L2dlbV9l bmdpbmVfdG9wb2xvZ3kuaCIKPj4+ICsKPj4+ICsjZGVmaW5lIFNJWkVPRl9DVFhfUEFSQU0Jb2Zm c2V0b2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzLCBcCj4+PiArCQkJCQljbGFz c19pbnN0YW5jZVtJOTE1X0VYRUNfUklOR19NQVNLICsgMV0pCj4+PiArI2RlZmluZSBTSVpFT0Zf UVVFUlkJCW9mZnNldG9mKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfaW5mbywgXAo+Pj4g KwkJCQkJZW5naW5lc1tJOTE1X0VYRUNfUklOR19NQVNLICsgMV0pCj4+Cj4+IFRoZXJlIGlzIG5v IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEk5MTVfRVhFQ19SSU5HX01BU0sgYW5kIHRoZSBudW1iZXIg b2YKPj4gZW5naW5lcyB3ZSBjYW4gcXVlcnkuIEknbGwgc3VnZ2VzdCBob3cgSSB0aGluayBpdCBz aG91bGQgd29yayBhIGJpdCBsYXRlci4KPiAKPiBJOTE1X0VYRUNfUklOR19NQVNLIGlzIHRoZSB1 cHBlciBsaW1pdCBjaGVja2VkIGluIHRoZSBkcml2ZXIsCj4gdGhhdCdzIHdoeSBJIHVzZWQgdGhh dCBvbmUuIEkgY291bGQgaGF2ZSBoYXJkY29kZWQgaXQgdG8gNjQsIGJ1dAo+IEkgd2FudGVkIHRv IGtlZXAgaXQgY29uc2lzdGVudCB0byB0aGUgZHJpdmVyLgoKSSdsbCBhcmd1ZSB3aXRoIENocmlz IHRvIHJlbW92ZSB0aGlzIGxpbWl0IGZyb20gdGhlIGVuZ2luZSBtYXAgKGNvbWUgZWIzIAptaWdo dCBub3QgYmUgcmVsZXZhbnQgYW55IG1vcmUpIC0gbmV2ZXJ0aGVsZXNzIHRoZSBxdWVyeSBkb2Vz IG5vdCBoYXZlIAp0aGlzIGxpbWl0IHNvIEkgdGhpbmsgaXQgd291bGQgYmUgYmVzdCB0byBkZWNv dXBsZSB0aGUgY29kZSBmcm9tIHRoZSBzdGFydC4KCj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBp bnRlbF9leGVjdXRpb25fZW5naW5lMiAqaW50ZWxfYWN0aXZlX2VuZ2luZXMyOwo+Pj4gKwo+Pj4g K2ludCBfX2dlbV9xdWVyeShpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9xdWVyeSAqcSkKPj4+ICt7 Cj4+PiArCWludCBlcnIgPSAwOwo+Pj4gKwo+Pj4gKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9D VExfSTkxNV9RVUVSWSwgcSkpCj4+PiArCQllcnIgPSAtZXJybm87Cj4+PiArCj4+PiArCWVycm5v ID0gMDsKPj4+ICsJcmV0dXJuIGVycjsKPj4+ICt9Cj4+PiArCj4+PiArdm9pZCBnZW1fcXVlcnko aW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnkgKnEpCj4+PiArewo+Pj4gKwlpZ3RfYXNzZXJ0 X2VxKF9fZ2VtX3F1ZXJ5KGZkLCBxKSwgMCk7Cj4+PiArfQo+Pgo+PiBJIHdvdWxkIGtlZXAgdGhl c2UgdHdvIHN0YXRpYyBpZiB0aGVyZSBhcmUgbm8gZXh0ZXJuYWwgY2FsbGVycyBmb3Igbm93Lgo+ IAo+IFllcywgSSBjYW4gbWFrZSB0aGVtIHN0YXRpYywgSSB0aG91Z2h0IHNvbWVvbmUgbWlnaHQg bmVlZCB0aGVtIGluCj4gdGhlIGZ1dHVyZS4KCkNvdWxkIGJlIGJ1dCBpdCB3aWxsIGJlIGVhc3kg dG8gZXhwb3J0IHRoZW0gYXQgdGhhdCBwb2ludC4gSSB3YW50ZWQgdG8gCmtlZXAgdGhlIHBhdGNo IHNtYWxsZXN0IHBvc3NpYmxlIGZvciBub3cgc28gSSBjYW4gZm9jdXMgb24gcmV2aWV3aW5nIHRo ZSAKaW1wb3J0YW50IGJpdHMuCgo+IAo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHF1ZXJ5X2VuZ2lu ZXMoaW50IGZkLAo+Pj4gKwkJCSAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvICpx dWVyeV9lbmdpbmVzKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRl bSA9IHsgfTsKPj4+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5IHF1ZXJ5ID0geyB9Owo+Pj4gKwo+ Pj4gKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX0lORk87Cj4+PiArCXF1 ZXJ5Lml0ZW1zX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmaXRlbSk7Cj4+PiArCXF1ZXJ5Lm51bV9p dGVtcyA9IDE7Cj4+PiArCWl0ZW0ubGVuZ3RoID0gU0laRU9GX1FVRVJZOwo+Pgo+PiBJIHRoaW5r IG1ha2luZyB0aGlzIGZ1bmN0aW9uIHRha2UgYnVmZmVyIHNpemUgYW5kIHJldHVybiB0aGUgcXVl cmllZCBzaXplCj4+IHdvdWxkIGJlIHNpbXBsZXN0Lgo+IAo+IEkgaGF2ZW4ndCByZWFsbHkgdW5k ZXJzdG9vZCwgZG8geW91IG1lYW4gZG9pbmcgc29tZXRoaW5nIGxpa2U6Cj4gCj4gc3RhdGljIGlu dCBxdWVyeV9lbmdpbmVzKC4uLi4sIGludCBzaXplKQo+IHsKPiAgICAgWy4uLl0KPiAgICAgcmV0 dXJuIHNpemU7Cj4gfQo+IAo+IG9yIGNhbGxpbmcgdGhlIGdlbV9xdWVyeSB0d2ljZSwgZmlyc3Qg dGltZSBmb3IgZ2V0dGluZyB0aGUgc2l6ZQo+IGFuZCBzZWNvbmQgdGltZSBmb3IgYWxsb2NhdGlu ZyB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcy4KPiAKPiBCZWNhdXNlIGluIHRoZSBmaXJzdCBjYXNl LCB3ZSBoYXZlIHRoZSBzaXplIGluIHF1ZXJ5X2VuZ2luZXMsIGlzCj4gdGhhdCByaWdodD8KPiAK PiBXaGlsZSBpZiB5b3UgbWVhbiB0aGUgc2Vjb25kIGNhc2UsIHRoaXMgaXMgaG93IEkgZGlkIGl0 IGF0IHRoZQo+IHZlcnkgYmVnaW5uaW5nLCBidXQgdGhlbiB3aXRoIENocmlzIHdlIGFncmVlZCB0 aGF0IDY0Cj4gKEk5MTVfRVhFQ19SSU5HX01BU0spIGlzICJiaWcgZW5vdWdoIi4gSWYgeW91IGFy ZSBzdHJvbmcgd2l0aCBpdCwKPiBJIGNhbiByZXZlcnQgaXQgYmFjay4KCkhtLi4gd2hhdCBoYXBw ZW5lZCB0byB0aGUgb2xkIENocmlzIT8gOikpIEkgYW0gbm90IG9iamVjdGluZyB0aGF0IApzdHJv bmdseS4gRXNwZWNpYWxseSBpZiB5b3UgYWxyZWFkeSBjaGFuZ2VkIGl0IG9uY2UgdGhlbiBqdXN0 IGxlYXZlIGl0LiAKSXQgY2FuIGJlIGNoYW5nZWQgbGF0ZXIgaWYgc29tZW9uZSBnZXRzIHRoZSBk ZXNpcmUgdG8gdGlkeS4uCgo+Pj4gKwo+Pj4gKwlpdGVtLmRhdGFfcHRyID0gdG9fdXNlcl9wb2lu dGVyKHF1ZXJ5X2VuZ2luZXMpOwo+Pj4gKwo+Pj4gKwlnZW1fcXVlcnkoZmQsICZxdWVyeSk7Cj4+ PiArfQo+Pj4gKwo+Pj4gK2Jvb2wgZ2VtX2hhc19lbmdpbmVfdG9wb2xvZ3kodm9pZCkKPj4+ICt7 Cj4+PiArCXJldHVybiBpbnRlbF9hY3RpdmVfZW5naW5lczIgIT0gaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZXMyOwo+Pgo+PiBBIHByb2JsZW0gZm9yIHRoZSBleHBvcnRlZCBBUEkgaWYgaW5pdF9lbmdp bmVfbGlzdCBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0Pwo+PiBNYXliZToKPj4KPj4gCWlmICghaW50 ZWxfYWN0aXZlX2VuZ2luZXMyKQo+PiAJCWluaXRfZW5naW5lX2xpc3QoZmQpOwo+Pgo+PiAJcmV0 dXJuIGludGVsX2FjdGl2ZV9lbmdpbmVzMiAhPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7Cj4+ Cj4+ID8KPiAKPiBZZXMsIGl0J3MgaW5kZWVkIHByb25lIHRvIGJlIG1pc3VzZWQsIEkgd291bGQg bmVlZCB0byBtYWtlIGEgbW9yZQo+IGdlbmVyaWMgd2F5LCBiZWNhdXNlIHRoZSB0d28gbGluZXMK PiAKPiAgICAgaWYgKCFpbnRlbF9hY3RpdmVfZW5naW5lczIpCj4gICAgICAgICAgICBpbml0X2Vu Z2luZV9saXN0KGZkKTsKPiAKPiBhcmUgY2FsbGVkIHNvIG1hbnkgdGltZXMgdGhhdCBJJ20gaGF2 aW5nIGFuIG92ZXJkb3NlIG9mIHRoZW0gOikKClllcyB0aGUgY2FsbCBjaGFpbnMgYW5kIHJlc3Bv bnNpYmlsaXRpZXMgZG8gZmVlbCBhIGJpdCB1bm9idmlvdXMuCgo+IAo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgdm9pZCBzZXRfY3R4X3BhcmFtX2VuZ2luZXMoaW50IGZkLCB1aW50MzJfdCBjdHhf aWQpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMgKmN0eF9l bmdpbmU7Cj4+PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBjdHhfcGFyYW07 Cj4+PiArCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTI7Cj4+PiArCXVp bnQ4X3QgYnVmZltTSVpFT0ZfQ1RYX1BBUkFNXSA9IHsgfTsKPj4+ICsJaW50IGk7Cj4+PiArCj4+ PiArCWlmICghZ2VtX2hhc19lbmdpbmVfdG9wb2xvZ3koKSkKPj4+ICsJCXJldHVybjsKPj4KPj4g QUZBSUNTIHRoaXMgY2FuIGJlIGFzc2VydCBoZXJlLgo+IAo+IEkgdGhpbmsgdGhpcyBjaGVjayBp cyByZWR1bmRhbnQgYXMgaXQncyBuZXZlciBnb2luZyB0byBoYXBwZW4uCj4gVGhpcyBmdW5jdGlv biBpcyAnc3RhdGljJyBhbmQgdGhlIGNhbGxpbmcgZnVuY3Rpb24gY2hlY2tzIHRoYXQKPiBhbHJl YWR5LiBJIHdpbGwgcmVtb3ZlIGl0LgoKQmV0dGVyIHRvIGhhdmUgaXQgYXMgYXNzZXJ0IGJ1dCBh cyB5b3Ugd2lzaC4gSSBndWVzcyBldmVuIHdpdGhvdXQgYW4gCmFzc2VydCBpdCB3b3VsZCBzZWdm YXVsdCB3aGVuIGl0IHRyaWVzIHRvIGl0ZXJhdGUgaW50ZWxfYWN0aXZlX2VuZ2luZXMyLgoKPiAK Pj4+ICsKPj4+ICsJY3R4X2VuZ2luZSA9IChzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2lu ZXMgKikgYnVmZjsKPj4+ICsKPj4+ICsJY3R4X3BhcmFtLmN0eF9pZCA9IGN0eF9pZDsKPj4+ICsJ Y3R4X3BhcmFtLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORVM7Cj4+PiArCj4+PiAr CWN0eF9lbmdpbmUtPmV4dGVuc2lvbnMgPSAwOwo+Pj4gKwlmb3IgKGkgPSAwLCBlMiA9IGludGVs X2FjdGl2ZV9lbmdpbmVzMjsgZTItPm5hbWU7IGkrKywgZTIrKykgewo+Pgo+PiBIZXJlIEkgdGhp bmsgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIGNoZWNrIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBl bmdpbmVzCj4+IGRvZXMgbm90IGV4Y2VlZCB0aGUgZW5naW5lIG1hcCBleGVjYnVmIGluZGV4Lgo+ Pgo+PiAJaWd0X3JlcXVpcmUoaSA8PSBJOTE1X0VYRUNfUklOR19NQVNLKTsKPj4KPj4gPwo+IAo+ IEkgY2FuIGFkZCB0aGF0LCBidXQgaXQgd291bGQgYmUgcmVkdW5kYW50IGFzIHRoZSBsaXN0IHdv dWxkIGhhdmUKPiBuZXZlciBiZWVuIGNyZWF0ZWQgb3RoZXJ3aXNlLi4uIGFueXdheSwgYmV0dGVy IGJlIHNhZmUgdGhhbiBzb3JyeSA6KQoKWWVzIEkga25vdywgSSB3cm90ZSB0aGF0IGJlY2F1c2Ug SSB3YXMgc3VnZ2VzdGluZyB0byByZW1vdmUgdGhlIDY0IAplbmdpbmUgbGltaXQgZnJvbSB0aGUg cXVlcnkgYW5kIGp1c3QgaGF2ZSBpdCBpbiB0aGUgZW5naW5lIG1hcC4KCkJ1dCBhcyBzYWlkIGlm IHlvdSBhbHJlYWR5IGRpc2N1c3NlZCB0aGF0IHBvaW50IHRoZW4gbGVhdmUgaXQuCgo+IEJUVywg Z2l2ZW4gbXkgbmF0dXJhbCBjb25mdXNpb24gYmV0d2VlbiAncmVxdWlyZScgYW5kICdhc3NlcnQn LAo+IHlvdSBtZWFudCAnYXNzZXJ0JywgcmlnaHQ/CgpJIG1lYW50IHJlcXVpcmUuIEJ1dCBJIGRv bid0IGtub3cgZWl0aGVyLCBpdCdzIHNvIGhhcmQgdG8gY2hvb3NlIApzb21ldGltZXMuIDopCgo+ Pj4gKwkJY3R4X2VuZ2luZS0+Y2xhc3NfaW5zdGFuY2VbaV0uZW5naW5lX2NsYXNzID0gZTItPmNs YXNzOwo+Pj4gKwkJY3R4X2VuZ2luZS0+Y2xhc3NfaW5zdGFuY2VbaV0uZW5naW5lX2luc3RhbmNl ID0gZTItPmluc3RhbmNlOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWN0eF9wYXJhbS5zaXplID0gb2Zm c2V0b2YodHlwZW9mKCpjdHhfZW5naW5lKSwgY2xhc3NfaW5zdGFuY2VbaSArIDFdKTsKPj4+ICsJ Y3R4X3BhcmFtLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKGN0eF9lbmdpbmUpOwo+Pj4gKwo+Pj4g KwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZjdHhfcGFyYW0pOwo+Pj4gK30KPj4+ICsKPj4+ ICsvKgo+Pj4gKyAqIEluaXRpYWxpemVzIHRoZSBsaXN0IG9mIGVuZ2luZXMuCj4+PiArICoKPj4+ ICsgKiBSZXR1cm5zOgo+Pj4gKyAqCj4+PiArICogIC0gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5k IHRoZSBnZXQvc2V0X3BhcmFtIGlvY3RscyBhcmUgaW1wbGVtZW50ZWQKPj4+ICsgKiAgLSAtRU5P REVWIGluIGNhc2Ugb2Ygc3VjY2VzcyBidXQgSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORVMgaXMg bm90Cj4+PiArICogICAgaW1wbGVtZW50ZWQgaW4gRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRf R0VUUEFSQU0gaW9jdGwuCj4+PiArICovCj4+PiArc3RhdGljIGludCBpbml0X2VuZ2luZV9saXN0 KGludCBmZCkKPj4+ICt7Cj4+PiArCWNvbnN0IGNoYXIgKmNsYXNzX25hbWVzW10gPSB7ICJyY3Mi LCAiYmNzIiwgInZjcyIsICJ2ZWNzIiB9Owo+Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5n aW5lX2luZm8gKnF1ZXJ5X2VuZ2luZTsKPj4+ICsJdW5zaWduZWQgY2hhciBxdWVyeV9idWZmZXJb U0laRU9GX1FVRVJZXSA9IHsgfTsKPj4+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtIGN0eF9wYXJhbSA9IHsKPj4+ICsJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJ TkVTLAo+Pj4gKwl9Owo+Pj4gKwlpbnQgaTsKPj4+ICsKPj4+ICsJLyogdGhlIGxpc3QgaXMgYWxy ZWFkeSBpbml0aWFsaXplZCAqLwo+Pj4gKwlpZiAoaW50ZWxfYWN0aXZlX2VuZ2luZXMyKQo+Pj4g KwkJcmV0dXJuIGdlbV9oYXNfZW5naW5lX3RvcG9sb2d5KCkgPyAwIDogLUVOT0RFVjsKPj4+ICsK Pj4+ICsJLyoKPj4+ICsJICogV2UgY2hlY2sgZmlyc3Qgd2hldGhlciB0aGUgSTkxNV9DT05URVhU X1BBUkFNX0VOR0lORVMgcGFyYW1ldGVyIGlzCj4+PiArCSAqIHN1cHBvcnRlZCBieSB0aGUgcnVu bmluZyBrZXJuZWwuIElmIG5vdCwgX19nZW1fY29udGV4dF9nZXRfcGFyYW0oKQo+Pj4gKwkgKiB3 aWxsIHJldHVybiAtRUlOVkFMIHdoaWNoLCBhdCB0aGlzIHBvaW50LCBpcyBub3QgbmVjZXNzYXJp bHkgYQo+Pj4gKwkgKiBmYWlsdXJlIGJ1dCBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZmFsbCBi ZWNrIHRvIHBvbGxpbmcgdGhlIGVuZ2luZXMKPj4+ICsJICogZGlyZWN0bHkgZnJvbSBpbnRlbF9l eGVjdXRpb25fZW5naW5lczJbXS4KPj4+ICsJICoKPj4+ICsJICogV2Ugd2lsbCByZXR1cm4gLUVO T0RFViB3aXRoIHRoZSBtZWFuaW5nIG9mIG1pc3NpbmcgaW50ZXJmYWNlCj4+PiArCSAqLwo+Pj4g KwlpZiAoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZjdHhfcGFyYW0pKSB7Cj4+PiArCQlp bnRlbF9hY3RpdmVfZW5naW5lczIgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7Cj4+PiArCQly ZXR1cm4gLUVOT0RFVjsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlxdWVyeV9lbmdpbmUgPSAoc3RydWN0 IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvICopIHF1ZXJ5X2J1ZmZlcjsKPj4+ICsJcXVlcnlf ZW5naW5lcyhmZCwgcXVlcnlfZW5naW5lKTsKPj4KPj4gRG8gYSB0d28gc3RhZ2UgcXVlcnkgaGVy ZSAtIGZpcnN0IGFzayBmb3IgcmVxdWlyZWQgYnVmZmVyIHNpemUsIHRoZW4KPj4gYWxsb2NhdGUg aXQgYW5kIHF1ZXJ5Ogo+Pgo+PiAJc2l6ZSA9IHF1ZXJ5X2VuZ2luZXMoZmQsIE5VTEwsIDApOwo+ PiAJcXVlcnlfZW5naW5lID0gbWFsbG9jKHNpemUpOwo+PiAJcXVlcnlfZW5naW5lcyhmZCwgcXVl cnlfZW5naW5lLCBzaXplKTsKPiAKPiBBcyBhYm92ZSA6KSB0aGlzIGlzIGhvdyBJIGRpZCBpdCBh dCB0aGUgYmVnaW5uaW5nIGFuZCB3aXRoIENocmlzCj4gd2UgYWdyZWVkIHRoYXQgNjQgaXMgYmln IGVub3VnaCwgYW5kIHRoZW4gd2UgaGFkIHNvbWUgcmV2aWV3Cj4gcm91bmRzIG9uIGFncmVlaW5n IG9uIGJ1ZmZlciBzaXplLCBuYW1lLCBjYWxjdWxhdGlvbiBhbmQgc28KPiBvbi4KPiAKPiBTaGFs bCBJIG1vdmUgYmFjaz8gSG9uZXN0bHkgSSBsaWtlIHRoZSBkb3VibGUgY2FsbCwgYXMgd2VsbC4K CkxlYXZlIGl0IGF0IGxlYXN0IGZvciBub3cgdGhlbi4KCj4+PiArCj4+PiArCWlndF9hc3NlcnQo cXVlcnlfZW5naW5lLT5udW1fZW5naW5lcyA8IEk5MTVfRVhFQ19SSU5HX01BU0sgKyAxKTsKPj4K Pj4gUmVtb3ZlIHRoaXMgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBsaW1pdCB0aGUgc2l6ZSBvZiB0 aGUgYXJyYXkgZHVyaW5nIHRoZQo+PiBxdWVyeS4gSXQgaXMgb25seSB0aGUgZW5naW5lIG1hcCB0 aGF0IGhhcyB0aGUgbGltaXRhdGlvbi4KPiAKPiBUaGlzIGNhbWUgYWZ0ZXIgb25lIG9mIHRoZSAx MCByb3VuZHMgb2YgcmV2aWV3IGFzIHdlbGwgOikKPiBJdCdzIGluZGVlZCBhIGJpdCByZWR1bmRh bnQsIEl0J3MgbWFpbmx5IGZvciB0aGUgbWFsbG9jLAo+IHRvIGF2b2lkIGNyYXp5IGFsbG9jYXRp b24gaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZy4KPiAKPj4+ICsKPj4+ICsJaW50ZWxfYWN0 aXZlX2VuZ2luZXMyID0gbWFsbG9jKChxdWVyeV9lbmdpbmUtPm51bV9lbmdpbmVzICsgMSkgKgo+ Pj4gKwkJCQkgICAgICAgc2l6ZW9mKCppbnRlbF9hY3RpdmVfZW5naW5lczIpKTsKPj4+ICsJaWd0 X2Fzc2VydChpbnRlbF9hY3RpdmVfZW5naW5lczIpOwo+Pj4gKwo+Pj4gKwlmb3IgKGkgPSAwOyBp IDwgcXVlcnlfZW5naW5lLT5udW1fZW5naW5lczsgaSsrKSB7Cj4+PiArCQljaGFyICpuYW1lOwo+ Pj4gKwkJaW50IGNsYXNzID0gcXVlcnlfZW5naW5lLT5lbmdpbmVzW2ldLmVuZ2luZV9jbGFzczsK Pj4+ICsJCWludCBpbnN0YW5jZSA9IHF1ZXJ5X2VuZ2luZS0+ZW5naW5lc1tpXS5lbmdpbmVfaW5z dGFuY2U7Cj4+Cj4+IENvdWxkIHVzZSBfX3UxNiB0byBtYXRjaCB1YXBpLgo+IAo+IFN1cmUhCj4g Cj4+PiArCj4+PiArCQlpbnRlbF9hY3RpdmVfZW5naW5lczJbaV0uY2xhc3MgPSBjbGFzczsKPj4+ ICsJCWludGVsX2FjdGl2ZV9lbmdpbmVzMltpXS5pbnN0YW5jZSA9IGluc3RhbmNlOwo+Pj4gKwo+ Pj4gKwkJLyogaWYgd2UgZG9uJ3QgcmVjb2duaXNlIHRoZSBjbGFzcywgdGhlbiB3ZSBtYXJrIGl0 IGFzICJ1bmsiICovCj4+PiArCQlpZiAoY2xhc3MgPj0gQVJSQVlfU0laRShjbGFzc19uYW1lcykg fHwgIWNsYXNzX25hbWVzW2NsYXNzXSkKPj4KPj4gU2Vjb25kIGNvbmRpdGlvbiBzZWVtcyB0byBi ZSBub3QgbmVlZGVkIGF0IHRoZSBtb21lbnQuCj4gCj4gWWVzLCBvZiBjb3Vyc2UsIGl0IG11c3Qg YmUgYSBsZWZ0b3Zlci4KPiAKPj4+ICtzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmdl dF9hY3RpdmVfZW5naW5lcyhpbnQgZmQpCj4+Cj4+IFVuZXhwb3J0IHRoaXMgb25lPwo+IAo+IEkg dGhvdWdodCBzb21lb25lIG1pZ2h0IG5lZWQgaXQsIEkgd2lsbCBkbyBpdCBzdGF0aWMgYW5kIHJl d29yawo+IGl0IHdpdGggdGhlIGJvb2wgZ2VtX2hhc19lbmdpbmVfdG9wb2xvZ3koKSBhcyB0aGV5 IHdvdWxkIGJlY29tZQo+IHZlcnkgc2ltaWxhci4KPiAKPj4+ICt7Cj4+PiArCWlmIChpbml0X2Vu Z2luZV9saXN0KGZkKSkgewo+Pj4gKwkJaWd0X2luZm8oInVzaW5nIHByZS1hbGxvY2F0ZWQgZW5n aW5lIGxpc3RcbiIpOwo+Pj4gKwkJcmV0dXJuIE5VTEw7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0 dXJuIGludGVsX2FjdGl2ZV9lbmdpbmVzMjsKPj4+ICt9Cj4+PiArCj4+PiArc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyICpnZW1fc2V0X2NvbnRleHRfZ2V0X2VuZ2luZXMoaW50IGZkLAo+ Pj4gKwkJCQkJCQkgICAgdWludDMyX3QgY3R4X2lkKQo+Pgo+PiBJIGZpbmQgdGhlIG5hbWUgb2Yg dGhpcyBmdW5jdGlvbiByZWFsbHkgY29uZnVzaW5nIChzZXQgZ2V0IHdoYXQ/KS4gQ2FuIEkKPj4g c3VnZ2VzdCBfX2dlbV9wcmVwYXJlX2NvbnRleHRfZW5naW5lcyBvciBzb21ldGhpbmcgbGlrZSB0 aGF0Pwo+IAo+IFRoZSBuYW1lIG1lYW5zICJzZXQgY29udGV4dCBhbmQgZ2V0IGVuZ2luZXMiLCBh cyBpdCdzIGEgImdldF8iCj4ga2luZCBvZiBmdW5jdGlvbi4gQnV0IGFzIGl0IGNhbWUgb3V0LCBJ IGhhdmUgYSB2ZXJ5IGxpbWl0ZWQKPiBpbWFnaW5hdGlvbiBmb3IgbmFtZXMgY2hvaWNlLiBJIHdp bGwgY2FsbCBpdAo+IF9fZ2VtX3ByZXBhcmVfY29udGV4dF9lbmdpbmVzKCksIHRoZW4uCj4gCj4+ PiArewo+Pj4gKwlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmFjdGl2ZV9lbmdpbmVz ID0gZ2V0X2FjdGl2ZV9lbmdpbmVzKGZkKTsKPj4+ICsKPj4+ICsJaWYgKCFhY3RpdmVfZW5naW5l cykKPj4+ICsJCXJldHVybiBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7Cj4+Cj4+IFNvIHdpdGhv dXQgZW5naW5lIGRpc2NvdmVyeSB0aGUgZnVuY3Rpb24gd2lsbCBub3QgY29uZmlndXJlIHRoZSBl bmdpbmUgbWFwLgo+PiBIb3cgd2lsbCB0aGUgY29kZSBpbnNpZGUgZm9yX2VhY2hfZW5naW5lMiBi ZSBhYmxlIHRvIHdvcmsgdGhlbj8KPiAKPiBJdCdzIHRoaXMgcGFydCBvZiB0aGUgZm9yX2VhY2hf ZW5naW5lMiB0aGF0IHdvdWxkIG1ha2UgaXQgd29yazoKPiAKPiAgIGZvcl9pZiAoZ2VtX2hhc19l bmdpbmVfdG9wb2xvZ3koKSB8fCBcCj4gICAgICAgICAgIGdlbV9oYXNfZW5naW5lKGZkLCBlMl9f LT5jbGFzcywgZTJfXy0+aW5zdGFuY2UpKQo+IAo+IFdlIGhhZCBxdWl0ZSBzb21lIGRpc2N1c3Np b25zIGFib3V0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kCj4gdGhlIHdob2xlIHRoaW5nIGlz IGRlc2lnbmVkIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUsIG90aGVyd2lzZSwKPiBJIHdvdWxk IGhhdmUgcmVtb3ZlZCBxdWl0ZSBzb21lIGNvZGUgZnJvbSB0aGUgYWJvdmUuCgpZZXMsIEkgY29t bWVudCBvbiB0aGF0IGluIHRoZSBvdGhlciByZXBseS4KCj4+IEkgZ3Vlc3MgaXQncyBva2F5IHNp bmNlIHdlIGRvbid0IGV4cGVjdCB0byBzZWUgYSBrZXJuZWwgd2l0aCBjdHggZW5naW5lIG1hcAo+ PiBzdXBwb3J0IGFuZCBubyBlbmdpbmUgZGlzY292ZXJ5IGJ1dCBpdCBmZWVscyBhIGJpdCB1bm5h dHVyYWwuCj4+Cj4+IEJ1dCBJIHRoaW5rIGl0IGVmZmVjdGl2ZWx5IG1lYW5zIHlvdSBzaG91bGQg aGF2ZSBpZ3RfcmVxdWlyZV9nZW1fZW5naW5lX2xpc3QKPj4gaW4gaGVyZSBzaW5jZSBpdCBpcyBv dGhlcndpc2Ugbm90IHVzYWJsZSBmcm9tIHRoZSBmb3JfZWFjaF9lbmdpbmUyIGl0ZXJhdG9yLgo+ Pgo+Pj4gKwo+Pj4gKwlzZXRfY3R4X3BhcmFtX2VuZ2luZXMoZmQsIGN0eF9pZCk7Cj4+Cj4+IFlv dSBuZWVkIHRvIGhhbmRsZSB0aGUgdXNlIGNhc2Ugd2hlcmUgdGhlIGNvbnRleHQgYWxyZWFkeSBo YXMgYSBtYXAKPj4gY29uZmlndXJlZCBpbnN0ZWFkIG9mIG92ZXJyaWRpbmcgaXQuIFNob3VsZCBi ZSBlYXN5Lgo+IAo+IFllcywgdGhpcyBpcyByZWxldmFudCB0byB5b3VyIGNvbW1lbnQgYWJvdmUs IGFib3V0IHRoZQo+IGlndF9yZXF1aXJlKDxuZXdfYXBpPikuIFRoaXMgcGFydCBpcyBjaGVja2Vk IGluCj4gJ2dldF9hY3RpdmVfZW5naW5lcyhmZCknLCB0aGF0IHJldHVybnMgTlVMTCBpZiB3ZSBk byBub3QgaGF2ZSB0aGUKPiBuZXcgdWFwaSBhbmQgdGhlcmVmb3JlIGl0IHJldHVybnMgdGhlIG9s ZCBsaXN0IG9mIGVuZ2luZXMuCj4gCj4gYWRkaW5nIHRoZSBpZ3RfcmVxdWlyZSgpIChhc3NldD8p IHdvdWxkIGJlIHJlZHVuZGFudC4KPiBBbSBJIG1pc3NpbmcgYW55IHVzZSBjYXNlPwoKQUZBSVIg Q2hyaXMgd2FudGVkIGl0IHRvIHN1cHBvcnQgdGhlIHVzZSBjYXNlIHdoZXJlIGhlIGNvbmZpZ3Vy ZXMgdGhlIAplbmdpbmUgbWFwIGFuZCBwYXNzZXMgdGhlIGNvbnRleHQgdG8gZm9yX2VhY2hfZW5n aW5lMi4gTWF5YmUgaGUgY2hhbmdlZCAKaGlzIG1pbmQ/CgpJdCB3b3VsZCBiZSB0cmlja3kgdG8g ZG8gc2luY2UgdGhlbiB0aGVyZSBpcyBubyBpbnRlbF9hY3RpdmVfZW5naW5lIAphcnJheSB0byB3 YWxrLi4gQ291bGQgb25seSBkZWZpbmUgdGhlIGl0ZXJhdG9yIHRoYXQgdGhlIHBvaW50ZXIgdG8g CmVuZ2luZSBpcyBzb21ldGltZXMgbm90IHZhbGlkIChtdXN0IGJlIGNoZWNrZWQpIGFuZCBhZGRl ZCBpbmRleCB1c2VkIHRvIApzdWJtaXQuIE5vdCBzdXJlLCBkZXBlbmRzIGlmIENocmlzIHN0aWxs IHdhbnRzIHRoaXMgZmVhdHVyZS4KCj4+PiArI2lmbmRlZiBHRU1fUVVFUllfSAo+Pj4gKyNkZWZp bmUgR0VNX1FVRVJZX0gKPj4KPj4gR0VNX0VOR0lORV9UT1BPTE9HWV9ICj4gCj4gWWVzIDopIFRo aXMgbGlicmFyeSB3YXMgYWZmZWN0ZWQgYnkgYW4gZXh0ZW5zaXZlIG5hbWUgY2hhbmdpbmcsCj4g ZHVlIHRvIG15IGxhY2sgb2YgaW1hZ2luYXRpb24gOikKPiAKPj4+IC1jb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMyW10gPSB7Cj4+PiAr c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyIGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzMltd ID0gewo+Pgo+PiBUaGlzIG9uZSBjYW4ndCBzdGF5IGNvbnN0Pwo+IAo+IFllcywgSSBoYXRlIHRo aXMgYml0IGFzIHdlbGwhIEkgcmVtb3ZlZCBoZXJlIHRoZSBjb25zdCwgYmVjYXVzZSBJCj4gd2Fu dGVkIGFjdGl2ZV9lbmdpbmVzMiB0byBwb2ludCB0byBleGVjdXRpb25fZW5naW5lMi4KPiAKPiBh Y3RpdmVfZW5naW5lczIgY2Fubm90IGJlIGNvbnN0LCBzbyB0aGF0IEkgY2Fubm90IG1ha2UgaXQg cG9pbnQKPiB0byB0aGlzIG9uZSwgdGhlcmVmb3JlIEkgaGF2ZSB0byByZW1vdmUgdGhlIGNvbnN0 IGZyb20gaGVyZS4KPiAKPiBCdXQsIGluZGVlZCwgYmVjYXVzZSBub3cgSSBhbSB1c2luZyB0aGUg ImdldF9lbmdpbmUuLi4oKSIgYW5kCj4gYmVjYXVzZSBJIGFtIGdvaW5nIHRvIHJld29yayB0aGUg J2Jvb2wgaGFzX2VuZ2luZV90b3BvbG9neSgpJwo+IGZ1bmN0aW9uLCBhcHByb2FjaCwgSSBtaWdo dCBub3QgbmVlZCBhbnltb3JlIHRvIHJlZmVyIHRvIHRoaXMKPiBvbmUuCgpIbSB5ZXMsIHRoZSBj b25zdCBoZWxsLi4gc2VlIHdoYXQncyBlYXNpZXN0IHRoZW4uCgo+IFdoYXQgd2lsbCBoYXBwZW4s IHRob3VnaCwgaXMgdGhhdCB3ZSB3b3VsZCB0aGVuIG5lZWQsIGF0IHNvbWUKPiBwb2ludCwgdG8g cGF0Y2ggYWxsIHRoZSB0ZXN0cyB0aGF0IHJlZmVyIHRvCj4gaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZXMyLgoKSSB0aGluayBrZWVwIHRoZSBiaWcgY2hhbmdlcyB0byBtaW5pbXVtIGZvciB0aGlzIHNl cmllcyBhdCB0aGlzIHN0YWdlIAphbmQgd2UganVzdCB0cnkgdG8gbWFrZSBpdCB3b3JrIGdvb2Qg ZW5vdWdoIGZvciB0aGUgbWVkaWEgc2NhbGFiaWxpdHkgCnJlcXVpcmVtZW50LgoKUmVnYXJkcywK ClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=