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=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 08C42C433FE for ; Wed, 9 Dec 2020 11:03:41 +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 7F389225AC for ; Wed, 9 Dec 2020 11:03:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F389225AC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 B08B56E9F0; Wed, 9 Dec 2020 11:03:39 +0000 (UTC) Received: from mail-ot1-x344.google.com (mail-ot1-x344.google.com [IPv6:2607:f8b0:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id B31D86E9EC for ; Wed, 9 Dec 2020 11:03:37 +0000 (UTC) Received: by mail-ot1-x344.google.com with SMTP id j12so920363ota.7 for ; Wed, 09 Dec 2020 03:03:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sPWIvVKbqcferkSKtvgvAGq1TzeQM5/qUKoAqQnDV2U=; b=aXCZze9o6fX59/ROzZwch2xHOeJjGp+AMOUCb9hGvOCzcic40qbbjlY46SWlELzple nemKP4ucl0BHgHld7vsKbPsg2MsvBC6WmI7TZhNlxkWTacu1+vcuHF1/xEjQBa55JpcX VnBUccaAXadr6nH3tJWeeGuCtnMK86rIndS08= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sPWIvVKbqcferkSKtvgvAGq1TzeQM5/qUKoAqQnDV2U=; b=PWFIgqKAobqPVkanMvtROD3ymkp2hCSuf+yXI/laEkDEeMxAWyy9cCyMiR6q/fVgUC ZK+K4l261P30QAQhHkA53vKj0hbLxop8FkvJXtrJiIOQqlNpZvoe0wL+UAAiwOxXlsuY 33OCH0pRjMns1Q1JVMKm1FKk8ZWWlT4URbAyrHgPNzyck2wIKhh+ijYMGj+b+jrlxSVG IBSEKGT4ghOGW/I/9Wc+XgpfmCBu6kozrW2H9x5Bcg+pYCiguGOAVlR9cWUKtRCQCf9H G0PSDS9l8vQLiJohx6P+wXkmCF6COcSau6IY/O4t1l4jmxw/sio0f98nyXt0Nfss93RU ljtA== X-Gm-Message-State: AOAM532EmYbOLxPrBwlPUj3DZfUVdWcVsG2nwkZpJYKvwxuvz9BoIdop dq+fMgiKL6uCyTlEevvKjiHg9rrQdxV09pNcQXzFwQ== X-Google-Smtp-Source: ABdhPJzhfqIAftg0e8QRs6XyNyuzAKSNNuPLd8I2NfcvJG5aALdUvTYjOkCStf8K7A9V5oQa3TCxSG1imixKqwn2hM0= X-Received: by 2002:a9d:4e08:: with SMTP id p8mr1213310otf.188.1607511816378; Wed, 09 Dec 2020 03:03:36 -0800 (PST) MIME-Version: 1.0 References: <20201209042144.2281-1-airlied@gmail.com> <20201209042144.2281-3-airlied@gmail.com> In-Reply-To: <20201209042144.2281-3-airlied@gmail.com> From: Daniel Vetter Date: Wed, 9 Dec 2020 12:03:25 +0100 Message-ID: To: Dave Airlie Subject: Re: [Intel-gfx] [PATCH 2/4] drm/i915: refactor some crtc code out of intel display. 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: , Cc: intel-gfx Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gV2VkLCBEZWMgOSwgMjAyMCBhdCA1OjIxIEFNIERhdmUgQWlybGllIDxhaXJsaWVkQGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+ Cj4gVGhlcmUgbWF5IGJlIG1vcmUgY3J0YyBjb2RlIHRoYXQgY2FuIGJlIHB1bGxlZCBvdXQsIGJ1 dCB0aGlzCj4gaXMgYSBnb29kIHN0YXJ0Lgo+Cj4gUkZDOiBtYXliZSBjYWxsIHRoZSBuZXcgZmls ZSBzb21ldGhpbmcgZGlmZmVyZW50CgpJIHRoaW5rIHRoZSBvbmx5IHByb2JsZW0gaXMgdGhhdCBp dCBhbHNvIGNvbnRhaW5zIGEgYnVuY2ggb2YgcGxhbmUKc3R1ZmYuIFdoaWNoIGlzIHNwbGl0IHVw IGluIGFsbCBraW5kcyBvZiBmdW5ueSB3YXlzLiBJIHRoaW5rIGEgZ29vZAp3YXkgdG8gcmVzcGxp dCB0aGUgcGxhbmUgc3R1ZmYgd291bGQgYmUKCmludGVsX3BsYW5lLmM6IGNyb3NzIHBsYXRmb3Jt IHBsYW5lIHN0dWZmCmludGVsX2N1cnNvci5jOiBsZWdhY3kgY3Vyc29yIHBsYW5lCmludGVsX2k5 eHhfcGxhbmUuYzogcHJlLWdlbjkgcHJpbWFyeSBwbGFuZQppbnRlbF9zcHJpdGVfcGxhbmUuYzog cHJlLWdlbjkgc3ByaXRlIHBsYW5lcwppbnRlbF9nZW45X3BsYW5lOiBnZW45KyB1bml2ZXJzYWwg cGxhbmVzCgphdG0gdGhlc2UgYXJlIHdpbGRseSBtaXhlZCBhbGwgb3ZlciBiZXR3ZWVuIGludGVs X3Nwcml0ZS5jLAppbnRlbF9kaXNwbGF5LmMsIGludGVsX2F0b21pY19wbGFuZS5jIGFuZCBtYXli ZSBzb21lIG90aGVyIHBsYWNlcyBJCm1pc3NlZC4KCkFsc28gdGhpcyBpc24ndCBhbGwgdGhlIGNy dGMgY29kZSwgdGhlcmUncyBpbnRlbF9waXBlX3VwZGF0ZV9zdGFydC9lbmQKd2hpY2ggc2hvdWxk IGFsc28gYmUgaGVyZSwgcGx1cyBwcm9iYWJseSBpbnRlbF91c2Vjc190b19zY2FubGluZXMgdG9v LgoKU2luY2UgaXQncyBzdWNoIGEgbWVzcyBtb3Zpbmcgc29tZSBvZiB0aGUgcGxhbmUgc3R1ZmYg d2l0aCB0aGUgY3J0Ywpkb2Vzbid0IHNlZW0gdG9vIGJhZCBzaW5jZSBpdCdzIG5vdCByZWFsbHkg bWFraW5nIGFueXRoaW5nIHdvcnNlLiBCdXQKYXQgbGVhc3QgYWxsIHRoZSBjcnRjIHN0dWZmIHNo b3VsZCBiZSBjb2xsZWN0ZWQgaGVyZS4KLURhbmllbAoKCj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBB aXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2NydGMuYyAgICB8IDk1MSArKysrKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIHwgOTMyIC0tLS0tLS0tLS0t LS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCB8 ICAgNyArCj4gIDQgZmlsZXMgY2hhbmdlZCwgOTU5IGluc2VydGlvbnMoKyksIDkzMiBkZWxldGlv bnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfY3J0Yy5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDk4YTM1YjkzOTA1Mi4u ZmZlYzI1NzcwMmFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMTk2LDYgKzE5Niw3 IEBAIGk5MTUteSArPSBcCj4gICAgICAgICBkaXNwbGF5L2ludGVsX2NvbG9yLm8gXAo+ICAgICAg ICAgZGlzcGxheS9pbnRlbF9jb21ib19waHkubyBcCj4gICAgICAgICBkaXNwbGF5L2ludGVsX2Nv bm5lY3Rvci5vIFwKPiArICAgICAgIGRpc3BsYXkvaW50ZWxfY3J0Yy5vIFwKPiAgICAgICAgIGRp c3BsYXkvaW50ZWxfY3NyLm8gXAo+ICAgICAgICAgZGlzcGxheS9pbnRlbF9jdXJzb3IubyBcCj4g ICAgICAgICBkaXNwbGF5L2ludGVsX2Rpc3BsYXkubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNzVhNzlmMThjZWUyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCj4gQEAgLTAsMCArMSw5NTEgQEAKPiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAy MCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fcGxhbmUuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKwo+ ICsjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9hdG9taWNfcGxh bmUuaCIKPiArI2luY2x1ZGUgImludGVsX2NvbG9yLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9kaXNw bGF5X2RlYnVnZnMuaCIKPiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKPiArI2lu Y2x1ZGUgImludGVsX3BpcGVfY3JjLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9zcHJpdGUuaCIKPiAr Cj4gKy8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuIDw9IDMgKi8KPiArc3RhdGljIGNv bnN0IHUzMiBpOHh4X3ByaW1hcnlfZm9ybWF0c1tdID0gewo+ICsgICAgICAgRFJNX0ZPUk1BVF9D OCwKPiArICAgICAgIERSTV9GT1JNQVRfWFJHQjE1NTUsCj4gKyAgICAgICBEUk1fRk9STUFUX1JH QjU2NSwKPiArICAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gK307Cj4gKwo+ICsvKiBQcmlt YXJ5IHBsYW5lIGZvcm1hdHMgZm9yIGl2YiAobm8gZnAxNiBkdWUgdG8gaHcgaXNzdWUpICovCj4g K3N0YXRpYyBjb25zdCB1MzIgaXZiX3ByaW1hcnlfZm9ybWF0c1tdID0gewo+ICsgICAgICAgRFJN X0ZPUk1BVF9DOCwKPiArICAgICAgIERSTV9GT1JNQVRfUkdCNTY1LAo+ICsgICAgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPiArICAgICAgIERSTV9GT1JNQVRfWEJHUjg4ODgsCj4gKyAgICAgICBE Uk1fRk9STUFUX1hSR0IyMTAxMDEwLAo+ICsgICAgICAgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwK PiArfTsKPiArCj4gKy8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuID49IDQsIGV4Y2Vw dCBpdmIgKi8KPiArc3RhdGljIGNvbnN0IHUzMiBpOTY1X3ByaW1hcnlfZm9ybWF0c1tdID0gewo+ ICsgICAgICAgRFJNX0ZPUk1BVF9DOCwKPiArICAgICAgIERSTV9GT1JNQVRfUkdCNTY1LAo+ICsg ICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArICAgICAgIERSTV9GT1JNQVRfWEJHUjg4ODgs Cj4gKyAgICAgICBEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAo+ICsgICAgICAgRFJNX0ZPUk1BVF9Y QkdSMjEwMTAxMCwKPiArICAgICAgIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKPiArfTsKPiAr Cj4gKy8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3Igdmx2L2NodiAqLwo+ICtzdGF0aWMgY29u c3QgdTMyIHZsdl9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsKPiArICAgICAgIERSTV9GT1JNQVRfQzgs Cj4gKyAgICAgICBEUk1fRk9STUFUX1JHQjU2NSwKPiArICAgICAgIERSTV9GT1JNQVRfWFJHQjg4 ODgsCj4gKyAgICAgICBEUk1fRk9STUFUX1hCR1I4ODg4LAo+ICsgICAgICAgRFJNX0ZPUk1BVF9B UkdCODg4OCwKPiArICAgICAgIERSTV9GT1JNQVRfQUJHUjg4ODgsCj4gKyAgICAgICBEUk1fRk9S TUFUX1hSR0IyMTAxMDEwLAo+ICsgICAgICAgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKPiArICAg ICAgIERSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCj4gKyAgICAgICBEUk1fRk9STUFUX0FCR1IyMTAx MDEwLAo+ICsgICAgICAgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IHU2NCBpOXh4X2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsKPiArICAgICAgIEk5MTVf Rk9STUFUX01PRF9YX1RJTEVELAo+ICsgICAgICAgRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ICsg ICAgICAgRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+ICt9Owo+ICsKPiArc3RhdGljIGJvb2wgaTh4 eF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZm9ybWF0LCB1 NjQgbW9kaWZpZXIpCj4gK3sKPiArICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKPiArICAgICAg IGNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgo+ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWF9USUxFRDoKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0Ogo+ ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAg c3dpdGNoIChmb3JtYXQpIHsKPiArICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9DODoKPiArICAgICAg IGNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWFJHQjE1 NTU6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKyAgICAgICAgICAgICAg IHJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKPiArICAgICAgICAg ICAgICAgICAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKPiArICAg ICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAgIH0K PiArfQo+ICsKPiArc3RhdGljIGJvb2wgaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChz dHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4gK3sKPiArICAgICAgIHN3 aXRjaCAobW9kaWZpZXIpIHsKPiArICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgo+ ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKPiArICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKPiArICAgICAgIGNh c2UgRFJNX0ZPUk1BVF9DODoKPiArICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKyAg ICAgICBjYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRf WEJHUjg4ODg6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gKyAgICAgICBj YXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWFJHQjIx MDEwMTA6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Cj4gKyAgICAgICBj YXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfQUJH UjIxMDEwMTA6Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKPiArICAg ICAgICAgICAgICAgcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAo+ ICsgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJ TEVEOwo+ICsgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc19mYmMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSkKPiArewo+ICsgICAgICAgaWYg KCFIQVNfRkJDKGRldl9wcml2KSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsK PiArICAgICAgIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3By aXYpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BOyAvKiB0 aWVkIHRvIHBpcGUgQSAqLwo+ICsgICAgICAgZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2 KSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQSB8fCBpOXh4 X3BsYW5lID09IFBMQU5FX0IgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICBpOXh4X3BsYW5l ID09IFBMQU5FX0M7Cj4gKyAgICAgICBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQp Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0EgfHwgaTl4eF9w bGFuZSA9PSBQTEFORV9COwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICByZXR1cm4g aTl4eF9wbGFuZSA9PSBQTEFORV9BOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhc3NlcnRfdmJs YW5rX2Rpc2FibGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsgICAgICAgaWYgKEk5 MTVfU1RBVEVfV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApKQo+ICsgICAg ICAgICAgICAgICBkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOwo+ICt9Cj4gKwo+ICt1MzIgaW50 ZWxfY3J0Y19nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gK3sK PiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiArICAg ICAgIHN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1tkcm1fY3J0 Y19pbmRleCgmY3J0Yy0+YmFzZSldOwo+ICsKPiArICAgICAgIGlmICghdmJsYW5rLT5tYXhfdmJs YW5rX2NvdW50KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gKHUzMilkcm1fY3J0Y19hY2N1cmF0 ZV92YmxhbmtfY291bnQoJmNydGMtPmJhc2UpOwo+ICsKPiArICAgICAgIHJldHVybiBjcnRjLT5i YXNlLmZ1bmNzLT5nZXRfdmJsYW5rX2NvdW50ZXIoJmNydGMtPmJhc2UpOwo+ICt9Cj4gKwo+ICt1 MzIgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKPiArICAgICAg IHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBp LmNydGMpOwo+ICsgICAgICAgdTMyIG1vZGVfZmxhZ3MgPSBjcnRjLT5tb2RlX2ZsYWdzOwo+ICsK PiArICAgICAgIC8qCj4gKyAgICAgICAgKiBGcm9tIEdlbiAxMSwgSW4gY2FzZSBvZiBkc2kgY21k IG1vZGUsIGZyYW1lIGNvdW50ZXIgd291bGRudAo+ICsgICAgICAgICogaGF2ZSB1cGRhdGVkIGF0 IHRoZSBiZWdpbm5pbmcgb2YgVEUsIGlmIHdlIHdhbnQgdG8gdXNlCj4gKyAgICAgICAgKiB0aGUg aHcgY291bnRlciwgdGhlbiB3ZSB3b3VsZCBmaW5kIGl0IHVwZGF0ZWQgaW4gb25seQo+ICsgICAg ICAgICogdGhlIG5leHQgVEUsIGhlbmNlIHN3aXRjaGluZyB0byBzdyBjb3VudGVyLgo+ICsgICAg ICAgICovCj4gKyAgICAgICBpZiAobW9kZV9mbGFncyAmIChJOTE1X01PREVfRkxBR19EU0lfVVNF X1RFMCB8IEk5MTVfTU9ERV9GTEFHX0RTSV9VU0VfVEUxKSkKPiArICAgICAgICAgICAgICAgcmV0 dXJuIDA7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIE9uIGk5NjVnbSB0aGUgaGFyZHdh cmUgZnJhbWUgY291bnRlciByZWFkcwo+ICsgICAgICAgICogemVybyB3aGVuIHRoZSBUViBlbmNv ZGVyIGlzIGVuYWJsZWQgOigKPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKElTX0k5NjVHTShk ZXZfcHJpdikgJiYKPiArICAgICAgICAgICAoY3J0Y19zdGF0ZS0+b3V0cHV0X3R5cGVzICYgQklU KElOVEVMX09VVFBVVF9UVk9VVCkpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArCj4g KyAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikp Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAweGZmZmZmZmZmOyAvKiBmdWxsIDMyIGJpdCBjb3Vu dGVyICovCj4gKyAgICAgICBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDMpCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAweGZmZmZmZjsgLyogb25seSAyNCBiaXRzIG9mIGZyYW1lIGNv dW50ICovCj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBHZW4y IGRvZXNuJ3QgaGF2ZSBhIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIgKi8KPiArfQo+ICsKPiArdm9p ZCBpbnRlbF9jcnRjX3ZibGFua19vbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRl bF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gKwo+ICsgICAgICAgYXNzZXJ0X3ZibGFu a19kaXNhYmxlZCgmY3J0Yy0+YmFzZSk7Cj4gKyAgICAgICBkcm1fY3J0Y19zZXRfbWF4X3ZibGFu a19jb3VudCgmY3J0Yy0+YmFzZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludGVsX2NydGNfbWF4X3ZibGFua19jb3VudChjcnRjX3N0YXRlKSk7Cj4gKyAgICAgICBk cm1fY3J0Y192Ymxhbmtfb24oJmNydGMtPmJhc2UpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2Ny dGNfdmJsYW5rX29mZihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkK PiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNy dGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gKwo+ICsgICAgICAgZHJtX2NydGNfdmJsYW5rX29mZigm Y3J0Yy0+YmFzZSk7Cj4gKyAgICAgICBhc3NlcnRfdmJsYW5rX2Rpc2FibGVkKCZjcnRjLT5iYXNl KTsKPiArfQo+ICsKPiArc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NydGNfc3RhdGVf YWxsb2Moc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsKPiArICAgICAgIGNydGNfc3RhdGUgPSBrbWFs bG9jKHNpemVvZigqY3J0Y19zdGF0ZSksIEdGUF9LRVJORUwpOwo+ICsKPiArICAgICAgIGlmIChj cnRjX3N0YXRlKQo+ICsgICAgICAgICAgICAgICBpbnRlbF9jcnRjX3N0YXRlX3Jlc2V0KGNydGNf c3RhdGUsIGNydGMpOwo+ICsKPiArICAgICAgIHJldHVybiBjcnRjX3N0YXRlOwo+ICt9Cj4gKwo+ ICt2b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKQo+ICt7Cj4gKyAgICAgICBtZW1zZXQoY3J0Y19zdGF0ZSwgMCwgc2l6ZW9mKCpjcnRj X3N0YXRlKSk7Cj4gKwo+ICsgICAgICAgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX3N0YXRlX3Jl c2V0KCZjcnRjX3N0YXRlLT51YXBpLCAmY3J0Yy0+YmFzZSk7Cj4gKwo+ICsgICAgICAgY3J0Y19z dGF0ZS0+Y3B1X3RyYW5zY29kZXIgPSBJTlZBTElEX1RSQU5TQ09ERVI7Cj4gKyAgICAgICBjcnRj X3N0YXRlLT5tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKPiArICAgICAg IGNydGNfc3RhdGUtPmhzd193b3JrYXJvdW5kX3BpcGUgPSBJTlZBTElEX1BJUEU7Cj4gKyAgICAg ICBjcnRjX3N0YXRlLT5vdXRwdXRfZm9ybWF0ID0gSU5URUxfT1VUUFVUX0ZPUk1BVF9JTlZBTElE Owo+ICsgICAgICAgY3J0Y19zdGF0ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcl9pZCA9IC0xOwo+ICsg ICAgICAgY3J0Y19zdGF0ZS0+bXN0X21hc3Rlcl90cmFuc2NvZGVyID0gSU5WQUxJRF9UUkFOU0NP REVSOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc193aW5kb3dpbmcoc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSkKPiArewo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ICsgICAgICAgZW51 bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKPiArCj4gKyAg ICAgICBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKyAgICAgICAgICAgICAgIHJldHVy biBpOXh4X3BsYW5lID09IFBMQU5FX0I7Cj4gKyAgICAgICBlbHNlIGlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKPiArICAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwo+ICsgICAgICAgZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA0KSkKPiArICAgICAg ICAgICAgICAgcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQzsKPiArICAgICAgIGVsc2UKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQiB8fAo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGk5eHhfcGxhbmUgPT0gUExBTkVfQzsKPiArfQo+ICsKPiArc3RhdGlj IHUzMiBpOXh4X3BsYW5lX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9Cj4gKyAgICAgICAgICAgICAgIHRvX2k5MTUocGxhbmVfc3RhdGUtPnVh cGkucGxhbmUtPmRldik7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKPiArICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbiA9 IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKPiArICAgICAgIHUzMiBkc3BjbnRyOwo+ICsKPiAr ICAgICAgIGRzcGNudHIgPSBESVNQTEFZX1BMQU5FX0VOQUJMRTsKPiArCj4gKyAgICAgICBpZiAo SVNfRzRYKGRldl9wcml2KSB8fCBJU19HRU4oZGV2X3ByaXYsIDUpIHx8Cj4gKyAgICAgICAgICAg SVNfR0VOKGRldl9wcml2LCA2KSB8fCBJU19JVllCUklER0UoZGV2X3ByaXYpKQo+ICsgICAgICAg ICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiArCj4g KyAgICAgICBzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewo+ICsgICAgICAgY2FzZSBEUk1f Rk9STUFUX0M4Ogo+ICsgICAgICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV84QlBQOwo+ ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1 NToKPiArICAgICAgICAgICAgICAgZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDU1NTsKPiArICAg ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Cj4g KyAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5FX0JHUkE1NTU7Cj4gKyAgICAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArICAgICAg ICAgICAgICAgZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDU2NTsKPiArICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKyAgICAgICAgICAg ICAgIGRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg4ODg7Cj4gKyAgICAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ICsgICAgICAgICAgICAgICBk c3BjbnRyIHw9IERJU1BQTEFORV9SR0JYODg4Owo+ICsgICAgICAgICAgICAgICBicmVhazsKPiAr ICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiArICAgICAgICAgICAgICAgZHNwY250 ciB8PSBESVNQUExBTkVfQkdSQTg4ODsKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICBjYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4gKyAgICAgICAgICAgICAgIGRzcGNudHIgfD0g RElTUFBMQU5FX1JHQkE4ODg7Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2Fz ZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+ICsgICAgICAgICAgICAgICBkc3BjbnRyIHw9IERJ U1BQTEFORV9CR1JYMTAxMDEwOwo+ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgIGNh c2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiArICAgICAgICAgICAgICAgZHNwY250ciB8PSBE SVNQUExBTkVfUkdCWDEwMTAxMDsKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBj YXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Cj4gKyAgICAgICAgICAgICAgIGRzcGNudHIgfD0g RElTUFBMQU5FX0JHUkExMDEwMTA7Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAg Y2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ICsgICAgICAgICAgICAgICBkc3BjbnRyIHw9 IERJU1BQTEFORV9SR0JBMTAxMDEwOwo+ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAg IGNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgo+ICsgICAgICAgICAgICAgICBkc3BjbnRy IHw9IERJU1BQTEFORV9SR0JYMTYxNjE2Owo+ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAg ICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgIE1JU1NJTkdfQ0FTRShmYi0+Zm9ybWF0LT5m b3JtYXQpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgIH0KPiArCj4gKyAg ICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0ICYmCj4gKyAgICAgICAgICAgZmItPm1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQo+ICsgICAgICAgICAgICAgICBkc3Bj bnRyIHw9IERJU1BQTEFORV9USUxFRDsKPiArCj4gKyAgICAgICBpZiAocm90YXRpb24gJiBEUk1f TU9ERV9ST1RBVEVfMTgwKQo+ICsgICAgICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9S T1RBVEVfMTgwOwo+ICsKPiArICAgICAgIGlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1Rf WCkKPiArICAgICAgICAgICAgICAgZHNwY250ciB8PSBESVNQUExBTkVfTUlSUk9SOwo+ICsKPiAr ICAgICAgIHJldHVybiBkc3BjbnRyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2k5eHhfcGxh bmVfY2hlY2soc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKyAgICAgICAg ICAgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKyAg ICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3Rh dGUtPnVhcGkucGxhbmUpOwo+ICsgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICByZXQgPSBj aHZfcGxhbmVfY2hlY2tfcm90YXRpb24ocGxhbmVfc3RhdGUpOwo+ICsgICAgICAgaWYgKHJldCkK PiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICByZXQgPSBpbnRlbF9h dG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX1BMQU5FX0hF TFBFUl9OT19TQ0FMSU5HLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOXh4X3BsYW5lX2hhc193aW5kb3dpbmco cGxhbmUpKTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4gKwo+ICsgICAgICAgcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRl KTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ ICsgICAgICAgaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+ICsgICAgICAgICAgICAg ICByZXR1cm4gMDsKPiArCj4gKyAgICAgICByZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29v cmRpbmF0ZXMocGxhbmVfc3RhdGUpOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICBwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9wbGFu ZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGk5eHhfcGxhbmVfY3RsX2NydGMoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+ICsgICAg ICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNl LmRldik7Cj4gKyAgICAgICB1MzIgZHNwY250ciA9IDA7Cj4gKwo+ICsgICAgICAgaWYgKGNydGNf c3RhdGUtPmdhbW1hX2VuYWJsZSkKPiArICAgICAgICAgICAgICAgZHNwY250ciB8PSBESVNQUExB TkVfR0FNTUFfRU5BQkxFOwo+ICsKPiArICAgICAgIGlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxl KQo+ICsgICAgICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9QSVBFX0NTQ19FTkFCTEU7 Cj4gKwo+ICsgICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1KQo+ICsgICAgICAgICAg ICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRShjcnRjLT5waXBlKTsKPiArCj4gKyAg ICAgICByZXR1cm4gZHNwY250cjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9y YXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm51 bSwgdW5zaWduZWQgaW50ICpkZW4pCj4gK3sKPiArICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsgICAgICAgdW5zaWduZWQgaW50 IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICog ZzR4IGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBjYW4ndCBleGNlZWQgODAlCj4gKyAgICAg ICAgKiBvZiBjZGNsayB3aGVuIHRoZSBzcHJpdGUgcGxhbmUgaXMgZW5hYmxlZCBvbiB0aGUKPiAr ICAgICAgICAqIHNhbWUgcGlwZS4gaWxrL3NuYiBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUg aXMKPiArICAgICAgICAqIG5ldmVyIGFsbG93ZWQgdG8gZXhjZWVkIDgwJSBvZiBjZGNsay4gTGV0 J3MganVzdCBnbwo+ICsgICAgICAgICogd2l0aCB0aGUgaWxrL3NuYiBsaW1pdCBhbHdheXMuCj4g KyAgICAgICAgKi8KPiArICAgICAgIGlmIChjcHAgPT0gOCkgewo+ICsgICAgICAgICAgICAgICAq bnVtID0gMTA7Cj4gKyAgICAgICAgICAgICAgICpkZW4gPSA4Owo+ICsgICAgICAgfSBlbHNlIHsK PiArICAgICAgICAgICAgICAgKm51bSA9IDE7Cj4gKyAgICAgICAgICAgICAgICpkZW4gPSAxOwo+ ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5eHhfcGxhbmVfbWluX2NkY2xrKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKPiArewo+ICsgICAgICAgdW5zaWduZWQgaW50IHBpeGVsX3JhdGU7Cj4gKyAgICAgICB1 bnNpZ25lZCBpbnQgbnVtLCBkZW47Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIE5vdGUg dGhhdCBjcnRjX3N0YXRlLT5waXhlbF9yYXRlIGFjY291bnRzIGZvciBib3RoCj4gKyAgICAgICAg KiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBwYW5lbCBmaXR0ZXIgZG93bnNjYWxpbmcgZmFjdG9y cy4KPiArICAgICAgICAqIFByZS1IU1cgYnNwZWMgdGVsbHMgdXMgdG8gb25seSBjb25zaWRlciB0 aGUgaG9yaXpvbnRhbAo+ICsgICAgICAgICogZG93bnNjYWxpbmcgZmFjdG9yIGhlcmUuIFdlIGln bm9yZSB0aGF0IGFuZCBqdXN0IGNvbnNpZGVyCj4gKyAgICAgICAgKiBib3RoIGZvciBzaW1wbGlj aXR5Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBwaXhlbF9yYXRlID0gY3J0Y19zdGF0ZS0+cGl4 ZWxfcmF0ZTsKPiArCj4gKyAgICAgICBpOXh4X3BsYW5lX3JhdGlvKGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlLCAmbnVtLCAmZGVuKTsKPiArCj4gKyAgICAgICAvKiB0d28gcGl4ZWxzIHBlciBjbG9j ayB3aXRoIGRvdWJsZSB3aWRlIHBpcGUgKi8KPiArICAgICAgIGlmIChjcnRjX3N0YXRlLT5kb3Vi bGVfd2lkZSkKPiArICAgICAgICAgICAgICAgZGVuICo9IDI7Cj4gKwo+ICsgICAgICAgcmV0dXJu IERJVl9ST1VORF9VUChwaXhlbF9yYXRlICogbnVtLCBkZW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpOXh4X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArICAg ICAgIGVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7Cj4g KyAgICAgICB1MzIgbGluZWFyX29mZnNldDsKPiArICAgICAgIGludCB4ID0gcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLng7Cj4gKyAgICAgICBpbnQgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVswXS55Owo+ICsgICAgICAgaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54 MTsKPiArICAgICAgIGludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Cj4gKyAg ICAgICBpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7 Cj4gKyAgICAgICBpbnQgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArICAgICAgIHUzMiBk c3BhZGRyX29mZnNldDsKPiArICAgICAgIHUzMiBkc3BjbnRyOwo+ICsKPiArICAgICAgIGRzcGNu dHIgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwgaTl4eF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsK PiArCj4gKyAgICAgICBsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHks IHBsYW5lX3N0YXRlLCAwKTsKPiArCj4gKyAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA0KQo+ICsgICAgICAgICAgICAgICBkc3BhZGRyX29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVswXS5vZmZzZXQ7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgIGRzcGFk ZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiArCj4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsgICAgICAgaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNUUklERShpOXh4X3BsYW5lKSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpOwo+ICsK PiArICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkgewo+ICsgICAgICAgICAgICAg ICAvKgo+ICsgICAgICAgICAgICAgICAgKiBQTEFORV9BIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBh IGZ1bGwgd2luZG93Cj4gKyAgICAgICAgICAgICAgICAqIGdlbmVyYXRvciBidXQgbGV0J3MgYXNz dW1lIHdlIHN0aWxsIG5lZWQgdG8KPiArICAgICAgICAgICAgICAgICogcHJvZ3JhbSB3aGF0ZXZl ciBpcyB0aGVyZS4KPiArICAgICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgICAgIGludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BQT1MoaTl4eF9wbGFuZSksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsKPiArICAgICAg ICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNJWkUoaTl4eF9wbGFuZSks Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY3J0Y19oIC0gMSkgPDwgMTYp IHwgKGNydGNfdyAtIDEpKTsKPiArICAgICAgIH0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7Cj4gKyAgICAgICAgICAgICAgIGludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNUE9TKGk5eHhfcGxhbmUpLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Cj4gKyAgICAg ICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNU0laRShpOXh4X3BsYW5l KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjcnRjX2ggLSAxKSA8PCAx NikgfCAoY3J0Y193IC0gMSkpOwo+ICsgICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUFJJTUNOU1RBTFBIQShpOXh4X3BsYW5lKSwgMCk7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJp dikpIHsKPiArICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUE9G RlNFVChpOXh4X3BsYW5lKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHkg PDwgMTYpIHwgeCk7Cj4gKyAgICAgICB9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkgewo+ICsgICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQTElO T0ZGKGk5eHhfcGxhbmUpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l YXJfb2Zmc2V0KTsKPiArICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IERTUFRJTEVPRkYoaTl4eF9wbGFuZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh5IDw8IDE2KSB8IHgpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qCj4gKyAgICAg ICAgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBwcmV2 aW91c2x5Cj4gKyAgICAgICAgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJs ZSBhdG9taWMgYnkgd3JpdGluZwo+ICsgICAgICAgICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVz dCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsK PiArICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gKyAgICAgICAgICAgICAg IGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUpLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFu ZV9zdGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAg ICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BBRERSKGk5eHhfcGxhbmUpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChw bGFuZV9zdGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7Cj4gKwo+ICsgICAgICAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ICsgICAgICAgZW51bSBp OXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKPiArICAgICAgIHVu c2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKyAgICAgICB1MzIgZHNwY250cjsKPiArCj4gKyAgICAg ICAvKgo+ICsgICAgICAgICogRFNQQ05UUiBwaXBlIGdhbW1hIGVuYWJsZSBvbiBnNHgrIGFuZCBw aXBlIGNzYwo+ICsgICAgICAgICogZW5hYmxlIG9uIGlsaysgYWZmZWN0IHRoZSBwaXBlIGJvdHRv bSBjb2xvciBhcwo+ICsgICAgICAgICogd2VsbCwgc28gd2UgbXVzdCBjb25maWd1cmUgdGhlbSBl dmVuIGlmIHRoZSBwbGFuZQo+ICsgICAgICAgICogaXMgZGlzYWJsZWQuCj4gKyAgICAgICAgKgo+ ICsgICAgICAgICogT24gcHJlLWc0eCB0aGVyZSBpcyBubyB3YXkgdG8gZ2FtbWEgY29ycmVjdCB0 aGUKPiArICAgICAgICAqIHBpcGUgYm90dG9tIGNvbG9yIGJ1dCB3ZSdsbCBrZWVwIG9uIGRvaW5n IHRoaXMKPiArICAgICAgICAqIGFueXdheSBzbyB0aGF0IHRoZSBjcnRjIHN0YXRlIHJlYWRvdXQg d29ya3MgY29ycmVjdGx5Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBkc3BjbnRyID0gaTl4eF9w bGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKPiArCj4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsgICAgICAgaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOwo+ICsg ICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiArICAgICAgICAgICAgICAgaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNVUkYoaTl4eF9wbGFuZSksIDApOwo+ICsgICAg ICAgZWxzZQo+ICsgICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ QUREUihpOXh4X3BsYW5lKSwgMCk7Cj4gKwo+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwaXBlICpwaXBlKQo+ICt7 Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBs YW5lLT5iYXNlLmRldik7Cj4gKyAgICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWlu IHBvd2VyX2RvbWFpbjsKPiArICAgICAgIGVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0g cGxhbmUtPmk5eHhfcGxhbmU7Cj4gKyAgICAgICBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAr ICAgICAgIGJvb2wgcmV0Owo+ICsgICAgICAgdTMyIHZhbDsKPiArCj4gKyAgICAgICAvKgo+ICsg ICAgICAgICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUgYmV0d2Vl biBwaXBlcywKPiArICAgICAgICAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi00 IHdoaWNoIGRvbid0IGhhdmUgYW55Cj4gKyAgICAgICAgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgo+ ICsgICAgICAgICovCj4gKyAgICAgICBwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShw bGFuZS0+cGlwZSk7Cj4gKyAgICAgICB3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRf aWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPiArICAgICAgIGlmICghd2FrZXJl ZikKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgIHZhbCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSkpOwo+ICsKPiArICAgICAg IHJldCA9IHZhbCAmIERJU1BMQVlfUExBTkVfRU5BQkxFOwo+ICsKPiArICAgICAgIGlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDUpCj4gKyAgICAgICAgICAgICAgICpwaXBlID0gcGxhbmUtPnBp cGU7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICpwaXBlID0gKHZhbCAmIERJU1BQ TEFORV9TRUxfUElQRV9NQVNLKSA+Pgo+ICsgICAgICAgICAgICAgICAgICAgICAgIERJU1BQTEFO RV9TRUxfUElQRV9TSElGVDsKPiArCj4gKyAgICAgICBpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChk ZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKPiArCj4gKyAgICAgICByZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICt1bnNpZ25lZCBpbnQKPiAraTl4eF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gKyAgICAgICAgICAgICAgICAgICAgIHUzMiBwaXhlbF9m b3JtYXQsIHU2NCBtb2RpZmllciwKPiArICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IHJvdGF0aW9uKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gKwo+ICsgICAgICAgaWYgKCFIQVNfR01D SChkZXZfcHJpdikpIHsKPiArICAgICAgICAgICAgICAgcmV0dXJuIDMyKjEwMjQ7Cj4gKyAgICAg ICB9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgewo+ICsgICAgICAgICAgICAg ICBpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIDE2KjEwMjQ7Cj4gKyAgICAgICAgICAgICAgIGVsc2UKPiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzIqMTAyNDsKPiArICAgICAgIH0gZWxzZSBpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAzKSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChtb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gOCoxMDI0Owo+ICsgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIDE2KjEwMjQ7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAg ICBpZiAocGxhbmUtPmk5eHhfcGxhbmUgPT0gUExBTkVfQykKPiArICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gNCoxMDI0Owo+ICsgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIDgqMTAyNDsKPiArICAgICAgIH0KPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTk2NV9wbGFuZV9mdW5jcyA9IHsKPiArICAg ICAgIC51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCj4gKyAg ICAgICAuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCj4g KyAgICAgICAuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCj4gKyAgICAgICAuYXRvbWlj X2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKPiArICAgICAg IC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4gKyAg ICAgICAuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOTY1X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9y dGVkLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTh4 eF9wbGFuZV9mdW5jcyA9IHsKPiArICAgICAgIC51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hl bHBlcl91cGRhdGVfcGxhbmUsCj4gKyAgICAgICAuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNf aGVscGVyX2Rpc2FibGVfcGxhbmUsCj4gKyAgICAgICAuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rl c3Ryb3ksCj4gKyAgICAgICAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1 cGxpY2F0ZV9zdGF0ZSwKPiArICAgICAgIC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUsCj4gKyAgICAgICAuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOHh4 X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBp bnRlbF9wbGFuZSAqCj4gK2ludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArICAgICAgIHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1 bmNzICpwbGFuZV9mdW5jczsKPiArICAgICAgIHVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRp b25zOwo+ICsgICAgICAgY29uc3QgdTMyICpmb3JtYXRzOwo+ICsgICAgICAgaW50IG51bV9mb3Jt YXRzOwo+ICsgICAgICAgaW50IHJldCwgenBvczsKPiArCj4gKyAgICAgICBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gc2tsX3VuaXZlcnNhbF9w bGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQTEFORV9QUklNQVJZKTsKPiArCj4gKyAgICAgICBwbGFu ZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7Cj4gKyAgICAgICBpZiAoSVNfRVJSKHBsYW5lKSkKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIHBsYW5lOwo+ICsKPiArICAgICAgIHBsYW5lLT5waXBlID0g cGlwZTsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBPbiBnZW4yLzMgb25seSBwbGFuZSBBIGNh biBkbyBGQkMsIGJ1dCB0aGUgcGFuZWwgZml0dGVyIGFuZCBMVkRTCj4gKyAgICAgICAgKiBwb3J0 IGlzIGhvb2tlZCB0byBwaXBlIEIuIEhlbmNlIHdlIHdhbnQgcGxhbmUgQSBmZWVkaW5nIHBpcGUg Qi4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKEhBU19GQkMoZGV2X3ByaXYpICYmIElOVEVM X0dFTihkZXZfcHJpdikgPCA0ICYmCj4gKyAgICAgICAgICAgSU5URUxfTlVNX1BJUEVTKGRldl9w cml2KSA9PSAyKQo+ICsgICAgICAgICAgICAgICBwbGFuZS0+aTl4eF9wbGFuZSA9IChlbnVtIGk5 eHhfcGxhbmVfaWQpICFwaXBlOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBwbGFu ZS0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7Cj4gKyAgICAgICBwbGFu ZS0+aWQgPSBQTEFORV9QUklNQVJZOwo+ICsgICAgICAgcGxhbmUtPmZyb250YnVmZmVyX2JpdCA9 IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIHBsYW5lLT5pZCk7Cj4gKwo+ICsgICAgICAgcGxhbmUt Pmhhc19mYmMgPSBpOXh4X3BsYW5lX2hhc19mYmMoZGV2X3ByaXYsIHBsYW5lLT5pOXh4X3BsYW5l KTsKPiArICAgICAgIGlmIChwbGFuZS0+aGFzX2ZiYykgewo+ICsgICAgICAgICAgICAgICBzdHJ1 Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKPiArCj4gKyAgICAgICAgICAgICAg IGZiYy0+cG9zc2libGVfZnJhbWVidWZmZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0 Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8 fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewo+ICsgICAgICAgICAgICAgICBmb3JtYXRzID0g dmx2X3ByaW1hcnlfZm9ybWF0czsKPiArICAgICAgICAgICAgICAgbnVtX2Zvcm1hdHMgPSBBUlJB WV9TSVpFKHZsdl9wcmltYXJ5X2Zvcm1hdHMpOwo+ICsgICAgICAgfSBlbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpIHsKPiArICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAg ICAgICogV2FGUDE2R2FtbWFFbmFibGluZzppdmIKPiArICAgICAgICAgICAgICAgICogIldvcmth cm91bmQgOiBXaGVuIHVzaW5nIHRoZSA2NC1iaXQgZm9ybWF0LCB0aGUgcGxhbmUKPiArICAgICAg ICAgICAgICAgICogIG91dHB1dCBvbiBlYWNoIGNvbG9yIGNoYW5uZWwgaGFzIG9uZSBxdWFydGVy IGFtcGxpdHVkZS4KPiArICAgICAgICAgICAgICAgICogIEl0IGNhbiBiZSBicm91Z2h0IHVwIHRv IGZ1bGwgYW1wbGl0dWRlIGJ5IHVzaW5nIHBpcGUKPiArICAgICAgICAgICAgICAgICogIGdhbW1h IGNvcnJlY3Rpb24gb3IgcGlwZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRvCj4gKyAgICAgICAg ICAgICAgICAqICBtdWx0aXBseSB0aGUgcGxhbmUgb3V0cHV0IGJ5IGZvdXIuIgo+ICsgICAgICAg ICAgICAgICAgKgo+ICsgICAgICAgICAgICAgICAgKiBUaGVyZSBpcyBubyBkZWRpY2F0ZWQgcGxh bmUgZ2FtbWEgZm9yIHRoZSBwcmltYXJ5IHBsYW5lLAo+ICsgICAgICAgICAgICAgICAgKiBhbmQg dXNpbmcgdGhlIHBpcGUgZ2FtbWEvY3NjIGNvdWxkIGNvbmZsaWN0IHdpdGggb3RoZXIKPiArICAg ICAgICAgICAgICAgICogcGxhbmVzLCBzbyB3ZSBjaG9vc2Ugbm90IHRvIGV4cG9zZSBmcDE2IG9u IElWQiBwcmltYXJ5Cj4gKyAgICAgICAgICAgICAgICAqIHBsYW5lcy4gSFNXIHByaW1hcnkgcGxh bmVzIG5vIGxvbmdlciBoYXZlIHRoaXMgcHJvYmxlbS4KPiArICAgICAgICAgICAgICAgICovCj4g KyAgICAgICAgICAgICAgIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgZm9ybWF0cyA9IGl2Yl9wcmltYXJ5X2Zvcm1hdHM7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGl2Yl9wcmltYXJ5X2Zvcm1h dHMpOwo+ICsgICAgICAgICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICAgICAgICAg IGZvcm1hdHMgPSBpOTY1X3ByaW1hcnlfZm9ybWF0czsKPiArICAgICAgICAgICAgICAgICAgICAg ICBudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaTk2NV9wcmltYXJ5X2Zvcm1hdHMpOwo+ICsgICAg ICAgICAgICAgICB9Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICBmb3JtYXRz ID0gaTh4eF9wcmltYXJ5X2Zvcm1hdHM7Cj4gKyAgICAgICAgICAgICAgIG51bV9mb3JtYXRzID0g QVJSQVlfU0laRShpOHh4X3ByaW1hcnlfZm9ybWF0cyk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAg ICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiArICAgICAgICAgICAgICAgcGxhbmVf ZnVuY3MgPSAmaTk2NV9wbGFuZV9mdW5jczsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAg ICAgcGxhbmVfZnVuY3MgPSAmaTh4eF9wbGFuZV9mdW5jczsKPiArCj4gKyAgICAgICBpZiAoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKyAgICAg ICAgICAgICAgIHBsYW5lLT5taW5fY2RjbGsgPSB2bHZfcGxhbmVfbWluX2NkY2xrOwo+ICsgICAg ICAgZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSB8fCBJU19IQVNXRUxMKGRldl9wcml2 KSkKPiArICAgICAgICAgICAgICAgcGxhbmUtPm1pbl9jZGNsayA9IGhzd19wbGFuZV9taW5fY2Rj bGs7Cj4gKyAgICAgICBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKQo+ICsgICAgICAg ICAgICAgICBwbGFuZS0+bWluX2NkY2xrID0gaXZiX3BsYW5lX21pbl9jZGNsazsKPiArICAgICAg IGVsc2UKPiArICAgICAgICAgICAgICAgcGxhbmUtPm1pbl9jZGNsayA9IGk5eHhfcGxhbmVfbWlu X2NkY2xrOwo+ICsKPiArICAgICAgIHBsYW5lLT5tYXhfc3RyaWRlID0gaTl4eF9wbGFuZV9tYXhf c3RyaWRlOwo+ICsgICAgICAgcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IGk5eHhfdXBkYXRlX3BsYW5l Owo+ICsgICAgICAgcGxhbmUtPmRpc2FibGVfcGxhbmUgPSBpOXh4X2Rpc2FibGVfcGxhbmU7Cj4g KyAgICAgICBwbGFuZS0+Z2V0X2h3X3N0YXRlID0gaTl4eF9wbGFuZV9nZXRfaHdfc3RhdGU7Cj4g KyAgICAgICBwbGFuZS0+Y2hlY2tfcGxhbmUgPSBpOXh4X3BsYW5lX2NoZWNrOwo+ICsKPiArICAg ICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKPiAr ICAgICAgICAgICAgICAgcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ ZHJtLCAmcGxhbmUtPmJhc2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCBwbGFuZV9mdW5jcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJwcmltYXJ5ICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKPiArICAgICAgIGVsc2UKPiAr ICAgICAgICAgICAgICAgcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ ZHJtLCAmcGxhbmUtPmJhc2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCBwbGFuZV9mdW5jcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJwbGFuZSAlYyIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwbGFuZV9uYW1lKHBsYW5lLT5pOXh4X3BsYW5lKSk7Cj4gKyAgICAgICBpZiAo cmV0KQo+ICsgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKwo+ICsgICAgICAgaWYgKElTX0NI RVJSWVZJRVcoZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9CKSB7Cj4gKyAgICAgICAgICAgICAg IHN1cHBvcnRlZF9yb3RhdGlvbnMgPQo+ICsgICAgICAgICAgICAgICAgICAgICAgIERSTV9NT0RF X1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCB8Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgRFJNX01PREVfUkVGTEVDVF9YOwo+ICsgICAgICAgfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpIHsKPiArICAgICAgICAgICAgICAgc3VwcG9ydGVkX3JvdGF0aW9ucyA9Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RB VEVfMTgwOwo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgc3VwcG9ydGVkX3Jv dGF0aW9ucyA9IERSTV9NT0RFX1JPVEFURV8wOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gKyAgICAgICAgICAgICAgIGRybV9wbGFuZV9j cmVhdGVfcm90YXRpb25fcHJvcGVydHkoJnBsYW5lLT5iYXNlLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9NT0RFX1JPVEFURV8wLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRl ZF9yb3RhdGlvbnMpOwo+ICsKPiArICAgICAgIHpwb3MgPSAwOwo+ICsgICAgICAgZHJtX3BsYW5l X2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHpwb3MpOwo+ICsK PiArICAgICAgIGRybV9wbGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFzZSwgJmludGVsX3BsYW5l X2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIHBsYW5lOwo+ICsKPiArZmFpbDoK PiArICAgICAgIGludGVsX3BsYW5lX2ZyZWUocGxhbmUpOwo+ICsKPiArICAgICAgIHJldHVybiBF UlJfUFRSKHJldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0Y19hbGxvYyh2b2lkKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPiArICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ICsKPiArICAg ICAgIGNydGMgPSBremFsbG9jKHNpemVvZigqY3J0YyksIEdGUF9LRVJORUwpOwo+ICsgICAgICAg aWYgKCFjcnRjKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAr Cj4gKyAgICAgICBjcnRjX3N0YXRlID0gaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhjcnRjKTsKPiAr ICAgICAgIGlmICghY3J0Y19zdGF0ZSkgewo+ICsgICAgICAgICAgICAgICBrZnJlZShjcnRjKTsK PiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKyAgICAgICB9Cj4g Kwo+ICsgICAgICAgY3J0Yy0+YmFzZS5zdGF0ZSA9ICZjcnRjX3N0YXRlLT51YXBpOwo+ICsgICAg ICAgY3J0Yy0+Y29uZmlnID0gY3J0Y19zdGF0ZTsKPiArCj4gKyAgICAgICByZXR1cm4gY3J0YzsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19mcmVlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKQo+ICt7Cj4gKyAgICAgICBpbnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJh c2UsIGNydGMtPmJhc2Uuc3RhdGUpOwo+ICsgICAgICAga2ZyZWUoY3J0Yyk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g K3sKPiArICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKPiArCj4gKyAgICAgICBkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ICsgICAgICAg a2ZyZWUoaW50ZWxfY3J0Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW50ZWxfY3J0Y19sYXRl X3JlZ2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsgICAgICAgaW50ZWxfY3J0 Y19kZWJ1Z2ZzX2FkZChjcnRjKTsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVm aW5lIElOVEVMX0NSVENfRlVOQ1MgXAo+ICsgICAgICAgLmdhbW1hX3NldCA9IGRybV9hdG9taWNf aGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQsIFwKPiArICAgICAgIC5zZXRfY29uZmlnID0gZHJtX2F0 b21pY19oZWxwZXJfc2V0X2NvbmZpZywgXAo+ICsgICAgICAgLmRlc3Ryb3kgPSBpbnRlbF9jcnRj X2Rlc3Ryb3ksIFwKPiArICAgICAgIC5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdl X2ZsaXAsIFwKPiArICAgICAgIC5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfY3J0Y19k dXBsaWNhdGVfc3RhdGUsIFwKPiArICAgICAgIC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVs X2NydGNfZGVzdHJveV9zdGF0ZSwgXAo+ICsgICAgICAgLnNldF9jcmNfc291cmNlID0gaW50ZWxf Y3J0Y19zZXRfY3JjX3NvdXJjZSwgXAo+ICsgICAgICAgLnZlcmlmeV9jcmNfc291cmNlID0gaW50 ZWxfY3J0Y192ZXJpZnlfY3JjX3NvdXJjZSwgXAo+ICsgICAgICAgLmdldF9jcmNfc291cmNlcyA9 IGludGVsX2NydGNfZ2V0X2NyY19zb3VyY2VzLCBcCj4gKyAgICAgICAubGF0ZV9yZWdpc3RlciA9 IGludGVsX2NydGNfbGF0ZV9yZWdpc3Rlcgo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19mdW5jcyBiZHdfY3J0Y19mdW5jcyA9IHsKPiArICAgICAgIElOVEVMX0NSVENfRlVOQ1Ms Cj4gKwo+ICsgICAgICAgLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5rX2NvdW50 ZXIsCj4gKyAgICAgICAuZW5hYmxlX3ZibGFuayA9IGJkd19lbmFibGVfdmJsYW5rLAo+ICsgICAg ICAgLmRpc2FibGVfdmJsYW5rID0gYmR3X2Rpc2FibGVfdmJsYW5rLAo+ICsgICAgICAgLmdldF92 YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaWxrX2NydGNfZnVuY3Mg PSB7Cj4gKyAgICAgICBJTlRFTF9DUlRDX0ZVTkNTLAo+ICsKPiArICAgICAgIC5nZXRfdmJsYW5r X2NvdW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAo+ICsgICAgICAgLmVuYWJsZV92Ymxh bmsgPSBpbGtfZW5hYmxlX3ZibGFuaywKPiArICAgICAgIC5kaXNhYmxlX3ZibGFuayA9IGlsa19k aXNhYmxlX3ZibGFuaywKPiArICAgICAgIC5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2Ny dGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2Z1bmNzIGc0eF9jcnRjX2Z1bmNzID0gewo+ICsgICAgICAgSU5URUxfQ1JUQ19G VU5DUywKPiArCj4gKyAgICAgICAuZ2V0X3ZibGFua19jb3VudGVyID0gZzR4X2dldF92Ymxhbmtf Y291bnRlciwKPiArICAgICAgIC5lbmFibGVfdmJsYW5rID0gaTk2NV9lbmFibGVfdmJsYW5rLAo+ ICsgICAgICAgLmRpc2FibGVfdmJsYW5rID0gaTk2NV9kaXNhYmxlX3ZibGFuaywKPiArICAgICAg IC5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAs Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5NjVfY3J0 Y19mdW5jcyA9IHsKPiArICAgICAgIElOVEVMX0NSVENfRlVOQ1MsCj4gKwo+ICsgICAgICAgLmdl dF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAo+ICsgICAgICAgLmVu YWJsZV92YmxhbmsgPSBpOTY1X2VuYWJsZV92YmxhbmssCj4gKyAgICAgICAuZGlzYWJsZV92Ymxh bmsgPSBpOTY1X2Rpc2FibGVfdmJsYW5rLAo+ICsgICAgICAgLmdldF92YmxhbmtfdGltZXN0YW1w ID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaTkxNWdtX2NydGNfZnVuY3MgPSB7Cj4gKyAgICAg ICBJTlRFTF9DUlRDX0ZVTkNTLAo+ICsKPiArICAgICAgIC5nZXRfdmJsYW5rX2NvdW50ZXIgPSBp OTE1X2dldF92YmxhbmtfY291bnRlciwKPiArICAgICAgIC5lbmFibGVfdmJsYW5rID0gaTkxNWdt X2VuYWJsZV92YmxhbmssCj4gKyAgICAgICAuZGlzYWJsZV92YmxhbmsgPSBpOTE1Z21fZGlzYWJs ZV92YmxhbmssCj4gKyAgICAgICAuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dl dF92YmxhbmtfdGltZXN0YW1wLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19mdW5jcyBpOTE1X2NydGNfZnVuY3MgPSB7Cj4gKyAgICAgICBJTlRFTF9DUlRDX0ZVTkNT LAo+ICsKPiArICAgICAgIC5nZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291 bnRlciwKPiArICAgICAgIC5lbmFibGVfdmJsYW5rID0gaTh4eF9lbmFibGVfdmJsYW5rLAo+ICsg ICAgICAgLmRpc2FibGVfdmJsYW5rID0gaTh4eF9kaXNhYmxlX3ZibGFuaywKPiArICAgICAgIC5n ZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4g K307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk4eHhfY3J0Y19m dW5jcyA9IHsKPiArICAgICAgIElOVEVMX0NSVENfRlVOQ1MsCj4gKwo+ICsgICAgICAgLyogbm8g aHcgdmJsYW5rIGNvdW50ZXIgKi8KPiArICAgICAgIC5lbmFibGVfdmJsYW5rID0gaTh4eF9lbmFi bGVfdmJsYW5rLAo+ICsgICAgICAgLmRpc2FibGVfdmJsYW5rID0gaTh4eF9kaXNhYmxlX3ZibGFu aywKPiArICAgICAgIC5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFu a190aW1lc3RhbXAsCj4gK307Cj4gKwo+ICtpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArICAgICAgIHN0 cnVjdCBpbnRlbF9wbGFuZSAqcHJpbWFyeSwgKmN1cnNvcjsKPiArICAgICAgIGNvbnN0IHN0cnVj dCBkcm1fY3J0Y19mdW5jcyAqZnVuY3M7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YzsKPiArICAgICAgIGludCBzcHJpdGUsIHJldDsKPiArCj4gKyAgICAgICBjcnRjID0gaW50ZWxf Y3J0Y19hbGxvYygpOwo+ICsgICAgICAgaWYgKElTX0VSUihjcnRjKSkKPiArICAgICAgICAgICAg ICAgcmV0dXJuIFBUUl9FUlIoY3J0Yyk7Cj4gKwo+ICsgICAgICAgY3J0Yy0+cGlwZSA9IHBpcGU7 Cj4gKyAgICAgICBjcnRjLT5udW1fc2NhbGVycyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51 bV9zY2FsZXJzW3BpcGVdOwo+ICsKPiArICAgICAgIHByaW1hcnkgPSBpbnRlbF9wcmltYXJ5X3Bs YW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7Cj4gKyAgICAgICBpZiAoSVNfRVJSKHByaW1hcnkp KSB7Cj4gKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIocHJpbWFyeSk7Cj4gKyAgICAgICAg ICAgICAgIGdvdG8gZmFpbDsKPiArICAgICAgIH0KPiArICAgICAgIGNydGMtPnBsYW5lX2lkc19t YXNrIHw9IEJJVChwcmltYXJ5LT5pZCk7Cj4gKwo+ICsgICAgICAgZm9yX2VhY2hfc3ByaXRlKGRl dl9wcml2LCBwaXBlLCBzcHJpdGUpIHsKPiArICAgICAgICAgICAgICAgc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZTsKPiArCj4gKyAgICAgICAgICAgICAgIHBsYW5lID0gaW50ZWxfc3ByaXRlX3Bs YW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKTsKPiArICAgICAgICAgICAgICAgaWYg KElTX0VSUihwbGFuZSkpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJS KHBsYW5lKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgICAgY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKHBs YW5lLT5pZCk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgY3Vyc29yID0gaW50ZWxfY3Vyc29y X3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7Cj4gKyAgICAgICBpZiAoSVNfRVJSKGN1cnNv cikpIHsKPiArICAgICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihjdXJzb3IpOwo+ICsgICAgICAg ICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICAgICB9Cj4gKyAgICAgICBjcnRjLT5wbGFuZV9pZHNf bWFzayB8PSBCSVQoY3Vyc29yLT5pZCk7Cj4gKwo+ICsgICAgICAgaWYgKEhBU19HTUNIKGRldl9w cml2KSkgewo+ICsgICAgICAgICAgICAgICBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwK PiArICAgICAgICAgICAgICAgICAgIElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0c0WChk ZXZfcHJpdikpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmZzR4X2NydGNfZnVu Y3M7Cj4gKyAgICAgICAgICAgICAgIGVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNCkpCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmaTk2NV9jcnRjX2Z1bmNzOwo+ICsgICAgICAg ICAgICAgICBlbHNlIGlmIChJU19JOTQ1R00oZGV2X3ByaXYpIHx8IElTX0k5MTVHTShkZXZfcHJp dikpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmaTkxNWdtX2NydGNfZnVuY3M7 Cj4gKyAgICAgICAgICAgICAgIGVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgMykpCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmaTkxNV9jcnRjX2Z1bmNzOwo+ICsgICAgICAgICAg ICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmaTh4eF9jcnRjX2Z1 bmNzOwo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gOCkKPiArICAgICAgICAgICAgICAgICAgICAgICBmdW5jcyA9ICZiZHdfY3J0 Y19mdW5jczsKPiArICAgICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAgICAgICAg IGZ1bmNzID0gJmlsa19jcnRjX2Z1bmNzOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldCA9 IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoJmRldl9wcml2LT5kcm0sICZjcnRjLT5iYXNlLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJpbWFyeS0+YmFzZSwg JmN1cnNvci0+YmFzZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVuY3MsICJwaXBlICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKPiArICAgICAgIGlmIChyZXQpCj4g KyAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICAgICBCVUdfT04ocGlwZSA+PSBB UlJBWV9TSVpFKGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZykgfHwKPiArICAgICAgICAg ICAgICBkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV0gIT0gTlVMTCk7Cj4gKyAg ICAgICBkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV0gPSBjcnRjOwo+ICsKPiAr ICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkgewo+ICsgICAgICAgICAgICAgICBl bnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHByaW1hcnktPmk5eHhfcGxhbmU7Cj4gKwo+ ICsgICAgICAgICAgICAgICBCVUdfT04oaTl4eF9wbGFuZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2 LT5wbGFuZV90b19jcnRjX21hcHBpbmcpIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAgICBkZXZf cHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdICE9IE5VTEwpOwo+ICsgICAg ICAgICAgICAgICBkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdID0g Y3J0YzsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMCkKPiArICAgICAgICAgICAgICAgZHJtX2NydGNfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3By b3BlcnR5KCZjcnRjLT5iYXNlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChEUk1fU0NBTElOR19G SUxURVJfTkVBUkVTVF9ORUlHSEJPUikpOwo+ICsKPiArICAgICAgIGludGVsX2NvbG9yX2luaXQo Y3J0Yyk7Cj4gKwo+ICsgICAgICAgaW50ZWxfY3J0Y19jcmNfaW5pdChjcnRjKTsKPiArCj4gKyAg ICAgICBkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZHJtX2NydGNfaW5kZXgoJmNydGMtPmJh c2UpICE9IGNydGMtPnBpcGUpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICsKPiArZmFpbDoK PiArICAgICAgIGludGVsX2NydGNfZnJlZShjcnRjKTsKPiArCj4gKyAgICAgICByZXR1cm4gcmV0 Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMK PiBpbmRleCAwYTNiOTc4ODkyNDguLmM2ZjMwZTRlYzUxZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTg3LDU2ICs4Nyw2IEBACj4g ICNpbmNsdWRlICJpbnRlbF90Yy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfdmdhLmgiCj4KPiAtLyog UHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPD0gMyAqLwo+IC1zdGF0aWMgY29uc3QgdTMy IGk4eHhfcHJpbWFyeV9mb3JtYXRzW10gPSB7Cj4gLSAgICAgICBEUk1fRk9STUFUX0M4LAo+IC0g ICAgICAgRFJNX0ZPUk1BVF9YUkdCMTU1NSwKPiAtICAgICAgIERSTV9GT1JNQVRfUkdCNTY1LAo+ IC0gICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiAtfTsKPiAtCj4gLS8qIFByaW1hcnkgcGxh bmUgZm9ybWF0cyBmb3IgaXZiIChubyBmcDE2IGR1ZSB0byBodyBpc3N1ZSkgKi8KPiAtc3RhdGlj IGNvbnN0IHUzMiBpdmJfcHJpbWFyeV9mb3JtYXRzW10gPSB7Cj4gLSAgICAgICBEUk1fRk9STUFU X0M4LAo+IC0gICAgICAgRFJNX0ZPUk1BVF9SR0I1NjUsCj4gLSAgICAgICBEUk1fRk9STUFUX1hS R0I4ODg4LAo+IC0gICAgICAgRFJNX0ZPUk1BVF9YQkdSODg4OCwKPiAtICAgICAgIERSTV9GT1JN QVRfWFJHQjIxMDEwMTAsCj4gLSAgICAgICBEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAo+IC19Owo+ IC0KPiAtLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPj0gNCwgZXhjZXB0IGl2YiAq Lwo+IC1zdGF0aWMgY29uc3QgdTMyIGk5NjVfcHJpbWFyeV9mb3JtYXRzW10gPSB7Cj4gLSAgICAg ICBEUk1fRk9STUFUX0M4LAo+IC0gICAgICAgRFJNX0ZPUk1BVF9SR0I1NjUsCj4gLSAgICAgICBE Uk1fRk9STUFUX1hSR0I4ODg4LAo+IC0gICAgICAgRFJNX0ZPUk1BVF9YQkdSODg4OCwKPiAtICAg ICAgIERSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCj4gLSAgICAgICBEUk1fRk9STUFUX1hCR1IyMTAx MDEwLAo+IC0gICAgICAgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAo+IC19Owo+IC0KPiAtLyog UHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciB2bHYvY2h2ICovCj4gLXN0YXRpYyBjb25zdCB1MzIg dmx2X3ByaW1hcnlfZm9ybWF0c1tdID0gewo+IC0gICAgICAgRFJNX0ZPUk1BVF9DOCwKPiAtICAg ICAgIERSTV9GT1JNQVRfUkdCNTY1LAo+IC0gICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiAt ICAgICAgIERSTV9GT1JNQVRfWEJHUjg4ODgsCj4gLSAgICAgICBEUk1fRk9STUFUX0FSR0I4ODg4 LAo+IC0gICAgICAgRFJNX0ZPUk1BVF9BQkdSODg4OCwKPiAtICAgICAgIERSTV9GT1JNQVRfWFJH QjIxMDEwMTAsCj4gLSAgICAgICBEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAo+IC0gICAgICAgRFJN X0ZPUk1BVF9BUkdCMjEwMTAxMCwKPiAtICAgICAgIERSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCj4g LSAgICAgICBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29u c3QgdTY0IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewo+IC0gICAgICAgSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQsCj4gLSAgICAgICBEUk1fRk9STUFUX01PRF9MSU5FQVIsCj4gLSAgICAgICBE Uk1fRk9STUFUX01PRF9JTlZBTElECj4gLX07Cj4gLQo+ICBzdGF0aWMgdm9pZCBpOXh4X2NydGNf Y2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKPiAgc3Rh dGljIHZvaWQgaWxrX3BjaF9jbG9ja19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gQEAg LTE2Miw3ICsxMTIsNiBAQCBzdGF0aWMgdm9pZCBza2xfcGZpdF9lbmFibGUoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICBzdGF0aWMgdm9pZCBpbGtfcGZpdF9l bmFibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICBzdGF0 aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCk7Cj4gLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4K PiAgc3RydWN0IGludGVsX2xpbWl0IHsKPiAgICAgICAgIHN0cnVjdCB7Cj4gQEAgLTEzMDYsMTIg KzEyNTUsNiBAQCBzdGF0aWMgdm9pZCBhc3NlcnRfcGxhbmVzX2Rpc2FibGVkKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjKQo+ICAgICAgICAgICAgICAgICBhc3NlcnRfcGxhbmVfZGlzYWJsZWQocGxh bmUpOwo+ICB9Cj4KPiAtc3RhdGljIHZvaWQgYXNzZXJ0X3ZibGFua19kaXNhYmxlZChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtICAgICAgIGlmIChJOTE1X1NUQVRFX1dBUk5fT04oZHJt X2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKSkKPiAtICAgICAgICAgICAgICAgZHJtX2NydGNf dmJsYW5rX3B1dChjcnRjKTsKPiAtfQo+IC0KPiAgdm9pZCBhc3NlcnRfcGNoX3RyYW5zY29kZXJf ZGlzYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGlwZSBwaXBlKQo+ICB7Cj4gQEAgLTE3OTYs NTUgKzE3MzksNiBAQCBlbnVtIHBpcGUgaW50ZWxfY3J0Y19wY2hfdHJhbnNjb2RlcihzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YykKPiAgICAgICAgICAgICAgICAgcmV0dXJuIGNydGMtPnBpcGU7Cj4g IH0KPgo+IC1zdGF0aWMgdTMyIGludGVsX2NydGNfbWF4X3ZibGFua19jb3VudChjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMt PmRldik7Cj4gLSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiAtICAgICAgIHUzMiBtb2RlX2ZsYWdzID0gY3J0Yy0+ bW9kZV9mbGFnczsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogRnJvbSBHZW4gMTEsIElu IGNhc2Ugb2YgZHNpIGNtZCBtb2RlLCBmcmFtZSBjb3VudGVyIHdvdWxkbnQKPiAtICAgICAgICAq IGhhdmUgdXBkYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFRFLCBpZiB3ZSB3YW50IHRvIHVzZQo+ IC0gICAgICAgICogdGhlIGh3IGNvdW50ZXIsIHRoZW4gd2Ugd291bGQgZmluZCBpdCB1cGRhdGVk IGluIG9ubHkKPiAtICAgICAgICAqIHRoZSBuZXh0IFRFLCBoZW5jZSBzd2l0Y2hpbmcgdG8gc3cg Y291bnRlci4KPiAtICAgICAgICAqLwo+IC0gICAgICAgaWYgKG1vZGVfZmxhZ3MgJiAoSTkxNV9N T0RFX0ZMQUdfRFNJX1VTRV9URTAgfCBJOTE1X01PREVfRkxBR19EU0lfVVNFX1RFMSkpCj4gLSAg ICAgICAgICAgICAgIHJldHVybiAwOwo+IC0KPiAtICAgICAgIC8qCj4gLSAgICAgICAgKiBPbiBp OTY1Z20gdGhlIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIgcmVhZHMKPiAtICAgICAgICAqIHplcm8g d2hlbiB0aGUgVFYgZW5jb2RlciBpcyBlbmFibGVkIDooCj4gLSAgICAgICAgKi8KPiAtICAgICAg IGlmIChJU19JOTY1R00oZGV2X3ByaXYpICYmCj4gLSAgICAgICAgICAgKGNydGNfc3RhdGUtPm91 dHB1dF90eXBlcyAmIEJJVChJTlRFTF9PVVRQVVRfVFZPVVQpKSkKPiAtICAgICAgICAgICAgICAg cmV0dXJuIDA7Cj4gLQo+IC0gICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSB8fCBJ U19HNFgoZGV2X3ByaXYpKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmZmZmZjsgLyog ZnVsbCAzMiBiaXQgY291bnRlciAqLwo+IC0gICAgICAgZWxzZSBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAzKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmZmY7IC8qIG9ubHkgMjQg Yml0cyBvZiBmcmFtZSBjb3VudCAqLwo+IC0gICAgICAgZWxzZQo+IC0gICAgICAgICAgICAgICBy ZXR1cm4gMDsgLyogR2VuMiBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyICov Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfY3J0Y192Ymxhbmtfb24oY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+IC0KPiAtICAg ICAgIGFzc2VydF92YmxhbmtfZGlzYWJsZWQoJmNydGMtPmJhc2UpOwo+IC0gICAgICAgZHJtX2Ny dGNfc2V0X21heF92YmxhbmtfY291bnQoJmNydGMtPmJhc2UsCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnRlbF9jcnRjX21heF92YmxhbmtfY291bnQoY3J0Y19zdGF0 ZSkpOwo+IC0gICAgICAgZHJtX2NydGNfdmJsYW5rX29uKCZjcnRjLT5iYXNlKTsKPiAtfQo+IC0K PiAtdm9pZCBpbnRlbF9jcnRjX3ZibGFua19vZmYoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+IC0KPiAtICAgICAgIGRybV9j cnRjX3ZibGFua19vZmYoJmNydGMtPmJhc2UpOwo+IC0gICAgICAgYXNzZXJ0X3ZibGFua19kaXNh YmxlZCgmY3J0Yy0+YmFzZSk7Cj4gLX0KPiAtCj4gIHZvaWQgaW50ZWxfZW5hYmxlX3BpcGUoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKQo+ICB7Cj4gICAgICAg ICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMobmV3X2NydGNfc3RhdGUt PnVhcGkuY3J0Yyk7Cj4gQEAgLTQwNTcsMTcxICszOTUxLDYgQEAgaW50IHNrbF9jaGVja19wbGFu ZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gICAgICAg ICByZXR1cm4gMDsKPiAgfQo+Cj4gLXN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfcmF0aW8oY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpudW0sIHVuc2lnbmVk IGludCAqZGVuKQo+IC17Cj4gLSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKPiAtICAgICAgIHVuc2lnbmVkIGludCBjcHAgPSBmYi0+ Zm9ybWF0LT5jcHBbMF07Cj4gLQo+IC0gICAgICAgLyoKPiAtICAgICAgICAqIGc0eCBic3BlYyBz YXlzIDY0YnBwIHBpeGVsIHJhdGUgY2FuJ3QgZXhjZWVkIDgwJQo+IC0gICAgICAgICogb2YgY2Rj bGsgd2hlbiB0aGUgc3ByaXRlIHBsYW5lIGlzIGVuYWJsZWQgb24gdGhlCj4gLSAgICAgICAgKiBz YW1lIHBpcGUuIGlsay9zbmIgYnNwZWMgc2F5cyA2NGJwcCBwaXhlbCByYXRlIGlzCj4gLSAgICAg ICAgKiBuZXZlciBhbGxvd2VkIHRvIGV4Y2VlZCA4MCUgb2YgY2RjbGsuIExldCdzIGp1c3QgZ28K PiAtICAgICAgICAqIHdpdGggdGhlIGlsay9zbmIgbGltaXQgYWx3YXlzLgo+IC0gICAgICAgICov Cj4gLSAgICAgICBpZiAoY3BwID09IDgpIHsKPiAtICAgICAgICAgICAgICAgKm51bSA9IDEwOwo+ IC0gICAgICAgICAgICAgICAqZGVuID0gODsKPiAtICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAg ICAgICAgICpudW0gPSAxOwo+IC0gICAgICAgICAgICAgICAqZGVuID0gMTsKPiAtICAgICAgIH0K PiAtfQo+IC0KPiAtc3RhdGljIGludCBpOXh4X3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsK PiAtICAgICAgIHVuc2lnbmVkIGludCBwaXhlbF9yYXRlOwo+IC0gICAgICAgdW5zaWduZWQgaW50 IG51bSwgZGVuOwo+IC0KPiAtICAgICAgIC8qCj4gLSAgICAgICAgKiBOb3RlIHRoYXQgY3J0Y19z dGF0ZS0+cGl4ZWxfcmF0ZSBhY2NvdW50cyBmb3IgYm90aAo+IC0gICAgICAgICogaG9yaXpvbnRh bCBhbmQgdmVydGljYWwgcGFuZWwgZml0dGVyIGRvd25zY2FsaW5nIGZhY3RvcnMuCj4gLSAgICAg ICAgKiBQcmUtSFNXIGJzcGVjIHRlbGxzIHVzIHRvIG9ubHkgY29uc2lkZXIgdGhlIGhvcml6b250 YWwKPiAtICAgICAgICAqIGRvd25zY2FsaW5nIGZhY3RvciBoZXJlLiBXZSBpZ25vcmUgdGhhdCBh bmQganVzdCBjb25zaWRlcgo+IC0gICAgICAgICogYm90aCBmb3Igc2ltcGxpY2l0eS4KPiAtICAg ICAgICAqLwo+IC0gICAgICAgcGl4ZWxfcmF0ZSA9IGNydGNfc3RhdGUtPnBpeGVsX3JhdGU7Cj4g LQo+IC0gICAgICAgaTl4eF9wbGFuZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJm51 bSwgJmRlbik7Cj4gLQo+IC0gICAgICAgLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgd2l0aCBkb3Vi bGUgd2lkZSBwaXBlICovCj4gLSAgICAgICBpZiAoY3J0Y19zdGF0ZS0+ZG91YmxlX3dpZGUpCj4g LSAgICAgICAgICAgICAgIGRlbiAqPSAyOwo+IC0KPiAtICAgICAgIHJldHVybiBESVZfUk9VTkRf VVAocGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKPiAtfQo+IC0KPiAtdW5zaWduZWQgaW50Cj4gLWk5 eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+IC0gICAgICAg ICAgICAgICAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCj4gLSAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPiAtewo+IC0gICAgICAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ IC0KPiAtICAgICAgIGlmICghSEFTX0dNQ0goZGV2X3ByaXYpKSB7Cj4gLSAgICAgICAgICAgICAg IHJldHVybiAzMioxMDI0Owo+IC0gICAgICAgfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDQpIHsKPiAtICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9YX1RJTEVEKQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNioxMDI0Owo+IC0g ICAgICAgICAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMyKjEw MjQ7Cj4gLSAgICAgICB9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykgewo+IC0g ICAgICAgICAgICAgICBpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpCj4g LSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDgqMTAyNDsKPiAtICAgICAgICAgICAgICAg ZWxzZQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNioxMDI0Owo+IC0gICAgICAg fSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgaWYgKHBsYW5lLT5pOXh4X3BsYW5lID09IFBMQU5F X0MpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQqMTAyNDsKPiAtICAgICAgICAg ICAgICAgZWxzZQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA4KjEwMjQ7Cj4gLSAg ICAgICB9Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgaTl4eF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0gICAgICAgc3RydWN0 IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7 Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNy dGMtPmJhc2UuZGV2KTsKPiAtICAgICAgIHUzMiBkc3BjbnRyID0gMDsKPiAtCj4gLSAgICAgICBp ZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQo+IC0gICAgICAgICAgICAgICBkc3BjbnRyIHw9 IERJU1BQTEFORV9HQU1NQV9FTkFCTEU7Cj4gLQo+IC0gICAgICAgaWYgKGNydGNfc3RhdGUtPmNz Y19lbmFibGUpCj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5FX1BJUEVfQ1ND X0VOQUJMRTsKPiAtCj4gLSAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUpCj4gLSAg ICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5FX1NFTF9QSVBFKGNydGMtPnBpcGUpOwo+ IC0KPiAtICAgICAgIHJldHVybiBkc3BjbnRyOwo+IC19Cj4gLQo+IC1zdGF0aWMgdTMyIGk5eHhf cGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0KPiAtICAgICAgICAgICAgICAgdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ ZGV2KTsKPiAtICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmh3LmZiOwo+IC0gICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3Rh dGUtPmh3LnJvdGF0aW9uOwo+IC0gICAgICAgdTMyIGRzcGNudHI7Cj4gLQo+IC0gICAgICAgZHNw Y250ciA9IERJU1BMQVlfUExBTkVfRU5BQkxFOwo+IC0KPiAtICAgICAgIGlmIChJU19HNFgoZGV2 X3ByaXYpIHx8IElTX0dFTihkZXZfcHJpdiwgNSkgfHwKPiAtICAgICAgICAgICBJU19HRU4oZGV2 X3ByaXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCj4gLSAgICAgICAgICAgICAgIGRz cGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwo+IC0KPiAtICAgICAgIHN3 aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7Cj4gLSAgICAgICBjYXNlIERSTV9GT1JNQVRfQzg6 Cj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5FXzhCUFA7Cj4gLSAgICAgICAg ICAgICAgIGJyZWFrOwo+IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1Ogo+IC0gICAg ICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JYNTU1Owo+IC0gICAgICAgICAgICAg ICBicmVhazsKPiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKPiAtICAgICAgICAg ICAgICAgZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTU1NTsKPiAtICAgICAgICAgICAgICAgYnJl YWs7Cj4gLSAgICAgICBjYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+IC0gICAgICAgICAgICAgICBk c3BjbnRyIHw9IERJU1BQTEFORV9CR1JYNTY1Owo+IC0gICAgICAgICAgICAgICBicmVhazsKPiAt ICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtICAgICAgICAgICAgICAgZHNwY250 ciB8PSBESVNQUExBTkVfQkdSWDg4ODsKPiAtICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAg ICBjYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0g RElTUFBMQU5FX1JHQlg4ODg7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgY2Fz ZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogo+IC0gICAgICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQ TEFORV9CR1JBODg4Owo+IC0gICAgICAgICAgICAgICBicmVhazsKPiAtICAgICAgIGNhc2UgRFJN X0ZPUk1BVF9BQkdSODg4ODoKPiAtICAgICAgICAgICAgICAgZHNwY250ciB8PSBESVNQUExBTkVf UkdCQTg4ODsKPiAtICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICBjYXNlIERSTV9GT1JN QVRfWFJHQjIxMDEwMTA6Cj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5FX0JH UlgxMDEwMTA7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgY2FzZSBEUk1fRk9S TUFUX1hCR1IyMTAxMDEwOgo+IC0gICAgICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9S R0JYMTAxMDEwOwo+IC0gICAgICAgICAgICAgICBicmVhazsKPiAtICAgICAgIGNhc2UgRFJNX0ZP Uk1BVF9BUkdCMjEwMTAxMDoKPiAtICAgICAgICAgICAgICAgZHNwY250ciB8PSBESVNQUExBTkVf QkdSQTEwMTAxMDsKPiAtICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICBjYXNlIERSTV9G T1JNQVRfQUJHUjIxMDEwMTA6Cj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5F X1JHQkExMDEwMTA7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgY2FzZSBEUk1f Rk9STUFUX1hCR1IxNjE2MTYxNkY6Cj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBM QU5FX1JHQlgxNjE2MTY7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgZGVmYXVs dDoKPiAtICAgICAgICAgICAgICAgTUlTU0lOR19DQVNFKGZiLT5mb3JtYXQtPmZvcm1hdCk7Cj4g LSAgICAgICAgICAgICAgIHJldHVybiAwOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDQgJiYKPiAtICAgICAgICAgICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1hfVElMRUQpCj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElT UFBMQU5FX1RJTEVEOwo+IC0KPiAtICAgICAgIGlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFU RV8xODApCj4gLSAgICAgICAgICAgICAgIGRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7 Cj4gLQo+IC0gICAgICAgaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQo+IC0gICAg ICAgICAgICAgICBkc3BjbnRyIHw9IERJU1BQTEFORV9NSVJST1I7Cj4gLQo+IC0gICAgICAgcmV0 dXJuIGRzcGNudHI7Cj4gLX0KPiAtCj4gIGludCBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAgewo+ICAgICAgICAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiBAQCAtNDI4MiwxOTcgKzQwMTEsNiBAQCBp bnQgaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4gICAgICAgICByZXR1cm4gMDsKPiAgfQo+Cj4gLXN0YXRpYyBib29sIGk5eHhf cGxhbmVfaGFzX3dpbmRvd2luZyhzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lKQo+IC17Cj4gLSAg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5i YXNlLmRldik7Cj4gLSAgICAgICBlbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5l LT5pOXh4X3BsYW5lOwo+IC0KPiAtICAgICAgIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkK PiAtICAgICAgICAgICAgICAgcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKPiAtICAgICAg IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQo+ IC0gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICAgICBlbHNlIGlmIChJU19HRU4o ZGV2X3ByaXYsIDQpKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFO RV9DOwo+IC0gICAgICAgZWxzZQo+IC0gICAgICAgICAgICAgICByZXR1cm4gaTl4eF9wbGFuZSA9 PSBQTEFORV9CIHx8Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgaTl4eF9wbGFuZSA9PSBQTEFO RV9DOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWk5eHhfcGxhbmVfY2hlY2soc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwo+ IC0gICAgICAgaW50IHJldDsKPiAtCj4gLSAgICAgICByZXQgPSBjaHZfcGxhbmVfY2hlY2tfcm90 YXRpb24ocGxhbmVfc3RhdGUpOwo+IC0gICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKPiAtCj4gLSAgICAgICByZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tf Y2xpcHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9QTEFO RV9IRUxQRVJfTk9fU0NBTElORywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpOXh4X3BsYW5lX2hhc193aW5kb3dpbmcocGxhbmUpKTsKPiAtICAgICAg IGlmIChyZXQpCj4gLSAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgICAgcmV0 ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiAtICAgICAgIGlmIChy ZXQpCj4gLSAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgICAgaWYgKCFwbGFu ZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiAtCj4g LSAgICAgICByZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMocGxhbmVfc3Rh dGUpOwo+IC0gICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAt Cj4gLSAgICAgICBwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9wbGFuZV9jdGwoY3J0Y19zdGF0ZSwg cGxhbmVfc3RhdGUpOwo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCBpOXh4X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiAtICAg ICAgIGVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7Cj4g LSAgICAgICB1MzIgbGluZWFyX29mZnNldDsKPiAtICAgICAgIGludCB4ID0gcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLng7Cj4gLSAgICAgICBpbnQgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVswXS55Owo+IC0gICAgICAgaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54 MTsKPiAtICAgICAgIGludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Cj4gLSAg ICAgICBpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7 Cj4gLSAgICAgICBpbnQgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpOwo+IC0gICAgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiAtICAgICAgIHUzMiBk c3BhZGRyX29mZnNldDsKPiAtICAgICAgIHUzMiBkc3BjbnRyOwo+IC0KPiAtICAgICAgIGRzcGNu dHIgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwgaTl4eF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsK PiAtCj4gLSAgICAgICBsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHks IHBsYW5lX3N0YXRlLCAwKTsKPiAtCj4gLSAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA0KQo+IC0gICAgICAgICAgICAgICBkc3BhZGRyX29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVswXS5vZmZzZXQ7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIGRzcGFk ZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiAtCj4gLSAgICAgICBzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gLQo+IC0gICAgICAgaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNUUklERShpOXh4X3BsYW5lKSwKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpOwo+IC0K PiAtICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkgewo+IC0gICAgICAgICAgICAg ICAvKgo+IC0gICAgICAgICAgICAgICAgKiBQTEFORV9BIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBh IGZ1bGwgd2luZG93Cj4gLSAgICAgICAgICAgICAgICAqIGdlbmVyYXRvciBidXQgbGV0J3MgYXNz dW1lIHdlIHN0aWxsIG5lZWQgdG8KPiAtICAgICAgICAgICAgICAgICogcHJvZ3JhbSB3aGF0ZXZl ciBpcyB0aGVyZS4KPiAtICAgICAgICAgICAgICAgICovCj4gLSAgICAgICAgICAgICAgIGludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BQT1MoaTl4eF9wbGFuZSksCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsKPiAtICAgICAg ICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNJWkUoaTl4eF9wbGFuZSks Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY3J0Y19oIC0gMSkgPDwgMTYp IHwgKGNydGNfdyAtIDEpKTsKPiAtICAgICAgIH0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7Cj4gLSAgICAgICAgICAgICAgIGludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNUE9TKGk5eHhfcGxhbmUpLAo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Cj4gLSAgICAg ICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNU0laRShpOXh4X3BsYW5l KSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjcnRjX2ggLSAxKSA8PCAx NikgfCAoY3J0Y193IC0gMSkpOwo+IC0gICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUFJJTUNOU1RBTFBIQShpOXh4X3BsYW5lKSwgMCk7Cj4gLSAgICAgICB9Cj4gLQo+ IC0gICAgICAgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJp dikpIHsKPiAtICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUE9G RlNFVChpOXh4X3BsYW5lKSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHkg PDwgMTYpIHwgeCk7Cj4gLSAgICAgICB9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkgewo+IC0gICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQTElO T0ZGKGk5eHhfcGxhbmUpLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l YXJfb2Zmc2V0KTsKPiAtICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IERTUFRJTEVPRkYoaTl4eF9wbGFuZSksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh5IDw8IDE2KSB8IHgpOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIC8qCj4gLSAgICAg ICAgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBwcmV2 aW91c2x5Cj4gLSAgICAgICAgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJs ZSBhdG9taWMgYnkgd3JpdGluZwo+IC0gICAgICAgICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVz dCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsK PiAtICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gLSAgICAgICAgICAgICAg IGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUpLAo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFu ZV9zdGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAg ICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BBRERSKGk5eHhfcGxhbmUpLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChw bGFuZV9zdGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7Cj4gLQo+IC0gICAgICAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+IC0gICAgICAgZW51bSBp OXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKPiAtICAgICAgIHVu c2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gLSAgICAgICB1MzIgZHNwY250cjsKPiAtCj4gLSAgICAg ICAvKgo+IC0gICAgICAgICogRFNQQ05UUiBwaXBlIGdhbW1hIGVuYWJsZSBvbiBnNHgrIGFuZCBw aXBlIGNzYwo+IC0gICAgICAgICogZW5hYmxlIG9uIGlsaysgYWZmZWN0IHRoZSBwaXBlIGJvdHRv bSBjb2xvciBhcwo+IC0gICAgICAgICogd2VsbCwgc28gd2UgbXVzdCBjb25maWd1cmUgdGhlbSBl dmVuIGlmIHRoZSBwbGFuZQo+IC0gICAgICAgICogaXMgZGlzYWJsZWQuCj4gLSAgICAgICAgKgo+ IC0gICAgICAgICogT24gcHJlLWc0eCB0aGVyZSBpcyBubyB3YXkgdG8gZ2FtbWEgY29ycmVjdCB0 aGUKPiAtICAgICAgICAqIHBpcGUgYm90dG9tIGNvbG9yIGJ1dCB3ZSdsbCBrZWVwIG9uIGRvaW5n IHRoaXMKPiAtICAgICAgICAqIGFueXdheSBzbyB0aGF0IHRoZSBjcnRjIHN0YXRlIHJlYWRvdXQg d29ya3MgY29ycmVjdGx5Lgo+IC0gICAgICAgICovCj4gLSAgICAgICBkc3BjbnRyID0gaTl4eF9w bGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKPiAtCj4gLSAgICAgICBzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gLQo+IC0gICAgICAgaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOwo+IC0g ICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiAtICAgICAgICAgICAgICAgaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNVUkYoaTl4eF9wbGFuZSksIDApOwo+IC0gICAg ICAgZWxzZQo+IC0gICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ QUREUihpOXh4X3BsYW5lKSwgMCk7Cj4gLQo+IC0gICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBi b29sIGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwaXBlICpwaXBlKQo+IC17 Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBs YW5lLT5iYXNlLmRldik7Cj4gLSAgICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWlu IHBvd2VyX2RvbWFpbjsKPiAtICAgICAgIGVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0g cGxhbmUtPmk5eHhfcGxhbmU7Cj4gLSAgICAgICBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAt ICAgICAgIGJvb2wgcmV0Owo+IC0gICAgICAgdTMyIHZhbDsKPiAtCj4gLSAgICAgICAvKgo+IC0g ICAgICAgICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUgYmV0d2Vl biBwaXBlcywKPiAtICAgICAgICAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi00 IHdoaWNoIGRvbid0IGhhdmUgYW55Cj4gLSAgICAgICAgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgo+ IC0gICAgICAgICovCj4gLSAgICAgICBwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShw bGFuZS0+cGlwZSk7Cj4gLSAgICAgICB3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRf aWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPiAtICAgICAgIGlmICghd2FrZXJl ZikKPiAtICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IC0KPiAtICAgICAgIHZhbCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSkpOwo+IC0KPiAtICAgICAg IHJldCA9IHZhbCAmIERJU1BMQVlfUExBTkVfRU5BQkxFOwo+IC0KPiAtICAgICAgIGlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDUpCj4gLSAgICAgICAgICAgICAgICpwaXBlID0gcGxhbmUtPnBp cGU7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgICpwaXBlID0gKHZhbCAmIERJU1BQ TEFORV9TRUxfUElQRV9NQVNLKSA+Pgo+IC0gICAgICAgICAgICAgICAgICAgICAgIERJU1BQTEFO RV9TRUxfUElQRV9TSElGVDsKPiAtCj4gLSAgICAgICBpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChk ZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKPiAtCj4gLSAgICAgICByZXR1cm4gcmV0 Owo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywgaW50IGlkKQo+ICB7Cj4gICAgICAgICBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Cj4gQEAgLTExOTE5LDMzICsxMTQ1Nyw2IEBA IHN0YXRpYyB2b2lkIGlsa19wY2hfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpcGVfY29uZmlnLT5m ZGlfbV9uKTsKPiAgfQo+Cj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiAtewo+IC0gICAgICAgbWVt c2V0KGNydGNfc3RhdGUsIDAsIHNpemVvZigqY3J0Y19zdGF0ZSkpOwo+IC0KPiAtICAgICAgIF9f ZHJtX2F0b21pY19oZWxwZXJfY3J0Y19zdGF0ZV9yZXNldCgmY3J0Y19zdGF0ZS0+dWFwaSwgJmNy dGMtPmJhc2UpOwo+IC0KPiAtICAgICAgIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyID0gSU5W QUxJRF9UUkFOU0NPREVSOwo+IC0gICAgICAgY3J0Y19zdGF0ZS0+bWFzdGVyX3RyYW5zY29kZXIg PSBJTlZBTElEX1RSQU5TQ09ERVI7Cj4gLSAgICAgICBjcnRjX3N0YXRlLT5oc3dfd29ya2Fyb3Vu ZF9waXBlID0gSU5WQUxJRF9QSVBFOwo+IC0gICAgICAgY3J0Y19zdGF0ZS0+b3V0cHV0X2Zvcm1h dCA9IElOVEVMX09VVFBVVF9GT1JNQVRfSU5WQUxJRDsKPiAtICAgICAgIGNydGNfc3RhdGUtPnNj YWxlcl9zdGF0ZS5zY2FsZXJfaWQgPSAtMTsKPiAtICAgICAgIGNydGNfc3RhdGUtPm1zdF9tYXN0 ZXJfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKPiAtfQo+IC0KPiAtc3RhdGljIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsKPiAtCj4gLSAgICAgICBjcnRjX3N0YXRlID0ga21hbGxvYyhzaXplb2YoKmNydGNf c3RhdGUpLCBHRlBfS0VSTkVMKTsKPiAtCj4gLSAgICAgICBpZiAoY3J0Y19zdGF0ZSkKPiAtICAg ICAgICAgICAgICAgaW50ZWxfY3J0Y19zdGF0ZV9yZXNldChjcnRjX3N0YXRlLCBjcnRjKTsKPiAt Cj4gLSAgICAgICByZXR1cm4gY3J0Y19zdGF0ZTsKPiAtfQo+IC0KPiAgLyogUmV0dXJucyB0aGUg Y3VycmVudGx5IHByb2dyYW1tZWQgbW9kZSBvZiB0aGUgZ2l2ZW4gZW5jb2Rlci4gKi8KPiAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKgo+ICBpbnRlbF9lbmNvZGVyX2N1cnJlbnRfbW9kZShzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKPiBAQCAtMTE5ODYsMTQgKzExNDk3LDYgQEAgaW50 ZWxfZW5jb2Rlcl9jdXJyZW50X21vZGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4g ICAgICAgICByZXR1cm4gbW9kZTsKPiAgfQo+Cj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZGVz dHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAtCj4gLSAgICAgICBkcm1f Y3J0Y19jbGVhbnVwKGNydGMpOwo+IC0gICAgICAga2ZyZWUoaW50ZWxfY3J0Yyk7Cj4gLX0KPiAt Cj4gIC8qKgo+ICAgKiBpbnRlbF93bV9uZWVkX3VwZGF0ZSAtIENoZWNrIHdoZXRoZXIgd2F0ZXJt YXJrcyBuZWVkIHVwZGF0aW5nCj4gICAqIEBjdXI6IGN1cnJlbnQgcGxhbmUgc3RhdGUKPiBAQCAt MTUxOTcsMTcgKzE0NzAwLDYgQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfcHJlcGFyZV9jb21t aXQoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gICAgICAgICByZXR1cm4gMDsK PiAgfQo+Cj4gLXUzMiBpbnRlbF9jcnRjX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YykKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmJhc2UuZGV2Owo+IC0gICAgICAgc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRl di0+dmJsYW5rW2RybV9jcnRjX2luZGV4KCZjcnRjLT5iYXNlKV07Cj4gLQo+IC0gICAgICAgaWYg KCF2YmxhbmstPm1heF92YmxhbmtfY291bnQpCj4gLSAgICAgICAgICAgICAgIHJldHVybiAodTMy KWRybV9jcnRjX2FjY3VyYXRlX3ZibGFua19jb3VudCgmY3J0Yy0+YmFzZSk7Cj4gLQo+IC0gICAg ICAgcmV0dXJuIGNydGMtPmJhc2UuZnVuY3MtPmdldF92YmxhbmtfY291bnRlcigmY3J0Yy0+YmFz ZSk7Cj4gLX0KPiAtCj4gIHZvaWQgaW50ZWxfY3J0Y19hcm1fZmlmb191bmRlcnJ1bihzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gIHsKPiBAQCAtMTYyNjAsMzM2ICsx NTc1Miw2IEBAIHZvaWQgaW50ZWxfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKPiAgICAgICAgIGtmcmVlKHRvX2ludGVsX3BsYW5lKHBsYW5lKSk7Cj4gIH0KPgo+IC1zdGF0 aWMgYm9vbCBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUg Kl9wbGFuZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUz MiBmb3JtYXQsIHU2NCBtb2RpZmllcikKPiAtewo+IC0gICAgICAgc3dpdGNoIChtb2RpZmllcikg ewo+IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Cj4gLSAgICAgICBjYXNlIEk5 MTVfRk9STUFUX01PRF9YX1RJTEVEOgo+IC0gICAgICAgICAgICAgICBicmVhazsKPiAtICAgICAg IGRlZmF1bHQ6Cj4gLSAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiAtICAgICAgIH0KPiAt Cj4gLSAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewo+IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX0M4 Ogo+IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiAtICAgICAgIGNhc2UgRFJNX0ZP Uk1BVF9YUkdCMTU1NToKPiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtICAg ICAgICAgICAgICAgcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAo+ IC0gICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJ TEVEOwo+IC0gICAgICAgZGVmYXVsdDoKPiAtICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ IC0gICAgICAgfQo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBpOTY1X3BsYW5lX2Zvcm1hdF9tb2Rf c3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKPiAtewo+ IC0gICAgICAgc3dpdGNoIChtb2RpZmllcikgewo+IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX01P RF9MSU5FQVI6Cj4gLSAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgo+IC0gICAg ICAgICAgICAgICBicmVhazsKPiAtICAgICAgIGRlZmF1bHQ6Cj4gLSAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewo+ IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX0M4Ogo+IC0gICAgICAgY2FzZSBEUk1fRk9STUFUX1JH QjU2NToKPiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtICAgICAgIGNhc2Ug RFJNX0ZPUk1BVF9YQkdSODg4ODoKPiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK PiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiAtICAgICAgIGNhc2UgRFJNX0ZP Uk1BVF9YUkdCMjEwMTAxMDoKPiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoK PiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKPiAtICAgICAgIGNhc2UgRFJN X0ZPUk1BVF9BQkdSMjEwMTAxMDoKPiAtICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2 MTZGOgo+IC0gICAgICAgICAgICAgICByZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0Rf TElORUFSIHx8Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQ7Cj4gLSAgICAgICBkZWZhdWx0Ogo+IC0gICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7Cj4gLSAgICAgICB9Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVuY3MgPSB7Cj4gLSAgICAgICAudXBkYXRlX3BsYW5l ID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAo+IC0gICAgICAgLmRpc2FibGVfcGxh bmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+IC0gICAgICAgLmRlc3Ryb3kg PSBpbnRlbF9wbGFuZV9kZXN0cm95LAo+IC0gICAgICAgLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gLSAgICAgICAuYXRvbWljX2Rlc3Ryb3lf c3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAo+IC0gICAgICAgLmZvcm1hdF9tb2Rf c3VwcG9ydGVkID0gaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKPiAtfTsKPiAtCj4g LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7 Cj4gLSAgICAgICAudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5l LAo+IC0gICAgICAgLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs YW5lLAo+IC0gICAgICAgLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAo+IC0gICAgICAg LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4g LSAgICAgICAuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRl LAo+IC0gICAgICAgLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTh4eF9wbGFuZV9mb3JtYXRfbW9k X3N1cHBvcnRlZCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBib29sIGk5eHhfcGxhbmVfaGFzX2ZiYyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lKQo+IC17Cj4gLSAgICAgICBp ZiAoIUhBU19GQkMoZGV2X3ByaXYpKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4g LQo+IC0gICAgICAgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZf cHJpdikpCj4gLSAgICAgICAgICAgICAgIHJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0E7IC8q IHRpZWQgdG8gcGlwZSBBICovCj4gLSAgICAgICBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3By aXYpKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BIHx8IGk5 eHhfcGxhbmUgPT0gUExBTkVfQiB8fAo+IC0gICAgICAgICAgICAgICAgICAgICAgIGk5eHhfcGxh bmUgPT0gUExBTkVfQzsKPiAtICAgICAgIGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQSB8fCBpOXh4 X3BsYW5lID09IFBMQU5FX0I7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIHJldHVy biBpOXh4X3BsYW5lID09IFBMQU5FX0E7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaW50ZWxf cGxhbmUgKgo+IC1pbnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lOwo+IC0gICAgICAgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyAq cGxhbmVfZnVuY3M7Cj4gLSAgICAgICB1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsK PiAtICAgICAgIGNvbnN0IHUzMiAqZm9ybWF0czsKPiAtICAgICAgIGludCBudW1fZm9ybWF0czsK PiAtICAgICAgIGludCByZXQsIHpwb3M7Cj4gLQo+IC0gICAgICAgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIHNrbF91bml2ZXJzYWxfcGxhbmVf Y3JlYXRlKGRldl9wcml2LCBwaXBlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUExBTkVfUFJJTUFSWSk7Cj4gLQo+IC0gICAgICAgcGxhbmUgPSBp bnRlbF9wbGFuZV9hbGxvYygpOwo+IC0gICAgICAgaWYgKElTX0VSUihwbGFuZSkpCj4gLSAgICAg ICAgICAgICAgIHJldHVybiBwbGFuZTsKPiAtCj4gLSAgICAgICBwbGFuZS0+cGlwZSA9IHBpcGU7 Cj4gLSAgICAgICAvKgo+IC0gICAgICAgICogT24gZ2VuMi8zIG9ubHkgcGxhbmUgQSBjYW4gZG8g RkJDLCBidXQgdGhlIHBhbmVsIGZpdHRlciBhbmQgTFZEUwo+IC0gICAgICAgICogcG9ydCBpcyBo b29rZWQgdG8gcGlwZSBCLiBIZW5jZSB3ZSB3YW50IHBsYW5lIEEgZmVlZGluZyBwaXBlIEIuCj4g LSAgICAgICAgKi8KPiAtICAgICAgIGlmIChIQVNfRkJDKGRldl9wcml2KSAmJiBJTlRFTF9HRU4o ZGV2X3ByaXYpIDwgNCAmJgo+IC0gICAgICAgICAgIElOVEVMX05VTV9QSVBFUyhkZXZfcHJpdikg PT0gMikKPiAtICAgICAgICAgICAgICAgcGxhbmUtPmk5eHhfcGxhbmUgPSAoZW51bSBpOXh4X3Bs YW5lX2lkKSAhcGlwZTsKPiAtICAgICAgIGVsc2UKPiAtICAgICAgICAgICAgICAgcGxhbmUtPmk5 eHhfcGxhbmUgPSAoZW51bSBpOXh4X3BsYW5lX2lkKSBwaXBlOwo+IC0gICAgICAgcGxhbmUtPmlk ID0gUExBTkVfUFJJTUFSWTsKPiAtICAgICAgIHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRF TF9GUk9OVEJVRkZFUihwaXBlLCBwbGFuZS0+aWQpOwo+IC0KPiAtICAgICAgIHBsYW5lLT5oYXNf ZmJjID0gaTl4eF9wbGFuZV9oYXNfZmJjKGRldl9wcml2LCBwbGFuZS0+aTl4eF9wbGFuZSk7Cj4g LSAgICAgICBpZiAocGxhbmUtPmhhc19mYmMpIHsKPiAtICAgICAgICAgICAgICAgc3RydWN0IGlu dGVsX2ZiYyAqZmJjID0gJmRldl9wcml2LT5mYmM7Cj4gLQo+IC0gICAgICAgICAgICAgICBmYmMt PnBvc3NpYmxlX2ZyYW1lYnVmZmVyX2JpdHMgfD0gcGxhbmUtPmZyb250YnVmZmVyX2JpdDsKPiAt ICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiAtICAgICAgICAgICAgICAgZm9ybWF0cyA9IHZsdl9w cmltYXJ5X2Zvcm1hdHM7Cj4gLSAgICAgICAgICAgICAgIG51bV9mb3JtYXRzID0gQVJSQVlfU0la RSh2bHZfcHJpbWFyeV9mb3JtYXRzKTsKPiAtICAgICAgIH0gZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA0KSB7Cj4gLSAgICAgICAgICAgICAgIC8qCj4gLSAgICAgICAgICAgICAgICAq IFdhRlAxNkdhbW1hRW5hYmxpbmc6aXZiCj4gLSAgICAgICAgICAgICAgICAqICJXb3JrYXJvdW5k IDogV2hlbiB1c2luZyB0aGUgNjQtYml0IGZvcm1hdCwgdGhlIHBsYW5lCj4gLSAgICAgICAgICAg ICAgICAqICBvdXRwdXQgb24gZWFjaCBjb2xvciBjaGFubmVsIGhhcyBvbmUgcXVhcnRlciBhbXBs aXR1ZGUuCj4gLSAgICAgICAgICAgICAgICAqICBJdCBjYW4gYmUgYnJvdWdodCB1cCB0byBmdWxs IGFtcGxpdHVkZSBieSB1c2luZyBwaXBlCj4gLSAgICAgICAgICAgICAgICAqICBnYW1tYSBjb3Jy ZWN0aW9uIG9yIHBpcGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0bwo+IC0gICAgICAgICAgICAg ICAgKiAgbXVsdGlwbHkgdGhlIHBsYW5lIG91dHB1dCBieSBmb3VyLiIKPiAtICAgICAgICAgICAg ICAgICoKPiAtICAgICAgICAgICAgICAgICogVGhlcmUgaXMgbm8gZGVkaWNhdGVkIHBsYW5lIGdh bW1hIGZvciB0aGUgcHJpbWFyeSBwbGFuZSwKPiAtICAgICAgICAgICAgICAgICogYW5kIHVzaW5n IHRoZSBwaXBlIGdhbW1hL2NzYyBjb3VsZCBjb25mbGljdCB3aXRoIG90aGVyCj4gLSAgICAgICAg ICAgICAgICAqIHBsYW5lcywgc28gd2UgY2hvb3NlIG5vdCB0byBleHBvc2UgZnAxNiBvbiBJVkIg cHJpbWFyeQo+IC0gICAgICAgICAgICAgICAgKiBwbGFuZXMuIEhTVyBwcmltYXJ5IHBsYW5lcyBu byBsb25nZXIgaGF2ZSB0aGlzIHByb2JsZW0uCj4gLSAgICAgICAgICAgICAgICAqLwo+IC0gICAg ICAgICAgICAgICBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkgewo+IC0gICAgICAgICAgICAg ICAgICAgICAgIGZvcm1hdHMgPSBpdmJfcHJpbWFyeV9mb3JtYXRzOwo+IC0gICAgICAgICAgICAg ICAgICAgICAgIG51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpdmJfcHJpbWFyeV9mb3JtYXRzKTsK PiAtICAgICAgICAgICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgICAgICAgICBmb3Jt YXRzID0gaTk2NV9wcmltYXJ5X2Zvcm1hdHM7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgbnVt X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGk5NjVfcHJpbWFyeV9mb3JtYXRzKTsKPiAtICAgICAgICAg ICAgICAgfQo+IC0gICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgZm9ybWF0cyA9IGk4 eHhfcHJpbWFyeV9mb3JtYXRzOwo+IC0gICAgICAgICAgICAgICBudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoaTh4eF9wcmltYXJ5X2Zvcm1hdHMpOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gLSAgICAgICAgICAgICAgIHBsYW5lX2Z1bmNz ID0gJmk5NjVfcGxhbmVfZnVuY3M7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIHBs YW5lX2Z1bmNzID0gJmk4eHhfcGxhbmVfZnVuY3M7Cj4gLQo+IC0gICAgICAgaWYgKElTX1ZBTExF WVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0gICAgICAgICAg ICAgICBwbGFuZS0+bWluX2NkY2xrID0gdmx2X3BsYW5lX21pbl9jZGNsazsKPiAtICAgICAgIGVs c2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCj4g LSAgICAgICAgICAgICAgIHBsYW5lLT5taW5fY2RjbGsgPSBoc3dfcGxhbmVfbWluX2NkY2xrOwo+ IC0gICAgICAgZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPiAtICAgICAgICAgICAg ICAgcGxhbmUtPm1pbl9jZGNsayA9IGl2Yl9wbGFuZV9taW5fY2RjbGs7Cj4gLSAgICAgICBlbHNl Cj4gLSAgICAgICAgICAgICAgIHBsYW5lLT5taW5fY2RjbGsgPSBpOXh4X3BsYW5lX21pbl9jZGNs azsKPiAtCj4gLSAgICAgICBwbGFuZS0+bWF4X3N0cmlkZSA9IGk5eHhfcGxhbmVfbWF4X3N0cmlk ZTsKPiAtICAgICAgIHBsYW5lLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9wbGFuZTsKPiAt ICAgICAgIHBsYW5lLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNhYmxlX3BsYW5lOwo+IC0gICAg ICAgcGxhbmUtPmdldF9od19zdGF0ZSA9IGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRlOwo+IC0gICAg ICAgcGxhbmUtPmNoZWNrX3BsYW5lID0gaTl4eF9wbGFuZV9jaGVjazsKPiAtCj4gLSAgICAgICBp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikpCj4gLSAgICAg ICAgICAgICAgIHJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwg JnBsYW5lLT5iYXNlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgcGxhbmVfZnVuY3MsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmb3JtYXRzLCBudW1fZm9ybWF0cywKPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk5eHhfZm9ybWF0X21vZGlmaWVycywKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9QTEFORV9UWVBF X1BSSU1BUlksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAicHJpbWFyeSAlYyIsIHBpcGVfbmFtZShwaXBlKSk7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAg ICAgICAgICAgIHJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwg JnBsYW5lLT5iYXNlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgcGxhbmVfZnVuY3MsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmb3JtYXRzLCBudW1fZm9ybWF0cywKPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk5eHhfZm9ybWF0X21vZGlmaWVycywKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9QTEFORV9UWVBF X1BSSU1BUlksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAicGxhbmUgJWMiLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGxhbmVfbmFtZShwbGFuZS0+aTl4eF9wbGFuZSkpOwo+IC0gICAgICAgaWYgKHJldCkK PiAtICAgICAgICAgICAgICAgZ290byBmYWlsOwo+IC0KPiAtICAgICAgIGlmIChJU19DSEVSUllW SUVXKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQikgewo+IC0gICAgICAgICAgICAgICBzdXBw b3J0ZWRfcm90YXRpb25zID0KPiAtICAgICAgICAgICAgICAgICAgICAgICBEUk1fTU9ERV9ST1RB VEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODAgfAo+IC0gICAgICAgICAgICAgICAgICAgICAgIERS TV9NT0RFX1JFRkxFQ1RfWDsKPiAtICAgICAgIH0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA0KSB7Cj4gLSAgICAgICAgICAgICAgIHN1cHBvcnRlZF9yb3RhdGlvbnMgPQo+IC0gICAg ICAgICAgICAgICAgICAgICAgIERSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4 MDsKPiAtICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgICAgICAgIHN1cHBvcnRlZF9yb3RhdGlv bnMgPSBEUk1fTU9ERV9ST1RBVEVfMDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA0KQo+IC0gICAgICAgICAgICAgICBkcm1fcGxhbmVfY3JlYXRl X3JvdGF0aW9uX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUk1fTU9ERV9ST1RBVEVfMCwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRfcm90 YXRpb25zKTsKPiAtCj4gLSAgICAgICB6cG9zID0gMDsKPiAtICAgICAgIGRybV9wbGFuZV9jcmVh dGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCB6cG9zKTsKPiAtCj4gLSAg ICAgICBkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxw ZXJfZnVuY3MpOwo+IC0KPiAtICAgICAgIHJldHVybiBwbGFuZTsKPiAtCj4gLWZhaWw6Cj4gLSAg ICAgICBpbnRlbF9wbGFuZV9mcmVlKHBsYW5lKTsKPiAtCj4gLSAgICAgICByZXR1cm4gRVJSX1BU UihyZXQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGludGVsX2NydGNfbGF0ZV9yZWdpc3Rlcihz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtICAgICAgIGludGVsX2NydGNfZGVidWdmc19h ZGQoY3J0Yyk7Cj4gLSAgICAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtI2RlZmluZSBJTlRFTF9D UlRDX0ZVTkNTIFwKPiAtICAgICAgIC5nYW1tYV9zZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9sZWdh Y3lfZ2FtbWFfc2V0LCBcCj4gLSAgICAgICAuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVy X3NldF9jb25maWcsIFwKPiAtICAgICAgIC5kZXN0cm95ID0gaW50ZWxfY3J0Y19kZXN0cm95LCBc Cj4gLSAgICAgICAucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLCBcCj4g LSAgICAgICAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX2NydGNfZHVwbGljYXRlX3N0 YXRlLCBcCj4gLSAgICAgICAuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9jcnRjX2Rlc3Ry b3lfc3RhdGUsIFwKPiAtICAgICAgIC5zZXRfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfc2V0X2Ny Y19zb3VyY2UsIFwKPiAtICAgICAgIC52ZXJpZnlfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfdmVy aWZ5X2NyY19zb3VyY2UsIFwKPiAtICAgICAgIC5nZXRfY3JjX3NvdXJjZXMgPSBpbnRlbF9jcnRj X2dldF9jcmNfc291cmNlcywgXAo+IC0gICAgICAgLmxhdGVfcmVnaXN0ZXIgPSBpbnRlbF9jcnRj X2xhdGVfcmVnaXN0ZXIKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3Mg YmR3X2NydGNfZnVuY3MgPSB7Cj4gLSAgICAgICBJTlRFTF9DUlRDX0ZVTkNTLAo+IC0KPiAtICAg ICAgIC5nZXRfdmJsYW5rX2NvdW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAo+IC0gICAg ICAgLmVuYWJsZV92YmxhbmsgPSBiZHdfZW5hYmxlX3ZibGFuaywKPiAtICAgICAgIC5kaXNhYmxl X3ZibGFuayA9IGJkd19kaXNhYmxlX3ZibGFuaywKPiAtICAgICAgIC5nZXRfdmJsYW5rX3RpbWVz dGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4gLX07Cj4gLQo+IC1zdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGlsa19jcnRjX2Z1bmNzID0gewo+IC0gICAg ICAgSU5URUxfQ1JUQ19GVU5DUywKPiAtCj4gLSAgICAgICAuZ2V0X3ZibGFua19jb3VudGVyID0g ZzR4X2dldF92YmxhbmtfY291bnRlciwKPiAtICAgICAgIC5lbmFibGVfdmJsYW5rID0gaWxrX2Vu YWJsZV92YmxhbmssCj4gLSAgICAgICAuZGlzYWJsZV92YmxhbmsgPSBpbGtfZGlzYWJsZV92Ymxh bmssCj4gLSAgICAgICAuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92Ymxh bmtfdGltZXN0YW1wLAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19m dW5jcyBnNHhfY3J0Y19mdW5jcyA9IHsKPiAtICAgICAgIElOVEVMX0NSVENfRlVOQ1MsCj4gLQo+ IC0gICAgICAgLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5rX2NvdW50ZXIsCj4g LSAgICAgICAuZW5hYmxlX3ZibGFuayA9IGk5NjVfZW5hYmxlX3ZibGFuaywKPiAtICAgICAgIC5k aXNhYmxlX3ZibGFuayA9IGk5NjVfZGlzYWJsZV92YmxhbmssCj4gLSAgICAgICAuZ2V0X3ZibGFu a190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAo+IC19Owo+IC0K PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOTY1X2NydGNfZnVuY3MgPSB7 Cj4gLSAgICAgICBJTlRFTF9DUlRDX0ZVTkNTLAo+IC0KPiAtICAgICAgIC5nZXRfdmJsYW5rX2Nv dW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKPiAtICAgICAgIC5lbmFibGVfdmJsYW5r ID0gaTk2NV9lbmFibGVfdmJsYW5rLAo+IC0gICAgICAgLmRpc2FibGVfdmJsYW5rID0gaTk2NV9k aXNhYmxlX3ZibGFuaywKPiAtICAgICAgIC5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2Ny dGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2Z1bmNzIGk5MTVnbV9jcnRjX2Z1bmNzID0gewo+IC0gICAgICAgSU5URUxfQ1JU Q19GVU5DUywKPiAtCj4gLSAgICAgICAuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJs YW5rX2NvdW50ZXIsCj4gLSAgICAgICAuZW5hYmxlX3ZibGFuayA9IGk5MTVnbV9lbmFibGVfdmJs YW5rLAo+IC0gICAgICAgLmRpc2FibGVfdmJsYW5rID0gaTkxNWdtX2Rpc2FibGVfdmJsYW5rLAo+ IC0gICAgICAgLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3Rp bWVzdGFtcCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3Mg aTkxNV9jcnRjX2Z1bmNzID0gewo+IC0gICAgICAgSU5URUxfQ1JUQ19GVU5DUywKPiAtCj4gLSAg ICAgICAuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCj4gLSAg ICAgICAuZW5hYmxlX3ZibGFuayA9IGk4eHhfZW5hYmxlX3ZibGFuaywKPiAtICAgICAgIC5kaXNh YmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92YmxhbmssCj4gLSAgICAgICAuZ2V0X3ZibGFua190 aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAo+IC19Owo+IC0KPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOHh4X2NydGNfZnVuY3MgPSB7Cj4g LSAgICAgICBJTlRFTF9DUlRDX0ZVTkNTLAo+IC0KPiAtICAgICAgIC8qIG5vIGh3IHZibGFuayBj b3VudGVyICovCj4gLSAgICAgICAuZW5hYmxlX3ZibGFuayA9IGk4eHhfZW5hYmxlX3ZibGFuaywK PiAtICAgICAgIC5kaXNhYmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92YmxhbmssCj4gLSAgICAg ICAuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1w LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjX2FsbG9j KHZvaWQpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl Owo+IC0gICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gLQo+IC0gICAgICAgY3J0YyA9 IGt6YWxsb2Moc2l6ZW9mKCpjcnRjKSwgR0ZQX0tFUk5FTCk7Cj4gLSAgICAgICBpZiAoIWNydGMp Cj4gLSAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IC0KPiAtICAgICAg IGNydGNfc3RhdGUgPSBpbnRlbF9jcnRjX3N0YXRlX2FsbG9jKGNydGMpOwo+IC0gICAgICAgaWYg KCFjcnRjX3N0YXRlKSB7Cj4gLSAgICAgICAgICAgICAgIGtmcmVlKGNydGMpOwo+IC0gICAgICAg ICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAg ICBjcnRjLT5iYXNlLnN0YXRlID0gJmNydGNfc3RhdGUtPnVhcGk7Cj4gLSAgICAgICBjcnRjLT5j b25maWcgPSBjcnRjX3N0YXRlOwo+IC0KPiAtICAgICAgIHJldHVybiBjcnRjOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2ZyZWUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4g LXsKPiAtICAgICAgIGludGVsX2NydGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgY3J0Yy0+ YmFzZS5zdGF0ZSk7Cj4gLSAgICAgICBrZnJlZShjcnRjKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZv aWQgaW50ZWxfcGxhbmVfcG9zc2libGVfY3J0Y3NfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4g QEAgLTE2NjAyLDEwMCArMTU3NjQsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbGFuZV9wb3NzaWJs ZV9jcnRjc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgICAgICAg IH0KPiAgfQo+Cj4gLXN0YXRpYyBpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBp bnRlbF9wbGFuZSAqcHJpbWFyeSwgKmN1cnNvcjsKPiAtICAgICAgIGNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19mdW5jcyAqZnVuY3M7Cj4gLSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiAt ICAgICAgIGludCBzcHJpdGUsIHJldDsKPiAtCj4gLSAgICAgICBjcnRjID0gaW50ZWxfY3J0Y19h bGxvYygpOwo+IC0gICAgICAgaWYgKElTX0VSUihjcnRjKSkKPiAtICAgICAgICAgICAgICAgcmV0 dXJuIFBUUl9FUlIoY3J0Yyk7Cj4gLQo+IC0gICAgICAgY3J0Yy0+cGlwZSA9IHBpcGU7Cj4gLSAg ICAgICBjcnRjLT5udW1fc2NhbGVycyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2Fs ZXJzW3BpcGVdOwo+IC0KPiAtICAgICAgIHByaW1hcnkgPSBpbnRlbF9wcmltYXJ5X3BsYW5lX2Ny ZWF0ZShkZXZfcHJpdiwgcGlwZSk7Cj4gLSAgICAgICBpZiAoSVNfRVJSKHByaW1hcnkpKSB7Cj4g LSAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIocHJpbWFyeSk7Cj4gLSAgICAgICAgICAgICAg IGdvdG8gZmFpbDsKPiAtICAgICAgIH0KPiAtICAgICAgIGNydGMtPnBsYW5lX2lkc19tYXNrIHw9 IEJJVChwcmltYXJ5LT5pZCk7Cj4gLQo+IC0gICAgICAgZm9yX2VhY2hfc3ByaXRlKGRldl9wcml2 LCBwaXBlLCBzcHJpdGUpIHsKPiAtICAgICAgICAgICAgICAgc3RydWN0IGludGVsX3BsYW5lICpw bGFuZTsKPiAtCj4gLSAgICAgICAgICAgICAgIHBsYW5lID0gaW50ZWxfc3ByaXRlX3BsYW5lX2Ny ZWF0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKTsKPiAtICAgICAgICAgICAgICAgaWYgKElTX0VS UihwbGFuZSkpIHsKPiAtICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKHBsYW5l KTsKPiAtICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICAgICAgICAgICAg IH0KPiAtICAgICAgICAgICAgICAgY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKHBsYW5lLT5p ZCk7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgY3Vyc29yID0gaW50ZWxfY3Vyc29yX3BsYW5l X2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7Cj4gLSAgICAgICBpZiAoSVNfRVJSKGN1cnNvcikpIHsK PiAtICAgICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihjdXJzb3IpOwo+IC0gICAgICAgICAgICAg ICBnb3RvIGZhaWw7Cj4gLSAgICAgICB9Cj4gLSAgICAgICBjcnRjLT5wbGFuZV9pZHNfbWFzayB8 PSBCSVQoY3Vyc29yLT5pZCk7Cj4gLQo+IC0gICAgICAgaWYgKEhBU19HTUNIKGRldl9wcml2KSkg ewo+IC0gICAgICAgICAgICAgICBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwKPiAtICAg ICAgICAgICAgICAgICAgIElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0c0WChkZXZfcHJp dikpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmZzR4X2NydGNfZnVuY3M7Cj4g LSAgICAgICAgICAgICAgIGVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNCkpCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgZnVuY3MgPSAmaTk2NV9jcnRjX2Z1bmNzOwo+IC0gICAgICAgICAgICAg ICBlbHNlIGlmIChJU19JOTQ1R00oZGV2X3ByaXYpIHx8IElTX0k5MTVHTShkZXZfcHJpdikpCj4g LSAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmaTkxNWdtX2NydGNfZnVuY3M7Cj4gLSAg ICAgICAgICAgICAgIGVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgMykpCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgZnVuY3MgPSAmaTkxNV9jcnRjX2Z1bmNzOwo+IC0gICAgICAgICAgICAgICBl bHNlCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MgPSAmaTh4eF9jcnRjX2Z1bmNzOwo+ IC0gICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gOCkKPiAtICAgICAgICAgICAgICAgICAgICAgICBmdW5jcyA9ICZiZHdfY3J0Y19mdW5j czsKPiAtICAgICAgICAgICAgICAgZWxzZQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGZ1bmNz ID0gJmlsa19jcnRjX2Z1bmNzOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHJldCA9IGRybV9j cnRjX2luaXRfd2l0aF9wbGFuZXMoJmRldl9wcml2LT5kcm0sICZjcnRjLT5iYXNlLAo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJpbWFyeS0+YmFzZSwgJmN1cnNv ci0+YmFzZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Ms ICJwaXBlICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKPiAtICAgICAgIGlmIChyZXQpCj4gLSAgICAg ICAgICAgICAgIGdvdG8gZmFpbDsKPiAtCj4gLSAgICAgICBCVUdfT04ocGlwZSA+PSBBUlJBWV9T SVpFKGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZykgfHwKPiAtICAgICAgICAgICAgICBk ZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV0gIT0gTlVMTCk7Cj4gLSAgICAgICBk ZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV0gPSBjcnRjOwo+IC0KPiAtICAgICAg IGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkgewo+IC0gICAgICAgICAgICAgICBlbnVtIGk5 eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHByaW1hcnktPmk5eHhfcGxhbmU7Cj4gLQo+IC0gICAg ICAgICAgICAgICBCVUdfT04oaTl4eF9wbGFuZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2LT5wbGFu ZV90b19jcnRjX21hcHBpbmcpIHx8Cj4gLSAgICAgICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+ cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdICE9IE5VTEwpOwo+IC0gICAgICAgICAg ICAgICBkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdID0gY3J0YzsK PiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkK PiAtICAgICAgICAgICAgICAgZHJtX2NydGNfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5 KCZjcnRjLT5iYXNlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChEUk1fU0NBTElOR19GSUxURVJf TkVBUkVTVF9ORUlHSEJPUikpOwo+IC0KPiAtICAgICAgIGludGVsX2NvbG9yX2luaXQoY3J0Yyk7 Cj4gLQo+IC0gICAgICAgaW50ZWxfY3J0Y19jcmNfaW5pdChjcnRjKTsKPiAtCj4gLSAgICAgICBk cm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZHJtX2NydGNfaW5kZXgoJmNydGMtPmJhc2UpICE9 IGNydGMtPnBpcGUpOwo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC0KPiAtZmFpbDoKPiAtICAg ICAgIGludGVsX2NydGNfZnJlZShjcnRjKTsKPiAtCj4gLSAgICAgICByZXR1cm4gcmV0Owo+IC19 Cj4KPiAgaW50IGludGVsX2dldF9waXBlX2Zyb21fY3J0Y19pZF9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5oCj4gaW5kZXggZjBhNWJmNjk2NTZmLi4wZWJhOTFkMThlOTYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAo+ IEBAIC02NTksNiArNjU5LDEzIEBAIHN0cnVjdCBpbnRlbF9wbGFuZSAqCj4gIGludGVsX2N1cnNv cl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW51bSBwaXBlIHBpcGUpOwo+Cj4gKy8qIGNydGMgKi8KPiAr dTMyIGludGVsX2NydGNfbWF4X3ZibGFua19jb3VudChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gK2ludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7Cj4gK3N0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICppbnRlbF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsK PiArdm9pZCBpbnRlbF9jcnRjX3N0YXRlX3Jlc2V0KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0Yyk7Cj4gKwo+ICAvKiBtb2Rlc2V0dGluZyAqLwo+ICB2b2lkIGludGVsX21vZGVzZXRf aW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gIGludCBpbnRlbF9tb2Rl c2V0X2luaXRfbm9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+IC0tCj4gMi4y Ny4wCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngKCgoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=