From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20090 invoked by alias); 9 Jun 2011 09:28:36 -0000 Received: (qmail 19740 invoked by uid 22791); 9 Jun 2011 09:28:29 -0000 X-SWARE-Spam-Status: No, hits=3.1 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_CP,TW_FN,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-pw0-f47.google.com (HELO mail-pw0-f47.google.com) (209.85.160.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 09 Jun 2011 09:28:03 +0000 Received: by pwj9 with SMTP id 9so692460pwj.20 for ; Thu, 09 Jun 2011 02:28:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.134.16 with SMTP id h16mr70836wfd.239.1307611682875; Thu, 09 Jun 2011 02:28:02 -0700 (PDT) Received: by 10.142.162.17 with HTTP; Thu, 9 Jun 2011 02:28:02 -0700 (PDT) Date: Thu, 09 Jun 2011 09:54:00 -0000 Message-ID: Subject: Merge score7 to score.c and remove forwarding functions. From: Wei Qin To: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary=000e0cd332cadcac3e04a54411cd X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-06/txt/msg00716.txt.bz2 --000e0cd332cadcac3e04a54411cd Content-Type: text/plain; charset=ISO-8859-1 Content-length: 398 Merge score7 to score.c and remove forwarding functions. Delete score7.c and score7.h. 2011-06-08 Wei Qin * config.gcc (score-*-elf): Remove score7.o. * config/score/t-score-elf: Likewise. * config/score/score.c: Merge score7 to score.c and remove forwarding functions. * config/score/score7.c Deleted. * config/score/score7.h Deleted. --000e0cd332cadcac3e04a54411cd Content-Type: text/plain; charset=US-ASCII; name="score_diff_20110608.txt" Content-Disposition: attachment; filename="score_diff_20110608.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gopi6xwh0 Content-length: 91244 SW5kZXg6IGdjYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0Nzk2KQorKysgZ2NjL0No YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDEx LTA2LTA4ICBXZWkgUWluPHdlaS5nY2NAZ21haWwuY29tPgorCisJKiBjb25m aWcuZ2NjIChzY29yZS0qLWVsZik6IFJlbW92ZSBzY29yZTcuby4KKwkqIGNv bmZpZy9zY29yZS90LXNjb3JlLWVsZjogTGlrZXdpc2UuCisJKiBjb25maWcv c2NvcmUvc2NvcmUuYzogTWVyZ2Ugc2NvcmU3IHRvIHNjb3JlLmMgYW5kIHJl bW92ZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucy4KKwkqIGNvbmZpZy9zY29yZS9z Y29yZTcuYyBEZWxldGVkLgorCSogY29uZmlnL3Njb3JlL3Njb3JlNy5oIERl bGV0ZWQuCisKIDIwMTEtMDYtMDggIEtheiBLb2ppbWEgIDxra29qaW1hQGdj Yy5nbnUub3JnPgogCiAJKiBjb25maWcvc2gvc2guYyAocHJlcGFyZV9tb3Zl X29wZXJhbmRzKTogU2V0IHBpYyByZWdpc3RlcgpJbmRleDogZ2NjL2NvbmZp Zy5nY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NvbmZpZy5n Y2MJKHJldmlzaW9uIDE3NDc5NikKKysrIGdjYy9jb25maWcuZ2NjCSh3b3Jr aW5nIGNvcHkpCkBAIC0yMjMzLDcgKzIyMzMsNiBAQAogICAgICAgICB0bV9m aWxlPSJkYnhlbGYuaCBlbGZvcy5oIHNjb3JlL2VsZi5oIHNjb3JlL3Njb3Jl LmggbmV3bGliLXN0ZGludC5oIgogCWV4dHJhX3BhcnRzPSJjcnRpLm8gY3J0 bi5vIGNydGJlZ2luLm8gY3J0ZW5kLm8iCiAgICAgICAgIHRtYWtlX2ZpbGU9 IiR7dG1ha2VfZmlsZX0gc2NvcmUvdC1zY29yZS1lbGYgc2NvcmUvdC1zY29y ZS1zb2Z0ZnAgc29mdC1mcC90LXNvZnRmcCIKLSAgICAgICAgZXh0cmFfb2Jq cz0ic2NvcmU3Lm8iCiAgICAgICAgIDs7CiBzaC0qLWVsZiogfCBzaFsxMjM0 NmxdKi0qLWVsZiogfCBcCiAgIHNoLSotbGludXgqIHwgc2hbMjM0NmxiZV0q LSotbGludXgqIHwgXApJbmRleDogZ2NjL2NvbmZpZy9zY29yZS90LXNjb3Jl LWVsZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmlnL3Nj b3JlL3Qtc2NvcmUtZWxmCShyZXZpc2lvbiAxNzQ3OTYpCisrKyBnY2MvY29u ZmlnL3Njb3JlL3Qtc2NvcmUtZWxmCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwx MyArMTYsNiBAQAogIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQogIyA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCiAKLSMgQWRkaXRpb25hbCBCYWNrZW5kIEZpbGVzCi1zY29y ZTcubzogJChzcmNkaXIpL2NvbmZpZy9zY29yZS9zY29yZTcuYyAkKENPTkZJ R19IKSAkKFNZU1RFTV9IKSBcCi0gIGNvcmV0eXBlcy5oICQoVE1fSCkgJChS VExfSCkgb3V0cHV0LmggZmxhZ3MuaCAkKFRSRUVfSCkgXAotICBleHByLmgg dG9wbGV2LmggJChUTV9QX0gpCi0JJChDT01QSUxFUikgLWMgJChBTExfQ09N UElMRVJGTEFHUykgJChBTExfQ1BQRkxBR1MpICQoSU5DTFVERVMpIFwKLQkk KHNyY2RpcikvY29uZmlnL3Njb3JlL3Njb3JlNy5jCi0KICMgQXNzZW1ibGUg c3RhcnR1cCBmaWxlcy4KICQoVCljcnRpLm86ICQoc3JjZGlyKS9jb25maWcv c2NvcmUvY3J0aS5hc20gJChHQ0NfUEFTU0VTKQogCSQoR0NDX0ZPUl9UQVJH RVQpICQoR0NDX0NGTEFHUykgJChNVUxUSUxJQl9DRkxBR1MpICQoSU5DTFVE RVMpIFwKSW5kZXg6IGdjYy9jb25maWcvc2NvcmUvc2NvcmUuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmlnL3Njb3JlL3Njb3JlLmMJ KHJldmlzaW9uIDE3NDc5NikKKysrIGdjYy9jb25maWcvc2NvcmUvc2NvcmUu Ywkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qIE91dHB1dCBy b3V0aW5lcyBmb3IgU3VucGx1cyBTK0NPUkUgcHJvY2Vzc29yCi0gICBDb3B5 cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEK LSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJp Z2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAgQ29udHJpYnV0ZWQgYnkgU3Vu bm9ydGguCiAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KQEAgLTQ3 LDE5ICs0NiwxMDIgQEAKICNpbmNsdWRlICJ0YXJnZXQtZGVmLmgiCiAjaW5j bHVkZSAiaW50ZWdyYXRlLmgiCiAjaW5jbHVkZSAibGFuZ2hvb2tzLmgiCi0j aW5jbHVkZSAic2NvcmU3LmgiCiAjaW5jbHVkZSAiZGYuaCIKLSNpbmNsdWRl ICJvcHRzLmgiCiAKLXN0YXRpYyB2b2lkIHNjb3JlX29wdGlvbl9vdmVycmlk ZSAodm9pZCk7CisjZGVmaW5lIFNDT1JFX1NEQVRBX01BWCAgICAgICAgICAg ICAgICBzY29yZV9zZGF0YV9tYXgKKyNkZWZpbmUgU0NPUkVfU1RBQ0tfQUxJ R04oTE9DKSAgICAgICAgICgoKExPQykgKyAzKSAmIH4zKQorI2RlZmluZSBT Q09SRV9QUk9MT0dVRV9URU1QX1JFR05VTSAgICAgKEdQX1JFR19GSVJTVCAr IDgpCisjZGVmaW5lIFNDT1JFX0VQSUxPR1VFX1RFTVBfUkVHTlVNICAgICAo R1BfUkVHX0ZJUlNUICsgOCkKKyNkZWZpbmUgU0NPUkVfREVGQVVMVF9TREFU QV9NQVggICAgICAgIDgKIAorI2RlZmluZSBCSVRTRVRfUChWQUxVRSwgQklU KSAgICAgICAgICAgKCgoVkFMVUUpICYgKDFMIDw8IChCSVQpKSkgIT0gMCkK KyNkZWZpbmUgSU5TX0JVRl9TWiAgICAgICAgICAgICAgICAgICAgIDEyOAor CitlbnVtIHNjb3JlX2FkZHJlc3NfdHlwZQoreworICBTQ09SRV9BRERfUkVH LAorICBTQ09SRV9BRERfQ09OU1RfSU5ULAorICBTQ09SRV9BRERfU1lNQk9M SUMKK307CisKK3N0cnVjdCBzY29yZV9mcmFtZV9pbmZvCit7CisgIEhPU1Rf V0lERV9JTlQgdG90YWxfc2l6ZTsgICAgICAgLyogYnl0ZXMgdGhhdCB0aGUg ZW50aXJlIGZyYW1lIHRha2VzIHVwICAqLworICBIT1NUX1dJREVfSU5UIHZh cl9zaXplOyAgICAgICAgIC8qIGJ5dGVzIHRoYXQgdmFyaWFibGVzIHRha2Ug dXAgICovCisgIEhPU1RfV0lERV9JTlQgYXJnc19zaXplOyAgICAgICAgLyog Ynl0ZXMgdGhhdCBvdXRnb2luZyBhcmd1bWVudHMgdGFrZSB1cCAgKi8KKyAg SE9TVF9XSURFX0lOVCBncF9yZWdfc2l6ZTsgICAgICAvKiBieXRlcyBuZWVk ZWQgdG8gc3RvcmUgZ3AgcmVncyAgKi8KKyAgSE9TVF9XSURFX0lOVCBncF9z cF9vZmZzZXQ7ICAgICAvKiBvZmZzZXQgZnJvbSBuZXcgc3AgdG8gc3RvcmUg Z3AgcmVnaXN0ZXJzICAqLworICBIT1NUX1dJREVfSU5UIGNwcmVzdG9yZV9z aXplOyAgIC8qICMgYnl0ZXMgdGhhdCB0aGUgLmNwcmVzdG9yZSBzbG90IHRh a2VzIHVwICAqLworICB1bnNpZ25lZCBpbnQgIG1hc2s7ICAgICAgICAgICAg IC8qIG1hc2sgb2Ygc2F2ZWQgZ3AgcmVnaXN0ZXJzICAqLworICBpbnQgbnVt X2dwOyAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBncCByZWdp c3RlcnMgc2F2ZWQgICovCit9OworCitzdHJ1Y3Qgc2NvcmVfYXJnX2luZm8K K3sKKyAgdW5zaWduZWQgaW50IG51bV9ieXRlczsgICAgIC8qIFRoZSBhcmd1 bWVudCdzIHNpemUgaW4gYnl0ZXMgICovCisgIHVuc2lnbmVkIGludCByZWdf d29yZHM7ICAgICAvKiBUaGUgbnVtYmVyIG9mIHdvcmRzIHBhc3NlZCBpbiBy ZWdpc3RlcnMgICovCisgIHVuc2lnbmVkIGludCByZWdfb2Zmc2V0OyAgICAv KiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCByZWdpc3RlciBmcm9tICAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR1BfQVJHX0ZJUlNU IG9yIEZQX0FSR19GSVJTVCBldGMgICovCisgIHVuc2lnbmVkIGludCBzdGFj a193b3JkczsgICAvKiBUaGUgbnVtYmVyIG9mIHdvcmRzIHRoYXQgbXVzdCBi ZSBwYXNzZWQgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBvbiB0aGUgc3RhY2sgICovCisgIHVuc2lnbmVkIGludCBzdGFja19vZmZz ZXQ7ICAvKiBUaGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdGFj ayAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG92ZXJm bG93IGFyZWEgICovCit9OworCisjaWZkZWYgUlRYX0NPREUKK3N0cnVjdCBz Y29yZV9hZGRyZXNzX2luZm8KK3sKKyAgZW51bSBzY29yZV9hZGRyZXNzX3R5 cGUgdHlwZTsKKyAgcnR4IHJlZzsKKyAgcnR4IG9mZnNldDsKKyAgZW51bSBy dHhfY29kZSBjb2RlOworICBlbnVtIHNjb3JlX3N5bWJvbF90eXBlIHN5bWJv bF90eXBlOworfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNjb3JlX3NkYXRh X21heDsKK3N0YXRpYyBjaGFyIHNjb3JlX2luc1tJTlNfQlVGX1NaICsgOF07 CisKIC8qIEltcGxlbWVudCBUQVJHRVRfT1BUSU9OX09QVElNSVpBVElPTl9U QUJMRS4gICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRlZmF1bHRfb3B0aW9u cyBzY29yZV9vcHRpb25fb3B0aW1pemF0aW9uX3RhYmxlW10gPQotICB7Cit7 CiAgICAgeyBPUFRfTEVWRUxTXzFfUExVUywgT1BUX2ZvbWl0X2ZyYW1lX3Bv aW50ZXIsIE5VTEwsIDEgfSwKICAgICB7IE9QVF9MRVZFTFNfTk9ORSwgMCwg TlVMTCwgMCB9Ci0gIH07Cit9OwogCitzdHJ1Y3QgZXh0ZXJuX2xpc3QgKmV4 dGVybl9oZWFkID0gMDsKKworc3RhdGljIGJvb2wgc2NvcmVfcmV0dXJuX2lu X21lbW9yeSAoY29uc3RfdHJlZSB0eXBlLCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUgZm5kZWNsIEFUVFJJQlVU RV9VTlVTRUQpOworc3RhdGljIHZvaWQgc2NvcmVfb3V0cHV0X21pX3RodW5r IChGSUxFICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0cmVlIHRodW5rX2ZuZGVjbCBBVFRSSUJVVEVfVU5VU0VELAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT1NUX1dJREVfSU5U IGRlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI T1NUX1dJREVfSU5UIHZjYWxsX29mZnNldCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHJlZSBmdW5jdGlvbik7CitzdGF0aWMgcnR4 IHNjb3JlX2xlZ2l0aW1pemVfYWRkcmVzcyAocnR4IHgpOworc3RhdGljIHZv aWQgc2NvcmVfZnVuY3Rpb25fcHJvbG9ndWUgKEZJTEUgKmZpbGUsIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfV0lERV9J TlQgc2l6ZSBBVFRSSUJVVEVfVU5VU0VEKTsKK3N0YXRpYyB2b2lkIHNjb3Jl X2Z1bmN0aW9uX2VwaWxvZ3VlIChGSUxFICpmaWxlLCAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIT1NUX1dJREVfSU5UIHNpemUg QVRUUklCVVRFX1VOVVNFRCk7CitzdGF0aWMgc2VjdGlvbiAqc2NvcmVfc2Vs ZWN0X3J0eF9zZWN0aW9uIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHgg eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYWxpZ24pOworc3RhdGljIGJvb2wg c2NvcmVfaW5fc21hbGxfZGF0YV9wIChjb25zdF90cmVlIGRlY2wpOworc3Rh dGljIHZvaWQgc2NvcmVfYXNtX2ZpbGVfZW5kICh2b2lkKTsKK3N0YXRpYyB2 b2lkIHNjb3JlX2Z1bmN0aW9uX2FyZ19hZHZhbmNlIChDVU1VTEFUSVZFX0FS R1MgKmN1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUgdHlwZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5h bWVkKTsKK3N0YXRpYyBydHggc2NvcmVfZnVuY3Rpb25fYXJnIChjb25zdCBD VU1VTEFUSVZFX0FSR1MgKmN1bSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUgdHlwZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIG5hbWVkKTsKK3N0YXRpYyB2 b2lkIHNjb3JlX2FzbV90cmFtcG9saW5lX3RlbXBsYXRlIChGSUxFICopOwor c3RhdGljIHZvaWQgc2NvcmVfdHJhbXBvbGluZV9pbml0IChydHgsIHRyZWUs IHJ0eCk7CitzdGF0aWMgYm9vbCBzY29yZV9sZWdpdGltYXRlX2FkZHJlc3Nf cCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcnR4IHgsIAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0KTsKK3N0 YXRpYyB2b2lkIHNjb3JlX29wdGlvbl9vdmVycmlkZSAodm9pZCk7CisKICN1 bmRlZiAgVEFSR0VUX0FTTV9GSUxFX1NUQVJUCiAjZGVmaW5lIFRBUkdFVF9B U01fRklMRV9TVEFSVCAgICAgICAgICAgc2NvcmVfYXNtX2ZpbGVfc3RhcnQK IApAQCAtMTQ5LDMxICsyMzEsMjYxIEBACiAjdW5kZWYgVEFSR0VUX1RSQU1Q T0xJTkVfSU5JVAogI2RlZmluZSBUQVJHRVRfVFJBTVBPTElORV9JTklUCQlz Y29yZV90cmFtcG9saW5lX2luaXQKIAotc3RydWN0IGV4dGVybl9saXN0ICpl eHRlcm5faGVhZCA9IDA7CisvKiBSZXR1cm4gdHJ1ZSBpZiBTWU1CT0wgaXMg YSBTWU1CT0xfUkVGIGFuZCBPRkZTRVQgKyBTWU1CT0wgcG9pbnRzCisgICB0 byB0aGUgc2FtZSBvYmplY3QgYXMgU1lNQk9MLiAgKi8KK3N0YXRpYyBpbnQK K3Njb3JlX29mZnNldF93aXRoaW5fb2JqZWN0X3AgKHJ0eCBzeW1ib2wsIEhP U1RfV0lERV9JTlQgb2Zmc2V0KQoreworICBpZiAoR0VUX0NPREUgKHN5bWJv bCkgIT0gU1lNQk9MX1JFRikKKyAgICByZXR1cm4gMDsKIAotLyogZGVmYXVs dCAwID0gTk9fUkVHUyAgKi8KLWVudW0gcmVnX2NsYXNzIHNjb3JlX2NoYXJf dG9fY2xhc3NbMjU2XTsKKyAgaWYgKENPTlNUQU5UX1BPT0xfQUREUkVTU19Q IChzeW1ib2wpCisgICAgICAmJiBvZmZzZXQgPj0gMAorICAgICAgJiYgb2Zm c2V0IDwgKGludClHRVRfTU9ERV9TSVpFIChnZXRfcG9vbF9tb2RlIChzeW1i b2wpKSkKKyAgICByZXR1cm4gMTsKIAorICBpZiAoU1lNQk9MX1JFRl9ERUNM IChzeW1ib2wpICE9IDAKKyAgICAgICYmIG9mZnNldCA+PSAwCisgICAgICAm JiBvZmZzZXQgPCBpbnRfc2l6ZV9pbl9ieXRlcyAoVFJFRV9UWVBFIChTWU1C T0xfUkVGX0RFQ0wgKHN5bWJvbCkpKSkKKyAgICByZXR1cm4gMTsKKworICBy ZXR1cm4gMDsKK30KKworLyogU3BsaXQgWCBpbnRvIGEgYmFzZSBhbmQgYSBj b25zdGFudCBvZmZzZXQsIHN0b3JpbmcgdGhlbSBpbiAqQkFTRQorICAgYW5k ICpPRkZTRVQgcmVzcGVjdGl2ZWx5LiAgKi8KK3N0YXRpYyB2b2lkCitzY29y ZV9zcGxpdF9jb25zdCAocnR4IHgsIHJ0eCAqYmFzZSwgSE9TVF9XSURFX0lO VCAqb2Zmc2V0KQoreworICAqb2Zmc2V0ID0gMDsKKworICBpZiAoR0VUX0NP REUgKHgpID09IENPTlNUKQorICAgIHggPSBYRVhQICh4LCAwKTsKKworICBp ZiAoR0VUX0NPREUgKHgpID09IFBMVVMgJiYgR0VUX0NPREUgKFhFWFAgKHgs IDEpKSA9PSBDT05TVF9JTlQpCisgICAgeworICAgICAgKm9mZnNldCArPSBJ TlRWQUwgKFhFWFAgKHgsIDEpKTsKKyAgICAgIHggPSBYRVhQICh4LCAwKTsK KyAgICB9CisKKyAgKmJhc2UgPSB4OworfQorCisvKiBDbGFzc2lmeSBzeW1i b2wgWCwgd2hpY2ggbXVzdCBiZSBhIFNZTUJPTF9SRUYgb3IgYSBMQUJFTF9S RUYuICAqLworc3RhdGljIGVudW0gc2NvcmVfc3ltYm9sX3R5cGUKK3Njb3Jl X2NsYXNzaWZ5X3N5bWJvbCAocnR4IHgpCit7CisgIGlmIChHRVRfQ09ERSAo eCkgPT0gTEFCRUxfUkVGKQorICAgIHJldHVybiBTWU1CT0xfR0VORVJBTDsK KworICBnY2NfYXNzZXJ0IChHRVRfQ09ERSAoeCkgPT0gU1lNQk9MX1JFRik7 CisKKyAgaWYgKENPTlNUQU5UX1BPT0xfQUREUkVTU19QICh4KSkKKyAgICB7 CisgICAgICBpZiAoR0VUX01PREVfU0laRSAoZ2V0X3Bvb2xfbW9kZSAoeCkp IDw9IFNDT1JFX1NEQVRBX01BWCkKKyAgICAgICAgcmV0dXJuIFNZTUJPTF9T TUFMTF9EQVRBOworICAgICAgcmV0dXJuIFNZTUJPTF9HRU5FUkFMOworICAg IH0KKyAgaWYgKFNZTUJPTF9SRUZfU01BTExfUCAoeCkpCisgICAgcmV0dXJu IFNZTUJPTF9TTUFMTF9EQVRBOworICByZXR1cm4gU1lNQk9MX0dFTkVSQUw7 Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9u IG11c3Qgc2F2ZSBSRUdOTy4gICovCitzdGF0aWMgaW50CitzY29yZV9zYXZl X3JlZ19wICh1bnNpZ25lZCBpbnQgcmVnbm8pCit7CisgIC8qIENoZWNrIGNh bGwtc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKyAgaWYgKGRmX3JlZ3NfZXZlcl9s aXZlX3AgKHJlZ25vKSAmJiAhY2FsbF91c2VkX3JlZ3NbcmVnbm9dKQorICAg IHJldHVybiAxOworCisgIC8qIFdlIG5lZWQgdG8gc2F2ZSB0aGUgb2xkIGZy YW1lIHBvaW50ZXIgYmVmb3JlIHNldHRpbmcgdXAgYSBuZXcgb25lLiAgKi8K KyAgaWYgKHJlZ25vID09IEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gJiYg ZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisgICAgcmV0dXJuIDE7CisKKyAgLyog V2UgbmVlZCB0byBzYXZlIHRoZSBpbmNvbWluZyByZXR1cm4gYWRkcmVzcyBp ZiBpdCBpcyBldmVyIGNsb2JiZXJlZAorICAgICB3aXRoaW4gdGhlIGZ1bmN0 aW9uLiAgKi8KKyAgaWYgKHJlZ25vID09IFJBX1JFR05VTSAmJiBkZl9yZWdz X2V2ZXJfbGl2ZV9wIChyZWdubykpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIFJldHVybiBvbmUgd29yZCBvZiBkb3VibGUtd29y ZCB2YWx1ZSBPUCwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZml4ZWQKKyAg IGVuZGlhbm5lc3Mgb2YgY2VydGFpbiByZWdpc3RlcnMuICBISUdIX1AgaXMg dHJ1ZSB0byBzZWxlY3QgdGhlIGhpZ2ggcGFydCwKKyAgIGZhbHNlIHRvIHNl bGVjdCB0aGUgbG93IHBhcnQuICAqLworc3RhdGljIHJ0eAorc2NvcmVfc3Vi dyAocnR4IG9wLCBpbnQgaGlnaF9wKQoreworICB1bnNpZ25lZCBpbnQgYnl0 ZTsKKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFIChvcCk7 CisKKyAgaWYgKG1vZGUgPT0gVk9JRG1vZGUpCisgICAgbW9kZSA9IERJbW9k ZTsKKworICBieXRlID0gKFRBUkdFVF9MSVRUTEVfRU5ESUFOID8gaGlnaF9w IDogIWhpZ2hfcCkgPyBVTklUU19QRVJfV09SRCA6IDA7CisKKyAgaWYgKEdF VF9DT0RFIChvcCkgPT0gUkVHICYmIFJFR05PIChvcCkgPT0gSElfUkVHTlVN KQorICAgIHJldHVybiBnZW5fcnR4X1JFRyAoU0ltb2RlLCBoaWdoX3AgPyBI SV9SRUdOVU0gOiBMT19SRUdOVU0pOworCisgIGlmIChHRVRfQ09ERSAob3Ap ID09IE1FTSkKKyAgICByZXR1cm4gYWRqdXN0X2FkZHJlc3MgKG9wLCBTSW1v ZGUsIGJ5dGUpOworCisgIHJldHVybiBzaW1wbGlmeV9nZW5fc3VicmVnIChT SW1vZGUsIG9wLCBtb2RlLCBieXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBz Y29yZV9mcmFtZV9pbmZvICoKK3Njb3JlX2NhY2hlZF9mcmFtZSAodm9pZCkK K3sKKyAgc3RhdGljIHN0cnVjdCBzY29yZV9mcmFtZV9pbmZvIF9mcmFtZV9p bmZvOworICByZXR1cm4gJl9mcmFtZV9pbmZvOworfQorCisvKiBSZXR1cm4g dGhlIGJ5dGVzIG5lZWRlZCB0byBjb21wdXRlIHRoZSBmcmFtZSBwb2ludGVy IGZyb20gdGhlIGN1cnJlbnQKKyAgIHN0YWNrIHBvaW50ZXIuICBTSVpFIGlz IHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcy4g ICovCitzdGF0aWMgc3RydWN0IHNjb3JlX2ZyYW1lX2luZm8gKgorc2NvcmVf Y29tcHV0ZV9mcmFtZV9zaXplIChIT1NUX1dJREVfSU5UIHNpemUpCit7Cisg IHVuc2lnbmVkIGludCByZWdubzsKKyAgc3RydWN0IHNjb3JlX2ZyYW1lX2lu Zm8gKmYgPSBzY29yZV9jYWNoZWRfZnJhbWUgKCk7CisKKyAgbWVtc2V0IChm LCAwLCBzaXplb2YgKHN0cnVjdCBzY29yZV9mcmFtZV9pbmZvKSk7CisgIGYt PmdwX3JlZ19zaXplID0gMDsKKyAgZi0+bWFzayA9IDA7CisgIGYtPnZhcl9z aXplID0gU0NPUkVfU1RBQ0tfQUxJR04gKHNpemUpOworICBmLT5hcmdzX3Np emUgPSBjcnRsLT5vdXRnb2luZ19hcmdzX3NpemU7CisgIGYtPmNwcmVzdG9y ZV9zaXplID0gZmxhZ19waWMgPyBVTklUU19QRVJfV09SRCA6IDA7CisgIGlm IChmLT52YXJfc2l6ZSA9PSAwICYmIGN1cnJlbnRfZnVuY3Rpb25faXNfbGVh ZikKKyAgICBmLT5hcmdzX3NpemUgPSBmLT5jcHJlc3RvcmVfc2l6ZSA9IDA7 CisKKyAgaWYgKGYtPmFyZ3Nfc2l6ZSA9PSAwICYmIGNmdW4tPmNhbGxzX2Fs bG9jYSkKKyAgICBmLT5hcmdzX3NpemUgPSBVTklUU19QRVJfV09SRDsKKwor ICBmLT50b3RhbF9zaXplID0gZi0+dmFyX3NpemUgKyBmLT5hcmdzX3NpemUg KyBmLT5jcHJlc3RvcmVfc2l6ZTsKKyAgZm9yIChyZWdubyA9IEdQX1JFR19G SVJTVDsgcmVnbm8gPD0gR1BfUkVHX0xBU1Q7IHJlZ25vKyspCisgICAgewor ICAgICAgaWYgKHNjb3JlX3NhdmVfcmVnX3AgKHJlZ25vKSkKKyAgICAgICAg eworICAgICAgICAgIGYtPmdwX3JlZ19zaXplICs9IEdFVF9NT0RFX1NJWkUg KFNJbW9kZSk7CisgICAgICAgICAgZi0+bWFzayB8PSAxIDw8IChyZWdubyAt IEdQX1JFR19GSVJTVCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKGNy dGwtPmNhbGxzX2VoX3JldHVybikKKyAgICB7CisgICAgICB1bnNpZ25lZCBp bnQgaTsKKyAgICAgIGZvciAoaSA9IDA7OyArK2kpCisgICAgICAgIHsKKyAg ICAgICAgICByZWdubyA9IEVIX1JFVFVSTl9EQVRBX1JFR05PIChpKTsKKyAg ICAgICAgICBpZiAocmVnbm8gPT0gSU5WQUxJRF9SRUdOVU0pCisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBmLT5ncF9yZWdfc2l6ZSArPSBHRVRf TU9ERV9TSVpFIChTSW1vZGUpOworICAgICAgICAgIGYtPm1hc2sgfD0gMSA8 PCAocmVnbm8gLSBHUF9SRUdfRklSU1QpOworICAgICAgICB9CisgICAgfQor CisgIGYtPnRvdGFsX3NpemUgKz0gZi0+Z3BfcmVnX3NpemU7CisgIGYtPm51 bV9ncCA9IGYtPmdwX3JlZ19zaXplIC8gVU5JVFNfUEVSX1dPUkQ7CisKKyAg aWYgKGYtPm1hc2spCisgICAgeworICAgICAgSE9TVF9XSURFX0lOVCBvZmZz ZXQ7CisgICAgICBvZmZzZXQgPSAoZi0+YXJnc19zaXplICsgZi0+Y3ByZXN0 b3JlX3NpemUgKyBmLT52YXJfc2l6ZQorICAgICAgICAgICAgICAgICsgZi0+ Z3BfcmVnX3NpemUgLSBHRVRfTU9ERV9TSVpFIChTSW1vZGUpKTsKKyAgICAg IGYtPmdwX3NwX29mZnNldCA9IG9mZnNldDsKKyAgICB9CisgIGVsc2UKKyAg ICBmLT5ncF9zcF9vZmZzZXQgPSAwOworCisgIHJldHVybiBmOworfQorCisv KiBSZXR1cm4gdHJ1ZSBpZiBYIGlzIGEgdmFsaWQgYmFzZSByZWdpc3RlciBm b3IgdGhlIGdpdmVuIG1vZGUuCisgICBBbGxvdyBvbmx5IGhhcmQgcmVnaXN0 ZXJzIGlmIFNUUklDVC4gICovCitzdGF0aWMgaW50CitzY29yZV92YWxpZF9i YXNlX3JlZ2lzdGVyX3AgKHJ0eCB4LCBpbnQgc3RyaWN0KQoreworICBpZiAo IXN0cmljdCAmJiBHRVRfQ09ERSAoeCkgPT0gU1VCUkVHKQorICAgIHggPSBT VUJSRUdfUkVHICh4KTsKKworICByZXR1cm4gKEdFVF9DT0RFICh4KSA9PSBS RUcKKyAgICAgICAgICAmJiBzY29yZV9yZWdub19tb2RlX29rX2Zvcl9iYXNl X3AgKFJFR05PICh4KSwgc3RyaWN0KSk7Cit9CisKKy8qIFJldHVybiB0cnVl IGlmIFggaXMgYSB2YWxpZCBhZGRyZXNzIGZvciBtYWNoaW5lIG1vZGUgTU9E RS4gIElmIGl0IGlzLAorICAgZmlsbCBpbiBJTkZPIGFwcHJvcHJpYXRlbHku ICBTVFJJQ1QgaXMgdHJ1ZSBpZiB3ZSBzaG91bGQgb25seSBhY2NlcHQKKyAg IGhhcmQgYmFzZSByZWdpc3RlcnMuICAqLworc3RhdGljIGludAorc2NvcmVf Y2xhc3NpZnlfYWRkcmVzcyAoc3RydWN0IHNjb3JlX2FkZHJlc3NfaW5mbyAq aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9t b2RlIG1vZGUsIHJ0eCB4LCBpbnQgc3RyaWN0KQoreworICBpbmZvLT5jb2Rl ID0gR0VUX0NPREUgKHgpOworCisgIHN3aXRjaCAoaW5mby0+Y29kZSkKKyAg ICB7CisgICAgY2FzZSBSRUc6CisgICAgY2FzZSBTVUJSRUc6CisgICAgICBp bmZvLT50eXBlID0gU0NPUkVfQUREX1JFRzsKKyAgICAgIGluZm8tPnJlZyA9 IHg7CisgICAgICBpbmZvLT5vZmZzZXQgPSBjb25zdDBfcnR4OworICAgICAg cmV0dXJuIHNjb3JlX3ZhbGlkX2Jhc2VfcmVnaXN0ZXJfcCAoaW5mby0+cmVn LCBzdHJpY3QpOworICAgIGNhc2UgUExVUzoKKyAgICAgIGluZm8tPnR5cGUg PSBTQ09SRV9BRERfUkVHOworICAgICAgaW5mby0+cmVnID0gWEVYUCAoeCwg MCk7CisgICAgICBpbmZvLT5vZmZzZXQgPSBYRVhQICh4LCAxKTsKKyAgICAg IHJldHVybiAoc2NvcmVfdmFsaWRfYmFzZV9yZWdpc3Rlcl9wIChpbmZvLT5y ZWcsIHN0cmljdCkKKyAgICAgICAgICAgICAgJiYgR0VUX0NPREUgKGluZm8t Pm9mZnNldCkgPT0gQ09OU1RfSU5UCisgICAgICAgICAgICAgICYmIElNTV9J Tl9SQU5HRSAoSU5UVkFMIChpbmZvLT5vZmZzZXQpLCAxNSwgMSkpOworICAg IGNhc2UgUFJFX0RFQzoKKyAgICBjYXNlIFBPU1RfREVDOgorICAgIGNhc2Ug UFJFX0lOQzoKKyAgICBjYXNlIFBPU1RfSU5DOgorICAgICAgaWYgKEdFVF9N T0RFX1NJWkUgKG1vZGUpID4gR0VUX01PREVfU0laRSAoU0ltb2RlKSkKKyAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaW5mby0+dHlwZSA9IFNDT1JF X0FERF9SRUc7CisgICAgICBpbmZvLT5yZWcgPSBYRVhQICh4LCAwKTsKKyAg ICAgIGluZm8tPm9mZnNldCA9IEdFTl9JTlQgKEdFVF9NT0RFX1NJWkUgKG1v ZGUpKTsKKyAgICAgIHJldHVybiBzY29yZV92YWxpZF9iYXNlX3JlZ2lzdGVy X3AgKGluZm8tPnJlZywgc3RyaWN0KTsKKyAgICBjYXNlIENPTlNUX0lOVDoK KyAgICAgIGluZm8tPnR5cGUgPSBTQ09SRV9BRERfQ09OU1RfSU5UOworICAg ICAgcmV0dXJuIElNTV9JTl9SQU5HRSAoSU5UVkFMICh4KSwgMTUsIDEpOwor ICAgIGNhc2UgQ09OU1Q6CisgICAgY2FzZSBMQUJFTF9SRUY6CisgICAgY2Fz ZSBTWU1CT0xfUkVGOgorICAgICAgaW5mby0+dHlwZSA9IFNDT1JFX0FERF9T WU1CT0xJQzsKKyAgICAgIHJldHVybiAoc2NvcmVfc3ltYm9saWNfY29uc3Rh bnRfcCAoeCwgJmluZm8tPnN5bWJvbF90eXBlKQorICAgICAgICAgICAgICAm JiAoaW5mby0+c3ltYm9sX3R5cGUgPT0gU1lNQk9MX0dFTkVSQUwKKyAgICAg ICAgICAgICAgICAgIHx8IGluZm8tPnN5bWJvbF90eXBlID09IFNZTUJPTF9T TUFMTF9EQVRBKSk7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOwor ICAgIH0KK30KKwogLyogSW1wbGVtZW50IFRBUkdFVF9SRVRVUk5fSU5fTUVN T1JZLiAgSW4gUytjb3JlLAogICAgc21hbGwgc3RydWN0dXJlcyBhcmUgcmV0 dXJuZWQgaW4gYSByZWdpc3Rlci4KICAgIE9iamVjdHMgd2l0aCB2YXJ5aW5n IHNpemUgbXVzdCBzdGlsbCBiZSByZXR1cm5lZCBpbiBtZW1vcnkuICAqLwog c3RhdGljIGJvb2wKIHNjb3JlX3JldHVybl9pbl9tZW1vcnkgKGNvbnN0X3Ry ZWUgdHlwZSwgY29uc3RfdHJlZSBmbmRlY2wgQVRUUklCVVRFX1VOVVNFRCkK IHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0g ICAgcmV0dXJuIHNjb3JlN19yZXR1cm5faW5fbWVtb3J5ICh0eXBlLCBmbmRl Y2wpOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIHJl dHVybiAoKFRZUEVfTU9ERSAodHlwZSkgPT0gQkxLbW9kZSkKKyAgICAgICAg ICAgIHx8IChpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSkgPiAyICogVU5JVFNf UEVSX1dPUkQpCisgICAgICAgICAgICB8fCAoaW50X3NpemVfaW5fYnl0ZXMg KHR5cGUpID09IC0xKSk7CiB9CiAKLS8qIFJldHVybiBub256ZXJvIHdoZW4g YW4gYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgKi8K LXN0YXRpYyBib29sCi1zY29yZV9wYXNzX2J5X3JlZmVyZW5jZSAoQ1VNVUxB VElWRV9BUkdTICpjdW0gQVRUUklCVVRFX1VOVVNFRCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF90 cmVlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuYW1l ZCBBVFRSSUJVVEVfVU5VU0VEKQorLyogUmV0dXJuIGEgbGVnaXRpbWF0ZSBh ZGRyZXNzIGZvciBSRUcgKyBPRkZTRVQuICAqLworc3RhdGljIHJ0eAorc2Nv cmVfYWRkX29mZnNldCAocnR4IHJlZywgSE9TVF9XSURFX0lOVCBvZmZzZXQp CiB7Ci0gIC8qIElmIHdlIGhhdmUgYSB2YXJpYWJsZS1zaXplZCBwYXJhbWV0 ZXIsIHdlIGhhdmUgbm8gY2hvaWNlLiAgKi8KLSAgcmV0dXJuIHRhcmdldG0u Y2FsbHMubXVzdF9wYXNzX2luX3N0YWNrIChtb2RlLCB0eXBlKTsKKyAgaWYg KCFJTU1fSU5fUkFOR0UgKG9mZnNldCwgMTUsIDEpKQorICAgIHsKKyAgICAg IHJlZyA9IGV4cGFuZF9zaW1wbGVfYmlub3AgKEdFVF9NT0RFIChyZWcpLCBQ TFVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2lu dF9tb2RlIChvZmZzZXQgJiAweGZmZmZjMDAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9ERSAocmVn KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcsIE5V TEwsIDAsIE9QVEFCX1dJREVOKTsKKyAgICAgIG9mZnNldCAmPSAweDNmZmY7 CisgICAgfQorCisgIHJldHVybiBwbHVzX2NvbnN0YW50IChyZWcsIG9mZnNl dCk7CiB9CiAKIC8qIEltcGxlbWVudCBUQVJHRVRfQVNNX09VVFBVVF9NSV9U SFVOSy4gIEdlbmVyYXRlIHJ0bCByYXRoZXIgdGhhbiBhc20gdGV4dApAQCAt MTgzLDg5ICs0OTUsMjc5IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEhP U1RfV0lERV9JTlQgZGVsdGEsIEhPU1RfV0lERV9JTlQgdmNhbGxfb2Zmc2V0 LAogICAgICAgICAgICAgICAgICAgICAgICB0cmVlIGZ1bmN0aW9uKQogewot ICBpZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICBz Y29yZTdfb3V0cHV0X21pX3RodW5rIChmaWxlLCB0aHVua19mbmRlY2wsIGRl bHRhLCB2Y2FsbF9vZmZzZXQsIGZ1bmN0aW9uKTsKKyAgcnR4IHRoaXNfcnR4 LCB0ZW1wMSwgaW5zbiwgZm5hZGRyOworCisgIC8qIFByZXRlbmQgdG8gYmUg YSBwb3N0LXJlbG9hZCBwYXNzIHdoaWxlIGdlbmVyYXRpbmcgcnRsLiAgKi8K KyAgcmVsb2FkX2NvbXBsZXRlZCA9IDE7CisKKyAgLyogTWFyayB0aGUgZW5k IG9mIHRoZSAoZW1wdHkpIHByb2xvZ3VlLiAgKi8KKyAgZW1pdF9ub3RlIChO T1RFX0lOU05fUFJPTE9HVUVfRU5EKTsKKworICAvKiBXZSBuZWVkIHR3byB0 ZW1wb3JhcnkgcmVnaXN0ZXJzIGluIHNvbWUgY2FzZXMuICAqLworICB0ZW1w MSA9IGdlbl9ydHhfUkVHIChQbW9kZSwgOCk7CisKKyAgLyogRmluZCBvdXQg d2hpY2ggcmVnaXN0ZXIgY29udGFpbnMgdGhlICJ0aGlzIiBwb2ludGVyLiAg Ki8KKyAgaWYgKGFnZ3JlZ2F0ZV92YWx1ZV9wIChUUkVFX1RZUEUgKFRSRUVf VFlQRSAoZnVuY3Rpb24pKSwgZnVuY3Rpb24pKQorICAgIHRoaXNfcnR4ID0g Z2VuX3J0eF9SRUcgKFBtb2RlLCBBUkdfUkVHX0ZJUlNUICsgMSk7CiAgIGVs c2UKLSAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgdGhpc19ydHggPSBn ZW5fcnR4X1JFRyAoUG1vZGUsIEFSR19SRUdfRklSU1QpOworCisgIC8qIEFk ZCBERUxUQSB0byBUSElTX1JUWC4gICovCisgIGlmIChkZWx0YSAhPSAwKQor ICAgIHsKKyAgICAgIHJ0eCBvZmZzZXQgPSBHRU5fSU5UIChkZWx0YSk7Cisg ICAgICBpZiAoIShkZWx0YSA+PSAtMzI3NjggJiYgZGVsdGEgPD0gMzI3Njcp KQorICAgICAgICB7CisgICAgICAgICAgZW1pdF9tb3ZlX2luc24gKHRlbXAx LCBvZmZzZXQpOworICAgICAgICAgIG9mZnNldCA9IHRlbXAxOworICAgICAg ICB9CisgICAgICBlbWl0X2luc24gKGdlbl9hZGQzX2luc24gKHRoaXNfcnR4 LCB0aGlzX3J0eCwgb2Zmc2V0KSk7CisgICAgfQorCisgIC8qIElmIG5lZWRl ZCwgYWRkICooKlRISVNfUlRYICsgVkNBTExfT0ZGU0VUKSB0byBUSElTX1JU WC4gICovCisgIGlmICh2Y2FsbF9vZmZzZXQgIT0gMCkKKyAgICB7CisgICAg ICBydHggYWRkcjsKKworICAgICAgLyogU2V0IFRFTVAxIHRvICpUSElTX1JU WC4gICovCisgICAgICBlbWl0X21vdmVfaW5zbiAodGVtcDEsIGdlbl9ydHhf TUVNIChQbW9kZSwgdGhpc19ydHgpKTsKKworICAgICAgLyogU2V0IEFERFIg dG8gYSBsZWdpdGltYXRlIGFkZHJlc3MgZm9yICpUSElTX1JUWCArIFZDQUxM X09GRlNFVC4gICovCisgICAgICBhZGRyID0gc2NvcmVfYWRkX29mZnNldCAo dGVtcDEsIHZjYWxsX29mZnNldCk7CisKKyAgICAgIC8qIExvYWQgdGhlIG9m ZnNldCBhbmQgYWRkIGl0IHRvIFRISVNfUlRYLiAgKi8KKyAgICAgIGVtaXRf bW92ZV9pbnNuICh0ZW1wMSwgZ2VuX3J0eF9NRU0gKFBtb2RlLCBhZGRyKSk7 CisgICAgICBlbWl0X2luc24gKGdlbl9hZGQzX2luc24gKHRoaXNfcnR4LCB0 aGlzX3J0eCwgdGVtcDEpKTsKKyAgICB9CisKKyAgLyogSnVtcCB0byB0aGUg dGFyZ2V0IGZ1bmN0aW9uLiAgKi8KKyAgZm5hZGRyID0gWEVYUCAoREVDTF9S VEwgKGZ1bmN0aW9uKSwgMCk7CisgIGluc24gPSBlbWl0X2NhbGxfaW5zbiAo Z2VuX3NpYmNhbGxfaW50ZXJuYWxfc2NvcmU3IChmbmFkZHIsIGNvbnN0MF9y dHgpKTsKKyAgU0lCTElOR19DQUxMX1AgKGluc24pID0gMTsKKworICAvKiBS dW4ganVzdCBlbm91Z2ggb2YgcmVzdF9vZl9jb21waWxhdGlvbi4gIFRoaXMg c2VxdWVuY2Ugd2FzCisgICAgICJib3Jyb3dlZCIgZnJvbSBhbHBoYS5jLiAg Ki8KKyAgaW5zbiA9IGdldF9pbnNucyAoKTsKKyAgaW5zbl9sb2NhdG9yc19h bGxvYyAoKTsKKyAgc3BsaXRfYWxsX2luc25zX25vZmxvdyAoKTsKKyAgc2hv cnRlbl9icmFuY2hlcyAoaW5zbik7CisgIGZpbmFsX3N0YXJ0X2Z1bmN0aW9u IChpbnNuLCBmaWxlLCAxKTsKKyAgZmluYWwgKGluc24sIGZpbGUsIDEpOwor ICBmaW5hbF9lbmRfZnVuY3Rpb24gKCk7CisKKyAgLyogQ2xlYW4gdXAgdGhl IHZhcnMgc2V0IGFib3ZlLiAgTm90ZSB0aGF0IGZpbmFsX2VuZF9mdW5jdGlv biByZXNldHMKKyAgICAgdGhlIGdsb2JhbCBwb2ludGVyIGZvciB1cy4gICov CisgIHJlbG9hZF9jb21wbGV0ZWQgPSAwOwogfQogCi0vKiBJbXBsZW1lbnQg VEFSR0VUX0ZVTkNUSU9OX09LX0ZPUl9TSUJDQUxMLiAgKi8KLXN0YXRpYyBi b29sCi1zY29yZV9mdW5jdGlvbl9va19mb3Jfc2liY2FsbCAoQVRUUklCVVRF X1VOVVNFRCB0cmVlIGRlY2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVRUUklCVVRFX1VOVVNFRCB0cmVlIGV4cCkKKy8qIENvcHkgVkFM VUUgdG8gYSByZWdpc3RlciBhbmQgcmV0dXJuIHRoYXQgcmVnaXN0ZXIuICBJ ZiBuZXcgcHN1ZWRvcworICAgYXJlIGFsbG93ZWQsIGNvcHkgaXQgaW50byBh IG5ldyByZWdpc3Rlciwgb3RoZXJ3aXNlIHVzZSBERVNULiAgKi8KK3N0YXRp YyBydHgKK3Njb3JlX2ZvcmNlX3RlbXBvcmFyeSAocnR4IGRlc3QsIHJ0eCB2 YWx1ZSkKIHsKLSAgcmV0dXJuIHRydWU7CisgIGlmIChjYW5fY3JlYXRlX3Bz ZXVkb19wICgpKQorICAgIHJldHVybiBmb3JjZV9yZWcgKFBtb2RlLCB2YWx1 ZSk7CisgIGVsc2UKKyAgICB7CisgICAgICBlbWl0X21vdmVfaW5zbiAoY29w eV9ydHggKGRlc3QpLCB2YWx1ZSk7CisgICAgICByZXR1cm4gZGVzdDsKKyAg ICB9CiB9CiAKKy8qIFJldHVybiBhIExPX1NVTSBleHByZXNzaW9uIGZvciBB RERSLiAgVEVNUCBpcyBhcyBmb3Igc2NvcmVfZm9yY2VfdGVtcG9yYXJ5Cisg ICBhbmQgaXMgdXNlZCB0byBsb2FkIHRoZSBoaWdoIHBhcnQgaW50byBhIHJl Z2lzdGVyLiAgKi8KK3N0YXRpYyBydHgKK3Njb3JlX3NwbGl0X3N5bWJvbCAo cnR4IHRlbXAsIHJ0eCBhZGRyKQoreworICBydHggaGlnaCA9IHNjb3JlX2Zv cmNlX3RlbXBvcmFyeSAodGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZW5fcnR4X0hJR0ggKFBtb2RlLCBjb3B5X3J0eCAo YWRkcikpKTsKKyAgcmV0dXJuIGdlbl9ydHhfTE9fU1VNIChQbW9kZSwgaGln aCwgYWRkcik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBp bXBsZW1lbnQgTEVHSVRJTUlaRV9BRERSRVNTLiAgSWYgWCBjYW4KKyAgIGJl IGxlZ2l0aW1pemVkIGluIGEgd2F5IHRoYXQgdGhlIGdlbmVyaWMgbWFjaGlu ZXJ5IG1pZ2h0IG5vdCBleHBlY3QsCisgICByZXR1cm4gdGhlIG5ldyBhZGRy ZXNzLiAgKi8KK3N0YXRpYyBydHgKK3Njb3JlX2xlZ2l0aW1pemVfYWRkcmVz cyAocnR4IHgpCit7CisgIGVudW0gc2NvcmVfc3ltYm9sX3R5cGUgc3ltYm9s X3R5cGU7CisKKyAgaWYgKHNjb3JlX3N5bWJvbGljX2NvbnN0YW50X3AgKHgs ICZzeW1ib2xfdHlwZSkKKyAgICAgICYmIHN5bWJvbF90eXBlID09IFNZTUJP TF9HRU5FUkFMKQorICAgIHJldHVybiBzY29yZV9zcGxpdF9zeW1ib2wgKDAs IHgpOworCisgIGlmIChHRVRfQ09ERSAoeCkgPT0gUExVUworICAgICAgJiYg R0VUX0NPREUgKFhFWFAgKHgsIDEpKSA9PSBDT05TVF9JTlQpCisgICAgewor ICAgICAgcnR4IHJlZyA9IFhFWFAgKHgsIDApOworICAgICAgaWYgKCFzY29y ZV92YWxpZF9iYXNlX3JlZ2lzdGVyX3AgKHJlZywgMCkpCisgICAgICAgIHJl ZyA9IGNvcHlfdG9fbW9kZV9yZWcgKFBtb2RlLCByZWcpOworICAgICAgcmV0 dXJuIHNjb3JlX2FkZF9vZmZzZXQgKHJlZywgSU5UVkFMIChYRVhQICh4LCAx KSkpOworICAgIH0KKworICByZXR1cm4geDsKK30KKworLyogRmlsbCBJTkZP IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgYXJndW1lbnQuICBD VU0gaXMgdGhlCisgICBjdW11bGF0aXZlIHN0YXRlIGZvciBlYXJsaWVyIGFy Z3VtZW50cy4gIE1PREUgaXMgdGhlIG1vZGUgb2YgdGhpcworICAgYXJndW1l bnQgYW5kIFRZUEUgaXMgaXRzIHR5cGUgKGlmIGtub3duKS4gIE5BTUVEIGlz IHRydWUgaWYgdGhpcworICAgaXMgYSBuYW1lZCAoZml4ZWQpIGFyZ3VtZW50 IHJhdGhlciB0aGFuIGEgdmFyaWFibGUgb25lLiAgKi8KK3N0YXRpYyB2b2lk CitzY29yZV9jbGFzc2lmeV9hcmcgKGNvbnN0IENVTVVMQVRJVkVfQVJHUyAq Y3VtLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorICAgICAgICAgICAgICAg ICAgICBjb25zdF90cmVlIHR5cGUsIGJvb2wgbmFtZWQsIHN0cnVjdCBzY29y ZV9hcmdfaW5mbyAqaW5mbykKK3sKKyAgaW50IGV2ZW5fcmVnX3A7CisgIHVu c2lnbmVkIGludCBudW1fd29yZHMsIG1heF9yZWdzOworCisgIGV2ZW5fcmVn X3AgPSAwOworICBpZiAoR0VUX01PREVfQ0xBU1MgKG1vZGUpID09IE1PREVf SU5UCisgICAgICB8fCBHRVRfTU9ERV9DTEFTUyAobW9kZSkgPT0gTU9ERV9G TE9BVCkKKyAgICBldmVuX3JlZ19wID0gKEdFVF9NT0RFX1NJWkUgKG1vZGUp ID4gVU5JVFNfUEVSX1dPUkQpOworICBlbHNlCisgICAgaWYgKHR5cGUgIT0g TlVMTF9UUkVFICYmIFRZUEVfQUxJR04gKHR5cGUpID4gQklUU19QRVJfV09S RCAmJiBuYW1lZCkKKyAgICAgIGV2ZW5fcmVnX3AgPSAxOworCisgIGlmIChU QVJHRVRfTVVTVF9QQVNTX0lOX1NUQUNLIChtb2RlLCB0eXBlKSkKKyAgICBp bmZvLT5yZWdfb2Zmc2V0ID0gQVJHX1JFR19OVU07CisgIGVsc2UKKyAgICB7 CisgICAgICBpbmZvLT5yZWdfb2Zmc2V0ID0gY3VtLT5udW1fZ3ByczsKKyAg ICAgIGlmIChldmVuX3JlZ19wKQorICAgICAgICBpbmZvLT5yZWdfb2Zmc2V0 ICs9IGluZm8tPnJlZ19vZmZzZXQgJiAxOworICAgIH0KKworICBpZiAobW9k ZSA9PSBCTEttb2RlKQorICAgIGluZm8tPm51bV9ieXRlcyA9IGludF9zaXpl X2luX2J5dGVzICh0eXBlKTsKKyAgZWxzZQorICAgIGluZm8tPm51bV9ieXRl cyA9IEdFVF9NT0RFX1NJWkUgKG1vZGUpOworCisgIG51bV93b3JkcyA9IChp bmZvLT5udW1fYnl0ZXMgKyBVTklUU19QRVJfV09SRCAtIDEpIC8gVU5JVFNf UEVSX1dPUkQ7CisgIG1heF9yZWdzID0gQVJHX1JFR19OVU0gLSBpbmZvLT5y ZWdfb2Zmc2V0OworCisgIC8qIFBhcnRpdGlvbiB0aGUgYXJndW1lbnQgYmV0 d2VlbiByZWdpc3RlcnMgYW5kIHN0YWNrLiAgKi8KKyAgaW5mby0+cmVnX3dv cmRzID0gTUlOIChudW1fd29yZHMsIG1heF9yZWdzKTsKKyAgaW5mby0+c3Rh Y2tfd29yZHMgPSBudW1fd29yZHMgLSBpbmZvLT5yZWdfd29yZHM7CisKKyAg LyogVGhlIGFsaWdubWVudCBhcHBsaWVkIHRvIHJlZ2lzdGVycyBpcyBhbHNv IGFwcGxpZWQgdG8gc3RhY2sgYXJndW1lbnRzLiAgKi8KKyAgaWYgKGluZm8t PnN0YWNrX3dvcmRzKQorICAgIHsKKyAgICAgIGluZm8tPnN0YWNrX29mZnNl dCA9IGN1bS0+c3RhY2tfd29yZHM7CisgICAgICBpZiAoZXZlbl9yZWdfcCkK KyAgICAgICAgaW5mby0+c3RhY2tfb2Zmc2V0ICs9IGluZm8tPnN0YWNrX29m ZnNldCAmIDE7CisgICAgfQorfQorCiAvKiBTZXQgdXAgdGhlIHN0YWNrIGFu ZCBmcmFtZSAoaWYgZGVzaXJlZCkgZm9yIHRoZSBmdW5jdGlvbi4gICovCiBz dGF0aWMgdm9pZAogc2NvcmVfZnVuY3Rpb25fcHJvbG9ndWUgKEZJTEUgKmZp bGUsIEhPU1RfV0lERV9JTlQgc2l6ZSBBVFRSSUJVVEVfVU5VU0VEKQogewot ICBpZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICBz Y29yZTdfZnVuY3Rpb25fcHJvbG9ndWUgKGZpbGUsIHNpemUpOwotICBlbHNl Ci0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICBjb25zdCBjaGFyICpmbm5h bWU7CisgIHN0cnVjdCBzY29yZV9mcmFtZV9pbmZvICpmID0gc2NvcmVfY2Fj aGVkX2ZyYW1lICgpOworICBIT1NUX1dJREVfSU5UIHRzaXplID0gZi0+dG90 YWxfc2l6ZTsKKworICBmbm5hbWUgPSBYU1RSIChYRVhQIChERUNMX1JUTCAo Y3VycmVudF9mdW5jdGlvbl9kZWNsKSwgMCksIDApOworICBpZiAoIWZsYWdf aW5oaWJpdF9zaXplX2RpcmVjdGl2ZSkKKyAgICB7CisgICAgICBmcHV0cyAo Ilx0LmVudFx0IiwgZmlsZSk7CisgICAgICBhc3NlbWJsZV9uYW1lIChmaWxl LCBmbm5hbWUpOworICAgICAgZnB1dHMgKCJcbiIsIGZpbGUpOworICAgIH0K KyAgYXNzZW1ibGVfbmFtZSAoZmlsZSwgZm5uYW1lKTsKKyAgZnB1dHMgKCI6 XG4iLCBmaWxlKTsKKworICBpZiAoIWZsYWdfaW5oaWJpdF9zaXplX2RpcmVj dGl2ZSkKKyAgICB7CisgICAgICBmcHJpbnRmIChmaWxlLAorICAgICAgICAg ICAgICAgIlx0LmZyYW1lXHQlcywiIEhPU1RfV0lERV9JTlRfUFJJTlRfREVD ICIsJXMsICVkXHRcdCIKKyAgICAgICAgICAgICAgICIjIHZhcnM9ICIgSE9T VF9XSURFX0lOVF9QUklOVF9ERUMgIiwgcmVncz0gJWQiCisgICAgICAgICAg ICAgICAiLCBhcmdzPSAiIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDCisgICAg ICAgICAgICAgICAiLCBncD0gIiBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyAi XG4iLAorICAgICAgICAgICAgICAgKHJlZ19uYW1lc1soZnJhbWVfcG9pbnRl cl9uZWVkZWQpCisgICAgICAgICAgICAgICAgPyBIQVJEX0ZSQU1FX1BPSU5U RVJfUkVHTlVNIDogU1RBQ0tfUE9JTlRFUl9SRUdOVU1dKSwKKyAgICAgICAg ICAgICAgIHRzaXplLAorICAgICAgICAgICAgICAgcmVnX25hbWVzW1JBX1JF R05VTV0sCisgICAgICAgICAgICAgICBjdXJyZW50X2Z1bmN0aW9uX2lzX2xl YWYgPyAxIDogMCwKKyAgICAgICAgICAgICAgIGYtPnZhcl9zaXplLAorICAg ICAgICAgICAgICAgZi0+bnVtX2dwLAorICAgICAgICAgICAgICAgZi0+YXJn c19zaXplLAorICAgICAgICAgICAgICAgZi0+Y3ByZXN0b3JlX3NpemUpOwor CisgICAgICBmcHJpbnRmKGZpbGUsICJcdC5tYXNrXHQweCUwOHgsIiBIT1NU X1dJREVfSU5UX1BSSU5UX0RFQyAiXG4iLAorICAgICAgICAgICAgICBmLT5t YXNrLAorICAgICAgICAgICAgICAoZi0+Z3Bfc3Bfb2Zmc2V0IC0gZi0+dG90 YWxfc2l6ZSkpOworICAgIH0KIH0KIAogLyogRG8gYW55IG5lY2Vzc2FyeSBj bGVhbnVwIGFmdGVyIGEgZnVuY3Rpb24gdG8gcmVzdG9yZSBzdGFjaywgZnJh bWUsCiAgICBhbmQgcmVncy4gICovCiBzdGF0aWMgdm9pZAotc2NvcmVfZnVu Y3Rpb25fZXBpbG9ndWUgKEZJTEUgKmZpbGUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgSE9TVF9XSURFX0lOVCBzaXplIEFUVFJJQlVURV9VTlVTRUQp CitzY29yZV9mdW5jdGlvbl9lcGlsb2d1ZSAoRklMRSAqZmlsZSwgSE9TVF9X SURFX0lOVCBzaXplIEFUVFJJQlVURV9VTlVTRUQpCiB7Ci0gIGlmIChUQVJH RVRfU0NPUkU3IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHNjb3JlN19mdW5j dGlvbl9lcGlsb2d1ZSAoZmlsZSwgc2l6ZSk7Ci0gIGVsc2UKLSAgICBnY2Nf dW5yZWFjaGFibGUgKCk7CisgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGly ZWN0aXZlKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmZubmFtZTsKKyAg ICAgIGZubmFtZSA9IFhTVFIgKFhFWFAgKERFQ0xfUlRMIChjdXJyZW50X2Z1 bmN0aW9uX2RlY2wpLCAwKSwgMCk7CisgICAgICBmcHV0cyAoIlx0LmVuZFx0 IiwgZmlsZSk7CisgICAgICBhc3NlbWJsZV9uYW1lIChmaWxlLCBmbm5hbWUp OworICAgICAgZnB1dHMgKCJcbiIsIGZpbGUpOworICAgIH0KIH0KIAotLyog SW1wbGVtZW50IFRBUkdFVF9TQ0hFRF9JU1NVRV9SQVRFLiAgKi8KLXN0YXRp YyBpbnQKLXNjb3JlX2lzc3VlX3JhdGUgKHZvaWQpCisvKiBSZXR1cm5zIHRy dWUgaWYgWCBjb250YWlucyBhIFNZTUJPTF9SRUYuICAqLworc3RhdGljIGJv b2wKK3Njb3JlX3N5bWJvbGljX2V4cHJlc3Npb25fcCAocnR4IHgpCiB7Ci0g IHJldHVybiAxOworICBpZiAoR0VUX0NPREUgKHgpID09IFNZTUJPTF9SRUYp CisgICAgcmV0dXJuIHRydWU7CisKKyAgaWYgKEdFVF9DT0RFICh4KSA9PSBD T05TVCkKKyAgICByZXR1cm4gc2NvcmVfc3ltYm9saWNfZXhwcmVzc2lvbl9w IChYRVhQICh4LCAwKSk7CisKKyAgaWYgKFVOQVJZX1AgKHgpKQorICAgIHJl dHVybiBzY29yZV9zeW1ib2xpY19leHByZXNzaW9uX3AgKFhFWFAgKHgsIDAp KTsKKworICBpZiAoQVJJVEhNRVRJQ19QICh4KSkKKyAgICByZXR1cm4gKHNj b3JlX3N5bWJvbGljX2V4cHJlc3Npb25fcCAoWEVYUCAoeCwgMCkpCisgICAg ICAgICAgICB8fCBzY29yZV9zeW1ib2xpY19leHByZXNzaW9uX3AgKFhFWFAg KHgsIDEpKSk7CisKKyAgcmV0dXJuIGZhbHNlOwogfQogCiAvKiBDaG9vc2Ug dGhlIHNlY3Rpb24gdG8gdXNlIGZvciB0aGUgY29uc3RhbnQgcnR4IGV4cHJl c3Npb24gWCB0aGF0IGhhcwogICAgbW9kZSBNT0RFLiAgKi8KIHN0YXRpYyBz ZWN0aW9uICoKLXNjb3JlX3NlbGVjdF9ydHhfc2VjdGlvbiAoZW51bSBtYWNo aW5lX21vZGUgbW9kZSwgcnR4IHgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYWxpZ24pCitzY29yZV9zZWxl Y3RfcnR4X3NlY3Rpb24gKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCB4 LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGFsaWduKQogewotICBpZiAoVEFS R0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICByZXR1cm4gc2Nv cmU3X3NlbGVjdF9ydHhfc2VjdGlvbiAobW9kZSwgeCwgYWxpZ24pOworICBp ZiAoR0VUX01PREVfU0laRSAobW9kZSkgPD0gU0NPUkVfU0RBVEFfTUFYKQor ICAgIHJldHVybiBnZXRfbmFtZWRfc2VjdGlvbiAoMCwgIi5zZGF0YSIsIDAp OworICBlbHNlIGlmIChmbGFnX3BpYyAmJiBzY29yZV9zeW1ib2xpY19leHBy ZXNzaW9uX3AgKHgpKQorICAgIHJldHVybiBnZXRfbmFtZWRfc2VjdGlvbiAo MCwgIi5kYXRhLnJlbC5ybyIsIDMpOwogICBlbHNlCi0gICAgZ2NjX3VucmVh Y2hhYmxlICgpOworICAgIHJldHVybiBtZXJnZWFibGVfY29uc3RhbnRfc2Vj dGlvbiAobW9kZSwgYWxpZ24sIDApOwogfQogCiAvKiBJbXBsZW1lbnQgVEFS R0VUX0lOX1NNQUxMX0RBVEFfUC4gICovCiBzdGF0aWMgYm9vbAogc2NvcmVf aW5fc21hbGxfZGF0YV9wIChjb25zdF90cmVlIGRlY2wpCiB7Ci0gIGlmIChU QVJHRVRfU0NPUkU3IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHJldHVybiBz Y29yZTdfaW5fc21hbGxfZGF0YV9wIChkZWNsKTsKLSAgZWxzZQotICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKLX0KKyAgSE9TVF9XSURFX0lOVCBzaXplOwog Ci0vKiBJbXBsZW1lbnQgVEFSR0VUX0FTTV9GSUxFX1NUQVJULiAgKi8KLXN0 YXRpYyB2b2lkCi1zY29yZV9hc21fZmlsZV9zdGFydCAodm9pZCkKLXsKLSAg aWYgKFRBUkdFVF9TQ09SRTdEKQotICAgIGZwcmludGYgKGFzbV9vdXRfZmls ZSwgIiMgU3VucGx1cyBTK2NvcmU3ZCAlcyByZXY9JXNcbiIsCi0gICAgICAg ICAgICAgVEFSR0VUX0xJVFRMRV9FTkRJQU4gPyAiZWwiIDogImViIiwgU0NP UkVfR0NDX1ZFUlNJT04pOwotICBlbHNlIGlmIChUQVJHRVRfU0NPUkU3KQot ICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIiMgU3VucGx1cyBTK2NvcmU3 ICVzIHJldj0lc1xuIiwKLSAgICAgICAgICAgICBUQVJHRVRfTElUVExFX0VO RElBTiA/ICJlbCIgOiAiZWIiLCBTQ09SRV9HQ0NfVkVSU0lPTik7Ci0gIGVs c2UKLSAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICIjIFN1bnBsdXMgUytj b3JlIHVua25vd24gJXMgcmV2PSVzXG4iLAotICAgICAgICAgICAgIFRBUkdF VF9MSVRUTEVfRU5ESUFOID8gImVsIiA6ICJlYiIsIFNDT1JFX0dDQ19WRVJT SU9OKTsKKyAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gU1RSSU5HX0NTVAor ICAgICAgfHwgVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMKQor ICAgIHJldHVybiBmYWxzZTsKIAotICBkZWZhdWx0X2ZpbGVfc3RhcnQgKCk7 Ci0KLSAgaWYgKGZsYWdfcGljKQotICAgIGZwcmludGYgKGFzbV9vdXRfZmls ZSwgIlx0LnNldCBwaWNcbiIpOworICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9 PSBWQVJfREVDTCAmJiBERUNMX1NFQ1RJT05fTkFNRSAoZGVjbCkgIT0gMCkK KyAgICB7CisgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgbmFtZSA9 IFRSRUVfU1RSSU5HX1BPSU5URVIgKERFQ0xfU0VDVElPTl9OQU1FIChkZWNs KSk7CisgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLnNkYXRhIikgIT0gMAor ICAgICAgICAgICYmIHN0cmNtcCAobmFtZSwgIi5zYnNzIikgIT0gMCkKKyAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICBpZiAoIURFQ0xfRVhURVJOQUwg KGRlY2wpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICBzaXpl ID0gaW50X3NpemVfaW5fYnl0ZXMgKFRSRUVfVFlQRSAoZGVjbCkpOworICBy ZXR1cm4gKHNpemUgPiAwICYmIHNpemUgPD0gU0NPUkVfU0RBVEFfTUFYKTsK IH0KIAogLyogSW1wbGVtZW50IFRBUkdFVF9BU01fRklMRV9FTkQuICBXaGVu IHVzaW5nIGFzc2VtYmxlciBtYWNyb3MsIGVtaXQKQEAgLTI3MywzOCArNzc1 LDIzIEBACiBzdGF0aWMgdm9pZAogc2NvcmVfYXNtX2ZpbGVfZW5kICh2b2lk KQogewotICBpZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkK LSAgICBzY29yZTdfYXNtX2ZpbGVfZW5kICgpOwotICBlbHNlCi0gICAgZ2Nj X3VucmVhY2hhYmxlICgpOwotfQotCi0jZGVmaW5lIE1BU0tfQUxMX0NQVV9C SVRTCShNQVNLX1NDT1JFNyB8IE1BU0tfU0NPUkU3RCkKLQotLyogSW1wbGVt ZW50IFRBUkdFVF9IQU5ETEVfT1BUSU9OLiAgKi8KLXN0YXRpYyBib29sCi1z Y29yZV9oYW5kbGVfb3B0aW9uIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMs Ci0JCSAgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCBBVFRSSUJV VEVfVU5VU0VELAotCQkgICAgIGNvbnN0IHN0cnVjdCBjbF9kZWNvZGVkX29w dGlvbiAqZGVjb2RlZCwKLQkJICAgICBsb2NhdGlvbl90IGxvYyBBVFRSSUJV VEVfVU5VU0VEKQotewotICBzaXplX3QgY29kZSA9IGRlY29kZWQtPm9wdF9p bmRleDsKLSAgaW50IHZhbHVlID0gZGVjb2RlZC0+dmFsdWU7Ci0KLSAgc3dp dGNoIChjb2RlKQorICB0cmVlIG5hbWVfdHJlZTsKKyAgc3RydWN0IGV4dGVy bl9saXN0ICpwOworICBpZiAoZXh0ZXJuX2hlYWQpCiAgICAgewotICAgIGNh c2UgT1BUX21zY29yZTdkOgotICAgICAgb3B0cy0+eF90YXJnZXRfZmxhZ3Mg Jj0gfihNQVNLX0FMTF9DUFVfQklUUyk7Ci0gICAgICBvcHRzLT54X3Rhcmdl dF9mbGFncyB8PSBNQVNLX1NDT1JFNyB8IE1BU0tfU0NPUkU3RDsKLSAgICAg IHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBPUFRfbWFyY2hfOgotICAgICAg b3B0cy0+eF90YXJnZXRfZmxhZ3MgJj0gfihNQVNLX0FMTF9DUFVfQklUUyk7 Ci0gICAgICBvcHRzLT54X3RhcmdldF9mbGFncyB8PSB2YWx1ZTsKLSAgICAg IHJldHVybiB0cnVlOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiB0 cnVlOworICAgICAgZnB1dHMgKCJcbiIsIGFzbV9vdXRfZmlsZSk7CisgICAg ICBmb3IgKHAgPSBleHRlcm5faGVhZDsgcCAhPSAwOyBwID0gcC0+bmV4dCkK KyAgICAgICAgeworICAgICAgICAgIG5hbWVfdHJlZSA9IGdldF9pZGVudGlm aWVyIChwLT5uYW1lKTsKKyAgICAgICAgICBpZiAoIVRSRUVfQVNNX1dSSVRU RU4gKG5hbWVfdHJlZSkKKyAgICAgICAgICAgICAgJiYgVFJFRV9TWU1CT0xf UkVGRVJFTkNFRCAobmFtZV90cmVlKSkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgVFJFRV9BU01fV1JJVFRFTiAobmFtZV90cmVlKSA9IDE7Cisg ICAgICAgICAgICAgIGZwdXRzICgiXHQuZXh0ZXJuXHQiLCBhc21fb3V0X2Zp bGUpOworICAgICAgICAgICAgICBhc3NlbWJsZV9uYW1lIChhc21fb3V0X2Zp bGUsIHAtPm5hbWUpOworICAgICAgICAgICAgICBmcHJpbnRmIChhc21fb3V0 X2ZpbGUsICIsICVkXG4iLCBwLT5zaXplKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQogICAgIH0KIH0KIApAQCAtMzEyLDI4ICs3OTksMzggQEAKIHN0 YXRpYyB2b2lkCiBzY29yZV9vcHRpb25fb3ZlcnJpZGUgKHZvaWQpCiB7Ci0g IGlmIChUQVJHRVRfU0NPUkU3IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHNj b3JlN19vcHRpb25fb3ZlcnJpZGUgKCk7CisgIGZsYWdfcGljID0gZmFsc2U7 CisgIHNjb3JlX3NkYXRhX21heCA9IFNDT1JFX0RFRkFVTFRfU0RBVEFfTUFY OworCiB9CiAKIC8qIEltcGxlbWVudCBSRUdOT19SRUdfQ0xBU1MgbWFjcm8u ICAqLwogaW50CiBzY29yZV9yZWdfY2xhc3MgKGludCByZWdubykKIHsKLSAg aWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0 dXJuIHNjb3JlN19yZWdfY2xhc3MgKHJlZ25vKTsKLSAgZWxzZQotICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKKyAgaW50IGM7CisgIGdjY19hc3NlcnQgKHJl Z25vID49IDAgJiYgcmVnbm8gPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpOwor CisgIGlmIChyZWdubyA9PSBGUkFNRV9QT0lOVEVSX1JFR05VTQorICAgICAg fHwgcmVnbm8gPT0gQVJHX1BPSU5URVJfUkVHTlVNKQorICAgIHJldHVybiBB TExfUkVHUzsKKworICBmb3IgKGMgPSAwOyBjIDwgTl9SRUdfQ0xBU1NFUzsg YysrKQorICAgIGlmIChURVNUX0hBUkRfUkVHX0JJVCAocmVnX2NsYXNzX2Nv bnRlbnRzW2NdLCByZWdubykpCisgICAgICByZXR1cm4gYzsKKworICByZXR1 cm4gTk9fUkVHUzsKIH0KIAogLyogSW1wbGVtZW50IFBSRUZFUlJFRF9SRUxP QURfQ0xBU1MgbWFjcm8uICAqLwogZW51bSByZWdfY2xhc3MKIHNjb3JlX3By ZWZlcnJlZF9yZWxvYWRfY2xhc3MgKHJ0eCB4IEFUVFJJQlVURV9VTlVTRUQs IGVudW0gcmVnX2NsYXNzIHJjbGFzcykKIHsKLSAgaWYgKFRBUkdFVF9TQ09S RTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNjb3JlN19wcmVm ZXJyZWRfcmVsb2FkX2NsYXNzICh4LCByY2xhc3MpOwotICBlbHNlCi0gICAg Z2NjX3VucmVhY2hhYmxlICgpOworICBpZiAocmVnX2NsYXNzX3N1YnNldF9w IChHMTZfUkVHUywgcmNsYXNzKSkKKyAgICByZXR1cm4gRzE2X1JFR1M7Cisg IGlmIChyZWdfY2xhc3Nfc3Vic2V0X3AgKEczMl9SRUdTLCByY2xhc3MpKQor ICAgIHJldHVybiBHMzJfUkVHUzsKKyAgcmV0dXJuIHJjbGFzczsKIH0KIAog LyogSW1wbGVtZW50IFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MKQEAg LTM0MywxMCArODQwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHggeCkKIHsKLSAg aWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0 dXJuIHNjb3JlN19zZWNvbmRhcnlfcmVsb2FkX2NsYXNzIChyY2xhc3MsIG1v ZGUsIHgpOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICBp bnQgcmVnbm8gPSAtMTsKKyAgaWYgKEdFVF9DT0RFICh4KSA9PSBSRUcgfHwg R0VUX0NPREUoeCkgPT0gU1VCUkVHKQorICAgIHJlZ25vID0gdHJ1ZV9yZWdu dW0gKHgpOworCisgIGlmICghR1JfUkVHX0NMQVNTX1AgKHJjbGFzcykpCisg ICAgcmV0dXJuIEdQX1JFR19QIChyZWdubykgPyBOT19SRUdTIDogRzMyX1JF R1M7CisgIHJldHVybiBOT19SRUdTOwogfQogCiAKQEAgLTM1NSwyMiArODU1 LDI1IEBACiBpbnQKIHNjb3JlX2hhcmRfcmVnbm9fbW9kZV9vayAodW5zaWdu ZWQgaW50IHJlZ25vLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQogewotICBp ZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICByZXR1 cm4gc2NvcmU3X2hhcmRfcmVnbm9fbW9kZV9vayAocmVnbm8sIG1vZGUpOwor ICBpbnQgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKG1vZGUpOworICBlbnVtIG1v ZGVfY2xhc3MgbWNsYXNzID0gR0VUX01PREVfQ0xBU1MgKG1vZGUpOworCisg IGlmIChtY2xhc3MgPT0gTU9ERV9DQykKKyAgICByZXR1cm4gcmVnbm8gPT0g Q0NfUkVHTlVNOworICBlbHNlIGlmIChyZWdubyA9PSBGUkFNRV9QT0lOVEVS X1JFR05VTQorICAgICAgICAgICB8fCByZWdubyA9PSBBUkdfUE9JTlRFUl9S RUdOVU0pCisgICAgcmV0dXJuIG1jbGFzcyA9PSBNT0RFX0lOVDsKKyAgZWxz ZSBpZiAoR1BfUkVHX1AgKHJlZ25vKSkKKyAgICAvKiAoKHJlZ25vIDw9IChH UF9SRUdfTEFTVC0gSEFSRF9SRUdOT19OUkVHUyAoZHVtbXksIG1vZGUpKSAr IDEpICAqLworICAgIHJldHVybiAhKHJlZ25vICYgMSkgfHwgKHNpemUgPD0g VU5JVFNfUEVSX1dPUkQpOworICBlbHNlIGlmIChDRV9SRUdfUCAocmVnbm8p KQorICAgIHJldHVybiAobWNsYXNzID09IE1PREVfSU5UCisgICAgICAgICAg ICAmJiAoKHNpemUgPD0gVU5JVFNfUEVSX1dPUkQpCisgICAgICAgICAgICAg ICAgfHwgKHJlZ25vID09IENFX1JFR19GSVJTVCAmJiBzaXplID09IDIgKiBV TklUU19QRVJfV09SRCkpKTsKICAgZWxzZQotICAgIGdjY191bnJlYWNoYWJs ZSAoKTsKKyAgICByZXR1cm4gKG1jbGFzcyA9PSBNT0RFX0lOVCkgJiYgKHNp emUgPD0gVU5JVFNfUEVSX1dPUkQpOwogfQogCi0vKiBXZSBjYW4gYWx3YXlz IGVsaW1pbmF0ZSB0byB0aGUgaGFyZCBmcmFtZSBwb2ludGVyLiAgV2UgY2Fu IGVsaW1pbmF0ZQotICAgdG8gdGhlIHN0YWNrIHBvaW50ZXIgdW5sZXNzIGEg ZnJhbWUgcG9pbnRlciBpcyBuZWVkZWQuICAqLwotCi1zdGF0aWMgYm9vbAot c2NvcmVfY2FuX2VsaW1pbmF0ZSAoY29uc3QgaW50IGZyb20gQVRUUklCVVRF X1VOVVNFRCwgY29uc3QgaW50IHRvKQotewotICByZXR1cm4gKHRvID09IEhB UkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0KLSAgICAgICAgICB8fCAodG8gID09 IFNUQUNLX1BPSU5URVJfUkVHTlVNICYmICFmcmFtZV9wb2ludGVyX25lZWRl ZCkpOwotfQotCiAvKiBJbXBsZW1lbnQgSU5JVElBTF9FTElNSU5BVElPTl9P RkZTRVQuICBGUk9NIGlzIGVpdGhlciB0aGUgZnJhbWUKICAgIHBvaW50ZXIg b3IgYXJndW1lbnQgcG9pbnRlci4gIFRPIGlzIGVpdGhlciB0aGUgc3RhY2sg cG9pbnRlciBvcgogICAgaGFyZCBmcmFtZSBwb2ludGVyLiAgKi8KQEAgLTM3 OCwzMiArODgxLDI5IEBACiBzY29yZV9pbml0aWFsX2VsaW1pbmF0aW9uX29m ZnNldCAoaW50IGZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHRvIEFUVFJJQlVURV9VTlVTRUQpCiB7Ci0gIGlmIChUQVJH RVRfU0NPUkU3IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHJldHVybiBzY29y ZTdfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGZyb20sIHRvKTsKLSAg ZWxzZQotICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgc3RydWN0IHNjb3Jl X2ZyYW1lX2luZm8gKmYgPSBzY29yZV9jb21wdXRlX2ZyYW1lX3NpemUgKGdl dF9mcmFtZV9zaXplICgpKTsKKyAgc3dpdGNoIChmcm9tKQorICAgIHsKKyAg ICBjYXNlIEFSR19QT0lOVEVSX1JFR05VTToKKyAgICAgIHJldHVybiBmLT50 b3RhbF9zaXplOworICAgIGNhc2UgRlJBTUVfUE9JTlRFUl9SRUdOVU06Cisg ICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3VucmVh Y2hhYmxlICgpOworICAgIH0KIH0KIAotLyogQXJndW1lbnQgc3VwcG9ydCBm dW5jdGlvbnMuICAqLwotCi0vKiBJbml0aWFsaXplIENVTVVMQVRJVkVfQVJH UyBmb3IgYSBmdW5jdGlvbi4gICovCi12b2lkCi1zY29yZV9pbml0X2N1bXVs YXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdTICpjdW0sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHJlZSBmbnR5cGUgQVRUUklCVVRFX1VOVVNF RCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHggbGlibmFtZSBB VFRSSUJVVEVfVU5VU0VEKQotewotICBtZW1zZXQgKGN1bSwgMCwgc2l6ZW9m IChDVU1VTEFUSVZFX0FSR1MpKTsKLX0KLQogLyogSW1wbGVtZW50IFRBUkdF VF9GVU5DVElPTl9BUkdfQURWQU5DRSBob29rLiAgKi8KIHN0YXRpYyB2b2lk CiBzY29yZV9mdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdT ICpjdW0sIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3RfdHJlZSB0eXBlLCBib29sIG5hbWVkKQog ewotICBpZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAg ICBzY29yZTdfZnVuY3Rpb25fYXJnX2FkdmFuY2UgKGN1bSwgbW9kZSwgdHlw ZSwgbmFtZWQpOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOwor ICBzdHJ1Y3Qgc2NvcmVfYXJnX2luZm8gaW5mbzsKKyAgc2NvcmVfY2xhc3Np ZnlfYXJnIChjdW0sIG1vZGUsIHR5cGUsIG5hbWVkLCAmaW5mbyk7CisgIGN1 bS0+bnVtX2dwcnMgPSBpbmZvLnJlZ19vZmZzZXQgKyBpbmZvLnJlZ193b3Jk czsKKyAgaWYgKGluZm8uc3RhY2tfd29yZHMgPiAwKQorICAgIGN1bS0+c3Rh Y2tfd29yZHMgPSBpbmZvLnN0YWNrX29mZnNldCArIGluZm8uc3RhY2tfd29y ZHM7CisgIGN1bS0+YXJnX251bWJlcisrOwogfQogCiAvKiBJbXBsZW1lbnQg VEFSR0VUX0FSR19QQVJUSUFMX0JZVEVTIG1hY3JvLiAgKi8KQEAgLTQxMSw4 NyArOTExLDEyMCBAQAogc2NvcmVfYXJnX3BhcnRpYWxfYnl0ZXMgKENVTVVM QVRJVkVfQVJHUyAqY3VtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gbWFjaGluZV9tb2RlIG1vZGUsIHRyZWUgdHlwZSwgYm9vbCBuYW1lZCkK IHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0g ICAgcmV0dXJuIHNjb3JlN19hcmdfcGFydGlhbF9ieXRlcyAoY3VtLCBtb2Rl LCB0eXBlLCBuYW1lZCk7Ci0gIGVsc2UKLSAgICBnY2NfdW5yZWFjaGFibGUg KCk7CisgIHN0cnVjdCBzY29yZV9hcmdfaW5mbyBpbmZvOworICBzY29yZV9j bGFzc2lmeV9hcmcgKGN1bSwgbW9kZSwgdHlwZSwgbmFtZWQsICZpbmZvKTsK KyAgcmV0dXJuIGluZm8uc3RhY2tfd29yZHMgPiAwID8gaW5mby5yZWdfd29y ZHMgKiBVTklUU19QRVJfV09SRCA6IDA7CiB9CiAKIC8qIEltcGxlbWVudCBU QVJHRVRfRlVOQ1RJT05fQVJHIGhvb2suICAqLwogc3RhdGljIHJ0eAotc2Nv cmVfZnVuY3Rpb25fYXJnIChDVU1VTEFUSVZFX0FSR1MgKmN1bSwgZW51bSBt YWNoaW5lX21vZGUgbW9kZSwKK3Njb3JlX2Z1bmN0aW9uX2FyZyAoY29uc3Qg Q1VNVUxBVElWRV9BUkdTICpjdW0sIGVudW0gbWFjaGluZV9tb2RlIG1vZGUs CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUgdHlwZSwgYm9vbCBu YW1lZCkKIHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JF N0QpCi0gICAgcmV0dXJuIHNjb3JlN19mdW5jdGlvbl9hcmcgKGN1bSwgbW9k ZSwgdHlwZSwgbmFtZWQpOworICBzdHJ1Y3Qgc2NvcmVfYXJnX2luZm8gaW5m bzsKKworICBpZiAobW9kZSA9PSBWT0lEbW9kZSB8fCAhbmFtZWQpCisgICAg cmV0dXJuIDA7CisKKyAgc2NvcmVfY2xhc3NpZnlfYXJnIChjdW0sIG1vZGUs IHR5cGUsIG5hbWVkLCAmaW5mbyk7CisKKyAgaWYgKGluZm8ucmVnX29mZnNl dCA9PSBBUkdfUkVHX05VTSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoIWlu Zm8uc3RhY2tfd29yZHMpCisgICAgcmV0dXJuIGdlbl9ydHhfUkVHIChtb2Rl LCBBUkdfUkVHX0ZJUlNUICsgaW5mby5yZWdfb2Zmc2V0KTsKICAgZWxzZQot ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB7CisgICAgICBydHggcmV0 ID0gZ2VuX3J0eF9QQVJBTExFTCAobW9kZSwgcnR2ZWNfYWxsb2MgKGluZm8u cmVnX3dvcmRzKSk7CisgICAgICB1bnNpZ25lZCBpbnQgaSwgcGFydF9vZmZz ZXQgPSAwOworICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8ucmVnX3dvcmRz OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBydHggcmVnOworICAgICAg ICAgIHJlZyA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIEFSR19SRUdfRklSU1Qg KyBpbmZvLnJlZ19vZmZzZXQgKyBpKTsKKyAgICAgICAgICBYVkVDRVhQIChy ZXQsIDAsIGkpID0gZ2VuX3J0eF9FWFBSX0xJU1QgKFNJbW9kZSwgcmVnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0VOX0lOVCAocGFydF9vZmZzZXQpKTsKKyAgICAgICAgICBwYXJ0 X29mZnNldCArPSBVTklUU19QRVJfV09SRDsKKyAgICAgICAgfQorICAgICAg cmV0dXJuIHJldDsKKyAgICB9CiB9CiAKIC8qIEltcGxlbWVudCBGVU5DVElP Tl9WQUxVRSBhbmQgTElCQ0FMTF9WQUxVRS4gIEZvciBub3JtYWwgY2FsbHMs CiAgICBWQUxUWVBFIGlzIHRoZSByZXR1cm4gdHlwZSBhbmQgTU9ERSBpcyBW T0lEbW9kZS4gIEZvciBsaWJjYWxscywKICAgIFZBTFRZUEUgaXMgbnVsbCBh bmQgTU9ERSBpcyB0aGUgbW9kZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8K IHJ0eAotc2NvcmVfZnVuY3Rpb25fdmFsdWUgKGNvbnN0X3RyZWUgdmFsdHlw ZSwgY29uc3RfdHJlZSBmdW5jIEFUVFJJQlVURV9VTlVTRUQsCi0gICAgICAg ICAgICAgICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSkKK3Njb3Jl X2Z1bmN0aW9uX3ZhbHVlIChjb25zdF90cmVlIHZhbHR5cGUsIGNvbnN0X3Ry ZWUgZnVuYywgZW51bSBtYWNoaW5lX21vZGUgbW9kZSkKIHsKLSAgaWYgKFRB UkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNj b3JlN19mdW5jdGlvbl92YWx1ZSAodmFsdHlwZSwgZnVuYywgbW9kZSk7Ci0g IGVsc2UKLSAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgIGlmICh2YWx0eXBl KQorICAgIHsKKyAgICAgIGludCB1bnNpZ25lZHA7CisgICAgICBtb2RlID0g VFlQRV9NT0RFICh2YWx0eXBlKTsKKyAgICAgIHVuc2lnbmVkcCA9IFRZUEVf VU5TSUdORUQgKHZhbHR5cGUpOworICAgICAgbW9kZSA9IHByb21vdGVfZnVu Y3Rpb25fbW9kZSAodmFsdHlwZSwgbW9kZSwgJnVuc2lnbmVkcCwgZnVuYywg MSk7CisgICAgfQorICByZXR1cm4gZ2VuX3J0eF9SRUcgKG1vZGUsIFJUX1JF R05VTSk7CiB9CiAKIC8qIEltcGxlbWVudCBUQVJHRVRfQVNNX1RSQU1QT0xJ TkVfVEVNUExBVEUuICAqLworCiBzdGF0aWMgdm9pZAogc2NvcmVfYXNtX3Ry YW1wb2xpbmVfdGVtcGxhdGUgKEZJTEUgKmYpCiB7Ci0gIGlmIChUQVJHRVRf U0NPUkU3IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHNjb3JlN19hc21fdHJh bXBvbGluZV90ZW1wbGF0ZSAoZik7Ci0gIGVsc2UKLSAgICBnY2NfdW5yZWFj aGFibGUgKCk7CisgIGZwcmludGYgKGYsICJcdC5zZXQgcjFcbiIpOworICBm cHJpbnRmIChmLCAiXHRtdiByMzEsIHIzXG4iKTsKKyAgZnByaW50ZiAoZiwg Ilx0YmwgbmV4dGluc25cbiIpOworICBmcHJpbnRmIChmLCAibmV4dGluc246 XG4iKTsKKyAgZnByaW50ZiAoZiwgIlx0bHcgcjEsIFtyMywgNio0LThdXG4i KTsKKyAgZnByaW50ZiAoZiwgIlx0bHcgcjIzLCBbcjMsIDYqNC00XVxuIik7 CisgIGZwcmludGYgKGYsICJcdG12IHIzLCByMzFcbiIpOworICBmcHJpbnRm IChmLCAiXHRiciEgcjFcbiIpOworICBmcHJpbnRmIChmLCAiXHRub3AhXG4i KTsKKyAgZnByaW50ZiAoZiwgIlx0LnNldCBub3IxXG4iKTsKIH0KIAogLyog SW1wbGVtZW50IFRBUkdFVF9UUkFNUE9MSU5FX0lOSVQuICAqLwogc3RhdGlj IHZvaWQKIHNjb3JlX3RyYW1wb2xpbmVfaW5pdCAocnR4IG1fdHJhbXAsIHRy ZWUgZm5kZWNsLCBydHggY2hhaW5fdmFsdWUpCiB7Ci0gIGlmICggVEFSR0VU X1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICBzY29yZTdfdHJhbXBv bGluZV9pbml0IChtX3RyYW1wLCBmbmRlY2wsIGNoYWluX3ZhbHVlKTsKLSAg ZWxzZSAgCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworI2RlZmluZSBDT0RF X1NJWkUgICAgICAgIChUUkFNUE9MSU5FX0lOU05TICogVU5JVFNfUEVSX1dP UkQpCisKKyAgcnR4IGZuYWRkciA9IFhFWFAgKERFQ0xfUlRMIChmbmRlY2wp LCAwKTsKKyAgcnR4IG1lbTsKKworICBlbWl0X2Jsb2NrX21vdmUgKG1fdHJh bXAsIGFzc2VtYmxlX3RyYW1wb2xpbmVfdGVtcGxhdGUgKCksCisJCSAgIEdF Tl9JTlQgKFRSQU1QT0xJTkVfU0laRSksIEJMT0NLX09QX05PUk1BTCk7CisK KyAgbWVtID0gYWRqdXN0X2FkZHJlc3MgKG1fdHJhbXAsIFNJbW9kZSwgQ09E RV9TSVpFKTsKKyAgZW1pdF9tb3ZlX2luc24gKG1lbSwgZm5hZGRyKTsKKyAg bWVtID0gYWRqdXN0X2FkZHJlc3MgKG1fdHJhbXAsIFNJbW9kZSwgQ09ERV9T SVpFICsgR0VUX01PREVfU0laRSAoU0ltb2RlKSk7CisgIGVtaXRfbW92ZV9p bnNuIChtZW0sIGNoYWluX3ZhbHVlKTsKKworI3VuZGVmIENPREVfU0laRQog fQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW1wbGVtZW50IFJF R19NT0RFX09LX0ZPUl9CQVNFX1AgbWFjcm8uICAqLwogaW50CiBzY29yZV9y ZWdub19tb2RlX29rX2Zvcl9iYXNlX3AgKGludCByZWdubywgaW50IHN0cmlj dCkKIHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0Qp Ci0gICAgcmV0dXJuIHNjb3JlN19yZWdub19tb2RlX29rX2Zvcl9iYXNlX3Ag KHJlZ25vLCBzdHJpY3QpOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxl ICgpOworICBpZiAocmVnbm8gPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSKQor ICAgIHsKKyAgICAgIGlmICghc3RyaWN0KQorICAgICAgICByZXR1cm4gMTsK KyAgICAgIHJlZ25vID0gcmVnX3JlbnVtYmVyW3JlZ25vXTsKKyAgICB9Cisg IGlmIChyZWdubyA9PSBBUkdfUE9JTlRFUl9SRUdOVU0KKyAgICAgIHx8IHJl Z25vID09IEZSQU1FX1BPSU5URVJfUkVHTlVNKQorICAgIHJldHVybiAxOwor ICByZXR1cm4gR1BfUkVHX1AgKHJlZ25vKTsKIH0KIAotLyogSW1wbGVtZW50 IFRBUkdFVF9MRUdJVElNSVpFX0FERFJFU1NfUC4gICovCisvKiBJbXBsZW1l bnQgVEFSR0VUX0xFR0lUSU1BVEVfQUREUkVTU19QIG1hY3JvLiAgKi8KIHN0 YXRpYyBib29sCiBzY29yZV9sZWdpdGltYXRlX2FkZHJlc3NfcCAoZW51bSBt YWNoaW5lX21vZGUgbW9kZSwgcnR4IHgsIGJvb2wgc3RyaWN0KQogewotICBp ZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICByZXR1 cm4gc2NvcmU3X2xlZ2l0aW1hdGVfYWRkcmVzc19wIChtb2RlLCB4LCBzdHJp Y3QpOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOwotfQorICBz dHJ1Y3Qgc2NvcmVfYWRkcmVzc19pbmZvIGFkZHI7CiAKLS8qIFRoaXMgZnVu Y3Rpb24gaXMgdXNlZCB0byBpbXBsZW1lbnQgTEVHSVRJTUlaRV9BRERSRVNT LiAgSWYgWCBjYW4KLSAgIGJlIGxlZ2l0aW1pemVkIGluIGEgd2F5IHRoYXQg dGhlIGdlbmVyaWMgbWFjaGluZXJ5IG1pZ2h0IG5vdCBleHBlY3QsCi0gICBy ZXR1cm4gdGhlIG5ldyBhZGRyZXNzLCBlbHNlIHJldHVybiBYLiAgKi8KLXN0 YXRpYyBydHgKLXNjb3JlX2xlZ2l0aW1pemVfYWRkcmVzcyAocnR4IHgsIHJ0 eCBvbGR4IEFUVFJJQlVURV9VTlVTRUQsCi0JCQkgIGVudW0gbWFjaGluZV9t b2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKLXsKLSAgaWYgKFRBUkdFVF9T Q09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNjb3JlN19s ZWdpdGltaXplX2FkZHJlc3MgKHgpOwotICBlbHNlCi0gICAgZ2NjX3VucmVh Y2hhYmxlICgpOworICByZXR1cm4gc2NvcmVfY2xhc3NpZnlfYWRkcmVzcyAo JmFkZHIsIG1vZGUsIHgsIHN0cmljdCk7CiB9CiAKIC8qIFJldHVybiBhIG51 bWJlciBhc3Nlc3NpbmcgdGhlIGNvc3Qgb2YgbW92aW5nIGEgcmVnaXN0ZXIg aW4gY2xhc3MKQEAgLTUwMCwyMSArMTAzMywyMjYgQEAKIHNjb3JlX3JlZ2lz dGVyX21vdmVfY29zdCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJV VEVfVU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJl Z19jbGFzcyBmcm9tLCBlbnVtIHJlZ19jbGFzcyB0bykKIHsKLSAgaWYgKFRB UkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNj b3JlN19yZWdpc3Rlcl9tb3ZlX2Nvc3QgKG1vZGUsIGZyb20sIHRvKTsKKyAg aWYgKEdSX1JFR19DTEFTU19QIChmcm9tKSkKKyAgICB7CisgICAgICBpZiAo R1JfUkVHX0NMQVNTX1AgKHRvKSkKKyAgICAgICAgcmV0dXJuIDI7CisgICAg ICBlbHNlIGlmIChTUF9SRUdfQ0xBU1NfUCAodG8pKQorICAgICAgICByZXR1 cm4gNDsKKyAgICAgIGVsc2UgaWYgKENQX1JFR19DTEFTU19QICh0bykpCisg ICAgICAgIHJldHVybiA1OworICAgICAgZWxzZSBpZiAoQ0VfUkVHX0NMQVNT X1AgKHRvKSkKKyAgICAgICAgcmV0dXJuIDY7CisgICAgfQorICBpZiAoR1Jf UkVHX0NMQVNTX1AgKHRvKSkKKyAgICB7CisgICAgICBpZiAoR1JfUkVHX0NM QVNTX1AgKGZyb20pKQorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGVsc2Ug aWYgKFNQX1JFR19DTEFTU19QIChmcm9tKSkKKyAgICAgICAgcmV0dXJuIDQ7 CisgICAgICBlbHNlIGlmIChDUF9SRUdfQ0xBU1NfUCAoZnJvbSkpCisgICAg ICAgIHJldHVybiA1OworICAgICAgZWxzZSBpZiAoQ0VfUkVHX0NMQVNTX1Ag KGZyb20pKQorICAgICAgICByZXR1cm4gNjsKKyAgICB9CisgIHJldHVybiAx MjsKK30KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25z IG5lZWRlZCB0byBsb2FkIGEgc3ltYm9sIG9mIHRoZQorICAgZ2l2ZW4gdHlw ZSBpbnRvIGEgcmVnaXN0ZXIuICAqLworc3RhdGljIGludAorc2NvcmVfc3lt Ym9sX2luc25zIChlbnVtIHNjb3JlX3N5bWJvbF90eXBlIHR5cGUpCit7Cisg IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgY2FzZSBTWU1CT0xfR0VORVJB TDoKKyAgICAgIHJldHVybiAyOworCisgICAgY2FzZSBTWU1CT0xfU01BTExf REFUQToKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICBnY2NfdW5yZWFj aGFibGUgKCk7Cit9CisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGluc3Ry dWN0aW9ucyBuZWVkZWQgdG8gbG9hZCBvciBzdG9yZSBhIHZhbHVlCisgICBv ZiBtb2RlIE1PREUgYXQgWC4gIFJldHVybiAwIGlmIFggaXNuJ3QgdmFsaWQg Zm9yIE1PREUuICAqLworc3RhdGljIGludAorc2NvcmVfYWRkcmVzc19pbnNu cyAocnR4IHgsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCit7CisgIHN0cnVj dCBzY29yZV9hZGRyZXNzX2luZm8gYWRkcjsKKyAgaW50IGZhY3RvcjsKKwor ICBpZiAobW9kZSA9PSBCTEttb2RlKQorICAgIGZhY3RvciA9IDE7CiAgIGVs c2UKLSAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgZmFjdG9yID0gKEdF VF9NT0RFX1NJWkUgKG1vZGUpICsgVU5JVFNfUEVSX1dPUkQgLSAxKSAvIFVO SVRTX1BFUl9XT1JEOworCisgIGlmIChzY29yZV9jbGFzc2lmeV9hZGRyZXNz ICgmYWRkciwgbW9kZSwgeCwgZmFsc2UpKQorICAgIHN3aXRjaCAoYWRkci50 eXBlKQorICAgICAgeworICAgICAgY2FzZSBTQ09SRV9BRERfUkVHOgorICAg ICAgY2FzZSBTQ09SRV9BRERfQ09OU1RfSU5UOgorICAgICAgICByZXR1cm4g ZmFjdG9yOworCisgICAgICBjYXNlIFNDT1JFX0FERF9TWU1CT0xJQzoKKyAg ICAgICAgcmV0dXJuIGZhY3RvciAqIHNjb3JlX3N5bWJvbF9pbnNucyAoYWRk ci5zeW1ib2xfdHlwZSk7CisgICAgICB9CisgIHJldHVybiAwOwogfQogCiAv KiBJbXBsZW1lbnQgVEFSR0VUX1JUWF9DT1NUUyBtYWNyby4gICovCiBib29s Ci1zY29yZV9ydHhfY29zdHMgKHJ0eCB4LCBpbnQgY29kZSwgaW50IG91dGVy X2NvZGUsIGludCAqdG90YWwsCi0JCSBib29sIHNwZWVkIEFUVFJJQlVURV9V TlVTRUQpCitzY29yZV9ydHhfY29zdHMgKHJ0eCB4LCBpbnQgY29kZSwgaW50 IG91dGVyX2NvZGUsIGludCAqdG90YWwsIGJvb2wgc3BlZWQgQVRUUklCVVRF X1VOVVNFRCkKIHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1ND T1JFN0QpCi0gICAgcmV0dXJuIHNjb3JlN19ydHhfY29zdHMgKHgsIGNvZGUs IG91dGVyX2NvZGUsIHRvdGFsLCBzcGVlZCk7Ci0gIGVsc2UKLSAgICBnY2Nf dW5yZWFjaGFibGUgKCk7CisgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSBH RVRfTU9ERSAoeCk7CisKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBj YXNlIENPTlNUX0lOVDoKKyAgICAgIGlmIChvdXRlcl9jb2RlID09IFNFVCkK KyAgICAgICAgeworICAgICAgICAgIGlmICgoKElOVFZBTCAoeCkgJiAweGZm ZmYpID09IDApIAorICAgICAgICAgICAgICB8fCAoSU5UVkFMICh4KSA+PSAt MzI3NjggJiYgSU5UVkFMICh4KSA8PSAzMjc2NykpCisgICAgICAgICAgICAq dG90YWwgPSBDT1NUU19OX0lOU05TICgxKTsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAqdG90YWwgPSBDT1NUU19OX0lOU05TICgyKTsKKyAgICAg ICAgfQorICAgICAgZWxzZSBpZiAob3V0ZXJfY29kZSA9PSBQTFVTIHx8IG91 dGVyX2NvZGUgPT0gTUlOVVMpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAo SU5UVkFMICh4KSA+PSAtODE5MiAmJiBJTlRWQUwgKHgpIDw9IDgxOTEpCisg ICAgICAgICAgICAqdG90YWwgPSAwOworICAgICAgICAgIGVsc2UgaWYgKCgo SU5UVkFMICh4KSAmIDB4ZmZmZikgPT0gMCkKKyAgICAgICAgICAgICAgICAg ICB8fCAoSU5UVkFMICh4KSA+PSAtMzI3NjggJiYgSU5UVkFMICh4KSA8PSAz Mjc2NykpCisgICAgICAgICAgICAqdG90YWwgPSAxOworICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDIpOwor ICAgICAgICB9CisgICAgICBlbHNlIGlmIChvdXRlcl9jb2RlID09IEFORCB8 fCBvdXRlcl9jb2RlID09IElPUikKKyAgICAgICAgeworICAgICAgICAgIGlm IChJTlRWQUwgKHgpID49IDAgJiYgSU5UVkFMICh4KSA8PSAxNjM4MykKKyAg ICAgICAgICAgICp0b3RhbCA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoKChJ TlRWQUwgKHgpICYgMHhmZmZmKSA9PSAwKQorICAgICAgICAgICAgICAgICAg IHx8IChJTlRWQUwgKHgpID49IDAgJiYgSU5UVkFMICh4KSA8PSA2NTUzNSkp CisgICAgICAgICAgICAqdG90YWwgPSAxOworICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDIpOworICAgICAg ICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAqdG90YWwg PSAwOworICAgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNh c2UgQ09OU1Q6CisgICAgY2FzZSBTWU1CT0xfUkVGOgorICAgIGNhc2UgTEFC RUxfUkVGOgorICAgIGNhc2UgQ09OU1RfRE9VQkxFOgorICAgICAgKnRvdGFs ID0gQ09TVFNfTl9JTlNOUyAoMik7CisgICAgICByZXR1cm4gdHJ1ZTsKKwor ICAgIGNhc2UgTUVNOgorICAgICAgeworICAgICAgICAvKiBJZiB0aGUgYWRk cmVzcyBpcyBsZWdpdGltYXRlLCByZXR1cm4gdGhlIG51bWJlciBvZgorICAg ICAgICAgICBpbnN0cnVjdGlvbnMgaXQgbmVlZHMsIG90aGVyd2lzZSB1c2Ug dGhlIGRlZmF1bHQgaGFuZGxpbmcuICAqLworICAgICAgICBpbnQgbiA9IHNj b3JlX2FkZHJlc3NfaW5zbnMgKFhFWFAgKHgsIDApLCBHRVRfTU9ERSAoeCkp OworICAgICAgICBpZiAobiA+IDApCisgICAgICAgICAgeworICAgICAgICAg ICAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAobiArIDEpOworICAgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgICB9CisKKyAgICBjYXNlIEZGUzoKKyAgICAgICp0b3Rh bCA9IENPU1RTX05fSU5TTlMgKDYpOworICAgICAgcmV0dXJuIHRydWU7CisK KyAgICBjYXNlIE5PVDoKKyAgICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMg KDEpOworICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIEFORDoKKyAg ICBjYXNlIElPUjoKKyAgICBjYXNlIFhPUjoKKyAgICAgIGlmIChtb2RlID09 IERJbW9kZSkKKyAgICAgICAgeworICAgICAgICAgICp0b3RhbCA9IENPU1RT X05fSU5TTlMgKDIpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICB9CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEFTSElGVDoK KyAgICBjYXNlIEFTSElGVFJUOgorICAgIGNhc2UgTFNISUZUUlQ6CisgICAg ICBpZiAobW9kZSA9PSBESW1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAq dG90YWwgPSBDT1NUU19OX0lOU05TICgoR0VUX0NPREUgKFhFWFAgKHgsIDEp KSA9PSBDT05TVF9JTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyA0IDogMTIpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEFCUzoK KyAgICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDQpOworICAgICAgcmV0 dXJuIHRydWU7CisKKyAgICBjYXNlIFBMVVM6CisgICAgY2FzZSBNSU5VUzoK KyAgICAgIGlmIChtb2RlID09IERJbW9kZSkKKyAgICAgICAgeworICAgICAg ICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDQpOworICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAqdG90YWwgPSBDT1NUU19O X0lOU05TICgxKTsKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBO RUc6CisgICAgICBpZiAobW9kZSA9PSBESW1vZGUpCisgICAgICAgIHsKKyAg ICAgICAgICAqdG90YWwgPSBDT1NUU19OX0lOU05TICg0KTsKKyAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNl OworCisgICAgY2FzZSBNVUxUOgorICAgICAgKnRvdGFsID0gb3B0aW1pemVf c2l6ZSA/IENPU1RTX05fSU5TTlMgKDIpIDogQ09TVFNfTl9JTlNOUyAoMTIp OworICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIERJVjoKKyAgICBj YXNlIE1PRDoKKyAgICBjYXNlIFVESVY6CisgICAgY2FzZSBVTU9EOgorICAg ICAgKnRvdGFsID0gb3B0aW1pemVfc2l6ZSA/IENPU1RTX05fSU5TTlMgKDIp IDogQ09TVFNfTl9JTlNOUyAoMzMpOworICAgICAgcmV0dXJuIHRydWU7CisK KyAgICBjYXNlIFNJR05fRVhURU5EOgorICAgIGNhc2UgWkVST19FWFRFTkQ6 CisgICAgICBzd2l0Y2ggKEdFVF9NT0RFIChYRVhQICh4LCAwKSkpCisgICAg ICAgIHsKKyAgICAgICAgY2FzZSBRSW1vZGU6CisgICAgICAgIGNhc2UgSElt b2RlOgorICAgICAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMCkpID09 IE1FTSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKnRvdGFsID0g Q09TVFNfTl9JTlNOUyAoMik7CisKKyAgICAgICAgICAgICAgaWYgKCFUQVJH RVRfTElUVExFX0VORElBTiAmJgorICAgICAgICAgICAgICAgICAgc2lkZV9l ZmZlY3RzX3AgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSkpCisgICAgICAgICAg ICAgICAgKnRvdGFsID0gMTAwOworICAgICAgICAgICAgfQorICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICp0b3RhbCA9IENPU1RTX05fSU5TTlMgKDEp OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAoMSk7CisgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworCisgICAg ZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIC8q IEltcGxlbWVudCBUQVJHRVRfQUREUkVTU19DT1NUIG1hY3JvLiAgKi8KQEAg LTUyMiwxMCArMTI2MCw3IEBACiBzY29yZV9hZGRyZXNzX2Nvc3QgKHJ0eCBh ZGRyLAogCQkgICAgYm9vbCBzcGVlZCBBVFRSSUJVVEVfVU5VU0VEKQogewot ICBpZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICBy ZXR1cm4gc2NvcmU3X2FkZHJlc3NfY29zdCAoYWRkcik7Ci0gIGVsc2UKLSAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CisgIHJldHVybiBzY29yZV9hZGRyZXNz X2luc25zIChhZGRyLCBTSW1vZGUpOwogfQogCiAvKiBJbXBsZW1lbnQgQVNN X09VVFBVVF9FWFRFUk5BTCBtYWNyby4gICovCkBAIC01MzMsMTAgKzEyNjgs MTcgQEAKIHNjb3JlX291dHB1dF9leHRlcm5hbCAoRklMRSAqZmlsZSBBVFRS SUJVVEVfVU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgICB0cmVlIGRl Y2wsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gIGlmIChUQVJHRVRfU0NPUkU3 IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHJldHVybiBzY29yZTdfb3V0cHV0 X2V4dGVybmFsIChmaWxlLCBkZWNsLCBuYW1lKTsKLSAgZWxzZQotICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKKyAgcmVnaXN0ZXIgc3RydWN0IGV4dGVybl9s aXN0ICpwOworCisgIGlmIChzY29yZV9pbl9zbWFsbF9kYXRhX3AgKGRlY2wp KQorICAgIHsKKyAgICAgIHAgPSBnZ2NfYWxsb2NfZXh0ZXJuX2xpc3QgKCk7 CisgICAgICBwLT5uZXh0ID0gZXh0ZXJuX2hlYWQ7CisgICAgICBwLT5uYW1l ID0gbmFtZTsKKyAgICAgIHAtPnNpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAo VFJFRV9UWVBFIChkZWNsKSk7CisgICAgICBleHRlcm5faGVhZCA9IHA7Cisg ICAgfQorICByZXR1cm4gMDsKIH0KIAogLyogSW1wbGVtZW50IFJFVFVSTl9B RERSX1JUWC4gIE5vdGUsIHdlIGRvIG5vdCBzdXBwb3J0IG1vdmluZwpAQCAt NTQ0LDQwICsxMjg2LDM2MyBAQAogcnR4CiBzY29yZV9yZXR1cm5fYWRkciAo aW50IGNvdW50LCBydHggZnJhbWUgQVRUUklCVVRFX1VOVVNFRCkKIHsKLSAg aWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0 dXJuIHNjb3JlN19yZXR1cm5fYWRkciAoY291bnQsIGZyYW1lKTsKLSAgZWxz ZQotICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgaWYgKGNvdW50ICE9IDAp CisgICAgcmV0dXJuIGNvbnN0MF9ydHg7CisgIHJldHVybiBnZXRfaGFyZF9y ZWdfaW5pdGlhbF92YWwgKFBtb2RlLCBSQV9SRUdOVU0pOwogfQogCiAvKiBJ bXBsZW1lbnQgUFJJTlRfT1BFUkFORCBtYWNyby4gICovCisvKiBTY29yZS1z cGVjaWZpYyBvcGVyYW5kIGNvZGVzOgorICAgJ1snICAgICAgICBwcmludCAu c2V0IG5vcjEgZGlyZWN0aXZlCisgICAnXScgICAgICAgIHByaW50IC5zZXQg cjEgZGlyZWN0aXZlCisgICAnVScgICAgICAgIHByaW50IGhpIHBhcnQgb2Yg YSBDT05TVF9JTlQgcnR4CisgICAnRScgICAgICAgIHByaW50IGxvZzIodikK KyAgICdGJyAgICAgICAgcHJpbnQgbG9nMih+dikKKyAgICdEJyAgICAgICAg cHJpbnQgU0Ztb2RlIGNvbnN0IGRvdWJsZQorICAgJ1MnICAgICAgICBzZWxl Y3RpdmVseSBwcmludCAiISIgaWYgb3BlcmFuZCBpcyAxNWJpdCBpbnN0cnVj dGlvbiBhY2Nlc3NpYmxlCisgICAnVicgICAgICAgIHByaW50ICJ2ISIgaWYg b3BlcmFuZCBpcyAxNWJpdCBpbnN0cnVjdGlvbiBhY2Nlc3NpYmxlLCBvciAi bGZoISIKKyAgICdMJyAgICAgICAgbG93ICBwYXJ0IG9mIERJbW9kZSByZWcg b3BlcmFuZAorICAgJ0gnICAgICAgICBoaWdoIHBhcnQgb2YgREltb2RlIHJl ZyBvcGVyYW5kCisgICAnQycgICAgICAgIHByaW50IHBhcnQgb2Ygb3Bjb2Rl IGZvciBhIGJyYW5jaCBjb25kaXRpb24uICAqLwogdm9pZAogc2NvcmVfcHJp bnRfb3BlcmFuZCAoRklMRSAqZmlsZSwgcnR4IG9wLCBpbnQgYykKIHsKLSAg aWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgc2Nv cmU3X3ByaW50X29wZXJhbmQgKGZpbGUsIG9wLCBjKTsKKyAgZW51bSBydHhf Y29kZSBjb2RlID0gVU5LTk9XTjsKKyAgaWYgKCFQUklOVF9PUEVSQU5EX1BV TkNUX1ZBTElEX1AgKGMpKQorICAgIGNvZGUgPSBHRVRfQ09ERSAob3ApOwor CisgIGlmIChjID09ICdbJykKKyAgICB7CisgICAgICBmcHJpbnRmIChmaWxl LCAiLnNldCByMVxuIik7CisgICAgfQorICBlbHNlIGlmIChjID09ICddJykK KyAgICB7CisgICAgICBmcHJpbnRmIChmaWxlLCAiXG5cdC5zZXQgbm9yMSIp OworICAgIH0KKyAgZWxzZSBpZiAoYyA9PSAnVScpCisgICAgeworICAgICAg Z2NjX2Fzc2VydCAoY29kZSA9PSBDT05TVF9JTlQpOworICAgICAgZnByaW50 ZiAoZmlsZSwgSE9TVF9XSURFX0lOVF9QUklOVF9IRVgsCisgICAgICAgICAg ICAgICAoSU5UVkFMIChvcCkgPj4gMTYpICYgMHhmZmZmKTsKKyAgICB9Cisg IGVsc2UgaWYgKGMgPT0gJ0QnKQorICAgIHsKKyAgICAgIGlmIChHRVRfQ09E RSAob3ApID09IENPTlNUX0RPVUJMRSkKKyAgICAgICAgeworICAgICAgICAg IHJ0eCB0ZW1wID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3ApOworICAgICAg ICAgIGdjY19hc3NlcnQgKEdFVF9NT0RFIChvcCkgPT0gU0Ztb2RlKTsKKyAg ICAgICAgICBmcHJpbnRmIChmaWxlLCBIT1NUX1dJREVfSU5UX1BSSU5UX0hF WCwgSU5UVkFMICh0ZW1wKSAmIDB4ZmZmZmZmZmYpOworICAgICAgICB9Cisg ICAgICBlbHNlCisgICAgICAgIG91dHB1dF9hZGRyX2NvbnN0IChmaWxlLCBv cCk7CisgICAgfQorICBlbHNlIGlmIChjID09ICdTJykKKyAgICB7CisgICAg ICBnY2NfYXNzZXJ0IChjb2RlID09IFJFRyk7CisgICAgICBpZiAoRzE2X1JF R19QIChSRUdOTyAob3ApKSkKKyAgICAgICAgZnByaW50ZiAoZmlsZSwgIiEi KTsKKyAgICB9CisgIGVsc2UgaWYgKGMgPT0gJ1YnKQorICAgIHsKKyAgICAg IGdjY19hc3NlcnQgKGNvZGUgPT0gUkVHKTsKKyAgICAgIGZwcmludGYgKGZp bGUsIEcxNl9SRUdfUCAoUkVHTk8gKG9wKSkgPyAidiEiIDogImxmaCEiKTsK KyAgICB9CisgIGVsc2UgaWYgKGMgPT0gJ0MnKQorICAgIHsKKyAgICAgIGVu dW0gbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoWEVYUCAob3AsIDAp KTsKKworICAgICAgc3dpdGNoIChjb2RlKQorICAgICAgICB7CisgICAgICAg IGNhc2UgRVE6IGZwdXRzICgiZXEiLCBmaWxlKTsgYnJlYWs7CisgICAgICAg IGNhc2UgTkU6IGZwdXRzICgibmUiLCBmaWxlKTsgYnJlYWs7CisgICAgICAg IGNhc2UgR1Q6IGZwdXRzICgiZ3QiLCBmaWxlKTsgYnJlYWs7CisgICAgICAg IGNhc2UgR0U6IGZwdXRzIChtb2RlICE9IENDbW9kZSA/ICJwbCIgOiAiZ2Ui LCBmaWxlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgTFQ6IGZwdXRzIChtb2Rl ICE9IENDbW9kZSA/ICJtaSIgOiAibHQiLCBmaWxlKTsgYnJlYWs7CisgICAg ICAgIGNhc2UgTEU6IGZwdXRzICgibGUiLCBmaWxlKTsgYnJlYWs7CisgICAg ICAgIGNhc2UgR1RVOiBmcHV0cyAoImd0dSIsIGZpbGUpOyBicmVhazsKKyAg ICAgICAgY2FzZSBHRVU6IGZwdXRzICgiY3MiLCBmaWxlKTsgYnJlYWs7Cisg ICAgICAgIGNhc2UgTFRVOiBmcHV0cyAoImNjIiwgZmlsZSk7IGJyZWFrOwor ICAgICAgICBjYXNlIExFVTogZnB1dHMgKCJsZXUiLCBmaWxlKTsgYnJlYWs7 CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgb3V0cHV0X29wZXJhbmRf bG9zc2FnZSAoImludmFsaWQgb3BlcmFuZCBmb3IgY29kZTogJyVjJyIsIGNv ZGUpOworICAgICAgICB9CisgICAgfQorICBlbHNlIGlmIChjID09ICdFJykK KyAgICB7CisgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGk7CisgICAg ICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBvdzJtYXNrID0gMTsKKyAgICAg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsOworCisgICAgICB2YWwgPSBJ TlRWQUwgKG9wKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQor ICAgICAgICB7CisgICAgICAgICAgaWYgKHZhbCA9PSBwb3cybWFzaykKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHBvdzJtYXNrIDw8PSAxOwor ICAgICAgICB9CisgICAgICBnY2NfYXNzZXJ0IChpIDwgMzIpOworICAgICAg ZnByaW50ZiAoZmlsZSwgSE9TVF9XSURFX0lOVF9QUklOVF9IRVgsIGkpOwor ICAgIH0KKyAgZWxzZSBpZiAoYyA9PSAnRicpCisgICAgeworICAgICAgdW5z aWduZWQgSE9TVF9XSURFX0lOVCBpOworICAgICAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCBwb3cybWFzayA9IDE7CisgICAgICB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIHZhbDsKKworICAgICAgdmFsID0gfklOVFZBTCAob3ApOworICAg ICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisgICAgICAgIHsKKyAgICAg ICAgICBpZiAodmFsID09IHBvdzJtYXNrKQorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgcG93Mm1hc2sgPDw9IDE7CisgICAgICAgIH0KKyAgICAg IGdjY19hc3NlcnQgKGkgPCAzMik7CisgICAgICBmcHJpbnRmIChmaWxlLCBI T1NUX1dJREVfSU5UX1BSSU5UX0hFWCwgaSk7CisgICAgfQorICBlbHNlIGlm IChjb2RlID09IFJFRykKKyAgICB7CisgICAgICBpbnQgcmVnbnVtID0gUkVH Tk8gKG9wKTsKKyAgICAgIGlmICgoYyA9PSAnSCcgJiYgIVdPUkRTX0JJR19F TkRJQU4pCisgICAgICAgICAgfHwgKGMgPT0gJ0wnICYmIFdPUkRTX0JJR19F TkRJQU4pKQorICAgICAgICByZWdudW0gKys7CisgICAgICBmcHJpbnRmIChm aWxlLCAiJXMiLCByZWdfbmFtZXNbcmVnbnVtXSk7CisgICAgfQogICBlbHNl Ci0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIHsKKyAgICAgIHN3aXRj aCAoY29kZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE1FTToKKyAgICAg ICAgICBzY29yZV9wcmludF9vcGVyYW5kX2FkZHJlc3MgKGZpbGUsIG9wKTsK KyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgb3ApOworICAgICAgICB9Cisg ICAgfQogfQogCiAvKiBJbXBsZW1lbnQgUFJJTlRfT1BFUkFORF9BRERSRVNT IG1hY3JvLiAgKi8KIHZvaWQKIHNjb3JlX3ByaW50X29wZXJhbmRfYWRkcmVz cyAoRklMRSAqZmlsZSwgcnR4IHgpCiB7Ci0gIGlmIChUQVJHRVRfU0NPUkU3 IHx8IFRBUkdFVF9TQ09SRTdEKQotICAgIHNjb3JlN19wcmludF9vcGVyYW5k X2FkZHJlc3MgKGZpbGUsIHgpOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hh YmxlICgpOworICBzdHJ1Y3Qgc2NvcmVfYWRkcmVzc19pbmZvIGFkZHI7Cisg IGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFICh4KTsKKyAgZW51bSBt YWNoaW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFICh4KTsKKworICBpZiAoY29k ZSA9PSBNRU0pCisgICAgeCA9IFhFWFAgKHgsIDApOworCisgIGlmIChzY29y ZV9jbGFzc2lmeV9hZGRyZXNzICgmYWRkciwgbW9kZSwgeCwgdHJ1ZSkpCisg ICAgeworICAgICAgc3dpdGNoIChhZGRyLnR5cGUpCisgICAgICAgIHsKKyAg ICAgICAgY2FzZSBTQ09SRV9BRERfUkVHOgorICAgICAgICAgIHsKKyAgICAg ICAgICAgIHN3aXRjaCAoYWRkci5jb2RlKQorICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIGNhc2UgUFJFX0RFQzoKKyAgICAgICAgICAgICAgICBm cHJpbnRmIChmaWxlLCAiWyVzLC0lbGRdKyIsIHJlZ19uYW1lc1tSRUdOTyAo YWRkci5yZWcpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTlRWQUwg KGFkZHIub2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgUE9TVF9ERUM6CisgICAgICAgICAgICAgICAgZnBy aW50ZiAoZmlsZSwgIlslc10rLC0lbGQiLCByZWdfbmFtZXNbUkVHTk8gKGFk ZHIucmVnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UVkFMIChh ZGRyLm9mZnNldCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBjYXNlIFBSRV9JTkM6CisgICAgICAgICAgICAgICAgZnByaW50 ZiAoZmlsZSwgIlslcywgJWxkXSsiLCByZWdfbmFtZXNbUkVHTk8gKGFkZHIu cmVnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UVkFMIChhZGRy Lm9mZnNldCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICBjYXNlIFBPU1RfSU5DOgorICAgICAgICAgICAgICAgIGZwcmludGYg KGZpbGUsICJbJXNdKywgJWxkIiwgcmVnX25hbWVzW1JFR05PIChhZGRyLnJl ZyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVFZBTCAoYWRkci5v ZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoSU5UVkFMKGFkZHIu b2Zmc2V0KSA9PSAwKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihmaWxl LCAiWyVzXSIsIHJlZ19uYW1lc1tSRUdOTyAoYWRkci5yZWcpXSk7CisgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZnByaW50Zihm aWxlLCAiWyVzLCAlbGRdIiwgcmVnX25hbWVzW1JFR05PIChhZGRyLnJlZyld LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRWQUwoYWRkci5vZmZz ZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh c2UgU0NPUkVfQUREX0NPTlNUX0lOVDoKKyAgICAgICAgY2FzZSBTQ09SRV9B RERfU1lNQk9MSUM6CisgICAgICAgICAgb3V0cHV0X2FkZHJfY29uc3QgKGZp bGUsIHgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K KyAgcHJpbnRfcnRsIChzdGRlcnIsIHgpOworICBnY2NfdW5yZWFjaGFibGUg KCk7CiB9CiAKIC8qIEltcGxlbWVudCBTRUxFQ1RfQ0NfTU9ERSBtYWNyby4g ICovCiBlbnVtIG1hY2hpbmVfbW9kZQogc2NvcmVfc2VsZWN0X2NjX21vZGUg KGVudW0gcnR4X2NvZGUgb3AsIHJ0eCB4LCBydHggeSkKIHsKLSAgaWYgKFRB UkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNj b3JlN19zZWxlY3RfY2NfbW9kZSAob3AsIHgsIHkpOworICBpZiAoKG9wID09 IEVRIHx8IG9wID09IE5FIHx8IG9wID09IExUIHx8IG9wID09IEdFKQorICAg ICAgJiYgeSA9PSBjb25zdDBfcnR4CisgICAgICAmJiBHRVRfTU9ERSAoeCkg PT0gU0ltb2RlKQorICAgIHsKKyAgICAgIHN3aXRjaCAoR0VUX0NPREUgKHgp KQorICAgICAgICB7CisgICAgICAgIGNhc2UgUExVUzoKKyAgICAgICAgY2Fz ZSBNSU5VUzoKKyAgICAgICAgY2FzZSBORUc6CisgICAgICAgIGNhc2UgQU5E OgorICAgICAgICBjYXNlIElPUjoKKyAgICAgICAgY2FzZSBYT1I6CisgICAg ICAgIGNhc2UgTk9UOgorICAgICAgICBjYXNlIEFTSElGVDoKKyAgICAgICAg Y2FzZSBMU0hJRlRSVDoKKyAgICAgICAgY2FzZSBBU0hJRlRSVDoKKyAgICAg ICAgICByZXR1cm4gQ0NfTlptb2RlOworCisgICAgICAgIGNhc2UgU0lHTl9F WFRFTkQ6CisgICAgICAgIGNhc2UgWkVST19FWFRFTkQ6CisgICAgICAgIGNh c2UgUk9UQVRFOgorICAgICAgICBjYXNlIFJPVEFURVJUOgorICAgICAgICAg IHJldHVybiAob3AgPT0gTFQgfHwgb3AgPT0gR0UpID8gQ0NfTm1vZGUgOiBD Q21vZGU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4g Q0Ntb2RlOworICAgICAgICB9CisgICAgfQorCisgIGlmICgob3AgPT0gRVEg fHwgb3AgPT0gTkUpCisgICAgICAmJiAoR0VUX0NPREUgKHkpID09IE5FRykK KyAgICAgICYmIHJlZ2lzdGVyX29wZXJhbmQgKFhFWFAgKHksIDApLCBTSW1v ZGUpCisgICAgICAmJiByZWdpc3Rlcl9vcGVyYW5kICh4LCBTSW1vZGUpKQor ICAgIHsKKyAgICAgIHJldHVybiBDQ19OWm1vZGU7CisgICAgfQorCisgIHJl dHVybiBDQ21vZGU7Cit9CisKKy8qIEdlbmVyYXRlIHRoZSBwcm9sb2d1ZSBp bnN0cnVjdGlvbnMgZm9yIGVudHJ5IGludG8gYSBTK2NvcmUgZnVuY3Rpb24u ICAqLwordm9pZAorc2NvcmVfcHJvbG9ndWUgKHZvaWQpCit7CisjZGVmaW5l IEVNSVRfUEwoX3J0eCkgICAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKF9y dHgpID0gMQorCisgIHN0cnVjdCBzY29yZV9mcmFtZV9pbmZvICpmID0gc2Nv cmVfY29tcHV0ZV9mcmFtZV9zaXplIChnZXRfZnJhbWVfc2l6ZSAoKSk7Cisg IEhPU1RfV0lERV9JTlQgc2l6ZTsKKyAgaW50IHJlZ25vOworCisgIHNpemUg PSBmLT50b3RhbF9zaXplIC0gZi0+Z3BfcmVnX3NpemU7CisKKyAgaWYgKGZs YWdfcGljKQorICAgIGVtaXRfaW5zbiAoZ2VuX2NwbG9hZF9zY29yZTcgKCkp OworCisgIGZvciAocmVnbm8gPSAoaW50KSBHUF9SRUdfTEFTVDsgcmVnbm8g Pj0gKGludCkgR1BfUkVHX0ZJUlNUOyByZWduby0tKQorICAgIHsKKyAgICAg IGlmIChCSVRTRVRfUCAoZi0+bWFzaywgcmVnbm8gLSBHUF9SRUdfRklSU1Qp KQorICAgICAgICB7CisgICAgICAgICAgcnR4IG1lbSA9IGdlbl9ydHhfTUVN IChTSW1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZW5fcnR4X1BSRV9ERUMgKFNJbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgpKTsK KyAgICAgICAgICBydHggcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVn bm8pOworICAgICAgICAgIGlmICghY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQor ICAgICAgICAgICAgTUVNX1JFQURPTkxZX1AgKG1lbSkgPSAxOworICAgICAg ICAgIEVNSVRfUEwgKGVtaXRfaW5zbiAoZ2VuX3B1c2hzaV9zY29yZTcgKG1l bSwgcmVnKSkpOworICAgICAgICB9CisgICAgfQorCisgIGlmIChzaXplID4g MCkKKyAgICB7CisgICAgICBydHggaW5zbjsKKworICAgICAgaWYgKHNpemUg Pj0gLTMyNzY4ICYmIHNpemUgPD0gMzI3NjcpCisgICAgICAgIEVNSVRfUEwg KGVtaXRfaW5zbiAoZ2VuX2FkZDNfaW5zbiAoc3RhY2tfcG9pbnRlcl9ydHgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhY2tfcG9pbnRlcl9ydHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0VOX0lOVCAoLXNpemUpKSkpOworICAgICAg ZWxzZQorICAgICAgICB7CisgICAgICAgICAgRU1JVF9QTCAoZW1pdF9tb3Zl X2luc24gKGdlbl9ydHhfUkVHIChQbW9kZSwgU0NPUkVfUFJPTE9HVUVfVEVN UF9SRUdOVU0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHRU5fSU5UIChzaXplKSkpOworICAgICAgICAgIEVNSVRfUEwgKGVtaXRf aW5zbgorICAgICAgICAgICAgICAgICAgIChnZW5fc3ViM19pbnNuIChzdGFj a19wb2ludGVyX3J0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RhY2tfcG9pbnRlcl9ydHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdlbl9ydHhfUkVHIChQbW9kZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDT1JF X1BST0xPR1VFX1RFTVBfUkVHTlVNKSkpKTsKKyAgICAgICAgfQorICAgICAg aW5zbiA9IGdldF9sYXN0X2luc24gKCk7CisgICAgICBSRUdfTk9URVMgKGlu c24pID0KKyAgICAgICAgYWxsb2NfRVhQUl9MSVNUIChSRUdfRlJBTUVfUkVM QVRFRF9FWFBSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ydHhf U0VUIChWT0lEbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdXNfY29uc3RhbnQgKHN0 YWNrX3BvaW50ZXJfcnR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtc2l6ZSkpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTk9URVMgKGluc24p KTsKKyAgICB9CisKKyAgaWYgKGZyYW1lX3BvaW50ZXJfbmVlZGVkKQorICAg IEVNSVRfUEwgKGVtaXRfbW92ZV9pbnNuIChoYXJkX2ZyYW1lX3BvaW50ZXJf cnR4LCBzdGFja19wb2ludGVyX3J0eCkpOworCisgIGlmIChmbGFnX3BpYyAm JiBmLT5jcHJlc3RvcmVfc2l6ZSkKKyAgICB7CisgICAgICBpZiAoZnJhbWVf cG9pbnRlcl9uZWVkZWQpCisgICAgICAgIGVtaXRfaW5zbiAoZ2VuX2NwcmVz dG9yZV91c2VfZnBfc2NvcmU3IChHRU5fSU5UIChzaXplIC0gZi0+Y3ByZXN0 b3JlX3NpemUpKSk7CisgICAgICBlbHNlCisgICAgICAgIGVtaXRfaW5zbiAo Z2VuX2NwcmVzdG9yZV91c2Vfc3Bfc2NvcmU3IChHRU5fSU5UIChzaXplIC0g Zi0+Y3ByZXN0b3JlX3NpemUpKSk7CisgICAgfQorCisjdW5kZWYgRU1JVF9Q TAorfQorCisvKiBHZW5lcmF0ZSB0aGUgZXBpbG9ndWUgaW5zdHJ1Y3Rpb25z IGluIGEgUytjb3JlIGZ1bmN0aW9uLiAgKi8KK3ZvaWQKK3Njb3JlX2VwaWxv Z3VlIChpbnQgc2liY2FsbF9wKQoreworICBzdHJ1Y3Qgc2NvcmVfZnJhbWVf aW5mbyAqZiA9IHNjb3JlX2NvbXB1dGVfZnJhbWVfc2l6ZSAoZ2V0X2ZyYW1l X3NpemUgKCkpOworICBIT1NUX1dJREVfSU5UIHNpemU7CisgIGludCByZWdu bzsKKyAgcnR4IGJhc2U7CisKKyAgc2l6ZSA9IGYtPnRvdGFsX3NpemUgLSBm LT5ncF9yZWdfc2l6ZTsKKworICBpZiAoIWZyYW1lX3BvaW50ZXJfbmVlZGVk KQorICAgIGJhc2UgPSBzdGFja19wb2ludGVyX3J0eDsKICAgZWxzZQotICAg IGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICBiYXNlID0gaGFyZF9mcmFtZV9w b2ludGVyX3J0eDsKKworICBpZiAoc2l6ZSkKKyAgICB7CisgICAgICBpZiAo c2l6ZSA+PSAtMzI3NjggJiYgc2l6ZSA8PSAzMjc2NykKKyAgICAgICAgZW1p dF9pbnNuIChnZW5fYWRkM19pbnNuIChiYXNlLCBiYXNlLCBHRU5fSU5UIChz aXplKSkpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZW1p dF9tb3ZlX2luc24gKGdlbl9ydHhfUkVHIChQbW9kZSwgU0NPUkVfRVBJTE9H VUVfVEVNUF9SRUdOVU0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBH RU5fSU5UIChzaXplKSk7CisgICAgICAgICAgZW1pdF9pbnNuIChnZW5fYWRk M19pbnNuIChiYXNlLCBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2VuX3J0eF9SRUcgKFBtb2RlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDT1JFX0VQ SUxPR1VFX1RFTVBfUkVHTlVNKSkpOworICAgICAgICB9CisgICAgfQorCisg IGlmIChiYXNlICE9IHN0YWNrX3BvaW50ZXJfcnR4KQorICAgIGVtaXRfbW92 ZV9pbnNuIChzdGFja19wb2ludGVyX3J0eCwgYmFzZSk7CisKKyAgaWYgKGNy dGwtPmNhbGxzX2VoX3JldHVybikKKyAgICBlbWl0X2luc24gKGdlbl9hZGQz X2luc24gKHN0YWNrX3BvaW50ZXJfcnR4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RhY2tfcG9pbnRlcl9ydHgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYKSk7CisK KyAgZm9yIChyZWdubyA9IChpbnQpIEdQX1JFR19GSVJTVDsgcmVnbm8gPD0g KGludCkgR1BfUkVHX0xBU1Q7IHJlZ25vKyspCisgICAgeworICAgICAgaWYg KEJJVFNFVF9QIChmLT5tYXNrLCByZWdubyAtIEdQX1JFR19GSVJTVCkpCisg ICAgICAgIHsKKyAgICAgICAgICBydHggbWVtID0gZ2VuX3J0eF9NRU0gKFNJ bW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9y dHhfUE9TVF9JTkMgKFNJbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgpKTsKKyAg ICAgICAgICBydHggcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVnbm8p OworCisgICAgICAgICAgaWYgKCFjcnRsLT5jYWxsc19laF9yZXR1cm4pCisg ICAgICAgICAgICBNRU1fUkVBRE9OTFlfUCAobWVtKSA9IDE7CisKKyAgICAg ICAgICBlbWl0X2luc24gKGdlbl9wb3BzaV9zY29yZTcgKHJlZywgbWVtKSk7 CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKCFzaWJjYWxsX3ApCisgICAg ZW1pdF9qdW1wX2luc24gKGdlbl9yZXR1cm5faW50ZXJuYWxfc2NvcmU3IChn ZW5fcnR4X1JFRyAoUG1vZGUsIFJBX1JFR05VTSkpKTsKIH0KIAogLyogUmV0 dXJuIHRydWUgaWYgWCBpcyBhIHN5bWJvbGljIGNvbnN0YW50IHRoYXQgY2Fu IGJlIGNhbGN1bGF0ZWQgaW4KQEAgLTU4NiwxNDMgKzE2NTEsNDExIEBACiBp bnQKIHNjb3JlX3N5bWJvbGljX2NvbnN0YW50X3AgKHJ0eCB4LCBlbnVtIHNj b3JlX3N5bWJvbF90eXBlICpzeW1ib2xfdHlwZSkKIHsKLSAgaWYgKFRBUkdF VF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNjb3Jl N19zeW1ib2xpY19jb25zdGFudF9wICh4LCBzeW1ib2xfdHlwZSk7CisgIEhP U1RfV0lERV9JTlQgb2Zmc2V0OworCisgIHNjb3JlX3NwbGl0X2NvbnN0ICh4 LCAmeCwgJm9mZnNldCk7CisgIGlmIChHRVRfQ09ERSAoeCkgPT0gU1lNQk9M X1JFRiB8fCBHRVRfQ09ERSAoeCkgPT0gTEFCRUxfUkVGKQorICAgICpzeW1i b2xfdHlwZSA9IHNjb3JlX2NsYXNzaWZ5X3N5bWJvbCAoeCk7CiAgIGVsc2UK LSAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgcmV0dXJuIDA7CisKKyAg aWYgKG9mZnNldCA9PSAwKQorICAgIHJldHVybiAxOworCisgIC8qIGlmIG9m ZnNldCA+IDE1Yml0LCBtdXN0IHJlbG9hZCAgKi8KKyAgaWYgKCFJTU1fSU5f UkFOR0UgKG9mZnNldCwgMTUsIDEpKQorICAgIHJldHVybiAwOworCisgIHN3 aXRjaCAoKnN5bWJvbF90eXBlKQorICAgIHsKKyAgICBjYXNlIFNZTUJPTF9H RU5FUkFMOgorICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBTWU1CT0xfU01B TExfREFUQToKKyAgICAgIHJldHVybiBzY29yZV9vZmZzZXRfd2l0aGluX29i amVjdF9wICh4LCBvZmZzZXQpOworICAgIH0KKyAgZ2NjX3VucmVhY2hhYmxl ICgpOwogfQogCi0vKiBHZW5lcmF0ZSB0aGUgcHJvbG9ndWUgaW5zdHJ1Y3Rp b25zIGZvciBlbnRyeSBpbnRvIGEgUytjb3JlIGZ1bmN0aW9uLiAgKi8KIHZv aWQKLXNjb3JlX3Byb2xvZ3VlICh2b2lkKQorc2NvcmVfbW92c2ljYyAocnR4 ICpvcHMpCiB7Ci0gIGlmIChUQVJHRVRfU0NPUkU3IHx8IFRBUkdFVF9TQ09S RTdEKQotICAgIHNjb3JlN19wcm9sb2d1ZSAoKTsKLSAgZWxzZQotICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKLX0KKyAgZW51bSBtYWNoaW5lX21vZGUgbW9k ZTsKIAotLyogR2VuZXJhdGUgdGhlIGVwaWxvZ3VlIGluc3RydWN0aW9ucyBp biBhIFMrY29yZSBmdW5jdGlvbi4gICovCi12b2lkCi1zY29yZV9lcGlsb2d1 ZSAoaW50IHNpYmNhbGxfcCkKLXsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwg VEFSR0VUX1NDT1JFN0QpCi0gICAgc2NvcmU3X2VwaWxvZ3VlIChzaWJjYWxs X3ApOwotICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICBtb2Rl ID0gc2NvcmVfc2VsZWN0X2NjX21vZGUgKEdFVF9DT0RFIChvcHNbMV0pLCBv cHNbMl0sIG9wc1szXSk7CisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKFZP SURtb2RlLCBnZW5fcnR4X1JFRyAobW9kZSwgQ0NfUkVHTlVNKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2VuX3J0eF9DT01QQVJFIChtb2RlLCBY RVhQIChvcHNbMV0sIDApLAorCQkJCQkgICBYRVhQIChvcHNbMV0sIDEpKSkp OwogfQogCiAvKiBDYWxsIGFuZCBzaWJjYWxsIHBhdHRlcm4gYWxsIG5lZWQg Y2FsbCB0aGlzIGZ1bmN0aW9uLiAgKi8KIHZvaWQKIHNjb3JlX2NhbGwgKHJ0 eCAqb3BzLCBib29sIHNpYikKIHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwg VEFSR0VUX1NDT1JFN0QpCi0gICAgc2NvcmU3X2NhbGwgKG9wcywgc2liKTsK KyAgcnR4IGFkZHIgPSBYRVhQIChvcHNbMF0sIDApOworICBpZiAoIWNhbGxf aW5zbl9vcGVyYW5kIChhZGRyLCBWT0lEbW9kZSkpCisgICAgeworICAgICAg cnR4IG9hZGRyID0gYWRkcjsKKyAgICAgIGFkZHIgPSBnZW5fcmVnX3J0eCAo UG1vZGUpOworICAgICAgZ2VuX21vdmVfaW5zbiAoYWRkciwgb2FkZHIpOwor ICAgIH0KKworICBpZiAoc2liKQorICAgIGVtaXRfY2FsbF9pbnNuIChnZW5f c2liY2FsbF9pbnRlcm5hbF9zY29yZTcgKGFkZHIsIG9wc1sxXSkpOwogICBl bHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIGVtaXRfY2FsbF9p bnNuIChnZW5fY2FsbF9pbnRlcm5hbF9zY29yZTcgKGFkZHIsIG9wc1sxXSkp OwogfQogCiAvKiBDYWxsIHZhbHVlIGFuZCBzaWJjYWxsIHZhbHVlIHBhdHRl cm4gYWxsIG5lZWQgY2FsbCB0aGlzIGZ1bmN0aW9uLiAgKi8KIHZvaWQKIHNj b3JlX2NhbGxfdmFsdWUgKHJ0eCAqb3BzLCBib29sIHNpYikKIHsKLSAgaWYg KFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgc2NvcmU3 X2NhbGxfdmFsdWUgKG9wcywgc2liKTsKLSAgZWxzZQotICAgIGdjY191bnJl YWNoYWJsZSAoKTsKLX0KKyAgcnR4IHJlc3VsdCA9IG9wc1swXTsKKyAgcnR4 IGFkZHIgPSBYRVhQIChvcHNbMV0sIDApOworICBydHggYXJnID0gb3BzWzJd OwogCi12b2lkCi1zY29yZV9tb3ZzaWNjIChydHggKm9wcykKLXsKLSAgaWYg KFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgc2NvcmU3 X21vdnNpY2MgKG9wcyk7CisgIGlmICghY2FsbF9pbnNuX29wZXJhbmQgKGFk ZHIsIFZPSURtb2RlKSkKKyAgICB7CisgICAgICBydHggb2FkZHIgPSBhZGRy OworICAgICAgYWRkciA9IGdlbl9yZWdfcnR4IChQbW9kZSk7CisgICAgICBn ZW5fbW92ZV9pbnNuIChhZGRyLCBvYWRkcik7CisgICAgfQorCisgIGlmIChz aWIpCisgICAgZW1pdF9jYWxsX2luc24gKGdlbl9zaWJjYWxsX3ZhbHVlX2lu dGVybmFsX3Njb3JlNyAocmVzdWx0LCBhZGRyLCBhcmcpKTsKICAgZWxzZQot ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICBlbWl0X2NhbGxfaW5zbiAo Z2VuX2NhbGxfdmFsdWVfaW50ZXJuYWxfc2NvcmU3IChyZXN1bHQsIGFkZHIs IGFyZykpOwogfQogCiAvKiBNYWNoaW5lIFNwbGl0ICAqLwogdm9pZAogc2Nv cmVfbW92ZGkgKHJ0eCAqb3BzKQogewotICBpZiAoVEFSR0VUX1NDT1JFNyB8 fCBUQVJHRVRfU0NPUkU3RCkKLSAgICBzY29yZTdfbW92ZGkgKG9wcyk7Cisg IHJ0eCBkc3QgPSBvcHNbMF07CisgIHJ0eCBzcmMgPSBvcHNbMV07CisgIHJ0 eCBkc3QwID0gc2NvcmVfc3VidyAoZHN0LCAwKTsKKyAgcnR4IGRzdDEgPSBz Y29yZV9zdWJ3IChkc3QsIDEpOworICBydHggc3JjMCA9IHNjb3JlX3N1Yncg KHNyYywgMCk7CisgIHJ0eCBzcmMxID0gc2NvcmVfc3VidyAoc3JjLCAxKTsK KworICBpZiAoR0VUX0NPREUgKGRzdDApID09IFJFRyAmJiByZWdfb3Zlcmxh cF9tZW50aW9uZWRfcCAoZHN0MCwgc3JjKSkKKyAgICB7CisgICAgICBlbWl0 X21vdmVfaW5zbiAoZHN0MSwgc3JjMSk7CisgICAgICBlbWl0X21vdmVfaW5z biAoZHN0MCwgc3JjMCk7CisgICAgfQogICBlbHNlCi0gICAgZ2NjX3VucmVh Y2hhYmxlICgpOworICAgIHsKKyAgICAgIGVtaXRfbW92ZV9pbnNuIChkc3Qw LCBzcmMwKTsKKyAgICAgIGVtaXRfbW92ZV9pbnNuIChkc3QxLCBzcmMxKTsK KyAgICB9CiB9CiAKIHZvaWQKIHNjb3JlX3plcm9fZXh0cmFjdF9hbmRpIChy dHggKm9wcykKIHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwgVEFSR0VUX1ND T1JFN0QpCi0gICAgc2NvcmU3X3plcm9fZXh0cmFjdF9hbmRpIChvcHMpOwor ICBpZiAoSU5UVkFMIChvcHNbMV0pID09IDEgJiYgY29uc3RfdWltbTUgKG9w c1syXSwgU0ltb2RlKSkKKyAgICBlbWl0X2luc24gKGdlbl96ZXJvX2V4dHJh Y3RfYml0dHN0X3Njb3JlNyAob3BzWzBdLCBvcHNbMl0pKTsKICAgZWxzZQot ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB7CisgICAgICB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UIG1hc2s7CisgICAgICBtYXNrID0gKDB4ZmZmZmZm ZmZVICYgKCgxVSA8PCBJTlRWQUwgKG9wc1sxXSkpIC0gMVUpKTsKKyAgICAg IG1hc2sgPSBtYXNrIDw8IElOVFZBTCAob3BzWzJdKTsKKyAgICAgIGVtaXRf aW5zbiAoZ2VuX2FuZHNpM19jbXBfc2NvcmU3IChvcHNbM10sIG9wc1swXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9pbnRfbW9k ZSAobWFzaywgU0ltb2RlKSkpOworICAgIH0KIH0KIAotLyogT3V0cHV0IGFz bSBpbnNuIGZvciBtb3ZlLiAgKi8KLWNvbnN0IGNoYXIgKgotc2NvcmVfbW92 ZSAocnR4ICpvcHMpCisvKiBDaGVjayBhZGRyIGNvdWxkIGJlIHByZXNlbnQg YXMgUFJFL1BPU1QgbW9kZS4gICovCitzdGF0aWMgYm9vbAorc2NvcmVfcGlu ZGV4X21lbSAocnR4IGFkZHIpCiB7Ci0gIGlmIChUQVJHRVRfU0NPUkU3IHx8 IFRBUkdFVF9TQ09SRTdEKQotICAgIHJldHVybiBzY29yZTdfbW92ZSAob3Bz KTsKLSAgZWxzZQotICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgaWYgKEdF VF9DT0RFIChhZGRyKSA9PSBNRU0pCisgICAgeworICAgICAgc3dpdGNoIChH RVRfQ09ERSAoWEVYUCAoYWRkciwgMCkpKQorICAgICAgICB7CisgICAgICAg IGNhc2UgUFJFX0RFQzoKKyAgICAgICAgY2FzZSBQT1NUX0RFQzoKKyAgICAg ICAgY2FzZSBQUkVfSU5DOgorICAgICAgICBjYXNlIFBPU1RfSU5DOgorICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gZmFsc2U7 CiB9CiAKKy8qIE91dHB1dCBhc20gY29kZSBmb3IgbGQvc3cgaW5zbi4gICov CitzdGF0aWMgaW50CitzY29yZV9wcl9hZGRyX3Bvc3QgKHJ0eCAqb3BzLCBp bnQgaWRhdGEsIGludCBpYWRkciwgY2hhciAqaXAsIGVudW0gc2NvcmVfbWVt X3VuaXQgdW5pdCkKK3sKKyAgc3RydWN0IHNjb3JlX2FkZHJlc3NfaW5mbyBh aTsKKworICBnY2NfYXNzZXJ0IChHRVRfQ09ERSAob3BzW2lkYXRhXSkgPT0g UkVHKTsKKyAgZ2NjX2Fzc2VydCAoc2NvcmVfY2xhc3NpZnlfYWRkcmVzcyAo JmFpLCBTSW1vZGUsIFhFWFAgKG9wc1tpYWRkcl0sIDApLCB0cnVlKSk7CisK KyAgaWYgKCFzY29yZV9waW5kZXhfbWVtIChvcHNbaWFkZHJdKQorICAgICAg JiYgYWkudHlwZSA9PSBTQ09SRV9BRERfUkVHCisgICAgICAmJiBHRVRfQ09E RSAoYWkub2Zmc2V0KSA9PSBDT05TVF9JTlQKKyAgICAgICYmIEcxNl9SRUdf UCAoUkVHTk8gKG9wc1tpZGF0YV0pKQorICAgICAgJiYgRzE2X1JFR19QIChS RUdOTyAoYWkucmVnKSkpCisgICAgeworICAgICAgaWYgKElOVFZBTCAoYWku b2Zmc2V0KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgb3BzW2lhZGRy XSA9IGFpLnJlZzsKKyAgICAgICAgICByZXR1cm4gc25wcmludGYgKGlwLCBJ TlNfQlVGX1NaLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiFcdCUl JWQsIFslJSVkXSIsIGlkYXRhLCBpYWRkcik7CisgICAgICAgIH0KKyAgICAg IGlmIChSRUdOTyAoYWkucmVnKSA9PSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVH TlVNKQorICAgICAgICB7CisgICAgICAgICAgSE9TVF9XSURFX0lOVCBvZmZz ZXQgPSBJTlRWQUwgKGFpLm9mZnNldCk7CisgICAgICAgICAgaWYgKFNDT1JF X0FMSUdOX1VOSVQgKG9mZnNldCwgdW5pdCkKKyAgICAgICAgICAgICAgJiYg KCgob2Zmc2V0ID4+IHVuaXQpID49IDApICYmICgob2Zmc2V0ID4+IHVuaXQp IDw9IDMxKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG9wc1tp YWRkcl0gPSBhaS5vZmZzZXQ7CisgICAgICAgICAgICAgIHJldHVybiBzbnBy aW50ZiAoaXAsIElOU19CVUZfU1osCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInAhXHQlJSVkLCAlJWMlZCIsIGlkYXRhLCBpYWRkcik7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBzbnBy aW50ZiAoaXAsIElOU19CVUZfU1osICJcdCUlJWQsICUlYSVkIiwgaWRhdGEs IGlhZGRyKTsKK30KKwogLyogT3V0cHV0IGFzbSBpbnNuIGZvciBsb2FkLiAg Ki8KIGNvbnN0IGNoYXIgKgogc2NvcmVfbGluc24gKHJ0eCAqb3BzLCBlbnVt IHNjb3JlX21lbV91bml0IHVuaXQsIGJvb2wgc2lnbikKIHsKLSAgaWYgKFRB UkdFVF9TQ09SRTcgfHwgVEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNj b3JlN19saW5zbiAob3BzLCB1bml0LCBzaWduKTsKKyAgY29uc3QgY2hhciAq cHJlX2luc1tdID0KKyAgICB7ImxidSIsICJsaHUiLCAibHciLCAiPz8iLCAi bGIiLCAibGgiLCAibHciLCAiPz8ifTsKKyAgY2hhciAqaXA7CisKKyAgc3Ry Y3B5IChzY29yZV9pbnMsIHByZV9pbnNbKHNpZ24gPyA0IDogMCkgKyB1bml0 XSk7CisgIGlwID0gc2NvcmVfaW5zICsgc3RybGVuIChzY29yZV9pbnMpOwor CisgIGlmICgoIXNpZ24gJiYgdW5pdCAhPSBTQ09SRV9IV09SRCkKKyAgICAg IHx8IChzaWduICYmIHVuaXQgIT0gU0NPUkVfQllURSkpCisgICAgc2NvcmVf cHJfYWRkcl9wb3N0IChvcHMsIDAsIDEsIGlwLCB1bml0KTsKICAgZWxzZQot ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICBzbnByaW50ZiAoaXAsIElO U19CVUZfU1osICJcdCUlMCwgJSVhMSIpOworCisgIHJldHVybiBzY29yZV9p bnM7CiB9CiAKIC8qIE91dHB1dCBhc20gaW5zbiBmb3Igc3RvcmUuICAqLwog Y29uc3QgY2hhciAqCiBzY29yZV9zaW5zbiAocnR4ICpvcHMsIGVudW0gc2Nv cmVfbWVtX3VuaXQgdW5pdCkKIHsKLSAgaWYgKFRBUkdFVF9TQ09SRTcgfHwg VEFSR0VUX1NDT1JFN0QpCi0gICAgcmV0dXJuIHNjb3JlN19zaW5zbiAob3Bz LCB1bml0KTsKLSAgZWxzZQotICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAg Y29uc3QgY2hhciAqcHJlX2luc1tdID0geyJzYiIsICJzaCIsICJzdyJ9Owor ICBjaGFyICppcDsKKworICBzdHJjcHkgKHNjb3JlX2lucywgcHJlX2luc1t1 bml0XSk7CisgIGlwID0gc2NvcmVfaW5zICsgc3RybGVuIChzY29yZV9pbnMp OworICBzY29yZV9wcl9hZGRyX3Bvc3QgKG9wcywgMSwgMCwgaXAsIHVuaXQp OworICByZXR1cm4gc2NvcmVfaW5zOwogfQogCiAvKiBPdXRwdXQgYXNtIGlu c24gZm9yIGxvYWQgaW1tZWRpYXRlLiAgKi8KIGNvbnN0IGNoYXIgKgogc2Nv cmVfbGltbSAocnR4ICpvcHMpCiB7Ci0gIGlmIChUQVJHRVRfU0NPUkU3IHx8 IFRBUkdFVF9TQ09SRTdEKQotICAgIHJldHVybiBzY29yZTdfbGltbSAob3Bz KTsKKyAgSE9TVF9XSURFX0lOVCB2OworCisgIGdjY19hc3NlcnQgKEdFVF9D T0RFIChvcHNbMF0pID09IFJFRyk7CisgIGdjY19hc3NlcnQgKEdFVF9DT0RF IChvcHNbMV0pID09IENPTlNUX0lOVCk7CisKKyAgdiA9IElOVFZBTCAob3Bz WzFdKTsKKyAgaWYgKEcxNl9SRUdfUCAoUkVHTk8gKG9wc1swXSkpICYmIElN TV9JTl9SQU5HRSAodiwgOCwgMCkpCisgICAgcmV0dXJuICJsZGl1IVx0JTAs ICVjMSI7CisgIGVsc2UgaWYgKElNTV9JTl9SQU5HRSAodiwgMTYsIDEpKQor ICAgIHJldHVybiAibGRpXHQlMCwgJWMxIjsKKyAgZWxzZSBpZiAoKHYgJiAw eGZmZmYpID09IDApCisgICAgcmV0dXJuICJsZGlzXHQlMCwgJVUxIjsKICAg ZWxzZQotICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICByZXR1cm4gImxp XHQlMCwgJWMxIjsKIH0KIAorLyogT3V0cHV0IGFzbSBpbnNuIGZvciBtb3Zl LiAgKi8KK2NvbnN0IGNoYXIgKgorc2NvcmVfbW92ZSAocnR4ICpvcHMpCit7 CisgIGdjY19hc3NlcnQgKEdFVF9DT0RFIChvcHNbMF0pID09IFJFRyk7Cisg IGdjY19hc3NlcnQgKEdFVF9DT0RFIChvcHNbMV0pID09IFJFRyk7CiAKKyAg aWYgKEcxNl9SRUdfUCAoUkVHTk8gKG9wc1swXSkpKQorICAgIHsKKyAgICAg IGlmIChHMTZfUkVHX1AgKFJFR05PIChvcHNbMV0pKSkKKyAgICAgICAgcmV0 dXJuICJtdiFcdCUwLCAlMSI7CisgICAgICBlbHNlCisgICAgICAgIHJldHVy biAibWxmaCFcdCUwLCAlMSI7CisgICAgfQorICBlbHNlIGlmIChHMTZfUkVH X1AgKFJFR05PIChvcHNbMV0pKSkKKyAgICByZXR1cm4gIm1oZmwhXHQlMCwg JTEiOworICBlbHNlCisgICAgcmV0dXJuICJtdlx0JTAsICUxIjsKK30KKwog LyogR2VuZXJhdGUgYWRkIGluc24uICAqLwogY29uc3QgY2hhciAqCiBzY29y ZV9zZWxlY3RfYWRkX2ltbSAocnR4ICpvcHMsIGJvb2wgc2V0X2NjKQogewot ICBpZiAoVEFSR0VUX1NDT1JFNyB8fCBUQVJHRVRfU0NPUkU3RCkKLSAgICBy ZXR1cm4gc2NvcmU3X3NlbGVjdF9hZGRfaW1tIChvcHMsIHNldF9jYyk7Cisg IEhPU1RfV0lERV9JTlQgdiA9IElOVFZBTCAob3BzWzJdKTsKKworICBnY2Nf YXNzZXJ0IChHRVRfQ09ERSAob3BzWzJdKSA9PSBDT05TVF9JTlQpOworICBn Y2NfYXNzZXJ0IChSRUdOTyAob3BzWzBdKSA9PSBSRUdOTyAob3BzWzFdKSk7 CisKKyAgaWYgKHNldF9jYyAmJiBHMTZfUkVHX1AgKFJFR05PIChvcHNbMF0p KSkKKyAgICB7CisgICAgICBpZiAodiA+IDAgJiYgSU1NX0lTX1BPV19PRl8y ICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgdiwgMCwgMTUpKQorICAgICAg ICB7CisgICAgICAgICAgb3BzWzJdID0gR0VOX0lOVCAoZmZzICh2KSAtIDEp OworICAgICAgICAgIHJldHVybiAiYWRkZWkhXHQlMCwgJWMyIjsKKyAgICAg ICAgfQorCisgICAgICBpZiAodiA8IDAgJiYgSU1NX0lTX1BPV19PRl8yICgo dW5zaWduZWQgSE9TVF9XSURFX0lOVCkgKC12KSwgMCwgMTUpKQorICAgICAg ICB7CisgICAgICAgICAgb3BzWzJdID0gR0VOX0lOVCAoZmZzICgtdikgLSAx KTsKKyAgICAgICAgICByZXR1cm4gInN1YmVpIVx0JTAsICVjMiI7CisgICAg ICAgIH0KKyAgICB9CisKKyAgaWYgKHNldF9jYykKKyAgICByZXR1cm4gImFk ZGkuY1x0JTAsICVjMiI7CiAgIGVsc2UKLSAgICBnY2NfdW5yZWFjaGFibGUg KCk7CisgICAgcmV0dXJuICJhZGRpXHQlMCwgJWMyIjsKIH0KIAogLyogT3V0 cHV0IGFyaXRoIGluc24uICAqLwogY29uc3QgY2hhciAqCiBzY29yZV9zZWxl Y3QgKHJ0eCAqb3BzLCBjb25zdCBjaGFyICppbnN0X3ByZSwKLSAgICAgICAg ICAgIGJvb2wgY29tbXUsIGNvbnN0IGNoYXIgKmxldHRlciwgYm9vbCBzZXRf Y2MpCisgICAgICAgICAgICAgIGJvb2wgY29tbXUsIGNvbnN0IGNoYXIgKmxl dHRlciwgYm9vbCBzZXRfY2MpCiB7Ci0gIGlmIChUQVJHRVRfU0NPUkU3IHx8 IFRBUkdFVF9TQ09SRTdEKQotICAgIHJldHVybiBzY29yZTdfc2VsZWN0IChv cHMsIGluc3RfcHJlLCBjb21tdSwgbGV0dGVyLCBzZXRfY2MpOworICBnY2Nf YXNzZXJ0IChHRVRfQ09ERSAob3BzWzBdKSA9PSBSRUcpOworICBnY2NfYXNz ZXJ0IChHRVRfQ09ERSAob3BzWzFdKSA9PSBSRUcpOworCisgIGlmIChzZXRf Y2MgJiYgRzE2X1JFR19QIChSRUdOTyAob3BzWzBdKSkKKyAgICAgICYmIChH RVRfQ09ERSAob3BzWzJdKSA9PSBSRUcgPyBHMTZfUkVHX1AgKFJFR05PIChv cHNbMl0pKSA6IDEpCisgICAgICAmJiBSRUdOTyAob3BzWzBdKSA9PSBSRUdO TyAob3BzWzFdKSkKKyAgICB7CisgICAgICBzbnByaW50ZiAoc2NvcmVfaW5z LCBJTlNfQlVGX1NaLCAiJXMhXHQlJTAsICUlJXMyIiwgaW5zdF9wcmUsIGxl dHRlcik7CisgICAgICByZXR1cm4gc2NvcmVfaW5zOworICAgIH0KKworICBp ZiAoY29tbXUgJiYgc2V0X2NjICYmIEcxNl9SRUdfUCAoUkVHTk8gKG9wc1sw XSkpCisgICAgICAmJiBHMTZfUkVHX1AgKFJFR05PIChvcHNbMV0pKQorICAg ICAgJiYgUkVHTk8gKG9wc1swXSkgPT0gUkVHTk8gKG9wc1syXSkpCisgICAg eworICAgICAgZ2NjX2Fzc2VydCAoR0VUX0NPREUgKG9wc1syXSkgPT0gUkVH KTsKKyAgICAgIHNucHJpbnRmIChzY29yZV9pbnMsIElOU19CVUZfU1osICIl cyFcdCUlMCwgJSUlczEiLCBpbnN0X3ByZSwgbGV0dGVyKTsKKyAgICAgIHJl dHVybiBzY29yZV9pbnM7CisgICAgfQorCisgIGlmIChzZXRfY2MpCisgICAg c25wcmludGYgKHNjb3JlX2lucywgSU5TX0JVRl9TWiwgIiVzLmNcdCUlMCwg JSUxLCAlJSVzMiIsIGluc3RfcHJlLCBsZXR0ZXIpOwogICBlbHNlCi0gICAg Z2NjX3VucmVhY2hhYmxlICgpOworICAgIHNucHJpbnRmIChzY29yZV9pbnMs IElOU19CVUZfU1osICIlc1x0JSUwLCAlJTEsICUlJXMyIiwgaW5zdF9wcmUs IGxldHRlcik7CisgIHJldHVybiBzY29yZV9pbnM7CiB9CiAKKy8qIFJldHVy biBub256ZXJvIHdoZW4gYW4gYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQgYnkg cmVmZXJlbmNlLiAgKi8KK3N0YXRpYyBib29sCitzY29yZV9wYXNzX2J5X3Jl ZmVyZW5jZSAoQ1VNVUxBVElWRV9BUkdTICpjdW0gQVRUUklCVVRFX1VOVVNF RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9k ZSBtb2RlLCBjb25zdF90cmVlIHR5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBuYW1lZCBBVFRSSUJVVEVfVU5VU0VEKQoreworICAvKiBJ ZiB3ZSBoYXZlIGEgdmFyaWFibGUtc2l6ZWQgcGFyYW1ldGVyLCB3ZSBoYXZl IG5vIGNob2ljZS4gICovCisgIHJldHVybiB0YXJnZXRtLmNhbGxzLm11c3Rf cGFzc19pbl9zdGFjayAobW9kZSwgdHlwZSk7Cit9CisKKy8qIEltcGxlbWVu dCBUQVJHRVRfRlVOQ1RJT05fT0tfRk9SX1NJQkNBTEwuICAqLworc3RhdGlj IGJvb2wKK3Njb3JlX2Z1bmN0aW9uX29rX2Zvcl9zaWJjYWxsIChBVFRSSUJV VEVfVU5VU0VEIHRyZWUgZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBVFRSSUJVVEVfVU5VU0VEIHRyZWUgZXhwKQoreworICByZXR1 cm4gdHJ1ZTsKK30KKworLyogSW1wbGVtZW50IFRBUkdFVF9TQ0hFRF9JU1NV RV9SQVRFLiAgKi8KK3N0YXRpYyBpbnQKK3Njb3JlX2lzc3VlX3JhdGUgKHZv aWQpCit7CisgIHJldHVybiAxOworfQorCisvKiBJbXBsZW1lbnQgVEFSR0VU X0FTTV9GSUxFX1NUQVJULiAgKi8KIHN0YXRpYyB2b2lkCitzY29yZV9hc21f ZmlsZV9zdGFydCAodm9pZCkKK3sKKyAgaWYgKFRBUkdFVF9TQ09SRTdEKQor ICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIiMgU3VucGx1cyBTK2NvcmU3 ZCAlcyByZXY9JXNcbiIsCisgICAgICAgICAgICAgVEFSR0VUX0xJVFRMRV9F TkRJQU4gPyAiZWwiIDogImViIiwgU0NPUkVfR0NDX1ZFUlNJT04pOworICBl bHNlIGlmIChUQVJHRVRfU0NPUkU3KQorICAgIGZwcmludGYgKGFzbV9vdXRf ZmlsZSwgIiMgU3VucGx1cyBTK2NvcmU3ICVzIHJldj0lc1xuIiwKKyAgICAg ICAgICAgICBUQVJHRVRfTElUVExFX0VORElBTiA/ICJlbCIgOiAiZWIiLCBT Q09SRV9HQ0NfVkVSU0lPTik7CisgIGVsc2UKKyAgICBmcHJpbnRmIChhc21f b3V0X2ZpbGUsICIjIFN1bnBsdXMgUytjb3JlIHVua25vd24gJXMgcmV2PSVz XG4iLAorICAgICAgICAgICAgIFRBUkdFVF9MSVRUTEVfRU5ESUFOID8gImVs IiA6ICJlYiIsIFNDT1JFX0dDQ19WRVJTSU9OKTsKKworICBkZWZhdWx0X2Zp bGVfc3RhcnQgKCk7CisKKyAgaWYgKGZsYWdfcGljKQorICAgIGZwcmludGYg KGFzbV9vdXRfZmlsZSwgIlx0LnNldCBwaWNcbiIpOworfQorCisjZGVmaW5l IE1BU0tfQUxMX0NQVV9CSVRTCShNQVNLX1NDT1JFNyB8IE1BU0tfU0NPUkU3 RCkKKworLyogSW1wbGVtZW50IFRBUkdFVF9IQU5ETEVfT1BUSU9OLiAgKi8K K3N0YXRpYyBib29sCitzY29yZV9oYW5kbGVfb3B0aW9uIChzaXplX3QgY29k ZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUgQVRUUklCVVRFX1VOVVNF RCkKK3sKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBjYXNlIE9QVF9t c2NvcmU3ZDoKKyAgICAgIHRhcmdldF9mbGFncyAmPSB+KE1BU0tfQUxMX0NQ VV9CSVRTKTsKKyAgICAgIHRhcmdldF9mbGFncyB8PSBNQVNLX1NDT1JFNyB8 IE1BU0tfU0NPUkU3RDsKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgY2Fz ZSBPUFRfbWFyY2hfOgorICAgICAgaWYgKHN0cmNtcCAoYXJnLCAic2NvcmU3 IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHRhcmdldF9mbGFncyAm PSB+KE1BU0tfQUxMX0NQVV9CSVRTKTsKKyAgICAgICAgICB0YXJnZXRfZmxh Z3MgfD0gTUFTS19TQ09SRTc7CisgICAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAic2NvcmU3 ZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICB0YXJnZXRfZmxhZ3Mg Jj0gfihNQVNLX0FMTF9DUFVfQklUUyk7CisgICAgICAgICAgdGFyZ2V0X2Zs YWdzIHw9IE1BU0tfU0NPUkU3IHwgTUFTS19TQ09SRTdEOworICAgICAgICAg IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAg IHJldHVybiBmYWxzZTsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4g dHJ1ZTsKKyAgICB9Cit9CisKKy8qIFdlIGNhbiBhbHdheXMgZWxpbWluYXRl IHRvIHRoZSBoYXJkIGZyYW1lIHBvaW50ZXIuICBXZSBjYW4gZWxpbWluYXRl CisgICB0byB0aGUgc3RhY2sgcG9pbnRlciB1bmxlc3MgYSBmcmFtZSBwb2lu dGVyIGlzIG5lZWRlZC4gICovCisKK3N0YXRpYyBib29sCitzY29yZV9jYW5f ZWxpbWluYXRlIChjb25zdCBpbnQgZnJvbSBBVFRSSUJVVEVfVU5VU0VELCBj b25zdCBpbnQgdG8pCit7CisgIHJldHVybiAodG8gPT0gSEFSRF9GUkFNRV9Q T0lOVEVSX1JFR05VTQorICAgICAgICAgIHx8ICh0byAgPT0gU1RBQ0tfUE9J TlRFUl9SRUdOVU0gJiYgIWZyYW1lX3BvaW50ZXJfbmVlZGVkKSk7Cit9CisK Ky8qIEFyZ3VtZW50IHN1cHBvcnQgZnVuY3Rpb25zLiAgKi8KKworLyogSW5p dGlhbGl6ZSBDVU1VTEFUSVZFX0FSR1MgZm9yIGEgZnVuY3Rpb24uICAqLwor dm9pZAorc2NvcmVfaW5pdF9jdW11bGF0aXZlX2FyZ3MgKENVTVVMQVRJVkVf QVJHUyAqY3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUg Zm50eXBlIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcnR4IGxpYm5hbWUgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAg bWVtc2V0IChjdW0sIDAsIHNpemVvZiAoQ1VNVUxBVElWRV9BUkdTKSk7Cit9 CisKK3N0YXRpYyB2b2lkCiBzY29yZV9jb25kaXRpb25hbF9yZWdpc3Rlcl91 c2FnZSAodm9pZCkKIHsKICAgIGlmICghZmxhZ19waWMpCg== --000e0cd332cadcac3e04a54411cd--