From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26122 invoked by alias); 7 Mar 2002 13:36:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 26084 invoked by uid 71); 7 Mar 2002 13:36:01 -0000 Resent-Date: 7 Mar 2002 13:36:01 -0000 Resent-Message-ID: <20020307133601.26083.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, stefan@netsoftlund.se Resent-Reply-To: gcc-gnats@gcc.gnu.org, mart@netsoftlund.se Received:(qmail 20980 invoked by uid 61); 7 Mar 2002 13:30:56 -0000 Message-Id:<20020307133056.20979.qmail@sources.redhat.com> Date: Thu, 07 Mar 2002 05:36:00 -0000 From: mart@netsoftlund.se Reply-To: mart@netsoftlund.se To: gcc-gnats@gcc.gnu.org Cc: stefan@netsoftlund.se X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify:stefan@netsoftlund.se Subject: c/5862: GCC generates invalid code in case of a combination of a bitwise AND and an incrementation X-SW-Source: 2002-03/txt/msg00230.txt.bz2 List-Id: >Number: 5862 >Category: c >Synopsis: GCC generates invalid code in case of a combination of a bitwise AND and an incrementation >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Mar 07 05:36:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: mart@netsoftlund.se >Release: gcc version 3.0.4 >Organization: >Environment: Sun Solaris 2.7 (SPARC) with recommended patches from Sun (march 2002). Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.0.4/specs Configured with: ../configure Thread model: posix gcc version 3.0.4 >Description: When the attached program is compiled using Sun CC (version 4.2) and run it outputs: 30 81 88 80 05 But the gcc compiled program outputs: 8b 30 81 88 80 Apparently the function ok1() does not work in the gcc case. If the row: pdu += (0x7F & *pdu++); is replaced by: pdu += (0x7F & *pdu) + 1; the output from the CC- and gcc-generated programs are identical. >How-To-Repeat: Just run the program >Fix: When comparing the generated assembly code (CC <-> gcc) it looks like the gcc version calculates the AND product and the incrementation (++) but overwrites these instead of adding them together. Since we are no assembly wizards, this is merely a guess. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="decode.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="decode.i" IyAxICJkZWNvZGUuYyIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi43LzMuMC40L2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMTQgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRl L3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xp c3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyAzNCAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGlvLmgiIDMK I3ByYWdtYSBpZGVudCAiQCgjKXN0ZGlvLmgJMS42OQk5OC8wNy8xMyBTTUkiCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMKIyAxMyAiL3Vzci9pbmNsdWRlL3N5cy9m ZWF0dXJlX3Rlc3RzLmgiIDMKI3ByYWdtYSBpZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3 CTk3LzEyLzA0IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMKIyA5 ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMKI3ByYWdtYSBpZGVudCAiQCgjKWlzYV9k ZWZzLmgJMS4xNgk5OS8wNS8yNSBTTUkiCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90 ZXN0cy5oIiAyIDMKIyAzNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAuNC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdmFf bGlzdC5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMwojcHJhZ21hIGlk ZW50ICJAKCMpdmFfbGlzdC5oCTEuMTEJOTcvMTEvMjIgU01JIgojIDI2ICIvdXNyL2luY2x1ZGUv c3lzL3ZhX2xpc3QuaCIgMwp0eXBlZGVmIHZvaWQgKl9fdmFfbGlzdDsKIyAzOCAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGlvLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRl L3N0ZGlvX3RhZy5oIiAzCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcuaAkxLjMJOTgvMDQv MjAgU01JIgojIDIxICIvdXNyL2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qg X19GSUxFIF9fRklMRTsKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRp b19pbXBsLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMKI3ByYWdtYSBp ZGVudCAiQCgjKXN0ZGlvX2ltcGwuaAkxLjgJOTkvMDYvMzAgU01JIgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMwojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAy IDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMwp0eXBlZGVmIGludCBzc2l6ZV90 OwojIDM4ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzCnN0cnVjdCBfX0ZJTEUKewoKCgoK ICAgICAgICBzc2l6ZV90IF9jbnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciAqX3B0cjsKCiAgICAg ICAgdW5zaWduZWQgY2hhciAqX2Jhc2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBfZmxhZzsKICAg ICAgICB1bnNpZ25lZCBjaGFyIF9maWxlOwogICAgICAgIHVuc2lnbmVkIF9fb3JpZW50YXRpb246 MjsKICAgICAgICB1bnNpZ25lZCBfX2lvbm9sb2NrOjE7CiAgICAgICAgdW5zaWduZWQgX19maWxs ZXI6NTsKfTsKIyA0MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAuNC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9f RklMRSBGSUxFOwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDc0ICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2luY2x1ZGUvc3Rk aW8uaCIgMwp0eXBlZGVmIGxvbmcgbG9uZyBfX2xvbmdsb25nX3Q7CiMgODggIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRpby5oIiAz CnR5cGVkZWYgbG9uZyBvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9uZ190IG9mZjY0X3Q7 CgoKCgoKCnR5cGVkZWYgbG9uZyBmcG9zX3Q7CgoKCgoKCgp0eXBlZGVmIF9fbG9uZ2xvbmdfdCBm cG9zNjRfdDsKIyAyMDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjcvMy4wLjQvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFIF9faW9iWzIwXTsKIyAyMTUg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVk ZS9zdGRpby5oIiAzCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsKIyAy NDQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiB1bnNpZ25lZCBjaGFyICpfYnVmZW5kdGFiW107CmV4dGVy biBGSUxFICpfbGFzdGJ1ZjsKIyAyNzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlKGNv bnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGUodm9pZCk7CmV4dGVybiBjaGFyICp0bXBuYW0oY2hhciAq KTsKCgoKZXh0ZXJuIGludCBmY2xvc2UoRklMRSAqKTsKZXh0ZXJuIGludCBmZmx1c2goRklMRSAq KTsKZXh0ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJu IEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVy biB2b2lkIHNldGJ1ZihGSUxFICosIGNoYXIgKik7CgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyKEZJ TEUgKiwgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsKCmV4 dGVybiBpbnQgc2V0dmJ1ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwoKZXh0ZXJuIGlu dCBmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBmc2NhbmYo RklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFy ICosIC4uLik7CgpleHRlcm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKCmV4dGVy biBpbnQgc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCgpleHRl cm4gaW50IHNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IHNz Y2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCB2ZnByaW50 ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZwcmlu dGYoY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CgoKCmV4dGVybiBpbnQgdnNucHJpbnRm KGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKCmV4dGVybiBp bnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJu IGludCBmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhciAqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUg Kik7CmV4dGVybiBpbnQgZnB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50IGZwdXRzKGNvbnN0 IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0 Y2hhcih2b2lkKTsKZXh0ZXJuIGNoYXIgKmdldHMoY2hhciAqKTsKZXh0ZXJuIGludCBwdXRjKGlu dCwgRklMRSAqKTsKZXh0ZXJuIGludCBwdXRjaGFyKGludCk7CmV4dGVybiBpbnQgcHV0cyhjb25z dCBjaGFyICopOwpleHRlcm4gaW50IHVuZ2V0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBzaXplX3Qg ZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdCBmd3Jp dGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIGludCBmZ2V0 cG9zKEZJTEUgKiwgZnBvc190ICopOwpleHRlcm4gaW50IGZzZWVrKEZJTEUgKiwgbG9uZywgaW50 KTsKZXh0ZXJuIGludCBmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpleHRlcm4gbG9u ZyBmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZCByZXdpbmQoRklMRSAqKTsKZXh0ZXJuIHZvaWQg Y2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludCBmZW9mKEZJTEUgKik7CmV4dGVybiBpbnQgZmVy cm9yKEZJTEUgKik7CmV4dGVybiB2b2lkIHBlcnJvcihjb25zdCBjaGFyICopOwoKCmV4dGVybiBp bnQgX19maWxidWYoRklMRSAqKTsKZXh0ZXJuIGludCBfX2Zsc2J1ZihpbnQsIEZJTEUgKik7CiMg MzUzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGludCBmaWxlbm8oRklMRSAqKTsK IyAzNzkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQv aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpwb3Blbihjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKik7CmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7CmV4dGVybiBjaGFyICp0ZW1w bmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBj aGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwoKZXh0ZXJuIGludCBnZXRzdWJvcHQoY2hhciAq KiwgY2hhciAqY29uc3QgKiwgY2hhciAqKik7CgpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4g aW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBpbnQgZ2V0dyhGSUxFICopOwpleHRl cm4gaW50IHB1dHcoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHBjbG9zZShGSUxFICopOwoKCgoK CgoKZXh0ZXJuIGludCBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKZXh0ZXJuIG9mZl90IGZ0 ZWxsbyhGSUxFICopOwojIDQwOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0KGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gRklMRSAqdG1wZmlsZTY0KHZvaWQp OwpleHRlcm4gaW50IGZnZXRwb3M2NChGSUxFICosIGZwb3M2NF90ICopOwpleHRlcm4gaW50IGZz ZXRwb3M2NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOwpleHRlcm4gaW50IGZzZWVrbzY0KEZJ TEUgKiwgb2ZmNjRfdCwgaW50KTsKZXh0ZXJuIG9mZjY0X3QgZnRlbGxvNjQoRklMRSAqKTsKIyAy ICJkZWNvZGUuYyIgMgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRsaWIuaCIgMwojcHJh Z21hIGlkZW50ICJAKCMpc3RkbGliLmgJMS40NAk5OC8wMS8yMiBTTUkiCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMKIyAyOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAzOCAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRl L3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgcXVvdDsKICAgICAgICBp bnQgcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcgcXVvdDsKICAg ICAgICBsb25nIHJlbTsKfSBsZGl2X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcg bG9uZyBxdW90OwogICAgICAgIGxvbmcgbG9uZyByZW07Cn0gbGxkaXZfdDsKIyA3NyAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N0ZGxp Yi5oIiAzCnR5cGVkZWYgbG9uZyB1aWRfdDsKIyAxMDcgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIGxv bmcgaW50IHdjaGFyX3Q7CiMgMTQ4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC40L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGNoYXIg X19jdHlwZVtdOwoKCgpleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu dCBhdG9pKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGludCBhdG9sKGNvbnN0IGNoYXIgKik7 CmV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CmV4dGVybiBsb25n IGludCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQg bG9uZyBpbnQgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CgpleHRlcm4gaW50 IHJhbmQodm9pZCk7CmV4dGVybiB2b2lkIHNyYW5kKHVuc2lnbmVkIGludCk7CgoKCgoKZXh0ZXJu IHZvaWQgKmNhbGxvYyhzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2b2lkIGZyZWUodm9pZCAqKTsK ZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOwpleHRlcm4gdm9pZCAqcmVhbGxvYyh2b2lkICos IHNpemVfdCk7CgpleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKZXh0ZXJuIGludCBhdGV4aXQodm9p ZCAoKikodm9pZCkpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4dGVybiB2b2lkIF9leGl0aGFu ZGxlKHZvaWQpOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQg c3lzdGVtKGNvbnN0IGNoYXIgKik7CgpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25zdCB2b2lkICos IGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lk ICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gdm9pZCBxc29ydCh2b2lkICosIHNpemVfdCwgc2l6 ZV90LAogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKCmV4dGVy biBpbnQgYWJzKGludCk7CmV4dGVybiBkaXZfdCBkaXYoaW50LCBpbnQpOwpleHRlcm4gbG9uZyBp bnQgbGFicyhsb25nKTsKZXh0ZXJuIGxkaXZfdCBsZGl2KGxvbmcsIGxvbmcpOwoKZXh0ZXJuIGlu dCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgbWJs ZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFy X3QpOwoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6 ZV90KTsKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6 ZV90KTsKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBlcmFu ZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0 ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBs cmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBtcmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFu ZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNp Z25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJuIGludCBwdXRl bnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNoYXIgKik7CgoKCgoKZXh0ZXJu IHZvaWQgc3dhYihjb25zdCBjaGFyICosIGNoYXIgKiwgaW50KTsKCgoKCmV4dGVybiBpbnQgbWtz dGVtcChjaGFyICopOwoKCmV4dGVybiBpbnQgbWtzdGVtcDY0KGNoYXIgKik7CgoKCgoKCmV4dGVy biBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjdnQoZG91YmxlLCBpbnQs IGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50 ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGludCBn ZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwgY2hhciAqKik7CmV4dGVybiBpbnQgZ3Jh bnRwdChpbnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICosIHNpemVf dCk7CmV4dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7 CmV4dGVybiBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0 ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNl dHN0YXRlKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRl cm4gaW50IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsKZXh0ZXJuIHZv aWQgKnZhbGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJu IGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFy ICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWdj dnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICos IHNpemVfdCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsKZXh0ZXJuIGNo YXIgKmdldGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICos IGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0aW5kLCBv cHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJu IGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRwdyh1aWRf dCwgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQgKm1lbWFsaWdu KHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpleHRlcm4gbG9u ZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxhYnMobG9uZyBs b25nKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOwpleHRlcm4g Y2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgc3RydG9s bChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg c3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hhciAqdWxsdG9z dHIodW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOwojIDMgImRlY29kZS5jIiAyCiMgMSAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5 cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiNwcmFnbWEgaWRlbnQgIkAoIyl0 eXBlcy5oCTEuNjMJOTgvMDQvMjggU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZz LmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43 LzMuMC40L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZV90ZXN0cy5oIiAxIDMKIyAyOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHR5 cGVzLmgiIDMKI3ByYWdtYSBpZGVudCAiQCgjKW1hY2h0eXBlcy5oCTEuMTIJOTYvMDgvMDEgU01J IgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzCiMgMTkgIi91c3Iv aW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDIgMwojIDMzICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0 eXBlcy5oIiAzCnR5cGVkZWYgc3RydWN0IF9waHlzYWRyX3QgeyBpbnQgclsxXTsgfSAqcGh5c2Fk cl90OwoKdHlwZWRlZiBzdHJ1Y3QgX2xhYmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90OwoK Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbG9ja190OwojIDM0ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoj IDQ1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAx IDMKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzCiNwcmFnbWEgaWRlbnQgIkAo IylpbnRfdHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIgojIDQyICIvdXNyL2luY2x1ZGUvc3lzL2lu dF90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMKIyA0MyAi L3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMiAzCiMgNjIgIi91c3IvaW5jbHVkZS9zeXMv aW50X3R5cGVzLmgiIDMKdHlwZWRlZiBjaGFyIGludDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0IGlu dDE2X3Q7CnR5cGVkZWYgaW50IGludDMyX3Q7CgoKCgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90 OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCB1aW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlw ZXMuaCIgMwp0eXBlZGVmIGludDY0X3QgaW50bWF4X3Q7CnR5cGVkZWYgdWludDY0X3QgdWludG1h eF90OwojIDExMCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMwp0eXBlZGVmIGludCBp bnRwdHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0cl90OwoKCgoKCgoKdHlwZWRlZiBj aGFyIGludF9sZWFzdDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7CnR5cGVk ZWYgaW50IGludF9sZWFzdDMyX3Q7CgoKCgp0eXBlZGVmIGxvbmcgbG9uZyBpbnRfbGVhc3Q2NF90 OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMy X3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50X2xlYXN0NjRfdDsKIyA0NiAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMKIyA2MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgbG9uZyBsb25n IGxvbmdsb25nX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfbG9uZ2xvbmdfdDsKIyA4 NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgbG9uZyB0X3NjYWxhcl90Owp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgdF91c2NhbGFyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nX3Q7Cgp0eXBlZGVmIGNoYXIgKmNhZGRy X3Q7CnR5cGVkZWYgbG9uZyBkYWRkcl90Owp0eXBlZGVmIHNob3J0IGNudF90OwoKCnR5cGVkZWYg dWxvbmdfdCBwYWRkcl90OwojIDExNiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IHB0cmRp ZmZfdDsKIyAxMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wLjQvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHVsb25nX3QgcGZuX3Q7CnR5cGVk ZWYgdWxvbmdfdCBwZ2NudF90Owp0eXBlZGVmIGxvbmcgc3BnY250X3Q7Cgp0eXBlZGVmIHVjaGFy X3QgdXNlX3Q7CnR5cGVkZWYgc2hvcnQgc3lzaWRfdDsKdHlwZWRlZiBzaG9ydCBpbmRleF90Owp0 eXBlZGVmIHZvaWQgKnRpbWVvdXRfaWRfdDsKdHlwZWRlZiB2b2lkICpidWZjYWxsX2lkX3Q7CiMg MTYzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiB1bG9uZ190IGlub190Owp0eXBlZGVmIGxvbmcg YmxrY250X3Q7CnR5cGVkZWYgdWxvbmdfdCBmc2Jsa2NudF90Owp0eXBlZGVmIHVsb25nX3QgZnNm aWxjbnRfdDsKIyAxODEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjcvMy4wLjQvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBpbm82 NF90Owp0eXBlZGVmIGxvbmdsb25nX3QgYmxrY250NjRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3Qg ZnNibGtjbnQ2NF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBmc2ZpbGNudDY0X3Q7CgoKCgoKCnR5 cGVkZWYgbG9uZyBibGtzaXplX3Q7CgoKCgoKdHlwZWRlZiBlbnVtIHsgQl9GQUxTRSwgQl9UUlVF IH0gYm9vbGVhbl90OwojIDIwOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50NjRfdCBwYWQ2 NF90Owp0eXBlZGVmIHVpbnQ2NF90IHVwYWQ2NF90OwojIDIyMSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5 cGVkZWYgbG9uZ2xvbmdfdCBvZmZzZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgdV9vZmZzZXRf dDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgbGVuX3Q7CnR5cGVkZWYgbG9uZ2xvbmdfdCBkaXNrYWRk cl90OwojIDI0MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z LjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNl dF90IF9mOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAg ICAgICAgICAgICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjYyICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiB1bmlvbiB7CiAgICAgICAgZGlza2FkZHJfdCBfZjsKICAg ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgaW50MzJfdCBfdTsKICAgICAgICAgICAgICAg IGludDMyX3QgX2w7CiAgICAgICAgfSBfcDsKfSBsbGRhZGRyX3Q7CgoKdHlwZWRlZiB1aW50X3Qg a19mbHRzZXRfdDsKIyAyODcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wLjQvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGxvbmcgaWRfdDsKCgoK CgoKdHlwZWRlZiB1aW50X3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBsb25nIHN1c2Vjb25kc190 OwojIDMwOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAu NC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdWxvbmdfdCBtYWpvcl90Owp0eXBlZGVm IHVsb25nX3QgbWlub3JfdDsKCgoKCgp0eXBlZGVmIHNob3J0IHByaV90OwojIDMyOCAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzCnR5cGVkZWYgdXNob3J0X3Qgb19tb2RlX3Q7CnR5cGVkZWYgc2hvcnQgb19kZXZf dDsKdHlwZWRlZiB1c2hvcnRfdCBvX3VpZF90Owp0eXBlZGVmIG9fdWlkX3Qgb19naWRfdDsKdHlw ZWRlZiBzaG9ydCBvX25saW5rX3Q7CnR5cGVkZWYgc2hvcnQgb19waWRfdDsKdHlwZWRlZiB1c2hv cnRfdCBvX2lub190OwoKCgoKCnR5cGVkZWYgaW50IGtleV90OwoKCgp0eXBlZGVmIHVsb25nX3Qg bW9kZV90OwojIDM1NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdWlkX3QgZ2lkX3Q7CgoKCgoK CnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo cmVhZF9rZXlfdDsKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX211dGV4IHsKICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgdWludDhfdCBfX3B0aHJlYWRfbXV0ZXhfZmxhZ1s0XTsKICAg ICAgICAgICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9tdXRleF90eXBlOwogICAgICAgIH0gX19w dGhyZWFkX211dGV4X2ZsYWdzOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFkX211dGV4X3BhZFs4 XTsKICAgICAgICAgICAgICAgIH0gX19wdGhyZWFkX211dGV4X2xvY2s2NDsKICAgICAgICAgICAg ICAgIHVwYWQ2NF90IF9fcHRocmVhZF9tdXRleF9vd25lcjY0OwogICAgICAgIH0gX19wdGhyZWFk X211dGV4X2xvY2s7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX211dGV4X2RhdGE7Cn0gcHRo cmVhZF9tdXRleF90OwoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZCB7CiAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsKICAg ICAgICAgICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9jb25kX3R5cGU7CiAgICAgICAgfSBfX3B0 aHJlYWRfY29uZF9mbGFnczsKICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfY29uZF9kYXRhOwp9 IHB0aHJlYWRfY29uZF90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrIHsKICAg ICAgICBpbnQzMl90IF9fcHRocmVhZF9yd2xvY2tfcmVhZGVyczsKICAgICAgICB1aW50MTZfdCBf X3B0aHJlYWRfcndsb2NrX3R5cGU7CiAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja19t YWdpYzsKICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDFbM107CiAgICAgICAg dXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQyWzJdOwogICAgICAgIHVwYWQ2NF90IF9fcHRo cmVhZF9yd2xvY2tfcGFkM1syXTsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfYXR0ciB7CiAgICAgICAgdm9pZCAqX19wdGhyZWFkX2F0dHJwOwp9IHB0aHJl YWRfYXR0cl90OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX211dGV4YXR0ciB7CiAgICAg ICAgdm9pZCAqX19wdGhyZWFkX211dGV4YXR0cnA7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoK Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jb25kYXR0ciB7CiAgICAgICAgdm9pZCAqX19wdGhy ZWFkX2NvbmRhdHRycDsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBf b25jZSB7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX29uY2VfcGFkWzRdOwp9IHB0aHJlYWRf b25jZV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja2F0dHIgewogICAgICAg IHZvaWQgKl9fcHRocmVhZF9yd2xvY2thdHRycDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCnR5 cGVkZWYgdWxvbmdfdCBkZXZfdDsKCgoKCgp0eXBlZGVmIHVsb25nX3QgbmxpbmtfdDsKdHlwZWRl ZiBsb25nIHBpZF90OwojIDQ3NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgbG9uZyB0aW1lX3Q7 CgoKCgp0eXBlZGVmIGxvbmcgY2xvY2tfdDsKCgoKCnR5cGVkZWYgaW50IGNsb2NraWRfdDsKCgoK CnR5cGVkZWYgaW50IHRpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNoYXI7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50 Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CiMgNTUyICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC40L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0 Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9u ZzsKdHlwZWRlZiBzdHJ1Y3QgX3F1YWQgeyBpbnQgdmFsWzJdOyB9IHF1YWRfdDsKdHlwZWRlZiBx dWFkX3QgcXVhZDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAx MiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0 LmgJMS4xNgk5OC8wNC8yNyBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0 cy5oIiAxIDMKIyAxNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAz CiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMi42Mgk5OC8wMi8wNCBTTUkiCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lLmgiIDIgMwojIDQ5ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZh bCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOwp9 OwojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUgewogICAg ICAgIGludCB0el9taW51dGVzd2VzdDsKICAgICAgICBpbnQgdHpfZHN0dGltZTsKfTsKIyAxMDAg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuNy8zLjAuNC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAxMDEg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAxNTUgIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAzCnN0cnVjdCBpdGltZXJ2YWwgewogICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVy dmFsOwogICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOwp9OwojIDIwMyAiL3Vzci9pbmNs dWRlL3N5cy90aW1lLmgiIDMKdHlwZWRlZiBsb25nbG9uZ190IGhydGltZV90OwojIDMxNSAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3Ry dWN0IHRpbWV2YWwgKik7CiMgMzI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwppbnQgZ2V0 aXRpbWVyKGludCwgc3RydWN0IGl0aW1lcnZhbCAqKTsKaW50IHV0aW1lcyhjb25zdCBjaGFyICos IGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOwoKCgppbnQgc2V0aXRpbWVyKGludCwgc3RydWN0IGl0 aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwojIDM2NCAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lLmgiIDMKaW50IHNldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqLCB2b2lkICopOwoKaHJ0 aW1lX3QgZ2V0aHJ0aW1lKHZvaWQpOwpocnRpbWVfdCBnZXRocnZ0aW1lKHZvaWQpOwojIDM4NCAi L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZh bCAqLCB2b2lkICopOwojIDQwNSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojcHJhZ21h IGlkZW50ICJAKCMpdGltZS5oCTEuMzYJOTgvMDMvMjcgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUv c3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzCiMgMTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoj IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wLjQvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDY0 ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0bSB7CiAgICAgICAgaW50IHRtX3NlYzsK ICAgICAgICBpbnQgdG1fbWluOwogICAgICAgIGludCB0bV9ob3VyOwogICAgICAgIGludCB0bV9t ZGF5OwogICAgICAgIGludCB0bV9tb247CiAgICAgICAgaW50IHRtX3llYXI7CiAgICAgICAgaW50 IHRtX3dkYXk7CiAgICAgICAgaW50IHRtX3lkYXk7CiAgICAgICAgaW50IHRtX2lzZHN0Owp9OwoK CgpleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1l X3QsIHRpbWVfdCk7CmV4dGVybiB0aW1lX3QgbWt0aW1lKHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHRp bWVfdCB0aW1lKHRpbWVfdCAqKTsKZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29uc3Qgc3RydWN0IHRt ICopOwpleHRlcm4gY2hhciAqY3RpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRt ICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29u c3QgdGltZV90ICopOwpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lKGNoYXIgKiwgc2l6ZV90LCBjb25z dCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKIyA5NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MwpleHRlcm4gY2hhciAqc3RycHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVj dCB0bSAqKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMwojIDE1 ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1l X2ltcGwuaAkxLjMJOTgvMDIvMTMgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVf dGVzdHMuaCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDIgMwojIDM2 ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzCnR5cGVkZWYgc3RydWN0IHRpbWVzcGVj IHsKICAgICAgICB0aW1lX3QgdHZfc2VjOwogICAgICAgIGxvbmcgdHZfbnNlYzsKfSB0aW1lc3Bl Y190OwojIDYwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzCnR5cGVkZWYgc3RydWN0 IHRpbWVzcGVjIHRpbWVzdHJ1Y190OwojIDc5ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5o IiAzCnR5cGVkZWYgc3RydWN0IGl0aW1lcnNwZWMgewogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBp dF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7Cn0gaXRpbWVyc3Bl Y190OwojIDEwNCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMTE4ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCnVuaW9uIHNpZ3ZhbCB7CiAgICAgICAgaW50IHNpdmFsX2ludDsKICAgICAgICB2 b2lkICpzaXZhbF9wdHI7Cn07CgoKCgpzdHJ1Y3Qgc2lnZXZlbnQgewogICAgICAgIGludCBzaWdl dl9ub3RpZnk7CiAgICAgICAgaW50IHNpZ2V2X3NpZ25vOwogICAgICAgIHVuaW9uIHNpZ3ZhbCBz aWdldl92YWx1ZTsKICAgICAgICB2b2lkICgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBz aWd2YWwpOwogICAgICAgIHB0aHJlYWRfYXR0cl90ICpzaWdldl9ub3RpZnlfYXR0cmlidXRlczsK ICAgICAgICBpbnQgX19zaWdldl9wYWQyOwp9OwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzKGNs b2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUoY2xv Y2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZShjbG9j a2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUo Y2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKiwgdGltZXJfdCAqKTsKZXh0ZXJuIGludCB0aW1l cl9kZWxldGUodGltZXJfdCk7CmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsK ZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwpl eHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVy c3BlYyAqLAogICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQg bmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CgoK CgpleHRlcm4gdm9pZCB0enNldCh2b2lkKTsKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKZXh0 ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsKCgoKCgoKZXh0ZXJuIGxvbmcgdGltZXpvbmU7CmV4dGVy biBpbnQgZGF5bGlnaHQ7CgoKCgoKZXh0ZXJuIGludCBjZnRpbWUoY2hhciAqLCBjaGFyICosIGNv bnN0IHRpbWVfdCAqKTsKZXh0ZXJuIGludCBhc2NmdGltZShjaGFyICosIGNvbnN0IGNoYXIgKiwg Y29uc3Qgc3RydWN0IHRtICopOwpleHRlcm4gbG9uZyBhbHR6b25lOwoKCgoKZXh0ZXJuIHN0cnVj dCB0bSAqZ2V0ZGF0ZShjb25zdCBjaGFyICopOwoKCgoKCgpleHRlcm4gaW50IGdldGRhdGVfZXJy OwojIDQwNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwojIDQxOCAiL3Vzci9pbmNsdWRl L3N5cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyA0MTkg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBsb25n IGZkX21hc2s7Cgp0eXBlZGVmIGxvbmcgZmRzX21hc2s7CiMgNzMgIi91c3IvaW5jbHVkZS9zeXMv c2VsZWN0LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0IHsKCgoKICAgICAgICBsb25nIGZkc19i aXRzWygoKDEwMjQpKygoKHNpemVvZiAoZmRzX21hc2spICogOCkpLTEpKS8oKHNpemVvZiAoZmRz X21hc2spICogOCkpKV07Cn0gZmRfc2V0OwojIDk3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAzCmV4dGVybiBpbnQgc2VsZWN0KGludCwgZmRfc2V0ICosIGZkX3NldCAqLCBmZF9zZXQgKiwg c3RydWN0IHRpbWV2YWwgKik7CiMgNTY1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi43LzMuMC40L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDQgImRlY29kZS5j IiAyCgp2b2lkIHNob3c1KCBGSUxFKiBmLAogICAgICAgICAgICBjb25zdCB1X2NoYXIqIHBkdSAp CnsKICBpbnQgaTsKICBmb3IoIGk9MDsgaTw1OyBpKysgKSB7CiAgICBpZiggcGR1W2ldIDwgMHgx MCApIHsKICAgICAgZnByaW50ZiggZiwgIjAleCAiLCBwZHVbaV0gKTsKICAgIH0gZWxzZSB7CiAg ICAgIGZwcmludGYoIGYsICIleCAiLCBwZHVbaV0gKTsKICAgIH0KICB9CiAgZnByaW50ZiggZiwg IlxuIiApOwogIGZmbHVzaCggZiApOwp9Cgpjb25zdCB1X2NoYXIgKm9rMSggY29uc3QgdV9jaGFy ICpwZHUgKQp7CiAgcGR1ICs9ICgweDdGICYgKnBkdSsrKTsKICByZXR1cm4gcGR1Owp9CgoKaW50 IG1haW4oIGludCBhcmdjLCBjaGFyICoqYXJndiApCnsKICBpbnQgY2hvaWNlID0gLTE7CiAgY29u c3QgdV9jaGFyICpyZXN1bHQgPSAwOwogIGNvbnN0IGNoYXIgbXlwZHVbXSA9IHsgMHhhNiwgMHg4 MSwgMHg4YiwgMHgzMCwgMHg4MSwgMHg4OCwgMHg4MCwgMHgwNSwgMHg1OSB9OwoKICByZXN1bHQg PSAoY29uc3QgdV9jaGFyICopbXlwZHU7CiAgcmVzdWx0ID0gb2sxKCByZXN1bHQrMSApOwogIHNo b3c1KCAoJl9faW9iWzFdKSwgcmVzdWx0ICk7CgogIHJldHVybiAwOwp9Cg==