From owner-freebsd-virtualization@FreeBSD.ORG Thu Nov 6 17:11:10 2008 Return-Path: Delivered-To: freebsd-virtualization@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 858131065678 for ; Thu, 6 Nov 2008 17:11:10 +0000 (UTC) (envelope-from jeffrey.m.ahrenholz@boeing.com) Received: from stl-smtpout-01.boeing.com (stl-smtpout-01.boeing.com [130.76.96.56]) by mx1.freebsd.org (Postfix) with ESMTP id EB98C8FC2C for ; Thu, 6 Nov 2008 17:11:09 +0000 (UTC) (envelope-from jeffrey.m.ahrenholz@boeing.com) Received: from stl-av-01.boeing.com (stl-av-01.boeing.com [192.76.190.6]) by stl-smtpout-01.ns.cs.boeing.com (8.14.0/8.14.0/8.14.0/SMTPOUT) with ESMTP id mA6GPqCH008472 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Thu, 6 Nov 2008 10:25:59 -0600 (CST) Received: from stl-av-01.boeing.com (localhost [127.0.0.1]) by stl-av-01.boeing.com (8.14.0/8.14.0/DOWNSTREAM_RELAY) with ESMTP id mA6GPqBZ005746 for ; Thu, 6 Nov 2008 10:25:52 -0600 (CST) Received: from XCH-NWBH-11.nw.nos.boeing.com (xch-nwbh-11.nw.nos.boeing.com [130.247.55.84]) by stl-av-01.boeing.com (8.14.0/8.14.0/UPSTREAM_RELAY) with ESMTP id mA6GPj7c005382 for ; Thu, 6 Nov 2008 10:25:51 -0600 (CST) Received: from XCH-NW-6V1.nw.nos.boeing.com ([130.247.55.53]) by XCH-NWBH-11.nw.nos.boeing.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 6 Nov 2008 08:25:50 -0800 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C9402C.548A7819" Date: Thu, 6 Nov 2008 08:25:14 -0800 Message-ID: <0DF156EE7414494187B087A3C279BDB40AF14C23@XCH-NW-6V1.nw.nos.boeing.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: multicast routing patch revised Thread-Index: AclALD9YATLv6Y1PT6+38MIwHL/UTQ== From: "Ahrenholz, Jeffrey M" To: X-OriginalArrivalTime: 06 Nov 2008 16:25:50.0054 (UTC) FILETIME=[54B33860:01C9402C] X-TM-AS-Product-Ver: SMEX-8.0.0.1285-5.500.1027-16262.003 X-TM-AS-Result: No--17.737300-0.000000-31 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No Subject: multicast routing patch revised X-BeenThere: freebsd-virtualization@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussion of various virtualization techniques FreeBSD supports." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Nov 2008 17:11:10 -0000 This is a multi-part message in MIME format. ------_=_NextPart_001_01C9402C.548A7819 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Attached is an updated patch for multicast routing. This is against the vimage_7-20081015.tgz that Marko has posted on http://imunes.tel.fer.hr/ This fixes a number of issues with the previous patch that I posted - initialization problems, adds IPv6 multicast routing support, fixes timer functions with the bandwidth monitoring code. This has been tested with PIM and IPv4 and IPv6 multicast routing. Now it uses its own VNET_MOD_MROUTE state allowing for proper initialization. The file porting_to_vimage.txt has been very helpful! I still have one problem however which is not covered by the text -- when you reboot/shutdown the machine, the ip_mroute_modevent() w/MOD_UNLOAD is called without curvnet being valid. How do you find the proper vnet in this situation? -Jeff ------_=_NextPart_001_01C9402C.548A7819 Content-Type: application/octet-stream; name="vimage_7-20081015-mroute.diff" Content-Transfer-Encoding: base64 Content-Description: vimage_7-20081015-mroute.diff Content-Disposition: attachment; filename="vimage_7-20081015-mroute.diff" ZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQvaXBfbXJvdXRlLmMgc3lzL25ldGluZXQvaXBf bXJvdXRlLmMKLS0tIHN5cy4yMDA4MTAxNS9uZXRpbmV0L2lwX21yb3V0ZS5jCTIwMDgtMDgtMTYg MTY6Mjk6MTkuMDAwMDAwMDAwIC0wNzAwCisrKyBzeXMvbmV0aW5ldC9pcF9tcm91dGUuYwkyMDA4 LTExLTA1IDE2OjMwOjA0LjAwMDAwMDAwMCAtMDgwMApAQCAtOTksNiArOTksNyBAQAogI2luY2x1 ZGUgPG5ldGluZXQvcGltX3Zhci5oPgogI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CiAjaWZkZWYg SU5FVDYKKyNpbmNsdWRlIDxuZXRpbmV0Ni92aW5ldDYuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2lw Ni5oPgogI2luY2x1ZGUgPG5ldGluZXQ2L2luNl92YXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0Ni9p cDZfbXJvdXRlLmg+CkBAIC0xMTIsMjEgKzExMywzMCBAQAogICogQ29udHJvbCBkZWJ1Z2dpbmcg Y29kZSBmb3IgcnN2cCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgY29kZS4KICAqIENhbiBvbmx5IHNl dCB0aGVtIHdpdGggdGhlIGRlYnVnZ2VyLgogICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVf aW50ICAgIHJzdnBkZWJ1ZzsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZGVidWdnaW5nCSovCiAKIHN0 YXRpYyB1X2ludAltcnRkZWJ1ZzsJCS8qIGFueSBzZXQgb2YgdGhlIGZsYWdzIGJlbG93CSovCisj ZW5kaWYgLyogIVZJTUFHRSAqLwogI2RlZmluZQkJREVCVUdfTUZDCTB4MDIKICNkZWZpbmUJCURF QlVHX0ZPUldBUkQJMHgwNAogI2RlZmluZQkJREVCVUdfRVhQSVJFCTB4MDgKICNkZWZpbmUJCURF QlVHX1hNSVQJMHgxMAogI2RlZmluZQkJREVCVUdfUElNCTB4MjAKIAorI2lmbmRlZiBWSU1BR0UK ICNkZWZpbmUJCVZJRklfSU5WQUxJRAkoKHZpZmlfdCkgLTEpCisjZW5kaWYgLyogIVZJTUFHRSAq LwogCiAjZGVmaW5lIE1fSEFTQ0wobSkJKChtKS0+bV9mbGFncyAmIE1fRVhUKQogCiBzdGF0aWMg TUFMTE9DX0RFRklORShNX01SVEFCTEUsICJtcm91dGV0YmwiLCAibXVsdGljYXN0IHJvdXRpbmcg dGFibGVzIik7CiAKK3N0YXRpYyBpbnQgdm5ldF9tcm91dGVfaWF0dGFjaChjb25zdCB2b2lkICop Oworc3RhdGljIGludCB2bmV0X21yb3V0ZV9pZGV0YWNoKGNvbnN0IHZvaWQgKik7CisKK1ZORVRf TU9EX0RFQ0xBUkUoTVJPVVRFLCBtcm91dGUsIHZuZXRfbXJvdXRlX2lhdHRhY2gsIHZuZXRfbXJv dXRlX2lkZXRhY2gsIElORVQsIE5VTEwpCisKIC8qCiAgKiBMb2NraW5nLiAgV2UgdXNlIHR3byBs b2Nrczogb25lIGZvciB0aGUgdmlydHVhbCBpbnRlcmZhY2UgdGFibGUgYW5kCiAgKiBvbmUgZm9y IHRoZSBmb3J3YXJkaW5nIHRhYmxlLiAgVGhlc2UgbG9ja3MgbWF5IGJlIG5lc3RlZCBpbiB3aGlj aCBjYXNlCkBAIC0xNDAsNDggKzE1MCw1OSBAQAogICoKICAqLwogCisjaWZuZGVmIFZJTUFHRQog c3RhdGljIHN0cnVjdCBtcnRzdGF0CW1ydHN0YXQ7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldF9p cCwgT0lEX0FVVE8sIG1ydHN0YXQsIENUTEZMQUdfUlcsCi0gICAgJm1ydHN0YXQsIG1ydHN0YXQs CisjZW5kaWYgLyogIVZJTUFHRSAqLworU1lTQ1RMX1ZfU1RSVUNUKFZfTkVULCB2bmV0X21yb3V0 ZSwgX25ldF9pbmV0X2lwLCBPSURfQVVUTywgbXJ0c3RhdCwKKyAgICBDVExGTEFHX1JXLCBtcnRz dGF0LCBtcnRzdGF0LAogICAgICJNdWx0aWNhc3QgUm91dGluZyBTdGF0aXN0aWNzIChzdHJ1Y3Qg bXJ0c3RhdCwgbmV0aW5ldC9pcF9tcm91dGUuaCkiKTsKLQorI2lmbmRlZiBWSU1BR0UKIHN0YXRp YyBzdHJ1Y3QgbWZjCSptZmN0YWJsZVtNRkNUQkxTSVpdOwotU1lTQ1RMX09QQVFVRShfbmV0X2lu ZXRfaXAsIE9JRF9BVVRPLCBtZmN0YWJsZSwgQ1RMRkxBR19SRCwKLSAgICAmbWZjdGFibGUsIHNp emVvZihtZmN0YWJsZSksICJTLCptZmNbTUZDVEJMU0laXSIsCitTWVNDVExfVl9PSUQoVl9ORVQs IHZuZXRfbXJvdXRlLCBfbmV0X2luZXRfaXAsIENUTFRZUEVfT1BBUVVFfE9JRF9BVVRPLAorICAg IG1mY3RhYmxlLCBDVExGTEFHX1JELCBtZmN0YWJsZSwgc2l6ZW9mKG1mY3RhYmxlKSwgc3lzY3Rs X2hhbmRsZV9vcGFxdWUsCisgICAgIlMsKm1mY1tNRkNUQkxTSVpdIiwKICAgICAiTXVsdGljYXN0 IEZvcndhcmRpbmcgVGFibGUgKHN0cnVjdCAqbWZjW01GQ1RCTFNJWl0sIG5ldGluZXQvaXBfbXJv dXRlLmgpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXR4IG1yb3V0ZXJfbXR4OwotI2RlZmluZQlNUk9V VEVSX0xPQ0soKQkJbXR4X2xvY2soJm1yb3V0ZXJfbXR4KQotI2RlZmluZQlNUk9VVEVSX1VOTE9D SygpCW10eF91bmxvY2soJm1yb3V0ZXJfbXR4KQotI2RlZmluZQlNUk9VVEVSX0xPQ0tfQVNTRVJU KCkJbXR4X2Fzc2VydCgmbXJvdXRlcl9tdHgsIE1BX09XTkVEKQorI2VuZGlmIC8qICFWSU1BR0Ug Ki8KKyNkZWZpbmUJTVJPVVRFUl9MT0NLKCkJCW10eF9sb2NrKCZWX21yb3V0ZXJfbXR4KQorI2Rl ZmluZQlNUk9VVEVSX1VOTE9DSygpCW10eF91bmxvY2soJlZfbXJvdXRlcl9tdHgpCisjZGVmaW5l CU1ST1VURVJfTE9DS19BU1NFUlQoKQltdHhfYXNzZXJ0KCZWX21yb3V0ZXJfbXR4LCBNQV9PV05F RCkKICNkZWZpbmUJTVJPVVRFUl9MT0NLX0lOSVQoKQlcCi0JbXR4X2luaXQoJm1yb3V0ZXJfbXR4 LCAiSVB2NCBtdWx0aWNhc3QgZm9yd2FyZGluZyIsIE5VTEwsIE1UWF9ERUYpCi0jZGVmaW5lCU1S T1VURVJfTE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJm1yb3V0ZXJfbXR4KQorCW10eF9pbml0 KCZWX21yb3V0ZXJfbXR4LCAiSVB2NCBtdWx0aWNhc3QgZm9yd2FyZGluZyIsIE5VTEwsIE1UWF9E RUYpCisjZGVmaW5lCU1ST1VURVJfTE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJlZfbXJvdXRl cl9tdHgpCiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG10eCBtZmNfbXR4OwotI2Rl ZmluZQlNRkNfTE9DSygpCW10eF9sb2NrKCZtZmNfbXR4KQotI2RlZmluZQlNRkNfVU5MT0NLKCkJ bXR4X3VubG9jaygmbWZjX210eCkKLSNkZWZpbmUJTUZDX0xPQ0tfQVNTRVJUKCkJbXR4X2Fzc2Vy dCgmbWZjX210eCwgTUFfT1dORUQpCi0jZGVmaW5lCU1GQ19MT0NLX0lOSVQoKQltdHhfaW5pdCgm bWZjX210eCwgIm1yb3V0ZSBtZmMgdGFibGUiLCBOVUxMLCBNVFhfREVGKQotI2RlZmluZQlNRkNf TE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJm1mY19tdHgpCisjZW5kaWYgLyogIVZJTUFHRSAq LworI2RlZmluZQlNRkNfTE9DSygpCW10eF9sb2NrKCZWX21mY19tdHgpCisjZGVmaW5lCU1GQ19V TkxPQ0soKQltdHhfdW5sb2NrKCZWX21mY19tdHgpCisjZGVmaW5lCU1GQ19MT0NLX0FTU0VSVCgp CW10eF9hc3NlcnQoJlZfbWZjX210eCwgTUFfT1dORUQpCisjZGVmaW5lCU1GQ19MT0NLX0lOSVQo KQltdHhfaW5pdCgmVl9tZmNfbXR4LCAibXJvdXRlIG1mYyB0YWJsZSIsIE5VTEwsIE1UWF9ERUYp CisjZGVmaW5lCU1GQ19MT0NLX0RFU1RST1koKQltdHhfZGVzdHJveSgmVl9tZmNfbXR4KQogCisj aWZuZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCB2aWYJdmlmdGFibGVbTUFYVklGU107Ci1TWVND VExfT1BBUVVFKF9uZXRfaW5ldF9pcCwgT0lEX0FVVE8sIHZpZnRhYmxlLCBDVExGTEFHX1JELAot ICAgICZ2aWZ0YWJsZSwgc2l6ZW9mKHZpZnRhYmxlKSwgIlMsdmlmW01BWFZJRlNdIiwKK1NZU0NU TF9WX09JRChWX05FVCwgdm5ldF9tcm91dGUsIF9uZXRfaW5ldF9pcCwgQ1RMVFlQRV9PUEFRVUV8 T0lEX0FVVE8sIHZpZnRhYmxlLAorICAgIENUTEZMQUdfUkQsIHZpZnRhYmxlLCBzaXplb2Yodmlm dGFibGUpLCBzeXNjdGxfaGFuZGxlX29wYXF1ZSwgCisgICAgIlMsdmlmW01BWFZJRlNdIiwKICAg ICAiTXVsdGljYXN0IFZpcnR1YWwgSW50ZXJmYWNlcyAoc3RydWN0IHZpZltNQVhWSUZTXSwgbmV0 aW5ldC9pcF9tcm91dGUuaCkiKTsKIAogc3RhdGljIHN0cnVjdCBtdHggdmlmX210eDsKLSNkZWZp bmUJVklGX0xPQ0soKQltdHhfbG9jaygmdmlmX210eCkKLSNkZWZpbmUJVklGX1VOTE9DSygpCW10 eF91bmxvY2soJnZpZl9tdHgpCi0jZGVmaW5lCVZJRl9MT0NLX0FTU0VSVCgpCW10eF9hc3NlcnQo JnZpZl9tdHgsIE1BX09XTkVEKQotI2RlZmluZQlWSUZfTE9DS19JTklUKCkJbXR4X2luaXQoJnZp Zl9tdHgsICJtcm91dGUgdmlmIHRhYmxlIiwgTlVMTCwgTVRYX0RFRikKLSNkZWZpbmUJVklGX0xP Q0tfREVTVFJPWSgpCW10eF9kZXN0cm95KCZ2aWZfbXR4KQorI2VuZGlmIC8qICFWSU1BR0UgKi8K KyNkZWZpbmUJVklGX0xPQ0soKQltdHhfbG9jaygmVl92aWZfbXR4KQorI2RlZmluZQlWSUZfVU5M T0NLKCkJbXR4X3VubG9jaygmVl92aWZfbXR4KQorI2RlZmluZQlWSUZfTE9DS19BU1NFUlQoKQlt dHhfYXNzZXJ0KCZWX3ZpZl9tdHgsIE1BX09XTkVEKQorI2RlZmluZQlWSUZfTE9DS19JTklUKCkJ bXR4X2luaXQoJlZfdmlmX210eCwgIm1yb3V0ZSB2aWYgdGFibGUiLCBOVUxMLCBNVFhfREVGKQor I2RlZmluZQlWSUZfTE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJlZfdmlmX210eCkKIAorI2lm bmRlZiBWSU1BR0UKIHN0YXRpYyB1X2NoYXIJCW5leHBpcmVbTUZDVEJMU0laXTsKIAogc3RhdGlj IGV2ZW50aGFuZGxlcl90YWcgaWZfZGV0YWNoX2V2ZW50X3RhZyA9IE5VTEw7CiAKIHN0YXRpYyBz dHJ1Y3QgY2FsbG91dCBleHBpcmVfdXBjYWxsc19jaDsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAK ICNkZWZpbmUJCUVYUElSRV9USU1FT1VUCShoeiAvIDQpCS8qIDR4IC8gc2Vjb25kCQkqLwogI2Rl ZmluZQkJVVBDQUxMX0VYUElSRQk2CQkvKiBudW1iZXIgb2YgdGltZW91dHMJKi8KQEAgLTE5Niwy NSArMjE3LDMxIEBACiAgKiBQZW5kaW5nIHRpbWVvdXRzIGFyZSBzdG9yZWQgaW4gYSBoYXNoIHRh YmxlLCB0aGUga2V5IGJlaW5nIHRoZQogICogZXhwaXJhdGlvbiB0aW1lLiBQZXJpb2RpY2FsbHks IHRoZSBlbnRyaWVzIGFyZSBhbmFseXNlZCBhbmQgcHJvY2Vzc2VkLgogICovCisjaWZuZGVmIFZJ TUFHRQogI2RlZmluZSBCV19NRVRFUl9CVUNLRVRTCTEwMjQKIHN0YXRpYyBzdHJ1Y3QgYndfbWV0 ZXIgKmJ3X21ldGVyX3RpbWVyc1tCV19NRVRFUl9CVUNLRVRTXTsKLXN0YXRpYyBzdHJ1Y3QgY2Fs bG91dCBid19tZXRlcl9jaDsKK3N0YXRpYyBzdHJ1Y3QgY2FsbG91dCBWX2J3X21ldGVyX2NoOwor I2VuZGlmIC8qICFWSU1BR0UgKi8KICNkZWZpbmUgQldfTUVURVJfUEVSSU9EIChoeikJCS8qIHBl cmlvZGljYWwgaGFuZGxpbmcgb2YgYncgbWV0ZXJzICovCiAKIC8qCiAgKiBQZW5kaW5nIHVwY2Fs bHMgYXJlIHN0b3JlZCBpbiBhIHZlY3RvciB3aGljaCBpcyBmbHVzaGVkIHdoZW4KICAqIGZ1bGws IG9yIHBlcmlvZGljYWxseQogICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCBid191 cGNhbGwJYndfdXBjYWxsc1tCV19VUENBTExTX01BWF07CiBzdGF0aWMgdV9pbnQJYndfdXBjYWxs c19uOyAvKiAjIG9mIHBlbmRpbmcgdXBjYWxscyAqLwogc3RhdGljIHN0cnVjdCBjYWxsb3V0IGJ3 X3VwY2FsbHNfY2g7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogI2RlZmluZSBCV19VUENBTExTX1BF UklPRCAoaHopCQkvKiBwZXJpb2RpY2FsIGZsdXNoIG9mIGJ3IHVwY2FsbHMgKi8KIAorI2lmbmRl ZiBWSU1BR0UKIHN0YXRpYyBzdHJ1Y3QgcGltc3RhdCBwaW1zdGF0OworI2VuZGlmIC8qICFWSU1B R0UgKi8KIAogU1lTQ1RMX05PREUoX25ldF9pbmV0LCBJUFBST1RPX1BJTSwgcGltLCBDVExGTEFH X1JXLCAwLCAiUElNIik7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldF9waW0sIFBJTUNUTF9TVEFU Uywgc3RhdHMsIENUTEZMQUdfUkQsCi0gICAgJnBpbXN0YXQsIHBpbXN0YXQsCitTWVNDVExfVl9T VFJVQ1QoVl9ORVQsIHZuZXRfbXJvdXRlLCBfbmV0X2luZXRfcGltLCBQSU1DVExfU1RBVFMsIHN0 YXRzLAorICAgIENUTEZMQUdfUkQsIHBpbXN0YXQsIHBpbXN0YXQsCiAgICAgIlBJTSBTdGF0aXN0 aWNzIChzdHJ1Y3QgcGltc3RhdCwgbmV0aW5ldC9waW1fdmFyLmgpIik7CiAKIHN0YXRpYyB1X2xv bmcJcGltX3NxdWVsY2hfd2hvbGVwa3QgPSAwOwpAQCAtMjIyLDYgKzI0OSw3IEBACiAgICAgJnBp bV9zcXVlbGNoX3dob2xlcGt0LCAwLAogICAgICJEaXNhYmxlIElHTVBfV0hPTEVQS1Qgbm90aWZp Y2F0aW9ucyBpZiByZW5kZXp2b3VzIHBvaW50IGlzIHVuc3BlY2lmaWVkIik7CiAKKwogZXh0ZXJu ICBzdHJ1Y3QgZG9tYWluIGluZXRkb21haW47CiBzdHJ1Y3QgcHJvdG9zdyBpbl9waW1fcHJvdG9z dyA9IHsKIAkucHJfdHlwZSA9CQlTT0NLX1JBVywKQEAgLTI5MSwxMyArMzE5LDE3IEBACiAgICAg MAkJCQkvKiBmbGFncyAqLwogfTsKIAorI2lmbmRlZiBWSU1BR0UKIHN0YXRpYyBzdHJ1Y3QgaWZu ZXQgbXVsdGljYXN0X3JlZ2lzdGVyX2lmOwogc3RhdGljIHZpZmlfdCByZWdfdmlmX251bSA9IFZJ RklfSU5WQUxJRDsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAKIC8qCiAgKiBQcml2YXRlIHZhcmlh Ymxlcy4KICAqLworI2lmbmRlZiBWSU1BR0UKIHN0YXRpYyB2aWZpX3QJICAgbnVtdmlmczsKKyNl bmRpZiAvKiAhVklNQUdFICovCiAKIHN0YXRpYyB1X2xvbmcJWF9pcF9tY2FzdF9zcmMoaW50IHZp ZmkpOwogc3RhdGljIGludAlYX2lwX21mb3J3YXJkKHN0cnVjdCBpcCAqaXAsIHN0cnVjdCBpZm5l dCAqaWZwLApAQCAtMzM3LDcgKzM2OSw3IEBACiBzdGF0aWMgdm9pZCBid191cGNhbGxzX3NlbmQo dm9pZCk7CiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9id19tZXRlcihzdHJ1Y3QgYndfbWV0ZXIgKngs IHN0cnVjdCB0aW1ldmFsICpub3dwKTsKIHN0YXRpYyB2b2lkIHVuc2NoZWR1bGVfYndfbWV0ZXIo c3RydWN0IGJ3X21ldGVyICp4KTsKLXN0YXRpYyB2b2lkIGJ3X21ldGVyX3Byb2Nlc3Modm9pZCk7 CitzdGF0aWMgdm9pZCBid19tZXRlcl9wcm9jZXNzKHN0cnVjdCB2bmV0ICp2bmV0KTsKIHN0YXRp YyB2b2lkIGV4cGlyZV9id191cGNhbGxzX3NlbmQodm9pZCAqKTsKIHN0YXRpYyB2b2lkIGV4cGly ZV9id19tZXRlcl9wcm9jZXNzKHZvaWQgKik7CiAKQEAgLTM1Miw3ICszODQsOSBAQAogLyoKICAq IHdoZXRoZXIgb3Igbm90IHNwZWNpYWwgUElNIGFzc2VydCBwcm9jZXNzaW5nIGlzIGVuYWJsZWQu CiAgKi8KKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgaW50IHBpbV9hc3NlcnQ7CisjZW5kaWYgLyog IVZJTUFHRSAqLwogLyoKICAqIFJhdGUgbGltaXQgZm9yIGFzc2VydCBub3RpZmljYXRpb24gbWVz c2FnZXMsIGluIHVzZWMKICAqLwpAQCAtMzY3LDcgKzQwMSw5IEBACiAJCQkJCSBNUlRfTUZDX0ZM QUdTX0JPUkRFUl9WSUYgfAogCQkJCQkgTVJUX01GQ19SUCB8CiAJCQkJCSBNUlRfTUZDX0JXX1VQ Q0FMTCk7CisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVpbnQzMl90IG1ydF9hcGlfY29uZmlnID0g MDsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAKIC8qCiAgKiBIYXNoIGZ1bmN0aW9uIGZvciBhIHNv dXJjZSwgZ3JvdXAgZW50cnkKQEAgLTM4MywxMSArNDE5LDEyIEBACiBzdGF0aWMgc3RydWN0IG1m YyAqCiBtZmNfZmluZChpbl9hZGRyX3QgbywgaW5fYWRkcl90IGcpCiB7CisgICAgSU5JVF9WTkVU X01ST1VURShjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgbWZjICpydDsKIAogICAgIE1GQ19MT0NLX0FT U0VSVCgpOwogCi0gICAgZm9yIChydCA9IG1mY3RhYmxlW01GQ0hBU0gobyxnKV07IHJ0OyBydCA9 IHJ0LT5tZmNfbmV4dCkKKyAgICBmb3IgKHJ0ID0gVl9tZmN0YWJsZVtNRkNIQVNIKG8sZyldOyBy dDsgcnQgPSBydC0+bWZjX25leHQpCiAJaWYgKChydC0+bWZjX29yaWdpbi5zX2FkZHIgPT0gbykg JiYKIAkJKHJ0LT5tZmNfbWNhc3RncnAuc19hZGRyID09IGcpICYmIChydC0+bWZjX3N0YWxsID09 IE5VTEwpKQogCSAgICBicmVhazsKQEAgLTQyNCw3ICs0NjEsOCBAQAogc3RhdGljIGludAogWF9p cF9tcm91dGVyX3NldChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpCiB7 Ci0gICAgSU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9WTkVUX0lORVQoc28tPnNv X3ZuZXQpOworICAgIElOSVRfVk5FVF9NUk9VVEUoc28tPnNvX3ZuZXQpOwogICAgIGludAllcnJv ciwgb3B0dmFsOwogICAgIHZpZmlfdAl2aWZpOwogICAgIHN0cnVjdAl2aWZjdGwgdmlmYzsKQEAg LTQ2OCw3ICs1MDYsNyBAQAogCSAqIHNlbGVjdCBkYXRhIHNpemUgZGVwZW5kaW5nIG9uIEFQSSB2 ZXJzaW9uLgogCSAqLwogCWlmIChzb3B0LT5zb3B0X25hbWUgPT0gTVJUX0FERF9NRkMgJiYKLQkJ bXJ0X2FwaV9jb25maWcgJiBNUlRfQVBJX0ZMQUdTX0FMTCkgeworCQlWX21ydF9hcGlfY29uZmln ICYgTVJUX0FQSV9GTEFHU19BTEwpIHsKIAkgICAgZXJyb3IgPSBzb29wdGNvcHlpbihzb3B0LCAm bWZjLCBzaXplb2Yoc3RydWN0IG1mY2N0bDIpLAogCQkJCXNpemVvZihzdHJ1Y3QgbWZjY3RsMikp OwogCX0gZWxzZSB7CkBAIC01MjUsNiArNTYzLDcgQEAKIHN0YXRpYyBpbnQKIFhfaXBfbXJvdXRl cl9nZXQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KQogeworICAgIElO SVRfVk5FVF9NUk9VVEUoc28tPnNvX3ZuZXQpOwogICAgIGludCBlcnJvcjsKICAgICBzdGF0aWMg aW50IHZlcnNpb24gPSAweDAzMDU7IC8qICEhISB3aHkgaXMgdGhpcyBoZXJlPyBYWFggKi8KIApA QCAtNTM0LDcgKzU3Myw3IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIE1SVF9BU1NFUlQ6Ci0JZXJy b3IgPSBzb29wdGNvcHlvdXQoc29wdCwgJnBpbV9hc3NlcnQsIHNpemVvZiBwaW1fYXNzZXJ0KTsK KwllcnJvciA9IHNvb3B0Y29weW91dChzb3B0LCAmVl9waW1fYXNzZXJ0LCBzaXplb2YgVl9waW1f YXNzZXJ0KTsKIAlicmVhazsKIAogICAgIGNhc2UgTVJUX0FQSV9TVVBQT1JUOgpAQCAtNTQyLDcg KzU4MSw3IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIE1SVF9BUElfQ09ORklHOgotCWVycm9yID0g c29vcHRjb3B5b3V0KHNvcHQsICZtcnRfYXBpX2NvbmZpZywgc2l6ZW9mIG1ydF9hcGlfY29uZmln KTsKKwllcnJvciA9IHNvb3B0Y29weW91dChzb3B0LCAmVl9tcnRfYXBpX2NvbmZpZywgc2l6ZW9m IFZfbXJ0X2FwaV9jb25maWcpOwogCWJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTU5MCw2ICs2 MjksNyBAQAogc3RhdGljIGludAogZ2V0X3NnX2NudChzdHJ1Y3Qgc2lvY19zZ19yZXEgKnJlcSkK IHsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIHN0cnVjdCBtZmMgKnJ0Owog CiAgICAgTUZDX0xPQ0soKTsKQEAgLTYxMiwxOCArNjUyLDE5IEBACiBzdGF0aWMgaW50CiBnZXRf dmlmX2NudChzdHJ1Y3Qgc2lvY192aWZfcmVxICpyZXEpCiB7CisgICAgSU5JVF9WTkVUX01ST1VU RShjdXJ2bmV0KTsKICAgICB2aWZpX3QgdmlmaSA9IHJlcS0+dmlmaTsKIAogICAgIFZJRl9MT0NL KCk7Ci0gICAgaWYgKHZpZmkgPj0gbnVtdmlmcykgeworICAgIGlmICh2aWZpID49IFZfbnVtdmlm cykgewogCVZJRl9VTkxPQ0soKTsKIAlyZXR1cm4gRUlOVkFMOwogICAgIH0KIAotICAgIHJlcS0+ aWNvdW50ID0gdmlmdGFibGVbdmlmaV0udl9wa3RfaW47Ci0gICAgcmVxLT5vY291bnQgPSB2aWZ0 YWJsZVt2aWZpXS52X3BrdF9vdXQ7Ci0gICAgcmVxLT5pYnl0ZXMgPSB2aWZ0YWJsZVt2aWZpXS52 X2J5dGVzX2luOwotICAgIHJlcS0+b2J5dGVzID0gdmlmdGFibGVbdmlmaV0udl9ieXRlc19vdXQ7 CisgICAgcmVxLT5pY291bnQgPSBWX3ZpZnRhYmxlW3ZpZmldLnZfcGt0X2luOworICAgIHJlcS0+ b2NvdW50ID0gVl92aWZ0YWJsZVt2aWZpXS52X3BrdF9vdXQ7CisgICAgcmVxLT5pYnl0ZXMgPSBW X3ZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfaW47CisgICAgcmVxLT5vYnl0ZXMgPSBWX3ZpZnRhYmxl W3ZpZmldLnZfYnl0ZXNfb3V0OwogICAgIFZJRl9VTkxPQ0soKTsKIAogICAgIHJldHVybiAwOwpA QCAtNjMyLDI0ICs2NzMsMzAgQEAKIHN0YXRpYyB2b2lkCiBpcF9tcm91dGVyX3Jlc2V0KHZvaWQp CiB7Ci0gICAgYnplcm8oKGNhZGRyX3QpbWZjdGFibGUsIHNpemVvZihtZmN0YWJsZSkpOwotICAg IGJ6ZXJvKChjYWRkcl90KW5leHBpcmUsIHNpemVvZihuZXhwaXJlKSk7Ci0KLSAgICBwaW1fYXNz ZXJ0ID0gMDsKLSAgICBtcnRfYXBpX2NvbmZpZyA9IDA7Ci0KLSAgICBjYWxsb3V0X2luaXQoJmV4 cGlyZV91cGNhbGxzX2NoLCBDQUxMT1VUX01QU0FGRSk7Ci0KLSAgICBid191cGNhbGxzX24gPSAw OwotICAgIGJ6ZXJvKChjYWRkcl90KWJ3X21ldGVyX3RpbWVycywgc2l6ZW9mKGJ3X21ldGVyX3Rp bWVycykpOwotICAgIGNhbGxvdXRfaW5pdCgmYndfdXBjYWxsc19jaCwgQ0FMTE9VVF9NUFNBRkUp OwotICAgIGNhbGxvdXRfaW5pdCgmYndfbWV0ZXJfY2gsIENBTExPVVRfTVBTQUZFKTsKKyAgICBJ TklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOworICAgIGJ6ZXJvKChjYWRkcl90KVZfbWZjdGFibGUs IHNpemVvZihWX21mY3RhYmxlKSk7CisgICAgYnplcm8oKGNhZGRyX3QpVl9uZXhwaXJlLCBzaXpl b2YoVl9uZXhwaXJlKSk7CisgICAgaWYgKFZfcmVnX3ZpZl9udW0gIT0gVklGSV9JTlZBTElEKQor CUlGX0FERFJfTE9DS19ERVNUUk9ZKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZik7CisgICAgYnpl cm8oJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmLCBzaXplb2YoVl9tdWx0aWNhc3RfcmVnaXN0ZXJf aWYpKTsKKworICAgIFZfcmVnX3ZpZl9udW0gPSBWSUZJX0lOVkFMSUQ7CisgICAgVl9waW1fYXNz ZXJ0ID0gMDsKKyAgICBWX21ydF9hcGlfY29uZmlnID0gMDsKKyAgICAKKyAgICBjYWxsb3V0X2lu aXQoJlZfZXhwaXJlX3VwY2FsbHNfY2gsIENBTExPVVRfTVBTQUZFKTsKKworICAgIFZfYndfdXBj YWxsc19uID0gMDsKKyAgICBiemVybygoY2FkZHJfdClWX2J3X21ldGVyX3RpbWVycywgc2l6ZW9m KFZfYndfbWV0ZXJfdGltZXJzKSk7CisgICAgY2FsbG91dF9pbml0KCZWX2J3X3VwY2FsbHNfY2gs IENBTExPVVRfTVBTQUZFKTsKKyAgICBjYWxsb3V0X2luaXQoJlZfYndfbWV0ZXJfY2gsIENBTExP VVRfTVBTQUZFKTsKIH0KIAogc3RhdGljIHZvaWQKIGlmX2RldGFjaGVkX2V2ZW50KHZvaWQgKmFy ZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCiB7CiAgICAgSU5JVF9WTkVUX0lORVQoY3Vy dm5ldCk7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAgICB2aWZpX3QgdmlmaTsK ICAgICBpbnQgaTsKICAgICBzdHJ1Y3QgbWZjICptZmM7CkBAIC02NzYsMTIgKzcyMywxMiBAQAog ICAgICAqLwogICAgIFZJRl9MT0NLKCk7CiAgICAgTUZDX0xPQ0soKTsKLSAgICBmb3IgKHZpZmkg PSAwOyB2aWZpIDwgbnVtdmlmczsgdmlmaSsrKSB7Ci0JaWYgKHZpZnRhYmxlW3ZpZmldLnZfaWZw ICE9IGlmcCkKKyAgICBmb3IgKHZpZmkgPSAwOyB2aWZpIDwgVl9udW12aWZzOyB2aWZpKyspIHsK KwlpZiAoVl92aWZ0YWJsZVt2aWZpXS52X2lmcCAhPSBpZnApCiAJCWNvbnRpbnVlOwogCWZvciAo aSA9IDA7IGkgPCBNRkNUQkxTSVo7IGkrKykgewotCSAgICBwcG1mYyA9ICZtZmN0YWJsZVtpXTsK LQkgICAgZm9yIChtZmMgPSBtZmN0YWJsZVtpXTsgbWZjICE9IE5VTEw7ICkgeworCSAgICBwcG1m YyA9ICZWX21mY3RhYmxlW2ldOworCSAgICBmb3IgKG1mYyA9IFZfbWZjdGFibGVbaV07IG1mYyAh PSBOVUxMOyApIHsKIAkJbm1mYyA9IG1mYy0+bWZjX25leHQ7CiAJCWlmIChtZmMtPm1mY19wYXJl bnQgPT0gdmlmaSkgewogCQkgICAgZm9yIChwcSA9IG1mYy0+bWZjX3N0YWxsOyBwcSAhPSBOVUxM OyApIHsKQEAgLTcxMyw5ICs3NjAsMTAgQEAKIHN0YXRpYyBpbnQKIGlwX21yb3V0ZXJfaW5pdChz dHJ1Y3Qgc29ja2V0ICpzbywgaW50IHZlcnNpb24pCiB7Ci0gICAgSU5JVF9WTkVUX0lORVQoY3Vy dm5ldCk7CisgICAgSU5JVF9WTkVUX0lORVQoc28tPnNvX3ZuZXQpOworICAgIElOSVRfVk5FVF9N Uk9VVEUoc28tPnNvX3ZuZXQpOwogCi0gICAgaWYgKG1ydGRlYnVnKQorICAgIGlmIChWX21ydGRl YnVnKQogCWxvZyhMT0dfREVCVUcsICJpcF9tcm91dGVyX2luaXQ6IHNvX3R5cGUgPSAlZCwgcHJf cHJvdG9jb2wgPSAlZFxuIiwKIAkgICAgc28tPnNvX3R5cGUsIHNvLT5zb19wcm90by0+cHJfcHJv dG9jb2wpOwogCkBAIC03MzIsMjQgKzc4MCwyNSBAQAogCXJldHVybiBFQUREUklOVVNFOwogICAg IH0KIAotICAgIGlmX2RldGFjaF9ldmVudF90YWcgPSBFVkVOVEhBTkRMRVJfUkVHSVNURVIoaWZu ZXRfZGVwYXJ0dXJlX2V2ZW50LCAKKyAgICBWX2lmX2RldGFjaF9ldmVudF90YWcgPSBFVkVOVEhB TkRMRVJfUkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LCAKICAgICAgICAgaWZfZGV0YWNo ZWRfZXZlbnQsIE5VTEwsIEVWRU5USEFORExFUl9QUklfQU5ZKTsKLSAgICBpZiAoaWZfZGV0YWNo X2V2ZW50X3RhZyA9PSBOVUxMKSB7CisgICAgaWYgKFZfaWZfZGV0YWNoX2V2ZW50X3RhZyA9PSBO VUxMKSB7CiAJTVJPVVRFUl9VTkxPQ0soKTsKIAlyZXR1cm4gKEVOT01FTSk7CiAgICAgfQogCi0g ICAgY2FsbG91dF9yZXNldCgmZXhwaXJlX3VwY2FsbHNfY2gsIEVYUElSRV9USU1FT1VULCBleHBp cmVfdXBjYWxscywgTlVMTCk7Ci0KLSAgICBjYWxsb3V0X3Jlc2V0KCZid191cGNhbGxzX2NoLCBC V19VUENBTExTX1BFUklPRCwKLQlleHBpcmVfYndfdXBjYWxsc19zZW5kLCBOVUxMKTsKLSAgICBj YWxsb3V0X3Jlc2V0KCZid19tZXRlcl9jaCwgQldfTUVURVJfUEVSSU9ELCBleHBpcmVfYndfbWV0 ZXJfcHJvY2VzcywgTlVMTCk7CisgICAgY2FsbG91dF9yZXNldCgmVl9leHBpcmVfdXBjYWxsc19j aCwgRVhQSVJFX1RJTUVPVVQsCisJCWV4cGlyZV91cGNhbGxzLCAodm9pZCAqKXNvLT5zb192bmV0 KTsKKyAgICBjYWxsb3V0X3Jlc2V0KCZWX2J3X3VwY2FsbHNfY2gsIEJXX1VQQ0FMTFNfUEVSSU9E LAorCQlleHBpcmVfYndfdXBjYWxsc19zZW5kLCAodm9pZCAqKXNvLT5zb192bmV0KTsKKyAgICBj YWxsb3V0X3Jlc2V0KCZWX2J3X21ldGVyX2NoLCBCV19NRVRFUl9QRVJJT0QsCisJCWV4cGlyZV9i d19tZXRlcl9wcm9jZXNzLCAodm9pZCAqKXNvLT5zb192bmV0KTsKIAogICAgIFZfaXBfbXJvdXRl ciA9IHNvOwogCiAgICAgTVJPVVRFUl9VTkxPQ0soKTsKIAotICAgIGlmIChtcnRkZWJ1ZykKKyAg ICBpZiAoVl9tcnRkZWJ1ZykKIAlsb2coTE9HX0RFQlVHLCAiaXBfbXJvdXRlcl9pbml0XG4iKTsK IAogICAgIHJldHVybiAwOwpAQCAtNzYyLDYgKzgxMSw3IEBACiBYX2lwX21yb3V0ZXJfZG9uZSh2 b2lkKQogewogICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOworICAgIElOSVRfVk5FVF9NUk9V VEUoY3Vydm5ldCk7CiAgICAgdmlmaV90IHZpZmk7CiAgICAgaW50IGk7CiAgICAgc3RydWN0IGlm bmV0ICppZnA7CkBAIC03ODAsNDEgKzgzMCw0MSBAQAogICAgICAqIERldGFjaC9kaXNhYmxlIGhv b2tzIHRvIHRoZSByZXNldCBvZiB0aGUgc3lzdGVtLgogICAgICAqLwogICAgIFZfaXBfbXJvdXRl ciA9IE5VTEw7Ci0gICAgbXJ0X2FwaV9jb25maWcgPSAwOworICAgIFZfbXJ0X2FwaV9jb25maWcg PSAwOwogCiAgICAgVklGX0xPQ0soKTsKICAgICAvKgogICAgICAqIEZvciBlYWNoIHBoeWludCBp biB1c2UsIGRpc2FibGUgcHJvbWlzY3VvdXMgcmVjZXB0aW9uIG9mIGFsbCBJUAogICAgICAqIG11 bHRpY2FzdHMuCiAgICAgICovCi0gICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IG51bXZpZnM7IHZp ZmkrKykgewotCWlmICh2aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkciAhPSAwICYmCi0J CSEodmlmdGFibGVbdmlmaV0udl9mbGFncyAmIChWSUZGX1RVTk5FTCB8IFZJRkZfUkVHSVNURVIp KSkgeworICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBWX251bXZpZnM7IHZpZmkrKykgeworCWlm IChWX3ZpZnRhYmxlW3ZpZmldLnZfbGNsX2FkZHIuc19hZGRyICE9IDAgJiYKKwkJIShWX3ZpZnRh YmxlW3ZpZmldLnZfZmxhZ3MgJiAoVklGRl9UVU5ORUwgfCBWSUZGX1JFR0lTVEVSKSkpIHsKIAkg ICAgc3RydWN0IHNvY2thZGRyX2luICpzbyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmKGlmci5p ZnJfYWRkcik7CiAKIAkgICAgc28tPnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu KTsKIAkgICAgc28tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCSAgICBzby0+c2luX2FkZHIuc19h ZGRyID0gSU5BRERSX0FOWTsKLQkgICAgaWZwID0gdmlmdGFibGVbdmlmaV0udl9pZnA7CisJICAg IGlmcCA9IFZfdmlmdGFibGVbdmlmaV0udl9pZnA7CiAJICAgIGlmX2FsbG11bHRpKGlmcCwgMCk7 CiAJfQogICAgIH0KLSAgICBiemVybygoY2FkZHJfdCl2aWZ0YWJsZSwgc2l6ZW9mKHZpZnRhYmxl KSk7Ci0gICAgbnVtdmlmcyA9IDA7Ci0gICAgcGltX2Fzc2VydCA9IDA7CisgICAgYnplcm8oKGNh ZGRyX3QpVl92aWZ0YWJsZSwgc2l6ZW9mKFZfdmlmdGFibGUpKTsKKyAgICBWX251bXZpZnMgPSAw OworICAgIFZfcGltX2Fzc2VydCA9IDA7CiAgICAgVklGX1VOTE9DSygpOwotICAgIEVWRU5USEFO RExFUl9ERVJFR0lTVEVSKGlmbmV0X2RlcGFydHVyZV9ldmVudCwgaWZfZGV0YWNoX2V2ZW50X3Rh Zyk7CisgICAgRVZFTlRIQU5ETEVSX0RFUkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LCBW X2lmX2RldGFjaF9ldmVudF90YWcpOwogCiAgICAgLyoKICAgICAgKiBGcmVlIGFsbCBtdWx0aWNh c3QgZm9yd2FyZGluZyBjYWNoZSBlbnRyaWVzLgogICAgICAqLwotICAgIGNhbGxvdXRfc3RvcCgm ZXhwaXJlX3VwY2FsbHNfY2gpOwotICAgIGNhbGxvdXRfc3RvcCgmYndfdXBjYWxsc19jaCk7Ci0g ICAgY2FsbG91dF9zdG9wKCZid19tZXRlcl9jaCk7CisgICAgY2FsbG91dF9zdG9wKCZWX2V4cGly ZV91cGNhbGxzX2NoKTsKKyAgICBjYWxsb3V0X3N0b3AoJlZfYndfdXBjYWxsc19jaCk7CisgICAg Y2FsbG91dF9zdG9wKCZWX2J3X21ldGVyX2NoKTsKIAogICAgIE1GQ19MT0NLKCk7CiAgICAgZm9y IChpID0gMDsgaSA8IE1GQ1RCTFNJWjsgaSsrKSB7Ci0JZm9yIChydCA9IG1mY3RhYmxlW2ldOyBy dCAhPSBOVUxMOyApIHsKKwlmb3IgKHJ0ID0gVl9tZmN0YWJsZVtpXTsgcnQgIT0gTlVMTDsgKSB7 CiAJICAgIHN0cnVjdCBtZmMgKm5yID0gcnQtPm1mY19uZXh0OwogCiAJICAgIGZvciAocnRlID0g cnQtPm1mY19zdGFsbDsgcnRlICE9IE5VTEw7ICkgewpAQCAtODI5LDE3ICs4NzksMTkgQEAKIAkg ICAgcnQgPSBucjsKIAl9CiAgICAgfQotICAgIGJ6ZXJvKChjYWRkcl90KW1mY3RhYmxlLCBzaXpl b2YobWZjdGFibGUpKTsKLSAgICBiemVybygoY2FkZHJfdCluZXhwaXJlLCBzaXplb2YobmV4cGly ZSkpOwotICAgIGJ3X3VwY2FsbHNfbiA9IDA7Ci0gICAgYnplcm8oYndfbWV0ZXJfdGltZXJzLCBz aXplb2YoYndfbWV0ZXJfdGltZXJzKSk7CisgICAgYnplcm8oKGNhZGRyX3QpVl9tZmN0YWJsZSwg c2l6ZW9mKFZfbWZjdGFibGUpKTsKKyAgICBiemVybygoY2FkZHJfdClWX25leHBpcmUsIHNpemVv ZihWX25leHBpcmUpKTsKKyAgICBWX2J3X3VwY2FsbHNfbiA9IDA7CisgICAgYnplcm8oVl9id19t ZXRlcl90aW1lcnMsIHNpemVvZihWX2J3X21ldGVyX3RpbWVycykpOwogICAgIE1GQ19VTkxPQ0so KTsKIAotICAgIHJlZ192aWZfbnVtID0gVklGSV9JTlZBTElEOworICAgIGlmIChWX3JlZ192aWZf bnVtICE9IFZJRklfSU5WQUxJRCkKKwlJRl9BRERSX0xPQ0tfREVTVFJPWSgmVl9tdWx0aWNhc3Rf cmVnaXN0ZXJfaWYpOworICAgIFZfcmVnX3ZpZl9udW0gPSBWSUZJX0lOVkFMSUQ7CiAKICAgICBN Uk9VVEVSX1VOTE9DSygpOwogCi0gICAgaWYgKG1ydGRlYnVnKQorICAgIGlmIChWX21ydGRlYnVn KQogCWxvZyhMT0dfREVCVUcsICJpcF9tcm91dGVyX2RvbmVcbiIpOwogCiAgICAgcmV0dXJuIDA7 CkBAIC04NTEsMTAgKzkwMywxMSBAQAogc3RhdGljIGludAogc2V0X2Fzc2VydChpbnQgaSkKIHsK KyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIGlmICgoaSAhPSAxKSAmJiAoaSAh PSAwKSkKIAlyZXR1cm4gRUlOVkFMOwogCi0gICAgcGltX2Fzc2VydCA9IGk7CisgICAgVl9waW1f YXNzZXJ0ID0gaTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtODY1LDYgKzkxOCw3IEBACiBpbnQK IHNldF9hcGlfY29uZmlnKHVpbnQzMl90ICphcGl2YWwpCiB7CisgICAgSU5JVF9WTkVUX01ST1VU RShjdXJ2bmV0KTsKICAgICBpbnQgaTsKIAogICAgIC8qCkBAIC04NzQsMjMgKzkyOCwyMyBAQAog ICAgICAqICAtIHBpbV9hc3NlcnQgaXMgbm90IGVuYWJsZWQKICAgICAgKiAgLSB0aGUgTUZDIHRh YmxlIGlzIGVtcHR5CiAgICAgICovCi0gICAgaWYgKG51bXZpZnMgPiAwKSB7CisgICAgaWYgKFZf bnVtdmlmcyA+IDApIHsKIAkqYXBpdmFsID0gMDsKIAlyZXR1cm4gRVBFUk07CiAgICAgfQotICAg IGlmIChwaW1fYXNzZXJ0KSB7CisgICAgaWYgKFZfcGltX2Fzc2VydCkgewogCSphcGl2YWwgPSAw OwogCXJldHVybiBFUEVSTTsKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IE1GQ1RCTFNJWjsg aSsrKSB7Ci0JaWYgKG1mY3RhYmxlW2ldICE9IE5VTEwpIHsKKwlpZiAoVl9tZmN0YWJsZVtpXSAh PSBOVUxMKSB7CiAJICAgICphcGl2YWwgPSAwOwogCSAgICByZXR1cm4gRVBFUk07CiAJfQogICAg IH0KIAotICAgIG1ydF9hcGlfY29uZmlnID0gKmFwaXZhbCAmIG1ydF9hcGlfc3VwcG9ydDsKLSAg ICAqYXBpdmFsID0gbXJ0X2FwaV9jb25maWc7CisgICAgVl9tcnRfYXBpX2NvbmZpZyA9ICphcGl2 YWwgJiBtcnRfYXBpX3N1cHBvcnQ7CisgICAgKmFwaXZhbCA9IFZfbXJ0X2FwaV9jb25maWc7CiAK ICAgICByZXR1cm4gMDsKIH0KQEAgLTkwMSw3ICs5NTUsOCBAQAogc3RhdGljIGludAogYWRkX3Zp ZihzdHJ1Y3QgdmlmY3RsICp2aWZjcCkKIHsKLSAgICBzdHJ1Y3QgdmlmICp2aWZwID0gdmlmdGFi bGUgKyB2aWZjcC0+dmlmY192aWZpOworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7Cisg ICAgc3RydWN0IHZpZiAqdmlmcCA9IFZfdmlmdGFibGUgKyB2aWZjcC0+dmlmY192aWZpOwogICAg IHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7c2l6ZW9mIHNpbiwgQUZfSU5FVH07CiAgICAgc3Ry dWN0IGlmYWRkciAqaWZhOwogICAgIHN0cnVjdCBpZm5ldCAqaWZwOwpAQCAtOTUwLDE0ICsxMDA1 LDE5IEBACiAJVklGX1VOTE9DSygpOwogCXJldHVybiBFT1BOT1RTVVBQOwogICAgIH0gZWxzZSBp ZiAodmlmY3AtPnZpZmNfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKSB7Ci0JaWZwID0gJm11bHRpY2Fz dF9yZWdpc3Rlcl9pZjsKLQlpZiAobXJ0ZGVidWcpCisJaWZwID0gJlZfbXVsdGljYXN0X3JlZ2lz dGVyX2lmOworCWlmIChWX21ydGRlYnVnKQogCSAgICBsb2coTE9HX0RFQlVHLCAiQWRkaW5nIGEg cmVnaXN0ZXIgdmlmLCBpZnA6ICVwXG4iLAotCQkgICAgKHZvaWQgKikmbXVsdGljYXN0X3JlZ2lz dGVyX2lmKTsKLQlpZiAocmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSB7Ci0JICAgIGlmX2lu aXRuYW1lKCZtdWx0aWNhc3RfcmVnaXN0ZXJfaWYsICJyZWdpc3Rlcl92aWYiLCAwKTsKLQkgICAg bXVsdGljYXN0X3JlZ2lzdGVyX2lmLmlmX2ZsYWdzID0gSUZGX0xPT1BCQUNLOwotCSAgICByZWdf dmlmX251bSA9IHZpZmNwLT52aWZjX3ZpZmk7CisJCSAgICAodm9pZCAqKSZWX211bHRpY2FzdF9y ZWdpc3Rlcl9pZik7CisJaWYgKFZfcmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSB7CisJICAg IGlmX2luaXRuYW1lKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZiwgInJlZ2lzdGVyX3ZpZiIsIDAp OworCSAgICBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZi5pZl9mbGFncyA9IElGRl9MT09QQkFDSzsK KwkgICAgVl9yZWdfdmlmX251bSA9IHZpZmNwLT52aWZjX3ZpZmk7CisJICAgIElGX0FERFJfTE9D S19JTklUKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZik7CisjaWZkZWYgVklNQUdFCisJICAgIFZf bXVsdGljYXN0X3JlZ2lzdGVyX2lmLmlmX3ZuZXQgPSBjdXJ2bmV0OworCSAgICBWX211bHRpY2Fz dF9yZWdpc3Rlcl9pZi5pZl9ob21lX3ZuZXQgPSBjdXJ2bmV0OworI2VuZGlmIC8qIFZJTUFHRSAq LwogCX0KICAgICB9IGVsc2UgewkJLyogTWFrZSBzdXJlIHRoZSBpbnRlcmZhY2Ugc3VwcG9ydHMg bXVsdGljYXN0ICovCiAJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX01VTFRJQ0FTVCkgPT0gMCkg ewpAQCAtOTg4LDExICsxMDQ4LDExIEBACiAgICAgYnplcm8oJnZpZnAtPnZfcm91dGUsIHNpemVv Zih2aWZwLT52X3JvdXRlKSk7CiAKICAgICAvKiBBZGp1c3QgbnVtdmlmcyB1cCBpZiB0aGUgdmlm aSBpcyBoaWdoZXIgdGhhbiBudW12aWZzICovCi0gICAgaWYgKG51bXZpZnMgPD0gdmlmY3AtPnZp ZmNfdmlmaSkgbnVtdmlmcyA9IHZpZmNwLT52aWZjX3ZpZmkgKyAxOworICAgIGlmIChWX251bXZp ZnMgPD0gdmlmY3AtPnZpZmNfdmlmaSkgVl9udW12aWZzID0gdmlmY3AtPnZpZmNfdmlmaSArIDE7 CiAKICAgICBWSUZfVU5MT0NLKCk7CiAKLSAgICBpZiAobXJ0ZGVidWcpCisgICAgaWYgKFZfbXJ0 ZGVidWcpCiAJbG9nKExPR19ERUJVRywgImFkZF92aWYgIyVkLCBsY2xhZGRyICVseCwgJXMgJWx4 LCB0aHJlc2ggJXhcbiIsCiAJICAgIHZpZmNwLT52aWZjX3ZpZmksCiAJICAgICh1X2xvbmcpbnRv aGwodmlmY3AtPnZpZmNfbGNsX2FkZHIuc19hZGRyKSwKQEAgLTEwMDksMTQgKzEwNjksMTUgQEAK IHN0YXRpYyBpbnQKIGRlbF92aWZfbG9ja2VkKHZpZmlfdCB2aWZpKQogeworICAgIElOSVRfVk5F VF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0IHZpZiAqdmlmcDsKIAogICAgIFZJRl9MT0NL X0FTU0VSVCgpOwogCi0gICAgaWYgKHZpZmkgPj0gbnVtdmlmcykgeworICAgIGlmICh2aWZpID49 IFZfbnVtdmlmcykgewogCXJldHVybiBFSU5WQUw7CiAgICAgfQotICAgIHZpZnAgPSAmdmlmdGFi bGVbdmlmaV07CisgICAgdmlmcCA9ICZWX3ZpZnRhYmxlW3ZpZmldOwogICAgIGlmICh2aWZwLT52 X2xjbF9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CiAJcmV0dXJuIEVBRERSTk9UQVZBSUw7 CiAgICAgfQpAQCAtMTAyNCwxOSArMTA4NSwyMiBAQAogICAgIGlmICghKHZpZnAtPnZfZmxhZ3Mg JiAoVklGRl9UVU5ORUwgfCBWSUZGX1JFR0lTVEVSKSkpCiAJaWZfYWxsbXVsdGkodmlmcC0+dl9p ZnAsIDApOwogCi0gICAgaWYgKHZpZnAtPnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQotCXJlZ192 aWZfbnVtID0gVklGSV9JTlZBTElEOworICAgIGlmICh2aWZwLT52X2ZsYWdzICYgVklGRl9SRUdJ U1RFUikgeworCWlmIChWX3JlZ192aWZfbnVtICE9IFZJRklfSU5WQUxJRCkKKwkgICAgSUZfQURE Ul9MT0NLX0RFU1RST1koJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmKTsKKwlWX3JlZ192aWZfbnVt ID0gVklGSV9JTlZBTElEOworICAgIH0KIAogICAgIGJ6ZXJvKChjYWRkcl90KXZpZnAsIHNpemVv ZiAoKnZpZnApKTsKIAotICAgIGlmIChtcnRkZWJ1ZykKLQlsb2coTE9HX0RFQlVHLCAiZGVsX3Zp ZiAlZCwgbnVtdmlmcyAlZFxuIiwgdmlmaSwgbnVtdmlmcyk7CisgICAgaWYgKFZfbXJ0ZGVidWcp CisJbG9nKExPR19ERUJVRywgImRlbF92aWYgJWQsIG51bXZpZnMgJWRcbiIsIHZpZmksIFZfbnVt dmlmcyk7CiAKICAgICAvKiBBZGp1c3QgbnVtdmlmcyBkb3duICovCi0gICAgZm9yICh2aWZpID0g bnVtdmlmczsgdmlmaSA+IDA7IHZpZmktLSkKLQlpZiAodmlmdGFibGVbdmlmaS0xXS52X2xjbF9h ZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKQorICAgIGZvciAodmlmaSA9IFZfbnVtdmlmczsgdmlm aSA+IDA7IHZpZmktLSkKKwlpZiAoVl92aWZ0YWJsZVt2aWZpLTFdLnZfbGNsX2FkZHIuc19hZGRy ICE9IElOQUREUl9BTlkpCiAJICAgIGJyZWFrOwotICAgIG51bXZpZnMgPSB2aWZpOworICAgIFZf bnVtdmlmcyA9IHZpZmk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTEwNDQsNiArMTEwOCw3IEBA CiBzdGF0aWMgaW50CiBkZWxfdmlmKHZpZmlfdCB2aWZpKQogeworICAgIElOSVRfVk5FVF9NUk9V VEUoY3Vydm5ldCk7CiAgICAgaW50IGNjOwogCiAgICAgVklGX0xPQ0soKTsKQEAgLTEwNTksMTYg KzExMjQsMTcgQEAKIHN0YXRpYyB2b2lkCiB1cGRhdGVfbWZjX3BhcmFtcyhzdHJ1Y3QgbWZjICpy dCwgc3RydWN0IG1mY2N0bDIgKm1mY2NwKQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5l dCk7CiAgICAgaW50IGk7CiAKICAgICBydC0+bWZjX3BhcmVudCA9IG1mY2NwLT5tZmNjX3BhcmVu dDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtdmlmczsgaSsrKSB7CisgICAgZm9yIChpID0gMDsg aSA8IFZfbnVtdmlmczsgaSsrKSB7CiAJcnQtPm1mY190dGxzW2ldID0gbWZjY3AtPm1mY2NfdHRs c1tpXTsKLQlydC0+bWZjX2ZsYWdzW2ldID0gbWZjY3AtPm1mY2NfZmxhZ3NbaV0gJiBtcnRfYXBp X2NvbmZpZyAmCisJcnQtPm1mY19mbGFnc1tpXSA9IG1mY2NwLT5tZmNjX2ZsYWdzW2ldICYgVl9t cnRfYXBpX2NvbmZpZyAmCiAJICAgIE1SVF9NRkNfRkxBR1NfQUxMOwogICAgIH0KICAgICAvKiBz ZXQgdGhlIFJQIGFkZHJlc3MgKi8KLSAgICBpZiAobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX1JQ KQorICAgIGlmIChWX21ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkKIAlydC0+bWZjX3JwID0g bWZjY3AtPm1mY2NfcnA7CiAgICAgZWxzZQogCXJ0LT5tZmNfcnAuc19hZGRyID0gSU5BRERSX0FO WTsKQEAgLTEwOTksNiArMTE2NSw3IEBACiBzdGF0aWMgaW50CiBhZGRfbWZjKHN0cnVjdCBtZmNj dGwyICptZmNjcCkKIHsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIHN0cnVj dCBtZmMgKnJ0OwogICAgIHVfbG9uZyBoYXNoOwogICAgIHN0cnVjdCBydGRldHEgKnJ0ZTsKQEAg LTExMTEsNyArMTE3OCw3IEBACiAKICAgICAvKiBJZiBhbiBlbnRyeSBhbHJlYWR5IGV4aXN0cywg anVzdCB1cGRhdGUgdGhlIGZpZWxkcyAqLwogICAgIGlmIChydCkgewotCWlmIChtcnRkZWJ1ZyAm IERFQlVHX01GQykKKwlpZiAoVl9tcnRkZWJ1ZyAmIERFQlVHX01GQykKIAkgICAgbG9nKExPR19E RUJVRywiYWRkX21mYyB1cGRhdGUgbyAlbHggZyAlbHggcCAleFxuIiwKIAkJKHVfbG9uZyludG9o bChtZmNjcC0+bWZjY19vcmlnaW4uc19hZGRyKSwKIAkJKHVfbG9uZyludG9obChtZmNjcC0+bWZj Y19tY2FzdGdycC5zX2FkZHIpLApAQCAtMTEyNyw3ICsxMTk0LDcgQEAKICAgICAgKiBGaW5kIHRo ZSBlbnRyeSBmb3Igd2hpY2ggdGhlIHVwY2FsbCB3YXMgbWFkZSBhbmQgdXBkYXRlCiAgICAgICov CiAgICAgaGFzaCA9IE1GQ0hBU0gobWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkciwgbWZjY3AtPm1m Y2NfbWNhc3RncnAuc19hZGRyKTsKLSAgICBmb3IgKHJ0ID0gbWZjdGFibGVbaGFzaF0sIG5zdGwg PSAwOyBydDsgcnQgPSBydC0+bWZjX25leHQpIHsKKyAgICBmb3IgKHJ0ID0gVl9tZmN0YWJsZVto YXNoXSwgbnN0bCA9IDA7IHJ0OyBydCA9IHJ0LT5tZmNfbmV4dCkgewogCiAJaWYgKChydC0+bWZj X29yaWdpbi5zX2FkZHIgPT0gbWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkcikgJiYKIAkJKHJ0LT5t ZmNfbWNhc3RncnAuc19hZGRyID09IG1mY2NwLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikgJiYKQEAg LTExNDAsNyArMTIwNyw3IEBACiAJCSAgICAodV9sb25nKW50b2hsKG1mY2NwLT5tZmNjX21jYXN0 Z3JwLnNfYWRkciksCiAJCSAgICBtZmNjcC0+bWZjY19wYXJlbnQsICh2b2lkICopcnQtPm1mY19z dGFsbCk7CiAKLQkgICAgaWYgKG1ydGRlYnVnICYgREVCVUdfTUZDKQorCSAgICBpZiAoVl9tcnRk ZWJ1ZyAmIERFQlVHX01GQykKIAkJbG9nKExPR19ERUJVRywiYWRkX21mYyBvICVseCBnICVseCBw ICV4IGRiZyAlcFxuIiwKIAkJICAgICh1X2xvbmcpbnRvaGwobWZjY3AtPm1mY2Nfb3JpZ2luLnNf YWRkciksCiAJCSAgICAodV9sb25nKW50b2hsKG1mY2NwLT5tZmNjX21jYXN0Z3JwLnNfYWRkciks CkBAIC0xMTQ5LDcgKzEyMTYsNyBAQAogCSAgICBpbml0X21mY19wYXJhbXMocnQsIG1mY2NwKTsK IAogCSAgICBydC0+bWZjX2V4cGlyZSA9IDA7CS8qIERvbid0IGNsZWFuIHRoaXMgZ3V5IHVwICov Ci0JICAgIG5leHBpcmVbaGFzaF0tLTsKKwkgICAgVl9uZXhwaXJlW2hhc2hdLS07CiAKIAkgICAg LyogZnJlZSBwYWNrZXRzIFFlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZW50cnkgKi8KIAkgICAgZm9y IChydGUgPSBydC0+bWZjX3N0YWxsOyBydGUgIT0gTlVMTDsgKSB7CkBAIC0xMTY4LDE4ICsxMjM1 LDE4IEBACiAgICAgICogSXQgaXMgcG9zc2libGUgdGhhdCBhbiBlbnRyeSBpcyBiZWluZyBpbnNl cnRlZCB3aXRob3V0IGFuIHVwY2FsbAogICAgICAqLwogICAgIGlmIChuc3RsID09IDApIHsKLQlp ZiAobXJ0ZGVidWcgJiBERUJVR19NRkMpCisJaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19NRkMpCiAJ ICAgIGxvZyhMT0dfREVCVUcsImFkZF9tZmMgbm8gdXBjYWxsIGggJWx1IG8gJWx4IGcgJWx4IHAg JXhcbiIsCiAJCWhhc2gsICh1X2xvbmcpbnRvaGwobWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkciks CiAJCSh1X2xvbmcpbnRvaGwobWZjY3AtPm1mY2NfbWNhc3RncnAuc19hZGRyKSwKIAkJbWZjY3At Pm1mY2NfcGFyZW50KTsKIAotCWZvciAocnQgPSBtZmN0YWJsZVtoYXNoXTsgcnQgIT0gTlVMTDsg cnQgPSBydC0+bWZjX25leHQpIHsKKwlmb3IgKHJ0ID0gVl9tZmN0YWJsZVtoYXNoXTsgcnQgIT0g TlVMTDsgcnQgPSBydC0+bWZjX25leHQpIHsKIAkgICAgaWYgKChydC0+bWZjX29yaWdpbi5zX2Fk ZHIgPT0gbWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkcikgJiYKIAkJICAgIChydC0+bWZjX21jYXN0 Z3JwLnNfYWRkciA9PSBtZmNjcC0+bWZjY19tY2FzdGdycC5zX2FkZHIpKSB7CiAJCWluaXRfbWZj X3BhcmFtcyhydCwgbWZjY3ApOwogCQlpZiAocnQtPm1mY19leHBpcmUpCi0JCSAgICBuZXhwaXJl W2hhc2hdLS07CisJCSAgICBWX25leHBpcmVbaGFzaF0tLTsKIAkJcnQtPm1mY19leHBpcmUgPSAw OwogCQlicmVhazsgLyogWFhYICovCiAJICAgIH0KQEAgLTExOTgsOCArMTI2NSw4IEBACiAKIAkg ICAgcnQtPm1mY19id19tZXRlciA9IE5VTEw7CiAJICAgIC8qIGluc2VydCBuZXcgZW50cnkgYXQg aGVhZCBvZiBoYXNoIGNoYWluICovCi0JICAgIHJ0LT5tZmNfbmV4dCA9IG1mY3RhYmxlW2hhc2hd OwotCSAgICBtZmN0YWJsZVtoYXNoXSA9IHJ0OworCSAgICBydC0+bWZjX25leHQgPSBWX21mY3Rh YmxlW2hhc2hdOworCSAgICBWX21mY3RhYmxlW2hhc2hdID0gcnQ7CiAJfQogICAgIH0KICAgICBN RkNfVU5MT0NLKCk7CkBAIC0xMjEzLDYgKzEyODAsNyBAQAogc3RhdGljIGludAogZGVsX21mYyhz dHJ1Y3QgbWZjY3RsMiAqbWZjY3ApCiB7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsK ICAgICBzdHJ1Y3QgaW5fYWRkcglvcmlnaW47CiAgICAgc3RydWN0IGluX2FkZHIJbWNhc3RncnA7 CiAgICAgc3RydWN0IG1mYwkJKnJ0OwpAQCAtMTIyMywxNCArMTI5MSwxNCBAQAogICAgIG9yaWdp biA9IG1mY2NwLT5tZmNjX29yaWdpbjsKICAgICBtY2FzdGdycCA9IG1mY2NwLT5tZmNjX21jYXN0 Z3JwOwogCi0gICAgaWYgKG1ydGRlYnVnICYgREVCVUdfTUZDKQorICAgIGlmIChWX21ydGRlYnVn ICYgREVCVUdfTUZDKQogCWxvZyhMT0dfREVCVUcsImRlbF9tZmMgb3JpZyAlbHggbWNhc3RncnAg JWx4XG4iLAogCSAgICAodV9sb25nKW50b2hsKG9yaWdpbi5zX2FkZHIpLCAodV9sb25nKW50b2hs KG1jYXN0Z3JwLnNfYWRkcikpOwogCiAgICAgTUZDX0xPQ0soKTsKIAogICAgIGhhc2ggPSBNRkNI QVNIKG9yaWdpbi5zX2FkZHIsIG1jYXN0Z3JwLnNfYWRkcik7Ci0gICAgZm9yIChucHRyID0gJm1m Y3RhYmxlW2hhc2hdOyAocnQgPSAqbnB0cikgIT0gTlVMTDsgbnB0ciA9ICZydC0+bWZjX25leHQp CisgICAgZm9yIChucHRyID0gJlZfbWZjdGFibGVbaGFzaF07IChydCA9ICpucHRyKSAhPSBOVUxM OyBucHRyID0gJnJ0LT5tZmNfbmV4dCkKIAlpZiAob3JpZ2luLnNfYWRkciA9PSBydC0+bWZjX29y aWdpbi5zX2FkZHIgJiYKIAkJbWNhc3RncnAuc19hZGRyID09IHJ0LT5tZmNfbWNhc3RncnAuc19h ZGRyICYmCiAJCXJ0LT5tZmNfc3RhbGwgPT0gTlVMTCkKQEAgLTEyOTQsMTEgKzEzNjIsMTIgQEAK ICAgICBzdHJ1Y3QgaXBfbW9wdGlvbnMgKmltbykKIHsKICAgICBJTklUX1ZORVRfSU5FVChjdXJ2 bmV0KTsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIHN0cnVjdCBtZmMgKnJ0 OwogICAgIGludCBlcnJvcjsKICAgICB2aWZpX3QgdmlmaTsKIAotICAgIGlmIChtcnRkZWJ1ZyAm IERFQlVHX0ZPUldBUkQpCisgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19GT1JXQVJEKQogCWxv ZyhMT0dfREVCVUcsICJpcF9tZm9yd2FyZDogc3JjICVseCwgZHN0ICVseCwgaWZwICVwXG4iLAog CSAgICAodV9sb25nKW50b2hsKGlwLT5pcF9zcmMuc19hZGRyKSwgKHVfbG9uZyludG9obChpcC0+ aXBfZHN0LnNfYWRkciksCiAJICAgICh2b2lkICopaWZwKTsKQEAgLTEzMjYsMTEgKzEzOTUsMTEg QEAKIAogICAgIFZJRl9MT0NLKCk7CiAgICAgTUZDX0xPQ0soKTsKLSAgICBpZiAoaW1vICYmICgo dmlmaSA9IGltby0+aW1vX211bHRpY2FzdF92aWYpIDwgbnVtdmlmcykpIHsKKyAgICBpZiAoaW1v ICYmICgodmlmaSA9IGltby0+aW1vX211bHRpY2FzdF92aWYpIDwgVl9udW12aWZzKSkgewogCWlm IChpcC0+aXBfdHRsIDwgTUFYVFRMKQogCSAgICBpcC0+aXBfdHRsKys7CS8qIGNvbXBlbnNhdGUg Zm9yIC0xIGluICpfc2VuZCByb3V0aW5lcyAqLwotCWlmIChyc3ZwZGVidWcgJiYgaXAtPmlwX3Ag PT0gSVBQUk9UT19SU1ZQKSB7Ci0JICAgIHN0cnVjdCB2aWYgKnZpZnAgPSB2aWZ0YWJsZSArIHZp Zmk7CisJaWYgKFZfcnN2cGRlYnVnICYmIGlwLT5pcF9wID09IElQUFJPVE9fUlNWUCkgeworCSAg ICBzdHJ1Y3QgdmlmICp2aWZwID0gVl92aWZ0YWJsZSArIHZpZmk7CiAKIAkgICAgcHJpbnRmKCJT ZW5kaW5nIElQUFJPVE9fUlNWUCBmcm9tICVseCB0byAlbHggb24gdmlmICVkICglcyVzKVxuIiwK IAkJKGxvbmcpbnRvaGwoaXAtPmlwX3NyYy5zX2FkZHIpLCAobG9uZyludG9obChpcC0+aXBfZHN0 LnNfYWRkciksCkBAIC0xMzQzLDcgKzE0MTIsNyBAQAogCVZJRl9VTkxPQ0soKTsKIAlyZXR1cm4g ZXJyb3I7CiAgICAgfQotICAgIGlmIChyc3ZwZGVidWcgJiYgaXAtPmlwX3AgPT0gSVBQUk9UT19S U1ZQKSB7CisgICAgaWYgKFZfcnN2cGRlYnVnICYmIGlwLT5pcF9wID09IElQUFJPVE9fUlNWUCkg ewogCXByaW50ZigiV2FybmluZzogSVBQUk9UT19SU1ZQIGZyb20gJWx4IHRvICVseCB3aXRob3V0 IHZpZiBvcHRpb25cbiIsCiAJICAgIChsb25nKW50b2hsKGlwLT5pcF9zcmMuc19hZGRyKSwgKGxv bmcpbnRvaGwoaXAtPmlwX2RzdC5zX2FkZHIpKTsKIAlpZiAoIWltbykKQEAgLTEzNjMsNyArMTQz Miw3IEBACiAgICAgLyoKICAgICAgKiBEZXRlcm1pbmUgZm9yd2FyZGluZyB2aWZzIGZyb20gdGhl IGZvcndhcmRpbmcgY2FjaGUgdGFibGUKICAgICAgKi8KLSAgICArK21ydHN0YXQubXJ0c19tZmNf bG9va3VwczsKKyAgICArK1ZfbXJ0c3RhdC5tcnRzX21mY19sb29rdXBzOwogICAgIHJ0ID0gbWZj X2ZpbmQoaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyKTsKIAogICAgIC8qIEVu dHJ5IGV4aXN0cywgc28gZm9yd2FyZCBpZiBuZWNlc3NhcnkgKi8KQEAgLTEzODMsMTAgKzE0NTIs MTAgQEAKIAl1X2xvbmcgaGFzaDsKIAlpbnQgaGxlbiA9IGlwLT5pcF9obCA8PCAyOwogCi0JKytt cnRzdGF0Lm1ydHNfbWZjX21pc3NlczsKKwkrK1ZfbXJ0c3RhdC5tcnRzX21mY19taXNzZXM7CiAK LQltcnRzdGF0Lm1ydHNfbm9fcm91dGUrKzsKLQlpZiAobXJ0ZGVidWcgJiAoREVCVUdfRk9SV0FS RCB8IERFQlVHX01GQykpCisJVl9tcnRzdGF0Lm1ydHNfbm9fcm91dGUrKzsKKwlpZiAoVl9tcnRk ZWJ1ZyAmIChERUJVR19GT1JXQVJEIHwgREVCVUdfTUZDKSkKIAkgICAgbG9nKExPR19ERUJVRywg ImlwX21mb3J3YXJkOiBubyBydGUgcyAlbHggZyAlbHhcbiIsCiAJCSh1X2xvbmcpbnRvaGwoaXAt PmlwX3NyYy5zX2FkZHIpLAogCQkodV9sb25nKW50b2hsKGlwLT5pcF9kc3Quc19hZGRyKSk7CkBA IC0xNDE0LDcgKzE0ODMsNyBAQAogCiAJLyogaXMgdGhlcmUgYW4gdXBjYWxsIHdhaXRpbmcgZm9y IHRoaXMgZmxvdyA/ICovCiAJaGFzaCA9IE1GQ0hBU0goaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5p cF9kc3Quc19hZGRyKTsKLQlmb3IgKHJ0ID0gbWZjdGFibGVbaGFzaF07IHJ0OyBydCA9IHJ0LT5t ZmNfbmV4dCkgeworCWZvciAocnQgPSBWX21mY3RhYmxlW2hhc2hdOyBydDsgcnQgPSBydC0+bWZj X25leHQpIHsKIAkgICAgaWYgKChpcC0+aXBfc3JjLnNfYWRkciA9PSBydC0+bWZjX29yaWdpbi5z X2FkZHIpICYmCiAJCSAgICAoaXAtPmlwX2RzdC5zX2FkZHIgPT0gcnQtPm1mY19tY2FzdGdycC5z X2FkZHIpICYmCiAJCSAgICAocnQtPm1mY19zdGFsbCAhPSBOVUxMKSkKQEAgLTE0MzEsOSArMTUw MCw5IEBACiAJICAgICAqIExvY2F0ZSB0aGUgdmlmaSBmb3IgdGhlIGluY29taW5nIGludGVyZmFj ZSBmb3IgdGhpcyBwYWNrZXQuCiAJICAgICAqIElmIG5vbmUgZm91bmQsIGRyb3AgcGFja2V0Lgog CSAgICAgKi8KLQkgICAgZm9yICh2aWZpPTA7IHZpZmkgPCBudW12aWZzICYmIHZpZnRhYmxlW3Zp ZmldLnZfaWZwICE9IGlmcDsgdmlmaSsrKQorCSAgICBmb3IgKHZpZmk9MDsgdmlmaSA8IFZfbnVt dmlmcyAmJiBWX3ZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcDsgdmlmaSsrKQogCQk7Ci0JICAg IGlmICh2aWZpID49IG51bXZpZnMpCS8qIHZpZiBub3QgZm91bmQsIGRyb3AgcGFja2V0ICovCisJ ICAgIGlmICh2aWZpID49IFZfbnVtdmlmcykJLyogdmlmIG5vdCBmb3VuZCwgZHJvcCBwYWNrZXQg Ki8KIAkJZ290byBub25fZmF0YWw7CiAKIAkgICAgLyogbm8gdXBjYWxsLCBzbyBtYWtlIGEgbmV3 IGVudHJ5ICovCkBAIC0xNDU1LDEyICsxNTI0LDEyIEBACiAJICAgIGltLT5pbV9tYnogPSAwOwog CSAgICBpbS0+aW1fdmlmID0gdmlmaTsKIAotCSAgICBtcnRzdGF0Lm1ydHNfdXBjYWxscysrOwor CSAgICBWX21ydHN0YXQubXJ0c191cGNhbGxzKys7CiAKIAkgICAga19pZ21wc3JjLnNpbl9hZGRy ID0gaXAtPmlwX3NyYzsKIAkgICAgaWYgKHNvY2tldF9zZW5kKFZfaXBfbXJvdXRlciwgbW0sICZr X2lnbXBzcmMpIDwgMCkgewogCQlsb2coTE9HX1dBUk5JTkcsICJpcF9tZm9yd2FyZDogaXBfbXJv dXRlciBzb2NrZXQgcXVldWUgZnVsbFxuIik7Ci0JCSsrbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVs bDsKKwkJKytWX21ydHN0YXQubXJ0c191cHFfc29ja2Z1bGw7CiBmYWlsMToKIAkJZnJlZShydCwg TV9NUlRBQkxFKTsKIGZhaWw6CkBAIC0xNDc1LDggKzE1NDQsOCBAQAogCSAgICBydC0+bWZjX29y aWdpbi5zX2FkZHIgICAgID0gaXAtPmlwX3NyYy5zX2FkZHI7CiAJICAgIHJ0LT5tZmNfbWNhc3Rn cnAuc19hZGRyICAgPSBpcC0+aXBfZHN0LnNfYWRkcjsKIAkgICAgcnQtPm1mY19leHBpcmUJICAg ICAgPSBVUENBTExfRVhQSVJFOwotCSAgICBuZXhwaXJlW2hhc2hdKys7Ci0JICAgIGZvciAoaSA9 IDA7IGkgPCBudW12aWZzOyBpKyspIHsKKwkgICAgVl9uZXhwaXJlW2hhc2hdKys7CisJICAgIGZv ciAoaSA9IDA7IGkgPCBWX251bXZpZnM7IGkrKykgewogCQlydC0+bWZjX3R0bHNbaV0gPSAwOwog CQlydC0+bWZjX2ZsYWdzW2ldID0gMDsKIAkgICAgfQpAQCAtMTQ4Nyw4ICsxNTU2LDggQEAKIAkg ICAgcnQtPm1mY19id19tZXRlciA9IE5VTEw7CiAKIAkgICAgLyogbGluayBpbnRvIHRhYmxlICov Ci0JICAgIHJ0LT5tZmNfbmV4dCAgID0gbWZjdGFibGVbaGFzaF07Ci0JICAgIG1mY3RhYmxlW2hh c2hdID0gcnQ7CisJICAgIHJ0LT5tZmNfbmV4dCAgID0gVl9tZmN0YWJsZVtoYXNoXTsKKwkgICAg Vl9tZmN0YWJsZVtoYXNoXSA9IHJ0OwogCSAgICBydC0+bWZjX3N0YWxsID0gcnRlOwogCiAJfSBl bHNlIHsKQEAgLTE1MDUsNyArMTU3NCw3IEBACiAJCW5wa3RzKys7CiAKIAkgICAgaWYgKG5wa3Rz ID4gTUFYX1VQUSkgewotCQltcnRzdGF0Lm1ydHNfdXBxX292Zmx3Kys7CisJCVZfbXJ0c3RhdC5t cnRzX3VwcV9vdmZsdysrOwogbm9uX2ZhdGFsOgogCQlmcmVlKHJ0ZSwgTV9NUlRBQkxFKTsKIAkJ bV9mcmVlbShtYjApOwpAQCAtMTUzNSwxNSArMTYwNCwxNiBAQAogc3RhdGljIHZvaWQKIGV4cGly ZV91cGNhbGxzKHZvaWQgKnVudXNlZCkKIHsKKyAgICBJTklUX1ZORVRfTVJPVVRFKCAoKHN0cnVj dCB2bmV0ICopdW51c2VkKSApOwogICAgIHN0cnVjdCBydGRldHEgKnJ0ZTsKICAgICBzdHJ1Y3Qg bWZjICptZmMsICoqbnB0cjsKICAgICBpbnQgaTsKIAogICAgIE1GQ19MT0NLKCk7CiAgICAgZm9y IChpID0gMDsgaSA8IE1GQ1RCTFNJWjsgaSsrKSB7Ci0JaWYgKG5leHBpcmVbaV0gPT0gMCkKKwlp ZiAoVl9uZXhwaXJlW2ldID09IDApCiAJICAgIGNvbnRpbnVlOwotCW5wdHIgPSAmbWZjdGFibGVb aV07CisJbnB0ciA9ICZWX21mY3RhYmxlW2ldOwogCWZvciAobWZjID0gKm5wdHI7IG1mYyAhPSBO VUxMOyBtZmMgPSAqbnB0cikgewogCSAgICAvKgogCSAgICAgKiBTa2lwIHJlYWwgY2FjaGUgZW50 cmllcwpAQCAtMTU1Miw3ICsxNjIyLDcgQEAKIAkgICAgICovCiAJICAgIGlmIChtZmMtPm1mY19z dGFsbCAhPSBOVUxMICYmIG1mYy0+bWZjX2V4cGlyZSAhPSAwICYmCiAJCSAgICAtLW1mYy0+bWZj X2V4cGlyZSA9PSAwKSB7Ci0JCWlmIChtcnRkZWJ1ZyAmIERFQlVHX0VYUElSRSkKKwkJaWYgKFZf bXJ0ZGVidWcgJiBERUJVR19FWFBJUkUpCiAJCSAgICBsb2coTE9HX0RFQlVHLCAiZXhwaXJlX3Vw Y2FsbHM6IGV4cGlyaW5nICglbHggJWx4KVxuIiwKIAkJCSh1X2xvbmcpbnRvaGwobWZjLT5tZmNf b3JpZ2luLnNfYWRkciksCiAJCQkodV9sb25nKW50b2hsKG1mYy0+bWZjX21jYXN0Z3JwLnNfYWRk cikpOwpAQCAtMTU2Nyw4ICsxNjM3LDggQEAKIAkJICAgIGZyZWUocnRlLCBNX01SVEFCTEUpOwog CQkgICAgcnRlID0gbjsKIAkJfQotCQkrK21ydHN0YXQubXJ0c19jYWNoZV9jbGVhbnVwczsKLQkJ bmV4cGlyZVtpXS0tOworCQkrK1ZfbXJ0c3RhdC5tcnRzX2NhY2hlX2NsZWFudXBzOworCQlWX25l eHBpcmVbaV0tLTsKIAogCQkvKgogCQkgKiBmcmVlIHRoZSBid19tZXRlciBlbnRyaWVzCkBAIC0x NTg3LDkgKzE2NTcsOCBAQAogCSAgICB9CiAJfQogICAgIH0KKyAgICBjYWxsb3V0X3Jlc2V0KCZW X2V4cGlyZV91cGNhbGxzX2NoLCBFWFBJUkVfVElNRU9VVCwgZXhwaXJlX3VwY2FsbHMsIHVudXNl ZCk7CiAgICAgTUZDX1VOTE9DSygpOwotCi0gICAgY2FsbG91dF9yZXNldCgmZXhwaXJlX3VwY2Fs bHNfY2gsIEVYUElSRV9USU1FT1VULCBleHBpcmVfdXBjYWxscywgTlVMTCk7CiB9CiAKIC8qCkBA IC0xNTk5LDYgKzE2NjgsNyBAQAogaXBfbWRxKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgaWZuZXQg KmlmcCwgc3RydWN0IG1mYyAqcnQsIHZpZmlfdCB4bXRfdmlmKQogewogICAgIElOSVRfVk5FVF9J TkVUKGN1cnZuZXQpOworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0 IGlwICAqaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKICAgICB2aWZpX3QgdmlmaTsKICAgICBp bnQgcGxlbiA9IGlwLT5pcF9sZW47CkBAIC0xNjEwLDExICsxNjgwLDExIEBACiAgICAgICoKICAg ICAgKiAoc2luY2UgdmlmaV90IGlzIHVfc2hvcnQsIC0xIGJlY29tZXMgTUFYVVNIT1JULCB3aGlj aCA+IG51bXZpZnMuKQogICAgICAqLwotICAgIGlmICh4bXRfdmlmIDwgbnVtdmlmcykgewotCWlm ICh2aWZ0YWJsZVt4bXRfdmlmXS52X2ZsYWdzICYgVklGRl9SRUdJU1RFUikKLQkJcGltX3JlZ2lz dGVyX3NlbmQoaXAsIHZpZnRhYmxlICsgeG10X3ZpZiwgbSwgcnQpOworICAgIGlmICh4bXRfdmlm IDwgVl9udW12aWZzKSB7CisJaWYgKFZfdmlmdGFibGVbeG10X3ZpZl0udl9mbGFncyAmIFZJRkZf UkVHSVNURVIpCisJCXBpbV9yZWdpc3Rlcl9zZW5kKGlwLCBWX3ZpZnRhYmxlICsgeG10X3ZpZiwg bSwgcnQpOwogCWVsc2UKLQkJcGh5aW50X3NlbmQoaXAsIHZpZnRhYmxlICsgeG10X3ZpZiwgbSk7 CisJCXBoeWludF9zZW5kKGlwLCBWX3ZpZnRhYmxlICsgeG10X3ZpZiwgbSk7CiAJcmV0dXJuIDE7 CiAgICAgfQogCkBAIC0xNjIyLDEyICsxNjkyLDEyIEBACiAgICAgICogRG9uJ3QgZm9yd2FyZCBp ZiBpdCBkaWRuJ3QgYXJyaXZlIGZyb20gdGhlIHBhcmVudCB2aWYgZm9yIGl0cyBvcmlnaW4uCiAg ICAgICovCiAgICAgdmlmaSA9IHJ0LT5tZmNfcGFyZW50OwotICAgIGlmICgodmlmaSA+PSBudW12 aWZzKSB8fCAodmlmdGFibGVbdmlmaV0udl9pZnAgIT0gaWZwKSkgeworICAgIGlmICgodmlmaSA+ PSBWX251bXZpZnMpIHx8IChWX3ZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcCkpIHsKIAkvKiBj YW1lIGluIHRoZSB3cm9uZyBpbnRlcmZhY2UgKi8KLQlpZiAobXJ0ZGVidWcgJiBERUJVR19GT1JX QVJEKQorCWlmIChWX21ydGRlYnVnICYgREVCVUdfRk9SV0FSRCkKIAkgICAgbG9nKExPR19ERUJV RywgIndyb25nIGlmOiBpZnAgJXAgdmlmaSAlZCB2aWZpZnAgJXBcbiIsCi0JCSh2b2lkICopaWZw LCB2aWZpLCAodm9pZCAqKXZpZnRhYmxlW3ZpZmldLnZfaWZwKTsKLQkrK21ydHN0YXQubXJ0c193 cm9uZ19pZjsKKwkJKHZvaWQgKilpZnAsIHZpZmksICh2b2lkICopVl92aWZ0YWJsZVt2aWZpXS52 X2lmcCk7CisJKytWX21ydHN0YXQubXJ0c193cm9uZ19pZjsKIAkrK3J0LT5tZmNfd3JvbmdfaWY7 CiAJLyoKIAkgKiBJZiB3ZSBhcmUgZG9pbmcgUElNIGFzc2VydCBwcm9jZXNzaW5nLCBzZW5kIGEg bWVzc2FnZQpAQCAtMTYzNywxNyArMTcwNywxOCBAQAogCSAqIGNhbiBjb21wbGV0ZSB0aGUgU1BU IHN3aXRjaCwgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZQogCSAqIG9mIHRoZSBpaWYgKGJyb2FkY2Fz dCBtZWRpYSwgR1JFIHR1bm5lbCwgZXRjKS4KIAkgKi8KLQlpZiAocGltX2Fzc2VydCAmJiAodmlm aSA8IG51bXZpZnMpICYmIHZpZnRhYmxlW3ZpZmldLnZfaWZwKSB7CisJaWYgKFZfcGltX2Fzc2Vy dCAmJiAodmlmaSA8IFZfbnVtdmlmcykgJiYgVl92aWZ0YWJsZVt2aWZpXS52X2lmcCkgewogCSAg ICBzdHJ1Y3QgdGltZXZhbCBub3c7CiAJICAgIHVfbG9uZyBkZWx0YTsKIAotCSAgICBpZiAoaWZw ID09ICZtdWx0aWNhc3RfcmVnaXN0ZXJfaWYpCi0JCXBpbXN0YXQucGltc19yY3ZfcmVnaXN0ZXJz X3dyb25naWlmKys7CisJICAgIGlmIChpZnAgPT0gJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmKQor CQlWX3BpbXN0YXQucGltc19yY3ZfcmVnaXN0ZXJzX3dyb25naWlmKys7CiAKIAkgICAgLyogR2V0 IHZpZmkgZm9yIHRoZSBpbmNvbWluZyBwYWNrZXQgKi8KLQkgICAgZm9yICh2aWZpPTA7IHZpZmkg PCBudW12aWZzICYmIHZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcDsgdmlmaSsrKQorCSAgICBm b3IgKHZpZmk9MDsgdmlmaSA8IFZfbnVtdmlmcyAmJiBWX3ZpZnRhYmxlW3ZpZmldLnZfaWZwICE9 IGlmcDsKKwkJdmlmaSsrKQogCQk7Ci0JICAgIGlmICh2aWZpID49IG51bXZpZnMpCisJICAgIGlm ICh2aWZpID49IFZfbnVtdmlmcykKIAkJcmV0dXJuIDA7CS8qIFRoZSBpaWYgaXMgbm90IGZvdW5k OiBpZ25vcmUgdGhlIHBhY2tldC4gKi8KIAogCSAgICBpZiAocnQtPm1mY19mbGFnc1t2aWZpXSAm IE1SVF9NRkNfRkxBR1NfRElTQUJMRV9XUk9OR1ZJRikKQEAgLTE2NzUsMTMgKzE3NDYsMTMgQEAK IAkJaW0tPmltX21iegkJPSAwOwogCQlpbS0+aW1fdmlmCQk9IHZpZmk7CiAKLQkJbXJ0c3RhdC5t cnRzX3VwY2FsbHMrKzsKKwkJVl9tcnRzdGF0Lm1ydHNfdXBjYWxscysrOwogCiAJCWtfaWdtcHNy Yy5zaW5fYWRkciA9IGltLT5pbV9zcmM7CiAJCWlmIChzb2NrZXRfc2VuZChWX2lwX21yb3V0ZXIs IG1tLCAma19pZ21wc3JjKSA8IDApIHsKIAkJICAgIGxvZyhMT0dfV0FSTklORywKIAkJCSJpcF9t Zm9yd2FyZDogaXBfbXJvdXRlciBzb2NrZXQgcXVldWUgZnVsbFxuIik7Ci0JCSAgICArK21ydHN0 YXQubXJ0c191cHFfc29ja2Z1bGw7CisJCSAgICArK1ZfbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVs bDsKIAkJICAgIHJldHVybiBFTk9CVUZTOwogCQl9CiAJICAgIH0KQEAgLTE2OTAsMTIgKzE3NjEs MTIgQEAKICAgICB9CiAKICAgICAvKiBJZiBJIHNvdXJjZWQgdGhpcyBwYWNrZXQsIGl0IGNvdW50 cyBhcyBvdXRwdXQsIGVsc2UgaXQgd2FzIGlucHV0LiAqLwotICAgIGlmIChpcC0+aXBfc3JjLnNf YWRkciA9PSB2aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkcikgewotCXZpZnRhYmxlW3Zp ZmldLnZfcGt0X291dCsrOwotCXZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfb3V0ICs9IHBsZW47Cisg ICAgaWYgKGlwLT5pcF9zcmMuc19hZGRyID09IFZfdmlmdGFibGVbdmlmaV0udl9sY2xfYWRkci5z X2FkZHIpIHsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfcGt0X291dCsrOworCVZfdmlmdGFibGVbdmlm aV0udl9ieXRlc19vdXQgKz0gcGxlbjsKICAgICB9IGVsc2UgewotCXZpZnRhYmxlW3ZpZmldLnZf cGt0X2luKys7Ci0JdmlmdGFibGVbdmlmaV0udl9ieXRlc19pbiArPSBwbGVuOworCVZfdmlmdGFi bGVbdmlmaV0udl9wa3RfaW4rKzsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfaW4gKz0gcGxl bjsKICAgICB9CiAgICAgcnQtPm1mY19wa3RfY250Kys7CiAgICAgcnQtPm1mY19ieXRlX2NudCAr PSBwbGVuOwpAQCAtMTcwNiwxNCArMTc3NywxNCBAQAogICAgICAqCQktIHRoZSB0dGwgZXhjZWVk cyB0aGUgdmlmJ3MgdGhyZXNob2xkCiAgICAgICoJCS0gdGhlcmUgYXJlIGdyb3VwIG1lbWJlcnMg ZG93bnN0cmVhbSBvbiBpbnRlcmZhY2UKICAgICAgKi8KLSAgICBmb3IgKHZpZmkgPSAwOyB2aWZp IDwgbnVtdmlmczsgdmlmaSsrKQorICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBWX251bXZpZnM7 IHZpZmkrKykKIAlpZiAoKHJ0LT5tZmNfdHRsc1t2aWZpXSA+IDApICYmIChpcC0+aXBfdHRsID4g cnQtPm1mY190dGxzW3ZpZmldKSkgewotCSAgICB2aWZ0YWJsZVt2aWZpXS52X3BrdF9vdXQrKzsK LQkgICAgdmlmdGFibGVbdmlmaV0udl9ieXRlc19vdXQgKz0gcGxlbjsKLQkgICAgaWYgKHZpZnRh YmxlW3ZpZmldLnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQotCQlwaW1fcmVnaXN0ZXJfc2VuZChp cCwgdmlmdGFibGUgKyB2aWZpLCBtLCBydCk7CisJICAgIFZfdmlmdGFibGVbdmlmaV0udl9wa3Rf b3V0Kys7CisJICAgIFZfdmlmdGFibGVbdmlmaV0udl9ieXRlc19vdXQgKz0gcGxlbjsKKwkgICAg aWYgKFZfdmlmdGFibGVbdmlmaV0udl9mbGFncyAmIFZJRkZfUkVHSVNURVIpCisJCXBpbV9yZWdp c3Rlcl9zZW5kKGlwLCBWX3ZpZnRhYmxlICsgdmlmaSwgbSwgcnQpOwogCSAgICBlbHNlCi0JCXBo eWludF9zZW5kKGlwLCB2aWZ0YWJsZSArIHZpZmksIG0pOworCQlwaHlpbnRfc2VuZChpcCwgVl92 aWZ0YWJsZSArIHZpZmksIG0pOwogCX0KIAogICAgIC8qCkBAIC0xNzM4LDggKzE4MDksOSBAQAog c3RhdGljIGludAogWF9sZWdhbF92aWZfbnVtKGludCB2aWYpCiB7CisgICAgSU5JVF9WTkVUX01S T1VURShjdXJ2bmV0KTsKICAgICAvKiBYWFggdW5sb2NrZWQsIG1hdHRlcj8gKi8KLSAgICByZXR1 cm4gKHZpZiA+PSAwICYmIHZpZiA8IG51bXZpZnMpOworICAgIHJldHVybiAodmlmID49IDAgJiYg dmlmIDwgVl9udW12aWZzKTsKIH0KIAogLyoKQEAgLTE3NDgsOSArMTgyMCwxMCBAQAogc3RhdGlj IHVfbG9uZwogWF9pcF9tY2FzdF9zcmMoaW50IHZpZmkpCiB7CisgICAgSU5JVF9WTkVUX01ST1VU RShjdXJ2bmV0KTsKICAgICAvKiBYWFggdW5sb2NrZWQsIG1hdHRlcj8gKi8KLSAgICBpZiAodmlm aSA+PSAwICYmIHZpZmkgPCBudW12aWZzKQotCXJldHVybiB2aWZ0YWJsZVt2aWZpXS52X2xjbF9h ZGRyLnNfYWRkcjsKKyAgICBpZiAodmlmaSA+PSAwICYmIHZpZmkgPCBWX251bXZpZnMpCisJcmV0 dXJuIFZfdmlmdGFibGVbdmlmaV0udl9sY2xfYWRkci5zX2FkZHI7CiAgICAgZWxzZQogCXJldHVy biBJTkFERFJfQU5ZOwogfQpAQCAtMTc4MCw2ICsxODUzLDcgQEAKIHN0YXRpYyB2b2lkCiBzZW5k X3BhY2tldChzdHJ1Y3QgdmlmICp2aWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKKwlJTklUX1ZORVRf TVJPVVRFKGN1cnZuZXQpOwogCXN0cnVjdCBpcF9tb3B0aW9ucyBpbW87CiAJc3RydWN0IGluX211 bHRpICppbW1bMl07CiAJaW50IGVycm9yOwpAQCAtMTgwMSwxNiArMTg3NSwxNyBAQAogCSAqIHRo ZSBsb29wYmFjayBpbnRlcmZhY2UsIHRodXMgcHJldmVudGluZyBsb29waW5nLgogCSAqLwogCWVy cm9yID0gaXBfb3V0cHV0KG0sIE5VTEwsICZ2aWZwLT52X3JvdXRlLCBJUF9GT1JXQVJESU5HLCAm aW1vLCBOVUxMKTsKLQlpZiAobXJ0ZGVidWcgJiBERUJVR19YTUlUKSB7CisJaWYgKFZfbXJ0ZGVi dWcgJiBERUJVR19YTUlUKSB7CiAJICAgIGxvZyhMT0dfREVCVUcsICJwaHlpbnRfc2VuZCBvbiB2 aWYgJXRkIGVyciAlZFxuIiwKLQkJdmlmcCAtIHZpZnRhYmxlLCBlcnJvcik7CisJCXZpZnAgLSBW X3ZpZnRhYmxlLCBlcnJvcik7CiAJfQogfQogCiBzdGF0aWMgaW50CiBYX2lwX3JzdnBfdmlmKHN0 cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29wdCkKIHsKLSAgICBJTklUX1ZORVRf SU5FVChjdXJ2bmV0KTsKKyAgICBJTklUX1ZORVRfSU5FVChzby0+c29fdm5ldCk7CisgICAgSU5J VF9WTkVUX01ST1VURShzby0+c29fdm5ldCk7CiAgICAgaW50IGVycm9yLCB2aWZpOwogCiAgICAg aWYgKHNvLT5zb190eXBlICE9IFNPQ0tfUkFXIHx8IHNvLT5zb19wcm90by0+cHJfcHJvdG9jb2wg IT0gSVBQUk9UT19SU1ZQKQpAQCAtMTgyMiwzOSArMTg5NywzOSBAQAogCiAgICAgVklGX0xPQ0so KTsKIAotICAgIGlmICh2aWZpIDwgMCB8fCB2aWZpID49IG51bXZpZnMpIHsJLyogRXJyb3IgaWYg dmlmIGlzIGludmFsaWQgKi8KKyAgICBpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBWX251bXZpZnMp IHsJLyogRXJyb3IgaWYgdmlmIGlzIGludmFsaWQgKi8KIAlWSUZfVU5MT0NLKCk7CiAJcmV0dXJu IEVBRERSTk9UQVZBSUw7CiAgICAgfQogCiAgICAgaWYgKHNvcHQtPnNvcHRfbmFtZSA9PSBJUF9S U1ZQX1ZJRl9PTikgewogCS8qIENoZWNrIGlmIHNvY2tldCBpcyBhdmFpbGFibGUuICovCi0JaWYg KHZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgIT0gTlVMTCkgeworCWlmIChWX3ZpZnRhYmxlW3ZpZmld LnZfcnN2cGQgIT0gTlVMTCkgewogCSAgICBWSUZfVU5MT0NLKCk7CiAJICAgIHJldHVybiBFQURE UklOVVNFOwogCX0KIAotCXZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPSBzbzsKKwlWX3ZpZnRhYmxl W3ZpZmldLnZfcnN2cGQgPSBzbzsKIAkvKiBUaGlzIG1heSBzZWVtIHNpbGx5LCBidXQgd2UgbmVl ZCB0byBiZSBzdXJlIHdlIGRvbid0IG92ZXItaW5jcmVtZW50CiAJICogdGhlIFJTVlAgY291bnRl ciwgaW4gY2FzZSBzb21ldGhpbmcgc2xpcHMgdXAuCiAJICovCi0JaWYgKCF2aWZ0YWJsZVt2aWZp XS52X3JzdnBfb24pIHsKLQkgICAgdmlmdGFibGVbdmlmaV0udl9yc3ZwX29uID0gMTsKKwlpZiAo IVZfdmlmdGFibGVbdmlmaV0udl9yc3ZwX29uKSB7CisJICAgIFZfdmlmdGFibGVbdmlmaV0udl9y c3ZwX29uID0gMTsKIAkgICAgVl9yc3ZwX29uKys7CiAJfQogICAgIH0gZWxzZSB7IC8qIG11c3Qg YmUgVklGX09GRiAqLwogCS8qCiAJICogWFhYIGFzIGFuIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kg Y2hlY2ssIG9uZSBjb3VsZCBtYWtlIHN1cmUKLQkgKiB0aGF0IHZpZnRhYmxlW3ZpZmldLnZfcnN2 cGQgPT0gc28sIG90aGVyd2lzZSBwYXNzaW5nIHNvIGFzCisJICogdGhhdCBWX3ZpZnRhYmxlW3Zp ZmldLnZfcnN2cGQgPT0gc28sIG90aGVyd2lzZSBwYXNzaW5nIHNvIGFzCiAJICogZmlyc3QgcGFy YW1ldGVyIGlzIHByZXR0eSB1c2VsZXNzLgogCSAqLwotCXZpZnRhYmxlW3ZpZmldLnZfcnN2cGQg PSBOVUxMOworCVZfdmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9IE5VTEw7CiAJLyoKIAkgKiBUaGlz IG1heSBzZWVtIHNpbGx5LCBidXQgd2UgbmVlZCB0byBiZSBzdXJlIHdlIGRvbid0IG92ZXItZGVj cmVtZW50CiAJICogdGhlIFJTVlAgY291bnRlciwgaW4gY2FzZSBzb21ldGhpbmcgc2xpcHMgdXAu CiAJICovCi0JaWYgKHZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbikgewotCSAgICB2aWZ0YWJsZVt2 aWZpXS52X3JzdnBfb24gPSAwOworCWlmIChWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbikgewor CSAgICBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbiA9IDA7CiAJICAgIFZfcnN2cF9vbi0tOwog CX0KICAgICB9CkBAIC0xODY1LDcgKzE5NDAsOCBAQAogc3RhdGljIHZvaWQKIFhfaXBfcnN2cF9m b3JjZV9kb25lKHN0cnVjdCBzb2NrZXQgKnNvKQogewotICAgIElOSVRfVk5FVF9JTkVUKGN1cnZu ZXQpOworICAgIElOSVRfVk5FVF9JTkVUKHNvLT5zb192bmV0KTsKKyAgICBJTklUX1ZORVRfTVJP VVRFKHNvLT5zb192bmV0KTsKICAgICBpbnQgdmlmaTsKIAogICAgIC8qIERvbid0IGJvdGhlciBp ZiBpdCBpcyBub3QgdGhlIHJpZ2h0IHR5cGUgb2Ygc29ja2V0LiAqLwpAQCAtMTg3NywxNCArMTk1 MywxNCBAQAogICAgIC8qIFRoZSBzb2NrZXQgbWF5IGJlIGF0dGFjaGVkIHRvIG1vcmUgdGhhbiBv bmUgdmlmLi4udGhpcwogICAgICAqIGlzIHBlcmZlY3RseSBsZWdhbC4KICAgICAgKi8KLSAgICBm b3IgKHZpZmkgPSAwOyB2aWZpIDwgbnVtdmlmczsgdmlmaSsrKSB7Ci0JaWYgKHZpZnRhYmxlW3Zp ZmldLnZfcnN2cGQgPT0gc28pIHsKLQkgICAgdmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9IE5VTEw7 CisgICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IFZfbnVtdmlmczsgdmlmaSsrKSB7CisJaWYgKFZf dmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9PSBzbykgeworCSAgICBWX3ZpZnRhYmxlW3ZpZmldLnZf cnN2cGQgPSBOVUxMOwogCSAgICAvKiBUaGlzIG1heSBzZWVtIHNpbGx5LCBidXQgd2UgbmVlZCB0 byBiZSBzdXJlIHdlIGRvbid0CiAJICAgICAqIG92ZXItZGVjcmVtZW50IHRoZSBSU1ZQIGNvdW50 ZXIsIGluIGNhc2Ugc29tZXRoaW5nIHNsaXBzIHVwLgogCSAgICAgKi8KLQkgICAgaWYgKHZpZnRh YmxlW3ZpZmldLnZfcnN2cF9vbikgewotCQl2aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24gPSAwOwor CSAgICBpZiAoVl92aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24pIHsKKwkJVl92aWZ0YWJsZVt2aWZp XS52X3JzdnBfb24gPSAwOwogCQlWX3JzdnBfb24tLTsKIAkgICAgfQogCX0KQEAgLTE4OTcsMTIg KzE5NzMsMTMgQEAKIFhfcnN2cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZikKIHsKICAg ICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQp OwogICAgIGludCB2aWZpOwogICAgIHN0cnVjdCBpcCAqaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAq KTsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcnN2cF9zcmMgPSB7IHNpemVvZiByc3ZwX3NyYywg QUZfSU5FVCB9OwogICAgIHN0cnVjdCBpZm5ldCAqaWZwOwogCi0gICAgaWYgKHJzdnBkZWJ1ZykK KyAgICBpZiAoVl9yc3ZwZGVidWcpCiAJcHJpbnRmKCJyc3ZwX2lucHV0OiByc3ZwX29uICVkXG4i LCBWX3JzdnBfb24pOwogCiAgICAgLyogQ2FuIHN0aWxsIGdldCBwYWNrZXRzIHdpdGggcnN2cF9v biA9IDAgaWYgdGhlcmUgaXMgYSBsb2NhbCBtZW1iZXIKQEAgLTE5MTQsNyArMTk5MSw3IEBACiAJ cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyc3ZwZGVidWcpCisgICAgaWYgKFZfcnN2cGRlYnVn KQogCXByaW50ZigicnN2cF9pbnB1dDogY2hlY2sgdmlmc1xuIik7CiAKICNpZmRlZiBESUFHTk9T VElDCkBAIC0xOTI1LDE0ICsyMDAyLDE0IEBACiAKICAgICBWSUZfTE9DSygpOwogICAgIC8qIEZp bmQgd2hpY2ggdmlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbi4gKi8KLSAgICBmb3IgKHZpZmkgPSAw OyB2aWZpIDwgbnVtdmlmczsgdmlmaSsrKQotCWlmICh2aWZ0YWJsZVt2aWZpXS52X2lmcCA9PSBp ZnApCisgICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IFZfbnVtdmlmczsgdmlmaSsrKQorCWlmIChW X3ZpZnRhYmxlW3ZpZmldLnZfaWZwID09IGlmcCkKIAkgICAgYnJlYWs7CiAKLSAgICBpZiAodmlm aSA9PSBudW12aWZzIHx8IHZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gTlVMTCkgeworICAgIGlm ICh2aWZpID09IFZfbnVtdmlmcyB8fCBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gTlVMTCkg ewogCS8qCiAJICogRHJvcCB0aGUgbG9jayBoZXJlIHRvIGF2b2lkIGhvbGRpbmcgaXQgYWNyb3Nz IHJpcF9pbnB1dC4KLQkgKiBUaGlzIGNvdWxkIG1ha2UgcnN2cGRlYnVnIHByaW50ZnMgd3Jvbmcu ICBJZiB5b3UgY2FyZSwKKwkgKiBUaGlzIGNvdWxkIG1ha2UgVl9yc3ZwZGVidWcgcHJpbnRmcyB3 cm9uZy4gIElmIHlvdSBjYXJlLAogCSAqIHJlY29yZCB0aGUgc3RhdGUgb2Ygc3R1ZmYgYmVmb3Jl IGRyb3BwaW5nIHRoZSBsb2NrLgogCSAqLwogCVZJRl9VTkxPQ0soKTsKQEAgLTE5NDIsMTMgKzIw MTksMTMgQEAKIAkgKiBpcyBubyBzcGVjaWZpYyBzb2NrZXQgZm9yIHRoaXMgdmlmLgogCSAqLwog CWlmIChWX2lwX3JzdnBkICE9IE5VTEwpIHsKLQkgICAgaWYgKHJzdnBkZWJ1ZykKKwkgICAgaWYg KFZfcnN2cGRlYnVnKQogCQlwcmludGYoInJzdnBfaW5wdXQ6IFNlbmRpbmcgcGFja2V0IHVwIG9s ZC1zdHlsZSBzb2NrZXRcbiIpOwogCSAgICByaXBfaW5wdXQobSwgb2ZmKTsgIC8qIHh4eCAqLwog CX0gZWxzZSB7Ci0JICAgIGlmIChyc3ZwZGVidWcgJiYgdmlmaSA9PSBudW12aWZzKQorCSAgICBp ZiAoVl9yc3ZwZGVidWcgJiYgdmlmaSA9PSBWX251bXZpZnMpCiAJCXByaW50ZigicnN2cF9pbnB1 dDogQ2FuJ3QgZmluZCB2aWYgZm9yIHBhY2tldC5cbiIpOwotCSAgICBlbHNlIGlmIChyc3ZwZGVi dWcgJiYgdmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9PSBOVUxMKQorCSAgICBlbHNlIGlmIChWX3Jz dnBkZWJ1ZyAmJiBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gTlVMTCkKIAkJcHJpbnRmKCJy c3ZwX2lucHV0OiBObyBzb2NrZXQgZGVmaW5lZCBmb3IgdmlmICVkXG4iLHZpZmkpOwogCSAgICBt X2ZyZWVtKG0pOwogCX0KQEAgLTE5NTYsMTUgKzIwMzMsMTUgQEAKICAgICB9CiAgICAgcnN2cF9z cmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOwogCi0gICAgaWYgKHJzdnBkZWJ1ZyAmJiBtKQorICAg IGlmIChWX3JzdnBkZWJ1ZyAmJiBtKQogCXByaW50ZigicnN2cF9pbnB1dDogbS0+bV9sZW4gPSAl ZCwgc2JzcGFjZSgpID0gJWxkXG4iLAotCSAgICAgICBtLT5tX2xlbixzYnNwYWNlKCYodmlmdGFi bGVbdmlmaV0udl9yc3ZwZC0+c29fcmN2KSkpOworCSAgICAgICBtLT5tX2xlbixzYnNwYWNlKCYo Vl92aWZ0YWJsZVt2aWZpXS52X3JzdnBkLT5zb19yY3YpKSk7CiAKLSAgICBpZiAoc29ja2V0X3Nl bmQodmlmdGFibGVbdmlmaV0udl9yc3ZwZCwgbSwgJnJzdnBfc3JjKSA8IDApIHsKLQlpZiAocnN2 cGRlYnVnKQorICAgIGlmIChzb2NrZXRfc2VuZChWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQsIG0s ICZyc3ZwX3NyYykgPCAwKSB7CisJaWYgKFZfcnN2cGRlYnVnKQogCSAgICBwcmludGYoInJzdnBf aW5wdXQ6IEZhaWxlZCB0byBhcHBlbmQgdG8gc29ja2V0XG4iKTsKICAgICB9IGVsc2UgewotCWlm IChyc3ZwZGVidWcpCisJaWYgKFZfcnN2cGRlYnVnKQogCSAgICBwcmludGYoInJzdnBfaW5wdXQ6 IHNlbmQgcGFja2V0IHVwXG4iKTsKICAgICB9CiAgICAgVklGX1VOTE9DSygpOwpAQCAtMjAwNCw2 ICsyMDgxLDcgQEAKIHN0YXRpYyBpbnQKIGFkZF9id191cGNhbGwoc3RydWN0IGJ3X3VwY2FsbCAq cmVxKQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1mYyAq bWZjOwogICAgIHN0cnVjdCB0aW1ldmFsIGRlbHRhID0geyBCV19VUENBTExfVEhSRVNIT0xEX0lO VEVSVkFMX01JTl9TRUMsCiAJCUJXX1VQQ0FMTF9USFJFU0hPTERfSU5URVJWQUxfTUlOX1VTRUMg fTsKQEAgLTIwMTEsNyArMjA4OSw3IEBACiAgICAgc3RydWN0IGJ3X21ldGVyICp4OwogICAgIHVp bnQzMl90IGZsYWdzOwogCi0gICAgaWYgKCEobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX0JXX1VQ Q0FMTCkpCisgICAgaWYgKCEoVl9tcnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKSkK IAlyZXR1cm4gRU9QTk9UU1VQUDsKIAogICAgIC8qIFRlc3QgaWYgdGhlIGZsYWdzIGFyZSB2YWxp ZCAqLwpAQCAtMjA5NiwxMCArMjE3NCwxMSBAQAogc3RhdGljIGludAogZGVsX2J3X3VwY2FsbChz dHJ1Y3QgYndfdXBjYWxsICpyZXEpCiB7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsK ICAgICBzdHJ1Y3QgbWZjICptZmM7CiAgICAgc3RydWN0IGJ3X21ldGVyICp4OwogCi0gICAgaWYg KCEobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX0JXX1VQQ0FMTCkpCisgICAgaWYgKCEoVl9tcnRf YXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKSkKIAlyZXR1cm4gRU9QTk9UU1VQUDsKIAog ICAgIE1GQ19MT0NLKCk7CkBAIC0yMjUyLDYgKzIzMzEsNyBAQAogc3RhdGljIHZvaWQKIGJ3X21l dGVyX3ByZXBhcmVfdXBjYWxsKHN0cnVjdCBid19tZXRlciAqeCwgc3RydWN0IHRpbWV2YWwgKm5v d3ApCiB7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgdGltZXZh bCBkZWx0YTsKICAgICBzdHJ1Y3QgYndfdXBjYWxsICp1OwogCkBAIC0yMjY2LDEzICsyMzQ2LDEz IEBACiAgICAgLyoKICAgICAgKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGVuZGluZyB1cGNhbGxz LCBkZWxpdmVyIHRoZW0gbm93CiAgICAgICovCi0gICAgaWYgKGJ3X3VwY2FsbHNfbiA+PSBCV19V UENBTExTX01BWCkKKyAgICBpZiAoVl9id191cGNhbGxzX24gPj0gQldfVVBDQUxMU19NQVgpCiAJ YndfdXBjYWxsc19zZW5kKCk7CiAKICAgICAvKgogICAgICAqIFNldCB0aGUgYndfdXBjYWxsIGVu dHJ5CiAgICAgICovCi0gICAgdSA9ICZid191cGNhbGxzW2J3X3VwY2FsbHNfbisrXTsKKyAgICB1 ID0gJlZfYndfdXBjYWxsc1tWX2J3X3VwY2FsbHNfbisrXTsKICAgICB1LT5idV9zcmMgPSB4LT5i bV9tZmMtPm1mY19vcmlnaW47CiAgICAgdS0+YnVfZHN0ID0geC0+Ym1fbWZjLT5tZmNfbWNhc3Rn cnA7CiAgICAgdS0+YnVfdGhyZXNob2xkLmJfdGltZSA9IHgtPmJtX3RocmVzaG9sZC5iX3RpbWU7 CkBAIC0yMjk5LDggKzIzNzksOSBAQAogYndfdXBjYWxsc19zZW5kKHZvaWQpCiB7CiAgICAgSU5J VF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAg ICBzdHJ1Y3QgbWJ1ZiAqbTsKLSAgICBpbnQgbGVuID0gYndfdXBjYWxsc19uICogc2l6ZW9mKGJ3 X3VwY2FsbHNbMF0pOworICAgIGludCBsZW4gPSBWX2J3X3VwY2FsbHNfbiAqIHNpemVvZihWX2J3 X3VwY2FsbHNbMF0pOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBrX2lnbXBzcmMgPSB7IHNpemVv ZiBrX2lnbXBzcmMsIEFGX0lORVQgfTsKICAgICBzdGF0aWMgc3RydWN0IGlnbXBtc2cgaWdtcG1z ZyA9IHsgMCwJCS8qIHVudXNlZDEgKi8KIAkJCQkgICAgICAwLAkJLyogdW51c2VkMiAqLwpAQCAt MjMxMywxMCArMjM5NCwxMCBAQAogCiAgICAgTUZDX0xPQ0tfQVNTRVJUKCk7CiAKLSAgICBpZiAo YndfdXBjYWxsc19uID09IDApCisgICAgaWYgKFZfYndfdXBjYWxsc19uID09IDApCiAJcmV0dXJu OwkJCS8qIE5vIHBlbmRpbmcgdXBjYWxscyAqLwogCi0gICAgYndfdXBjYWxsc19uID0gMDsKKyAg ICBWX2J3X3VwY2FsbHNfbiA9IDA7CiAKICAgICAvKgogICAgICAqIEFsbG9jYXRlIGEgbmV3IG1i dWYsIGluaXRpYWxpemUgaXQgd2l0aCB0aGUgaGVhZGVyIGFuZApAQCAtMjMzMCwxNiArMjQxMSwx NiBAQAogCiAgICAgbS0+bV9sZW4gPSBtLT5tX3BrdGhkci5sZW4gPSAwOwogICAgIG1fY29weWJh Y2sobSwgMCwgc2l6ZW9mKHN0cnVjdCBpZ21wbXNnKSwgKGNhZGRyX3QpJmlnbXBtc2cpOwotICAg IG1fY29weWJhY2sobSwgc2l6ZW9mKHN0cnVjdCBpZ21wbXNnKSwgbGVuLCAoY2FkZHJfdCkmYndf dXBjYWxsc1swXSk7CisgICAgbV9jb3B5YmFjayhtLCBzaXplb2Yoc3RydWN0IGlnbXBtc2cpLCBs ZW4sIChjYWRkcl90KSZWX2J3X3VwY2FsbHNbMF0pOwogCiAgICAgLyoKICAgICAgKiBTZW5kIHRo ZSB1cGNhbGxzCiAgICAgICogWFhYIGRvIHdlIG5lZWQgdG8gc2V0IHRoZSBhZGRyZXNzIGluIGtf aWdtcHNyYyA/CiAgICAgICovCi0gICAgbXJ0c3RhdC5tcnRzX3VwY2FsbHMrKzsKKyAgICBWX21y dHN0YXQubXJ0c191cGNhbGxzKys7CiAgICAgaWYgKHNvY2tldF9zZW5kKFZfaXBfbXJvdXRlciwg bSwgJmtfaWdtcHNyYykgPCAwKSB7CiAJbG9nKExPR19XQVJOSU5HLCAiYndfdXBjYWxsc19zZW5k OiBpcF9tcm91dGVyIHNvY2tldCBxdWV1ZSBmdWxsXG4iKTsKLQkrK21ydHN0YXQubXJ0c191cHFf c29ja2Z1bGw7CisJKytWX21ydHN0YXQubXJ0c191cHFfc29ja2Z1bGw7CiAgICAgfQogfQogCkBA IC0yMzY0LDYgKzI0NDUsNyBAQAogc3RhdGljIHZvaWQKIHNjaGVkdWxlX2J3X21ldGVyKHN0cnVj dCBid19tZXRlciAqeCwgc3RydWN0IHRpbWV2YWwgKm5vd3ApCiB7CisgICAgSU5JVF9WTkVUX01S T1VURShjdXJ2bmV0KTsKICAgICBpbnQgdGltZV9oYXNoOwogCiAgICAgTUZDX0xPQ0tfQVNTRVJU KCk7CkBAIC0yMzgzLDggKzI0NjUsOCBAQAogICAgICAqIENvbXB1dGUgdGhlIHRpbWVvdXQgaGFz aCB2YWx1ZSBhbmQgaW5zZXJ0IHRoZSBlbnRyeQogICAgICAqLwogICAgIEJXX01FVEVSX1RJTUVI QVNIKHgsIHRpbWVfaGFzaCk7Ci0gICAgeC0+Ym1fdGltZV9uZXh0ID0gYndfbWV0ZXJfdGltZXJz W3RpbWVfaGFzaF07Ci0gICAgYndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF0gPSB4OworICAgIHgt PmJtX3RpbWVfbmV4dCA9IFZfYndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF07CisgICAgVl9id19t ZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHg7CiAgICAgeC0+Ym1fdGltZV9oYXNoID0gdGltZV9o YXNoOwogfQogCkBAIC0yMzk1LDYgKzI0NzcsNyBAQAogc3RhdGljIHZvaWQKIHVuc2NoZWR1bGVf YndfbWV0ZXIoc3RydWN0IGJ3X21ldGVyICp4KQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vy dm5ldCk7CiAgICAgaW50IHRpbWVfaGFzaDsKICAgICBzdHJ1Y3QgYndfbWV0ZXIgKnByZXYsICp0 bXA7CiAKQEAgLTI0MTAsNyArMjQ5Myw3IEBACiAgICAgaWYgKHRpbWVfaGFzaCA+PSBCV19NRVRF Ul9CVUNLRVRTKQogCXJldHVybjsJCS8qIEVudHJ5IHdhcyBub3Qgc2NoZWR1bGVkICovCiAKLSAg ICBmb3IgKHByZXYgPSBOVUxMLCB0bXAgPSBid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXTsKKyAg ICBmb3IgKHByZXYgPSBOVUxMLCB0bXAgPSBWX2J3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdOwog CSAgICAgdG1wICE9IE5VTEw7IHByZXYgPSB0bXAsIHRtcCA9IHRtcC0+Ym1fdGltZV9uZXh0KQog CWlmICh0bXAgPT0geCkKIAkgICAgYnJlYWs7CkBAIC0yNDIxLDcgKzI1MDQsNyBAQAogICAgIGlm IChwcmV2ICE9IE5VTEwpCiAJcHJldi0+Ym1fdGltZV9uZXh0ID0geC0+Ym1fdGltZV9uZXh0Owog ICAgIGVsc2UKLQlid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHgtPmJtX3RpbWVfbmV4dDsK KwlWX2J3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdID0geC0+Ym1fdGltZV9uZXh0OwogCiAgICAg eC0+Ym1fdGltZV9uZXh0ID0gTlVMTDsKICAgICB4LT5ibV90aW1lX2hhc2ggPSBCV19NRVRFUl9C VUNLRVRTOwpAQCAtMjQzOCw4ICsyNTIxLDkgQEAKICAqIGxvb2tpbmcgYXQuCiAgKi8KIHN0YXRp YyB2b2lkCi1id19tZXRlcl9wcm9jZXNzKCkKK2J3X21ldGVyX3Byb2Nlc3Moc3RydWN0IHZuZXQg KnZuZXQpCiB7CisgICAgSU5JVF9WTkVUX01ST1VURSh2bmV0KTsKICAgICBzdGF0aWMgdWludDMy X3QgbGFzdF90dl9zZWM7CS8qIGxhc3QgdGltZSB3ZSBwcm9jZXNzZWQgdGhpcyAqLwogCiAgICAg dWludDMyX3QgbG9vcHM7CkBAIC0yNDU2LDYgKzI1NDAsNyBAQAogCWxvb3BzID0gQldfTUVURVJf QlVDS0VUUzsKIAogICAgIE1GQ19MT0NLKCk7CisgICAgQ1VSVk5FVF9TRVQodm5ldCk7CiAgICAg LyoKICAgICAgKiBQcm9jZXNzIGFsbCBiaW5zIG9mIGJ3X21ldGVyIGVudHJpZXMgZnJvbSB0aGUg b25lIGFmdGVyIHRoZSBsYXN0CiAgICAgICogcHJvY2Vzc2VkIHRvIHRoZSBjdXJyZW50IG9uZS4g T24gZW50cnksIGkgcG9pbnRzIHRvIHRoZSBsYXN0IGJ1Y2tldApAQCAtMjQ2OCw4ICsyNTUzLDgg QEAKIAkgICAgaSA9IDA7CiAKIAkvKiBEaXNjb25uZWN0IHRoZSBsaXN0IG9mIGJ3X21ldGVyIGVu dHJpZXMgZnJvbSB0aGUgYmluICovCi0JdG1wX2xpc3QgPSBid19tZXRlcl90aW1lcnNbaV07Ci0J YndfbWV0ZXJfdGltZXJzW2ldID0gTlVMTDsKKwl0bXBfbGlzdCA9IFZfYndfbWV0ZXJfdGltZXJz W2ldOworCVZfYndfbWV0ZXJfdGltZXJzW2ldID0gTlVMTDsKIAogCS8qIFByb2Nlc3MgdGhlIGxp c3Qgb2YgYndfbWV0ZXIgZW50cmllcyAqLwogCXdoaWxlICh0bXBfbGlzdCAhPSBOVUxMKSB7CkBA IC0yNDkyLDggKzI1NzcsOCBAQAogCQkgICAgaWYgKCsrdGltZV9oYXNoID49IEJXX01FVEVSX0JV Q0tFVFMpCiAJCQl0aW1lX2hhc2ggPSAwOwogCQl9Ci0JCXgtPmJtX3RpbWVfbmV4dCA9IGJ3X21l dGVyX3RpbWVyc1t0aW1lX2hhc2hdOwotCQlid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHg7 CisJCXgtPmJtX3RpbWVfbmV4dCA9IFZfYndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF07CisJCVZf YndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF0gPSB4OwogCQl4LT5ibV90aW1lX2hhc2ggPSB0aW1l X2hhc2g7CiAKIAkJY29udGludWU7CkBAIC0yNTIwLDYgKzI2MDUsNyBAQAogICAgIC8qIFNlbmQg YWxsIHVwY2FsbHMgdGhhdCBhcmUgcGVuZGluZyBkZWxpdmVyeSAqLwogICAgIGJ3X3VwY2FsbHNf c2VuZCgpOwogCisgICAgQ1VSVk5FVF9SRVNUT1JFKCk7CiAgICAgTUZDX1VOTE9DSygpOwogfQog CkBAIC0yNTI5LDEyICsyNjE1LDE0IEBACiBzdGF0aWMgdm9pZAogZXhwaXJlX2J3X3VwY2FsbHNf c2VuZCh2b2lkICp1bnVzZWQpCiB7CisgICAgSU5JVF9WTkVUX01ST1VURSggKHN0cnVjdCB2bmV0 ICopdW51c2VkICk7CiAgICAgTUZDX0xPQ0soKTsKKyAgICBDVVJWTkVUX1NFVCggKHN0cnVjdCB2 bmV0Kil1bnVzZWQgKTsKICAgICBid191cGNhbGxzX3NlbmQoKTsKKyAgICBjYWxsb3V0X3Jlc2V0 KCZWX2J3X3VwY2FsbHNfY2gsIEJXX1VQQ0FMTFNfUEVSSU9ELAorCWV4cGlyZV9id191cGNhbGxz X3NlbmQsIHVudXNlZCk7CisgICAgQ1VSVk5FVF9SRVNUT1JFKCk7CiAgICAgTUZDX1VOTE9DSygp OwotCi0gICAgY2FsbG91dF9yZXNldCgmYndfdXBjYWxsc19jaCwgQldfVVBDQUxMU19QRVJJT0Qs Ci0JZXhwaXJlX2J3X3VwY2FsbHNfc2VuZCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0yNTQ0LDEwICsy NjMyLDEyIEBACiBzdGF0aWMgdm9pZAogZXhwaXJlX2J3X21ldGVyX3Byb2Nlc3Modm9pZCAqdW51 c2VkKQogewotICAgIGlmIChtcnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKQotCWJ3 X21ldGVyX3Byb2Nlc3MoKTsKKyAgICBJTklUX1ZORVRfTVJPVVRFKCAoc3RydWN0IHZuZXQgKil1 bnVzZWQgKTsKKyAgICBpZiAoVl9tcnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKQor CWJ3X21ldGVyX3Byb2Nlc3MoIChzdHJ1Y3Qgdm5ldCAqKXVudXNlZCApOwogCi0gICAgY2FsbG91 dF9yZXNldCgmYndfbWV0ZXJfY2gsIEJXX01FVEVSX1BFUklPRCwgZXhwaXJlX2J3X21ldGVyX3By b2Nlc3MsIE5VTEwpOworICAgIGNhbGxvdXRfcmVzZXQoJlZfYndfbWV0ZXJfY2gsIEJXX01FVEVS X1BFUklPRCwKKwlleHBpcmVfYndfbWV0ZXJfcHJvY2VzcywgdW51c2VkKTsKIH0KIAogLyoKQEAg LTI1NjIsMTYgKzI2NTIsMTcgQEAKIHBpbV9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBpcCAqaXAsIHN0 cnVjdCB2aWYgKnZpZnAsIHN0cnVjdCBtYnVmICptLAogICAgIHN0cnVjdCBtZmMgKnJ0KQogewor ICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1idWYgKm1iX2NvcHks ICptbTsKIAotICAgIGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKyAgICBpZiAoVl9tcnRkZWJ1 ZyAmIERFQlVHX1BJTSkKIAlsb2coTE9HX0RFQlVHLCAicGltX3JlZ2lzdGVyX3NlbmQ6ICIpOwog CiAgICAgLyoKICAgICAgKiBEbyBub3Qgc2VuZCBJR01QX1dIT0xFUEtUIG5vdGlmaWNhdGlvbnMg dG8gdXNlcmxhbmQsIGlmIHRoZQogICAgICAqIHJlbmRlenZvdXMgcG9pbnQgd2FzIHVuc3BlY2lm aWVkLCBhbmQgd2Ugd2VyZSB0b2xkIG5vdCB0by4KICAgICAgKi8KLSAgICBpZiAocGltX3NxdWVs Y2hfd2hvbGVwa3QgIT0gMCAmJiAobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX1JQKSAmJgorICAg IGlmIChwaW1fc3F1ZWxjaF93aG9sZXBrdCAhPSAwICYmIChWX21ydF9hcGlfY29uZmlnICYgTVJU X01GQ19SUCkgJiYKIAkocnQtPm1mY19ycC5zX2FkZHIgPT0gSU5BRERSX0FOWSkpCiAJcmV0dXJu IDA7CiAKQEAgLTI1ODksNyArMjY4MCw3IEBACiAJbW0gPSBtX3B1bGx1cChtbSwgc2l6ZW9mKHN0 cnVjdCBpcCkpOwogCWlmIChtbSAhPSBOVUxMKSB7CiAJICAgIGlwID0gbXRvZChtbSwgc3RydWN0 IGlwICopOwotCSAgICBpZiAoKG1ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkgJiYKKwkgICAg aWYgKChWX21ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkgJiYKIAkJKHJ0LT5tZmNfcnAuc19h ZGRyICE9IElOQUREUl9BTlkpKSB7CiAJCXBpbV9yZWdpc3Rlcl9zZW5kX3JwKGlwLCB2aWZwLCBt bSwgcnQpOwogCSAgICB9IGVsc2UgewpAQCAtMjY2MCw2ICsyNzUxLDcgQEAKICAgICBzdHJ1Y3Qg bWJ1ZiAqbWJfY29weSwgc3RydWN0IG1mYyAqcnQpCiB7CiAgICAgSU5JVF9WTkVUX0lORVQoY3Vy dm5ldCk7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgbWJ1ZiAq bWJfZmlyc3Q7CiAgICAgaW50IGxlbiA9IG50b2hzKGlwLT5pcF9sZW4pOwogICAgIHN0cnVjdCBp Z21wbXNnICppbTsKQEAgLTI2ODQsMjUgKzI3NzYsMjUgQEAKICAgICBpbSA9IG10b2QobWJfZmly c3QsIHN0cnVjdCBpZ21wbXNnICopOwogICAgIGltLT5pbV9tc2d0eXBlCT0gSUdNUE1TR19XSE9M RVBLVDsKICAgICBpbS0+aW1fbWJ6CQk9IDA7Ci0gICAgaW0tPmltX3ZpZgkJPSB2aWZwIC0gdmlm dGFibGU7CisgICAgaW0tPmltX3ZpZgkJPSB2aWZwIC0gVl92aWZ0YWJsZTsKICAgICBpbS0+aW1f c3JjCQk9IGlwLT5pcF9zcmM7CiAgICAgaW0tPmltX2RzdAkJPSBpcC0+aXBfZHN0OwogCiAgICAg a19pZ21wc3JjLnNpbl9hZGRyCT0gaXAtPmlwX3NyYzsKIAotICAgIG1ydHN0YXQubXJ0c191cGNh bGxzKys7CisgICAgVl9tcnRzdGF0Lm1ydHNfdXBjYWxscysrOwogCiAgICAgaWYgKHNvY2tldF9z ZW5kKFZfaXBfbXJvdXRlciwgbWJfZmlyc3QsICZrX2lnbXBzcmMpIDwgMCkgewotCWlmIChtcnRk ZWJ1ZyAmIERFQlVHX1BJTSkKKwlpZiAoVl9tcnRkZWJ1ZyAmIERFQlVHX1BJTSkKIAkgICAgbG9n KExPR19XQVJOSU5HLAogCQkibWNhc3Q6IHBpbV9yZWdpc3Rlcl9zZW5kX3VwY2FsbDogaXBfbXJv dXRlciBzb2NrZXQgcXVldWUgZnVsbCIpOwotCSsrbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVsbDsK KwkrK1ZfbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVsbDsKIAlyZXR1cm4gRU5PQlVGUzsKICAgICB9 CiAKICAgICAvKiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1zdGF0LnBpbXNfc25kX3JlZ2lz dGVyc19tc2dzKys7Ci0gICAgcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVu OworICAgIFZfcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfbXNncysrOworICAgIFZfcGltc3Rh dC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVuOwogCiAgICAgcmV0dXJuIDA7CiB9CkBA IC0yNzE1LDYgKzI4MDcsNyBAQAogICAgIHN0cnVjdCBtZmMgKnJ0KQogewogICAgIElOSVRfVk5F VF9JTkVUKGN1cnZuZXQpOworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3Ry dWN0IG1idWYgKm1iX2ZpcnN0OwogICAgIHN0cnVjdCBpcCAqaXBfb3V0ZXI7CiAgICAgc3RydWN0 IHBpbV9lbmNhcF9waW1oZHIgKnBpbWhkcjsKQEAgLTI3MjMsNyArMjgxNiw3IEBACiAKICAgICBW SUZfTE9DS19BU1NFUlQoKTsKIAotICAgIGlmICgodmlmaSA+PSBudW12aWZzKSB8fCAodmlmdGFi bGVbdmlmaV0udl9sY2xfYWRkci5zX2FkZHIgPT0gMCkpIHsKKyAgICBpZiAoKHZpZmkgPj0gVl9u dW12aWZzKSB8fCAoVl92aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkciA9PSAwKSkgewog CW1fZnJlZW0obWJfY29weSk7CiAJcmV0dXJuIEVBRERSTk9UQVZBSUw7CQkvKiBUaGUgaWlmIHZp ZiBpcyBpbnZhbGlkICovCiAgICAgfQpAQCAtMjc0OSw3ICsyODQyLDcgQEAKICAgICAqaXBfb3V0 ZXIgPSBwaW1fZW5jYXBfaXBoZHI7CiAgICAgaXBfb3V0ZXItPmlwX2lkID0gaXBfbmV3aWQoKTsK ICAgICBpcF9vdXRlci0+aXBfbGVuID0gbGVuICsgc2l6ZW9mKHBpbV9lbmNhcF9pcGhkcikgKyBz aXplb2YocGltX2VuY2FwX3BpbWhkcik7Ci0gICAgaXBfb3V0ZXItPmlwX3NyYyA9IHZpZnRhYmxl W3ZpZmldLnZfbGNsX2FkZHI7CisgICAgaXBfb3V0ZXItPmlwX3NyYyA9IFZfdmlmdGFibGVbdmlm aV0udl9sY2xfYWRkcjsKICAgICBpcF9vdXRlci0+aXBfZHN0ID0gcnQtPm1mY19ycDsKICAgICAv KgogICAgICAqIENvcHkgdGhlIGlubmVyIGhlYWRlciBUT1MgdG8gdGhlIG91dGVyIGhlYWRlciwg YW5kIHRha2UgY2FyZSBvZiB0aGUKQEAgLTI3NjIsNyArMjg1NSw3IEBACiAJCQkJCSArIHNpemVv ZihwaW1fZW5jYXBfaXBoZHIpKTsKICAgICAqcGltaGRyID0gcGltX2VuY2FwX3BpbWhkcjsKICAg ICAvKiBJZiB0aGUgaWlmIGNyb3NzZXMgYSBib3JkZXIsIHNldCB0aGUgQm9yZGVyLWJpdCAqLwot ICAgIGlmIChydC0+bWZjX2ZsYWdzW3ZpZmldICYgTVJUX01GQ19GTEFHU19CT1JERVJfVklGICYg bXJ0X2FwaV9jb25maWcpCisgICAgaWYgKHJ0LT5tZmNfZmxhZ3NbdmlmaV0gJiBNUlRfTUZDX0ZM QUdTX0JPUkRFUl9WSUYgJiBWX21ydF9hcGlfY29uZmlnKQogCXBpbWhkci0+ZmxhZ3MgfD0gaHRv bmwoUElNX0JPUkRFUl9SRUdJU1RFUik7CiAKICAgICBtYl9maXJzdC0+bV9kYXRhICs9IHNpemVv ZihwaW1fZW5jYXBfaXBoZHIpOwpAQCAtMjc3Miw4ICsyODY1LDggQEAKICAgICBzZW5kX3BhY2tl dCh2aWZwLCBtYl9maXJzdCk7CiAKICAgICAvKiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1z dGF0LnBpbXNfc25kX3JlZ2lzdGVyc19tc2dzKys7Ci0gICAgcGltc3RhdC5waW1zX3NuZF9yZWdp c3RlcnNfYnl0ZXMgKz0gbGVuOworICAgIFZfcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfbXNn cysrOworICAgIFZfcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVuOwogCiAg ICAgcmV0dXJuIDA7CiB9CkBAIC0yODA3LDYgKzI5MDAsNyBAQAogdm9pZAogcGltX2lucHV0KHN0 cnVjdCBtYnVmICptLCBpbnQgb2ZmKQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7 CiAgICAgc3RydWN0IGlwICppcCA9IG10b2QobSwgc3RydWN0IGlwICopOwogICAgIHN0cnVjdCBw aW0gKnBpbTsKICAgICBpbnQgbWlubGVuOwpAQCAtMjgxNSwxNCArMjkwOSwxNCBAQAogICAgIGlu dCBpcGhsZW4gPSBvZmY7CiAKICAgICAvKiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1zdGF0 LnBpbXNfcmN2X3RvdGFsX21zZ3MrKzsKLSAgICBwaW1zdGF0LnBpbXNfcmN2X3RvdGFsX2J5dGVz ICs9IGRhdGFsZW47CisgICAgVl9waW1zdGF0LnBpbXNfcmN2X3RvdGFsX21zZ3MrKzsKKyAgICBW X3BpbXN0YXQucGltc19yY3ZfdG90YWxfYnl0ZXMgKz0gZGF0YWxlbjsKIAogICAgIC8qCiAgICAg ICogVmFsaWRhdGUgbGVuZ3RocwogICAgICAqLwogICAgIGlmIChkYXRhbGVuIDwgUElNX01JTkxF TikgewotCXBpbXN0YXQucGltc19yY3ZfdG9vc2hvcnQrKzsKKwlWX3BpbXN0YXQucGltc19yY3Zf dG9vc2hvcnQrKzsKIAlsb2coTE9HX0VSUiwgInBpbV9pbnB1dDogcGFja2V0IHNpemUgdG9vIHNt YWxsICVkIGZyb20gJWx4XG4iLAogCSAgICBkYXRhbGVuLCAodV9sb25nKWlwLT5pcF9zcmMuc19h ZGRyKTsKIAltX2ZyZWVtKG0pOwpAQCAtMjg2Niw4ICsyOTYwLDggQEAKICAgICBpZiAoUElNX1ZU X1QocGltLT5waW1fdnQpID09IFBJTV9SRUdJU1RFUiAmJiBpbl9ja3N1bShtLCBQSU1fTUlOTEVO KSA9PSAwKSB7CiAJLyogZG8gbm90aGluZywgY2hlY2tzdW0gb2theSAqLwogICAgIH0gZWxzZSBp ZiAoaW5fY2tzdW0obSwgZGF0YWxlbikpIHsKLQlwaW1zdGF0LnBpbXNfcmN2X2JhZHN1bSsrOwot CWlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKwlWX3BpbXN0YXQucGltc19yY3ZfYmFkc3VtKys7 CisJaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19QSU0pCiAJICAgIGxvZyhMT0dfREVCVUcsICJwaW1f aW5wdXQ6IGludmFsaWQgY2hlY2tzdW0iKTsKIAltX2ZyZWVtKG0pOwogCXJldHVybjsKQEAgLTI4 NzUsNyArMjk2OSw3IEBACiAKICAgICAvKiBQSU0gdmVyc2lvbiBjaGVjayAqLwogICAgIGlmIChQ SU1fVlRfVihwaW0tPnBpbV92dCkgPCBQSU1fVkVSU0lPTikgewotCXBpbXN0YXQucGltc19yY3Zf YmFkdmVyc2lvbisrOworCVZfcGltc3RhdC5waW1zX3Jjdl9iYWR2ZXJzaW9uKys7CiAJbG9nKExP R19FUlIsICJwaW1faW5wdXQ6IGluY29ycmVjdCB2ZXJzaW9uICVkLCBleHBlY3RpbmcgJWRcbiIs CiAJICAgIFBJTV9WVF9WKHBpbS0+cGltX3Z0KSwgUElNX1ZFUlNJT04pOwogCW1fZnJlZW0obSk7 CkBAIC0yODk5LDI0ICsyOTkzLDI0IEBACiAJc3RydWN0IGlmbmV0ICp2aWZwOwogCiAJVklGX0xP Q0soKTsKLQlpZiAoKHJlZ192aWZfbnVtID49IG51bXZpZnMpIHx8IChyZWdfdmlmX251bSA9PSBW SUZJX0lOVkFMSUQpKSB7CisJaWYgKChWX3JlZ192aWZfbnVtID49IFZfbnVtdmlmcykgfHwgKFZf cmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSkgewogCSAgICBWSUZfVU5MT0NLKCk7Ci0JICAg IGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKwkgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19Q SU0pCiAJCWxvZyhMT0dfREVCVUcsCi0JCSAgICAicGltX2lucHV0OiByZWdpc3RlciB2aWYgbm90 IHNldDogJWRcbiIsIHJlZ192aWZfbnVtKTsKKwkJICAgICJwaW1faW5wdXQ6IHJlZ2lzdGVyIHZp ZiBub3Qgc2V0OiAlZFxuIiwgVl9yZWdfdmlmX251bSk7CiAJICAgIG1fZnJlZW0obSk7CiAJICAg IHJldHVybjsKIAl9CiAJLyogWFhYIG5lZWQgcmVmY250PyAqLwotCXZpZnAgPSB2aWZ0YWJsZVty ZWdfdmlmX251bV0udl9pZnA7CisJdmlmcCA9IFZfdmlmdGFibGVbVl9yZWdfdmlmX251bV0udl9p ZnA7CiAJVklGX1VOTE9DSygpOwogCiAJLyoKIAkgKiBWYWxpZGF0ZSBsZW5ndGgKIAkgKi8KIAlp ZiAoZGF0YWxlbiA8IFBJTV9SRUdfTUlOTEVOKSB7Ci0JICAgIHBpbXN0YXQucGltc19yY3ZfdG9v c2hvcnQrKzsKLQkgICAgcGltc3RhdC5waW1zX3Jjdl9iYWRyZWdpc3RlcnMrKzsKKwkgICAgVl9w aW1zdGF0LnBpbXNfcmN2X3Rvb3Nob3J0Kys7CisJICAgIFZfcGltc3RhdC5waW1zX3Jjdl9iYWRy ZWdpc3RlcnMrKzsKIAkgICAgbG9nKExPR19FUlIsCiAJCSJwaW1faW5wdXQ6IHJlZ2lzdGVyIHBh Y2tldCBzaXplIHRvbyBzbWFsbCAlZCBmcm9tICVseFxuIiwKIAkJZGF0YWxlbiwgKHVfbG9uZylp cC0+aXBfc3JjLnNfYWRkcik7CkBAIC0yOTI3LDcgKzMwMjEsNyBAQAogCXJlZ2hkciA9ICh1X2lu dDMyX3QgKikocGltICsgMSk7CiAJZW5jYXBfaXAgPSAoc3RydWN0IGlwICopKHJlZ2hkciArIDEp OwogCi0JaWYgKG1ydGRlYnVnICYgREVCVUdfUElNKSB7CisJaWYgKFZfbXJ0ZGVidWcgJiBERUJV R19QSU0pIHsKIAkgICAgbG9nKExPR19ERUJVRywKIAkJInBpbV9pbnB1dFtyZWdpc3Rlcl0sIGVu Y2FwX2lwOiAlbHggLT4gJWx4LCBlbmNhcF9pcCBsZW4gJWRcbiIsCiAJCSh1X2xvbmcpbnRvaGwo ZW5jYXBfaXAtPmlwX3NyYy5zX2FkZHIpLApAQCAtMjkzNyw4ICszMDMxLDggQEAKIAogCS8qIHZl cmlmeSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGlubmVyIHBhY2tldCAqLwogCWlmIChlbmNh cF9pcC0+aXBfdiAhPSBJUFZFUlNJT04pIHsKLQkgICAgcGltc3RhdC5waW1zX3Jjdl9iYWRyZWdp c3RlcnMrKzsKLQkgICAgaWYgKG1ydGRlYnVnICYgREVCVUdfUElNKSB7CisJICAgIFZfcGltc3Rh dC5waW1zX3Jjdl9iYWRyZWdpc3RlcnMrKzsKKwkgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19Q SU0pIHsKIAkJbG9nKExPR19ERUJVRywgInBpbV9pbnB1dDogaW52YWxpZCBJUCB2ZXJzaW9uICgl ZCkgIgogCQkgICAgIm9mIHRoZSBpbm5lciBwYWNrZXRcbiIsIGVuY2FwX2lwLT5pcF92KTsKIAkg ICAgfQpAQCAtMjk0OCw4ICszMDQyLDggQEAKIAogCS8qIHZlcmlmeSB0aGUgaW5uZXIgcGFja2V0 IGlzIGRlc3RpbmVkIHRvIGEgbWNhc3QgZ3JvdXAgKi8KIAlpZiAoIUlOX01VTFRJQ0FTVChudG9o bChlbmNhcF9pcC0+aXBfZHN0LnNfYWRkcikpKSB7Ci0JICAgIHBpbXN0YXQucGltc19yY3ZfYmFk cmVnaXN0ZXJzKys7Ci0JICAgIGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKwkgICAgVl9waW1z dGF0LnBpbXNfcmN2X2JhZHJlZ2lzdGVycysrOworCSAgICBpZiAoVl9tcnRkZWJ1ZyAmIERFQlVH X1BJTSkKIAkJbG9nKExPR19ERUJVRywKIAkJICAgICJwaW1faW5wdXQ6IGlubmVyIHBhY2tldCBv ZiByZWdpc3RlciBpcyBub3QgIgogCQkgICAgIm11bHRpY2FzdCAlbHhcbiIsCkBAIC0zMDAwLDIx ICszMDk0LDIxIEBACiAKIAkvKiBLZWVwIHN0YXRpc3RpY3MgKi8KIAkvKiBYWFg6IHJlZ2lzdGVy c19ieXRlcyBpbmNsdWRlIG9ubHkgdGhlIGVuY2FwLiBtY2FzdCBwa3QgKi8KLQlwaW1zdGF0LnBp bXNfcmN2X3JlZ2lzdGVyc19tc2dzKys7Ci0JcGltc3RhdC5waW1zX3Jjdl9yZWdpc3RlcnNfYnl0 ZXMgKz0gbnRvaHMoZW5jYXBfaXAtPmlwX2xlbik7CisJVl9waW1zdGF0LnBpbXNfcmN2X3JlZ2lz dGVyc19tc2dzKys7CisJVl9waW1zdGF0LnBpbXNfcmN2X3JlZ2lzdGVyc19ieXRlcyArPSBudG9o cyhlbmNhcF9pcC0+aXBfbGVuKTsKIAogCS8qCiAJICogZm9yd2FyZCB0aGUgaW5uZXIgaXAgcGFj a2V0OyBwb2ludCBtX2RhdGEgYXQgdGhlIGlubmVyIGlwLgogCSAqLwogCW1fYWRqKG0sIGlwaGxl biArIFBJTV9NSU5MRU4pOwogCi0JaWYgKG1ydGRlYnVnICYgREVCVUdfUElNKSB7CisJaWYgKFZf bXJ0ZGVidWcgJiBERUJVR19QSU0pIHsKIAkgICAgbG9nKExPR19ERUJVRywKIAkJInBpbV9pbnB1 dDogZm9yd2FyZGluZyBkZWNhcHN1bGF0ZWQgcmVnaXN0ZXI6ICIKIAkJInNyYyAlbHgsIGRzdCAl bHgsIHZpZiAlZFxuIiwKIAkJKHVfbG9uZyludG9obChlbmNhcF9pcC0+aXBfc3JjLnNfYWRkciks CiAJCSh1X2xvbmcpbnRvaGwoZW5jYXBfaXAtPmlwX2RzdC5zX2FkZHIpLAotCQlyZWdfdmlmX251 bSk7CisJCVZfcmVnX3ZpZl9udW0pOwogCX0KIAkvKiBOQjogdmlmcCB3YXMgY29sbGVjdGVkIGFi b3ZlOyBjYW4gaXQgY2hhbmdlIG9uIHVzPyAqLwogCWlmX3NpbWxvb3AodmlmcCwgbSwgZHN0LnNp bl9mYW1pbHksIDApOwpAQCAtMzAzNyw2ICszMTMxLDQxIEBACiAgICAgcmV0dXJuOwogfQogCisj aWZkZWYgVklNQUdFCisvKiBpbml0aWFsaXphdGlvbiBmb3IgbXVsdGljYXN0IHJvdXRpbmcgc3Rh dGUgKi8KK3N0YXRpYyBpbnQKK3ZuZXRfbXJvdXRlX2lhdHRhY2godW51c2VkKQorICAgIGNvbnN0 IHZvaWQgKnVudXNlZDsKK3sKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOworCisgICAg Vl9yZWdfdmlmX251bSA9IFZJRklfSU5WQUxJRDsKKyAgICBNUk9VVEVSX0xPQ0tfSU5JVCgpOwor ICAgIE1GQ19MT0NLX0lOSVQoKTsKKyAgICBWSUZfTE9DS19JTklUKCk7CisgICAgaXBfbXJvdXRl cl9yZXNldCgpOworICAgIHJldHVybiAwOworfQorCisvKiBkZS1pbml0aWFsaXphdGlvbiBmb3Ig bXVsdGljYXN0IHJvdXRpbmcgc3RhdGUgKi8KK3N0YXRpYyBpbnQKK3ZuZXRfbXJvdXRlX2lkZXRh Y2godW51c2VkKQorICAgIGNvbnN0IHZvaWQgKnVudXNlZDsKK3sKKyAgICBJTklUX1ZORVRfTVJP VVRFKGN1cnZuZXQpOworCisgICAgWF9pcF9tcm91dGVyX2RvbmUoKTsKKyNpZmRlZiBJTkVUNgor ICAgIFhfaXA2X21yb3V0ZXJfZG9uZSgpOworI2VuZGlmCisKKyAgICBWSUZfTE9DS19ERVNUUk9Z KCk7CisgICAgTUZDX0xPQ0tfREVTVFJPWSgpOworICAgIE1ST1VURVJfTE9DS19ERVNUUk9ZKCk7 CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogVklNQUdFICovCisKIC8qCiAgKiBYWFg6IFRo aXMgaXMgY29tbW9uIGNvZGUgZm9yIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiBmb3IgYm90 aAogICogdGhlIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcgcGF0aHMuIEl0IGNv dWxkIGRvIHdpdGggY2xlYW51cC4KQEAgLTMwNDUsMTIgKzMxNzQsMTUgQEAKIGlwX21yb3V0ZV9t b2RldmVudChtb2R1bGVfdCBtb2QsIGludCB0eXBlLCB2b2lkICp1bnVzZWQpCiB7CiAgICAgSU5J VF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOworICAg IElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz ZSBNT0RfTE9BRDoKLQlNUk9VVEVSX0xPQ0tfSU5JVCgpOwotCU1GQ19MT0NLX0lOSVQoKTsKLQlW SUZfTE9DS19JTklUKCk7Ci0JaXBfbXJvdXRlcl9yZXNldCgpOworI2lmZGVmIFZJTUFHRQorCXZu ZXRfbW9kX3JlZ2lzdGVyKCZ2bmV0X21yb3V0ZV9tb2RpbmZvKTsKKyNlbHNlCisJdm5ldF9tcm91 dGVfaWF0dGFjaChOVUxMKTsKKyNlbmRpZgogCVRVTkFCTEVfVUxPTkdfRkVUQ0goIm5ldC5pbmV0 LnBpbS5zcXVlbGNoX3dob2xlcGt0IiwKIAkgICAgJnBpbV9zcXVlbGNoX3dob2xlcGt0KTsKIApA QCAtMzExMywxNyArMzI0NSwyMSBAQAogCSAqLwogCWlmIChWX2lwX21yb3V0ZXIKICNpZmRlZiBJ TkVUNgotCSAgICB8fCBpcDZfbXJvdXRlcgorCSAgICB8fCBWX2lwNl9tcm91dGVyCiAjZW5kaWYK IAkpCiAJICAgIHJldHVybiBFSU5WQUw7CiAKKyNpZmRlZiBWSU1BR0UKKwl2bmV0X21vZF9kZXJl Z2lzdGVyKCZ2bmV0X21yb3V0ZV9tb2RpbmZvKTsKKyNlbHNlCisJdm5ldF9tcm91dGVfaWRldGFj aChOVUxMKQorI2VuZGlmCiAjaWZkZWYgSU5FVDYKIAlpZiAocGltNl9lbmNhcF9jb29raWUpIHsK IAkgICAgZW5jYXBfZGV0YWNoKHBpbTZfZW5jYXBfY29va2llKTsKIAkgICAgcGltNl9lbmNhcF9j b29raWUgPSBOVUxMOwogCX0KLQlYX2lwNl9tcm91dGVyX2RvbmUoKTsKIAlpcDZfbWZvcndhcmQg PSBOVUxMOwogCWlwNl9tcm91dGVyX2RvbmUgPSBOVUxMOwogCWlwNl9tcm91dGVyX2dldCA9IE5V TEw7CkBAIC0zMTM1LDcgKzMyNzEsNiBAQAogCSAgICBlbmNhcF9kZXRhY2gocGltX2VuY2FwX2Nv b2tpZSk7CiAJICAgIHBpbV9lbmNhcF9jb29raWUgPSBOVUxMOwogCX0KLQlYX2lwX21yb3V0ZXJf ZG9uZSgpOwogCWlwX21jYXN0X3NyYyA9IE5VTEw7CiAJaXBfbWZvcndhcmQgPSBOVUxMOwogCWlw X21yb3V0ZXJfZG9uZSA9IE5VTEw7CkBAIC0zMTQ4LDEwICszMjgzLDYgQEAKIAlsZWdhbF92aWZf bnVtID0gTlVMTDsKIAltcnRfaW9jdGwgPSBOVUxMOwogCXJzdnBfaW5wdXRfcCA9IE5VTEw7Ci0K LQlWSUZfTE9DS19ERVNUUk9ZKCk7Ci0JTUZDX0xPQ0tfREVTVFJPWSgpOwotCU1ST1VURVJfTE9D S19ERVNUUk9ZKCk7CiAJYnJlYWs7CiAKICAgICBkZWZhdWx0OgpkaWZmIC11ciBzeXMuMjAwODEw MTUvbmV0aW5ldC9pcF9tcm91dGUuaCBzeXMvbmV0aW5ldC9pcF9tcm91dGUuaAotLS0gc3lzLjIw MDgxMDE1L25ldGluZXQvaXBfbXJvdXRlLmgJMjAwOC0wOC0xNiAxNjoyOToxOS4wMDAwMDAwMDAg LTA3MDAKKysrIHN5cy9uZXRpbmV0L2lwX21yb3V0ZS5oCTIwMDgtMTEtMDUgMTM6MjE6MDguMDAw MDAwMDAwIC0wODAwCkBAIC01Miw2ICs1MiwxMCBAQAogICogYmFuZHdpZHRoIG1ldGVyaW5nIGFu ZCBzaWduYWxpbmcuCiAgKi8KIAorI2lmZGVmIFZJTUFHRQorI2luY2x1ZGUgPG5ldGluZXQvcGlt X3Zhci5oPgkvKiBzdHJ1Y3QgcGltc3RhdCAqLworI2VuZGlmCisKIAogLyoKICAqIE11bHRpY2Fz dCBSb3V0aW5nIHNldC9nZXRzb2Nrb3B0IGNvbW1hbmRzLgpAQCAtODAsNiArODQsOSBAQAogdHlw ZWRlZiB1X2xvbmcgdmlmYml0bWFwX3Q7CiB0eXBlZGVmIHVfc2hvcnQgdmlmaV90OwkJLyogdHlw ZSBvZiBhIHZpZiBpbmRleCAqLwogI2RlZmluZSBBTExfVklGUyAodmlmaV90KS0xCisjaWZkZWYg VklNQUdFCisjZGVmaW5lCQlWSUZJX0lOVkFMSUQJKCh2aWZpX3QpIC0xKQorI2VuZGlmIC8qIFZJ TUFHRSAqLwogCiAjZGVmaW5lCVZJRk1fU0VUKG4sIG0pCQkoKG0pIHw9ICgxIDw8IChuKSkpCiAj ZGVmaW5lCVZJRk1fQ0xSKG4sIG0pCQkoKG0pICY9IH4oMSA8PCAobikpKQpAQCAtMjA1LDYgKzIx MiwxMCBAQAogI2RlZmluZSBCV19VUENBTExfVEhSRVNIT0xEX0lOVEVSVkFMX01JTl9TRUMJMwog I2RlZmluZSBCV19VUENBTExfVEhSRVNIT0xEX0lOVEVSVkFMX01JTl9VU0VDCTAKIAorI2lmZGVm IFZJTUFHRQorI2RlZmluZSBCV19NRVRFUl9CVUNLRVRTCTEwMjQKKyNlbmRpZiAvKiBWSU1BR0Ug Ki8KKwogLyoKICAqIFRoZSBrZXJuZWwncyBtdWx0aWNhc3Qgcm91dGluZyBzdGF0aXN0aWNzLgog ICovCkBAIC0zNjEsNiArMzcyLDYyIEBACiBleHRlcm4gaW50CSgqaXBfbXJvdXRlcl9kb25lKSh2 b2lkKTsKIGV4dGVybiBpbnQJKCptcnRfaW9jdGwpKGludCwgY2FkZHJfdCwgaW50KTsKIAorI2lm ZGVmIFZJTUFHRQorc3RydWN0IHZuZXRfbXJvdXRlIHsKKwkvKiBmcm9tIGlwX21yb3V0ZS5jICov CisJdV9pbnQJX3JzdnBkZWJ1ZzsKKwl1X2ludAlfbXJ0ZGVidWc7CisJc3RydWN0IAltcnRzdGF0 IF9tcnRzdGF0OworCXN0cnVjdAltZmMgKl9tZmN0YWJsZVtNRkNUQkxTSVpdOworCXN0cnVjdAlt dHggX21yb3V0ZXJfbXR4OworCXN0cnVjdAltdHggX21mY19tdHg7CisJc3RydWN0CXZpZiBfdmlm dGFibGVbTUFYVklGU107CisJc3RydWN0CW10eCBfdmlmX210eDsKKwl1X2NoYXIJX25leHBpcmVb TUZDVEJMU0laXTsKKwlldmVudGhhbmRsZXJfdGFnIF9pZl9kZXRhY2hfZXZlbnRfdGFnOworCXN0 cnVjdCAgY2FsbG91dCBfZXhwaXJlX3VwY2FsbHNfY2g7CisJc3RydWN0CWJ3X21ldGVyICpfYndf bWV0ZXJfdGltZXJzW0JXX01FVEVSX0JVQ0tFVFNdOworCXN0cnVjdCAgY2FsbG91dCBfYndfbWV0 ZXJfY2g7CisJc3RydWN0CWJ3X3VwY2FsbCBfYndfdXBjYWxsc1tCV19VUENBTExTX01BWF07CisJ dV9pbnQJX2J3X3VwY2FsbHNfbjsKKwlzdHJ1Y3QgIGNhbGxvdXQgX2J3X3VwY2FsbHNfY2g7CisJ c3RydWN0CXBpbXN0YXQgX3BpbXN0YXQ7CisJc3RydWN0CWlmbmV0IF9tdWx0aWNhc3RfcmVnaXN0 ZXJfaWY7CisJdmlmaV90CV9yZWdfdmlmX251bTsKKwl2aWZpX3QJX251bXZpZnM7CisJaW50CV9w aW1fYXNzZXJ0OworCXVpbnQzMl90IF9tcnRfYXBpX2NvbmZpZzsKK307CisjZW5kaWYgLyogVklN QUdFICovCisKKyNkZWZpbmUgSU5JVF9WTkVUX01ST1VURSh2bmV0KSBcCisJSU5JVF9GUk9NX1ZO RVQodm5ldCwgVk5FVF9NT0RfTVJPVVRFLCBzdHJ1Y3Qgdm5ldF9tcm91dGUsIHZuZXRfbXJvdXRl KQorCisjZGVmaW5lIFZORVRfTVJPVVRFKHN5bSkgIFZTWU0odm5ldF9tcm91dGUsIHN5bSkKKwor I2RlZmluZSBWX3JzdnBkZWJ1ZwkJVk5FVF9NUk9VVEUocnN2cGRlYnVnKQorI2RlZmluZSBWX21y dGRlYnVnCQlWTkVUX01ST1VURShtcnRkZWJ1ZykKKyNkZWZpbmUgVl9tcnRzdGF0CQlWTkVUX01S T1VURShtcnRzdGF0KQorI2RlZmluZSBWX21mY3RhYmxlCQlWTkVUX01ST1VURShtZmN0YWJsZSkK KyNkZWZpbmUgVl9tcm91dGVyX210eAkJVk5FVF9NUk9VVEUobXJvdXRlcl9tdHgpCisjZGVmaW5l IFZfbWZjX210eAkJVk5FVF9NUk9VVEUobWZjX210eCkKKyNkZWZpbmUgVl92aWZ0YWJsZQkJVk5F VF9NUk9VVEUodmlmdGFibGUpCisjZGVmaW5lIFZfdmlmX210eAkJVk5FVF9NUk9VVEUodmlmX210 eCkKKyNkZWZpbmUgVl9uZXhwaXJlCQlWTkVUX01ST1VURShuZXhwaXJlKQorI2RlZmluZSBWX2lm X2RldGFjaF9ldmVudF90YWcJVk5FVF9NUk9VVEUoaWZfZGV0YWNoX2V2ZW50X3RhZykKKyNkZWZp bmUgVl9leHBpcmVfdXBjYWxsc19jaAlWTkVUX01ST1VURShleHBpcmVfdXBjYWxsc19jaCkKKyNk ZWZpbmUgVl9id19tZXRlcl90aW1lcnMJVk5FVF9NUk9VVEUoYndfbWV0ZXJfdGltZXJzKQorI2Rl ZmluZSBWX2J3X21ldGVyX2NoCQlWTkVUX01ST1VURShid19tZXRlcl9jaCkKKyNkZWZpbmUgVl9i d191cGNhbGxzCQlWTkVUX01ST1VURShid191cGNhbGxzKQorI2RlZmluZSBWX2J3X3VwY2FsbHNf bgkJVk5FVF9NUk9VVEUoYndfdXBjYWxsc19uKQorI2RlZmluZSBWX2J3X3VwY2FsbHNfY2gJCVZO RVRfTVJPVVRFKGJ3X3VwY2FsbHNfY2gpCisjZGVmaW5lIFZfcGltc3RhdAkJVk5FVF9NUk9VVEUo cGltc3RhdCkKKyNkZWZpbmUgVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWYJVk5FVF9NUk9VVEUobXVs dGljYXN0X3JlZ2lzdGVyX2lmKQorI2RlZmluZSBWX3JlZ192aWZfbnVtCQlWTkVUX01ST1VURShy ZWdfdmlmX251bSkKKyNkZWZpbmUgVl9udW12aWZzCQlWTkVUX01ST1VURShudW12aWZzKQorI2Rl ZmluZSBWX3BpbV9hc3NlcnQJCVZORVRfTVJPVVRFKHBpbV9hc3NlcnQpCisjZGVmaW5lIFZfbXJ0 X2FwaV9jb25maWcJVk5FVF9NUk9VVEUobXJ0X2FwaV9jb25maWcpCisKICNlbmRpZiAvKiBfS0VS TkVMICovCiAKICNlbmRpZiAvKiBfTkVUSU5FVF9JUF9NUk9VVEVfSF8gKi8KZGlmZiAtdXIgc3lz LjIwMDgxMDE1L25ldGluZXQvcGltX3Zhci5oIHN5cy9uZXRpbmV0L3BpbV92YXIuaAotLS0gc3lz LjIwMDgxMDE1L25ldGluZXQvcGltX3Zhci5oCTIwMDctMTEtMTkgMDY6NDk6MTEuMDAwMDAwMDAw IC0wODAwCisrKyBzeXMvbmV0aW5ldC9waW1fdmFyLmgJMjAwOC0xMC0yOCAyMDowMToyMi4wMDAw MDAwMDAgLTA3MDAKQEAgLTczLDcgKzczLDkgQEAKICNpZmRlZiBfS0VSTkVMCiAKIHZvaWQgcGlt X2lucHV0KHN0cnVjdCBtYnVmICosIGludCk7CisjaWZkZWYgU1lTQ1RMX0RFQ0wKIFNZU0NUTF9E RUNMKF9uZXRfaW5ldF9waW0pOwogI2VuZGlmCisjZW5kaWYKIAogI2VuZGlmIC8qIF9ORVRJTkVU X1BJTV9WQVJfSF8gKi8KZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQvdmluZXQuaCBzeXMv bmV0aW5ldC92aW5ldC5oCi0tLSBzeXMuMjAwODEwMTUvbmV0aW5ldC92aW5ldC5oCTIwMDctMTEt MTkgMDk6MDk6MzguMDAwMDAwMDAwIC0wODAwCisrKyBzeXMvbmV0aW5ldC92aW5ldC5oCTIwMDgt MTEtMDMgMTY6MDQ6MzYuMDAwMDAwMDAwIC0wODAwCkBAIC01Myw2ICs1Myw5IEBACiAjaW5jbHVk ZSA8bmV0aW5ldC90Y3Bfc3luY2FjaGUuaD4KICNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgogI2lu Y2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfbXJvdXRlLmg+ CisjaW5jbHVkZSA8bmV0aW5ldC9waW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3BpbV92YXIuaD4K IAogc3RydWN0IHZuZXRfaW5ldCB7CiAJc3RydWN0CWluX2lmYWRkcmhhc2hoZWFkICpfaW5faWZh ZGRyaGFzaHRibDsKZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQ2L2lwNl9pbnB1dC5jIHN5 cy9uZXRpbmV0Ni9pcDZfaW5wdXQuYwotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2L2lwNl9pbnB1 dC5jCTIwMDgtMTAtMTUgMDg6MjU6MjguMDAwMDAwMDAwIC0wNzAwCisrKyBzeXMvbmV0aW5ldDYv aXA2X2lucHV0LmMJMjAwOC0xMC0yOCAyMDowMToyMi4wMDAwMDAwMDAgLTA3MDAKQEAgLTE5Miw2 ICsxOTIsMjAgQEAKIAluZDZfaW5pdCgpOwogCWZyYWc2X2luaXQoKTsKIAorCVZfaXA2X21yb3V0 ZXJfdmVyID0gMDsKKwlWX2lwNl9tcm91dGVyID0gTlVMTDsKKwliemVybygmVl9tcnQ2c3RhdCwg c2l6ZW9mKFZfbXJ0NnN0YXQpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6ZW9m KFZfbWY2Y3RhYmxlKSk7CisJYnplcm8oKGNhZGRyX3QpVl9uNmV4cGlyZSwgc2l6ZW9mKFZfbjZl eHBpcmUpKTsKKwliemVybygoY2FkZHJfdClWX21pZjZ0YWJsZSwgc2l6ZW9mKFZfbWlmNnRhYmxl KSk7CisJVl9tcnQ2ZGVidWcgPSAwOworCVZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7 CisJVl9udW1taWZzID0gMDsKKwlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKKwliemVybygm Vl9waW02c3RhdCwgc2l6ZW9mKFZfcGltNnN0YXQpKTsKKwlWX3BpbTYgPSAwOworCWJ6ZXJvKChj YWRkcl90KVZfdXBjYWxsX2RhdGEsIHNpemVvZihWX3VwY2FsbF9kYXRhKSk7CisKICNpZmRlZiBW SU1BR0UKIAkvKiBTa2lwIGdsb2JhbCBpbml0aWFsaXphdGlvbiBzdHVmZiBmb3Igbm9uLWRlZmF1 bHQgaW5zdGFuY2VzLiAqLwogCWlmICghSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKQpAQCAtNTA3 LDcgKzUyMSw3IEBACiAJCUlONl9MT09LVVBfTVVMVEkoaXA2LT5pcDZfZHN0LCBtLT5tX3BrdGhk ci5yY3ZpZiwgaW42bSk7CiAJCWlmIChpbjZtKQogCQkJb3VycyA9IDE7Ci0JCWVsc2UgaWYgKCFp cDZfbXJvdXRlcikgeworCQllbHNlIGlmICghVl9pcDZfbXJvdXRlcikgewogCQkJVl9pcDZzdGF0 LmlwNnNfbm90bWVtYmVyKys7CiAJCQlWX2lwNnN0YXQuaXA2c19jYW50Zm9yd2FyZCsrOwogCQkJ aW42X2lmc3RhdF9pbmMobS0+bV9wa3RoZHIucmN2aWYsIGlmczZfaW5fZGlzY2FyZCk7CkBAIC03 NjgsNyArNzgyLDcgQEAKIAkJICogaXA2X21mb3J3YXJkKCkgcmV0dXJucyBhIG5vbi16ZXJvIHZh bHVlLCB0aGUgcGFja2V0CiAJCSAqIG11c3QgYmUgZGlzY2FyZGVkLCBlbHNlIGl0IG1heSBiZSBh Y2NlcHRlZCBiZWxvdy4KIAkJICovCi0JCWlmIChpcDZfbXJvdXRlciAmJiBpcDZfbWZvcndhcmQg JiYKKwkJaWYgKFZfaXA2X21yb3V0ZXIgJiYgaXA2X21mb3J3YXJkICYmCiAJCSAgICBpcDZfbWZv cndhcmQoaXA2LCBtLT5tX3BrdGhkci5yY3ZpZiwgbSkpIHsKIAkJCVZfaXA2c3RhdC5pcDZzX2Nh bnRmb3J3YXJkKys7CiAJCQltX2ZyZWVtKG0pOwpkaWZmIC11ciBzeXMuMjAwODEwMTUvbmV0aW5l dDYvaXA2X21yb3V0ZS5jIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmMKLS0tIHN5cy4yMDA4MTAx NS9uZXRpbmV0Ni9pcDZfbXJvdXRlLmMJMjAwOC0xMC0xNSAwODoyNToyOC4wMDAwMDAwMDAgLTA3 MDAKKysrIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmMJMjAwOC0xMS0wNSAxNDozNDoxMC4wMDAw MDAwMDAgLTA4MDAKQEAgLTE2MCwxNCArMTYwLDE3IEBACiBTWVNDVExfREVDTChfbmV0X2luZXQ2 X2lwNik7CiBTWVNDVExfTk9ERShfbmV0X2luZXQ2LCBJUFBST1RPX1BJTSwgcGltLCBDVExGTEFH X1JXLCAwLCAiUElNIik7CiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG1ydDZzdGF0 IG1ydDZzdGF0OwotU1lTQ1RMX1NUUlVDVChfbmV0X2luZXQ2X2lwNiwgT0lEX0FVVE8sIG1ydDZz dGF0LCBDVExGTEFHX1JXLAotICAgICZtcnQ2c3RhdCwgbXJ0NnN0YXQsCisjZW5kaWYgLyogIVZJ TUFHRSAqLworU1lTQ1RMX1ZfU1RSVUNUKFZfTkVULCB2bmV0X2luZXQ2LCBfbmV0X2luZXQ2X2lw NiwgT0lEX0FVVE8sIG1ydDZzdGF0LAorICAgIENUTEZMQUdfUlcsIG1ydDZzdGF0LCBtcnQ2c3Rh dCwKICAgICAiTXVsdGljYXN0IFJvdXRpbmcgU3RhdGlzdGljcyAoc3RydWN0IG1ydDZzdGF0LCBu ZXRpbmV0Ni9pcDZfbXJvdXRlLmgpIik7CiAKICNkZWZpbmUgTk9fUlRFX0ZPVU5ECTB4MQogI2Rl ZmluZSBSVEVfRk9VTkQJMHgyCiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG1mNmMg Km1mNmN0YWJsZVtNRjZDVEJMU0laXTsKIFNZU0NUTF9PUEFRVUUoX25ldF9pbmV0Nl9pcDYsIE9J RF9BVVRPLCBtZjZjdGFibGUsIENUTEZMQUdfUkQsCiAgICAgJm1mNmN0YWJsZSwgc2l6ZW9mKG1m NmN0YWJsZSksICJTLCptZjZjdGFibGVbTUY2Q1RCTFNJWl0iLApAQCAtMTgwLDYgKzE4Myw3IEBA CiBTWVNDVExfT1BBUVVFKF9uZXRfaW5ldDZfaXA2LCBPSURfQVVUTywgbWlmNnRhYmxlLCBDVExG TEFHX1JELAogICAgICZtaWY2dGFibGUsIHNpemVvZihtaWY2dGFibGUpLCAiUyx2aWZbTUFYTUlG U10iLAogICAgICJNdWx0aWNhc3QgSW50ZXJmYWNlcyAoc3RydWN0IG1pZltNQVhNSUZTXSwgbmV0 aW5ldDYvaXA2X21yb3V0ZS5oKSIpOworI2VuZGlmIC8qICFWSU1BR0UgKi8KIAogI2lmZGVmIE1S VDZERUJVRwogI2lmbmRlZiBWSU1BR0UKQEAgLTE5OSw3ICsyMDMsOSBAQAogCiAjaWZkZWYgSU5F VAogI2lmZGVmIE1ST1VUSU5HCisjaWZuZGVmIFZJTUFHRQogZXh0ZXJuIHN0cnVjdCBzb2NrZXQg KmlwX21yb3V0ZXI7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogI2VuZGlmCiAjZW5kaWYKIApAQCAt MjE0LDE5ICsyMjAsMjMgQEAKICAqIG9ubHkgZXhpc3QgYXMgYSBwbGFjZWhvbGRlciBmb3IgbXVs dGljYXN0IHNvdXJjZQogICogdmVyaWZpY2F0aW9uLgogICovCisjaWZuZGVmIFZJTUFHRQogc3Rh dGljIHN0cnVjdCBpZm5ldCAqbXVsdGljYXN0X3JlZ2lzdGVyX2lmNjsKKyNlbmRpZiAvKiAhVklN QUdFICovCiAKICNkZWZpbmUgRU5DQVBfSE9QUyA2NAogCiAvKgogICogUHJpdmF0ZSB2YXJpYWJs ZXMuCiAgKi8KKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgbWlmaV90IG51bW1pZnMgPSAwOwogc3Rh dGljIG1pZmlfdCByZWdfbWlmX251bSA9IChtaWZpX3QpLTE7CiAKIHN0YXRpYyBzdHJ1Y3QgcGlt NnN0YXQgcGltNnN0YXQ7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldDZfcGltLCBQSU02Q1RMX1NU QVRTLCBzdGF0cywgQ1RMRkxBR19SRCwKLSAgICAmcGltNnN0YXQsIHBpbTZzdGF0LAorI2VuZGlm IC8qICFWSU1BR0UgKi8KK1NZU0NUTF9WX1NUUlVDVChWX05FVCwgdm5ldF9pbmV0NiwgX25ldF9p bmV0Nl9waW0sIFBJTTZDVExfU1RBVFMsIHN0YXRzLAorICAgIENUTEZMQUdfUkQsIHBpbTZzdGF0 LCBwaW02c3RhdCwKICAgICAiUElNIFN0YXRpc3RpY3MgKHN0cnVjdCBwaW02c3RhdCwgbmV0aW5l dDYvcGltX3Zhci5oKSIpOwogCiAjaWZuZGVmIFZJTUFHRQpAQCAtMjQ1LDkgKzI1NSw5IEBACiAg KiBGaW5kIGEgcm91dGUgZm9yIGEgZ2l2ZW4gb3JpZ2luIElQdjYgYWRkcmVzcyBhbmQgTXVsdGlj YXN0IGdyb3VwIGFkZHJlc3MuCiAgKi8KICNkZWZpbmUgTUY2Q0ZJTkQobywgZywgcnQpIGRvIHsg XAotCXN0cnVjdCBtZjZjICpfcnQgPSBtZjZjdGFibGVbTUY2Q0hBU0gobyxnKV07IFwKKwlzdHJ1 Y3QgbWY2YyAqX3J0ID0gVl9tZjZjdGFibGVbTUY2Q0hBU0gobyxnKV07IFwKIAlydCA9IE5VTEw7 IFwKLQltcnQ2c3RhdC5tcnQ2c19tZmNfbG9va3VwcysrOyBcCisJVl9tcnQ2c3RhdC5tcnQ2c19t ZmNfbG9va3VwcysrOyBcCiAJd2hpbGUgKF9ydCkgeyBcCiAJCWlmIChJTjZfQVJFX0FERFJfRVFV QUwoJl9ydC0+bWY2Y19vcmlnaW4uc2luNl9hZGRyLCAmKG8pKSAmJiBcCiAJCSAgICBJTjZfQVJF X0FERFJfRVFVQUwoJl9ydC0+bWY2Y19tY2FzdGdycC5zaW42X2FkZHIsICYoZykpICYmIFwKQEAg LTI1OCw3ICsyNjgsNyBAQAogCQlfcnQgPSBfcnQtPm1mNmNfbmV4dDsgXAogCX0gXAogCWlmIChy dCA9PSBOVUxMKSB7IFwKLQkJbXJ0NnN0YXQubXJ0NnNfbWZjX21pc3NlcysrOyBcCisJCVZfbXJ0 NnN0YXQubXJ0NnNfbWZjX21pc3NlcysrOyBcCiAJfSBcCiB9IHdoaWxlICgvKkNPTlNUQ09ORCov IDApCiAKQEAgLTI5MSw3ICszMDEsOSBAQAogCiAjaWZkZWYgVVBDQUxMX1RJTUlORwogI2RlZmlu ZSBVUENBTExfTUFYCTUwCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVfbG9uZyB1cGNhbGxfZGF0 YVtVUENBTExfTUFYICsgMV07CisjZW5kaWYgLyogIVZJTUFHRSAqLwogc3RhdGljIHZvaWQgY29s bGF0ZSgpOwogI2VuZGlmIC8qIFVQQ0FMTF9USU1JTkcgKi8KIApAQCAtMzAzLDcgKzMxNSw5IEBA CiBzdGF0aWMgaW50IGFkZF9tNmZjKHN0cnVjdCBtZjZjY3RsICopOwogc3RhdGljIGludCBkZWxf bTZmYyhzdHJ1Y3QgbWY2Y2N0bCAqKTsKIAotc3RhdGljIHN0cnVjdCBjYWxsb3V0IGV4cGlyZV91 cGNhbGxzX2NoOworI2lmbmRlZiBWSU1BR0UKK3N0YXRpYyBzdHJ1Y3QgY2FsbG91dCBleHBpcmVf dXBjYWxsc19jaDY7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogCiBpbnQgWF9pcDZfbWZvcndhcmQo c3RydWN0IGlwNl9oZHIgKmlwNiwgc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptKTsK IGludCBYX2lwNl9tcm91dGVyX2RvbmUodm9pZCk7CkBAIC0zMTEsMTkgKzMyNSwyMSBAQAogaW50 IFhfaXA2X21yb3V0ZXJfZ2V0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29w dCk7CiBpbnQgWF9tcnQ2X2lvY3RsKGludCBjbWQsIGNhZGRyX3QgZGF0YSk7CiAKKwogLyoKICAq IEhhbmRsZSBNUlQgc2V0c29ja29wdCBjb21tYW5kcyB0byBtb2RpZnkgdGhlIG11bHRpY2FzdCBy b3V0aW5nIHRhYmxlcy4KICAqLwogaW50CiBYX2lwNl9tcm91dGVyX3NldChzdHJ1Y3Qgc29ja2V0 ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpCiB7CisJSU5JVF9WTkVUX0lORVQ2KHNvLT5zb192 bmV0KTsKIAlpbnQgZXJyb3IgPSAwOwogCWludCBvcHR2YWw7CiAJc3RydWN0IG1pZjZjdGwgbWlm YzsKIAlzdHJ1Y3QgbWY2Y2N0bCBtZmNjOwogCW1pZmlfdCBtaWZpOwogCi0JaWYgKHNvICE9IGlw Nl9tcm91dGVyICYmIHNvcHQtPnNvcHRfbmFtZSAhPSBNUlQ2X0lOSVQpCisJaWYgKHNvICE9IFZf aXA2X21yb3V0ZXIgJiYgc29wdC0+c29wdF9uYW1lICE9IE1SVDZfSU5JVCkKIAkJcmV0dXJuIChF QUNDRVMpOwogCiAJc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpIHsKQEAgLTM4NSwxMCArNDAxLDEw IEBACiBpbnQKIFhfaXA2X21yb3V0ZXJfZ2V0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j a29wdCAqc29wdCkKIHsKLQlJTklUX1ZORVRfSU5FVDYoY3Vydm5ldCk7CisJSU5JVF9WTkVUX0lO RVQ2KHNvLT5zb192bmV0KTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKHNvICE9IGlwNl9tcm91 dGVyKQorCWlmIChzbyAhPSBWX2lwNl9tcm91dGVyKQogCQlyZXR1cm4gKEVBQ0NFUyk7CiAKIAlz d2l0Y2ggKHNvcHQtPnNvcHRfbmFtZSkgewpAQCAtNDIxLDYgKzQzNyw3IEBACiBzdGF0aWMgaW50 CiBnZXRfc2dfY250KHN0cnVjdCBzaW9jX3NnX3JlcTYgKnJlcSkKIHsKKwlJTklUX1ZORVRfSU5F VDYoY3Vydm5ldCk7CiAJc3RydWN0IG1mNmMgKnJ0OwogCWludCBzOwogCkBAIC00NDYsMTUgKzQ2 MywxNiBAQAogc3RhdGljIGludAogZ2V0X21pZjZfY250KHN0cnVjdCBzaW9jX21pZl9yZXE2ICpy ZXEpCiB7CisJSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOwogCW1pZmlfdCBtaWZpID0gcmVxLT5t aWZpOwogCi0JaWYgKG1pZmkgPj0gbnVtbWlmcykKKwlpZiAobWlmaSA+PSBWX251bW1pZnMpCiAJ CXJldHVybiAoRUlOVkFMKTsKIAotCXJlcS0+aWNvdW50ID0gbWlmNnRhYmxlW21pZmldLm02X3Br dF9pbjsKLQlyZXEtPm9jb3VudCA9IG1pZjZ0YWJsZVttaWZpXS5tNl9wa3Rfb3V0OwotCXJlcS0+ aWJ5dGVzID0gbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX2luOwotCXJlcS0+b2J5dGVzID0gbWlm NnRhYmxlW21pZmldLm02X2J5dGVzX291dDsKKwlyZXEtPmljb3VudCA9IFZfbWlmNnRhYmxlW21p ZmldLm02X3BrdF9pbjsKKwlyZXEtPm9jb3VudCA9IFZfbWlmNnRhYmxlW21pZmldLm02X3BrdF9v dXQ7CisJcmVxLT5pYnl0ZXMgPSBWX21pZjZ0YWJsZVttaWZpXS5tNl9ieXRlc19pbjsKKwlyZXEt Pm9ieXRlcyA9IFZfbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX291dDsKIAogCXJldHVybiAoMCk7 CiB9CkBAIC00NzcsOSArNDk1LDExIEBACiBzdGF0aWMgaW50CiBpcDZfbXJvdXRlcl9pbml0KHN0 cnVjdCBzb2NrZXQgKnNvLCBpbnQgdiwgaW50IGNtZCkKIHsKLQlJTklUX1ZORVRfSU5FVDYoY3Vy dm5ldCk7CisJSU5JVF9WTkVUX0lORVQ2KHNvLT5zb192bmV0KTsKIAogCVZfaXA2X21yb3V0ZXJf dmVyID0gMDsKKwlWX251bW1pZnMgPSAwOworCVZfcmVnX21pZl9udW0gPSAobWlmaV90KS0xOwog CiAjaWZkZWYgTVJUNkRFQlVHCiAJVl9tcnQ2ZGVidWcgPSAwOwpAQCAtNDk3LDIwICs1MTcsMjAg QEAKIAlpZiAodiAhPSAxKQogCQlyZXR1cm4gKEVOT1BST1RPT1BUKTsKIAotCWlmIChpcDZfbXJv dXRlciAhPSBOVUxMKQorCWlmIChWX2lwNl9tcm91dGVyICE9IE5VTEwpCiAJCXJldHVybiAoRUFE RFJJTlVTRSk7CiAKLQlpcDZfbXJvdXRlciA9IHNvOworCVZfaXA2X21yb3V0ZXIgPSBzbzsKIAlW X2lwNl9tcm91dGVyX3ZlciA9IGNtZDsKIAotCWJ6ZXJvKChjYWRkcl90KW1mNmN0YWJsZSwgc2l6 ZW9mKG1mNmN0YWJsZSkpOwotCWJ6ZXJvKChjYWRkcl90KW42ZXhwaXJlLCBzaXplb2YobjZleHBp cmUpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6ZW9mKFZfbWY2Y3RhYmxlKSk7 CisJYnplcm8oKGNhZGRyX3QpVl9uNmV4cGlyZSwgc2l6ZW9mKFZfbjZleHBpcmUpKTsKIAogCVZf cGltNiA9IDA7LyogdXNlZCBmb3Igc3R1YmJpbmcgb3V0L2luIHBpbSBzdHVmZiAqLwogCi0JY2Fs bG91dF9pbml0KCZleHBpcmVfdXBjYWxsc19jaCwgMCk7Ci0JY2FsbG91dF9yZXNldCgmZXhwaXJl X3VwY2FsbHNfY2gsIEVYUElSRV9USU1FT1VULAotCSAgICBleHBpcmVfdXBjYWxscywgTlVMTCk7 CisJY2FsbG91dF9pbml0KCZWX2V4cGlyZV91cGNhbGxzX2NoNiwgMCk7CisJY2FsbG91dF9yZXNl dCgmVl9leHBpcmVfdXBjYWxsc19jaDYsIEVYUElSRV9USU1FT1VULAorCQlleHBpcmVfdXBjYWxs cywgKHZvaWQgKilzby0+c29fdm5ldCk7CiAKICNpZmRlZiBNUlQ2REVCVUcKIAlpZiAoVl9tcnQ2 ZGVidWcpCkBAIC01NDcsMjkgKzU2NywyOSBAQAogCSAqIFhYWDogdGhlcmUgbWF5IGJlIGFuIGlu dGVyZmFjZSBpbiB3aGljaCB0aGUgSVB2NCBtdWx0aWNhc3QKIAkgKiBkYWVtb24gaXMgbm90IGlu dGVyZXN0ZWQuLi4KIAkgKi8KLQlpZiAoIWlwX21yb3V0ZXIpCisJaWYgKCFWX2lwX21yb3V0ZXIp CiAjZW5kaWYKICNlbmRpZgogCXsKLQkJZm9yIChtaWZpID0gMDsgbWlmaSA8IG51bW1pZnM7IG1p ZmkrKykgewotCQkJaWYgKG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAgJiYKLQkJCSAgICAhKG1pZjZ0 YWJsZVttaWZpXS5tNl9mbGFncyAmIE1JRkZfUkVHSVNURVIpKSB7Ci0JCQkJaWZfYWxsbXVsdGko bWlmNnRhYmxlW21pZmldLm02X2lmcCwgMCk7CisJCWZvciAobWlmaSA9IDA7IG1pZmkgPCBWX251 bW1pZnM7IG1pZmkrKykgeworCQkJaWYgKFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCAmJgorCQkJ ICAgICEoVl9taWY2dGFibGVbbWlmaV0ubTZfZmxhZ3MgJiBNSUZGX1JFR0lTVEVSKSkgeworCQkJ CWlmX2FsbG11bHRpKFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCwgMCk7CiAJCQl9CiAJCX0KIAl9 Ci0JYnplcm8oKGNhZGRyX3QpbWlmNnRhYmxlLCBzaXplb2YobWlmNnRhYmxlKSk7Ci0JbnVtbWlm cyA9IDA7CisJYnplcm8oKGNhZGRyX3QpVl9taWY2dGFibGUsIHNpemVvZihWX21pZjZ0YWJsZSkp OworCVZfbnVtbWlmcyA9IDA7CiAKIAlWX3BpbTYgPSAwOyAvKiB1c2VkIHRvIHN0dWIgb3V0L2lu IHBpbSBzcGVjaWZpYyBjb2RlICovCiAKLQljYWxsb3V0X3N0b3AoJmV4cGlyZV91cGNhbGxzX2No KTsKKwljYWxsb3V0X3N0b3AoJlZfZXhwaXJlX3VwY2FsbHNfY2g2KTsKIAogCS8qCiAJICogRnJl ZSBhbGwgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcy4KIAkgKi8KIAlmb3IgKGkg PSAwOyBpIDwgTUY2Q1RCTFNJWjsgaSsrKSB7Ci0JCXJ0ID0gbWY2Y3RhYmxlW2ldOworCQlydCA9 IFZfbWY2Y3RhYmxlW2ldOwogCQl3aGlsZSAocnQpIHsKIAkJCXN0cnVjdCBtZjZjICpmcnQ7CiAK QEAgLTU4NiwxOSArNjA2LDE5IEBACiAJCX0KIAl9CiAKLQliemVybygoY2FkZHJfdCltZjZjdGFi bGUsIHNpemVvZihtZjZjdGFibGUpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6 ZW9mKFZfbWY2Y3RhYmxlKSk7CiAKIAkvKgogCSAqIFJlc2V0IHJlZ2lzdGVyIGludGVyZmFjZQog CSAqLwotCWlmIChyZWdfbWlmX251bSAhPSAobWlmaV90KS0xICYmIG11bHRpY2FzdF9yZWdpc3Rl cl9pZjYgIT0gTlVMTCkgewotCQlpZl9kZXRhY2gobXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7Ci0J CWlmX2ZyZWUobXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7Ci0JCXJlZ19taWZfbnVtID0gKG1pZmlf dCktMTsKLQkJbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7CisJaWYgKFZfcmVnX21pZl9u dW0gIT0gKG1pZmlfdCktMSAmJiBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0gTlVMTCkgewor CQlpZl9kZXRhY2goVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KTsKKwkJaWZfZnJlZShWX211bHRp Y2FzdF9yZWdpc3Rlcl9pZjYpOworCQlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKKwkJVl9t dWx0aWNhc3RfcmVnaXN0ZXJfaWY2ID0gTlVMTDsKIAl9CiAKLQlpcDZfbXJvdXRlciA9IE5VTEw7 CisJVl9pcDZfbXJvdXRlciA9IE5VTEw7CiAJVl9pcDZfbXJvdXRlcl92ZXIgPSAwOwogCiAJc3Bs eChzKTsKQEAgLTYyMCwxMyArNjQwLDE0IEBACiBhZGRfbTZpZihzdHJ1Y3QgbWlmNmN0bCAqbWlm Y3ApCiB7CiAJSU5JVF9WTkVUX05FVChjdXJ2bmV0KTsKKwlJTklUX1ZORVRfSU5FVDYoY3Vydm5l dCk7CiAJc3RydWN0IG1pZjYgKm1pZnA7CiAJc3RydWN0IGlmbmV0ICppZnA7CiAJaW50IGVycm9y LCBzOwogCiAJaWYgKG1pZmNwLT5taWY2Y19taWZpID49IE1BWE1JRlMpCiAJCXJldHVybiAoRUlO VkFMKTsKLQltaWZwID0gbWlmNnRhYmxlICsgbWlmY3AtPm1pZjZjX21pZmk7CisJbWlmcCA9IFZf bWlmNnRhYmxlICsgbWlmY3AtPm1pZjZjX21pZmk7CiAJaWYgKG1pZnAtPm02X2lmcCkKIAkJcmV0 dXJuIChFQUREUklOVVNFKTsgLyogWFhYOiBpcyBpdCBhcHByb3ByaWF0ZT8gKi8KIAlpZiAobWlm Y3AtPm1pZjZjX3BpZmkgPT0gMCB8fCBtaWZjcC0+bWlmNmNfcGlmaSA+IFZfaWZfaW5kZXgpCkBA IC02MzQsMTQgKzY1NSwxNCBAQAogCWlmcCA9IGlmbmV0X2J5aW5kZXgobWlmY3AtPm1pZjZjX3Bp ZmkpOwogCiAJaWYgKG1pZmNwLT5taWY2Y19mbGFncyAmIE1JRkZfUkVHSVNURVIpIHsKLQkJaWYg KHJlZ19taWZfbnVtID09IChtaWZpX3QpLTEpIHsKKwkJaWYgKFZfcmVnX21pZl9udW0gPT0gKG1p ZmlfdCktMSkgewogCQkJaWZwID0gaWZfYWxsb2MoSUZUX09USEVSKTsKIAogCQkJaWZfaW5pdG5h bWUoaWZwLCAicmVnaXN0ZXJfbWlmIiwgMCk7CiAJCQlpZnAtPmlmX2ZsYWdzIHw9IElGRl9MT09Q QkFDSzsKIAkJCWlmX2F0dGFjaChpZnApOwotCQkJbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IGlm cDsKLQkJCXJlZ19taWZfbnVtID0gbWlmY3AtPm1pZjZjX21pZmk7CisJCQlWX211bHRpY2FzdF9y ZWdpc3Rlcl9pZjYgPSBpZnA7CisJCQlWX3JlZ19taWZfbnVtID0gbWlmY3AtPm1pZjZjX21pZmk7 CiAJCQkvKgogCQkJICogaXQgaXMgaW1wb3NzaWJsZSB0byBndWVzcyB0aGUgaWZpbmRleCBvZiB0 aGUKIAkJCSAqIHJlZ2lzdGVyIGludGVyZmFjZS4gIFNvIG1pZjZjX3BpZmkgaXMgYXV0b21hdGlj YWxseQpAQCAtNjQ5LDcgKzY3MCw3IEBACiAJCQkgKi8KIAkJCW1pZmNwLT5taWY2Y19waWZpID0g aWZwLT5pZl9pbmRleDsKIAkJfSBlbHNlIHsKLQkJCWlmcCA9IG11bHRpY2FzdF9yZWdpc3Rlcl9p ZjY7CisJCQlpZnAgPSBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjY7CiAJCX0KIAogCX0gLyogaWYg UkVHSVNURVIgKi8KQEAgLTY3Niw5ICs2OTcsOSBAQAogCW1pZnAtPm02X2J5dGVzX291dCA9IDA7 CiAJc3BseChzKTsKIAotCS8qIEFkanVzdCBudW1taWZzIHVwIGlmIHRoZSBtaWZpIGlzIGhpZ2hl ciB0aGFuIG51bW1pZnMgKi8KLQlpZiAobnVtbWlmcyA8PSBtaWZjcC0+bWlmNmNfbWlmaSkKLQkJ bnVtbWlmcyA9IG1pZmNwLT5taWY2Y19taWZpICsgMTsKKwkvKiBBZGp1c3QgVl9udW1taWZzIHVw IGlmIHRoZSBtaWZpIGlzIGhpZ2hlciB0aGFuIFZfbnVtbWlmcyAqLworCWlmIChWX251bW1pZnMg PD0gbWlmY3AtPm1pZjZjX21pZmkpCisJCVZfbnVtbWlmcyA9IG1pZmNwLT5taWY2Y19taWZpICsg MTsKIAogI2lmZGVmIE1SVDZERUJVRwogCWlmIChWX21ydDZkZWJ1ZykKQEAgLTY5NywxMiArNzE4 LDEzIEBACiBzdGF0aWMgaW50CiBkZWxfbTZpZihtaWZpX3QgKm1pZmlwKQogewotCXN0cnVjdCBt aWY2ICptaWZwID0gbWlmNnRhYmxlICsgKm1pZmlwOworCUlOSVRfVk5FVF9JTkVUNihjdXJ2bmV0 KTsKKwlzdHJ1Y3QgbWlmNiAqbWlmcCA9IFZfbWlmNnRhYmxlICsgKm1pZmlwOwogCW1pZmlfdCBt aWZpOwogCXN0cnVjdCBpZm5ldCAqaWZwOwogCWludCBzOwogCi0JaWYgKCptaWZpcCA+PSBudW1t aWZzKQorCWlmICgqbWlmaXAgPj0gVl9udW1taWZzKQogCQlyZXR1cm4gKEVJTlZBTCk7CiAJaWYg KG1pZnAtPm02X2lmcCA9PSBOVUxMKQogCQlyZXR1cm4gKEVJTlZBTCk7CkBAIC03MTgsMjggKzc0 MCwyOCBAQAogCiAJCWlmX2FsbG11bHRpKGlmcCwgMCk7CiAJfSBlbHNlIHsKLQkJaWYgKHJlZ19t aWZfbnVtICE9IChtaWZpX3QpLTEgJiYKLQkJICAgIG11bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0g TlVMTCkgewotCQkJaWZfZGV0YWNoKG11bHRpY2FzdF9yZWdpc3Rlcl9pZjYpOwotCQkJaWZfZnJl ZShtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KTsKLQkJCXJlZ19taWZfbnVtID0gKG1pZmlfdCktMTsK LQkJCW11bHRpY2FzdF9yZWdpc3Rlcl9pZjYgPSBOVUxMOworCQlpZiAoVl9yZWdfbWlmX251bSAh PSAobWlmaV90KS0xICYmCisJCSAgICBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0gTlVMTCkg eworCQkJaWZfZGV0YWNoKFZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7CisJCQlpZl9mcmVlKFZf bXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7CisJCQlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsK KwkJCVZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7CiAJCX0KIAl9CiAKIAliemVybygo Y2FkZHJfdCltaWZwLCBzaXplb2YoKm1pZnApKTsKIAotCS8qIEFkanVzdCBudW1taWZzIGRvd24g Ki8KLQlmb3IgKG1pZmkgPSBudW1taWZzOyBtaWZpID4gMDsgbWlmaS0tKQotCQlpZiAobWlmNnRh YmxlW21pZmkgLSAxXS5tNl9pZnApCisJLyogQWRqdXN0IFZfbnVtbWlmcyBkb3duICovCisJZm9y IChtaWZpID0gVl9udW1taWZzOyBtaWZpID4gMDsgbWlmaS0tKQorCQlpZiAoVl9taWY2dGFibGVb bWlmaSAtIDFdLm02X2lmcCkKIAkJCWJyZWFrOwotCW51bW1pZnMgPSBtaWZpOworCVZfbnVtbWlm cyA9IG1pZmk7CiAKIAlzcGx4KHMpOwogCiAjaWZkZWYgTVJUNkRFQlVHCiAJaWYgKFZfbXJ0NmRl YnVnKQotCQlsb2coTE9HX0RFQlVHLCAiZGVsX202aWYgJWQsIG51bW1pZnMgJWRcbiIsICptaWZp cCwgbnVtbWlmcyk7CisJCWxvZyhMT0dfREVCVUcsICJkZWxfbTZpZiAlZCwgbnVtbWlmcyAlZFxu IiwgKm1pZmlwLCBWX251bW1pZnMpOwogI2VuZGlmCiAKIAlyZXR1cm4gKDApOwpAQCAtNzg3LDcg KzgwOSw3IEBACiAJcyA9IHNwbG5ldCgpOwogCWhhc2ggPSBNRjZDSEFTSChtZmNjcC0+bWY2Y2Nf b3JpZ2luLnNpbjZfYWRkciwKIAkJCW1mY2NwLT5tZjZjY19tY2FzdGdycC5zaW42X2FkZHIpOwot CWZvciAocnQgPSBtZjZjdGFibGVbaGFzaF0sIG5zdGwgPSAwOyBydDsgcnQgPSBydC0+bWY2Y19u ZXh0KSB7CisJZm9yIChydCA9IFZfbWY2Y3RhYmxlW2hhc2hdLCBuc3RsID0gMDsgcnQ7IHJ0ID0g cnQtPm1mNmNfbmV4dCkgewogCQlpZiAoSU42X0FSRV9BRERSX0VRVUFMKCZydC0+bWY2Y19vcmln aW4uc2luNl9hZGRyLAogCQkJCSAgICAgICAmbWZjY3AtPm1mNmNjX29yaWdpbi5zaW42X2FkZHIp ICYmCiAJCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJnJ0LT5tZjZjX21jYXN0Z3JwLnNpbjZfYWRk ciwKQEAgLTgyNSw3ICs4NDcsNyBAQAogCQkJcnQtPm1mNmNfd3JvbmdfaWYgICA9IDA7CiAKIAkJ CXJ0LT5tZjZjX2V4cGlyZSA9IDA7CS8qIERvbid0IGNsZWFuIHRoaXMgZ3V5IHVwICovCi0JCQlu NmV4cGlyZVtoYXNoXS0tOworCQkJVl9uNmV4cGlyZVtoYXNoXS0tOwogCiAJCQkvKiBmcmVlIHBh Y2tldHMgUWVkIGF0IHRoZSBlbmQgb2YgdGhpcyBlbnRyeSAqLwogCQkJZm9yIChydGUgPSBydC0+ bWY2Y19zdGFsbDsgcnRlICE9IE5VTEw7ICkgewpAQCAtODU2LDcgKzg3OCw3IEBACiAJCQltZmNj cC0+bWY2Y2NfcGFyZW50KTsKICNlbmRpZgogCi0JCWZvciAocnQgPSBtZjZjdGFibGVbaGFzaF07 IHJ0OyBydCA9IHJ0LT5tZjZjX25leHQpIHsKKwkJZm9yIChydCA9IFZfbWY2Y3RhYmxlW2hhc2hd OyBydDsgcnQgPSBydC0+bWY2Y19uZXh0KSB7CiAKIAkJCWlmIChJTjZfQVJFX0FERFJfRVFVQUwo JnJ0LT5tZjZjX29yaWdpbi5zaW42X2FkZHIsCiAJCQkJCSAgICAgICAmbWZjY3AtPm1mNmNjX29y aWdpbi5zaW42X2FkZHIpJiYKQEAgLTg3Myw3ICs4OTUsNyBAQAogCQkJCXJ0LT5tZjZjX3dyb25n X2lmICAgPSAwOwogCiAJCQkJaWYgKHJ0LT5tZjZjX2V4cGlyZSkKLQkJCQkJbjZleHBpcmVbaGFz aF0tLTsKKwkJCQkJVl9uNmV4cGlyZVtoYXNoXS0tOwogCQkJCXJ0LT5tZjZjX2V4cGlyZQkgICA9 IDA7CiAJCQl9CiAJCX0KQEAgLTg5OSw4ICs5MjEsOCBAQAogCQkJcnQtPm1mNmNfc3RhbGwgPSBO VUxMOwogCiAJCQkvKiBsaW5rIGludG8gdGFibGUgKi8KLQkJCXJ0LT5tZjZjX25leHQgID0gbWY2 Y3RhYmxlW2hhc2hdOwotCQkJbWY2Y3RhYmxlW2hhc2hdID0gcnQ7CisJCQlydC0+bWY2Y19uZXh0 ICA9IFZfbWY2Y3RhYmxlW2hhc2hdOworCQkJVl9tZjZjdGFibGVbaGFzaF0gPSBydDsKIAkJfQog CX0KIAlzcGx4KHMpOwpAQCAtOTE0LDYgKzkzNiw3IEBACiBzdGF0aWMgdm9pZAogY29sbGF0ZShz dHJ1Y3QgdGltZXZhbCAqdCkKIHsKKwlJTklUX1ZORVRfSU5FVDYoY3Vydm5ldCk7CiAJdV9sb25n IGQ7CiAJc3RydWN0IHRpbWV2YWwgdHA7CiAJdV9sb25nIGRlbHRhOwpAQCAtOTI4LDcgKzk1MSw3 IEBACiAJCWlmIChkID4gVVBDQUxMX01BWCkKIAkJCWQgPSBVUENBTExfTUFYOwogCi0JCSsrdXBj YWxsX2RhdGFbZF07CisJCSsrVl91cGNhbGxfZGF0YVtkXTsKIAl9CiB9CiAjZW5kaWYgLyogVVBD QUxMX1RJTUlORyAqLwpAQCAtOTYyLDcgKzk4NSw3IEBACiAKIAlzID0gc3BsbmV0KCk7CiAKLQlu cHRyID0gJm1mNmN0YWJsZVtoYXNoXTsKKwlucHRyID0gJlZfbWY2Y3RhYmxlW2hhc2hdOwogCXdo aWxlICgocnQgPSAqbnB0cikgIT0gTlVMTCkgewogCQlpZiAoSU42X0FSRV9BRERSX0VRVUFMKCZv cmlnaW4uc2luNl9hZGRyLAogCQkJCSAgICAgICAmcnQtPm1mNmNfb3JpZ2luLnNpbjZfYWRkcikg JiYKQEAgLTEwOTcsNyArMTEyMCw3IEBACiAJCUdFVF9USU1FKHRwKTsKICNlbmRpZiAvKiBVUENB TExfVElNSU5HICovCiAKLQkJbXJ0NnN0YXQubXJ0NnNfbm9fcm91dGUrKzsKKwkJVl9tcnQ2c3Rh dC5tcnQ2c19ub19yb3V0ZSsrOwogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcg JiAoREVCVUdfRk9SV0FSRCB8IERFQlVHX01GQykpCiAJCQlsb2coTE9HX0RFQlVHLCAiaXA2X21m b3J3YXJkOiBubyBydGUgcyAlcyBnICVzXG4iLApAQCAtMTEzMSw3ICsxMTU0LDcgQEAKIAogCQkv KiBpcyB0aGVyZSBhbiB1cGNhbGwgd2FpdGluZyBmb3IgdGhpcyBwYWNrZXQ/ICovCiAJCWhhc2gg PSBNRjZDSEFTSChpcDYtPmlwNl9zcmMsIGlwNi0+aXA2X2RzdCk7Ci0JCWZvciAocnQgPSBtZjZj dGFibGVbaGFzaF07IHJ0OyBydCA9IHJ0LT5tZjZjX25leHQpIHsKKwkJZm9yIChydCA9IFZfbWY2 Y3RhYmxlW2hhc2hdOyBydDsgcnQgPSBydC0+bWY2Y19uZXh0KSB7CiAJCQlpZiAoSU42X0FSRV9B RERSX0VRVUFMKCZpcDYtPmlwNl9zcmMsCiAJCQkJCSAgICAgICAmcnQtPm1mNmNfb3JpZ2luLnNp bjZfYWRkcikgJiYKIAkJCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJmlwNi0+aXA2X2RzdCwKQEAg LTEyMDUsOCArMTIyOCw4IEBACiAJCQkJICAgICJnZXR0aW5nIHRoZSBpaWYgaW5mbyBpbiB0aGUg a2VybmVsXG4iKTsKICNlbmRpZgogCi0JCQlmb3IgKG1pZnAgPSBtaWY2dGFibGUsIG1pZmkgPSAw OwotCQkJICAgICBtaWZpIDwgbnVtbWlmcyAmJiBtaWZwLT5tNl9pZnAgIT0gaWZwOworCQkJZm9y IChtaWZwID0gVl9taWY2dGFibGUsIG1pZmkgPSAwOworCQkJICAgICBtaWZpIDwgVl9udW1taWZz ICYmIG1pZnAtPm02X2lmcCAhPSBpZnA7CiAJCQkgICAgIG1pZnArKywgbWlmaSsrKQogCQkJCTsK IApAQCAtMTIyMSwxMCArMTI0NCwxMCBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoc29j a2V0X3NlbmQoaXA2X21yb3V0ZXIsIG1tLCAmc2luNikgPCAwKSB7CisJCQlpZiAoc29ja2V0X3Nl bmQoVl9pcDZfbXJvdXRlciwgbW0sICZzaW42KSA8IDApIHsKIAkJCQlsb2coTE9HX1dBUk5JTkcs ICJpcDZfbWZvcndhcmQ6IGlwNl9tcm91dGVyICIKIAkJCQkgICAgInNvY2tldCBxdWV1ZSBmdWxs XG4iKTsKLQkJCQltcnQ2c3RhdC5tcnQ2c191cHFfc29ja2Z1bGwrKzsKKwkJCQlWX21ydDZzdGF0 Lm1ydDZzX3VwcV9zb2NrZnVsbCsrOwogCQkJCWZyZWUocnRlLCBNX01SVEFCTEU2KTsKIAkJCQlt X2ZyZWVtKG1iMCk7CiAJCQkJZnJlZShydCwgTV9NUlRBQkxFNik7CkBAIC0xMjMyLDcgKzEyNTUs NyBAQAogCQkJCXJldHVybiAoRU5PQlVGUyk7CiAJCQl9CiAKLQkJCW1ydDZzdGF0Lm1ydDZzX3Vw Y2FsbHMrKzsKKwkJCVZfbXJ0NnN0YXQubXJ0NnNfdXBjYWxscysrOwogCiAJCQkvKiBpbnNlcnQg bmV3IGVudHJ5IGF0IGhlYWQgb2YgaGFzaCBjaGFpbiAqLwogCQkJYnplcm8ocnQsIHNpemVvZigq cnQpKTsKQEAgLTEyNDMsMTIgKzEyNjYsMTIgQEAKIAkJCXJ0LT5tZjZjX21jYXN0Z3JwLnNpbjZf bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwogCQkJcnQtPm1mNmNfbWNhc3RncnAu c2luNl9hZGRyID0gaXA2LT5pcDZfZHN0OwogCQkJcnQtPm1mNmNfZXhwaXJlID0gVVBDQUxMX0VY UElSRTsKLQkJCW42ZXhwaXJlW2hhc2hdKys7CisJCQlWX242ZXhwaXJlW2hhc2hdKys7CiAJCQly dC0+bWY2Y19wYXJlbnQgPSBNRjZDX0lOQ09NUExFVEVfUEFSRU5UOwogCiAJCQkvKiBsaW5rIGlu dG8gdGFibGUgKi8KLQkJCXJ0LT5tZjZjX25leHQgID0gbWY2Y3RhYmxlW2hhc2hdOwotCQkJbWY2 Y3RhYmxlW2hhc2hdID0gcnQ7CisJCQlydC0+bWY2Y19uZXh0ICA9IFZfbWY2Y3RhYmxlW2hhc2hd OworCQkJVl9tZjZjdGFibGVbaGFzaF0gPSBydDsKIAkJCS8qIEFkZCB0aGlzIGVudHJ5IHRvIHRo ZSBlbmQgb2YgdGhlIHF1ZXVlICovCiAJCQlydC0+bWY2Y19zdGFsbCA9IHJ0ZTsKIAkJfSBlbHNl IHsKQEAgLTEyNTgsNyArMTI4MSw3IEBACiAKIAkJCWZvciAocCA9ICZydC0+bWY2Y19zdGFsbDsg KnAgIT0gTlVMTDsgcCA9ICYoKnApLT5uZXh0KQogCQkJCWlmICgrK25wa3RzID4gTUFYX1VQUTYp IHsKLQkJCQkJbXJ0NnN0YXQubXJ0NnNfdXBxX292Zmx3Kys7CisJCQkJCVZfbXJ0NnN0YXQubXJ0 NnNfdXBxX292Zmx3Kys7CiAJCQkJCWZyZWUocnRlLCBNX01SVEFCTEU2KTsKIAkJCQkJbV9mcmVl bShtYjApOwogCQkJCQlzcGx4KHMpOwpAQCAtMTI4OSw3ICsxMzEyLDcgQEAKIHN0YXRpYyB2b2lk CiBleHBpcmVfdXBjYWxscyh2b2lkICp1bnVzZWQpCiB7Ci0JSU5JVF9WTkVUX0lORVQ2KGN1cnZu ZXQpOworCUlOSVRfVk5FVF9JTkVUNiggKHN0cnVjdCB2bmV0Kil1bnVzZWQgKTsKIAlzdHJ1Y3Qg cnRkZXRxICpydGU7CiAJc3RydWN0IG1mNmMgKm1mYywgKipucHRyOwogCWludCBpOwpAQCAtMTI5 Nyw5ICsxMzIwLDkgQEAKIAogCXMgPSBzcGxuZXQoKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUY2Q1RC TFNJWjsgaSsrKSB7Ci0JCWlmIChuNmV4cGlyZVtpXSA9PSAwKQorCQlpZiAoVl9uNmV4cGlyZVtp XSA9PSAwKQogCQkJY29udGludWU7Ci0JCW5wdHIgPSAmbWY2Y3RhYmxlW2ldOworCQlucHRyID0g JlZfbWY2Y3RhYmxlW2ldOwogCQl3aGlsZSAoKG1mYyA9ICpucHRyKSAhPSBOVUxMKSB7CiAJCQly dGUgPSBtZmMtPm1mNmNfc3RhbGw7CiAJCQkvKgpAQCAtMTMyOSw4ICsxMzUyLDggQEAKIAkJCQkJ ZnJlZShydGUsIE1fTVJUQUJMRTYpOwogCQkJCQlydGUgPSBuOwogCQkJCX0gd2hpbGUgKHJ0ZSAh PSBOVUxMKTsKLQkJCQltcnQ2c3RhdC5tcnQ2c19jYWNoZV9jbGVhbnVwcysrOwotCQkJCW42ZXhw aXJlW2ldLS07CisJCQkJVl9tcnQ2c3RhdC5tcnQ2c19jYWNoZV9jbGVhbnVwcysrOworCQkJCVZf bjZleHBpcmVbaV0tLTsKIAogCQkJCSpucHRyID0gbWZjLT5tZjZjX25leHQ7CiAJCQkJZnJlZSht ZmMsIE1fTVJUQUJMRTYpOwpAQCAtMTMzOSw5ICsxMzYyLDkgQEAKIAkJCX0KIAkJfQogCX0KKwlj YWxsb3V0X3Jlc2V0KCZWX2V4cGlyZV91cGNhbGxzX2NoNiwgRVhQSVJFX1RJTUVPVVQsCisJICAg IGV4cGlyZV91cGNhbGxzLCB1bnVzZWQpOwogCXNwbHgocyk7Ci0JY2FsbG91dF9yZXNldCgmZXhw aXJlX3VwY2FsbHNfY2gsIEVYUElSRV9USU1FT1VULAotCSAgICBleHBpcmVfdXBjYWxscywgTlVM TCk7CiB9CiAKIC8qCkBAIC0xMzc3LDE2ICsxNDAwLDE2IEBACiAJICogZm9yIGl0cyBvcmlnaW4u CiAJICovCiAJbWlmaSA9IHJ0LT5tZjZjX3BhcmVudDsKLQlpZiAoKG1pZmkgPj0gbnVtbWlmcykg fHwgKG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAgIT0gaWZwKSkgeworCWlmICgobWlmaSA+PSBWX251 bW1pZnMpIHx8IChWX21pZjZ0YWJsZVttaWZpXS5tNl9pZnAgIT0gaWZwKSkgewogCQkvKiBjYW1l IGluIHRoZSB3cm9uZyBpbnRlcmZhY2UgKi8KICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0 NmRlYnVnICYgREVCVUdfRk9SV0FSRCkKIAkJCWxvZyhMT0dfREVCVUcsCiAJCQkgICAgIndyb25n IGlmOiBpZmlkICVkIG1pZmkgJWQgbWlmaWZpZCAleFxuIiwKIAkJCSAgICBpZnAtPmlmX2luZGV4 LCBtaWZpLAotCQkJICAgIG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAtPmlmX2luZGV4KTsKKwkJCSAg ICBWX21pZjZ0YWJsZVttaWZpXS5tNl9pZnAtPmlmX2luZGV4KTsKICNlbmRpZgotCQltcnQ2c3Rh dC5tcnQ2c193cm9uZ19pZisrOworCQlWX21ydDZzdGF0Lm1ydDZzX3dyb25nX2lmKys7CiAJCXJ0 LT5tZjZjX3dyb25nX2lmKys7CiAJCS8qCiAJCSAqIElmIHdlIGFyZSBkb2luZyBQSU0gcHJvY2Vz c2luZywgYW5kIHdlIGFyZSBmb3J3YXJkaW5nCkBAIC0xMzk0LDcgKzE0MTcsNyBAQAogCQkgKiBy b3V0aW5nIGRhZW1vbi4KIAkJICovCiAJCS8qIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSB2 YWxpZCBtaWYgKi8KLQkJaWYgKG1pZmkgPCBudW1taWZzICYmIG1pZjZ0YWJsZVttaWZpXS5tNl9p ZnApCisJCWlmIChtaWZpIDwgVl9udW1taWZzICYmIFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCkK IAkJCWlmIChWX3BpbTYgJiYgKG0tPm1fZmxhZ3MgJiBNX0xPT1ApID09IDApIHsKIAkJCQkvKgog CQkJCSAqIENoZWNrIHRoZSBNX0xPT1AgZmxhZyB0byBhdm9pZCBhbgpAQCAtMTQ0MCw4ICsxNDYz LDggQEAKIAkJCQkJcmV0dXJuIChFSU5WQUwpOwogCQkJCX0KIAotCQkJCWZvciAobWlmcCA9IG1p ZjZ0YWJsZSwgaWlmID0gMDsKLQkJCQkgICAgIGlpZiA8IG51bW1pZnMgJiYgbWlmcCAmJgorCQkJ CWZvciAobWlmcCA9IFZfbWlmNnRhYmxlLCBpaWYgPSAwOworCQkJCSAgICAgaWlmIDwgVl9udW1t aWZzICYmIG1pZnAgJiYKIAkJCQkJICAgICBtaWZwLT5tNl9pZnAgIT0gaWZwOwogCQkJCSAgICAg bWlmcCsrLCBpaWYrKykKIAkJCQkJOwpAQCAtMTQ1OSwxNCArMTQ4MiwxNCBAQAogCQkJCQlicmVh azsKIAkJCQl9CiAKLQkJCQltcnQ2c3RhdC5tcnQ2c191cGNhbGxzKys7CisJCQkJVl9tcnQ2c3Rh dC5tcnQ2c191cGNhbGxzKys7CiAKLQkJCQlpZiAoc29ja2V0X3NlbmQoaXA2X21yb3V0ZXIsIG1t LCAmc2luNikgPCAwKSB7CisJCQkJaWYgKHNvY2tldF9zZW5kKFZfaXA2X21yb3V0ZXIsIG1tLCAm c2luNikgPCAwKSB7CiAjaWZkZWYgTVJUNkRFQlVHCiAJCQkJCWlmIChWX21ydDZkZWJ1ZykKIAkJ CQkJCWxvZyhMT0dfV0FSTklORywgIm1kcSwgaXA2X21yb3V0ZXIgc29ja2V0IHF1ZXVlIGZ1bGxc biIpOwogI2VuZGlmCi0JCQkJCSsrbXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tmdWxsOworCQkJCQkr K1ZfbXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tmdWxsOwogCQkJCQlyZXR1cm4gKEVOT0JVRlMpOwog CQkJCX0JLyogaWYgc29ja2V0IFEgZnVsbCAqLwogCQkJfQkJLyogaWYgUElNICovCkBAIC0xNDc2 LDExICsxNDk5LDExIEBACiAJLyogSWYgSSBzb3VyY2VkIHRoaXMgcGFja2V0LCBpdCBjb3VudHMg YXMgb3V0cHV0LCBlbHNlIGl0IHdhcyBpbnB1dC4gKi8KIAlpZiAobS0+bV9wa3RoZHIucmN2aWYg PT0gTlVMTCkgewogCQkvKiBYWFg6IGlzIHJjdmlmIHJlYWxseSBOVUxMIHdoZW4gb3V0cHV0Pz8g Ki8KLQkJbWlmNnRhYmxlW21pZmldLm02X3BrdF9vdXQrKzsKLQkJbWlmNnRhYmxlW21pZmldLm02 X2J5dGVzX291dCArPSBwbGVuOworCQlWX21pZjZ0YWJsZVttaWZpXS5tNl9wa3Rfb3V0Kys7CisJ CVZfbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX291dCArPSBwbGVuOwogCX0gZWxzZSB7Ci0JCW1p ZjZ0YWJsZVttaWZpXS5tNl9wa3RfaW4rKzsKLQkJbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX2lu ICs9IHBsZW47CisJCVZfbWlmNnRhYmxlW21pZmldLm02X3BrdF9pbisrOworCQlWX21pZjZ0YWJs ZVttaWZpXS5tNl9ieXRlc19pbiArPSBwbGVuOwogCX0KIAlydC0+bWY2Y19wa3RfY250Kys7CiAJ cnQtPm1mNmNfYnl0ZV9jbnQgKz0gcGxlbjsKQEAgLTE0OTYsNyArMTUxOSw3IEBACiAJCVZfaXA2 c3RhdC5pcDZzX2JhZHNjb3BlKys7CiAJCXJldHVybiAoZXJyb3IpOwogCX0KLQlmb3IgKG1pZnAg PSBtaWY2dGFibGUsIG1pZmkgPSAwOyBtaWZpIDwgbnVtbWlmczsgbWlmcCsrLCBtaWZpKyspIHsK Kwlmb3IgKG1pZnAgPSBWX21pZjZ0YWJsZSwgbWlmaSA9IDA7IG1pZmkgPCBWX251bW1pZnM7IG1p ZnArKywgbWlmaSsrKSB7CiAJCWlmIChJRl9JU1NFVChtaWZpLCAmcnQtPm1mNmNfaWZzZXQpKSB7 CiAJCQkvKgogCQkJICogY2hlY2sgaWYgdGhlIG91dGdvaW5nIHBhY2tldCBpcyBnb2luZyB0byBi cmVhawpAQCAtMTUwNCwxMiArMTUyNywxMiBAQAogCQkJICogWFhYIEZvciBwYWNrZXRzIHRocm91 Z2ggUElNIHJlZ2lzdGVyIHR1bm5lbAogCQkJICogaW50ZXJmYWNlLCB3ZSBiZWxpZXZlIGEgcm91 dGluZyBkYWVtb24uCiAJCQkgKi8KLQkJCWlmICghKG1pZjZ0YWJsZVtydC0+bWY2Y19wYXJlbnRd Lm02X2ZsYWdzICYKKwkJCWlmICghKFZfbWlmNnRhYmxlW3J0LT5tZjZjX3BhcmVudF0ubTZfZmxh Z3MgJgogCQkJICAgICAgTUlGRl9SRUdJU1RFUikgJiYKLQkJCSAgICAhKG1pZjZ0YWJsZVttaWZp XS5tNl9mbGFncyAmIE1JRkZfUkVHSVNURVIpKSB7Ci0JCQkJaWYgKGluNl9zZXRzY29wZSgmc3Jj MCwgbWlmNnRhYmxlW21pZmldLm02X2lmcCwKKwkJCSAgICAhKFZfbWlmNnRhYmxlW21pZmldLm02 X2ZsYWdzICYgTUlGRl9SRUdJU1RFUikpIHsKKwkJCQlpZiAoaW42X3NldHNjb3BlKCZzcmMwLCBW X21pZjZ0YWJsZVttaWZpXS5tNl9pZnAsCiAJCQkJICAgICZvc3pvbmUpIHx8Ci0JCQkJICAgIGlu Nl9zZXRzY29wZSgmZHN0MCwgbWlmNnRhYmxlW21pZmldLm02X2lmcCwKKwkJCQkgICAgaW42X3Nl dHNjb3BlKCZkc3QwLCBWX21pZjZ0YWJsZVttaWZpXS5tNl9pZnAsCiAJCQkJICAgICZvZHpvbmUp IHx8CiAJCQkJICAgIGlzem9uZSAhPSBvc3pvbmUgfHwKIAkJCQkgICAgaWR6b25lICE9IG9kem9u ZSkgewpAQCAtMTU3NSw3ICsxNTk4LDcgQEAKICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0 NmRlYnVnICYgREVCVUdfWE1JVCkKIAkJCWxvZyhMT0dfREVCVUcsICJwaHlpbnRfc2VuZCBvbiBt aWYgJWQgZXJyICVkXG4iLAotCQkJICAgIG1pZnAgLSBtaWY2dGFibGUsIGVycm9yKTsKKwkJCSAg ICBtaWZwIC0gVl9taWY2dGFibGUsIGVycm9yKTsKICNlbmRpZgogCQlzcGx4KHMpOwogCQlyZXR1 cm47CkBAIC0xNjExLDcgKzE2MzQsNyBAQAogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2 ZGVidWcgJiBERUJVR19YTUlUKQogCQkJbG9nKExPR19ERUJVRywgInBoeWludF9zZW5kIG9uIG1p ZiAlZCBlcnIgJWRcbiIsCi0JCQkgICAgbWlmcCAtIG1pZjZ0YWJsZSwgZXJyb3IpOworCQkJICAg IG1pZnAgLSBWX21pZjZ0YWJsZSwgZXJyb3IpOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJLyoKQEAg LTE2NTksNyArMTY4Miw3IEBACiAJCSAgICBpcDZfc3ByaW50ZihpcDZidWZkLCAmaXA2LT5pcDZf ZHN0KSk7CiAJfQogI2VuZGlmCi0JKytwaW02c3RhdC5waW02c19zbmRfcmVnaXN0ZXJzOworCSsr Vl9waW02c3RhdC5waW02c19zbmRfcmVnaXN0ZXJzOwogCiAJLyogTWFrZSBhIGNvcHkgb2YgdGhl IHBhY2tldCB0byBzZW5kIHRvIHRoZSB1c2VyIGxldmVsIHByb2Nlc3MgKi8KIAlNR0VUSERSKG1t LCBNX0RPTlRXQUlULCBNVF9IRUFERVIpOwpAQCAtMTY5MSwxOCArMTcxNCwxOCBAQAogCWltNi0+ aW02X21zZ3R5cGUgICAgICA9IE1SVDZNU0dfV0hPTEVQS1Q7CiAJaW02LT5pbTZfbWJ6ICAgICAg ICAgID0gMDsKIAotCWltNi0+aW02X21pZiA9IG1pZiAtIG1pZjZ0YWJsZTsKKwlpbTYtPmltNl9t aWYgPSBtaWYgLSBWX21pZjZ0YWJsZTsKIAogCS8qIGlpZiBpbmZvIGlzIG5vdCBnaXZlbiBmb3Ig cmVnLiBlbmNhcC5uICovCi0JbXJ0NnN0YXQubXJ0NnNfdXBjYWxscysrOworCVZfbXJ0NnN0YXQu bXJ0NnNfdXBjYWxscysrOwogCi0JaWYgKHNvY2tldF9zZW5kKGlwNl9tcm91dGVyLCBtbSwgJnNp bjYpIDwgMCkgeworCWlmIChzb2NrZXRfc2VuZChWX2lwNl9tcm91dGVyLCBtbSwgJnNpbjYpIDwg MCkgewogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcpCiAJCQlsb2coTE9HX1dB Uk5JTkcsCiAJCQkgICAgInJlZ2lzdGVyX3NlbmQ6IGlwNl9tcm91dGVyIHNvY2tldCBxdWV1ZSBm dWxsXG4iKTsKICNlbmRpZgotCQkrK21ydDZzdGF0Lm1ydDZzX3VwcV9zb2NrZnVsbDsKKwkJKytW X21ydDZzdGF0Lm1ydDZzX3VwcV9zb2NrZnVsbDsKIAkJcmV0dXJuIChFTk9CVUZTKTsKIAl9CiAJ cmV0dXJuICgwKTsKQEAgLTE3MjYsNyArMTc0OSw3IEBACiAJaW50IG1pbmxlbjsKIAlpbnQgb2Zm ID0gKm9mZnA7CiAKLQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl90b3RhbDsKKwkrK1ZfcGltNnN0YXQu cGltNnNfcmN2X3RvdGFsOwogCiAJaXA2ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKIAlw aW1sZW4gPSBtLT5tX3BrdGhkci5sZW4gLSAqb2ZmcDsKQEAgLTE3MzUsNyArMTc1OCw3IEBACiAJ ICogVmFsaWRhdGUgbGVuZ3RocwogCSAqLwogCWlmIChwaW1sZW4gPCBQSU1fTUlOTEVOKSB7Ci0J CSsrcGltNnN0YXQucGltNnNfcmN2X3Rvb3Nob3J0OworCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2 X3Rvb3Nob3J0OwogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcgJiBERUJVR19Q SU0pCiAJCQlsb2coTE9HX0RFQlVHLCJwaW02X2lucHV0OiBQSU0gcGFja2V0IHRvbyBzaG9ydFxu Iik7CkBAIC0xNzY4LDcgKzE3OTEsNyBAQAogI2Vsc2UKIAlJUDZfRVhUSERSX0dFVChwaW0sIHN0 cnVjdCBwaW0gKiwgbSwgb2ZmLCBtaW5sZW4pOwogCWlmIChwaW0gPT0gTlVMTCkgewotCQlwaW02 c3RhdC5waW02c19yY3ZfdG9vc2hvcnQrKzsKKwkJVl9waW02c3RhdC5waW02c19yY3ZfdG9vc2hv cnQrKzsKIAkJcmV0dXJuIChJUFBST1RPX0RPTkUpOwogCX0KICNlbmRpZgpAQCAtMTc4OCw3ICsx ODExLDcgQEAKIAkJCWNrc3VtbGVuID0gcGltbGVuOwogCiAJCWlmIChpbjZfY2tzdW0obSwgSVBQ Uk9UT19QSU0sIG9mZiwgY2tzdW1sZW4pKSB7Ci0JCQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWRz dW07CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2JhZHN1bTsKICNpZmRlZiBNUlQ2REVCVUcK IAkJCWlmIChWX21ydDZkZWJ1ZyAmIERFQlVHX1BJTSkKIAkJCQlsb2coTE9HX0RFQlVHLApAQCAt MTgwMiw3ICsxODI1LDcgQEAKIAogCS8qIFBJTSB2ZXJzaW9uIGNoZWNrICovCiAJaWYgKHBpbS0+ cGltX3ZlciAhPSBQSU1fVkVSU0lPTikgewotCQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWR2ZXJz aW9uOworCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2JhZHZlcnNpb247CiAjaWZkZWYgTVJUNkRF QlVHCiAJCWxvZyhMT0dfRVJSLAogCQkgICAgInBpbTZfaW5wdXQ6IGluY29ycmVjdCB2ZXJzaW9u ICVkLCBleHBlY3RpbmcgJWRcbiIsCkBAIC0xODI4LDE0ICsxODUxLDE0IEBACiAJCWNoYXIgaXA2 YnVmc1tJTkVUNl9BRERSU1RSTEVOXSwgaXA2YnVmZFtJTkVUNl9BRERSU1RSTEVOXTsKICNlbmRp ZgogCi0JCSsrcGltNnN0YXQucGltNnNfcmN2X3JlZ2lzdGVyczsKKwkJKytWX3BpbTZzdGF0LnBp bTZzX3Jjdl9yZWdpc3RlcnM7CiAKLQkJaWYgKChyZWdfbWlmX251bSA+PSBudW1taWZzKSB8fCAo cmVnX21pZl9udW0gPT0gKG1pZmlfdCkgLTEpKSB7CisJCWlmICgoVl9yZWdfbWlmX251bSA+PSBW X251bW1pZnMpIHx8IChWX3JlZ19taWZfbnVtID09IChtaWZpX3QpIC0xKSkgewogI2lmZGVmIE1S VDZERUJVRwogCQkJaWYgKFZfbXJ0NmRlYnVnICYgREVCVUdfUElNKQogCQkJCWxvZyhMT0dfREVC VUcsCiAJCQkJICAgICJwaW02X2lucHV0OiByZWdpc3RlciBtaWYgbm90IHNldDogJWRcbiIsCi0J CQkJICAgIHJlZ19taWZfbnVtKTsKKwkJCQkgICAgVl9yZWdfbWlmX251bSk7CiAjZW5kaWYKIAkJ CW1fZnJlZW0obSk7CiAJCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CkBAIC0xODUwLDggKzE4NzMs OCBAQAogCQkgKiBWYWxpZGF0ZSBsZW5ndGgKIAkJICovCiAJCWlmIChwaW1sZW4gPCBQSU02X1JF R19NSU5MRU4pIHsKLQkJCSsrcGltNnN0YXQucGltNnNfcmN2X3Rvb3Nob3J0OwotCQkJKytwaW02 c3RhdC5waW02c19yY3ZfYmFkcmVnaXN0ZXJzOworCQkJKytWX3BpbTZzdGF0LnBpbTZzX3Jjdl90 b29zaG9ydDsKKwkJCSsrVl9waW02c3RhdC5waW02c19yY3ZfYmFkcmVnaXN0ZXJzOwogI2lmZGVm IE1SVDZERUJVRwogCQkJbG9nKExPR19FUlIsCiAJCQkgICAgInBpbTZfaW5wdXQ6IHJlZ2lzdGVy IHBhY2tldCBzaXplIHRvbyAiCkBAIC0xODc1LDcgKzE4OTgsNyBAQAogCiAJCS8qIHZlcmlmeSB0 aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGlubmVyIHBhY2tldCAqLwogCQlpZiAoKGVpcDYtPmlw Nl92ZmMgJiBJUFY2X1ZFUlNJT05fTUFTSykgIT0gSVBWNl9WRVJTSU9OKSB7Ci0JCQkrK3BpbTZz dGF0LnBpbTZzX3Jjdl9iYWRyZWdpc3RlcnM7CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2Jh ZHJlZ2lzdGVyczsKICNpZmRlZiBNUlQ2REVCVUcKIAkJCWxvZyhMT0dfREVCVUcsICJwaW02X2lu cHV0OiBpbnZhbGlkIElQIHZlcnNpb24gKCVkKSAiCiAJCQkgICAgIm9mIHRoZSBpbm5lciBwYWNr ZXRcbiIsCkBAIC0xODg3LDcgKzE5MTAsNyBAQAogCiAJCS8qIHZlcmlmeSB0aGUgaW5uZXIgcGFj a2V0IGlzIGRlc3RpbmVkIHRvIGEgbWNhc3QgZ3JvdXAgKi8KIAkJaWYgKCFJTjZfSVNfQUREUl9N VUxUSUNBU1QoJmVpcDYtPmlwNl9kc3QpKSB7Ci0JCQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWRy ZWdpc3RlcnM7CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2JhZHJlZ2lzdGVyczsKICNpZmRl ZiBNUlQ2REVCVUcKIAkJCWlmIChWX21ydDZkZWJ1ZyAmIERFQlVHX1BJTSkKIAkJCQlsb2coTE9H X0RFQlVHLApAQCAtMTkyNCwxMSArMTk0NywxMSBAQAogCQkJICAgICJzcmMgJXMsIGRzdCAlcywg bWlmICVkXG4iLAogCQkJICAgIGlwNl9zcHJpbnRmKGlwNmJ1ZnMsICZlaXA2LT5pcDZfc3JjKSwK IAkJCSAgICBpcDZfc3ByaW50ZihpcDZidWZkLCAmZWlwNi0+aXA2X2RzdCksCi0JCQkgICAgcmVn X21pZl9udW0pOworCQkJICAgIFZfcmVnX21pZl9udW0pOwogCQl9CiAjZW5kaWYKIAotCQlyYyA9 IGlmX3NpbWxvb3AobWlmNnRhYmxlW3JlZ19taWZfbnVtXS5tNl9pZnAsIG0sCisJCXJjID0gaWZf c2ltbG9vcChWX21pZjZ0YWJsZVtWX3JlZ19taWZfbnVtXS5tNl9pZnAsIG0sCiAJCQkJZHN0LnNp bjZfZmFtaWx5LCAwKTsKIAogCQkvKiBwcmVwYXJlIHRoZSByZWdpc3RlciBoZWFkIHRvIHNlbmQg dG8gdGhlIG1yb3V0aW5nIGRhZW1vbiAqLwpkaWZmIC11ciBzeXMuMjAwODEwMTUvbmV0aW5ldDYv aXA2X21yb3V0ZS5oIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmgKLS0tIHN5cy4yMDA4MTAxNS9u ZXRpbmV0Ni9pcDZfbXJvdXRlLmgJMjAwOC0xMC0xNSAwODoyNToyOC4wMDAwMDAwMDAgLTA3MDAK KysrIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmgJMjAwOC0xMS0wNSAxMzoyMTo1Ni4wMDAwMDAw MDAgLTA4MDAKQEAgLTI2Niw2ICsyNjYsNyBAQAogZXh0ZXJuIGludAkoKmlwNl9tcm91dGVyX2dl dCkoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KTsKIGV4dGVybiBpbnQJ KCppcDZfbXJvdXRlcl9kb25lKSh2b2lkKTsKIGV4dGVybiBpbnQJKCptcnQ2X2lvY3RsKShpbnQs IGNhZGRyX3QpOworCiAjZW5kaWYgLyogX0tFUk5FTCAqLwogCiAjZW5kaWYgLyogIV9ORVRJTkVU Nl9JUDZfTVJPVVRFX0hfICovCmRpZmYgLXVyIHN5cy4yMDA4MTAxNS9uZXRpbmV0Ni9pcDZfb3V0 cHV0LmMgc3lzL25ldGluZXQ2L2lwNl9vdXRwdXQuYwotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2 L2lwNl9vdXRwdXQuYwkyMDA4LTEwLTE1IDA4OjI1OjI4LjAwMDAwMDAwMCAtMDcwMAorKysgc3lz L25ldGluZXQ2L2lwNl9vdXRwdXQuYwkyMDA4LTEwLTI4IDIwOjAxOjIyLjAwMDAwMDAwMCAtMDcw MApAQCAtNzQ0LDcgKzc0NCw3IEBACiAJCQkgKiBhYm92ZSwgd2lsbCBiZSBmb3J3YXJkZWQgYnkg dGhlIGlwNl9pbnB1dCgpIHJvdXRpbmUsCiAJCQkgKiBpZiBuZWNlc3NhcnkuCiAJCQkgKi8KLQkJ CWlmIChpcDZfbXJvdXRlciAmJiAoZmxhZ3MgJiBJUFY2X0ZPUldBUkRJTkcpID09IDApIHsKKwkJ CWlmIChWX2lwNl9tcm91dGVyICYmIChmbGFncyAmIElQVjZfRk9SV0FSRElORykgPT0gMCkgewog CQkJCS8qCiAJCQkJICogWFhYOiBpcDZfbWZvcndhcmQgZXhwZWN0cyB0aGF0IHJjdmlmIGlzIE5V TEwKIAkJCQkgKiB3aGVuIGl0IGlzIGNhbGxlZCBmcm9tIHRoZSBvcmlnaW5hdGluZyBwYXRoLgpk aWZmIC11ciBzeXMuMjAwODEwMTUvbmV0aW5ldDYvaXA2X3Zhci5oIHN5cy9uZXRpbmV0Ni9pcDZf dmFyLmgKLS0tIHN5cy4yMDA4MTAxNS9uZXRpbmV0Ni9pcDZfdmFyLmgJMjAwOC0xMC0xNSAwODoy NToyOC4wMDAwMDAwMDAgLTA3MDAKKysrIHN5cy9uZXRpbmV0Ni9pcDZfdmFyLmgJMjAwOC0xMC0y OCAyMDowMToyMi4wMDAwMDAwMDAgLTA3MDAKQEAgLTI5Miw4ICsyOTIsOCBAQAogZXh0ZXJuIGlu dAlpcDZfdjZvbmx5OwogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3Qgc29ja2V0ICppcDZfbXJvdXRl cjsJLyogbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uICovCiAjaWZuZGVmIFZJTUFHRQorZXh0ZXJu IHN0cnVjdCBzb2NrZXQgKmlwNl9tcm91dGVyOwkvKiBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24g Ki8KIGV4dGVybiBpbnQJaXA2X3NlbmRyZWRpcmVjdHM7CS8qIHNlbmQgSVAgcmVkaXJlY3RzIHdo ZW4gZm9yd2FyZGluZz8gKi8KIGV4dGVybiBpbnQJaXA2X21heGZyYWdwYWNrZXRzOyAvKiBNYXhp bXVtIHBhY2tldHMgaW4gcmVhc3NlbWJseSBxdWV1ZSAqLwogZXh0ZXJuIGludAlpcDZfbWF4ZnJh Z3M7CS8qIE1heGltdW0gZnJhZ21lbnRzIGluIHJlYXNzZW1ibHkgcXVldWUgKi8KZGlmZiAtdXIg c3lzLjIwMDgxMDE1L25ldGluZXQ2L21sZDYuYyBzeXMvbmV0aW5ldDYvbWxkNi5jCi0tLSBzeXMu MjAwODEwMTUvbmV0aW5ldDYvbWxkNi5jCTIwMDgtMTAtMTUgMDg6MjU6MjguMDAwMDAwMDAwIC0w NzAwCisrKyBzeXMvbmV0aW5ldDYvbWxkNi5jCTIwMDgtMTAtMjggMjA6MDE6MjIuMDAwMDAwMDAw IC0wNzAwCkBAIC01MTgsNyArNTE4LDcgQEAKIAkgKiBSZXF1ZXN0IGxvb3BiYWNrIG9mIHRoZSBy ZXBvcnQgaWYgd2UgYXJlIGFjdGluZyBhcyBhIG11bHRpY2FzdAogCSAqIHJvdXRlciwgc28gdGhh dCB0aGUgcHJvY2Vzcy1sZXZlbCByb3V0aW5nIGRhZW1vbiBjYW4gaGVhciBpdC4KIAkgKi8KLQlp bTZvLmltNm9fbXVsdGljYXN0X2xvb3AgPSAoaXA2X21yb3V0ZXIgIT0gTlVMTCk7CisJaW02by5p bTZvX211bHRpY2FzdF9sb29wID0gKFZfaXA2X21yb3V0ZXIgIT0gTlVMTCk7CiAKIAkvKiBpbmNy ZW1lbnQgb3V0cHV0IHN0YXRpY3RpY3MgKi8KIAlWX2ljbXA2c3RhdC5pY3A2c19vdXRoaXN0W3R5 cGVdKys7CmRpZmYgLXVyIHN5cy4yMDA4MTAxNS9uZXRpbmV0Ni9yYXdfaXA2LmMgc3lzL25ldGlu ZXQ2L3Jhd19pcDYuYwotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2L3Jhd19pcDYuYwkyMDA4LTEw LTE1IDA4OjI1OjI4LjAwMDAwMDAwMCAtMDcwMAorKysgc3lzL25ldGluZXQ2L3Jhd19pcDYuYwky MDA4LTEwLTI4IDIwOjAxOjIyLjAwMDAwMDAwMCAtMDcwMApAQCAtMTI5LDcgKzEyOSw5IEBACiAv KgogICogSG9va3MgZm9yIG11bHRpY2FzdCBmb3J3YXJkaW5nLgogICovCisjaWZuZGVmIFZJTUFH RQogc3RydWN0IHNvY2tldCAqaXA2X21yb3V0ZXIgPSBOVUxMOworI2VuZGlmCiBpbnQgKCppcDZf bXJvdXRlcl9zZXQpKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKik7CiBpbnQgKCpp cDZfbXJvdXRlcl9nZXQpKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKik7CiBpbnQg KCppcDZfbXJvdXRlcl9kb25lKSh2b2lkKTsKQEAgLTU5OSwxMiArNjAxLDEzIEBACiByaXA2X2Rl dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKIAlJTklUX1ZORVRfSU5FVChzby0+c29fdm5ldCk7 CisJSU5JVF9WTkVUX0lORVQ2KHNvLT5zb192bmV0KTsKIAlzdHJ1Y3QgaW5wY2IgKmlucDsKIAog CWlucCA9IHNvdG9pbnBjYihzbyk7CiAJS0FTU0VSVChpbnAgIT0gTlVMTCwgKCJyaXA2X2RldGFj aDogaW5wID09IE5VTEwiKSk7CiAKLQlpZiAoc28gPT0gaXA2X21yb3V0ZXIgJiYgaXA2X21yb3V0 ZXJfZG9uZSkKKwlpZiAoc28gPT0gVl9pcDZfbXJvdXRlciAmJiBpcDZfbXJvdXRlcl9kb25lKQog CQlpcDZfbXJvdXRlcl9kb25lKCk7CiAJLyogeHh4OiBSU1ZQICovCiAJSU5QX0lORk9fV0xPQ0so JlZfcmlwY2JpbmZvKTsKZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQ2L3ZpbmV0Ni5oIHN5 cy9uZXRpbmV0Ni92aW5ldDYuaAotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2L3ZpbmV0Ni5oCTIw MDgtMTAtMTUgMDg6MjU6MjguMDAwMDAwMDAwIC0wNzAwCisrKyBzeXMvbmV0aW5ldDYvdmluZXQ2 LmgJMjAwOC0xMC0yOSAxMjo1ODo1Mi4wMDAwMDAwMDAgLTA3MDAKQEAgLTQzLDYgKzQzLDggQEAK ICNpbmNsdWRlIDxuZXRpbmV0Ni9zY29wZTZfdmFyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvaW42 X2lmYXR0YWNoLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvbmQ2Lmg+CisjaW5jbHVkZSA8bmV0aW5l dDYvaXA2X21yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldGluZXQ2L3BpbTZfdmFyLmg+IC8qIHN0cnVj dCBwaW02c3RhdCAqLwogCiAjZGVmaW5lIElOSVRfVk5FVF9JTkVUNih2bmV0KSBcCiAJSU5JVF9G Uk9NX1ZORVQodm5ldCwgVk5FVF9NT0RfSU5FVDYsIFwKQEAgLTk1LDYgKzk3LDcgQEAKIAkvL2lu dAkJCQlfaWNtcDZfbm9kZWluZm87CiAKIAlpbnQgCQkJCV9pcDZfZm9yd2FyZGluZzsKKwlzdHJ1 Y3Qgc29ja2V0ICoJCQlfaXA2X21yb3V0ZXI7CiAJaW50CQkJCV9pcDZfc2VuZHJlZGlyZWN0czsK IAlpbnQJCQkJX2lwNl9kZWZobGltOwogCWludAkJCQlfaXA2X2RlZm1jYXN0aGxpbTsKQEAgLTE0 OSwxNCArMTUyLDI1IEBACiAJdV9pbnQzMl90CQkJX2lwNl90ZW1wX3ByZWZlcnJlZF9saWZldGlt ZTsKIAl1X2ludDMyX3QJCQlfaXA2X3RlbXBfdmFsaWRfbGlmZXRpbWU7CiAKLQlpbnQJCQkJX2lw Nl9tcm91dGVyX3ZlcjsKLQlpbnQJCQkJX3BpbTY7Ci0JdV9pbnQJCQkJX21ydDZkZWJ1ZzsKLQog CWludAkJCQlfaXA2X3RlbXBfcmVnZW5fYWR2YW5jZTsKIAlpbnQJCQkJX2lwNl91c2VfZGVmem9u ZTsKIAogCXN0cnVjdCBpcDZfcGt0b3B0cwkJX2lwNl9vcHRzOworCisJLyogZnJvbSBpcDZfbXJv dXRlLmMgKi8KKwlpbnQJCQkJX2lwNl9tcm91dGVyX3ZlcjsgLyogPSAwOyAqLworCXN0cnVjdCBt cnQ2c3RhdAkJCV9tcnQ2c3RhdDsKKwlzdHJ1Y3QgbWY2YyAqCQkJX21mNmN0YWJsZVtNRjZDVEJM U0laXTsKKwl1X2NoYXIJCQkJX242ZXhwaXJlW01GNkNUQkxTSVpdOworCXN0cnVjdCBtaWY2IAkJ CV9taWY2dGFibGVbTUFYTUlGU107CisJdV9pbnQJCQkJX21ydDZkZWJ1ZzsKKwlzdHJ1Y3QgaWZu ZXQgKgkJCV9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2OworCW1pZmlfdCAJCQkJX251bW1pZnM7IC8q ID0gMDsgKi8KKwltaWZpX3QgCQkJCV9yZWdfbWlmX251bTsgLyogPSAobWlmaV90KS0xOyAqLwor CXN0cnVjdCBwaW02c3RhdAkJCV9waW02c3RhdDsKKwlpbnQgCQkJCV9waW02OworCXVfbG9uZwkJ CQlfdXBjYWxsX2RhdGFbNTFdOworCXN0cnVjdCBjYWxsb3V0CQkJX2V4cGlyZV91cGNhbGxzX2No NjsKIH07CiAjZW5kaWYKIApAQCAtMjA2LDYgKzIyMCw3IEBACiAvLyNkZWZpbmUgVl9pY21wNl9u b2RlaW5mbwkJVk5FVF9JTkVUNihpY21wNl9ub2RlaW5mbykKIAogI2RlZmluZSBWX2lwNl9mb3J3 YXJkaW5nCQlWTkVUX0lORVQ2KGlwNl9mb3J3YXJkaW5nKQorI2RlZmluZSBWX2lwNl9tcm91dGVy CQkJVk5FVF9JTkVUNihpcDZfbXJvdXRlcikKICNkZWZpbmUgVl9pcDZfc2VuZHJlZGlyZWN0cwkJ Vk5FVF9JTkVUNihpcDZfc2VuZHJlZGlyZWN0cykKICNkZWZpbmUgVl9pcDZfZGVmaGxpbQkJCVZO RVRfSU5FVDYoaXA2X2RlZmhsaW0pCiAjZGVmaW5lIFZfaXA2X2RlZm1jYXN0aGxpbQkJVk5FVF9J TkVUNihpcDZfZGVmbWNhc3RobGltKQpAQCAtMjYwLDEzICsyNzUsMjQgQEAKICNkZWZpbmUgVl9p cDZfdGVtcF9wcmVmZXJyZWRfbGlmZXRpbWUJVk5FVF9JTkVUNihpcDZfdGVtcF9wcmVmZXJyZWRf bGlmZXRpbWUpCiAjZGVmaW5lIFZfaXA2X3RlbXBfdmFsaWRfbGlmZXRpbWUJVk5FVF9JTkVUNihp cDZfdGVtcF92YWxpZF9saWZldGltZSkKIAotI2RlZmluZSBWX2lwNl9tcm91dGVyX3ZlcgkJVk5F VF9JTkVUNihpcDZfbXJvdXRlcl92ZXIpCi0jZGVmaW5lIFZfcGltNgkJCQlWTkVUX0lORVQ2KHBp bTYpCi0jZGVmaW5lIFZfbXJ0NmRlYnVnCQkJVk5FVF9JTkVUNihtcnQ2ZGVidWcpCiAjZGVmaW5l IFZfaXA2X3RlbXBfcmVnZW5fYWR2YW5jZQlWTkVUX0lORVQ2KGlwNl90ZW1wX3JlZ2VuX2FkdmFu Y2UpCiAKICNkZWZpbmUgVl9pcDZfdXNlX2RlZnpvbmUJCVZORVRfSU5FVDYoaXA2X3VzZV9kZWZ6 b25lKQogCiAjZGVmaW5lIFZfaXA2X29wdHMJCQlWTkVUX0lORVQ2KGlwNl9vcHRzKQogCisjZGVm aW5lIFZfaXA2X21yb3V0ZXJfdmVyCQlWTkVUX0lORVQ2KGlwNl9tcm91dGVyX3ZlcikKKyNkZWZp bmUgVl9tcnQ2c3RhdAkJCVZORVRfSU5FVDYobXJ0NnN0YXQpCisjZGVmaW5lIFZfbWY2Y3RhYmxl CQkJVk5FVF9JTkVUNihtZjZjdGFibGUpCisjZGVmaW5lIFZfbjZleHBpcmUJCQlWTkVUX0lORVQ2 KG42ZXhwaXJlKQorI2RlZmluZSBWX21pZjZ0YWJsZQkJCVZORVRfSU5FVDYobWlmNnRhYmxlKQor I2RlZmluZSBWX21ydDZkZWJ1ZwkJCVZORVRfSU5FVDYobXJ0NmRlYnVnKQorI2RlZmluZSBWX211 bHRpY2FzdF9yZWdpc3Rlcl9pZjYJVk5FVF9JTkVUNihtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KQor I2RlZmluZSBWX251bW1pZnMJCQlWTkVUX0lORVQ2KG51bW1pZnMpCisjZGVmaW5lIFZfcmVnX21p Zl9udW0JCQlWTkVUX0lORVQ2KHJlZ19taWZfbnVtKQorI2RlZmluZSBWX3BpbTZzdGF0CQkJVk5F VF9JTkVUNihwaW02c3RhdCkKKyNkZWZpbmUgVl9waW02CQkJCVZORVRfSU5FVDYocGltNikKKyNk ZWZpbmUgVl91cGNhbGxfZGF0YQkJCVZORVRfSU5FVDYodXBjYWxsX2RhdGEpCisjZGVmaW5lIFZf ZXhwaXJlX3VwY2FsbHNfY2g2CQlWTkVUX0lORVQ2KGV4cGlyZV91cGNhbGxzX2NoNikKKwogI2Vu ZGlmIC8qICFfTkVUSU5FVDZfVklORVQ2X0hfICovCmRpZmYgLXVyIHN5cy4yMDA4MTAxNS9uZXRp cHNlYy9rZXlzb2NrLmMgc3lzL25ldGlwc2VjL2tleXNvY2suYwotLS0gc3lzLjIwMDgxMDE1L25l dGlwc2VjL2tleXNvY2suYwkyMDA4LTEwLTE1IDA4OjI1OjI5LjAwMDAwMDAwMCAtMDcwMAorKysg c3lzL25ldGlwc2VjL2tleXNvY2suYwkyMDA4LTEwLTI5IDA3OjU3OjE4LjAwMDAwMDAwMCAtMDcw MApAQCAtNDI5LDggKzQyOSw4IEBACiAJa3AtPmtwX3Byb21pc2MgPSBrcC0+a3BfcmVnaXN0ZXJl ZCA9IDA7CiAKIAlpZiAoa3AtPmtwX3Jhdy5yY2JfcHJvdG8uc3BfcHJvdG9jb2wgPT0gUEZfS0VZ KSAvKiBYWFg6IEFGX0tFWSAqLwotCQlrZXlfY2Iua2V5X2NvdW50Kys7Ci0Ja2V5X2NiLmFueV9j b3VudCsrOworCQlWX2tleV9jYi5rZXlfY291bnQrKzsKKwlWX2tleV9jYi5hbnlfY291bnQrKzsK IAlzb2lzY29ubmVjdGVkKHNvKTsKIAlzby0+c29fb3B0aW9ucyB8PSBTT19VU0VMT09QQkFDSzsK IApkaWZmIC11ciBzeXMuMjAwODEwMTUvc3lzL3ZpbWFnZS5oIHN5cy9zeXMvdmltYWdlLmgKLS0t IHN5cy4yMDA4MTAxNS9zeXMvdmltYWdlLmgJMjAwOC0xMC0xNSAwODoyNTozMC4wMDAwMDAwMDAg LTA3MDAKKysrIHN5cy9zeXMvdmltYWdlLmgJMjAwOC0xMS0wNCAxMzo1NjoxOC4wMDAwMDAwMDAg LTA4MDAKQEAgLTc3LDYgKzc3LDcgQEAKICNkZWZpbmUgVk5FVF9NT0RfSVBYCQkgOQogI2RlZmlu ZSBWTkVUX01PRF9BVEFMSwkJMTAKICNkZWZpbmUgVk5FVF9NT0RfRElWRVJUCQkxMQorI2RlZmlu ZSBWTkVUX01PRF9NUk9VVEUJCTEyCiAvKiBzdGF0ZWxlc3MgbW9kdWxlcyAqLwogI2RlZmluZSBW TkVUX01PRF9OR19XT1JNSE9MRQkxOQogI2RlZmluZSBWTkVUX01PRF9OR19FVEhFUgkyMApAQCAt MTAzLDYgKzEwNCw3IEBACiAjZGVmaW5lIFZfTU9EX3ZuZXRfcGYJCVZORVRfTU9EX1BGCiAjZGVm aW5lIFZfTU9EX3ZuZXRfZ2lmCQlWTkVUX01PRF9HSUYKICNkZWZpbmUgVl9NT0Rfdm5ldF9pcHNl YwlWTkVUX01PRF9JUFNFQworI2RlZmluZSBWX01PRF92bmV0X21yb3V0ZQlWTkVUX01PRF9NUk9V VEUKIAogI2RlZmluZSBWX01PRF92cHJvY2cJCTAKICNkZWZpbmUgVl9NT0RfdmNwdQkJMAo= ------_=_NextPart_001_01C9402C.548A7819--