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 1wi778-0001JU-0Q for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 09:01:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wi776-00H3kN-1t for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 09:01:41 +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 1wi776-00H3kF-0A for pgsql-hackers@lists.postgresql.org; Fri, 10 Jul 2026 09:01:40 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wi771-00000000cu7-3Tu2 for pgsql-hackers@postgresql.org; Fri, 10 Jul 2026 09:01:40 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-69c20ba892eso1182861a12.1 for ; Fri, 10 Jul 2026 02:01:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783674095; cv=none; d=google.com; s=arc-20260327; b=WRccadKt8dJsckS5MFdyfDOCew/NgTeiWJeYYldgH5jpck3e0DE60+l64qMGIqEMij wEE8DxIXNzMuq3O7YbtV8thbN81JN6gyT4ja11AXeSUpoO9Z7wTmCo3w8S/RpUpStV/p a46Ypd723xN2ftkx2wpOPJ4hNln5lZlcXEukGxzvu+sCPEVU3rHyIR5yO6sAmuP5qcY4 4hp+5jiX1rpR2hVou2PKVk6mX5+Jy45itbu1+bzfoA7D7z9thQmnp1ShA5ub3Ml18G+f 7id4F8p0QJcc9AnZoojOmh7tsJv4KFAupgLwt91T7PcOLoexxCW1ER4P1c64Sib1/oTa oUEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=FrIpXUQgKTuL+UG6tUoiTbq3LOFsMcBYlcgT3OEXF5Y=; fh=XTRf1jQx9VxcGca12N1WAlETVWGq937QhV9UrCo4gOY=; b=I8OmCtbwnuDqZM9LasrF1rO2FxBCM0B9j7bJJq9zJdVhajEXX1stwqJ9G5ossuip0j iIgc1AGFiv5VI6P3+Fej95V6sGDlufiUhxLxmXPRs7lLIC9vp9+CJgIZb1p5/q/vRg/u Q+iy9/O0pvT8iJ4GsYOFux7quh5VszTTP4DVMbzwUtJ8aUlWhDTuZKU4Hp0nAeRr/DW6 +Mutvvj60SX7bgeS7KCnqNAjdJTyv4NFAiR/GfT2ZkukCX+zBvH1rhn5BeblNIgvlYoB p/lixkYYiiAR75vx5xVwa8zCI+ndIJwPLiE7QFwGwfSMNxalLG54eE53PIgHy8SqJd70 h/6Q==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783674095; x=1784278895; darn=postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=FrIpXUQgKTuL+UG6tUoiTbq3LOFsMcBYlcgT3OEXF5Y=; b=G49m/mCa1cITSKKbrQ4avO/0bZQPyM47HnAECaOCGBbooagfabwCvXMubDeYkoRbkS Ya4Q/4Yhk9TTfTETuUaZMt5n3nF0i+zb4mssgzy0mu4SeKeWDLqrTIWMi/wcNOSgcAQl 2FMpJeb+ZHEP7VHX5BRLZfW4+uqbDZ0cROvMifd/86GdItG3ajEj0eAkG9Daab65vYGz U0ZLnVzz2HuW3LWXPKWy2EEsUwo/WJtW2THj5hYkcv8fpRbQQYl5s6yvs7bH6/+WBs9t mfu63tngJnxQr/5IpBBOAlLcr3PfMWcbu/Ays/s09TMXg03AuQjl4aKoqmCEznWG1b5l /oFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783674095; x=1784278895; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=FrIpXUQgKTuL+UG6tUoiTbq3LOFsMcBYlcgT3OEXF5Y=; b=IuFvdraewP/UDBjnZCNFlqyqvQFpOaXdgmmU4bXVOSdylP76uDBU9p9ctgSpdcL7lP dwvRt4RvMDdqrpOsicxhoWpU8bxSoGn8RzEaBhNHrHuTwGkQPMWzIPVSgiYJSBzFSEsC vbb2PX4Lcethf+vDqQPYmvMIiHWLyGRaYK7/ihA5aInbk3TA/0sRJQ4LHLOCBw5nLgp6 fHJfQYxLZ7SKAfCmF4XBX2N4jjq3UDLyhX6F4i2XZE86SgE5Da3qRP2AjFeSHNUND2Qp Sh7qUDUORGQuArkRyuznRD/CH4m8gAXLz81Dx2AmwUF4lo5E2GYUV8HTWsr28OlZgtsV 8cXw== X-Forwarded-Encrypted: i=1; AHgh+Rr751/BjxfH+xOERAesyCIPhAGQgTKILQMc9RiaRMjiwMLvscNnqXssKjRg0YpEOB+uvgNIoOpVXvDViE8w@postgresql.org X-Gm-Message-State: AOJu0Yzhz/67RvYPp+BrvzINCnuHDrY9Qbu1UytkbBvVWSu6m4wNkPwS ccQo7atF6y172G0XXFQq9k4ejfG6Tv4HnxQMvr1V5WpZqdwy/qdbFWn5NLlxdN43nJJ2xOEPLgN LCE8pxQUAlUCJ1FKK1P6iMM9X8h/m/JQ= X-Gm-Gg: AfdE7clEM0IL6Ch1x72kLEtCs2QhmMHhjogvtz87dPY6swz1YUrLpNiAIr+Z4gg9ko2 f8zMUEQi2nU5L/U3gEjkINKqlBXdwbl79SLaXKFYb0rcTC/e8mc8KeLr92kGCx8HA9QmA34KggD p4Ne/p/3K1cKEACcD7YMg+W8osDWqhNT1GTTra3bie469Ztq9/NnqeZhKumUEgVsOlLrAing/aP G8hCfNovV0sJSYyrMqcEW5dpCAMt9H/wR1YKiT77HJDslZD22kNOoozGWPyP8+NZd1XQjjr X-Received: by 2002:a17:907:e910:b0:c12:b58c:fd7a with SMTP id a640c23a62f3a-c15fe553667mr103417066b.9.1783674094532; Fri, 10 Jul 2026 02:01:34 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Imran Zaheer Date: Fri, 10 Jul 2026 14:01:22 +0500 X-Gm-Features: AUfX_mxUuhkhofYWPP7h7U41mlZx75TbArWLn0993XqkxtLK7VDqlP2TAB4o1gA Message-ID: Subject: Re: [WIP] Pipelined Recovery To: Xuneng Zhou Cc: assam258@gmail.com, Zsolt Parragi , Jakub Wartak , "Hayato Kuroda (Fujitsu)" , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000ce41dd06563dfc9a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ce41dd06563dfc9a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi I am attaching a new series of the patch set. What's changed? * Rebased: patch v5-0004 is rebased. Just a small fix in meson.build * Serialization: Before this we were copying the decoded data and the msg header to a temp buffer and passing it to the shmem mq via shm_mq_send(). The new version uses shm_mq_sendv() with shm_mq_iovec instead. This avoids the extra copy into the temporary buffer, as well as the additional palloc()/pfree() required to allocate it. The changes would be reflected in v5-0001 & a small portion (deserialization) of v5-0002. * CPU resource usage: New patch v5-0005 added to the patch set. Before this the resource usage reported at the end of the recovery via pg_rusage_show() in PerformWalRecovery() only reflected the startup process. Since WAL decoding is now ofloaded to run on a separate pipeline worker, the CPU time consumed by that worker was not included in the final report. The new patch records the pipeline worker's CPU usage before it exits and combines it with the startup process's CPU usage when the final recovery statistics are reported. This ensures that the reported user and system CPU times reflect the total CPU consumed during recovery, while the elapsed time remains unchanged. These are mostly refinement changes; the overall implementation and design of the pipeline remain the same. Summary of idea: Decoupling the decoding from the startup process and offloading it to a dedicated worker. Then the startup process simply receives the decoded record through a shmem queue. This allows the startup process to spend most of the CPU time in applying the wal records instead of decoding and reading them. We refer to this approach as the wal pipeline. Thanks Imran Zaheer Benchmarks: https://drive.google.com/file/d/13FATRT3kjh_y1wWETpYQh4ZXVLNaYU= 4A/view?usp=3Dsharing Test script: https://github.com/imranzaheer612/pg-recovery-testing On Thu, Jun 25, 2026 at 12:47=E2=80=AFPM Xuneng Zhou = wrote: > > Hi Imran, > > On Tue, Jun 23, 2026 at 9:27=E2=80=AFPM Imran Zaheer wrote: > > > > Hi > > > > I am attaching the new series of patches. > > > > What has changed? > > > > * Rebased > > > > * The patch set is now split into two new patches. This will make the > > code easier to understand and review. > > > > * The v4-0003 patch contains code mostly related to keeping the > > recovery states synced between the startup process and the pipeline > > process. Most of these changes were required to make the streaming > > replication work. > > > > * The v4-0002 patch now only contains the consumer code that handles > > receiving the decoded records from the shmem queue and moving the redo > > loop forward. > > > > * The v4-0004 contains some basic tests to see if the pipeline worker > > is functioning as expected. More testing was done by passing > > PG_TEST_INITDB_EXTRA_OPTS=3D"-c wal_pipeline=3Don" before running the > > recovery test suite. > > +1 for splitting the patch set into smaller components to make the > review process smoother. > > > * Other than that, the cpu overhead during deserialization is > > optimized by skipping multiple copies of the decoded record and > > directly passing the pointer to the shmem queue. There is still some > > overhead visible during serialization that could be improved at the > > producer end. > > > > * Signal handling for the pipeline worker is improved so that > > promotion signals are sent to both the startup process and the > > producer worker by the postmaster. > > > > > > You will also find the new benchmarks attached [1] and the pdf report > > overview. A simple cpu profiling on the pipelined startup process > > shows that the cpu overhead during reading records has now been > > removed and offloaded to the producer worker. > > > > Before pipelining: > > > > Around 50% of the cpu time is spent on fetching the wal record. Note th= at > > in this workload pipeline is off so don't worry about the new func > > ReceiveRecord(), it's just a wrapper around ReadRecord(). > > > > Children Self Command Shared O Symbol > > - 98.85% 0.21% postgres postgres [.] PerformWalRecovery > > - 98.64% PerformWalRecovery > > - 51.00% ReceiveRecord > > - 50.78% ReadRecord > > - 50.52% XLogPrefetcherReadRecord > > - 49.61% XLogPrefetcherNextBlock > > + 25.33% XLogReadAhead > > + 22.32% PrefetchSharedBuffer > > + 0.76% smgropen > > - 46.68% ApplyWalRecord > > + 29.23% heap_redo > > + 9.51% heap2_redo > > + 4.74% btree_redo > > + 1.11% xlog_redo > > + 0.80% xact_redo > > > > > > After Pipelining: > > > > Here the only work needed to be done by the cpu is to get the decoded > > record from > > the queue. Other times (89.13%) cpu is worried about applying the wal r= ecord. > > > > Children Self Command Shared O Symbol > > - 98.74% 0.37% postgres postgres [.] PerformWalRecovery > > - 98.37% PerformWalRecovery > > - 89.13% ApplyWalRecord > > + 56.89% heap_redo > > + 18.28% heap2_redo > > + 8.01% btree_redo > > + 2.02% xlog_redo > > + 1.15% xact_redo > > - 7.80% ReceiveRecord > > + 7.63% WalPipeline_ReceiveRecord > > > > If the recovery process is not I/O bound then we would be able to test > > this cpu optimization. Doing pgbench on a workload that is fully in > > memory shows around 30% performance gains. You can see more > > benchmarking details in the attached drive link [1] > > The perf result looks promising! > > > Some comments related to attached pdf and benchmarking, it is showing > > that we can get more performance advantage out of the pipeline when > > most of the workload is running in memory i.e. we have enough shared > > buffers configured. > > > > If you want to do some experiments, please be my guest; I would be > > happy to see more testing. You can share what performance advantage > > you are getting from this. You can also refer to the benchmarking > > script that I have been using [2]. > > > > > > Looking forward to your review, comments, etc. > > I haven't had a chance for a meaningful review yet, but expect to do so s= oon. > > -- > Regards, > Xuneng Zhou > HighGo Software Co., Ltd. --000000000000ce41dd06563dfc9a Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-Pipelined-Recovery-Producer-Related-Code.patch" Content-Disposition: attachment; filename="v5-0001-Pipelined-Recovery-Producer-Related-Code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrenz3ag0 RnJvbSA3YjZlMDRjYzAzMjhmZjY2ZjZjY2ZkMjQzYjczNDM5Mzg0ZDk2OGRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBGcmksIDEwIEp1bCAyMDI2IDA2OjU3OjMxICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NSAx LzVdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIFByb2R1Y2VyIFJlbGF0ZWQgQ29kZQoKVGhpcyBpbmNs dWRlcyB0aGUgcHJvZHVjZXIgc3BlY2lmaWMgY29kZSBmb3IgdGhlIHByb2R1Y2VyLWNvbnN1bWVy CmFyY2hpdGVjdHVyZSBmb3IgV0FMIHJlcGxheSB0aGF0IHNlcGFyYXRlcyBXQUwgZGVjb2Rpbmcg ZnJvbSB0aGUgc3RhcnR1cApwcm9jZXNzLCBlbmFibGluZyBwYXJhbGxlbCBwcm9jZXNzaW5nIGJl dHdlZW4gZGlmZmVyZW10IHN0ZXBzIG9mIHJlcGxheS4KClRoZSBwcm9kdWNlciBpbmNsdWRlcyBh IGJhY2tncm91bmQgd29ya2VyIHRoYXQgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMsCnRo ZW4gc2VuZCB0aGVtIHRvIHRoZSBzdGFydHVwIHByb2Nlc3MgZm9yIHRoZSByZWRvLiBJUEMgaGFw cGVucyB2aWEgc2hhcmVkCm1lbW9yeSBtZXNzYWdlIHF1ZXVlcyAoc2htX21xKSwgYWxsb3dpbmcg dGhlIGRlY29kZXIgdG8gcnVuIGFoZWFkIG9mCnRoZSBhcHBseSBwcm9jZXNzLgoKVGhpcyB3aWxs IGdpdmUgc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gcmVjb3ZlcmllcyBmb3IgQ1BV LWJvdW5kCndvcmtsb2Fkcy4KCk5ldyBHVUM6IHdhbF9waXBlbGluZSAoZGVmYXVsdDogb2ZmKQoK QXV0aG9yOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpJZGVhIGJ5OiBBbnRz IEFhc21hIDxhbnRzQGN5YmVydGVjLmF0PgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9t ZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3BpcGVsaW5lLmMgICAgIHwgNjAwICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyAgIHwgICAzICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL3Bvc3RtYXN0ZXIuYyAgICAgICAgICAgfCAgMTIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAxNSArCiBzcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cu aCAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlw ZWxpbmUuaCAgICAgICAgICAgICB8IDEwNSArKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaCAgICAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3Rl bWxpc3QuaCAgICAgICAgICAgfCAgIDEgKwogMTMgZmlsZXMgY2hhbmdlZCwgNzUzIGluc2VydGlv bnMoKyksIDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL01ha2VmaWxlCmlu ZGV4IGEzMmY0NzNlMGEyLi5iYTBiZjM0Mzc2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vTWFr ZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAgT0JKUyA9IFwKIAl4bG9nYmFja3VwLm8gXAogCXhsb2dm dW5jcy5vIFwKIAl4bG9naW5zZXJ0Lm8gXAorCXhsb2dwaXBlbGluZS5vIFwKIAl4bG9ncHJlZmV0 Y2hlci5vIFwKIAl4bG9ncmVhZGVyLm8gXAogCXhsb2dyZWNvdmVyeS5vIFwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKaW5kZXggMDZhYWRjN2YzMTUuLmJlMzdiNDA1ODFkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNvbi5idWlsZAorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNvbi5idWlsZApAQCAtMjAsNiArMjAsNyBAQCBi YWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICd4bG9nYmFja3VwLmMnLAogICAneGxvZ2Z1bmNz LmMnLAogICAneGxvZ2luc2VydC5jJywKKyAgJ3hsb2dwaXBlbGluZS5jJywKICAgJ3hsb2dwcmVm ZXRjaGVyLmMnLAogICAneGxvZ3JlY292ZXJ5LmMnLAogICAneGxvZ3N0YXRzLmMnLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNDI0ZDMzMDk0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYwpAQCAtMCwwICsxLDYwMCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogeGxvZ3BpcGVsaW5lLmMKKyAqICAgIFdBTCByZXBsYXkg cGlwZWxpbmUgaW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEg cHJvZHVjZXItY29uc3VtZXIgcGlwZWxpbmUgZm9yIFdBTCByZXBsYXkuCisgKiBUaGUgcHJvZHVj ZXIgKGJhY2tncm91bmQgd29ya2VyKSByZWFkcyBhbmQgZGVjb2RlcyBXQUwgcmVjb3JkcyBpbiBw YXJhbGxlbAorICogd2l0aCB0aGUgY29uc3VtZXIgKHN0YXJ0dXAgcHJvY2VzcykgdGhhdCBhcHBs aWVzIHRoZW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAq ICAgIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwaXBlbGluZS5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmNu dGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW1feGxv Zy5oIgorI2luY2x1ZGUgImFjY2Vzcy9ybWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIK KyNpbmNsdWRlICJhY2Nlc3MveGxvZ3BpcGVsaW5lLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dw cmVmZXRjaGVyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ3JlY29yZC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJu YWwuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9zdGFydHVw LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbS5o IgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIK KyNpbmNsdWRlICJzdG9yYWdlL21kLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwu aCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3Rv Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lz dGVtcy5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGlscy9lbG9n LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZXNvd25l ci5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVvdXQuaCIK KworCisvKgorICogQ29udmVydCB2YWx1ZXMgb2YgR1VDcyBtZWFzdXJlZCBpbiBtZWdhYnl0ZXMg dG8gYnl0ZXMKKyAqLworI2RlZmluZSBNQlRvQnl0ZXMobWJ2YXIpIChtYnZhciAqIDEwMjQgKiAx MDI0KQorCisvKgorICogV2FpdGluZyBmb3IgY29uc3VtZXIgYmVmb3JlIGV4aXRpbmcgZ3JhY2Vm dWxseS4KKyAqLworI2RlZmluZSBNQVhfU0hVVERPV05fV0FJVF9JVEVSUyAxMDAwCS8qIDEwMDAg KiAxMG1zID0gMTAgc2Vjb25kcyAqLworCisKKy8qIEdsb2JhbCBzaGFyZWQgbWVtb3J5IGNvbnRy b2wgc3RydWN0dXJlICovCitXYWxQaXBlbGluZVNobUN0bCAqV2FsUGlwZWxpbmVTaG0gPSBOVUxM OworCitzdGF0aWMgdm9pZCBXYWxQaXBlbGluZVNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3Rh dGljIHZvaWQgV2FsUGlwZWxpbmVTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1D YWxsYmFja3MgV2FsUGlwZWxpbmVTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFdh bFBpcGVsaW5lU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gV2FsUGlwZWxpbmVTaG1lbUluaXQs Cit9OworCitYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXJfcGlwZWxpbmVkID0gTlVMTDsK KworLyogTG9jYWwgc3RhdGUgZm9yIHByb2R1Y2VyICovCitzdGF0aWMgZHNtX3NlZ21lbnQgKnBy b2R1Y2VyX2RzbV9zZWcgPSBOVUxMOworc3RhdGljIHNobV9tcSAqcHJvZHVjZXJfbXEgPSBOVUxM Oworc3RhdGljIHNobV9tcV9oYW5kbGUgKnByb2R1Y2VyX21xX2hhbmRsZSA9IE5VTEw7CisKKy8q IAorICogTG9jYWwgYnVmZmVyIGNvbnRhaW5pbmcgbXNnIGhlYWRlciB0aGF0IHdpbGwgYmUgc2Vu dCB0b2dldGhlciB3aXRoIHRoZSAKKyAqIGRlY29kZWQgZGF0YSwgdG8gdGhlIG1zZyBxdWV1ZQor ICovCitzdGF0aWMgV2FsUmVjb3JkTXNnSGVhZGVyIG1zZ2hkcjsKKworLyoKKyAqIEZsYWdzIHNl dCBieSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIGxhdGVyIHNlcnZpY2UgaW4gdGhlIHJlZG8gbG9v cC4KKyAqLworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBnb3RfU0lHSFVQID0gZmFsc2U7 CitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHByb21vdGVfc2lnbmFsZWQgPSBmYWxzZTsK KworLyogU2lnbmFsIGhhbmRsZXJzICovCitzdGF0aWMgdm9pZCBQaXBlbGluZUJnd1NpZ0h1cEhh bmRsZXIoU0lHTkFMX0FSR1MpOworc3RhdGljIHZvaWQgUGlwZWxpbmVQcm9jVHJpZ2dlckhhbmRs ZXIoU0lHTkFMX0FSR1MpOworCitzdGF0aWMgdm9pZCB3YWxfcGlwZWxpbmVfY2xlYW51cF9jYWxs YmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKTsKK3N0YXRpYyBTaXplIHNlcmlhbGl6ZV93YWxfcmVj b3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgc2htX21xX2lvdmVjICppb3YpOworc3Rh dGljIHZvaWQgY2xlYW51cF9wcm9kdWNlcl9yZXNvdXJjZXModm9pZCk7CisKKy8qIGNvcGllZCBm cm9tIHhsb2dyZWNvdmVyeS5jICovCisvKiBQYXJhbWV0ZXJzIHBhc3NlZCBkb3duIGZyb20gUmVh ZFJlY29yZCB0byB0aGUgWExvZ1BhZ2VSZWFkIGNhbGxiYWNrLiAqLwordHlwZWRlZiBzdHJ1Y3Qg WExvZ1BhZ2VSZWFkUHJpdmF0ZQoreworCWludAkJCWVtb2RlOworCWJvb2wJCWZldGNoaW5nX2Nr cHQ7CS8qIGFyZSB3ZSBmZXRjaGluZyBhIGNoZWNrcG9pbnQgcmVjb3JkPyAqLworCWJvb2wJCXJh bmRBY2Nlc3M7CisJVGltZUxpbmVJRAlyZXBsYXlUTEk7Cit9IFhMb2dQYWdlUmVhZFByaXZhdGU7 CisKKworLyoKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIFdBTCBQaXBlbGluZQorICov CitzdGF0aWMgdm9pZAorV2FsUGlwZWxpbmVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQoreworCVNo bWVtUmVxdWVzdFN0cnVjdCgubmFtZSA9ICJXQUwgUGlwZWxpbmUgQ3RsIiwKKwkJCQkJICAgLnNp emUgPSBzaXplb2YoV2FsUGlwZWxpbmVTaG1DdGwpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiop ICZXYWxQaXBlbGluZVNobSwKKwkJKTsKK30KKworc3RhdGljIHZvaWQKK1dhbFBpcGVsaW5lU2ht ZW1Jbml0KHZvaWQgKmFyZykKK3sKKwltZW1zZXQoV2FsUGlwZWxpbmVTaG0sIDAsIHNpemVvZihX YWxQaXBlbGluZVNobUN0bCkpOworCisJU3BpbkxvY2tJbml0KCZXYWxQaXBlbGluZVNobS0+bXV0 ZXgpOworfQorCisKKy8qCisgKiBQcm9kdWNlciBGdW5jdGlvbi4KKyAqIE1haW4gbG9vcCBmb3Ig dGhlIHByb2R1Y2VyIGJhY2tncm91bmQgd29ya2VyLgorICovCit2b2lkCitXYWxQaXBlbGluZV9Q cm9kdWNlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJZHNtX2hhbmRsZSAgICAgICAgICAgaGFu ZGxlID0gRGF0dW1HZXRVSW50MzIobWFpbl9hcmcpOworCWRzbV9zZWdtZW50ICAgICAgICAJKnNl ZzsKKwlzaG1fdG9jICAgICAgICAgICAgCSp0b2M7CisJV2FsUGlwZWxpbmVQYXJhbXMgIAkqcGFy YW1zOworCVhMb2dSZWFkZXJTdGF0ZSAgICAJKnhsb2dyZWFkZXI7CisJWExvZ1BhZ2VSZWFkUHJp dmF0ZSAqcHJpdmF0ZTsKKwlYTG9nUmVjb3JkICAgICAgICAgCSpyZWNvcmQ7CisJVGltZUxpbmVJ RCAgICAgICAgICAgcmVwbGF5VExJID0gMDsKKwlib29sIAkJCQkgZW5kX29mX3dhbCA9IGZhbHNl OworCXVpbnQ2NAkJCQkgcmVjb3Jkc19zZW50OworCXVpbnQ2NAkJCQkgcmVjb3Jkc19yZWNlaXZl ZDsKKworCS8qCisJICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRoZSBwb3N0 bWFzdGVyIG1pZ2h0IHNlbmQgdXMuCisJICovCisJcHFzaWduYWwoU0lHSFVQLCBQaXBlbGluZUJn d1NpZ0h1cEhhbmRsZXIpOyAJLyogcmVsb2FkIGNvbmZpZyBmaWxlICovCisJcHFzaWduYWwoU0lH VVNSMiwgUGlwZWxpbmVQcm9jVHJpZ2dlckhhbmRsZXIpOworCisJLyogUmVnaXN0ZXIgY2xlYW51 cCBjYWxsYmFjayAqLworCWJlZm9yZV9zaG1lbV9leGl0KHdhbF9waXBlbGluZV9jbGVhbnVwX2Nh bGxiYWNrLCAoRGF0dW0pIDApOworCisJc2VnID0gZHNtX2F0dGFjaChoYW5kbGUpOworCWlmIChz ZWcgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVD VF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJbd2FscGlwZWxpbmVd IHByb2R1Y2VyOiBjb3VsZCBub3QgbWFwIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50Iikp KTsKKworCXRvYyA9IHNobV90b2NfYXR0YWNoKFBHX1dBTF9QSVBFTElORV9NQUdJQywgZHNtX3Nl Z21lbnRfYWRkcmVzcyhzZWcpKTsKKwlpZiAodG9jID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSks CisJCQkJIGVycm1zZygiW3dhbHBpcGVsaW5lXSBwcm9kdWNlcjogYmFkIG1hZ2ljIG51bWJlciBp biBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisKKwkvKiBMb29rdXAgcGFyYW1z IGFuZCBxdWV1ZSAqLworCXBhcmFtcyA9IHNobV90b2NfbG9va3VwKHRvYywgMSwgZmFsc2UpOwor CXByb2R1Y2VyX21xID0gc2htX3RvY19sb29rdXAodG9jLCAyLCBmYWxzZSk7CisKKwkvKiBTZXQg dXAgcHJvZHVjZXIgc2lkZSBvZiBxdWV1ZSAqLworCXByb2R1Y2VyX2RzbV9zZWcgPSBzZWc7CisJ c2htX21xX3NldF9zZW5kZXIocHJvZHVjZXJfbXEsIE15UHJvYyk7CisJcHJvZHVjZXJfbXFfaGFu ZGxlID0gc2htX21xX2F0dGFjaChwcm9kdWNlcl9tcSwgc2VnLCBOVUxMKTsKKworCVNwaW5Mb2Nr QWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+cHJvZHVj ZXJfcGlkID0gTXlQcm9jUGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKworCS8qIERTTSBpcyBub3cgYXR0YWNoZWQsIHNvIHNhZmUgdG8gdW5ibG9jayB0aGUg c2lnbmFscyAqLworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyogU2V0 IHVwIFdBTCByZWFkaW5nIHByb2Nlc3NvciAqLworCXByaXZhdGUgPSBwYWxsb2MwKHNpemVvZihY TG9nUGFnZVJlYWRQcml2YXRlKSk7CisJeGxvZ3JlYWRlciA9CisJCVhMb2dSZWFkZXJBbGxvY2F0 ZSh3YWxfc2VnbWVudF9zaXplLCBOVUxMLAorCQkJCQkJICAgWExfUk9VVElORSgucGFnZV9yZWFk ID0gJlhMb2dQYWdlUmVhZCwKKwkJCQkJCQkJCSAgLnNlZ21lbnRfb3BlbiA9IE5VTEwsCisJCQkJ CQkJCQkgIC5zZWdtZW50X2Nsb3NlID0gd2FsX3NlZ21lbnRfY2xvc2UpLAorCQkJCQkJICAgcHJp dmF0ZSk7CisKKwlpZiAoIXhsb2dyZWFkZXIpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5Iiks CisJCQkJIGVycmRldGFpbCgiRmFpbGVkIHdoaWxlIGFsbG9jYXRpbmcgYSBXQUwgcmVhZGluZyBw cm9jZXNzb3IuIikpKTsKKwl4bG9ncmVhZGVyLT5zeXN0ZW1faWRlbnRpZmllciA9IEdldFN5c3Rl bUlkZW50aWZpZXIoKTsKKworCS8qCisJICogU2V0IHRoZSBXQUwgZGVjb2RlIGJ1ZmZlciBzaXpl LiAgVGhpcyBsaW1pdHMgaG93IGZhciBhaGVhZCB3ZSBjYW4gcmVhZAorCSAqIGluIHRoZSBXQUwu CisJICovCisJWExvZ1JlYWRlclNldERlY29kZUJ1ZmZlcih4bG9ncmVhZGVyLCBOVUxMLCB3YWxf ZGVjb2RlX2J1ZmZlcl9zaXplKTsKKworCS8qIEluaXQgc29tZSBpbXBvcnRhbnQgZ2xvYmFscyBi ZWZvcmUgc3RhcnRpbmcgKi8KKwlyZXBsYXlUTEkgPSBwYXJhbXMtPlJlcGxheVRMSTsKKwlXYWxQ aXBlbGluZV9JbXBvcnRSZWNvdmVyeVN0YXRlKHBhcmFtcyk7CisKKwkvKiBSZWluaXQgdGhlIFdB TCBwcmVmZXRjaGVyLiAqLworCXhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCA9IFhMb2dQcmVmZXRj aGVyQWxsb2NhdGUoeGxvZ3JlYWRlcik7CisKKworCWVsb2coTE9HLCAiW3dhbHBpcGVsaW5lXSBw cm9kdWNlcjogc3RhcnRlZCBhdCAlWC8lWCwgVExJICV1IiwKKwkJIExTTl9GT1JNQVRfQVJHUyhw YXJhbXMtPk5leHRSZWNQdHIpLCByZXBsYXlUTEkpOworCisJWExvZ1ByZWZldGNoZXJCZWdpblJl YWQoeGxvZ3ByZWZldGNoZXJfcGlwZWxpbmVkLCBwYXJhbXMtPk5leHRSZWNQdHIpOworCisJLyog SGFuZGxlIHRoZSBzaWduYWwgaWYgd2Ugd2VyZSBwcm9tb3RlZCBiZWZvcmUgdGhlIHBpcGVsaW5l IGxhdW5jaCAqLworCXByb21vdGVfc2lnbmFsZWQgPSBwYXJhbXMtPnByb21vdGVkQmVmb3JlTGF1 bmNoOworCisJLyogTWFpbiBkZWNvZGluZyBsb29wICovCisJd2hpbGUgKHRydWUpCisJeworCQli b29sIHNodXRkb3duX3JlcXVlc3RlZDsKKworCQkvKiBDaGVjayBpZiBjb25zdW1lciByZXF1ZXN0 ZWQgdG8gc3RvcCBkZWNvZGluZyAqLworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2ht LT5tdXRleCk7CisJCXNodXRkb3duX3JlcXVlc3RlZCA9IFdhbFBpcGVsaW5lU2htLT5zaHV0ZG93 bl9yZXF1ZXN0ZWQ7CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsK KworCQlpZiAoc2h1dGRvd25fcmVxdWVzdGVkKQorCQl7CisJCQllbG9nKERFQlVHMSwgIlt3YWxw aXBlbGluZV0gcHJvZHVjZXI6IGdvdCBzaHV0ZG93biByZXF1ZXN0IGZyb20gdGhlIGNvbnN1bWVy LiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBSZWFkIG5leHQgV0FMIHJlY29yZCAqLworCQly ZWNvcmQgPSBSZWFkUmVjb3JkKHhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCwgTE9HLCBmYWxzZSwg cmVwbGF5VExJKTsKKworCQlpZiAocmVjb3JkID09IE5VTEwpCisJCXsKKwkJCWVuZF9vZl93YWwg PSB0cnVlOworCQkJZWxvZyhERUJVRzEsICJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiByZWFjaGVk IGVuZCBvZiBXQUwiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogU3VjY2Vzc2Z1bGx5 IGRlY29kZWQgYSByZWNvcmQuIFNlbmQgaXQgdG8gdGhlIGNvbnN1bWVyLgorCQkgKi8KKwkJaWYg KCFXYWxQaXBlbGluZV9TZW5kUmVjb3JkKHhsb2dyZWFkZXIpKQorCQl7CisJCQllbG9nKFdBUk5J TkcsICJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiBmYWlsZWQgdG8gc2VuZCByZWNvcmQsIHF1ZXVl IGZ1bGwgb3IgZGV0YWNoZWQiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVXBkYXRlIG91ciBw b3NpdGlvbiBmb3IgbW9uaXRvcmluZyAqLworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5l U2htLT5tdXRleCk7CisJCVdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9sc24gPSB4bG9ncmVhZGVy LT5FbmRSZWNQdHI7CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsK KworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCX0KKworCisJaWYgKGVuZF9vZl93YWwpCisJ eworCQkvKiBOb3RpZnkgY29uc3VtZXIgd2UgbmVlZCB0byBleGl0IGFzIG5vIG1vcmUgcmVjb3Jk cyBmb3VuZCAqLworCQlXYWxQaXBlbGluZV9TZW5kU2h1dGRvd24oKTsKKwkJV2FsUGlwZWxpbmVf V2FpdEZvckNvbnN1bWVyU2h1dGRvd25SZXF1ZXN0KCk7CisJfQorCisJU3BpbkxvY2tBY3F1aXJl KCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCXJlY29yZHNfc2VudCA9IFdhbFBpcGVsaW5lU2ht LT5yZWNvcmRzX3NlbnQ7CisJcmVjb3Jkc19yZWNlaXZlZCA9IFdhbFBpcGVsaW5lU2htLT5yZWNv cmRzX3JlY2VpdmVkOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsK KworCWVsb2coTE9HLCAiW3dhbHBpcGVsaW5lXSBwcm9kdWNlcjogZXhpdGluZzogc2VudD0iIFVJ TlQ2NF9GT1JNQVQgIiByZWNlaXZlZD0iIFVJTlQ2NF9GT1JNQVQsCisJCSByZWNvcmRzX3NlbnQs IHJlY29yZHNfcmVjZWl2ZWQpOworCisJLyogQ2xlYW51cCAqLworCXBmcmVlKHByaXZhdGUpOwor CVhMb2dSZWFkZXJGcmVlKHhsb2dyZWFkZXIpOworCVhMb2dQcmVmZXRjaGVyRnJlZSh4bG9ncHJl ZmV0Y2hlcl9waXBlbGluZWQpOworCURpc293blJlY292ZXJ5V2FrZXVwTGF0Y2goKTsKKwljbGVh bnVwX3Byb2R1Y2VyX3Jlc291cmNlcygpOworfQorCisvKgorICogRml4IHVwIHRoZSBpbnRlcmlv ciBwb2ludGVyczogbWFpbl9kYXRhIGFuZCBlYWNoIGJsb2NrJ3MgZGF0YS9ia3BfaW1hZ2UKKyAq IGFyZSBhYnNvbHV0ZSBhZGRyZXNzZXMgaW4gdGhlIHByb2R1Y2VyLiBDb252ZXJ0IHRoZW0gdG8g Ynl0ZSBvZmZzZXRzCisgKiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgRGVjb2RlZFhMb2dSZWNvcmQg c28gdGhlIGNvbnN1bWVyIGNhbgorICogcmVjb25zdHJ1Y3QgdGhlbS4KKyAqLworc3RhdGljIHZv aWQKK3NldF9wdHJzX3RvX29mZnNldHMoRGVjb2RlZFhMb2dSZWNvcmQgKmRlYykKK3sKKwlpZiAo ZGVjLT5tYWluX2RhdGFfbGVuID4gMCkKKwkJZGVjLT5tYWluX2RhdGEgPSAoY2hhciAqKSgoY2hh ciAqKWRlYy0+bWFpbl9kYXRhIC0gKGNoYXIgKilkZWMpOworCisJZm9yIChpbnQgaSA9IDA7IGkg PD0gZGVjLT5tYXhfYmxvY2tfaWQ7IGkrKykKKwl7CisJCURlY29kZWRCa3BCbG9jayAqYmxrID0g JmRlYy0+YmxvY2tzW2ldOworCQlpZiAoIWJsay0+aW5fdXNlKQorCQkJY29udGludWU7CisJCWlm IChibGstPmhhc19kYXRhKQorCQkJYmxrLT5kYXRhID0gKGNoYXIgKikoKGNoYXIgKilibGstPmRh dGEgLSAoY2hhciAqKWRlYyk7CisJCWlmIChibGstPmhhc19pbWFnZSkKKwkJCWJsay0+YmtwX2lt YWdlID0gKGNoYXIgKikoKGNoYXIgKilibGstPmJrcF9pbWFnZSAtIChjaGFyICopZGVjKTsKKwl9 Cit9CisKKy8qCisgKiBSZXN0b3JlIGludGVyaW9yIHBvaW50ZXJzIGZyb20gb2Zmc2V0cy4KKyAq Lworc3RhdGljIHZvaWQKK3Jlc2V0X29mZnNldHNfdG9fcHRycyhEZWNvZGVkWExvZ1JlY29yZCAq ZGVjKQoreworCisJaWYgKGRlYy0+bWFpbl9kYXRhX2xlbiA+IDApCisJCWRlYy0+bWFpbl9kYXRh ID0gKGNoYXIgKilkZWMgKyAocHRyZGlmZl90KWRlYy0+bWFpbl9kYXRhOworCisJZm9yIChpbnQg aSA9IDA7IGkgPD0gZGVjLT5tYXhfYmxvY2tfaWQ7IGkrKykKKwl7CisJCURlY29kZWRCa3BCbG9j ayAqYmxrID0gJmRlYy0+YmxvY2tzW2ldOworCQlpZiAoIWJsay0+aW5fdXNlKQorCQkJY29udGlu dWU7CisJCWlmIChibGstPmhhc19kYXRhKQorCQkJYmxrLT5kYXRhID0gKGNoYXIgKilkZWMgKyAo cHRyZGlmZl90KWJsay0+ZGF0YTsKKwkJaWYgKGJsay0+aGFzX2ltYWdlKQorCQkJYmxrLT5ia3Bf aW1hZ2UgPSAoY2hhciAqKWRlYyArIChwdHJkaWZmX3QpYmxrLT5ia3BfaW1hZ2U7CisJfQorfQor CisvKgorICogUHJvZHVjZXIgRnVuY3Rpb24uCisgKiBTZW5kIGEgZGVjb2RlZCBXQUwgcmVjb3Jk IHRvIHRoZSBjb25zdW1lcgorICovCitib29sCitXYWxQaXBlbGluZV9TZW5kUmVjb3JkKFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCVNpemUgICAgICAgIG1zZ2xlbjsKKwlzaG1fbXFfcmVz dWx0IHJlczsKKwlzaG1fbXFfaW92ZWMgaW92WzJdOworCisKKwlpZiAoIXByb2R1Y2VyX21xX2hh bmRsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogU2VyaWFsaXplIHRoZSBkZWNvZGVkIGRhdGEg Ki8KKwltc2dsZW4gPSBzZXJpYWxpemVfd2FsX3JlY29yZChyZWNvcmQsIGlvdik7CisKKwlyZXMg PSBzaG1fbXFfc2VuZHYocHJvZHVjZXJfbXFfaGFuZGxlLCBpb3YsIDIsIGZhbHNlLCB0cnVlKTsK KwkKKwkvKgorCSAqIFJlc2V0IHRoZSBvZmZzZXRzIHRvIGV4YWN0IHB0cnMgYmVjYXVzZSBkZWNv ZGVkIHJlY29yZCBkYXRhIHN0aWxsCisJICogbmVlZGVkIGJ5IHRoZSBwcm9kdWNlciByZWFkZXIg c3RhdGUKKwkgKi8KKwlyZXNldF9vZmZzZXRzX3RvX3B0cnMocmVjb3JkLT5yZWNvcmQpOworCisJ aWYgKHJlcyA9PSBTSE1fTVFfU1VDQ0VTUykKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlw ZWxpbmVTaG0tPm11dGV4KTsKKwkJV2FsUGlwZWxpbmVTaG0tPnJlY29yZHNfc2VudCsrOworCQlX YWxQaXBlbGluZVNobS0+Ynl0ZXNfc2VudCArPSBtc2dsZW47CisJCVNwaW5Mb2NrUmVsZWFzZSgm V2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAocmVz ID09IFNITV9NUV9ERVRBQ0hFRCkKKwl7CisJCWVsb2coUEFOSUMsICJbd2FscGlwZWxpbmVdIHBy b2R1Y2VyOiBjb25zdW1lciBkZXRhY2hlZCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyog U29tZSBvdGhlciBlcnJvciAqLworCWVsb2coUEFOSUMsICJbd2FscGlwZWxpbmVdIHByb2R1Y2Vy OiBzaG1fbXFfc2VuZCBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLCByZXMpOworCXJldHVybiBmYWxz ZTsKK30KKworLyoKKyAqIFByb2R1Y2VyIEZ1bmN0aW9uLgorICogU2VuZCBzaHV0ZG93biBtZXNz YWdlIHRvIGNvbnN1bWVyCisgKi8KK2Jvb2wKK1dhbFBpcGVsaW5lX1NlbmRTaHV0ZG93bih2b2lk KQoreworCVdhbFJlY29yZE1zZ0hlYWRlciBoZHI7CisJc2htX21xX3Jlc3VsdCByZXM7CisKKwlp ZiAoIXByb2R1Y2VyX21xX2hhbmRsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaGRyLm1zZ190eXBl ID0gV0FMX01TR19TSFVURE9XTjsKKwloZHIuZW5kUmVjUHRyID0gSW52YWxpZFhMb2dSZWNQdHI7 CisKKwlyZXMgPSBzaG1fbXFfc2VuZChwcm9kdWNlcl9tcV9oYW5kbGUsIHNpemVvZihoZHIpLCAm aGRyLCBmYWxzZSwgdHJ1ZSk7CisJcmV0dXJuIChyZXMgPT0gU0hNX01RX1NVQ0NFU1MpOworfQor CisKKy8qCisgKiBzZXJpYWxpemVfd2FsX3JlY29yZCAoUHJvZHVjZXIpCisgKgorICogUGFjayBh IFdhbFJlY29yZE1zZ0hlYWRlciBmb2xsb3dlZCBieSB0aGUgRGVjb2RlZFhMb2dSZWNvcmQgaW50 byBhCisgKiBzaG1fbXFfaW92ZWMsIGNvbnZlcnRpbmcgaW50ZXJpb3IgcG9pbnRlcnMgdG8gcmVs YXRpdmUgb2Zmc2V0cy4KKyAqCisgKiBEYXRhIGxheW91dDoKKyAqICAgW1dhbFJlY29yZE1zZ0hl YWRlcl1bRGVjb2RlZFhMb2dSZWNvcmQgKyB0cmFpbGluZyBkYXRhXQorICovCitzdGF0aWMgU2l6 ZQorc2VyaWFsaXplX3dhbF9yZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBzaG1f bXFfaW92ZWMgKmlvdikKK3sKKwlEZWNvZGVkWExvZ1JlY29yZCAqZGVjID0geGxvZ3JlYWRlci0+ cmVjb3JkOworCVNpemUgcGF5bG9hZF9zaXplID0gZGVjLT5zaXplOworCisJLyogYnVpbGQgaGVh ZGVyICovCisJbXNnaGRyLm1zZ190eXBlICAgICAgICAgID0gV0FMX01TR19SRUNPUkQ7CisJbXNn aGRyLnJlYWRSZWNQdHIgICAgICAgID0geGxvZ3JlYWRlci0+UmVhZFJlY1B0cjsKKwltc2doZHIu ZW5kUmVjUHRyICAgICAgICAgPSB4bG9ncmVhZGVyLT5FbmRSZWNQdHI7CisJbXNnaGRyLm1pc3Np bmdDb250cmVjUHRyID0geGxvZ3JlYWRlci0+bWlzc2luZ0NvbnRyZWNQdHI7CisJbXNnaGRyLmFi b3J0ZWRSZWNQdHIgICAgID0geGxvZ3JlYWRlci0+YWJvcnRlZFJlY1B0cjsKKwltc2doZHIub3Zl cndyaXR0ZW5SZWNQdHIgPSB4bG9ncmVhZGVyLT5vdmVyd3JpdHRlblJlY1B0cjsKKwltc2doZHIu ZGVjb2RlZF9zaXplICAgICAgPSBwYXlsb2FkX3NpemU7CisKKwlzZXRfcHRyc190b19vZmZzZXRz KGRlYyk7CisKKwlpb3ZbMF0uZGF0YSA9IChjaGFyICopICZtc2doZHI7CisJaW92WzBdLmxlbiAg PSBzaXplb2YoV2FsUmVjb3JkTXNnSGVhZGVyKTsKKworCWlvdlsxXS5kYXRhID0gKGNoYXIgKikg ZGVjOworCWlvdlsxXS5sZW4gID0gcGF5bG9hZF9zaXplOworCisJcmV0dXJuIHNpemVvZihXYWxS ZWNvcmRNc2dIZWFkZXIpICsgcGF5bG9hZF9zaXplOzsKK30KKworLyoKKyAqIFdlIG5lZWQgdG8g cHV0IHNvbWUgYXNzZXJ0aW9uIHRoYXQgb25seSBwaXBlbGluZSB3b3JrZXIgc2hvdWxkIGJlIHRv dWNoaW5nCisgKiB0aGUgc3BlY2lmaWMgY29kZS4KKyAqLworYm9vbCBBbVdhbFBpcGVsaW5lKHZv aWQpCit7CisJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9CR19XT1JLRVIgJiYgTXlCZ3dvcmtlckVu dHJ5KQorCXsKKwkJaWYgKHN0cm5jbXAoTXlCZ3dvcmtlckVudHJ5LT5iZ3dfbmFtZSwgIndhbCBw aXBlbGluZSIsIDEyKSA9PSAwKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNl OworfQorCisvKgorICogQ2xlYW4gdXAgcHJvZHVjZXItc2lkZSByZXNvdXJjZXMKKyAqLworc3Rh dGljIHZvaWQKK2NsZWFudXBfcHJvZHVjZXJfcmVzb3VyY2VzKHZvaWQpCit7CisJaWYgKHByb2R1 Y2VyX21xX2hhbmRsZSkKKwl7CisJCXNobV9tcV9kZXRhY2gocHJvZHVjZXJfbXFfaGFuZGxlKTsK KwkJcHJvZHVjZXJfbXFfaGFuZGxlID0gTlVMTDsKKwl9CisKKwlpZiAocHJvZHVjZXJfZHNtX3Nl ZykKKwl7CisJCWRzbV9kZXRhY2gocHJvZHVjZXJfZHNtX3NlZyk7CisJCXByb2R1Y2VyX2RzbV9z ZWcgPSBOVUxMOworCX0KKworCXByb2R1Y2VyX21xID0gTlVMTDsKKworCVNwaW5Mb2NrQWNxdWly ZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+cHJvZHVjZXJfcGlk ID0gMDsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7Cit9CisKKwor LyoKKyAqIENsZWFudXAgY2FsbGJhY2sgZm9yIHByb2Nlc3MgZXhpdAorICovCitzdGF0aWMgdm9p ZAord2FsX3BpcGVsaW5lX2NsZWFudXBfY2FsbGJhY2soaW50IGNvZGUsIERhdHVtIGFyZykKK3sK KwlwaWRfdCBteXBpZCA9IE15UHJvY1BpZDsKKwlib29sIGlzX3Byb2R1Y2VyID0gZmFsc2U7CisK KwlpZiAoV2FsUGlwZWxpbmVTaG0pCisJeworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5l U2htLT5tdXRleCk7CisJCWlzX3Byb2R1Y2VyID0gKFdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9w aWQgPT0gbXlwaWQpOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7 CisJfQorCisJaWYgKGlzX3Byb2R1Y2VyKQorCQljbGVhbnVwX3Byb2R1Y2VyX3Jlc291cmNlcygp OworCWVsc2UKKwkJY2xlYW51cF9jb25zdW1lcl9yZXNvdXJjZXMoKTsKK30KKworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlzaWduYWwgaGFuZGxlciByb3V0aW5lcwor ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisgLyogU0lHVVNSMjog c2V0IGZsYWcgdG8gZmluaXNoIHJlY292ZXJ5ICovCitzdGF0aWMgdm9pZAorUGlwZWxpbmVQcm9j VHJpZ2dlckhhbmRsZXIoU0lHTkFMX0FSR1MpCit7CisJcHJvbW90ZV9zaWduYWxlZCA9IHRydWU7 CisJV2FrZXVwUmVjb3ZlcnkoKTsKK30KKworLyogU0lHSFVQOiBzZXQgZmxhZyB0byByZS1yZWFk IGNvbmZpZyBmaWxlIGF0IG5leHQgY29udmVuaWVudCB0aW1lICovCitzdGF0aWMgdm9pZAorUGlw ZWxpbmVCZ3dTaWdIdXBIYW5kbGVyKFNJR05BTF9BUkdTKQoreworCWdvdF9TSUdIVVAgPSB0cnVl OworCVdha2V1cFJlY292ZXJ5KCk7Cit9CisKKy8qCisgKiBSZS1yZWFkIHRoZSBjb25maWcgZmls ZS4KKyAqCisgKiBJZiBvbmUgb2YgdGhlIGNyaXRpY2FsIHdhbHJlY2VpdmVyIG9wdGlvbnMgaGFz IGNoYW5nZWQsIGZsYWcgeGxvZ3JlY292ZXJ5LmMKKyAqIHRvIHJlc3RhcnQgaXQuCisgKi8KK3N0 YXRpYyB2b2lkCitQaXBlbGluZVJlcmVhZENvbmZpZyh2b2lkKQoreworCWNoYXIJICAgKmNvbm5p bmZvID0gcHN0cmR1cChQcmltYXJ5Q29ubkluZm8pOworCWNoYXIJICAgKnNsb3RuYW1lID0gcHN0 cmR1cChQcmltYXJ5U2xvdE5hbWUpOworCWJvb2wJCXRlbXBTbG90ID0gd2FsX3JlY2VpdmVyX2Ny ZWF0ZV90ZW1wX3Nsb3Q7CisJYm9vbAkJY29ubmluZm9DaGFuZ2VkOworCWJvb2wJCXNsb3RuYW1l Q2hhbmdlZDsKKwlib29sCQl0ZW1wU2xvdENoYW5nZWQgPSBmYWxzZTsKKworCVByb2Nlc3NDb25m aWdGaWxlKFBHQ19TSUdIVVApOworCisJY29ubmluZm9DaGFuZ2VkID0gc3RyY21wKGNvbm5pbmZv LCBQcmltYXJ5Q29ubkluZm8pICE9IDA7CisJc2xvdG5hbWVDaGFuZ2VkID0gc3RyY21wKHNsb3Ru YW1lLCBQcmltYXJ5U2xvdE5hbWUpICE9IDA7CisKKwkvKgorCSAqIHdhbF9yZWNlaXZlcl9jcmVh dGVfdGVtcF9zbG90IGlzIHVzZWQgb25seSB3aGVuIHdlIGhhdmUgbm8gc2xvdAorCSAqIGNvbmZp Z3VyZWQuICBXZSBkbyBub3QgbmVlZCB0byB0cmFjayB0aGlzIGNoYW5nZSBpZiBpdCBoYXMgbm8g ZWZmZWN0LgorCSAqLworCWlmICghc2xvdG5hbWVDaGFuZ2VkICYmIHN0cmNtcChQcmltYXJ5U2xv dE5hbWUsICIiKSA9PSAwKQorCQl0ZW1wU2xvdENoYW5nZWQgPSB0ZW1wU2xvdCAhPSB3YWxfcmVj ZWl2ZXJfY3JlYXRlX3RlbXBfc2xvdDsKKwlwZnJlZShjb25uaW5mbyk7CisJcGZyZWUoc2xvdG5h bWUpOworCisJaWYgKGNvbm5pbmZvQ2hhbmdlZCB8fCBzbG90bmFtZUNoYW5nZWQgfHwgdGVtcFNs b3RDaGFuZ2VkKQorCQlTdGFydHVwUmVxdWVzdFdhbFJlY2VpdmVyUmVzdGFydCgpOworfQorCiti b29sCitJc1Byb21vdGVTaWduYWxlZFBpcGVsaW5lKHZvaWQpCit7CisJcmV0dXJuIHByb21vdGVf c2lnbmFsZWQ7Cit9CisKK3ZvaWQKK1Jlc2V0UHJvbW90ZVNpZ25hbGVkUGlwZWxpbmUodm9pZCkK K3sKKwlwcm9tb3RlX3NpZ25hbGVkID0gZmFsc2U7Cit9CisKKy8qCisgKiBQcm9jZXNzIGFueSBy ZXF1ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5LgorICovCit2b2lkCitQcm9jZXNz UGlwZWxpbmVCZ3dJbnRlcnJ1cHRzKHZvaWQpCit7CisKKwlib29sIHNodXRkb3duX3JlcXVlc3Rl ZDsKKworCWlmIChnb3RfU0lHSFVQKQorCXsKKwkJZ290X1NJR0hVUCA9IGZhbHNlOworCQlQaXBl bGluZVJlcmVhZENvbmZpZygpOworCX0KKworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKKwlzaHV0ZG93bl9yZXF1ZXN0ZWQgPSBXYWxQaXBlbGluZVNobS0+c2h1dGRv d25fcmVxdWVzdGVkOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsK KworCWlmIChzaHV0ZG93bl9yZXF1ZXN0ZWQpCisJCXByb2NfZXhpdCgwKTsKKworCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKaW5kZXggZGZmNTc2NDJhYjQuLjEw NGFlN2FiMDM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJl ZmV0Y2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVy LmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRl ICJhY2Nlc3MveGxvZ3BpcGVsaW5lLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dwcmVmZXRjaGVy LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbnRyb2wuaCIKQEAgLTM1NSw3ICszNTYsNyBAQCBYTG9nUHJlZmV0Y2hSZWNvbmZpZ3VyZSh2 b2lkKQogc3RhdGljIGlubGluZSB2b2lkCiBYTG9nUHJlZmV0Y2hJbmNyZW1lbnQocGdfYXRvbWlj X3VpbnQ2NCAqY291bnRlcikKIHsKLQlBc3NlcnQoQW1TdGFydHVwUHJvY2VzcygpIHx8ICFJc1Vu ZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KEFtU3RhcnR1cFByb2Nlc3MoKSB8fCBBbVdhbFBpcGVs aW5lKCkgfHwgIUlzVW5kZXJQb3N0bWFzdGVyKTsKIAlwZ19hdG9taWNfd3JpdGVfdTY0KGNvdW50 ZXIsIHBnX2F0b21pY19yZWFkX3U2NChjb3VudGVyKSArIDEpOwogfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IGMwYWU0ZDNmNjNmLi5jN2ExNmQ5OTE4 MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTMxMDQs NyArMzEwNCw3IEBAIENvbmZpcm1SZWNvdmVyeVBhdXNlZCh2b2lkKQogICogKGVtb2RlIG11c3Qg YmUgZWl0aGVyIFBBTklDLCBMT0cpLiBJbiBzdGFuZGJ5IG1vZGUsIHJldHJpZXMgdW50aWwgYSB2 YWxpZAogICogcmVjb3JkIGlzIGF2YWlsYWJsZS4KICAqLwotc3RhdGljIFhMb2dSZWNvcmQgKgor WExvZ1JlY29yZCAqCiBSZWFkUmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwg aW50IGVtb2RlLAogCQkgICBib29sIGZldGNoaW5nX2NrcHQsIFRpbWVMaW5lSUQgcmVwbGF5VExJ KQogewpAQCAtMzExMiw3ICszMTEyLDcgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxv Z3ByZWZldGNoZXIsIGludCBlbW9kZSwKIAlYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIgPSBY TG9nUHJlZmV0Y2hlckdldFJlYWRlcih4bG9ncHJlZmV0Y2hlcik7CiAJWExvZ1BhZ2VSZWFkUHJp dmF0ZSAqcHJpdmF0ZSA9IChYTG9nUGFnZVJlYWRQcml2YXRlICopIHhsb2dyZWFkZXItPnByaXZh dGVfZGF0YTsKIAotCUFzc2VydChBbVN0YXJ0dXBQcm9jZXNzKCkgfHwgIUlzVW5kZXJQb3N0bWFz dGVyKTsKKwlBc3NlcnQoQW1TdGFydHVwUHJvY2VzcygpIHx8IEFtV2FsUGlwZWxpbmUoKSB8fCAh SXNVbmRlclBvc3RtYXN0ZXIpOwogCiAJLyogUGFzcyB0aHJvdWdoIHBhcmFtZXRlcnMgdG8gWExv Z1BhZ2VSZWFkICovCiAJcHJpdmF0ZS0+ZmV0Y2hpbmdfY2twdCA9IGZldGNoaW5nX2NrcHQ7CkBA IC0zMjczLDcgKzMyNzMsNyBAQCBSZWFkUmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0 Y2hlciwgaW50IGVtb2RlLAogICogWExvZ1BhZ2VSZWFkKCkgdG8gdHJ5IGZldGNoaW5nIHRoZSBy ZWNvcmQgZnJvbSBhbm90aGVyIHNvdXJjZSwgb3IgdG8KICAqIHNsZWVwIGFuZCByZXRyeS4KICAq Lwotc3RhdGljIGludAoraW50CiBYTG9nUGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVh ZGVyLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsIGludCByZXFMZW4sCiAJCQkgWExvZ1JlY1B0 ciB0YXJnZXRSZWNQdHIsIGNoYXIgKnJlYWRCdWYpCiB7CkBAIC0zMjg1LDcgKzMyODUsNyBAQCBY TG9nUGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjUHRyIHRhcmdl dFBhZ2VQdHIsIGludCByZXFMZW4sCiAJaW50CQkJcjsKIAlpbnN0cl90aW1lCWlvX3N0YXJ0Owog Ci0JQXNzZXJ0KEFtU3RhcnR1cFByb2Nlc3MoKSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIpOworCUFz c2VydChBbVN0YXJ0dXBQcm9jZXNzKCkgfHwgQW1XYWxQaXBlbGluZSgpfHwgIUlzVW5kZXJQb3N0 bWFzdGVyKTsKIAogCVhMQnl0ZVRvU2VnKHRhcmdldFBhZ2VQdHIsIHRhcmdldFNlZ05vLCB3YWxf c2VnbWVudF9zaXplKTsKIAl0YXJnZXRQYWdlT2ZmID0gWExvZ1NlZ21lbnRPZmZzZXQodGFyZ2V0 UGFnZVB0ciwgd2FsX3NlZ21lbnRfc2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5k ZXggMmU0YWNhZDRmMDAuLjI0YjE4OGYxYWY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j CkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFj Y2Vzcy9wYXJhbGxlbC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNs dWRlICJjb21tYW5kcy9yZXBhY2suaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMTY2LDYgKzE2NywxMCBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0CiAJewogCQkuZm5fbmFtZSA9ICJEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbiIsCiAJCS5mbl9h ZGRyID0gRGF0YUNoZWNrc3Vtc1dvcmtlck1haW4KKwl9LAorCXsKKwkJLmZuX25hbWUgPSAiV2Fs UGlwZWxpbmVfUHJvZHVjZXJNYWluIiwKKwkJLmZuX2FkZHIgPSBXYWxQaXBlbGluZV9Qcm9kdWNl ck1haW4KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDkwYzdj NDUyOGU4Li5iYzAyMzljMGNmZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9w b3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAg LTkxLDYgKzkxLDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hsb2dfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3BpcGVsaW5lLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3Bl cm0uaCIKICNpbmNsdWRlICJjb21tb24vcGdfcHJuZy5oIgpAQCAtMzkzNiwxMiArMzkzNywyMSBA QCBwcm9jZXNzX3BtX3Btc2lnbmFsKHZvaWQpCiAJCUNoZWNrUHJvbW90ZVNpZ25hbCgpKQogCXsK IAkJLyoKLQkJICogVGVsbCBzdGFydHVwIHByb2Nlc3MgdG8gZmluaXNoIHJlY292ZXJ5LgorCQkg KiBUZWxsIHN0YXJ0dXAgcHJvY2VzcyB0byBmaW5pc2ggcmVjb3ZlcnkuIEluY2FzZSBwaXBlbGlu ZSBpcyBlbmFibGVkCisJCSAqIGFsc28gc2lnbmFsIHRoZSBwaXBlbGluZSB3b3JrZXIuCiAJCSAq CiAJCSAqIExlYXZlIHRoZSBwcm9tb3RlIHNpZ25hbCBmaWxlIGluIHBsYWNlIGFuZCBsZXQgdGhl IFN0YXJ0dXAgcHJvY2VzcwogCQkgKiBkbyB0aGUgdW5saW5rLgogCQkgKi8KIAkJc2lnbmFsX2No aWxkKFN0YXJ0dXBQTUNoaWxkLCBTSUdVU1IyKTsKKworCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJs ZWQgJiYgV2FsUGlwZWxpbmVfSXNBY3RpdmUoKSkKKwkJeworCQkJcGlkX3QgcGlwZWxpbmVfYmd3 ID0gV2FsUGlwZWxpbmVfR2V0UHJvZHVjZXJQaWQoKTsKKworCQkJaWYgKHBpcGVsaW5lX2JndyAh PSBJbnZhbGlkUGlkKQorCQkJCXNpZ25hbF9jaGlsZChGaW5kUG9zdG1hc3RlckNoaWxkQnlQaWQo cGlwZWxpbmVfYmd3KSwgU0lHVVNSMik7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYzkxMThlNzE5ODguLjEzYjAwMGY1ZGIzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMzUxNiw2ICsz NTE2LDIxIEBACiAgIGJvb3RfdmFsID0+ICdmYWxzZScsCiB9LAogCit7IG5hbWUgPT4gJ3dhbF9w aXBlbGluZScsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfUE9TVE1BU1RFUicsIGdy b3VwID0+ICdXQUxfUkVDT1ZFUlknLAorICBzaG9ydF9kZXNjID0+ICdVc2UgcGFyYWxsZWwgd29y a2VycyB0byBzcGVlZHVwIHJlY292ZXJ5LicsCisgIHZhcmlhYmxlID0+ICd3YWxfcGlwZWxpbmVf ZW5hYmxlZCcsCisgIGJvb3RfdmFsID0+ICdmYWxzZScsCit9LAorCit7IG5hbWUgPT4gJ3dhbF9w aXBlbGluZV9xdWV1ZV9zaXplJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1BPU1RN QVNURVInLCBncm91cCA9PiAnV0FMX1JFQ09WRVJZJywKKyAgc2hvcnRfZGVzYyA9PiAnU2l6ZSBv ZiB0aGUgc2hhcmVkIG1lbW9yeSBxdWV1ZSB1c2VkIGJ5IHRoZSBXQUwgcGlwZWxpbmUuJywKKyAg ZmxhZ3MgPT4gJ0dVQ19VTklUX01CJywKKyAgdmFyaWFibGUgPT4gJ3dhbF9waXBlbGluZV9tcV9z aXplX21iJywKKyAgYm9vdF92YWwgPT4gJzEyOCcsCisgIG1pbiA9PiAnMScsCisgIG1heCA9PiAn MTAyNCcsCit9LAorCiB7IG5hbWUgPT4gJ3dhbF9yZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90Jywg dHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElD QVRJT05fU1RBTkRCWScsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldHMgd2hldGhlciBhIFdBTCByZWNl aXZlciBzaG91bGQgY3JlYXRlIGEgdGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3QgaWYgbm8gcGVy bWFuZW50IHNsb3QgaXMgY29uZmlndXJlZC4nLAogICB2YXJpYWJsZSA9PiAnd2FsX3JlY2VpdmVy X2NyZWF0ZV90ZW1wX3Nsb3QnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCmluZGV4IGQ3OTQyZjUwYTcwLi5iOTRhMDUwOWVkMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMjg4LDYgKzI4OCw4 IEBACiAjcmVjb3ZlcnlfcHJlZmV0Y2ggPSB0cnkgICAgICAgICMgcHJlZmV0Y2ggcGFnZXMgcmVm ZXJlbmNlZCBpbiB0aGUgV0FMPwogI3dhbF9kZWNvZGVfYnVmZmVyX3NpemUgPSA1MTJrQiAjIGxv b2thaGVhZCB3aW5kb3cgdXNlZCBmb3IgcHJlZmV0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisjd2FsX3BpcGVsaW5lID0g b2ZmICAgICAgICAgICAgICAjIGRlY29kZSBpbiBwYXJhbGxlbAorI3dhbF9waXBlbGluZV9xdWV1 ZV9zaXplID0gMTI4TUIKIAogIyAtIEFyY2hpdmluZyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IDRkZDk4 NjI0MjA0Li45OTc5ZTA2NDMyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cu aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC00MCw2ICs0MCw4IEBAIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgbWluX3dhbF9zaXplX21iOwogZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBtYXhfd2FsX3NpemVfbWI7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9rZWVwX3NpemVf bWI7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9zbG90X3dhbF9rZWVwX3NpemVfbWI7Citl eHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9waXBlbGluZV9tcV9zaXplX21iOworZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgd2FsX3BpcGVsaW5lX2VuYWJsZWQ7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IFhMT0didWZmZXJzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBYTG9nQXJjaGl2ZVRpbWVv dXQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMzMzMDkwNjMyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MveGxvZ3BpcGVsaW5lLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHhsb2dwaXBlbGluZS5oCisgKiAgICBXQUwgcmVwbGF5IHBpcGVsaW5lIGZvciBwYXJh bGxlbCByZWNvdmVyeQorICoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBwcm9kdWNlci1j b25zdW1lciBwaXBlbGluZSBmb3IgV0FMIHJlcGxheToKKyAqIC0gUHJvZHVjZXI6IGJhY2tncm91 bmQgd29ya2VyIHRoYXQgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMKKyAqIC0gQ29uc3Vt ZXI6IHN0YXJ0dXAgcHJvY2VzczogY29yZSByZWRvIGxvb3AKKyAqCisgKiBUaGUgcGlwZWxpbmUg dXNlcyBzaGFyZWQgbWVtb3J5IHF1ZXVlcyAoc2htX21xKSB0byBwYXNzIGRlY29kZWQgV0FMCisg KiByZWNvcmRzIGZyb20gcHJvZHVjZXIgdG8gY29uc3VtZXIsIGVuYWJsaW5nIHBhcmFsbGVsaXNt IHdoaWxlCisgKiBtYWludGFpbmluZyBzZXF1ZW50aWFsIHJlcGxheSBzZW1hbnRpY3MuCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FMX1BJUEVMSU5FX0gKKyNk ZWZpbmUgV0FMX1BJUEVMSU5FX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisj aW5jbHVkZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRp bHMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX21x LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisKKy8qCisgKiBNYWdpYyBudW1iZXIgZm9y IHNoYXJlZCBtZW1vcnkgVE9DCisgKi8KKyNkZWZpbmUgUEdfV0FMX1BJUEVMSU5FX01BR0lDIDB4 NTc0MTRDNTAgIC8qICJXQUxQIiAqLworCisvKgorICogTWVzc2FnZSB0eXBlcyBzZW50IHRocm91 Z2ggdGhlIHBpcGVsaW5lCisgKi8KK3R5cGVkZWYgZW51bSBXYWxNc2dUeXBlCit7CisJV0FMX01T R19JTlZBTElEID0gMCwKKwlXQUxfTVNHX1JFQ09SRCwgICAgICAgICAvKiBEZWNvZGVkIFdBTCBy ZWNvcmQgKi8KKwlXQUxfTVNHX1NIVVRET1dOLCAgICAgICAvKiBHcmFjZWZ1bCBzaHV0ZG93biBy ZXF1ZXN0ICovCit9IFdhbE1zZ1R5cGU7CisKKy8qIFdpcmUgaGVhZGVyIGZvciBhIHNlcmlhbGl6 ZWQgV0FMIG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IFdhbFJlY29yZE1zZ0hlYWRlcgorewor CVdhbE1zZ1R5cGUgIG1zZ190eXBlOyAgICAgICAgICAgICAvKiBXQUxfTVNHX1JFQ09SRCBldGMg Ki8KKwl1aW50MzIgICAgICBkZWNvZGVkX3NpemU7ICAgICAgICAgLyogYnl0ZSBsZW5ndGggb2Yg dGhlIHBheWxvYWQgdGhhdCBmb2xsb3dzICovCisJWExvZ1JlY1B0ciAgcmVhZFJlY1B0cjsgICAg ICAgICAgIC8qIFhMb2dSZWFkZXJTdGF0ZS0+UmVhZFJlY1B0ciAqLworCVhMb2dSZWNQdHIgIGVu ZFJlY1B0cjsgICAgICAgICAgICAvKiBYTG9nUmVhZGVyU3RhdGUtPkVuZFJlY1B0ciAqLworCVhM b2dSZWNQdHIgIG1pc3NpbmdDb250cmVjUHRyOyAgICAvKiBYTG9nUmVhZGVyU3RhdGUtPm1pc3Np bmdDb250cmVjUHRyICovCisJWExvZ1JlY1B0ciAgYWJvcnRlZFJlY1B0cjsgICAgICAgIC8qIFhM b2dSZWFkZXJTdGF0ZS0+YWJvcnRlZFJlY1B0ciAqLworCVhMb2dSZWNQdHIgIG92ZXJ3cml0dGVu UmVjUHRyOyAgICAvKiBYTG9nUmVhZGVyU3RhdGUtPm92ZXJ3cml0dGVuUmVjUHRyICovCit9IFdh bFJlY29yZE1zZ0hlYWRlcjsKKworLyoKKyAqIFNoYXJlZCBtZW1vcnkgY29udHJvbCBzdHJ1Y3R1 cmUgZm9yIHRoZSBXQUwgcGlwZWxpbmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgV2FsUGlwZWxpbmVT aG1DdGwKK3sKKwkvKiBMaWZlY3ljbGUgbWFuYWdlbWVudCAqLworCXNsb2NrX3QgICAgICAgICBt dXRleDsKKwlib29sICAgICAgICAgICAgaW5pdGlhbGl6ZWQ7CisJYm9vbCAgICAgICAgICAgIHNo dXRkb3duX3JlcXVlc3RlZDsKKworCS8qIFByb2R1Y2VyIHN0YXRlICovCisJcGlkX3QgICAgICAg ICAgIHByb2R1Y2VyX3BpZDsKKwlYTG9nUmVjUHRyICAgICAgcHJvZHVjZXJfbHNuOyAgIC8qIExh c3QgTFNOIHJlYWQgYnkgcHJvZHVjZXIgKi8KKworCS8qIENvbnN1bWVyIHN0YXRlICovCisJcGlk X3QgICAgICAgICAgIGNvbnN1bWVyX3BpZDsKKwlYTG9nUmVjUHRyICAgICAgY29uc3VtZXJfbHNu OyAgIC8qIExhc3QgTFNOIHJlY2lldmVkIGJ5IGNvbnN1bWVyICovCisJWExvZ1JlY1B0ciAgICAg IGFwcGxpZWRfbHNuOyAgIAkvKiBMYXN0IExTTiBhcHBsaWVkIGJ5IGNvbnN1bWVyICovCisKKwkv KiBRdWV1ZSBoYW5kbGVzICovCisJZHNtX2hhbmRsZSAgICAgIGRzbV9zZWdfaGFuZGxlOworCXNo bV9tcV9oYW5kbGUgICAqcHJvZHVjZXJfbXFfaGFuZGxlOworCXNobV9tcV9oYW5kbGUgICAqY29u c3VtZXJfbXFfaGFuZGxlOworCisJLyogU3RhdGlzdGljcyAqLworCXVpbnQ2NCAgICAgICAgICBy ZWNvcmRzX3NlbnQ7CisJdWludDY0ICAgICAgICAgIHJlY29yZHNfcmVjZWl2ZWQ7CisJdWludDY0 ICAgICAgICAgIGJ5dGVzX3NlbnQ7CisJdWludDY0ICAgICAgICAgIGJ5dGVzX3JlY2VpdmVkOwor fSBXYWxQaXBlbGluZVNobUN0bDsKKworLyogY29uc3VtZXIgbWF5IGhhdmUgdG8gY29tcHV0ZSBw cmVmZXRlY2hlciBzdGF0cyAqLworZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dQcmVmZXRjaGVyICp4 bG9ncHJlZmV0Y2hlcl9waXBlbGluZWQ7CisKKworLyogUHJvZHVjZXIgZnVuY3Rpb25zIChjYWxs ZWQgYnkgYmFja2dyb3VuZCB3b3JrZXIpICovCitleHRlcm4gdm9pZCBXYWxQaXBlbGluZV9Qcm9k dWNlck1haW4oRGF0dW0gbWFpbl9hcmcpOworZXh0ZXJuIGJvb2wgV2FsUGlwZWxpbmVfU2VuZFJl Y29yZChYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CitleHRlcm4gYm9vbCBXYWxQaXBlbGluZV9T ZW5kU2h1dGRvd24odm9pZCk7CitleHRlcm4gYm9vbCBBbVdhbFBpcGVsaW5lKHZvaWQpOworCisK K2V4dGVybiB2b2lkIFByb2Nlc3NQaXBlbGluZUJnd0ludGVycnVwdHModm9pZCk7CitleHRlcm4g Ym9vbCBJc1Byb21vdGVTaWduYWxlZFBpcGVsaW5lKHZvaWQpOworZXh0ZXJuIHZvaWQgUmVzZXRQ cm9tb3RlU2lnbmFsZWRQaXBlbGluZSh2b2lkKTsKKy8qIEdsb2JhbCBzaGFyZWQgbWVtb3J5IHBv aW50ZXIgKi8KK2V4dGVybiBXYWxQaXBlbGluZVNobUN0bCAqV2FsUGlwZWxpbmVTaG07CisKKyNl bmRpZiAgIC8qIFdBTF9QSVBFTElORV9IICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCmluZGV4IGJhNzc1MGRjYTBiLi44MWFjOTg0YTkwNCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaApAQCAtMjE3LDYgKzIxNywxMCBAQCBleHRlcm4g dm9pZCBHZXRYTG9nUmVjZWlwdFRpbWUoVGltZXN0YW1wVHogKnJ0aW1lLCBib29sICpmcm9tU3Ry ZWFtKTsKIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRMYXRlc3RYVGltZSh2b2lkKTsKIGV4dGVybiBU aW1lc3RhbXBUeiBHZXRDdXJyZW50Q2h1bmtSZXBsYXlTdGFydFRpbWUodm9pZCk7CiBleHRlcm4g WExvZ1JlY1B0ciBHZXRDdXJyZW50UmVwbGF5UmVjUHRyKFRpbWVMaW5lSUQgKnJlcGxheUVuZFRM SSk7CitleHRlcm4gWExvZ1JlY29yZCAqUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3By ZWZldGNoZXIsIGludCBlbW9kZSwKKwkJICAgYm9vbCBmZXRjaGluZ19ja3B0LCBUaW1lTGluZUlE IHJlcGxheVRMSSk7CitleHRlcm4gaW50IFhMb2dQYWdlUmVhZChYTG9nUmVhZGVyU3RhdGUgKnhs b2dyZWFkZXIsIFhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwgaW50IHJlcUxlbiwKKwkJCSBYTG9n UmVjUHRyIHRhcmdldFJlY1B0ciwgY2hhciAqcmVhZEJ1Zik7CiAKIGV4dGVybiBib29sIFByb21v dGVJc1RyaWdnZXJlZCh2b2lkKTsKIGV4dGVybiBib29sIENoZWNrUHJvbW90ZVNpZ25hbCh2b2lk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKaW5kZXggOWFkNjE5MDgwYmUuLmU5ZmY2 ZGU5YTFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtNDIsNiArNDIsNyBA QCBQR19TSE1FTV9TVUJTWVNURU0oTXVsdGlYYWN0U2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9T VUJTWVNURU0oQnVmZmVyTWFuYWdlclNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVN KFN0cmF0ZWd5Q3RsU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oQnVmVGFibGVT aG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShXYWxQaXBlbGluZVNobWVtQ2FsbGJh Y2tzKQogCiAvKiBsb2NrIG1hbmFnZXIgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShMb2NrTWFuYWdl clNobWVtQ2FsbGJhY2tzKQotLSAKMi4zNC4xCgo= --000000000000ce41dd06563dfc9a Content-Type: text/x-patch; charset="UTF-8"; name="v5-0004-Pipelined-Recovery-Add-Tap-test.patch" Content-Disposition: attachment; filename="v5-0004-Pipelined-Recovery-Add-Tap-test.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrenz3b53 RnJvbSAyZWNmOTVkYTk1MTM0MDE0YzI5ZGU5Yzg0M2FhOWFiZWZmMjFiNGQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBNb24sIDIyIEp1biAyMDI2IDEyOjM2OjQ1ICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NSA0 LzVdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIEFkZCBUYXAgdGVzdAoKU29tZSBiYXNpYyB0YXAgdGVz dCB0byBlbnN1cmUgcGlwZWxpbmUgaXMgd29ya2luZyBhcyBleHBlY3RlZC4KCk1vc3Qgb2YgdGhl IHRlc3RpbmcgaXMgZG9uZSBieSBydW5uaW5nIGFsbCB0aGUgdGVzdHMgdW5kZXIgdGhlIHJlY292 ZXJ5IHN1aXRlCndpdGggcGlwZWxpbmUgb24gYnkgZGVmYXVsdCBpLmUuIFBHX1RFU1RfSU5JVERC X0VYVFJBX09QVFM9Ii1jIHdhbF9waXBlbGluZT1vbiIKLS0tCiBzcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzA1NV93YWxw aXBlbGluZS5wbCB8IDIwOCArKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5n ZWQsIDIwOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wNTVfd2FscGlwZWxpbmUucGwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZCBiL3NyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkCmluZGV4IGFkMGQ4NWY0 MTg5Li45NzljMTIxMzMzMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVp bGQKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQKQEAgLTYzLDYgKzYzLDcgQEAg dGVzdHMgKz0gewogICAgICAgJ3QvMDUyX2NoZWNrcG9pbnRfc2VnbWVudF9taXNzaW5nLnBsJywK ICAgICAgICd0LzA1M19zdGFuZGJ5X2xvZ2luX2V2ZW50X3RyaWdnZXIucGwnLAogICAgICAgJ3Qv MDU0X3VubG9nZ2VkX3NlcXVlbmNlX3Byb21vdGlvbi5wbCcsCisgICAgICAndC8wNTVfd2FscGlw ZWxpbmUucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVy eS90LzA1NV93YWxwaXBlbGluZS5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDU1X3dhbHBpcGVs aW5lLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNjgyYzg3OGM3 OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDU1X3dhbHBpcGVsaW5l LnBsCkBAIC0wLDAgKzEsMjA4IEBACisjIENvcHlyaWdodCAoYykgMjAyNS0yMDI2LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIworIyBUZXN0cyBmb3IgdGhlIFdBTCBwaXBl bGluZSBmZWF0dXJlICh3YWxfcGlwZWxpbmUgR1VDKS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgLS0tLS0tLS0tLQorIyBIZWxwZXJzCisj IC0tLS0tLS0tLS0KKworc3ViIHNsdXJwX2xvZworeworCW15ICgkbm9kZSkgPSBAXzsKKwlvcGVu KG15ICRmaCwgJzwnLCAkbm9kZS0+bG9nZmlsZSgpKSBvciBkaWUgIkNhbm5vdCBvcGVuIGxvZzog JCEiOworCW15IEBsaW5lcyA9IDwkZmg+OworCWNsb3NlKCRmaCk7CisJcmV0dXJuIEBsaW5lczsK K30KKworc3ViIGxvZ19tYXRjaGVzCit7CisJbXkgKCRub2RlLCAkcmUpID0gQF87CisJcmV0dXJu IGdyZXAgeyAvJHJlLyB9IHNsdXJwX2xvZygkbm9kZSk7Cit9CisKKworIyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAgd2FsX3BpcGVsaW5lID0gb24sIGJhc2lj IHJlY292ZXJ5CisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor bXkgJG5vZGUxID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwMS1yZWNvdmVyeScp OworJG5vZGUxLT5pbml0OworJG5vZGUxLT5zdGFydDsKKworJG5vZGUxLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXsKKyAgICBDUkVBVEUgVEFCTEUgdCAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCB2 IHRleHQpOworICAgIElOU0VSVCBJTlRPIHQgKHYpCisgICAgU0VMRUNUIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDUwMDAwKSBpOworfSk7CisKKyMgZ2VuZXJhdGUgbW9yZSBX QUwKKyRub2RlMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisgICAgSU5TRVJUIElOVE8gdCAo dikKKyAgICBTRUxFQ1QgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNTAwMDAp IGk7Cit9KTsKKworIyBjcmFzaCBzdG9wIHRvIGZvcmNlIFdBTCByZWNvdmVyeQorJG5vZGUxLT5z dG9wKCdpbW1lZGlhdGUnKTsKKworIyByZXN0YXJ0IOKGkiByZWNvdmVyeSBoYXBwZW5zCiskbm9k ZTEtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAid2FsX3BpcGVsaW5lID0gb24iKTsK KyRub2RlMS0+c3RhcnQ7CisKKworIyBQcm9kdWNlciBzdGFydGVkCitvayhzY2FsYXIgbG9nX21h dGNoZXMoJG5vZGUxLCBxci9cW3dhbHBpcGVsaW5lXF0gcHJvZHVjZXI6IHN0YXJ0ZWQgYXQvKSwK KwkncHJvZHVjZXIgc3RhcnRlZCBtZXNzYWdlIGZvdW5kIGluIGxvZycpOworCisjIFBpcGVsaW5l IHN0b3BwZWQgY2xlYW5seQorb2soc2NhbGFyIGxvZ19tYXRjaGVzKCRub2RlMSwgcXIvXFt3YWxw aXBlbGluZVxdIHNodXRkb3duLyksCisJJ3BpcGVsaW5lIHN0b3BwZWQgbWVzc2FnZSBmb3VuZCBp biBsb2cnKTsKKworIyBDb25zdW1lciByZWNlaXZlZCBzaHV0ZG93biBmcm9tIHByb2R1Y2VyCitv ayhzY2FsYXIgbG9nX21hdGNoZXMoJG5vZGUxLCBxci9cW3dhbHBpcGVsaW5lXF0gY29uc3VtZXI6 IHJlY2VpdmVkIHNodXRkb3duIG1lc3NhZ2UvKSwKKwknY29uc3VtZXIgcmVjZWl2ZWQgc2h1dGRv d24gbWVzc2FnZSBmcm9tIHByb2R1Y2VyJyk7CisKKyMgc2VudCA9PSByZWNlaXZlZAorbXkgQGV4 aXRfbGluZXMgPSBsb2dfbWF0Y2hlcygkbm9kZTEsCisJcXIvXFt3YWxwaXBlbGluZVxdIHByb2R1 Y2VyOiBleGl0aW5nOiBzZW50PVxkKyByZWNlaXZlZD1cZCsvKTsKK29rKHNjYWxhciBAZXhpdF9s aW5lcyA+PSAxLCAncHJvZHVjZXIgZXhpdGluZyBsaW5lIGZvdW5kIGluIGxvZycpOworCitteSAo JHNlbnQsICRyZWN2KSA9ICRleGl0X2xpbmVzWy0xXSA9fiAvc2VudD0oXGQrKSByZWNlaXZlZD0o XGQrKS87CitvayhkZWZpbmVkICRzZW50ICYmICRzZW50ID4gMCwgInNlbnQgY291bnQgKCRzZW50 KSBpcyBwb3NpdGl2ZSIpOworb2soZGVmaW5lZCAkcmVjdiAmJiAkcmVjdiA+IDAsICJyZWNlaXZl ZCBjb3VudCAoJHJlY3YpIGlzIHBvc2l0aXZlIik7Citpcygkc2VudCwgJHJlY3YsICJubyByZWNv cmRzIGxvc3QgaW4gcGlwZWxpbmUgcXVldWU6IHNlbnQ9JHNlbnQgcmVjZWl2ZWQ9JHJlY3YiKTsK KworIyBObyBQQU5JQworb2soIShzY2FsYXIgbG9nX21hdGNoZXMoJG5vZGUxLCBxci9cYlBBTklD XGIvKSksCisJJ25vIFBBTklDIG1lc3NhZ2VzIGR1cmluZyBwaXBlbGluZSByZWNvdmVyeScpOwor CisjIERhdGEgaW50ZWdyaXR5CitteSAkY291bnQgPSAkbm9kZTEtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnU0VMRUNUIGNvdW50KCopIEZST00gdCcpOworaXMoJGNvdW50ICsgMCwgMTAwXzAwMCwg J2FsbCAxMDAwMDAgcm93cyB2aXNpYmxlIGFmdGVyIHBpcGVsaW5lIHJlY292ZXJ5Jyk7CisKKyRu b2RlMS0+c3RvcDsKKworIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgICB3YWxfcGlwZWxpbmUgPSBvZmYgKGJhc2VsaW5l LCBubyBwaXBlbGluZSBsb2cgbWVzc2FnZXMpCisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICRub2RlMiA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncDAtcmVjb3ZlcnknKTsKKyRub2RlMi0+aW5pdDsK KyRub2RlMi0+c3RhcnQ7CisKKyRub2RlMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisgICAg Q1JFQVRFIFRBQkxFIHQgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgdiB0ZXh0KTsKKyAgICBJTlNF UlQgSU5UTyB0ICh2KQorICAgIFNFTEVDVCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSw1MDAwMCkgaTsKK30pOworCisjIGdlbmVyYXRlIG1vcmUgV0FMCiskbm9kZTItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxeworICAgIElOU0VSVCBJTlRPIHQgKHYpCisgICAgU0VMRUNUIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDUwMDAwKSBpOworfSk7CisKKyMgY3Jh c2ggc3RvcCB0byBmb3JjZSBXQUwgcmVjb3ZlcnkKKyRub2RlMi0+c3RvcCgnaW1tZWRpYXRlJyk7 CisKKyMgcmVzdGFydCDihpIgcmVjb3ZlcnkgaGFwcGVucworJG5vZGUyLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywgIndhbF9waXBlbGluZSA9IG9mZiIpOworJG5vZGUyLT5zdGFydDsK Kworb2soIShzY2FsYXIgbG9nX21hdGNoZXMoJG5vZGUyLCBxci9cW3dhbHBpcGVsaW5lXF0gcHJv ZHVjZXI6IHN0YXJ0ZWQvKSksCisJJ25vIHBpcGVsaW5lIGxvZyBtZXNzYWdlcyB3aGVuIHdhbF9w aXBlbGluZSA9IG9mZicpOworCitteSAkY291bnQyID0gJG5vZGUyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ1NFTEVDVCBjb3VudCgqKSBGUk9NIHQnKTsKK2lzKCRjb3VudDIgKyAwLCAxMDBfMDAw LCAnYWxsIHJvd3MgcHJlc2VudCBhZnRlciBub24tcGlwZWxpbmUgcmVjb3ZlcnknKTsKKworJG5v ZGUyLT5zdG9wOworCisKKworIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICBUZXN0IHBpcGVsaW5lIG9uIHZzIG9m ZiBwcm9kdWNlIGlkZW50aWNhbCBkYXRhIChjaGVja3N1bSBjb21wYXJpc29uKQorIyAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisKK215ICRwcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmlt YXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJHByaW1hcnkt PnN0YXJ0OworCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisgICAgQ1JFQVRF IFRBQkxFIHQgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgdiB0ZXh0KTsKKyAgICBJTlNFUlQgSU5U TyB0ICh2KQorICAgIFNFTEVDVCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MzAwMDApIGk7Cit9KTsKKworJHByaW1hcnktPmJhY2t1cCgnYmFja3VwMycpOworCiskcHJpbWFy eS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisgICAgSU5TRVJUIElOVE8gdCAodikKKyAgICBT RUxFQ1QgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMwMDAwKSBpOworICAg IFVQREFURSB0IFNFVCB2ID0gJ3gnIFdIRVJFIGlkICUgMTAgPSAwOworfSk7CisKKyMgZW5zdXJl IFdBTCBib3VuZGFyeQorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHBn X3N3aXRjaF93YWwoKScpOworbXkgJHRhcmdldF9sc24gPSAkcHJpbWFyeS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCknKTsKKworbXkgJHJlcGxpY2Ff b24gPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3JlcGxpY2FfcDEnKTsKKyRyZXBs aWNhX29uLT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5LCAnYmFja3VwMycsCisgICAgaGFzX3N0 cmVhbWluZyA9PiAxKTsKKyRyZXBsaWNhX29uLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgIndhbF9waXBlbGluZSA9IG9uXG4iKTsKKyRyZXBsaWNhX29uLT5zdGFydDsKKworbXkgJHJl cGxpY2Ffb2ZmID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdyZXBsaWNhX3AwJyk7 CiskcmVwbGljYV9vZmYtPmluaXRfZnJvbV9iYWNrdXAoJHByaW1hcnksICdiYWNrdXAzJywKKyAg ICBoYXNfc3RyZWFtaW5nID0+IDEpOworJHJlcGxpY2Ffb2ZmLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywgIndhbF9waXBlbGluZSA9IG9mZlxuIik7CiskcmVwbGljYV9vZmYtPnN0YXJ0 OworCisjIHdhaXQgZm9yIHJlcGxpY2FzIHRvIGNhdGNoIHVwCiskcHJpbWFyeS0+d2FpdF9mb3Jf Y2F0Y2h1cCgkcmVwbGljYV9vbik7CiskcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkcmVwbGlj YV9vZmYpOworCitteSAkbWQ1X29uICA9ICRyZXBsaWNhX29uLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKyAgICAiU0VMRUNUIG1kNShzdHJpbmdfYWdnKGlkOjp0ZXh0fHx2LCAnLCcgT1JERVIgQlkg aWQpKSBGUk9NIHQiKTsKKworbXkgJG1kNV9vZmYgPSAkcmVwbGljYV9vZmYtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorICAgICJTRUxFQ1QgbWQ1KHN0cmluZ19hZ2coaWQ6OnRleHR8fHYsICcsJyBP UkRFUiBCWSBpZCkpIEZST00gdCIpOworCitpcygkbWQ1X29uLCAkbWQ1X29mZiwKKyAgICAndGFi bGUgY2hlY2tzdW0gaWRlbnRpY2FsIGJldHdlZW4gcGlwZWxpbmU9b24gYW5kIHBpcGVsaW5lPW9m ZicpOworCiskcmVwbGljYV9vbi0+c3RvcDsKKyRyZXBsaWNhX29mZi0+c3RvcDsKKyRwcmltYXJ5 LT5zdG9wKCdmYXN0Jyk7CisKKworCisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyAgVGVzdCBwaXBlbGluZSB3aGVuIG5vIG5lZWQgb2YgcmVwbGF5CisjICMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkbm9kZTMgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3AxLXNtYWxsLXJlcGxheScpOworJG5vZGUzLT5pbml0OworJG5vZGUzLT5z dGFydDsKKworIyBjcmFzaCBzdG9wIHRvIGZvcmNlIFdBTCByZWNvdmVyeQorJG5vZGUzLT5zdG9w KCdpbW1lZGlhdGUnKTsKKworIyByZXN0YXJ0IOKGkiByZWNvdmVyeSBoYXBwZW5zCiskbm9kZTMt PmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAid2FsX3BpcGVsaW5lID0gb24iKTsKKyRu b2RlMy0+c3RhcnQ7CisKK29rKHNjYWxhciBsb2dfbWF0Y2hlcygkbm9kZTMsIHFyL1xbd2FscGlw ZWxpbmVcXSBwcm9kdWNlcjogZXhpdGluZzogc2VudD0wIHJlY2VpdmVkPTAvKSwKKwkncGlwZWxp bmUgcHJvZHVjZXIgc2VudCB6ZXJvIHJlY29yZHMnKTsKKworb2soKHNjYWxhciBsb2dfbWF0Y2hl cygkbm9kZTMsIHFyL3JlZG8gZG9uZSBhdC8pKSwKKwkncGlwZWxpbmUgcmVkbyBkb25lIGV2ZW4g d2l0aCB0aW55IHJlcGxheScpOworCiskbm9kZTMtPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwpc IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0gCjIuMzQuMQoK --000000000000ce41dd06563dfc9a Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0005-Pipeline-Recovery-Report-combined-CPU-rusage-for-.patch" Content-Disposition: attachment; filename="v5-0005-Pipeline-Recovery-Report-combined-CPU-rusage-for-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrenz3b84 RnJvbSBkYjI5NWVjYTM5NTg2YjgyOTY3ZjI5YmNmOGU5N2UwZGE3Zjc2ZDA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBGcmksIDEwIEp1bCAyMDI2IDEzOjA3OjU5ICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NSA1 LzVdIFBpcGVsaW5lIFJlY292ZXJ5IC0gUmVwb3J0IGNvbWJpbmVkIENQVSBydXNhZ2UgZm9yCiBz dGFydHVwIGFuZCBwaXBlbGluZSB3b3JrZXJzCgpUaGUgcmVjb3Zlcnkgc3RhcnR1cCBwcm9jZXNz IHJlcG9ydHMgQ1BVIGFuZCBlbGFwc2VkIHRpbWUgYXQgdGhlIGVuZCBvZgpyZWNvdmVyeSB1c2lu ZyBwZ19ydXNhZ2Vfc2hvdygpLiBTaW5jZSBXQUwgZGVjb2Rpbmcgbm93IHJ1bnMgaW4gYQpzZXBh cmF0ZSBwaXBlbGluZSB3b3JrZXIsIHRoZSByZXBvcnRlZCBDUFUgdXNhZ2Ugb25seSByZWZsZWN0 ZWQgdGhlCnN0YXJ0dXAgcHJvY2VzcyBhbmQgb21pdHRlZCB0aGUgQ1BVIGNvbnN1bWVkIGJ5IHRo ZSBwaXBlbGluZSB3b3JrZXIuCgpSZWNvcmQgdGhlIHBpcGVsaW5lIHdvcmtlcidzIENQVSB1c2Fn ZSBiZWZvcmUgaXQgZXhpdHMgYW5kIGNvbWJpbmUgaXQKd2l0aCB0aGUgc3RhcnR1cCBwcm9jZXNz J3MgQ1BVIHVzYWdlIHdoZW4gcmVwb3J0aW5nIHRoZSBmaW5hbCByZWNvdmVyeQpzdGF0aXN0aWNz LiBXYWxsLWNsb2NrIHRpbWUgY29udGludWVzIHRvIGJlIG1lYXN1cmVkIGJ5IHRoZSBzdGFydHVw CnByb2Nlc3MsIHdoaWxlIHVzZXIgYW5kIHN5c3RlbSBDUFUgdGltZSBub3cgcmVmbGVjdCB0aGUg dG90YWwgQ1BVCmNvbnN1bWVkIGR1cmluZyByZWNvdmVyeS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYyB8IDEwOSArKysrKysrKysrKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyB8ICAgNCArLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oICAgICAgICAgfCAgMTQgKysrCiAzIGZpbGVzIGNo YW5nZWQsIDEyNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYwppbmRleCBiYmQ1ZWU1OTdkNy4uNTU5Nzk0ZTQ2YmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwaXBlbGluZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwaXBlbGluZS5jCkBAIC00OCw2ICs0 OCw3IEBACiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2Vsb2cu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX3J1c2Fn ZS5oIgogI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAjaW5jbHVkZSAidXRpbHMvdGltZW91dC5oIgpAQCAtMTIyLDYgKzEyMywxMDggQEAgdHlwZWRl ZiBzdHJ1Y3QgWExvZ1BhZ2VSZWFkUHJpdmF0ZQogfSBYTG9nUGFnZVJlYWRQcml2YXRlOwogCiAK Ky8qCisgKiBIZWxwZXJzIHRvIHRyYWNrIGFuZCBjb21wdXRlIHJ1c2FnZQorICovCisKK3N0YXRp YyBzdHJ1Y3QgdGltZXZhbAordGltZXZhbF9zdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCBlbmQsIGNv bnN0IHN0cnVjdCB0aW1ldmFsICpzdGFydCkKK3sKKwlpZiAoZW5kLnR2X3VzZWMgPCBzdGFydC0+ dHZfdXNlYykKKwl7CisJCWVuZC50dl9zZWMtLTsKKwkJZW5kLnR2X3VzZWMgKz0gMTAwMDAwMDsK Kwl9CisKKwllbmQudHZfc2VjIC09IHN0YXJ0LT50dl9zZWM7CisJZW5kLnR2X3VzZWMgLT0gc3Rh cnQtPnR2X3VzZWM7CisKKwlyZXR1cm4gZW5kOworfQorCitzdGF0aWMgdm9pZAordGltZXZhbF9h ZGQoc3RydWN0IHRpbWV2YWwgKmEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpiKQoreworCWEtPnR2 X3NlYyArPSBiLT50dl9zZWM7CisJYS0+dHZfdXNlYyArPSBiLT50dl91c2VjOworCisJaWYgKGEt PnR2X3VzZWMgPj0gMTAwMDAwMCkKKwl7CisJCWEtPnR2X3NlYysrOworCQlhLT50dl91c2VjIC09 IDEwMDAwMDA7CisJfQorfQorCisvKgorICogQ2FsbGVkIGJ5IFByb2R1Y2VyLgorICoKKyAqIENv bXB1dGUgZmluYWwgcnVzYWdlIGRlbHRhIGJ5IHRoZSBwcm9kdWNlciBwcm9jIGFuZCBzYXZlIGFj cm9zcyBzaG1lbSBzbworICogY29uc3VtZXIgY2FuIGFjY2VzcyBpdCBhbmQgdXNlIHRvIGNvbXB1 dGUgZmluYWwgcmVjb3ZlcnkgcmVzb3VyY2UgdXNhZ2UuCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3Qg Y2FyZSBhYm91dCB0aGUgd2FsIGNsb2NrIHRpbWUgdmFsIGF0IHRoaXMgcG9pbnQuCisgKi8KK3N0 YXRpYyBQR1JVc2FnZURlbHRhCitwaXBlbGluZV9zYXZlX3J1c2FnZShjb25zdCBQR1JVc2FnZSAq cnUwKQoreworCVBHUlVzYWdlCQlydTE7CisJUEdSVXNhZ2VEZWx0YQlkZWx0YTsKKworCXBnX3J1 c2FnZV9pbml0KCZydTEpOworCisJZGVsdGEudXRpbWUgPSB0aW1ldmFsX3N1YnRyYWN0KHJ1MS5y dS5ydV91dGltZSwgJnJ1MC0+cnUucnVfdXRpbWUpOworCWRlbHRhLnN0aW1lID0gdGltZXZhbF9z dWJ0cmFjdChydTEucnUucnVfc3RpbWUsICZydTAtPnJ1LnJ1X3N0aW1lKTsKKworCVNwaW5Mb2Nr QWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+cHJvZHVj ZXJfcnVzYWdlID0gZGVsdGE7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0 ZXgpOworCisJcmV0dXJuIGRlbHRhOworfQorCisvKgorICogQ2FsbGVkIGJ5IENvbnN1bWVyLgor ICoKKyAqIENvbXB1dGUgYW5kIHJldHVybiBzdHJpbmcgaGF2aW5nIGZpbmFsIHJlc291Y2UgdXNh Z2UuCisgKgorICogcnUwOiBpbml0aWFsIHNuYXBzaG90IG9mIGNvbnN1bWVyL3N0YXJ0dXAgcHJv Y2VzcworKi8KK2NvbnN0IGNoYXIgKgorcGlwZWxpbmVfZmluYWxfcnVzYWdlKGNvbnN0IFBHUlVz YWdlICpydTApCit7CisJc3RhdGljIGNoYXIgCXJlc3VsdFsxMDBdOworCVBHUlVzYWdlCQlydTE7 CisJUEdSVXNhZ2VEZWx0YQlwcm9kdWNlcl9kZWx0YTsKKworCisJQXNzZXJ0KCFXYWxQaXBlbGlu ZV9DaGVja1Byb2R1Y2VyQWxpdmUoKSk7CisKKwlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5l U2htLT5tdXRleCk7CisJcHJvZHVjZXJfZGVsdGEgPSBXYWxQaXBlbGluZVNobS0+cHJvZHVjZXJf cnVzYWdlOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCS8q IGdldCBmaW5hbCBzbmFwc2hvdCB0byBjb21wdXRlIGRlbHRhIGFnYWluc3QgKi8KKwlwZ19ydXNh Z2VfaW5pdCgmcnUxKTsKKworCS8qIGNvbXB1dGUgY29uc3VtZXIgZGVsdGEgKi8KKwlydTEudHYg PSB0aW1ldmFsX3N1YnRyYWN0KHJ1MS50diwgJnJ1MC0+dHYpOworCXJ1MS5ydS5ydV91dGltZSA9 IHRpbWV2YWxfc3VidHJhY3QocnUxLnJ1LnJ1X3V0aW1lLCAmcnUwLT5ydS5ydV91dGltZSk7CisJ cnUxLnJ1LnJ1X3N0aW1lID0gdGltZXZhbF9zdWJ0cmFjdChydTEucnUucnVfc3RpbWUsICZydTAt PnJ1LnJ1X3N0aW1lKTsKKworCS8qIGFkZCBwcm9kdWNlciBwcm9jIGRlbHRhICh1c2VyICYgc3lz KSAqLworCXRpbWV2YWxfYWRkKCZydTEucnUucnVfdXRpbWUsICZwcm9kdWNlcl9kZWx0YS51dGlt ZSk7CisJdGltZXZhbF9hZGQoJnJ1MS5ydS5ydV9zdGltZSwgJnByb2R1Y2VyX2RlbHRhLnN0aW1l KTsKKworCXNucHJpbnRmKHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCksCisJCQlfKCJDUFU6IHVzZXI6 ICVkLiUwMmQgcywgc3lzdGVtOiAlZC4lMDJkIHMsIGVsYXBzZWQ6ICVkLiUwMmQgcyIpLAorCQkJ KGludCkgcnUxLnJ1LnJ1X3V0aW1lLnR2X3NlYywKKwkJCShpbnQpIHJ1MS5ydS5ydV91dGltZS50 dl91c2VjIC8gMTAwMDAsCisJCQkoaW50KSBydTEucnUucnVfc3RpbWUudHZfc2VjLAorCQkJKGlu dCkgcnUxLnJ1LnJ1X3N0aW1lLnR2X3VzZWMgLyAxMDAwMCwKKwkJCShpbnQpIHJ1MS50di50dl9z ZWMsCisJCQkoaW50KSBydTEudHYudHZfdXNlYyAvIDEwMDAwKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKIC8qCiAgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZvciBXQUwgUGlwZWxpbmUKICAq LwpAQCAtMzI4LDYgKzQzMSw3IEBAIFdhbFBpcGVsaW5lX1Byb2R1Y2VyTWFpbihEYXR1bSBtYWlu X2FyZykKIAlib29sIAkJCQkgZW5kX29mX3dhbCA9IGZhbHNlOwogCXVpbnQ2NAkJCQkgcmVjb3Jk c19zZW50OwogCXVpbnQ2NAkJCQkgcmVjb3Jkc19yZWNlaXZlZDsKKwlQR1JVc2FnZQkJCSBydTA7 CiAKIAkvKgogCSAqIFByb3Blcmx5IGFjY2VwdCBvciBpZ25vcmUgc2lnbmFscyB0aGUgcG9zdG1h c3RlciBtaWdodCBzZW5kIHVzLgpAQCAtNDA0LDYgKzUwOCw4IEBAIFdhbFBpcGVsaW5lX1Byb2R1 Y2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAkvKiBIYW5kbGUgdGhlIHNpZ25hbCBpZiB3ZSB3ZXJl IHByb21vdGVkIGJlZm9yZSB0aGUgcGlwZWxpbmUgbGF1bmNoICovCiAJcHJvbW90ZV9zaWduYWxl ZCA9IHBhcmFtcy0+cHJvbW90ZWRCZWZvcmVMYXVuY2g7CiAKKwlwZ19ydXNhZ2VfaW5pdCgmcnUw KTsKKwogCS8qIE1haW4gZGVjb2RpbmcgbG9vcCAqLwogCXdoaWxlICh0cnVlKQogCXsKQEAgLTQ1 NSw2ICs1NjEsOSBAQCBXYWxQaXBlbGluZV9Qcm9kdWNlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJ CVdhbFBpcGVsaW5lX1dhaXRGb3JDb25zdW1lclNodXRkb3duUmVxdWVzdCgpOwogCX0KIAorCS8q IGNvbXB1dGUgYW5kIHNldCBydXNhZ2UgZGVsdGEgKi8KKwlwaXBlbGluZV9zYXZlX3J1c2FnZSgm cnUwKTsKKwogCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKIAlyZWNv cmRzX3NlbnQgPSBXYWxQaXBlbGluZVNobS0+cmVjb3Jkc19zZW50OwogCXJlY29yZHNfcmVjZWl2 ZWQgPSBXYWxQaXBlbGluZVNobS0+cmVjb3Jkc19yZWNlaXZlZDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggNjVjOTZhNGQxMDcuLjI0NzNiZTIzZWU1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtMjAwOCw3ICsy MDA4LDkgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAJCWVyZXBvcnQoTE9HLAogCQkJCWVy cm1zZygicmVkbyBkb25lIGF0ICVYLyUwOFggc3lzdGVtIHVzYWdlOiAlcyIsCiAJCQkJCSAgIExT Tl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5SZWFkUmVjUHRyKSwKLQkJCQkJICAgcGdfcnVzYWdl X3Nob3coJnJ1MCkpKTsKKwkJCQkJICAgd2FsX3BpcGVsaW5lX2VuYWJsZWQgPworCQkJCQkgICBw aXBlbGluZV9maW5hbF9ydXNhZ2UoJnJ1MCkgOiBwZ19ydXNhZ2Vfc2hvdygmcnUwKSkpOworCiAJ CXh0aW1lID0gR2V0TGF0ZXN0WFRpbWUoKTsKIAkJaWYgKHh0aW1lKQogCQkJZXJlcG9ydChMT0cs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKaW5kZXggYzQ3Y2M3MjEyMWMuLmFjYTFlMzFmYTQw IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oCkBAIC0yMCwxOCArMjAsMjggQEAKICNpZm5k ZWYgV0FMX1BJUEVMSU5FX0gKICNkZWZpbmUgV0FMX1BJUEVMSU5FX0gKIAorI2luY2x1ZGUgPHN5 cy90aW1lLmg+CQkJLyogZm9yIHN0cnVjdCB0aW1ldmFsICovCisKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ3JlYWRlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKICNpbmNsdWRl ICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKICNpbmNsdWRl ICJzdG9yYWdlL3NobV9tcS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUg InV0aWxzL3BnX3J1c2FnZS5oIgogCiAvKgogICogTWFnaWMgbnVtYmVyIGZvciBzaGFyZWQgbWVt b3J5IFRPQwogICovCiAjZGVmaW5lIFBHX1dBTF9QSVBFTElORV9NQUdJQyAweDU3NDE0QzUwICAv KiAiV0FMUCIgKi8KIAorCit0eXBlZGVmIHN0cnVjdCBQR1JVc2FnZURlbHRhCit7CisJc3RydWN0 IHRpbWV2YWwgdXRpbWU7CisJc3RydWN0IHRpbWV2YWwgc3RpbWU7Cit9IFBHUlVzYWdlRGVsdGE7 CisKIC8qCiAgKiBNZXNzYWdlIHR5cGVzIHNlbnQgdGhyb3VnaCB0aGUgcGlwZWxpbmUKICAqLwpA QCAtMTI5LDYgKzEzOSw5IEBAIHR5cGVkZWYgc3RydWN0IFdhbFBpcGVsaW5lU2htQ3RsCiAJdWlu dDY0ICAgICAgICAgIHJlY29yZHNfcmVjZWl2ZWQ7CiAJdWludDY0ICAgICAgICAgIGJ5dGVzX3Nl bnQ7CiAJdWludDY0ICAgICAgICAgIGJ5dGVzX3JlY2VpdmVkOworCisJLyogY3B1IHVzYWdlIGRl bHRhIGJ5IHRoZSBwcm9kdWNlciAqLworCVBHUlVzYWdlRGVsdGEJcHJvZHVjZXJfcnVzYWdlOwog fSBXYWxQaXBlbGluZVNobUN0bDsKIAogLyogY29uc3VtZXIgbWF5IGhhdmUgdG8gY29tcHV0ZSBw cmVmZXRlY2hlciBzdGF0cyAqLwpAQCAtMTU1LDYgKzE2OCw3IEBAIGV4dGVybiBib29sIFdhbFBp cGVsaW5lX0NoZWNrUHJvZHVjZXJBbGl2ZSh2b2lkKTsKIGV4dGVybiBib29sIFdhbFBpcGVsaW5l X0lzQWN0aXZlKHZvaWQpOwogZXh0ZXJuIHBpZF90IFdhbFBpcGVsaW5lX0dldFByb2R1Y2VyUGlk KHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVfV2FpdEZvckNvbnN1bWVyQ2F0Y2h1cCh2 b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpwaXBlbGluZV9maW5hbF9ydXNhZ2UoY29uc3QgUEdS VXNhZ2UgKnJ1MCk7CiBleHRlcm4gdm9pZCBXYWxQaXBlbGluZV9HZXRTdGF0cyh1aW50NjQgKnJl Y29yZHNfc2VudCwgdWludDY0ICpyZWNvcmRzX3JlY2VpdmVkLAogCQkJCQkJCQkgIFhMb2dSZWNQ dHIgKnByb2R1Y2VyX2xzbiwgWExvZ1JlY1B0ciAqY29uc3VtZXJfbHNuKTsKIGV4dGVybiBib29s IEFtV2FsUGlwZWxpbmUodm9pZCk7Ci0tIAoyLjM0LjEKCg== --000000000000ce41dd06563dfc9a Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0003-Pipelined-Recovery-Decoupling-startup-and-produce.patch" Content-Disposition: attachment; filename="v5-0003-Pipelined-Recovery-Decoupling-startup-and-produce.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrenz3b22 RnJvbSBkNWNjNGQ5NDcwMWFmNTJkZDVmMWQ1YzA4NTYyZjFkMGRkYzVjMjdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBNb24sIDIyIEp1biAyMDI2IDEyOjMzOjUzICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NSAz LzVdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIERlY291cGxpbmcgc3RhcnR1cCBhbmQgcHJvZHVjZXIK IHN0YXRlcy4KCkJlZm9yZSB0aGlzIHBhdGNoLCBtb3N0IHN0YXRlcy92YXJpYWJsZXMgd2VyZSBz dGF0aWNhbGx5IGRlZmluZWQKdW5kZXIgeGxvZ3JlY292ZXJ5LmMgYXMgdGhleSB3b3VsZCBvbmx5 IGJlIG5lZWRlZCBieSB0aGUgc3RhcnR1cCBwcm9jZXNzLgpIb3dldmVyLCB0byBpbXBsZW1lbnQg cGlwZWxpbmluZywgdGhlIHByb2R1Y2VyIChwYXJhbGxlbCBkZWNvZGVyKQpzaG91bGQgYWxzbyBi ZSBhd2FyZSBvZiB0aGVzZSBzdGF0aWMgc3RhdGVzLiBTb21lIG9mIHRoZXNlIHN0YXRlcyBzdGF5 cwpjb25zdGFudCB0aHJvdWdob3V0IGRlY29kaW5nL3JlY292ZXJ5LCB3aGlsZSBvdGhlcnMgbWF5 IGNoYW5nZSBkdXJpbmcKcmVjb3ZlcnkuCgpUbyBhZGRyZXNzIHRoaXMsIFdhbFBpcGVsaW5lUGFy YW1zIGNvbnRhaW5zIGEgc2V0IG9mIGFsbCBsb2NhbCBzdGF0ZXMKdGhhdCB0aGUgc3RhcnR1cCBw cm9jZXNzIGhhZCBiZWZvcmUgaXQgc3RhcnRlZCB0aGUgcGlwZWxpbmUuIFRoZXNlCnN0YXRlcyBh cmUgcGFzc2VkIHRvIHRoZSBwcm9kdWNlciwgd2hpY2ggdXBkYXRlcyB0aGVtIGFjY29yZGluZ2x5 CmJlZm9yZSBlbnRlcmluZyB0aGUgZGVjb2RpbmcgbG9vcC4gVGhpcyBpcyBkb25lIHVzaW5nCldh bFBpcGVsaW5lX0V4cG9ydFJlY292ZXJ5U3RhdGUoKSBhbmQgV2FsUGlwZWxpbmVfSW1wb3J0UmVj b3ZlcnlTdGF0ZSgpLgoKV2FsUGlwZWxpbmVfRXhwb3J0UmVjb3ZlcnlTdGF0ZSAtLT4gc2F2ZXMg YWxsIHRoZSBsb2NhbCBzdGFydHVwIHByb2Mgc3RhdGVzCldhbFBpcGVsaW5lX0ltcG9ydFJlY292 ZXJ5U3RhdGUgLS0+IGFwcGx5IHRob3NlIHN0YXRlcyB0byB0aGUgcHJvZHVjZXIgY29udGV4dAoK VG8gbWFuYWdlIHRoZSBzdGF0ZXMgdGhhdCBtYXkga2VlcCBjaGFuZ2luZyBkdXJpbmcgdGhlIHJl Y292ZXJ5LCB3ZQphZGRlZCB0aGVtIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGluIFhMb2dSZWNvdmVy eUN0bERhdGEuIE5vdyB3aGVuZXZlcgp0aGUgc3RhcnR1cCBwcm9jIHVwZGF0ZXMgYW55IG9mIHN1 Y2ggbG9jYWwgc3RhdGVzIHRoZSBzaGFyZWQgc3RhdGUKaXMgYWxzbyB1cGF0ZWQgYWNjb3JkaW5n bHksICBzbyB0aGF0IHRoZSBwaXBlbGluZSBzdGF5IGF3YXJlIG9mIHRoaXMKdXBkYXRlIGR1cmlu ZyB0aGUgZGVjb2RpbmcuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAg ICAgICAgfCAgMTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j IHwgNTE4ICsrKysrKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0 YW5kYnkuYyAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUu aCAgICAgICAgIHwgIDQ2ICsrCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmggICAg ICAgICB8ICA4NSArKysrCiA1IGZpbGVzIGNoYW5nZWQsIDYyOSBpbnNlcnRpb25zKCspLCAzNiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggYTgxOTEyYjc0NDEu LjhjZGMxMTE5OTg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC01OSw2ICs1OSw3 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ2FyY2hpdmUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUg ImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0 aWxzLmgiCkBAIC02MjY5LDYgKzYyNzAsMTIgQEAgU3RhcnR1cFhMT0codm9pZCkKIAogCQkJCVBy b2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZydW5uaW5nKTsKIAkJCX0KKworCQkJLyoKKwkJCSAq IEZpbmFseSB1cGRhdGUgdGhlIHNoYXJlZCBzdGFuZGJ5IHN0YXRlLCBzbyB0aGF0IHBpcGVsaW5l IHdvcmtlcgorCQkJICogc3RheSBjb25zaXN0ZW50IHdpdGggdGhlIHN0YXJ0dXAgcHJvY2Vzcy4K KwkJCSAqLworCQkJU2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKCk7CiAJCX0KIAogCQkvKgpAQCAt ODkyNSw2ICs4OTMyLDEyIEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJ CXJ1bm5pbmcueGlkcyA9IHhpZHM7CiAKIAkJCVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZy dW5uaW5nKTsKKworCQkJLyoKKwkJCSAqIFVwZGF0ZSB0aGUgc2hhcmVkIHN0YW5kYnkgc3RhdGUs IHNvIHRoYXQgcGlwZWxpbmUgd29ya2VyCisJCQkgKiBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUg c3RhcnR1cCBwcm9jZXNzLgorCQkJICovCisJCQlTZXRTaGFyZWRIb3RTdGFuZGJ5U3RhdGUoKTsK IAkJfQogCiAJCS8qIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weSBhbHdheXMgdHJhY2tzIHRo ZSBsYXRlc3QgY2twdCBYSUQgKi8KQEAgLTEwMTQ5LDcgKzEwMTYyLDcgQEAgR2V0T2xkZXN0UmVz dGFydFBvaW50KFhMb2dSZWNQdHIgKm9sZHJlY3B0ciwgVGltZUxpbmVJRCAqb2xkdGxpKQogdm9p ZAogWExvZ1NodXRkb3duV2FsUmN2KHZvaWQpCiB7Ci0JQXNzZXJ0KEFtU3RhcnR1cFByb2Nlc3Mo KSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIpOworCUFzc2VydChBbVN0YXJ0dXBQcm9jZXNzKCkgfHwg QW1XYWxQaXBlbGluZSgpIHx8ICFJc1VuZGVyUG9zdG1hc3Rlcik7CiAKIAlTaHV0ZG93bldhbFJj digpOwogCVJlc2V0SW5zdGFsbFhMb2dGaWxlU2VnbWVudEFjdGl2ZSgpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAwZTE2NTczNjUyNC4uNjVjOTZhNGQx MDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC0zNSw2 ICszNSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxv Z19pbnRlcm5hbC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nYXJjaGl2ZS5oIgorI2luY2x1ZGUg ImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3ByZWZldGNoZXIu aCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVjb3ZlcnkuaCIKQEAgLTEwMCw2ICsxMDEsOCBAQCBpbnQJCQlyZWNvdmVyeV9taW5fYXBwbHlf ZGVsYXkgPSAwOwogY2hhcgkgICAqUHJpbWFyeUNvbm5JbmZvID0gTlVMTDsKIGNoYXIJICAgKlBy aW1hcnlTbG90TmFtZSA9IE5VTEw7CiBib29sCQl3YWxfcmVjZWl2ZXJfY3JlYXRlX3RlbXBfc2xv dCA9IGZhbHNlOworYm9vbAkJd2FsX3BpcGVsaW5lX2VuYWJsZWQgPSBmYWxzZTsKK2ludAkJCXdh bF9waXBlbGluZV9tcV9zaXplX21iID0gMTI4OwogCiAvKgogICogcmVjb3ZlcnlUYXJnZXRUaW1l TGluZUdvYWw6IHdoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLCBpZiBhbnkKQEAgLTIwNiwxNyArMjA5 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgWExvZ1BhZ2VSZWFkUHJpdmF0ZQogLyogZmxhZyB0byB0ZWxs IFhMb2dQYWdlUmVhZCB0aGF0IHdlIGhhdmUgc3RhcnRlZCByZXBsYXlpbmcgKi8KIHN0YXRpYyBi b29sIEluUmVkbyA9IGZhbHNlOwogCi0vKgotICogQ29kZXMgaW5kaWNhdGluZyB3aGVyZSB3ZSBn b3QgYSBXQUwgZmlsZSBmcm9tIGR1cmluZyByZWNvdmVyeSwgb3Igd2hlcmUKLSAqIHRvIGF0dGVt cHQgdG8gZ2V0IG9uZS4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0JWExPR19GUk9NX0FOWSA9IDAs CQkJLyogcmVxdWVzdCB0byByZWFkIFdBTCBmcm9tIGFueSBzb3VyY2UgKi8KLQlYTE9HX0ZST01f QVJDSElWRSwJCQkvKiByZXN0b3JlZCB1c2luZyByZXN0b3JlX2NvbW1hbmQgKi8KLQlYTE9HX0ZS T01fUEdfV0FMLAkJCS8qIGV4aXN0aW5nIGZpbGUgaW4gcGdfd2FsICovCi0JWExPR19GUk9NX1NU UkVBTSwJCQkvKiBzdHJlYW1lZCBmcm9tIHByaW1hcnkgKi8KLX0gWExvZ1NvdXJjZTsKIAogLyog aHVtYW4tcmVhZGFibGUgbmFtZXMgZm9yIFhMb2dTb3VyY2VzLCBmb3IgZGVidWdnaW5nIG91dHB1 dCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHhsb2dTb3VyY2VOYW1lc1tdID0geyJhbnki LCAiYXJjaGl2ZSIsICJwZ193YWwiLCAic3RyZWFtIn07CkBAIC0zNjUsMTIgKzM1Nyw2IEBAIHN0 YXRpYyB2b2lkIHJlY292ZXJ5UGF1c2VzSGVyZShib29sIGVuZE9mUmVjb3ZlcnkpOwogc3RhdGlj IGJvb2wgcmVjb3ZlcnlBcHBseURlbGF5KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKIHN0YXRp YyB2b2lkIENvbmZpcm1SZWNvdmVyeVBhdXNlZCh2b2lkKTsKIAotc3RhdGljIFhMb2dSZWNvcmQg KlJlYWRSZWNvcmQoWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyLAotCQkJCQkJCSAgaW50 IGVtb2RlLCBib29sIGZldGNoaW5nX2NrcHQsCi0JCQkJCQkJICBUaW1lTGluZUlEIHJlcGxheVRM SSk7Ci0KLXN0YXRpYyBpbnQJWExvZ1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRl ciwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRyLAotCQkJCQkJIGludCByZXFMZW4sIFhMb2dSZWNQ dHIgdGFyZ2V0UmVjUHRyLCBjaGFyICpyZWFkQnVmKTsKIHN0YXRpYyBYTG9nUGFnZVJlYWRSZXN1 bHQgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLAogCQkJCQkJ CQkJCQkJCSAgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJCQkJCQkJCSAgYm9vbCBmZXRjaGluZ19j a3B0LApAQCAtMzkyLDYgKzM3OCw3IEBAIHN0YXRpYyBib29sIEhvdFN0YW5kYnlBY3RpdmVJblJl cGxheSh2b2lkKTsKIAogc3RhdGljIHZvaWQgU2V0Q3VycmVudENodW5rU3RhcnRUaW1lKFRpbWVz dGFtcFR6IHh0aW1lKTsKIHN0YXRpYyB2b2lkIFNldExhdGVzdFhUaW1lKFRpbWVzdGFtcFR6IHh0 aW1lKTsKK3N0YXRpYyB2b2lkIFdhbFBpcGVsaW5lX0V4cG9ydFJlY292ZXJ5U3RhdGUoV2FsUGlw ZWxpbmVQYXJhbXMgKnBhcmFtcyk7CiAKIC8qCiAgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZv ciBXQUwgcmVjb3ZlcnkKQEAgLTQxMiw5ICszOTksMjcgQEAgWExvZ1JlY292ZXJ5U2htZW1Jbml0 KHZvaWQgKmFyZykKIAogCVNwaW5Mb2NrSW5pdCgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 CiAJSW5pdFNoYXJlZExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gp OworCUluaXRTaGFyZWRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeUFwcGx5RGVsYXlM YXRjaCk7CiAJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5 Tm90UGF1c2VkQ1YpOwogfQogCisvKgorICogV2UgbWF5IG5vdCBiZSBhYmxlIHRvIHNoYXJlIGV4 cGVjdGVkVExFcyBsaXN0IGFjcm9zcyB0aGUgc2hhcmVkbWVtb3J5LgorICogRm9yIG5vdyBqdXN0 IHRyaWdnZXIgdGhlIHN0YXJ0dXAgcHJvY2VzcyAoY29uc3VtZXIpIHRvCisgKiByZXJlYWQgdGhl IHRpbWVsaW5laGlzdG9yeSBmaWxlICB3aGVuZXZlciBwaXBlbGluZSB1cGRhdGVzIHRoZSB2YWx1 ZSBmb3IKKyAqIGV4cGVjdGVkVExFcy4gU28gdGhlIGNvbnN1bWVyIHByb2Mgd2lsbCB1cGRhdGUg ZXhwZWN0ZWRUTEVzICBsb2NhbGx5LgorICovCitzdGF0aWMgdm9pZAorUGlwZWxpbmVDb25zdW1l ckV4cGVjdGVkVExFc1VwZGF0ZVRMSShUaW1lTGluZUlEIHJlY292ZXJ5VGFyZ2V0VExJKQorewor CWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1Jl Y292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNvdmVyeUN0bC0+ZXhwZWN0ZWRUTEVzVXBk YXRlVExJID0gcmVjb3ZlcnlUYXJnZXRUTEk7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292 ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQorfQorCiAvKgogICogQSB0aGluIHdyYXBwZXIgdG8gZW5h YmxlIFN0YW5kYnlNb2RlIGFuZCBkbyBvdGhlciBwcmVwYXJhdG9yeSB3b3JrIGFzCiAgKiBuZWVk ZWQuCkBAIC00MjksOCArNDM0LDEyIEBAIEVuYWJsZVN0YW5kYnlNb2RlKHZvaWQpCiAJICogc3Rh bmRieSBhcyBpdCB3aWxsIGFsd2F5cyBiZSBpbiByZWNvdmVyeSB1bmxlc3MgcHJvbW90ZWQuIFdl IGRpc2FibGUKIAkgKiBzdGFydHVwIHByb2dyZXNzIHRpbWVvdXQgaW4gc3RhbmRieSBtb2RlIHRv IGF2b2lkIGNhbGxpbmcKIAkgKiBzdGFydHVwX3Byb2dyZXNzX3RpbWVvdXRfaGFuZGxlcigpIHVu bmVjZXNzYXJpbHkuCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGFsc28gYmUgY2FsbGVk IGZyb20gdGhlIHBpcGVsaW5lIHdvcmtlci4KKwkgKiBCdXQgdGltZW91dCBjb3VsZCBvbmx5IGJl IGRzaWFibGVkIGJ5IHRoZSBzdGFydHVwIHByb2Nlc3MuCiAJICovCi0JZGlzYWJsZV9zdGFydHVw X3Byb2dyZXNzX3RpbWVvdXQoKTsKKwlpZiAoIUFtV2FsUGlwZWxpbmUoKSkKKwkJZGlzYWJsZV9z dGFydHVwX3Byb2dyZXNzX3RpbWVvdXQoKTsKIH0KIAogLyoKQEAgLTQ5MCw3ICs0OTksMTAgQEAg SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1No dXRkb3duX3B0ciwKIAkgKiByZWNvdmVyeSwgaWYgcmVxdWlyZWQuCiAJICovCiAJaWYgKEFyY2hp dmVSZWNvdmVyeVJlcXVlc3RlZCkKKwl7CisJCU93bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJl Y292ZXJ5QXBwbHlEZWxheUxhdGNoKTsKIAkJT3duTGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVj b3ZlcnlXYWtldXBMYXRjaCk7CisJfQogCiAJLyoKIAkgKiBTZXQgdGhlIFdBTCByZWFkaW5nIHBy b2Nlc3NvciBub3csIGFzIGl0IHdpbGwgYmUgbmVlZGVkIHdoZW4gcmVhZGluZwpAQCAtOTYyLDYg Kzk3NCwxNCBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwg Ym9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQltaW5SZWNvdmVyeVBvaW50VExJID0gMDsKIAl9CiAK KwkvKiB1cGRhdGUgc2hhcmVkIHN0YXRlLiAqLworCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkK Kwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhM b2dSZWNvdmVyeUN0bC0+SW5BcmNoaXZlUmVjb3ZlcnkgPSBJbkFyY2hpdmVSZWNvdmVyeTsKKwkJ U3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwl9CisKIAkvKgog CSAqIFN0YXJ0IHJlY292ZXJ5IGFzc3VtaW5nIHRoYXQgdGhlIGZpbmFsIHJlY29yZCBpc24ndCBs b3N0LgogCSAqLwpAQCAtOTczLDYgKzk5MywxMiBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZp bGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCSpoYXZlVGJsc3Bj TWFwX3B0ciA9IGhhdmVUYmxzcGNNYXA7CiB9CiAKK3ZvaWQgRGlzb3duUmVjb3ZlcnlXYWtldXBM YXRjaCh2b2lkKQoreworCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJCURpc293bkxh dGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOworfQorCiAvKgogICog U2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVjb3Zlcnkgc2lnbmFsIGZpbGVzIGFuZCBpZiBzbywgc2V0 IHN0YXRlIGZvcgogICogcmVjb3ZlcnkuCkBAIC0xNDAyLDYgKzE0MjgsNTUgQEAgcmVhZF90YWJs ZXNwYWNlX21hcChMaXN0ICoqdGFibGVzcGFjZXMpCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp YyB2b2lkCitSZXNldFN0YXRlc0lmUGlwZWxpbmVkKHZvaWQpCit7CisJaWYgKHdhbF9waXBlbGlu ZV9lbmFibGVkKQorCXsKKwkJLyoKKwkJICogSW52YWxpZGF0ZSBwdHJzIHBvaW50aW5nIHRoZSBw aXBlbGluZSBzaGFyZWQgbWVzc2FnZSBxdWV1ZS4KKwkJICoKKwkJICogV2UgZG8gdGhpcyBiZWNh dXNlIGluc3RlYWQgb2YgcG9pbnRpbmcgdG8gdGhlIGRlY29kZV9idWZmZXIgKHRoZQorCQkgKiBu b3JtYWwgaS5lLiBwaXBlbGluZS1vZmYpIHJlYWRlciB3b3VsZCBiZSBwb2ludGluZyB0byB0aGUK KwkJICogc2hfbXEgKHJpbmcgYnVmZmVyKSB0byBnZXQgdGhlIG5leHQgZGVjb2RlZCByZWNvcmQu IEFuZCB3ZSBjYW5ub3QKKwkJICogY29udGludWUgbGlrZSB0aGlzIGZvciBmdXR1cmUgeGxvZyBy ZWFkIGkuZS4gRmluaXNoV2FsUmVjb3ZlcnkoKS4KKwkJICoKKwkJICogU2VlIHVuZGVyIGRlc2Vy aWFsaXplX3dhbF9yZWNvcmQoKSBmb3IgbW9yZSBkZXRhaWxzLgorCQkgKi8KKwkJeGxvZ3JlYWRl ci0+cmVjb3JkID0gTlVMTDsKKwkJeGxvZ3JlYWRlci0+ZGVjb2RlX3F1ZXVlX2hlYWQgPSBOVUxM OworCQl4bG9ncmVhZGVyLT5kZWNvZGVfcXVldWVfdGFpbCA9IE5VTEw7CisKKwkJLyoKKwkJICog SW52YWxpZGF0ZSBjb250ZW50cyBvZiBpbnRlcm5hbCBidWZmZXIgYmVmb3JlIHJlYWQgYXR0ZW1w dC4KKwkJICoKKwkJICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSB3ZXJlIHJlYWRpbmcgZnJv bSB0aGUgcGlwZWxpbmVkIHJlYWRlcgorCQkgKiBzbyBmYXIgYW5kIHVwZGF0aW5nIHRoZSBsb2Nh bCBidWZmZXIgcHVibGljIHN0YXRlcyBhY2NvcmRpbmdseS4KKwkJICogU28gYmV0dGVyIHRvIGlu dmFsaWRhdGUgdGhlIGFueSBjYWNoZWQgc3RhdGUgdGhhdCB3YXMgdGhlcmUKKwkJICogYmVmb3Jl IHRoZSBwaXBlbGluZSBzdGFydGVkLCBhbmQgZm9yY2UgYSByZXJlYWQgZm9yIHRoZSBmdXR1cmUK KwkJICogeGxvZyByZWFkcyBpLmUuIHJlZmV0Y2hpbmcgdGhlIGxhc3QgcmVjb3JkIGluIEZpbmlz aFdhbFJlY292ZXJ5KCkuCisJCSAqLworCQl4bG9ncmVhZGVyLT5yZWFkTGVuID0gMDsKKwkJeGxv Z3JlYWRlci0+c2VnLndzX3NlZ25vID0gMDsKKwkJeGxvZ3JlYWRlci0+c2Vnb2ZmID0gMDsKKwor CQkvKgorCQkgKiBVcGRhdGUgdGhlIHN0YXJ0dXAgcHJvYyBsb2NhbCBzdGF0ZSB3aXRoIHRoZSBw aXBlbGluZSBzdGF0ZSwKKwkJICogYmVjYXVzZSBwaXBlbGluZSB3YXMgZG9pbmcgdGhlIG1haW4g ZGVjb2RpbmcgYW5kIGhlbmNlIGhhdmUgdGhlIG1vcmUKKwkJICogdXBkYXRlZCBpbmZvcm1hdGlv bi4KKwkJICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 CisJCUluQXJjaGl2ZVJlY292ZXJ5ID0gWExvZ1JlY292ZXJ5Q3RsLT5JbkFyY2hpdmVSZWNvdmVy eTsKKwkJbWlzc2luZ0NvbnRyZWNQdHIgPSBYTG9nUmVjb3ZlcnlDdGwtPm1pc3NpbmdDb250cmVj UHRyOworCQlhYm9ydGVkUmVjUHRyID0gWExvZ1JlY292ZXJ5Q3RsLT5hYm9ydGVkUmVjUHRyOwor CisJCS8qIG9ubHkgdXBkYXRlIGlmIGZvdW5kIGEgbmV3IHRpbWVsaW5lICovCisJCWlmIChyZWNv dmVyeVRhcmdldFRMSSA8IFhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlUYXJnZXRUTEkpCisJCQly ZWNvdmVyeVRhcmdldFRMSSA9IFhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlUYXJnZXRUTEk7CisJ CVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQorfQorCiAv KgogICogRmluaXNoIFdBTCByZWNvdmVyeS4KICAqCkBAIC0xNDIxLDYgKzE0OTYsOCBAQCBGaW5p c2hXYWxSZWNvdmVyeSh2b2lkKQogCVRpbWVMaW5lSUQJbGFzdFJlY1RMSTsKIAlYTG9nUmVjUHRy CWVuZE9mTG9nOwogCisJUmVzZXRTdGF0ZXNJZlBpcGVsaW5lZCgpOworCiAJLyoKIAkgKiBLaWxs IFdBTCByZWNlaXZlciwgaWYgaXQncyBzdGlsbCBydW5uaW5nLCBiZWZvcmUgd2UgY29udGludWUg dG8gd3JpdGUKIAkgKiB0aGUgc3RhcnR1cCBjaGVja3BvaW50IGFuZCBhYm9ydGVkLWNvbnRyZWNv cmQgcmVjb3Jkcy4gSXQgd2lsbCB0cnVtcApAQCAtMTQ3OCw2ICsxNTU1LDcgQEAgRmluaXNoV2Fs UmVjb3Zlcnkodm9pZCkKIAkJbGFzdFJlYyA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVk UmVhZFJlY1B0cjsKIAkJbGFzdFJlY1RMSSA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVk VExJOwogCX0KKwogCVhMb2dQcmVmZXRjaGVyQmVnaW5SZWFkKHhsb2dwcmVmZXRjaGVyLCBsYXN0 UmVjKTsKIAkodm9pZCkgUmVhZFJlY29yZCh4bG9ncHJlZmV0Y2hlciwgUEFOSUMsIGZhbHNlLCBs YXN0UmVjVExJKTsKIAllbmRPZkxvZyA9IHhsb2dyZWFkZXItPkVuZFJlY1B0cjsKQEAgLTE2MDAs NiArMTY3OCwxNyBAQCBTaHV0ZG93bldhbFJlY292ZXJ5KHZvaWQpCiAJICogaXQsIGJ1dCBsZXQn cyBkbyBpdCBmb3IgdGhlIHNha2Ugb2YgdGlkaW5lc3MuCiAJICovCiAJaWYgKEFyY2hpdmVSZWNv dmVyeVJlcXVlc3RlZCkKKwl7CisJCURpc293bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292 ZXJ5QXBwbHlEZWxheUxhdGNoKTsKKworCQkvKgorCQkgKiBPbmx5IGRpc293biB0aGUgbGF0Y2gg aWYgd2UgKHN0YXJ0dXAgcHJvY2Vzcykgd2VyZSB0aGUgb3duZXIKKwkJICogaS5lLiBwaXBlbGlu ZSBkaXNhYmxlZC4KKwkJICovCisJCWlmICghd2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCQlEaXNv d25MYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNoKTsKKwl9Cit9CiAK IC8qCiAgKiBHZXQgbmV4dCByZWNvcmQgZm9yIHJlZG8uCkBAIC0xNzU4LDYgKzE4NDcsNyBAQCBQ ZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJCVdhbFBpcGVsaW5lUGFyYW1zICpwYXJhbXMgPSBw YWxsb2MwKHNpemVvZihXYWxQaXBlbGluZVBhcmFtcykpOwogCiAJCQlwYXJhbXMtPlJlcGxheVRM SSA9IHJlcGxheVRMSTsKKwkJCVdhbFBpcGVsaW5lX0V4cG9ydFJlY292ZXJ5U3RhdGUocGFyYW1z KTsKIAkJCVdhbFBpcGVsaW5lX1N0YXJ0KHBhcmFtcyk7CiAJCX0KIApAQCAtMTk1Myw3ICsyMDQz LDkgQEAgc3RhdGljIHZvaWQKIEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3Jl YWRlciwgWExvZ1JlY29yZCAqcmVjb3JkLCBUaW1lTGluZUlEICpyZXBsYXlUTEkpCiB7CiAJRXJy b3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJYm9vbCAJCXdha2V1cFdhbFJjdnIgPSBm YWxzZTsKIAlib29sCQlzd2l0Y2hlZFRMSSA9IGZhbHNlOworCWJvb2wJCXBpcGVsaW5lX2VuYWJs ZWRfc3RhbmRieSA9IGZhbHNlOwogCiAJLyogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1cHBvcnQg Zm9yIGVyZXBvcnQoKSAqLwogCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gcm1fcmVkb19lcnJvcl9j YWxsYmFjazsKQEAgLTIwNTQsNiArMjE0NiwyMiBAQCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVy U3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZUxpbmVJRCAqcmVwbAog CVhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkUmVhZFJlY1B0ciA9IHhsb2dyZWFkZXItPlJl YWRSZWNQdHI7CiAJWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIgPSB4bG9n cmVhZGVyLT5FbmRSZWNQdHI7CiAJWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRUTEkgPSAq cmVwbGF5VExJOworCisJLyoKKwkgKiBBcyB0aGUgcGlwZWxpbmUgKHByb2R1Y2VyKSB3YXMgcnVu bmluZyB3YXkgYWhlYWQgb2YgdGhlIHN0YXJ0dXAgcHJvYworCSAqIChjb25zdW1lciksIHNlZSBp ZiB0aGUgcHJvZHVjZXIgYXNrZWQgdG8gd2FrZXVwIHRoZSB3YWxfcmVjaWV2ZXIgYnkKKwkgKiB1 cGRhdGluZyB0aGUgdmFsdWUgb2YgYFdha2V1cFdhbFJjdnJSZWNQdHJgLgorCSAqLworCWlmIChY TG9nUmVjb3ZlcnlDdGwtPldha2V1cFdhbFJjdnJSZWNQdHIgIT0gSW52YWxpZFhMb2dSZWNQdHIg JiYKKwkJeGxvZ3JlYWRlci0+RW5kUmVjUHRyID49IFhMb2dSZWNvdmVyeUN0bC0+V2FrZXVwV2Fs UmN2clJlY1B0cikKKwl7CisJCUFzc2VydCh3YWxfcGlwZWxpbmVfZW5hYmxlZCk7CisKKwkJWExv Z1JlY292ZXJ5Q3RsLT5XYWtldXBXYWxSY3ZyUmVjUHRyID0gSW52YWxpZFhMb2dSZWNQdHI7CisJ CXdha2V1cFdhbFJjdnIgPSB0cnVlOworCX0KKworCXBpcGVsaW5lX2VuYWJsZWRfc3RhbmRieSA9 IFhMb2dSZWNvdmVyeUN0bC0+c3RhbmJ5RW5hYmxlZDsKIAlTcGluTG9ja1JlbGVhc2UoJlhMb2dS ZWNvdmVyeUN0bC0+aW5mb19sY2spOwogCiAJLyogLS0tLS0tCkBAIC0yMDg1LDggKzIxOTMsMTEg QEAgQXBwbHlXYWxSZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjb3Jk ICpyZWNvcmQsIFRpbWVMaW5lSUQgKnJlcGwKIAkgKiBJZiBybV9yZWRvIGNhbGxlZCBYTG9nUmVx dWVzdFdhbFJlY2VpdmVyUmVwbHksIHRoZW4gd2Ugd2FrZSB1cCB0aGUKIAkgKiByZWNlaXZlciBz byB0aGF0IGl0IG5vdGljZXMgdGhlIHVwZGF0ZWQgbGFzdFJlcGxheWVkRW5kUmVjUHRyIGFuZCBz ZW5kcwogCSAqIGEgcmVwbHkgdG8gdGhlIHByaW1hcnkuCisJICoKKwkgKiBBbHNvIHdha2V1cCBp biBjYXNlIHJlcXVlc3RlZCBieSB0aGUgcGlwZWxpbmUgZGVjb2RlciBiZWZvcmUgd2FpdGluZwor CSAqIGZvciBtb3JlIHdhbC4KIAkgKi8KLQlpZiAoZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSkK KwlpZiAoZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSB8fCB3YWtldXBXYWxSY3ZyKQogCXsKIAkJ ZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSA9IGZhbHNlOwogCQlXYWxSY3ZSZXF1ZXN0QXBwbHlS ZXBseSgpOwpAQCAtMjEwNyw2ICsyMjE4LDE2IEBAIEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJT dGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY29yZCAqcmVjb3JkLCBUaW1lTGluZUlEICpyZXBsCiAJ CS8qIFJlc2V0IHRoZSBwcmVmZXRjaGVyLiAqLwogCQlYTG9nUHJlZmV0Y2hSZWNvbmZpZ3VyZSgp OwogCX0KKworCS8qCisJICogQ29udXNtZXIgc2hvdWxkIGFsc28gZW5hYmxlIHRoZSBzdGFuZGJ5 IGlmIHBpcGxpbmUgaGF2ZS4KKwkgKi8KKwlpZiAocGlwZWxpbmVfZW5hYmxlZF9zdGFuZGJ5KQor CQlFbmFibGVTdGFuZGJ5TW9kZSgpOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNo bS0+bXV0ZXgpOworCVdhbFBpcGVsaW5lU2htLT5hcHBsaWVkX2xzbiA9IHhsb2dyZWFkZXItPkVu ZFJlY1B0cjsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CiB9CiAK IC8qCkBAIC0yMjMyLDEyICsyMzUzLDI3IEBAIENoZWNrUmVjb3ZlcnlDb25zaXN0ZW5jeSh2b2lk KQogCiAJQXNzZXJ0KEluQXJjaGl2ZVJlY292ZXJ5KTsKIAotCS8qCi0JICogYXNzdW1lIHRoYXQg d2UgYXJlIGNhbGxlZCBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzLCBhbmQgaGVuY2UgZG9uJ3QgbmVl ZAotCSAqIGEgbG9jayB0byByZWFkIGxhc3RSZXBsYXllZEVuZFJlY1B0cgotCSAqLwotCWxhc3RS ZXBsYXllZEVuZFJlY1B0ciA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRy OwotCWxhc3RSZXBsYXllZFRMSSA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkVExJOwor CisJaWYgKEFtU3RhcnR1cFByb2Nlc3MoKSkKKwl7CisJCS8qCisJCSAqIGFzc3VtZSB0aGF0IHdl IGFyZSBjYWxsZWQgaW4gdGhlIHN0YXJ0dXAgcHJvY2VzcywgYW5kIGhlbmNlIGRvbid0IG5lZWQK KwkJICogYSBsb2NrIHRvIHJlYWQgbGFzdFJlcGxheWVkRW5kUmVjUHRyCisJCSAqLworCQlsYXN0 UmVwbGF5ZWRFbmRSZWNQdHIgPSBYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0 cjsKKwkJbGFzdFJlcGxheWVkVExJID0gWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRUTEk7 CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFdlIGNvdWxkIGJlIGluIHRoZSBwaXBlbGluZSB3 b3JrZXIsIHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlcy4KKwkJICovCisJCVNwaW5Mb2NrQWNx dWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCWxhc3RSZXBsYXllZEVuZFJlY1B0 ciA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyOworCQlsYXN0UmVwbGF5 ZWRUTEkgPSBYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZFRMSTsKKwkJc3RhbmRieVN0YXRl ID0gWExvZ1JlY292ZXJ5Q3RsLT5zdGFuZGJ5U3RhdGU7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExv Z1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQogCiAJLyoKIAkgKiBIYXZlIHdlIHJlYWNoZWQg dGhlIHBvaW50IHdoZXJlIG91ciBiYXNlIGJhY2t1cCB3YXMgY29tcGxldGVkPwpAQCAtMjQyNCwx MiArMjU2MCwyOCBAQCBzdGF0aWMgdm9pZAogY2hlY2tUaW1lTGluZVN3aXRjaChYTG9nUmVjUHRy IGxzbiwgVGltZUxpbmVJRCBuZXdUTEksIFRpbWVMaW5lSUQgcHJldlRMSSwKIAkJCQkJVGltZUxp bmVJRCByZXBsYXlUTEkpCiB7CisKKwogCS8qIENoZWNrIHRoYXQgdGhlIHJlY29yZCBhZ3JlZXMg b24gd2hhdCB0aGUgY3VycmVudCAob2xkKSB0aW1lbGluZSBpcyAqLwogCWlmIChwcmV2VExJICE9 IHJlcGxheVRMSSkKIAkJZXJlcG9ydChQQU5JQywKIAkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIHBy ZXZpb3VzIHRpbWVsaW5lIElEICV1IChjdXJyZW50IHRpbWVsaW5lIElEICV1KSBpbiBjaGVja3Bv aW50IHJlY29yZCIsCiAJCQkJCQlwcmV2VExJLCByZXBsYXlUTEkpKSk7CiAKKworCS8qIFBpcGVs aW5lIG1heSBoYXZlIHVwZGF0ZWQgdGhlIGV4cGVjdGVkVExFcyAqLworCWlmICh3YWxfcGlwZWxp bmVfZW5hYmxlZCkKKwl7CisJCVRpbWVMaW5lSUQJdGFyZ2V0VExJOworCisJCVNwaW5Mb2NrQWNx dWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCXRhcmdldFRMSSA9IFhMb2dSZWNv dmVyeUN0bC0+ZXhwZWN0ZWRUTEVzVXBkYXRlVExJOworCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dS ZWNvdmVyeUN0bC0+aW5mb19sY2spOworCisJCWlmICh0YXJnZXRUTEkpCisJCQlleHBlY3RlZFRM RXMgPSByZWFkVGltZUxpbmVIaXN0b3J5KHRhcmdldFRMSSk7CisJfQorCiAJLyoKIAkgKiBUaGUg bmV3IHRpbWVsaW5lIGJldHRlciBiZSBpbiB0aGUgbGlzdCBvZiB0aW1lbGluZXMgd2UgZXhwZWN0 IHRvIHNlZSwKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIHRpbWVsaW5lIGhpc3RvcnkuIEl0IHNob3Vs ZCBhbHNvIG5vdCBkZWNyZWFzZS4KQEAgLTI5NzEsOCArMzEyMywxMyBAQCBnZXRSZWNvdmVyeVN0 b3BSZWFzb24odm9pZCkKIHN0YXRpYyB2b2lkCiByZWNvdmVyeVBhdXNlc0hlcmUoYm9vbCBlbmRP ZlJlY292ZXJ5KQogewotCS8qIERvbid0IHBhdXNlIHVubGVzcyB1c2VycyBjYW4gY29ubmVjdCEg Ki8KLQlpZiAoIUxvY2FsSG90U3RhbmRieUFjdGl2ZSkKKwkvKgorCSAqIERvbid0IHBhdXNlIHVu bGVzcyB1c2VycyBjYW4gY29ubmVjdCEKKwkgKgorCSAqIEFzIHRoaXMgZnVuY3Rpb24gY291bGQg YmUgY2FsbGVkIGZyb20gdGhlIHBpcGVsaW5lIHByb2Nlc3Mgc28gYmV0dGVyCisJICogdG8gcmVs eSBvbiB0aGUgc2hhcmVkIHN0YXRlIHRoZW4gY2hlY2tpbmcgTG9jYWxIb3RTdGFuZGJ5QWN0aXZl LgorCSAqLworCWlmICghSG90U3RhbmRieUFjdGl2ZSgpKQogCQlyZXR1cm47CiAKIAkvKiBEb24n dCBwYXVzZSBhZnRlciBzdGFuZGJ5IHByb21vdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgKi8KQEAg LTMwNzcsNyArMzIzNCw3IEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAogCXdoaWxlICh0cnVlKQogCXsKLQkJUmVzZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3Rs LT5yZWNvdmVyeVdha2V1cExhdGNoKTsKKwkJUmVzZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5y ZWNvdmVyeUFwcGx5RGVsYXlMYXRjaCk7CiAKIAkJLyogVGhpcyBtaWdodCBjaGFuZ2UgcmVjb3Zl cnlfbWluX2FwcGx5X2RlbGF5LiAqLwogCQlQcm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKCk7 CkBAIC0zMTAyLDcgKzMyNTksNyBAQCByZWNvdmVyeUFwcGx5RGVsYXkoWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCiAKIAkJZWxvZyhERUJVRzIsICJyZWNvdmVyeSBhcHBseSBkZWxheSAlbGQgbWls bGlzZWNvbmRzIiwgbXNlY3MpOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goJlhMb2dSZWNvdmVyeUN0 bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCwKKwkJKHZvaWQpIFdhaXRMYXRjaCgmWExvZ1JlY292ZXJ5 Q3RsLT5yZWNvdmVyeUFwcGx5RGVsYXlMYXRjaCwKIAkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9U SU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKIAkJCQkJCSBtc2VjcywKIAkJCQkJCSBXQUlU X0VWRU5UX1JFQ09WRVJZX0FQUExZX0RFTEFZKTsKQEAgLTMyMTcsNiArMzM3NCwxNyBAQCBSZWFk UmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAogCQkJewog CQkJCWFib3J0ZWRSZWNQdHIgPSB4bG9ncmVhZGVyLT5hYm9ydGVkUmVjUHRyOwogCQkJCW1pc3Np bmdDb250cmVjUHRyID0geGxvZ3JlYWRlci0+bWlzc2luZ0NvbnRyZWNQdHI7CisKKwkJCQkvKgor CQkJCSAqIEFsc28gdXBkYXRlIHRoZSBzaGFyZWQgc3RhdGUgaWYgbmVjZXNzYXJ5CisJCQkJICov CisJCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJCXsKKwkJCQkJU3BpbkxvY2tBY3F1 aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5h Ym9ydGVkUmVjUHRyID0gYWJvcnRlZFJlY1B0cjsKKwkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5taXNz aW5nQ29udHJlY1B0ciA9IG1pc3NpbmdDb250cmVjUHRyOworCQkJCQlTcGluTG9ja1JlbGVhc2Uo JlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKHJlYWRG aWxlID49IDApCkBAIC0zMjg0LDkgKzM0NTIsMzEgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hl ciAqeGxvZ3ByZWZldGNoZXIsIGludCBlbW9kZSwKIAkJCWlmICghSW5BcmNoaXZlUmVjb3Zlcnkg JiYgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmCiAJCQkJIWZldGNoaW5nX2NrcHQpCiAJCQl7 CisJCQkJLyoKKwkJCQkgKiBXYWl0IGZvciB0aGUgc3RhcnR1cCBwcm9jZXNzIHRvIGFwcGx5IHRo ZSBsYXN0IHNlbnQgcmVjb3JkCisJCQkJICogYnkgdGhlIHBpcGVsaW5lLCBvdGhlcndpc2Ugd2Ug d2lsbCBmYWlsIHRoZSBjb25zaXN0ZW5jeQorCQkJCSAqIGNoZWNrIGFzIGFsbCB0aGUgcmVjb3Jk cyBkZWNvZGVkIGJ5IHRoZSBwaXBlbGluZSBoYXZlIG5vdAorCQkJCSAqIGFycml2ZWQvY29uc3Vt ZWQgYnkgdGhlIGNvbnN1bWVyIChzdGF0dXAgcHJvYykgeWV0LgorCQkJCSAqLworCQkJCWlmICh3 YWxfcGlwZWxpbmVfZW5hYmxlZCAmJiBBbVdhbFBpcGVsaW5lKCkpCisJCQkJCVdhbFBpcGVsaW5l X1dhaXRGb3JDb25zdW1lckNhdGNodXAoKTsKKwogCQkJCWVyZXBvcnQoREVCVUcxLAogCQkJCQkJ KGVycm1zZ19pbnRlcm5hbCgicmVhY2hlZCBlbmQgb2YgV0FMIGluIHBnX3dhbCwgZW50ZXJpbmcg YXJjaGl2ZSByZWNvdmVyeSIpKSk7CiAJCQkJSW5BcmNoaXZlUmVjb3ZlcnkgPSB0cnVlOworCisJ CQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJCXsKKwkJCQkJLyogYWxzbyB1cGRhdGUg dGhlIHNoYXJlZCBzdGF0ZSAqLworCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0 bC0+aW5mb19sY2spOworCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPkluQXJjaGl2ZVJlY292ZXJ5ID0g SW5BcmNoaXZlUmVjb3Zlcnk7CisKKwkJCQkJLyogdXBkYXRlIHN0YXJ0dXAgcHJvYyAoY29uc3Vt ZXIpIGFib3V0IHRoZSBzdGFuZGJ5bW9kZSAqLworCQkJCQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0 ZWQpCisJCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPnN0YW5ieUVuYWJsZWQgPSB0cnVlOworCQkJCQlT cGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCX0KKwogCQkJ CWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCkKIAkJCQkJRW5hYmxlU3RhbmRieU1vZGUoKTsKIApA QCAtMzc4Myw3ICszOTczLDggQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQ dHIgUmVjUHRyLCBib29sIHJhbmRBY2Nlc3MsCiAJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhSZWNQ dHIpKTsKIAogCQkJCQkJLyogRG8gYmFja2dyb3VuZCB0YXNrcyB0aGF0IG1pZ2h0IGJlbmVmaXQg dXMgbGF0ZXIuICovCi0JCQkJCQlLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFpbnRl bmFuY2UoKTsKKwkJCQkJCWlmIChBbVN0YXJ0dXBQcm9jZXNzKCkpCisJCQkJCQkJS25vd25Bc3Np Z25lZFRyYW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNlKCk7CiAKIAkJCQkJCSh2b2lkKSBXYWl0 TGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCwKIAkJCQkJCQkJCQkg V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8CkBAIC0zNzk1LDYgKzM5ODYsOCBAQCBXYWl0Rm9y V0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywK IAogCQkJCQkJLyogSGFuZGxlIGludGVycnVwdCBzaWduYWxzIG9mIHN0YXJ0dXAgcHJvY2VzcyAq LwogCQkJCQkJUHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cygpOworCQkJCQkJaWYgKHdhbF9w aXBlbGluZV9lbmFibGVkKQorCQkJCQkJCVByb2Nlc3NQaXBlbGluZUJnd0ludGVycnVwdHMoKTsK IAkJCQkJfQogCQkJCQlsYXN0X2ZhaWxfdGltZSA9IG5vdzsKIAkJCQkJY3VycmVudFNvdXJjZSA9 IFhMT0dfRlJPTV9BUkNISVZFOwpAQCAtMzgyMCw2ICs0MDEzLDE1IEBAIFdhaXRGb3JXQUxUb0Jl Y29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCSB4 bG9nU291cmNlTmFtZXNbb2xkU291cmNlXSwgeGxvZ1NvdXJjZU5hbWVzW2N1cnJlbnRTb3VyY2Vd LAogCQkJCSBsYXN0U291cmNlRmFpbGVkID8gImZhaWx1cmUiIDogInN1Y2Nlc3MiKTsKIAorCQlp ZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCXsKKwkJCS8qIGFsc28gdXBkYXRlIHRoZSBzaGFy ZWQgc3RhdGUgKi8KKwkJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xj ayk7CisJCQlYTG9nUmVjb3ZlcnlDdGwtPmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOwor CQkJcGVuZGluZ1dhbFJjdlJlc3RhcnQgPSBYTG9nUmVjb3ZlcnlDdGwtPnBlbmRpbmdXYWxSY3ZS ZXN0YXJ0OworCQkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsK KwkJfQorCiAJCS8qCiAJCSAqIFdlJ3ZlIG5vdyBoYW5kbGVkIHBvc3NpYmxlIGZhaWx1cmUuIFRy eSB0byByZWFkIGZyb20gdGhlIGNob3NlbgogCQkgKiBzb3VyY2UuCkBAIC0zODk0LDYgKzQwOTYs MTQgQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLCBib29s IHJhbmRBY2Nlc3MsCiAJCQkJCX0KIAkJCQkJcGVuZGluZ1dhbFJjdlJlc3RhcnQgPSBmYWxzZTsK IAorCQkJCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCQkJCXsKKwkJCQkJCS8qIGFsc28g dXBkYXRlIHRoZSBzaGFyZWQgc3RhdGUgKi8KKwkJCQkJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1Jl Y292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPnBlbmRpbmdXYWxS Y3ZSZXN0YXJ0ID0gZmFsc2U7CisJCQkJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0 bC0+aW5mb19sY2spOworCQkJCQl9CisKIAkJCQkJLyoKIAkJCQkJICogTGF1bmNoIHdhbHJlY2Vp dmVyIGlmIG5lZWRlZC4KIAkJCQkJICoKQEAgLTM5NzEsNiArNDE4MSwxNSBAQCBXYWl0Rm9yV0FM VG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJ CQkJCQlpZiAobGF0ZXN0Q2h1bmtTdGFydCA8PSBSZWNQdHIpCiAJCQkJCQkJewogCQkJCQkJCQlY TG9nUmVjZWlwdFRpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkJCQkJCQkJaWYgKHdh bF9waXBlbGluZV9lbmFibGVkKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvKiBhbHNvIHVwZGF0ZSB0 aGUgc2hhcmVkIHN0YXRlICovCisJCQkJCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVy eUN0bC0+aW5mb19sY2spOworCQkJCQkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5YTG9nUmVjZWlwdFRp bWUgPSBYTG9nUmVjZWlwdFRpbWU7CisJCQkJCQkJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNv dmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJCQl9CisKIAkJCQkJCQkJU2V0Q3VycmVudENodW5r U3RhcnRUaW1lKFhMb2dSZWNlaXB0VGltZSk7CiAJCQkJCQkJfQogCQkJCQkJfQpAQCAtMzk5OSw3 ICs0MjE4LDEyIEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0 ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJaWYgKHJlYWRGaWxlIDwgMCkKIAkJCQkJCXsKIAkJ CQkJCQlpZiAoIWV4cGVjdGVkVExFcykKKwkJCQkJCQl7CiAJCQkJCQkJCWV4cGVjdGVkVExFcyA9 IHJlYWRUaW1lTGluZUhpc3RvcnkocmVjb3ZlcnlUYXJnZXRUTEkpOworCQkJCQkJCQlQaXBlbGlu ZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRlVExJKHJlY292ZXJ5VGFyZ2V0VExJKTsKKwkJCQkJ CQl9CisKKwogCQkJCQkJCXJlYWRGaWxlID0gWExvZ0ZpbGVSZWFkKHJlYWRTZWdObywgcmVjZWl2 ZVRMSSwKIAkJCQkJCQkJCQkJCQlYTE9HX0ZST01fU1RSRUFNLCBmYWxzZSk7CiAJCQkJCQkJQXNz ZXJ0KHJlYWRGaWxlID49IDApOwpAQCAtNDAwOSw2ICs0MjMzLDEzIEBAIFdhaXRGb3JXQUxUb0Jl Y29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJ CS8qIGp1c3QgbWFrZSBzdXJlIHNvdXJjZSBpbmZvIGlzIGNvcnJlY3QuLi4gKi8KIAkJCQkJCQly ZWFkU291cmNlID0gWExPR19GUk9NX1NUUkVBTTsKIAkJCQkJCQlYTG9nUmVjZWlwdFNvdXJjZSA9 IFhMT0dfRlJPTV9TVFJFQU07CisJCQkJCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJ CQkJCXsKKwkJCQkJCQkJLyogYWxzbyB1cGRhdGUgdGhlIHNoYXJlZCBzdGF0ZSAqLworCQkJCQkJ CQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJCQlY TG9nUmVjb3ZlcnlDdGwtPlhMb2dSZWNlaXB0U291cmNlID0gWExvZ1JlY2VpcHRTb3VyY2U7CisJ CQkJCQkJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCQkJ CQkJfQogCQkJCQkJCXJldHVybiBYTFJFQURfU1VDQ0VTUzsKIAkJCQkJCX0KIAkJCQkJCWJyZWFr OwpAQCAtNDA0NiwxNSArNDI3Nyw0MCBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExv Z1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJICovCiAJCQkJCWlmICghc3Ry ZWFtaW5nX3JlcGx5X3NlbnQpCiAJCQkJCXsKLQkJCQkJCVdhbFJjdlJlcXVlc3RBcHBseVJlcGx5 KCk7Ci0JCQkJCQlzdHJlYW1pbmdfcmVwbHlfc2VudCA9IHRydWU7CisJCQkJCQlpZiAod2FsX3Bp cGVsaW5lX2VuYWJsZWQgJiYgQW1XYWxQaXBlbGluZSgpKQorCQkJCQkJeworCQkJCQkJCS8qCisJ CQkJCQkJICogSW4gY2FzZSBvZiBwaXBlbGluZSBlbmFibGVkLCB3ZSBjYW5ub3QganVzdCBjYWxs CisJCQkJCQkJICogV2FsUmN2UmVxdWVzdEFwcGx5UmVwbHkoKSBkaXJlY3RseSBhcyB0aGUKKwkJ CQkJCQkgKiBjb25zdW1lciAoc3RhcnR1cCBwcm9jKSBydW5uaW5nIGJlaGluZWQgdGhlCisJCQkJ CQkJICogcGlwZWxpbmUgcHJvZHVjZXIgYW5kIGhhdmVuJ3QgYWN0dWFsbHkgcmVwbGF5ZWQKKwkJ CQkJCQkgKiBhbGwgdGhlIHdhbCByZWNlaXZlZCBmcm9tIHRoZSB3YWxfcmVjZWl2ZXIgeWV0Lgor CQkJCQkJCSAqCisJCQkJCQkJICogU28gaW4gb3JkZXIgdG8gbWFrZSB3YWtldXAgY29uc2lzdGVu dCwgbm90ZSB0aGUKKwkJCQkJCQkgKiBsc24gYW5kIGNvbnN1bWVyIHdpbGwgb25seSB3YWtldXAg d2FscmN2ciB3aGVuCisJCQkJCQkJICogdGhlIGxzbiBpcyByZXBsYXllZC4KKwkJCQkJCQkgKi8K KwkJCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJ CQkJCVhMb2dSZWNvdmVyeUN0bC0+V2FrZXVwV2FsUmN2clJlY1B0ciA9IGZsdXNoZWRVcHRvOwor CQkJCQkJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCQkJ CQkJc3RyZWFtaW5nX3JlcGx5X3NlbnQgPSB0cnVlOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJ CQkJeworCQkJCQkJCVdhbFJjdlJlcXVlc3RBcHBseVJlcGx5KCk7CisJCQkJCQkJc3RyZWFtaW5n X3JlcGx5X3NlbnQgPSB0cnVlOworCQkJCQkJfQogCQkJCQl9CiAKIAkJCQkJLyogRG8gYW55IGJh Y2tncm91bmQgdGFza3MgdGhhdCBtaWdodCBiZW5lZml0IHVzIGxhdGVyLiAqLwotCQkJCQlLbm93 bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFpbnRlbmFuY2UoKTsKKwkJCQkJaWYgKEFtU3Rh cnR1cFByb2Nlc3MoKSkKKwkJCQkJCUtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkc0lkbGVNYWlu dGVuYW5jZSgpOwogCiAJCQkJCS8qIFVwZGF0ZSBwZ19zdGF0X3JlY292ZXJ5X3ByZWZldGNoIGJl Zm9yZSBzbGVlcGluZy4gKi8KLQkJCQkJWExvZ1ByZWZldGNoZXJDb21wdXRlU3RhdHMoeGxvZ3By ZWZldGNoZXIpOworCQkJCQlpZiAoQW1XYWxQaXBlbGluZSgpKQorCQkJCQkJWExvZ1ByZWZldGNo ZXJDb21wdXRlU3RhdHMoeGxvZ3ByZWZldGNoZXJfcGlwZWxpbmVkKTsKKwkJCQkJZWxzZQorCQkJ CQkJWExvZ1ByZWZldGNoZXJDb21wdXRlU3RhdHMoeGxvZ3ByZWZldGNoZXIpOwogCiAJCQkJCS8q CiAJCQkJCSAqIFdhaXQgZm9yIG1vcmUgV0FMIHRvIGFycml2ZSwgd2hlbiB3ZSB3aWxsIGJlIHdv a2VuCkBAIC00MDg1LDYgKzQzNDEsOCBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExv Z1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJICogcHJvY2Vzcy4KIAkJICovCiAJ CVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHMoKTsKKwkJaWYgKHdhbF9waXBlbGluZV9lbmFi bGVkKQorCQkJUHJvY2Vzc1BpcGVsaW5lQmd3SW50ZXJydXB0cygpOwogCX0KIAogCXJldHVybiBY TFJFQURfRkFJTDsJCQkvKiBub3QgcmVhY2hlZCAqLwpAQCAtNDI1MCw2ICs0NTA4LDE4IEBAIHJl c2NhbkxhdGVzdFRpbWVMaW5lKFRpbWVMaW5lSUQgcmVwbGF5VExJLCBYTG9nUmVjUHRyIHJlcGxh eUxTTikKIAlsaXN0X2ZyZWVfZGVlcChleHBlY3RlZFRMRXMpOwogCWV4cGVjdGVkVExFcyA9IG5l d0V4cGVjdGVkVExFczsKIAorCS8qIFVwZGF0ZSBzaGFyZWQgc3RhdGUgKi8KKwlpZiAod2FsX3Bp cGVsaW5lX2VuYWJsZWQpCisJeworCQlQaXBlbGluZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRl VExJKG5ld3RhcmdldCk7CisKKwkJLyogWFhYIE1heSBiZSB3ZSBjYW4gY29tYmluZSB0aGUgc3Bp biBsb2NrcyB3aXRoIGFib3V0IGNhbGwuICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292 ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlUYXJnZXRUTEkg PSByZWNvdmVyeVRhcmdldFRMSTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwt PmluZm9fbGNrKTsKKwl9CisKKwogCS8qCiAJICogQXMgaW4gU3RhcnR1cFhMT0coKSwgdHJ5IHRv IGVuc3VyZSB3ZSBoYXZlIGFsbCB0aGUgaGlzdG9yeSBmaWxlcwogCSAqIGJldHdlZW4gdGhlIG9s ZCB0YXJnZXQgYW5kIG5ldyB0YXJnZXQgaW4gcGdfd2FsLgpAQCAtNDMzOCw2ICs0NjA4LDE1IEBA IFhMb2dGaWxlUmVhZChYTG9nU2VnTm8gc2Vnbm8sIFRpbWVMaW5lSUQgdGxpLAogCQlpZiAoc291 cmNlICE9IFhMT0dfRlJPTV9TVFJFQU0pCiAJCQlYTG9nUmVjZWlwdFRpbWUgPSBHZXRDdXJyZW50 VGltZXN0YW1wKCk7CiAKKwkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQl7CisJCQkvKiBh bHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlICovCisJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dS ZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJWExvZ1JlY292ZXJ5Q3RsLT5YTG9nUmVjZWlwdFRp bWUgPSBYTG9nUmVjZWlwdFRpbWU7CisJCQlYTG9nUmVjb3ZlcnlDdGwtPlhMb2dSZWNlaXB0U291 cmNlID0gWExvZ1JlY2VpcHRTb3VyY2U7CisJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVy eUN0bC0+aW5mb19sY2spOworCQl9CisKIAkJcmV0dXJuIGZkOwogCX0KIAlpZiAoZXJybm8gIT0g RU5PRU5UIHx8ICFub3Rmb3VuZE9rKSAvKiB1bmV4cGVjdGVkIGZhaWx1cmU/ICovCkBAIC00NDIy LDcgKzQ3MDEsMTAgQEAgWExvZ0ZpbGVSZWFkQW55VExJKFhMb2dTZWdObyBzZWdubywgWExvZ1Nv dXJjZSBzb3VyY2UpCiAJCQl7CiAJCQkJZWxvZyhERUJVRzEsICJnb3QgV0FMIHNlZ21lbnQgZnJv bSBhcmNoaXZlIik7CiAJCQkJaWYgKCFleHBlY3RlZFRMRXMpCisJCQkJewogCQkJCQlleHBlY3Rl ZFRMRXMgPSB0bGVzOworCQkJCQlQaXBlbGluZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRlVExJ KHJlY292ZXJ5VGFyZ2V0VExJKTsKKwkJCQl9CiAJCQkJcmV0dXJuIGZkOwogCQkJfQogCQl9CkBA IC00NDMzLDcgKzQ3MTUsMTAgQEAgWExvZ0ZpbGVSZWFkQW55VExJKFhMb2dTZWdObyBzZWdubywg WExvZ1NvdXJjZSBzb3VyY2UpCiAJCQlpZiAoZmQgIT0gLTEpCiAJCQl7CiAJCQkJaWYgKCFleHBl Y3RlZFRMRXMpCisJCQkJewogCQkJCQlleHBlY3RlZFRMRXMgPSB0bGVzOworCQkJCQlQaXBlbGlu ZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRlVExJKHJlY292ZXJ5VGFyZ2V0VExJKTsKKwkJCQl9 CiAJCQkJcmV0dXJuIGZkOwogCQkJfQogCQl9CkBAIC00NDU1LDE2ICs0NzQwLDUyIEBAIFhMb2dG aWxlUmVhZEFueVRMSShYTG9nU2VnTm8gc2Vnbm8sIFhMb2dTb3VyY2Ugc291cmNlKQogdm9pZAog U3RhcnR1cFJlcXVlc3RXYWxSZWNlaXZlclJlc3RhcnQodm9pZCkKIHsKKworCS8qCisJICogY3Vy cmVudFNvdXJjZSBpcyBhbHNvIGRlZmluZWQgYXMgcGlwZWxpbmUgc2hhcmVkIHN0YXRlIHZhcmlh YmxlLgorCSAqIFVwZGF0ZSB0aGUgc3RhdGUgYmVmb3JlIHByb2NlZGRpbmcuCisJICovCisJaWYg KHdhbF9waXBlbGluZV9lbmFibGVkKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3Zl cnlDdGwtPmluZm9fbGNrKTsKKwkJY3VycmVudFNvdXJjZSA9IFhMb2dSZWNvdmVyeUN0bC0+Y3Vy cmVudFNvdXJjZTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNr KTsKKwl9CisKIAlpZiAoY3VycmVudFNvdXJjZSA9PSBYTE9HX0ZST01fU1RSRUFNICYmIFdhbFJj dlJ1bm5pbmcoKSkKIAl7CiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIldBTCByZWNlaXZl ciBwcm9jZXNzIHNodXRkb3duIHJlcXVlc3RlZCIpKSk7CiAKIAkJcGVuZGluZ1dhbFJjdlJlc3Rh cnQgPSB0cnVlOworCisJCS8qCisJCSAqIHBlbmRpbmdXYWxSY3ZSZXN0YXJ0IGlzIGFsc28gZGVm aW5lZCBhcyBwaXBlbGluZSBzaGFyZWQgc3RhdGUgdmFyaWFibGUuCisJCSAqIFVwZGF0ZSB0aGUg c3RhdGUgYmVmb3JlIHByb2NlZGRpbmcuCisJCSAqLworCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJs ZWQpCisJCXsKKwkJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 CisJCQlYTG9nUmVjb3ZlcnlDdGwtPnBlbmRpbmdXYWxSY3ZSZXN0YXJ0ID0gcGVuZGluZ1dhbFJj dlJlc3RhcnQ7CisJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2sp OworCQl9CiAJfQogfQogCiAKKy8qCisgKiBzdGFuZGJ5U3RhdGUgaXMgYWxzbyBkZWZpbmVkIGFz IGEgc2hhcmVkIHN0YXRlLiBQaXBlbGluZSB3b3JrZXIgY2FuIGFsc28KKyAqIHVwZGF0ZSBpdHMg dmFsdWUsIHNvIGFsd2F5cyBjb25maXJtIHRoZSBzaGFyZWQgc3RhdGUgYmVmb3JlIHByb2NlZGRp bmcuCisgKi8KK3ZvaWQKK1NldFNoYXJlZEhvdFN0YW5kYnlTdGF0ZSh2b2lkKQoreworCVNwaW5M b2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJWExvZ1JlY292ZXJ5Q3Rs LT5zdGFuZGJ5U3RhdGUgPSBzdGFuZGJ5U3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVj b3ZlcnlDdGwtPmluZm9fbGNrKTsKK30KKworCiAvKgogICogSGFzIGEgc3RhbmRieSBwcm9tb3Rp b24gYWxyZWFkeSBiZWVuIHRyaWdnZXJlZD8KICAqCkBAIC00NTE2LDExICs0ODM3LDE4IEBAIENo ZWNrRm9yU3RhbmRieVRyaWdnZXIodm9pZCkKIAlpZiAoTG9jYWxQcm9tb3RlSXNUcmlnZ2VyZWQp CiAJCXJldHVybiB0cnVlOwogCi0JaWYgKElzUHJvbW90ZVNpZ25hbGVkKCkgJiYgQ2hlY2tQcm9t b3RlU2lnbmFsKCkpCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgc3RhcnR1cCBwcm9jZXNzIHdhcyBz aWduYWxlZCBmb3IgcHJvbW90aW9uLiBJbiBjYXNlIHdlIGFyZQorCSAqIGNhbGxpbmcgdGhpcyBm dW5jdGlvbiBmcm9tIHRoZSBwaXBlbGluZSwgd2UgbmVlZCB0byBjaGVjayB0aGUgcHJvbW90aW9u CisJICogc2lnbmFscyBmb3IgdGhlIHBpcGVsaW5lIHdvcmtlciBpbnN0ZWFkLgorCSAqLworCWlm ICgoSXNQcm9tb3RlU2lnbmFsZWRQaXBlbGluZSgpIHx8IElzUHJvbW90ZVNpZ25hbGVkKCkpICYm CisJCUNoZWNrUHJvbW90ZVNpZ25hbCgpKQogCXsKIAkJZXJlcG9ydChMT0csIChlcnJtc2coInJl Y2VpdmVkIHByb21vdGUgcmVxdWVzdCIpKSk7CiAJCVJlbW92ZVByb21vdGVTaWduYWxGaWxlcygp OwogCQlSZXNldFByb21vdGVTaWduYWxlZCgpOworCQlSZXNldFByb21vdGVTaWduYWxlZFBpcGVs aW5lKCk7CiAJCVNldFByb21vdGVJc1RyaWdnZXJlZCgpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBA IC00NTU5LDYgKzQ4ODcsNyBAQCB2b2lkCiBXYWtldXBSZWNvdmVyeSh2b2lkKQogewogCVNldExh dGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOworCVNldExhdGNoKCZY TG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5QXBwbHlEZWxheUxhdGNoKTsKIH0KIAogLyoKQEAgLTQ3 MjgsNiArNTA1NywxNyBAQCBHZXRYTG9nUmVjZWlwdFRpbWUoVGltZXN0YW1wVHogKnJ0aW1lLCBi b29sICpmcm9tU3RyZWFtKQogCSAqLwogCUFzc2VydChJblJlY292ZXJ5KTsKIAorCS8qCisJICog SWYgcGlwZWxpbmUgZW5hYmxlZCwgZ2V0IHRoZSB1cGRhdGVkIHN0YXRlLgorCSAqLworCWlmICh3 YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5 Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNlaXB0VGltZSA9IFhMb2dSZWNvdmVyeUN0bC0+WExv Z1JlY2VpcHRUaW1lOworCQlYTG9nUmVjZWlwdFNvdXJjZSA9IFhMb2dSZWNvdmVyeUN0bC0+WExv Z1JlY2VpcHRTb3VyY2U7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZv X2xjayk7CisJfQorCiAJKnJ0aW1lID0gWExvZ1JlY2VpcHRUaW1lOwogCSpmcm9tU3RyZWFtID0g KFhMb2dSZWNlaXB0U291cmNlID09IFhMT0dfRlJPTV9TVFJFQU0pOwogfQpAQCAtNDgxMyw2ICs1 MTUzLDExNCBAQCBSZWNvdmVyeVJlcXVpcmVzSW50UGFyYW1ldGVyKGNvbnN0IGNoYXIgKnBhcmFt X25hbWUsIGludCBjdXJyVmFsdWUsIGludCBtaW5WYWx1ZQogCX0KIH0KIAorLyoKKyAqIENhbGxl ZCBieSB0aGUgc3RhcnR1cCBwcm9jZXNzIGJlZm9yZSBsYXVuY2hpbmcgdGhlIHBpcGVsaW5lIHdv cmtlci4KKyAqIEV4cG9ydHMgcmVjb3Zlcnkgc3RhdGUgdmFyaWFibGVzIGludG8gV2FsUGlwZWxp bmVQYXJhbXMgc28gdGhlCisgKiBwcm9kdWNlciBiYWNrZ3JvdW5kIHdvcmtlciBjYW4gaW5pdGlh bGl6ZSBpdHNlbGYgd2l0aCB0aGUgc2FtZQorICogZW52aXJvbm1lbnQuCisgKi8KK3N0YXRpYyB2 b2lkCitXYWxQaXBlbGluZV9FeHBvcnRSZWNvdmVyeVN0YXRlKFdhbFBpcGVsaW5lUGFyYW1zICpw YXJhbXMpCit7CisJLyoKKwkgKiBJbiBvcmRlciB0byBzdGFydCBkZWNvZGluZyB0aHJvdWdoIHRo ZSBwaXBlbGluZSwKKwkgKiB0aGVzZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCB0aGVu IHJlc3RvcmVkIGxhdGVyLgorCSAqLworCXBhcmFtcy0+TmV4dFJlY1B0ciA9IHhsb2dyZWFkZXIt Pk5leHRSZWNQdHI7CisJcGFyYW1zLT5yZWNvdmVyeVRhcmdldFRMSSA9IHJlY292ZXJ5VGFyZ2V0 VExJOworCXBhcmFtcy0+U3RhbmRieU1vZGVSZXF1ZXN0ZWQgPSBTdGFuZGJ5TW9kZVJlcXVlc3Rl ZDsKKwlwYXJhbXMtPlN0YW5kYnlNb2RlID0gU3RhbmRieU1vZGU7CisJcGFyYW1zLT5BcmNoaXZl UmVjb3ZlcnlSZXF1ZXN0ZWQgPSBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQ7CisJcGFyYW1zLT5J bkFyY2hpdmVSZWNvdmVyeSA9IEluQXJjaGl2ZVJlY292ZXJ5OworCXBhcmFtcy0+bWluUmVjb3Zl cnlQb2ludFRMSSA9IG1pblJlY292ZXJ5UG9pbnRUTEk7CisJcGFyYW1zLT5taW5SZWNvdmVyeVBv aW50ID0gbWluUmVjb3ZlcnlQb2ludDsKKwlwYXJhbXMtPkluUmVkbyA9IEluUmVkbzsKKwlwYXJh bXMtPmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOworCXBhcmFtcy0+bGFzdFNvdXJjZUZh aWxlZCA9IGxhc3RTb3VyY2VGYWlsZWQ7CisJcGFyYW1zLT5wZW5kaW5nV2FsUmN2UmVzdGFydCA9 IHBlbmRpbmdXYWxSY3ZSZXN0YXJ0OworCXBhcmFtcy0+UmVkb1N0YXJ0VExJID0gUmVkb1N0YXJ0 VExJOworCXBhcmFtcy0+Q2hlY2tQb2ludExvYyA9IENoZWNrUG9pbnRMb2M7CisJcGFyYW1zLT5D aGVja1BvaW50VExJID0gQ2hlY2tQb2ludFRMSTsKKwlwYXJhbXMtPlJlZG9TdGFydExTTiA9IFJl ZG9TdGFydExTTjsKKwlwYXJhbXMtPnN0YW5kYnlTdGF0ZSA9IHN0YW5kYnlTdGF0ZTsKKwlwYXJh bXMtPmZsdXNoZWRVcHRvID0gZmx1c2hlZFVwdG87CisJcGFyYW1zLT5yZWNlaXZlVExJID0gcmVj ZWl2ZVRMSTsKKwlwYXJhbXMtPmFib3J0ZWRSZWNQdHIgPSBhYm9ydGVkUmVjUHRyOworCXBhcmFt cy0+bWlzc2luZ0NvbnRyZWNQdHIgPSBtaXNzaW5nQ29udHJlY1B0cjsKKwlwYXJhbXMtPmJhY2t1 cEVuZFJlcXVpcmVkID0gYmFja3VwRW5kUmVxdWlyZWQ7CisJcGFyYW1zLT5iYWNrdXBTdGFydFBv aW50ID0gYmFja3VwU3RhcnRQb2ludDsKKwlwYXJhbXMtPmJhY2t1cEVuZFBvaW50ID0gYmFja3Vw RW5kUG9pbnQ7CisJcGFyYW1zLT5jdXJGaWxlVExJID0gY3VyRmlsZVRMSTsKKworCS8qCisJICog U2F2aW5nIHByb21vdGlvbiBzaWduYWwgbm93LCBvdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSBo YW5sZGUgdGhpcworCSAqIHNpZ25hbCBiZWN1YXNlIHByb2RjdWVyIHByb2Nlc3Mgbm90IHN0YXJ0 ZWQgeWV0IGFuZCBzdGFydHVwIHByb2Mgd29uJ3QKKwkgKiBiZSByZXNwb25zaWJsZSBmb3IgZGVj b2RpbmcuCisJICovCisJcGFyYW1zLT5wcm9tb3RlZEJlZm9yZUxhdW5jaCA9IElzUHJvbW90ZVNp Z25hbGVkKCkgJiYgQ2hlY2tQcm9tb3RlU2lnbmFsKCk7CisKKwkvKgorCSAqIFRoZSBwaXBlbGlu ZSB3aWxsIGRvIHRoZSB3YWl0aW5nIGluIHRoaXMgY2FzZSBzdGFydHVwIHByb2Mgc2hvdWxkIGRp c293bgorCSAqIHRoZSBsYXRjaC4KKwkgKi8KKwlEaXNvd25SZWNvdmVyeVdha2V1cExhdGNoKCk7 CisKKwkvKgorCSAqIFVwZGF0ZSBzaGFyZWQgc3RhdGUgYmVmb3JlIHN0YXJ0aW5nLgorCSAqLwor CVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJWExvZ1JlY292 ZXJ5Q3RsLT5JbkFyY2hpdmVSZWNvdmVyeSA9IEluQXJjaGl2ZVJlY292ZXJ5OworCVhMb2dSZWNv dmVyeUN0bC0+cGVuZGluZ1dhbFJjdlJlc3RhcnQgPSBwZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlY TG9nUmVjb3ZlcnlDdGwtPmFib3J0ZWRSZWNQdHIgPSBhYm9ydGVkUmVjUHRyOworCVhMb2dSZWNv dmVyeUN0bC0+bWlzc2luZ0NvbnRyZWNQdHIgPSBtaXNzaW5nQ29udHJlY1B0cjsKKwlYTG9nUmVj b3ZlcnlDdGwtPmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOworCVhMb2dSZWNvdmVyeUN0 bC0+c3RhbmRieVN0YXRlID0gc3RhbmRieVN0YXRlOworCVhMb2dSZWNvdmVyeUN0bC0+WExvZ1Jl Y2VpcHRTb3VyY2UgPSBYTG9nUmVjZWlwdFNvdXJjZTsKKwlYTG9nUmVjb3ZlcnlDdGwtPlhMb2dS ZWNlaXB0VGltZSA9IFhMb2dSZWNlaXB0VGltZTsKKwlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNv dmVyeUN0bC0+aW5mb19sY2spOworfQorCisvKgorICogQ2FsbGVkIGJ5IHRoZSBwcm9kdWNlciBi YWNrZ3JvdW5kIHdvcmtlciBvbiBzdGFydHVwLgorICogSW1wb3J0cyByZWNvdmVyeSBzdGF0ZSBm cm9tIFdhbFBpcGVsaW5lUGFyYW1zIGludG8gdGhlIHdvcmtlcidzCisgKiBvd24gbG9jYWwgdmFy aWFibGVzLCBtaXJyb3JpbmcgdGhlIGVudmlyb25tZW50IHRoZSBzdGFydHVwIHByb2Nlc3MKKyAq IGhhZCB3aGVuIGl0IGxhdW5jaGVkIHRoZSBwaXBlbGluZS4KKyAqLwordm9pZAorV2FsUGlwZWxp bmVfSW1wb3J0UmVjb3ZlcnlTdGF0ZShXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1zKQoreworCVN0 YW5kYnlNb2RlID0gcGFyYW1zLT5TdGFuZGJ5TW9kZTsKKwlTdGFuZGJ5TW9kZVJlcXVlc3RlZCA9 IHBhcmFtcy0+U3RhbmRieU1vZGVSZXF1ZXN0ZWQ7CisJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk ID0gcGFyYW1zLT5BcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQ7CisJSW5BcmNoaXZlUmVjb3Zlcnkg PSBwYXJhbXMtPkluQXJjaGl2ZVJlY292ZXJ5OworCXJlY292ZXJ5VGFyZ2V0VExJID0gcGFyYW1z LT5yZWNvdmVyeVRhcmdldFRMSTsKKwltaW5SZWNvdmVyeVBvaW50VExJID0gcGFyYW1zLT5taW5S ZWNvdmVyeVBvaW50VExJOworCW1pblJlY292ZXJ5UG9pbnQgPSBwYXJhbXMtPm1pblJlY292ZXJ5 UG9pbnQ7CisJY3VycmVudFNvdXJjZSA9IHBhcmFtcy0+Y3VycmVudFNvdXJjZTsKKwlsYXN0U291 cmNlRmFpbGVkID0gcGFyYW1zLT5sYXN0U291cmNlRmFpbGVkOworCXBlbmRpbmdXYWxSY3ZSZXN0 YXJ0ID0gcGFyYW1zLT5wZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlSZWRvU3RhcnRUTEkgPSBwYXJh bXMtPlJlZG9TdGFydFRMSTsKKwlSZWRvU3RhcnRMU04gPSBwYXJhbXMtPlJlZG9TdGFydExTTjsK KwlzdGFuZGJ5U3RhdGUgPSBwYXJhbXMtPnN0YW5kYnlTdGF0ZTsKKwlDaGVja1BvaW50TG9jID0g cGFyYW1zLT5DaGVja1BvaW50TG9jOworCUNoZWNrUG9pbnRUTEkgPSBwYXJhbXMtPkNoZWNrUG9p bnRUTEk7CisJZmx1c2hlZFVwdG8gPSBwYXJhbXMtPmZsdXNoZWRVcHRvOworCXJlY2VpdmVUTEkg PSBwYXJhbXMtPnJlY2VpdmVUTEk7CisJYWJvcnRlZFJlY1B0ciA9IHBhcmFtcy0+YWJvcnRlZFJl Y1B0cjsKKwltaXNzaW5nQ29udHJlY1B0ciA9IHBhcmFtcy0+bWlzc2luZ0NvbnRyZWNQdHI7CisJ SW5SZWRvID0gcGFyYW1zLT5JblJlZG87CisJYmFja3VwRW5kUmVxdWlyZWQgPSBwYXJhbXMtPmJh Y2t1cEVuZFJlcXVpcmVkOworCWJhY2t1cFN0YXJ0UG9pbnQgPSBwYXJhbXMtPmJhY2t1cFN0YXJ0 UG9pbnQ7CisJYmFja3VwRW5kUG9pbnQgPSBwYXJhbXMtPmJhY2t1cEVuZFBvaW50OworCWN1ckZp bGVUTEkgPSBwYXJhbXMtPmN1ckZpbGVUTEk7CisJSW5SZWNvdmVyeSA9IHRydWU7CisKKwkvKgor CSAqIEFzIHBpcGVsaW5lIHdpbGwgYmUgcmVhZGluZyB0aGUgd2FsLCBzbyBiZXR0ZXIgdG8gb3du IHRoZSBsYXRjaCB0byB3YWl0IGF0LgorCSAqLworCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0 ZWQpCisJCU93bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOwor fQogCiAvKgogICogR1VDIGNoZWNrX2hvb2sgZm9yIHByaW1hcnlfc2xvdF9uYW1lCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zdGFuZGJ5LmMKaW5kZXggN2YwMTFlMDQ5OTAuLjQzMGYyM2Q1NzE3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc3RhbmRieS5jCkBAIC0xMTk3LDYgKzExOTcsNyBAQCBzdGFuZGJ5X3JlZG8o WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXJ1bm5pbmcueGlkcyA9IHhscmVjLT54aWRzOwog CiAJCVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZydW5uaW5nKTsKKwkJU2V0U2hhcmVkSG90 U3RhbmRieVN0YXRlKCk7CiAKIAkJLyoKIAkJICogVGhlIHN0YXJ0dXAgcHJvY2VzcyBjdXJyZW50 bHkgaGFzIG5vIGNvbnZlbmllbnQgd2F5IHRvIHNjaGVkdWxlCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVs aW5lLmgKaW5kZXggYTg5OTVkNWMxYTcuLmM0N2NjNzIxMjFjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dw aXBlbGluZS5oCkBAIC01NCw2ICs1NCw1MiBAQCB0eXBlZGVmIHN0cnVjdCBXYWxSZWNvcmRNc2dI ZWFkZXIKIAlYTG9nUmVjUHRyICBvdmVyd3JpdHRlblJlY1B0cjsgICAgLyogWExvZ1JlYWRlclN0 YXRlLT5vdmVyd3JpdHRlblJlY1B0ciAqLwogfSBXYWxSZWNvcmRNc2dIZWFkZXI7CiAKKy8qCisg KiBQYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIFN0YXJ0dXBYTE9HIChjb25zdW1lciBzaWRlKQorICog dG8gdGhlIFdBTCBwaXBlbGluZSBwcm9kdWNlciBiYWNrZ3JvdW5kIHdvcmtlci4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgV2FsUGlwZWxpbmVQYXJhbXMKK3sKKwlib29sCQlTdGFuZGJ5TW9kZTsKKwli b29sCQlTdGFuZGJ5TW9kZVJlcXVlc3RlZDsKKwlib29sCQlBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0 ZWQ7CisJYm9vbAkJSW5BcmNoaXZlUmVjb3Zlcnk7CisJYm9vbAkJSW5SZWRvOworCWJvb2wgCQls YXN0U291cmNlRmFpbGVkOworCWJvb2wgCQlwZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlib29sIAkJ YmFja3VwRW5kUmVxdWlyZWQ7CisJYm9vbCAJCXByb21vdGVkQmVmb3JlTGF1bmNoOworCisJVGlt ZUxpbmVJRCAgUmVkb1N0YXJ0VExJOworCVRpbWVMaW5lSUQgIENoZWNrUG9pbnRUTEk7CisJVGlt ZUxpbmVJRCAgcmVjb3ZlcnlUYXJnZXRUTEk7CisJVGltZUxpbmVJRAltaW5SZWNvdmVyeVBvaW50 VExJOworCVRpbWVMaW5lSUQgIFJlcGxheVRMSTsKKwlUaW1lTGluZUlECXJlY2VpdmVUTEk7CisK KwlYTG9nUmVjUHRyIAliYWNrdXBTdGFydFBvaW50OworCVhMb2dSZWNQdHIgCWJhY2t1cEVuZFBv aW50OworCVhMb2dSZWNQdHIgIENoZWNrUG9pbnRMb2M7CisJWExvZ1JlY1B0ciAgUmVkb1N0YXJ0 TFNOOworCVhMb2dSZWNQdHIgIE5leHRSZWNQdHI7CisJWExvZ1JlY1B0cgltaW5SZWNvdmVyeVBv aW50OworCVhMb2dSZWNQdHIgCWZsdXNoZWRVcHRvOworCVhMb2dSZWNQdHIgCWFib3J0ZWRSZWNQ dHI7CisJWExvZ1JlY1B0ciAJbWlzc2luZ0NvbnRyZWNQdHI7CisKKwlpbnQJcmVhZEZpbGU7CisJ WExvZ1NlZ05vIHJlYWRTZWdObzsKKwl1aW50MzIgcmVhZE9mZjsKKwl1aW50MzIgcmVhZExlbjsK KwlYTG9nU291cmNlIHJlYWRTb3VyY2U7CisJVGltZUxpbmVJRCBjdXJGaWxlVExJOworCisKKwlI b3RTdGFuZGJ5U3RhdGUgc3RhbmRieVN0YXRlOworCVhMb2dTb3VyY2UgCWN1cnJlbnRTb3VyY2U7 CisKK30gV2FsUGlwZWxpbmVQYXJhbXM7CisKIC8qCiAgKiBTaGFyZWQgbWVtb3J5IGNvbnRyb2wg c3RydWN0dXJlIGZvciB0aGUgV0FMIHBpcGVsaW5lCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3Zl cnkuaAppbmRleCA4MWFjOTg0YTkwNC4uNDUzNTdhMjVjYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Jl Y292ZXJ5LmgKQEAgLTExLDcgKzExLDkgQEAKICNpZm5kZWYgWExPR1JFQ09WRVJZX0gKICNkZWZp bmUgWExPR1JFQ09WRVJZX0gKIAorI2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGls cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImxpYi9zdHJp bmdpbmZvLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKQEAgLTYw LDYgKzYyLDE3IEBAIHR5cGVkZWYgZW51bSBSZWNvdmVyeVBhdXNlU3RhdGUKIAlSRUNPVkVSWV9Q QVVTRUQsCQkJLyogcmVjb3ZlcnkgaXMgcGF1c2VkICovCiB9IFJlY292ZXJ5UGF1c2VTdGF0ZTsK IAorLyogQ29kZXMgaW5kaWNhdGluZyB3aGVyZSB3ZSBnb3QgYSBXQUwgZmlsZSBmcm9tIGR1cmlu ZyByZWNvdmVyeSwgb3Igd2hlcmUKKyAqIHRvIGF0dGVtcHQgdG8gZ2V0IG9uZS4KKyAqLwordHlw ZWRlZiBlbnVtCit7CisJWExPR19GUk9NX0FOWSA9IDAsCQkJLyogcmVxdWVzdCB0byByZWFkIFdB TCBmcm9tIGFueSBzb3VyY2UgKi8KKwlYTE9HX0ZST01fQVJDSElWRSwJCQkvKiByZXN0b3JlZCB1 c2luZyByZXN0b3JlX2NvbW1hbmQgKi8KKwlYTE9HX0ZST01fUEdfV0FMLAkJCS8qIGV4aXN0aW5n IGZpbGUgaW4gcGdfd2FsICovCisJWExPR19GUk9NX1NUUkVBTSwJCQkvKiBzdHJlYW1lZCBmcm9t IHByaW1hcnkgKi8KK30gWExvZ1NvdXJjZTsKKwogLyoKICAqIFNoYXJlZC1tZW1vcnkgc3RhdGUg Zm9yIFdBTCByZWNvdmVyeS4KICAqLwpAQCAtOTQsNiArMTA3LDE0IEBAIHR5cGVkZWYgc3RydWN0 IFhMb2dSZWNvdmVyeUN0bERhdGEKIAkgKi8KIAlMYXRjaAkJcmVjb3ZlcnlXYWtldXBMYXRjaDsK IAorCS8qCisJICogSW4gY2FzZSBwaXBlbGluZSBlbmFibGVkIHdlIHdpbGwgbmVlZCB0d28gbGF0 Y2hlcy4gT25lIHRoYXQgY2FuIGJlIHVzZWQKKwkgKiBieSB0aGUgcGlwZWxpbmUgZm9yIFdBTCB3 YWl0aW5nIGFuZCBvdGhlciB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZQorCSAqIHN0YXJ0dXAgcHJv Y2VzcyBmb3IgdGhlIGFwcGx5IGRlbGF5LiBCZWZvcmUgdGhpcyB3ZSBoYWQgb25seSBvbmUgbGF0 Y2gKKwkgKiBmb3IgYm90aCBjYXNlcy4KKwkgKi8KKwlMYXRjaAkJcmVjb3ZlcnlBcHBseURlbGF5 TGF0Y2g7CisKIAkvKgogCSAqIExhc3QgcmVjb3JkIHN1Y2Nlc3NmdWxseSByZXBsYXllZC4KIAkg Ki8KQEAgLTEyMSw2ICsxNDIsNjUgQEAgdHlwZWRlZiBzdHJ1Y3QgWExvZ1JlY292ZXJ5Q3RsRGF0 YQogCUNvbmRpdGlvblZhcmlhYmxlIHJlY292ZXJ5Tm90UGF1c2VkQ1Y7CiAKIAlzbG9ja190CQlp bmZvX2xjazsJCS8qIGxvY2tzIHNoYXJlZCB2YXJpYWJsZXMgc2hvd24gYWJvdmUgKi8KKworCS8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCSAqIFZhcmlhYmxlcyB1c2UgZm9yIElQQyBiZXR3ZWVuIHBpcGVsaW5lIGFu ZCB0aGUgc3RhcnR1cCBwcm9jLgorCSAqIFRoZXNlIGFyZSBhbHNvIHRoZSBzdGF0aWMgdmFyaWFi bGVzIGluIHhsb2dyZWNvdmVyeS5jIGJ1dCB0aGVyZSBzdGF0ZQorCSAqIGtlZXAgb24gY2hhbmdp bmcuIFNvIHdlIGFkZGVkIHRoZW0gYXMgdGhlIHNoYXJlZCBzdGF0ZXMgc28gdGhhdCBib3RoCisJ ICogdGhlIHBpcGVsaW5lIGFuZCB0aGUgc3RhcnR1cCBwcm9jIHN0YXkgc3luY2VkIGlmIGFueSBv ZiB0aGVzZSBzdGF0ZQorCSAqIGNoYW5nZXMuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwkvKgor CSAqIFBpcGVsaW5lIGNvdWxkIGJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydHVwIHByb2Nlc3MgdG8g Y2F0Y2h1cCB3aXRoIHRoZQorCSAqIGRlY29kZXIuIFRoaXMgY291bGQgaGFwcGVuZCB3aGVuIG5v IHdhaXQgd2FsIGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorCSAqIGN1cnJlbnQgcmVzb3VyY2UgYW5k IG5vdyBwaXBsaW5lIGhhdmUgY2hhbmdlIHRoZSB3YWwgc3JvdWNlCisJICogaS5lIGVuYWJsaW5n IHN0YW5kYnkgaWYgcmVxdWVzdGVkLgorCSAqLworCWJvb2wJCXBpcGVsaW5lX3dhaXRpbmc7CisJ Ym9vbAkJSW5BcmNoaXZlUmVjb3Zlcnk7CisJYm9vbAkJcGVuZGluZ1dhbFJjdlJlc3RhcnQ7CisJ Ym9vbAkJc3RhbmJ5RW5hYmxlZDsKKworCS8qCisJICogVGhlIHRhcmdldCBUTEkgZm9yIHdoaWNo IGV4cGVjdGVkVExFcyBzaG91bGQgYmUgcmVjb21wdXRlZCBieSB0aGUKKwkgKiBjb25zdW1lcgor CSAqLworCVRpbWVMaW5lSUQJZXhwZWN0ZWRUTEVzVXBkYXRlVExJOworCisJLyoKKwkgKiBXZSBh bHNvIGV4cG9ydCB0aGUgcmVjb3ZlcnlUYXJnZXRUTEkgYXMgYSBXYWxQaXBlbGluZVBhcmFtcy4g QnV0IG90aGVyCisJICogdGhhbiBwYXNzaW5nIHRoZSBpbml0aWFsIHN0YXRlLCB0aGUgcmVjb3Zl cnlUYXJnZXRUTEkgY2FuIGFsc28gY2hhbmdlCisJICogaXQgc3RhdGUgZHVyaW5nIHRoZSBkZWNv ZGluZyBieSB0aGUgcHJvZGN1ZXIgKHNlZSByZXNjYW5MYXRlc3RUaW1lTGluZSgpKS4KKwkgKgor CSAqIFRoaXMgbWVhbiBhdCB0aGUgZW5kIG9mIHRoZSByZWNvdmVyeSwgIHRoZSBzdGFydHVwIHBy b2Nlc3Mgc2hvdWxkIGF3YXJlCisJICogb2YgYW55IHN1Y2ggc3RhdGUgY2hhbmdlcyBkb25lIGJ5 IHRoZSBwcm9kdWNlci4gVG8gaGFuZGxlIHRoaXMKKwkgKiBSZXNldFN0YXRlc0lmUGlwZWxpbmVk KCkgd2lsbCB1cGRhdGUgdGhlIHN0YXJ0dXAgbG9jYWwgcmVjb3ZlcnlUYXJnZXRUTEkKKwkgKiB3 aXRoIHVwZGF0ZWQgb25lLCBvbiBGaW5pc2hXYWxSZWNvdmVyeSgpLgorCSovCisJVGltZUxpbmVJ RAlyZWNvdmVyeVRhcmdldFRMSTsKKworCS8qCisJICogTm9ybWFseSB3ZSB3YWtldXAgd2FscmN2 ciBhZnRlciBzcGVjaWZpYyByZWNvcmRzIGhhdmUgYmVlbiBhcHBsaWVkLCBhcworCSAqIGRlY29k aW5nIGFuZCBhcGxseWluZyBhcmUgc2VxdWVudGlhbCBzbyB3ZSB3YWtldXAgYWZ0ZXIgZW5vdWdo IHJlY29yZHMKKwkgKiBkZWNvZGVkIHJlYWQuCisJICoKKwkgKiBCdXQgaW4gY2FzZSBvZiBwaXBl bGluZSByZWFkcyAoZGVjb2RlZCByZWNvcmRzKSBjb3VsZCBiZSBhaGVhZCBvZiB0aGUKKwkgKiBj b25zdW1lciBhcHBseSBsb29wLiBXZSBjYW5ub3Qgd2FrZXVwIHdhbCByY3ZyIGJhc2VkIG9uIGhv dyBtdWNoIHJlY29yZHMKKwkgKiBkZWNvZGVkLCBzbyB3ZSB0ZWxsIGNvbnN1bWVyIHRvIHdha2V1 cCBhZnRlciBvbmx5IGFmdGVyIGEgc3BlY2lmaWMgbHNuCisJICogKFdha2V1cFdhbFJjdnJSZWNQ dHIgc2V0IGJ5IHRoZSBwaXBlbGluZSkgaGFzIGJlZWQgcmVwbGF5ZWQuCisJICovCisJWExvZ1Jl Y1B0cglXYWtldXBXYWxSY3ZyUmVjUHRyOworCisJWExvZ1JlY1B0cglhYm9ydGVkUmVjUHRyOwor CVhMb2dSZWNQdHIJbWlzc2luZ0NvbnRyZWNQdHI7CisKKwlYTG9nU291cmNlCWN1cnJlbnRTb3Vy Y2U7CisJWExvZ1NvdXJjZQlYTG9nUmVjZWlwdFNvdXJjZTsKKworCUhvdFN0YW5kYnlTdGF0ZSBz dGFuZGJ5U3RhdGU7CisJVGltZXN0YW1wVHoJCVhMb2dSZWNlaXB0VGltZTsKIH0gWExvZ1JlY292 ZXJ5Q3RsRGF0YTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dSZWNvdmVyeUN0bERhdGEgKlhM b2dSZWNvdmVyeUN0bDsKQEAgLTIwNSw2ICsyODUsOCBAQCB0eXBlZGVmIHN0cnVjdAogCWJvb2wJ CXJlY292ZXJ5X3NpZ25hbF9maWxlX2ZvdW5kOwogfSBFbmRPZldhbFJlY292ZXJ5SW5mbzsKIAor c3RydWN0IFdhbFBpcGVsaW5lUGFyYW1zOyAgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KKwog ZXh0ZXJuIEVuZE9mV2FsUmVjb3ZlcnlJbmZvICpGaW5pc2hXYWxSZWNvdmVyeSh2b2lkKTsKIGV4 dGVybiB2b2lkIFNodXRkb3duV2FsUmVjb3Zlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBSZW1vdmVQ cm9tb3RlU2lnbmFsRmlsZXModm9pZCk7CkBAIC0yMjUsMTEgKzMwNywxNCBAQCBleHRlcm4gaW50 IFhMb2dQYWdlUmVhZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNQdHIgdGFy Z2V0UGFnZVB0ciwgaQogZXh0ZXJuIGJvb2wgUHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpOwogZXh0 ZXJuIGJvb2wgQ2hlY2tQcm9tb3RlU2lnbmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FrZXVwUmVj b3Zlcnkodm9pZCk7CitleHRlcm4gdm9pZCBEaXNvd25SZWNvdmVyeVdha2V1cExhdGNoKHZvaWQp OworZXh0ZXJuIHZvaWQgU2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKHZvaWQpOwogCiBleHRlcm4g dm9pZCBTdGFydHVwUmVxdWVzdFdhbFJlY2VpdmVyUmVzdGFydCh2b2lkKTsKIGV4dGVybiB2b2lk IFhMb2dSZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgUmVjb3Zl cnlSZXF1aXJlc0ludFBhcmFtZXRlcihjb25zdCBjaGFyICpwYXJhbV9uYW1lLCBpbnQgY3VyclZh bHVlLCBpbnQgbWluVmFsdWUpOworZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVfSW1wb3J0UmVjb3Zl cnlTdGF0ZShzdHJ1Y3QgV2FsUGlwZWxpbmVQYXJhbXMgKnBhcmFtcyk7CiAKIGV4dGVybiB2b2lk IHhsb2dfb3V0ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwog Ci0tIAoyLjM0LjEKCg== --000000000000ce41dd06563dfc9a Content-Type: text/x-patch; charset="UTF-8"; name="v5-0002-Pipelined-Recovery-Consumer-Related-Code.patch" Content-Disposition: attachment; filename="v5-0002-Pipelined-Recovery-Consumer-Related-Code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrenz3az1 RnJvbSBkODBiYjFiNGZjYmRmOWI2NTFkOWY2YTBhZWQ4MWZiOWY5MjY2MGZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBGcmksIDEwIEp1bCAyMDI2IDA2OjUzOjQxICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NSAy LzVdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIENvbnN1bWVyIFJlbGF0ZWQgQ29kZQoKVGhpcyBpbmNs dWRlcyB0aGUgY29uc3VtZXItc3BlY2lmaWMgY29kZSBmb3IgdGhlIHByb2R1Y2VyLWNvbnN1bWVy CmFyY2hpdGVjdHVyZSBmb3IgV0FMIHJlcGxheSB0aGF0IHNlcGFyYXRlcyBXQUwgZGVjb2Rpbmcg ZnJvbSB0aGUKcmVjb3ZlcnkgcHJvY2VzcywgZW5hYmxpbmcgcGFyYWxsZWwgcHJvY2Vzc2luZyBi ZXR3ZWVuIGRpZmZlcmVudCBzdGVwcwogb2YgcmVwbGF5LgoKVGhlIHN0YXJ0dXAgcHJvY2VzcyBh Y3QgYXMgY29uc3VtZXIgYW5kIHdpbGwgaW5pdGlhdGUgdGhlIHBpcGVsaW5lIGJlZm9yZQpzdGFy dGluZyB0aGUgcmVkbyBsb29wIGluc2lkZSBQZXJmb3JtV2FsUmVjb3ZlcnkoKSBhbmQgd2lsbCBj b25uZWN0IHRvCnRoZSBzaG0gbXEgdG8gcmVjZWl2ZSB0aGUgZGVjb2RlZCByZWNvcmRzIGRpcmVj dGx5LiBTdWJzZXF1ZW50bHksCml0IHdpbGwgYXBwbHkgdGhvc2UgcmVjb3JkcyBhbmQga2VlcCBv biBmZXRjaGluZyBuZXcgZGVjb2RlZCByZWNvcmRzIGluCnRoZSBtYWluIHJlZG8gbG9vcC4KCkZp bmFsbHksIGl0IHdpbGwgcmVjZWl2ZSBhIHNodXRkb3duIG1lc3NhZ2UgZnJvbSB0aGUgcHJvZHVj ZXIKKGJhc2VkIG9uIHRoZSBjb25zaXN0ZW5jeSBjaGVja3MsIHRoZSBwcm9kdWNlciB3aWxsIHRh a2UgY2FyZSBvZiB3aGV0aGVyCnRvIHN0b3AgZGVjb2Rpbmcgb3Igbm90KS4gVGhlIGNvbnN1bWVy IHdpbGwgZXhpdCB0aGUgbG9vcCBhbmQgbGF0ZXIgd2lsbAphc2sgdG8gZnVsbHkgc2h1dGRvd24g dGhlIHBpcGVsaW5lIHdvcmtlcnMgaW4gRmluaXNoV2FsUmVjb3ZlcnkoKS4KCkF1dGhvcjogSW1y YW4gWmFoZWVyIDxpbXJhbi56aGlyQGdtYWlsLmNvbT4KSWRlYSBieTogQW50cyBBYXNtYSA8YW50 c0BjeWJlcnRlYy5hdD4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxp bmUuYyB8IDQ2MCArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYyB8ICA3NCArKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Bp cGVsaW5lLmggICAgICAgICB8ICAxOCArCiAzIGZpbGVzIGNoYW5nZWQsIDU1MCBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dwaXBlbGluZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVs aW5lLmMKaW5kZXggNDI0ZDMzMDk0YmYuLmJiZDVlZTU5N2Q3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYwpAQCAtODIsNiArODIsMTEgQEAgc3RhdGljIGRzbV9z ZWdtZW50ICpwcm9kdWNlcl9kc21fc2VnID0gTlVMTDsKIHN0YXRpYyBzaG1fbXEgKnByb2R1Y2Vy X21xID0gTlVMTDsKIHN0YXRpYyBzaG1fbXFfaGFuZGxlICpwcm9kdWNlcl9tcV9oYW5kbGUgPSBO VUxMOwogCisvKiBMb2NhbCBzdGF0ZSBmb3IgY29uc3VtZXIgKi8KK3N0YXRpYyBkc21fc2VnbWVu dCAqY29uc3VtZXJfZHNtX3NlZyA9IE5VTEw7CitzdGF0aWMgc2htX21xICpjb25zdW1lcl9tcSA9 IE5VTEw7CitzdGF0aWMgc2htX21xX2hhbmRsZSAqY29uc3VtZXJfbXFfaGFuZGxlID0gTlVMTDsK KwogLyogCiAgKiBMb2NhbCBidWZmZXIgY29udGFpbmluZyBtc2cgaGVhZGVyIHRoYXQgd2lsbCBi ZSBzZW50IHRvZ2V0aGVyIHdpdGggdGhlIAogICogZGVjb2RlZCBkYXRhLCB0byB0aGUgbXNnIHF1 ZXVlCkBAIC05OCw5ICsxMDMsMTMgQEAgc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwcm9t b3RlX3NpZ25hbGVkID0gZmFsc2U7CiBzdGF0aWMgdm9pZCBQaXBlbGluZUJnd1NpZ0h1cEhhbmRs ZXIoU0lHTkFMX0FSR1MpOwogc3RhdGljIHZvaWQgUGlwZWxpbmVQcm9jVHJpZ2dlckhhbmRsZXIo U0lHTkFMX0FSR1MpOwogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwogc3RhdGljIHZvaWQg d2FsX3BpcGVsaW5lX2NsZWFudXBfY2FsbGJhY2soaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0 aWMgU2l6ZSBzZXJpYWxpemVfd2FsX3JlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIs IHNobV9tcV9pb3ZlYyAqaW92KTsKK3N0YXRpYyBEZWNvZGVkWExvZ1JlY29yZCAqZGVzZXJpYWxp emVfd2FsX3JlY29yZChjb25zdCBjaGFyICpidWZmZXIsIFNpemUgbGVuLCBYTG9nUmVhZGVyU3Rh dGUgKnN0YXJ0dXBfcmVhZGVyKTsKIHN0YXRpYyB2b2lkIGNsZWFudXBfcHJvZHVjZXJfcmVzb3Vy Y2VzKHZvaWQpOworc3RhdGljIHZvaWQgY2xlYW51cF9jb25zdW1lcl9yZXNvdXJjZXModm9pZCk7 CitzdGF0aWMgdm9pZCBXYWxQaXBlbGluZV9XYWl0Rm9yQ29uc3VtZXJTaHV0ZG93blJlcXVlc3Qo dm9pZCk7CiAKIC8qIGNvcGllZCBmcm9tIHhsb2dyZWNvdmVyeS5jICovCiAvKiBQYXJhbWV0ZXJz IHBhc3NlZCBkb3duIGZyb20gUmVhZFJlY29yZCB0byB0aGUgWExvZ1BhZ2VSZWFkIGNhbGxiYWNr LiAqLwpAQCAtMTMzLDYgKzE0MiwxNzMgQEAgV2FsUGlwZWxpbmVTaG1lbUluaXQodm9pZCAqYXJn KQogCVNwaW5Mb2NrSW5pdCgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKIH0KIAorLyoKKyAqIENh bGxlZCBieSBDb25zdW1lci4KKyAqCisgKiBJbml0aWFsaXplIGFuZCBzdGFydCB0aGUgV0FMIHBp cGVsaW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzdGFydHVwCisgKiBwcm9jZXNzIChj b25zdW1lcikgYXMgYSByZXF1ZXN0IHRvIHN0YXJ0IHRoZSBwaXBlbGluZS4KKyAqLwordm9pZAor V2FsUGlwZWxpbmVfU3RhcnQoV2FsUGlwZWxpbmVQYXJhbXMgKnBhcmFtcykKK3sKKwlCYWNrZ3Jv dW5kV29ya2VySGFuZGxlICpoYW5kbGU7CisJQmFja2dyb3VuZFdvcmtlcgl3b3JrZXI7CisJc2ht X3RvY19lc3RpbWF0b3IgCWU7CisJV2FsUGlwZWxpbmVQYXJhbXMgICpzaGFyZWRfcGFyYW1zOwor CWRzbV9zZWdtZW50CQkgICAqc2VnOworCXNobV90b2MJCQkgICAqdG9jOworCXNobV9tcQkJCSAg ICptcTsKKwlTaXplCQkJCXF1ZXVlX3NpemU7CisJU2l6ZQkJCQlzZWdzaXplOworCXBpZF90CQkg CQlwaWQ7CisKKwlpZiAod2FsX3BpcGVsaW5lX21xX3NpemVfbWIgPD0gMCkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQllcnJtc2coImludmFsaWQgd2FsX3BpcGVsaW5lX21xX3NpemVfbWIiKSkpOworCisJcXVldWVf c2l6ZSA9IE1CVG9CeXRlcyh3YWxfcGlwZWxpbmVfbXFfc2l6ZV9tYik7CisKKwkvKiBTZXQgaW5p dCBmbGFnICovCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCWlm IChXYWxQaXBlbGluZVNobS0+aW5pdGlhbGl6ZWQpCisJeworCQlTcGluTG9ja1JlbGVhc2UoJldh bFBpcGVsaW5lU2htLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisJV2FsUGlwZWxpbmVTaG0tPmlu aXRpYWxpemVkID0gdHJ1ZTsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRl eCk7CisKKwkvKgorCSAqIEVzdGltYXRlIGhvdyBtdWNoIHNoYXJlZCBtZW1vcnkgd2UgbmVlZC4K KwkgKgorCSAqIFdlIG5lZWQgb25lIGtleSB0byByZWdpc3RlciB0aGUgbG9jYXRpb24gb2YgdGhl IFdhbFBpcGVsaW5lUGFyYW1zLCBhbmQKKwkgKiB3ZSBuZWVkIDEga2V5IHRvIHRyYWNrIHRoZSBs b2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBxdWV1ZS4KKwkgKi8KKwlzaG1fdG9jX2luaXRpYWxpemVf ZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBzaXplb2YoV2FsUGlw ZWxpbmVQYXJhbXMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBxdWV1ZV9zaXplKTsK KwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJmUsIDIpOworCXNlZ3NpemUgPSBzaG1fdG9jX2VzdGlt YXRlKCZlKTsKKworCS8qIENyZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGFuZCBlc3Rh Ymxpc2ggYSB0YWJsZSBvZiBjb250ZW50cy4gKi8KKwlzZWcgPSBkc21fY3JlYXRlKHNlZ3NpemUs IDApOworCWRzbV9waW5fc2VnbWVudChzZWcpOworCXRvYyA9IHNobV90b2NfY3JlYXRlKFBHX1dB TF9QSVBFTElORV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLAorCQkJCQkJIHNlZ3Np emUpOworCisJLyogU2V0dXAgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgcHJvZHVjZXIg Ki8KKwlzaGFyZWRfcGFyYW1zID0gc2htX3RvY19hbGxvY2F0ZSh0b2MsIHNpemVvZihXYWxQaXBl bGluZVBhcmFtcykpOworCXNobV90b2NfaW5zZXJ0KHRvYywgMSwgc2hhcmVkX3BhcmFtcyk7CisJ KnNoYXJlZF9wYXJhbXMgPSAqcGFyYW1zOworCisJLyogU2V0dXAgdGhlIG1lc3NhZ2UgcXVldWUg Ki8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2MsIHF1ZXVlX3NpemUp LCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0b2MsIDIsIG1xKTsKKworCS8qIHVwZGF0 ZSBzaGFyZWQgc3RhdGUgKi8KKwlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRl eCk7CisJV2FsUGlwZWxpbmVTaG0tPmRzbV9zZWdfaGFuZGxlID0gZHNtX3NlZ21lbnRfaGFuZGxl KHNlZyk7CisJV2FsUGlwZWxpbmVTaG0tPmNvbnN1bWVyX3BpZCA9IE15UHJvY1BpZDsKKwlTcGlu TG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwkvKiBTZXQgdXAgY29uc3Vt ZXIgc2lkZSBvZiB0aGUgcXVldWUgKi8KKwljb25zdW1lcl9kc21fc2VnID0gc2VnOworCWNvbnN1 bWVyX21xID0gbXE7CisJc2htX21xX3NldF9yZWNlaXZlcihjb25zdW1lcl9tcSwgTXlQcm9jKTsK Kwljb25zdW1lcl9tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKGNvbnN1bWVyX21xLCBzZWcsIE5V TEwpOworCisJLyogUmVnaXN0ZXIgYmFja2dyb3VuZCB3b3JrZXIgKi8KKwltZW1zZXQoJndvcmtl ciwgMCwgc2l6ZW9mKHdvcmtlcikpOworCXdvcmtlci5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1F TV9BQ0NFU1M7CisJd29ya2VyLmJnd19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFydF9Qb3N0bWFz dGVyU3RhcnQ7CisJd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsK KwlzcHJpbnRmKHdvcmtlci5iZ3dfbGlicmFyeV9uYW1lLCAicG9zdGdyZXMiKTsKKwlzcHJpbnRm KHdvcmtlci5iZ3dfZnVuY3Rpb25fbmFtZSwgIldhbFBpcGVsaW5lX1Byb2R1Y2VyTWFpbiIpOwor CXNucHJpbnRmKHdvcmtlci5iZ3dfbmFtZSwgQkdXX01BWExFTiwgIndhbCBwaXBlbGluZSBwcm9k dWNlciIpOworCXNucHJpbnRmKHdvcmtlci5iZ3dfdHlwZSwgQkdXX01BWExFTiwgIndhbCBwaXBl bGluZSBwcm9kdWNlciIpOworCXdvcmtlci5iZ3dfbWFpbl9hcmcgPSBVSW50MzJHZXREYXR1bShk c21fc2VnbWVudF9oYW5kbGUoc2VnKSk7CisJd29ya2VyLmJnd19ub3RpZnlfcGlkID0gTXlQcm9j UGlkOworCisJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZ3b3JrZXIsICZo YW5kbGUpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoV2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFy dHVwKGhhbmRsZSwgJnBpZCkgIT0gQkdXSF9TVEFSVEVEKQorCQlnb3RvIGZhaWw7CisKKwkvKiBS ZWdpc3RlciBjbGVhbnVwIGNhbGxiYWNrICovCisJYmVmb3JlX3NobWVtX2V4aXQod2FsX3BpcGVs aW5lX2NsZWFudXBfY2FsbGJhY2ssIChEYXR1bSkgMCk7CisKKwllcmVwb3J0KExPRywgKGVycm1z ZygiW3dhbHBpcGVsaW5lXSBzdGFydGVkLiIpKSk7CisJcmV0dXJuOworCitmYWlsOgorCVNwaW5M b2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+aW5p dGlhbGl6ZWQgPSBmYWxzZTsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRl eCk7CisKKwljbGVhbnVwX2NvbnN1bWVyX3Jlc291cmNlcygpOworCisJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMpLAorCQkJCQllcnJt c2coImNvdWxkIG5vdCBzdGFydCBwaXBlbGluZSBiYWNrZ3JvdW5kIHdvcmtlciIpLAorCQkJCQll cnJoaW50KCJNb3JlIGRldGFpbHMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgc2VydmVyIGxvZy4i KSkpOworfQorCisvKgorICogUmVxdWVzdCBwcm9kdWNlciBzaHV0ZG93bi4KKyAqIFRoaXMgaXMg Y2FsbGVkIGJ5IHRoZSBjb25zdW1lciB3aGVuIGl0IG5vIGxvbmdlciBuZWVkcyByZWNvcmRzLgor ICovCitzdGF0aWMgdm9pZAorV2FsUGlwZWxpbmVfUmVxdWVzdFNodXRkb3duKHZvaWQpCit7CisJ aWYgKCFXYWxQaXBlbGluZVNobSkKKwkJcmV0dXJuOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQ aXBlbGluZVNobS0+bXV0ZXgpOworCVdhbFBpcGVsaW5lU2htLT5zaHV0ZG93bl9yZXF1ZXN0ZWQg PSB0cnVlOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KKwor LyoKKyAqIENvbnN1bWVyIEZ1bmN0aW9uLgorICogU3RvcCB0aGUgV0FMIHBpcGVsaW5lLiBUaGlz IGJlIGNhbGxlZCBiZSB0aGUgc3RhcnR1cCBwcm9jZXNzCisgKiAoY29uc3VtZXIpLiBUaGlzIHdp bGwgb25seSBiZSBjYWxsZWQgIGFuZCB0aGUgdGltZSB0byByZWNvdmVyeSBzaHV0ZG93bi4KKyAq IFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHdhaXQgdW50aWwgdGhlIHBpcGVsaW5lIHdvcmtlcnMK KyAqIGFyZSBleGl0ZWQuCisgKi8KK3ZvaWQKK1dhbFBpcGVsaW5lX1N0b3Aodm9pZCkKK3sKKwlp ZiAoIVdhbFBpcGVsaW5lU2htIHx8ICFXYWxQaXBlbGluZVNobS0+aW5pdGlhbGl6ZWQpCisJCXJl dHVybjsKKworCS8qIEFzayBwcm9kdWNlciB0byBzdG9wICovCisJV2FsUGlwZWxpbmVfUmVxdWVz dFNodXRkb3duKCk7CisKKwkvKiBXYWl0IGZvciBwcm9kdWNlciB0byBleGl0IChtYXggMTAgc2Vj b25kcykgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQorCXsKKwkJYm9vbCBwcm9k dWNlcl9hbGl2ZTsKKworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7 CisJCXByb2R1Y2VyX2FsaXZlID0gKFdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9waWQgIT0gMCk7 CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCQlpZiAoIXBy b2R1Y2VyX2FsaXZlKQorCQkJYnJlYWs7CisKKwkJcGdfdXNsZWVwKDEwMDAwMCk7IC8qIDEwMCBt cyAqLworCX0KKworCWNsZWFudXBfY29uc3VtZXJfcmVzb3VyY2VzKCk7CisKKwlTcGluTG9ja0Fj cXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJV2FsUGlwZWxpbmVTaG0tPmluaXRpYWxp emVkID0gZmFsc2U7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOwor CisJZWxvZyhMT0csICJbd2FscGlwZWxpbmVdIHNodXRkb3duIik7Cit9CiAKIC8qCiAgKiBQcm9k dWNlciBGdW5jdGlvbi4KQEAgLTQwOCw2ICs1ODQsMjEwIEBAIFdhbFBpcGVsaW5lX1NlbmRTaHV0 ZG93bih2b2lkKQogCXJldHVybiAocmVzID09IFNITV9NUV9TVUNDRVNTKTsKIH0KIAorLyoKKyAq IENvbnN1bWVyIEZ1bmN0aW9uLgorICogUmVjZWl2ZSBhbmQgZGVzZXJpYWxpemUgYSBXQUwgcmVj b3JkIGZyb20gdGhlIHByb2R1Y2VyCisgKi8KK0RlY29kZWRYTG9nUmVjb3JkICoKK1dhbFBpcGVs aW5lX1JlY2VpdmVSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpzdGFydHVwX3JlYWRlcikKK3sKKwlz aG1fbXFfcmVzdWx0IHJlczsKKwlTaXplICAgICAgICBuYnl0ZXM7CisJdm9pZCAgICAgICAqZGF0 YTsKKwlXYWxSZWNvcmRNc2dIZWFkZXIgKmhkcjsKKwlEZWNvZGVkWExvZ1JlY29yZCAqcmVjb3Jk OworCisJaWYgKCFjb25zdW1lcl9tcV9oYW5kbGUpCisJCXJldHVybiBOVUxMOworCisJLyogUmVj ZWl2ZSBtZXNzYWdlIGZyb20gcXVldWUgKi8KKwlyZXMgPSBzaG1fbXFfcmVjZWl2ZShjb25zdW1l cl9tcV9oYW5kbGUsICZuYnl0ZXMsICZkYXRhLCBmYWxzZSk7CisKKwlpZiAocmVzICE9IFNITV9N UV9TVUNDRVNTKQorCQllbG9nKEVSUk9SLCAiW3dhbHBpcGVsaW5lXSBjb25zdW1lcjogZmFpbGVk IHRvIHJlY2VpdmUgcmVjb3JkIik7CisKKwloZHIgPSAoV2FsUmVjb3JkTXNnSGVhZGVyICopIGRh dGE7CisKKwkvKiBIYW5kbGUgZGlmZmVyZW50IG1lc3NhZ2UgdHlwZXMgKi8KKwlzd2l0Y2ggKGhk ci0+bXNnX3R5cGUpCisJeworCQljYXNlIFdBTF9NU0dfUkVDT1JEOgorCQkJcmVjb3JkID0gZGVz ZXJpYWxpemVfd2FsX3JlY29yZCgoY2hhciAqKSBkYXRhLCBuYnl0ZXMsIHN0YXJ0dXBfcmVhZGVy KTsKKworCQkJLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KKwkJCVNwaW5Mb2NrQWNxdWlyZSgmV2Fs UGlwZWxpbmVTaG0tPm11dGV4KTsKKwkJCVdhbFBpcGVsaW5lU2htLT5yZWNvcmRzX3JlY2VpdmVk Kys7CisJCQlXYWxQaXBlbGluZVNobS0+Ynl0ZXNfcmVjZWl2ZWQgKz0gbmJ5dGVzOworCQkJV2Fs UGlwZWxpbmVTaG0tPmNvbnN1bWVyX2xzbiA9IGhkci0+ZW5kUmVjUHRyOworCQkJU3BpbkxvY2tS ZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJCQlyZXR1cm4gcmVjb3JkOworCisJ CWNhc2UgV0FMX01TR19TSFVURE9XTjoKKwkJCWVsb2coTE9HLCAiW3dhbHBpcGVsaW5lXSBjb25z dW1lcjogcmVjZWl2ZWQgc2h1dGRvd24gbWVzc2FnZSBmcm9tIHRoZSBwcm9kdWNlciIpOworCQkJ cmV0dXJuIE5VTEw7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coUEFOSUMsICJbd2FscGlwZWxpbmVd IGNvbnN1bWVyOiB1bmtub3duIG1lc3NhZ2UgdHlwZTogJWQiLAorCQkJCSBoZHItPm1zZ190eXBl KTsKKwkJCXJldHVybiBOVUxMOworCX0KK30KKworLyoKKyAqIENvbnN1bWVyIEZ1bmN0aW9uLgor ICogQ2hlY2sgaWYgcHJvZHVjZXIgaXMgc3RpbGwgcnVubmluZworICovCitib29sCitXYWxQaXBl bGluZV9DaGVja1Byb2R1Y2VyQWxpdmUodm9pZCkKK3sKKwlwaWRfdCAgICAgICBwaWQ7CisJYm9v bCAgICAgICAgYWxpdmU7CisKKwlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRl eCk7CisJcGlkID0gV2FsUGlwZWxpbmVTaG0tPnByb2R1Y2VyX3BpZDsKKwlTcGluTG9ja1JlbGVh c2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlpZiAocGlkID09IDApCisJCXJldHVybiBm YWxzZTsKKworCWFsaXZlID0gKGtpbGwocGlkLCAwKSA9PSAwKTsKKworCWlmICghYWxpdmUpCisJ eworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJCVdhbFBpcGVs aW5lU2htLT5wcm9kdWNlcl9waWQgPSAwOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5l U2htLT5tdXRleCk7CisJfQorCisJcmV0dXJuIGFsaXZlOworfQorCisvKgorICogQ29uc3VtZXIg RnVuY3Rpb24uCisgKiBDaGVjayBpZiBwaXBlbGluZSBpcyBhY3RpdmUKKyAqLworYm9vbAorV2Fs UGlwZWxpbmVfSXNBY3RpdmUodm9pZCkKK3sKKwlib29sICAgICAgICBhY3RpdmU7CisKKwlpZiAo IVdhbFBpcGVsaW5lU2htKQorCQlyZXR1cm4gZmFsc2U7CisKKwlTcGluTG9ja0FjcXVpcmUoJldh bFBpcGVsaW5lU2htLT5tdXRleCk7CisJYWN0aXZlID0gV2FsUGlwZWxpbmVTaG0tPmluaXRpYWxp emVkICYmICFXYWxQaXBlbGluZVNobS0+c2h1dGRvd25fcmVxdWVzdGVkOworCVNwaW5Mb2NrUmVs ZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCXJldHVybiBhY3RpdmU7Cit9CisKKy8q CisgKiBDb25zdW1lciBGdW5jdGlvbi4KKyAqIENoZWNrIGlmIHBpZCBwaXBlbGluZSBkZWNvZGVy IHdvcmtlcgorICovCitwaWRfdAorV2FsUGlwZWxpbmVfR2V0UHJvZHVjZXJQaWQodm9pZCkKK3sK KwlwaWRfdCBwaWQ7CisKKwlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7 CisJcGlkID0gV2FsUGlwZWxpbmVTaG0tPnByb2R1Y2VyX3BpZDsKKwlTcGluTG9ja1JlbGVhc2Uo JldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlpZiAoIShwaWQgPiAwKSkKKwkJcGlkID0gSW52 YWxpZFBpZDsKKworCXJldHVybiBwaWQ7Cit9CisKKy8qCisgKiBQcm9kdWNlciBGdW5jdGlvbi4K KyAqIFByb2R1Y2VyIG1heSBjYW4gZXhpdCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBjb25zdW1l ciwgYnV0IGl0cyBiZXR0ZXIgdG8KKyAqIHdhaXQgdW50aWwgY29uc3VtZXIgcmVxdWVzdCBzaHV0 ZG93bi4gVGhpcyB3YXkgbG9nIG1lc3NhZ2VzIHdpbGwgc2hvdworICogbm8gb2YgcmVjb3Jkc19z ZW50ICYgcmVjb3Jkc19yZWNlaXZlZCByZWNvcmRzIGVxdWFsIHRvIGVhY2ggb3RoZXIuCisgKi8K K3N0YXRpYyB2b2lkCitXYWxQaXBlbGluZV9XYWl0Rm9yQ29uc3VtZXJTaHV0ZG93blJlcXVlc3Qo dm9pZCkKK3sKKwlpbnQJCQlpdGVycyA9IDA7CisKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWJvb2wJ CXNodXRkb3duX3JlcXVlc3RlZDsKKworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2ht LT5tdXRleCk7CisJCXNodXRkb3duX3JlcXVlc3RlZCA9IFdhbFBpcGVsaW5lU2htLT5zaHV0ZG93 bl9yZXF1ZXN0ZWQ7CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsK KworCQlpZiAoc2h1dGRvd25fcmVxdWVzdGVkKQorCQkJYnJlYWs7CisKKwkJaWYgKCsraXRlcnMg Pj0gTUFYX1NIVVRET1dOX1dBSVRfSVRFUlMpCisJCXsKKwkJCWVsb2coV0FSTklORywKKwkJCQkJ Ilt3YWxwaXBlbGluZV0gcHJvZHVjZXI6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBjb25zdW1lciAi CisJCQkJCSJ0byBhY2tub3dsZWRnZSBzaHV0ZG93biwgZXhpdGluZyBhbnl3YXkiKTsKKwkJCWJy ZWFrOworCQl9CisKKwkJLyogQWxsb3cgU0lHVEVSTSAvIFNJR0hVUCB0byBpbnRlcnJ1cHQgdGhl IHdhaXQgKi8KKwkJUHJvY2Vzc1BpcGVsaW5lQmd3SW50ZXJydXB0cygpOworCisJCXBnX3VzbGVl cCgxMDAwMCk7ICAvKiBzbGVlcCAxMG1zICovCisJfQorfQorCisvKgorICogQ29uc3VtZXIgRnVu Y3Rpb24uCisgKiBXYWl0IHVubGVzcyBsYXN0IHNlbnQgcmVjb3JkIGJ5IHRoZSBwaXBlbGluZSBp cyBhcHBsaWVkIGJ5IHRoZQorICogc3RhcnR1cCBwcm9jZXNzLgorICovCit2b2lkCitXYWxQaXBl bGluZV9XYWl0Rm9yQ29uc3VtZXJDYXRjaHVwKHZvaWQpCit7CisJWExvZ1JlY1B0ciBwcm9kdWNl cl9sc247CisJWExvZ1JlY1B0ciBjb25zdW1lcl9sc247CisKKwlmb3IgKDs7KQorCXsKKwkJU3Bp bkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlwcm9kdWNlcl9sc24gPSBX YWxQaXBlbGluZVNobS0+cHJvZHVjZXJfbHNuOworCQljb25zdW1lcl9sc24gPSBXYWxQaXBlbGlu ZVNobS0+YXBwbGllZF9sc247CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKworCQlpZiAocHJvZHVjZXJfbHNuID09IGNvbnN1bWVyX2xzbikKKwkJCXJldHVybjsK KworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIHNob3J0IHNsZWVwIHRvIGF2b2lk IGJ1c3kgbG9vcGluZyAqLworCQlwZ191c2xlZXAoNTApOyAgIC8qIDUwIG1pY3Jvc2Vjb25kcyAq LworCX0KK30KKworLyoKKyAqIENvbnN1bWVyIEZ1bmN0aW9uLgorICogR2V0IHBpcGVsaW5lIHN0 YXRpc3RpY3MKKyAqLwordm9pZAorV2FsUGlwZWxpbmVfR2V0U3RhdHModWludDY0ICpyZWNvcmRz X3NlbnQsIHVpbnQ2NCAqcmVjb3Jkc19yZWNlaXZlZCwKKwkJCQkJIFhMb2dSZWNQdHIgKnByb2R1 Y2VyX2xzbiwgWExvZ1JlY1B0ciAqY29uc3VtZXJfbHNuKQoreworCVNwaW5Mb2NrQWNxdWlyZSgm V2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCWlmIChyZWNvcmRzX3NlbnQpCisJCSpyZWNvcmRz X3NlbnQgPSBXYWxQaXBlbGluZVNobS0+cmVjb3Jkc19zZW50OworCWlmIChyZWNvcmRzX3JlY2Vp dmVkKQorCQkqcmVjb3Jkc19yZWNlaXZlZCA9IFdhbFBpcGVsaW5lU2htLT5yZWNvcmRzX3JlY2Vp dmVkOworCWlmIChwcm9kdWNlcl9sc24pCisJCSpwcm9kdWNlcl9sc24gPSBXYWxQaXBlbGluZVNo bS0+cHJvZHVjZXJfbHNuOworCWlmIChjb25zdW1lcl9sc24pCisJCSpjb25zdW1lcl9sc24gPSBX YWxQaXBlbGluZVNobS0+Y29uc3VtZXJfbHNuOworCisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBl bGluZVNobS0+bXV0ZXgpOworfQorCiAKIC8qCiAgKiBzZXJpYWxpemVfd2FsX3JlY29yZCAoUHJv ZHVjZXIpCkBAIC00NDQsNiArODI0LDYwIEBAIHNlcmlhbGl6ZV93YWxfcmVjb3JkKFhMb2dSZWFk ZXJTdGF0ZSAqeGxvZ3JlYWRlciwgc2htX21xX2lvdmVjICppb3YpCiAJcmV0dXJuIHNpemVvZihX YWxSZWNvcmRNc2dIZWFkZXIpICsgcGF5bG9hZF9zaXplOzsKIH0KIAorLyoKKyAqIGRlc2VyaWFs aXplX3dhbF9yZWNvcmQgKENvbnN1bWVyKQorICoKKyAqIFVucGFjayBhIGJ1ZmZlciBwcm9kdWNl ZCBieSBzZXJpYWxpemVfd2FsX3JlY29yZCwgcmVzdG9yZSBpbnRlcmlvcgorICogb2Zmc2V0cyB0 byBwb2ludGVycywgYW5kIGF0dGFjaCB0aGUgcmVjb3JkIHRvIHRoZSBzdGFydHVwIHJlYWRlci4K KyAqCisgKiBEYXRhIExheW91dDoKKyAqIAkJW1dhbFJlY29yZE1zZ0hlYWRlcl1bRGVjb2RlZFhM b2dSZWNvcmQgKyB0cmFpbGluZyBkYXRhXQorICovCitEZWNvZGVkWExvZ1JlY29yZCAqCitkZXNl cmlhbGl6ZV93YWxfcmVjb3JkKGNvbnN0IGNoYXIgKmJ1ZiwgU2l6ZSBsZW4sCisJCQkJCSAgIFhM b2dSZWFkZXJTdGF0ZSAqc3RhcnR1cF9yZWFkZXIpCit7CisJV2FsUmVjb3JkTXNnSGVhZGVyIGhk cjsKKwlEZWNvZGVkWExvZ1JlY29yZCAqZGVjOworCWNvbnN0IGNoYXIgKnBheWxvYWQ7CisKKwlp ZiAobGVuIDwgc2l6ZW9mKGhkcikpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KCZoZHIsIGJ1 Ziwgc2l6ZW9mKGhkcikpOworCisJaWYgKGhkci5kZWNvZGVkX3NpemUgIT0gbGVuIC0gc2l6ZW9m KGhkcikpCisJCXJldHVybiBOVUxMOworCisKKwkvKgorCSAqIFdlIGRvbid0IGhhdmUgdG8gY29w eSB0aGUgZGF0YSB0byBzb21lIGxvY2FsIGJ1ZmZlci4gVGhlIGRlY29kZWQgYmxrcworCSAqIGFy ZSBjb250aW5vdXMgYnl0ZXMgaW4gbWVtb3J5IGFuZCBoZW5jZSB3ZSBjYW4ganVzdCBwb2ludCB0 byBpdHMgbG9jYXRpb24KKwkgKiBpbiB0aGUgc2hfbXEKKwkgKi8KKwlwYXlsb2FkID0gYnVmICsg c2l6ZW9mKGhkcik7CisJZGVjID0gKERlY29kZWRYTG9nUmVjb3JkICopIHBheWxvYWQ7CisKKwly ZXNldF9vZmZzZXRzX3RvX3B0cnMoZGVjKTsKKworCS8qIGNsZWFyIHRoZSBxdWV1ZSBsaW5rIOKA lCBpdCBiZWxvbmdzIHRvIHRoZSBwcm9kdWNlcidzIHF1ZXVlICovCisJZGVjLT5uZXh0ID0gTlVM TDsKKworCS8qIEF0dGFjaCB0byByZWFkZXIsIG9ubHkgdXBkYXRpbmcgdGhlIHB1YmxpYyBwYXJh bWV0ZXJzICovCisJc3RhcnR1cF9yZWFkZXItPnJlY29yZCAgICAgICAgICAgID0gZGVjOworCXN0 YXJ0dXBfcmVhZGVyLT5SZWFkUmVjUHRyICAgICAgICA9IGRlYy0+bHNuOworCXN0YXJ0dXBfcmVh ZGVyLT5EZWNvZGVSZWNQdHIgICAgICA9IGRlYy0+bHNuOworCXN0YXJ0dXBfcmVhZGVyLT5FbmRS ZWNQdHIgICAgICAgICA9IGRlYy0+bmV4dF9sc247CisJc3RhcnR1cF9yZWFkZXItPk5leHRSZWNQ dHIgICAgICAgID0gZGVjLT5uZXh0X2xzbjsKKwlzdGFydHVwX3JlYWRlci0+ZGVjb2RlX3F1ZXVl X2hlYWQgPSBkZWM7CisJc3RhcnR1cF9yZWFkZXItPmRlY29kZV9xdWV1ZV90YWlsID0gZGVjOwor CXN0YXJ0dXBfcmVhZGVyLT5taXNzaW5nQ29udHJlY1B0ciA9IGhkci5taXNzaW5nQ29udHJlY1B0 cjsKKwlzdGFydHVwX3JlYWRlci0+YWJvcnRlZFJlY1B0ciAgICAgPSBoZHIuYWJvcnRlZFJlY1B0 cjsKKwlzdGFydHVwX3JlYWRlci0+b3ZlcndyaXR0ZW5SZWNQdHIgPSBoZHIub3ZlcndyaXR0ZW5S ZWNQdHI7CisKKwlyZXR1cm4gZGVjOworfQorCiAvKgogICogV2UgbmVlZCB0byBwdXQgc29tZSBh c3NlcnRpb24gdGhhdCBvbmx5IHBpcGVsaW5lIHdvcmtlciBzaG91bGQgYmUgdG91Y2hpbmcKICAq IHRoZSBzcGVjaWZpYyBjb2RlLgpAQCAtNDg0LDYgKzkxOCwzMiBAQCBjbGVhbnVwX3Byb2R1Y2Vy X3Jlc291cmNlcyh2b2lkKQogCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4 KTsKIH0KIAorLyoKKyAqIENsZWFuIHVwIGNvbnN1bWVyLXNpZGUgcmVzb3VyY2VzCisgKi8KK3N0 YXRpYyB2b2lkCitjbGVhbnVwX2NvbnN1bWVyX3Jlc291cmNlcyh2b2lkKQoreworCWlmIChjb25z dW1lcl9tcV9oYW5kbGUpCisJeworCQlzaG1fbXFfZGV0YWNoKGNvbnN1bWVyX21xX2hhbmRsZSk7 CisJCWNvbnN1bWVyX21xX2hhbmRsZSA9IE5VTEw7CisJfQorCisJaWYgKGNvbnN1bWVyX2RzbV9z ZWcpCisJeworCQlkc21fdW5waW5fc2VnbWVudChkc21fc2VnbWVudF9oYW5kbGUoY29uc3VtZXJf ZHNtX3NlZykpOworCQlkc21fZGV0YWNoKGNvbnN1bWVyX2RzbV9zZWcpOworCQljb25zdW1lcl9k c21fc2VnID0gTlVMTDsKKwl9CisKKwljb25zdW1lcl9tcSA9IE5VTEw7CisKKwlTcGluTG9ja0Fj cXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJV2FsUGlwZWxpbmVTaG0tPmNvbnN1bWVy X3BpZCA9IDA7CisJV2FsUGlwZWxpbmVTaG0tPmRzbV9zZWdfaGFuZGxlID0gRFNNX0hBTkRMRV9J TlZBTElEOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KIAog LyoKICAqIENsZWFudXAgY2FsbGJhY2sgZm9yIHByb2Nlc3MgZXhpdApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCBjN2ExNmQ5OTE4MC4uMGUxNjU3MzY1MjQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC0xNjAwLDcg KzE2MDAsNTcgQEAgU2h1dGRvd25XYWxSZWNvdmVyeSh2b2lkKQogCSAqIGl0LCBidXQgbGV0J3Mg ZG8gaXQgZm9yIHRoZSBzYWtlIG9mIHRpZGluZXNzLgogCSAqLwogCWlmIChBcmNoaXZlUmVjb3Zl cnlSZXF1ZXN0ZWQpCi0JCURpc293bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2Fr ZXVwTGF0Y2gpOworCisvKgorICogR2V0IG5leHQgcmVjb3JkIGZvciByZWRvLgorICoKKyAqIFVz ZSB0aGUgcGlwZWxpbmUgaWYgZW5hYmxlZCBmb3IgcGFyYWxsZWwgZGVjb2RpbmcgYW5kIHJlY2Vp dmUgZGVjb2RlZAorICogcmVjb3JkcyBmcm9tIGEgc2hhcmVkIHF1ZXVlLCBlbHNlIHJlYWQgaXQg ZGlyZWN0bHkuCisgKgorICogUGFyYWxsZWwgZGVjb2RpbmcgaGVscHMgdXMgb2ZmbG9hZGluZyBz b21lIGxvYWQgZnJvbSB0aGUgQ1BVIGFuZCBoZW5jZQorICogYm9vc3RpbmcgdGhlIHJlY292ZXJ5 IHByb2Nlc3MuCisgKi8KK3N0YXRpYyBYTG9nUmVjb3JkICoKK1JlY2VpdmVSZWNvcmQoWExvZ1By ZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyLCBpbnQgZW1vZGUsCisJCQkJYm9vbCBmZXRjaGluZ19j a3B0LCBUaW1lTGluZUlEIHJlcGxheVRMSSwKKwkJCQlYTG9nUmVhZGVyU3RhdGUgKipsb2NhbHJl YWRlcikKK3sKKworCVhMb2dSZWNvcmQgKnJlY29yZCA9IE5VTEw7CisJWExvZ1JlYWRlclN0YXRl ICpyZWFkZXIgPSAqbG9jYWxyZWFkZXI7CisJRGVjb2RlZFhMb2dSZWNvcmQgKmRlY29kZWRfcmVj b3JkID0gTlVMTDsKKworCS8qCisJICogSWYgcGlwZWxpbmUgbm90IGVuYWJsZWQgcmVhZCB0aGUg cmVjb3JkIGRpcmVjdGx5CisJICovCisJaWYgKCF3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJ CXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3ByZWZldGNoZXIsIGVtb2RlLCBmZXRjaGluZ19ja3B0 LCByZXBsYXlUTEkpOworCQlyZXR1cm4gcmVjb3JkOworCX0KKworCUFzc2VydCAoV2FsUGlwZWxp bmVfSXNBY3RpdmUoKSk7CisKKwkvKgorCSAqIEdldCB0aGUgcmVjb3JkIGZyb20gdGhlIHBpcGVs aW5lIG1lc3NhZ2UgcXVldWUKKwkgKi8KKwlkZWNvZGVkX3JlY29yZCA9IFdhbFBpcGVsaW5lX1Jl Y2VpdmVSZWNvcmQocmVhZGVyKTsKKworCWlmIChkZWNvZGVkX3JlY29yZCkKKwl7CisJCXJlY29y ZCA9ICZkZWNvZGVkX3JlY29yZC0+aGVhZGVyOworCQlyZXR1cm4gcmVjb3JkOworCX0KKwllbHNl CisJeworCQkvKgorCQkgKiBXZSB3aWxsIGVuZCB1cCBoZXJlIG9ubHkgd2hlbiBwaXBlbGluZSBj b3VsZG4ndCByZWFkIG1vcmUKKwkJICogcmVjb3JkcyBhbmQgaGF2ZSBzZW50IGEgc2h1dGRvd24g bXNnLiBXZSB3aWxsIGFja25vd2xkZ2UgdGhpcworCQkgKiBhbmQgd2lsbCB0cmlnZ2VyIHJlcXVl c3QgdG8gc3RvcCBtb3JlIHBpcGVsaW5lZCBkZWNvZGluZy4KKwkJICovCisJCVdhbFBpcGVsaW5l X1N0b3AoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogfQogCiAvKgpAQCAtMTYxNSw2ICsxNjY1LDEy IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lkKQogCWJvb2wJCXJlYWNoZWRSZWNvdmVyeVRhcmdl dCA9IGZhbHNlOwogCVRpbWVMaW5lSUQJcmVwbGF5VExJOwogCisJLyoKKwkgKiBzdGFuZGFsb25l IGJhY2tlbmQgbWF5IGV4aXN0IGluIGNhc2Ugb2YgcGdfcmV3aW5kLgorCSAqLworCWlmICghSXNV bmRlclBvc3RtYXN0ZXIpCisJCXdhbF9waXBlbGluZV9lbmFibGVkID0gZmFsc2U7CisKIAkvKgog CSAqIEluaXRpYWxpemUgc2hhcmVkIHZhcmlhYmxlcyBmb3IgdHJhY2tpbmcgcHJvZ3Jlc3Mgb2Yg V0FMIHJlcGxheSwgYXMgaWYKIAkgKiB3ZSBoYWQganVzdCByZXBsYXllZCB0aGUgcmVjb3JkIGJl Zm9yZSB0aGUgUkVETyBsb2NhdGlvbiAob3IgdGhlCkBAIC0xNjk0LDYgKzE3NTAsMTcgQEAgUGVy Zm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAKIAkJSW5SZWRvID0gdHJ1ZTsKIAorCQlpZih3YWxfcGlw ZWxpbmVfZW5hYmxlZCkKKwkJeworCQkJLyoKKwkJCSAqIFN0YXJ0dXAgcHJvYyBwYXJhbWV0ZXJz IHRoYXQgcGlwZWxpbmUgc2hvdWxkIGFsc28gYmUgYXdhcmUgb2YuCisJCQkgKi8KKwkJCVdhbFBp cGVsaW5lUGFyYW1zICpwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihXYWxQaXBlbGluZVBhcmFtcykp OworCisJCQlwYXJhbXMtPlJlcGxheVRMSSA9IHJlcGxheVRMSTsKKwkJCVdhbFBpcGVsaW5lX1N0 YXJ0KHBhcmFtcyk7CisJCX0KKwogCQlSbWdyU3RhcnR1cCgpOwogCiAJCWVyZXBvcnQoTE9HLApA QCAtMTgwMiw3ICsxODY5LDcgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAJCQl9CiAKIAkJ CS8qIEVsc2UsIHRyeSB0byBmZXRjaCB0aGUgbmV4dCBXQUwgcmVjb3JkICovCi0JCQlyZWNvcmQg PSBSZWFkUmVjb3JkKHhsb2dwcmVmZXRjaGVyLCBMT0csIGZhbHNlLCByZXBsYXlUTEkpOworCQkJ cmVjb3JkID0gUmVjZWl2ZVJlY29yZCh4bG9ncHJlZmV0Y2hlciwgTE9HLCBmYWxzZSwgcmVwbGF5 VExJLCAmeGxvZ3JlYWRlcik7CiAJCX0gd2hpbGUgKHJlY29yZCAhPSBOVUxMKTsKIAogCQkvKgpA QCAtMTgxMSw2ICsxODc4LDkgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAKIAkJaWYgKHJl YWNoZWRSZWNvdmVyeVRhcmdldCkKIAkJeworCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQor CQkJCVdhbFBpcGVsaW5lX1N0b3AoKTsKKwogCQkJaWYgKCFyZWFjaGVkQ29uc2lzdGVuY3kpCiAJ CQkJZXJlcG9ydChGQVRBTCwKIAkJCQkJCShlcnJtc2coInJlcXVlc3RlZCByZWNvdmVyeSBzdG9w IHBvaW50IGlzIGJlZm9yZSBjb25zaXN0ZW50IHJlY292ZXJ5IHBvaW50IikpKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9ncGlwZWxpbmUuaAppbmRleCAzMzMwOTA2MzJiNC4uYTg5OTVkNWMxYTcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MveGxvZ3BpcGVsaW5lLmgKQEAgLTg4LDExICs4OCwyOSBAQCB0eXBlZGVmIHN0cnVjdCBX YWxQaXBlbGluZVNobUN0bAogLyogY29uc3VtZXIgbWF5IGhhdmUgdG8gY29tcHV0ZSBwcmVmZXRl Y2hlciBzdGF0cyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dQcmVmZXRjaGVyICp4bG9ncHJl ZmV0Y2hlcl9waXBlbGluZWQ7CiAKKy8qCisgKiBQdWJsaWMgQVBJIGZ1bmN0aW9ucworICovCisK Ky8qIFN0YXJ0L3N0b3AgdGhlIHBpcGVsaW5lICovCitleHRlcm4gdm9pZCBXYWxQaXBlbGluZV9T dGFydChXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1zKTsKK2V4dGVybiB2b2lkIFdhbFBpcGVsaW5l X1N0b3Aodm9pZCk7CiAKIC8qIFByb2R1Y2VyIGZ1bmN0aW9ucyAoY2FsbGVkIGJ5IGJhY2tncm91 bmQgd29ya2VyKSAqLwogZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVfUHJvZHVjZXJNYWluKERhdHVt IG1haW5fYXJnKTsKIGV4dGVybiBib29sIFdhbFBpcGVsaW5lX1NlbmRSZWNvcmQoWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpOwogZXh0ZXJuIGJvb2wgV2FsUGlwZWxpbmVfU2VuZFNodXRkb3duKHZv aWQpOworCisvKiBDb25zdW1lciBmdW5jdGlvbnMgKGNhbGxlZCBieSBzdGFydHVwIHByb2Nlc3Mp ICovCitleHRlcm4gRGVjb2RlZFhMb2dSZWNvcmQgKldhbFBpcGVsaW5lX1JlY2VpdmVSZWNvcmQo WExvZ1JlYWRlclN0YXRlICpzdGFydHVwX3JlYWRlcik7CitleHRlcm4gYm9vbCBXYWxQaXBlbGlu ZV9DaGVja1Byb2R1Y2VyQWxpdmUodm9pZCk7CisKKy8qIFN0YXR1cyBhbmQgbW9uaXRvcmluZyAq LworZXh0ZXJuIGJvb2wgV2FsUGlwZWxpbmVfSXNBY3RpdmUodm9pZCk7CitleHRlcm4gcGlkX3Qg V2FsUGlwZWxpbmVfR2V0UHJvZHVjZXJQaWQodm9pZCk7CitleHRlcm4gdm9pZCBXYWxQaXBlbGlu ZV9XYWl0Rm9yQ29uc3VtZXJDYXRjaHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVf R2V0U3RhdHModWludDY0ICpyZWNvcmRzX3NlbnQsIHVpbnQ2NCAqcmVjb3Jkc19yZWNlaXZlZCwK KwkJCQkJCQkJICBYTG9nUmVjUHRyICpwcm9kdWNlcl9sc24sIFhMb2dSZWNQdHIgKmNvbnN1bWVy X2xzbik7CiBleHRlcm4gYm9vbCBBbVdhbFBpcGVsaW5lKHZvaWQpOwogCiAKLS0gCjIuMzQuMQoK --000000000000ce41dd06563dfc9a Content-Type: application/pdf; name="recoveries-becnhmark-v05.pdf" Content-Disposition: attachment; filename="recoveries-becnhmark-v05.pdf" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mreo03bj5 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 ThknLrHY/h3aJHHfjYZJ7AyN4sHNng9rZrPu0ZnZtROWgbmi79thk8cqYTHtfhgi6ibrqCSeOXFz F7Xrzm/hv7///p9Tbt8m4cVtRVnBMcKXyiAOlqgbR9kMHnBtiWCmw7WNTx2tOEcNNKEc8JU+yCt2 fVU1jgiw9pJ6AfB1Gv5pnD+OdMk4OX5/kCpY9+//B8i5lA8KZW5kc3RyZWFtCmVuZG9iagoxIDAg b2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA0IDAgUiAvQ29udGVu dHMgMyAwIFIgL01lZGlhQm94IFswIDAgMTE0NC4yMzEgMTYxOS4yMzFdCj4+CmVuZG9iago0IDAg b2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIg L0NzMiAyNiAwIFIgPj4gL0ZvbnQKPDwgL1RUMSA2IDAgUiAvVFQ0IDkgMCBSIC9UVDIgNyAwIFIg L1RUMyA4IDAgUiA+PiAvWE9iamVjdCA8PCAvRm0xIDEwIDAgUgovRm0yIDEyIDAgUiAvRm0zIDE0 IDAgUiAvRm00IDE2IDAgUiAvRm01IDE4IDAgUiAvRm02IDIwIDAgUiAvRm03IDIyIDAgUiAvRm04 CjI0IDAgUiA+PiA+PgplbmRvYmoKMTAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL1R5 cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3ggWzAgMCA3NSAxOThd Ci9SZXNvdXJjZXMgMTEgMCBSIC9Hcm91cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAyOCAwIFIg L0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVuZ3RoIDc2ID4+CnN0cmVhbQp4AStUCFQoVDAAQnNTBUNL C4WiVIVwhTwFfediQ4XkYgUDPWNzCxMTM0sgy8LEwsjUzBjIMjI0MjAztlQoTkbSygXUmqYQCAD4 AxIUCmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIF0gL0NvbG9y U3BhY2UgPDwgL0NzMSA1IDAgUiA+PiA+PgplbmRvYmoKMTIgMCBvYmoKPDwgL0ZpbHRlciAvRmxh dGVEZWNvZGUgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3gg WzAgMCA3NSA1MF0KL1Jlc291cmNlcyAxMyAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kg L0NTIDI4IDAgUiAvSSB0cnVlIC9LIGZhbHNlID4+Ci9MZW5ndGggNzUgPj4Kc3RyZWFtCngBK1QI VChUMABCc1MFUwOFolSFcIU8BX3nYkOF5GIFAz1jcwsTEzNLIMvCxMLI1MwYyDIyNDIwM7ZUKE5G 6OQC6kxTCAQA0zsRmgplbmRzdHJlYW0KZW5kb2JqCjEzIDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BE RiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjE0IDAgb2JqCjw8IC9G aWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9Gb3JtVHlw ZSAxIC9CQm94IFswIDAgNzUgMjEwXQovUmVzb3VyY2VzIDE1IDAgUiAvR3JvdXAgPDwgL1MgL1Ry YW5zcGFyZW5jeSAvQ1MgMjggMCBSIC9JIHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA3NiA+Pgpz dHJlYW0KeAErVAhUKFQwAEJzUwUjQwOFolSFcIU8BX3nYkOF5GIFAz1jcwsTEzNLIMvCxMLI1MwY yDIyNDIwM7ZUKE5G0soF1JqmEAgA85IR9gplbmRzdHJlYW0KZW5kb2JqCjE1IDAgb2JqCjw8IC9Q cm9jU2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjE2 IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9G b3JtIC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNzUgNTNdCi9SZXNvdXJjZXMgMTcgMCBSIC9Hcm91 cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAyOCAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVu Z3RoIDc1ID4+CnN0cmVhbQp4AStUCFQoVDAAQnNTBVNjhaJUhXCFPAV952JDheRiBQM9Y3MLExMz SyDLwsTCyNTMGMgyMjQyMDO2VChORujkAupMUwgEANQZEaAKZW5kc3RyZWFtCmVuZG9iagoxNyAw IG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUgMCBSID4+ID4+ CmVuZG9iagoxOCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAvWE9iamVjdCAv U3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc1IDIzMF0KL1Jlc291cmNlcyAx OSAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIDI4IDAgUiAvSSB0cnVlIC9LIGZh bHNlID4+Ci9MZW5ndGggNzAgPj4Kc3RyZWFtCngBK1QIVChUMABCc1MFI2MDhaJUhXCFPAV952JD heRiBQM9AwMDM2NLM0NzMyDHzNjYzMDYSMFQoTgZVRdXmkIgAJx8EOYKZW5kc3RyZWFtCmVuZG9i agoxOSAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUgMCBS ID4+ID4+CmVuZG9iagoyMCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAvWE9i amVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc1IDcyXQovUmVzb3Vy Y2VzIDIxIDAgUiAvR3JvdXAgPDwgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgMjggMCBSIC9JIHRydWUg L0sgZmFsc2UgPj4KL0xlbmd0aCA2OCA+PgpzdHJlYW0KeAErVAhUKFQwAEJzUwVzI4WiVIVwhTwF fediQ4XkYgUDPQMDAzNjSzNDczMgx8zY2MzA2EjBUKE4GVVTGlcgAH7TEI4KZW5kc3RyZWFtCmVu ZG9iagoyMSAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUg MCBSID4+ID4+CmVuZG9iagoyMiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAv WE9iamVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc2IDI0Nl0KL1Jl c291cmNlcyAyMyAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIDI4IDAgUiAvSSB0 cnVlIC9LIGZhbHNlID4+Ci9MZW5ndGggNzAgPj4Kc3RyZWFtCngBK1QIVChUMABCczMFIxMzhaJU hXCFPAV952JDheRiBQM9AwMDM2NLM0OgvIGembGxmYGxkYKhQnEyqi6uNIVAAJ62EPYKZW5kc3Ry ZWFtCmVuZG9iagoyMyAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAv Q3MxIDUgMCBSID4+ID4+CmVuZG9iagoyNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAv VHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc2IDc1 XQovUmVzb3VyY2VzIDI1IDAgUiAvR3JvdXAgPDwgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgMjggMCBS IC9JIHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA2OCA+PgpzdHJlYW0KeAErVAhUKFQwAEJzMwVz U4WiVIVwhTwFfediQ4XkYgUDPQMDAzNjSzNDoLSBnpmxsZmBsZGCoUJxMqqmNK5AAH/tEJYKZW5k c3RyZWFtCmVuZG9iagoyNSAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8 PCAvQ3MxIDUgMCBSID4+ID4+CmVuZG9iagoyOSAwIG9iago8PCAvTiAzIC9BbHRlcm5hdGUgL0Rl dmljZVJHQiAvTGVuZ3RoIDI2MTIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBnZZ3 VFPZFofPvTe90BIiICX0GnoJINI7SBUEUYlJgFAChoQmdkQFRhQRKVZkVMABR4ciY0UUC4OCYtcJ 8hBQxsFRREXl3YxrCe+tNfPemv3HWd/Z57fX2Wfvfde6AFD8ggTCdFgBgDShWBTu68FcEhPLxPcC GBABDlgBwOFmZgRH+EQC1Py9PZmZqEjGs/buLoBku9ssv1Amc9b/f5EiN0MkBgAKRdU2PH4mF+UC lFOzxRky/wTK9JUpMoYxMhahCaKsIuPEr2z2p+Yru8mYlybkoRpZzhm8NJ6Mu1DemiXho4wEoVyY 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 1FGgUbC+YGiz7+bGQrlCUeG9Lc5bDmzFbBVs7d1ms61q25ciXtH1YsviiuJPJdyS699ZfVf53cz2 hO29pfal+3fgdgh33N3puvNYmWJZXtnQruBdreXM8qLyt7tX7L5WYVtxYA9pj2SPtDKosr1Kr2pH 1afqpOqBGo+a5r3qe7ftndrH29e/321/0wGNA8UHPh4UHLx/yPdQa61BbcVh3OGsw8/rouq6v2d/ X39E7Ujxkc9HhUelx8KPddU71Nc3qDeUNsKNksax43HHb/3g9UN7E6vpUDOjufgEOCE58eLH+B/v ngw82XmKfarpJ/2f9rbQWopaodbc1om2pDZpe0x73+mA050dzh0tP5v/fPSM9pmas8pnS8+RzhWc mzmfd37yQsaF8YuJF4c6V3Q+urTk0p2usK7ey4GXr17xuXKp2737/FWXq2euOV07fZ19ve2G/Y3W Hruell/sfmnpte9tvelws/2W462OvgV95/pd+y/e9rp95Y7/nRsDiwb67i6+e/9e3D3pfd790Qep D14/zHo4/Wj9Y+zjoicKTyqeqj+t/dX412apvfTsoNdgz7OIZ4+GuEMv/5X5r0/DBc+pzytGtEbq R61Hz4z5jN16sfTF8MuMl9Pjhb8p/rb3ldGrn353+71nYsnE8GvR65k/St6ovjn61vZt52To5NN3 ae+mp4req74/9oH9oftj9MeR6exP+E+Vn40/d3wJ/PJ4Jm1m5t/3hPP7CmVuZHN0cmVhbQplbmRv YmoKNSAwIG9iagpbIC9JQ0NCYXNlZCAyOSAwIFIgXQplbmRvYmoKMzAgMCBvYmoKPDwgL04gMSAv QWx0ZXJuYXRlIC9EZXZpY2VHcmF5IC9MZW5ndGggMzM4NSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+ PgpzdHJlYW0KeAGlVwdcU1fbPzf3ZrDCnjLCRpYBZcuIzACyh+AiJoGEEWIgCIiLUqxg3eLAUdGi qEWrFYE6UYtW6satL9RSQanFWlxYfZ+bgMLb/t7v+35f7u9w/+c541n/89wDQtpbeFJpLgUhlCcp lIUncNKmpaWz6PcRAxkiTeSKNHn8AiknLi4apiBJvkRIvsf+Xt5EGCm57kLuNXbsf+xRBcICPsw6 Ba1EUMDPQwibjBDDhC+VFSKkMg3k1vMKpSQuA6yXk5QQDHgVzFEfXgtiZBEulAhlYj4rXMYrYYXz 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 2ragbY3bzbZXb3/7lfir2zvCdzTV2dXV7KTtLNr5666UXe1fe3/dUG9SX13/127J7q49CXvONng1 NOw13btyH2WffF/f/hn7r3wT8k1zo0vjjgMGB6oPooPyg0++zfj25qGoQ22HvQ83fmf73ZYjukeq mrCmkqaBo6KjXc1pzVdbIlvaWv1aj3zv+v3uY5bHao/rH195QvVExYkPJ0tPDp6Snuo/nXX6Udvs tntnpp25cTb+7KVzUefO/xD2w5l2TvvJ8/7nj13wvdDyo/ePRy96Xmzq8Og48pPHT0cueV5quux1 ufmKz5XWq5OvnrgWeO309ZDrP9zg3rjYGdN59Wbyzdu3Ztzqui243Xsn987zu0V3h+4thot91QOt BzUPTR/W/Wv8vw50eXYd7w7p7vg58ed7j/iPnv5S8Mu7nopfNX6teWzxuKHXvfdYX1jflSfTn/Q8 lT4d6q/8Tfu3Lc8cnn33e9DvHQPTBnqey55/+GP5C+MXu/+c9GfbYNzgw5d5L4deVb02fr3njfeb 9repbx8PzXtHf7fxr/F/tb6Pen//Q96HD/8GCQ/4YgplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2Jq ClsgL0lDQ0Jhc2VkIDMwIDAgUiBdCmVuZG9iagozMSAwIG9iago8PCAvTiAzIC9BbHRlcm5hdGUg L0RldmljZVJHQiAvTGVuZ3RoIDEwNzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB hVVbaBxVGP43c3ZXyDoPYpuaSjp4ayhJ2aSiCbXRvSSbbeN22Vy0QZDN7NmdaSY748xseqH4UARB BKOCT4L3t0KfhHipti+2iNJCiRIMouBD641CpS8S1u/M7M7uhmBn2TPf/P9/vv/833/ODFH0StGy jC6FaKnq2oVMUnn+2LwSXacueoC6qZe6i6pjJfL5KcIlYsW987rzA4WE5frg9v7O6C1P3SXuqESh e2A3S466BHySKPyaatkuUZTBPnLCtQR+Cvh+GwsEzgtc8XFJ4AUfYy5iZgopxLwOLKtaEf7ou8AD C232Shv214AIzM3wKrd1VRFa5G2zrBvcc/jDXdxtkf8Hl4waavauPRhjzuL0Edz7UfsrpWJa4EeA z6nF8ekGvrasz+Ua+B/LTRaAHyPq2lVbnE0A7wMeK9sTs8Dg6dK02mQTr5zWZp6D/T7YVxfNI2Lu TuBvqwu5o8CC5xfVSUFXeohIimg8K/rdB9xvmwURg/VIEyWeHgceAD6uu9kZYOSS3nGWp4Xd4zmt pcQ6kUv66njxsOhTL/A1bmREXsH/u+XmG3lZrGrkRC7wsGHuePWCh8VcbWYSduRl8y4a6s9lL5f1 iWwj/n3NnhR2MfeKZXh7FGtjt+xaQdSOXOEHeXVWaAjO8FjRHs80cInmQkXiZNICRpWqtEkKFShD SdwtsuEpk04GLBxeDgvHUzNmsCMm7/n9+GaEQhVv5g3M1JEh1fcJ1TBfoz/BpwVMCqXwVIOtQtvz +Cu42eAxWQ+LswP4H2RT7BAbYaOksKfZM2yMpWEdZQcD7nxbHWI9N5HF53kJGbkXN4eKL6Eyl4oY f0WESU7A0KHFSm+t39forP2irl5949blM1/uasWusdUXrscun2nTTAfXYhDRqdrRu2kf/i18I7yG cT28EXAo4Z/CG/itQ61Wl7aqLvolVE+gJsPrxBLq1VEdb6tusIOjnc9s5Wv0sclolqsrvb4KQgH+ au5Ojs4OtOLjP8b/iq/FP4h/HP9Delv6VLogfSZ9Ln1HinRRuiR9LX0jnZe+COK377m/d4Kee3UI m6hC7Mdmve2KYn/KSXm3/LCclvfIj8pTQZQi98hD8qS8F57dQXdau1np0EGnY9Csqdb2ucTJ0AMm aB26F33WWxk7zscsVqzTCXDaUF/ssyqdQmz7OWtUxPrYEMtu2dUjYq8H3P55aPajqURnDTwyHklH EqRE9kVGI0ORwwI3z3dkL3yjGPHWcvlJfFuIUqZ1ytYrmqsMx+NPKgl86riSrar7B5SiYSiey1Fs 7nB7mZf2k/hOinlEtwve9y+082rL5j5LdOhv8d5r2eZrROccop7HW7Z+vBt3vEe0+oRas5d9PgqF vidyygeGvedQLIl318/1+m28w6JvEW2+Wa//+2G9vvkR+DeILhr/Af8leAsKZW5kc3RyZWFtCmVu ZG9iagoyOCAwIG9iagpbIC9JQ0NCYXNlZCAzMSAwIFIgXQplbmRvYmoKMiAwIG9iago8PCAvVHlw ZSAvUGFnZXMgL01lZGlhQm94IFswIDAgMTE0NC4yMzEgMTYxOS4yMzFdIC9Db3VudCAxIC9LaWRz IFsgMSAwIFIgXQo+PgplbmRvYmoKMzIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIg MCBSIC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjI3IDAgb2JqClsgMSAwIFIgIC9YWVogMCAxNjE5 LjIzMSAwIF0KZW5kb2JqCjYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBl IC9CYXNlRm9udCAvQUFBQUFCK0hlbHZldGljYU5ldWUgL0ZvbnREZXNjcmlwdG9yCjMzIDAgUiAv RW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMTIyIC9X aWR0aHMgWyAyNzgKMCAwIDAgMCAxMDAwIDAgMCAyNTkgMjU5IDAgMCAwIDM4OSAyNzggMCA1NTYg NTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1Ngo1NTYgMjc4IDAgMCA2MDAgMCAwIDAgNjQ4 IDY4NSA3MjIgNzA0IDYxMSAwIDc1OSA3MjIgMCAwIDAgMCA4NzEgMCAwIDAgMCA2ODUKNjQ4IDU3 NCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MzcgNTkzIDUzNyA1OTMgNTM3IDI5NiA1NzQgNTU2 IDIyMiAyMjIgNTE5CjIyMiA4NTMgNTU2IDU3NCA1OTMgMCAzMzMgNTAwIDMxNSA1NTYgNTAwIDc1 OCAwIDUwMCA0ODAgXSA+PgplbmRvYmoKMzMgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9y IC9Gb250TmFtZSAvQUFBQUFCK0hlbHZldGljYU5ldWUgL0ZsYWdzIDMyIC9Gb250QkJveApbLTk1 MSAtNDgxIDE5ODcgMTA3N10gL0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA5NTIgL0Rlc2NlbnQgLTIx MyAvQ2FwSGVpZ2h0CjcxNCAvU3RlbVYgOTUgL0xlYWRpbmcgMjggL1hIZWlnaHQgNTE3IC9TdGVt SCA4MCAvQXZnV2lkdGggNDQ3IC9NYXhXaWR0aCAyMjI1Ci9Gb250RmlsZTIgMzQgMCBSID4+CmVu ZG9iagozNCAwIG9iago8PCAvTGVuZ3RoMSAxMzY3NiAvTGVuZ3RoIDc5ODUgL0ZpbHRlciAvRmxh dGVEZWNvZGUgPj4Kc3RyZWFtCngBzXt7dBvXeee9gycBEAQIgHg/B8AQDwIgwcGLIPgQSZGiTJGS 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 TZfFofnl+SFPIuv0DUqe3yvsSfX2JBv5xFDUiW2gI9jn9Pbou5xRb34s0WMXK9JQJWx3xaKesE1v ckuADaVSHhQ+Dh+FbPX26KmHnMg/GXClnMmNNZPsKL/Zzvd62qkXZa07FUg1VOrwoIt8L05h6DUf GOYIl5XNCiT9bHN52RrMRyckp9eqOyPoPvax+dbn41lP17zG1NvDJ+j1BDA1Dlm/htDsoTyEXqkl eOnw6nZ+1R0pbaIExrczve2spJORGGEnNARVfvEGkl2xg6RMLTrgpvyLv7Y7D6ke9kMFWzfUHIQf b/0+chD/QAFelfiz4uM74I+OX9S8pxOj6bUOYgTzOFBO04gOnvrCygeED64/h/GW+H/c+il+j3eD hb/C73twRrrz+1urk+o4FPU7Lcx669jK+FSlFMY/sXxRuG/trPDO408dOyucw1wr2BGAELw+1jqN OY03BxVM+9jjkGWG5qW3be1UZ0EBZbvw4qIO166O9uu3eqrEdGGzZcfy6G2OdgXFAvAtiC8WVFAs qKBYUEGxoIJiQQXF0qmgWFBBoZdGaH+kjlAY1NEhB851lKPHMa5Ryq3c3BMUM4GekNUcNPnELvHL d31E+ODqdHI42qPVLegMXvcRQaCFAQsKn/wl4NiFvFut6JKU6USQ3simNr1zhlM9Oaq8GNDHP9d6 ltdb7+DxiYl5/lhN0Tf1nW528zfpPYM3+aNNsgbj0dvd9BLWzrvc9Ca3D3PTm9uRXe9l01vZBci2 BEym2DR2GXtRkprDv9CZZ/vxL4sW8B7yIltiB/EmYxP7jyMoVq3gX+McY2vK/Jz1YnX0pwdgbIL+ JjOzp+976PTFcydPLJzGv7Ji/w/wQzk7CmVuZHN0cmVhbQplbmRvYmoKOSAwIG9iago8PCAvVHlw ZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9BQUFBQUUrSGVsdmV0aWNhTmV1 ZSAvRm9udERlc2NyaXB0b3IKMzUgMCBSIC9Ub1VuaWNvZGUgMzYgMCBSIC9GaXJzdENoYXIgMzMg L0xhc3RDaGFyIDM1IC9XaWR0aHMgWyA1NzcgMCAyNzggXQo+PgplbmRvYmoKMzYgMCBvYmoKPDwg L0xlbmd0aCAyNDEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZDNasQgFIX3PsVd TheDxtl0IYEyZSCL/tC0D2D0GoRGxZhF3r5XZzqFLg54f77D8fLz8DwEX4C/52hGLOB8sBnXuGWD MOHsA+skWG/KrWo9s+jEOMHjvhZchuAiKMUA+Acha8k7HJ5snPCh9t6yxezDDIev89g645bSNy4Y CgjW92DRkd2LTq96QeANPQ6W5r7sR6L+Nj73hECJiOiukUy0uCZtMOswI1NC9Opy6RkG+290ugKT u23KrldVbiKGKSmprBLysZYnepKEELq5/XLVuB7gHthsOVPWdqX2jRrPB7wfMsVU4zT9ANNYdrkK ZW5kc3RyZWFtCmVuZG9iagozNSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnRO YW1lIC9BQUFBQUUrSGVsdmV0aWNhTmV1ZSAvRmxhZ3MgNCAvRm9udEJCb3gKWy05NTEgLTQ4MSAx OTg3IDEwNzddIC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgOTUyIC9EZXNjZW50IC0yMTMgL0NhcEhl aWdodAo3MTQgL1N0ZW1WIDk1IC9MZWFkaW5nIDI4IC9YSGVpZ2h0IDUxNyAvU3RlbUggODAgL0F2 Z1dpZHRoIDQ0NyAvTWF4V2lkdGggMjIyNQovRm9udEZpbGUyIDM3IDAgUiA+PgplbmRvYmoKMzcg MCBvYmoKPDwgL0xlbmd0aDEgMjI2NCAvTGVuZ3RoIDExMTEgL0ZpbHRlciAvRmxhdGVEZWNvZGUg Pj4Kc3RyZWFtCngBrVZNTxtXFL1vZvwBdouHD+MyEGYwIMBO7eKQJlGV2qltmVipaGmUmUppYoGD qSBBqRNRqZW86aJedFNlQdUf0E2ryaYyziJIidKqSiTUNbtu+gOo1EWAnjczmdoJjVCVgTv33vPu uz7vaHzH1Zu3yhSkGomUXlgtrZF1ef6GO7Zwu6raOfsBPnJtbWnVybeIpImllc+v2bl3lEgoVMql RTunp/AnKwDsnJ2AH62sVtft3PMnfGjlxoKz7o0g71wtrTufTzvI1eul1bJd7zfhJ9ZufFZ18hX4 7NrNslPPdOQX7LWWO0MsUZwEC7Pvx8AU3C2Er8Pkn+48utL1zl9MFjkv+vm9q9zRH49+/Pbp7P6w 74E0g7TD6WPtERsHMRr038V6zfeAd2m7pAb1xlgTOwQKx9h9yHuW3qYYDVMPCgdjdB8r59uhJshK pMQaxNTcl8uRbIM6kWAXUS//L9LHCOWDMxQQPBQUfiMZy/Figzrm9LuMfWM02MFXjSwNbYKteOWT 42gVV9XcctZkV5EIcQBTGiIxruZNcSz/oR411Lpan12sq3m1Ulo0pTHLY6FcNxKqSfP6Mu4f6ZqZ NhQ3LBvGGfSReB9sQXndQIdPnQ7wFpTYQ5EnXlRNcXxO/0A3a1nFTGcNRdPUnLk1p5tbWUUzDFR5 XaZgzI9vc/aBs3cK6367yzx6oIVRr/OeyIRxzdyq15U6TmIhUa3ByAFwUl4jjuUaLD2n86V0VFM4 ENWiGngYWfTuiBfn9RyYaJxJ5wuSUrZF0oBLFLVB0AtYkr72iiR9/SiSdh1J0pDLtE1SGZxDXNLu wyWNvkRQV+H0IQrXbIVrhyjc06Zw78sV7nN5g2QYbPsshftfkcKRoyj8xpEUHnCZtimsgPMAV3jQ VTitmOQ+tFC49twjS//5DP9fyYdaJGe7lGJhzL4Mpr19MWdqBclLIUAahpQAezbLClRgowyTHWiK GHss/IpVH5X5bMPXMYHZA/OH8P3chiU2+fZdoKFNzDEedewQBk5Ox5xIKBzsPGs4gIcDHpI4IGED PgUbPIgwM3eTbzFN1npkTWYb+09YKrW/JHy3d0fY2Dst/AKGOINwTvidYizN2dyziIsUQTQJknhZ gaEIZj4w475rB9MPvg85wfc7fhj4JPIx5NwfdxkHOMFAC2OFA0oL4OWAl/zumcIcCLcA4xwYbwEE DuD9426Z4sCUDYy7MjCwkWCe7SZ1oT4gd5/GmMF6N8TJeOhrBBs8uZyRyY8gApuAnYIVYDqsAluH +S838d551mWE98VJJ+AntyF0VMbfTGrmxMnUdLi/700WHfEOsRfyPlSxLx5evHRpNh8cDgYGAsMj D/8NFxcvsuZ+njWLF97NSNJ5SYyMFFrC4n4eFKzr4HuatqPn7hJerQITmeS7dX05mUxmuM+fSya5 n05On7LqGY5kP6Ne/lrM8CsXK5RXbperywul98v4RUP/AIAhCrgKZW5kc3RyZWFtCmVuZG9iago3 IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FBQUFB QytIZWx2ZXRpY2FOZXVlLUJvbGQgL0ZvbnREZXNjcmlwdG9yCjM4IDAgUiAvRW5jb2RpbmcgL01h Y1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMTIyIC9XaWR0aHMgWyAyNzgK MCAwIDAgMCAxMDAwIDAgMCAyOTYgMjk2IDAgMCAwIDQwNyAwIDAgNTU2IDU1NiA1NTYgMCAwIDAg MCAwIDU1NiAwIDAgMCAwIDYwMAowIDAgMCAwIDcwNCA3NDEgNzQxIDY0OCAwIDc1OSAwIDAgMCAw IDAgOTA3IDAgMCA2NjcgMCAwIDAgNjExIDc0MSAwIDk0NCAwCjAgMCAwIDAgMCAwIDAgMCA1NzQg NjExIDU3NCA2MTEgNTc0IDMzMyA2MTEgNTkzIDI1OCAwIDU3NCAyNTggOTA2IDU5MyA2MTEKNjEx IDAgMzg5IDUzNyAzNTIgNTkzIDAgODE0IDAgNTE5IDUxOSBdID4+CmVuZG9iagozOCAwIG9iago8 PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9BQUFBQUMrSGVsdmV0aWNhTmV1ZS1C b2xkIC9GbGFncyAzMiAvRm9udEJCb3gKWy0xMDE4IC00ODEgMTQzNyAxMTQxXSAvSXRhbGljQW5n bGUgMCAvQXNjZW50IDk3NSAvRGVzY2VudCAtMjE3IC9DYXBIZWlnaHQKNzE0IC9TdGVtViAxNTcg L0xlYWRpbmcgMjkgL1hIZWlnaHQgNTE3IC9TdGVtSCAxMzIgL0F2Z1dpZHRoIDQ3OCAvTWF4V2lk dGgKMTUwMCAvRm9udEZpbGUyIDM5IDAgUiA+PgplbmRvYmoKMzkgMCBvYmoKPDwgL0xlbmd0aDEg MTA3NTIgL0xlbmd0aCA2MzQ1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa1aCXAb 13l+b0EABAgsAOIkjiWAJXFfxEUSpEiKp0Rd1EGJlCzrlixLcmzXkm01btxGjmw5ZlNrxjlsJU2c OE6bjJnDDsNJbE2SyaTuTKNmnNSNlU7HiR3n6EzOaRNbYL9/d0FRPhKnNTRP+3ax+Pf/v//7j/eW t9168hCzsLuZjg0dOLHvZqZ8jHtx+JcDp24LK6dM2IZjz+Gbj5zQzt/PWFPiyPE7D6vnzfcyFn7u hkP7Dqrn7DUcqzfggnrOyzh23HDitjvUc8OXcPzs8Xcd0L5vLuB85sS+O7Tns8s4D9+078Qh9f7k czhmbn7XX9ymnV+H4x0333pIu5/P4PxV9bsV/3PM02wb0yvXBOV/iTEBuitz+h6jsvbAPXts/b/j bbpX6PpTI/+zno4/+tbnzr9mqLfrLzSdxH0m/FD94De67yzFWUh/Gd/frr9AUq75pBeYK80XWROz M0+aP8McLM7amZ+1AmzGgulnMMuwzmuuOFnHNfewZ5jICrgpzLzLP7OxMmxaecXOUtcIYovMhQcH oIM1PHbXUd/oAjOncZXDAAtppVMnT2OSgKg26NLCWtNP41cdLISHOZgZ5+xp/KQE6RFcEpUbBJxF WYA5oQ9uWAS0TcyBJ7HGk6Cci51g97AH2COw1M7WLYlML4jsWcHB8NVt7Bg7w+bYe9gFfO1YmmRW Qc9E4VnmgJTMugVmmpr5POdzswt86Z6FURb6CpDX7bk+u8B4JhweOzo6z/fiRMjgQiqCmS4THp/X dY5vmZFnw+fC59YePBceD9+w7+B8U6dyxBeHzs3mw/Ns68xR/L9tJjI/NBtYnh6ana1BThPJwU9w +7lZSLhRk4Cjcil/BTfpM+vC87rY1Mzmmfm7RwPzQ6OzgUgkPDZ/cWpm/uJoIDI7i7sMy5pCY3KB qrMROhtS+L5ZlbIVMiBi9tw5kokzIRaZv3juXOAcLFGuyJEFzrQLsJTu0XWOLfChqRn6akiOBOiC HJEj0GN2FLJNmXVbZ8agSYQ0Mb8BUja6AtKWZUVxrwXqtSiQWt8hSMW3A6ntbUFqX9b0Gkgd0NlO kLa+OaTyHwF0GeGhN0H4bhXhu98EYec1CLv+OMLuZb2hpAfauhWEve8Qwr63g3Db20LYv6zpNQgH oLOfEA4uIzwUmGfLpAXCd7+OsuwtOfx/hTy0AnL+W+bgHuTgV9g6nmBlnlj6A/8gqwgZ5saY1I6i MMMKwkU2JrzEYhhjwr0Y/81iuvtxfBjjAHLPS2xYN890wgAL47yKYwzHMI4hvgG14gDON7MqF1gN 10boqDuHOa4p3+E3/B7M23D/Xmag67ocjsalVwUjg5bIoWp1sDADu4jzMNulXcGJVlN0SKPqR61V BmZkzdoVOpiW5+blWQtysBV5mTHb8jVKuPRBqlU+rcjUlHXf+HFDNy/zIfn7kc+DSPuMSSg/YWT7 KJNx1oGqEkPZYigSjCWR+dWPh3n4Tv4Y/7XQJDwuXNJtadrfdEY/rP+CwW9Yb3jeGDU+aFww/ro5 0/yIacD0D+Yh80PmV1o+0fJLi2SZshy3/MLaY31ePCV+wdZju9f2XbvFPmy/ETg4mI6/KFB1MgK0 iCPidEQc/Gz9Fe7bVc8Le+pM2HVlrfBlhqKzbunnugvCd2FdHAVnkG3lDy+ing4xHWpRxr7IJllV mU9iTgDQdYa5hMpGc8m+Ws9+gJOfYQi7VwcAsRlgmGGomfVirMWYxTiKcSfGfRgfxvgMxlcw/gnD uluR4oIUV0OKC1JckOKCFBekuCDFBSkuSHFBigtSXJDighQXpLggZRH3DzHJ0dq7CHPUGVQywCQP RgyjijGOsR3jMMYpjPdhPITxGMZTGN/CUFT6HiYvYSiGGQCGByOmgDIJKZOQMgkpk5AyCSmTkDIJ KZOQMgkpqMlk2PcweQlD2L3Api+zBZbIL7BkfhF8a1NAtAHQTaxLmW/CXIZnCFwZ8z42psz77IWu zvKAUCpKgtslCnI0J8RdEs4HhEo5h3NRcPIS1/+Je4QndWLA52mz6HTWgNfntwiHHfHBXGYo6bLH B/KZoZRrQ33/Dv7IlYt/8sanHKkOX6AzabMnO/3+zpQjuaYihcrjSRzbpfI4//WVNuEnlxyZmD+Y SNvscdnnkxOtyYlSKFgcSyYnu8Pt1TUU2eWldTwvvABE4EMrHEbmW+2K76xA3QrUrfCdFahbgboV qFuBuhWoW4G6FahbgboVqFsbqFuBuhWoA3ETEGf5QheXRZ3b5fGWcrxSrvL87ZGuiGNs8FRvqSy8 ULj19F/2nPrxkRMv33HqJYpRvvSHpXXst4pe+xahlVXRy6By3gq2kniF81a40gr2WcFWK9hqBVut YKsVbLWCrVaw1Qq2WsFWK9hKSi4wB7GhoZuxNKCrlGNxWeJul8FwKlKM2McGT3aXK0/mb70Tmr18 5MQrd5z6EeFVYc/x/XwjYrwFzSNd0aULXU53pFLhWb7x9GnkAffSbwQv+kEvQuGfEc2AIIuRsS8w 3yUMguSygjADwgwIY62BMY6xHYPWJKcw3ofxEMZjGE9hfAtD4zUDwki9sCQLqdHLC0y8rESyCGzE BjYisBGBjQhsRGAjAhsR2IjARgQ2IrARgY0IbERgI0I8rHIilxINnIiCOHIZzeOIAmd5oAlR0PRW UfAoN4ht8VAo4bcaeZM7n0nn3E1zyfHd5cruiWRyYnelvHs8yfe1lqqVlN+fqlRLrdL0pp6eTdPS 0Qe2dXRse+Do4fvpeD+M4whcxu8Vvoo0JVPvjyYainA7PMcAIUccU42hi0ZoF3GAYnF3ycHvvcUQ 6x7rnBe+mqhGrPxYvQZxEOAGYuSXGDtPqYBkogYrMnEOHEPA0aTiaAKOWC+pHDMBRxNwNAFHE3A0 AUcTcDQBRxNwNAFHE3A0AUcTcDQpHAtBogv+duFJHjzJhewIdD3Alx7qAbpRLeCihG5JSSAeQteI YIlUIgP6RoLpvLfFn27P9YXSZW92c78sCPUn/aNrJnqi8eEdhcF9Q2H+RLA3H+othYuJiL29f2Ln qtMd1Xyhb32ltKVHSm84QhjomAhuSsDAhqw3whFbRdCU1ClCnQSgpnlCjf8idC0CrSLYWQQ7i2Bn Eewsgp1FsLMIdhbBziLYWQQ7iw12FsHOIsBbRDH3siLsRoursv4dqVm0PlTlLrIadE4oT6jllQio wXO1hudq8FwNnqvBczV4rgbP1eC5GjxXg+dq8FwNnqvBczV4rqZ4LnJ5kXUuyx27DK8NosMgaAYB U1arElnMrcgIdN2KuQtzq1ICO7WZEjNa5TDI0VgcGdAtIss0ykcsXhlAQtSqSLm6ssh81iHF3ZGk t7k/mx7663JpcCy7bk+p6/rJ7OhgqeTr3rk6vW0kdcuacls64myNpP1tuYiL130dPqtLiojZfL5W 3igKtp0jvVuqbYHqlp7hXaLg2Fj2r+5N+Apr6h+p9tqlZJs/0+5wtGeIHwJW69cJSX5B6WECsPtq iKhLZbJVTxWxEnHTEJJ1I/993XjdsWPfP3ZM5dgYBD0MjpmRRxIcy3WOZEk/5ADJpyUUn5rLjfCW seEtI7xlhLeM8JYR3jLCW0Z4ywhvGeEtI7xlhLeM8JYR3jLCW1S0jcynMEBWGSBDptyQKUOmDJky ZMqQKUOmDJkyZMqQKUOmDJkyZMqQKSsMaAUD3MtyOSJZQiS34pgiNkjoXMkgCQa1wDyat2DO0H/S nBo1N+YMaoEDFdWtBpk7IkrXEItrXtfhKyXi5RfPu+NSazVV/ybfWdg1kVo9jJTWv630xX8sDTjD KS//zKeNreG2bIJHrlR9xU3VkT1O75pqcTTZemX+m/nuYIfbBE1iS78UnkHdjLMTpKaKO3pF6sUk xLOEeJYQzxLiWUI8S4hnCfEsIZ4lxLOEeJYQzxLiWWrEs4R4lgAoLG9DSJOFbbDQALBobgAfeCmn o06oQe1uWeTUKVW0rkiIfMhY3Xq0b8t7dxYKO9+7ZfimLUXDh0yb11Qmc253brISqqSC/AcDe1dH a4fvm9p49mBvYv3xkTUzydHpbH5mLOmMZomfxK2vgVsWaHLXAgsoWVztDshLAQwXsrhRzeL/b3bB YlqdNHzaBg1U6wtd3Y7lYG24FWH84s21TQW3VByK1v+Nl7fcuTnRteP2sTP865GBHdW+LSWPMH6l 2r33zMbZMzMZ+IvsOQB7WlhpEXVDrUcmWNF0Cc9uUrhFOqjFj3jVrGWfZqoZDlQJ7d+YINXfw3fW H+N3Cs9eqZ554vSHz+CHGie+Bk4k2MfV9lenlR2dQln0fEr0JPHUyCUMZGp0E8QYEYwRwRgRjBHB GBGMEcEYEYwRwRgRjBHBGBGMEcEYaiCUvlsEY6gNgQ0m/J4wM+FhQa32BTFv0uxoUpSIMZMSK53e kiPiLq0kDzWNK7hVFdbaD9af+6hxemODO71T4kOG6tYj3Q12lQ9v3sz/5uS6TQ329Pevun4o0mBW WsUF2OvGlVq4gxZtKvaESYvWVlBI0/K0Baqh6+AARo+h9o2IeJCPPERRTn5pzERtRv4pOUpO/MNR 1sm6sfPCE3c+IZz/4UeFT5OT+O/qLfwPdYPwbN3Nf97g918p/A6w+9CRvI7f1FN43kF+U05eYLZL sE7Eo6zQnHxF1YxW4irvr2YwrH44mdRY+rx4OlCMeb2xYqD+0wufGrm+LxDou36En/5+szcVjaa8 zXwKRrL40NZ0ZstQHNKtMHI77DOy+ErMFXQpo6jdpgFKGTF0lzQMUWl+dOH7V76M6FkUxs8QsTkb Rq57FLKcDKrTVgKpa4HqtE9Mc6VXJK9ZcIOB1ue4qGQrh+xwoSAjP9HMUypWhUcvDG0r9IbNFz72 d3/7CS7yr9ZHp9YF0j0hmj34/gfwSEIHLPmcwpnKWzIC92mMaMyIRHQNKd1JPFD+ES+cwn9d/MhJ 4fT5dwu3XPjax24XELt1F/9F3c9fBnIv1/0wJYyezSc4lYU1DHBhwbFah0oNxu3GpBtpWJsMYcJw qcr6MHMO6JQUBQO9co7Hl4PKEFc6DoPRK+qo1Wy0IwVdZnQ6HZ8aTjWbP9Ck59HrCp1DhUB71+DQ QCHIbW0RZ6rQtGgKtEcd9navKPrCjlTOo+eHi8MJR0u4N1//jTxkt7RZ5WBrrJbI9EYdZoPF6/EG bPqO1NFmk6FJpzM7/C6n32YIxhP0KkFgVdg3qPgxxb5B66VFtA5uxVlmkIDWTWFwHmsm6h4Zqjt+ pXbmDGWAtnYYqjtDdWeo7gzVnaG6M1R3hurOUN0ZqjtDdacFFLaUIdF7CQNP8uFJYbhGvZrAVdok oDtSmKfy8DI18HrsMRF79KBXp1YROjH34bpe8XYSVzsVH3Ntl6BR+xAylZLEl6MmajDKDv55UcqG 23OSKEq59nBWEuv3nBW8O3vj61fFYqvWxwuzfoEL4f5cIJDrD0fUI//0lepwuiM8fGRi4shwuDPB lW03qvu/ETrAkSi7hdKsWveDat0PIosHkYWD4EUQWTyILB5EFg8iiweRxYPI4kFk8SCyeBBZPNjI 4kFk8aCaxb1aNvDCZgN22NRIIqe8vvZXry39/KH7damR6dzg/lE5NrqvduSMeJ+xuxTJBSyWUC66 i28qru3ypdYd6a/tG48fP1LolfK1YKivC92Txv2cxo0nFlgarvBgI48e7yEfYTD4KY1jFMco+U6t XWbcaIbVZlhthtVmWG2G1WZYbYbVZlhthtVmWG2G1dpm2PcweQmD1tYkvbFip7kfT/ATI4g4evRY DUaENEaEgI4f89Cb8sCLxansQCRebZSq3fxTlmBejuTbRWuoIMu5kEU4Oyf4tuZ6t/eGQr0ztdLm Nt4U7s8HQ/l+KdyXCwazfS8OI028FotnJ/eVqwc3ZDuxtSmwkMaBZrBgkAqvumtI3QSnboJelJHG YWhpgxdpTjtgV5fW1NfRMpj2ayh5eIyRqro2UXOE5tsYf/AnvCWQjZZLP+Qnm4KD+4f79o3HOkf3 r5p5t3SXcSDdP8RrtljU2/OB/pu2l1JrD9b6D66JT+32pQfgVjyR/tsAv3rYnpV1AOkZGDMo4aSa RGt8O5xBmtqhKe0D09yFG+gmHW6muR5HClkLjhZQwI65FXMrdp6UGlyRsetUKnorBL4hxGX39Nz+ /W2hQFtrzLlj+zR/rI4d4T3t4YDuRq6bGUvsAZ6xpVVCHDHlxLLwXxdYH5Rxadyjh/ZhhPGQMB6o Vzmnhz16cE4PzunBOT04pwfn9OCcHpzTg3N6cE4PzunBOX0j0vTgnH6ZczZIJb55tONKDqoZCt7M 4hmEBa1CAxpGAcwZ8hNdp17Rh+sBLTt1Kn3KAqtCcAEe7lzRndOeg9chu1/HzZLbo6xaZQlcGBB4 PJIJtFhDaUnOBS02KffiWcG/oVTd2hNqq26r5ae9Au/uj9XMD+jSqzfFZm/scZwOZrqDoUrS58/0 hoOlhG+W/3gsG0tN7C5W9kwk48nR7jXticxgwlkYmyJeVEHkgMKLzequCZlCWyUWrQW2EC4YArCh o7rDAq6oe0LgAdzk0NjtwA/dVPmVeCQmEAs8bpoQrykRV+fKtVJizpFa25vYFtApbZlt09jgUP0y Hyhs6m5PZjm6FvChhv+/Dd1of797ZZcBbaBJEzSibooYTEcT7THqoQ2xnczg1LFX5BC1UN+emxOm T56cuvIqXh7jjhE8AEGtrgNatB+0QIqgxgFJIhtX9plmktywrNLtLem6ZaNjZK577rP//o3Hv0iW fKHyEz7x9CJ/Dz3jqv6Ba2NOT5pSn0Q7tYRSbY5+DHXwUX6nm0IcZNldRDvVGKKdXeu5KDRDSHxk JHWoSmgqeyhWZoeC6tV84ykinkQLt4TWZtPWWzOG+5K6DRe9RDW2WdnWoZci6kzVrLHJTh7U9uSv OlMJbqNcqc152iPmqGwT5ozuTkmSW5vmgsXxZHWT1725q7QpKAj6K6/yTCzfZvLGst76f/CwL9/p dUVz/voLfGdxIuMqRwuxTGL8KiediO0Nf5qTAowjjvoa1v6ZfKys4GN2O/hImr6Oj9i5Jz5SzV+l 5Kc47TOrLzdUCNWogCfesX1mWh1K6MJQXd+RPTxksJVvYa6+eYGfG559i7ctX7KECh0dXSE0EF0d HYWQZS42vn/VqgPjsdj4gVWr9o/HuNDenwuFcv3t7X35YDDf1z5wcCIWmzg4MHBoIh6fOKTgV11a J4wq+KXYM2rf6dX6Ti+spaJCQdfoP22q5Tb0n7ZG/0km2NB/2tB/2tB/2tB/2tB/2tB/2tB/2tB/ 2tB/2tB/2tB/2pT+k6SreZzem7mZV4kRurrcc7oRH7QFSSFFfSbT+k81qwe0NWcSd6g95+uz+Zv1 nBXeFy2ErJZQXo7mJTrWn58T/JsLvdO9wWBtZlVhyi/sDmb729F1htButLf3Z4P88Svjv4vFM5N7 y92H1udiqWEtJvh7gZ2bdVGKVXOCGxZQXhaoR6LaLWoRLsICF+bicrZSXOzxVmLUCyFkq3NipBq3 Bs0OMVDMRM1KhP5U7s/6dcIZvT2U9O3FQzj1OPw1PLeX9rfogi5N+1zqCwsJz6f804Lck8B3lBzV uHCDufRNAdoV4FO6s4928ipapahAQ1lLYTK+pBUow49oTv1Qt1YDaa82nsPrIko+1+xMeOntERbI KKufPCukR7ZnM9PDyWCur12qZYN2b9AS69GdbUoObEqlpobi9MX66dZAxIZ9P+fj5bFUqyM1Vuro iriMRovN57Q7zbpQsjAYs9s6h4rRfLvTaA+HnW02o9kdUUw3LL3Ktwh/DwpufWM1alQhT6OPor94 IjbRW52rey+w8pKasKjpsAEaPSz20rq7gn4AHauyOKx2V2j1GKtgKfOzue3b/dm+iDvTavZYOnw3 CPqHH95T/0684DcJupsEwdfB2R7AT+u6AMqbkjfN2prEjMdfXZ+rlZMSvxuPpqp5Td68umYnkqGq K/zBmx5l9Q5tMKGt9Gp3yS0ErhZyNXHWf0VlnHfUv44yLiWya/BgA5iagE42eF6teW/c0QGt8Byq tI3ZH1m/3/Pog3uEmXPbhT0PffL8jHCdoK9/gl9f/zjfg7y9q/4pvMt8FXmG/kbMDZqqL0KcZCxh jRhpQn+p7g3o1b0BJzaEDUZDLO6mNWOVV54/f4tw8oNPGgJBd8rlSXvWbhkSxuof5fvrAZvDG9Px JuGkoEPnBPvwoon/Cs8yYXVyNUAMaC7J9wqrATL1zeTnZvi5m940cWywlDz8hfp/cmt9/e+PHTvG 89jOFyATn6VH8DrnzT60kaYDTvSXHHbY4YKNARZG5qK/u0igWS7g7++6WQ96j1E2ho54gq1Bmpxk 69h6thHv3qfYZraFbWXT6JR3sBm2k13HdkMqx5/0IYDxMdASfzV9RtJrDh0/dei2owf2bTx08lB2 +F3HD7L/BSh49r4KZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0 eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FBQUFBRCtIZWx2ZXRpY2FOZXVlLUJvbGQgL0ZvbnRE ZXNjcmlwdG9yCjQwIDAgUiAvVG9Vbmljb2RlIDQxIDAgUiAvRmlyc3RDaGFyIDMzIC9MYXN0Q2hh ciAzMyAvV2lkdGhzIFsgNjM2IF0gPj4KZW5kb2JqCjQxIDAgb2JqCjw8IC9MZW5ndGggMjIzIC9G aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AV2QvW7EIBCEe55iy0txwr4aIUUXneQiP4qT B8CwWEjxgjAu/PZZiHORUmzBzHyrYeV1eBooFJBvOdoRC/hALuMat2wRJpwDif4CLthyvJpmF5OE ZHjc14LLQD6CUgJAvjOylrzD6dHFCR+q9pod5kAznD6vY1PGLaUvXJAKdEJrcOh53bNJL2ZBkA09 D479UPYzU3+Jjz0hcCMm+p9KNjpck7GYDc0oVNdpdbtpgeT+WQcw+SN56bWq4ydmav7XqWj94r2S 3XLmNu0OrWgtEAjvp0ox1QVtvgGNgHB4CmVuZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKPDwgL1R5 cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQUFBQUFEK0hlbHZldGljYU5ldWUtQm9sZCAv RmxhZ3MgNCAvRm9udEJCb3gKWy0xMDE4IC00ODEgMTQzNyAxMTQxXSAvSXRhbGljQW5nbGUgMCAv QXNjZW50IDk3NSAvRGVzY2VudCAtMjE3IC9DYXBIZWlnaHQKNzE0IC9TdGVtViAxNTcgL0xlYWRp bmcgMjkgL1hIZWlnaHQgNTE3IC9TdGVtSCAxMzIgL0F2Z1dpZHRoIDQ3OCAvTWF4V2lkdGgKMTUw MCAvRm9udEZpbGUyIDQyIDAgUiA+PgplbmRvYmoKNDIgMCBvYmoKPDwgL0xlbmd0aDEgMjAxMiAv TGVuZ3RoIDk4OCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtVc1v22QYf147cdev NG76GS/UXtquNJlare2EEIcwnIpShALdhr1JhCz11oxmrUY6hjREDquQLOiF6yqxy25InoQ2U6G2 Jw67cOWwA4LL/gCQkLYl/F47mKaUqUJ7I7/P9/P+3p+tJ5VraxZ1UJVEyhTLhVXylvQDRLx4vaL6 tnAG8pVLq5fLDftLotDY5eVPL/m29AvkN0tWYdG36SnkqSU4fJtNQw4vlSs3fFv6DvLI8kqxEZd+ hi2VCzca59Mj2OrVQtny81scyPTqyseVhl2FnFy9ZjXymQH7iR/bszPoAo3j4cvfX+JKaMzz8Die mbnier7rtT/YoPiY+++/8efbXP7247dfP5VqQ+HN0BryWhsdvBrxp/pxSoQfIf5JeJN3aVqCSz0p tkUhilJfiu2QTMdpiOLUDbKJjqZ2oKVppMkTo+GmHNqhCE0iSaX+oKyLpinV5Inihnsb0Rb14GAl 5VKnmv2sNKC71JaCl+ECHRyV6CvbUMbQahBY2qk7tY2qYUrgMJnaYNM2SqbQXYMr4iVwNo+RQjHg QcIWhVEj4yT6+ySA66EyrdNXdBs3jdJ8PUJhIUIPBZkQqtBHdIs26HPaRFiuv0WdQpgiwkOS0SU9 71JrzrjH2Ibpsvq6q1PiezAv5j844RJLq2q2pDvsQxhCGo5xDZqYVmcdcWT2PSNpqrZqzy3a6qy6 VFh0QiOeRMCyzQnVoQWjhP2MoTkZUwlUyzRfRZ8Q74MSpNsmOlxpdID0XBPPkBROz6uOOJoz3jWc qq44Gd1UNE3NOrs5w9nVFc00kSUFSIGYvwIfcwswS+OIH/G7LKAHWpi2zXvCEkY1Z9e2FRs38TxJ zWXUcOCmPEccyboskzN4KJPUFO5IakkNOEwdvVvT8wtGFkg0jqTtX5SSvofS9gAocjsAr92jtPMF URo5DKVdh6I0GiBtolQG5iintPtgSpPPITRgOHMAw1Wf4eoBDMeaGO55PsO9AW6A7APaXo/h/hfE 8MBhGB48FMPxAGkTwwowxznDRwOGM4pDwUcLhqv7Pln6z2/4/1Ke2EM5+51k4SamB5/E/uTtIMmb kFrgIeqjHDIEDDOR/SrwqdeCAk3WYrImsy9qj9nAhdqEkK+RcOHZnPDAm+souIlZ9DKMpIzfzNTM 9Kmpk339vaPJY1KC7Td7kcNu3dk4e/bc+7HR7ng8MXgn0C5e3GB3a+fZ3fxY1hDZFVFRh/7R8rXz Hj5+D6rfppOesn/DvxYTWtaulmZPT056QYZx7d9awuim1/nSU29ay9etSqlYeMdas06cXllepL8A h8LANgplbmRzdHJlYW0KZW5kb2JqCjQzIDAgb2JqCjw8IC9UaXRsZSAocmVjb3Zlcmllcy1iZWNu aG1hcmstdjA0KSAvUHJvZHVjZXIgKG1hY09TIFZlcnNpb24gMTUuNy4zIFwoQnVpbGQgMjRHNDE5 XCkgUXVhcnR6IFBERkNvbnRleHQpCi9DcmVhdG9yIChOdW1iZXJzKSAvQ3JlYXRpb25EYXRlIChE OjIwMjYwNjIzMTMxNDQzWjAwJzAwJykgL01vZERhdGUgKEQ6MjAyNjA2MjMxMzE0NDNaMDAnMDAn KQo+PgplbmRvYmoKeHJlZgowIDQ0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwNDcyNyAwMDAw MCBuIAowMDAwMDE1Mzc1IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwNDg0MSAw MDAwMCBuIAowMDAwMDEwNjA1IDAwMDAwIG4gCjAwMDAwMTU1NzcgMDAwMDAgbiAKMDAwMDAyNjMz MyAwMDAwMCBuIAowMDAwMDMzNDg4IDAwMDAwIG4gCjAwMDAwMjQzODEgMDAwMDAgbiAKMDAwMDAw NTA5NCAwMDAwMCBuIAowMDAwMDA1Mzc5IDAwMDAwIG4gCjAwMDAwMDU0NDggMDAwMDAgbiAKMDAw MDAwNTczMSAwMDAwMCBuIAowMDAwMDA1ODAwIDAwMDAwIG4gCjAwMDAwMDYwODUgMDAwMDAgbiAK MDAwMDAwNjE1NCAwMDAwMCBuIAowMDAwMDA2NDM3IDAwMDAwIG4gCjAwMDAwMDY1MDYgMDAwMDAg biAKMDAwMDAwNjc4NSAwMDAwMCBuIAowMDAwMDA2ODU0IDAwMDAwIG4gCjAwMDAwMDcxMzAgMDAw MDAgbiAKMDAwMDAwNzE5OSAwMDAwMCBuIAowMDAwMDA3NDc4IDAwMDAwIG4gCjAwMDAwMDc1NDcg MDAwMDAgbiAKMDAwMDAwNzgyMyAwMDAwMCBuIAowMDAwMDE0MTI4IDAwMDAwIG4gCjAwMDAwMTU1 MzIgMDAwMDAgbiAKMDAwMDAxNTMzOCAwMDAwMCBuIAowMDAwMDA3ODkyIDAwMDAwIG4gCjAwMDAw MTA2NDEgMDAwMDAgbiAKMDAwMDAxNDE2NSAwMDAwMCBuIAowMDAwMDE1NDY4IDAwMDAwIG4gCjAw MDAwMTYwNDEgMDAwMDAgbiAKMDAwMDAxNjMwNyAwMDAwMCBuIAowMDAwMDI0ODY5IDAwMDAwIG4g CjAwMDAwMjQ1NTUgMDAwMDAgbiAKMDAwMDAyNTEzNCAwMDAwMCBuIAowMDAwMDI2NzgwIDAwMDAw IG4gCjAwMDAwMjcwNTQgMDAwMDAgbiAKMDAwMDAzMzk1NyAwMDAwMCBuIAowMDAwMDMzNjYxIDAw MDAwIG4gCjAwMDAwMzQyMzAgMDAwMDAgbiAKMDAwMDAzNTMwNSAwMDAwMCBuIAp0cmFpbGVyCjw8 IC9TaXplIDQ0IC9Sb290IDMyIDAgUiAvSW5mbyA0MyAwIFIgL0lEIFsgPDRmYTcwN2M5Y2U4N2Nk Yjg0ZjcwOGVhNTljOTgzMDk4Pgo8NGZhNzA3YzljZTg3Y2RiODRmNzA4ZWE1OWM5ODMwOTg+IF0g Pj4Kc3RhcnR4cmVmCjM1NTIzCiUlRU9GCg== --000000000000ce41dd06563dfc9a--