From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27750 invoked by alias); 24 Oct 2011 15:02:45 -0000 Received: (qmail 27600 invoked by uid 22791); 24 Oct 2011 15:02:33 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BJ,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 24 Oct 2011 15:02:07 +0000 Received: by vws16 with SMTP id 16so5636079vws.0 for ; Mon, 24 Oct 2011 08:02:06 -0700 (PDT) Received: by 10.52.23.20 with SMTP id i20mr22770215vdf.93.1319468526527; Mon, 24 Oct 2011 08:02:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.180.75 with HTTP; Mon, 24 Oct 2011 08:01:45 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Mon, 24 Oct 2011 15:31:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey , Eli Zaretskii Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf3079b870d0e4da04b00cb42a 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-10/txt/msg00637.txt.bz2 --20cf3079b870d0e4da04b00cb42a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6419 On Mon, Oct 24, 2011 at 11:14 AM, Kevin Pouget wro= te: > On Fri, Oct 21, 2011 at 9:45 AM, Kevin Pouget wr= ote: >> On Thu, Oct 20, 2011 at 10:41 PM, Tom Tromey wrote: >>>>>>>> "Kevin" =3D=3D Kevin Pouget writes: >>> >>> Tom> You need to store a gdb.Type wrapper. >>> Tom> A 'struct type' can also be invalidated when an objfile is destroy= ed. >>> >>> Kevin> I wouldn't mind, but I can't see how gdb.Type ensures validity, = as far >>> Kevin> as I've seen, there is no "is_valid" method and I can't and no f= urther >>> Kevin> verification during the Python -> C translation: >>> >>> When an objfile is destroyed, py-type.c:save_objfile_types is called. >>> This makes a copy of the struct type underlying any relevant Type objec= t. >> >> I'll take a look at that, I don't remember what was the problem! > > I understood that, and replaced 'struct type *' fields by the > corresponding 'PyObject/Type' python objects > >>> [ out_of_scope_notif ] >>> Kevin> - avoid calling `out_of_scope' every normal_stop when the breakp= oint >>> Kevin> is not anymore in the callstack >>> >>> It seems to me that manually managing this is not the best we could do. >>> >>> I was re-reading the code and I realized that this isn't actually >>> working the way I had remembered it working: >>> >>> +A @fdb{finish breakpoint} is a breakpoint set at the return address of >>> +a frame, based on the "finish command. @code{gdb.FinishBreakpoint} ext= ends >>> +@code{gdb.Breakpoint} >>> >>> This approach is fine; but once a frame is gone, it is gone -- we should >>> just destroy the breakpoint at that point. =A0Maybe this would make the >>> internal logic simpler as well. >> >> yes, I think you're right with that, "once a frame is gone, it is >> gone", I actually don't use myself this 'permanent finish breakpoint' >> feature, so I'll change it. >> So basically, the BP must be deleted right after it has been it (maybe >> through the 'temporary' mechanism). 'out_of_scope' will be triggered >> in the same conditions as before, but instead of playing with >> 'out_of_scope_notif' I'll delete the GDB breakpoint (thus invalidating >> the Python BP) >> >> I'll post a patch going this way later today > > So I've changed the way FinishBreakpoints are 'garbage collected'. > Now, they're more similar to Temporary Breakpoints, that is, they're > deleted *soon* after they've been hit. > Soon, because when Breakpoint.stop tells GDB *not* to stop at the > [finish] breakpoint, there is no way to delete this breakpoint (and I > guess that may be the reason why Temporary Breakpoints are not > available in Python yet). > > So I disable it, and "b->disposition =3D=3D disp_del" will ensure that the > BP will be removed when it's possible. > > The `out_of_scope' callback will also delete the breakpoint. > > > I've updated the doc and testsuite accordingly, and as far as I've > seen, there is no regression on X86_64/Fedora > (I need still need to improve my test environment) there was indeed a little regression hidden in the middle of the testsuite logs, which made "tbreak ... if condition" fail if the condition was not satisfied at the first try. I've fixed it with: /* If it's a temporary breakpoint. */ if (bpfinishpy_is_finish_bp(py_bp)) { /* Can't delete it here. */ gdb_assert (b->disposition =3D=3D disp_del); disable_breakpoint (b); } which now only affects gdb.FinishBreakpoint-s. They can be hit only once, in opposition with proper temporary breakpoints which remain until their condition succeeds. This patch also encompasses the doc modifications asked by Eli and a NEWS e= ntry. Thanks, Kevin 2011-10-24 Kevin Pouget Introduce gdb.FinishBreakpoints in Python * Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o. (SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c. Add build rule for this file. * breakpoint.h (struct breakpoint): New field: is_py_finish_bp. * breakpoint.c (init_raw_breakpoint_without_location): Initialize is_py_finish_bp. * infcmd.c (get_return_value): New function. (print_return_value): Split to create get_return_value. * inferior.h (get_return_value): New prototype. * infrun.c: Include python/python.h. (stop_registers): Mention FinishBreakpoint in description. (normal_stop): Set stop_registers if stopped at FinishBreakpoint. * python/py-breakpoint.c (breakpoint_object_type): Make non-static. (bppy_pending_object): Likewise (gdbpy_should_stop): Disable temporary breakpoints. (gdbpy_breakpoint_created): Set is_py_finish_bp is necessary. (struct breakpoint_object): Move to python-internal.h (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. * python/python-internal.h (breakpoint_object_type): Add as extern. (bppy_pending_object): Likewise. (typedef struct breakpoint_object) Removed. (struct breakpoint_object): Moved from py-breakpoint.c. (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (bpfinishpy_is_finish_bp): Likewise. * python/py-finishbreakpoint.c: New file. * python/py-frame.c(frame_object_to_frame_info): Make non-static and accept PyObject instead of frame_object. (frapy_is_valid): Don't cast to frame_object. (frapy_name): Likewise. (frapy_type): Likewise. (frapy_unwind_stop_reason): Likewise. (frapy_pc): Likewise. (frapy_block): Likewise. (frapy_function): Likewise. (frapy_older): Likewise. (frapy_newer): Likewise. (frapy_find_sal): Likewise. (frapy_read_var): Likewise. (frapy_select): Likewise. * python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function. (_initialize_python): Add gdbpy_initialize_finishbreakpoints. * python/python.h: Include breakpoint.h (gdbpy_is_stopped_at_finish_bp): New prototype. doc/ * gdb.texinfo (Breakpoints In Python): New subsection: Finish Breakpoints. testsuite/ * gdb.python/py-breakpoint.exp (mult_line): Define and use variable instead of line number. * gdb.python/py-finish-breakpoint.c: New file. * gdb.python/py-finish-breakpoint.exp: New file. * gdb.python/py-finish-breakpoint.py: New file. * gdb.python/py-finish-breakpoint2.cc: New file. * gdb.python/py-finish-breakpoint2.exp: New file. * gdb.python/py-finish-breakpoint2.py: New file. --20cf3079b870d0e4da04b00cb42a Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gu5levjq1 Content-length: 74193 RnJvbSBmYjBjOWU4ODAyYjdjNzlkNTQwNzA5ODI5Y2RkYjcyYzMxZGFlMWYy IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJbnRyb2R1Y2UgZ2Ri LkZpbmlzaEJyZWFrcG9pbnRzCgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2JyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGdkYi9icmVha3BvaW50Lmgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBn ZGIvZG9jL2dkYi50ZXhpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNDggKysrCiBnZGIvaW5mY21kLmMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKy0KIGdkYi9pbmZlcmlv ci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MyArCiBnZGIvaW5mcnVuLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDkgKy0KIGdkYi9weXRob24vcHktYnJlYWtwb2lu dC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MSArLS0KIGdkYi9w eXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAg IHwgIDM5MiArKysrKysrKysrKysrKysrKysrKwogZ2RiL3B5dGhvbi9weS1m cmFtZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICst CiBnZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICAg ICAgICAgICB8ICAgNDYgKysrLQogZ2RiL3B5dGhvbi9weXRob24uYyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGdkYi9weXRo b24vcHl0aG9uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMiArCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2lu dC5leHAgICAgICAgICB8ICAgIDcgKy0KIGdkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jICAgIHwgICA5NyArKysrKwog Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 LmV4cCAgfCAgMjMwICsrKysrKysrKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5ICAgfCAgIDg4ICsrKysr CiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQyLmNjICB8ICAgNTkgKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCB8ICAgNjUgKysrKwogZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5weSAg fCAgIDM0ICsrCiAyMSBmaWxlcyBjaGFuZ2VkLCAxMTM5IGluc2VydGlvbnMo KyksIDY1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9w eXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludDIuZXhwCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5weQoKZGlm ZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgpp bmRleCAzMmQ4ZWYzLi42Y2VkZjEyIDEwMDY0NAotLS0gYS9nZGIvTWFrZWZp bGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0yODcsNiArMjg3LDcg QEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktZXZ0cmVnaXN0cnkubyBc CiAJcHktZXZ0cy5vIFwKIAlweS1leGl0ZWRldmVudC5vIFwKKwlweS1maW5p c2hicmVha3BvaW50Lm8gXAogCXB5LWZyYW1lLm8gXAogCXB5LWZ1bmN0aW9u Lm8gXAogCXB5LWluZmVyaW9yLm8gXApAQCAtMzE4LDYgKzMxOSw3IEBAIFNV QkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktZXZ0cmVnaXN0cnku YyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBcCiAJcHl0aG9uL3B5LWV4aXRlZGV2 ZW50LmMgXAorCXB5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMgXAogCXB5 dGhvbi9weS1mcmFtZS5jIFwKIAlweXRob24vcHktZnVuY3Rpb24uYyBcCiAJ cHl0aG9uL3B5LWluZmVyaW9yLmMgXApAQCAtMjEwMyw2ICsyMTA1LDEwIEBA IHB5LWV4aXRlZGV2ZW50Lm86ICQoc3JjZGlyKS9weXRob24vcHktZXhpdGVk ZXZlbnQuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2Rp cikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKFBPU1RDT01QSUxFKQog CitweS1maW5pc2hicmVha3BvaW50Lm86ICQoc3JjZGlyKS9weXRob24vcHkt ZmluaXNoYnJlYWtwb2ludC5jCisJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxB R1MpICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCisJ JChQT1NUQ09NUElMRSkKKwogcHktZnJhbWUubzogJChzcmNkaXIpL3B5dGhv bi9weS1mcmFtZS5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQo c3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoUE9TVENPTVBJTEUpCmRp ZmYgLS1naXQgYS9nZGIvTkVXUyBiL2dkYi9ORVdTCmluZGV4IDgwYzU5ZjYu LjY1NWUwMTMgMTAwNjQ0Ci0tLSBhL2dkYi9ORVdTCisrKyBiL2dkYi9ORVdT CkBAIC01MCw2ICs1MCwxMCBAQAogICAqKiBUaGUgImdkYi5icmVha3BvaW50 IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mCiAg ICAgICJnZGIuYnJlYWtwb2ludHMiLgogCisgICoqIEEgbmV3IGNsYXNzICJn ZGIuRmluaXNoQnJlYWtwb2ludCIgaXMgcHJvdmlkZWQgdG8gY2F0Y2ggdGhl IHJldHVybgorICAgICBvZiBhIGZ1bmN0aW9uLiAgVGhpcyBjbGFzcyBpcyBi YXNlZCBvbiB0aGUgImZpbmlzaCIgY29tbWFuZAorICAgICBhdmFpbGFibGUg aW4gdGhlIENMSS4gCisKICAgKiogVHlwZSBvYmplY3RzIGZvciBzdHJ1Y3Qg YW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxvdyBhY2Nlc3MgdG8KICAgICAgdGhl IGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQeXRob24gZGljdGlvbmFyeSAobWFw cGluZykgbWV0aG9kcy4KICAgICAgRm9yIGV4YW1wbGUsICJzb21lX3R5cGVb J215ZmllbGQnXSIgbm93IHdvcmtzLCBhcyBkb2VzCmRpZmYgLS1naXQgYS9n ZGIvYnJlYWtwb2ludC5jIGIvZ2RiL2JyZWFrcG9pbnQuYwppbmRleCBiYTFi MDhmLi5mZmQyZWY2IDEwMDY0NAotLS0gYS9nZGIvYnJlYWtwb2ludC5jCisr KyBiL2dkYi9icmVha3BvaW50LmMKQEAgLTU3MDAsNiArNTcwMCw3IEBAIGlu aXRfcmF3X2JyZWFrcG9pbnRfd2l0aG91dF9sb2NhdGlvbiAoc3RydWN0IGJy ZWFrcG9pbnQgKmIsCiAgIGItPmZyYW1lX2lkID0gbnVsbF9mcmFtZV9pZDsK ICAgYi0+Y29uZGl0aW9uX25vdF9wYXJzZWQgPSAwOwogICBiLT5weV9icF9v YmplY3QgPSBOVUxMOworICBiLT5pc19weV9maW5pc2hfYnAgPSAwOwogICBi LT5yZWxhdGVkX2JyZWFrcG9pbnQgPSBiOwogfQogCmRpZmYgLS1naXQgYS9n ZGIvYnJlYWtwb2ludC5oIGIvZ2RiL2JyZWFrcG9pbnQuaAppbmRleCBjMjEx NmUyLi4zZjIzMmU3IDEwMDY0NAotLS0gYS9nZGIvYnJlYWtwb2ludC5oCisr KyBiL2dkYi9icmVha3BvaW50LmgKQEAgLTYyNSw2ICs2MjUsOSBAQCBzdHJ1 Y3QgYnJlYWtwb2ludAogICAgICAgIGNhbiBzb21ldGltZXMgYmUgTlVMTCBm b3IgZW5hYmxlZCBHREJzIGFzIG5vdCBhbGwgYnJlYWtwb2ludAogICAgICAg IHR5cGVzIGFyZSB0cmFja2VkIGJ5IHRoZSBQeXRob24gc2NyaXB0aW5nIEFQ SS4gICovCiAgICAgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpweV9icF9v YmplY3Q7CisKKyAgICAvKiBUUlVFIGlzIHB5X2JwX29iamVjdCBpcyBhIGdk Yi5GaW5pc2hCcmVha3BvaW50IG9iamVjdCAuICAqLworICAgIGludCBpc19w eV9maW5pc2hfYnA7CiAgIH07CiAKIC8qIEFuIGluc3RhbmNlIG9mIHRoaXMg dHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHdhdGNocG9pbnQuICBJdApk aWZmIC0tZ2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2MvZ2Ri LnRleGluZm8KaW5kZXggNjllMmJkYS4uYWQxN2VmMyAxMDA2NDQKLS0tIGEv Z2RiL2RvYy9nZGIudGV4aW5mbworKysgYi9nZGIvZG9jL2dkYi50ZXhpbmZv CkBAIC0yMTI4OSw2ICsyMTI4OSw3IEBAIHNpdHVhdGlvbiwgYSBQeXRob24g QGNvZGV7S2V5Ym9hcmRJbnRlcnJ1cHR9IGV4Y2VwdGlvbiBpcyB0aHJvd24u CiAqIFN5bWJvbCBUYWJsZXMgSW4gUHl0aG9uOjogICAgIFB5dGhvbiByZXBy ZXNlbnRhdGlvbiBvZiBzeW1ib2wgdGFibGVzLgogKiBMYXp5IFN0cmluZ3Mg SW4gUHl0aG9uOjogICAgICBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgbGF6 eSBzdHJpbmdzLgogKiBCcmVha3BvaW50cyBJbiBQeXRob246OiAgICAgICBN YW5pcHVsYXRpbmcgYnJlYWtwb2ludHMgdXNpbmcgUHl0aG9uLgorKiBGaW5p c2ggQnJlYWtwb2ludHMgaW4gUHl0aG9uOjogU2V0dGluZyBCcmVha3BvaW50 cyBvbiBmdW5jdGlvbiByZXR1cm4gdXNpbmcgUHl0aG9uCiBAZW5kIG1lbnUK IAogQG5vZGUgQmFzaWMgUHl0aG9uCkBAIC0yNDA4Miw2ICsyNDA4Myw1MyBA QCBjb21tYW5kcywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzLiAgSWYgdGhlcmUg YXJlIG5vIGNvbW1hbmRzLCB0aGlzCiBhdHRyaWJ1dGUgaXMgQGNvZGV7Tm9u ZX0uICBUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCiBAZW5kIGRl ZnZhcgogCitAbm9kZSBGaW5pc2ggQnJlYWtwb2ludHMgaW4gUHl0aG9uCitA c3Vic3Vic2VjdGlvbiBGaW5pc2ggQnJlYWtwb2ludHMKKworQGNpbmRleCBw eXRob24gZmluaXNoIGJyZWFrcG9pbnRzCitAdGluZGV4IGdkYi5GaW5pc2hC cmVha3BvaW50CisKK0EgZmluaXNoIGJyZWFrcG9pbnQgaXMgYSB0ZW1wb3Jh cnkgYnJlYWtwb2ludCBzZXQgYXQgdGhlIHJldHVybiBhZGRyZXNzIG9mCith IGZyYW1lLCBiYXNlZCBvbiB0aGUgQGNvZGV7ZmluaXNofSBjb21tYW5kLiAg QGNvZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9CitleHRlbmRzIEBjb2Rle2dk Yi5CcmVha3BvaW50fS4gIFRoZSB1bmRlcmx5aW5nIGJyZWFrcG9pbnQgd2ls bCBiZSBkaXNhYmxlZCAKK2FuZCBkZWxldGVkIHdoZW4gdGhlIGV4ZWN1dGlv biB3aWxsIHJ1biBvdXQgb2YgdGhlIGJyZWFrcG9pbnQgc2NvcGUgKGkuZS5A OiAKK0Bjb2Rle0JyZWFrcG9pbnQuc3RvcH0gb3IgQGNvZGV7RmluaXNoQnJl YWtwb2ludC5vdXRfb2Zfc2NvcGV9IHRyaWdnZXJlZCkuCisKK0BkZWZ1biBG aW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChAdmFye2ZyYW1lfSwgQHJ7W31A dmFye2ludGVybmFsfUBye119KQorQ3JlYXRlIGEgZmluaXNoIGJyZWFrcG9p bnQgYXQgdGhlIHJldHVybiBhZGRyZXNzIG9mIHRoZSBAY29kZXtnZGIuRnJh bWV9CitvYmplY3QgQHZhcntmcmFtZX0uICBUaGUgb3B0aW9uYWwgQHZhcntp bnRlcm5hbH0gYXJndW1lbnQgYWxsb3dzIHRoZQorYnJlYWtwb2ludCB0byBi ZWNvbWUgaW52aXNpYmxlIHRvIHRoZSB1c2VyLiAgQHhyZWZ7QnJlYWtwb2lu dHMgSW4gUHl0aG9ufSwKK2ZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgdGhp cyBhcmd1bWVudC4KK0BlbmQgZGVmdW4KKworQGRlZnVuIEZpbmlzaEJyZWFr cG9pbnQub3V0X29mX3Njb3BlIChzZWxmKQorSW4gc29tZSBjaXJjdW1zdGFu Y2VzIChlLmcuQDogQGNvZGV7bG9uZ2ptcH0sIENAdHsrK30gZXhjZXB0aW9u cywgQHZhbHVle0dEQk59IAorQGNvZGV7cmV0dXJufSBjb21tYW5kLCBAZG90 c3t9KSwgYSBmdW5jdGlvbiBtYXkgbm90IHByb3Blcmx5IHRlcm1pbmF0ZSwg YW5kIHRodXMgCituZXZlciBoaXQgdGhlIGZpbmlzaCBicmVha3BvaW50LiAg V2hlbiBAdmFsdWV7R0RCTn0gbm90aWNlcyBzdWNoIGEgCitzaXR1YXRpb24s IHRoZSBAY29kZXtvdXRfb2Zfc2NvcGV9IGNhbGxiYWNrIHdpbGwgYmUgdHJp Z2dlcmVkLgorCitZb3UgbWF5IHdhbnQgdG8gc3ViLWNsYXNzIEBjb2Rle2dk Yi5GaW5pc2hCcmVha3BvaW50fSBhbmQgb3ZlcnJpZGUgdGhpcworbWV0aG9k OgorCitAc21hbGxleGFtcGxlCitjbGFzcyBNeUZpbmlzaEJyZWFrcG9pbnQg KGdkYi5GaW5pc2hCcmVha3BvaW50KQorICAgIGRlZiBzdG9wIChzZWxmKToK KyAgICAgICAgcHJpbnQgIm5vcm1hbCBmaW5pc2giCisgICAgICAgIHJldHVy biBUcnVlCisgICAgCisgICAgZGVmIG91dF9vZl9zY29wZSAoKToKKyAgICAg ICAgcHJpbnQgImFibm9ybWFsIGZpbmlzaCIKK0BlbmQgc21hbGxleGFtcGxl IAorQGVuZCBkZWZ1bgorCitAZGVmdmFyIEZpbmlzaEJyZWFrcG9pbnQucmV0 dXJuX3ZhbHVlCitXaGVuIEB2YWx1ZXtHREJOfSBpcyBzdG9wcGVkIGF0IGEg ZmluaXNoIGJyZWFrcG9pbnQgYW5kIHRoZSBmcmFtZSAKK3VzZWQgdG8gYnVp bGQgdGhlIEBjb2Rle2dkYi5GaW5pc2hCcmVha3BvaW50fSBvYmplY3QgaGFk IGRlYnVnIHN5bWJvbHMsIHRoaXMKK2F0dHJpYnV0ZSB3aWxsIGNvbnRhaW4g YSBAY29kZXtnZGIuVmFsdWV9IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRo ZSByZXR1cm4KK3ZhbHVlIG9mIHRoZSBmdW5jdGlvbi4gIFRoZSB2YWx1ZSB3 aWxsIGJlIEBjb2Rle05vbmV9IGlmIHRoZSByZXR1cm4gdmFsdWUKK3dhcyBu b3QgY29tcHV0YWJsZS4gIFRoaXMgYXR0cmlidXRlIGlzIG5vdCB3cml0YWJs ZS4KK0BlbmQgZGVmdmFyCisKIEBub2RlIExhenkgU3RyaW5ncyBJbiBQeXRo b24KIEBzdWJzdWJzZWN0aW9uIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBs YXp5IHN0cmluZ3MuCiAKZGlmZiAtLWdpdCBhL2dkYi9pbmZjbWQuYyBiL2dk Yi9pbmZjbWQuYwppbmRleCAzZThiZjVkLi4zM2NlMWZjIDEwMDY0NAotLS0g YS9nZGIvaW5mY21kLmMKKysrIGIvZ2RiL2luZmNtZC5jCkBAIC0xNDEzLDE0 ICsxNDEzLDEyIEBAIGFkdmFuY2VfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQg ZnJvbV90dHkpCiAgIHVudGlsX2JyZWFrX2NvbW1hbmQgKGFyZywgZnJvbV90 dHksIDEpOwogfQogDAotLyogUHJpbnQgdGhlIHJlc3VsdCBvZiBhIGZ1bmN0 aW9uIGF0IHRoZSBlbmQgb2YgYSAnZmluaXNoJyBjb21tYW5kLiAgKi8KKy8q IFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBhdCB0aGUgZW5kIG9m IGEgJ2ZpbmlzaCcgY29tbWFuZC9CUC4gICovCiAKLXN0YXRpYyB2b2lkCi1w cmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0 cnVjdCB0eXBlICp2YWx1ZV90eXBlKQorc3RydWN0IHZhbHVlICoKK2dldF9y ZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0 eXBlICp2YWx1ZV90eXBlKQogewogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCA9IGdldF9yZWdjYWNoZV9hcmNoIChzdG9wX3JlZ2lzdGVycyk7Ci0gIHN0 cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47Ci0gIHN0cnVjdCB1aV9zdHJlYW0g KnN0YjsKICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKICAgc3RydWN0IHVpX291 dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0OwogCkBAIC0xNDUxLDYgKzE0NDks MTkgQEAgcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190 eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKICAgICAgIGludGVybmFs X2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sIF8oImJhZCBzd2l0Y2giKSk7 CiAgICAgfQogCisgIHJldHVybiB2YWx1ZTsKK30KKworLyogUHJpbnQgdGhl IHJlc3VsdCBvZiBhIGZ1bmN0aW9uIGF0IHRoZSBlbmQgb2YgYSAnZmluaXNo JyBjb21tYW5kLiAgKi8KKworc3RhdGljIHZvaWQKK3ByaW50X3JldHVybl92 YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZh bHVlX3R5cGUpCit7CisgIHN0cnVjdCB2YWx1ZSAqdmFsdWUgPSBnZXRfcmV0 dXJuX3ZhbHVlIChmdW5jX3R5cGUsIHZhbHVlX3R5cGUpOworICBzdHJ1Y3Qg Y2xlYW51cCAqb2xkX2NoYWluOworICBzdHJ1Y3QgdWlfc3RyZWFtICpzdGI7 CisgIHN0cnVjdCB1aV9vdXQgKnVpb3V0ID0gY3VycmVudF91aW91dDsKKwog ICBpZiAodmFsdWUpCiAgICAgewogICAgICAgc3RydWN0IHZhbHVlX3ByaW50 X29wdGlvbnMgb3B0czsKZGlmZiAtLWdpdCBhL2dkYi9pbmZlcmlvci5oIGIv Z2RiL2luZmVyaW9yLmgKaW5kZXggY2ZhZWE3Zi4uZjE5ODY5NiAxMDA2NDQK LS0tIGEvZ2RiL2luZmVyaW9yLmgKKysrIGIvZ2RiL2luZmVyaW9yLmgKQEAg LTI2OSw2ICsyNjksOSBAQCBleHRlcm4gdm9pZCBkZXRhY2hfY29tbWFuZCAo Y2hhciAqLCBpbnQpOwogCiBleHRlcm4gdm9pZCBub3RpY2VfbmV3X2luZmVy aW9yIChwdGlkX3QsIGludCwgaW50KTsKIAorZXh0ZXJuIHN0cnVjdCB2YWx1 ZSAqZ2V0X3JldHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0eXBlICp2YWx1ZV90eXBlKTsKKwogLyogQWRkcmVzcyBhdCB3aGljaCBp bmZlcmlvciBzdG9wcGVkLiAgKi8KIAogZXh0ZXJuIENPUkVfQUREUiBzdG9w X3BjOwpkaWZmIC0tZ2l0IGEvZ2RiL2luZnJ1bi5jIGIvZ2RiL2luZnJ1bi5j CmluZGV4IGRiNmE1ZDEuLjVjZTBjOTQgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZy dW4uYworKysgYi9nZGIvaW5mcnVuLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNp bmNsdWRlICJ0cmFjZXBvaW50LmgiCiAjaW5jbHVkZSAiY29udGludWF0aW9u cy5oIgogI2luY2x1ZGUgImludGVycHMuaCIKKyNpbmNsdWRlICJweXRob24v cHl0aG9uLmgiCiAKIC8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9u cyAqLwogCkBAIC0zNjUsNyArMzY2LDggQEAgc2hvd19zdG9wX29uX3NvbGli X2V2ZW50cyAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwK IGludCBzdG9wX2FmdGVyX3RyYXA7CiAKIC8qIFNhdmUgcmVnaXN0ZXIgY29u dGVudHMgaGVyZSB3aGVuIGV4ZWN1dGluZyBhICJmaW5pc2giIGNvbW1hbmQg b3IgYXJlCi0gICBhYm91dCB0byBwb3AgYSBzdGFjayBkdW1teSBmcmFtZSwg aWYtYW5kLW9ubHktaWYgcHJvY2VlZF90b19maW5pc2ggaXMgc2V0LgorICAg YWJvdXQgdG8gcG9wIGEgc3RhY2sgZHVtbXkgZnJhbWUsIGlmLWFuZC1vbmx5 LWlmIHByb2NlZWRfdG9fZmluaXNoIGlzIHNldAorICAgb3IgYSBQeXRob24g RmluaXNoQnJlYWtwb2ludCBoYXMgYmVlbiBoaXQuCiAgICBUaHVzIHRoaXMg Y29udGFpbnMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBjYWxsZWQgZnVu Y3Rpb24gKGFzc3VtaW5nCiAgICB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGEg cmVnaXN0ZXIpLiAgKi8KIApAQCAtNTk4NSw4ICs1OTg3LDkgQEAgbm9ybWFs X3N0b3AgKHZvaWQpCiAKICAgLyogU2F2ZSB0aGUgZnVuY3Rpb24gdmFsdWUg cmV0dXJuIHJlZ2lzdGVycywgaWYgd2UgY2FyZS4KICAgICAgV2UgbWlnaHQg YmUgYWJvdXQgdG8gcmVzdG9yZSB0aGVpciBwcmV2aW91cyBjb250ZW50cy4g ICovCi0gIGlmIChpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wucHJvY2Vl ZF90b19maW5pc2gKLSAgICAgICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gIT0g RVhFQ19SRVZFUlNFKQorICBpZiAoZ2RicHlfaXNfc3RvcHBlZF9hdF9maW5p c2hfYnAgKGluZmVyaW9yX3RocmVhZCAoKS0+Y29udHJvbC5zdG9wX2Jwc3Rh dCkKKyAgICAgIHx8IChpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wucHJv Y2VlZF90b19maW5pc2gKKyAgICAgICAgICAmJiBleGVjdXRpb25fZGlyZWN0 aW9uICE9IEVYRUNfUkVWRVJTRSkpCiAgICAgewogICAgICAgLyogVGhpcyBz aG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gICovCiAgICAgICBpZiAoc3RvcF9y ZWdpc3RlcnMpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWJyZWFrcG9p bnQuYyBiL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jCmluZGV4IGRhY2Vi OTkuLmVhZjEwMTUgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHktYnJlYWtw b2ludC5jCisrKyBiL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jCkBAIC0z MSw1MiArMzEsMTggQEAKICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCiAjaW5j bHVkZSAibGFuZ3VhZ2UuaCIKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVh a3BvaW50X29iamVjdF90eXBlOworUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRf b2JqZWN0X3R5cGU7CiAKIC8qIE51bWJlciBvZiBsaXZlIGJyZWFrcG9pbnRz LiAgKi8KIHN0YXRpYyBpbnQgYnBweV9saXZlOwogCiAvKiBWYXJpYWJsZXMg dXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIEJyZWFrcG9p bnQKICAgIGNvbnN0cnVjdG9yIGFuZCB0aGUgYnJlYWtwb2ludC1jcmVhdGVk IGhvb2sgZnVuY3Rpb24uICAqLwotc3RhdGljIGJyZWFrcG9pbnRfb2JqZWN0 ICpicHB5X3BlbmRpbmdfb2JqZWN0OworYnJlYWtwb2ludF9vYmplY3QgKmJw cHlfcGVuZGluZ19vYmplY3Q7CiAKIC8qIEZ1bmN0aW9uIHRoYXQgaXMgY2Fs bGVkIHdoZW4gYSBQeXRob24gY29uZGl0aW9uIGlzIGV2YWx1YXRlZC4gICov CiBzdGF0aWMgY2hhciAqIGNvbnN0IHN0b3BfZnVuYyA9ICJzdG9wIjsKIAot c3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Ci17Ci0gIFB5T2JqZWN0X0hFQUQK LQotICAvKiBUaGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5nIHRvIGdk Yi4gICovCi0gIGludCBudW1iZXI7Ci0KLSAgLyogVGhlIGdkYiBicmVha3Bv aW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBoYXMgYmVl bgotICAgICBkZWxldGVkLiAgKi8KLSAgc3RydWN0IGJyZWFrcG9pbnQgKmJw OwotfTsKLQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxp ZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgotICAgZXhjZXB0aW9u IGlmIGl0IGlzIGludmFsaWQuICAqLwotI2RlZmluZSBCUFBZX1JFUVVJUkVf VkFMSUQoQnJlYWtwb2ludCkJCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0g ICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJXAotCXJl dHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgICAgICAg ICAgICAgICAgICAgICAgICBcCi0JCQkgICAgIF8oIkJyZWFrcG9pbnQgJWQg aXMgaW52YWxpZC4iKSwJCVwKLQkJCSAgICAgKEJyZWFrcG9pbnQpLT5udW1i ZXIpOwkJCVwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBSZXF1aXJlIHRoYXQg QlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEg UHl0aG9uCi0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gIFRoaXMg bWFjcm8gaXMgZm9yIHVzZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAgKi8KLSNk ZWZpbmUgQlBQWV9TRVRfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KQkJCQlc Ci0gICAgZG8gewkJCQkJCQkJXAotICAgICAgaWYgKChCcmVha3BvaW50KS0+ YnAgPT0gTlVMTCkJCQkJCVwKLSAgICAgICAgewkJCQkJCQkJXAotCSAgUHlF cnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQg JWQgaXMgaW52YWxpZC4iKSwgXAotCQkJKEJyZWFrcG9pbnQpLT5udW1iZXIp OwkJCQlcCi0JICByZXR1cm4gLTE7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0g ICAgfSB3aGlsZSAoMCkKLQogLyogVGhpcyBpcyB1c2VkIHRvIGluaXRpYWxp emUgdmFyaW91cyBnZGIuYnBfKiBjb25zdGFudHMuICAqLwogc3RydWN0IHB5 YnBfY29kZQogewpAQCAtNzU3LDYgKzcyMywxNSBAQCBnZGJweV9zaG91bGRf c3RvcCAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCiAgICAg ICBlbHNlCiAJZ2RicHlfcHJpbnRfc3RhY2sgKCk7CiAgICAgfQorCisgIC8q IElmIGl0J3MgYSB0ZW1wb3JhcnkgYnJlYWtwb2ludC4gICovCisgIGlmIChi cGZpbmlzaHB5X2lzX2ZpbmlzaF9icChweV9icCkpCisgICAgeworICAgICAg LyogQ2FuJ3QgZGVsZXRlIGl0IGhlcmUuICAqLworICAgICAgZ2RiX2Fzc2Vy dCAoYi0+ZGlzcG9zaXRpb24gPT0gZGlzcF9kZWwpOworICAgICAgZGlzYWJs ZV9icmVha3BvaW50IChiKTsKKyAgICB9CisKICAgZG9fY2xlYW51cHMgKGNs ZWFudXApOwogCiAgIHJldHVybiBzdG9wOwpAQCAtODIxLDYgKzc5Niw4IEBA IGdkYnB5X2JyZWFrcG9pbnRfY3JlYXRlZCAoc3RydWN0IGJyZWFrcG9pbnQg KmJwKQogICAgICAgbmV3YnAtPmJwLT5weV9icF9vYmplY3QgPSBuZXdicDsK ICAgICAgIFB5X0lOQ1JFRiAobmV3YnApOwogICAgICAgKyticHB5X2xpdmU7 CisKKyAgICAgIGJwLT5pc19weV9maW5pc2hfYnAgPSBicGZpbmlzaHB5X2lz X2ZpbmlzaF9icCAoKFB5T2JqZWN0ICopIG5ld2JwKTsKICAgICB9CiAgIGVs c2UKICAgICB7CkBAIC05ODAsNyArOTU3LDcgQEAgc3RhdGljIFB5TWV0aG9k RGVmIGJyZWFrcG9pbnRfb2JqZWN0X21ldGhvZHNbXSA9CiAgIHsgTlVMTCB9 IC8qIFNlbnRpbmVsLiAgKi8KIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3Qg YnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CitQeVR5cGVPYmplY3QgYnJlYWtw b2ludF9vYmplY3RfdHlwZSA9CiB7CiAgIFB5T2JqZWN0X0hFQURfSU5JVCAo TlVMTCkKICAgMCwJCQkJICAvKm9iX3NpemUqLwpkaWZmIC0tZ2l0IGEvZ2Ri L3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMgYi9nZGIvcHl0aG9uL3B5 LWZpbmlzaGJyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4xZmZhYTliCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5 dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMKQEAgLTAsMCArMSwzOTIgQEAK Ky8qIFB5dGhvbiBpbnRlcmZhY2UgdG8gZmluaXNoIGJyZWFrcG9pbnRzCisK KyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKworI2luY2x1ZGUgImRl ZnMuaCIKKyNpbmNsdWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAicHl0 aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgorI2lu Y2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCisjaW5j bHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1ZGUgImxhbmd1YWdlLmgiCisj aW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgor CitzdGF0aWMgUHlUeXBlT2JqZWN0IGZpbmlzaF9icmVha3BvaW50X29iamVj dF90eXBlOworCisvKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEg UHl0aG9uIGZpbmlzaCBicCBpcyBmb3VuZCBvdXQgb2Ygc2NvcGUuICAqLwor c3RhdGljIGNoYXIgKiBjb25zdCBvdXRvZnNjb3BlX2Z1bmMgPSAib3V0X29m X3Njb3BlIjsKKworLyogc3RydWN0IGltcGxlbWVudGluZyB0aGUgZ2RiLkZp bmlzaEJyZWFrcG9pbnQgb2JqZWN0IGJ5IGV4dGVuZGluZworICAgdGhlIGdk Yi5CcmVha3BvaW50IGNsYXNzLiAgKi8KK3N0cnVjdCBmaW5pc2hfYnJlYWtw b2ludF9vYmplY3QKK3sKKyAgLyogZ2RiLkJyZWFrcG9pbnQgYmFzZSBjbGFz cy4gICovCisgIHN0cnVjdCBicmVha3BvaW50X29iamVjdCBweV9icDsKKyAg LyogZ2RiLlR5cGUgb2JqZWN0IG9mIHRoZSBmdW5jdGlvbiBmaW5pc2hlZCBi eSB0aGlzIGJyZWFrcG9pbnQuICAqLworICBQeU9iamVjdCAqZnVuY3Rpb25f dHlwZTsKKyAgLyogZ2RiLlR5cGUgb2JqZWN0IG9mIHRoZSB2YWx1ZSByZXR1 cm4gYnkgdGhlIGJyZWFrcG9pbnRlZCBmdW5jdGlvbi4gICovCisgIFB5T2Jq ZWN0ICpyZXR1cm5fdHlwZTsKKyAgLyogV2hlbiBzdG9wcGVkIGF0IHRoaXMg RmluaXNoQnJlYWtwb2ludCwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0 aW9uOworICAgICBQeV9Ob25lIGlmIHRoZSB2YWx1ZSBpcyBub3QgY29tcHV0 YWJsZTsKKyAgICAgTlVMTCBpZiBHREIgaXMgbm90IHN0b3BwZWQgYXQgYSBG aW5pc2hCcmVha3BvaW50LiAgKi8KKyAgUHlPYmplY3QgKnJldHVybl92YWx1 ZTsKK307CisKKy8qIFRyaWdnZXJlZCB3aGVuIEdEQiBzdG9wcyBhdCBQWV9C UC4gQ29tcHV0ZXMgYW5kIGNhY2hlcyB0aGUgYHJldHVybl92YWx1ZScsCisg ICBpZiBwb3NzaWJsZS4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaF9z dG9wcGVkX2F0X2ZpbmlzaF9icCAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50 X29iamVjdCAqcHlfYnApCit7CisgIGlmIChweV9icC0+cmV0dXJuX3R5cGUp CisgICAgeworICAgICAgc3RydWN0IHZhbHVlICpyZXQgPQorICAgICAgICAg IGdldF9yZXR1cm5fdmFsdWUgKHR5cGVfb2JqZWN0X3RvX3R5cGUgKHB5X2Jw LT5mdW5jdGlvbl90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlX29iamVjdF90b190eXBlIChweV9icC0+cmV0dXJuX3R5cGUpKTsK KyAgICAgIGlmIChyZXQpCisgICAgICAgIHsKKyAgICAgICAgICBweV9icC0+ cmV0dXJuX3ZhbHVlID0gdmFsdWVfdG9fdmFsdWVfb2JqZWN0IChyZXQpOwor ICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHB5X2JwLT5yZXR1cm5f dmFsdWUgPSBQeV9Ob25lOworICAgIH0KK30KKworLyogUHl0aG9uIGZ1bmN0 aW9uIHRvIGdldCB0aGUgJ3JldHVybl92YWx1ZScgYXR0cmlidXRlIG9mCisg ICBGaW5pc2hCcmVha3BvaW50LiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoK K2JwZmluaXNocHlfZ2V0X3JldHVybnZhbHVlIChQeU9iamVjdCAqc2VsZiwg dm9pZCAqY2xvc3VyZSkKK3sKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50 X29iamVjdCAqc2VsZl9maW5pc2hicCA9CisgICAgICAoc3RydWN0IGZpbmlz aF9icmVha3BvaW50X29iamVjdCAqKSBzZWxmOworCisgIGlmIChzZWxmX2Zp bmlzaGJwLT5yZXR1cm5fdHlwZSA9PSBOVUxMKQorICAgIFB5X1JFVFVSTl9O T05FOworCisgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBjYWNoZWQgdmFsdWUu ICAqLworICBpZiAoIXNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSkKKyAg ICB7CisgICAgICBicHN0YXQgYnM7CisKKyAgICAgIEJQUFlfUkVRVUlSRV9W QUxJRCAoJnNlbGZfZmluaXNoYnAtPnB5X2JwKTsKKworICAgICAgZm9yIChi cyA9IGluZmVyaW9yX3RocmVhZCAoKS0+Y29udHJvbC5zdG9wX2Jwc3RhdDsK KyAgICAgICAgICBiczsgYnMgPSBicy0+bmV4dCkKKyAgICAgICAgeworICAg ICAgICAgIHN0cnVjdCBicmVha3BvaW50ICpicCA9IGJzLT5icmVha3BvaW50 X2F0OworCisgICAgICAgICAgaWYgKGJwICE9IE5VTEwgJiYgKFB5T2JqZWN0 ICopIGJwLT5weV9icF9vYmplY3QgPT0gc2VsZikKKyAgICAgICAgICAgICAg YnBmaW5pc2hfc3RvcHBlZF9hdF9maW5pc2hfYnAgKHNlbGZfZmluaXNoYnAp OworICAgICAgICB9CisgICAgfQorCisgIGlmICghc2VsZl9maW5pc2hicC0+ cmV0dXJuX3ZhbHVlKQorICAgIFB5X1JFVFVSTl9OT05FOworCisgIFB5X0lO Q1JFRiAoc2VsZl9maW5pc2hicC0+cmV0dXJuX3ZhbHVlKTsKKyAgcmV0dXJu IHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZTsKK30KKworLyogSWYgU1RP UF9CUFNUQVQgY29udGFpbnMgYSBQeXRob24gYnJlYWtwb2ludCB3aG9zZSB0 eXBlIGlzIFRZUEUsIHJldHVybnMKKyAgIHRoaXMgYnJlYWtwb2ludC4gUmV0 dXJucyBOVUxMIG90aGVyd2lzZS4gICovCisKK3N0cnVjdCBicmVha3BvaW50 ICoKK2dkYnB5X2lzX3N0b3BwZWRfYXRfZmluaXNoX2JwIChicHN0YXQgc3Rv cF9icHN0YXQpCit7CisgIGJwc3RhdCBiczsKKworICBmb3IgKGJzID0gc3Rv cF9icHN0YXQ7IGJzOyBicyA9IGJzLT5uZXh0KQorICAgIHsKKyAgICAgIGlm IChicy0+YnJlYWtwb2ludF9hdCAmJiBicy0+YnJlYWtwb2ludF9hdC0+aXNf cHlfZmluaXNoX2JwKQorICAgICAgICByZXR1cm4gYnMtPmJyZWFrcG9pbnRf YXQ7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisvKiBQeXRob24g ZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGJyZWFrcG9pbnQuICAqLworCitz dGF0aWMgaW50CiticGZpbmlzaHB5X2luaXQgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgc3RhdGlj IGNoYXIgKmtleXdvcmRzW10gPSB7ICJmcmFtZSIsICJpbnRlcm5hbCIsIE5V TEwgfTsKKyAgYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoYnJlYWtw b2ludF9vYmplY3QgKikgc2VsZjsKKyAgc3RydWN0IGZpbmlzaF9icmVha3Bv aW50X29iamVjdCAqc2VsZl9icGZpbmlzaCA9CisgICAgICAoc3RydWN0IGZp bmlzaF9icmVha3BvaW50X29iamVjdCAqKSBzZWxmOworICBpbnQgdHlwZSA9 IGJwX2JyZWFrcG9pbnQ7CisgIFB5T2JqZWN0ICpmcmFtZV9vYmogPSBOVUxM OworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsICpwcmV2X2ZyYW1lOwor ICBzdHJ1Y3QgZnJhbWVfaWQgZnJhbWVfaWQ7CisgIFB5T2JqZWN0ICppbnRl cm5hbCA9IE5VTEw7CisgIGludCBpbnRlcm5hbF9icCA9IDA7CisgIENPUkVf QUREUiBmaW5pc2hfcGMsIHBjOworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4 Y2VwdGlvbiBleGNlcHQ7CisgIGNoYXIgKmFkZHJfc3RyLCBzbWFsbF9idWZb MTAwXTsKKyAgc3RydWN0IHN5bWJvbCAqZnVuY3Rpb247CisKKyAgaWYgKCEg UHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzIChhcmdzLCBrd2FyZ3MsICJP fE8iLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZnJhbWVfb2JqLCAmaW50ZXJuYWwpKQorICAgIHJldHVybiAt MTsKKworICBpZiAoIWZyYW1lX29iaikKKyAgICBnb3RvIGludmFsaWRfZnJh bWU7CisgIAorICBmcmFtZSA9IGZyYW1lX29iamVjdF90b19mcmFtZV9pbmZv IChmcmFtZV9vYmopOworICBpZiAoZnJhbWUgPT0gTlVMTCkKKyAgICBnb3Rv IGludmFsaWRfZnJhbWU7CisgIAorICBwcmV2X2ZyYW1lID0gZ2V0X3ByZXZf ZnJhbWUgKGZyYW1lKTsKKyAgaWYgKHByZXZfZnJhbWUgPT0gMCkKKyAgICB7 CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIAor ICAgICAgICAgICBfKCJcIkZpbmlzaEJyZWFrcG9pbnRcIiBub3QgbWVhbmlu Z2Z1bCBpbiB0aGUgb3V0ZXJtb3N0IGZyYW1lLiIpKTsKKyAgICAgIHJldHVy biAtMTsKKyAgICB9CisgIGVsc2UgaWYgKGdldF9mcmFtZV90eXBlKHByZXZf ZnJhbWUpID09IERVTU1ZX0ZSQU1FKQorICAgICAgeworICAgICAgICBQeUVy cl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAg ICAgICBfKCJcIkZpbmlzaEJyZWFrcG9pbnRcIiBjYW5ub3QgYmUgc2V0IG9u IGEgZHVtbXkgZnJhbWUuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAg ICB9CisKKyAgZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKHByZXZfZnJhbWUp OworICBpZiAoZnJhbWVfaWRfZXEgKGZyYW1lX2lkLCBudWxsX2ZyYW1lX2lk KSkKKyAgICBnb3RvIGludmFsaWRfZnJhbWU7CisKKyAgaWYgKGludGVybmFs KQorICAgIHsKKyAgICAgIGludGVybmFsX2JwID0gUHlPYmplY3RfSXNUcnVl IChpbnRlcm5hbCk7CisgICAgICBpZiAoaW50ZXJuYWxfYnAgPT0gLTEpIAor ICAgICAgICB7CisgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19W YWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo ZSB2YWx1ZSBvZiBgaW50ZXJuYWwnIG11c3QgYmUgYSBib29sZWFuLiIpKTsK KyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAg LyogRmluZCB0aGUgZnVuY3Rpb24gd2Ugd2lsbCByZXR1cm4gZnJvbS4gICov CisgIHNlbGZfYnBmaW5pc2gtPnJldHVybl90eXBlID0gTlVMTDsKKyAgc2Vs Zl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSA9IE5VTEw7CisgIGlmIChnZXRf ZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChmcmFtZSwgJnBjKSkKKyAgICB7Cisg ICAgICBmdW5jdGlvbiA9IGZpbmRfcGNfZnVuY3Rpb24gKHBjKTsKKyAgICAg IGlmIChmdW5jdGlvbiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAg c3RydWN0IHR5cGUgKnJldF90eXBlID0gVFlQRV9UQVJHRVRfVFlQRSAoU1lN Qk9MX1RZUEUgKGZ1bmN0aW9uKSk7CisKKyAgICAgICAgICAvKiBSZW1lbWJl ciBvbmx5IG5vbi1WT0lEIHJldHVybiB0eXBlcy4gICovCisgICAgICAgICAg aWYgKFRZUEVfQ09ERSAocmV0X3R5cGUpICE9IFRZUEVfQ09ERV9WT0lEKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZWxmX2JwZmluaXNoLT5y ZXR1cm5fdHlwZSA9IHR5cGVfdG9fdHlwZV9vYmplY3QgKHJldF90eXBlKTsK KyAgICAgICAgICAgICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSA9 CisgICAgICAgICAgICAgICAgICB0eXBlX3RvX3R5cGVfb2JqZWN0IChTWU1C T0xfVFlQRSAoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKworICBicHB5X3BlbmRpbmdfb2JqZWN0ID0gc2VsZl9icDsK KyAgYnBweV9wZW5kaW5nX29iamVjdC0+bnVtYmVyID0gLTE7CisgIGJwcHlf cGVuZGluZ19vYmplY3QtPmJwID0gTlVMTDsKKworICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIC8qIFNldCBh IGJyZWFrcG9pbnQgb24gdGhlIHJldHVybiBhZGRyZXNzLiAgKi8KKyAgICAg IGZpbmlzaF9wYyA9IGdldF9mcmFtZV9wYyAocHJldl9mcmFtZSk7CisgICAg ICBzcHJpbnRmIChzbWFsbF9idWYsICIqJXMiLCBoZXhfc3RyaW5nIChmaW5p c2hfcGMpKTsKKyAgICAgIGFkZHJfc3RyID0gc21hbGxfYnVmOworCisgICAg ICBjcmVhdGVfYnJlYWtwb2ludCAocHl0aG9uX2dkYmFyY2gsCisgICAgICAg ICAgICAgICAgICAgICAgICAgYWRkcl9zdHIsIE5VTEwsIC0xLAorICAgICAg ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgMSAvKnRlbXBfZmxhZyovLAorICAgICAgICAgICAgICAgICAgICAgICAg IGJwX2JyZWFrcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICBBVVRPX0JPT0xFQU5fVFJVRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAmYmtwdF9icmVha3BvaW50X29w cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCBpbnRlcm5hbF9i cCk7CisgICAgfQorICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgewor ICAgICAgUHlFcnJfRm9ybWF0IChleGNlcHQucmVhc29uID09IFJFVFVSTl9R VUlUCisgICAgICAgICAgICAgICAgICAgID8gUHlFeGNfS2V5Ym9hcmRJbnRl cnJ1cHQgOiBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAg ICAgICIlcyIsIGV4Y2VwdC5tZXNzYWdlKTsKKyAgICAgIHJldHVybiAtMTsK KyAgICB9CisgIEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQgKHNlbGZfYnApOwor ICAKKyAgc2VsZl9icC0+YnAtPmZyYW1lX2lkID0gZnJhbWVfaWQ7CisgIAor ICByZXR1cm4gMDsKKyAgCisgaW52YWxpZF9mcmFtZToKKyAgUHlFcnJfU2V0 U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAg ICBfKCJJbnZhbGlkIElEIGZvciB0aGUgYGZyYW1lJyBvYmplY3QuIikpOwor ICByZXR1cm4gLTE7Cit9CisKKy8qIFJldHVybnMgMSBpZiBPQkogaXMgbm90 IE5VTEwgYW5kIHJlZmVyZW5jZXMgYSBGaW5pc2hCcmVha3BvaW50IG9iamVj dC4gICovCisKK2ludAorYnBmaW5pc2hweV9pc19maW5pc2hfYnAgKFB5T2Jq ZWN0ICpvYmopCit7CisgIHJldHVybiBvYmogIT0gTlVMTAorICAgICAgICAg JiYgUHlPYmplY3RfVHlwZUNoZWNrIChvYmosICZmaW5pc2hfYnJlYWtwb2lu dF9vYmplY3RfdHlwZSk7Cit9CisKKy8qIENhbGxlZCB3aGVuIEdEQiBub3Rp Y2VzIHRoYXQgdGhlIGZpbmlzaCBicmVha3BvaW50IEJQX09CSiBpcyBvdXQg b2YKKyAgIHRoZSBjdXJyZW50IGNhbGxzdGFjay4gVHJpZ2dlcnMgdGhlIG1l dGhvZCBPVVRfT0ZfU0NPUEUgaWYgaW1wbGVtZW50ZWQsCisgICB0aGVuIGRl bGV0ZSB0aGUgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyB2b2lkCiticGZp bmlzaHB5X291dF9vZl9zY29wZSAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50 X29iamVjdCAqYnBmaW5pc2hfb2JqKQoreworICBicmVha3BvaW50X29iamVj dCAqYnBfb2JqID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIGJwZmluaXNoX29i ajsKKyAgUHlPYmplY3QgKnB5X29iaiA9IChQeU9iamVjdCAqKSBicF9vYmo7 CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKHB5X29iaiwgb3V0 b2ZzY29wZV9mdW5jKSkKKyAgICB7CisgICAgICBpZiAoIVB5T2JqZWN0X0Nh bGxNZXRob2QgKHB5X29iaiwgb3V0b2ZzY29wZV9mdW5jLCBOVUxMKSkKKyAg ICAgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICB9CisKKyAgZGVs ZXRlX2JyZWFrcG9pbnQgKGJwZmluaXNoX29iai0+cHlfYnAuYnApOworfQor CisvKiBDYWxsYmFjayBmb3IgYGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29w ZScuICBUcmlnZ2VycyBQeXRob24ncworICAgYEItPm91dF9vZl9zY29wZScg ZnVuY3Rpb24gaWYgQiBpcyBhIEZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIGl0 cworICAgc2NvcGUgb3IgdHVybiBvZiBvdXRfb2Zfc2NvcGUgbm90aWZpY2F0 aW9uIGlmIEIgaGFzIGJlZW4gaGl0LiAgKi8KKworc3RhdGljIGludAorYnBm aW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiIChzdHJ1Y3QgYnJlYWtwb2lu dCAqYiwgdm9pZCAqYXJncykKK3sKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJw X3N0b3BwZWQgPSAoc3RydWN0IGJyZWFrcG9pbnQgKikgYXJnczsKKyAgUHlP YmplY3QgKnB5X2JwID0gKFB5T2JqZWN0ICopIGItPnB5X2JwX29iamVjdDsK KyAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdk YmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgpOworICBzdHJ1Y3QgY2xlYW51 cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVu dF9sYW5ndWFnZSk7CisgIAorICAvKiBUcmlnZ2VyIG91dF9vZl9zY29wZSBp ZiB0aGlzIGlzIGEgRmluaXNoQnJlYWtwb2ludCBhbmQgaXRzIGZyYW1lIGlz CisgICAgIG5vdCBhbnltb3JlIGluIHRoZSBjdXJyZW50IGNhbGxzdGFjay4g ICovCisgIGlmIChicGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAocHlfYnApKQor ICAgIHsKKyAgICAgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3Qg KmZpbmlzaF9icCA9CisgICAgICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtw b2ludF9vYmplY3QgKikgcHlfYnA7CisKKyAgICAgIGlmIChiID09IGJwX3N0 b3BwZWQpCisgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2Jw IChmaW5pc2hfYnApOworICAgICAgZWxzZSBpZiAoYi0+cHNwYWNlID09IGN1 cnJlbnRfaW5mZXJpb3IoKS0+cHNwYWNlCisgICAgICAgICAgICYmICghdGFy Z2V0X2hhc19yZWdpc3RlcnMKKyAgICAgICAgICAgICAgIHx8IGZyYW1lX2Zp bmRfYnlfaWQoYi0+ZnJhbWVfaWQpID09IE5VTEwpKQorICAgICAgICB7Cisg ICAgICAgICAgYnBmaW5pc2hweV9vdXRfb2Zfc2NvcGUgKGZpbmlzaF9icCk7 CisgICAgICAgIH0KKyAgICB9CisgIAorICBkb19jbGVhbnVwcyAoY2xlYW51 cCk7CisgIAorICByZXR1cm4gMDsKK30KKworLyogQXR0YWNoZWQgdG8gYHN0 b3AnIG5vdGlmaWNhdGlvbnMsIGNoZWNrIGlmIHRoZSBleGVjdXRpb24gaGFz IHJ1biBvdXRnCisgICBvdXQgb2YgdGhlIHNjb3BlIG9mIGFueSBGaW5pc2hC cmVha3BvaW50IGJlZm9yZSBpdCBoYXMgYmVlbiBoaXQuICAqLworCitzdGF0 aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfc3RvcCAoc3RydWN0IGJwc3Rh dHMgKmJzLCBpbnQgcHJpbnRfZnJhbWUpCit7CisgIGl0ZXJhdGVfb3Zlcl9i cmVha3BvaW50cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzID09IE5VTEwgPyBOVUxM IDogYnMtPmJyZWFrcG9pbnRfYXQpOworfQorCisvKiBBdHRhY2hlZCB0byBg ZXhpdCcgbm90aWZpY2F0aW9ucywgdHJpZ2dlcnMgYWxsIHRoZSBuZWNlc3Nh cnkgb3V0IG9mCisgICBzY29wZSBub3RpZmljYXRpb25zLiAgKi8KKworc3Rh dGljIHZvaWQKK2JwZmluaXNocHlfaGFuZGxlX2V4aXQgKHN0cnVjdCBpbmZl cmlvciAqaW5mKQoreworICBpdGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJw ZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiwgTlVMTCk7Cit9CisKKy8q IEluaXRpYWxpemUgdGhlIFB5dGhvbiBmaW5pc2ggYnJlYWtwb2ludCBjb2Rl LiAgKi8KKwordm9pZAorZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3Bv aW50cyAodm9pZCkKK3sKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJmZpbmlzaF9i cmVha3BvaW50X29iamVjdF90eXBlKSA8IDApCisgICAgICByZXR1cm47Cisg IAorICBQeV9JTkNSRUYgKCZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlw ZSk7CisgIFB5TW9kdWxlX0FkZE9iamVjdCAoZ2RiX21vZHVsZSwgIkZpbmlz aEJyZWFrcG9pbnQiLAorICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVj dCAqKSAmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOworICAgIAor ICBvYnNlcnZlcl9hdHRhY2hfbm9ybWFsX3N0b3AgKGJwZmluaXNocHlfaGFu ZGxlX3N0b3ApOworICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfZXhpdCAo YnBmaW5pc2hweV9oYW5kbGVfZXhpdCk7Cit9CisKK3N0YXRpYyBQeUdldFNl dERlZiBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0W10gPSB7Cisg IHsgInJldHVybl92YWx1ZSIsIGJwZmluaXNocHlfZ2V0X3JldHVybnZhbHVl LCBOVUxMLAorICAiZ2RiLlZhbHVlIG9iamVjdCByZXByZXNlbnRpbmcgdGhl IHJldHVybiB2YWx1ZSwgaWYgYW55LiBcCitOb25lIG90aGVyd2lzZS4iLCBO VUxMIH0sCisgICAgeyBOVUxMIH0gIC8qIFNlbnRpbmVsLiAgKi8KK307CisK K3N0YXRpYyBQeVR5cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0 X3R5cGUgPQoreworICBQeU9iamVjdF9IRUFEX0lOSVQgKE5VTEwpCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypvYl9zaXplKi8KKyAg ImdkYi5GaW5pc2hCcmVha3BvaW50IiwgICAgICAgICAvKnRwX25hbWUqLwor ICBzaXplb2YgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QpLCAg Lyp0cF9iYXNpY3NpemUqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qdHBfaXRlbXNpemUqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXBy Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Fz X251bWJlciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Lyp0cF9hc19zZXF1ZW5jZSovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19i dWZmZXIqLworICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JB U0VUWVBFLCAgLyp0cF9mbGFncyovCisgICJHREIgZmluaXNoIGJyZWFrcG9p bnQgb2JqZWN0IiwgLyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJl ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf d2Vha2xpc3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwor ICBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0LC8qIHRwX2dldHNl dCAqLworICAmYnJlYWtwb2ludF9vYmplY3RfdHlwZSwgICAgICAgIC8qIHRw X2Jhc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9kaWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICBi cGZpbmlzaHB5X2luaXQsICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxv YyAqLworICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X25ldyAqLworfTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktZnJhbWUu YyBiL2dkYi9weXRob24vcHktZnJhbWUuYwppbmRleCAzOThjZTg0Li5jNDQ5 NGNiIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LWZyYW1lLmMKKysrIGIv Z2RiL3B5dGhvbi9weS1mcmFtZS5jCkBAIC02MCw5ICs2MCwxMCBAQCBzdGF0 aWMgUHlUeXBlT2JqZWN0IGZyYW1lX29iamVjdF90eXBlOwogICAgb2JqZWN0 LiAgSWYgdGhlIGZyYW1lIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSAodGhlIGZy YW1lIGlkIGRvZXNuJ3QKICAgIGNvcnJlc3BvbmQgdG8gYW55IGZyYW1lIGlu IHRoZSBpbmZlcmlvciksIHJldHVybnMgTlVMTC4gICovCiAKLXN0YXRpYyBz dHJ1Y3QgZnJhbWVfaW5mbyAqCi1mcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5m byAoZnJhbWVfb2JqZWN0ICpmcmFtZV9vYmopCitzdHJ1Y3QgZnJhbWVfaW5m byAqCitmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoUHlPYmplY3QgKm9i aikKIHsKKyAgZnJhbWVfb2JqZWN0ICpmcmFtZV9vYmogPSAoZnJhbWVfb2Jq ZWN0ICopIG9iajsgIAogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CiAK ICAgZnJhbWUgPSBmcmFtZV9maW5kX2J5X2lkIChmcmFtZV9vYmotPmZyYW1l X2lkKTsKQEAgLTEwMyw3ICsxMDQsNyBAQCBmcmFweV9pc192YWxpZCAoUHlP YmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICBzdHJ1Y3QgZnJh bWVfaW5mbyAqZnJhbWU7CiAKLSAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9f ZnJhbWVfaW5mbyAoKGZyYW1lX29iamVjdCAqKSBzZWxmKTsKKyAgZnJhbWUg PSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoc2VsZik7CiAgIGlmIChm cmFtZSA9PSBOVUxMKQogICAgIFB5X1JFVFVSTl9GQUxTRTsKIApAQCAtMTI0 LDcgKzEyNSw3IEBAIGZyYXB5X25hbWUgKFB5T2JqZWN0ICpzZWxmLCBQeU9i amVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01B U0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChm cmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVR VUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBmaW5kX2ZyYW1l X2Z1bm5hbWUgKGZyYW1lLCAmbmFtZSwgJmxhbmcsIE5VTEwpOwogICAgIH0K QEAgLTE1Myw3ICsxNTQsNyBAQCBmcmFweV90eXBlIChQeU9iamVjdCAqc2Vs ZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJF VFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZB TElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgdHlw ZSA9IGdldF9mcmFtZV90eXBlIChmcmFtZSk7CiAgICAgfQpAQCAtMTc0LDcg KzE3NSw3IEBAIGZyYXB5X3Vud2luZF9zdG9wX3JlYXNvbiAoUHlPYmplY3Qg KnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAg ICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAgICAgfQog ICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKIApAQCAtMTk1 LDcgKzE5Niw3IEBAIGZyYXB5X3BjIChQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNL X0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJh bWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJ UkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgcGMgPSBnZXRfZnJh bWVfcGMgKGZyYW1lKTsKICAgICB9CkBAIC0yMTYsNyArMjE3LDcgQEAgZnJh cHlfYmxvY2sgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAog ICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsK LSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikg c2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2Vs ZiwgZnJhbWUpOwogICAgICAgYmxvY2sgPSBnZXRfZnJhbWVfYmxvY2sgKGZy YW1lLCBOVUxMKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9O IChleGNlcHQpOwpAQCAtMjU3LDcgKzI1OCw3IEBAIGZyYXB5X2Z1bmN0aW9u IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZy YW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1l KTsKIAogICAgICAgc3ltID0gZmluZF9wY19mdW5jdGlvbiAoZ2V0X2ZyYW1l X2FkZHJlc3NfaW5fYmxvY2sgKGZyYW1lKSk7CiAgICAgfQpAQCAtMzE5LDcg KzMyMCw3IEBAIGZyYXB5X29sZGVyIChQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNL X0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJh bWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJ UkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgcHJldiA9IGdldF9w cmV2X2ZyYW1lIChmcmFtZSk7CiAgICAgICBpZiAocHJldikKQEAgLTM0OCw3 ICszNDksNyBAQCBmcmFweV9uZXdlciAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFT S19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZy YW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIG5leHQgPSBnZXRf bmV4dF9mcmFtZSAoZnJhbWUpOwogICAgICAgaWYgKG5leHQpCkBAIC0zNzcs NyArMzc4LDcgQEAgZnJhcHlfZmluZF9zYWwgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQg KChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBmaW5kX2Zy YW1lX3NhbCAoZnJhbWUsICZzYWwpOwogICAgICAgc2FsX29iaiA9IHN5bXRh Yl9hbmRfbGluZV90b19zYWxfb2JqZWN0IChzYWwpOwpAQCAtNDMzLDcgKzQz NCw3IEBAIGZyYXB5X3JlYWRfdmFyIChQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKmFyZ3MpCiAKICAgICAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCiAJewotCSAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1l X29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisJICBGUkFQWV9SRVFVSVJFX1ZB TElEIChzZWxmLCBmcmFtZSk7CiAKIAkgIGlmICghYmxvY2spCiAJICAgIGJs b2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChmcmFtZSwgTlVMTCk7CkBAIC00NjEs NyArNDYyLDcgQEAgZnJhcHlfcmVhZF92YXIgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQg KChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICB2YWwgPSBy ZWFkX3Zhcl92YWx1ZSAodmFyLCBmcmFtZSk7CiAgICAgfQpAQCAtNDc2LDEy ICs0NzcsMTEgQEAgc3RhdGljIFB5T2JqZWN0ICoKIGZyYXB5X3NlbGVjdCAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZmk7Ci0gIGZyYW1lX29iamVjdCAqZnJhbWUgPSAoZnJh bWVfb2JqZWN0ICopIHNlbGY7CiAgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhj ZXB0aW9uIGV4Y2VwdDsKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQg KGZyYW1lLCBmaSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxm LCBmaSk7CiAKICAgICAgIHNlbGVjdF9mcmFtZSAoZmkpOwogICAgIH0KZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmggYi9nZGIv cHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCmluZGV4IGU1OTM2MTIuLjQ2ZjA4 ZWQgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgK KysrIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaApAQCAtMTIwLDkg KzEyMCw0NyBAQCBleHRlcm4gUHlUeXBlT2JqZWN0IHN5bWJvbF9vYmplY3Rf dHlwZTsKIGV4dGVybiBQeVR5cGVPYmplY3QgZXZlbnRfb2JqZWN0X3R5cGU7 CiBleHRlcm4gUHlUeXBlT2JqZWN0IGV2ZW50c19vYmplY3RfdHlwZTsKIGV4 dGVybiBQeVR5cGVPYmplY3Qgc3RvcF9ldmVudF9vYmplY3RfdHlwZTsKK2V4 dGVybiBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZTsKKwor dHlwZWRlZiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QKK3sKKyAgUHlPYmpl Y3RfSEVBRAorCisgIC8qIFRoZSBicmVha3BvaW50IG51bWJlciBhY2NvcmRp bmcgdG8gZ2RiLiAgKi8KKyAgaW50IG51bWJlcjsKKworICAvKiBUaGUgZ2Ri IGJyZWFrcG9pbnQgb2JqZWN0LCBvciBOVUxMIGlmIHRoZSBicmVha3BvaW50 IGhhcyBiZWVuCisgICAgIGRlbGV0ZWQuICAqLworICBzdHJ1Y3QgYnJlYWtw b2ludCAqYnA7Cit9IGJyZWFrcG9pbnRfb2JqZWN0OworCisvKiBSZXF1aXJl IHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRo cm93IGEgUHl0aG9uCisgICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4g ICovCisjZGVmaW5lIEJQUFlfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoKEJyZWFrcG9pbnQpLT5i cCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRp bWVFcnJvciwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxp ZC4iKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAgICAgICAgICAg ICBcCisgICAgfSB3aGlsZSAoMCkKKworLyogUmVxdWlyZSB0aGF0IEJSRUFL UE9JTlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhv bgorICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICBUaGlzIG1hY3Jv IGlzIGZvciB1c2UgaW4gc2V0dGVyIGZ1bmN0aW9ucy4gICovCisjZGVmaW5l IEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgUHlFcnJfRm9ybWF0 IChQeUV4Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52 YWxpZC4iKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKEJyZWFrcG9p bnQpLT5udW1iZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKworLyogVmFyaWFibGVz IHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBCcmVha3Bv aW50CisgICBjb25zdHJ1Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRl ZCBob29rIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBicmVha3BvaW50X29iamVj dCAqYnBweV9wZW5kaW5nX29iamVjdDsKIAotLyogRGVmaW5lZCBpbiBweS1i cmVha3BvaW50LmMgKi8KLXR5cGVkZWYgc3RydWN0IGJyZWFrcG9pbnRfb2Jq ZWN0IGJyZWFrcG9pbnRfb2JqZWN0OwogCiB0eXBlZGVmIHN0cnVjdAogewpA QCAtMTg4LDYgKzIyNiw5IEBAIHN0cnVjdCB2YWx1ZSAqY29udmVydF92YWx1 ZV9mcm9tX3B5dGhvbiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3QgdHlwZSAq dHlwZV9vYmplY3RfdG9fdHlwZSAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qg c3ltdGFiICpzeW10YWJfb2JqZWN0X3RvX3N5bXRhYiAoUHlPYmplY3QgKm9i aik7CiBzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lICpzYWxfb2JqZWN0X3RvX3N5 bXRhYl9hbmRfbGluZSAoUHlPYmplY3QgKm9iaik7CitzdHJ1Y3QgZnJhbWVf aW5mbyAqZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpm cmFtZV9vYmopOworCitpbnQgYnBmaW5pc2hweV9pc19maW5pc2hfYnAgKFB5 T2JqZWN0ICpvYmopOwogCiB2b2lkIGdkYnB5X2luaXRpYWxpemVfYXV0b19s b2FkICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV92YWx1ZXMgKHZv aWQpOwpAQCAtMjAyLDYgKzI0Myw3IEBAIHZvaWQgZ2RicHlfaW5pdGlhbGl6 ZV9mdW5jdGlvbnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3Bz cGFjZSAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfb2JqZmlsZSAo dm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfYnJlYWtwb2ludHMgKHZv aWQpOwordm9pZCBnZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9pbnRz ICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAo dm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfcGFyYW1ldGVycyAodm9p ZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfdGhyZWFkICh2b2lkKTsKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmMgYi9nZGIvcHl0aG9uL3B5 dGhvbi5jCmluZGV4IGRmOGUzZDUuLmRiMjNiYmYgMTAwNjQ0Ci0tLSBhL2dk Yi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2RiL3B5dGhvbi9weXRob24uYwpA QCAtMTA1NCw2ICsxMDU0LDExIEBAIGdkYnB5X2JyZWFrcG9pbnRfaGFzX3B5 X2NvbmQgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBfb2JqKQogCQkg ICAgInNjcmlwdGluZyBpcyBub3Qgc3VwcG9ydGVkLiIpKTsKIH0KIAorc3Ry dWN0IGJyZWFrcG9pbnQgKgorZ2RicHlfaXNfc3RvcHBlZF9hdF9maW5pc2hf YnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9 CiAjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KIAogDApAQCAtMTI0Myw2ICsx MjQ4LDcgQEAgRW5hYmxlcyBvciBkaXNhYmxlcyBwcmludGluZyBvZiBQeXRo b24gc3RhY2sgdHJhY2VzLiIpLAogICBnZGJweV9pbml0aWFsaXplX3BzcGFj ZSAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9vYmpmaWxlICgpOwogICBnZGJw eV9pbml0aWFsaXplX2JyZWFrcG9pbnRzICgpOworICBnZGJweV9pbml0aWFs aXplX2ZpbmlzaGJyZWFrcG9pbnRzICgpOwogICBnZGJweV9pbml0aWFsaXpl X2xhenlfc3RyaW5nICgpOwogICBnZGJweV9pbml0aWFsaXplX3RocmVhZCAo KTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9pbmZlcmlvciAoKTsKZGlmZiAtLWdp dCBhL2dkYi9weXRob24vcHl0aG9uLmggYi9nZGIvcHl0aG9uL3B5dGhvbi5o CmluZGV4IGNlMGViMzUuLmUzNDFkNzYgMTAwNjQ0Ci0tLSBhL2dkYi9weXRo b24vcHl0aG9uLmgKKysrIGIvZ2RiL3B5dGhvbi9weXRob24uaApAQCAtMjEs NiArMjEsNyBAQAogI2RlZmluZSBHREJfUFlUSE9OX0gKIAogI2luY2x1ZGUg InZhbHVlLmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgogCiBzdHJ1Y3Qg YnJlYWtwb2ludF9vYmplY3Q7CiAKQEAgLTQ3LDQgKzQ4LDUgQEAgaW50IGdk YnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJw X29iaik7CiAKIGludCBnZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChz dHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7CiAKK3N0cnVjdCBi cmVha3BvaW50ICpnZGJweV9pc19zdG9wcGVkX2F0X2ZpbmlzaF9icCAoYnBz dGF0IHN0b3BfYnBzdGF0KTsKICNlbmRpZiAvKiBHREJfUFlUSE9OX0ggKi8K ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVh a3BvaW50LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVh a3BvaW50LmV4cAppbmRleCBlMGRkMDg3Li4wZTNhZGJkIDEwMDY0NAotLS0g YS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAK KysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQu ZXhwCkBAIC00NCw3ICs0NCw4IEBAIGdkYl9weV90ZXN0X3NpbGVudF9jbWQg InB5dGhvbiBibGlzdCA9IGdkYi5icmVha3BvaW50cygpIiAiR2V0IEJyZWFr cG9pbnQgTGlzdCIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBc XSIgIjxnZGIuQnJlYWtwb2ludCBvYmplY3QgYXQgJGhleD4iICJDaGVjayBv YmogZXhpc3RzIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxd LmxvY2F0aW9uIiAibWFpbi4iICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9u IgogCi1nZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiQnJl YWsgYXQgbXVsdGlwbHkuIl0KK3NldCBtdWx0X2xpbmUgW2dkYl9nZXRfbGlu ZV9udW1iZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitnZGJfYnJlYWtwb2lu dCAke211bHRfbGluZX0KIGdkYl9jb250aW51ZV90b19icmVha3BvaW50ICJC cmVhayBhdCBtdWx0aXBseS4iCiAKICMgQ2hlY2sgdGhhdCB0aGUgUHl0aG9u IGJyZWFrcG9pbnQgY29kZSBub3RlZCB0aGUgYWRkaXRpb24gb2YgYQpAQCAt NTQsNyArNTUsOSBAQCBnZGJfdGVzdCAicHl0aG9uIHByaW50IGxlbihibGlz dCkiICIyIiAiQ2hlY2sgZm9yIHR3byBicmVha3BvaW50cyIKIGdkYl90ZXN0 ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXSIgIjxnZGIuQnJlYWtwb2ludCBv YmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3RzIgogZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBibGlzdFxbMFxdLmxvY2F0aW9uIiAibWFpbi4iICJD aGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogZ2RiX3Rlc3QgInB5dGhvbiBw cmludCBibGlzdFxbMVxdIiAiPGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAk aGV4PiIgIkNoZWNrIG9iaiBleGlzdHMiCi1nZGJfdGVzdCAicHl0aG9uIHBy aW50IGJsaXN0XFsxXF0ubG9jYXRpb24iICJweS1icmVha3BvaW50XC5jOjQx KiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCisKK2dkYl90ZXN0ICJw eXRob24gcHJpbnQgYmxpc3RcWzFcXS5sb2NhdGlvbiIgInB5LWJyZWFrcG9p bnRcLmM6JHttdWx0X2xpbmV9KiIgXAorICAgICAgICAgIkNoZWNrIGJyZWFr cG9pbnQgbG9jYXRpb24iCiAKICMgQ2hlY2sgaGl0IGFuZCBpZ25vcmUgY291 bnRzLiAKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXS5oaXRf Y291bnQiICIxIiAiQ2hlY2sgYnJlYWtwb2ludCBoaXQgY291bnQiCmRpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJy ZWFrcG9pbnQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjViNzA4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYwpAQCAtMCww ICsxLDk3IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0 aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyovCisKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50IGluY3JlYXNl XzEgKGludCAqYSkKK3sKKyAgKmEgKz0gMTsKKyAgcmV0dXJuIC01OworfQor Cit2b2lkIGluY3JlYXNlIChpbnQgKmEpCit7CisgIGluY3JlYXNlXzEgKGEp OworfQorCitpbnQKK3Rlc3RfMSAoaW50IGksIGludCBqKQoreworICByZXR1 cm4gaSA9PSBqOworfQorCitpbnQKK3Rlc3QoaW50IGksIGludCBqKQorewor ICByZXR1cm4gdGVzdF8xIChpLCBqKTsKK30KKworaW50CitjYWxsX2xvbmdq bXBfMSAoam1wX2J1ZiAqYnVmKQoreworICBsb25nam1wICgqYnVmLCAxKTsK K30KKworaW50CitjYWxsX2xvbmdqbXAgKGptcF9idWYgKmJ1ZikKK3sKKyAg Y2FsbF9sb25nam1wXzEgKGJ1Zik7Cit9CisKK3ZvaWQKK3Rlc3RfZXhlY19l eGl0KGludCBkb19leGl0KQoreworICBpZiAoZG9fZXhpdCkKKyAgICBleGl0 KDApOworICBlbHNlCisgICAgZXhlY2wgKCIvYmluL2VjaG8iLCAiZWNobyIs ICItMSIsIChjaGFyICopMCk7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywg Y2hhciAqYXJndltdKQoreworICBqbXBfYnVmIGVudjsKKyAgaW50IGZvbyA9 IDU7CisgIGludCBiYXIgPSA0MjsKKyAgaW50IGksIGo7CisKKyAgZ2V0cGlk KCk7CisKKyAgaSA9IDA7CisgIC8qIEJyZWFrIGF0IGluY3JlYXNlLiAqLwor ICBpbmNyZWFzZSAoJmkpOworICBpbmNyZWFzZSAoJmkpOworICBpbmNyZWFz ZSAoJmkpOworCisgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgIHsK KyAgICAgIGogKz0gMTsgLyogQ29uZGl0aW9uIEJyZWFrLiAqLworICAgIH0K KworICBpZiAoc2V0am1wIChlbnYpID09IDApIC8qIGxvbmdqbXAgY2F1Z2h0 ICovCisgICAgeworICAgICAgY2FsbF9sb25nam1wICgmZW52KTsKKyAgICB9 CisgIGVsc2UKKyAgICBqICs9IDE7IC8qIGFmdGVyIGxvbmdqbXAuICovCisK KyAgdGVzdF9leGVjX2V4aXQoMSk7CisKKyAgcmV0dXJuIGo7IC8qIEJyZWFr IGF0IGVuZC4gKi8KK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDNiZWYKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQuZXhwCkBAIC0wLDAgKzEsMjMwIEBACisjIENvcHly aWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg dGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisj IGV4cG9zaW5nIHZhbHVlcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxldmVs IHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2FkX2xp YiBnZGItcHl0aG9uLmV4cAorCitzZXQgdGVzdGZpbGUgInB5LWZpbmlzaC1i cmVha3BvaW50Igorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworCitpZiB7 IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3Rm aWxlfSAke3NyY2ZpbGV9XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworc2V0 IHJlbW90ZV9weXRob25fZmlsZSBbcmVtb3RlX2Rvd25sb2FkIGhvc3QgJHtz cmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5weV0KKworCisjIFNraXAg YWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQu CitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKwor IworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gbm9ybWFsIGNvbmRpdGlv bnMKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitpZiAhW3J1 bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFp bi4iCisgICAgcmV0dXJuIDAKK30KK2dkYl90ZXN0X25vX291dHB1dCAic2V0 IGNvbmZpcm0gb2ZmIiAiZGlzYWJsZSBjb25maXJtYXRpb24iCitnZGJfdGVz dCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0 IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlw dHMiCitnZGJfYnJlYWtwb2ludCAiaW5jcmVhc2VfMSIKK2dkYl90ZXN0ICJj b250aW51ZSIgIkJyZWFrcG9pbnQgLiphdC4qIiAiY29udGludWUgdG8gdGhl IGZ1bmN0aW9uIHRvIGZpbmlzaCIKKworIyBzZXQgRmluaXNoQnJlYWtwb2lu dAorCitnZGJfdGVzdCAicHl0aG9uIGZpbmlzaGJwID0gTXlGaW5pc2hCcmVh a3BvaW50IChnZGIucGFyc2VfYW5kX2V2YWwgKCdhJyksIGdkYi5zZWxlY3Rl ZF9mcmFtZSAoKSkiIFwKKyAgICAgICAgICJUZW1wb3JhcnkgYnJlYWtwb2lu dC4qIiAic2V0IEZpbmlzaEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHl0aG9u IHByaW50IGZpbmlzaGJwLnJldHVybl92YWx1ZSIgIk5vbmUuKiIgXAorICAg ICAgICAgImNoZWNrIHJldHVybl92YWx1ZSBhdCBpbml0IgorCisjIGNoZWNr IG5vcm1hbCBicCBoaXQKKworZ2RiX3Rlc3QgImNvbnRpbnVlIiAiTXlGaW5p c2hCcmVha3BvaW50IHN0b3Agd2l0aC4qIzAuKmluY3JlYXNlLioiIFwKKyAg ICAgICAgICJjaGVjayBNeUZpbmlzaEJyZWFrcG9pbnQgaGl0IgorZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5yZXR1cm5fdmFsdWUiICItNS4q IiAiY2hlY2sgcmV0dXJuX3ZhbHVlIgorCitnZGJfdGVzdCAicHl0aG9uIHBy aW50IGZpbmlzaGJwLmlzX3ZhbGlkKCkiICJGYWxzZS4qIlwKKyAgICAgICAg ICJlbnN1cmUgdGhhdCBmaW5pc2ggYnAgaXMgaW52YWxpZCBhZmVyIG5vcm1h bCBoaXQiCisKKyMgY2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBtYWluIG5v IGFsbG93ZWQKKworZ2RiX3Rlc3QgImZpbmlzaCIgIm1haW4uKiIgInJldHVy biB0byBtYWluKCkiCitnZGJfdGVzdCAicHl0aG9uIE15RmluaXNoQnJlYWtw b2ludCAoTm9uZSwgZ2RiLnNlbGVjdGVkX2ZyYW1lICgpKSIgXAorICAgICAg ICAgIlZhbHVlRXJyb3I6IFwiRmluaXNoQnJlYWtwb2ludFwiIG5vdCBtZWFu aW5nZnVsIGluIHRoZSBvdXRlcm1vc3QgZnJhbWUuLioiIFwKKyAgICAgICAg ICJjaGVjayBGaW5pc2hCUCBub3QgYWxsb3dlZCBpbiBtYWluIgorCisjCisj IFRlc3QgRmluaXNoQnJlYWtwb2ludCB3aXRoIG5vIGRlYnVnIHN5bWJvbCAK KyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAi c291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGlt cG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMi CitzZXQgY29uZF9saW5lIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJDb25kaXRp b24gQnJlYWsuIl0KKworaWYgIVtydW50byAiZ2V0cGlkIl0gdGhlbiB7Cisg ICAgZmFpbCAiQ2Fubm90IHJ1biB0byBnZXRwaWQuIgorICAgIHJldHVybiAw Cit9CisKK2dkYl90ZXN0ICJweXRob24gZmluaXNoQlAgPSBTaW1wbGVGaW5p c2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiIFwKKyAgICAgICAg ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQiIFwKKyAgICAgICAgICJz ZXQgZmluaXNoIGJyZWFrcG9pbnQiCitnZGJfdGVzdCAiY29udGludWUiICJT aW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3AuKiIgImNoZWNrIEZpbmlzaEJy ZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hC UC5yZXR1cm5fdmFsdWUiICJOb25lIiAiY2hlY2sgcmV0dXJuIHZhbHVlIHdp dGhvdXQgZGVidWcgc3ltYm9sIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtw b2ludCBpbiBmdW5jdGlvbiByZXR1cm5lZCBieSBsb25nam1wIAorIworCitj bGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2Ug JHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQu KiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworaWYg IVtydW50byBjYWxsX2xvbmdqbXBfMV0gdGhlbiB7CisgICAgcGVycm9yICJj b3VsZG4ndCBydW4gdG8gYnJlYWtwb2ludCBjYWxsX2xvbmdqbXAiCisgICAg Y29udGludWUKK30KKworZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicCA9IFNp bXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgXAor ICAgICAgICAgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgXAorICAg ICAgICAgInNldCBmaW5pc2ggYnJlYWtwb2ludCIgCitnZGJfdGVzdCAiYnJl YWsgW2dkYl9nZXRfbGluZV9udW1iZXIgImFmdGVyIGxvbmdqbXAuIl0iICJC cmVha3BvaW50LiogYXQgLioiIFwKKyAgICAgICAgICJzZXQgQlAgYWZ0ZXIg dGhlIGp1bXAiCitnZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hC cmVha3BvaW50IG91dCBvZiBzY29wZS4qIiBcCisgICAgICAgICAiY2hlY2sg RmluaXNoQlAgb3V0IG9mIHNjb3BlIG5vdGlmaWNhdGlvbiIKK2dkYl90ZXN0 ICJweXRob24gcHJpbnQgZmluaXNoYnAuaXNfdmFsaWQoKSIgIkZhbHNlLioi XAorICAgICAgICAgImVuc3VyZSB0aGF0IGZpbmlzaCBicCBpcyBpbnZhbGlk IGFmZXIgb3V0IG9mIHNjb3BlIG5vdGlmaWNhdGlvbiIKKworIworIyBUZXN0 IEZpbmlzaEJyZWFrcG9pbnQgaW4gQlAgY29uZGl0aW9uIGV2YWx1YXRpb24g CisjIChmaW5pc2ggaW4gZHVtbXkgZnJhbWUpCisjCisKK2NsZWFuX3Jlc3Rh cnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5 dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAg ICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCisKK2lmICFbcnVudG9f bWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIK KyAgICByZXR1cm4gMAorfQorICAgICAgICAgCitnZGJfdGVzdCAiYnJlYWsg JHtjb25kX2xpbmV9IGlmIHRlc3RfMShpLDgpIiAiQnJlYWtwb2ludCAuKiBh dCAuKiIgXAorICAgICAgICAgInNldCBhIGNvbmRpdGlvbmFsIEJQIgorZ2Ri X3Rlc3QgInB5dGhvbiBUZXN0QnJlYWtwb2ludCgpIiAiVGVzdEJyZWFrcG9p bnQgaW5pdCIgXAorICAgICAgICAgInNldCBGaW5pc2hCUCBpbiBhIGJyZWFr cG9pbnQgY29uZGl0aW9uIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiBcCisgICAg ICAgICAiXCJGaW5pc2hCcmVha3BvaW50XCIgY2Fubm90IGJlIHNldCBvbiBh IGR1bW15IGZyYW1lLioiIFwKKyAgICAgICAgICJkb24ndCBhbGxvdyBGaW5p c2hCcmVha3BvaW50IG9uIGR1bW15IGZyYW1lcyIKK2dkYl90ZXN0ICJwcmlu dCBpIiAiOCIgImNoZWNrIHN0b3BwZWQgbG9jYXRpb24iCisKKyMKKyMgVGVz dCBGaW5pc2hCcmVha3BvaW50IGluIEJQIGNvbmRpdGlvbiBldmFsdWF0aW9u IAorIyAoZmluaXNoIGluIG5vcm1hbCBmcmFtZSkKKyMKKworY2xlYW5fcmVz dGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVf cHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAg ICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFbcnVudG9f bWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIK KyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xp bmV9IGlmIHRlc3QoaSw4KSIgXAorICAgICAgICAgIkJyZWFrcG9pbnQgLiog YXQgLioiICJzZXQgY29uZGl0aW9uYWwgQlAiCitnZGJfdGVzdCAicHl0aG9u IFRlc3RCcmVha3BvaW50KCkiICJUZXN0QnJlYWtwb2ludCBpbml0IiAic2V0 IEJQIGluIGNvbmRpdGlvbiIKKworZ2RiX3Rlc3QgImNvbnRpbnVlIiBcCisg ICAgICAgICAidGVzdCBkb24ndCBzdG9wIDEuKnRlc3QgZG9uJ3Qgc3RvcCAy Lip0ZXN0IHN0b3AuKkVycm9yIGluIHRlc3RpbmcgYnJlYWtwb2ludCBjb25k aXRpb24uKlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hp bGUgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAg ICAgInN0b3AgaW4gY29uZGl0aW9uIGZ1bmN0aW9uIgorCitnZGJfdGVzdCAi Y29udGludWUiICJDb250aW51aW5nLioiICJmaW5pc2ggY29uZGl0aW9uIGV2 YWx1YXRpb24iCitnZGJfdGVzdCAiY29udGludWUiICJCcmVha3BvaW50Lioi ICJzdG9wIGF0IGNvbmRpdGlvbmFsIGJyZWFrcG9pbnQiCitnZGJfdGVzdCAi cHJpbnQgaSIgIjgiICJjaGVjayBzdG9wcGVkIGxvY2F0aW9uIgorCisjCisj IFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBleHBsaWNpdCBpbmZlcmlvciBm dW5jdGlvbiBjYWxsCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0K KworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0 aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5 dGhvbiBzY3JpcHRzIgorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAg IGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30K KworIyByZXR1cm4gYWRkcmVzcyBpbiBkdW1teSBmcmFtZQorCitnZGJfdGVz dCAicHl0aG9uIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQoJ2luY3JlYXNlXzEn KSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAgICJwcmVwYXJlIFRl c3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQgaW5jcmVh c2VfMSgmaSkiIFwKKyAgICAgICAgICJcIkZpbmlzaEJyZWFrcG9pbnRcIiBj YW5ub3QgYmUgc2V0IG9uIGEgZHVtbXkgZnJhbWUuKiIgXAorICAgICAgICAg ImRvbid0IGFsbG93IEZpbmlzaEJyZWFrcG9pbnQgb24gZHVtbXkgZnJhbWVz IgorCisjIHJldHVybiBhZGRyZXNzIGluIG5vcm1hbCBmcmFtZQorCitkZWxl dGVfYnJlYWtwb2ludHMKK2dkYl90ZXN0ICJweXRob24gVGVzdEV4cGxpY2l0 QnJlYWtwb2ludChcImluY3JlYXNlXzFcIikiICJCcmVha3BvaW50LiphdC4q IiBcCisgICAgICAgICAicHJlcGFyZSBUZXN0RXhwbGljaXRCcmVha3BvaW50 IgorZ2RiX3Rlc3QgInByaW50IGluY3JlYXNlKCZpKSIgXAorICAgICAgICAg IlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdC4qU2ltcGxlRmluaXNoQnJl YWtwb2ludCBzdG9wLipUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBzdG9w cGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLioiIFwK KyAgICAgICAgICJGaW5pc2hCUCBzdG9wIGF0IGR1cmluZyBleHBsaWNpdCBm dW5jdGlvbiBjYWxsIgorCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50 IHdoZW4gaW5mZXJpb3IgZXhpdHMKKyMKKworaWYgIVtydW50byAidGVzdF9l eGVjX2V4aXQiXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRl c3RfZXhlY19leGl0LiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAi cHl0aG9uIFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFt ZSgpKSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgInNldCBGaW5p c2hCUCBhZnRlciB0aGUgZXhpdCgpIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAi U2ltcGxlRmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNo IG91dCBvZiBzY29wZSBhZnRlciBleGl0IgorCisjCisjIFRlc3QgRmluaXNo QnJlYWtwb2ludCB3aGVuIGluZmVyaW9yIGV4ZWNzCisjCisKK2lmICFbcnVu dG8gInRlc3RfZXhlY19leGl0Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90 IHJ1biB0byB0ZXN0X2V4ZWNfZXhpdC4iCisgICAgcmV0dXJuIDAKK30gICAg IAorCitnZGJfdGVzdF9ub19vdXRwdXQgInNldCB2YXIgZG9fZXhpdCA9IDAi ICJzd2l0Y2ggdG8gZXhlY3ZlKCkgdGVzdCIKK2dkYl90ZXN0ICJweXRob24g U2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAi U2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFm dGVyIHRoZSBleGVjIgorZ2RiX3Rlc3QgImNhdGNoIGV4ZWMiICJDYXRjaHBv aW50LipcKGV4ZWNcKS4qIiAiY2F0Y2ggZXhlYyIKK2dkYl90ZXN0ICJjb250 aW51ZSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLioi ICJjYXRjaCBvdXQgb2Ygc2NvcGUgYWZ0ZXIgZXhlYyIKXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmMTBiMAotLS0gL2Rl di9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5weQpAQCAtMCwwICsxLDg4IEBACisjIENvcHlyaWdo dCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg R0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJl YWtwb2ludHMuCisJCQorY2xhc3MgTXlGaW5pc2hCcmVha3BvaW50KGdkYi5G aW5pc2hCcmVha3BvaW50KToKKwlkZWYgX19pbml0X18oc2VsZiwgdmFsLCBm cmFtZSk6CisJCWdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChzZWxm LCBmcmFtZSkKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBpbml0Igor CQlzZWxmLnZhbCA9IHZhbAorCQkKKwlkZWYgc3RvcChzZWxmKToKKwkJcHJp bnQgIk15RmluaXNoQnJlYWtwb2ludCBzdG9wIHdpdGggJWQiICUgaW50KHNl bGYudmFsLmRlcmVmZXJlbmNlKCkpCisJCWdkYi5leGVjdXRlKCJ3aGVyZSAx IikKKwkJcmV0dXJuIFRydWUKKwkKKwlkZWYgb3V0X29mX3Njb3BlKHNlbGYp OgorCQlwcmludCAiTXlGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZS4u LiIKKworY2xhc3MgVGVzdEJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgor ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkJyZWFrcG9p bnQuX19pbml0X18oc2VsZiwgc3BlYz0idGVzdF8xIiwgaW50ZXJuYWw9MSkK KyAgICAgICAgc2VsZi5zaWxlbnQgPSBUcnVlCisgICAgICAgIHNlbGYuY291 bnQgPSAwCisgICAgICAgIHByaW50ICJUZXN0QnJlYWtwb2ludCBpbml0Igor ICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAJc2VsZi5jb3Vu dCArPSAxCisgICAgCXRyeToKKyAgICAgICAgCVRlc3RGaW5pc2hCcmVha3Bv aW50KGdkYi5uZXdlc3RfZnJhbWUoKSwgc2VsZi5jb3VudCkKKyAgICAgICAg ZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgCXByaW50IGUKKyAg ICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFRlc3RGaW5pc2hCcmVha3Bv aW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKyAgICBkZWYgX19pbml0X18o c2VsZiwgZnJhbWUsIGNvdW50KToKKyAgICAJc2VsZi5jb3VudCA9IGNvdW50 CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fKHNlbGYs IGZyYW1lLCBpbnRlcm5hbD0xKQorICAgICAgICAKKyAgICAgICAgCisgICAg ZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHByaW50ICItLT4iLCBzZWxmLm51 bWJlcgorICAgICAgICBpZiAoc2VsZi5jb3VudCA9PSAzKToKKyAgICAgICAg ICAgIHByaW50ICJ0ZXN0IHN0b3AgLi4uICVkIiAlIHNlbGYuY291bnQKKyAg ICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICBwcmludCAidGVzdCBkb24ndCBzdG9wICVkIiAlIHNlbGYuY291bnQK KyAgICAgICAgICAgIHJldHVybiBGYWxzZSAKKyAgICAgICAgCisgICAgCisg ICAgZGVmIG91dF9vZl9zY29wZShzZWxmKToKKyAgICAgICAgcHJpbnQgInRl c3QgZGlkbid0IGZpbmlzaCAuLi4gJWQiICUgc2VsZi5jb3VudAorCitjbGFz cyBUZXN0RXhwbGljaXRCcmVha3BvaW50KGdkYi5CcmVha3BvaW50KToKKwlk ZWYgc3RvcChzZWxmKToKKwkJdHJ5OgorCQkJU2ltcGxlRmluaXNoQnJlYWtw b2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpCisJCWV4Y2VwdCBWYWx1ZUVycm9y IGFzIGU6CisJCQlwcmludCBlCisJCXJldHVybiBGYWxzZQorCitjbGFzcyBT aW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToK KwlkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorCQlnZGIuRmluaXNoQnJl YWtwb2ludC5fX2luaXRfXyAoc2VsZiwgZnJhbWUpCisJCQorCQlwcmludCAi U2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IgorCQkKKwlkZWYgc3RvcChz ZWxmKToKKwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgc3RvcCIg CisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9zY29wZShzZWxmKToK KwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3Bl Li4uIgorCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZGQiCmRpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJy ZWFrcG9pbnQyLmNjIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hMGVlYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwpA QCAtMCwwICsxLDU5IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2Yg R0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyovCisKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCit2 b2lkCit0aHJvd19leGNlcHRpb25fMSAoaW50IGUpCit7CisgIHRocm93IG5l dyBpbnQgKGUpOworfQorCit2b2lkCit0aHJvd19leGNlcHRpb24gKGludCBl KQoreworICB0aHJvd19leGNlcHRpb25fMSAoZSk7Cit9CisKK2ludAorbWFp biAodm9pZCkKK3sKKyAgaW50IGk7CisgIHRyeQorICAgIHsKKyAgICAgIHRo cm93X2V4Y2VwdGlvbl8xICgxMCk7CisgICAgfQorICBjYXRjaCAoY29uc3Qg aW50ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNlcHRp b24gIyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0KKyAgaSArPSAxOyAv KiBCcmVhayBhZnRlciBleGNlcHRpb24gMS4gICovCisKKyAgdHJ5CisgICAg eworICAgICAgdGhyb3dfZXhjZXB0aW9uICgxMCk7CisgICAgfQorICBjYXRj aCAoY29uc3QgaW50ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8 ICJFeGNlcHRpb24gIyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0KKyAg aSArPSAxOyAvKiBCcmVhayBhZnRlciBleGNlcHRpb24gMi4gICovCisKKyAg cmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTc5OGMKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLmV4cApAQCAtMCwwICsxLDY1IEBACisjIENvcHly aWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg dGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisj IGV4cG9zaW5nIHZhbHVlcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxldmVs IHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2FkX2xp YiBnZGItcHl0aG9uLmV4cAorCitzZXQgdGVzdGZpbGUgInB5LWZpbmlzaC1i cmVha3BvaW50MiIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmNjCitzZXQg YmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9CitzZXQg cHlmaWxlICAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5CisK KyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0CitnZGJfc3Rh cnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2Ri X2xvYWQgJHtiaW5maWxlfQorCitpZiB7IFtnZGJfY29tcGlsZSAiJHtzcmNk aXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0 YWJsZSB7ZGVidWcgYysrfV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgIkNv dWxkbid0IGNvbXBpbGUgJHtzcmNmaWxlfSIKKyAgICByZXR1cm4gLTEKK30K KworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3Qg cnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisKKyMKKyMgQ2hlY2sg RmluaXNoQnJlYWtwb2ludHMgYWdhaW5zdCBDKysgZXhjZXB0aW9ucworIwor CitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsg YWZ0ZXIgZXhjZXB0aW9uIDIiXQorCitnZGJfdGVzdCAic291cmNlICRweWZp bGUiICIuKlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAg ImltcG9ydCBweXRob24gc2NyaXB0cyIKKyAgICAgICAgIAorZ2RiX2JyZWFr cG9pbnQgInRocm93X2V4Y2VwdGlvbl8xIgorZ2RiX3Rlc3QgImNvbnRpbnVl IiAiQnJlYWtwb2ludCAuKnRocm93X2V4Y2VwdGlvbl8xLioiICJydW4gdG8g ZXhjZXB0aW9uIDEiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdk Yi5icmVha3BvaW50cygpKSIgIjMiICJjaGVjayBCUCBjb3VudCIKK2dkYl90 ZXN0ICJweXRob24gRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3 ZXN0X2ZyYW1lKCkpIiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50 IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVz dCAiY29udGludWUiICIuKnN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNoQnJl YWtwb2ludC4qIiAiY2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBjYXRjaCgp IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBsZW4oZ2RiLmJyZWFrcG9pbnRz KCkpIiAiMyIgImNoZWNrIGZpbmlzaCBCUCByZW1vdmFsIgorCitnZGJfdGVz dCAiY29udGludWUiICIuKkJyZWFrcG9pbnQuKiB0aHJvd19leGNlcHRpb25f MS4qIiAiY29udGludWUgdG8gc2Vjb25kIGV4Y2VwdGlvbiIKK2dkYl90ZXN0 ICJweXRob24gRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0 X2ZyYW1lKCkpIiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IiAi c2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVzdCAi Y29udGludWUiICIuKmV4Y2VwdGlvbiBkaWQgbm90IGZpbmlzaC4qIiAiRmlu aXNoQnJlYWtwb2ludCB3aXRoIGV4Y2VwdGlvbiB0aHJvd24gbm90IGNhdWdo dCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1m aW5pc2gtYnJlYWtwb2ludDIucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjllYTRjZjEKLS0tIC9kZXYvbnVsbAorKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQyLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEx IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisj IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1 aXRlLiAgSXQgdGVzdHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4K KworY2xhc3MgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNo QnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToK KyAgICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18oc2VsZiwg ZnJhbWUsIGludGVybmFsPTEpCisgICAgICAgIHNlbGYuc2lsZW50ID0gVHJ1 ZTsKKyAgICAgICAgcHJpbnQgImluaXQgRXhjZXB0aW9uRmluaXNoQnJlYWtw b2ludCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAg IHByaW50ICJzdG9wcGVkIGF0IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQi CisgICAgICAgIGdkYi5wb3N0X2V2ZW50KHNlbGYuZGVsZXRlKQorICAgICAg ICByZXR1cm4gVHJ1ZSAKKyAgICAKKyAgICBkZWYgb3V0X29mX3Njb3BlKHNl bGYpOgorICAgICAgICBwcmludCAiZXhjZXB0aW9uIGRpZCBub3QgZmluaXNo IC4uLiIKKworCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIKLS0g CjEuNy42LjQKCg== --20cf3079b870d0e4da04b00cb42a--