From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH igt v3] lib: Add simple sysfs accessors Date: Fri, 27 May 2016 20:46:14 +0300 Message-ID: <20160527174614.GI4329@intel.com> References: <1464275276-881-1-git-send-email-chris@chris-wilson.co.uk> <1464279575-2694-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 992E66ECD8 for ; Fri, 27 May 2016 17:46:19 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1464279575-2694-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBNYXkgMjYsIDIwMTYgYXQgMDU6MTk6MzVQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IGlndF9zeXNmc19zZXQoKSBmb3Igc2V0dGluZyBhbiBhdHRyaWJ1dGUgdmlhIHN5c2Zz LCBpZ3Rfc3lzZnNfZ2V0KCkgZm9yCj4gcmVhZGluZy4KPiAKPiB2MjogTG90cyBvZiBsaXR0bGUg YnVncyBpbiBpZ3Rfc3lzZnNfZ2V0KCkKPiB2MzogUGFzcyBkZXZpY2UgdG8gb3Blbiwgc3RvcCBh c3N1bWluZyBJbnRlbCBydWxlcy4KPiB2NDogVGVzdCBvcGVuaW5nIGFuZCByZWFkaW5nIQo+IAo+ IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+ IC0tLQo+ICBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCj4gIGxpYi9pZ3Rfc3lzZnMuYyAg ICAgIHwgMjA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ICBsaWIvaWd0X3N5c2ZzLmggICAgICB8ICAzNCArKysrKysrKysKPiAgMyBmaWxlcyBj aGFuZ2VkLCAyNDEgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9z eXNmcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X3N5c2ZzLmgKPiAKPiBkaWZmIC0t Z2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4 IDEzMTZmZDIuLmY1MGZmNGQgMTAwNjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiAr KysgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0xNiw2ICsxNiw4IEBAIGxpYmludGVsX3Rv b2xzX2xhX1NPVVJDRVMgPSAJXAo+ICAJaWd0X2d0LmgJCVwKPiAgCWlndF9zdGF0cy5jCQlcCj4g IAlpZ3Rfc3RhdHMuaAkJXAo+ICsJaWd0X3N5c2ZzLmMJCVwKPiArCWlndF9zeXNmcy5oCQlcCj4g IAlpbnN0ZG9uZS5jCQlcCj4gIAlpbnN0ZG9uZS5oCQlcCj4gIAlpbnRlbF9iYXRjaGJ1ZmZlci5j CVwKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9zeXNmcy5jIGIvbGliL2lndF9zeXNmcy5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lOWRiYTBhCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2xpYi9pZ3Rfc3lzZnMuYwo+IEBAIC0wLDAgKzEsMjA1IEBACj4gKy8qCj4gKyAq IENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICog U29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lzL21vdW50Lmg+Cj4gKyNpbmNsdWRlIDxl cnJuby5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsj aW5jbHVkZSA8bGltaXRzLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPGZj bnRsLmg+Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPGk5MTVfZHJtLmg+Cj4g Kwo+ICsjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4gKwo+ICtzdGF0aWMgaW50IHJlYWROKGludCBm ZCwgY2hhciAqYnVmLCBpbnQgbGVuKQo+ICt7Cj4gKwlpbnQgdG90YWwgPSAwOwo+ICsJZG8gewo+ ICsJCWludCByZXQgPSByZWFkKGZkLCBidWYgKyB0b3RhbCwgbGVuIC0gdG90YWwpOwo+ICsJCWlm IChyZXQgPCAwICYmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJaWYgKHJldCA8PSAwKQo+ICsJCQlyZXR1cm4gdG90YWwgPzogcmV0 Owo+ICsKPiArCQl0b3RhbCArPSByZXQ7Cj4gKwl9IHdoaWxlICgxKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCB3cml0ZU4oaW50IGZkLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCj4gK3sKPiAr CWludCB0b3RhbCA9IDA7Cj4gKwlkbyB7Cj4gKwkJaW50IHJldCA9IHdyaXRlKGZkLCBidWYgKyB0 b3RhbCwgbGVuIC0gdG90YWwpOwo+ICsJCWlmIChyZXQgPCAwICYmIChlcnJubyA9PSBFSU5UUiB8 fCBlcnJubyA9PSBFQUdBSU4pKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKHJldCA8PSAw KQo+ICsJCQlyZXR1cm4gdG90YWwgPzogcmV0Owo+ICsKPiArCQl0b3RhbCArPSByZXQ7Cj4gKwl9 IHdoaWxlICgxKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9zeXNmc19vcGVuOgo+ICsgKiBA ZGV2aWNlOiBmZCBvZiB0aGUgZGV2aWNlIChvciAtMSB0byBkZWZhdWx0IHRvIEludGVsKQo+ICsg Kgo+ICsgKiBUaGlzIG9wZW5zIHRoZSBzeXNmcyBkaXJlY3RvcnkgY29ycmVzcG9uZGluZyB0byBk ZXZpY2UgZm9yIHVzZQo+ICsgKiB3aXRoIGlndF9zeXNmc19zZXQoKSBhbmQgaWd0X3N5c2ZzX2dl dCgpLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUaGUgZGlyZWN0b3J5IGZkLCBvciAtMSBv biBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGlndF9zeXNmc19vcGVuKGludCBmZCwgaW50ICppZHgp Cj4gK3sKPiArCWNoYXIgZGV2aWNlWzgwXTsKPiArCWNoYXIgcGF0aFs4MF07Cj4gKwlzdHJ1Y3Qg c3RhdCBzdDsKPiArCj4gKwlkZXZpY2VbMF0gPSAnXDAnOwo+ICsJaWYgKGZkICE9IC0xKSB7Cj4g KwkJaWYgKGZzdGF0KGZkLCAmc3QpIHx8ICFTX0lTQ0hSKHN0LnN0X21vZGUpKQo+ICsJCQlyZXR1 cm4gLTE7Cj4gKwo+ICsJCXNwcmludGYoZGV2aWNlLCAiJWQ6JWQiLCBtYWpvcihzdC5zdF9yZGV2 KSwgbWlub3Ioc3Quc3RfcmRldikpOwo+ICsJfQo+ICsKPiArCWZvciAoaW50IG4gPSAwOyBuIDwg MTY7IG4rKykgewo+ICsJCWludCBsZW4gPSBzcHJpbnRmKHBhdGgsICIvc3lzL2NsYXNzL2RybS9j YXJkJWQiLCBuKTsKPiArCQlpZiAoZGV2aWNlWzBdKSB7Cj4gKwkJCWNoYXIgdG1wWzgwXTsKPiAr CQkJaW50IHJldDsKPiArCj4gKwkJCXNwcmludGYocGF0aCArIGxlbiwgIi9kZXYiKTsKPiArCQkJ ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKPiArCQkJaWYgKGZkID09IC0xKQo+ICsJCQkJY29u dGludWU7Cj4gKwo+ICsJCQlyZXQgPSByZWFkKGZkLCB0bXAsIHNpemVvZih0bXAtMSkpOwo+ICsJ CQlpZiAocmV0IDwgMCkKPiArCQkJCXJldCA9IDA7Cj4gKwkJCXRtcFtyZXRdID0gJ1wwJzsKPiAr CQkJd2hpbGUgKHJldCA+IDAgJiYgdG1wW3JldC0xXSA9PSAnXG4nKQo+ICsJCQkJdG1wWy0tcmV0 XSA9ICdcMCc7Cj4gKwkJCWNsb3NlKGZkKTsKPiArCj4gKwkJCWlmIChzdHJjbXAodG1wLCBkZXZp Y2UpKQo+ICsJCQkJY29udGludWU7Cgpmc2NhbmY/Cgo+ICsJCX0gZWxzZSB7Cj4gKwkJCS8qIEJs ZWguIFNlYXJjaCBmb3IgaW50ZWwgKi8KPiArCQkJc3ByaW50ZihwYXRoICsgbGVuLCAiL2Vycm9y Iik7Cj4gKwkJCWlmIChzdGF0KHBhdGgsICZzdCkpCj4gKwkJCQljb250aW51ZTsKPiArCQl9Cj4g Kwo+ICsJCXBhdGhbbGVuXSA9ICdcMCc7Cj4gKwkJaWYgKGlkeCkKPiArCQkJKmlkeCA9IG47Cj4g KwkJcmV0dXJuIG9wZW4ocGF0aCwgT19SRE9OTFkpOwo+ICsJfQo+ICsKPiArCXJldHVybiAtMTsK PiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9zeXNmc19zZXQ6Cj4gKyAqIEBkaXI6IGRpcmVjdG9y eSBmb3IgdGhlIGRldmljZSBmcm9tIGlndF9zeXNmc19vcGVuKCkKPiArICogQGF0dHI6IG5hbWUg b2YgdGhlIHN5c2ZzIG5vZGUgdG8gb3Blbgo+ICsgKiBAdmFsdWU6IHRoZSBzdHJpbmcgdG8gd3Jp dGUKPiArICoKPiArICogVGhpcyB3cml0ZXMgdGhlIHZhbHVlIHRvIHRoZSBzeXNmcyBmaWxlLgo+ ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1 cmUuCj4gKyAqLwo+ICtib29sIGlndF9zeXNmc19zZXQoaW50IGRpciwgY29uc3QgY2hhciAqYXR0 ciwgY29uc3QgY2hhciAqdmFsdWUpCj4gK3sKPiArCWludCBmZCwgbGVuLCByZXQ7Cj4gKwo+ICsJ ZmQgPSBvcGVuYXQoZGlyLCBhdHRyLCBPX1dST05MWSk7Cj4gKwlpZiAoZmQgPCAwKQo+ICsJCXJl dHVybiBmYWxzZTsKPiArCj4gKwlsZW4gPSBzdHJsZW4odmFsdWUpOwo+ICsJcmV0ID0gd3JpdGVO KGZkLCB2YWx1ZSwgbGVuKTsKPiArCWNsb3NlKGZkKTsKPiArCj4gKwlyZXR1cm4gbGVuID09IHJl dDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9zeXNmc19nZXQ6Cj4gKyAqIEBkaXI6IGRpcmVj dG9yeSBmb3IgdGhlIGRldmljZSBmcm9tIGlndF9zeXNmc19vcGVuKCkKPiArICogQGF0dHI6IG5h bWUgb2YgdGhlIHN5c2ZzIG5vZGUgdG8gb3Blbgo+ICsgKgo+ICsgKiBUaGlzIHJlYWRzIHRoZSB2 YWx1ZSBmcm9tIHRoZSBzeXNmcyBmaWxlLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBBIG51 bC10ZXJtaW5hdGVkIHN0cmluZywgbXVzdCBiZSBmcmVlZCBieSBjYWxsZXIgYWZ0ZXIgdXNlLCBv ciBOVUxMCj4gKyAqIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtjaGFyICppZ3Rfc3lzZnNfZ2V0KGlu dCBkaXIsIGNvbnN0IGNoYXIgKmF0dHIpCj4gK3sKPiArCWNoYXIgKmJ1ZjsKPiArCWludCBsZW4s IG9mZnNldCwgcmVtOwo+ICsJaW50IHJldCwgZmQ7Cj4gKwo+ICsJZmQgPSBvcGVuYXQoZGlyLCBh dHRyLCBPX1JET05MWSk7Cj4gKwlpZiAoZmQgPCAwKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiAr CW9mZnNldCA9IDA7Cj4gKwlsZW4gPSA2NDsKPiArCXJlbSA9IGxlbiAtIG9mZnNldCAtIDE7Cj4g KwlidWYgPSBtYWxsb2MobGVuKTsKPiArCWlmICghYnVmKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiAr CXdoaWxlICgocmV0ID0gcmVhZE4oZmQsIGJ1ZiArIG9mZnNldCwgcmVtKSkgPT0gcmVtKSB7Cj4g KwkJY2hhciAqbmV3YnVmOwo+ICsKPiArCQluZXdidWYgPSByZWFsbG9jKGJ1ZiwgMipsZW4pOwo+ ICsJCWlmICghbmV3YnVmKQo+ICsJCQlicmVhazsKPiArCj4gKwkJbGVuICo9IDI7Cj4gKwkJb2Zm c2V0ICs9IHJldDsKPiArCQlyZW0gPSBsZW4gLSBvZmZzZXQgLSAxOwo+ICsJfQo+ICsKPiArCWlm IChyZXQgIT0gLTEpCj4gKwkJb2Zmc2V0ICs9IHJldDsKPiArCWJ1ZltvZmZzZXRdID0gJ1wwJzsK PiArCXdoaWxlIChvZmZzZXQgPiAwICYmIGJ1ZltvZmZzZXQtMV0gPT0gJ1xuJykKPiArCQlidWZb LS1vZmZzZXRdID0gJ1wwJzsKPiArCj4gK291dDoKPiArCWNsb3NlKGZkKTsKPiArCXJldHVybiBi dWY7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9zeXNmcy5oIGIvbGliL2lndF9zeXNmcy5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41YzQ5ZjY0Cj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2xpYi9pZ3Rfc3lzZnMuaAo+IEBAIC0wLDAgKzEsMzQgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9fSUdUX1NZU0ZTX0hfXwo+ ICsjZGVmaW5lIF9fSUdUX1NZU0ZTX0hfXwo+ICsKPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiAr Cj4gK2ludCBpZ3Rfc3lzZnNfb3BlbihpbnQgZGV2aWNlLCBpbnQgKmlkeCk7Cj4gK2Jvb2wgaWd0 X3N5c2ZzX3NldChpbnQgZGlyLCBjb25zdCBjaGFyICphdHRyLCBjb25zdCBjaGFyICp2YWx1ZSk7 Cj4gK2NoYXIgKmlndF9zeXNmc19nZXQoaW50IGRpciwgY29uc3QgY2hhciAqYXR0cik7Cj4gKwo+ ICsjZW5kaWYgLyogX19JR1RfU1lTRlNfSF9fICovCj4gLS0gCj4gMi44LjEKPiAKPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWls aW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApWaWxsZSBT eXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=