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.133.124]) by sourceware.org (Postfix) with ESMTPS id 7E59C3858C60 for ; Fri, 26 May 2023 14:41:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7E59C3858C60 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=1685112065; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=LWmGc6sv0/61AvRGjF5FTG2MyGuV8Q4nSu70Od3R4v8=; b=J8MK5jWo+WAvEZE/EBWomJ8MJvvAvrHvAU5bLrTLH1iMJXrecHZORSlAF0knvEZiYtzLFd QZbI0Bxaj+EHJWgX7t9Y4XVPUx8+CmkfGze6OYPjH6veYMguTWtmSyQslmca8hKcmCRL/c QaPC/EGQXSFoEXpjY9103dzpjMW87u8= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-330-BjY6jtChNdiplFR7KCpW5w-1; Fri, 26 May 2023 10:41:03 -0400 X-MC-Unique: BjY6jtChNdiplFR7KCpW5w-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-75aff1976a4so180958885a.1 for ; Fri, 26 May 2023 07:41:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685112062; x=1687704062; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=s3wN0ZFCpuakGcVKzY6MDh7ri6hjwLJHiNT2W/4dVjo=; b=Evo7vezGAJw3aVxZNE9goQGICnQZC1yVBaZdOxC8HfPb+jHuDdJUJKIeGBExmXDIX/ 2gZoCIx0WEFwjGMsCwG8kGEK4+RkXwBjrsNcxZLj6SQBIKynBY4F5Oc6965I03ods1nR avYimCpbfcOLQ2DwfDWMZl4yztTdjdRLPg1z8cuzYcpBXRW6/08seAhEYnwAzs3Qf8P2 D7VOVJ8Yu1oVJ9FWP9Cz/HBEucSwjQK+SJTAac7YeVF9WM7i4/36PHPTxeiOn85oBa2q kGA+FwanRPFLqSiRyU4Tp4RrVgNtdx6yw4DceqwfWmOu/TiB2Rt26zG6MUMWrcbPZQEG SQXQ== X-Gm-Message-State: AC+VfDyvXsySeYzWojeZlvhmQLC9Csd/25UcNIKbn3x2pnmWvVIDEVlw 1miiUCo437l6x+ZI1CaZEjDwClVzBfK0kSOrkOifc7GF/zl2s9Oq68o1htTG4EjVywdJ38pydrS uBMkKjhSJ+Dk/lMfqtMsYCQkMEHydiOOQwauFPakRxkvEIz2RZesgvR5URc8XH6fbiX77On59bg == X-Received: by 2002:a05:620a:800e:b0:75b:23a1:d83f with SMTP id ee14-20020a05620a800e00b0075b23a1d83fmr6203686qkb.1.1685112062387; Fri, 26 May 2023 07:41:02 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5vHSZaL9kIagoUlTzJ7ZfI9LtSjHmRDHENsWEAB7hYQqAwqDRQHSfO8odifI6TY8a8F9laYg== X-Received: by 2002:a05:620a:800e:b0:75b:23a1:d83f with SMTP id ee14-20020a05620a800e00b0075b23a1d83fmr6203660qkb.1.1685112061924; Fri, 26 May 2023 07:41:01 -0700 (PDT) Received: from [192.168.1.7] ([80.168.198.238]) by smtp.gmail.com with ESMTPSA id x17-20020a05620a12b100b007579ded7a8asm1191248qki.54.2023.05.26.07.41.00 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 26 May 2023 07:41:01 -0700 (PDT) Message-ID: <9add4711-4efb-66af-387e-e7b2902af5e8@redhat.com> Date: Fri, 26 May 2023 15:40:59 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: RFC: Objdump: Dumping PE specific headers To: binutils@sourceware.org References: <871qj41iw5.fsf@redhat.com> From: Nick Clifton In-Reply-To: <871qj41iw5.fsf@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------2JNIDAqSj9ZcZewBJvZjghe6" Content-Language: en-GB X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,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: This is a multi-part message in MIME format. --------------2JNIDAqSj9ZcZewBJvZjghe6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Guys, Right - I am commit the attached, revised version of my original patch. Following Jan's suggestions I have changed the layout slightly and dropped this display of the IMAGE_DOS_SIGNATURE magic number. In addition I have added: * Support for displaying some of the contents of the optional header, if it is present. * Support for displaying PE format object files (which do not have the PEI_filehdr structure at the start of the file). * Documentation (gasp), a testcase and a NEWS entry. Cheers Nick 2023-05-26 Nick Clifton * od-pe.c: New file: Dumps fields in PE format headers. * configure.ac (od_vectors): Add objdump_private_desc_pe for PE format targets. (od_files): Add od-pe for PE format targets. * configure: Regenerate. * Makefile.am (CFILES): Add od-pe.c (EXTRA_objdump_SOURCE): Likewise. * Makefile.in: Generate. * NEWS: Mention the new feature. * doc/binutils.texi: Document the new support. * objdump.c (wide_output): Change from local to global. * objdump.h (wide_output): Prototype. (objdump_private_desc_pe): Prototype. * testsuite/binutils-all/objdump.exp: Add a test of the new feature. --------------2JNIDAqSj9ZcZewBJvZjghe6 Content-Type: text/plain; charset=UTF-8; name="fred" Content-Disposition: attachment; filename="fred" Content-Transfer-Encoding: base64 LS0tIC9kZXYvbnVsbAkyMDIzLTA1LTI1IDA4OjU4OjEzLjEwMjM5NTc2OSArMDEwMAorKysgY3Vy cmVudC9iaW51dGlscy9vZC1wZS5jCTIwMjMtMDUtMjYgMTU6MjQ6MzguNDAxODg5NTM2ICswMTAw CkBAIC0wLDAgKzEsNTY1IEBACisvKiBvZC1wZS5jIC0tIGR1bXAgaW5mb3JtYXRpb24gYWJvdXQg YSBQRSBvYmplY3QgZmlsZS4KKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDIzIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBUcmlzdGFuIEdpbmdvbGQsIEFkYWNv cmUgYW5kIE5pY2sgQ2xpZnRvbiwgUmVkIEhhdC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R05VIEJpbnV0aWxzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZp ZnRoIEZsb29yLCBCb3N0b24sCisgICBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVk ZSAic3lzZGVwLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lu Y2x1ZGUgInNhZmUtY3R5cGUuaCIKKyNpbmNsdWRlICJiZmQuaCIKKyNpbmNsdWRlICJvYmpkdW1w LmgiCisjaW5jbHVkZSAiYnVjb21tLmgiCisjaW5jbHVkZSAiYmZkbGluay5oIgorI2luY2x1ZGUg ImNvZmYvaW50ZXJuYWwuaCIKKyNkZWZpbmUgTF9MTk5PX1NJWkUgNCAvKiBGSVhNRTogd2hpY2gg dmFsdWUgc2hvdWxkIHdlIHVzZSA/ICAqLworI2luY2x1ZGUgImNvZmYvZXh0ZXJuYWwuaCIKKyNp bmNsdWRlICJjb2ZmL3BlLmgiCisjaW5jbHVkZSAibGliY29mZi5oIgorI2luY2x1ZGUgImxpYnBl aS5oIgorCisvKiBJbmRleCBvZiB0aGUgb3B0aW9ucyBpbiB0aGUgb3B0aW9uc1tdIGFycmF5LiAg Ki8KKyNkZWZpbmUgT1BUX0ZJTEVfSEVBREVSIDAKKyNkZWZpbmUgT1BUX0FPVVQgMQorI2RlZmlu ZSBPUFRfU0VDVElPTlMgMgorI2RlZmluZSBPUFRfU1lNUyAzCisjZGVmaW5lIE9QVF9SRUxPQ1Mg NAorI2RlZmluZSBPUFRfTElORU5PIDUKKyNkZWZpbmUgT1BUX0xPQURFUiA2CisjZGVmaW5lIE9Q VF9FWENFUFQgNworI2RlZmluZSBPUFRfVFlQQ0hLIDgKKyNkZWZpbmUgT1BUX1RSQUNFQkFDSyA5 CisjZGVmaW5lIE9QVF9UT0MgMTAKKyNkZWZpbmUgT1BUX0xESU5GTyAxMQorCisvKiBMaXN0IG9m IGFjdGlvbnMuICAqLworc3RhdGljIHN0cnVjdCBvYmpkdW1wX3ByaXZhdGVfb3B0aW9uIG9wdGlv bnNbXSA9Cit7CisgIHsgImhlYWRlciIsIDAgfSwKKyAgeyAiYW91dCIsIDAgfSwKKyAgeyAic2Vj dGlvbnMiLCAwIH0sCisgIHsgInN5bXMiLCAwIH0sCisgIHsgInJlbG9jcyIsIDAgfSwKKyAgeyAi bGluZW5vIiwgMCB9LAorICB7ICJsb2FkZXIiLCAwIH0sCisgIHsgImV4Y2VwdCIsIDAgfSwKKyAg eyAidHlwY2hrIiwgMCB9LAorICB7ICJ0cmFjZWJhY2siLCAwIH0sCisgIHsgInRvYyIsIDAgfSwK KyAgeyAibGRpbmZvIiwgMCB9LAorICB7IE5VTEwsIDAgfQorfTsKKworLyogU2ltcGxpZmllZCBz ZWN0aW9uIGhlYWRlci4gICovCitzdHJ1Y3QgcGVfc2VjdGlvbgoreworICAvKiBOVUwgdGVybWlu YXRlZCBuYW1lLiAgKi8KKyAgY2hhciBuYW1lWzldOworCisgIC8qIFNlY3Rpb24gZmxhZ3MuICAq LworICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyAgLyogT2Zmc2V0cyBpbiBmaWxlLiAgKi8KKyAg dWZpbGVfcHRyIHNjbnB0cjsKKyAgdWZpbGVfcHRyIHJlbHB0cjsKKyAgdWZpbGVfcHRyIGxubm9w dHI7CisKKyAgLyogTnVtYmVyIG9mIHJlbG9jcyBhbmQgbGluZSBudW1iZXJzLiAgKi8KKyAgdW5z aWduZWQgaW50IG5yZWxvYzsKKyAgdW5zaWduZWQgaW50IG5sbm5vOworfTsKKworLyogVHJhbnNs YXRpb24gZW50cnkgdHlwZS4gIFRoZSBsYXN0IGVudHJ5IG11c3QgYmUgezAsIE5VTEx9LiAgKi8K Kworc3RydWN0IHhsYXRfdGFibGUKK3sKKyAgdW5zaWduZWQgaW50ICB2YWw7CisgIGNvbnN0IGNo YXIgKiAgbmFtZTsKK307CisKKy8qIFBFIGZpbGUgZmxhZ3MuICAqLworc3RhdGljIGNvbnN0IHN0 cnVjdCB4bGF0X3RhYmxlIGZpbGVfZmxhZ194bGF0W10gPQoreworICB7IElNQUdFX0ZJTEVfUkVM T0NTX1NUUklQUEVELCAgICAgIlJFTE9DUyBTVFJJUFBFRCJ9LAorICB7IElNQUdFX0ZJTEVfRVhF Q1VUQUJMRV9JTUFHRSwgICAgIkVYRUNVVEFCTEUifSwKKyAgeyBJTUFHRV9GSUxFX0xJTkVfTlVN U19TVFJJUFBFRCwgICJMSU5FIE5VTVMgU1RSSVBQRUQifSwKKyAgeyBJTUFHRV9GSUxFX0xPQ0FM X1NZTVNfU1RSSVBQRUQsICJMT0NBTCBTWU1TIFNUUklQUEVEIn0sCisgIHsgSU1BR0VfRklMRV9B R0dSRVNTSVZFX1dTX1RSSU0sICAiQUdHUkVTU0lWRSBXUyBUUklNIn0sCisgIHsgSU1BR0VfRklM RV9MQVJHRV9BRERSRVNTX0FXQVJFLCAiTEFSR0UgQUREUkVTUyBBV0FSRSJ9LAorICB7IElNQUdF X0ZJTEVfMTZCSVRfTUFDSElORSwgICAgICAgIjE2QklUIE1BQ0hJTkUifSwKKyAgeyBJTUFHRV9G SUxFX0JZVEVTX1JFVkVSU0VEX0xPLCAgICJCWVRFUyBSRVZFUlNFRCBMTyJ9LAorICB7IElNQUdF X0ZJTEVfMzJCSVRfTUFDSElORSwgICAgICAgIjMyQklUIE1BQ0hJTkUifSwKKyAgeyBJTUFHRV9G SUxFX0RFQlVHX1NUUklQUEVELCAgICAgICJERUJVRyBTVFJJUFBFRCJ9LAorICB7IElNQUdFX0ZJ TEVfUkVNT1ZBQkxFX1JVTl9GUk9NX1NXQVAsICJSRU1PVkFCTEUgUlVOIEZST00gU1dBUCJ9LAor ICB7IElNQUdFX0ZJTEVfTkVUX1JVTl9GUk9NX1NXQVAsICAgIk5FVCBSVU4gRlJPTSBTV0FQIn0s CisgIHsgSU1BR0VfRklMRV9TWVNURU0sICAgICAgICAgICAgICAiU1lTVEVNIn0sCisgIHsgSU1B R0VfRklMRV9ETEwsICAgICAgICAgICAgICAgICAiRExMIn0sCisgIHsgSU1BR0VfRklMRV9VUF9T WVNURU1fT05MWSwgICAgICAiVVAgU1lTVEVNIE9OTFkifSwKKyAgeyBJTUFHRV9GSUxFX0JZVEVT X1JFVkVSU0VEX0hJLCAgICJCWVRFUyBSRVZFUlNFRCBISSJ9LAorICB7IDAsIE5VTEwgfQorfTsK KworLyogUEUgc2VjdGlvbiBmbGFncy4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHhsYXRfdGFi bGUgc2VjdGlvbl9mbGFnX3hsYXRbXSA9Cit7CisgIHsgSU1BR0VfU0NOX01FTV9ESVNDQVJEQUJM RSwgIkRJU0NBUkRBQkxFIiB9LAorICB7IElNQUdFX1NDTl9NRU1fRVhFQ1VURSwgICAgICJFWEVD VVRFIiB9LAorICB7IElNQUdFX1NDTl9NRU1fUkVBRCwgICAgICAgICJSRUFEIiB9LAorICB7IElN QUdFX1NDTl9NRU1fV1JJVEUsICAgICAgICJXUklURSIgfSwKKyAgeyBJTUFHRV9TQ05fVFlQRV9O T19QQUQsICAgICAiTk8gUEFEIiB9LAorICB7IElNQUdFX1NDTl9DTlRfQ09ERSwgICAgICAgICJD T0RFIiB9LAorICB7IElNQUdFX1NDTl9DTlRfSU5JVElBTElaRURfREFUQSwgICAiSU5JVElBTEla RUQgREFUQSIgfSwKKyAgeyBJTUFHRV9TQ05fQ05UX1VOSU5JVElBTElaRURfREFUQSwgIlVOSU5J VElBTElaRUQgREFUQSIgfSwKKyAgeyBJTUFHRV9TQ05fTE5LX09USEVSLCAgICAgICAiT1RIRVIi IH0sCisgIHsgSU1BR0VfU0NOX0xOS19JTkZPLCAgICAgICAgIklORk8iIH0sCisgIHsgSU1BR0Vf U0NOX0xOS19SRU1PVkUsICAgICAgIlJFTU9WRSIgfSwKKyAgeyBJTUFHRV9TQ05fTE5LX0NPTURB VCwgICAgICAiQ09NREFUIiB9LAorICB7IElNQUdFX1NDTl9NRU1fRkFSREFUQSwgICAgICJGQVJE QVRBIiB9LAorICB7IElNQUdFX1NDTl9NRU1fUFVSR0VBQkxFLCAgICJQVVJHRUFCTEUiIH0sCisg IHsgSU1BR0VfU0NOX01FTV9MT0NLRUQsICAgICAgIkxPQ0tFRCIgfSwKKyAgeyBJTUFHRV9TQ05f TUVNX1BSRUxPQUQsICAgICAiUFJFTE9BRCIgfSwKKyAgeyBJTUFHRV9TQ05fTE5LX05SRUxPQ19P VkZMLCAiTlJFTE9DIE9WRkwiIH0sCisgIHsgSU1BR0VfU0NOX01FTV9OT1RfQ0FDSEVELCAgIk5P VCBDQUNIRUQiIH0sCisgIHsgSU1BR0VfU0NOX01FTV9OT1RfUEFHRUQsICAgIk5PVCBQQUdFRCIg fSwKKyAgeyBJTUFHRV9TQ05fTUVNX1NIQVJFRCwgICAgICAiU0hBUkVEIiB9LCAgICAKKyAgeyAw LCBOVUxMIH0KK307CisKKworLyogRGlzcGxheSBoZWxwLiAgKi8KKworc3RhdGljIHZvaWQKK3Bl X2hlbHAgKEZJTEUgKnN0cmVhbSkKK3sKKyAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCitGb3IgUEUg ZmlsZXM6XG5cCisgIGhlYWRlciAgICAgIERpc3BsYXkgdGhlIGZpbGUgaGVhZGVyXG5cCisgIHNl Y3Rpb25zICAgIERpc3BsYXkgdGhlIHNlY3Rpb24gaGVhZGVyc1xuXAorIikpOworfQorCisvKiBS ZXR1cm4gdHJ1ZSBpZiBBQkZEIGlzIGhhbmRsZWQuICAqLworCitzdGF0aWMgaW50CitwZV9maWx0 ZXIgKGJmZCAqYWJmZCkKK3sKKyAgcmV0dXJuIGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZk X3RhcmdldF9jb2ZmX2ZsYXZvdXI7Cit9CisKKy8qIERpc3BsYXkgdGhlIGxpc3Qgb2YgbmFtZSAo ZnJvbSBUQUJMRSkgZm9yIEZMQUdTLCB1c2luZyBjb21tYSB0bworICAgc2VwYXJhdGUgdGhlbS4g IEEgbmFtZSBpcyBkaXNwbGF5ZWQgaWYgRkxBR1MgJiBWQUwgaXMgbm90IDAuICAqLworCitzdGF0 aWMgdm9pZAorZHVtcF9mbGFncyAoY29uc3Qgc3RydWN0IHhsYXRfdGFibGUgKiB0YWJsZSwgdW5z aWduZWQgaW50IGZsYWdzKQoreworICB1bnNpZ25lZCBpbnQgciA9IGZsYWdzOworICBib29sIGZp cnN0ID0gdHJ1ZTsKKyAgY29uc3Qgc3RydWN0IHhsYXRfdGFibGUgKnQ7CisKKyAgZm9yICh0ID0g dGFibGU7IHQtPm5hbWU7IHQrKykKKyAgICBpZiAoKGZsYWdzICYgdC0+dmFsKSAhPSAwKQorICAg ICAgeworICAgICAgICByICY9IH50LT52YWw7CisKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAg ICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwdXRjaGFyICgnLCcp OworICAgICAgICBmcHV0cyAodC0+bmFtZSwgc3Rkb3V0KTsKKyAgICAgIH0KKworICAvKiBVbmRl Y29kZWQgZmxhZ3MuICAqLworICBpZiAociAhPSAwKQorICAgIHsKKyAgICAgIGlmICghZmlyc3Qp CisgICAgICAgIHB1dGNoYXIgKCcsJyk7CisgICAgICBwcmludGYgKF8oInVua25vd246IDB4JXgi KSwgcik7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitkZWNvZGVfbWFjaGluZV9u dW1iZXIgKHVuc2lnbmVkIGludCBtYWNoaW5lKQoreworICBzd2l0Y2ggKG1hY2hpbmUpCisgICAg eworICAgIGNhc2UgSU1BR0VfRklMRV9NQUNISU5FX0FMUEhBOiAgICAgICByZXR1cm4gIkFMUEhB IjsKKyAgICBjYXNlIElNQUdFX0ZJTEVfTUFDSElORV9BTUQ2NDogICAgICAgcmV0dXJuICJBTUQ2 NCI7CisgICAgY2FzZSBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNOiAgICAgICAgIHJldHVybiAiQVJN IjsKKyAgICBjYXNlIElNQUdFX0ZJTEVfTUFDSElORV9BUk02NDogICAgICAgcmV0dXJuICJBUk02 NCI7CisgICAgY2FzZSBJTUFHRV9GSUxFX01BQ0hJTkVfSTM4NjogICAgICAgIHJldHVybiAiSTM4 NiI7CisgICAgY2FzZSBJTUFHRV9GSUxFX01BQ0hJTkVfSUE2NDogICAgICAgIHJldHVybiAiSUE2 NCI7CisgICAgY2FzZSBJTUFHRV9GSUxFX01BQ0hJTkVfTE9PTkdBUkNINjQ6IHJldHVybiAiTE9P TkdBUkNINjQiOworICAgIGNhc2UgSU1BR0VfRklMRV9NQUNISU5FX1BPV0VSUEM6ICAgICByZXR1 cm4gIlBPV0VSUEMiOworICAgIGNhc2UgMHgwNTAwOiAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gIlNIIChiaWcgZW5kaWFuKSI7CisgICAgY2FzZSAweDA1NTA6ICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAiU0ggKGxpdHRsZSBlbmRpYW4pIjsKKyAgICBjYXNlIDB4MGIwMDog ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJNQ29yZSI7CisgICAgY2FzZSAweDAwOTM6 ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiVEkgQzRYIjsKKyAgICAgIC8vIEZJWE1F OiBBZGQgbW9yZSBtYWNoaW5lIG51bWJlcnMuCisgICAgZGVmYXVsdDogcmV0dXJuIE5fKCJ1bmtu b3duIik7CisgICAgfQorfQorCisvKiBEdW1wIHRoZSBmaWxlIGhlYWRlci4gICovCisKK3N0YXRp YyB2b2lkCitkdW1wX3BlX2ZpbGVfaGVhZGVyIChiZmQgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhYmZkLAorCQkgICAgIHN0cnVjdCBleHRlcm5hbF9QRUlfZmlsZWhkciAqICAgIGZoZHIs CisJCSAgICAgc3RydWN0IGV4dGVybmFsX1BFSV9JTUFHRV9oZHIgKiAgaWhkcikKK3sKKyAgdW5z aWduZWQgbG9uZyBpaGRyX29mZiA9IDA7CisKKyAgaWYgKGZoZHIgIT0gTlVMTCkKKyAgICB7Cisg ICAgICBwcmludGYgKF8oIlxuRmlsZSBIZWFkZXI6XG4iKSk7CisKKyAgICAgIC8qIEZJWE1FOiBU aGUgZmllbGRzIGluIHRoZSBmaWxlIGhlYWRlciBhcmUgYm9yaW5nIGFuIGdlbmVyYWxseSBoYXZl CisJIGZpeGVkIHZhbHVlcy4gIElzIHRoZXJlIGFueSBiZW5lZml0IGluIGRpc3BsYXlpbmcgdGhl bSA/ICAqLworCisgICAgICAvKiBEaXNwbGF5IHRoZSBmaXJzdCBzdHJpbmcgZm91bmQgaW4gdGhl IHN0dWIuCisJIEZJWE1FOiBMb29rIGZvciBtb3JlIHRoYW4gb25lIHN0cmluZyA/CisJIEZJWE1F OiBTdHJpY3RseSBzcGVha2luZyB3ZSBtYXkgbm90IGhhdmUgcmVhZCB0aGUgZnVsbCBzdHViLCBz aW5jZQorCSBpdCBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGRvc19tZXNzYWdlIGFycmF5IGluIHRo ZSBQRUlfZmlsZWhlYWRlcgorCSBzdHJ1Y3R1cmUuICAqLworICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqIG1lc3NhZ2UgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBmaGRyLT5kb3NfbWVzc2Fn ZTsKKyAgICAgIHVuc2lnbmVkIGludCBsZW4gPSBzaXplb2YgKGZoZHItPmRvc19tZXNzYWdlKTsK KyAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgdW5zaWduZWQgaW50IHNlZW5fY291bnQgPSAw OworICAgICAgdW5zaWduZWQgaW50IHN0cmluZ19zdGFydCA9IDA7CisgIAorICAgICAgZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKQorCXsKKwkgIGlmIChJU1BSSU5UIChtZXNzYWdlW2ldKSkKKwkg ICAgeworCSAgICAgIGlmIChzdHJpbmdfc3RhcnQgPT0gMCkKKwkJc3RyaW5nX3N0YXJ0ID0gaTsK KwkgICAgICArKyBzZWVuX2NvdW50OworCSAgICAgIGlmIChzZWVuX2NvdW50ID4gNCkKKwkJYnJl YWs7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHNlZW5fY291bnQgPSBzdHJpbmdf c3RhcnQgPSAwOworCSAgICB9CisJfQorCisgICAgICBpZiAoc2Vlbl9jb3VudCA+IDQpCisJewor CSAgcHJpbnRmIChfKCIgIFN0dWIgbWVzc2FnZTogICIpKTsKKwkgIHdoaWxlIChzdHJpbmdfc3Rh cnQgPCBsZW4pCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSBtZXNzYWdlW3N0cmluZ19zdGFydCAr K107CisJICAgICAgaWYgKCEgSVNQUklOVCAoYykpCisJCWJyZWFrOworCSAgICAgIHB1dGNoYXIg KGMpOworCSAgICB9CisJICBwdXRjaGFyICgnXG4nKTsKKwl9CisKKyAgICAgIGloZHJfb2ZmID0g KGxvbmcpIGJmZF9oX2dldF8zMiAoYWJmZCwgZmhkci0+ZV9sZmFuZXcpOworICAgIH0KKworICBw cmludGYgKF8oIlxuSW1hZ2UgSGVhZGVyIChhdCBvZmZzZXQgJSNseCk6XG4iKSwgaWhkcl9vZmYp OworCSAgCisgIHVuc2lnbmVkIGludCBtYWNoaW5lID0gKGludCkgYmZkX2hfZ2V0XzE2IChhYmZk LCBpaGRyLT5mX21hZ2ljKTsKKyAgcHJpbnRmIChfKCIgIE1hY2hpbmUgTnVtOiAgICUjeFx0XHQt ICVzXG4iKSwgbWFjaGluZSwKKwkgIGRlY29kZV9tYWNoaW5lX251bWJlciAobWFjaGluZSkpOwor CisgIHByaW50ZiAoXygiICBOdW0gc2VjdGlvbnM6ICAlZFxuIiksIChpbnQpIGJmZF9oX2dldF8x NiAoYWJmZCwgaWhkci0+Zl9uc2NucykpOworCisgIGxvbmcgdGltZWRhdCA9IGJmZF9oX2dldF8z MiAoYWJmZCwgaWhkci0+Zl90aW1kYXQpOworICBwcmludGYgKF8oIiAgVGltZSBhbmQgZGF0ZTog JSMwOGx4XHQtICIpLCB0aW1lZGF0KTsKKyAgaWYgKHRpbWVkYXQgPT0gMCkKKyAgICBwcmludGYg KF8oIm5vdCBzZXRcbiIpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5vdCBjb3JyZWN0IG9u IGFsbCBwbGF0Zm9ybXMsIGJ1dCB3b3JrcyBvbiB1bml4LiAgKi8KKyAgICAgIHRpbWVfdCB0ID0g dGltZWRhdDsKKyAgICAgIGZwdXRzIChjdGltZSAoJiB0KSwgc3Rkb3V0KTsKKyAgICB9CisKKyAg cHJpbnRmIChfKCIgIFN5bWJvbHMgb2ZmOiAgICUjMDhseFxuIiksCisJICAobG9uZykgYmZkX2hf Z2V0XzMyIChhYmZkLCBpaGRyLT5mX3N5bXB0cikpOworICBwcmludGYgKF8oIiAgTnVtIHN5bWJv bHM6ICAgJWxkXG4iKSwKKwkgIChsb25nKSBiZmRfaF9nZXRfMzIgKGFiZmQsIGloZHItPmZfbnN5 bXMpKTsKKworICB1bnNpZ25lZCBpbnQgb3B0X2hlYWRlcl9zaXplID0gKGludCkgYmZkX2hfZ2V0 XzE2IChhYmZkLCBpaGRyLT5mX29wdGhkcik7CisgIHByaW50ZiAoXygiICBPcHQgaGRyIHN6OiAg ICAlI3hcbiIpLCBvcHRfaGVhZGVyX3NpemUpOworCisgIHVuc2lnbmVkIGludCBmbGFncyA9IChp bnQpIGJmZF9oX2dldF8xNiAoYWJmZCwgaWhkci0+Zl9mbGFncyk7CisgIHByaW50ZiAoXygiICBG bGFnczogICAgICAgICAweCUwNHhcdFx0LSAiKSwgZmxhZ3MpOworICBkdW1wX2ZsYWdzIChmaWxl X2ZsYWdfeGxhdCwgZmxhZ3MpOworICBwdXRjaGFyICgnXG4nKTsKKworICBpZiAob3B0X2hlYWRl cl9zaXplID09IFBFUEFPVVRTWikKKyAgICB7CisgICAgICBQRVBBT1VUSERSIHhoZHI7CisKKyAg ICAgIHByaW50ZiAoXygiXG5PcHRpb25hbCBQRSsgSGVhZGVyIChhdCBvZmZzZXQgJSNseCk6XG4i KSwKKwkgICAgICBpaGRyX29mZiArIHNpemVvZiAoKiBpaGRyKSk7CisKKyAgICAgIGlmIChiZmRf c2VlayAoYWJmZCwgaWhkcl9vZmYgKyBzaXplb2YgKCogaWhkciksIFNFRUtfU0VUKSAhPSAwCisJ ICB8fCBiZmRfYnJlYWQgKCYgeGhkciwgc2l6ZW9mICh4aGRyKSwgYWJmZCkgIT0gc2l6ZW9mICh4 aGRyKSkKKwlwcmludGYgKCJlcnJvcjogdW5hYmxlIHRvIHJlYWQgUEUrIGhlYWRlclxuIik7Cisg ICAgICBlbHNlCisJeworCSAgLyogRklYTUU6IENoZWNrIHRoYXQgdGhlIG1hZ2ljIG51bWJlciBp cyAweDAyMGIgPyAgKi8KKwkgIHByaW50ZiAoXygiICBNYWdpYzogICAgICAgICAleFxuIiksCisJ CSAgKGludCkgYmZkX2hfZ2V0XzE2IChhYmZkLCB4aGRyLnN0YW5kYXJkLm1hZ2ljKSk7CisJICBw cmludGYgKF8oIiAgSW1hZ2UgQmFzZTogICAgJWx4XG4iKSwKKwkJICAobG9uZykgYmZkX2hfZ2V0 XzY0IChhYmZkLCB4aGRyLkltYWdlQmFzZSkpOworCSAgLyogRklYTUU6IFByaW50IG1vcmUgZmll bGRzLiAgKi8KKwl9CisgICAgfQorICBlbHNlIGlmIChvcHRfaGVhZGVyX3NpemUgPT0gQU9VVFNa KQorICAgIHsKKyAgICAgIFBFQU9VVEhEUiB4aGRyOworCisgICAgICBwcmludGYgKF8oIlxuT3B0 aW9uYWwgUEUgSGVhZGVyIChhdCBvZmZzZXQgJSNseCk6XG4iKSwKKwkgICAgICBpaGRyX29mZiAr IHNpemVvZiAoKiBpaGRyKSk7CisKKyAgICAgIGlmIChiZmRfc2VlayAoYWJmZCwgaWhkcl9vZmYg KyBzaXplb2YgKCogaWhkciksIFNFRUtfU0VUKSAhPSAwCisJICB8fCBiZmRfYnJlYWQgKCYgeGhk ciwgc2l6ZW9mICh4aGRyKSwgYWJmZCkgIT0gc2l6ZW9mICh4aGRyKSkKKwlwcmludGYgKCJlcnJv cjogdW5hYmxlIHRvIHJlYWQgUEUrIGhlYWRlclxuIik7CisgICAgICBlbHNlCisJeworCSAgLyog RklYTUU6IENoZWNrIHRoYXQgdGhlIG1hZ2ljIG51bWJlciBpcyAweDAxMGIgPyAgKi8KKwkgIHBy aW50ZiAoXygiICBNYWdpYzogICAgICAgICAleFxuIiksCisJCSAgKGludCkgYmZkX2hfZ2V0XzE2 IChhYmZkLCB4aGRyLnN0YW5kYXJkLm1hZ2ljKSk7CisJICBwcmludGYgKF8oIiAgSW1hZ2UgQmFz ZTogICAgJWx4XG4iKSwKKwkJICAobG9uZykgYmZkX2hfZ2V0XzMyIChhYmZkLCB4aGRyLkltYWdl QmFzZSkpOworCSAgLyogRklYTUU6IFByaW50IG1vcmUgZmllbGRzLiAgKi8KKwl9CisgICAgfQor ICBlbHNlIGlmIChvcHRfaGVhZGVyX3NpemUgIT0gMCkKKyAgICB7CisgICAgICBwcmludGYgKF8o IlxuVW5zdXBwb3J0ZWQgc2l6ZSBvZiBPcHRpb25hbCBIZWFkZXJcbiIpKTsKKyAgICB9Cit9CisK Ky8qIER1bXAgdGhlIHNlY3Rpb25zIGhlYWRlci4gICovCisKK3N0YXRpYyB2b2lkCitkdW1wX3Bl X3NlY3Rpb25zX2hlYWRlciAoYmZkICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJmZCwK KwkJCSBzdHJ1Y3QgZXh0ZXJuYWxfUEVJX2ZpbGVoZHIgKiAgICBmaGRyLAorCQkJIHN0cnVjdCBl eHRlcm5hbF9QRUlfSU1BR0VfaGRyICogIGloZHIpCit7CisgIHVuc2lnbmVkIGludCBvcHRoZHIg PSAoaW50KSBiZmRfaF9nZXRfMTYgKGFiZmQsIGloZHItPmZfb3B0aGRyKTsKKyAgdW5zaWduZWQg aW50IG5fc2NucyA9IChpbnQpIGJmZF9oX2dldF8xNiAoYWJmZCwgaWhkci0+Zl9uc2Nucyk7Cisg IHVuc2lnbmVkIGludCBvZmY7CisKKyAgLyogVGhlIHNlY3Rpb24gaGVhZGVyIHN0YXJ0cyBhZnRl ciB0aGUgZmlsZSwgaW1hZ2UgYW5kIG9wdGlvbmFsIGhlYWRlcnMuICAqLyAgCisgIGlmIChmaGRy ID09IE5VTEwpCisgICAgb2ZmID0gc2l6ZW9mIChzdHJ1Y3QgZXh0ZXJuYWxfZmlsZWhkcikgKyBv cHRoZHI7CisgIGVsc2UKKyAgICBvZmYgPSAoaW50KSBiZmRfaF9nZXRfMTYgKGFiZmQsIGZoZHIt PmVfbGZhbmV3KSArIHNpemVvZiAoKiBpaGRyKSArIG9wdGhkcjsKKworICBwcmludGYgKF8oIlxu U2VjdGlvbiBoZWFkZXJzIChhdCBvZmZzZXQgMHglMDh4KTpcbiIpLCBvZmYpOworCisgIGlmIChu X3NjbnMgPT0gMCkKKyAgICB7CisgICAgICBwcmludGYgKF8oIiAgTm8gc2VjdGlvbiBoZWFkZXJz XG4iKSk7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAoYmZkX3NlZWsgKGFiZmQsIG9mZiwg U0VFS19TRVQpICE9IDApCisgICAgeworICAgICAgbm9uX2ZhdGFsIChfKCJjYW5ub3Qgc2VlayB0 byBzZWN0aW9uIGhlYWRlcnMgc3RhcnRcbiIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg LyogV2UgZG9uJ3QgdHJhbnNsYXRlIHRoaXMgc3RyaW5nIGFzIGl0IGNvbnNpc3RzIG9mIGZpZWxk IG5hbWVzLiAgKi8KKyAgaWYgKHdpZGVfb3V0cHV0KQorICAgIHByaW50ZiAoIiAjIE5hbWUgICAg IHBhZGRyICAgIHZhZGRyICAgIHNpemUgICAgIHNjbnB0ciAgIHJlbHB0ciAgIGxubm9wdHIgICBu cmVsIG5sbm5vICAgRmxhZ3NcbiIpOworICBlbHNlCisgICAgcHJpbnRmICgiICMgTmFtZSAgICAg cGFkZHIgICAgdmFkZHIgICAgc2l6ZSAgICAgc2NucHRyICAgcmVscHRyICAgbG5ub3B0ciAgIG5y ZWwgbmxubm9cbiIpOworCisgIHVuc2lnbmVkIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgbl9z Y25zOyBpKyspCisgICAgeworICAgICAgc3RydWN0IGV4dGVybmFsX3NjbmhkciBzY247CisgICAg ICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyAgICAgIGlmIChiZmRfYnJlYWQgKCYgc2NuLCBzaXpl b2YgKHNjbiksIGFiZmQpICE9IHNpemVvZiAoc2NuKSkKKyAgICAgICAgeworICAgICAgICAgIG5v bl9mYXRhbCAoXygiY2Fubm90IHJlYWQgc2VjdGlvbiBoZWFkZXIiKSk7CisgICAgICAgICAgcmV0 dXJuOworICAgICAgICB9CisKKyAgICAgIHByaW50ZiAoIiUyZCAlLTguOHMgJTA4eCAlMDh4ICUw OHggJTA4eCAlMDh4ICUwOHggJTVkICU1ZCIsCisgICAgICAgICAgICAgIGkgKyAxLCBzY24uc19u YW1lLAorICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBiZmRfaF9nZXRfMzIgKGFiZmQsIHNj bi5zX3BhZGRyKSwKKyAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgYmZkX2hfZ2V0XzMyIChh YmZkLCBzY24uc192YWRkciksCisgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGJmZF9oX2dl dF8zMiAoYWJmZCwgc2NuLnNfc2l6ZSksCisgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGJm ZF9oX2dldF8zMiAoYWJmZCwgc2NuLnNfc2NucHRyKSwKKyAgICAgICAgICAgICAgKHVuc2lnbmVk IGludCkgYmZkX2hfZ2V0XzMyIChhYmZkLCBzY24uc19yZWxwdHIpLAorICAgICAgICAgICAgICAo dW5zaWduZWQgaW50KSBiZmRfaF9nZXRfMzIgKGFiZmQsIHNjbi5zX2xubm9wdHIpLAorICAgICAg ICAgICAgICAodW5zaWduZWQgaW50KSBiZmRfaF9nZXRfMTYgKGFiZmQsIHNjbi5zX25yZWxvYyks CisgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGJmZF9oX2dldF8xNiAoYWJmZCwgc2NuLnNf bmxubm8pKTsKKworICAgICAgZmxhZ3MgPSBiZmRfaF9nZXRfMzIgKGFiZmQsIHNjbi5zX2ZsYWdz KTsKKyAgICAgIGlmICh3aWRlX291dHB1dCkKKwlwcmludGYgKF8oIiAgICUwOHggIiksIGZsYWdz KTsKKyAgICAgIGVsc2UKKwlwcmludGYgKF8oIlxuICAgICAgICAgICAgRmxhZ3M6ICUwOHg6ICIp LCBmbGFncyk7CisKKyAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICB7CisJICAvKiBTa2lw IHRoZSBhbGlnbm1lbnQgYml0cy4gICovCisJICBmbGFncyAmPSB+IElNQUdFX1NDTl9BTElHTl9Q T1dFUl9CSVRfTUFTSzsKKyAgICAgICAgICBkdW1wX2ZsYWdzIChzZWN0aW9uX2ZsYWdfeGxhdCwg ZmxhZ3MpOworICAgICAgICB9CisKKyAgICAgIHB1dGNoYXIgKCdcbicpOworICAgIH0KK30KKwor LyogSGFuZGxlIGEgUEUgZm9ybWF0IGZpbGUuICAqLworCitzdGF0aWMgdm9pZAorZHVtcF9wZSAo YmZkICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJmZCwKKwkgc3RydWN0IGV4dGVybmFs X1BFSV9maWxlaGRyICogICAgZmhkciwKKwkgc3RydWN0IGV4dGVybmFsX1BFSV9JTUFHRV9oZHIg KiAgaWhkcikKK3sKKyAgaWYgKG9wdGlvbnNbT1BUX0ZJTEVfSEVBREVSXS5zZWxlY3RlZCkKKyAg ICBkdW1wX3BlX2ZpbGVfaGVhZGVyIChhYmZkLCBmaGRyLCBpaGRyKTsKKyAgCisgIGlmIChvcHRp b25zW09QVF9TRUNUSU9OU10uc2VsZWN0ZWQpCisgICAgZHVtcF9wZV9zZWN0aW9uc19oZWFkZXIg KGFiZmQsIGZoZHIsIGloZHIpOworfQorCitzdGF0aWMgYm9vbAoraXNfcGVfb2JqZWN0X21hZ2lj ICh1bnNpZ25lZCBzaG9ydCBtYWdpYykKK3sKKyAgc3dpdGNoIChtYWdpYykKKyAgICB7CisgICAg Y2FzZSBJTUFHRV9GSUxFX01BQ0hJTkVfQUxQSEE6CisgICAgY2FzZSBJTUFHRV9GSUxFX01BQ0hJ TkVfQVJNOgorICAgIGNhc2UgSU1BR0VfRklMRV9NQUNISU5FX0FSTTY0OgorICAgIGNhc2UgSU1B R0VfRklMRV9NQUNISU5FX0kzODY6CisgICAgY2FzZSBJTUFHRV9GSUxFX01BQ0hJTkVfSUE2NDoK KyAgICBjYXNlIElNQUdFX0ZJTEVfTUFDSElORV9QT1dFUlBDOgorICAgIGNhc2UgSU1BR0VfRklM RV9NQUNISU5FX0xPT05HQVJDSDY0OgorICAgIGNhc2UgSU1BR0VfRklMRV9NQUNISU5FX0FNRDY0 OgorICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG1hY2hpbmUgbnVtYmVycy4KKyAgICAgIHJldHVy biB0cnVlOworICAgIGNhc2UgMHgwNTAwOiAvKiBTSF9BUkNIX01BR0lDX0JJRyAqLworICAgIGNh c2UgMHgwNTUwOiAvKiBTSF9BUkNIX01BR0lDX0xJVFRMRSAqLworICAgIGNhc2UgMHgwYjAwOiAv KiBNQ29yZSAqLworICAgIGNhc2UgMHgwMDkzOiAvKiBUSSBDNHggKi8KKyAgICAgIHJldHVybiB0 cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvKiBE dW1wIEFCRkQgKGFjY29yZGluZyB0byB0aGUgb3B0aW9uc1tdIGFycmF5KS4gICovCisKK3N0YXRp YyB2b2lkCitwZV9kdW1wX29iaiAoYmZkICphYmZkKQoreworICBzdHJ1Y3QgZXh0ZXJuYWxfUEVJ X2ZpbGVoZHIgZmhkcjsKKworICAvKiBSZWFkIGZpbGUgaGVhZGVyLiAgKi8KKyAgaWYgKGJmZF9z ZWVrIChhYmZkLCAwLCBTRUVLX1NFVCkgIT0gMAorICAgICAgfHwgYmZkX2JyZWFkICgmIGZoZHIs IHNpemVvZiAoZmhkciksIGFiZmQpICE9IHNpemVvZiAoZmhkcikpCisgICAgeworICAgICAgbm9u X2ZhdGFsIChfKCJjYW5ub3Qgc2VlayB0by9yZWFkIGZpbGUgaGVhZGVyIikpOworICAgICAgcmV0 dXJuOworICAgIH0KKworICB1bnNpZ25lZCBzaG9ydCBtYWdpYyA9IGJmZF9oX2dldF8xNiAoYWJm ZCwgZmhkci5lX21hZ2ljKTsKKworICAvKiBQRSBmb3JtYXQgZXhlY3V0YWJsZSBmaWxlcyBoYXZl IGEgZnVsbCBleHRlcm5hbF9QRUlfZmlsZWhkciBzdHJ1Y3R1cmUKKyAgICAgYXQgdGhlIHN0YXJ0 LiAgUEUgZm9ybWF0IG9iamVjdCBmaWxlcyBqdXN0IGhhdmUgYW4gZXh0ZXJuYWxfZmlsZWhkcgor ICAgICBzdHJ1Y3R1cmUgYXQgdGhlIHN0YXJ0LiAgKi8KKyAgaWYgKG1hZ2ljID09IElNQUdFX0RP U19TSUdOQVRVUkUpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGloZHJfb2Zmc2V0ID0gKGlu dCkgYmZkX2hfZ2V0XzE2IChhYmZkLCBmaGRyLmVfbGZhbmV3KTsKKworICAgICAgLyogRklYTUU6 IFdlIGNvdWxkIHJldXNlIHRoZSBmaWVsZHMgaW4gZmhkciwgYnV0IHRoYXQgbWlnaHQKKwkgY29u ZnVzZSB2YXJpb3VzIHNhbml0aXphdGlvbiBhbmQgbWVtb3J5IGNoZWNrZXIgdG9vbHMuICAqLwor ICAgICAgc3RydWN0IGV4dGVybmFsX1BFSV9JTUFHRV9oZHIgaWhkcjsKKworICAgICAgaWYgKGJm ZF9zZWVrIChhYmZkLCBpaGRyX29mZnNldCwgU0VFS19TRVQpICE9IDAKKwkgIHx8IGJmZF9icmVh ZCAoJiBpaGRyLCBzaXplb2YgKGloZHIpLCBhYmZkKSAhPSBzaXplb2YgKGloZHIpKQorCXsKKwkg IG5vbl9mYXRhbCAoXygiY2Fubm90IHNlZWsgdG8vcmVhZCBpbWFnZSBoZWFkZXIgYXQgb2Zmc2V0 ICUjeCIpLAorCQkgICAgIGloZHJfb2Zmc2V0KTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIHVu c2lnbmVkIGludCBzaWduYXR1cmUgPSAoaW50KSBiZmRfaF9nZXRfMTYgKGFiZmQsIGloZHIubnRf c2lnbmF0dXJlKTsKKyAgICAgIGlmIChzaWduYXR1cmUgIT0gSU1BR0VfTlRfU0lHTkFUVVJFKQor CXsKKwkgIG5vbl9mYXRhbCAoImZpbGUgZG9lcyBub3QgaGF2ZSBhbiBOVCBmb3JtYXQgc2lnbmF0 dXJlOiAlI3giLAorCQkgICAgIHNpZ25hdHVyZSk7CisJICByZXR1cm47CisJfQorICAKKyAgICAg IGR1bXBfcGUgKGFiZmQsICYgZmhkciwgJiBpaGRyKTsKKyAgICB9CisgIGVsc2UgaWYgKGlzX3Bl X29iamVjdF9tYWdpYyAobWFnaWMpKQorICAgIHsKKyAgICAgIHN0cnVjdCBleHRlcm5hbF9maWxl aGRyIGVoZHI7CisKKyAgICAgIGlmIChiZmRfc2VlayAoYWJmZCwgMCwgU0VFS19TRVQpICE9IDAK KwkgIHx8IGJmZF9icmVhZCAoJiBlaGRyLCBzaXplb2YgKGVoZHIpLCBhYmZkKSAhPSBzaXplb2Yg KGVoZHIpKQorCXsKKwkgIG5vbl9mYXRhbCAoXygiY2Fubm90IHNlZWsgdG8vcmVhZCBpbWFnZSBo ZWFkZXIiKSk7CisJICByZXR1cm47CisJfQorCisgICAgICBzdHJ1Y3QgZXh0ZXJuYWxfUEVJX0lN QUdFX2hkciBpaGRyOworICAgICAgbWVtY3B5ICgmIGloZHIuZl9tYWdpYywgJiBlaGRyLCBzaXpl b2YgKGVoZHIpKTsKKyAgICAgIGR1bXBfcGUgKGFiZmQsIE5VTEwsICYgaWhkcik7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgbm9uX2ZhdGFsICgibm90IGEgUEUgZm9ybWF0IGJpbmFyeSAt IHVuZXhwZWN0ZWQgbWFnaWMgbnVtYmVyOiAlI3giLAorCQkgbWFnaWMpOworICAgICAgcmV0dXJu OworICAgIH0KK30KKworLyogRHVtcCBhIFBFIGZpbGUuICAqLworCitzdGF0aWMgdm9pZAorcGVf ZHVtcCAoYmZkICphYmZkKQoreworICAvKiBXZSByZWx5IG9uIEJGRCB0byBkZWNpZGUgaWYgdGhl IGZpbGUgaXMgYSBjb3JlIGZpbGUuICBOb3RlIHRoYXQgY29yZQorICAgICBmaWxlcyBhcmUgb25s eSBzdXBwb3J0ZWQgb24gbmF0aXZlIGVudmlyb25tZW50IGJ5IEJGRC4gICovCisgIHN3aXRjaCAo YmZkX2dldF9mb3JtYXQgKGFiZmQpKQorICAgIHsKKyAgICBjYXNlIGJmZF9jb3JlOgorICAgICAg Ly8gRklYTUU6IEhhbmRsZSBQRSBmb3JtYXQgY29yZSBmaWxlcyA/CisgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgcGVfZHVtcF9vYmogKGFiZmQpOworICAgICAgYnJlYWs7CisgICAg fQorfQorCisvKiBWZWN0b3IgZm9yIHBlLiAgKi8KKworY29uc3Qgc3RydWN0IG9iamR1bXBfcHJp dmF0ZV9kZXNjIG9iamR1bXBfcHJpdmF0ZV9kZXNjX3BlID0KK3sKKyAgcGVfaGVscCwKKyAgcGVf ZmlsdGVyLAorICBwZV9kdW1wLAorICBvcHRpb25zCit9Owo= --------------2JNIDAqSj9ZcZewBJvZjghe6--