From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84403C43603 for ; Wed, 11 Dec 2019 21:32:38 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 627A02054F for ; Wed, 11 Dec 2019 21:32:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 627A02054F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F1C406EBF7; Wed, 11 Dec 2019 21:32:37 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3ABF76EBF7 for ; Wed, 11 Dec 2019 21:32:36 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from localhost (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP (TLS) id 19547382-1500050 for multiple; Wed, 11 Dec 2019 21:31:25 +0000 MIME-Version: 1.0 To: Daniele Ceraolo Spurio , intel-gfx@lists.freedesktop.org From: Chris Wilson In-Reply-To: <20191211211244.7831-6-daniele.ceraolospurio@intel.com> References: <20191211211244.7831-1-daniele.ceraolospurio@intel.com> <20191211211244.7831-6-daniele.ceraolospurio@intel.com> Message-ID: <157609988550.27099.9421610954504392154@skylake-alporthouse-com> User-Agent: alot/0.6 Date: Wed, 11 Dec 2019 21:31:25 +0000 Subject: Re: [Intel-gfx] [RFC 5/5] drm/i915: introduce intel_execlists_submission. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" UXVvdGluZyBEYW5pZWxlIENlcmFvbG8gU3B1cmlvICgyMDE5LTEyLTExIDIxOjEyOjQ0KQo+IFNw bGl0IG91dCBhbGwgdGhlIGNvZGUgcmVsYXRlZCB0byB0aGUgZXhlY2xpc3RzIHN1Ym1pc3Npb24g ZmxvdyB0byBpdHMKPiBvd24gZmlsZSB0byBrZWVwIGl0IHNlcGFyYXRlIGZyb20gdGhlIGdlbmVy YWwgY29udGV4dCBtYW5hZ2VtZW50LAo+IGJlY2F1c2UgdGhlIGxhdHRlciB3aWxsIGJlIHJlLXVz ZWQgYnkgdGhlIEd1QyBzdWJtaXNzaW9uIGZsb3cuCj4gCj4gU2lnbmVkLW9mZi1ieTogRGFuaWVs ZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KPiBDYzog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IE1hdHRoZXcgQnJvc3Qg PG1hdHRoZXcuYnJvc3RAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZW5naW5lX2NzLmMgICAgIHwgICAgMSArCj4gIC4uLi9kcm0vaTkxNS9ndC9pbnRl bF9leGVjbGlzdHNfc3VibWlzc2lvbi5jICB8IDI0ODUgKysrKysrKysrKysrKysrKwo+ICAuLi4v ZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uaCAgfCAgIDU4ICsKPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgICAgICAgICAgIHwgMjUxMSArLS0tLS0t LS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuaCAgICAgICAg ICAgfCAgIDM0ICstCj4gIC4uLi9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfdmlydHVhbF9lbmdpbmUu YyAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlz dHMuYyAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5j ICAgICAgICB8ICAgIDIgKy0KPiAgLi4uL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3Vi bWlzc2lvbi5jIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIu YyAgICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyAg ICAgICAgICAgICAgfCAgICAxICsKPiAgMTIgZmlsZXMgY2hhbmdlZCwgMjU4NCBpbnNlcnRpb25z KCspLCAyNTE0IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24u aAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggNzlmNWVmNWFjZDRjLi4zNjQwZTA0MzZj OTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC04Miw2ICs4Miw3IEBAIGd0LXkgKz0g XAo+ICAgICAgICAgZ3QvaW50ZWxfZW5naW5lX3BtLm8gXAo+ICAgICAgICAgZ3QvaW50ZWxfZW5n aW5lX3Bvb2wubyBcCj4gICAgICAgICBndC9pbnRlbF9lbmdpbmVfdXNlci5vIFwKPiArICAgICAg IGd0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLm8gXAo+ICAgICAgICAgZ3QvaW50ZWxfZ3Qu byBcCj4gICAgICAgICBndC9pbnRlbF9ndF9pcnEubyBcCj4gICAgICAgICBndC9pbnRlbF9ndF9w bS5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5l X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwo+IGluZGV4 IDQ5NDczYzI1OTE2Yy4uMGEyM2QwMWI3NTg5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZW5naW5lX2NzLmMKPiBAQCAtMzMsNiArMzMsNyBAQAo+ICAjaW5jbHVkZSAiaW50 ZWxfZW5naW5lX3BtLmgiCj4gICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG9vbC5oIgo+ICAjaW5j bHVkZSAiaW50ZWxfZW5naW5lX3VzZXIuaCIKPiArI2luY2x1ZGUgImludGVsX2V4ZWNsaXN0c19z dWJtaXNzaW9uLmgiCj4gICNpbmNsdWRlICJpbnRlbF9ndC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxf Z3RfcmVxdWVzdHMuaCIKPiAgI2luY2x1ZGUgImludGVsX2xyYy5oIgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43NmI4NzhiZjE1YWQKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3Rz X3N1Ym1pc3Npb24uYwo+IEBAIC0wLDAgKzEsMjQ4NSBAQAo+ICsvKgo+ICsgKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsK PiArI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9jb250ZXh0LmgiCj4gKwo+ICsjaW5jbHVkZSAiaTkx NV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfcGVyZi5oIgo+ICsjaW5jbHVkZSAiaTkxNV90cmFj ZS5oIgo+ICsjaW5jbHVkZSAiaTkxNV92Z3B1LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9lbmdpbmVf cG0uaCIKPiArI2luY2x1ZGUgImludGVsX2d0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ndF9wbS5o Igo+ICsjaW5jbHVkZSAiaW50ZWxfZ3RfcmVxdWVzdHMuaCIKPiArI2luY2x1ZGUgImludGVsX2xy Y19yZWcuaCIKPiArI2luY2x1ZGUgImludGVsX21vY3MuaCIKPiArI2luY2x1ZGUgImludGVsX3Jl c2V0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9yaW5nLmgiCj4gKyNpbmNsdWRlICJpbnRlbF92aXJ0 dWFsX2VuZ2luZS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfd29ya2Fyb3VuZHMuaCIKPiArI2luY2x1 ZGUgImludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmgiCj4gKwo+ICsjZGVmaW5lIFJJTkdfRVhF Q0xJU1RfUUZVTEwgICAgICAgICAgICAoMSA8PCAweDIpCj4gKyNkZWZpbmUgUklOR19FWEVDTElT VDFfVkFMSUQgICAgICAgICAgICgxIDw8IDB4MykKPiArI2RlZmluZSBSSU5HX0VYRUNMSVNUMF9W QUxJRCAgICAgICAgICAgKDEgPDwgMHg0KQo+ICsjZGVmaW5lIFJJTkdfRVhFQ0xJU1RfQUNUSVZF X1NUQVRVUyAgICAoMyA8PCAweEUpCj4gKyNkZWZpbmUgUklOR19FWEVDTElTVDFfQUNUSVZFICAg ICAgICAgICgxIDw8IDB4MTEpCj4gKyNkZWZpbmUgUklOR19FWEVDTElTVDBfQUNUSVZFICAgICAg ICAgICgxIDw8IDB4MTIpCj4gKwo+ICsjZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElW RSAgICAoMSA8PCAwKQo+ICsjZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQgICAgICAo MSA8PCAxKQo+ICsjZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19FTEVNRU5UX1NXSVRDSCAoMSA8PCAy KQo+ICsjZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSAgICAoMSA8PCAzKQo+ICsj ZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19DT01QTEVURSAgICAgICAoMSA8PCA0KQo+ICsjZGVmaW5l IEdFTjhfQ1RYX1NUQVRVU19MSVRFX1JFU1RPUkUgICAoMSA8PCAxNSkKPiArCj4gKyNkZWZpbmUg R0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLIFwKPiArICAgICAgICAoR0VOOF9DVFhfU1RB VFVTX0NPTVBMRVRFIHwgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkKPiArCj4gKyNkZWZpbmUg Q1RYX0RFU0NfRk9SQ0VfUkVTVE9SRSBCSVRfVUxMKDIpCj4gKwo+ICsjZGVmaW5lIEdFTjEyX0NU WF9TVEFUVVNfU1dJVENIRURfVE9fTkVXX1FVRVVFICgweDEpIC8qIGxvd2VyIGNzYiBkd29yZCAq Lwo+ICsjZGVmaW5lIEdFTjEyX0NUWF9TV0lUQ0hfREVUQUlMKGNzYl9kdykgICAgICAgICgoY3Ni X2R3KSAmIDB4RikgLyogdXBwZXIgY3NiIGR3b3JkICovCj4gKyNkZWZpbmUgR0VOMTJfQ1NCX1NX X0NUWF9JRF9NQVNLICAgICAgICAgICAgICAgR0VOTUFTSygyNSwgMTUpCj4gKyNkZWZpbmUgR0VO MTJfSURMRV9DVFhfSUQgICAgICAgICAgICAgIDB4N0ZGCj4gKyNkZWZpbmUgR0VOMTJfQ1NCX0NU WF9WQUxJRChjc2JfZHcpIFwKPiArICAgICAgIChGSUVMRF9HRVQoR0VOMTJfQ1NCX1NXX0NUWF9J RF9NQVNLLCBjc2JfZHcpICE9IEdFTjEyX0lETEVfQ1RYX0lEKQo+ICsKPiArLyogVHlwaWNhbCBz aXplIG9mIHRoZSBhdmVyYWdlIHJlcXVlc3QgKDIgcGlwZWNvbnRyb2xzIGFuZCBhIE1JX0JCKSAq Lwo+ICsjZGVmaW5lIEVYRUNMSVNUU19SRVFVRVNUX1NJWkUgNjQgLyogYnl0ZXMgKi8KPiArCj4g K3N0YXRpYyB2b2lkIG1hcmtfZWlvKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKyAg ICAgICBpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCj4gKyAgICAgICAgICAgICAgIHJl dHVybjsKPiArCj4gKyAgICAgICBHRU1fQlVHX09OKGk5MTVfcmVxdWVzdF9zaWduYWxlZChycSkp Owo+ICsKPiArICAgICAgIGRtYV9mZW5jZV9zZXRfZXJyb3IoJnJxLT5mZW5jZSwgLUVJTyk7Cj4g KyAgICAgICBpOTE1X3JlcXVlc3RfbWFya19jb21wbGV0ZShycSk7Cj4gK30KPiArCj4gK3N0YXRp YyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiArYWN0aXZlX3JlcXVlc3QoY29uc3Qgc3RydWN0IGlu dGVsX3RpbWVsaW5lICogY29uc3QgdGwsIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4g KyAgICAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICphY3RpdmUgPSBycTsKPiArCj4gKyAgICAgICBy Y3VfcmVhZF9sb2NrKCk7Cj4gKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3Jl dmVyc2UocnEsICZ0bC0+cmVxdWVzdHMsIGxpbmspIHsKPiArICAgICAgICAgICAgICAgaWYgKGk5 MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Owo+ICsKPiArICAgICAgICAgICAgICAgYWN0aXZlID0gcnE7Cj4gKyAgICAgICB9Cj4gKyAgICAg ICByY3VfcmVhZF91bmxvY2soKTsKPiArCj4gKyAgICAgICByZXR1cm4gYWN0aXZlOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiArcmluZ19zZXRfcGF1c2VkKGNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgaW50IHN0YXRlKQo+ICt7Cj4gKyAgICAgICAvKgo+ICsg ICAgICAgICogV2UgaW5zcGVjdCBIV1NfUFJFRU1QVCB3aXRoIGEgc2VtYXBob3JlIGluc2lkZQo+ ICsgICAgICAgICogZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYi4gSWYgdGhlIGR3b3JkIGlz IHRydWUsCj4gKyAgICAgICAgKiB0aGUgcmluZyBpcyBwYXVzZWQgYXMgdGhlIHNlbWFwaG9yZSB3 aWxsIGJ1c3l3YWl0Cj4gKyAgICAgICAgKiB1bnRpbCB0aGUgZHdvcmQgaXMgZmFsc2UuCj4gKyAg ICAgICAgKi8KPiArICAgICAgIGVuZ2luZS0+c3RhdHVzX3BhZ2UuYWRkcltJOTE1X0dFTV9IV1Nf UFJFRU1QVF0gPSBzdGF0ZTsKPiArICAgICAgIGlmIChzdGF0ZSkKPiArICAgICAgICAgICAgICAg d21iKCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRv X3ByaW9saXN0KHN0cnVjdCByYl9ub2RlICpyYikKPiArewo+ICsgICAgICAgcmV0dXJuIHJiX2Vu dHJ5KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9kZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bmxpbmUgaW50IHJxX3ByaW8oY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiAr ICAgICAgIHJldHVybiBycS0+c2NoZWQuYXR0ci5wcmlvcml0eTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBlZmZlY3RpdmVfcHJpbyhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ ICsgICAgICAgaW50IHByaW8gPSBycV9wcmlvKHJxKTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAg ICAgICogSWYgdGhpcyByZXF1ZXN0IGlzIHNwZWNpYWwgYW5kIG11c3Qgbm90IGJlIGludGVycnVw dGVkIGF0IGFueQo+ICsgICAgICAgICogY29zdCwgc28gYmUgaXQuIE5vdGUgd2UgYXJlIG9ubHkg Y2hlY2tpbmcgdGhlIG1vc3QgcmVjZW50IHJlcXVlc3QKPiArICAgICAgICAqIGluIHRoZSBjb250 ZXh0IGFuZCBzbyBtYXkgYmUgbWFza2luZyBhbiBlYXJsaWVyIHZpcCByZXF1ZXN0LiBJdAo+ICsg ICAgICAgICogaXMgaG9wZWQgdGhhdCB1bmRlciB0aGUgY29uZGl0aW9ucyB3aGVyZSBub3ByZWVt cHQgaXMgdXNlZCwgdGhpcwo+ICsgICAgICAgICogd2lsbCBub3QgbWF0dGVyIChpLmUuIGFsbCBy ZXF1ZXN0cyB0byB0aGF0IGNvbnRleHQgd2lsbCBiZQo+ICsgICAgICAgICogbm9wcmVlbXB0IGZv ciBhcyBsb25nIGFzIGRlc2lyZWQpLgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAoaTkxNV9y ZXF1ZXN0X2hhc19ub3ByZWVtcHQocnEpKQo+ICsgICAgICAgICAgICAgICBwcmlvID0gSTkxNV9Q UklPUklUWV9VTlBSRUVNUFRBQkxFOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBPbiB1 bndpbmRpbmcgdGhlIGFjdGl2ZSByZXF1ZXN0LCB3ZSBnaXZlIGl0IGEgcHJpb3JpdHkgYnVtcAo+ ICsgICAgICAgICogaWYgaXQgaGFzIGNvbXBsZXRlZCB3YWl0aW5nIG9uIGFueSBzZW1hcGhvcmUu IElmIHdlIGtub3cgdGhhdAo+ICsgICAgICAgICogdGhlIHJlcXVlc3QgaGFzIGFscmVhZHkgc3Rh cnRlZCwgd2UgY2FuIHByZXZlbnQgYW4gdW53YW50ZWQKPiArICAgICAgICAqIHByZWVtcHQtdG8t aWRsZSBjeWNsZSBieSB0YWtpbmcgdGhhdCBpbnRvIGFjY291bnQgbm93Lgo+ICsgICAgICAgICov Cj4gKyAgICAgICBpZiAoX19pOTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQocnEpKQo+ICsgICAgICAg ICAgICAgICBwcmlvIHw9IEk5MTVfUFJJT1JJVFlfTk9TRU1BUEhPUkU7Cj4gKwo+ICsgICAgICAg LyogUmVzdHJpY3QgbWVyZSBXQUlUIGJvb3N0cyBmcm9tIHRyaWdnZXJpbmcgcHJlZW1wdGlvbiAq Lwo+ICsgICAgICAgQlVJTERfQlVHX09OKF9fTk9fUFJFRU1QVElPTiAmIH5JOTE1X1BSSU9SSVRZ X01BU0spOyAvKiBvbmx5IGludGVybmFsICovCj4gKyAgICAgICByZXR1cm4gcHJpbyB8IF9fTk9f UFJFRU1QVElPTjsKPiArfQo+ICsKPiArc3RhdGljIGludCBxdWV1ZV9wcmlvKGNvbnN0IHN0cnVj dCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCj4gK3sKPiArICAgICAgIHN0cnVj dCBpOTE1X3ByaW9saXN0ICpwOwo+ICsgICAgICAgc3RydWN0IHJiX25vZGUgKnJiOwo+ICsKPiAr ICAgICAgIHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnF1ZXVlKTsKPiArICAgICAg IGlmICghcmIpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBJTlRfTUlOOwo+ICsKPiArICAgICAg IC8qCj4gKyAgICAgICAgKiBBcyB0aGUgcHJpb2xpc3RbXSBhcmUgaW52ZXJ0ZWQsIHdpdGggdGhl IGhpZ2hlc3QgcHJpb3JpdHkgaW4gWzBdLAo+ICsgICAgICAgICogd2UgaGF2ZSB0byBmbGlwIHRo ZSBpbmRleCB2YWx1ZSB0byBiZWNvbWUgcHJpb3JpdHkuCj4gKyAgICAgICAgKi8KPiArICAgICAg IHAgPSB0b19wcmlvbGlzdChyYik7Cj4gKyAgICAgICByZXR1cm4gKChwLT5wcmlvcml0eSArIDEp IDw8IEk5MTVfVVNFUl9QUklPUklUWV9TSElGVCkgLSBmZnMocC0+dXNlZCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcmJfbm9kZSAqcmIpCj4gK3sKPiArICAgICAgIGludCBsYXN0X3ByaW87Cj4gKwo+ICsg ICAgICAgaWYgKCFpbnRlbF9lbmdpbmVfaGFzX3NlbWFwaG9yZXMoZW5naW5lKSkKPiArICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBDaGVj ayBpZiB0aGUgY3VycmVudCBwcmlvcml0eSBoaW50IG1lcml0cyBhIHByZWVtcHRpb24gYXR0ZW1w dC4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBXZSByZWNvcmQgdGhlIGhpZ2hlc3QgdmFsdWUg cHJpb3JpdHkgd2Ugc2F3IGR1cmluZyByZXNjaGVkdWxpbmcKPiArICAgICAgICAqIHByaW9yIHRv IHRoaXMgZGVxdWV1ZSwgdGhlcmVmb3JlIHdlIGtub3cgdGhhdCBpZiBpdCBpcyBzdHJpY3RseQo+ ICsgICAgICAgICogbGVzcyB0aGFuIHRoZSBjdXJyZW50IHRhaWwgb2YgRVNMUFswXSwgd2UgZG8g bm90IG5lZWQgdG8gZm9yY2UKPiArICAgICAgICAqIGEgcHJlZW1wdC10by1pZGxlIGN5Y2xlLgo+ ICsgICAgICAgICoKPiArICAgICAgICAqIEhvd2V2ZXIsIHRoZSBwcmlvcml0eSBoaW50IGlzIGEg bWVyZSBoaW50IHRoYXQgd2UgbWF5IG5lZWQgdG8KPiArICAgICAgICAqIHByZWVtcHQuIElmIHRo YXQgaGludCBpcyBzdGFsZSBvciB3ZSBtYXkgYmUgdHJ5aW5nIHRvIHByZWVtcHQKPiArICAgICAg ICAqIG91cnNlbHZlcywgaWdub3JlIHRoZSByZXF1ZXN0Lgo+ICsgICAgICAgICoKPiArICAgICAg ICAqIE1vcmUgbmF0dXJhbGx5IHdlIHdvdWxkIHdyaXRlCj4gKyAgICAgICAgKiAgICAgIHByaW8g Pj0gbWF4KDAsIGxhc3QpOwo+ICsgICAgICAgICogZXhjZXB0IHRoYXQgd2Ugd2lzaCB0byBwcmV2 ZW50IHRyaWdnZXJpbmcgcHJlZW1wdGlvbiBhdCB0aGUgc2FtZQo+ICsgICAgICAgICogcHJpb3Jp dHkgbGV2ZWw6IHRoZSB0YXNrIHRoYXQgaXMgcnVubmluZyBzaG91bGQgcmVtYWluIHJ1bm5pbmcK PiArICAgICAgICAqIHRvIHByZXNlcnZlIEZJRk8gb3JkZXJpbmcgb2YgZGVwZW5kZW5jaWVzLgo+ ICsgICAgICAgICovCj4gKyAgICAgICBsYXN0X3ByaW8gPSBtYXgoZWZmZWN0aXZlX3ByaW8ocnEp LCBJOTE1X1BSSU9SSVRZX05PUk1BTCAtIDEpOwo+ICsgICAgICAgaWYgKGVuZ2luZS0+ZXhlY2xp c3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPD0gbGFzdF9wcmlvKQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIENoZWNrIGFnYWluc3Qg dGhlIGZpcnN0IHJlcXVlc3QgaW4gRUxTUFsxXSwgaXQgd2lsbCwgdGhhbmtzIHRvIHRoZQo+ICsg ICAgICAgICogcG93ZXIgb2YgUEksIGJlIHRoZSBoaWdoZXN0IHByaW9yaXR5IG9mIHRoYXQgY29u dGV4dC4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKCFsaXN0X2lzX2xhc3QoJnJxLT5zY2hl ZC5saW5rLCAmZW5naW5lLT5hY3RpdmUucmVxdWVzdHMpICYmCj4gKyAgICAgICAgICAgcnFfcHJp byhsaXN0X25leHRfZW50cnkocnEsIHNjaGVkLmxpbmspKSA+IGxhc3RfcHJpbykKPiArICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7Cj4gKwo+ICsgICAgICAgaWYgKHJiKSB7Cj4gKyAgICAgICAg ICAgICAgIHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIp Owo+ICsgICAgICAgICAgICAgICBib29sIHByZWVtcHQgPSBmYWxzZTsKPiArCj4gKyAgICAgICAg ICAgICAgIGlmIChlbmdpbmUgPT0gdmUtPnNpYmxpbmdzWzBdKSB7IC8qIG9ubHkgcHJlZW1wdCBv bmUgc2libGluZyAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X3JlcXVl c3QgKm5leHQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJjdV9yZWFkX2xvY2soKTsK PiArICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsK PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByZWVtcHQgPSBycV9wcmlvKG5leHQpID4gbGFzdF9wcmlvOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgIHJjdV9yZWFkX3VubG9jaygpOwo+ICsgICAgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICAgICBpZiAocHJlZW1wdCkKPiArICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcHJlZW1wdDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKgo+ICsgICAg ICAgICogSWYgdGhlIGluZmxpZ2h0IGNvbnRleHQgZGlkIG5vdCB0cmlnZ2VyIHRoZSBwcmVlbXB0 aW9uLCB0aGVuIG1heWJlCj4gKyAgICAgICAgKiBpdCB3YXMgdGhlIHNldCBvZiBxdWV1ZWQgcmVx dWVzdHM/IFBpY2sgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaW4KPiArICAgICAgICAqIHRoZSBxdWV1 ZSAodGhlIGZpcnN0IGFjdGl2ZSBwcmlvbGlzdCkgYW5kIHNlZSBpZiBpdCBkZXNlcnZlcyB0byBi ZQo+ICsgICAgICAgICogcnVubmluZyBpbnN0ZWFkIG9mIEVMU1BbMF0uCj4gKyAgICAgICAgKgo+ ICsgICAgICAgICogVGhlIGhpZ2hlc3QgcHJpb3JpdHkgcmVxdWVzdCBpbiB0aGUgcXVldWUgY2Fu IG5vdCBiZSBlaXRoZXIKPiArICAgICAgICAqIEVMU1BbMF0gb3IgRUxTUFsxXSBhcywgdGhhbmtz IGFnYWluIHRvIFBJLCBpZiBpdCB3YXMgdGhlIHNhbWUKPiArICAgICAgICAqIGNvbnRleHQsIGl0 J3MgcHJpb3JpdHkgd291bGQgbm90IGV4Y2VlZCBFTFNQWzBdIGFrYSBsYXN0X3ByaW8uCj4gKyAg ICAgICAgKi8KPiArICAgICAgIHJldHVybiBxdWV1ZV9wcmlvKCZlbmdpbmUtPmV4ZWNsaXN0cykg PiBsYXN0X3ByaW87Cj4gK30KPiArCj4gK19fbWF5YmVfdW51c2VkIHN0YXRpYyBpbmxpbmUgYm9v bAo+ICthc3NlcnRfcHJpb3JpdHlfcXVldWUoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJl diwKPiArICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqbmV4 dCkKPiArewo+ICsgICAgICAgLyoKPiArICAgICAgICAqIFdpdGhvdXQgcHJlZW1wdGlvbiwgdGhl IHByZXYgbWF5IHJlZmVyIHRvIHRoZSBzdGlsbCBhY3RpdmUgZWxlbWVudAo+ICsgICAgICAgICog d2hpY2ggd2UgcmVmdXNlIHRvIGxldCBnby4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBFdmVu IHdpdGggcHJlZW1wdGlvbiwgdGhlcmUgYXJlIHRpbWVzIHdoZW4gd2UgdGhpbmsgaXQgaXMgYmV0 dGVyIG5vdAo+ICsgICAgICAgICogdG8gcHJlZW1wdCBhbmQgbGVhdmUgYW4gb3N0ZW5zaWJseSBs b3dlciBwcmlvcml0eSByZXF1ZXN0IGluIGZsaWdodC4KPiArICAgICAgICAqLwo+ICsgICAgICAg aWYgKGk5MTVfcmVxdWVzdF9pc19hY3RpdmUocHJldikpCj4gKyAgICAgICAgICAgICAgIHJldHVy biB0cnVlOwo+ICsKPiArICAgICAgIHJldHVybiBycV9wcmlvKHByZXYpID49IHJxX3ByaW8obmV4 dCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiArX191bndpbmRf aW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sK PiArICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm4sICphY3RpdmUgPSBOVUxMOwo+ ICsgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdW5pbml0aWFsaXplZF92YXIocGwpOwo+ICsgICAg ICAgaW50IHByaW8gPSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQ7Cj4gKwo+ICsgICAgICAgbG9ja2Rl cF9hc3NlcnRfaGVsZCgmZW5naW5lLT5hY3RpdmUubG9jayk7Cj4gKwo+ICsgICAgICAgbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UocnEsIHJuLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmVuZ2luZS0+YWN0aXZlLnJlcXVlc3RzLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWQubGluaykgewo+ICsgICAgICAg ICAgICAgICBpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7IC8qIFhYWCAqLwo+ICsKPiArICAgICAgICAgICAgICAgX19pOTE1 X3JlcXVlc3RfdW5zdWJtaXQocnEpOwo+ICsKPiArICAgICAgICAgICAgICAgLyoKPiArICAgICAg ICAgICAgICAgICogUHVzaCB0aGUgcmVxdWVzdCBiYWNrIGludG8gdGhlIHF1ZXVlIGZvciBsYXRl ciByZXN1Ym1pc3Npb24uCj4gKyAgICAgICAgICAgICAgICAqIElmIHRoaXMgcmVxdWVzdCBpcyBu b3QgbmF0aXZlIHRvIHRoaXMgcGh5c2ljYWwgZW5naW5lIChpLmUuCj4gKyAgICAgICAgICAgICAg ICAqIGl0IGNhbWUgZnJvbSBhIHZpcnR1YWwgc291cmNlKSwgcHVzaCBpdCBiYWNrIG9udG8gdGhl IHZpcnR1YWwKPiArICAgICAgICAgICAgICAgICogZW5naW5lIHNvIHRoYXQgaXQgY2FuIGJlIG1v dmVkIGFjcm9zcyBvbnRvIGFub3RoZXIgcGh5c2ljYWwKPiArICAgICAgICAgICAgICAgICogZW5n aW5lIGFzIGxvYWQgZGljdGF0ZXMuCj4gKyAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAg ICAgICBpZiAobGlrZWx5KHJxLT5leGVjdXRpb25fbWFzayA9PSBlbmdpbmUtPm1hc2spKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgR0VNX0JVR19PTihycV9wcmlvKHJxKSA9PSBJOTE1X1BS SU9SSVRZX0lOVkFMSUQpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChycV9wcmlvKHJx KSAhPSBwcmlvKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvID0gcnFf cHJpbyhycSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbCA9IGk5MTVfc2No ZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJpbyk7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgIEdFTV9CVUdfT04oUkJfRU1QVFlfUk9PVCgm ZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwo+ICsKPiArICAgICAgICAgICAgICAg ICAgICAgICBsaXN0X21vdmUoJnJxLT5zY2hlZC5saW5rLCBwbCk7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgYWN0aXZlID0gcnE7Cj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqb3duZXIgPSBycS0+aHdf Y29udGV4dC0+ZW5naW5lOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAvKgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAqIERlY291cGxlIHRoZSB2aXJ0dWFsIGJyZWFkY3J1bWIgYmVm b3JlIG1vdmluZyBpdAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGJhY2sgdG8gdGhlIHZp cnR1YWwgZW5naW5lIC0tIHdlIGRvbid0IHdhbnQgdGhlCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICogcmVxdWVzdCB0byBjb21wbGV0ZSBpbiB0aGUgYmFja2dyb3VuZCBhbmQgdHJ5Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICogYW5kIGNhbmNlbCB0aGUgYnJlYWRjcnVtYiBvbiB0aGUg dmlydHVhbCBlbmdpbmUKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiAoaW5zdGVhZCBvZiB0 aGUgb2xkIGVuZ2luZSB3aGVyZSBpdCBpcyBsaW5rZWQpIQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0X2JpdChETUFfRkVOQ0Vf RkxBR19FTkFCTEVfU0lHTkFMX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnJxLT5mZW5jZS5mbGFncykpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwaW5fbG9ja19uZXN0ZWQoJnJxLT5sb2NrLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTSU5HTEVfREVQVEhfTkVTVElORyk7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpOTE1X3JlcXVlc3RfY2FuY2VsX2JyZWFkY3J1bWIo cnEpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnJxLT5s b2NrKTsKPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcnEtPmVuZ2luZSA9IG93bmVyOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIG93bmVyLT5z dWJtaXRfcmVxdWVzdChycSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gTlVM TDsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiBh Y3RpdmU7Cj4gK30KPiArCj4gK3N0cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICtleGVjbGlzdHNfdW53 aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4 ZWNsaXN0cykKClRoZXJlIHNob3VsZCBiZSBubyBleHBvcnRzIGZyb20gdGhpcyBmaWxlLi4uIERp ZCB5b3Ugbm90IGFsc28gbWFrZQpndWNfc3VibWlzc2lvbiBzdGFuZGFsb25lPwoKPiArewo+ICsg ICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KPiArICAgICAgICAgICAgICAg Y29udGFpbmVyX29mKGV4ZWNsaXN0cywgdHlwZW9mKCplbmdpbmUpLCBleGVjbGlzdHMpOwo+ICsK PiArICAgICAgIHJldHVybiBfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKGVuZ2luZSk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtleGVjbGlzdHNfY29udGV4dF9zdGF0dXNf Y2hhbmdlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1bnNpZ25lZCBsb25nIHN0YXR1cykKPiAr ewo+ICsgICAgICAgLyoKPiArICAgICAgICAqIE9ubHkgdXNlZCB3aGVuIEdWVC1nIGlzIGVuYWJs ZWQgbm93LiBXaGVuIEdWVC1nIGlzIGRpc2FibGVkLAo+ICsgICAgICAgICogVGhlIGNvbXBpbGVy IHNob3VsZCBlbGltaW5hdGUgdGhpcyBmdW5jdGlvbiBhcyBkZWFkLWNvZGUuCj4gKyAgICAgICAg Ki8KPiArICAgICAgIGlmICghSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfR1ZUKSkKPiArICAg ICAgICAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgICAgIGF0b21pY19ub3RpZmllcl9jYWxsX2No YWluKCZycS0+ZW5naW5lLT5jb250ZXh0X3N0YXR1c19ub3RpZmllciwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcnEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBpbnRlbF9lbmdpbmVfY29udGV4dF9pbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gK3sKPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsgICAgICAgaWYgKFJF QURfT05DRShlbmdpbmUtPnN0YXRzLmVuYWJsZWQpID09IDApCj4gKyAgICAgICAgICAgICAgIHJl dHVybjsKPiArCj4gKyAgICAgICB3cml0ZV9zZXFsb2NrX2lycXNhdmUoJmVuZ2luZS0+c3RhdHMu bG9jaywgZmxhZ3MpOwo+ICsKPiArICAgICAgIGlmIChlbmdpbmUtPnN0YXRzLmVuYWJsZWQgPiAw KSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChlbmdpbmUtPnN0YXRzLmFjdGl2ZSsrID09IDApCj4g KyAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lLT5zdGF0cy5zdGFydCA9IGt0aW1lX2dldCgp Owo+ICsgICAgICAgICAgICAgICBHRU1fQlVHX09OKGVuZ2luZS0+c3RhdHMuYWN0aXZlID09IDAp Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZl bmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW50ZWxf ZW5naW5lX2NvbnRleHRfb3V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKyAgICAgICBpZiAoUkVBRF9PTkNF KGVuZ2luZS0+c3RhdHMuZW5hYmxlZCkgPT0gMCkKPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ ICsKPiArICAgICAgIHdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmZW5naW5lLT5zdGF0cy5sb2NrLCBm bGFncyk7Cj4gKwo+ICsgICAgICAgaWYgKGVuZ2luZS0+c3RhdHMuZW5hYmxlZCA+IDApIHsKPiAr ICAgICAgICAgICAgICAga3RpbWVfdCBsYXN0Owo+ICsKPiArICAgICAgICAgICAgICAgaWYgKGVu Z2luZS0+c3RhdHMuYWN0aXZlICYmIC0tZW5naW5lLT5zdGF0cy5hY3RpdmUgPT0gMCkgewo+ICsg ICAgICAgICAgICAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogRGVj cmVtZW50IHRoZSBhY3RpdmUgY29udGV4dCBjb3VudCBhbmQgaW4gY2FzZSBHUFUKPiArICAgICAg ICAgICAgICAgICAgICAgICAgKiBpcyBub3cgaWRsZSBhZGQgdXAgdG8gdGhlIHJ1bm5pbmcgdG90 YWwuCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgbGFzdCA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgZW5naW5lLT5zdGF0cy5zdGFydCk7Cj4g Kwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+c3RhdHMudG90YWwgPSBrdGltZV9h ZGQoZW5naW5lLT5zdGF0cy50b3RhbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QpOwo+ICsgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGVuZ2luZS0+c3RhdHMuYWN0aXZlID09IDApIHsKPiArICAgICAgICAgICAgICAgICAgICAg ICAvKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIEFmdGVyIHR1cm5pbmcgb24gZW5naW5l IHN0YXRzLCBjb250ZXh0IG91dCBtaWdodCBiZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAq IHRoZSBmaXJzdCBldmVudCBpbiB3aGljaCBjYXNlIHdlIGFjY291bnQgZnJvbSB0aGUKPiArICAg ICAgICAgICAgICAgICAgICAgICAgKiB0aW1lIHN0YXRzIGdhdGhlcmluZyB3YXMgdHVybmVkIG9u Lgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAg IGxhc3QgPSBrdGltZV9zdWIoa3RpbWVfZ2V0KCksIGVuZ2luZS0+c3RhdHMuZW5hYmxlZF9hdCk7 Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+c3RhdHMudG90YWwgPSBrdGlt ZV9hZGQoZW5naW5lLT5zdGF0cy50b3RhbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QpOwo+ICsgICAgICAgICAgICAgICB9Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2lu ZS0+c3RhdHMubG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtleGVjbGlz dHNfY2hlY2tfY29udGV4dChjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ ICt7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IGNlLT5yaW5nOwo+ ICsgICAgICAgdTMyICpyZWdzID0gY2UtPmxyY19yZWdfc3RhdGU7Cj4gKyAgICAgICBib29sIHZh bGlkID0gdHJ1ZTsKPiArICAgICAgIGludCB4Owo+ICsKPiArICAgICAgIGlmIChyZWdzW0NUWF9S SU5HX1NUQVJUXSAhPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmctPnZtYSkpIHsKPiArICAgICAgICAg ICAgICAgcHJfZXJyKCIlczogY29udGV4dCBzdWJtaXR0ZWQgd2l0aCBpbmNvcnJlY3QgUklOR19T VEFSVCBbJTA4eF0sIGV4cGVjdGVkICUwOHhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICBl bmdpbmUtPm5hbWUsCj4gKyAgICAgICAgICAgICAgICAgICAgICByZWdzW0NUWF9SSU5HX1NUQVJU XSwKPiArICAgICAgICAgICAgICAgICAgICAgIGk5MTVfZ2d0dF9vZmZzZXQocmluZy0+dm1hKSk7 Cj4gKyAgICAgICAgICAgICAgIHJlZ3NbQ1RYX1JJTkdfU1RBUlRdID0gaTkxNV9nZ3R0X29mZnNl dChyaW5nLT52bWEpOwo+ICsgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwo+ICsgICAgICAg fQo+ICsKPiArICAgICAgIGlmICgocmVnc1tDVFhfUklOR19DVExdICYgfihSSU5HX1dBSVQgfCBS SU5HX1dBSVRfU0VNQVBIT1JFKSkgIT0KPiArICAgICAgICAgICAoUklOR19DVExfU0laRShyaW5n LT5zaXplKSB8IFJJTkdfVkFMSUQpKSB7Cj4gKyAgICAgICAgICAgICAgIHByX2VycigiJXM6IGNv bnRleHQgc3VibWl0dGVkIHdpdGggaW5jb3JyZWN0IFJJTkdfQ1RMIFslMDh4XSwgZXhwZWN0ZWQg JTA4eFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+bmFtZSwKPiArICAgICAg ICAgICAgICAgICAgICAgIHJlZ3NbQ1RYX1JJTkdfQ1RMXSwKPiArICAgICAgICAgICAgICAgICAg ICAgICh1MzIpKFJJTkdfQ1RMX1NJWkUocmluZy0+c2l6ZSkgfCBSSU5HX1ZBTElEKSk7Cj4gKyAg ICAgICAgICAgICAgIHJlZ3NbQ1RYX1JJTkdfQ1RMXSA9IFJJTkdfQ1RMX1NJWkUocmluZy0+c2l6 ZSkgfCBSSU5HX1ZBTElEOwo+ICsgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwo+ICsgICAg ICAgfQo+ICsKPiArICAgICAgIHggPSBpbnRlbF9scmNfcmluZ19taV9tb2RlKGVuZ2luZSk7Cj4g KyAgICAgICBpZiAoeCAhPSAtMSAmJiByZWdzW3ggKyAxXSAmIChyZWdzW3ggKyAxXSA+PiAxNikg JiBTVE9QX1JJTkcpIHsKPiArICAgICAgICAgICAgICAgcHJfZXJyKCIlczogY29udGV4dCBzdWJt aXR0ZWQgd2l0aCBTVE9QX1JJTkcgWyUwOHhdIGluIFJJTkdfTUlfTU9ERVxuIiwKPiArICAgICAg ICAgICAgICAgICAgICAgIGVuZ2luZS0+bmFtZSwgcmVnc1t4ICsgMV0pOwo+ICsgICAgICAgICAg ICAgICByZWdzW3ggKyAxXSAmPSB+U1RPUF9SSU5HOwo+ICsgICAgICAgICAgICAgICByZWdzW3gg KyAxXSB8PSBTVE9QX1JJTkcgPDwgMTY7Cj4gKyAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7 Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgV0FSTl9PTkNFKCF2YWxpZCwgIkludmFsaWQgbHJj IHN0YXRlIGZvdW5kIGJlZm9yZSBzdWJtaXNzaW9uXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgcmVzZXRfYWN0aXZlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArICAgICAg IHN0cnVjdCBpbnRlbF9jb250ZXh0ICogY29uc3QgY2UgPSBycS0+aHdfY29udGV4dDsKPiArICAg ICAgIHUzMiBoZWFkOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBUaGUgZXhlY3V0aW5n IGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiBXZSB3YW50IHRvIHByZXZlbnQKPiArICAgICAg ICAqIGZ1cnRoZXIgZXhlY3V0aW9uIGFsb25nIHRoaXMgY29udGV4dCBhbmQgcHJvcGFnYXRlIHRo ZSBlcnJvciBvbgo+ICsgICAgICAgICogdG8gYW55dGhpbmcgZGVwZW5kaW5nIG9uIGl0cyByZXN1 bHRzLgo+ICsgICAgICAgICoKPiArICAgICAgICAqIEluIF9faTkxNV9yZXF1ZXN0X3N1Ym1pdCgp LCB3ZSBhcHBseSB0aGUgLUVJTyBhbmQgcmVtb3ZlIHRoZQo+ICsgICAgICAgICogcmVxdWVzdHMn IHBheWxvYWRzIGZvciBhbnkgYmFubmVkIHJlcXVlc3RzLiBCdXQgZmlyc3QsIHdlIG11c3QKPiAr ICAgICAgICAqIHJld2luZCB0aGUgY29udGV4dCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgaW5j b21wbGV0ZSByZXF1ZXN0IHNvCj4gKyAgICAgICAgKiB0aGF0IHdlIGRvIG5vdCBqdW1wIGJhY2sg aW50byB0aGUgbWlkZGxlIG9mIHRoZSBiYXRjaC4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBX ZSBwcmVzZXJ2ZSB0aGUgYnJlYWRjcnVtYnMgYW5kIHNlbWFwaG9yZXMgb2YgdGhlIGluY29tcGxl dGUKPiArICAgICAgICAqIHJlcXVlc3RzIHNvIHRoYXQgaW50ZXItdGltZWxpbmUgZGVwZW5kZW5j aWVzIChpLmUgb3RoZXIgdGltZWxpbmVzKQo+ICsgICAgICAgICogcmVtYWluIGNvcnJlY3RseSBv cmRlcmVkLiBBbmQgd2UgZGVmZXIgdG8gX19pOTE1X3JlcXVlc3Rfc3VibWl0KCkKPiArICAgICAg ICAqIHNvIHRoYXQgYWxsIGFzeW5jaHJvbm91cyB3YWl0cyBhcmUgY29ycmVjdGx5IGhhbmRsZWQu Cj4gKyAgICAgICAgKi8KPiArICAgICAgIEdFTV9UUkFDRSgiJXMoJXMpOiB7IHJxPSVsbHg6JWxs ZCB9XG4iLAo+ICsgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBlbmdpbmUtPm5hbWUsIHJxLT5m ZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8pOwo+ICsKPiArICAgICAgIC8qIE9uIHJlc3Vi bWlzc2lvbiBvZiB0aGUgYWN0aXZlIHJlcXVlc3QsIHBheWxvYWQgd2lsbCBiZSBzY3J1YmJlZCAq Lwo+ICsgICAgICAgaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+ICsgICAgICAgICAg ICAgICBoZWFkID0gcnEtPnRhaWw7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgIGhl YWQgPSBhY3RpdmVfcmVxdWVzdChjZS0+dGltZWxpbmUsIHJxKS0+aGVhZDsKPiArICAgICAgIGNl LT5yaW5nLT5oZWFkID0gaW50ZWxfcmluZ193cmFwKGNlLT5yaW5nLCBoZWFkKTsKPiArICAgICAg IGludGVsX3JpbmdfdXBkYXRlX3NwYWNlKGNlLT5yaW5nKTsKPiArCj4gKyAgICAgICAvKiBTY3J1 YiB0aGUgY29udGV4dCBpbWFnZSB0byBwcmV2ZW50IHJlcGxheWluZyB0aGUgcHJldmlvdXMgYmF0 Y2ggKi8KPiArICAgICAgIGludGVsX2xyX2NvbnRleHRfcmVzdG9yZV9kZWZhdWx0X3N0YXRlKGNl LCBlbmdpbmUpOwo+ICsgICAgICAgaW50ZWxfbHJfY29udGV4dF91cGRhdGVfcmVnX3N0YXRlKGNl LCBlbmdpbmUpOwo+ICsKPiArICAgICAgIC8qIFdlJ3ZlIHN3aXRjaGVkIGF3YXksIHNvIHRoaXMg c2hvdWxkIGJlIGEgbm8tb3AsIGJ1dCBpbnRlbnQgbWF0dGVycyAqLwo+ICsgICAgICAgY2UtPmxy Y19kZXNjIHw9IENUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCj4gK19fZXhlY2xpc3RzX3NjaGVkdWxlX2luKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICogY29uc3QgZW5naW5lID0gcnEtPmVuZ2luZTsKPiArICAgICAgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICogY29uc3QgY2UgPSBycS0+aHdfY29udGV4dDsKPiArCj4gKyAgICAgICBpbnRlbF9j b250ZXh0X2dldChjZSk7Cj4gKwo+ICsgICAgICAgaWYgKHVubGlrZWx5KGk5MTVfZ2VtX2NvbnRl eHRfaXNfYmFubmVkKGNlLT5nZW1fY29udGV4dCkpKQo+ICsgICAgICAgICAgICAgICByZXNldF9h Y3RpdmUocnEsIGVuZ2luZSk7Cj4gKwo+ICsgICAgICAgaWYgKElTX0VOQUJMRUQoQ09ORklHX0RS TV9JOTE1X0RFQlVHX0dFTSkpCj4gKyAgICAgICAgICAgICAgIGV4ZWNsaXN0c19jaGVja19jb250 ZXh0KGNlLCBlbmdpbmUpOwo+ICsKPiArICAgICAgIGlmIChjZS0+dGFnKSB7Cj4gKyAgICAgICAg ICAgICAgIC8qIFVzZSBhIGZpeGVkIHRhZyBmb3IgT0EgYW5kIGZyaWVuZHMgKi8KPiArICAgICAg ICAgICAgICAgY2UtPmxyY19kZXNjIHw9ICh1NjQpY2UtPnRhZyA8PCAzMjsKPiArICAgICAgIH0g ZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IG5lZWQgYSBzdHJpY3QgbWF0Y2hp bmcgdGFnLCBqdXN0IGRpZmZlcmVudCB2YWx1ZXMgKi8KPiArICAgICAgICAgICAgICAgY2UtPmxy Y19kZXNjICY9IH5HRU5NQVNLX1VMTCg0NywgMzcpOwo+ICsgICAgICAgICAgICAgICBjZS0+bHJj X2Rlc2MgfD0KPiArICAgICAgICAgICAgICAgICAgICAgICAodTY0KShlbmdpbmUtPmNvbnRleHRf dGFnKysgJSBOVU1fQ09OVEVYVF9UQUcpIDw8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgR0VO MTFfU1dfQ1RYX0lEX1NISUZUOwo+ICsgICAgICAgICAgICAgICBCVUlMRF9CVUdfT04oTlVNX0NP TlRFWFRfVEFHID4gR0VOMTJfTUFYX0NPTlRFWFRfSFdfSUQpOwo+ICsgICAgICAgfQo+ICsKPiAr ICAgICAgIF9faW50ZWxfZ3RfcG1fZ2V0KGVuZ2luZS0+Z3QpOwo+ICsgICAgICAgZXhlY2xpc3Rz X2NvbnRleHRfc3RhdHVzX2NoYW5nZShycSwgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9JTik7Cj4g KyAgICAgICBpbnRlbF9lbmdpbmVfY29udGV4dF9pbihlbmdpbmUpOwo+ICsKPiArICAgICAgIHJl dHVybiBlbmdpbmU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcmVxdWVz dCAqCj4gK2V4ZWNsaXN0c19zY2hlZHVsZV9pbihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50 IGlkeCkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKiBjb25zdCBjZSA9IHJx LT5od19jb250ZXh0Owo+ICsgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqb2xkOwo+ICsK PiArICAgICAgIEdFTV9CVUdfT04oIWludGVsX2VuZ2luZV9wbV9pc19hd2FrZShycS0+ZW5naW5l KSk7Cj4gKyAgICAgICB0cmFjZV9pOTE1X3JlcXVlc3RfaW4ocnEsIGlkeCk7Cj4gKwo+ICsgICAg ICAgb2xkID0gUkVBRF9PTkNFKGNlLT5pbmZsaWdodCk7Cj4gKyAgICAgICBkbyB7Cj4gKyAgICAg ICAgICAgICAgIGlmICghb2xkKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfT05D RShjZS0+aW5mbGlnaHQsIF9fZXhlY2xpc3RzX3NjaGVkdWxlX2luKHJxKSk7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0gd2hp bGUgKCF0cnlfY21weGNoZygmY2UtPmluZmxpZ2h0LCAmb2xkLCBwdHJfaW5jKG9sZCkpKTsKPiAr Cj4gKyAgICAgICBHRU1fQlVHX09OKGludGVsX2NvbnRleHRfaW5mbGlnaHQoY2UpICE9IHJxLT5l bmdpbmUpOwo+ICsgICAgICAgcmV0dXJuIGk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBraWNrX3NpYmxpbmdzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF92aXJ0dWFs X2VuZ2luZSAqdmUgPQo+ICsgICAgICAgICAgICAgICBjb250YWluZXJfb2YoY2UsIHR5cGVvZigq dmUpLCBjb250ZXh0KTsKPiArICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKm5leHQgPSBSRUFE X09OQ0UodmUtPnJlcXVlc3QpOwo+ICsKPiArICAgICAgIGlmIChuZXh0ICYmIG5leHQtPmV4ZWN1 dGlvbl9tYXNrICYgfnJxLT5leGVjdXRpb25fbWFzaykKPiArICAgICAgICAgICAgICAgdGFza2xl dF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHZvaWQKPiArX19leGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICogY29uc3QgZW5naW5lKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq IGNvbnN0IGNlID0gcnEtPmh3X2NvbnRleHQ7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAq IE5CIHByb2Nlc3NfY3NiKCkgaXMgbm90IHVuZGVyIHRoZSBlbmdpbmUtPmFjdGl2ZS5sb2NrIGFu ZCBoZW5jZQo+ICsgICAgICAgICogc2NoZWR1bGVfb3V0IGNhbiByYWNlIHdpdGggc2NoZWR1bGVf aW4gbWVhbmluZyB0aGF0IHdlIHNob3VsZAo+ICsgICAgICAgICogcmVmcmFpbiBmcm9tIGRvaW5n IG5vbi10cml2aWFsIHdvcmsgaGVyZS4KPiArICAgICAgICAqLwo+ICsKPiArICAgICAgIC8qCj4g KyAgICAgICAgKiBJZiB3ZSBoYXZlIGp1c3QgY29tcGxldGVkIHRoaXMgY29udGV4dCwgdGhlIGVu Z2luZSBtYXkgbm93IGJlCj4gKyAgICAgICAgKiBpZGxlIGFuZCB3ZSB3YW50IHRvIHJlLWVudGVy IHBvd2Vyc2F2aW5nLgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAobGlzdF9pc19sYXN0KCZy cS0+bGluaywgJmNlLT50aW1lbGluZS0+cmVxdWVzdHMpICYmCj4gKyAgICAgICAgICAgaTkxNV9y ZXF1ZXN0X2NvbXBsZXRlZChycSkpCj4gKyAgICAgICAgICAgICAgIGludGVsX2VuZ2luZV9hZGRf cmV0aXJlKGVuZ2luZSwgY2UtPnRpbWVsaW5lKTsKPiArCj4gKyAgICAgICBpbnRlbF9lbmdpbmVf Y29udGV4dF9vdXQoZW5naW5lKTsKPiArICAgICAgIGV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19j aGFuZ2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfT1VUKTsKPiArICAgICAgIGludGVsX2d0 X3BtX3B1dF9hc3luYyhlbmdpbmUtPmd0KTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICog SWYgdGhpcyBpcyBwYXJ0IG9mIGEgdmlydHVhbCBlbmdpbmUsIGl0cyBuZXh0IHJlcXVlc3QgbWF5 Cj4gKyAgICAgICAgKiBoYXZlIGJlZW4gYmxvY2tlZCB3YWl0aW5nIGZvciBhY2Nlc3MgdG8gdGhl IGFjdGl2ZSBjb250ZXh0Lgo+ICsgICAgICAgICogV2UgaGF2ZSB0byBraWNrIGFsbCB0aGUgc2li bGluZ3MgYWdhaW4gaW4gY2FzZSB3ZSBuZWVkIHRvCj4gKyAgICAgICAgKiBzd2l0Y2ggKGUuZy4g dGhlIG5leHQgcmVxdWVzdCBpcyBub3QgcnVubmFibGUgb24gdGhpcwo+ICsgICAgICAgICogZW5n aW5lKS4gSG9wZWZ1bGx5LCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBzdWJtaXR0ZWQgdGhlIG5leHQK PiArICAgICAgICAqIHJlcXVlc3QgYmVmb3JlIHRoZSB0YXNrbGV0IHJ1bnMgYW5kIGRvIG5vdCBu ZWVkIHRvIHJlYnVpbGQKPiArICAgICAgICAqIGVhY2ggdmlydHVhbCB0cmVlIGFuZCBraWNrIGV2 ZXJ5b25lIGFnYWluLgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAoY2UtPmVuZ2luZSAhPSBl bmdpbmUpCj4gKyAgICAgICAgICAgICAgIGtpY2tfc2libGluZ3MocnEsIGNlKTsKPiArCj4gKyAg ICAgICBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZAo+ICtleGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7 Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqIGNvbnN0IGNlID0gcnEtPmh3X2NvbnRl eHQ7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpjdXIsICpvbGQ7Cj4gKwo+ICsg ICAgICAgdHJhY2VfaTkxNV9yZXF1ZXN0X291dChycSk7Cj4gKwo+ICsgICAgICAgb2xkID0gUkVB RF9PTkNFKGNlLT5pbmZsaWdodCk7Cj4gKyAgICAgICBkbwo+ICsgICAgICAgICAgICAgICBjdXIg PSBwdHJfdW5tYXNrX2JpdHMob2xkLCAyKSA/IHB0cl9kZWMob2xkKSA6IE5VTEw7Cj4gKyAgICAg ICB3aGlsZSAoIXRyeV9jbXB4Y2hnKCZjZS0+aW5mbGlnaHQsICZvbGQsIGN1cikpOwo+ICsgICAg ICAgaWYgKCFjdXIpCj4gKyAgICAgICAgICAgICAgIF9fZXhlY2xpc3RzX3NjaGVkdWxlX291dChy cSwgb2xkKTsKPiArCj4gKyAgICAgICBpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiArfQo+ICsKPiAr c3RhdGljIHU2NCBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IHJxLT5od19jb250 ZXh0Owo+ICsgICAgICAgdTY0IGRlc2MgPSBjZS0+bHJjX2Rlc2M7Cj4gKyAgICAgICB1MzIgdGFp bDsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogV2FJZGxlTGl0ZVJlc3RvcmU6YmR3LHNr bAo+ICsgICAgICAgICoKPiArICAgICAgICAqIFdlIHNob3VsZCBuZXZlciBzdWJtaXQgdGhlIGNv bnRleHQgd2l0aCB0aGUgc2FtZSBSSU5HX1RBSUwgdHdpY2UKPiArICAgICAgICAqIGp1c3QgaW4g Y2FzZSB3ZSBzdWJtaXQgYW4gZW1wdHkgcmluZywgd2hpY2ggY29uZnVzZXMgdGhlIEhXLgo+ICsg ICAgICAgICoKPiArICAgICAgICAqIFdlIGFwcGVuZCBhIGNvdXBsZSBvZiBOT09QcyAoZ2VuOF9l bWl0X3dhX3RhaWwpIGFmdGVyIHRoZSBlbmQgb2YKPiArICAgICAgICAqIHRoZSBub3JtYWwgcmVx dWVzdCB0byBiZSBhYmxlIHRvIGFsd2F5cyBhZHZhbmNlIHRoZSBSSU5HX1RBSUwgb24KPiArICAg ICAgICAqIHN1YnNlcXVlbnQgcmVzdWJtaXNzaW9ucyAoZm9yIGxpdGUgcmVzdG9yZSkuIFNob3Vs ZCB0aGF0IGZhaWwgdXMsCj4gKyAgICAgICAgKiBhbmQgd2UgdHJ5IGFuZCBzdWJtaXQgdGhlIHNh bWUgdGFpbCBhZ2FpbiwgZm9yY2UgdGhlIGNvbnRleHQKPiArICAgICAgICAqIHJlbG9hZC4KPiAr ICAgICAgICAqLwo+ICsgICAgICAgdGFpbCA9IGludGVsX3Jpbmdfc2V0X3RhaWwocnEtPnJpbmcs IHJxLT50YWlsKTsKPiArICAgICAgIGlmICh1bmxpa2VseShjZS0+bHJjX3JlZ19zdGF0ZVtDVFhf UklOR19UQUlMXSA9PSB0YWlsKSkKPiArICAgICAgICAgICAgICAgZGVzYyB8PSBDVFhfREVTQ19G T1JDRV9SRVNUT1JFOwo+ICsgICAgICAgY2UtPmxyY19yZWdfc3RhdGVbQ1RYX1JJTkdfVEFJTF0g PSB0YWlsOwo+ICsgICAgICAgcnEtPnRhaWwgPSBycS0+d2FfdGFpbDsKPiArCj4gKyAgICAgICAv Kgo+ICsgICAgICAgICogTWFrZSBzdXJlIHRoZSBjb250ZXh0IGltYWdlIGlzIGNvbXBsZXRlIGJl Zm9yZSB3ZSBzdWJtaXQgaXQgdG8gSFcuCj4gKyAgICAgICAgKgo+ICsgICAgICAgICogT3N0ZW5z aWJseSwgd3JpdGVzIChpbmNsdWRpbmcgdGhlIFdDQikgc2hvdWxkIGJlIGZsdXNoZWQgcHJpb3Ig dG8KPiArICAgICAgICAqIGFuIHVuY2FjaGVkIHdyaXRlIHN1Y2ggYXMgb3VyIG1taW8gcmVnaXN0 ZXIgYWNjZXNzLCB0aGUgZW1waXJpY2FsCj4gKyAgICAgICAgKiBldmlkZW5jZSAoZXNwLiBvbiBC cmFzd2VsbCkgc3VnZ2VzdHMgdGhhdCB0aGUgV0Mgd3JpdGUgaW50byBtZW1vcnkKPiArICAgICAg ICAqIG1heSBub3QgYmUgdmlzaWJsZSB0byB0aGUgSFcgcHJpb3IgdG8gdGhlIGNvbXBsZXRpb24g b2YgdGhlIFVDCj4gKyAgICAgICAgKiByZWdpc3RlciB3cml0ZSBhbmQgdGhhdCB3ZSBtYXkgYmVn aW4gZXhlY3V0aW9uIGZyb20gdGhlIGNvbnRleHQKPiArICAgICAgICAqIGJlZm9yZSBpdHMgaW1h Z2UgaXMgY29tcGxldGUgbGVhZGluZyB0byBpbnZhbGlkIFBEIGNoYXNpbmcuCj4gKyAgICAgICAg Ki8KPiArICAgICAgIHdtYigpOwo+ICsKPiArICAgICAgIC8qIFdhXzE2MDcxMzgzNDA6dGdsICov Cj4gKyAgICAgICBpZiAoSVNfVEdMX1JFVklEKHJxLT5pOTE1LCBUR0xfUkVWSURfQTAsIFRHTF9S RVZJRF9BMCkpCj4gKyAgICAgICAgICAgICAgIGRlc2MgfD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9S RTsKPiArCj4gKyAgICAgICBjZS0+bHJjX2Rlc2MgJj0gfkNUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7 Cj4gKyAgICAgICByZXR1cm4gZGVzYzsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHdy aXRlX2Rlc2Moc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywgdTY0IGRl c2MsIHUzMiBwb3J0KQo+ICt7Cj4gKyAgICAgICBpZiAoZXhlY2xpc3RzLT5jdHJsX3JlZykgewo+ ICsgICAgICAgICAgICAgICB3cml0ZWwobG93ZXJfMzJfYml0cyhkZXNjKSwgZXhlY2xpc3RzLT5z dWJtaXRfcmVnICsgcG9ydCAqIDIpOwo+ICsgICAgICAgICAgICAgICB3cml0ZWwodXBwZXJfMzJf Yml0cyhkZXNjKSwgZXhlY2xpc3RzLT5zdWJtaXRfcmVnICsgcG9ydCAqIDIgKyAxKTsKPiArICAg ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIHdyaXRlbCh1cHBlcl8zMl9iaXRzKGRlc2Mp LCBleGVjbGlzdHMtPnN1Ym1pdF9yZWcpOwo+ICsgICAgICAgICAgICAgICB3cml0ZWwobG93ZXJf MzJfYml0cyhkZXNjKSwgZXhlY2xpc3RzLT5zdWJtaXRfcmVnKTsKPiArICAgICAgIH0KPiArfQo+ ICsKPiArc3RhdGljIF9fbWF5YmVfdW51c2VkIHZvaWQKPiArdHJhY2VfcG9ydHMoY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywKPiArICAgICAgICAgICBjb25z dCBjaGFyICptc2csCj4gKyAgICAgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0ICpw b3J0cykKPiArewo+ICsgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l ID0KPiArICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGV4ZWNsaXN0cywgdHlwZW9mKCplbmdp bmUpLCBleGVjbGlzdHMpOwo+ICsKPiArICAgICAgIGlmICghcG9ydHNbMF0pCj4gKyAgICAgICAg ICAgICAgIHJldHVybjsKPiArCj4gKyAgICAgICBHRU1fVFJBQ0UoIiVzOiAlcyB7ICVsbHg6JWxs ZCVzLCAlbGx4OiVsbGQgfVxuIiwKPiArICAgICAgICAgICAgICAgICBlbmdpbmUtPm5hbWUsIG1z ZywKPiArICAgICAgICAgICAgICAgICBwb3J0c1swXS0+ZmVuY2UuY29udGV4dCwKPiArICAgICAg ICAgICAgICAgICBwb3J0c1swXS0+ZmVuY2Uuc2Vxbm8sCj4gKyAgICAgICAgICAgICAgICAgaTkx NV9yZXF1ZXN0X2NvbXBsZXRlZChwb3J0c1swXSkgPyAiISIgOgo+ICsgICAgICAgICAgICAgICAg IGk5MTVfcmVxdWVzdF9zdGFydGVkKHBvcnRzWzBdKSA/ICIqIiA6Cj4gKyAgICAgICAgICAgICAg ICAgIiIsCj4gKyAgICAgICAgICAgICAgICAgcG9ydHNbMV0gPyBwb3J0c1sxXS0+ZmVuY2UuY29u dGV4dCA6IDAsCj4gKyAgICAgICAgICAgICAgICAgcG9ydHNbMV0gPyBwb3J0c1sxXS0+ZmVuY2Uu c2Vxbm8gOiAwKTsKPiArfQo+ICsKPiArc3RhdGljIF9fbWF5YmVfdW51c2VkIGJvb2wKPiArYXNz ZXJ0X3BlbmRpbmdfdmFsaWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4 ZWNsaXN0cywKPiArICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cpCj4gK3sKPiAr ICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCAqcG9ydCwgKnJxOwo+ICsgICAgICAg c3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gTlVMTDsKPiArCj4gKyAgICAgICB0cmFjZV9wb3J0 cyhleGVjbGlzdHMsIG1zZywgZXhlY2xpc3RzLT5wZW5kaW5nKTsKPiArCj4gKyAgICAgICBpZiAo IWV4ZWNsaXN0cy0+cGVuZGluZ1swXSkgewo+ICsgICAgICAgICAgICAgICBHRU1fVFJBQ0VfRVJS KCJOb3RoaW5nIHBlbmRpbmcgZm9yIHByb21vdGlvbiFcbiIpOwo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKGV4ZWNsaXN0cy0+cGVu ZGluZ1tleGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cyldKSB7Cj4gKyAgICAgICAgICAgICAg IEdFTV9UUkFDRV9FUlIoIkV4Y2VzcyBwZW5kaW5nWyVkXSBmb3IgcHJvbW90aW9uIVxuIiwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0 cykpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICB9Cj4gKwo+ICsg ICAgICAgZm9yIChwb3J0ID0gZXhlY2xpc3RzLT5wZW5kaW5nOyAocnEgPSAqcG9ydCk7IHBvcnQr Kykgewo+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsgICAgICAgICAg ICAgICBib29sIG9rID0gdHJ1ZTsKPiArCj4gKyAgICAgICAgICAgICAgIEdFTV9CVUdfT04oIWty ZWZfcmVhZCgmcnEtPmZlbmNlLnJlZmNvdW50KSk7Cj4gKyAgICAgICAgICAgICAgIEdFTV9CVUdf T04oIWk5MTVfcmVxdWVzdF9pc19hY3RpdmUocnEpKTsKPiArCj4gKyAgICAgICAgICAgICAgIGlm IChjZSA9PSBycS0+aHdfY29udGV4dCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIEdFTV9U UkFDRV9FUlIoIkR1cCBjb250ZXh0OiVsbHggaW4gcGVuZGluZ1slemRdXG4iLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2UtPnRpbWVsaW5lLT5mZW5jZV9jb250ZXh0 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCAtIGV4ZWNsaXN0 cy0+cGVuZGluZyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsg ICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIGNlID0gcnEtPmh3X2NvbnRleHQ7Cj4g Kwo+ICsgICAgICAgICAgICAgICAvKiBIb2xkIHRpZ2h0bHkgb250byB0aGUgbG9jayB0byBwcmV2 ZW50IGNvbmN1cnJlbnQgcmV0aXJlcyEgKi8KPiArICAgICAgICAgICAgICAgaWYgKCFzcGluX3Ry eWxvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKSkKPiArICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgIGlmIChpOTE1X3JlcXVlc3RfY29tcGxl dGVkKHJxKSkKPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHVubG9jazsKPiArCj4gKyAg ICAgICAgICAgICAgIGlmIChpOTE1X2FjdGl2ZV9pc19pZGxlKCZjZS0+YWN0aXZlKSAmJgo+ICsg ICAgICAgICAgICAgICAgICAgIWk5MTVfZ2VtX2NvbnRleHRfaXNfa2VybmVsKGNlLT5nZW1fY29u dGV4dCkpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBHRU1fVFJBQ0VfRVJSKCJJbmFjdGl2 ZSBjb250ZXh0OiVsbHggaW4gcGVuZGluZ1slemRdXG4iLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2UtPnRpbWVsaW5lLT5mZW5jZV9jb250ZXh0LAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCAtIGV4ZWNsaXN0cy0+cGVuZGluZyk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKPiArICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHVubG9jazsKPiArICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgICAgaWYgKCFpOTE1X3ZtYV9pc19waW5uZWQoY2UtPnN0YXRlKSkgewo+ICsgICAgICAgICAg ICAgICAgICAgICAgIEdFTV9UUkFDRV9FUlIoIlVucGlubmVkIGNvbnRleHQ6JWxseCBpbiBwZW5k aW5nWyV6ZF1cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZS0+ dGltZWxpbmUtPmZlbmNlX2NvbnRleHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb3J0IC0gZXhlY2xpc3RzLT5wZW5kaW5nKTsKPiArICAgICAgICAgICAgICAgICAg ICAgICBvayA9IGZhbHNlOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5sb2NrOwo+ ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBpZiAoIWk5MTVfdm1hX2lz X3Bpbm5lZChjZS0+cmluZy0+dm1hKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIEdFTV9U UkFDRV9FUlIoIlVucGlubmVkIHJpbmc6JWxseCBpbiBwZW5kaW5nWyV6ZF1cbiIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZS0+dGltZWxpbmUtPmZlbmNlX2NvbnRl eHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0IC0gZXhlY2xp c3RzLT5wZW5kaW5nKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5sb2NrOwo+ICsgICAgICAgICAgICAgICB9Cj4g Kwo+ICt1bmxvY2s6Cj4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJx LT5sb2NrLCBmbGFncyk7Cj4gKyAgICAgICAgICAgICAgIGlmICghb2spCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVy biBjZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9wb3J0cyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF9l bmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gKyAgICAg ICB1bnNpZ25lZCBpbnQgbjsKPiArCj4gKyAgICAgICBHRU1fQlVHX09OKCFhc3NlcnRfcGVuZGlu Z192YWxpZChleGVjbGlzdHMsICJzdWJtaXQiKSk7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAg ICAqIFdlIGNhbiBza2lwIGFjcXVpcmluZyBpbnRlbF9ydW50aW1lX3BtX2dldCgpIGhlcmUgYXMg aXQgd2FzIHRha2VuCj4gKyAgICAgICAgKiBvbiBvdXIgYmVoYWxmIGJ5IHRoZSByZXF1ZXN0IChz ZWUgaTkxNV9nZW1fbWFya19idXN5KCkpIGFuZCBpdCB3aWxsCj4gKyAgICAgICAgKiBub3QgYmUg cmVsaW5xdWlzaGVkIHVudGlsIHRoZSBkZXZpY2UgaXMgaWRsZSAoc2VlCj4gKyAgICAgICAgKiBp OTE1X2dlbV9pZGxlX3dvcmtfaGFuZGxlcigpKS4gQXMgYSBwcmVjYXV0aW9uLCB3ZSBtYWtlIHN1 cmUKPiArICAgICAgICAqIHRoYXQgYWxsIEVMU1AgYXJlIGRyYWluZWQgaS5lLiB3ZSBoYXZlIHBy b2Nlc3NlZCB0aGUgQ1NCLAo+ICsgICAgICAgICogYmVmb3JlIGFsbG93aW5nIG91cnNlbHZlcyB0 byBpZGxlIGFuZCBjYWxsaW5nIGludGVsX3J1bnRpbWVfcG1fcHV0KCkuCj4gKyAgICAgICAgKi8K PiArICAgICAgIEdFTV9CVUdfT04oIWludGVsX2VuZ2luZV9wbV9pc19hd2FrZShlbmdpbmUpKTsK PiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogRUxTUSBub3RlOiB0aGUgc3VibWl0IHF1ZXVl IGlzIG5vdCBjbGVhcmVkIGFmdGVyIGJlaW5nIHN1Ym1pdHRlZAo+ICsgICAgICAgICogdG8gdGhl IEhXIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFsd2F5cyBjbGVhbiBpdCB1cC4gVGhpcyBp cwo+ICsgICAgICAgICogY3VycmVudGx5IGVuc3VyZWQgYnkgdGhlIGZhY3QgdGhhdCB3ZSBhbHdh eXMgd3JpdGUgdGhlIHNhbWUgbnVtYmVyCj4gKyAgICAgICAgKiBvZiBlbHNxIGVudHJpZXMsIGtl ZXAgdGhpcyBpbiBtaW5kIGJlZm9yZSBjaGFuZ2luZyB0aGUgbG9vcCBiZWxvdy4KPiArICAgICAg ICAqLwo+ICsgICAgICAgZm9yIChuID0gZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpOyBu LS07ICkgewo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IGV4ZWNs aXN0cy0+cGVuZGluZ1tuXTsKPiArCj4gKyAgICAgICAgICAgICAgIHdyaXRlX2Rlc2MoZXhlY2xp c3RzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHJxID8gZXhlY2xpc3RzX3VwZGF0ZV9j b250ZXh0KHJxKSA6IDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgbik7Cj4gKyAgICAg ICB9Cj4gKwo+ICsgICAgICAgLyogd2UgbmVlZCB0byBtYW51YWxseSBsb2FkIHRoZSBzdWJtaXQg cXVldWUgKi8KPiArICAgICAgIGlmIChleGVjbGlzdHMtPmN0cmxfcmVnKQo+ICsgICAgICAgICAg ICAgICB3cml0ZWwoRUxfQ1RSTF9MT0FELCBleGVjbGlzdHMtPmN0cmxfcmVnKTsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24oY29uc3Qgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gKElTX0VOQUJMRUQoQ09ORklH X0RSTV9JOTE1X0dWVCkgJiYKPiArICAgICAgICAgICAgICAgaTkxNV9nZW1fY29udGV4dF9mb3Jj ZV9zaW5nbGVfc3VibWlzc2lvbihjZS0+Z2VtX2NvbnRleHQpKTsKPiArfQo+ICsKPiArc3RhdGlj IGJvb2wgY2FuX21lcmdlX2N0eChjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqcHJldiwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpuZXh0 KQo+ICt7Cj4gKyAgICAgICBpZiAocHJldiAhPSBuZXh0KQo+ICsgICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgaWYgKGN0eF9zaW5nbGVfcG9ydF9zdWJtaXNzaW9uKHBy ZXYpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgcmV0dXJu IHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGNhbl9tZXJnZV9ycShjb25zdCBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpwcmV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpuZXh0KQo+ICt7Cj4gKyAgICAgICBHRU1fQlVHX09OKHByZXYgPT0g bmV4dCk7Cj4gKyAgICAgICBHRU1fQlVHX09OKCFhc3NlcnRfcHJpb3JpdHlfcXVldWUocHJldiwg bmV4dCkpOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBXZSBkbyBub3Qgc3VibWl0IGtu b3duIGNvbXBsZXRlZCByZXF1ZXN0cy4gVGhlcmVmb3JlIGlmIHRoZSBuZXh0Cj4gKyAgICAgICAg KiByZXF1ZXN0IGlzIGFscmVhZHkgY29tcGxldGVkLCB3ZSBjYW4gcHJldGVuZCB0byBtZXJnZSBp dCBpbgo+ICsgICAgICAgICogd2l0aCB0aGUgcHJldmlvdXMgY29udGV4dCAoYW5kIHdlIHdpbGwg c2tpcCB1cGRhdGluZyB0aGUgRUxTUAo+ICsgICAgICAgICogYW5kIHRyYWNraW5nKS4gVGh1cyBo b3BlZnVsbHkga2VlcGluZyB0aGUgRUxTUCBmdWxsIHdpdGggYWN0aXZlCj4gKyAgICAgICAgKiBj b250ZXh0cywgZGVzcGl0ZSB0aGUgYmVzdCBlZmZvcnRzIG9mIHByZWVtcHQtdG8tYnVzeSB0byBj b25mdXNlCj4gKyAgICAgICAgKiB1cy4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKGk5MTVf cmVxdWVzdF9jb21wbGV0ZWQobmV4dCkpCj4gKyAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+ ICsKPiArICAgICAgIGlmICh1bmxpa2VseSgocHJldi0+ZmxhZ3MgXiBuZXh0LT5mbGFncykgJgo+ ICsgICAgICAgICAgICAgICAgICAgIChJOTE1X1JFUVVFU1RfTk9QUkVFTVBUIHwgSTkxNV9SRVFV RVNUX1NFTlRJTkVMKSkpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAg ICAgICBpZiAoIWNhbl9tZXJnZV9jdHgocHJldi0+aHdfY29udGV4dCwgbmV4dC0+aHdfY29udGV4 dCkpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICAgICByZXR1cm4g dHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmlydHVhbF9tYXRjaGVzKGNvbnN0IHN0cnVj dCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArICAgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmluZmxpZ2h0Owo+ICsKPiArICAgICAgIGlm ICghKHJxLT5leGVjdXRpb25fbWFzayAmIGVuZ2luZS0+bWFzaykpIC8qIFdlIHBlZWtlZCB0b28g c29vbiEgKi8KPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgIC8q Cj4gKyAgICAgICAgKiBXZSB0cmFjayB3aGVuIHRoZSBIVyBoYXMgY29tcGxldGVkIHNhdmluZyB0 aGUgY29udGV4dCBpbWFnZQo+ICsgICAgICAgICogKGkuZS4gd2hlbiB3ZSBoYXZlIHNlZW4gdGhl IGZpbmFsIENTIGV2ZW50IHN3aXRjaGluZyBvdXQgb2YKPiArICAgICAgICAqIHRoZSBjb250ZXh0 KSBhbmQgbXVzdCBub3Qgb3ZlcndyaXRlIHRoZSBjb250ZXh0IGltYWdlIGJlZm9yZQo+ICsgICAg ICAgICogdGhlbi4gVGhpcyByZXN0cmljdHMgdXMgdG8gb25seSB1c2luZyB0aGUgYWN0aXZlIGVu Z2luZQo+ICsgICAgICAgICogd2hpbGUgdGhlIHByZXZpb3VzIHZpcnR1YWxpemVkIHJlcXVlc3Qg aXMgaW5mbGlnaHQgKHNvCj4gKyAgICAgICAgKiB3ZSByZXVzZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0 cykuIFRoaXMgaXMgYSB2ZXJ5IHNtYWxsCj4gKyAgICAgICAgKiBoeXN0ZXJzaXMgb24gdGhlIGdy ZWVkeSBzZWVsY3Rpb24gYWxnb3JpdGhtLgo+ICsgICAgICAgICovCj4gKyAgICAgICBpbmZsaWdo dCA9IGludGVsX2NvbnRleHRfaW5mbGlnaHQoJnZlLT5jb250ZXh0KTsKPiArICAgICAgIGlmIChp bmZsaWdodCAmJiBpbmZsaWdodCAhPSBlbmdpbmUpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBm YWxzZTsKPiArCj4gKyAgICAgICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dmlydHVhbF94ZmVyX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqb2xk ID0gdmUtPnNpYmxpbmdzWzBdOwo+ICsKPiArICAgICAgIC8qIEFsbCB1bmF0dGFjaGVkIChycS0+ ZW5naW5lID09IG9sZCkgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlZCAqLwo+ICsKPiArICAgICAg IHNwaW5fbG9jaygmb2xkLT5icmVhZGNydW1icy5pcnFfbG9jayk7Cj4gKyAgICAgICBpZiAoIWxp c3RfZW1wdHkoJnZlLT5jb250ZXh0LnNpZ25hbF9saW5rKSkgewo+ICsgICAgICAgICAgICAgICBs aXN0X21vdmVfdGFpbCgmdmUtPmNvbnRleHQuc2lnbmFsX2xpbmssCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZlbmdpbmUtPmJyZWFkY3J1bWJzLnNpZ25hbGVycyk7Cj4gKyAgICAg ICAgICAgICAgIGludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhlbmdpbmUpOwo+ICsgICAg ICAgfQo+ICsgICAgICAgc3Bpbl91bmxvY2soJm9sZC0+YnJlYWRjcnVtYnMuaXJxX2xvY2spOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqCj4gK2xhc3RfYWN0aXZlKGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCj4gK3sKPiArICAg ICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCAqbGFzdCA9IFJFQURfT05DRShleGVjbGlz dHMtPmFjdGl2ZSk7Cj4gKwo+ICsgICAgICAgd2hpbGUgKCpsYXN0ICYmIGk5MTVfcmVxdWVzdF9j b21wbGV0ZWQoKmxhc3QpKQo+ICsgICAgICAgICAgICAgICBsYXN0Kys7Cj4gKwo+ICsgICAgICAg cmV0dXJuICpsYXN0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWZlcl9yZXF1ZXN0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1Y3QgbGlzdF9oZWFkICogY29uc3QgcGwpCj4gK3sKPiAr ICAgICAgIExJU1RfSEVBRChsaXN0KTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogV2Ug d2FudCB0byBtb3ZlIHRoZSBpbnRlcnJ1cHRlZCByZXF1ZXN0IHRvIHRoZSBiYWNrIG9mCj4gKyAg ICAgICAgKiB0aGUgcm91bmQtcm9iaW4gbGlzdCAoaS5lLiBpdHMgcHJpb3JpdHkgbGV2ZWwpLCBi dXQKPiArICAgICAgICAqIGluIGRvaW5nIHNvLCB3ZSBtdXN0IHRoZW4gbW92ZSBhbGwgcmVxdWVz dHMgdGhhdCB3ZXJlIGluCj4gKyAgICAgICAgKiBmbGlnaHQgYW5kIHdlcmUgd2FpdGluZyBmb3Ig dGhlIGludGVycnVwdGVkIHJlcXVlc3QgdG8KPiArICAgICAgICAqIGJlIHJ1biBhZnRlciBpdCBh Z2Fpbi4KPiArICAgICAgICAqLwo+ICsgICAgICAgZG8gewo+ICsgICAgICAgICAgICAgICBzdHJ1 Y3QgaTkxNV9kZXBlbmRlbmN5ICpwOwo+ICsKPiArICAgICAgICAgICAgICAgR0VNX0JVR19PTihp OTE1X3JlcXVlc3RfaXNfYWN0aXZlKHJxKSk7Cj4gKyAgICAgICAgICAgICAgIGxpc3RfbW92ZV90 YWlsKCZycS0+c2NoZWQubGluaywgcGwpOwo+ICsKPiArICAgICAgICAgICAgICAgbGlzdF9mb3Jf ZWFjaF9lbnRyeShwLCAmcnEtPnNjaGVkLndhaXRlcnNfbGlzdCwgd2FpdF9saW5rKSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqdyA9Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2YocC0+d2FpdGVyLCB0eXBlb2YoKncp LCBzY2hlZCk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIC8qIExlYXZlIHNlbWFwaG9y ZXMgc3Bpbm5pbmcgb24gdGhlIG90aGVyIGVuZ2luZXMgKi8KPiArICAgICAgICAgICAgICAgICAg ICAgICBpZiAody0+ZW5naW5lICE9IHJxLT5lbmdpbmUpCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g d2FpdGVyIHNob3VsZCBzdGFydCBiZWZvcmUgaXRzIHNpZ25hbGVyICovCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgR0VNX0JVR19PTihpOTE1X3JlcXVlc3Rfc3RhcnRlZCh3KSAmJgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEp KTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgR0VNX0JVR19PTihpOTE1X3JlcXVlc3Rf aXNfYWN0aXZlKHcpKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdF9lbXB0eSgm dy0+c2NoZWQubGluaykpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsgLyogTm90IHlldCBzdWJtaXR0ZWQ7IHVucmVhZHkgKi8KPiArCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHJxX3ByaW8odykgPCBycV9wcmlvKHJxKSkKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICBH RU1fQlVHX09OKHJxX3ByaW8odykgPiBycV9wcmlvKHJxKSk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgbGlzdF9tb3ZlX3RhaWwoJnctPnNjaGVkLmxpbmssICZsaXN0KTsKPiArICAgICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgcnEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251 bGwoJmxpc3QsIHR5cGVvZigqcnEpLCBzY2hlZC5saW5rKTsKPiArICAgICAgIH0gd2hpbGUgKHJx KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVmZXJfYWN0aXZlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiArewo+ICsgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4g Kwo+ICsgICAgICAgcnEgPSBfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKGVuZ2luZSk7Cj4g KyAgICAgICBpZiAoIXJxKQo+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgICAg ZGVmZXJfcmVxdWVzdChycSwgaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBycV9w cmlvKHJxKSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtuZWVkX3RpbWVzbGljZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQo+ICt7Cj4gKyAgICAgICBpbnQgaGludDsKPiArCj4gKyAgICAgICBpZiAoIWludGVsX2VuZ2lu ZV9oYXNfdGltZXNsaWNlcyhlbmdpbmUpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 Cj4gKwo+ICsgICAgICAgaWYgKGxpc3RfaXNfbGFzdCgmcnEtPnNjaGVkLmxpbmssICZlbmdpbmUt PmFjdGl2ZS5yZXF1ZXN0cykpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4g KyAgICAgICBoaW50ID0gbWF4KHJxX3ByaW8obGlzdF9uZXh0X2VudHJ5KHJxLCBzY2hlZC5saW5r KSksCj4gKyAgICAgICAgICAgICAgICAgIGVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5 X2hpbnQpOwo+ICsKPiArICAgICAgIHJldHVybiBoaW50ID49IGVmZmVjdGl2ZV9wcmlvKHJxKTsK PiArfQo+ICsKPiArc3RhdGljIGludAo+ICtzd2l0Y2hfcHJpbyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKyAgICAg ICBpZiAobGlzdF9pc19sYXN0KCZycS0+c2NoZWQubGluaywgJmVuZ2luZS0+YWN0aXZlLnJlcXVl c3RzKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIElOVF9NSU47Cj4gKwo+ICsgICAgICAgcmV0 dXJuIHJxX3ByaW8obGlzdF9uZXh0X2VudHJ5KHJxLCBzY2hlZC5saW5rKSk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwo+ICt0aW1lc2xpY2UoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gUkVBRF9PTkNFKGVu Z2luZS0+cHJvcHMudGltZXNsaWNlX2R1cmF0aW9uX21zKTsKPiArfQo+ICsKPiArc3RhdGljIHVu c2lnbmVkIGxvbmcKPiArYWN0aXZlX3RpbWVzbGljZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gK3sKPiArICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx ID0gKmVuZ2luZS0+ZXhlY2xpc3RzLmFjdGl2ZTsKPiArCj4gKyAgICAgICBpZiAoaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlZChycSkpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAg ICAgIGlmIChlbmdpbmUtPmV4ZWNsaXN0cy5zd2l0Y2hfcHJpb3JpdHlfaGludCA8IGVmZmVjdGl2 ZV9wcmlvKHJxKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAgcmV0 dXJuIHRpbWVzbGljZShlbmdpbmUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfdGltZXNs aWNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsgICAgICAgaWYgKCFp bnRlbF9lbmdpbmVfaGFzX3RpbWVzbGljZXMoZW5naW5lKSkKPiArICAgICAgICAgICAgICAgcmV0 dXJuOwo+ICsKPiArICAgICAgIHNldF90aW1lcl9tcygmZW5naW5lLT5leGVjbGlzdHMudGltZXIs IGFjdGl2ZV90aW1lc2xpY2UoZW5naW5lKSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJlY29y ZF9wcmVlbXB0aW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCj4g K3sKPiArICAgICAgICh2b2lkKUk5MTVfU0VMRlRFU1RfT05MWShleGVjbGlzdHMtPnByZWVtcHRf aGFuZy5jb3VudCsrKTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgYWN0aXZlX3By ZWVtcHRfdGltZW91dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArICAg ICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsKPiArICAgICAgIHJxID0gbGFzdF9hY3Rp dmUoJmVuZ2luZS0+ZXhlY2xpc3RzKTsKPiArICAgICAgIGlmICghcnEpCj4gKyAgICAgICAgICAg ICAgIHJldHVybiAwOwo+ICsKPiArICAgICAgIC8qIEZvcmNlIGEgZmFzdCByZXNldCBmb3IgdGVy bWluYXRlZCBjb250ZXh0cyAoaWdub3Jpbmcgc3lzZnMhKSAqLwo+ICsgICAgICAgaWYgKHVubGlr ZWx5KGk5MTVfZ2VtX2NvbnRleHRfaXNfYmFubmVkKHJxLT5nZW1fY29udGV4dCkpKQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICAgICByZXR1cm4gUkVBRF9PTkNFKGVuZ2lu ZS0+cHJvcHMucHJlZW1wdF90aW1lb3V0X21zKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2V0 X3ByZWVtcHRfdGltZW91dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiAr ICAgICAgIGlmICghaW50ZWxfZW5naW5lX2hhc19wcmVlbXB0X3Jlc2V0KGVuZ2luZSkpCj4gKyAg ICAgICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAgICBzZXRfdGltZXJfbXMoJmVuZ2luZS0+ ZXhlY2xpc3RzLnByZWVtcHQsCj4gKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3ByZWVtcHRf dGltZW91dChlbmdpbmUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVl dWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNs aXN0czsKPiArICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKipwb3J0ID0gZXhlY2xpc3RzLT5w ZW5kaW5nOwo+ICsgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqKiBjb25zdCBsYXN0X3BvcnQg PSBwb3J0ICsgZXhlY2xpc3RzLT5wb3J0X21hc2s7Cj4gKyAgICAgICBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpsYXN0Owo+ICsgICAgICAgc3RydWN0IHJiX25vZGUgKnJiOwo+ICsgICAgICAgYm9vbCBz dWJtaXQgPSBmYWxzZTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogSGFyZHdhcmUgc3Vi bWlzc2lvbiBpcyB0aHJvdWdoIDIgcG9ydHMuIENvbmNlcHR1YWxseSBlYWNoIHBvcnQKPiArICAg ICAgICAqIGhhcyBhIChSSU5HX1NUQVJULCBSSU5HX0hFQUQsIFJJTkdfVEFJTCkgdHVwbGUuIFJJ TkdfU1RBUlQgaXMKPiArICAgICAgICAqIHN0YXRpYyBmb3IgYSBjb250ZXh0LCBhbmQgdW5pcXVl IHRvIGVhY2gsIHNvIHdlIG9ubHkgZXhlY3V0ZQo+ICsgICAgICAgICogcmVxdWVzdHMgYmVsb25n aW5nIHRvIGEgc2luZ2xlIGNvbnRleHQgZnJvbSBlYWNoIHJpbmcuIFJJTkdfSEVBRAo+ICsgICAg ICAgICogaXMgbWFpbnRhaW5lZCBieSB0aGUgQ1MgaW4gdGhlIGNvbnRleHQgaW1hZ2UsIGl0IG1h cmtzIHRoZSBwbGFjZQo+ICsgICAgICAgICogd2hlcmUgaXQgZ290IHVwIHRvIGxhc3QgdGltZSwg YW5kIHRocm91Z2ggUklOR19UQUlMIHdlIHRlbGwgdGhlIENTCj4gKyAgICAgICAgKiB3aGVyZSB3 ZSB3YW50IHRvIGV4ZWN1dGUgdXAgdG8gdGhpcyB0aW1lLgo+ICsgICAgICAgICoKPiArICAgICAg ICAqIEluIHRoaXMgbGlzdCB0aGUgcmVxdWVzdHMgYXJlIGluIG9yZGVyIG9mIGV4ZWN1dGlvbi4g Q29uc2VjdXRpdmUKPiArICAgICAgICAqIHJlcXVlc3RzIGZyb20gdGhlIHNhbWUgY29udGV4dCBh cmUgYWRqYWNlbnQgaW4gdGhlIHJpbmdidWZmZXIuIFdlCj4gKyAgICAgICAgKiBjYW4gY29tYmlu ZSB0aGVzZSByZXF1ZXN0cyBpbnRvIGEgc2luZ2xlIFJJTkdfVEFJTCB1cGRhdGU6Cj4gKyAgICAg ICAgKgo+ICsgICAgICAgICogICAgICAgICAgICAgIFJJTkdfSEVBRC4uLnJlcTEuLi5yZXEyCj4g KyAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4tIFJJTkdfVEFJ TAo+ICsgICAgICAgICogc2luY2UgdG8gZXhlY3V0ZSByZXEyIHRoZSBDUyBtdXN0IGZpcnN0IGV4 ZWN1dGUgcmVxMS4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBPdXIgZ29hbCB0aGVuIGlzIHRv IHBvaW50IGVhY2ggcG9ydCB0byB0aGUgZW5kIG9mIGEgY29uc2VjdXRpdmUKPiArICAgICAgICAq IHNlcXVlbmNlIG9mIHJlcXVlc3RzIGFzIGJlaW5nIHRoZSBtb3N0IG9wdGltYWwgKGZld2VzdCB3 YWtlIHVwcwo+ICsgICAgICAgICogYW5kIGNvbnRleHQgc3dpdGNoZXMpIHN1Ym1pc3Npb24uCj4g KyAgICAgICAgKi8KPiArCj4gKyAgICAgICBmb3IgKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVj bGlzdHMtPnZpcnR1YWwpOyByYjsgKSB7Cj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF92 aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJiX2VudHJ5KHJi LCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOwo+ICsgICAgICAgICAgICAgICBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7Cj4gKwo+ICsg ICAgICAgICAgICAgICBpZiAoIXJxKSB7IC8qIGxhemlseSBjbGVhbnVwIGFmdGVyIGFub3RoZXIg ZW5naW5lIGhhbmRsZWQgcnEgKi8KPiArICAgICAgICAgICAgICAgICAgICAgICByYl9lcmFzZV9j YWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg IFJCX0NMRUFSX05PREUocmIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJiID0gcmJfZmly c3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBpZiAo IXZpcnR1YWxfbWF0Y2hlcyh2ZSwgcnEsIGVuZ2luZSkpIHsKPiArICAgICAgICAgICAgICAgICAg ICAgICByYiA9IHJiX25leHQocmIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAg ICAgIH0KPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogSWYgdGhlIHF1ZXVlIGlzIGhpZ2hl ciBwcmlvcml0eSB0aGFuIHRoZSBsYXN0Cj4gKyAgICAgICAgKiByZXF1ZXN0IGluIHRoZSBjdXJy ZW50bHkgYWN0aXZlIGNvbnRleHQsIHN1Ym1pdCBhZnJlc2guCj4gKyAgICAgICAgKiBXZSB3aWxs IHJlc3VibWl0IGFnYWluIGFmdGVyd2FyZHMgaW4gY2FzZSB3ZSBuZWVkIHRvIHNwbGl0Cj4gKyAg ICAgICAgKiB0aGUgYWN0aXZlIGNvbnRleHQgdG8gaW50ZXJqZWN0IHRoZSBwcmVlbXB0aW9uIHJl cXVlc3QsCj4gKyAgICAgICAgKiBpLmUuIHdlIHdpbGwgcmV0cmlnZ2VyIHByZWVtcHRpb24gZm9s bG93aW5nIHRoZSBhY2sgaW4gY2FzZQo+ICsgICAgICAgICogb2YgdHJvdWJsZS4KPiArICAgICAg ICAqLwo+ICsgICAgICAgbGFzdCA9IGxhc3RfYWN0aXZlKGV4ZWNsaXN0cyk7Cj4gKyAgICAgICBp ZiAobGFzdCkgewo+ICsgICAgICAgICAgICAgICBpZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFz dCwgcmIpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgR0VNX1RSQUNFKCIlczogcHJlZW1w dGluZyBsYXN0PSVsbHg6JWxsZCwgcHJpbz0lZCwgaGludD0lZFxuIiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW5naW5lLT5uYW1lLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsYXN0LT5mZW5jZS5jb250ZXh0LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsYXN0LT5mZW5jZS5zZXFubywKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFzdC0+c2NoZWQuYXR0ci5wcmlvcml0eSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50KTsKPiArICAg ICAgICAgICAgICAgICAgICAgICByZWNvcmRfcHJlZW1wdGlvbihleGVjbGlzdHMpOwo+ICsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIERv bid0IGxldCB0aGUgUklOR19IRUFEIGFkdmFuY2UgcGFzdCB0aGUgYnJlYWRjcnVtYgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAqIGFzIHdlIHVud2luZCAoYW5kIHVudGlsIHdlIHJlc3VibWl0 KSBzbyB0aGF0IHdlIGRvCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogbm90IGFjY2lkZW50 YWxseSB0ZWxsIGl0IHRvIGdvIGJhY2t3YXJkcy4KPiArICAgICAgICAgICAgICAgICAgICAgICAg Ki8KPiArICAgICAgICAgICAgICAgICAgICAgICByaW5nX3NldF9wYXVzZWQoZW5naW5lLCAxKTsK PiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICAgICAg ICAgKiBOb3RlIHRoYXQgd2UgaGF2ZSBub3Qgc3RvcHBlZCB0aGUgR1BVIGF0IHRoaXMgcG9pbnQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogc28gd2UgYXJlIHVud2luZGluZyB0aGUgaW5j b21wbGV0ZSByZXF1ZXN0cyBhcyB0aGV5Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogcmVt YWluIGluZmxpZ2h0IGFuZCBzbyBieSB0aGUgdGltZSB3ZSBkbyBjb21wbGV0ZQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAqIHRoZSBwcmVlbXB0aW9uLCBzb21lIG9mIHRoZSB1bndvdW5kIHJl cXVlc3RzIG1heQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGNvbXBsZXRlIQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAgIF9fdW53aW5k X2luY29tcGxldGVfcmVxdWVzdHMoZW5naW5lKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgLyoKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiB3ZSBuZWVkIHRvIHJldHVybiB0 byB0aGUgcHJlZW1wdGVkIGNvbnRleHQsIHdlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICog bmVlZCB0byBza2lwIHRoZSBsaXRlLXJlc3RvcmUgYW5kIGZvcmNlIGl0IHRvCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICogcmVsb2FkIHRoZSBSSU5HX1RBSUwuIE90aGVyd2lzZSwgdGhlIEhX IGhhcyBhCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogdGVuZGVuY3kgdG8gaWdub3JlIHVz IHJld2luZGluZyB0aGUgVEFJTCB0byB0aGUKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBl bmQgb2YgYW4gZWFybGllciByZXF1ZXN0Lgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGxhc3QtPmh3X2NvbnRleHQtPmxyY19kZXNjIHw9IENU WF9ERVNDX0ZPUkNFX1JFU1RPUkU7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IE5V TEw7Cj4gKyAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVlZF90aW1lc2xpY2UoZW5naW5lLCBs YXN0KSAmJgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2V4cGlyZWQoJmVuZ2lu ZS0+ZXhlY2xpc3RzLnRpbWVyKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIEdFTV9UUkFD RSgiJXM6IGV4cGlyZWQgbGFzdD0lbGx4OiVsbGQsIHByaW89JWQsIGhpbnQ9JWRcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+bmFtZSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdC0+ZmVuY2UuY29udGV4dCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdC0+ZmVuY2Uuc2Vxbm8sCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxhc3QtPnNjaGVkLmF0dHIucHJpb3JpdHksCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGlu dCk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJpbmdfc2V0X3BhdXNlZChlbmdpbmUs IDEpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyX2FjdGl2ZShlbmdpbmUpOwo+ICsK PiArICAgICAgICAgICAgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAq IFVubGlrZSBmb3IgcHJlZW1wdGlvbiwgaWYgd2UgcmV3aW5kIGFuZCBjb250aW51ZQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAqIGV4ZWN1dGluZyB0aGUgc2FtZSBjb250ZXh0IGFzIHByZXZp b3VzbHkgYWN0aXZlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBvcmRlciBvZiBl eGVjdXRpb24gd2lsbCByZW1haW4gdGhlIHNhbWUgYW5kCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICogdGhlIHRhaWwgd2lsbCBvbmx5IGFkdmFuY2UuIFdlIGRvIG5vdCBuZWVkIHRvCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICogZm9yY2UgYSBmdWxsIGNvbnRleHQgcmVzdG9yZSwgYXMg YSBsaXRlLXJlc3RvcmUKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyBzdWZmaWNpZW50 IHRvIHJlc2FtcGxlIHRoZSBtb25vdG9uaWMgVEFJTC4KPiArICAgICAgICAgICAgICAgICAgICAg ICAgKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIElmIHdlIHN3aXRjaCB0byBhbnkgb3Ro ZXIgY29udGV4dCwgc2ltaWxhcmx5IHdlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogd2ls bCBub3QgcmV3aW5kIFRBSUwgb2YgY3VycmVudCBjb250ZXh0LCBhbmQKPiArICAgICAgICAgICAg ICAgICAgICAgICAgKiBub3JtYWwgc2F2ZS9yZXN0b3JlIHdpbGwgcHJlc2VydmUgc3RhdGUgYW5k IGFsbG93Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogdXMgdG8gbGF0ZXIgY29udGludWUg ZXhlY3V0aW5nIHRoZSBzYW1lIHJlcXVlc3QuCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICov Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IE5VTEw7Cj4gKyAgICAgICAgICAgICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAg ICAgICAgICAgKiBPdGhlcndpc2UgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcmVxdWVzdCBwZW5kaW5n Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogZm9yIGV4ZWN1dGlvbiBhZnRlciB0aGUgY3Vy cmVudCBvbmUsIHdlIGNhbgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGp1c3Qgd2FpdCB1 bnRpbCB0aGUgbmV4dCBDUyBldmVudCBiZWZvcmUKPiArICAgICAgICAgICAgICAgICAgICAgICAg KiBxdWV1aW5nIG1vcmUuIEluIGVpdGhlciBjYXNlIHdlIHdpbGwgZm9yY2UgYQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAqIGxpdGUtcmVzdG9yZSBwcmVlbXB0aW9uIGV2ZW50LCBidXQgaWYg d2Ugd2FpdAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIHdlIGhvcGVmdWxseSBjb2FsZXNj ZSBzZXZlcmFsIHVwZGF0ZXMgaW50byBhIHNpbmdsZQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAqIHN1Ym1pc3Npb24uCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICovCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFsaXN0X2lzX2xhc3QoJmxhc3QtPnNjaGVkLmxpbmssCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuZ2luZS0+YWN0aXZlLnJl cXVlc3RzKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIEV2ZW4gaWYgRUxTUFsxXSBpcyBvY2N1cGllZCBh bmQgbm90IHdvcnRoeQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGlt ZXNsaWNlcywgb3VyIHF1ZXVlIG1pZ2h0IGJlLgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4ZWNsaXN0 cy0+dGltZXIuZXhwaXJlcyAmJgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5lZWRfdGltZXNsaWNlKGVuZ2luZSwgbGFzdCkpCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNldF90aW1lcl9tcygmZXhlY2xpc3RzLT50aW1lciwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzbGljZShl bmdpbmUpKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9 Cj4gKwo+ICsgICAgICAgd2hpbGUgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtp bmcgcHJlY2VkZW5jZSAqLwo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfdmlydHVhbF9l bmdpbmUgKnZlID0KPiArICAgICAgICAgICAgICAgICAgICAgICByYl9lbnRyeShyYiwgdHlwZW9m KCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArICAgICAgICAgICAgICAgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnE7Cj4gKwo+ICsgICAgICAgICAgICAgICBzcGluX2xvY2soJnZlLT5iYXNl LmFjdGl2ZS5sb2NrKTsKPiArCj4gKyAgICAgICAgICAgICAgIHJxID0gdmUtPnJlcXVlc3Q7Cj4g KyAgICAgICAgICAgICAgIGlmICh1bmxpa2VseSghcnEpKSB7IC8qIGxvc3QgdGhlIHJhY2UgdG8g YSBzaWJsaW5nICovCj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnZlLT5i YXNlLmFjdGl2ZS5sb2NrKTsKPiArICAgICAgICAgICAgICAgICAgICAgICByYl9lcmFzZV9jYWNo ZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIFJC X0NMRUFSX05PREUocmIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJiID0gcmJfZmlyc3Rf Y2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBHRU1fQlVH X09OKHJxICE9IHZlLT5yZXF1ZXN0KTsKPiArICAgICAgICAgICAgICAgR0VNX0JVR19PTihycS0+ ZW5naW5lICE9ICZ2ZS0+YmFzZSk7Cj4gKyAgICAgICAgICAgICAgIEdFTV9CVUdfT04ocnEtPmh3 X2NvbnRleHQgIT0gJnZlLT5jb250ZXh0KTsKPiArCj4gKyAgICAgICAgICAgICAgIGlmIChycV9w cmlvKHJxKSA+PSBxdWV1ZV9wcmlvKGV4ZWNsaXN0cykpIHsKPiArICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXZpcnR1YWxfbWF0Y2hlcyh2ZSwgcnEsIGVuZ2luZSkpIHsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS5hY3RpdmUubG9jayk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYiA9IHJiX25leHQocmIpOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdCAmJiAhY2Fu X21lcmdlX3JxKGxhc3QsIHJxKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3Bpbl91bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybjsgLyogbGVhdmUgdGhpcyBmb3IgYW5vdGhlciAqLwo+ICsgICAg ICAgICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgR0VNX1RS QUNFKCIlczogdmlydHVhbCBycT0lbGx4OiVsbGQlcywgbmV3IGVuZ2luZT8gJXNcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+bmFtZSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcnEtPmZlbmNlLmNvbnRleHQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJxLT5mZW5jZS5zZXFubywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkgPyAiISIgOgo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkg PyAiKiIgOgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzbm8oZW5naW5lICE9IHZlLT5zaWJsaW5nc1sw XSkpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICB2ZS0+cmVxdWVzdCA9IE5VTEw7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5 X2hpbnQgPSBJTlRfTUlOOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJiX2VyYXNlX2NhY2hl ZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgUkJf Q0xFQVJfTk9ERShyYik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIEdFTV9CVUdfT04o IShycS0+ZXhlY3V0aW9uX21hc2sgJiBlbmdpbmUtPm1hc2spKTsKPiArICAgICAgICAgICAgICAg ICAgICAgICBycS0+ZW5naW5lID0gZW5naW5lOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZW5naW5lICE9IHZlLT5zaWJsaW5nc1swXSkgewo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdTMyICpyZWdzID0gdmUtPmNvbnRleHQubHJjX3JlZ19zdGF0ZTsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuOwo+ICsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdFTV9CVUdfT04oUkVBRF9PTkNFKHZlLT5jb250ZXh0 LmluZmxpZ2h0KSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp bnRlbF9lbmdpbmVfaGFzX3JlbGF0aXZlX21taW8oZW5naW5lKSkKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxfbHJfY29udGV4dF9zZXRfcmVnaXN0ZXJfb2Zm c2V0cyhyZWdzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZSk7Cj4gKwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0X2VtcHR5KCZ2ZS0+Y29udGV4dC5zaWdu YWxzKSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbF94 ZmVyX2JyZWFkY3J1bWJzKHZlLCBlbmdpbmUpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBNb3ZlIHRo ZSBib3VuZCBlbmdpbmUgdG8gdGhlIHRvcCBvZiB0aGUgbGlzdAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogZm9yIGZ1dHVyZSBleGVjdXRpb24uIFdlIHRoZW4ga2ljayB0aGlz Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0YXNrbGV0IGZpcnN0IGJlZm9y ZSBjaGVja2luZyBvdGhlcnMsIHNvIHRoYXQKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIHdlIHByZWZlcmVudGlhbGx5IHJldXNlIHRoaXMgc2V0IG9mIGJvdW5kCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZWdpc3RlcnMuCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv ciAobiA9IDE7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlLT5zaWJsaW5nc1tuXSA9PSBlbmdpbmUpIHsK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwKHZl LT5zaWJsaW5nc1tuXSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZlLT5zaWJsaW5nc1swXSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU1fQlVHX09OKHZlLT5zaWJsaW5n c1swXSAhPSBlbmdpbmUpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKF9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSkpIHsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdCA9IHRydWU7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcnE7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIEht bSwgd2UgaGF2ZSBhIGJ1bmNoIG9mIHZpcnR1YWwgZW5naW5lIHJlcXVlc3RzLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAqIGJ1dCB0aGUgZmlyc3Qgb25lIHdhcyBhbHJlYWR5IGNvbXBsZXRl ZCAodGhhbmtzCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogcHJlZW1wdC10by1idXN5ISku IEtlZXAgbG9va2luZyBhdCB0aGUgdmVuZyBxdWV1ZQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAqIHVudGlsIHdlIGhhdmUgbm8gbW9yZSByZWxldmFudCByZXF1ZXN0cyAoaS5lLgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAqIHRoZSBub3JtYWwgc3VibWl0IHF1ZXVlIGhhcyBoaWdoZXIg cHJpb3JpdHkpLgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGlmICghc3VibWl0KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzcGluX3VubG9jaygmdmUtPmJhc2UuYWN0aXZlLmxvY2spOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAg ICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAg IHNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS5hY3RpdmUubG9jayk7Cj4gKyAgICAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHdoaWxlICgocmIgPSByYl9maXJzdF9jYWNo ZWQoJmV4ZWNsaXN0cy0+cXVldWUpKSkgewo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgaTkxNV9w cmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJiKTsKPiArICAgICAgICAgICAgICAgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsICpybjsKPiArICAgICAgICAgICAgICAgaW50IGk7Cj4gKwo+ICsgICAg ICAgICAgICAgICBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0X2NvbnN1bWUocnEsIHJuLCBwLCBp KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXJnZSA9IHRydWU7Cj4gKwo+ICsg ICAgICAgICAgICAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogQ2Fu IHdlIGNvbWJpbmUgdGhpcyByZXF1ZXN0IHdpdGggdGhlIGN1cnJlbnQgcG9ydD8KPiArICAgICAg ICAgICAgICAgICAgICAgICAgKiBJdCBoYXMgdG8gYmUgdGhlIHNhbWUgY29udGV4dC9yaW5nYnVm ZmVyIGFuZCBub3QKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBoYXZlIGFueSBleGNlcHRp b25zIChlLmcuIEdWVCBzYXlpbmcgbmV2ZXIgdG8KPiArICAgICAgICAgICAgICAgICAgICAgICAg KiBjb21iaW5lIGNvbnRleHRzKS4KPiArICAgICAgICAgICAgICAgICAgICAgICAgKgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAqIElmIHdlIGNhbiBjb21iaW5lIHRoZSByZXF1ZXN0cywgd2Ug Y2FuIGV4ZWN1dGUgYm90aAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGJ5IHVwZGF0aW5n IHRoZSBSSU5HX1RBSUwgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUKPiArICAgICAgICAgICAg ICAgICAgICAgICAgKiBzZWNvbmQgcmVxdWVzdCwgYW5kIHNvIHdlIG5ldmVyIG5lZWQgdG8gdGVs bCB0aGUKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBoYXJkd2FyZSBhYm91dCB0aGUgZmly c3QuCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGxhc3QgJiYgIWNhbl9tZXJnZV9ycShsYXN0LCBycSkpIHsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBJZiB3ZSBhcmUgb24gdGhlIHNlY29uZCBwb3J0IGFuZCBjYW5ub3QKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIGNvbWJpbmUgdGhpcyByZXF1ZXN0IHdpdGggdGhlIGxhc3Qs IHRoZW4gd2UKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFyZSBkb25lLgo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAocG9ydCA9PSBsYXN0X3BvcnQpCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKPiArCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogV2Ug bXVzdCBub3QgcG9wdWxhdGUgYm90aCBFTFNQW10gd2l0aCB0aGUKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqIHNhbWUgTFJDQSwgaS5lLiB3ZSBtdXN0IHN1Ym1pdCAyIGRpZmZl cmVudAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY29udGV4dHMgaWYgd2Ug c3VibWl0IDIgRUxTUC4KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QtPmh3X2NvbnRleHQgPT0gcnEt Pmh3X2NvbnRleHQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZG9uZTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaTkxNV9y ZXF1ZXN0X2hhc19zZW50aW5lbChsYXN0KSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBkb25lOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiBHVlQgb3ZlcnJp ZGVzIHVzIHdlIG9ubHkgZXZlciBzdWJtaXQKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIHBvcnRbMF0sIGxlYXZpbmcgcG9ydFsxXSBlbXB0eS4gTm90ZSB0aGF0IHdlCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbHNvIGhhdmUgdG8gYmUgY2FyZWZ1bCB0 aGF0IHdlIGRvbid0IHF1ZXVlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0 aGUgc2FtZSBjb250ZXh0IChldmVuIHRob3VnaCBhIGRpZmZlcmVudAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogcmVxdWVzdCkgdG8gdGhlIHNlY29uZCBwb3J0Lgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24obGFzdC0+aHdfY29udGV4dCkg fHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHhfc2luZ2xlX3BvcnRf c3VibWlzc2lvbihycS0+aHdfY29udGV4dCkpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZG9uZTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtZXJnZSA9IGZhbHNlOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgaWYgKF9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSkpIHsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVyZ2UpIHsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvcnQgPSBleGVjbGlzdHNfc2NoZWR1bGVf aW4obGFzdCwgcG9ydCAtIGV4ZWNsaXN0cy0+cGVuZGluZyk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBvcnQrKzsKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGFzdCA9IE5VTEw7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VNX0JVR19PTihs YXN0ICYmCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjYW5f bWVyZ2VfY3R4KGxhc3QtPmh3X2NvbnRleHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJxLT5od19jb250ZXh0KSk7Cj4gKwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0ID0gdHJ1ZTsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBycTsKPiArICAgICAgICAgICAgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgIHJiX2VyYXNlX2Nh Y2hlZCgmcC0+bm9kZSwgJmV4ZWNsaXN0cy0+cXVldWUpOwo+ICsgICAgICAgICAgICAgICBpOTE1 X3ByaW9saXN0X2ZyZWUocCk7Cj4gKyAgICAgICB9Cj4gKwo+ICtkb25lOgo+ICsgICAgICAgLyoK PiArICAgICAgICAqIEhlcmUgYmUgYSBiaXQgb2YgbWFnaWMhIE9yIHNsZWlnaHQtb2YtaGFuZCwg d2hpY2hldmVyIHlvdSBwcmVmZXIuCj4gKyAgICAgICAgKgo+ICsgICAgICAgICogV2UgY2hvb3Nl IHRoZSBwcmlvcml0eSBoaW50IHN1Y2ggdGhhdCBpZiB3ZSBhZGQgYSByZXF1ZXN0IG9mIGdyZWF0 ZXIKPiArICAgICAgICAqIHByaW9yaXR5IHRoYW4gdGhpcywgd2Uga2ljayB0aGUgc3VibWlzc2lv biB0YXNrbGV0IHRvIGRlY2lkZSBvbgo+ICsgICAgICAgICogdGhlIHJpZ2h0IG9yZGVyIG9mIHN1 Ym1pdHRpbmcgdGhlIHJlcXVlc3RzIHRvIGhhcmR3YXJlLiBXZSBtdXN0Cj4gKyAgICAgICAgKiBh bHNvIGJlIHByZXBhcmVkIHRvIHJlb3JkZXIgcmVxdWVzdHMgYXMgdGhleSBhcmUgaW4tZmxpZ2h0 IG9uIHRoZQo+ICsgICAgICAgICogSFcuIFdlIGRlcml2ZSB0aGUgcHJpb3JpdHkgaGludCB0aGVu IGFzIHRoZSBmaXJzdCAiaG9sZSIgaW4KPiArICAgICAgICAqIHRoZSBIVyBzdWJtaXNzaW9uIHBv cnRzIGFuZCBpZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIHNsb3RzLAo+ICsgICAgICAgICogdGhl IHByaW9yaXR5IG9mIHRoZSBsb3dlc3QgZXhlY3V0aW5nIHJlcXVlc3QsIGkuZS4gbGFzdC4KPiAr ICAgICAgICAqCj4gKyAgICAgICAgKiBXaGVuIHdlIGRvIHJlY2VpdmUgYSBoaWdoZXIgcHJpb3Jp dHkgcmVxdWVzdCByZWFkeSB0byBydW4gZnJvbSB0aGUKPiArICAgICAgICAqIHVzZXIsIHNlZSBx dWV1ZV9yZXF1ZXN0KCksIHRoZSBwcmlvcml0eSBoaW50IGlzIGJ1bXBlZCB0byB0aGF0Cj4gKyAg ICAgICAgKiByZXF1ZXN0IHRyaWdnZXJpbmcgcHJlZW1wdGlvbiBvbiB0aGUgbmV4dCBkZXF1ZXVl IChvciBzdWJzZXF1ZW50Cj4gKyAgICAgICAgKiBpbnRlcnJ1cHQgZm9yIHNlY29uZGFyeSBwb3J0 cykuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGlu dCA9IHF1ZXVlX3ByaW8oZXhlY2xpc3RzKTsKPiArICAgICAgIEdFTV9UUkFDRSgiJXM6IHF1ZXVl X3ByaW9yaXR5X2hpbnQ6JWQsIHN1Ym1pdDolc1xuIiwKPiArICAgICAgICAgICAgICAgICBlbmdp bmUtPm5hbWUsIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCwKPiArICAgICAgICAgICAg ICAgICB5ZXNubyhzdWJtaXQpKTsKPiArCj4gKyAgICAgICBpZiAoc3VibWl0KSB7Cj4gKyAgICAg ICAgICAgICAgICpwb3J0ID0gZXhlY2xpc3RzX3NjaGVkdWxlX2luKGxhc3QsIHBvcnQgLSBleGVj bGlzdHMtPnBlbmRpbmcpOwo+ICsgICAgICAgICAgICAgICBleGVjbGlzdHMtPnN3aXRjaF9wcmlv cml0eV9oaW50ID0KPiArICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hfcHJpbyhlbmdpbmUs ICpleGVjbGlzdHMtPnBlbmRpbmcpOwo+ICsKPiArICAgICAgICAgICAgICAgLyoKPiArICAgICAg ICAgICAgICAgICogU2tpcCBpZiB3ZSBlbmRlZCB1cCB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgc2V0 IG9mIHJlcXVlc3RzLAo+ICsgICAgICAgICAgICAgICAgKiBlLmcuIHRyeWluZyB0byB0aW1lc2xp Y2UgYSBwYWlyIG9mIG9yZGVyZWQgY29udGV4dHMKPiArICAgICAgICAgICAgICAgICovCj4gKyAg ICAgICAgICAgICAgIGlmICghbWVtY21wKGV4ZWNsaXN0cy0+YWN0aXZlLCBleGVjbGlzdHMtPnBl bmRpbmcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3J0IC0gZXhlY2xpc3RzLT5w ZW5kaW5nICsgMSkgKiBzaXplb2YoKnBvcnQpKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAg IGRvCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjbGlzdHNfc2NoZWR1bGVf b3V0KGZldGNoX2FuZF96ZXJvKHBvcnQpKTsKPiArICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAocG9ydC0tICE9IGV4ZWNsaXN0cy0+cGVuZGluZyk7Cj4gKwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gc2tpcF9zdWJtaXQ7Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAg ICAgICAgICAgIG1lbXNldChwb3J0ICsgMSwgMCwgKGxhc3RfcG9ydCAtIHBvcnQpICogc2l6ZW9m KCpwb3J0KSk7Cj4gKyAgICAgICAgICAgICAgIGV4ZWNsaXN0c19zdWJtaXRfcG9ydHMoZW5naW5l KTsKPiArCj4gKyAgICAgICAgICAgICAgIHNldF9wcmVlbXB0X3RpbWVvdXQoZW5naW5lKTsKPiAr ICAgICAgIH0gZWxzZSB7Cj4gK3NraXBfc3VibWl0Ogo+ICsgICAgICAgICAgICAgICByaW5nX3Nl dF9wYXVzZWQoZW5naW5lLCAwKTsKPiArICAgICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQK PiArY2FuY2VsX3BvcnRfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBj b25zdCBleGVjbGlzdHMpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25z dCAqcG9ydDsKPiArCj4gKyAgICAgICBmb3IgKHBvcnQgPSBleGVjbGlzdHMtPnBlbmRpbmc7ICpw b3J0OyBwb3J0KyspCj4gKyAgICAgICAgICAgICAgIGV4ZWNsaXN0c19zY2hlZHVsZV9vdXQoKnBv cnQpOwo+ICsgICAgICAgbWVtc2V0KGV4ZWNsaXN0cy0+cGVuZGluZywgMCwgc2l6ZW9mKGV4ZWNs aXN0cy0+cGVuZGluZykpOwo+ICsKPiArICAgICAgIC8qIE1hcmsgdGhlIGVuZCBvZiBhY3RpdmUg YmVmb3JlIHdlIG92ZXJ3cml0ZSAqYWN0aXZlICovCj4gKyAgICAgICBmb3IgKHBvcnQgPSB4Y2hn KCZleGVjbGlzdHMtPmFjdGl2ZSwgZXhlY2xpc3RzLT5wZW5kaW5nKTsgKnBvcnQ7IHBvcnQrKykK PiArICAgICAgICAgICAgICAgZXhlY2xpc3RzX3NjaGVkdWxlX291dCgqcG9ydCk7Cj4gKyAgICAg ICBXUklURV9PTkNFKGV4ZWNsaXN0cy0+YWN0aXZlLAo+ICsgICAgICAgICAgICAgICAgICBtZW1z ZXQoZXhlY2xpc3RzLT5pbmZsaWdodCwgMCwgc2l6ZW9mKGV4ZWNsaXN0cy0+aW5mbGlnaHQpKSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtpbnZhbGlkYXRlX2NzYl9lbnRyaWVz KGNvbnN0IHUzMiAqZmlyc3QsIGNvbnN0IHUzMiAqbGFzdCkKPiArewo+ICsgICAgICAgY2xmbHVz aCgodm9pZCAqKWZpcnN0KTsKPiArICAgICAgIGNsZmx1c2goKHZvaWQgKilsYXN0KTsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSBib29sCj4gK3Jlc2V0X2luX3Byb2dyZXNzKGNvbnN0IHN0cnVj dCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCj4gK3sKPiArICAgICAgIHJldHVy biB1bmxpa2VseSghX190YXNrbGV0X2lzX2VuYWJsZWQoJmV4ZWNsaXN0cy0+dGFza2xldCkpOwo+ ICt9Cj4gKwo+ICsvKgo+ICsgKiBTdGFydGluZyB3aXRoIEdlbjEyLCB0aGUgc3RhdHVzIGhhcyBh IG5ldyBmb3JtYXQ6Cj4gKyAqCj4gKyAqICAgICBiaXQgIDA6ICAgICBzd2l0Y2hlZCB0byBuZXcg cXVldWUKPiArICogICAgIGJpdCAgMTogICAgIHJlc2VydmVkCj4gKyAqICAgICBiaXQgIDI6ICAg ICBzZW1hcGhvcmUgd2FpdCBtb2RlIChwb2xsIG9yIHNpZ25hbCksIG9ubHkgdmFsaWQgd2hlbgo+ ICsgKiAgICAgICAgICAgICAgICAgc3dpdGNoIGRldGFpbCBpcyBzZXQgdG8gIndhaXQgb24gc2Vt YXBob3JlIgo+ICsgKiAgICAgYml0cyAzLTU6ICAgZW5naW5lIGNsYXNzCj4gKyAqICAgICBiaXRz IDYtMTE6ICBlbmdpbmUgaW5zdGFuY2UKPiArICogICAgIGJpdHMgMTItMTQ6IHJlc2VydmVkCj4g KyAqICAgICBiaXRzIDE1LTI1OiBzdyBjb250ZXh0IGlkIG9mIHRoZSBscmMgdGhlIEdUIHN3aXRj aGVkIHRvCj4gKyAqICAgICBiaXRzIDI2LTMxOiBzdyBjb3VudGVyIG9mIHRoZSBscmMgdGhlIEdU IHN3aXRjaGVkIHRvCj4gKyAqICAgICBiaXRzIDMyLTM1OiBjb250ZXh0IHN3aXRjaCBkZXRhaWwK PiArICogICAgICAgICAgICAgICAgICAtIDA6IGN0eCBjb21wbGV0ZQo+ICsgKiAgICAgICAgICAg ICAgICAgIC0gMTogd2FpdCBvbiBzeW5jIGZsaXAKPiArICogICAgICAgICAgICAgICAgICAtIDI6 IHdhaXQgb24gdmJsYW5rCj4gKyAqICAgICAgICAgICAgICAgICAgLSAzOiB3YWl0IG9uIHNjYW5s aW5lCj4gKyAqICAgICAgICAgICAgICAgICAgLSA0OiB3YWl0IG9uIHNlbWFwaG9yZQo+ICsgKiAg ICAgICAgICAgICAgICAgIC0gNTogY29udGV4dCBwcmVlbXB0ZWQgKG5vdCBvbiBTRU1BUEhPUkVf V0FJVCBvcgo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgV0FJVF9GT1JfRVZFTlQpCj4gKyAq ICAgICBiaXQgIDM2OiAgICByZXNlcnZlZAo+ICsgKiAgICAgYml0cyAzNy00Mzogd2FpdCBkZXRh aWwgKGZvciBzd2l0Y2ggZGV0YWlsIDEgdG8gNCkKPiArICogICAgIGJpdHMgNDQtNDY6IHJlc2Vy dmVkCj4gKyAqICAgICBiaXRzIDQ3LTU3OiBzdyBjb250ZXh0IGlkIG9mIHRoZSBscmMgdGhlIEdU IHN3aXRjaGVkIGF3YXkgZnJvbQo+ICsgKiAgICAgYml0cyA1OC02Mzogc3cgY291bnRlciBvZiB0 aGUgbHJjIHRoZSBHVCBzd2l0Y2hlZCBhd2F5IGZyb20KPiArICovCj4gK3N0YXRpYyBpbmxpbmUg Ym9vbAo+ICtnZW4xMl9jc2JfcGFyc2UoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlz dHMgKmV4ZWNsaXN0cywgY29uc3QgdTMyICpjc2IpCj4gK3sKPiArICAgICAgIHUzMiBsb3dlcl9k dyA9IGNzYlswXTsKPiArICAgICAgIHUzMiB1cHBlcl9kdyA9IGNzYlsxXTsKPiArICAgICAgIGJv b2wgY3R4X3RvX3ZhbGlkID0gR0VOMTJfQ1NCX0NUWF9WQUxJRChsb3dlcl9kdyk7Cj4gKyAgICAg ICBib29sIGN0eF9hd2F5X3ZhbGlkID0gR0VOMTJfQ1NCX0NUWF9WQUxJRCh1cHBlcl9kdyk7Cj4g KyAgICAgICBib29sIG5ld19xdWV1ZSA9IGxvd2VyX2R3ICYgR0VOMTJfQ1RYX1NUQVRVU19TV0lU Q0hFRF9UT19ORVdfUVVFVUU7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIFRoZSBjb250 ZXh0IHN3aXRjaCBkZXRhaWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgNSB3aGVuIGEgcHJlZW1w dGlvbgo+ICsgICAgICAgICogb2NjdXJzLCBzbyB3ZSBjYW4ndCBqdXN0IGNoZWNrIGZvciB0aGF0 LiBUaGUgY2hlY2sgYmVsb3cgd29ya3MgZm9yCj4gKyAgICAgICAgKiBhbGwgdGhlIGNhc2VzIHdl IGNhcmUgYWJvdXQsIGluY2x1ZGluZyBwcmVlbXB0aW9ucyBvZiBXQUlUCj4gKyAgICAgICAgKiBp bnN0cnVjdGlvbnMgYW5kIGxpdGUtcmVzdG9yZS4gUHJlZW1wdC10by1pZGxlIHZpYSB0aGUgQ1RS TCByZWdpc3Rlcgo+ICsgICAgICAgICogd291bGQgcmVxdWlyZSBzb21lIGV4dHJhIGhhbmRsaW5n LCBidXQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGF0Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAo IWN0eF9hd2F5X3ZhbGlkIHx8IG5ld19xdWV1ZSkgewo+ICsgICAgICAgICAgICAgICBHRU1fQlVH X09OKCFjdHhfdG9fdmFsaWQpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiArICAg ICAgIH0KPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogc3dpdGNoIGRldGFpbCA9IDUgaXMg Y292ZXJlZCBieSB0aGUgY2FzZSBhYm92ZSBhbmQgd2UgZG8gbm90IGV4cGVjdCBhCj4gKyAgICAg ICAgKiBjb250ZXh0IHN3aXRjaCBvbiBhbiB1bnN1Y2Nlc3NmdWwgd2FpdCBpbnN0cnVjdGlvbiBz aW5jZSB3ZSBhbHdheXMKPiArICAgICAgICAqIHVzZSBwb2xsaW5nIG1vZGUuCj4gKyAgICAgICAg Ki8KPiArICAgICAgIEdFTV9CVUdfT04oR0VOMTJfQ1RYX1NXSVRDSF9ERVRBSUwodXBwZXJfZHcp KTsKPiArICAgICAgIHJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29s Cj4gK2dlbjhfY3NiX3BhcnNlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpl eGVjbGlzdHMsIGNvbnN0IHUzMiAqY3NiKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gKmNzYiAmIChH RU44X0NUWF9TVEFUVVNfSURMRV9BQ1RJVkUgfCBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq IGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiArICAgICAgIGNvbnN0IHUz MiAqIGNvbnN0IGJ1ZiA9IGV4ZWNsaXN0cy0+Y3NiX3N0YXR1czsKPiArICAgICAgIGNvbnN0IHU4 IG51bV9lbnRyaWVzID0gZXhlY2xpc3RzLT5jc2Jfc2l6ZTsKPiArICAgICAgIHU4IGhlYWQsIHRh aWw7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIEFzIHdlIG1vZGlmeSBvdXIgZXhlY2xp c3RzIHN0YXRlIHRyYWNraW5nIHdlIHJlcXVpcmUgZXhjbHVzaXZlCj4gKyAgICAgICAgKiBhY2Nl c3MuIEVpdGhlciB3ZSBhcmUgaW5zaWRlIHRoZSB0YXNrbGV0LCBvciB0aGUgdGFza2xldCBpcyBk aXNhYmxlZAo+ICsgICAgICAgICogYW5kIHdlIGFzc3VtZSB0aGF0IGlzIG9ubHkgaW5zaWRlIHRo ZSByZXNldCBwYXRocyBhbmQgc28gc2VyaWFsaXNlZC4KPiArICAgICAgICAqLwo+ICsgICAgICAg R0VNX0JVR19PTighdGFza2xldF9pc19sb2NrZWQoJmV4ZWNsaXN0cy0+dGFza2xldCkgJiYKPiAr ICAgICAgICAgICAgICAgICAgIXJlc2V0X2luX3Byb2dyZXNzKGV4ZWNsaXN0cykpOwo+ICsgICAg ICAgR0VNX0JVR19PTighaW50ZWxfZW5naW5lX2luX2V4ZWNsaXN0c19zdWJtaXNzaW9uX21vZGUo ZW5naW5lKSk7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIE5vdGUgdGhhdCBjc2Jfd3Jp dGUsIGNzYl9zdGF0dXMgbWF5IGJlIGVpdGhlciBpbiBIV1NQIG9yIG1taW8uCj4gKyAgICAgICAg KiBXaGVuIHJlYWRpbmcgZnJvbSB0aGUgY3NiX3dyaXRlIG1taW8gcmVnaXN0ZXIsIHdlIGhhdmUg dG8gYmUKPiArICAgICAgICAqIGNhcmVmdWwgdG8gb25seSB1c2UgdGhlIEdFTjhfQ1NCX1dSSVRF X1BUUiBwb3J0aW9uLCB3aGljaCBpcwo+ICsgICAgICAgICogdGhlIGxvdyA0Yml0cy4gQXMgaXQg aGFwcGVucyB3ZSBrbm93IHRoZSBuZXh0IDRiaXRzIGFyZSBhbHdheXMKPiArICAgICAgICAqIHpl cm8gYW5kIHNvIHdlIGNhbiBzaW1wbHkgbWFza2VkIG9mZiB0aGUgbG93IHU4IG9mIHRoZSByZWdp c3Rlcgo+ICsgICAgICAgICogYW5kIHRyZWF0IGl0IGlkZW50aWNhbGx5IHRvIHJlYWRpbmcgZnJv bSB0aGUgSFdTUCAod2l0aG91dCBoYXZpbmcKPiArICAgICAgICAqIHRvIHVzZSBleHBsaWNpdCBz aGlmdGluZyBhbmQgbWFza2luZywgYW5kIHByb2JhYmx5IGJpZnVyY2F0aW5nCj4gKyAgICAgICAg KiB0aGUgY29kZSB0byBoYW5kbGUgdGhlIGxlZ2FjeSBtbWlvIHJlYWQpLgo+ICsgICAgICAgICov Cj4gKyAgICAgICBoZWFkID0gZXhlY2xpc3RzLT5jc2JfaGVhZDsKPiArICAgICAgIHRhaWwgPSBS RUFEX09OQ0UoKmV4ZWNsaXN0cy0+Y3NiX3dyaXRlKTsKPiArICAgICAgIEdFTV9UUkFDRSgiJXMg Y3MtaXJxIGhlYWQ9JWQsIHRhaWw9JWRcbiIsIGVuZ2luZS0+bmFtZSwgaGVhZCwgdGFpbCk7Cj4g KyAgICAgICBpZiAodW5saWtlbHkoaGVhZCA9PSB0YWlsKSkKPiArICAgICAgICAgICAgICAgcmV0 dXJuOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBIb3BlZnVsbHkgcGFpcmVkIHdpdGgg YSB3bWIoKSBpbiBIVyEKPiArICAgICAgICAqCj4gKyAgICAgICAgKiBXZSBtdXN0IGNvbXBsZXRl IHRoZSByZWFkIG9mIHRoZSB3cml0ZSBwb2ludGVyIGJlZm9yZSBhbnkgcmVhZHMKPiArICAgICAg ICAqIGZyb20gdGhlIENTQiwgc28gdGhhdCB3ZSBkbyBub3Qgc2VlIHN0YWxlIHZhbHVlcy4gV2l0 aG91dCBhbiBybWIKPiArICAgICAgICAqIChsZmVuY2UpIHRoZSBIVyBtYXkgc3BlY3VsYXRpdmVs eSBwZXJmb3JtIHRoZSBDU0JbXSByZWFkcyAqYmVmb3JlKgo+ICsgICAgICAgICogd2UgcGVyZm9y bSB0aGUgUkVBRF9PTkNFKCpjc2Jfd3JpdGUpLgo+ICsgICAgICAgICovCj4gKyAgICAgICBybWIo KTsKPiArCj4gKyAgICAgICBkbyB7Cj4gKyAgICAgICAgICAgICAgIGJvb2wgcHJvbW90ZTsKPiAr Cj4gKyAgICAgICAgICAgICAgIGlmICgrK2hlYWQgPT0gbnVtX2VudHJpZXMpCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgaGVhZCA9IDA7Cj4gKwo+ICsgICAgICAgICAgICAgICAvKgo+ICsgICAg ICAgICAgICAgICAgKiBXZSBhcmUgZmx5aW5nIG5lYXIgZHJhZ29ucyBhZ2Fpbi4KPiArICAgICAg ICAgICAgICAgICoKPiArICAgICAgICAgICAgICAgICogV2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0 aGUgcmVxdWVzdCBpbiBleGVjbGlzdF9wb3J0W10KPiArICAgICAgICAgICAgICAgICogYnV0IG5v IG1vcmUgdGhhbiB0aGF0LiBXZSBhcmUgb3BlcmF0aW5nIGluIHNvZnRpcnEKPiArICAgICAgICAg ICAgICAgICogY29udGV4dCBhbmQgc28gY2Fubm90IGhvbGQgYW55IG11dGV4IG9yIHNsZWVwLiBU aGF0Cj4gKyAgICAgICAgICAgICAgICAqIHByZXZlbnRzIHVzIHN0b3BwaW5nIHRoZSByZXF1ZXN0 cyB3ZSBhcmUgcHJvY2Vzc2luZwo+ICsgICAgICAgICAgICAgICAgKiBpbiBwb3J0W10gZnJvbSBi ZWluZyByZXRpcmVkIHNpbXVsdGFuZW91c2x5ICh0aGUKPiArICAgICAgICAgICAgICAgICogYnJl YWRjcnVtYiB3aWxsIGJlIGNvbXBsZXRlIGJlZm9yZSB3ZSBzZWUgdGhlCj4gKyAgICAgICAgICAg ICAgICAqIGNvbnRleHQtc3dpdGNoKS4gQXMgd2Ugb25seSBob2xkIHRoZSByZWZlcmVuY2UgdG8g dGhlCj4gKyAgICAgICAgICAgICAgICAqIHJlcXVlc3QsIGFueSBwb2ludGVyIGNoYXNpbmcgdW5k ZXJuZWF0aCB0aGUgcmVxdWVzdAo+ICsgICAgICAgICAgICAgICAgKiBpcyBzdWJqZWN0IHRvIGEg cG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLiBUaHVzIHdlCj4gKyAgICAgICAgICAgICAgICAqIHN0 b3JlIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgd2l0aGluIHBvcnRbXSBhcwo+ICsgICAgICAgICAg ICAgICAgKiByZXF1aXJlZCwgYW5kIGF2b2lkIHVzaW5nIHVuZ3VhcmRlZCBwb2ludGVycyBiZW5l YXRoCj4gKyAgICAgICAgICAgICAgICAqIHJlcXVlc3QgaXRzZWxmLiBUaGUgc2FtZSBhcHBsaWVz IHRvIHRoZSBhdG9taWMKPiArICAgICAgICAgICAgICAgICogc3RhdHVzIG5vdGlmaWVyLgo+ICsg ICAgICAgICAgICAgICAgKi8KPiArCj4gKyAgICAgICAgICAgICAgIEdFTV9UUkFDRSgiJXMgY3Ni WyVkXTogc3RhdHVzPTB4JTA4eDoweCUwOHhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBlbmdpbmUtPm5hbWUsIGhlYWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBidWZbMiAq IGhlYWQgKyAwXSwgYnVmWzIgKiBoZWFkICsgMV0pOwo+ICsKPiArICAgICAgICAgICAgICAgaWYg KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQo+ICsgICAgICAgICAgICAgICAgICAgICAg IHByb21vdGUgPSBnZW4xMl9jc2JfcGFyc2UoZXhlY2xpc3RzLCBidWYgKyAyICogaGVhZCk7Cj4g KyAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3RlID0g Z2VuOF9jc2JfcGFyc2UoZXhlY2xpc3RzLCBidWYgKyAyICogaGVhZCk7Cj4gKyAgICAgICAgICAg ICAgIGlmIChwcm9tb3RlKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGk5MTVf cmVxdWVzdCAqIGNvbnN0ICpvbGQgPSBleGVjbGlzdHMtPmFjdGl2ZTsKPiArCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnQgYWN0aXZlIHRvIHRoZSBuZXcgRUxTUDsgcHJldmVudCBv dmVyd3JpdGluZyAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX09OQ0UoZXhlY2xp c3RzLT5hY3RpdmUsIGV4ZWNsaXN0cy0+cGVuZGluZyk7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgc2V0X3RpbWVzbGljZShlbmdpbmUpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWluamVjdF9wcmVlbXB0X2hhbmcoZXhlY2xpc3RzKSkKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJpbmdfc2V0X3BhdXNlZChlbmdpbmUsIDApOwo+ICsKPiArICAgICAgICAg ICAgICAgICAgICAgICAvKiBjYW5jZWwgb2xkIGluZmxpZ2h0LCBwcmVwYXJlIGZvciBzd2l0Y2gg Ki8KPiArICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV9wb3J0cyhleGVjbGlzdHMsICJwcmVl bXB0ZWQiLCBvbGQpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqb2xkKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY2xpc3RzX3NjaGVkdWxlX291dCgqb2xk KyspOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggcGVuZGluZyB0byBp bmZsaWdodCAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAgIEdFTV9CVUdfT04oIWFzc2VydF9w ZW5kaW5nX3ZhbGlkKGV4ZWNsaXN0cywgInByb21vdGUiKSk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgV1JJVEVfT05DRShleGVjbGlzdHMtPmFjdGl2ZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1lbWNweShleGVjbGlzdHMtPmluZmxpZ2h0LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNsaXN0cy0+cGVuZGluZywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjbGlzdHNfbnVtX3BvcnRz KGV4ZWNsaXN0cykgKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZigqZXhlY2xpc3RzLT5wZW5kaW5nKSkpOwo+ICsKPiArICAgICAgICAgICAgICAgICAg ICAgICBXUklURV9PTkNFKGV4ZWNsaXN0cy0+cGVuZGluZ1swXSwgTlVMTCk7Cj4gKyAgICAgICAg ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgR0VNX0JVR19PTighKmV4 ZWNsaXN0cy0+YWN0aXZlKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyogcG9ydDAg Y29tcGxldGVkLCBhZHZhbmNlZCB0byBwb3J0MSAqLwo+ICsgICAgICAgICAgICAgICAgICAgICAg IHRyYWNlX3BvcnRzKGV4ZWNsaXN0cywgImNvbXBsZXRlZCIsIGV4ZWNsaXN0cy0+YWN0aXZlKTsK PiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICAgICAg ICAgKiBXZSByZWx5IG9uIHRoZSBoYXJkd2FyZSBiZWluZyBzdHJvbmdseQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAqIG9yZGVyZWQsIHRoYXQgdGhlIGJyZWFkY3J1bWIgd3JpdGUgaXMKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgKiBjb2hlcmVudCAodmlzaWJsZSBmcm9tIHRoZSBDUFUp IGJlZm9yZSB0aGUKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyIGludGVycnVwdCBh bmQgQ1NCIGlzIHByb2Nlc3NlZC4KPiArICAgICAgICAgICAgICAgICAgICAgICAgKi8KPiArICAg ICAgICAgICAgICAgICAgICAgICBHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKCpl eGVjbGlzdHMtPmFjdGl2ZSkgJiYKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICFyZXNldF9pbl9wcm9ncmVzcyhleGVjbGlzdHMpKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICBleGVjbGlzdHNfc2NoZWR1bGVfb3V0KCpleGVjbGlzdHMtPmFjdGl2ZSsrKTsKPiArCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgR0VNX0JVR19PTihleGVjbGlzdHMtPmFjdGl2ZSAtIGV4ZWNs aXN0cy0+aW5mbGlnaHQgPgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhl Y2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpKTsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgfSB3aGlsZSAoaGVhZCAhPSB0YWlsKTsKPiArCj4gKyAgICAgICBleGVjbGlzdHMtPmNzYl9o ZWFkID0gaGVhZDsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogR2VuMTEgaGFzIHByb3Zl biB0byBmYWlsIHdydCBnbG9iYWwgb2JzZXJ2YXRpb24gcG9pbnQgYmV0d2Vlbgo+ICsgICAgICAg ICogZW50cnkgYW5kIHRhaWwgdXBkYXRlLCBmYWlsaW5nIG9uIHRoZSBvcmRlcmluZyBhbmQgdGh1 cwo+ICsgICAgICAgICogd2Ugc2VlIGFuIG9sZCBlbnRyeSBpbiB0aGUgY29udGV4dCBzdGF0dXMg YnVmZmVyLgo+ICsgICAgICAgICoKPiArICAgICAgICAqIEZvcmNpYmx5IGV2aWN0IG91dCBlbnRy aWVzIGZvciB0aGUgbmV4dCBncHUgY3NiIHVwZGF0ZSwKPiArICAgICAgICAqIHRvIGluY3JlYXNl IHRoZSBvZGRzIHRoYXQgd2UgZ2V0IGEgZnJlc2ggZW50cmllcyB3aXRoIG5vbgo+ICsgICAgICAg ICogd29ya2luZyBoYXJkd2FyZS4gVGhlIGNvc3QgZm9yIGRvaW5nIHNvIGNvbWVzIG91dCBtb3N0 bHkgd2l0aAo+ICsgICAgICAgICogdGhlIHdhc2ggYXMgaGFyZHdhcmUsIHdvcmtpbmcgb3Igbm90 LCB3aWxsIG5lZWQgdG8gZG8gdGhlCj4gKyAgICAgICAgKiBpbnZhbGlkYXRpb24gYmVmb3JlLgo+ ICsgICAgICAgICovCj4gKyAgICAgICBpbnZhbGlkYXRlX2NzYl9lbnRyaWVzKCZidWZbMF0sICZi dWZbbnVtX2VudHJpZXMgLSAxXSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhlY2xpc3Rz X3N1Ym1pc3Npb25fdGFza2xldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpjb25zdCBlbmdpbmUp Cj4gK3sKPiArICAgICAgIGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+YWN0aXZlLmxvY2sp Owo+ICsgICAgICAgaWYgKCFlbmdpbmUtPmV4ZWNsaXN0cy5wZW5kaW5nWzBdKSB7Cj4gKyAgICAg ICAgICAgICAgIHJjdV9yZWFkX2xvY2soKTsgLyogcHJvdGVjdCBwZWVraW5nIGF0IGV4ZWNsaXN0 cy0+YWN0aXZlICovCj4gKyAgICAgICAgICAgICAgIGV4ZWNsaXN0c19kZXF1ZXVlKGVuZ2luZSk7 Cj4gKyAgICAgICAgICAgICAgIHJjdV9yZWFkX3VubG9jaygpOwo+ICsgICAgICAgfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgbm9pbmxpbmUgdm9pZCBwcmVlbXB0X3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiArewo+ICsgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJpdCA9IEk5 MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZDsKPiArICAgICAgIHVuc2lnbmVkIGxvbmcgKmxv Y2sgPSAmZW5naW5lLT5ndC0+cmVzZXQuZmxhZ3M7Cj4gKwo+ICsgICAgICAgaWYgKGk5MTVfbW9k cGFyYW1zLnJlc2V0IDwgMykKPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgICAg IGlmICh0ZXN0X2FuZF9zZXRfYml0KGJpdCwgbG9jaykpCj4gKyAgICAgICAgICAgICAgIHJldHVy bjsKPiArCj4gKyAgICAgICAvKiBNYXJrIHRoaXMgdGFza2xldCBhcyBkaXNhYmxlZCB0byBhdm9p ZCB3YWl0aW5nIGZvciBpdCB0byBjb21wbGV0ZSAqLwo+ICsgICAgICAgdGFza2xldF9kaXNhYmxl X25vc3luYygmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Cj4gKwo+ICsgICAgICAgR0VNX1RS QUNFKCIlczogcHJlZW1wdCB0aW1lb3V0ICVsdSsldW1zXG4iLAo+ICsgICAgICAgICAgICAgICAg IGVuZ2luZS0+bmFtZSwKPiArICAgICAgICAgICAgICAgICBSRUFEX09OQ0UoZW5naW5lLT5wcm9w cy5wcmVlbXB0X3RpbWVvdXRfbXMpLAo+ICsgICAgICAgICAgICAgICAgIGppZmZpZXNfdG9fbXNl Y3MoamlmZmllcyAtIGVuZ2luZS0+ZXhlY2xpc3RzLnByZWVtcHQuZXhwaXJlcykpOwo+ICsgICAg ICAgaW50ZWxfZW5naW5lX3Jlc2V0KGVuZ2luZSwgInByZWVtcHRpb24gdGltZSBvdXQiKTsKPiAr Cj4gKyAgICAgICB0YXNrbGV0X2VuYWJsZSgmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Cj4g KyAgICAgICBjbGVhcl9hbmRfd2FrZV91cF9iaXQoYml0LCBsb2NrKTsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgcHJlZW1wdF90aW1lb3V0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmNv bnN0IGVuZ2luZSkKPiArewo+ICsgICAgICAgY29uc3Qgc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAm ZW5naW5lLT5leGVjbGlzdHMucHJlZW1wdDsKPiArCj4gKyAgICAgICBpZiAoIUNPTkZJR19EUk1f STkxNV9QUkVFTVBUX1RJTUVPVVQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiAr Cj4gKyAgICAgICBpZiAoIXRpbWVyX2V4cGlyZWQodCkpCj4gKyAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKPiArCj4gKyAgICAgICByZXR1cm4gUkVBRF9PTkNFKGVuZ2luZS0+ZXhlY2xpc3Rz LnBlbmRpbmdbMF0pOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBDaGVjayB0aGUgdW5yZWFkIENvbnRl eHQgU3RhdHVzIEJ1ZmZlcnMgYW5kIG1hbmFnZSB0aGUgc3VibWlzc2lvbiBvZiBuZXcKPiArICog Y29udGV4dHMgdG8gdGhlIEVMU1AgYWNjb3JkaW5nbHkuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBl eGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKPiArewo+ICsg ICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqIGNvbnN0IGVuZ2luZSA9IChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICopZGF0YTsKPiArICAgICAgIGJvb2wgdGltZW91dCA9IHByZWVtcHRfdGlt ZW91dChlbmdpbmUpOwo+ICsKPiArICAgICAgIHByb2Nlc3NfY3NiKGVuZ2luZSk7Cj4gKyAgICAg ICBpZiAoIVJFQURfT05DRShlbmdpbmUtPmV4ZWNsaXN0cy5wZW5kaW5nWzBdKSB8fCB0aW1lb3V0 KSB7Cj4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsgICAgICAg ICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwo+ ICsgICAgICAgICAgICAgICBfX2V4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQoZW5naW5lKTsK PiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUu bG9jaywgZmxhZ3MpOwo+ICsKPiArICAgICAgICAgICAgICAgLyogUmVjaGVjayBhZnRlciBzZXJp YWxpc2luZyB3aXRoIGRpcmVjdC1zdWJtaXNzaW9uICovCj4gKyAgICAgICAgICAgICAgIGlmICh0 aW1lb3V0ICYmIHByZWVtcHRfdGltZW91dChlbmdpbmUpKQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHByZWVtcHRfcmVzZXQoZW5naW5lKTsKPiArICAgICAgIH0KPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgX19leGVjbGlzdHNfa2ljayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhl Y2xpc3RzKQo+ICt7Cj4gKyAgICAgICAvKiBLaWNrIHRoZSB0YXNrbGV0IGZvciBzb21lIGludGVy cnVwdCBjb2FsZXNjaW5nIGFuZCByZXNldCBoYW5kbGluZyAqLwo+ICsgICAgICAgdGFza2xldF9o aV9zY2hlZHVsZSgmZXhlY2xpc3RzLT50YXNrbGV0KTsKPiArfQo+ICsKPiArI2RlZmluZSBleGVj bGlzdHNfa2ljayh0LCBtZW1iZXIpIFwKPiArICAgICAgIF9fZXhlY2xpc3RzX2tpY2soY29udGFp bmVyX29mKHQsIHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzLCBtZW1iZXIpKQo+ICsKPiAr c3RhdGljIHZvaWQgZXhlY2xpc3RzX3RpbWVzbGljZShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIp Cj4gK3sKPiArICAgICAgIGV4ZWNsaXN0c19raWNrKHRpbWVyLCB0aW1lcik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19wcmVlbXB0KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikK PiArewo+ICsgICAgICAgZXhlY2xpc3RzX2tpY2sodGltZXIsIHByZWVtcHQpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBxdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5v ZGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbykKPiArewo+ICsgICAgICAg R0VNX0JVR19PTighbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpOwo+ICsgICAgICAgbGlzdF9hZGRf dGFpbCgmbm9kZS0+bGluaywgaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlv KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fc3VibWl0X3F1ZXVlX2ltbShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVf ZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+ICsKPiAr ICAgICAgIGlmIChyZXNldF9pbl9wcm9ncmVzcyhleGVjbGlzdHMpKQo+ICsgICAgICAgICAgICAg ICByZXR1cm47IC8qIGRlZmVyIHVudGlsIHdlIHJlc3RhcnQgdGhlIGVuZ2luZSBmb2xsb3dpbmcg cmVzZXQgKi8KPiArCj4gKyAgICAgICBpZiAoZXhlY2xpc3RzLT50YXNrbGV0LmZ1bmMgPT0gZXhl Y2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldCkKPiArICAgICAgICAgICAgICAgX19leGVjbGlzdHNf c3VibWlzc2lvbl90YXNrbGV0KGVuZ2luZSk7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAg ICAgIHRhc2tsZXRfaGlfc2NoZWR1bGUoJmV4ZWNsaXN0cy0+dGFza2xldCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHN1Ym1pdF9xdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3Rz ID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+ICsKPiArICAgICAgIGlmIChycV9wcmlvKHJxKSA8PSBl eGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQpCj4gKyAgICAgICAgICAgICAgIHJldHVybjsK PiArCj4gKyAgICAgICBleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBycV9wcmlvKHJx KTsKPiArICAgICAgIF9fc3VibWl0X3F1ZXVlX2ltbShlbmdpbmUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVx dWVzdCkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVx dWVzdC0+ZW5naW5lOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKyAgICAg ICAvKiBXaWxsIGJlIGNhbGxlZCBmcm9tIGlycS1jb250ZXh0IHdoZW4gdXNpbmcgZm9yZWlnbiBm ZW5jZXMuICovCj4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5hY3RpdmUubG9j aywgZmxhZ3MpOwo+ICsKPiArICAgICAgIHF1ZXVlX3JlcXVlc3QoZW5naW5lLCAmcmVxdWVzdC0+ c2NoZWQsIHJxX3ByaW8ocmVxdWVzdCkpOwo+ICsKPiArICAgICAgIEdFTV9CVUdfT04oUkJfRU1Q VFlfUk9PVCgmZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwo+ICsgICAgICAgR0VN X0JVR19PTihsaXN0X2VtcHR5KCZyZXF1ZXN0LT5zY2hlZC5saW5rKSk7Cj4gKwo+ICsgICAgICAg c3VibWl0X3F1ZXVlKGVuZ2luZSwgcmVxdWVzdCk7Cj4gKwo+ICsgICAgICAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQo+ICt7 Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBjb250YWluZXJfb2Yoa3JlZiwg dHlwZW9mKCpjZSksIHJlZik7Cj4gKwo+ICsgICAgICAgR0VNX0JVR19PTighaTkxNV9hY3RpdmVf aXNfaWRsZSgmY2UtPmFjdGl2ZSkpOwo+ICsgICAgICAgR0VNX0JVR19PTihpbnRlbF9jb250ZXh0 X2lzX3Bpbm5lZChjZSkpOwo+ICsKPiArICAgICAgIGlmIChjZS0+c3RhdGUpCj4gKyAgICAgICAg ICAgICAgIGludGVsX2xyX2NvbnRleHRfZmluaShjZSk7Cj4gKwo+ICsgICAgICAgaW50ZWxfY29u dGV4dF9maW5pKGNlKTsKPiArICAgICAgIGludGVsX2NvbnRleHRfZnJlZShjZSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSkKPiArewo+ICsgICAgICAgcmV0dXJuIGludGVsX2xyX2NvbnRleHRfcGluKGNlLCBjZS0+ ZW5naW5lKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBleGVjbGlzdHNfY29udGV4dF9hbGxvYyhz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gK3sKPiArICAgICAgIHJldHVybiBpbnRlbF9scl9j b250ZXh0X2FsbG9jKGNlLCBjZS0+ZW5naW5lKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZXhl Y2xpc3RzX2NvbnRleHRfcmVzZXQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKyAg ICAgICAvKgo+ICsgICAgICAgICogQmVjYXVzZSB3ZSBlbWl0IFdBX1RBSUxfRFdPUkRTIHRoZXJl IG1heSBiZSBhIGRpc3Bhcml0eQo+ICsgICAgICAgICogYmV0d2VlbiBvdXIgYm9va2tlZXBpbmcg aW4gY2UtPnJpbmctPmhlYWQgYW5kIGNlLT5yaW5nLT50YWlsIGFuZAo+ICsgICAgICAgICogdGhh dCBzdG9yZWQgaW4gY29udGV4dC4gQXMgd2Ugb25seSB3cml0ZSBuZXcgY29tbWFuZHMgZnJvbQo+ ICsgICAgICAgICogY2UtPnJpbmctPnRhaWwgb253YXJkcywgZXZlcnl0aGluZyBiZWZvcmUgdGhh dCBpcyBqdW5rLiBJZiB0aGUgR1BVCj4gKyAgICAgICAgKiBzdGFydHMgcmVhZGluZyBmcm9tIGl0 cyBSSU5HX0hFQUQgZnJvbSB0aGUgY29udGV4dCwgaXQgbWF5IHRyeSB0bwo+ICsgICAgICAgICog ZXhlY3V0ZSB0aGF0IGp1bmsgYW5kIGRpZS4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBUaGUg Y29udGV4dHMgdGhhdCBhcmUgc3RpbGxlZCBwaW5uZWQgb24gcmVzdW1lIGJlbG9uZyB0byB0aGUK PiArICAgICAgICAqIGtlcm5lbCwgYW5kIGFyZSBsb2NhbCB0byBlYWNoIGVuZ2luZS4gQWxsIG90 aGVyIGNvbnRleHRzIHdpbGwKPiArICAgICAgICAqIGhhdmUgdGhlaXIgaGVhZC90YWlsIHNhbml0 aXplZCB1cG9uIHBpbm5pbmcgYmVmb3JlIHVzZSwgc28gdGhleQo+ICsgICAgICAgICogd2lsbCBu ZXZlciBzZWUgZ2FyYmFnZSwKPiArICAgICAgICAqCj4gKyAgICAgICAgKiBTbyB0byBhdm9pZCB0 aGF0IHdlIHJlc2V0IHRoZSBjb250ZXh0IGltYWdlcyB1cG9uIHJlc3VtZS4gRm9yCj4gKyAgICAg ICAgKiBzaW1wbGljaXR5LCB3ZSBqdXN0IHplcm8gZXZlcnl0aGluZyBvdXQuCj4gKyAgICAgICAg Ki8KPiArICAgICAgIGludGVsX3JpbmdfcmVzZXQoY2UtPnJpbmcsIDApOwo+ICsgICAgICAgaW50 ZWxfbHJfY29udGV4dF91cGRhdGVfcmVnX3N0YXRlKGNlLCBjZS0+ZW5naW5lKTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyBleGVjbGlzdHNfY29udGV4 dF9vcHMgPSB7Cj4gKyAgICAgICAuYWxsb2MgPSBleGVjbGlzdHNfY29udGV4dF9hbGxvYywKPiAr Cj4gKyAgICAgICAucGluID0gZXhlY2xpc3RzX2NvbnRleHRfcGluLAo+ICsgICAgICAgLnVucGlu ID0gaW50ZWxfbHJfY29udGV4dF91bnBpbiwKPiArCj4gKyAgICAgICAuZW50ZXIgPSBpbnRlbF9j b250ZXh0X2VudGVyX2VuZ2luZSwKPiArICAgICAgIC5leGl0ID0gaW50ZWxfY29udGV4dF9leGl0 X2VuZ2luZSwKPiArCj4gKyAgICAgICAucmVzZXQgPSBleGVjbGlzdHNfY29udGV4dF9yZXNldCwK PiArICAgICAgIC5kZXN0cm95ID0gZXhlY2xpc3RzX2NvbnRleHRfZGVzdHJveSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgZXhlY2xpc3RzX3JlcXVlc3RfYWxsb2Moc3RydWN0IGk5MTVfcmVxdWVz dCAqcmVxdWVzdCkKPiArewo+ICsgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICBHRU1fQlVH X09OKCFpbnRlbF9jb250ZXh0X2lzX3Bpbm5lZChyZXF1ZXN0LT5od19jb250ZXh0KSk7Cj4gKwo+ ICsgICAgICAgLyoKPiArICAgICAgICAqIEZsdXNoIGVub3VnaCBzcGFjZSB0byByZWR1Y2UgdGhl IGxpa2VsaWhvb2Qgb2Ygd2FpdGluZyBhZnRlcgo+ICsgICAgICAgICogd2Ugc3RhcnQgYnVpbGRp bmcgdGhlIHJlcXVlc3QgLSBpbiB3aGljaCBjYXNlIHdlIHdpbGwganVzdAo+ICsgICAgICAgICog aGF2ZSB0byByZXBlYXQgd29yay4KPiArICAgICAgICAqLwo+ICsgICAgICAgcmVxdWVzdC0+cmVz ZXJ2ZWRfc3BhY2UgKz0gRVhFQ0xJU1RTX1JFUVVFU1RfU0laRTsKPiArCj4gKyAgICAgICAvKgo+ ICsgICAgICAgICogTm90ZSB0aGF0IGFmdGVyIHRoaXMgcG9pbnQsIHdlIGhhdmUgY29tbWl0dGVk IHRvIHVzaW5nCj4gKyAgICAgICAgKiB0aGlzIHJlcXVlc3QgYXMgaXQgaXMgYmVpbmcgdXNlZCB0 byBib3RoIHRyYWNrIHRoZQo+ICsgICAgICAgICogc3RhdGUgb2YgZW5naW5lIGluaXRpYWxpc2F0 aW9uIGFuZCBsaXZlbmVzcyBvZiB0aGUKPiArICAgICAgICAqIGdvbGRlbiByZW5kZXJzdGF0ZSBh Ym92ZS4gVGhpbmsgdHdpY2UgYmVmb3JlIHlvdSB0cnkKPiArICAgICAgICAqIHRvIGNhbmNlbC91 bndpbmQgdGhpcyByZXF1ZXN0IG5vdy4KPiArICAgICAgICAqLwo+ICsKPiArICAgICAgIC8qIFVu Y29uZGl0aW9uYWxseSBpbnZhbGlkYXRlIEdQVSBjYWNoZXMgYW5kIFRMQnMuICovCj4gKyAgICAg ICByZXQgPSByZXF1ZXN0LT5lbmdpbmUtPmVtaXRfZmx1c2gocmVxdWVzdCwgRU1JVF9JTlZBTElE QVRFKTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g Kwo+ICsgICAgICAgcmVxdWVzdC0+cmVzZXJ2ZWRfc3BhY2UgLT0gRVhFQ0xJU1RTX1JFUVVFU1Rf U0laRTsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBleGVjbGlz dHNfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiAr ICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0g JmVuZ2luZS0+ZXhlY2xpc3RzOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4g KyAgICAgICBHRU1fVFJBQ0UoIiVzOiBkZXB0aDwtJWRcbiIsIGVuZ2luZS0+bmFtZSwKPiArICAg ICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmZXhlY2xpc3RzLT50YXNrbGV0LmNvdW50KSk7Cj4g Kwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIFByZXZlbnQgcmVxdWVzdCBzdWJtaXNzaW9uIHRv IHRoZSBoYXJkd2FyZSB1bnRpbCB3ZSBoYXZlCj4gKyAgICAgICAgKiBjb21wbGV0ZWQgdGhlIHJl c2V0IGluIGk5MTVfZ2VtX3Jlc2V0X2ZpbmlzaCgpLiBJZiBhIHJlcXVlc3QKPiArICAgICAgICAq IGlzIGNvbXBsZXRlZCBieSBvbmUgZW5naW5lLCBpdCBtYXkgdGhlbiBxdWV1ZSBhIHJlcXVlc3QK PiArICAgICAgICAqIHRvIGEgc2Vjb25kIHZpYSBpdHMgZXhlY2xpc3RzLT50YXNrbGV0ICpqdXN0 KiBhcyB3ZSBhcmUKPiArICAgICAgICAqIGNhbGxpbmcgZW5naW5lLT5yZXN1bWUoKSBhbmQgYWxz byB3cml0aW5nIHRoZSBFTFNQLgo+ICsgICAgICAgICogVHVybmluZyBvZmYgdGhlIGV4ZWNsaXN0 cy0+dGFza2xldCB1bnRpbCB0aGUgcmVzZXQgaXMgb3Zlcgo+ICsgICAgICAgICogcHJldmVudHMg dGhlIHJhY2UuCj4gKyAgICAgICAgKi8KPiArICAgICAgIF9fdGFza2xldF9kaXNhYmxlX3N5bmNf b25jZSgmZXhlY2xpc3RzLT50YXNrbGV0KTsKPiArICAgICAgIEdFTV9CVUdfT04oIXJlc2V0X2lu X3Byb2dyZXNzKGV4ZWNsaXN0cykpOwo+ICsKPiArICAgICAgIC8qIEFuZCBmbHVzaCBhbnkgY3Vy cmVudCBkaXJlY3Qgc3VibWlzc2lvbi4gKi8KPiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZl bmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gKyAgICAgICBzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gKwo+ICsgICAgICAgLyoKPiArICAg ICAgICAqIFdlIHN0b3AgZW5naW5lcywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGdldCBmYWlsZWQgcmVz ZXQgYW5kIGEKPiArICAgICAgICAqIGRlYWQgZ3B1IChvbiBlbGspLiBBbHNvIGFzIG1vZGVybiBn cHUgYXMga2JsIGNhbiBzdWZmZXIKPiArICAgICAgICAqIGZyb20gc3lzdGVtIGhhbmcgaWYgYmF0 Y2hidWZmZXIgaXMgcHJvZ3Jlc3Npbmcgd2hlbgo+ICsgICAgICAgICogdGhlIHJlc2V0IGlzIGlz c3VlZCwgcmVnYXJkbGVzcyBvZiBSRUFEWV9UT19SRVNFVCBhY2suCj4gKyAgICAgICAgKiBUaHVz IGFzc3VtZSBpdCBpcyBiZXN0IHRvIHN0b3AgZW5naW5lcyBvbiBhbGwgZ2Vucwo+ICsgICAgICAg ICogd2hlcmUgd2UgaGF2ZSBhIGdwdSByZXNldC4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBX YUtCTFZFQ1NTZW1hcGhvcmVXYWl0UG9sbDprYmwgKG9uIEFMTF9FTkdJTkVTKQo+ICsgICAgICAg ICoKPiArICAgICAgICAqIEZJWE1FOiBXYSBmb3IgbW9yZSBtb2Rlcm4gZ2VucyBuZWVkcyB0byBi ZSB2YWxpZGF0ZWQKPiArICAgICAgICAqLwo+ICsgICAgICAgaW50ZWxfZW5naW5lX3N0b3BfY3Mo ZW5naW5lKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVzZXRfY3NiX3BvaW50ZXJzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4g KyAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVzZXRfdmFsdWUgPSBleGVjbGlzdHMtPmNzYl9z aXplIC0gMTsKPiArCj4gKyAgICAgICByaW5nX3NldF9wYXVzZWQoZW5naW5lLCAwKTsKPiArCj4g KyAgICAgICAvKgo+ICsgICAgICAgICogQWZ0ZXIgYSByZXNldCwgdGhlIEhXIHN0YXJ0cyB3cml0 aW5nIGludG8gQ1NCIGVudHJ5IFswXS4gV2UKPiArICAgICAgICAqIHRoZXJlZm9yZSBoYXZlIHRv IHNldCBvdXIgSEVBRCBwb2ludGVyIGJhY2sgb25lIGVudHJ5IHNvIHRoYXQKPiArICAgICAgICAq IHRoZSAqZmlyc3QqIGVudHJ5IHdlIGNoZWNrIGlzIGVudHJ5IDAuIFRvIGNvbXBsaWNhdGUgdGhp cyBmdXJ0aGVyLAo+ICsgICAgICAgICogYXMgd2UgZG9uJ3Qgd2FpdCBmb3IgdGhlIGZpcnN0IGlu dGVycnVwdCBhZnRlciByZXNldCwgd2UgaGF2ZSB0bwo+ICsgICAgICAgICogZmFrZSB0aGUgSFcg d3JpdGUgdG8gcG9pbnQgYmFjayB0byB0aGUgbGFzdCBlbnRyeSBzbyB0aGF0IG91cgo+ICsgICAg ICAgICogaW5saW5lIGNvbXBhcmlzb24gb2Ygb3VyIGNhY2hlZCBoZWFkIHBvc2l0aW9uIGFnYWlu c3QgdGhlIGxhc3QgSFcKPiArICAgICAgICAqIHdyaXRlIHdvcmtzIGV2ZW4gYmVmb3JlIHRoZSBm aXJzdCBpbnRlcnJ1cHQuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGV4ZWNsaXN0cy0+Y3NiX2hl YWQgPSByZXNldF92YWx1ZTsKPiArICAgICAgIFdSSVRFX09OQ0UoKmV4ZWNsaXN0cy0+Y3NiX3dy aXRlLCByZXNldF92YWx1ZSk7Cj4gKyAgICAgICB3bWIoKTsgLyogTWFrZSBzdXJlIHRoaXMgaXMg dmlzaWJsZSB0byBIVyAocGFyYW5vaWE/KSAqLwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAg KiBTb21ldGltZXMgSWNlbGFrZSBmb3JnZXRzIHRvIHJlc2V0IGl0cyBwb2ludGVycyBvbiBhIEdQ VSByZXNldC4KPiArICAgICAgICAqIEJsdWRnZW9uIHRoZW0gd2l0aCBhIG1taW8gdXBkYXRlIHRv IGJlIHN1cmUuCj4gKyAgICAgICAgKi8KPiArICAgICAgIEVOR0lORV9XUklURShlbmdpbmUsIFJJ TkdfQ09OVEVYVF9TVEFUVVNfUFRSLAo+ICsgICAgICAgICAgICAgICAgICAgIHJlc2V0X3ZhbHVl IDw8IDggfCByZXNldF92YWx1ZSk7Cj4gKyAgICAgICBFTkdJTkVfUE9TVElOR19SRUFEKGVuZ2lu ZSwgUklOR19DT05URVhUX1NUQVRVU19QVFIpOwo+ICsKPiArICAgICAgIGludmFsaWRhdGVfY3Ni X2VudHJpZXMoJmV4ZWNsaXN0cy0+Y3NiX3N0YXR1c1swXSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmV4ZWNsaXN0cy0+Y3NiX3N0YXR1c1tyZXNldF92YWx1ZV0pOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gKyAg ICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gKyAgICAgICBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycTsKPiArCj4gKyAgICAgICBtYigpOyAvKiBwYXJhbm9pYTogcmVhZCB0aGUgQ1NCIHBv aW50ZXJzIGZyb20gYWZ0ZXIgdGhlIHJlc2V0ICovCj4gKyAgICAgICBjbGZsdXNoKGV4ZWNsaXN0 cy0+Y3NiX3dyaXRlKTsKPiArICAgICAgIG1iKCk7Cj4gKwo+ICsgICAgICAgcHJvY2Vzc19jc2Io ZW5naW5lKTsgLyogZHJhaW4gcHJlZW1wdGlvbiBldmVudHMgKi8KPiArCj4gKyAgICAgICAvKiBG b2xsb3dpbmcgdGhlIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgQ1NCIHJlYWQvd3JpdGUg cG9pbnRlcnMgKi8KPiArICAgICAgIHJlc2V0X2NzYl9wb2ludGVycyhlbmdpbmUpOwo+ICsKPiAr ICAgICAgIC8qCj4gKyAgICAgICAgKiBTYXZlIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRl eHQsIGV2ZW4gaWYgd2UgY29tcGxldGVkCj4gKyAgICAgICAgKiBpdHMgcmVxdWVzdCwgaXQgd2Fz IHN0aWxsIHJ1bm5pbmcgYXQgdGhlIHRpbWUgb2YgdGhlCj4gKyAgICAgICAgKiByZXNldCBhbmQg d2lsbCBoYXZlIGJlZW4gY2xvYmJlcmVkLgo+ICsgICAgICAgICovCj4gKyAgICAgICBycSA9IGV4 ZWNsaXN0c19hY3RpdmUoZXhlY2xpc3RzKTsKPiArICAgICAgIGlmICghcnEpCj4gKyAgICAgICAg ICAgICAgIGdvdG8gdW53aW5kOwo+ICsKPiArICAgICAgIC8qIFdlIHN0aWxsIGhhdmUgcmVxdWVz dHMgaW4tZmxpZ2h0OyB0aGUgZW5naW5lIHNob3VsZCBiZSBhY3RpdmUgKi8KPiArICAgICAgIEdF TV9CVUdfT04oIWludGVsX2VuZ2luZV9wbV9pc19hd2FrZShlbmdpbmUpKTsKPiArCj4gKyAgICAg ICBjZSA9IHJxLT5od19jb250ZXh0Owo+ICsgICAgICAgR0VNX0JVR19PTighaTkxNV92bWFfaXNf cGlubmVkKGNlLT5zdGF0ZSkpOwo+ICsKPiArICAgICAgIGlmIChpOTE1X3JlcXVlc3RfY29tcGxl dGVkKHJxKSkgewo+ICsgICAgICAgICAgICAgICAvKiBJZGxlIGNvbnRleHQ7IHRpZHkgdXAgdGhl IHJpbmcgc28gd2UgY2FuIHJlc3RhcnQgYWZyZXNoICovCj4gKyAgICAgICAgICAgICAgIGNlLT5y aW5nLT5oZWFkID0gaW50ZWxfcmluZ193cmFwKGNlLT5yaW5nLCBycS0+dGFpbCk7Cj4gKyAgICAg ICAgICAgICAgIGdvdG8gb3V0X3JlcGxheTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBD b250ZXh0IGhhcyByZXF1ZXN0cyBzdGlsbCBpbi1mbGlnaHQ7IGl0IHNob3VsZCBub3QgYmUgaWRs ZSEgKi8KPiArICAgICAgIEdFTV9CVUdfT04oaTkxNV9hY3RpdmVfaXNfaWRsZSgmY2UtPmFjdGl2 ZSkpOwo+ICsgICAgICAgcnEgPSBhY3RpdmVfcmVxdWVzdChjZS0+dGltZWxpbmUsIHJxKTsKPiAr ICAgICAgIGNlLT5yaW5nLT5oZWFkID0gaW50ZWxfcmluZ193cmFwKGNlLT5yaW5nLCBycS0+aGVh ZCk7Cj4gKyAgICAgICBHRU1fQlVHX09OKGNlLT5yaW5nLT5oZWFkID09IGNlLT5yaW5nLT50YWls KTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogSWYgdGhpcyByZXF1ZXN0IGhhc24ndCBz dGFydGVkIHlldCwgZS5nLiBpdCBpcyB3YWl0aW5nIG9uIGEKPiArICAgICAgICAqIHNlbWFwaG9y ZSwgd2UgbmVlZCB0byBhdm9pZCBza2lwcGluZyB0aGUgcmVxdWVzdCBvciBlbHNlIHdlCj4gKyAg ICAgICAgKiBicmVhayB0aGUgc2lnbmFsaW5nIGNoYWluLiBIb3dldmVyLCBpZiB0aGUgY29udGV4 dCBpcyBjb3JydXB0Cj4gKyAgICAgICAgKiB0aGUgcmVxdWVzdCB3aWxsIG5vdCByZXN0YXJ0IGFu ZCB3ZSB3aWxsIGJlIHN0dWNrIHdpdGggYSB3ZWRnZWQKPiArICAgICAgICAqIGRldmljZS4gSXQg aXMgcXVpdGUgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBpZiB3ZSBpc3N1ZSBhIHJlc2V0Cj4gKyAgICAg ICAgKiB3aGlsZSB0aGUgR1BVIGlzIGxvYWRpbmcgdGhlIGNvbnRleHQgaW1hZ2UsIHRoYXQgdGhl IGNvbnRleHQKPiArICAgICAgICAqIGltYWdlIGJlY29tZXMgY29ycnVwdC4KPiArICAgICAgICAq Cj4gKyAgICAgICAgKiBPdGhlcndpc2UsIGlmIHdlIGhhdmUgbm90IHN0YXJ0ZWQgeWV0LCB0aGUg cmVxdWVzdCBzaG91bGQgcmVwbGF5Cj4gKyAgICAgICAgKiBwZXJmZWN0bHkgYW5kIHdlIGRvIG5v dCBuZWVkIHRvIGZsYWcgdGhlIHJlc3VsdCBhcyBiZWluZyBlcnJvbmVvdXMuCj4gKyAgICAgICAg Ki8KPiArICAgICAgIGlmICghaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpKQo+ICsgICAgICAgICAg ICAgICBnb3RvIG91dF9yZXBsYXk7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIElmIHRo ZSByZXF1ZXN0IHdhcyBpbm5vY2VudCwgd2UgbGVhdmUgdGhlIHJlcXVlc3QgaW4gdGhlIEVMU1AK PiArICAgICAgICAqIGFuZCB3aWxsIHRyeSB0byByZXBsYXkgaXQgb24gcmVzdGFydGluZy4gVGhl IGNvbnRleHQgaW1hZ2UgbWF5Cj4gKyAgICAgICAgKiBoYXZlIGJlZW4gY29ycnVwdGVkIGJ5IHRo ZSByZXNldCwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgaGF2ZQo+ICsgICAgICAgICogdG8gc2Vydmlj ZSBhIG5ldyBHUFUgaGFuZywgYnV0IG1vcmUgbGlrZWx5IHdlIGNhbiBjb250aW51ZSBvbgo+ICsg ICAgICAgICogd2l0aG91dCBpbXBhY3QuCj4gKyAgICAgICAgKgo+ICsgICAgICAgICogSWYgdGhl IHJlcXVlc3Qgd2FzIGd1aWx0eSwgd2UgcHJlc3VtZSB0aGUgY29udGV4dCBpcyBjb3JydXB0Cj4g KyAgICAgICAgKiBhbmQgaGF2ZSB0byBhdCBsZWFzdCByZXN0b3JlIHRoZSBSSU5HIHJlZ2lzdGVy IGluIHRoZSBjb250ZXh0Cj4gKyAgICAgICAgKiBpbWFnZSBiYWNrIHRvIHRoZSBleHBlY3RlZCB2 YWx1ZXMgdG8gc2tpcCBvdmVyIHRoZSBndWlsdHkgcmVxdWVzdC4KPiArICAgICAgICAqLwo+ICsg ICAgICAgX19pOTE1X3JlcXVlc3RfcmVzZXQocnEsIHN0YWxsZWQpOwo+ICsgICAgICAgaWYgKCFz dGFsbGVkKQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9yZXBsYXk7Cj4gKwo+ICsgICAgICAg LyoKPiArICAgICAgICAqIFdlIHdhbnQgYSBzaW1wbGUgY29udGV4dCArIHJpbmcgdG8gZXhlY3V0 ZSB0aGUgYnJlYWRjcnVtYiB1cGRhdGUuCj4gKyAgICAgICAgKiBXZSBjYW5ub3QgcmVseSBvbiB0 aGUgY29udGV4dCBiZWluZyBpbnRhY3QgYWNyb3NzIHRoZSBHUFUgaGFuZywKPiArICAgICAgICAq IHNvIGNsZWFyIGl0IGFuZCByZWJ1aWxkIGp1c3Qgd2hhdCB3ZSBuZWVkIGZvciB0aGUgYnJlYWRj cnVtYi4KPiArICAgICAgICAqIEFsbCBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGlzIGNvbnRleHQg d2lsbCBiZSB6YXBwZWQsIGFuZCBhbnkKPiArICAgICAgICAqIGZ1dHVyZSByZXF1ZXN0IHdpbGwg YmUgYWZ0ZXIgdXNlcnNwYWNlIGhhcyBoYWQgdGhlIG9wcG9ydHVuaXR5Cj4gKyAgICAgICAgKiB0 byByZWNyZWF0ZSBpdHMgb3duIHN0YXRlLgo+ICsgICAgICAgICovCj4gKyAgICAgICBHRU1fQlVH X09OKCFpbnRlbF9jb250ZXh0X2lzX3Bpbm5lZChjZSkpOwo+ICsgICAgICAgaW50ZWxfbHJfY29u dGV4dF9yZXN0b3JlX2RlZmF1bHRfc3RhdGUoY2UsIGVuZ2luZSk7Cj4gKwo+ICtvdXRfcmVwbGF5 Ogo+ICsgICAgICAgR0VNX1RSQUNFKCIlcyByZXBsYXkge2hlYWQ6JTA0eCwgdGFpbDolMDR4fVxu IiwKPiArICAgICAgICAgICAgICAgICBlbmdpbmUtPm5hbWUsIGNlLT5yaW5nLT5oZWFkLCBjZS0+ cmluZy0+dGFpbCk7Cj4gKyAgICAgICBpbnRlbF9yaW5nX3VwZGF0ZV9zcGFjZShjZS0+cmluZyk7 Cj4gKyAgICAgICBpbnRlbF9scl9jb250ZXh0X3Jlc2V0X3JlZ19zdGF0ZShjZSwgZW5naW5lKTsK PiArICAgICAgIGludGVsX2xyX2NvbnRleHRfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsK PiArICAgICAgIGNlLT5scmNfZGVzYyB8PSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOyAvKiBwYXJh bm9pZDogR1BVIHdhcyByZXNldCEgKi8KPiArCj4gK3Vud2luZDoKPiArICAgICAgIC8qIFB1c2gg YmFjayBhbnkgaW5jb21wbGV0ZSByZXF1ZXN0cyBmb3IgcmVwbGF5IGFmdGVyIHRoZSByZXNldC4g Ki8KPiArICAgICAgIGNhbmNlbF9wb3J0X3JlcXVlc3RzKGV4ZWNsaXN0cyk7Cj4gKyAgICAgICBf X3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKGVuZ2luZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGV4ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wg c3RhbGxlZCkKPiArewo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKyAgICAg ICBHRU1fVFJBQ0UoIiVzXG4iLCBlbmdpbmUtPm5hbWUpOwo+ICsKPiArICAgICAgIHNwaW5fbG9j a19pcnFzYXZlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gKwo+ICsgICAgICAgX19l eGVjbGlzdHNfcmVzZXQoZW5naW5lLCBzdGFsbGVkKTsKPiArCj4gKyAgICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIG5vcF9zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQo+ICt7 Cj4gKyAgICAgICAvKiBUaGUgZHJpdmVyIGlzIHdlZGdlZDsgZG9uJ3QgcHJvY2VzcyBhbnkgbW9y ZSBldmVudHMuICovCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVx dWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4 ZWNsaXN0czsKPiArICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47Cj4gKyAgICAg ICBzdHJ1Y3QgcmJfbm9kZSAqcmI7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsK PiArICAgICAgIEdFTV9UUkFDRSgiJXNcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gKwo+ICsgICAgICAg LyoKPiArICAgICAgICAqIEJlZm9yZSB3ZSBjYWxsIGVuZ2luZS0+Y2FuY2VsX3JlcXVlc3RzKCks IHdlIHNob3VsZCBoYXZlIGV4Y2x1c2l2ZQo+ICsgICAgICAgICogYWNjZXNzIHRvIHRoZSBzdWJt aXNzaW9uIHN0YXRlLiBUaGlzIGlzIGFycmFuZ2VkIGZvciB1cyBieSB0aGUKPiArICAgICAgICAq IGNhbGxlciBkaXNhYmxpbmcgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uLCB0aGUgdGFza2xldCBh bmQgb3RoZXIKPiArICAgICAgICAqIHRocmVhZHMgdGhhdCBtYXkgdGhlbiBhY2Nlc3MgdGhlIHNh bWUgc3RhdGUsIGdpdmluZyB1cyBhIGZyZWUgaGFuZAo+ICsgICAgICAgICogdG8gcmVzZXQgc3Rh dGUuIEhvd2V2ZXIsIHdlIHN0aWxsIG5lZWQgdG8gbGV0IGxvY2tkZXAgYmUgYXdhcmUgdGhhdAo+ ICsgICAgICAgICogd2Uga25vdyB0aGlzIHN0YXRlIG1heSBiZSBhY2Nlc3NlZCBpbiBoYXJkaXJx IGNvbnRleHQsIHNvIHdlCj4gKyAgICAgICAgKiBkaXNhYmxlIHRoZSBpcnEgYXJvdW5kIHRoaXMg bWFuaXB1bGF0aW9uIGFuZCB3ZSB3YW50IHRvIGtlZXAKPiArICAgICAgICAqIHRoZSBzcGlubG9j ayBmb2N1c2VkIG9uIGl0cyBkdXRpZXMgYW5kIG5vdCBhY2NpZGVudGFsbHkgY29uZmxhdGUKPiAr ICAgICAgICAqIGNvdmVyYWdlIHRvIHRoZSBzdWJtaXNzaW9uJ3MgaXJxIHN0YXRlLiAoU2ltaWxh cmx5LCBhbHRob3VnaCB3ZQo+ICsgICAgICAgICogc2hvdWxkbid0IG5lZWQgdG8gZGlzYWJsZSBp cnEgYXJvdW5kIHRoZSBtYW5pcHVsYXRpb24gb2YgdGhlCj4gKyAgICAgICAgKiBzdWJtaXNzaW9u J3MgaXJxIHN0YXRlLCB3ZSBhbHNvIHdpc2ggdG8gcmVtaW5kIG91cnNlbHZlcyB0aGF0Cj4gKyAg ICAgICAgKiBpdCBpcyBpcnEgc3RhdGUuKQo+ICsgICAgICAgICovCj4gKyAgICAgICBzcGluX2xv Y2tfaXJxc2F2ZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwo+ICsKPiArICAgICAgIF9f ZXhlY2xpc3RzX3Jlc2V0KGVuZ2luZSwgdHJ1ZSk7Cj4gKwo+ICsgICAgICAgLyogTWFyayBhbGwg ZXhlY3V0aW5nIHJlcXVlc3RzIGFzIHNraXBwZWQuICovCj4gKyAgICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5KHJxLCAmZW5naW5lLT5hY3RpdmUucmVxdWVzdHMsIHNjaGVkLmxpbmspCj4gKyAgICAg ICAgICAgICAgIG1hcmtfZWlvKHJxKTsKPiArCj4gKyAgICAgICAvKiBGbHVzaCB0aGUgcXVldWVk IHJlcXVlc3RzIHRvIHRoZSB0aW1lbGluZSBsaXN0IChmb3IgcmV0aXJpbmcpLiAqLwo+ICsgICAg ICAgd2hpbGUgKChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1ZSkpKSB7Cj4g KyAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gdG9fcHJpb2xpc3QocmIp Owo+ICsgICAgICAgICAgICAgICBpbnQgaTsKPiArCj4gKyAgICAgICAgICAgICAgIHByaW9saXN0 X2Zvcl9lYWNoX3JlcXVlc3RfY29uc3VtZShycSwgcm4sIHAsIGkpIHsKPiArICAgICAgICAgICAg ICAgICAgICAgICBtYXJrX2VpbyhycSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19pOTE1 X3JlcXVlc3Rfc3VibWl0KHJxKTsKPiArICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgICAgcmJfZXJhc2VfY2FjaGVkKCZwLT5ub2RlLCAmZXhlY2xpc3RzLT5xdWV1ZSk7Cj4gKyAg ICAgICAgICAgICAgIGk5MTVfcHJpb2xpc3RfZnJlZShwKTsKPiArICAgICAgIH0KPiArCj4gKyAg ICAgICAvKiBDYW5jZWwgYWxsIGF0dGFjaGVkIHZpcnR1YWwgZW5naW5lcyAqLwo+ICsgICAgICAg d2hpbGUgKChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKSkpIHsKPiAr ICAgICAgICAgICAgICAgc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSA9Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUt PmlkXS5yYik7Cj4gKwo+ICsgICAgICAgICAgICAgICByYl9lcmFzZV9jYWNoZWQocmIsICZleGVj bGlzdHMtPnZpcnR1YWwpOwo+ICsgICAgICAgICAgICAgICBSQl9DTEVBUl9OT0RFKHJiKTsKPiAr Cj4gKyAgICAgICAgICAgICAgIHNwaW5fbG9jaygmdmUtPmJhc2UuYWN0aXZlLmxvY2spOwo+ICsg ICAgICAgICAgICAgICBycSA9IGZldGNoX2FuZF96ZXJvKCZ2ZS0+cmVxdWVzdCk7Cj4gKyAgICAg ICAgICAgICAgIGlmIChycSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIG1hcmtfZWlvKHJx KTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcnEtPmVuZ2luZSA9IGVuZ2luZTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICBfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICsKPiArICAgICAgICAg ICAgICAgICAgICAgICB2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IElO VF9NSU47Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2so JnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBSZW1h aW5pbmcgX3VucmVhZHlfIHJlcXVlc3RzIHdpbGwgYmUgbm9wJ2VkIHdoZW4gc3VibWl0dGVkICov Cj4gKwo+ICsgICAgICAgZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsK PiArICAgICAgIGV4ZWNsaXN0cy0+cXVldWUgPSBSQl9ST09UX0NBQ0hFRDsKPiArCj4gKyAgICAg ICBHRU1fQlVHX09OKF9fdGFza2xldF9pc19lbmFibGVkKCZleGVjbGlzdHMtPnRhc2tsZXQpKTsK PiArICAgICAgIGV4ZWNsaXN0cy0+dGFza2xldC5mdW5jID0gbm9wX3N1Ym1pc3Npb25fdGFza2xl dDsKPiArCj4gKyAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5s b2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZXNldF9maW5p c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNs aXN0czsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogQWZ0ZXIgYSBHUFUgcmVzZXQsIHdl IG1heSBoYXZlIHJlcXVlc3RzIHRvIHJlcGxheS4gRG8gc28gbm93IHdoaWxlCj4gKyAgICAgICAg KiB3ZSBzdGlsbCBoYXZlIHRoZSBmb3JjZXdha2UgdG8gYmUgc3VyZSB0aGF0IHRoZSBHUFUgaXMg bm90IGFsbG93ZWQKPiArICAgICAgICAqIHRvIHNsZWVwIGJlZm9yZSB3ZSByZXN0YXJ0IGFuZCBy ZWxvYWQgYSBjb250ZXh0Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBHRU1fQlVHX09OKCFyZXNl dF9pbl9wcm9ncmVzcyhleGVjbGlzdHMpKTsKPiArICAgICAgIGlmICghUkJfRU1QVFlfUk9PVCgm ZXhlY2xpc3RzLT5xdWV1ZS5yYl9yb290KSkKPiArICAgICAgICAgICAgICAgZXhlY2xpc3RzLT50 YXNrbGV0LmZ1bmMoZXhlY2xpc3RzLT50YXNrbGV0LmRhdGEpOwo+ICsKPiArICAgICAgIGlmIChf X3Rhc2tsZXRfZW5hYmxlKCZleGVjbGlzdHMtPnRhc2tsZXQpKQo+ICsgICAgICAgICAgICAgICAv KiBBbmQga2ljayBpbiBjYXNlIHdlIG1pc3NlZCBhIG5ldyByZXF1ZXN0IHN1Ym1pc3Npb24uICov Cj4gKyAgICAgICAgICAgICAgIHRhc2tsZXRfaGlfc2NoZWR1bGUoJmV4ZWNsaXN0cy0+dGFza2xl dCk7Cj4gKyAgICAgICBHRU1fVFJBQ0UoIiVzOiBkZXB0aC0+JWRcbiIsIGVuZ2luZS0+bmFtZSwK PiArICAgICAgICAgICAgICAgICBhdG9taWNfcmVhZCgmZXhlY2xpc3RzLT50YXNrbGV0LmNvdW50 KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19wYXJrKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsgICAgICAgY2FuY2VsX3RpbWVyKCZlbmdpbmUtPmV4 ZWNsaXN0cy50aW1lcik7Cj4gKyAgICAgICBjYW5jZWxfdGltZXIoJmVuZ2luZS0+ZXhlY2xpc3Rz LnByZWVtcHQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVzdHJveShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArICAgICAgIC8qIFN5bmNocm9uaXNl IHdpdGggcmVzaWR1YWwgdGltZXJzIGFuZCBhbnkgc29mdGlycSB0aGV5IHJhaXNlICovCj4gKyAg ICAgICBkZWxfdGltZXJfc3luYygmZW5naW5lLT5leGVjbGlzdHMudGltZXIpOwo+ICsgICAgICAg ZGVsX3RpbWVyX3N5bmMoJmVuZ2luZS0+ZXhlY2xpc3RzLnByZWVtcHQpOwo+ICsgICAgICAgdGFz a2xldF9raWxsKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKPiArCj4gKyAgICAgICBpbnRl bF9sb2dpY2FsX3JpbmdfZGVzdHJveShlbmdpbmUpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2V4 ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiArewo+ICsgICAgICAgZW5naW5lLT5yZXF1ZXN0X2FsbG9jID0gZXhlY2xpc3RzX3Jl cXVlc3RfYWxsb2M7Cj4gKyAgICAgICBlbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0ID0gZXhlY2xpc3Rz X3N1Ym1pdF9yZXF1ZXN0Owo+ICsgICAgICAgZW5naW5lLT5jYW5jZWxfcmVxdWVzdHMgPSBleGVj bGlzdHNfY2FuY2VsX3JlcXVlc3RzOwo+ICsgICAgICAgZW5naW5lLT5zY2hlZHVsZSA9IGk5MTVf c2NoZWR1bGU7Cj4gKyAgICAgICBlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0LmZ1bmMgPSBleGVj bGlzdHNfc3VibWlzc2lvbl90YXNrbGV0Owo+ICsKPiArICAgICAgIGVuZ2luZS0+cmVzZXQucHJl cGFyZSA9IGV4ZWNsaXN0c19yZXNldF9wcmVwYXJlOwo+ICsgICAgICAgZW5naW5lLT5yZXNldC5y ZXNldCA9IGV4ZWNsaXN0c19yZXNldDsKPiArICAgICAgIGVuZ2luZS0+cmVzZXQuZmluaXNoID0g ZXhlY2xpc3RzX3Jlc2V0X2ZpbmlzaDsKPiArCj4gKyAgICAgICBlbmdpbmUtPmRlc3Ryb3kgPSBl eGVjbGlzdHNfZGVzdHJveTsKPiArICAgICAgIGVuZ2luZS0+cGFyayA9IGV4ZWNsaXN0c19wYXJr Owo+ICsgICAgICAgZW5naW5lLT51bnBhcmsgPSBOVUxMOwo+ICsKPiArICAgICAgIGVuZ2luZS0+ ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfU1VQUE9SVFNfU1RBVFM7Cj4gKyAgICAgICBpZiAoIWludGVs X3ZncHVfYWN0aXZlKGVuZ2luZS0+aTkxNSkpIHsKPiArICAgICAgICAgICAgICAgZW5naW5lLT5m bGFncyB8PSBJOTE1X0VOR0lORV9IQVNfU0VNQVBIT1JFUzsKPiArICAgICAgICAgICAgICAgaWYg KEhBU19MT0dJQ0FMX1JJTkdfUFJFRU1QVElPTihlbmdpbmUtPmk5MTUpKQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGVuZ2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfSEFTX1BSRUVNUFRJT047 Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49 IDEyKQo+ICsgICAgICAgICAgICAgICBlbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19S RUxBVElWRV9NTUlPOwo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb25f c2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICB0YXNr bGV0X2luaXQoJmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQsCj4gKyAgICAgICAgICAgICAgICAg ICAgZXhlY2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpZW5naW5lKTsK PiArICAgICAgIHRpbWVyX3NldHVwKCZlbmdpbmUtPmV4ZWNsaXN0cy50aW1lciwgZXhlY2xpc3Rz X3RpbWVzbGljZSwgMCk7Cj4gKyAgICAgICB0aW1lcl9zZXR1cCgmZW5naW5lLT5leGVjbGlzdHMu cHJlZW1wdCwgZXhlY2xpc3RzX3ByZWVtcHQsIDApOwo+ICsKPiArICAgICAgIGludGVsX2xvZ2lj YWxfcmluZ19zZXR1cChlbmdpbmUpOwo+ICsKPiArICAgICAgIGVuZ2luZS0+c2V0X2RlZmF1bHRf c3VibWlzc2lvbiA9IGludGVsX2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOwo+ICsg ICAgICAgZW5naW5lLT5jb3BzID0gJmV4ZWNsaXN0c19jb250ZXh0X29wczsKPiArCj4gKyAgICAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uX2lu aXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNs aXN0czsKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5p OTE1Owo+ICsgICAgICAgc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZW5naW5lLT51bmNv cmU7Cj4gKyAgICAgICB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+ICsgICAgICAgaW50 IHJldDsKPiArCj4gKyAgICAgICByZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfaW5pdChlbmdpbmUp Owo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4g KyAgICAgICBpZiAoSEFTX0xPR0lDQUxfUklOR19FTFNRKGk5MTUpKSB7Cj4gKyAgICAgICAgICAg ICAgIGV4ZWNsaXN0cy0+c3VibWl0X3JlZyA9IHVuY29yZS0+cmVncyArCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19FWEVDTElTVF9TUV9DT05URU5U UyhiYXNlKSk7Cj4gKyAgICAgICAgICAgICAgIGV4ZWNsaXN0cy0+Y3RybF9yZWcgPSB1bmNvcmUt PnJlZ3MgKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfRVhFQ0xJU1RfQ09OVFJPTChiYXNlKSk7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAg ICAgICAgICBleGVjbGlzdHMtPnN1Ym1pdF9yZWcgPSB1bmNvcmUtPnJlZ3MgKwo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfRUxTUChiYXNlKSk7Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgZXhlY2xpc3RzLT5jc2Jfc3RhdHVzID0KPiArICAgICAg ICAgICAgICAgJmVuZ2luZS0+c3RhdHVzX3BhZ2UuYWRkcltJOTE1X0hXU19DU0JfQlVGMF9JTkRF WF07Cj4gKwo+ICsgICAgICAgZXhlY2xpc3RzLT5jc2Jfd3JpdGUgPQo+ICsgICAgICAgICAgICAg ICAmZW5naW5lLT5zdGF0dXNfcGFnZS5hZGRyW2ludGVsX2h3c19jc2Jfd3JpdGVfaW5kZXgoaTkx NSldOwo+ICsKPiArICAgICAgIGlmIChJTlRFTF9HRU4oaTkxNSkgPCAxMSkKPiArICAgICAgICAg ICAgICAgZXhlY2xpc3RzLT5jc2Jfc2l6ZSA9IEdFTjhfQ1NCX0VOVFJJRVM7Cj4gKyAgICAgICBl bHNlCj4gKyAgICAgICAgICAgICAgIGV4ZWNsaXN0cy0+Y3NiX3NpemUgPSBHRU4xMV9DU0JfRU5U UklFUzsKPiArCj4gKyAgICAgICByZXNldF9jc2JfcG9pbnRlcnMoZW5naW5lKTsKPiArCj4gKyAg ICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludGVsX2VuZ2luZV9tYXNrX3QKPiAr dmlydHVhbF9zdWJtaXNzaW9uX21hc2soc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSkK PiArewo+ICsgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKyAgICAgICBpbnRlbF9l bmdpbmVfbWFza190IG1hc2s7Cj4gKwo+ICsgICAgICAgcnEgPSBSRUFEX09OQ0UodmUtPnJlcXVl c3QpOwo+ICsgICAgICAgaWYgKCFycSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ ICsgICAgICAgLyogVGhlIHJxIGlzIHJlYWR5IGZvciBzdWJtaXNzaW9uOyBycS0+ZXhlY3V0aW9u X21hc2sgaXMgbm93IHN0YWJsZS4gKi8KPiArICAgICAgIG1hc2sgPSBycS0+ZXhlY3V0aW9uX21h c2s7Cj4gKyAgICAgICBpZiAodW5saWtlbHkoIW1hc2spKSB7Cj4gKyAgICAgICAgICAgICAgIC8q IEludmFsaWQgc2VsZWN0aW9uLCBzdWJtaXQgdG8gYSByYW5kb20gZW5naW5lIGluIGVycm9yICov Cj4gKyAgICAgICAgICAgICAgIGk5MTVfcmVxdWVzdF9za2lwKHJxLCAtRU5PREVWKTsKPiArICAg ICAgICAgICAgICAgbWFzayA9IHZlLT5zaWJsaW5nc1swXS0+bWFzazsKPiArICAgICAgIH0KPiAr Cj4gKyAgICAgICBHRU1fVFJBQ0UoIiVzOiBycT0lbGx4OiVsbGQsIG1hc2s9JXgsIHByaW89JWRc biIsCj4gKyAgICAgICAgICAgICAgICAgdmUtPmJhc2UubmFtZSwKPiArICAgICAgICAgICAgICAg ICBycS0+ZmVuY2UuY29udGV4dCwgcnEtPmZlbmNlLnNlcW5vLAo+ICsgICAgICAgICAgICAgICAg IG1hc2ssIHZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50KTsKPiArCj4gKyAg ICAgICByZXR1cm4gbWFzazsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHVhbF9zdWJtaXNz aW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50 ZWxfdmlydHVhbF9lbmdpbmUgKiBjb25zdCB2ZSA9Cj4gKyAgICAgICAgICAgICAgIChzdHJ1Y3Qg aW50ZWxfdmlydHVhbF9lbmdpbmUgKilkYXRhOwo+ICsgICAgICAgY29uc3QgaW50IHByaW8gPSB2 ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludDsKPiArICAgICAgIGludGVsX2Vu Z2luZV9tYXNrX3QgbWFzazsKPiArICAgICAgIHVuc2lnbmVkIGludCBuOwo+ICsKPiArICAgICAg IHJjdV9yZWFkX2xvY2soKTsKPiArICAgICAgIG1hc2sgPSB2aXJ0dWFsX3N1Ym1pc3Npb25fbWFz ayh2ZSk7Cj4gKyAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPiArICAgICAgIGlmICh1bmxpa2Vs eSghbWFzaykpCj4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAgICBsb2NhbF9p cnFfZGlzYWJsZSgpOwo+ICsgICAgICAgZm9yIChuID0gMDsgUkVBRF9PTkNFKHZlLT5yZXF1ZXN0 KSAmJiBuIDwgdmUtPm51bV9zaWJsaW5nczsgbisrKSB7Cj4gKyAgICAgICAgICAgICAgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmcgPSB2ZS0+c2libGluZ3Nbbl07Cj4gKyAgICAgICAg ICAgICAgIHN0cnVjdCB2ZV9ub2RlICogY29uc3Qgbm9kZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+ aWRdOwo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgcmJfbm9kZSAqKnBhcmVudCwgKnJiOwo+ICsg ICAgICAgICAgICAgICBib29sIGZpcnN0Owo+ICsKPiArICAgICAgICAgICAgICAgaWYgKHVubGlr ZWx5KCEobWFzayAmIHNpYmxpbmctPm1hc2spKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAg IGlmICghUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzcGluX2xvY2soJnNpYmxpbmctPmFjdGl2ZS5sb2NrKTsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJiX2VyYXNlX2NhY2hlZCgmbm9kZS0+cmIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpYmxpbmctPmV4ZWNs aXN0cy52aXJ0dWFsKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJCX0NMRUFS X05PREUoJm5vZGUtPnJiKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5f dW5sb2NrKCZzaWJsaW5nLT5hY3RpdmUubG9jayk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICAgICBzcGluX2xvY2soJnNpYmxpbmctPmFjdGl2ZS5sb2NrKTsK PiArCj4gKyAgICAgICAgICAgICAgIGlmICghUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIpKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBD aGVhdCBhbmQgYXZvaWQgcmViYWxhbmNpbmcgdGhlIHRyZWUgaWYgd2UgY2FuCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICogcmV1c2UgdGhpcyBub2RlIGluIHNpdHUuCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSByYl9maXJz dF9jYWNoZWQoJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKSA9PQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm5vZGUtPnJiOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm IChwcmlvID09IG5vZGUtPnByaW8gfHwgKHByaW8gPiBub2RlLT5wcmlvICYmIGZpcnN0KSkKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3VibWl0X2VuZ2luZTsKPiArCj4g KyAgICAgICAgICAgICAgICAgICAgICAgcmJfZXJhc2VfY2FjaGVkKCZub2RlLT5yYiwgJnNpYmxp bmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKPiArICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgICAgcmIgPSBOVUxMOwo+ICsgICAgICAgICAgICAgICBmaXJzdCA9IHRydWU7Cj4gKyAg ICAgICAgICAgICAgIHBhcmVudCA9ICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbC5yYl9yb290 LnJiX25vZGU7Cj4gKyAgICAgICAgICAgICAgIHdoaWxlICgqcGFyZW50KSB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHZlX25vZGUgKm90aGVyOwo+ICsKPiArICAgICAgICAgICAg ICAgICAgICAgICByYiA9ICpwYXJlbnQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIg PSByYl9lbnRyeShyYiwgdHlwZW9mKCpvdGhlciksIHJiKTsKPiArICAgICAgICAgICAgICAgICAg ICAgICBpZiAocHJpbyA+IG90aGVyLT5wcmlvKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYXJlbnQgPSAmcmItPnJiX2xlZnQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICZyYi0+ cmJfcmlnaHQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNl Owo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgfQo+ICsKPiAr ICAgICAgICAgICAgICAgcmJfbGlua19ub2RlKCZub2RlLT5yYiwgcmIsIHBhcmVudCk7Cj4gKyAg ICAgICAgICAgICAgIHJiX2luc2VydF9jb2xvcl9jYWNoZWQoJm5vZGUtPnJiLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVh bCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCk7Cj4gKwo+ ICtzdWJtaXRfZW5naW5lOgo+ICsgICAgICAgICAgICAgICBHRU1fQlVHX09OKFJCX0VNUFRZX05P REUoJm5vZGUtPnJiKSk7Cj4gKyAgICAgICAgICAgICAgIG5vZGUtPnByaW8gPSBwcmlvOwo+ICsg ICAgICAgICAgICAgICBpZiAoZmlyc3QgJiYgcHJpbyA+IHNpYmxpbmctPmV4ZWNsaXN0cy5xdWV1 ZV9wcmlvcml0eV9oaW50KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc2libGluZy0+ZXhl Y2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBwcmlvOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHRhc2tsZXRfaGlfc2NoZWR1bGUoJnNpYmxpbmctPmV4ZWNsaXN0cy50YXNrbGV0KTsKPiAr ICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnNpYmxp bmctPmFjdGl2ZS5sb2NrKTsKPiArICAgICAgIH0KPiArICAgICAgIGxvY2FsX2lycV9lbmFibGUo KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHVhbF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX3ZpcnR1YWxfZW5n aW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5naW5lKHJxLT5lbmdpbmUpOwo+ICsgICAgICAgc3RydWN0 IGk5MTVfcmVxdWVzdCAqb2xkOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4g KyAgICAgICBHRU1fVFJBQ0UoIiVzOiBycT0lbGx4OiVsbGRcbiIsCj4gKyAgICAgICAgICAgICAg ICAgdmUtPmJhc2UubmFtZSwKPiArICAgICAgICAgICAgICAgICBycS0+ZmVuY2UuY29udGV4dCwK PiArICAgICAgICAgICAgICAgICBycS0+ZmVuY2Uuc2Vxbm8pOwo+ICsKPiArICAgICAgIEdFTV9C VUdfT04odmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgIT0gdmlydHVhbF9zdWJtaXRfcmVxdWVzdCk7 Cj4gKwo+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnZlLT5iYXNlLmFjdGl2ZS5sb2NrLCBm bGFncyk7Cj4gKwo+ICsgICAgICAgb2xkID0gdmUtPnJlcXVlc3Q7Cj4gKyAgICAgICBpZiAob2xk KSB7IC8qIGJhY2tncm91bmQgY29tcGxldGlvbiBldmVudCBmcm9tIHByZWVtcHQtdG8tYnVzeSAq Lwo+ICsgICAgICAgICAgICAgICBHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKG9s ZCkpOwo+ICsgICAgICAgICAgICAgICBfX2k5MTVfcmVxdWVzdF9zdWJtaXQob2xkKTsKPiArICAg ICAgICAgICAgICAgaTkxNV9yZXF1ZXN0X3B1dChvbGQpOwo+ICsgICAgICAgfQo+ICsKPiArICAg ICAgIGlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkgewo+ICsgICAgICAgICAgICAgICBf X2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+ICsKPiArICAgICAgICAgICAgICAgdmUtPmJhc2Uu ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwo+ICsgICAgICAgICAgICAg ICB2ZS0+cmVxdWVzdCA9IE5VTEw7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAg ICB2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHJxX3ByaW8ocnEpOwo+ ICsgICAgICAgICAgICAgICB2ZS0+cmVxdWVzdCA9IGk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsK PiArICAgICAgICAgICAgICAgR0VNX0JVR19PTighbGlzdF9lbXB0eShpbnRlbF92aXJ0dWFsX2Vu Z2luZV9xdWV1ZSh2ZSkpKTsKPiArICAgICAgICAgICAgICAgbGlzdF9tb3ZlX3RhaWwoJnJxLT5z Y2hlZC5saW5rLCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9xdWV1ZSh2ZSkpOwo+ICsKPiArICAgICAg ICAgICAgICAgdGFza2xldF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQpOwo+ ICsgICAgICAgfQo+ICsKPiArICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlLT5iYXNl LmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3ZpcnR1YWxf Ym9uZF9leGVjdXRlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1Y3QgZG1hX2ZlbmNlICpz aWduYWwpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPSB0 b192aXJ0dWFsX2VuZ2luZShycS0+ZW5naW5lKTsKPiArICAgICAgIGludGVsX2VuZ2luZV9tYXNr X3QgYWxsb3dlZCwgZXhlYzsKPiArICAgICAgIHN0cnVjdCB2ZV9ib25kICpib25kOwo+ICsKPiAr ICAgICAgIGFsbG93ZWQgPSB+dG9fcmVxdWVzdChzaWduYWwpLT5lbmdpbmUtPm1hc2s7Cj4gKwo+ ICsgICAgICAgYm9uZCA9IGludGVsX3ZpcnR1YWxfZW5naW5lX2ZpbmRfYm9uZCh2ZSwgdG9fcmVx dWVzdChzaWduYWwpLT5lbmdpbmUpOwo+ICsgICAgICAgaWYgKGJvbmQpCj4gKyAgICAgICAgICAg ICAgIGFsbG93ZWQgJj0gYm9uZC0+c2libGluZ19tYXNrOwo+ICsKPiArICAgICAgIC8qIFJlc3Ry aWN0IHRoZSBib25kZWQgcmVxdWVzdCB0byBydW4gb24gb25seSB0aGUgYXZhaWxhYmxlIGVuZ2lu ZXMgKi8KPiArICAgICAgIGV4ZWMgPSBSRUFEX09OQ0UocnEtPmV4ZWN1dGlvbl9tYXNrKTsKPiAr ICAgICAgIHdoaWxlICghdHJ5X2NtcHhjaGcoJnJxLT5leGVjdXRpb25fbWFzaywgJmV4ZWMsIGV4 ZWMgJiBhbGxvd2VkKSkKPiArICAgICAgICAgICAgICAgOwo+ICsKPiArICAgICAgIC8qIFByZXZl bnQgdGhlIG1hc3RlciBmcm9tIGJlaW5nIHJlLXJ1biBvbiB0aGUgYm9uZGVkIGVuZ2luZXMgKi8K PiArICAgICAgIHRvX3JlcXVlc3Qoc2lnbmFsKS0+ZXhlY3V0aW9uX21hc2sgJj0gfmFsbG93ZWQ7 Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZXhlY2xpc3RzX3ZpcnR1YWxfc3VibWlzc2lvbl9pbml0 KHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUpCj4gK3sKPiArICAgICAgIHZlLT5iYXNl LnJlcXVlc3RfYWxsb2MgPSBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKPiArICAgICAgIHZlLT5i YXNlLnN1Ym1pdF9yZXF1ZXN0ID0gdmlydHVhbF9zdWJtaXRfcmVxdWVzdDsKPiArICAgICAgIHZl LT5iYXNlLmJvbmRfZXhlY3V0ZSA9IHZpcnR1YWxfYm9uZF9leGVjdXRlOwo+ICsgICAgICAgdGFz a2xldF9pbml0KCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCwKPiArICAgICAgICAgICAgICAg ICAgICB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCwKPiArICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZyl2ZSk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3df cmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wcmludGVyICptLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnNob3dfcmVxdWVzdCkoc3RydWN0IGRybV9w cmludGVyICptLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXgp LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heCkK PiArewo+ICsgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNs aXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiArICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLCAqbGFzdDsKPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKyAgICAgICB1bnNp Z25lZCBpbnQgY291bnQ7Cj4gKyAgICAgICBzdHJ1Y3QgcmJfbm9kZSAqcmI7Cj4gKwo+ICsgICAg ICAgc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKPiArCj4g KyAgICAgICBsYXN0ID0gTlVMTDsKPiArICAgICAgIGNvdW50ID0gMDsKPiArICAgICAgIGxpc3Rf Zm9yX2VhY2hfZW50cnkocnEsICZlbmdpbmUtPmFjdGl2ZS5yZXF1ZXN0cywgc2NoZWQubGluaykg ewo+ICsgICAgICAgICAgICAgICBpZiAoY291bnQrKyA8IG1heCAtIDEpCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdEUgIik7Cj4gKyAgICAgICAgICAg ICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcnE7Cj4gKyAgICAgICB9 Cj4gKyAgICAgICBpZiAobGFzdCkgewo+ICsgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXgp IHsKPiArICAgICAgICAgICAgICAgICAgICAgICBkcm1fcHJpbnRmKG0sCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiXHRcdC4uLnNraXBwaW5nICVkIGV4ZWN1dGluZyByZXF1 ZXN0cy4uLlxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50IC0g bWF4KTsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICBzaG93X3JlcXVlc3Qo bSwgbGFzdCwgIlx0XHRFICIpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGxhc3QgPSBOVUxM Owo+ICsgICAgICAgY291bnQgPSAwOwo+ICsgICAgICAgaWYgKGV4ZWNsaXN0cy0+cXVldWVfcHJp b3JpdHlfaGludCAhPSBJTlRfTUlOKQo+ICsgICAgICAgICAgICAgICBkcm1fcHJpbnRmKG0sICJc dFx0UXVldWUgcHJpb3JpdHkgaGludDogJWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50KTsKPiArICAgICAgIGZvciAocmIgPSBy Yl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkg ewo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHJiX2VudHJ5KHJi LCB0eXBlb2YoKnApLCBub2RlKTsKPiArICAgICAgICAgICAgICAgaW50IGk7Cj4gKwo+ICsgICAg ICAgICAgICAgICBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0KHJxLCBwLCBpKSB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGNvdW50KysgPCBtYXggLSAxKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdFEgIik7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGFzdCA9IHJxOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9Cj4gKyAgICAgICBpZiAo bGFzdCkgewo+ICsgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXgpIHsKPiArICAgICAgICAg ICAgICAgICAgICAgICBkcm1fcHJpbnRmKG0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiXHRcdC4uLnNraXBwaW5nICVkIHF1ZXVlZCByZXF1ZXN0cy4uLlxuIiwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50IC0gbWF4KTsKPiArICAgICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICAgICBzaG93X3JlcXVlc3QobSwgbGFzdCwgIlx0XHRRICIp Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGxhc3QgPSBOVUxMOwo+ICsgICAgICAgY291bnQg PSAwOwo+ICsgICAgICAgZm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0 dWFsKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKPiArICAgICAgICAgICAgICAgc3RydWN0IGlu dGVsX3ZpcnR1YWxfZW5naW5lICp2ZSA9Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmJfZW50 cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7Cj4gKyAgICAgICAgICAg ICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsKPiAr Cj4gKyAgICAgICAgICAgICAgIGlmIChycSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm IChjb3VudCsrIDwgbWF4IC0gMSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo b3dfcmVxdWVzdChtLCBycSwgIlx0XHRWICIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGVs c2UKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBycTsKPiArICAgICAg ICAgICAgICAgfQo+ICsgICAgICAgfQo+ICsgICAgICAgaWYgKGxhc3QpIHsKPiArICAgICAgICAg ICAgICAgaWYgKGNvdW50ID4gbWF4KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZHJtX3By aW50ZihtLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx0XHQuLi5za2lw cGluZyAlZCB2aXJ0dWFsIHJlcXVlc3RzLi4uXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY291bnQgLSBtYXgpOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAg ICAgICAgIHNob3dfcmVxdWVzdChtLCBsYXN0LCAiXHRcdFYgIik7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxh Z3MpOwo+ICt9Cj4gKwo+ICtib29sCj4gK2ludGVsX2VuZ2luZV9pbl9leGVjbGlzdHNfc3VibWlz c2lvbl9tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsg ICAgICAgcmV0dXJuIGVuZ2luZS0+c2V0X2RlZmF1bHRfc3VibWlzc2lvbiA9PQo+ICsgICAgICAg ICAgICAgIGludGVsX2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOwo+ICt9CgpUaGUg YnJlYWRjcnVtYiBzdWJtaXNzaW9uIGNvZGUgaXMgc3BlY2lhbGlzZWQgdG8gZXhlY2xpc3RzIGFu ZCBzaG91bGQKbm90IGJlIHNoYXJlZCAobGVhdmVzIGVtaXRfZmx1c2gsIGVtaXRfYmJfc3RhcnQg YXMgY29tbW9uCmdlbjhfc3VibWlzc2lvbi5jKS4gVGhlIHJlc2V0IGNvZGUgaXMgc3BlY2lhbGlz ZWQgdG8gZXhlY2xpc3RzIGFuZCBzaG91bGQgbm90CmJlIHNoYXJlZC4gVGhlIHZpcnR1YWwgZW5n aW5lIGlzIHNwZWNpYWxpc2VkIHRvIGV4ZWNsaXN0cyBhbmQgc2hvdWxkIG5vdApiZSBzaGFyZWQu IEV2ZW4gc3VibWl0X3JlcXVlc3Qgc2hvdWxkIGJlIGRpc3RpbmN0IGJldHdlZW4gZ3VjIGFuZApl eGVjbGlzdHMsIGVzcGVjaWFsbHkgcmVxdWVzdF9hbGxvYyAod2hpY2ggeW91IG1heSBsaWtlIHRv IHB1dCBvbiB0aGUKY29udGV4dF9vcHMgcmF0aGVyIHRoYW4gZW5naW5lKQotQ2hyaXMKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==