From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9862 invoked by alias); 28 Apr 2008 14:07:41 -0000 Received: (qmail 9207 invoked by uid 22791); 28 Apr 2008 14:07:34 -0000 X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 28 Apr 2008 14:07:02 +0000 Received: from spaceape12.eur.corp.google.com (spaceape12.eur.corp.google.com [172.28.16.146]) by smtp-out.google.com with ESMTP id m3SE6sk6014690 for ; Mon, 28 Apr 2008 15:06:54 +0100 Received: from wa-out-1112.google.com (wafk22.prod.google.com [10.114.187.22]) by spaceape12.eur.corp.google.com with ESMTP id m3SE5LfQ004512 for ; Mon, 28 Apr 2008 15:06:53 +0100 Received: by wa-out-1112.google.com with SMTP id k22so7663740waf.0 for ; Mon, 28 Apr 2008 07:06:53 -0700 (PDT) Received: by 10.114.150.1 with SMTP id x1mr6435986wad.46.1209391612077; Mon, 28 Apr 2008 07:06:52 -0700 (PDT) Received: by 10.115.107.18 with HTTP; Mon, 28 Apr 2008 07:06:51 -0700 (PDT) Message-ID: Date: Mon, 28 Apr 2008 18:37:00 -0000 From: "Doug Evans" To: "GDB Patches" Subject: Fwd: [RFA] new command to search memory In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_9855_17548984.1209391612071" References: <20080214021915.F3FE51C72F0@localhost> <20080226022335.GB4456@caradoc.them.org> <20080229031252.GA2897@caradoc.them.org> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-04/txt/msg00635.txt.bz2 ------=_Part_9855_17548984.1209391612071 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 819 Ping. ---------- Forwarded message ---------- From: Doug Evans Date: Wed, Apr 16, 2008 at 7:46 PM Subject: Re: [RFA] new command to search memory To: gdb-patches@sourceware.org Here's the revised "find" patch. It includes all requested changes to date. Could someone look at target.c:target_search_memory and make sure it's DTRT regarding handling targetdebug and falling back on a default? Given that we're not using inheritance here, the current code seems like the right way to go, but ... Ok to check in? There's still an outstanding issue of supporting this in gdbmi. I split find_command into two parts so adding this to gdbmi should be more straightforward. And there's also an outstanding issue of if/how to support substring searches. Both of these issues can wait I gather. ------=_Part_9855_17548984.1209391612071 Content-Type: text/plain; name=gdb-080416-findcmd-6.patch.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_ff4qdlmr0 Content-Disposition: attachment; filename=gdb-080416-findcmd-6.patch.txt Content-length: 64685 MjAwOC0wNC0xNiAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCU5l dyAiZmluZCIgY29tbWFuZC4KCSogTkVXUzogRG9jdW1lbnQgZmluZCBjb21t YW5kIGFuZCBxU2VhcmNoOm1lbW9yeSBwYWNrZXQuCgkqIE1ha2VmaWxlLmlu IChTRklMRVMpOiBBZGQgZmluZGNtZC5jLgoJKENPTU1PTl9PQkpTKTogQWRk IGZpbmRjbWQuby4KCShmaW5kY21kLm8pOiBOZXcgcnVsZS4KCSogZmluZGNt ZC5jOiBOZXcgZmlsZS4KCSogdGFyZ2V0LmggKHRhcmdldF9vcHMpOiBOZXcg bWVtYmVyIHRvX3NlYXJjaF9tZW1vcnkuCgkoc2ltcGxlX3NlYXJjaF9tZW1v cnkpOiBEZWNsYXJlLgoJKHRhcmdldF9zZWFyY2hfbWVtb3J5KTogRGVjbGFy ZS4KCSogdGFyZ2V0LmMgKHNpbXBsZV9zZWFyY2hfbWVtb3J5KTogTmV3IGZu LgoJKHRhcmdldF9zZWFyY2hfbWVtb3J5KTogTmV3IGZuLgoJKiByZW1vdGUu YyAoUEFDS0VUX3FTZWFyY2hfbWVtb3J5KTogTmV3IHBhY2tldCBraW5kLgoJ KHJlbW90ZV9zZWFyY2hfbWVtb3J5KTogTmV3IGZuLgoJKGluaXRfcmVtb3Rl X29wcyk6IEluaXQgdG9fc2VhcmNoX21lbW9yeS4KCShpbml0X2V4dGVuZGVk X3JlbW90ZV9vcHMpOiBEaXR0by4KCShfaW5pdGlhbGl6ZV9yZW1vdGUpOiBB ZGQgcVNlYXJjaDptZW1vcnkgcGFja2V0IGNvbmZpZyBjb21tYW5kLgoKCSog Z2Ric2VydmVyL01ha2VmaWxlLmluIChJTkNHTlVMSUIpOiBOZXcgdmFyaWFi bGUuCgkoSU5DTFVERV9DRkxBR1MpOiBBZGQgJChJTkNHTlVMSUIpLgoJKE9C Uyk6IEFkZCBtZW1tZW0uby4KCSogZ2Ric2VydmVyL3NlcnZlci5oIChkZWNv ZGVfc2VhcmNoX21lbW9yeV9wYWNrZXQpOiBEZWNsYXJlLgoJKiBnZGJzZXJ2 ZXIvcmVtb3RlLXV0aWxzLmMgKGRlY29kZV9zZWFyY2hfbWVtb3J5X3BhY2tl dCk6IE5ldyBmbi4KCSogZ2Ric2VydmVyL3NlcnZlci5jIChoYW5kbGVfc2Vh cmNoX21lbW9yeV8xKTogTmV3IGZuLgoJKGhhbmRsZV9zZWFyY2hfbWVtb3J5 KTogTmV3IGZuLgoJKGhhbmRsZV9xdWVyeSk6IFByb2Nlc3MgcVNlYXJjaDpt ZW1vcnkgcGFja2V0cy4KCgkqIGRvYy9nZGIudGV4aW5mbzogRG9jdW1lbnQg ImZpbmQiIGNvbW1hbmQsIHFTZWFyY2g6bWVtb3J5IHBhY2tldC4KCgkqIHRl c3RzdWl0ZS9nZGIuYmFzZS9maW5kLmV4cDogTmV3IGZpbGUuCgkqIHRlc3Rz dWl0ZS9nZGIuYmFzZS9maW5kLmM6IE5ldyBmaWxlLgoKSW5kZXg6IE1ha2Vm aWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy9nZGIvTWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTAwMApkaWZmIC11IC1wIC11IC1wIC1yMS4xMDAwIE1ha2VmaWxlLmlu Ci0tLSBNYWtlZmlsZS5pbgkxNCBBcHIgMjAwOCAxOTo0NzoyOSAtMDAwMAkx LjEwMDAKKysrIE1ha2VmaWxlLmluCTE3IEFwciAyMDA4IDAyOjM1OjIzIC0w MDAwCkBAIC02MDgsOSArNjA4LDggQEAgU0ZJTEVTID0gYWRhLWV4cC55IGFk YS1sYW5nLmMgYWRhLXR5cGVwcgogCWRieHJlYWQuYyBkZW1hbmdsZS5jIGRp Y3Rpb25hcnkuYyBkaXNhc20uYyBkb3VibGVzdC5jIGR1bW15LWZyYW1lLmMg XAogCWR3YXJmMmV4cHIuYyBkd2FyZjJsb2MuYyBkd2FyZjJyZWFkLmMgZHdh cmYyLWZyYW1lLmMgXAogCWVsZnJlYWQuYyBlbnZpcm9uLmMgZXZhbC5jIGV2 ZW50LWxvb3AuYyBldmVudC10b3AuYyBleHBwcmludC5jIFwKLQlmLWV4cC55 IGYtbGFuZy5jIGYtdHlwZXByaW50LmMgZi12YWxwcmludC5jIGZpbmR2YXIu YyBmcmFtZS5jIFwKLQlmcmFtZS1iYXNlLmMgXAotCWZyYW1lLXVud2luZC5j IFwKKwlmLWV4cC55IGYtbGFuZy5jIGYtdHlwZXByaW50LmMgZi12YWxwcmlu dC5jIGZpbmRjbWQuYyBmaW5kdmFyLmMgXAorCWZyYW1lLmMgZnJhbWUtYmFz ZS5jIGZyYW1lLXVud2luZC5jIFwKIAlnZGJhcmNoLmMgYXJjaC11dGlscy5j IGdkYnR5cGVzLmMgZ251LXYyLWFiaS5jIGdudS12My1hYmkuYyBcCiAJaW5m LWxvb3AuYyBcCiAJaW5mY2FsbC5jIFwKQEAgLTEwNTIsNiArMTA1MSw3IEBA IENPTU1PTl9PQlMgPSAkKERFUEZJTEVTKSAkKENPTkZJR19PQlMpICQKIAll dmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIu byBcCiAJZ2RiYXJjaC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJp Lm8gY29weWluZy5vIFwKIAltZW1hdHRyLm8gbWVtLWJyZWFrLm8gdGFyZ2V0 Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gXAorCWZpbmRjbWQu byBcCiAJc3RkLXJlZ3MubyBcCiAJc2lnbmFscy5vIFwKIAlnZGItZXZlbnRz Lm8gXApAQCAtMjEyNCw2ICsyMTI0LDggQEAgZmJzZC1uYXQubzogZmJzZC1u YXQuYyAkKGRlZnNfaCkgJChnZGJjbwogZi1leHAubzogZi1leHAuYyAkKGRl ZnNfaCkgJChnZGJfc3RyaW5nX2gpICQoZXhwcmVzc2lvbl9oKSAkKHZhbHVl X2gpIFwKIAkkKHBhcnNlcl9kZWZzX2gpICQobGFuZ3VhZ2VfaCkgJChmX2xh bmdfaCkgJChiZmRfaCkgJChzeW1maWxlX2gpIFwKIAkkKG9iamZpbGVzX2gp ICQoYmxvY2tfaCkKK2ZpbmRjbWQubzogZmluZGNtZC5jICQoZGVmc19oKSAk KGdkYl9zdHJpbmdfaCkgJChnZGJjbWRfaCkgJCh2YWx1ZV9oKSBcCisJJCh0 YXJnZXRfaCkKIGZpbmR2YXIubzogZmluZHZhci5jICQoZGVmc19oKSAkKHN5 bXRhYl9oKSAkKGdkYnR5cGVzX2gpICQoZnJhbWVfaCkgXAogCSQodmFsdWVf aCkgJChnZGJjb3JlX2gpICQoaW5mZXJpb3JfaCkgJCh0YXJnZXRfaCkgJChn ZGJfc3RyaW5nX2gpIFwKIAkkKGdkYl9hc3NlcnRfaCkgJChmbG9hdGZvcm1h dF9oKSAkKHN5bWZpbGVfaCkgJChyZWdjYWNoZV9oKSBcCkluZGV4OiBORVdT Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvTkVXUyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNjQKZGlmZiAt dSAtcCAtdSAtcCAtcjEuMjY0IE5FV1MKLS0tIE5FV1MJNCBBcHIgMjAwOCAx NTo1MToxNSAtMDAwMAkxLjI2NAorKysgTkVXUwkxNyBBcHIgMjAwOCAwMjoz NToyMyAtMDAwMApAQCAtMyw4ICszLDEzIEBACiAKICoqKiBDaGFuZ2VzIHNp bmNlIEdEQiA2LjgKIAorKiBOZXcgcmVtb3RlIHBhY2tldHMKKworcVNlYXJj aDptZW1vcnk6CisgIFNlYXJjaCBtZW1vcnkgZm9yIGEgc2VxdWVuY2Ugb2Yg Ynl0ZXMuCisKICogV2F0Y2hwb2ludHMgY2FuIG5vdyBiZSBzZXQgb24gdW5y ZWFkYWJsZSBtZW1vcnkgbG9jYXRpb25zLCBlLmcuIGFkZHJlc3Nlcwotd2hp Y2ggd2lsbCBiZSBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIGxhdGVyIGluIHBy b2dyYW0gZXhlY3V0aW9uLgorICB3aGljaCB3aWxsIGJlIGFsbG9jYXRlZCB1 c2luZyBtYWxsb2MgbGF0ZXIgaW4gcHJvZ3JhbSBleGVjdXRpb24uCiAKICog VGhlIHFYZmVyOmxpYnJhcmllczpyZWFkIHJlbW90ZSBwcm9jb3RvbCBwYWNr ZXQgbm93IGFsbG93cyBwYXNzaW5nIGEKICAgbGlzdCBvZiBzZWN0aW9uIG9m ZnNldHMuCkBAIC0zMCw2ICszNSwxMCBAQCBzaG93IG11bHRpcGxlLXN5bWJv bHMKICAgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgY2FuIGJlIGNoYW5n ZWQgdG8gYWRqdXN0IHRoZSBkZWJ1Z2dlciBiZWhhdmlvcgogICB3aGVuIGFu IGV4cHJlc3Npb24gb3IgYSBicmVha3BvaW50IGxvY2F0aW9uIGNvbnRhaW5z IGFuIGFtYmlndW91cyBzeW1ib2wKICAgbmFtZSAoYW4gb3ZlcmxvYWRlZCBm dW5jdGlvbiBuYW1lLCBmb3IgaW5zdGFuY2UpLgorCitmaW5kIFsvc2l6ZS1j aGFyXSBbL21heC1jb3VudF0gc3RhcnQtYWRkcmVzcywgZW5kLWFkZHJlc3N8 QHNlYXJjaC1zcGFjZS1zaXplLAorICAgIHZhbDEgWywgdmFsMiwgLi4uXQor ICBTZWFyY2ggbWVtb3J5IGZvciBhIHNlcXVlbmNlIG9mIGJ5dGVzLgogICAK ICoqKiBDaGFuZ2VzIGluIEdEQiA2LjgKIApJbmRleDogZmluZGNtZC5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGZpbmRjbWQuYwpkaWZm IC1OIGZpbmRjbWQuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKKysrIGZpbmRjbWQuYwkxNyBBcHIgMjAwOCAwMjozNToyMyAt MDAwMApAQCAtMCwwICsxLDMzNCBAQAorLyogVGhlIGZpbmQgY29tbWFuZC4K KworICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZz LmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlICJnZGJfc3RyaW5n LmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAidmFsdWUuaCIK KyNpbmNsdWRlICJ0YXJnZXQuaCIKKworLyogQ29waWVkIGZyb20gYmZkX3B1 dF9iaXRzLiAgKi8KKworc3RhdGljIHZvaWQKK3B1dF9iaXRzIChiZmRfdWlu dDY0X3QgZGF0YSwgY2hhciAqYnVmLCBpbnQgYml0cywgYmZkX2Jvb2xlYW4g YmlnX3ApCit7CisgIGludCBpOworICBpbnQgYnl0ZXM7CisKKyAgZ2RiX2Fz c2VydCAoYml0cyAlIDggPT0gMCk7CisKKyAgYnl0ZXMgPSBiaXRzIC8gODsK KyAgZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspCisgICAgeworICAgICAg aW50IGluZGV4ID0gYmlnX3AgPyBieXRlcyAtIGkgLSAxIDogaTsKKworICAg ICAgYnVmW2luZGV4XSA9IGRhdGEgJiAweGZmOworICAgICAgZGF0YSA+Pj0g ODsKKyAgICB9Cit9CisKKy8qIFN1YnJvdXRpbmUgb2YgZmluZF9jb21tYW5k IHRvIHNpbXBsaWZ5IGl0LgorICAgUGFyc2UgdGhlIGFyZ3VtZW50cyBvZiB0 aGUgImZpbmQiIGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9pZAorcGFyc2Vf ZmluZF9hcmdzIChjaGFyICphcmdzLCBVTE9OR0VTVCAqbWF4X2NvdW50cCwK KwkJIGNoYXIgKipwYXR0ZXJuX2J1ZnAsIFVMT05HRVNUICpwYXR0ZXJuX2xl bnAsCisJCSBDT1JFX0FERFIgKnN0YXJ0X2FkZHJwLCBVTE9OR0VTVCAqc2Vh cmNoX3NwYWNlX2xlbnApCit7CisgIC8qIERlZmF1bHQgdG8gdXNpbmcgdGhl IHNwZWNpZmllZCB0eXBlLiAgKi8KKyAgY2hhciBzaXplID0gJ1wwJzsKKyAg VUxPTkdFU1QgbWF4X2NvdW50ID0gfihVTE9OR0VTVCkgMDsKKyAgLyogQnVm ZmVyIHRvIGhvbGQgdGhlIHNlYXJjaCBwYXR0ZXJuLiAgKi8KKyAgY2hhciAq cGF0dGVybl9idWY7CisgIC8qIEN1cnJlbnQgc2l6ZSBvZiBzZWFyY2ggcGF0 dGVybiBidWZmZXIuCisgICAgIFdlIHJlYWxsb2Mgc3BhY2UgYXMgbmVlZGVk LiAgKi8KKyNkZWZpbmUgSU5JVElBTF9QQVRURVJOX0JVRl9TSVpFIDEwMAor ICBVTE9OR0VTVCBwYXR0ZXJuX2J1Zl9zaXplID0gSU5JVElBTF9QQVRURVJO X0JVRl9TSVpFOworICAvKiBQb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBsYXN0 IGluLXVzZSBwYXJ0IG9mIHBhdHRlcm5fYnVmLiAgKi8KKyAgY2hhciAqcGF0 dGVybl9idWZfZW5kOworICBVTE9OR0VTVCBwYXR0ZXJuX2xlbjsKKyAgQ09S RV9BRERSIHN0YXJ0X2FkZHI7CisgIFVMT05HRVNUIHNlYXJjaF9zcGFjZV9s ZW47CisgIGNoYXIgKnMgPSBhcmdzOworICBiZmRfYm9vbGVhbiBiaWdfcCA9 IGdkYmFyY2hfYnl0ZV9vcmRlciAoY3VycmVudF9nZGJhcmNoKSA9PSBCRkRf RU5ESUFOX0JJRzsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwczsK KyAgc3RydWN0IHZhbHVlICp2OworCisgIGlmIChhcmdzID09IE5VTEwpCisg ICAgZXJyb3IgKF8oIm1pc3Npbmcgc2VhcmNoIHBhcmFtZXRlcnMiKSk7CisK KyAgcGF0dGVybl9idWYgPSB4bWFsbG9jIChwYXR0ZXJuX2J1Zl9zaXplKTsK KyAgcGF0dGVybl9idWZfZW5kID0gcGF0dGVybl9idWY7CisgIG9sZF9jbGVh bnVwcyA9IG1ha2VfY2xlYW51cCAoZnJlZV9jdXJyZW50X2NvbnRlbnRzLCAm cGF0dGVybl9idWYpOworCisgIC8qIEdldCBzZWFyY2ggZ3JhbnVsYXJpdHkg YW5kL29yIG1heCBjb3VudCBpZiBzcGVjaWZpZWQuCisgICAgIFRoZXkgbWF5 IGJlIHNwZWNpZmllZCBpbiBlaXRoZXIgb3JkZXIsIHRvZ2V0aGVyIG9yIHNl cGFyYXRlbHkuICAqLworCisgIHdoaWxlICgqcyA9PSAnLycpCisgICAgewor ICAgICAgKytzOworCisgICAgICB3aGlsZSAoKnMgIT0gJ1wwJyAmJiAqcyAh PSAnLycgJiYgIWlzc3BhY2UgKCpzKSkKKwl7CisJICBpZiAoaXNkaWdpdCAo KnMpKQorCSAgICB7CisJICAgICAgbWF4X2NvdW50ID0gYXRvaSAocyk7CisJ ICAgICAgd2hpbGUgKGlzZGlnaXQgKCpzKSkKKwkJKytzOworCSAgICAgIGNv bnRpbnVlOworCSAgICB9CisKKwkgIHN3aXRjaCAoKnMpCisJICAgIHsKKwkg ICAgY2FzZSAnYic6CisJICAgIGNhc2UgJ2gnOgorCSAgICBjYXNlICd3JzoK KwkgICAgY2FzZSAnZyc6CisJICAgICAgc2l6ZSA9ICpzKys7CisJICAgICAg YnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgZXJyb3IgKF8oImludmFs aWQgc2l6ZSBncmFudWxhcml0eSIpKTsKKwkgICAgfQorCX0KKworICAgICAg d2hpbGUgKGlzc3BhY2UgKCpzKSkKKwkrK3M7CisgICAgfQorCisgIC8qIEdl dCB0aGUgc2VhcmNoIHJhbmdlLiAgKi8KKworICB2ID0gcGFyc2VfdG9fY29t bWFfYW5kX2V2YWwgKCZzKTsKKyAgc3RhcnRfYWRkciA9IHZhbHVlX2FzX2Fk ZHJlc3MgKHYpOworCisgIGlmICgqcyA9PSAnLCcpCisgICAgKytzOworICB3 aGlsZSAoaXNzcGFjZSAoKnMpKQorICAgICsrczsKKworICBpZiAoKnMgPT0g JysnKQorICAgIHsKKyAgICAgIExPTkdFU1QgbGVuOworICAgICAgKytzOwor ICAgICAgdiA9IHBhcnNlX3RvX2NvbW1hX2FuZF9ldmFsICgmcyk7CisgICAg ICBsZW4gPSB2YWx1ZV9hc19sb25nICh2KTsKKyAgICAgIGlmIChsZW4gPT0g MCkKKwl7CisJICBwcmludGZfZmlsdGVyZWQgKF8oImVtcHR5IHNlYXJjaCBy YW5nZVxuIikpOworCSAgcmV0dXJuOworCX0KKyAgICAgIGlmIChsZW4gPCAw KQorCWVycm9yIChfKCJpbnZhbGlkIGxlbmd0aCIpKTsKKyAgICAgIC8qIFdh dGNoIGZvciBvdmVyZmxvd3MuICAqLworICAgICAgaWYgKGxlbiA+IENPUkVf QUREUl9NQVgKKwkgIHx8IChzdGFydF9hZGRyICsgbGVuIC0gMSkgPCBzdGFy dF9hZGRyKQorCWVycm9yIChfKCJzZWFyY2ggc3BhY2UgdG9vIGxhcmdlIikp OworICAgICAgc2VhcmNoX3NwYWNlX2xlbiA9IGxlbjsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBDT1JFX0FERFIgZW5kX2FkZHI7CisgICAgICB2 ID0gcGFyc2VfdG9fY29tbWFfYW5kX2V2YWwgKCZzKTsKKyAgICAgIGVuZF9h ZGRyID0gdmFsdWVfYXNfYWRkcmVzcyAodik7CisgICAgICBpZiAoc3RhcnRf YWRkciA+IGVuZF9hZGRyKQorCWVycm9yIChfKCJpbnZhbGlkIHNlYXJjaCBz cGFjZSwgZW5kIHByZWNlZWRzIHN0YXJ0IikpOworICAgICAgc2VhcmNoX3Nw YWNlX2xlbiA9IGVuZF9hZGRyIC0gc3RhcnRfYWRkciArIDE7CisgICAgICAv KiBXZSBkb24ndCBzdXBwb3J0IHNlYXJjaGluZyBhbGwgb2YgbWVtb3J5CisJ IChpLmUuIHN0YXJ0PTAsIGVuZCA9IDB4ZmYuLmZmKS4KKwkgQmFpbCB0byBh dm9pZCBvdmVyZmxvd3MgbGF0ZXIgb24uICAqLworICAgICAgaWYgKHNlYXJj aF9zcGFjZV9sZW4gPT0gMCkKKwllcnJvciAoXygib3ZlcmZsb3cgaW4gYWRk cmVzcyByYW5nZSBjb21wdXRhdGlvbiwgY2hvb3NlIHNtYWxsZXIgcmFuZ2Ui KSk7CisgICAgfQorCisgIGlmICgqcyA9PSAnLCcpCisgICAgKytzOworCisg IC8qIEZldGNoIHRoZSBzZWFyY2ggc3RyaW5nLiAgKi8KKworICB3aGlsZSAo KnMgIT0gJ1wwJykKKyAgICB7CisgICAgICBMT05HRVNUIHg7CisgICAgICBp bnQgdmFsX2J5dGVzOworCisgICAgICAvKiBJZiB3ZSBzZWUgYSBzdHJpbmcs IHBhcnNlIGl0IG91cnNlbHZlcyByYXRoZXIgdGhhbiB0aGUgbm9ybWFsCisJ IGhhbmRsaW5nIG9mIGRvd25sb2FkaW5nIGl0IHRvIHRhcmdldCBtZW1vcnku ICAqLworCisgICAgICB3aGlsZSAoaXNzcGFjZSAoKnMpKQorCSsrczsKKwor ICAgICAgdiA9IHBhcnNlX3RvX2NvbW1hX2FuZF9ldmFsICgmcyk7CisgICAg ICB2YWxfYnl0ZXMgPSBUWVBFX0xFTkdUSCAodmFsdWVfdHlwZSAodikpOwor CisgICAgICAvKiBLZWVwIGl0IHNpbXBsZSBhbmQgYXNzdW1lIHNpemUgPT0g J2cnIHdoZW4gd2F0Y2hpbmcgZm9yIHdoZW4gd2UKKwkgbmVlZCB0byBncm93 IHRoZSBwYXR0ZXJuIGJ1Zi4gICovCisgICAgICBpZiAoKHBhdHRlcm5fYnVm X2VuZCAtIHBhdHRlcm5fYnVmICsgbWF4ICh2YWxfYnl0ZXMsIHNpemVvZiAo aW50NjRfdCkpKQorCSAgPiBwYXR0ZXJuX2J1Zl9zaXplKQorCXsKKwkgIHNp emVfdCBjdXJyZW50X29mZnNldCA9IHBhdHRlcm5fYnVmX2VuZCAtIHBhdHRl cm5fYnVmOworCSAgcGF0dGVybl9idWZfc2l6ZSAqPSAyOworCSAgcGF0dGVy bl9idWYgPSB4cmVhbGxvYyAocGF0dGVybl9idWYsIHBhdHRlcm5fYnVmX3Np emUpOworCSAgcGF0dGVybl9idWZfZW5kID0gcGF0dGVybl9idWYgKyBjdXJy ZW50X29mZnNldDsKKwl9CisKKyAgICAgIGlmIChzaXplICE9ICdcMCcpCisJ eworCSAgeCA9IHZhbHVlX2FzX2xvbmcgKHYpOworCSAgc3dpdGNoIChzaXpl KQorCSAgICB7CisJICAgIGNhc2UgJ2InOgorCSAgICAgICpwYXR0ZXJuX2J1 Zl9lbmQrKyA9IHg7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgJ2gnOgor CSAgICAgIHB1dF9iaXRzICh4LCBwYXR0ZXJuX2J1Zl9lbmQsIDE2LCBiaWdf cCk7CisJICAgICAgcGF0dGVybl9idWZfZW5kICs9IHNpemVvZiAoaW50MTZf dCk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgJ3cnOgorCSAgICAgIHB1 dF9iaXRzICh4LCBwYXR0ZXJuX2J1Zl9lbmQsIDMyLCBiaWdfcCk7CisJICAg ICAgcGF0dGVybl9idWZfZW5kICs9IHNpemVvZiAoaW50MzJfdCk7CisJICAg ICAgYnJlYWs7CisJICAgIGNhc2UgJ2cnOgorCSAgICAgIHB1dF9iaXRzICh4 LCBwYXR0ZXJuX2J1Zl9lbmQsIDY0LCBiaWdfcCk7CisJICAgICAgcGF0dGVy bl9idWZfZW5kICs9IHNpemVvZiAoaW50NjRfdCk7CisJICAgICAgYnJlYWs7 CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgbWVtY3B5IChwYXR0 ZXJuX2J1Zl9lbmQsIHZhbHVlX2NvbnRlbnRzX3JhdyAodiksIHZhbF9ieXRl cyk7CisJICBwYXR0ZXJuX2J1Zl9lbmQgKz0gdmFsX2J5dGVzOworCX0KKwor ICAgICAgaWYgKCpzID09ICcsJykKKwkrK3M7CisgICAgICB3aGlsZSAoaXNz cGFjZSAoKnMpKQorCSsrczsKKyAgICB9CisKKyAgaWYgKHBhdHRlcm5fYnVm X2VuZCA9PSBwYXR0ZXJuX2J1ZikKKyAgICBlcnJvciAoXygibWlzc2luZyBz ZWFyY2ggcGF0dGVybiIpKTsKKworICBwYXR0ZXJuX2xlbiA9IHBhdHRlcm5f YnVmX2VuZCAtIHBhdHRlcm5fYnVmOworCisgIGlmIChzZWFyY2hfc3BhY2Vf bGVuIDwgcGF0dGVybl9sZW4pCisgICAgZXJyb3IgKF8oInNlYXJjaCBzcGFj ZSB0b28gc21hbGwgdG8gY29udGFpbiBwYXR0ZXJuIikpOworCisgICptYXhf Y291bnRwID0gbWF4X2NvdW50OworICAqcGF0dGVybl9idWZwID0gcGF0dGVy bl9idWY7CisgICpwYXR0ZXJuX2xlbnAgPSBwYXR0ZXJuX2xlbjsKKyAgKnN0 YXJ0X2FkZHJwID0gc3RhcnRfYWRkcjsKKyAgKnNlYXJjaF9zcGFjZV9sZW5w ID0gc2VhcmNoX3NwYWNlX2xlbjsKKworICAvKiBXZSBzdWNjZXNzZnVsbHkg cGFyc2VkIHRoZSBhcmd1bWVudHMsIGxlYXZlIHRoZSBmcmVlaW5nIG9mIFBB VFRFUk5fQlVGCisgICAgIHRvIHRoZSBjYWxsZXIgbm93LiAgKi8KKyAgZGlz Y2FyZF9jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKK30KKworc3RhdGljIHZv aWQKK2ZpbmRfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQor eworICAvKiBDb21tYW5kIGxpbmUgcGFyYW1ldGVycy4KKyAgICAgVGhlc2Ug YXJlIGluaXRpYWxpemVkIHRvIGF2b2lkIHVuaW5pdGlhbGl6ZWQgd2Fybmlu Z3MgZnJvbSAtV2FsbC4gICovCisgIFVMT05HRVNUIG1heF9jb3VudCA9IDA7 CisgIGNoYXIgKnBhdHRlcm5fYnVmID0gMDsKKyAgVUxPTkdFU1QgcGF0dGVy bl9sZW4gPSAwOworICBDT1JFX0FERFIgc3RhcnRfYWRkciA9IDA7CisgIFVM T05HRVNUIHNlYXJjaF9zcGFjZV9sZW4gPSAwOworICAvKiBFbmQgb2YgY29t bWFuZCBsaW5lIHBhcmFtZXRlcnMuICAqLworICB1bnNpZ25lZCBpbnQgZm91 bmRfY291bnQ7CisgIENPUkVfQUREUiBsYXN0X2ZvdW5kX2FkZHI7CisgIHN0 cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7CisKKyAgcGFyc2VfZmluZF9h cmdzIChhcmdzLCAmbWF4X2NvdW50LCAmcGF0dGVybl9idWYsICZwYXR0ZXJu X2xlbiwgCisJCSAgICZzdGFydF9hZGRyLCAmc2VhcmNoX3NwYWNlX2xlbik7 CisKKyAgb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwIChmcmVlX2N1cnJl bnRfY29udGVudHMsICZwYXR0ZXJuX2J1Zik7CisKKyAgLyogUGVyZm9ybSB0 aGUgc2VhcmNoLiAgKi8KKworICBmb3VuZF9jb3VudCA9IDA7CisgIGxhc3Rf Zm91bmRfYWRkciA9IDA7CisKKyAgd2hpbGUgKHNlYXJjaF9zcGFjZV9sZW4g Pj0gcGF0dGVybl9sZW4KKwkgJiYgZm91bmRfY291bnQgPCBtYXhfY291bnQp CisgICAgeworICAgICAgLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyBp dGVyYXRpb24gdG8gdGhlIG5leHQgaXRlcmF0aW9uLiAgKi8KKyAgICAgIFVM T05HRVNUIG5leHRfaXRlcl9pbmNyOworICAgICAgQ09SRV9BRERSIGZvdW5k X2FkZHI7CisgICAgICBpbnQgZm91bmQgPSB0YXJnZXRfc2VhcmNoX21lbW9y eSAoc3RhcnRfYWRkciwgc2VhcmNoX3NwYWNlX2xlbiwKKwkJCQkJcGF0dGVy bl9idWYsIHBhdHRlcm5fbGVuLCAmZm91bmRfYWRkcik7CisKKyAgICAgIGlm IChmb3VuZCA8PSAwKQorCWJyZWFrOworCisgICAgICBwcmludF9hZGRyZXNz IChmb3VuZF9hZGRyLCBnZGJfc3Rkb3V0KTsKKyAgICAgIHByaW50Zl9maWx0 ZXJlZCAoIlxuIik7CisgICAgICArK2ZvdW5kX2NvdW50OworICAgICAgbGFz dF9mb3VuZF9hZGRyID0gZm91bmRfYWRkcjsKKworICAgICAgLyogQmVnaW4g bmV4dCBpdGVyYXRpb24gYXQgb25lIGJ5dGUgcGFzdCB0aGlzIG1hdGNoLiAg Ki8KKyAgICAgIG5leHRfaXRlcl9pbmNyID0gKGZvdW5kX2FkZHIgLSBzdGFy dF9hZGRyKSArIDE7CisKKyAgICAgIC8qIEZvciByb2J1c3RuZXNzLCB3ZSBk b24ndCBsZXQgc2VhcmNoX3NwYWNlX2xlbiBnbyAtdmUgaGVyZS4gICovCisg ICAgICBpZiAoc2VhcmNoX3NwYWNlX2xlbiA+PSBuZXh0X2l0ZXJfaW5jcikK KwlzZWFyY2hfc3BhY2VfbGVuIC09IG5leHRfaXRlcl9pbmNyOworICAgICAg ZWxzZQorCXNlYXJjaF9zcGFjZV9sZW4gPSAwOworICAgICAgc3RhcnRfYWRk ciArPSBuZXh0X2l0ZXJfaW5jcjsKKyAgICB9CisKKyAgLyogUmVjb3JkIGFu ZCBwcmludCB0aGUgcmVzdWx0cy4gICovCisKKyAgc2V0X2ludGVybmFsdmFy IChsb29rdXBfaW50ZXJuYWx2YXIgKCJudW1mb3VuZCIpLAorCQkgICB2YWx1 ZV9mcm9tX2xvbmdlc3QgKGJ1aWx0aW5fdHlwZV9pbnQsCisJCQkJICAgICAg IChMT05HRVNUKSBmb3VuZF9jb3VudCkpOworICBpZiAoZm91bmRfY291bnQg PiAwKQorICAgIHsKKyAgICAgIHNldF9pbnRlcm5hbHZhciAobG9va3VwX2lu dGVybmFsdmFyICgiXyIpLAorCQkgICAgICAgdmFsdWVfZnJvbV9wb2ludGVy IChidWlsdGluX3R5cGVfdm9pZF9kYXRhX3B0ciwKKwkJCQkJICAgbGFzdF9m b3VuZF9hZGRyKSk7CisgICAgfQorCisgIGlmIChmb3VuZF9jb3VudCA9PSAw KQorICAgIHByaW50Zl9maWx0ZXJlZCAoInBhdHRlcm4gbm90IGZvdW5kXG4i KTsKKyAgZWxzZQorICAgIHByaW50Zl9maWx0ZXJlZCAoIiVkIHBhdHRlcm4l cyBmb3VuZFxuIiwgZm91bmRfY291bnQsCisJCSAgICAgZm91bmRfY291bnQg PiAxID8gInMiIDogIiIpOworCisgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9tZW1fc2VhcmNoICh2b2lk KQoreworICBhZGRfY21kICgiZmluZCIsIGNsYXNzX3ZhcnMsIGZpbmRfY29t bWFuZCwgXygiXAorU2VhcmNoIG1lbW9yeSBmb3IgYSBzZXF1ZW5jZSBvZiBi eXRlcy5cblwKK1VzYWdlOlxuXAorZmluZCBbL3NpemUtY2hhcl0gWy9tYXgt Y291bnRdIHN0YXJ0LWFkZHJlc3MsIGVuZC1hZGRyZXNzLCBleHByMSBbLCBl eHByMiAuLi5dXG5cCitmaW5kIFsvc2l6ZS1jaGFyXSBbL21heC1jb3VudF0g c3RhcnQtYWRkcmVzcywgK2xlbmd0aCwgZXhwcjEgWywgZXhwcjIgLi4uXVxu XAorc2l6ZS1jaGFyIGlzIG9uZSBvZiBiLGgsdyxnIGZvciA4LDE2LDMyLDY0 IGJpdCB2YWx1ZXMgcmVzcGVjdGl2ZWx5LFxuXAorYW5kIGlmIG5vdCBzcGVj aWZpZWQgdGhlIHNpemUgaXMgdGFrZW4gZnJvbSB0aGUgdHlwZSBvZiB0aGUg ZXhwcmVzc2lvblxuXAoraW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXG5cCitO b3RlIHRoYXQgdGhpcyBtZWFucyBmb3IgZXhhbXBsZSB0aGF0IGluIHRoZSBj YXNlIG9mIEMtbGlrZSBsYW5ndWFnZXNcblwKK2Egc2VhcmNoIGZvciBhbiB1 bnR5cGVkIDB4NDIgd2lsbCBzZWFyY2ggZm9yIFwiKGludCkgMHg0MlwiXG5c Cit3aGljaCBpcyB0eXBpY2FsbHkgZm91ciBieXRlcy5cblwKK1xuXAorVGhl IGFkZHJlc3Mgb2YgdGhlIGxhc3QgbWF0Y2ggaXMgc3RvcmVkIGFzIHRoZSB2 YWx1ZSBvZiBcIiRfXCIuXG5cCitDb252ZW5pZW5jZSB2YXJpYWJsZSBcIiRu dW1mb3VuZFwiIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIG1hdGNoZXMuIiks CisJICAgJmNtZGxpc3QpOworfQpJbmRleDogcmVtb3RlLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9yZW1v dGUuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yODYKZGlmZiAtdSAtcCAt dSAtcCAtcjEuMjg2IHJlbW90ZS5jCi0tLSByZW1vdGUuYwkyMSBNYXIgMjAw OCAxNzowOTozNSAtMDAwMAkxLjI4NgorKysgcmVtb3RlLmMJMTcgQXByIDIw MDggMDI6MzU6MjQgLTAwMDAKQEAgLTkzNSw2ICs5MzUsNyBAQCBlbnVtIHsK ICAgUEFDS0VUX3FHZXRUTFNBZGRyLAogICBQQUNLRVRfcVN1cHBvcnRlZCwK ICAgUEFDS0VUX1FQYXNzU2lnbmFscywKKyAgUEFDS0VUX3FTZWFyY2hfbWVt b3J5LAogICBQQUNLRVRfdkF0dGFjaCwKICAgUEFDS0VUX3ZSdW4sCiAgIFBB Q0tFVF9NQVgKQEAgLTYxNzYsNiArNjE3Nyw5MyBAQCByZW1vdGVfeGZlcl9w YXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqCiAgIHJldHVybiBzdHJsZW4g KChjaGFyICopIHJlYWRidWYpOwogfQogCitzdGF0aWMgaW50CityZW1vdGVf c2VhcmNoX21lbW9yeSAoc3RydWN0IHRhcmdldF9vcHMqIG9wcywKKwkJICAg ICAgQ09SRV9BRERSIHN0YXJ0X2FkZHIsIFVMT05HRVNUIHNlYXJjaF9zcGFj ZV9sZW4sCisJCSAgICAgIGNvbnN0IGdkYl9ieXRlICpwYXR0ZXJuLCBVTE9O R0VTVCBwYXR0ZXJuX2xlbiwKKwkJICAgICAgQ09SRV9BRERSICpmb3VuZF9h ZGRycCkKK3sKKyAgc3RydWN0IHJlbW90ZV9zdGF0ZSAqcnMgPSBnZXRfcmVt b3RlX3N0YXRlICgpOworICBpbnQgbWF4X3NpemUgPSBnZXRfbWVtb3J5X3dy aXRlX3BhY2tldF9zaXplICgpOworICBzdHJ1Y3QgcGFja2V0X2NvbmZpZyAq cGFja2V0ID0KKyAgICAmcmVtb3RlX3Byb3RvY29sX3BhY2tldHNbUEFDS0VU X3FTZWFyY2hfbWVtb3J5XTsKKyAgLyogbnVtYmVyIG9mIHBhY2tldCBieXRl cyB1c2VkIHRvIGVuY29kZSB0aGUgcGF0dGVybiwKKyAgICAgdGhpcyBjb3Vs ZCBiZSBtb3JlIHRoYW4gUEFUVEVSTl9MRU4gZHVlIHRvIGVzY2FwZSBjaGFy YWN0ZXJzICovCisgIGludCBlc2NhcGVkX3BhdHRlcm5fbGVuOworICAvKiBh bW91bnQgb2YgcGF0dGVybiB0aGF0IHdhcyBlbmNvZGFibGUgaW4gdGhlIHBh Y2tldCAqLworICBpbnQgdXNlZF9wYXR0ZXJuX2xlbjsKKyAgaW50IGk7Cisg IGludCBmb3VuZDsKKyAgVUxPTkdFU1QgZm91bmRfYWRkcjsKKworICAvKiBE b24ndCBnbyB0byB0aGUgdGFyZ2V0IGlmIHdlIGRvbid0IGhhdmUgdG8uCisg ICAgIFRoaXMgaXMgZG9uZSBiZWZvcmUgY2hlY2tpbmcgcGFja2V0LT5zdXBw b3J0IHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSB0aGF0CisgICAgIGEgc3Vj Y2VzcyBmb3IgdGhpcyBlZGdlIGNhc2UgbWVhbnMgdGhlIGZhY2lsaXR5IHdv cmtzIGluIGdlbmVyYWwuICAqLworICBpZiAocGF0dGVybl9sZW4gPiBzZWFy Y2hfc3BhY2VfbGVuKQorICAgIHJldHVybiAwOworICBpZiAocGF0dGVybl9s ZW4gPT0gMCkKKyAgICB7CisgICAgICAqZm91bmRfYWRkcnAgPSBzdGFydF9h ZGRyOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIElmIHdlIGFs cmVhZHkga25vdyB0aGUgcGFja2V0IGlzbid0IHN1cHBvcnRlZCwgZmFsbCBi YWNrIHRvIHRoZSBzaW1wbGUKKyAgICAgd2F5IG9mIHNlYXJjaGluZyBtZW1v cnkuICAqLworCisgIGlmIChwYWNrZXQtPnN1cHBvcnQgPT0gUEFDS0VUX0RJ U0FCTEUpCisgICAgeworICAgICAgLyogVGFyZ2V0IGRvZXNuJ3QgcHJvdmlk ZWQgc3BlY2lhbCBzdXBwb3J0LCBmYWxsIGJhY2sgYW5kIHVzZSB0aGUKKwkg c3RhbmRhcmQgc3VwcG9ydCAoY29weSBtZW1vcnkgYW5kIGRvIHRoZSBzZWFy Y2ggaGVyZSkuICAqLworICAgICAgcmV0dXJuIHNpbXBsZV9zZWFyY2hfbWVt b3J5IChvcHMsIHN0YXJ0X2FkZHIsIHNlYXJjaF9zcGFjZV9sZW4sCisJCQkJ ICAgcGF0dGVybiwgcGF0dGVybl9sZW4sIGZvdW5kX2FkZHJwKTsKKyAgICB9 CisKKyAgLyogSW5zZXJ0IGhlYWRlci4gICovCisgIGkgPSBzbnByaW50ZiAo cnMtPmJ1ZiwgbWF4X3NpemUsIAorCQkicVNlYXJjaDptZW1vcnk6JXM7JXM7 IiwKKwkJcGFkZHJfbnogKHN0YXJ0X2FkZHIpLAorCQlwaGV4X256IChzZWFy Y2hfc3BhY2VfbGVuLCBzaXplb2YgKHNlYXJjaF9zcGFjZV9sZW4pKSk7Cisg IG1heF9zaXplIC09IChpICsgMSk7CisKKyAgLyogRXNjYXBlIGFzIG11Y2gg ZGF0YSBhcyBmaXRzIGludG8gcnMtPmJ1Zi4gICovCisgIGVzY2FwZWRfcGF0 dGVybl9sZW4gPQorICAgIHJlbW90ZV9lc2NhcGVfb3V0cHV0IChwYXR0ZXJu LCBwYXR0ZXJuX2xlbiwgKHJzLT5idWYgKyBpKSwKKwkJCSAgJnVzZWRfcGF0 dGVybl9sZW4sIG1heF9zaXplKTsKKworICAvKiBCYWlsIGlmIHRoZSBwYXR0 ZXJuIGlzIHRvbyBsYXJnZS4gICovCisgIGlmICh1c2VkX3BhdHRlcm5fbGVu ICE9IHBhdHRlcm5fbGVuKQorICAgIGVycm9yICgicGF0dGVybiBpcyB0b28g bGFyZ2UgdG8gdHJhbnNtaXQgdG8gcmVtb3RlIHRhcmdldCIpOworCisgIGlm IChwdXRwa3RfYmluYXJ5IChycy0+YnVmLCBpICsgZXNjYXBlZF9wYXR0ZXJu X2xlbikgPCAwCisgICAgICB8fCBnZXRwa3Rfc2FuZSAoJnJzLT5idWYsICZy cy0+YnVmX3NpemUsIDApIDwgMAorICAgICAgfHwgcGFja2V0X29rIChycy0+ YnVmLCBwYWNrZXQpICE9IFBBQ0tFVF9PSykKKyAgICB7CisgICAgICAvKiBU aGUgcmVxdWVzdCBtYXkgbm90IGhhdmUgd29ya2VkIGJlY2F1c2UgdGhlIGNv bW1hbmQgaXMgbm90CisJIHN1cHBvcnRlZC4gIElmIHNvLCBmYWxsIGJhY2sg dG8gdGhlIHNpbXBsZSB3YXkuICAqLworICAgICAgaWYgKHBhY2tldC0+c3Vw cG9ydCA9PSBQQUNLRVRfRElTQUJMRSkKKwl7CisJICByZXR1cm4gc2ltcGxl X3NlYXJjaF9tZW1vcnkgKG9wcywgc3RhcnRfYWRkciwgc2VhcmNoX3NwYWNl X2xlbiwKKwkJCQkgICAgICAgcGF0dGVybiwgcGF0dGVybl9sZW4sIGZvdW5k X2FkZHJwKTsKKwl9CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlm IChycy0+YnVmWzBdID09ICcwJykKKyAgICBmb3VuZCA9IDA7CisgIGVsc2Ug aWYgKHJzLT5idWZbMF0gPT0gJzEnKQorICAgIHsKKyAgICAgIGZvdW5kID0g MTsKKyAgICAgIGlmIChycy0+YnVmWzFdICE9ICcsJykKKwllcnJvciAoXygi dW5rbm93biBxU2VhcmNoOm1lbW9yeSByZXBseTogJXMiKSwgcnMtPmJ1Zik7 CisgICAgICB1bnBhY2tfdmFybGVuX2hleCAocnMtPmJ1ZiArIDIsICZmb3Vu ZF9hZGRyKTsKKyAgICAgICpmb3VuZF9hZGRycCA9IGZvdW5kX2FkZHI7Cisg ICAgfQorICBlbHNlCisgICAgZXJyb3IgKF8oInVua25vd24gcVNlYXJjaDpt ZW1vcnkgcmVwbHk6ICVzIiksIHJzLT5idWYpOworCisgIHJldHVybiBmb3Vu ZDsKK30KKwogc3RhdGljIHZvaWQKIHJlbW90ZV9yY21kIChjaGFyICpjb21t YW5kLAogCSAgICAgc3RydWN0IHVpX2ZpbGUgKm91dGJ1ZikKQEAgLTcyMzcs NiArNzMyNSw3IEBAIFNwZWNpZnkgdGhlIHNlcmlhbCBkZXZpY2UgaXQgaXMg Y29ubmVjdGUKICAgcmVtb3RlX29wcy50b19mbGFzaF9lcmFzZSA9IHJlbW90 ZV9mbGFzaF9lcmFzZTsKICAgcmVtb3RlX29wcy50b19mbGFzaF9kb25lID0g cmVtb3RlX2ZsYXNoX2RvbmU7CiAgIHJlbW90ZV9vcHMudG9fcmVhZF9kZXNj cmlwdGlvbiA9IHJlbW90ZV9yZWFkX2Rlc2NyaXB0aW9uOworICByZW1vdGVf b3BzLnRvX3NlYXJjaF9tZW1vcnkgPSByZW1vdGVfc2VhcmNoX21lbW9yeTsK ICAgcmVtb3RlX29wcy50b19jYW5fYXN5bmNfcCA9IHJlbW90ZV9yZXR1cm5f emVybzsKICAgcmVtb3RlX29wcy50b19pc19hc3luY19wID0gcmVtb3RlX3Jl dHVybl96ZXJvOwogfQpAQCAtNzM4NCw2ICs3NDczLDcgQEAgU3BlY2lmeSB0 aGUgc2VyaWFsIGRldmljZSBpdCBpcyBjb25uZWN0ZQogICByZW1vdGVfYXN5 bmNfb3BzLnRvX2ZsYXNoX2VyYXNlID0gcmVtb3RlX2ZsYXNoX2VyYXNlOwog ICByZW1vdGVfYXN5bmNfb3BzLnRvX2ZsYXNoX2RvbmUgPSByZW1vdGVfZmxh c2hfZG9uZTsKICAgcmVtb3RlX2FzeW5jX29wcy50b19yZWFkX2Rlc2NyaXB0 aW9uID0gcmVtb3RlX3JlYWRfZGVzY3JpcHRpb247CisgIHJlbW90ZV9hc3lu Y19vcHMudG9fc2VhcmNoX21lbW9yeSA9IHJlbW90ZV9zZWFyY2hfbWVtb3J5 OwogfQogCiAvKiBTZXQgdXAgdGhlIGFzeW5jIGV4dGVuZGVkIHJlbW90ZSB2 ZWN0b3IgYnkgbWFraW5nIGEgY29weSBvZiB0aGUgc3RhbmRhcmQKQEAgLTc2 NTAsNiArNzc0MCw5IEBAIFNob3cgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUg YWRkcmVzcyAoaW4KICAgYWRkX3BhY2tldF9jb25maWdfY21kICgmcmVtb3Rl X3Byb3RvY29sX3BhY2tldHNbUEFDS0VUX3FTdXBwb3J0ZWRdLAogCQkJICJx U3VwcG9ydGVkIiwgInN1cHBvcnRlZC1wYWNrZXRzIiwgMCk7CiAKKyAgYWRk X3BhY2tldF9jb25maWdfY21kICgmcmVtb3RlX3Byb3RvY29sX3BhY2tldHNb UEFDS0VUX3FTZWFyY2hfbWVtb3J5XSwKKwkJCSAicVNlYXJjaDptZW1vcnki LCAic2VhcmNoLW1lbW9yeSIsIDApOworCiAgIGFkZF9wYWNrZXRfY29uZmln X2NtZCAoJnJlbW90ZV9wcm90b2NvbF9wYWNrZXRzW1BBQ0tFVF92RmlsZV9v cGVuXSwKIAkJCSAidkZpbGU6b3BlbiIsICJob3N0aW8tb3BlbiIsIDApOwog CkluZGV4OiB0YXJnZXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3RhcmdldC5jLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjE1OQpkaWZmIC11IC1wIC11IC1wIC1yMS4xNTkgdGFyZ2V0 LmMKLS0tIHRhcmdldC5jCTI4IE1hciAyMDA4IDE2OjM3OjA4IC0wMDAwCTEu MTU5CisrKyB0YXJnZXQuYwkxNyBBcHIgMjAwOCAwMjozNToyNCAtMDAwMApA QCAtNDY5LDYgKzQ2OSw3IEBAIHVwZGF0ZV9jdXJyZW50X3RhcmdldCAodm9p ZCkKICAgICAgIElOSEVSSVQgKHRvX21ha2VfY29yZWZpbGVfbm90ZXMsIHQp OwogICAgICAgSU5IRVJJVCAodG9fZ2V0X3RocmVhZF9sb2NhbF9hZGRyZXNz LCB0KTsKICAgICAgIC8qIERvIG5vdCBpbmhlcml0IHRvX3JlYWRfZGVzY3Jp cHRpb24uICAqLworICAgICAgLyogRG8gbm90IGluaGVyaXQgdG9fc2VhcmNo X21lbW9yeS4gICovCiAgICAgICBJTkhFUklUICh0b19tYWdpYywgdCk7CiAg ICAgICAvKiBEbyBub3QgaW5oZXJpdCB0b19tZW1vcnlfbWFwLiAgKi8KICAg ICAgIC8qIERvIG5vdCBpbmhlcml0IHRvX2ZsYXNoX2VyYXNlLiAgKi8KQEAg LTE3NDMsNiArMTc0NCwxNTcgQEAgdGFyZ2V0X3JlYWRfZGVzY3JpcHRpb24g KHN0cnVjdCB0YXJnZXRfbwogICByZXR1cm4gTlVMTDsKIH0KIAorLyogVGhl IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdG9fc2VhcmNoX21lbW9yeS4K KyAgIFRoaXMgaW1wbGVtZW50cyBhIGJhc2ljIHNlYXJjaCBvZiBtZW1vcnks IHJlYWRpbmcgdGFyZ2V0IG1lbW9yeSBhbmQKKyAgIHBlcmZvcm1pbmcgdGhl IHNlYXJjaCBoZXJlIChhcyBvcHBvc2VkIHRvIHBlcmZvcm1pbmcgdGhlIHNl YXJjaCBpbiBvbiB0aGUKKyAgIHRhcmdldCBzaWRlIHdpdGgsIGZvciBleGFt cGxlLCBnZGJzZXJ2ZXIpLiAgKi8KKworaW50CitzaW1wbGVfc2VhcmNoX21l bW9yeSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywKKwkJICAgICAgQ09SRV9B RERSIHN0YXJ0X2FkZHIsIFVMT05HRVNUIHNlYXJjaF9zcGFjZV9sZW4sCisJ CSAgICAgIGNvbnN0IGdkYl9ieXRlICpwYXR0ZXJuLCBVTE9OR0VTVCBwYXR0 ZXJuX2xlbiwKKwkJICAgICAgQ09SRV9BRERSICpmb3VuZF9hZGRycCkKK3sK KyAgLyogTk9URTogYWxzbyBkZWZpbmVkIGluIGZpbmQuYyB0ZXN0Y2FzZS4g ICovCisjZGVmaW5lIFNFQVJDSF9DSFVOS19TSVpFIDE2MDAwCisgIGNvbnN0 IHVuc2lnbmVkIGNodW5rX3NpemUgPSBTRUFSQ0hfQ0hVTktfU0laRTsKKyAg LyogQnVmZmVyIHRvIGhvbGQgbWVtb3J5IGNvbnRlbnRzIGZvciBzZWFyY2hp bmcuICAqLworICBnZGJfYnl0ZSAqc2VhcmNoX2J1ZjsKKyAgdW5zaWduZWQg c2VhcmNoX2J1Zl9zaXplOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzOworCisgIHNlYXJjaF9idWZfc2l6ZSA9IGNodW5rX3NpemUgKyBwYXR0 ZXJuX2xlbiAtIDE7CisKKyAgLyogTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGFs bG9jYXRlIGEgYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBzZWFyY2ggc3BhY2Uu ICAqLworICBpZiAoc2VhcmNoX3NwYWNlX2xlbiA8IHNlYXJjaF9idWZfc2l6 ZSkKKyAgICBzZWFyY2hfYnVmX3NpemUgPSBzZWFyY2hfc3BhY2VfbGVuOwor CisgIHNlYXJjaF9idWYgPSBtYWxsb2MgKHNlYXJjaF9idWZfc2l6ZSk7Cisg IGlmIChzZWFyY2hfYnVmID09IE5VTEwpCisgICAgZXJyb3IgKF8oInVuYWJs ZSB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gcGVyZm9ybSB0aGUgc2VhcmNoIikp OworICBvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKGZyZWVfY3VycmVu dF9jb250ZW50cywgJnNlYXJjaF9idWYpOworCisgIC8qIFByaW1lIHRoZSBz ZWFyY2ggYnVmZmVyLiAgKi8KKworICBpZiAodGFyZ2V0X3JlYWQgKG9wcywg VEFSR0VUX09CSkVDVF9NRU1PUlksIE5VTEwsCisJCSAgIHNlYXJjaF9idWYs IHN0YXJ0X2FkZHIsIHNlYXJjaF9idWZfc2l6ZSkgIT0gc2VhcmNoX2J1Zl9z aXplKQorICAgIHsKKyAgICAgIHdhcm5pbmcgKF8oInVuYWJsZSB0byBhY2Nl c3MgdGFyZ2V0IG1lbW9yeSBhdCAlcywgaGFsdGluZyBzZWFyY2giKSwKKwkg ICAgICAgaGV4X3N0cmluZyAoc3RhcnRfYWRkcikpOworICAgICAgZG9fY2xl YW51cHMgKG9sZF9jbGVhbnVwcyk7CisgICAgICByZXR1cm4gLTE7CisgICAg fQorCisgIC8qIFBlcmZvcm0gdGhlIHNlYXJjaC4KKworICAgICBUaGUgbG9v cCBpcyBrZXB0IHNpbXBsZSBieSBhbGxvY2F0aW5nIFtOICsgcGF0dGVybi1s ZW5ndGggLSAxXSBieXRlcy4KKyAgICAgV2hlbiB3ZSd2ZSBzY2FubmVkIE4g Ynl0ZXMgd2UgY29weSB0aGUgdHJhaWxpbmcgYnl0ZXMgdG8gdGhlIHN0YXJ0 IGFuZAorICAgICByZWFkIGluIGFub3RoZXIgTiBieXRlcy4gICovCisKKyAg d2hpbGUgKHNlYXJjaF9zcGFjZV9sZW4gPj0gcGF0dGVybl9sZW4pCisgICAg eworICAgICAgZ2RiX2J5dGUgKmZvdW5kX3B0cjsKKyAgICAgIHVuc2lnbmVk IG5yX3NlYXJjaF9ieXRlcyA9IG1pbiAoc2VhcmNoX3NwYWNlX2xlbiwgc2Vh cmNoX2J1Zl9zaXplKTsKKworICAgICAgZm91bmRfcHRyID0gbWVtbWVtIChz ZWFyY2hfYnVmLCBucl9zZWFyY2hfYnl0ZXMsCisJCQkgIHBhdHRlcm4sIHBh dHRlcm5fbGVuKTsKKworICAgICAgaWYgKGZvdW5kX3B0ciAhPSBOVUxMKQor CXsKKwkgIENPUkVfQUREUiBmb3VuZF9hZGRyID0gc3RhcnRfYWRkciArIChm b3VuZF9wdHIgLSBzZWFyY2hfYnVmKTsKKwkgICpmb3VuZF9hZGRycCA9IGZv dW5kX2FkZHI7CisJICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKwkg IHJldHVybiAxOworCX0KKworICAgICAgLyogTm90IGZvdW5kIGluIHRoaXMg Y2h1bmssIHNraXAgdG8gbmV4dCBjaHVuay4gICovCisKKyAgICAgIC8qIERv bid0IGxldCBzZWFyY2hfc3BhY2VfbGVuIHdyYXAgaGVyZSwgaXQncyB1bnNp Z25lZC4gICovCisgICAgICBpZiAoc2VhcmNoX3NwYWNlX2xlbiA+PSBjaHVu a19zaXplKQorCXNlYXJjaF9zcGFjZV9sZW4gLT0gY2h1bmtfc2l6ZTsKKyAg ICAgIGVsc2UKKwlzZWFyY2hfc3BhY2VfbGVuID0gMDsKKworICAgICAgaWYg KHNlYXJjaF9zcGFjZV9sZW4gPj0gcGF0dGVybl9sZW4pCisJeworCSAgdW5z aWduZWQga2VlcF9sZW4gPSBzZWFyY2hfYnVmX3NpemUgLSBjaHVua19zaXpl OworCSAgQ09SRV9BRERSIHJlYWRfYWRkciA9IHN0YXJ0X2FkZHIgKyBrZWVw X2xlbjsKKwkgIGludCBucl90b19yZWFkOworCisJICAvKiBDb3B5IHRoZSB0 cmFpbGluZyBwYXJ0IG9mIHRoZSBwcmV2aW91cyBpdGVyYXRpb24gdG8gdGhl IGZyb250CisJICAgICBvZiB0aGUgYnVmZmVyIGZvciB0aGUgbmV4dCBpdGVy YXRpb24uICAqLworCSAgZ2RiX2Fzc2VydCAoa2VlcF9sZW4gPT0gcGF0dGVy bl9sZW4gLSAxKTsKKwkgIG1lbWNweSAoc2VhcmNoX2J1Ziwgc2VhcmNoX2J1 ZiArIGNodW5rX3NpemUsIGtlZXBfbGVuKTsKKworCSAgbnJfdG9fcmVhZCA9 IG1pbiAoc2VhcmNoX3NwYWNlX2xlbiAtIGtlZXBfbGVuLCBjaHVua19zaXpl KTsKKworCSAgaWYgKHRhcmdldF9yZWFkIChvcHMsIFRBUkdFVF9PQkpFQ1Rf TUVNT1JZLCBOVUxMLAorCQkJICAgc2VhcmNoX2J1ZiArIGtlZXBfbGVuLCBy ZWFkX2FkZHIsCisJCQkgICBucl90b19yZWFkKSAhPSBucl90b19yZWFkKQor CSAgICB7CisJICAgICAgd2FybmluZyAoXygidW5hYmxlIHRvIGFjY2VzcyB0 YXJnZXQgbWVtb3J5IGF0ICVzLCBoYWx0aW5nIHNlYXJjaCIpLAorCQkgICAg ICAgaGV4X3N0cmluZyAocmVhZF9hZGRyKSk7CisJICAgICAgZG9fY2xlYW51 cHMgKG9sZF9jbGVhbnVwcyk7CisJICAgICAgcmV0dXJuIC0xOworCSAgICB9 CisKKwkgIHN0YXJ0X2FkZHIgKz0gY2h1bmtfc2l6ZTsKKwl9CisgICAgfQor CisgIC8qIE5vdCBmb3VuZC4gICovCisKKyAgZG9fY2xlYW51cHMgKG9sZF9j bGVhbnVwcyk7CisgIHJldHVybiAwOworfQorCisvKiBTZWFyY2ggU0VBUkNI X1NQQUNFX0xFTiBieXRlcyBiZWdpbm5pbmcgYXQgU1RBUlRfQUREUiBmb3Ig dGhlCisgICBzZXF1ZW5jZSBvZiBieXRlcyBpbiBQQVRURVJOIHdpdGggbGVu Z3RoIFBBVFRFUk5fTEVOLgorCisgICBUaGUgcmVzdWx0IGlzIDEgaWYgZm91 bmQsIDAgaWYgbm90IGZvdW5kLCBhbmQgLTEgaWYgdGhlcmUgd2FzIGFuIGVy cm9yCisgICByZXF1aXJpbmcgaGFsdGluZyBvZiB0aGUgc2VhcmNoIChlLmcu IG1lbW9yeSByZWFkIGVycm9yKS4KKyAgIElmIHRoZSBwYXR0ZXJuIGlzIGZv dW5kIHRoZSBhZGRyZXNzIGlzIHJlY29yZGVkIGluIEZPVU5EX0FERFJQLiAg Ki8KKworaW50Cit0YXJnZXRfc2VhcmNoX21lbW9yeSAoQ09SRV9BRERSIHN0 YXJ0X2FkZHIsIFVMT05HRVNUIHNlYXJjaF9zcGFjZV9sZW4sCisJCSAgICAg IGNvbnN0IGdkYl9ieXRlICpwYXR0ZXJuLCBVTE9OR0VTVCBwYXR0ZXJuX2xl biwKKwkJICAgICAgQ09SRV9BRERSICpmb3VuZF9hZGRycCkKK3sKKyAgc3Ry dWN0IHRhcmdldF9vcHMgKnQ7CisgIGludCBmb3VuZDsKKworICAvKiBXZSBk b24ndCB1c2UgSU5IRVJJVCB0byBzZXQgY3VycmVudF90YXJnZXQudG9fc2Vh cmNoX21lbW9yeSwKKyAgICAgc28gd2UgaGF2ZSB0byBzY2FuIHRoZSB0YXJn ZXQgc3RhY2sgYW5kIGhhbmRsZSB0YXJnZXRkZWJ1ZworICAgICBvdXJzZWx2 ZXMuICAqLworCisgIGlmICh0YXJnZXRkZWJ1ZykKKyAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJ0YXJnZXRfc2VhcmNoX21lbW9yeSAo JXMsIC4uLilcbiIsCisJCQloZXhfc3RyaW5nIChzdGFydF9hZGRyKSk7CisK KyAgZm9yICh0ID0gY3VycmVudF90YXJnZXQuYmVuZWF0aDsgdCAhPSBOVUxM OyB0ID0gdC0+YmVuZWF0aCkKKyAgICBpZiAodC0+dG9fc2VhcmNoX21lbW9y eSAhPSBOVUxMKQorICAgICAgYnJlYWs7CisKKyAgaWYgKHQgIT0gTlVMTCkK KyAgICB7CisgICAgICBmb3VuZCA9IHQtPnRvX3NlYXJjaF9tZW1vcnkgKHQs IHN0YXJ0X2FkZHIsIHNlYXJjaF9zcGFjZV9sZW4sCisJCQkJICAgcGF0dGVy biwgcGF0dGVybl9sZW4sIGZvdW5kX2FkZHJwKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICAvKiBJZiBhIHNwZWNpYWwgdmVyc2lvbiBvZiB0b19z ZWFyY2hfbWVtb3J5IGlzbid0IGF2YWlsYWJsZSwgdXNlIHRoZQorCSBzaW1w bGUgdmVyc2lvbi4gICovCisgICAgICBmb3VuZCA9IHNpbXBsZV9zZWFyY2hf bWVtb3J5ICgmY3VycmVudF90YXJnZXQsCisJCQkJICAgIHN0YXJ0X2FkZHIs IHNlYXJjaF9zcGFjZV9sZW4sCisJCQkJICAgIHBhdHRlcm4sIHBhdHRlcm5f bGVuLCBmb3VuZF9hZGRycCk7CisgICAgfQorCisgIGlmICh0YXJnZXRkZWJ1 ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICIgID0g JWRcbiIsIGZvdW5kKTsKKworICByZXR1cm4gZm91bmQ7Cit9CisKIC8qIExv b2sgdGhyb3VnaCB0aGUgY3VycmVudGx5IHB1c2hlZCB0YXJnZXRzLiAgSWYg bm9uZSBvZiB0aGVtIHdpbGwKICAgIGJlIGFibGUgdG8gcmVzdGFydCB0aGUg Y3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcywgaXNzdWUgYW4gZXJyb3IKICAg IG1lc3NhZ2UuICAqLwpJbmRleDogdGFyZ2V0LmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi90YXJnZXQuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTYKZGlmZiAtdSAtcCAtdSAtcCAt cjEuMTE2IHRhcmdldC5oCi0tLSB0YXJnZXQuaAk4IEFwciAyMDA4IDE3OjAy OjIzIC0wMDAwCTEuMTE2CisrKyB0YXJnZXQuaAkxNyBBcHIgMjAwOCAwMjoz NToyNCAtMDAwMApAQCAtNDk3LDYgKzQ5NywxNyBAQCBzdHJ1Y3QgdGFyZ2V0 X29wcwogICAgICAgIHdhcyBhdmFpbGFibGUuICAqLwogICAgIGNvbnN0IHN0 cnVjdCB0YXJnZXRfZGVzYyAqKCp0b19yZWFkX2Rlc2NyaXB0aW9uKSAoc3Ry dWN0IHRhcmdldF9vcHMgKm9wcyk7CiAKKyAgICAvKiBTZWFyY2ggU0VBUkNI X1NQQUNFX0xFTiBieXRlcyBiZWdpbm5pbmcgYXQgU1RBUlRfQUREUiBmb3Ig dGhlCisgICAgICAgc2VxdWVuY2Ugb2YgYnl0ZXMgaW4gUEFUVEVSTiB3aXRo IGxlbmd0aCBQQVRURVJOX0xFTi4KKworICAgICAgIFRoZSByZXN1bHQgaXMg MSBpZiBmb3VuZCwgMCBpZiBub3QgZm91bmQsIGFuZCAtMSBpZiB0aGVyZSB3 YXMgYW4gZXJyb3IKKyAgICAgICByZXF1aXJpbmcgaGFsdGluZyBvZiB0aGUg c2VhcmNoIChlLmcuIG1lbW9yeSByZWFkIGVycm9yKS4KKyAgICAgICBJZiB0 aGUgcGF0dGVybiBpcyBmb3VuZCB0aGUgYWRkcmVzcyBpcyByZWNvcmRlZCBp biBGT1VORF9BRERSUC4gICovCisgICAgaW50ICgqdG9fc2VhcmNoX21lbW9y eSkgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsCisJCQkgICAgIENPUkVfQURE UiBzdGFydF9hZGRyLCBVTE9OR0VTVCBzZWFyY2hfc3BhY2VfbGVuLAorCQkJ ICAgICBjb25zdCBnZGJfYnl0ZSAqcGF0dGVybiwgVUxPTkdFU1QgcGF0dGVy bl9sZW4sCisJCQkgICAgIENPUkVfQUREUiAqZm91bmRfYWRkcnApOworCiAg ICAgaW50IHRvX21hZ2ljOwogICAgIC8qIE5lZWQgc3ViLXN0cnVjdHVyZSBm b3IgdGFyZ2V0IG1hY2hpbmUgcmVsYXRlZCByYXRoZXIgdGhhbiBjb21tIHJl bGF0ZWQ/CiAgICAgICovCkBAIC0xMDk1LDYgKzExMDYsMTkgQEAgZXh0ZXJu IGludCB0YXJnZXRfc3RvcHBlZF9kYXRhX2FkZHJlc3NfcAogCiBleHRlcm4g Y29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0YXJnZXRfcmVhZF9kZXNjcmlw dGlvbiAoc3RydWN0IHRhcmdldF9vcHMgKik7CiAKKy8qIFV0aWxpdHkgaW1w bGVtZW50YXRpb24gb2Ygc2VhcmNoaW5nIG1lbW9yeS4gICovCitleHRlcm4g aW50CitzaW1wbGVfc2VhcmNoX21lbW9yeSAoc3RydWN0IHRhcmdldF9vcHMq IG9wcywKKwkJICAgICAgQ09SRV9BRERSIHN0YXJ0X2FkZHIsIFVMT05HRVNU IHNlYXJjaF9zcGFjZV9sZW4sCisJCSAgICAgIGNvbnN0IGdkYl9ieXRlICpw YXR0ZXJuLCBVTE9OR0VTVCBwYXR0ZXJuX2xlbiwKKwkJICAgICAgQ09SRV9B RERSICpmb3VuZF9hZGRycCk7CisKKy8qIE1haW4gZW50cnkgcG9pbnQgZm9y IHNlYXJjaGluZyBtZW1vcnkuICAqLworZXh0ZXJuIGludAordGFyZ2V0X3Nl YXJjaF9tZW1vcnkgKENPUkVfQUREUiBzdGFydF9hZGRyLCBVTE9OR0VTVCBz ZWFyY2hfc3BhY2VfbGVuLAorCQkgICAgICBjb25zdCBnZGJfYnl0ZSAqcGF0 dGVybiwgVUxPTkdFU1QgcGF0dGVybl9sZW4sCisJCSAgICAgIENPUkVfQURE UiAqZm91bmRfYWRkcnApOworCiAvKiBDb21tYW5kIGxvZ2dpbmcgZmFjaWxp dHkuICAqLwogCiAjZGVmaW5lIHRhcmdldF9sb2dfY29tbWFuZChwKQkJCQkJ CVwKSW5kZXg6IGRvYy9nZGIudGV4aW5mbwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2RvYy9nZGIudGV4aW5m byx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40ODEKZGlmZiAtdSAtcCAtdSAt cCAtcjEuNDgxIGdkYi50ZXhpbmZvCi0tLSBkb2MvZ2RiLnRleGluZm8JMTYg QXByIDIwMDggMTM6MTQ6MTggLTAwMDAJMS40ODEKKysrIGRvYy9nZGIudGV4 aW5mbwkxNyBBcHIgMjAwOCAwMjozNToyNCAtMDAwMApAQCAtNTUzNCw2ICs1 NTM0LDcgQEAgVGFibGV9LgogKiBDaGFyYWN0ZXIgU2V0czo6ICAgICAgICAg ICAgICBEZWJ1Z2dpbmcgcHJvZ3JhbXMgdGhhdCB1c2UgYSBkaWZmZXJlbnQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNl dCB0aGFuIEdEQiBkb2VzCiAqIENhY2hpbmcgUmVtb3RlIERhdGE6OiAgICAg ICAgIERhdGEgY2FjaGluZyBmb3IgcmVtb3RlIHRhcmdldHMKKyogU2VhcmNo aW5nIE1lbW9yeTo6ICAgICAgICAgICAgU2VhcmNoaW5nIG1lbW9yeSBmb3Ig YSBzZXF1ZW5jZSBvZiBieXRlcwogQGVuZCBtZW51CiAKIEBub2RlIEV4cHJl c3Npb25zCkBAIC03NTk3LDYgKzc1OTgsMTAxIEBAIHN0YXRlIChkaXJ0eSwg YmFkLCBvaywgZXRjLikuICBUaGlzIGNvbW0KIHRoZSBkYXRhIGNhY2hlIG9w ZXJhdGlvbi4KIEBlbmQgdGFibGUKIAorQG5vZGUgU2VhcmNoaW5nIE1lbW9y eQorQHNlY3Rpb24gU2VhcmNoIE1lbW9yeQorQGNpbmRleCBzZWFyY2hpbmcg bWVtb3J5CisKK01lbW9yeSBjYW4gYmUgc2VhcmNoZWQgZm9yIGEgcGFydGlj dWxhciBzZXF1ZW5jZSBvZiBieXRlcyB3aXRoIHRoZQorQGNvZGV7ZmluZH0g Y29tbWFuZC4KKworQHRhYmxlIEBjb2RlCitAa2luZGV4IGZpbmQKK0BpdGVt IGZpbmQgQHJ7W30vQHZhcntzbn1AcntdfSBAdmFye3N0YXJ0X2FkZHJ9LCAr QHZhcntsZW59LCBAdmFye3ZhbDF9IEBye1t9LCBAdmFye3ZhbDJ9LCBAZG90 c3t9QHJ7XX0KK0BpdGVteCBmaW5kIEBye1t9L0B2YXJ7c259QHJ7XX0gQHZh cntzdGFydF9hZGRyfSwgQHZhcntlbmRfYWRkcn0sIEB2YXJ7dmFsMX0gQHJ7 W30sIEB2YXJ7dmFsMn0sIEBkb3Rze31AcntdfQorU2VhcmNoIG1lbW9yeSBm b3IgdGhlIHNlcXVlbmNlIG9mIGJ5dGVzIHNwZWNpZmllZCBieSBAdmFye3Zh bDF9LCBAdmFye3ZhbDJ9LAorZXRjLiAgVGhlIHNlYXJjaCBiZWdpbnMgYXQg YWRkcmVzcyBAdmFye3N0YXJ0X2FkZHJ9IGFuZCBjb250aW51ZXMgZm9yIGVp dGhlcgorQHZhcntsZW59IGJ5dGVzIG9yIHRocm91Z2ggdG8gQHZhcntlbmRf YWRkcn0gaW5jbHVzaXZlLgorQGVuZCB0YWJsZQorCitAdmFye3N9IGFuZCBA dmFye259IGFyZSBvcHRpb25hbCBwYXJhbWV0ZXJzLgorVGhleSBtYXkgYmUg c3BlY2lmaWVkIGluIGVpdGhlciBvcmRlciwgYXBhcnQgb3IgdG9nZXRoZXIu CisKK0B0YWJsZSBAcgorQGl0ZW0gQHZhcntzfSwgc2VhcmNoIHF1ZXJ5IHNp emUKK1RoZSBzaXplIG9mIGVhY2ggc2VhcmNoIHF1ZXJ5IHZhbHVlLgorCitA dGFibGUgQGNvZGUKK0BpdGVtIGIKK0J5dGVzLgorQGl0ZW0gaAorSGFsZndv cmRzICh0d28gYnl0ZXMpLgorQGl0ZW0gdworV29yZHMgKGZvdXIgYnl0ZXMp LgorQGl0ZW0gZworR2lhbnQgd29yZHMgKGVpZ2h0IGJ5dGVzKS4KK0BlbmQg dGFibGUKKworQWxsIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgaW4gdGhlIGN1 cnJlbnQgbGFuZ3VhZ2UuCitUaGlzIG1lYW5zLCBmb3IgZXhhbXBsZSwgdGhh dCBpZiB0aGUgY3VycmVudCBzb3VyY2UgbGFuZ3VhZ2UgaXMgQy9DKysKK3Ro ZW4gc2VhcmNoaW5nIGZvciB0aGUgc3RyaW5nICJoZWxsbyIgaW5jbHVkZXMg dGhlIHRyYWlsaW5nICdcMCcuCisKK0lmIHRoZSB2YWx1ZSBzaXplIGlzIG5v dCBzcGVjaWZpZWQsIGl0IGlzIHRha2VuIGZyb20gdGhlCit2YWx1ZSdzIHR5 cGUgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuCitUaGlzIGlzIHVzZWZ1bCB3 aGVuIG9uZSB3YW50cyB0byBzcGVjaWZ5IHRoZSBzZWFyY2gKK3BhdHRlcm4g YXMgYSBtaXh0dXJlIG9mIHR5cGVzLgorTm90ZSB0aGF0IHRoaXMgbWVhbnMs IGZvciBleGFtcGxlLCB0aGF0IGluIHRoZSBjYXNlIG9mIEMtbGlrZSBsYW5n dWFnZXMKK2Egc2VhcmNoIGZvciBhbiB1bnR5cGVkIDB4NDIgd2lsbCBzZWFy Y2ggZm9yICIoaW50KSAweDQyIgord2hpY2ggaXMgdHlwaWNhbGx5IGZvdXIg Ynl0ZXMuCisKK0BpdGVtIEB2YXJ7bn0sIG1heGltdW0gbnVtYmVyIG9mIGZp bmRzCitUaGUgbWF4aW11bSBudW1iZXIgb2YgZmluZHMgdG8gcHJpbnQuICBU aGUgZGVmYXVsdCBpcyB0byBwcmludCBhbGwgZmluZHMuCitAZW5kIHRhYmxl CisKK1N0cmluZ3MgbWF5IGJlIHNwZWNpZmllZCBmb3Igc2VhcmNoIHZhbHVl cywgcXVvdGUgdGhlbSB3aXRoIGRvdWJsZS1xdW90ZXMKKyhAY29kZXsifSku ICBUaGUgc3RyaW5nIHZhbHVlIGlzIGNvcGllZCBpbnRvIHRoZSBzZWFyY2gg cGF0dGVybiBieXRlIGJ5IGJ5dGUsCityZWdhcmRsZXNzIG9mIHRoZSBlbmRp YW5uZXNzIG9mIHRoZSB0YXJnZXQgYW5kIHRoZSBzaXplIHNwZWNpZmljYXRp b24uCisKK1RoZSBhZGRyZXNzIG9mIGVhY2ggbWF0Y2ggZm91bmQgaXMgcHJp bnRlZCBhcyB3ZWxsIGFzIGEgY291bnQgb2YgdGhlCitudW1iZXIgb2YgbWF0 Y2hlcyBmb3VuZC4KKworVGhlIGFkZHJlc3Mgb2YgdGhlIGxhc3QgdmFsdWUg Zm91bmQgaXMgc3RvcmVkIGluIGNvbnZlbmllbmNlIHZhcmlhYmxlCitAc2Ft cHskX30uCitBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpcyBz dG9yZWQgaW4gQHNhbXB7JG51bWZvdW5kfS4KKworRm9yIGV4YW1wbGUsIGlm IHN0b3BwZWQgYXQgdGhlIHByaW50ZiBpbiB0aGlzIGZ1bmN0aW9uOgorCitA c21hbGxleGFtcGxlCit2b2lkCitoZWxsbyAoKQorQHsKKyAgc3RhdGljIGNo YXIgaGVsbG9bXSA9ICJoZWxsby1oZWxsbyI7CisgIHN0YXRpYyBzdHJ1Y3Qg QHsgY2hhciBjOyBzaG9ydCBzOyBpbnQgaTsgQH0gX19hdHRyaWJ1dGVfXyAo KHBhY2tlZCkpIG1peGVkCisgICAgPSBAeyAnYycsIDB4MTIzNCwgMHg4NzY1 NDMyMSBAfTsKKyAgcHJpbnRmICgiJXNcbiIsIGhlbGxvKTsKK0B9CitAZW5k IHNtYWxsZXhhbXBsZQorCitZb3UgZ2V0IGR1cmluZyBkZWJ1Z2dpbmc6CisK K0BzbWFsbGV4YW1wbGUKKyhnZGIpIGZpbmQgJmhlbGxvWzBdLCArc2l6ZW9m KGhlbGxvKSwgImhlbGxvIgorMHg4MDQ5NTZkIDxoZWxsby4xNjIwKzY+Cisx IHBhdHRlcm4gZm91bmQKKyhnZGIpIGZpbmQgJmhlbGxvWzBdLCArc2l6ZW9m KGhlbGxvKSwgJ2gnLCAnZScsICdsJywgJ2wnLCAnbycKKzB4ODA0OTU2NyA8 aGVsbG8uMTYyMD4KKzB4ODA0OTU2ZCA8aGVsbG8uMTYyMCs2PgorMiBwYXR0 ZXJucyBmb3VuZAorKGdkYikgZmluZCAvYjEgJmhlbGxvWzBdLCArc2l6ZW9m KGhlbGxvKSwgJ2gnLCAweDY1LCAnbCcKKzB4ODA0OTU2NyA8aGVsbG8uMTYy MD4KKzEgcGF0dGVybiBmb3VuZAorKGdkYikgZmluZCAmbWl4ZWQsICtzaXpl b2YobWl4ZWQpLCAoY2hhcikgJ2MnLCAoc2hvcnQpIDB4MTIzNCwgKGludCkg MHg4NzY1NDMyMQorMHg4MDQ5NTYwIDxtaXhlZC4xNjI1PgorMSBwYXR0ZXJu IGZvdW5kCisoZ2RiKSBwcmludCAkbnVtZm91bmQKKyQxID0gMQorKGdkYikg cHJpbnQgJF8KKyQyID0gKHZvaWQgKikgMHg4MDQ5NTYwCitAZW5kIHNtYWxs ZXhhbXBsZQogCiBAbm9kZSBNYWNyb3MKIEBjaGFwdGVyIEMgUHJlcHJvY2Vz c29yIE1hY3JvcwpAQCAtMTM0MzQsNiArMTM1MzAsMTAgQEAgYXJlOgogQHRh YiBAY29kZXtxR2V0VExTQWRkcn0KIEB0YWIgRGlzcGxheWluZyBAY29kZXtf X3RocmVhZH0gdmFyaWFibGVzCiAKK0BpdGVtIEBjb2Rle3NlYXJjaC1tZW1v cnl9CitAdGFiIEBjb2Rle3FTZWFyY2g6bWVtb3J5fQorQHRhYiBAY29kZXtm aW5kfQorCiBAaXRlbSBAY29kZXtzdXBwb3J0ZWQtcGFja2V0c30KIEB0YWIg QGNvZGV7cVN1cHBvcnRlZH0KIEB0YWIgUmVtb3RlIGNvbW11bmljYXRpb25z IHBhcmFtZXRlcnMKQEAgLTI0NDY1LDYgKzI0NTY1LDI2IEBAIGNvbW1hbmQg YnkgYSBAc2FtcHssfSwgbm90IGEgQHNhbXB7On0sIGMKIGNvbnZlbnRpb25z IGFib3ZlLiAgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHBhY2tldCBhcyBhIG1v ZGVsIGZvciBuZXcKIHBhY2tldHMuKQogCitAaXRlbSBxU2VhcmNoOm1lbW9y eTpAdmFye2FkZHJlc3N9O0B2YXJ7bGVuZ3RofTtAdmFye3NlYXJjaC1wYXR0 ZXJufQorQGNpbmRleCBzZWFyY2hpbmcgbWVtb3J5LCBpbiByZW1vdGUgZGVi dWdnaW5nCitAY2luZGV4IEBzYW1we3FTZWFyY2g6bWVtb3J5fSBwYWNrZXQK K0BhbmNob3J7cVNlYXJjaCBtZW1vcnl9CitTZWFyY2ggQHZhcntsZW5ndGh9 IGJ5dGVzIGF0IEB2YXJ7YWRkcmVzc30gZm9yIEB2YXJ7c2VhcmNoLXBhdHRl cm59LgorQHZhcnthZGRyZXNzfSBhbmQgQHZhcntsZW5ndGh9IGFyZSBlbmNv ZGVkIGluIGhleC4KK0B2YXJ7c2VhcmNoLXBhdHRlcm59IGlzIGEgc2VxdWVu Y2Ugb2YgYnl0ZXMsIGhleCBlbmNvZGVkLgorCitSZXBseToKK0B0YWJsZSBA c2FtcAorQGl0ZW0gMAorVGhlIHBhdHRlcm4gd2FzIG5vdCBmb3VuZC4KK0Bp dGVtIDEsYWRkcmVzcworVGhlIHBhdHRlcm4gd2FzIGZvdW5kIGF0IEB2YXJ7 YWRkcmVzc30uCitAaXRlbSBFIEB2YXJ7Tk59CitBIGJhZGx5IGZvcm1lZCBy ZXF1ZXN0IG9yIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSBzZWFy Y2hpbmcgbWVtb3J5LgorQGl0ZW0KK0FuIGVtcHR5IHJlcGx5IGluZGljYXRl cyB0aGF0IEBzYW1we3FTZWFyY2g6bWVtb3J5fSBpcyBub3QgcmVjb2duaXpl ZC4KK0BlbmQgdGFibGUKKwogQGl0ZW0gcVN1cHBvcnRlZCBAcntbfTpAdmFy e2dkYmZlYXR1cmV9IEBye1t9O0B2YXJ7Z2RiZmVhdHVyZX1AcntdfUBkb3Rz e30gQHJ7XX0KIEBjaW5kZXggc3VwcG9ydGVkIHBhY2tldHMsIHJlbW90ZSBx dWVyeQogQGNpbmRleCBmZWF0dXJlcyBvZiB0aGUgcmVtb3RlIHByb3RvY29s CkluZGV4OiBnZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIv TWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAt dSAtcCAtdSAtcCAtcjEuNTcgTWFrZWZpbGUuaW4KLS0tIGdkYnNlcnZlci9N YWtlZmlsZS5pbgkxNCBBcHIgMjAwOCAxODowNDowMCAtMDAwMAkxLjU3Cisr KyBnZGJzZXJ2ZXIvTWFrZWZpbGUuaW4JMTcgQXByIDIwMDggMDI6MzU6MjQg LTAwMDAKQEAgLTgxLDExICs4MSwxNSBAQCBCRkRfQ0ZMQUdTID0gLUkkKEJG RF9ESVIpIC1JJChCRkRfU1JDKQogUkVBRExJTkVfRElSID0gJHtzcmNkaXJ9 Ly4uL3JlYWRsaW5lCiBSRUFETElORV9ERVAgPSAkJChSRUFETElORV9ESVIp CiAKKyMgZ251bGliCitJTkNHTlVMSUIgPSAtSSQoc3JjZGlyKS8uLi9nbnVs aWIgLUkuLi9nbnVsaWIKKwogIyBBbGwgdGhlIGluY2x1ZGVzIHVzZWQgZm9y IENGTEFHUyBhbmQgZm9yIGxpbnQuCiAjIC1JLiBmb3IgY29uZmlnIGZpbGVz LgogIyAtSSR7c3JjZGlyfSBmb3Igb3VyIGhlYWRlcnMuCiAjIC1JJChzcmNk aXIpLy4uL3JlZ2Zvcm1hdHMgZm9yIHJlZ2RlZi5oLgotSU5DTFVERV9DRkxB R1MgPSAtSS4gLUkke3NyY2Rpcn0gLUkkKHNyY2RpcikvLi4vcmVnZm9ybWF0 cyAtSSQoSU5DTFVERV9ESVIpCitJTkNMVURFX0NGTEFHUyA9IC1JLiAtSSR7 c3JjZGlyfSAtSSQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzIC1JJChJTkNMVURF X0RJUikgXAorCSQoSU5DR05VTElCKQogCiAjIE17SCxUfV9DRkxBR1MsIGlm IGRlZmluZWQsIGhhcyBob3N0LSBhbmQgdGFyZ2V0LWRlcGVuZGVudCBDRkxB R1MKICMgZnJvbSB0aGUgY29uZmlnLyBkaXJlY3RvcnkuCkBAIC0xNDMsNyAr MTQ3LDcgQEAgVEFHRklMRVMgPSAkKFNPVVJDRVMpICR7SEZJTEVTfSAke0FM TFBBUgogCiBPQlMgPSBpbmZlcmlvcnMubyByZWdjYWNoZS5vIHJlbW90ZS11 dGlscy5vIHNlcnZlci5vIHNpZ25hbHMubyB0YXJnZXQubyBcCiAJdXRpbHMu byB2ZXJzaW9uLm8gXAotCW1lbS1icmVhay5vIGhvc3Rpby5vIFwKKwltZW0t YnJlYWsubyBtZW1tZW0ubyBob3N0aW8ubyBcCiAJJChYTUxfQlVJTFRJTikg XAogCSQoREVQRklMRVMpICQoTElCT0JKUykKIEdEQlNFUlZFUl9MSUJTID0g QEdEQlNFUlZFUl9MSUJTQApJbmRleDogZ2Ric2VydmVyL3JlbW90ZS11dGls cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvZ2Ric2VydmVyL3JlbW90ZS11dGlscy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjU0CmRpZmYgLXUgLXAgLXUgLXAgLXIxLjU0IHJlbW90 ZS11dGlscy5jCi0tLSBnZGJzZXJ2ZXIvcmVtb3RlLXV0aWxzLmMJMzAgSmFu IDIwMDggMDA6NTE6NTAgLTAwMDAJMS41NAorKysgZ2Ric2VydmVyL3JlbW90 ZS11dGlscy5jCTE3IEFwciAyMDA4IDAyOjM1OjI0IC0wMDAwCkBAIC0xMDgw LDYgKzEwODAsMjQgQEAgZGVjb2RlX3hmZXJfd3JpdGUgKGNoYXIgKmJ1Ziwg aW50IHBhY2tldAogICByZXR1cm4gMDsKIH0KIAorLyogRGVjb2RlIHRoZSBw YXJhbWV0ZXJzIG9mIGEgcVNlYXJjaDptZW1vcnkgcGFja2V0LiAgKi8KKwor aW50CitkZWNvZGVfc2VhcmNoX21lbW9yeV9wYWNrZXQgKGNvbnN0IGNoYXIg KmJ1ZiwgaW50IHBhY2tldF9sZW4sCisJCQkgICAgIENPUkVfQUREUiAqc3Rh cnRfYWRkcnAsCisJCQkgICAgIENPUkVfQUREUiAqc2VhcmNoX3NwYWNlX2xl bnAsCisJCQkgICAgIGdkYl9ieXRlICpwYXR0ZXJuLCB1bnNpZ25lZCBpbnQg KnBhdHRlcm5fbGVucCkKK3sKKyAgY29uc3QgY2hhciAqcCA9IGJ1ZjsKKwor ICBwID0gZGVjb2RlX2FkZHJlc3NfdG9fc2VtaWNvbG9uIChzdGFydF9hZGRy cCwgcCk7CisgIHAgPSBkZWNvZGVfYWRkcmVzc190b19zZW1pY29sb24gKHNl YXJjaF9zcGFjZV9sZW5wLCBwKTsKKyAgcGFja2V0X2xlbiAtPSBwIC0gYnVm OworICAqcGF0dGVybl9sZW5wID0gcmVtb3RlX3VuZXNjYXBlX2lucHV0ICgo Y29uc3QgZ2RiX2J5dGUgKikgcCwgcGFja2V0X2xlbiwKKwkJCQkJIHBhdHRl cm4sIHBhY2tldF9sZW4pOworICByZXR1cm4gMDsKK30KKwogLyogQXNrIEdE QiBmb3IgdGhlIGFkZHJlc3Mgb2YgTkFNRSwgYW5kIHJldHVybiBpdCBpbiBB RERSUCBpZiBmb3VuZC4KICAgIFJldHVybnMgMSBpZiB0aGUgc3ltYm9sIGlz IGZvdW5kLCAwIGlmIGl0IGlzIG5vdCwgLTEgb24gZXJyb3IuICAqLwogCklu ZGV4OiBnZGJzZXJ2ZXIvc2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvc2VydmVy LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzAKZGlmZiAtdSAtcCAtdSAt cCAtcjEuNzAgc2VydmVyLmMKLS0tIGdkYnNlcnZlci9zZXJ2ZXIuYwk0IEFw ciAyMDA4IDE5OjE5OjExIC0wMDAwCTEuNzAKKysrIGdkYnNlcnZlci9zZXJ2 ZXIuYwkxNyBBcHIgMjAwOCAwMjozNToyNCAtMDAwMApAQCAtMzE0LDYgKzMx NCwxNTQgQEAgbW9uaXRvcl9zaG93X2hlbHAgKHZvaWQpCiAgIG1vbml0b3Jf b3V0cHV0ICgiICAgIFF1aXQgR0RCc2VydmVyXG4iKTsKIH0KIAorLyogU3Vi cm91dGluZSBvZiBoYW5kbGVfc2VhcmNoX21lbW9yeSB0byBzaW1wbGlmeSBp dC4gICovCisKK3N0YXRpYyBpbnQKK2hhbmRsZV9zZWFyY2hfbWVtb3J5XzEg KENPUkVfQUREUiBzdGFydF9hZGRyLCBDT1JFX0FERFIgc2VhcmNoX3NwYWNl X2xlbiwKKwkJCWdkYl9ieXRlICpwYXR0ZXJuLCB1bnNpZ25lZCBwYXR0ZXJu X2xlbiwKKwkJCWdkYl9ieXRlICpzZWFyY2hfYnVmLAorCQkJdW5zaWduZWQg Y2h1bmtfc2l6ZSwgdW5zaWduZWQgc2VhcmNoX2J1Zl9zaXplLAorCQkJQ09S RV9BRERSICpmb3VuZF9hZGRycCkKK3sKKyAgLyogUHJpbWUgdGhlIHNlYXJj aCBidWZmZXIuICAqLworCisgIGlmIChyZWFkX2luZmVyaW9yX21lbW9yeSAo c3RhcnRfYWRkciwgc2VhcmNoX2J1Ziwgc2VhcmNoX2J1Zl9zaXplKSAhPSAw KQorICAgIHsKKyAgICAgIHdhcm5pbmcgKCJ1bmFibGUgdG8gYWNjZXNzIHRh cmdldCBtZW1vcnkgYXQgMHglbHgsIGhhbHRpbmcgc2VhcmNoIiwKKwkgICAg ICAgKGxvbmcpIHN0YXJ0X2FkZHIpOworICAgICAgcmV0dXJuIC0xOworICAg IH0KKworICAvKiBQZXJmb3JtIHRoZSBzZWFyY2guCisKKyAgICAgVGhlIGxv b3AgaXMga2VwdCBzaW1wbGUgYnkgYWxsb2NhdGluZyBbTiArIHBhdHRlcm4t bGVuZ3RoIC0gMV0gYnl0ZXMuCisgICAgIFdoZW4gd2UndmUgc2Nhbm5lZCBO IGJ5dGVzIHdlIGNvcHkgdGhlIHRyYWlsaW5nIGJ5dGVzIHRvIHRoZSBzdGFy dCBhbmQKKyAgICAgcmVhZCBpbiBhbm90aGVyIE4gYnl0ZXMuICAqLworCisg IHdoaWxlIChzZWFyY2hfc3BhY2VfbGVuID49IHBhdHRlcm5fbGVuKQorICAg IHsKKyAgICAgIGdkYl9ieXRlICpmb3VuZF9wdHI7CisgICAgICB1bnNpZ25l ZCBucl9zZWFyY2hfYnl0ZXMgPSAoc2VhcmNoX3NwYWNlX2xlbiA8IHNlYXJj aF9idWZfc2l6ZQorCQkJCSAgPyBzZWFyY2hfc3BhY2VfbGVuCisJCQkJICA6 IHNlYXJjaF9idWZfc2l6ZSk7CisKKyAgICAgIGZvdW5kX3B0ciA9IG1lbW1l bSAoc2VhcmNoX2J1ZiwgbnJfc2VhcmNoX2J5dGVzLAorCQkJICBwYXR0ZXJu LCBwYXR0ZXJuX2xlbik7CisKKyAgICAgIGlmIChmb3VuZF9wdHIgIT0gTlVM TCkKKwl7CisJICBDT1JFX0FERFIgZm91bmRfYWRkciA9IHN0YXJ0X2FkZHIg KyAoZm91bmRfcHRyIC0gc2VhcmNoX2J1Zik7CisJICAqZm91bmRfYWRkcnAg PSBmb3VuZF9hZGRyOworCSAgcmV0dXJuIDE7CisJfQorCisgICAgICAvKiBO b3QgZm91bmQgaW4gdGhpcyBjaHVuaywgc2tpcCB0byBuZXh0IGNodW5rLiAg Ki8KKworICAgICAgLyogRG9uJ3QgbGV0IHNlYXJjaF9zcGFjZV9sZW4gd3Jh cCBoZXJlLCBpdCdzIHVuc2lnbmVkLiAgKi8KKyAgICAgIGlmIChzZWFyY2hf c3BhY2VfbGVuID49IGNodW5rX3NpemUpCisJc2VhcmNoX3NwYWNlX2xlbiAt PSBjaHVua19zaXplOworICAgICAgZWxzZQorCXNlYXJjaF9zcGFjZV9sZW4g PSAwOworCisgICAgICBpZiAoc2VhcmNoX3NwYWNlX2xlbiA+PSBwYXR0ZXJu X2xlbikKKwl7CisJICB1bnNpZ25lZCBrZWVwX2xlbiA9IHNlYXJjaF9idWZf c2l6ZSAtIGNodW5rX3NpemU7CisJICBDT1JFX0FERFIgcmVhZF9hZGRyID0g c3RhcnRfYWRkciArIGtlZXBfbGVuOworCSAgaW50IG5yX3RvX3JlYWQ7CisK KwkgIC8qIENvcHkgdGhlIHRyYWlsaW5nIHBhcnQgb2YgdGhlIHByZXZpb3Vz IGl0ZXJhdGlvbiB0byB0aGUgZnJvbnQKKwkgICAgIG9mIHRoZSBidWZmZXIg Zm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gICovCisJICBtZW1jcHkgKHNlYXJj aF9idWYsIHNlYXJjaF9idWYgKyBjaHVua19zaXplLCBrZWVwX2xlbik7CisK KwkgIG5yX3RvX3JlYWQgPSAoc2VhcmNoX3NwYWNlX2xlbiAtIGtlZXBfbGVu IDwgY2h1bmtfc2l6ZQorCQkJPyBzZWFyY2hfc3BhY2VfbGVuIC0ga2VlcF9s ZW4KKwkJCTogY2h1bmtfc2l6ZSk7CisKKwkgIGlmIChyZWFkX2luZmVyaW9y X21lbW9yeSAocmVhZF9hZGRyLCBzZWFyY2hfYnVmICsga2VlcF9sZW4sCisJ CQkJICAgIG5yX3RvX3JlYWQpICE9IDApCisJICAgIHsKKwkgICAgICB3YXJu aW5nICgidW5hYmxlIHRvIGFjY2VzcyB0YXJnZXQgbWVtb3J5IGF0IDB4JWx4 LCBoYWx0aW5nIHNlYXJjaCIsCisJCSAgICAgICAobG9uZykgcmVhZF9hZGRy KTsKKwkgICAgICByZXR1cm4gLTE7CisJICAgIH0KKworCSAgc3RhcnRfYWRk ciArPSBjaHVua19zaXplOworCX0KKyAgICB9CisKKyAgLyogTm90IGZvdW5k LiAgKi8KKworICByZXR1cm4gMDsKK30KKworLyogSGFuZGxlIHFTZWFyY2g6 bWVtb3J5IHBhY2tldHMuICAqLworCitzdGF0aWMgdm9pZAoraGFuZGxlX3Nl YXJjaF9tZW1vcnkgKGNoYXIgKm93bl9idWYsIGludCBwYWNrZXRfbGVuKQor eworICBDT1JFX0FERFIgc3RhcnRfYWRkcjsKKyAgQ09SRV9BRERSIHNlYXJj aF9zcGFjZV9sZW47CisgIGdkYl9ieXRlICpwYXR0ZXJuOworICB1bnNpZ25l ZCBpbnQgcGF0dGVybl9sZW47CisgIC8qIE5PVEU6IGFsc28gZGVmaW5lZCBp biBmaW5kLmMgdGVzdGNhc2UuICAqLworI2RlZmluZSBTRUFSQ0hfQ0hVTktf U0laRSAxNjAwMAorICBjb25zdCB1bnNpZ25lZCBjaHVua19zaXplID0gU0VB UkNIX0NIVU5LX1NJWkU7CisgIC8qIEJ1ZmZlciB0byBob2xkIG1lbW9yeSBj b250ZW50cyBmb3Igc2VhcmNoaW5nLiAgKi8KKyAgZ2RiX2J5dGUgKnNlYXJj aF9idWY7CisgIHVuc2lnbmVkIHNlYXJjaF9idWZfc2l6ZTsKKyAgaW50IGZv dW5kOworICBDT1JFX0FERFIgZm91bmRfYWRkcjsKKyAgaW50IGNtZF9uYW1l X2xlbiA9IHNpemVvZiAoInFTZWFyY2g6bWVtb3J5OiIpIC0gMTsKKworICBw YXR0ZXJuID0gbWFsbG9jIChwYWNrZXRfbGVuKTsKKyAgaWYgKHBhdHRlcm4g PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnJvciAoInVuYWJsZSB0byBhbGxv Y2F0ZSBtZW1vcnkgdG8gcGVyZm9ybSB0aGUgc2VhcmNoIik7CisgICAgICBz dHJjcHkgKG93bl9idWYsICJFMDAiKTsKKyAgICAgIHJldHVybjsKKyAgICB9 CisgIGlmIChkZWNvZGVfc2VhcmNoX21lbW9yeV9wYWNrZXQgKG93bl9idWYg KyBjbWRfbmFtZV9sZW4sCisJCQkJICAgcGFja2V0X2xlbiAtIGNtZF9uYW1l X2xlbiwKKwkJCQkgICAmc3RhcnRfYWRkciwgJnNlYXJjaF9zcGFjZV9sZW4s CisJCQkJICAgcGF0dGVybiwgJnBhdHRlcm5fbGVuKSA8IDApCisgICAgewor ICAgICAgZnJlZSAocGF0dGVybik7CisgICAgICBlcnJvciAoImVycm9yIGlu IHBhcnNpbmcgcVNlYXJjaDptZW1vcnkgcGFja2V0Iik7CisgICAgICBzdHJj cHkgKG93bl9idWYsICJFMDAiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisK KyAgc2VhcmNoX2J1Zl9zaXplID0gY2h1bmtfc2l6ZSArIHBhdHRlcm5fbGVu IC0gMTsKKworICAvKiBObyBwb2ludCBpbiB0cnlpbmcgdG8gYWxsb2NhdGUg YSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIHNlYXJjaCBzcGFjZS4gICovCisg IGlmIChzZWFyY2hfc3BhY2VfbGVuIDwgc2VhcmNoX2J1Zl9zaXplKQorICAg IHNlYXJjaF9idWZfc2l6ZSA9IHNlYXJjaF9zcGFjZV9sZW47CisKKyAgc2Vh cmNoX2J1ZiA9IG1hbGxvYyAoc2VhcmNoX2J1Zl9zaXplKTsKKyAgaWYgKHNl YXJjaF9idWYgPT0gTlVMTCkKKyAgICB7CisgICAgICBmcmVlIChwYXR0ZXJu KTsKKyAgICAgIGVycm9yICgidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSB0 byBwZXJmb3JtIHRoZSBzZWFyY2giKTsKKyAgICAgIHN0cmNweSAob3duX2J1 ZiwgIkUwMCIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBmb3VuZCA9 IGhhbmRsZV9zZWFyY2hfbWVtb3J5XzEgKHN0YXJ0X2FkZHIsIHNlYXJjaF9z cGFjZV9sZW4sCisJCQkJICBwYXR0ZXJuLCBwYXR0ZXJuX2xlbiwKKwkJCQkg IHNlYXJjaF9idWYsIGNodW5rX3NpemUsIHNlYXJjaF9idWZfc2l6ZSwKKwkJ CQkgICZmb3VuZF9hZGRyKTsKKworICBpZiAoZm91bmQgPiAwKQorICAgIHNw cmludGYgKG93bl9idWYsICIxLCVseCIsIChsb25nKSBmb3VuZF9hZGRyKTsK KyAgZWxzZSBpZiAoZm91bmQgPT0gMCkKKyAgICBzdHJjcHkgKG93bl9idWYs ICIwIik7CisgIGVsc2UKKyAgICBzdHJjcHkgKG93bl9idWYsICJFMDAiKTsK KworICBmcmVlIChzZWFyY2hfYnVmKTsKKyAgZnJlZSAocGF0dGVybik7Cit9 CisKICNkZWZpbmUgcmVxdWlyZV9ydW5uaW5nKEJVRikJCQlcCiAgIGlmICgh dGFyZ2V0X3J1bm5pbmcgKCkpCQkJXAogICAgIHsJCQkJCQlcCkBAIC03MzEs NiArODc5LDEzIEBAIGhhbmRsZV9xdWVyeSAoY2hhciAqb3duX2J1ZiwgaW50 IHBhY2tldF8KICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgaWYgKHN0cm5j bXAgKCJxU2VhcmNoOm1lbW9yeToiLCBvd25fYnVmLCBzaXplb2YgKCJxU2Vh cmNoOm1lbW9yeToiKSAtIDEpID09IDApCisgICAgeworICAgICAgcmVxdWly ZV9ydW5uaW5nIChvd25fYnVmKTsKKyAgICAgIGhhbmRsZV9zZWFyY2hfbWVt b3J5IChvd25fYnVmLCBwYWNrZXRfbGVuKTsKKyAgICAgIHJldHVybjsKKyAg ICB9CisKICAgLyogT3RoZXJ3aXNlIHdlIGRpZG4ndCBrbm93IHdoYXQgcGFj a2V0IGl0IHdhcy4gIFNheSB3ZSBkaWRuJ3QKICAgICAgdW5kZXJzdGFuZCBp dC4gICovCiAgIG93bl9idWZbMF0gPSAwOwpJbmRleDogZ2Ric2VydmVyL3Nl cnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZlci5oLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXUgLXAgLXIxLjQxIHNlcnZlci5o Ci0tLSBnZGJzZXJ2ZXIvc2VydmVyLmgJMjcgRmViIDIwMDggMDM6Mjc6NDAg LTAwMDAJMS40MQorKysgZ2Ric2VydmVyL3NlcnZlci5oCTE3IEFwciAyMDA4 IDAyOjM1OjI0IC0wMDAwCkBAIC0xOTUsNiArMTk1LDEwIEBAIGludCBkZWNv ZGVfWF9wYWNrZXQgKGNoYXIgKmZyb20sIGludCBwYWMKIGludCBkZWNvZGVf eGZlcl93cml0ZSAoY2hhciAqYnVmLCBpbnQgcGFja2V0X2xlbiwgY2hhciAq KmFubmV4LAogCQkgICAgICAgQ09SRV9BRERSICpvZmZzZXQsIHVuc2lnbmVk IGludCAqbGVuLAogCQkgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSk7Citp bnQgZGVjb2RlX3NlYXJjaF9tZW1vcnlfcGFja2V0IChjb25zdCBjaGFyICpi dWYsIGludCBwYWNrZXRfbGVuLAorCQkJCSBDT1JFX0FERFIgKnN0YXJ0X2Fk ZHJwLAorCQkJCSBDT1JFX0FERFIgKnNlYXJjaF9zcGFjZV9sZW5wLAorCQkJ CSBnZGJfYnl0ZSAqcGF0dGVybiwgdW5zaWduZWQgaW50ICpwYXR0ZXJuX2xl bnApOwogCiBpbnQgdW5oZXhpZnkgKGNoYXIgKmJpbiwgY29uc3QgY2hhciAq aGV4LCBpbnQgY291bnQpOwogaW50IGhleGlmeSAoY2hhciAqaGV4LCBjb25z dCBjaGFyICpiaW4sIGludCBjb3VudCk7CkluZGV4OiB0ZXN0c3VpdGUvZ2Ri LmJhc2UvZmluZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IHRlc3RzdWl0ZS9nZGIuYmFzZS9maW5kLmMKZGlmZiAtTiB0ZXN0c3VpdGUv Z2RiLmJhc2UvZmluZC5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL2ZpbmQuYwkxNyBB cHIgMjAwOCAwMjozNToyNSAtMDAwMApAQCAtMCwwICsxLDYyIEBACisvKiBU ZXN0Y2FzZSBmb3IgdGhlIGZpbmQgY29tbWFuZC4KKyAgIFRoaXMgdGVzdGNh c2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENv cHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFBsZWFzZSBlbWFpbCBh bnkgYnVncywgY29tbWVudHMsIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhpcyBm aWxlIHRvOgorICAgYnVnLWdkYkBnbnUub3JnICAqLworCisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgQ0hV TktfU0laRSAxNjAwMCAvKiBzYW1lIGFzIGZpbmRjbWQuYydzICovCisjZGVm aW5lIEJVRl9TSVpFICgyICogQ0hVTktfU0laRSkgLyogYXQgbGVhc3QgdHdv IGNodW5rcyAqLworCitzdGF0aWMgaW50OF90IGludDhfc2VhcmNoX2J1Zlsx MDBdOworc3RhdGljIGludDE2X3QgaW50MTZfc2VhcmNoX2J1ZlsxMDBdOwor c3RhdGljIGludDMyX3QgaW50MzJfc2VhcmNoX2J1ZlsxMDBdOworc3RhdGlj IGludDY0X3QgaW50NjRfc2VhcmNoX2J1ZlsxMDBdOworCitzdGF0aWMgY2hh ciAqc2VhcmNoX2J1ZjsKK3N0YXRpYyBpbnQgc2VhcmNoX2J1Zl9zaXplOwor CitzdGF0aWMgaW50IHg7CisKK3N0YXRpYyB2b2lkCitzdG9wX2hlcmUgKCkK K3sKKyAgeCA9IDE7IC8vIHN0b3AgaGVyZQorfQorCitzdGF0aWMgdm9pZAor aW5pdF9idWZzICgpCit7CisgIHNlYXJjaF9idWZfc2l6ZSA9IEJVRl9TSVpF OworICBzZWFyY2hfYnVmID0gbWFsbG9jIChzZWFyY2hfYnVmX3NpemUpOwor ICBpZiAoc2VhcmNoX2J1ZiA9PSBOVUxMKQorICAgIGV4aXQgKDEpOworICBt ZW1zZXQgKHNlYXJjaF9idWYsICd4Jywgc2VhcmNoX2J1Zl9zaXplKTsKK30K KworaW50CittYWluICgpCit7CisgIGluaXRfYnVmcyAoKTsKKworICBzdG9w X2hlcmUgKCk7CisKKyAgcmV0dXJuIDA7Cit9CkluZGV4OiB0ZXN0c3VpdGUv Z2RiLmJhc2UvZmluZC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogdGVzdHN1aXRlL2dkYi5iYXNlL2ZpbmQuZXhwCmRpZmYgLU4gdGVz dHN1aXRlL2dkYi5iYXNlL2ZpbmQuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4g MTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL2Zp bmQuZXhwCTE3IEFwciAyMDA4IDAyOjM1OjI1IC0wMDAwCkBAIC0wLDAgKzEs MTkxIEBACisjIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFBsZWFzZSBlbWFp bCBhbnkgYnVncywgY29tbWVudHMsIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhp cyBmaWxlIHRvOgorIyBidWctZ2RiQHByZXAuYWkubWl0LmVkdQorCisjIFRo aXMgdGVzdHMgdGhlIGZpbmQgY29tbWFuZC4KKworaWYgJHRyYWNlbGV2ZWwg dGhlbiB7CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9CisKK3NldCB0ZXN0 ZmlsZSAiZmluZCIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmMKK3NldCBi aW5maWxlICR7b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0KKworaWYg IHsgW2dkYl9jb21waWxlICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3JjZmls ZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIHtkZWJ1ZyBub3dhcm5pbmdz fV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgZmluZC5leHAKKyAgICByZXR1 cm4gLTEKK30KKworZ2RiX2V4aXQKK2dkYl9zdGFydAorZ2RiX3JlaW5pdGlh bGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9hZCAke2JpbmZpbGV9 CisKK2dkYl90ZXN0ICJicmVhayAkc3JjZmlsZTpzdG9wX2hlcmUiIFwKKyAg ICAiQnJlYWtwb2ludC4qYXQuKiBmaWxlIC4qJHNyY2ZpbGUsIGxpbmUuKiIg XAorICAgICJicmVha3BvaW50IGZ1bmN0aW9uIGluIGZpbGUiCisKK2dkYl9y dW5fY21kCitnZGJfZXhwZWN0IHsKKyAgICAtcmUgIkJyZWFrcG9pbnQgXFsw LTlcXSssLipzdG9wX2hlcmUuKiBhdCAuKiRzcmNmaWxlOi4qJGdkYl9wcm9t cHQgJCIgeworCXBhc3MgInJ1biB1bnRpbCBmdW5jdGlvbiBicmVha3BvaW50 IgorICAgIH0KKyAgICAtcmUgIiRnZGJfcHJvbXB0ICQiIHsKKwlmYWlsICJy dW4gdW50aWwgZnVuY3Rpb24gYnJlYWtwb2ludCIKKyAgICB9CisgICAgdGlt ZW91dCB7CisJZmFpbCAicnVuIHVudGlsIGZ1bmN0aW9uIGJyZWFrcG9pbnQg KHRpbWVvdXQpIgorICAgIH0KK30KKworIyBXZSd2ZSBub3cgZ290IHRoZSB0 YXJnZXQgcHJvZ3JhbSBpbiBhIHN0YXRlIHdoZXJlIHdlIGNhbiB0ZXN0ICJm aW5kIi4KKworc2V0IGhleF9udW1iZXIgezB4WzAtOWEtZkEtRl1bMC05YS1m QS1GXSp9CitzZXQgaGlzdG9yeV9wcmVmaXgge1skXVswLTldKiA9IH0KK3Nl dCBuZXdsaW5lIHtbXHJcbl0qfQorc2V0IHBhdHRlcm5fbm90X2ZvdW5kICIk e25ld2xpbmV9cGF0dGVybiBub3QgZm91bmQiCitzZXQgb25lX3BhdHRlcm5f Zm91bmQgIiR7bmV3bGluZX0xIHBhdHRlcm4gZm91bmQiCitzZXQgdHdvX3Bh dHRlcm5zX2ZvdW5kICIke25ld2xpbmV9MiBwYXR0ZXJucyBmb3VuZCIKKwor IyBUZXN0IHN0cmluZyBwYXR0ZXJuLgorCitnZGJfdGVzdCAic2V0ICooaW50 MzJfdCopICZpbnQ4X3NlYXJjaF9idWZcWzEwXF0gPSAweDYxNjE2MTYxIiAi IiAiIgorCitnZGJfdGVzdCAiZmluZCAmaW50OF9zZWFyY2hfYnVmXFswXF0s ICtzaXplb2YoaW50OF9zZWFyY2hfYnVmKSwgJ2EnLCAnYScsICdhJyIgXAor ICAgICIke2hleF9udW1iZXJ9Lio8aW50OF9zZWFyY2hfYnVmXFwrMTA+JHtu ZXdsaW5lfSR7aGV4X251bWJlcn0uKjxpbnQ4X3NlYXJjaF9idWZcXCsxMT4k e3R3b19wYXR0ZXJuc19mb3VuZH0iIFwKKyAgICAiZmluZCBzdHJpbmcgcGF0 dGVybiIKKworIyBUZXN0IG5vdCBmaW5kaW5nIHBhdHRlcm4gYmVjYXVzZSBz ZWFyY2ggcmFuZ2UgdG9vIHNtYWxsLCB3aXRoCisjIHBvdGVudGlhbCBmaW5k IGF0IHRoZSBlZGdlIG9mIHRoZSByYW5nZS4KKworZ2RiX3Rlc3QgImZpbmQg JmludDhfc2VhcmNoX2J1ZlxbMFxdLCArMTArMywgXCJhYWFhXCIiIFwKKyAg ICAiJHtwYXR0ZXJuX25vdF9mb3VuZH0iIFwKKyAgICAicGF0dGVybiBub3Qg Zm91bmQgYXQgZW5kIG9mIHJhbmdlIgorCisjIEluY3JlYXNlIHRoZSBzZWFy Y2ggcmFuZ2UgYnkgMSBhbmQgd2Ugc2hvdWxkIGZpbmQgdGhlIHBhdHRlcm4u CisKK2dkYl90ZXN0ICJmaW5kICZpbnQ4X3NlYXJjaF9idWZcWzBcXSwgKzEw KzMrMSwgJ2EnLCAnYScsICdhJywgJ2EnIiBcCisgICAgIiR7aGV4X251bWJl cn0uKjxpbnQ4X3NlYXJjaF9idWZcXCsxMD4ke29uZV9wYXR0ZXJuX2ZvdW5k fSIgXAorICAgICJwYXR0ZXJuIGZvdW5kIGF0IGVuZCBvZiByYW5nZSIKKwor IyBUZXN0IG1heC1jb3VudCwgJF8gYW5kICRudW1mb3VuZC4KKworZ2RiX3Rl c3QgImZpbmQgLzEgJmludDhfc2VhcmNoX2J1ZlxbMFxdLCArc2l6ZW9mKGlu dDhfc2VhcmNoX2J1ZiksICdhJywgJ2EnLCAnYSciIFwKKyAgICAiJHtoZXhf bnVtYmVyfS4qPGludDhfc2VhcmNoX2J1ZlxcKzEwPiR7b25lX3BhdHRlcm5f Zm91bmR9IiBcCisgICAgIm1heC1jb3VudCIKKworZ2RiX3Rlc3QgInByaW50 IFwkXyIgXAorICAgICIke2hpc3RvcnlfcHJlZml4fS4qJHtoZXhfbnVtYmVy fSIgXAorICAgICJcJF8iCisKK2dkYl90ZXN0ICJwcmludCBcJG51bWZvdW5k IiBcCisgICAgIiR7aGlzdG9yeV9wcmVmaXh9MSIgXAorICAgICJcJG51bWZv dW5kIgorCisjIFRlc3QgbWF4LWNvdW50IHdpdGggc2l6ZS1jaGFyLgorIyBU aGV5IGNhbiBiZSBzcGVjaWZpZWQgaW4gZWl0aGVyIG9yZGVyLgorCitnZGJf dGVzdCAiZmluZCAvMWIgJmludDhfc2VhcmNoX2J1ZlxbMFxdLCArc2l6ZW9m KGludDhfc2VhcmNoX2J1ZiksIDB4NjEsIDB4NjEsIDB4NjEiIFwKKyAgICAi JHtoZXhfbnVtYmVyfS4qPGludDhfc2VhcmNoX2J1ZlxcKzEwPiR7b25lX3Bh dHRlcm5fZm91bmR9IiBcCisgICAgInNpemUsbWF4LWNvdW50LCAvMWIiCisK K2dkYl90ZXN0ICJmaW5kIC9iMSAmaW50OF9zZWFyY2hfYnVmXFswXF0sICtz aXplb2YoaW50OF9zZWFyY2hfYnVmKSwgMHg2MSwgMHg2MSwgMHg2MSIgXAor ICAgICIke2hleF9udW1iZXJ9Lio8aW50OF9zZWFyY2hfYnVmXFwrMTA+JHtv bmVfcGF0dGVybl9mb3VuZH0iIFwKKyAgICAic2l6ZSxtYXgtY291bnQsIC9i MSIKKworZ2RiX3Rlc3QgImZpbmQgL2IgLzEgJmludDhfc2VhcmNoX2J1Zlxb MFxdLCArc2l6ZW9mKGludDhfc2VhcmNoX2J1ZiksIDB4NjEsIDB4NjEsIDB4 NjEiIFwKKyAgICAiJHtoZXhfbnVtYmVyfS4qPGludDhfc2VhcmNoX2J1Zlxc KzEwPiR7b25lX3BhdHRlcm5fZm91bmR9IiBcCisgICAgInNpemUsbWF4LWNv dW50LCAvYi8xIgorCitnZGJfdGVzdCAiZmluZCAvMSAvYiAmaW50OF9zZWFy Y2hfYnVmXFswXF0sICtzaXplb2YoaW50OF9zZWFyY2hfYnVmKSwgMHg2MSwg MHg2MSwgMHg2MSIgXAorICAgICIke2hleF9udW1iZXJ9Lio8aW50OF9zZWFy Y2hfYnVmXFwrMTA+JHtvbmVfcGF0dGVybl9mb3VuZH0iIFwKKyAgICAic2l6 ZSxtYXgtY291bnQsIC8xL2IiCisKKyMgVGVzdCBzcGVjaWZ5aW5nIGVuZCBh ZGRyZXNzLgorCitnZGJfdGVzdCAiZmluZCAvYiAmaW50OF9zZWFyY2hfYnVm XFswXF0sICZpbnQ4X3NlYXJjaF9idWZcWzBcXStzaXplb2YoaW50OF9zZWFy Y2hfYnVmKSwgMHg2MSwgMHg2MSwgMHg2MSwgMHg2MSIgXAorICAgICIke2hl eF9udW1iZXJ9Lio8aW50OF9zZWFyY2hfYnVmXFwrMTA+JHtvbmVfcGF0dGVy bl9mb3VuZH0iIFwKKyAgICAiZmluZCBieXRlIHBhdHRlcm4gd2l0aCBlbmQg YWRkcmVzcyIKKworIyBUZXN0IDE2LWJpdCBwYXR0ZXJuLgorCitnZGJfdGVz dCAic2V0IGludDE2X3NlYXJjaF9idWZcWzEwXF0gPSAweDEyMzQiICIiICIi CisKK2dkYl90ZXN0ICJmaW5kIC9oICZpbnQxNl9zZWFyY2hfYnVmXFswXF0s ICtzaXplb2YoaW50MTZfc2VhcmNoX2J1ZiksIDB4MTIzNCIgXAorICAgICIk e2hleF9udW1iZXJ9Lio8aW50MTZfc2VhcmNoX2J1ZlxcKzIwPiR7b25lX3Bh dHRlcm5fZm91bmR9IiBcCisgICAgImZpbmQgMTYtYml0IHBhdHRlcm4iCisK K2dkYl90ZXN0ICJmaW5kICZpbnQxNl9zZWFyY2hfYnVmXFswXF0sICtzaXpl b2YoaW50MTZfc2VhcmNoX2J1ZiksIChpbnQxNl90KSAweDEyMzQiIFwKKyAg ICAiJHtoZXhfbnVtYmVyfS4qPGludDE2X3NlYXJjaF9idWZcXCsyMD4ke29u ZV9wYXR0ZXJuX2ZvdW5kfSIgXAorICAgICJmaW5kIDE2LWJpdCBwYXR0ZXJu IgorCisjIFRlc3QgMzItYml0IHBhdHRlcm4uCisKK2dkYl90ZXN0ICJzZXQg aW50MzJfc2VhcmNoX2J1ZlxbMTBcXSA9IDB4MTIzNDU2NzgiICIiICIiCisK K2dkYl90ZXN0ICJmaW5kICZpbnQzMl9zZWFyY2hfYnVmXFswXF0sICtzaXpl b2YoaW50MzJfc2VhcmNoX2J1ZiksIChpbnQzMl90KSAweDEyMzQ1Njc4IiBc CisgICAgIiR7aGV4X251bWJlcn0uKjxpbnQzMl9zZWFyY2hfYnVmXFwrNDA+ JHtvbmVfcGF0dGVybl9mb3VuZH0iIFwKKyAgICAiZmluZCAzMi1iaXQgcGF0 dGVybiIKKworZ2RiX3Rlc3QgImZpbmQgL3cgJmludDMyX3NlYXJjaF9idWZc WzBcXSwgK3NpemVvZihpbnQzMl9zZWFyY2hfYnVmKSwgMHgxMjM0NTY3OCIg XAorICAgICIke2hleF9udW1iZXJ9Lio8aW50MzJfc2VhcmNoX2J1ZlxcKzQw PiR7b25lX3BhdHRlcm5fZm91bmR9IiBcCisgICAgImZpbmQgMzItYml0IHBh dHRlcm4iCisKKyMgVGVzdCA2NC1iaXQgcGF0dGVybi4KKworZ2RiX3Rlc3Qg InNldCBpbnQ2NF9zZWFyY2hfYnVmXFsxMFxdID0gMHhmZWRjYmE5ODc2NTQz MjEwTEwiICIiICIiCisKK2dkYl90ZXN0ICJmaW5kICZpbnQ2NF9zZWFyY2hf YnVmXFswXF0sICtzaXplb2YoaW50NjRfc2VhcmNoX2J1ZiksIChpbnQ2NF90 KSAweGZlZGNiYTk4NzY1NDMyMTBMTCIgXAorICAgICIke2hleF9udW1iZXJ9 Lio8aW50NjRfc2VhcmNoX2J1ZlxcKzgwPiR7b25lX3BhdHRlcm5fZm91bmR9 IiBcCisgICAgImZpbmQgNjQtYml0IHBhdHRlcm4iCisKK2dkYl90ZXN0ICJm aW5kIC9nICZpbnQ2NF9zZWFyY2hfYnVmXFswXF0sICtzaXplb2YoaW50NjRf c2VhcmNoX2J1ZiksIDB4ZmVkY2JhOTg3NjU0MzIxMExMIiBcCisgICAgIiR7 aGV4X251bWJlcn0uKjxpbnQ2NF9zZWFyY2hfYnVmXFwrODA+JHtvbmVfcGF0 dGVybl9mb3VuZH0iIFwKKyAgICAiZmluZCA2NC1iaXQgcGF0dGVybiIKKwor IyBUZXN0IG1peGVkLXNpemVkIHBhdHRlcm5zLgorCitnZGJfdGVzdCAic2V0 ICooaW50OF90KikgJnNlYXJjaF9idWZcWzEwXF0gPSAweDYyIiAiIiAiIgor Z2RiX3Rlc3QgInNldCAqKGludDE2X3QqKSAmc2VhcmNoX2J1ZlxbMTFcXSA9 IDB4NjM2MyIgIiIgIiIKK2dkYl90ZXN0ICJzZXQgKihpbnQzMl90KikgJnNl YXJjaF9idWZcWzEzXF0gPSAweDY0NjQ2NDY0IiAiIiAiIgorCitnZGJfdGVz dCAiZmluZCAmc2VhcmNoX2J1ZlxbMFxdLCArMTAwLCAoaW50OF90KSAweDYy LCAoaW50MTZfdCkgMHg2MzYzLCAoaW50MzJfdCkgMHg2NDY0NjQ2NCIgXAor ICAgICIke2hleF9udW1iZXJ9JHtvbmVfcGF0dGVybl9mb3VuZH0iIFwKKyAg ICAiZmluZCBtaXhlZC1zaXplZCBwYXR0ZXJuIgorCisjIFRlc3Qgc2VhcmNo IHNwYW5uaW5nIGEgbGFyZ2UgcmFuZ2UsIGluIHRoZSBwYXJ0aWN1bGFyIGNh c2Ugb2YgbmF0aXZlCisjIHRhcmdldHMsIHRlc3QgdGhlIHNlYXJjaCBzcGFu bmluZyBtdWx0aXBsZSBjaHVua3MuCisjIFJlbW90ZSB0YXJnZXRzIG1heSBp bXBsZW1lbnQgdGhlIHNlYXJjaCBkaWZmZXJlbnRseS4KKworc2V0IENIVU5L X1NJWkUgMTYwMDAgOyMgc2VlIGZpbmRjbWQuYworCitnZGJfdGVzdCAic2V0 ICooaW50MzJfdCopICZzZWFyY2hfYnVmXFswKiR7Q0hVTktfU0laRX0rMTAw XF0gPSAweDEyMzQ1Njc4IiAiIiAiIgorZ2RiX3Rlc3QgInNldCAqKGludDMy X3QqKSAmc2VhcmNoX2J1ZlxbMSoke0NIVU5LX1NJWkV9KzEwMFxdID0gMHgx MjM0NTY3OCIgIiIgIiIKKworZ2RiX3Rlc3QgImZpbmQgL3cgc2VhcmNoX2J1 ZiwgK3NlYXJjaF9idWZfc2l6ZSwgMHgxMjM0NTY3OCIgXAorICAgICIke2hl eF9udW1iZXJ9JHtuZXdsaW5lfSR7aGV4X251bWJlcn0ke3R3b19wYXR0ZXJu c19mb3VuZH0iIFwKKyAgICAic2VhcmNoIHNwYW5uaW5nIGxhcmdlIHJhbmdl IgorCisjIEZvciBuYXRpdmUgdGFyZ2V0cywgdGVzdCBhIHBhdHRlcm4gc3Ry YWRkbGluZyBhIGNodW5rIGJvdW5kYXJ5LgorCitpZiBbaXNuYXRpdmVdIHsK KyAgICBnZGJfdGVzdCAic2V0ICooaW50MzJfdCopICZzZWFyY2hfYnVmXFsk e0NIVU5LX1NJWkV9LTFcXSA9IDB4ZmRiOTc1MzEiICIiICIiCisgICAgZ2Ri X3Rlc3QgImZpbmQgL3cgc2VhcmNoX2J1ZiwgK3NlYXJjaF9idWZfc2l6ZSwg MHhmZGI5NzUzMSIgXAorICAgICIke2hleF9udW1iZXJ9JHtvbmVfcGF0dGVy bl9mb3VuZH0iIFwKKyAgICAiZmluZCBwYXR0ZXJuIHN0cmFkZGxpbmcgY2h1 bmsgYm91bmRhcnkiCit9Cg== ------=_Part_9855_17548984.1209391612071--