From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 1/3] igt/gem_stolen: Verifying extended gem_create ioctl Date: Fri, 03 Jul 2015 10:05:05 +0100 Message-ID: <55965041.3070205@linux.intel.com> References: <1435742797-4949-1-git-send-email-ankitprasad.r.sharma@intel.com> <1435742797-4949-2-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 0B2826E025 for ; Fri, 3 Jul 2015 02:05:08 -0700 (PDT) In-Reply-To: <1435742797-4949-2-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ankitprasad.r.sharma@intel.com, intel-gfx@lists.freedesktop.org Cc: akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA3LzAxLzIwMTUgMTA6MjYgQU0sIGFua2l0cHJhc2FkLnIuc2hhcm1hQGludGVsLmNvbSB3 cm90ZToKPiBGcm9tOiBBbmtpdHByYXNhZCBTaGFybWEgPGFua2l0cHJhc2FkLnIuc2hhcm1hQGlu dGVsLmNvbT4KPgo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUgdGVzdGNhc2VzIGZvciB2ZXJpZnlpbmcg dGhlIG5ldyBleHRlbmRlZAo+IGdlbV9jcmVhdGUgaW9jdGwuIEJ5IG1lYW5zIG9mIHRoaXMgZXh0 ZW5kZWQgaW9jdGwsIG1lbW9yeQo+IHBsYWNlbWVudCBvZiB0aGUgR0VNIG9iamVjdCBjYW4gYmUg c3BlY2lmaWVkLCBpLmUuIGVpdGhlcgo+IHNobWVtIG9yIHN0b2xlbiBtZW1vcnkuCj4gVGhlc2Ug dGVzdGNhc2VzIGluY2x1ZGUgZnVuY3Rpb25hbCB0ZXN0cyBhbmQgaW50ZXJmYWNlIHRlc3RzIGZv cgo+IHRlc3RpbmcgdGhlIGdlbV9jcmVhdGUgaW9jdGwgY2FsbCBmb3Igc3RvbGVuIG1lbW9yeSBw bGFjZW1lbnQKPgo+IHYyOiBUZXN0aW5nIHByZWFkL3B3cml0ZSBmdW5jdGlvbmFsaXR5IGZvciBz dG9sZW4gYmFja2VkIG9iamVjdHMsCj4gYWRkZWQgbG9jYWwgc3RydWN0IGZvciBleHRlbmRlZCBn ZW1fY3JlYXRlIGFuZCBnZW1fZ2V0X2FwZXJ0dXJlLAo+IHVudGlsIGhlYWRlcnMgY2F0Y2ggdXAg KENocmlzKQo+Cj4gdjM6IFJlbW92ZWQgZ2V0X2FwZXJ0dXJlIHJlbGF0ZWQgZnVuY3Rpb25zLCBl eHRlbmRlZCBnZW1fcHJlYWQKPiB0byBjb21wYXJlIHNwZWVkcyBmb3IgdXNlciBwYWdlcyB3aXRo IGFuZCB3aXRob3V0IHBhZ2UgZmF1bHRzLAo+IHVuZXhwb3NlZCBsb2NhbF9nZW1fY3JlYXRlIHN0 cnVjdCwgY2hhbmdlZCBnZW1fY3JlYXRlX3N0b2xlbgo+IHVzYWdlIChDaHJpcykKPgo+IHY0OiBT cGxpdHRpbmcgcGF0Y2ggdG8gcmVtb3ZlIGNoYW5nZXMgZnJvbSBnZW1fcHJlYWQvZ2VtX3B3cml0 ZQo+IHRvIGFub3RoZXIgcGF0Y2ggKEFua2l0KQo+Cj4gdjU6IFJlYmFzZWQgdG8gdGhlIGxhdGVz dCAoQW5raXQpCj4gICAgICBBZGRlZCBJR1RfVEVTVF9ERVNDUklQVElPTiAoVGhvbWFzIFdvb2Qp Cj4KPiBTaWduZWQtb2ZmLWJ5OiBBbmtpdHByYXNhZCBTaGFybWEgPGFua2l0cHJhc2FkLnIuc2hh cm1hIGF0IGludGVsLmNvbT4KPiAtLS0KPiAgIGxpYi9pb2N0bF93cmFwcGVycy5jICAgfCAgNTkg KysrKysrKysKPiAgIGxpYi9pb2N0bF93cmFwcGVycy5oICAgfCAgMTIgKysKPiAgIHRlc3RzL01h a2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ICAgdGVzdHMvZ2VtX3N0b2xlbi5jICAgICB8IDM2MyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICA0IGZp bGVzIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMvZ2VtX3N0b2xlbi5jCj4KPiBkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJzLmMgYi9s aWIvaW9jdGxfd3JhcHBlcnMuYwo+IGluZGV4IGEyNjlkMGYuLjBlODY4ZWIgMTAwNjQ0Cj4gLS0t IGEvbGliL2lvY3RsX3dyYXBwZXJzLmMKPiArKysgYi9saWIvaW9jdGxfd3JhcHBlcnMuYwo+IEBA IC0zODksNiArMzg5LDY1IEBAIHZvaWQgZ2VtX3N5bmMoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUp Cj4gICAJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsK PiAgIH0KPgo+ICtib29sIGdlbV9jcmVhdGVfX2hhc19zdG9sZW5fc3VwcG9ydChpbnQgZmQpCj4g K3sKPiArCXN0YXRpYyBpbnQgaGFzX3N0b2xlbl9zdXBwb3J0ID0gLTE7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2V0cGFyYW0gZ3A7Cj4gKwlpbnQgdmFsID0gLTE7Cj4gKwo+ICsJaWYgKGhhc19zdG9s ZW5fc3VwcG9ydCA8IDApIHsKPiArCQltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKPiArCQln cC5wYXJhbSA9IDM2OyAvKiBDUkVBVEVfVkVSU0lPTiAqLwo+ICsJCWdwLnZhbHVlID0gJnZhbDsK PiArCj4gKwkJLyogRG8gd2UgaGF2ZSB0aGUgZXh0ZW5kZWQgZ2VtX2NyZWF0ZV9pb2N0bD8gKi8K PiArCQlpb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCk7Cj4gKwkJaGFzX3N0 b2xlbl9zdXBwb3J0ID0gdmFsID49IDE7CgpJZiBpb2N0bCBmYWlscyBpdCB3aWxsIGRlY2xhcmUg c3RvbGVuIHN1cHBvcnQuICh2YWwgcmVtYWlucyAtMSkKCkkgd291bGQgYWxzbyBzdWdnZXN0ICJo YXNfc3RvbGVuX3N1cHBvcnQgPSB2YWwgPiAxIiBhcyBjbGVhcmVyLgoKPiArCX0KPiArCj4gKwly ZXR1cm4gaGFzX3N0b2xlbl9zdXBwb3J0Owo+ICt9Cj4gKwo+ICtzdHJ1Y3QgbG9jYWxfaTkxNV9n ZW1fY3JlYXRlX3YyIHsKPiArCXVpbnQ2NF90IHNpemU7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4g Kwl1aW50MzJfdCBwYWQ7Cj4gKyNkZWZpbmUgSTkxNV9DUkVBVEVfUExBQ0VNRU5UX1NUT0xFTiAo MTw8MCkKPiArCXVpbnQzMl90IGZsYWdzOwo+ICt9Owo+ICsKPiArI2RlZmluZSBMT0NBTF9JT0NU TF9JOTE1X0dFTV9DUkVBVEUgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9J OTE1X0dFTV9DUkVBVEUsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jcmVhdGVfdjIpCj4gKy8qKgo+ ICsgKiBnZW1fY3JlYXRlX3N0b2xlbjoKPiArICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVz Y3JpcHRvcgo+ICsgKiBAc2l6ZTogZGVzaXJlZCBzaXplIG9mIHRoZSBidWZmZXIKPiArICogQGZs YWdzOiBkZXNpcmVkIHBsYWNlbWVudCBpLmUuIHN0b2xlbiBvciBzaG1lbQo+ICsgKgo+ICsgKiBU aGlzIHdyYXBzIHRoZSBuZXcgR0VNX0NSRUFURSBpb2N0bCwgd2hpY2ggYWxsb2NhdGVzIGEKPiAr ICogbmV3IGdlbSBidWZmZXIgb2JqZWN0IG9mIEBzaXplIGFuZCBwbGFjZW1lbnQgYmFzZWQgb24g QGZsYWdzLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBUaGUgZmlsZS1wcml2YXRlIGhhbmRsZSBvZiB0 aGUgY3JlYXRlZCBidWZmZXIgb2JqZWN0Cj4gKyAqLwo+ICsKPiArdWludDMyX3QgZ2VtX2NyZWF0 ZV9zdG9sZW4oaW50IGZkLCBpbnQgc2l6ZSkKPiArewoKV2h5IGludCBmb3Igc2l6ZT8KCj4gKwlz dHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY3JlYXRlX3YyIGNyZWF0ZTsKPiArCWludCByZXQ7Cj4gKwo+ ICsJbWVtc2V0KCZjcmVhdGUsIDAsIHNpemVvZihjcmVhdGUpKTsKPiArCWNyZWF0ZS5oYW5kbGUg PSAwOwo+ICsJY3JlYXRlLnNpemUgPSBzaXplOwo+ICsJY3JlYXRlLmZsYWdzID0gSTkxNV9DUkVB VEVfUExBQ0VNRU5UX1NUT0xFTjsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBMT0NBTF9JT0NUTF9J OTE1X0dFTV9DUkVBVEUsICZjcmVhdGUpOwo+ICsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVy biAwOwo+ICsKPiArCWVycm5vID0gMDsKPiArCXJldHVybiBjcmVhdGUuaGFuZGxlOwo+ICt9Cj4g Kwo+ICsKCkludGVyZXN0aW5nbHkgZ2VtX2NyZWF0ZV9zdG9sZW4gY29waWVzIGltcGxlbWVudGF0 aW9uIGZyb20gX19nZW1fY3JlYXRlIAphbmQgZGlmZmVycyBmcm9tIG5vcm1hbCBnZW1fY3JlYXRl IGluIGhhbmRsaW5nIG9mIGlvY3RsIGZhaWx1cmUuIEJ1dCBpdCAKcmVtb3ZlcyB0aGUgZG91Ymxl IHVuZGVyc2NvcmUgZnJvbSB0aGUgbmFtZS4gSSB0aGluayB0aGlzIGNyZWF0ZXMgCnVubmVjZXNz YXJ5IGluY29uc2lzdGVuY3kuIEl0IHNob3VsZCBlaXRoZXIgaGF2ZSBkb3VibGUgdW5kZXJzY29y ZSAKcHJlZml4IG9yIGNvcHkgaW1wbGVtZW50YXRpb24gZnJvbSBnZW1fY3JlYXRlLgoKPiAgIHVp bnQzMl90IF9fZ2VtX2NyZWF0ZShpbnQgZmQsIGludCBzaXplKQo+ICAgewo+ICAgCXN0cnVjdCBk cm1faTkxNV9nZW1fY3JlYXRlIGNyZWF0ZTsKPiBkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBw ZXJzLmggYi9saWIvaW9jdGxfd3JhcHBlcnMuaAo+IGluZGV4IGJjNWQ0YmQuLmJmZjUxMzUgMTAw NjQ0Cj4gLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmgKPiArKysgYi9saWIvaW9jdGxfd3JhcHBl cnMuaAo+IEBAIC01Niw2ICs1Niw4IEBAIHZvaWQgZ2VtX3JlYWQoaW50IGZkLCB1aW50MzJfdCBo YW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdm9pZCAqYnVmLCB1aW50NjRfdCBsZW5nCj4gICB2b2lk IGdlbV9zZXRfZG9tYWluKGludCBmZCwgdWludDMyX3QgaGFuZGxlLAo+ICAgCQkgICAgdWludDMy X3QgcmVhZF9kb21haW5zLCB1aW50MzJfdCB3cml0ZV9kb21haW4pOwo+ICAgdm9pZCBnZW1fc3lu YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7Cj4gK2Jvb2wgZ2VtX2NyZWF0ZV9faGFzX3N0b2xl bl9zdXBwb3J0KGludCBmZCk7Cj4gK3VpbnQzMl90IGdlbV9jcmVhdGVfc3RvbGVuKGludCBmZCwg aW50IHNpemUpOwo+ICAgdWludDMyX3QgX19nZW1fY3JlYXRlKGludCBmZCwgaW50IHNpemUpOwo+ ICAgdWludDMyX3QgZ2VtX2NyZWF0ZShpbnQgZmQsIHVpbnQ2NF90IHNpemUpOwo+ICAgdm9pZCBn ZW1fZXhlY2J1ZihpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNi dWYpOwo+IEBAIC02Nyw2ICs2OSwxNiBAQCBib29sIGdlbV9tbWFwX19oYXNfd2MoaW50IGZkKTsK PiAgIHZvaWQgKmdlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qg b2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKPgo+ICAgLyoqCj4gKyAqIGdl bV9yZXF1aXJlX3N0b2xlbl9zdXBwb3J0Ogo+ICsgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBk ZXNjcmlwdG9yCj4gKyAqCj4gKyAqIFRlc3QgbWFjcm8gdG8gcXVlcnkgd2hldGhlciBzdXBwb3J0 IGZvciBhbGxvY2F0aW5nIG9iamVjdHMgZnJvbSBzdG9sZW4KPiArICogbWVtb3J5IGlzIGF2YWls YWJsZS4gQXV0b21hdGljYWxseSBza2lwcyB0aHJvdWdoIGlndF9yZXF1aXJlKCkgaWYgbm90Lgo+ ICsgKi8KPiArI2RlZmluZSBnZW1fcmVxdWlyZV9zdG9sZW5fc3VwcG9ydChmZCkgXAo+ICsJCQlp Z3RfcmVxdWlyZShnZW1fY3JlYXRlX19oYXNfc3RvbGVuX3N1cHBvcnQoZmQpKQo+ICsKPiArLyoq Cj4gICAgKiBnZW1fcmVxdWlyZV9tbWFwX3djOgo+ICAgICogQGZkOiBvcGVuIGk5MTUgZHJtIGZp bGUgZGVzY3JpcHRvcgo+ICAgICoKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNl cyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBiOTQ3OWNjLi4zMjRjYmI1IDEwMDY0 NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCj4gQEAgLTU1LDYgKzU1LDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKPiAgIAlnZW1fcmVz ZXRfc3RhdHMgXAo+ICAgCWdlbV9yaW5nZmlsbCBcCj4gICAJZ2VtX3NldF90aWxpbmdfdnNfYmx0 IFwKPiArCWdlbV9zdG9sZW4gXAo+ICAgCWdlbV9zdG9yZWR3X2JhdGNoZXNfbG9vcCBcCj4gICAJ Z2VtX3N0cmVhbWluZ193cml0ZXMgXAo+ICAgCWdlbV90aWxlZF9ibGl0cyBcCj4gZGlmZiAtLWdp dCBhL3Rlc3RzL2dlbV9zdG9sZW4uYyBiL3Rlc3RzL2dlbV9zdG9sZW4uYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOWNhYWVmZAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi90ZXN0cy9nZW1fc3RvbGVuLmMKPiBAQCAtMCwwICsxLDM2MyBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgwqkgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgoKSXMgdGhlIHllYXIgY29ycmVjdD8KCj4g KyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H Uwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIEFu a2l0cHJhc2FkIFNoYXJtYSA8YW5raXRwcmFzYWQuci5zaGFybWEgYXQgaW50ZWwuY29tPgo+ICsg Kgo+ICsgKi8KPiArCj4gKy8qKiBAZmlsZSBnZW1fY3JlYXRlX3N0b2xlbi5jCj4gKyAqCj4gKyAq IFRoaXMgaXMgYSB0ZXN0IGZvciB0aGUgZXh0ZW5kZWQgZ2VtX2NyZWF0ZSBpb2N0bCwgdGhhdCBp bmNsdWRlcyBhbGxvY2F0aW9uCj4gKyAqIG9mIG9iamVjdCBmcm9tIHN0b2xlbiBtZW1vcnkKCk1p c3NpbmcgZnVsbCBzdG9wLgoKPiArICoKPiArICogVGhlIGdvYWwgaXMgdG8gc2ltcGx5IGVuc3Vy ZSB0aGUgYmFzaWNzIHdvcmssIGFuZCBpbnZhbGlkIGlucHV0IGNvbWJpbmF0aW9ucwo+ICsgKiBh cmUgcmVqZWN0ZWQuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVk ZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RyaW5n Lmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiArI2lu Y2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lz L3RpbWUuaD4KPiArI2luY2x1ZGUgPGdldG9wdC5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS5oPgo+ ICsKPiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9idWZt Z3IuaCIKPiArI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCj4gKyNpbmNsdWRlICJpbnRl bF9pby5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVkZSAiaWd0X2F1 eC5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVkZSAiZHJtLmgiCj4gKyNpbmNs dWRlICJpOTE1X2RybS5oIgo+ICsKPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRoaXMgdGVzdCB2 ZXJpZmllcyB0aGUgZXhldGVuZGVkIGdlbV9jcmVhdGUgaW9jdGwsIgo+ICsJCSAgICAgIiB0aGF0 IGluY2x1ZGVzIGFsbG9jYXRpb24gb2Ygb2JqIGZyb20gc3RvbGVuIHJlZ2lvbiIpOwo+ICsjZGVm aW5lIENMRUFSKHMpIG1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKQo+ICsjZGVmaW5lIFNJWkUgMTAy NCoxMDI0Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKPiAr c3RhdGljIHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Cj4gKwo+ICtzdGF0aWMgdm9p ZCB2ZXJpZnlfY29weV9vcChkcm1faW50ZWxfYm8gKnNyYywgZHJtX2ludGVsX2JvICpkZXN0KQo+ ICt7Cj4gKwl1aW50MzJfdCAqdmlydCwgaSwgcmV0Owo+ICsJLyogRmlsbCB0aGUgc3JjIEJPIHdp dGggZHdvcmRzICovCj4gKwlyZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoc3JjKTsKPiAr CWlndF9hc3NlcnQoIXJldCk7Cj4gKwo+ICsJdmlydCA9IHNyYy0+dmlydHVhbDsKPiArCWZvciAo aSA9IDA7IGkgPCBTSVpFLzQ7IGkrKykKClRoZXJlIGlzIGEgbG90IG9mIHRoZXNlIGhhcmRjb2Rl ZCBmb3VycyBhcm91bmQuIE1heWJlIGl0IHdvdWxkIGJlIG5pY2VyIAp0byB1c2Ugc2l6ZW9mKCp2 aXJ0KSBvciAjZGVmaW5lIFNJWkVfRFdPUkRTIC4uIG9yIHNvbWV0aGluZy4KCj4gKwkJdmlydFtp XSA9IGk7Cj4gKwo+ICsJaW50ZWxfY29weV9ibyhiYXRjaCwgZGVzdCwgc3JjLCBTSVpFKTsKPiAr Cj4gKwlyZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoZGVzdCk7Cj4gKwlpZ3RfYXNzZXJ0 KCFyZXQpOwo+ICsKPiArCXZpcnQgPSBkZXN0LT52aXJ0dWFsOwo+ICsJLyogdmVyaWZ5ICovCj4g Kwlmb3IgKGkgPSAwOyBpIDwgU0laRS80OyBpKyspIHsKPiArCQlpZiAodmlydFtpXSAhPSBpKSB7 Cj4gKwkJCWZwcmludGYoc3RkZXJyLCAiRXhwZWN0ZWQgMHglMDh4LCBmb3VuZCAweCUwOHggIgo+ ICsJCQkJCSJhdCBvZmZzZXQgMHglMDh4XG4iLAo+ICsJCQkJCWksIHZpcnRbaV0sIGkgKiA0KTsK CkRvZXNuJ3QgJXggYWRkICcweCcgcHJlZml4IGFscmVhZHk/CgpCdXQgcHJvYmFibHkgY291bGQg anVzdCB1c2UgaWd0X2Fzc2VydF9lcSBoZXJlIHdpdGhvdXQgdGhlIGV4dHJhIApmcHJpbnRmLiBB bHNvIGluIG90aGVyIGlkZW50aWNhbCBwbGFjZXMuCgo+ICsJCQlpZ3RfYXNzZXJ0KHZpcnRbaV0g PT0gaSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWRybV9pbnRlbF9ib191bm1hcChzcmMpOwo+ICsJ ZHJtX2ludGVsX2JvX3VubWFwKGRlc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdG9sZW5f cHdyaXRlKGludCBmZCkKPiArewo+ICsJZHJtX2ludGVsX2JvICpibzsKPiArCXVpbnQzMl90IGJ1 ZltTSVpFLzRdOwo+ICsJdWludDMyX3QgaGFuZGxlID0gMDsKPiArCXVpbnQzMl90ICp2aXJ0Owo+ ICsJaW50IGksIHJldCA9IDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IFNJWkUvNDsgaSArKykK ClN0cmF5IHNwYWNlLgoKPiArCQlidWZbaV0gPSAweGRlYWQ7Cj4gKwo+ICsJZ2VtX3JlcXVpcmVf c3RvbGVuX3N1cHBvcnQoZmQpOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGVfc3RvbGVuKGZk LCBTSVpFKTsKPiArCWlndF9hc3NlcnQoaGFuZGxlICE9IDApOwo+ICsKPiArCWdlbV93cml0ZShm ZCwgaGFuZGxlLCAwLCBidWYsIFNJWkUpOwo+ICsJYm8gPSBnZW1faGFuZGxlX3RvX2xpYmRybV9i byhidWZtZ3IsIGZkLCAiYm8iLCBoYW5kbGUpOwo+ICsKPiArCXJldCA9IGRybV9pbnRlbF9nZW1f Ym9fbWFwX2d0dChibyk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCXZpcnQgPSBiby0+ dmlydHVhbDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgU0laRS80OyBpICsrKQo+ICsJCWlndF9h c3NlcnQodmlydFtpXSA9PSAweGRlYWQpOwo+ICsKPiArCWRybV9pbnRlbF9ib191bm1hcChibyk7 Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5k bGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdG9sZW5fcHJlYWQoaW50IGZkKQo+ICt7Cj4g Kwlkcm1faW50ZWxfYm8gKmJvOwo+ICsJdWludDMyX3QgYnVmW1NJWkUvNF07Cj4gKwl1aW50MzJf dCBoYW5kbGUgPSAwOwo+ICsJdWludDMyX3QgKnZpcnQ7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiAr Cj4gKwlDTEVBUihidWYpOwo+ICsKPiArCWdlbV9yZXF1aXJlX3N0b2xlbl9zdXBwb3J0KGZkKTsK PiArCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwlpZ3RfYXNz ZXJ0KGhhbmRsZSAhPSAwKTsKPiArCj4gKwlibyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGJ1 Zm1nciwgZmQsICJibyIsIGhhbmRsZSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2ludGVsX2dlbV9ib19t YXBfZ3R0KGJvKTsKPiArCWlndF9hc3NlcnQoIXJldCk7Cj4gKwo+ICsJdmlydCA9IGJvLT52aXJ0 dWFsOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBTSVpFLzQ7IGkgKyspCj4gKwkJdmlydFtpXSA9 IDB4ZGVhZDsKPiArCj4gKwlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwo+ICsJZHJtX2ludGVsX2Jv X3VucmVmZXJlbmNlKGJvKTsKPiArCj4gKwlnZW1fcmVhZChmZCwgaGFuZGxlLCAwLCBidWYsIFNJ WkUpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBTSVpFLzQ7IGkgKyspCj4gKwkJaWd0X2Fzc2Vy dChidWZbaV0gPT0gMHhkZWFkKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfdGVzdChpbnQgZmQpCj4gK3sKPiArCWRybV9pbnRlbF9i byAqc3JjLCAqZGVzdDsKPiArCXVpbnQzMl90IHNyY19oYW5kbGUgPSAwLCBkZXN0X2hhbmRsZSA9 IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlnZW1fcmVxdWlyZV9zdG9sZW5fc3VwcG9ydChm ZCk7Cj4gKwo+ICsJc3JjX2hhbmRsZSA9IGdlbV9jcmVhdGVfc3RvbGVuKGZkLCBTSVpFKTsKPiAr CWlndF9hc3NlcnQoc3JjX2hhbmRsZSAhPSAwKTsKPiArCj4gKwlkZXN0X2hhbmRsZSA9IGdlbV9j cmVhdGVfc3RvbGVuKGZkLCBTSVpFKTsKPiArCWlndF9hc3NlcnQoZGVzdF9oYW5kbGUgIT0gMCk7 Cj4gKwo+ICsJc3JjID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oYnVmbWdyLCBmZCwgInNyY19i byIsIHNyY19oYW5kbGUpOwo+ICsJZGVzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGJ1Zm1n ciwgZmQsICJkc3RfYm8iLCBkZXN0X2hhbmRsZSk7Cj4gKwo+ICsJaWd0X2Fzc2VydChzcmMgIT0g TlVMTCk7Cj4gKwlpZ3RfYXNzZXJ0KGRlc3QgIT0gTlVMTCk7Cj4gKwo+ICsJdmVyaWZ5X2NvcHlf b3Aoc3JjLCBkZXN0KTsKPiArCj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uoc3JjKTsKPiAr CWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShkZXN0KTsKPiArCWdlbV9jbG9zZShmZCwgc3JjX2hh bmRsZSk7Cj4gKwlnZW1fY2xvc2UoZmQsIGRlc3RfaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgdmVyaWZ5X29iamVjdF9jbGVhcihpbnQgZmQpCj4gK3sKPiArCWRybV9pbnRlbF9ibyAq Ym87Cj4gKwl1aW50MzJfdCBoYW5kbGUgPSAwOwo+ICsJdWludDMyX3QgKnZpcnQ7Cj4gKwlpbnQg aSwgcmV0ID0gMDsKPiArCj4gKwlnZW1fcmVxdWlyZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZV9zdG9sZW4oZmQsIFNJWkUpOwo+ICsJaWd0X2Fzc2VydCho YW5kbGUgIT0gMCk7Cj4gKwo+ICsJYm8gPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhidWZtZ3Is IGZkLCAidmVyaWZ5X2JvIiwgaGFuZGxlKTsKPiArCWlndF9hc3NlcnQoYm8gIT0gTlVMTCk7Cj4g Kwo+ICsJcmV0ID0gZHJtX2ludGVsX2dlbV9ib19tYXBfZ3R0KGJvKTsKPiArCWlndF9hc3NlcnQo cmV0ID09IDApOwoKVGhlcmUgYXJlIGlndF9hc3NlcnRfZXEgYW5kIGlndF9hc3NlcnRfbmVxIGJ1 dCBpbiB1c2VzIHN1Y2ggYXMgaGVyZSAKKE5VTEwgdnMgbm9uLU5VTEwpIEkgYW0gbm90IHRvbyBi b3RoZXJlZC4KCj4gKwkvKiBWZXJpZnkgaWYgdGhlIEJPIGlzIHplcm9lZCAqLwo+ICsJdmlydCA9 IGJvLT52aXJ0dWFsOwo+ICsJZm9yIChpID0gMDsgaSA8IFNJWkUgLyA0OyBpKyspCj4gKwkJaWd0 X2Fzc2VydCh2aXJ0W2ldID09IDApOwo+ICsKPiArCWRybV9pbnRlbF9ib191bm1hcChibyk7Cj4g Kwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdG9sZW5fZmlsbF9wdXJnZV90ZXN0KGludCBmZCkK PiArewo+ICsJZHJtX2ludGVsX2JvICpibzsKPiArCWludCBtcmV0ID0gMCwgcmV0ID0gMCwgb2Jq X2NvdW50ID0gMCwgaSA9IDA7Cj4gKwlpbnQgX3JldCA9IDAsIGogPSAwOwo+ICsJdWludDMyX3Qg aGFuZGxlWzEwMF0gPSB7MH07Cj4gKwl1aW50MzJfdCBuZXdfaGFuZGxlID0gMDsKClRoZXNlIHR3 byBkb24ndCBuZWVkIHRvIGJlIGluaXRpYWxpemVkLCBwbHVzLCBJIGRvbid0IHNlZSBhbnkgcHJv dGVjdGlvbiAKZm9yIG92ZXJmbG93aW5nIHRoZSBoYW5kbGUgYXJyYXkgYmVsb3c/Cgo+ICsJdWlu dDMyX3QgKnZpcnQ7Cj4gKwlpbnQgcmV0YWluZWQgPSAwOwo+ICsKPiArCWdlbV9yZXF1aXJlX3N0 b2xlbl9zdXBwb3J0KGZkKTsKPiArCj4gKwkvKiBFeGhhdXN0IFN0b2xlbiBzcGFjZSAqLwo+ICsJ d2hpbGUocmV0ID09IDApIHsKPiArCQlyZXQgPSAtMTsKPiArCQloYW5kbGVbaV0gPSBnZW1fY3Jl YXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwkJaWYgKGhhbmRsZVtpXSAhPSAwKSB7Cj4gKwkJCXJl dCA9IDA7Cj4gKwkJCWJvID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oYnVmbWdyLCBmZCwKPiAr CQkJCQkJICAgICAidmVyaWZ5X2JvIiwgaGFuZGxlW2ldKTsKPiArCQkJaWd0X2Fzc2VydChibyAh PSBOVUxMKTsKPiArCj4gKwkJCV9yZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoYm8pOwo+ ICsJCQlpZ3RfYXNzZXJ0KF9yZXQgPT0gMCk7Cj4gKwo+ICsJCQl2aXJ0ID0gYm8tPnZpcnR1YWw7 Cj4gKwkJCWZvciAoaiA9IDA7IGogPCBTSVpFIC8gNDsgaisrKQo+ICsJCQkJdmlydFtqXSA9IDB4 YWI7Cj4gKwo+ICsJCQlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwo+ICsJCQlkcm1faW50ZWxfYm9f dW5yZWZlcmVuY2UoYm8pOwo+ICsKPiArCQkJb2JqX2NvdW50Kys7Cj4gKwkJfQoKQWJvdmUgbG9v cCBhbmQgdmFyaW91cyAicmV0IiBmbGF2b3VycyBsb29rcyBsaWtlIGNvdWxkIGJlIHNpbXBsaWZp ZWQuCgpJIHRoaW5rIGlmIHlvdSBjb252ZXJ0IHRvIGRvLXdoaWxlIHlvdSBjYW4gYXZvaWQgdGhl ICJyZXQgPSAtMTsgLi4uIHJldCAKPSAwOyIgZGFuY2UuCgpkbyB7CgoJaGFuZGxlW2ldID0gZ2Vt X2NyZWF0ZV9zdG9sZW4oKQoJaWYgKGhhbmRsZVtpXSkgewoJCS4uLgoJCTx0aGUgbWFpbiBwYXJ0 IG9mIHlvdXIgbG9vcD4KCQkuLi4KCX0KCglpKys7Cn0gd2hpbGUgKGhhbmRsZVtpLTFdKTsKCj4g KwkJaSsrOwo+ICsJfQo+ICsKPiArCWlndF9hc3NlcnQob2JqX2NvdW50ID4gMCk7Cj4gKwo+ICsJ LyogTWFyayBhbGwgc3RvbGVuIG9iamVjdHMgcHVyZ2VhYmxlICovCj4gKwlmb3IgKGkgPSAwOyBp IDwgb2JqX2NvdW50OyBpKyspCj4gKwkJcmV0YWluZWQgPSBnZW1fbWFkdmlzZShmZCwgaGFuZGxl W2ldLCBJOTE1X01BRFZfRE9OVE5FRUQpOwo+ICsKPiArCS8qIFRyeSB0byBhbGxvY2F0ZSBvbmUg bW9yZSBvYmplY3QgKi8KPiArCW5ld19oYW5kbGUgPSBnZW1fY3JlYXRlX3N0b2xlbihmZCwgU0la RSk7Cj4gKwlpZ3RfYXNzZXJ0KG5ld19oYW5kbGUgIT0gMCk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYg dGhlIHJldGFpbmVkIG9iamVjdCdzIG1lbW9yeSBjb250ZW50cyBhcmUgaW50YWN0ICovCj4gKwlm b3IgKGkgPSAwOyBpIDwgb2JqX2NvdW50OyBpKyspIHsKPiArCQlyZXRhaW5lZCA9IGdlbV9tYWR2 aXNlKGZkLCBoYW5kbGVbaV0sIEk5MTVfTUFEVl9XSUxMTkVFRCk7Cj4gKwkJaWYgKHJldGFpbmVk KSB7Cj4gKwkJCWJvID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oYnVmbWdyLCBmZCwKPiArCQkJ CQkJICAgICAidmVyaWZ5X2JvIiwgaGFuZGxlW2ldKTsKPiArCQkJaWd0X2Fzc2VydChibyAhPSBO VUxMKTsKPiArCj4gKwkJCV9yZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoYm8pOwo+ICsJ CQlpZ3RfYXNzZXJ0KF9yZXQgPT0gMCk7Cj4gKwo+ICsJCQl2aXJ0ID0gYm8tPnZpcnR1YWw7Cj4g KwkJCWZvciAoaiA9IDA7IGogPCBTSVpFIC8gNDsgaisrKQo+ICsJCQkJaWd0X2Fzc2VydCh2aXJ0 W2pdID09IDB4YWIpOwo+ICsKPiArCQkJZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKPiArCQkJZHJt X2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3Nl KGZkLCBuZXdfaGFuZGxlKTsKPiArCWZvciAoaSA9IDA7IGkgPCBvYmpfY291bnQ7IGkrKykKPiAr CQlnZW1fY2xvc2UoZmQsIGhhbmRsZVtpXSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3N0 b2xlbl9ub19tbWFwKGludCBmZCkKPiArewo+ICsJdm9pZCAqYWRkcjsKPiArCXVpbnQzMl90IGhh bmRsZSA9IDA7Cj4gKwo+ICsJZ2VtX3JlcXVpcmVfc3RvbGVuX3N1cHBvcnQoZmQpOwo+ICsKPiAr CWhhbmRsZSA9IGdlbV9jcmVhdGVfc3RvbGVuKGZkLCBTSVpFKTsKPiArCWlndF9hc3NlcnQoaGFu ZGxlICE9IDApOwo+ICsKPiArCWFkZHIgPSBnZW1fbW1hcF9fY3B1KGZkLCBoYW5kbGUsIDAsIFNJ WkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ICsJaWd0X2Fzc2VydChhZGRyID09IE5VTEwp Owo+ICsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiArfQo+ICsKPiAraWd0X21haW4KPiAr ewo+ICsJaW50IGksIGZkLCBndHRfc2l6ZV90b3RhbCwgZ3R0X3NpemVfbWFwcGFibGU7Cj4gKwl1 aW50MzJfdCBkZXZpZDsKPiArCj4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJ aWd0X2ZpeHR1cmUgewo+ICsJCWZkID0gZHJtX29wZW5fYW55KCk7Cj4gKwkJZGV2aWQgPSBpbnRl bF9nZXRfZHJtX2RldmlkKGZkKTsKPiArCj4gKwkJZHJtX2ludGVsX2dldF9hcGVydHVyZV9zaXpl cyhmZCwgKHNpemVfdCopJmd0dF9zaXplX3RvdGFsLAo+ICsJCQkJKHNpemVfdCopJmd0dF9zaXpl X21hcHBhYmxlKTsKPiArCQlidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGZkLCA0 MDk2KTsKPiArCQliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQp Owo+ICsJfQo+ICsKPiArCWlndF9zdWJ0ZXN0KCJzdG9sZW4tY2xlYXIiKQo+ICsJCXZlcmlmeV9v YmplY3RfY2xlYXIoZmQpOwo+ICsKPiArCS8qCj4gKwkgKiBzdG9sZW4gbWVtIHNwZWNpYWwgY2Fz ZXMgLSBjaGVja2luZyBmb3Igbm9uIGNwdSBtYXBwYWJsZQo+ICsJICovCj4gKwlpZ3Rfc3VidGVz dCgic3RvbGVuLW5vLW1tYXAiKQo+ICsJCXN0b2xlbl9ub19tbWFwKGZkKTsKPiArCj4gKwkvKiBj aGVja2luZyBmb3IgcHJlYWQvcHdyaXRlIGludGVyZmFjZXMgKi8KPiArCWlndF9zdWJ0ZXN0KCJz dG9sZW4tcHdyaXRlIikKPiArCQlzdG9sZW5fcHdyaXRlKGZkKTsKPiArCj4gKwlpZ3Rfc3VidGVz dCgic3RvbGVuLXByZWFkIikKPiArCQlzdG9sZW5fcHJlYWQoZmQpOwo+ICsKPiArCS8qIEZ1bmN0 aW9uYWwgVGVzdCAtIGJsdCBjb3B5ICovCj4gKwlpZ3Rfc3VidGVzdCgic3RvbGVuLWNvcHkiKQo+ ICsJCWNvcHlfdGVzdChmZCk7Cj4gKwo+ICsJLyogRmlsbGluZyBzdG9sZW4gY29tcGxldGVseSBh bmQgbWFya2luZyBhbGwgdGhlIG9iamVjdHMKPiArCSAqIHB1cmdlYWJsZS4gVGhlbiB0cnlpbmcg dG8gYWRkIG9uZSBtb3JlIG9iamVjdCwgdG8gdmVyaWZ5Cj4gKwkgKiB0aGUgcHVyZ2luZyBsb2dp Yy4KPiArCSAqIEFnYWluIG1hcmtpbmcgYWxsIG9iamVjdHMgV0lMTE5FRUQgYW5kIHZlcmlmeWlu ZyB0aGUKPiArCSAqIGNvbnRlbnRzIG9mIHRoZSByZXRhaW5lZCBvYmplY3RzLgo+ICsJICovCj4g KwlpZ3Rfc3VidGVzdCgic3RvbGVuLWZpbGwtcHVyZ2UiKQo+ICsJCXN0b2xlbl9maWxsX3B1cmdl X3Rlc3QoZmQpOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlpbnRlbF9iYXRjaGJ1ZmZlcl9m cmVlKGJhdGNoKTsKPiArCQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKPiArCX0K PiArfQoKQ291bGQgYWxzbyB0ZXN0IGNyZWF0aW9uIG9mIGh1Z2Ugb2JqZWN0cyB3aGljaCBjYW4g bmV2ZXIgYmUgYWxsb2NhdGVkIApmcm9tIHN0b2xlbiwgZXNwIGlmIHNpemUgb3ZlcmZsb3cgMzIt Yml0cy4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK