From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24841 invoked by alias); 8 Dec 2011 16:10:54 -0000 Received: (qmail 24810 invoked by uid 22791); 8 Dec 2011 16:10:43 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 08 Dec 2011 16:10:20 +0000 Received: by vcbfk26 with SMTP id fk26so1819375vcb.0 for ; Thu, 08 Dec 2011 08:10:19 -0800 (PST) Received: by 10.52.94.75 with SMTP id da11mr1982014vdb.111.1323360619253; Thu, 08 Dec 2011 08:10:19 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.4.210 with HTTP; Thu, 8 Dec 2011 08:09:58 -0800 (PST) In-Reply-To: References: From: Kevin Pouget Date: Thu, 08 Dec 2011 18:08:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf307f312e9eceb004b396e7c4 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: 2011-12/txt/msg00270.txt.bz2 --20cf307f312e9eceb004b396e7c4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2868 On Thu, Dec 8, 2011 at 4:33 PM, Kevin Pouget wrote: > On Thu, Dec 8, 2011 at 3:56 PM, Tom Tromey wrote: >>>>>>> "Kevin" =3D=3D Kevin Pouget writes: >> >> Kevin> and we're .... not ready! >> Kevin> there are some regressions this morning, certainly due to your >> Kevin> ambiguous linespec patch! >> >> Kevin> first one is quite obvious: >> >> Kevin> a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp >> Kevin> -if ![runto "getpid"] then { >> Kevin> - =A0 =A0fail "Cannot run to getpid." >> Kevin> +if ![runto_main] then { >> Kevin> + =A0 =A0fail "Cannot run to main." =A0 =A0 return 0 } >> Kevin> +gdb_breakpoint "getpid" {temporary} >> Kevin> +gdb_test "continue" "Temporary breakpoint .*in getpid.*" "contin= ue to getpid" >> Kevin> + >> >> Kevin> "break getpid" used to work before actually starting the inferior= , but >> Kevin> now it's unresolved >> >> This test assumes that there is no debuginfo for getpid -- but in my >> case, I have glibc debuginfo installed. =A0This isn't unheard of for gdb >> developers :) >> >> The test would be more robust if you put a new function in a new file >> and arranged for that file to be compiled without debuginfo. >> >> Sorry I didn't notice this before. > > I'll work on that, thanks for noticing it > >> Kevin> bpfinishpy_out_of_scope can't be triggered anymore because you set >> Kevin> b-> pspace to NULL. I hesitated about how to fix it, but I think = that >> Kevin> FinishBP have to be bound to the pspace in which they were set, s= o I >> Kevin> added this line: >> >> It seems to me that one of these breakpoints has to be thread-specific >> as well. =A0Maybe the code to set b->pspace should notice thread-specific >> breakpoints and allow pspace to be set there. >> >> I'd rather this be done in breakpoint.c than have other modules modify >> struct breakpoint directly. >> >> Tom > > you're right about thread-specific, but I'm not sure how to enforce > it. Currently, FinishBreakpoint only accepts a frame as parameter, and > a frame is only bound to a pspace, not a thread ... > > My code >> self_bpfinish->py_bp.bp->pspace =3D current_program_space; > was wrong, it should rather be >> pspace =3D get_frame_program_space (prev_frame); > and this also implies that we can't really defer this setting to > another place ... > > Maybe we can state in the documentation that FinishBreakpoint will be > created by default in the selected thread, and add another parameter > in the constructor to specify another thread? so it was not possible to allow the user to specify the thread as I suggest, for the reason I mentioned two lines above ... :( I added this line to the doc to express it: > Finish breakpoints are thread specific and must be create with the right > thread selected. cordially, Kevin (I'll send getpid fix tomorrow) --20cf307f312e9eceb004b396e7c4 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gvxyp56p0 Content-length: 78296 RnJvbSBiZmI2YTJjOWVhZjA2NDE4MTk4ZjBlZGIzYmIyYWE4MDcyMDM0ZjQ1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSAgSW50cm9kdWNlIGdk Yi5GaW5pc2hCcmVha3BvaW50CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2JyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBnZGIvYnJlYWtwb2ludC5o ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0K IGdkYi9kb2MvZ2RiLnRleGluZm8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICA1MyArKysKIGdkYi9pbmZjbWQuYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArKy0KIGdkYi9pbmZl cmlvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMyArCiBnZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYyAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgNDggKy0tCiBnZGIvcHl0aG9uL3B5LWZpbmlz aGJyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAgICB8ICA0NjIgKysrKysr KysrKysrKysrKysrKysKIGdkYi9weXRob24vcHktZnJhbWUuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArLQogZ2RiL3B5dGhvbi9w eXRob24taW50ZXJuYWwuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUw ICsrLQogZ2RiL3B5dGhvbi9weXRob24uYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAxICsKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1icmVha3BvaW50LmV4cCAgICAgICAgIHwgICAgNyArLQogZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMgICAg fCAgIDk3ICsrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5leHAgIHwgIDIzNyArKysrKysrKysrCiBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkgICB8 ICAgODkgKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50Mi5jYyAgfCAgIDU5ICsrKwogZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAgfCAgIDY1ICsr KwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50Mi5weSAgfCAgIDMzICsrCiAxOSBmaWxlcyBjaGFuZ2VkLCAxMjIzIGlu c2VydGlvbnMoKyksIDY3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGdkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 Mi5weQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtl ZmlsZS5pbgppbmRleCBiNzFkYjMzLi5kOGQxYjQwIDEwMDY0NAotLS0gYS9n ZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0yODcs NiArMjg3LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktZXZ0cmVn aXN0cnkubyBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0ZWRldmVudC5vIFwK KwlweS1maW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZyYW1lLm8gXAogCXB5 LWZ1bmN0aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApAQCAtMzE4LDYgKzMx OSw3IEBAIFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktZXZ0 cmVnaXN0cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBcCiAJcHl0aG9uL3B5 LWV4aXRlZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5pc2hicmVha3BvaW50 LmMgXAogCXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRob24vcHktZnVuY3Rp b24uYyBcCiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApAQCAtMjEwOSw2ICsy MTExLDEwIEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3JjZGlyKS9weXRob24v cHktZXhpdGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdT KSAkKHNyY2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKFBPU1RD T01QSUxFKQogCitweS1maW5pc2hicmVha3BvaW50Lm86ICQoc3JjZGlyKS9w eXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCisJJChDT01QSUxFKSAkKFBZ VEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJlYWtw b2ludC5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZnJhbWUubzogJChzcmNk aXIpL3B5dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9D RkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoUE9TVENP TVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvTkVXUyBiL2dkYi9ORVdTCmluZGV4 IDQyNzgyY2UuLmI3NTU2MDUgMTAwNjQ0Ci0tLSBhL2dkYi9ORVdTCisrKyBi L2dkYi9ORVdTCkBAIC01Nyw2ICs1NywxMCBAQAogICAqKiBUaGUgImdkYi5i cmVha3BvaW50IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZh dm9yIG9mCiAgICAgICJnZGIuYnJlYWtwb2ludHMiLgogCisgICoqIEEgbmV3 IGNsYXNzICJnZGIuRmluaXNoQnJlYWtwb2ludCIgaXMgcHJvdmlkZWQgdG8g Y2F0Y2ggdGhlIHJldHVybgorICAgICBvZiBhIGZ1bmN0aW9uLiAgVGhpcyBj bGFzcyBpcyBiYXNlZCBvbiB0aGUgImZpbmlzaCIgY29tbWFuZAorICAgICBh dmFpbGFibGUgaW4gdGhlIENMSS4gCisKICAgKiogVHlwZSBvYmplY3RzIGZv ciBzdHJ1Y3QgYW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxvdyBhY2Nlc3MgdG8K ICAgICAgdGhlIGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQeXRob24gZGljdGlv bmFyeSAobWFwcGluZykgbWV0aG9kcy4KICAgICAgRm9yIGV4YW1wbGUsICJz b21lX3R5cGVbJ215ZmllbGQnXSIgbm93IHdvcmtzLCBhcyBkb2VzCmRpZmYg LS1naXQgYS9nZGIvYnJlYWtwb2ludC5jIGIvZ2RiL2JyZWFrcG9pbnQuYwpp bmRleCBkOWQ1YmJlLi5iZmQwY2E3IDEwMDY0NAotLS0gYS9nZGIvYnJlYWtw b2ludC5jCisrKyBiL2dkYi9icmVha3BvaW50LmMKQEAgLTc5MzMsNyArNzkz Myw4IEBAIGNyZWF0ZV9icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwKICAgICAgIGItPmRpc3Bvc2l0aW9uID0gdGVtcGZsYWcgPyBkaXNw X2RlbCA6IGRpc3BfZG9udHRvdWNoOwogICAgICAgYi0+Y29uZGl0aW9uX25v dF9wYXJzZWQgPSAxOwogICAgICAgYi0+ZW5hYmxlX3N0YXRlID0gZW5hYmxl ZCA/IGJwX2VuYWJsZWQgOiBicF9kaXNhYmxlZDsKLSAgICAgIGlmICh0eXBl X3dhbnRlZCAhPSBicF9icmVha3BvaW50ICYmIHR5cGVfd2FudGVkICE9IGJw X2hhcmR3YXJlX2JyZWFrcG9pbnQpCisgICAgICBpZiAoKHR5cGVfd2FudGVk ICE9IGJwX2JyZWFrcG9pbnQKKyAgICAgICAgICAgJiYgdHlwZV93YW50ZWQg IT0gYnBfaGFyZHdhcmVfYnJlYWtwb2ludCkgfHwgdGhyZWFkICE9IC0xKQog CWItPnBzcGFjZSA9IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZTsKIAogICAgICAg aW5zdGFsbF9icmVha3BvaW50IChpbnRlcm5hbCwgYiwgMCk7CmRpZmYgLS1n aXQgYS9nZGIvYnJlYWtwb2ludC5oIGIvZ2RiL2JyZWFrcG9pbnQuaAppbmRl eCBkZGYxODgxLi5kMjJlNTY0IDEwMDY0NAotLS0gYS9nZGIvYnJlYWtwb2lu dC5oCisrKyBiL2dkYi9icmVha3BvaW50LmgKQEAgLTU2OSw3ICs1NjksNyBA QCBzdHJ1Y3QgYnJlYWtwb2ludAogCiAgICAgLyogVGhlIHByb2dyYW0gc3Bh Y2UgdXNlZCB0byBzZXQgdGhlIGJyZWFrcG9pbnQuICBUaGlzIGlzIG9ubHkg c2V0CiAgICAgICAgZm9yIGJyZWFrcG9pbnRzIHdoaWNoIGFyZSBzcGVjaWZp YyB0byBhIHByb2dyYW0gc3BhY2U7IGZvcgotICAgICAgIG9yZGluYXJ5IGJy ZWFrcG9pbnRzIHRoaXMgaXMgTlVMTC4gICovCisgICAgICAgbm9uLXRocmVh ZC1zcGVjaWZpYyBvcmRpbmFyeSBicmVha3BvaW50cyB0aGlzIGlzIE5VTEwu ICAqLwogICAgIHN0cnVjdCBwcm9ncmFtX3NwYWNlICpwc3BhY2U7CiAKICAg ICAvKiBTdHJpbmcgd2UgdXNlZCB0byBzZXQgdGhlIGJyZWFrcG9pbnQgKG1h bGxvYydkKS4gICovCmRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZv IGIvZ2RiL2RvYy9nZGIudGV4aW5mbwppbmRleCA1MGMyOTllLi45NTAyNTdm IDEwMDY0NAotLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9k b2MvZ2RiLnRleGluZm8KQEAgLTIxNTAxLDYgKzIxNTAxLDggQEAgc2l0dWF0 aW9uLCBhIFB5dGhvbiBAY29kZXtLZXlib2FyZEludGVycnVwdH0gZXhjZXB0 aW9uIGlzIHRocm93bi4KICogU3ltYm9sIFRhYmxlcyBJbiBQeXRob246OiAg ICAgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0YWJsZXMuCiAq IExhenkgU3RyaW5ncyBJbiBQeXRob246OiAgICAgIFB5dGhvbiByZXByZXNl bnRhdGlvbiBvZiBsYXp5IHN0cmluZ3MuCiAqIEJyZWFrcG9pbnRzIEluIFB5 dGhvbjo6ICAgICAgIE1hbmlwdWxhdGluZyBicmVha3BvaW50cyB1c2luZyBQ eXRob24uCisqIEZpbmlzaCBCcmVha3BvaW50cyBpbiBQeXRob246OiBTZXR0 aW5nIEJyZWFrcG9pbnRzIG9uIGZ1bmN0aW9uIHJldHVybgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBQeXRob24uCiBAZW5kIG1l bnUKIAogQG5vZGUgQmFzaWMgUHl0aG9uCkBAIC0yNDMzNSw2ICsyNDMzNyw1 NyBAQCBjb21tYW5kcywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzLiAgSWYgdGhl cmUgYXJlIG5vIGNvbW1hbmRzLCB0aGlzCiBhdHRyaWJ1dGUgaXMgQGNvZGV7 Tm9uZX0uICBUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCiBAZW5k IGRlZnZhcgogCitAbm9kZSBGaW5pc2ggQnJlYWtwb2ludHMgaW4gUHl0aG9u CitAc3Vic3Vic2VjdGlvbiBGaW5pc2ggQnJlYWtwb2ludHMKKworQGNpbmRl eCBweXRob24gZmluaXNoIGJyZWFrcG9pbnRzCitAdGluZGV4IGdkYi5GaW5p c2hCcmVha3BvaW50CisKK0EgZmluaXNoIGJyZWFrcG9pbnQgaXMgYSB0ZW1w b3JhcnkgYnJlYWtwb2ludCBzZXQgYXQgdGhlIHJldHVybiBhZGRyZXNzIG9m CithIGZyYW1lLCBiYXNlZCBvbiB0aGUgQGNvZGV7ZmluaXNofSBjb21tYW5k LiAgQGNvZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9CitleHRlbmRzIEBjb2Rl e2dkYi5CcmVha3BvaW50fS4gIFRoZSB1bmRlcmx5aW5nIGJyZWFrcG9pbnQg d2lsbCBiZSBkaXNhYmxlZCAKK2FuZCBkZWxldGVkIHdoZW4gdGhlIGV4ZWN1 dGlvbiB3aWxsIHJ1biBvdXQgb2YgdGhlIGJyZWFrcG9pbnQgc2NvcGUgKGku ZS5AOiAKK0Bjb2Rle0JyZWFrcG9pbnQuc3RvcH0gb3IgQGNvZGV7RmluaXNo QnJlYWtwb2ludC5vdXRfb2Zfc2NvcGV9IHRyaWdnZXJlZCkuCitGaW5pc2gg YnJlYWtwb2ludHMgYXJlIHRocmVhZCBzcGVjaWZpYyBhbmQgbXVzdCBiZSBj cmVhdGUgd2l0aCB0aGUgcmlnaHQgCit0aHJlYWQgc2VsZWN0ZWQuICAKKyAK K0BkZWZ1biBGaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChAcntbfWZyYW1l QHJ7XX0gQHJ7W30sIGludGVybmFsQHJ7XX0pCitDcmVhdGUgYSBmaW5pc2gg YnJlYWtwb2ludCBhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIEBjb2Rl e2dkYi5GcmFtZX0KK29iamVjdCBAdmFye2ZyYW1lfS4gIElmIEB2YXJ7ZnJh bWV9IGlzIG5vdCBwcm92aWRlZCwgdGhpcyBkZWZhdWx0cyB0byB0aGUKK25l d2VzdCBmcmFtZS4gIFRoZSBvcHRpb25hbCBAdmFye2ludGVybmFsfSBhcmd1 bWVudCBhbGxvd3MgdGhlIGJyZWFrcG9pbnQgdG8KK2JlY29tZSBpbnZpc2li bGUgdG8gdGhlIHVzZXIuICBAeHJlZntCcmVha3BvaW50cyBJbiBQeXRob259 LCBmb3IgZnVydGhlciAKK2RldGFpbHMgYWJvdXQgdGhpcyBhcmd1bWVudC4K K0BlbmQgZGVmdW4KKworQGRlZnVuIEZpbmlzaEJyZWFrcG9pbnQub3V0X29m X3Njb3BlIChzZWxmKQorSW4gc29tZSBjaXJjdW1zdGFuY2VzIChlLmcuQDog QGNvZGV7bG9uZ2ptcH0sIENAdHsrK30gZXhjZXB0aW9ucywgQHZhbHVle0dE Qk59IAorQGNvZGV7cmV0dXJufSBjb21tYW5kLCBAZG90c3t9KSwgYSBmdW5j dGlvbiBtYXkgbm90IHByb3Blcmx5IHRlcm1pbmF0ZSwgYW5kCit0aHVzIG5l dmVyIGhpdCB0aGUgZmluaXNoIGJyZWFrcG9pbnQuICBXaGVuIEB2YWx1ZXtH REJOfSBub3RpY2VzIHN1Y2ggYQorc2l0dWF0aW9uLCB0aGUgQGNvZGV7b3V0 X29mX3Njb3BlfSBjYWxsYmFjayB3aWxsIGJlIHRyaWdnZXJlZC4KKworWW91 IG1heSB3YW50IHRvIHN1Yi1jbGFzcyBAY29kZXtnZGIuRmluaXNoQnJlYWtw b2ludH0gYW5kIG92ZXJyaWRlIHRoaXMKK21ldGhvZDoKKworQHNtYWxsZXhh bXBsZQorY2xhc3MgTXlGaW5pc2hCcmVha3BvaW50IChnZGIuRmluaXNoQnJl YWtwb2ludCkKKyAgICBkZWYgc3RvcCAoc2VsZik6CisgICAgICAgIHByaW50 ICJub3JtYWwgZmluaXNoIgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIAor ICAgIGRlZiBvdXRfb2Zfc2NvcGUgKCk6CisgICAgICAgIHByaW50ICJhYm5v cm1hbCBmaW5pc2giCitAZW5kIHNtYWxsZXhhbXBsZSAKK0BlbmQgZGVmdW4K KworQGRlZnZhciBGaW5pc2hCcmVha3BvaW50LnJldHVybl92YWx1ZQorV2hl biBAdmFsdWV7R0RCTn0gaXMgc3RvcHBlZCBhdCBhIGZpbmlzaCBicmVha3Bv aW50IGFuZCB0aGUgZnJhbWUgCit1c2VkIHRvIGJ1aWxkIHRoZSBAY29kZXtn ZGIuRmluaXNoQnJlYWtwb2ludH0gb2JqZWN0IGhhZCBkZWJ1ZyBzeW1ib2xz LCB0aGlzCithdHRyaWJ1dGUgd2lsbCBjb250YWluIGEgQGNvZGV7Z2RiLlZh bHVlfSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuCit2YWx1 ZSBvZiB0aGUgZnVuY3Rpb24uICBUaGUgdmFsdWUgd2lsbCBiZSBAY29kZXtO b25lfSBpZiB0aGUgZnVuY3Rpb24gcmV0dXJuIAordHlwZSBpcyBAY29kZXt2 b2lkfSBvciBpZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyBub3QgY29tcHV0YWJs ZS4gIFRoaXMgYXR0cmlidXRlCitpcyBub3Qgd3JpdGFibGUuCitAZW5kIGRl ZnZhcgorCiBAbm9kZSBMYXp5IFN0cmluZ3MgSW4gUHl0aG9uCiBAc3Vic3Vi c2VjdGlvbiBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJpbmdz LgogCmRpZmYgLS1naXQgYS9nZGIvaW5mY21kLmMgYi9nZGIvaW5mY21kLmMK aW5kZXggNWQ5NGNkNC4uY2ZmYTE5NCAxMDA2NDQKLS0tIGEvZ2RiL2luZmNt ZC5jCisrKyBiL2dkYi9pbmZjbWQuYwpAQCAtMTQxNCwxNiArMTQxNCwyNiBA QCBhZHZhbmNlX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQog ICB1bnRpbF9icmVha19jb21tYW5kIChhcmcsIGZyb21fdHR5LCAxKTsKIH0K IAwKLS8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUg ZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICovCisvKiBSZXR1cm4gdGhl IHZhbHVlIG9mIHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5k IG9mIGEgJ2ZpbmlzaCcKKyAgIGNvbW1hbmQvQlAuICAqLwogCi1zdGF0aWMg dm9pZAotcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190 eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKK3N0cnVjdCB2YWx1ZSAq CitnZXRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBz dHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKIHsKLSAgc3RydWN0IGdkYmFyY2gg KmdkYmFyY2ggPSBnZXRfcmVnY2FjaGVfYXJjaCAoc3RvcF9yZWdpc3RlcnMp OwotICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NoYWluOwotICBzdHJ1Y3QgdWlf c3RyZWFtICpzdGI7CisgIHN0cnVjdCByZWdjYWNoZSAqc3RvcF9yZWdzID0g c3RvcF9yZWdpc3RlcnM7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwog ICBzdHJ1Y3QgdmFsdWUgKnZhbHVlOwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91 dCA9IGN1cnJlbnRfdWlvdXQ7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVw ID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCisgIC8q IElmIHN0b3BfcmVnaXN0ZXJzIHdlcmUgbm90IHNhdmVkLCB1c2UgdGhlIGN1 cnJlbnQgcmVnaXN0ZXJzLiAgKi8KKyAgaWYgKCFzdG9wX3JlZ3MpCisgICAg eworICAgICAgc3RvcF9yZWdzID0gcmVnY2FjaGVfZHVwIChnZXRfY3VycmVu dF9yZWdjYWNoZSAoKSk7CisgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVw X3JlZ2NhY2hlX3hmcmVlIChzdG9wX3JlZ3MpOworICAgIH0KKworICBnZGJh cmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHN0b3BfcmVncyk7CiAKICAgQ0hF Q0tfVFlQRURFRiAodmFsdWVfdHlwZSk7CiAgIGdkYl9hc3NlcnQgKFRZUEVf Q09ERSAodmFsdWVfdHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpOwpAQCAtMTQ0 Miw3ICsxNDUyLDcgQEAgcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlw ZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKICAgICBj YXNlIFJFVFVSTl9WQUxVRV9BQklfUkVUVVJOU19BRERSRVNTOgogICAgIGNh c2UgUkVUVVJOX1ZBTFVFX0FCSV9QUkVTRVJWRVNfQUREUkVTUzoKICAgICAg IHZhbHVlID0gYWxsb2NhdGVfdmFsdWUgKHZhbHVlX3R5cGUpOwotICAgICAg Z2RiYXJjaF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIGZ1bmNfdHlwZSwgdmFs dWVfdHlwZSwgc3RvcF9yZWdpc3RlcnMsCisgICAgICBnZGJhcmNoX3JldHVy bl92YWx1ZSAoZ2RiYXJjaCwgZnVuY190eXBlLCB2YWx1ZV90eXBlLCBzdG9w X3JlZ3MsCiAJCQkgICAgdmFsdWVfY29udGVudHNfcmF3ICh2YWx1ZSksIE5V TEwpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBSRVRVUk5fVkFMVUVfU1RS VUNUX0NPTlZFTlRJT046CkBAIC0xNDUyLDYgKzE0NjIsMjEgQEAgcHJpbnRf cmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3Qg dHlwZSAqdmFsdWVfdHlwZSkKICAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJ TEVfXywgX19MSU5FX18sIF8oImJhZCBzd2l0Y2giKSk7CiAgICAgfQogCisg IGRvX2NsZWFudXBzIChjbGVhbnVwKTsKKworICByZXR1cm4gdmFsdWU7Cit9 CisKKy8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUg ZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICovCisKK3N0YXRpYyB2b2lk CitwcmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUs IHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQoreworICBzdHJ1Y3QgdmFsdWUg KnZhbHVlID0gZ2V0X3JldHVybl92YWx1ZSAoZnVuY190eXBlLCB2YWx1ZV90 eXBlKTsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgc3RydWN0 IHVpX3N0cmVhbSAqc3RiOworICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1 cnJlbnRfdWlvdXQ7CisKICAgaWYgKHZhbHVlKQogICAgIHsKICAgICAgIHN0 cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7CmRpZmYgLS1naXQgYS9n ZGIvaW5mZXJpb3IuaCBiL2dkYi9pbmZlcmlvci5oCmluZGV4IGNmYWVhN2Yu LmYxOTg2OTYgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZlcmlvci5oCisrKyBiL2dk Yi9pbmZlcmlvci5oCkBAIC0yNjksNiArMjY5LDkgQEAgZXh0ZXJuIHZvaWQg ZGV0YWNoX2NvbW1hbmQgKGNoYXIgKiwgaW50KTsKIAogZXh0ZXJuIHZvaWQg bm90aWNlX25ld19pbmZlcmlvciAocHRpZF90LCBpbnQsIGludCk7CiAKK2V4 dGVybiBzdHJ1Y3QgdmFsdWUgKmdldF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0 eXBlICpmdW5jX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSk7CisKIC8qIEFk ZHJlc3MgYXQgd2hpY2ggaW5mZXJpb3Igc3RvcHBlZC4gICovCiAKIGV4dGVy biBDT1JFX0FERFIgc3RvcF9wYzsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24v cHktYnJlYWtwb2ludC5jIGIvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMK aW5kZXggMTFkNjBmZS4uNjRlZjQ1ZiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhv bi9weS1icmVha3BvaW50LmMKKysrIGIvZ2RiL3B5dGhvbi9weS1icmVha3Bv aW50LmMKQEAgLTMxLDUyICszMSwxNiBAQAogI2luY2x1ZGUgImFyY2gtdXRp bHMuaCIKICNpbmNsdWRlICJsYW5ndWFnZS5oIgogCi1zdGF0aWMgUHlUeXBl T2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7Ci0KIC8qIE51bWJlciBv ZiBsaXZlIGJyZWFrcG9pbnRzLiAgKi8KIHN0YXRpYyBpbnQgYnBweV9saXZl OwogCiAvKiBWYXJpYWJsZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJl dHdlZW4gdGhlIEJyZWFrcG9pbnQKICAgIGNvbnN0cnVjdG9yIGFuZCB0aGUg YnJlYWtwb2ludC1jcmVhdGVkIGhvb2sgZnVuY3Rpb24uICAqLwotc3RhdGlj IGJyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRpbmdfb2JqZWN0OworYnJl YWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAKIC8qIEZ1 bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRob24gY29uZGl0aW9u IGlzIGV2YWx1YXRlZC4gICovCiBzdGF0aWMgY2hhciAqIGNvbnN0IHN0b3Bf ZnVuYyA9ICJzdG9wIjsKIAotc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Ci17 Ci0gIFB5T2JqZWN0X0hFQUQKLQotICAvKiBUaGUgYnJlYWtwb2ludCBudW1i ZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCi0gIGludCBudW1iZXI7Ci0KLSAg LyogVGhlIGdkYiBicmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUg YnJlYWtwb2ludCBoYXMgYmVlbgotICAgICBkZWxldGVkLiAgKi8KLSAgc3Ry dWN0IGJyZWFrcG9pbnQgKmJwOwotfTsKLQotLyogUmVxdWlyZSB0aGF0IEJS RUFLUE9JTlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5 dGhvbgotICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICAqLwotI2Rl ZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJCVwKLSAg ICBkbyB7CQkJCQkJCQlcCi0gICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9 PSBOVUxMKQkJCQkJXAotCXJldHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1 bnRpbWVFcnJvciwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkgICAg IF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwJCVwKLQkJCSAgICAg KEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJCVwKLSAgICB9IHdoaWxlICgwKQot Ci0vKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFr cG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCi0gICBleGNlcHRpb24gaWYgaXQg aXMgaW52YWxpZC4gIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiBzZXR0ZXIg ZnVuY3Rpb25zLiAgKi8KLSNkZWZpbmUgQlBQWV9TRVRfUkVRVUlSRV9WQUxJ RChCcmVha3BvaW50KQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAg aWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLSAgICAgICAg ewkJCQkJCQkJXAotCSAgUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJy b3IsIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgXAotCQkJKEJy ZWFrcG9pbnQpLT5udW1iZXIpOwkJCQlcCi0JICByZXR1cm4gLTE7CQkJCQkJ CVwKLQl9CQkJCQkJCQlcCi0gICAgfSB3aGlsZSAoMCkKLQogLyogVGhpcyBp cyB1c2VkIHRvIGluaXRpYWxpemUgdmFyaW91cyBnZGIuYnBfKiBjb25zdGFu dHMuICAqLwogc3RydWN0IHB5YnBfY29kZQogewpAQCAtNzYyLDYgKzcyNiw5 IEBAIGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmpl Y3QgKmJwX29iaikKICAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2Ri YXJjaCA/IGItPmdkYmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgpOwogICBz dHJ1Y3QgY2xlYW51cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChn YXJjaCwgY3VycmVudF9sYW5ndWFnZSk7CiAKKyAgaWYgKGJwX29iai0+aXNf ZmluaXNoX2JwKQorICAgIGJwZmluaXNocHlfcHJlX3N0b3BfaG9vayAoYnBf b2JqKTsKKwogICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAocHlfYnAs IHN0b3BfZnVuYykpCiAgICAgewogICAgICAgUHlPYmplY3QgKnJlc3VsdCA9 IFB5T2JqZWN0X0NhbGxNZXRob2QgKHB5X2JwLCBzdG9wX2Z1bmMsIE5VTEwp OwpAQCAtNzgzLDYgKzc1MCwxMCBAQCBnZGJweV9zaG91bGRfc3RvcCAoc3Ry dWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCiAgICAgICBlbHNlCiAJ Z2RicHlfcHJpbnRfc3RhY2sgKCk7CiAgICAgfQorCisgIGlmIChicF9vYmot PmlzX2ZpbmlzaF9icCkKKyAgICBicGZpbmlzaHB5X3Bvc3Rfc3RvcF9ob29r IChicF9vYmopOworCiAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKIAogICBy ZXR1cm4gc3RvcDsKQEAgLTg0NSw2ICs4MTYsNyBAQCBnZGJweV9icmVha3Bv aW50X2NyZWF0ZWQgKHN0cnVjdCBicmVha3BvaW50ICpicCkKICAgICAgIG5l d2JwLT5udW1iZXIgPSBicC0+bnVtYmVyOwogICAgICAgbmV3YnAtPmJwID0g YnA7CiAgICAgICBuZXdicC0+YnAtPnB5X2JwX29iamVjdCA9IG5ld2JwOwor ICAgICAgbmV3YnAtPmlzX2ZpbmlzaF9icCA9IDA7CiAgICAgICBQeV9JTkNS RUYgKG5ld2JwKTsKICAgICAgICsrYnBweV9saXZlOwogICAgIH0KQEAgLTEw MDYsNyArOTc4LDcgQEAgc3RhdGljIFB5TWV0aG9kRGVmIGJyZWFrcG9pbnRf b2JqZWN0X21ldGhvZHNbXSA9CiAgIHsgTlVMTCB9IC8qIFNlbnRpbmVsLiAg Ki8KIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmpl Y3RfdHlwZSA9CitQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlw ZSA9CiB7CiAgIFB5T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKICAgMCwJCQkJ ICAvKm9iX3NpemUqLwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1maW5p c2hicmVha3BvaW50LmMgYi9nZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9p bnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQ4 MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS1maW5pc2hi cmVha3BvaW50LmMKQEAgLTAsMCArMSw0NjIgQEAKKy8qIFB5dGhvbiBpbnRl cmZhY2UgdG8gZmluaXNoIGJyZWFrcG9pbnRzCisKKyAgIENvcHlyaWdodCAo QykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworCisKKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRl ICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgi CisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgorI2luY2x1ZGUgImZyYW1lLmgi CisjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYXJjaC11dGls cy5oIgorI2luY2x1ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAib2JzZXJ2 ZXIuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgorCitzdGF0aWMgUHlUeXBl T2JqZWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlOworCisvKiBG dW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgUHl0aG9uIGZpbmlzaCBi cCBpcyBmb3VuZCBvdXQgb2Ygc2NvcGUuICAqLworc3RhdGljIGNoYXIgKiBj b25zdCBvdXRvZnNjb3BlX2Z1bmMgPSAib3V0X29mX3Njb3BlIjsKKworLyog c3RydWN0IGltcGxlbWVudGluZyB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQg b2JqZWN0IGJ5IGV4dGVuZGluZworICAgdGhlIGdkYi5CcmVha3BvaW50IGNs YXNzLiAgKi8KK3N0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QKK3sK KyAgLyogZ2RiLkJyZWFrcG9pbnQgYmFzZSBjbGFzcy4gICovCisgIGJyZWFr cG9pbnRfb2JqZWN0IHB5X2JwOworICAvKiBnZGIuVHlwZSBvYmplY3Qgb2Yg dGhlIHZhbHVlIHJldHVybiBieSB0aGUgYnJlYWtwb2ludGVkIGZ1bmN0aW9u LgorICAgICBNYXkgYmUgTlVMTCBpZiBubyBkZWJ1ZyBpbmZvcm1hdGlvbiB3 YXMgYXZhaWxhYmxlIG9yIHJldHVybiB0eXBlCisgICAgIHdhcyBWT0lELiAg Ki8KKyAgUHlPYmplY3QgKnJldHVybl90eXBlOworICAvKiBnZGIuVHlwZSBv YmplY3Qgb2YgdGhlIGZ1bmN0aW9uIGZpbmlzaGVkIGJ5IHRoaXMgYnJlYWtw b2ludC4gIFdpbGwgYmUKKyAgICAgTlVMTCBpZiByZXR1cm5fdHlwZSBpcyBO VUxMLiAgKi8KKyAgUHlPYmplY3QgKmZ1bmN0aW9uX3R5cGU7CisgIC8qIFdo ZW4gc3RvcHBlZCBhdCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIGdkYi5WYWx1 ZSBvYmplY3QgcmV0dXJuZWQgYnkKKyAgICAgdGhlIGZ1bmN0aW9uOyBQeV9O b25lIGlmIHRoZSB2YWx1ZSBpcyBub3QgY29tcHV0YWJsZTsgTlVMTCBpZiBH REIgaXMKKyAgICAgbm90IHN0b3BwZWQgYXQgYSBGaW5pc2hCcmVha3BvaW50 LiAgKi8KKyAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKK307CisKKy8qIFB5 dGhvbiBmdW5jdGlvbiB0byBnZXQgdGhlICdyZXR1cm5fdmFsdWUnIGF0dHJp YnV0ZSBvZgorICAgRmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBQ eU9iamVjdCAqCiticGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSAoUHlPYmpl Y3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKworICBp ZiAoIXNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSkKKyAgICBQeV9SRVRV Uk5fTk9ORTsKKworICBQeV9JTkNSRUYgKHNlbGZfZmluaXNoYnAtPnJldHVy bl92YWx1ZSk7CisgIHJldHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFs dWU7Cit9CisKKy8qIERlYWxsb2NhdGUgRmluaXNoQnJlYWtwb2ludCBvYmpl Y3QuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9kZWFsbG9jIChQ eU9iamVjdCAqc2VsZikKK3sKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50 X29iamVjdCAqc2VsZl9icGZpbmlzaCA9CisgICAgICAgIChzdHJ1Y3QgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisKKyAgUHlfWERFQ1JF RiAoc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSk7CisgIFB5X1hERUNS RUYgKHNlbGZfYnBmaW5pc2gtPnJldHVybl90eXBlKTsKKyAgUHlfWERFQ1JF RiAoc2VsZl9icGZpbmlzaC0+cmV0dXJuX3ZhbHVlKTsKK30KKworLyogVHJp Z2dlcmVkIHdoZW4gZ2RicHlfc2hvdWxkX3N0b3AgaXMgYWJvdXQgdG8gZXhl Y3V0ZSB0aGUgYHN0b3AnIGNhbGxiYWNrCisgICBvZiB0aGUgZ2RiLkZpbmlz aEJyZWFrcG9pbnQgb2JqZWN0IEJQX09CSi4gIFdpbGwgY29tcHV0ZSBhbmQg Y2FjaGUgdGhlCisgICBgcmV0dXJuX3ZhbHVlJywgaWYgcG9zc2libGUuICAq LworCit2b2lkCiticGZpbmlzaHB5X3ByZV9zdG9wX2hvb2sgKHN0cnVjdCBi cmVha3BvaW50X29iamVjdCAqYnBfb2JqKQoreworICBzdHJ1Y3QgZmluaXNo X2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2ZpbmlzaGJwID0KKyAgICAgICAg KHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgYnBfb2JqOwor ICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAg LyogQ2FuIGNvbXB1dGUgcmV0dXJuX3ZhbHVlIG9ubHkgb25jZS4gICovCisg IGdkYl9hc3NlcnQgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpOwor CisgIGlmICghc2VsZl9maW5pc2hicC0+cmV0dXJuX3R5cGUpCisgICAgcmV0 dXJuOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwp CisgICAgeworICAgICAgc3RydWN0IHZhbHVlICpyZXQgPQorICAgICAgICAg IGdldF9yZXR1cm5fdmFsdWUgKHR5cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZf ZmluaXNoYnAtPmZ1bmN0aW9uX3R5cGUpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZfZmluaXNoYnAt PnJldHVybl90eXBlKSk7CisKKyAgICAgIGlmIChyZXQpCisgICAgICAgIHsK KyAgICAgICAgICBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUgPSB2YWx1 ZV90b192YWx1ZV9vYmplY3QgKHJldCk7CisgICAgICAgICAgaWYgKCFzZWxm X2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpCisgICAgICAgICAgICAgIGdkYnB5 X3ByaW50X3N0YWNrICgpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICBQeV9JTkNSRUYgKFB5X05vbmUpOworICAgICAg ICAgIHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSA9IFB5X05vbmU7Cisg ICAgICAgIH0KKyAgICB9CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAg ICB7CisgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsK KyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworICAgIH0KK30KKworLyog VHJpZ2dlcmVkIHdoZW4gZ2RicHlfc2hvdWxkX3N0b3AgaGFzIHRyaWdnZXJl ZCB0aGUgYHN0b3AnIGNhbGxiYWNrCisgICBvZiB0aGUgZ2RiLkZpbmlzaEJy ZWFrcG9pbnQgb2JqZWN0IEJQX09CSi4gICovCisKK3ZvaWQKK2JwZmluaXNo cHlfcG9zdF9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAq YnBfb2JqKQoreworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBl eGNlcHQ7CisKKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FM TCkKKyAgICB7CisgICAgICAvKiBDYW4ndCBkZWxldGUgaXQgaGVyZSwgYnV0 IGl0IHdpbGwgYmUgcmVtb3ZlZCBhdCB0aGUgbmV4dCBzdG9wLiAgKi8KKyAg ICAgIGRpc2FibGVfYnJlYWtwb2ludCAoYnBfb2JqLT5icCk7CisgICAgICBn ZGJfYXNzZXJ0IChicF9vYmotPmJwLT5kaXNwb3NpdGlvbiA9PSBkaXNwX2Rl bCk7CisgICAgfQorICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgewor ICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisgICAg ICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICB9Cit9CisKKy8qIFB5dGhv biBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgYnJlYWtwb2ludC4gICovCisK K3N0YXRpYyBpbnQKK2JwZmluaXNocHlfaW5pdCAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICBzdGF0 aWMgY2hhciAqa2V5d29yZHNbXSA9IHsgImZyYW1lIiwgImludGVybmFsIiwg TlVMTCB9OworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpz ZWxmX2JwZmluaXNoID0KKyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0ICopIHNlbGY7CisgIGludCB0eXBlID0gYnBfYnJlYWtwb2lu dDsKKyAgUHlPYmplY3QgKmZyYW1lX29iaiA9IE5VTEw7CisgIGludCB0aHJl YWQ7CisgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgKnByZXZfZnJhbWUg PSBOVUxMOworICBzdHJ1Y3QgZnJhbWVfaWQgZnJhbWVfaWQ7CisgIFB5T2Jq ZWN0ICppbnRlcm5hbCA9IE5VTEw7CisgIGludCBpbnRlcm5hbF9icCA9IDA7 CisgIENPUkVfQUREUiBmaW5pc2hfcGMsIHBjOworICB2b2xhdGlsZSBzdHJ1 Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisgIGNoYXIgKmFkZHJfc3RyLCBz bWFsbF9idWZbMTAwXTsKKyAgc3RydWN0IHN5bWJvbCAqZnVuY3Rpb247CisK KyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMgKGFyZ3MsIGt3 YXJncywgInxPTyIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmZyYW1lX29iaiwgJmludGVybmFsKSkKKyAgICBy ZXR1cm4gLTE7CisKKyAgLyogRGVmYXVsdCBmcmFtZSB0byBnZGIubmV3ZXN0 X2ZyYW1lIGlmIG5lY2Vzc2FyeS4gICovCisgIGlmICghZnJhbWVfb2JqKQor ICAgIGZyYW1lX29iaiA9IGdkYnB5X25ld2VzdF9mcmFtZSAoTlVMTCwgTlVM TCk7CisgIGVsc2UKKyAgICBQeV9JTkNSRUYgKGZyYW1lX29iaik7CisKKyAg ZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVfb2Jq KTsKKyAgUHlfREVDUkVGIChmcmFtZV9vYmopOworCisgIGlmIChmcmFtZSA9 PSBOVUxMKQorICAgIGdvdG8gaW52YWxpZF9mcmFtZTsKKyAgCisgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAg cHJldl9mcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CisgICAgICBp ZiAocHJldl9mcmFtZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgUHlF cnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCBfKCJcIkZpbmlzaEJy ZWFrcG9pbnRcIiBub3QgIiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIm1lYW5pbmdmdWwgaW4gdGhlIG91 dGVybW9zdCAiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiZnJhbWUuIikpOworICAgICAgICB9CisgICAgICBl bHNlIGlmIChnZXRfZnJhbWVfdHlwZSAocHJldl9mcmFtZSkgPT0gRFVNTVlf RlJBTUUpCisgICAgICAgIHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcg KFB5RXhjX1ZhbHVlRXJyb3IsIF8oIlwiRmluaXNoQnJlYWtwb2ludFwiIGNh bm5vdCAiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiYmUgc2V0IG9uIGEgZHVtbXkgZnJhbWUuIikpOworICAg ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmcmFt ZV9pZCA9IGdldF9mcmFtZV9pZCAocHJldl9mcmFtZSk7CisgICAgICAgICAg aWYgKGZyYW1lX2lkX2VxIChmcmFtZV9pZCwgbnVsbF9mcmFtZV9pZCkpCisg ICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3Is CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkludmFsaWQgSUQg Zm9yIHRoZSBgZnJhbWUnIG9iamVjdC4iKSk7CisgICAgICAgIH0KKyAgICB9 CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAgICB7CisgICAgICBnZGJw eV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKyAgICAgIHJldHVybiAt MTsKKyAgICB9CisgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkICgpKQorICAg IHJldHVybiAtMTsKKworICB0aHJlYWQgPSBwaWRfdG9fdGhyZWFkX2lkIChp bmZlcmlvcl9wdGlkKTsKKyAgaWYgKHRocmVhZCA9PSAwKQorICAgIHsKKyAg ICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAg ICAgICAgICAgICAgICAgICAgXygiTm8gdGhyZWFkIGN1cnJlbnRseSBzZWxl Y3RlZC4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChp bnRlcm5hbCkKKyAgICB7CisgICAgICBpbnRlcm5hbF9icCA9IFB5T2JqZWN0 X0lzVHJ1ZSAoaW50ZXJuYWwpOworICAgICAgaWYgKGludGVybmFsX2JwID09 IC0xKSAKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyAo UHlFeGNfVmFsdWVFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBfKCJUaGUgdmFsdWUgb2YgYGludGVybmFsJyBtdXN0IGJlIGEgYm9vbGVh bi4iKSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAg fQorCisgIC8qIEZpbmQgdGhlIGZ1bmN0aW9uIHdlIHdpbGwgcmV0dXJuIGZy b20uICAqLworICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IE5VTEw7 CisgIHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUgPSBOVUxMOworCisg IFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgewor ICAgICAgaWYgKGdldF9mcmFtZV9wY19pZl9hdmFpbGFibGUgKGZyYW1lLCAm cGMpKQorICAgICAgICB7CisgICAgICAgICAgZnVuY3Rpb24gPSBmaW5kX3Bj X2Z1bmN0aW9uIChwYyk7CisgICAgICAgICAgaWYgKGZ1bmN0aW9uICE9IE5V TEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCB0eXBl ICpyZXRfdHlwZSA9CisgICAgICAgICAgICAgICAgICBUWVBFX1RBUkdFVF9U WVBFIChTWU1CT0xfVFlQRSAoZnVuY3Rpb24pKTsKKworICAgICAgICAgICAg ICAvKiBSZW1lbWJlciBvbmx5IG5vbi12b2lkIHJldHVybiB0eXBlcy4gICov CisgICAgICAgICAgICAgIGlmIChUWVBFX0NPREUgKHJldF90eXBlKSAhPSBU WVBFX0NPREVfVk9JRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAvKiBJZ25vcmUgUHl0aG9uIGVycm9ycyBhdCB0aGlzIHN0YWdl LiAgKi8KKyAgICAgICAgICAgICAgICAgIHNlbGZfYnBmaW5pc2gtPnJldHVy bl90eXBlID0gdHlwZV90b190eXBlX29iamVjdCAocmV0X3R5cGUpOworICAg ICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIgKCk7CisgICAgICAgICAgICAg ICAgICBzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlID0KKyAgICAgICAg ICAgICAgICAgICAgICB0eXBlX3RvX3R5cGVfb2JqZWN0IChTWU1CT0xfVFlQ RSAoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFy ICgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwCisgICAgICB8 fCAhc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgfHwgIXNlbGZfYnBmaW5p c2gtPmZ1bmN0aW9uX3R5cGUpCisgICAgeworICAgICAgLyogV29uJ3QgYmUg YWJsZSB0byBjb21wdXRlIHJldHVybiB2YWx1ZS4gICovCisgICAgICBQeV9Y REVDUkVGIChzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSk7CisgICAgICBQ eV9YREVDUkVGIChzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlKTsKKwor ICAgICAgc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgPSBOVUxMOworICAg ICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSA9IE5VTEw7CisgICAg fQorCisgIGJwcHlfcGVuZGluZ19vYmplY3QgPSAmc2VsZl9icGZpbmlzaC0+ cHlfYnA7CisgIGJwcHlfcGVuZGluZ19vYmplY3QtPm51bWJlciA9IC0xOwor ICBicHB5X3BlbmRpbmdfb2JqZWN0LT5icCA9IE5VTEw7CisKKyAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICAv KiBTZXQgYSBicmVha3BvaW50IG9uIHRoZSByZXR1cm4gYWRkcmVzcy4gICov CisgICAgICBmaW5pc2hfcGMgPSBnZXRfZnJhbWVfcGMgKHByZXZfZnJhbWUp OworICAgICAgc3ByaW50ZiAoc21hbGxfYnVmLCAiKiVzIiwgaGV4X3N0cmlu ZyAoZmluaXNoX3BjKSk7CisgICAgICBhZGRyX3N0ciA9IHNtYWxsX2J1ZjsK KworICAgICAgY3JlYXRlX2JyZWFrcG9pbnQgKHB5dGhvbl9nZGJhcmNoLAor ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfc3RyLCBOVUxMLCB0aHJl YWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAxIC8qdGVtcF9mbGFnKi8sCisgICAgICAgICAgICAg ICAgICAgICAgICAgYnBfYnJlYWtwb2ludCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFVVE9fQk9P TEVBTl9UUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICZia3B0X2Jy ZWFrcG9pbnRfb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEs IGludGVybmFsX2JwKTsKKyAgICB9CisgIEdEQl9QWV9TRVRfSEFORExFX0VY Q0VQVElPTiAoZXhjZXB0KTsKKyAgCisgIHNlbGZfYnBmaW5pc2gtPnB5X2Jw LmJwLT5mcmFtZV9pZCA9IGZyYW1lX2lkOworICBzZWxmX2JwZmluaXNoLT5w eV9icC5pc19maW5pc2hfYnAgPSAxOworICAKKyAgLyogQmluZCB0aGUgYnJl YWtwb2ludCB3aXRoIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UuICAqLwor ICBzZWxmX2JwZmluaXNoLT5weV9icC5icC0+cHNwYWNlID0gY3VycmVudF9w cm9ncmFtX3NwYWNlOworCisgIHJldHVybiAwOworICAKKyBpbnZhbGlkX2Zy YW1lOgorICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIAor ICAgICAgICAgICAgICAgICAgIF8oIkludmFsaWQgSUQgZm9yIHRoZSBgZnJh bWUnIG9iamVjdC4iKSk7CisgIHJldHVybiAtMTsKK30KKworLyogQ2FsbGVk IHdoZW4gR0RCIG5vdGljZXMgdGhhdCB0aGUgZmluaXNoIGJyZWFrcG9pbnQg QlBfT0JKIGlzIG91dCBvZgorICAgdGhlIGN1cnJlbnQgY2FsbHN0YWNrLiAg VHJpZ2dlcnMgdGhlIG1ldGhvZCBPVVRfT0ZfU0NPUEUgaWYgaW1wbGVtZW50 ZWQsCisgICB0aGVuIGRlbGV0ZSB0aGUgYnJlYWtwb2ludC4gICovCisKK3N0 YXRpYyB2b2lkCiticGZpbmlzaHB5X291dF9vZl9zY29wZSAoc3RydWN0IGZp bmlzaF9icmVha3BvaW50X29iamVjdCAqYnBmaW5pc2hfb2JqKQoreworICB2 b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisgIGJyZWFr cG9pbnRfb2JqZWN0ICpicF9vYmogPSAoYnJlYWtwb2ludF9vYmplY3QgKikg YnBmaW5pc2hfb2JqOworICBQeU9iamVjdCAqcHlfb2JqID0gKFB5T2JqZWN0 ICopIGJwX29iajsKKworICBpZiAoYnBmaW5pc2hfb2JqLT5weV9icC5icC0+ ZW5hYmxlX3N0YXRlID09IGJwX2VuYWJsZWQKKyAgICAgICYmIFB5T2JqZWN0 X0hhc0F0dHJTdHJpbmcgKHB5X29iaiwgb3V0b2ZzY29wZV9mdW5jKSkKKyAg ICB7CisgICAgICBpZiAoIVB5T2JqZWN0X0NhbGxNZXRob2QgKHB5X29iaiwg b3V0b2ZzY29wZV9mdW5jLCBOVUxMKSkKKyAgICAgICAgICBnZGJweV9wcmlu dF9zdGFjayAoKTsKKyAgICB9CisKKyAgZGVsZXRlX2JyZWFrcG9pbnQgKGJw ZmluaXNoX29iai0+cHlfYnAuYnApOworfQorCisvKiBDYWxsYmFjayBmb3Ig YGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZScuICBUcmlnZ2VycyBQeXRo b24ncworICAgYEItPm91dF9vZl9zY29wZScgZnVuY3Rpb24gaWYgQiBpcyBh IEZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIGl0cyBzY29wZS4gICovCisKK3N0 YXRpYyBpbnQKK2JwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiAoc3Ry dWN0IGJyZWFrcG9pbnQgKmIsIHZvaWQgKmFyZ3MpCit7CisgIHZvbGF0aWxl IHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKyAgc3RydWN0IGJyZWFr cG9pbnQgKmJwX3N0b3BwZWQgPSAoc3RydWN0IGJyZWFrcG9pbnQgKikgYXJn czsKKyAgUHlPYmplY3QgKnB5X2JwID0gKFB5T2JqZWN0ICopIGItPnB5X2Jw X29iamVjdDsKKyAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJj aCA/IGItPmdkYmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgpOworICAKKyAg LyogVHJpZ2dlciBvdXRfb2Zfc2NvcGUgaWYgdGhpcyBpcyBhIEZpbmlzaEJy ZWFrcG9pbnQgYW5kIGl0cyBmcmFtZSBpcworICAgICBub3QgYW55bW9yZSBp biB0aGUgY3VycmVudCBjYWxsc3RhY2suICAqLworICBpZiAocHlfYnAgIT0g TlVMTCAmJiBiLT5weV9icF9vYmplY3QtPmlzX2ZpbmlzaF9icCkKKyAgICB7 CisgICAgICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpmaW5p c2hfYnAgPQorICAgICAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0ICopIHB5X2JwOworCisgICAgICAvKiBDaGVjayBzY29wZSBpZiBu b3QgY3VycmVudGx5IHN0b3BwZWQgYXQgdGhlIEZpbmlzaEJyZWFrcG9pbnQu ICAqLworICAgICAgaWYgKGIgIT0gYnBfc3RvcHBlZCkKKyAgICAgICAgewor ICAgICAgICAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChiLT5wc3BhY2Ug PT0gY3VycmVudF9pbmZlcmlvciAoKS0+cHNwYWNlCisgICAgICAgICAgICAg ICAgICAmJiAoIXRhcmdldF9oYXNfcmVnaXN0ZXJzCisgICAgICAgICAgICAg ICAgICAgICAgfHwgZnJhbWVfZmluZF9ieV9pZCAoYi0+ZnJhbWVfaWQpID09 IE5VTEwpKQorICAgICAgICAgICAgICAgIGJwZmluaXNocHlfb3V0X29mX3Nj b3BlIChmaW5pc2hfYnApOworICAgICAgICAgICAgfQorICAgICAgICAgIGlm IChleGNlcHQucmVhc29uIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisgICAg ICAgICAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBB dHRhY2hlZCB0byBgc3RvcCcgbm90aWZpY2F0aW9ucywgY2hlY2sgaWYgdGhl IGV4ZWN1dGlvbiBoYXMgcnVuCisgICBvdXQgb2YgdGhlIHNjb3BlIG9mIGFu eSBGaW5pc2hCcmVha3BvaW50IGJlZm9yZSBpdCBoYXMgYmVlbiBoaXQuICAq LworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfc3RvcCAoc3Ry dWN0IGJwc3RhdHMgKmJzLCBpbnQgcHJpbnRfZnJhbWUpCit7CisgIHN0cnVj dCBjbGVhbnVwICpjbGVhbnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9j dXJyZW50X2FyY2ggKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGFuZ3VhZ2UpOworCisgIGl0 ZXJhdGVfb3Zlcl9icmVha3BvaW50cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0 X3Njb3BlX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzID09 IE5VTEwgPyBOVUxMIDogYnMtPmJyZWFrcG9pbnRfYXQpOworCisgIGRvX2Ns ZWFudXBzIChjbGVhbnVwKTsKK30KKworLyogQXR0YWNoZWQgdG8gYGV4aXQn IG5vdGlmaWNhdGlvbnMsIHRyaWdnZXJzIGFsbCB0aGUgbmVjZXNzYXJ5IG91 dCBvZgorICAgc2NvcGUgbm90aWZpY2F0aW9ucy4gICovCisKK3N0YXRpYyB2 b2lkCiticGZpbmlzaHB5X2hhbmRsZV9leGl0IChzdHJ1Y3QgaW5mZXJpb3Ig KmluZikKK3sKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXAgPSBlbnN1cmVf cHl0aG9uX2VudiAodGFyZ2V0X2dkYmFyY2gsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGFuZ3Vh Z2UpOworCisgIGl0ZXJhdGVfb3Zlcl9icmVha3BvaW50cyAoYnBmaW5pc2hw eV9kZXRlY3Rfb3V0X3Njb3BlX2NiLCBOVUxMKTsKKworICBkb19jbGVhbnVw cyAoY2xlYW51cCk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIFB5dGhvbiBm aW5pc2ggYnJlYWtwb2ludCBjb2RlLiAgKi8KKwordm9pZAorZ2RicHlfaW5p dGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAodm9pZCkKK3sKKyAgaWYgKFB5 VHlwZV9SZWFkeSAoJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKSA8 IDApCisgICAgICByZXR1cm47CisgIAorICBQeV9JTkNSRUYgKCZmaW5pc2hf YnJlYWtwb2ludF9vYmplY3RfdHlwZSk7CisgIFB5TW9kdWxlX0FkZE9iamVj dCAoZ2RiX21vZHVsZSwgIkZpbmlzaEJyZWFrcG9pbnQiLAorICAgICAgICAg ICAgICAgICAgICAgIChQeU9iamVjdCAqKSAmZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0X3R5cGUpOworICAgIAorICBvYnNlcnZlcl9hdHRhY2hfbm9ybWFs X3N0b3AgKGJwZmluaXNocHlfaGFuZGxlX3N0b3ApOworICBvYnNlcnZlcl9h dHRhY2hfaW5mZXJpb3JfZXhpdCAoYnBmaW5pc2hweV9oYW5kbGVfZXhpdCk7 Cit9CisKK3N0YXRpYyBQeUdldFNldERlZiBmaW5pc2hfYnJlYWtwb2ludF9v YmplY3RfZ2V0c2V0W10gPSB7CisgIHsgInJldHVybl92YWx1ZSIsIGJwZmlu aXNocHlfZ2V0X3JldHVybnZhbHVlLCBOVUxMLAorICAiZ2RiLlZhbHVlIG9i amVjdCByZXByZXNlbnRpbmcgdGhlIHJldHVybiB2YWx1ZSwgaWYgYW55LiBc CitOb25lIG90aGVyd2lzZS4iLCBOVUxMIH0sCisgICAgeyBOVUxMIH0gIC8q IFNlbnRpbmVsLiAgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQoreworICBQeU9iamVjdF9I RUFEX0lOSVQgKE5VTEwpCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLypvYl9zaXplKi8KKyAgImdkYi5GaW5pc2hCcmVha3BvaW50Iiwg ICAgICAgICAvKnRwX25hbWUqLworICBzaXplb2YgKHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QpLCAgLyp0cF9iYXNpY3NpemUqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwor ICBicGZpbmlzaHB5X2RlYWxsb2MsICAgICAgICAgICAgIC8qdHBfZGVhbGxv YyovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9w cmludCovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9nZXRhdHRyKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKnRwX3NldGF0dHIqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qdHBfY29tcGFyZSovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5n Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hh c2ggKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRw X2NhbGwqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q dHBfc3RyKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KnRwX2dldGF0dHJvKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKnRwX3NldGF0dHJvICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICBQeV9UUEZMQUdTX0RF RkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisg ICJHREIgZmluaXNoIGJyZWFrcG9pbnQgb2JqZWN0IiwgLyogdHBfZG9jICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJh dmVyc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9jbGVhciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5l eHQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9tZXRob2RzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfbWVtYmVycyAqLworICBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3RfZ2V0c2V0LC8qIHRwX2dldHNldCAqLworICAmYnJlYWtwb2ludF9vYmpl Y3RfdHlwZSwgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jf c2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfZGljdG9mZnNldCAqLworICBicGZpbmlzaHB5X2luaXQsICAgICAgICAg ICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAwICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKZGlmZiAtLWdpdCBh L2dkYi9weXRob24vcHktZnJhbWUuYyBiL2dkYi9weXRob24vcHktZnJhbWUu YwppbmRleCAyMDA2NGNhLi5jMzM0ZjYzIDEwMDY0NAotLS0gYS9nZGIvcHl0 aG9uL3B5LWZyYW1lLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1mcmFtZS5jCkBA IC02MCw5ICs2MCwxMCBAQCBzdGF0aWMgUHlUeXBlT2JqZWN0IGZyYW1lX29i amVjdF90eXBlOwogICAgb2JqZWN0LiAgSWYgdGhlIGZyYW1lIGRvZXNuJ3Qg ZXhpc3QgYW55bW9yZSAodGhlIGZyYW1lIGlkIGRvZXNuJ3QKICAgIGNvcnJl c3BvbmQgdG8gYW55IGZyYW1lIGluIHRoZSBpbmZlcmlvciksIHJldHVybnMg TlVMTC4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgZnJhbWVfaW5mbyAqCi1mcmFt ZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVfb2JqZWN0ICpmcmFtZV9v YmopCitzdHJ1Y3QgZnJhbWVfaW5mbyAqCitmcmFtZV9vYmplY3RfdG9fZnJh bWVfaW5mbyAoUHlPYmplY3QgKm9iaikKIHsKKyAgZnJhbWVfb2JqZWN0ICpm cmFtZV9vYmogPSAoZnJhbWVfb2JqZWN0ICopIG9iajsgIAogICBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZnJhbWU7CiAKICAgZnJhbWUgPSBmcmFtZV9maW5kX2J5 X2lkIChmcmFtZV9vYmotPmZyYW1lX2lkKTsKQEAgLTEwNiw3ICsxMDcsNyBA QCBmcmFweV9pc192YWxpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICph cmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwp CiAgICAgewotICAgICAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVf aW5mbyAoKGZyYW1lX29iamVjdCAqKSBzZWxmKTsKKyAgICAgIGZyYW1lID0g ZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKHNlbGYpOwogICAgIH0KICAg R0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CiAKQEAgLTEzMCw3 ICsxMzEsNyBAQCBmcmFweV9uYW1lIChQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNL X0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJh bWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJ UkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgZmluZF9mcmFtZV9m dW5uYW1lIChmcmFtZSwgJm5hbWUsICZsYW5nLCBOVUxMKTsKICAgICB9CkBA IC0xNTksNyArMTYwLDcgQEAgZnJhcHlfdHlwZSAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRV Uk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJ RCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQ WV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHR5cGUg PSBnZXRfZnJhbWVfdHlwZSAoZnJhbWUpOwogICAgIH0KQEAgLTE4MCw3ICsx ODEsNyBAQCBmcmFweV91bndpbmRfc3RvcF9yZWFzb24gKFB5T2JqZWN0ICpz ZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVf VkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogICAgIH0KICAg R0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CiAKQEAgLTIwMSw3 ICsyMDIsNyBAQCBmcmFweV9wYyAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19B TEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1l X29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHBjID0gZ2V0X2ZyYW1l X3BjIChmcmFtZSk7CiAgICAgfQpAQCAtMjIyLDcgKzIyMyw3IEBAIGZyYXB5 X2Jsb2NrIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0g ICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNl bGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYs IGZyYW1lKTsKICAgICAgIGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChmcmFt ZSwgTlVMTCk7CiAgICAgfQogICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAo ZXhjZXB0KTsKQEAgLTI2Myw3ICsyNjQsNyBAQCBmcmFweV9mdW5jdGlvbiAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRD SCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJB UFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFt ZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7 CiAKICAgICAgIHN5bSA9IGZpbmRfcGNfZnVuY3Rpb24gKGdldF9mcmFtZV9h ZGRyZXNzX2luX2Jsb2NrIChmcmFtZSkpOwogICAgIH0KQEAgLTMzMCw3ICsz MzEsNyBAQCBmcmFweV9vbGRlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19B TEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1l X29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHByZXYgPSBnZXRfcHJl dl9mcmFtZSAoZnJhbWUpOwogICAgICAgaWYgKHByZXYpCkBAIC0zNTksNyAr MzYwLDcgQEAgZnJhcHlfbmV3ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFt ZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBuZXh0ID0gZ2V0X25l eHRfZnJhbWUgKGZyYW1lKTsKICAgICAgIGlmIChuZXh0KQpAQCAtMzg4LDcg KzM4OSw3IEBAIGZyYXB5X2ZpbmRfc2FsIChQeU9iamVjdCAqc2VsZiwgUHlP YmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgo ZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgZmluZF9mcmFt ZV9zYWwgKGZyYW1lLCAmc2FsKTsKICAgICAgIHNhbF9vYmogPSBzeW10YWJf YW5kX2xpbmVfdG9fc2FsX29iamVjdCAoc2FsKTsKQEAgLTQ0NCw3ICs0NDUs NyBAQCBmcmFweV9yZWFkX3ZhciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICphcmdzKQogCiAgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01B U0tfQUxMKQogCXsKLQkgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9v YmplY3QgKikgc2VsZiwgZnJhbWUpOworCSAgRlJBUFlfUkVRVUlSRV9WQUxJ RCAoc2VsZiwgZnJhbWUpOwogCiAJICBpZiAoIWJsb2NrKQogCSAgICBibG9j ayA9IGdldF9mcmFtZV9ibG9jayAoZnJhbWUsIE5VTEwpOwpAQCAtNDcyLDcg KzQ3Myw3IEBAIGZyYXB5X3JlYWRfdmFyIChQeU9iamVjdCAqc2VsZiwgUHlP YmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgo ZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgdmFsID0gcmVh ZF92YXJfdmFsdWUgKHZhciwgZnJhbWUpOwogICAgIH0KQEAgLTQ4NywxMiAr NDg4LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFweV9zZWxlY3QgKFB5 T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgc3RydWN0IGZy YW1lX2luZm8gKmZpOwotICBmcmFtZV9vYmplY3QgKmZyYW1lID0gKGZyYW1l X29iamVjdCAqKSBzZWxmOwogICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2Vw dGlvbiBleGNlcHQ7CiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChm cmFtZSwgZmkpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwg ZmkpOwogCiAgICAgICBzZWxlY3RfZnJhbWUgKGZpKTsKICAgICB9CmRpZmYg LS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oIGIvZ2RiL3B5 dGhvbi9weXRob24taW50ZXJuYWwuaAppbmRleCBlZjM5ZDVkLi4xYmE3MTMz IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCisr KyBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKQEAgLTEyMCw5ICsx MjAsNTAgQEAgZXh0ZXJuIFB5VHlwZU9iamVjdCBzeW1ib2xfb2JqZWN0X3R5 cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IGV2ZW50X29iamVjdF90eXBlOwog ZXh0ZXJuIFB5VHlwZU9iamVjdCBldmVudHNfb2JqZWN0X3R5cGU7CiBleHRl cm4gUHlUeXBlT2JqZWN0IHN0b3BfZXZlbnRfb2JqZWN0X3R5cGU7CitleHRl cm4gUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CisKK3R5 cGVkZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Cit7CisgIFB5T2JqZWN0 X0hFQUQKKworICAvKiBUaGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5n IHRvIGdkYi4gICovCisgIGludCBudW1iZXI7CisKKyAgLyogVGhlIGdkYiBi cmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBo YXMgYmVlbgorICAgICBkZWxldGVkLiAgKi8KKyAgc3RydWN0IGJyZWFrcG9p bnQgKmJwOworCisgIC8qIDEgaXMgdGhpcyBpcyBhIEZpbmlzaEJyZWFrcG9p bnQgb2JqZWN0LCAwIG90aGVyd2lzZS4gICovCisgIGludCBpc19maW5pc2hf YnA7Cit9IGJyZWFrcG9pbnRfb2JqZWN0OworCisvKiBSZXF1aXJlIHRoYXQg QlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEg UHl0aG9uCisgICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gICovCisj ZGVmaW5lIEJQUFlfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBO VUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJv ciwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwg ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChC cmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAgICAgICAgICAgICBcCisg ICAgfSB3aGlsZSAoMCkKKworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQg YmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAg ZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICBUaGlzIG1hY3JvIGlzIGZv ciB1c2UgaW4gc2V0dGVyIGZ1bmN0aW9ucy4gICovCisjZGVmaW5lIEJQUFlf U0VUX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgUHlFcnJfRm9ybWF0IChQeUV4 Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4i KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKEJyZWFrcG9pbnQpLT5u dW1iZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg IHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIH0gd2hpbGUgKDApCisKKworLyogVmFyaWFibGVzIHVzZWQg dG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50Cisg ICBjb25zdHJ1Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29r IGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBicmVha3BvaW50X29iamVjdCAqYnBw eV9wZW5kaW5nX29iamVjdDsKIAotLyogRGVmaW5lZCBpbiBweS1icmVha3Bv aW50LmMgKi8KLXR5cGVkZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0IGJy ZWFrcG9pbnRfb2JqZWN0OwogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMTg4 LDYgKzIyOSw3IEBAIHN0cnVjdCB2YWx1ZSAqY29udmVydF92YWx1ZV9mcm9t X3B5dGhvbiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3QgdHlwZSAqdHlwZV9v YmplY3RfdG9fdHlwZSAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qgc3ltdGFi ICpzeW10YWJfb2JqZWN0X3RvX3N5bXRhYiAoUHlPYmplY3QgKm9iaik7CiBz dHJ1Y3Qgc3ltdGFiX2FuZF9saW5lICpzYWxfb2JqZWN0X3RvX3N5bXRhYl9h bmRfbGluZSAoUHlPYmplY3QgKm9iaik7CitzdHJ1Y3QgZnJhbWVfaW5mbyAq ZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpmcmFtZV9v YmopOwogCiB2b2lkIGdkYnB5X2luaXRpYWxpemVfYXV0b19sb2FkICh2b2lk KTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV92YWx1ZXMgKHZvaWQpOwpAQCAt MjAyLDYgKzI0NCw3IEBAIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9mdW5jdGlv bnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAodm9p ZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfb2JqZmlsZSAodm9pZCk7CiB2 b2lkIGdkYnB5X2luaXRpYWxpemVfYnJlYWtwb2ludHMgKHZvaWQpOwordm9p ZCBnZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9pbnRzICh2b2lkKTsK IHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAodm9pZCk7CiB2 b2lkIGdkYnB5X2luaXRpYWxpemVfcGFyYW1ldGVycyAodm9pZCk7CiB2b2lk IGdkYnB5X2luaXRpYWxpemVfdGhyZWFkICh2b2lkKTsKQEAgLTI3NSw2ICsz MTgsOSBAQCBQeU9iamVjdCAqZ2RicHlfZ2V0X3Zhcm9ial9wcmV0dHlfcHJp bnRlciAoc3RydWN0IHZhbHVlICp2YWx1ZSk7CiBjaGFyICpnZGJweV9nZXRf ZGlzcGxheV9oaW50IChQeU9iamVjdCAqcHJpbnRlcik7CiBQeU9iamVjdCAq Z2RicHlfZGVmYXVsdF92aXN1YWxpemVyIChQeU9iamVjdCAqc2VsZiwgUHlP YmplY3QgKmFyZ3MpOwogCit2b2lkIGJwZmluaXNocHlfcHJlX3N0b3BfaG9v ayAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwordm9pZCBi cGZpbmlzaHB5X3Bvc3Rfc3RvcF9ob29rIChzdHJ1Y3QgYnJlYWtwb2ludF9v YmplY3QgKmJwX29iaik7CisKIGV4dGVybiBQeU9iamVjdCAqZ2RicHlfZG9j X2NzdDsKIGV4dGVybiBQeU9iamVjdCAqZ2RicHlfY2hpbGRyZW5fY3N0Owog ZXh0ZXJuIFB5T2JqZWN0ICpnZGJweV90b19zdHJpbmdfY3N0OwpkaWZmIC0t Z2l0IGEvZ2RiL3B5dGhvbi9weXRob24uYyBiL2dkYi9weXRob24vcHl0aG9u LmMKaW5kZXggYjBiOWE5Yy4uZjNmZGY5YSAxMDA2NDQKLS0tIGEvZ2RiL3B5 dGhvbi9weXRob24uYworKysgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCkBAIC0x MjQ3LDYgKzEyNDcsNyBAQCBFbmFibGVzIG9yIGRpc2FibGVzIHByaW50aW5n IG9mIFB5dGhvbiBzdGFjayB0cmFjZXMuIiksCiAgIGdkYnB5X2luaXRpYWxp emVfcHNwYWNlICgpOwogICBnZGJweV9pbml0aWFsaXplX29iamZpbGUgKCk7 CiAgIGdkYnB5X2luaXRpYWxpemVfYnJlYWtwb2ludHMgKCk7CisgIGdkYnB5 X2luaXRpYWxpemVfZmluaXNoYnJlYWtwb2ludHMgKCk7CiAgIGdkYnB5X2lu aXRpYWxpemVfbGF6eV9zdHJpbmcgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVf dGhyZWFkICgpOwogICBnZGJweV9pbml0aWFsaXplX2luZmVyaW9yICgpOwpk aWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFr cG9pbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFr cG9pbnQuZXhwCmluZGV4IGUwZGQwODcuLjBlM2FkYmQgMTAwNjQ0Ci0tLSBh L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cAor KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5l eHAKQEAgLTQ0LDcgKzQ0LDggQEAgZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAi cHl0aG9uIGJsaXN0ID0gZ2RiLmJyZWFrcG9pbnRzKCkiICJHZXQgQnJlYWtw b2ludCBMaXN0IgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxd IiAiPGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9i aiBleGlzdHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0u bG9jYXRpb24iICJtYWluLiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24i CiAKLWdkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVh ayBhdCBtdWx0aXBseS4iXQorc2V0IG11bHRfbGluZSBbZ2RiX2dldF9saW5l X251bWJlciAiQnJlYWsgYXQgbXVsdGlwbHkuIl0KK2dkYl9icmVha3BvaW50 ICR7bXVsdF9saW5lfQogZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJy ZWFrIGF0IG11bHRpcGx5LiIKIAogIyBDaGVjayB0aGF0IHRoZSBQeXRob24g YnJlYWtwb2ludCBjb2RlIG5vdGVkIHRoZSBhZGRpdGlvbiBvZiBhCkBAIC01 NCw3ICs1NSw5IEBAIGdkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGJsaXN0 KSIgIjIiICJDaGVjayBmb3IgdHdvIGJyZWFrcG9pbnRzIgogZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBibGlzdFxbMFxdIiAiPGdkYi5CcmVha3BvaW50IG9i amVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBleGlzdHMiCiBnZGJfdGVzdCAi cHl0aG9uIHByaW50IGJsaXN0XFswXF0ubG9jYXRpb24iICJtYWluLiIgIkNo ZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiBnZGJfdGVzdCAicHl0aG9uIHBy aW50IGJsaXN0XFsxXF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRo ZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIKLWdkYl90ZXN0ICJweXRob24gcHJp bnQgYmxpc3RcWzFcXS5sb2NhdGlvbiIgInB5LWJyZWFrcG9pbnRcLmM6NDEq IiAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKKworZ2RiX3Rlc3QgInB5 dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0aW9uIiAicHktYnJlYWtwb2lu dFwuYzoke211bHRfbGluZX0qIiBcCisgICAgICAgICAiQ2hlY2sgYnJlYWtw b2ludCBsb2NhdGlvbiIKIAogIyBDaGVjayBoaXQgYW5kIGlnbm9yZSBjb3Vu dHMuIAogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdLmhpdF9j b3VudCIgIjEiICJDaGVjayBicmVha3BvaW50IGhpdCBjb3VudCIKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uN2NkYmVhZAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jCkBAIC0wLDAg KzEsOTcgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRo ZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorKi8KKworI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgaW5jcmVhc2Vf MSAoaW50ICphKQoreworICAqYSArPSAxOworICByZXR1cm4gLTU7Cit9CisK K3ZvaWQgaW5jcmVhc2UgKGludCAqYSkKK3sKKyAgaW5jcmVhc2VfMSAoYSk7 Cit9CisKK2ludAordGVzdF8xIChpbnQgaSwgaW50IGopCit7CisgIHJldHVy biBpID09IGo7Cit9CisKK2ludAordGVzdCAoaW50IGksIGludCBqKQorewor ICByZXR1cm4gdGVzdF8xIChpLCBqKTsKK30KKworaW50CitjYWxsX2xvbmdq bXBfMSAoam1wX2J1ZiAqYnVmKQoreworICBsb25nam1wICgqYnVmLCAxKTsK K30KKworaW50CitjYWxsX2xvbmdqbXAgKGptcF9idWYgKmJ1ZikKK3sKKyAg Y2FsbF9sb25nam1wXzEgKGJ1Zik7Cit9CisKK3ZvaWQKK3Rlc3RfZXhlY19l eGl0IChpbnQgZG9fZXhpdCkKK3sKKyAgaWYgKGRvX2V4aXQpCisgICAgZXhp dCAoMCk7CisgIGVsc2UKKyAgICBleGVjbCAoIi9iaW4vZWNobyIsICJlY2hv IiwgIi0xIiwgKGNoYXIgKikwKTsKK30KKworaW50IG1haW4gKGludCBhcmdj LCBjaGFyICphcmd2W10pCit7CisgIGptcF9idWYgZW52OworICBpbnQgZm9v ID0gNTsKKyAgaW50IGJhciA9IDQyOworICBpbnQgaSwgajsKKworICBnZXRw aWQgKCk7CisKKyAgaSA9IDA7CisgIC8qIEJyZWFrIGF0IGluY3JlYXNlLiAg Ki8KKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5j cmVhc2UgKCZpKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAg ICB7CisgICAgICBqICs9IDE7IC8qIENvbmRpdGlvbiBCcmVhay4gICovCisg ICAgfQorCisgIGlmIChzZXRqbXAgKGVudikgPT0gMCkgLyogbG9uZ2ptcCBj YXVnaHQgKi8KKyAgICB7CisgICAgICBjYWxsX2xvbmdqbXAgKCZlbnYpOwor ICAgIH0KKyAgZWxzZQorICAgIGogKz0gMTsgLyogYWZ0ZXIgbG9uZ2ptcC4g ICovCisKKyAgdGVzdF9leGVjX2V4aXQgKDEpOworCisgIHJldHVybiBqOyAv KiBCcmVhayBhdCBlbmQuICAqLworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4cCBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5l eHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhZWFh YgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAKQEAgLTAsMCArMSwyMzcgQEAK KyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMg cGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHRoZSBtZWNo YW5pc20KKyMgZXhwb3NpbmcgdmFsdWVzIHRvIFB5dGhvbi4KKworaWYgJHRy YWNlbGV2ZWwgdGhlbiB7CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9CisK K2xvYWRfbGliIGdkYi1weXRob24uZXhwCisKK3NldCB0ZXN0ZmlsZSAicHkt ZmluaXNoLWJyZWFrcG9pbnQiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5j CisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhw ICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAgIHJldHVybiAtMQor fQorCitzZXQgcmVtb3RlX3B5dGhvbl9maWxlIFtyZW1vdGVfZG93bmxvYWQg aG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorCisK KyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlwdGluZyBpcyBub3Qg ZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0aG9uX3Rlc3RzXSB9IHsgY29udGlu dWUgfQorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBub3JtYWwg Y29uZGl0aW9ucworIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisK K2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1 biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdF9ub19v dXRwdXQgInNldCBjb25maXJtIG9mZiIgImRpc2FibGUgY29uZmlybWF0aW9u IgorZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0 aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5 dGhvbiBzY3JpcHRzIgorZ2RiX2JyZWFrcG9pbnQgImluY3JlYXNlXzEiCitn ZGJfdGVzdCAiY29udGludWUiICJCcmVha3BvaW50IC4qYXQuKiIgImNvbnRp bnVlIHRvIHRoZSBmdW5jdGlvbiB0byBmaW5pc2giCisKKyMgc2V0IEZpbmlz aEJyZWFrcG9pbnQKKworZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicF9kZWZh dWx0ID0gZ2RiLkZpbmlzaEJyZWFrcG9pbnQgKCkiIFwKKyAgICAgICAgICJU ZW1wb3JhcnkgYnJlYWtwb2ludC4qIiAic2V0IEZpbmlzaEJyZWFrcG9pbnQg d2l0aCBkZWZhdWx0IGZyYW1lIHZhbHVlIgorZ2RiX3Rlc3QgInB5dGhvbiBm aW5pc2hicCA9IE15RmluaXNoQnJlYWtwb2ludCAoZ2RiLnBhcnNlX2FuZF9l dmFsICgnYScpLCBnZGIubmV3ZXN0X2ZyYW1lICgpKSIgXAorICAgICAgICAg IlRlbXBvcmFyeSBicmVha3BvaW50LioiICJzZXQgRmluaXNoQnJlYWtwb2lu dCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJuX3Zh bHVlIiAiTm9uZS4qIiBcCisgICAgICAgICAiY2hlY2sgcmV0dXJuX3ZhbHVl IGF0IGluaXQiCisKKyMgY2hlY2sgbm9ybWFsIGJwIGhpdAorCitnZGJfdGVz dCAiY29udGludWUiICJNeUZpbmlzaEJyZWFrcG9pbnQgc3RvcCB3aXRoLipy ZXR1cm5fdmFsdWUgaXM6IC01LiojMC4qaW5jcmVhc2UuKiIgXAorICAgICAg ICAgImNoZWNrIE15RmluaXNoQnJlYWtwb2ludCBoaXQiCitnZGJfdGVzdCAi cHl0aG9uIHByaW50IGZpbmlzaGJwLnJldHVybl92YWx1ZSIgIi01LioiICJj aGVjayByZXR1cm5fdmFsdWUiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQg ZmluaXNoYnBfZGVmYXVsdC5oaXRfY291bnQiICIxLioiICJjaGVjayBmaW5p c2hCUCBvbiBkZWZhdWx0IGZyYW1lIGhhcyBiZWVuIGhpdCIKK2dkYl90ZXN0 ICJweXRob24gcHJpbnQgZmluaXNoYnAuaXNfdmFsaWQoKSIgIkZhbHNlLioi XAorICAgICAgICAgImVuc3VyZSB0aGF0IGZpbmlzaCBicCBpcyBpbnZhbGlk IGFmZXIgbm9ybWFsIGhpdCIKKworIyBjaGVjayBGaW5pc2hCcmVha3BvaW50 IGluIG1haW4gbm8gYWxsb3dlZAorCitnZGJfdGVzdCAiZmluaXNoIiAibWFp bi4qIiAicmV0dXJuIHRvIG1haW4oKSIKK2dkYl90ZXN0ICJweXRob24gTXlG aW5pc2hCcmVha3BvaW50IChOb25lLCBnZGIuc2VsZWN0ZWRfZnJhbWUgKCkp IiBcCisgICAgICAgICAiVmFsdWVFcnJvcjogXCJGaW5pc2hCcmVha3BvaW50 XCIgbm90IG1lYW5pbmdmdWwgaW4gdGhlIG91dGVybW9zdCBmcmFtZS4uKiIg XAorICAgICAgICAgImNoZWNrIEZpbmlzaEJQIG5vdCBhbGxvd2VkIGluIG1h aW4iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IHdpdGggbm8gZGVi dWcgc3ltYm9sIAorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisK K2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhv biBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRo b24gc2NyaXB0cyIKK3NldCBjb25kX2xpbmUgW2dkYl9nZXRfbGluZV9udW1i ZXIgIkNvbmRpdGlvbiBCcmVhay4iXQorCitpZiAhW3J1bnRvX21haW5dIHRo ZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0 dXJuIDAKK30KKworZ2RiX2JyZWFrcG9pbnQgImdldHBpZCIge3RlbXBvcmFy eX0KK2dkYl90ZXN0ICJjb250aW51ZSIgIlRlbXBvcmFyeSBicmVha3BvaW50 IC4qaW4gZ2V0cGlkLioiICJjb250aW51ZSB0byBnZXRwaWQiCisKK2dkYl90 ZXN0ICJweXRob24gZmluaXNoQlAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50 KGdkYi5uZXdlc3RfZnJhbWUoKSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5p c2hCcmVha3BvaW50IGluaXQiIFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJy ZWFrcG9pbnQiCitnZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hC cmVha3BvaW50IHN0b3AuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaGl0 IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hCUC5yZXR1cm5fdmFs dWUiICJOb25lIiAiY2hlY2sgcmV0dXJuIHZhbHVlIHdpdGhvdXQgZGVidWcg c3ltYm9sIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBmdW5j dGlvbiByZXR1cm5lZCBieSBsb25nam1wIAorIworCitjbGVhbl9yZXN0YXJ0 ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRo b25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAg ICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworaWYgIVtydW50byBjYWxs X2xvbmdqbXBfMV0gdGhlbiB7CisgICAgcGVycm9yICJjb3VsZG4ndCBydW4g dG8gYnJlYWtwb2ludCBjYWxsX2xvbmdqbXAiCisgICAgY29udGludWUKK30K KworZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicCA9IFNpbXBsZUZpbmlzaEJy ZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgXAorICAgICAgICAgIlNp bXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBm aW5pc2ggYnJlYWtwb2ludCIgCitnZGJfdGVzdCAiYnJlYWsgW2dkYl9nZXRf bGluZV9udW1iZXIgImFmdGVyIGxvbmdqbXAuIl0iICJCcmVha3BvaW50Liog YXQgLioiIFwKKyAgICAgICAgICJzZXQgQlAgYWZ0ZXIgdGhlIGp1bXAiCitn ZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91 dCBvZiBzY29wZS4qIiBcCisgICAgICAgICAiY2hlY2sgRmluaXNoQlAgb3V0 IG9mIHNjb3BlIG5vdGlmaWNhdGlvbiIKK2dkYl90ZXN0ICJweXRob24gcHJp bnQgZmluaXNoYnAuaXNfdmFsaWQoKSIgIkZhbHNlLioiXAorICAgICAgICAg ImVuc3VyZSB0aGF0IGZpbmlzaCBicCBpcyBpbnZhbGlkIGFmZXIgb3V0IG9m IHNjb3BlIG5vdGlmaWNhdGlvbiIKKworIworIyBUZXN0IEZpbmlzaEJyZWFr cG9pbnQgaW4gQlAgY29uZGl0aW9uIGV2YWx1YXRpb24gCisjIChmaW5pc2gg aW4gZHVtbXkgZnJhbWUpCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0Zmls ZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAi UHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0 IHB5dGhvbiBzY3JpcHRzIgorCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7 CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4g MAorfQorICAgICAgICAgCitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9 IGlmIHRlc3RfMShpLDgpIiAiQnJlYWtwb2ludCAuKiBhdCAuKiIgXAorICAg ICAgICAgInNldCBhIGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhv biBUZXN0QnJlYWtwb2ludCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5pdCIgXAor ICAgICAgICAgInNldCBGaW5pc2hCUCBpbiBhIGJyZWFrcG9pbnQgY29uZGl0 aW9uIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiBcCisgICAgICAgICAiXCJGaW5p c2hCcmVha3BvaW50XCIgY2Fubm90IGJlIHNldCBvbiBhIGR1bW15IGZyYW1l LioiIFwKKyAgICAgICAgICJkb24ndCBhbGxvdyBGaW5pc2hCcmVha3BvaW50 IG9uIGR1bW15IGZyYW1lcyIKK2dkYl90ZXN0ICJwcmludCBpIiAiOCIgImNo ZWNrIHN0b3BwZWQgbG9jYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVh a3BvaW50IGluIEJQIGNvbmRpdGlvbiBldmFsdWF0aW9uIAorIyAoZmluaXNo IGluIG5vcm1hbCBmcmFtZSkKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3Rm aWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUi ICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBv cnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7 CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4g MAorfQorCitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9IGlmIHRlc3Qo aSw4KSIgXAorICAgICAgICAgIkJyZWFrcG9pbnQgLiogYXQgLioiICJzZXQg Y29uZGl0aW9uYWwgQlAiCitnZGJfdGVzdCAicHl0aG9uIFRlc3RCcmVha3Bv aW50KCkiICJUZXN0QnJlYWtwb2ludCBpbml0IiAic2V0IEJQIGluIGNvbmRp dGlvbiIKKworZ2RiX3Rlc3QgImNvbnRpbnVlIiBcCisgICAgICAgICAidGVz dCBkb24ndCBzdG9wOiAxLip0ZXN0IGRvbid0IHN0b3A6IDIuKnRlc3Qgc3Rv cC4qRXJyb3IgaW4gdGVzdGluZyBicmVha3BvaW50IGNvbmRpdGlvbi4qVGhl IHByb2dyYW0gYmVpbmcgZGVidWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1 bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi4qIiBcCisgICAgICAgICAic3RvcCBp biBjb25kaXRpb24gZnVuY3Rpb24iCisKK2dkYl90ZXN0ICJjb250aW51ZSIg IkNvbnRpbnVpbmcuKiIgImZpbmlzaCBjb25kaXRpb24gZXZhbHVhdGlvbiIK K2dkYl90ZXN0ICJjb250aW51ZSIgIkJyZWFrcG9pbnQuKiIgInN0b3AgYXQg Y29uZGl0aW9uYWwgYnJlYWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpIiAi OCIgImNoZWNrIHN0b3BwZWQgbG9jYXRpb24iCisKKyMKKyMgVGVzdCBGaW5p c2hCcmVha3BvaW50IGluIGV4cGxpY2l0IGluZmVyaW9yIGZ1bmN0aW9uIGNh bGwKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVz dCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0 IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlw dHMiCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fu bm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCisjIHJldHVy biBhZGRyZXNzIGluIGR1bW15IGZyYW1lCisKK2dkYl90ZXN0ICJweXRob24g VGVzdEV4cGxpY2l0QnJlYWtwb2ludCgnaW5jcmVhc2VfMScpIiAiQnJlYWtw b2ludC4qYXQuKiIgXAorICAgICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0 QnJlYWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpbmNyZWFzZV8xKCZpKSIg XAorICAgICAgICAgIlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBz ZXQgb24gYSBkdW1teSBmcmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxs b3cgRmluaXNoQnJlYWtwb2ludCBvbiBkdW1teSBmcmFtZXMiCisKKyMgcmV0 dXJuIGFkZHJlc3MgaW4gbm9ybWFsIGZyYW1lCisKK2RlbGV0ZV9icmVha3Bv aW50cworZ2RiX3Rlc3QgInB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50 KFwiaW5jcmVhc2VfMVwiKSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAg ICAgICJwcmVwYXJlIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVz dCAicHJpbnQgaW5jcmVhc2UoJmkpIiBcCisgICAgICAgICAiU2ltcGxlRmlu aXNoQnJlYWtwb2ludCBpbml0LipTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0 b3AuKlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUg aW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAg IkZpbmlzaEJQIHN0b3AgYXQgZHVyaW5nIGV4cGxpY2l0IGZ1bmN0aW9uIGNh bGwiCisKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZl cmlvciBleGl0cworIworCitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJd IHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4 aXQuIgorICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJweXRob24gU2lt cGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2lt cGxlRmluaXNoQnJlYWtwb2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVy IHRoZSBleGl0KCkiCitnZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5p c2hCcmVha3BvaW50IG91dCBvZiBzY29wZS4qIiAiY2F0Y2ggb3V0IG9mIHNj b3BlIGFmdGVyIGV4aXQiCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50 IHdoZW4gaW5mZXJpb3IgZXhlY3MKKyMKKworaWYgIVtydW50byAidGVzdF9l eGVjX2V4aXQiXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRl c3RfZXhlY19leGl0LiIKKyAgICByZXR1cm4gMAorfSAgICAgCisKK2dkYl90 ZXN0X25vX291dHB1dCAic2V0IHZhciBkb19leGl0ID0gMCIgInN3aXRjaCB0 byBleGVjdmUoKSB0ZXN0IgorZ2RiX3Rlc3QgInB5dGhvbiBTaW1wbGVGaW5p c2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJTaW1wbGVGaW5p c2hCcmVha3BvaW50IGluaXQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4 ZWMiCitnZGJfdGVzdCAiY2F0Y2ggZXhlYyIgIkNhdGNocG9pbnQuKlwoZXhl Y1wpLioiICJjYXRjaCBleGVjIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2lt cGxlRmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91 dCBvZiBzY29wZSBhZnRlciBleGVjIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5kZWEyYTczCi0tLSAvZGV2L251bGwKKysr IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50LnB5CkBAIC0wLDAgKzEsODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEx IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisj IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1 aXRlLiAgSXQgdGVzdHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4K KwkJCitjbGFzcyBNeUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVh a3BvaW50KToKKwlkZWYgX19pbml0X18oc2VsZiwgdmFsLCBmcmFtZSk6CisJ CWdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChzZWxmLCBmcmFtZSkK KwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBpbml0IgorCQlzZWxmLnZh bCA9IHZhbAorCQkKKwlkZWYgc3RvcChzZWxmKToKKwkJcHJpbnQgIk15Rmlu aXNoQnJlYWtwb2ludCBzdG9wIHdpdGggJWQiICUgaW50IChzZWxmLnZhbC5k ZXJlZmVyZW5jZSAoKSkKKwkJcHJpbnQgInJldHVybl92YWx1ZSBpczogJWQi ICUgaW50IChzZWxmLnJldHVybl92YWx1ZSkKKwkJZ2RiLmV4ZWN1dGUgKCJ3 aGVyZSAxIikKKwkJcmV0dXJuIFRydWUKKwkKKwlkZWYgb3V0X29mX3Njb3Bl KHNlbGYpOgorCQlwcmludCAiTXlGaW5pc2hCcmVha3BvaW50IG91dCBvZiBz Y29wZSIKKworY2xhc3MgVGVzdEJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQp OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkJyZWFr cG9pbnQuX19pbml0X18gKHNlbGYsIHNwZWM9InRlc3RfMSIsIGludGVybmFs PTEpCisgICAgICAgIHNlbGYuc2lsZW50ID0gVHJ1ZQorICAgICAgICBzZWxm LmNvdW50ID0gMAorICAgICAgICBwcmludCAiVGVzdEJyZWFrcG9pbnQgaW5p dCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgCXNlbGYu Y291bnQgKz0gMQorICAgIAl0cnk6CisgICAgICAgIAlUZXN0RmluaXNoQnJl YWtwb2ludCAoZ2RiLm5ld2VzdF9mcmFtZSAoKSwgc2VsZi5jb3VudCkKKyAg ICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgCXByaW50 IGUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFRlc3RGaW5pc2hC cmVha3BvaW50IChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9f aW5pdF9fIChzZWxmLCBmcmFtZSwgY291bnQpOgorICAgIAlzZWxmLmNvdW50 ID0gY291bnQKKyAgICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0 X18gKHNlbGYsIGZyYW1lLCBpbnRlcm5hbD0xKQorICAgICAgICAKKyAgICAg ICAgCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHByaW50ICItLT4i LCBzZWxmLm51bWJlcgorICAgICAgICBpZiAoc2VsZi5jb3VudCA9PSAzKToK KyAgICAgICAgICAgIHByaW50ICJ0ZXN0IHN0b3A6ICVkIiAlIHNlbGYuY291 bnQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICBwcmludCAidGVzdCBkb24ndCBzdG9wOiAlZCIgJSBzZWxm LmNvdW50CisgICAgICAgICAgICByZXR1cm4gRmFsc2UgCisgICAgICAgIAor ICAgIAorICAgIGRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAgIHBy aW50ICJ0ZXN0IGRpZG4ndCBmaW5pc2g6ICVkIiAlIHNlbGYuY291bnQKKwor Y2xhc3MgVGVzdEV4cGxpY2l0QnJlYWtwb2ludChnZGIuQnJlYWtwb2ludCk6 CisJZGVmIHN0b3Aoc2VsZik6CisJCXRyeToKKwkJCVNpbXBsZUZpbmlzaEJy ZWFrcG9pbnQgKGdkYi5uZXdlc3RfZnJhbWUgKCkpCisJCWV4Y2VwdCBWYWx1 ZUVycm9yIGFzIGU6CisJCQlwcmludCBlCisJCXJldHVybiBGYWxzZQorCitj bGFzcyBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5GaW5pc2hCcmVha3Bv aW50KToKKwlkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorCQlnZGIuRmlu aXNoQnJlYWtwb2ludC5fX2luaXRfXyAoc2VsZiwgZnJhbWUpCisJCQorCQlw cmludCAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IgorCQkKKwlkZWYg c3RvcChzZWxmKToKKwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQg c3RvcCIgCisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9zY29wZShz ZWxmKToKKwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9m IHNjb3BlIgorCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZGQiCmRp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQyLmNjIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50Mi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hMGVlYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5j YwpAQCAtMCwwICsxLDU5IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQg b2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAx MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyovCisKKworI2luY2x1ZGUgPGlvc3RyZWFtPgor Cit2b2lkCit0aHJvd19leGNlcHRpb25fMSAoaW50IGUpCit7CisgIHRocm93 IG5ldyBpbnQgKGUpOworfQorCit2b2lkCit0aHJvd19leGNlcHRpb24gKGlu dCBlKQoreworICB0aHJvd19leGNlcHRpb25fMSAoZSk7Cit9CisKK2ludAor bWFpbiAodm9pZCkKK3sKKyAgaW50IGk7CisgIHRyeQorICAgIHsKKyAgICAg IHRocm93X2V4Y2VwdGlvbl8xICgxMCk7CisgICAgfQorICBjYXRjaCAoY29u c3QgaW50ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNl cHRpb24gIyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0KKyAgaSArPSAx OyAvKiBCcmVhayBhZnRlciBleGNlcHRpb24gMS4gICovCisKKyAgdHJ5Cisg ICAgeworICAgICAgdGhyb3dfZXhjZXB0aW9uICgxMCk7CisgICAgfQorICBj YXRjaCAoY29uc3QgaW50ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJy IDw8ICJFeGNlcHRpb24gIyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0K KyAgaSArPSAxOyAvKiBCcmVhayBhZnRlciBleGNlcHRpb24gMi4gICovCisK KyAgcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCBiL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTc5OGMKLS0t IC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt ZmluaXNoLWJyZWFrcG9pbnQyLmV4cApAQCAtMCwwICsxLDY1IEBACisjIENv cHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNt CisjIGV4cG9zaW5nIHZhbHVlcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxl dmVsIHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2Fk X2xpYiBnZGItcHl0aG9uLmV4cAorCitzZXQgdGVzdGZpbGUgInB5LWZpbmlz aC1icmVha3BvaW50MiIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmNjCitz ZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9Citz ZXQgcHlmaWxlICAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5 CisKKyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0CitnZGJf c3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgor Z2RiX2xvYWQgJHtiaW5maWxlfQorCitpZiB7IFtnZGJfY29tcGlsZSAiJHtz cmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhl Y3V0YWJsZSB7ZGVidWcgYysrfV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQg IkNvdWxkbid0IGNvbXBpbGUgJHtzcmNmaWxlfSIKKyAgICByZXR1cm4gLTEK K30KKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5u b3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisKKyMKKyMgQ2hl Y2sgRmluaXNoQnJlYWtwb2ludHMgYWdhaW5zdCBDKysgZXhjZXB0aW9ucwor IworCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiQnJl YWsgYWZ0ZXIgZXhjZXB0aW9uIDIiXQorCitnZGJfdGVzdCAic291cmNlICRw eWZpbGUiICIuKlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAg ICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKyAgICAgICAgIAorZ2RiX2Jy ZWFrcG9pbnQgInRocm93X2V4Y2VwdGlvbl8xIgorZ2RiX3Rlc3QgImNvbnRp bnVlIiAiQnJlYWtwb2ludCAuKnRocm93X2V4Y2VwdGlvbl8xLioiICJydW4g dG8gZXhjZXB0aW9uIDEiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVu KGdkYi5icmVha3BvaW50cygpKSIgIjMiICJjaGVjayBCUCBjb3VudCIKK2dk Yl90ZXN0ICJweXRob24gRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIu bmV3ZXN0X2ZyYW1lKCkpIiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3Bv aW50IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJf dGVzdCAiY29udGludWUiICIuKnN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNo QnJlYWtwb2ludC4qIiAiY2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBjYXRj aCgpIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBsZW4oZ2RiLmJyZWFrcG9p bnRzKCkpIiAiMyIgImNoZWNrIGZpbmlzaCBCUCByZW1vdmFsIgorCitnZGJf dGVzdCAiY29udGludWUiICIuKkJyZWFrcG9pbnQuKiB0aHJvd19leGNlcHRp b25fMS4qIiAiY29udGludWUgdG8gc2Vjb25kIGV4Y2VwdGlvbiIKK2dkYl90 ZXN0ICJweXRob24gRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3 ZXN0X2ZyYW1lKCkpIiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50 IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVz dCAiY29udGludWUiICIuKmV4Y2VwdGlvbiBkaWQgbm90IGZpbmlzaC4qIiAi RmluaXNoQnJlYWtwb2ludCB3aXRoIGV4Y2VwdGlvbiB0aHJvd24gbm90IGNh dWdodCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludDIucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjY5NTUKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQyLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVz dHN1aXRlLiAgSXQgdGVzdHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50 cy4KKworY2xhc3MgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIuRmlu aXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1l KToKKyAgICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNl bGYsIGZyYW1lLCBpbnRlcm5hbD0xKQorICAgICAgICBzZWxmLnNpbGVudCA9 IFRydWU7CisgICAgICAgIHByaW50ICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJy ZWFrcG9pbnQiCisgICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAg ICAgICBwcmludCAic3RvcHBlZCBhdCBFeGNlcHRpb25GaW5pc2hCcmVha3Bv aW50IgorICAgICAgICByZXR1cm4gVHJ1ZSAKKyAgICAKKyAgICBkZWYgb3V0 X29mX3Njb3BlKHNlbGYpOgorICAgICAgICBwcmludCAiZXhjZXB0aW9uIGRp ZCBub3QgZmluaXNoIC4uLiIKKworCitwcmludCAiUHl0aG9uIHNjcmlwdCBp bXBvcnRlZCIKLS0gCjEuNy42LjQKCg== --20cf307f312e9eceb004b396e7c4--