From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14052 invoked by alias); 30 May 2011 09:29:23 -0000 Received: (qmail 13992 invoked by uid 22791); 30 May 2011 09:29:15 -0000 X-SWARE-Spam-Status: No, hits=0.5 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_BJ,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; Mon, 30 May 2011 09:28:49 +0000 Received: by vxk20 with SMTP id 20so3367961vxk.0 for ; Mon, 30 May 2011 02:28:48 -0700 (PDT) Received: by 10.221.9.136 with SMTP id ow8mr1868386vcb.78.1306747728151; Mon, 30 May 2011 02:28:48 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.199.1 with HTTP; Mon, 30 May 2011 02:28:28 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Mon, 30 May 2011 09:29:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=bcaec54a383e25c5d704a47aea34 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-05/txt/msg00678.txt.bz2 --bcaec54a383e25c5d704a47aea34 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5297 > Kevin> breakpoint.h: > Kevin> enum py_bp_type > Kevin> =A0 { > Kevin> =A0 =A0 py_bp_none, =A0 =A0 =A0 =A0 /* No Python object. =A0*/ > > I don't think this one is needed. > > Kevin> =A0 =A0 py_bp_standard, =A0 =A0 /* Ordinary breakpoint object. =A0= */ > Kevin> =A0 =A0 py_bp_finish =A0 =A0 =A0 =A0/* FinishBreakpoint object. = =A0*/ > > These should be uppercase, but it seems to me that if there are just 2 > states you might as well use an ordinary boolean(-ish) flag. OK, I wanted to let a room free for further Python-specific breakpoint handling, but if you feel like it's not necessary ... I changed it to "int is_py_finish_bp" > Kevin> as per your two comments, I now only store the `struct type' =A0of= the > Kevin> function and the return value, > > You need to store a gdb.Type wrapper. > A 'struct type' can also be invalidated when an objfile is destroyed. I wouldn't mind, but I can't see how gdb.Type ensures validity, as far as I've seen, there is no "is_valid" method and I can't and no further verification during the Python -> C translation: struct type * type_object_to_type (PyObject *obj) { if (! PyObject_TypeCheck (obj, &type_object_type)) return NULL; return ((type_object *) obj)->type; } > Kevin> diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint-cc.exp = b/gdb/testsuite/gdb.python/py-finish-breakpoint-cc.exp > > Tom> Funny file name. > > Kevin> funny but correct, or too funny? ;) > > It is more usual in the gdb test suite to give the .cc and .exp files > the same base name. so py-finish-breakpoint2.{exp,cc,py} should look more serious! >> Other cases to consider are - >> * inferior exec >> * inferior exit >> * explicit inferior function call >> * "return" command > Kevin> I'll work on the tests for the next version of the patch ("return" > Kevin> should already be covered) > > I will wait for this to do more review. these situations should now be covered in `'py-finish-breakpoint.exp" > Kevin> @defivar FinishBreakpoint out_of_scope_notif > Kevin> This attribute will be @code{True} until the @code{out_of_scope} m= ethod has > Kevin> been called and @code{False} afterwards. This attribute is writeab= le, so out > Kevin> of scope notifications can be re-enabled. > Kevin> @end defivar > > I still don't really understand under what circumstances it is useful > for a program to set this attribute. > > Kevin> - avoid calling `out_of_scope' every normal_stop when the breakpoi= nt > Kevin> is not anymore in the callstack > > I think it would be ok to just leave this up to the subclass to handle. I thought about just getting rid of this part of the patch, but it really seem important to me. Here is a (pseudo-code) example to try to demonstrate that: function inner (param) { if (param) return 1 else throw exception } function outter (param) { return innter(param) } function main () { try: outter (TRUE) except: pass try: outter (FALSE) except: pass try: outter (TRUE) except: pass } in a Python script, you want to know the return value of OUTTER (in a script --> you don't know the actual shape of the Main function -- for instance think about the 'write(2)` function which returns the size of the data actually written) you'll need one gdb.Breakpoint and several gdb.FinishBreakpoint: class OutterBreakpoint(gdb.Breakpoint): def __init__(self): gdb.Breakpoint.__init__(self, "outter", internal=3DTrue) self.silent =3D True def stop(): OutterFinishBreakpoint(gdb.newest_frame()) return False class OutterFinishBreakpoint(gdb.FinishBreakpoint): def stop(): print "outter finished with :", self.return_value self.enable =3D False gdb.post_event(self.delete) def out_of_scope() self.enable =3D False gdb.post_event(self.delete) This `out_of_scope' function is the easiest way to cleanup the FinishBreakpoint when the finished function didn't return correctly (and is only useful in this situation, I admit) > Kevin> - allow the script to re-activate notification when it wants to > Kevin> 're-use' the FinishBreakpoint (instead of deleting it / creating a= new > Kevin> one) > > I am not sure when this makes sense. that's the opposite situation, you know know the function will only be triggered from one (limitted set of) place, so you don't want to create/delete BPs each time: class OutterBreakpoint(gdb.Breakpoint): ... def stop(): if self.finish is None: self.finish =3D OutterFinishBreakpoint(gdb.newest_frame()) return False class OutterFinishBreakpoint(gdb.FinishBreakpoint): ... def stop(): #don't delete #treat normal termination def out_of_scope(): #treat exception termination self.out_of_scope_notif =3D True # allows to catch further exception termination I also added a verification which checks that `out_of_scope' is only trigged for the inferior for the inferior which owns the breakpoint: +bpfinishpy_detect_out_scope_cb (struct breakpoint *b, void *args) ... + else if (finish_bp->out_of_scope_notif + && b->pspace =3D=3D current_inferior()->pspace + && (!target_has_registers || frame_find_by_id(b->frame_id) =3D= =3D NULL)) + { + bpfinishpy_out_of_scope (finish_bp); + } thanks, Kevin --bcaec54a383e25c5d704a47aea34 Content-Type: text/plain; charset=US-ASCII; name="finish_bp2.txt" Content-Disposition: attachment; filename="finish_bp2.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gobksn740 Content-length: 76686 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCA1YmFiMzYwLi4yNTA3OTM4IDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0yODUsNiArMjg1 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktZXZ0cmVnaXN0cnku byBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0ZWRldmVudC5vIFwKKwlweS1m aW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZyYW1lLm8gXAogCXB5LWZ1bmN0 aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApAQCAtMzE1LDYgKzMxNiw3IEBA IFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktZXZ0cmVnaXN0 cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBcCiAJcHl0aG9uL3B5LWV4aXRl ZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMgXAog CXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRob24vcHktZnVuY3Rpb24uYyBc CiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApAQCAtMjA2Miw2ICsyMDY0LDEw IEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3JjZGlyKS9weXRob24vcHktZXhp dGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKFBPU1RDT01QSUxF KQogCitweS1maW5pc2hicmVha3BvaW50Lm86ICQoc3JjZGlyKS9weXRob24v cHktZmluaXNoYnJlYWtwb2ludC5jCisJJChDT01QSUxFKSAkKFBZVEhPTl9D RkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5j CisJJChQT1NUQ09NUElMRSkKKwogcHktZnJhbWUubzogJChzcmNkaXIpL3B5 dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1Mp ICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoUE9TVENPTVBJTEUp CmRpZmYgLS1naXQgYS9nZGIvYnJlYWtwb2ludC5jIGIvZ2RiL2JyZWFrcG9p bnQuYwppbmRleCA3MDkzMTA0Li43YTNkYTI2IDEwMDY0NAotLS0gYS9nZGIv YnJlYWtwb2ludC5jCisrKyBiL2dkYi9icmVha3BvaW50LmMKQEAgLTU4MTQs NiArNTgxNCw3IEBAIHNldF9yYXdfYnJlYWtwb2ludF93aXRob3V0X2xvY2F0 aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKICAgYi0+b3BzID0gTlVM TDsKICAgYi0+Y29uZGl0aW9uX25vdF9wYXJzZWQgPSAwOwogICBiLT5weV9i cF9vYmplY3QgPSBOVUxMOworICBiLT5pc19weV9maW5pc2hfYnAgPSAwOwog ICBiLT5yZWxhdGVkX2JyZWFrcG9pbnQgPSBiOwogCiAgIC8qIEFkZCB0aGlz IGJyZWFrcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgY2hhaW4gc28gdGhhdCBh IGxpc3Qgb2YKZGlmZiAtLWdpdCBhL2dkYi9icmVha3BvaW50LmggYi9nZGIv YnJlYWtwb2ludC5oCmluZGV4IDdmYTcwNWYuLmJiNDU1MTIgMTAwNjQ0Ci0t LSBhL2dkYi9icmVha3BvaW50LmgKKysrIGIvZ2RiL2JyZWFrcG9pbnQuaApA QCAtNjU0LDYgKzY1NCw5IEBAIHN0cnVjdCBicmVha3BvaW50CiAgICAgICAg dHlwZXMgYXJlIHRyYWNrZWQgYnkgdGhlIFB5dGhvbiBzY3JpcHRpbmcgQVBJ LiAgKi8KICAgICBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKnB5X2JwX29i amVjdDsKIAorICAgIC8qIFRSVUUgaXMgcHlfYnBfb2JqZWN0IGlzIGEgZ2Ri LkZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0IC4gICovCisgICAgaW50IGlzX3B5 X2ZpbmlzaF9icDsKKwogICAgIC8qIFdoZXRoZXIgdGhpcyB3YXRjaHBvaW50 IGlzIGV4YWN0IChzZWUgdGFyZ2V0X2V4YWN0X3dhdGNocG9pbnRzKS4gICov CiAgICAgaW50IGV4YWN0OwogCmRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50 ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4aW5mbwppbmRleCA1ODRhNTIwLi45 NzJiNjA4IDEwMDY0NAotLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBi L2dkYi9kb2MvZ2RiLnRleGluZm8KQEAgLTIzNTEzLDYgKzIzNTEzLDcwIEBA IGNvbW1hbmRzLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXMuICBJZiB0aGVyZSBh cmUgbm8gY29tbWFuZHMsIHRoaXMKIGF0dHJpYnV0ZSBpcyBAY29kZXtOb25l fS4gIFRoaXMgYXR0cmlidXRlIGlzIG5vdCB3cml0YWJsZS4KIEBlbmQgZGVm aXZhcgogCitAc3Vic3Vic2VjdGlvbiBGaW5pc2ggQnJlYWtwb2ludHMKKwor QGNpbmRleCBweXRob24gZmluaXNoIGJyZWFrcG9pbnRzCitAdGluZGV4IGdk Yi5GaW5pc2hCcmVha3BvaW50CisKK0EgQGZkYntmaW5pc2ggYnJlYWtwb2lu dH0gaXMgYSBicmVha3BvaW50IHNldCBhdCB0aGUgcmV0dXJuIGFkZHJlc3Mg b2YKK2EgZnJhbWUsIGJhc2VkIG9uIHRoZSAiZmluaXNoIGNvbW1hbmQuIEBj b2Rle2dkYi5GaW5pc2hCcmVha3BvaW50fSBleHRlbmRzCitAY29kZXtnZGIu QnJlYWtwb2ludH0KKworQGRlZm1ldGhvZCBGaW5pc2hCcmVha3BvaW50IF9f aW5pdF9fIGZyYW1lIEBye1t9aW50ZXJuYWxAcntdfQorQ3JlYXRlIGEgRmlu aXNoQnJlYWtwb2ludCBhdCB0aGUgcmV0dXJuIG9mIHRoZSBAY29kZXtnZGIu RnJhbWV9IG9iamVjdCAKK0B2YXJ7ZnJhbWV9LiBUaGUgb3B0aW9uYWwgQHZh cntpbnRlcm5hbH0gYXJndW1lbnQgYWxsb3dzIHRoZSBicmVha3BvaW50Cit0 byBiZWNvbWUgaW52aXNpYmxlIHRvIHRoZSB1c2VyLiBAeHJlZntCcmVha3Bv aW50cyBJbiBQeXRob259LCBmb3IgZnVydGhlciAKK2RldGFpbHMgYWJvdXQg dGhpcyBhcmd1bWVudC4KK0BlbmQgZGVmbWV0aG9kCisKK0BkZWZvcCBPcGVy YXRpb24ge2dkYi5CcmVha3BvaW50fSBvdXRfb2Zfc2NvcGUgKHNlbGYpCitJ biBzb21lIGNpcmNvbnN0YW5jZXMgKGVnLCBAY29kZXtsb25nam1wfSwgQysr IGV4Y2VwdGlvbnMsIEB2YWx1ZXtHREJOfSAKK0Bjb2Rle3JldHVybn0gY29t bWFuZCwgLi4uKSwgYSBmdW5jdGlvbiBtYXkgbm90IHByb3Blcmx5IHRlcm1p bmF0ZSwgYW5kIHRodXMgCituZXZlciBoaXQgYSBAe2NvZGV9IEZpbmlzaEJy ZWFrcG9pbnQuIFdoZW4gQHZhbHVle0dEQk59IG5vdGljZXMgc3VjaCBhIAor c2l0dWF0aW9uLCB0aGUgQGNvZGV7b3V0X29mX3Njb3BlfSBmdW5jdGlvbiB3 aWxsIGJlIHRyaWdnZXJlZC4KKworVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJl IGNhbGxlZCBpZiB0aGUgQGNvZGV7b3V0X29mX3Njb3BlX25vdGlmfSBhdHRy aWJ1dGUgCitpcyBAY29kZXtUcnVlfS4KKworRGVsZXRpbmcgKEBjb2Rle2dk Yi5CcmVha3BvaW50LmRlbGV0ZSAoKX0pIHRoZSBAY29kZXtGaW5pc2hCcmVh a3BvaW50fSBpcworYWxsb3dlZCBpbiB0aGlzIGZ1bmN0aW9uLgorCitZb3Ug bWF5IHdhbnQgdG8gc3ViLWNsYXNzIHRoZSBAY29kZXtnZGIuRmluaXNoQnJl YWtwb2ludH0gYW5kIGltcGxlbWVudCB0aGUKK0Bjb2Rle291dF9vZl9zY29w ZX0gbWV0aG9kOgorCitAc21hbGxleGFtcGxlCitjbGFzcyBNeUZpbmlzaEJy ZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVha3BvaW50KQorCWRlZiBzdG9wIChz ZWxmKToKKwkJcHJpbnQgIm5vcm1hbCBmaW5pc2giCisJCXJldHVybiBUcnVl CisJCisJZGVmIG91dF9vZl9zY29wZSAoKToKKwkJcHJpbnQgImFibm9ybWFs IGZpbmlzaCIKK0BlbmQgc21hbGxleGFtcGxlIAorQGVuZCBkZWZvcAorCitA ZGVmbWV0aG9kIEZpbmlzaEJyZWFrcG9pbnQgY2hlY2tfc2NvcGUKK0JlY2F1 c2UgQHZhbHVle0dEQk59IGN1cnJlbnRseSBvbmx5IGNoZWNrcyBpZiBAY29k ZXtGaW5pc2hCcmVha3BvaW50fXMgcmFuCitvdXQgb2Ygc2NvcGUgYXQgbm9y bWFsIHN0b3BzLCB0aGlzIG1ldGhvZCBhbGxvd3MgdG8gZm9yY2UgdGhlIHZl cmlmaWNhdGlvbgorYW5kIHRyaWdnZXIgdGhlIEBjb2Rle291dF9vZl9zY29w ZX0gbWV0aG9kIGlmIG5lY2Vzc2FyeS4gSXQgd2lsbCByZXR1cm4gCitAY29k ZXtUcnVlfSBpZiBAY29kZXtvdXRfb2Zfc2NvcGUgKCl9IHdhcyB0cmlnZ2Vy ZWQsIEBjb2Rle0ZhbHNlfSBvdGhlcndpc2UuCitAZW5kIGRlZm1ldGhvZAor CisKK0BkZWZpdmFyIEZpbmlzaEJyZWFrcG9pbnQgb3V0X29mX3Njb3BlX25v dGlmCitUaGlzIGF0dHJpYnV0ZSB3aWxsIGJlIEBjb2Rle1RydWV9IHVudGls IHRoZSBAY29kZXtvdXRfb2Zfc2NvcGV9IG1ldGhvZCBoYXMKK2JlZW4gY2Fs bGVkIGFuZCBAY29kZXtGYWxzZX0gYWZ0ZXJ3YXJkcy4gVGhpcyBhdHRyaWJ1 dGUgaXMgd3JpdGVhYmxlLCBzbyBvdXQKK29mIHNjb3BlIG5vdGlmaWNhdGlv bnMgY2FuIGJlIHJlLWVuYWJsZWQuCitAZW5kIGRlZml2YXIKKworQGRlZml2 YXIgRmluaXNoQnJlYWtwb2ludCByZXR1cm5fdmFsdWUKK1doZW4gQHZhbHVl e0dEQk59IGlzIHN0b3BwZWQgYXQgYSBAY29kZXtGaW5pc2hCcmVha3BvaW50 fSwgYW5kIHRoZSBmcmFtZSAKK3VzZWQgdG8gYnVpbGQgdGhlIEBjb2Rle0Zp bmlzaEJyZWFrcG9pbnR9IGhhZCBkZWJ1ZyBzeW1ib2xzLCB0aGlzIGF0dHJp YnV0ZQord2lsbCBjb250YWluIGEgQGNvZGV7Z2RiLlZhbHVlfSBvYmplY3Qg Y29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mCit0aGUgZnVu Y3Rpb24uIFRoZSB2YWx1ZSB3aWxsIGJlIEBjb2Rle05vbmV9IGlmIHRoZSB2 YWx1ZSB3YXMgbm90IGNvbXB1dGFibGUuCitUaGlzIGF0dHJpYnV0ZSBpcyBu b3Qgd3JpdGFibGUuCitAZW5kIGRlZml2YXIKKwogQG5vZGUgTGF6eSBTdHJp bmdzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gUHl0aG9uIHJlcHJlc2Vu dGF0aW9uIG9mIGxhenkgc3RyaW5ncy4KIApkaWZmIC0tZ2l0IGEvZ2RiL2lu ZmNtZC5jIGIvZ2RiL2luZmNtZC5jCmluZGV4IGJlMWYwYTUuLjJkMTllYTkg MTAwNjQ0Ci0tLSBhL2dkYi9pbmZjbWQuYworKysgYi9nZGIvaW5mY21kLmMK QEAgLTEzNzgsMTQgKzEzNzgsMTIgQEAgYWR2YW5jZV9jb21tYW5kIChjaGFy ICphcmcsIGludCBmcm9tX3R0eSkKICAgdW50aWxfYnJlYWtfY29tbWFuZCAo YXJnLCBmcm9tX3R0eSwgMSk7CiB9CiAMCi0vKiBQcmludCB0aGUgcmVzdWx0 IG9mIGEgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNvbW1h bmQuICAqLworLyogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBh dCB0aGUgZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC9CUC4gICovCiAKLXN0 YXRpYyB2b2lkCi1wcmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpm dW5jX3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQorc3RydWN0IHZh bHVlICoKK2dldF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5 cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQogewogICBzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChzdG9wX3JlZ2lz dGVycyk7Ci0gIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47Ci0gIHN0cnVj dCB1aV9zdHJlYW0gKnN0YjsKICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKIAog ICBDSEVDS19UWVBFREVGICh2YWx1ZV90eXBlKTsKQEAgLTE0MTUsNiArMTQx MywxOCBAQCBwcmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5j X3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQogICAgICAgaW50ZXJu YWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywgXygiYmFkIHN3aXRjaCIp KTsKICAgICB9CiAKKyAgcmV0dXJuIHZhbHVlOworfQorCisvKiBQcmludCB0 aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5p c2gnIGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9pZAorcHJpbnRfcmV0dXJu X3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAq dmFsdWVfdHlwZSkKK3sKKyAgc3RydWN0IHZhbHVlICp2YWx1ZSA9IGdldF9y ZXR1cm5fdmFsdWUgKGZ1bmNfdHlwZSwgdmFsdWVfdHlwZSk7CisgIHN0cnVj dCBjbGVhbnVwICpvbGRfY2hhaW47CisgIHN0cnVjdCB1aV9zdHJlYW0gKnN0 YjsKKwogICBpZiAodmFsdWUpCiAgICAgewogICAgICAgc3RydWN0IHZhbHVl X3ByaW50X29wdGlvbnMgb3B0czsKZGlmZiAtLWdpdCBhL2dkYi9pbmZlcmlv ci5oIGIvZ2RiL2luZmVyaW9yLmgKaW5kZXggMTVlM2NhMi4uZTM4Y2U1NCAx MDA2NDQKLS0tIGEvZ2RiL2luZmVyaW9yLmgKKysrIGIvZ2RiL2luZmVyaW9y LmgKQEAgLTI4NSw2ICsyODUsOSBAQCBleHRlcm4gdm9pZCBkZXRhY2hfY29t bWFuZCAoY2hhciAqLCBpbnQpOwogCiBleHRlcm4gdm9pZCBub3RpY2VfbmV3 X2luZmVyaW9yIChwdGlkX3QsIGludCwgaW50KTsKIAorZXh0ZXJuIHN0cnVj dCB2YWx1ZSAqZ2V0X3JldHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNf dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKTsKKwogLyogQWRkcmVzcyBhdCB3 aGljaCBpbmZlcmlvciBzdG9wcGVkLiAgKi8KIAogZXh0ZXJuIENPUkVfQURE UiBzdG9wX3BjOwpkaWZmIC0tZ2l0IGEvZ2RiL2luZnJ1bi5jIGIvZ2RiL2lu ZnJ1bi5jCmluZGV4IDhkNjkxMGQuLmVmZTIxYzMgMTAwNjQ0Ci0tLSBhL2dk Yi9pbmZydW4uYworKysgYi9nZGIvaW5mcnVuLmMKQEAgLTU0LDYgKzU0LDcg QEAKICNpbmNsdWRlICJpbmxpbmUtZnJhbWUuaCIKICNpbmNsdWRlICJqaXQu aCIKICNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisjaW5jbHVkZSAicHl0aG9u L3B5dGhvbi5oIgogCiAvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlv bnMgKi8KIApAQCAtMzM2LDcgKzMzNyw4IEBAIHNob3dfc3RvcF9vbl9zb2xp Yl9ldmVudHMgKHN0cnVjdCB1aV9maWxlICpmaWxlLCBpbnQgZnJvbV90dHks CiBpbnQgc3RvcF9hZnRlcl90cmFwOwogCiAvKiBTYXZlIHJlZ2lzdGVyIGNv bnRlbnRzIGhlcmUgd2hlbiBleGVjdXRpbmcgYSAiZmluaXNoIiBjb21tYW5k IG9yIGFyZQotICAgYWJvdXQgdG8gcG9wIGEgc3RhY2sgZHVtbXkgZnJhbWUs IGlmLWFuZC1vbmx5LWlmIHByb2NlZWRfdG9fZmluaXNoIGlzIHNldC4KKyAg IGFib3V0IHRvIHBvcCBhIHN0YWNrIGR1bW15IGZyYW1lLCBpZi1hbmQtb25s eS1pZiBwcm9jZWVkX3RvX2ZpbmlzaCBpcyBzZXQKKyAgIG9yIGEgUHl0aG9u IEZpbmlzaEJyZWFrcG9pbnQgaGF2ZSBiZWVuIGhpdC4KICAgIFRodXMgdGhp cyBjb250YWlucyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGNhbGxlZCBm dW5jdGlvbiAoYXNzdW1pbmcKICAgIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4g YSByZWdpc3RlcikuICAqLwogCkBAIC01ODIzLDcgKzU4MjUsOCBAQCBub3Jt YWxfc3RvcCAodm9pZCkKIAogICAvKiBTYXZlIHRoZSBmdW5jdGlvbiB2YWx1 ZSByZXR1cm4gcmVnaXN0ZXJzLCBpZiB3ZSBjYXJlLgogICAgICBXZSBtaWdo dCBiZSBhYm91dCB0byByZXN0b3JlIHRoZWlyIHByZXZpb3VzIGNvbnRlbnRz LiAgKi8KLSAgaWYgKGluZmVyaW9yX3RocmVhZCAoKS0+Y29udHJvbC5wcm9j ZWVkX3RvX2ZpbmlzaCkKKyAgaWYgKGdkYnB5X2lzX3N0b3BwZWRfYXRfZmlu aXNoX2JwIChpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wuc3RvcF9icHN0 YXQpCisgICAgICB8fCBpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wucHJv Y2VlZF90b19maW5pc2gpCiAgICAgewogICAgICAgLyogVGhpcyBzaG91bGQg bm90IGJlIG5lY2Vzc2FyeS4gICovCiAgICAgICBpZiAoc3RvcF9yZWdpc3Rl cnMpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYyBi L2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jCmluZGV4IDljMzM4NDguLjQ3 OTQ2ZDkgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5j CisrKyBiL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jCkBAIC0zMSw1MiAr MzEsMTggQEAKICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCiAjaW5jbHVkZSAi bGFuZ3VhZ2UuaCIKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3BvaW50 X29iamVjdF90eXBlOworUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0 X3R5cGU7CiAKIC8qIE51bWJlciBvZiBsaXZlIGJyZWFrcG9pbnRzLiAgKi8K IHN0YXRpYyBpbnQgYnBweV9saXZlOwogCiAvKiBWYXJpYWJsZXMgdXNlZCB0 byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIEJyZWFrcG9pbnQKICAg IGNvbnN0cnVjdG9yIGFuZCB0aGUgYnJlYWtwb2ludC1jcmVhdGVkIGhvb2sg ZnVuY3Rpb24uICAqLwotc3RhdGljIGJyZWFrcG9pbnRfb2JqZWN0ICpicHB5 X3BlbmRpbmdfb2JqZWN0OworYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVu ZGluZ19vYmplY3Q7CiAKIC8qIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdo ZW4gYSBQeXRob24gY29uZGl0aW9uIGlzIGV2YWx1YXRlZC4gICovCiBzdGF0 aWMgY2hhciAqIGNvbnN0IHN0b3BfZnVuYyA9ICJzdG9wIjsKIAotc3RydWN0 IGJyZWFrcG9pbnRfb2JqZWN0Ci17Ci0gIFB5T2JqZWN0X0hFQUQKLQotICAv KiBUaGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5nIHRvIGdkYi4gICov Ci0gIGludCBudW1iZXI7Ci0KLSAgLyogVGhlIGdkYiBicmVha3BvaW50IG9i amVjdCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbgotICAg ICBkZWxldGVkLiAgKi8KLSAgc3RydWN0IGJyZWFrcG9pbnQgKmJwOwotfTsK LQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVh a3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgotICAgZXhjZXB0aW9uIGlmIGl0 IGlzIGludmFsaWQuICAqLwotI2RlZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQo QnJlYWtwb2ludCkJCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICBp ZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJXAotCXJldHVybiBQ eUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgICAgICAgICAgICAg ICAgICAgICAgICBcCi0JCQkgICAgIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52 YWxpZC4iKSwJCVwKLQkJCSAgICAgKEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJ CVwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBSZXF1aXJlIHRoYXQgQlJFQUtQ T0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0aG9u Ci0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gIFRoaXMgbWFjcm8g aXMgZm9yIHVzZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAgKi8KLSNkZWZpbmUg QlBQWV9TRVRfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KQkJCQlcCi0gICAg ZG8gewkJCQkJCQkJXAotICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0g TlVMTCkJCQkJCVwKLSAgICAgICAgewkJCQkJCQkJXAotCSAgUHlFcnJfRm9y bWF0IChQeUV4Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQgJWQgaXMg aW52YWxpZC4iKSwgXAotCQkJKEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJCQlc Ci0JICByZXR1cm4gLTE7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfSB3 aGlsZSAoMCkKLQogLyogVGhpcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgdmFy aW91cyBnZGIuYnBfKiBjb25zdGFudHMuICAqLwogc3RydWN0IHB5YnBfY29k ZQogewpAQCAtODEzLDYgKzc3OSw4IEBAIGdkYnB5X2JyZWFrcG9pbnRfY3Jl YXRlZCAoc3RydWN0IGJyZWFrcG9pbnQgKmJwKQogICAgICAgbmV3YnAtPmJw LT5weV9icF9vYmplY3QgPSBuZXdicDsKICAgICAgIFB5X0lOQ1JFRiAobmV3 YnApOwogICAgICAgKyticHB5X2xpdmU7CisKKyAgICAgIGJwLT5pc19weV9m aW5pc2hfYnAgPSBicGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAoKFB5T2JqZWN0 ICopIG5ld2JwKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBAIC05NzEsNyAr OTM5LDcgQEAgc3RhdGljIFB5TWV0aG9kRGVmIGJyZWFrcG9pbnRfb2JqZWN0 X21ldGhvZHNbXSA9CiAgIHsgTlVMTCB9IC8qIFNlbnRpbmVsLiAgKi8KIH07 CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlw ZSA9CitQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CiB7 CiAgIFB5T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKICAgMCwJCQkJICAvKm9i X3NpemUqLwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVh a3BvaW50LmMgYi9nZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjg0OWJmCi0t LSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3Bv aW50LmMKQEAgLTAsMCArMSw0OTcgQEAKKy8qIFB5dGhvbiBpbnRlcmZhY2Ug dG8gZmluaXNoIGJyZWFrcG9pbnRzCisKKyAgIENvcHlyaWdodCAoQykgMjAx MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisKKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJleGNl cHRpb25zLmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCisjaW5j bHVkZSAiYnJlYWtwb2ludC5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5j bHVkZSAiZ2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgor I2luY2x1ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIK KyNpbmNsdWRlICJpbmZlcmlvci5oIgorCitzdGF0aWMgUHlUeXBlT2JqZWN0 IGZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlOworCisvKiBGdW5jdGlv biB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgUHl0aG9uIGZpbmlzaCBicCBpcyBm b3VuZCBvdXQgb2Ygc2NvcGUuICAqLworc3RhdGljIGNoYXIgKiBjb25zdCBv dXRvZnNjb3BlX2Z1bmMgPSAib3V0X29mX3Njb3BlIjsKKworLyogc3RydWN0 IGltcGxlbWVudGluZyB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0 IGJ5IGV4dGVuZGluZworICAgdGhlIGdkYi5CcmVha3BvaW50IGNsYXNzLiAg Ki8KK3N0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QKK3sKKyAgLyog Z2RiLkJyZWFrcG9pbnQgYmFzZSBjbGFzcy4gICovCisgIHN0cnVjdCBicmVh a3BvaW50X29iamVjdCBweV9icDsKKyAgLyogRmxhZyBpbmRpY2F0aW5nIHRo YXQgdGhlIEJQIGlzIG91dCBvZiB0aGUgY2FsbHN0YWNrIGFuZCBQeXRob24g Y2FsbGJhY2sKKyAgICAgaGFzIGJlZW4gdHJpZ2dlcmVkLiAgKi8KKyAgaW50 IG91dF9vZl9zY29wZV9ub3RpZjsKKyAgLyogVHlwZSBvZiB0aGUgZnVuY3Rp b24gZmluaXNoZWQgYnkgdGhpcyBicmVha3BvaW50LiAgKi8KKyAgc3RydWN0 IHR5cGUgKmZ1bmN0aW9uX3R5cGU7CisgIC8qIFR5cGUgb2YgdGhlIHZhbHVl IHJldHVybiBieSB0aGUgYnJlYWtwb2ludGVkIGZ1bmN0aW9uLiAgKi8KKyAg c3RydWN0IHR5cGUgKnJldHVybl90eXBlOworICAvKiBXaGVuIHN0b3BwZWQg YXQgdGhpcyBGaW5pc2hCcmVha3BvaW50LCB2YWx1ZSByZXR1cm5lZCBieSB0 aGUgZnVuY3Rpb247CisgICAgIFB5X05vbmUgaWYgdGhlIHZhbHVlIGlzIG5v dCBjb21wdXRhYmxlOworICAgICBOVUxMIGlmIEdEQiBpcyBub3Qgc3RvcHBl ZCBhdCBhIEZpbmlzaEJyZWFrcG9pbnQuICAqLworICBQeU9iamVjdCAqcmV0 dXJuX3ZhbHVlOworfTsKKworLyogUHl0aG9uIGZ1bmN0aW9uIHRvIHNldCB0 aGUgJ291dF9vZl9zY29wZV9ub3RpZicgYXR0cmlidXRlIG9mCisgICBGaW5p c2hCcmVha3BvaW50LiAgKi8KKworc3RhdGljIGludAorYnBmaW5pc2hweV9z ZXRfb3V0b2ZzY29wZV9ub3RpZiAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICpuZXd2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2lu dF9vYmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0cnVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAgaW50IGNtcDsKKwor ICBCUFBZX1NFVF9SRVFVSVJFX1ZBTElEICgmc2VsZl9maW5pc2hicC0+cHlf YnApOworCisgIGlmIChuZXd2YWx1ZSA9PSBOVUxMKQorICAgIHsKKyAgICAg IFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgXygiQ2Fubm90IGRlbGV0ZSBgb3V0X29mX3Nj b3BlX25vdGlmJyBhdHRyaWJ1dGUuIikpOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgZWxzZSBpZiAoIVB5Qm9vbF9DaGVjayAobmV3dmFsdWUpKQor ICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9y LAorICAgICAgICAgICAgICAgICAgICBfKCJUaGUgdmFsdWUgb2YgYG91dF9v Zl9zY29wZV9ub3RpZicgbXVzdCBiZSBhIGJvb2xlYW4uIikpOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICBjbXAgPSBQeU9iamVjdF9Jc1RydWUg KG5ld3ZhbHVlKTsKKyAgaWYgKGNtcCA8IDApCisgICAgcmV0dXJuIC0xOwor ICBlbHNlCisgICAgc2VsZl9maW5pc2hicC0+b3V0X29mX3Njb3BlX25vdGlm ID0gY21wOworCisgIHJldHVybiAwOworfQorCisvKiBQeXRob24gZnVuY3Rp b24gdG8gdXBkYXRlIGFuZCBnZXQgdGhlICdvdXRfb2Zfc2NvcGVfbm90aWYn CisgICBhdHRyaWJ1dGUgb2YgRmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0 YXRpYyBQeU9iamVjdCAqCiticGZpbmlzaHB5X2dldF9vdXRvZnNjb3BlX25v dGlmIChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgc3Ry dWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqc2VsZl9maW5pc2hicCA9 CisgICAgICAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBz ZWxmOworCisgIEJQUFlfUkVRVUlSRV9WQUxJRCAoJnNlbGZfZmluaXNoYnAt PnB5X2JwKTsKKworICBpZiAoc2VsZl9maW5pc2hicC0+b3V0X29mX3Njb3Bl X25vdGlmKQorICAgIFB5X1JFVFVSTl9UUlVFOworICBQeV9SRVRVUk5fRkFM U0U7Cit9CisKKy8qIFRyaWdnZXJlZCB3aGVuIEdEQiBzdG9wcyBhdCBQWV9C UC4gRGlzYWJsZSBgb3V0X29mX3Njb3BlJyBub3RpZmljYXRpb25zCisgICBh bmQsIGlmIHBvc3NpYmxlLCBjb21wdXRlcyBhbmQgY2FjaGVzIHRoZSBgcmV0 dXJuX3ZhbHVlJy4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaF9zdG9w cGVkX2F0X2ZpbmlzaF9icCAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29i amVjdCAqcHlfYnApCit7CisgIHB5X2JwLT5vdXRfb2Zfc2NvcGVfbm90aWYg PSAwOworCisgIGlmIChweV9icC0+cmV0dXJuX3R5cGUpCisgICAgeworICAg ICAgc3RydWN0IHZhbHVlICpyZXQgPSBnZXRfcmV0dXJuX3ZhbHVlIChweV9i cC0+ZnVuY3Rpb25fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHlfYnAtPnJldHVybl90eXBlKTsKKyAgICAg IGlmIChyZXQpCisgICAgICAgIHsKKyAgICAgICAgICBweV9icC0+cmV0dXJu X3ZhbHVlID0gdmFsdWVfdG9fdmFsdWVfb2JqZWN0IChyZXQpOworICAgICAg ICB9CisgICAgICBlbHNlCisgICAgICAgIHB5X2JwLT5yZXR1cm5fdmFsdWUg PSBQeV9Ob25lOworICAgIH0KK30KKworLyogUHl0aG9uIGZ1bmN0aW9uIHRv IGdldCB0aGUgJ3JldHVybl92YWx1ZScgYXR0cmlidXRlIG9mCisgICBGaW5p c2hCcmVha3BvaW50LiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JwZmlu aXNocHlfZ2V0X3JldHVybnZhbHVlIChQeU9iamVjdCAqc2VsZiwgdm9pZCAq Y2xvc3VyZSkKK3sKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVj dCAqc2VsZl9maW5pc2hicCA9CisgICAgICAoc3RydWN0IGZpbmlzaF9icmVh a3BvaW50X29iamVjdCAqKSBzZWxmOworCisgIEJQUFlfUkVRVUlSRV9WQUxJ RCAoJnNlbGZfZmluaXNoYnAtPnB5X2JwKTsKKworICBpZiAoc2VsZl9maW5p c2hicC0+cmV0dXJuX3R5cGUgPT0gTlVMTCkKKyAgICBQeV9SRVRVUk5fTk9O RTsKKworICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY2FjaGVkIHZhbHVlLiAg Ki8KKyAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpCisgICAg eworICAgICAgYnBzdGF0IGJzOworCisgICAgICBmb3IgKGJzID0gaW5mZXJp b3JfdGhyZWFkICgpLT5jb250cm9sLnN0b3BfYnBzdGF0OworICAgICAgICAg IGJzOyBicyA9IGJzLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgc3Ry dWN0IGJyZWFrcG9pbnQgKmJwID0gYnMtPmJyZWFrcG9pbnRfYXQ7CisKKyAg ICAgICAgICBpZiAoYnAgIT0gTlVMTCAmJiAoUHlPYmplY3QgKikgYnAtPnB5 X2JwX29iamVjdCA9PSBzZWxmKQorICAgICAgICAgICAgICBicGZpbmlzaF9z dG9wcGVkX2F0X2ZpbmlzaF9icCAoc2VsZl9maW5pc2hicCk7CisgICAgICAg IH0KKyAgICB9CisKKyAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFs dWUpCisgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgUHlfSU5DUkVGIChzZWxm X2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpOworICByZXR1cm4gc2VsZl9maW5p c2hicC0+cmV0dXJuX3ZhbHVlOworfQorCisvKiBDYWxsZWQgd2hlbiBHREIg bm90aWNlcyB0aGF0IHRoZSBmaW5pc2ggYnJlYWtwb2ludCBCUF9PQkogaXMg b3V0IG9mIAorICAgdGhlIGN1cnJlbnQgY2FsbHN0YWNrLiBJZiBCUF9PQkog aGFzIHRoZSBhdHRyaWJ1dGUgT1VUX09GX1NDT1BFX05PVElGCisgICBhbmQg aXRzIHZhbHVlIGlzIEZBTFNFLCB0cmlnZ2VyIHRoZSBtZXRob2QgT1VUX09G X1NDT1BFIGFuZCBzZXQgdGhlIGZsYWcKKyAgIHRvIFRSVUUuICAqLworCitz dGF0aWMgdm9pZAorYnBmaW5pc2hweV9vdXRfb2Zfc2NvcGUgKHN0cnVjdCBm aW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmJwZmluaXNoX29iaikKK3sKKyAg YnJlYWtwb2ludF9vYmplY3QgKmJwX29iaiA9IChicmVha3BvaW50X29iamVj dCAqKSBicGZpbmlzaF9vYmo7CisgIFB5T2JqZWN0ICpweV9vYmogPSAoUHlP YmplY3QgKikgYnBfb2JqOworICAKKyAgYnBmaW5pc2hfb2JqLT5vdXRfb2Zf c2NvcGVfbm90aWYgPSAwOworCisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3Ry aW5nIChweV9vYmosIG91dG9mc2NvcGVfZnVuYykpCisgICAgeworICAgICAg aWYgKCFQeU9iamVjdF9DYWxsTWV0aG9kIChweV9vYmosIG91dG9mc2NvcGVf ZnVuYywgTlVMTCkpCisgICAgICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7 CisgICAgfQorfQorCisvKiBQeXRob24gZnVuY3Rpb24gdG8gY2hlY2sgaWYg dGhlIEZpbmlzaEJyZWFrcG9pbnQgU0VMRiBpcyBub3QgYW55bW9yZQorICAg aW4gdGhlIGNhbGxzdGFjay4gVHJpZ2dlcnMgc2VsZi0+b3V0X29mX3Njb3Bl IGlmIG5lY2Vzc2FyeS4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCiticGZp bmlzaHB5X2NoZWNrX3Njb3BlIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MpCit7CisgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3Qg KnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtw b2ludF9vYmplY3QgKikgc2VsZjsKKyAgc3RydWN0IGZyYW1lX2lkIGJwX2Zy YW1lX2lkID0gc2VsZl9maW5pc2hicC0+cHlfYnAuYnAtPmZyYW1lX2lkOwor CisgIGlmIChzZWxmX2ZpbmlzaGJwLT5vdXRfb2Zfc2NvcGVfbm90aWYKKyAg ICAgICYmIChmcmFtZV9pZF9lcSAoYnBfZnJhbWVfaWQsIGdldF9mcmFtZV9p ZCAoZ2V0X2N1cnJlbnRfZnJhbWUoKSkpCisgICAgICB8fCAgZnJhbWVfZmlu ZF9ieV9pZCAoYnBfZnJhbWVfaWQpID09IE5VTEwpKQorICAgIHsKKyAgICAg IGJwZmluaXNocHlfb3V0X29mX3Njb3BlIChzZWxmX2ZpbmlzaGJwKTsKKwor ICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgfQorICBQeV9SRVRVUk5fRkFM U0U7Cit9CisKKy8qIElmIFNUT1BfQlBTVEFUIGNvbnRhaW5zIGEgUHl0aG9u IGJyZWFrcG9pbnQgd2hvc2UgdHlwZSBpcyBUWVBFLCByZXR1cm5zCisgICB0 aGlzIGJyZWFrcG9pbnQuIFJldHVybnMgTlVMTCBvdGhlcndpc2UuICAqLwor CitzdHJ1Y3QgYnJlYWtwb2ludCAqCitnZGJweV9pc19zdG9wcGVkX2F0X2Zp bmlzaF9icCAoYnBzdGF0IHN0b3BfYnBzdGF0KQoreworICBicHN0YXQgYnM7 CisKKyAgZm9yIChicyA9IHN0b3BfYnBzdGF0OyBiczsgYnMgPSBicy0+bmV4 dCkKKyAgICB7CisgICAgICBpZiAoYnMtPmJyZWFrcG9pbnRfYXQgJiYgYnMt PmJyZWFrcG9pbnRfYXQtPmlzX3B5X2ZpbmlzaF9icCkKKyAgICAgICAgcmV0 dXJuIGJzLT5icmVha3BvaW50X2F0OworICAgIH0KKworICByZXR1cm4gTlVM TDsKK30KKworLyogUHl0aG9uIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBi cmVha3BvaW50LiAgKi8KKworc3RhdGljIGludAorYnBmaW5pc2hweV9pbml0 IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICpr d2FyZ3MpCit7CisgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyAiZnJh bWUiLCAiaW50ZXJuYWwiLCBOVUxMIH07CisgIGJyZWFrcG9pbnRfb2JqZWN0 ICpzZWxmX2JwID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnBmaW5pc2gg PQorICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikg c2VsZjsKKyAgaW50IHR5cGUgPSBicF9icmVha3BvaW50OworICBQeU9iamVj dCAqZnJhbWVfb2JqID0gTlVMTDsKKyAgc3RydWN0IGZyYW1lX2luZm8gKmZy YW1lLCAqcHJldl9mcmFtZTsKKyAgc3RydWN0IGZyYW1lX2lkIGZyYW1lX2lk OworICBQeU9iamVjdCAqaW50ZXJuYWwgPSBOVUxMOworICBpbnQgaW50ZXJu YWxfYnAgPSAwOworICBDT1JFX0FERFIgZmluaXNoX3BjLCBwYzsKKyAgdm9s YXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBjaGFyICph ZGRyX3N0ciwgc21hbGxfYnVmWzEwMF07CisgIHN0cnVjdCBzeW1ib2wgKmZ1 bmN0aW9uOworCisgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jk cyAoYXJncywga3dhcmdzLCAiT3xPIiwga2V5d29yZHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lX29iaiwgJmludGVy bmFsKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKCFmcmFtZV9vYmopCisg ICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAKKyAgZnJhbWUgPSBmcmFtZV9v YmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVfb2JqKTsKKyAgaWYgKGZyYW1l ID09IE5VTEwpCisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAKKyAgcHJl dl9mcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CisgIGlmIChwcmV2 X2ZyYW1lID09IDApCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQ eUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgXygiXCJGaW5pc2hCcmVh a3BvaW50XCIgbm90IG1lYW5pbmdmdWwgaW4gdGhlIG91dGVybW9zdCBmcmFt ZS4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAKKyAgZnJhbWVf aWQgPSBnZXRfZnJhbWVfaWQgKHByZXZfZnJhbWUpOworICBpZiAoZnJhbWVf aWRfZXEgKGZyYW1lX2lkLCBudWxsX2ZyYW1lX2lkKSkKKyAgICBnb3RvIGlu dmFsaWRfZnJhbWU7CisKKyAgaWYgKGludGVybmFsKQorICAgIHsKKyAgICAg IGludGVybmFsX2JwID0gUHlPYmplY3RfSXNUcnVlIChpbnRlcm5hbCk7Cisg ICAgICBpZiAoaW50ZXJuYWxfYnAgPT0gLTEpIAorICAgICAgICB7CisgICAg ICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB2YWx1ZSBvZiBgaW50 ZXJuYWwnIG11c3QgYmUgYSBib29sZWFuLiIpKTsKKyAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogRmluZCB0aGUgZnVu Y3Rpb24gd2Ugd2lsbCByZXR1cm4gZnJvbS4gICovCisgIHNlbGZfYnBmaW5p c2gtPnJldHVybl90eXBlID0gTlVMTDsKKyAgc2VsZl9icGZpbmlzaC0+ZnVu Y3Rpb25fdHlwZSA9IE5VTEw7CisgIGlmIChnZXRfZnJhbWVfcGNfaWZfYXZh aWxhYmxlIChmcmFtZSwgJnBjKSkKKyAgICB7CisgICAgICBmdW5jdGlvbiA9 IGZpbmRfcGNfZnVuY3Rpb24gKHBjKTsKKyAgICAgIGlmIChmdW5jdGlvbiAh PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IHR5cGUgKnJl dF90eXBlID0gVFlQRV9UQVJHRVRfVFlQRSAoU1lNQk9MX1RZUEUgKGZ1bmN0 aW9uKSk7CisKKyAgICAgICAgICAvKiBSZW1lbWJlciBvbmx5IG5vbi1WT0lE IHJldHVybiB0eXBlcy4gICovCisgICAgICAgICAgaWYgKFRZUEVfQ09ERSAo cmV0X3R5cGUpICE9IFRZUEVfQ09ERV9WT0lEKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IHJl dF90eXBlOworICAgICAgICAgICAgICBzZWxmX2JwZmluaXNoLT5mdW5jdGlv bl90eXBlID0gU1lNQk9MX1RZUEUgKGZ1bmN0aW9uKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKworICBicHB5X3BlbmRpbmdfb2JqZWN0 ID0gc2VsZl9icDsKKyAgYnBweV9wZW5kaW5nX29iamVjdC0+bnVtYmVyID0g LTE7CisgIGJwcHlfcGVuZGluZ19vYmplY3QtPmJwID0gTlVMTDsKKworICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAg ICAgIC8qIFNldCBhIGJyZWFrcG9pbnQgb24gdGhlIHJldHVybiBhZGRyZXNz LiAgKi8KKyAgICAgIGZpbmlzaF9wYyA9IGdldF9mcmFtZV9wYyAocHJldl9m cmFtZSk7CisgICAgICBzcHJpbnRmIChzbWFsbF9idWYsICIqJXMiLCBoZXhf c3RyaW5nIChmaW5pc2hfcGMpKTsKKyAgICAgIGFkZHJfc3RyID0gc21hbGxf YnVmOworCisgICAgICBjcmVhdGVfYnJlYWtwb2ludCAocHl0aG9uX2dkYmFy Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9zdHIsIE5VTEws IC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgYnBfYnJlYWtwb2ludCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFV VE9fQk9PTEVBTl9UUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsIDAsIDEsIGludGVybmFsX2JwKTsKKyAgICB9CisgIGlmIChleGNlcHQu cmVhc29uIDwgMCkKKyAgICB7CisgICAgICBQeUVycl9Gb3JtYXQgKGV4Y2Vw dC5yZWFzb24gPT0gUkVUVVJOX1FVSVQKKyAgICAgICAgICAgICAgICAgICAg PyBQeUV4Y19LZXlib2FyZEludGVycnVwdCA6IFB5RXhjX1J1bnRpbWVFcnJv ciwKKyAgICAgICAgICAgICAgICAgICAgIiVzIiwgZXhjZXB0Lm1lc3NhZ2Up OworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgQlBQWV9TRVRfUkVRVUlS RV9WQUxJRCAoc2VsZl9icCk7CisgIAorICBzZWxmX2JwLT5icC0+ZnJhbWVf aWQgPSBmcmFtZV9pZDsKKyAgCisgIHNlbGZfYnBmaW5pc2gtPm91dF9vZl9z Y29wZV9ub3RpZiA9IDE7CisgIAorICByZXR1cm4gMDsKKyAgCisgaW52YWxp ZF9mcmFtZToKKyAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9y LCAKKyAgICAgICAgICAgICAgICAgICBfKCJJbnZhbGlkIElEIGZvciB0aGUg YGZyYW1lJyBvYmplY3QuIikpOworICByZXR1cm4gLTE7Cit9CisKKy8qIFJl dHVybnMgMSBpZiBPQkogaXMgbm90IE5VTEwgYW5kIHJlZmVyZW5jZXMgYSBG aW5pc2hCcmVha3BvaW50IG9iamVjdC4gICovCisKK2ludAorYnBmaW5pc2hw eV9pc19maW5pc2hfYnAgKFB5T2JqZWN0ICpvYmopCit7CisgIHJldHVybiBv YmogIT0gTlVMTAorICAgICAgICAgJiYgUHlPYmplY3RfVHlwZUNoZWNrIChv YmosICZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSk7Cit9CisKKy8q IENhbGxiYWNrIGZvciBgYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlJy4g IFRyaWdnZXJzIFB5dGhvbidzCisgICBgQi0+b3V0X29mX3Njb3BlJyBmdW5j dGlvbiBpZiBCIGlzIGEgRmluaXNoQnJlYWtwb2ludCBvdXQgb2YgaXRzCisg ICAgc2NvcGUgb3IgdHVybiBvZiBvdXRfb2Zfc2NvcGUgbm90aWZpY2F0aW9u IGlmIEIgaGFzIGJlZW4gaGl0LiAgKi8KKworc3RhdGljIGludAorYnBmaW5p c2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiIChzdHJ1Y3QgYnJlYWtwb2ludCAq Yiwgdm9pZCAqYXJncykKK3sKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwX3N0 b3BwZWQgPSAoc3RydWN0IGJyZWFrcG9pbnQgKikgYXJnczsKKyAgUHlPYmpl Y3QgKnB5X2JwID0gKFB5T2JqZWN0ICopIGItPnB5X2JwX29iamVjdDsKKyAg c3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdkYmFy Y2ggOiBnZXRfY3VycmVudF9hcmNoICgpOworICBzdHJ1Y3QgY2xlYW51cCAq Y2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVudF9s YW5ndWFnZSk7CisgIAorICAvKiBUcmlnZ2VyIG91dF9vZl9zY29wZSBpZiB0 aGlzIGlzIGEgRmluaXNoQnJlYWtwb2ludCBpdHMgZnJhbWUgaXMgbm90IGlu IHRoZQorICAgICBjdXJyZW50IGNhbGxzdGFjayBhbmQgdGhlIG5vdGlmaWNh dGlvbiBoYXMgbm90IGJlZW4gc2VudCB5ZXQuICAqLworICBpZiAoYnBmaW5p c2hweV9pc19maW5pc2hfYnAgKHB5X2JwKSkKKyAgICB7CisgICAgICBzdHJ1 Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpmaW5pc2hfYnAgPQorICAg ICAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHB5 X2JwOworCisgICAgICBpZiAoYiA9PSBicF9zdG9wcGVkKQorICAgICAgICBi cGZpbmlzaF9zdG9wcGVkX2F0X2ZpbmlzaF9icCAoZmluaXNoX2JwKTsKKyAg ICAgIGVsc2UgaWYgKGZpbmlzaF9icC0+b3V0X29mX3Njb3BlX25vdGlmCisg ICAgICAgICAgJiYgYi0+cHNwYWNlID09IGN1cnJlbnRfaW5mZXJpb3IoKS0+ cHNwYWNlCisgICAgICAgICAgJiYgKCF0YXJnZXRfaGFzX3JlZ2lzdGVycyB8 fCBmcmFtZV9maW5kX2J5X2lkKGItPmZyYW1lX2lkKSA9PSBOVUxMKSkKKyAg ICAgICAgeworICAgICAgICAgIGJwZmluaXNocHlfb3V0X29mX3Njb3BlIChm aW5pc2hfYnApOworICAgICAgICB9CisgICAgfQorICAKKyAgZG9fY2xlYW51 cHMgKGNsZWFudXApOworICAKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEF0dGFj aGVkIHRvIGBzdG9wJyBub3RpZmljYXRpb25zLCBjaGVjayBpZiB0aGUgZXhl Y3V0aW9uIGhhcyBydW4gb3V0CisgICBvdXQgb2YgdGhlIHNjb3BlIG9mIGFu eSBGaW5pc2hCcmVha3BvaW50IGJlZm9yZSBpdCBoYXMgYmVlbiBoaXQuICAq LworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfc3RvcCAoc3Ry dWN0IGJwc3RhdHMgKmJzLCBpbnQgcHJpbnRfZnJhbWUpCit7CisgIGl0ZXJh dGVfb3Zlcl9icmVha3BvaW50cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Nj b3BlX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzID09IE5V TEwgPyBOVUxMIDogYnMtPmJyZWFrcG9pbnRfYXQpOworfQorCisvKiBBdHRh Y2hlZCB0byBgZXhpdCcgbm90aWZpY2F0aW9ucywgdHJpZ2dlcnMgYWxsIHRo ZSBuZWNlc3Nhcnkgb3V0IG9mCisgICBzY29wZSBub3RpZmljYXRpb25zLiAg Ki8KKworc3RhdGljIHZvaWQKK2JwZmluaXNocHlfaGFuZGxlX2V4aXQgKHN0 cnVjdCBpbmZlcmlvciAqaW5mKQoreworICBpdGVyYXRlX292ZXJfYnJlYWtw b2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiwgTlVMTCk7 Cit9CisKKy8qIENhbGxiYWNrIHRvIHRoZSBicGZpbmlzaHB5X2hhbmRsZV9y ZXN1bWUgZnVuY3Rpb24uICAqLworCitzdGF0aWMgaW50CiticGZpbmlzaHB5 X2hhbmRsZV9yZXN1bWVfY2IgKHN0cnVjdCBicmVha3BvaW50ICpiLCB2b2lk ICphcmdzKQoreworICBpZiAoYnBmaW5pc2hweV9pc19maW5pc2hfYnAgKChQ eU9iamVjdCAqKSBiLT5weV9icF9vYmplY3QpKQorICAgIHsKKyAgICAgIHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmZpbmlzaF9icCA9Cisg ICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2lu dF9vYmplY3QgKikgYi0+cHlfYnBfb2JqZWN0OworICAgICAgUHlfWERFQ1JF RiAoZmluaXNoX2JwLT5yZXR1cm5fdmFsdWUpOworICAgICAgZmluaXNoX2Jw LT5yZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIDA7Cit9 CisKKy8qIEF0dGFjaGVkIHRvIGB0YXJnZXRfcmVzdW1lJyBub3RpZmljYXRp b25zLCByZXNldHMgdGhlIGByZXR1cm5fdmFsdWUnCisgICBjYWNoZS4gICov CisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9yZXN1bWUgKHB0 aWRfdCBwdGlkKQoreworICBpdGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJw ZmluaXNocHlfaGFuZGxlX3Jlc3VtZV9jYiwgTlVMTCk7Cit9CisKKy8qIElu aXRpYWxpemUgdGhlIFB5dGhvbiBmaW5pc2ggYnJlYWtwb2ludCBjb2RlLiAg Ki8KKwordm9pZAorZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50 cyAodm9pZCkKK3sKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJmZpbmlzaF9icmVh a3BvaW50X29iamVjdF90eXBlKSA8IDApCisgICAgICByZXR1cm47CisgIAor ICBQeV9JTkNSRUYgKCZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSk7 CisgIFB5TW9kdWxlX0FkZE9iamVjdCAoZ2RiX21vZHVsZSwgIkZpbmlzaEJy ZWFrcG9pbnQiLAorICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAq KSAmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOworICAgIAorICBv YnNlcnZlcl9hdHRhY2hfbm9ybWFsX3N0b3AgKGJwZmluaXNocHlfaGFuZGxl X3N0b3ApOworICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfZXhpdCAoYnBm aW5pc2hweV9oYW5kbGVfZXhpdCk7CisgIG9ic2VydmVyX2F0dGFjaF90YXJn ZXRfcmVzdW1lZCAoYnBmaW5pc2hweV9oYW5kbGVfcmVzdW1lKTsKK30KKwor c3RhdGljIFB5TWV0aG9kRGVmIGZpbmlzaF9icmVha3BvaW50X29iamVjdF9t ZXRob2RzW10gPSB7CisgIHsgImNoZWNrX3Njb3BlIiwgYnBmaW5pc2hweV9j aGVja19zY29wZSwgTUVUSF9OT0FSR1MsCisgICAgImNoZWNrX3Njb3BlICgp IC0+IEJvb2xlYW4uXG5cCitSZXR1cm4gdHJ1ZSBpZiBvdXRfb2Zfc2NvcGUg KCkgaGFzIGJlZW4gdHJpZ2dlcmVkLCBmYWxzZSBpZiBub3QuIiB9LAorICB7 TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlHZXRTZXRE ZWYgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldFtdID0geworICB7 ICJvdXRfb2Zfc2NvcGVfbm90aWYiLCBicGZpbmlzaHB5X2dldF9vdXRvZnNj b3BlX25vdGlmLCBicGZpbmlzaHB5X3NldF9vdXRvZnNjb3BlX25vdGlmLAor ICAgICJCb29sZWFuIHRlbGxpbmcgd2hldGhlciB0aGUgYnJlYWtwb2ludCBp cyBzdGlsbCB3aXRoaW4gdGhlIHNjb3BlIFwKK29mIHRoZSBjdXJyZW50IGNh bGxzdGFjay4iLCBOVUxMIH0sCisgIHsgInJldHVybl92YWx1ZSIsIGJwZmlu aXNocHlfZ2V0X3JldHVybnZhbHVlLCBOVUxMLAorICAiZ2RiLlZhbHVlIG9i amVjdCByZXByZXNlbnRpbmcgdGhlIHJldHVybiB2YWx1ZSwgaWYgYW55LiBc CitOb25lIG90aGVyd2lzZS4iLCBOVUxMIH0sCisgICAgeyBOVUxMIH0gIC8q IFNlbnRpbmVsLiAgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQoreworICBQeU9iamVjdF9I RUFEX0lOSVQgKE5VTEwpCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLypvYl9zaXplKi8KKyAgImdkYi5GaW5pc2hCcmVha3BvaW50Iiwg ICAgICAgICAvKnRwX25hbWUqLworICBzaXplb2YgKHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QpLCAgLyp0cF9iYXNpY3NpemUqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxv 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 eHQgKi8KKyAgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X21ldGhvZHMsICAv KiB0cF9tZXRob2RzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfbWVtYmVycyAqLworICBmaW5pc2hfYnJlYWtwb2ludF9v YmplY3RfZ2V0c2V0LC8qIHRwX2dldHNldCAqLworICAmYnJlYWtwb2ludF9v YmplY3RfdHlwZSwgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVz Y3Jfc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfZGljdG9mZnNldCAqLworICBicGZpbmlzaHB5X2luaXQsICAgICAg ICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAwICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKZGlmZiAtLWdp dCBhL2dkYi9weXRob24vcHktZnJhbWUuYyBiL2dkYi9weXRob24vcHktZnJh bWUuYwppbmRleCBkNzEyOGE5Li4yMTA5YzczIDEwMDY0NAotLS0gYS9nZGIv cHl0aG9uL3B5LWZyYW1lLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1mcmFtZS5j CkBAIC02MCw5ICs2MCwxMCBAQCBzdGF0aWMgUHlUeXBlT2JqZWN0IGZyYW1l X29iamVjdF90eXBlOwogICAgb2JqZWN0LiAgSWYgdGhlIGZyYW1lIGRvZXNu J3QgZXhpc3QgYW55bW9yZSAodGhlIGZyYW1lIGlkIGRvZXNuJ3QKICAgIGNv cnJlc3BvbmQgdG8gYW55IGZyYW1lIGluIHRoZSBpbmZlcmlvciksIHJldHVy bnMgTlVMTC4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgZnJhbWVfaW5mbyAqCi1m cmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVfb2JqZWN0ICpmcmFt ZV9vYmopCitzdHJ1Y3QgZnJhbWVfaW5mbyAqCitmcmFtZV9vYmplY3RfdG9f ZnJhbWVfaW5mbyAoUHlPYmplY3QgKm9iaikKIHsKKyAgZnJhbWVfb2JqZWN0 ICpmcmFtZV9vYmogPSAoZnJhbWVfb2JqZWN0ICopIG9iajsgIAogICBzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CiAKICAgZnJhbWUgPSBmcmFtZV9maW5k X2J5X2lkIChmcmFtZV9vYmotPmZyYW1lX2lkKTsKQEAgLTEwMyw3ICsxMDQs NyBAQCBmcmFweV9pc192YWxpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICphcmdzKQogewogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CiAKLSAg ZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoKGZyYW1lX29i amVjdCAqKSBzZWxmKTsKKyAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJh bWVfaW5mbyAoc2VsZik7CiAgIGlmIChmcmFtZSA9PSBOVUxMKQogICAgIFB5 X1JFVFVSTl9GQUxTRTsKIApAQCAtMTI0LDcgKzEyNSw3IEBAIGZyYXB5X25h bWUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJh bWUpOwogCiAgICAgICBmaW5kX2ZyYW1lX2Z1bm5hbWUgKGZyYW1lLCAmbmFt ZSwgJmxhbmcsIE5VTEwpOwogICAgIH0KQEAgLTE1Myw3ICsxNTQsNyBAQCBm cmFweV90eXBlIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICop IHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNl bGYsIGZyYW1lKTsKIAogICAgICAgdHlwZSA9IGdldF9mcmFtZV90eXBlIChm cmFtZSk7CiAgICAgfQpAQCAtMTc0LDcgKzE3NSw3IEBAIGZyYXB5X3Vud2lu ZF9zdG9wX3JlYXNvbiAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdz KQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAg ICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVj dCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElE IChzZWxmLCBmcmFtZSk7CiAgICAgfQogICBHREJfUFlfSEFORExFX0VYQ0VQ VElPTiAoZXhjZXB0KTsKIApAQCAtMTk1LDcgKzE5Niw3IEBAIGZyYXB5X3Bj IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZy YW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1l KTsKIAogICAgICAgcGMgPSBnZXRfZnJhbWVfcGMgKGZyYW1lKTsKICAgICB9 CkBAIC0yMTYsNyArMjE3LDcgQEAgZnJhcHlfYmxvY2sgKFB5T2JqZWN0ICpz ZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVf VkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogICAgICAgYmxv Y2sgPSBnZXRfZnJhbWVfYmxvY2sgKGZyYW1lLCBOVUxMKTsKICAgICB9CiAg IEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOwpAQCAtMjU3LDcg KzI1OCw3IEBAIGZyYXB5X2Z1bmN0aW9uIChQeU9iamVjdCAqc2VsZiwgUHlP YmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgo ZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgc3ltID0gZmlu ZF9wY19mdW5jdGlvbiAoZ2V0X2ZyYW1lX2FkZHJlc3NfaW5fYmxvY2sgKGZy YW1lKSk7CiAgICAgfQpAQCAtMzE5LDcgKzMyMCw3IEBAIGZyYXB5X29sZGVy IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZy YW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1l KTsKIAogICAgICAgcHJldiA9IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CiAg ICAgICBpZiAocHJldikKQEAgLTM0OCw3ICszNDksNyBAQCBmcmFweV9uZXdl ciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBm cmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFt ZSk7CiAKICAgICAgIG5leHQgPSBnZXRfbmV4dF9mcmFtZSAoZnJhbWUpOwog ICAgICAgaWYgKG5leHQpCkBAIC0zNzcsNyArMzc4LDcgQEAgZnJhcHlfZmlu ZF9zYWwgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2Vs ZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwg ZnJhbWUpOwogCiAgICAgICBmaW5kX2ZyYW1lX3NhbCAoZnJhbWUsICZzYWwp OwogICAgICAgc2FsX29iaiA9IHN5bXRhYl9hbmRfbGluZV90b19zYWxfb2Jq ZWN0IChzYWwpOwpAQCAtNDMzLDcgKzQzNCw3IEBAIGZyYXB5X3JlYWRfdmFy IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgICAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAJewotCSAgRlJB UFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFt ZSk7CisJICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAK IAkgIGlmICghYmxvY2spCiAJICAgIGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2Nr IChmcmFtZSwgTlVMTCk7CkBAIC00NjEsNyArNDYyLDcgQEAgZnJhcHlfcmVh ZF92YXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2Vs ZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwg ZnJhbWUpOwogCiAgICAgICB2YWwgPSByZWFkX3Zhcl92YWx1ZSAodmFyLCBm cmFtZSk7CiAgICAgfQpAQCAtNDg0LDEyICs0ODUsMTEgQEAgc3RhdGljIFB5 T2JqZWN0ICoKIGZyYXB5X3NlbGVjdCAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQogewogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZmk7Ci0gIGZy YW1lX29iamVjdCAqZnJhbWUgPSAoZnJhbWVfb2JqZWN0ICopIHNlbGY7CiAg IHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKIAogICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKGZyYW1lLCBmaSk7CisgICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmaSk7CiAKICAgICAgIHNlbGVj dF9mcmFtZSAoZmkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2dkYi9weXRob24v cHl0aG9uLWludGVybmFsLmggYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oCmluZGV4IGQzY2I3ODguLmU0MDRhMzIgMTAwNjQ0Ci0tLSBhL2dkYi9w eXRob24vcHl0aG9uLWludGVybmFsLmgKKysrIGIvZ2RiL3B5dGhvbi9weXRo b24taW50ZXJuYWwuaApAQCAtMTE0LDkgKzExNCw0NyBAQCBleHRlcm4gUHlU eXBlT2JqZWN0IHN5bWJvbF9vYmplY3RfdHlwZTsKIGV4dGVybiBQeVR5cGVP YmplY3QgZXZlbnRfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0 IGV2ZW50c19vYmplY3RfdHlwZTsKIGV4dGVybiBQeVR5cGVPYmplY3Qgc3Rv cF9ldmVudF9vYmplY3RfdHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgYnJl YWtwb2ludF9vYmplY3RfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgYnJlYWtw b2ludF9vYmplY3QKK3sKKyAgUHlPYmplY3RfSEVBRAorCisgIC8qIFRoZSBi cmVha3BvaW50IG51bWJlciBhY2NvcmRpbmcgdG8gZ2RiLiAgKi8KKyAgaW50 IG51bWJlcjsKKworICAvKiBUaGUgZ2RiIGJyZWFrcG9pbnQgb2JqZWN0LCBv ciBOVUxMIGlmIHRoZSBicmVha3BvaW50IGhhcyBiZWVuCisgICAgIGRlbGV0 ZWQuICAqLworICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnA7Cit9IGJyZWFrcG9p bnRfb2JqZWN0OworCisvKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBh IHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCisgICBleGNl cHRpb24gaWYgaXQgaXMgaW52YWxpZC4gICovCisjZGVmaW5lIEJQUFlfUkVR VUlSRV9WQUxJRChCcmVha3BvaW50KSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBQ eUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o IkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgICAgICAgICAgICBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCcmVha3BvaW50KS0+bnVt YmVyKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkK KworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVh a3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAgZXhjZXB0aW9uIGlmIGl0 IGlzIGludmFsaWQuICBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gc2V0dGVy IGZ1bmN0aW9ucy4gICovCisjZGVmaW5lIEJQUFlfU0VUX1JFUVVJUkVfVkFM SUQoQnJlYWtwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoKEJy ZWFrcG9pbnQpLT5icCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3Is IF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgXAorICAgICAgICAg ICAgICAgICAgICAgICAgKEJyZWFrcG9pbnQpLT5udW1iZXIpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJldHVybiAtMTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp bGUgKDApCisKKworLyogVmFyaWFibGVzIHVzZWQgdG8gcGFzcyBpbmZvcm1h dGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50CisgICBjb25zdHJ1Y3RvciBh bmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29rIGZ1bmN0aW9uLiAgKi8K K2V4dGVybiBicmVha3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVj dDsKIAotLyogRGVmaW5lZCBpbiBweS1icmVha3BvaW50LmMgKi8KLXR5cGVk ZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0 OwogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMTYxLDYgKzE5OSw3IEBAIFB5 T2JqZWN0ICpibG9ja190b19ibG9ja19vYmplY3QgKHN0cnVjdCBibG9jayAq YmxvY2ssIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKIFB5T2JqZWN0ICp2 YWx1ZV90b192YWx1ZV9vYmplY3QgKHN0cnVjdCB2YWx1ZSAqdik7CiBQeU9i amVjdCAqdHlwZV90b190eXBlX29iamVjdCAoc3RydWN0IHR5cGUgKik7CiBQ eU9iamVjdCAqZnJhbWVfaW5mb190b19mcmFtZV9vYmplY3QgKHN0cnVjdCBm cmFtZV9pbmZvICpmcmFtZSk7CitzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWVf b2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpmcmFtZV9vYmopOwog CiBQeU9iamVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBw cm9ncmFtX3NwYWNlICopOwogUHlPYmplY3QgKnBzcHlfZ2V0X3ByaW50ZXJz IChQeU9iamVjdCAqLCB2b2lkICopOwpAQCAtMTgxLDYgKzIyMCw4IEBAIHN0 cnVjdCB0eXBlICp0eXBlX29iamVjdF90b190eXBlIChQeU9iamVjdCAqb2Jq KTsKIHN0cnVjdCBzeW10YWIgKnN5bXRhYl9vYmplY3RfdG9fc3ltdGFiIChQ eU9iamVjdCAqb2JqKTsKIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgKnNhbF9v YmplY3RfdG9fc3ltdGFiX2FuZF9saW5lIChQeU9iamVjdCAqb2JqKTsKIAor aW50IGJwZmluaXNocHlfaXNfZmluaXNoX2JwIChQeU9iamVjdCAqb2JqKTsK Kwogdm9pZCBnZGJweV9pbml0aWFsaXplX2F1dG9fbG9hZCAodm9pZCk7CiB2 b2lkIGdkYnB5X2luaXRpYWxpemVfdmFsdWVzICh2b2lkKTsKIHZvaWQgZ2Ri cHlfaW5pdGlhbGl6ZV9mcmFtZXMgKHZvaWQpOwpAQCAtMTk0LDYgKzIzNSw3 IEBAIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9mdW5jdGlvbnMgKHZvaWQpOwog dm9pZCBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAodm9pZCk7CiB2b2lkIGdk YnB5X2luaXRpYWxpemVfb2JqZmlsZSAodm9pZCk7CiB2b2lkIGdkYnB5X2lu aXRpYWxpemVfYnJlYWtwb2ludHMgKHZvaWQpOwordm9pZCBnZGJweV9pbml0 aWFsaXplX2ZpbmlzaGJyZWFrcG9pbnRzICh2b2lkKTsKIHZvaWQgZ2RicHlf aW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAodm9pZCk7CiB2b2lkIGdkYnB5X2lu aXRpYWxpemVfcGFyYW1ldGVycyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRp YWxpemVfdGhyZWFkICh2b2lkKTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24v cHl0aG9uLmMgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IDhhN2JjNjYu LmUyNDcyZmMgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysr IGIvZ2RiL3B5dGhvbi9weXRob24uYwpAQCAtOTI2LDYgKzkyNiwxMSBAQCBn ZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2lu dF9vYmplY3QgKmJwX29iaikKIAkJICAgICJzY3JpcHRpbmcgaXMgbm90IHN1 cHBvcnRlZC4iKSk7CiB9CiAKK3N0cnVjdCBicmVha3BvaW50ICoKK2dkYnB5 X2lzX3N0b3BwZWRfYXRfZmluaXNoX2JwIChicHN0YXQgc3RvcF9icHN0YXQp Cit7CisgIHJldHVybiBOVUxMOworfQogI2VuZGlmIC8qIEhBVkVfUFlUSE9O ICovCiAKIAwKQEAgLTEwNjAsNiArMTA2NSw3IEBAIEVuYWJsZXMgb3IgZGlz YWJsZXMgcHJpbnRpbmcgb2YgUHl0aG9uIHN0YWNrIHRyYWNlcy4iKSwKICAg Z2RicHlfaW5pdGlhbGl6ZV9wc3BhY2UgKCk7CiAgIGdkYnB5X2luaXRpYWxp emVfb2JqZmlsZSAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9icmVha3BvaW50 cyAoKTsKKyAgZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAo KTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAoKTsKICAgZ2Ri cHlfaW5pdGlhbGl6ZV90aHJlYWQgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVf aW5mZXJpb3IgKCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5o IGIvZ2RiL3B5dGhvbi9weXRob24uaAppbmRleCBjZTBlYjM1Li5lMzQxZDc2 IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5oCisrKyBiL2dkYi9w eXRob24vcHl0aG9uLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgR0RC X1BZVEhPTl9ICiAKICNpbmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgImJy ZWFrcG9pbnQuaCIKIAogc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0OwogCkBA IC00Nyw0ICs0OCw1IEBAIGludCBnZGJweV9zaG91bGRfc3RvcCAoc3RydWN0 IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwogCiBpbnQgZ2RicHlfYnJl YWtwb2ludF9oYXNfcHlfY29uZCAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0 ICpicF9vYmopOwogCitzdHJ1Y3QgYnJlYWtwb2ludCAqZ2RicHlfaXNfc3Rv cHBlZF9hdF9maW5pc2hfYnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCk7CiAjZW5k aWYgLyogR0RCX1BZVEhPTl9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAKaW5kZXggZjBhODNm MS4uODc1NTg4OCAxMDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWJyZWFrcG9pbnQuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1icmVha3BvaW50LmV4cApAQCAtNDQsNyArNDQsOCBAQCBn ZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRob24gYmxpc3QgPSBnZGIuYnJl YWtwb2ludHMoKSIgIkdldCBCcmVha3BvaW50IExpc3QiCiBnZGJfdGVzdCAi cHl0aG9uIHByaW50IGJsaXN0XFswXF0iICI8Z2RiLkJyZWFrcG9pbnQgb2Jq ZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIKIGdkYl90ZXN0ICJw eXRob24gcHJpbnQgYmxpc3RcWzBcXS5sb2NhdGlvbiIgIm1haW4uIiAiQ2hl Y2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKIAotZ2RiX2JyZWFrcG9pbnQgW2dk Yl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitzZXQg bXVsdF9saW5lIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0 aXBseS4iXQorZ2RiX2JyZWFrcG9pbnQgJHttdWx0X2xpbmV9CiBnZGJfY29u dGludWVfdG9fYnJlYWtwb2ludCAiQnJlYWsgYXQgbXVsdGlwbHkuIgogCiAj IENoZWNrIHRoYXQgdGhlIFB5dGhvbiBicmVha3BvaW50IGNvZGUgbm90ZWQg dGhlIGFkZGl0aW9uIG9mIGEKQEAgLTU0LDcgKzU1LDkgQEAgZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBsZW4oYmxpc3QpIiAiMiIgIkNoZWNrIGZvciB0d28g YnJlYWtwb2ludHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsw XF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sg b2JqIGV4aXN0cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBc XS5sb2NhdGlvbiIgIm1haW4uIiAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlv biIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXSIgIjxnZGIu QnJlYWtwb2ludCBvYmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3Rz IgotZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0aW9u IiAicHktYnJlYWtwb2ludFwuYzo0MSoiICJDaGVjayBicmVha3BvaW50IGxv Y2F0aW9uIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0u bG9jYXRpb24iICJweS1icmVha3BvaW50XC5jOiR7bXVsdF9saW5lfSoiIFwK KyAgICAgICAgICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogCiAjIENo ZWNrIGhpdCBhbmQgaWdub3JlIGNvdW50cy4gCiBnZGJfdGVzdCAicHl0aG9u IHByaW50IGJsaXN0XFsxXF0uaGl0X2NvdW50IiAiMSIgIkNoZWNrIGJyZWFr cG9pbnQgaGl0IGNvdW50IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcwOGUzCi0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmMKQEAgLTAsMCArMSw5NyBAQAorLyogVGhpcyB0ZXN0 Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAg Q29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSA8 c2V0am1wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5p c3RkLmg+CisKK2ludCBpbmNyZWFzZV8xIChpbnQgKmEpCit7CisgICphICs9 IDE7CisgIHJldHVybiAtNTsKK30KKwordm9pZCBpbmNyZWFzZSAoaW50ICph KQoreworICBpbmNyZWFzZV8xIChhKTsKK30KKworaW50Cit0ZXN0XzEgKGlu dCBpLCBpbnQgaikKK3sKKyAgcmV0dXJuIGkgPT0gajsKK30KKworaW50Cit0 ZXN0KGludCBpLCBpbnQgaikKK3sKKyAgcmV0dXJuIHRlc3RfMSAoaSwgaik7 Cit9CisKK2ludAorY2FsbF9sb25nam1wXzEgKGptcF9idWYgKmJ1ZikKK3sK KyAgbG9uZ2ptcCAoKmJ1ZiwgMSk7Cit9CisKK2ludAorY2FsbF9sb25nam1w IChqbXBfYnVmICpidWYpCit7CisgIGNhbGxfbG9uZ2ptcF8xIChidWYpOwor fQorCit2b2lkCit0ZXN0X2V4ZWNfZXhpdChpbnQgZG9fZXhpdCkKK3sKKyAg aWYgKGRvX2V4aXQpCisgICAgZXhpdCgwKTsKKyAgZWxzZQorICAgIGV4ZWNs ICgiL2Jpbi9lY2hvIiwgImVjaG8iLCAiLTEiLCAoY2hhciAqKTApOworfQor CitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgam1w X2J1ZiBlbnY7CisgIGludCBmb28gPSA1OworICBpbnQgYmFyID0gNDI7Cisg IGludCBpLCBqOworCisgIGdldHBpZCgpOworCisgIGkgPSAwOworICAvKiBC cmVhayBhdCBpbmNyZWFzZS4gKi8KKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5j cmVhc2UgKCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsKKworICBmb3IgKGkgPSAw OyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICBqICs9IDE7IC8qIENvbmRp dGlvbiBCcmVhay4gKi8KKyAgICB9CisKKyAgaWYgKHNldGptcCAoZW52KSA9 PSAwKSAvKiBsb25nam1wIGNhdWdodCAqLworICAgIHsKKyAgICAgIGNhbGxf bG9uZ2ptcCAoJmVudik7CisgICAgfQorICBlbHNlCisgICAgaiArPSAxOyAv KiBhZnRlciBsb25nam1wLiAqLworCisgIHRlc3RfZXhlY19leGl0KDEpOwor CisgIHJldHVybiBqOyAvKiBCcmVhayBhdCBlbmQuICovCit9CmRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4yMzdlOTZhCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4cApAQCAt MCwwICsxLDI1OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisj IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQg dGVzdHMgdGhlIG1lY2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0 aG9uLgorCitpZiAkdHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRy YWNlbGV2ZWwKK30KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0 IHRlc3RmaWxlICJweS1maW5pc2gtYnJlYWtwb2ludCIKK3NldCBzcmNmaWxl ICR7dGVzdGZpbGV9LmMKKworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAk e3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7Cisg ICAgcmV0dXJuIC0xCit9CisKK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3Jl bW90ZV9kb3dubG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0 ZmlsZX0ucHldCisKKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2Ny aXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVz dHNdIH0geyBjb250aW51ZSB9CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3Bv aW50IGluIG5vcm1hbCBjb25kaXRpb25zCisjCisKK2NsZWFuX3Jlc3RhcnQg JHt0ZXN0ZmlsZX0KKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBm YWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9Citn ZGJfdGVzdF9ub19vdXRwdXQgInNldCBjb25maXJtIG9mZiIgImRpc2FibGUg Y29uZmlybWF0aW9uIgorZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhv bl9maWxlIiAiLipQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAg ICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCitnZGJfYnJlYWtwb2ludCAi aW5jcmVhc2VfMSIKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4qQnJlYWtwb2lu dCAuKmF0LioiICJjb250aW51ZSB0byBmdW5jdGlvbiB0byBmaW5pc2giCisK KyMgc2V0IEZpbmlzaEJyZWFrcG9pbnQKKworZ2RiX3Rlc3QgInB5dGhvbiBm aW5pc2hicCA9IE15RmluaXNoQnJlYWtwb2ludCAoZ2RiLnBhcnNlX2FuZF9l dmFsIChcImFcIiksIGdkYi5zZWxlY3RlZF9mcmFtZSAoKSkiIFwKKyAgICAg ICAgICIuKkJyZWFrcG9pbnQgMy4qIiAic2V0IEZpbmlzaEJyZWFrcG9pbnQi CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwLm91dF9vZl9zY29w ZV9ub3RpZiIgIi4qVHJ1ZS4qIiBcCisgICAgICAgICAiY2hlY2sgb3V0X29m X3Njb3BlX25vdGlmIGF0IGluaXQiCitnZGJfdGVzdCAicHl0aG9uIHByaW50 IGZpbmlzaGJwLnJldHVybl92YWx1ZSIgIi4qTm9uZS4qIiBcCisgICAgICAg ICAiY2hlY2sgcmV0dXJuX3ZhbHVlIGF0IGluaXQiCisKKyMgY2hlY2sgbm9y bWFsIGJwIGhpdAorCitnZGJfdGVzdCAiY29udGludWUiICIuKk15RmluaXNo QnJlYWtwb2ludCBzdG9wIHdpdGguKiMwLippbmNyZWFzZS4qIiBcCisgICAg ICAgICAiY2hlY2sgTXlGaW5pc2hCcmVha3BvaW50IGhpdCIKK2dkYl90ZXN0 ICJweXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJuX3ZhbHVlIiAiLiotNS4q IiAiY2hlY2sgcmV0dXJuX3ZhbHVlIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBmaW5pc2hicC5vdXRfb2Zfc2NvcGVfbm90aWYiICIuKkZhbHNlLioiIFwK KyAgICAgICAgICJjaGVjayBvdXRfb2Zfc2NvcGVfbm90aWYgZGlzYWJsZWQg YWZ0ZXIgaGl0IgorZ2RiX3Rlc3QgImZpbmlzaCIgIi4qbWFpbi4qIiAicmV0 dXJuIHRvIG1haW4oKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNo YnAucmV0dXJuX3ZhbHVlIiAiLipOb25lLioiICJjaGVjayByZXR1cm5fdmFs dWUiCisKKyMgY2hlY2sgZm9yY2VkIHJldHVybiAvIGNoZWNrX3Njb3BlKCkK KworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gZmluaXNoYnAub3V0X29m X3Njb3BlX25vdGlmID0gVHJ1ZSIgXAorICAgICAgICAgInJlLWVuYWJsZSBv dXRfb2Zfc2NvcGVfbm90aWYiCisKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4q QnJlYWtwb2ludC4qYXQuKiIgImNvbnRpbnVlIHRvIGZ1bmN0aW9uIHRvIGZp bmlzaCIKK2dkYl90ZXN0ICJ1cCIgIi4qaW5jcmVhc2VfMS4qIiAiZ28gb25l IGZyYW1lIHVwIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJyZXR1cm4iICJyZXR1 cm4gZnJvbSB0aGUgZnJhbWUiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZp bmlzaGJwLmNoZWNrX3Njb3BlKCkiICIuKk15RmluaXNoQnJlYWtwb2ludCBv dXQgb2Ygc2NvcGUuKlRydWUuKiIgXAorICAgICAgICAgImNoZWNrX3Njb3Bl IG9mIGZpbmlzaEJyZWFrcG9pbnQiCisKKyMgY2hlY2sgZm9yY2VkIHJldHVy biAvIG91dF9vZl9zY29wZSBhdXRvbWF0aWMgbm90aWZpY2F0aW9uCisKK2dk Yl90ZXN0X25vX291dHB1dCAicHl0aG9uIGZpbmlzaGJwLm91dF9vZl9zY29w ZV9ub3RpZiA9IFRydWUiIFwKKyAgICAgICAgICJyZS1lbmFibGUgb3V0X29m X3Njb3BlX25vdGlmIgorCitnZGJfdGVzdCAiY29udGludWUiICIuKkJyZWFr cG9pbnQuKmF0LioiICJjb250aW51ZSB0byBmdW5jdGlvbiB0byBmaW5pc2gi CitnZGJfdGVzdCAidXAiICIuKmluY3JlYXNlXzEuKiIgImdvIG9uZSBmcmFt ZSB1cCIKK2dkYl90ZXN0X25vX291dHB1dCAicmV0dXJuIiAicmV0dXJuIGZy b20gdGhlIGZyYW1lIgorZ2RiX3Rlc3QgIm5leHQiICIuKk15RmluaXNoQnJl YWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNoZWNrIEZpbmlzaCBicmVha3Bv aW50IGRpc2NhcmQiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJw Lm91dF9vZl9zY29wZV9ub3RpZiIgIi4qRmFsc2UuKiIgImNoZWNrIG91dF9v Zl9zY29wZV9ub3RpZiIKKworIyBjaGVjayBGaW5pc2hCcmVha3BvaW50IGlu IG1haW4KKworZ2RiX3Rlc3QgInB5dGhvbiBNeUZpbmlzaEJyZWFrcG9pbnQg KE5vbmUsIGdkYi5zZWxlY3RlZF9mcmFtZSAoKSkiIFwKKyAgICAgICAgICIu KlZhbHVlRXJyb3I6IFwiRmluaXNoQnJlYWtwb2ludFwiIG5vdCBtZWFuaW5n ZnVsIGluIHRoZSBvdXRlcm1vc3QgZnJhbWUuLioiIFwKKyAgICAgICAgICJj aGVjayBGaW5pc2hCUCBub3QgYWxsb3dlZCBpbiBtYWluIgorCisKKyMKKyMg VGVzdCBGaW5pc2hCcmVha3BvaW50IHdpdGggbm8gZGVidWcgc3ltYm9sIAor IworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJz b3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIi4qUHl0aG9uIHNjcmlwdCBp bXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRz IgorCitpZiAhW3J1bnRvICJnZXRwaWQiXSB0aGVuIHsKKyAgICBmYWlsICJD YW5ub3QgcnVuIHRvIGdldHBpZC4iCisgICAgcmV0dXJuIDAKK30KKworZ2Ri X3Rlc3QgInB5dGhvbiBmaW5pc2hCUCA9IFNpbXBsZUZpbmlzaEJyZWFrcG9p bnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgXAorICAgICAgICAgIlNpbXBsZUZp bmlzaEJyZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBmaW5pc2gg YnJlYWtwb2ludCIKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4qU2ltcGxlRmlu aXNoQnJlYWtwb2ludCBzdG9wLioiICJjaGVjayBGaW5pc2hCcmVha3BvaW50 IGhpdCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoQlAucmV0dXJu X3ZhbHVlIiAiTm9uZSIgImNoZWNrIHJldHVybiB2YWx1ZSB3aXRob3V0IGRl YnVnIHN5bWJvbCIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4g ZnVuY3Rpb24gcmV0dXJuZWQgYnkgbG9uZ2ptcCAKKyMKKworY2xlYW5fcmVz dGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVf cHl0aG9uX2ZpbGUiICIuKlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAor ICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworaWYgIVtydW50 byBjYWxsX2xvbmdqbXBfMV0gdGhlbiB7CisgICAgcGVycm9yICJjb3VsZG4n dCBydW4gdG8gYnJlYWtwb2ludCBjYWxsX2xvbmdqbXAiCisgICAgY29udGlu dWUKK30KKworZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hCUCA9IFNpbXBsZUZp bmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgXAorICAgICAg ICAgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAg InNldCBmaW5pc2ggYnJlYWtwb2ludCIgCitnZGJfdGVzdCAiYnJlYWsgW2dk Yl9nZXRfbGluZV9udW1iZXIgImFmdGVyIGxvbmdqbXAuIl0iICJCcmVha3Bv aW50LiogYXQgLioiIFwKKyAgICAgICAgICJzZXQgQlAgYWZ0ZXIgdGhlIGp1 bXAiCitnZGJfdGVzdCAiY29udGludWUiICIuKlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgb3V0IG9mIHNjb3BlLioiIFwKKyAgICAgICAgICJjaGVjayBGaW5p c2hCUCBvdXQgb2Ygc2NvcGUgbm90aWZpY2F0aW9uIgorCisjCisjIFRlc3Qg RmluaXNoQnJlYWtwb2ludCBpbiBCUCBjb25kaXRpb24gZXZhbHVhdGlvbiAK KyMgKGZpbmlzaCBpbiBkdW1teSBmcmFtZSkKKyMKKworY2xlYW5fcmVzdGFy dCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0 aG9uX2ZpbGUiICIuKlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAg ICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworc2V0IGNvbmRfbGlu ZSBbZ2RiX2dldF9saW5lX251bWJlciAiQ29uZGl0aW9uIEJyZWFrLiJdCitp ZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKyAgICAgICAgIAorZ2RiX3Rl c3QgImJyZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0XzEoaSw4KSIgIi4qQnJl YWtwb2ludCAuKiBhdCAuKiIgInNldCBjb25kaXRpb25hbCBCUCIKK2dkYl90 ZXN0ICJweXRob24gVGVzdEJyZWFrcG9pbnQoKSIgIlRlc3RCcmVha3BvaW50 IGluaXQiICJzZXQgQlAgaW4gY29uZGl0aW9uIgorCitzZXQgbXNnICJjaGVj ayBGaW5pc2hCcmVha3BvaW50IGRvbid0IHN0b3AgaW4gR0RCIER1bW15IEZy YW1lIgorZ2RiX3Rlc3RfbXVsdGlwbGUgImNvbnRpbnVlIiAkbXNnIHsKKwkt cmUgIi4qdGVzdCBkb24ndCBzdG9wIDIuKnRlc3Qgc3RvcC4qdGVzdCBkb24n dCBzdG9wIDQuKiIgeworCQlwYXNzICRtc2cKKwl9CisJLXJlICIuKnRlc3Qg ZG9uJ3Qgc3RvcCAyLip0ZXN0IHN0b3AuKiRnZGJfcHJvbXB0IiB7CisJCWZh aWwgJG1zZworCX0KK30KKworZ2RiX3Rlc3QgInByaW50IGkiICI4IiAiY2hl Y2sgc3RvcHBlZCBsb2NhdGlvbiIKKworIworIyBUZXN0IEZpbmlzaEJyZWFr cG9pbnQgaW4gQlAgY29uZGl0aW9uIGV2YWx1YXRpb24gCisjIChmaW5pc2gg aW4gbm9ybWFsIGZyYW1lKQorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZp bGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIg Ii4qUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1w b3J0IHB5dGhvbiBzY3JpcHRzIgorCitpZiAhW3J1bnRvX21haW5dIHRoZW4g eworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJu IDAKK30KKworZ2RiX3Rlc3QgImJyZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0 KGksOCkiICIuKkJyZWFrcG9pbnQgLiogYXQgLioiICJzZXQgY29uZGl0aW9u YWwgQlAiCitnZGJfdGVzdCAicHl0aG9uIFRlc3RCcmVha3BvaW50KCkiICJU ZXN0QnJlYWtwb2ludCBpbml0IiAic2V0IEJQIGluIGNvbmRpdGlvbiIKKwor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiLip0ZXN0IGRvbid0IHN0b3AgMS4qdGVz dCBkb24ndCBzdG9wIDIuKnRlc3Qgc3RvcC4qRXJyb3IgaW4gdGVzdGluZyBi cmVha3BvaW50IGNvbmRpdGlvbi4qVGhlIHByb2dyYW0gYmVpbmcgZGVidWdn ZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdE Qi4qIiBcCisgICAgICAgICAic3RvcCBpbiBjb25kaXRpb24gZnVuY3Rpb24i CisgICAgICAgICAKK3NldHVwX2tmYWlsICJCcmVha3BvaW50LnN0b3AoKSBk b2VzJ3Qgc3RvcCBpbiBHREIgZHVtbXkgZnJhbWUiICotKi0qCitnZGJfdGVz dCAicHl0aG9uIHByaW50IHRlc3RfZmluaXNoX2JwLm91dF9vZl9zY29wZV9u b3RpZiIgIi4qRmFsc2UuKiIgImNoZWNrIG91dF9vZl9zY29wZSBub3RpZmlj YXRpb24gZGlzYWJsZWQiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiB0 ZXN0X2ZpbmlzaF9icC5vdXRfb2Zfc2NvcGVfbm90aWYgPSBGYWxzZSIgInJl ZXN0YWJsaXNoIGNvcnJlY3QgdmFsdWUiCisKK2dkYl90ZXN0ICJjb250aW51 ZSIgIkNvbnRpbnVpbmcuKiIgImZpbmlzaCBjb25kaXRpb24gZXZhbHVhdGlv biIKK2dkYl90ZXN0ICJjb250aW51ZSIgIkJyZWFrcG9pbnQuKiIgInN0b3Ag YXQgY29uZGl0aW9uYWwgYnJlYWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBp IiAiOCIgImNoZWNrIHN0b3BwZWQgbG9jYXRpb24iCisKKyMKKyMgVGVzdCBG aW5pc2hCcmVha3BvaW50IGluIGV4cGxpY2l0IGluZmVyaW9yIGZ1bmN0aW9u IGNhbGwKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJf dGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICIuKlB5dGhvbiBz Y3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24g c2NyaXB0cyIKKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWls ICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisKK2dk Yl90ZXN0ICJweXRob24gVGVzdEV4cGxpY2l0QnJlYWtwb2ludChcImluY3Jl YXNlXzFcIikiICJCcmVha3BvaW50LiphdC4qIiBcCisgICAgICAgICAicHJl cGFyZSBUZXN0RXhwbGljaXRCcmVha3BvaW50IgoraWYge1tnZGJfdGVzdCAi cHJpbnQgaW5jcmVhc2VfMSgmaSkiIFwKKyAgICAgICAgICIuKlNpbXBsZUZp bmlzaEJyZWFrcG9pbnQgaW5pdC4qU2ltcGxlRmluaXNoQnJlYWtwb2ludCBz dG9wLipcXFwkMSA9IC01LioiIFwKKyAgICAgICAgICJkb24ndCBzdG9wIGF0 IEZpbmlzaEJyZWFrcG9pbnQiXSA9PSAwfSB0aGVuIHsKKwlzZXR1cF9rZmFp bCAiQnJlYWtwb2ludC5zdG9wKCkgZG9lcyd0IHN0b3AgaW4gR0RCIGR1bW15 IGZyYW1lIiAqLSotKgorCWZhaWwgIkZpbmlzaEJyZWFrcG9pbnQgc3RvcCBp biBkdW1teSBmcmFtZSIgCit9CisKK2RlbGV0ZV9icmVha3BvaW50cworZ2Ri X3Rlc3QgInB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50KFwiaW5jcmVh c2VfMVwiKSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAgICJwcmVw YXJlIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQg aW5jcmVhc2UoJmkpIiBcCisgICAgICAgICAiLipTaW1wbGVGaW5pc2hCcmVh a3BvaW50IGluaXQuKlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgc3RvcC4qVGhl IHByb2dyYW0gYmVpbmcgZGVidWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1 bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi4qIiBcCisgICAgICAgICAiRmluaXNo QlAgc3RvcCBhdCBkdXJpbmcgZXhwbGljaXQgZnVuY3Rpb24gY2FsbCIKKwor IworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZlcmlvciBleGl0 cworIworCitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJdIHRoZW4gewor ICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4aXQuIgorICAg IHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJweXRob24gU2ltcGxlRmluaXNo QnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2ltcGxlRmluaXNo QnJlYWtwb2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGl0 KCkiCitnZGJfdGVzdCAiY29udGludWUiICIuKlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgb3V0IG9mIHNjb3BlLioiICJjYXRjaCBvdXQgb2Ygc2NvcGUgYWZ0 ZXIgZXhpdCIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBp bmZlcmlvciBleGVjcworIworCitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhp dCJdIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVj X2V4aXQuIgorICAgIHJldHVybiAwCit9ICAgICAKKworZ2RiX3Rlc3Rfbm9f b3V0cHV0ICJzZXQgdmFyIGRvX2V4aXQgPSAwIiAic3dpdGNoIHRvIGV4ZWN2 ZSgpIHRlc3QiCitnZGJfdGVzdCAicHl0aG9uIFNpbXBsZUZpbmlzaEJyZWFr cG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgIlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgaW5pdCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhlYyIKK2dk Yl90ZXN0ICJjYXRjaCBleGVjIiAiLipDYXRjaHBvaW50LipcKGV4ZWNcKS4q IiAiY2F0Y2ggZXhlYyIKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4qU2ltcGxl RmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91dCBv ZiBzY29wZSBhZnRlciBleGVjIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1m aW5pc2gtYnJlYWtwb2ludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42ZjQxYjVmCi0tLSAvZGV2L251bGwKKysrIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 LnB5CkBAIC0wLDAgKzEsODQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRl LiAgSXQgdGVzdHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4KKwkJ CitjbGFzcyBNeUZpbmlzaEJyZWFrcG9pbnQoZ2RiLkZpbmlzaEJyZWFrcG9p bnQpOgorCWRlZiBfX2luaXRfXyhzZWxmLCB2YWwsIGZyYW1lKToKKwkJZ2Ri LkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lKQorCQlw cmludCAiTXlGaW5pc2hCcmVha3BvaW50IGluaXQiCisJCXNlbGYudmFsID0g dmFsCisJCQorCWRlZiBzdG9wKHNlbGYpOgorCQlwcmludCAiTXlGaW5pc2hC cmVha3BvaW50IHN0b3Agd2l0aCAlZCIgJSBpbnQoc2VsZi52YWwuZGVyZWZl cmVuY2UoKSkKKwkJZ2RiLmV4ZWN1dGUoIndoZXJlIDEiKQorCQlyZXR1cm4g VHJ1ZQorCQorCWRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisJCXByaW50ICJN eUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLi4uIgorCit0ZXN0X2Zp bmlzaF9icCA9IE5vbmUgCitjbGFzcyBUZXN0QnJlYWtwb2ludChnZGIuQnJl YWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBn ZGIuQnJlYWtwb2ludC5fX2luaXRfXyhzZWxmLCBzcGVjPSJ0ZXN0XzEiLCBp bnRlcm5hbD0xKQorICAgICAgICBzZWxmLnNpbGVudCA9IFRydWUKKyAgICAg ICAgc2VsZi5maW5pc2ggPSBOb25lCisgICAgICAgIHByaW50ICJUZXN0QnJl YWtwb2ludCBpbml0IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToK KyAgICAJZ2xvYmFsIHRlc3RfZmluaXNoX2JwCisgICAgICAgIGlmIChzZWxm LmZpbmlzaCA9PSBOb25lKToKKyAgICAgICAgICAgIHNlbGYuZmluaXNoID0g VGVzdEZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKQorICAg ICAgICAgICAgdGVzdF9maW5pc2hfYnAgPSBzZWxmLmZpbmlzaAorICAgICAg ICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBUZXN0RmluaXNoQnJlYWtwb2lu dChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fKHNl bGYsIGZyYW1lKToKKyAgICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19p bml0X18oc2VsZiwgZnJhbWUsIGludGVybmFsPTEpCisgICAgICAgIHNlbGYu Y291bnQgPSAwCisgICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAg ICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgaWYgKHNlbGYuY291bnQg PT0gMyk6CisgICAgICAgICAgICBwcmludCAidGVzdCBzdG9wIC4uLiIKKyAg ICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICBwcmludCAidGVzdCBkb24ndCBzdG9wICVkIiAlIHNlbGYuY291bnQK KyAgICAgICAgICAgIHJldHVybiBGYWxzZSAKKyAgICAgICAgCisgICAgCisg ICAgZGVmIG91dF9vZl9zY29wZShzZWxmKToKKyAgICAgICAgcHJpbnQgInRl c3QgZGlkbid0IGZpbmlzaCAuLi4iCisKK2NsYXNzIFRlc3RFeHBsaWNpdEJy ZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorCWRlZiBzdG9wKHNlbGYpOgor CQlTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkK KwkJcmV0dXJuIEZhbHNlCisKK2NsYXNzIFNpbXBsZUZpbmlzaEJyZWFrcG9p bnQoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpOgorCWRlZiBfX2luaXRfXyhzZWxm LCBmcmFtZSk6CisJCWdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChz ZWxmLCBmcmFtZSkKKwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQg aW5pdCIKKwkJCisJZGVmIHN0b3Aoc2VsZik6CisJCXByaW50ICJTaW1wbGVG aW5pc2hCcmVha3BvaW50IHN0b3AiIAorCQlyZXR1cm4gVHJ1ZQorCQorCWRl ZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hC cmVha3BvaW50IG91dCBvZiBzY29wZS4uLiIKKworcHJpbnQgIlB5dGhvbiBz Y3JpcHQgaW1wb3J0ZWQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmNjIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGVlYTA2Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5jYwpAQCAtMCwwICsxLDU5IEBACisvKiBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgor CisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKworI2lu Y2x1ZGUgPGlvc3RyZWFtPgorCit2b2lkCit0aHJvd19leGNlcHRpb25fMSAo aW50IGUpCit7CisgIHRocm93IG5ldyBpbnQgKGUpOworfQorCit2b2lkCit0 aHJvd19leGNlcHRpb24gKGludCBlKQoreworICB0aHJvd19leGNlcHRpb25f MSAoZSk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGk7Cisg IHRyeQorICAgIHsKKyAgICAgIHRocm93X2V4Y2VwdGlvbl8xICgxMCk7Cisg ICAgfQorICBjYXRjaCAoY29uc3QgaW50ICplKQorICAgIHsKKyAgICAgICAg c3RkOjpjZXJyIDw8ICJFeGNlcHRpb24gIyIgPDwgKmUgPDwgc3RkOjplbmRs OworICAgIH0KKyAgaSArPSAxOyAvKiBCcmVhayBhZnRlciBleGNlcHRpb24g MS4gICovCisKKyAgdHJ5CisgICAgeworICAgICAgdGhyb3dfZXhjZXB0aW9u ICgxMCk7CisgICAgfQorICBjYXRjaCAoY29uc3QgaW50ICplKQorICAgIHsK KyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNlcHRpb24gIyIgPDwgKmUgPDwg c3RkOjplbmRsOworICAgIH0KKyAgaSArPSAxOyAvKiBCcmVhayBhZnRlciBl eGNlcHRpb24gMi4gICovCisKKyAgcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQg YS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQyLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludDIuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjA3MTUxODgKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cApAQCAt MCwwICsxLDYxIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMg VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0 ZXN0cyB0aGUgbWVjaGFuaXNtCisjIGV4cG9zaW5nIHZhbHVlcyB0byBQeXRo b24uCisKK2lmICR0cmFjZWxldmVsIHRoZW4geworICAgIHN0cmFjZSAkdHJh Y2VsZXZlbAorfQorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAorCitzZXQg dGVzdGZpbGUgInB5LWZpbmlzaC1icmVha3BvaW50MiIKK3NldCBzcmNmaWxl ICR7dGVzdGZpbGV9LmNjCitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJk aXJ9LyR7dGVzdGZpbGV9CitzZXQgcHlmaWxlICAke3NyY2Rpcn0vJHtzdWJk aXJ9LyR7dGVzdGZpbGV9LnB5CisKKyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdk Yi4KK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGly ICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxlfQorCitpZiB7 IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9 IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSB7ZGVidWcgYysrfV0gIT0gIiIg fSB7CisgICAgdW50ZXN0ZWQgIkNvdWxkbid0IGNvbXBpbGUgJHtzcmNmaWxl fSIKKyAgICByZXR1cm4gLTEKK30KKworaWYgIVtydW50b19tYWluXSB0aGVu IHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVy biAwCit9CisKK2dkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVy ICJCcmVhayBhZnRlciBleGNlcHRpb24gMiJdCisKK2dkYl90ZXN0ICJzb3Vy Y2UgJHB5ZmlsZSIgIi4qUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisg ICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorICAgICAgICAgCitn ZGJfYnJlYWtwb2ludCAidGhyb3dfZXhjZXB0aW9uXzEiCitnZGJfdGVzdCAi Y29udGludWUiICJCcmVha3BvaW50IC4qdGhyb3dfZXhjZXB0aW9uXzEuKiIg InJ1biB0byBleGNlcHRpb24gMSIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBsZW4oZ2RiLmJyZWFrcG9pbnRzKCkpIiAiMyIgImNoZWNrIEJQIGNvdW50 IgorZ2RiX3Rlc3QgInB5dGhvbiBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50 KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJy ZWFrcG9pbnQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4Y2VwdGlvbiIK K2dkYl90ZXN0ICJjb250aW51ZSIgIi4qc3RvcHBlZCBhdCBFeGNlcHRpb25G aW5pc2hCcmVha3BvaW50LioiICJjaGVjayBGaW5pc2hCcmVha3BvaW50IGlu IGNhdGNoKCkiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGxlbihnZGIuYnJl YWtwb2ludHMoKSkiICIzIiAiY2hlY2sgZmluaXNoIEJQIHJlbW92YWwiCisK K2dkYl90ZXN0ICJjb250aW51ZSIgIi4qQnJlYWtwb2ludC4qIHRocm93X2V4 Y2VwdGlvbl8xLioiICJjb250aW51ZSB0byBzZWNvbmQgZXhjZXB0aW9uIgor Z2RiX3Rlc3QgInB5dGhvbiBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50KGdk Yi5uZXdlc3RfZnJhbWUoKSkiICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJyZWFr cG9pbnQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4Y2VwdGlvbiIKK2dk Yl90ZXN0ICJjb250aW51ZSIgIi4qZXhjZXB0aW9uIGRpZCBub3QgZmluaXNo LioiICJGaW5pc2hCcmVha3BvaW50IHdpdGggZXhjZXB0aW9uIHRocm93biBu b3QgY2F1Z2h0IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5weSBiL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIucHkKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhNGNmMQotLS0gL2Rldi9u dWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludDIucHkKQEAgLTAsMCArMSwzNCBAQAorIyBDb3B5cmlnaHQg KEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdE QiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24gRmluaXNoCisjIEJyZWFr cG9pbnRzLgorCitjbGFzcyBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50KGdk Yi5GaW5pc2hCcmVha3BvaW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg ZnJhbWUpOgorICAgICAgICBnZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRf XyhzZWxmLCBmcmFtZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgc2VsZi5zaWxl bnQgPSBUcnVlOworICAgICAgICBwcmludCAiaW5pdCBFeGNlcHRpb25GaW5p c2hCcmVha3BvaW50IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToK KyAgICAgICAgcHJpbnQgInN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNoQnJl YWtwb2ludCIKKyAgICAgICAgZ2RiLnBvc3RfZXZlbnQoc2VsZi5kZWxldGUp CisgICAgICAgIHJldHVybiBUcnVlIAorICAgIAorICAgIGRlZiBvdXRfb2Zf c2NvcGUoc2VsZik6CisgICAgICAgIHByaW50ICJleGNlcHRpb24gZGlkIG5v dCBmaW5pc2ggLi4uIgorCisKK3ByaW50ICJQeXRob24gc2NyaXB0IGltcG9y dGVkIgo= --bcaec54a383e25c5d704a47aea34--