From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?6ams56OK?= Subject: [PATCH] patch for listing and reading files from qcow2-formated image file (for xen-4.1.2) Date: Fri, 28 Dec 2012 16:22:17 +0800 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=047d7b66f24b9af9a904d1e55c43 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com Cc: Ian Campbell List-Id: xen-devel@lists.xenproject.org --047d7b66f24b9af9a904d1e55c43 Content-Type: multipart/alternative; boundary=047d7b66f24b9af9a604d1e55c41 --047d7b66f24b9af9a604d1e55c41 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, The final effect is as follows: *[malei@xentest-4-1 Fri Dec 28 ~/honeypot/xen/xen-4.1.2]$ qemu-img-xen cat -f /1/boot.ini ~/vm-check.img * *[boot loader]* *timeout=3D30* *default=3Dmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS* *[operating systems]* *multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=3D"Microsoft Windows XP Professional" /noexecute=3Doptin /fastdetect* [malei@xentest-4-1 Fri Dec 28 ~/honeypot/xen/xen-4.1.2]$ qemu-img-xen ls -l -d /1/ ~/vm-check.img *=E3=80=90name size(bytes) dir? date create-time=E3=80=91* *AUTOEXEC.BAT 0 file 2010-12-22 17:30:37* *boot.ini 211 file 2010-12-23 01:24:41* *bootfont.bin 322730 file 2004-11-23 20:00:00* * * * * * * As you see above, the patch add two sub-commands for qemu-img-xen=EF=BC=9Ac= at and ls. For details in the patch, please check the attachment. --047d7b66f24b9af9a604d1e55c41 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi,
=C2=A0 =C2=A0 The final effect is as follows:
=C2=A0 =C2= =A0=C2=A0
[malei@xentest-4-1 Fri Dec 28 ~/honeypot/xen/xen-4.1.2]$ qemu-img-xen cat -f /1/boot.ini ~/vm-check.img=C2=A0
[boot loader]
timeout=3D30
defaul= t=3Dmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating= systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=3D&q= uot;Microsoft Windows XP Professional" /noexecute=3Doptin /fastdetect<= /b>

[malei@xentest-4-1 Fri Dec 28 ~/honeypot/xen/xen-4.1.2]= $ qemu-img-xen ls -l -d /1/ ~/vm-check.img=C2=A0
=E3=80=90name =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A0size(bytes) dir? =C2=A0 =C2=A0 =C2=A0date =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cr= eate-time=E3=80=91
AUTOEXEC.BAT 0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file 2010-12-22 =C2=A0 =C2=A0 =C2=A0 =C2= =A017:30:37
boot.ini <= /span>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0211 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file 2010-12-23 =C2=A0 =C2=A0 =C2=A0 =C2=A001:24:41
bootfont.bin =C2=A0322730 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file 2004-11-23 =C2=A0 =C2=A0 = =C2=A0 =C2=A020:00:00



As you see above, the patch add two sub-commands for qemu-img-xen=EF=BC= =9Acat and ls.

For details in the patch, please check th= e attachment.=C2=A0


--047d7b66f24b9af9a604d1e55c41-- --047d7b66f24b9af9a904d1e55c43 Content-Type: application/octet-stream; name="qemu-imgfs-for-qcow2.patch" Content-Disposition: attachment; filename="qemu-imgfs-for-qcow2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hb91vt6j0 ZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11 LXhlbi9kZWJ1Zy5jIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL2RlYnVnLmMKLS0t IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2RlYnVnLmMJMTk3MC0wMS0wMSAwNzow MDowMC4wMDAwMDAwMDAgKzA3MDAKKysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVu L2RlYnVnLmMJMjAxMi0xMi0yOCAxNjowMjo0MC45OTk5MzM5MjUgKzA4MDAKQEAgLTAsMCArMSwx ODIgQEAKKyNpbmNsdWRlPHRpbWUuaD4KKyNpbmNsdWRlPHN5cy9zdGF0Lmg+CisjaW5jbHVkZTxz dGRhcmcuaD4KKyNpbmNsdWRlPGZjbnRsLmg+CisjaW5jbHVkZSJkZWJ1Zy5oIgorI2luY2x1ZGUg PHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIEtCKHgpICAgICgoeCkq MTAyNCkKKworc3RhdGljIGludCBkYmdfdGVybSA9IDAsIGRiZ19maWxlID0gMCwgbG9nX2RheSA9 IDA7CitzdGF0aWMgRklMRSogZnBfbG9nID0gTlVMTDsKK3N0YXRpYyBjaGFyIGRpclsxMjhdPXsw LH0sIGZpbGVuYW1lWzE2MF07CitzdGF0aWMgdm9pZCBpbml0X2ZpbGVfcGF0aCh2b2lkKTsKK3N0 YXRpYyBjaGFyIHByaW50YnVmWzEwMjRdPXt9OworaW50IG1rZGlyX3JlY3Vyc2l2ZShjaGFyKiBw YXRoKTsKKworCit2b2lkIHByaW50X2Vycm9yKGNoYXIqIGZpbGUsIGNoYXIqIGZ1bmN0aW9uLCBp bnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50 IGk7CisKKyAgaWYoICFkYmdfdGVybSAmJiAhZGJnX2ZpbGUgKQorICAgIHJldHVybjsKKworICB2 YV9zdGFydChhcmdzLCBmbXQpOworICBpPXZzcHJpbnRmKCBwcmludGJ1ZiwgZm10LCBhcmdzICk7 CisgIHByaW50YnVmW2ldID0gMDsKKyAgdmFfZW5kKGFyZ3MpOworCisgIGlmKCBkYmdfdGVybSAp CisgICAgeworICAgICAgcHJpbnRmKCJbJXNdJXMoJWQpOlxuJXNcbiIsIGZpbGUsIGZ1bmN0aW9u LCBsaW5lLCBwcmludGJ1Zik7CisgICAgfQorCisgIGlmKCBkYmdfZmlsZSApCisgICAgeworICAg ICAgdGltZV90IHQgPSB0aW1lKCBOVUxMICk7CisgICAgICBzdHJ1Y3QgdG0qIHRtMSA9IGxvY2Fs dGltZSgmdCk7CisgICAgICBpZiggIXRtMSApIHJldHVybjsKKyAgICAgIC8vaWYoIHRtMS0+dG1f bWRheSAhPSBsb2dfZGF5ICkKKyAgICAgIHsKKwkvL2luaXRfZmlsZV9wYXRoKCk7CisgICAgICB9 CisgICAgICBjaGFyIHRtcFsxNl07CisgICAgICBzdHJmdGltZSggdG1wLCAxNSwgIiVYIiwgdG0x ICk7CisgICAgICBmcHJpbnRmKCBmcF9sb2csICIlcyBbJXNdJXMoJWQpOiAlc1xuIiwgdG1wLCBm aWxlLCBmdW5jdGlvbiwgbGluZSwgcHJpbnRidWYpOworICAgICAgZmZsdXNoKCBmcF9sb2cgKTsK KyAgICB9Cit9CisKK3N0YXRpYyBjaGFyKiBoZXhfc3RyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50 IGxlbiwgY2hhciogb3V0c3RyICkKK3sKKworICBjb25zdCBjaGFyICpzZXQgPSAiMDEyMzQ1Njc4 OWFiY2RlZiI7CisgIGNoYXIgKnRtcDsKKyAgdW5zaWduZWQgY2hhciAqZW5kOworICBpZiAobGVu ID4gMTAyNCkKKyAgICBsZW4gPSAxMDI0OworICBlbmQgPSBidWYgKyBsZW47CisgIHRtcCA9ICZv dXRzdHJbMF07CisgIHdoaWxlIChidWYgPCBlbmQpCisgICAgeworICAgICAgKnRtcCsrID0gc2V0 WyAoKmJ1ZikgPj4gNCBdOworICAgICAgKnRtcCsrID0gc2V0WyAoKmJ1ZikgJiAweEYgXTsKKyAg ICAgICp0bXArKyA9ICcgJzsKKyAgICAgIGJ1ZiArKzsKKyAgICB9CisgICp0bXAgPSAnXDAnOwor ICByZXR1cm4gb3V0c3RyOworfQorCit2b2lkIGhleF9kdW1wKCB1bnNpZ25lZCBjaGFyICogYnVm LCBpbnQgbGVuICkKK3sKKyAgY2hhciBzdHJbS0IoNCldOworICBpZiggZGJnX3Rlcm0gKQorICAg IHB1dHMoIGhleF9zdHIoIGJ1ZiwgbGVuLCBzdHIgKSApOworICBpZiggZGJnX2ZpbGUgKXsKKyAg ICBmcHV0cyggaGV4X3N0ciggYnVmLCBsZW4sIHN0ciApLCBmcF9sb2cgKTsKKyAgICBmcHJpbnRm KCBmcF9sb2csICJcbiIgKTsKKyAgICBmZmx1c2goIGZwX2xvZyApOworICB9CisgIC8vZnByaW50 Ziggc3RkZXJyLCBoZXhfc3RyKCBidWYsIGxlbiApICk7Cit9CisKK3ZvaWQgZGVidWdfdGVybV9v bigpCit7CisgIGRiZ190ZXJtID0gMTsKK30KKwordm9pZCBkZWJ1Z190ZXJtX29mZigpCit7Cisg IGRiZ190ZXJtID0gMDsKK30KKworCitpbnQgbWtkaXJfcmVjdXJzaXZlKCBjaGFyKiBwYXRoICkK K3sKKyAgY2hhciAqcDsKKworICBpZiggYWNjZXNzKCBwYXRoLCAwICkgPT0gMCApCisgICAgcmV0 dXJuIDA7CisKKyAgZm9yKCBwPXBhdGg7ICpwOyBwKysgKQorICAgIHsKKyAgICAgIGlmKCBwPnBh dGggJiYgKnAgPT0gJy8nICkKKwl7CisJICAqcCA9IDA7CisJICBpZiggYWNjZXNzKCBwYXRoLCAw ICkgIT0gMCApCisJICAgIHsKKyNpZmRlZiBfX1dJTjMyX18KKwkgICAgICBta2RpciggcGF0aCAp OworI2Vsc2UKKwkgICAgICBpZiggbWtkaXIoIHBhdGgsIFNfSVJXWFUgKSAhPSAwICkKKwkJcmV0 dXJuIC0xOworI2VuZGlmCisJICAgIH0KKwkgICpwID0gJy8nOworCX0KKyAgICB9CisjaWZkZWYg X19XSU4zMl9fCisgIHJldHVybiBta2RpciggcGF0aCApOworI2Vsc2UKKyAgcmV0dXJuIG1rZGly KCBwYXRoLCBTX0lSV1hVICk7CisjZW5kaWYKK30KKwordm9pZCBpbml0X2ZpbGVfcGF0aCgpCit7 CisgIGNoYXIgdG1wWzY0XTsKKyAgdGltZV90IHQgPSB0aW1lKCBOVUxMICk7CisgIHN0cnVjdCB0 bSogdG0xID0gbG9jYWx0aW1lKCZ0KTsKKyAgCisgIGlmKCAhdG0xICkKKyAgICB7CisgICAgICBw ZXJyb3IoImRlYnVnLmMgaW5pdF9maWxlX3BhdGg6IEVSUk9SIEdFVFRJTkcgU1lTVEVNIFRJTUUu Iik7CisgICAgfQorICBsb2dfZGF5ID0gdG0xLT50bV9tZGF5OworICBzdHJmdGltZSggdG1wLCA2 NCwgIi8lWS0lbS0lZC50eHQiLCB0bTEgKTsKKyAgCisgIGlmKCBhY2Nlc3MoIGRpciwgMCApIT0w ICkKKyAgICB7CisgICAgICAobWtkaXJfcmVjdXJzaXZlKCBkaXIgKTwwKSA/IHBlcnJvcigibWtk aXJfcmVjdXJzaXZlIGZhaWwhIVxuIikgOiAwOworICAgIH0KKyAgc3RyY3B5KCBmaWxlbmFtZSwg ZGlyICk7CisgIHN0cmNhdCggZmlsZW5hbWUsIHRtcCApOworICBpZiggZnBfbG9nICkKKyAgICBm Y2xvc2UoIGZwX2xvZyApOworICBmcF9sb2cgPSBmb3BlbiggZmlsZW5hbWUsICJ3IiApOworICBp ZihmcF9sb2cpCisgICAgeworICAgICAgZnByaW50ZihmcF9sb2csIj09PT09PT09PT09PT09PT09 PT09PT1MT0cgIFNUQVJUPT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgICAgIGZjbG9z ZShmcF9sb2cpOyAgZnBfbG9nPU5VTEw7CisgICAgICBmcF9sb2cgPSBmb3BlbiggZmlsZW5hbWUs ICJhKyIgKTsKKyAgICAgIE5VTEw9PWZwX2xvZyA/IHByaW50ZigiaW5pdF9maWxlX3BhdGgoKTpm b3BlbihhKykgZmFpbFxuIikgOiAwOworICAgIH0KK30KKwordm9pZCBkZWJ1Z19maWxlX29uKGNo YXIgKnBhdGgpCit7CisgIGlmKCBkYmdfZmlsZSApCisgICAgcmV0dXJuOworICBkZWJ1Z19zZXRf ZGlyKHBhdGgpOworICBpbml0X2ZpbGVfcGF0aCgpOworICBkYmdfZmlsZSA9IDE7Cit9CisKK3Zv aWQgZGVidWdfZmlsZV9vZmYoKQoreworICBpZiggIWRiZ19maWxlICkKKyAgICByZXR1cm47Cisg IGRiZ19maWxlID0gMDsKKyAgaWYoIGZwX2xvZyApCisgICAgZmNsb3NlKCBmcF9sb2cgKTsKK30K Kwordm9pZCBkZWJ1Z19zZXRfZGlyKGNoYXIqIHN0cikKK3sKKyAgc3RyY3B5KCBkaXIsIHN0ciAp OworfQorCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9l bXUtcWVtdS14ZW4vZGVidWcuaCB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9kZWJ1 Zy5oCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9kZWJ1Zy5oCTE5NzAtMDEt MDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1x ZW11LXhlbi9kZWJ1Zy5oCTIwMTItMTItMjggMTY6MDI6NDEuMDAwOTM0MzI3ICswODAwCkBAIC0w LDAgKzEsMzQgQEAKKyNpZm5kZWYgX0RFQlVHX0gKKyNkZWZpbmUgX0RFQlVHX0gKKworI2luY2x1 ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKwor Ly8jZGVmaW5lIFJFTEVBU0UKKworI2lmbmRlZiBSRUxFQVNFCisjZGVmaW5lIERCRyhhcmdzIC4u LikgXAorICBwcmludF9lcnJvciggKGNoYXIqKV9fRklMRV9fLCAoY2hhciopX19mdW5jX18sIF9f TElORV9fLCAjI2FyZ3MgKQorI2Vsc2UKKyNkZWZpbmUgREJHKGFyZ3MgLi4uKQkJCQkgIFwKKyAg ZG8JCQkJCQkgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCitmcHJpbnRmKGxvZ2ZpbGUsIiVzOjpbJXNdOjooJWQpOlxuIiwgICAgICAgICAg ICAgICAgXAorCShjaGFyKilfX0ZJTEVfXywgKGNoYXIqKV9fZnVuY19fLCBfX0xJTkVfXyk7ICAg ICAgXAorZnByaW50Zihsb2dmaWxlLCAjI2FyZ3MpOwlmcHJpbnRmKGxvZ2ZpbGUsICJcbiIpOwkg IFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAord2hpbGUoMCkKKy8vI2RlZmluZSBEQkcgcHJpbnRmCisjZW5kaWYKKyNkZWZpbmUgTVNHcHJp bnRmCit2b2lkIHByaW50X2Vycm9yKGNoYXIqIGZpbGUsIGNoYXIqIGZ1bmN0aW9uLCBpbnQgbGlu ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBoZXhfZHVtcCggdW5zaWduZWQgY2hhciAq IGJ1ZiwgaW50IGxlbiApOwordm9pZCBkZWJ1Z190ZXJtX29uKHZvaWQpOwordm9pZCBkZWJ1Z190 ZXJtX29mZih2b2lkKTsKK3ZvaWQgZGVidWdfZmlsZV9vbihjaGFyICpwYXRoKTsKK3ZvaWQgZGVi dWdfZmlsZV9vZmYodm9pZCk7Cit2b2lkIGRlYnVnX3NldF9kaXIoY2hhciogc3RyKTsKKworI2Vu ZGlmIC8vX0RFQlVHX0gKKwpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00LjEuMi1h L3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZhdC5jIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUt eGVuL2ZhdC5jCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9mYXQuYwkxOTcw LTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMvaW9l bXUtcWVtdS14ZW4vZmF0LmMJMjAxMi0xMi0yOCAxNjowMjo0MS4wMDE5MzQ3MDkgKzA4MDAKQEAg LTAsMCArMSw5MzYgQEAKKy8qIGZhdC5jIC0gRkFUIGZpbGVzeXN0ZW0gKi8KKy8qCisgKiAgR1JV QiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwMCwy MDAxLDIwMDIsMjAwMywyMDA0LDIwMDUsMjAwNywyMDA4LDIwMDkgIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSAibWlzYy5o IgorI2luY2x1ZGUgImZhdC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKworaW50IGdfZXJyID0g R1JVQl9FUlJfTk9ORTsKK2ludDY0X3Qgc19icGJfYnl0ZXNfcGVyX3NlY3RvcjsKK2ludDY0X3Qg c19wYXJ0X29mZl9zZWN0b3I7CisKK3N0YXRpYyBpbnQgYmRydl9wcmVhZF9mcm9tX3NlY3Rvcl9v Zl92b2x1bWUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qgb2Zmc2V0LAorICAgICAgICAg ICAgICAgdm9pZCAqYnVmMSwgaW50IGNvdW50MSkKK3sKKyAgaW50NjRfdCBvZmYgPSBzX2JwYl9i eXRlc19wZXJfc2VjdG9yICogc19wYXJ0X29mZl9zZWN0b3IgKyBvZmZzZXQ7CisgIHJldHVybiBi ZHJ2X3ByZWFkKGJzLCBvZmYsIGJ1ZjEsIGNvdW50MSk7Cit9CisKKworc3RhdGljIGludAorZmF0 X2xvZzIgKHVuc2lnbmVkIHgpCit7CisgIGludCBpOworCisgIGlmICh4ID09IDApCisgICAgcmV0 dXJuIC0xOworCisgIGZvciAoaSA9IDA7ICh4ICYgMSkgPT0gMDsgaSsrKQorICAgIHggPj49IDE7 CisKKyAgaWYgKHggIT0gMSkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIGk7Cit9CisKKwor Y2hhciAqCitncnViX2ZhdF9maW5kX2RpciAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHN0cnVjdCBn cnViX2ZhdF9kYXRhICpkYXRhLAorCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkgICBpbnQgKCpo b29rKSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJY29uc3Qgc3RydWN0IGdydWJfZGlyaG9v a19pbmZvICppbmZvLAorCQkJCXZvaWQgKmNsb3N1cmUpLAorCQkgICB2b2lkICpjbG9zdXJlKTsK KworCisKK3N0cnVjdCBncnViX2ZhdF9kYXRhICoKK2dydWJfZmF0X21vdW50IChCbG9ja0RyaXZl clN0YXRlICpicywgdWludDMyX3QgcGFydF9vZmZfc2VjdG9yKQoreworICBzdHJ1Y3QgZ3J1Yl9m YXRfYnBiIGJwYjsKKyAgc3RydWN0IGdydWJfZmF0X2RhdGEgKmRhdGEgPSAwOworICBncnViX3Vp bnQzMl90IGZpcnN0X2ZhdCwgbWFnaWM7CisgIGludDY0X3Qgb2ZmX2J5dGVzID0gKGludDY0X3Qp cGFydF9vZmZfc2VjdG9yIDw8IEdSVUJfRElTS19TRUNUT1JfQklUUzsKKworICBpZiAoISBicykK KyAgICBnb3RvIGZhaWw7CisKKyAgZGF0YSA9IChzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqKSBtYWxs b2MgKHNpemVvZiAoKmRhdGEpKTsKKyAgaWYgKCEgZGF0YSkKKyAgICBnb3RvIGZhaWw7CisKKyAg LyogUmVhZCB0aGUgQlBCLiAgKi8KKyAgaWYgKGJkcnZfcHJlYWQoYnMsIG9mZl9ieXRlcywgJmJw Yiwgc2l6ZW9mKGJwYikpICE9IHNpemVvZihicGIpKQorICAgIHsKKyAgICAgIERCRygiYmRydl9w cmVhZCBmYWlsLi4uLiIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICAKKyAgaWYgKGdy dWJfc3RybmNtcCgoY29uc3QgY2hhciAqKSBicGIudmVyc2lvbl9zcGVjaWZpYy5mYXQxMl9vcl9m YXQxNi5mc3R5cGUsCisJCSAgICJGQVQxMiIsIDUpCisgICAgICAmJiBncnViX3N0cm5jbXAoKGNv bnN0IGNoYXIgKikgYnBiLnZlcnNpb25fc3BlY2lmaWMuZmF0MTJfb3JfZmF0MTYuZnN0eXBlLAor CQkgICAgICAiRkFUMTYiLCA1KQorICAgICAgJiYgZ3J1Yl9zdHJuY21wKChjb25zdCBjaGFyICop IGJwYi52ZXJzaW9uX3NwZWNpZmljLmZhdDMyLmZzdHlwZSwKKwkJICAgICAgIkZBVDMyIiwgNSkK KyAgICAgICkKKyAgICB7CisgICAgICAKKyAgICAgIERCRygiZmFpbCBoZXJlLS0+Z3J1Yl9zdHJu Y21wLi4uLi4uIik7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgIC8qIEdldCB0aGUgc2l6 ZXMgb2YgbG9naWNhbCBzZWN0b3JzIGFuZCBjbHVzdGVycy4gICovCisgIHNfYnBiX2J5dGVzX3Bl cl9zZWN0b3IgPSAoYnBiLmJ5dGVzX3Blcl9zZWN0b3IpOworICBzX3BhcnRfb2ZmX3NlY3RvciA9 IHBhcnRfb2ZmX3NlY3RvcjsKKyAgZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cyA9CisgICAgZmF0 X2xvZzIgKGdydWJfbGVfdG9fY3B1MTYgKGJwYi5ieXRlc19wZXJfc2VjdG9yKSk7CisgIERCRygi YnBiLmJ5dGVzX3Blcl9zZWN0b3I9MHgleCwgbGVfdG9fY3B1MTY9MHgleCIsCisJIGJwYi5ieXRl c19wZXJfc2VjdG9yLCBncnViX2xlX3RvX2NwdTE2IChicGIuYnl0ZXNfcGVyX3NlY3RvcikpOwor ICAKKworICBpZiAoZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cyA8IEdSVUJfRElTS19TRUNUT1Jf QklUUykKKyAgeworICAgIERCRygiZmFpbCBoZXJlLS0+bG9naWNhbF9zZWN0b3JfYml0cyIpOyAK KyAgICBnb3RvIGZhaWw7CisgIH0KKyAgZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cyAtPSBHUlVC X0RJU0tfU0VDVE9SX0JJVFM7CisKKyAgREJHKCJicGIuc2VjdG9yc19wZXJfY2x1c3Rlcj0ldSIs IGJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKTsKKyAgZGF0YS0+Y2x1c3Rlcl9iaXRzID0gZmF0X2xv ZzIgKGJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKTsKKyAgaWYgKGRhdGEtPmNsdXN0ZXJfYml0cyA8 IDApCisgICAgeworICAgICAgREJHKCJmYWlsIGhlcmUtLT5jbHVzdGVyX2JpdHMuLi4uLi5saW5l WyV1XSIsIF9fTElORV9fKTsgCisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICBkYXRhLT5jbHVz dGVyX2JpdHMgKz0gZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0czsKKworICAvKiBHZXQgaW5mb3Jt YXRpb24gYWJvdXQgRkFUcy4gICovCisgIERCRygiYnBiLm51bV9yZXNlcnZlZF9zZWN0b3JzPSV1 LCIKKyAgICAgICJsZV90b19jcHUxNj0ldSIsCisgICAgICBicGIubnVtX3Jlc2VydmVkX3NlY3Rv cnMsCisgICAgICBncnViX2xlX3RvX2NwdTE2IChicGIubnVtX3Jlc2VydmVkX3NlY3RvcnMpKTsK KyAgZGF0YS0+ZmF0X3NlY3RvciA9IChncnViX2xlX3RvX2NwdTE2IChicGIubnVtX3Jlc2VydmVk X3NlY3RvcnMpCisJCSAgICAgIDw8IGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMpOworICBEQkco ImRhdGEtPmZhdF9zZWN0b3I9JXUsIHBhcnRfb2ZmX3NlY3Rvcj0ldSIsCisgICAgICBkYXRhLT5m YXRfc2VjdG9yLCBwYXJ0X29mZl9zZWN0b3IpOworICBpZiAoZGF0YS0+ZmF0X3NlY3RvciA9PSAw KQorICAgIHsKKyAgICAgIERCRygiZmFpbCBoZXJlLS0+ZmF0X3NlY3Rvci4uLi4uLiIpOyAKKyAg ICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIGRhdGEtPnNlY3RvcnNfcGVyX2ZhdCA9ICgoYnBiLnNl Y3RvcnNfcGVyX2ZhdF8xNgorCQkJICAgID8gZ3J1Yl9sZV90b19jcHUxNiAoYnBiLnNlY3RvcnNf cGVyX2ZhdF8xNikKKwkJCSAgICA6IGdydWJfbGVfdG9fY3B1MzIgKGJwYi52ZXJzaW9uX3NwZWNp ZmljLmZhdDMyLnNlY3RvcnNfcGVyX2ZhdF8zMikpCisJCQkgICA8PCBkYXRhLT5sb2dpY2FsX3Nl Y3Rvcl9iaXRzKTsKKyAgREJHKCJicGIudmVyc2lvbl9zcGVjaWZpYy5mYXQzMi5zZWN0b3JzX3Bl cl9mYXRfMzI9JXVcbiIKKwkgImdydWJfbGVfdG9fY3B1MzIgKGJwYi52ZXJzaW9uX3NwZWNpZmlj LmZhdDMyLnNlY3RvcnNfcGVyX2ZhdF8zMik9JXUiLAorCSBicGIudmVyc2lvbl9zcGVjaWZpYy5m YXQzMi5zZWN0b3JzX3Blcl9mYXRfMzIsCisJIGdydWJfbGVfdG9fY3B1MzIgKGJwYi52ZXJzaW9u X3NwZWNpZmljLmZhdDMyLnNlY3RvcnNfcGVyX2ZhdF8zMikpOworICBpZiAoZGF0YS0+c2VjdG9y c19wZXJfZmF0ID09IDApCisgICAgZ290byBmYWlsOworCisgIC8qIEdldCB0aGUgbnVtYmVyIG9m IHNlY3RvcnMgaW4gdGhpcyB2b2x1bWUuICAqLworICBkYXRhLT5udW1fc2VjdG9ycyA9ICgoYnBi Lm51bV90b3RhbF9zZWN0b3JzXzE2CisJCQk/IGdydWJfbGVfdG9fY3B1MTYgKGJwYi5udW1fdG90 YWxfc2VjdG9yc18xNikKKwkJCTogZ3J1Yl9sZV90b19jcHUzMiAoYnBiLm51bV90b3RhbF9zZWN0 b3JzXzMyKSkKKwkJICAgICAgIDw8IGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMpOworICBpZiAo ZGF0YS0+bnVtX3NlY3RvcnMgPT0gMCkKKyAgICB7CisgICAgICBEQkcoImZhaWwgaGVyZS0tPm51 bV9zZWN0b3JzLi4uLi4uIik7IAorICAgICAgZ290byBmYWlsOworICAgIH0KKyAgLyogR2V0IGlu Zm9ybWF0aW9uIGFib3V0IHRoZSByb290IGRpcmVjdG9yeS4gICovCisgIGlmIChicGIubnVtX2Zh dHMgPT0gMCkKKyAgICB7CisgICAgICBEQkcoImZhaWwgaGVyZS0tPm51bV9mYXRzLi4uLi4uIik7 IAorICAgICAgZ290byBmYWlsOworICAgIH0KKyAgZGF0YS0+cm9vdF9zZWN0b3IgPSBkYXRhLT5m YXRfc2VjdG9yICsgYnBiLm51bV9mYXRzICogZGF0YS0+c2VjdG9yc19wZXJfZmF0OworICBkYXRh LT5udW1fcm9vdF9zZWN0b3JzCisgICAgPSAoKCgoZ3J1Yl91aW50MzJfdCkgZ3J1Yl9sZV90b19j cHUxNiAoYnBiLm51bV9yb290X2VudHJpZXMpCisJICogR1JVQl9GQVRfRElSX0VOVFJZX1NJWkUK KwkgKyBncnViX2xlX3RvX2NwdTE2IChicGIuYnl0ZXNfcGVyX3NlY3RvcikgLSAxKQorCT4+IChk YXRhLT5sb2dpY2FsX3NlY3Rvcl9iaXRzICsgR1JVQl9ESVNLX1NFQ1RPUl9CSVRTKSkKKyAgICAg ICA8PCAoZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cykpOworICAvL2luIGZhdDMyIDogcm9vdCBp cyBub3QgaW5jbHVkZWQgaW4gZmlsZSBjbHVzdGVyPz8KKyAgZGF0YS0+Y2x1c3Rlcl9zZWN0b3Ig PSBkYXRhLT5yb290X3NlY3RvciArIGRhdGEtPm51bV9yb290X3NlY3RvcnM7CisgIGRhdGEtPm51 bV9jbHVzdGVycyA9ICgoKGRhdGEtPm51bV9zZWN0b3JzIC0gZGF0YS0+Y2x1c3Rlcl9zZWN0b3Ip CisJCQkgPj4gKGRhdGEtPmNsdXN0ZXJfYml0cyArIGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMp KQorCQkJKyAyKTsKKworICBpZiAoZGF0YS0+bnVtX2NsdXN0ZXJzIDw9IDIpCisgICAgeworICAg ICAgREJHKCJmYWlsIGhlcmUtLT5udW1fY2x1c3RlcnMuLi4uLi4iKTsgCisgICAgICBnb3RvIGZh aWw7CisgICAgfQorICBpZiAoISBicGIuc2VjdG9yc19wZXJfZmF0XzE2KQorICAgIHsKKyAgICAg IC8qIEZBVDMyLiAgKi8KKyAgICAgIGdydWJfdWludDE2X3QgZmxhZ3MgPSBncnViX2xlX3RvX2Nw dTE2IChicGIudmVyc2lvbl9zcGVjaWZpYy5mYXQzMi5leHRlbmRlZF9mbGFncyk7CisKKyAgICAg IGRhdGEtPnJvb3RfY2x1c3RlciA9IGdydWJfbGVfdG9fY3B1MzIgKGJwYi52ZXJzaW9uX3NwZWNp ZmljLmZhdDMyLnJvb3RfY2x1c3Rlcik7CisgICAgICBkYXRhLT5mYXRfc2l6ZSA9IDMyOworICAg ICAgZGF0YS0+Y2x1c3Rlcl9lb2ZfbWFyayA9IDB4MGZmZmZmZjg7CisKKyAgICAgIGlmIChmbGFn cyAmIDB4ODApCisJeworCSAgLyogR2V0IGFuIGFjdGl2ZSBGQVQuICAqLworCSAgdW5zaWduZWQg YWN0aXZlX2ZhdCA9IGZsYWdzICYgMHhmOworCisJICBpZiAoYWN0aXZlX2ZhdCA+IGJwYi5udW1f ZmF0cykKKwkgICAgZ290byBmYWlsOworCisJICBkYXRhLT5mYXRfc2VjdG9yICs9IGFjdGl2ZV9m YXQgKiBkYXRhLT5zZWN0b3JzX3Blcl9mYXQ7CisJfQorCisgICAgICBpZiAoYnBiLm51bV9yb290 X2VudHJpZXMgIT0gMCB8fCBicGIudmVyc2lvbl9zcGVjaWZpYy5mYXQzMi5mc192ZXJzaW9uICE9 IDApCisJZ290byBmYWlsOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEZBVDEyIG9y IEZBVDE2LiAgKi8KKyAgICAgIGRhdGEtPnJvb3RfY2x1c3RlciA9IH4wVTsKKworICAgICAgaWYg KGRhdGEtPm51bV9jbHVzdGVycyA8PSA0MDg1ICsgMikKKwl7CisJICAvKiBGQVQxMi4gICovCisJ ICBkYXRhLT5mYXRfc2l6ZSA9IDEyOworCSAgZGF0YS0+Y2x1c3Rlcl9lb2ZfbWFyayA9IDB4MGZm ODsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogRkFUMTYuICAqLworCSAgZGF0YS0+ZmF0X3Np emUgPSAxNjsKKwkgIGRhdGEtPmNsdXN0ZXJfZW9mX21hcmsgPSAweGZmZjg7CisJfQorICAgIH0K KworICAvKiBNb3JlIHNhbml0eSBjaGVja3MuICAqLworICBpZiAoZGF0YS0+bnVtX3NlY3RvcnMg PD0gZGF0YS0+ZmF0X3NlY3RvcikKKyAgICBnb3RvIGZhaWw7CisKKyAgCisgIERCRygiZGF0YS0+ ZmF0X3NlY3Rvcj0ldSwgZGF0YS0+c2VjdG9yc19wZXJfZmF0PSV1IiwKKwkgZGF0YS0+ZmF0X3Nl Y3RvciwgZGF0YS0+c2VjdG9yc19wZXJfZmF0KTsKKyAgaWYgKGJkcnZfcHJlYWRfZnJvbV9zZWN0 b3Jfb2Zfdm9sdW1lKGJzLAorCQkgZGF0YS0+ZmF0X3NlY3RvciA8PCBHUlVCX0RJU0tfU0VDVE9S X0JJVFMsCisJCSAmZmlyc3RfZmF0LAorCQkgc2l6ZW9mIChmaXJzdF9mYXQpKSAhPSBzaXplb2Yo Zmlyc3RfZmF0KSkKKyAgICB7CisgICAgICBEQkcoImZhaWwgaGVyZS0tPmJkcnZfcHJlYWQuLi4u Li4iKTsgCisgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgIGZpcnN0X2ZhdCA9IGdydWJfbGVf dG9fY3B1MzIgKGZpcnN0X2ZhdCk7CisKKyAgaWYgKGRhdGEtPmZhdF9zaXplID09IDMyKQorICAg IHsKKyAgICAgIGZpcnN0X2ZhdCAmPSAweDBmZmZmZmZmOworICAgICAgbWFnaWMgPSAweDBmZmZm ZjAwOworICAgIH0KKyAgZWxzZSBpZiAoZGF0YS0+ZmF0X3NpemUgPT0gMTYpCisgICAgeworICAg ICAgZmlyc3RfZmF0ICY9IDB4MDAwMGZmZmY7CisgICAgICBtYWdpYyA9IDB4ZmYwMDsKKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICBmaXJzdF9mYXQgJj0gMHgwMDAwMGZmZjsKKyAgICAgIG1h Z2ljID0gMHgwZjAwOworICAgIH0KKworICAvKiBTZXJpYWwgbnVtYmVyLiAgKi8KKyAgaWYgKGJw Yi5zZWN0b3JzX3Blcl9mYXRfMTYpCisgICAgZGF0YS0+dXVpZCA9IGdydWJfbGVfdG9fY3B1MzIg KGJwYi52ZXJzaW9uX3NwZWNpZmljLmZhdDEyX29yX2ZhdDE2Lm51bV9zZXJpYWwpOworICBlbHNl CisgICAgZGF0YS0+dXVpZCA9IGdydWJfbGVfdG9fY3B1MzIgKGJwYi52ZXJzaW9uX3NwZWNpZmlj LmZhdDMyLm51bV9zZXJpYWwpOworCisgIC8qIElnbm9yZSB0aGUgM3JkIGJpdCwgYmVjYXVzZSBz b21lIEJJT1NlcyBhc3NpZ25zIDB4RjAgdG8gdGhlIG1lZGlhCisgICAgIGRlc2NyaXB0b3IsIGV2 ZW4gaWYgaXQgaXMgYSBzby1jYWxsZWQgc3VwZXJmbG9wcHkgKGUuZy4gYW4gVVNCIGtleSkuCisg ICAgIFRoZSBjaGVjayBtYXkgYmUgdG9vIHN0cmljdCBmb3IgdGhpcyBraW5kIG9mIHN0dXBpZCBC SU9TZXMsIGFzCisgICAgIHRoZXkgb3ZlcndyaXRlIHRoZSBtZWRpYSBkZXNjcmlwdG9yLiAgKi8K KyAgaWYgKChmaXJzdF9mYXQgfCAweDgpICE9IChtYWdpYyB8IGJwYi5tZWRpYSB8IDB4OCkpCisg ICAgeworICAgICAgREJHKCJmYWlsIGhlcmUtLT5maXJzdF9mYXQ9MHgleCwgbWFnaWM9MHgleCIs CisJICAgICBmaXJzdF9mYXQsIG1hZ2ljKTsgCisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAv KiBTdGFydCBmcm9tIHRoZSByb290IGRpcmVjdG9yeS4gICovCisgIGRhdGEtPmZpbGVfY2x1c3Rl ciA9IGRhdGEtPnJvb3RfY2x1c3RlcjsKKyAgZGF0YS0+Y3VyX2NsdXN0ZXJfbnVtID0gfjBVOwor ICBkYXRhLT5hdHRyID0gR1JVQl9GQVRfQVRUUl9ESVJFQ1RPUlk7CisgIERCRygiZGF0YS0+Zmls ZV9jbHVzdGVyPSV1IFxuZGF0YS0+Y3VyX2NsdXN0ZXJfbnVtPSV1IFxuZGF0YS0+YXR0cj0weCV4 XG4iCisJICJkYXRhLT5sb2dpY2FsX3NlY3Rvcl9iaXRzPSV1XG4iCisJICJkYXRhLT5jbHVzdGVy X2JpdHM9JXUiLAorCSBkYXRhLT5maWxlX2NsdXN0ZXIsIGRhdGEtPmN1cl9jbHVzdGVyX251bSwg ZGF0YS0+YXR0ciwKKwkgZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cywgZGF0YS0+Y2x1c3Rlcl9i aXRzKTsKKyAgcmV0dXJuIGRhdGE7CisKKyBmYWlsOgorCisgIGZyZWUgKGRhdGEpOworICBwcmlu dGYoIm5vdCBhIEZBVCBmaWxlc3lzdGVtIVxuIik7CisgIHJldHVybiAwOworfQorCisKKworLy+0 087EvP61xNa4tqjGq9LGb2Zmc2V019a92rSmtsHIoWxlbtfWvdq1xMr9vt21vWJ1ZgorLy/OxLz+ 08lkYXRhLT5maWxlX2NsdXN0ZXLWuLaoCisvL2RhdGEtPmZpbGVfY2x1c3Rlcta4tqjBy87EvP61 xMbwyry02LrFCisvL8SsyM9kYXRhLT5maWxlX2NsdXN0ZXI9MqOstPqx7bj5xL/CvAorc3RhdGlj IGdydWJfc3NpemVfdAorZ3J1Yl9mYXRfcmVhZF9kYXRhIChCbG9ja0RyaXZlclN0YXRlICpicywg c3RydWN0IGdydWJfZmF0X2RhdGEgKmRhdGEsCisJCSAgICB2b2lkICgqcmVhZF9ob29rKSAoZ3J1 Yl9kaXNrX2FkZHJfdCBzZWN0b3IsCisJCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu ZWQgbGVuZ3RoLAorCQkJCSAgICAgICB2b2lkICpjbG9zdXJlKSwKKwkJICAgIHZvaWQgKmNsb3N1 cmUsCisJCSAgICBncnViX29mZl90IG9mZnNldCwgZ3J1Yl9zaXplX3QgbGVuLCBjaGFyICpidWYp Cit7CisgIGdydWJfc2l6ZV90IHNpemU7CisgIGdydWJfdWludDMyX3QgbG9naWNhbF9jbHVzdGVy OworICB1bnNpZ25lZCBsb2dpY2FsX2NsdXN0ZXJfYml0czsKKyAgZ3J1Yl9zc2l6ZV90IHJldCA9 IDA7CisgIHVuc2lnbmVkIGxvbmcgc2VjdG9yOworICB1aW50NjRfdCBvZmZfYnl0ZXMgPSAwOyAK KyAgLyogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gRkFUMTIgYW5kIEZBVDE2IGRvZXNuJ3QgaGF2 ZSB0aGUgcm9vdCBkaXJlY3RvcnkKKyAgICAgaW4gY2x1c3RlcnMuICAqLworICBpZiAoZGF0YS0+ ZmlsZV9jbHVzdGVyID09IH4wVSkKKyAgICB7CisgICAgICBzaXplID0gKGRhdGEtPm51bV9yb290 X3NlY3RvcnMgPDwgR1JVQl9ESVNLX1NFQ1RPUl9CSVRTKSAtIG9mZnNldDsKKyAgICAgIGlmIChz aXplID4gbGVuKQorCXNpemUgPSBsZW47CisKKyAgICAgIG9mZl9ieXRlcyA9ICgodWludDY0X3Qp ZGF0YS0+cm9vdF9zZWN0b3IgPDwgR1JVQl9ESVNLX1NFQ1RPUl9CSVRTKSArIG9mZnNldDsKKyAg ICAgIGlmKGJkcnZfcHJlYWRfZnJvbV9zZWN0b3Jfb2Zfdm9sdW1lKGJzLCBvZmZfYnl0ZXMsIGJ1 Ziwgc2l6ZSApICE9IHNpemUpIAorCXJldHVybiAtMTsKKworICAgICAgcmV0dXJuIHNpemU7Cisg ICAgfQorCisgIC8qIENhbGN1bGF0ZSB0aGUgbG9naWNhbCBjbHVzdGVyIG51bWJlciBhbmQgb2Zm c2V0LiAgKi8KKyAgbG9naWNhbF9jbHVzdGVyX2JpdHMgPSAoZGF0YS0+Y2x1c3Rlcl9iaXRzCisJ CQkgICsgZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cworCQkJICArIEdSVUJfRElTS19TRUNUT1Jf QklUUyk7CisgIGxvZ2ljYWxfY2x1c3RlciA9IG9mZnNldCA+PiBsb2dpY2FsX2NsdXN0ZXJfYml0 czsgICAgLy93aGljaCBjbHVzdGVyIHRvIHJlYWQgCisgIG9mZnNldCAmPSAoMSA8PCBsb2dpY2Fs X2NsdXN0ZXJfYml0cykgLSAxOyAgICAgICAgICAgLy9tb2QKKworICBpZiAobG9naWNhbF9jbHVz dGVyIDwgZGF0YS0+Y3VyX2NsdXN0ZXJfbnVtKSAgIC8vCisgICAgeworICAgICAgZGF0YS0+Y3Vy X2NsdXN0ZXJfbnVtID0gMDsKKyAgICAgIGRhdGEtPmN1cl9jbHVzdGVyID0gZGF0YS0+ZmlsZV9j bHVzdGVyOyAvLyC12jK49mZhdLHtz+6/qsq8vMfCvMS/wry6zc7EvP4KKyAgICB9CisKKyAgd2hp bGUgKGxlbikKKyAgICB7CisgICAgICB3aGlsZSAobG9naWNhbF9jbHVzdGVyID4gZGF0YS0+Y3Vy X2NsdXN0ZXJfbnVtKQorCXsKKwkgIC8qIEZpbmQgbmV4dCBjbHVzdGVyLiAgKi8KKwkgIGdydWJf dWludDMyX3QgbmV4dF9jbHVzdGVyOworCSAgdW5zaWduZWQgbG9uZyBmYXRfb2Zmc2V0OworCisJ ICBzd2l0Y2ggKGRhdGEtPmZhdF9zaXplKQorCSAgICB7CisJICAgIGNhc2UgMzI6CisJICAgICAg ZmF0X29mZnNldCA9IGRhdGEtPmN1cl9jbHVzdGVyIDw8IDI7CisJICAgICAgYnJlYWs7CisJICAg IGNhc2UgMTY6CisJICAgICAgZmF0X29mZnNldCA9IGRhdGEtPmN1cl9jbHVzdGVyIDw8IDE7CisJ ICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgLyogY2FzZSAxMjogKi8KKwkgICAg ICBmYXRfb2Zmc2V0ID0gZGF0YS0+Y3VyX2NsdXN0ZXIgKyAoZGF0YS0+Y3VyX2NsdXN0ZXIgPj4g MSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogUmVhZCB0aGUgRkFULiAgKi8KKwkg IGludCBsZW4gPSAoZGF0YS0+ZmF0X3NpemUgKyA3KSA+PiAzOworCSAgdWludDY0X3Qgb2ZmX2J5 dGVzID0gICgodWludDY0X3QpZGF0YS0+ZmF0X3NlY3RvciA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJ VFMpICsgZmF0X29mZnNldDsgCisJICBpZiAoYmRydl9wcmVhZF9mcm9tX3NlY3Rvcl9vZl92b2x1 bWUgKGJzLCBvZmZfYnl0ZXMsIAorCQkJICAoY2hhciAqKSAmbmV4dF9jbHVzdGVyLCAKKwkJCSAg bGVuKSAhPSBsZW4pICAgLy+002ZhdLHttsHIobTYusUKKwkgICAgcmV0dXJuIC0xOworCisJICBu ZXh0X2NsdXN0ZXIgPSBncnViX2xlX3RvX2NwdTMyIChuZXh0X2NsdXN0ZXIpOworCSAgc3dpdGNo IChkYXRhLT5mYXRfc2l6ZSkKKwkgICAgeworCSAgICBjYXNlIDE2OgorCSAgICAgIG5leHRfY2x1 c3RlciAmPSAweEZGRkY7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgMTI6CisJICAgICAgaWYg KGRhdGEtPmN1cl9jbHVzdGVyICYgMSkKKwkJbmV4dF9jbHVzdGVyID4+PSA0OworCisJICAgICAg bmV4dF9jbHVzdGVyICY9IDB4MEZGRjsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICBEQkcg KCJmYXRfc2l6ZT0lZCwgbmV4dF9jbHVzdGVyPSV1IiwKKwkJCWRhdGEtPmZhdF9zaXplLCBuZXh0 X2NsdXN0ZXIpOworCisJICAvKiBDaGVjayB0aGUgZW5kLiAgKi8KKwkgIGlmIChuZXh0X2NsdXN0 ZXIgPj0gZGF0YS0+Y2x1c3Rlcl9lb2ZfbWFyaykKKwkgICAgcmV0dXJuIHJldDsKKworCSAgaWYg KG5leHRfY2x1c3RlciA8IDIgfHwgbmV4dF9jbHVzdGVyID49IGRhdGEtPm51bV9jbHVzdGVycykK KwkgICAgeworCSAgICAgIERCRygiaW52YWxpZCBjbHVzdGVyICV1Li4uLi4uLi4uLi4uLi4uLiIs CisJCQkgIG5leHRfY2x1c3Rlcik7CisJICAgICAgcmV0dXJuIC0xOworCSAgICB9CisKKwkgIGRh dGEtPmN1cl9jbHVzdGVyID0gbmV4dF9jbHVzdGVyOworCSAgZGF0YS0+Y3VyX2NsdXN0ZXJfbnVt Kys7CisJfQorCisgICAgICAvKiBSZWFkIHRoZSBkYXRhIGhlcmUuICAqLworICAgICAgLy/C37yt tNjL+bbU06a1xL74ttTJyMf4CisgICAgICBzZWN0b3IgPSAoZGF0YS0+Y2x1c3Rlcl9zZWN0b3IK KwkJKyAoKGRhdGEtPmN1cl9jbHVzdGVyIC0gMikKKwkJICAgPDwgKGRhdGEtPmNsdXN0ZXJfYml0 cyArIGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMpKSk7IAorICAgICAgLy+++LbUycjH+NbQyKW1 9Mar0sa687XE19a92sr9CisgICAgICBzaXplID0gKDEgPDwgbG9naWNhbF9jbHVzdGVyX2JpdHMp IC0gb2Zmc2V0OworICAgICAgaWYgKHNpemUgPiBsZW4pCisJc2l6ZSA9IGxlbjsKKworICAgICAg Ly9kaXNrLT5yZWFkX2hvb2sgPSByZWFkX2hvb2s7CisgICAgICAvL2Rpc2stPmNsb3N1cmUgPSBj bG9zdXJlOworICAgICAgaW50NjRfdCBvZmZfYnl0ZXMgPSAoKHVpbnQ2NF90KXNlY3RvciA8PCBH UlVCX0RJU0tfU0VDVE9SX0JJVFMpICsgb2Zmc2V0OworICAgICAgLy9kaXNrLT5yZWFkX2hvb2sg PSAwOworICAgICAgaWYgKGJkcnZfcHJlYWRfZnJvbV9zZWN0b3Jfb2Zfdm9sdW1lIChicywgb2Zm X2J5dGVzLCBidWYsIHNpemUpICE9IHNpemUpCisJcmV0dXJuIC0xOworCisgICAgICBsZW4gLT0g c2l6ZTsKKyAgICAgIGJ1ZiArPSBzaXplOworICAgICAgcmV0ICs9IHNpemU7CisgICAgICBsb2dp Y2FsX2NsdXN0ZXIrKzsKKyAgICAgIG9mZnNldCA9IDA7ICAvL9LUuvO2wbXEtrzKx83q1fvJyMf4 CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8vsenA+tPJZGF0YS0+ZmlsZV9jbHVzdGVy 1ri2qLXExL/CvAorc3RhdGljIGludAorZ3J1Yl9mYXRfaXRlcmF0ZV9kaXIgKEJsb2NrRHJpdmVy U3RhdGUgKmJzLCBzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqZGF0YSwKKwkJICAgICAgaW50ICgqaG9v aykgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgIHN0cnVjdCBncnViX2ZhdF9kaXJfZW50 cnkgKmRpciwKKwkJCQkgICB2b2lkICpjbG9zdXJlKSwKKwkJICAgICAgdm9pZCAqY2xvc3VyZSkK K3sKKyAgc3RydWN0IGdydWJfZmF0X2Rpcl9lbnRyeSBkaXI7CisgIGNoYXIgKmZpbGVuYW1lLCAq ZmlsZXAgPSAwOworICBncnViX3VpbnQxNl90ICp1bmlidWY7CisgIGludCBzbG90ID0gLTEsIHNs b3RzID0gLTE7CisgIGludCBjaGVja3N1bSA9IC0xOworICBncnViX3NzaXplX3Qgb2Zmc2V0ID0g LXNpemVvZihkaXIpOworCisgIGlmICghIChkYXRhLT5hdHRyICYgR1JVQl9GQVRfQVRUUl9ESVJF Q1RPUlkpKQorICAgIHJldHVybiBwcmludGYoIm5vdCBhIGRpcmVjdG9yeS4uLi4uLlxuIik7CisK KyAgLyogQWxsb2NhdGUgc3BhY2UgZW5vdWdoIHRvIGhvbGQgYSBsb25nIG5hbWUuICAqLworICBm aWxlbmFtZSA9IChjaGFyKiltYWxsb2MgKDB4NDAgKiAxMyAqIDQgKyAxKTsKKyAgdW5pYnVmID0g KGdydWJfdWludDE2X3QgKikgbWFsbG9jICgweDQwICogMTMgKiAyKTsKKyAgY2hhciAqZ2JuYW1l ID0gKGNoYXIqKW1hbGxvYygweDQwICogMTMgKiAyKTsKKyAgaWYgKCEgZmlsZW5hbWUgfHwgISB1 bmlidWYgfHwgIWdibmFtZSkKKyAgICB7CisgICAgICBmcmVlKGdibmFtZSk7CisgICAgICBmcmVl IChmaWxlbmFtZSk7CisgICAgICBmcmVlICh1bmlidWYpOworICAgICAgcGVycm9yKCJpdGVyYXRl OiBtYWxsb2MgZmFpbGVkIS4uLlxuIik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIAor ICBpbnQgY291bnQgPSAwOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpOwor CisgICAgICAvKiBBZGp1c3QgdGhlIG9mZnNldC4gICovCisgICAgICBvZmZzZXQgKz0gc2l6ZW9m IChkaXIpOworICAgICAgREJHKCJcblslZF1vZmZzZXQ9JXUsIgorCSAgICAgImRhdGEtPmN1cl9j bHVzdGVyX251bT0ldSxkYXRhLT5jdXJfY2x1c3Rlcj0ldSIsIAorCSAgICAgY291bnQrMSwgb2Zm c2V0LCAKKwkgICAgIGRhdGEtPmN1cl9jbHVzdGVyX251bSwgZGF0YS0+Y3VyX2NsdXN0ZXIpOwor ICAgICAgLyogUmVhZCBhIGRpcmVjdG9yeSBlbnRyeS4gICovCisgICAgICAvLzB4MLHtyr6/1cS/ wrwKKyAgICAgIGlmICgoZ3J1Yl9mYXRfcmVhZF9kYXRhIChicywgZGF0YSwgMCwgMCwKKwkJCSAg ICAgICBvZmZzZXQsIHNpemVvZiAoZGlyKSwgKGNoYXIgKikgJmRpcikKKwkgICAhPSBzaXplb2Yg KGRpcikgfHwgZGlyLm5hbWVbMF0gPT0gMCkpCisJeworCSAgREJHKCJicmVhay4uLmRpci5uYW1l WzBdPT0lZCIsIGRpci5uYW1lWzBdKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIC8qIEhhbmRsZSBs b25nIG5hbWUgZW50cmllcy4gICovCisgICAgICBpZiAoZGlyLmF0dHIgPT0gR1JVQl9GQVRfQVRU Ul9MT05HX05BTUUpCisJeworCSAgREJHKCJsb25nIG5hbWUuLi4iKTsKKwkgIHN0cnVjdCBncnVi X2ZhdF9sb25nX25hbWVfZW50cnkgKmxvbmdfbmFtZQorCSAgICA9IChzdHJ1Y3QgZ3J1Yl9mYXRf bG9uZ19uYW1lX2VudHJ5ICopICZkaXI7CisJICBncnViX3VpbnQ4X3QgaWQgPSBsb25nX25hbWUt PmlkOworCisJICBpZiAoaWQgJiAweDQwKSAgLy90aGUgbGFzdCBpdGVtCisJICAgIHsKKwkgICAg ICBpZCAmPSAweDNmOyAgIC8vaW5kZXggb3Igb3JkaW5hbCBudW1iZXIgIDF+MzEKKwkgICAgICBz bG90cyA9IHNsb3QgPSBpZDsKKwkgICAgICBjaGVja3N1bSA9IGxvbmdfbmFtZS0+Y2hlY2tzdW07 CisJICAgICAgREJHKCJ0aGUgbGFzdCBvcmRpbmFsIG51bT0lZCEhISIsIGlkKTsKKwkgICAgfQor CisJICBpZiAoaWQgIT0gc2xvdCB8fCBzbG90ID09IDAgfHwgY2hlY2tzdW0gIT0gbG9uZ19uYW1l LT5jaGVja3N1bSkKKwkgICAgeworCSAgICAgIERCRygibm90IHZhbGlkIG9yZGluYWwgbnVtYmVy ICxpZ25vcmUuLi5jb250aW51ZSIpOworCSAgICAgIGNoZWNrc3VtID0gLTE7CisJICAgICAgY29u dGludWU7CisJICAgIH0KKworCSAgc2xvdC0tOworCSAgbWVtY3B5ICh1bmlidWYgKyBzbG90ICog MTMsIGxvbmdfbmFtZS0+bmFtZTEsIDUgKiAyKTsKKwkgIG1lbWNweSAodW5pYnVmICsgc2xvdCAq IDEzICsgNSwgbG9uZ19uYW1lLT5uYW1lMiwgNiAqIDIpOworCSAgbWVtY3B5ICh1bmlidWYgKyBz bG90ICogMTMgKyAxMSwgbG9uZ19uYW1lLT5uYW1lMywgMiAqIDIpOworCSAgREJHKCJtZW1jcHku Li5jb250aW51ZSIpOworCSAgY29udGludWU7CisJfQorCisgICAgICAKKyAgICAgIC8qIENoZWNr IGlmIHRoaXMgZW50cnkgaXMgdmFsaWQuICAqLworICAgICAgLy9veGU1se3KvtLRvq2xu8m+s/0K KyAgICAgIGlmIChkaXIubmFtZVswXSA9PSAweGU1IHx8IChkaXIuYXR0ciAmIH5HUlVCX0ZBVF9B VFRSX1ZBTElEKSkKKwl7CisJICBEQkcoImRpci5uYW1lWzBdPTB4JXgsIGRpci5hdHRyPTB4JXgg bm90IHZhbGlkLi4uY29udGludWUiLCAKKwkJIGRpci5uYW1lWzBdLCBkaXIuYXR0cik7CisJICBj b250aW51ZTsKKwl9CisKKyAgICAgIERCRygiY2hlY2tzdW09JWQsIHNsb3Q9JWQiLCBjaGVja3N1 bSwgc2xvdCk7CisgICAgICAvKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgSmFwYW5lc2UuICAq LworICAgICAgaWYgKGRpci5uYW1lWzBdID09IDB4MDUpCisJZGlyLm5hbWVbMF0gPSAweGU1Owor CisgICAgICBpZiAoY2hlY2tzdW0gIT0gLTEgJiYgc2xvdCA9PSAwKQorCXsKKwkgIERCRygiY2hl Y2tzdW1pbmciKTsKKwkgIGdydWJfdWludDhfdCBzdW07CisKKwkgIGZvciAoc3VtID0gMCwgaSA9 IDA7IGkgPCBzaXplb2YgKGRpci5uYW1lKTsgaSsrKQorCSAgICBzdW0gPSAoKHN1bSA+PiAxKSB8 IChzdW0gPDwgNykpICsgZGlyLm5hbWVbaV07CisKKwkgIGlmIChzdW0gPT0gY2hlY2tzdW0pCisJ ICAgIHsvL7Okw/ux7c/uuvPD5r30vdO2zMP7se3P7qOs0enWpLPJuabU8takw/fV5tX9ysezpMP7 19YKKwkgICAgICBpbnQgdTsKKworCSAgICAgIGZvciAodSA9IDA7IHUgPCBzbG90cyAqIDEzOyB1 KyspCisJCXVuaWJ1Zlt1XSA9IGdydWJfbGVfdG9fY3B1MTYgKHVuaWJ1Zlt1XSk7CisKKwkgICAg ICAqZ3J1Yl91dGYxNl90b191dGY4ICgoZ3J1Yl91aW50OF90ICopIGZpbGVuYW1lLCB1bmlidWYs CisJCQkJICAgc2xvdHMgKiAxMykgPSAnXDAnOworCisJICAgICAgCisJICAgICAgY2hlY2tzdW0g PSAtMTsKKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChkaXIubmFtZSk7IGkrKykKKwkJ REJHKCIweCV4ICAiLCBkaXIubmFtZVtpXSk7CisJICAgICAgCisJICAgICAgdTJnKGZpbGVuYW1l LCBzdHJsZW4oZmlsZW5hbWUpLCBnYm5hbWUsIDB4NDAgKiAxMyAqIDIpOworCSAgICAgIERCRygi XG5kaXIubmFtZT0lcywgZmlsZW5hbWU9JXMsIGRpci5hdHRyPTB4JXgsIgorCQkgICAgICJzdW09 PWNoZWNrc3VtLi4uY29udGludWUiLAorCQkgICAgIGRpci5uYW1lLCBnYm5hbWUsIGRpci5hdHRy KTsKKwkgICAgICAKKwkgICAgICBjb3VudCsrOworCSAgICAgIAorCSAgICAgIGlmIChob29rICYm IGhvb2sgKGdibmFtZSwgJmRpciwgY2xvc3VyZSkpCisJICAgICAgICBicmVhazsKKwkgICAgICAK KwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBjaGVja3N1bSA9IC0xOworCX0KKworICAg ICAgLy+688PmtcS0psDt1eu21LfH1ebKtbOkw/u6zdXmyrW2zMP7CisgICAgICAvKiBDb252ZXJ0 IHRoZSA4LjMgZmlsZSBuYW1lLiAgKi8KKyAgICAgIC8vyKW19LbMw/u1xL/VuPGjrMiruMTOqtCh 0LQKKyAgICAgIGZpbGVwID0gZmlsZW5hbWU7CisgICAgICBpZiAoZGlyLmF0dHIgJiBHUlVCX0ZB VF9BVFRSX1ZPTFVNRV9JRCkKKwl7CisJICBEQkcoIlZPTFVNRSIpOworCSAgZm9yIChpID0gMDsg aSA8IHNpemVvZiAoZGlyLm5hbWUpICYmIGRpci5uYW1lW2ldCisJCSAmJiAhIGdydWJfaXNzcGFj ZSAoZGlyLm5hbWVbaV0pOyBpKyspCisJICAgICpmaWxlcCsrID0gZGlyLm5hbWVbaV07CisJfQor ICAgICAgZWxzZQorCXsKKwkgIGZvciAoaSA9IDA7IGkgPCA4ICYmIGRpci5uYW1lW2ldICYmICEg Z3J1Yl9pc3NwYWNlIChkaXIubmFtZVtpXSk7IGkrKykKKwkgICAgKmZpbGVwKysgPSBncnViX3Rv bG93ZXIgKGRpci5uYW1lW2ldKTsKKworCSAgKmZpbGVwID0gJy4nOworCisJICBmb3IgKGkgPSA4 OyBpIDwgMTEgJiYgZGlyLm5hbWVbaV0gJiYgISBncnViX2lzc3BhY2UgKGRpci5uYW1lW2ldKTsg aSsrKQorCSAgICAqKytmaWxlcCA9IGdydWJfdG9sb3dlciAoZGlyLm5hbWVbaV0pOworCisJICBp ZiAoKmZpbGVwICE9ICcuJykKKwkgICAgZmlsZXArKzsKKwl9CisgICAgICAqZmlsZXAgPSAnXDAn OworICAgICAgCisgICAgICAvL2ZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGRpci5uYW1lKTsgaSsr KQorICAgICAgLy8JREJHKCIweCV4ICAiLCBkaXIubmFtZVtpXSk7CisgICAgICBEQkcoIlxuZGly Lm5hbWU9JXMsIGZpbGVuYW1lPaG+JXOhvywgZGlyLmF0dHI9MHgleCwiCisJICAgICAiLi4ubmV4 dCB3aGlsZSIsCisJICAgICBkaXIubmFtZSwgZmlsZW5hbWUsIGRpci5hdHRyKTsKKyAgICAgIGNv dW50Kys7CisgICAgICAvKmlmKHN0cmNtcChmaWxlbmFtZSwgIi4iKSAmJiBzdHJjbXAoZmlsZW5h bWUsICIuLiIpKQorCXsKKwkgIERCRygiez09PT09PT09PT09PT09PiIpOworCSAgc3RydWN0IGdy dWJfZmF0X2RhdGEgKmRhdGEyID0gTlVMTDsKKwkgIGRhdGEyID0gKHN0cnVjdCBncnViX2ZhdF9k YXRhKiltYWxsb2Moc2l6ZW9mKCpkYXRhKSk7CisJICBtZW1jcHkoZGF0YTIsIGRhdGEsIHNpemVv ZigqZGF0YSkpOworCSAgZGF0YTItPmF0dHIgPSBkaXIuYXR0cjsKKwkgIGRhdGEyLT5maWxlX3Np emUgPSBncnViX2xlX3RvX2NwdTMyIChkaXIuZmlsZV9zaXplKTsKKwkgIGRhdGEyLT5maWxlX2Ns dXN0ZXIgPSAoKGdydWJfbGVfdG9fY3B1MTYgKGRpci5maXJzdF9jbHVzdGVyX2hpZ2gpIDw8IDE2 KQorCQkJCSB8IGdydWJfbGVfdG9fY3B1MTYgKGRpci5maXJzdF9jbHVzdGVyX2xvdykpOworCSAg ZGF0YTItPmN1cl9jbHVzdGVyX251bSA9IH4wVTsKKwkgIChncnViX2ZhdF9pdGVyYXRlX2Rpcihi cywgZGF0YTIsIE5VTEwsIE5VTEwpIDwgMCkgPyBEQkcoImVycm9yICEhISEhISIpIDogMDsKKwkg IGZyZWUoZGF0YTIpOworCSAgREJHKCI8PT09PT09PT09PT09PT09PT09PX0iKTsKKwl9CisgICAg ICAqLworICAgICAgaWYgKGhvb2sgJiYgaG9vayAoZmlsZW5hbWUsICZkaXIsIGNsb3N1cmUpKQor ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgZnJlZShnYm5hbWUpOworICBmcmVlIChmaWxlbmFt ZSk7CisgIGZyZWUgKHVuaWJ1Zik7CisKKyAgcmV0dXJuIDA7Cit9CisKKworCisvL7SruPhncnVi X2ZhdF9maW5kX2hvb2u1xLLOyv1jbG9zdXJlCitzdHJ1Y3QgZ3J1Yl9mYXRfZmluZF9kaXJfY2xv c3VyZQoreworICBzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqZGF0YTsKKyAgaW50ICgqaG9vaykgKGNv bnN0IGNoYXIgKmZpbGVuYW1lLAorCSAgICAgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9kaXJob29rX2lu Zm8gKmluZm8sCisJICAgICAgIHZvaWQgKmNsb3N1cmUpOworICB2b2lkICpjbG9zdXJlOworICBj aGFyICpkaXJuYW1lOworICBpbnQgY2FsbF9ob29rOworICBpbnQgZm91bmQ7Cit9OworCisKK3N0 YXRpYyBpbnQKK2dydWJfZmF0X2ZpbmRfZGlyX2hvb2sgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBz dHJ1Y3QgZ3J1Yl9mYXRfZGlyX2VudHJ5ICpkaXIsCisJCQl2b2lkICpjbG9zdXJlKQoreworICBz dHJ1Y3QgZ3J1Yl9mYXRfZmluZF9kaXJfY2xvc3VyZSAqYyA9IGNsb3N1cmU7CisgIHN0cnVjdCBn cnViX2Rpcmhvb2tfaW5mbyBpbmZvOworICBtZW1zZXQgKCZpbmZvLCAwLCBzaXplb2YgKGluZm8p KTsKKworICBpbmZvLmRpciA9ICEhIChkaXItPmF0dHIgJiBHUlVCX0ZBVF9BVFRSX0RJUkVDVE9S WSk7CisgIGluZm8uY2FzZV9pbnNlbnNpdGl2ZSA9IDE7CisgIGluZm8ubXRpbWVzZXQgPSAoZGly LT5jX2RhdGUgfHwgZGlyLT5jX3RpbWUpOworICBpbmZvLm10aW1lID0gKCgoZ3J1Yl91aW50MzJf dClkaXItPmNfZGF0ZSA8PCAxNikgfCAoZGlyLT5jX3RpbWUpKTsKKyAgaW5mby5maWxlc2l6ZSA9 IGRpci0+ZmlsZV9zaXplOworICAKKyAgREJHKCJ0YXJnZXQgZmlsZSChviVzob89PT09PT0iLCBj LT5kaXJuYW1lKTsKKyAgaWYgKGRpci0+YXR0ciAmIEdSVUJfRkFUX0FUVFJfVk9MVU1FX0lEKQor ICAgIHsKKyAgICAgIERCRygidm9sdW1lIGlkICwgaWdub3JlPT09PT09Iik7CisgICAgICByZXR1 cm4gMDsKKyAgICB9CisgIAorICBpZiAoKihjLT5kaXJuYW1lKSA9PSAnXDAnICYmIChjLT5jYWxs X2hvb2spKQorICAgIHsgLy+08r+qtcTKx8S/wrwgIC94L3BhdGgxL3BhdGgyLworICAgICAgLy+3 tbvYMKOsyMNpdGVyYXRlyrHWu8rHtPLTodDFz6KjrLb4srvNy7P2d2hpbGUKKyAgICAgIGMtPmZv dW5kID0gMTsKKyAgICAgIGlmKCEoYy0+ZGF0YS0+YXR0ciAmIEdSVUJfRkFUX0FUVFJfRElSRUNU T1JZKSkKKwl7CisJICBwcmludGYoIml0J3Mgbm90IGEgZGlyZWN0b3J5IVxuIik7CisJfQorICAg ICAgREJHKCJsaXN0IHRoZSBkaXIgob4lc6G/PT09PT09PT09PT0iLAorCSAgKChzdHJ1Y3QgbHNf Y3RybCopYy0+Y2xvc3VyZSktPmRpcm5hbWUpOworICAgICAgcmV0dXJuIGMtPmhvb2sgKGZpbGVu YW1lLCAmaW5mbywgYy0+Y2xvc3VyZSk7CisgICAgfQorCisgIAorICBpZiAoZ3J1Yl9zdHJjYXNl Y21wIChjLT5kaXJuYW1lLCBmaWxlbmFtZSkgPT0gMCkKKyAgICB7IC8vtPK/qrXEysfOxLz+IC94 L3BhdGgxL2ZpbGUKKyAgICAgIERCRygiZm91bmQ9PT09PT0iKTsKKyAgICAgIHN0cnVjdCBncnVi X2ZhdF9kYXRhICpkYXRhID0gYy0+ZGF0YTsKKworICAgICAgYy0+Zm91bmQgPSAxOworICAgICAg ZGF0YS0+YXR0ciA9IGRpci0+YXR0cjsKKyAgICAgIGRhdGEtPmZpbGVfc2l6ZSA9IGdydWJfbGVf dG9fY3B1MzIgKGRpci0+ZmlsZV9zaXplKTsKKyAgICAgIGRhdGEtPmZpbGVfY2x1c3RlciA9ICgo Z3J1Yl9sZV90b19jcHUxNiAoZGlyLT5maXJzdF9jbHVzdGVyX2hpZ2gpIDw8IDE2KQorCQkJICAg ICAgIHwgZ3J1Yl9sZV90b19jcHUxNiAoZGlyLT5maXJzdF9jbHVzdGVyX2xvdykpOworICAgICAg ZGF0YS0+Y3VyX2NsdXN0ZXJfbnVtID0gfjBVOworCisgICAgICBpZiAoYy0+Y2FsbF9ob29rKQor CWMtPmhvb2sgKGZpbGVuYW1lLCAmaW5mbywgYy0+Y2xvc3VyZSk7CisKKyAgICAgIHJldHVybiAx OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIERCRygibm90IG1hdGNoPT09PT09Iik7Cisg ICAgfQorICByZXR1cm4gMDsKK30KKworCisvKiBGaW5kIHRoZSB1bmRlcmx5aW5nIGRpcmVjdG9y eSBvciBmaWxlIGluIFBBVEggYW5kIHJldHVybiB0aGUKKyAgIG5leHQgcGF0aC4gSWYgdGhlcmUg aXMgbm8gbmV4dCBwYXRoIG9yIGFuIGVycm9yIG9jY3VycywgcmV0dXJuIE5VTEwuCisgICBJZiBI T09LIGlzIHNwZWNpZmllZCwgY2FsbCBpdCB3aXRoIGVhY2ggZmlsZSBuYW1lLiAgKi8KKy8v1NrT yWRhdGHWuLaotcTEv8K8z8Ky6dXS08lwYXRowre+tta4tqi1xM7EvP680LvyzsS8/gorLy/V0rW9 1q66872708kgZ3J1Yl9mYXRfZmluZF9kaXJfaG9va7qvyv20psDto6zG5NbQY2xvc3VyZbLOyv3K x7nYvPwKK2NoYXIgKgorZ3J1Yl9mYXRfZmluZF9kaXIgKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBz dHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqZGF0YSwKKwkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJICAg aW50ICgqaG9vaykgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCWNvbnN0IHN0cnVjdCBncnVi X2Rpcmhvb2tfaW5mbyAqaW5mbywKKwkJCQl2b2lkICpjbG9zdXJlKSwKKwkJICAgdm9pZCAqY2xv c3VyZSkKK3sKKyAgY2hhciAqZGlybmFtZSwgKmRpcnA7CisgIHN0cnVjdCBncnViX2ZhdF9maW5k X2Rpcl9jbG9zdXJlIGM7CisgIERCRygidG8gc2VhcmNoIFslc10uLi5pbiBkYXRhLT5hdHRyPTB4 JXgiLCBwYXRoLCBkYXRhLT5hdHRyKTsKKyAgaWYgKCEgKGRhdGEtPmF0dHIgJiBHUlVCX0ZBVF9B VFRSX0RJUkVDVE9SWSkpCisgICAgeworICAgICAgcHJpbnRmKCJub3QgYSBkaXJlY3RvcnkuLi4u Li4uLi4uLlxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgLyogRXh0cmFjdCBhIGRp cmVjdG9yeSBuYW1lLiAgKi8KKyAgd2hpbGUgKCpwYXRoID09ICcvJykKKyAgICBwYXRoKys7CisK KyAgZGlycCA9IGdydWJfc3RyY2hyIChwYXRoLCAnLycpOworICBpZiAoZGlycCkKKyAgICB7Cisg ICAgICB1bnNpZ25lZCBsZW4gPSBkaXJwIC0gcGF0aDsKKworICAgICAgZGlybmFtZSA9IChjaGFy KiltYWxsb2MgKGxlbiArIDEpOworICAgICAgaWYgKCEgZGlybmFtZSkKKwlyZXR1cm4gMDsKKwor ICAgICAgbWVtY3B5IChkaXJuYW1lLCBwYXRoLCBsZW4pOworICAgICAgZGlybmFtZVtsZW5dID0g J1wwJzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgLyogVGhpcyBpcyBhY3R1YWxseSBhIGZp bGUuICAqLworICAgICAgZGlybmFtZSA9IGdydWJfc3RyZHVwIChwYXRoKTsKKyAgICB9CisgIERC Rygic2VhcmNoaW5nIFwiJXNcIj09PT09PSIsIGRpcm5hbWUpOworICBjLmRhdGEgPSBkYXRhOwor ICBjLmhvb2sgPSBob29rOworICBjLmNsb3N1cmUgPSBjbG9zdXJlOworICBjLmRpcm5hbWUgPWRp cm5hbWU7CisgIGMuZm91bmQgPSAwOworICBjLmNhbGxfaG9vayA9ICghIGRpcnAgJiYgaG9vayk7 ICAvL9XrttTEv8K8tcRob29rCisgIAorICBpbnQgcmV0ID0gZ3J1Yl9mYXRfaXRlcmF0ZV9kaXIg KGJzLCBkYXRhLCBncnViX2ZhdF9maW5kX2Rpcl9ob29rLCAmYyk7CisgIGlmKDAgPT0gcmV0ICYm ICFjLmZvdW5kKQorICAgIHsKKyAgICAgIGdfZXJyID0gR1JVQl9FUlJfTk9UX0ZPVU5EOyAKKyAg ICAgIHByaW50ZigiZmlsZSBub3QgZm91bmQuLlxuIik7CisgICAgfQorICBlbHNlIGlmKHJldCA8 IDApCisgICAgeworICAgICAgZ19lcnIgPSBHUlVCX0VSUl9VTktOT1dOOworICAgICAgcHJpbnRm KCJpdGVyYXRlIGVycm9yIVxuIik7CisgICAgfQorICAgIAorICAKKyAgZnJlZSAoZGlybmFtZSk7 CisKKyAgcmV0dXJuIChjLmZvdW5kICYmIDA9PXJldCkgPyBkaXJwIDogMDsKK30KKworCisKKwor CitncnViX2Vycl90CitncnViX2ZhdF9vcGVuIChncnViX2ZpbGVfdCBmaWxlLCBjb25zdCBjaGFy ICpuYW1lKQoreworICBzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqZGF0YSA9IDA7CisgIGNoYXIgKnAg PSAoY2hhciAqKSBuYW1lOworCisgIAorICBkYXRhID0gZ3J1Yl9mYXRfbW91bnQgKGZpbGUtPmJz LCBmaWxlLT5wYXJ0X29mZl9zZWN0b3IpOworICBpZiAoISBkYXRhKQorICAgIHsKKyAgICAgIHBy aW50ZigiWyVzXTogbW91bnQgZXJyb3IhXG4iLCBuYW1lKTsKKyAgICAgIGdvdG8gZmFpbDsKKyAg ICB9CisKKyAgaW50IGkgPSAwOworICBkbworICAgIHsKKyAgICAgIHAgPSBncnViX2ZhdF9maW5k X2RpciAoZmlsZS0+YnMsIGRhdGEsIHAsIDAsIDApOworICAgICAgREJHKCIlZCBjeWNsZSBwYXN0 ob5wYXRoPSVzob8uLi4uLi4uIiwgaSsxLCBwKTsKKyAgICAgIC8vZXJyb3IganVkZ2UuLi4uLi4K KyAgICB9CisgIHdoaWxlIChwKTsKKworICBEQkcoImV4aXQgd2hpbGU9PT09PT0iKTsKKyAKKyAg aWYgKChHUlVCX0VSUl9OT05FID09IGdfZXJyKSAKKyAgICAgICYmIChkYXRhLT5hdHRyICYgR1JV Ql9GQVRfQVRUUl9ESVJFQ1RPUlkpKQorICAgIHsKKyAgICAgIHByaW50ZiAoIlslc106IG5vdCBh IGZpbGUhXG4iLCBuYW1lKTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIAorICBpZihHUlVC X0VSUl9OT05FID09IGdfZXJyKQorICAgIHsKKyAgICAgIERCRygiZm91bmQ9PT09PT0iKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGYoIm5vdCBmb3VuZCBvciBlcnJvciFcbiIp OworICAgICAgZ290byBmYWlsOworICAgIH0KKworICBEQkcoIjExMTExMTExMTExMTExMTExMTEx MTExIik7CisgIGZpbGUtPmRhdGEgPSBkYXRhOworICBmaWxlLT5zaXplID0gZGF0YS0+ZmlsZV9z aXplOworICByZXR1cm4gMDsKKworIGZhaWw6CisgIGZyZWUoZGF0YSk7IAorICBmaWxlLT5kYXRh ID0gTlVMTDsKKyAgREJHKCIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIik7CisgIHJldHVybiAxOwor fQorCisKKyNkZWZpbmUgICAgVElNRV9CSVQgICAgMHhGRkZGCisjZGVmaW5lICAgIFRJTUVfSE9V Ul9CSVQgICAgMHhGODAwCisjZGVmaW5lICAgIFRJTUVfTUlOVVRFX0JJVCAgICAweDA3RTAKKyNk ZWZpbmUgICAgVElNRV9TRUNPTkRfQklUICAgIDB4MDAxRgorI2RlZmluZSAgICBEQVRFX0JJVCAg ICAweEZGRkYwMDAwCisjZGVmaW5lICAgIERBVEVfWUVBUl9CSVQgICAgMHhGRTAwCisjZGVmaW5l ICAgIERBVEVfTU9OVEhfQklUICAgIDB4MDFFMAorI2RlZmluZSAgICBEQVRFX0RBWV9CSVQgICAg MHgwMDFGCitzdGF0aWMgIGludCBmaW5kX3RoZW5fbHNfaG9vayhjb25zdCBjaGFyICpmaWxlbmFt ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBncnViX2Rpcmhvb2tfaW5mbyAqaW5mbywgdm9pZCAqY2xv c3VyZSkKK3sKKyAgc3RydWN0IGxzX2N0cmwqIGN0cmwgPSAoc3RydWN0IGxzX2N0cmwqKWNsb3N1 cmU7CisgIERCRygiZGV0YWlsPSVkIiwgY3RybC0+ZGV0YWlsKTsKKyAgcHJpbnRmKCIlcyIsIGZp bGVuYW1lKTsKKyAgaWYoIWN0cmwtPmRldGFpbCkKKyAgICB7CisgICAgICBwcmludGYoIlxuIik7 CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGYoIlx0 Iik7CisgICAgfQorCisKKyAgcHJpbnRmKCIldWJ5dGVzXHQiLCAoaW5mby0+ZmlsZXNpemUpKTsK KyAgcHJpbnRmKCIlc1x0IiwgKGluZm8tPmRpciA/ICJkaXIiIDogImZpbGUiKSk7CisgIGdydWJf dWludDE2X3QgdGltZSA9ICgoaW5mby0+bXRpbWUpICYgVElNRV9CSVQpOworICBncnViX3VpbnQx Nl90IGRhdGUgPSAoKGluZm8tPm10aW1lKSAmIERBVEVfQklUKSA+PiAxNjsKKyAgCisgIHByaW50 ZigiJTA0ZC8lMDJkLyUwMmRcdCIsCisJICgoZGF0ZSAmIERBVEVfWUVBUl9CSVQpID4+IDkpICsg MTk4MCwKKwkgKGRhdGUgJiBEQVRFX01PTlRIX0JJVCkgPj4gNSwKKwkgKGRhdGUgJiBEQVRFX0RB WV9CSVQpKTsKKyAgcHJpbnRmKCIlMDJkOiUwMmQ6JTAyZFxuIiwgCisJICh0aW1lICYgVElNRV9I T1VSX0JJVCkgPj4gMTEsCisJICh0aW1lICYgVElNRV9NSU5VVEVfQklUKSA+PiA1LAorCSB0aW1l ICYgVElNRV9TRUNPTkRfQklUKSAqIDI7ICAKKyAgCisgIHJldHVybiAwOyAgLy8g1+7W1be1u9i4 +Gl0ZXJhdGUKK30KKworCitncnViX2Vycl90CitncnViX2ZhdF9scyAoZ3J1Yl9maWxlX3QgZmls ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkgICAgICBpbnQgKCpob29rKSAoY29uc3QgY2hhciAqZmls ZW5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9kaXJob29rX2luZm8gKmluZm8sIHZvaWQg KmNsb3N1cmUpLAorCSAgICAgIHZvaWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBncnViX2ZhdF9k YXRhICpkYXRhID0gMDsKKyAgZ3J1Yl9zaXplX3QgbGVuOworICBjaGFyICpkaXJuYW1lID0gMDsK KyAgY2hhciAqcDsKKyAgCisgIGRhdGEgPSBncnViX2ZhdF9tb3VudCAoZmlsZS0+YnMsIGZpbGUt PnBhcnRfb2ZmX3NlY3Rvcik7CisgIGlmICghIGRhdGEpCisgICAgZ290byBmYWlsOworCisgIGZp bGUtPmRhdGEgPSBkYXRhOworICAvKiBNYWtlIHN1cmUgdGhhdCBESVJOQU1FIHRlcm1pbmF0ZXMg d2l0aCAnLycuICAqLworICBsZW4gPSBzdHJsZW4ocGF0aCk7CisgIGRpcm5hbWUgPSAoY2hhciop bWFsbG9jIChsZW4gKyAxICsgMSk7CisgIGlmICghIGRpcm5hbWUpCisgICAgZ290byBmYWlsOwor ICBtZW1jcHkgKGRpcm5hbWUsIHBhdGgsIGxlbik7CisgIHAgPSBkaXJuYW1lICsgbGVuOworICBp ZiAocGF0aFtsZW4gLSAxXSAhPSAnLycpCisgICAgKnArKyA9ICcvJzsKKyAgKnAgPSAnXDAnOwor ICBwID0gZGlybmFtZTsKKworICBkbworICAgIHsKKyAgICAgIHAgPSBncnViX2ZhdF9maW5kX2Rp ciAoZmlsZS0+YnMsIGRhdGEsIHAsIGZpbmRfdGhlbl9sc19ob29rLCBjbG9zdXJlKTsKKyAgICB9 CisgIHdoaWxlIChwICYmIGdfZXJyID09IEdSVUJfRVJSX05PTkUpOworCisgIAorCisgZmFpbDoK KworICBmcmVlIChkaXJuYW1lKTsKKyAgZnJlZSAoZGF0YSk7ICBmaWxlLT5kYXRhID0gTlVMTDsK KyAgCisgIHJldHVybiBnX2VycjsKK30KKworCitncnViX2Vycl90IGdydWJfZmF0X2Nsb3NlKGdy dWJfZmlsZV90IGZpbGUpCit7CisgIGZyZWUoZmlsZS0+ZGF0YSk7CisgIHJldHVybiBnX2VycjsK K30KKworCitncnViX3NzaXplX3QgZ3J1Yl9mYXRfcmVhZChncnViX2ZpbGVfdCBmaWxlLCBncnVi X29mZl90IG9mZnNldCwKKwkJCSAgIGdydWJfc2l6ZV90IGxlbiwgY2hhciAqYnVmKQoreworICBy ZXR1cm4gZ3J1Yl9mYXRfcmVhZF9kYXRhKGZpbGUtPmJzLCBmaWxlLT5kYXRhLCBOVUxMLCBOVUxM LCBvZmZzZXQsIGxlbiwgYnVmKTsKK30KKworCisKKworCisKKwpkaWZmIC0tZXhjbHVkZT0uc3Zu IC1ycE4gLVU4IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZhdC5oIHhlbi00LjEu Mi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZhdC5oCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2Vt dS1xZW11LXhlbi9mYXQuaAkxOTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAorKysg eGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZmF0LmgJMjAxMi0xMi0yOCAxNjowMjo0 MS4wMDI5MzgwMTkgKzA4MDAKQEAgLTAsMCArMSwxNjAgQEAKKyNpZm5kZWYgRlNfRkFUX0gKKyNk ZWZpbmUgRlNfRkFUX0gKKworCisjaW5jbHVkZSAiZnMtdHlwZXMuaCIKKyNpbmNsdWRlICJibG9j a19pbnQuaCIKKyNpbmNsdWRlICJmcy1jb21tLmgiCisjaW5jbHVkZSAiZ3J1Yl9lcnIuaCIKKwor CisjZGVmaW5lIEdSVUJfRElTS19TRUNUT1JfQklUUyAgICAgIDkKKyNkZWZpbmUgR1JVQl9GQVRf RElSX0VOVFJZX1NJWkUJMzIKKworI2RlZmluZSBHUlVCX0ZBVF9BVFRSX1JFQURfT05MWQkweDAx CisjZGVmaW5lIEdSVUJfRkFUX0FUVFJfSElEREVOCTB4MDIKKyNkZWZpbmUgR1JVQl9GQVRfQVRU Ul9TWVNURU0JMHgwNAorI2RlZmluZSBHUlVCX0ZBVF9BVFRSX1ZPTFVNRV9JRAkweDA4CisjZGVm aW5lIEdSVUJfRkFUX0FUVFJfRElSRUNUT1JZCTB4MTAKKyNkZWZpbmUgR1JVQl9GQVRfQVRUUl9B UkNISVZFCTB4MjAKKworI2RlZmluZSBHUlVCX0ZBVF9NQVhGSUxFCTI1NgorCisjZGVmaW5lIEdS VUJfRkFUX0FUVFJfTE9OR19OQU1FCShHUlVCX0ZBVF9BVFRSX1JFQURfT05MWSBcCisJCQkJIHwg R1JVQl9GQVRfQVRUUl9ISURERU4gXAorCQkJCSB8IEdSVUJfRkFUX0FUVFJfU1lTVEVNIFwKKwkJ CQkgfCBHUlVCX0ZBVF9BVFRSX1ZPTFVNRV9JRCkKKyNkZWZpbmUgR1JVQl9GQVRfQVRUUl9WQUxJ RAkoR1JVQl9GQVRfQVRUUl9SRUFEX09OTFkgXAorCQkJCSB8IEdSVUJfRkFUX0FUVFJfSElEREVO IFwKKwkJCQkgfCBHUlVCX0ZBVF9BVFRSX1NZU1RFTSBcCisJCQkJIHwgR1JVQl9GQVRfQVRUUl9E SVJFQ1RPUlkgXAorCQkJCSB8IEdSVUJfRkFUX0FUVFJfQVJDSElWRSBcCisJCQkJIHwgR1JVQl9G QVRfQVRUUl9WT0xVTUVfSUQpCisKK3N0cnVjdCBncnViX2ZhdF9icGIKK3sKKyAgZ3J1Yl91aW50 OF90IGptcF9ib290WzNdOworICBncnViX3VpbnQ4X3Qgb2VtX25hbWVbOF07CisgIGdydWJfdWlu dDE2X3QgYnl0ZXNfcGVyX3NlY3RvcjsKKyAgZ3J1Yl91aW50OF90IHNlY3RvcnNfcGVyX2NsdXN0 ZXI7CisgIGdydWJfdWludDE2X3QgbnVtX3Jlc2VydmVkX3NlY3RvcnM7CisgIGdydWJfdWludDhf dCBudW1fZmF0czsKKyAgZ3J1Yl91aW50MTZfdCBudW1fcm9vdF9lbnRyaWVzOworICBncnViX3Vp bnQxNl90IG51bV90b3RhbF9zZWN0b3JzXzE2OworICBncnViX3VpbnQ4X3QgbWVkaWE7CisgIGdy dWJfdWludDE2X3Qgc2VjdG9yc19wZXJfZmF0XzE2OworICBncnViX3VpbnQxNl90IHNlY3RvcnNf cGVyX3RyYWNrOworICBncnViX3VpbnQxNl90IG51bV9oZWFkczsKKyAgZ3J1Yl91aW50MzJfdCBu dW1faGlkZGVuX3NlY3RvcnM7CisgIGdydWJfdWludDMyX3QgbnVtX3RvdGFsX3NlY3RvcnNfMzI7 CisgIHVuaW9uCisgIHsKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICBncnViX3VpbnQ4X3QgbnVt X3BoX2RyaXZlOworICAgICAgZ3J1Yl91aW50OF90IHJlc2VydmVkOworICAgICAgZ3J1Yl91aW50 OF90IGJvb3Rfc2lnOworICAgICAgZ3J1Yl91aW50MzJfdCBudW1fc2VyaWFsOworICAgICAgZ3J1 Yl91aW50OF90IGxhYmVsWzExXTsKKyAgICAgIGdydWJfdWludDhfdCBmc3R5cGVbOF07CisgICAg fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZmF0MTJfb3JfZmF0MTY7CisgICAgc3RydWN0Cisg ICAgeworICAgICAgZ3J1Yl91aW50MzJfdCBzZWN0b3JzX3Blcl9mYXRfMzI7CisgICAgICBncnVi X3VpbnQxNl90IGV4dGVuZGVkX2ZsYWdzOworICAgICAgZ3J1Yl91aW50MTZfdCBmc192ZXJzaW9u OworICAgICAgZ3J1Yl91aW50MzJfdCByb290X2NsdXN0ZXI7CisgICAgICBncnViX3VpbnQxNl90 IGZzX2luZm87CisgICAgICBncnViX3VpbnQxNl90IGJhY2t1cF9ib290X3NlY3RvcjsKKyAgICAg IGdydWJfdWludDhfdCByZXNlcnZlZFsxMl07CisgICAgICBncnViX3VpbnQ4X3QgbnVtX3BoX2Ry aXZlOworICAgICAgZ3J1Yl91aW50OF90IHJlc2VydmVkMTsKKyAgICAgIGdydWJfdWludDhfdCBi b290X3NpZzsKKyAgICAgIGdydWJfdWludDMyX3QgbnVtX3NlcmlhbDsKKyAgICAgIGdydWJfdWlu dDhfdCBsYWJlbFsxMV07CisgICAgICBncnViX3VpbnQ4X3QgZnN0eXBlWzhdOworICAgIH0gX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZhdDMyOworICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQp KSB2ZXJzaW9uX3NwZWNpZmljOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVj dCBncnViX2ZhdF9kaXJfZW50cnkKK3sKKyAgZ3J1Yl91aW50OF90IG5hbWVbMTFdOworICBncnVi X3VpbnQ4X3QgYXR0cjsKKyAgZ3J1Yl91aW50OF90IG50X3Jlc2VydmVkOworICBncnViX3VpbnQ4 X3QgY190aW1lX3RlbnRoOworICBncnViX3VpbnQxNl90IGNfdGltZTsKKyAgZ3J1Yl91aW50MTZf dCBjX2RhdGU7CisgIGdydWJfdWludDE2X3QgYV9kYXRlOworICBncnViX3VpbnQxNl90IGZpcnN0 X2NsdXN0ZXJfaGlnaDsKKyAgZ3J1Yl91aW50MTZfdCB3X3RpbWU7CisgIGdydWJfdWludDE2X3Qg d19kYXRlOworICBncnViX3VpbnQxNl90IGZpcnN0X2NsdXN0ZXJfbG93OworICBncnViX3VpbnQz Ml90IGZpbGVfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZ3J1 Yl9mYXRfbG9uZ19uYW1lX2VudHJ5Cit7CisgIGdydWJfdWludDhfdCBpZDsKKyAgZ3J1Yl91aW50 MTZfdCBuYW1lMVs1XTsKKyAgZ3J1Yl91aW50OF90IGF0dHI7CisgIGdydWJfdWludDhfdCByZXNl cnZlZDsKKyAgZ3J1Yl91aW50OF90IGNoZWNrc3VtOworICBncnViX3VpbnQxNl90IG5hbWUyWzZd OworICBncnViX3VpbnQxNl90IGZpcnN0X2NsdXN0ZXI7CisgIGdydWJfdWludDE2X3QgbmFtZTNb Ml07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGdydWJfZmF0X2RhdGEK K3sKKyAgaW50IGxvZ2ljYWxfc2VjdG9yX2JpdHM7CisgIGdydWJfdWludDMyX3QgbnVtX3NlY3Rv cnM7CisKKyAgZ3J1Yl91aW50MzJfdCBmYXRfc2VjdG9yOworICBncnViX3VpbnQzMl90IHNlY3Rv cnNfcGVyX2ZhdDsKKyAgaW50IGZhdF9zaXplOworCisgIGdydWJfdWludDMyX3Qgcm9vdF9jbHVz dGVyOworICBncnViX3VpbnQzMl90IHJvb3Rfc2VjdG9yOworICBncnViX3VpbnQzMl90IG51bV9y b290X3NlY3RvcnM7CisKKyAgaW50IGNsdXN0ZXJfYml0czsKKyAgZ3J1Yl91aW50MzJfdCBjbHVz dGVyX2VvZl9tYXJrOworICBncnViX3VpbnQzMl90IGNsdXN0ZXJfc2VjdG9yOworICBncnViX3Vp bnQzMl90IG51bV9jbHVzdGVyczsKKworICBncnViX3VpbnQ4X3QgYXR0cjsKKyAgZ3J1Yl9zc2l6 ZV90IGZpbGVfc2l6ZTsKKyAgZ3J1Yl91aW50MzJfdCBmaWxlX2NsdXN0ZXI7CisgIGdydWJfdWlu dDMyX3QgY3VyX2NsdXN0ZXJfbnVtOworICBncnViX3VpbnQzMl90IGN1cl9jbHVzdGVyOworCisg IGdydWJfdWludDMyX3QgdXVpZDsKK307CisKKworCisKKworCisKK3N0cnVjdCBncnViX2ZhdF9k YXRhKiAKK2dydWJfZmF0X21vdW50IChCbG9ja0RyaXZlclN0YXRlICpicywgZ3J1Yl91aW50MzJf dCBwYXJ0X29mZl9zZWN0b3IpOworCitncnViX2Vycl90CitncnViX2ZhdF9vcGVuIChncnViX2Zp bGVfdCBmaWxlLCBjb25zdCBjaGFyICpuYW1lKTsKKworZ3J1Yl9lcnJfdAorZ3J1Yl9mYXRfbHMg KGdydWJfZmlsZV90IGZpbGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJICAgICAgaW50ICgqaG9vaykg KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IGdydWJfZGlyaG9va19p bmZvICppbmZvLAorCQkJICAgdm9pZCAqY2xvc3VyZSksCisJICAgICB2b2lkICpjbG9zdXJlKTsK KworZ3J1Yl9lcnJfdCBncnViX2ZhdF9jbG9zZShncnViX2ZpbGVfdCBmaWxlKTsKKworZ3J1Yl9z c2l6ZV90IGdydWJfZmF0X3JlYWQoZ3J1Yl9maWxlX3QgZmlsZSwgZ3J1Yl9vZmZfdCBvZmZzZXQs CisJCSAgZ3J1Yl9zaXplX3QgbGVuLCBjaGFyICpidWYpOworCisKKyNlbmRpZgpkaWZmIC0tZXhj bHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZzLWNv bW0uaCB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9mcy1jb21tLmgKLS0tIHhlbi00 LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZzLWNvbW0uaAkxOTcwLTAxLTAxIDA3OjAwOjAw LjAwMDAwMDAwMCArMDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZnMt Y29tbS5oCTIwMTItMTItMjggMTY6MDI6NDEuMDAzODQ2ODk3ICswODAwCkBAIC0wLDAgKzEsNjAg QEAKKyNpZm5kZWYgX0ZTX0NPTU1fSAorI2RlZmluZSBfRlNfQ09NTV9ICisKKyNpbmNsdWRlICJm cy10eXBlcy5oIgorI2luY2x1ZGUgImJsb2NrX2ludC5oIgorI2luY2x1ZGUgImdydWJfZXJyLmgi CisjaW5jbHVkZSAiZGVidWcuaCIKKwordHlwZWRlZiBzdHJ1Y3QgIGdydWJfZmlsZQoreworICB2 b2lkICpkYXRhOworICBCbG9ja0RyaXZlclN0YXRlICpiczsKKyAgdWludDMyX3QgcGFydF9vZmZf c2VjdG9yOworICBncnViX3NpemVfdCBzaXplOworICBncnViX29mZl90IG9mZnNldDsKKyAgLyog VGhpcyBpcyBjYWxsZWQgd2hlbiBhIHNlY3RvciBpcyByZWFkLiBVc2VkIG9ubHkgZm9yIGEgZGlz ayBkZXZpY2UuICAqLworICB2b2lkICgqcmVhZF9ob29rKSAoZ3J1Yl9kaXNrX2FkZHJfdCBzZWN0 b3IsCisJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQgKmNsb3N1 cmUpOworICB2b2lkICpjbG9zdXJlOworfSpncnViX2ZpbGVfdDsKKworc3RydWN0IGdydWJfZGly aG9va19pbmZvCit7CisgIHVuc2lnbmVkIGRpcjoxOworICB1bnNpZ25lZCBtdGltZXNldDoxOwor ICB1bnNpZ25lZCBjYXNlX2luc2Vuc2l0aXZlOjE7CisgIGdydWJfdWludDMyX3QgbXRpbWU7ICAg IC8vKGRhdGUgfCB0aW1lKQorICBncnViX3VpbnQzMl90IGZpbGVzaXplOworICBncnViX3VpbnQ2 NF90IGZpbGVzaXplX250ZnM7CisgIGdydWJfdWludDY0X3QgdGltZV9udGZzOworfTsKKworc3Ry dWN0IGxzX2N0cmwKK3sKKyAgdW5zaWduZWQgZGV0YWlsOjE7CisgIGNoYXIqIGRpcm5hbWU7Cit9 OworCisKKworCit0eXBlZGVmIGdydWJfZXJyX3QKKygqZ3J1Yl9vcGVuKSAoZ3J1Yl9maWxlX3Qg ZmlsZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK3R5cGVkZWYgZ3J1Yl9lcnJfdAorKCpncnViX2xz KSAoZ3J1Yl9maWxlX3QgZmlsZSwgY29uc3QgY2hhciAqcGF0aCwKKwkgICAgICBpbnQgKCpob29r KSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9kaXJob29r X2luZm8gKmluZm8sCisJCQkgICB2b2lkICpjbG9zdXJlKSwKKwkgICAgIHZvaWQgKmNsb3N1cmUp OworCit0eXBlZGVmIGdydWJfZXJyX3QgCisoKmdydWJfY2xvc2UpIChncnViX2ZpbGVfdCBmaWxl KTsKKwordHlwZWRlZiBncnViX3NzaXplX3QgCisoKmdydWJfcmVhZCkoZ3J1Yl9maWxlX3QgZmls ZSwgZ3J1Yl9vZmZfdCBvZmZzZXQsCisJCSAgZ3J1Yl9zaXplX3QgbGVuLCBjaGFyICpidWYpOwor CisKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00LjEuMi1hL3Rvb2xz L2lvZW11LXFlbXUteGVuL2ZzaGVscC5jIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVu L2ZzaGVscC5jCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9mc2hlbHAuYwkx OTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMv aW9lbXUtcWVtdS14ZW4vZnNoZWxwLmMJMjAxMi0xMi0yOCAxNjowMjo0MS4wMDQ5MzI0NTcgKzA4 MDAKQEAgLTAsMCArMSwzNjIgQEAKKy8qIGZzaGVscC5jIC0tIEZpbGVzeXN0ZW0gaGVscGVyIGZ1 bmN0aW9ucyAqLworLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisg KiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUsMjAwNiwyMDA3LDIwMDggIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JV QiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJl cnIuaCIKKyNpbmNsdWRlICJtaXNjLmgiCisjaW5jbHVkZSAiYmxvY2tfaW50LmgiCisjaW5jbHVk ZSAiZnNoZWxwLmgiCisjaW5jbHVkZSAibnRmcy5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKK3N0 cnVjdCBncnViX2ZzaGVscF9maW5kX2ZpbGVfY2xvc3VyZQoreworICBncnViX2ZzaGVscF9ub2Rl X3Qgcm9vdG5vZGU7CisgIGludCAoKml0ZXJhdGVfZGlyKSAoZ3J1Yl9mc2hlbHBfbm9kZV90IGRp ciwKKwkJICAgICAgaW50ICgqaG9vaykKKwkJICAgICAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAor CQkgICAgICAgZW51bSBncnViX2ZzaGVscF9maWxldHlwZSBmaWxldHlwZSwKKwkJICAgICAgIGdy dWJfZnNoZWxwX25vZGVfdCBub2RlLCB2b2lkICpjbG9zdXJlKSwKKwkJICAgICAgdm9pZCAqY2xv c3VyZSk7CisgIHZvaWQgKmNsb3N1cmU7CisgIGNoYXIgKigqcmVhZF9zeW1saW5rKSAoZ3J1Yl9m c2hlbHBfbm9kZV90IG5vZGUpOworICBpbnQgc3ltbGlua25lc3Q7CisgIGVudW0gZ3J1Yl9mc2hl bHBfZmlsZXR5cGUgZm91bmR0eXBlOworICBncnViX2ZzaGVscF9ub2RlX3QgY3VycnJvb3Q7Cit9 OworCitzdGF0aWMgdm9pZAorZnJlZV9ub2RlIChncnViX2ZzaGVscF9ub2RlX3Qgbm9kZSwgc3Ry dWN0IGdydWJfZnNoZWxwX2ZpbmRfZmlsZV9jbG9zdXJlICpjKQoreworICBpZiAobm9kZSAhPSBj LT5yb290bm9kZSAmJiBub2RlICE9IGMtPmN1cnJyb290KQorICAgIGdydWJfZnJlZSAobm9kZSk7 Cit9CisKK3N0cnVjdCBmaW5kX2ZpbGVfY2xvc3VyZQoreworICBjaGFyICpuYW1lOworICBlbnVt IGdydWJfZnNoZWxwX2ZpbGV0eXBlICp0eXBlOworICBncnViX2ZzaGVscF9ub2RlX3QgKm9sZG5v ZGU7CisgIGdydWJfZnNoZWxwX25vZGVfdCAqY3Vycm5vZGU7Cit9OworCitzdGF0aWMgaW50Citp dGVyYXRlIChjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkgZW51bSBncnViX2ZzaGVscF9maWxldHlw ZSBmaWxldHlwZSwKKwkgZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUsCisJIHZvaWQgKmNsb3N1cmUp Cit7CisgIHN0cnVjdCBmaW5kX2ZpbGVfY2xvc3VyZSAqYyA9IGNsb3N1cmU7CisgIERCRygibGlz dF9maWxlIGhvb2tlZCBieSBmc2hlbHA6aXRlcmF0ZSgpLCBmaWxlbmFtZT0lcyIsIGZpbGVuYW1l KTsKKyAgaWYgKGZpbGV0eXBlID09IEdSVUJfRlNIRUxQX1VOS05PV04gfHwKKyAgICAgIChncnVi X3N0cmNtcCAoYy0+bmFtZSwgZmlsZW5hbWUpICYmCisgICAgICAgKCEgKGZpbGV0eXBlICYgR1JV Ql9GU0hFTFBfQ0FTRV9JTlNFTlNJVElWRSkgfHwKKwlncnViX3N0cm5jYXNlY21wIChjLT5uYW1l LCBmaWxlbmFtZSwgR1JVQl9MT05HX01BWCkpKSkKKyAgICB7CisgICAgICBEQkcoIm5vdCBtYXRj aCEhIT4+Pj4+PiIpOworICAgICAgZ3J1Yl9mcmVlIChub2RlKTsKKyAgICAgIHJldHVybiAwOwor ICAgIH0KKworICAvKiBUaGUgbm9kZSBpcyBmb3VuZCwgc3RvcCBpdGVyYXRpbmcgb3ZlciB0aGUg bm9kZXMuICAqLworICAqKGMtPnR5cGUpID0gZmlsZXR5cGUgJiB+R1JVQl9GU0hFTFBfQ0FTRV9J TlNFTlNJVElWRTsKKyAgKihjLT5vbGRub2RlKSA9ICooYy0+Y3Vycm5vZGUpOworICAqKGMtPmN1 cnJub2RlKSA9IG5vZGU7CisgIERCRygiZm91bmQhIT4+Pj4+PiIpOworICByZXR1cm4gMTsKK30K Kworc3RhdGljIGdydWJfZXJyX3QKK2ZpbmRfZmlsZSAoY29uc3QgY2hhciAqY3VycnBhdGgsIGdy dWJfZnNoZWxwX25vZGVfdCBjdXJycm9vdCwKKwkgICBncnViX2ZzaGVscF9ub2RlX3QgKmN1cnJm b3VuZCwKKwkgICBzdHJ1Y3QgZ3J1Yl9mc2hlbHBfZmluZF9maWxlX2Nsb3N1cmUgKmMpCit7Cisg IGNoYXIgZnBhdGhbZ3J1Yl9zdHJsZW4gKGN1cnJwYXRoKSArIDFdOworICBjaGFyICpuYW1lID0g ZnBhdGg7CisgIGNoYXIgKm5leHQ7CisgIGVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgdHlwZSA9 IEdSVUJfRlNIRUxQX0RJUjsKKyAgZ3J1Yl9mc2hlbHBfbm9kZV90IGN1cnJub2RlID0gY3VycnJv b3Q7CisgIGdydWJfZnNoZWxwX25vZGVfdCBvbGRub2RlID0gY3VycnJvb3Q7CisKKyAgYy0+Y3Vy cnJvb3QgPSBjdXJycm9vdDsKKworICBncnViX3N0cm5jcHkgKGZwYXRoLCBjdXJycGF0aCwgZ3J1 Yl9zdHJsZW4gKGN1cnJwYXRoKSArIDEpOworCisgIC8qIFJlbW92ZSBhbGwgbGVhZGluZyBzbGFz aGVzLiAgKi8KKyAgd2hpbGUgKCpuYW1lID09ICcvJykKKyAgICBuYW1lKys7CisKKyAgaWYgKCEg Km5hbWUpCisgICAgeworICAgICAgKmN1cnJmb3VuZCA9IGN1cnJub2RlOworICAgICAgcmV0dXJu IDA7CisgICAgfQorCisgIGZvciAoOzspCisgICAgeworICAgICAgaW50IGZvdW5kOworICAgICAg c3RydWN0IGZpbmRfZmlsZV9jbG9zdXJlIGNjOworCisgICAgICAvKiBFeHRyYWN0IHRoZSBhY3R1 YWwgcGFydCBmcm9tIHRoZSBwYXRobmFtZS4gICovCisgICAgICBuZXh0ID0gZ3J1Yl9zdHJjaHIg KG5hbWUsICcvJyk7CisgICAgICBpZiAobmV4dCkKKwl7CisJICAvKiBSZW1vdmUgYWxsIGxlYWRp bmcgc2xhc2hlcy4gICovCisJICB3aGlsZSAoKm5leHQgPT0gJy8nKQorCSAgICAqKG5leHQrKykg PSAnXDAnOworCX0KKworICAgICAgLyogQXQgdGhpcyBwb2ludCBpdCBpcyBleHBlY3RlZCB0aGF0 IHRoZSBjdXJyZW50IG5vZGUgaXMgYQorCSBkaXJlY3RvcnksIGNoZWNrIGlmIHRoaXMgaXMgdHJ1 ZS4gICovCisgICAgICBpZiAodHlwZSAhPSBHUlVCX0ZTSEVMUF9ESVIpCisJeworCSAgZnJlZV9u b2RlIChjdXJybm9kZSwgYyk7CisJICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJ TEVfVFlQRSwgIm5vdCBhIGRpcmVjdG9yeSIpOworCX0KKworICAgICAgREJHKCJmaW5kX2ZpbGVf Y2xvc3VyZSBjYy5uYW1lPaG+JXOhvyIsIG5hbWUpOworICAgICAgY2MubmFtZSA9IG5hbWU7Cisg ICAgICBjYy50eXBlID0gJnR5cGU7CisgICAgICBjYy5vbGRub2RlID0gJm9sZG5vZGU7CisgICAg ICBjYy5jdXJybm9kZSA9ICZjdXJybm9kZTsKKyAgICAgIC8qIEl0ZXJhdGUgb3ZlciB0aGUgZGly ZWN0b3J5LiAgKi8KKyAgICAgIERCRygiKioqKioqZnNoZWxwOmZpbmRfZmlsZSBob29rZWQgYnkg XCdncnViX250ZnNfaXRlcmF0ZV9kaXJcJywiCisJICAibmVzdGVkIGFub3RoZXIgaG9vayBcJ2Zz aGVscDppdGVyYXRvclwnIik7CisgICAgICBmb3VuZCA9IGMtPml0ZXJhdGVfZGlyIChjdXJybm9k ZSwgaXRlcmF0ZSwgJmNjKTsgCisgICAgICBpZiAoISBmb3VuZCkKKwl7CisJICBpZiAoZ3J1Yl9l cnJubykKKwkgICAgcmV0dXJuIGdydWJfZXJybm87CisKKwkgIGJyZWFrOworCX0KKworICAgICAg LyogUmVhZCBpbiB0aGUgc3ltbGluayBhbmQgZm9sbG93IGl0LiAgKi8KKyAgICAgIGlmICh0eXBl ID09IEdSVUJfRlNIRUxQX1NZTUxJTkspCisJeworCSAgY2hhciAqc3ltbGluazsKKworCSAgLyog VGVzdCBpZiB0aGUgc3ltbGluayBkb2VzIG5vdCBsb29wLiAgKi8KKwkgIGlmICgrKyhjLT5zeW1s aW5rbmVzdCkgPT0gOCkKKwkgICAgeworCSAgICAgIGZyZWVfbm9kZSAoY3Vycm5vZGUsIGMpOwor CSAgICAgIGZyZWVfbm9kZSAob2xkbm9kZSwgYyk7CisJICAgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX1NZTUxJTktfTE9PUCwKKwkJCQkgInRvbyBkZWVwIG5lc3Rpbmcgb2Ygc3ltbGlu a3MiKTsKKwkgICAgfQorCisJICBzeW1saW5rID0gYy0+cmVhZF9zeW1saW5rIChjdXJybm9kZSk7 CisJICBmcmVlX25vZGUgKGN1cnJub2RlLCBjKTsKKworCSAgaWYgKCFzeW1saW5rKQorCSAgICB7 CisJICAgICAgZnJlZV9ub2RlIChvbGRub2RlLCBjKTsKKwkgICAgICByZXR1cm4gZ3J1Yl9lcnJu bzsKKwkgICAgfQorCisJICAvKiBUaGUgc3ltbGluayBpcyBhbiBhYnNvbHV0ZSBwYXRoLCBnbyBi YWNrIHRvIHRoZSByb290IGlub2RlLiAgKi8KKwkgIGlmIChzeW1saW5rWzBdID09ICcvJykKKwkg ICAgeworCSAgICAgIGZyZWVfbm9kZSAob2xkbm9kZSwgYyk7CisJICAgICAgb2xkbm9kZSA9IGMt PnJvb3Rub2RlOworCSAgICB9CisKKwkgIC8qIExvb2t1cCB0aGUgbm9kZSB0aGUgc3ltbGluayBw b2ludHMgdG8uICAqLworCSAgZmluZF9maWxlIChzeW1saW5rLCBvbGRub2RlLCAmY3Vycm5vZGUs IGMpOworCSAgdHlwZSA9IGMtPmZvdW5kdHlwZTsKKwkgIGdydWJfZnJlZSAoc3ltbGluayk7CisK KwkgIGlmIChncnViX2Vycm5vKQorCSAgICB7CisJICAgICAgZnJlZV9ub2RlIChvbGRub2RlLCBj KTsKKwkgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKwkgICAgfQorCX0KKworICAgICAgZnJlZV9u b2RlIChvbGRub2RlLCBjKTsKKworICAgICAgLyogRm91bmQgdGhlIG5vZGUhICAqLworICAgICAg aWYgKCEgbmV4dCB8fCAqbmV4dCA9PSAnXDAnKQorCXsKKwkgICpjdXJyZm91bmQgPSBjdXJybm9k ZTsKKwkgIGMtPmZvdW5kdHlwZSA9IHR5cGU7CisJICByZXR1cm4gMDsKKwl9CisKKyAgICAgIG5h bWUgPSBuZXh0OworICAgIH0KKworICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfRklMRV9O T1RfRk9VTkQsICJmaWxlIG5vdCBmb3VuZCIpOworfQorCisvKiBMb29rdXAgdGhlIG5vZGUgUEFU SC4gIFRoZSBub2RlIFJPT1ROT0RFIGRlc2NyaWJlcyB0aGUgcm9vdCBvZiB0aGUKKyAgIGRpcmVj dG9yeSB0cmVlLiAgVGhlIG5vZGUgZm91bmQgaXMgcmV0dXJuZWQgaW4gRk9VTkROT0RFLCB3aGlj aCBpcworICAgZWl0aGVyIGEgUk9PVE5PREUgb3IgYSBuZXcgbWFsbG9jJ2VkIG5vZGUuICBJVEVS QVRFX0RJUiBpcyB1c2VkIHRvCisgICBpdGVyYXRlIG92ZXIgYWxsIGRpcmVjdG9yeSBlbnRyaWVz IGluIHRoZSBjdXJyZW50IG5vZGUuCisgICBSRUFEX1NZTUxJTksgaXMgdXNlZCB0byByZWFkIHRo ZSBzeW1saW5rIGlmIGEgbm9kZSBpcyBhIHN5bWxpbmsuCisgICBFWFBFQ1RUWVBFIGlzIHRoZSB0 eXBlIG5vZGUgdGhhdCBpcyBleHBlY3RlZCBieSB0aGUgY2FsbGVkLCBhbgorICAgZXJyb3IgaXMg Z2VuZXJhdGVkIGlmIHRoZSBub2RlIGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4gIE1ha2UK KyAgIHN1cmUgeW91IHVzZSB0aGUgTkVTVEVEX0ZVTkNfQVRUUiBtYWNybyBmb3IgSE9PSywgdGhp cyBpcyByZXF1aXJlZAorICAgYmVjYXVzZSBHQ0MgaGFzIGEgbmFzdHkgYnVnIHdoZW4gdXNpbmcg cmVncGFybT0zLiAgKi8KK2dydWJfZXJyX3QKK2dydWJfZnNoZWxwX2ZpbmRfZmlsZSAoY29uc3Qg Y2hhciAqcGF0aCwgZ3J1Yl9mc2hlbHBfbm9kZV90IHJvb3Rub2RlLAorCQkgICAgICAgZ3J1Yl9m c2hlbHBfbm9kZV90ICpmb3VuZG5vZGUsCisJCSAgICAgICBpbnQgKCppdGVyYXRlX2RpcikgKGdy dWJfZnNoZWxwX25vZGVfdCBkaXIsCisJCQkJCSAgIGludCAoKmhvb2spCisJCQkJCSAgIChjb25z dCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICAgIGVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgZmls ZXR5cGUsCisJCQkJCSAgICBncnViX2ZzaGVscF9ub2RlX3Qgbm9kZSwKKwkJCQkJICAgIHZvaWQg KmNsb3N1cmUpLAorCQkJCQkgICB2b2lkICpjbG9zdXJlKSwKKwkJICAgICAgIHZvaWQgKmNsb3N1 cmUsCisJCSAgICAgICBjaGFyICooKnJlYWRfc3ltbGluaykgKGdydWJfZnNoZWxwX25vZGVfdCBu b2RlKSwKKwkJICAgICAgIGVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgZXhwZWN0dHlwZSkKK3sK KyAgZ3J1Yl9lcnJfdCBlcnI7CisgIHN0cnVjdCBncnViX2ZzaGVscF9maW5kX2ZpbGVfY2xvc3Vy ZSBjOworCisgIGMucm9vdG5vZGUgPSByb290bm9kZTsKKyAgYy5pdGVyYXRlX2RpciA9IGl0ZXJh dGVfZGlyOworICBjLmNsb3N1cmUgPSBjbG9zdXJlOworICBjLnJlYWRfc3ltbGluayA9IHJlYWRf c3ltbGluazsKKyAgYy5zeW1saW5rbmVzdCA9IDA7CisgIGMuZm91bmR0eXBlID0gR1JVQl9GU0hF TFBfRElSOworCisgIGlmICghcGF0aCB8fCBwYXRoWzBdICE9ICcvJykKKyAgICB7CisgICAgICBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRU5BTUUsICJiYWQgZmlsZW5hbWUiKTsKKyAgICAg IHJldHVybiBncnViX2Vycm5vOworICAgIH0KKyAgCisgIAorICBEQkcoImdvaW5nIHRvIGZpbmRf ZmlsZVxuIik7CisgIGVyciA9IGZpbmRfZmlsZSAocGF0aCwgcm9vdG5vZGUsIGZvdW5kbm9kZSwg JmMpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgLyogQ2hlY2sgaWYgdGhlIG5v ZGUgdGhhdCB3YXMgZm91bmQgd2FzIG9mIHRoZSBleHBlY3RlZCB0eXBlLiAgKi8KKyAgaWYgKGV4 cGVjdHR5cGUgPT0gR1JVQl9GU0hFTFBfUkVHICYmIGMuZm91bmR0eXBlICE9IGV4cGVjdHR5cGUp CisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJub3QgYSBy ZWd1bGFyIGZpbGUiKTsKKyAgZWxzZSBpZiAoZXhwZWN0dHlwZSA9PSBHUlVCX0ZTSEVMUF9ESVIg JiYgYy5mb3VuZHR5cGUgIT0gZXhwZWN0dHlwZSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX0ZJTEVfVFlQRSwgIm5vdCBhIGRpcmVjdG9yeSIpOworCisgIHJldHVybiAwOwor fQorCisvKiBSZWFkIExFTiBieXRlcyBmcm9tIHRoZSBmaWxlIE5PREUgb24gZGlzayBESVNLIGlu dG8gdGhlIGJ1ZmZlciBCVUYsCisgICBiZWdpbm5pbmcgd2l0aCB0aGUgYmxvY2sgUE9TLiAgUkVB RF9IT09LIHNob3VsZCBiZSBzZXQgYmVmb3JlCisgICByZWFkaW5nIGEgYmxvY2sgZnJvbSB0aGUg ZmlsZS4gIEdFVF9CTE9DSyBpcyB1c2VkIHRvIHRyYW5zbGF0ZSBmaWxlCisgICBibG9ja3MgdG8g ZGlzayBibG9ja3MuICBUaGUgZmlsZSBpcyBGSUxFU0laRSBieXRlcyBiaWcgYW5kIHRoZQorICAg YmxvY2tzIGhhdmUgYSBzaXplIG9mIExPRzJCTE9DS1NJWkUgKGluIGxvZzIpLiAgKi8KK2dydWJf c3NpemVfdAorZ3J1Yl9mc2hlbHBfcmVhZF9maWxlIChCbG9ja0RyaXZlclN0YXRlKiBicywgZ3J1 Yl9mc2hlbHBfbm9kZV90IG5vZGUsCisJCSAgICAgICB2b2lkICgqcmVhZF9ob29rKSAoZ3J1Yl9k aXNrX2FkZHJfdCBzZWN0b3IsCisJCQkJCSAgdW5zaWduZWQgb2Zmc2V0LAorCQkJCQkgIHVuc2ln bmVkIGxlbmd0aCwKKwkJCQkJICB2b2lkICpjbG9zdXJlKSwKKwkJICAgICAgIHZvaWQgKmNsb3N1 cmUsCisJCSAgICAgICBncnViX29mZl90IHBvcywgZ3J1Yl9zaXplX3QgbGVuLCBjaGFyICpidWYs CisJCSAgICAgICBncnViX2Rpc2tfYWRkcl90ICgqZ2V0X2Jsb2NrKSAoZ3J1Yl9mc2hlbHBfbm9k ZV90IG5vZGUsCisJCQkJCQkgICAgICBncnViX2Rpc2tfYWRkcl90IGJsb2NrKSwKKwkJICAgICAg IGdydWJfb2ZmX3QgZmlsZXNpemUsIGludCBsb2cyYmxvY2tzaXplKQoreworICBncnViX2Rpc2tf YWRkcl90IGksIGJsb2NrY250OworICBncnViX29mZl90IG9mZl9ieXRlczsKKyAgaW50IGJsb2Nr c2l6ZSA9IDEgPDwgKGxvZzJibG9ja3NpemUgKyBHUlVCX0RJU0tfU0VDVE9SX0JJVFMpOworCisg IC8qIEFkanVzdCBMRU4gc28gaXQgd2UgY2FuJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZp bGUuICAqLworICBpZiAocG9zICsgbGVuID4gZmlsZXNpemUpCisgICAgbGVuID0gZmlsZXNpemUg LSBwb3M7CisKKyAgYmxvY2tjbnQgPSAoKGxlbiArIHBvcykgKyBibG9ja3NpemUgLSAxKSA+Pgor ICAgIChsb2cyYmxvY2tzaXplICsgR1JVQl9ESVNLX1NFQ1RPUl9CSVRTKTsKKworICBmb3IgKGkg PSBwb3MgPj4gKGxvZzJibG9ja3NpemUgKyBHUlVCX0RJU0tfU0VDVE9SX0JJVFMpOyBpIDwgYmxv Y2tjbnQ7IGkrKykKKyAgICB7CisgICAgICBncnViX2Rpc2tfYWRkcl90IGJsa25yOworICAgICAg aW50IGJsb2Nrb2ZmID0gcG9zICYgKGJsb2Nrc2l6ZSAtIDEpOworICAgICAgaW50IGJsb2NrZW5k ID0gYmxvY2tzaXplOworCisgICAgICBpbnQgc2tpcGZpcnN0ID0gMDsKKworICAgICAgYmxrbnIg PSBnZXRfYmxvY2sgKG5vZGUsIGkpOworICAgICAgaWYgKGdydWJfZXJybm8pCisJcmV0dXJuIC0x OworCisgICAgICBibGtuciA9IGJsa25yIDw8IGxvZzJibG9ja3NpemU7CisgICAgICBvZmZfYnl0 ZXMgPSBibGtuciA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFM7CisKKyAgICAgIC8qIExhc3QgYmxv Y2suICAqLworICAgICAgaWYgKGkgPT0gYmxvY2tjbnQgLSAxKQorCXsKKwkgIGJsb2NrZW5kID0g KGxlbiArIHBvcykgJiAoYmxvY2tzaXplIC0gMSk7CisKKwkgIC8qIFRoZSBsYXN0IHBvcnRpb24g aXMgZXhhY3RseSBibG9ja3NpemUuICAqLworCSAgaWYgKCEgYmxvY2tlbmQpCisJICAgIGJsb2Nr ZW5kID0gYmxvY2tzaXplOworCX0KKworICAgICAgLyogRmlyc3QgYmxvY2suICAqLworICAgICAg aWYgKGkgPT0gKHBvcyA+PiAobG9nMmJsb2Nrc2l6ZSArIEdSVUJfRElTS19TRUNUT1JfQklUUykp KQorCXsKKwkgIHNraXBmaXJzdCA9IGJsb2Nrb2ZmOworCSAgYmxvY2tlbmQgLT0gc2tpcGZpcnN0 OworCX0KKworICAgICAgLyogSWYgdGhlIGJsb2NrIG51bWJlciBpcyAwIHRoaXMgYmxvY2sgaXMg bm90IHN0b3JlZCBvbiBkaXNrIGJ1dAorCSBpcyB6ZXJvIGZpbGxlZCBpbnN0ZWFkLiAgKi8KKyAg ICAgIGlmIChibGtucikKKwl7CisJICAvL2JzLT5yZWFkX2hvb2sgPSByZWFkX2hvb2s7CisJICAv L2JzLT5jbG9zdXJlID0gY2xvc3VyZTsKKwkgIAorCSAgYmRydl9wcmVhZF9mcm9tX2xjbl9vZl92 b2x1bShicywgb2ZmX2J5dGVzICsgc2tpcGZpcnN0LAorCQkgICAgICBidWYsIGJsb2NrZW5kKTsK KwkgIC8vYnMtPnJlYWRfaG9vayA9IDA7CisJICBpZiAoZ3J1Yl9lcnJubykKKwkgICAgcmV0dXJu IC0xOworCX0KKyAgICAgIGVsc2UKKwlncnViX21lbXNldCAoYnVmLCAwLCBibG9ja2VuZCk7CisK KyAgICAgIGJ1ZiArPSBibG9ja3NpemUgLSBza2lwZmlyc3Q7CisgICAgfQorCisgIHJldHVybiBs ZW47Cit9CisKK3Vuc2lnbmVkIGludAorZ3J1Yl9mc2hlbHBfbG9nMmJsa3NpemUgKHVuc2lnbmVk IGludCBibGtzaXplLCB1bnNpZ25lZCBpbnQgKnBvdykKK3sKKyAgaW50IG1vZDsKKworICAqcG93 ID0gMDsKKyAgd2hpbGUgKGJsa3NpemUgPiAxKQorICAgIHsKKyAgICAgIG1vZCA9IGJsa3NpemUg LSAoKGJsa3NpemUgPj4gMSkgPDwgMSk7CisgICAgICBibGtzaXplID4+PSAxOworCisgICAgICAv KiBDaGVjayBpZiBpdCByZWFsbHkgaXMgYSBwb3dlciBvZiB0d28uICAqLworICAgICAgaWYgKG1v ZCkKKwlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX05VTUJFUiwKKwkJCSAgICJ0aGUg YmxvY2tzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3byIpOworICAgICAgKCpwb3cpKys7CisgICAg fQorCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4g LVU4IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZzaGVscC5oIHhlbi00LjEuMi1i L3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZzaGVscC5oCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2Vt dS1xZW11LXhlbi9mc2hlbHAuaAkxOTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAor KysgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZnNoZWxwLmgJMjAxMi0xMi0yOCAx NjowMjo0MS4wMDQ5MzI0NTcgKzA4MDAKQEAgLTAsMCArMSw4NiBAQAorLyogZnNoZWxwLmggLS0g RmlsZXN5c3RlbSBoZWxwZXIgZnVuY3Rpb25zICovCisvKgorICogIEdSVUIgIC0tICBHUmFuZCBV bmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSwyMDA2LDIwMDcs MjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u ZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKi8KKworI2lmbmRlZiBHUlVCX0ZTSEVMUF9IRUFERVIKKyNkZWZpbmUgR1JVQl9GU0hFTFBf SEVBREVSCTEKKworI2luY2x1ZGUgImZzLXR5cGVzLmgiCisjaW5jbHVkZSAiZ3J1Yl9lcnIuaCIK KyNpbmNsdWRlICJibG9ja19pbnQuaCIKK3R5cGVkZWYgc3RydWN0IGdydWJfZnNoZWxwX25vZGUg KmdydWJfZnNoZWxwX25vZGVfdDsKKworI2RlZmluZSBHUlVCX0ZTSEVMUF9DQVNFX0lOU0VOU0lU SVZFCTB4MTAwCisjZGVmaW5lIEdSVUJfRlNIRUxQX1RZUEVfTUFTSwkweGZmCisjZGVmaW5lIEdS VUJfRlNIRUxQX0ZMQUdTX01BU0sJMHgxMDAKKworZW51bSBncnViX2ZzaGVscF9maWxldHlwZQor ICB7CisgICAgR1JVQl9GU0hFTFBfVU5LTk9XTiwKKyAgICBHUlVCX0ZTSEVMUF9SRUcsCisgICAg R1JVQl9GU0hFTFBfRElSLAorICAgIEdSVUJfRlNIRUxQX1NZTUxJTksKKyAgfTsKKworLyogTG9v a3VwIHRoZSBub2RlIFBBVEguICBUaGUgbm9kZSBST09UTk9ERSBkZXNjcmliZXMgdGhlIHJvb3Qg b2YgdGhlCisgICBkaXJlY3RvcnkgdHJlZS4gIFRoZSBub2RlIGZvdW5kIGlzIHJldHVybmVkIGlu IEZPVU5ETk9ERSwgd2hpY2ggaXMKKyAgIGVpdGhlciBhIFJPT1ROT0RFIG9yIGEgbmV3IG1hbGxv YydlZCBub2RlLiAgSVRFUkFURV9ESVIgaXMgdXNlZCB0bworICAgaXRlcmF0ZSBvdmVyIGFsbCBk aXJlY3RvcnkgZW50cmllcyBpbiB0aGUgY3VycmVudCBub2RlLgorICAgUkVBRF9TWU1MSU5LIGlz IHVzZWQgdG8gcmVhZCB0aGUgc3ltbGluayBpZiBhIG5vZGUgaXMgYSBzeW1saW5rLgorICAgRVhQ RUNUVFlQRSBpcyB0aGUgdHlwZSBub2RlIHRoYXQgaXMgZXhwZWN0ZWQgYnkgdGhlIGNhbGxlZCwg YW4KKyAgIGVycm9yIGlzIGdlbmVyYXRlZCBpZiB0aGUgbm9kZSBpcyBub3Qgb2YgdGhlIGV4cGVj dGVkIHR5cGUuICBNYWtlCisgICBzdXJlIHlvdSB1c2UgdGhlIE5FU1RFRF9GVU5DX0FUVFIgbWFj cm8gZm9yIEhPT0ssIHRoaXMgaXMgcmVxdWlyZWQKKyAgIGJlY2F1c2UgR0NDIGhhcyBhIG5hc3R5 IGJ1ZyB3aGVuIHVzaW5nIHJlZ3Bhcm09My4gICovCitncnViX2Vycl90IGdydWJfZnNoZWxwX2Zp bmRfZmlsZSAoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgIGdydWJfZnNoZWxwX25vZGVfdCByb290 bm9kZSwKKwkJCQkgIGdydWJfZnNoZWxwX25vZGVfdCAqZm91bmRub2RlLAorCQkJCSAgaW50ICgq aXRlcmF0ZV9kaXIpCisJCQkJICAoZ3J1Yl9mc2hlbHBfbm9kZV90IGRpciwKKwkJCQkgICBpbnQg KCpob29rKQorCQkJCSAgIChjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgZW51bSBncnVi X2ZzaGVscF9maWxldHlwZSBmaWxldHlwZSwKKwkJCQkgICAgZ3J1Yl9mc2hlbHBfbm9kZV90IG5v ZGUsCisJCQkJICAgIHZvaWQgKmNsb3N1cmUpLAorCQkJCSAgIHZvaWQgKmNsb3N1cmUpLAorCQkJ CSAgdm9pZCAqY2xvc3VyZSwKKwkJCQkgIGNoYXIgKigqcmVhZF9zeW1saW5rKSAoZ3J1Yl9mc2hl bHBfbm9kZV90IG5vZGUpLAorCQkJCSAgZW51bSBncnViX2ZzaGVscF9maWxldHlwZSBleHBlY3Qp OworCisKKy8qIFJlYWQgTEVOIGJ5dGVzIGZyb20gdGhlIGZpbGUgTk9ERSBvbiBkaXNrIERJU0sg aW50byB0aGUgYnVmZmVyIEJVRiwKKyAgIGJlZ2lubmluZyB3aXRoIHRoZSBibG9jayBQT1MuICBS RUFEX0hPT0sgc2hvdWxkIGJlIHNldCBiZWZvcmUKKyAgIHJlYWRpbmcgYSBibG9jayBmcm9tIHRo ZSBmaWxlLiAgR0VUX0JMT0NLIGlzIHVzZWQgdG8gdHJhbnNsYXRlIGZpbGUKKyAgIGJsb2NrcyB0 byBkaXNrIGJsb2Nrcy4gIFRoZSBmaWxlIGlzIEZJTEVTSVpFIGJ5dGVzIGJpZyBhbmQgdGhlCisg ICBibG9ja3MgaGF2ZSBhIHNpemUgb2YgTE9HMkJMT0NLU0laRSAoaW4gbG9nMikuICAqLworZ3J1 Yl9zc2l6ZV90IGdydWJfZnNoZWxwX3JlYWRfZmlsZSAoQmxvY2tEcml2ZXJTdGF0ZSogYnMsIGdy dWJfZnNoZWxwX25vZGVfdCBub2RlLAorCQkJCSAgICB2b2lkICgqcmVhZF9ob29rKQorCQkJCSAg ICAoZ3J1Yl9kaXNrX2FkZHJfdCBzZWN0b3IsCisJCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsCisJ CQkJICAgICB1bnNpZ25lZCBsZW5ndGgsCisJCQkJICAgICB2b2lkICpjbG9zdXJlKSwKKwkJCQkg ICAgdm9pZCAqY2xvc3VyZSwKKwkJCQkgICAgZ3J1Yl9vZmZfdCBwb3MsIGdydWJfc2l6ZV90IGxl biwgY2hhciAqYnVmLAorCQkJCSAgICBncnViX2Rpc2tfYWRkcl90ICgqZ2V0X2Jsb2NrKQorCQkJ CSAgICAoZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUsCisJCQkJICAgICBncnViX2Rpc2tfYWRkcl90 IGJsb2NrKSwKKwkJCQkgICAgZ3J1Yl9vZmZfdCBmaWxlc2l6ZSwgaW50IGxvZzJibG9ja3NpemUp OworCit1bnNpZ25lZCBpbnQgZ3J1Yl9mc2hlbHBfbG9nMmJsa3NpemUgKHVuc2lnbmVkIGludCBi bGtzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqcG93KTsKKworI2VuZGlmIC8qICEgR1JV Ql9GU0hFTFBfSEVBREVSICovCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4y LWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZnMtdGltZS5jIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11 LXFlbXUteGVuL2ZzLXRpbWUuYwotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4v ZnMtdGltZS5jCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4x LjItYi90b29scy9pb2VtdS1xZW11LXhlbi9mcy10aW1lLmMJMjAxMi0xMi0yOCAxNjowMjo0MS4w MDU2ODU3OTggKzA4MDAKQEAgLTAsMCArMSw3NyBAQAorI2luY2x1ZGUgImZzLXRpbWUuaCIKKwor CisKK3N0YXRpYyB1aW50NjRfdCBkaXY2NCh1aW50NjRfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJf dCBjKQoreworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDY0X3QgbGw7CisgICAgICAgIHN0cnVj dCB7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgICAgICAgICB1aW50MzJfdCBoaWdoLCBs b3c7CisjZWxzZQorICAgICAgICAgICAgdWludDMyX3QgbG93LCBoaWdoOworI2VuZGlmCisgICAg ICAgIH0gbDsKKyAgICB9IHUsIHJlczsKKyAgICB1aW50NjRfdCBybCwgcmg7CisKKyAgICB1Lmxs ID0gYTsKKyAgICBybCA9ICh1aW50NjRfdCl1LmwubG93ICogKHVpbnQ2NF90KWI7CisgICAgcmgg PSAodWludDY0X3QpdS5sLmhpZ2ggKiAodWludDY0X3QpYjsKKyAgICByaCArPSAocmwgPj4gMzIp OworICAgIHJlcy5sLmhpZ2ggPSByaCAvIGM7CisgICAgcmVzLmwubG93ID0gKCgocmggJSBjKSA8 PCAzMikgKyAocmwgJiAweGZmZmZmZmZmKSkgLyBjOworICAgIHJldHVybiByZXMubGw7Cit9CisK K3N0YXRpYyB1aW50NjRfdCBzdWI2NCh1aW50NjRfdCBhLCB1aW50NjRfdCBiKQoreworICBzdHJ1 Y3QKKyAgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgdWludDMyX3QgaGln aCwgbG93OworI2Vsc2UKKyAgICAgICAgICAgIHVpbnQzMl90IGxvdywgaGlnaDsKKyNlbmRpZgor ICB9YTEsYjEsYzsKKyAgCisgIGExLmhpZ2ggPSBhPj4zMjsKKyAgYTEubG93ID0gYSYweGZmZmZm ZmZmOworICBiMS5oaWdoID0gYj4+MzI7CisgIGIxLmxvdyA9IGImMHhmZmZmZmZmZjsKKyAgCisg IGlmKGExLmhpZ2ggPCBiMS5oaWdoKQorICAgIHsKKyAgICAgIGM9YjE7CisgICAgICBiMT1hMTsK KyAgICAgIGExPWM7CisgICAgfQorICAKKyAgYTEuaGlnaCAtPSBiMS5oaWdoOworICBhMS5sb3cg LT0gYjEubG93OworICBpZihhMS5sb3cgJiAweDgwMDAwMDAwKQorICAgIHsKKyAgICAgIGExLmxv dyA9ICh+KGExLmxvdyAmIDB4N2ZmZmZmZmYpKSsxOworICAgICAgYTEuaGlnaCAtPSAxOworICAg IH0KKyAgCisgIHVpbnQ2NF90IHJldCA9ICh1aW50NjRfdClhMS5oaWdoPDwzMiB8IGExLmxvdzsK KyAgcmV0dXJuIHJldDsKK30KKworc3RydWN0IHRtKiBudGZzX3V0YzJsb2NhbChncnViX3VpbnQ2 NF90IHRpbWUsIHN0cnVjdCB0bSogcHRtKQoreworICAvL3RpbWVfdCB0aW1lMiA9IHN1YjY0KHRp bWUsIE5URlNfVElNRV9PRkZTRVQpOworICB0aW1lX3QgdGltZTIgPSB0aW1lIC0gTlRGU19USU1F X09GRlNFVDsKKyAgLypEQkcoInNpemVvZihpbnQpPSVkIiwgc2l6ZW9mKGludCkpOworICBEQkco InNpemVvZihzaG9ydCk9JWQiLCBzaXplb2Yoc2hvcnQpKTsKKyAgREJHKCJzaXplb2YobG9uZyk9 JWQiLCBzaXplb2YobG9uZykpOworICBEQkcoInNpemVvZihsb25nIGxvbmcpPSVkIiwgc2l6ZW9m KHVuc2lnbmVkIGxvbmcgbG9uZykpOworICBEQkcoInNpemVvZih0aW1lX3QpPSVkLCB0aW1lPSV6 dSwgdGltZTI9JXp1Iiwgc2l6ZW9mKHRpbWVfdCksIHRpbWUsIHRpbWUyKTsqLworICAvL3RpbWUy ID0gZGl2NjQodGltZTIsMSwxMDAwMDAwMCk7CisgIHRpbWUyID0gdGltZTIgLyAxMDAwMDAwMDsK KyAgREJHKCJzaXplb2YodGltZV90KT0lZCwgdGltZT0lenUsIHRpbWUyPSV6dSIsIHNpemVvZih0 aW1lX3QpLCB0aW1lLCB0aW1lMik7CisgIC8vLy90aW1lMiA9IDA7Ly90aW1lKE5VTEwpOworICBy ZXR1cm4gbG9jYWx0aW1lX3IoJnRpbWUyLCBwdG0pOworfQpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1y cE4gLVU4IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2ZzLXRpbWUuaCB4ZW4tNC4x LjItYi90b29scy9pb2VtdS1xZW11LXhlbi9mcy10aW1lLmgKLS0tIHhlbi00LjEuMi1hL3Rvb2xz L2lvZW11LXFlbXUteGVuL2ZzLXRpbWUuaAkxOTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCAr MDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZnMtdGltZS5oCTIwMTIt MTItMjggMTY6MDI6NDEuMDA1Njg1Nzk4ICswODAwCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYg RlNfVElNRV9ICisjZGVmaW5lIEZTX1RJTUVfSAorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1 ZGUgImZzLWNvbW0uaCIKKyNkZWZpbmUgTlRGU19USU1FX09GRlNFVCAoKGdydWJfdWludDY0X3Qp KDM2OSAqIDM2NSArIDg5KSAqIDI0ICogMzYwMCAqIDEwMDAwMDAwKQorCitzdHJ1Y3QgdG0qIG50 ZnNfdXRjMmxvY2FsKGdydWJfdWludDY0X3QgdGltZSwgc3RydWN0IHRtKiBwdG0pOworCisKKyNl bmRpZgorCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9l bXUtcWVtdS14ZW4vZnMtdHlwZXMuaCB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9m cy10eXBlcy5oCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9mcy10eXBlcy5o CTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29s cy9pb2VtdS1xZW11LXhlbi9mcy10eXBlcy5oCTIwMTItMTItMjggMTY6MDI6NDEuMDA2OTMyNDE3 ICswODAwCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVk IEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNSwyMDA2LDIwMDcsMjAwOCwy MDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVl IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCisjaWZuZGVmIEdSVUJfVFlQRVNfSEVBREVSCisjZGVmaW5lIEdSVUJfVFlQRVNfSEVB REVSCTEKKworI2luY2x1ZGUgImdydWItY29uZmlnLmgiCisjaW5jbHVkZSAieDg2XzY0L3R5cGVz LmgiCisKKyNpZmRlZiBHUlVCX1VUSUwKKyMgZGVmaW5lIEdSVUJfQ1BVX1NJWkVPRl9WT0lEX1AJ U0laRU9GX1ZPSURfUAorIyBkZWZpbmUgR1JVQl9DUFVfU0laRU9GX0xPTkcJU0laRU9GX0xPTkcK KyMgaWZkZWYgV09SRFNfQklHRU5ESUFOCisjICBkZWZpbmUgR1JVQl9DUFVfV09SRFNfQklHRU5E SUFOCTEKKyMgZWxzZQorIyAgdW5kZWYgR1JVQl9DUFVfV09SRFNfQklHRU5ESUFOCisjIGVuZGlm CisjZWxzZSAvKiAhIEdSVUJfVVRJTCAqLworIyBkZWZpbmUgR1JVQl9DUFVfU0laRU9GX1ZPSURf UAlHUlVCX1RBUkdFVF9TSVpFT0ZfVk9JRF9QCisjIGRlZmluZSBHUlVCX0NQVV9TSVpFT0ZfTE9O RwlHUlVCX1RBUkdFVF9TSVpFT0ZfTE9ORworIyBpZmRlZiBHUlVCX1RBUkdFVF9XT1JEU19CSUdF TkRJQU4KKyMgIGRlZmluZSBHUlVCX0NQVV9XT1JEU19CSUdFTkRJQU4JMQorIyBlbHNlCisjICB1 bmRlZiBHUlVCX0NQVV9XT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZiAvKiAhIEdSVUJf VVRJTCAqLworCisjaWYgR1JVQl9DUFVfU0laRU9GX1ZPSURfUCAhPSA0ICYmIEdSVUJfQ1BVX1NJ WkVPRl9WT0lEX1AgIT0gOAorIyBlcnJvciAiVGhpcyBhcmNoaXRlY3R1cmUgaXMgbm90IHN1cHBv cnRlZCBiZWNhdXNlIHNpemVvZih2b2lkICopICE9IDQgYW5kIHNpemVvZih2b2lkICopICE9IDgi CisjZW5kaWYKKworI2lmbmRlZiBHUlVCX1RBUkdFVF9XT1JEU0laRQorIyBpZiBHUlVCX1RBUkdF VF9TSVpFT0ZfVk9JRF9QID09IDQKKyMgIGRlZmluZSBHUlVCX1RBUkdFVF9XT1JEU0laRSAzMgor IyBlbGlmIEdSVUJfVEFSR0VUX1NJWkVPRl9WT0lEX1AgPT0gOAorIyAgZGVmaW5lIEdSVUJfVEFS R0VUX1dPUkRTSVpFIDY0CisjIGVuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIHZhcmlvdXMgd2lk ZSBpbnRlZ2Vycy4gICovCit0eXBlZGVmIHNpZ25lZCBjaGFyCQlncnViX2ludDhfdDsKK3R5cGVk ZWYgc2hvcnQJCQlncnViX2ludDE2X3Q7Cit0eXBlZGVmIGludAkJCWdydWJfaW50MzJfdDsKKyNp ZiBHUlVCX0NQVV9TSVpFT0ZfTE9ORyA9PSA4Cit0eXBlZGVmIGxvbmcJCQlncnViX2ludDY0X3Q7 CisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcJCWdydWJfaW50NjRfdDsKKyNlbmRpZgorCit0eXBl ZGVmIHVuc2lnbmVkIGNoYXIJCWdydWJfdWludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJ CWdydWJfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkCQlncnViX3VpbnQzMl90OworI2lmIEdS VUJfQ1BVX1NJWkVPRl9MT05HID09IDgKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJZ3J1Yl91aW50 NjRfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlncnViX3VpbnQ2NF90Owor I2VuZGlmCisKKy8qIE1pc2MgdHlwZXMuICAqLworI2lmIEdSVUJfVEFSR0VUX1NJWkVPRl9WT0lE X1AgPT0gOAordHlwZWRlZiBncnViX3VpbnQ2NF90CWdydWJfdGFyZ2V0X2FkZHJfdDsKK3R5cGVk ZWYgZ3J1Yl91aW50NjRfdAlncnViX3RhcmdldF9vZmZfdDsKK3R5cGVkZWYgZ3J1Yl91aW50NjRf dAlncnViX3RhcmdldF9zaXplX3Q7Cit0eXBlZGVmIGdydWJfaW50NjRfdAlncnViX3RhcmdldF9z c2l6ZV90OworI2Vsc2UKK3R5cGVkZWYgZ3J1Yl91aW50MzJfdAlncnViX3RhcmdldF9hZGRyX3Q7 Cit0eXBlZGVmIGdydWJfdWludDMyX3QJZ3J1Yl90YXJnZXRfb2ZmX3Q7Cit0eXBlZGVmIGdydWJf dWludDMyX3QJZ3J1Yl90YXJnZXRfc2l6ZV90OwordHlwZWRlZiBncnViX2ludDMyX3QJZ3J1Yl90 YXJnZXRfc3NpemVfdDsKKyNlbmRpZgorCisjaWYgR1JVQl9DUFVfU0laRU9GX1ZPSURfUCA9PSA4 Cit0eXBlZGVmIGdydWJfdWludDY0X3QJZ3J1Yl9hZGRyX3Q7Cit0eXBlZGVmIGdydWJfdWludDY0 X3QJZ3J1Yl9zaXplX3Q7Cit0eXBlZGVmIGdydWJfaW50NjRfdAlncnViX3NzaXplX3Q7CisjZWxz ZQordHlwZWRlZiBncnViX3VpbnQzMl90CWdydWJfYWRkcl90OwordHlwZWRlZiBncnViX3VpbnQz Ml90CWdydWJfc2l6ZV90OwordHlwZWRlZiBncnViX2ludDMyX3QJZ3J1Yl9zc2l6ZV90OworI2Vu ZGlmCisKKyNpZiBHUlVCX0NQVV9TSVpFT0ZfVk9JRF9QID09IDgKKyMgZGVmaW5lIEdSVUJfVUxP TkdfTUFYIDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwKKyMgZGVmaW5lIEdSVUJfTE9OR19NQVggOTIy MzM3MjAzNjg1NDc3NTgwN0wKKyMgZGVmaW5lIEdSVUJfTE9OR19NSU4gKC05MjIzMzcyMDM2ODU0 Nzc1ODA3TCAtIDEpCisjZWxzZQorIyBkZWZpbmUgR1JVQl9VTE9OR19NQVggNDI5NDk2NzI5NVVM CisjIGRlZmluZSBHUlVCX0xPTkdfTUFYIDIxNDc0ODM2NDdMCisjIGRlZmluZSBHUlVCX0xPTkdf TUlOICgtMjE0NzQ4MzY0N0wgLSAxKQorI2VuZGlmCisKKyNpZiBHUlVCX0NQVV9TSVpFT0ZfVk9J RF9QID09IDQKKyNkZWZpbmUgVUlOVF9UT19QVFIoeCkgKCh2b2lkKikoZ3J1Yl91aW50MzJfdCko eCkpCisjZGVmaW5lIFBUUl9UT19VSU5UNjQoeCkgKChncnViX3VpbnQ2NF90KShncnViX3VpbnQz Ml90KSh4KSkKKyNkZWZpbmUgUFRSX1RPX1VJTlQzMih4KSAoKGdydWJfdWludDMyX3QpKHgpKQor I2Vsc2UKKyNkZWZpbmUgVUlOVF9UT19QVFIoeCkgKCh2b2lkKikoZ3J1Yl91aW50NjRfdCkoeCkp CisjZGVmaW5lIFBUUl9UT19VSU5UNjQoeCkgKChncnViX3VpbnQ2NF90KSh4KSkKKyNkZWZpbmUg UFRSX1RPX1VJTlQzMih4KSAoKGdydWJfdWludDMyX3QpKGdydWJfdWludDY0X3QpKHgpKQorI2Vu ZGlmCisKKy8qIFRoZSB0eXBlIGZvciByZXByZXNlbnRpbmcgYSBmaWxlIG9mZnNldC4gICovCit0 eXBlZGVmIGdydWJfdWludDY0X3QJZ3J1Yl9vZmZfdDsKKworLyogVGhlIHR5cGUgZm9yIHJlcHJl c2VudGluZyBhIGRpc2sgYmxvY2sgYWRkcmVzcy4gICovCit0eXBlZGVmIGdydWJfdWludDY0X3QJ Z3J1Yl9kaXNrX2FkZHJfdDsKKworLyogQnl0ZS1vcmRlcnMuICAqLworI2RlZmluZSBncnViX3N3 YXBfYnl0ZXMxNih4KQlcCisoeyBcCisgICBncnViX3VpbnQxNl90IF94ID0gKHgpOyBcCisgICAo Z3J1Yl91aW50MTZfdCkgKChfeCA8PCA4KSB8IChfeCA+PiA4KSk7IFwKK30pCisKKyNpZiBkZWZp bmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiAzKSAmJiAoX19HTlVDX18gPiA0IHx8IF9fR05V Q19NSU5PUl9fID49IDMpICYmIGRlZmluZWQoR1JVQl9UQVJHRVRfSTM4NikKK3N0YXRpYyBpbmxp bmUgZ3J1Yl91aW50MzJfdCBncnViX3N3YXBfYnl0ZXMzMihncnViX3VpbnQzMl90IHgpCit7CisJ cmV0dXJuIF9fYnVpbHRpbl9ic3dhcDMyKHgpOworfQorCitzdGF0aWMgaW5saW5lIGdydWJfdWlu dDY0X3QgZ3J1Yl9zd2FwX2J5dGVzNjQoZ3J1Yl91aW50NjRfdCB4KQoreworCXJldHVybiBfX2J1 aWx0aW5fYnN3YXA2NCh4KTsKK30KKyNlbHNlCQkJCQkvKiBub3QgZ2NjIDQuMyBvciBuZXdlciAq LworI2RlZmluZSBncnViX3N3YXBfYnl0ZXMzMih4KQlcCisoeyBcCisgICBncnViX3VpbnQzMl90 IF94ID0gKHgpOyBcCisgICAoZ3J1Yl91aW50MzJfdCkgKChfeCA8PCAyNCkgXAorICAgICAgICAg ICAgICAgICAgICB8ICgoX3ggJiAoZ3J1Yl91aW50MzJfdCkgMHhGRjAwVUwpIDw8IDgpIFwKKyAg ICAgICAgICAgICAgICAgICAgfCAoKF94ICYgKGdydWJfdWludDMyX3QpIDB4RkYwMDAwVUwpID4+ IDgpIFwKKyAgICAgICAgICAgICAgICAgICAgfCAoX3ggPj4gMjQpKTsgXAorfSkKKworI2RlZmlu ZSBncnViX3N3YXBfYnl0ZXM2NCh4KQlcCisoeyBcCisgICBncnViX3VpbnQ2NF90IF94ID0gKHgp OyBcCisgICAoZ3J1Yl91aW50NjRfdCkgKChfeCA8PCA1NikgXAorICAgICAgICAgICAgICAgICAg ICB8ICgoX3ggJiAoZ3J1Yl91aW50NjRfdCkgMHhGRjAwVUxMKSA8PCA0MCkgXAorICAgICAgICAg ICAgICAgICAgICB8ICgoX3ggJiAoZ3J1Yl91aW50NjRfdCkgMHhGRjAwMDBVTEwpIDw8IDI0KSBc CisgICAgICAgICAgICAgICAgICAgIHwgKChfeCAmIChncnViX3VpbnQ2NF90KSAweEZGMDAwMDAw VUxMKSA8PCA4KSBcCisgICAgICAgICAgICAgICAgICAgIHwgKChfeCAmIChncnViX3VpbnQ2NF90 KSAweEZGMDAwMDAwMDBVTEwpID4+IDgpIFwKKyAgICAgICAgICAgICAgICAgICAgfCAoKF94ICYg KGdydWJfdWludDY0X3QpIDB4RkYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgXAorICAgICAgICAgICAg ICAgICAgICB8ICgoX3ggJiAoZ3J1Yl91aW50NjRfdCkgMHhGRjAwMDAwMDAwMDAwMFVMTCkgPj4g NDApIFwKKyAgICAgICAgICAgICAgICAgICAgfCAoX3ggPj4gNTYpKTsgXAorfSkKKyNlbmRpZgkJ CQkJLyogbm90IGdjYyA0LjMgb3IgbmV3ZXIgKi8KKworI2lmZGVmIEdSVUJfQ1BVX1dPUkRTX0JJ R0VORElBTgorIyBkZWZpbmUgZ3J1Yl9jcHVfdG9fbGUxNih4KQlncnViX3N3YXBfYnl0ZXMxNih4 KQorIyBkZWZpbmUgZ3J1Yl9jcHVfdG9fbGUzMih4KQlncnViX3N3YXBfYnl0ZXMzMih4KQorIyBk ZWZpbmUgZ3J1Yl9jcHVfdG9fbGU2NCh4KQlncnViX3N3YXBfYnl0ZXM2NCh4KQorIyBkZWZpbmUg Z3J1Yl9sZV90b19jcHUxNih4KQlncnViX3N3YXBfYnl0ZXMxNih4KQorIyBkZWZpbmUgZ3J1Yl9s ZV90b19jcHUzMih4KQlncnViX3N3YXBfYnl0ZXMzMih4KQorIyBkZWZpbmUgZ3J1Yl9sZV90b19j cHU2NCh4KQlncnViX3N3YXBfYnl0ZXM2NCh4KQorIyBkZWZpbmUgZ3J1Yl9jcHVfdG9fYmUxNih4 KQkoKGdydWJfdWludDE2X3QpICh4KSkKKyMgZGVmaW5lIGdydWJfY3B1X3RvX2JlMzIoeCkJKChn cnViX3VpbnQzMl90KSAoeCkpCisjIGRlZmluZSBncnViX2NwdV90b19iZTY0KHgpCSgoZ3J1Yl91 aW50NjRfdCkgKHgpKQorIyBkZWZpbmUgZ3J1Yl9iZV90b19jcHUxNih4KQkoKGdydWJfdWludDE2 X3QpICh4KSkKKyMgZGVmaW5lIGdydWJfYmVfdG9fY3B1MzIoeCkJKChncnViX3VpbnQzMl90KSAo eCkpCisjIGRlZmluZSBncnViX2JlX3RvX2NwdTY0KHgpCSgoZ3J1Yl91aW50NjRfdCkgKHgpKQor IyBpZmRlZiBHUlVCX1RBUkdFVF9XT1JEU19CSUdFTkRJQU4KKyMgIGRlZmluZSBncnViX3Rhcmdl dF90b19ob3N0MTYoeCkJKChncnViX3VpbnQxNl90KSAoeCkpCisjICBkZWZpbmUgZ3J1Yl90YXJn ZXRfdG9faG9zdDMyKHgpCSgoZ3J1Yl91aW50MzJfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJfdGFy Z2V0X3RvX2hvc3Q2NCh4KQkoKGdydWJfdWludDY0X3QpICh4KSkKKyMgIGRlZmluZSBncnViX2hv c3RfdG9fdGFyZ2V0MTYoeCkJKChncnViX3VpbnQxNl90KSAoeCkpCisjICBkZWZpbmUgZ3J1Yl9o b3N0X3RvX3RhcmdldDMyKHgpCSgoZ3J1Yl91aW50MzJfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJf aG9zdF90b190YXJnZXQ2NCh4KQkoKGdydWJfdWludDY0X3QpICh4KSkKKyMgZWxzZSAvKiAhIEdS VUJfVEFSR0VUX1dPUkRTX0JJR0VORElBTiAqLworIyAgZGVmaW5lIGdydWJfdGFyZ2V0X3RvX2hv c3QxNih4KQlncnViX3N3YXBfYnl0ZXMxNih4KQorIyAgZGVmaW5lIGdydWJfdGFyZ2V0X3RvX2hv c3QzMih4KQlncnViX3N3YXBfYnl0ZXMzMih4KQorIyAgZGVmaW5lIGdydWJfdGFyZ2V0X3RvX2hv c3Q2NCh4KQlncnViX3N3YXBfYnl0ZXM2NCh4KQorIyAgZGVmaW5lIGdydWJfaG9zdF90b190YXJn ZXQxNih4KQlncnViX3N3YXBfYnl0ZXMxNih4KQorIyAgZGVmaW5lIGdydWJfaG9zdF90b190YXJn ZXQzMih4KQlncnViX3N3YXBfYnl0ZXMzMih4KQorIyAgZGVmaW5lIGdydWJfaG9zdF90b190YXJn ZXQ2NCh4KQlncnViX3N3YXBfYnl0ZXM2NCh4KQorIyBlbmRpZgorI2Vsc2UgLyogISBXT1JEU19C SUdFTkRJQU4gKi8KKyMgZGVmaW5lIGdydWJfY3B1X3RvX2xlMTYoeCkJKChncnViX3VpbnQxNl90 KSAoeCkpCisjIGRlZmluZSBncnViX2NwdV90b19sZTMyKHgpCSgoZ3J1Yl91aW50MzJfdCkgKHgp KQorIyBkZWZpbmUgZ3J1Yl9jcHVfdG9fbGU2NCh4KQkoKGdydWJfdWludDY0X3QpICh4KSkKKyMg ZGVmaW5lIGdydWJfbGVfdG9fY3B1MTYoeCkJKChncnViX3VpbnQxNl90KSAoeCkpCisjIGRlZmlu ZSBncnViX2xlX3RvX2NwdTMyKHgpCSgoZ3J1Yl91aW50MzJfdCkgKHgpKQorIyBkZWZpbmUgZ3J1 Yl9sZV90b19jcHU2NCh4KQkoKGdydWJfdWludDY0X3QpICh4KSkKKyMgZGVmaW5lIGdydWJfY3B1 X3RvX2JlMTYoeCkJZ3J1Yl9zd2FwX2J5dGVzMTYoeCkKKyMgZGVmaW5lIGdydWJfY3B1X3RvX2Jl MzIoeCkJZ3J1Yl9zd2FwX2J5dGVzMzIoeCkKKyMgZGVmaW5lIGdydWJfY3B1X3RvX2JlNjQoeCkJ Z3J1Yl9zd2FwX2J5dGVzNjQoeCkKKyMgZGVmaW5lIGdydWJfYmVfdG9fY3B1MTYoeCkJZ3J1Yl9z d2FwX2J5dGVzMTYoeCkKKyMgZGVmaW5lIGdydWJfYmVfdG9fY3B1MzIoeCkJZ3J1Yl9zd2FwX2J5 dGVzMzIoeCkKKyMgZGVmaW5lIGdydWJfYmVfdG9fY3B1NjQoeCkJZ3J1Yl9zd2FwX2J5dGVzNjQo eCkKKyMgaWZkZWYgR1JVQl9UQVJHRVRfV09SRFNfQklHRU5ESUFOCisjICBkZWZpbmUgZ3J1Yl90 YXJnZXRfdG9faG9zdDE2KHgpCWdydWJfc3dhcF9ieXRlczE2KHgpCisjICBkZWZpbmUgZ3J1Yl90 YXJnZXRfdG9faG9zdDMyKHgpCWdydWJfc3dhcF9ieXRlczMyKHgpCisjICBkZWZpbmUgZ3J1Yl90 YXJnZXRfdG9faG9zdDY0KHgpCWdydWJfc3dhcF9ieXRlczY0KHgpCisjICBkZWZpbmUgZ3J1Yl9o b3N0X3RvX3RhcmdldDE2KHgpCWdydWJfc3dhcF9ieXRlczE2KHgpCisjICBkZWZpbmUgZ3J1Yl9o b3N0X3RvX3RhcmdldDMyKHgpCWdydWJfc3dhcF9ieXRlczMyKHgpCisjICBkZWZpbmUgZ3J1Yl9o b3N0X3RvX3RhcmdldDY0KHgpCWdydWJfc3dhcF9ieXRlczY0KHgpCisjIGVsc2UgLyogISBHUlVC X1RBUkdFVF9XT1JEU19CSUdFTkRJQU4gKi8KKyMgIGRlZmluZSBncnViX3RhcmdldF90b19ob3N0 MTYoeCkJKChncnViX3VpbnQxNl90KSAoeCkpCisjICBkZWZpbmUgZ3J1Yl90YXJnZXRfdG9faG9z dDMyKHgpCSgoZ3J1Yl91aW50MzJfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJfdGFyZ2V0X3RvX2hv c3Q2NCh4KQkoKGdydWJfdWludDY0X3QpICh4KSkKKyMgIGRlZmluZSBncnViX2hvc3RfdG9fdGFy Z2V0MTYoeCkJKChncnViX3VpbnQxNl90KSAoeCkpCisjICBkZWZpbmUgZ3J1Yl9ob3N0X3RvX3Rh cmdldDMyKHgpCSgoZ3J1Yl91aW50MzJfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJfaG9zdF90b190 YXJnZXQ2NCh4KQkoKGdydWJfdWludDY0X3QpICh4KSkKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIFdP UkRTX0JJR0VORElBTiAqLworCisjaWYgR1JVQl9UQVJHRVRfU0laRU9GX1ZPSURfUCA9PSA4Cisj ICBkZWZpbmUgZ3J1Yl9ob3N0X3RvX3RhcmdldF9hZGRyKHgpIGdydWJfaG9zdF90b190YXJnZXQ2 NCh4KQorI2Vsc2UKKyMgIGRlZmluZSBncnViX2hvc3RfdG9fdGFyZ2V0X2FkZHIoeCkgZ3J1Yl9o b3N0X3RvX3RhcmdldDMyKHgpCisjZW5kaWYKKworCisKKworCisKKworI2VuZGlmIC8qICEgR1JV Ql9UWVBFU19IRUFERVIgKi8KZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjIt YS90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWNvbmZpZy5oIHhlbi00LjEuMi1iL3Rvb2xzL2lv ZW11LXFlbXUteGVuL2dydWItY29uZmlnLmgKLS0tIHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFl bXUteGVuL2dydWItY29uZmlnLmgJMTk3MC0wMS0wMSAwNzowMDowMC4wMDAwMDAwMDAgKzA3MDAK KysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL2dydWItY29uZmlnLmgJMjAxMi0x Mi0yOCAxNjowMjo0MS4wMDY5MzI0MTcgKzA4MDAKQEAgLTAsMCArMSwyNTEgQEAKKy8qIGNvbmZp Zy5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIGNv bmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAq LworCisvKiBEZWZpbmUgaXQgaWYgR0FTIHJlcXVpcmVzIHRoYXQgYWJzb2x1dGUgaW5kaXJlY3Qg Y2FsbHMvanVtcHMgYXJlIG5vdAorICAgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayAqLworLyog I3VuZGVmIEFCU09MVVRFX1dJVEhPVVRfQVNURVJJU0sgKi8KKworLyogRGVmaW5lIGl0IHRvIFwi YWRkcjMyXCIgb3IgXCJhZGRyMzI7XCIgdG8gbWFrZSBHQVMgaGFwcHkgKi8KKyNkZWZpbmUgQURE UjMyIGFkZHIzMgorCisvKiBEZWZpbmUgaXQgdG8gXCJkYXRhMzJcIiBvciBcImRhdGEzMjtcIiB0 byBtYWtlIEdBUyBoYXBweSAqLworI2RlZmluZSBEQVRBMzIgZGF0YTMyCisKKy8qIERlZmluZSB0 byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRp dmUKKyAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyNkZWZpbmUgRU5BQkxFX05MUyAxCisK Ky8qIERlZmluZSBpZiBDIHN5bWJvbHMgZ2V0IGFuIHVuZGVyc2NvcmUgYWZ0ZXIgY29tcGlsYXRp b24gKi8KKy8qICN1bmRlZiBIQVZFX0FTTV9VU0NPUkUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYg eW91IGhhdmUgdGhlIGBhc3ByaW50ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQVNQUklO VEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBD RkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQorICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAq LworLyogI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCAqLworCisvKiBEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZh bHVlIGluCisgICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworLyogI3VuZGVmIEhB VkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug aGF2ZSB0aGUgPGN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0NVUlNF U19IICovCisKKy8qIERlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFs cmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuCisgICAqLworI2RlZmluZSBIQVZFX0RDR0VU VEVYVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRl ciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCisjZGVmaW5lIEhBVkVfRElSRU5U X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZ0MmJ1aWxkLmg+IGhlYWRl ciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0ZUMkJVSUxEX0ggMQorCisvKiBEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgYGdldGdpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUR0lE IDEKKworLyogRGVmaW5lIGlmIGdldHJhd3BhcnRpdGlvbigpIGluIC1sdXRpbCBjYW4gYmUgdXNl ZCAqLworLyogI3VuZGVmIEhBVkVfR0VUUkFXUEFSVElUSU9OICovCisKKy8qIERlZmluZSBpZiB0 aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFs bGVkLiAqLworI2RlZmluZSBIQVZFX0dFVFRFWFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug aGF2ZSB0aGUgYGdldHVpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVUlEIDEKKwor LyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4g Ki8KKy8qICN1bmRlZiBIQVZFX0lDT05WICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl IHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNf SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBm aWxlLiAqLworI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91 IGhhdmUgdGhlIGBsc3RhdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTFNUQVQgMQorCisv KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8K KyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo ZSBgbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01FTUFMSUdOIDEKKworLyog RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8KKyNkZWZp bmUgSEFWRV9NRU1NT1ZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1v cnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZp bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMvY3Vyc2VzLmg+IGhlYWRlciBmaWxlLiAq LworLyogI3VuZGVmIEhBVkVfTkNVUlNFU19DVVJTRVNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFW RV9OQ1VSU0VTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZGlyLmg+ IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gKi8KKy8qICN1bmRlZiBIQVZFX05E SVJfSCAqLworCisvKiBEZWZpbmUgaWYgb3BlbmRpc2soKSBpbiAtbHV0aWwgY2FuIGJlIHVzZWQg Ki8KKy8qICN1bmRlZiBIQVZFX09QRU5ESVNLICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo YXZlIHRoZSA8cGNpL3BjaS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1BDSV9Q Q0lfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvc2l4X21lbWFsaWdu JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9NRU1BTElHTiAxCisKKy8qIERlZmlu ZSBpZiByZXR1cm5zX3R3aWNlIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQgKi8KKy8qICN1bmRlZiBI QVZFX1JFVFVSTlNfVFdJQ0UgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBz YnJrJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TQlJLIDEKKworLyogRGVmaW5lIHRvIDEg aWYgeW91IGhhdmUgdGhlIDxTREwvU0RMLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhB VkVfU0RMX1NETF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50 Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5l IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5l IEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1 cCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRFVQIDEKKworLyogRGVmaW5lIHRvIDEg aWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZF X1NUUklOR1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+ IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKworLyogRGVmaW5lIHRv IDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGlyLmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5l cyBgRElSJy4KKyAgICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRElSX0ggKi8KKworLyogRGVmaW5l IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm aW5lIEhBVkVfU1lTX0ZDTlRMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg PHN5cy9ta2Rldi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19NS0RFVl9I ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL25kaXIuaD4gaGVhZGVy IGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX1NZU19O RElSX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBo ZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKKworLyogRGVmaW5lIHRv IDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3lzbWFjcm9zLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl ZmluZSBIQVZFX1NZU19TWVNNQUNST1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl IHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBF U19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRl ciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlm IHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VO SVNURF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1c2IuaD4gaGVhZGVy IGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9VU0JfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5 b3UgaGF2ZSB0aGUgYHZhc3ByaW50ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVkFTUFJJ TlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYG1ham9yJywgYG1pbm9yJywgYW5kIGBtYWtlZGV2 JyBhcmUgZGVjbGFyZWQgaW4gPG1rZGV2Lmg+LgorICAgKi8KKy8qICN1bmRlZiBNQUpPUl9JTl9N S0RFViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgbWFqb3InLCBgbWlub3InLCBhbmQgYG1ha2Vk ZXYnIGFyZSBkZWNsYXJlZCBpbgorICAgPHN5c21hY3Jvcy5oPi4gKi8KKy8qICN1bmRlZiBNQUpP Ul9JTl9TWVNNQUNST1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGVuYWJsZSBtZW1vcnkg bWFuYWdlciBkZWJ1Z2dpbmcuICovCisvKiAjdW5kZWYgTU1fREVCVUcgKi8KKworLyogRGVmaW5l IHRvIDEgaWYgR0NDIGdlbmVyYXRlcyBjYWxscyB0byBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8oKSAq LworLyogI3VuZGVmIE5FRURfUkVHSVNURVJfRlJBTUVfSU5GTyAqLworCisvKiBOYW1lIG9mIHBh Y2thZ2UgKi8KKyNkZWZpbmUgUEFDS0FHRSAiYnVyZyIKKworLyogRGVmaW5lIHRvIHRoZSBhZGRy ZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICov CisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJiZWFuMTIzY2hAZ21haWwuY29tIgorCisvKiBE ZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tB R0VfTkFNRSAiQlVSRyIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24g b2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiQlVSRyAxLjk4Igor CisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2Uu ICovCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiYnVyZyIKKworLyogRGVmaW5lIHRvIHRoZSB2 ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIxLjk4 IgorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNk ZWZpbmUgU0laRU9GX0xPTkcgOAorCisvKiBUaGUgc2l6ZSBvZiBgdm9pZCAqJywgYXMgY29tcHV0 ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVk9JRF9QIDgKKworLyogRGVmaW5lIHRv IDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENf SEVBREVSUyAxCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyNkZWZpbmUgVkVS U0lPTiAiMS45OCIKKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJv Y2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZp cnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLwor I2lmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisj ZWxpZiAhIGRlZmluZWQgX19MSVRUTEVfRU5ESUFOX18KKy8qICMgdW5kZWYgV09SRFNfQklHRU5E SUFOICovCisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgaWYgYGxleCcgZGVjbGFyZXMgYHl5dGV4 dCcgYXMgYSBgY2hhciAqJyBieSBkZWZhdWx0LCBub3QgYQorICAgYGNoYXJbXScuICovCisjZGVm aW5lIFlZVEVYVF9QT0lOVEVSIDEKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNl dCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKy8qICN1bmRlZiBfRklMRV9P RkZTRVRfQklUUyAqLworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUg aG9zdHMuICovCisvKiAjdW5kZWYgX0xBUkdFX0ZJTEVTICovCisKKy8qIERlZmluZSB0byAxIGlm IG9uIE1JTklYLiAqLworLyogI3VuZGVmIF9NSU5JWCAqLworCisvKiBEZWZpbmUgdG8gMiBpZiB0 aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAor ICAgdGhpcyBkZWZpbmVkLiAqLworLyogI3VuZGVmIF9QT1NJWF8xX1NPVVJDRSAqLworCisvKiBE ZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgYHN0YXQnIGFuZCBvdGhlciB0 aGluZ3MgdG8gd29yay4gKi8KKy8qICN1bmRlZiBfUE9TSVhfU09VUkNFICovCisKKy8qIEVuYWJs ZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UK KyMgZGVmaW5lIF9BTExfU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIEdOVSBleHRlbnNpb25z IG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBk ZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisvKiBFbmFibGUgdGhyZWFkaW5nIGV4dGVuc2lv bnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworIyBk ZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKKyNlbmRpZgorLyogRW5hYmxlIGV4dGVu c2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisjIGRlZmlu ZSBfVEFOREVNX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMg b24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5TSU9OU19fCisjIGRlZmluZSBfX0VYVEVO U0lPTlNfXyAxCisjZW5kaWYKKwpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00LjEu Mi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2dydWJfZXJyLmMgeGVuLTQuMS4yLWIvdG9vbHMvaW9l bXUtcWVtdS14ZW4vZ3J1Yl9lcnIuYwotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14 ZW4vZ3J1Yl9lcnIuYwkxOTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAorKysgeGVu LTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZ3J1Yl9lcnIuYwkyMDEyLTEyLTI4IDE2OjAy OjQxLjAwNzczNDE2NCArMDgwMApAQCAtMCwwICsxLDE4NiBAQAorLyogZXJyLmMgLSBlcnJvciBo YW5kbGluZyByb3V0aW5lcyAqLworLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290 bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDUsMjAwNywyMDA4ICBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog IEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVk ZSAiZ3J1Yl9lcnIuaCIKKyNpbmNsdWRlICJtaXNjLmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBHUlVCX01B WF9FUlJNU0cJCTI1NgorI2RlZmluZSBHUlVCX0VSUk9SX1NUQUNLX1NJWkUJMTAKKworZ3J1Yl9l cnJfdCBncnViX2Vycm5vOworY2hhciBncnViX2Vycm1zZ1tHUlVCX01BWF9FUlJNU0ddOworCitz dGF0aWMgc3RydWN0Cit7CisgIGdydWJfZXJyX3QgZXJybm87CisgIGNoYXIgZXJybXNnW0dSVUJf TUFYX0VSUk1TR107Cit9IGdydWJfZXJyb3Jfc3RhY2tfaXRlbXNbR1JVQl9FUlJPUl9TVEFDS19T SVpFXTsKKworc3RhdGljIGludCBncnViX2Vycm9yX3N0YWNrX3BvczsKK3N0YXRpYyBpbnQgZ3J1 Yl9lcnJvcl9zdGFja19hc3NlcnQ7CisKKworCitzdGF0aWMgaW50CitncnViX3ZzbnByaW50ZiAo Y2hhciAqc3RyLCBncnViX3NpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7 CisgIGdydWJfc2l6ZV90IHJldDsKKworICBpZiAoIW4pCisgICAgcmV0dXJuIDA7CisKKyAgCisg IHJldCA9IHZzbnByaW50ZihzdHIsIG4sIGZtdCwgYXApOworICBwcmludGYoIiVzXG4iLCBzdHIp OworICByZXR1cm4gcmV0IDwgbiA/IHJldCA6IG47Cit9CisKKworCitzdGF0aWMgaW50CitncnVi X3ZwcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworICBpbnQgcmV0Owor CisgIHJldCA9IGdydWJfdnNucHJpbnRmIChncnViX2Vycm1zZywgc2l6ZW9mIChncnViX2Vycm1z ZyksIGZtdCwgYXJncyk7CisKKyAgcmV0dXJuIHJldDsKK30KKworaW50CitncnViX2Vycl9wcmlu dGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICBpbnQgcmV0Owor CisgIHZhX3N0YXJ0IChhcCwgZm10KTsKKyAgcmV0ID0gZ3J1Yl92cHJpbnRmIChmbXQsIGFwKTsK KyAgdmFfZW5kIChhcCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworCitncnViX2Vycl90CitncnVi X2Vycm9yIChncnViX2Vycl90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0 IGFwOworCisgIGdydWJfZXJybm8gPSBuOworICB2YV9zdGFydCAoYXAsIGZtdCk7CisgIGdydWJf dnNucHJpbnRmIChncnViX2Vycm1zZywgc2l6ZW9mIChncnViX2Vycm1zZyksIGZtdCwgYXApOwor ICB2YV9lbmQgKGFwKTsKKyAgCisgIHJldHVybiBuOworfQorCit2b2lkCitncnViX2ZhdGFsIChj b25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKworICB2YV9zdGFydCAoYXAs IGZtdCk7CisgIGdydWJfdnByaW50ZiAoXyhmbXQpLCBhcCk7CisgIHZhX2VuZCAoYXApOworCisg IGV4aXQoMSk7Cit9CisKK3ZvaWQKK2dydWJfZXJyb3JfcHVzaCAodm9pZCkKK3sKKyAgLyogT25s eSBhZGQgaXRlbXMgdG8gc3RhY2ssIGlmIHRoZXJlIGlzIGVub3VnaCByb29tLiAgKi8KKyAgaWYg KGdydWJfZXJyb3Jfc3RhY2tfcG9zIDwgR1JVQl9FUlJPUl9TVEFDS19TSVpFKQorICAgIHsKKyAg ICAgIC8qIENvcHkgYWN0aXZlIGVycm9yIG1lc3NhZ2UgdG8gc3RhY2suICAqLworICAgICAgZ3J1 Yl9lcnJvcl9zdGFja19pdGVtc1tncnViX2Vycm9yX3N0YWNrX3Bvc10uZXJybm8gPSBncnViX2Vy cm5vOworICAgICAgZ3J1Yl9tZW1jcHkgKGdydWJfZXJyb3Jfc3RhY2tfaXRlbXNbZ3J1Yl9lcnJv cl9zdGFja19wb3NdLmVycm1zZywKKyAgICAgICAgICAgICAgICAgICBncnViX2Vycm1zZywKKyAg ICAgICAgICAgICAgICAgICBzaXplb2YgKGdydWJfZXJybXNnKSk7CisKKyAgICAgIC8qIEFkdmFu Y2UgdG8gbmV4dCBlcnJvciBzdGFjayBwb3NpdGlvbi4gICovCisgICAgICBncnViX2Vycm9yX3N0 YWNrX3BvcysrOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZXJlIGlzIG5vIHJv b20gZm9yIG5ldyBlcnJvciBtZXNzYWdlLiBEaXNjYXJkIG5ldyBlcnJvciBtZXNzYWdlCisgICAg ICAgICBhbmQgbWFyayBlcnJvciBzdGFjayBhc3NlcnRpb24gZmxhZy4gICovCisgICAgICBncnVi X2Vycm9yX3N0YWNrX2Fzc2VydCA9IDE7CisgICAgfQorCisgIC8qIEFsbG93IGZ1cnRoZXIgb3Bl cmF0aW9uIG9mIG90aGVyIGNvbXBvbmVudHMgYnkgcmVzZXR0aW5nCisgICAgIGFjdGl2ZSBlcnJu byB0byBHUlVCX0VSUl9OT05FLiAgKi8KKyAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7Cit9 CisKK2ludAorZ3J1Yl9lcnJvcl9wb3AgKHZvaWQpCit7CisgIGlmIChncnViX2Vycm9yX3N0YWNr X3BvcyA+IDApCisgICAgeworICAgICAgLyogUG9wIGVycm9yIG1lc3NhZ2UgZnJvbSBlcnJvciBz dGFjayB0byBjdXJyZW50IGFjdGl2ZSBlcnJvci4gICovCisgICAgICBncnViX2Vycm9yX3N0YWNr X3Bvcy0tOworCisgICAgICBncnViX2Vycm5vID0gZ3J1Yl9lcnJvcl9zdGFja19pdGVtc1tncnVi X2Vycm9yX3N0YWNrX3Bvc10uZXJybm87CisgICAgICBncnViX21lbWNweSAoZ3J1Yl9lcnJtc2cs CisgICAgICAgICAgICAgICAgICAgZ3J1Yl9lcnJvcl9zdGFja19pdGVtc1tncnViX2Vycm9yX3N0 YWNrX3Bvc10uZXJybXNnLAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZ3J1Yl9lcnJtc2cp KTsKKworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhl cmUgaXMgbm8gbW9yZSBpdGVtcyBvbiBlcnJvciBzdGFjaywgcmVzZXQgdG8gbm8gZXJyb3Igc3Rh dGUuICAqLworICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7CisKKyAgICAgIHJldHVy biAwOworICAgIH0KK30KKwordm9pZAorZ3J1Yl9wcmludF9lcnJvciAodm9pZCkKK3sKKyAgLyog UHJpbnQgZXJyb3IgbWVzc2FnZXMgaW4gcmV2ZXJzZSBvcmRlci4gRmlyc3QgcHJpbnQgYWN0aXZl IGVycm9yIG1lc3NhZ2UKKyAgICAgYW5kIHRoZW4gZW1wdHkgZXJyb3Igc3RhY2suICAqLworICBk bworICAgIHsKKyAgICAgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAg IGdydWJfZXJyX3ByaW50ZiAoImVycm9yOiAlcy5cbiIsIGdydWJfZXJybXNnKTsKKyAgICB9Cisg IHdoaWxlIChncnViX2Vycm9yX3BvcCAoKSk7CisKKyAgLyogSWYgdGhlcmUgd2FzIGFuIGFzc2Vy dCB3aGlsZSB1c2luZyBlcnJvciBzdGFjaywgcmVwb3J0IGFib3V0IGl0LiAgKi8KKyAgaWYgKGdy dWJfZXJyb3Jfc3RhY2tfYXNzZXJ0KQorICAgIHsKKyAgICAgIGdydWJfZXJyX3ByaW50ZiAoImFz c2VydDogZXJyb3Igc3RhY2sgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iKTsKKyAgICAgIGdydWJfZXJy b3Jfc3RhY2tfYXNzZXJ0ID0gMDsKKyAgICB9Cit9CisKKworaW50IHRlc3RfZ3J1Yl9lcnIoKQor eworICBncnViX2Vycm9yKDIyMiwgInRlc3QgJXNcbiIsICJncnViX2Vycm9yIik7CisgIGdydWJf ZXJyX3ByaW50ZigidGVzdCAlc1xuIiwgImdydWJfZXJyX3ByaW50ZiIpOworICBncnViX2ZhdGFs KCJ0ZXN0ICVzXG4iLCAiZ3J1Yl9mYXRhbCIpOworfQorCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJw TiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZ3J1Yl9lcnIuaCB4ZW4tNC4x LjItYi90b29scy9pb2VtdS1xZW11LXhlbi9ncnViX2Vyci5oCi0tLSB4ZW4tNC4xLjItYS90b29s cy9pb2VtdS1xZW11LXhlbi9ncnViX2Vyci5oCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAw ICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9ncnViX2Vyci5oCTIw MTItMTItMjggMTY6MDI6NDEuMDA3NzM0MTY0ICswODAwCkBAIC0wLDAgKzEsODEgQEAKKy8qIGVy ci5oIC0gZXJyb3IgbnVtYmVycyBhbmQgcHJvdG90eXBlcyAqLworLyoKKyAqICBHUlVCICAtLSAg R1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDUsMjAw NywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv bmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorICovCisKKyNpZm5kZWYgR1JVQl9FUlJfSEVBREVSCisjZGVmaW5lIEdSVUJfRVJSX0hFQURF UgkxCisKKwordHlwZWRlZiBlbnVtCisgIHsKKyAgICBHUlVCX0VSUl9OT05FID0gMCwKKyAgICBH UlVCX0VSUl9URVNUX0ZBSUxVUkUsCisgICAgR1JVQl9FUlJfQkFEX01PRFVMRSwKKyAgICBHUlVC X0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgIEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgR1JV Ql9FUlJfRklMRV9OT1RfRk9VTkQsCisgICAgR1JVQl9FUlJfRklMRV9SRUFEX0VSUk9SLAorICAg IEdSVUJfRVJSX0JBRF9GSUxFTkFNRSwKKyAgICBHUlVCX0VSUl9VTktOT1dOX0ZTLAorICAgIEdS VUJfRVJSX0JBRF9GUywKKyAgICBHUlVCX0VSUl9CQURfTlVNQkVSLAorICAgIEdSVUJfRVJSX09V VF9PRl9SQU5HRSwKKyAgICBHUlVCX0VSUl9VTktOT1dOX0RFVklDRSwKKyAgICBHUlVCX0VSUl9C QURfREVWSUNFLAorICAgIEdSVUJfRVJSX1JFQURfRVJST1IsCisgICAgR1JVQl9FUlJfV1JJVEVf RVJST1IsCisgICAgR1JVQl9FUlJfVU5LTk9XTl9DT01NQU5ELAorICAgIEdSVUJfRVJSX0lOVkFM SURfQ09NTUFORCwKKyAgICBHUlVCX0VSUl9CQURfQVJHVU1FTlQsCisgICAgR1JVQl9FUlJfQkFE X1BBUlRfVEFCTEUsCisgICAgR1JVQl9FUlJfVU5LTk9XTl9PUywKKyAgICBHUlVCX0VSUl9CQURf T1MsCisgICAgR1JVQl9FUlJfTk9fS0VSTkVMLAorICAgIEdSVUJfRVJSX0JBRF9GT05ULAorICAg IEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsCisgICAgR1JVQl9FUlJfU1lNTElOS19MT09Q LAorICAgIEdSVUJfRVJSX0JBRF9HWklQX0RBVEEsCisgICAgR1JVQl9FUlJfTUVOVSwKKyAgICBH UlVCX0VSUl9USU1FT1VULAorICAgIEdSVUJfRVJSX0lPLAorICAgIEdSVUJfRVJSX0FDQ0VTU19E RU5JRUQsCisgICAgR1JVQl9FUlJfTUVOVV9FU0NBUEUsCisgICAgR1JVQl9FUlJfTk9UX0ZPVU5E LAorICAgIEdSVUJfRVJSX1VOS05PV04KKworICB9CitncnViX2Vycl90OworCisKKyNpZm5kZWYg XworIyBkZWZpbmUgXyhTdHJpbmcpIFN0cmluZworI2VuZGlmCisKK2V4dGVybiBncnViX2Vycl90 IGdydWJfZXJybm87CitleHRlcm4gY2hhciBncnViX2Vycm1zZ1tdOworCitncnViX2Vycl90IGdy dWJfZXJyb3IgKGdydWJfZXJyX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBncnVi X2ZhdGFsIChjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsK K3ZvaWQgZ3J1Yl9lcnJvcl9wdXNoICh2b2lkKTsKK2ludCBncnViX2Vycm9yX3BvcCAodm9pZCk7 Cit2b2lkIGdydWJfcHJpbnRfZXJyb3IgKHZvaWQpOworaW50IGdydWJfZXJyX3ByaW50ZiAoY29u c3QgY2hhciAqZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50Ziwg MSwgMikpKTsKK2ludCB0ZXN0X2dydWJfZXJyKHZvaWQpOworCisjZW5kaWYgLyogISBHUlVCX0VS Ul9IRUFERVIgKi8KZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjItYS90b29s cy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9jb25maWcuaCB4ZW4tNC4xLjItYi90b29scy9pb2Vt dS1xZW11LXhlbi9ncnViLWZhdC9jb25maWcuaAotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUt cWVtdS14ZW4vZ3J1Yi1mYXQvY29uZmlnLmgJMTk3MC0wMS0wMSAwNzowMDowMC4wMDAwMDAwMDAg KzA3MDAKKysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL2dydWItZmF0L2NvbmZp Zy5oCTIwMTItMTItMjggMTY6MDI6NDEuMDA4NjQwODM4ICswODAwCkBAIC0wLDAgKzEsMjUxIEBA CisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4g ICovCisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRv aGVhZGVyLiAgKi8KKworLyogRGVmaW5lIGl0IGlmIEdBUyByZXF1aXJlcyB0aGF0IGFic29sdXRl IGluZGlyZWN0IGNhbGxzL2p1bXBzIGFyZSBub3QKKyAgIHByZWZpeGVkIHdpdGggYW4gYXN0ZXJp c2sgKi8KKy8qICN1bmRlZiBBQlNPTFVURV9XSVRIT1VUX0FTVEVSSVNLICovCisKKy8qIERlZmlu ZSBpdCB0byBcImFkZHIzMlwiIG9yIFwiYWRkcjMyO1wiIHRvIG1ha2UgR0FTIGhhcHB5ICovCisj ZGVmaW5lIEFERFIzMiBhZGRyMzIKKworLyogRGVmaW5lIGl0IHRvIFwiZGF0YTMyXCIgb3IgXCJk YXRhMzI7XCIgdG8gbWFrZSBHQVMgaGFwcHkgKi8KKyNkZWZpbmUgREFUQTMyIGRhdGEzMgorCisv KiBEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1 c2VyJ3MgbmF0aXZlCisgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCisjZGVmaW5lIEVOQUJM RV9OTFMgMQorCisvKiBEZWZpbmUgaWYgQyBzeW1ib2xzIGdldCBhbiB1bmRlcnNjb3JlIGFmdGVy IGNvbXBpbGF0aW9uICovCisvKiAjdW5kZWYgSEFWRV9BU01fVVNDT1JFICovCisKKy8qIERlZmlu ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNwcmludGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI QVZFX0FTUFJJTlRGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFgg ZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUKKyAgIENvcmVGb3VuZGF0aW9uIGZy YW1ld29yay4gKi8KKy8qICN1bmRlZiBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgKi8KKworLyog RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFggZnVuY3Rpb24gQ0ZQcmVmZXJlbmNl c0NvcHlBcHBWYWx1ZSBpbgorICAgdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay4gKi8KKy8q ICN1bmRlZiBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgKi8KKworLyogRGVmaW5lIHRv IDEgaWYgeW91IGhhdmUgdGhlIDxjdXJzZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYg SEFWRV9DVVJTRVNfSCAqLworCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5j dGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgorICAgKi8KKyNkZWZpbmUg SEFWRV9EQ0dFVFRFWFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVu dC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuCisgICAqLworI2RlZmluZSBI QVZFX0RJUkVOVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmdDJidWls ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GVDJCVUlMRF9IIDEKKworLyogRGVm aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI QVZFX0dFVEdJRCAxCisKKy8qIERlZmluZSBpZiBnZXRyYXdwYXJ0aXRpb24oKSBpbiAtbHV0aWwg Y2FuIGJlIHVzZWQgKi8KKy8qICN1bmRlZiBIQVZFX0dFVFJBV1BBUlRJVElPTiAqLworCisvKiBE ZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9y IHByZWluc3RhbGxlZC4gKi8KKyNkZWZpbmUgSEFWRV9HRVRURVhUIDEKKworLyogRGVmaW5lIHRv IDEgaWYgeW91IGhhdmUgdGhlIGBnZXR1aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dF VFVJRCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbiBhbmQg aXQgd29ya3MuICovCisvKiAjdW5kZWYgSEFWRV9JQ09OViAqLworCisvKiBEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZF X0lOVFRZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5o PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIERlZmluZSB0 byAxIGlmIHlvdSBoYXZlIHRoZSBgbHN0YXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xT VEFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVy IGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5 b3UgaGF2ZSB0aGUgYG1lbWFsaWduJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NRU1BTElH TiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24u ICovCisjZGVmaW5lIEhBVkVfTUVNTU9WRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl IHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01FTU9SWV9IIDEK KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuY3Vyc2VzL2N1cnNlcy5oPiBoZWFk ZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX05DVVJTRVNfQ1VSU0VTX0ggKi8KKworLyogRGVm aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuY3Vyc2VzLmg+IGhlYWRlciBmaWxlLiAqLworLyog I3VuZGVmIEhBVkVfTkNVUlNFU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo ZSA8bmRpci5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuICovCisvKiAjdW5k ZWYgSEFWRV9ORElSX0ggKi8KKworLyogRGVmaW5lIGlmIG9wZW5kaXNrKCkgaW4gLWx1dGlsIGNh biBiZSB1c2VkICovCisvKiAjdW5kZWYgSEFWRV9PUEVORElTSyAqLworCisvKiBEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgPHBjaS9wY2kuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYg SEFWRV9QQ0lfUENJX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3Np eF9tZW1hbGlnbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUE9TSVhfTUVNQUxJR04gMQor CisvKiBEZWZpbmUgaWYgcmV0dXJuc190d2ljZSBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkICovCisv KiAjdW5kZWYgSEFWRV9SRVRVUk5TX1RXSUNFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo YXZlIHRoZSBgc2JyaycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0JSSyAxCisKKy8qIERl ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8U0RML1NETC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8q ICN1bmRlZiBIQVZFX1NETF9TRExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0 aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisK Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAq LworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg dGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkRVUCAxCisKKy8qIERl ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNk ZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg PHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisKKy8q IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Rpci5oPiBoZWFkZXIgZmlsZSwgYW5k IGl0IGRlZmluZXMgYERJUicuCisgICAqLworLyogI3VuZGVmIEhBVkVfU1lTX0RJUl9IICovCisK Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZjbnRsLmg+IGhlYWRlciBmaWxl LiAqLworI2RlZmluZSBIQVZFX1NZU19GQ05UTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91 IGhhdmUgdGhlIDxzeXMvbWtkZXYuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9T WVNfTUtERVZfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9uZGly Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCisvKiAjdW5kZWYg SEFWRV9TWVNfTkRJUl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lz L3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8q IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N5c21hY3Jvcy5oPiBoZWFkZXIgZmls ZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1lTTUFDUk9TX0ggMQorCisvKiBEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW RV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlv cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9URVJNSU9TX0ggMQorCisvKiBEZWZp bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp bmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXNi Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVNCX0ggKi8KKworLyogRGVmaW5l IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2YXNwcmludGYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI QVZFX1ZBU1BSSU5URiAxCisKKy8qIERlZmluZSB0byAxIGlmIGBtYWpvcicsIGBtaW5vcicsIGFu ZCBgbWFrZWRldicgYXJlIGRlY2xhcmVkIGluIDxta2Rldi5oPi4KKyAgICovCisvKiAjdW5kZWYg TUFKT1JfSU5fTUtERVYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYG1ham9yJywgYG1pbm9yJywg YW5kIGBtYWtlZGV2JyBhcmUgZGVjbGFyZWQgaW4KKyAgIDxzeXNtYWNyb3MuaD4uICovCisvKiAj dW5kZWYgTUFKT1JfSU5fU1lTTUFDUk9TICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBlbmFi bGUgbWVtb3J5IG1hbmFnZXIgZGVidWdnaW5nLiAqLworLyogI3VuZGVmIE1NX0RFQlVHICovCisK Ky8qIERlZmluZSB0byAxIGlmIEdDQyBnZW5lcmF0ZXMgY2FsbHMgdG8gX19yZWdpc3Rlcl9mcmFt ZV9pbmZvKCkgKi8KKy8qICN1bmRlZiBORUVEX1JFR0lTVEVSX0ZSQU1FX0lORk8gKi8KKworLyog TmFtZSBvZiBwYWNrYWdlICovCisjZGVmaW5lIFBBQ0tBR0UgImJ1cmciCisKKy8qIERlZmluZSB0 byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBi ZSBzZW50LiAqLworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYmVhbjEyM2NoQGdtYWlsLmNv bSIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2Rl ZmluZSBQQUNLQUdFX05BTUUgIkJVUkciCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFu ZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkJV UkcgMS45OCIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhp cyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImJ1cmciCisKKy8qIERlZmlu ZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVS U0lPTiAiMS45OCIKKworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXpl b2YuICovCisjZGVmaW5lIFNJWkVPRl9MT05HIDgKKworLyogVGhlIHNpemUgb2YgYHZvaWQgKics IGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1ZPSURfUCA4CisKKy8q IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI2Rl ZmluZSBTVERDX0hFQURFUlMgMQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisj ZGVmaW5lIFZFUlNJT04gIjEuOTgiCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBp ZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNh bnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCBhbmQg VkFYKS4gKi8KKyNpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjIGRlZmluZSBXT1JEU19CSUdF TkRJQU4gMQorI2VsaWYgISBkZWZpbmVkIF9fTElUVExFX0VORElBTl9fCisvKiAjIHVuZGVmIFdP UkRTX0JJR0VORElBTiAqLworI2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIGBsZXgnIGRlY2xh cmVzIGB5eXRleHQnIGFzIGEgYGNoYXIgKicgYnkgZGVmYXVsdCwgbm90IGEKKyAgIGBjaGFyW10n LiAqLworI2RlZmluZSBZWVRFWFRfUE9JTlRFUiAxCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEg ZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisvKiAjdW5k ZWYgX0ZJTEVfT0ZGU0VUX0JJVFMgKi8KKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24g QUlYLXN0eWxlIGhvc3RzLiAqLworLyogI3VuZGVmIF9MQVJHRV9GSUxFUyAqLworCisvKiBEZWZp bmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKy8qICN1bmRlZiBfTUlOSVggKi8KKworLyogRGVmaW5l IHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhj ZXB0IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBfUE9TSVhfMV9TT1VSQ0Ug Ki8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBh bmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NPVVJDRSAqLwor CisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBBSVggMywgSW50ZXJpeC4gICovCisjaWZuZGVmIF9B TExfU09VUkNFCisjIGRlZmluZSBfQUxMX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSBHTlUg ZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKyNpZm5kZWYgX0dOVV9T T1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIHRocmVhZGlu ZyBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1B TlRJQ1MKKyMgZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCisjZW5kaWYKKy8qIEVu YWJsZSBleHRlbnNpb25zIG9uIEhQIE5vblN0b3AuICAqLworI2lmbmRlZiBfVEFOREVNX1NPVVJD RQorIyBkZWZpbmUgX1RBTkRFTV9TT1VSQ0UgMQorI2VuZGlmCisvKiBFbmFibGUgZ2VuZXJhbCBl eHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworIyBkZWZp bmUgX19FWFRFTlNJT05TX18gMQorI2VuZGlmCisKZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1V OCB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9mYXQuYyB4ZW4tNC4x LjItYi90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9mYXQuYwotLS0geGVuLTQuMS4yLWEv dG9vbHMvaW9lbXUtcWVtdS14ZW4vZ3J1Yi1mYXQvZmF0LmMJMTk3MC0wMS0wMSAwNzowMDowMC4w MDAwMDAwMDAgKzA3MDAKKysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL2dydWIt ZmF0L2ZhdC5jCTIwMTItMTItMjggMTY6MDI6NDEuMDA4NjQwODM4ICswODAwCkBAIC0wLDAgKzEs NzExIEBACisvKiBmYXQuYyAtIEZBVCBmaWxlc3lzdGVtICovCisvKgorICogIEdSVUIgIC0tICBH UmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAy LDIwMDMsMjAwNCwyMDA1LDIwMDcsMjAwOCwyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgIm1pc2MuaCIKKyNpbmNs dWRlICJmYXQuaCIKKworCitzdGF0aWMgaW50CitmYXRfbG9nMiAodW5zaWduZWQgeCkKK3sKKyAg aW50IGk7CisKKyAgaWYgKHggPT0gMCkKKyAgICByZXR1cm4gLTE7CisKKyAgZm9yIChpID0gMDsg KHggJiAxKSA9PSAwOyBpKyspCisgICAgeCA+Pj0gMTsKKworICBpZiAoeCAhPSAxKQorICAgIHJl dHVybiAtMTsKKworICByZXR1cm4gaTsKK30KKworCitzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqCitn cnViX2ZhdF9tb3VudCAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHVpbnQzMl90IHBhcnRfb2ZmX3Nl Y3RvcikKK3sKKyAgc3RydWN0IGdydWJfZmF0X2JwYiBicGI7CisgIHN0cnVjdCBncnViX2ZhdF9k YXRhICpkYXRhID0gMDsKKyAgZ3J1Yl91aW50MzJfdCBmaXJzdF9mYXQsIG1hZ2ljOworICBpbnQ2 NF90IG9mZl9ieXRlcyA9IChpbnQ2NF90KXBhcnRfb2ZmX3NlY3RvciA8PCBHUlVCX0RJU0tfU0VD VE9SX0JJVFM7CisKKyAgaWYgKCEgYnMpCisgICAgZ290byBmYWlsOworCisgIGRhdGEgPSAoc3Ry dWN0IGdydWJfZmF0X2RhdGEgKikgbWFsbG9jIChzaXplb2YgKCpkYXRhKSk7CisgIGlmICghIGRh dGEpCisgICAgZ290byBmYWlsOworCisgIC8qIFJlYWQgdGhlIEJQQi4gICovCisgIGlmIChiZHJ2 X3ByZWFkKGJzLCBvZmZfYnl0ZXMsICZicGIsIHNpemVvZihicGIpKSAhPSBzaXplb2YoYnBiKSkK KyAgICB7CisgICAgICBwcmludGYoImJkcnZfcHJlYWQgZmFpbC4uLi5cbiIpOworICAgICAgZ290 byBmYWlsOworICAgIH0KKyAgICAKKyAgaWYgKGdydWJfc3RybmNtcCgoY29uc3QgY2hhciAqKSBi cGIudmVyc2lvbl9zcGVjaWZpYy5mYXQxMl9vcl9mYXQxNi5mc3R5cGUsICJGQVQxMiIsIDUpCisg ICAgICAmJiBncnViX3N0cm5jbXAoKGNvbnN0IGNoYXIgKikgYnBiLnZlcnNpb25fc3BlY2lmaWMu ZmF0MTJfb3JfZmF0MTYuZnN0eXBlLCAiRkFUMTYiLCA1KQorICAgICAgJiYgZ3J1Yl9zdHJuY21w KChjb25zdCBjaGFyICopIGJwYi52ZXJzaW9uX3NwZWNpZmljLmZhdDMyLmZzdHlwZSwgIkZBVDMy IiwgNSkpCisgICAgeworICAgICAgCisgICAgICBwcmludGYoImZhaWwgaGVyZS0tPmdydWJfc3Ry bmNtcC4uLi4uLmxpbmVbJXVdXG4iLCBfX0xJTkVfXyk7CisgICAgICBnb3RvIGZhaWw7CisgICAg fQorCisgIC8qIEdldCB0aGUgc2l6ZXMgb2YgbG9naWNhbCBzZWN0b3JzIGFuZCBjbHVzdGVycy4g ICovCisgIGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMgPQorICAgIGZhdF9sb2cyIChncnViX2xl X3RvX2NwdTE2IChicGIuYnl0ZXNfcGVyX3NlY3RvcikpOworICBwcmludGYoImJwYi5ieXRlc19w ZXJfc2VjdG9yPTB4JXgsIGxlX3RvX2NwdTE2PTB4JXhcbiIsCisJIGJwYi5ieXRlc19wZXJfc2Vj dG9yLCBncnViX2xlX3RvX2NwdTE2IChicGIuYnl0ZXNfcGVyX3NlY3RvcikpOworICAKKworICBp ZiAoZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cyA8IEdSVUJfRElTS19TRUNUT1JfQklUUykKKyAg eworICAgIHByaW50ZigiZmFpbCBoZXJlLS0+bG9naWNhbF9zZWN0b3JfYml0cy4uLi4uLmxpbmVb JXVdXG4iLCBfX0xJTkVfXyk7IAorICAgIGdvdG8gZmFpbDsKKyAgfQorICBkYXRhLT5sb2dpY2Fs X3NlY3Rvcl9iaXRzIC09IEdSVUJfRElTS19TRUNUT1JfQklUUzsKKworICBwcmludGYoImJwYi5z ZWN0b3JzX3Blcl9jbHVzdGVyPSV1XG4iLCBicGIuc2VjdG9yc19wZXJfY2x1c3Rlcik7CisgIGRh dGEtPmNsdXN0ZXJfYml0cyA9IGZhdF9sb2cyIChicGIuc2VjdG9yc19wZXJfY2x1c3Rlcik7Cisg IGlmIChkYXRhLT5jbHVzdGVyX2JpdHMgPCAwKQorICAgIHsKKyAgICAgIHByaW50ZigiZmFpbCBo ZXJlLS0+Y2x1c3Rlcl9iaXRzLi4uLi4ubGluZVsldV1cbiIsIF9fTElORV9fKTsgCisgICAgICBn b3RvIGZhaWw7CisgICAgfQorICBkYXRhLT5jbHVzdGVyX2JpdHMgKz0gZGF0YS0+bG9naWNhbF9z ZWN0b3JfYml0czsKKworICAvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgRkFUcy4gICovCisgIHBy aW50ZigiYnBiLm51bV9yZXNlcnZlZF9zZWN0b3JzPSV1LCBsZV90b19jcHUxNj0ldVxuIiwKKwkg YnBiLm51bV9yZXNlcnZlZF9zZWN0b3JzLCBncnViX2xlX3RvX2NwdTE2IChicGIubnVtX3Jlc2Vy dmVkX3NlY3RvcnMpKTsKKyAgZGF0YS0+ZmF0X3NlY3RvciA9IHBhcnRfb2ZmX3NlY3RvciArIChn cnViX2xlX3RvX2NwdTE2IChicGIubnVtX3Jlc2VydmVkX3NlY3RvcnMpCisJCSAgICAgIDw8IGRh dGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMpOworICBwcmludGYoImRhdGEtPmZhdF9zZWN0b3I9JXVc biIsIGRhdGEtPmZhdF9zZWN0b3IpOworICBpZiAoZGF0YS0+ZmF0X3NlY3RvciA9PSAwKQorICAg IHsKKyAgICAgIHByaW50ZigiZmFpbCBoZXJlLS0+ZmF0X3NlY3Rvci4uLi4uLmxpbmVbJXVdXG4i LCBfX0xJTkVfXyk7IAorICAgICAgZ290byBmYWlsOworICAgIH0KKyAgZGF0YS0+c2VjdG9yc19w ZXJfZmF0ID0gKChicGIuc2VjdG9yc19wZXJfZmF0XzE2CisJCQkgICAgPyBncnViX2xlX3RvX2Nw dTE2IChicGIuc2VjdG9yc19wZXJfZmF0XzE2KQorCQkJICAgIDogZ3J1Yl9sZV90b19jcHUzMiAo YnBiLnZlcnNpb25fc3BlY2lmaWMuZmF0MzIuc2VjdG9yc19wZXJfZmF0XzMyKSkKKwkJCSAgIDw8 IGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMpOworICBwcmludGYoImJwYi52ZXJzaW9uX3NwZWNp ZmljLmZhdDMyLnNlY3RvcnNfcGVyX2ZhdF8zMj0ldVxuIgorCSAiZ3J1Yl9sZV90b19jcHUzMiAo YnBiLnZlcnNpb25fc3BlY2lmaWMuZmF0MzIuc2VjdG9yc19wZXJfZmF0XzMyKT0ldVxuIiwKKwkg YnBiLnZlcnNpb25fc3BlY2lmaWMuZmF0MzIuc2VjdG9yc19wZXJfZmF0XzMyLAorCSBncnViX2xl X3RvX2NwdTMyIChicGIudmVyc2lvbl9zcGVjaWZpYy5mYXQzMi5zZWN0b3JzX3Blcl9mYXRfMzIp KTsKKyAgaWYgKGRhdGEtPnNlY3RvcnNfcGVyX2ZhdCA9PSAwKQorICAgIGdvdG8gZmFpbDsKKwor ICAvKiBHZXQgdGhlIG51bWJlciBvZiBzZWN0b3JzIGluIHRoaXMgdm9sdW1lLiAgKi8KKyAgZGF0 YS0+bnVtX3NlY3RvcnMgPSAoKGJwYi5udW1fdG90YWxfc2VjdG9yc18xNgorCQkJPyBncnViX2xl X3RvX2NwdTE2IChicGIubnVtX3RvdGFsX3NlY3RvcnNfMTYpCisJCQk6IGdydWJfbGVfdG9fY3B1 MzIgKGJwYi5udW1fdG90YWxfc2VjdG9yc18zMikpCisJCSAgICAgICA8PCBkYXRhLT5sb2dpY2Fs X3NlY3Rvcl9iaXRzKTsKKyAgaWYgKGRhdGEtPm51bV9zZWN0b3JzID09IDApCisgICAgeworICAg ICAgcHJpbnRmKCJmYWlsIGhlcmUtLT5udW1fc2VjdG9ycy4uLi4uLmxpbmVbJXVdXG4iLCBfX0xJ TkVfXyk7IAorICAgICAgZ290byBmYWlsOworICAgIH0KKyAgLyogR2V0IGluZm9ybWF0aW9uIGFi b3V0IHRoZSByb290IGRpcmVjdG9yeS4gICovCisgIGlmIChicGIubnVtX2ZhdHMgPT0gMCkKKyAg ICB7CisgICAgICBwcmludGYoImZhaWwgaGVyZS0tPm51bV9mYXRzLi4uLi4ubGluZVsldV1cbiIs IF9fTElORV9fKTsgCisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICBkYXRhLT5yb290X3NlY3Rv ciA9IGRhdGEtPmZhdF9zZWN0b3IgKyBicGIubnVtX2ZhdHMgKiBkYXRhLT5zZWN0b3JzX3Blcl9m YXQ7CisgIGRhdGEtPm51bV9yb290X3NlY3RvcnMKKyAgICA9ICgoKChncnViX3VpbnQzMl90KSBn cnViX2xlX3RvX2NwdTE2IChicGIubnVtX3Jvb3RfZW50cmllcykKKwkgKiBHUlVCX0ZBVF9ESVJf RU5UUllfU0laRQorCSArIGdydWJfbGVfdG9fY3B1MTYgKGJwYi5ieXRlc19wZXJfc2VjdG9yKSAt IDEpCisJPj4gKGRhdGEtPmxvZ2ljYWxfc2VjdG9yX2JpdHMgKyBHUlVCX0RJU0tfU0VDVE9SX0JJ VFMpKQorICAgICAgIDw8IChkYXRhLT5sb2dpY2FsX3NlY3Rvcl9iaXRzKSk7CisKKyAgZGF0YS0+ Y2x1c3Rlcl9zZWN0b3IgPSBkYXRhLT5yb290X3NlY3RvciArIGRhdGEtPm51bV9yb290X3NlY3Rv cnM7CisgIGRhdGEtPm51bV9jbHVzdGVycyA9ICgoKGRhdGEtPm51bV9zZWN0b3JzIC0gZGF0YS0+ Y2x1c3Rlcl9zZWN0b3IpCisJCQkgPj4gKGRhdGEtPmNsdXN0ZXJfYml0cyArIGRhdGEtPmxvZ2lj YWxfc2VjdG9yX2JpdHMpKQorCQkJKyAyKTsKKworICBpZiAoZGF0YS0+bnVtX2NsdXN0ZXJzIDw9 IDIpCisgICAgeworICAgICAgcHJpbnRmKCJmYWlsIGhlcmUtLT5udW1fY2x1c3RlcnMuLi4uLi5s aW5lWyV1XVxuIiwgX19MSU5FX18pOyAKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIGlmICgh IGJwYi5zZWN0b3JzX3Blcl9mYXRfMTYpCisgICAgeworICAgICAgLyogRkFUMzIuICAqLworICAg ICAgZ3J1Yl91aW50MTZfdCBmbGFncyA9IGdydWJfbGVfdG9fY3B1MTYgKGJwYi52ZXJzaW9uX3Nw ZWNpZmljLmZhdDMyLmV4dGVuZGVkX2ZsYWdzKTsKKworICAgICAgZGF0YS0+cm9vdF9jbHVzdGVy ID0gZ3J1Yl9sZV90b19jcHUzMiAoYnBiLnZlcnNpb25fc3BlY2lmaWMuZmF0MzIucm9vdF9jbHVz dGVyKTsKKyAgICAgIGRhdGEtPmZhdF9zaXplID0gMzI7CisgICAgICBkYXRhLT5jbHVzdGVyX2Vv Zl9tYXJrID0gMHgwZmZmZmZmODsKKworICAgICAgaWYgKGZsYWdzICYgMHg4MCkKKwl7CisJICAv KiBHZXQgYW4gYWN0aXZlIEZBVC4gICovCisJICB1bnNpZ25lZCBhY3RpdmVfZmF0ID0gZmxhZ3Mg JiAweGY7CisKKwkgIGlmIChhY3RpdmVfZmF0ID4gYnBiLm51bV9mYXRzKQorCSAgICBnb3RvIGZh aWw7CisKKwkgIGRhdGEtPmZhdF9zZWN0b3IgKz0gYWN0aXZlX2ZhdCAqIGRhdGEtPnNlY3RvcnNf cGVyX2ZhdDsKKwl9CisKKyAgICAgIGlmIChicGIubnVtX3Jvb3RfZW50cmllcyAhPSAwIHx8IGJw Yi52ZXJzaW9uX3NwZWNpZmljLmZhdDMyLmZzX3ZlcnNpb24gIT0gMCkKKwlnb3RvIGZhaWw7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRkFUMTIgb3IgRkFUMTYuICAqLworICAgICAg ZGF0YS0+cm9vdF9jbHVzdGVyID0gfjBVOworCisgICAgICBpZiAoZGF0YS0+bnVtX2NsdXN0ZXJz IDw9IDQwODUgKyAyKQorCXsKKwkgIC8qIEZBVDEyLiAgKi8KKwkgIGRhdGEtPmZhdF9zaXplID0g MTI7CisJICBkYXRhLT5jbHVzdGVyX2VvZl9tYXJrID0gMHgwZmY4OworCX0KKyAgICAgIGVsc2UK Kwl7CisJICAvKiBGQVQxNi4gICovCisJICBkYXRhLT5mYXRfc2l6ZSA9IDE2OworCSAgZGF0YS0+ Y2x1c3Rlcl9lb2ZfbWFyayA9IDB4ZmZmODsKKwl9CisgICAgfQorCisgIC8qIE1vcmUgc2FuaXR5 IGNoZWNrcy4gICovCisgIGlmIChkYXRhLT5udW1fc2VjdG9ycyA8PSBkYXRhLT5mYXRfc2VjdG9y KQorICAgIGdvdG8gZmFpbDsKKworICAKKyAgcHJpbnRmKCJkYXRhLT5mYXRfc2VjdG9yPSV1LCBk YXRhLT5zZWN0b3JzX3Blcl9mYXQ9JXVcbiIsCisJIGRhdGEtPmZhdF9zZWN0b3IsIGRhdGEtPnNl Y3RvcnNfcGVyX2ZhdCk7CisgIGlmIChiZHJ2X3ByZWFkKGJzLAorCQkgZGF0YS0+ZmF0X3NlY3Rv ciA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFMsCisJCSAmZmlyc3RfZmF0LAorCQkgc2l6ZW9mIChm aXJzdF9mYXQpKSAhPSBzaXplb2YoZmlyc3RfZmF0KSkKKyAgICB7CisgICAgICBwcmludGYoImZh aWwgaGVyZS0tPmJkcnZfcHJlYWQuLi4uLi5saW5lWyV1XVxuIiwgX19MSU5FX18pOyAKKyAgICAg IGdvdG8gZmFpbDsKKyAgICB9CisKKyAgZmlyc3RfZmF0ID0gZ3J1Yl9sZV90b19jcHUzMiAoZmly c3RfZmF0KTsKKworICBpZiAoZGF0YS0+ZmF0X3NpemUgPT0gMzIpCisgICAgeworICAgICAgZmly c3RfZmF0ICY9IDB4MGZmZmZmZmY7CisgICAgICBtYWdpYyA9IDB4MGZmZmZmMDA7CisgICAgfQor ICBlbHNlIGlmIChkYXRhLT5mYXRfc2l6ZSA9PSAxNikKKyAgICB7CisgICAgICBmaXJzdF9mYXQg Jj0gMHgwMDAwZmZmZjsKKyAgICAgIG1hZ2ljID0gMHhmZjAwOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGZpcnN0X2ZhdCAmPSAweDAwMDAwZmZmOworICAgICAgbWFnaWMgPSAweDBmMDA7 CisgICAgfQorCisgIC8qIFNlcmlhbCBudW1iZXIuICAqLworICBpZiAoYnBiLnNlY3RvcnNfcGVy X2ZhdF8xNikKKyAgICBkYXRhLT51dWlkID0gZ3J1Yl9sZV90b19jcHUzMiAoYnBiLnZlcnNpb25f c3BlY2lmaWMuZmF0MTJfb3JfZmF0MTYubnVtX3NlcmlhbCk7CisgIGVsc2UKKyAgICBkYXRhLT51 dWlkID0gZ3J1Yl9sZV90b19jcHUzMiAoYnBiLnZlcnNpb25fc3BlY2lmaWMuZmF0MzIubnVtX3Nl cmlhbCk7CisKKyAgLyogSWdub3JlIHRoZSAzcmQgYml0LCBiZWNhdXNlIHNvbWUgQklPU2VzIGFz c2lnbnMgMHhGMCB0byB0aGUgbWVkaWEKKyAgICAgZGVzY3JpcHRvciwgZXZlbiBpZiBpdCBpcyBh IHNvLWNhbGxlZCBzdXBlcmZsb3BweSAoZS5nLiBhbiBVU0Iga2V5KS4KKyAgICAgVGhlIGNoZWNr IG1heSBiZSB0b28gc3RyaWN0IGZvciB0aGlzIGtpbmQgb2Ygc3R1cGlkIEJJT1NlcywgYXMKKyAg ICAgdGhleSBvdmVyd3JpdGUgdGhlIG1lZGlhIGRlc2NyaXB0b3IuICAqLworICBpZiAoKGZpcnN0 X2ZhdCB8IDB4OCkgIT0gKG1hZ2ljIHwgYnBiLm1lZGlhIHwgMHg4KSkKKyAgICB7CisgICAgICBw cmludGYoImZhaWwgaGVyZS0tPmZpcnN0X2ZhdD0weCV4LCBtYWdpYz0weCV4Li4uLi4ubGluZVsl dV1cbiIsCisJICAgICBmaXJzdF9mYXQsIG1hZ2ljLCBfX0xJTkVfXyk7IAorICAgICAgZ290byBm YWlsOworICAgIH0KKyAgLyogU3RhcnQgZnJvbSB0aGUgcm9vdCBkaXJlY3RvcnkuICAqLworICBk YXRhLT5maWxlX2NsdXN0ZXIgPSBkYXRhLT5yb290X2NsdXN0ZXI7CisgIGRhdGEtPmN1cl9jbHVz dGVyX251bSA9IH4wVTsKKyAgZGF0YS0+YXR0ciA9IEdSVUJfRkFUX0FUVFJfRElSRUNUT1JZOwor ICBwcmludGYoImRhdGEtPmZpbGVfY2x1c3Rlcj0ldSBcbmRhdGEtPmN1cl9jbHVzdGVyX251bT0l dSBcbmRhdGEtPmF0dHI9MHgleFxuIgorCSAiZGF0YS0+bG9naWNhbF9zZWN0b3JfYml0cz0ldVxu IgorCSAiZGF0YS0+Y2x1c3Rlcl9iaXRzPSV1XG4iLAorCSBkYXRhLT5maWxlX2NsdXN0ZXIsIGRh dGEtPmN1cl9jbHVzdGVyX251bSwgZGF0YS0+YXR0ciwKKwkgZGF0YS0+bG9naWNhbF9zZWN0b3Jf Yml0cywgZGF0YS0+Y2x1c3Rlcl9iaXRzKTsKKyAgcmV0dXJuIGRhdGE7CisKKyBmYWlsOgorCisg IGZyZWUgKGRhdGEpOworICBlcnJ4ICgibm90IGEgRkFUIGZpbGVzeXN0ZW0uLi5cbiIpOworICBy ZXR1cm4gMDsKK30KKworCisKKy8vtNPOxLz+tcTWuLaoxqvSxm9mZnNldNfWvdq0prbByKFsZW7X 1r3atcTK/b7dtb1idWYKKy8vzsS8/tPJZGF0YS0+ZmlsZV9jbHVzdGVy1ri2qAorLy9kYXRhLT5m aWxlX2NsdXN0ZXLWuLaowcvOxLz+tcTG8Mq8tNi6xQorLy/ErMjPZGF0YS0+ZmlsZV9jbHVzdGVy PTKjrLT6se24+cS/wrwKK3N0YXRpYyBncnViX3NzaXplX3QKK2dydWJfZmF0X3JlYWRfZGF0YSAo QmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHN0cnVjdCBncnViX2ZhdF9kYXRhICpkYXRhLAorCQkgICAg dm9pZCAoKnJlYWRfaG9vaykgKGdydWJfZGlza19hZGRyX3Qgc2VjdG9yLAorCQkJCSAgICAgICB1 bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwKKwkJCQkgICAgICAgdm9pZCAqY2xvc3Vy ZSksCisJCSAgICB2b2lkICpjbG9zdXJlLAorCQkgICAgZ3J1Yl9vZmZfdCBvZmZzZXQsIGdydWJf c2l6ZV90IGxlbiwgY2hhciAqYnVmKQoreworICBncnViX3NpemVfdCBzaXplOworICBncnViX3Vp bnQzMl90IGxvZ2ljYWxfY2x1c3RlcjsKKyAgdW5zaWduZWQgbG9naWNhbF9jbHVzdGVyX2JpdHM7 CisgIGdydWJfc3NpemVfdCByZXQgPSAwOworICB1bnNpZ25lZCBsb25nIHNlY3RvcjsKKyAgdWlu dDY0X3Qgb2ZmX2J5dGVzID0gMDsgCisgIC8qIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIEZBVDEy IGFuZCBGQVQxNiBkb2Vzbid0IGhhdmUgdGhlIHJvb3QgZGlyZWN0b3J5CisgICAgIGluIGNsdXN0 ZXJzLiAgKi8KKyAgaWYgKGRhdGEtPmZpbGVfY2x1c3RlciA9PSB+MFUpCisgICAgeworICAgICAg c2l6ZSA9IChkYXRhLT5udW1fcm9vdF9zZWN0b3JzIDw8IEdSVUJfRElTS19TRUNUT1JfQklUUykg LSBvZmZzZXQ7CisgICAgICBpZiAoc2l6ZSA+IGxlbikKKwlzaXplID0gbGVuOworCisgICAgICBv ZmZfYnl0ZXMgPSAoKHVpbnQ2NF90KWRhdGEtPnJvb3Rfc2VjdG9yIDw8IEdSVUJfRElTS19TRUNU T1JfQklUUykgKyBvZmZzZXQ7CisgICAgICBpZihiZHJ2X3JlYWQoYnMsIG9mZl9ieXRlcywgYnVm LCBzaXplICkgIT0gc2l6ZSkgCisJcmV0dXJuIC0xOworCisgICAgICByZXR1cm4gc2l6ZTsKKyAg ICB9CisKKyAgLyogQ2FsY3VsYXRlIHRoZSBsb2dpY2FsIGNsdXN0ZXIgbnVtYmVyIGFuZCBvZmZz ZXQuICAqLworICBsb2dpY2FsX2NsdXN0ZXJfYml0cyA9IChkYXRhLT5jbHVzdGVyX2JpdHMKKwkJ CSAgKyBkYXRhLT5sb2dpY2FsX3NlY3Rvcl9iaXRzCisJCQkgICsgR1JVQl9ESVNLX1NFQ1RPUl9C SVRTKTsKKyAgbG9naWNhbF9jbHVzdGVyID0gb2Zmc2V0ID4+IGxvZ2ljYWxfY2x1c3Rlcl9iaXRz OyAgICAvL3doaWNoIGNsdXN0ZXIgdG8gcmVhZCAKKyAgb2Zmc2V0ICY9ICgxIDw8IGxvZ2ljYWxf Y2x1c3Rlcl9iaXRzKSAtIDE7ICAgICAgICAgICAvL21vZAorCisgIGlmIChsb2dpY2FsX2NsdXN0 ZXIgPCBkYXRhLT5jdXJfY2x1c3Rlcl9udW0pICAgLy8KKyAgICB7CisgICAgICBkYXRhLT5jdXJf Y2x1c3Rlcl9udW0gPSAwOworICAgICAgZGF0YS0+Y3VyX2NsdXN0ZXIgPSBkYXRhLT5maWxlX2Ns dXN0ZXI7IC8vILXaMrj2ZmF0se3P7r+qyry8x8K8xL/CvLrNzsS8/gorICAgIH0KKworICB3aGls ZSAobGVuKQorICAgIHsKKyAgICAgIHdoaWxlIChsb2dpY2FsX2NsdXN0ZXIgPiBkYXRhLT5jdXJf Y2x1c3Rlcl9udW0pCisJeworCSAgLyogRmluZCBuZXh0IGNsdXN0ZXIuICAqLworCSAgZ3J1Yl91 aW50MzJfdCBuZXh0X2NsdXN0ZXI7CisJICB1bnNpZ25lZCBsb25nIGZhdF9vZmZzZXQ7CisKKwkg IHN3aXRjaCAoZGF0YS0+ZmF0X3NpemUpCisJICAgIHsKKwkgICAgY2FzZSAzMjoKKwkgICAgICBm YXRfb2Zmc2V0ID0gZGF0YS0+Y3VyX2NsdXN0ZXIgPDwgMjsKKwkgICAgICBicmVhazsKKwkgICAg Y2FzZSAxNjoKKwkgICAgICBmYXRfb2Zmc2V0ID0gZGF0YS0+Y3VyX2NsdXN0ZXIgPDwgMTsKKwkg ICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICAvKiBjYXNlIDEyOiAqLworCSAgICAg IGZhdF9vZmZzZXQgPSBkYXRhLT5jdXJfY2x1c3RlciArIChkYXRhLT5jdXJfY2x1c3RlciA+PiAx KTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBSZWFkIHRoZSBGQVQuICAqLworCSAg aW50IGxlbiA9IChkYXRhLT5mYXRfc2l6ZSArIDcpID4+IDM7CisJICB1aW50NjRfdCBvZmZfYnl0 ZXMgPSAgKCh1aW50NjRfdClkYXRhLT5mYXRfc2VjdG9yIDw8IEdSVUJfRElTS19TRUNUT1JfQklU UykgKyBmYXRfb2Zmc2V0OyAKKwkgIGlmIChiZHJ2X3ByZWFkIChicywgb2ZmX2J5dGVzLCAKKwkJ CSAgKGNoYXIgKikgJm5leHRfY2x1c3RlciwgCisJCQkgIGxlbikgIT0gbGVuKSAgIC8vtNNmYXSx 7bbByKG02LrFCisJICAgIHJldHVybiAtMTsKKworCSAgbmV4dF9jbHVzdGVyID0gZ3J1Yl9sZV90 b19jcHUzMiAobmV4dF9jbHVzdGVyKTsKKwkgIHN3aXRjaCAoZGF0YS0+ZmF0X3NpemUpCisJICAg IHsKKwkgICAgY2FzZSAxNjoKKwkgICAgICBuZXh0X2NsdXN0ZXIgJj0gMHhGRkZGOworCSAgICAg IGJyZWFrOworCSAgICBjYXNlIDEyOgorCSAgICAgIGlmIChkYXRhLT5jdXJfY2x1c3RlciAmIDEp CisJCW5leHRfY2x1c3RlciA+Pj0gNDsKKworCSAgICAgIG5leHRfY2x1c3RlciAmPSAweDBGRkY7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgcHJpbnRmICgiZmF0X3NpemU9JWQsIG5leHRf Y2x1c3Rlcj0ldVxuIiwKKwkJCWRhdGEtPmZhdF9zaXplLCBuZXh0X2NsdXN0ZXIpOworCisJICAv KiBDaGVjayB0aGUgZW5kLiAgKi8KKwkgIGlmIChuZXh0X2NsdXN0ZXIgPj0gZGF0YS0+Y2x1c3Rl cl9lb2ZfbWFyaykKKwkgICAgcmV0dXJuIHJldDsKKworCSAgaWYgKG5leHRfY2x1c3RlciA8IDIg fHwgbmV4dF9jbHVzdGVyID49IGRhdGEtPm51bV9jbHVzdGVycykKKwkgICAgeworCSAgICAgIHBy aW50ZigiaW52YWxpZCBjbHVzdGVyICV1Li4uLi4uLi4uLi4uLi4uLlxuIiwKKwkJCSAgbmV4dF9j bHVzdGVyKTsKKwkgICAgICByZXR1cm4gLTE7CisJICAgIH0KKworCSAgZGF0YS0+Y3VyX2NsdXN0 ZXIgPSBuZXh0X2NsdXN0ZXI7CisJICBkYXRhLT5jdXJfY2x1c3Rlcl9udW0rKzsKKwl9CisKKyAg ICAgIC8qIFJlYWQgdGhlIGRhdGEgaGVyZS4gICovCisgICAgICAvL8LfvK202Mv5ttTTprXEvvi2 1MnIx/gKKyAgICAgIHNlY3RvciA9IChkYXRhLT5jbHVzdGVyX3NlY3RvcgorCQkrICgoZGF0YS0+ Y3VyX2NsdXN0ZXIgLSAyKQorCQkgICA8PCAoZGF0YS0+Y2x1c3Rlcl9iaXRzICsgZGF0YS0+bG9n aWNhbF9zZWN0b3JfYml0cykpKTsgCisgICAgICAvL774ttTJyMf41tDIpbX0xqvSxrrztcTX1r3a yv0KKyAgICAgIHNpemUgPSAoMSA8PCBsb2dpY2FsX2NsdXN0ZXJfYml0cykgLSBvZmZzZXQ7Cisg ICAgICBpZiAoc2l6ZSA+IGxlbikKKwlzaXplID0gbGVuOworCisgICAgICAvL2Rpc2stPnJlYWRf aG9vayA9IHJlYWRfaG9vazsKKyAgICAgIC8vZGlzay0+Y2xvc3VyZSA9IGNsb3N1cmU7CisgICAg ICBpbnQ2NF90IG9mZl9ieXRlcyA9ICgodWludDY0X3Qpc2VjdG9yIDw8IEdSVUJfRElTS19TRUNU T1JfQklUUykgKyBvZmZzZXQ7CisgICAgICAvL2Rpc2stPnJlYWRfaG9vayA9IDA7CisgICAgICBp ZiAoYmRydl9wcmVhZCAoYnMsIG9mZl9ieXRlcywgYnVmLCBzaXplKSAhPSBzaXplKQorCXJldHVy biAtMTsKKworICAgICAgbGVuIC09IHNpemU7CisgICAgICBidWYgKz0gc2l6ZTsKKyAgICAgIHJl dCArPSBzaXplOworICAgICAgbG9naWNhbF9jbHVzdGVyKys7CisgICAgICBvZmZzZXQgPSAwOyAg Ly/S1LrztsG1xLa8ysfN6tX7ycjH+AorICAgIH0KKworICByZXR1cm4gcmV0OworfQorCisvL7Hp wPrTyWRhdGEtPmZpbGVfY2x1c3Rlcta4tqi1xMS/wrwKK2ludAorZ3J1Yl9mYXRfaXRlcmF0ZV9k aXIgKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqZGF0YSkKK3sK KyAgc3RydWN0IGdydWJfZmF0X2Rpcl9lbnRyeSBkaXI7CisgIGNoYXIgKmZpbGVuYW1lLCAqZmls ZXAgPSAwOworICBncnViX3VpbnQxNl90ICp1bmlidWY7CisgIGludCBzbG90ID0gLTEsIHNsb3Rz ID0gLTE7CisgIGludCBjaGVja3N1bSA9IC0xOworICBncnViX3NzaXplX3Qgb2Zmc2V0ID0gLXNp emVvZihkaXIpOworCisgIGlmICghIChkYXRhLT5hdHRyICYgR1JVQl9GQVRfQVRUUl9ESVJFQ1RP UlkpKQorICAgIHJldHVybiBwcmludGYoIm5vdCBhIGRpcmVjdG9yeS4uLi4uLlxuIik7CisKKyAg LyogQWxsb2NhdGUgc3BhY2UgZW5vdWdoIHRvIGhvbGQgYSBsb25nIG5hbWUuICAqLworICBmaWxl bmFtZSA9IChjaGFyKiltYWxsb2MgKDB4NDAgKiAxMyAqIDQgKyAxKTsKKyAgdW5pYnVmID0gKGdy dWJfdWludDE2X3QgKikgbWFsbG9jICgweDQwICogMTMgKiAyKTsKKyAgaWYgKCEgZmlsZW5hbWUg fHwgISB1bmlidWYpCisgICAgeworICAgICAgZnJlZSAoZmlsZW5hbWUpOworICAgICAgZnJlZSAo dW5pYnVmKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKworICBpbnQgY291bnQgPSAwOwor ICB3aGlsZSAoMSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpOworCisgICAgICAvKiBBZGp1c3Qg dGhlIG9mZnNldC4gICovCisgICAgICBvZmZzZXQgKz0gc2l6ZW9mIChkaXIpOworICAgICAgcHJp bnRmKCJbJWRdb2Zmc2V0PSV1XG4iCisJICAgICAiZGF0YS0+Y3VyX2NsdXN0ZXJfbnVtPSV1LGRh dGEtPmN1cl9jbHVzdGVyPSV1XG4iLCAKKwkgICAgIGNvdW50KzEsIG9mZnNldCwgCisJICAgICBk YXRhLT5jdXJfY2x1c3Rlcl9udW0sIGRhdGEtPmN1cl9jbHVzdGVyKTsKKyAgICAgIC8qIFJlYWQg YSBkaXJlY3RvcnkgZW50cnkuICAqLworICAgICAgLy8weDCx7cq+v9XEv8K8CisgICAgICBpZiAo KGdydWJfZmF0X3JlYWRfZGF0YSAoYnMsIGRhdGEsIDAsIDAsCisJCQkgICAgICAgb2Zmc2V0LCBz aXplb2YgKGRpciksIChjaGFyICopICZkaXIpCisJICAgIT0gc2l6ZW9mIChkaXIpIHx8IGRpci5u YW1lWzBdID09IDApKQorCXsKKwkgIHByaW50ZigiYnJlYWsuLi5kaXIubmFtZVswXT09JWRcbiIs IGRpci5uYW1lWzBdKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIC8qIEhhbmRsZSBsb25nIG5hbWUg ZW50cmllcy4gICovCisgICAgICBpZiAoZGlyLmF0dHIgPT0gR1JVQl9GQVRfQVRUUl9MT05HX05B TUUpCisJeworCSAgcHJpbnRmKCJsb25nIG5hbWUuLi5cbiIpOworCSAgc3RydWN0IGdydWJfZmF0 X2xvbmdfbmFtZV9lbnRyeSAqbG9uZ19uYW1lCisJICAgID0gKHN0cnVjdCBncnViX2ZhdF9sb25n X25hbWVfZW50cnkgKikgJmRpcjsKKwkgIGdydWJfdWludDhfdCBpZCA9IGxvbmdfbmFtZS0+aWQ7 CisKKwkgIGlmIChpZCAmIDB4NDApICAvL3RoZSBsYXN0IGl0ZW0KKwkgICAgeworCSAgICAgIGlk ICY9IDB4M2Y7ICAgLy9pbmRleCBvciBvcmRpbmFsIG51bWJlciAgMX4zMQorCSAgICAgIHNsb3Rz ID0gc2xvdCA9IGlkOworCSAgICAgIGNoZWNrc3VtID0gbG9uZ19uYW1lLT5jaGVja3N1bTsKKwkg ICAgICBwcmludGYoInRoZSBsYXN0IG9yZGluYWwgbnVtPSVkISEhXG4iLCBpZCk7CisJICAgIH0K KworCSAgaWYgKGlkICE9IHNsb3QgfHwgc2xvdCA9PSAwIHx8IGNoZWNrc3VtICE9IGxvbmdfbmFt ZS0+Y2hlY2tzdW0pCisJICAgIHsKKwkgICAgICBwcmludGYoIm5vdCB2YWxpZCBvcmRpbmFsIG51 bWJlciAsaWdub3JlLi4uY29udGludWVcbiIpOworCSAgICAgIGNoZWNrc3VtID0gLTE7CisJICAg ICAgY29udGludWU7CisJICAgIH0KKworCSAgc2xvdC0tOworCSAgbWVtY3B5ICh1bmlidWYgKyBz bG90ICogMTMsIGxvbmdfbmFtZS0+bmFtZTEsIDUgKiAyKTsKKwkgIG1lbWNweSAodW5pYnVmICsg c2xvdCAqIDEzICsgNSwgbG9uZ19uYW1lLT5uYW1lMiwgNiAqIDIpOworCSAgbWVtY3B5ICh1bmli dWYgKyBzbG90ICogMTMgKyAxMSwgbG9uZ19uYW1lLT5uYW1lMywgMiAqIDIpOworCSAgcHJpbnRm KCJtZW1jcHkuLi5jb250aW51ZVxuIik7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIAorICAg ICAgLyogQ2hlY2sgaWYgdGhpcyBlbnRyeSBpcyB2YWxpZC4gICovCisgICAgICAvL294ZTWx7cq+ 0tG+rbG7yb6z/QorICAgICAgaWYgKGRpci5uYW1lWzBdID09IDB4ZTUgfHwgKGRpci5hdHRyICYg fkdSVUJfRkFUX0FUVFJfVkFMSUQpKQorCXsKKwkgIHByaW50ZigiZGlyLm5hbWVbMF09MHgleCwg ZGlyLmF0dHI9MHgleCBub3QgdmFsaWQuLi5jb250aW51ZVxuIiwgCisJCSBkaXIubmFtZVswXSwg ZGlyLmF0dHIpOworCSAgY29udGludWU7CisJfQorCisgICAgICBwcmludGYoImNoZWNrc3VtPSVk LCBzbG90PSVkXG4iLCBjaGVja3N1bSwgc2xvdCk7CisgICAgICAvKiBUaGlzIGlzIGEgd29ya2Fy b3VuZCBmb3IgSmFwYW5lc2UuICAqLworICAgICAgaWYgKGRpci5uYW1lWzBdID09IDB4MDUpCisJ ZGlyLm5hbWVbMF0gPSAweGU1OworCisgICAgICBpZiAoY2hlY2tzdW0gIT0gLTEgJiYgc2xvdCA9 PSAwKQorCXsKKwkgIHByaW50ZigiY2hlY2tzdW1pbmdcbiIpOworCSAgZ3J1Yl91aW50OF90IHN1 bTsKKworCSAgZm9yIChzdW0gPSAwLCBpID0gMDsgaSA8IHNpemVvZiAoZGlyLm5hbWUpOyBpKysp CisJICAgIHN1bSA9ICgoc3VtID4+IDEpIHwgKHN1bSA8PCA3KSkgKyBkaXIubmFtZVtpXTsKKwor CSAgaWYgKHN1bSA9PSBjaGVja3N1bSkKKwkgICAgey8vs6TD+7Htz+6688PmvfS907bMw/ux7c/u o6zR6daks8m5ptTy1qTD99Xm1f3Kx7Okw/vX1gorCSAgICAgIGludCB1OworCisJICAgICAgZm9y ICh1ID0gMDsgdSA8IHNsb3RzICogMTM7IHUrKykKKwkJdW5pYnVmW3VdID0gZ3J1Yl9sZV90b19j cHUxNiAodW5pYnVmW3VdKTsKKworCSAgICAgICpncnViX3V0ZjE2X3RvX3V0ZjggKChncnViX3Vp bnQ4X3QgKikgZmlsZW5hbWUsIHVuaWJ1ZiwKKwkJCQkgICBzbG90cyAqIDEzKSA9ICdcMCc7CisK KwkgICAgICAvL2lmIChob29rIChmaWxlbmFtZSwgJmRpciwgY2xvc3VyZSkpCisJICAgICAgICAv L2JyZWFrOworCisJICAgICAgY2hlY2tzdW0gPSAtMTsKKwkgICAgICBmb3IgKGkgPSAwOyBpIDwg c2l6ZW9mIChkaXIubmFtZSk7IGkrKykKKwkJcHJpbnRmKCIweCV4ICAiLCBkaXIubmFtZVtpXSk7 CisJICAgICAgY2hhciAqZ2JuYW1lID0gKGNoYXIqKW1hbGxvYygyNTYpOworCSAgICAgIHUyZyhm aWxlbmFtZSwgc3RybGVuKGZpbGVuYW1lKSwgZ2JuYW1lLCAyNTYpOworCSAgICAgIHByaW50Zigi XG5kaXIubmFtZT0lcywgZmlsZW5hbWU9JXMsIGRpci5hdHRyPTB4JXgsIgorCQkgICAgICJzdW09 PWNoZWNrc3VtLi4uY29udGludWVcbiIsCisJCSAgICAgZGlyLm5hbWUsIGdibmFtZSwgZGlyLmF0 dHIpOworCSAgICAgIGZyZWUoZ2JuYW1lKTsKKwkgICAgICBjb3VudCsrOworCSAgICAgIGNvbnRp bnVlOworCSAgICB9CisKKwkgIGNoZWNrc3VtID0gLTE7CisJfQorCisgICAgICAvL7rzw+a1xLSm wO3V67bUt8fV5sq1s6TD+7rN1ebKtbbMw/sKKyAgICAgIC8qIENvbnZlcnQgdGhlIDguMyBmaWxl IG5hbWUuICAqLworICAgICAgLy/IpbX0tszD+7XEv9W48aOsyKu4xM6q0KHQtAorICAgICAgZmls ZXAgPSBmaWxlbmFtZTsKKyAgICAgIGlmIChkaXIuYXR0ciAmIEdSVUJfRkFUX0FUVFJfVk9MVU1F X0lEKQorCXsKKwkgIHByaW50ZigiVk9MVU1FXG4iKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBzaXpl b2YgKGRpci5uYW1lKSAmJiBkaXIubmFtZVtpXQorCQkgJiYgISBncnViX2lzc3BhY2UgKGRpci5u YW1lW2ldKTsgaSsrKQorCSAgICAqZmlsZXArKyA9IGRpci5uYW1lW2ldOworCX0KKyAgICAgIGVs c2UKKwl7CisJICBmb3IgKGkgPSAwOyBpIDwgOCAmJiBkaXIubmFtZVtpXSAmJiAhIGdydWJfaXNz cGFjZSAoZGlyLm5hbWVbaV0pOyBpKyspCisJICAgICpmaWxlcCsrID0gZ3J1Yl90b2xvd2VyIChk aXIubmFtZVtpXSk7CisKKwkgICpmaWxlcCA9ICcuJzsKKworCSAgZm9yIChpID0gODsgaSA8IDEx ICYmIGRpci5uYW1lW2ldICYmICEgZ3J1Yl9pc3NwYWNlIChkaXIubmFtZVtpXSk7IGkrKykKKwkg ICAgKisrZmlsZXAgPSBncnViX3RvbG93ZXIgKGRpci5uYW1lW2ldKTsKKworCSAgaWYgKCpmaWxl cCAhPSAnLicpCisJICAgIGZpbGVwKys7CisJfQorICAgICAgKmZpbGVwID0gJ1wwJzsKKworICAg ICAgCisgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChkaXIubmFtZSk7IGkrKykKKwlwcmlu dGYoIjB4JXggICIsIGRpci5uYW1lW2ldKTsKKyAgICAgIHByaW50ZigiXG5kaXIubmFtZT0lcywg ZmlsZW5hbWU9ob4lc6G/LCBkaXIuYXR0cj0weCV4LCIKKwkgICAgICIuLi5uZXh0IHdoaWxlXG4i LAorCSAgICAgZGlyLm5hbWUsIGZpbGVuYW1lLCBkaXIuYXR0cik7CisgICAgICBjb3VudCsrOwor ICAgICAgLyppZihzdHJjbXAoZmlsZW5hbWUsICIuIikgJiYgc3RyY21wKGZpbGVuYW1lLCAiLi4i KSkKKwl7CisJICBwcmludGYoIns9PT09PT09PT09PT09PT5cbiIpOworCSAgc3RydWN0IGdydWJf ZmF0X2RhdGEgKmRhdGEyID0gTlVMTDsKKwkgIGRhdGEyID0gKHN0cnVjdCBncnViX2ZhdF9kYXRh KiltYWxsb2Moc2l6ZW9mKCpkYXRhKSk7CisJICBtZW1jcHkoZGF0YTIsIGRhdGEsIHNpemVvZigq ZGF0YSkpOworCSAgZGF0YTItPmF0dHIgPSBkaXIuYXR0cjsKKwkgIGRhdGEyLT5maWxlX3NpemUg PSBncnViX2xlX3RvX2NwdTMyIChkaXIuZmlsZV9zaXplKTsKKwkgIGRhdGEyLT5maWxlX2NsdXN0 ZXIgPSAoKGdydWJfbGVfdG9fY3B1MTYgKGRpci5maXJzdF9jbHVzdGVyX2hpZ2gpIDw8IDE2KQor CQkJCSB8IGdydWJfbGVfdG9fY3B1MTYgKGRpci5maXJzdF9jbHVzdGVyX2xvdykpOworCSAgZGF0 YTItPmN1cl9jbHVzdGVyX251bSA9IH4wVTsKKwkgIChncnViX2ZhdF9pdGVyYXRlX2Rpcihicywg ZGF0YTIpIDwgMCkgPyBwcmludGYoImVycm9yICEhISEhIVxuIikgOiAwOworCSAgZnJlZShkYXRh Mik7CisJICBwcmludGYoIjw9PT09PT09PT09PT09PT09PT09fVxuIik7CisJfQorICAgICAgKi8K KyAgICAgIC8vaWYgKGhvb2sgKGZpbGVuYW1lLCAmZGlyLCBjbG9zdXJlKSkKKyAgICAgICAgLy9i cmVhazsKKyAgICB9CisKKyAgZnJlZSAoZmlsZW5hbWUpOworICBmcmVlICh1bmlidWYpOworCisg IHJldHVybiAwOworfQorCisKKy8qCitzdHJ1Y3QgZ3J1Yl9mYXRfZmluZF9kaXJfY2xvc3VyZQor eworICBzdHJ1Y3QgZ3J1Yl9mYXRfZGF0YSAqZGF0YTsKKyAgaW50ICgqaG9vaykgKGNvbnN0IGNo YXIgKmZpbGVuYW1lLAorCSAgICAgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9kaXJob29rX2luZm8gKmlu Zm8sCisJICAgICAgIHZvaWQgKmNsb3N1cmUpOworICB2b2lkICpjbG9zdXJlOworICBjaGFyICpk aXJuYW1lOworICBpbnQgY2FsbF9ob29rOworICBpbnQgZm91bmQ7Cit9OworCisKK3N0YXRpYyBp bnQKK2dydWJfZmF0X2ZpbmRfZGlyX2hvb2sgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3Qg Z3J1Yl9mYXRfZGlyX2VudHJ5ICpkaXIsCisJCQl2b2lkICpjbG9zdXJlKQoreworICBzdHJ1Y3Qg Z3J1Yl9mYXRfZmluZF9kaXJfY2xvc3VyZSAqYyA9IGNsb3N1cmU7CisgIHN0cnVjdCBncnViX2Rp cmhvb2tfaW5mbyBpbmZvOworICBncnViX21lbXNldCAoJmluZm8sIDAsIHNpemVvZiAoaW5mbykp OworCisgIGluZm8uZGlyID0gISEgKGRpci0+YXR0ciAmIEdSVUJfRkFUX0FUVFJfRElSRUNUT1JZ KTsKKyAgaW5mby5jYXNlX2luc2Vuc2l0aXZlID0gMTsKKworICBpZiAoZGlyLT5hdHRyICYgR1JV Ql9GQVRfQVRUUl9WT0xVTUVfSUQpCisgICAgcmV0dXJuIDA7CisgIGlmICgqKGMtPmRpcm5hbWUp ID09ICdcMCcgJiYgKGMtPmNhbGxfaG9vaykpCisgICAgcmV0dXJuIGMtPmhvb2sgKGZpbGVuYW1l LCAmaW5mbywgYy0+Y2xvc3VyZSk7CisKKyAgaWYgKGdydWJfc3RyY2FzZWNtcCAoYy0+ZGlybmFt ZSwgZmlsZW5hbWUpID09IDApCisgICAgeworICAgICAgc3RydWN0IGdydWJfZmF0X2RhdGEgKmRh dGEgPSBjLT5kYXRhOworCisgICAgICBjLT5mb3VuZCA9IDE7CisgICAgICBkYXRhLT5hdHRyID0g ZGlyLT5hdHRyOworICAgICAgZGF0YS0+ZmlsZV9zaXplID0gZ3J1Yl9sZV90b19jcHUzMiAoZGly LT5maWxlX3NpemUpOworICAgICAgZGF0YS0+ZmlsZV9jbHVzdGVyID0gKChncnViX2xlX3RvX2Nw dTE2IChkaXItPmZpcnN0X2NsdXN0ZXJfaGlnaCkgPDwgMTYpCisJCQkgICAgICAgfCBncnViX2xl X3RvX2NwdTE2IChkaXItPmZpcnN0X2NsdXN0ZXJfbG93KSk7CisgICAgICBkYXRhLT5jdXJfY2x1 c3Rlcl9udW0gPSB+MFU7CisKKyAgICAgIGlmIChjLT5jYWxsX2hvb2spCisJYy0+aG9vayAoZmls ZW5hbWUsICZpbmZvLCBjLT5jbG9zdXJlKTsKKworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBy ZXR1cm4gMDsKK30KKyovCisKKy8qIEZpbmQgdGhlIHVuZGVybHlpbmcgZGlyZWN0b3J5IG9yIGZp bGUgaW4gUEFUSCBhbmQgcmV0dXJuIHRoZQorICAgbmV4dCBwYXRoLiBJZiB0aGVyZSBpcyBubyBu ZXh0IHBhdGggb3IgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4gTlVMTC4KKyAgIElmIEhPT0sgaXMg c3BlY2lmaWVkLCBjYWxsIGl0IHdpdGggZWFjaCBmaWxlIG5hbWUuICAqLworY2hhciAqCitncnVi X2ZhdF9maW5kX2RpciAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHN0cnVjdCBncnViX2ZhdF9kYXRh ICpkYXRhLAorCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkgICBpbnQgKCpob29rKSAoY29uc3Qg Y2hhciAqZmlsZW5hbWUsCisJCQkJY29uc3Qgc3RydWN0IGdydWJfZGlyaG9va19pbmZvICppbmZv LAorCQkJCXZvaWQgKmNsb3N1cmUpLAorCQkgICB2b2lkICpjbG9zdXJlKQoreworICBjaGFyICpk aXJuYW1lLCAqZGlycDsKKyAgLy9zdHJ1Y3QgZ3J1Yl9mYXRfZmluZF9kaXJfY2xvc3VyZSBjOwor CisgIGlmICghIChkYXRhLT5hdHRyICYgR1JVQl9GQVRfQVRUUl9ESVJFQ1RPUlkpKQorICAgIHsK KyAgICAgIHByaW50Zigibm90IGEgZGlyZWN0b3J5Li4uLi4uLi4uLi4uLlxuIik7CisgICAgICBy ZXR1cm4gMDsKKyAgICB9CisKKyAgLyogRXh0cmFjdCBhIGRpcmVjdG9yeSBuYW1lLiAgKi8KKyAg d2hpbGUgKCpwYXRoID09ICcvJykKKyAgICBwYXRoKys7CisKKyAgZGlycCA9IGdydWJfc3RyY2hy IChwYXRoLCAnLycpOworICBpZiAoZGlycCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBsZW4gPSBk aXJwIC0gcGF0aDsKKworICAgICAgZGlybmFtZSA9IChjaGFyKiltYWxsb2MgKGxlbiArIDEpOwor ICAgICAgaWYgKCEgZGlybmFtZSkKKwlyZXR1cm4gMDsKKworICAgICAgbWVtY3B5IChkaXJuYW1l LCBwYXRoLCBsZW4pOworICAgICAgZGlybmFtZVtsZW5dID0gJ1wwJzsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgLyogVGhpcyBpcyBhY3R1YWxseSBhIGZpbGUuICAqLworICAgICAgZGlybmFt ZSA9IGdydWJfc3RyZHVwIChwYXRoKTsKKyAgICB9CisgIC8vYy5kYXRhID0gZGF0YTsKKyAgLy9j Lmhvb2sgPSBob29rOworICAvL2MuY2xvc3VyZSA9IGNsb3N1cmU7CisgIC8vYy5kaXJuYW1lID1k aXJuYW1lOworICAvL2MuZm91bmQgPSAwOworICAvL2MuY2FsbF9ob29rID0gKCEgZGlycCAmJiBo b29rKTsKKyAgaWYoZ3J1Yl9mYXRfaXRlcmF0ZV9kaXIgKGJzLCBkYXRhKTwwKQorICAgIHsKKyAg ICAgICBwcmludGYoImZpbGUgbm90IGZvdW5kLi5cbiIpOworICAgICAgIHJldHVybiAwOworICAg IH0KKyAgICAKKyAgCisgIGZyZWUgKGRpcm5hbWUpOworCisgIHJldHVybiBkaXJwOworfQorCisK KworCisKKworCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4g LVU4IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL2dydWItZmF0L2ZhdC5oIHhlbi00 LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL2dydWItZmF0L2ZhdC5oCi0tLSB4ZW4tNC4xLjIt YS90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9mYXQuaAkxOTcwLTAxLTAxIDA3OjAwOjAw LjAwMDAwMDAwMCArMDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZ3J1 Yi1mYXQvZmF0LmgJMjAxMi0xMi0yOCAxNjowMjo0MS4wMDk5Mzc3MzggKzA4MDAKQEAgLTAsMCAr MSwxNDYgQEAKKyNpZm5kZWYgRlNfRkFUX0gKKyNkZWZpbmUgRlNfRkFUX0gKKworCisjaW5jbHVk ZSAiZnMtdHlwZXMuaCIKKyNpbmNsdWRlICJibG9ja19pbnQuaCIKKworI2RlZmluZSBHUlVCX0RJ U0tfU0VDVE9SX0JJVFMgICAgICA5CisjZGVmaW5lIEdSVUJfRkFUX0RJUl9FTlRSWV9TSVpFCTMy CisKKyNkZWZpbmUgR1JVQl9GQVRfQVRUUl9SRUFEX09OTFkJMHgwMQorI2RlZmluZSBHUlVCX0ZB VF9BVFRSX0hJRERFTgkweDAyCisjZGVmaW5lIEdSVUJfRkFUX0FUVFJfU1lTVEVNCTB4MDQKKyNk ZWZpbmUgR1JVQl9GQVRfQVRUUl9WT0xVTUVfSUQJMHgwOAorI2RlZmluZSBHUlVCX0ZBVF9BVFRS X0RJUkVDVE9SWQkweDEwCisjZGVmaW5lIEdSVUJfRkFUX0FUVFJfQVJDSElWRQkweDIwCisKKyNk ZWZpbmUgR1JVQl9GQVRfTUFYRklMRQkyNTYKKworI2RlZmluZSBHUlVCX0ZBVF9BVFRSX0xPTkdf TkFNRQkoR1JVQl9GQVRfQVRUUl9SRUFEX09OTFkgXAorCQkJCSB8IEdSVUJfRkFUX0FUVFJfSElE REVOIFwKKwkJCQkgfCBHUlVCX0ZBVF9BVFRSX1NZU1RFTSBcCisJCQkJIHwgR1JVQl9GQVRfQVRU Ul9WT0xVTUVfSUQpCisjZGVmaW5lIEdSVUJfRkFUX0FUVFJfVkFMSUQJKEdSVUJfRkFUX0FUVFJf UkVBRF9PTkxZIFwKKwkJCQkgfCBHUlVCX0ZBVF9BVFRSX0hJRERFTiBcCisJCQkJIHwgR1JVQl9G QVRfQVRUUl9TWVNURU0gXAorCQkJCSB8IEdSVUJfRkFUX0FUVFJfRElSRUNUT1JZIFwKKwkJCQkg fCBHUlVCX0ZBVF9BVFRSX0FSQ0hJVkUgXAorCQkJCSB8IEdSVUJfRkFUX0FUVFJfVk9MVU1FX0lE KQorCitzdHJ1Y3QgZ3J1Yl9mYXRfYnBiCit7CisgIGdydWJfdWludDhfdCBqbXBfYm9vdFszXTsK KyAgZ3J1Yl91aW50OF90IG9lbV9uYW1lWzhdOworICBncnViX3VpbnQxNl90IGJ5dGVzX3Blcl9z ZWN0b3I7CisgIGdydWJfdWludDhfdCBzZWN0b3JzX3Blcl9jbHVzdGVyOworICBncnViX3VpbnQx Nl90IG51bV9yZXNlcnZlZF9zZWN0b3JzOworICBncnViX3VpbnQ4X3QgbnVtX2ZhdHM7CisgIGdy dWJfdWludDE2X3QgbnVtX3Jvb3RfZW50cmllczsKKyAgZ3J1Yl91aW50MTZfdCBudW1fdG90YWxf c2VjdG9yc18xNjsKKyAgZ3J1Yl91aW50OF90IG1lZGlhOworICBncnViX3VpbnQxNl90IHNlY3Rv cnNfcGVyX2ZhdF8xNjsKKyAgZ3J1Yl91aW50MTZfdCBzZWN0b3JzX3Blcl90cmFjazsKKyAgZ3J1 Yl91aW50MTZfdCBudW1faGVhZHM7CisgIGdydWJfdWludDMyX3QgbnVtX2hpZGRlbl9zZWN0b3Jz OworICBncnViX3VpbnQzMl90IG51bV90b3RhbF9zZWN0b3JzXzMyOworICB1bmlvbgorICB7Cisg ICAgc3RydWN0CisgICAgeworICAgICAgZ3J1Yl91aW50OF90IG51bV9waF9kcml2ZTsKKyAgICAg IGdydWJfdWludDhfdCByZXNlcnZlZDsKKyAgICAgIGdydWJfdWludDhfdCBib290X3NpZzsKKyAg ICAgIGdydWJfdWludDMyX3QgbnVtX3NlcmlhbDsKKyAgICAgIGdydWJfdWludDhfdCBsYWJlbFsx MV07CisgICAgICBncnViX3VpbnQ4X3QgZnN0eXBlWzhdOworICAgIH0gX19hdHRyaWJ1dGVfXyAo KHBhY2tlZCkpIGZhdDEyX29yX2ZhdDE2OworICAgIHN0cnVjdAorICAgIHsKKyAgICAgIGdydWJf dWludDMyX3Qgc2VjdG9yc19wZXJfZmF0XzMyOworICAgICAgZ3J1Yl91aW50MTZfdCBleHRlbmRl ZF9mbGFnczsKKyAgICAgIGdydWJfdWludDE2X3QgZnNfdmVyc2lvbjsKKyAgICAgIGdydWJfdWlu dDMyX3Qgcm9vdF9jbHVzdGVyOworICAgICAgZ3J1Yl91aW50MTZfdCBmc19pbmZvOworICAgICAg Z3J1Yl91aW50MTZfdCBiYWNrdXBfYm9vdF9zZWN0b3I7CisgICAgICBncnViX3VpbnQ4X3QgcmVz ZXJ2ZWRbMTJdOworICAgICAgZ3J1Yl91aW50OF90IG51bV9waF9kcml2ZTsKKyAgICAgIGdydWJf dWludDhfdCByZXNlcnZlZDE7CisgICAgICBncnViX3VpbnQ4X3QgYm9vdF9zaWc7CisgICAgICBn cnViX3VpbnQzMl90IG51bV9zZXJpYWw7CisgICAgICBncnViX3VpbnQ4X3QgbGFiZWxbMTFdOwor ICAgICAgZ3J1Yl91aW50OF90IGZzdHlwZVs4XTsKKyAgICB9IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKSBmYXQzMjsKKyAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdmVyc2lvbl9zcGVjaWZp YzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZ3J1Yl9mYXRfZGlyX2Vu dHJ5Cit7CisgIGdydWJfdWludDhfdCBuYW1lWzExXTsKKyAgZ3J1Yl91aW50OF90IGF0dHI7Cisg IGdydWJfdWludDhfdCBudF9yZXNlcnZlZDsKKyAgZ3J1Yl91aW50OF90IGNfdGltZV90ZW50aDsK KyAgZ3J1Yl91aW50MTZfdCBjX3RpbWU7CisgIGdydWJfdWludDE2X3QgY19kYXRlOworICBncnVi X3VpbnQxNl90IGFfZGF0ZTsKKyAgZ3J1Yl91aW50MTZfdCBmaXJzdF9jbHVzdGVyX2hpZ2g7Cisg IGdydWJfdWludDE2X3Qgd190aW1lOworICBncnViX3VpbnQxNl90IHdfZGF0ZTsKKyAgZ3J1Yl91 aW50MTZfdCBmaXJzdF9jbHVzdGVyX2xvdzsKKyAgZ3J1Yl91aW50MzJfdCBmaWxlX3NpemU7Cit9 IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGdydWJfZmF0X2xvbmdfbmFtZV9l bnRyeQoreworICBncnViX3VpbnQ4X3QgaWQ7CisgIGdydWJfdWludDE2X3QgbmFtZTFbNV07Cisg IGdydWJfdWludDhfdCBhdHRyOworICBncnViX3VpbnQ4X3QgcmVzZXJ2ZWQ7CisgIGdydWJfdWlu dDhfdCBjaGVja3N1bTsKKyAgZ3J1Yl91aW50MTZfdCBuYW1lMls2XTsKKyAgZ3J1Yl91aW50MTZf dCBmaXJzdF9jbHVzdGVyOworICBncnViX3VpbnQxNl90IG5hbWUzWzJdOworfSBfX2F0dHJpYnV0 ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBncnViX2ZhdF9kYXRhCit7CisgIGludCBsb2dpY2Fs X3NlY3Rvcl9iaXRzOworICBncnViX3VpbnQzMl90IG51bV9zZWN0b3JzOworCisgIGdydWJfdWlu dDE2X3QgZmF0X3NlY3RvcjsKKyAgZ3J1Yl91aW50MzJfdCBzZWN0b3JzX3Blcl9mYXQ7CisgIGlu dCBmYXRfc2l6ZTsKKworICBncnViX3VpbnQzMl90IHJvb3RfY2x1c3RlcjsKKyAgZ3J1Yl91aW50 MzJfdCByb290X3NlY3RvcjsKKyAgZ3J1Yl91aW50MzJfdCBudW1fcm9vdF9zZWN0b3JzOworCisg IGludCBjbHVzdGVyX2JpdHM7CisgIGdydWJfdWludDMyX3QgY2x1c3Rlcl9lb2ZfbWFyazsKKyAg Z3J1Yl91aW50MzJfdCBjbHVzdGVyX3NlY3RvcjsKKyAgZ3J1Yl91aW50MzJfdCBudW1fY2x1c3Rl cnM7CisKKyAgZ3J1Yl91aW50OF90IGF0dHI7CisgIGdydWJfc3NpemVfdCBmaWxlX3NpemU7Cisg IGdydWJfdWludDMyX3QgZmlsZV9jbHVzdGVyOworICBncnViX3VpbnQzMl90IGN1cl9jbHVzdGVy X251bTsKKyAgZ3J1Yl91aW50MzJfdCBjdXJfY2x1c3RlcjsKKworICBncnViX3VpbnQzMl90IHV1 aWQ7Cit9OworCisKKworCisKKworc3RydWN0IGdydWJfZmF0X2RhdGEqIGdydWJfZmF0X21vdW50 IChCbG9ja0RyaXZlclN0YXRlICpicywgdWludDMyX3QgcGFydF9vZmZfc2VjdG9yKTsKK2ludCBn cnViX2ZhdF9pdGVyYXRlX2RpciAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHN0cnVjdCBncnViX2Zh dF9kYXRhICpkYXRhKTsKKworCisKKworCisKKworI2VuZGlmCmRpZmYgLS1leGNsdWRlPS5zdm4g LXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vZ3J1Yi1mYXQvZnMtdHlw ZXMuaCB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9mcy10eXBlcy5o Ci0tLSB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9mcy10eXBlcy5o CTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29s cy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9mcy10eXBlcy5oCTIwMTItMTItMjggMTY6MDI6NDEu MDA5OTM3NzM4ICswODAwCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogIEdSVUIgIC0tICBHUmFu ZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNSwyMDA2LDIw MDcsMjAwOCwyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JV QiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEdSVUJfVFlQRVNfSEVBREVSCisjZGVmaW5lIEdSVUJf VFlQRVNfSEVBREVSCTEKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHg4Nl82NC90 eXBlcy5oPgorCisjaWZkZWYgR1JVQl9VVElMCisjIGRlZmluZSBHUlVCX0NQVV9TSVpFT0ZfVk9J RF9QCVNJWkVPRl9WT0lEX1AKKyMgZGVmaW5lIEdSVUJfQ1BVX1NJWkVPRl9MT05HCVNJWkVPRl9M T05HCisjIGlmZGVmIFdPUkRTX0JJR0VORElBTgorIyAgZGVmaW5lIEdSVUJfQ1BVX1dPUkRTX0JJ R0VORElBTgkxCisjIGVsc2UKKyMgIHVuZGVmIEdSVUJfQ1BVX1dPUkRTX0JJR0VORElBTgorIyBl bmRpZgorI2Vsc2UgLyogISBHUlVCX1VUSUwgKi8KKyMgZGVmaW5lIEdSVUJfQ1BVX1NJWkVPRl9W T0lEX1AJR1JVQl9UQVJHRVRfU0laRU9GX1ZPSURfUAorIyBkZWZpbmUgR1JVQl9DUFVfU0laRU9G X0xPTkcJR1JVQl9UQVJHRVRfU0laRU9GX0xPTkcKKyMgaWZkZWYgR1JVQl9UQVJHRVRfV09SRFNf QklHRU5ESUFOCisjICBkZWZpbmUgR1JVQl9DUFVfV09SRFNfQklHRU5ESUFOCTEKKyMgZWxzZQor IyAgdW5kZWYgR1JVQl9DUFVfV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisjZW5kaWYgLyogISBH UlVCX1VUSUwgKi8KKworI2lmIEdSVUJfQ1BVX1NJWkVPRl9WT0lEX1AgIT0gNCAmJiBHUlVCX0NQ VV9TSVpFT0ZfVk9JRF9QICE9IDgKKyMgZXJyb3IgIlRoaXMgYXJjaGl0ZWN0dXJlIGlzIG5vdCBz dXBwb3J0ZWQgYmVjYXVzZSBzaXplb2Yodm9pZCAqKSAhPSA0IGFuZCBzaXplb2Yodm9pZCAqKSAh PSA4IgorI2VuZGlmCisKKyNpZm5kZWYgR1JVQl9UQVJHRVRfV09SRFNJWkUKKyMgaWYgR1JVQl9U QVJHRVRfU0laRU9GX1ZPSURfUCA9PSA0CisjICBkZWZpbmUgR1JVQl9UQVJHRVRfV09SRFNJWkUg MzIKKyMgZWxpZiBHUlVCX1RBUkdFVF9TSVpFT0ZfVk9JRF9QID09IDgKKyMgIGRlZmluZSBHUlVC X1RBUkdFVF9XT1JEU0laRSA2NAorIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB2YXJpb3Vz IHdpZGUgaW50ZWdlcnMuICAqLwordHlwZWRlZiBzaWduZWQgY2hhcgkJZ3J1Yl9pbnQ4X3Q7Cit0 eXBlZGVmIHNob3J0CQkJZ3J1Yl9pbnQxNl90OwordHlwZWRlZiBpbnQJCQlncnViX2ludDMyX3Q7 CisjaWYgR1JVQl9DUFVfU0laRU9GX0xPTkcgPT0gOAordHlwZWRlZiBsb25nCQkJZ3J1Yl9pbnQ2 NF90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBsb25nCQlncnViX2ludDY0X3Q7CisjZW5kaWYKKwor dHlwZWRlZiB1bnNpZ25lZCBjaGFyCQlncnViX3VpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNo b3J0CQlncnViX3VpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZAkJZ3J1Yl91aW50MzJfdDsKKyNp ZiBHUlVCX0NQVV9TSVpFT0ZfTE9ORyA9PSA4Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCWdydWJf dWludDY0X3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJZ3J1Yl91aW50NjRf dDsKKyNlbmRpZgorCisvKiBNaXNjIHR5cGVzLiAgKi8KKyNpZiBHUlVCX1RBUkdFVF9TSVpFT0Zf Vk9JRF9QID09IDgKK3R5cGVkZWYgZ3J1Yl91aW50NjRfdAlncnViX3RhcmdldF9hZGRyX3Q7Cit0 eXBlZGVmIGdydWJfdWludDY0X3QJZ3J1Yl90YXJnZXRfb2ZmX3Q7Cit0eXBlZGVmIGdydWJfdWlu dDY0X3QJZ3J1Yl90YXJnZXRfc2l6ZV90OwordHlwZWRlZiBncnViX2ludDY0X3QJZ3J1Yl90YXJn ZXRfc3NpemVfdDsKKyNlbHNlCit0eXBlZGVmIGdydWJfdWludDMyX3QJZ3J1Yl90YXJnZXRfYWRk cl90OwordHlwZWRlZiBncnViX3VpbnQzMl90CWdydWJfdGFyZ2V0X29mZl90OwordHlwZWRlZiBn cnViX3VpbnQzMl90CWdydWJfdGFyZ2V0X3NpemVfdDsKK3R5cGVkZWYgZ3J1Yl9pbnQzMl90CWdy dWJfdGFyZ2V0X3NzaXplX3Q7CisjZW5kaWYKKworI2lmIEdSVUJfQ1BVX1NJWkVPRl9WT0lEX1Ag PT0gOAordHlwZWRlZiBncnViX3VpbnQ2NF90CWdydWJfYWRkcl90OwordHlwZWRlZiBncnViX3Vp bnQ2NF90CWdydWJfc2l6ZV90OwordHlwZWRlZiBncnViX2ludDY0X3QJZ3J1Yl9zc2l6ZV90Owor I2Vsc2UKK3R5cGVkZWYgZ3J1Yl91aW50MzJfdAlncnViX2FkZHJfdDsKK3R5cGVkZWYgZ3J1Yl91 aW50MzJfdAlncnViX3NpemVfdDsKK3R5cGVkZWYgZ3J1Yl9pbnQzMl90CWdydWJfc3NpemVfdDsK KyNlbmRpZgorCisjaWYgR1JVQl9DUFVfU0laRU9GX1ZPSURfUCA9PSA4CisjIGRlZmluZSBHUlVC X1VMT05HX01BWCAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMCisjIGRlZmluZSBHUlVCX0xPTkdfTUFY IDkyMjMzNzIwMzY4NTQ3NzU4MDdMCisjIGRlZmluZSBHUlVCX0xPTkdfTUlOICgtOTIyMzM3MjAz Njg1NDc3NTgwN0wgLSAxKQorI2Vsc2UKKyMgZGVmaW5lIEdSVUJfVUxPTkdfTUFYIDQyOTQ5Njcy OTVVTAorIyBkZWZpbmUgR1JVQl9MT05HX01BWCAyMTQ3NDgzNjQ3TAorIyBkZWZpbmUgR1JVQl9M T05HX01JTiAoLTIxNDc0ODM2NDdMIC0gMSkKKyNlbmRpZgorCisjaWYgR1JVQl9DUFVfU0laRU9G X1ZPSURfUCA9PSA0CisjZGVmaW5lIFVJTlRfVE9fUFRSKHgpICgodm9pZCopKGdydWJfdWludDMy X3QpKHgpKQorI2RlZmluZSBQVFJfVE9fVUlOVDY0KHgpICgoZ3J1Yl91aW50NjRfdCkoZ3J1Yl91 aW50MzJfdCkoeCkpCisjZGVmaW5lIFBUUl9UT19VSU5UMzIoeCkgKChncnViX3VpbnQzMl90KSh4 KSkKKyNlbHNlCisjZGVmaW5lIFVJTlRfVE9fUFRSKHgpICgodm9pZCopKGdydWJfdWludDY0X3Qp KHgpKQorI2RlZmluZSBQVFJfVE9fVUlOVDY0KHgpICgoZ3J1Yl91aW50NjRfdCkoeCkpCisjZGVm aW5lIFBUUl9UT19VSU5UMzIoeCkgKChncnViX3VpbnQzMl90KShncnViX3VpbnQ2NF90KSh4KSkK KyNlbmRpZgorCisvKiBUaGUgdHlwZSBmb3IgcmVwcmVzZW50aW5nIGEgZmlsZSBvZmZzZXQuICAq LwordHlwZWRlZiBncnViX3VpbnQ2NF90CWdydWJfb2ZmX3Q7CisKKy8qIFRoZSB0eXBlIGZvciBy ZXByZXNlbnRpbmcgYSBkaXNrIGJsb2NrIGFkZHJlc3MuICAqLwordHlwZWRlZiBncnViX3VpbnQ2 NF90CWdydWJfZGlza19hZGRyX3Q7CisKKy8qIEJ5dGUtb3JkZXJzLiAgKi8KKyNkZWZpbmUgZ3J1 Yl9zd2FwX2J5dGVzMTYoeCkJXAorKHsgXAorICAgZ3J1Yl91aW50MTZfdCBfeCA9ICh4KTsgXAor ICAgKGdydWJfdWludDE2X3QpICgoX3ggPDwgOCkgfCAoX3ggPj4gOCkpOyBcCit9KQorCisjaWYg ZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gMykgJiYgKF9fR05VQ19fID4gNCB8fCBf X0dOVUNfTUlOT1JfXyA+PSAzKSAmJiBkZWZpbmVkKEdSVUJfVEFSR0VUX0kzODYpCitzdGF0aWMg aW5saW5lIGdydWJfdWludDMyX3QgZ3J1Yl9zd2FwX2J5dGVzMzIoZ3J1Yl91aW50MzJfdCB4KQor eworCXJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih4KTsKK30KKworc3RhdGljIGlubGluZSBncnVi X3VpbnQ2NF90IGdydWJfc3dhcF9ieXRlczY0KGdydWJfdWludDY0X3QgeCkKK3sKKwlyZXR1cm4g X19idWlsdGluX2Jzd2FwNjQoeCk7Cit9CisjZWxzZQkJCQkJLyogbm90IGdjYyA0LjMgb3IgbmV3 ZXIgKi8KKyNkZWZpbmUgZ3J1Yl9zd2FwX2J5dGVzMzIoeCkJXAorKHsgXAorICAgZ3J1Yl91aW50 MzJfdCBfeCA9ICh4KTsgXAorICAgKGdydWJfdWludDMyX3QpICgoX3ggPDwgMjQpIFwKKyAgICAg ICAgICAgICAgICAgICAgfCAoKF94ICYgKGdydWJfdWludDMyX3QpIDB4RkYwMFVMKSA8PCA4KSBc CisgICAgICAgICAgICAgICAgICAgIHwgKChfeCAmIChncnViX3VpbnQzMl90KSAweEZGMDAwMFVM KSA+PiA4KSBcCisgICAgICAgICAgICAgICAgICAgIHwgKF94ID4+IDI0KSk7IFwKK30pCisKKyNk ZWZpbmUgZ3J1Yl9zd2FwX2J5dGVzNjQoeCkJXAorKHsgXAorICAgZ3J1Yl91aW50NjRfdCBfeCA9 ICh4KTsgXAorICAgKGdydWJfdWludDY0X3QpICgoX3ggPDwgNTYpIFwKKyAgICAgICAgICAgICAg ICAgICAgfCAoKF94ICYgKGdydWJfdWludDY0X3QpIDB4RkYwMFVMTCkgPDwgNDApIFwKKyAgICAg ICAgICAgICAgICAgICAgfCAoKF94ICYgKGdydWJfdWludDY0X3QpIDB4RkYwMDAwVUxMKSA8PCAy NCkgXAorICAgICAgICAgICAgICAgICAgICB8ICgoX3ggJiAoZ3J1Yl91aW50NjRfdCkgMHhGRjAw MDAwMFVMTCkgPDwgOCkgXAorICAgICAgICAgICAgICAgICAgICB8ICgoX3ggJiAoZ3J1Yl91aW50 NjRfdCkgMHhGRjAwMDAwMDAwVUxMKSA+PiA4KSBcCisgICAgICAgICAgICAgICAgICAgIHwgKChf eCAmIChncnViX3VpbnQ2NF90KSAweEZGMDAwMDAwMDAwMFVMTCkgPj4gMjQpIFwKKyAgICAgICAg ICAgICAgICAgICAgfCAoKF94ICYgKGdydWJfdWludDY0X3QpIDB4RkYwMDAwMDAwMDAwMDBVTEwp ID4+IDQwKSBcCisgICAgICAgICAgICAgICAgICAgIHwgKF94ID4+IDU2KSk7IFwKK30pCisjZW5k aWYJCQkJCS8qIG5vdCBnY2MgNC4zIG9yIG5ld2VyICovCisKKyNpZmRlZiBHUlVCX0NQVV9XT1JE U19CSUdFTkRJQU4KKyMgZGVmaW5lIGdydWJfY3B1X3RvX2xlMTYoeCkJZ3J1Yl9zd2FwX2J5dGVz MTYoeCkKKyMgZGVmaW5lIGdydWJfY3B1X3RvX2xlMzIoeCkJZ3J1Yl9zd2FwX2J5dGVzMzIoeCkK KyMgZGVmaW5lIGdydWJfY3B1X3RvX2xlNjQoeCkJZ3J1Yl9zd2FwX2J5dGVzNjQoeCkKKyMgZGVm aW5lIGdydWJfbGVfdG9fY3B1MTYoeCkJZ3J1Yl9zd2FwX2J5dGVzMTYoeCkKKyMgZGVmaW5lIGdy dWJfbGVfdG9fY3B1MzIoeCkJZ3J1Yl9zd2FwX2J5dGVzMzIoeCkKKyMgZGVmaW5lIGdydWJfbGVf dG9fY3B1NjQoeCkJZ3J1Yl9zd2FwX2J5dGVzNjQoeCkKKyMgZGVmaW5lIGdydWJfY3B1X3RvX2Jl MTYoeCkJKChncnViX3VpbnQxNl90KSAoeCkpCisjIGRlZmluZSBncnViX2NwdV90b19iZTMyKHgp CSgoZ3J1Yl91aW50MzJfdCkgKHgpKQorIyBkZWZpbmUgZ3J1Yl9jcHVfdG9fYmU2NCh4KQkoKGdy dWJfdWludDY0X3QpICh4KSkKKyMgZGVmaW5lIGdydWJfYmVfdG9fY3B1MTYoeCkJKChncnViX3Vp bnQxNl90KSAoeCkpCisjIGRlZmluZSBncnViX2JlX3RvX2NwdTMyKHgpCSgoZ3J1Yl91aW50MzJf dCkgKHgpKQorIyBkZWZpbmUgZ3J1Yl9iZV90b19jcHU2NCh4KQkoKGdydWJfdWludDY0X3QpICh4 KSkKKyMgaWZkZWYgR1JVQl9UQVJHRVRfV09SRFNfQklHRU5ESUFOCisjICBkZWZpbmUgZ3J1Yl90 YXJnZXRfdG9faG9zdDE2KHgpCSgoZ3J1Yl91aW50MTZfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJf dGFyZ2V0X3RvX2hvc3QzMih4KQkoKGdydWJfdWludDMyX3QpICh4KSkKKyMgIGRlZmluZSBncnVi X3RhcmdldF90b19ob3N0NjQoeCkJKChncnViX3VpbnQ2NF90KSAoeCkpCisjICBkZWZpbmUgZ3J1 Yl9ob3N0X3RvX3RhcmdldDE2KHgpCSgoZ3J1Yl91aW50MTZfdCkgKHgpKQorIyAgZGVmaW5lIGdy dWJfaG9zdF90b190YXJnZXQzMih4KQkoKGdydWJfdWludDMyX3QpICh4KSkKKyMgIGRlZmluZSBn cnViX2hvc3RfdG9fdGFyZ2V0NjQoeCkJKChncnViX3VpbnQ2NF90KSAoeCkpCisjIGVsc2UgLyog ISBHUlVCX1RBUkdFVF9XT1JEU19CSUdFTkRJQU4gKi8KKyMgIGRlZmluZSBncnViX3RhcmdldF90 b19ob3N0MTYoeCkJZ3J1Yl9zd2FwX2J5dGVzMTYoeCkKKyMgIGRlZmluZSBncnViX3RhcmdldF90 b19ob3N0MzIoeCkJZ3J1Yl9zd2FwX2J5dGVzMzIoeCkKKyMgIGRlZmluZSBncnViX3RhcmdldF90 b19ob3N0NjQoeCkJZ3J1Yl9zd2FwX2J5dGVzNjQoeCkKKyMgIGRlZmluZSBncnViX2hvc3RfdG9f dGFyZ2V0MTYoeCkJZ3J1Yl9zd2FwX2J5dGVzMTYoeCkKKyMgIGRlZmluZSBncnViX2hvc3RfdG9f dGFyZ2V0MzIoeCkJZ3J1Yl9zd2FwX2J5dGVzMzIoeCkKKyMgIGRlZmluZSBncnViX2hvc3RfdG9f dGFyZ2V0NjQoeCkJZ3J1Yl9zd2FwX2J5dGVzNjQoeCkKKyMgZW5kaWYKKyNlbHNlIC8qICEgV09S RFNfQklHRU5ESUFOICovCisjIGRlZmluZSBncnViX2NwdV90b19sZTE2KHgpCSgoZ3J1Yl91aW50 MTZfdCkgKHgpKQorIyBkZWZpbmUgZ3J1Yl9jcHVfdG9fbGUzMih4KQkoKGdydWJfdWludDMyX3Qp ICh4KSkKKyMgZGVmaW5lIGdydWJfY3B1X3RvX2xlNjQoeCkJKChncnViX3VpbnQ2NF90KSAoeCkp CisjIGRlZmluZSBncnViX2xlX3RvX2NwdTE2KHgpCSgoZ3J1Yl91aW50MTZfdCkgKHgpKQorIyBk ZWZpbmUgZ3J1Yl9sZV90b19jcHUzMih4KQkoKGdydWJfdWludDMyX3QpICh4KSkKKyMgZGVmaW5l IGdydWJfbGVfdG9fY3B1NjQoeCkJKChncnViX3VpbnQ2NF90KSAoeCkpCisjIGRlZmluZSBncnVi X2NwdV90b19iZTE2KHgpCWdydWJfc3dhcF9ieXRlczE2KHgpCisjIGRlZmluZSBncnViX2NwdV90 b19iZTMyKHgpCWdydWJfc3dhcF9ieXRlczMyKHgpCisjIGRlZmluZSBncnViX2NwdV90b19iZTY0 KHgpCWdydWJfc3dhcF9ieXRlczY0KHgpCisjIGRlZmluZSBncnViX2JlX3RvX2NwdTE2KHgpCWdy dWJfc3dhcF9ieXRlczE2KHgpCisjIGRlZmluZSBncnViX2JlX3RvX2NwdTMyKHgpCWdydWJfc3dh cF9ieXRlczMyKHgpCisjIGRlZmluZSBncnViX2JlX3RvX2NwdTY0KHgpCWdydWJfc3dhcF9ieXRl czY0KHgpCisjIGlmZGVmIEdSVUJfVEFSR0VUX1dPUkRTX0JJR0VORElBTgorIyAgZGVmaW5lIGdy dWJfdGFyZ2V0X3RvX2hvc3QxNih4KQlncnViX3N3YXBfYnl0ZXMxNih4KQorIyAgZGVmaW5lIGdy dWJfdGFyZ2V0X3RvX2hvc3QzMih4KQlncnViX3N3YXBfYnl0ZXMzMih4KQorIyAgZGVmaW5lIGdy dWJfdGFyZ2V0X3RvX2hvc3Q2NCh4KQlncnViX3N3YXBfYnl0ZXM2NCh4KQorIyAgZGVmaW5lIGdy dWJfaG9zdF90b190YXJnZXQxNih4KQlncnViX3N3YXBfYnl0ZXMxNih4KQorIyAgZGVmaW5lIGdy dWJfaG9zdF90b190YXJnZXQzMih4KQlncnViX3N3YXBfYnl0ZXMzMih4KQorIyAgZGVmaW5lIGdy dWJfaG9zdF90b190YXJnZXQ2NCh4KQlncnViX3N3YXBfYnl0ZXM2NCh4KQorIyBlbHNlIC8qICEg R1JVQl9UQVJHRVRfV09SRFNfQklHRU5ESUFOICovCisjICBkZWZpbmUgZ3J1Yl90YXJnZXRfdG9f aG9zdDE2KHgpCSgoZ3J1Yl91aW50MTZfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJfdGFyZ2V0X3Rv X2hvc3QzMih4KQkoKGdydWJfdWludDMyX3QpICh4KSkKKyMgIGRlZmluZSBncnViX3RhcmdldF90 b19ob3N0NjQoeCkJKChncnViX3VpbnQ2NF90KSAoeCkpCisjICBkZWZpbmUgZ3J1Yl9ob3N0X3Rv X3RhcmdldDE2KHgpCSgoZ3J1Yl91aW50MTZfdCkgKHgpKQorIyAgZGVmaW5lIGdydWJfaG9zdF90 b190YXJnZXQzMih4KQkoKGdydWJfdWludDMyX3QpICh4KSkKKyMgIGRlZmluZSBncnViX2hvc3Rf dG9fdGFyZ2V0NjQoeCkJKChncnViX3VpbnQ2NF90KSAoeCkpCisjIGVuZGlmCisjZW5kaWYgLyog ISBXT1JEU19CSUdFTkRJQU4gKi8KKworI2lmIEdSVUJfVEFSR0VUX1NJWkVPRl9WT0lEX1AgPT0g OAorIyAgZGVmaW5lIGdydWJfaG9zdF90b190YXJnZXRfYWRkcih4KSBncnViX2hvc3RfdG9fdGFy Z2V0NjQoeCkKKyNlbHNlCisjICBkZWZpbmUgZ3J1Yl9ob3N0X3RvX3RhcmdldF9hZGRyKHgpIGdy dWJfaG9zdF90b190YXJnZXQzMih4KQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdSVUJfVFlQRVNf SEVBREVSICovCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMv aW9lbXUtcWVtdS14ZW4vZ3J1Yi1mYXQvaTM4Ni90eXBlcy5oIHhlbi00LjEuMi1iL3Rvb2xzL2lv ZW11LXFlbXUteGVuL2dydWItZmF0L2kzODYvdHlwZXMuaAotLS0geGVuLTQuMS4yLWEvdG9vbHMv aW9lbXUtcWVtdS14ZW4vZ3J1Yi1mYXQvaTM4Ni90eXBlcy5oCTE5NzAtMDEtMDEgMDc6MDA6MDAu MDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9ncnVi LWZhdC9pMzg2L3R5cGVzLmgJMjAxMi0xMi0yOCAxNjowMjo0MS4wMTA5Mzc2MTkgKzA4MDAKQEAg LTAsMCArMSwzNSBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVy CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDYsMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAq ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHUlVCX1RZUEVT X0NQVV9IRUFERVIKKyNkZWZpbmUgR1JVQl9UWVBFU19DUFVfSEVBREVSCTEKKworLyogVGhlIHNp emUgb2Ygdm9pZCAqLiAgKi8KKyNkZWZpbmUgR1JVQl9UQVJHRVRfU0laRU9GX1ZPSURfUAk0CisK Ky8qIFRoZSBzaXplIG9mIGxvbmcuICAqLworI2RlZmluZSBHUlVCX1RBUkdFVF9TSVpFT0ZfTE9O RwkJNAorCisvKiBpMzg2IGlzIGxpdHRsZS1lbmRpYW4uICAqLworI3VuZGVmIEdSVUJfVEFSR0VU X1dPUkRTX0JJR0VORElBTgorCisjZGVmaW5lIEdSVUJfVEFSR0VUX0kzODYJCTEKKworI2RlZmlu ZSBHUlVCX1RBUkdFVF9NSU5fQUxJR04JCTEKKworI2VuZGlmIC8qICEgR1JVQl9UWVBFU19DUFVf SEVBREVSICovCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMv aW9lbXUtcWVtdS14ZW4vZ3J1Yi1mYXQvbWlzYy5oIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFl bXUteGVuL2dydWItZmF0L21pc2MuaAotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14 ZW4vZ3J1Yi1mYXQvbWlzYy5oCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisr KyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC9taXNjLmgJMjAxMi0x Mi0yOCAxNjowMjo0MS4wMTA5Mzc2MTkgKzA4MDAKQEAgLTAsMCArMSwxNyBAQAoraW50CitncnVi X3N0cm5jbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgZ3J1Yl9zaXplX3QgbikK K3sKKyAgaWYgKG4gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICB3aGlsZSAoKnMxICYmICpzMiAm JiAtLW4pCisgICAgeworICAgICAgaWYgKCpzMSAhPSAqczIpCisgICAgICAgIGJyZWFrOworCisg ICAgICBzMSsrOworICAgICAgczIrKzsKKyAgICB9CisKKyAgcmV0dXJuIChpbnQpICpzMSAtIChp bnQpICpzMjsKK30KZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjItYS90b29s cy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC94ODZfNjQvdHlwZXMuaCB4ZW4tNC4xLjItYi90b29s cy9pb2VtdS1xZW11LXhlbi9ncnViLWZhdC94ODZfNjQvdHlwZXMuaAotLS0geGVuLTQuMS4yLWEv dG9vbHMvaW9lbXUtcWVtdS14ZW4vZ3J1Yi1mYXQveDg2XzY0L3R5cGVzLmgJMTk3MC0wMS0wMSAw NzowMDowMC4wMDAwMDAwMDAgKzA3MDAKKysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUt eGVuL2dydWItZmF0L3g4Nl82NC90eXBlcy5oCTIwMTItMTItMjggMTY6MDI6NDEuMDExNzY0MTU5 ICswODAwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQg Qm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAq ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHUlVCX1RZUEVT X0NQVV9IRUFERVIKKyNkZWZpbmUgR1JVQl9UWVBFU19DUFVfSEVBREVSCTEKKworLyogVGhlIHNp emUgb2Ygdm9pZCAqLiAgKi8KKyNkZWZpbmUgR1JVQl9UQVJHRVRfU0laRU9GX1ZPSURfUAk4CisK Ky8qIFRoZSBzaXplIG9mIGxvbmcuICAqLworI2lmZGVmIF9fTUlOR1czMl9fCisjZGVmaW5lIEdS VUJfVEFSR0VUX1NJWkVPRl9MT05HCQk0CisjZWxzZQorI2RlZmluZSBHUlVCX1RBUkdFVF9TSVpF T0ZfTE9ORwkJOAorI2VuZGlmCisKKy8qIHg4Nl82NCBpcyBsaXR0bGUtZW5kaWFuLiAgKi8KKyN1 bmRlZiBHUlVCX1RBUkdFVF9XT1JEU19CSUdFTkRJQU4KKworI2RlZmluZSBHUlVCX1RBUkdFVF9Y ODZfNjQJCTEKKworI2RlZmluZSBHUlVCX1RBUkdFVF9NSU5fQUxJR04JCTEKKworI2VuZGlmIC8q ICEgR1JVQl9UWVBFU19DUFVfSEVBREVSICovCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTgg eGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vaTM4Ni90eXBlcy5oIHhlbi00LjEuMi1i L3Rvb2xzL2lvZW11LXFlbXUteGVuL2kzODYvdHlwZXMuaAotLS0geGVuLTQuMS4yLWEvdG9vbHMv aW9lbXUtcWVtdS14ZW4vaTM4Ni90eXBlcy5oCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAw ICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9pMzg2L3R5cGVzLmgJ MjAxMi0xMi0yOCAxNjowMjo0MS4wMTc4MDIzNzEgKzA4MDAKQEAgLTAsMCArMSwzNSBAQAorLyoK KyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChD KSAyMDAyLDIwMDYsMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICog IEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHUlVCX1RZUEVTX0NQVV9IRUFERVIKKyNkZWZp bmUgR1JVQl9UWVBFU19DUFVfSEVBREVSCTEKKworLyogVGhlIHNpemUgb2Ygdm9pZCAqLiAgKi8K KyNkZWZpbmUgR1JVQl9UQVJHRVRfU0laRU9GX1ZPSURfUAk0CisKKy8qIFRoZSBzaXplIG9mIGxv bmcuICAqLworI2RlZmluZSBHUlVCX1RBUkdFVF9TSVpFT0ZfTE9ORwkJNAorCisvKiBpMzg2IGlz IGxpdHRsZS1lbmRpYW4uICAqLworI3VuZGVmIEdSVUJfVEFSR0VUX1dPUkRTX0JJR0VORElBTgor CisjZGVmaW5lIEdSVUJfVEFSR0VUX0kzODYJCTEKKworI2RlZmluZSBHUlVCX1RBUkdFVF9NSU5f QUxJR04JCTEKKworI2VuZGlmIC8qICEgR1JVQl9UWVBFU19DUFVfSEVBREVSICovCmRpZmYgLS1l eGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vTWFr ZWZpbGUgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vTWFrZWZpbGUKLS0tIHhlbi00 LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL01ha2VmaWxlCTIwMTEtMDItMTIgMDE6NTQ6NTEu MDAwMDAwMDAwICswODAwCisrKyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhlbi9NYWtl ZmlsZQkyMDEyLTEyLTI4IDE2OjAyOjQxLjAxMTc2NDE1OSArMDgwMApAQCAtMTg4LDE3ICsxODgs MTggQEAgbGlicWVtdV9jb21tb24uYTogJChPQkpTKQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgVVNFUl9P QkpTIGlzIGNvZGUgdXNlZCBieSBxZW11IHVzZXJzcGFjZSBlbXVsYXRpb24KIFVTRVJfT0JKUz1j dXRpbHMubyAgY2FjaGUtdXRpbHMubwogCiBsaWJxZW11X3VzZXIuYTogJChVU0VSX09CSlMpCiAK ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIAotcWVtdS1pbWckKEVYRVNVRik6IHFlbXUtaW1nLm8gcWVtdS10b29s Lm8gb3NkZXAubyAkKEJMT0NLX09CSlMpCisKK3FlbXUtaW1nJChFWEVTVUYpOmZzLXRpbWUubyBn cnViX2Vyci5vIHBhcnRpdGlvbi5vIGZzaGVscC5vIG50ZnMubyBmYXQubyBtaXNjLm8gZGVidWcu byBxZW11LWltZy5vIHFlbXUtdG9vbC5vIG9zZGVwLm8gJChCTE9DS19PQkpTKQogCiBxZW11LW5i ZCQoRVhFU1VGKTogIHFlbXUtbmJkLm8gcWVtdS10b29sLm8gb3NkZXAubyAkKEJMT0NLX09CSlMp CiAKIHFlbXUtaW1nJChFWEVTVUYpIHFlbXUtbmJkJChFWEVTVUYpOiBMSUJTICs9IC1segogCiAK IGNsZWFuOgogIyBhdm9pZCBvbGQgYnVpbGQgcHJvYmxlbXMgYnkgcmVtb3ZpbmcgcG90ZW50aWFs bHkgaW5jb3JyZWN0IG9sZCBmaWxlcwpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00 LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL01ha2VmaWxlLm9yaWcgeGVuLTQuMS4yLWIvdG9v bHMvaW9lbXUtcWVtdS14ZW4vTWFrZWZpbGUub3JpZwotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9l bXUtcWVtdS14ZW4vTWFrZWZpbGUub3JpZwkxOTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCAr MDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vTWFrZWZpbGUub3JpZwky MDEyLTEyLTI4IDE1OjU5OjM1LjM1NDY4MTYzNCArMDgwMApAQCAtMCwwICsxLDM3MiBAQAorIyBN YWtlZmlsZSBmb3IgUUVNVS4KKworaW5jbHVkZSBjb25maWctaG9zdC5tYWsKK2luY2x1ZGUgJChT UkNfUEFUSCkvcnVsZXMubWFrCisKKy5QSE9OWTogYWxsIGNsZWFuIGNzY29wZSBkaXN0Y2xlYW4g ZHZpIGh0bWwgaW5mbyBpbnN0YWxsIGluc3RhbGwtZG9jIFwKKwlyZWN1cnNlLWFsbCBzcGVlZCB0 YXIgdGFyYmluIHRlc3QKKworVlBBVEg9JChTUkNfUEFUSCk6JChTUkNfUEFUSCkvaHcKKworCitD RkxBR1MgKz0gJChPU19DRkxBR1MpICQoQVJDSF9DRkxBR1MpCitMREZMQUdTICs9ICQoT1NfTERG TEFHUykgJChBUkNIX0xERkxBR1MpCisKK0NQUEZMQUdTICs9IC1JLiAtSSQoU1JDX1BBVEgpIC1N TUQgLU1QIC1NVCAkQAorQ1BQRkxBR1MgKz0gLURfR05VX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9C SVRTPTY0IC1EX0xBUkdFRklMRV9TT1VSQ0UKK0xJQlM9CitpZmRlZiBDT05GSUdfU1RBVElDCitM REZMQUdTICs9IC1zdGF0aWMKK2VuZGlmCitpZmRlZiBCVUlMRF9ET0NTCitET0NTPXFlbXUtZG9j Lmh0bWwgcWVtdS10ZWNoLmh0bWwgcWVtdS4xIHFlbXUtaW1nLjEgcWVtdS1uYmQuOAorZWxzZQor RE9DUz0KK2VuZGlmCisKK0xJQlMrPSQoQUlPTElCUykKKworaWZkZWYgQ09ORklHX1NPTEFSSVMK K0xJQlMrPS1sc29ja2V0IC1sbnNsIC1scmVzb2x2CitlbmRpZgorCitpZmRlZiBDT05GSUdfV0lO MzIKK0xJQlMrPS1sd2lubW0gLWx3czJfMzIgLWxpcGhscGFwaQorZW5kaWYKKworYWxsOiAkKFRP T0xTKSAkKERPQ1MpIHJlY3Vyc2UtYWxsCisKK1NVQkRJUl9SVUxFUz0kKHBhdHN1YnN0ICUsc3Vi ZGlyLSUsICQoVEFSR0VUX0RJUlMpKQorCitzdWJkaXItJToKKwkkKGNhbGwgcXVpZXQtY29tbWFu ZCwkKE1BS0UpIC1DICQqIFY9IiQoVikiIFRBUkdFVF9ESVI9IiQqLyIgYWxsLCkKKworJChmaWx0 ZXIgJS1zb2Z0bW11LCQoU1VCRElSX1JVTEVTKSk6IGxpYnFlbXVfY29tbW9uLmEKKyQoZmlsdGVy ICUtdXNlciwkKFNVQkRJUl9SVUxFUykpOiBsaWJxZW11X3VzZXIuYQorCityZWN1cnNlLWFsbDog JChTVUJESVJfUlVMRVMpCisKK0NQUEZMQUdTICs9IC1JJChYRU5fUk9PVCkvdG9vbHMvbGlieGMK K0NQUEZMQUdTICs9IC1JJChYRU5fUk9PVCkvdG9vbHMvYmxrdGFwL2xpYgorQ1BQRkxBR1MgKz0g LUkkKFhFTl9ST09UKS90b29scy94ZW5zdG9yZQorQ1BQRkxBR1MgKz0gLUkkKFhFTl9ST09UKS90 b29scy9pbmNsdWRlCisKK3RhcGRpc2staW9lbXU6IHRhcGRpc2staW9lbXUuYyBjdXRpbHMuYyBi bG9jay5jIGJsb2NrLXJhdy5jIGJsb2NrLWNvdy5jIGJsb2NrLXFjb3cuYyBhZXMuYyBibG9jay12 bWRrLmMgYmxvY2stY2xvb3AuYyBibG9jay1kbWcuYyBibG9jay1ib2Nocy5jIGJsb2NrLXZwYy5j IGJsb2NrLXZ2ZmF0LmMgYmxvY2stcWNvdzIuYyBody94ZW5fYmxrdGFwLmMgb3NkZXAuYworCSQo Q0MpIC1EUUVNVV9UT09MICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKEJBU0VfQ0ZMQUdTKSAkKExE RkxBR1MpICQoQkFTRV9MREZMQUdTKSAtbyAkQCAkXiAtbHogJChMSUJTKQorCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworIyBCTE9DS19PQkpTIGlzIGNvZGUgdXNlZCBieSBib3RoIHFlbXUgc3lzdGVtIGVtdWxh dGlvbiBhbmQgcWVtdS1pbWcKKworQkxPQ0tfT0JKUz1jdXRpbHMubyBvc2RlcC5vIHFlbXUtbWFs bG9jLm8KK0JMT0NLX09CSlMrPWJsb2NrLWNvdy5vIGJsb2NrLXFjb3cubyBhZXMubyBibG9jay12 bWRrLm8gYmxvY2stY2xvb3AubworQkxPQ0tfT0JKUys9YmxvY2stZG1nLm8gYmxvY2stYm9jaHMu byBibG9jay12cGMubyBibG9jay12dmZhdC5vCitCTE9DS19PQkpTKz1ibG9jay1xY293Mi5vIGJs b2NrLXBhcmFsbGVscy5vIGJsb2NrLW5iZC5vCitCTE9DS19PQkpTKz1uYmQubyBibG9jay5vIGFp by5vCisKK2lmZGVmIENPTkZJR19XSU4zMgorQkxPQ0tfT0JKUyArPSBibG9jay1yYXctd2luMzIu bworZWxzZQoraWZkZWYgQ09ORklHX0FJTworQkxPQ0tfT0JKUyArPSBwb3NpeC1haW8tY29tcGF0 Lm8KK2VuZGlmCitCTE9DS19PQkpTICs9IGJsb2NrLXJhdy1wb3NpeC5vCitlbmRpZgorCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjIGxpYnFlbXVfY29tbW9uLmE6IFRhcmdldCBpbmRlcGVuZGVudCBwYXJ0IG9m IHN5c3RlbSBlbXVsYXRpb24uIFRoZQorIyBsb25nIHRlcm0gcGF0aCBpcyB0byBzdXBwcmVzcyAq YWxsKiB0YXJnZXQgc3BlY2lmaWMgY29kZSBpbiBjYXNlIG9mCisjIHN5c3RlbSBlbXVsYXRpb24s IGkuZS4gYSBzaW5nbGUgUUVNVSBleGVjdXRhYmxlIHNob3VsZCBzdXBwb3J0IGFsbAorIyBDUFVz IGFuZCBtYWNoaW5lcy4KKworT0JKUz0kKEJMT0NLX09CSlMpCitPQkpTKz1yZWFkbGluZS5vIGNv bnNvbGUubworCitPQkpTKz1pcnEubworT0JKUys9aTJjLm8gc21idXMubyBzbWJ1c19lZXByb20u byBtYXg3MzEwLm8gbWF4MTExeC5vIHdtODc1MC5vCitPQkpTKz1zc2QwMzAzLm8gc3NkMDMyMy5v IGFkczc4NDYubyBzdGVsbGFyaXNfaW5wdXQubyB0d2w5MjIzMC5vCitPQkpTKz10bXAxMDUubyBs bTgzMngubworT0JKUys9c2NzaS1kaXNrLm8gY2Ryb20ubworT0JKUys9c2NzaS1nZW5lcmljLm8K K09CSlMrPXVzYi5vIHVzYi1odWIubyB1c2ItJChIT1NUX1VTQikubyB1c2ItaGlkLm8gdXNiLW1z ZC5vIHVzYi13YWNvbS5vCitPQkpTKz11c2Itc2VyaWFsLm8gdXNiLW5ldC5vCitPQkpTKz1zZC5v IHNzaS1zZC5vCitPQkpTKz1idC5vIGJ0LWhvc3QubyBidC12aGNpLm8gYnQtbDJjYXAubyBidC1z ZHAubyBidC1oY2kubyBidC1oaWQubyB1c2ItYnQubworT0JKUys9YnVmZmVyZWRfZmlsZS5vIG1p Z3JhdGlvbi5vIG1pZ3JhdGlvbi10Y3AubyBuZXQubyBxZW11LXNvY2tldHMubworT0JKUys9cWVt dS1jaGFyLm8gYWlvLm8gbmV0LWNoZWNrc3VtLm8gc2F2ZXZtLm8gY2FjaGUtdXRpbHMubworCitp ZmRlZiBDT05GSUdfQlJMQVBJCitPQkpTKz0gYmF1bS5vCitMSUJTKz0tbGJybGFwaQorZW5kaWYK KworaWZkZWYgQ09ORklHX1dJTjMyCitPQkpTKz10YXAtd2luMzIubworZWxzZQorT0JKUys9bWln cmF0aW9uLWV4ZWMubworZW5kaWYKKworQVVESU9fT0JKUyA9IGF1ZGlvLm8gbm9hdWRpby5vIHdh dmF1ZGlvLm8gbWl4ZW5nLm8KK2lmZGVmIENPTkZJR19TREwKK0FVRElPX09CSlMgKz0gc2RsYXVk aW8ubworZW5kaWYKK2lmZGVmIENPTkZJR19PU1MKK0FVRElPX09CSlMgKz0gb3NzYXVkaW8ubwor ZW5kaWYKK2lmZGVmIENPTkZJR19DT1JFQVVESU8KK0FVRElPX09CSlMgKz0gY29yZWF1ZGlvLm8K K0FVRElPX1BUID0geWVzCitlbmRpZgoraWZkZWYgQ09ORklHX0FMU0EKK0FVRElPX09CSlMgKz0g YWxzYWF1ZGlvLm8KK2VuZGlmCitpZmRlZiBDT05GSUdfRFNPVU5ECitBVURJT19PQkpTICs9IGRz b3VuZGF1ZGlvLm8KK2VuZGlmCitpZmRlZiBDT05GSUdfRk1PRAorQVVESU9fT0JKUyArPSBmbW9k YXVkaW8ubworYXVkaW8vYXVkaW8ubyBhdWRpby9mbW9kYXVkaW8ubzogQ1BQRkxBR1MgOj0gLUkk KENPTkZJR19GTU9EX0lOQykgJChDUFBGTEFHUykKK2VuZGlmCitpZmRlZiBDT05GSUdfRVNECitB VURJT19QVCA9IHllcworQVVESU9fUFRfSU5UID0geWVzCitBVURJT19PQkpTICs9IGVzZGF1ZGlv Lm8KK2VuZGlmCitpZmRlZiBDT05GSUdfUEEKK0FVRElPX1BUID0geWVzCitBVURJT19QVF9JTlQg PSB5ZXMKK0FVRElPX09CSlMgKz0gcGFhdWRpby5vCitlbmRpZgoraWZkZWYgQVVESU9fUFQKK0xE RkxBR1MgKz0gLXB0aHJlYWQKK2VuZGlmCitpZmRlZiBBVURJT19QVF9JTlQKK0FVRElPX09CSlMg Kz0gYXVkaW9fcHRfaW50Lm8KK2VuZGlmCitBVURJT19PQkpTKz0gd2F2Y2FwdHVyZS5vCitpZmRl ZiBDT05GSUdfQVVESU8KK09CSlMrPSQoYWRkcHJlZml4IGF1ZGlvLywgJChBVURJT19PQkpTKSkK K2VuZGlmCisKK2lmZGVmIENPTkZJR19TREwKK09CSlMrPXNkbC5vIHhfa2V5bWFwLm8KK2VuZGlm CitpZmRlZiBDT05GSUdfQ1VSU0VTCitPQkpTKz1jdXJzZXMubworZW5kaWYKK09CSlMrPXZuYy5v IGQzZGVzLm8KKworaWZkZWYgQ09ORklHX0NPQ09BCitPQkpTKz1jb2NvYS5vCitlbmRpZgorCitp ZmRlZiBDT05GSUdfU0xJUlAKK0NQUEZMQUdTKz0tSSQoU1JDX1BBVEgpL3NsaXJwCitTTElSUF9P QkpTPWNrc3VtLm8gaWYubyBpcF9pY21wLm8gaXBfaW5wdXQubyBpcF9vdXRwdXQubyBcCitzbGly cC5vIG1idWYubyBtaXNjLm8gc2J1Zi5vIHNvY2tldC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQu byBcCit0Y3Bfc3Vici5vIHRjcF90aW1lci5vIHVkcC5vIGJvb3RwLm8gZGVidWcubyB0ZnRwLm8K K09CSlMrPSQoYWRkcHJlZml4IHNsaXJwLywgJChTTElSUF9PQkpTKSkKK2VuZGlmCisKK0xJQlMr PSQoVkRFX0xJQlMpCisKK2NvY29hLm86IGNvY29hLm0KKworc2RsLm86IHNkbC5jIGtleW1hcHMu YyBzZGxfa2V5c3ltLmgKKworc2RsLm8gYXVkaW8vc2RsYXVkaW8ubzogQ0ZMQUdTICs9ICQoU0RM X0NGTEFHUykKKwordm5jLm86IHZuYy5jIGtleW1hcHMuYyBzZGxfa2V5c3ltLmggdm5jaGV4dGls ZS5oIGQzZGVzLmMgZDNkZXMuaAorCit2bmMubzogQ0ZMQUdTICs9ICQoQ09ORklHX1ZOQ19UTFNf Q0ZMQUdTKQorCitjdXJzZXMubzogY3Vyc2VzLmMga2V5bWFwcy5jIGN1cnNlc19rZXlzLmgKKwor YnQtaG9zdC5vOiBDRkxBR1MgKz0gJChDT05GSUdfQkxVRVpfQ0ZMQUdTKQorCitsaWJxZW11X2Nv bW1vbi5hOiAkKE9CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFVTRVJfT0JKUyBpcyBjb2RlIHVz ZWQgYnkgcWVtdSB1c2Vyc3BhY2UgZW11bGF0aW9uCitVU0VSX09CSlM9Y3V0aWxzLm8gIGNhY2hl LXV0aWxzLm8KKworbGlicWVtdV91c2VyLmE6ICQoVVNFUl9PQkpTKQorCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisKK3FlbXUtaW1nJChFWEVTVUYpOiBxZW11LWltZy5vIHFlbXUtdG9vbC5vIG9zZGVwLm8gJChC TE9DS19PQkpTKQorCitxZW11LW5iZCQoRVhFU1VGKTogIHFlbXUtbmJkLm8gcWVtdS10b29sLm8g b3NkZXAubyAkKEJMT0NLX09CSlMpCisKK3FlbXUtaW1nJChFWEVTVUYpIHFlbXUtbmJkJChFWEVT VUYpOiBMSUJTICs9IC1segorCisKK2NsZWFuOgorIyBhdm9pZCBvbGQgYnVpbGQgcHJvYmxlbXMg YnkgcmVtb3ZpbmcgcG90ZW50aWFsbHkgaW5jb3JyZWN0IG9sZCBmaWxlcworCXJtIC1mIGNvbmZp Zy5tYWsgY29uZmlnLmggb3AtaTM4Ni5oIG9wYy1pMzg2LmggZ2VuLW9wLWkzODYuaCBvcC1hcm0u aCBvcGMtYXJtLmggZ2VuLW9wLWFybS5oCisJcm0gLWYgKi5vIC4qLmQgKi5hICQoVE9PTFMpIFRB R1MgY3Njb3BlLiogKi5wb2QgKn4gKi8qfgorCXJtIC1mIHNsaXJwLyoubyBzbGlycC8uKi5kIGF1 ZGlvLyoubyBhdWRpby8uKi5kCisJJChNQUtFKSAtQyB0ZXN0cyBjbGVhbgorCWZvciBkIGluICQo VEFSR0VUX0RJUlMpOyBkbyBcCisJJChNQUtFKSAtQyAkJGQgJEAgfHwgZXhpdCAxIDsgXAorICAg ICAgICBkb25lCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBjb25maWctaG9zdC5tYWsgY29u ZmlnLWhvc3QuaCAkKERPQ1MpCisJcm0gLWYgcWVtdS17ZG9jLHRlY2h9LntpbmZvLGF1eCxjcCxk dmksZm4saW5mbyxreSxsb2cscGcsdG9jLHRwLHZyfQorCWZvciBkIGluICQoVEFSR0VUX0RJUlMp OyBkbyBcCisJcm0gLXJmICQkZCB8fCBleGl0IDEgOyBcCisgICAgICAgIGRvbmUKKworS0VZTUFQ Uz1kYSAgICAgZW4tZ2IgIGV0ICBmciAgICAgZnItY2ggIGlzICBsdCAgbW9kaWZpZXJzICBubyAg cHQtYnIgIHN2IFwKK2FyICAgICAgZGUgICAgIGVuLXVzICBmaSAgZnItYmUgIGhyICAgICBpdCAg bHYgIG5sICAgICAgICAgcGwgIHJ1ICAgICB0aCBcCitjb21tb24gIGRlLWNoICBlcyAgICAgZm8g IGZyLWNhICBodSAgICAgamEgIG1rICBubC1iZSAgICAgIHB0ICBzbCAgICAgdHIKKworaWZkZWYg SU5TVEFMTF9CTE9CUworQkxPQlM9Ymlvcy5iaW4gdmdhYmlvcy5iaW4gdmdhYmlvcy1jaXJydXMu YmluIHBwY19yb20uYmluIFwKK3ZpZGVvLnggb3BlbmJpb3Mtc3BhcmMzMiBvcGVuYmlvcy1zcGFy YzY0IG9wZW5iaW9zLXBwYyBcCitweGUtbmUya19wY2kuYmluIHB4ZS1ydGw4MTM5LmJpbiBweGUt cGNuZXQuYmluIHB4ZS1lMTAwMC5iaW4gXAorYmFtYm9vLmR0YgorZWxzZQorQkxPQlM9CitlbmRp ZgorCitpbnN0YWxsLWRvYzogJChET0NTKQorCW1rZGlyIC1wICIkKERFU1RESVIpJChkb2NkaXIp IgorCSQoSU5TVEFMTCkgLW0gNjQ0IHFlbXUtZG9jLmh0bWwgIHFlbXUtdGVjaC5odG1sICIkKERF U1RESVIpJChkb2NkaXIpIgoraWZuZGVmIENPTkZJR19XSU4zMgorCW1rZGlyIC1wICIkKERFU1RE SVIpJChtYW5kaXIpL21hbjEiCisJJChJTlNUQUxMKSAtbSA2NDQgcWVtdS4xIHFlbXUtaW1nLjEg IiQoREVTVERJUikkKG1hbmRpcikvbWFuMSIKKwlta2RpciAtcCAiJChERVNURElSKSQobWFuZGly KS9tYW44IgorCSQoSU5TVEFMTCkgLW0gNjQ0IHFlbXUtbmJkLjggIiQoREVTVERJUikkKG1hbmRp cikvbWFuOCIKK2VuZGlmCisKK2luc3RhbGw6IGFsbCAkKGlmICQoQlVJTERfRE9DUyksaW5zdGFs bC1kb2MpCisJbWtkaXIgLXAgIiQoREVTVERJUikkKGJpbmRpcikiCitpZm5lcSAoJChUT09MUyks KQorCSQoSU5TVEFMTCkgLW0gNzU1IC1zICQoVE9PTFMpICIkKERFU1RESVIpJChiaW5kaXIpIgor ZW5kaWYKK2lmbmVxICgkKEJMT0JTKSwpCisJbWtkaXIgLXAgIiQoREVTVERJUikkKGRhdGFkaXIp IgorCXNldCAtZTsgZm9yIHggaW4gJChCTE9CUyk7IGRvIFwKKwkJJChJTlNUQUxMKSAtbSA2NDQg JChTUkNfUEFUSCkvcGMtYmlvcy8kJHggIiQoREVTVERJUikkKGRhdGFkaXIpIjsgXAorCWRvbmUK K2VuZGlmCitpZm5kZWYgQ09ORklHX1dJTjMyCisJbWtkaXIgLXAgIiQoREVTVERJUikkKGRhdGFk aXIpL2tleW1hcHMiCisJc2V0IC1lOyBmb3IgeCBpbiAkKEtFWU1BUFMpOyBkbyBcCisJCSQoSU5T VEFMTCkgLW0gNjQ0ICQoU1JDX1BBVEgpL2tleW1hcHMvJCR4ICIkKERFU1RESVIpJChkYXRhZGly KS9rZXltYXBzIjsgXAorCWRvbmUKK2VuZGlmCisJZm9yIGQgaW4gJChUQVJHRVRfRElSUyk7IGRv IFwKKwkkKE1BS0UpIC1DICQkZCAkQCB8fCBleGl0IDEgOyBcCisgICAgICAgIGRvbmUKKworIyB2 YXJpb3VzIHRlc3QgdGFyZ2V0cwordGVzdCBzcGVlZDogYWxsCisJJChNQUtFKSAtQyB0ZXN0cyAk QAorCitUQUdTOgorCWV0YWdzICouW2NoXSB0ZXN0cy8qLltjaF0KKworY3Njb3BlOgorCXJtIC1m IC4vY3Njb3BlLioKKwlmaW5kIC4gLW5hbWUgIiouW2NoXSIgLXByaW50IHwgc2VkICdzLF5cLi8s LCcgPiAuL2NzY29wZS5maWxlcworCWNzY29wZSAtYgorCisjIGRvY3VtZW50YXRpb24KKyUuaHRt bDogJS50ZXhpCisJdGV4aTJodG1sIC1tb25vbGl0aGljIC1udW1iZXIgJDwKKworJS5pbmZvOiAl LnRleGkKKwltYWtlaW5mbyAkPCAtbyAkQAorCislLmR2aTogJS50ZXhpCisJdGV4aTJkdmkgJDwK KworcWVtdS4xOiBxZW11LWRvYy50ZXhpCisJJChTUkNfUEFUSCkvdGV4aTJwb2QucGwgJDwgcWVt dS5wb2QKKwlwb2QybWFuIC0tc2VjdGlvbj0xIC0tY2VudGVyPSIgIiAtLXJlbGVhc2U9IiAiIHFl bXUucG9kID4gJEAKKworcWVtdS1pbWcuMTogcWVtdS1pbWcudGV4aQorCSQoU1JDX1BBVEgpL3Rl eGkycG9kLnBsICQ8IHFlbXUtaW1nLnBvZAorCXBvZDJtYW4gLS1zZWN0aW9uPTEgLS1jZW50ZXI9 IiAiIC0tcmVsZWFzZT0iICIgcWVtdS1pbWcucG9kID4gJEAKKworcWVtdS1uYmQuODogcWVtdS1u YmQudGV4aQorCSQoU1JDX1BBVEgpL3RleGkycG9kLnBsICQ8IHFlbXUtbmJkLnBvZAorCXBvZDJt YW4gLS1zZWN0aW9uPTggLS1jZW50ZXI9IiAiIC0tcmVsZWFzZT0iICIgcWVtdS1uYmQucG9kID4g JEAKKworaW5mbzogcWVtdS1kb2MuaW5mbyBxZW11LXRlY2guaW5mbworCitkdmk6IHFlbXUtZG9j LmR2aSBxZW11LXRlY2guZHZpCisKK2h0bWw6IHFlbXUtZG9jLmh0bWwgcWVtdS10ZWNoLmh0bWwK KworcWVtdS1kb2MuZHZpIHFlbXUtZG9jLmh0bWwgcWVtdS1kb2MuaW5mbzogcWVtdS1pbWcudGV4 aSBxZW11LW5iZC50ZXhpCisKK1ZFUlNJT04gPz0gJChzaGVsbCBjYXQgVkVSU0lPTikKK0ZJTEUg PSBxZW11LSQoVkVSU0lPTikKKworIyB0YXIgcmVsZWFzZSAodXNlICdtYWtlIC1rIHRhcicgb24g YSBjaGVja291dGVkIHRyZWUpCit0YXI6CisJcm0gLXJmIC90bXAvJChGSUxFKQorCWNwIC1yIC4g L3RtcC8kKEZJTEUpCisJY2QgL3RtcCAmJiB0YXIgemN2ZiB+LyQoRklMRSkudGFyLmd6ICQoRklM RSkgLS1leGNsdWRlIENWUyAtLWV4Y2x1ZGUgLmdpdCAtLWV4Y2x1ZGUgLnN2bgorCXJtIC1yZiAv dG1wLyQoRklMRSkKKworIyBnZW5lcmF0ZSBhIGJpbmFyeSBkaXN0cmlidXRpb24KK3RhcmJpbjoK KwljZCAvICYmIHRhciB6Y3ZmIH4vcWVtdS0kKFZFUlNJT04pLSQoQVJDSCkudGFyLmd6IFwKKwkk KGJpbmRpcikvcWVtdSBcCisJJChiaW5kaXIpL3FlbXUtc3lzdGVtLXg4Nl82NCBcCisJJChiaW5k aXIpL3FlbXUtc3lzdGVtLWFybSBcCisJJChiaW5kaXIpL3FlbXUtc3lzdGVtLWNyaXMgXAorCSQo YmluZGlyKS9xZW11LXN5c3RlbS1tNjhrIFwKKwkkKGJpbmRpcikvcWVtdS1zeXN0ZW0tbWlwcyBc CisJJChiaW5kaXIpL3FlbXUtc3lzdGVtLW1pcHNlbCBcCisJJChiaW5kaXIpL3FlbXUtc3lzdGVt LW1pcHM2NCBcCisJJChiaW5kaXIpL3FlbXUtc3lzdGVtLW1pcHM2NGVsIFwKKwkkKGJpbmRpcikv cWVtdS1zeXN0ZW0tcHBjIFwKKwkkKGJpbmRpcikvcWVtdS1zeXN0ZW0tcHBjZW1iIFwKKwkkKGJp bmRpcikvcWVtdS1zeXN0ZW0tcHBjNjQgXAorCSQoYmluZGlyKS9xZW11LXN5c3RlbS1zaDQgXAor CSQoYmluZGlyKS9xZW11LXN5c3RlbS1zaDRlYiBcCisJJChiaW5kaXIpL3FlbXUtc3lzdGVtLXNw YXJjIFwKKwkkKGJpbmRpcikvcWVtdS1pMzg2IFwKKwkkKGJpbmRpcikvcWVtdS14ODZfNjQgXAor CSQoYmluZGlyKS9xZW11LWFscGhhIFwKKwkkKGJpbmRpcikvcWVtdS1hcm0gXAorCSQoYmluZGly KS9xZW11LWFybWViIFwKKwkkKGJpbmRpcikvcWVtdS1jcmlzIFwKKwkkKGJpbmRpcikvcWVtdS1t NjhrIFwKKwkkKGJpbmRpcikvcWVtdS1taXBzIFwKKwkkKGJpbmRpcikvcWVtdS1taXBzZWwgXAor CSQoYmluZGlyKS9xZW11LXBwYyBcCisJJChiaW5kaXIpL3FlbXUtcHBjNjQgXAorCSQoYmluZGly KS9xZW11LXBwYzY0YWJpMzIgXAorCSQoYmluZGlyKS9xZW11LXNoNCBcCisJJChiaW5kaXIpL3Fl bXUtc2g0ZWIgXAorCSQoYmluZGlyKS9xZW11LXNwYXJjIFwKKwkkKGJpbmRpcikvcWVtdS1zcGFy YzY0IFwKKwkkKGJpbmRpcikvcWVtdS1zcGFyYzMycGx1cyBcCisJJChiaW5kaXIpL3FlbXUtaW1n IFwKKwkkKGJpbmRpcikvcWVtdS1uYmQgXAorCSQoZGF0YWRpcikvYmlvcy5iaW4gXAorCSQoZGF0 YWRpcikvdmdhYmlvcy5iaW4gXAorCSQoZGF0YWRpcikvdmdhYmlvcy1jaXJydXMuYmluIFwKKwkk KGRhdGFkaXIpL3BwY19yb20uYmluIFwKKwkkKGRhdGFkaXIpL3ZpZGVvLnggXAorCSQoZGF0YWRp cikvb3BlbmJpb3Mtc3BhcmMzMiBcCisJJChkYXRhZGlyKS9vcGVuYmlvcy1zcGFyYzY0IFwKKwkk KGRhdGFkaXIpL29wZW5iaW9zLXBwYyBcCisJJChkYXRhZGlyKS9weGUtbmUya19wY2kuYmluIFwK KwkkKGRhdGFkaXIpL3B4ZS1ydGw4MTM5LmJpbiBcCisJJChkYXRhZGlyKS9weGUtcGNuZXQuYmlu IFwKKwkkKGRhdGFkaXIpL3B4ZS1lMTAwMC5iaW4gXAorCSQoZG9jZGlyKS9xZW11LWRvYy5odG1s IFwKKwkkKGRvY2RpcikvcWVtdS10ZWNoLmh0bWwgXAorCSQobWFuZGlyKS9tYW4xL3FlbXUuMSBc CisJJChtYW5kaXIpL21hbjEvcWVtdS1pbWcuMSBcCisJJChtYW5kaXIpL21hbjgvcWVtdS1uYmQu OAorCisjIEluY2x1ZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZGVwZW5kZW5jeSBmaWxlcwor LWluY2x1ZGUgJCh3aWxkY2FyZCAuKi5kIGF1ZGlvLy4qLmQgc2xpcnAvLiouZCkKZGlmZiAtLWV4 Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9taXNj LmMgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vbWlzYy5jCi0tLSB4ZW4tNC4xLjIt YS90b29scy9pb2VtdS1xZW11LXhlbi9taXNjLmMJMTk3MC0wMS0wMSAwNzowMDowMC4wMDAwMDAw MDAgKzA3MDAKKysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL21pc2MuYwkyMDEy LTEyLTI4IDE2OjAyOjQxLjAxMjkzNzg0NiArMDgwMApAQCAtMCwwICsxLDQzMiBAQAorI2luY2x1 ZGUgIm1pc2MuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImdydWJfZXJyLmgiCisKKworaW50CitncnViX2lz c3BhY2UgKGludCBjKQoreworICByZXR1cm4gKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9 PSAnICcgfHwgYyA9PSAnXHQnKTsKK30KKworaW50CitncnViX3RvbG93ZXIgKGludCBjKQorewor ICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCisgICAgcmV0dXJuIGMgLSAnQScgKyAnYSc7CisK KyAgcmV0dXJuIGM7Cit9CisKKworY2hhciAqCitncnViX3N0cmNociAoY29uc3QgY2hhciAqcywg aW50IGMpCit7CisgIGRvCisgICAgeworICAgICAgaWYgKCpzID09IGMpCisJcmV0dXJuIChjaGFy ICopIHM7CisgICAgfQorICB3aGlsZSAoKnMrKyk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworZ3J1 Yl9zaXplX3QKK2dydWJfc3RybGVuIChjb25zdCBjaGFyICpzKQoreworICBjb25zdCBjaGFyICpw ID0gczsKKworICB3aGlsZSAoKnApCisgICAgcCsrOworCisgIHJldHVybiBwIC0gczsKK30KKwor CisKKworCitjaGFyICoKK2dydWJfc3RybmNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3Jj LCBpbnQgYykKK3sKKyAgY2hhciAqcCA9IGRlc3Q7CisKKyAgd2hpbGUgKCgqcCsrID0gKnNyYysr KSAhPSAnXDAnICYmIC0tYykKKyAgICA7CisKKyAgcmV0dXJuIGRlc3Q7Cit9CisKK2NoYXIgKgor Z3J1Yl9zdHJkdXAgKGNvbnN0IGNoYXIgKnMpCit7CisgIGdydWJfc2l6ZV90IGxlbjsKKyAgY2hh ciAqcDsKKworICBsZW4gPSBncnViX3N0cmxlbiAocykgKyAxOworICBwID0gKGNoYXIgKikgbWFs bG9jIChsZW4pOworICBpZiAoISBwKQorICAgIHJldHVybiAwOworCisgIHJldHVybiBtZW1jcHkg KHAsIHMsIGxlbik7Cit9CisKKworCitjaGFyICoKK2dydWJfc3RybmR1cCAoY29uc3QgY2hhciAq cywgZ3J1Yl9zaXplX3QgbikKK3sKKyAgZ3J1Yl9zaXplX3QgbGVuOworICBjaGFyICpwOworCisg IGxlbiA9IGdydWJfc3RybGVuIChzKTsKKyAgaWYgKGxlbiA+IG4pCisgICAgbGVuID0gbjsKKyAg cCA9IChjaGFyICopIG1hbGxvYyAobGVuICsgMSk7CisgIGlmICghIHApCisgICAgcmV0dXJuIDA7 CisKKyAgbWVtY3B5IChwLCBzLCBsZW4pOworICBwW2xlbl0gPSAnXDAnOworICByZXR1cm4gcDsK K30KKworCisKKworaW50CitncnViX3N0cmNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIg KnMyKQoreworICB3aGlsZSAoKnMxICYmICpzMikKKyAgICB7CisgICAgICBpZiAoKnMxICE9ICpz MikKKwlicmVhazsKKworICAgICAgczErKzsKKyAgICAgIHMyKys7CisgICAgfQorCisgIHJldHVy biAoaW50KSAqczEgLSAoaW50KSAqczI7Cit9CisKK2ludAorZ3J1Yl9zdHJuY21wIChjb25zdCBj aGFyICpzMSwgY29uc3QgY2hhciAqczIsIGdydWJfc2l6ZV90IG4pCit7CisgIGlmIChuID09IDAp CisgICAgcmV0dXJuIDA7CisKKyAgd2hpbGUgKCpzMSAmJiAqczIgJiYgLS1uKQorICAgIHsKKyAg ICAgIGlmICgqczEgIT0gKnMyKQorCWJyZWFrOworCisgICAgICBzMSsrOworICAgICAgczIrKzsK KyAgICB9CisKKyAgcmV0dXJuIChpbnQpICpzMSAtIChpbnQpICpzMjsKK30KKworCitpbnQKK2dy dWJfc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworICB3aGls ZSAoKnMxICYmICpzMikKKyAgICB7CisgICAgICBpZiAoZ3J1Yl90b2xvd2VyICgqczEpICE9IGdy dWJfdG9sb3dlciAoKnMyKSkKKwlicmVhazsKKworICAgICAgczErKzsKKyAgICAgIHMyKys7Cisg ICAgfQorCisgIHJldHVybiAoaW50KSBncnViX3RvbG93ZXIgKCpzMSkgLSAoaW50KSBncnViX3Rv bG93ZXIgKCpzMik7Cit9CisKKworaW50CitncnViX3N0cm5jYXNlY21wIChjb25zdCBjaGFyICpz MSwgY29uc3QgY2hhciAqczIsIGdydWJfc2l6ZV90IG4pCit7CisgIGlmIChuID09IDApCisgICAg cmV0dXJuIDA7CisKKyAgd2hpbGUgKCpzMSAmJiAqczIgJiYgLS1uKQorICAgIHsKKyAgICAgIGlm IChncnViX3RvbG93ZXIgKCpzMSkgIT0gZ3J1Yl90b2xvd2VyICgqczIpKQorCWJyZWFrOworCisg ICAgICBzMSsrOworICAgICAgczIrKzsKKyAgICB9CisKKyAgcmV0dXJuIChpbnQpIGdydWJfdG9s b3dlciAoKnMxKSAtIChpbnQpIGdydWJfdG9sb3dlciAoKnMyKTsKK30KKwordm9pZCAqCitncnVi X21lbW1vdmUgKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgZ3J1Yl9zaXplX3QgbikKK3sK KyAgY2hhciAqZCA9IChjaGFyICopIGRlc3Q7CisgIGNvbnN0IGNoYXIgKnMgPSAoY29uc3QgY2hh ciAqKSBzcmM7CisKKyAgaWYgKGQgPCBzKQorICAgIHdoaWxlIChuLS0pCisgICAgICAqZCsrID0g KnMrKzsKKyAgZWxzZQorICAgIHsKKyAgICAgIGQgKz0gbjsKKyAgICAgIHMgKz0gbjsKKworICAg ICAgd2hpbGUgKG4tLSkKKwkqLS1kID0gKi0tczsKKyAgICB9CisKKyAgcmV0dXJuIGRlc3Q7Cit9 CisKKwordm9pZCAqCitncnViX21hbGxvYyAoZ3J1Yl9zaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAq cmV0OworICByZXQgPSBtYWxsb2MgKHNpemUpOworICBpZiAoIXJldCkKKyAgICBncnViX2Vycm9y IChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAib3V0IG9mIG1lbW9yeSIpOworICByZXR1cm4gcmV0 OworfQorCisKKwordm9pZAorZ3J1Yl9mcmVlICh2b2lkICpwdHIpCit7CisgIGZyZWUgKHB0cik7 Cit9CisKKwordm9pZCAqCitncnViX21lbXNldCAodm9pZCAqcywgaW50IGMsIGdydWJfc2l6ZV90 IG4pCit7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBzOworCisgIHdo aWxlIChuLS0pCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSBjOworCisgIHJldHVybiBzOwor fQorCitpbnQKK2dydWJfbWVtY21wIChjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIGdy dWJfc2l6ZV90IG4pCit7CisgIGNvbnN0IGNoYXIgKnQxID0gczE7CisgIGNvbnN0IGNoYXIgKnQy ID0gczI7CisKKyAgd2hpbGUgKG4tLSkKKyAgICB7CisgICAgICBpZiAoKnQxICE9ICp0MikKKwly ZXR1cm4gKGludCkgKnQxIC0gKGludCkgKnQyOworCisgICAgICB0MSsrOworICAgICAgdDIrKzsK KyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKwordm9pZCAqCitncnViX3phbGxvYyAoZ3J1Yl9z aXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcmV0OworCisgIHJldCA9IGdydWJfbWFsbG9jIChzaXpl KTsKKyAgaWYgKCFyZXQpCisgICAgcmV0dXJuIE5VTEw7CisgIG1lbXNldCAocmV0LCAwLCBzaXpl KTsKKyAgcmV0dXJuIHJldDsKK30KKworLyogRGl2aWRlIE4gYnkgRCwgcmV0dXJuIHRoZSBxdW90 aWVudCwgYW5kIHN0b3JlIHRoZSByZW1haW5kZXIgaW4gKlIuICAqLworZ3J1Yl91aW50NjRfdAor Z3J1Yl9kaXZtb2Q2NCAoZ3J1Yl91aW50NjRfdCBuLCBncnViX3VpbnQzMl90IGQsIGdydWJfdWlu dDMyX3QgKnIpCit7CisgIC8qIFRoaXMgYWxnb3JpdGhtIGlzIHR5cGljYWxseSBpbXBsZW1lbnRl ZCBieSBoYXJkd2FyZS4gVGhlIGlkZWEKKyAgICAgaXMgdG8gZ2V0IHRoZSBoaWdoZXN0IGJpdCBp biBOLCA2NCB0aW1lcywgYnkga2VlcGluZworICAgICB1cHBlcihOICogMl5pKSA9IHVwcGVyKChR ICogMTAgKyBNKSAqIDJeaSksIHdoZXJlIHVwcGVyCisgICAgIHJlcHJlc2VudHMgdGhlIGhpZ2gg NjQgYml0cyBpbiAxMjgtYml0cyBzcGFjZS4gICovCisgIHVuc2lnbmVkIGJpdHMgPSA2NDsKKyAg dW5zaWduZWQgbG9uZyBsb25nIHEgPSAwOworICB1bnNpZ25lZCBtID0gMDsKKworICAvKiBTa2lw IHRoZSBzbG93IGNvbXB1dGF0aW9uIGlmIDMyLWJpdCBhcml0aG1ldGljIGlzIHBvc3NpYmxlLiAg Ki8KKyAgaWYgKG4gPCAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgIGlmIChyKQorCSpyID0gKChn cnViX3VpbnQzMl90KSBuKSAlIGQ7CisKKyAgICAgIHJldHVybiAoKGdydWJfdWludDMyX3QpIG4p IC8gZDsKKyAgICB9CisKKyAgd2hpbGUgKGJpdHMtLSkKKyAgICB7CisgICAgICBtIDw8PSAxOwor CisgICAgICBpZiAobiAmICgxVUxMIDw8IDYzKSkKKwltIHw9IDE7CisKKyAgICAgIHEgPDw9IDE7 CisgICAgICBuIDw8PSAxOworCisgICAgICBpZiAobSA+PSBkKQorCXsKKwkgIHEgfD0gMTsKKwkg IG0gLT0gZDsKKwl9CisgICAgfQorCisgIGlmIChyKQorICAgICpyID0gbTsKKworICByZXR1cm4g cTsKK30KKworCisKKy8qIENvbnZlcnQgVVRGLTE2IHRvIFVURi04LiAgKi8KK2dydWJfdWludDhf dCAqCitncnViX3V0ZjE2X3RvX3V0ZjggKGdydWJfdWludDhfdCAqZGVzdCwgZ3J1Yl91aW50MTZf dCAqc3JjLAorICAgICAgICAgICAgICAgICAgICBncnViX3NpemVfdCBzaXplKQoreworICBncnVi X3VpbnQzMl90IGNvZGVfaGlnaCA9IDA7CisKKyAgd2hpbGUgKHNpemUtLSkKKyAgICB7CisgICAg ICBncnViX3VpbnQzMl90IGNvZGUgPSAqc3JjKys7CisKKyAgICAgIGlmIChjb2RlX2hpZ2gpCisg ICAgICAgIHsKKyAgICAgICAgICBpZiAoY29kZSA+PSAweERDMDAgJiYgY29kZSA8PSAweERGRkYp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBwYWlyLiAgKi8KKyAg ICAgICAgICAgICAgY29kZSA9ICgoY29kZV9oaWdoIC0gMHhEODAwKSA8PCAxMikgKyAoY29kZSAt IDB4REMwMCkgKyAweDEwMDAwOworCisgICAgICAgICAgICAgICpkZXN0KysgPSAoY29kZSA+PiAx OCkgfCAweEYwOworICAgICAgICAgICAgICAqZGVzdCsrID0gKChjb2RlID4+IDEyKSAmIDB4M0Yp IHwgMHg4MDsKKyAgICAgICAgICAgICAgKmRlc3QrKyA9ICgoY29kZSA+PiA2KSAmIDB4M0YpIHwg MHg4MDsKKyAgICAgICAgICAgICAgKmRlc3QrKyA9IChjb2RlICYgMHgzRikgfCAweDgwOworICAg ICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg LyogRXJyb3IuLi4gICovCisgICAgICAgICAgICAgICpkZXN0KysgPSAnPyc7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICBjb2RlX2hpZ2ggPSAwOworICAgICAgICB9CisgICAgICBlbHNlCisg ICAgICAgIHsKKyAgICAgICAgICBpZiAoY29kZSA8PSAweDAwN0YpCisgICAgICAgICAgICAqZGVz dCsrID0gY29kZTsKKyAgICAgICAgICBlbHNlIGlmIChjb2RlIDw9IDB4MDdGRikKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgKmRlc3QrKyA9IChjb2RlID4+IDYpIHwgMHhDMDsKKyAgICAg ICAgICAgICAgKmRlc3QrKyA9IChjb2RlICYgMHgzRikgfCAweDgwOworICAgICAgICAgICAgfQor ICAgICAgICAgIGVsc2UgaWYgKGNvZGUgPj0gMHhEODAwICYmIGNvZGUgPD0gMHhEQkZGKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBjb2RlX2hpZ2ggPSBjb2RlOworICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjb2RlID49IDB4 REMwMCAmJiBjb2RlIDw9IDB4REZGRikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyog RXJyb3IuLi4gKi8KKyAgICAgICAgICAgICAgKmRlc3QrKyA9ICc/JzsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpkZXN0KysgPSAo Y29kZSA+PiAxMikgfCAweEUwOworICAgICAgICAgICAgICAqZGVzdCsrID0gKChjb2RlID4+IDYp ICYgMHgzRikgfCAweDgwOworICAgICAgICAgICAgICAqZGVzdCsrID0gKGNvZGUgJiAweDNGKSB8 IDB4ODA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIGRlc3Q7 Cit9CisKKworCisKKworCitzdGF0aWMgdm9pZCBwcmludF9ieXRlKGNoYXIgKnAsIGludCBsZW4p Cit7CisgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqc3RhcnQgcHJpbnQgJXMqKioqKioqKioq KioqKioqKioqKlxuIiwgcCk7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwYiA9ICh1bnNp Z25lZCBjaGFyKilwOworICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICBw cmludGYoIjB4JTAyeCwiLCBwYltpXSk7CisgICAgfQorICBwcmludGYoIlxuKioqKioqKioqKioq KioqKioqKioqKmVuZCoqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKK30KKworCisKKyNp bmNsdWRlICAgPGljb252Lmg+IAorI2RlZmluZSAgIE9VVExFTiAgIDI1NiAKKworCisvL7T6wuvX qru7OrTT0rvW1rHgwuvXqs6qwe3Su9bWseDC6yAKK3N0YXRpYyBpbnQgICBjb2RlX2NvbnZlcnQo Y29uc3QgY2hhciAgICpmcm9tX2NoYXJzZXQsIGNvbnN0IGNoYXIgICAqdG9fY2hhcnNldCwgCisJ CSAgICBjaGFyICAgKmluYnVmLCBzaXplX3QgICBpbmxlbiwKKwkJICAgY2hhciAgICpvdXRidWYs IHNpemVfdCAgIG91dGxlbikgCit7IAorICBpY29udl90ICAgY2Q7IAorICBpbnQgICByYzsgCisg IGNoYXIgICAqKnBpbiAgID0gICAmaW5idWY7IAorICBjaGFyICAgKipwb3V0ICAgPSAgICZvdXRi dWY7IAorCisgIC8vcHJpbnRmKCJzaXplb2YoaW50KT0lZCwgc2l6ZW9mKHNpemVfdCk9JWRcbiIs IHNpemVvZihpbnQpLCBzaXplb2Yoc2l6ZV90KSk7CisgIGNkICAgPSAgIGljb252X29wZW4odG9f Y2hhcnNldCwgZnJvbV9jaGFyc2V0KTsgCisgIGlmICAgKGNkPT0wKSAgIHJldHVybiAgIC0xOyAK KyAgbWVtc2V0KG91dGJ1ZiwgMCwgb3V0bGVuKTsgCisgIGlmICAgKGljb252KGNkLCBwaW4sICZp bmxlbiwgcG91dCwgJm91dGxlbik9PS0xKSAgIHJldHVybiAgIC0xOyAKKyAgaWNvbnZfY2xvc2Uo Y2QpOyAKKyAgcmV0dXJuICAgMDsgCit9IAorLy9VTklDT0RFwuvXqs6qR0IyMzEywusgCitpbnQg ICB1MmcoY2hhciAgICppbmJ1Ziwgc2l6ZV90ICAgaW5sZW4sIGNoYXIgICAqb3V0YnVmLCBzaXpl X3QgIG91dGxlbikgCit7CisgIHJldHVybiAgIGNvZGVfY29udmVydCgidXRmLTgiLCAiZ2IyMzEy IiwgaW5idWYsIGlubGVuLCBvdXRidWYsIG91dGxlbik7IAorfSAKKy8vR0IyMzEywuvXqs6qVU5J Q09ERcLrIAoraW50ICAgZzJ1KGNoYXIgICAqaW5idWYsIHNpemVfdCAgIGlubGVuLCBjaGFyICAg Km91dGJ1Ziwgc2l6ZV90ICAgb3V0bGVuKSAKK3sgCisgIHJldHVybiAgIGNvZGVfY29udmVydCgi Z2IyMzEyIiwgInV0Zi04IiwgaW5idWYsIGlubGVuLCBvdXRidWYsIG91dGxlbik7IAorfSAKKwor CisKK3ZvaWQgdGVzdCh2b2lkKSAKK3sKKyAgLy/X1rf7seDC69equ7s977u/5T/nrD8/Pz+9rD8/ CisgIGNoYXIgICBpbl91dGY4W10gICA9ICAgezB4ZTUsMHhhZCwweDk3LDB4ZTcsMHhhYywweGE2 LDB4ZTcsMHhiYywweDk2LDB4ZTcsMHhhMCwweDgxLDB4ZTgsMHhiZCwweGFjLDB4ZTYsMHg4ZCww eGEyfTsgCisgIGNoYXIgICAqaW5fZ2IyMzEyICAgPSAoY2hhciopICAi19a3+7HgwuvXqru7Ijsg CisgIGNoYXIgICBvdXRbT1VUTEVOXTsgCisgIGludCByYzsKKyAgLy91dGY4wuvXqs6qZ2IyMzEy wusgCisgIHJjICAgPSAgIHUyZyhpbl91dGY4LCBzdHJsZW4oaW5fdXRmOCksIG91dCwgT1VUTEVO KTsgCisgIHByaW50ZigidXRmOC0tPmdiMjMxMiAgIG91dD0lc1xuIiwgb3V0KTsKKyAgcHJpbnRf Ynl0ZShvdXQsIHN0cmxlbihvdXQpKTsKKyAgLy9nYjIzMTLC69eqzqp1dGY4wusgCisgIHJjICAg PSAgIGcydShpbl9nYjIzMTIsIHN0cmxlbihpbl9nYjIzMTIpLCBvdXQsIE9VVExFTik7IAorICBw cmludF9ieXRlKG91dCwgc3RybGVuKG91dCkpOworICBwcmludGYoImdiMjMxMi0tPnV0ZjggICBv dXQ9JXNcbiIsb3V0KTsgCit9IAorCisKKwpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhl bi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL21pc2MuaCB4ZW4tNC4xLjItYi90b29scy9p b2VtdS1xZW11LXhlbi9taXNjLmgKLS0tIHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVu L21pc2MuaAkxOTcwLTAxLTAxIDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAorKysgeGVuLTQuMS4y LWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vbWlzYy5oCTIwMTItMTItMjggMTY6MDI6NDEuMDEyOTM3 ODQ2ICswODAwCkBAIC0wLDAgKzEsODkgQEAKKyNpbmNsdWRlICJmcy10eXBlcy5oIgorI2luY2x1 ZGUgPHN0ZGRlZi5oPgorCisKKworCisKKyNkZWZpbmUgZ3J1Yl9tZW1jcHkoZCxzLG4pZ3J1Yl9t ZW1tb3ZlICgoZCksIChzKSwgKG4pKQorCisKK2ludAorZ3J1Yl9pc3NwYWNlIChpbnQgYyk7CisK K2ludAorZ3J1Yl90b2xvd2VyIChpbnQgYyk7CisKKworY2hhciAqCitncnViX3N0cmNociAoY29u c3QgY2hhciAqcywgaW50IGMpOworCisKK2dydWJfc2l6ZV90CitncnViX3N0cmxlbiAoY29uc3Qg Y2hhciAqcyk7CisKKworCitjaGFyICoKK2dydWJfc3RyZHVwIChjb25zdCBjaGFyICpzKTsKKwor CisKK2NoYXIgKgorZ3J1Yl9zdHJuZHVwIChjb25zdCBjaGFyICpzLCBncnViX3NpemVfdCBuKTsK KworCitjaGFyICoKK2dydWJfc3RybmNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBp bnQgYyk7CisKKworaW50CitncnViX3N0cmNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIg KnMyKTsKKworaW50CitncnViX3N0cm5jbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpz MiwgZ3J1Yl9zaXplX3Qgbik7CisKK2ludAorZ3J1Yl9zdHJjYXNlY21wIChjb25zdCBjaGFyICpz MSwgY29uc3QgY2hhciAqczIpOworCitpbnQKK2dydWJfc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIg KnMxLCBjb25zdCBjaGFyICpzMiwgZ3J1Yl9zaXplX3Qgbik7CisKK3ZvaWQgKgorZ3J1Yl9tZW1t b3ZlICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIGdydWJfc2l6ZV90IG4pOworCitpbnQK K2dydWJfbWVtY21wIChjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIGdydWJfc2l6ZV90 IG4pOworCit2b2lkICoKK2dydWJfbWFsbG9jIChncnViX3NpemVfdCBzaXplKTsKKwordm9pZCAq CitncnViX21lbXNldCAodm9pZCAqcywgaW50IGMsIGdydWJfc2l6ZV90IG4pOworCit2b2lkCitn cnViX2ZyZWUgKHZvaWQgKnB0cik7CisKK3ZvaWQgKgorZ3J1Yl96YWxsb2MgKGdydWJfc2l6ZV90 IHNpemUpOworCitncnViX3VpbnQ2NF90CitncnViX2Rpdm1vZDY0IChncnViX3VpbnQ2NF90IG4s IGdydWJfdWludDMyX3QgZCwgZ3J1Yl91aW50MzJfdCAqcik7CisKKy8qIENvbnZlcnQgVVRGLTE2 IHRvIFVURi04LiAgKi8KK2dydWJfdWludDhfdCAqCitncnViX3V0ZjE2X3RvX3V0ZjggKGdydWJf dWludDhfdCAqZGVzdCwgZ3J1Yl91aW50MTZfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICBn cnViX3NpemVfdCBzaXplKTsKKworCisvL1VOSUNPREXC69eqzqpHQjIzMTLC6yAKK2ludCAgIHUy ZyhjaGFyICAgKmluYnVmLCBzaXplX3QgICBpbmxlbiwgY2hhciAgICpvdXRidWYsIHNpemVfdCAg IG91dGxlbik7CisvL0dCMjMxMsLr16rOqlVOSUNPREXC6yAKK2ludCAgIGcydShjaGFyICAgKmlu YnVmLCBzaXplX3QgICBpbmxlbiwgY2hhciAgICpvdXRidWYsIHNpemVfdCAgIG91dGxlbik7CisK KworCit2b2lkIHRlc3Qodm9pZCk7CisKKworCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTgg eGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vbnRmcy5jIHhlbi00LjEuMi1iL3Rvb2xz L2lvZW11LXFlbXUteGVuL250ZnMuYwotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14 ZW4vbnRmcy5jCTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4x LjItYi90b29scy9pb2VtdS1xZW11LXhlbi9udGZzLmMJMjAxMi0xMi0yOCAxNjowMjo0MS4wMTM5 MzcwMzggKzA4MDAKQEAgLTAsMCArMSwxMTg4IEBACisvKiBudGZzLmMgLSBOVEZTIGZpbGVzeXN0 ZW0gKi8KKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENv cHlyaWdodCAoQykgMjAwNywyMDA4LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICog IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworCisj aW5jbHVkZSAibWlzYy5oIgorI2luY2x1ZGUgImZzaGVscC5oIgorI2luY2x1ZGUgIm50ZnMuaCIK KyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImdydWJfZXJyLmgiCisjaW5jbHVkZSAiZXJy LmgiCisKKyNkZWZpbmUgR1JVQl9ESVNLX1NFQ1RPUl9TSVpFIDB4MjAwCitudGZzY29tcF9mdW5j X3QgZ3J1Yl9udGZzY29tcF9mdW5jOworCisvL2ltcG9ydGFudAorLy9sY24gaXMgcmVsYXRpdmUg dG8gc3RhcnQgc2VjdG9yIG9mIHRoZSB2b2x1bWUKK3N0YXRpYyBncnViX29mZl90IHNfcGFydF9v ZmZfc2VjdG9yOworc3RhdGljIGdydWJfdWludDMyX3Qgc19icGJfYnl0ZXNfcGVyX3NlY3RvcjsK K2ludCBiZHJ2X3ByZWFkX2Zyb21fbGNuX29mX3ZvbHVtKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBp bnQ2NF90IG9mZnNldCwKKwkJCQkgdm9pZCAqYnVmMSwgaW50IGNvdW50MSkKK3sKKyAgcmV0dXJu IGJkcnZfcHJlYWQoYnMsIHNfcGFydF9vZmZfc2VjdG9yICogc19icGJfYnl0ZXNfcGVyX3NlY3Rv ciArIG9mZnNldCwKKwkJIGJ1ZjEsIGNvdW50MSk7Cit9CisKKworc3RhdGljIGdydWJfZXJyX3QK K2ZpeHVwIChzdHJ1Y3QgZ3J1Yl9udGZzX2RhdGEgKmRhdGEsIGNoYXIgKmJ1ZiwgaW50IGxlbiwg Y2hhciAqbWFnaWMpCit7CisgIGludCBzczsKKyAgY2hhciAqcHU7CisgIGdydWJfdWludDE2X3Qg dXM7CisgIAorICBEQkcoIiV4LSV4LSV4LSV4IiwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVm WzNdKTsKKyAgaWYgKGdydWJfbWVtY21wIChidWYsIG1hZ2ljLCA0KSkKKyAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAiJXMgbGFiZWwgbm90IGZvdW5kIiwgbWFnaWMpOwor CisgIHNzID0gdTE2YXQgKGJ1ZiwgNikgLSAxOworICBpZiAoc3MgKiAoaW50KSBkYXRhLT5ibG9j a3NpemUgIT0gbGVuICogR1JVQl9ESVNLX1NFQ1RPUl9TSVpFKQorICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRlMsICJzaXplIG5vdCBtYXRjaCIsCisJCSAgICAgICBzcyAqIChp bnQpIGRhdGEtPmJsb2Nrc2l6ZSwKKwkJICAgICAgIGxlbiAqIEdSVUJfRElTS19TRUNUT1JfU0la RSk7CisgIHB1ID0gYnVmICsgdTE2YXQgKGJ1ZiwgNCk7CisgIHVzID0gdTE2YXQgKHB1LCAwKTsK KyAgYnVmIC09IDI7CisgIHdoaWxlIChzcyA+IDApCisgICAgeworICAgICAgYnVmICs9IGRhdGEt PmJsb2Nrc2l6ZTsKKyAgICAgIHB1ICs9IDI7CisgICAgICBpZiAodTE2YXQgKGJ1ZiwgMCkgIT0g dXMpCisJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgImZpeHVwIHNpZ25hdHVy ZSBub3QgbWF0Y2giKTsKKyAgICAgIHYxNmF0IChidWYsIDApID0gdjE2YXQgKHB1LCAwKTsKKyAg ICAgIHNzLS07CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdCBy ZWFkX21mdCAoc3RydWN0IGdydWJfbnRmc19kYXRhICpkYXRhLCBjaGFyICpidWYsCisJCQkgICAg Z3J1Yl91aW50MzJfdCBtZnRubyk7CitzdGF0aWMgZ3J1Yl9lcnJfdCByZWFkX2F0dHIgKHN0cnVj dCBncnViX250ZnNfYXR0ciAqYXQsIGNoYXIgKmRlc3QsCisJCQkgICAgIGdydWJfZGlza19hZGRy X3Qgb2ZzLCBncnViX3NpemVfdCBsZW4sCisJCQkgICAgIGludCBjYWNoZWQsCisJCQkgICAgIHZv aWQgKCpyZWFkX2hvb2spIChncnViX2Rpc2tfYWRkcl90IHNlY3RvciwKKwkJCQkJCXVuc2lnbmVk IG9mZnNldCwKKwkJCQkJCXVuc2lnbmVkIGxlbmd0aCwKKwkJCQkJCXZvaWQgKmNsb3N1cmUpLAor CQkJICAgICB2b2lkICpjbG9zdXJlKTsKKworc3RhdGljIGdydWJfZXJyX3QgcmVhZF9kYXRhIChz dHJ1Y3QgZ3J1Yl9udGZzX2F0dHIgKmF0LCBjaGFyICpwYSwgY2hhciAqZGVzdCwKKwkJCSAgICAg Z3J1Yl9kaXNrX2FkZHJfdCBvZnMsIGdydWJfc2l6ZV90IGxlbiwKKwkJCSAgICAgaW50IGNhY2hl ZCwKKwkJCSAgICAgdm9pZCAoKnJlYWRfaG9vaykgKGdydWJfZGlza19hZGRyX3Qgc2VjdG9yLAor CQkJCQkJdW5zaWduZWQgb2Zmc2V0LAorCQkJCQkJdW5zaWduZWQgbGVuZ3RoLAorCQkJCQkJdm9p ZCAqY2xvc3VyZSksCisJCQkgICAgIHZvaWQgKmNsb3N1cmUpOworCitzdGF0aWMgdm9pZAoraW5p dF9hdHRyIChzdHJ1Y3QgZ3J1Yl9udGZzX2F0dHIgKmF0LCBzdHJ1Y3QgZ3J1Yl9udGZzX2ZpbGUg Km1mdCkKK3sKKyAgYXQtPm1mdCA9IG1mdDsKKyAgYXQtPmZsYWdzID0gKG1mdCA9PSAmbWZ0LT5k YXRhLT5tbWZ0KSA/IEFGX01NRlQgOiAwOworICBhdC0+YXR0cl9ueHQgPSBtZnQtPmJ1ZiArIHUx NmF0IChtZnQtPmJ1ZiwgMHgxNCk7CisgIGF0LT5hdHRyX2VuZCA9IGF0LT5lbWZ0X2J1ZiA9IGF0 LT5lZGF0X2J1ZiA9IGF0LT5zYnVmID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfYXR0 ciAoc3RydWN0IGdydWJfbnRmc19hdHRyICphdCkKK3sKKyAgZ3J1Yl9mcmVlIChhdC0+ZW1mdF9i dWYpOworICBncnViX2ZyZWUgKGF0LT5lZGF0X2J1Zik7CisgIGdydWJfZnJlZSAoYXQtPnNidWYp OworfQorCitzdGF0aWMgY2hhciAqCitmaW5kX2F0dHIgKHN0cnVjdCBncnViX250ZnNfYXR0ciAq YXQsIHVuc2lnbmVkIGNoYXIgYXR0cikKK3sKKyAgZ3J1Yl9vZmZfdCBvZmZfYnl0ZXMxOworICBn cnViX29mZl90IG9mZl9ieXRlczI7CisgCisgIGlmIChhdC0+ZmxhZ3MgJiBBRl9BTFNUKQorICAg IHsKKyAgICAgIERCRygiISEhISEhXG5pbiBhIGF0dHIgbGlzdD09PT09PSIpOworICAgIHJldHJ5 OgorICAgICAgd2hpbGUgKGF0LT5hdHRyX254dCA8IGF0LT5hdHRyX2VuZCkKKwl7CisJICBhdC0+ YXR0cl9jdXIgPSBhdC0+YXR0cl9ueHQ7CisJICBhdC0+YXR0cl9ueHQgKz0gdTE2YXQgKGF0LT5h dHRyX2N1ciwgNCk7CisJICBpZiAoKCh1bnNpZ25lZCBjaGFyKSAqYXQtPmF0dHJfY3VyID09IGF0 dHIpIHx8IChhdHRyID09IDApKQorCSAgICB7CisJICAgICAgY2hhciAqbmV3X3BvczsKKworCSAg ICAgIGlmIChhdC0+ZmxhZ3MgJiBBRl9NTUZUKQorCQl7CisJCSAgREJHKCJpbiBBRl9NTUZULi4u Li4uIik7CisJCSAgb2ZmX2J5dGVzMSA9IChncnViX29mZl90KSh2MzJhdCAoYXQtPmF0dHJfY3Vy LCAweDEwKSkgPDwgQkxLX1NIUjsKKwkJICBvZmZfYnl0ZXMyID0gKGdydWJfb2ZmX3QpKHYzMmF0 IChhdC0+YXR0cl9jdXIsIDB4MTQpKSA8PCBCTEtfU0hSOworCQkgIGlmICgoYmRydl9wcmVhZAor CQkgICAgICAgKGF0LT5tZnQtPmRhdGEtPmJzLCBvZmZfYnl0ZXMxLAorCQkJYXQtPmVtZnRfYnVm LCA1MTIpKQorCQkgICAgICB8fAorCQkgICAgICAoYmRydl9wcmVhZAorCQkgICAgICAgKGF0LT5t ZnQtPmRhdGEtPmJzLCBvZmZfYnl0ZXMyLAorCQkJYXQtPmVtZnRfYnVmICsgNTEyLCA1MTIpKSkK KwkJICAgIHJldHVybiBOVUxMOworCisJCSAgaWYgKGZpeHVwCisJCSAgICAgIChhdC0+bWZ0LT5k YXRhLCBhdC0+ZW1mdF9idWYsIGF0LT5tZnQtPmRhdGEtPm1mdF9zaXplLAorCQkgICAgICAgKGNo YXIqKSJGSUxFIikpCisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICAgIGVsc2UKKwkJewor CQkgIERCRygicmVhZCBleHRlbmQgbWZ0IEZSPT09PT09Iik7CisJCSAgaWYgKHJlYWRfbWZ0IChh dC0+bWZ0LT5kYXRhLCBhdC0+ZW1mdF9idWYsCisJCQkJdTMyYXQgKGF0LT5hdHRyX2N1ciwgMHgx MCkpKQorCQkgICAgcmV0dXJuIE5VTEw7CisJCX0KKworCSAgICAgIG5ld19wb3MgPSAmYXQtPmVt ZnRfYnVmW3UxNmF0IChhdC0+ZW1mdF9idWYsIDB4MTQpXTsKKwkgICAgICB3aGlsZSAoKHVuc2ln bmVkIGNoYXIpICpuZXdfcG9zICE9IDB4RkYpCisJCXsKKwkJICBEQkcoIm5ldyBwb3MgaW4gZXh0 ZW5kIG1mdD09PT09PSIpOworCQkgIGlmICgoKHVuc2lnbmVkIGNoYXIpICpuZXdfcG9zID09CisJ CSAgICAgICAodW5zaWduZWQgY2hhcikgKmF0LT5hdHRyX2N1cikKKwkJICAgICAgJiYgKHUxNmF0 IChuZXdfcG9zLCAweEUpID09IHUxNmF0IChhdC0+YXR0cl9jdXIsIDB4MTgpKSkKKwkJICAgIHsK KwkJICAgICAgcmV0dXJuIG5ld19wb3M7CisJCSAgICB9CisJCSAgbmV3X3BvcyArPSB1MTZhdCAo bmV3X3BvcywgNCk7CisJCX0KKwkgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsCisJ CQkgICJjYW5cJ3QgZmluZCAweCVYIGluIGF0dHJpYnV0ZSBsaXN0IiwKKwkJCSAgKHVuc2lnbmVk IGNoYXIpICphdC0+YXR0cl9jdXIpOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQor ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisKKyAgREJHKCJub3QgaW4gYSBhdHRyIGxpc3Q9 PT09PT0iKTsKKyAgYXQtPmF0dHJfY3VyID0gYXQtPmF0dHJfbnh0OworICB3aGlsZSAoKHVuc2ln bmVkIGNoYXIpICphdC0+YXR0cl9jdXIgIT0gMHhGRikKKyAgICB7CisgICAgICBhdC0+YXR0cl9u eHQgKz0gdTE2YXQgKGF0LT5hdHRyX2N1ciwgNCk7CisgICAgICBpZiAoKHVuc2lnbmVkIGNoYXIp ICphdC0+YXR0cl9jdXIgPT0gQVRfQVRUUklCVVRFX0xJU1QpCisJYXQtPmF0dHJfZW5kID0gYXQt PmF0dHJfY3VyOworICAgICAgaWYgKCgodW5zaWduZWQgY2hhcikgKmF0LT5hdHRyX2N1ciA9PSBh dHRyKSB8fCAoYXR0ciA9PSAwKSkKKwl7CisJICBEQkcoImZvdW5kPT09PT09Iik7CisJICByZXR1 cm4gYXQtPmF0dHJfY3VyOworCX0KKyAgICAgIGF0LT5hdHRyX2N1ciA9IGF0LT5hdHRyX254dDsK KyAgICB9CisgIAorICAKKyAgaWYgKGF0LT5hdHRyX2VuZCkKKyAgICB7CisgICAgICBEQkcoInNl YXJjaGluZyBpbiBhdHRyIGxpc3Q9PT09PT0iKTsKKyAgICAgIGNoYXIgKnBhOworCisgICAgICBh dC0+ZW1mdF9idWYgPSBncnViX21hbGxvYyAoYXQtPm1mdC0+ZGF0YS0+bWZ0X3NpemUgPDwgQkxL X1NIUik7CisgICAgICBpZiAoYXQtPmVtZnRfYnVmID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisK KyAgICAgIHBhID0gYXQtPmF0dHJfZW5kOworICAgICAgaWYgKHBhWzhdKQorCXsKKyAgICAgICAg ICBpbnQgbjsKKworICAgICAgICAgIG4gPSAoKHUzMmF0IChwYSwgMHgzMCkgKyBHUlVCX0RJU0tf U0VDVE9SX1NJWkUgLSAxKQorICAgICAgICAgICAgICAgJiAofihHUlVCX0RJU0tfU0VDVE9SX1NJ WkUgLSAxKSkpOworCSAgYXQtPmF0dHJfY3VyID0gYXQtPmF0dHJfZW5kOworCSAgYXQtPmVkYXRf YnVmID0gZ3J1Yl9tYWxsb2MgKG4pOworCSAgaWYgKCFhdC0+ZWRhdF9idWYpCisJICAgIHJldHVy biBOVUxMOworCSAgaWYgKHJlYWRfZGF0YSAoYXQsIHBhLCBhdC0+ZWRhdF9idWYsIDAsIG4sIDAs IDAsIDApKQorCSAgICB7CisJICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLAorCQkJ ICAiZmFpbCB0byByZWFkIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgbGlzdCIpOworCSAgICAgIHJl dHVybiBOVUxMOworCSAgICB9CisJICBhdC0+YXR0cl9ueHQgPSBhdC0+ZWRhdF9idWY7CisJICBh dC0+YXR0cl9lbmQgPSBhdC0+ZWRhdF9idWYgKyB1MzJhdCAocGEsIDB4MzApOworCX0KKyAgICAg IGVsc2UKKwl7CisJICBhdC0+YXR0cl9ueHQgPSBhdC0+YXR0cl9lbmQgKyB1MTZhdCAocGEsIDB4 MTQpOworCSAgYXQtPmF0dHJfZW5kID0gYXQtPmF0dHJfZW5kICsgdTMyYXQgKHBhLCA0KTsKKwl9 CisgICAgICBhdC0+ZmxhZ3MgfD0gQUZfQUxTVDsKKyAgICAgIHdoaWxlIChhdC0+YXR0cl9ueHQg PCBhdC0+YXR0cl9lbmQpCisJeworCSAgaWYgKCgodW5zaWduZWQgY2hhcikgKmF0LT5hdHRyX254 dCA9PSBhdHRyKSB8fCAoYXR0ciA9PSAwKSkKKwkgICAgYnJlYWs7CisJICBhdC0+YXR0cl9ueHQg Kz0gdTE2YXQgKGF0LT5hdHRyX254dCwgNCk7CisJfQorICAgICAgaWYgKGF0LT5hdHRyX254dCA+ PSBhdC0+YXR0cl9lbmQpCisJeworCSAgREJHKCJub3QgZm91bmQgaW4gbGlzdCIpOworCSAgcmV0 dXJuIE5VTEw7CisJfQorICAgICAgREJHKCJmb3VuZCBpbiBhdHRyIGxpc3Q9PT09PT0iKTsKKyAg ICAgIGlmICgoYXQtPmZsYWdzICYgQUZfTU1GVCkgJiYgKGF0dHIgPT0gQVRfREFUQSkpCisJewor CSAgREJHKCJBRl9HUE9TISEhISEhPT09PT09Iik7CisJICBhdC0+ZmxhZ3MgfD0gQUZfR1BPUzsK KwkgIGF0LT5hdHRyX2N1ciA9IGF0LT5hdHRyX254dDsKKwkgIHBhID0gYXQtPmF0dHJfY3VyOwor CSAgdjMyYXQgKHBhLCAweDEwKSA9IGF0LT5tZnQtPmRhdGEtPm1mdF9zdGFydDsKKwkgIHYzMmF0 IChwYSwgMHgxNCkgPSBhdC0+bWZ0LT5kYXRhLT5tZnRfc3RhcnQgKyAxOworCSAgcGEgPSBhdC0+ YXR0cl9ueHQgKyB1MTZhdCAocGEsIDQpOworCSAgd2hpbGUgKHBhIDwgYXQtPmF0dHJfZW5kKQor CSAgICB7CisJICAgICAgaWYgKCh1bnNpZ25lZCBjaGFyKSAqcGEgIT0gYXR0cikKKwkJYnJlYWs7 CisJICAgICAgaWYgKHJlYWRfYXR0cgorCQkgIChhdCwgcGEgKyAweDEwLAorCQkgICB1MzJhdCAo cGEsIDB4MTApICogKGF0LT5tZnQtPmRhdGEtPm1mdF9zaXplIDw8IEJMS19TSFIpLAorCQkgICBh dC0+bWZ0LT5kYXRhLT5tZnRfc2l6ZSA8PCBCTEtfU0hSLCAwLCAwLCAwKSkKKwkJcmV0dXJuIE5V TEw7CisJICAgICAgcGEgKz0gdTE2YXQgKHBhLCA0KTsKKwkgICAgfQorCSAgYXQtPmF0dHJfbnh0 ID0gYXQtPmF0dHJfY3VyOworCSAgYXQtPmZsYWdzICY9IH5BRl9HUE9TOworCX0KKyAgICAgIAor ICAgICAgREJHKCJnb3RvIHJldHJ5PT09PT09Iik7CisgICAgICBnb3RvIHJldHJ5OworICAgIH0K KworICBEQkcoInJldHVybiBOVUxMIik7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hh ciAqCitsb2NhdGVfYXR0ciAoc3RydWN0IGdydWJfbnRmc19hdHRyICphdCwgc3RydWN0IGdydWJf bnRmc19maWxlICptZnQsCisJICAgICB1bnNpZ25lZCBjaGFyIGF0dHIpCit7CisgIAorCisgIGNo YXIgKnBhOworICAKKyAgaW5pdF9hdHRyIChhdCwgbWZ0KTsKKworICBEQkcoIlxuISEhISEhXG5s b2NhdGluZyBhdHRyPTB4JTAyeCwgYXQtPmZsYWc9MHglMDJ4PT09PT09PT09PT09IiwKKyAgICAg IGF0dHIsIGF0LT5mbGFncyk7CisgIGlmICgocGEgPSBmaW5kX2F0dHIgKGF0LCBhdHRyKSkgPT0g TlVMTCkKKyAgICB7CisgICAgICBEQkcoIjE9PT09PT09PT1ub3QgZm91bmQiKTsKKyAgICAgIHJl dHVybiBOVUxMOworICAgIH0KKyAgaWYgKChhdC0+ZmxhZ3MgJiBBRl9BTFNUKSA9PSAwKQorICAg IHsKKyAgICAgIERCRygiMj09PT09PT1ub3QgYSBhdHRyIGxpc3QsIGNvbnRpbnVlIHNlYXJjaGlu ZyIpOworICAgICAgd2hpbGUgKDEpCisJeworCSAgaWYgKChwYSA9IGZpbmRfYXR0ciAoYXQsIGF0 dHIpKSA9PSBOVUxMKQorCSAgICBicmVhazsKKwkgIGlmIChhdC0+ZmxhZ3MgJiBBRl9BTFNUKQor CSAgICB7CisJICAgICAgREJHKCIzPT09PT09PT09PWluIGEgYXR0ciBsaXN0LGZvdW5kIik7CisJ ICAgICAgcmV0dXJuIHBhOworCSAgICB9CisJfQorICAgICAgREJHKCI0PT09PT09PT1zdGFydCBz ZWFyY2hpbmcgYWxsIG92ZXIgYWdhaW4iKTsKKyAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9O T05FOworICAgICAgZnJlZV9hdHRyIChhdCk7CisgICAgICBpbml0X2F0dHIgKGF0LCBtZnQpOwor ICAgICAgcGEgPSBmaW5kX2F0dHIgKGF0LCBhdHRyKTsKKyAgICB9CisgIERCRygibG9jYXRlIGZp bmlzaD09PT09PVxuXG4iKTsKKyAgcmV0dXJuIHBhOworfQorCitzdGF0aWMgY2hhciAqCityZWFk X3J1bl9kYXRhIChjaGFyICpydW4sIGludCBubiwgZ3J1Yl9kaXNrX2FkZHJfdCAqIHZhbCwgaW50 IHNpZykKK3sKKyAgZ3J1Yl9kaXNrX2FkZHJfdCByLCB2OworCisgIHIgPSAwOworICB2ID0gMTsK KworICB3aGlsZSAobm4tLSkKKyAgICB7CisgICAgICByICs9IHYgKiAoKih1bnNpZ25lZCBjaGFy ICopIChydW4rKykpOworICAgICAgdiA8PD0gODsKKyAgICB9CisKKyAgaWYgKChzaWcpICYmIChy ICYgKHYgPj4gMSkpKQorICAgIHIgLT0gdjsKKworICAqdmFsID0gcjsKKyAgcmV0dXJuIHJ1bjsK K30KKworZ3J1Yl9lcnJfdAorZ3J1Yl9udGZzX3JlYWRfcnVuX2xpc3QgKHN0cnVjdCBncnViX250 ZnNfcmxzdCAqIGN0eCkKK3sKKyAgREJHKCJyZWFkIHJ1biBsaXN0Iik7CisKKyAgaW50IGMxLCBj MjsKKyAgZ3J1Yl9kaXNrX2FkZHJfdCB2YWw7CisgIGNoYXIgKnJ1bjsKKworICBydW4gPSBjdHgt PmN1cl9ydW47CityZXRyeToKKyAgYzEgPSAoKHVuc2lnbmVkIGNoYXIpICgqcnVuKSAmIDB4Rik7 CisgIGMyID0gKCh1bnNpZ25lZCBjaGFyKSAoKnJ1bikgPj4gNCk7CisgIGlmICghYzEpCisgICAg eworICAgICAgaWYgKChjdHgtPmF0dHIpICYmIChjdHgtPmF0dHItPmZsYWdzICYgQUZfQUxTVCkp CisJeworCSAgdm9pZCAoKnNhdmVfaG9vaykgKGdydWJfZGlza19hZGRyX3Qgc2VjdG9yLAorCQkJ ICAgICB1bnNpZ25lZCBvZmZzZXQsCisJCQkgICAgIHVuc2lnbmVkIGxlbmd0aCwKKwkJCSAgICAg dm9pZCAqY2xvc3VyZSk7CisJICAKKwkgIC8vc2F2ZV9ob29rID0gY3R4LT5jb21wLmJzLT5yZWFk X2hvb2s7CisJICAvL2N0eC0+Y29tcC5icy0+cmVhZF9ob29rID0gMDsKKwkgIHJ1biA9IGZpbmRf YXR0ciAoY3R4LT5hdHRyLCAodW5zaWduZWQgY2hhcikgKmN0eC0+YXR0ci0+YXR0cl9jdXIpOwor CSAgLy9jdHgtPmNvbXAuYnMtPnJlYWRfaG9vayA9IHNhdmVfaG9vazsKKwkgIGlmIChydW4pCisJ ICAgIHsKKwkgICAgICBpZiAocnVuWzhdID09IDApCisJCXJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRlMsCisJCQkJICAgIiREQVRBIHNob3VsZCBiZSBub24tcmVzaWRlbnQiKTsKKwor CSAgICAgIHJ1biArPSB1MTZhdCAocnVuLCAweDIwKTsKKwkgICAgICBjdHgtPmN1cnJfbGNuID0g MDsKKwkgICAgICBnb3RvIHJldHJ5OworCSAgICB9CisJfQorICAgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GUywgInJ1biBsaXN0IG92ZXJmbG93biIpOworICAgIH0KKyAgcnVu ID0gcmVhZF9ydW5fZGF0YSAocnVuICsgMSwgYzEsICZ2YWwsIDApOwkvKiBsZW5ndGggb2YgY3Vy cmVudCBWQ04gKi8KKyAgY3R4LT5jdXJyX3ZjbiA9IGN0eC0+bmV4dF92Y247CisgIGN0eC0+bmV4 dF92Y24gKz0gdmFsOworICBydW4gPSByZWFkX3J1bl9kYXRhIChydW4sIGMyLCAmdmFsLCAxKTsJ Lyogb2Zmc2V0IHRvIHByZXZpb3VzIExDTiAqLworICBjdHgtPmN1cnJfbGNuICs9IHZhbDsKKyAg aWYgKHZhbCA9PSAwKQorICAgIGN0eC0+ZmxhZ3MgfD0gUkZfQkxOSzsKKyAgZWxzZQorICAgIGN0 eC0+ZmxhZ3MgJj0gflJGX0JMTks7CisgIGN0eC0+Y3VyX3J1biA9IHJ1bjsKKyAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBncnViX2Rpc2tfYWRkcl90CitncnViX250ZnNfcmVhZF9ibG9jayAoZ3J1 Yl9mc2hlbHBfbm9kZV90IG5vZGUsIGdydWJfZGlza19hZGRyX3QgYmxvY2spCit7CisgIHN0cnVj dCBncnViX250ZnNfcmxzdCAqY3R4OworCisgIGN0eCA9IChzdHJ1Y3QgZ3J1Yl9udGZzX3Jsc3Qg Kikgbm9kZTsKKyAgaWYgKGJsb2NrID49IGN0eC0+bmV4dF92Y24pCisgICAgeworICAgICAgaWYg KGdydWJfbnRmc19yZWFkX3J1bl9saXN0IChjdHgpKQorCXJldHVybiAtMTsKKyAgICAgIHJldHVy biBjdHgtPmN1cnJfbGNuOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiAoY3R4LT5mbGFncyAm IFJGX0JMTkspID8gMCA6IChibG9jayAtCisJCQkJCSBjdHgtPmN1cnJfdmNuICsgY3R4LT5jdXJy X2xjbik7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CityZWFkX2RhdGEgKHN0cnVjdCBncnViX250 ZnNfYXR0ciAqYXQsIGNoYXIgKnBhLCBjaGFyICpkZXN0LAorCSAgIGdydWJfZGlza19hZGRyX3Qg b2ZzLCBncnViX3NpemVfdCBsZW4sIGludCBjYWNoZWQsCisJICAgdm9pZCAoKnJlYWRfaG9vaykg KGdydWJfZGlza19hZGRyX3Qgc2VjdG9yLAorCQkJICAgICAgdW5zaWduZWQgb2Zmc2V0LAorCQkJ ICAgICAgdW5zaWduZWQgbGVuZ3RoLAorCQkJICAgICAgdm9pZCAqY2xvc3VyZSksCisJICAgdm9p ZCAqY2xvc3VyZSkKK3sKKyAgZ3J1Yl9kaXNrX2FkZHJfdCB2Y247CisgIHN0cnVjdCBncnViX250 ZnNfcmxzdCBjYywgKmN0eDsKKworICBpZiAobGVuID09IDApCisgICAgcmV0dXJuIDA7CisKKyAg Z3J1Yl9tZW1zZXQgKCZjYywgMCwgc2l6ZW9mIChjYykpOworICBjdHggPSAmY2M7CisgIGN0eC0+ YXR0ciA9IGF0OworICBjdHgtPmNvbXAuc3BjID0gYXQtPm1mdC0+ZGF0YS0+c3BjOworICBjdHgt PmNvbXAuYnMgPSBhdC0+bWZ0LT5kYXRhLT5iczsKKworICBpZiAocGFbOF0gPT0gMCkKKyAgICB7 CisgICAgICBpZiAob2ZzICsgbGVuID4gdTMyYXQgKHBhLCAweDEwKSkKKwlyZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAicmVhZCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgIGdydWJf bWVtY3B5IChkZXN0LCBwYSArIHUzMmF0IChwYSwgMHgxNCkgKyBvZnMsIGxlbik7CisgICAgICBy ZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKHUxNmF0IChwYSwgMHhDKSAmIEZMQUdfQ09NUFJFU1NF RCkKKyAgICBjdHgtPmZsYWdzIHw9IFJGX0NPTVA7CisgIGVsc2UKKyAgICBjdHgtPmZsYWdzICY9 IH5SRl9DT01QOworICBjdHgtPmN1cl9ydW4gPSBwYSArIHUxNmF0IChwYSwgMHgyMCk7CisKKyAg aWYgKGN0eC0+ZmxhZ3MgJiBSRl9DT01QKQorICAgIHsKKyAgICAgIGlmICghY2FjaGVkKQorCXJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsICJhdHRyaWJ1dGUgY2FuXCd0IGJlIGNv bXByZXNzZWQiKTsKKworICAgICAgaWYgKGF0LT5zYnVmKQorCXsKKwkgIGlmICgob2ZzICYgKH4o Q09NX0xFTiAtIDEpKSkgPT0gYXQtPnNhdmVfcG9zKQorCSAgICB7CisJICAgICAgZ3J1Yl9kaXNr X2FkZHJfdCBuOworCisJICAgICAgbiA9IENPTV9MRU4gLSAob2ZzIC0gYXQtPnNhdmVfcG9zKTsK KwkgICAgICBpZiAobiA+IGxlbikKKwkJbiA9IGxlbjsKKworCSAgICAgIGdydWJfbWVtY3B5IChk ZXN0LCBhdC0+c2J1ZiArIG9mcyAtIGF0LT5zYXZlX3Bvcywgbik7CisJICAgICAgaWYgKG4gPT0g bGVuKQorCQlyZXR1cm4gMDsKKworCSAgICAgIGRlc3QgKz0gbjsKKwkgICAgICBsZW4gLT0gbjsK KwkgICAgICBvZnMgKz0gbjsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBhdC0+c2J1 ZiA9IGdydWJfbWFsbG9jIChDT01fTEVOKTsKKwkgIGlmIChhdC0+c2J1ZiA9PSBOVUxMKQorCSAg ICByZXR1cm4gZ3J1Yl9lcnJubzsKKwkgIGF0LT5zYXZlX3BvcyA9IDE7CisJfQorCisgICAgICB2 Y24gPSBjdHgtPnRhcmdldF92Y24gPSAob2ZzID4+IENPTV9MT0dfTEVOKSAqIChDT01fU0VDIC8g Y3R4LT5jb21wLnNwYyk7CisgICAgICBjdHgtPnRhcmdldF92Y24gJj0gfjB4RjsKKyAgICB9Cisg IGVsc2UKKyAgICB2Y24gPSBjdHgtPnRhcmdldF92Y24gPSBncnViX2Rpdm1vZDY0IChvZnMgPj4g QkxLX1NIUiwgY3R4LT5jb21wLnNwYywgMCk7CisKKyAgY3R4LT5uZXh0X3ZjbiA9IHUzMmF0IChw YSwgMHgxMCk7CisgIGN0eC0+Y3Vycl9sY24gPSAwOworICB3aGlsZSAoY3R4LT5uZXh0X3ZjbiA8 PSBjdHgtPnRhcmdldF92Y24pCisgICAgeworICAgICAgaWYgKGdydWJfbnRmc19yZWFkX3J1bl9s aXN0IChjdHgpKQorCXJldHVybiBncnViX2Vycm5vOworICAgIH0KKworICBpZiAoYXQtPmZsYWdz ICYgQUZfR1BPUykKKyAgICB7CisgICAgICBncnViX2Rpc2tfYWRkcl90IHN0MCwgc3QxOworICAg ICAgZ3J1Yl91aW50MzJfdCBtOworCisgICAgICBncnViX2Rpdm1vZDY0IChvZnMgPj4gQkxLX1NI UiwgY3R4LT5jb21wLnNwYywgJm0pOworCisgICAgICBzdDAgPQorCShjdHgtPnRhcmdldF92Y24g LSBjdHgtPmN1cnJfdmNuICsgY3R4LT5jdXJyX2xjbikgKiBjdHgtPmNvbXAuc3BjICsgbTsKKyAg ICAgIHN0MSA9IHN0MCArIDE7CisgICAgICBpZiAoc3QxID09CisJICAoY3R4LT5uZXh0X3ZjbiAt IGN0eC0+Y3Vycl92Y24gKyBjdHgtPmN1cnJfbGNuKSAqIGN0eC0+Y29tcC5zcGMpCisJeworCSAg aWYgKGdydWJfbnRmc19yZWFkX3J1bl9saXN0IChjdHgpKQorCSAgICByZXR1cm4gZ3J1Yl9lcnJu bzsKKwkgIHN0MSA9IGN0eC0+Y3Vycl9sY24gKiBjdHgtPmNvbXAuc3BjOworCX0KKyAgICAgIHYz MmF0IChkZXN0LCAwKSA9IHN0MDsKKyAgICAgIHYzMmF0IChkZXN0LCA0KSA9IHN0MTsKKyAgICAg IHJldHVybiAwOworICAgIH0KKworICBpZiAoIShjdHgtPmZsYWdzICYgUkZfQ09NUCkpCisgICAg eworICAgICAgdW5zaWduZWQgaW50IHBvdzsKKworICAgICAgaWYgKCFncnViX2ZzaGVscF9sb2cy Ymxrc2l6ZSAoY3R4LT5jb21wLnNwYywgJnBvdykpCisJZ3J1Yl9mc2hlbHBfcmVhZF9maWxlIChj dHgtPmNvbXAuYnMsIChncnViX2ZzaGVscF9ub2RlX3QpIGN0eCwKKwkJCSAgICAgICByZWFkX2hv b2ssIGNsb3N1cmUsIG9mcywgbGVuLCBkZXN0LAorCQkJICAgICAgIGdydWJfbnRmc19yZWFkX2Js b2NrLCBvZnMgKyBsZW4sIHBvdyk7CisgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICB9CisK KyAgcmV0dXJuIChncnViX250ZnNjb21wX2Z1bmMpID8gZ3J1Yl9udGZzY29tcF9mdW5jIChhdCwg ZGVzdCwgb2ZzLCBsZW4sIGN0eCwKKwkJCQkJCSAgICB2Y24pIDoKKyAgICBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfRlMsICJudGZzY29tcCBtb2R1bGUgbm90IGxvYWRlZCIpOworfQorCitzdGF0 aWMgZ3J1Yl9lcnJfdAorcmVhZF9hdHRyIChzdHJ1Y3QgZ3J1Yl9udGZzX2F0dHIgKmF0LCBjaGFy ICpkZXN0LCBncnViX2Rpc2tfYWRkcl90IG9mcywKKwkgICBncnViX3NpemVfdCBsZW4sIGludCBj YWNoZWQsCisJICAgdm9pZCAoKnJlYWRfaG9vaykgKGdydWJfZGlza19hZGRyX3Qgc2VjdG9yLAor CQkJICAgICAgdW5zaWduZWQgb2Zmc2V0LAorCQkJICAgICAgdW5zaWduZWQgbGVuZ3RoLAorCQkJ ICAgICAgdm9pZCAqY2xvc3VyZSksCisJICAgdm9pZCAqY2xvc3VyZSkKK3sKKyAgREJHKCJyZWFk IGF0dHIiKTsKKyAgCisgIGNoYXIgKnNhdmVfY3VyOworICB1bnNpZ25lZCBjaGFyIGF0dHI7Cisg IGNoYXIgKnBwOworICBncnViX2Vycl90IHJldDsKKworICBzYXZlX2N1ciA9IGF0LT5hdHRyX2N1 cjsKKyAgYXQtPmF0dHJfbnh0ID0gYXQtPmF0dHJfY3VyOworICBhdHRyID0gKHVuc2lnbmVkIGNo YXIpICphdC0+YXR0cl9ueHQ7CisgIGlmIChhdC0+ZmxhZ3MgJiBBRl9BTFNUKQorICAgIHsKKyAg ICAgIGNoYXIgKnBhOworICAgICAgZ3J1Yl9kaXNrX2FkZHJfdCB2Y247CisKKyAgICAgIHZjbiA9 IGdydWJfZGl2bW9kNjQgKG9mcywgYXQtPm1mdC0+ZGF0YS0+c3BjIDw8IEJMS19TSFIsIDApOwor ICAgICAgcGEgPSBhdC0+YXR0cl9ueHQgKyB1MTZhdCAoYXQtPmF0dHJfbnh0LCA0KTsKKyAgICAg IHdoaWxlIChwYSA8IGF0LT5hdHRyX2VuZCkKKwl7CisJICBpZiAoKHVuc2lnbmVkIGNoYXIpICpw YSAhPSBhdHRyKQorCSAgICBicmVhazsKKwkgIGlmICh1MzJhdCAocGEsIDgpID4gdmNuKQorCSAg ICBicmVhazsKKwkgIGF0LT5hdHRyX254dCA9IHBhOworCSAgcGEgKz0gdTE2YXQgKHBhLCA0KTsK Kwl9CisgICAgfQorICBwcCA9IGZpbmRfYXR0ciAoYXQsIGF0dHIpOworICBpZiAocHApCisgICAg cmV0ID0gcmVhZF9kYXRhIChhdCwgcHAsIGRlc3QsIG9mcywgbGVuLCBjYWNoZWQsIHJlYWRfaG9v aywgY2xvc3VyZSk7CisgIGVsc2UKKyAgICByZXQgPQorICAgICAgKGdydWJfZXJybm8pID8gZ3J1 Yl9lcnJubyA6IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywKKwkJCQkJICAgICAgImF0dHJp YnV0ZSBub3QgZm91bmQiKTsKKyAgYXQtPmF0dHJfY3VyID0gc2F2ZV9jdXI7CisgIHJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CityZWFkX21mdCAoc3RydWN0IGdydWJfbnRmc19k YXRhICpkYXRhLCBjaGFyICpidWYsIGdydWJfdWludDMyX3QgbWZ0bm8pCit7CisgIGlmIChyZWFk X2F0dHIKKyAgICAgICgmZGF0YS0+bW1mdC5hdHRyLCBidWYsIG1mdG5vICogKChncnViX2Rpc2tf YWRkcl90KSBkYXRhLT5tZnRfc2l6ZSkgPDwgQkxLX1NIUiwKKyAgICAgICBkYXRhLT5tZnRfc2l6 ZSA8PCBCTEtfU0hSLCAwLCAwLCAwKSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0ZTLCAiUmVhZCBNRlQgMHglWCBmYWlscyIsIG1mdG5vKTsKKyAgcmV0dXJuIGZpeHVwIChk YXRhLCBidWYsIGRhdGEtPm1mdF9zaXplLCAoY2hhciopIkZJTEUiKTsKK30KKworc3RhdGljIGdy dWJfZXJyX3QKK2luaXRfZmlsZSAoc3RydWN0IGdydWJfbnRmc19maWxlICptZnQsIGdydWJfdWlu dDMyX3QgbWZ0bm8pCit7CisgIERCRygiaW5pdCBmaWxlIik7CisgIAorICB1bnNpZ25lZCBzaG9y dCBmbGFnOworCisgIG1mdC0+aW5vZGVfcmVhZCA9IDE7CisKKyAgbWZ0LT5idWYgPSBncnViX21h bGxvYyAobWZ0LT5kYXRhLT5tZnRfc2l6ZSA8PCBCTEtfU0hSKTsKKyAgaWYgKG1mdC0+YnVmID09 IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAgaWYgKHJlYWRfbWZ0IChtZnQtPmRh dGEsIG1mdC0+YnVmLCBtZnRubykpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAgZmxhZyA9 IHUxNmF0IChtZnQtPmJ1ZiwgMHgxNik7CisgIGlmICgoZmxhZyAmIDEpID09IDApCisgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgIk1GVCAweCVYIGlzIG5vdCBpbiB1c2Ui LCBtZnRubyk7CisKKyAgaWYgKChmbGFnICYgMikgPT0gMCkKKyAgICB7CisgICAgICBjaGFyICpw YTsKKworICAgICAgcGEgPSBsb2NhdGVfYXR0ciAoJm1mdC0+YXR0ciwgbWZ0LCBBVF9EQVRBKTsK KyAgICAgIGlmIChwYSA9PSBOVUxMKQorCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RlMsICJubyAkREFUQSBpbiBNRlQgMHglWCIsIG1mdG5vKTsKKworICAgICAgaWYgKCFwYVs4XSkK KwltZnQtPnNpemUgPSB1MzJhdCAocGEsIDB4MTApOworICAgICAgZWxzZQorCW1mdC0+c2l6ZSA9 IHU2NGF0IChwYSwgMHgzMCk7CisKKyAgICAgIGlmICgobWZ0LT5hdHRyLmZsYWdzICYgQUZfQUxT VCkgPT0gMCkKKwltZnQtPmF0dHIuYXR0cl9lbmQgPSAwOwkvKiAgRG9uJ3QganVtcCB0byBhdHRy aWJ1dGUgbGlzdCAqLworICAgIH0KKyAgZWxzZQorICAgIGluaXRfYXR0ciAoJm1mdC0+YXR0ciwg bWZ0KTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfZmlsZSAoc3RydWN0 IGdydWJfbnRmc19maWxlICptZnQpCit7CisgIGZyZWVfYXR0ciAoJm1mdC0+YXR0cik7CisgIGdy dWJfZnJlZSAobWZ0LT5idWYpOworfQorCitzdGF0aWMgaW50CitsaXN0X2ZpbGUgKHN0cnVjdCBn cnViX250ZnNfZmlsZSAqZGlybywgY2hhciAqcG9zLAorCSAgIGludCAoKmhvb2spIChjb25zdCBj aGFyICpmaWxlbmFtZSwKKwkJCWVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgZmlsZXR5cGUsCisJ CQlncnViX2ZzaGVscF9ub2RlX3Qgbm9kZSwKKwkJCXZvaWQgKmNsb3N1cmUpLAorCSAgIHZvaWQg KmNsb3N1cmUpCit7CisgIGNoYXIgKm5wOworICBpbnQgbnM7CisKKyAgd2hpbGUgKDEpCisgICAg eworICAgICAgY2hhciAqdXN0ciwgbmFtZXNwYWNlOworICAgICAgY2hhciogZ2JzdHI7CisKKyAg ICAgIGlmIChwb3NbMHhDXSAmIDIpCQkvKiBlbmQgc2lnbmF0dXJlICovCisJYnJlYWs7CisKKyAg ICAgIG5wID0gcG9zICsgMHg1MDsKKyAgICAgIG5zID0gKHVuc2lnbmVkIGNoYXIpICoobnArKyk7 CisgICAgICBuYW1lc3BhY2UgPSAqKG5wKyspOworCisgICAgICAvKgorICAgICAgICogIElnbm9y ZSBmaWxlcyBpbiBET1MgbmFtZXNwYWNlLCBhcyB0aGV5IHdpbGwgcmVhcHBlYXIgYXMgV2luMzIK KyAgICAgICAqICBuYW1lcy4KKyAgICAgICAqLworICAgICAgaWYgKChucykgJiYgKG5hbWVzcGFj ZSAhPSAyKSkKKwl7CisJICBlbnVtIGdydWJfZnNoZWxwX2ZpbGV0eXBlIHR5cGU7CisJICBzdHJ1 Y3QgZ3J1Yl9udGZzX2ZpbGUgKmZkaXJvOworCisJICBpZiAodTE2YXQgKHBvcywgNCkpCisJICAg IHsKKwkgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsICI2NC1iaXQgTUZUIG51bWJl ciIpOworCSAgICAgIHJldHVybiAwOworCSAgICB9CisKKwkgIHR5cGUgPQorCSAgICAodTMyYXQg KHBvcywgMHg0OCkgJiBBVFRSX0RJUkVDVE9SWSkgPyBHUlVCX0ZTSEVMUF9ESVIgOgorCSAgICBH UlVCX0ZTSEVMUF9SRUc7CisKKwkgIGZkaXJvID0gZ3J1Yl96YWxsb2MgKHNpemVvZiAoc3RydWN0 IGdydWJfbnRmc19maWxlKSk7CisJICBpZiAoIWZkaXJvKQorCSAgICByZXR1cm4gMDsKKworCSAg ZmRpcm8tPmRhdGEgPSBkaXJvLT5kYXRhOworCSAgZmRpcm8tPmlubyA9IHUzMmF0IChwb3MsIDAp OworCisJICB1c3RyID0gZ3J1Yl9tYWxsb2MgKG5zICogNCArIDEpOworCSAgZ2JzdHIgPSBncnVi X21hbGxvYyhucyAqIDIgKyAxKTsKKwkgICAgaWYgKHVzdHIgPT0gTlVMTCB8fCBnYnN0ciA9PSBO VUxMKQorCSAgICByZXR1cm4gMDsKKwkgICpncnViX3V0ZjE2X3RvX3V0ZjggKChncnViX3VpbnQ4 X3QgKikgdXN0ciwgKGdydWJfdWludDE2X3QgKikgbnAsCisJCQkgICAgICAgbnMpID0gJ1wwJzsK KwkgIHUyZyh1c3RyLCBzdHJsZW4odXN0ciksIGdic3RyLCBucyAqIDIgKyAxKTsKKwkgIERCRygi Z2JzdHI9JXMiLCBnYnN0cik7CisgICAgICAgICAgaWYgKG5hbWVzcGFjZSkKKyAgICAgICAgICAg IHR5cGUgfD0gR1JVQl9GU0hFTFBfQ0FTRV9JTlNFTlNJVElWRTsKKworCSAgaWYgKGhvb2sgKGdi c3RyLCB0eXBlLCBmZGlybywgY2xvc3VyZSkpCisJICAgIHsKKwkgICAgICBncnViX2ZyZWUgKHVz dHIpOworCSAgICAgIGdydWJfZnJlZSAoZ2JzdHIpOworCSAgICAgIHJldHVybiAxOworCSAgICB9 CisJICBncnViX2ZyZWUoZ2JzdHIpOworCSAgZ3J1Yl9mcmVlICh1c3RyKTsKKwl9CisgICAgICBw b3MgKz0gdTE2YXQgKHBvcywgOCk7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAorZ3J1Yl9udGZzX2l0ZXJhdGVfZGlyIChncnViX2ZzaGVscF9ub2RlX3QgZGlyLAorCQkgICAg ICAgaW50ICgqaG9vaykgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICBlbnVtIGdydWJf ZnNoZWxwX2ZpbGV0eXBlIGZpbGV0eXBlLAorCQkJCSAgICBncnViX2ZzaGVscF9ub2RlX3Qgbm9k ZSwKKwkJCQkgICAgdm9pZCAqY2xvc3VyZSksCisJCSAgICAgICB2b2lkICpjbG9zdXJlKQorewor ICB1bnNpZ25lZCBjaGFyICpiaXRtYXA7CisgIHN0cnVjdCBncnViX250ZnNfYXR0ciBhdHRyLCAq YXQ7CisgIGNoYXIgKmN1cl9wb3MsICppbmR4LCAqYm1wOworICBpbnQgcmV0ID0gMDsKKyAgZ3J1 Yl9zaXplX3QgYml0bWFwX2xlbjsKKyAgc3RydWN0IGdydWJfbnRmc19maWxlICptZnQ7CisKKyAg bWZ0ID0gKHN0cnVjdCBncnViX250ZnNfZmlsZSAqKSBkaXI7CisKKyAgaWYgKCFtZnQtPmlub2Rl X3JlYWQpCisgICAgeworICAgICAgaWYgKGluaXRfZmlsZSAobWZ0LCBtZnQtPmlubykpCisJcmV0 dXJuIDA7CisgICAgfQorCisgIGluZHggPSBOVUxMOworICBibXAgPSBOVUxMOworCisgIGF0ID0g JmF0dHI7CisgIGluaXRfYXR0ciAoYXQsIG1mdCk7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAg IGlmICgoY3VyX3BvcyA9IGZpbmRfYXR0ciAoYXQsIEFUX0lOREVYX1JPT1QpKSA9PSBOVUxMKQor CXsKKwkgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgIm5vICRJTkRFWF9ST09UIik7CisJ ICBnb3RvIGRvbmU7CisJfQorCisgICAgICAvKiBSZXNpZGVudCwgTmFtZWxlbj00LCBPZmZzZXQ9 MHgxOCwgRmxhZ3M9MHgwMCwgTmFtZT0iJEkzMCIgKi8KKyAgICAgIGlmICgodTMyYXQgKGN1cl9w b3MsIDgpICE9IDB4MTgwNDAwKSB8fAorCSAgKHUzMmF0IChjdXJfcG9zLCAweDE4KSAhPSAweDQ5 MDAyNCkgfHwKKwkgICh1MzJhdCAoY3VyX3BvcywgMHgxQykgIT0gMHgzMDAwMzMpKQorCWNvbnRp bnVlOworICAgICAgY3VyX3BvcyArPSB1MTZhdCAoY3VyX3BvcywgMHgxNCk7CisgICAgICBpZiAo KmN1cl9wb3MgIT0gMHgzMCkJLyogTm90IGZpbGVuYW1lIGluZGV4ICovCisJY29udGludWU7Cisg ICAgICBicmVhazsKKyAgICB9CisKKyAgY3VyX3BvcyArPSAweDEwOwkJLyogU2tpcCBpbmRleCBy b290ICovCisgIHJldCA9IGxpc3RfZmlsZSAobWZ0LCBjdXJfcG9zICsgdTE2YXQgKGN1cl9wb3Ms IDApLCBob29rLCBjbG9zdXJlKTsKKyAgaWYgKHJldCkKKyAgICBnb3RvIGRvbmU7CisgICAgCisK KyAgYml0bWFwID0gTlVMTDsKKyAgYml0bWFwX2xlbiA9IDA7CisgIGZyZWVfYXR0ciAoYXQpOwor ICBpbml0X2F0dHIgKGF0LCBtZnQpOworICB3aGlsZSAoKGN1cl9wb3MgPSBmaW5kX2F0dHIgKGF0 LCBBVF9CSVRNQVApKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGludCBvZnM7CisKKyAgICAgIG9m cyA9ICh1bnNpZ25lZCBjaGFyKSBjdXJfcG9zWzB4QV07CisgICAgICAvKiBOYW1lbGVuPTQsIE5h bWU9IiRJMzAiICovCisgICAgICBpZiAoKGN1cl9wb3NbOV0gPT0gNCkgJiYKKwkgICh1MzJhdCAo Y3VyX3Bvcywgb2ZzKSA9PSAweDQ5MDAyNCkgJiYKKwkgICh1MzJhdCAoY3VyX3Bvcywgb2ZzICsg NCkgPT0gMHgzMDAwMzMpKQorCXsKKyAgICAgICAgICBpbnQgaXNfcmVzaWRlbnQgPSAoY3VyX3Bv c1s4XSA9PSAwKTsKKworICAgICAgICAgIGJpdG1hcF9sZW4gPSAoKGlzX3Jlc2lkZW50KSA/IHUz MmF0IChjdXJfcG9zLCAweDEwKSA6CisgICAgICAgICAgICAgICAgICAgICAgICB1MzJhdCAoY3Vy X3BvcywgMHgyOCkpOworCisgICAgICAgICAgYm1wID0gZ3J1Yl9tYWxsb2MgKGJpdG1hcF9sZW4p OworICAgICAgICAgIGlmIChibXAgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKwor CSAgaWYgKGlzX3Jlc2lkZW50KQorCSAgICB7CisgICAgICAgICAgICAgIGdydWJfbWVtY3B5IChi bXAsIChjaGFyICopIChjdXJfcG9zICsgdTE2YXQgKGN1cl9wb3MsIDB4MTQpKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJpdG1hcF9sZW4pOworCSAgICB9CisgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAocmVhZF9kYXRhIChhdCwgY3VyX3Bvcywg Ym1wLCAwLCBiaXRtYXBfbGVuLCAwLCAwLCAwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiZmFpbHMgdG8gcmVhZCBub24tcmVzaWRlbnQgJEJJVE1BUCIpOworICAg ICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgYml0bWFwX2xlbiA9IHUzMmF0IChjdXJfcG9zLCAweDMwKTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgIGJpdG1hcCA9ICh1bnNpZ25lZCBjaGFyICopIGJtcDsKKwkgIGJyZWFrOworCX0K KyAgICB9CisKKyAgZnJlZV9hdHRyIChhdCk7CisgIGN1cl9wb3MgPSBsb2NhdGVfYXR0ciAoYXQs IG1mdCwgQVRfSU5ERVhfQUxMT0NBVElPTik7CisgIHdoaWxlIChjdXJfcG9zICE9IE5VTEwpCisg ICAgeworICAgICAgLyogTm9uLXJlc2lkZW50LCBOYW1lbGVuPTQsIE9mZnNldD0weDQwLCBGbGFn cz0wLCBOYW1lPSIkSTMwIiAqLworICAgICAgaWYgKCh1MzJhdCAoY3VyX3BvcywgOCkgPT0gMHg0 MDA0MDEpICYmCisJICAodTMyYXQgKGN1cl9wb3MsIDB4NDApID09IDB4NDkwMDI0KSAmJgorCSAg KHUzMmF0IChjdXJfcG9zLCAweDQ0KSA9PSAweDMwMDAzMykpCisJYnJlYWs7CisgICAgICBjdXJf cG9zID0gZmluZF9hdHRyIChhdCwgQVRfSU5ERVhfQUxMT0NBVElPTik7CisgICAgfQorCisgIGlm ICgoIWN1cl9wb3MpICYmIChiaXRtYXApKQorICAgIHsKKyAgICAgIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GUywgIiRCSVRNQVAgd2l0aG91dCAkSU5ERVhfQUxMT0NBVElPTiIpOworICAgICAg Z290byBkb25lOworICAgIH0KKworICBpZiAoYml0bWFwKQorICAgIHsKKyAgICAgIGdydWJfZGlz a19hZGRyX3QgdiwgaTsKKworICAgICAgaW5keCA9IGdydWJfbWFsbG9jIChtZnQtPmRhdGEtPmlk eF9zaXplIDw8IEJMS19TSFIpOworICAgICAgaWYgKGluZHggPT0gTlVMTCkKKwlnb3RvIGRvbmU7 CisKKyAgICAgIHYgPSAxOworICAgICAgZm9yIChpID0gMDsgaSA8IChncnViX2Rpc2tfYWRkcl90 KWJpdG1hcF9sZW4gKiA4OyBpKyspCisJeworCSAgaWYgKCpiaXRtYXAgJiB2KQorCSAgICB7CisJ ICAgICAgaWYgKChyZWFkX2F0dHIKKwkJICAgKGF0LCBpbmR4LCBpICogKG1mdC0+ZGF0YS0+aWR4 X3NpemUgPDwgQkxLX1NIUiksCisJCSAgICAobWZ0LT5kYXRhLT5pZHhfc2l6ZSA8PCBCTEtfU0hS KSwgMCwgMCwgMCkpCisJCSAgfHwgKGZpeHVwIChtZnQtPmRhdGEsIGluZHgsIG1mdC0+ZGF0YS0+ aWR4X3NpemUsIChjaGFyKikiSU5EWCIpKSkKKwkJZ290byBkb25lOworCSAgICAgIHJldCA9IGxp c3RfZmlsZSAobWZ0LCAmaW5keFsweDE4ICsgdTE2YXQgKGluZHgsIDB4MTgpXSwgaG9vaywKKwkJ CSAgICAgICBjbG9zdXJlKTsKKwkgICAgICBpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJICAgIH0K KwkgIHYgPDw9IDE7CisJICBpZiAodiA+PSAweDEwMCkKKwkgICAgeworCSAgICAgIHYgPSAxOwor CSAgICAgIGJpdG1hcCsrOworCSAgICB9CisJfQorICAgIH0KKworZG9uZToKKyAgZnJlZV9hdHRy IChhdCk7CisgIGdydWJfZnJlZSAoaW5keCk7CisgIGdydWJfZnJlZSAoYm1wKTsKKworICByZXR1 cm4gcmV0OworfQorCisKK3N0cnVjdCBncnViX250ZnNfZGF0YSAqCitncnViX250ZnNfbW91bnQg KEJsb2NrRHJpdmVyU3RhdGUqIGJzLCBncnViX3VpbnQzMl90IHBhcnRfb2ZmX3NlY3RvcikKK3sK KyAgc3RydWN0IGdydWJfbnRmc19icGIgYnBiOworICBzdHJ1Y3QgZ3J1Yl9udGZzX2RhdGEgKmRh dGEgPSAwOworICBncnViX29mZl90IG9mZl9ieXRlcyA9IChncnViX29mZl90KXBhcnRfb2ZmX3Nl Y3RvciA8PCBCTEtfU0hSOyAKKyAgCisgIGlmICghYnMpCisgICAgZ290byBmYWlsOworCisgIGRh dGEgPSAoc3RydWN0IGdydWJfbnRmc19kYXRhICopIGdydWJfemFsbG9jIChzaXplb2YgKCpkYXRh KSk7CisgIGlmICghZGF0YSkKKyAgICBnb3RvIGZhaWw7CisKKyAgZGF0YS0+YnMgPSBiczsKKwor ICAvKiBSZWFkIHRoZSBCUEIuICAqLworICBpZiAoYmRydl9wcmVhZCAoYnMsIG9mZl9ieXRlcywg JmJwYiwgc2l6ZW9mIChicGIpKSAhPSBzaXplb2YoYnBiKSkKKyAgICB7CisgICAgICBEQkcoInJl YWQgYnBiIGVyciEiKTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIGlmIChncnViX21lbWNt cCAoKGNoYXIgKikgJmJwYi5vZW1fbmFtZSwgIk5URlMiLCA0KSkKKyAgICB7CisgICAgICBEQkco ImJwYi5vZW1fbmFtZT0lcywgbm90IG50ZnMiLCBicGIub2VtX25hbWUpOworICAgICAgZ290byBm YWlsOworICAgIH0KKyAgZGF0YS0+YmxvY2tzaXplID0gZ3J1Yl9sZV90b19jcHUxNiAoYnBiLmJ5 dGVzX3Blcl9zZWN0b3IpOworICBkYXRhLT5zcGMgPSBicGIuc2VjdG9yc19wZXJfY2x1c3RlciAq IChkYXRhLT5ibG9ja3NpemUgPj4gQkxLX1NIUik7CisKKyAgaWYgKGJwYi5jbHVzdGVyc19wZXJf bWZ0ID4gMCkKKyAgICBkYXRhLT5tZnRfc2l6ZSA9IGRhdGEtPnNwYyAqIGJwYi5jbHVzdGVyc19w ZXJfbWZ0OworICBlbHNlCisgICAgZGF0YS0+bWZ0X3NpemUgPSAxIDw8ICgtYnBiLmNsdXN0ZXJz X3Blcl9tZnQgLSBCTEtfU0hSKTsKKworICBpZiAoYnBiLmNsdXN0ZXJzX3Blcl9pbmRleCA+IDAp CisgICAgZGF0YS0+aWR4X3NpemUgPSBkYXRhLT5zcGMgKiBicGIuY2x1c3RlcnNfcGVyX2luZGV4 OworICBlbHNlCisgICAgZGF0YS0+aWR4X3NpemUgPSAxIDw8ICgtYnBiLmNsdXN0ZXJzX3Blcl9p bmRleCAtIEJMS19TSFIpOworCisgIGRhdGEtPm1mdF9zdGFydCA9IGdydWJfbGVfdG9fY3B1NjQg KGJwYi5tZnRfbGNuKSAqIGRhdGEtPnNwYzsKKworICBpZiAoKGRhdGEtPm1mdF9zaXplID4gTUFY X01GVCkgfHwgKGRhdGEtPmlkeF9zaXplID4gTUFYX0lEWCkpCisgICAgZ290byBmYWlsOworCisg IGRhdGEtPm1tZnQuZGF0YSA9IGRhdGE7CisgIGRhdGEtPmNtZnQuZGF0YSA9IGRhdGE7CisKKyAg ZGF0YS0+bW1mdC5idWYgPSBncnViX21hbGxvYyAoZGF0YS0+bWZ0X3NpemUgPDwgQkxLX1NIUik7 CisgIGlmICghZGF0YS0+bW1mdC5idWYpCisgICAgZ290byBmYWlsOworCisgIHNfYnBiX2J5dGVz X3Blcl9zZWN0b3IgPSAoYnBiLmJ5dGVzX3Blcl9zZWN0b3IpOworICBzX3BhcnRfb2ZmX3NlY3Rv ciA9IHBhcnRfb2ZmX3NlY3RvcjsKKyAgREJHKCJicGIuYnl0ZXNfcGVyX3NlY3Rvcj1ibG9ja3Np emU9JXVcbiIKKyAgICAgICJicGIuc2VjdG9yX3Blcl9jbHVzdGVyPSV1XG4iCisgICAgICAiZGF0 YS0+YmxvY2tzaXplPSV1XG4iCisgICAgICAiZGF0YS0+c3BjPSV1XG4iCisgICAgICAiYnBiLmNs dXN0ZXJzX3Blcl9tZnQ9JWRcbiIKKyAgICAgICJkYXRhLT5tZnRfc2l6ZT0ldVxuIgorICAgICAg ImJwYi50b3RhbF9zZWN0b3JzPSV6ZFxuIgorICAgICAgImJwYi5tZnRfbGNuPSV6ZFxuIgorICAg ICAgImRhdGEtPm1mdF9zdGFydD0ldVxuIiwKKyAgICAgIChicGIuYnl0ZXNfcGVyX3NlY3Rvciks IChicGIuc2VjdG9yc19wZXJfY2x1c3RlciksCisgICAgICAoZGF0YS0+YmxvY2tzaXplKSwgKGRh dGEtPnNwYyksCisgICAgICAoYnBiLmNsdXN0ZXJzX3Blcl9tZnQpLCAoZGF0YS0+bWZ0X3NpemUp LAorICAgICAgKGJwYi5udW1fdG90YWxfc2VjdG9ycyksCisgICAgICAoZ3J1Yl9sZV90b19jcHU2 NChicGIubWZ0X2xjbikpLCAoZGF0YS0+bWZ0X3N0YXJ0KSk7CisgIAorICBvZmZfYnl0ZXMgPSAo Z3J1Yl9vZmZfdClkYXRhLT5tZnRfc3RhcnQgPDwgQkxLX1NIUjsKKyAgZ3J1Yl91aW50MzJfdCBs ZW4gPSBkYXRhLT5tZnRfc2l6ZSA8PCBCTEtfU0hSOworICBpZiAoYmRydl9wcmVhZF9mcm9tX2xj bl9vZl92b2x1bShicywgb2ZmX2J5dGVzLAorCQkgZGF0YS0+bW1mdC5idWYsIGxlbikgIT0gbGVu KQorICAgIHsKKyAgICAgIERCRygicmVhZCBtbWZ0IGVycm9yISIpOworICAgICAgZ290byBmYWls OworICAgIH0KKyAgZGF0YS0+dXVpZCA9IGdydWJfbGVfdG9fY3B1NjQgKGJwYi5udW1fc2VyaWFs KTsKKworICBpZiAoZml4dXAgKGRhdGEsIGRhdGEtPm1tZnQuYnVmLCBkYXRhLT5tZnRfc2l6ZSwg KGNoYXIqKSJGSUxFIikpCisgICAgZ290byBmYWlsOworCisgIGlmICghbG9jYXRlX2F0dHIgKCZk YXRhLT5tbWZ0LmF0dHIsICZkYXRhLT5tbWZ0LCBBVF9EQVRBKSkKKyAgICB7CisgICAgICBEQkco ImxvY2F0ZV9hdHRyIEFUX0RBVEEgaW4gbW1mdCBmYWlsZWQhICIpOworICAgICAgZ290byBmYWls OworICAgIH0KKyAgaWYgKGluaXRfZmlsZSAoJmRhdGEtPmNtZnQsIEZJTEVfUk9PVCkpCisgICAg eworICAgICAgREJHKCJpbml0X2ZpbGUgRklMRV9ST09UIGZhaWxlZCEiKTsKKyAgICAgIGdvdG8g ZmFpbDsKKyAgICB9CisgIHJldHVybiBkYXRhOworCitmYWlsOgorICBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRlMsICJub3QgYW4gbnRmcyBmaWxlc3lzdGVtIik7CisKKyAgaWYgKGRhdGEpCisg ICAgeworICAgICAgZnJlZV9maWxlICgmZGF0YS0+bW1mdCk7CisgICAgICBmcmVlX2ZpbGUgKCZk YXRhLT5jbWZ0KTsKKyAgICAgIGdydWJfZnJlZSAoZGF0YSk7CisgICAgfQorICByZXR1cm4gMDsK K30KKworc3RydWN0IGdydWJfbnRmc19kaXJfY2xvc3VyZQoreworICBpbnQgKCpob29rKSAoY29u c3QgY2hhciAqZmlsZW5hbWUsCisJICAgICAgIGNvbnN0IHN0cnVjdCBncnViX2Rpcmhvb2tfaW5m byAqaW5mbywKKwkgICAgICAgdm9pZCAqY2xvc3VyZSk7CisgIHZvaWQgKmNsb3N1cmU7CisgIHN0 cnVjdCBncnViX250ZnNfZmlsZSBmaWxlOworfTsKKworc3RhdGljIGludAoraXRlcmF0ZSAoY29u c3QgY2hhciAqZmlsZW5hbWUsCisJIGVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgZmlsZXR5cGUs CisJIGdydWJfZnNoZWxwX25vZGVfdCBub2RlLAorCSB2b2lkICpjbG9zdXJlKQoreworICBzdHJ1 Y3QgZ3J1Yl9udGZzX2Rpcl9jbG9zdXJlICpjID0gY2xvc3VyZTsKKyAgc3RydWN0IGdydWJfZGly aG9va19pbmZvIGluZm87CisgIGdydWJfbWVtc2V0ICgmaW5mbywgMCwgc2l6ZW9mIChpbmZvKSk7 CisgIGluZm8uZGlyID0gKChmaWxldHlwZSAmIEdSVUJfRlNIRUxQX1RZUEVfTUFTSykgPT0gR1JV Ql9GU0hFTFBfRElSKTsKKyAgYy0+ZmlsZS5kYXRhID0gbm9kZS0+ZGF0YTsKKyAgYy0+ZmlsZS5p bm8gPSBub2RlLT5pbm87CisgIGdydWJfZnJlZSAobm9kZSk7CisgIAorICAKKyAgaWYoaW5pdF9m aWxlKCZjLT5maWxlLCBjLT5maWxlLmlubykpCisgICAgeworICAgICAgZXJyeCgxLCAiaXRlcmF0 ZSgpOiBpbml0X2ZpbGUgZXJyb3IhXG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBE QkcoIi4uLi4uLmN1cnJlbnQgZmlsZSBtZnQgcmVhZCBzdWNjZXNzZnVsbHkhXG4iKTsKKyAgICB9 CisgIGNoYXIgKnBhID0gbG9jYXRlX2F0dHIoJmMtPmZpbGUuYXR0ciwKKwkJCSAmYy0+ZmlsZSwg QVRfU1RBTkRBUkRfSU5GT1JNQVRJT04pOworICBpZihOVUxMID09IHBhKQorICAgIHsKKyAgICAg IGVycngoMiwgIm5vICRTVEFOREFSRF9JTkZPUk1BVElPTiBpbiBNRlQgMHgleFxuIiwgYy0+Zmls ZS5pbm8pOworICAgIH0KKyAgZ3J1Yl91aW50NjRfdCBkYXRlPSAwOworICBpZihyZWFkX2F0dHIo JmMtPmZpbGUuYXR0ciwgKGNoYXIqKSZkYXRlLCAwLCA4LCAxLCBOVUxMLCBOVUxMKSkKKyAgICB7 CisgICAgICBlcnJ4KDMsICJyZWFkIGRhdGUgZXJyb3JcbiIpOworICAgIH0KKyAgZWxzZQorICAg IHsKKworICAgICAgaW5mby50aW1lX250ZnMgPSBkYXRlOworICAgICAgREJHKCIuLi4uLi5kYXRl OiAlenVcbiIsIGRhdGUpOworICAgIH0KKyAgREJHKCIuLi4uLi5zaXplIG9mIFwnJXNcJzogJXp1 XG4iLCBmaWxlbmFtZSwgKGMtPmZpbGUuc2l6ZSkpOworICBpbmZvLmZpbGVzaXplX250ZnMgPSBj LT5maWxlLnNpemU7CisgIGZyZWVfZmlsZSgmYy0+ZmlsZSk7CisgIHJldHVybiBjLT5ob29rIChm aWxlbmFtZSwgJmluZm8sIGMtPmNsb3N1cmUpOworfQorCisKKyNpbmNsdWRlICJmcy10aW1lLmgi CitzdGF0aWMgIGludCBmaW5kX3RoZW5fbHNfaG9vayhjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJ CSAgIGNvbnN0IHN0cnVjdCBncnViX2Rpcmhvb2tfaW5mbyAqaW5mbywgdm9pZCAqY2xvc3VyZSkK K3sKKyAgc3RydWN0IGxzX2N0cmwqIGN0cmwgPSAoc3RydWN0IGxzX2N0cmwqKWNsb3N1cmU7Cisg IERCRygiZGV0YWlsPSVkIiwgY3RybC0+ZGV0YWlsKTsKKyAgaWYoJyQnID09ICpmaWxlbmFtZSkK KyAgICBnb3RvIGRvbmU7CisKKyAgcHJpbnRmKCIlcyIsIGZpbGVuYW1lKTsKKyAgaWYoIWN0cmwt PmRldGFpbCkKKyAgICB7CisgICAgICBwcmludGYoIlxuIik7CisgICAgICBnb3RvIGRvbmU7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnRmKCJcdCIpOworICAgIH0KKyAgCisgIGNo YXIgYnVmZmVyWzUwXT17fTsKKyAgc3RydWN0IHRtIHRtMDsgIAorICBzdHJ1Y3QgdG0qIHB0bT0g bnRmc191dGMybG9jYWwoaW5mby0+dGltZV9udGZzLCAmdG0wKTsKKyAgaWYoTlVMTCA9PSBwdG0p IGVycngoMSwgIm50ZnNfdXRjMmxvY2FsIGZhaWxcbiIpOworICAgICAgICAgICAKKyAgcHJpbnRm KCIlenVcdCIsIGluZm8tPmZpbGVzaXplX250ZnMpOworICBwcmludGYoIiVzXHQiLCAoaW5mby0+ ZGlyID8gImRpciIgOiAiZmlsZSIpKTsKKyAgc3RyZnRpbWUoYnVmZmVyLCA1MCwgIiVZLSVtLSVk XHQlSDolTTolUyIsIHB0bSk7CisgIHByaW50ZigiJXMiLCBidWZmZXIpOworICAvL3ByaW50Zigi JWQtJWQtJWRcdCIsIHB0bS0+dG1feWVhciwgcHRtLT50bV9tb24sIHB0bS0+dG1fbWRheSk7Cisg IC8vcHJpbnRmKCIlZDolZDolZFx0IiwgcHRtLT50bV9ob3VyLCBwdG0tPnRtX21pbiwgcHRtLT50 bV9zZWMpOworICBwcmludGYoIlxuIik7CisKKyBkb25lOgorICByZXR1cm4gMDsgIC8vINfu1tW3 tbvYuPhpdGVyYXRlCit9CisKKworCitncnViX2Vycl90CitncnViX250ZnNfbHMgKGdydWJfZmls ZV90IGZpbGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJICAgICAgIGludCAoKmhvb2spIChjb25zdCBj aGFyICpmaWxlbmFtZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9kaXJob29rX2luZm8gKmlu Zm8sCisJCQkgICAgdm9pZCAqY2xvc3VyZSksCisJICAgICAgIHZvaWQgKmNsb3N1cmUpCit7Cisg IHN0cnVjdCBncnViX250ZnNfZGF0YSAqZGF0YSA9IDA7CisgIHN0cnVjdCBncnViX2ZzaGVscF9u b2RlICpmZGlybyA9IDA7CisgIHN0cnVjdCBncnViX250ZnNfZGlyX2Nsb3N1cmUgYyA9IHswfTsK KworICBkYXRhID0gZ3J1Yl9udGZzX21vdW50IChmaWxlLT5icywgZmlsZS0+cGFydF9vZmZfc2Vj dG9yKTsKKyAgaWYgKCFkYXRhKQorICAgIHsKKyAgICAgIERCRygibW91bnQgZmFpbGVkISIpOwor ICAgICAgZ290byBmYWlsOworICAgIH0KKyAgZ3J1Yl9mc2hlbHBfZmluZF9maWxlIChwYXRoLCAm ZGF0YS0+Y21mdCwgJmZkaXJvLCBncnViX250ZnNfaXRlcmF0ZV9kaXIsIDAsCisJCQkgMCwgR1JV Ql9GU0hFTFBfRElSKTsKKworICAKKyAgaWYgKGdydWJfZXJybm8pCisgICAgZ290byBmYWlsOwor CisgIGMuaG9vayA9IChob29rID8gaG9vayA6IGZpbmRfdGhlbl9sc19ob29rKTsKKyAgYy5jbG9z dXJlID0gY2xvc3VyZTsKKyAgZ3J1Yl9udGZzX2l0ZXJhdGVfZGlyIChmZGlybywgaXRlcmF0ZSwg JmMpOworCitmYWlsOgorICBpZiAoKGZkaXJvKSAmJiAoZmRpcm8gIT0gJmRhdGEtPmNtZnQpKQor ICAgIHsKKyAgICAgIGZyZWVfZmlsZSAoZmRpcm8pOworICAgICAgZ3J1Yl9mcmVlIChmZGlybyk7 CisgICAgfQorICBpZiAoZGF0YSkKKyAgICB7CisgICAgICBmcmVlX2ZpbGUgKCZkYXRhLT5tbWZ0 KTsKKyAgICAgIGZyZWVfZmlsZSAoJmRhdGEtPmNtZnQpOworICAgICAgZ3J1Yl9mcmVlIChkYXRh KTsKKyAgICB9CisKKworICByZXR1cm4gZ3J1Yl9lcnJubzsKK30KKworZ3J1Yl9lcnJfdAorZ3J1 Yl9udGZzX29wZW4gKGdydWJfZmlsZV90IGZpbGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHN0 cnVjdCBncnViX250ZnNfZGF0YSAqZGF0YSA9IDA7CisgIHN0cnVjdCBncnViX2ZzaGVscF9ub2Rl ICptZnQgPSAwOworCisKKyAgZGF0YSA9IGdydWJfbnRmc19tb3VudCAoZmlsZS0+YnMsIGZpbGUt PnBhcnRfb2ZmX3NlY3Rvcik7CisgIGlmICghZGF0YSkKKyAgICB7CisgICAgICBEQkcoIm1vdW50 IGZhaWxlZCEiKTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIGdydWJfZnNoZWxwX2ZpbmRf ZmlsZSAobmFtZSwgJmRhdGEtPmNtZnQsICZtZnQsIGdydWJfbnRmc19pdGVyYXRlX2RpciwgMCwK KwkJCSAwLCBHUlVCX0ZTSEVMUF9SRUcpOworCisgIGlmIChncnViX2Vycm5vKQorICAgIGdvdG8g ZmFpbDsKKworICBpZiAobWZ0ICE9ICZkYXRhLT5jbWZ0KQorICAgIHsKKyAgICAgIGZyZWVfZmls ZSAoJmRhdGEtPmNtZnQpOworICAgICAgZ3J1Yl9tZW1jcHkgKCZkYXRhLT5jbWZ0LCBtZnQsIHNp emVvZiAoKm1mdCkpOworICAgICAgZ3J1Yl9mcmVlIChtZnQpOworICAgICAgaWYgKCFkYXRhLT5j bWZ0Lmlub2RlX3JlYWQpCisJeworCSAgaWYgKGluaXRfZmlsZSAoJmRhdGEtPmNtZnQsIGRhdGEt PmNtZnQuaW5vKSkKKwkgICAgZ290byBmYWlsOworCX0KKyAgICB9CisKKyAgZmlsZS0+c2l6ZSA9 IGRhdGEtPmNtZnQuc2l6ZTsKKyAgZmlsZS0+ZGF0YSA9IGRhdGE7CisgIGZpbGUtPm9mZnNldCA9 IDA7CisKKyAgcmV0dXJuIDA7CisKK2ZhaWw6CisgIGlmIChkYXRhKQorICAgIHsKKyAgICAgIGZy ZWVfZmlsZSAoJmRhdGEtPm1tZnQpOworICAgICAgZnJlZV9maWxlICgmZGF0YS0+Y21mdCk7Cisg ICAgICBncnViX2ZyZWUgKGRhdGEpOworICAgIH0KKworCisgIHJldHVybiBncnViX2Vycm5vOwor fQorCitncnViX3NzaXplX3QKK2dydWJfbnRmc19yZWFkIChncnViX2ZpbGVfdCBmaWxlLCBncnVi X29mZl90IG9mZnNldCwgZ3J1Yl9zaXplX3QgbGVuLCBjaGFyICpidWYpCit7CisgIHN0cnVjdCBn cnViX250ZnNfZmlsZSAqbWZ0OworCisgIG1mdCA9ICYoKHN0cnVjdCBncnViX250ZnNfZGF0YSAq KSBmaWxlLT5kYXRhKS0+Y21mdDsKKyAgaWYgKGZpbGUtPnJlYWRfaG9vaykKKyAgICBtZnQtPmF0 dHIuc2F2ZV9wb3MgPSAxOworICAKKyAgcmVhZF9hdHRyICgmbWZ0LT5hdHRyLCBidWYsIG9mZnNl dCwgbGVuLCAxLAorCSAgICAgZmlsZS0+cmVhZF9ob29rLCBmaWxlLT5jbG9zdXJlKTsKKyAgCisg IHJldHVybiAoZ3J1Yl9lcnJubykgPyAwIDogbGVuOworfQorCitncnViX2Vycl90CitncnViX250 ZnNfY2xvc2UgKGdydWJfZmlsZV90IGZpbGUpCit7CisgIHN0cnVjdCBncnViX250ZnNfZGF0YSAq ZGF0YTsKKworICBkYXRhID0gZmlsZS0+ZGF0YTsKKworICBpZiAoZGF0YSkKKyAgICB7CisgICAg ICBmcmVlX2ZpbGUgKCZkYXRhLT5tbWZ0KTsKKyAgICAgIGZyZWVfZmlsZSAoJmRhdGEtPmNtZnQp OworICAgICAgZ3J1Yl9mcmVlIChkYXRhKTsKKyAgICB9CisKKworICByZXR1cm4gZ3J1Yl9lcnJu bzsKK30KKworCisKZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjItYS90b29s cy9pb2VtdS1xZW11LXhlbi9udGZzLmggeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4v bnRmcy5oCi0tLSB4ZW4tNC4xLjItYS90b29scy9pb2VtdS1xZW11LXhlbi9udGZzLmgJMTk3MC0w MS0wMSAwNzowMDowMC4wMDAwMDAwMDAgKzA3MDAKKysrIHhlbi00LjEuMi1iL3Rvb2xzL2lvZW11 LXFlbXUteGVuL250ZnMuaAkyMDEyLTEyLTI4IDE2OjAyOjQxLjAxNDkzNjcwMSArMDgwMApAQCAt MCwwICsxLDIyNyBAQAorLyogbnRmcy5oIC0gaGVhZGVyIGZvciB0aGUgTlRGUyBmaWxlc3lzdGVt ICovCisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDcsMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgor ICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBHUlVCX05URlNfSAorI2RlZmluZSBHUlVC X05URlNfSAkxCisKKworI2luY2x1ZGUgImJsb2NrX2ludC5oIgorI2luY2x1ZGUgImZzLXR5cGVz LmgiCisjaW5jbHVkZSAiZ3J1Yl9lcnIuaCIKKyNpbmNsdWRlICJmcy1jb21tLmgiCisKKyNkZWZp bmUgRklMRV9NRlQgICAgICAwCisjZGVmaW5lIEZJTEVfTUZUTUlSUiAgMQorI2RlZmluZSBGSUxF X0xPR0ZJTEUgIDIKKyNkZWZpbmUgRklMRV9WT0xVTUUgICAzCisjZGVmaW5lIEZJTEVfQVRUUkRF RiAgNAorI2RlZmluZSBGSUxFX1JPT1QgICAgIDUKKyNkZWZpbmUgRklMRV9CSVRNQVAgICA2Cisj ZGVmaW5lIEZJTEVfQk9PVCAgICAgNworI2RlZmluZSBGSUxFX0JBRENMVVMgIDgKKyNkZWZpbmUg RklMRV9RVU9UQSAgICA5CisjZGVmaW5lIEZJTEVfVVBDQVNFICAxMAorCisjZGVmaW5lIEFUX1NU QU5EQVJEX0lORk9STUFUSU9OCTB4MTAKKyNkZWZpbmUgQVRfQVRUUklCVVRFX0xJU1QJMHgyMAor I2RlZmluZSBBVF9GSUxFTkFNRQkJMHgzMAorI2RlZmluZSBBVF9PQkpFQ1RfSUQJCTB4NDAKKyNk ZWZpbmUgQVRfU0VDVVJJVFlfREVTQ1JJUFRPUgkweDUwCisjZGVmaW5lIEFUX1ZPTFVNRV9OQU1F CQkweDYwCisjZGVmaW5lIEFUX1ZPTFVNRV9JTkZPUk1BVElPTgkweDcwCisjZGVmaW5lIEFUX0RB VEEJCQkweDgwCisjZGVmaW5lIEFUX0lOREVYX1JPT1QJCTB4OTAKKyNkZWZpbmUgQVRfSU5ERVhf QUxMT0NBVElPTgkweEEwCisjZGVmaW5lIEFUX0JJVE1BUAkJMHhCMAorI2RlZmluZSBBVF9TWU1M SU5LCQkweEMwCisjZGVmaW5lIEFUX0VBX0lORk9STUFUSU9OCTB4RDAKKyNkZWZpbmUgQVRfRUEJ CQkweEUwCisKKyNkZWZpbmUgQVRUUl9SRUFEX09OTFkJCTB4MQorI2RlZmluZSBBVFRSX0hJRERF TgkJMHgyCisjZGVmaW5lIEFUVFJfU1lTVEVNCQkweDQKKyNkZWZpbmUgQVRUUl9BUkNISVZFCQkw eDIwCisjZGVmaW5lIEFUVFJfREVWSUNFCQkweDQwCisjZGVmaW5lIEFUVFJfTk9STUFMCQkweDgw CisjZGVmaW5lIEFUVFJfVEVNUE9SQVJZCQkweDEwMAorI2RlZmluZSBBVFRSX1NQQVJTRQkJMHgy MDAKKyNkZWZpbmUgQVRUUl9SRVBBUlNFCQkweDQwMAorI2RlZmluZSBBVFRSX0NPTVBSRVNTRUQJ CTB4ODAwCisjZGVmaW5lIEFUVFJfT0ZGTElORQkJMHgxMDAwCisjZGVmaW5lIEFUVFJfTk9UX0lO REVYRUQJMHgyMDAwCisjZGVmaW5lIEFUVFJfRU5DUllQVEVECQkweDQwMDAKKyNkZWZpbmUgQVRU Ul9ESVJFQ1RPUlkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQVRUUl9JTkRFWF9WSUVXCQkweDIwMDAw MDAwCisKKyNkZWZpbmUgRkxBR19DT01QUkVTU0VECQkxCisjZGVmaW5lIEZMQUdfRU5DUllQVEVE CQkweDQwMDAKKyNkZWZpbmUgRkxBR19TUEFSU0UJCTB4ODAwMAorCisKKyNkZWZpbmUgR1JVQl9E SVNLX1NFQ1RPUl9CSVRTICAgOQorI2RlZmluZSBCTEtfU0hSCQlHUlVCX0RJU0tfU0VDVE9SX0JJ VFMKKworI2RlZmluZSBNQVhfTUZUCQkoMTAyNCA+PiBCTEtfU0hSKQorI2RlZmluZSBNQVhfSURY CQkoMTYzODQgPj4gQkxLX1NIUikKKworI2RlZmluZSBDT01fTEVOCQk0MDk2CisjZGVmaW5lIENP TV9MT0dfTEVOCTEyCisjZGVmaW5lIENPTV9TRUMJCShDT01fTEVOID4+IEJMS19TSFIpCisKKyNk ZWZpbmUgQUZfQUxTVAkJMQorI2RlZmluZSBBRl9NTUZUCQkyCisjZGVmaW5lIEFGX0dQT1MJCTQK KworI2RlZmluZSBSRl9DT01QCQkxCisjZGVmaW5lIFJGX0NCTEsJCTIKKyNkZWZpbmUgUkZfQkxO SwkJNAorCisjZGVmaW5lIHZhbHVlYXQoYnVmLG9mcyx0eXBlKQkqKCh0eXBlKikoKChjaGFyKili dWYpK29mcykpCisKKyNkZWZpbmUgdTE2YXQoYnVmLG9mcykJZ3J1Yl9sZV90b19jcHUxNih2YWx1 ZWF0KGJ1ZixvZnMsZ3J1Yl91aW50MTZfdCkpCisjZGVmaW5lIHUzMmF0KGJ1ZixvZnMpCWdydWJf bGVfdG9fY3B1MzIodmFsdWVhdChidWYsb2ZzLGdydWJfdWludDMyX3QpKQorI2RlZmluZSB1NjRh dChidWYsb2ZzKQlncnViX2xlX3RvX2NwdTY0KHZhbHVlYXQoYnVmLG9mcyxncnViX3VpbnQ2NF90 KSkKKworI2RlZmluZSB2MTZhdChidWYsb2ZzKQl2YWx1ZWF0KGJ1ZixvZnMsZ3J1Yl91aW50MTZf dCkKKyNkZWZpbmUgdjMyYXQoYnVmLG9mcykJdmFsdWVhdChidWYsb2ZzLGdydWJfdWludDMyX3Qp CisjZGVmaW5lIHY2NGF0KGJ1ZixvZnMpCXZhbHVlYXQoYnVmLG9mcyxncnViX3VpbnQ2NF90KQor CitzdHJ1Y3QgZ3J1Yl9udGZzX2JwYgoreworICBncnViX3VpbnQ4X3Qgam1wX2Jvb3RbM107Cisg IGdydWJfdWludDhfdCBvZW1fbmFtZVs4XTsKKyAgZ3J1Yl91aW50MTZfdCBieXRlc19wZXJfc2Vj dG9yOworICBncnViX3VpbnQ4X3Qgc2VjdG9yc19wZXJfY2x1c3RlcjsKKyAgZ3J1Yl91aW50OF90 IHJlc2VydmVkXzFbN107CisgIGdydWJfdWludDhfdCBtZWRpYTsKKyAgZ3J1Yl91aW50MTZfdCBy ZXNlcnZlZF8yOworICBncnViX3VpbnQxNl90IHNlY3RvcnNfcGVyX3RyYWNrOworICBncnViX3Vp bnQxNl90IG51bV9oZWFkczsKKyAgZ3J1Yl91aW50MzJfdCBudW1faGlkZGVuX3NlY3RvcnM7Cisg IGdydWJfdWludDMyX3QgcmVzZXJ2ZWRfM1syXTsKKyAgZ3J1Yl91aW50NjRfdCBudW1fdG90YWxf c2VjdG9yczsKKyAgZ3J1Yl91aW50NjRfdCBtZnRfbGNuOworICBncnViX3VpbnQ2NF90IG1mdF9t aXJyX2xjbjsKKyAgZ3J1Yl9pbnQ4X3QgY2x1c3RlcnNfcGVyX21mdDsKKyAgZ3J1Yl9pbnQ4X3Qg cmVzZXJ2ZWRfNFszXTsKKyAgZ3J1Yl9pbnQ4X3QgY2x1c3RlcnNfcGVyX2luZGV4OworICBncnVi X2ludDhfdCByZXNlcnZlZF81WzNdOworICBncnViX3VpbnQ2NF90IG51bV9zZXJpYWw7CisgIGdy dWJfdWludDMyX3QgY2hlY2tzdW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2Rl ZmluZSBncnViX250ZnNfZmlsZSBncnViX2ZzaGVscF9ub2RlCisKK3N0cnVjdCBncnViX250ZnNf YXR0cgoreworICBpbnQgZmxhZ3M7CisgIGNoYXIgKmVtZnRfYnVmLCAqZWRhdF9idWY7CisgIGNo YXIgKmF0dHJfY3VyLCAqYXR0cl9ueHQsICphdHRyX2VuZDsKKyAgZ3J1Yl91aW50MzJfdCBzYXZl X3BvczsKKyAgY2hhciAqc2J1ZjsKKyAgc3RydWN0IGdydWJfbnRmc19maWxlICptZnQ7Cit9Owor CitzdHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZQoreworICBzdHJ1Y3QgZ3J1Yl9udGZzX2RhdGEgKmRh dGE7CisgIGNoYXIgKmJ1ZjsKKyAgZ3J1Yl91aW50NjRfdCBzaXplOworICBncnViX3VpbnQzMl90 IGlubzsKKyAgaW50IGlub2RlX3JlYWQ7CisgIHN0cnVjdCBncnViX250ZnNfYXR0ciBhdHRyOwor fTsKKworc3RydWN0IGdydWJfbnRmc19kYXRhCit7CisgIHN0cnVjdCBncnViX250ZnNfZmlsZSBj bWZ0OworICBzdHJ1Y3QgZ3J1Yl9udGZzX2ZpbGUgbW1mdDsKKyAgQmxvY2tEcml2ZXJTdGF0ZSog YnM7CisgIGdydWJfdWludDMyX3QgbWZ0X3NpemU7CisgIGdydWJfdWludDMyX3QgaWR4X3NpemU7 CisgIGdydWJfdWludDMyX3Qgc3BjOworICBncnViX3VpbnQzMl90IGJsb2Nrc2l6ZTsKKyAgZ3J1 Yl91aW50MzJfdCBtZnRfc3RhcnQ7CisgIGdydWJfdWludDY0X3QgdXVpZDsKK307CisKK3N0cnVj dCBncnViX250ZnNfY29tcAoreworICBCbG9ja0RyaXZlclN0YXRlKiBiczsKKyAgaW50IGNvbXBf aGVhZCwgY29tcF90YWlsOworICBncnViX3VpbnQzMl90IGNvbXBfdGFibGVbMTZdWzJdOworICBn cnViX3VpbnQzMl90IGNidWZfb2ZzLCBjYnVmX3Zjbiwgc3BjOworICBjaGFyICpjYnVmOworfTsK Kworc3RydWN0IGdydWJfbnRmc19ybHN0Cit7CisgIGludCBmbGFnczsKKyAgZ3J1Yl9kaXNrX2Fk ZHJfdCB0YXJnZXRfdmNuLCBjdXJyX3ZjbiwgbmV4dF92Y24sIGN1cnJfbGNuOworICBjaGFyICpj dXJfcnVuOworICBzdHJ1Y3QgZ3J1Yl9udGZzX2F0dHIgKmF0dHI7CisgIHN0cnVjdCBncnViX250 ZnNfY29tcCBjb21wOworfTsKKworCisKKworCisKKwordHlwZWRlZiBncnViX2Vycl90ICgqbnRm c2NvbXBfZnVuY190KSAoc3RydWN0IGdydWJfbnRmc19hdHRyICogYXQsIGNoYXIgKmRlc3QsCisJ CQkJICAgICAgIGdydWJfdWludDMyX3Qgb2ZzLCBncnViX3VpbnQzMl90IGxlbiwKKwkJCQkgICAg ICAgc3RydWN0IGdydWJfbnRmc19ybHN0ICogY3R4LAorCQkJCSAgICAgICBncnViX3VpbnQzMl90 IHZjbik7CisKK2V4dGVybiBudGZzY29tcF9mdW5jX3QgZ3J1Yl9udGZzY29tcF9mdW5jOworCitn cnViX2Vycl90IGdydWJfbnRmc19yZWFkX3J1bl9saXN0IChzdHJ1Y3QgZ3J1Yl9udGZzX3Jsc3Qg KmN0eCk7CisKKworCisKK2ludCBiZHJ2X3ByZWFkX2Zyb21fbGNuX29mX3ZvbHVtKEJsb2NrRHJp dmVyU3RhdGUgKmJzLCBpbnQ2NF90IG9mZnNldCwKKwkJCQkgdm9pZCAqYnVmMSwgaW50IGNvdW50 MSk7CisKK3N0cnVjdCBncnViX250ZnNfZGF0YSAqCitncnViX250ZnNfbW91bnQgKEJsb2NrRHJp dmVyU3RhdGUqIGJzLCBncnViX3VpbnQzMl90IHBhcnRfb2ZmX3NlY3Rvcik7CisKKworZ3J1Yl9l cnJfdAorZ3J1Yl9udGZzX2xzIChncnViX2ZpbGVfdCBmaWxlLCBjb25zdCBjaGFyICpwYXRoLAor CSAgICAgICBpbnQgKCpob29rKSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgY29uc3Qg c3RydWN0IGdydWJfZGlyaG9va19pbmZvICppbmZvLAorCQkJICAgIHZvaWQgKmNsb3N1cmUpLAor CSAgICAgIHZvaWQgKmNsb3N1cmUpOworCitncnViX2Vycl90CitncnViX250ZnNfb3BlbiAoZ3J1 Yl9maWxlX3QgZmlsZSwgY29uc3QgY2hhciAqbmFtZSk7CisKKworZ3J1Yl9zc2l6ZV90CitncnVi X250ZnNfcmVhZCAoZ3J1Yl9maWxlX3QgZmlsZSwgZ3J1Yl9vZmZfdCBvZmZzZXQsCisJCWdydWJf c2l6ZV90IGxlbiwgY2hhciAqYnVmKTsKKworCitncnViX2Vycl90CitncnViX250ZnNfY2xvc2Ug KGdydWJfZmlsZV90IGZpbGUpOworCisKKyNlbmRpZiAvKiAhIEdSVUJfTlRGU19IICovCmRpZmYg LS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4v cGFydGl0aW9uLmMgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vcGFydGl0aW9uLmMK LS0tIHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL3BhcnRpdGlvbi5jCTE5NzAtMDEt MDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1x ZW11LXhlbi9wYXJ0aXRpb24uYwkyMDEyLTEyLTI4IDE2OjAyOjQxLjAxNDkzNjcwMSArMDgwMApA QCAtMCwwICsxLDI0MCBAQAorI2luY2x1ZGUgInBhcnRpdGlvbi5oIgorI2luY2x1ZGUgPGVyci5o PgorCitzdGF0aWMgaW50IGlzX2Z1bGxfemVybyh2b2lkICpwLCB1aW50IGJ5dGVzKQoreworICBp bnQgaSA9IDA7CisgIHVpbnQ4X3QgKnAxID0gKHVpbnQ4X3QqKXA7CisgIHdoaWxlKGkgPCBieXRl cykKKyAgeworICAgIGlmKCpwMSAhPSAwKQorICAgIHsKKyAgICAgIHJldHVybiAwOworICAgIH1l bHNlCisgICAgeworICAgICAgaSsrOworICAgICAgcDErKzsKKyAgICB9CisgIH0KKyAgLy9wcmlu dGYoIi4uLi4uLi4uLi5mdWxsIHplcm8uLi4uLi5cbiIpOworICByZXR1cm4gMTsKK30KKworc3Rh dGljIHZvaWQgcmVhZF9wYXJ0aXRpb24odWludDhfdCAqcCwgc3RydWN0IHBhcnRpdGlvbl9yZWNv cmQgKnIpCit7CisgICAgci0+Ym9vdGFibGUgPSBwWzBdOworICAgIHItPnN0YXJ0X2hlYWQgPSBw WzFdOworICAgIHItPnN0YXJ0X2N5bGluZGVyID0gcFszXSB8ICgocFsyXSA8PCAyKSAmIDB4MDMw MCk7CisgICAgci0+c3RhcnRfc2VjdG9yID0gcFsyXSAmIDB4M2Y7CisgICAgci0+c3lzdGVtID0g cFs0XTsKKyAgICByLT5lbmRfaGVhZCA9IHBbNV07CisgICAgci0+ZW5kX2N5bGluZGVyID0gcFs3 XSB8ICgocFs2XSA8PCAyKSAmIDB4MzAwKTsKKyAgICByLT5lbmRfc2VjdG9yID0gcFs2XSAmIDB4 M2Y7CisgICAgci0+c3RhcnRfc2VjdG9yX2FicyA9IHBbOF0gfCBwWzldIDw8IDggfCBwWzEwXSA8 PCAxNiB8IHBbMTFdIDw8IDI0OworICAgIHItPm5iX3NlY3RvcnNfYWJzID0gcFsxMl0gfCBwWzEz XSA8PCA4IHwgcFsxNF0gPDwgMTYgfCBwWzE1XSA8PCAyNDsKK30KKworCisKK2NoYXIqIGp1ZGdl X2ZzKGxzX3BhcnRpdGlvbl90KiBwdCkKK3sKKyAgaWYocHQtPnBhcnQuc3lzdGVtPT0weDBiIHx8 IHB0LT5wYXJ0LnN5c3RlbT09MHgwMSkKKyAgICB7CisgICAgICBwdC0+ZnNfdHlwZSA9IEZTX0ZB VDsKKyAgICAgIHJldHVybiAoY2hhciopIkZBVDMyIjsKKyAgICB9CisgIGVsc2UgaWYocHQtPnBh cnQuc3lzdGVtPT0weDA3KQorICAgIHsKKyAgICAgIHB0LT5mc190eXBlID0gRlNfTlRGUzsKKyAg ICAgIHJldHVybiAoY2hhciopIk5URlMiOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHB0 LT5mc190eXBlID0gRlNfVU5LTk9XTjsKKyAgICAgIHJldHVybiAgKGNoYXIqKSJVTktOT1dOIjsK KyAgICB9Cit9CisKK2ludCBlbnVtX3BhcnRpdGlvbihCbG9ja0RyaXZlclN0YXRlICpicywgbHNf cGFydGl0aW9uX3QqIHBhcnRzKQoreworICAgIHN0cnVjdCBwYXJ0aXRpb25fcmVjb3JkIG1icls0 XTsKKyAgICB1aW50OF90IGRhdGFbNTEyXTsKKyAgICBpbnQgaTsKKyAgICBpbnQgZXh0X3BhcnRu dW0gPSA0OworICAgIHN0cnVjdCBwYXJ0aXRpb25fcmVjb3JkIGV4dFsxMF07CisgICAgdWludDhf dCBkYXRhMVs1MTJdOworICAgIGludCBqID0gMDsKKworICAgIGlmIChiZHJ2X3JlYWQoYnMsIDAs IGRhdGEsIDEpKQorICAgICAgICBlcnJ4KEVJTlZBTCwgImVycm9yIHdoaWxlIHJlYWRpbmciKTsK KworICAgIGlmIChkYXRhWzUxMF0gIT0gMHg1NSB8fCBkYXRhWzUxMV0gIT0gMHhhYSkgCisgICAg eworICAgICAgICBlcnJubyA9IC1FSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg ICAgCisgICAgaW50IGsgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIAorICAgIHsK KyAgICAgICAgcmVhZF9wYXJ0aXRpb24oJmRhdGFbNDQ2ICsgMTYgKiBpXSwgJm1icltpXSk7CisK KyAgICAgICAgaWYgKCFtYnJbaV0ubmJfc2VjdG9yc19hYnMpCisgICAgICAgICAgICBjb250aW51 ZTsKKwkvL3ByaW50ZigidGhlICVkIHBhcnRpdGlvbjpib290PTB4JXgsIHN0YXJ0PSV1LCBzeXN0 ZW09MHgleCwgdG90YWw9JXVcdCIsIAorCS8vICAgICAgIGkrMSwgbWJyW2ldLmJvb3RhYmxlLCBt YnJbaV0uc3RhcnRfc2VjdG9yX2FicywgbWJyW2ldLnN5c3RlbSwgbWJyW2ldLm5iX3NlY3RvcnNf YWJzKTsKKwlwYXJ0c1trXS5wYXJ0ID0gbWJyW2ldOworCXBhcnRzW2tdLmlkID0gaSsxOworCWsr KzsKKyAgICAgICAgaWYgKG1icltpXS5zeXN0ZW0gPT0gMHhGIHx8IG1icltpXS5zeXN0ZW0gPT0g MHg1KSAKKwl7CisJICAgIC8vcHJpbnRmKCJpcyBhIGV4dGVuZCBwYXJ0aXRpb24uLi4uLi5cbiIp OworCSAgICBpZiAoYmRydl9yZWFkKGJzLCBtYnJbaV0uc3RhcnRfc2VjdG9yX2FicywgZGF0YTEs IDEpKQorICAgICAgICAgICAgICAgIGVycngoRUlOVkFMLCAiZXJyb3Igd2hpbGUgcmVhZGluZyIp OworCSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkgICAgLy9kdW1wIGVicgorCSAg ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkgICAgdWludDMyX3QgZXh0X3N0YXJ0X3Nl Y3RvciA9IG1icltpXS5zdGFydF9zZWN0b3JfYWJzOworCSAgICBzdHJ1Y3QgcGFydGl0aW9uX3Jl Y29yZCBleHRfbmV4dCA9IHswfTsKKyAgICAgICAgICAgIHdoaWxlICgxKSAKKwkgICAgeworCSAg ICAgICAgcmVhZF9wYXJ0aXRpb24oJmRhdGExWzQ0NiArIDE2ICogMF0sICZleHRbal0pOworCQkv L3ByaW50ZigidGhlICVkdGggcGFydGl0aW9uOmJvb3Q9MHgleCwgc3RhcnQ9JXUsIHN5c3RlbT0w eCV4LCB0b3RhbD0ldVx0IiwKKwkJLy8gICAgICAgZXh0X3BhcnRudW0raisxLCBleHRbal0uYm9v dGFibGUsIGV4dFtqXS5zdGFydF9zZWN0b3JfYWJzK2V4dF9zdGFydF9zZWN0b3IsIAorCQkvLyAg ICAgICBleHRbal0uc3lzdGVtLCBleHRbal0ubmJfc2VjdG9yc19hYnMpOworCQkKKwkJCisJCWlm KDAgIT0gZXh0W2pdLm5iX3NlY3RvcnNfYWJzKSAKKwkJeworCQkgIGV4dFtqXS5zdGFydF9zZWN0 b3JfYWJzICs9IGV4dF9zdGFydF9zZWN0b3I7CisJCSAgaWYoaiA+IDApCisJCSAgICBleHRbal0u c3RhcnRfc2VjdG9yX2FicyArPSBleHRfbmV4dC5zdGFydF9zZWN0b3JfYWJzOworCQkgIHBhcnRz W2tdLnBhcnQgPSBleHRbal07CisJCSAgcGFydHNba10uaWQgPSBleHRfcGFydG51bSArIGogKzE7 CisJCSAgaysrOworCQkgIGorKzsKKwkgICAgICAgIH0KKwkJZWxzZQorCQl7CisJCSAgcHJpbnRm KCJuYl9zZWN0b3JzX2Ficz0wPj4+Pj4+Pj4+Pj4+XG4iKTsKKwkJfQorCQkvLy8vLy8vLy8vLy8v Ly8vLy8vLy8vCisJCWlmKGV4dFtqLTFdLnN5c3RlbSA9PSAweEYgKQorCQkgIHsKKwkJICAgIHBy aW50ZigiLi4uLi4uLi4uLi4uLi4uYWdhaW4gZXh0ZW5kLi4uLi4uLi4uLi4uLlxuIik7CisJCSAg ICBleHRfc3RhcnRfc2VjdG9yID0gZXh0W2otMV0uc3RhcnRfc2VjdG9yX2FicyArIGV4dF9zdGFy dF9zZWN0b3I7CisJCSAgICBpZiAoYmRydl9yZWFkKGJzLCBleHRfc3RhcnRfc2VjdG9yLCBkYXRh MSwgMSkpCisJCSAgICAgIGVycngoRUlOVkFMLCAiZXJyb3Igd2hpbGUgcmVhZGluZyIpOworCQkg ICAgY29udGludWU7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgOy8vcHJpbnRmKCJpcyBh IGxvZ2ljYWwgcGFydFxuIik7CisJCSAgfQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJcmVh ZF9wYXJ0aXRpb24oJmRhdGExWzQ0NiArIDE2ICogMV0sICZleHRfbmV4dCk7CisJCWlmIChpc19m dWxsX3plcm8oJmV4dF9uZXh0LCBzaXplb2YoZXh0X25leHQpKSkKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisKKwkJaWYgKGJkcnZfcmVhZChicywgZXh0X3N0YXJ0X3NlY3RvciArIGV4dF9u ZXh0LnN0YXJ0X3NlY3Rvcl9hYnMgLCBkYXRhMSwgMSkpCisJCSAgZXJyeChFSU5WQUwsICJlcnJv ciB3aGlsZSByZWFkaW5nIik7CisJICAgIH0KKwl9ZWxzZQorCXsKKwkgIDsvL3ByaW50ZigiaXMg YSBtYWluIHBhcnRpdGlvbi4uLi4uLlxuIik7CisJfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g azsKK30KKworCisKKworCitpbnQgZmluZF9wYXJ0aXRpb24oQmxvY2tEcml2ZXJTdGF0ZSAqYnMs IGludCBwYXJ0aXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90ICpvZmZzZXQs IG9mZl90ICpzaXplKQoreworICAgIHN0cnVjdCBwYXJ0aXRpb25fcmVjb3JkIG1icls0XTsKKyAg ICB1aW50OF90IGRhdGFbNTEyXTsKKyAgICBpbnQgaTsKKyAgICBpbnQgZXh0X3BhcnRudW0gPSA0 OworCisKKyAgICBpZiAoYmRydl9yZWFkKGJzLCAwLCBkYXRhLCAxKSkKKyAgICAgICAgZXJyeChF SU5WQUwsICJlcnJvciB3aGlsZSByZWFkaW5nIik7CisKKyAgICBpZiAoZGF0YVs1MTBdICE9IDB4 NTUgfHwgZGF0YVs1MTFdICE9IDB4YWEpIAorICAgIHsKKyAgICAgICAgZXJybm8gPSAtRUlOVkFM OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIGludCBrID0gMDsKKyAgICBm b3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAKKyAgICB7CisgICAgICAgIHJlYWRfcGFydGl0aW9uKCZk YXRhWzQ0NiArIDE2ICogaV0sICZtYnJbaV0pOworCisgICAgICAgIGlmICghbWJyW2ldLm5iX3Nl Y3RvcnNfYWJzKQorICAgICAgICAgICAgY29udGludWU7CisJLy9wcmludGYoInRoZSAlZCBwYXJ0 aXRpb246IiwgaSsxKTsKKwkKKyAgICAgICAgaWYgKG1icltpXS5zeXN0ZW0gPT0gMHhGIHx8IG1i cltpXS5zeXN0ZW0gPT0gMHg1KSAKKwl7CisJICAvL3ByaW50ZigiaXMgYSBleHRlbmQgcGFydGl0 aW9uLi4uLi4uXG4iKTsKKyAgICAgICAgICAgIHN0cnVjdCBwYXJ0aXRpb25fcmVjb3JkIGV4dFsx MF07CisgICAgICAgICAgICB1aW50OF90IGRhdGExWzUxMl07CisgICAgICAgICAgICBpbnQgaiA9 IDA7CisKKyAgICAgICAgICAgIGlmIChiZHJ2X3JlYWQoYnMsIG1icltpXS5zdGFydF9zZWN0b3Jf YWJzLCBkYXRhMSwgMSkpCisgICAgICAgICAgICAgICAgZXJyeChFSU5WQUwsICJlcnJvciB3aGls ZSByZWFkaW5nIik7CisJICAgIAorCSAgICB1aW50MzJfdCBleHRfc3RhcnRfc2VjdG9yID0gbWJy W2ldLnN0YXJ0X3NlY3Rvcl9hYnM7CisJICAgIHN0cnVjdCBwYXJ0aXRpb25fcmVjb3JkIGV4dF9u ZXh0ID0gezB9OworICAgICAgICAgICAgd2hpbGUgKDEpIAorCSAgICB7CisJICAgICAgICByZWFk X3BhcnRpdGlvbigmZGF0YTFbNDQ2ICsgMTYgKiAwXSwgJmV4dFtqXSk7CisJCXByaW50Zigic3Rh cnQ9JXUsIHRvdGFsPSV1LCBzeXN0ZW09MHgleFx0IiwKKwkJICAgICAgIGV4dFtqXS5zdGFydF9z ZWN0b3JfYWJzLCBleHRbal0ubmJfc2VjdG9yc19hYnMsIGV4dFtqXS5zeXN0ZW0pOworCQlwcmlu dGYoInRoZSAlZHRoIHBhcnRpdGlvbiBpcyBhIGxvZ2ljYWwgcGFydFxuIiwgZXh0X3BhcnRudW0g KyBqICsgMSk7CisJCQorCQlpZigwICE9IGV4dFtqXS5uYl9zZWN0b3JzX2FicykgCisJCXsKKwkJ ICBpZiAoKGV4dF9wYXJ0bnVtICsgaiArIDEpID09IHBhcnRpdGlvbikgCisJCSAgeworCQkgICAg ZXh0W2pdLnN0YXJ0X3NlY3Rvcl9hYnMgKz0gIGV4dF9zdGFydF9zZWN0b3I7CisJCSAgICBpZihq ID4gMCkKKwkJICAgICAgZXh0W2pdLnN0YXJ0X3NlY3Rvcl9hYnMgKz0gZXh0X25leHQuc3RhcnRf c2VjdG9yX2FiczsKKwkJICAgICpvZmZzZXQgPSAodWludDY0X3QpZXh0W2pdLnN0YXJ0X3NlY3Rv cl9hYnMgPDwgOTsKKwkJICAgICpzaXplID0gKHVpbnQ2NF90KWV4dFtqXS5uYl9zZWN0b3JzX2Fi cyA8PCA5OworCQkgICAgcmV0dXJuIDA7CisJCSAgfQorCQkgIGorKzsKKwkgICAgICAgIH0KKwkJ CisJCXJlYWRfcGFydGl0aW9uKCZkYXRhMVs0NDYgKyAxNiAqIDFdLCAmZXh0X25leHQpOworCQlp ZiAoaXNfZnVsbF96ZXJvKCZleHRfbmV4dCwgc2l6ZW9mKGV4dF9uZXh0KSkpCisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworCQkvL2V4dF9zdGFydF9zZWN0b3IgKz0gZXh0X25leHQuc3RhcnRf c2VjdG9yX2FiczsKKwkJaWYgKGJkcnZfcmVhZChicywgZXh0X3N0YXJ0X3NlY3RvciArIGV4dF9u ZXh0LnN0YXJ0X3NlY3Rvcl9hYnMsIGRhdGExLCAxKSkKKwkJICAgIGVycngoRUlOVkFMLCAiZXJy b3Igd2hpbGUgcmVhZGluZyIpOworCSAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSAKKwll bHNlIAorCXsKKwkgIC8vcHJpbnRmKCJpcyBhIG1haW4gcGFydGl0aW9uLi4uLi4uXG4iKTsKKwkg ICAgaWYgKChpICsgMSkgPT0gcGFydGl0aW9uKSAKKwkgICAgeworCSAgICAgICpvZmZzZXQgPSAo dWludDY0X3QpbWJyW2ldLnN0YXJ0X3NlY3Rvcl9hYnMgPDwgOTsKKwkgICAgICAqc2l6ZSA9ICh1 aW50NjRfdCltYnJbaV0ubmJfc2VjdG9yc19hYnMgPDwgOTsKKwkgICAgICByZXR1cm4gMDsKKwkg ICAgfQorCX0KKyAgICB9CisKKyAgICBlcnJubyA9IC1FTk9FTlQ7CisgICAgcmV0dXJuIC0xOwor fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vCmRpZmYgLS1leGNsdWRlPS5zdm4gLXJwTiAtVTggeGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUt cWVtdS14ZW4vcGFydGl0aW9uLmggeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vcGFy dGl0aW9uLmgKLS0tIHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11LXFlbXUteGVuL3BhcnRpdGlvbi5o CTE5NzAtMDEtMDEgMDc6MDA6MDAuMDAwMDAwMDAwICswNzAwCisrKyB4ZW4tNC4xLjItYi90b29s cy9pb2VtdS1xZW11LXhlbi9wYXJ0aXRpb24uaAkyMDEyLTEyLTI4IDE2OjAyOjQxLjAxNTk0MDIy NSArMDgwMApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9QQVJUSVRJT05fSAorI2RlZmluZSBf UEFSVElUSU9OX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVmIHN0cnVjdCBwYXJ0 aXRpb25fcmVjb3JkCit7CisgICAgdWludDhfdCBib290YWJsZTsKKyAgICB1aW50OF90IHN0YXJ0 X2hlYWQ7CisgICAgdWludDMyX3Qgc3RhcnRfY3lsaW5kZXI7CisgICAgdWludDhfdCBzdGFydF9z ZWN0b3I7CisgICAgdWludDhfdCBzeXN0ZW07CisgICAgdWludDhfdCBlbmRfaGVhZDsKKyAgICB1 aW50OF90IGVuZF9jeWxpbmRlcjsKKyAgICB1aW50OF90IGVuZF9zZWN0b3I7CisgICAgdWludDMy X3Qgc3RhcnRfc2VjdG9yX2FiczsKKyAgICB1aW50MzJfdCBuYl9zZWN0b3JzX2FiczsKK30gX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHBhcnRfcmVjb3JkX3Q7CisKKworCit0eXBlZGVmIGVudW0K KyAgeworICAgIEZTX1VOS05PV04gPSAwLAorICAgIEZTX0ZBVCwKKyAgICBGU19OVEZTCisgIH1G U19UWVBFOworCit0eXBlZGVmIHN0cnVjdCBsc19wYXJ0aXRpb24KK3sKKyAgcGFydF9yZWNvcmRf dCBwYXJ0OworICBpbnQgaWQ7CisgIEZTX1RZUEUgZnNfdHlwZTsKK31sc19wYXJ0aXRpb25fdDsK KworCitjaGFyKiBqdWRnZV9mcyhsc19wYXJ0aXRpb25fdCogcHQpOworCisjaW5jbHVkZSAiYmxv Y2tfaW50LmgiCitpbnQgZW51bV9wYXJ0aXRpb24oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGxzX3Bh cnRpdGlvbl90KiBwYXJ0cyk7CisKK2ludCBmaW5kX3BhcnRpdGlvbihCbG9ja0RyaXZlclN0YXRl ICpicywgaW50IHBhcnRpdGlvbiwKKwkJICAgb2ZmX3QgKm9mZnNldCwgb2ZmX3QgKnNpemUpOwor CisKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00LjEuMi1hL3Rvb2xz L2lvZW11LXFlbXUteGVuL3FlbXUtaW1nLmMgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14 ZW4vcWVtdS1pbWcuYwotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vcWVtdS1p bWcuYwkyMDExLTAyLTEyIDAxOjU0OjUxLjAwMDAwMDAwMCArMDgwMAorKysgeGVuLTQuMS4yLWIv dG9vbHMvaW9lbXUtcWVtdS14ZW4vcWVtdS1pbWcuYwkyMDEyLTEyLTI4IDE2OjAyOjQxLjAxNjkz MjYyMiArMDgwMApAQCAtMjAsMjMgKzIwLDM1IEBACiAgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAog ICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUyBJTgogICogVEhFIFNPRlRXQVJFLgogICovCiAjaW5jbHVkZSAicWVt dS1jb21tb24uaCIKICNpbmNsdWRlICJvc2RlcC5oIgogI2luY2x1ZGUgImJsb2NrX2ludC5oIgog I2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVyci5oPgorCisKKyNpbmNsdWRlICJwYXJ0 aXRpb24uaCIKKyNpbmNsdWRlICJmcy1jb21tLmgiCisjaW5jbHVkZSAiZmF0LmgiCisjaW5jbHVk ZSAibnRmcy5oIgorI2luY2x1ZGUgIm1pc2MuaCIKKworCisKIAogI2lmZGVmIF9XSU4zMgogI2Rl ZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAK IC8qIERlZmF1bHQgdG8gY2FjaGU9d3JpdGViYWNrIGFzIGRhdGEgaW50ZWdyaXR5IGlzIG5vdCBp bXBvcnRhbnQgZm9yIHFlbXUtdGNnLiAqLworI2RlZmluZSBNQVhfUEFSVElUSU9OUyAgICAyMAog I2RlZmluZSBCUkRWX09fRkxBR1MgQkRSVl9PX0NBQ0hFX1dCCiAKIHN0YXRpYyB2b2lkIFFFTVVf Tk9SRVRVUk4gZXJyb3IoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdmFfbGlzdCBhcDsK ICAgICB2YV9zdGFydChhcCwgZm10KTsKICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXUtaW1nOiAi KTsKICAgICB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOwpAQCAtNTMsMTYgKzY1LDE4IEBAIHN0 YXRpYyB2b2lkIGZvcm1hdF9wcmludCh2b2lkICpvcGFxdWUsIGMKIC8qIFBsZWFzZSBrZWVwIGlu IHN5bmNoIHdpdGggcWVtdS1pbWcudGV4aSAqLwogc3RhdGljIHZvaWQgaGVscCh2b2lkKQogewog ICAgIHByaW50ZigicWVtdS1pbWcgdmVyc2lvbiAiIFFFTVVfVkVSU0lPTiAiLCBDb3B5cmlnaHQg KGMpIDIwMDQtMjAwOCBGYWJyaWNlIEJlbGxhcmRcbiIKICAgICAgICAgICAgInVzYWdlOiBxZW11 LWltZyBjb21tYW5kIFtjb21tYW5kIG9wdGlvbnNdXG4iCiAgICAgICAgICAgICJRRU1VIGRpc2sg aW1hZ2UgdXRpbGl0eVxuIgogICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICJDb21tYW5kIHN5 bnRheDpcbiIKKyAgICAgICAgICAgIiAgbHMgWy12XSBbWy1sXSAtZCBkaXJlY3RvcnldIGltZ2Zp bGVcbiIKKyAgICAgICAgICAgIiAgY2F0IFstdl0gLWYgZmlsZSBpbWdmaWxlXG4iCiAgICAgICAg ICAgICIgIGNyZWF0ZSBbLWVdIFstNl0gWy1iIGJhc2VfaW1hZ2VdIFstZiBmbXRdIGZpbGVuYW1l IFtzaXplXVxuIgogICAgICAgICAgICAiICBjb21taXQgWy1mIGZtdF0gZmlsZW5hbWVcbiIKICAg ICAgICAgICAgIiAgY29udmVydCBbLWNdIFstZV0gWy02XSBbLWYgZm10XSBbLU8gb3V0cHV0X2Zt dF0gWy1CIG91dHB1dF9iYXNlX2ltYWdlXSBmaWxlbmFtZSBbZmlsZW5hbWUyIFsuLi5dXSBvdXRw dXRfZmlsZW5hbWVcbiIKICAgICAgICAgICAgIiAgaW5mbyBbLWYgZm10XSBmaWxlbmFtZVxuIgog ICAgICAgICAgICAiICBzbmFwc2hvdCBbLWwgfCAtYSBzbmFwc2hvdCB8IC1jIHNuYXBzaG90IHwg LWQgc25hcHNob3RdIGZpbGVuYW1lXG4iCiAgICAgICAgICAgICJcbiIKICAgICAgICAgICAgIkNv bW1hbmQgcGFyYW1ldGVyczpcbiIKICAgICAgICAgICAgIiAgJ2ZpbGVuYW1lJyBpcyBhIGRpc2sg aW1hZ2UgZmlsZW5hbWVcbiIKQEAgLTIwOSwxNiArMjIzLDM0MyBAQCBzdGF0aWMgQmxvY2tEcml2 ZXJTdGF0ZSAqYmRydl9uZXdfb3BlbihjCiAgICAgICAgIGlmIChyZWFkX3Bhc3N3b3JkKHBhc3N3 b3JkLCBzaXplb2YocGFzc3dvcmQpKSA8IDApCiAgICAgICAgICAgICBlcnJvcigiTm8gcGFzc3dv cmQgZ2l2ZW4iKTsKICAgICAgICAgaWYgKGJkcnZfc2V0X2tleShicywgcGFzc3dvcmQpIDwgMCkK ICAgICAgICAgICAgIGVycm9yKCJpbnZhbGlkIHBhc3N3b3JkIik7CiAgICAgfQogICAgIHJldHVy biBiczsKIH0KIAorc3RhdGljIHZvaWQgZ2V0X3BhcnRpdGlvbl9wYXRoKGNvbnN0IGNoYXIgKmRp ciwgaW50ICp3aGljaF9wYXJ0LCBjaGFyICoqcGF0aCkKK3sKKyAgICBzdGF0aWMgY2hhciBmdWxs X3BhdGhbNTEyXTsKKyAgICBjaGFyIHBhcnRbNV09e307CisKKyAgICBzdHJuY3B5KGZ1bGxfcGF0 aCwgZGlyLCA1MTIpOworICAgIGZ1bGxfcGF0aFs1MTFdID0gJ1wwJzsKKworICAgIC8vz97WxtLU L7+qzbcgveHOsgorICAgIGNoYXIgKnAxID0gZnVsbF9wYXRoICsgMTsKKyAgICBjaGFyICpwMiA9 IHN0cmNocihmdWxsX3BhdGggKyAxLCAnLycpOworICAgIGlmKCFwMikKKyAgICB7CisgICAgICAg IGVycngoMSwgImNoZWNrIHRoZSBmaWxlIHBhdGghXG4iKTsKKyAgICB9CisKKyAgICAqcGF0aCA9 IHAyOworICAgIHN0cm5jcHkocGFydCwgcDEsIHAyLXAxKTsKKyAgICAqd2hpY2hfcGFydCA9IGF0 b2kocGFydCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IGdydWJfZnMKK3sKKyAgICBncnViX29wZW4g b3BlbjsKKyAgICBncnViX2xzIGxzOworICAgIGdydWJfcmVhZCByZWFkOworICAgIGdydWJfY2xv c2UgY2xvc2U7Cit9Z3J1Yl9mc190OworCitzdGF0aWMgZ3J1Yl9mc190IGdydWJfZnNfcGx1Z1sx MF0gPSB7fTsKKworc3RhdGljIHZvaWQgZ3J1Yl9mc19wbHVnaW4odm9pZCkKK3sKKyAgZ3J1Yl9m c19wbHVnW0ZTX0ZBVF0ub3BlbiA9IGdydWJfZmF0X29wZW47CisgIGdydWJfZnNfcGx1Z1tGU19G QVRdLnJlYWQgPSBncnViX2ZhdF9yZWFkOworICBncnViX2ZzX3BsdWdbRlNfRkFUXS5jbG9zZSA9 IGdydWJfZmF0X2Nsb3NlOworICBncnViX2ZzX3BsdWdbRlNfRkFUXS5scyA9IGdydWJfZmF0X2xz OworCisgIGdydWJfZnNfcGx1Z1tGU19OVEZTXS5vcGVuID0gZ3J1Yl9udGZzX29wZW47CisgIGdy dWJfZnNfcGx1Z1tGU19OVEZTXS5yZWFkID0gZ3J1Yl9udGZzX3JlYWQ7CisgIGdydWJfZnNfcGx1 Z1tGU19OVEZTXS5jbG9zZSA9IGdydWJfbnRmc19jbG9zZTsKKyAgZ3J1Yl9mc19wbHVnW0ZTX05U RlNdLmxzID0gZ3J1Yl9udGZzX2xzOworfQorCitzdGF0aWMgaW50IGltZ19scyhpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgICAgaW50IGMgPSAtMTsKKyAgICBjaGFyICppbWdmaWxlID0gTlVM TDsKKyAgICBjaGFyICpkaXIgPSBOVUxMOworICAgIGNoYXIgdmVyYm9zZSA9IDA7CisgICAgc3Ry dWN0IGxzX2N0cmwgY3RybD17fTsKKworICAgIGZvcig7OykgCisgICAgeworICAgICAgICBjID0g Z2V0b3B0KGFyZ2MsIGFyZ3YsICJkOmhsdiIpOworICAgICAgICBpZiAoYyA9PSAtMSkKKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgIHN3aXRjaChjKSAKKyAgICAgICAgeworICAgICAgICAg ICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgICAgICBjdHJsLmRl dGFpbCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdoJzoK KyAgICAgICAgICAgICAgICBoZWxwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBkaXIgPSBvcHRhcmc7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGltZ2ZpbGUgPSBhcmd2W29wdGluZCsrXTsK KyAgICAKKyAgICBpZiAob3B0aW5kID4gYXJnYykKKyAgICAgIGhlbHAoKTsKKyAgICAKKyAgICBC bG9ja0RyaXZlclN0YXRlICpicyA9IGJkcnZfbmV3KCIiKTsKKyAgICBpZighYnMpCisgICAgICAg IGVycm9yKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgYmRydl9uZXdcbiIpOworICAgIGlmKGJkcnZf b3BlbihicywgaW1nZmlsZSwgQlJEVl9PX0ZMQUdTKSA8IDApCisgICAgICAgIGVycm9yKCJDb3Vs ZCBub3Qgb3BlbiAnJXMnXG4iLCBpbWdmaWxlKTsKKyAgICAKKyAgICBvZmZfdCBvZmZfYnl0ZXMg PSAwOworICAgIG9mZl90IHNpemVfYnl0ZXMgPSAwOworICAgIGludCBpID0gMDsKKyAgICBsc19w YXJ0aXRpb25fdCogcGFydHMgPSAobHNfcGFydGl0aW9uX3QqKW1hbGxvYyhNQVhfUEFSVElUSU9O UyAqIHNpemVvZihsc19wYXJ0aXRpb25fdCkpOworICAgIGludCBjb3VudCA9IGVudW1fcGFydGl0 aW9uKGJzLCBwYXJ0cyk7CisgICAgCisgICAgaWYoIWRpcikKKyAgICB7CisgICAgICAgIC8vZmlu ZF9wYXJ0aXRpb24oYnMsIDE1LCAmb2ZmX2J5dGVzLCAmc2l6ZV9ieXRlcyk7CisgICAgICAgIHBy aW50ZigiaWRcdGFjdGl2ZVx0dHlwZVx0ZnNcdHN0YXJ0X3NlY3Rvclx0dG90YWxfc2VjdG9yc1xu Iik7CisgICAgICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAg ICAgICAgIHByaW50ZigiJWRcdCVzXHQlc1x0JXNcdCV1XHQldVxuIiwgCisgICAgICAgICAgICAg ICAgICAgcGFydHNbaV0uaWQsIAorICAgICAgICAgICAgICAgICAgIHBhcnRzW2ldLnBhcnQuYm9v dGFibGU9PTB4ODAgPyAiYWN0aXZlIiA6ICJub25lLWFjdGl2ZSIsCisgICAgICAgICAgICAgICAg ICAgKHBhcnRzW2ldLnBhcnQuc3lzdGVtPT0weDBmIHx8IHBhcnRzW2ldLnBhcnQuc3lzdGVtPT0w eDA1KSA/ICJleHRlbmQiIDogKHBhcnRzW2ldLmlkPj01ID8gImxvZ2ljYWwiIDogInByaW1hcnki KSwKKyAgICAgICAgICAgICAgICAgICBqdWRnZV9mcygmcGFydHNbaV0pLAorICAgICAgICAgICAg ICAgICAgIHBhcnRzW2ldLnBhcnQuc3RhcnRfc2VjdG9yX2FicywKKyAgICAgICAgICAgICAgICAg ICBwYXJ0c1tpXS5wYXJ0Lm5iX3NlY3RvcnNfYWJzCisgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgfQorCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg ICAgICAgZ3J1Yl9mc19wbHVnaW4oKTsKKyAgICAgIAorICAgICAgICBncnViX2ZpbGVfdCBmaWxl ID0gTlVMTDsKKyAgICAgICAgY2hhciAqcGF0aCA9IE5VTEw7CisgICAgICAgIGludCB3aGljaF9w YXJ0ID0gMTsKKyAgICAgIAorICAgICAgICBmaWxlID0gKGdydWJfZmlsZV90KW1hbGxvYyhzaXpl b2YoKmZpbGUpKTsKKyAgICAgICAgZmlsZS0+YnMgPSBiczsKKyAgICAgICAgZmlsZS0+ZGF0YSA9 IE5VTEw7CisKKyAgICAgICAgaWYoJy8nICE9IGRpcltzdHJsZW4oZGlyKSAtIDFdKQorICAgICAg ICAgICAgc3RyY2F0KGRpciwgIi8iKTsKKworICAgICAgICBnZXRfcGFydGl0aW9uX3BhdGgoZGly LCAmd2hpY2hfcGFydCwgJnBhdGgpOworICAgICAgICBpZih3aGljaF9wYXJ0IDwgMSB8fCB3aGlj aF9wYXJ0ID4gY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi ZXJyb3I6IGNoZWNrIHRoZSBwYXJ0aXRpb24gbnVtYmVyIVxuIik7CisgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBmaWxlLT5wYXJ0X29mZl9zZWN0b3IgPSBwYXJ0 c1t3aGljaF9wYXJ0IC0gMV0ucGFydC5zdGFydF9zZWN0b3JfYWJzOworICAgICAgICBjdHJsLmRp cm5hbWUgPSBkaXI7CisgICAgICAgIHByaW50Zigiob5uYW1lXHQiCisgICAgICAgICAgICAgICAi c2l6ZShieXRlcylcdCIKKyAgICAgICAgICAgICAgICJkaXI/XHQiCisgICAgICAgICAgICAgICAi ZGF0ZVx0IgorICAgICAgICAgICAgICAgInRpbWWhv1xuIik7CisKKyAgICAgICAganVkZ2VfZnMo JnBhcnRzW3doaWNoX3BhcnQgLSAxXSk7CisgICAgICAgIEZTX1RZUEUgZnNfdHlwZSA9IHBhcnRz W3doaWNoX3BhcnQgLSAxXS5mc190eXBlOworICAgICAgICBpZiAoZnNfdHlwZSA9PSBGU19VTktO T1dOKSAKKyAgICAgICAgeworICAgICAgICAgICAgZXJyeCgxLCAidW5rbm93biBmaWxlIHN5c3Rl bSFcbiIpOworICAgICAgICB9CisKKyAgICAgICAgZ3J1Yl9mc19wbHVnW2ZzX3R5cGVdLmxzKGZp bGUsIHBhdGgsIE5VTEwsICh2b2lkKikmY3RybCk7CisgICAgICAgIGZpbGUtPmRhdGEgPyBmcmVl KGZpbGUtPmRhdGEpIDogMDsKKyAgICAgICAgZnJlZShmaWxlKTsKKyAgICB9CisgICAgCisgICAg CisgIGZhaWw6CisgICAgYmRydl9kZWxldGUoYnMpOworICAgIGZyZWUocGFydHMpOworICAgIHJl dHVybiAwOworfQorCisKKworc3RhdGljIGludCBpbWdfY2F0KGludCBhcmdjLCBjaGFyICoqYXJn dikKK3sKKyAgICBpbnQgYyA9IC0xOworICAgIGNoYXIgKmltZ2ZpbGUgPSBOVUxMOworICAgIGNo YXIgKmZpbGVuYW1lID0gTlVMTDsKKyAgICBjaGFyIHZlcmJvc2UgPSAwOworCisgICAgZm9yKDs7 KSB7CisgICAgICAgIGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImY6aHYiKTsKKyAgICAgICAgaWYg KGMgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3dpdGNoKGMpIHsKKyAgICAg ICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgICAgIHZlcmJvc2UgPSAxOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgaGVs cCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZic6CisgICAg ICAgICAgICAgICAgZmlsZW5hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorICAgIAorICAgIGltZ2ZpbGUgPSBhcmd2W29wdGluZCsrXTsKKyAgICBpZiAob3B0aW5k ID4gYXJnYykKKyAgICAgICAgaGVscCgpOworCisgICAgCisgICAgaWYoIWZpbGVuYW1lKQorICAg IHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjogc3BlY2lmaWMgdGhlIGZpbGUgdG8gc2hvdyFcbiIp OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgICAgICAKKyAgICBCbG9ja0RyaXZlclN0 YXRlICpicyA9IGJkcnZfbmV3KCIiKTsKKyAgICBpZighYnMpCisgICAgICAgIGVycngoLTEsICJO b3QgZW5vdWdoIG1lbW9yeSBmb3IgYmRydl9uZXdcbiIpOworICAgIGlmKGJkcnZfb3Blbihicywg aW1nZmlsZSwgQlJEVl9PX0ZMQUdTKSA8IDApCisgICAgICAgIGVycngoLTEsICJDb3VsZCBub3Qg b3BlbiAlc1xuIiwgaW1nZmlsZSk7CisgICAgCisKKyAgICB1aW50IGJ1Zl9zaXplID0gNDA5NjsK KyAgICBjaGFyKiBidWYgPSAoY2hhciopbWFsbG9jKGJ1Zl9zaXplKTsKKyAgICBvZmZfdCBvZmZf Ynl0ZXMgPSAwOworICAgIG9mZl90IHNpemVfYnl0ZXMgPSAwOworICAgIGludCBpID0gMDsKKyAg ICBsc19wYXJ0aXRpb25fdCAqcGFydHMgPSAobHNfcGFydGl0aW9uX3QqKW1hbGxvYyhNQVhfUEFS VElUSU9OUyAqIHNpemVvZihsc19wYXJ0aXRpb25fdCkpOworICAgIGludCBjb3VudCA9IGVudW1f cGFydGl0aW9uKGJzLCBwYXJ0cyk7CisgICAgCisgICAgICAgCisgICAgeworICAgICAgICBncnVi X2ZzX3BsdWdpbigpOworCisgICAgICAgIGdydWJfZmlsZV90IGZpbGUgPSBOVUxMOworICAgICAg ICBjaGFyICpwYXRoID0gTlVMTDsKKyAgICAgICAgaW50IHdoaWNoX3BhcnQgPSAxOworICAgICAg CisgICAgICAgIGZpbGUgPSAoZ3J1Yl9maWxlX3QpbWFsbG9jKHNpemVvZigqZmlsZSkpOworICAg ICAgICBmaWxlLT5icyA9IGJzOworICAgICAgICBmaWxlLT5kYXRhID0gTlVMTDsKKyAgICAgIAor ICAgICAgICBjaGFyKiBwID0gc3RyY2hyKGZpbGVuYW1lLCAnLycpOworICAgICAgICBpZighcCkK KyAgICAgICAgeworICAgICAgICAgICAgZXJyeCgtMSwgInBsZWFzZSBjaGVjayB0aGUgZmlsZSBw YXRoIVxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg ICBwID0gc3RyY2hyKHAsICcvJyk7CisgICAgICAgICAgICBpZighcCkgZXJyeCgtMSwgImNoZWNr IHRoZSBmaWxlIHBhdGghIVxuIik7CisgICAgICAgIH0KKwkgIAorICAgICAgICBnZXRfcGFydGl0 aW9uX3BhdGgoZmlsZW5hbWUsICZ3aGljaF9wYXJ0LCAmcGF0aCk7CisgICAgICAgIERCRygicGFy dD0lZCwgcGF0aD0lcyIsIHdoaWNoX3BhcnQsIHBhdGgpOworICAgICAgICBpZih3aGljaF9wYXJ0 IDwgMSB8fCB3aGljaF9wYXJ0ID4gY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50 ZigiZXJyb3I6IGNoZWNrIHRoZSBwYXJ0aXRpb24gbnVtYmVyIVxuIik7CisgICAgICAgICAgICBn b3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZmlsZS0+cGFydF9vZmZfc2VjdG9yID0gcGFy dHNbd2hpY2hfcGFydCAtIDFdLnBhcnQuc3RhcnRfc2VjdG9yX2FiczsKKyAgICAgICAganVkZ2Vf ZnMoJnBhcnRzW3doaWNoX3BhcnQgLSAxXSk7CisgICAgICAgIEZTX1RZUEUgZnNfdHlwZSA9IHBh cnRzW3doaWNoX3BhcnQgLSAxXS5mc190eXBlOworICAgICAgICAoZnNfdHlwZSA9PSBGU19VTktO T1dOKSA/IGVycngoMSwgInVua25vd24gZmlsZSBzeXN0ZW0hXG4iKSA6IDA7CisgICAgICAgIGdy dWJfZnNfdCBncnViX2ZzX3BsZyA9IGdydWJfZnNfcGx1Z1tmc190eXBlXTsKKyAgIAorICAgICAg ICBpZihncnViX2ZzX3BsZy5vcGVuKGZpbGUsIHBhdGgpID09IDApCisgICAgICAgIHsKKyAgICAg ICAgICAgIC8vcHJpbnRmKCJmaWxlIHNpemU9JXpkIGJ5dGVzXG4iLCAoZmlsZS0+c2l6ZSkpOwor CSAgCisgICAgICAgICAgICBncnViX3NpemVfdCBsZW4gPSBmaWxlLT5zaXplOworICAgICAgICAg ICAgZ3J1Yl9vZmZfdCBvZmYgPSAwOworICAgICAgICAgICAgY2hhciAgdG1wZmlsZVsyNTZdPXt9 OworICAgICAgICAgICAgc3RybmNweSh0bXBmaWxlLCBnZXRlbnYoIkhPTUUiKSwgc2l6ZW9mKHRt cGZpbGUpKTsKKyAgICAgICAgICAgIHRtcGZpbGVbc2l6ZW9mKHRtcGZpbGUpIC0gMV0gPSAnXDAn OworICAgICAgICAgICAgc3RyY2F0KHRtcGZpbGUsICIvdG1wLmZpbGUiKTsKKwkgICAgCisgICAg ICAgICAgICBpZighYnVmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBlcnJvcigi bm90IGVub3VnaCBtZW1vcnkhXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgZ3J1Yl9zaXplX3QgcmVhZGVkID0gMDsKKyAgICAgICAgICAgICAgICBncnViX3NpemVfdCBs ZWZ0ICA9IGxlbjsKKyAgICAgICAgICAgICAgICBncnViX3NpemVfdCB0b3RhbCA9IDA7CisgICAg ICAgICAgICAgICAgRklMRSogZiA9IGZvcGVuKHRtcGZpbGUgLCJ3Iik7CisgICAgICAgICAgICAg ICAgaWYoIWYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwZXJyb3Io ImZvcGVuIGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAg ICAgICAgICB9CisJICAgICAgCisJICAgICAgCisgICAgICAgICAgICAgICAgKGxlZnQgPiBidWZf c2l6ZSkgPyAobGVmdCA9IGJ1Zl9zaXplKSA6IDA7CisgICAgICAgICAgICAgICAgd2hpbGUoKHJl YWRlZCA9IGdydWJfZnNfcGxnLnJlYWQoZmlsZSwgb2ZmLCBsZWZ0LCBidWYpKQorICAgICAgICAg ICAgICAgICAgICAgICYmIHRvdGFsIDw9IGxlbgorICAgICAgICAgICAgICAgICAgICAgICYmIHJl YWRlZCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEQkcoInJl YWRlZD0lemQiLCByZWFkZWQpOworICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBmd3JpdGUo YnVmLCAxLCByZWFkZWQsIGYpOworICAgICAgICAgICAgICAgICAgICBvZmYgPSB0b3RhbDsKKyAg ICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlbiAtIHRvdGFsOworICAgICAgICAgICAgICAgICAg ICAobGVmdCA8PSBidWZfc2l6ZSkgPyAwICA6IChsZWZ0ID0gYnVmX3NpemUpOworICAgICAgICAg ICAgICAgICAgICBEQkcoInRvdGFsPSV6ZCIsIHRvdGFsKTsKKyAgICAgICAgICAgICAgICB9Owor ICAgICAgICAgICAgICAgIGZjbG9zZShmKTsKKwkgICAgICAKKyAgICAgICAgICAgICAgICBpZih0 b3RhbCAhPSBsZW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwZXJy b3IoInJlYWQgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgImNhdCAlcyIsIHRtcGZpbGUpOworICAgICAg ICAgICAgICAgICAgICBzeXN0ZW0oYnVmKTsKKyAgCisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg cHJpbnRmKCJvcGVuIGZhaWxlZCFcbiIpOworICAgICAgICB9CisgICAgICAKKyAgICAgIAorICAg ICAgICBncnViX2ZzX3BsZy5jbG9zZShmaWxlKTsKKyAgICAgICAgZnJlZShmaWxlKTsKKyAgICB9 CisgICAgCisgICAgCisgIGZhaWw6CisgICAgZnJlZShidWYpOworICAgIGJkcnZfZGVsZXRlKGJz KTsKKyAgICBmcmVlKHBhcnRzKTsKKyAgICByZXR1cm4gMDsKK30KKworCisKIHN0YXRpYyBpbnQg aW1nX2NyZWF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgaW50IGMsIHJldCwgZmxh Z3M7CiAgICAgY29uc3QgY2hhciAqZm10ID0gInJhdyI7CiAgICAgY29uc3QgY2hhciAqZmlsZW5h bWU7CiAgICAgY29uc3QgY2hhciAqYmFzZV9maWxlbmFtZSA9IE5VTEw7CiAgICAgdWludDY0X3Qg c2l6ZTsKICAgICBjb25zdCBjaGFyICpwOwpAQCAtODUwLDE2ICsxMTkxLDE3IEBAIHN0YXRpYyB2 b2lkIGltZ19zbmFwc2hvdChpbnQgYXJnYywgY2hhciAKICAgICB9CiAKICAgICAvKiBDbGVhbnVw ICovCiAgICAgYmRydl9kZWxldGUoYnMpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiB7CisgIAogICAgIGNvbnN0IGNoYXIgKmNtZDsKIAogICAgIGJkcnZfaW5pdCgpOwog ICAgIGlmIChhcmdjIDwgMikKICAgICAgICAgaGVscCgpOwogICAgIGNtZCA9IGFyZ3ZbMV07CiAg ICAgYXJnYy0tOyBhcmd2Kys7CiAgICAgaWYgKCFzdHJjbXAoY21kLCAiY3JlYXRlIikpIHsKQEAg LTg2NywxMyArMTIwOSwxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAg fSBlbHNlIGlmICghc3RyY21wKGNtZCwgImNvbW1pdCIpKSB7CiAgICAgICAgIGltZ19jb21taXQo YXJnYywgYXJndik7CiAgICAgfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImNvbnZlcnQiKSkgewog ICAgICAgICBpbWdfY29udmVydChhcmdjLCBhcmd2KTsKICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo Y21kLCAiaW5mbyIpKSB7CiAgICAgICAgIGltZ19pbmZvKGFyZ2MsIGFyZ3YpOwogICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChjbWQsICJzbmFwc2hvdCIpKSB7CiAgICAgICAgIGltZ19zbmFwc2hvdChh cmdjLCBhcmd2KTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJs cyIpKSB7CisgICAgICAgIGltZ19scyhhcmdjLCBhcmd2KTsgICAgCisgICAgfSBlbHNlIGlmICgh c3RyY21wKGNtZCwgImNhdCIpKSB7CisgICAgICAgIGltZ19jYXQoYXJnYywgYXJndik7CisgICAg fQorICAgIGVsc2UgewogICAgICAgICBoZWxwKCk7CiAgICAgfQorICAgIAogICAgIHJldHVybiAw OwogfQpkaWZmIC0tZXhjbHVkZT0uc3ZuIC1ycE4gLVU4IHhlbi00LjEuMi1hL3Rvb2xzL2lvZW11 LXFlbXUteGVuL3R5cGVzLmggeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVtdS14ZW4vdHlwZXMu aAotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4vdHlwZXMuaAkxOTcwLTAxLTAx IDA3OjAwOjAwLjAwMDAwMDAwMCArMDcwMAorKysgeGVuLTQuMS4yLWIvdG9vbHMvaW9lbXUtcWVt dS14ZW4vdHlwZXMuaAkyMDEyLTEyLTI4IDE2OjAyOjQxLjAxNjkzMjYyMiArMDgwMApAQCAtMCww ICsxLDM1IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAq ICBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNiwyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEdSVUJfVFlQRVNfQ1BV X0hFQURFUgorI2RlZmluZSBHUlVCX1RZUEVTX0NQVV9IRUFERVIJMQorCisvKiBUaGUgc2l6ZSBv ZiB2b2lkICouICAqLworI2RlZmluZSBHUlVCX1RBUkdFVF9TSVpFT0ZfVk9JRF9QCTQKKworLyog VGhlIHNpemUgb2YgbG9uZy4gICovCisjZGVmaW5lIEdSVUJfVEFSR0VUX1NJWkVPRl9MT05HCQk0 CisKKy8qIGkzODYgaXMgbGl0dGxlLWVuZGlhbi4gICovCisjdW5kZWYgR1JVQl9UQVJHRVRfV09S RFNfQklHRU5ESUFOCisKKyNkZWZpbmUgR1JVQl9UQVJHRVRfSTM4NgkJMQorCisjZGVmaW5lIEdS VUJfVEFSR0VUX01JTl9BTElHTgkJMQorCisjZW5kaWYgLyogISBHUlVCX1RZUEVTX0NQVV9IRUFE RVIgKi8KZGlmZiAtLWV4Y2x1ZGU9LnN2biAtcnBOIC1VOCB4ZW4tNC4xLjItYS90b29scy9pb2Vt dS1xZW11LXhlbi94ODZfNjQvdHlwZXMuaCB4ZW4tNC4xLjItYi90b29scy9pb2VtdS1xZW11LXhl bi94ODZfNjQvdHlwZXMuaAotLS0geGVuLTQuMS4yLWEvdG9vbHMvaW9lbXUtcWVtdS14ZW4veDg2 XzY0L3R5cGVzLmgJMTk3MC0wMS0wMSAwNzowMDowMC4wMDAwMDAwMDAgKzA3MDAKKysrIHhlbi00 LjEuMi1iL3Rvb2xzL2lvZW11LXFlbXUteGVuL3g4Nl82NC90eXBlcy5oCTIwMTItMTItMjggMTY6 MDI6NDEuMDE3ODAyMzcxICswODAwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgR1JVQiAgLS0g IEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIu ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lm bmRlZiBHUlVCX1RZUEVTX0NQVV9IRUFERVIKKyNkZWZpbmUgR1JVQl9UWVBFU19DUFVfSEVBREVS CTEKKworLyogVGhlIHNpemUgb2Ygdm9pZCAqLiAgKi8KKyNkZWZpbmUgR1JVQl9UQVJHRVRfU0la RU9GX1ZPSURfUAk4CisKKy8qIFRoZSBzaXplIG9mIGxvbmcuICAqLworI2lmZGVmIF9fTUlOR1cz Ml9fCisjZGVmaW5lIEdSVUJfVEFSR0VUX1NJWkVPRl9MT05HCQk0CisjZWxzZQorI2RlZmluZSBH UlVCX1RBUkdFVF9TSVpFT0ZfTE9ORwkJOAorI2VuZGlmCisKKy8qIHg4Nl82NCBpcyBsaXR0bGUt ZW5kaWFuLiAgKi8KKyN1bmRlZiBHUlVCX1RBUkdFVF9XT1JEU19CSUdFTkRJQU4KKworI2RlZmlu ZSBHUlVCX1RBUkdFVF9YODZfNjQJCTEKKworI2RlZmluZSBHUlVCX1RBUkdFVF9NSU5fQUxJR04J CTEKKworI2VuZGlmIC8qICEgR1JVQl9UWVBFU19DUFVfSEVBREVSICovCg== --047d7b66f24b9af9a904d1e55c43 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --047d7b66f24b9af9a904d1e55c43--