Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wnr9y-000eYR-1K for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Jul 2026 05:12:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wnr8x-008HkM-0W for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Jul 2026 05:11:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wnr8w-008Hjs-2Q for pgsql-hackers@lists.postgresql.org; Sun, 26 Jul 2026 05:11:18 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wnr8s-00000000IZF-3T0S for pgsql-hackers@lists.postgresql.org; Sun, 26 Jul 2026 05:11:16 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-c197f968b3cso241750266b.2 for ; Sat, 25 Jul 2026 22:11:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785042668; x=1785647468; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:content-type:from:to:cc:subject:date :message-id:reply-to:content-type; bh=iIP2AEJhwaHw0oDbcw2ZvUXUGQEn70aealMN0C+QoL4=; b=rjCkuxkhHiriQgXHQmDGbaGQD/731anq9M8ezdkPEmAUKUrx7r8Luv7HD1nIAwkibE iqNaiAtGsodo7KxPs9n8HQnNCyRstKZ/HogXhZPeO1IVAK2CowKQLQjJC+Oak7mLwiNu 1BPFsiRyb/nl64fvYelr9zhjBjQcuESZScCiAbh7VVDBSfY9eoWytcHurRKbQv9uQ7Mq X4fL2WnUAC2yUto0V7PFH0Du9VDE5GRAtZPyL1yViYxKr97MYIBvGwv2Vmrc6YpA5E5b UQBgZFQ6EGQ21u1fLCcxJE3kGfhLo9NNGdDvw+IccxxNnC5gzZpnzZXCUscZxDTUao6G s4bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785042668; x=1785647468; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=iIP2AEJhwaHw0oDbcw2ZvUXUGQEn70aealMN0C+QoL4=; b=hJ6ySQNJ7Kyf/3ho5jEA+SmeyLoBuF+hKZgoy2PJZ0/7Oi2/Qfy27t0xWK+1uVHbGK 5Pme2yEMoy7Rlf+1NuyoMWjLTttScPdDrQcIZskVthiBKUK3N6COQpGWgrlGle7fQbN7 py1+oqtOFNIKEq0fs/aUaOiRiAagV1BUH6wX/DaWSpZIJaVuTP7QrJe6SF6tD63qZISy ZeZ3UkwsN/Y8BbGwdgFAWSoDUOM6U6o1tZHwt+ua+57j5Z9AlkkfqIt75xkBOspc2h2G WscbB8YSTtf38KLekY4cXehLNOX9qUjOoYDHbs38MjZp6dVu5857LFX/H0Bcc/Mzlm8l qf+Q== X-Forwarded-Encrypted: i=1; AHgh+RqqZ1SRd02SmgHv3k81xY1ftfNfpgPB2V91ADms1YDlrXz7LCZgHSqrn2MtOnrz+Ol0a6PhFZiFst91wI8w@lists.postgresql.org X-Gm-Message-State: AOJu0YwPQ0usXjZf1GMk768TqhekkR03v0EzDclK04xA3BjBdaEjnnW/ kyixbzIw00nLTxft6WV+WXJaED2aIKSGndJePWzfploxkVhxU7uqdI+E X-Gm-Gg: AR+sD13u9Zo8b7h+hT9PEoRqCx8tdqfRr3fl9NpoeUXGoPtq3x8OLvV2DfBm3jz1dT0 9QEyaCxnUAcmNiw2AQi+dxpE3oyZC70S8huqlb/33Y4zN051+yUuqGJn1zXXpSTNZfkQXZTZHPC /jAAvKkrtUWqXsHo4Ld8faN/ffNulutmMGiuOpXVZIn17Llv6HL+o3xDceDl2jgKl8oRYPEkrwm 5gUQOaUcTVQm8+KrTeEPRpCVFi5EWeGmHQysjKCWqtVDSgA3W68ovIJnAniami0GoOxW/CfABDE P8/Fsv31ClVlnXQSTJzj/stdJZ0X2kr8tsMi4jLeUJaHsxf6PFxXJYWvVN5Qn1OpO8XiWPNR9ES /v2XRDk7S13AmwNzs6pXE00u0xQn+qr7azU2yvj4nO1XlAB1qrY1jhmA5svY1utBt4l0DMg2qIU HLWAVpNJ5AF71aeQVAMNHAUgwosIxVCOYyj/rkZfy88pw= X-Received: by 2002:a17:906:7950:b0:c05:b9db:68cc with SMTP id a640c23a62f3a-c1f1e875956mr177413966b.0.1785042668294; Sat, 25 Jul 2026 22:11:08 -0700 (PDT) Received: from [192.168.0.11] (c151-177-23-39.bredband.tele2.se. [151.177.23.39]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1c3260439esm507977966b.0.2026.07.25.22.11.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 25 Jul 2026 22:11:07 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------TSljTQNu9TloqEUfLvyDqVRZ" Message-ID: <8683af69-28af-4a2d-a1db-aa1447b02446@gmail.com> Date: Sun, 26 Jul 2026 07:11:06 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pg_rewind does not rewind diverging timelines To: Zsolt Parragi , pgsql-hackers@lists.postgresql.org References: <9ce0d2b9-7a41-4a8a-b299-da295bb4514f@gmail.com> Content-Language: en-US From: Mats Kindahl In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------TSljTQNu9TloqEUfLvyDqVRZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hello Zsolt, Thank you for reviewing this and sorry for the delay. I have attached a new version with the issues you pointed to handled. See comments inline below. Best wishes, Mats Kindahl On 6/8/26 21:52, Zsolt Parragi wrote: > Hello > > I know there's still ongoing discussion on the direction itself, but I > focused on just testing and looking at the latest patch, in case the > fix remains the same. > > + PG_CATCH(); > + { > + ErrorData *edata = CopyErrorData(); > + > + FlushErrorState(); > + ereport(FATAL, > + errmsg("invalid UUID in history file \"%s\"", path), > + errdetail("%s", edata->message)); > + } > > This is missing a MemoryContextSwitchTo before CopyErrorData, and > results in an assertion with debug builds. > > + memset(&entry->tluuid, 0, sizeof(pg_uuid_t)); > + if (nfields == 4 && strlen(uuid_str) == UUID_STR_LEN) > + rewind_parse_uuid(uuid_str, &entry->tluuid); > > This ignores the return value of rewind_parse_uuid, possibly writing > partial garbage to tluuid on incorrect input. > > Also, it seems like that with this patch, pg rewind requires the > target's history file to be always there - is this an intended change? > If yes, then it should be at least mentioned somewhere. > > On master: > exit 0 > "source and target cluster are on the same timeline" > "no rewind required" > > On patched rewind: > exit 1 > error: could not open file > ".../tgt/pg_wal/00000002.history" for reading: No such file or directory That was not the intention, so I added a check for a target history file to the code and a test that checks the behavior without a timeline history file and compared that with the behavior before the change. > > > writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI, > + const pg_uuid_t *newTLUUID, > XLogRecPtr switchpoint, char *reason) > > In case this is a bug that should be backported, wouldn't this be an ABI break? > > > +#endif /* !FRONTEND */ > + > +extern pg_uuid_t *generate_uuidv7(uint64 unix_ts_ms, uint32 sub_ms); > +extern pg_uuid_t *generate_uuidv7_r(pg_uuid_t *uuid, uint64 > unix_ts_ms, uint32 sub_ms); > > Shouldn't these go before the endif? I thought the generate_uuidv7 should be possible to use for a frontend, but looking at how it is written and linked, that is not possible to I moved the #endif. --------------TSljTQNu9TloqEUfLvyDqVRZ Content-Type: text/x-patch; charset=UTF-8; name="v7.0001-pg_rewind-use-UUIDs-to-detect-independent-same-TLI-p.patch" Content-Disposition: attachment; filename*0="v7.0001-pg_rewind-use-UUIDs-to-detect-independent-same-TLI-p"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSA2OGQzMjE3MzJmNWE4MmRkYmUwYTEzZWFiMDNlOTkxNGJmYmViYmE0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRzIEtpbmRhaGwgPG1hdHNAa2luZGFobC5uZXQ+ CkRhdGU6IFNhdCwgMjMgTWF5IDIwMjYgMTY6MDk6NDQgKzAyMDAKU3ViamVjdDogcGdfcmV3 aW5kOiB1c2UgVVVJRHMgdG8gZGV0ZWN0IGluZGVwZW5kZW50IHNhbWUtVExJIHByb21vdGlv bnMKClR3byBQb3N0Z3JlU1FMIHN0YW5kYnlzIGNhbiBpbmRlcGVuZGVudGx5IHByb21vdGUg dG8gdGhlIHNhbWUgdGltZWxpbmUKSUQgaWYgdGhlaXIgcHJpbWFyeSBzdG9wcGVkIGJlZm9y ZSBlaXRoZXIgaGFkIGEgY2hhbmNlIHRvIHByb21vdGUuICBJbgp0aGF0IHNpdHVhdGlvbiBi b3RoIGNsdXN0ZXJzIHNoYXJlIGEgdGltZWxpbmUgaGlzdG9yeSBwcmVmaXggdGhhdCBsb29r cwppZGVudGljYWwgdG8gcGdfcmV3aW5kOiBzYW1lIFRMSSBudW1iZXJzIGFuZCBzYW1lIGJl Z2luL2VuZCBMU05zLiAgVGhlCmV4aXN0aW5nIHNhbWUtVExJIHNob3J0Y3V0IHRoZXJlZm9y ZSB0cmVhdGVkIHRoZSBzb3VyY2UgYXMgYSB2YWxpZApyZXdpbmQgdGFyZ2V0IGFuZCBza2lw cGVkIHRoZSByZXdpbmQgZW50aXJlbHksIGxlYXZpbmcgdGhlIHRhcmdldCdzCmRpdmVyZ2Vk IFdBTCBpbnRhY3QuCgpGaXggdGhpcyBieSBlbWJlZGRpbmcgYSBVVUlEdjcgdmFsdWUgaW4g ZXZlcnkgdGltZWxpbmUgaGlzdG9yeSBmaWxlCmVudHJ5IGF0IHByb21vdGlvbiB0aW1lLiAg RWFjaCBwcm9tb3Rpb24gZ2VuZXJhdGVzIGEgZnJlc2ggVVVJRCwgc28gdHdvCmluZGVwZW5k ZW50IHByb21vdGlvbnMgdG8gdGhlIHNhbWUgVExJIHdpbGwgY2FycnkgZGlmZmVyZW50IFVV SURzIGV2ZW4KdGhvdWdoIHRoZSBUTEkgbnVtYmVyIGFuZCBiZWdpbiBMU04gYXJlIGlkZW50 aWNhbC4KCldoZW4gbG9hZGluZyB0aGUgdGltZWxpbmUgaGlzdG9yeSwgcGdfcmV3aW5kIHVz ZXMgdGhlc2UgVVVJRHMgaW4gdHdvCnBsYWNlczoKCjEuIGZpbmRDb21tb25BbmNlc3RvclRp bWVsaW5lIGNoZWNrcyB0aGF0IHRoZSBUTEkgYW5kIFVVSUQgaW4gZWFjaCBlbnRyeQogICBt YXRjaC4gIEEgbWlzbWF0Y2ggc2lnbmFscyBpbmRlcGVuZGVudCBwcm9tb3Rpb25zIGFuZCB0 aGUgc2VhcmNoCiAgIGNvbnRpbnVlcyB0byBlYXJsaWVyIGVudHJpZXMgdG8gZmluZCB0aGUg dHJ1ZSBjb21tb24gYW5jZXN0b3IuCgoyLiBUaGUgc2FtZS1UTEkgc2hvcnRjdXQgKHNvdXJj ZSBhbmQgdGFyZ2V0IG9uIHRoZSBzYW1lIGN1cnJlbnQgVExJKQogICBjb21wYXJlcyB0aGUg VVVJRCBzdG9yZWQgaW4gdGhlIGxhc3QgY29tcGxldGVkIGhpc3RvcnkgZW50cnkgYW5kIGEK ICAgbWlzbWF0Y2ggZm9yY2VzIGEgZnVsbCByZXdpbmQgaW5zdGVhZCBvZiBhIG5vLW9wLgoK VVVJRHMgYXJlIHplcm8gZm9yIGNsdXN0ZXJzIHRoYXQgcHJlZGF0ZSB0aGlzIGNoYW5nZSwg YW5kIHRoZSBjb21wYXJpc29uCmZ1bmN0aW9uIHRyZWF0cyBhIHplcm8gVVVJRCBvbiBlaXRo ZXIgc2lkZSBhcyBkaWZmZXJlbnQgZnJvbSBhIFVVSUQKc2luY2UgdGhhdCBwcm9tb3Rpb24g aGFzIHRvIGJlIGZyb20gYSBkaWZmZXJlbnQgc2VydmVyIChpdCBoYWQgYQpwcmUtY2hhbmdl IHZlcnNpb24gc2VydmVyIHRoYXQgd2FzIHByb21vdGVkLCBzbyBpdCBjYW5ub3QgYmUgdGhl IHNhbWUgYXMKYSBwb3N0LWNoYW5nZSB2ZXJzaW9uIHNlcnZlciB0aGF0IHdhcyBwcm9tb3Rl ZCkuCgpCZWZvcmUgdGhpcyBjb21taXQsIFBvc3RncmVzIHRvbGVyYXRlZCB0aGUgdGFyZ2V0 IGhhdmluZyBubyBsb2NhbCBjb3B5Cm9mIHRoZSBoaXN0b3J5IGZpbGUgZm9yIGl0cyBvd24g Y3VycmVudCBUTEkuIFRoaXMgY291bGQgaGFwcGVuIGlmLCAgZm9yCmV4YW1wbGUsIGEgc3Rh bmRieSB0aGF0IHN0YXJ0ZWQgc3RyZWFtaW5nIGEgdGltZWxpbmUgaXQgbmV2ZXIgaXRzZWxm CnN3aXRjaGVkIHRvLCBoZW5jZSBoYWQgbm8gcmVhc29uIHRvIHdyaXRlIG9yIGZldGNoIGEg Y29weSBvZiB0aGF0IGZpbGUuClRoaXMgYmVoYXZpb3VyIGlzIHJldGFpbmVkLgoKVGVzdHMg aW4gdC8wMDVfc2FtZV90aW1lbGluZS5wbCBjb3ZlciB0aGVzZSBwYXRocy4KClRoZSBmaXJz dCBjb3ZlcnMgdGhlIHNhbWUtVExJIHNob3J0Y3V0OiB0d28gc3RhbmRieXMgaW5kZXBlbmRl bnRseQpwcm9tb3RlIHRvIFRMSTIgYW5kIFRMSTInLCBlYWNoIHdpdGggYSBkaXN0aW5jdCBV VUlELgoKVGhlIHNlY29uZCBjb3ZlcnMgdGhlIGFuY2VzdG9yIHNlYXJjaDogdGhlIHRhcmdl dCBnb2VzIHRocm91Z2ggVExJMSAtPgpUTEkyIC0+IFRMSTMgd2hpbGUgdGhlIHNvdXJjZSBp bmRlcGVuZGVudGx5IHByb21vdGVkIHNvIHRoYXQgaXQgaGFzIGEKdGltZWxpbmUgd2l0aCBU TEkxIC0+IFRMSTInIC0+IFRMSTMnLiBUaGUgdGVzdCBlbnN1cmVzIHRoYXQKZmluZENvbW1v bkFuY2VzdG9yVGltZWxpbmUgYmFja3MgdXAgdG8gVExJMSBhcyB0aGUgdHJ1ZSBjb21tb24g YW5jZXN0b3IKcmF0aGVyIHRoYW4gYWNjZXB0aW5nIHRoZSBudW1lcmljYWxseSBtYXRjaGlu ZyBUTEkyIGVudHJ5LgoKVGhlIHRoaXJkIGNvdmVycyB0aGUgbWlzc2luZy1oaXN0b3J5LWZp bGUgZmFsbGJhY2s6IHR3byBzdGFuZGJ5cwppbmRlcGVuZGVudGx5IHByb21vdGUgdG8gVExJ MiwgdGhlIHRhcmdldCdzIG93biBUTEkyIGhpc3RvcnkgZmlsZSBpcwp0aGVuIHJlbW92ZWQs IGFuZCBwZ19yZXdpbmQgaXMgY2hlY2tlZCB0byBubyBsb25nZXIgYWJvcnQgYmVjYXVzZSBv ZiBpdC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jICAgIHwg IDg0ICsrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgIHwg IDE1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC91dWlkLmMgICAgICAgICAgICAgfCAgMTUg Ky0KIHNyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jICAgICAgICAgICAgfCAxNTkgKysr KysrKy0KIHNyYy9iaW4vcGdfcmV3aW5kL3QvMDA1X3NhbWVfdGltZWxpbmUucGwgfCA0NTkg KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfcmV3aW5kL3RpbWVsaW5lLmMg ICAgICAgICAgICAgfCAgNTAgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGltZWxpbmUuaCAg ICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5o ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3V1aWQuaCAgICAgICAgICAgICAg ICAgfCAgMTAgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNzYyIGluc2VydGlvbnMoKyksIDM2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3Rp bWVsaW5lLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jCmluZGV4 IDY4ZTVmNjkyZDI2Li5kZWU1NzljMDM5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdGltZWxpbmUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS90aW1lbGluZS5jCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAj aW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIK KyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5o IgogCiAvKgogICogQ29waWVzIGFsbCB0aW1lbGluZSBoaXN0b3J5IGZpbGVzIHdpdGggaWQn cyBiZXR3ZWVuICdiZWdpbicgYW5kICdlbmQnCkBAIC0xMTAsOCArMTEyLDEyIEBAIHJlYWRU aW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCB0YXJnZXRUTEkpCiAJCQllcmVwb3J0KEZBVEFM LAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygiY291 bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKLQkJLyogTm90IHRoZXJl LCBzbyBhc3N1bWUgbm8gcGFyZW50cyAqLwotCQllbnRyeSA9IHBhbGxvY19vYmplY3QoVGlt ZUxpbmVIaXN0b3J5RW50cnkpOworCisJCS8qCisJCSAqIE5vdCB0aGVyZSwgc28gYXNzdW1l IG5vIHBhcmVudHMuIFdlIHVzZSBwYWxsb2MwX29iamVjdCB0byBlbnN1cmUKKwkJICogdGhh dCB0bHV1aWQgaXMgYWxsLXplcm8uCisJCSAqLworCQllbnRyeSA9IHBhbGxvYzBfb2JqZWN0 KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKIAkJZW50cnktPnRsaSA9IHRhcmdldFRMSTsKIAkJ ZW50cnktPmJlZ2luID0gZW50cnktPmVuZCA9IEludmFsaWRYTG9nUmVjUHRyOwogCQlyZXR1 cm4gbGlzdF9tYWtlMShlbnRyeSk7CkBAIC0xMjUsNiArMTMxLDcgQEAgcmVhZFRpbWVMaW5l SGlzdG9yeShUaW1lTGluZUlEIHRhcmdldFRMSSkKIAlwcmV2ZW5kID0gSW52YWxpZFhMb2dS ZWNQdHI7CiAJZm9yICg7OykKIAl7CisJCWNoYXIJCXV1aWRfc3RyW1VVSURfU1RSX0xFTiAr IDFdID0gezB9OwogCQljaGFyCQlmbGluZVtNQVhQR1BBVEhdOwogCQljaGFyCSAgICpyZXM7 CiAJCWNoYXIJICAgKnB0cjsKQEAgLTE1NSw3ICsxNjIsOCBAQCByZWFkVGltZUxpbmVIaXN0 b3J5KFRpbWVMaW5lSUQgdGFyZ2V0VExJKQogCQlpZiAoKnB0ciA9PSAnXDAnIHx8ICpwdHIg PT0gJyMnKQogCQkJY29udGludWU7CiAKLQkJbmZpZWxkcyA9IHNzY2FuZihmbGluZSwgIiV1 XHQlWC8lMDhYIiwgJnRsaSwgJnN3aXRjaHBvaW50X2hpLCAmc3dpdGNocG9pbnRfbG8pOwor CQluZmllbGRzID0KKwkJCXNzY2FuZihmbGluZSwgIiV1XHQlWC8lMDhYXHQlMzZzIiwgJnRs aSwgJnN3aXRjaHBvaW50X2hpLCAmc3dpdGNocG9pbnRfbG8sIHV1aWRfc3RyKTsKIAogCQlp ZiAobmZpZWxkcyA8IDEpCiAJCXsKQEAgLTE2NCw3ICsxNzIsNyBAQCByZWFkVGltZUxpbmVI aXN0b3J5KFRpbWVMaW5lSUQgdGFyZ2V0VExJKQogCQkJCQkoZXJybXNnKCJzeW50YXggZXJy b3IgaW4gaGlzdG9yeSBmaWxlOiAlcyIsIGZsaW5lKSwKIAkJCQkJIGVycmhpbnQoIkV4cGVj dGVkIGEgbnVtZXJpYyB0aW1lbGluZSBJRC4iKSkpOwogCQl9Ci0JCWlmIChuZmllbGRzICE9 IDMpCisJCWlmIChuZmllbGRzIDwgMykKIAkJCWVyZXBvcnQoRkFUQUwsCiAJCQkJCShlcnJt c2coInN5bnRheCBlcnJvciBpbiBoaXN0b3J5IGZpbGU6ICVzIiwgZmxpbmUpLAogCQkJCQkg ZXJyaGludCgiRXhwZWN0ZWQgYSB3cml0ZS1haGVhZCBsb2cgc3dpdGNocG9pbnQgbG9jYXRp b24uIikpKTsKQEAgLTE3NiwxMiArMTg0LDUwIEBAIHJlYWRUaW1lTGluZUhpc3RvcnkoVGlt ZUxpbmVJRCB0YXJnZXRUTEkpCiAKIAkJbGFzdHRsaSA9IHRsaTsKIAotCQllbnRyeSA9IHBh bGxvY19vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOworCQkvKgorCQkgKiBXZSB1c2Ug cGFsbG9jMF9vYmplY3QgdG8gZW5zdXJlIHRoYXQgdGx1dWlkIGlzIGFsbC16ZXJvLCB3aGlj aCBpcworCQkgKiBpbXBvcnRhbnQgZm9yIHBnX3Jld2luZCB0byBkZXRlY3Qgd2hldGhlciB0 aGUgaGlzdG9yeSBmaWxlIGlzCisJCSAqIG1pc3Npbmcgb3Igbm90LgorCQkgKi8KKwkJZW50 cnkgPSBwYWxsb2MwX29iamVjdChUaW1lTGluZUhpc3RvcnlFbnRyeSk7CiAJCWVudHJ5LT50 bGkgPSB0bGk7CiAJCWVudHJ5LT5iZWdpbiA9IHByZXZlbmQ7CiAJCWVudHJ5LT5lbmQgPSAo KHVpbnQ2NCkgKHN3aXRjaHBvaW50X2hpKSkgPDwgMzIgfCAodWludDY0KSBzd2l0Y2hwb2lu dF9sbzsKIAkJcHJldmVuZCA9IGVudHJ5LT5lbmQ7CiAKKwkJLyoKKwkJICogUGFyc2UgdGhl IG9wdGlvbmFsIFVVSUQgZmllbGQuIE9sZCBoaXN0b3J5IGZpbGVzIGhhdmUgdGhlIHJlYXNv bgorCQkgKiBzdHJpbmcgaW4gZmllbGQgNC4gSXQgaXMgaW4gdGhlb3J5IHBvc3NpYmxlIHRo YXQgdGhlIHJlYXNvbiBzdHJpbmcKKwkJICogc3RhcnRzIHdpdGggYSBVVUlELCBidXQgdGhl IGN1cnJlbnQgdXNhZ2UgZG8gbm90IHN0b3JlIGEgVVVJRC4gVGhpcworCQkgKiBhbGxvd3Mg dXMgdG8gc3VwcG9ydCBib3RoIG9sZCBhbmQgbmV3IGZvcm1hdHMgb2YgaGlzdG9yeSBmaWxl cworCQkgKiB3aXRob3V0IGJyZWFraW5nIGNvbXBhdGliaWxpdHkgYnkgY2hlY2tpbmcgaWYg dGhlIGZpZWxkIGNvbnRhaW5zIGEKKwkJICogdmFsaWQgVVVJRC4KKwkJICovCisJCWlmIChu ZmllbGRzID09IDQgJiYgc3RybGVuKHV1aWRfc3RyKSA9PSBVVUlEX1NUUl9MRU4pCisJCXsK KwkJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0Owor CisJCQlQR19UUlkoKTsKKwkJCXsKKwkJCQlEYXR1bQkJZGF0dW0gPSBEaXJlY3RGdW5jdGlv bkNhbGwxKHV1aWRfaW4sIENTdHJpbmdHZXREYXR1bSh1dWlkX3N0cikpOworCisJCQkJbWVt Y3B5KCZlbnRyeS0+dGx1dWlkLCBEYXR1bUdldFVVSURQKGRhdHVtKSwgc2l6ZW9mKHBnX3V1 aWRfdCkpOworCQkJfQorCQkJUEdfQ0FUQ0goKTsKKwkJCXsKKwkJCQlFcnJvckRhdGEgICpl ZGF0YTsKKworCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJCQll ZGF0YSA9IENvcHlFcnJvckRhdGEoKTsKKwkJCQlGbHVzaEVycm9yU3RhdGUoKTsKKworCQkJ CWVyZXBvcnQoRkFUQUwsCisJCQkJCQllcnJtc2coImludmFsaWQgVVVJRCBpbiBoaXN0b3J5 IGZpbGUgXCIlc1wiIiwgcGF0aCksCisJCQkJCQllcnJkZXRhaWwoIiVzIiwgZWRhdGEtPm1l c3NhZ2UpKTsKKwkJCX0KKwkJCVBHX0VORF9UUlkoKTsKKwkJfQorCiAJCS8qIEJ1aWxkIGxp c3Qgd2l0aCBuZXdlc3QgaXRlbSBmaXJzdCAqLwogCQlyZXN1bHQgPSBsY29ucyhlbnRyeSwg cmVzdWx0KTsKIApAQCAtMTk3LDkgKzI0MywxMSBAQCByZWFkVGltZUxpbmVIaXN0b3J5KFRp bWVMaW5lSUQgdGFyZ2V0VExJKQogCiAJLyoKIAkgKiBDcmVhdGUgb25lIG1vcmUgZW50cnkg Zm9yIHRoZSAidGlwIiBvZiB0aGUgdGltZWxpbmUsIHdoaWNoIGhhcyBubyBlbnRyeQotCSAq IGluIHRoZSBoaXN0b3J5IGZpbGUuCisJICogaW4gdGhlIGhpc3RvcnkgZmlsZS4gV2UgdXNl IHBhbGxvYzBfb2JqZWN0IHRvIGVuc3VyZSB0aGF0IHRsdXVpZCBpcworCSAqIGFsbC16ZXJv LCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHBnX3Jld2luZCB0byBkZXRlY3Qgd2hldGhlciB0 aGUKKwkgKiBoaXN0b3J5IGZpbGUgaXMgbWlzc2luZyBvciBub3QuCiAJICovCi0JZW50cnkg PSBwYWxsb2Nfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKKwllbnRyeSA9IHBhbGxv YzBfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKIAllbnRyeS0+dGxpID0gdGFyZ2V0 VExJOwogCWVudHJ5LT5iZWdpbiA9IHByZXZlbmQ7CiAJZW50cnktPmVuZCA9IEludmFsaWRY TG9nUmVjUHRyOwpAQCAtMjk0LDIxICszNDIsMzMgQEAgZmluZE5ld2VzdFRpbWVMaW5lKFRp bWVMaW5lSUQgc3RhcnRUTEkpCiAgKgogICoJbmV3VExJOiBJRCBvZiB0aGUgbmV3IHRpbWVs aW5lCiAgKglwYXJlbnRUTEk6IElEIG9mIGl0cyBpbW1lZGlhdGUgcGFyZW50CisgKgluZXdU TFVVSUQ6IFVVSUQgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhpcyBwcm9tb3Rpb24gaW5zdGFu Y2UKICAqCXN3aXRjaHBvaW50OiBXQUwgbG9jYXRpb24gd2hlcmUgdGhlIHN5c3RlbSBzd2l0 Y2hlZCB0byB0aGUgbmV3IHRpbWVsaW5lCiAgKglyZWFzb246IGh1bWFuLXJlYWRhYmxlIGV4 cGxhbmF0aW9uIG9mIHdoeSB0aGUgdGltZWxpbmUgd2FzIHN3aXRjaGVkCiAgKgotICogQ3Vy cmVudGx5IHRoaXMgaXMgb25seSB1c2VkIGF0IHRoZSBlbmQgcmVjb3ZlcnksIGFuZCBzbyB0 aGVyZSBhcmUgbm8gbG9ja2luZworICogVGhlIG91dHB1dCBmaWxlIGlzIG5hbWVkIDxuZXdU TEk+Lmhpc3RvcnkgKGUuZy4gMDAwMDAwMDMuaGlzdG9yeSkuICBJZiB0d28KKyAqIHNlcnZl cnMgaW5kZXBlbmRlbnRseSBwcm9tb3RlIHRvIHRoZSBzYW1lIHRpbWVsaW5lIElELCB0aGVp ciBoaXN0b3J5IGZpbGVzCisgKiBzaGFyZSB0aGUgc2FtZSBuYW1lLiBJbiBhIHNoYXJlZCBX QUwgYXJjaGl2ZSB0aGUgc2Vjb25kIGZpbGUgdG8gYXJyaXZlCisgKiBzaWxlbnRseSBvdmVy d3JpdGVzIHRoZSBmaXJzdC4gIFRoZSBuZXdUTFVVSUQgd3JpdHRlbiBpbnRvIHRoZSBmaWxl IGNvbnRlbnQKKyAqIGxldHMgcGdfcmV3aW5kIGRldGVjdCB0aGlzIGNvbGxpc2lvbjogaXQg ZmV0Y2hlcyBlYWNoIHNlcnZlcidzIGhpc3RvcnkgZmlsZQorICogZGlyZWN0bHkgZnJvbSB0 aGF0IHNlcnZlciwgY29tcGFyZXMgdGhlIFVVSURzIGZvciBldmVyeSBzaGFyZWQgVExJLCBh bmQKKyAqIHRyZWF0cyBhIFVVSUQgbWlzbWF0Y2ggYXMgZXZpZGVuY2Ugb2YgaW5kZXBlbmRl bnQgcHJvbW90aW9uIGV2ZW4gd2hlbiB0aGUKKyAqIFRMSSBudW1iZXJzIGFncmVlLgorICoK KyAqIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCBhdCBlbmQgb2YgcmVjb3ZlcnksIGFu ZCBzbyB0aGVyZSBhcmUgbm8gbG9ja2luZwogICogY29uc2lkZXJhdGlvbnMuICBCdXQgd2Ug c2hvdWxkIGJlIGp1c3QgYXMgdGVuc2UgYXMgWExvZ0ZpbGVJbml0IHRvIGF2b2lkCiAgKiBl bXBsYWNpbmcgYSBib2d1cyBmaWxlLgogICovCiB2b2lkCiB3cml0ZVRpbWVMaW5lSGlzdG9y eShUaW1lTGluZUlEIG5ld1RMSSwgVGltZUxpbmVJRCBwYXJlbnRUTEksCisJCQkJCSBjb25z dCBwZ191dWlkX3QgKm5ld1RMVVVJRCwKIAkJCQkJIFhMb2dSZWNQdHIgc3dpdGNocG9pbnQs IGNoYXIgKnJlYXNvbikKIHsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJY2hhcgkJdG1w cGF0aFtNQVhQR1BBVEhdOwogCWNoYXIJCWhpc3RmbmFtZVtNQVhGTkFNRUxFTl07CiAJY2hh cgkJYnVmZmVyW0JMQ0tTWl07CisJY2hhcgkgICAqdXVpZF9zdHI7CiAJaW50CQkJc3JjZmQ7 CiAJaW50CQkJZmQ7CiAJaW50CQkJbmJ5dGVzOwpAQCAtMzk4LDEzICs0NTgsMTkgQEAgd3Jp dGVUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCBuZXdUTEksIFRpbWVMaW5lSUQgcGFyZW50 VExJLAogCSAqCiAJICogSWYgd2UgZGlkIGhhdmUgYSBwYXJlbnQgZmlsZSwgaW5zZXJ0IGFu IGV4dHJhIG5ld2xpbmUganVzdCBpbiBjYXNlIHRoZQogCSAqIHBhcmVudCBmaWxlIGZhaWxl ZCB0byBlbmQgd2l0aCBvbmUuCisJICoKKwkgKiBGb3JtYXQ6IDxwYXJlbnRUTEk+XHQ8c3dp dGNocG9pbnQ+XHQ8VGhpc1RpbWVMaW5lVVVJRD5cdDxyZWFzb24+XG4KIAkgKi8KKwl1dWlk X3N0ciA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKHV1aWRfb3V0LCBV VUlEUEdldERhdHVtKG5ld1RMVVVJRCkpKTsKKwogCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9m KGJ1ZmZlciksCi0JCQkgIiVzJXVcdCVYLyUwOFhcdCVzXG4iLAorCQkJICIlcyV1XHQlWC8l MDhYXHQlc1x0JXNcbiIsCiAJCQkgKHNyY2ZkIDwgMCkgPyAiIiA6ICJcbiIsCiAJCQkgcGFy ZW50VExJLAogCQkJIExTTl9GT1JNQVRfQVJHUyhzd2l0Y2hwb2ludCksCisJCQkgdXVpZF9z dHIsCiAJCQkgcmVhc29uKTsKKwlwZnJlZSh1dWlkX3N0cik7CiAKIAluYnl0ZXMgPSBzdHJs ZW4oYnVmZmVyKTsKIAllcnJubyA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK aW5kZXggZDY5ZDAzYjJlZjMuLjMxNzZiNzRjMDI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0 ZW1zLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3Vj X2hvb2tzLmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5oIgogI2luY2x1ZGUgInV0aWxzL2d1 Y190YWJsZXMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNs dWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKQEAgLTYzNzcsNiArNjM3OCw5IEBAIFN0 YXJ0dXBYTE9HKHZvaWQpCiAJbmV3VExJID0gZW5kT2ZSZWNvdmVyeUluZm8tPmxhc3RSZWNU TEk7CiAJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKIAl7CisJCXN0cnVjdCB0aW1l dmFsIHR2OworCQlwZ191dWlkX3QJdXVpZF9idWY7CisKIAkJbmV3VExJID0gZmluZE5ld2Vz dFRpbWVMaW5lKHJlY292ZXJ5VGFyZ2V0VExJKSArIDE7CiAJCWVyZXBvcnQoTE9HLAogCQkJ CShlcnJtc2coInNlbGVjdGVkIG5ldyB0aW1lbGluZSBJRDogJXUiLCBuZXdUTEkpKSk7CkBA IC02NDA3LDggKzY0MTEsMTkgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICogdG8gdGhlIG5l dyB0aW1lbGluZSwgYW5kIHdpbGwgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIG5ldyB0aW1lbGlu ZS4KIAkJICogVG8gbWluaW1pemUgdGhlIHdpbmRvdyBmb3IgdGhhdCwgdHJ5IHRvIGRvIGFz IGxpdHRsZSBhcyBwb3NzaWJsZQogCQkgKiBiZXR3ZWVuIGhlcmUgYW5kIHdyaXRpbmcgdGhl IGVuZC1vZi1yZWNvdmVyeSByZWNvcmQuCisJCSAqCisJCSAqIEdlbmVyYXRlIGEgVVVJRHY3 IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIHByb21vdGlvbi4gIFRoZQorCQkgKiBz YW1lIFVVSUQgaXMgd3JpdHRlbiBpbnRvIHRoZSBoaXN0b3J5IGZpbGUgc28gdGhhdCBwZ19y ZXdpbmQgY2FuCisJCSAqIGRpc3Rpbmd1aXNoIHR3byBzZXJ2ZXJzIHRoYXQgaW5kZXBlbmRl bnRseSBwcm9tb3RlZCB0byB0aGUgc2FtZQorCQkgKiB0aW1lbGluZSBJRC4gIFVzZSBnZXR0 aW1lb2ZkYXkoKSBzaW5jZSB3ZSBhcmUgbm90IG9uIGEgaG90IHBhdGg7CisJCSAqIGdlbmVy YXRlX3V1aWR2NyB3YW50cyBtaWxsaXNlY29uZHMgYW5kIHdlIHBhc3MgMCBmb3Igc3ViLW1z IHNpbmNlCisJCSAqIHRoZSByYW5kb20gYml0cyBhbHJlYWR5IGRpc3Rpbmd1aXNoIFVVSURz IGdlbmVyYXRlZCB3aXRoaW4gdGhlIHNhbWUKKwkJICogbWlsbGlzZWNvbmQuCiAJCSAqLwor CQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwkJZ2VuZXJhdGVfdXVpZHY3X3IoJnV1aWRf YnVmLCB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDAsIDApOwogCQl3cml0 ZVRpbWVMaW5lSGlzdG9yeShuZXdUTEksIHJlY292ZXJ5VGFyZ2V0VExJLAorCQkJCQkJCSAm dXVpZF9idWYsCiAJCQkJCQkJIEVuZE9mTG9nLCBlbmRPZlJlY292ZXJ5SW5mby0+cmVjb3Zl cnlTdG9wUmVhc29uKTsKIAogCQllcmVwb3J0KExPRywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC91dWlkLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdXVpZC5jCmlu ZGV4IDZlZTM3NTJhYzc4Li5mMWRjMDE5NmNkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3V1aWQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdXVpZC5jCkBA IC03Miw3ICs3Miw3IEBAIHN0YXRpYyBib29sIHV1aWRfYWJicmV2X2Fib3J0KGludCBtZW10 dXBjb3VudCwgU29ydFN1cHBvcnQgc3N1cCk7CiBzdGF0aWMgRGF0dW0gdXVpZF9hYmJyZXZf Y29udmVydChEYXR1bSBvcmlnaW5hbCwgU29ydFN1cHBvcnQgc3N1cCk7CiBzdGF0aWMgaW5s aW5lIHZvaWQgdXVpZF9zZXRfdmVyc2lvbihwZ191dWlkX3QgKnV1aWQsIHVuc2lnbmVkIGNo YXIgdmVyc2lvbik7CiBzdGF0aWMgaW5saW5lIGludDY0IGdldF9yZWFsX3RpbWVfbnNfYXNj ZW5kaW5nKHZvaWQpOwotc3RhdGljIHBnX3V1aWRfdCAqZ2VuZXJhdGVfdXVpZHY3KHVpbnQ2 NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKTsKK3BnX3V1aWRfdCAgKmdlbmVyYXRlX3V1 aWR2Nyh1aW50NjQgdW5peF90c19tcywgdWludDMyIHN1Yl9tcyk7CiAKIERhdHVtCiB1dWlk X2luKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC01ODEsNiArNTgxLDE0IEBAIGdldF9yZWFsX3Rp bWVfbnNfYXNjZW5kaW5nKHZvaWQpCiAJcmV0dXJuIG5zOwogfQogCitwZ191dWlkX3QgKgor Z2VuZXJhdGVfdXVpZHY3KHVpbnQ2NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKQorewor CXBnX3V1aWRfdCAgKnV1aWQgPSBwYWxsb2MoVVVJRF9MRU4pOworCisJcmV0dXJuIGdlbmVy YXRlX3V1aWR2N19yKHV1aWQsIHVuaXhfdHNfbXMsIHN1Yl9tcyk7Cit9CisKIC8qCiAgKiBH ZW5lcmF0ZSBVVUlEIHZlcnNpb24gNyBwZXIgUkZDIDk1NjIsIHdpdGggdGhlIGdpdmVuIHRp bWVzdGFtcC4KICAqCkBAIC01OTcsMTAgKzYwNSw5IEBAIGdldF9yZWFsX3RpbWVfbnNfYXNj ZW5kaW5nKHZvaWQpCiAgKgogICogTkI6IGFsbCBudW1iZXJzIGhlcmUgYXJlIHVuc2lnbmVk LCB1bml4X3RzX21zIGNhbm5vdCBiZSBuZWdhdGl2ZSBwZXIgUkZDLgogICovCi1zdGF0aWMg cGdfdXVpZF90ICoKLWdlbmVyYXRlX3V1aWR2Nyh1aW50NjQgdW5peF90c19tcywgdWludDMy IHN1Yl9tcykKK3BnX3V1aWRfdCAqCitnZW5lcmF0ZV91dWlkdjdfcihwZ191dWlkX3QgKnV1 aWQsIHVpbnQ2NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKQogewotCXBnX3V1aWRfdCAg KnV1aWQgPSBwYWxsb2MoVVVJRF9MRU4pOwogCXVpbnQzMgkJaW5jcmVhc2VkX2Nsb2NrX3By ZWNpc2lvbjsKIAogCS8qIEZpbGwgaW4gdGltZSBwYXJ0ICovCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYyBiL3NyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2lu ZC5jCmluZGV4IDlkNzQ1ZDRiMjViLi4wNjljNWJiNWE5MCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3 aW5kLmMKQEAgLTMyLDYgKzMyLDE5IEBACiAjaW5jbHVkZSAicmV3aW5kX3NvdXJjZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgogCisvKgorICogVGltZWxpbmUgaGlzdG9y aWVzIGZvciBib3RoIGNsdXN0ZXJzLCBwb3B1bGF0ZWQgYnkgbWF0Y2hBbmRGZXRjaFRpbWVs aW5lcygpLgorICovCit0eXBlZGVmIHN0cnVjdCBUaW1lTGluZUhpc3Rvcmllc0RhdGEKK3sK KwlUaW1lTGluZUhpc3RvcnlFbnRyeSAqc291cmNlLAorCQkJICAgKnRhcmdldDsKKwlpbnQJ CQlzb3VyY2VOZW50cmllcywKKwkJCQl0YXJnZXROZW50cmllczsKK30JCQlUaW1lTGluZUhp c3Rvcmllc0RhdGE7CisKK3R5cGVkZWYgVGltZUxpbmVIaXN0b3JpZXNEYXRhICogVGltZUxp bmVIaXN0b3JpZXM7CisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1l KTsKIAogc3RhdGljIHZvaWQgcGVyZm9ybV9yZXdpbmQoZmlsZW1hcF90ICpmaWxlbWFwLCBy ZXdpbmRfc291cmNlICpzb3VyY2UsCkBAIC01Myw2ICs2Niw5IEBAIHN0YXRpYyB2b2lkIGZp bmRDb21tb25BbmNlc3RvclRpbWVsaW5lKFRpbWVMaW5lSGlzdG9yeUVudHJ5ICphX2hpc3Rv cnksCiAJCQkJCQkJCQkgICBUaW1lTGluZUhpc3RvcnlFbnRyeSAqYl9oaXN0b3J5LAogCQkJ CQkJCQkJICAgaW50IGJfbmVudHJpZXMsCiAJCQkJCQkJCQkgICBYTG9nUmVjUHRyICpyZWNw dHIsIGludCAqdGxpSW5kZXgpOworc3RhdGljIGlubGluZSBib29sIG1hdGNoaW5nVGltZWxp bmVVVUlEKFRpbWVMaW5lSGlzdG9yeUVudHJ5ICphLCBUaW1lTGluZUhpc3RvcnlFbnRyeSAq Yik7CitzdGF0aWMgYm9vbCBtYXRjaEFuZEZldGNoVGltZWxpbmVzKFRpbWVMaW5lSUQgc291 cmNlX3RsaSwgVGltZUxpbmVJRCB0YXJnZXRfdGxpLAorCQkJCQkJCQkgICBUaW1lTGluZUhp c3RvcmllcyB0aW1lbGluZUhpc3Rvcmllcyk7CiBzdGF0aWMgdm9pZCBlbnN1cmVDbGVhblNo dXRkb3duKGNvbnN0IGNoYXIgKmFyZ3YwKTsKIHN0YXRpYyB2b2lkIGRpc2Nvbm5lY3RfYXRl eGl0KHZvaWQpOwogCkBAIC0xNDEsNiArMTU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJaW50CQkJYzsKIAlYTG9nUmVjUHRyCWRpdmVyZ2VyZWM7CiAJaW50CQkJbGFz dGNvbW1vbnRsaUluZGV4OworCVRpbWVMaW5lSGlzdG9yaWVzRGF0YSB0aW1lbGluZUhpc3Rv cmllczsKIAlYTG9nUmVjUHRyCWNoa3B0cmVjOwogCVRpbWVMaW5lSUQJY2hrcHR0bGk7CiAJ WExvZ1JlY1B0cgljaGtwdHJlZG87CkBAIC0zNzIsMTAgKzM4OSwyMSBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkgKgogCSAqIElmIGJvdGggY2x1c3RlcnMgYXJlIGFscmVh ZHkgb24gdGhlIHNhbWUgdGltZWxpbmUsIHRoZXJlJ3Mgbm90aGluZyB0bwogCSAqIGRvLgor CSAqCisJICogVGhpcyBhbHNvIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiB0d28gc2VydmVycyBp bmRlcGVuZGVudGx5IHByb21vdGVkIHRvCisJICogdGhlIHNhbWUgdGltZWxpbmUgSUQ6IG9u ZSBjcmFzaGVkIGFmdGVyIHdyaXRpbmcgdGhlIGhpc3RvcnkgZmlsZSBidXQKKwkgKiBiZWZv cmUgaXRzIEVPUiBXQUwgcmVjb3JkIHdhcyBkaXN0cmlidXRlZCwgc28gYSBzZWNvbmQgc3Rh bmRieSBwcm9tb3RlZAorCSAqIGluZGVwZW5kZW50bHkuICBUaGUgaGlzdG9yeSBmaWxlcyBw cm9kdWNlZCBieSB0aG9zZSB0d28gcHJvbW90aW9ucworCSAqIGNhcnJ5IGRpZmZlcmVudCBV VUlEcy4KKwkgKgorCSAqIFdoZW4gdGhlIGNsdXN0ZXJzIGFyZSBvbiBkaWZmZXJlbnQgdGlt ZWxpbmVzIHdlIGxvY2F0ZSB0aGUgZm9yayBwb2ludAorCSAqIHZpYSBmaW5kQ29tbW9uQW5j ZXN0b3JUaW1lbGluZS4KIAkgKi8KLQlpZiAodGFyZ2V0X3RsaSA9PSBzb3VyY2VfdGxpKQor CWlmIChtYXRjaEFuZEZldGNoVGltZWxpbmVzKHNvdXJjZV90bGksIHRhcmdldF90bGksICZ0 aW1lbGluZUhpc3RvcmllcykpCiAJewogCQlwZ19sb2dfaW5mbygic291cmNlIGFuZCB0YXJn ZXQgY2x1c3RlciBhcmUgb24gdGhlIHNhbWUgdGltZWxpbmUiKTsKKwkJcGZyZWUodGltZWxp bmVIaXN0b3JpZXMuc291cmNlKTsKKwkJcGZyZWUodGltZWxpbmVIaXN0b3JpZXMudGFyZ2V0 KTsKIAkJcmV3aW5kX25lZWRlZCA9IGZhbHNlOwogCQl0YXJnZXRfd2FsX2VuZHJlYyA9IElu dmFsaWRYTG9nUmVjUHRyOwogCX0KQEAgLTM4OSw4ICs0MTcsMTAgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJCSAqIFJldHJpZXZlIHRpbWVsaW5lcyBmb3IgYm90aCBzb3Vy Y2UgYW5kIHRhcmdldCwgYW5kIGZpbmQgdGhlIHBvaW50CiAJCSAqIHdoZXJlIHRoZXkgZGl2 ZXJnZWQuCiAJCSAqLwotCQlzb3VyY2VIaXN0b3J5ID0gZ2V0VGltZWxpbmVIaXN0b3J5KHNv dXJjZV90bGksIHRydWUsICZzb3VyY2VOZW50cmllcyk7Ci0JCXRhcmdldEhpc3RvcnkgPSBn ZXRUaW1lbGluZUhpc3RvcnkodGFyZ2V0X3RsaSwgZmFsc2UsICZ0YXJnZXROZW50cmllcyk7 CisJCXRhcmdldEhpc3RvcnkgPSB0aW1lbGluZUhpc3Rvcmllcy50YXJnZXQ7CisJCXRhcmdl dE5lbnRyaWVzID0gdGltZWxpbmVIaXN0b3JpZXMudGFyZ2V0TmVudHJpZXM7CisJCXNvdXJj ZUhpc3RvcnkgPSB0aW1lbGluZUhpc3Rvcmllcy5zb3VyY2U7CisJCXNvdXJjZU5lbnRyaWVz ID0gdGltZWxpbmVIaXN0b3JpZXMuc291cmNlTmVudHJpZXM7CiAKIAkJZmluZENvbW1vbkFu Y2VzdG9yVGltZWxpbmUoc291cmNlSGlzdG9yeSwgc291cmNlTmVudHJpZXMsCiAJCQkJCQkJ CSAgIHRhcmdldEhpc3RvcnksIHRhcmdldE5lbnRyaWVzLApAQCAtODYwLDQwICs4OTAsNjkg QEAgTWluWExvZ1JlY1B0cihYTG9nUmVjUHRyIGEsIFhMb2dSZWNQdHIgYikKIAkJcmV0dXJu IE1pbihhLCBiKTsKIH0KIAorc3RhdGljIGJvb2wKK2ZpbGVfZXhpc3RzKGNvbnN0IGNoYXIg Km5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlBc3NlcnQobmFtZSAhPSBOVUxMKTsK KworCWlmIChzdGF0KG5hbWUsICZzdCkgPT0gMCkKKwkJcmV0dXJuICFTX0lTRElSKHN0LnN0 X21vZGUpOworCWVsc2UgaWYgKCEoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RE SVIgfHwgZXJybm8gPT0gRUFDQ0VTKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBzdGF0IGZp bGUgXCIlc1wiOiAlbSIsIG5hbWUpOworCisJcmV0dXJuIGZhbHNlOworCit9CisKIC8qCiAg KiBSZXRyaWV2ZSB0aW1lbGluZSBoaXN0b3J5IGZvciB0aGUgc291cmNlIG9yIHRhcmdldCBz eXN0ZW0uCiAgKi8KIHN0YXRpYyBUaW1lTGluZUhpc3RvcnlFbnRyeSAqCiBnZXRUaW1lbGlu ZUhpc3RvcnkoVGltZUxpbmVJRCB0bGksIGJvb2wgaXNfc291cmNlLCBpbnQgKm5lbnRyaWVz KQogewotCVRpbWVMaW5lSGlzdG9yeUVudHJ5ICpoaXN0b3J5OworCVRpbWVMaW5lSGlzdG9y eUVudHJ5ICpoaXN0b3J5ID0gTlVMTDsKIAogCS8qCiAJICogVGltZWxpbmUgMSBkb2VzIG5v dCBoYXZlIGEgaGlzdG9yeSBmaWxlLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrCiAJ ICogYW5kIGZha2UgYW4gZW50cnkgd2l0aCBpbmZpbml0ZSBzdGFydCBhbmQgZW5kIHBvc2l0 aW9ucy4KIAkgKi8KLQlpZiAodGxpID09IDEpCi0JewotCQloaXN0b3J5ID0gcGdfbWFsbG9j X29iamVjdChUaW1lTGluZUhpc3RvcnlFbnRyeSk7Ci0JCWhpc3RvcnktPnRsaSA9IHRsaTsK LQkJaGlzdG9yeS0+YmVnaW4gPSBoaXN0b3J5LT5lbmQgPSBJbnZhbGlkWExvZ1JlY1B0cjsK LQkJKm5lbnRyaWVzID0gMTsKLQl9Ci0JZWxzZQorCWlmICh0bGkgIT0gMSkKIAl7CiAJCWNo YXIJCXBhdGhbTUFYUEdQQVRIXTsKLQkJY2hhcgkgICAqaGlzdGZpbGU7CisJCWNoYXIJICAg Kmhpc3RmaWxlID0gTlVMTDsKIAogCQlUTEhpc3RvcnlGaWxlUGF0aChwYXRoLCB0bGkpOwog Ci0JCS8qIEdldCBoaXN0b3J5IGZpbGUgZnJvbSBhcHByb3ByaWF0ZSBzb3VyY2UgKi8KKwkJ LyogR2V0IGhpc3RvcnkgZmlsZSBmcm9tIGFwcHJvcHJpYXRlIHNvdXJjZSwgdG9sZXJhdGlu ZyBpdHMgYWJzZW5jZSAqLwogCQlpZiAoaXNfc291cmNlKQogCQkJaGlzdGZpbGUgPSBzb3Vy Y2UtPmZldGNoX2ZpbGUoc291cmNlLCBwYXRoLCBOVUxMKTsKIAkJZWxzZQotCQkJaGlzdGZp bGUgPSBzbHVycEZpbGUoZGF0YWRpcl90YXJnZXQsIHBhdGgsIE5VTEwpOworCQl7CisJCQlj aGFyCQlmdWxscGF0aFtNQVhQR1BBVEhdOworCisJCQlzbnByaW50ZihmdWxscGF0aCwgc2l6 ZW9mKGZ1bGxwYXRoKSwgIiVzLyVzIiwgZGF0YWRpcl90YXJnZXQsIHBhdGgpOworCQkJaWYg KGZpbGVfZXhpc3RzKGZ1bGxwYXRoKSkKKwkJCQloaXN0ZmlsZSA9IHNsdXJwRmlsZShkYXRh ZGlyX3RhcmdldCwgcGF0aCwgTlVMTCk7CisJCX0KKworCQlpZiAoaGlzdGZpbGUgIT0gTlVM TCkKKwkJeworCQkJaGlzdG9yeSA9IHJld2luZF9wYXJzZVRpbWVMaW5lSGlzdG9yeShoaXN0 ZmlsZSwgdGxpLCBuZW50cmllcyk7CisJCQlwZ19mcmVlKGhpc3RmaWxlKTsKKwkJfQorCX0K IAotCQloaXN0b3J5ID0gcmV3aW5kX3BhcnNlVGltZUxpbmVIaXN0b3J5KGhpc3RmaWxlLCB0 bGksIG5lbnRyaWVzKTsKLQkJcGdfZnJlZShoaXN0ZmlsZSk7CisJLyoKKwkgKiBJZiBubyBo aXN0b3J5IGZpbGUgZW50cnkgd2FzIGNyZWF0ZWQsIHdlIGNyZWF0ZSBhICJ6ZXJvIiBlbnRy eS4KKwkgKi8KKwlpZiAoaGlzdG9yeSA9PSBOVUxMKQorCXsKKwkJaGlzdG9yeSA9IHBnX21h bGxvYzBfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKKwkJaGlzdG9yeS0+dGxpID0g dGxpOworCQloaXN0b3J5LT5iZWdpbiA9IGhpc3RvcnktPmVuZCA9IEludmFsaWRYTG9nUmVj UHRyOworCQkqbmVudHJpZXMgPSAxOwogCX0KIAogCS8qIEluIGRlYnVnZ2luZyBtb2RlLCBw cmludCB3aGF0IHdlIHJlYWQgKi8KQEAgLTkyMCw2ICs5NzksNTYgQEAgZ2V0VGltZWxpbmVI aXN0b3J5KFRpbWVMaW5lSUQgdGxpLCBib29sIGlzX3NvdXJjZSwgaW50ICpuZW50cmllcykK IAlyZXR1cm4gaGlzdG9yeTsKIH0KIAorLyoKKyAqIFJldHVybiB0cnVlIGlmIHR3byBwZXIt ZW50cnkgcHJvbW90aW9uIFVVSURzIGFyZSBjb21wYXRpYmxlLgorICoKKyAqIEEgemVybyBV VUlEIG1lYW5zIHRoZSBoaXN0b3J5IGZpbGUgcHJlZGF0ZXMgdGhpcyBmaXggKG9yIHRoZSBl bnRyeSBpcworICogc3ludGhldGljKS4gIElmIGJvdGggc2lkZXMgYXJlIHplcm8gd2UgaGF2 ZSBubyBVVUlEIGluZm9ybWF0aW9uIGFuZCBmYWxsCisgKiBiYWNrIHRvIFRMSS1udW1iZXIt b25seSBtYXRjaGluZyAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZXJ2ZXJz KS4KKyAqIElmIG9uZSBzaWRlIGNhcnJpZXMgYSBVVUlEIGFuZCB0aGUgb3RoZXIgZG9lcyBu b3QsIHRoZXkgY2Fubm90IG9yaWdpbmF0ZQorICogZnJvbSB0aGUgc2FtZSBwcm9tb3Rpb24g YW5kIGFyZSB0cmVhdGVkIGFzIGluY29tcGF0aWJsZS4KKyAqLworc3RhdGljIGlubGluZSBi b29sCittYXRjaGluZ1RpbWVsaW5lVVVJRChUaW1lTGluZUhpc3RvcnlFbnRyeSAqYSwgVGlt ZUxpbmVIaXN0b3J5RW50cnkgKmIpCit7CisJc3RhdGljIGNvbnN0IHBnX3V1aWRfdCB6ZXJv ID0ge3swfX07CisKKwlpZiAobWVtY21wKCZhLT50bHV1aWQsICZ6ZXJvLCBVVUlEX0xFTikg PT0gMCAmJiBtZW1jbXAoJmItPnRsdXVpZCwgJnplcm8sIFVVSURfTEVOKSA9PSAwKQorCQly ZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbWVtY21wKCZhLT50bHV1aWQsICZiLT50bHV1aWQsIFVV SURfTEVOKSA9PSAwOworfQorCisvKgorICogRmV0Y2ggdGhlIHRpbWVsaW5lIGhpc3Rvcnkg Zm9yIGJvdGggY2x1c3RlcnMsIHN0b3JlIHRoZW0gaW4gdGxoLCBhbmQgcmV0dXJuCisgKiB0 cnVlIGlmIHRoZSBjbHVzdGVycyBhcmUgb24gdGhlIHNhbWUgdGltZWxpbmUgKG5vIHJld2lu ZCBuZWVkZWQpLgorICoKKyAqIHRsaCBpcyBhbHdheXMgZnVsbHkgcG9wdWxhdGVkIG9uIHJl dHVybiByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQsIHNvIHRoZQorICogY2FsbGVyIGNhbiBw YXNzIHRsaC0+c291cmNlIC8gdGxoLT50YXJnZXQgZGlyZWN0bHkgdG8KKyAqIGZpbmRDb21t b25BbmNlc3RvclRpbWVsaW5lKCkgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLgor ICoKKyAqIFRMSSAxIGFsd2F5cyByZXR1cm5zIHRydWU6IGl0IGlzIHRoZSBvcmlnaW5hbCB0 aW1lbGluZSBhbmQgaGFzIG5vIHByb21vdGlvbgorICogVVVJRC4gIEZvciBUTEkgPj0gMiwg dGhlIFVVSUQgaW4gZW50cnlbTmVudHJpZXMgLSAyXSBpZGVudGlmaWVzIHRoZQorICogcHJv bW90aW9uIHRoYXQgY3JlYXRlZCB0aGUgY3VycmVudCBUTEkuICBCb3RoLXplcm8gVVVJRHMg KG9sZCBoaXN0b3J5IGZpbGVzKQorICogYXJlIHRyZWF0ZWQgYXMgY29tcGF0aWJsZTsgemVy by12cy1ub256ZXJvIGlzIHRyZWF0ZWQgYXMgYSBtaXNtYXRjaCBiZWNhdXNlCisgKiBvbmUg c2lkZSBjYXJyaWVzIGEgcHJvbW90aW9uIFVVSUQgYW5kIHRoZXkgY2Fubm90IGJlIHRoZSBz YW1lIHByb21vdGlvbi4KKyAqLworc3RhdGljIGJvb2wKK21hdGNoQW5kRmV0Y2hUaW1lbGlu ZXMoVGltZUxpbmVJRCBzb3VyY2VfdGxpLCBUaW1lTGluZUlEIHRhcmdldF90bGksIFRpbWVM aW5lSGlzdG9yaWVzIHRsaCkKK3sKKwl0bGgtPnNvdXJjZSA9IGdldFRpbWVsaW5lSGlzdG9y eShzb3VyY2VfdGxpLCB0cnVlLCAmdGxoLT5zb3VyY2VOZW50cmllcyk7CisJdGxoLT50YXJn ZXQgPSBnZXRUaW1lbGluZUhpc3RvcnkodGFyZ2V0X3RsaSwgZmFsc2UsICZ0bGgtPnRhcmdl dE5lbnRyaWVzKTsKKworCWlmIChzb3VyY2VfdGxpICE9IHRhcmdldF90bGkpCisJCXJldHVy biBmYWxzZTsKKworCS8qIFRMSSAxIGhhcyBubyBwcm9tb3Rpb24gVVVJRDsgYWx3YXlzIHRy ZWF0IGFzIHRoZSBzYW1lIHRpbWVsaW5lLiAqLworCWlmICh0bGgtPnNvdXJjZU5lbnRyaWVz IDwgMiB8fCB0bGgtPnRhcmdldE5lbnRyaWVzIDwgMikKKwkJcmV0dXJuIHRydWU7CisKKwly ZXR1cm4gbWF0Y2hpbmdUaW1lbGluZVVVSUQoJnRsaC0+c291cmNlW3RsaC0+c291cmNlTmVu dHJpZXMgLSAyXSwKKwkJCQkJCQkJJnRsaC0+dGFyZ2V0W3RsaC0+dGFyZ2V0TmVudHJpZXMg LSAyXSk7Cit9CisKIC8qCiAgKiBEZXRlcm1pbmUgdGhlIFRMSSBvZiB0aGUgbGFzdCBjb21t b24gdGltZWxpbmUgaW4gdGhlIHRpbWVsaW5lIGhpc3Rvcnkgb2YKICAqIHR3byBjbHVzdGVy cy4gKnRsaUluZGV4IGlzIHNldCB0byB0aGUgaW5kZXggb2YgbGFzdCBjb21tb24gdGltZWxp bmUgaW4KQEAgLTk0MSwxMiArMTA1MCwyNiBAQCBmaW5kQ29tbW9uQW5jZXN0b3JUaW1lbGlu ZShUaW1lTGluZUhpc3RvcnlFbnRyeSAqYV9oaXN0b3J5LCBpbnQgYV9uZW50cmllcywKIAkg KiBkZXBlbmRpbmcgb24gdGhlIGhpc3RvcnkgZmlsZXMgdGhhdCBlYWNoIG5vZGUgaGFzIGZl dGNoZWQgaW4gcHJldmlvdXMKIAkgKiByZWNvdmVyeSBwcm9jZXNzZXMuIEhlbmNlIGNoZWNr IHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgbmV3IHRpbWVsaW5lCiAJICogYXMgd2VsbCBh bmQgbW92ZSBkb3duIGJ5IG9uZSBleHRyYSB0aW1lbGluZSBlbnRyeSBpZiB0aGV5IGRvIG5v dCBtYXRjaC4KKwkgKgorCSAqIFdlIGFsc28gY29tcGFyZSB0aW1lbGluZSBVVUlEcyB3aGVu IGJvdGggc2lkZXMgY2Fycnkgb25lLiAgVHdvIHNlcnZlcnMKKwkgKiB0aGF0IGluZGVwZW5k ZW50bHkgcHJvbW90ZWQgdG8gdGhlIHNhbWUgdGltZWxpbmUgSUQgcHJvZHVjZSBoaXN0b3J5 CisJICogZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIChlLmcuIDAwMDAwMDAzLmhpc3Rvcnkp OyBpbiBhIHNoYXJlZCBXQUwKKwkgKiBhcmNoaXZlIHRoZSBzZWNvbmQgZmlsZSBzaWxlbnRs eSBvdmVyd3JpdGVzIHRoZSBmaXJzdC4gIHBnX3Jld2luZAorCSAqIGZldGNoZXMgZWFjaCBz ZXJ2ZXIncyBoaXN0b3J5IGZpbGUgZGlyZWN0bHkgZnJvbSB0aGF0IHNlcnZlciwgc28gaXQK KwkgKiBzZWVzIGJvdGggVVVJRHMuCisJICoKKwkgKiBUaGUgdGltZWxpbmUgVVVJRCBzdG9y ZWQgaW4gaGlzdG9yeSBlbnRyeVtpXSBpcyB0aGUgVVVJRCBvZiB0aGUKKwkgKiBwcm9tb3Rp b24gdGhhdCBjcmVhdGVkIGVudHJ5W2krMV0sIGkuZS4gdGhlIFVVSUQgb2YgVExJIGVudHJ5 W2krMV0udGxpLgorCSAqIFNvIHRvIGNoZWNrIHdoZXRoZXIgZW50cnlbaV0gaXRzZWxmIHJl cHJlc2VudHMgdGhlIHNhbWUgdGltZWxpbmUgb24KKwkgKiBib3RoIHNpZGVzIHdlIGxvb2sg YXQgZW50cnlbaS0xXS50bHV1aWQgKGZvciBpID4gMCkuICBUTEkgMSAoaSA9PSAwKSBpcwor CSAqIGFsd2F5cyB0aGUgc2FtZTogaXQgaXMgdGhlIG9yaWdpbmFsIHRpbWVsaW5lIGFuZCBo YXMgbm8gcHJvbW90aW9uIFVVSUQuCiAJICovCiAJbiA9IE1pbihhX25lbnRyaWVzLCBiX25l bnRyaWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCXsKIAkJaWYgKGFfaGlzdG9y eVtpXS50bGkgIT0gYl9oaXN0b3J5W2ldLnRsaSB8fAotCQkJYV9oaXN0b3J5W2ldLmJlZ2lu ICE9IGJfaGlzdG9yeVtpXS5iZWdpbikKKwkJCWFfaGlzdG9yeVtpXS5iZWdpbiAhPSBiX2hp c3RvcnlbaV0uYmVnaW4gfHwKKwkJCShpID4gMCAmJiAhbWF0Y2hpbmdUaW1lbGluZVVVSUQo JmFfaGlzdG9yeVtpIC0gMV0sICZiX2hpc3RvcnlbaSAtIDFdKSkpCiAJCQlicmVhazsKIAl9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmV3aW5kL3QvMDA1X3NhbWVfdGltZWxpbmUu cGwgYi9zcmMvYmluL3BnX3Jld2luZC90LzAwNV9zYW1lX3RpbWVsaW5lLnBsCmluZGV4IDk1 YTQwYzNiMjcwLi5iMTc5N2Y3ODg4MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQv dC8wMDVfc2FtZV90aW1lbGluZS5wbAorKysgYi9zcmMvYmluL3BnX3Jld2luZC90LzAwNV9z YW1lX3RpbWVsaW5lLnBsCkBAIC03LDYgKzcsOCBAQAogIwogdXNlIHN0cmljdDsKIHVzZSB3 YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBGaWxlOjpDb3B5OwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2Ug VGVzdDo6TW9yZTsKIApAQCAtMjEsNCArMjMsNDYxIEBAIFJld2luZFRlc3Q6OmNyZWF0ZV9z dGFuZGJ5KCk7CiBSZXdpbmRUZXN0OjpydW5fcGdfcmV3aW5kKCdsb2NhbCcpOwogUmV3aW5k VGVzdDo6Y2xlYW5fcmV3aW5kX3Rlc3QoKTsKIAorIyBIZWxwZXIgZnVuY3Rpb24gdG8gcnVu IHBnX3Jld2luZCBpbiBsb2NhbCBtb2RlIHdpdGggdGhlIGdpdmVuIHNvdXJjZSBhbmQKKyMg dGFyZ2V0IG5vZGVzIGFuZCBleHRyYSBhcmd1bWVudHMuCisjCisjIFRoZSB0YXJnZXQgYW5k IHNvdXJjZSBub2RlcyBhcmUgc3RvcHBlZCBiZWZvcmUgdGhlIGNhbGwgYW5kIHRoZSB0YXJn ZXQgaXMKKyMgcmVzdGFydGVkIGFmdGVyd2FyZC4gIFRoZSB0YXJnZXQncyBwb3N0Z3Jlc3Fs LmNvbmYgaXMgY29waWVkIHRvIGEgdGVtcG9yYXJ5CisjIGxvY2F0aW9uIGFuZCBwYXNzZWQg dG8gcGdfcmV3aW5kIHdpdGggLS1jb25maWctZmlsZSwgc28gdGhhdCBwZ19yZXdpbmQgY2Fu CisjIHVwZGF0ZSB0aGUgdGFyZ2V0J3MgY29uZmlnIGZpbGUgaW4gcGxhY2Ugd2l0aG91dCB3 b3JyeWluZyBhYm91dCBmaWxlCisjIHBlcm1pc3Npb25zLiAgVGhlIHRlbXBvcmFyeSBjb25m aWcgZmlsZSBpcyBtb3ZlZCBiYWNrIHRvIHRoZSB0YXJnZXQncyBkYXRhCisjIGRpcmVjdG9y eSBhbmQgcGVybWlzc2lvbnMgZml4ZWQgYWZ0ZXIgcGdfcmV3aW5kIGZpbmlzaGVzLgorIwor IyBJZiB0aGUgbGFzdCBlbGVtZW50IG9mIEBleHRyYV9hcmdzIGlzIGEgY29kZXJlZiwgaXQg aXMgbm90IHBhc3NlZCB0bworIyBwZ19yZXdpbmQ6IGl0IGlzIHJ1biBhZnRlciBwZ19yZXdp bmQgZmluaXNoZXMgYnV0IGJlZm9yZSB0aGUgdGFyZ2V0IGlzCisjIHJlc3RhcnRlZCwgZS5n LiB0byB1bmRvIGEgdGVzdCdzIG93biB0YW1wZXJpbmcgd2l0aCB0aGUgdGFyZ2V0J3MgZGF0 YQorIyBkaXJlY3RvcnkgdGhhdCBwZ19yZXdpbmQgaXRzZWxmIGRvZXNuJ3QgbmVlZCB0byBi ZSBhd2FyZSBvZi4KK3N1YiByZXdpbmRfbm9kZQoreworCW15ICgkdGFyZ2V0LCAkc291cmNl LCAkbGFiZWwsICVvcHRzKSA9IEBfOworCW15IEBleHRyYV9hcmdzOworCisJJHNvdXJjZS0+ c3RvcDsKKwkkdGFyZ2V0LT5zdG9wOworCisJcHVzaCBAZXh0cmFfYXJncywgJy0tcmVzdG9y ZS10YXJnZXQtd2FsJyBpZiAkb3B0c3snLXJlc3RvcmV3YWwnfTsKKworCW15ICR0cGdkYXRh ID0gJHRhcmdldC0+ZGF0YV9kaXI7CisJbXkgJHRtcCA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjp0ZW1wZGlyOworCWNvcHkoIiR0cGdkYXRhL3Bvc3RncmVzcWwuY29uZiIsICIkdG1w L3RhcmdldC1wb3N0Z3Jlc3FsLmNvbmYudG1wIik7CisKKwljb21tYW5kX29rKAorCQlbCisJ CQkncGdfcmV3aW5kJywKKwkJCSctLWRlYnVnJywKKwkJCSctLXNvdXJjZS1wZ2RhdGEnID0+ ICRzb3VyY2UtPmRhdGFfZGlyLAorCQkJJy0tdGFyZ2V0LXBnZGF0YScgPT4gJHRhcmdldC0+ ZGF0YV9kaXIsCisJCQknLS1uby1zeW5jJywKKwkJCSctLWNvbmZpZy1maWxlJyA9PiAiJHRt cC90YXJnZXQtcG9zdGdyZXNxbC5jb25mLnRtcCIsCisJCQlAZXh0cmFfYXJncywKKwkJXSwK KwkJJGxhYmVsKTsKKworCW1vdmUoIiR0bXAvdGFyZ2V0LXBvc3RncmVzcWwuY29uZi50bXAi LCAiJHRwZ2RhdGEvcG9zdGdyZXNxbC5jb25mIik7CisJY2htb2QoJHRhcmdldC0+Z3JvdXBf YWNjZXNzKCkgPyAwNjQwIDogMDYwMCwgIiR0cGdkYXRhL3Bvc3RncmVzcWwuY29uZiIpCisJ ICBvciBCQUlMX09VVCgidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9ucyBmb3IgJHRwZ2RhdGEv cG9zdGdyZXNxbC5jb25mIik7CisKKwkkdGFyZ2V0LT5zdGFydCB1bmxlc3MgJG9wdHN7Jy1u b3Jlc3RhcnQnfTsKK30KKworIyBSZXdyaXRlIGEgbm9kZSdzIFRMSSBoaXN0b3J5IGZpbGUg aW4gdGhlIG9sZCAzLWZpZWxkIGZvcm1hdCAobm8gVVVJRCksIHNvCisjIHRoYXQgcGdfcmV3 aW5kIHNlZXMgYSB6ZXJvIFVVSUQgZm9yIHRoYXQgc2lkZSwgYXMgaWYgdGhlIG5vZGUgaGFk IGJlZW4KKyMgcHJvbW90ZWQgYnkgYSBzZXJ2ZXIgdGhhdCBwcmVkYXRlcyB0aGUgVVVJRCBm ZWF0dXJlLgorc3ViIHN0cmlwX3RsaV91dWlkCit7CisJbXkgKCRub2RlLCAkdGxpKSA9IEBf OworCW15ICRoaXN0ZmlsZSA9IHNwcmludGYoIiVzL3BnX3dhbC8lMDhYLmhpc3RvcnkiLCAk bm9kZS0+ZGF0YV9kaXIsICR0bGkpOworCW9wZW4obXkgJGZoLCAnPCcsICRoaXN0ZmlsZSkg b3IgZGllICJjYW5ub3Qgb3BlbiAkaGlzdGZpbGU6ICQhIjsKKwlteSBAbGluZXMgPSA8JGZo PjsKKwljbG9zZSAkZmg7CisJb3BlbigkZmgsICc+JywgJGhpc3RmaWxlKSBvciBkaWUgImNh bm5vdCB3cml0ZSAkaGlzdGZpbGU6ICQhIjsKKwlmb3IgbXkgJGxpbmUgKEBsaW5lcykKKwl7 CisJCWNob21wICRsaW5lOworCQlteSBAZiA9IHNwbGl0KC9cdC8sICRsaW5lLCA0KTsKKwkJ aWYgKEBmID09IDQpCisJCXsKKworCQkJIyBEcm9wIHRoZSBVVUlEIGZpZWxkIChpbmRleCAy KTsga2VlcCBwYXJlbnRUTEksIHN3aXRjaHBvaW50LCByZWFzb24uCisJCQlwcmludCAkZmgg am9pbigiXHQiLCAkZlswXSwgJGZbMV0sICRmWzNdKSAuICJcbiI7CisJCX0KKwkJZWxzZQor CQl7CisJCQlwcmludCAkZmggIiRsaW5lXG4iOworCQl9CisJfQorCWNsb3NlICRmaDsKK30K KworIyBSZW1vdmUgYSBub2RlJ3MgVExJIGhpc3RvcnkgZmlsZSBlbnRpcmVseSwgc2ltdWxh dGluZyBhIG5vZGUgdGhhdCBoYXMgbm8gbG9jYWwKKyMgcmVjb3JkIG9mIGl0cyBvd24gY3Vy cmVudC1UTEkgcHJvbW90aW9uLCBmb3IgZXhhbXBsZSwgYmVjYXVzZSBpdCBzdGFydGVkCisj IHN0cmVhbWluZyBhIHRpbWVsaW5lIGl0IG5ldmVyIGl0c2VsZiBzd2l0Y2hlZCB0by4gVGhp cyBtZWFucyB0aGF0IGl0IG5ldmVyIGhhZAorIyBhIHJlYXNvbiB0byB3cml0ZSAob3IgZmV0 Y2gpIGEgbG9jYWwgY29weSBvZiB0aGF0IGhpc3RvcnkgZmlsZS4gIFJldHVybnMgdGhlCisj IHJlbW92ZWQgZmlsZSdzIGNvbnRlbnQsIHNvIGl0IGNhbiBiZSByZXN0b3JlZCB3aXRoIHJl c3RvcmVfdGxpX2hpc3RvcnkoKS4KKyMKKyMgTm90ZSB0aGlzIHNpbXVsYXRpb24gaXMgaW1w ZXJmZWN0OiB1bmxpa2UgYSBub2RlIHRoYXQgbmV2ZXIgaGFkIHRoYXQgcmVhc29uLAorIyBv dXIgbm9kZSBnZW51aW5lbHkgZGlkIHByb21vdGUgYW5kIHNvIHN0aWxsIGhhcyB0aGUgZWFy bGllciBUTEkncyByZWFsIFdBTAorIyBzZWdtZW50cyBvbiBkaXNrLiBXaXRob3V0IHRoZSBo aXN0b3J5IGZpbGUgbGlua2luZyB0aGVtLCB0aGUgc2VydmVyIGl0c2VsZiBjYW4KKyMgbm8g bG9uZ2VyIG1ha2Ugc2Vuc2Ugb2YgaXRzIG93biBwZ193YWwgZGlyZWN0b3J5IGFuZCB3aWxs IGZhaWwgdG8gc3RhcnQgLS0KKyMgcmVzdG9yZV90bGlfaGlzdG9yeSgpIG11c3QgYmUgY2Fs bGVkIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBub2RlLgorc3ViIHJlbW92ZV90bGlfaGlzdG9y eQoreworCW15ICgkbm9kZSwgJHRsaSkgPSBAXzsKKwlteSAkaGlzdGZpbGUgPSBzcHJpbnRm KCIlcy9wZ193YWwvJTA4WC5oaXN0b3J5IiwgJG5vZGUtPmRhdGFfZGlyLCAkdGxpKTsKKwlv cGVuKG15ICRmaCwgJzwnLCAkaGlzdGZpbGUpIG9yIGRpZSAiY2Fubm90IG9wZW4gJGhpc3Rm aWxlOiAkISI7CisJbG9jYWwgJC87CisJbXkgJGNvbnRlbnQgPSA8JGZoPjsKKwljbG9zZSAk Zmg7CisJdW5saW5rKCRoaXN0ZmlsZSkgb3IgZGllICJjYW5ub3QgcmVtb3ZlICRoaXN0Zmls ZTogJCEiOworCXJldHVybiAkY29udGVudDsKK30KKworIyBSZXN0b3JlIGEgVExJIGhpc3Rv cnkgZmlsZSBwcmV2aW91c2x5IHJlbW92ZWQgYnkgcmVtb3ZlX3RsaV9oaXN0b3J5KCkuCitz dWIgcmVzdG9yZV90bGlfaGlzdG9yeQoreworCW15ICgkbm9kZSwgJHRsaSwgJGNvbnRlbnQp ID0gQF87CisJbXkgJGhpc3RmaWxlID0gc3ByaW50ZigiJXMvcGdfd2FsLyUwOFguaGlzdG9y eSIsICRub2RlLT5kYXRhX2RpciwgJHRsaSk7CisJb3BlbihteSAkZmgsICc+JywgJGhpc3Rm aWxlKSBvciBkaWUgImNhbm5vdCB3cml0ZSAkaGlzdGZpbGU6ICQhIjsKKwlwcmludCAkZmgg JGNvbnRlbnQ7CisJY2xvc2UgJGZoOworfQorCisjIEhlbHBlciBmdW5jdGlvbiB0byBjcmVh dGUgYW4gb3JpZ2luIG5vZGUgd2l0aCBhIHRlc3QgdGFibGUgYW5kIGEgcm93IGNvbnRhaW5p bmcKKyMgdGhlIGdpdmVuIGxhYmVsLiAgVGhlIG5vZGUgaXMgc3RhcnRlZCBhbmQgcmVhZHkg Zm9yIHVzZSBhcyBhIHNvdXJjZSBmb3IKKyMgc3RhbmRieXMuCitzdWIgc2V0dXBfb3JpZ2lu Cit7CisJbXkgKCRsYWJlbCkgPSBAXzsKKwlteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygkbGFiZWwpOworCSRub2RlLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gMSk7CisJJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAid2FsX2tl ZXBfc2l6ZSA9IDMyME1CXG4iKTsKKwkkbm9kZS0+c3RhcnQ7CisJJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRibCAodmFsIHRleHQpIik7CisJJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJyRsYWJl bCcpIik7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ0hFQ0tQT0lOVCcpOwor CXJldHVybiAkbm9kZTsKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIG11bHRp cGxlIHN0YW5kYnkgbm9kZXMgZnJvbSB0aGUgc2FtZSBvcmlnaW4gbm9kZS4KKyMgRWFjaCBz dGFuZGJ5IGdldHMgaXRzIG93biBiYWNrdXAgYW5kIGRhdGEgZGlyZWN0b3J5LCBzbyB0aGF0 IHRoZXkgd2lsbAorIyBnZW5lcmF0ZSBpbmRlcGVuZGVudCBVVUlEcyBvbiBwcm9tb3Rpb24g ZXZlbiB0aG91Z2ggdGhleSBzaGFyZSB0aGUgc2FtZQorIyB0aW1lbGluZSBoaXN0b3J5IHVw IHRvIHRoZSBwb2ludCBvZiBwcm9tb3Rpb24uCitzdWIgc2V0dXBfc3RhbmRieXNfZnJvbV9v cmlnaW4KK3sKKwlteSAoJG9yaWdpbiwgQG5hbWVzKSA9IEBfOworCW15IEBzdGFuZGJ5czsK Kwlmb3IgbXkgJG5hbWUgKEBuYW1lcykKKwl7CisJCW15ICRzdGFuZGJ5ID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRuYW1lKTsKKwkJJG9yaWdpbi0+YmFja3VwKCRzdGFu ZGJ5LT5uYW1lKTsKKwkJJHN0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG9yaWdpbiwgJHN0 YW5kYnktPm5hbWUsCisJCQloYXNfc3RyZWFtaW5nID0+IDEpOworCQkkc3RhbmRieS0+YXBw ZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJ3YWxfa2VlcF9zaXplID0gMzIwTUJcbiIp OworCQkkc3RhbmRieS0+c2V0X3N0YW5kYnlfbW9kZSgpOworCQkkc3RhbmRieS0+c3RhcnQ7 CisJCXB1c2ggQHN0YW5kYnlzLCAkc3RhbmRieTsKKwl9CisJcmV0dXJuIEBzdGFuZGJ5czsK K30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gd2FpdCBmb3IgbXVsdGlwbGUgc3RhbmRieSBu b2RlcyB0byBjYXRjaCB1cCB0byB0aGUgb3JpZ2luLgorc3ViIHN5bmNfc3RhbmRieXNfd2l0 aF9vcmlnaW4KK3sKKwlteSAoJG9yaWdpbiwgQHN0YW5kYnlzKSA9IEBfOworCSRvcmlnaW4t PndhaXRfZm9yX2NhdGNodXAoJF8pIGZvciBAc3RhbmRieXM7Cit9CisKKyMgSGVscGVyIGZ1 bmN0aW9uIHRvIGluc2VydCBhIHJvdyB3aXRoIHRoZSBnaXZlbiBsYWJlbCBpbnRvIGEgbm9k ZSdzIHRlc3QgdGFibGUuCitzdWIgd3JpdGVfcmVjb3JkCit7CisJbXkgKCRub2RlLCAkbGFi ZWwpID0gQF87CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoJyRsYWJlbCcpIik7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAnQ0hFQ0tQT0lOVCcpOworfQorCisjIFRlc3QgdGhhdCBwZ19yZXdpbmQgZGV0ZWN0cyBh bmQgaGFuZGxlcyB0d28gc3RhbmRieXMgdGhhdCBpbmRlcGVuZGVudGx5CisjIHByb21vdGVk IHRvIHRoZSBzYW1lIHRpbWVsaW5lIElELiAgQmVmb3JlIHRoZSBVVUlELWJhc2VkIGRpdmVy Z2VuY2UgY2hlY2ssCisjIHBnX3Jld2luZCdzIHNhbWUtVExJIHNob3J0Y3V0IHdvdWxkIGlu Y29ycmVjdGx5IHNraXAgdGhlIHJld2luZCBpbiB0aGlzCisjIGNhc2UsIGxlYXZpbmcgdGhl IHRhcmdldCdzIGRpdmVyZ2VkIFdBTCBpbnRhY3QuCisjCisjICAgb3JpZ2luIChUTEkgMSkK KyMgICAgICAgfAorIyAgICAgICArLS0tIG5vZGVfYSAoVExJIDEpIC0tcHJvbW90ZS0tPiBU TEkgMiwgVVVJRC1BICAodGFyZ2V0KQorIyAgICAgICB8CisjICAgICAgICstLS0gbm9kZV9i IChUTEkgMSkgLS1wcm9tb3RlLS0+IFRMSSAyLCBVVUlELUIgIChzb3VyY2UpCisjCisjIHBn X3Jld2luZCBtdXN0IGRldGVjdCB0aGUgVVVJRCBtaXNtYXRjaCBhbmQgcmV3aW5kIG5vZGVf YSB0byBtYXRjaCBub2RlX2IuCisKK215ICRub2RlX29yaWdpbiA9IHNldHVwX29yaWdpbign b3JpZ2luJyk7CisKKyMgQ3JlYXRlIG5vZGVfYSBhbmQgbm9kZV9iIGZyb20gc2VwYXJhdGUg YmFja3VwcyBvZiBvcmlnaW4gc28gdGhhdCBlYWNoCisjIGhhcyBpdHMgb3duIGRhdGEgZGly ZWN0b3J5IGFuZCB3aWxsIGdlbmVyYXRlIGFuIGluZGVwZW5kZW50IFVVSUQgb24gcHJvbW90 aW9uLgorbXkgKCRub2RlX2EsICRub2RlX2IpID0KKyAgc2V0dXBfc3RhbmRieXNfZnJvbV9v cmlnaW4oJG5vZGVfb3JpZ2luLCAnbm9kZV9hJywgJ25vZGVfYicpOworCisjIFdhaXQgZm9y IGJvdGggc3RhbmRieXMgdG8gY2F0Y2ggdXAgdG8gb3JpZ2luLCB0aGVuIHN0b3Agb3JpZ2lu LiAgQWZ0ZXIKKyMgdGhpcyBwb2ludCB0aGUgdHdvIHN0YW5kYnlzIGFyZSBpc29sYXRlZCBh bmQgd2lsbCBwcm9tb3RlIGluZGVwZW5kZW50bHkuCitzeW5jX3N0YW5kYnlzX3dpdGhfb3Jp Z2luKCRub2RlX29yaWdpbiwgJG5vZGVfYSwgJG5vZGVfYik7Ciskbm9kZV9vcmlnaW4tPnN0 b3A7CisKKyMgUHJvbW90ZSBib3RoIHN0YW5kYnlzLiAgRWFjaCBsYW5kcyBvbiBUTEkgMiBi dXQgZ2VuZXJhdGVzIGEgZGlzdGluY3QgVVVJRCwKKyMgc28gdGhlIHJlc3VsdGluZyBjbHVz dGVycyBhcmUgZGl2ZXJnZWQgZXZlbiB0aG91Z2ggdGhleSBzaGFyZSBhIHRpbWVsaW5lIElE LgorJG5vZGVfYS0+cHJvbW90ZTsKKyRub2RlX2ItPnByb21vdGU7CisKKyMgSW5zZXJ0IGEg ZGl2ZXJnZW50IHJvdyBvbiBlYWNoIHNvIHRoZSByZXdpbmQgaGFzIHZpc2libGUgd29yayB0 byBkby4KK3dyaXRlX3JlY29yZCgkbm9kZV9hLCAnaW4gQScpOword3JpdGVfcmVjb3JkKCRu b2RlX2IsICdpbiBCJyk7CisKK3Jld2luZF9ub2RlKCRub2RlX2EsICRub2RlX2IsCisJJ3Bn X3Jld2luZCBkZXRlY3RzIGluZGVwZW5kZW50IHNhbWUtVExJIHByb21vdGlvbnMnKTsKKwor bXkgJHJlc3VsdCA9CisgICRub2RlX2EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHZhbCBGUk9NIHRibCBPUkRFUiBCWSB2YWwiKTsKK2lzKCRyZXN1bHQsICJpbiBCXG5vcmln aW4iLAorCSdyZXdvdW5kIG5vZGUgaGFzIHNvdXJjZSBkYXRhLCBub3QgaXRzIG93biBkaXZl cmdlbnQgZGF0YScpOworCiskbm9kZV9hLT50ZWFyZG93bl9ub2RlOworJG5vZGVfYi0+dGVh cmRvd25fbm9kZTsKKyRub2RlX29yaWdpbi0+dGVhcmRvd25fbm9kZTsKKworIyBUZXN0IHRo YXQgcGdfcmV3aW5kIGNvcnJlY3RseSByZXdpbmRzIGFjcm9zcyBhIFRMSSBtaXNtYXRjaCBi dXJpZWQgaW4gYSBzaGFyZWQKKyMgcHJlZml4IG9mIHRoZSB0aW1lbGluZSBoaXN0b3J5LiAg VGhlIHRhcmdldCBoYXMgZ29uZSB0aHJvdWdoIHRocmVlIHRpbWVsaW5lcworIyAoVExJIDEg LT4gVExJIDIgLT4gVExJIDMpIHdoaWxlIHRoZSBzb3VyY2UgaW5kZXBlbmRlbnRseSBwcm9t b3RlZCBmcm9tIFRMSSAxCisjIHRvIHdoYXQgaXMgbnVtZXJpY2FsbHkgVExJIDIgYnV0IHdp dGggYSBkaWZmZXJlbnQgVVVJRCAoVExJIDInKS4gIFRoZSBkZWVwZXN0CisjIGNvbW1vbiBh bmNlc3RvciBpcyB0aGVyZWZvcmUgVExJIDEsIGFuZCBwZ19yZXdpbmQgbXVzdCByZXdpbmQg dGhlIHRhcmdldCBhbGwKKyMgdGhlIHdheSBiYWNrIHRvIHRoZSBlbmQgb2YgVExJIDEuCisj CisjICAgb3JpZ2luIChUTEkgMSkgLS0rLS0gbm9kZV94IC0tcHJvbW90ZS0tPiBUTEkgMiAt LSBub2RlX2EgLS1wcm9tb3RlLS0+IFRMSSAzCisjICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXQ6IFRMSSAxLT5UTEkgMi0+ VExJIDMpCisjICAgICAgICAgICAgICAgICAgICArLS0gbm9kZV9iIC0tcHJvbW90ZS0tPiBU TEkgMicKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz b3VyY2U6IFRMSSAxLT5UTEkgMicpCisjCisjIGZpbmRDb21tb25BbmNlc3RvclRpbWVsaW5l IHdhbGtzIGZvcndhcmQ6IFRMSSAxIGVudHJpZXMgbWF0Y2ggKFVVSUQ9MCBvbgorIyBib3Ro IHNpZGVzKSwgdGhlbiBUTEkgMiB2cyBUTEkgMicgbWF0Y2ggb24gdGxpIGFuZCBiZWdpbiBi dXQgZGlmZmVyIG9uCisjIFVVSUQsIHNpZ25hbGxpbmcgaW5kZXBlbmRlbnQgcHJvbW90aW9u cy4gIFRoZSBhbGdvcml0aG0gdGhlcmVmb3JlIGJhY2tzIHVwCisjIHRvIFRMSSAxIGFzIHRo ZSBjb21tb24gYW5jZXN0b3IgYW5kIHNldHMgdGhlIGRpdmVyZ2VuY2UgcG9pbnQgdG8gdGhl IGVuZAorIyBvZiBUTEkgMS4KKworbXkgJG5vZGVfb3JpZ2luMiA9IHNldHVwX29yaWdpbign b3JpZ2luMicpOworCisjIG5vZGVfeCBhbmQgbm9kZV9iMiBib3RoIHN0YXJ0IGZyb20gdGhl IHNhbWUgVExJIDEgYmFzZWxpbmUuCitteSAoJG5vZGVfeCwgJG5vZGVfYjIpID0KKyAgc2V0 dXBfc3RhbmRieXNfZnJvbV9vcmlnaW4oJG5vZGVfb3JpZ2luMiwgJ25vZGVfeCcsICdub2Rl X2IyJyk7CisKKyMgQm90aCBzdGFuZGJ5cyBtdXN0IGJlIGNhdWdodCB1cCB0byB0aGUgc2Ft ZSBMU04gYmVmb3JlIG9yaWdpbiBzdG9wcywgc28KKyMgdGhhdCBUTEkgMiBhbmQgVExJIDIn IGJvdGggYmVnaW4gYXQgdGhlIHNhbWUgV0FMIHBvc2l0aW9uLgorc3luY19zdGFuZGJ5c193 aXRoX29yaWdpbigkbm9kZV9vcmlnaW4yLCAkbm9kZV94LCAkbm9kZV9iMik7Ciskbm9kZV9v cmlnaW4yLT5zdG9wOworCisjIFByb21vdGUgbm9kZV94IHRvIFRMSSAyIChVVUlELVgpIGFu ZCBpbnNlcnQgYSByb3cuICBub2RlX2IyIGlzIHN0aWxsIG9uCisjIFRMSSAxIGFuZCBoYXMg bm90IHlldCBzZWVuIGFueSBUTEkgMiBXQUwuCiskbm9kZV94LT5wcm9tb3RlOword3JpdGVf cmVjb3JkKCRub2RlX3gsICd4Jyk7CisKKyMgQnVpbGQgbm9kZV9hMiBhcyBhIHN0YW5kYnkg b2Ygbm9kZV94LCB0aGVuIHByb21vdGUgaXQgdG8gVExJIDMuCitteSAoJG5vZGVfYTIpID0g c2V0dXBfc3RhbmRieXNfZnJvbV9vcmlnaW4oJG5vZGVfeCwgJ25vZGVfYTInKTsKKworc3lu Y19zdGFuZGJ5c193aXRoX29yaWdpbigkbm9kZV94LCAkbm9kZV9hMik7Ciskbm9kZV94LT5z dG9wOworCiskbm9kZV9hMi0+cHJvbW90ZTsKKworIyBOb3cgcHJvbW90ZSBub2RlX2IyIGlu ZGVwZW5kZW50bHkgZnJvbSBUTEkgMSB0byBUTEkgMicgKFVVSUQtQiwgIT0gVVVJRC1YKS4K KyRub2RlX2IyLT5wcm9tb3RlOword3JpdGVfcmVjb3JkKCRub2RlX2IyLCAnYicpOworCisj IFJld2luZCBub2RlX2EyIChUTEkgMS0+VExJIDItPlRMSSAzKSBmcm9tIG5vZGVfYjIgKFRM SSAxLT5UTEkgMicpIGluCisjIGxvY2FsIG1vZGUuICBUaGUgcmV3aW5kIG11c3QgcmVhY2gg YmFjayB0byB0aGUgZW5kIG9mIFRMSSAxLgorIworIyBub2RlX2EyIHdhcyBpbml0aWFsaXNl ZCBmcm9tIGEgc3RyZWFtaW5nIGJhY2t1cCBvZiBub2RlX3ggdGFrZW4gYWZ0ZXIKKyMgbm9k ZV94IGhhZCBhbHJlYWR5IGNvbXBsZXRlZCBzZWdtZW50IDQgb2YgVExJIDI7IHRoYXQgc2Vn bWVudCB0aGVyZWZvcmUKKyMgZG9lcyBub3QgYXBwZWFyIGluIG5vZGVfYTIncyBwZ193YWwu ICBwZ19yZXdpbmQncyBiYWNrd2FyZCBzY2FuIGZvciB0aGUKKyMgbGFzdCBjaGVja3BvaW50 IGJlZm9yZSB0aGUgZGl2ZXJnZW5jZSBwb2ludCBuZWVkcyB0aGF0IHNlZ21lbnQsIHNvIHdl CisjIHBvaW50IHJlc3RvcmVfY29tbWFuZCBhdCBub2RlX3gncyBwZ193YWwgYW5kIHVzZSAt LXJlc3RvcmUtdGFyZ2V0LXdhbC4KKyMKKyMgTm90ZTogbm8gcm93IGlzIGluc2VydGVkIG9u IFRMSSAzLiAgVGhpcyBpcyBpbnRlbnRpb25hbDogdGhlIG9ubHkKKyMgcG9zdC1kaXZlcmdl bmNlIHRhYmxlIG1vZGlmaWNhdGlvbiBpbiB0aGUgdGFyZ2V0J3MgV0FMIGlzIHRoZSAneCcg SU5TRVJUCisjIG9uIFRMSSAyLiAgT24gdW5wYXRjaGVkIGNvZGUgdGhlIFdBTCBzY2FuIHdv dWxkIHN0YXJ0IGZyb20gdGhlIFRMSSAyCisjIHNodXRkb3duIGNoZWNrcG9pbnQgKGp1c3Qg YmVmb3JlIFRMSSAzKSwgbWlzcyB0aGF0IGVhcmxpZXIgaW5zZXJ0LCBhbmQKKyMgbGVhdmUg J3gnIGluIHBsYWNlIGluc3RlYWQgb2YgcmVwbGFjaW5nIGl0IHdpdGggJ2InLgorbXkgJG5v ZGVfeF93YWxkaXIgPSAkbm9kZV94LT5kYXRhX2RpciAuICIvcGdfd2FsIjsKK2lmICgkUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6OndpbmRvd3Nfb3MpCit7CisJJG5vZGVfeF93YWxkaXIg PX4gc3tcXH17XFxcXH1nOworCSRub2RlX2EyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywKKwkJcXEoXG5yZXN0b3JlX2NvbW1hbmQgPSAnY29weSAiJG5vZGVfeF93YWxkaXJc XFxcJWYiICIlcCInXG4pKTsKK30KK2Vsc2UKK3sKKwkkbm9kZV9hMi0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCXFxKFxucmVzdG9yZV9jb21tYW5kID0gJ2NwICIkbm9k ZV94X3dhbGRpci8lZiIgIiVwIidcbikpOworfQorCityZXdpbmRfbm9kZSgKKwkkbm9kZV9h MiwgJG5vZGVfYjIsCisJJ3BnX3Jld2luZCByZXdpbmRzIGFjcm9zcyBtaXNtYXRjaGVkIFRM SSAyIC8gVExJIDItcHJpbWUgdG8gVExJIDEnLAorCS1yZXN0b3Jld2FsID0+IDEpOworbXkg JHJlc3VsdDIgPQorICAkbm9kZV9hMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg dmFsIEZST00gdGJsIE9SREVSIEJZIHZhbCIpOworaXMoJHJlc3VsdDIsICJiXG5vcmlnaW4y IiwKKwkncmV3b3VuZCBub2RlIHJlZmxlY3RzIHNvdXJjZSBoaXN0b3J5LCBub3QgdGFyZ2V0 IFRMSSAyL1RMSSAzIGRhdGEnKTsKKworJG5vZGVfYTItPnRlYXJkb3duX25vZGU7Ciskbm9k ZV9iMi0+dGVhcmRvd25fbm9kZTsKKyRub2RlX3gtPnRlYXJkb3duX25vZGU7Ciskbm9kZV9v cmlnaW4yLT50ZWFyZG93bl9ub2RlOworCisjIFRlc3QgdGhhdCBwZ19yZXdpbmQgY29ycmVj dGx5IGRldGVjdHMgYSBtaXNtYXRjaCB3aGVuIG9uZSBjbHVzdGVyJ3MgVExJIDIKKyMgaGlz dG9yeSBlbnRyeSBjYXJyaWVzIGEgemVybyBVVUlEIChvbGQtZm9ybWF0IGhpc3RvcnkgZmls ZSkgd2hpbGUgdGhlIG90aGVyCisjIGNhcnJpZXMgYSByZWFsIFVVSUQuICBUaGUgdHdvIGNs dXN0ZXJzIG11c3QgaGF2ZSBwcm9tb3RlZCBpbmRlcGVuZGVudGx5LCBzbworIyBwZ19yZXdp bmQgbXVzdCByZXdpbmQgdG8gVExJIDEgcmF0aGVyIHRoYW4gYWNjZXB0aW5nIHRoZSBzYW1l LVRMSSBzaG9ydGN1dC4KKyMKKyMgUnVuIGJvdGggb3JpZW50YXRpb25zOgorIyAgIChhKSB0 YXJnZXQgaGFzIHplcm8gVVVJRCwgc291cmNlIGhhcyByZWFsIFVVSUQKKyMgICAoYikgdGFy Z2V0IGhhcyByZWFsIFVVSUQsIHNvdXJjZSBoYXMgemVybyBVVUlECisjCisjIEluIGJvdGgg Y2FzZXMgdGhlIHNldHVwIGlzOgorIworIyAgIG9yaWdpbiAoVExJIDEpIC0tKy0tIG5vZGVf cCAtLXByb21vdGUtLT4gVExJIDIsIFVVSUQtUCAgKHRhcmdldCkKKyMgICAgICAgICAgICAg ICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICstLSBub2RlX3EgLS1wcm9tb3RlLS0+ IFRMSSAyLCBVVUlELVEgIChzb3VyY2UpCisjCisjIE9uZSBzaWRlIHRoZW4gaGFzIGl0cyBo aXN0b3J5IGZpbGUgcmV3cml0dGVuIHRvIHRoZSBvbGQgMy1maWVsZCBmb3JtYXQgc28KKyMg dGhhdCBpdHMgVVVJRCByZWFkcyBhcyB6ZXJvLiAgcGdfcmV3aW5kIG11c3QgdHJlYXQgemVy by12cy1ub256ZXJvIGFzCisjIGluY29tcGF0aWJsZSAodGhleSBjYW5ub3QgYmUgdGhlIHNh bWUgcHJvbW90aW9uKSBhbmQgcmV3aW5kIHRvIFRMSSAxLgorCitmb3IgbXkgJHN0cmlwX3Rh cmdldCAoMSwgMCkKK3sKKwlteSAkemVyb19zaWRlID0gJHN0cmlwX3RhcmdldCA/ICd0YXJn ZXQnIDogJ3NvdXJjZSc7CisJbXkgJHJlYWxfc2lkZSA9ICRzdHJpcF90YXJnZXQgPyAnc291 cmNlJyA6ICd0YXJnZXQnOworCW15ICRzZnggPSAkc3RyaXBfdGFyZ2V0ID8gJ3p0JyA6ICd6 cyc7CisJbXkgJGxhYmVsID0KKwkgICJwZ19yZXdpbmQgcmV3aW5kcyB3aGVuICR6ZXJvX3Np ZGUgaGFzIHplcm8gVVVJRCBhbmQgJHJlYWxfc2lkZSBoYXMgcmVhbCBVVUlEIjsKKworCW15 ICRub2RlX29yaWdpbjMgPSBzZXR1cF9vcmlnaW4oIm9yaWdpbjNfJHNmeCIpOworCW15ICgk bm9kZV9wLCAkbm9kZV9xKSA9CisJICBzZXR1cF9zdGFuZGJ5c19mcm9tX29yaWdpbigkbm9k ZV9vcmlnaW4zLCAibm9kZV9wXyRzZngiLCAibm9kZV9xXyRzZngiKTsKKworCXN5bmNfc3Rh bmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfb3JpZ2luMywgJG5vZGVfcCwgJG5vZGVfcSk7CisJ JG5vZGVfb3JpZ2luMy0+c3RvcDsKKworCSRub2RlX3AtPnByb21vdGU7CisJJG5vZGVfcS0+ cHJvbW90ZTsKKworCXdyaXRlX3JlY29yZCgkbm9kZV9wLCAnaW4gUCcpOworCXdyaXRlX3Jl Y29yZCgkbm9kZV9xLCAnaW4gUScpOworCisJIyBTdHJpcCBVVUlEIGZyb20gdGhlIGNob3Nl biBzaWRlIHRvIHNpbXVsYXRlIGEgcHJlLVVVSUQgc2VydmVyLgorCXN0cmlwX3RsaV91dWlk KCRzdHJpcF90YXJnZXQgPyAkbm9kZV9wIDogJG5vZGVfcSwgMik7CisKKwlyZXdpbmRfbm9k ZSgkbm9kZV9wLCAkbm9kZV9xLCAkbGFiZWwpOworCW15ICRyZXN1bHQzID0KKwkgICRub2Rl X3AtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbCBGUk9NIHRibCBPUkRFUiBC WSB2YWwiKTsKKwlpcyggJHJlc3VsdDMsCisJCSJpbiBRXG5vcmlnaW4zXyRzZngiLAorCQkn cmV3b3VuZCBub2RlIGhhcyBzb3VyY2UgZGF0YSwgbm90IGl0cyBvd24gZGl2ZXJnZW50IHJv dycpOworCisJJG5vZGVfcC0+dGVhcmRvd25fbm9kZTsKKwkkbm9kZV9xLT50ZWFyZG93bl9u b2RlOworCSRub2RlX29yaWdpbjMtPnRlYXJkb3duX25vZGU7Cit9CisKKyMgVGVzdCB0aGF0 IHBnX3Jld2luZCBkZXRlY3RzIGluZGVwZW5kZW50IHByb21vdGlvbnMgdG8gVExJIDMgd2hl biBib3RoCisjIGNsdXN0ZXJzIHNoYXJlIGEgY29tbW9uIFRMSSAxIC0+IFRMSSAyIGhpc3Rv cnkgKHNhbWUgVVVJRCkgYnV0IGluZGVwZW5kZW50bHkKKyMgcHJvbW90ZWQgZnJvbSBUTEkg MiB0byBUTEkgMywgcHJvZHVjaW5nIGRpZmZlcmVudCBUTEkgMyBVVUlEcy4KKyMKKyMgICBv cmlnaW4gKFRMSSAxKSAtLS0gbm9kZV9taWQgLS1wcm9tb3RlLS0+IFRMSSAyLCBVVUlELU0K KyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICst LSBub2RlX2MgLS1wcm9tb3RlLS0+IFRMSSAzLCBVVUlELUMgICh0YXJnZXQpCisjICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gbm9kZV9k IC0tcHJvbW90ZS0tPiBUTEkgMycsIFVVSUQtRCAgKHNvdXJjZSkKKyMKKyMgVGhlIHNhbWUt VExJIHNob3J0Y3V0IGNvbXBhcmVzIGVudHJ5W05lbnRyaWVzLTJdLnRsdXVpZCBvbiBlYWNo IHNpZGU7IHRoYXQKKyMgaXMgdGhlIFVVSUQgb2YgdGhlIFRMSSAzIHByb21vdGlvbiwgd2hp Y2ggZGlmZmVycy4gIFRoZSBmdWxsIHJld2luZCBwYXRoCisjIHRoZW4gd2Fsa3MgdGhlIGhp c3RvcnkgZm9yd2FyZDogVExJIDEgbWF0Y2hlcyAoc2FtZSB0bGkvYmVnaW4vVVVJRC1NIGF0 CisjIGVudHJ5WzBdKSwgVExJIDIgYWxzbyBtYXRjaGVzIChzYW1lIHRsaS9iZWdpbjsgVVVJ RC1NIGlzIHRoZSBzYW1lIG9uIGJvdGgKKyMgc2lkZXMgYXQgZW50cnlbMF0pLCBidXQgVExJ IDMgdnMgVExJIDMnIGRpZmZlciBhdCBlbnRyeVsxXSAoVVVJRC1DICE9IFVVSUQtRCksCisj IHNvIHRoZSBkaXZlcmdlbmNlIHBvaW50IGlzIHNldCB0byB0aGUgZW5kIG9mIFRMSSAyLgor CitteSAkbm9kZV9vcmlnaW40ID0gc2V0dXBfb3JpZ2luKCdvcmlnaW40Jyk7CitteSAoJG5v ZGVfbWlkKSA9IHNldHVwX3N0YW5kYnlzX2Zyb21fb3JpZ2luKCRub2RlX29yaWdpbjQsICdu b2RlX21pZCcpOworCitzeW5jX3N0YW5kYnlzX3dpdGhfb3JpZ2luKCRub2RlX29yaWdpbjQs ICRub2RlX21pZCk7Ciskbm9kZV9vcmlnaW40LT5zdG9wOworCisjIFByb21vdGUgbm9kZV9t aWQgdG8gVExJIDIgYW5kIGluc2VydCBhIHJvdyB0aGF0IGJvdGggVExJIDMgbm9kZXMgd2ls bCBzaGFyZS4KKyRub2RlX21pZC0+cHJvbW90ZTsKK3dyaXRlX3JlY29yZCgkbm9kZV9taWQs ICdtaWQnKTsKKworIyBub2RlX2MgYW5kIG5vZGVfZCBib3RoIHN0YXJ0IGFzIHN0YW5kYnlz IG9mIG5vZGVfbWlkIHNvIHRoZXkgc2hhcmUgdGhlIHNhbWUKKyMgVExJIDIgcHJvbW90aW9u IFVVSUQgKFVVSUQtTSkuCitteSAoJG5vZGVfYywgJG5vZGVfZCkgPQorICBzZXR1cF9zdGFu ZGJ5c19mcm9tX29yaWdpbigkbm9kZV9taWQsICdub2RlX2MnLCAnbm9kZV9kJyk7CitzeW5j X3N0YW5kYnlzX3dpdGhfb3JpZ2luKCRub2RlX21pZCwgJG5vZGVfYywgJG5vZGVfZCk7Cisk bm9kZV9taWQtPnN0b3A7CisKKyMgUHJvbW90ZSBib3RoIGluZGVwZW5kZW50bHk7IGVhY2gg Z2VuZXJhdGVzIGEgZGlzdGluY3QgVExJIDMgVVVJRC4KKyRub2RlX2MtPnByb21vdGU7Cisk bm9kZV9kLT5wcm9tb3RlOworCit3cml0ZV9yZWNvcmQoJG5vZGVfYywgJ2MnKTsKK3dyaXRl X3JlY29yZCgkbm9kZV9kLCAnZCcpOworCityZXdpbmRfbm9kZSgkbm9kZV9jLCAkbm9kZV9k LAorCSdwZ19yZXdpbmQgZGV0ZWN0cyBpbmRlcGVuZGVudCBUTEkgMyAvIFRMSSAzLXByaW1l IHByb21vdGlvbnMgc2hhcmluZyBUTEkgMicKKyk7CitteSAkcmVzdWx0NCA9CisgICRub2Rl X2MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbCBGUk9NIHRibCBPUkRFUiBC WSB2YWwiKTsKK2lzKCRyZXN1bHQ0LCAiZFxubWlkXG5vcmlnaW40IiwKKwkncmV3b3VuZCBu b2RlIGhhcyBzb3VyY2UgVExJIDMtcHJpbWUgZGF0YSwgbm90IGl0cyBvd24gVExJIDMgZGF0 YScpOworCiskbm9kZV9jLT50ZWFyZG93bl9ub2RlOworJG5vZGVfZC0+dGVhcmRvd25fbm9k ZTsKKyRub2RlX21pZC0+dGVhcmRvd25fbm9kZTsKKyRub2RlX29yaWdpbjQtPnRlYXJkb3du X25vZGU7CisKKyMgVGVzdCB0aGF0IHBnX3Jld2luZCBkb2VzIG5vdCBmYWlsIHdoZW4gdGhl IHRhcmdldCBoYXMgbm8gbG9jYWwgY29weSBvZiBpdHMgb3duCisjIGN1cnJlbnQgVExJJ3Mg aGlzdG9yeSBmaWxlLCBmb3IgZXhhbXBsZSwgYmVjYXVzZSBpdCBzdGFydGVkIHN0cmVhbWlu ZyB0aGF0IFRMSQorIyBmcm9tIGEgcHJpbWFyeSB0aGF0IGhhZCBhbHJlYWR5IHByb21vdGVk LCB3aXRob3V0IGV2ZXIgaXRzZWxmIHBlcmZvcm1pbmcgYQorIyBwcm9tb3Rpb24gb3Igb3Ro ZXJ3aXNlIG9idGFpbmluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIGZpbGUuCisjCisjIFdpdGhv dXQgdGhhdCBmaWxlLCBwZ19yZXdpbmQgY2Fubm90IHJlYWQgdGhlIHByb21vdGlvbiBVVUlE IGZvciB0aGUgc2hhcmVkIFRMSQorIyBvbiB0aGUgdGFyZ2V0IHNpZGUsIGFuZCBzbyBjYW5u b3QgdGVsbCB3aGV0aGVyIHRoZSB0d28gY2x1c3RlcnMgYXJlIHRoZSBzYW1lCisjIHByb21v dGlvbiBvciB0d28gaW5kZXBlbmRlbnQgb25lcy4KKyMKKyMgV2UgY2hlY2sgdGhhdCBubyBy ZXdpbmQgZG9lcyBhY3R1YWxseSB0YWtlIHBsYWNlLCBub3QganVzdCB0aGF0IHRoZSBlcnJv cgorIyBtZXNzYWdlIGlzIGNvcnJlY3QuIEZvciB0aGF0IHJlYXNvbiwgd2UgY3JlYXRlIHR3 byBkaXZlcmdlbnQgbm9kZXMgZm9yIHRoZQorIyB0ZXN0LCByZW1vdmUgdGhlIGhpc3Rvcnkg ZmlsZSwgYW5kIHRoZW4gYXR0ZW1wdCBhIHJld2luZC4gSWYgdGhlIGNvZGUgd29ya3MKKyMg Y29ycmVjdGx5LCB0aGUgbm9kZSBzaG91bGQgbm90IGJlIHJld291bmQuCitteSAkbm9kZV9v cmlnaW41ID0gc2V0dXBfb3JpZ2luKCdvcmlnaW41Jyk7CitteSAoJG5vZGVfZywgJG5vZGVf aCkgPQorICBzZXR1cF9zdGFuZGJ5c19mcm9tX29yaWdpbigkbm9kZV9vcmlnaW41LCAnbm9k ZV9nJywgJ25vZGVfaCcpOworCitzeW5jX3N0YW5kYnlzX3dpdGhfb3JpZ2luKCRub2RlX29y aWdpbjUsICRub2RlX2csICRub2RlX2gpOworJG5vZGVfb3JpZ2luNS0+c3RvcDsKKworJG5v ZGVfZy0+cHJvbW90ZTsKKyRub2RlX2gtPnByb21vdGU7CisKK3dyaXRlX3JlY29yZCgkbm9k ZV9nLCAnaW4gRycpOword3JpdGVfcmVjb3JkKCRub2RlX2gsICdpbiBIJyk7CisKK215ICRz YXZlZF9oaXN0b3J5ID0gcmVtb3ZlX3RsaV9oaXN0b3J5KCRub2RlX2csIDIpOworCityZXdp bmRfbm9kZSgKKwkkbm9kZV9nLCAkbm9kZV9oLAorCSdwZ19yZXdpbmQgZG9lcyBub3QgZmFp bCB3aGVuIHRhcmdldCBoaXN0b3J5IGZpbGUgaXMgbWlzc2luZycsCisJLW5vcmVzdGFydCA9 PiAxKTsKKworIyBSZXN0b3JlIHRoZSBoaXN0b3J5IGZpbGUgb2Ygbm9kZV9nIGJlZm9yZSBp dCBnZXRzIHJlc3RhcnRlZC4gV2UgYXJlIHRlc3RpbmcKKyMgdGhhdCBwZ19yZXdpbmQgY2Fu IGhhbmRsZSBhIG1pc3NpbmcgaGlzdG9yeSBmaWxlLCBidXQgdW5saWtlIHRoZSByZWFsLXdv cmxkCisjIGNhc2UgdGhpcyBzaW11bGF0ZXMsIHRoZSBwZ193YWwgZGlyZWN0b3J5IG9mIG5v ZGVfZyBzdGlsbCBoYXMgaXRzIG93biBnZW51aW5lCisjIFRMSSAxIHNlZ21lbnRzIG9uIGRp c2sgYW5kIHRoZSBzZXJ2ZXIgY2Fubm90IHN0YXJ0IGJhY2sgdXAgd2l0aG91dCB0aGUgZmls ZQorIyBsaW5raW5nIHRoZW0gdG8gVExJIDIuCityZXN0b3JlX3RsaV9oaXN0b3J5KCRub2Rl X2csIDIsICRzYXZlZF9oaXN0b3J5KTsKKworJG5vZGVfZy0+cmVzdGFydDsKKworbXkgJHJl c3VsdDUgPQorICAkbm9kZV9nLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWwg RlJPTSB0YmwgT1JERVIgQlkgdmFsIik7CitpcyggJHJlc3VsdDUsCisJImluIEdcbm9yaWdp bjUiLAorCSdtaXNzaW5nIGhpc3RvcnkgZmlsZSBwcmV2ZW50cyBkaXZlcmdlbmNlIGRldGVj dGlvbjogdGFyZ2V0IGRhdGEgbGVmdCB1bmNoYW5nZWQnCispOworCiskbm9kZV9nLT50ZWFy ZG93bl9ub2RlOworJG5vZGVfaC0+dGVhcmRvd25fbm9kZTsKKyRub2RlX29yaWdpbjUtPnRl YXJkb3duX25vZGU7CisKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19yZXdpbmQvdGltZWxpbmUuYyBiL3NyYy9iaW4vcGdfcmV3aW5kL3RpbWVsaW5lLmMKaW5k ZXggZGRhMDZlYWEwYmMuLjdiZmFkYzIxYmRkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jl d2luZC90aW1lbGluZS5jCisrKyBiL3NyYy9iaW4vcGdfcmV3aW5kL3RpbWVsaW5lLmMKQEAg LTksOSArOSw0MCBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1 ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKICNpbmNsdWRlICJhY2Nlc3Mv dGltZWxpbmUuaCIKICNpbmNsdWRlICJwZ19yZXdpbmQuaCIKIAorLyoKKyAqIFBhcnNlIGEg VVVJRCBzdHJpbmcgaW4gc3RhbmRhcmQgZGFzaGVkIGZvcm0gaW50byBhIHBnX3V1aWRfdC4K KyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBpZiBzdHIgaXMgbm90IGEgdmFs aWQgVVVJRCBzdHJpbmcuCisgKi8KK3N0YXRpYyBib29sCityZXdpbmRfcGFyc2VfdXVpZChj b25zdCBjaGFyICpzdHIsIHBnX3V1aWRfdCAqdXVpZCkKK3sKKwljb25zdCBjaGFyICpzcmMg PSBzdHI7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IFVVSURfTEVOOyBpKyspCisJeworCQlj aGFyCQlidWZbM107CisKKwkJaWYgKCFpc3hkaWdpdCgodW5zaWduZWQgY2hhcikgc3JjWzBd KSB8fAorCQkJIWlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSBzcmNbMV0pKQorCQkJcmV0dXJu IGZhbHNlOworCQlidWZbMF0gPSBzcmNbMF07CisJCWJ1ZlsxXSA9IHNyY1sxXTsKKwkJYnVm WzJdID0gJ1wwJzsKKwkJdXVpZC0+ZGF0YVtpXSA9ICh1bnNpZ25lZCBjaGFyKSBzdHJ0b3Vs KGJ1ZiwgTlVMTCwgMTYpOworCQlzcmMgKz0gMjsKKwkJLyogc2tpcCBkYXNoIGF0IHBvc2l0 aW9ucyBhZnRlciBieXRlcyAzLCA1LCA3LCA5IChpID09IDMsNSw3LDkpICovCisJCWlmIChz cmNbMF0gPT0gJy0nICYmIChpID09IDMgfHwgaSA9PSA1IHx8IGkgPT0gNyB8fCBpID09IDkp KQorCQkJc3JjKys7CisJfQorCXJldHVybiAoKnNyYyA9PSAnXDAnKTsKK30KKwogLyoKICAq IFRoaXMgaXMgY29weS1wYXN0ZWQgZnJvbSB0aGUgYmFja2VuZCByZWFkVGltZUxpbmVIaXN0 b3J5LCBtb2RpZmllZCB0bwogICogcmV0dXJuIGEgbWFsbG9jJ2QgYXJyYXkgYW5kIHRvIHdv cmsgd2l0aG91dCBiYWNrZW5kIGZ1bmN0aW9ucy4KQEAgLTQ4LDYgKzc5LDkgQEAgcmV3aW5k X3BhcnNlVGltZUxpbmVIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgVGltZUxpbmVJRCB0YXJnZXRU TEksIGludCAqbmVudHJpZXMpCiAJCXVpbnQzMgkJc3dpdGNocG9pbnRfaGk7CiAJCXVpbnQz MgkJc3dpdGNocG9pbnRfbG87CiAJCWludAkJCW5maWVsZHM7CisJCWNoYXIJCXV1aWRfc3Ry W1VVSURfU1RSX0xFTiArIDFdID0gezB9OworCQlwZ191dWlkX3QJYnVmOworCiAKIAkJZmxp bmUgPSBidWZwdHI7CiAJCXdoaWxlICgqYnVmcHRyICYmICpidWZwdHIgIT0gJ1xuJykKQEAg LTY2LDcgKzEwMCw4IEBAIHJld2luZF9wYXJzZVRpbWVMaW5lSGlzdG9yeShjaGFyICpidWZm ZXIsIFRpbWVMaW5lSUQgdGFyZ2V0VExJLCBpbnQgKm5lbnRyaWVzKQogCQlpZiAoKnB0ciA9 PSAnXDAnIHx8ICpwdHIgPT0gJyMnKQogCQkJY29udGludWU7CiAKLQkJbmZpZWxkcyA9IHNz Y2FuZihmbGluZSwgIiV1XHQlWC8lMDhYIiwgJnRsaSwgJnN3aXRjaHBvaW50X2hpLCAmc3dp dGNocG9pbnRfbG8pOworCQluZmllbGRzID0gc3NjYW5mKGZsaW5lLCAiJXVcdCVYLyUwOFhc dCUzNnMiLCAmdGxpLCAmc3dpdGNocG9pbnRfaGksCisJCQkJCQkgJnN3aXRjaHBvaW50X2xv LCB1dWlkX3N0cik7CiAKIAkJaWYgKG5maWVsZHMgPCAxKQogCQl7CkBAIC03NSw3ICsxMTAs NyBAQCByZXdpbmRfcGFyc2VUaW1lTGluZUhpc3RvcnkoY2hhciAqYnVmZmVyLCBUaW1lTGlu ZUlEIHRhcmdldFRMSSwgaW50ICpuZW50cmllcykKIAkJCXBnX2xvZ19lcnJvcl9kZXRhaWwo IkV4cGVjdGVkIGEgbnVtZXJpYyB0aW1lbGluZSBJRC4iKTsKIAkJCWV4aXQoMSk7CiAJCX0K LQkJaWYgKG5maWVsZHMgIT0gMykKKwkJaWYgKG5maWVsZHMgPCAzKQogCQl7CiAJCQlwZ19s b2dfZXJyb3IoInN5bnRheCBlcnJvciBpbiBoaXN0b3J5IGZpbGU6ICVzIiwgZmxpbmUpOwog CQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiRXhwZWN0ZWQgYSB3cml0ZS1haGVhZCBsb2cgc3dp dGNocG9pbnQgbG9jYXRpb24uIik7CkBAIC05OSw3ICsxMzQsMTUgQEAgcmV3aW5kX3BhcnNl VGltZUxpbmVIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgVGltZUxpbmVJRCB0YXJnZXRUTEksIGlu dCAqbmVudHJpZXMpCiAJCWVudHJ5LT5lbmQgPSAoKHVpbnQ2NCkgKHN3aXRjaHBvaW50X2hp KSkgPDwgMzIgfCAodWludDY0KSBzd2l0Y2hwb2ludF9sbzsKIAkJcHJldmVuZCA9IGVudHJ5 LT5lbmQ7CiAKLQkJLyogd2UgaWdub3JlIHRoZSByZW1haW5kZXIgb2YgZWFjaCBsaW5lICov CisJCS8qCisJCSAqIFBhcnNlIHRoZSBvcHRpb25hbCBVVUlEIGZpZWxkLiAgT2xkIGhpc3Rv cnkgZmlsZXMgaGF2ZSB0aGUgcmVhc29uCisJCSAqIHN0cmluZyBpbiBmaWVsZCA0OyBpdHMg Zmlyc3Qgd29yZCBpcyBtdWNoIHNob3J0ZXIgdGhhbiBVVUlEX1NUUl9MRU4KKwkJICogc28g dGhlIGxlbmd0aCBjaGVjayBzYWZlbHkgZGlzdGluZ3Vpc2hlcyBvbGQgZnJvbSBuZXcgZm9y bWF0LgorCQkgKi8KKwkJbWVtc2V0KCZlbnRyeS0+dGx1dWlkLCAwLCBzaXplb2YocGdfdXVp ZF90KSk7CisJCWlmIChuZmllbGRzID09IDQgJiYgc3RybGVuKHV1aWRfc3RyKSA9PSBVVUlE X1NUUl9MRU4pCisJCQlpZiAocmV3aW5kX3BhcnNlX3V1aWQodXVpZF9zdHIsICZidWYpKQor CQkJCW1lbWNweSgmZW50cnktPnRsdXVpZCwgJmJ1Ziwgc2l6ZW9mKHBnX3V1aWRfdCkpOwog CX0KIAogCWlmIChlbnRyaWVzICYmIHRhcmdldFRMSSA8PSBsYXN0dGxpKQpAQCAtMTIzLDYg KzE2Niw3IEBAIHJld2luZF9wYXJzZVRpbWVMaW5lSGlzdG9yeShjaGFyICpidWZmZXIsIFRp bWVMaW5lSUQgdGFyZ2V0VExJLCBpbnQgKm5lbnRyaWVzKQogCWVudHJ5LT50bGkgPSB0YXJn ZXRUTEk7CiAJZW50cnktPmJlZ2luID0gcHJldmVuZDsKIAllbnRyeS0+ZW5kID0gSW52YWxp ZFhMb2dSZWNQdHI7CisJbWVtc2V0KCZlbnRyeS0+dGx1dWlkLCAwLCBzaXplb2YocGdfdXVp ZF90KSk7CiAKIAkqbmVudHJpZXMgPSBubGluZXM7CiAJcmV0dXJuIGVudHJpZXM7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGltZWxpbmUuaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90aW1lbGluZS5oCmluZGV4IDk3ZjFkNjE5YzM1Li5jZGQ2NDJjOTRmMCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RpbWVsaW5lLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3RpbWVsaW5lLmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy94bG9nZGVmcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1 dGlscy91dWlkLmgiCiAKIC8qCiAgKiBBIGxpc3Qgb2YgdGhlc2Ugc3RydWN0cyBkZXNjcmli ZXMgdGhlIHRpbWVsaW5lIGhpc3Rvcnkgb2YgdGhlIHNlcnZlci4gRWFjaApAQCAtMjIsOSAr MjMsMTAgQEAKICAqIHBvaW50ZXJzIG9mIGFsbCB0aGUgZW50cmllcyBmb3JtIGEgY29udGln dW91cyBsaW5lIGZyb20gYmVnaW5uaW5nIG9mIHRpbWUKICAqIHRvIGluZmluaXR5LgogICov Ci10eXBlZGVmIHN0cnVjdAordHlwZWRlZiBzdHJ1Y3QgVGltZUxpbmVIaXN0b3J5RW50cnkK IHsKIAlUaW1lTGluZUlECXRsaTsKKwlwZ191dWlkX3QJdGx1dWlkOwkJCS8qIGZyb20gaGlz dG9yeSBmaWxlOyB6ZXJvIGlmIHVua25vd24gKi8KIAlYTG9nUmVjUHRyCWJlZ2luOwkJCS8q IGluY2x1c2l2ZSAqLwogCVhMb2dSZWNQdHIJZW5kOwkJCS8qIGV4Y2x1c2l2ZSwgSW52YWxp ZFhMb2dSZWNQdHIgbWVhbnMgaW5maW5pdHkgKi8KIH0gVGltZUxpbmVIaXN0b3J5RW50cnk7 CkBAIC0zMyw2ICszNSw3IEBAIGV4dGVybiBMaXN0ICpyZWFkVGltZUxpbmVIaXN0b3J5KFRp bWVMaW5lSUQgdGFyZ2V0VExJKTsKIGV4dGVybiBib29sIGV4aXN0c1RpbWVMaW5lSGlzdG9y eShUaW1lTGluZUlEIHByb2JlVExJKTsKIGV4dGVybiBUaW1lTGluZUlEIGZpbmROZXdlc3RU aW1lTGluZShUaW1lTGluZUlEIHN0YXJ0VExJKTsKIGV4dGVybiB2b2lkIHdyaXRlVGltZUxp bmVIaXN0b3J5KFRpbWVMaW5lSUQgbmV3VExJLCBUaW1lTGluZUlEIHBhcmVudFRMSSwKKwkJ CQkJCQkJIGNvbnN0IHBnX3V1aWRfdCAqbmV3VExVVUlELAogCQkJCQkJCQkgWExvZ1JlY1B0 ciBzd2l0Y2hwb2ludCwgY2hhciAqcmVhc29uKTsKIGV4dGVybiB2b2lkIHdyaXRlVGltZUxp bmVIaXN0b3J5RmlsZShUaW1lTGluZUlEIHRsaSwgY2hhciAqY29udGVudCwgaW50IHNpemUp OwogZXh0ZXJuIHZvaWQgcmVzdG9yZVRpbWVMaW5lSGlzdG9yeUZpbGVzKFRpbWVMaW5lSUQg YmVnaW4sIFRpbWVMaW5lSUQgZW5kKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9nX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5o CmluZGV4IDU1NjYzZTZmNGFmLi4yMGEyZjM0NWZkMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Z19pbnRlcm5hbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dk ZWZzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKICNpbmNsdWRlICJkYXRh dHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ1dGlscy91dWlkLmgiCiAjaW5jbHVkZSAi bGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJwZ3RpbWUuaCIKICNpbmNsdWRlICJzdG9y YWdlL2Jsb2NrLmgiCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy91dWlkLmggYi9z cmMvaW5jbHVkZS91dGlscy91dWlkLmgKaW5kZXggNTcyZDhjZjRjMzYuLjQ3YTZhZjBhYjNj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy91dWlkLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvdXVpZC5oCkBAIC0xNywxMiArMTcsMTYgQEAKIC8qIHV1aWQgc2l6ZSBpbiBi eXRlcyAqLwogI2RlZmluZSBVVUlEX0xFTiAxNgogCisvKiBsZW5ndGggb2YgYSBVVUlEIHN0 cmluZyAod2l0aG91dCBudWxsIHRlcm1pbmF0b3IpOiB4eHh4eHh4eC14eHh4LXh4eHgteHh4 eC14eHh4eHh4eHh4eHggKi8KKyNkZWZpbmUgVVVJRF9TVFJfTEVOIDM2CisKIHR5cGVkZWYg c3RydWN0IHBnX3V1aWRfdAogewogCXVuc2lnbmVkIGNoYXIgZGF0YVtVVUlEX0xFTl07CiB9 IHBnX3V1aWRfdDsKIAotLyogZm1nciBpbnRlcmZhY2UgbWFjcm9zICovCisvKiBmbWdyIGlu dGVyZmFjZSBtYWNyb3MgKGJhY2tlbmQgb25seSkgKi8KKyNpZm5kZWYgRlJPTlRFTkQKIHN0 YXRpYyBpbmxpbmUgRGF0dW0KIFVVSURQR2V0RGF0dW0oY29uc3QgcGdfdXVpZF90ICpYKQog ewpAQCAtMzksNCArNDMsOCBAQCBEYXR1bUdldFVVSURQKERhdHVtIFgpCiAKICNkZWZpbmUg UEdfR0VUQVJHX1VVSURfUChYKQkJRGF0dW1HZXRVVUlEUChQR19HRVRBUkdfREFUVU0oWCkp CiAKK2V4dGVybiBwZ191dWlkX3QgKmdlbmVyYXRlX3V1aWR2Nyh1aW50NjQgdW5peF90c19t cywgdWludDMyIHN1Yl9tcyk7CitleHRlcm4gcGdfdXVpZF90ICpnZW5lcmF0ZV91dWlkdjdf cihwZ191dWlkX3QgKnV1aWQsIHVpbnQ2NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKTsK KworI2VuZGlmCQkJCQkJCS8qICFGUk9OVEVORCAqLwogI2VuZGlmCQkJCQkJCS8qIFVVSURf SCAqLwotLSAKMi40My4wCgo= --------------TSljTQNu9TloqEUfLvyDqVRZ--