From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 78AAF3858D32 for ; Mon, 29 Aug 2022 13:45:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 78AAF3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661780747; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=XfS2rwTOsLWfcKk9B6/TUYt0Gm+bTJxdtup0rQpff7M=; b=WMt+H+jcfNAY59AnrZYa8Fert3Pz7pjDk007vTPW/uLZSIYf1yM/Qzr55hHa0jl6yAeQ4a MkxRk+pxRc/Ma5i5iJXFIpkoGHKI7rVvuLVXkMsI0ybdyExkf4jX6oPZJ8cjQXHBbeDe68 0DRkCl8sh5CGcUN0T+b+rqp040A7BcU= Received: from mail-ot1-f71.google.com (mail-ot1-f71.google.com [209.85.210.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-55-WMobsZT0NnS4ljsbYPRR2w-1; Mon, 29 Aug 2022 09:45:45 -0400 X-MC-Unique: WMobsZT0NnS4ljsbYPRR2w-1 Received: by mail-ot1-f71.google.com with SMTP id x22-20020a9d6d96000000b00636eec5dcb3so4601445otp.9 for ; Mon, 29 Aug 2022 06:45:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=XfS2rwTOsLWfcKk9B6/TUYt0Gm+bTJxdtup0rQpff7M=; b=mACxedFi6p91TCIL7PTn50bRJrIt3HOV6LpjxJPutDTLIeb6AZ/NnCKQOHYXx4imjD y8x681TWcVr+MuE2y48thhfg1ujKw8jhxqsj+08+BiQzeemTm2ZcFQsZRuQ/lJo98lto Bis5NucTd5S2xLzj/BH/KbxPB+Wy44TurhBLWOvAVDJQQ9Mc1hQKaLizjJIavkC6Pqea BL2tZNsudfdIRn49jeaPI/YgphsQdCvkFp2twZp65NRTkWEzVmkIqonGcM0PXMeBLQC/ PINFwo51MbOiLlRlxH/1ZA0rbNW0cNzWqqWNBzvstebm+jEVu1icZFoFSYBVpG6YJnHQ 6BOQ== X-Gm-Message-State: ACgBeo10Inml+ARxzmcWOD9G21s/z6XSG6SqQ1Ivhl7p+5YoPRUtvTvX pPxgXT1eWhKvOrRsp/VOFWi7NNDB2/mtyselxwahit4r8DJnxKKvTbvCKxVYnb0uQ9FACtmdQXg FrOli+2CACiR/qQTRcO+OaCIrgd5AN9kQ2Q== X-Received: by 2002:a05:6808:f07:b0:344:7739:8e7b with SMTP id m7-20020a0568080f0700b0034477398e7bmr7349805oiw.265.1661780745145; Mon, 29 Aug 2022 06:45:45 -0700 (PDT) X-Google-Smtp-Source: AA6agR4g9PUeVuxM8gQ7rE4INjSKC8/hVzlDExeb+T2HNZ7ThZrI8cbrZMTgJ/9P8Ew1JmPyQW8d2h72tPgaFLxldVk= X-Received: by 2002:a05:6808:f07:b0:344:7739:8e7b with SMTP id m7-20020a0568080f0700b0034477398e7bmr7349791oiw.265.1661780744818; Mon, 29 Aug 2022 06:45:44 -0700 (PDT) MIME-Version: 1.0 References: <20220823114224.904934-1-aldyh@redhat.com> In-Reply-To: From: Aldy Hernandez Date: Mon, 29 Aug 2022 15:45:33 +0200 Message-ID: Subject: Re: [PATCH] Add support for floating point endpoints to frange. To: Jakub Jelinek Cc: GCC patches , Andrew MacLeod , Andrew Pinski X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000fd9e6505e7617af7" X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000fd9e6505e7617af7 Content-Type: text/plain; charset="UTF-8" Jakub, et al... here is the latest version of the frange endpoints patch addressing the signed zero problem (well treating +-0.0 ambiguously), as well as implementing all the relational operators. [Andrew M: I mostly copied our relop code from irange, while keeping track NANs, etc. It should be pleasantly familiar.] A few notes... We can now represent things like [5.0, 5.0], which is the singleton 5.0 *or* a NAN. OTOH, we could also have [5.0, 5.0] !NAN, which is 5.0 without the possibility of a NAN. This allows us to track appropriate ranges on both sides of an if, but keep track of which side (true side) we definitely know we won't have a NAN. As mentioned, frange::singleton_p([0,0]) returns false for any version of 0.0 (unless !HONOR_SIGNED_ZEROS). I'll work on zero tracking at a later time. The patch is getting pretty large as is. For convenience, singleton_p() returns false for a NAN. IMO, it makes the implementation cleaner, but I'm not wed to the idea if someone objects. This patch passes all tests for all languages, including go and ada, with the aforementioned exception of gcc.dg/tree-ssa/phi-opt-24.c which is getting confused because we have propagated (correctly) a 0.0 into the PHI. Hints? Takers? ;-). Aldy On Fri, Aug 26, 2022 at 9:44 PM Andrew Pinski wrote: > > On Fri, Aug 26, 2022 at 12:16 PM Aldy Hernandez wrote: > > > > On Fri, Aug 26, 2022 at 7:40 PM Andrew Pinski wrote: > > > > > > On Fri, Aug 26, 2022 at 8:55 AM Aldy Hernandez wrote: > > > > > > > > [pinskia: I'm CCing you as the author of the match.pd pattern.] > > > > > > > > So, as I wrap up the work here (latest patch attached), I see there's > > > > another phiopt regression (not spaceship related). I was hoping > > > > someone could either give me a hand, or offer some guidance. > > > > > > > > The failure is in gcc.dg/tree-ssa/phi-opt-24.c. > > > > > > > > We fail to transform the following into -A: > > > > > > > > /* { dg-options "-O2 -fno-signed-zeros -fdump-tree-phiopt" } */ > > > > > > > > float f0(float A) > > > > { > > > > // A == 0? A : -A same as -A > > > > if (A == 0) return A; > > > > return -A; > > > > } > > > > > > > > This is because the abs/negative match.pd pattern here: > > > > > > > > /* abs/negative simplifications moved from fold_cond_expr_with_comparison, > > > > Need to handle (A - B) case as fold_cond_expr_with_comparison does. > > > > Need to handle UN* comparisons. > > > > ... > > > > ... > > > > > > > > Sees IL that has the 0.0 propagated. > > > > > > > > Instead of: > > > > > > > > [local count: 1073741824]: > > > > if (A_2(D) == 0.0) > > > > goto ; [34.00%] > > > > else > > > > goto ; [66.00%] > > > > > > > > [local count: 708669601]: > > > > _3 = -A_2(D); > > > > > > > > [local count: 1073741824]: > > > > # _1 = PHI > > > > > > > > It now sees: > > > > > > > > [local count: 1073741824]: > > > > # _1 = PHI <0.0(2), _3(3)> > > > > > > > > which it leaves untouched, causing the if conditional to survive. > > > > > > > > Is this something that can be done by improving the match.pd pattern, > > > > or should be done elsewhere? > > > > > > Oh the pattern which is supposed to catch this does: > > > (simplify > > > (cnd (cmp @0 zerop) integer_zerop (negate@1 @0)) > > > (if (!HONOR_SIGNED_ZEROS (type)) > > > @1)) > > > > On trunk without any patches, for the following snippet with -O2 > > -fno-signed-zeros -fdump-tree-phiopt-folding... > > > > float f0(float A) > > { > > // A == 0? A : -A same as -A > > if (A == 0) return A; > > return -A; > > } > > > > ...the phiopt2 dump file has: > > > > Applying pattern match.pd:4805, gimple-match.cc:69291, which > > corresponds to the aforementioned pattern. So it looks like that was > > the pattern that was matching that isn't any more? > > > > Are you saying this pattern should only work with integers? > > I am saying the pattern which is right after the one that matches > (without your patch) currrently works for integer only. > You could change integer_zerop to zerop in that pattern but I am not > 100% sure that is valid thing to do. > Note there are a few other patterns in that for loop that does > integer_zerop which might need to be zerop too. > > Thanks, > Andrew Pinski > > > > > Aldy > > > --000000000000fd9e6505e7617af7 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-support-for-floating-point-endpoints-to-frange.patch" Content-Disposition: attachment; filename="0001-Add-support-for-floating-point-endpoints-to-frange.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7et19cc0 RnJvbSA2N2U2MTY5M2RmZGE3ZmE2ZGFkYjBiZGRjNjJiMmQ3MGE4OGQ5ZGNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAyMyBBdWcgMjAyMiAxMzozNjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBz dXBwb3J0IGZvciBmbG9hdGluZyBwb2ludCBlbmRwb2ludHMgdG8gZnJhbmdlLgoKVGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24gb2YgZnJhbmdlIGlzIGp1c3QgYSB0eXBlIHdpdGggc29tZSBiaXRz IHRvCnJlcHJlc2VudCBOQU4gYW5kIElORi4gIFdlIGNhbiBkbyBiZXR0ZXIgYW5kIHJlcHJlc2Vu dCBlbmRwb2ludHMgdG8KdWx0aW1hdGVseSBzb2x2ZSBsb25nc3RhbmRpbmcgUFJzIHN1Y2ggYXMg UFIyNDAyMS4gIFRoaXMgcGF0Y2ggYWRkcwp0aGVzZSBlbmRwb2ludHMuICBJbiBmb2xsb3ctdXAg cGF0Y2hlcyBJIHdpbGwgYWRkIHN1cHBvcnQgZm9yCmEgYmFyZSBib25lcyBQTFVTX0VYUFIgcmFu Z2Utb3AtZmxvYXQgZW50cnkgdG8gc29sdmUgdGhlIFBSLgoKSSBoYXZlIGNob3NlbiB0byB1c2Ug UkVBTF9WQUxVRV9UWVBFcyBmb3IgdGhlIGVuZHBvaW50cywgc2luY2UgdGhhdCdzCndoYXQgd2Ug dXNlIHVuZGVybmVhdGggdGhlIHRyZWVzLiAgVGhpcyB3aWxsIGJlIHNvbWV3aGF0IGFuYWxvZ291 cyB0bwpvdXIgZXZlbnR1YWwgdXNlIG9mIHdpZGUtaW50cyBpbiB0aGUgaXJhbmdlLiAgTm8gc2Vu c2UgZ29pbmcgdGhyb3VnaAphZGRlZCBsZXZlbHMgb2YgaW5kaXJlY3Rpb24gaWYgd2UgY2FuIGF2 b2lkIGl0LiAgVGhhdCwgcGx1cyByZWFsLioKYWxyZWFkeSBoYXMgYSBuaWNlIEFQSSBmb3IgZGVh bGluZyB3aXRoIGZsb2F0cy4KCldpdGggdGhpcyBwYXRjaCwgcmFuZ2VzIHdpbGwgYmUgY2xvc2Vk IGZsb2F0IHBvaW50IGludGVydmFscywgd2hpY2gKbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gc2lt cGxlciwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHRyYWNrIG9mCm9wZW4vY2xvc2VkIGlu dGVydmFscy4gIFRoaXMgaXMgY29uc2VydmF0aXZlIGVub3VnaCBmb3IgdXNlIGluIHRoZQpyYW5n ZXIgd29ybGQsIGFzIHdlJ2QgcmF0aGVyIGVyciBvbiB0aGUgc2lkZSBvZiBtb3JlIGVsZW1lbnRz IGluIGEKcmFuZ2UsIHRoYW4gbGVzcy4KCkZvciBleGFtcGxlLCBldmVuIHRob3VnaCB3ZSBjYW5u b3QgcHJlY2lzZWx5IHJlcHJlc2VudCB0aGUgb3BlbgppbnRlcnZhbCAoMy4wLCA1LjApIHdpdGgg dGhpcyBhcHByb2FjaCwgaXQgaXMgcGVyZmVjdGFibHkgcmVhc29uYWJsZQp0byByZXByZXNlbnQg aXQgYXMgWzMuMCwgNS4wXSBzaW5jZSB0aGUgY2xvc2VkIGludGVydmFsIGlzIGEgc3VwZXIgc2V0 Cm9mIHRoZSBvcGVuIG9uZS4gIEluIHRoZSBWUlAvcmFuZ2VyIHdvcmxkLCBpdCBpcyBhbHdheXMg YmV0dGVyIHRvCmVyciBvbiB0aGUgc2lkZSBvZiBtb3JlIGluZm9ybWF0aW9uIGluIGEgcmFuZ2Us IHRoYW4gbm90LiAgQWZ0ZXIgYWxsLAp3aGVuIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQg YSByYW5nZSwgd2UganVzdCB1c2UgVkFSWUlORyB3aGljaAppcyBhIGZhbmN5IHRlcm0gZm9yIGEg cmFuZ2Ugc3Bhbm5pbmcgdGhlIGVudGlyZSBkb21haW4uCgpTaW5jZSBSRUFMX1ZBTFVFX1RZUEVz IGhhdmUgcHJvcGVybHkgZGVmaW5lZCBpbmZpbml0eSBhbmQgTkFOCnNlbWFudGljcywgYWxsIHRo ZSBtYXRoIGNhbiBiZSBtYWRlIHRvIHdvcms6CgpbLUlORiwgMy4wXSAhTkFOCT0+IE51bWJlcnMg PD0gMy4wIChOQU4gY2Fubm90IGhhcHBlbikKWzMuMCwgK0lORl0JCT0+IE51bWJlcnMgPj0gMy4w IChOQU4gaXMgcG9zc2libGUpClstSU5GLCArSU5GXQkJPT4gVkFSWUlORyAoTkFOIGlzIHBvc3Np YmxlKQpbLUlORiwgK0lORl0gIU5BTgk9PiBFbnRpcmUgZG9tYWluLiAgTkFOIGNhbm5vdCBoYXBw ZW4uCgpBbHNvLCBzaW5jZSBSRUFMX1ZBTFVFX1RZUEVzIGNhbiByZXByZXNlbnQgdGhlIG1pbmlt dW0gYW5kIG1heGltdW0KcmVwcmVzZW50YWJsZSB2YWx1ZXMgb2YgYSBUWVBFX01PREUsIHdlIGNh biBkaXNhbWJpZ3VhdGUgYmV0d2VlbiB0aGVtCmFuZCBuZWdhdGl2ZSBhbmQgcG9zaXRpdmUgaW5m aW5pdHkgKHNlZSBnZXRfbWF4X2Zsb2F0IGluIHJlYWwuY2MpLgoKVGhpcyBhbHNvIG1ha2VzIHRo ZSBtYXRoIGFsbCB3b3JrLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2Uga25vdwpub3RoaW5nIGFi b3V0IHggYW5kIHkgKFZBUllJTkcpLiAgT24gdGhlIFRSVUUgc2lkZSBvZiB4ID4geSwgd2UgY2Fu CmRlZHVjZSB0aGF0OgoKCShhKSB4IGNhbm5vdCBiZSBOQU4KCShiKSB5IGNhbm5vdCBiZSBOQU4K CShjKSB5IGNhbm5vdCBiZSArSU5GLgoKKGMpIG1lYW5zIHRoYXQgd2UgY2FuIGRyb3AgdGhlIHVw cGVyIGJvdW5kIG9mICJ5IiBmcm9tICtJTkYgdG8gdGhlCm1heGltdW0gcmVwcmVzZW50YWJsZSB2 YWx1ZSBmb3IgaXRzIHR5cGUuCgpIYXZpbmcgZW5kcG9pbnRzIHdpdGggZGlmZmVyZW50IHJlcHJl c2VudGF0aW9uIGZvciBpbmZpbml0eSBhbmQgdGhlCm1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1 ZXMsIG1lYW5zIHdlIGNhbiBkcm9wIHRoZSArLUlORiBwcm9wZXJ0aWVzCndlIGN1cnJlbnRseSBo YXZlIGluIHRoZSBmcmFuZ2UuCgpnY2MvQ2hhbmdlTG9nOgoKCSogcmFuZ2Utb3AtZmxvYXQuY2Mg KGZyYW5nZV9zZXRfbmFuKTogTmV3LgoJKGZpbml0ZV9vcGVyYW5kX3ApOiBOZXcuCgkoYnVpbGRf bGUpOiBOZXcuCgkoYnVpbGRfbHQpOiBOZXcuCgkoYnVpbGRfZ2UpOiBOZXcuCgkoYnVpbGRfZ3Qp OiBOZXcuCgkoZm9wZXJhdG9yX2VxdWFsOjpmb2xkX3JhbmdlKTogQWRhcHQgZm9yIGVuZHBvaW50 cy4KCShmb3BlcmF0b3JfZXF1YWw6Om9wMV9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX25vdF9l cXVhbDo6Zm9sZF9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX25vdF9lcXVhbDo6b3AxX3Jhbmdl KTogU2FtZS4KCShmb3BlcmF0b3JfbHQ6OmZvbGRfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9s dDo6b3AxX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3JfbHQ6Om9wMl9yYW5nZSk6IFNhbWUuCgko Zm9wZXJhdG9yX2xlOjpmb2xkX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3JfbGU6Om9wMV9yYW5n ZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2xlOjpvcDJfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9n dDo6Zm9sZF9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2d0OjpvcDFfcmFuZ2UpOiBTYW1lLgoJ KGZvcGVyYXRvcl9ndDo6b3AyX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3JfZ2U6OmZvbGRfcmFu Z2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9nZTo6b3AxX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3Jf Z2U6Om9wMl9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX3Vub3JkZXJlZDo6b3AxX3JhbmdlKTog U2FtZS4KCSogdmFsdWUtcXVlcnkuY2MgKHJhbmdlX3F1ZXJ5OjpnZXRfdHJlZV9yYW5nZSk6IFNl dCBOQU4gcHJvcGVydHkKCWlmIGFwcHJvcHJpYXRlLgoJKiB2YWx1ZS1yYW5nZS1wcmV0dHktcHJp bnQuY2MgKHZyYW5nZV9wcmludGVyOjp2aXNpdCk6IEFkYXB0IGZvciBlbmRwb2ludHMuCgkqIHZh bHVlLXJhbmdlLXN0b3JhZ2UuY2MgKGZyYW5nZV9zdG9yYWdlX3Nsb3Q6OmdldF9mcmFuZ2UpOiBT YW1lLgoJKiB2YWx1ZS1yYW5nZS5jYyAoZnJhbmdlOjpzZXQpOiBTYW1lLgoJKGZyYW5nZTo6bm9y bWFsaXplX2tpbmQpOiBTYW1lLgoJKGVhcmx5X25hbl9yZXNvbHZlKTogTmV3LgoJKGZyYW5nZTo6 dW5pb25fKTogQWRhcHQgZm9yIGVuZHBvaW50cy4KCShmcmFuZ2U6OmludGVyc2VjdCk6IFNhbWUu CgkoZnJhbmdlOjpvcGVyYXRvcj0pOiBTYW1lLgoJKGZyYW5nZTo6Y29udGFpbnNfcCk6IE5ldy4K CShmcmFuZ2U6OnNpbmdsZXRvbl9wKTogTmV3LgoJKGZyYW5nZTo6c2V0X25vbnplcm8pOiBOZXcu CgkoZnJhbmdlOjpub256ZXJvX3ApOiBOZXcuCgkoZnJhbmdlOjpzZXRfemVybyk6IE5ldy4KCShm cmFuZ2U6Onplcm9fcCk6IE5ldy4KCShmcmFuZ2U6OnNldF9ub25uZWdhdGl2ZSk6IE5ldy4KCShm cmFuZ2VfZmxvYXQpOiBOZXcuCgkoZnJhbmdlX25hbik6IE5ldy4KCShyZWFsX21heF9yZXByZXNl bnRhYmxlKTogTmV3LgoJKHJlYWxfbWluX3JlcHJlc2VudGFibGUpOiBOZXcuCgkocmFuZ2VfdGVz dHNfbmFuKTogTmV3LgoJKHJhbmdlX3Rlc3RzX3NpZ25lZF96ZXJvcyk6IE5ldy4KCShyYW5nZV90 ZXN0c19mbG9hdHMpOiBOZXcuCgkocmFuZ2VfdGVzdHMpOiBDYWxsIHJhbmdlX3Rlc3RzX2Zsb2F0 cy4KCSogdmFsdWUtcmFuZ2UuaCAoY2xhc3MgZnJhbmdlX3Byb3BzKTogUmVtb3ZlIGluZiBhbmQg bmluZgoJcHJvcGVydGllcy4KCShjbGFzcyBmcmFuZ2UpOiBBZGQgbmV3IGNvbnN0cnVjdG9ycy4K CUFkZCBjb250YWluc19wLCBzaW5nbGV0b25fcCwgemVyb19wLCBub256ZXJvX3AsIHNldF9ub256 ZXJvLAoJc2V0X3plcm8sIHNldF9ub25uZWdhdGl2ZSwgbG93ZXJfYm91bmQsIHVwcGVyX2JvdW5k LgoJKGZyYW5nZTo6bG93ZXJfYm91bmQpOiBOZXcuCgkoZnJhbmdlOjp1cHBlcl9ib3VuZCk6IE5l dy4KCSh2cnBfdmFsX21pbik6IFVzZSByZWFsX2luZiB3aXRoIGEgc2lnbiBhcmd1bWVudC4KCShm cmFuZ2U6OnNldF92YXJ5aW5nKTogQWRhcHQgZm9yIGVuZHBvaW50cy4KCShmcmFuZ2U6OnNldF91 bmRlZmluZWQpOiBTYW1lLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnY2MuZGcvdHJl ZS1zc2EvcmVjaXAtMy5jOiBEaXNhYmxlIERPTSBhbmQganVtcCB0aHJlYWRpbmcuCi0tLQogZ2Nj L3JhbmdlLW9wLWZsb2F0LmNjICAgICAgICAgICAgICAgICAgIHwgMzk1ICsrKysrKysrKysrKysr Ky0tLS0KIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3JlY2lwLTMuYyB8ICAgNSArCiBn Y2MvdmFsdWUtcXVlcnkuY2MgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKwogZ2NjL3ZhbHVl LXJhbmdlLXByZXR0eS1wcmludC5jYyAgICAgICAgIHwgIDE0ICstCiBnY2MvdmFsdWUtcmFuZ2Ut c3RvcmFnZS5jYyAgICAgICAgICAgICAgfCAgMTIgKwogZ2NjL3ZhbHVlLXJhbmdlLmNjICAgICAg ICAgICAgICAgICAgICAgIHwgNDg0ICsrKysrKysrKysrKysrKysrKysrKy0tLQogZ2NjL3ZhbHVl LXJhbmdlLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDY0ICsrKy0KIDcgZmlsZXMgY2hhbmdl ZCwgODUyIGluc2VydGlvbnMoKyksIDEzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2Mv cmFuZ2Utb3AtZmxvYXQuY2MgYi9nY2MvcmFuZ2Utb3AtZmxvYXQuY2MKaW5kZXggZmY5ZmUzMTJh Y2YuLmM3NmE0M2M2MTQxIDEwMDY0NAotLS0gYS9nY2MvcmFuZ2Utb3AtZmxvYXQuY2MKKysrIGIv Z2NjL3JhbmdlLW9wLWZsb2F0LmNjCkBAIC0xNTAsNiArMTUwLDE4IEBAIHJhbmdlX29wZXJhdG9y X2Zsb2F0OjpvcDFfb3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocyBBVFRSSUJVVEVfVU5V U0VEKSBjb25zCiAgIHJldHVybiBWUkVMX1ZBUllJTkc7CiB9CiAKKy8vIFNldCBSIHRvIFtOQU4s IE5BTl0uCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZnJhbmdlX3NldF9uYW4gKGZyYW5nZSAmciwg dHJlZSB0eXBlKQoreworICBSRUFMX1ZBTFVFX1RZUEUgcnY7CisgIGJvb2wgcmVzID0gcmVhbF9u YW4gKCZydiwgIiIsIDEsIFRZUEVfTU9ERSAodHlwZSkpOworICBpZiAoZmxhZ19jaGVja2luZykK KyAgICBnY2NfYXNzZXJ0IChyZXMpOworICByLnNldCAodHlwZSwgcnYsIHJ2KTsKK30KKwogLy8g UmV0dXJuIFRSVUUgaWYgT1AxIGFuZCBPUDIgYXJlIGtub3duIHRvIGJlIGZyZWUgb2YgTkFOcy4K IAogc3RhdGljIGlubGluZSBib29sCkBAIC0xNjAsNiArMTcyLDE0IEBAIGZpbml0ZV9vcGVyYW5k c19wIChjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIpCiAJICAgICAgJiYgb3Ay LmdldF9uYW4gKCkubm9fcCAoKSkpOwogfQogCisvLyBSZXR1cm4gVFJVRSBpZiBPUDEgaXMga25v d24gdG8gYmUgZnJlZSBvZiBOQU5zLgorCitzdGF0aWMgaW5saW5lIGJvb2wKK2Zpbml0ZV9vcGVy YW5kX3AgKGNvbnN0IGZyYW5nZSAmb3AxKQoreworICByZXR1cm4gZmxhZ19maW5pdGVfbWF0aF9v bmx5IHx8IG9wMS5nZXRfbmFuICgpLm5vX3AgKCk7Cit9CisKIC8vIEZsb2F0aW5nIHZlcnNpb24g b2YgcmVsb3BfZWFybHlfcmVzb2x2ZSB0aGF0IHRha2VzIGludG8gYWNjb3VudCBOQU4KIC8vIGFu ZCAtZmZpbml0ZS1tYXRoLW9ubHkuCiAKQEAgLTE5NCw2ICsyMTQsNDUgQEAgZGVmYXVsdF9mcmVs b3BfZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAgIHJldHVybiB0cnVlOwogfQog CisvLyAoWCA8PSBWQUwpIHByb2R1Y2VzIHRoZSByYW5nZSBvZiBbTUlOLCBWQUxdLgorCitzdGF0 aWMgdm9pZAorYnVpbGRfbGUgKGZyYW5nZSAmciwgdHJlZSB0eXBlLCBjb25zdCBSRUFMX1ZBTFVF X1RZUEUgJnZhbCkKK3sKKyAgUkVBTF9WQUxVRV9UWVBFIG1pbjsKKyAgcmVhbF9pbmYgKCZtaW4s IDEpOworICByLnNldCAodHlwZSwgbWluLCB2YWwpOworfQorCisvLyAoWCA8IFZBTCkgcHJvZHVj ZXMgdGhlIHJhbmdlIG9mIFtNSU4sIFZBTCkuCisKK3N0YXRpYyB2b2lkCitidWlsZF9sdCAoZnJh bmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmdmFsKQoreworICAvLyBI aWphY2sgTEUgYmVjYXVzZSB3ZSBvbmx5IHN1cHBvcnQgY2xvc2VkIGludGVydmFscy4KKyAgYnVp bGRfbGUgKHIsIHR5cGUsIHZhbCk7Cit9CisKKy8vIChYID49IFZBTCkgcHJvZHVjZXMgdGhlIHJh bmdlIG9mIFtWQUwsIE1BWF0uCisKK3N0YXRpYyB2b2lkCitidWlsZF9nZSAoZnJhbmdlICZyLCB0 cmVlIHR5cGUsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmdmFsKQoreworICBSRUFMX1ZBTFVFX1RZ UEUgbWF4OworICByZWFsX2luZiAoJm1heCwgMCk7CisgIHIuc2V0ICh0eXBlLCB2YWwsIG1heCk7 Cit9CisKKy8vIChYID4gVkFMKSBwcm9kdWNlcyB0aGUgcmFuZ2Ugb2YgKFZBTCwgTUFYXS4KKwor c3RhdGljIHZvaWQKK2J1aWxkX2d0IChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwgY29uc3QgUkVBTF9W QUxVRV9UWVBFICZ2YWwpCit7CisgIC8vIEhpamFjayBHRSBiZWNhdXNlIHdlIG9ubHkgc3VwcG9y dCBjbG9zZWQgaW50ZXJ2YWxzLgorICBidWlsZF9nZSAociwgdHlwZSwgdmFsKTsKK30KKworCiBj bGFzcyBmb3BlcmF0b3JfaWRlbnRpdHkgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIHsK ICAgdXNpbmcgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQ6OmZvbGRfcmFuZ2U7CkBAIC0yMjQsMTAgKzI4 Myw3IEBAIGNsYXNzIGZvcGVyYXRvcl9lcXVhbCA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9h dAogCiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0 IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwp IGNvbnN0IGZpbmFsIG92ZXJyaWRlCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdF9mcmVsb3BfZm9s ZF9yYW5nZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9FUSk7Ci0gIH0KKwkJICAgcmVs YXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICByZWxhdGlvbl9raW5kIG9w MV9vcDJfcmVsYXRpb24gKGNvbnN0IGlyYW5nZSAmbGhzKSBjb25zdCBmaW5hbCBvdmVycmlkZQog ICB7CiAgICAgcmV0dXJuIGVxdWFsX29wMV9vcDJfcmVsYXRpb24gKGxocyk7CkBAIC0yNDMsNiAr Mjk5LDM5IEBAIGNsYXNzIGZvcGVyYXRvcl9lcXVhbCA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9m bG9hdAogICB9CiB9IGZvcF9lcXVhbDsKIAorYm9vbAorZm9wZXJhdG9yX2VxdWFsOjpmb2xkX3Jh bmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKKwkJCSAgICAgY29uc3QgZnJhbmdlICZvcDEsIGNv bnN0IGZyYW5nZSAmb3AyLAorCQkJICAgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKK3sKKyAg aWYgKGZyZWxvcF9lYXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBWUkVMX0VR KSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICAvLyBXZSBjYW4gYmUgc3VyZSB0aGUgdmFsdWVzIGFy ZSBhbHdheXMgZXF1YWwgb3Igbm90IGlmIGJvdGggcmFuZ2VzCisgIC8vIGNvbnNpc3Qgb2YgYSBz aW5nbGUgdmFsdWUsIGFuZCB0aGVuIGNvbXBhcmUgdGhlbS4KKyAgaWYgKG9wMS5zaW5nbGV0b25f cCAoKSAmJiBvcDIuc2luZ2xldG9uX3AgKCkpCisgICAgeworICAgICAgaWYgKG9wMSA9PSBvcDIp CisJciA9IHJhbmdlX3RydWUgKHR5cGUpOworICAgICAgZWxzZQorCXIgPSByYW5nZV9mYWxzZSAo dHlwZSk7CisgICAgfQorICBlbHNlIGlmIChmaW5pdGVfb3BlcmFuZHNfcCAob3AxLCBvcDIpKQor ICAgIHsKKyAgICAgIC8vIElmIHJhbmdlcyBkbyBub3QgaW50ZXJzZWN0LCB3ZSBrbm93IHRoZSBy YW5nZSBpcyBub3QgZXF1YWwsCisgICAgICAvLyBvdGhlcndpc2Ugd2UgZG9uJ3Qga25vdyBhbnl0 aGluZyBmb3Igc3VyZS4KKyAgICAgIGZyYW5nZSB0bXAgPSBvcDE7CisgICAgICB0bXAuaW50ZXJz ZWN0IChvcDIpOworICAgICAgaWYgKHRtcC51bmRlZmluZWRfcCAoKSkKKwlyID0gcmFuZ2VfZmFs c2UgKHR5cGUpOworICAgICAgZWxzZQorCXIgPSByYW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7 CisgICAgfQorICBlbHNlCisgICAgciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAg cmV0dXJuIHRydWU7Cit9CisKIGJvb2wKIGZvcGVyYXRvcl9lcXVhbDo6b3AxX3JhbmdlIChmcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgICBjb25zdCBpcmFuZ2UgJmxocywKQEAgLTI1MiwyMSAr MzQxLDggQEAgZm9wZXJhdG9yX2VxdWFsOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBl LAogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAgICBj YXNlIEJSU19UUlVFOgotICAgICAgaWYgKEhPTk9SX1NJR05FRF9aRVJPUyAodHlwZSkKLQkgICYm IG9wMi5jb250YWluc19wIChidWlsZF96ZXJvX2NzdCAodHlwZSkpKQotCXsKLQkgIC8vIFdpdGgg c2lnbmVkIHplcm9zLCB4ID09IC0wLjAgZG9lcyBub3QgbWVhbiB3ZSBjYW4gcmVwbGFjZQotCSAg Ly8geCB3aXRoIC0wLjAsIGJlY2F1c2UgeCBtYXkgYmUgZWl0aGVyICswLjAgb3IgLTAuMC4KLQkg IHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICAvLyBJZiBpdCdz IHRydWUsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgT1AyLgotCSAgLy8KLQkgIC8vIElmIHRo ZSByYW5nZSBkb2VzIG5vdCBhY3R1YWxseSBjb250YWluIHplcm9zLCB0aGlzIHNob3VsZAotCSAg Ly8gYWx3YXlzIGJlIE9LLgotCSAgciA9IG9wMjsKLQl9CisgICAgICAvLyBJZiBpdCdzIHRydWUs IHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgT1AyLgorICAgICAgciA9IG9wMjsKICAgICAgIC8v IFRoZSBUUlVFIHNpZGUgb2Ygb3AxID09IG9wMiBpbXBsaWVzIG9wMSBpcyAhTkFOLgogICAgICAg ci5zZXRfbmFuIChmcF9wcm9wOjpOTyk7CiAgICAgICBicmVhazsKQEAgLTI3NSw3ICszNTEsMTUg QEAgZm9wZXJhdG9yX2VxdWFsOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogICAg ICAgci5zZXRfdmFyeWluZyAodHlwZSk7CiAgICAgICAvLyBUaGUgRkFMU0Ugc2lkZSBvZiBvcDEg PT0gb3AxIGltcGxpZXMgb3AxIGlzIGEgTkFOLgogICAgICAgaWYgKHJlbCA9PSBWUkVMX0VRKQot CXIuc2V0X25hbiAoZnBfcHJvcDo6WUVTKTsKKwlmcmFuZ2Vfc2V0X25hbiAociwgdHlwZSk7Cisg ICAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGZhbHNlLCB0aGUgb25seSB0aW1lIHdlIGtub3cgYW55 dGhpbmcgaXMKKyAgICAgIC8vIGlmIE9QMiBpcyBhIGNvbnN0YW50LgorICAgICAgZWxzZSBpZiAo b3AyLnNpbmdsZXRvbl9wICgpCisJICAgICAgIHx8IChmaW5pdGVfb3BlcmFuZF9wIChvcDIpICYm IG9wMi56ZXJvX3AgKCkpKQorCXsKKwkgIFJFQUxfVkFMVUVfVFlQRSB0bXAgPSBvcDIubG93ZXJf Ym91bmQgKCk7CisJICByLnNldCAodHlwZSwgdG1wLCB0bXAsIFZSX0FOVElfUkFOR0UpOworCX0K ICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTI5MSwxMCArMzc1LDcgQEAgY2xhc3Mg Zm9wZXJhdG9yX25vdF9lcXVhbCA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9hdAogCiAgIGJv b2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0IGZyYW5nZSAm b3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0IGZp bmFsIG92ZXJyaWRlCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdF9mcmVsb3BfZm9sZF9yYW5nZSAo ciwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9ORSk7Ci0gIH0KKwkJICAgcmVsYXRpb25fa2lu ZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICByZWxhdGlvbl9raW5kIG9wMV9vcDJfcmVs YXRpb24gKGNvbnN0IGlyYW5nZSAmbGhzKSBjb25zdCBmaW5hbCBvdmVycmlkZQogICB7CiAgICAg cmV0dXJuIG5vdF9lcXVhbF9vcDFfb3AyX3JlbGF0aW9uIChsaHMpOwpAQCAtMzA0LDYgKzM4NSwz OSBAQCBjbGFzcyBmb3BlcmF0b3Jfbm90X2VxdWFsIDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zs b2F0CiAJCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogfSBmb3Bf bm90X2VxdWFsOwogCitib29sCitmb3BlcmF0b3Jfbm90X2VxdWFsOjpmb2xkX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKKwkJCQkgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAm b3AyLAorCQkJCSByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKK3sKKyAgaWYgKGZyZWxvcF9lYXJs eV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBWUkVMX05FKSkKKyAgICByZXR1cm4g dHJ1ZTsKKworICAvLyBXZSBjYW4gYmUgc3VyZSB0aGUgdmFsdWVzIGFyZSBhbHdheXMgZXF1YWwg b3Igbm90IGlmIGJvdGggcmFuZ2VzCisgIC8vIGNvbnNpc3Qgb2YgYSBzaW5nbGUgdmFsdWUsIGFu ZCB0aGVuIGNvbXBhcmUgdGhlbS4KKyAgaWYgKG9wMS5zaW5nbGV0b25fcCAoKSAmJiBvcDIuc2lu Z2xldG9uX3AgKCkpCisgICAgeworICAgICAgaWYgKG9wMSAhPSBvcDIpCisJciA9IHJhbmdlX3Ry dWUgKHR5cGUpOworICAgICAgZWxzZQorCXIgPSByYW5nZV9mYWxzZSAodHlwZSk7CisgICAgfQor ICBlbHNlIGlmIChmaW5pdGVfb3BlcmFuZHNfcCAob3AxLCBvcDIpKQorICAgIHsKKyAgICAgIC8v IElmIHJhbmdlcyBkbyBub3QgaW50ZXJzZWN0LCB3ZSBrbm93IHRoZSByYW5nZSBpcyBub3QgZXF1 YWwsCisgICAgICAvLyBvdGhlcndpc2Ugd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBmb3Igc3VyZS4K KyAgICAgIGZyYW5nZSB0bXAgPSBvcDE7CisgICAgICB0bXAuaW50ZXJzZWN0IChvcDIpOworICAg ICAgaWYgKHRtcC51bmRlZmluZWRfcCAoKSkKKwlyID0gcmFuZ2VfdHJ1ZSAodHlwZSk7CisgICAg ICBlbHNlCisJciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAgICB9CisgIGVsc2UK KyAgICByID0gcmFuZ2VfdHJ1ZV9hbmRfZmFsc2UgKHR5cGUpOworICByZXR1cm4gdHJ1ZTsKK30K KwogYm9vbAogZm9wZXJhdG9yX25vdF9lcXVhbDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUg dHlwZSwKIAkJCQljb25zdCBpcmFuZ2UgJmxocywKQEAgLTMxMywxMSArNDI3LDIzIEBAIGZvcGVy YXRvcl9ub3RfZXF1YWw6Om9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAgIHN3aXRj aCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAgIGNhc2UgQlJTX1RS VUU6Ci0gICAgICByLnNldF92YXJ5aW5nICh0eXBlKTsKKyAgICAgIC8vIElmIHRoZSByZXN1bHQg aXMgdHJ1ZSwgdGhlIG9ubHkgdGltZSB3ZSBrbm93IGFueXRoaW5nIGlzIGlmCisgICAgICAvLyBP UDIgaXMgYSBjb25zdGFudC4KKyAgICAgIGlmIChvcDIuc2luZ2xldG9uX3AgKCkpCisJeworCSAg Ly8gVGhpcyBpcyBjb3JyZWN0IGV2ZW4gaWYgb3AxIGlzIE5BTiwgYmVjYXVzZSB0aGUgZm9sbG93 aW5nCisJICAvLyByYW5nZSB3b3VsZCBiZSB+W3RtcCwgdG1wXSB3aXRoIHRoZSBOQU4gcHJvcGVy dHkgc2V0IHRvCisJICAvLyBtYXliZSAoVkFSWUlORykuCisJICBSRUFMX1ZBTFVFX1RZUEUgdG1w ID0gb3AyLmxvd2VyX2JvdW5kICgpOworCSAgci5zZXQgKHR5cGUsIHRtcCwgdG1wLCBWUl9BTlRJ X1JBTkdFKTsKKwl9CisgICAgICBlbHNlCisJci5zZXRfdmFyeWluZyAodHlwZSk7CiAgICAgICBi cmVhazsKIAogICAgIGNhc2UgQlJTX0ZBTFNFOgotICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7 CisgICAgICAvLyBJZiBpdCdzIGZhbHNlLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIE9QMi4K KyAgICAgIHIgPSBvcDI7CiAgICAgICAvLyBUaGUgRkFMU0Ugc2lkZSBvZiBvcDEgIT0gb3AyIGlt cGxpZXMgb3AxIGlzICFOQU4uCiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKICAgICAg IGJyZWFrOwpAQCAtMzM2LDEwICs0NjIsNyBAQCBjbGFzcyBmb3BlcmF0b3JfbHQgOiBwdWJsaWMg cmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIAogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJl ZSB0eXBlLAogCQkgICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAg IHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZQotICB7Ci0gICAgcmV0dXJu IGRlZmF1bHRfZnJlbG9wX2ZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxf TFQpOwotICB9CisJCSAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsK ICAgcmVsYXRpb25fa2luZCBvcDFfb3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29u c3QgZmluYWwgb3ZlcnJpZGUKICAgewogICAgIHJldHVybiBsdF9vcDFfb3AyX3JlbGF0aW9uIChs aHMpOwpAQCAtMzUyLDYgKzQ3NSwzMSBAQCBjbGFzcyBmb3BlcmF0b3JfbHQgOiBwdWJsaWMgcmFu Z2Vfb3BlcmF0b3JfZmxvYXQKIAkJICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3Zl cnJpZGU7CiB9IGZvcF9sdDsKIAorYm9vbAorZm9wZXJhdG9yX2x0Ojpmb2xkX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKKwkJCSAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAm b3AyLAorCQkJICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKK3sKKyAgaWYgKGZyZWxvcF9lYXJs eV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBWUkVMX0xUKSkKKyAgICByZXR1cm4g dHJ1ZTsKKworICBpZiAoZmluaXRlX29wZXJhbmRzX3AgKG9wMSwgb3AyKSkKKyAgICB7CisgICAg ICBpZiAocmVhbF9sZXNzICgmb3AxLnVwcGVyX2JvdW5kICgpLCAmb3AyLmxvd2VyX2JvdW5kICgp KSkKKwlyID0gcmFuZ2VfdHJ1ZSAodHlwZSk7CisgICAgICBlbHNlIGlmIChmaW5pdGVfb3BlcmFu ZHNfcCAob3AxLCBvcDIpCisJICAgICAgICYmICFyZWFsX2xlc3MgKCZvcDEubG93ZXJfYm91bmQg KCksICZvcDIudXBwZXJfYm91bmQgKCkpKQorCXIgPSByYW5nZV9mYWxzZSAodHlwZSk7CisgICAg ICBlbHNlCisJciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAgICB9CisgIGVsc2Ug aWYgKG9wMS5nZXRfbmFuICgpLnllc19wICgpIHx8IG9wMi5nZXRfbmFuICgpLnllc19wICgpKQor ICAgIHIgPSByYW5nZV9mYWxzZSAodHlwZSk7CisgIGVsc2UKKyAgICByID0gcmFuZ2VfdHJ1ZV9h bmRfZmFsc2UgKHR5cGUpOworICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbAogZm9wZXJhdG9yX2x0 OjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwKIAkJCSB0cmVlIHR5cGUsCkBAIC0zNjIsMTQgKzUxMCwx MiBAQCBmb3BlcmF0b3JfbHQ6Om9wMV9yYW5nZSAoZnJhbmdlICZyLAogICBzd2l0Y2ggKGdldF9i b29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAgICBjYXNlIEJSU19UUlVFOgotICAg ICAgci5zZXRfdmFyeWluZyAodHlwZSk7Ci0gICAgICAvLyBUaGUgVFJVRSBzaWRlIG9mIG9wMSA8 IG9wMiBpbXBsaWVzIG9wMSBpcyAhTkFOIGFuZCAhSU5GLgorICAgICAgYnVpbGRfbHQgKHIsIHR5 cGUsIG9wMi51cHBlcl9ib3VuZCAoKSk7CiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsK LSAgICAgIHIuc2V0X2luZiAoZnBfcHJvcDo6Tk8pOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNl IEJSU19GQUxTRToKLSAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOworICAgICAgYnVpbGRfZ2Ug KHIsIHR5cGUsIG9wMi5sb3dlcl9ib3VuZCAoKSk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1 bHQ6CkBAIC0zODgsMTQgKzUzNCwxMiBAQCBmb3BlcmF0b3JfbHQ6Om9wMl9yYW5nZSAoZnJhbmdl ICZyLAogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAg ICBjYXNlIEJSU19UUlVFOgotICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7Ci0gICAgICAvLyBU aGUgVFJVRSBzaWRlIG9mIG9wMSA8IG9wMiBpbXBsaWVzIG9wMiBpcyAhTkFOIGFuZCAhTklORi4K KyAgICAgIGJ1aWxkX2d0IChyLCB0eXBlLCBvcDEubG93ZXJfYm91bmQgKCkpOwogICAgICAgci5z ZXRfbmFuIChmcF9wcm9wOjpOTyk7Ci0gICAgICByLnNldF9uaW5mIChmcF9wcm9wOjpOTyk7CiAg ICAgICBicmVhazsKIAogICAgIGNhc2UgQlJTX0ZBTFNFOgotICAgICAgci5zZXRfdmFyeWluZyAo dHlwZSk7CisgICAgICBidWlsZF9sZSAociwgdHlwZSwgb3AxLnVwcGVyX2JvdW5kICgpKTsKICAg ICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTQxMiwxMCArNTU2LDcgQEAgY2xhc3MgZm9w ZXJhdG9yX2xlIDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0CiAKICAgYm9vbCBmb2xkX3Jh bmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0 IGZyYW5nZSAmb3AyLAotCQkgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJp ZGUKLSAgewotICAgIHJldHVybiBkZWZhdWx0X2ZyZWxvcF9mb2xkX3JhbmdlIChyLCB0eXBlLCBv cDEsIG9wMiwgcmVsLCBWUkVMX0xFKTsKLSAgfQorCQkgICByZWxhdGlvbl9raW5kIHJlbCkgY29u c3QgZmluYWwgb3ZlcnJpZGU7CiAgIHJlbGF0aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29u c3QgaXJhbmdlICZsaHMpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gbGVf b3AxX29wMl9yZWxhdGlvbiAobGhzKTsKQEAgLTQyNSwyOSArNTY2LDc0IEBAIGNsYXNzIGZvcGVy YXRvcl9sZSA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9hdAogCQkgIHJlbGF0aW9uX2tpbmQg cmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgYm9vbCBvcDJfcmFuZ2UgKGZyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkgIGNvbnN0IGlyYW5nZSAmbGhzLCBjb25zdCBmcmFuZ2UgJm9wMSwKLQkJ ICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGUKLSAgewotICAgIHJldHVy biBvcDFfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxLCByZWwpOwotICB9CisJCSAgcmVsYXRpb25f a2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogfSBmb3BfbGU7CiAKK2Jvb2wKK2ZvcGVy YXRvcl9sZTo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCisJCQkgIGNvbnN0IGZy YW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKKwkJCSAgcmVsYXRpb25fa2luZCByZWwpIGNv bnN0Cit7CisgIGlmIChmcmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJl bCwgVlJFTF9MRSkpCisgICAgcmV0dXJuIHRydWU7CisKKyAgaWYgKGZpbml0ZV9vcGVyYW5kc19w IChvcDEsIG9wMikpCisgICAgeworICAgICAgaWYgKHJlYWxfY29tcGFyZSAoTEVfRVhQUiwgJm9w MS51cHBlcl9ib3VuZCAoKSwgJm9wMi5sb3dlcl9ib3VuZCAoKSkpCisJciA9IHJhbmdlX3RydWUg KHR5cGUpOworICAgICAgZWxzZSBpZiAoZmluaXRlX29wZXJhbmRzX3AgKG9wMSwgb3AyKQorCSAg ICAgICAmJiAhcmVhbF9jb21wYXJlIChMRV9FWFBSLCAmb3AxLmxvd2VyX2JvdW5kICgpLCAmb3Ay LnVwcGVyX2JvdW5kICgpKSkKKwlyID0gcmFuZ2VfZmFsc2UgKHR5cGUpOworICAgICAgZWxzZQor CXIgPSByYW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7CisgICAgfQorICBlbHNlIGlmIChvcDEu Z2V0X25hbiAoKS55ZXNfcCAoKSB8fCBvcDIuZ2V0X25hbiAoKS55ZXNfcCAoKSkKKyAgICByID0g cmFuZ2VfZmFsc2UgKHR5cGUpOworICBlbHNlCisgICAgciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNl ICh0eXBlKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wKIGZvcGVyYXRvcl9sZTo6b3AxX3Jh bmdlIChmcmFuZ2UgJnIsCiAJCQkgdHJlZSB0eXBlLAogCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAot CQkJIGNvbnN0IGZyYW5nZSAmb3AyIEFUVFJJQlVURV9VTlVTRUQsCisJCQkgY29uc3QgZnJhbmdl ICZvcDIsCiAJCQkgcmVsYXRpb25fa2luZCkgY29uc3QKIHsKICAgc3dpdGNoIChnZXRfYm9vbF9z dGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CiAgICAgY2FzZSBCUlNfVFJVRToKLSAgICAgIHIu c2V0X3ZhcnlpbmcgKHR5cGUpOwotICAgICAgLy8gVGhlIFRSVUUgc2lkZSBvZiBvcDEgPD0gb3Ay IGltcGxpZXMgb3AxIGlzICFOQU4uCisgICAgICBidWlsZF9sZSAociwgdHlwZSwgb3AyLnVwcGVy X2JvdW5kICgpKTsKICAgICAgIHIuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOwogICAgICAgYnJlYWs7 CiAKICAgICBjYXNlIEJSU19GQUxTRToKLSAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOworICAg ICAgYnVpbGRfZ3QgKHIsIHR5cGUsIG9wMi5sb3dlcl9ib3VuZCAoKSk7CisgICAgICBicmVhazsK KworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiB0cnVlOworfQor Citib29sCitmb3BlcmF0b3JfbGU6Om9wMl9yYW5nZSAoZnJhbmdlICZyLAorCQkJIHRyZWUgdHlw ZSwKKwkJCSBjb25zdCBpcmFuZ2UgJmxocywKKwkJCSBjb25zdCBmcmFuZ2UgJm9wMSwKKwkJCSBy ZWxhdGlvbl9raW5kKSBjb25zdAoreworICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMs IHR5cGUpKQorICAgIHsKKyAgICBjYXNlIEJSU19UUlVFOgorICAgICAgYnVpbGRfZ2UgKHIsIHR5 cGUsIG9wMS5sb3dlcl9ib3VuZCAoKSk7CisgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsK KyAgICAgIGJyZWFrOworCisgICAgY2FzZSBCUlNfRkFMU0U6CisgICAgICBidWlsZF9sdCAociwg dHlwZSwgb3AxLnVwcGVyX2JvdW5kICgpKTsKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoK QEAgLTQ2NCwxMCArNjUwLDcgQEAgY2xhc3MgZm9wZXJhdG9yX2d0IDogcHVibGljIHJhbmdlX29w ZXJhdG9yX2Zsb2F0CiAKICAgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkgICByZWxhdGlv bl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGUKLSAgewotICAgIHJldHVybiBkZWZhdWx0 X2ZyZWxvcF9mb2xkX3JhbmdlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBWUkVMX0dUKTsKLSAg fQorCQkgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiAgIHJlbGF0 aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29uc3QgaXJhbmdlICZsaHMpIGNvbnN0IGZpbmFs IG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gZ3Rfb3AxX29wMl9yZWxhdGlvbiAobGhzKTsKQEAg LTQ4MCw2ICs2NjMsMzEgQEAgY2xhc3MgZm9wZXJhdG9yX2d0IDogcHVibGljIHJhbmdlX29wZXJh dG9yX2Zsb2F0CiAJCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwog fSBmb3BfZ3Q7CiAKK2Jvb2wKK2ZvcGVyYXRvcl9ndDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0 cmVlIHR5cGUsCisJCQkgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKKwkJ CSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0Cit7CisgIGlmIChmcmVsb3BfZWFybHlfcmVzb2x2 ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9HVCkpCisgICAgcmV0dXJuIHRydWU7CisK KyAgaWYgKGZpbml0ZV9vcGVyYW5kc19wIChvcDEsIG9wMikpCisgICAgeworICAgICAgaWYgKHJl YWxfY29tcGFyZSAoR1RfRVhQUiwgJm9wMS5sb3dlcl9ib3VuZCAoKSwgJm9wMi51cHBlcl9ib3Vu ZCAoKSkpCisJciA9IHJhbmdlX3RydWUgKHR5cGUpOworICAgICAgZWxzZSBpZiAoZmluaXRlX29w ZXJhbmRzX3AgKG9wMSwgb3AyKQorCSAgICAgICAmJiAhcmVhbF9jb21wYXJlIChHVF9FWFBSLCAm b3AxLnVwcGVyX2JvdW5kICgpLCAmb3AyLmxvd2VyX2JvdW5kICgpKSkKKwlyID0gcmFuZ2VfZmFs c2UgKHR5cGUpOworICAgICAgZWxzZQorCXIgPSByYW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7 CisgICAgfQorICBlbHNlIGlmIChvcDEuZ2V0X25hbiAoKS55ZXNfcCAoKSB8fCBvcDIuZ2V0X25h biAoKS55ZXNfcCAoKSkKKyAgICByID0gcmFuZ2VfZmFsc2UgKHR5cGUpOworICBlbHNlCisgICAg ciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJv b2wKIGZvcGVyYXRvcl9ndDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsCiAJCQkgdHJlZSB0eXBlLApA QCAtNDkwLDE0ICs2OTgsMTIgQEAgZm9wZXJhdG9yX2d0OjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwK ICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CiAgICAgY2Fz ZSBCUlNfVFJVRToKLSAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwotICAgICAgLy8gVGhlIFRS VUUgc2lkZSBvZiBvcDEgPiBvcDIgaW1wbGllcyBvcDEgaXMgIU5BTiBhbmQgIU5JTkYuCisgICAg ICBidWlsZF9ndCAociwgdHlwZSwgb3AyLmxvd2VyX2JvdW5kICgpKTsKICAgICAgIHIuc2V0X25h biAoZnBfcHJvcDo6Tk8pOwotICAgICAgci5zZXRfbmluZiAoZnBfcHJvcDo6Tk8pOwogICAgICAg YnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKLSAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUp OworICAgICAgYnVpbGRfbGUgKHIsIHR5cGUsIG9wMi51cHBlcl9ib3VuZCAoKSk7CiAgICAgICBi cmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC01MTYsMTQgKzcyMiwxMiBAQCBmb3BlcmF0b3JfZ3Q6 Om9wMl9yYW5nZSAoZnJhbmdlICZyLAogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMs IHR5cGUpKQogICAgIHsKICAgICBjYXNlIEJSU19UUlVFOgotICAgICAgci5zZXRfdmFyeWluZyAo dHlwZSk7Ci0gICAgICAvLyBUaGUgVFJVRSBzaWRlIG9mIG9wMSA+IG9wMiBpbXBsaWVzIG9wMiBp cyAhTkFOIGFuZCAhSU5GLgorICAgICAgYnVpbGRfbHQgKHIsIHR5cGUsIG9wMS51cHBlcl9ib3Vu ZCAoKSk7CiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKLSAgICAgIHIuc2V0X2luZiAo ZnBfcHJvcDo6Tk8pOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKLSAgICAg IHIuc2V0X3ZhcnlpbmcgKHR5cGUpOworICAgICAgYnVpbGRfZ2UgKHIsIHR5cGUsIG9wMS5sb3dl cl9ib3VuZCAoKSk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC01NDAsMTAgKzc0 NCw3IEBAIGNsYXNzIGZvcGVyYXRvcl9nZSA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9hdAog CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0IGZy YW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwpIGNv bnN0IGZpbmFsIG92ZXJyaWRlCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdF9mcmVsb3BfZm9sZF9y YW5nZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9HRSk7Ci0gIH0KKwkJICAgcmVsYXRp b25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICByZWxhdGlvbl9raW5kIG9wMV9v cDJfcmVsYXRpb24gKGNvbnN0IGlyYW5nZSAmbGhzKSBjb25zdCBmaW5hbCBvdmVycmlkZQogICB7 CiAgICAgcmV0dXJuIGdlX29wMV9vcDJfcmVsYXRpb24gKGxocyk7CkBAIC01NTMsMjkgKzc1NCw3 MyBAQCBjbGFzcyBmb3BlcmF0b3JfZ2UgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIAkJ ICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiAgIGJvb2wgb3AyX3Jh bmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25zdCBpcmFuZ2UgJmxocywgY29uc3Qg ZnJhbmdlICZvcDEsCi0JCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRl Ci0gIHsKLSAgICByZXR1cm4gb3AxX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMSwgcmVsKTsKLSAg fQorCQkgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKIH0gZm9wX2dl OwogCitib29sCitmb3BlcmF0b3JfZ2U6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBl LAorCQkJICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCisJCQkgIHJlbGF0 aW9uX2tpbmQgcmVsKSBjb25zdAoreworICBpZiAoZnJlbG9wX2Vhcmx5X3Jlc29sdmUgKHIsIHR5 cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxfR0UpKQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChm aW5pdGVfb3BlcmFuZHNfcCAob3AxLCBvcDIpKQorICAgIHsKKyAgICAgIGlmIChyZWFsX2NvbXBh cmUgKEdFX0VYUFIsICZvcDEubG93ZXJfYm91bmQgKCksICZvcDIudXBwZXJfYm91bmQgKCkpKQor CXIgPSByYW5nZV90cnVlICh0eXBlKTsKKyAgICAgIGVsc2UgaWYgKGZpbml0ZV9vcGVyYW5kc19w IChvcDEsIG9wMikKKwkgICAgICAgJiYgIXJlYWxfY29tcGFyZSAoR0VfRVhQUiwgJm9wMS51cHBl cl9ib3VuZCAoKSwgJm9wMi5sb3dlcl9ib3VuZCAoKSkpCisJciA9IHJhbmdlX2ZhbHNlICh0eXBl KTsKKyAgICAgIGVsc2UKKwlyID0gcmFuZ2VfdHJ1ZV9hbmRfZmFsc2UgKHR5cGUpOworICAgIH0K KyAgZWxzZSBpZiAob3AxLmdldF9uYW4gKCkueWVzX3AgKCkgfHwgb3AyLmdldF9uYW4gKCkueWVz X3AgKCkpCisgICAgciA9IHJhbmdlX2ZhbHNlICh0eXBlKTsKKyAgZWxzZQorICAgIHIgPSByYW5n ZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7CisgIHJldHVybiB0cnVlOworfQorCiBib29sCiBmb3Bl cmF0b3JfZ2U6Om9wMV9yYW5nZSAoZnJhbmdlICZyLAogCQkJIHRyZWUgdHlwZSwKIAkJCSBjb25z dCBpcmFuZ2UgJmxocywKLQkJCSBjb25zdCBmcmFuZ2UgJm9wMiBBVFRSSUJVVEVfVU5VU0VELAor CQkJIGNvbnN0IGZyYW5nZSAmb3AyLAogCQkJIHJlbGF0aW9uX2tpbmQpIGNvbnN0CiB7CiAgIHN3 aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAgIGNhc2UgQlJT X1RSVUU6Ci0gICAgICByLnNldF92YXJ5aW5nICh0eXBlKTsKLSAgICAgIC8vIFRoZSBUUlVFIHNp ZGUgb2Ygb3AxID49IG9wMiBpbXBsaWVzIG9wMSBpcyAhTkFOLgorICAgICAgYnVpbGRfZ2UgKHIs IHR5cGUsIG9wMi5sb3dlcl9ib3VuZCAoKSk7CiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5P KTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCUlNfRkFMU0U6Ci0gICAgICByLnNldF92YXJ5 aW5nICh0eXBlKTsKKyAgICAgIGJ1aWxkX2x0IChyLCB0eXBlLCBvcDIudXBwZXJfYm91bmQgKCkp OworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICBy ZXR1cm4gdHJ1ZTsKK30KKworYm9vbAorZm9wZXJhdG9yX2dlOjpvcDJfcmFuZ2UgKGZyYW5nZSAm ciwgdHJlZSB0eXBlLAorCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAorCQkJIGNvbnN0IGZyYW5nZSAm b3AxLAorCQkJIHJlbGF0aW9uX2tpbmQpIGNvbnN0Cit7CisgIHN3aXRjaCAoZ2V0X2Jvb2xfc3Rh dGUgKHIsIGxocywgdHlwZSkpCisgICAgeworICAgIGNhc2UgQlJTX0ZBTFNFOgorICAgICAgYnVp bGRfZ3QgKHIsIHR5cGUsIG9wMS5sb3dlcl9ib3VuZCAoKSk7CisgICAgICBicmVhazsKKworICAg IGNhc2UgQlJTX1RSVUU6CisgICAgICBidWlsZF9sZSAociwgdHlwZSwgb3AxLnVwcGVyX2JvdW5k ICgpKTsKKyAgICAgIHIuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOwogICAgICAgYnJlYWs7CiAKICAg ICBkZWZhdWx0OgpAQCAtNjM2LDcgKzg4MSw3IEBAIGZvcGVyYXRvcl91bm9yZGVyZWQ6Om9wMV9y YW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAgICAgICAvLyBTaW5jZSBhdCBsZWFzdCBvbmUg b3BlcmFuZCBtdXN0IGJlIE5BTiwgaWYgb25lIG9mIHRoZW0gaXMKICAgICAgIC8vIG5vdCwgdGhl IG90aGVyIG11c3QgYmUuCiAgICAgICBpZiAob3AyLmdldF9uYW4gKCkubm9fcCAoKSkKLQlyLnNl dF9uYW4gKGZwX3Byb3A6OllFUyk7CisJZnJhbmdlX3NldF9uYW4gKHIsIHR5cGUpOwogICAgICAg YnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3JlY2lwLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3JlY2lwLTMuYwppbmRleCA0MTBiMjgwNDRiNC4uMDM2ZjMyYTljMzMgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3JlY2lwLTMuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9yZWNpcC0zLmMKQEAgLTEsNiArMSwxMSBAQAogLyogeyBkZy1kbyBj b21waWxlIH0gKi8KIC8qIHsgZGctb3B0aW9ucyAiLU8xIC1mbm8tdHJhcHBpbmctbWF0aCAtZnVu c2FmZS1tYXRoLW9wdGltaXphdGlvbnMgLWZkdW1wLXRyZWUtcmVjaXAiIH0gKi8KIAorLyogVGhl IHJlY2lwIHBhc3MgaGFzIGEgdGhyZXNob2xkIG9mIDMgcmVjaXByb2NhbCBvcGVyYXRpb25zIGJl Zm9yZSBpdCBhdHRlbXB0cworICAgdG8gb3B0aW1pemUgYSBzZXF1ZW5jZS4gIFdpdGggYSBGUCBl bmFibGVkIHJhbmdlciwgd2UgZWxpbWluYXRlIG9uZSBvZiB0aGVtCisgICBlYXJsaWVyLCBjYXVz aW5nIHRoZSBwYXNzIHRvIHNraXAgdGhpcyBvcHRpbWl6YXRpb24uICAqLworLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1mbm8tdGhyZWFkLWp1bXBzIC1mbm8tdHJlZS1kb21pbmF0b3Itb3B0 cyIgfSAqLworCiBkb3VibGUgRls1XSA9IHsgMC4wLCAwLjAgfSwgZTsKIAogLyogSW4gdGhpcyBj YXNlIHRoZSBvcHRpbWl6YXRpb24gaXMgaW50ZXJlc3RpbmcuICAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3ZhbHVlLXF1ZXJ5LmNjIGIvZ2NjL3ZhbHVlLXF1ZXJ5LmNjCmluZGV4IDRhZjhlY2EwMTcyLi40 NjM3ZmI0MDllNSAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXF1ZXJ5LmNjCisrKyBiL2djYy92YWx1 ZS1xdWVyeS5jYwpAQCAtMjExLDEwICsyMTEsMTkgQEAgcmFuZ2VfcXVlcnk6OmdldF90cmVlX3Jh bmdlICh2cmFuZ2UgJnIsIHRyZWUgZXhwciwgZ2ltcGxlICpzdG10KQogICBzd2l0Y2ggKFRSRUVf Q09ERSAoZXhwcikpCiAgICAgewogICAgIGNhc2UgSU5URUdFUl9DU1Q6CisgICAgICBpZiAoVFJF RV9PVkVSRkxPV19QIChleHByKSkKKwlleHByID0gZHJvcF90cmVlX292ZXJmbG93IChleHByKTsK KyAgICAgIHIuc2V0IChleHByLCBleHByKTsKKyAgICAgIHJldHVybiB0cnVlOworCiAgICAgY2Fz ZSBSRUFMX0NTVDoKICAgICAgIGlmIChUUkVFX09WRVJGTE9XX1AgKGV4cHIpKQogCWV4cHIgPSBk cm9wX3RyZWVfb3ZlcmZsb3cgKGV4cHIpOwogICAgICAgci5zZXQgKGV4cHIsIGV4cHIpOworICAg ICAgaWYgKHJlYWxfaXNuYW4gKFRSRUVfUkVBTF9DU1RfUFRSIChleHByKSkpCisJYXNfYSA8ZnJh bmdlPiAocikuc2V0X25hbiAoZnBfcHJvcDo6WUVTKTsKKyAgICAgIGVsc2UKKwlhc19hIDxmcmFu Z2U+IChyKS5zZXRfbmFuIChmcF9wcm9wOjpOTyk7CiAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg IGNhc2UgU1NBX05BTUU6CmRpZmYgLS1naXQgYS9nY2MvdmFsdWUtcmFuZ2UtcHJldHR5LXByaW50 LmNjIGIvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYwppbmRleCBjYmY1MGQzZDg1NC4u ZTY2ZDU2ZGEyOWQgMTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5nZS1wcmV0dHktcHJpbnQuY2MK KysrIGIvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYwpAQCAtMTIyLDIyICsxMjIsMzAg QEAgdnJhbmdlX3ByaW50ZXI6OnByaW50X2lyYW5nZV9iaXRtYXNrcyAoY29uc3QgaXJhbmdlICZy KSBjb25zdAogdm9pZAogdnJhbmdlX3ByaW50ZXI6OnZpc2l0IChjb25zdCBmcmFuZ2UgJnIpIGNv bnN0CiB7CisgIHRyZWUgdHlwZSA9IHIudHlwZSAoKTsKKwogICBwcF9zdHJpbmcgKHBwLCAiW2Zy YW5nZV0gIik7CiAgIGlmIChyLnVuZGVmaW5lZF9wICgpKQogICAgIHsKICAgICAgIHBwX3N0cmlu ZyAocHAsICJVTkRFRklORUQiKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gIGR1bXBfZ2VuZXJp Y19ub2RlIChwcCwgci50eXBlICgpLCAwLCBUREZfTk9ORSwgZmFsc2UpOworICBkdW1wX2dlbmVy aWNfbm9kZSAocHAsIHR5cGUsIDAsIFRERl9OT05FLCBmYWxzZSk7CiAgIHBwX3N0cmluZyAocHAs ICIgIik7CiAgIGlmIChyLnZhcnlpbmdfcCAoKSkKICAgICB7CiAgICAgICBwcF9zdHJpbmcgKHBw LCAiVkFSWUlORyIpOwogICAgICAgcmV0dXJuOwogICAgIH0KKyAgcHBfY2hhcmFjdGVyIChwcCwg J1snKTsKKyAgZHVtcF9nZW5lcmljX25vZGUgKHBwLAorCQkgICAgIGJ1aWxkX3JlYWwgKHR5cGUs IHIubG93ZXJfYm91bmQgKCkpLCAwLCBUREZfTk9ORSwgZmFsc2UpOworICBwcF9zdHJpbmcgKHBw LCAiLCAiKTsKKyAgZHVtcF9nZW5lcmljX25vZGUgKHBwLAorCQkgICAgIGJ1aWxkX3JlYWwgKHR5 cGUsIHIudXBwZXJfYm91bmQgKCkpLCAwLCBUREZfTk9ORSwgZmFsc2UpOworICBwcF9zdHJpbmcg KHBwLCAiXSAiKTsKKwogICBwcmludF9mcmFuZ2VfcHJvcCAoIk5BTiIsIHIuZ2V0X25hbiAoKSk7 Ci0gIHByaW50X2ZyYW5nZV9wcm9wICgiSU5GIiwgci5nZXRfaW5mICgpKTsKLSAgcHJpbnRfZnJh bmdlX3Byb3AgKCJOSU5GIiwgci5nZXRfbmluZiAoKSk7CiB9CiAKIC8vIFByaW50IHRoZSBGUCBw cm9wZXJ0aWVzIGluIGFuIGZyYW5nZS4KZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS1zdG9y YWdlLmNjIGIvZ2NjL3ZhbHVlLXJhbmdlLXN0b3JhZ2UuY2MKaW5kZXggZWEzYjgzY2E2NDEuLmFk ZjIzYzM5ZjBkIDEwMDY0NAotLS0gYS9nY2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5jYworKysgYi9n Y2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5jYwpAQCAtMjYxLDYgKzI2MSwxOCBAQCBmcmFuZ2Vfc3Rv cmFnZV9zbG90OjpnZXRfZnJhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkgY29uc3QKIHsKICAg Z2NjX2NoZWNraW5nX2Fzc2VydCAoci5zdXBwb3J0c190eXBlX3AgKHR5cGUpKTsKIAorICAvLyBG SVhNRTogTkFOcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQsIGJlY2F1c2Ugd2UgbmVlZCBbTkFOLCBO QU5dIGluCisgIC8vIHRoZSByYW5nZSB0byBwcm9wZXJseSByZXByZXNlbnQgaXQsIG5vdCBqdXN0 IHRoZSBOQU4gZmxhZyBpbiB0aGUKKyAgLy8gcHJvcGVydHkgYml0cy4gIFRoaXMgd2lsbCBnbyBh d2F5IHdoZW4gd2Ugc3RyZWFtIG91dCB0aGUKKyAgLy8gZW5kcG9pbnRzLgorICBpZiAobV9wcm9w cy5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHsKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBydjsK KyAgICAgIHJlYWxfbmFuICgmcnYsICIiLCAxLCBUWVBFX01PREUgKHR5cGUpKTsKKyAgICAgIHIu c2V0ICh0eXBlLCBydiwgcnYpOworICAgICAgcmV0dXJuOworICAgIH0KKwogICByLnNldF92YXJ5 aW5nICh0eXBlKTsKICAgci5tX3Byb3BzID0gbV9wcm9wczsKICAgci5ub3JtYWxpemVfa2luZCAo KTsKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5jYyBiL2djYy92YWx1ZS1yYW5nZS5jYwpp bmRleCBlZGQxMGJmNTc5NC4uODkyMmQ1NjNiOTIgMTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5n ZS5jYworKysgYi9nY2MvdmFsdWUtcmFuZ2UuY2MKQEAgLTI5MSw0MSArMjkxLDE4IEBAIGZyYW5n ZTo6c2V0ICh0cmVlIG1pbiwgdHJlZSBtYXgsIHZhbHVlX3JhbmdlX2tpbmQga2luZCkKICAgbV9r aW5kID0ga2luZDsKICAgbV90eXBlID0gVFJFRV9UWVBFIChtaW4pOwogICBtX3Byb3BzLnNldF92 YXJ5aW5nICgpOworICBtX21pbiA9ICpUUkVFX1JFQUxfQ1NUX1BUUiAobWluKTsKKyAgbV9tYXgg PSAqVFJFRV9SRUFMX0NTVF9QVFIgKG1heCk7CiAKLSAgYm9vbCBpc19taW4gPSB2cnBfdmFsX2lz X21pbiAobWluKTsKLSAgYm9vbCBpc19tYXggPSB2cnBfdmFsX2lzX21heCAobWF4KTsKICAgYm9v bCBpc19uYW4gPSAocmVhbF9pc25hbiAoVFJFRV9SRUFMX0NTVF9QVFIgKG1pbikpCiAJCSB8fCBy ZWFsX2lzbmFuIChUUkVFX1JFQUxfQ1NUX1BUUiAobWF4KSkpOwogCiAgIC8vIFJhbmdlcyB3aXRo IGEgTkFOIGFuZCBhIG5vbi1OQU4gZW5kcG9pbnQgYXJlIG5vbnNlbnNpY2FsLgogICBnY2NfY2hl Y2tpbmdfYXNzZXJ0ICghaXNfbmFuIHx8IG9wZXJhbmRfZXF1YWxfcCAobWluLCBtYXgpKTsKIAot ICAvLyBUaGUgcHJvcGVydGllcyBmb3Igc2luZ2xldG9ucyBjYW4gYmUgYWxsIHNldCBhaGVhZCBv ZiB0aW1lLgotICBpZiAob3BlcmFuZF9lcXVhbF9wIChtaW4sIG1heCkpCi0gICAgewotICAgICAg Ly8gU2V0IElORiBwcm9wZXJ0aWVzLgotICAgICAgaWYgKGlzX21pbikKLQltX3Byb3BzLm5pbmZf c2V0X3llcyAoKTsKLSAgICAgIGVsc2UKLQltX3Byb3BzLm5pbmZfc2V0X25vICgpOwotICAgICAg aWYgKGlzX21heCkKLQltX3Byb3BzLmluZl9zZXRfeWVzICgpOwotICAgICAgZWxzZQotCW1fcHJv cHMuaW5mX3NldF9ubyAoKTsKLSAgICAgIC8vIFNldCBOQU4gcHJvcGVydHkuCi0gICAgICBpZiAo aXNfbmFuKQotCW1fcHJvcHMubmFuX3NldF95ZXMgKCk7Ci0gICAgICBlbHNlCi0JbV9wcm9wcy5u YW5fc2V0X25vICgpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIC8vIE1hcmsgd2hlbiB0 aGUgZW5kcG9pbnRzIGNhbid0IGJlICstSU5GLgotICAgICAgaWYgKCFpc19taW4pCi0JbV9wcm9w cy5uaW5mX3NldF9ubyAoKTsKLSAgICAgIGlmICghaXNfbWF4KQotCW1fcHJvcHMuaW5mX3NldF9u byAoKTsKLSAgICB9CisgIC8vIFNldCBOQU4gcHJvcGVydHkgaWYgd2UncmUgYWJzb2x1dGVseSBz dXJlLgorICBpZiAoaXNfbmFuICYmIG9wZXJhbmRfZXF1YWxfcCAobWluLCBtYXgpKQorICAgIG1f cHJvcHMubmFuX3NldF95ZXMgKCk7CiAKICAgLy8gQ2hlY2sgZm9yIHN3YXBwZWQgcmFuZ2VzLgog ICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChpc19uYW4gfHwgdHJlZV9jb21wYXJlIChMRV9FWFBSLCBt aW4sIG1heCkpOwpAQCAtMzM2LDYgKzMxMywxNiBAQCBmcmFuZ2U6OnNldCAodHJlZSBtaW4sIHRy ZWUgbWF4LCB2YWx1ZV9yYW5nZV9raW5kIGtpbmQpCiAgICAgdmVyaWZ5X3JhbmdlICgpOwogfQog CisvLyBTZXR0ZXIgZm9yIGZyYW5nZSBmcm9tIFJFQUxfVkFMVUVfVFlQRSBlbmRwb2ludHMuCisK K3ZvaWQKK2ZyYW5nZTo6c2V0ICh0cmVlIHR5cGUsCisJICAgICBjb25zdCBSRUFMX1ZBTFVFX1RZ UEUgJm1pbiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICZtYXgsCisJICAgICB2YWx1ZV9yYW5nZV9r aW5kIGtpbmQpCit7CisgIHNldCAoYnVpbGRfcmVhbCAodHlwZSwgbWluKSwgYnVpbGRfcmVhbCAo dHlwZSwgbWF4KSwga2luZCk7Cit9CisKIC8vIE5vcm1hbGl6ZSByYW5nZSB0byBWQVJZSU5HIG9y IFVOREVGSU5FRCwgb3IgdmljZSB2ZXJzYS4gIFJldHVybgogLy8gVFJVRSBpZiBhbnl0aGluZyBj aGFuZ2VkLgogLy8KQEAgLTM0Nyw3ICszMzQsMTUgQEAgZnJhbmdlOjpzZXQgKHRyZWUgbWluLCB0 cmVlIG1heCwgdmFsdWVfcmFuZ2Vfa2luZCBraW5kKQogYm9vbAogZnJhbmdlOjpub3JtYWxpemVf a2luZCAoKQogewotICBpZiAobV9raW5kID09IFZSX1JBTkdFKQorICAvLyBVbmRlZmluZWQgaXMg dmlyYWwuCisgIGlmIChtX3Byb3BzLm5hbl91bmRlZmluZWRfcCAoKSkKKyAgICB7CisgICAgICBz ZXRfdW5kZWZpbmVkICgpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICBpZiAobV9raW5k ID09IFZSX1JBTkdFCisgICAgICAmJiByZWFsX2lzaW5mICgmbV9taW4sIDEpCisgICAgICAmJiBy ZWFsX2lzaW5mICgmbV9tYXgsIDApKQogICAgIHsKICAgICAgIC8vIE5vIEZQIHByb3BlcnRpZXMg c2V0IG1lYW5zIHZhcnlpbmcuCiAgICAgICBpZiAobV9wcm9wcy52YXJ5aW5nX3AgKCkpCkBAIC0z NTUsMTQgKzM1MCw2IEBAIGZyYW5nZTo6bm9ybWFsaXplX2tpbmQgKCkKIAkgIHNldF92YXJ5aW5n IChtX3R5cGUpOwogCSAgcmV0dXJuIHRydWU7CiAJfQotICAgICAgLy8gVW5kZWZpbmVkIGlzIHZp cmFsLgotICAgICAgaWYgKG1fcHJvcHMubmFuX3VuZGVmaW5lZF9wICgpCi0JICB8fCBtX3Byb3Bz LmluZl91bmRlZmluZWRfcCAoKQotCSAgfHwgbV9wcm9wcy5uaW5mX3VuZGVmaW5lZF9wICgpKQot CXsKLQkgIHNldF91bmRlZmluZWQgKCk7Ci0JICByZXR1cm4gdHJ1ZTsKLQl9CiAgICAgfQogICBl bHNlIGlmIChtX2tpbmQgPT0gVlJfVkFSWUlORykKICAgICB7CkBAIC0zNzAsMTIgKzM1NywzMiBA QCBmcmFuZ2U6Om5vcm1hbGl6ZV9raW5kICgpCiAgICAgICBpZiAoIW1fcHJvcHMudmFyeWluZ19w ICgpKQogCXsKIAkgIG1fa2luZCA9IFZSX1JBTkdFOworCSAgcmVhbF9pbmYgKCZtX21pbiwgMSk7 CisJICByZWFsX2luZiAoJm1fbWF4LCAwKTsKIAkgIHJldHVybiB0cnVlOwogCX0KICAgICB9CiAg IHJldHVybiBmYWxzZTsKIH0KIAorLy8gSWYgYm90aCBvcGVyYW5kcyBhcmUgZGVmaW5pdGVseSBO QU4sIGRvIG5vdGhpbmcgYXMgdGhleSBjb21iaW5lCisvLyBwZXJmZWN0bHkuICBJZiBPVE9ILCBv bmx5IG9uZSBpcyBhIE5BTiwgc2V0IFIgdG8gVkFSWUlORyBhcyB0aGV5CisvLyBjYW4ndCBiZSBu ZWl0aGVyIHVuaW9uZWQgbm9yIGludGVyc2VjdGVkLiAgUmV0dXJuIFRSVUUgaWYgd2UKKy8vIGNo YW5nZWQgYW55dGhpbmcuCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWFybHlfbmFuX3Jlc29sdmUg KGZyYW5nZSAmciwgY29uc3QgZnJhbmdlICZvdGhlcikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2Vy dCAoci5nZXRfbmFuICgpLnllc19wICgpIHx8IG90aGVyLmdldF9uYW4gKCkueWVzX3AgKCkpOwor CisgIC8vIFRoZXJlJ3Mgbm90aGluZyB0byBkbyBmb3IgYm90aCBOQU5zLgorICBpZiAoci5nZXRf bmFuICgpLnllc19wICgpID09IG90aGVyLmdldF9uYW4gKCkueWVzX3AgKCkpCisgICAgcmV0dXJu IGZhbHNlOworICAvLyBCdXQgb25seSBvbmUgTkFOIGNvbXBsaWNhdGVzIHRoaW5ncy4KKyAgci5z ZXRfdmFyeWluZyAoci50eXBlICgpKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wKIGZyYW5n ZTo6dW5pb25fIChjb25zdCB2cmFuZ2UgJnYpCiB7CkBAIC0zODgsMTMgKzM5NSwzNCBAQCBmcmFu Z2U6OnVuaW9uXyAoY29uc3QgdnJhbmdlICZ2KQogICAgICAgKnRoaXMgPSByOwogICAgICAgcmV0 dXJuIHRydWU7CiAgICAgfQorICAvLyA/PyBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZS4gIFs1LDZd IFUgTkFOIHNob3VsZCBiZSBbNSw2XSB3aXRoIHRoZQorICAvLyBOQU4gbWF5YmUgYml0cyBzZXQu ICBGb3Igbm93LCB0aGlzIGlzIGNvbnNlcnZhdGl2ZWx5IGNvcnJlY3QuCisgIGlmIChnZXRfbmFu ICgpLnllc19wICgpIHx8IHIuZ2V0X25hbiAoKS55ZXNfcCAoKSkKKyAgICByZXR1cm4gZWFybHlf bmFuX3Jlc29sdmUgKCp0aGlzLCByKTsKKworICBib29sIGNoYW5nZWQgPSBtX3Byb3BzLnVuaW9u XyAoci5tX3Byb3BzKTsKKworICAvLyBOb3RlOiBmb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHplcm9z IHRoYXQgZGlmZmVyIGluIHNpZ24gd2Uga2VlcAorICAvLyB0aGUgZW5kcG9pbnRzIHVudG91Y2hl ZC4gIFRoaXMgbWVhbnMgdGhhdCBmb3IgLTAuMCBVICswLjAsIHRoZQorICAvLyByZXN1bHQgd2ls bCBiZSAtMC4wLiAgVWx0aW1hdGVseSB0aGlzIGRvZXNuJ3QgbWF0dGVyLCBiZWNhdXNlIHdlCisg IC8vIGtlZXAgc2luZ2xldG9uIHplcm9zIGFtYmlndW91cyB0aHJvdWdob3V0IHRvIGF2b2lkIHBy b3BhZ2F0aW5nCisgIC8vIHRoZW0uICBTZWUgZnJhbmdlOjpzaW5nbGV0b25fcCgpLgogCi0gIGJv b2wgcmV0ID0gbV9wcm9wcy51bmlvbl8gKHIubV9wcm9wcyk7Ci0gIHJldCB8PSBub3JtYWxpemVf a2luZCAoKTsKKyAgaWYgKHJlYWxfbGVzcyAoJnIubV9taW4sICZtX21pbikpCisgICAgeworICAg ICAgbV9taW4gPSByLm1fbWluOworICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgfQorICBpZiAo cmVhbF9sZXNzICgmbV9tYXgsICZyLm1fbWF4KSkKKyAgICB7CisgICAgICBtX21heCA9IHIubV9t YXg7CisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgIGNoYW5nZWQgfD0gbm9ybWFsaXpl X2tpbmQgKCk7CiAKICAgaWYgKGZsYWdfY2hlY2tpbmcpCiAgICAgdmVyaWZ5X3JhbmdlICgpOwot ICByZXR1cm4gcmV0OworICByZXR1cm4gY2hhbmdlZDsKIH0KIAogYm9vbApAQCAtNDE0LDEzICs0 NDIsMzggQEAgZnJhbmdlOjppbnRlcnNlY3QgKGNvbnN0IHZyYW5nZSAmdikKICAgICAgICp0aGlz ID0gcjsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgaWYgKGdldF9uYW4gKCkueWVzX3Ag KCkgfHwgci5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHJldHVybiBlYXJseV9uYW5fcmVzb2x2 ZSAoKnRoaXMsIHIpOworCisgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcHMuaW50ZXJzZWN0IChyLm1f cHJvcHMpOwogCi0gIGJvb2wgcmV0ID0gbV9wcm9wcy5pbnRlcnNlY3QgKHIubV9wcm9wcyk7Ci0g IHJldCB8PSBub3JtYWxpemVfa2luZCAoKTsKKyAgLy8gTm90ZTogZm9yIHRoZSBjb21iaW5hdGlv biBvZiB6ZXJvcyB0aGF0IGRpZmZlciBpbiBzaWduIHdlIGtlZXAKKyAgLy8gdGhlIGVuZHBvaW50 cyB1bnRvdWNoZWQuICBUaGlzIG1lYW5zIHRoYXQgZm9yIC0wLjAgXiArMC4wLCB0aGUKKyAgLy8g cmVzdWx0IHdpbGwgYmUgLTAuMC4gIFVsdGltYXRlbHkgdGhpcyBkb2Vzbid0IG1hdHRlciwgYmVj YXVzZSB3ZQorICAvLyBrZWVwIHNpbmdsZXRvbiB6ZXJvcyBhbWJpZ3VvdXMgdGhyb3VnaG91dCB0 byBhdm9pZCBwcm9wYWdhdGluZworICAvLyB0aGVtLiAgU2VlIGZyYW5nZTo6c2luZ2xldG9uX3Ao KS4KKworICBpZiAocmVhbF9sZXNzICgmbV9taW4sICZyLm1fbWluKSkKKyAgICB7CisgICAgICBt X21pbiA9IHIubV9taW47CisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgIGlmIChyZWFs X2xlc3MgKCZyLm1fbWF4LCAmbV9tYXgpKQorICAgIHsKKyAgICAgIG1fbWF4ID0gci5tX21heDsK KyAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0KKyAgLy8gSWYgdGhlIGVuZHBvaW50cyBhcmUg c3dhcHBlZCwgdGhlIHJhbmdlcyBhcmUgZGlzam9pbnQuCisgIGlmIChyZWFsX2xlc3MgKCZtX21h eCwgJm1fbWluKSkKKyAgICB7CisgICAgICBzZXRfdW5kZWZpbmVkICgpOworICAgICAgcmV0dXJu IHRydWU7CisgICAgfQorICBjaGFuZ2VkIHw9IG5vcm1hbGl6ZV9raW5kICgpOwogCiAgIGlmIChm bGFnX2NoZWNraW5nKQogICAgIHZlcmlmeV9yYW5nZSAoKTsKLSAgcmV0dXJuIHJldDsKKyAgcmV0 dXJuIGNoYW5nZWQ7CiB9CiAKIGZyYW5nZSAmCkBAIC00MjgsNiArNDgxLDggQEAgZnJhbmdlOjpv cGVyYXRvcj0gKGNvbnN0IGZyYW5nZSAmc3JjKQogewogICBtX2tpbmQgPSBzcmMubV9raW5kOwog ICBtX3R5cGUgPSBzcmMubV90eXBlOworICBtX21pbiA9IHNyYy5tX21pbjsKKyAgbV9tYXggPSBz cmMubV9tYXg7CiAgIG1fcHJvcHMgPSBzcmMubV9wcm9wczsKIAogICBpZiAoZmxhZ19jaGVja2lu ZykKQEAgLTQ0Niw3ICs1MDEsNjEgQEAgZnJhbmdlOjpvcGVyYXRvcj09IChjb25zdCBmcmFuZ2Ug JnNyYykgY29uc3QKICAgICAgIGlmICh2YXJ5aW5nX3AgKCkpCiAJcmV0dXJuIHR5cGVzX2NvbXBh dGlibGVfcCAobV90eXBlLCBzcmMubV90eXBlKTsKIAotICAgICAgcmV0dXJuIG1fcHJvcHMgPT0g c3JjLm1fcHJvcHM7CisgICAgICBpZiAobV9wcm9wcy5nZXRfbmFuICgpLnllc19wICgpCisJICB8 fCBzcmMubV9wcm9wcy5nZXRfbmFuICgpLnllc19wICgpKQorCXJldHVybiBmYWxzZTsKKworICAg ICAgcmV0dXJuIChyZWFsX2lkZW50aWNhbCAoJm1fbWluLCAmc3JjLm1fbWluKQorCSAgICAgICYm IHJlYWxfaWRlbnRpY2FsICgmbV9tYXgsICZzcmMubV9tYXgpCisJICAgICAgJiYgbV9wcm9wcyA9 PSBzcmMubV9wcm9wcworCSAgICAgICYmIHR5cGVzX2NvbXBhdGlibGVfcCAobV90eXBlLCBzcmMu bV90eXBlKSk7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFJldHVybiBUUlVFIGlm IHJhbmdlIGNvbnRhaW5zIHRoZSBUUkVFX1JFQUxfQ1NUX1BUUiBpbiBDU1QuCisKK2Jvb2wKK2Zy YW5nZTo6Y29udGFpbnNfcCAodHJlZSBjc3QpIGNvbnN0Cit7CisgIGlmICh1bmRlZmluZWRfcCAo KSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKHZhcnlpbmdfcCAoKSkKKyAgICByZXR1cm4g dHJ1ZTsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX2tpbmQgPT0gVlJfUkFOR0UpOworCisg IHJldHVybiAocmVhbF9jb21wYXJlIChHRV9FWFBSLCBUUkVFX1JFQUxfQ1NUX1BUUiAoY3N0KSwg Jm1fbWluKQorCSAgJiYgcmVhbF9jb21wYXJlIChMRV9FWFBSLCBUUkVFX1JFQUxfQ1NUX1BUUiAo Y3N0KSwgJm1fbWF4KSk7Cit9CisKKy8vIElmIHJhbmdlIGlzIGEgc2luZ2xldG9uLCBwbGFjZSBp dCBpbiBSRVNVTFQgYW5kIHJldHVybiBUUlVFLiAgSWYKKy8vIFJFU1VMVCBpcyBOVUxMLCBqdXN0 IHJldHVybiBUUlVFLgorLy8KKy8vIEEgTkFOIGNhbiBuZXZlciBiZSBhIHNpbmdsZXRvbiwgYW5k IG5laXRoZXIgY2FuIGEgMC4wIGlmIHdlJ3JlCisvLyBob25vcmluZyBzaWduZWQgemVyb3MgYmVj YXVzZSB3ZSBoYXZlIG5vIHdheSBvZiB0ZWxsaW5nIHdoaWNoIHplcm8KKy8vIGl0IGlzLgorCiti b29sCitmcmFuZ2U6OnNpbmdsZXRvbl9wICh0cmVlICpyZXN1bHQpIGNvbnN0Cit7CisgIGlmICht X2tpbmQgPT0gVlJfUkFOR0UKKyAgICAgICYmIHJlYWxfaWRlbnRpY2FsICgmbV9taW4sICZtX21h eCkKKyAgICAgICYmICghSE9OT1JfU0lHTkVEX1pFUk9TIChtX3R5cGUpIHx8ICF6ZXJvX3AgKCkp CisgICAgICAmJiAoIUhPTk9SX05BTlMgKG1fdHlwZSkgfHwgZ2V0X25hbiAoKS5ub19wICgpKSkK KyAgICB7CisgICAgICAvLyBJZiB3ZSdyZSBob25vcmluZyBzaWduZWQgemVyb3MsIGZhaWwgYmVj YXVzZSB3ZSBkb24ndCBrbm93CisgICAgICAvLyB3aGljaCB6ZXJvIHdlIGhhdmUuICBUaGlzIGF2 b2lkcyBwcm9wYWdhdGluZyB0aGUgd3JvbmcgemVyby4KKyAgICAgIGlmIChIT05PUl9TSUdORURf WkVST1MgKG1fdHlwZSkgJiYgemVyb19wICgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgaWYg KCFnZXRfbmFuICgpLm5vX3AgKCkpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBpZiAocmVzdWx0 KQorCSpyZXN1bHQgPSBidWlsZF9yZWFsIChtX3R5cGUsIG1fbWluKTsKKyAgICAgIHJldHVybiB0 cnVlOwogICAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDY1LDEzICs1NzQsODIgQEAgZnJh bmdlOjp2ZXJpZnlfcmFuZ2UgKCkKICAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKG1fcHJvcHMu dW5kZWZpbmVkX3AgKCkpOwogICAgICAgcmV0dXJuOwogICAgIH0KKyAgZ2NjX2NoZWNraW5nX2Fz c2VydCAoIW1fcHJvcHMudW5kZWZpbmVkX3AgKCkpOworCiAgIGlmICh2YXJ5aW5nX3AgKCkpCiAg ICAgewogICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAobV9wcm9wcy52YXJ5aW5nX3AgKCkpOwog ICAgICAgcmV0dXJuOwogICAgIH0KKworICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoZSBpbnZlcnNl IG9mIGFuIGZyYW5nZSAoeWV0KS4KICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAobV9raW5kID09IFZS X1JBTkdFKTsKLSAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIW1fcHJvcHMudmFyeWluZ19wICgpICYm ICFtX3Byb3BzLnVuZGVmaW5lZF9wICgpKTsKKworICBib29sIGlzX25hbiA9IHJlYWxfaXNuYW4g KCZtX21pbikgfHwgcmVhbF9pc25hbiAoJm1fbWF4KTsKKyAgaWYgKGlzX25hbikKKyAgICB7Cisg ICAgICAvLyBJZiBlaXRoZXIgaXMgYSBOQU4sIGJvdGggbXVzdCBiZSBhIE5BTi4KKyAgICAgIGdj Y19jaGVja2luZ19hc3NlcnQgKHJlYWxfaWRlbnRpY2FsICgmbV9taW4sICZtX21heCkpOworICAg ICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoZ2V0X25hbiAoKS55ZXNfcCAoKSk7CisgICAgfQorICBl bHNlCisgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgc3dhcHBlZCByYW5nZXMuCisgICAg Z2NjX2NoZWNraW5nX2Fzc2VydCAoIXJlYWxfbGVzcyAoJm1fbWF4LCAmbV9taW4pKTsKKworICAv LyBJZiB3ZSdyZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZSBhIE5BTiwgdGhlIGVuZHBvaW50cyBz aG91bGQKKyAgLy8gcmVmbGVjdCB0aGlzLCBvdGhlcndpc2Ugd2UnZCBoYXZlIG1vcmUgdGhhbiBv bmUgd2F5IHRvIHJlcHJlc2VudAorICAvLyBhIE5BTi4KKyAgaWYgKG1fcHJvcHMuZ2V0X25hbiAo KS55ZXNfcCAoKSkKKyAgICB7CisgICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChyZWFsX2lzbmFu ICgmbV9taW4pKTsKKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHJlYWxfaXNuYW4gKCZtX21h eCkpOworICAgIH0KKworICAvLyBJZiBhbGwgdGhlIHByb3BlcnRpZXMgYXJlIGNsZWFyLCB3ZSBi ZXR0ZXIgbm90IHNwYW4gdGhlIGVudGlyZQorICAvLyBkb21haW4sIGJlY2F1c2UgdGhhdCB3b3Vs ZCBtYWtlIHVzIHZhcnlpbmcuCisgIGlmIChtX3Byb3BzLnZhcnlpbmdfcCAoKSkKKyAgICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0ICghcmVhbF9pc2luZiAoJm1fbWluLCAxKSB8fCAhcmVhbF9pc2luZiAo Jm1fbWF4LCAwKSk7Cit9CisKKy8vIFdlIGNhbid0IGRvIG11Y2ggd2l0aCBub256ZXJvcyB5ZXQu Cit2b2lkCitmcmFuZ2U6OnNldF9ub256ZXJvICh0cmVlIHR5cGUpCit7CisgIHNldF92YXJ5aW5n ICh0eXBlKTsKK30KKworLy8gV2UgY2FuJ3QgZG8gbXVjaCB3aXRoIG5vbnplcm9zIHlldC4KK2Jv b2wKK2ZyYW5nZTo6bm9uemVyb19wICgpIGNvbnN0Cit7CisgIHJldHVybiBmYWxzZTsKK30KKwor Ly8gU2V0IHJhbmdlIHRvIFsrMC4wLCArMC4wXS4KKwordm9pZAorZnJhbmdlOjpzZXRfemVybyAo dHJlZSB0eXBlKQoreworICB0cmVlIHplcm8gPSBidWlsZF96ZXJvX2NzdCAodHlwZSk7CisgIHNl dCAoemVybywgemVybyk7Cit9CisKKy8vIFJldHVybiBUUlVFIGZvciBhbnkgWzAuMCwgMC4wXSBy ZWdhcmRsZXNzIG9mIHNpZ24uCisKK2Jvb2wKK2ZyYW5nZTo6emVyb19wICgpIGNvbnN0Cit7Cisg IHJldHVybiAobV9raW5kID09IFZSX1JBTkdFCisJICAmJiByZWFsX2lzemVybyAoJm1fbWluKQor CSAgJiYgcmVhbF9pc3plcm8gKCZtX21heCkpOworfQorCit2b2lkCitmcmFuZ2U6OnNldF9ub25u ZWdhdGl2ZSAodHJlZSB0eXBlKQoreworICB0cmVlIHplcm8gPSBidWlsZF96ZXJvX2NzdCAodHlw ZSk7CisgIHRyZWUgaW5mID0gdnJwX3ZhbF9tYXggKHR5cGUpOworICBzZXQgKHplcm8sIGluZik7 CiB9CiAKIC8vIEhlcmUgd2UgY29weSBiZXR3ZWVuIGFueSB0d28gaXJhbmdlJ3MuICBUaGUgcmFu Z2VzIGNhbiBiZSBsZWdhY3kgb3IKQEAgLTMzMDQsNiArMzQ4MiwyMjEgQEAgcmFuZ2VfdGVzdHNf bm9uemVyb19iaXRzICgpCiAgIEFTU0VSVF9UUlVFIChyMC52YXJ5aW5nX3AgKCkpOwogfQogCisv LyBCdWlsZCBhbiBmcmFuZ2UgZnJvbSBzdHJpbmcgZW5kcG9pbnRzLgorCitzdGF0aWMgaW5saW5l IGZyYW5nZQorZnJhbmdlX2Zsb2F0IChjb25zdCBjaGFyICpsYiwgY29uc3QgY2hhciAqdWIsIHRy ZWUgdHlwZSA9IGZsb2F0X3R5cGVfbm9kZSkKK3sKKyAgUkVBTF9WQUxVRV9UWVBFIG1pbiwgbWF4 OworICBnY2NfYXNzZXJ0IChyZWFsX2Zyb21fc3RyaW5nICgmbWluLCBsYikgPT0gMCk7CisgIGdj Y19hc3NlcnQgKHJlYWxfZnJvbV9zdHJpbmcgKCZtYXgsIHViKSA9PSAwKTsKKyAgcmV0dXJuIGZy YW5nZSAodHlwZSwgbWluLCBtYXgpOworfQorCisvLyBCdWlsZCBhIE5BTiBvZiB0eXBlIFRZUEUu CisKK3N0YXRpYyBpbmxpbmUgZnJhbmdlCitmcmFuZ2VfbmFuICh0cmVlIHR5cGUgPSBmbG9hdF90 eXBlX25vZGUpCit7CisgIFJFQUxfVkFMVUVfVFlQRSByOworCisgIGdjY19hc3NlcnQgKHJlYWxf bmFuICgmciwgIiIsIDEsIFRZUEVfTU9ERSAodHlwZSkpKTsKKyAgcmV0dXJuIGZyYW5nZSAodHlw ZSwgciwgcik7Cit9CisKKworLy8gU2V0IFIgdG8gbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVl IGZvciBUWVBFLgorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlYWxfbWF4X3JlcHJlc2VudGFibGUg KFJFQUxfVkFMVUVfVFlQRSAqciwgdHJlZSB0eXBlKQoreworICBjaGFyIGJ1ZlsxMjhdOworICBn ZXRfbWF4X2Zsb2F0IChSRUFMX01PREVfRk9STUFUIChUWVBFX01PREUgKHR5cGUpKSwKKwkJIGJ1 Ziwgc2l6ZW9mIChidWYpLCBmYWxzZSk7CisgIGludCByZXMgPSByZWFsX2Zyb21fc3RyaW5nIChy LCBidWYpOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghcmVzKTsKK30KKworLy8gU2V0IFIgdG8g bWluaW11bSByZXByZXNlbnRhYmxlIHZhbHVlIGZvciBUWVBFLgorCitzdGF0aWMgaW5saW5lIHZv aWQKK3JlYWxfbWluX3JlcHJlc2VudGFibGUgKFJFQUxfVkFMVUVfVFlQRSAqciwgdHJlZSB0eXBl KQoreworICByZWFsX21heF9yZXByZXNlbnRhYmxlIChyLCB0eXBlKTsKKyAgKnIgPSByZWFsX3Zh bHVlX25lZ2F0ZSAocik7Cit9CisKK3N0YXRpYyB2b2lkCityYW5nZV90ZXN0c19uYW4gKCkKK3sK KyAgZnJhbmdlIHIwLCByMTsKKworICAvLyBFcXVhbCByYW5nZXMgYnV0IHdpdGggZGlmZmVyaW5n IE5BTiBiaXRzIGFyZSBub3QgZXF1YWwuCisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMTAiLCAiMTIi KTsKKyAgcjAgPSByMTsKKyAgQVNTRVJUX0VRIChyMCwgcjEpOworICByMC5zZXRfbmFuIChmcF9w cm9wOjpOTyk7CisgIEFTU0VSVF9ORSAocjAsIHIxKTsKKyAgcjAuc2V0X25hbiAoZnBfcHJvcDo6 WUVTKTsKKyAgQVNTRVJUX05FIChyMCwgcjEpOworICByMC5zZXRfbmFuIChmcF9wcm9wOjpWQVJZ SU5HKTsKKyAgQVNTRVJUX0VRIChyMCwgcjEpOworCisgIC8vIE5BTiByYW5nZXMgYXJlIG5vdCBl cXVhbCB0byBlYWNoIG90aGVyLgorICByMCA9IGZyYW5nZV9uYW4gKCk7CisgIHIxID0gcjA7Cisg IEFTU0VSVF9GQUxTRSAocjAgPT0gcjEpOworICBBU1NFUlRfRkFMU0UgKHIwID09IHIwKTsKKyAg QVNTRVJUX1RSVUUgKHIwICE9IHIwKTsKKworICAvLyBNYWtlIHN1cmUgdGhhdCBjb21iaW5pbmcg TkFOIGFuZCBJTkYgZG9lc24ndCBnaXZlIGFueSBjcmF6eSByZXN1bHRzLgorICByMCA9IGZyYW5n ZV9uYW4gKCk7CisgIEFTU0VSVF9UUlVFIChyMC5nZXRfbmFuICgpLnllc19wICgpKTsKKyAgcjEg PSBmcmFuZ2VfZmxvYXQgKCIrSW5mIiwgIitJbmYiKTsKKyAgcjAudW5pb25fIChyMSk7CisgIC8v IFtJTkYsIElORl0gVSBOQU4gPSBWQVJZSU5HCisgIEFTU0VSVF9UUlVFIChyMC52YXJ5aW5nX3Ag KCkpOworCisgIC8vIFtJTkYsIElORl0gXiBOQU4gPSBWQVJZSU5HCisgIHIwID0gZnJhbmdlX25h biAoKTsKKyAgcjEgPSBmcmFuZ2VfZmxvYXQgKCIrSW5mIiwgIitJbmYiKTsKKyAgcjAuaW50ZXJz ZWN0IChyMSk7CisgIEFTU0VSVF9UUlVFIChyMC52YXJ5aW5nX3AgKCkpOworCisgIC8vIE5BTiBe IE5BTiA9IE5BTgorICByMCA9IGZyYW5nZV9uYW4gKCk7CisgIHIxID0gZnJhbmdlX25hbiAoKTsK KyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9UUlVFIChyMC5nZXRfbmFuICgpLnllc19w ICgpKTsKKworICAvLyBWQVJZSU5HIF4gTkFOID0gTkFOLgorICByMCA9IGZyYW5nZV9uYW4gKCk7 CisgIHIxLnNldF92YXJ5aW5nIChmbG9hdF90eXBlX25vZGUpOworICByMC5pbnRlcnNlY3QgKHIx KTsKKyAgQVNTRVJUX1RSVUUgKHIwLmdldF9uYW4gKCkueWVzX3AgKCkpOworfQorCitzdGF0aWMg dm9pZAorcmFuZ2VfdGVzdHNfc2lnbmVkX3plcm9zICgpCit7CisgIHRyZWUgemVybyA9IGJ1aWxk X3plcm9fY3N0IChmbG9hdF90eXBlX25vZGUpOworICB0cmVlIG5lZ196ZXJvID0gZm9sZF9idWls ZDEgKE5FR0FURV9FWFBSLCBmbG9hdF90eXBlX25vZGUsIHplcm8pOworICBmcmFuZ2UgcjAsIHIx OworCisgIC8vID8/IElmIC0wLjAgPT0gKzAuMCwgdGhlbiBhIHJhbmdlIG9mIFstMC4wLCAtMC4w XSBzaG91bGQKKyAgLy8gY29udGFpbiArMC4wIGFuZCB2aWNlIHZlcnNhLiAgV2UgcHJvYmFibHkg bmVlZCBhIHByb3BlcnR5IHRvCisgIC8vIHRyYWNrIHNpZ25lZCB6ZXJvcyBpbiB0aGUgZnJhbmdl IGxpa2Ugd2UgZG8gZm9yIE5BTiwgdG8KKyAgLy8gcHJvcGVybHkgbW9kZWwgYWxsIHRoaXMuCisg IHIwID0gZnJhbmdlICh6ZXJvLCB6ZXJvKTsKKyAgcjEgPSBmcmFuZ2UgKG5lZ196ZXJvLCBuZWdf emVybyk7CisgIEFTU0VSVF9UUlVFIChyMC5jb250YWluc19wICh6ZXJvKSk7CisgIEFTU0VSVF9U UlVFIChyMC5jb250YWluc19wIChuZWdfemVybykpOworICBBU1NFUlRfVFJVRSAocjEuY29udGFp bnNfcCAoemVybykpOworICBBU1NFUlRfVFJVRSAocjEuY29udGFpbnNfcCAobmVnX3plcm8pKTsK K30KKworc3RhdGljIHZvaWQKK3JhbmdlX3Rlc3RzX2Zsb2F0cyAoKQoreworICBmcmFuZ2UgcjAs IHIxOworCisgIHJhbmdlX3Rlc3RzX25hbiAoKTsKKworICBpZiAoSE9OT1JfU0lHTkVEX1pFUk9T IChmbG9hdF90eXBlX25vZGUpKQorICAgIHJhbmdlX3Rlc3RzX3NpZ25lZF96ZXJvcyAoKTsKKwor ICAvLyBBIHJhbmdlIG9mIFstSU5GLCtJTkZdIGlzIGFjdHVhbGx5IFZBUllJTkcuLi4KKyAgcjAg PSBmcmFuZ2VfZmxvYXQgKCItSW5mIiwgIitJbmYiKTsKKyAgQVNTRVJUX1RSVUUgKHIwLnZhcnlp bmdfcCAoKSk7CisgIC8vIC4uLnVubGVzcyBpdCBoYXMgc29tZSBzcGVjaWFsIHByb3BlcnR5Li4u CisgIHIwLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKKyAgQVNTRVJUX0ZBTFNFIChyMC52YXJ5aW5n X3AgKCkpOworCisgIC8vIFRoZSBlbmRwb2ludHMgb2YgYSBWQVJZSU5HIGFyZSArLUlORi4KKyAg UkVBTF9WQUxVRV9UWVBFIGluZiwgbmluZjsKKyAgcmVhbF9pbmYgKCZpbmYsIDApOworICByZWFs X2luZiAoJm5pbmYsIDEpOworICByMC5zZXRfdmFyeWluZyAoZmxvYXRfdHlwZV9ub2RlKTsKKyAg QVNTRVJUX1RSVUUgKHJlYWxfaWRlbnRpY2FsICgmcjAubG93ZXJfYm91bmQgKCksICZuaW5mKSk7 CisgIEFTU0VSVF9UUlVFIChyZWFsX2lkZW50aWNhbCAoJnIwLnVwcGVyX2JvdW5kICgpLCAmaW5m KSk7CisKKyAgLy8gVGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSByYW5nZSBmb3IgYSB0eXBlIGlz IHN0aWxsIGEgc3Vic2V0IG9mIFZBUllJTkcuCisgIFJFQUxfVkFMVUVfVFlQRSBxLCByOworICBy ZWFsX21pbl9yZXByZXNlbnRhYmxlICgmcSwgZmxvYXRfdHlwZV9ub2RlKTsKKyAgcmVhbF9tYXhf cmVwcmVzZW50YWJsZSAoJnIsIGZsb2F0X3R5cGVfbm9kZSk7CisgIHIwID0gZnJhbmdlIChmbG9h dF90eXBlX25vZGUsIHEsIHIpOworICAvLyByMCBpcyBub3QgYSB2YXJ5aW5nLCBiZWNhdXNlIGl0 IGRvZXMgbm90IGluY2x1ZGUgLUlORi8rSU5GLgorICBBU1NFUlRfRkFMU0UgKHIwLnZhcnlpbmdf cCAoKSk7CisgIC8vIFRoZSB1cHBlciBib3VuZCBvZiByMCBtdXN0IGJlIGxlc3MgdGhhbiArSU5G LgorICBBU1NFUlRfVFJVRSAocmVhbF9sZXNzICgmcjAudXBwZXJfYm91bmQgKCksICZpbmYpKTsK KyAgLy8gVGhlIGxvd2VyIGJvdW5kIG9mIHIwIG11c3QgYmUgZ3JlYXRlciB0aGFuIC1JTkYuCisg IEFTU0VSVF9UUlVFIChyZWFsX2xlc3MgKCZuaW5mLCAmcjAubG93ZXJfYm91bmQgKCkpKTsKKwor ICAvLyBGb3IgbW9zdCBhcmNoaXRlY3R1cmVzLCB3aGVyZSBmbG9hdCBhbmQgZG91YmxlIGFyZSBk aWZmZXJlbnQKKyAgLy8gc2l6ZXMsIGhhdmluZyB0aGUgc2FtZSBlbmRwb2ludHMgZG9lcyBub3Qg bmVjZXNzYXJpbHkgbWVhbiB0aGUKKyAgLy8gcmFuZ2VzIGFyZSBlcXVhbC4KKyAgaWYgKCF0eXBl c19jb21wYXRpYmxlX3AgKGZsb2F0X3R5cGVfbm9kZSwgZG91YmxlX3R5cGVfbm9kZSkpCisgICAg eworICAgICAgcjAgPSBmcmFuZ2VfZmxvYXQgKCIzLjAiLCAiMy4wIiwgZmxvYXRfdHlwZV9ub2Rl KTsKKyAgICAgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMy4wIiwgIjMuMCIsIGRvdWJsZV90eXBlX25v ZGUpOworICAgICAgQVNTRVJUX05FIChyMCwgcjEpOworICAgIH0KKworICAvLyBbMyw1XSBVIFsx MCwxMl0gPSBbMywxMl0uCisgIHIwID0gZnJhbmdlX2Zsb2F0ICgiMyIsICI1Iik7CisgIHIxID0g ZnJhbmdlX2Zsb2F0ICgiMTAiLCAiMTIiKTsKKyAgcjAudW5pb25fIChyMSk7CisgIEFTU0VSVF9F USAocjAsIGZyYW5nZV9mbG9hdCAoIjMiLCAiMTIiKSk7CisKKyAgLy8gWzUsMTBdIFUgWzQsOF0g PSBbNCwxMF0KKyAgcjAgPSBmcmFuZ2VfZmxvYXQgKCI1IiwgIjEwIik7CisgIHIxID0gZnJhbmdl X2Zsb2F0ICgiNCIsICI4Iik7CisgIHIwLnVuaW9uXyAocjEpOworICBBU1NFUlRfRVEgKHIwLCBm cmFuZ2VfZmxvYXQgKCI0IiwgIjEwIikpOworCisgIC8vIFszLDVdIFUgWzQsMTBdID0gWzMsMTBd CisgIHIwID0gZnJhbmdlX2Zsb2F0ICgiMyIsICI1Iik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgi NCIsICIxMCIpOworICByMC51bmlvbl8gKHIxKTsKKyAgQVNTRVJUX0VRIChyMCwgZnJhbmdlX2Zs b2F0ICgiMyIsICIxMCIpKTsKKworICAvLyBbNCwxMF0gVSBbNSwxMV0gPSBbNCwxMV0KKyAgcjAg PSBmcmFuZ2VfZmxvYXQgKCI0IiwgIjEwIik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiNSIsICIx MSIpOworICByMC51bmlvbl8gKHIxKTsKKyAgQVNTRVJUX0VRIChyMCwgZnJhbmdlX2Zsb2F0ICgi NCIsICIxMSIpKTsKKworICAvLyBbMywxMl0gXiBbMTAsMTJdID0gWzEwLDEyXS4KKyAgcjAgPSBm cmFuZ2VfZmxvYXQgKCIzIiwgIjEyIik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMTAiLCAiMTIi KTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAo IjEwIiwgIjEyIikpOworCisgIC8vIFsxMCwxMl0gXiBbMTEsMTFdID0gWzExLDExXQorICByMCA9 IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjEyIik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMTEiLCAi MTEiKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9h dCAoIjExIiwgIjExIikpOworCisgIC8vIFsxMCwyMF0gXiBbNSwxNV0gPSBbMTAsMTVdCisgIHIw ID0gZnJhbmdlX2Zsb2F0ICgiMTAiLCAiMjAiKTsKKyAgcjEgPSBmcmFuZ2VfZmxvYXQgKCI1Iiwg ICIxNSIpOworICByMC5pbnRlcnNlY3QgKHIxKTsKKyAgQVNTRVJUX0VRIChyMCwgZnJhbmdlX2Zs b2F0ICgiMTAiLCAiMTUiKSk7CisKKyAgLy8gWzEwLDIwXSBeIFsxNSwyNV0gPSBbMTUsMjBdCisg IHIwID0gZnJhbmdlX2Zsb2F0ICgiMTAiLCAiMjAiKTsKKyAgcjEgPSBmcmFuZ2VfZmxvYXQgKCIx NSIsICIyNSIpOworICByMC5pbnRlcnNlY3QgKHIxKTsKKyAgQVNTRVJUX0VRIChyMCwgZnJhbmdl X2Zsb2F0ICgiMTUiLCAiMjAiKSk7CisKKyAgLy8gWzEwLDIwXSBeIFsyMSwyNV0gPSBbXQorICBy MCA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjIwIik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMjEi LCAiMjUiKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9UUlVFIChyMC51bmRlZmlu ZWRfcCAoKSk7Cit9CisKIHZvaWQKIHJhbmdlX3Rlc3RzICgpCiB7CkBAIC0zMzEyLDYgKzM3MDUs NyBAQCByYW5nZV90ZXN0cyAoKQogICByYW5nZV90ZXN0c19pbnRfcmFuZ2VfbWF4ICgpOwogICBy YW5nZV90ZXN0c19zdHJpY3RfZW51bSAoKTsKICAgcmFuZ2VfdGVzdHNfbm9uemVyb19iaXRzICgp OworICByYW5nZV90ZXN0c19mbG9hdHMgKCk7CiAgIHJhbmdlX3Rlc3RzX21pc2MgKCk7CiB9CiAK ZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5oIGIvZ2NjL3ZhbHVlLXJhbmdlLmgKaW5kZXgg ZjAwNzVkMGZiMWEuLjFkOTM2MzRhNmM2IDEwMDY0NAotLS0gYS9nY2MvdmFsdWUtcmFuZ2UuaAor KysgYi9nY2MvdmFsdWUtcmFuZ2UuaApAQCAtMzE0LDE0ICszMTQsMTAgQEAgcHVibGljOgogICBi b29sIGludGVyc2VjdCAoY29uc3QgZnJhbmdlX3Byb3BzICZvdGhlcik7CiAgIGJvb2wgb3BlcmF0 b3I9PSAoY29uc3QgZnJhbmdlX3Byb3BzICZvdGhlcikgY29uc3Q7CiAgIEZQX1BST1BfQUNDRVNT T1IobmFuKQotICBGUF9QUk9QX0FDQ0VTU09SKGluZikKLSAgRlBfUFJPUF9BQ0NFU1NPUihuaW5m KQogcHJpdmF0ZToKICAgdW5pb24gewogICAgIHN0cnVjdCB7CiAgICAgICB1bnNpZ25lZCBjaGFy IG5hbiA6IDI7Ci0gICAgICB1bnNpZ25lZCBjaGFyIGluZiA6IDI7Ci0gICAgICB1bnNpZ25lZCBj aGFyIG5pbmYgOiAyOwogICAgIH0gYml0czsKICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzOwogICB9 IHU7CkBAIC0zNDUsMzQgKzM0MSw2MiBAQCBjbGFzcyBmcmFuZ2UgOiBwdWJsaWMgdnJhbmdlCiBw dWJsaWM6CiAgIGZyYW5nZSAoKTsKICAgZnJhbmdlIChjb25zdCBmcmFuZ2UgJik7CisgIGZyYW5n ZSAodHJlZSwgdHJlZSwgdmFsdWVfcmFuZ2Vfa2luZCA9IFZSX1JBTkdFKTsKKyAgZnJhbmdlICh0 cmVlIHR5cGUsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmbWluLCBjb25zdCBSRUFMX1ZBTFVFX1RZ UEUgJm1heCwKKwkgIHZhbHVlX3JhbmdlX2tpbmQgPSBWUl9SQU5HRSk7CiAgIHN0YXRpYyBib29s IHN1cHBvcnRzX3AgKGNvbnN0X3RyZWUgdHlwZSkKICAgewogICAgIHJldHVybiBTQ0FMQVJfRkxP QVRfVFlQRV9QICh0eXBlKTsKICAgfQogICB2aXJ0dWFsIHRyZWUgdHlwZSAoKSBjb25zdCBvdmVy cmlkZTsKICAgdmlydHVhbCB2b2lkIHNldCAodHJlZSwgdHJlZSwgdmFsdWVfcmFuZ2Vfa2luZCA9 IFZSX1JBTkdFKSBvdmVycmlkZTsKKyAgdm9pZCBzZXQgKHRyZWUgdHlwZSwgY29uc3QgUkVBTF9W QUxVRV9UWVBFICYsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmLAorCSAgICB2YWx1ZV9yYW5nZV9r aW5kID0gVlJfUkFOR0UpOwogICB2aXJ0dWFsIHZvaWQgc2V0X3ZhcnlpbmcgKHRyZWUgdHlwZSkg b3ZlcnJpZGU7CiAgIHZpcnR1YWwgdm9pZCBzZXRfdW5kZWZpbmVkICgpIG92ZXJyaWRlOwogICB2 aXJ0dWFsIGJvb2wgdW5pb25fIChjb25zdCB2cmFuZ2UgJikgb3ZlcnJpZGU7CiAgIHZpcnR1YWwg Ym9vbCBpbnRlcnNlY3QgKGNvbnN0IHZyYW5nZSAmKSBvdmVycmlkZTsKKyAgdmlydHVhbCBib29s IGNvbnRhaW5zX3AgKHRyZWUpIGNvbnN0IG92ZXJyaWRlOworICB2aXJ0dWFsIGJvb2wgc2luZ2xl dG9uX3AgKHRyZWUgKnJlc3VsdCA9IE5VTEwpIGNvbnN0IG92ZXJyaWRlOwogICB2aXJ0dWFsIGJv b2wgc3VwcG9ydHNfdHlwZV9wIChjb25zdF90cmVlIHR5cGUpIGNvbnN0IG92ZXJyaWRlOwogICB2 aXJ0dWFsIHZvaWQgYWNjZXB0IChjb25zdCB2cmFuZ2VfdmlzaXRvciAmdikgY29uc3Qgb3ZlcnJp ZGU7CisgIHZpcnR1YWwgYm9vbCB6ZXJvX3AgKCkgY29uc3Q7CisgIHZpcnR1YWwgYm9vbCBub256 ZXJvX3AgKCkgY29uc3Q7CisgIHZpcnR1YWwgdm9pZCBzZXRfbm9uemVybyAodHJlZSB0eXBlKTsK KyAgdmlydHVhbCB2b2lkIHNldF96ZXJvICh0cmVlIHR5cGUpOworICB2aXJ0dWFsIHZvaWQgc2V0 X25vbm5lZ2F0aXZlICh0cmVlIHR5cGUpOwogICBmcmFuZ2UmIG9wZXJhdG9yPSAoY29uc3QgZnJh bmdlICYpOwogICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGZyYW5nZSAmKSBjb25zdDsKICAgYm9v bCBvcGVyYXRvciE9IChjb25zdCBmcmFuZ2UgJnIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0g cik7IH0KKyAgY29uc3QgUkVBTF9WQUxVRV9UWVBFICZsb3dlcl9ib3VuZCAoKSBjb25zdDsKKyAg Y29uc3QgUkVBTF9WQUxVRV9UWVBFICZ1cHBlcl9ib3VuZCAoKSBjb25zdDsKIAogICAvLyBFYWNo IGZwX3Byb3AgY2FuIGJlIGFjY2Vzc2VkIHdpdGggZ2V0X1BST1AoKSBhbmQgc2V0X1BST1AoKS4K ICAgRlJBTkdFX1BST1BfQUNDRVNTT1IobmFuKQotICBGUkFOR0VfUFJPUF9BQ0NFU1NPUihpbmYp Ci0gIEZSQU5HRV9QUk9QX0FDQ0VTU09SKG5pbmYpCiBwcml2YXRlOgogICB2b2lkIHZlcmlmeV9y YW5nZSAoKTsKICAgYm9vbCBub3JtYWxpemVfa2luZCAoKTsKIAogICBmcmFuZ2VfcHJvcHMgbV9w cm9wczsKICAgdHJlZSBtX3R5cGU7CisgIFJFQUxfVkFMVUVfVFlQRSBtX21pbjsKKyAgUkVBTF9W QUxVRV9UWVBFIG1fbWF4OwogfTsKIAoraW5saW5lIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmCitm cmFuZ2U6Omxvd2VyX2JvdW5kICgpIGNvbnN0Cit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCF1 bmRlZmluZWRfcCAoKSk7CisgIHJldHVybiBtX21pbjsKK30KKworaW5saW5lIGNvbnN0IFJFQUxf VkFMVUVfVFlQRSAmCitmcmFuZ2U6OnVwcGVyX2JvdW5kICgpIGNvbnN0Cit7CisgIGdjY19jaGVj a2luZ19hc3NlcnQgKCF1bmRlZmluZWRfcCAoKSk7CisgIHJldHVybiBtX21heDsKK30KKwogLy8g aXNfYTw+IGFuZCBhc19hPD4gaW1wbGVtZW50YXRpb24gZm9yIHZyYW5nZS4KIAogLy8gQW55dGhp bmcgd2UgaGF2ZW4ndCBzcGVjaWFsaXplZCBpcyBhIGhhcmQgZmFpbC4KQEAgLTEwNTEsOCArMTA3 NSw4IEBAIHZycF92YWxfbWluIChjb25zdF90cmVlIHR5cGUpCiAgIGlmIChmcmFuZ2U6OnN1cHBv cnRzX3AgKHR5cGUpKQogICAgIHsKICAgICAgIFJFQUxfVkFMVUVfVFlQRSByZWFsLCByZWFsX25p bmY7Ci0gICAgICByZWFsX2luZiAoJnJlYWwpOwotICAgICAgcmVhbF9uaW5mID0gcmVhbF92YWx1 ZV9uZWdhdGUgKCZyZWFsKTsKKyAgICAgIHJlYWxfaW5mICgmcmVhbCwgMCk7CisgICAgICByZWFs X2luZiAoJnJlYWxfbmluZiwgMSk7CiAgICAgICByZXR1cm4gYnVpbGRfcmVhbCAoY29uc3RfY2Fz dCA8dHJlZT4gKHR5cGUpLCByZWFsX25pbmYpOwogICAgIH0KICAgcmV0dXJuIE5VTExfVFJFRTsK QEAgLTEwOTYsNiArMTEyMCwyNiBAQCBmcmFuZ2U6OmZyYW5nZSAoY29uc3QgZnJhbmdlICZzcmMp CiAgICp0aGlzID0gc3JjOwogfQogCisvLyBmcmFuZ2UgY29uc3RydWN0b3IgZnJvbSBSRUFMX1ZB TFVFX1RZUEUgZW5kcG9pbnRzLgorCitpbmxpbmUKK2ZyYW5nZTo6ZnJhbmdlICh0cmVlIHR5cGUs CisJCWNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmbWluLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJm1h eCwKKwkJdmFsdWVfcmFuZ2Vfa2luZCBraW5kKQoreworICBtX2Rpc2NyaW1pbmF0b3IgPSBWUl9G UkFOR0U7CisgIHNldCAodHlwZSwgbWluLCBtYXgsIGtpbmQpOworfQorCisvLyBmcmFuZ2UgY29u c3RydWN0b3IgZnJvbSB0cmVlcy4KKworaW5saW5lCitmcmFuZ2U6OmZyYW5nZSAodHJlZSBtaW4s IHRyZWUgbWF4LCB2YWx1ZV9yYW5nZV9raW5kIGtpbmQpCit7CisgIG1fZGlzY3JpbWluYXRvciA9 IFZSX0ZSQU5HRTsKKyAgc2V0IChtaW4sIG1heCwga2luZCk7Cit9CisKIGlubGluZSB0cmVlCiBm cmFuZ2U6OnR5cGUgKCkgY29uc3QKIHsKQEAgLTExMDcsNiArMTE1MSw4IEBAIGZyYW5nZTo6c2V0 X3ZhcnlpbmcgKHRyZWUgdHlwZSkKIHsKICAgbV9raW5kID0gVlJfVkFSWUlORzsKICAgbV90eXBl ID0gdHlwZTsKKyAgcmVhbF9pbmYgKCZtX21pbiwgMSk7CisgIHJlYWxfaW5mICgmbV9tYXgsIDAp OwogICBtX3Byb3BzLnNldF92YXJ5aW5nICgpOwogfQogCkBAIC0xMTE2LDYgKzExNjIsOCBAQCBm cmFuZ2U6OnNldF91bmRlZmluZWQgKCkKICAgbV9raW5kID0gVlJfVU5ERUZJTkVEOwogICBtX3R5 cGUgPSBOVUxMOwogICBtX3Byb3BzLnNldF91bmRlZmluZWQgKCk7CisgIG1lbXNldCAoJm1fbWlu LCAwLCBzaXplb2YgKG1fbWluKSk7CisgIG1lbXNldCAoJm1fbWF4LCAwLCBzaXplb2YgKG1fbWF4 KSk7CiB9CiAKICNlbmRpZiAvLyBHQ0NfVkFMVUVfUkFOR0VfSAotLSAKMi4zNy4xCgo= --000000000000fd9e6505e7617af7--