From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH i-g-t 1/4] lib/igt_bb_factory: Add igt_bb_factory library Date: Wed, 17 Feb 2016 09:48:26 +0000 Message-ID: <56C441EA.30406@intel.com> References: <1455269934-7586-1-git-send-email-derek.j.morton@intel.com> <1455269934-7586-2-git-send-email-derek.j.morton@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 B73E76E934 for ; Wed, 17 Feb 2016 09:48:42 +0000 (UTC) In-Reply-To: <1455269934-7586-2-git-send-email-derek.j.morton@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Derek Morton , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMi8wMi8xNiAwOTozOCwgRGVyZWsgTW9ydG9uIHdyb3RlOgo+IEFkZHMgZnVuY3Rpb25z IHRvIGNyZWF0ZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgYmF0Y2ggYnVmZmVycyB0byBwZXJmb3Jt Cj4gc2V2ZXJhbCBmdW5jdGlvbnMgaW5jbHVkaW5nOgo+IEJhdGNoIGJ1ZmZlciB3aGljaCB3aWxs IHJ1biBmb3IgYSBsb25nIGR1cmF0aW9uIHRvIHByb3ZpZGUgYSBkZWxheSBvbiBhCj4gc3BlY2lm aWVkIHJpbmcuCj4gRnVuY3Rpb24gdG8gY2FsaWJyYXRlIHRoZSBkZWxheSBiYXRjaCBidWZmZXIg dG8gcnVuIGZvciBhIHNwZWNpZmllZCBwZXJpb2QKPiBvZiB0aW1lLgo+IEZ1bmN0aW9uIHRvIGNy ZWF0ZSBhIGJhdGNoIGJ1ZmZlciB3aGljaCB3cml0ZXMgdGltZXN0YW1wcyB0byBhIGJ1ZmZlciBv YmplY3QuCj4gRnVuY3Rpb24gdG8gY29tcGFyZSB0aW1lc3RhbXBzIGFsbG93aW5nIGZvciB3cmFw cGluZyBvZiB0aGUgdmFsdWVzLgo+Cj4gSW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgZ2VtX3NjaGVk dWxlciB0ZXN0IGluaXRpYWxseSBidXQgd2lsbCBiZSB1c2VkIGJ5IG90aGVyCj4gdGVzdHMgaW4g ZGV2ZWxvcG1lbnQuCj4KPiBTaWduZWQtb2ZmLWJ5OiBEZXJlayBNb3J0b24gPGRlcmVrLmoubW9y dG9uQGludGVsLmNvbT4KPiAtLS0KPiAgIGxpYi9NYWtlZmlsZS5zb3VyY2VzIHwgICAyICsKPiAg IGxpYi9pZ3QuaCAgICAgICAgICAgIHwgICAxICsKPiAgIGxpYi9pZ3RfYmJfZmFjdG9yeS5jIHwg NDAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAgbGliL2lndF9iYl9mYWN0b3J5LmggfCAgNDcgKysrKysrCj4gICA0IGZpbGVzIGNoYW5nZWQs IDQ1MSBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9iYl9mYWN0 b3J5LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2JiX2ZhY3RvcnkuaAo+Cj4gZGlm ZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKPiBp bmRleCA0OTk5ODY4Li5jNTYwYjNlIDEwMDY0NAo+IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2Vz Cj4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtNyw2ICs3LDggQEAgbGliaW50ZWxf dG9vbHNfbGFfU09VUkNFUyA9IAlcCj4gICAJaTkxNV9yZWcuaAkJXAo+ICAgCWk5MTVfcGNpaWRz LmgJCVwKPiAgIAlpZ3QuaAkJCVwKPiArCWlndF9iYl9mYWN0b3J5LmMJXAo+ICsJaWd0X2JiX2Zh Y3RvcnkuaAlcCj4gICAJaWd0X2RlYnVnZnMuYwkJXAo+ICAgCWlndF9kZWJ1Z2ZzLmgJCVwKPiAg IAlpZ3RfYXV4LmMJCVwKPiBkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCj4gaW5k ZXggM2JlMjU1MS4uMGYyOTQyMCAxMDA2NDQKPiAtLS0gYS9saWIvaWd0LmgKPiArKysgYi9saWIv aWd0LmgKPiBAQCAtMzYsNiArMzYsNyBAQAo+ICAgI2luY2x1ZGUgImlndF9ndC5oIgo+ICAgI2lu Y2x1ZGUgImlndF9rbXMuaCIKPiAgICNpbmNsdWRlICJpZ3Rfc3RhdHMuaCIKPiArI2luY2x1ZGUg ImlndF9iYl9mYWN0b3J5LmgiCj4gICAjaW5jbHVkZSAiaW5zdGRvbmUuaCIKPiAgICNpbmNsdWRl ICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgo+ICAgI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiBk aWZmIC0tZ2l0IGEvbGliL2lndF9iYl9mYWN0b3J5LmMgYi9saWIvaWd0X2JiX2ZhY3RvcnkuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZWVhNjNjNgo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9saWIvaWd0X2JiX2ZhY3RvcnkuYwo+IEBAIC0wLDAgKzEsNDAxIEBACj4g Ky8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJ TiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIERlcmVrIE1vcnRv biA8ZGVyZWsuai5tb3J0b25AaW50ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl ICJpZ3QuaCIKPiArI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCj4gKyNpbmNsdWRlIDxz dGRpbnQuaD4KPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4g Kwo+ICsjZGVmaW5lIFNFQ19UT19OU0VDICgxMDAwICogMTAwMCAqIDEwMDApCj4gKyNkZWZpbmUg RFdPUkRTX1RPX0JZVEVTKHgpICgoeCkqNCkKPiArCj4gKyNkZWZpbmUgTUlfU1RPUkVfUkVHSVNU RVJfTUVNKExFTkdUSCkgICAoKDB4MDI0IDw8IDIzKSB8ICgoTEVOR1RIIC0gMikgJiAweGZmKSkK PiArI2RlZmluZSBNSV9NQVRIKE5ySW5zdCkgICAgICAgICAgICAgICAgICgoMHgwMUEgPDwgMjMp IHwgKChOckluc3QgLSAxKSAmIDB4M2YpKQo+ICsjZGVmaW5lIE1JX0NPTkRJVElPTkFMX0JBVENI X0JVRkZFUl9FTkQgKCgweDAzNiA8PCAyMykgfCAoMSA8PCAyMSkgfCAyKQo+ICsjZGVmaW5lIE1J X0NPUFlfTUVNX01FTSAgICAgICAgICAgICAgICAgKCgweDAyRSA8PCAyMykgfCAoMykpCj4gKwo+ ICsjZGVmaW5lIEFMVV9MT0FEKFRPLCBGUk9NKSAgKCgweDA4MCA8PCAyMCkgfCAoKFRPKSA8PCAx MCkgfCAoRlJPTSkpCj4gKyNkZWZpbmUgQUxVX1NVQiAgICAgICAgICAgICAoIDB4MTAxIDw8IDIw KQo+ICsjZGVmaW5lIEFMVV9TVE9SRShUTywgRlJPTSkgKCgweDE4MCA8PCAyMCkgfCAoKFRPKSA8 PCAxMCkgfCAoRlJPTSkpCj4gKwo+ICsjZGVmaW5lIFRJTUVTVEFNUF9vZmZzZXQgICAgICAoMHgz NTgpIC8qIEVsYXBzZWQgdGltZSBmcm9tIHN5c3RlbSBzdGFydCAqLwo+ICsjZGVmaW5lIENUWF9U SU1FU1RBTVBfb2Zmc2V0ICAoMHgzQTgpIC8qIEVsYXBzZWQgVGltZSBmcm9tIGNvbnRleHQgY3Jl YXRpb24gKi8KPiArI2RlZmluZSBBTFVfR1BVX1IwX0xTQl9vZmZzZXQgKDB4NjAwKQo+ICsjZGVm aW5lIEFMVV9HUFVfUjBfTVNCX29mZnNldCAoMHg2MDQpCj4gKyNkZWZpbmUgQUxVX0dQVV9SMV9M U0Jfb2Zmc2V0ICgweDYwOCkKPiArI2RlZmluZSBBTFVfR1BVX1IxX01TQl9vZmZzZXQgKDB4NjBD KQo+ICsjZGVmaW5lIEFMVV9HUFVfUjJfTFNCX29mZnNldCAoMHg2MTApCj4gKyNkZWZpbmUgQUxV X0dQVV9SMl9NU0Jfb2Zmc2V0ICgweDYxNCkKPiArCj4gKyNkZWZpbmUgQUxVX1IwX0VOQ09ESU5H ICAgKDB4MDApCj4gKyNkZWZpbmUgQUxVX1IxX0VOQ09ESU5HICAgKDB4MDEpCj4gKyNkZWZpbmUg QUxVX1NSQ0FfRU5DT0RJTkcgKDB4MjApCj4gKyNkZWZpbmUgQUxVX1NSQ0JfRU5DT0RJTkcgKDB4 MjEpCj4gKyNkZWZpbmUgQUxVX0FDQ1VfRU5DT0RJTkcgKDB4MzEpCj4gKwo+ICsvKioKPiArICog U0VDVElPTjppZ3RfYmJfZmFjdG9yeQo+ICsgKiBAc2hvcnRfZGVzY3JpcHRpb246IFV0aWxpdHkg ZnVuY3Rpb25zIGZvciBjcmVhdGluZyBiYXRjaCBidWZmZXJzCj4gKyAqIEB0aXRsZTogQmF0Y2gg QnVmZmVyIEZhY3RvcnkKPiArICogQGluY2x1ZGU6IGlndC5oCj4gKyAqCj4gKyAqIFRoaXMgbGli cmFyeSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYmF0Y2ggYnVmZmVycyB3aGlj aCBtYXkgYmUKPiArICogdXNlZnVsIHRvIG11bHRpcGxlIHRlc3RzLgo+ICsgKi8KPiArCj4gK3N0 YXRpYyB2b2lkIGNoZWNrX2dlbl84KGludCBmZCkKPiArewo+ICsJc3RhdGljIGJvb2wgY2hlY2tl ZCA9IGZhbHNlOwo+ICsJaWYoIWNoZWNrZWQpIHsKPiArCQlpZ3RfcmVxdWlyZShpbnRlbF9nZW4o aW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID49IDgpOwo+ICsJCWNoZWNrZWQgPSB0cnVlOwo+ICsJ fQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJiX2FkZHJlc3Nfc2l6ZV9kdyhpbnQgZmQpCj4gK3sK PiArCWlmIChpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID49IDgpCj4gKwkJcmV0 dXJuIDI7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50MzJf dCBnZXRfcmVnaXN0ZXJfb2Zmc2V0KGludCByaW5naWQpCnJlZ2lzdGVyX29mZnNldCBmZWVscyBh IGJpdCBjb25mdXNpbmcgYXMgbmFtZSwgSSBzdWdnZXN0IHRvIHVzZSAKbW1pb19iYXNlIGluc3Rl YWQKCj4gK3sKPiArCXN3aXRjaCAocmluZ2lkKSB7Cj4gKwljYXNlIEk5MTVfRVhFQ19SRU5ERVI6 Cj4gKwkJcmV0dXJuIDB4MDIwMDA7Cj4gKwljYXNlIEk5MTVfRVhFQ19CU0Q6Cj4gKwkJcmV0dXJu IDB4MTIwMDA7CldoYXQgYWJvdXQgdGhlIEJTRDI/Cgo+ICsJY2FzZSBJOTE1X0VYRUNfQkxUOgo+ ICsJCXJldHVybiAweDIyMDAwOwo+ICsJY2FzZSBJOTE1X0VYRUNfVkVCT1g6Cj4gKwkJcmV0dXJu IDB4MUEwMDA7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnRfZigwLCAiSW52YWxpZCByaW5n aWQgJWQgcGFzc2VkIHRvIGdldF9yZWdpc3Rlcl9vZmZzZXQoKVxuIiwgcmluZ2lkKTsKPiArCX0K PiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9jcmVhdGVfZGVsYXlfYmI6Cj4gKyAqIEBmZDogZmls ZSBkZXNjcmlwdG9yIGZvciBpOTE1IGRyaXZlciBpbnN0YW5jZQo+ICsgKiBAYnVmbWdyOiBCdWZm ZXIgbWFuYWdlciB0byBiZSB1c2VkIGZvciBjcmVhdGlvbiBvZiBiYXRjaCBidWZmZXJzCj4gKyAq IHJpbmdpZDogUmluZyB0byBjcmVhdGUgYmF0Y2ggYnVmZmVyIGZvci4gZS5nLiBJOTE1X0VYRUNf UkVOREVSCj4gKyAqIGxvb3BzOiBOdW1iZXIgb2YgdGltZXMgdG8gbG9vcAo+ICsgKiBkZXN0OiBC dWZmZXIgdG8gdXNlIGZvciBzYXZpbmcgdGhlIGN1cnJlbnQgbG9vcCBjb3VudCBhbmQgdGltZXN0 YW1wLgo+ICsgKgo+ICsgKiBUaGlzIGNyZWF0ZXMgYSBiYXRjaCBidWZmZXIgd2hpY2ggd2lsbCBp dGVyYXRlIGEgbG9vcCBhIHNwZWNpZmllZCBudW1iZXIKPiArICogb2YgdGltZXMuIEludGVuZGVk IGZvciBjcmVhdGluZyBiYXRjaCBidWZmZXJzIHdoaWNoIHRha2UgYW4gYXJiaXRhcmlseQo+ICsg KiBsb25nIHRpbWUgdG8gZXhlY3V0ZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGtlZXAgYSByaW5n IGJ1c3kgd2hpbGUKPiArICogY29uc3RydWN0aW5nIGEgdGVzdCBzY2VuYXJpby4KPiArICoKPiAr ICogVGhlIGRlc3QgYnVmZmVyIHdpbGwgaGF2ZSBhIG51bWJlciBvZiBEd29yZHMgd3JpdHRlbiBi eSB0aGUgYmF0Y2ggYnVmZmVyCj4gKyAqIHdoZW4gaXQgcnVucy4gVGhleSBhcmU6Cj4gKyAqIERX MCAmIERXMSAtIFRoZXNlIGFyZSBsb2FkZSB3aXRoIHRoZSB2YWx1ZSBvZiAnbG9vcHMnIGFuZCBh cmUgZGVjcmVtZW50ZWQKPiArICogICAgICAgICAgICAgYXMgdGhlIGJhdGNoIGJ1ZmZlciBleGVj dXRlcy4gVGhleSB3aWxsIGJlIDAgYWZ0ZXIgdGhlIGJhdGNoCj4gKyAqICAgICAgICAgICAgIGJ1 ZmZlciBjb21wbGV0ZXMgaWYgaXQgZmluaXNoZWQgc3VjY2VzZnVsbHkuCj4gKyAqIERXMiBUaW1l c3RhbXAgLSBBbiBpbmRpY2F0aW9uIG9mIHdoZW4gdGhlIGJhdGNoIGJ1ZmZlciByYW4gYWxsb3dp bmcgYQo+ICsgKiAgICAgICAgICAgICAgICAgY29tcGFyaXNvbiBiZXR3ZWVuIGJhdGNoIGJ1ZmZl cnMgdG8gc2hvdyBleGVjdXRpb24gb3JkZXIuCj4gKyAqICAgICAgICAgICAgICAgICBNYXkgd3Jh cCBzbyBpZ3RfY29tcGFyZV90aW1lc3RhbXBzKCkgc2hvdWxkIGJlIHVzZWQgdG8KPiArICogICAg ICAgICAgICAgICAgIGNvbXBhcmUgdGltZXN0YW1wcy4KSWYgSSByZWNhbGwgY29ycmVjdGx5IHRo ZSBsb3dlciBkd29yZCBvZiB0aGUgdGltZXN0YW1wIHdyYXBzIGluIG1pbnV0ZXMsIAp3aGljaCBp cyBzYWZlIGVub3VnaCBmb3Igbm9ybWFsIHRlc3RzIGJ1dCBtaWdodCBiZSBhbiBpc3N1ZSBvbiB2 ZXJ5IGxvbmcgCnN0cmVzcyB0ZXN0cy4gTWF5YmUgYWRkIGEgY29tbWVudCB0byBjbGFyaWZ5IHdo ZW4gdGhpcyBpcyBzYWZlIHRvIHVzZSwgCmFsc28gY29uc2lkZXJpbmcgdGhhdCBkdWUgdG8gdGhl IHdyYXBwaW5nIHRoZSBhY3R1YWwgc3VwcG9ydGVkIG1heGltdW0gCnRpbWUgZGlmZmVyZW5jZSBi ZXR3ZWVuIDIgdGltZXN0YW1wcyBpcyBsZXNzIHRoYW4gdGhlIHRvdGFsIHdyYXBwaW5nIHRpbWUK Cj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRoZSBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg Y3JlYXRlZC4KPiArICovCj4gK3N0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqaWd0X2NyZWF0ZV9k ZWxheV9iYihpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKPiArCQlpbnQgcmluZ2lk LCB1aW50MzJfdCBsb29wcywgZHJtX2ludGVsX2JvICpkZXN0KQpPdGhlciBiYXRjaC1jcmVhdGlu ZyBmdW5jdGlvbnMgdGFrZSB0aGUgYmF0Y2ggYXMgYSBwYXJhbWV0ZXIgaW5zdGVhZCBvZiAKcmV0 dXJuaW5nIG9uZSAoZS5nLiBpZ3RfYmxpdHRlcl9mYXN0X2NvcHksIHJlbmRlcmNvcHkpLCBzbyBm b3IgCmNvbnNpc3RlbmN5IEkgd291bGQgZG8gdGhlIHNhbWUgaGVyZSBhbmQgaW4gdGhlIG90aGVy IGZ1bmN0aW9ucyB0aGF0IAp5b3UndmUgYWRkZWQKCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2g7Cj4gKwlpbnQgYWRkcl9zaXplX2R3Owo+ICsJdWludDMyX3QgcmVnT2Zm c2V0Owo+ICsKPiArCWNoZWNrX2dlbl84KGZkKTsKSFNXIFJDUyBkb2VzIHN1cHBvcnQgdGhpcywg c28gbWF5YmUgd2UgY291bGQgaGF2ZSBzb21ldGhpbmcgbGlrZToKCnN0YXRpYyB2b2lkIGhhc19k ZWxheV9iYihpbnQgZmQsIGludCByaW5naWQpewogICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBm YWxzZTsKICAgICBpZiAoIWNoZWNrZWQpIHsKICAgICAgICAgaW50IGRldmlkID0gaW50ZWxfZ2V0 X2RybV9kZXZpZChmZCk7CiAgICAgICAgIGlndF9yZXF1aXJlKGludGVsX2dlbihkZXZpZCkgPj0g OCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgKElTX0hBU1dFTEwoZGV2aWQpICYmIHJpbmdp ZCA9PSBJOTE1X0VYRUNfUkVOREVSKSk7CiAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwogICAgIH0K fQoKVGhlIGJhdGNoIG1hbmlwdWxhdGlvbiBtYWNyb3Mgc2hvdWxkIGFkanVzdCB0aGUgbnVtYmVy IG9mIGR3b3JkcyBmb3IgCmFkZHJlc3NlcyBhdXRvbWF0aWNhbGx5Cj4gKwo+ICsJYWRkcl9zaXpl X2R3ID0gYmJfYWRkcmVzc19zaXplX2R3KGZkKTsKPiArCXJlZ09mZnNldCA9IGdldF9yZWdpc3Rl cl9vZmZzZXQocmluZ2lkKTsKU2ltaWxhcmx5IHRvIGFib3ZlLCBJIHdvdWxkIHJlbmFtZSByZWdP ZmZzZXQgdG8gbW1pb19iYXNlCj4gKwliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1 Zm1nciwgaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpOwo+ICsJaWd0X2Fzc2VydChiYXRjaCk7Cj4g Kwo+ICsJQkVHSU5fQkFUQ0goMzIsIDUpOwo+ICsJLyogc3RvcmUgY3VycmVudCB0aW1lc3RhbXAg aW4gRFcyICovCj4gKwlPVVRfQkFUQ0goTUlfU1RPUkVfUkVHSVNURVJfTUVNKGFkZHJfc2l6ZV9k dyArIDIpKTsKPiArCU9VVF9CQVRDSChyZWdPZmZzZXQgKyBUSU1FU1RBTVBfb2Zmc2V0KTsKPiAr CU9VVF9SRUxPQyhkZXN0LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RP TUFJTl9JTlNUUlVDVElPTiwgRFdPUkRTX1RPX0JZVEVTKDIpKTsKPiArCj4gKwkvKiBMb2FkIFIw IHdpdGggbG9vcHMgKi8KPiArCU9VVF9CQVRDSChNSV9MT0FEX1JFR0lTVEVSX0lNTSk7Cj4gKwlP VVRfQkFUQ0gocmVnT2Zmc2V0ICsgQUxVX0dQVV9SMF9MU0Jfb2Zmc2V0KTsKPiArCU9VVF9CQVRD SChsb29wcyk7Cj4gKwlPVVRfQkFUQ0goTUlfTE9BRF9SRUdJU1RFUl9JTU0pOwo+ICsJT1VUX0JB VENIKHJlZ09mZnNldCArIEFMVV9HUFVfUjBfTVNCX29mZnNldCk7Cj4gKwlPVVRfQkFUQ0goMHgw MDAwMDAwMCk7Cj4gKwkvKiBMb2FkIFIxIHdpdGggMSAqLwo+ICsJT1VUX0JBVENIKE1JX0xPQURf UkVHSVNURVJfSU1NKTsKPiArCU9VVF9CQVRDSChyZWdPZmZzZXQgKyBBTFVfR1BVX1IxX0xTQl9v ZmZzZXQpOwo+ICsJT1VUX0JBVENIKDB4MDAwMDAwMDEpOwo+ICsJT1VUX0JBVENIKE1JX0xPQURf UkVHSVNURVJfSU1NKTsKPiArCU9VVF9CQVRDSChyZWdPZmZzZXQgKyBBTFVfR1BVX1IxX01TQl9v ZmZzZXQpOwo+ICsJT1VUX0JBVENIKDB4MDAwMDAwMDApOwppbnN0ZWFkIG9mIGVtaXR0aW5nIDQg TUlfTE9BRF9SRUdJU1RFUl9JTU0geW91IGNhbiB1c2UgMSBhbmQgc3BlY2lmeSAKZXh0cmEgZHdv cmQgbGVuZ2h0Cgo+ICsJLyogQ29weSBSMCAvIFIxIGludG8gU1JDQSAvIFNSQ0IsIFBlcmZvcm0g UjAgLSBSMSwgU3RvcmUgcmVzdWx0IGluIFIwICovCj4gKwkvKiBlLmcuIFIwIC09IDEgKi8KPiAr CU9VVF9CQVRDSChNSV9NQVRIKDQpKTsKPiArCU9VVF9CQVRDSChBTFVfTE9BRChBTFVfU1JDQV9F TkNPRElORywgQUxVX1IwX0VOQ09ESU5HKSk7Cj4gKwlPVVRfQkFUQ0goQUxVX0xPQUQoQUxVX1NS Q0JfRU5DT0RJTkcsIEFMVV9SMV9FTkNPRElORykpOwo+ICsJT1VUX0JBVENIKEFMVV9TVUIpOwo+ ICsJT1VUX0JBVENIKEFMVV9TVE9SRShBTFVfUjBfRU5DT0RJTkcsIEFMVV9BQ0NVX0VOQ09ESU5H KSk7Cj4gKwkvKiBDb3B5IFIwIHRvIGRlc3QKPiArCSAqIE9uIEdlbjggTUlfQ09ORElUSU9OQUxf QkFUQ0hfQlVGRkVSX0VORCBCU0QgcmluZyBDb21wYXJlIGFkZHJlc3MKPiArCSAqIHBvaW50cyB0 byAyIER3b3JkcywgYSBtYXNrIChEVzApIGFuZCBkYXRhIChEVzEpIHdoaWNoIGFyZSBBTkRlZAo+ ICsJICogdG9nZXRoZXIuCj4gKwkgKiBPbiBHZW45KywgYW5kIHRoZSBvdGhlciByaW5ncyBvbiBH ZW44IENvbXBhcmUgYWRkcmVzcyBwb2ludHMgdG8KPiArCSAqIGp1c3QgRGF0YSAoRFcwKS4gRm9y IHNpbXBsaWNpdHkgYWx3YXlzIGNvcHkgUjAgTFNCIHRvIERXMCBhbmQgRFcxLgo+ICsJICovCj4g KwlPVVRfQkFUQ0goTUlfU1RPUkVfUkVHSVNURVJfTUVNKGFkZHJfc2l6ZV9kdyArIDIpKTsKPiAr CU9VVF9CQVRDSChyZWdPZmZzZXQgKyBBTFVfR1BVX1IwX0xTQl9vZmZzZXQpOwo+ICsJT1VUX1JF TE9DKGRlc3QsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwKTsKPiArCU9VVF9CQVRDSChNSV9TVE9SRV9SRUdJU1RFUl9NRU0oYWRkcl9z aXplX2R3ICsgMikpOwo+ICsJT1VUX0JBVENIKHJlZ09mZnNldCArIEFMVV9HUFVfUjBfTFNCX29m ZnNldCk7Cj4gKwlPVVRfUkVMT0MoZGVzdCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIERXT1JEU19UT19CWVRFUygxKSk7Cj4gKwkvKiBS ZXBlYXQgdW50aWwgUjAgPT0gMCAqLwo+ICsJT1VUX0JBVENIKE1JX0NPTkRJVElPTkFMX0JBVENI X0JVRkZFUl9FTkQpOwo+ICsJT1VUX0JBVENIKDB4MDAwMDAwMDApOwo+ICsJT1VUX1JFTE9DKGRl c3QsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNU SU9OLCAwKTsKPiArCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoYWRkcl9zaXpl X2R3IC0gMSkpOwo+ICsJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLCAwLCBEV09SRFNfVE9fQllURVMoMTUpKTsKSW5zdGVhZCBvZiB1c2luZyB0aGUgaGFy ZGNvZGVkIERXT1JEU19UT19CWVRFUygxNSkgeW91IGNvdWxkIGNhcHR1cmUgCmJhdGNoLT5wdHIg YmVmb3JlIGVtaXR0aW5nIHRoZSBkd29yZCB5b3Ugd2FudCB0byBqdW1wIHRvIGFuZCBwYXNzIGl0 IGhlcmUKCj4gKwkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCBlbmQgaWYgaXQgaGFwcGVu cyAqLwo+ICsKPiArCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKPiArCUFEVkFOQ0Vf QkFUQ0goKTsKPiArCj4gKwlyZXR1cm4gYmF0Y2g7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3Rf Y3JlYXRlX3RpbWVzdGFtcF9iYjoKPiArICogQGZkOiBmaWxlIGRlc2NyaXB0b3IgZm9yIGk5MTUg ZHJpdmVyIGluc3RhbmNlCj4gKyAqIEBidWZtZ3I6IEJ1ZmZlciBtYW5hZ2VyIHRvIGJlIHVzZWQg Zm9yIGNyZWF0aW9uIG9mIGJhdGNoIGJ1ZmZlcnMKPiArICogcmluZ2lkOiBSaW5nIHRvIGNyZWF0 ZSBiYXRjaCBidWZmZXIgZm9yLiBlLmcuIEk5MTVfRVhFQ19SRU5ERVIKPiArICogZGVzdDogQnVm ZmVyIHRvIHVzZSBmb3Igc2F2aW5nIHRoZSB0aW1lc3RhbXBzLgo+ICsgKiBsb2FkOiBCdWZmZXIg dG8gYWNjZXNzLiBTZXQgTlVMTCBpZiBub3QgcmVxdWlyZWQuCj4gKyAqIHdyaXRlOiBJZiB0cnVl IGFuZCBsb2FkIGlzIG5vdCBOVUxMLCB3aWxsIGFsc28gd3JpdGUgYSB0aW1lc3RhbXAgdG8gbG9h ZAo+ICsgKiBidWZmZXIuIElmIGZhbHNlIGFuZCBsb2FkIGlzIG5vdCBOVUxMLCB3aWxsIHJlYWQg ZnJvbSBsb2FkIGJ1ZmZlciBpbnRvIGRlc3QuCj4gKyAqIEludGVuZGVkIGZvciBkZXBlbmRlbmN5 IGNoZWNraW5nLgpUaGUgImxvYWQiIGJ1ZmZlciBoYW5kbGluZyBmZWVscyBhIGJpdCB0b28gc2No ZWR1bGVyLXNwZWNpZmljIHRvIGJlIGluIGEgCmNvbW1vbiBsaWJyYXJ5LiBJIHdvdWxkIG1vdmUg aXQgdG8gdGhlIHNjaGVkdWxlciB0ZXN0cyBhbmQgbWF5YmUgbGVhdmUgCmhlcmUgYW4gZW1pdF90 aW1lc3RhbXBfY2FwdHVyZSgpIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCgo+ICsgKgo+ICsgKiBU aGlzIGNyZWF0ZXMgYSBiYXRjaCBidWZmZXIgd2hpY2ggd3JpdGVzIHRpbWVzdGFtcHMgaW50byBh IGJ1ZmZlciBvYmplY3QuCj4gKyAqIElmICdsb2FkJyBpcyBub24gbnVsbCwgZGF0YSBpcyBlaXRo ZXIgd3JpdHRlbiB0byAnbG9hZCcgb3IgY29waWVkIGZyb20gJ2xvYWQnCj4gKyAqIGRlcGVuZGlu ZyBvbiB3aGV0aGVyICd3cml0ZScgaXMgc2V0Lgo+ICsgKgo+ICsgKiBUaGUgZGVzdCBidWZmZXIg d2lsbCBoYXZlIGEgbnVtYmVyIG9mIER3b3JkcyB3cml0dGVuIGJ5IHRoZSBiYXRjaCBidWZmZXIK PiArICogd2hlbiBpdCBydW5zLiBUaGV5IGFyZToKPiArICogRFcwIFJlcG9ydGVkIHRpbWVzdGFt cCAtIEFuIGluZGljYXRpb24gb2Ygd2hlbiB0aGUgYmF0Y2ggYnVmZmVyIHJhbiBhbGxvd2luZyBh Cj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uIGJldHdlZW4gYmF0Y2gg YnVmZmVycyB0byBzaG93IGV4ZWN1dGlvbiBvcmRlci4KPiArICogICAgICAgICAgICAgICAgICAg ICAgICAgIE1heSB3cmFwIHNvIGlndF9jb21wYXJlX3RpbWVzdGFtcHMoKSBzaG91bGQgYmUgdXNl ZCB0bwo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZSB0aW1lc3RhbXBzLgo+ ICsgKiBEVzEgQ29udGV4dCB0aW1lc3RhbXAgLSBFbGFwc2VkIHRpbWUgc2luY2UgY29udGV4dCB3 YXMgY3JlYXRlZC4KPiArICogRFcyIFZhbHVlIGNvcGllZCBmcm9tIERXMCBvZiBsb2FkIGlmIHdy aXRlID09IGZhbHNlCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRoZSBzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgY3JlYXRlZC4KPiArICovCj4gK3N0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq aWd0X2NyZWF0ZV90aW1lc3RhbXBfYmIoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3Is Cj4gKwkJaW50IHJpbmdpZCwgZHJtX2ludGVsX2JvICpkZXN0LCBkcm1faW50ZWxfYm8gKmxvYWQs IGJvb2wgd3JpdGUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Cj4g KwlpbnQgYWRkcl9zaXplX2R3Owo+ICsJdWludDMyX3QgcmVnT2Zmc2V0Owo+ICsKPiArCWNoZWNr X2dlbl84KGZkKTsKVGhlIFRJTUVTVEFNUCByZWcgZXhpc3RzIGFsc28gb24gcHJlIEdFTjgsIHNv IGluc3RlYWQgb2Ygc2tpcHBpbmcgb24gCnRob3NlIHBsYXRmb3JtIHdlIGNvdWxkIGNhcHR1cmUg b25seSB0aGF0IHJlZ2lzdGVyIGFuZCBub3QgdGhlIApDVFhfVElNRVNUQU1QIG9uZS4KCj4gKwo+ ICsJYWRkcl9zaXplX2R3ID0gYmJfYWRkcmVzc19zaXplX2R3KGZkKTsKPiArCXJlZ09mZnNldCA9 IGdldF9yZWdpc3Rlcl9vZmZzZXQocmluZ2lkKTsKPiArCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZm ZXJfYWxsb2MoYnVmbWdyLCBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSk7Cj4gKwlpZ3RfYXNzZXJ0 KGJhdGNoKTsKPiArCj4gKwlCRUdJTl9CQVRDSCg2LCAyKTsKPiArCS8qIHN0b3JlIGN1cnJlbnQg cmVwb3J0ZWQgdGltZXN0YW1wIGluIERXMCAqLwo+ICsJT1VUX0JBVENIKE1JX1NUT1JFX1JFR0lT VEVSX01FTShhZGRyX3NpemVfZHcgKyAyKSk7Cj4gKwlPVVRfQkFUQ0gocmVnT2Zmc2V0ICsgVElN RVNUQU1QX29mZnNldCk7Cj4gKwlPVVRfUkVMT0MoZGVzdCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIERXT1JEU19UT19CWVRFUygwKSk7 Cj4gKwo+ICsJLyogc3RvcmUgY3VycmVudCBjb250ZXh0IHRpbWVzdGFtcCBpbiBEVzEgKi8KPiAr CU9VVF9CQVRDSChNSV9TVE9SRV9SRUdJU1RFUl9NRU0oYWRkcl9zaXplX2R3ICsgMikpOwo+ICsJ T1VUX0JBVENIKHJlZ09mZnNldCArIENUWF9USU1FU1RBTVBfb2Zmc2V0KTsKPiArCU9VVF9SRUxP QyhkZXN0LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNU UlVDVElPTiwgRFdPUkRTX1RPX0JZVEVTKDEpKTsKPiArCj4gKwlBRFZBTkNFX0JBVENIKCk7Cj4g Kwo+ICsJaWYobG9hZCAhPSBOVUxMKSB7Cj4gKwkJaWYod3JpdGUpIHsKPiArCQkJQkVHSU5fQkFU Q0goMywgMSk7Cj4gKwkJCU9VVF9CQVRDSChNSV9TVE9SRV9SRUdJU1RFUl9NRU0oYWRkcl9zaXpl X2R3ICsgMikpOwo+ICsJCQlPVVRfQkFUQ0gocmVnT2Zmc2V0ICsgVElNRVNUQU1QX29mZnNldCk7 Cj4gKwkJCU9VVF9SRUxPQyhsb2FkLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgRFdPUkRTX1RPX0JZVEVTKDApKTsKPiArCQkJQURWQU5D RV9CQVRDSCgpOwo+ICsJCX0KPiArCQllbHNlIHsKPiArCQkJQkVHSU5fQkFUQ0goMywgMik7Cj4g KwkJCU9VVF9CQVRDSChNSV9DT1BZX01FTV9NRU0pOwo+ICsJCQlPVVRfUkVMT0MoZGVzdCwgSTkx NV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIERX T1JEU19UT19CWVRFUygyKSk7Cj4gKwkJCU9VVF9SRUxPQyhsb2FkLCBJOTE1X0dFTV9ET01BSU5f SU5TVFJVQ1RJT04sIDAsIERXT1JEU19UT19CWVRFUygwKSk7Cj4gKwkJCUFEVkFOQ0VfQkFUQ0go KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJQkVHSU5fQkFUQ0goMSwgMCk7Cj4gKwlPVVRfQkFUQ0go TUlfQkFUQ0hfQlVGRkVSX0VORCk7Cj4gKwlBRFZBTkNFX0JBVENIKCk7Cj4gKwo+ICsJcmV0dXJu IGJhdGNoOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X2NyZWF0ZV9ub29wX2JiOgo+ICsgKiBA ZmQ6IGZpbGUgZGVzY3JpcHRvciBmb3IgaTkxNSBkcml2ZXIgaW5zdGFuY2UKPiArICogQGJ1Zm1n cjogQnVmZmVyIG1hbmFnZXIgdG8gYmUgdXNlZCBmb3IgY3JlYXRpb24gb2YgYmF0Y2ggYnVmZmVy cwo+ICsgKiByaW5naWQ6IFJpbmcgdG8gY3JlYXRlIGJhdGNoIGJ1ZmZlciBmb3IuIGUuZy4gSTkx NV9FWEVDX1JFTkRFUgo+ICsgKiBub29wczogTnVtYmVyIG9mIE1JX05PT1AgaW5zdHJ1Y3Rpb25z IHRvIGFkZCB0byB0aGUgYmF0Y2ggYnVmZmVyLgo+ICsgKgo+ICsgKiBUaGlzIGNyZWF0ZXMgYSBi YXRjaCBidWZmZXIgd2l0aCBhIHNwZWNpZmllZCBudW1iZXIgb2YgTUlfTk9PUCBpbnN0cnVjdGlv bnMuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRoZSBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgY3JlYXRlZC4KPiArICovCj4gK3N0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqaWd0X2NyZWF0 ZV9ub29wX2JiKGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAo+ICsJCWludCByaW5n aWQsIGludCBub29wcykKPiArewo+ICsJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsK PiArCWludCBsb29wOwo+ICsKPiArCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVm bWdyLCBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSk7Cj4gKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKPiAr Cj4gKwlCRUdJTl9CQVRDSChub29wcyArIDEsIDApOwo+ICsJZm9yKGxvb3AgPSAwOyBsb29wIDwg bm9vcHM7IGxvb3ArKykKPiArCQlPVVRfQkFUQ0goTUlfTk9PUCk7Cj4gKwlPVVRfQkFUQ0goTUlf QkFUQ0hfQlVGRkVSX0VORCk7Cj4gKwlBRFZBTkNFX0JBVENIKCk7Cj4gKwo+ICsJcmV0dXJuIGJh dGNoOwo+ICt9Cj4gKwo+ICsvKiBTdG9yZSBjYWxpYnJhdGVkIHZhbHVlcyBzbyB0aGV5IG9ubHkg bmVlZCBjYWxjdWxhdGluZyBvbmNlLgo+ICsgKiBJOTE1X0VYRUNfUklOR19NQVNLIGFsbG93cyAz IGJpdHMgZm9yIHJpbmcgaWRzIHNvIGFsbG93IGZvciBzdG9yaW5nIDggdmFsdWVzICovCj4gK3N0 YXRpYyB1aW50MzJfdCBjYWxpYnJhdGVkX3JpbmdfdmFsdWVbOF0gPSB7MCwgMCwgMCwgMCwgMCwg MCwgMCwgMH07Cj4gKwo+ICsvKioKPiArICogaWd0X2NhbGlicmF0ZV9kZWxheV9iYjoKPiArICog QGZkOiBmaWxlIGRlc2NyaXB0b3IgZm9yIGk5MTUgZHJpdmVyIGluc3RhbmNlCj4gKyAqIEBidWZt Z3I6IEJ1ZmZlciBtYW5hZ2VyIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW9uIG9mIGJhdGNoIGJ1ZmZl cnMKPiArICogcmluZ2lkOiBSaW5nIHRvIGNhbGlicmF0ZS4gZS5nLiBJOTE1X0VYRUNfUkVOREVS Cj4gKyAqCj4gKyAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgdmFsdWUgb2YgbG9vcHMgdGhhdCB3b3Vs ZCBuZWVkIHRvIGJlIHBhc3NlZCB0bwo+ICsgKiBpZ3RfY3JlYXRlX2RlbGF5X2JiKCkgdG8gY3Jl YXRlIGEgZGVsYXkgb2YgYWJvdXQgMSBzZWNvbmQgb24gdGhlIHNwZWNpZmllZAo+ICsgKiByaW5n Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiB1aW50MzJfdCB0byBiZSBwYXNzZWQgdG8gaWd0 X2NyZWF0ZV9kZWxheV9iYigpLgo+ICsgKi8KPiArI2RlZmluZSBDQUxfU0VFRCAoMHgxMDAwMDAp CkNhbiB5b3UgYWRkIGEgY29tbWVudCByZWdhcmRpbmcgaG93IHRoaXMgc2VlZCB3YXMgcGlja2Vk PyBzb21ldGhpbmcgbGlrZSAKdGhlIGV4cGVjdGVkIGR1cmF0aW9uIG9mIHRoZSBleGVjdXRpb24g d2l0aCB0aGlzIHNlZWQgb24gYSBzcGVjaWZpYyAKcGxhdGZvcm0gd291bGQgYmUgbmljZS4KCj4g K3VpbnQzMl90IGlndF9jYWxpYnJhdGVfZGVsYXlfYmIoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdy ICpidWZtZ3IsIGludCByaW5naWQpCj4gK3sKPiArCXVpbnQzMl90ICpidWY7Cj4gKwlzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJiOwo+ICsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBlbmQ7Cj4g Kwl1aW50NjRfdCBkdXJhdGlvbjsKPiArCXVpbnQ2NF90IGNhbGlicmF0ZWQ7Cj4gKwlkcm1faW50 ZWxfYm8gKnRhcmdldF9ibzsKPiArCj4gKwlpZ3RfYXNzZXJ0KHJpbmdpZCA8IDgpOwo+ICsJaWYo Y2FsaWJyYXRlZF9yaW5nX3ZhbHVlW3JpbmdpZF0gIT0gMCkKPiArCQlyZXR1cm4gY2FsaWJyYXRl ZF9yaW5nX3ZhbHVlW3JpbmdpZF07Cj4gKwo+ICsJdGFyZ2V0X2JvID0gZHJtX2ludGVsX2JvX2Fs bG9jKGJ1Zm1nciwgInRhcmdldCBibyIsIEJBVENIX1NaLCBCQVRDSF9TWik7Cj4gKwlpZ3RfYXNz ZXJ0KHRhcmdldF9ibyk7Cj4gKwo+ICsJLyogUHV0IHNvbWUgbm9uIHplcm8gdmFsdWVzIGluIHRo ZSB0YXJnZXQgYm8gKi8KPiArCWRybV9pbnRlbF9ib19tYXAodGFyZ2V0X2JvLCAxKTsKTWlzc2lu ZyByZXR1cm4gY29kZSBjaGVjayBoZXJlLiBBbHNvLCBpbnN0ZWFkIG9mIG1hcHBpbmcgYW5kIHVu bWFwcGluZyBhIApzaW5nbGUgc3ViZGF0YSBjYWxsIHdvdWxkIGluIG15IG9waW5pb24gYmUgY2xl YW5lciB0byB3cml0ZSBhIHNpbmdsZSBkd29yZC4KCj4gKwlidWYgPSB0YXJnZXRfYm8tPnZpcnR1 YWw7Cj4gKwlidWZbMF0gPSAweGZmOwo+ICsJZHJtX2ludGVsX2JvX3VubWFwKHRhcmdldF9ibyk7 Cj4gKwo+ICsJYmIgPSBpZ3RfY3JlYXRlX2RlbGF5X2JiKGZkLCBidWZtZ3IsIHJpbmdpZCwgQ0FM X1NFRUQsIHRhcmdldF9ibyk7Cj4gKwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+ICsJY2xv Y2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZzdGFydCk7Cj4gKwlpbnRlbF9iYXRjaGJ1ZmZl cl9mbHVzaF9vbl9yaW5nKGJiLCByaW5naWQpOwo+ICsJLyogVGhpcyB3aWxsIG5vdCByZXR1cm4g dW50aWwgdGhlIGJvIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcgKi8KPiArCWRybV9pbnRlbF9ib19t YXAodGFyZ2V0X2JvLCAwKTsKTWlzc2luZyByZXR1cm4gY29kZSBjaGVjayBhbmQgdW5tYXAuIE1h eWJlIHVzaW5nIApkcm1faW50ZWxfYm9fd2FpdF9mb3JfcmVuZGVyaW5nIGhlcmUgYW5kIGdldF9z dWJkYXRhIGJlbG93IGNvdWxkIGJlIApzbGlnaHRseSBuZWF0ZXIKCj4gKwljbG9ja19nZXR0aW1l KENMT0NLX01PTk9UT05JQywgJmVuZCk7Cj4gKwo+ICsJYnVmID0gdGFyZ2V0X2JvLT52aXJ0dWFs Owo+ICsJLyogYnVmWzBdIGluIHRoZSB0YXJnZXQgYnVmZmVyIHNob3VsZCBiZSAwIGlmIHRoZSBi YXRjaCBidWZmZXIgY29tcGxldGVkICovCj4gKwlpZ3RfYXNzZXJ0X2YoYnVmWzBdID09IDAsICJi dWZbMF0gZXhwZWN0ZWQgMHgwLCBnb3QgMHgleFxuIiwgYnVmWzBdKTsKPiArCj4gKwlkdXJhdGlv biA9ICgoKCh1aW50NjRfdCllbmQudHZfc2VjIC0gKHVpbnQ2NF90KXN0YXJ0LnR2X3NlYykgKiBT RUNfVE9fTlNFQykKPiArCSAgICAgICAgICAgKyAodWludDY0X3QpZW5kLnR2X25zZWMpIC0gKHVp bnQ2NF90KXN0YXJ0LnR2X25zZWM7Cj4gKwo+ICsJY2FsaWJyYXRlZCA9ICgoKHVpbnQ2NF90KShD QUxfU0VFRCkgKiBTRUNfVE9fTlNFQykgLyBkdXJhdGlvbik7Cj4gKwlpZ3RfZGVidWcoIlVuY2Fs aWJyYXRlZCBydW4gdG9vayAlIiBQUkl1NjQgIi4lMDQiIFBSSXU2NCAic1xuIiwKPiArCSAgICAg ICAgICBkdXJhdGlvbiAvIFNFQ19UT19OU0VDLAo+ICsJICAgICAgICAgIChkdXJhdGlvbiAlIFNF Q19UT19OU0VDKSAvIDEwMDAwMCk7Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UodGFyZ2V0 X2JvKTsKPiArCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmIpOwo+ICsKPiArCS8qIFNhbml0eSBj aGVjay4gSWYgZHVyYXRpb24gPCAxMDBtcywgc29tZXRoaW5nIGhhcyBjbGVhcmx5IGdvbmUgd3Jv bmcKPiArCSAqICovCldpdGhvdXQgYW55IGRldGFpbHMgb24gdGhlIGV4cGVjdGVkIGR1cmF0aW9u IHdoZW4gdXNpbmcgQ0FMX1NFRUQgdGhpcyAKY29tbWVudCBpcyBub3QgdmVyeSBjbGVhcgoKPiAr CWlndF9hc3NlcnQoZHVyYXRpb24gPiAoU0VDX1RPX05TRUMgIC8gMTApKTsKPiArCj4gKwlpZ3Rf YXNzZXJ0X2YoY2FsaWJyYXRlZCA8PSBVSU5UMzJfTUFYLCAiQ2FsaWJyYXRlZCB2YWx1ZSA+IFVJ TlQzMl9NQVhcbiIpOwo+ICsKPiArCWNhbGlicmF0ZWRfcmluZ192YWx1ZVtyaW5naWRdID0gKHVp bnQzMl90KWNhbGlicmF0ZWQ7Cj4gKwlyZXR1cm4gKHVpbnQzMl90KWNhbGlicmF0ZWQ7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBpZ3RfY29tcGFyZV90aW1lc3RhbXBzOgo+ICsgKiBAdHMxOiB0aW1l c3RhbXAgMQo+ICsgKiBAdHMyOiB0aW1lc3RhbXAgMgo+ICsgKgo+ICsgKiBUaGlzIGNvbXBhcmVz IHR3byB1aW50MzJfdCB0aW1lc3RhbXBzLiBUbyBoYW5kbGUgd3JhcHBpbmcgaXQgYXNzdW1lcyB0 aGUKPiArICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gdGltZXN0YW1wcyBpcyBsZXNzIHRo YW4gMS80IHRoZSBtYXggZWxhcHNlZCB0aW1lCj4gKyAqIHJlcHJlc2VudGVkIGJ5IHRoZSBjb3Vu dGVycy4KPiArICogSXQgYWxzbyBhc3N1bWVzIHRoZSB0aW1lc3RhbXBzIGFyZSBzYW1wbGVzIGZy b20gdGhlIHNhbWUgY291bnRlci4KPiArICoKPiArICogUmV0dXJuczoKPiArICogVHJ1ZSBpZiB0 czIgPiB0czEsIGFsbG93aW5nIGZvciBjb3VudGVyIHdyYXBwaW5nLCBmYWxzZSBvdGhlcndpc2Uu Cj4gKyAqLwo+ICsKPiArYm9vbCBpZ3RfY29tcGFyZV90aW1lc3RhbXBzKHVpbnQzMl90IHRzMSwg dWludDMyX3QgdHMyKQo+ICt7Cj4gKwlpZiAodHMyID4gdHMxKQo+ICsJCXJldHVybiB0cnVlOwo+ ICsJZWxzZSBpZiAoKHRzMSA+IDB4ODAwMDAwMDApICYmICh0czIgPCAweDQwMDAwMDAwKSkKPiAr CQlyZXR1cm4gdHJ1ZTsgLyogQXNzdW1pbmcgdGltZXN0YW1wIGNvdW50ZXIgd3JhcHBlZCAqLwo+ ICsJZWxzZQo+ICsJCXJldHVybiBmYWxzZTsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2Ji X2ZhY3RvcnkuaCBiL2xpYi9pZ3RfYmJfZmFjdG9yeS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi4zYWI3ZjEzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pZ3Rf YmJfZmFjdG9yeS5oCj4gQEAgLTAsMCArMSw0NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkg MjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsg Kgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H Cj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ ICsgKiBBdXRob3JzOgo+ICsgKiAgICBEZXJlayBNb3J0b24gPGRlcmVrLmoubW9ydG9uQGludGVs LmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIElHVF9CQl9GQUNUT1JZX0gKPiArI2Rl ZmluZSBJR1RfQkJfRkFDVE9SWV9ICj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIu aCIKPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsKPiArc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICppZ3RfY3JlYXRlX2RlbGF5X2JiKGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAo+ ICsJCWludCByaW5naWQsIHVpbnQzMl90IGxvb3BzLCBkcm1faW50ZWxfYm8gKmRlc3QpOwo+ICsK PiArc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICppZ3RfY3JlYXRlX3RpbWVzdGFtcF9iYihpbnQg ZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKPiArCQlpbnQgcmluZ2lkLCBkcm1faW50ZWxf Ym8gKmRlc3QsIGRybV9pbnRlbF9ibyAqbG9hZCwgYm9vbCB3cml0ZSk7Cj4gKwo+ICtzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmlndF9jcmVhdGVfbm9vcF9iYihpbnQgZmQsIGRybV9pbnRlbF9i dWZtZ3IgKmJ1Zm1nciwKPiArCQlpbnQgcmluZ2lkLCBpbnQgbm9vcHMpOwo+ICsKPiArdWludDMy X3QgaWd0X2NhbGlicmF0ZV9kZWxheV9iYihpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciwgaW50IHJpbmdpZCk7Cj4gKwo+ICtib29sIGlndF9jb21wYXJlX3RpbWVzdGFtcHModWludDMy X3QgdHMxLCB1aW50MzJfdCB0czIpOwo+ICsKPiArI2VuZGlmIC8qIElHVF9CQl9GQUNUT1JZX0gg Ki8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=