From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 111444 invoked by alias); 6 Mar 2019 07:46:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 111432 invoked by uid 89); 6 Mar 2019 07:46:50 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=UD:pr88828-3d.c, d1930, UD:pr88828-2b.c, y_6 X-HELO: mail-ot1-f67.google.com Received: from mail-ot1-f67.google.com (HELO mail-ot1-f67.google.com) (209.85.210.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Mar 2019 07:46:45 +0000 Received: by mail-ot1-f67.google.com with SMTP id i12so9906999otp.12 for ; Tue, 05 Mar 2019 23:46:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=rtA2wy8WJo4A1mOMlY8uQyBg1X2nYCpOT5Lyin66vIA=; b=lj2Zyi0n94eG3WhhDiYE06DK6lvIuyfZuBaXjSR43W7LVJnjoNJW3YLa8Mrpj3pOW5 YrbJ/S+NkV0ypJP0n3nPmKIExs4TmL8lbLESIK98kbrqPfkQbuUKnVXDTkq0HQk552Ga ilO8omW7lnqxJnvaRSBDHBGEyEbAr/V79RkbgOE8arEbpvcq1hb9wrSm3JpCf4Qd9Qo+ 0Y6Z0Zs1I5B8a8AKDuVDeOKSSr3wIsbTQ6811mPhudFXk18L0u1SJibXzVaWKcihVQcQ 0BQgLLKKsElytijDNLcxN1fw8olwy2HqN7RtQkhDVCC6KT8EMn4sMOfsqzY4ROxjlher xqnA== MIME-Version: 1.0 References: <20190303143230.19742-1-hjl.tools@gmail.com> <20190303211325.GA24057@gmail.com> <20190304174625.GA25613@gmail.com> In-Reply-To: <20190304174625.GA25613@gmail.com> From: "H.J. Lu" Date: Wed, 06 Mar 2019 07:54:00 -0000 Message-ID: Subject: V3 [PATCH] Optimize vector constructor To: Richard Biener , Hongtao Liu Cc: Andrew Pinski , GCC Patches Content-Type: multipart/mixed; boundary="000000000000e9779f05836830a0" X-IsSubscribed: yes X-SW-Source: 2019-03/txt/msg00233.txt.bz2 --000000000000e9779f05836830a0 Content-Type: text/plain; charset="UTF-8" Content-length: 2801 On Tue, Mar 5, 2019 at 1:46 AM H.J. Lu wrote: > > On Mon, Mar 04, 2019 at 12:55:04PM +0100, Richard Biener wrote: > > On Sun, Mar 3, 2019 at 10:13 PM H.J. Lu wrote: > > > > > > On Sun, Mar 03, 2019 at 06:40:09AM -0800, Andrew Pinski wrote: > > > > ) > > > > ,On Sun, Mar 3, 2019 at 6:32 AM H.J. Lu wrote: > > > > > > > > > > For vector init constructor: > > > > > > > > > > --- > > > > > typedef float __v4sf __attribute__ ((__vector_size__ (16))); > > > > > > > > > > __v4sf > > > > > foo (__v4sf x, float f) > > > > > { > > > > > __v4sf y = { f, x[1], x[2], x[3] }; > > > > > return y; > > > > > } > > > > > --- > > > > > > > > > > we can optimize vector init constructor with vector copy or permute > > > > > followed by a single scalar insert: > > > and you want to advance to the _1 = BIT_INSERT_EXPR here. The easiest way > > is to emit a new stmt for _2 = copy ...; and do the set_rhs with the > > BIT_INSERT_EXPR. > > Thanks for BIT_INSERT_EXPR suggestion. I am testing this patch. > > > H.J. > --- > We can optimize vector constructor with vector copy or permute followed > by a single scalar insert: > > __v4sf y; > __v4sf D.1930; > float _1; > float _2; > float _3; > > : > _1 = BIT_FIELD_REF ; > _2 = BIT_FIELD_REF ; > _3 = BIT_FIELD_REF ; > y_6 = {f_5(D), _3, _2, _1}; > return y_6; > > with > > __v4sf y; > __v4sf D.1930; > float _1; > float _2; > float _3; > vector(4) float _8; > > : > _1 = BIT_FIELD_REF ; > _2 = BIT_FIELD_REF ; > _3 = BIT_FIELD_REF ; > _8 = x_9(D); > y_6 = BIT_INSERT_EXPR ; > return y_6; > > gcc/ > > PR tree-optimization/88828 > * tree-ssa-forwprop.c (simplify_vector_constructor): Optimize > vector init constructor with vector copy or permute followed > by a single scalar insert. > > gcc/testsuite/ > > PR tree-optimization/88828 > * gcc.target/i386/pr88828-1a.c: New test. > * gcc.target/i386/pr88828-2b.c: Likewise. > * gcc.target/i386/pr88828-2.c: Likewise. > * gcc.target/i386/pr88828-3a.c: Likewise. > * gcc.target/i386/pr88828-3b.c: Likewise. > * gcc.target/i386/pr88828-3c.c: Likewise. > * gcc.target/i386/pr88828-3d.c: Likewise. > * gcc.target/i386/pr88828-4a.c: Likewise. > * gcc.target/i386/pr88828-4b.c: Likewise. > * gcc.target/i386/pr88828-5a.c: Likewise. > * gcc.target/i386/pr88828-5b.c: Likewise. > * gcc.target/i386/pr88828-6a.c: Likewise. > * gcc.target/i386/pr88828-6b.c: Likewise. Here is the updated patch with run-time tests. -- H.J. --000000000000e9779f05836830a0 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Optimize-vector-constructor.patch" Content-Disposition: attachment; filename="0001-Optimize-vector-constructor.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jswwdn510 Content-length: 32465 RnJvbSBiMmJjMGJmM2E4ZWUxN2Q1M2JmMzlmMGFlYWJlNzAyNWIzM2U5Yzk2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNSBGZWIgMjAxOSAxNToz OToyNyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIE9wdGltaXplIHZlY3RvciBj b25zdHJ1Y3RvcgoKV2UgY2FuIG9wdGltaXplIHZlY3RvciBjb25zdHJ1Y3Rv ciB3aXRoIHZlY3RvciBjb3B5IG9yIHBlcm11dGUgZm9sbG93ZWQKYnkgYSBz aW5nbGUgc2NhbGFyIGluc2VydDoKCiAgX192NHNmIHk7CiAgX192NHNmIEQu MTkzMDsKICBmbG9hdCBfMTsKICBmbG9hdCBfMjsKICBmbG9hdCBfMzsKCiAg PGJiIDI+IDoKICBfMSA9IEJJVF9GSUVMRF9SRUYgPHhfOShEKSwgMzIsIDk2 PjsKICBfMiA9IEJJVF9GSUVMRF9SRUYgPHhfOShEKSwgMzIsIDY0PjsKICBf MyA9IEJJVF9GSUVMRF9SRUYgPHhfOShEKSwgMzIsIDMyPjsKICB5XzYgPSB7 Zl81KEQpLCBfMywgXzIsIF8xfTsKICByZXR1cm4geV82OwoKd2l0aAoKIF9f djRzZiB5OwogIF9fdjRzZiBELjE5MzA7CiAgZmxvYXQgXzE7CiAgZmxvYXQg XzI7CiAgZmxvYXQgXzM7CiAgdmVjdG9yKDQpIGZsb2F0IF84OwoKICA8YmIg Mj4gOgogIF8xID0gQklUX0ZJRUxEX1JFRiA8eF85KEQpLCAzMiwgOTY+Owog IF8yID0gQklUX0ZJRUxEX1JFRiA8eF85KEQpLCAzMiwgNjQ+OwogIF8zID0g QklUX0ZJRUxEX1JFRiA8eF85KEQpLCAzMiwgMzI+OwogIF84ID0geF85KEQp OwogIHlfNiA9IEJJVF9JTlNFUlRfRVhQUiA8eF85KEQpLCBmXzUoRCksIDAg KDMyIGJpdHMpPjsKICByZXR1cm4geV82OwoKZ2NjLwoKCVBSIHRyZWUtb3B0 aW1pemF0aW9uLzg4ODI4CgkqIHRyZWUtc3NhLWZvcndwcm9wLmMgKHNpbXBs aWZ5X3ZlY3Rvcl9jb25zdHJ1Y3Rvcik6IE9wdGltaXplCgl2ZWN0b3IgaW5p dCBjb25zdHJ1Y3RvciB3aXRoIHZlY3RvciBjb3B5IG9yIHBlcm11dGUgZm9s bG93ZWQKCWJ5IGEgc2luZ2xlIHNjYWxhciBpbnNlcnQuCgpnY2MvdGVzdHN1 aXRlLwoKCVBSIHRyZWUtb3B0aW1pemF0aW9uLzg4ODI4CgkqIGdjYy50YXJn ZXQvaTM4Ni9wcjg4ODI4LTEuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQv aTM4Ni9wcjg4ODI4LTFhLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kz ODYvcHI4ODgyOC0xYi5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2 L3ByODg4MjgtMWMuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9w cjg4ODI4LTIuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg4 ODI4LTJhLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4ODgy OC0yYi5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODg4Mjgt MmMuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTJk LmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0zLmM6 IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0zYS5jOiBM aWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtM2IuYzogTGlr ZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTNjLmM6IExpa2V3 aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0zZC5jOiBMaWtld2lz ZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtNGEuYzogTGlrZXdpc2Uu CgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTRiLmM6IExpa2V3aXNlLgoJ KiBnY2MudGFyZ2V0L2kzODYvcHI4ODgyOC01YS5jOiBMaWtld2lzZS4KCSog Z2NjLnRhcmdldC9pMzg2L3ByODg4MjgtNWIuYzogTGlrZXdpc2UuCi0tLQog Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0xLmMgIHwg NDkgKysrKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvcHI4ODgyOC0xYS5jIHwgMTcgKysrKysKIGdjYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByODg4MjgtMWIuYyB8IDIzICsrKysrKwogZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0xYy5jIHwgMTggKysr KysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMi5j ICB8IDUxICsrKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByODg4MjgtMmEuYyB8IDE3ICsrKysrCiBnY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTJiLmMgfCAxOSArKysrKwogZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0yYy5jIHwgMjMg KysrKysrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4 LTJkLmMgfCAyNSArKysrKysrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg4ODI4LTMuYyAgfCA1NCArKysrKysrKysrKysrKwogZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0zYS5jIHwgMTcgKysr KysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtM2Iu YyB8IDE5ICsrKysrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjg4ODI4LTNjLmMgfCAyNSArKysrKysrCiBnY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjg4ODI4LTRhLmMgfCAxOCArKysrKwogZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC00Yi5jIHwgMjEgKysrKysr CiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTVhLmMg fCAxOCArKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 ODgyOC01Yi5jIHwgMjAgKysrKysKIGdjYy90cmVlLXNzYS1mb3J3cHJvcC5j ICAgICAgICAgICAgICAgICAgICB8IDg1ICsrKysrKysrKysrKysrKysrKyst LS0KIDE4IGZpbGVzIGNoYW5nZWQsIDUwOSBpbnNlcnRpb25zKCspLCAxMCBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTEuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMWEu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByODg4MjgtMWIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMWMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By ODg4MjgtMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI4ODgyOC0yYS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0yYi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4ODgyOC0yYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0yZC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 ODgyOC0zLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg4ODI4LTNhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTNiLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg4ODI4LTNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTRhLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4 ODI4LTRiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg4ODI4LTVhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTViLmMK CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjg4ODI4LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By ODg4MjgtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5hMTVkMWZlYTNmNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMS5jCkBAIC0wLDAgKzEs NDkgQEAKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHNzZTJfcnVudGltZSB9 IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tc3NlMiIgfSAqLworCisj aW5jbHVkZSAicHI4ODgyOC0xYS5jIgorI2luY2x1ZGUgInByODg4MjgtMWIu YyIKKyNpbmNsdWRlICJwcjg4ODI4LTFjLmMiCisKK2V4dGVybiB2b2lkIGFi b3J0ICgpOworCit2b2lkCitkb19jaGVjayAoX192NHNmIHksIGZsb2F0IGZb NF0sIGZsb2F0IHopCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkg PCA0OyBpKyspCisgICAgaWYgKGkgPT0gMCkKKyAgICAgIHsKKwlpZiAoeVtp XSAhPSB6KQorCSAgYWJvcnQgKCk7CisgICAgICB9CisgICAgZWxzZQorICAg ICAgeworCWlmICh5W2ldICE9IGZbaV0pCisJICBhYm9ydCAoKTsKKyAgICAg IH0KK30KKworaW50CittYWluICh2b2lkKQoreworICBmbG9hdCBmWzRdID0g eyAtMTEsIDIsIDU1NTUzLCAtNCB9OworICBmbG9hdCB6ID0gMTM0NTY3Owor ICBfX3Y0c2YgeCA9IHsgZlswXSwgZlsxXSwgZlsyXSwgZlszXSB9OworICBf X3Y0c2YgeTsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKKyAgICBpZiAoeFtpXSAhPSBmW2ldKQorICAgICAgYWJvcnQgKCk7CisK KyAgeSA9IGZvbzEgKHgsIHopOworICBkb19jaGVjayAoeSwgZiwgeik7Cisg IHkgPSBmb28yICh4LCB6KTsKKyAgZG9fY2hlY2sgKHksIGYsIHopOworICB5 ID0gZm9vMyAoeCwgeik7CisgIGRvX2NoZWNrICh5LCBmLCB6KTsKKworICBy ZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByODg4MjgtMWEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByODg4MjgtMWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZDM3YjI0YzY2NjEKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTFh LmMKQEAgLTAsMCArMSwxNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1tc3NlIC1tbm8tc3NlNCIgfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtb3ZzcyIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3ZhcHMi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi bW92bGhwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJ1bnBja2xwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJzaHVmcHMiIH0gfSAqLworCit0eXBlZGVmIGZs b2F0IF9fdjRzZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgx NikpKTsKKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQor X192NHNmCitmb28xIChfX3Y0c2YgeCwgZmxvYXQgZikKK3sKKyAgX192NHNm IHkgPSB7IGYsIHhbMV0sIHhbMl0sIHhbM10gfTsKKyAgcmV0dXJuIHk7Cit9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjg4ODI4LTFiLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjg4ODI4LTFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmFmNGFjZWQ2NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0xYi5jCkBAIC0wLDAg KzEsMjMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PMiAtbXNzZSAtbW5vLXNzZTQiIH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciAibW92c3MiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92YXBzIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdmxocHMiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAidW5w Y2tscHMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAic2h1ZnBzIiB9IH0gKi8KKwordHlwZWRlZiBmbG9hdCBfX3Y0c2Yg X19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7CisKK3N0 YXRpYyBfX3Y0c2YKK3ZlY3Rvcl9pbml0IChmbG9hdCBmMCxmbG9hdCBmMSwg ZmxvYXQgZjIsZmxvYXQgZjMpCit7CisgIF9fdjRzZiB5ID0geyBmMCwgZjEs IGYyLCBmMyB9OworICAgcmV0dXJuIHk7Cit9CisKK19fYXR0cmlidXRlX18o KG5vaW5saW5lLCBub2Nsb25lKSkKK19fdjRzZgorZm9vMiAoX192NHNmIHgs IGZsb2F0IGYpCit7CisgIHJldHVybiB2ZWN0b3JfaW5pdCAoZiwgeFsxXSwg eFsyXSwgeFszXSkgOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI4ODgyOC0xYy5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI4ODgyOC0xYy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMTE3ZjNlYzdiMQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4 MjgtMWMuYwpAQCAtMCwwICsxLDE4IEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2UgLW1uby1zc2U0IiB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdnNzIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1v dmFwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJtb3ZsaHBzIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgInVucGNrbHBzIiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci1ub3QgInNodWZwcyIgfSB9ICovCisKK3R5cGVk ZWYgZmxvYXQgX192NHNmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXpl X18gKDE2KSkpOworCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9u ZSkpCitfX3Y0c2YKK2ZvbzMgKF9fdjRzZiB4LCBmbG9hdCBmKQoreworICBf X3Y0c2YgeSA9IHg7CisgIHlbMF0gPSBmOworICByZXR1cm4geTsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4 MjgtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgy OC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjAxMWZkNDg2YmIxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0yLmMKQEAgLTAsMCArMSw1MSBA QAorLyogeyBkZy1kbyBydW4geyB0YXJnZXQgc3NlMl9ydW50aW1lIH0gfSAq LworLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2UyIiB9ICovCisKKyNpbmNs dWRlICJwcjg4ODI4LTJhLmMiCisjaW5jbHVkZSAicHI4ODgyOC0yYy5jIgor CitleHRlcm4gdm9pZCBhYm9ydCAoKTsKKwordm9pZAorZG9fY2hlY2sgKF9f djRzZiB5LCBmbG9hdCBmWzRdLCBmbG9hdCB6KQoreworICBpbnQgaTsKKwor ICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIGlmIChpID09IDApCisg ICAgICB7CisJaWYgKHlbaV0gIT0geikKKwkgIGFib3J0ICgpOworICAgICAg fQorICAgIGVsc2UgaWYgKGkgPT0gMSkKKyAgICAgIHsKKwlpZiAoeVtpXSAh PSBmWzBdKQorCSAgYWJvcnQgKCk7CisgICAgICB9CisgICAgZWxzZQorICAg ICAgeworCWlmICh5W2ldICE9IGZbaV0pCisJICBhYm9ydCAoKTsKKyAgICAg IH0KK30KKworaW50CittYWluICh2b2lkKQoreworICBmbG9hdCBmWzRdID0g eyAtMTEsIDIsIDU1NTUzLCAtNCB9OworICBmbG9hdCB6ID0gMTM0NTY3Owor ICBfX3Y0c2YgeCA9IHsgZlswXSwgZlsxXSwgZlsyXSwgZlszXSB9OworICBf X3Y0c2YgeTsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKKyAgICBpZiAoeFtpXSAhPSBmW2ldKQorICAgICAgYWJvcnQgKCk7CisK KyAgeSA9IGZvbzEgKHgsIHopOworICBkb19jaGVjayAoeSwgZiwgeik7Cisg IHkgPSBmb28yICh4LCB6KTsKKyAgZG9fY2hlY2sgKHksIGYsIHopOworCisg IHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4ODgyOC0yYS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4ODgyOC0yYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44NWU0OTUzNWViZAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4Mjgt MmEuYwpAQCAtMCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2UgLW1uby1zc2U0IiB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdnNzIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAic2h1 ZnBzIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAibW92YXBzIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgIm1vdmxocHMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLW5vdCAidW5wY2tscHMiIH0gfSAqLworCit0eXBl ZGVmIGZsb2F0IF9fdjRzZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6 ZV9fICgxNikpKTsKKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xv bmUpKQorX192NHNmCitmb28xIChfX3Y0c2YgeCwgZmxvYXQgZikKK3sKKyAg X192NHNmIHkgPSB7IGYsIHhbMF0sIHhbMl0sIHhbM10gfTsKKyAgcmV0dXJu IHk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg4ODI4LTJiLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg4ODI4LTJiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmFkZmQ3MDAyYTRkCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0yYi5jCkBA IC0wLDAgKzEsMTkgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtbWF2eCIgfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2cGVybWlscHMiIDEgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtb3ZzcyIg MSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZwaW5zcmQiIDEgeyB0YXJnZXQg aWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAidm1vdnNzIiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92YXBzIiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZtb3ZsaHBz IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg InZ1bnBja2xwcyIgfSB9ICovCisKK3R5cGVkZWYgZmxvYXQgX192NHNmIF9f YXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOworCitfX2F0 dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCitfX3Y0c2YKK2ZvbzEg KF9fdjRzZiB4LCBmbG9hdCBmKQoreworICBfX3Y0c2YgeSA9IHsgZiwgeFsw XSwgeFsyXSwgeFszXSB9OworICByZXR1cm4geTsKK30KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMmMuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMmMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ5OTY3 ZWEwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjg4ODI4LTJjLmMKQEAgLTAsMCArMSwyMyBAQAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1t c3NlIC1tbm8tc3NlNCIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJtb3ZzcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInNodWZwcyIgMSB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdmFwcyIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3ZsaHBzIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInVucGNr bHBzIiB9IH0gKi8KKwordHlwZWRlZiBmbG9hdCBfX3Y0c2YgX19hdHRyaWJ1 dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7CisKK3N0YXRpYyBfX3Y0 c2YKK3ZlY3Rvcl9pbml0IChmbG9hdCBmMCxmbG9hdCBmMSwgZmxvYXQgZjIs ZmxvYXQgZjMpCit7CisgIF9fdjRzZiB5ID0geyBmMCwgZjEsIGYyLCBmMyB9 OworICAgcmV0dXJuIHk7Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5l LCBub2Nsb25lKSkKK19fdjRzZgorZm9vMiAoX192NHNmIHgsIGZsb2F0IGYp Cit7CisgIHJldHVybiB2ZWN0b3JfaW5pdCAoZiwgeFswXSwgeFsyXSwgeFsz XSkgOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4ODgyOC0yZC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4ODgyOC0yZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4yMTA4ODQ5NjczMAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtMmQuYwpA QCAtMCwwICsxLDI1IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItTzIgLW1hdngiIH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBlcm1pbHBzIiAxIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92c3Mi IDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2cGluc3JkIiAxIHsgdGFyZ2V0 IGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgInZtb3ZzcyIgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAidm1vdmFwcyIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92bGhw cyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJ2dW5wY2tscHMiIH0gfSAqLworCit0eXBlZGVmIGZsb2F0IF9fdjRzZiBf X2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKKworc3Rh dGljIF9fdjRzZgordmVjdG9yX2luaXQgKGZsb2F0IGYwLGZsb2F0IGYxLCBm bG9hdCBmMixmbG9hdCBmMykKK3sKKyAgX192NHNmIHkgPSB7IGYwLCBmMSwg ZjIsIGYzIH07CisgICByZXR1cm4geTsKK30KKworX19hdHRyaWJ1dGVfXygo bm9pbmxpbmUsIG5vY2xvbmUpKQorX192NHNmCitmb28gKF9fdjRzZiB4LCBm bG9hdCBmKQoreworICByZXR1cm4gdmVjdG9yX2luaXQgKGYsIHhbMF0sIHhb Ml0sIHhbM10pIDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByODg4MjgtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4ODgyOC0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmFkYmM0NmRiZjNiCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC0z LmMKQEAgLTAsMCArMSw1NCBAQAorLyogeyBkZy1kbyBydW4geyB0YXJnZXQg c3NlMl9ydW50aW1lIH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1z c2UyIiB9ICovCisKKyNpbmNsdWRlICJwcjg4ODI4LTNhLmMiCisjaW5jbHVk ZSAicHI4ODgyOC0zYi5jIgorI2luY2x1ZGUgInByODg4MjgtM2MuYyIKKwor ZXh0ZXJuIHZvaWQgYWJvcnQgKCk7CisKK3ZvaWQKK2RvX2NoZWNrIChfX3Y0 c2YgeSwgZmxvYXQgZls0XSwgZmxvYXQgeikKK3sKKyAgaW50IGk7CisKKyAg Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICBpZiAoaSA9PSAzKQorICAg ICAgeworCWlmICh5W2ldICE9IHopCisJICBhYm9ydCAoKTsKKyAgICAgIH0K KyAgICBlbHNlIGlmIChpID09IDApCisgICAgICB7CisJaWYgKHlbaV0gIT0g ZltpXSkKKwkgIGFib3J0ICgpOworICAgICAgfQorICAgIGVsc2UKKyAgICAg IHsKKwlpZiAoeVtpXSAhPSBmW2kgKyAxXSkKKwkgIGFib3J0ICgpOworICAg ICAgfQorfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIGZsb2F0IGZbNF0g PSB7IC0xMSwgMiwgNTU1NTMsIC00IH07CisgIGZsb2F0IHogPSAxMzQ1Njc7 CisgIF9fdjRzZiB4ID0geyBmWzBdLCBmWzFdLCBmWzJdLCBmWzNdIH07Cisg IF9fdjRzZiB5OworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKQorICAgIGlmICh4W2ldICE9IGZbaV0pCisgICAgICBhYm9ydCAoKTsK KworICB5ID0gZm9vMSAoeCwgeik7CisgIGRvX2NoZWNrICh5LCBmLCB6KTsK KyAgeSA9IGZvbzIgKHgsIHopOworICBkb19jaGVjayAoeSwgZiwgeik7Cisg IHkgPSBmb28zICh4LCB6KTsKKyAgZG9fY2hlY2sgKHksIGYsIHopOworCisg IHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4ODgyOC0zYS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4ODgyOC0zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lNWNiOTVjMTI3NQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4Mjgt M2EuYwpAQCAtMCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2UgLW1uby1zc2U0IiB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdnNzIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAic2h1 ZnBzIiAyIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJtb3ZhcHMiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJtb3ZsaHBzIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInVucGNrbHBzIiB9IH0gKi8KKwor dHlwZWRlZiBmbG9hdCBfX3Y0c2YgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9y X3NpemVfXyAoMTYpKSk7CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBu b2Nsb25lKSkKK19fdjRzZgorZm9vMSAoX192NHNmIHgsIGZsb2F0IGYpCit7 CisgIF9fdjRzZiB5ID0geyB4WzBdLCB4WzJdLCB4WzNdLCBmIH07CisgIHJl dHVybiB5OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI4ODgyOC0zYi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI4ODgyOC0zYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4wMzQ5ZjM1YjA4YQotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtM2Iu YwpAQCAtMCwwICsxLDE5IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLW1hdngiIH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBlcm1pbHBzIiAxIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2aW5z ZXJ0cHMiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJ2bW92c3MiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLW5vdCAidnNodWZwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92YXBzIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZtb3ZsaHBzIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZ1bnBj a2xwcyIgfSB9ICovCisKK3R5cGVkZWYgZmxvYXQgX192NHNmIF9fYXR0cmli dXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOworCitfX2F0dHJpYnV0 ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCitfX3Y0c2YKK2ZvbzIgKF9fdjRz ZiB4LCBmbG9hdCBmKQoreworICBfX3Y0c2YgeSA9IHsgeFswXSwgeFsyXSwg eFszXSwgZiB9OworICByZXR1cm4geTsKK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtM2MuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtM2MuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmI2NjhhNTVmMWQK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg4ODI4LTNjLmMKQEAgLTAsMCArMSwyNSBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4IiB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZw ZXJtaWxwcyIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAidmluc2VydHBzIiAxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAidm1vdnNzIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZzaHVmcHMiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAidm1vdmFw cyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJ2bW92bGhwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItbm90ICJ2dW5wY2tscHMiIH0gfSAqLworCit0eXBlZGVmIGZsb2F0 IF9fdjRzZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikp KTsKKworc3RhdGljIF9fdjRzZgordmVjdG9yX2luaXQgKGZsb2F0IGYwLGZs b2F0IGYxLCBmbG9hdCBmMixmbG9hdCBmMykKK3sKKyAgX192NHNmIHkgPSB7 IGYwLCBmMSwgZjIsIGYzIH07CisgICByZXR1cm4geTsKK30KKworX19hdHRy aWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQorX192NHNmCitmb28zIChf X3Y0c2YgeCwgZmxvYXQgZikKK3sKKyAgcmV0dXJuIHZlY3Rvcl9pbml0ICh4 WzBdLCB4WzJdLCB4WzNdLCBmKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtNGEuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtNGEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjQwNDNiOTg1NWYKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9wcjg4ODI4LTRhLmMKQEAgLTAsMCArMSwxOCBAQAorLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tc3NlIC1tbm8t c3NlNCIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJt b3ZzcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgInNodWZwcyIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3QgIm1vdmFwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3ZsaHBzIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInVucGNrbHBzIiB9IH0g Ki8KKwordHlwZWRlZiBmbG9hdCBfX3Y0c2YgX19hdHRyaWJ1dGVfXyAoKF9f dmVjdG9yX3NpemVfXyAoMTYpKSk7CisKK19fYXR0cmlidXRlX18oKG5vaW5s aW5lLCBub2Nsb25lKSkKK19fdjRzZgorZm9vIChfX3Y0c2YgeCwgZmxvYXQg ZikKK3sKKyAgX192NHNmIHkgPSB7IHhbMF0sIHhbMl0sIHhbM10sIHhbMV0g fTsKKyAgeVswXSA9IGY7CisgIHJldHVybiB5OworfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC00Yi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4ODgyOC00Yi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZDhkMmI5 ODVkNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByODg4MjgtNGIuYwpAQCAtMCwwICsxLDIxIEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1h dngiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAidnBlcm1pbHBzIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzICJ2bW92c3MiIDEgeyB0YXJnZXQgeyAhIGlhMzIg fSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2cGluc3JkIiAxIHsgdGFyZ2V0IGlhMzIgfSB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZtb3ZzcyIgeyB0YXJn ZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCAidnNodWZwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJ2bW92YXBzIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZtb3ZsaHBzIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZ1bnBja2xwcyIg fSB9ICovCisKK3R5cGVkZWYgZmxvYXQgX192NHNmIF9fYXR0cmlidXRlX18g KChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOworCitfX2F0dHJpYnV0ZV9fKChu b2lubGluZSwgbm9jbG9uZSkpCitfX3Y0c2YKK2ZvbyAoX192NHNmIHgsIGZs b2F0IGYpCit7CisgIF9fdjRzZiB5ID0geyB4WzBdLCB4WzJdLCB4WzNdLCB4 WzFdIH07CisgIHlbMF0gPSBmOworICByZXR1cm4geTsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtNWEu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODg4MjgtNWEu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWU5 MDhmYWVmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg4ODI4LTVhLmMKQEAgLTAsMCArMSwxOCBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1tc3NlIC1tbm8tc3NlNCIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICJtb3ZzcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInNodWZwcyIgMiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibW92YXBzIiAxIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92bGhw cyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJ1bnBja2xwcyIgfSB9ICovCisKK3R5cGVkZWYgZmxvYXQgX192NHNmIF9f YXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOworCitfX2F0 dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCitfX3Y0c2YKK2ZvbyAo X192NHNmIHgsIGZsb2F0IGYpCit7CisgIF9fdjRzZiB5ID0geyB4WzBdLCB4 WzJdLCB4WzNdLCB4WzBdIH07CisgIHlbM10gPSBmOworICByZXR1cm4geTsK K30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByODg4MjgtNWIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByODg4MjgtNWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOTg4YTQ4ODIzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg4ODI4LTViLmMKQEAgLTAs MCArMSwyMCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1tYXZ4IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInZwZXJtaWxwcyIgMSB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmluc2VydHBzIiAx IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi dnNodWZwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJ2bW92c3MiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLW5vdCAidm1vdmFwcyIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92bGhwcyIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2dW5wY2tscHMiIH0g fSAqLworCit0eXBlZGVmIGZsb2F0IF9fdjRzZiBfX2F0dHJpYnV0ZV9fICgo X192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKKworX19hdHRyaWJ1dGVfXygobm9p bmxpbmUsIG5vY2xvbmUpKQorX192NHNmCitmb28gKF9fdjRzZiB4LCBmbG9h dCBmKQoreworICBfX3Y0c2YgeSA9IHsgeFswXSwgeFsyXSwgeFszXSwgeFsw XSB9OworICB5WzNdID0gZjsKKyAgcmV0dXJuIHk7Cit9CmRpZmYgLS1naXQg YS9nY2MvdHJlZS1zc2EtZm9yd3Byb3AuYyBiL2djYy90cmVlLXNzYS1mb3J3 cHJvcC5jCmluZGV4IGVlYjYyODFjNjUyLi44NWQ5Zjg2Mjg4YiAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtc3NhLWZvcndwcm9wLmMKKysrIGIvZ2NjL3RyZWUt c3NhLWZvcndwcm9wLmMKQEAgLTIwMDgsNyArMjAwOCw3IEBAIHNpbXBsaWZ5 X3ZlY3Rvcl9jb25zdHJ1Y3RvciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdz aSkKICAgdW5zaWduZWQgZWxlbV9zaXplLCBpOwogICB1bnNpZ25lZCBIT1NU X1dJREVfSU5UIG5lbHRzOwogICBlbnVtIHRyZWVfY29kZSBjb2RlLCBjb252 X2NvZGU7Ci0gIGNvbnN0cnVjdG9yX2VsdCAqZWx0OworICBjb25zdHJ1Y3Rv cl9lbHQgKmNlOwogICBib29sIG1heWJlX2lkZW50OwogCiAgIGdjY19jaGVj a2luZ19hc3NlcnQgKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpID09 IENPTlNUUlVDVE9SKTsKQEAgLTIwMjcsMTggKzIwMjcsNDIgQEAgc2ltcGxp ZnlfdmVjdG9yX2NvbnN0cnVjdG9yIChnaW1wbGVfc3RtdF9pdGVyYXRvciAq Z3NpKQogICBvcmlnWzFdID0gTlVMTDsKICAgY29udl9jb2RlID0gRVJST1Jf TUFSSzsKICAgbWF5YmVfaWRlbnQgPSB0cnVlOwotICBGT1JfRUFDSF9WRUNf U0FGRV9FTFQgKENPTlNUUlVDVE9SX0VMVFMgKG9wKSwgaSwgZWx0KQorCisg IHRyZWUgcmhzX3ZlY3RvciA9IE5VTEw7CisgIC8qIFRoZSBzaW5nbGUgc2Nh bGFyIGVsZW1lbnQuICAqLworICB0cmVlIHNjYWxhcl9lbGVtZW50ID0gTlVM TDsKKyAgdW5zaWduZWQgaW50IHNjYWxhcl9pZHggPSAwOworICBib29sIGlu c2VydCA9IGZhbHNlOworICB1bnNpZ25lZCBpbnQgbnNjYWxhcnMgPSAwOwor ICB1bnNpZ25lZCBpbnQgbnZlY3RvcnMgPSAwOworICBGT1JfRUFDSF9WRUNf U0FGRV9FTFQgKENPTlNUUlVDVE9SX0VMVFMgKG9wKSwgaSwgY2UpCiAgICAg ewogICAgICAgdHJlZSByZWYsIG9wMTsKIAogICAgICAgaWYgKGkgPj0gbmVs dHMpCiAJcmV0dXJuIGZhbHNlOwogCi0gICAgICBpZiAoVFJFRV9DT0RFIChl bHQtPnZhbHVlKSAhPSBTU0FfTkFNRSkKKyAgICAgIGlmIChUUkVFX0NPREUg KGNlLT52YWx1ZSkgIT0gU1NBX05BTUUpCiAJcmV0dXJuIGZhbHNlOwotICAg ICAgZGVmX3N0bXQgPSBnZXRfcHJvcF9zb3VyY2Vfc3RtdCAoZWx0LT52YWx1 ZSwgZmFsc2UsIE5VTEwpOworICAgICAgZGVmX3N0bXQgPSBnZXRfcHJvcF9z b3VyY2Vfc3RtdCAoY2UtPnZhbHVlLCBmYWxzZSwgTlVMTCk7CiAgICAgICBp ZiAoIWRlZl9zdG10KQotCXJldHVybiBmYWxzZTsKKwl7CisJICBpZiAoZ2lt cGxlX25vcF9wIChTU0FfTkFNRV9ERUZfU1RNVCAoY2UtPnZhbHVlKSkpCisJ ICAgIHsKKwkgICAgICAvKiBPbmx5IGFsbG93IG9uZSBzY2FsYXIgaW5zZXJ0 LiAgKi8KKwkgICAgICBpZiAobnNjYWxhcnMgIT0gMCkKKwkJcmV0dXJuIGZh bHNlOworCisJICAgICAgbnNjYWxhcnMgPSAxOworCSAgICAgIGluc2VydCA9 IHRydWU7CisJICAgICAgc2NhbGFyX2lkeCA9IGk7CisJICAgICAgc2VsLnF1 aWNrX3B1c2ggKGkpOworCSAgICAgIHNjYWxhcl9lbGVtZW50ID0gY2UtPnZh bHVlOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNlCisJICAg IHJldHVybiBmYWxzZTsKKwl9CiAgICAgICBjb2RlID0gZ2ltcGxlX2Fzc2ln bl9yaHNfY29kZSAoZGVmX3N0bXQpOwogICAgICAgaWYgKGNvZGUgPT0gRkxP QVRfRVhQUgogCSAgfHwgY29kZSA9PSBGSVhfVFJVTkNfRVhQUikKQEAgLTIw NDYsNyArMjA3MCw3IEBAIHNpbXBsaWZ5X3ZlY3Rvcl9jb25zdHJ1Y3RvciAo Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKIAkgIG9wMSA9IGdpbXBsZV9h c3NpZ25fcmhzMSAoZGVmX3N0bXQpOwogCSAgaWYgKGNvbnZfY29kZSA9PSBF UlJPUl9NQVJLKQogCSAgICB7Ci0JICAgICAgaWYgKG1heWJlX25lIChHRVRf TU9ERV9TSVpFIChUWVBFX01PREUgKFRSRUVfVFlQRSAoZWx0LT52YWx1ZSkp KSwKKwkgICAgICBpZiAobWF5YmVfbmUgKEdFVF9NT0RFX1NJWkUgKFRZUEVf TU9ERSAoVFJFRV9UWVBFIChjZS0+dmFsdWUpKSksCiAJCQkgICAgR0VUX01P REVfU0laRSAoVFlQRV9NT0RFIChUUkVFX1RZUEUgKG9wMSkpKSkpCiAJCXJl dHVybiBmYWxzZTsKIAkgICAgICBjb252X2NvZGUgPSBjb2RlOwpAQCAtMjA5 NSwxMSArMjExOSwyOSBAQCBzaW1wbGlmeV92ZWN0b3JfY29uc3RydWN0b3Ig KGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAJZWx0ICs9IG5lbHRzOwog ICAgICAgaWYgKGVsdCAhPSBpKQogCW1heWJlX2lkZW50ID0gZmFsc2U7CisK KyAgICAgICBpZiAodHlwZSA9PSBUUkVFX1RZUEUgKHJlZikpCisJIHsKKwkg ICAvKiBUaGUgUkhTIHZlY3RvciBoYXMgdGhlIHNhbWUgdHlwZSBhcyBMSFMu ICAqLworCSAgIGlmIChyaHNfdmVjdG9yID09IE5VTEwpCisJICAgICByaHNf dmVjdG9yID0gcmVmOworCSAgIC8qIENoZWNrIGlmIGFsbCBSSFMgdmVjdG9y IGVsZW1lbnRzIGNvbWUgZm9tZSB0aGUgc2FtZQorCSAgICAgIHZlY3Rvci4g ICovCisJICAgaWYgKHJoc192ZWN0b3IgPT0gcmVmKQorCSAgICAgbnZlY3Rv cnMrKzsKKwkgfQorCiAgICAgICBzZWwucXVpY2tfcHVzaCAoZWx0KTsKICAg ICB9CiAgIGlmIChpIDwgbmVsdHMpCiAgICAgcmV0dXJuIGZhbHNlOwogCisg IGlmIChpbnNlcnQKKyAgICAgICYmIChudmVjdG9ycyA9PSAwCisJICB8fCAo VFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUpLnRvX2NvbnN0YW50ICgpCisJ ICAgICAgIT0gKG5zY2FsYXJzICsgbnZlY3RvcnMpKSkpCisgICAgcmV0dXJu IGZhbHNlOworCiAgIGlmICghIFZFQ1RPUl9UWVBFX1AgKFRSRUVfVFlQRSAo b3JpZ1swXSkpCiAgICAgICB8fCBtYXliZV9uZSAoVFlQRV9WRUNUT1JfU1VC UEFSVFMgKHR5cGUpLAogCQkgICBUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAoVFJF RV9UWVBFIChvcmlnWzBdKSkpKQpAQCAtMjEyNywxOCArMjE2OSwyNiBAQCBz aW1wbGlmeV92ZWN0b3JfY29uc3RydWN0b3IgKGdpbXBsZV9zdG10X2l0ZXJh dG9yICpnc2kpCiAKICAgICAgIHZlY19wZXJtX2luZGljZXMgaW5kaWNlcyAo c2VsLCBvcmlnWzFdID8gMiA6IDEsIG5lbHRzKTsKICAgICAgIGlmICghY2Fu X3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodHlwZSksIGluZGljZXMp KQotCXJldHVybiBmYWxzZTsKKwl7CisJICBpZiAoaW5zZXJ0KQorCSAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CisJICByZXR1cm4gZmFsc2U7CisJfQogICAg ICAgbWFza190eXBlCiAJPSBidWlsZF92ZWN0b3JfdHlwZSAoYnVpbGRfbm9u c3RhbmRhcmRfaW50ZWdlcl90eXBlIChlbGVtX3NpemUsIDEpLAogCQkJICAg ICBuZWx0cyk7CiAgICAgICBpZiAoR0VUX01PREVfQ0xBU1MgKFRZUEVfTU9E RSAobWFza190eXBlKSkgIT0gTU9ERV9WRUNUT1JfSU5UCiAJICB8fCBtYXli ZV9uZSAoR0VUX01PREVfU0laRSAoVFlQRV9NT0RFIChtYXNrX3R5cGUpKSwK IAkJICAgICAgIEdFVF9NT0RFX1NJWkUgKFRZUEVfTU9ERSAodHlwZSkpKSkK LQlyZXR1cm4gZmFsc2U7CisJeworCSAgaWYgKGluc2VydCkKKwkgICAgZ2Nj X3VucmVhY2hhYmxlICgpOworCSAgcmV0dXJuIGZhbHNlOworCX0KICAgICAg IG9wMiA9IHZlY19wZXJtX2luZGljZXNfdG9fdHJlZSAobWFza190eXBlLCBp bmRpY2VzKTsKICAgICAgIGlmICghb3JpZ1sxXSkKIAlvcmlnWzFdID0gb3Jp Z1swXTsKLSAgICAgIGlmIChjb252X2NvZGUgPT0gRVJST1JfTUFSSykKKyAg ICAgIGlmIChjb252X2NvZGUgPT0gRVJST1JfTUFSSyAmJiAhaW5zZXJ0KQog CWdpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRoX29wcyAoZ3NpLCBWRUNfUEVS TV9FWFBSLCBvcmlnWzBdLAogCQkJCQlvcmlnWzFdLCBvcDIpOwogICAgICAg ZWxzZQpAQCAtMjE0OCwxMCArMjE5OCwyNSBAQCBzaW1wbGlmeV92ZWN0b3Jf Y29uc3RydWN0b3IgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAJCQkJ ICAgVkVDX1BFUk1fRVhQUiwgb3JpZ1swXSwgb3JpZ1sxXSwgb3AyKTsKIAkg IG9yaWdbMF0gPSBnaW1wbGVfYXNzaWduX2xocyAocGVybSk7CiAJICBnc2lf aW5zZXJ0X2JlZm9yZSAoZ3NpLCBwZXJtLCBHU0lfU0FNRV9TVE1UKTsKLQkg IGdpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRoX29wcyAoZ3NpLCBjb252X2Nv ZGUsIG9yaWdbMF0sCisJICBnaW1wbGVfYXNzaWduX3NldF9yaHNfd2l0aF9v cHMgKGdzaSwKKwkJCQkJICAoY29udl9jb2RlICE9IEVSUk9SX01BUksKKwkJ CQkJICAgPyBjb252X2NvZGUKKwkJCQkJICAgOiBOT1BfRVhQUiksCisJCQkJ CSAgb3JpZ1swXSwKIAkJCQkJICBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CiAJ fQogICAgIH0KKyAgaWYgKGluc2VydCkKKyAgICB7CisgICAgICAvKiBHZW5l cmF0ZSBhIHNpbmdsZSBzY2FsYXIgaW5zZXJ0LiAgKi8KKyAgICAgIHRyZWUg dmFyID0gbWFrZV9zc2FfbmFtZSAodHlwZSk7CisgICAgICB0cmVlIHZhbCA9 IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisgICAgICBnaW1wbGUgKmNv cHkgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2YXIsIHZhbCk7CisgICAgICBn c2lfaW5zZXJ0X2JlZm9yZSAoZ3NpLCBjb3B5LCBHU0lfU0FNRV9TVE1UKTsK KyAgICAgIHRyZWUgYml0cG9zID0gYml0c2l6ZV9pbnQgKHNjYWxhcl9pZHgg KiBlbGVtX3NpemUpOworICAgICAgZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzX3dp dGhfb3BzIChnc2ksIEJJVF9JTlNFUlRfRVhQUiwgdmFyLAorCQkJCSAgICAg IHNjYWxhcl9lbGVtZW50LCBiaXRwb3MpOworICAgIH0KICAgdXBkYXRlX3N0 bXQgKGdzaV9zdG10ICgqZ3NpKSk7CiAgIHJldHVybiB0cnVlOwogfQotLSAK Mi4yMC4xCgo= --000000000000e9779f05836830a0--