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 1vlNnu-00Al47-0V for pgpool-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 08:55:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vlNns-007M1X-36 for pgpool-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 08:55:05 +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 1vlNns-007M1P-1r for pgpool-hackers@lists.postgresql.org; Thu, 29 Jan 2026 08:55:05 +0000 Received: from mail-yx1-xb134.google.com ([2607:f8b0:4864:20::b134]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vlNnp-0000000128c-1qSq for pgpool-hackers@lists.postgresql.org; Thu, 29 Jan 2026 08:55:04 +0000 Received: by mail-yx1-xb134.google.com with SMTP id 956f58d0204a3-6493937c342so657821d50.1 for ; Thu, 29 Jan 2026 00:55:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769676899; cv=none; d=google.com; s=arc-20240605; b=jh3stjxQm+indzDAIjhnkUCFIWRVRpM2f+Rz1oWMSlEtErNA9RJ3kVAM3P3+6XcAhH u0jsdyzeG15itR6zVrIsrp42ti/ADU82BbaUDhfolIf2xRFyQaJjmUSHcfIMMuXG9yJj eTON/L9NYOAm8LpvPPh15N6H7UzZDjaXfBiDxbFDelYNpeakD2c2CODdsCbpOljZN6i8 IoVh15+Q1BPt91og8KwiLysZ7811bi3IXVAgZ2+obJT2ZwKqjehqzQeUSun38uNK217a +DmNGJjaTePLrZIIKlz9CGyUQwvLupNKwIqjIyI22IDn5o4Tet5oSs+hRq/A6WWl5dvU KpHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ebWeZaigNUNJx4fJWBDOHNKdO8jVG6aX80MVwXQp2Kc=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=RNeeWo8kwT1QxGKzYs5UAenrlpWsQJ7rvHZvu8RvuPukWxuYxY3YzG1CT8nnlOlenE uYikDYhoMYoBGCuMWYBJ4a58xzgjFJ3omc54+2QMBDHLkduqksuxUKBKfwUKawm7jlKa 2l2lyXjZcxk0Xa9dJESDZJrOtJtKCNC/vZu6IoDmFpODeY9akFJQw/sv0gsS9tSOtcIz F8+XSQ1g6BzKdCWkFmfZ9gFFLnUo616fLkZoKr0riveLc4+kfhZacDsuQiQ6uiETZ/9W V+cMczZmvnjHQrB+XwCVKK21iA4rvFyryA+8H/cxomV0e0GmxlybXEnHNlwwwzxJ5Ku9 KBYg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1769676899; x=1770281699; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ebWeZaigNUNJx4fJWBDOHNKdO8jVG6aX80MVwXQp2Kc=; b=Z8CXt0WSaFwXV59o2Og1bKGOAOK5fUrXYie1v7yvTJOIV190/Wa7n2f3eADubFVRlU UlpZ1y31zU2kIptWKOydMUioRX6W2a580j+Jwc0vSTHSk9jU2LthccRajsMz3C+lLFV7 wlqNO8o37JHxiYMq0HUlrVl8ZynbDDEod8Rf4UDMMRy8UZG+aeY2X5cCVuWP4ctOCtVu GxKsRArr749Ma+qW3BT3sDNlsRypAWg+MatU+zDsrfCMMDfuKZuQnyJVu5cWscWqjqQ4 kws9RosBJhgzuedCph/1fueRG6A/Q8qu/1FgbrskqrqE7GMxrmOA6fQmfySSe59aS5S+ mPDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769676899; x=1770281699; h=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; bh=ebWeZaigNUNJx4fJWBDOHNKdO8jVG6aX80MVwXQp2Kc=; b=Aw9/vMinxvYL1uLKv3giFtK3H21RejG4M0dTuqvJRfw/XjUZkrEE7yvPJaJPhLC3uv ftnCfEYPhkvGKR/NDGiOCQw4ejV2pH7pGcCuV3+rBLqw+AjHt+vNqR8qqUoxQvcJXnDs PLobLz+50CD8p9KH2Rxp6P+iB3PkNaoREFLiNRDGF/08LV7vUpoErThxN1kHi2XFfvUM 3V+r5gPTQl7RzZzgUb2eHNYLCbVaFSWP1wKkVd/2EOrabU0GC6cVuTwhKArtu2kFGy3d ziCMScZplB43lhdBTCVltHMFgSuha3veF2kMxFdGYdzCglMXH7zKXY7QmtFUEXNu5OFs 3e7A== X-Gm-Message-State: AOJu0YyG04vPTbULZ4+TgW0ODwxPeJDupdzCc1MBJvv0BpHFQ9QfLhnG OYkWFPB2LHCmoEgYS9M1ssthR4ElWEbpYonIUFtduUeTR4nPUxgp6JM3ID30msMoxqsXNNCcADe lARCksIEpghVmVMvOby4iGX5aJIxva5KGWp7QGgtg4WbyTGcxGLESBXo3Fg== X-Gm-Gg: AZuq6aJoshSjQBgfXAh0uc5qJRY8WicLE5ugFbjiSbCvDX3ILE1UMmSNIbl26ugeVeV WhnmE+mqWPJOieWoRZo0NnVzkj6jLLdbtj1N2gRBLXGC8pUKE7w3qnXQA2gIglPAFUL/Kbj9P5I llYBYV+h4TNQK0t4hEbI0y6Bk7H3SfCKwCHiJKhsti12EKj45//+eLujo7Ru+oqQXgVJnEI4fgm R7wSQJ//tEYSJedtOLOsInE5fZ1SomimkDzwXOgSRetmeIcNGmh6tXHFowi0P4fDjASwSOFJcxL 63h0MlVJlEBG3PlTLHIJL/aj1TFgLVV/YySJAzOKuLm5ZKaAr3hva9l9b+U36aEzvjXJ68wM2Wb 2wRdDny9Uvm8Wdd9pLpr9JRP8 X-Received: by 2002:a05:690e:b46:b0:649:5c78:3158 with SMTP id 956f58d0204a3-6498fbd638cmr6220724d50.8.1769676899276; Thu, 29 Jan 2026 00:54:59 -0800 (PST) MIME-Version: 1.0 References: <20260128.140840.463288103359200425.ishii@postgresql.org> <20260129.172810.828658334363427861.ishii@postgresql.org> In-Reply-To: <20260129.172810.828658334363427861.ishii@postgresql.org> From: Nadav Shatz Date: Thu, 29 Jan 2026 10:54:48 +0200 X-Gm-Features: AZwV_QiJ4X7n92FbcUkLLiwW3JRwSv6qqbO2PXNoqMoaAIT5OJ9-dyK-inzrI-g Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000f380d80649830248" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f380d80649830248 Content-Type: multipart/alternative; boundary="000000000000f380d70649830246" --000000000000f380d70649830246 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable yes indeed, please find attached. On Thu, Jan 29, 2026 at 10:28=E2=80=AFAM Tatsuo Ishii wrote: > > Hi Nadav, > > > > Sorry for the late reply. I just your email now. Will check and reply > > back soon. > > Unfortunately your patch failed to apply to current master branch. > > $ git apply ~/mutated_table.patch > error: patch failed: src/streaming_replication/pool_worker_child.c:1032 > error: src/streaming_replication/pool_worker_child.c: patch does not appl= y > > It tried with patch command and it seems failed here: > > --- src/streaming_replication/pool_worker_child.c > +++ src/streaming_replication/pool_worker_child.c > @@ -1034,6 +1036,10 @@ check_replication_time_lag_with_cmd(void) > bkinfo->standby_delay =3D delay; > bkinfo->standby_delay_by_time =3D true; > > + /* Track maximum delay for memory map TTL > calculation */ > + if (delay > max_delay_us) > + max_delay_us =3D delay; > + > /* Log delay if necessary */ > delay_threshold_by_time =3D > pool_config->delay_threshold_by_time * 1000; /* threshold is in > > > * milliseconds, convert > > Need rebase? > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --000000000000f380d70649830246 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
yes indeed, please find attached.

On = Thu, Jan 29, 2026 at 10:28=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> wrote:
> Hi Nadav,
>
> Sorry for the late reply. I just your email now. Will check and reply<= br> > back soon.

Unfortunately your patch failed to apply to current master branch.

$ git apply ~/mutated_table.patch
error: patch failed: src/streaming_replication/pool_worker_child.c:1032
error: src/streaming_replication/pool_worker_child.c: patch does not apply<= br>
It tried with patch command and it seems failed here:

--- src/streaming_replication/pool_worker_child.c
+++ src/streaming_replication/pool_worker_child.c
@@ -1034,6 +1036,10 @@ check_replication_time_lag_with_cmd(void)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 bkinfo->standby_delay =3D delay;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 bkinfo->standby_delay_by_time =3D true;

+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0/* Track maximum delay for memory map TTL calculation */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0if (delay > max_delay_us)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0max_delay_us =3D delay;
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 /* Log delay if necessary */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 delay_threshold_by_time =3D pool_config->delay_threshold_by_t= ime * 1000;=C2=A0 /* threshold is in
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0* milliseconds, convert

Need rebase?
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--000000000000f380d70649830246-- --000000000000f380d80649830248 Content-Type: application/octet-stream; name="mutated_table.patch" Content-Disposition: attachment; filename="mutated_table.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkz7x23y0 RnJvbSBhMzE2MDU5ZWQyMzc2MWRmYmViZTBlNGE3NzU2MTE0ODVmM2Q1ZDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRmVh dHVyZTogYWRkIGluLW1lbW9yeSB0YWJsZSB0cmFja2luZyB0byBwcmV2ZW50IHN0YWxlIHJlYWRz CiBmcm9tIHJlcGxpY2FzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp bjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpJbXBsZW1l bnQgIm1lbW9yeSBtYXAiIGZlYXR1cmUgdGhhdCB0cmFja3MgcmVjZW50bHktd3JpdHRlbiBkYXRh YmFzZQp0YWJsZXMgaW4gc2hhcmVkIG1lbW9yeSB0byBwcmV2ZW50IHN0YWxlIHJlYWRzIGR1cmlu ZyByZXBsaWNhdGlvbiBsYWcuCldoZW4gYSB3cml0ZSAoSU5TRVJUL1VQREFURS9ERUxFVEUpIG9j Y3VycyBvbiBhIHRhYmxlLCB0aGF0IHRhYmxlIGlzCm1hcmtlZCBhcyAiZGlydHkiIGZvciBhIGNv bmZpZ3VyYWJsZSBUVEwgcGVyaW9kLiBBbnkgU0VMRUNUIG9uIGEgZGlydHkKdGFibGUgd2l0aGlu IHRoZSBUVEwgd2luZG93IGlzIHJvdXRlZCB0byBwcmltYXJ5IGluc3RlYWQgb2YgcmVwbGljYS4K CktleSBmZWF0dXJlczoKLSBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgZm9yIHRyYWNraW5nIHRh YmxlIG11dGF0aW9ucyB3aXRoIFRUTAotIFF1ZXJ5IHBhcnNlIGNhY2hlIHdpdGggTFJVIGV2aWN0 aW9uIGZvciBwZXJmb3JtYW5jZQotIENvbGQgc3RhcnQgcHJvdGVjdGlvbiAocm91dGVzIGFsbCBx dWVyaWVzIHRvIHByaW1hcnkgaW5pdGlhbGx5KQotIEF1dG9tYXRpYyBUVEwgY2FsY3VsYXRpb246 IHJlcGxpY2F0aW9uX2RlbGF5IMOXIGNvbmZpZ3VyYWJsZSBmYWN0b3IKLSBQZXItdGFibGUgc3Rh bGVuZXNzIHRyYWNraW5nIHdpdGggbWljcm9zZWNvbmQgcHJlY2lzaW9uCgpOZXcgY29uZmlndXJh dGlvbiBwYXJhbWV0ZXJzOgotIG1lbW9yeV9tYXBfZW5hYmxlZDogRW5hYmxlL2Rpc2FibGUgdGhl IGZlYXR1cmUgKGRlZmF1bHQ6IG9mZikKLSBtZW1vcnlfbWFwX3R0bF9mYWN0b3I6IFRUTCBtdWx0 aXBsaWVyIGZvciByZXBsaWNhdGlvbiBkZWxheSAoZGVmYXVsdDogNS4wKQotIG1lbW9yeV9tYXBf Y29sZF9zdGFydF9kdXJhdGlvbjogQ29sZCBzdGFydCBwZXJpb2QgaW4gbXMgKGRlZmF1bHQ6IDIw MDApCi0gbWVtb3J5X21hcF90YWJsZV9idWNrZXRzOiBIYXNoIGJ1Y2tldHMgZm9yIHRhYmxlIG1h cCAoZGVmYXVsdDogMTAyNCkKLSBtZW1vcnlfbWFwX3RhYmxlX3NpemU6IE1heCB0cmFja2VkIHRh YmxlcyAoZGVmYXVsdDogMjA0OCkKLSBtZW1vcnlfbWFwX3F1ZXJ5X2J1Y2tldHM6IEhhc2ggYnVj a2V0cyBmb3IgcXVlcnkgY2FjaGUgKGRlZmF1bHQ6IDIwNDgpCi0gbWVtb3J5X21hcF9xdWVyeV9j YWNoZV9zaXplOiBNYXggY2FjaGVkIHF1ZXJpZXMgKGRlZmF1bHQ6IDEwMDAwKQoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvYWRiYWxh bmNlLnNnbWwKaW5kZXggZWUxOWZhYmViYWIyMjEwY2Q0YWJlNTlhNzExYTAzNmFjMGFjODk0My4u YmRjOTI5ZWU1NWI5NDg5OWZmZGQ5MDg4MGE3NDFjZmJhYzA1MWFhNCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2xvYWRiYWxhbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvYWRiYWxhbmNl LnNnbWwKQEAgLTExOTMsNCArMTE5MywyMTAgQEAgZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlv bnNoaXBfbGlzdCA9ICd0YWJsZV8xOnRhYmxlXzInCiAKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9z ZWN0Mj4KKworIDxzZWN0MiBpZD0icnVudGltZS1jb25maWctbWVtb3J5LW1hcCI+CisgIDx0aXRs ZT5NZW1vcnkgTWFwIENvbmZpZ3VyYXRpb24gKExhZ2xlc3MgUmVwbGljYSBSZWFkcyk8L3RpdGxl PgorCisgIDxwYXJhPgorICAgVGhlc2UgcGFyYW1ldGVycyBjb25maWd1cmUgdGhlIG1lbW9yeSBt YXAgZmVhdHVyZSwgd2hpY2ggdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzCisgICB0byBw cmV2ZW50IHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYSBub2RlcyBkdXJpbmcgcmVwbGljYXRpb24g bGFnLiBUaGlzIGltcGxlbWVudHMgdGhlCisgICAibGFnbGVzcyIgYXJjaGl0ZWN0dXJlIHBhdHRl cm4gZm9yIGRpc3RyaWJ1dGVkIHN5c3RlbXMgd2l0aCByZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBXaGVuIGEgdGFibGUgaXMgbW9kaWZpZWQgKElOU0VSVC9VUERBVEUv REVMRVRFKSwgaXQgaXMgbWFya2VkIGFzICJzdGFsZSIgZm9yIGEgVFRMIHBlcmlvZAorICAgKDxs aXRlcmFsPnJlcGxpY2F0aW9uX2RlbGF5ICogbWVtb3J5X21hcF90dGxfZmFjdG9yPC9saXRlcmFs PikuIEFueSBTRUxFQ1QgcXVlcmllcyBvbiBzdGFsZSB0YWJsZXMgYXJlIHJvdXRlZAorICAgdG8g dGhlIHByaW1hcnkgbm9kZSBpbnN0ZWFkIG9mIHJlcGxpY2FzLCBlbnN1cmluZyByZWFkLWFmdGVy LXdyaXRlIGNvbnNpc3RlbmN5LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGlzIGZlYXR1 cmUgcmVxdWlyZXMgPHhyZWYgbGlua2VuZD0iZ3VjLXJlcGxpY2F0aW9uLWRlbGF5LXNvdXJjZS1j bWQiPiB0byBiZSBjb25maWd1cmVkCisgICBmb3IgbW9uaXRvcmluZyByZXBsaWNhdGlvbiBkZWxh eSBmcm9tIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHdhcm5pbmc+CisgICA8cGFyYT4KKyAg ICBFbmFibGluZyB0aGUgbWVtb3J5IG1hcCBmZWF0dXJlIGluY3JlYXNlcyBzaGFyZWQgbWVtb3J5 IGNvbnN1bXB0aW9uLiBXaXRoIGRlZmF1bHQgc2V0dGluZ3MsCisgICAgdGhlIGZlYXR1cmUgcmVx dWlyZXMgYXBwcm94aW1hdGVseSA2LjYgTUIgb2Ygc2hhcmVkIG1lbW9yeSAoMC4zIE1CIGZvciB0 YWJsZSB0cmFja2luZyArIDYuMyBNQiBmb3IgcXVlcnkgY2FjaGUpLgorICAgIE1lbW9yeSB1c2Fn ZSBzY2FsZXMgd2l0aCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CisgICA8L3BhcmE+CisgICA8 aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUYWJsZSB0 cmFja2luZzogPGxpdGVyYWw+bWVtb3J5X21hcF90YWJsZV9zaXplICogMTYwIGJ5dGVzPC9saXRl cmFsPiAoZGVmYXVsdDogMjA0OCAqIDE2MCA9IH4zMjAgS0IpCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVyeSBjYWNo ZTogPGxpdGVyYWw+bWVtb3J5X21hcF9xdWVyeV9jYWNoZV9zaXplICogNjQwIGJ5dGVzPC9saXRl cmFsPiAoZGVmYXVsdDogMTAwMDAgKiA2NDAgPSB+Ni4zIE1CKQorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPHBhcmE+CisgICAgRm9yIGhpZ2gt dHJhZmZpYyBzeXN0ZW1zIHdpdGggbGFyZ2UgY2FjaGUgc2l6ZXMgKGUuZy4sIDxsaXRlcmFsPm1l bW9yeV9tYXBfcXVlcnlfY2FjaGVfc2l6ZSA9IDEwMDAwMDwvbGl0ZXJhbD4pLAorICAgIG1lbW9y eSB1c2FnZSBjYW4gcmVhY2ggNjQgTUIgb3IgbW9yZS4gQ29uc2lkZXIgeW91ciBzeXN0ZW0ncyBh dmFpbGFibGUgc2hhcmVkIG1lbW9yeSB3aGVuIGVuYWJsaW5nIHRoaXMgZmVhdHVyZS4KKyAgIDwv cGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50 cnkgaWQ9Imd1Yy1tZW1vcnktbWFwLWVuYWJsZWQiIHhyZWZsYWJlbD0ibWVtb3J5X21hcF9lbmFi bGVkIj4KKyAgICA8dGVybT48dmFybmFtZT5tZW1vcnlfbWFwX2VuYWJsZWQ8L3Zhcm5hbWU+ICg8 dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPm1lbW9yeV9tYXBfZW5hYmxlZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgRW5hYmxlcyBpbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVj ZW50bHkgd3JpdHRlbiB0YWJsZXMuIFdoZW4gZW5hYmxlZCwgdGFibGVzIGFyZSBtYXJrZWQKKyAg ICAgIGFzIHN0YWxlIGFmdGVyIHdyaXRlIG9wZXJhdGlvbnMsIGFuZCByZWFkcyBhcmUgcm91dGVk IHRvIHByaW1hcnkgdW50aWwgdGhlIFRUTCBleHBpcmVzLgorICAgICA8L3BhcmE+CisgICAgIDxw YXJhPgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRo ZSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICAgRGVmYXVs dCBpcyA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWVtb3J5 LW1hcC10dGwtZmFjdG9yIiB4cmVmbGFiZWw9Im1lbW9yeV9tYXBfdHRsX2ZhY3RvciI+CisgICAg PHRlcm0+PHZhcm5hbWU+bWVtb3J5X21hcF90dGxfZmFjdG9yPC92YXJuYW1lPiAoPHR5cGU+Zmxv YXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZh cm5hbWU+bWVtb3J5X21hcF90dGxfZmFjdG9yPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFt ZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNdWx0aXBsaWVyIGZvciBjYWxjdWxhdGluZyB0aGUg VFRMOiA8bGl0ZXJhbD5UVEwgPSByZXBsaWNhdGlvbl9kZWxheSAqIG1lbW9yeV9tYXBfdHRsX2Zh Y3RvcjwvbGl0ZXJhbD4uCisgICAgICBIaWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBzYWZldHkg bWFyZ2luIGJ1dCBtYXkgcmVkdWNlIHJlYWQgcmVwbGljYSB1dGlsaXphdGlvbi4KKyAgICAgPC9w YXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxLjAtMTAwLjAuIERlZmF1bHQg aXMgPGxpdGVyYWw+NS4wPC9saXRlcmFsPi4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBj aGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1 cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLW1lbW9yeS1tYXAtY29sZC1zdGFydC1kdXJh dGlvbiIgeHJlZmxhYmVsPSJtZW1vcnlfbWFwX2NvbGRfc3RhcnRfZHVyYXRpb24iPgorICAgIDx0 ZXJtPjx2YXJuYW1lPm1lbW9yeV9tYXBfY29sZF9zdGFydF9kdXJhdGlvbjwvdmFybmFtZT4gKDx0 eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZh cm5hbWU+bWVtb3J5X21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEdXJhdGlvbiBpbiBtaWxsaXNlY29u ZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBhIGNoaWxkIHByb2Nlc3Mg c3RhcnRzLgorICAgICAgVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyB3aGVuIGEgbmV3IGNvbm5l Y3Rpb24gaXMgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSBtZW1vcnkgbWFwCisgICAgICBpcyBwb3B1 bGF0ZWQgd2l0aCByZWNlbnQgd3JpdGUgaGlzdG9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFy YT4KKyAgICAgIFZhbGlkIHJhbmdlOiAwLTYwMDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIw MDA8L2xpdGVyYWw+ICgyIHNlY29uZHMpLgorICAgICAgU2V0IHRvIDAgdG8gZGlzYWJsZSBjb2xk IHN0YXJ0IGJlaGF2aW9yLgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkg cmVsb2FkaW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtbWVtb3J5LW1hcC10YWJsZS1idWNrZXRzIiB4cmVmbGFiZWw9 Im1lbW9yeV9tYXBfdGFibGVfYnVja2V0cyI+CisgICAgPHRlcm0+PHZhcm5hbWU+bWVtb3J5X21h cF90YWJsZV9idWNrZXRzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxp bmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5tZW1vcnlfbWFwX3RhYmxlX2J1Y2tl dHM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2lu ZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0YWJsZSBtdXRhdGlvbiB0cmFja2luZyBo YXNoIHRhYmxlLgorICAgICAgSGlnaGVyIHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zIGFu ZCBpbXByb3ZlIGxvb2t1cCBwZXJmb3JtYW5jZS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4K KyAgICAgIFZhbGlkIHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDI0PC9s aXRlcmFsPi4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIg c3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tZW1vcnktbWFwLXRhYmxlLXNpemUiIHhyZWZs YWJlbD0ibWVtb3J5X21hcF90YWJsZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT5tZW1vcnlf bWFwX3RhYmxlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGlu ZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPm1lbW9yeV9tYXBfdGFibGVfc2l6ZTwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWF4 aW11bSBudW1iZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkg aW4gdGhlIG1lbW9yeSBtYXAuCisgICAgICBXaGVuIGZ1bGwsIG9sZGVzdCBlbnRyaWVzIGFyZSBl dmljdGVkIHVzaW5nIGEgc2ltcGxlIGV2aWN0aW9uIHN0cmF0ZWd5LgorICAgICA8L3BhcmE+Cisg ICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEyOC0xMzEwNzIuIERlZmF1bHQgaXMgPGxp dGVyYWw+MjA0ODwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJveGltYXRlbHkg MTYwIGJ5dGVzIHBlciBlbnRyeS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNl dCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tZW1vcnktbWFwLXF1ZXJ5 LWJ1Y2tldHMiIHhyZWZsYWJlbD0ibWVtb3J5X21hcF9xdWVyeV9idWNrZXRzIj4KKyAgICA8dGVy bT48dmFybmFtZT5tZW1vcnlfbWFwX3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRl Z2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPm1l bW9yeV9tYXBfcXVlcnlfYnVja2V0czwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8 L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHF1ZXJ5 IHBhcnNlIGNhY2hlLiBUaGUgY2FjaGUgc3RvcmVzIG5vcm1hbGl6ZWQKKyAgICAgIHF1ZXJ5IHN0 cmluZ3MgbWFwcGVkIHRvIHRoZWlyIHRhYmxlIGRlcGVuZGVuY2llcyB0byBhdm9pZCByZXBlYXRl ZCBwYXJzaW5nLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6 IDY0LTY1NTM2LiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIwNDg8L2xpdGVyYWw+LgorICAgICAgVGhp cyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLW1lbW9yeS1tYXAtcXVlcnktY2FjaGUtc2l6ZSIgeHJlZmxhYmVsPSJtZW1vcnlf bWFwX3F1ZXJ5X2NhY2hlX3NpemUiPgorICAgIDx0ZXJtPjx2YXJuYW1lPm1lbW9yeV9tYXBfcXVl cnlfY2FjaGVfc2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5k ZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWVtb3J5X21hcF9xdWVyeV9jYWNoZV9z aXplPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9p bmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAg ICBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBwYXJzZSByZXN1bHRzIHRvIGNhY2hlLiBVc2VzIExS VSBldmljdGlvbiB3aGVuIGZ1bGwuCisgICAgICBMYXJnZXIgY2FjaGVzIHJlZHVjZSBwYXJzaW5n IG92ZXJoZWFkIGJ1dCBjb25zdW1lIG1vcmUgc2hhcmVkIG1lbW9yeS4KKyAgICAgPC9wYXJhPgor ICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxMDAtMTAwMDAwMC4gRGVmYXVsdCBpcyA8 bGl0ZXJhbD4xMDAwMDwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJveGltYXRl bHkgNjQwIGJ5dGVzIHBlciBlbnRyeSAofjYuMyBNQiBmb3IgZGVmYXVsdCwgfjY0IE1CIGZvciAx MDAwMDAgZW50cmllcykuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQg c2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgIDxzZWN0MyBpZD0icnVudGltZS1jb25m aWctbWVtb3J5LW1hcC1leGFtcGxlIj4KKyAgIDx0aXRsZT5NZW1vcnkgTWFwIENvbmZpZ3VyYXRp b24gRXhhbXBsZTwvdGl0bGU+CisgICA8cGFyYT4KKyAgICBUbyBlbmFibGUgbWVtb3J5IG1hcCB3 aXRoIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3Jpbmc6CisgICA8L3BhcmE+CisgICA8cHJvZ3Jh bWxpc3Rpbmc+CisjIEVuYWJsZSBtZW1vcnkgbWFwIGZlYXR1cmUKK21lbW9yeV9tYXBfZW5hYmxl ZCA9IG9uCittZW1vcnlfbWFwX3R0bF9mYWN0b3IgPSA1LjAKK21lbW9yeV9tYXBfY29sZF9zdGFy dF9kdXJhdGlvbiA9IDIwMDAKKworIyBDb25maWd1cmUgZXh0ZXJuYWwgcmVwbGljYXRpb24gZGVs YXkgbW9uaXRvcmluZworcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcvcGF0aC90by9n ZXQtcmVwbGljYXRpb24tZGVsYXkuc2gnCityZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91 dCA9IDEwCisKKyMgQWRqdXN0IGNhY2hlIHNpemVzIGJhc2VkIG9uIHdvcmtsb2FkIChpbmNyZWFz ZXMgbWVtb3J5IHVzYWdlKQorbWVtb3J5X21hcF90YWJsZV9zaXplID0gNDA5NiAgICAgICMgVHJh Y2sgdXAgdG8gNDA5NiB0YWJsZXMgKH42NDAgS0IpCittZW1vcnlfbWFwX3F1ZXJ5X2NhY2hlX3Np emUgPSA1MDAwMCAgIyBDYWNoZSA1MGsgcXVlcmllcyAofjMxIE1CKQorICAgPC9wcm9ncmFtbGlz dGluZz4KKyAgIDxwYXJhPgorICAgIFRvdGFsIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9yIGFi b3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJveGltYXRlbHkgMzIgTUIgKDMxIE1CIHF1ZXJ5IGNhY2hl ICsgMC42IE1CIHRhYmxlIG1hcCArIG92ZXJoZWFkKS4KKyAgICBEZWZhdWx0IGNvbmZpZ3VyYXRp b24gKDEwMDAwIHF1ZXJ5IGNhY2hlIGVudHJpZXMsIDIwNDggdGFibGVzKSByZXF1aXJlcyBhcHBy b3hpbWF0ZWx5IDYuNiBNQi4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+CisK IDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0K aW5kZXggNDY3OGFiNTMwNTVlODI4YTM3YjY0Nzc4MDE2NDBhZmYxN2ZmODRhNy4uNTE4OTZhZTA3 NzcxZmMwMDM4MmFiOTY1ZWFmMzgwN2M4YjVmM2Q5NCAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxl LmFtCisrKyBiL3NyYy9NYWtlZmlsZS5hbQpAQCAtMzUsNiArMzUsNyBAQCBwZ3Bvb2xfU09VUkNF UyA9IG1haW4vbWFpbi5jIFwKIAlyZXdyaXRlL3Bvb2xfdGltZXN0YW1wLmMgXAogCXJld3JpdGUv cG9vbF9sb2JqLmMgXAogCXV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5jIFwKKwl1dGlscy9wb29s X21lbW9yeV9tYXAuYyBcCiAJdXRpbHMvc3RybGNweS5jIFwKIAl1dGlscy9wc3ByaW50Zi5jIFwK IAl1dGlscy9wb29sX3BhcmFtcy5jIFwKZGlmZiAtLWdpdCBhL3NyYy9jb25maWcvcG9vbF9jb25m aWdfdmFyaWFibGVzLmMgYi9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCmluZGV4 IDY4YWJiN2Y0MWNiOTZkODU2YzgyNGExNDg4NDI3NDhiZmI3YTRkMTIuLmQ5YTI4ZTdlYzMzNjlm Zjc5OWNiMzdjMzdjMGNkMDUwNzUzMjc2MDYgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWcvcG9vbF9j b25maWdfdmFyaWFibGVzLmMKKysrIGIvc3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMu YwpAQCAtNzgzLDYgKzc4MywxNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3Vy ZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsibWVtb3J5 X21hcF9lbmFibGVkIiwgQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJF bmFibGUgaW4tbWVtb3J5IHRyYWNraW5nIG9mIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIGF2 b2lkIHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYXMiLAorCQkJQ09ORklHX1ZBUl9UWVBFX0JPT0ws IGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLm1lbW9yeV9tYXBfZW5hYmxlZCwKKwkJ ZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7ImF1dG9fZmFpbGJhY2si LCBDRkdDWFRfUkVMT0FELCBGQUlMT1ZFUl9DT05GSUcsCiAJCQkiRW5hYmxlcyBub2RlcyBhdXRv bWF0aWNhbGx5IHJlYXR0YWNoLCB3aGVuIGRldGFjaGVkIG5vZGUgY29udGludWUgc3RyZWFtaW5n IHJlcGxpY2F0aW9uLiIsCkBAIC0xNzU3LDYgKzE3NjcsMTcgQEAgc3RhdGljIHN0cnVjdCBjb25m aWdfaW50X2FycmF5IENvbmZpZ3VyZU5hbWVzSW50QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3Qg Y29uZmlnX2RvdWJsZSBDb25maWd1cmVOYW1lc0RvdWJsZVtdID0KIHsKKwl7CisJCXsibWVtb3J5 X21hcF90dGxfZmFjdG9yIiwgQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJ CSJUVEwgbXVsdGlwbGllciBmb3IgbWVtb3J5IG1hcCAoVFRMID0gcmVwbGljYXRpb25fZGVsYXkg KiBmYWN0b3IpIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9ET1VCTEUsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLm1lbW9yeV9tYXBfdHRsX2ZhY3RvciwKKwkJNS4wLAkJCQkJLyogYm9v dCB2YWx1ZTogNXggcmVwbGljYXRpb24gZGVsYXkgKi8KKwkJMS4wLCAxMDAuMCwJCQkJLyogbWlu LCBtYXggKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJr ZXIgKi8KIAlFTVBUWV9DT05GSUdfRE9VQkxFCiB9OwpAQCAtMjM1NSw2ICsyMzc2LDYxIEBAIHN0 YXRpYyBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCiAKKwl7CisJCXsibWVtb3J5X21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uIiwg Q0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJEdXJhdGlvbiBpbiBtaWxs aXNlY29uZHMgdG8gZm9yY2UgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGNoaWxkIHByb2Nlc3Mg c3RhcnRzLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgR1VDX1VOSVRfTVMKKwkJ fSwKKwkJJmdfcG9vbF9jb25maWcubWVtb3J5X21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uLAorCQky MDAwLAkJCQkJLyogMiBzZWNvbmRzICovCisJCTAsIDYwMDAwLAkJCQkvKiAwIHRvIDYwIHNlY29u ZHMgKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsibWVtb3J5X21hcF90YWJs ZV9idWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVy IG9mIGhhc2ggYnVja2V0cyBmb3IgdGFibGUgbXV0YXRpb24gbWFwLiIsCisJCQlDT05GSUdfVkFS X1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy5tZW1vcnlfbWFwX3Rh YmxlX2J1Y2tldHMsCisJCTEwMjQsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAor CX0sCisKKwl7CisJCXsibWVtb3J5X21hcF90YWJsZV9zaXplIiwgQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZSBt dXRhdGlvbiBtYXAuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLm1lbW9yeV9tYXBfdGFibGVfc2l6ZSwKKwkJMjA0OCwKKwkJMTI4LCAx MzEwNzIsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7Im1lbW9yeV9tYXBfcXVl cnlfYnVja2V0cyIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIk51bWJl ciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHF1ZXJ5IHBhcnNlIGNhY2hlLiIsCisJCQlDT05GSUdfVkFS X1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy5tZW1vcnlfbWFwX3F1 ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAor CX0sCisKKwl7CisJCXsibWVtb3J5X21hcF9xdWVyeV9jYWNoZV9zaXplIiwgQ0ZHQ1hUX0lOSVQs IExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBx dWVyeSBwYXJzZSBjYWNoZS4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJ fSwKKwkJJmdfcG9vbF9jb25maWcubWVtb3J5X21hcF9xdWVyeV9jYWNoZV9zaXplLAorCQkxMDAw MCwKKwkJMTAwLCAxMDAwMDAwLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCS8qIEVuZC1v Zi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19JTlQKIH07CmRpZmYgLS1naXQgYS9zcmMv Y29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYyBiL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlfY29u dGV4dC5jCmluZGV4IDdjZjk4MTNlYjdkNTg2NzhiYzg2YTBhYWEzOGJkM2M2NDQ1YjY2ODcuLmRm YTYyMGRlY2RlYzdkODNlNWQwMTk4Y2Q3MTE4ODRkMzE1ZTAyYWYgMTAwNjQ0Ci0tLSBhL3NyYy9j b250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jCisrKyBiL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlf Y29udGV4dC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMvc3RhdGlzdGljcy5o IgogI2luY2x1ZGUgInV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5oIgogI2luY2x1ZGUgInV0aWxz L3Bvb2xfc3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF9tZW1vcnlfbWFwLmgiCiAjaW5j bHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQv cG9vbF9xdWVyeV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVzLmgiCkBAIC0yMTM5 LDYgKzIxNDAsOTIgQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05U RVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCQkJCXsKIAkJCQkJcG9vbF9z ZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CiAJCQkJ fQorCQkJCS8qCisJCQkJICogQ2hlY2sgbWVtb3J5IG1hcCBmb3IgcmVjZW50bHkgd3JpdHRlbiB0 YWJsZXMuCisJCQkJICogSWYgaW4gY29sZCBzdGFydCBvciBhbnkgdGFibGUgd2FzIHJlY2VudGx5 IHdyaXR0ZW4sCisJCQkJICogcm91dGUgdG8gcHJpbWFyeSB0byBhdm9pZCBzdGFsZSByZWFkcy4K KwkJCQkgKi8KKwkJCQllbHNlIGlmIChwb29sX2NvbmZpZy0+bWVtb3J5X21hcF9lbmFibGVkKQor CQkJCXsKKwkJCQkJYm9vbAkJZm9yY2VfcHJpbWFyeSA9IGZhbHNlOworCisJCQkJCS8qIER1cmlu ZyBjb2xkIHN0YXJ0LCByb3V0ZSBldmVyeXRoaW5nIHRvIHByaW1hcnkgKi8KKwkJCQkJaWYgKHBv b2xfbWVtb3J5X21hcF9pbl9jb2xkX3N0YXJ0KCkpCisJCQkJCXsKKwkJCQkJCWVyZXBvcnQoREVC VUcxLAorCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ugb2Yg bWVtb3J5IG1hcCBjb2xkIHN0YXJ0IiksCisJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9u ID0gUFJJTUFSWSBmb3IgcXVlcnk9IFwiJXNcIiIsIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJp bWFyeSA9IHRydWU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvKiBFeHRyYWN0 IHRhYmxlIG5hbWVzIGFuZCBjaGVjayBpZiBhbnkgYXJlIHN0YWxlICovCisJCQkJCQlTZWxlY3RD b250ZXh0IGN0eDsKKwkJCQkJCWludAkJCW51bV9vaWRzOworCQkJCQkJaW50CQkJaTsKKworCQkJ CQkJbWVtc2V0KCZjdHgsIDAsIHNpemVvZihjdHgpKTsKKwkJCQkJCW51bV9vaWRzID0gcG9vbF9l eHRyYWN0X3RhYmxlX29pZHNfZnJvbV9zZWxlY3Rfc3RtdChub2RlLCAmY3R4KTsKKworCQkJCQkJ Zm9yIChpID0gMDsgaSA8IG51bV9vaWRzOyBpKyspCisJCQkJCQl7CisJCQkJCQkJaWYgKHBvb2xf bWVtb3J5X21hcF90YWJsZV9pc19zdGFsZShjdHgudGFibGVfbmFtZXNbaV0pKQorCQkJCQkJCXsK KwkJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxv YWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlIFwiJXNcIiB3YXMgcmVjZW50bHkgd3JpdHRlbiIsCisJ CQkJCQkJCQkJCQljdHgudGFibGVfbmFtZXNbaV0pLAorCQkJCQkJCQkJCSBlcnJkZXRhaWwoImRl c3RpbmF0aW9uID0gUFJJTUFSWSBmb3IgcXVlcnk9IFwiJXNcIiIsIHF1ZXJ5KSkpOworCQkJCQkJ CQlmb3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJ fQorCQkJCQl9CisKKwkJCQkJaWYgKGZvcmNlX3ByaW1hcnkpCisJCQkJCXsKKwkJCQkJCXBvb2xf c2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05PREVfSUQpOworCQkJ CQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyogUHJvY2VlZCB3aXRoIGxvYWQgYmFsYW5j aW5nICovCisJCQkJCQlpZiAocG9vbF9jb25maWctPnN0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFu Y2UpCisJCQkJCQl7CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9p ZCA9IHNlbGVjdF9sb2FkX2JhbGFuY2luZ19ub2RlKCk7CisJCQkJCQl9CisKKwkJCQkJCS8qCisJ CQkJCQkgKiBBcyBzdHJlYW1pbmcgcmVwbGljYXRpb24gZGVsYXkgaXMgdG9vIG11Y2gsIGlmCisJ CQkJCQkgKiBwcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSBpcyB0cnVlIHRoZW4gZWxlY3QgbmV3 IGxvYWQKKwkJCQkJCSAqIGJhbGFuY2Ugbm9kZSB3aGljaCBpcyBsb3dlc3QgZGVsYXllZCwgZmFs c2UgdGhlbiBzZW5kCisJCQkJCQkgKiB0byB0aGUgcHJpbWFyeS4KKwkJCQkJCSAqLworCQkJCQkJ aWYgKFNUUkVBTSAmJiBjaGVja19yZXBsaWNhdGlvbl9kZWxheShzZXNzaW9uX2NvbnRleHQtPmxv YWRfYmFsYW5jZV9ub2RlX2lkKSkKKwkJCQkJCXsKKwkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0b28gbXVj aCByZXBsaWNhdGlvbiBkZWxheSIpLAorCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24g PSAlZCBmb3IgcXVlcnk9IFwiJXNcIiIsIGRlc3QsIHF1ZXJ5KSkpOworCisJCQkJCQkJaWYgKHBv b2xfY29uZmlnLT5wcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSkKKwkJCQkJCQl7CisJCQkJCQkJ CWludAkJCW5ld19sb2FkX2JhbGFuY2luZ19ub2RlID0gc2VsZWN0X2xvYWRfYmFsYW5jaW5nX25v ZGUoKTsKKworCQkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0g bmV3X2xvYWRfYmFsYW5jaW5nX25vZGU7CisJCQkJCQkJCXNlc3Npb25fY29udGV4dC0+cXVlcnlf Y29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPSBzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFs YW5jZV9ub2RlX2lkOworCQkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29u dGV4dCwgc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9p ZCk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCXBvb2xfc2V0X25v ZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05PREVfSUQpOworCQkJCQkJCX0K KwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1 ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2Fk X2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlf Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkgc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5s b2FkX2JhbGFuY2Vfbm9kZV9pZCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CiAJCQkJZWxzZQog CQkJCXsKIAkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNl KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCBiL3NyYy9pbmNsdWRlL3Bv b2xfY29uZmlnLmgKaW5kZXggNzQxZGU2Y2M1ZmMzMzY4ZjgxM2Q2YjZlZmE2OGViN2Y4YTc5NTA2 Yi4uOTY3NWMxYjY1ZDliYWU4M2M2NDEyYzFmMWYzMzk5MzY0OTMyMjIxZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5o CkBAIC0zNjUsNiArMzY1LDE2IEBAIHR5cGVkZWYgc3RydWN0CiAJCQkJCQkJCQkgKiByZXBsaWNh dGlvbiBjaGVjayAqLwogCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8q IGV4dGVybmFsIGNvbW1hbmQgZm9yIHJlcGxpY2F0aW9uIGRlbGF5ICovCiAJaW50CQkJcmVwbGlj YXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1h bmQgaW4gc2Vjb25kcyAqLworCisJLyogTWVtb3J5IG1hcCBjb25maWd1cmF0aW9uIGZvciB0cmFj a2luZyByZWNlbnRseSB3cml0dGVuIHRhYmxlcyAqLworCWJvb2wJCW1lbW9yeV9tYXBfZW5hYmxl ZDsJCQkvKiBFbmFibGUgaW4tbWVtb3J5IHRhYmxlIHRyYWNraW5nICovCisJZG91YmxlCQltZW1v cnlfbWFwX3R0bF9mYWN0b3I7CQkvKiBUVEwgbXVsdGlwbGllciBmb3IgcmVwbGljYXRpb24gZGVs YXkgKi8KKwlpbnQJCQltZW1vcnlfbWFwX2NvbGRfc3RhcnRfZHVyYXRpb247CS8qIENvbGQgc3Rh cnQgZHVyYXRpb24gaW4gbXMgKi8KKwlpbnQJCQltZW1vcnlfbWFwX3RhYmxlX2J1Y2tldHM7CS8q IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRhYmxlIG1hcCAqLworCWludAkJCW1lbW9yeV9t YXBfdGFibGVfc2l6ZTsJCS8qIE1heCBlbnRyaWVzIGluIHRhYmxlIG1hcCAqLworCWludAkJCW1l bW9yeV9tYXBfcXVlcnlfYnVja2V0czsJLyogTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVl cnkgY2FjaGUgKi8KKwlpbnQJCQltZW1vcnlfbWFwX3F1ZXJ5X2NhY2hlX3NpemU7CS8qIE1heCBl bnRyaWVzIGluIHF1ZXJ5IGNhY2hlICovCisKIAljaGFyCSAgICpmYWlsb3Zlcl9jb21tYW5kOwkv KiBleGVjdXRlIGNvbW1hbmQgd2hlbiBmYWlsb3ZlciBoYXBwZW5zICovCiAJY2hhcgkgICAqZm9s bG93X3ByaW1hcnlfY29tbWFuZDsgLyogZXhlY3V0ZSBjb21tYW5kIHdoZW4gZmFpbG92ZXIgaXMK IAkJCQkJCQkJCQkgKiBlbmRlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9v bF9tZW1vcnlfbWFwLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb29sX21lbW9yeV9tYXAuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi41MTFkN2E0NWU3ZGJkNDE3YjFlNDliOTIxMWZiOTk0ZjI5YWYxYTA4Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9vbF9tZW1vcnlfbWFwLmgKQEAgLTAsMCAr MSwyMzYgQEAKKy8qIC0qLXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2Ug aW5kZXBlbmRlbnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3Jp dHRlbiBieSBUYXRzdW8gSXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyNglQZ1Bv b2wgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNv cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1 bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CisgKiBn cmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBp biBhbGwKKyAqIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uCisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRh dGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Igbm90IGJlIHVzZWQgaW4g YWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAqIGRpc3RyaWJ1dGlvbiBv ZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlz c2lvbi4gVGhlIGF1dGhvciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBz dWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3Zp ZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoK KyAqIHBvb2xfbWVtb3J5X21hcC5oOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3Jp dHRlbiB0YWJsZXMKKyAqICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBm cm9tIHJlcGxpY2FzIGR1cmluZyByZXBsaWNhdGlvbiBsYWcKKyAqLworCisjaWZuZGVmIFBPT0xf TUVNT1JZX01BUF9ICisjZGVmaW5lIFBPT0xfTUVNT1JZX01BUF9ICisKKyNpbmNsdWRlICJwb29s LmgiCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworLyoKKyAqIE1heGltdW0gdGFibGUgbmFtZSBs ZW5ndGggaW5jbHVkaW5nIHNjaGVtYTogInNjaGVtYSIuInRhYmxlIgorICogVXNpbmcgTkFNRURB VEFMRU4gKiAyICsgNCBmb3IgcXVvdGVzIGFuZCBkb3QKKyAqLworI2RlZmluZSBNRU1PUllfTUFQ X1RBQkxFX05BTUVfTEVOCShOQU1FREFUQUxFTiAqIDIgKyA0KQorCisvKgorICogTWF4aW11bSBu dW1iZXIgb2YgdGFibGVzIHdlIHRyYWNrIHBlciBxdWVyeQorICovCisjZGVmaW5lIE1FTU9SWV9N QVBfTUFYX1RBQkxFU19QRVJfUVVFUlkJOAorCisvKgorICogSW52YWxpZCBpbmRleCBtYXJrZXIg Zm9yIGxpbmtlZCBsaXN0cworICovCisjZGVmaW5lIE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWAko LTEpCisKKy8qCisgKiBEZWZhdWx0IFRUTCBpbiBtaWNyb3NlY29uZHMgKDEwMG1zKSB1c2VkIHdo ZW4gcmVwbGljYXRpb24gZGVsYXkgaXMgdW5rbm93bgorICovCisjZGVmaW5lIE1FTU9SWV9NQVBf REVGQVVMVF9UVExfVVMJKDEwMCAqIDEwMDApCisKKy8qCisgKiBFbnRyeSBpbiB0aGUgdGFibGUg bXV0YXRpb24gaGFzaCB0YWJsZQorICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZU11dGF0aW9uRW50 cnkKK3sKKwljaGFyCQl0YWJsZV9uYW1lW01FTU9SWV9NQVBfVEFCTEVfTkFNRV9MRU5dOwkvKiAi c2NoZW1hIi4idGFibGUiICovCisJc3RydWN0IHRpbWV2YWwgbGFzdF93cml0ZV90aW1lOwkJLyog V2hlbiB0aGUgdGFibGUgd2FzIGxhc3Qgd3JpdHRlbiAqLworCXVpbnQzMgkJaGFzaDsJCQkJCS8q IFByZS1jb21wdXRlZCBoYXNoIHZhbHVlICovCisJaW50CQkJbmV4dDsJCQkJCS8qIE5leHQgZW50 cnkgaW4gY29sbGlzaW9uIGNoYWluICgtMSBpZiBub25lKSAqLworCWJvb2wJCWluX3VzZTsJCQkJ CS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBUYWJsZU11dGF0aW9uRW50cnk7CisKKy8q CisgKiBIZWFkZXIgZm9yIHRoZSB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlIGluIHNoYXJlZCBt ZW1vcnkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVNdXRhdGlvbkhhc2hUYWJsZQoreworCWlu dAkJCW51bV9idWNrZXRzOwkJLyogTnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1h eF9lbnRyaWVzOwkJLyogTWF4aW11bSBlbnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50 cmllczsJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3Rf aGVhZDsJCS8qIEhlYWQgb2YgZnJlZSBlbnRyeSBsaXN0ICovCisJdm9sYXRpbGUgdWludDMyIGxv Y2s7CQkJLyogU3BpbmxvY2sgZm9yIHRocmVhZC1zYWZlIGFjY2VzcyAqLworCS8qIEZsZXhpYmxl IGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBtZW1vcnk6CisJICogaW50IGJ1Y2tldHNb bnVtX2J1Y2tldHNdOworCSAqIFRhYmxlTXV0YXRpb25FbnRyeSBlbnRyaWVzW21heF9lbnRyaWVz XTsKKwkgKi8KK30gVGFibGVNdXRhdGlvbkhhc2hUYWJsZTsKKworLyoKKyAqIEVudHJ5IGluIHRo ZSBxdWVyeSBwYXJzZSBjYWNoZQorICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlRW50cnkK K3sKKwl1aW50NjQJCXF1ZXJ5X2hhc2g7CQkJLyogSGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5ICov CisJYm9vbAkJaXNfd3JpdGU7CQkJLyogVHJ1ZSBpZiBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLwor CWludAkJCW51bV90YWJsZXM7CQkJLyogTnVtYmVyIG9mIHRhYmxlcyBpbiBxdWVyeSAqLworCWNo YXIJCXRhYmxlX25hbWVzW01FTU9SWV9NQVBfTUFYX1RBQkxFU19QRVJfUVVFUlldW01FTU9SWV9N QVBfVEFCTEVfTkFNRV9MRU5dOworCWludAkJCW5leHQ7CQkJCS8qIE5leHQgZW50cnkgaW4gY29s bGlzaW9uIGNoYWluICovCisJaW50CQkJbHJ1X3ByZXY7CQkJLyogUHJldmlvdXMgaW4gTFJVIGxp c3QgKi8KKwlpbnQJCQlscnVfbmV4dDsJCQkvKiBOZXh0IGluIExSVSBsaXN0ICovCisJYm9vbAkJ aW5fdXNlOwkJCQkvKiBJcyB0aGlzIGVudHJ5IGluIHVzZT8gKi8KK30gUXVlcnlQYXJzZUVudHJ5 OworCisvKgorICogSGVhZGVyIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1l bW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlQ2FjaGUKK3sKKwlpbnQJCQludW1f YnVja2V0czsJCS8qIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlpbnQJCQltYXhfZW50cmll czsJCS8qIE1heGltdW0gZW50cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CQkv KiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7CQkv KiBIZWFkIG9mIGZyZWUgZW50cnkgbGlzdCAqLworCWludAkJCWxydV9oZWFkOwkJCS8qIE1vc3Qg cmVjZW50bHkgdXNlZCAqLworCWludAkJCWxydV90YWlsOwkJCS8qIExlYXN0IHJlY2VudGx5IHVz ZWQgKi8KKwl2b2xhdGlsZSB1aW50MzIgbG9jazsJCQkvKiBTcGlubG9jayBmb3IgdGhyZWFkLXNh ZmUgYWNjZXNzICovCisJLyogRmxleGlibGUgYXJyYXkgbWVtYmVycyBmb2xsb3cgaW4gc2hhcmVk IG1lbW9yeToKKwkgKiBpbnQgYnVja2V0c1tudW1fYnVja2V0c107CisJICogUXVlcnlQYXJzZUVu dHJ5IGVudHJpZXNbbWF4X2VudHJpZXNdOworCSAqLworfSBRdWVyeVBhcnNlQ2FjaGU7CisKKy8q CisgKiBHbG9iYWwgc3RhdGUgZm9yIG1lbW9yeSBtYXAgZmVhdHVyZQorICovCit0eXBlZGVmIHN0 cnVjdCBNZW1vcnlNYXBTdGF0ZQoreworCWJvb2wJCWluaXRpYWxpemVkOwkJCS8qIEhhcyBzaGFy ZWQgbWVtb3J5IGJlZW4gaW5pdGlhbGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50X3R0bF91czsJ CQkvKiBDdXJyZW50IFRUTCBpbiBtaWNyb3NlY29uZHMgKi8KKwlzdHJ1Y3QgdGltZXZhbCB0dGxf bGFzdF91cGRhdGVkOwkvKiBXaGVuIFRUTCB3YXMgbGFzdCB1cGRhdGVkICovCisJdm9sYXRpbGUg dWludDMyIHN0YXRzX3F1ZXJpZXNfY2hlY2tlZDsJLyogTnVtYmVyIG9mIHF1ZXJpZXMgY2hlY2tl ZCAqLworCXZvbGF0aWxlIHVpbnQzMiBzdGF0c19mb3JjZWRfcHJpbWFyeTsJCS8qIFF1ZXJpZXMg Zm9yY2VkIHRvIHByaW1hcnkgKi8KKwl2b2xhdGlsZSB1aW50MzIgc3RhdHNfYWxsb3dlZF9yZXBs aWNhOwkvKiBRdWVyaWVzIGFsbG93ZWQgdG8gcmVwbGljYSAqLworfSBNZW1vcnlNYXBTdGF0ZTsK KworLyoKKyAqIE1haW4gc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgY29t cG9uZW50cworICovCit0eXBlZGVmIHN0cnVjdCBNZW1vcnlNYXBTaG1lbQoreworCU1lbW9yeU1h cFN0YXRlCQlzdGF0ZTsKKwlUYWJsZU11dGF0aW9uSGFzaFRhYmxlCSp0YWJsZV9tYXA7CisJUXVl cnlQYXJzZUNhY2hlCQkqcXVlcnlfY2FjaGU7Cit9IE1lbW9yeU1hcFNobWVtOworCisvKiAtLS0t LS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3Ig bWVtb3J5IG1hcC4KKyAqIENhbGxlZCBmcm9tIHBncG9vbF9tYWluLmMgYWZ0ZXIgcG9vbF9pbml0 X3Bvb2xfaW5mbygpLgorICovCitleHRlcm4gdm9pZCBwb29sX21lbW9yeV9tYXBfaW5pdCh2b2lk KTsKKworLyoKKyAqIEluaXRpYWxpemUgcGVyLWNoaWxkIHByb2Nlc3Mgc3RhdGUgZm9yIG1lbW9y eSBtYXAuCisgKiBDYWxsZWQgZnJvbSBjaGlsZC5jIHdoZW4gYSBuZXcgY2hpbGQgcHJvY2VzcyBz dGFydHMuCisgKiBTZXRzIHVwIGNvbGQgc3RhcnQgdHJhY2tpbmcuCisgKi8KK2V4dGVybiB2b2lk IHBvb2xfbWVtb3J5X21hcF9jaGlsZF9pbml0KHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgdGhl IGNoaWxkIHByb2Nlc3MgaXMgaW4gY29sZCBzdGFydCBwZXJpb2QuCisgKiBEdXJpbmcgY29sZCBz dGFydCwgYWxsIHF1ZXJpZXMgYXJlIHJvdXRlZCB0byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVl IGlmIGluIGNvbGQgc3RhcnQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworZXh0ZXJuIGJvb2wgcG9v bF9tZW1vcnlfbWFwX2luX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBDaGVjayBpZiBhIHRh YmxlIHdhcyByZWNlbnRseSB3cml0dGVuIHRvIChpcyAic3RhbGUiKS4KKyAqIElmIHN0YWxlLCBy ZWFkcyBmcm9tIHRoaXMgdGFibGUgc2hvdWxkIGdvIHRvIHByaW1hcnkuCisgKiBSZXR1cm5zIHRy dWUgaWYgdGFibGUgaXMgc3RhbGUgKHJlY2VudGx5IHdyaXR0ZW4pLCBmYWxzZSBvdGhlcndpc2Uu CisgKi8KK2V4dGVybiBib29sIHBvb2xfbWVtb3J5X21hcF90YWJsZV9pc19zdGFsZShjb25zdCBj aGFyICp0YWJsZV9uYW1lKTsKKworLyoKKyAqIE1hcmsgdGFibGVzIGFzIHJlY2VudGx5IHdyaXR0 ZW4uCisgKiBDYWxsZWQgYWZ0ZXIgSU5TRVJUL1VQREFURS9ERUxFVEUgcXVlcmllcyBjb21wbGV0 ZS4KKyAqIHRhYmxlX25hbWVzOiBhcnJheSBvZiB0YWJsZSBuYW1lcworICogbnVtX3RhYmxlczog bnVtYmVyIG9mIHRhYmxlcyBpbiBhcnJheQorICovCitleHRlcm4gdm9pZCBwb29sX21lbW9yeV9t YXBfbWFya190YWJsZXNfd3JpdHRlbihjb25zdCBjaGFyICoqdGFibGVfbmFtZXMsIGludCBudW1f dGFibGVzKTsKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIG1hcmsgYSBzaW5nbGUg dGFibGUgYXMgd3JpdHRlbi4KKyAqIHRhYmxlX25hbWU6IGZ1bGx5IHF1YWxpZmllZCB0YWJsZSBu YW1lCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfbWVtb3J5X21hcF9tYXJrX3RhYmxlX3dyaXR0ZW4o Y29uc3QgY2hhciAqdGFibGVfbmFtZSk7CisKKy8qCisgKiBVcGRhdGUgdGhlIFRUTCBiYXNlZCBv biBjdXJyZW50IHJlcGxpY2F0aW9uIGRlbGF5LgorICogQ2FsbGVkIGZyb20gcG9vbF93b3JrZXJf Y2hpbGQuYyB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVwZGF0ZWQuCisgKiBkZWxheV91czog cmVwbGljYXRpb24gZGVsYXkgaW4gbWljcm9zZWNvbmRzCisgKi8KK2V4dGVybiB2b2lkIHBvb2xf bWVtb3J5X21hcF91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cyk7CisKKy8qCisgKiBMb29rIHVw IGNhY2hlZCBwYXJzZSByZXN1bHQgZm9yIGEgcXVlcnkuCisgKiBoYXNoOiBoYXNoIG9mIG5vcm1h bGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiBvdXRwdXQgLSB0cnVlIGlmIHF1ZXJ5IGlzIGEgd3Jp dGUKKyAqIHRhYmxlX25hbWVzOiBvdXRwdXQgLSBhcnJheSB0byBmaWxsIHdpdGggdGFibGUgbmFt ZXMKKyAqIG51bV90YWJsZXM6IG91dHB1dCAtIG51bWJlciBvZiB0YWJsZXMgZm91bmQKKyAqIFJl dHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiBjYWNoZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRl cm4gYm9vbCBwb29sX21lbW9yeV9tYXBfZ2V0X2NhY2hlZF9wYXJzZSh1aW50NjQgaGFzaCwgYm9v bCAqaXNfd3JpdGUsCisJCQkJCQkJCQkJCSBjaGFyIHRhYmxlX25hbWVzW11bTUVNT1JZX01BUF9U QUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJCQkJCSBpbnQgKm51bV90YWJsZXMpOworCisvKgorICog Q2FjaGUgYSBwYXJzZSByZXN1bHQgZm9yIGEgcXVlcnkuCisgKiBoYXNoOiBoYXNoIG9mIG5vcm1h bGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiB0cnVlIGlmIHF1ZXJ5IGlzIGEgd3JpdGUKKyAqIHRh YmxlX25hbWVzOiBhcnJheSBvZiB0YWJsZSBuYW1lcworICogbnVtX3RhYmxlczogbnVtYmVyIG9m IHRhYmxlcworICovCitleHRlcm4gdm9pZCBwb29sX21lbW9yeV9tYXBfY2FjaGVfcGFyc2UodWlu dDY0IGhhc2gsIGJvb2wgaXNfd3JpdGUsCisJCQkJCQkJCQkJY29uc3QgY2hhciB0YWJsZV9uYW1l c1tdW01FTU9SWV9NQVBfVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkJCWludCBudW1fdGFibGVz KTsKKworLyoKKyAqIE5vcm1hbGl6ZSBhIHF1ZXJ5IGFuZCBjb21wdXRlIGl0cyBoYXNoLgorICog U3RyaXBzIGNvbW1lbnRzLCBub3JtYWxpemVzIHdoaXRlc3BhY2UgYW5kIGxpdGVyYWxzLgorICog cXVlcnk6IGlucHV0IFNRTCBxdWVyeSBzdHJpbmcKKyAqIFJldHVybnM6IDY0LWJpdCBoYXNoIG9m IG5vcm1hbGl6ZWQgcXVlcnkKKyAqLworZXh0ZXJuIHVpbnQ2NCBwb29sX21lbW9yeV9tYXBfbm9y bWFsaXplX2FuZF9oYXNoKGNvbnN0IGNoYXIgKnF1ZXJ5KTsKKworLyoKKyAqIEdldCB0aGUgY3Vy cmVudCBUVEwgaW4gbWljcm9zZWNvbmRzLgorICovCitleHRlcm4gdWludDY0IHBvb2xfbWVtb3J5 X21hcF9nZXRfdHRsKHZvaWQpOworCisvKgorICogQ2FsY3VsYXRlIHJlcXVpcmVkIHNoYXJlZCBt ZW1vcnkgc2l6ZSBmb3IgbWVtb3J5IG1hcC4KKyAqLworZXh0ZXJuIFNpemUgcG9vbF9tZW1vcnlf bWFwX3NobWVtX3NpemUodm9pZCk7CisKKy8qCisgKiBHZXQgbWVtb3J5IG1hcCBzdGF0aXN0aWNz IGZvciBtb25pdG9yaW5nLgorICovCitleHRlcm4gdm9pZCBwb29sX21lbW9yeV9tYXBfZ2V0X3N0 YXRzKHVpbnQzMiAqcXVlcmllc19jaGVja2VkLAorCQkJCQkJCQkJICB1aW50MzIgKmZvcmNlZF9w cmltYXJ5LAorCQkJCQkJCQkJICB1aW50MzIgKmFsbG93ZWRfcmVwbGljYSwKKwkJCQkJCQkJCSAg dWludDY0ICpjdXJyZW50X3R0bF91cyk7CisKKyNlbmRpZiAvKiBQT09MX01FTU9SWV9NQVBfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcGdwb29sX21haW4uYyBiL3NyYy9tYWluL3BncG9vbF9t YWluLmMKaW5kZXggZmEwNWUxNWU3YWM0MzVlMDcyMjk4MDYzZjkxOGM3MGFhNGU1NjgwYy4uNWRk ZWQzZmUzZGQxZDhkOTFlZGYyZTBmOTAxZmY2Y2JkMDFmY2EwNCAxMDA2NDQKLS0tIGEvc3JjL21h aW4vcGdwb29sX21haW4uYworKysgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCkBAIC01Nyw2ICs1 Nyw3IEBACiAjaW5jbHVkZSAiYXV0aC9wb29sX3Bhc3N3ZC5oIgogI2luY2x1ZGUgImF1dGgvcG9v bF9oYmEuaCIKICNpbmNsdWRlICJxdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5oIgorI2luY2x1 ZGUgInV0aWxzL3Bvb2xfbWVtb3J5X21hcC5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2ludGVy bmFsX2NvbW1hbmRzLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNoZWNrLmgiCiAjaW5j bHVkZSAid2F0Y2hkb2cvd2F0Y2hkb2cuaCIKQEAgLTMwNjgsNiArMzA2OSwxMiBAQCBpbml0aWFs aXplX3NoYXJlZF9tZW1fb2JqZWN0cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAJCWVs b2coREVCVUcxLCAid2F0Y2hkb2c6ICV6dSBieXRlcyByZXF1ZXN0ZWQgZm9yIHNoYXJlZCBtZW1v cnkiLCBNQVhBTElHTih3ZF9pcGNfZ2V0X3NoYXJlZF9tZW1fc2l6ZSgpKSk7CiAJfQogCisJaWYg KHBvb2xfY29uZmlnLT5tZW1vcnlfbWFwX2VuYWJsZWQpCisJeworCQlzaXplICs9IE1BWEFMSUdO KHBvb2xfbWVtb3J5X21hcF9zaG1lbV9zaXplKCkpOworCQllbG9nKERFQlVHMSwgIm1lbW9yeV9t YXA6ICV6dSBieXRlcyByZXF1ZXN0ZWQgZm9yIHNoYXJlZCBtZW1vcnkiLCBNQVhBTElHTihwb29s X21lbW9yeV9tYXBfc2htZW1fc2l6ZSgpKSk7CisJfQorCiAJaW5pdGlhbGl6ZV9zaGFyZWRfbWVt b3J5X21haW5fc2VnbWVudChzaXplKTsKIAogCS8qIE1vdmUgdGhlIGJhY2tlbmQgZGVzY3JpcHRv cnMgdG8gc2hhcmVkIG1lbW9yeSAqLwpAQCAtMzE4NCw2ICszMTkxLDEyIEBAIGluaXRpYWxpemVf c2hhcmVkX21lbV9vYmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJd2RfaXBj X2luaXRpYWxpemVfZGF0YSgpOwogCX0KIAorCS8qIEluaXRpYWxpemUgbWVtb3J5IG1hcCBmb3Ig dHJhY2tpbmcgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgKi8KKwlpZiAocG9vbF9jb25maWctPm1l bW9yeV9tYXBfZW5hYmxlZCkKKwl7CisJCXBvb2xfbWVtb3J5X21hcF9pbml0KCk7CisJfQorCiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMgYi9zcmMv cHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMKaW5kZXggYTNiOGYwZWExOTRmZmVjYzc5ZTU4NTY2 YmU4MDU2MmE0NmViNzVhYi4uOWIwNjgxY2E0NmFjMjYwMmQzZjU0MWFkMzExOTc3MGQ0MjJmYjBj MyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCisrKyBiL3NyYy9w cm90b2NvbC9Db21tYW5kQ29tcGxldGUuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgInV0 aWxzL3BhbGxvYy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX21lbW9yeV9tYXAuaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX3NlbGVjdF93YWxrZXIuaCIKIAogc3RhdGljIGludAlleHRyYWN0 X250dXBsZXMoY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgUE9PTF9TVEFUVVMgaGFuZGxlX21pc21h dGNoX3R1cGxlcyhQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9P TCAqYmFja2VuZCwgY2hhciAqcGFja2V0LCBpbnQgcGFja2V0bGVuLCBib29sIGNvbW1hbmRfY29t cGxldGUpOwpAQCAtMzA0LDYgKzMwNiwzOCBAQCBoYW5kbGVfcXVlcnlfY29udGV4dChQT09MX0NP Tk5FQ1RJT05fUE9PTCAqYmFja2VuZCkKIAogCW5vZGUgPSBzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5 X2NvbnRleHQtPnBhcnNlX3RyZWU7CiAKKwkvKgorCSAqIFRyYWNrIHRhYmxlIHdyaXRlcyBmb3Ig bWVtb3J5IG1hcCBmZWF0dXJlLgorCSAqIE1hcmsgdGFibGVzIGFzIHdyaXR0ZW4gd2hlbiBJTlNF UlQvVVBEQVRFL0RFTEVURSBjb21wbGV0ZXMuCisJICovCisJaWYgKHBvb2xfY29uZmlnLT5tZW1v cnlfbWFwX2VuYWJsZWQpCisJeworCQljaGFyCSAgICp0YWJsZV9uYW1lID0gTlVMTDsKKworCQlp ZiAoSXNBKG5vZGUsIEluc2VydFN0bXQpKQorCQl7CisJCQlJbnNlcnRTdG10ICpzdG10ID0gKElu c2VydFN0bXQgKikgbm9kZTsKKwkJCXRhYmxlX25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9y YW5nZXZhcihzdG10LT5yZWxhdGlvbik7CisJCX0KKwkJZWxzZSBpZiAoSXNBKG5vZGUsIFVwZGF0 ZVN0bXQpKQorCQl7CisJCQlVcGRhdGVTdG10ICpzdG10ID0gKFVwZGF0ZVN0bXQgKikgbm9kZTsK KwkJCXRhYmxlX25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxh dGlvbik7CisJCX0KKwkJZWxzZSBpZiAoSXNBKG5vZGUsIERlbGV0ZVN0bXQpKQorCQl7CisJCQlE ZWxldGVTdG10ICpzdG10ID0gKERlbGV0ZVN0bXQgKikgbm9kZTsKKwkJCXRhYmxlX25hbWUgPSBt YWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlvbik7CisJCX0KKworCQlp ZiAodGFibGVfbmFtZSAhPSBOVUxMKQorCQl7CisJCQlwb29sX21lbW9yeV9tYXBfbWFya190YWJs ZV93cml0dGVuKHRhYmxlX25hbWUpOworCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCShlcnJtc2co Im1lbW9yeSBtYXA6IG1hcmtlZCB0YWJsZSBcIiVzXCIgYXMgd3JpdHRlbiIsIHRhYmxlX25hbWUp KSk7CisJCX0KKwl9CisKIAlpZiAoSXNBKG5vZGUsIFByZXBhcmVTdG10KSkKIAl7CiAJCWlmIChz ZXNzaW9uX2NvbnRleHQtPnVuY29tcGxldGVkX21lc3NhZ2UpCmRpZmYgLS1naXQgYS9zcmMvcHJv dG9jb2wvY2hpbGQuYyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCmluZGV4IGMzNGYwNTcyODFiZTYy ZmVhZjM5ZGIxYmI2MDUwNjJmNTZkYzM5OGMuLjA3ZWU1OGM2YTQ4ZGNkM2VmNmQ3OTk3MGUwOGE2 Zjc3Yjg5MjRlMWQgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9jaGlsZC5jCisrKyBiL3NyYy9w cm90b2NvbC9jaGlsZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAidXRpbHMvZWxvZy5o IgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFt cC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfbWVtb3J5X21hcC5oIgogCiAjaW5jbHVkZSAiY29u dGV4dC9wb29sX3Byb2Nlc3NfY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9zZXNz aW9uX2NvbnRleHQuaCIKQEAgLTIxMyw2ICsyMTQsMTIgQEAgZG9fY2hpbGQoaW50ICpmZHMpCiAJ LyogSW5pdGlhbGl6ZSBwZXIgcHJvY2VzcyBjb250ZXh0ICovCiAJcG9vbF9pbml0X3Byb2Nlc3Nf Y29udGV4dCgpOwogCisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgbWFwIGNoaWxkIHN0YXRlIGZvciBj b2xkIHN0YXJ0IHRyYWNraW5nICovCisJaWYgKHBvb2xfY29uZmlnLT5tZW1vcnlfbWFwX2VuYWJs ZWQpCisJeworCQlwb29sX21lbW9yeV9tYXBfY2hpbGRfaW5pdCgpOworCX0KKwogCS8qIGluaXRp YWxpemUgY29ubmVjdGlvbiBwb29sICovCiAJaWYgKHBvb2xfaW5pdF9jcCgpKQogCXsKZGlmZiAt LWdpdCBhL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbSBiL3NyYy9zYW1wbGUv cGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQppbmRleCA0NTRmZGI5ZTVkMWZkNjU0MzdiNmE2N2Yx MmFiNjI2NThlYTA4ZjQ5Li5hMjQ1ZDU4YmYzMzM5OTEzNjAyMTQzZGExYjgzYjk2NGZlNWRjYWVi IDEwMDY0NAotLS0gYS9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KKysrIGIv c3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCkBAIC00OTksNiArNDk5LDUxIEBA IGJhY2tlbmRfY2x1c3RlcmluZ19tb2RlID0gc3RyZWFtaW5nX3JlcGxpY2F0aW9uCiAjc3RhdGVt ZW50X2xldmVsX2xvYWRfYmFsYW5jZSA9IG9mZgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIEVuYWJsZXMgc3RhdGVtZW50IGxldmVsIGxvYWQgYmFsYW5jaW5nCiAKKyMgLSBN ZW1vcnkgTWFwIChMYWdsZXNzIFJlYWQgUmVwbGljYSkgLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIFdBUk5JTkc6IEVuYWJsaW5nIHRoaXMgZmVhdHVyZSBpbmNyZWFzZXMg c2hhcmVkIG1lbW9yeSB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IERlZmF1bHQgc2V0dGluZ3MgcmVxdWlyZSB+Ni42IE1CIHNoYXJlZCBtZW1vcnkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoMC4zIE1CIHRhYmxlIHRyYWNraW5nICsgNi4z IE1CIHF1ZXJ5IGNhY2hlKQorCisjbWVtb3J5X21hcF9lbmFibGVkID0gb2ZmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5hYmxlIGluLW1lbW9yeSB0cmFja2luZyBvZiBy ZWNlbnRseSB3cml0dGVuIHRhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhcyBkdXJpbmcgcmVwbGljYXRp b24gbGFnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1 aXJlcyByZWxvYWQpCisKKyNtZW1vcnlfbWFwX3R0bF9mYWN0b3IgPSA1LjAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBUVEwgbXVsdGlwbGllcjogVFRMID0gcmVwbGljYXRp b25fZGVsYXkgKiBmYWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBI aWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBzYWZldHkgbWFyZ2luCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDEuMC0xMDAuMCAoZGVmYXVsdDogNS4wKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2Fk KQorCisjbWVtb3J5X21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByb3V0 ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgYWZ0ZXIgY2hpbGQgcHJvY2VzcyBzdGFydHMgKGNvbGQgc3RhcnQgcGVyaW9kKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAwLTYwMDAwIG1zIChkZWZh dWx0OiAyMDAwIG1zID0gMiBzZWNvbmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisj bWVtb3J5X21hcF90YWJsZV9idWNrZXRzID0gMTAyNAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRhYmxlIG11dGF0aW9uIHRy YWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGlnaGVyIHZhbHVl cyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAxMDI0KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI21lbW9yeV9t YXBfdGFibGVfc2l6ZSA9IDIwNDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgdG8gdHJhY2sgc2ltdWx0YW5lb3VzbHkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMTI4LTEzMTA3MiAoZGVmYXVs dDogMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJl cXVpcmVzIHJlc3RhcnQpCisKKyNtZW1vcnlfbWFwX3F1ZXJ5X2J1Y2tldHMgPSAyMDQ4CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBm b3IgcXVlcnkgcGFyc2UgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBSYW5nZTogNjQtNjU1MzYgKGRlZmF1bHQ6IDIwNDgpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisjbWVtb3J5X21hcF9x dWVyeV9jYWNoZV9zaXplID0gMTAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBwYXJzZSByZXN1bHRzIHRvIGNhY2hlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDEwMC0xMDAwMDAwIChkZWZh dWx0OiAxMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZW1vcnkg dXNhZ2U6IH42NDAgYnl0ZXMgcGVyIGVudHJ5ICh+Ni4zIE1CIGRlZmF1bHQsIH42NCBNQiBmb3Ig MTAwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVx dWlyZXMgcmVzdGFydCkKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTVFJFQU1JTkcgUkVQ TElDQVRJT04gTU9ERQogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3N0 cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jIGIvc3JjL3N0cmVhbWluZ19y ZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCmluZGV4IDMxMWI2Mzg2NThlNjZlYmI1NjE2 MmFkOWZhNDM5MjMxNWIyZGY2NGUuLmNhMGM0NjhiNGY1NmE3MTVhMGFlNzczZmRlZmU1MTA0NDQw ZTM4NjAgMTAwNjQ0Ci0tLSBhL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJf Y2hpbGQuYworKysgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxk LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9wb29sX2lwLmgiCiAjaW5jbHVk ZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX21lbW9yeV9tYXAuaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9v bF9wcm9jZXNzX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250 ZXh0LmgiCkBAIC02OTUsNiArNjk2LDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0 aF9jbWQodm9pZCkKIAlkb3VibGUJCWRlbGF5X21zOwogCXVpbnQ2NAkJZGVsYXk7CiAJdWludDY0 CQlkZWxheV90aHJlc2hvbGRfYnlfdGltZTsKKwl1aW50NjQJCW1heF9kZWxheV91cyA9IDA7CS8q IFRyYWNrIG1heGltdW0gZGVsYXkgZm9yIG1lbW9yeSBtYXAgKi8KIAlpbnQJCQl0b2tlbl9jb3Vu dCA9IDA7CiAJaW50CQkJcHJpbWFyeV9ub2RlX2lkOwogCWludAkJCXNhdmVfZXJybm87CkBAIC0x MDAzLDYgKzEwMDUsMTAgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9p ZCkKIAkJCWJraW5mby0+c3RhbmRieV9kZWxheSA9IGRlbGF5OwogCQkJYmtpbmZvLT5zdGFuZGJ5 X2RlbGF5X2J5X3RpbWUgPSB0cnVlOwogCisJCQkvKiBUcmFjayBtYXhpbXVtIGRlbGF5IGZvciBt ZW1vcnkgbWFwIFRUTCBjYWxjdWxhdGlvbiAqLworCQkJaWYgKGRlbGF5ID4gbWF4X2RlbGF5X3Vz KQorCQkJCW1heF9kZWxheV91cyA9IGRlbGF5OworCiAJCQkvKgogCQkJICogTG9nIGRlbGF5IGlm IG5lY2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1pbGxpc2Vjb25kcywgY29udmVydAogCQkJICog dG8gbWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsxMDI3LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9u X3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0b2tlbiA9IHN0cnRva19yKE5VTEwsICIgXHRc biIsICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVwZGF0ZSBtZW1vcnkgbWFwIFRUTCBiYXNlZCBv biBtYXhpbXVtIG9ic2VydmVkIGRlbGF5ICovCisJCWlmIChwb29sX2NvbmZpZy0+bWVtb3J5X21h cF9lbmFibGVkICYmIG1heF9kZWxheV91cyA+IDApCisJCQlwb29sX21lbW9yeV9tYXBfdXBkYXRl X3R0bChtYXhfZGVsYXlfdXMpOworCiAJfQogCVBHX0NBVENIKCk7CiAJewpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDUubWVtb3J5X21hcC90ZXN0LnNoIGIvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZXN0cy8wNDUubWVtb3J5X21hcC90ZXN0LnNoCm5ldyBmaWxlIG1vZGUg MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNl MDU0MTgyNjI2NjRlNTEzM2UyZmZkNDc4YzdhZTYyMmIwNjJjYzcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0NS5tZW1vcnlfbWFwL3Rlc3Quc2gKQEAgLTAs MCArMSwxOTYgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2Ny aXB0IGZvciBtZW1vcnkgbWFwIGZlYXR1cmUgKGluLW1lbW9yeSB0YWJsZSB0cmFja2luZykuCisj IFRlc3RzIHJvdXRpbmcgb2YgcXVlcmllcyBiYXNlZCBvbiByZWNlbnRseSB3cml0dGVuIHRhYmxl cy4KKyMKK3NvdXJjZSAkVEVTVExJQlMKK1RFU1RESVI9dGVzdGRpcgorUFNRTD0kUEdCSU4vcHNx bAorUFNRTE9QVFM9Ii1hIC1xIC1YIgorUEdQT09MQklOPSRQR1BPT0xfSU5TVEFMTF9ESVIvYmlu CitleHBvcnQgUEdEQVRBQkFTRT10ZXN0CisKKyMgT25seSBydW4gaW4gc3RyZWFtaW5nIHJlcGxp Y2F0aW9uIG1vZGUgc2luY2UgdGhhdCdzIHRoZSB0YXJnZXQgdXNlIGNhc2UKK2ZvciBtb2RlIGlu IHMKK2RvCisgICAgcm0gLWZyICRURVNURElSCisgICAgbWtkaXIgJFRFU1RESVIKKyAgICBjZCAk VEVTVERJUgorCisgICAgIyBDcmVhdGUgdGVzdCBlbnZpcm9ubWVudCB3aXRoIDIgbm9kZXMKKyAg ICBlY2hvIC1uICJjcmVhdGluZyB0ZXN0IGVudmlyb25tZW50Li4uIgorICAgICRQR1BPT0xfU0VU VVAgLW0gJG1vZGUgLW4gMiB8fCBleGl0IDEKKyAgICBlY2hvICJkb25lLiIKKworICAgIHNvdXJj ZSAuL2Jhc2hyYy5wb3J0cworCisgICAgIyBDb25maWd1cmUgbWVtb3J5IG1hcCBmZWF0dXJlCisg ICAgZWNobyAibWVtb3J5X21hcF9lbmFibGVkID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAg IGVjaG8gIm1lbW9yeV9tYXBfdHRsX2ZhY3RvciA9IDUuMCIgPj4gZXRjL3BncG9vbC5jb25mCisg ICAgZWNobyAibWVtb3J5X21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMCIgPj4gZXRjL3Bn cG9vbC5jb25mCisKKyAgICAjIENvbmZpZ3VyZSB3ZWlnaHRzIHNvIHdlIGNhbiBkaXN0aW5ndWlz aCByb3V0aW5nCisgICAgIyBCYWNrZW5kIDAgKHByaW1hcnkpIHdlaWdodD0wLCBCYWNrZW5kIDEg KHN0YW5kYnkpIHdlaWdodD0xCisgICAgIyBUaGlzIG1lYW5zIGxvYWQgYmFsYW5jZWQgcXVlcmll cyBnbyB0byBub2RlIDEgYnkgZGVmYXVsdAorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MCA9IDAi ID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MSA9IDEiID4+IGV0 Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUgcm91dGlu ZyBkZWNpc2lvbnMKKyAgICBlY2hvICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIiA+PiBldGMv cGdwb29sLmNvbmYKKworICAgIC4vc3RhcnRhbGwKKworICAgIGV4cG9ydCBQR1BPUlQ9JFBHUE9P TF9QT1JUCisKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBDcmVhdGUgdGVz dCB0YWJsZXMKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUgVEFCTEUgdDEoaSBJTlRFR0VS KTsKK0NSRUFURSBUQUJMRSB0MihpIElOVEVHRVIpOworQ1JFQVRFIFRBQkxFIHQzKGkgSU5URUdF Uik7CitFT0YKKworICAgIGVjaG8gIj09PSBUZXN0IDE6IENvbGQgU3RhcnQgUm91dGluZyA9PT0i CisgICAgIyBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgc2hvdWxkIGdvIHRvIHByaW1h cnkKKyAgICAjIFJlc3RhcnQgcGdwb29sIHRvIHRyaWdnZXIgY29sZCBzdGFydAorICAgIC4vc2h1 dGRvd25hbGwKKyAgICAuL3N0YXJ0YWxsCisgICAgd2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKwor ICAgICMgSW1tZWRpYXRlbHkgcXVlcnkgLSBzaG91bGQgZ28gdG8gcHJpbWFyeSBkdWUgdG8gY29s ZCBzdGFydAorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY29sZF9zdGFydF90ZXN0JyBhcyBt YXJrZXIsICogRlJPTSB0MTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgQ2hlY2sgbG9nIGZv ciBjb2xkIHN0YXJ0IG1lc3NhZ2UKKyAgICBpZiBncmVwIC1xICJjb3VsZCBub3QgbG9hZCBiYWxh bmNlIGJlY2F1c2Ugb2YgbWVtb3J5IG1hcCBjb2xkIHN0YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhl bgorICAgICAgICBlY2hvICJUZXN0IDEgUEFTU0VEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgd29ya3Mi CisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDEgRkFJTEVEOiBDb2xkIHN0YXJ0IHJvdXRp bmcgbm90IGRldGVjdGVkIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQor ICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAyOiBXYWl0IGZvciBjb2xkIHN0YXJ0IHRvIGVu ZCA9PT0iCisgICAgIyBXYWl0IGZvciBjb2xkIHN0YXJ0IHBlcmlvZCB0byBlbmQgKDIgc2Vjb25k cykKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wu bG9nCisKKyAgICAjIE5vdyBhIGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFuY2Ug KGdvIHRvIG5vZGUgMSkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRfc3Rh cnQnIGFzIG1hcmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBBZnRl ciBjb2xkIHN0YXJ0LCBxdWVyaWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxhbmNl CisgICAgIyBDaGVjayB0aGF0IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1ZSB0 byBtZW1vcnkgbWFwCisgICAgaWYgZ3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNh dXNlIG9mIG1lbW9yeSBtYXAgY29sZCBzdGFydCIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAg ICAgZWNobyAiVGVzdCAyIEZBSUxFRDogU3RpbGwgaW4gY29sZCBzdGFydCBhZnRlciB3YWl0aW5n IgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNo byAiVGVzdCAyIFBBU1NFRDogQ29sZCBzdGFydCBlbmRlZCBjb3JyZWN0bHkiCisKKyAgICBlY2hv ICI9PT0gVGVzdCAzOiBXcml0ZS10aGVuLVJlYWQgUm91dGluZyA9PT0iCisgICAgIyBDbGVhciB0 aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSB0byB0MQorICAgICRQ U1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSk7IiA+IC9kZXYvbnVsbCAyPiYx CisKKyAgICAjIEltbWVkaWF0ZWx5IHJlYWQgZnJvbSB0MSAtIHNob3VsZCBnbyB0byBwcmltYXJ5 IGR1ZSB0byByZWNlbnQgd3JpdGUKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ3dyaXRlX3Jl YWRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDE7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAj IENoZWNrIGxvZyBmb3IgdGFibGUgc3RhbGVuZXNzIG1lc3NhZ2UKKyAgICBpZiBncmVwIC1xICJj b3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVu IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDMgUEFTU0VEOiBXcml0 ZS10aGVuLXJlYWQgcm91dGluZyB3b3JrcyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3Qg MyBGQUlMRUQ6IFRhYmxlIHN0YWxlbmVzcyBub3QgZGV0ZWN0ZWQgYWZ0ZXIgd3JpdGUiCisgICAg ICAgICMgU2hvdyByZWxldmFudCBsb2cgZW50cmllcyBmb3IgZGVidWdnaW5nCisgICAgICAgIGdy ZXAgLWkgIm1lbW9yeSIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRk b3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA0OiBD bGVhbiBUYWJsZSBTdGlsbCBMb2FkIEJhbGFuY2VzID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cK KyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFJlYWQgZnJvbSB0MiAobmV2ZXIgd3JpdHRl biB0bykgLSBzaG91bGQgbG9hZCBiYWxhbmNlCisgICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdj bGVhbl90YWJsZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MjsiID4gL2Rldi9udWxsIDI+JjEK KworICAgICMgU2hvdWxkIE5PVCBzZWUgbWVtb3J5IG1hcCBibG9ja2luZyBtZXNzYWdlIGZvciB0 MgorICAgIGlmIGdyZXAgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4q dDIuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBl Y2hvICJUZXN0IDQgRkFJTEVEOiBDbGVhbiB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3Rh bGUiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBl Y2hvICJUZXN0IDQgUEFTU0VEOiBDbGVhbiB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisg ICAgZWNobyAiPT09IFRlc3QgNTogVVBEQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAg ICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0 MgorICAgICRQU1FMIHRlc3QgLWMgIlVQREFURSB0MiBTRVQgaSA9IDk5OSBXSEVSRSBpID0gMDsi ID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgSW1tZWRpYXRlbHkgcmVhZCBmcm9tIHQyIC0gc2hv dWxkIGdvIHRvIHByaW1hcnkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ3VwZGF0ZV90ZXN0 JyBhcyBtYXJrZXIsICogRlJPTSB0MjsiID4gL2Rldi9udWxsIDI+JjEKKworICAgIGlmIGdyZXAg LXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdy aXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNSBQQVNTRUQ6 IFVQREFURSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRl c3QgNSBGQUlMRUQ6IFVQREFURSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAg IC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBU ZXN0IDY6IERFTEVURSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUg bG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBEZWxldGUgZnJvbSB0MworICAgICRQ U1FMIHRlc3QgLWMgIkRFTEVURSBGUk9NIHQzIFdIRVJFIGkgPSAwOyIgPiAvZGV2L251bGwgMj4m MQorCisgICAgIyBJbW1lZGlhdGVseSByZWFkIGZyb20gdDMgLSBzaG91bGQgZ28gdG8gcHJpbWFy eQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnZGVsZXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBG Uk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgaWYgZ3JlcCAtcSAiY291bGQgbm90IGxv YWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9v bC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA2IFBBU1NFRDogREVMRVRFIG1hcmtzIHRh YmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA2IEZBSUxFRDogREVM RVRFIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAor ICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNzogTXVsdGktVGFi bGUgUXVlcnkgd2l0aCBPbmUgU3RhbGUgVGFibGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZwor ICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgQ3JlYXRlIGEgbmV3IGNsZWFuIHRhYmxlCisg ICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHQ0KGkgSU5URUdFUik7IiA+IC9kZXYvbnVs bCAyPiYxCisKKyAgICAjIFdhaXQgYSBiaXQgZm9yIFRUTCB0byBleHBpcmUgb24gb3RoZXIgdGFi bGVzIGlmIGZhY3RvciBpcyBsb3cKKyAgICBzbGVlcCAxCisKKyAgICAjIFdyaXRlIHRvIHQxIG9u bHkKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEwMCk7IiA+IC9k ZXYvbnVsbCAyPiYxCisKKyAgICAjIFF1ZXJ5IGpvaW5pbmcgdDEgYW5kIHQ0IC0gc2hvdWxkIGdv IHRvIHByaW1hcnkgYmVjYXVzZSB0MSBpcyBzdGFsZQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVD VCAnbXVsdGlfdGFibGVfdGVzdCcgYXMgbWFya2VyIEZST00gdDEsIHQ0OyIgPiAvZGV2L251bGwg Mj4mMQorCisgICAgaWYgZ3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRh YmxlLip0MS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAg ICAgIGVjaG8gIlRlc3QgNyBQQVNTRUQ6IE11bHRpLXRhYmxlIHF1ZXJ5IHJvdXRlcyB0byBwcmlt YXJ5IHdoZW4gb25lIHRhYmxlIGlzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVz dCA3IEZBSUxFRDogTXVsdGktdGFibGUgc3RhbGVuZXNzIG5vdCBkZXRlY3RlZCIKKyAgICAgICAg Li9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiIgorICAg IGVjaG8gIj09PSBBbGwgTWVtb3J5IE1hcCBUZXN0cyBQQVNTRUQgPT09IgorCisgICAgLi9zaHV0 ZG93bmFsbAorCisgICAgY2QgLi4KK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zcmMvdXRp bHMvcG9vbF9tZW1vcnlfbWFwLmMgYi9zcmMvdXRpbHMvcG9vbF9tZW1vcnlfbWFwLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uM2YwMGVjMWUyYWZlZjY1MTg1MzI4MDQzOTE2MzMxNzVmZDM1MTgxMQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy91dGlscy9wb29sX21lbW9yeV9tYXAuYwpAQCAtMCwwICsxLDEwNzYgQEAK Ky8qIC0qLXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRl bnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3JpdHRlbiBieSBU YXRzdW8gSXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9u IGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CisgKiBncmFudGVkLCBw cm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKKyAq IGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uCisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5k IHRoYXQgdGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Igbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNp bmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAqIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gVGhl IGF1dGhvciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0 eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcwor ICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIHBvb2xf bWVtb3J5X21hcC5jOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0YWJs ZXMKKyAqICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBmcm9tIHJlcGxp Y2FzIGR1cmluZyByZXBsaWNhdGlvbiBsYWcKKyAqCisgKiBCYXNlZCBvbiB0aGUgImxhZ2xlc3Mi IGFyY2hpdGVjdHVyZSBmcm9tIFRhaWxvciBCcmFuZHM6CisgKiBodHRwczovL21lZGl1bS5jb20v dGFpbG9yLXRlY2gvdXNpbmctZGF0YWJhc2UtcmVhZC1yZXBsaWNhcy1pbi1kaXN0cmlidXRlZC1z eXN0ZW1zLWQ4MGVhZjZiYmY4YQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor CisjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgInBvb2xfY29uZmlnLmgiCisjaW5jbHVkZSAi dXRpbHMvcG9vbF9tZW1vcnlfbWFwLmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgorI2luY2x1 ZGUgInV0aWxzL3BhbGxvYy5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJp YWJsZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBQb2ludGVyIHRvIHNoYXJlZCBt ZW1vcnkgc3RydWN0dXJlICovCitzdGF0aWMgTWVtb3J5TWFwU2htZW0gKm1lbW9yeV9tYXBfc2ht ZW0gPSBOVUxMOworCisvKiBQZXItcHJvY2VzcyBjb2xkIHN0YXJ0IHRyYWNraW5nIChub3QgaW4g c2hhcmVkIG1lbW9yeSkgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBwcm9jZXNzX3N0YXJ0X3Rp bWU7CitzdGF0aWMgYm9vbCBjb2xkX3N0YXJ0X2luaXRpYWxpemVkID0gZmFsc2U7CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0KKyAqIEhlbHBlciBtYWNyb3MgZm9yIGFjY2Vzc2luZyBmbGV4aWJsZSBh cnJheXMgaW4gc2hhcmVkIG1lbW9yeQorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIEdl dCBwb2ludGVyIHRvIGJ1Y2tldCBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVf TUFQX0JVQ0tFVFMobWFwKSBcCisJKChpbnQgKikoKGNoYXIgKikobWFwKSArIHNpemVvZihUYWJs ZU11dGF0aW9uSGFzaFRhYmxlKSkpCisKKy8qIEdldCBwb2ludGVyIHRvIGVudHJ5IGFycmF5IGlu IHRhYmxlIG1hcCAqLworI2RlZmluZSBUQUJMRV9NQVBfRU5UUklFUyhtYXApIFwKKwkoKFRhYmxl TXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKShtYXApICsgc2l6ZW9mKFRhYmxlTXV0YXRpb25IYXNo VGFibGUpICsgXAorCQkJCQkJCShtYXApLT5udW1fYnVja2V0cyAqIHNpemVvZihpbnQpKSkKKwor LyogR2V0IHBvaW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHF1ZXJ5IGNhY2hlICovCisjZGVmaW5l IFFVRVJZX0NBQ0hFX0JVQ0tFVFMoY2FjaGUpIFwKKwkoKGludCAqKSgoY2hhciAqKShjYWNoZSkg KyBzaXplb2YoUXVlcnlQYXJzZUNhY2hlKSkpCisKKy8qIEdldCBwb2ludGVyIHRvIGVudHJ5IGFy cmF5IGluIHF1ZXJ5IGNhY2hlICovCisjZGVmaW5lIFFVRVJZX0NBQ0hFX0VOVFJJRVMoY2FjaGUp IFwKKwkoKFF1ZXJ5UGFyc2VFbnRyeSAqKSgoY2hhciAqKShjYWNoZSkgKyBzaXplb2YoUXVlcnlQ YXJzZUNhY2hlKSArIFwKKwkJCQkJCSAoY2FjaGUpLT5udW1fYnVja2V0cyAqIHNpemVvZihpbnQp KSkKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogU3BpbmxvY2sgb3BlcmF0aW9ucyB1c2luZyBh dG9taWMgY29tcGFyZS1hbmQtc3dhcAorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRp YyBpbmxpbmUgdm9pZAorc3Bpbl9sb2NrKHZvbGF0aWxlIHVpbnQzMiAqbG9jaykKK3sKKwl3aGls ZSAoX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KGxvY2ssIDEpKQorCXsKKwkJLyogU3BpbiB1bnRp bCB3ZSBhY3F1aXJlIHRoZSBsb2NrICovCisJCXdoaWxlICgqbG9jaykKKwkJCTsKKwl9Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZAorc3Bpbl91bmxvY2sodm9sYXRpbGUgdWludDMyICpsb2NrKQor eworCV9fc3luY19sb2NrX3JlbGVhc2UobG9jayk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0K KyAqIEhhc2ggZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZO Vi0xYSBoYXNoIGZvciBzdHJpbmdzCisgKi8KK3N0YXRpYyB1aW50MzIKK2ZudjFhX2hhc2hfc3Ry aW5nKGNvbnN0IGNoYXIgKnN0cikKK3sKKwl1aW50MzIgaGFzaCA9IDIxNjYxMzYyNjF1OyAgLyog Rk5WIG9mZnNldCBiYXNpcyAqLworCisJd2hpbGUgKCpzdHIpCisJeworCQloYXNoIF49ICh1aW50 OCkqc3RyKys7CisJCWhhc2ggKj0gMTY3Nzc2MTl1OyAgLyogRk5WIHByaW1lICovCisJfQorCisJ cmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBGTlYtMWEgaGFzaCBmb3IgNjQtYml0IHZhbHVlCisg Ki8KK3N0YXRpYyB1aW50NjQKK2ZudjFhX2hhc2hfNjQoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qg bGVuKQoreworCXVpbnQ2NCBoYXNoID0gMTQ2OTU5ODEwMzkzNDY2NTYwMzdVTEw7ICAvKiBGTlYg b2Zmc2V0IGJhc2lzIGZvciA2NC1iaXQgKi8KKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykKKwl7CisJCWhhc2ggXj0gKHVpbnQ4KXN0cltpXTsKKwkJaGFzaCAqPSAxMDk5 NTExNjI4MjExVUxMOyAgLyogRk5WIHByaW1lIGZvciA2NC1iaXQgKi8KKwl9CisKKwlyZXR1cm4g aGFzaDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGltZSB1dGlsaXRpZXMKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogR2V0IGVsYXBzZWQgdGltZSBpbiBtaWNyb3Nl Y29uZHMgYmV0d2VlbiB0d28gdGltZXZhbHMKKyAqLworc3RhdGljIGludDY0CitlbGFwc2VkX3Vz KHN0cnVjdCB0aW1ldmFsICpzdGFydCwgc3RydWN0IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1cm4g KChpbnQ2NCkoZW5kLT50dl9zZWMgLSBzdGFydC0+dHZfc2VjKSAqIDEwMDAwMDApICsKKwkJICAg KGVuZC0+dHZfdXNlYyAtIHN0YXJ0LT50dl91c2VjKTsKK30KKworLyoKKyAqIEdldCBjdXJyZW50 IHRpbWUKKyAqLworc3RhdGljIHZvaWQKK2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHRpbWV2YWwg KnR2KQoreworCWdldHRpbWVvZmRheSh0diwgTlVMTCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0KKyAqIFRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0t LS0tLS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFi bGUKKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbml0KFRhYmxlTXV0YXRpb25IYXNoVGFi bGUgKm1hcCwgaW50IG51bV9idWNrZXRzLCBpbnQgbWF4X2VudHJpZXMpCit7CisJaW50ICpidWNr ZXRzOworCVRhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlpbnQgaTsKKworCW1hcC0+bnVt X2J1Y2tldHMgPSBudW1fYnVja2V0czsKKwltYXAtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7 CisJbWFwLT5udW1fZW50cmllcyA9IDA7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IDA7CisJbWFw LT5sb2NrID0gMDsKKworCWJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCWVudHJp ZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJLyogSW5pdGlhbGl6ZSBhbGwgYnVja2V0 cyB0byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKQorCQlidWNr ZXRzW2ldID0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYOworCisJLyogSW5pdGlhbGl6ZSBmcmVl IGxpc3QgLSBjaGFpbiBhbGwgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50cmll czsgaSsrKQorCXsKKwkJZW50cmllc1tpXS5pbl91c2UgPSBmYWxzZTsKKwkJZW50cmllc1tpXS5u ZXh0ID0gKGkgPCBtYXhfZW50cmllcyAtIDEpID8gaSArIDEgOiBNRU1PUllfTUFQX0lOVkFMSURf SU5ERVg7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJtZW1vcnlfbWFwOiBp bml0aWFsaXplZCB0YWJsZSBtYXAgd2l0aCAlZCBidWNrZXRzLCAlZCBtYXggZW50cmllcyIsCisJ CQkJCW51bV9idWNrZXRzLCBtYXhfZW50cmllcykpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFu IGVudHJ5IGZyb20gdGhlIGZyZWUgbGlzdAorICovCitzdGF0aWMgaW50Cit0YWJsZV9tYXBfYWxs b2NfZW50cnkoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwKQoreworCVRhYmxlTXV0YXRpb25F bnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJaW50IGlkeDsKKworCWlm IChtYXAtPmZyZWVfbGlzdF9oZWFkID09IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJcmV0 dXJuIE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWDsKKworCWlkeCA9IG1hcC0+ZnJlZV9saXN0X2hl YWQ7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IGVudHJpZXNbaWR4XS5uZXh0OworCWVudHJpZXNb aWR4XS5pbl91c2UgPSB0cnVlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gTUVNT1JZX01BUF9JTlZB TElEX0lOREVYOworCW1hcC0+bnVtX2VudHJpZXMrKzsKKworCXJldHVybiBpZHg7Cit9CisKKy8q CisgKiBGcmVlIGFuIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgbGlzdAorICovCitzdGF0aWMgdm9p ZAordGFibGVfbWFwX2ZyZWVfZW50cnkoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQg aWR4KQoreworCVRhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVT KG1hcCk7CisKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gZmFsc2U7CisJZW50cmllc1tpZHhdLm5l eHQgPSBtYXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBpZHg7CisJ bWFwLT5udW1fZW50cmllcy0tOworfQorCisvKgorICogTG9vayB1cCBhIHRhYmxlIGluIHRoZSBo YXNoIHRhYmxlCisgKiBSZXR1cm5zIGVudHJ5IGluZGV4IG9yIE1FTU9SWV9NQVBfSU5WQUxJRF9J TkRFWCBpZiBub3QgZm91bmQKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkCisgKi8K K3N0YXRpYyBpbnQKK3RhYmxlX21hcF9sb29rdXAoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFw LCBjb25zdCBjaGFyICp0YWJsZV9uYW1lLCB1aW50MzIgaGFzaCkKK3sKKwlpbnQgKmJ1Y2tldHMg PSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCVRhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9 IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJaW50IGJ1Y2tldCA9IGhhc2ggJSBtYXAtPm51bV9i dWNrZXRzOworCWludCBpZHggPSBidWNrZXRzW2J1Y2tldF07CisKKwl3aGlsZSAoaWR4ICE9IE1F TU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwl7CisJCWlmIChlbnRyaWVzW2lkeF0uaGFzaCA9PSBo YXNoICYmCisJCQlzdHJjbXAoZW50cmllc1tpZHhdLnRhYmxlX25hbWUsIHRhYmxlX25hbWUpID09 IDApCisJCXsKKwkJCXJldHVybiBpZHg7CisJCX0KKwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7 CisJfQorCisJcmV0dXJuIE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWDsKK30KKworLyoKKyAqIElu c2VydCBvciB1cGRhdGUgYSB0YWJsZSBlbnRyeQorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2Nr IGhlbGQKKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbnNlcnQoVGFibGVNdXRhdGlvbkhh c2hUYWJsZSAqbWFwLCBjb25zdCBjaGFyICp0YWJsZV9uYW1lLAorCQkJCSB1aW50MzIgaGFzaCwg c3RydWN0IHRpbWV2YWwgKndyaXRlX3RpbWUpCit7CisJaW50ICpidWNrZXRzID0gVEFCTEVfTUFQ X0JVQ0tFVFMobWFwKTsKKwlUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBf RU5UUklFUyhtYXApOworCWludCBidWNrZXQgPSBoYXNoICUgbWFwLT5udW1fYnVja2V0czsKKwlp bnQgaWR4OworCisJLyogQ2hlY2sgaWYgZW50cnkgYWxyZWFkeSBleGlzdHMgKi8KKwlpZHggPSB0 YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFibGVfbmFtZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBNRU1P UllfTUFQX0lOVkFMSURfSU5ERVgpCisJeworCQkvKiBVcGRhdGUgZXhpc3RpbmcgZW50cnkgKi8K KwkJZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCQlyZXR1cm47 CisJfQorCisJLyogQWxsb2NhdGUgbmV3IGVudHJ5ICovCisJaWR4ID0gdGFibGVfbWFwX2FsbG9j X2VudHJ5KG1hcCk7CisJaWYgKGlkeCA9PSBNRU1PUllfTUFQX0lOVkFMSURfSU5ERVgpCisJewor CQlpbnQgYjsKKwkJLyogVGFibGUgaXMgZnVsbCAtIGV2aWN0IG9sZGVzdCBlbnRyeSAqLworCQkv KiBGb3Igc2ltcGxpY2l0eSwganVzdCB1c2UgdGhlIGZpcnN0IGVudHJ5IGluIGZpcnN0IG5vbi1l bXB0eSBidWNrZXQgKi8KKwkJZm9yIChiID0gMDsgYiA8IG1hcC0+bnVtX2J1Y2tldHM7IGIrKykK KwkJeworCQkJaWYgKGJ1Y2tldHNbYl0gIT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYKQorCQkJ eworCQkJCWludCB2aWN0aW0gPSBidWNrZXRzW2JdOworCQkJCWJ1Y2tldHNbYl0gPSBlbnRyaWVz W3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9lbnRyeShtYXAsIHZpY3RpbSk7CisJ CQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7CisJCQkJYnJlYWs7CisJCQl9CisJ CX0KKworCQlpZiAoaWR4ID09IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJeworCQkJZXJl cG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJtZW1vcnlfbWFwOiBmYWlsZWQgdG8gYWxsb2Nh dGUgZW50cnkgZm9yIHRhYmxlICVzIiwgdGFibGVfbmFtZSkpKTsKKwkJCXJldHVybjsKKwkJfQor CX0KKworCS8qIEluaXRpYWxpemUgbmV3IGVudHJ5ICovCisJc3RybGNweShlbnRyaWVzW2lkeF0u dGFibGVfbmFtZSwgdGFibGVfbmFtZSwgTUVNT1JZX01BUF9UQUJMRV9OQU1FX0xFTik7CisJZW50 cmllc1tpZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUgPSAq d3JpdGVfdGltZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tldCBjaGFpbiAqLworCWVu dHJpZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVja2V0XSA9IGlk eDsKKworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygibWVtb3J5X21hcDogbWFya2VkIHRh YmxlICclcycgYXMgd3JpdHRlbiIsIHRhYmxlX25hbWUpKSk7Cit9CisKKy8qCisgKiBSZW1vdmUg ZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIHRhYmxlIG1hcAorICogTXVzdCBiZSBjYWxsZWQgd2l0 aCBsb2NrIGhlbGQKKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9jbGVhbnVwX2V4cGlyZWQo VGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCB1aW50NjQgdHRsX3VzKQoreworCWludCAqYnVj a2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVGFibGVNdXRhdGlvbkVudHJ5ICplbnRy aWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50 IHJlbW92ZWQgPSAwOworCWludCBiOworCisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCWZv ciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZfcHRy ID0gJmJ1Y2tldHNbYl07CisJCWludCBpZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChpZHgg IT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYKQorCQl7CisJCQlpbnQ2NCBlbGFwc2VkID0gZWxh cHNlZF91cygmZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSwgJm5vdyk7CisKKwkJCWlmIChl bGFwc2VkID4gKGludDY0KXR0bF91cykKKwkJCXsKKwkJCQkvKiBFbnRyeSBoYXMgZXhwaXJlZCAt IHJlbW92ZSBpdCAqLworCQkJCWludCBuZXh0ID0gZW50cmllc1tpZHhdLm5leHQ7CisJCQkJKnBy ZXZfcHRyID0gbmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9lbnRyeShtYXAsIGlkeCk7CisJCQkJ aWR4ID0gbmV4dDsKKwkJCQlyZW1vdmVkKys7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJl dl9wdHIgPSAmZW50cmllc1tpZHhdLm5leHQ7CisJCQkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7 CisJCQl9CisJCX0KKwl9CisKKwlpZiAocmVtb3ZlZCA+IDApCisJeworCQllcmVwb3J0KERFQlVH MSwKKwkJCQkoZXJybXNnKCJtZW1vcnlfbWFwOiBjbGVhbmVkIHVwICVkIGV4cGlyZWQgdGFibGUg ZW50cmllcyIsIHJlbW92ZWQpKSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBR dWVyeSBwYXJzZSBjYWNoZSBvcGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor LyoKKyAqIEluaXRpYWxpemUgcXVlcnkgcGFyc2UgY2FjaGUKKyAqLworc3RhdGljIHZvaWQKK3F1 ZXJ5X2NhY2hlX2luaXQoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IG51bV9idWNrZXRzLCBp bnQgbWF4X2VudHJpZXMpCit7CisJaW50ICpidWNrZXRzOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50 cmllczsKKwlpbnQgaTsKKworCWNhY2hlLT5udW1fYnVja2V0cyA9IG51bV9idWNrZXRzOworCWNh Y2hlLT5tYXhfZW50cmllcyA9IG1heF9lbnRyaWVzOworCWNhY2hlLT5udW1fZW50cmllcyA9IDA7 CisJY2FjaGUtPmZyZWVfbGlzdF9oZWFkID0gMDsKKwljYWNoZS0+bHJ1X2hlYWQgPSBNRU1PUllf TUFQX0lOVkFMSURfSU5ERVg7CisJY2FjaGUtPmxydV90YWlsID0gTUVNT1JZX01BUF9JTlZBTElE X0lOREVYOworCWNhY2hlLT5sb2NrID0gMDsKKworCWJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNL RVRTKGNhY2hlKTsKKwllbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisKKwkv KiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRvIGVtcHR5ICovCisJZm9yIChpID0gMDsgaSA8IG51 bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNbaV0gPSBNRU1PUllfTUFQX0lOVkFMSURfSU5ERVg7 CisKKwkvKiBJbml0aWFsaXplIGZyZWUgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50 cmllczsgaSsrKQorCXsKKwkJZW50cmllc1tpXS5pbl91c2UgPSBmYWxzZTsKKwkJZW50cmllc1tp XS5uZXh0ID0gKGkgPCBtYXhfZW50cmllcyAtIDEpID8gaSArIDEgOiBNRU1PUllfTUFQX0lOVkFM SURfSU5ERVg7CisJCWVudHJpZXNbaV0ubHJ1X3ByZXYgPSBNRU1PUllfTUFQX0lOVkFMSURfSU5E RVg7CisJCWVudHJpZXNbaV0ubHJ1X25leHQgPSBNRU1PUllfTUFQX0lOVkFMSURfSU5ERVg7CisJ fQorCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJtZW1vcnlfbWFwOiBpbml0aWFsaXpl ZCBxdWVyeSBjYWNoZSB3aXRoICVkIGJ1Y2tldHMsICVkIG1heCBlbnRyaWVzIiwKKwkJCQkJbnVt X2J1Y2tldHMsIG1heF9lbnRyaWVzKSkpOworfQorCisvKgorICogTW92ZSBlbnRyeSB0byBmcm9u dCBvZiBMUlUgbGlzdCAobW9zdCByZWNlbnRseSB1c2VkKQorICovCitzdGF0aWMgdm9pZAorcXVl cnlfY2FjaGVfbHJ1X3RvdWNoKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJ UXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisK KwkvKiBBbHJlYWR5IGF0IGhlYWQ/ICovCisJaWYgKGNhY2hlLT5scnVfaGVhZCA9PSBpZHgpCisJ CXJldHVybjsKKworCS8qIFJlbW92ZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gKi8KKwlpZiAoZW50 cmllc1tpZHhdLmxydV9wcmV2ICE9IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJZW50cmll c1tlbnRyaWVzW2lkeF0ubHJ1X3ByZXZdLmxydV9uZXh0ID0gZW50cmllc1tpZHhdLmxydV9uZXh0 OworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQgIT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVY KQorCQllbnRyaWVzW2VudHJpZXNbaWR4XS5scnVfbmV4dF0ubHJ1X3ByZXYgPSBlbnRyaWVzW2lk eF0ubHJ1X3ByZXY7CisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBpZHgpCisJCWNhY2hlLT5scnVf dGFpbCA9IGVudHJpZXNbaWR4XS5scnVfcHJldjsKKworCS8qIEluc2VydCBhdCBoZWFkICovCisJ ZW50cmllc1tpZHhdLmxydV9wcmV2ID0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYOworCWVudHJp ZXNbaWR4XS5scnVfbmV4dCA9IGNhY2hlLT5scnVfaGVhZDsKKwlpZiAoY2FjaGUtPmxydV9oZWFk ICE9IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tjYWNoZS0+bHJ1X2hlYWRd LmxydV9wcmV2ID0gaWR4OworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKwlpZiAoY2FjaGUtPmxy dV90YWlsID09IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJY2FjaGUtPmxydV90YWlsID0g aWR4OworfQorCisvKgorICogQWRkIGVudHJ5IHRvIExSVSBsaXN0IChhdCBoZWFkKQorICovCitz dGF0aWMgdm9pZAorcXVlcnlfY2FjaGVfbHJ1X2FkZChRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlLCBp bnQgaWR4KQoreworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllcyA9IFFVRVJZX0NBQ0hFX0VOVFJJ RVMoY2FjaGUpOworCisJZW50cmllc1tpZHhdLmxydV9wcmV2ID0gTUVNT1JZX01BUF9JTlZBTElE X0lOREVYOworCWVudHJpZXNbaWR4XS5scnVfbmV4dCA9IGNhY2hlLT5scnVfaGVhZDsKKworCWlm IChjYWNoZS0+bHJ1X2hlYWQgIT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYKQorCQllbnRyaWVz W2NhY2hlLT5scnVfaGVhZF0ubHJ1X3ByZXYgPSBpZHg7CisKKwljYWNoZS0+bHJ1X2hlYWQgPSBp ZHg7CisKKwlpZiAoY2FjaGUtPmxydV90YWlsID09IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkK KwkJY2FjaGUtPmxydV90YWlsID0gaWR4OworfQorCisvKgorICogUmVtb3ZlIGVudHJ5IGZyb20g TFJVIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK3F1ZXJ5X2NhY2hlX2xydV9yZW1vdmUoUXVlcnlQ YXJzZUNhY2hlICpjYWNoZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMg PSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X3By ZXYgIT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYKQorCQllbnRyaWVzW2VudHJpZXNbaWR4XS5s cnVfcHJldl0ubHJ1X25leHQgPSBlbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisJZWxzZQorCQljYWNo ZS0+bHJ1X2hlYWQgPSBlbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisKKwlpZiAoZW50cmllc1tpZHhd LmxydV9uZXh0ICE9IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVz W2lkeF0ubHJ1X25leHRdLmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWVsc2UK KwkJY2FjaGUtPmxydV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJZW50cmllc1tp ZHhdLmxydV9wcmV2ID0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYOworCWVudHJpZXNbaWR4XS5s cnVfbmV4dCA9IE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWDsKK30KKworLyoKKyAqIEFsbG9jYXRl IGVudHJ5IGZyb20gZnJlZSBsaXN0LCBldmljdGluZyBMUlUgaWYgbmVjZXNzYXJ5CisgKi8KK3N0 YXRpYyBpbnQKK3F1ZXJ5X2NhY2hlX2FsbG9jX2VudHJ5KFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUp Cit7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNo ZSk7CisJaW50ICpidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJaW50IGlk eDsKKworCWlmIChjYWNoZS0+ZnJlZV9saXN0X2hlYWQgIT0gTUVNT1JZX01BUF9JTlZBTElEX0lO REVYKQorCXsKKwkJaWR4ID0gY2FjaGUtPmZyZWVfbGlzdF9oZWFkOworCQljYWNoZS0+ZnJlZV9s aXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJZW50cmllc1tpZHhdLmluX3VzZSA9IHRy dWU7CisJCWVudHJpZXNbaWR4XS5uZXh0ID0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYOworCQlj YWNoZS0+bnVtX2VudHJpZXMrKzsKKwkJcmV0dXJuIGlkeDsKKwl9CisKKwkvKiBObyBmcmVlIGVu dHJpZXMgLSBldmljdCBMUlUgKi8KKwlpZiAoY2FjaGUtPmxydV90YWlsID09IE1FTU9SWV9NQVBf SU5WQUxJRF9JTkRFWCkKKwkJcmV0dXJuIE1FTU9SWV9NQVBfSU5WQUxJRF9JTkRFWDsKKworCWlk eCA9IGNhY2hlLT5scnVfdGFpbDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2ggYnVja2V0ICovCisJ aW50IGJ1Y2tldCA9IGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoICUgY2FjaGUtPm51bV9idWNrZXRz OworCWludCAqcHJldl9wdHIgPSAmYnVja2V0c1tidWNrZXRdOworCWludCBjdXJyID0gYnVja2V0 c1tidWNrZXRdOworCisJd2hpbGUgKGN1cnIgIT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYKQor CXsKKwkJaWYgKGN1cnIgPT0gaWR4KQorCQl7CisJCQkqcHJldl9wdHIgPSBlbnRyaWVzW2N1cnJd Lm5leHQ7CisJCQlicmVhazsKKwkJfQorCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2N1cnJdLm5leHQ7 CisJCWN1cnIgPSBlbnRyaWVzW2N1cnJdLm5leHQ7CisJfQorCisJLyogUmVtb3ZlIGZyb20gTFJV IGxpc3QgKi8KKwlxdWVyeV9jYWNoZV9scnVfcmVtb3ZlKGNhY2hlLCBpZHgpOworCisJLyogUmVp bml0aWFsaXplIGVudHJ5ICovCisJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJZW50cmll c1tpZHhdLm5leHQgPSBNRU1PUllfTUFQX0lOVkFMSURfSU5ERVg7CisKKwlyZXR1cm4gaWR4Owor fQorCisvKgorICogTG9vayB1cCBhIHF1ZXJ5IGluIHRoZSBjYWNoZQorICovCitzdGF0aWMgaW50 CitxdWVyeV9jYWNoZV9sb29rdXAoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgdWludDY0IGhhc2gp Cit7CisJaW50ICpidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJUXVlcnlQ YXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJaW50IGJ1 Y2tldCA9IGhhc2ggJSBjYWNoZS0+bnVtX2J1Y2tldHM7CisJaW50IGlkeCA9IGJ1Y2tldHNbYnVj a2V0XTsKKworCXdoaWxlIChpZHggIT0gTUVNT1JZX01BUF9JTlZBTElEX0lOREVYKQorCXsKKwkJ aWYgKGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoID09IGhhc2gpCisJCQlyZXR1cm4gaWR4OworCQlp ZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwl9CisKKwlyZXR1cm4gTUVNT1JZX01BUF9JTlZBTElE X0lOREVYOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBRdWVyeSBub3JtYWxpemF0aW9u CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFNpbXBsZSBxdWVyeSBub3JtYWxp emF0aW9uOgorICogLSBTdHJpcCBjb21tZW50cyAoLS0gc3R5bGUgYW5kIEMtc3R5bGUgYmxvY2sg Y29tbWVudHMpCisgKiAtIENvbGxhcHNlIHdoaXRlc3BhY2UKKyAqIC0gQ29udmVydCB0byBsb3dl cmNhc2UgKGV4Y2VwdCBpbnNpZGUgc3RyaW5ncykKKyAqIC0gUmVwbGFjZSBsaXRlcmFsIHZhbHVl cyB3aXRoIHBsYWNlaG9sZGVycworICoKKyAqIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24g LSBwZ3Bvb2wyIGFscmVhZHkgZG9lcyB0aGlzIGVsc2V3aGVyZSwKKyAqIGJ1dCB3ZSBuZWVkIGEg c3RhbmRhbG9uZSB2ZXJzaW9uIGZvciB0aGUgbWVtb3J5IG1hcCBmZWF0dXJlLgorICovCitzdGF0 aWMgc2l6ZV90Citub3JtYWxpemVfcXVlcnkoY29uc3QgY2hhciAqcXVlcnksIGNoYXIgKm91dHB1 dCwgc2l6ZV90IG91dHB1dF9zaXplKQoreworCWNvbnN0IGNoYXIgKnNyYyA9IHF1ZXJ5OworCWNo YXIgKmRzdCA9IG91dHB1dDsKKwljaGFyICpkc3RfZW5kID0gb3V0cHV0ICsgb3V0cHV0X3NpemUg LSAxOworCWJvb2wgaW5fc3RyaW5nID0gZmFsc2U7CisJY2hhciBzdHJpbmdfY2hhciA9IDA7CisJ Ym9vbCBsYXN0X3dhc19zcGFjZSA9IHRydWU7ICAvKiBTdGFydCB0cnVlIHRvIHNraXAgbGVhZGlu ZyBzcGFjZSAqLworCisJd2hpbGUgKCpzcmMgJiYgZHN0IDwgZHN0X2VuZCkKKwl7CisJCS8qIEhh bmRsZSBzdHJpbmcgbGl0ZXJhbHMgKi8KKwkJaWYgKGluX3N0cmluZykKKwkJeworCQkJaWYgKCpz cmMgPT0gc3RyaW5nX2NoYXIpCisJCQl7CisJCQkJaWYgKCooc3JjICsgMSkgPT0gc3RyaW5nX2No YXIpCisJCQkJeworCQkJCQkvKiBFc2NhcGVkIHF1b3RlICovCisJCQkJCXNyYyArPSAyOworCQkJ CQljb250aW51ZTsKKwkJCQl9CisJCQkJaW5fc3RyaW5nID0gZmFsc2U7CisJCQkJKmRzdCsrID0g JyQnOyAgLyogUmVwbGFjZSBzdHJpbmcgY29udGVudCB3aXRoIHBsYWNlaG9sZGVyICovCisJCQl9 CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQ2hlY2sgZm9yIHN0cmluZyBz dGFydCAqLworCQlpZiAoKnNyYyA9PSAnXCcnIHx8ICpzcmMgPT0gJyInKQorCQl7CisJCQlpbl9z dHJpbmcgPSB0cnVlOworCQkJc3RyaW5nX2NoYXIgPSAqc3JjOworCQkJc3JjKys7CisJCQljb250 aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBzaW5nbGUtbGluZSBjb21tZW50cyAqLworCQlpZiAo KnNyYyA9PSAnLScgJiYgKihzcmMgKyAxKSA9PSAnLScpCisJCXsKKwkJCXdoaWxlICgqc3JjICYm ICpzcmMgIT0gJ1xuJykKKwkJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFu ZGxlIG11bHRpLWxpbmUgY29tbWVudHMgKi8KKwkJaWYgKCpzcmMgPT0gJy8nICYmICooc3JjICsg MSkgPT0gJyonKQorCQl7CisJCQlzcmMgKz0gMjsKKwkJCXdoaWxlICgqc3JjICYmICEoKnNyYyA9 PSAnKicgJiYgKihzcmMgKyAxKSA9PSAnLycpKQorCQkJCXNyYysrOworCQkJaWYgKCpzcmMpCisJ CQkJc3JjICs9IDI7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSB3aGl0ZXNwYWNl ICovCisJCWlmICgqc3JjID09ICcgJyB8fCAqc3JjID09ICdcdCcgfHwgKnNyYyA9PSAnXG4nIHx8 ICpzcmMgPT0gJ1xyJykKKwkJeworCQkJaWYgKCFsYXN0X3dhc19zcGFjZSkKKwkJCXsKKwkJCQkq ZHN0KysgPSAnICc7CisJCQkJbGFzdF93YXNfc3BhY2UgPSB0cnVlOworCQkJfQorCQkJc3JjKys7 CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBudW1iZXJzIC0gcmVwbGFjZSB3aXRo IHBsYWNlaG9sZGVyICovCisJCWlmICgoKnNyYyA+PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8CisJ CQkoKnNyYyA9PSAnLicgJiYgKihzcmMgKyAxKSA+PSAnMCcgJiYgKihzcmMgKyAxKSA8PSAnOScp KQorCQl7CisJCQl3aGlsZSAoKnNyYyAmJiAoKCpzcmMgPj0gJzAnICYmICpzcmMgPD0gJzknKSB8 fCAqc3JjID09ICcuJykpCisJCQkJc3JjKys7CisJCQlpZiAoIWxhc3Rfd2FzX3NwYWNlICYmIGRz dCA+IG91dHB1dCAmJiAqKGRzdCAtIDEpICE9ICckJykKKwkJCQkqZHN0KysgPSAnJCc7CisJCQls YXN0X3dhc19zcGFjZSA9IGZhbHNlOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZWd1bGFy IGNoYXJhY3RlciAtIGNvbnZlcnQgdG8gbG93ZXJjYXNlICovCisJCWlmICgqc3JjID49ICdBJyAm JiAqc3JjIDw9ICdaJykKKwkJCSpkc3QrKyA9ICpzcmMgKyAzMjsKKwkJZWxzZQorCQkJKmRzdCsr ID0gKnNyYzsKKworCQlsYXN0X3dhc19zcGFjZSA9IGZhbHNlOworCQlzcmMrKzsKKwl9CisKKwkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKwlpZiAoZHN0ID4gb3V0cHV0ICYmICooZHN0IC0g MSkgPT0gJyAnKQorCQlkc3QtLTsKKworCSpkc3QgPSAnXDAnOworCXJldHVybiBkc3QgLSBvdXRw dXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFB1YmxpYyBBUEkgaW1wbGVtZW50YXRp b24KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitTaXplCitwb29sX21lbW9yeV9tYXBfc2ht ZW1fc2l6ZSh2b2lkKQoreworCVNpemUgc2l6ZSA9IDA7CisJaW50IHRhYmxlX2J1Y2tldHMgPSBw b29sX2NvbmZpZy0+bWVtb3J5X21hcF90YWJsZV9idWNrZXRzOworCWludCB0YWJsZV9zaXplID0g cG9vbF9jb25maWctPm1lbW9yeV9tYXBfdGFibGVfc2l6ZTsKKwlpbnQgcXVlcnlfYnVja2V0cyA9 IHBvb2xfY29uZmlnLT5tZW1vcnlfbWFwX3F1ZXJ5X2J1Y2tldHM7CisJaW50IHF1ZXJ5X2NhY2hl X3NpemUgPSBwb29sX2NvbmZpZy0+bWVtb3J5X21hcF9xdWVyeV9jYWNoZV9zaXplOworCisJLyog TWFpbiBzdHJ1Y3R1cmUgKi8KKwlzaXplICs9IHNpemVvZihNZW1vcnlNYXBTaG1lbSk7CisKKwkv KiBUYWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlICovCisJc2l6ZSArPSBzaXplb2YoVGFibGVNdXRh dGlvbkhhc2hUYWJsZSk7CisJc2l6ZSArPSB0YWJsZV9idWNrZXRzICogc2l6ZW9mKGludCk7ICAv KiBidWNrZXRzIGFycmF5ICovCisJc2l6ZSArPSB0YWJsZV9zaXplICogc2l6ZW9mKFRhYmxlTXV0 YXRpb25FbnRyeSk7ICAvKiBlbnRyaWVzIGFycmF5ICovCisKKwkvKiBRdWVyeSBwYXJzZSBjYWNo ZSAqLworCXNpemUgKz0gc2l6ZW9mKFF1ZXJ5UGFyc2VDYWNoZSk7CisJc2l6ZSArPSBxdWVyeV9i dWNrZXRzICogc2l6ZW9mKGludCk7ICAvKiBidWNrZXRzIGFycmF5ICovCisJc2l6ZSArPSBxdWVy eV9jYWNoZV9zaXplICogc2l6ZW9mKFF1ZXJ5UGFyc2VFbnRyeSk7ICAvKiBlbnRyaWVzIGFycmF5 ICovCisKKwlyZXR1cm4gc2l6ZTsKK30KKwordm9pZAorcG9vbF9tZW1vcnlfbWFwX2luaXQodm9p ZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJU2l6ZSBzaG1lbV9zaXplOworCWNoYXIgKnNo bWVtX3B0cjsKKworCWlmICghcG9vbF9jb25maWctPm1lbW9yeV9tYXBfZW5hYmxlZCkKKwl7CisJ CWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coIm1lbW9yeV9tYXA6IGZlYXR1cmUgZGlzYWJs ZWQiKSkpOworCQlyZXR1cm47CisJfQorCisJc2htZW1fc2l6ZSA9IHBvb2xfbWVtb3J5X21hcF9z aG1lbV9zaXplKCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGZyb20gdGhlIG1haW4gc2hhcmVkIG1l bW9yeSBzZWdtZW50LgorCSAqIE1lbW9yeSBpcyBhbHJlYWR5IHplcm9lZCBieSBpbml0aWFsaXpl X3NoYXJlZF9tZW1vcnlfbWFpbl9zZWdtZW50KCkuCisJICovCisJc2htZW1fcHRyID0gcG9vbF9z aGFyZWRfbWVtb3J5X3NlZ21lbnRfZ2V0X2NodW5rKHNobWVtX3NpemUpOworCWlmIChzaG1lbV9w dHIgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygibWVtb3J5X21h cDogZmFpbGVkIHRvIGFsbG9jYXRlICV6dSBieXRlcyBvZiBzaGFyZWQgbWVtb3J5IiwKKwkJCQkJ CXNobWVtX3NpemUpKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQgdXAgcG9pbnRlcnMgdG8g c3RydWN0dXJlcyB3aXRoaW4gc2hhcmVkIG1lbW9yeSAqLworCW1lbW9yeV9tYXBfc2htZW0gPSAo TWVtb3J5TWFwU2htZW0gKilzaG1lbV9wdHI7CisJc2htZW1fcHRyICs9IHNpemVvZihNZW1vcnlN YXBTaG1lbSk7CisKKwltZW1vcnlfbWFwX3NobWVtLT50YWJsZV9tYXAgPSAoVGFibGVNdXRhdGlv bkhhc2hUYWJsZSAqKXNobWVtX3B0cjsKKwlzaG1lbV9wdHIgKz0gc2l6ZW9mKFRhYmxlTXV0YXRp b25IYXNoVGFibGUpOworCXNobWVtX3B0ciArPSBwb29sX2NvbmZpZy0+bWVtb3J5X21hcF90YWJs ZV9idWNrZXRzICogc2l6ZW9mKGludCk7CisJc2htZW1fcHRyICs9IHBvb2xfY29uZmlnLT5tZW1v cnlfbWFwX3RhYmxlX3NpemUgKiBzaXplb2YoVGFibGVNdXRhdGlvbkVudHJ5KTsKKworCW1lbW9y eV9tYXBfc2htZW0tPnF1ZXJ5X2NhY2hlID0gKFF1ZXJ5UGFyc2VDYWNoZSAqKXNobWVtX3B0cjsK KworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCXRhYmxlX21hcF9pbml0KG1lbW9yeV9t YXBfc2htZW0tPnRhYmxlX21hcCwKKwkJCQkgICBwb29sX2NvbmZpZy0+bWVtb3J5X21hcF90YWJs ZV9idWNrZXRzLAorCQkJCSAgIHBvb2xfY29uZmlnLT5tZW1vcnlfbWFwX3RhYmxlX3NpemUpOwor CisJcXVlcnlfY2FjaGVfaW5pdChtZW1vcnlfbWFwX3NobWVtLT5xdWVyeV9jYWNoZSwKKwkJCQkJ IHBvb2xfY29uZmlnLT5tZW1vcnlfbWFwX3F1ZXJ5X2J1Y2tldHMsCisJCQkJCSBwb29sX2NvbmZp Zy0+bWVtb3J5X21hcF9xdWVyeV9jYWNoZV9zaXplKTsKKworCS8qIEluaXRpYWxpemUgZ2xvYmFs IHN0YXRlICovCisJbWVtb3J5X21hcF9zaG1lbS0+c3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwor CW1lbW9yeV9tYXBfc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzID0gTUVNT1JZX01BUF9ERUZB VUxUX1RUTF9VUzsKKwlnZXRfY3VycmVudF90aW1lKCZtZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS50 dGxfbGFzdF91cGRhdGVkKTsKKwltZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS5zdGF0c19xdWVyaWVz X2NoZWNrZWQgPSAwOworCW1lbW9yeV9tYXBfc2htZW0tPnN0YXRlLnN0YXRzX2ZvcmNlZF9wcmlt YXJ5ID0gMDsKKwltZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS5zdGF0c19hbGxvd2VkX3JlcGxpY2Eg PSAwOworCisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJtZW1vcnlfbWFwOiBpbml0aWFsaXpl ZCB3aXRoICV6dSBieXRlcyBzaGFyZWQgbWVtb3J5IiwKKwkJCQkJc2htZW1fc2l6ZSkpKTsKKyNl bmRpZgorfQorCit2b2lkCitwb29sX21lbW9yeV9tYXBfY2hpbGRfaW5pdCh2b2lkKQoreworCWlm ICghcG9vbF9jb25maWctPm1lbW9yeV9tYXBfZW5hYmxlZCB8fCBtZW1vcnlfbWFwX3NobWVtID09 IE5VTEwpCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJnByb2Nlc3Nfc3RhcnRfdGlt ZSk7CisJY29sZF9zdGFydF9pbml0aWFsaXplZCA9IHRydWU7CisKKwllcmVwb3J0KERFQlVHMSwK KwkJCShlcnJtc2coIm1lbW9yeV9tYXA6IGNoaWxkIGluaXRpYWxpemVkLCBjb2xkIHN0YXJ0IHBl cmlvZCAlZCBtcyIsCisJCQkJCXBvb2xfY29uZmlnLT5tZW1vcnlfbWFwX2NvbGRfc3RhcnRfZHVy YXRpb24pKSk7Cit9CisKK2Jvb2wKK3Bvb2xfbWVtb3J5X21hcF9pbl9jb2xkX3N0YXJ0KHZvaWQp Cit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludDY0IGVsYXBzZWRfbXM7CisKKwlpZiAoIXBv b2xfY29uZmlnLT5tZW1vcnlfbWFwX2VuYWJsZWQgfHwgIWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQp CisJCXJldHVybiBmYWxzZTsKKworCWlmIChwb29sX2NvbmZpZy0+bWVtb3J5X21hcF9jb2xkX3N0 YXJ0X2R1cmF0aW9uIDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCWdldF9jdXJyZW50X3RpbWUo Jm5vdyk7CisJZWxhcHNlZF9tcyA9IGVsYXBzZWRfdXMoJnByb2Nlc3Nfc3RhcnRfdGltZSwgJm5v dykgLyAxMDAwOworCisJaWYgKGVsYXBzZWRfbXMgPCBwb29sX2NvbmZpZy0+bWVtb3J5X21hcF9j b2xkX3N0YXJ0X2R1cmF0aW9uKQorCXsKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVycm1zZygi bWVtb3J5X21hcDogaW4gY29sZCBzdGFydCAoJWxkLyVkIG1zKSIsCisJCQkJCQkobG9uZyllbGFw c2VkX21zLCBwb29sX2NvbmZpZy0+bWVtb3J5X21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uKSkpOwor CQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wKK3Bvb2xfbWVt b3J5X21hcF90YWJsZV9pc19zdGFsZShjb25zdCBjaGFyICp0YWJsZV9uYW1lKQoreworCVRhYmxl TXV0YXRpb25IYXNoVGFibGUgKm1hcDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJdWludDY0IHR0 bF91czsKKwl1aW50MzIgaGFzaDsKKwlpbnQgaWR4OworCWJvb2wgaXNfc3RhbGUgPSBmYWxzZTsK KworCWlmICghcG9vbF9jb25maWctPm1lbW9yeV9tYXBfZW5hYmxlZCB8fCBtZW1vcnlfbWFwX3No bWVtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCW1hcCA9IG1lbW9yeV9tYXBfc2htZW0t PnRhYmxlX21hcDsKKwloYXNoID0gZm52MWFfaGFzaF9zdHJpbmcodGFibGVfbmFtZSk7CisKKwlz cGluX2xvY2soJm1hcC0+bG9jayk7CisKKwlpZHggPSB0YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFi bGVfbmFtZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBNRU1PUllfTUFQX0lOVkFMSURfSU5ERVgpCisJ eworCQlUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXAp OworCQlnZXRfY3VycmVudF90aW1lKCZub3cpOworCQl0dGxfdXMgPSBtZW1vcnlfbWFwX3NobWVt LT5zdGF0ZS5jdXJyZW50X3R0bF91czsKKworCQlpbnQ2NCBlbGFwc2VkID0gZWxhcHNlZF91cygm ZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSwgJm5vdyk7CisJCWlzX3N0YWxlID0gKGVsYXBz ZWQgPCAoaW50NjQpdHRsX3VzKTsKKworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNnKCJt ZW1vcnlfbWFwOiB0YWJsZSAnJXMnIGVsYXBzZWQ9JWxkIHVzLCB0dGw9JWx1IHVzLCBzdGFsZT0l ZCIsCisJCQkJCQl0YWJsZV9uYW1lLCAobG9uZyllbGFwc2VkLCAodW5zaWduZWQgbG9uZyl0dGxf dXMsIGlzX3N0YWxlKSkpOworCX0KKworCXNwaW5fdW5sb2NrKCZtYXAtPmxvY2spOworCisJLyog VXBkYXRlIHN0YXRpc3RpY3MgKi8KKwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmbWVtb3J5X21hcF9z aG1lbS0+c3RhdGUuc3RhdHNfcXVlcmllc19jaGVja2VkLCAxKTsKKwlpZiAoaXNfc3RhbGUpCisJ CV9fc3luY19mZXRjaF9hbmRfYWRkKCZtZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS5zdGF0c19mb3Jj ZWRfcHJpbWFyeSwgMSk7CisJZWxzZQorCQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmbWVtb3J5X21h cF9zaG1lbS0+c3RhdGUuc3RhdHNfYWxsb3dlZF9yZXBsaWNhLCAxKTsKKworCXJldHVybiBpc19z dGFsZTsKK30KKwordm9pZAorcG9vbF9tZW1vcnlfbWFwX21hcmtfdGFibGVzX3dyaXR0ZW4oY29u c3QgY2hhciAqKnRhYmxlX25hbWVzLCBpbnQgbnVtX3RhYmxlcykKK3sKKwlUYWJsZU11dGF0aW9u SGFzaFRhYmxlICptYXA7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCBpOworCisJaWYgKCFw b29sX2NvbmZpZy0+bWVtb3J5X21hcF9lbmFibGVkIHx8IG1lbW9yeV9tYXBfc2htZW0gPT0gTlVM TCkKKwkJcmV0dXJuOworCisJaWYgKG51bV90YWJsZXMgPD0gMCB8fCB0YWJsZV9uYW1lcyA9PSBO VUxMKQorCQlyZXR1cm47CisKKwltYXAgPSBtZW1vcnlfbWFwX3NobWVtLT50YWJsZV9tYXA7CisJ Z2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCXNwaW5fbG9jaygmbWFwLT5sb2NrKTsKKworCS8q IFBlcmlvZGljYWxseSBjbGVhbiB1cCBleHBpcmVkIGVudHJpZXMgKi8KKwlpZiAobWFwLT5udW1f ZW50cmllcyA+IG1hcC0+bWF4X2VudHJpZXMgKiAzIC8gNCkKKwl7CisJCXRhYmxlX21hcF9jbGVh bnVwX2V4cGlyZWQobWFwLCBtZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS5jdXJyZW50X3R0bF91cyk7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV90YWJsZXM7IGkrKykKKwl7CisJCXVpbnQzMiBo YXNoOworCisJCWlmICh0YWJsZV9uYW1lc1tpXSAhPSBOVUxMICYmIHRhYmxlX25hbWVzW2ldWzBd ICE9ICdcMCcpCisJCXsKKwkJCWhhc2ggPSBmbnYxYV9oYXNoX3N0cmluZyh0YWJsZV9uYW1lc1tp XSk7CisJCQl0YWJsZV9tYXBfaW5zZXJ0KG1hcCwgdGFibGVfbmFtZXNbaV0sIGhhc2gsICZub3cp OworCQl9CisJfQorCisJc3Bpbl91bmxvY2soJm1hcC0+bG9jayk7Cit9CisKKy8qCisgKiBDb252 ZW5pZW5jZSBmdW5jdGlvbiB0byBtYXJrIGEgc2luZ2xlIHRhYmxlIGFzIHdyaXR0ZW4KKyAqLwor dm9pZAorcG9vbF9tZW1vcnlfbWFwX21hcmtfdGFibGVfd3JpdHRlbihjb25zdCBjaGFyICp0YWJs ZV9uYW1lKQoreworCWlmICh0YWJsZV9uYW1lICE9IE5VTEwpCisJeworCQljb25zdCBjaGFyICp0 YWJsZXNbMV0gPSB7IHRhYmxlX25hbWUgfTsKKwkJcG9vbF9tZW1vcnlfbWFwX21hcmtfdGFibGVz X3dyaXR0ZW4odGFibGVzLCAxKTsKKwl9Cit9CisKK3ZvaWQKK3Bvb2xfbWVtb3J5X21hcF91cGRh dGVfdHRsKHVpbnQ2NCBkZWxheV91cykKK3sKKwl1aW50NjQgbmV3X3R0bDsKKworCWlmICghcG9v bF9jb25maWctPm1lbW9yeV9tYXBfZW5hYmxlZCB8fCBtZW1vcnlfbWFwX3NobWVtID09IE5VTEwp CisJCXJldHVybjsKKworCS8qIENhbGN1bGF0ZSBuZXcgVFRMOiBkZWxheSAqIGZhY3Rvciwgd2l0 aCBtaW5pbXVtIG9mIGRlZmF1bHQgVFRMICovCisJbmV3X3R0bCA9ICh1aW50NjQpKGRlbGF5X3Vz ICogcG9vbF9jb25maWctPm1lbW9yeV9tYXBfdHRsX2ZhY3Rvcik7CisJaWYgKG5ld190dGwgPCBN RU1PUllfTUFQX0RFRkFVTFRfVFRMX1VTKQorCQluZXdfdHRsID0gTUVNT1JZX01BUF9ERUZBVUxU X1RUTF9VUzsKKworCS8qIE1heGltdW0gVFRMIG9mIDEgaG91ciAqLworCWlmIChuZXdfdHRsID4g MzYwMFVMTCAqIDEwMDAwMDBVTEwpCisJCW5ld190dGwgPSAzNjAwVUxMICogMTAwMDAwMFVMTDsK KworCW1lbW9yeV9tYXBfc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzID0gbmV3X3R0bDsKKwln ZXRfY3VycmVudF90aW1lKCZtZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS50dGxfbGFzdF91cGRhdGVk KTsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygibWVtb3J5X21hcDogdXBkYXRlZCBU VEwgdG8gJWx1IHVzIChkZWxheT0lbHUgdXMsIGZhY3Rvcj0lLjFmKSIsCisJCQkJCSh1bnNpZ25l ZCBsb25nKW5ld190dGwsICh1bnNpZ25lZCBsb25nKWRlbGF5X3VzLAorCQkJCQlwb29sX2NvbmZp Zy0+bWVtb3J5X21hcF90dGxfZmFjdG9yKSkpOworfQorCitib29sCitwb29sX21lbW9yeV9tYXBf Z2V0X2NhY2hlZF9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCAqaXNfd3JpdGUsCisJCQkJCQkJCSBj aGFyIHRhYmxlX25hbWVzW11bTUVNT1JZX01BUF9UQUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJCSBp bnQgKm51bV90YWJsZXMpCit7CisJUXVlcnlQYXJzZUNhY2hlICpjYWNoZTsKKwlpbnQgaWR4Owor CWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWlmICghcG9vbF9jb25maWctPm1lbW9yeV9tYXBfZW5h YmxlZCB8fCBtZW1vcnlfbWFwX3NobWVtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWNh Y2hlID0gbWVtb3J5X21hcF9zaG1lbS0+cXVlcnlfY2FjaGU7CisKKwlzcGluX2xvY2soJmNhY2hl LT5sb2NrKTsKKworCWlkeCA9IHF1ZXJ5X2NhY2hlX2xvb2t1cChjYWNoZSwgaGFzaCk7CisJaWYg KGlkeCAhPSBNRU1PUllfTUFQX0lOVkFMSURfSU5ERVgpCisJeworCQlRdWVyeVBhcnNlRW50cnkg KmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwkJaW50IGk7CisKKwkJKmlz X3dyaXRlID0gZW50cmllc1tpZHhdLmlzX3dyaXRlOworCQkqbnVtX3RhYmxlcyA9IGVudHJpZXNb aWR4XS5udW1fdGFibGVzOworCisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzW2lkeF0ubnVtX3Rh YmxlcyAmJiBpIDwgTUVNT1JZX01BUF9NQVhfVEFCTEVTX1BFUl9RVUVSWTsgaSsrKQorCQl7CisJ CQlzdHJsY3B5KHRhYmxlX25hbWVzW2ldLCBlbnRyaWVzW2lkeF0udGFibGVfbmFtZXNbaV0sIE1F TU9SWV9NQVBfVEFCTEVfTkFNRV9MRU4pOworCQl9CisKKwkJLyogTW92ZSB0byBmcm9udCBvZiBM UlUgKi8KKwkJcXVlcnlfY2FjaGVfbHJ1X3RvdWNoKGNhY2hlLCBpZHgpOworCQlmb3VuZCA9IHRy dWU7CisJfQorCisJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKKworCXJldHVybiBmb3VuZDsK K30KKwordm9pZAorcG9vbF9tZW1vcnlfbWFwX2NhY2hlX3BhcnNlKHVpbnQ2NCBoYXNoLCBib29s IGlzX3dyaXRlLAorCQkJCQkJCWNvbnN0IGNoYXIgdGFibGVfbmFtZXNbXVtNRU1PUllfTUFQX1RB QkxFX05BTUVfTEVOXSwKKwkJCQkJCQlpbnQgbnVtX3RhYmxlcykKK3sKKwlRdWVyeVBhcnNlQ2Fj aGUgKmNhY2hlOworCWludCAqYnVja2V0czsKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXM7CisJ aW50IGlkeDsKKwlpbnQgYnVja2V0OworCisJaWYgKCFwb29sX2NvbmZpZy0+bWVtb3J5X21hcF9l bmFibGVkIHx8IG1lbW9yeV9tYXBfc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY2FjaGUg PSBtZW1vcnlfbWFwX3NobWVtLT5xdWVyeV9jYWNoZTsKKworCXNwaW5fbG9jaygmY2FjaGUtPmxv Y2spOworCisJLyogQ2hlY2sgaWYgYWxyZWFkeSBleGlzdHMgKi8KKwlpZHggPSBxdWVyeV9jYWNo ZV9sb29rdXAoY2FjaGUsIGhhc2gpOworCWlmIChpZHggIT0gTUVNT1JZX01BUF9JTlZBTElEX0lO REVYKQorCXsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwor CS8qIEFsbG9jYXRlIG5ldyBlbnRyeSAobWF5IGV2aWN0IExSVSkgKi8KKwlpZHggPSBxdWVyeV9j YWNoZV9hbGxvY19lbnRyeShjYWNoZSk7CisJaWYgKGlkeCA9PSBNRU1PUllfTUFQX0lOVkFMSURf SU5ERVgpCisJeworCQlzcGluX3VubG9jaygmY2FjaGUtPmxvY2spOworCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJKGVycm1zZygibWVtb3J5X21hcDogZmFpbGVkIHRvIGFsbG9jYXRlIHF1ZXJ5IGNh Y2hlIGVudHJ5IikpKTsKKwkJcmV0dXJuOworCX0KKworCWVudHJpZXMgPSBRVUVSWV9DQUNIRV9F TlRSSUVTKGNhY2hlKTsKKwlidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisK KwkvKiBGaWxsIGluIGVudHJ5ICovCisJZW50cmllc1tpZHhdLnF1ZXJ5X2hhc2ggPSBoYXNoOwor CWVudHJpZXNbaWR4XS5pc193cml0ZSA9IGlzX3dyaXRlOworCWVudHJpZXNbaWR4XS5udW1fdGFi bGVzID0gKG51bV90YWJsZXMgPiBNRU1PUllfTUFQX01BWF9UQUJMRVNfUEVSX1FVRVJZKSA/CisJ CQkJCQkJICBNRU1PUllfTUFQX01BWF9UQUJMRVNfUEVSX1FVRVJZIDogbnVtX3RhYmxlczsKKwor CXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzW2lkeF0ubnVtX3RhYmxlczsg aSsrKQorCQl7CisJCQlzdHJsY3B5KGVudHJpZXNbaWR4XS50YWJsZV9uYW1lc1tpXSwgdGFibGVf bmFtZXNbaV0sIE1FTU9SWV9NQVBfVEFCTEVfTkFNRV9MRU4pOworCQl9CisJfQorCisJLyogSW5z ZXJ0IGludG8gaGFzaCBidWNrZXQgKi8KKwlidWNrZXQgPSBoYXNoICUgY2FjaGUtPm51bV9idWNr ZXRzOworCWVudHJpZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVj a2V0XSA9IGlkeDsKKworCS8qIEFkZCB0byBMUlUgbGlzdCAqLworCXF1ZXJ5X2NhY2hlX2xydV9h ZGQoY2FjaGUsIGlkeCk7CisKKwlzcGluX3VubG9jaygmY2FjaGUtPmxvY2spOworfQorCit1aW50 NjQKK3Bvb2xfbWVtb3J5X21hcF9ub3JtYWxpemVfYW5kX2hhc2goY29uc3QgY2hhciAqcXVlcnkp Cit7CisJY2hhciBub3JtYWxpemVkWzgxOTJdOworCXNpemVfdCBsZW47CisKKwlpZiAocXVlcnkg PT0gTlVMTCB8fCBxdWVyeVswXSA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IG5vcm1h bGl6ZV9xdWVyeShxdWVyeSwgbm9ybWFsaXplZCwgc2l6ZW9mKG5vcm1hbGl6ZWQpKTsKKwlpZiAo bGVuID09IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGZudjFhX2hhc2hfNjQobm9ybWFsaXpl ZCwgbGVuKTsKK30KKwordWludDY0Citwb29sX21lbW9yeV9tYXBfZ2V0X3R0bCh2b2lkKQorewor CWlmICghcG9vbF9jb25maWctPm1lbW9yeV9tYXBfZW5hYmxlZCB8fCBtZW1vcnlfbWFwX3NobWVt ID09IE5VTEwpCisJCXJldHVybiBNRU1PUllfTUFQX0RFRkFVTFRfVFRMX1VTOworCisJcmV0dXJu IG1lbW9yeV9tYXBfc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzOworfQorCit2b2lkCitwb29s X21lbW9yeV9tYXBfZ2V0X3N0YXRzKHVpbnQzMiAqcXVlcmllc19jaGVja2VkLAorCQkJCQkJICB1 aW50MzIgKmZvcmNlZF9wcmltYXJ5LAorCQkJCQkJICB1aW50MzIgKmFsbG93ZWRfcmVwbGljYSwK KwkJCQkJCSAgdWludDY0ICpjdXJyZW50X3R0bF91cykKK3sKKwlpZiAoIXBvb2xfY29uZmlnLT5t ZW1vcnlfbWFwX2VuYWJsZWQgfHwgbWVtb3J5X21hcF9zaG1lbSA9PSBOVUxMKQorCXsKKwkJKnF1 ZXJpZXNfY2hlY2tlZCA9IDA7CisJCSpmb3JjZWRfcHJpbWFyeSA9IDA7CisJCSphbGxvd2VkX3Jl cGxpY2EgPSAwOworCQkqY3VycmVudF90dGxfdXMgPSAwOworCQlyZXR1cm47CisJfQorCisJKnF1 ZXJpZXNfY2hlY2tlZCA9IG1lbW9yeV9tYXBfc2htZW0tPnN0YXRlLnN0YXRzX3F1ZXJpZXNfY2hl Y2tlZDsKKwkqZm9yY2VkX3ByaW1hcnkgPSBtZW1vcnlfbWFwX3NobWVtLT5zdGF0ZS5zdGF0c19m b3JjZWRfcHJpbWFyeTsKKwkqYWxsb3dlZF9yZXBsaWNhID0gbWVtb3J5X21hcF9zaG1lbS0+c3Rh dGUuc3RhdHNfYWxsb3dlZF9yZXBsaWNhOworCSpjdXJyZW50X3R0bF91cyA9IG1lbW9yeV9tYXBf c2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzOworfQotLSAKMi41Mi4wCgo= --000000000000f380d80649830248--