public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/8942: internal compiler error: in ggc_set_mark, at ggc-page.c:981
@ 2002-12-18  5:17 reichelt
  0 siblings, 0 replies; 4+ messages in thread
From: reichelt @ 2002-12-18  5:17 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, pinaart

Synopsis: internal compiler error: in ggc_set_mark, at ggc-page.c:981

State-Changed-From-To: feedback->closed
State-Changed-By: reichelt
State-Changed-When: Wed Dec 18 05:17:01 2002
State-Changed-Why:
    Fixed according to submitter.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8942


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: c++/8942: internal compiler error: in ggc_set_mark, at ggc-page.c:981
@ 2002-12-17 23:16 Art
  0 siblings, 0 replies; 4+ messages in thread
From: Art @ 2002-12-17 23:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/8942; it has been noted by GNATS.

From: Art <pinaart@yahoo.com>
To: bangerth@dealii.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org,
  nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: c++/8942: internal compiler error: in ggc_set_mark, at ggc-page.c:981
Date: Tue, 17 Dec 2002 23:13:18 -0800 (PST)

 --- bangerth@dealii.org wrote:
 > Synopsis: internal compiler error: in ggc_set_mark, at ggc-page.c:981
 > 
 > State-Changed-From-To: open->feedback
 > State-Changed-By: bangerth
 > State-Changed-When: Mon Dec 16 11:31:17 2002
 > State-Changed-Why:
 >     I cannot reproduce this with a snapshot from last week. Could
 >     you possibly try whether the bug still occurs on your system
 >     with a newer version of gcc?
 >     
 >     Thanks
 >       W.
 
 Thanks, W.
 
 I downloaded and rebuilt gcc 3.4 from the cvs tree and am no longer
 experiencing any problems with the compiler.
 
 Art
 
 __________________________________________________
 Do you Yahoo!?
 Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
 http://mailplus.yahoo.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: c++/8942: internal compiler error: in ggc_set_mark, at ggc-page.c:981
@ 2002-12-16 11:31 bangerth
  0 siblings, 0 replies; 4+ messages in thread
From: bangerth @ 2002-12-16 11:31 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, pinaart

Synopsis: internal compiler error: in ggc_set_mark, at ggc-page.c:981

State-Changed-From-To: open->feedback
State-Changed-By: bangerth
State-Changed-When: Mon Dec 16 11:31:17 2002
State-Changed-Why:
    I cannot reproduce this with a snapshot from last week. Could
    you possibly try whether the bug still occurs on your system
    with a newer version of gcc?
    
    Thanks
      W.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8942


^ permalink raw reply	[flat|nested] 4+ messages in thread

* c++/8942: internal compiler error: in ggc_set_mark, at ggc-page.c:981
@ 2002-12-14 10:56 pinaart
  0 siblings, 0 replies; 4+ messages in thread
From: pinaart @ 2002-12-14 10:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8942
>Category:       c++
>Synopsis:       internal compiler error: in ggc_set_mark, at ggc-page.c:981
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Dec 14 10:56:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     pinaart@yahoo.com
>Release:        3.2-7 (Linux RedHat 8.0)
>Organization:
>Environment:
Linux 2.4.18-3
gcc version 3.3 20021114 (experimental)
>Description:
c++ -DHAVE_CVS_IDENT=1 -DHAVE_CONFIG_H -g -O2 -save-temps -I. -I. -MD -c dup_expr.cc -o dup_expr.o
In file included from dup_expr.cc:25:
netlist.h:312: internal compiler error: in ggc_set_mark, at ggc-page.c:981
Please submit a full bug report,

Please let me know if you need more info.
BTW, I didn't put the source, since it references too many
includes, though the ".ii" should have enough info.

Art
>How-To-Repeat:
Just try to compile above code.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="dup_expr.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="dup_expr.ii"

IyAxICJkdXBfZXhwci5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+Igoj
IDEgImR1cF9leHByLmNjIgojIDIwICJkdXBfZXhwci5jYyIKI2lkZW50ICIkSWQ6IGR1cF9leHBy
LmNjLHYgMS45IDIwMDIvMTEvMDkgMDA6MjU6Mjcgc3RldmUgRXhwICQiCgoKIyAxICJjb25maWcu
aCIgMQojIDIzICJjb25maWcuaCIKI2lkZW50ICIkSWQ6IGNvbmZpZy5oLmluLHYgMS41IDIwMDIv
MDgvMTEgMjM6Mzk6MzMgc3RldmUgRXhwICQiCgoKCgoKCiAgICAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIyAyNCAiZHVwX2V4cHIuY2MiIDIKCiMgMSAibmV0bGlzdC5oIiAxCiMgMjIgIm5ldGxpc3Qu
aCIKI2lkZW50ICIkSWQ6IG5ldGxpc3QuaCx2IDEuMjcxIDIwMDIvMTIvMDcgMDI6NDk6MjQgc3Rl
dmUgRXhwICQiCiMgMzEgIm5ldGxpc3QuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9zdHJpbmciIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJpbmciIDMK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzkgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjkxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAoj
IDI5MiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgMzIwICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMgNAojIDMy
MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMiAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNw
YWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9y
OwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxj
aGFyPjsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8
PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdj
aGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmlu
ZyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9jaGFyX3RyYWl0cy5o
IiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9jaGFyX3RyYWl0cy5o
IiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdHJpbmciIDEgMwojIDQ4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jc3RyaW5nIiAzCgojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9jc3RkZGVmIiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBp
bnQgcHRyZGlmZl90OwojIDIxMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVf
dDsKIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3N0ZGRlZiIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUwICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jc3RyaW5nIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4g
IkMiIHsKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAy
IDMgNAoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19j
b25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50
IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qg
dm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29u
c3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0
IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXpl
X3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkg
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh
ciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2Nh
bGUuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMyA0CnR5cGVkZWYgc3Ry
dWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEz
XTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAq
X19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwoKCiAgY29uc3Qg
Y2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7CiMgMTE1ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMyA0CgoKZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFyICpfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNjAg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CgoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hy
bnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9f
cywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9f
Y29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg
Y2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg
Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpf
X3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq
c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVf
cHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qg
dm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNw
eSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2
b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9f
Y29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBf
X2Vycm51bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJy
bnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2
b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2
b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZv
aWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRl
eCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wX2wgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gaW50IHN0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3Qg
X19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9f
c3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpf
X3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBj
aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNzkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MyA0Cn0KIyA1MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3N0cmluZyIgMiAzCiMgNzcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdHJpbmciIDMKbmFtZXNwYWNlIHN0ZAp7CiAg
dXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5OwogIHVz
aW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7CiAgdXNp
bmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwogIHVzaW5n
IDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5n
IDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6
c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBpbmxpbmUg
dm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJu
IG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0KCiAgdXNp
bmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBpbnQgX19u
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19z
MSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJr
KGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBi
cmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6c3Ry
cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf
X24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIoY2hhciog
X19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3RyKGNvbnN0
X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDYgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9mcG9zLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9jc3RkaW8iIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9jc3RkaW8iIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDM5ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4g
IkMiIHsKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
My9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MyA0CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQg
X19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHNp
Z25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBl
ZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxv
bmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYg
X191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9f
bW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2Zm
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVk
ZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVj
dAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFk
ZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1
c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQg
X19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGlt
ZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5
cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7
CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2Zz
YmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoK
dHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFy
X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGlu
dCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNs
dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVk
LmgiIDEgMyA0CiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApzdHJ1Y3QgX19z
Y2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3Iv
aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMgNAoKCnN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5
cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGlu
dCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBp
bnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwog
IGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3Rh
Y2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9
IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRo
cmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsK
ICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRl
ZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tf
dAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFk
ZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf
cmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQg
X19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlw
ZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVh
ZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2Nr
X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xv
Y2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9k
ZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMiAzIDQKIyA0NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDU0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVj
dCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBf
X0ZJTEU7CiMgNzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4z
L2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMg
MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDEgMyA0CiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzIDQKIyAzNTQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUx
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMgNAoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsK
ICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21i
c3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMgNAoKdHlwZWRlZiBz
dHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9z
X3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z
dGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDQ4ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDIgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKCiMgMjkgIi91c3IvaW5j
bHVkZS9nY29udi5oIiAyIDMgNAoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRl
L2djb252LmgiIDIgMyA0CgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9O
T0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlf
SU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAg
X19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwK
ICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9
IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9f
Z2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2Fk
ZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9f
Z2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2Rh
dGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq
KiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19n
Y29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9f
Z2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgq
X19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2
b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFy
ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNo
YXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3Qp
ICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2Vu
ZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZf
dHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFu
c19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0Owog
IHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoK
CnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9f
c2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVy
OwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0
IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3Qg
X19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVk
X2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAg
aW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3Rl
cF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291
dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7
CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5z
Owp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsK
ICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9f
Z2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDIgMyA0CnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2lu
Zm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBz
dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29u
dl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMiAzIDQKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkYXJnLmgi
IDEgMyA0CiMgNDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4z
L2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192
YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjIgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzIDQKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAx
NzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoK
CgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5NSAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMgNAp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAog
IF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252
Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIpIChz
dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0
X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hhciAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNo
YXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0KSAo
c3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19j
b2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2RlY3Z0
X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9k
b19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2
dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVf
dCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQg
Kik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoKCnN0
cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJfdCAq
X0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dy
aXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3JpdGVf
ZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsKCiAg
d2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7CgogIHdj
aGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJzdGF0
ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAgd2No
YXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7Cn07
CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9w
dHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciog
X0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVf
ZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAq
X0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVf
ZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAq
X2NoYWluOwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2ZsYWdzMjsKCiAgX19vZmZfdCBfb2xk
X29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBf
dnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9j
azsKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNldDsK
CgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEg
Kl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVv
ZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVf
cGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9f
RklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
IDQKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq
X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy
aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv
X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0
eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f
aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g
Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr
X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f
dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf
Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK
fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl
eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp
bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD
IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv
dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90
KSB0aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBf
SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp
bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq
X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
IyA0NjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAo
X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh
ciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0
aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3Nz
aXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9p
ZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lP
X0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg
X0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVy
biB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7
CiMgNTExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5m
IChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUg
Kiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFj
a3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgNzUgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoK
CnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDg5ICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0
eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90
OwojIDEzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5j
bHVkZS9zdGRpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAz
IDQKIyAxMzkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2lu
Y2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAq
c3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBy
ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJl
bmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY5ICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMg
NApleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAq
dG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChj
aGFyICpfX3MpIHRocm93ICgpOwojIDE4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRlbXBuYW0g
KF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUs
CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRo
cm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KSB0aHJvdyAoKTsKIyAyMzMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9w
ZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAg
ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2lj
X2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0
aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9p
ZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9j
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVs
b2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xp
c3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkp
OwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19t
YXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJp
bnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRl
cm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRl
cm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJu
IGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwK
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBp
bnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4u
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAy
LCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
CiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxF
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2
c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZf
XywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRj
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRj
IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50
IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50
IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3Vu
bG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBf
X3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsK
IyA0MzcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVz
dHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXpl
X3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xp
bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj
dCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s
IEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91
bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50
IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CiMgNTAwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9p
bmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9f
b2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVs
bG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3Nf
dCAqX19wb3MpIHRocm93ICgpOwojIDUzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmc2Vla282NCAo
RklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsK
ZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9f
cmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxF
ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4g
dm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9m
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j
b25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25z
dCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29u
c3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo
YXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2Vy
aWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50
IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0
YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBm
bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9j
a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmls
ZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY0MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zdGRpby5oIiAxIDMgNAojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5o
IiAzIDQKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQs
IF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRv
dXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgp
CnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGludApnZXRjX3VubG9j
a2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0
ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBj
aGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGludApnZXRjaGFyX3Vu
bG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIg
Pj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBj
aGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5lIGludApwdXRjaGFy
IChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0K
CgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJl
YW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hh
cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisr
ID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM
RSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVf
cHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0s
ICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5f
SU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRjaGFyX3VubG9ja2Vk
IChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIg
Pj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWdu
ZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9w
dHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90CmdldGxpbmUgKGNoYXIgKipf
X2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVy
biBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9CgoKCgoKaW5s
aW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVy
biAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5saW5lIGludApmZXJy
b3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3Ry
ZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDIgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgp9CiMgNTMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7
CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7
CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVz
aW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcg
Ojpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZw
dXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5m
OwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAg
dXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2lu
ZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpw
dXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7
CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1
c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVz
aW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2lu
ZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2lu
ZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jc3RkaW8i
IDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZm
c2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2
c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwog
IHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1
c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0K
IyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytpby5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDEgMwojIDM3ICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVm
YXVsdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiMgMjkgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKIyAxICIvdXNyL2lu
Y2x1ZGUvc2NoZWQuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMgNAojIDEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMTE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
IDQKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQg
dHZfbnNlYzsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMyA0CiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3Nj
aGVkLmgiIDMgNApzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0
eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2
b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBf
X2ZsYWdzLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2No
ZWQuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0g
KF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0
cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9z
ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwg
c3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzY2hlZF9zZXRh
ZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21hc2spIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVk
IGxvbmcgaW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGludCAqX19tYXNrKSB0aHJvdyAoKTsKCgp9CiMgMzAgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApl
eHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMgNDMg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CiMgNTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMg
NAoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCiMgNzQgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMgNAoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzIDQKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMgNAoKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1f
bWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRt
X3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAg
bG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgoK
CgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7
CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoK
CgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBf
X3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhz
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lX2wgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9f
Y29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9j
YWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0
cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAq
X19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1l
IChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAq
YXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4g
Y2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25n
IGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZv
aWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4g
bG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fd2hlbikgdGhyb3cgKCk7CiMgMzA3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJu
IHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVf
dCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNp
emUgKGludCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVz
dGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWlu
aW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Ns
b2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNs
b2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHAp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tf
aWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f
cmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwg
Y2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3Jl
YXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVy
X2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJf
c2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBf
X292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9f
dGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMg
Mzc4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoK
CgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJv
dyAoKTsKIyAzOTMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gaW50IGdldGRhdGVf
ciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKfQojIDMxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJl
YWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzIDQKIyAzMSAiL3Vz
ci9pbmNsdWRlL3NpZ25hbC5oIiAzIDQKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMyA0
CnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1
bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25n
IGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIg
MyA0CiMgNTAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0CnR5cGVkZWYgX19zaWdzZXRfdCBz
aWdzZXRfdDsKIyAzNzcgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0Cn0KIyAzNCAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9wdGhyZWFkLmgi
IDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMyA0CiMgMzUg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMyA0CiMg
MzYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUv
cHRocmVhZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDY4ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmVudW0Kewog
IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsK
CmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hF
RAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BS
T0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVU
RVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFE
X01VVEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURf
TVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVY
X1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVY
X0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9O
T1JNQUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJ
VkVfTlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9Q
Uk9DRVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVS
X05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tf
UFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9O
UCA9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAxNDAgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQK
c3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9p
ZCAqKTsKICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVh
ZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9F
TkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FO
Q0VMX0RFRkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTcyICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJl
YWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmlj
dCBfX3RociwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJf
dCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigq
X19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFk
X3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVh
ZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVh
ZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJh
bSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xp
Y3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xp
Y3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAo
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0
cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
c2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0
YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRy
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikK
ICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3Ry
aWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jl
c3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFk
X2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNj
aGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFt
IChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jl
c3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rl
c3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0
ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0
cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4
YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry
aWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19y
ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50
ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAo
cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9j
b25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9j
b25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0
aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hh
cmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAo
cHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0
cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcnds
b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Jk
bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRf
cndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j
aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGlt
ZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sg
KHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3
bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr
YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Bz
aGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFy
ZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRy
X3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtp
bmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwojIDUxOCAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9wdGhyZWFkLmgi
IDMgNApleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9f
bG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
c3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3RyeWxvY2sgKHB0aHJlYWRfc3Bpbmxv
Y2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl91bmxvY2sg
KHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmll
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2JhcnJp
ZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19h
dHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRf
YmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRy
X3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZGVz
dHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVy
YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRf
YmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJlYWRfYmFycmll
cl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU2NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0
aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3Qg
X19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Bv
aW50ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhy
ZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1ODUgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBw
dGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpf
X29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUg
KGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRo
cmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTkgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJu
IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZm
ZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf
X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf
cG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNjQwICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJl
YWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMg
NjUxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl
L3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUg
KHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQp
IHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMy9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMyA0CiMgNDAgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQu
aCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19uZXdtYXNr
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX29s
ZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3Ro
ciwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY2NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMgNjgwICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQu
aCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lk
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRo
cm93ICgpOwoKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiAiQyIgewojIDE3
NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np
eF9vcHQuaCIgMSAzIDQKIyAxNzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNs
dWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRz
aXplLmgiIDEgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAyIDMg
NAojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDE5MyAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAzIDQKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMyA0CiMgMjAwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CgoKCgoKdHlwZWRlZiBf
X2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19v
ZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYg
X191c2Vjb25kc190IHVzZWNvbmRzX3Q7CiMgMjQwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMg
NAp0eXBlZGVmIF9faW50cHRyX3QgaW50cHRyX3Q7CgoKCgoKCnR5cGVkZWYgX19zb2NrbGVuX3Qg
c29ja2xlbl90OwojIDI2MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBh
Y2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIHRo
cm93ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIF9fb2ZmX3Qg
bHNlZWsgKGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIHRocm93ICgp
OwojIDMwMiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIF9fb2ZmNjRfdCBsc2Vl
azY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6
ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAo
KTsKCgpleHRlcm4gc3NpemVfdCB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQs
IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgdGhy
b3cgKCk7CmV4dGVybiBzc2l6ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19i
dWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCkg
dGhyb3cgKCk7CiMgMzQwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gc3NpemVf
dCBwcmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4g
c3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAz
NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0g
KHVuc2lnbmVkIGludCBfX3NlY29uZHMpIHRocm93ICgpOwojIDM3MSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzIDQKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vj
b25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNv
bmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgdXNsZWVwIChfX3VzZWNvbmRzX3QgX191c2Vjb25kcykgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2hvd24g
KF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkK
ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9f
b3duZXIsIF9fZ2lkX3QgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxjaG93biAo
X19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQog
ICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBjaGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaGRpciAoaW50IF9fZmQpIHRocm93ICgpOwojIDQy
MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAq
X19idWYsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3Vy
cmVudF9kaXJfbmFtZSAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAo
Y2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4
dGVybiBpbnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2Fy
Z3ZbXSwKICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3Zb
XSwgY2hhciAqX19jb25zdCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
ZXhlY3YgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0
IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0
IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBleGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJn
dltdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmls
ZSwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmlj
ZSAoaW50IF9faW5jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0
dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2NvbmZuYW1lLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1l
LmgiIDMgNAplbnVtCiAgewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgog
ICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoK
ICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9f
VFJVTkMsCgogICAgX1BDX1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lO
Q19JTywKCiAgICBfUENfUFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJ
TEVTSVpFQklUUywKCiAgICBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFY
X1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVS
X0FMSUdOLAoKICAgIF9QQ19BTExPQ19TSVpFX01JTiwKCiAgICBfUENfU1lNTElOS19NQVgKCiAg
fTsKCgplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBf
U0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAg
IF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJP
TCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9T
Q19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJP
Tk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9J
TywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9D
SywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgog
ICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hB
UkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlP
X01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01B
WCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19W
RVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0Nf
U0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVf
TUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9T
Q19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19N
QVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwK
CiAgICBfU0NfRVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RV
UF9NQVgsCgogICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwK
CiAgICBfU0NfMl9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYs
CgogICAgX1NDXzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FM
RURFRiwKCgogICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tF
VCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xM
LAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVgg
PSBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0Nf
UElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9P
U0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBf
U0NfVEhSRUFEUywKCiAgICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRH
Ul9SX1NJWkVfTUFYLAoKICAgIF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9O
QU1FX01BWCwKCiAgICBfU0NfVFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RP
Ul9JVEVSQVRJT05TLAoKICAgIF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9T
VEFDS19NSU4sCgogICAgX1NDX1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FU
VFJfU1RBQ0tBRERSLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RI
UkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoK
ICAgIF9TQ19USFJFQURfUFJJT19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFS
RUQsCgoKICAgIF9TQ19OUFJPQ0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxO
LAoKICAgIF9TQ19QSFlTX1BBR0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FU
RVhJVF9NQVgsCgogICAgX1NDX1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAg
ICBfU0NfWE9QRU5fWENVX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hP
UEVOX0NSWVBULAoKICAgIF9TQ19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoK
CiAgICBfU0NfMl9DSEFSX1RFUk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQ
RSwKCgogICAgX1NDX1hPUEVOX1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hP
UEVOX1hQRzQsCgoKICAgIF9TQ19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1ND
X0NIQVJfTUlOLAoKICAgIF9TQ19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19M
T05HX0JJVCwKCiAgICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1ND
X05aRVJPLAoKICAgIF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0Nf
U0NIQVJfTUlOLAoKICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1ND
X1VDSEFSX01BWCwKCiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBf
U0NfVVNIUlRfTUFYLAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoK
ICAgIF9TQ19OTF9NU0dNQVgsCgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwK
CiAgICBfU0NfTkxfVEVYVE1BWCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1ND
X1hCUzVfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hC
UzVfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9S
RUFMVElNRSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklT
T1JZX0lORk8sCgogICAgX1NDX0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xB
TkdfU1VQUE9SVCwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VM
RUNUSU9OLAoKICAgIF9TQ19DUFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBf
U0NfREVWSUNFX0lPLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9T
UEVDSUZJQ19SLAoKICAgIF9TQ19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBF
LAoKICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBf
U0NfRklMRV9TWVNURU0sCgogICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElf
UFJPQ0VTUywKCiAgICBfU0NfU0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgog
ICAgX1NDX1JFQURFUl9XUklURVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1ND
X1JFR0VYUCwKCiAgICBfU0NfUkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1ND
X1NJR05BTFMsCgogICAgX1NDX1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAg
X1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAg
ICBfU0NfU1lTVEVNX0RBVEFCQVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBF
RF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JP
VVBTX1IsCgogICAgX1NDXzJfUEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9T
Q18yX1BCU19MT0NBVEUsCgogICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RS
QUNLLAoKICAgIF9TQ19TWU1MT09QX01BWCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9Q
QlNfQ0hFQ0tQT0lOVCwKCgogICAgX1NDX1Y2X0lMUDMyX09GRjMyLAoKICAgIF9TQ19WNl9JTFAz
Ml9PRkZCSUcsCgogICAgX1NDX1Y2X0xQNjRfT0ZGNjQsCgogICAgX1NDX1Y2X0xQQklHX09GRkJJ
RywKCgogICAgX1NDX0hPU1RfTkFNRV9NQVgsCgogICAgX1NDX1RSQUNFLAoKICAgIF9TQ19UUkFD
RV9FVkVOVF9GSUxURVIsCgogICAgX1NDX1RSQUNFX0lOSEVSSVQsCgogICAgX1NDX1RSQUNFX0xP
RwoKICB9OwoKCgoKCmVudW0KICB7CiAgICBfQ1NfUEFUSCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFH
UyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBf
Q1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9M
REZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCgoK
CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9J
TFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAg
X0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJ
R19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hC
UzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFH
UywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09G
RjY0X0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1
X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1Ms
CgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdf
T0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAg
IF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy
X09GRjMyX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMsCgogICAg
X0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQ
MzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1Ms
CgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9J
TFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFH
UywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9W
Nl9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdT
LAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9W
Nl9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJ
QlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MsCgoKCiAgICBfQ1Nf
VjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTCgogIH07CiMgNTAxICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDIgMyA0CgoKZXh0ZXJuIGxvbmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0
aCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50
IF9fZmQsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChp
bnQgX19uYW1lKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBfX3BpZF90IGdldHBwaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3Qg
Z2V0cGdycCAodm9pZCkgdGhyb3cgKCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMg
NApleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKZXh0
ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgc2V0cGdpZCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpIHRocm93ICgpOwoj
IDU2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lk
KSB0aHJvdyAoKTsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBfX3Bp
ZF90IHNldHNpZCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19w
aWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lk
ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBf
X2dpZF90IF9fbGlzdFtdKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9f
Z2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBf
X3VpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwg
X191aWRfdCBfX2V1aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90
IF9fdWlkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lk
X3QgX19lZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dp
ZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBfX3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo
YXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3Ig
KGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHR0eXNs
b3QgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9f
ZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzeW1saW5r
IChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5saW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBybWRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgp
OwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBncnAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3JwX2lkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
Z2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHNldGxvZ2luIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMg
NzI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQu
aCIgMSAzIDQKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuICJDIiB7CiMg
NDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0CmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEg
Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0CmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJu
IGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9pbmNsdWRlL2dl
dG9wdC5oIiAzIDQKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAq
X19fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMpOwojIDE3NSAiL3Vzci9pbmNsdWRlL2dl
dG9wdC5oIiAzIDQKfQojIDcyNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAoKCgoKCgoK
ZXh0ZXJuIGludCBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcgaW50
IF9faWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19u
YW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9f
Y29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgdmhhbmd1cCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3Qg
Y2hhciAqX19maWxlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25l
ZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgYWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5k
dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9f
bm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNoYXIg
Kl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNoYXIg
Kl9fcHJvbXB0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRwYWdl
c2l6ZSAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgp
IHRocm93ICgpOwojIDgzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCB0
cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3RoKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0
aCkgdGhyb3cgKCk7CiMgODUxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50
IGZ0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IGdldGR0YWJsZXNpemUgKHZvaWQpIHRocm93ICgpOwojIDg2NiAiL3Vzci9p
bmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93ICgpOwoj
IDg4NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwg
KGxvbmcgaW50IF9fc3lzbm8sIC4uLikgdGhyb3cgKCk7CiMgOTA3ICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMgNApleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90
IF9fbGVuKSB0aHJvdyAoKTsKIyA5MTcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVy
biBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJv
dyAoKTsKIyA5MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgZmRhdGFz
eW5jIChpbnQgX19maWxkZXMpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNyeXB0IChf
X2NvbnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkgdGhyb3cgKCk7CgoKCmV4
dGVybiB2b2lkIGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2Zyb20s
IHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfYXRm
b3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoKdHlw
ZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29uY2Vf
dCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0
ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRocmVh
ZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3ZWFr
IHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKI3By
YWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2Nr
CiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRf
bXV0ZXhfdW5sb2NrCiMgODcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk
X2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVf
cHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZl
X3B0ciAhPSAwOwp9CiMgNDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh
ZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAg
aWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2Us
IGZ1bmMpOwogIGVsc2UKICAgIHJldHVybiAtMTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhy
ZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQg
KikpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMg
aW5saW5lIGludApfX2d0aHJlYWRfa2V5X2R0b3IgKF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQg
KnB0cikKewoKICBpZiAocHRyKQogICAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwg
MCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9r
ZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2Rl
bGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmlj
IChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtl
eSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFk
X2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lm
aWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sg
KF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkp
CiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJu
IDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJl
YWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0
dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9
CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0
ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0
aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgi
IDIgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1v
ZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qg
d3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYg
X19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoK
ICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7Cgog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9
IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dw
b2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAw
eDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAg
fCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgw
MTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAw
eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2N3Y2hhciIg
MSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2N3Y2hhciIgMwoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2N0aW1lIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvY3RpbWUiIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3Rp
bWUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90
OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1
c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5n
IDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcg
OjpzdHJmdGltZTsKfQojIDUyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDAgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MiAzIDQKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDIgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKCiMgODggIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAzIDQKCgp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKCgoKIyAxMTMg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgpzdHJ1Y3QgdG07CgoK
CgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
cmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90
ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJu
IHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Mx
LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19z
MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgd2NzY29s
bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgp
OwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsX2wgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAg
ICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm1f
bCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0
IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90
ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAq
X19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2Nz
LCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAq
X193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFy
X3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2No
YXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9f
Y29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywg
X19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpf
X3MsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3Ms
IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3My
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hh
cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2No
YXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3
Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25z
dCBtYnN0YXRlX3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
biwKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAog
ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAo
KTsKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJp
Y3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90
ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBt
YnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cg
KCkKeyByZXR1cm4gKF9fcHMgIT0gX19udWxsCiAgICAgICAgICA/IG1icnRvd2MgKF9fbnVsbCwg
X19zLCBfX24sIF9fcHMpIDogX19tYnJsZW4gKF9fcywgX19uLCBfX251bGwpKTsgfQoKCgoKCmV4
dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f
cHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmlj
dCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh
dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNu
cnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBf
X3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3Ry
aWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbndjLCBz
aXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFyX3QgX19j
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3Rv
ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n
IGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApl
eHRlcm4gbG9uZyBpbnQgd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bF9sIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGxfbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGxfbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHdjc3RvZF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBmbG9hdCB3Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2Nh
bGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91
YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3Rv
Zl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50
ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBfX2lu
bGluZSBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy
LCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xfaW50ZXJuYWwgKF9fbnB0
ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcg
aW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu
ZHB0ciwgX19iYXNlLCAwKTsgfQoKCgpleHRlcm4gX19pbmxpbmUgZmxvYXQgd2NzdG9mIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193
Y3N0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBfX2lubGluZSBs
b25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgMCk7IH0KCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSBsb25nIGxvbmcg
aW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJv
dyAoKQp7IHJldHVybiBfX3djc3RvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz
ZSwgMCk7IH0KX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25n
IGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdj
aGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19z
cmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAo
X19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50
ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7Cgpl
eHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGlu
dCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3
cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4g
aW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7
CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2Nh
bmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkg
OwoKCgoKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg
OwoKZXh0ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg
KCkgOwoKZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv
dyAoKSA7CgoKCgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90
IGZwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu
IHdpbnRfdCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHdjaGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193
cywKICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9p
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90
IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdj
X3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3Ms
IGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBz
aXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19m
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fdHApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyA3MzcgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKfQojIDU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9jd2NoYXIiIDIgMwojIDY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIiIDMK
bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAxMzMgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRf
dDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsK
ICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVz
aW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNp
bmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNp
bmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNp
bmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1
c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsK
ICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmlu
dGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2Nh
dDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7
CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47
CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7
CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7
CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAg
dXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVz
aW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1
c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1
c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwg
d2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+
KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3
Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhj
b25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3Ny
Y2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBf
X2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBf
X2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2No
YXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxj
b25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5s
aW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3Qg
X19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwg
X19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2Nz
dG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNl
IHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2Nz
dG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgNDYgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0
cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAg
ICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9Cgog
ICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsg
fQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlw
ZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9
IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoK
ICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAg
ICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19v
ZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1v
ZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MK
ICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190
KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAg
fQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAg
ICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1
cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYg
X19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAg
ICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAg
eyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAg
IF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAg
IF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsK
CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCiAgdHlwZWRlZiBmcG9zPG1i
c3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDYxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBf
Q2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0
eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5
cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9p
ZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90
eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAg
ICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz
aXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJf
dHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29u
c3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBj
aGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg
ICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3Ms
IHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAg
ICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5
cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGlj
IGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90
eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0
YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsK
CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAg
dHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAg
IHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZf
dHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2
b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikK
ICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3Qg
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9f
YzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBl
JiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2My
OyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3Mx
LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNt
cChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChj
b25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3Ms
IHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBz
dGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90
eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5
cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
KgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXpl
X3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19z
MSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihj
aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAg
c3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0
YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBp
bnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEg
PT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg
IG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2Yo
KSkgPyAwIDogX19jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJh
aXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgd2ludF90IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlw
ZTsKICAgICAgdHlwZWRlZiB3c3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIG1ic3Rh
dGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlw
ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9Cgog
ICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo
YXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAg
ICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9Cgog
ICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAg
ICAgeyByZXR1cm4gd2NzbGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJf
dHlwZSYgX19hKQogICAgICB7IHJldHVybiB3bWVtY2hyKF9fcywgX19hLCBfX24pOyB9CgogICAg
ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hh
cl90eXBlKiBfX3MyLCBpbnRfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1tb3ZlKF9fczEs
IF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0
dXJuIHdtZW1jcHkoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK
ICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQog
ICAgICB7IHJldHVybiB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hh
cl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSB7IHJldHVybiBj
aGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBl
KGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBz
dGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3Qg
aW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigo
MHhmZmZmZmZmZnUpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29u
c3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkg
PyAwIDogX19jOyB9CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJU
IF9NX2M7CiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9j
KF9fYykgeyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2Ep
IHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0OCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1v
cnkiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jbGltaXRzIiAxIDMKIyA0OCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY2xpbWl0cyIgMwoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAoj
IDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl
L2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMgNAoKCgoKCgojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0
CiMgMTIyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs
dWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTQ0
ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4
MV9saW0uaCIgMSAzIDQKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMyA0
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5j
bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRz
LmgiIDEgMyA0CiMgMzcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMgNAojIDEy
NyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMgNAojIDE0NSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0u
aCIgMSAzIDQKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMv
eG9wZW5fbGltLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMg
NAojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzIDQKIyAxNTMgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyAxMjMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgOCAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIg
MiAzIDQKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMv
aW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Y2xpbWl0cyIgMiAzCiMgNjcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIiIDEg
MwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jc3RkbGliIiAzCgoKCgojIDEgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0Cgpl
eHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIgMSAz
IDQKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3dhaXRzdGF0dXMuaCIgMSAzIDQKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1
cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMyA0CiMgMzcgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMyA0
CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzIDQKIyA2NCAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAyIDMgNAoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsK
ICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3Owog
ICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQg
X193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9f
d2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50
IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAg
ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMg
NDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzIDQKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsK
ICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBs
b25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3Ry
dWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAg
fSBsbGRpdl90OwoKCiMgMTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gc2l6
ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRv
dWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBj
aGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgojIDIyOSAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzIDQKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9f
bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9mX2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0
cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIF9faW5saW5l
IGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9s
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1
bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg
KCkKewogIHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz
ZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRl
cm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4g
X19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgoKX19leHRlbnNp
b25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGlu
dCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIs
IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRo
cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25n
IGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVy
biBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19l
eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3Vs
bCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRv
dWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpleHRlcm4g
X19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsKTsKfQpleHRlcm4gX19pbmxp
bmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIChp
bnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KZXh0ZXJuIF9faW5s
aW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0
dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KCgoKCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAq
X19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9f
bnVsbCwgMTApOwp9CgojIDQwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNo
YXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwg
KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2No
YXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlw
ZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9f
dV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBf
X2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBf
X2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKIyA3MSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBl
ZGVmIF9fbmxpbmtfdCBubGlua190OwojIDEwNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
IDQKdHlwZWRlZiBfX2lkX3QgaWRfdDsKIyAxMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MyA0CnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7
CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDE0MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzIDQKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNo
b3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVf
aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoK
dHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9f
KSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5o
IiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAojIDQ2ICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgi
IDEgMyA0CiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1ldmFs
CiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07
CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMgNTUgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKIyA2NyAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19m
ZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAg
fSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTkgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxl
Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg
ICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAg
ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAg
ICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJv
dyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMgNAojIDIxOSAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMgNAoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoK
CnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNi
bGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7
CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2
NF90IGZzZmlsY250NjRfdDsKCgp9CiMgNDE1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0
CgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBj
aGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0
cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRy
OwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVn
OwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGlu
dCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2Rh
dGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGlu
dCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy
YW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0
YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2ln
bmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVk
IGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJv
dyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEK
ICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50
IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hv
cnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0
ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb
M10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5k
NDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNv
bmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgoKCgoKCgoKZXh0
ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXpl
X3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK
CgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2
b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIp
IHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzIDQKIyAyNSAiL3Vz
ci9pbmNsdWRlL2FsbG9jYS5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1
ZGUvYWxsb2NhLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2Nh
IChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTc3ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMyA0CgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9t
ZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3Np
emUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVy
biB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywg
dm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZv
aWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAo
X19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJl
X2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
cHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxh
Y2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpf
X25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAo
KTsKIyA2NjEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpta3RlbXAg
KGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChj
aGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MyA0CmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2
ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFy
ICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBj
aGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6
ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA3MTIgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu
X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf
Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0
IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsK
CgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK
ZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg
aW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50
IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBl
eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMyA0CmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
Z2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy
ICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1Zikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f
cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0
X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93
ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25z
dCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Rv
bWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf
dCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzIDQKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwK
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMs
CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25h
bWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBf
X2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3Vi
bGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAg
dXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcg
OjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7
CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVz
aW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjps
YWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwog
IHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1
c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcg
OjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6
c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBs
b25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZf
dAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0K
IyAxMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIiIDMKbmFtZXNwYWNlIF9f
Z251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBs
b25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAt
X194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVy
biBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBs
b25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAv
IF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZf
dAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsg
X19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0K
CiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAg
dXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVz
aW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19n
bnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6
OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3Ry
dG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3Ry
dG9sZDsKfQojIDY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbmV3IiAxIDMKIyA0MiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbmV3IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
ZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKIyA1MiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0aW9uIiAzCiAgY2xhc3MgZXhjZXB0aW9uCiAgewog
IHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRp
b24oKSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJv
dygpOwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7
CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwg
fmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5h
dGVfaGFuZGxlcikgKCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7
CgoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0
aHJvdygpOwoKCiAgdm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5k
bGVyKSB0aHJvdygpOwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9y
ZXR1cm5fXykpOwojIDEwMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0aW9uIiAz
CiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVf
Y3h4CnsKIyAxMTMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2V4Y2VwdGlvbiIgMwogIHZv
aWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDMgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7
CgoKCgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRo
cm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhy
b3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19o
YW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDgyICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6
ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNp
emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCop
IHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9w
ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2
b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0
aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3Qm
KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhy
b3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwg
dm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3Ig
bmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgpp
bmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cmlu
bGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9
CiMgNzAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvc2Z3ZCIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk
CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs
bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf
X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj
aGFyKiBfX3MpOwp9CiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvc2Z3ZCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAg
ICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19z
dHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9B
bGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFt
YnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8
Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJh
c2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29z
dHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0
cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZp
bGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxj
aGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNf
aXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJf
dD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07
CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVm
IGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFz
aWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19m
aWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJf
dD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0KIyA3MSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQKewoK
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYg
X1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsK
ICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBw
YWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQo
X19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3Qg
cGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29u
ZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0g
X195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICgh
KF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kg
PCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CiMgMTQwICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkK
CgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA1MyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5
cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1i
ZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
dHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
bmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
bmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9u
ZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3Qg
X0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3
Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRv
ciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIF9fZ251
X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy
PiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
LCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVf
Y3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNw
YWNlIHN0ZAp7CiMgNzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0
cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90
YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVj
dCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyB7fTsKIyAxMDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlw
ZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0
cnVjdCBpdGVyYXRvcgogICAgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0
ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlz
dGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoK
ICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZh
bHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9p
bnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNl
IHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBp
dGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7
CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAg
IHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYp
CiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5l
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgog
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUgX19uID0gMDsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAg
KytfX2ZpcnN0OyArK19fbjsKICAgICAgfQogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog
ICAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpCiAgICB7CgogICAgIAogICAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICAgIH0KIyAx
MDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
Y3MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5lIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog
ICAgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
KQogICAgewoKICAgICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5jZShf
SW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsK
CiAgICAgCiAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFu
Y2UgX19uLAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoK
ICAgICAKCiAgICAgIGlmIChfX24gPiAwKQogICAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAg
ICAgIGVsc2UKICAgICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu
bGluZSB2b2lkCiAgICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0
YW5jZSBfX24sCiAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgIAogICAgICBfX2kgKz0gX19uOwogICAgfQojIDE2MiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lk
CiAgICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgICB7Cgog
ICAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7CiAgICB9
Cn0KIyA3NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MSAzCiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFz
cyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0
ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBf
SXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9p
dGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihp
dGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0
ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5j
dXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICBy
ZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAg
ICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAg
ICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UK
ICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9
IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBv
aW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9
CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7
CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAg
ICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAg
ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3It
LShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg
ICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAg
ICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBj
b25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoK
CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90
eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9y
LShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQg
Kz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVu
Y2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAq
KCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNl
KCkgPCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBf
X3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg
ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsg
cmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAg
IG9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJh
c2UoKSAtIF9fbik7IH0KIyAzMjkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3Mg
YmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv
cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
IF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250
YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTUgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFj
a19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpj
b25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9i
YWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAg
ICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo
aXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgYmFja19pbnNl
cnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPihfX3gpOyB9CiMgNDAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs
YXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0
ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoK
ICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6
Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hf
ZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoK
CiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyso
aW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTcgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp
bmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJv
bnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy
PgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRf
aXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVk
OgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNv
bnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gs
IHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9f
eCksIGl0ZXIoX19pKSB7fQojIDUxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShj
b25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAg
ewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAg
ICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2Vy
dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAg
aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K
ICAgIH07CiMgNTUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFt
ZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwog
IHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgOiBwdWJs
aWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBf
TV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9N
X2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX19ub3JtYWxf
aXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQoKCiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0
b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICAg
ICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQoKICAgICAgcG9pbnRlcgog
ICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICAgICAgX19u
b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJu
ICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9y
bWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAq
dGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItLShpbnQpIHsg
cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgogICAgICByZWZlcmVu
Y2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9j
dXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgog
ICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogICAgICBfX25v
cm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
bikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25v
cm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24p
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24p
OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBf
TV9jdXJyZW50OyB9CiAgICB9OwojIDY1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf
X2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv
cGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+
JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JM
LCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s
CiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
UiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJh
c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh
c2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l
cj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
UiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l
IHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZm
ZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
TCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo
KSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu
YW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7
IH0KfQojIDc2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEs
IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9G
b3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgog
ICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAq
X19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv
aWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBf
X3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAx
NDYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19iIDwg
X19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJl
dHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19h
KSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlm
IChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIyMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l
IF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19y
ZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w
eShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7
CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0t
X19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZp
YWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkK
ICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19s
YXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJz
dCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf
T3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlw
ZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAg
ICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19j
b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19m
aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBf
X3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVy
biBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ
dGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1
ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAg
ICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9u
aTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs
OwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwg
X19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19j
b3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9f
Tm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAg
IHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVy
YXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlf
bmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNr
d2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFz
dDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9C
aWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19s
YXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1f
X2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJk
X2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNv
cHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
dCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAg
ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCos
IF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNv
bnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAg
IHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg
ICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7
CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25z
dCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAg
Y29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBf
VHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg
X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJz
dCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5
cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8
X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVu
YW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3Jt
YWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAg
eyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+
CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0
b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJu
IF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAg
X19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9f
cmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9y
bWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5i
YXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
LCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1
dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBl
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46
Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25v
cm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMg
NDc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgog
ICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0
KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
bm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3Zh
bHVlOwogICAgfQojIDUzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6
ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAg
ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBf
X3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZp
bGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1
bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAg
IG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUg
dm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNv
bnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAg
ICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xh
c3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBj
aGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwog
ICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19s
YXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGlu
ZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXpl
IF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZp
bGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAg
ICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJu
IF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5s
aW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFy
JiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAg
ICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9f
Zmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2Zp
cnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+
KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmlu
YXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBf
SW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAg
ZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg
ICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
aW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlm
ICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7
ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz
dDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAg
ICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29t
cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0K
ICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK
ICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg
dW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19s
YXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2Zp
cnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIs
IG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3Vs
dCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFy
KiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoK
ICB9Cgp9CiMgNTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODggIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0CiMg
NjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAq
X19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19l
cnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAq
X19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9jYXNzZXJ0IiAyIDMKIyA4OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvZXhj
ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3df
YmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRf
dHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50
aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsK
fQojIDkwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwoj
IDU0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVm
IHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBf
X2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShf
UkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRl
eF90IF9fdG1wID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsK
ICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAg
IF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50
X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9j
aygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAg
IHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAg
dm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211
dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9
CiAgfTsKIyAxMDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3RocmVhZHMu
aCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0
CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBs
YXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFkX211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3Ry
dWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1F
RF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2Fw
KHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVh
ZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVu
c2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVh
ZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KCn0KIyAxNTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1NUTF9tdXRl
eF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQK
ICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE5MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9s
b2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogICAg
fQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVh
ZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAgfQogIH07CiMgMjI4ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9hdXRvX2xv
Y2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAgX1NUTF9hdXRvX2xvY2so
X1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2su
X01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01f
cmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9T
VExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYp
OwogIH07Cgp9CiMgOTEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9j
LmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWlj
X3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVz
ZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwg
aW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18g
X192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAg
IDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCks
ICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVz
ZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9f
dmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAg
ICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5
Iik7Cn0KIyA5MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJsaWM6CiAgICBz
dGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiA6Om9wZXJh
dG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9OwojIDEyNyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGlu
dCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJp
dmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKCgoKICAgICAg
c3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgogICAgcHVibGlj
OgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewog
ICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKDAgPT0gX19y
ZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJldHVybiBfX3Jl
c3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBf
X3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CiMgMTYxICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgICAgIHN0YXRpYyB2b2lkICgqIF9fc2V0
X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgICAgIHsKICAgICAgICB2b2lkICgq
IF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgX19tYWxsb2Nf
YWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CiAg
ICB9OwoKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0
ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD46OgogICAgX1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQogICAgewogICAgICB2b2lk
ICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAg
Zm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxs
b2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5k
bGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9f
bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwog
ICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg
ICAgfQogICAgfQojIDIxNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxs
b2MuaCIgMwogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIyOSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAg
IHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUo
X19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUo
KQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u
KQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9f
cCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9
OwojIDI2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9fZGVidWdfYWxsb2MKICAgIHsK
ICAgIHByaXZhdGU6CgoKICAgICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCiAgICBwdWJsaWM6CiAg
ICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAg
ICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBf
U19leHRyYSk7CiAgICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgICAgIHJldHVy
biBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGNo
YXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAgIChzdGF0
aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiwgMjg2LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsKICAgICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4
dHJhKTsKICAgICAgfQojIDMwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
YWxsb2MuaCIgMwogICAgfTsKIyAzMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAg
IGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAg
ZW51bSB7X0FMSUdOID0gOH07CiAgICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgICBl
bnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgICAgdW5pb24gX09i
agogICAgICB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAg
Y2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICAgICAgfTsKCiAgICAgIHN0YXRpYyBfT2JqKiB2b2xh
dGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICAgIHN0YXRpYyBjaGFyKiBfU19z
dGFydF9mcmVlOwogICAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICAgIHN0YXRpYyBz
aXplX3QgX1NfaGVhcF9zaXplOwoKICAgICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2Rl
X2FsbG9jYXRvcl9sb2NrOwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBfU19yb3VuZF91cChz
aXplX3QgX19ieXRlcykKICAgICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJ
R04tMSkgJiB+KChzaXplX3QpIF9BTElHTiAtIDEpKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAog
ICAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykKICAgICAgeyByZXR1cm4gKCgo
X19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOyB9CgoKCiAg
ICAgIHN0YXRpYyB2b2lkKgogICAgICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICAgIHN0
YXRpYyBjaGFyKgogICAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9i
anMpOwoKCgogICAgICBzdHJ1Y3QgX0xvY2sKICAgICAgewogICAgICAgIF9Mb2NrKCkgeyBpZiAo
X190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CiAg
ICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9N
X3JlbGVhc2VfbG9jaygpOyB9CiAgICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsK
ICAgICAgZnJpZW5kIHN0cnVjdCBfTG9jazsKCiAgICAgIHN0YXRpYyBfQXRvbWljX3dvcmQgX1Nf
Zm9yY2VfbmV3OwoKICAgIHB1YmxpYzoKCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0
ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXQgPSAwOwoKCgoKICAgICAg
ICBpZiAoX1NfZm9yY2VfbmV3ID09IDApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChnZXRl
bnYoIkdMSUJDUFBfRk9SQ0VfTkVXIikpCiAgICAgICAgICAgICAgX19hdG9taWNfYWRkKCZfU19m
b3JjZV9uZXcsIDEpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19hdG9taWNfYWRk
KCZfU19mb3JjZV9uZXcsIC0xKTsKCiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKF9T
X2ZvcmNlX25ldyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIl9TX2ZvcmNlX25ldyAhPSAw
IiwgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiLCA0MDUsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgICAgfQoKICAgICAgICBpZiAoKF9fbiA+
IChzaXplX3QpIF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9f
cmV0ID0gX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAg
ewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp
c3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAgICAg
IF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9f
cmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBpZiAoX19yZXN1bHQgPT0gMCkK
ICAgICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz
dCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgX19yZXQg
PSBfX3Jlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9f
cmV0OwogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBf
X3AsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9NQVhf
QllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9fbmV3X2FsbG9jOjpkZWFs
bG9jYXRlKF9fcCwgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAg
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgICAgX09iaiogX19xID0gKF9PYmoq
KV9fcDsKCgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAg
X19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAq
X19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCgogICAgfTsKCiAg
dGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7
CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxf
X2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcyxfX2luc3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBf
X3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z
dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAg
ICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQog
ICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46OgogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpz
KQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMg
PSBfX3NpemUgKiBfX25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2Zy
ZWUgLSBfU19zdGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5
dGVzKQogICAgICAgIHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jl
c3VsdCA7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsK
ICAgICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19y
ZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs
X2J5dGVzOwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIg
KiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAg
ICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09i
aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlz
dCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09i
aiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7
CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9j
OjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9m
cmVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAg
ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19w
OwoKCgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19p
IDw9IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlf
ZnJlZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9N
X2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj
aGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy
ZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19z
aXplLCBfX25vYmpzKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJl
ZSA9IChjaGFyKilfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAg
ICAgICAgIH0KICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAg
ICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAg
ICAgcmV0dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAg
fQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgog
ICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxs
KHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9f
Y2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGls
ZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1
cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAg
aWYgKDEgPT0gX19ub2JqcykKICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVl
X2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9f
cmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9v
YmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKysp
CiAgICAgICAgewogICAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAg
ICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAg
ICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19j
dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAt
PiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4o
X19yZXN1bHQpOwogICAgfQojIDYwNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAg
X1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9f
aW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgID0geyB7MCwgMCwgMCwgUFRIUkVBRF9N
VVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxf
X2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9f
aW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CiAgICBzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2lu
c3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KICAgIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19p
bnN0Pjo6X09iaiogdm9sYXRpbGUKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPGZhbHNlLDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2NDMgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBjbGFzcyBhbGxvY2F0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9j
IF9BbGxvYzsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAg
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBw
b2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlw
ZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVy
ZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0
b3I8X1RwMT4gb3RoZXI7IH07CgogICAgICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFs
bG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcDE+CiAgICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93
KCkge30KICAgICAgfmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAg
YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25z
dF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv
bnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIHJldHVybiBfX24gIT0gMAogICAgICAgICAg
PyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkg
OiAwOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBz
aXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVv
ZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3co
KSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQgY29uc3Ry
dWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7
IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9
OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KICAgIHsKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICAgICAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZvaWQgdmFsdWVf
dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu
ZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CiAgICB9OwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBf
VDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYs
IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgNzMxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3IKICAgIHsK
ICAgICAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgICAgIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0
eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50
ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1Rw
JiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsgfTsKCiAgICAgIF9fYWxsb2Nh
dG9yKCkgdGhyb3coKSB7fQogICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19h
KSB0aHJvdygpCiAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxs
b2MpIHt9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIF9fYWxsb2NhdG9y
KGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgICAgIDog
X191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB+X19h
bGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJl
bmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAg
ICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgog
ICAgX1RwKgogICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQogICAg
ewogICAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5k
ZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwog
ICAgfQoKCiAgICB2b2lkCiAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19u
KQogICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihf
VHApKTsgfQoKICAgIHNpemVfdHlwZQogICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIHsgcmV0
dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgIHZvaWQKICAgIGNvbnN0cnVjdChw
b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9Cgog
ICAgdm9pZAogICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2FsbG9jYXRvcjx2b2lkLCBf
QWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7
CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0
cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBv
dGhlcjsgfTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLF9B
bGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+
JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3Vu
ZGVybHlpbmdfYWxsb2M7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAs
IF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0Fs
bG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIu
X191bmRlcmx5aW5nX2FsbG9jOyB9CgoKCgoKCgogIHRlbXBsYXRlPGludCBpbnN0PgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5z
dD4mLAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYp
CiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYp
CiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBj
b25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z
dCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQog
ICAgeyByZXR1cm4gZmFsc2U7IH0KIyA4ODIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Y2F0b3I+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0cwogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBjb25z
dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j
PF9UcCwgX19hbGxvYz4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4g
YWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGludCBf
X2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBl
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgX0FsbG9j
X3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBs
ZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9y
X3R5cGU7CiAgICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAx
LCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0PiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
dHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf
VHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgYm9vbCBfX3Rociwg
aW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1Rw
MSwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgogICAgewogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVm
IF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5z
dD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5
cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1Rw
MSwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U
cCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAg
IH07CgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLDA+Owp9CiMgNTYgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVj
dChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZv
aWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMT4K
ICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0YXRp
Y19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7
IH0KIyAxMTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAog
ICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3Ry
dWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxpbmUg
dm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9UcCgp
OyB9CiMgMTM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3Qu
aCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQK
ICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhh
c190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9tZW1vcnkiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9G
b3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBl
KQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
CiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewog
ICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAg
ICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1
cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko
X19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxMDYg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg
IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9W
YWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxp
emVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9
CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0
LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19y
ZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXpl
ZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAg
IHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAg
X191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFs
c2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAg
dHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAg
IF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAg
ICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7
CiAgICAgICAgfQogICAgfQojIDE2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFp
dHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXpl
ZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1
eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4g
ZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVy
CiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1Np
emUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9f
ZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAg
ICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAg
ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAg
fQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwg
X19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojpp
c19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9h
dXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5
X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1
bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAg
ICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlk
KTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBp
bmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFs
aXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1
cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAg
ICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19t
aWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg
IGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19m
aXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRl
ciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy
KTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3Qy
LCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVz
dHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K
Cn0KIyA1OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwoj
IDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVy
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg
ICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBw
dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJk
SXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFn
ZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7
CiAgICAgICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJh
dG9yLCBfVHA+JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9y
PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg
ICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0g
KnRoaXM7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQog
ICAgfTsKfQojIDYwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CiMgNzEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X1RwKiwgcHRyZGlmZl90PgogICAgX19n
ZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCiAgICB7CiAgICAgIGlm
IChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICAgIF9f
bGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkK
ICAgICAgICB7CiAgICAgICAgICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6
OnNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgICAgIGlmIChfX3RtcCAhPSAwKQog
ICAgICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAg
ICAgICAgICBfX2xlbiAvPSAyOwogICAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy
ZGlmZl90PigoX1RwKikwLCAwKTsKICAgIH0KIyAxMDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBwYWlyPF9U
cCoscHRyZGlmZl90PgogICAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQog
ICAgeyByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOyB9CiMg
MTE1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkK
ICAgIHsgc3RkOjpmcmVlKF9fcCk7IH0KIyAxMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgYXV0b19wdHJf
cmVmCiAgICB7CiAgICAgIF9UcDEqIF9NX3B0cjsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGF1dG9f
cHRyX3JlZihfVHAxKiBfX3ApOiBfTV9wdHIoX19wKSB7IH0KICAgIH07CiMgMTY2ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBjbGFzcyBhdXRvX3B0cgogICAgewogICAgcHJpdmF0ZToKICAgICAgX1RwKiBfTV9wdHI7Cgog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoKCgoKCgoKICAgICAg
ZXhwbGljaXQKICAgICAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpIDog
X01fcHRyKF9fcCkgeyB9CiMgMTkyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnki
IDMKICAgICAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVs
ZWFzZSgpKSB7IH0KIyAyMDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwog
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9U
cDE+JiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjE0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICAgICAgYXV0b19wdHImCiAgICAgIG9w
ZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICAgIHsKICAgICAgICByZXNldChfX2Eu
cmVsZWFzZSgpKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KIyAyMzEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogICAgICAgIGF1dG9fcHRyJgogICAgICAgIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19h
KSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQojIDI1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvbWVtb3J5IiAzCiAgICAgIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQojIDI2
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgICAgIGVsZW1lbnRfdHlw
ZSYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAqX01fcHRyOyB9CgoK
CgoKCgogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygp
IHsgcmV0dXJuIF9NX3B0cjsgfQojIDI4MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWVt
b3J5IiAzCiAgICAgIGVsZW1lbnRfdHlwZSoKICAgICAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJl
dHVybiBfTV9wdHI7IH0KIyAyOTcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIg
MwogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIHJlbGVhc2UoKSB0aHJvdygpCiAgICAgIHsKICAg
ICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwogICAgICAgIF9NX3B0ciA9IDA7CiAg
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiMgMzEyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9tZW1vcnkiIDMKICAgICAgdm9pZAogICAgICByZXNldChlbGVtZW50X3R5cGUqIF9fcCA9
IDApIHRocm93KCkKICAgICAgewogICAgICAgIGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgICAg
ewogICAgICAgICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgICBfTV9wdHIgPSBfX3A7CiAg
ICAgICAgICB9CiAgICAgIH0KIyAzMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9y
eSIgMwogICAgICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhy
b3coKQogICAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHsgfQoKICAgICAgYXV0b19wdHImCiAg
ICAgIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQog
ICAgICB7CiAgICAgICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICAg
IHsKICAgICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgICAgX01fcHRyID0gX19yZWYu
X01fcHRyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1Rw
MT4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJl
bGVhc2UoKSk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgb3BlcmF0
b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1Rw
MT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICB9Owp9CiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL3N0cmluZyIgMiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh
cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5h
cnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRf
dHlwZTsKfTsKIyAxMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0
aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAqIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZp
ZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8g
X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1
cm4gLV9feDsgfQp9OwojIDE3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
ZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv
b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBs
ZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29s
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy
biBfX3ggPD0gX195OyB9Cn07CiMgMjIyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2Fu
ZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYm
IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07CiMgMjcxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpj
bGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJl
ZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9N
X3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYg
X194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
UHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJl
ZChfX3gpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5
X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJl
dHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfUHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGlj
YXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVk
aWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAg
ICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195
KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpu
b3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+KF9fcHJlZCk7Cn0KIyAzNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJp
bmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNl
Y29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9P
cGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5
cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBi
aW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwg
dmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0
b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OnNl
Y29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194
KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGlu
ZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBj
b25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19m
biwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFz
cyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6
CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChf
X3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv
cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgogIHR5cGVuYW1l
IF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZh
bHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+Cmlu
bGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2Zu
LCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+
KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9S
ZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0Fy
Zyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihf
X3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9w
dHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgppbmxp
bmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1
bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0Fy
ZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIs
IGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAg
X1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19i
aW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp
b24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7fQog
ICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAgICAg
IHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
MSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9m
dW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9Bcmcx
LCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0Fy
ZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRp
dHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3IoKShf
VHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
UGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5
cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUm
IG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9
CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1Bh
aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Q
YWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vj
b25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5z
ZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3Io
KShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07
CiMgNTI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5f
dChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1Jl
dCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj
bGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixf
UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoqX19w
ZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCog
X19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9U
cDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
Y2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChf
X3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9
CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z
dF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1Jl
dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3Bm
KShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U
cCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9
CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAo
X19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29u
c3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25z
dCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9N
X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZf
dCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCko
X1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9y
ZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29u
c3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29u
c3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90
PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lk
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9Bcmcp
KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBj
b25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko
X0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf
bWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNv
bnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90
KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShf
X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwg
X1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29u
c3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0Fy
Zyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVt
X2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2
b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gp
OyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4g
bWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1Rw
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3Rf
bWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7
IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVu
X3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0
X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBj
b25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1
bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy
ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1
cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1Jl
dCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVy
biBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8
X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkK
ICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgoK
Cn0KIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyaW5nIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwoKCgpuYW1lc3Bh
Y2Ugc3RkCnsKIyAxMDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfc3Ry
aW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxv
Y2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXpl
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlm
ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBj
b25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBv
aW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0
X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2lu
dGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19u
b3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVy
YXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJh
dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTQzICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVj
dCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRl
IHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsKIyAxNjEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1Nf
dGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBl
IF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAg
ICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9y
ZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29u
c3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAg
ICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAg
ICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVu
Y2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoK
ICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAg
ICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxv
YzIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxv
YzEgPT0gX19hbGxvYzIpCiAgICAgICAgICAgICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xv
bmUoX19hbGxvYzEpOwogICAgICAgIH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9T
X2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01f
ZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNo
YW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVz
dHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29u
c3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHko
KSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2Vz
LCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBf
Q2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0g
MCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7
CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9N
X3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBl
IG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAg
bXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5
cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsg
c2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQq
CiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9
CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJu
IChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEo
KSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0K
CiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgp
LT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAg
ICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVn
aW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wg
X190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5
cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwog
ICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoK
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAg
ICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9y
IF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCAr
K19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAg
ICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwg
aXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwg
X19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1Nf
Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0
b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFz
ZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9f
cCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHko
X19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2Nv
cHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBf
X2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9
CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQo
KTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAg
IHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFz
aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0Fs
bG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9f
cywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAg
ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhf
SW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmlu
ZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFz
c2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQg
X19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRl
cmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVn
aW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9Cgog
ICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAg
ICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0K
CiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2Vf
aXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0
aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2lu
KCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQo
KSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUK
ICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVu
Z3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBf
UmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7
IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNh
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2
b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAog
ICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJv
b2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAg
ICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQog
ICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWso
KTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3Rf
cmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBp
ZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9
CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAg
IGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo
KVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykg
eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
b3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEp
LCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9f
cykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2ll
bmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1
c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p
ZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUo
KTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVz
dG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19u
ZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVy
biB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAg
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkp
CiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsK
ICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJU
Kj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigp
KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBs
YWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAg
IGVsc2UKICAgICAgICAgIHsKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9f
cyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgaWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxz
ZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBf
X3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAg
ICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh
c3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Ms
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
YXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNz
aWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3Qs
IF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24s
IF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZv
aWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJh
dG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5k
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwg
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9f
cG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAg
ICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAo
X19wb3MyID4gX19zdHJzaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19z
dHJzaXplIC0gX19wb3MyOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rl
c3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNl
cnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAg
ICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJv
d19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3Jl
cCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRh
KCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3Np
emUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsg
X19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAg
X01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBf
X29mZjsKICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAg
ICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3AsIF9fcywgX19wIC0gX19zKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3Qg
X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFp
dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy
dChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAg
ICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3Ig
X19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19w
b3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19w
b3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQo
KTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5
cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2No
ZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAg
IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19p
ID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3Np
dGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9y
ZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsK
ICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRl
cmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBf
TV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0
YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAg
ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwg
X19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl
IF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVf
dHlwZSBfX24yKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt
PnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBf
X3Rlc3RuMSA9IF9fbjEgPCBfX3NpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAo
X19zaXplIC0gX19mb2xkbjEgPiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAo
X01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9N
X2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSAr
IF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2lu
KCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkg
KyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9fcyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVy
bgogICAgICAgICAgICAgICBfTV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdp
bigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9f
cyArIF9fbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9z
LCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXpl
X3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
X2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikK
ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBf
X2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1
cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp
dGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRl
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3Jl
cGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf
X2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQq
IF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl
KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVy
YXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdp
bigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFz
ZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEs
IGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx
IC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRl
cmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0
X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
ICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRl
ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAg
ICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwog
ICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9D
aGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l
bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5
cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxz
aXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3Qo
X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAg
ewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVn
cmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBf
X2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9J
bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3
ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoK
ICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0Fs
bG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAg
IHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7Cgog
ICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6
OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVy
biBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDAp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6
ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m
aXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19w
b3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29m
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmly
c3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz
aXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xh
c3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJm
aW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bv
cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90
X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
Zmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFp
dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJz
dF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihz
aXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewog
ICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJp
bmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3Ry
LnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsK
CiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIu
ZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUg
LSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3Mx
LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg
ICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAg
ICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
KSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24y
KSBjb25zdDsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19l
bXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewog
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsK
ICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvciso
Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg
ICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhz
KTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry
aW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBl
IF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19z
dHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g
X19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19s
aHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9D
aGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+
IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9f
bGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv
bXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8
PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0No
YXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0g
MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJl
YW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fc3RyKTsKfQojIDU0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJpbmci
IDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYWxnb3JpdGhtIiAxIDMKIyA2
NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgNjQgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlw
ZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5j
ZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50
ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3Rv
cEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICAgICAqKF9f
Zmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19o
b2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
IC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxp
bmUgdm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VU
eXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAg
ICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1l
IF9UcCwKICAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3B1c2hf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4
LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRl
eCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2Nv
bXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgICAgICooX19maXJzdCAr
IF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRl
eCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwog
ICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBpbmxpbmUgdm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoK
ICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJz
dCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgq
KF9fbGFzdCAtIDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZv
aWQKICAgIF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0
YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAg
X192YWx1ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsK
ICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAg
ICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKCooX19maXJzdCAr
IF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAg
ICAgICBfX3NlY29uZENoaWxkLS07CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29u
ZENoaWxkOwogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsK
ICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwog
ICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19w
dXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBf
X2ZpcnN0KSwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChf
X2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkp
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIHZvaWQKICAgIF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuLCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2Ug
X190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9
IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4p
IHsKICAgICAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmly
c3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAg
ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25k
Q2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNv
bmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo
X19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19z
ZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xl
SW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwg
X0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWUs
IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xh
c3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAK
CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVu
dCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0
X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVmFsdWVUeXBlKCooX19maXJzdCArIF9f
cGFyZW50KSkpOwogICAgICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19w
YXJlbnQtLTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIG1ha2VfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5
cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
X0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikg
cmV0dXJuOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBf
X2NvbXApOwogICAgICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJl
bnQtLTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCgog
ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJz
dCwgX19sYXN0LS0pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBf
X2NvbXApOwogICAgfQoKfQojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Rl
bXBidWYuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Rl
bXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
LCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3Qg
X01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoK
ICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xl
bjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0
ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2Yo
X1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikg
bWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAg
ICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxp
emVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6
ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXpl
ZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZm
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVk
X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigp
IHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciAr
IF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAg
X1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQog
ICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0K
ICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBf
TV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0K
ICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01f
YnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBf
VGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK
IyA4NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25z
dCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQogICAgewoKICAgICAK
ICAgICAgaWYgKF9fYSA8IF9fYikKICAgICAgICBpZiAoX19iIDwgX19jKQogICAgICAgICAgcmV0
dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19j
OwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYSA8
IF9fYykKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICAg
ICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTE4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYK
ICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBf
X2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBf
X2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsK
ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsK
ICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAo
X19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2Is
IF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7
CiAgICB9CiMgMTUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAg
ICBfRnVuY3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsIF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJu
IF9fZjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAm
JiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwKICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0
OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAg
IGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAt
IF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJp
cF9jb3VudCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy
biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19m
aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9
CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAg
aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7
CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl
IDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJl
ZGljYXRlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7
CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAy
OwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAg
ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp
cnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19s
YXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAg
ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly
c3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRl
cgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1
cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2Zp
cnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmly
c3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3Qg
PSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk
SXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg
ICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAg
ICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmIChfX2JpbmFyeV9wcmVk
KCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9f
Zmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzODcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7Cgog
ICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f
bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICAg
ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDExICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICsrX19uOwogICAgICBy
ZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUg
X0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIx
IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVy
MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAo
X19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0MikKICAg
ICAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICAgICAg
X0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsK
CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwg
X19sYXN0MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3Vy
cmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3Ap
IHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19m
aXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAg
cmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAg
ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1MjIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEs
IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0Zvcndh
cmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJz
dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJ
dGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBf
X2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
cmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19w
OwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9f
Y3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsK
ICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJl
ZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBf
X2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3Qx
OwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAg
ICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBp
ZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAg
ICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3Qx
OwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19m
aXJzdDE7CiAgICB9CiMgNTk2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRl
Z2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIg
X19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAg
ICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7
CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2Nv
dW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAg
KytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19p
ID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBf
X3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2
NDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9U
cCwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcgogICAg
c2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg
X0JpbmFyeVByZWQgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYg
KF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAg
ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJl
ZCgqX19maXJzdCwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19maXJz
dDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAg
ICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kg
PSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFz
dCAmJiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICAg
ICArK19faTsKICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19u
ID09IDApCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICAgICAgaWYgKF9fYmluYXJ5
X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
KytfX2k7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY5NyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3
YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAg
ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19m
aXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9w
ZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAg
Kl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KIyA3NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlv
bj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5h
cnlfb3ApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAgICAg
Kl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICB9CiMgNzk2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9U
cCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
b2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1Rw
PgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg
X19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
CiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1NiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw
dXRJdGVyCiAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9f
b2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgfQojIDg4OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIs
IHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAgX091dHB1
dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19m
aXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CiMgOTE4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAg
ICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4o
KTsKICAgIH0KIyA5NDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw
ZW5hbWUgX0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoK
CiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJz
dCA9IF9fZ2VuKCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDk2OSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw
dXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192
YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkg
ewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0Owog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAg
X091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1By
ZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmly
c3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1
bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfX2Zp
cnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogICAgICBfRm9yd2FyZEl0ZXIg
X19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0
LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKICAgIH0KIyAxMDczICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJl
ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRf
aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19m
aXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2Zp
cnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf
dGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsK
ICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9
PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICor
K19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0Owog
ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsK
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f
bGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAgICAgKisr
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0
NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUg
X091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMTcw
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5
X3ByZWQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAg
IAoKCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5
cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192
YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICAg
ICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3Vs
dDsKICAgIH0KIyAxMTk5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0
b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgq
X19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJu
ICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1
dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRv
cl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
biBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApf
X3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCiAgICAgICAg
IAoKCiAgICAgICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7CiAg
ICB9CiMgMTI5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj
YXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQo
X19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2
ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykK
ICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9f
bGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
PgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0
KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CiMgMTM0
OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVy
c2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qp
CiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAg
IHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICAg
ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMzk5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1l
bnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxl
bWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRl
YW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAg
IF9fbiA9IF9fdDsKICAgICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09
IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIg
PSBfX21pZGRsZTsKICAgICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3Qy
KyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9f
Zmlyc3QyID0gX19taWRkbGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAg
ICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2Ug
aWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAg
ICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+
CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9f
bGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmly
c3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZl
cnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAg
ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAg
ICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBf
X21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVy
c2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAg
ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg
ICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAg
IHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09
IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAg
IF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAg
ICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0
dXJuOwogICAgICB9CgogICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAg
ICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9W
YWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Ag
PSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0
YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19w
ID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAg
ICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9
ICooX19wICsgX19rKTsKICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19q
IDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0g
X19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBf
X3AgKz0gX19rOwogICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19s
KTsKICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
ICpfX3AgPSBfX3RtcDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xhc3Qp
CiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVy
CiAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QsIF9f
bWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7CiAgICB9CiMgMTYxMiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAgX19yYW5kb21fbnVt
YmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoK
CgogICAgfQojIDE2MzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZv
aWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCAr
IDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3Qg
KyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2NjAgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
PgogICAgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJl
ckdlbmVyYXRvciYgX19yYW5kKQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0
ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz
dCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk
SXRlcgogICAgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybiBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAg
aWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICAgICAgX0ZvcndhcmRJ
dGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQog
ICAgICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgICAgIHN3YXAoKl9fZmlyc3QsICpf
X25leHQpOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRp
b24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
IHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAg
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBp
ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE3NDggIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBh
cnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0
dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09
IDEpCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0Owog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlk
ZGxlLCBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9z
dGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAg
ICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRs
ZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9f
bWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUs
IF9fZW5kKSk7CiAgICAgIHJldHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNh
dGUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBf
X3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUp
IHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9p
bnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0IDsgKytfX2ZpcnN0KQogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAg
ICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmly
c3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19i
dWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUo
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5k
KTsKICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwog
ICAgICAgIHJldHVybiBfX2JlZ2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFi
bGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg
CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1Zh
bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgp
ID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz
dCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNp
emUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFy
dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkp
OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9w
YXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAq
X19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFz
dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg
X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZv
dCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUg
KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlm
ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg
ICB9CiMgMTkyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgZW51bSB7IF9NX3RocmVzaG9sZCA9IDE2IH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVk
X2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCiAgICB7
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7
CiAgICAgIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4
dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAg
ICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X25leHQgPSBfX2xhc3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX19jb21wKF9fdmFs
LCAqX19uZXh0KSkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9
IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2
b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm47CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf
X2kgIT0gX19sYXN0OyArK19faSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAg
IGlmIChfX3ZhbCA8ICpfX2ZpcnN0KSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3Qs
IF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAg
ICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwp
OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm47CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19p
OwogICAgICAgIGlmIChfX2NvbXAoX192YWwsICpfX2ZpcnN0KSkgewogICAgICAgICAgY29weV9i
YWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3Zh
bDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2lu
c2VydChfX2ksIF9fdmFsLCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkg
ewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9s
ZCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVz
aG9sZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2NvbXApOwog
ICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgX1NpemUKICAgIF9fbGcoX1NpemUgX19uKQogICAgewog
ICAgICBfU2l6ZSBfX2s7CiAgICAgIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkg
KytfX2s7CiAgICAgIHJldHVybiBfX2s7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9TaXplPgogICAgdm9pZAogICAgX19pbnRyb3Nv
cnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90
aHJlc2hvbGQpIHsKICAgICAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgICAgICBw
YXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuOwog
ICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAg
ICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogICAgICAg
IF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo
X2xpbWl0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK
ICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBp
ZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwg
X19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAg
ICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAg
ICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3Qg
KyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgICAgICBf
X2NvbXApOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9s
aW1pdCwgX19jb21wKTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQojIDIx
NjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0
LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9CiMgMjE5NyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgog
ICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXAp
OwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogICAgICB9CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFz
dCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t
aWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9z
b3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRk
bGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlk
ZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFz
dCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0LCBfX2NvbXApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBf
X2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9f
aW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwg
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5j
ZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAg
ICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVy
Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7
CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2Zp
cnN0KSwgX19zdGVwX3NpemUpOwogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw
X3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3Vs
dCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNj
ZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9z
aXplLAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBf
RGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0g
bWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVy
Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsg
X19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9f
Y29tcCk7CiAgICB9CgogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAog
ICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9f
Y2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCAr
IF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0K
ICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAg
ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19j
b21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAog
ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p
bnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAg
X0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZm
ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUg
PSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsK
ICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0
ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRf
bG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAg
ICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m
aXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog
ICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5r
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7Cgog
ICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9s
b29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAg
ICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIs
IF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9f
c3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2
b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Bv
aW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlz
dGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9f
YnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9h
ZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3Qp
LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0
aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAy
OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAg
ICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRh
cHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy
LCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19s
YXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAog
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9
CiMgMjQzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAg
c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9S
YW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAg
aWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSkpOwog
ICAgfQojIDI0NjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2
YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoK
ICAgICAKCiAgICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIs
IF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkg
PT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
bXApOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBf
X2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwg
X19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBf
X2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAg
ICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwog
ICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHBhcnRp
YWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpf
X2ZpcnN0KSkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1Zh
bHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2NvbXApOwogICAgfQojIDI1NzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1
dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChf
X3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7
CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBf
X3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Owog
ICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQog
ICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jl
c3VsdF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0
YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1
bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAg
ICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICBy
ZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9S
YW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBf
X3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3Qg
PSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1
bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9s
YXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytf
X2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf
cmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
ICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19h
ZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9m
aXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAg
ICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBf
X2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAg
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19u
dGgpCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19s
YXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QpOwogICAgfQojIDI3MjggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAK
ICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBp
ZiAoX19jdXQgPD0gX19udGgpCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxz
ZQogICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CiMgMjc2OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFs
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoK
CgoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAg
X19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAg
YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwp
IHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAg
ICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsK
ICAgIH0KIyAyODE2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBl
IF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBf
X2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+
IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19m
aXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2Nv
bXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAg
ICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwog
ICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODU2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAg
CiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBf
X2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlk
ZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs
ZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5
MDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg
ICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwg
Kl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAg
ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAg
X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFsX3Jhbmdl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
dmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBl
OwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xl
biA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0g
X19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmICgq
X19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAg
ICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAgX19sZW4g
PSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChf
X2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xl
bik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwg
X192YWwpOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+
KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0KIyAzMDAz
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWws
CiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf
RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQs
IF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19s
ZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p
ZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAg
ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
X19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAg
ICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwg
X19jb21wKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1
MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5h
cnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAg
IAoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg
X192YWwpOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAg
ICB9CiMgMzA4MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX0Zv
cndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29t
cCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwog
ICAgfQojIDMxMTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
IH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy
LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMx
NjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUg
X091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRl
cgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg
ICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAg
KytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZv
aWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVu
MikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJl
dHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21p
ZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRs
ZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg
PSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2Ug
X19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjEx
ID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg
ICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJz
dF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0
KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAg
ICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQg
PSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAg
X19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICBy
b3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19u
ZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVu
MjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4x
ID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsg
X19sZW4yID09IDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQog
ICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJu
OwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAg
X0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAg
IGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAg
ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQg
PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAg
ICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFu
Y2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9f
bGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90
YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3
X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAt
IF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0
eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9h
ZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1
ZmZlcl9zaXplKQogICAgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsK
ICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewog
ICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwog
ICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAg
cmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAg
ICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9l
bmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg
IHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmly
c3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsK
ICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFj
a3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3Qy
LCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jl
c3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5
X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsK
ICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0
MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAg
ICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsK
ICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qy
OwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBj
b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0t
X19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAg
ICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBp
ZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp
cnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
OwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9f
cmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1
bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19s
YXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0
MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUg
X0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRp
dmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9E
aXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xl
bjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19i
dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAg
ICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0
KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXpl
KSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9
IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBf
X21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBf
RGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsK
ICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAg
IGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29u
ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAg
ICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVu
MjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwg
X19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjEx
ID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBf
X3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4y
MiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVy
X3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0
LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0
aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9p
bnRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf
YWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu
MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm
ZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEg
PD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBj
b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVm
ZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewog
ICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3Qs
IF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7
CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsK
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAg
ICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
X19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBs
b3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4y
MiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf
X2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp
cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAg
X19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAg
ICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9j
dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEs
IF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2Zp
cnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAg
ICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9f
bGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19s
ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9
CiMgMzUwOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgaW5wbGFj
ZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAg
CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAg
ICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2Zp
cnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19t
aWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0
ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5i
ZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdl
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5z
aXplKCkpKTsKICAgIH0KIyAzNTU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9W
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVj
dGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgog
ICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9
PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBk
aXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0g
ZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlk
aXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
IGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsKICAgICAg
ZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg
X19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf
RGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoK
ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAg
ICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoK
CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCAr
K19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAg
ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAg
IHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf
X3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h
bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK
ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAg
ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAg
ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg
ICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg
ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
ICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1
dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK
ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAg
ICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2Rp
ZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2Ugewog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg
ICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0
ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoK
ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19y
ZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29w
eShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNf
ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAg
ICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsr
X19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0
MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBt
YXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAg
IHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m
aXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUg
KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQog
ICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoK
ICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz
dDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0
KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2Vs
ZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7Cgog
ICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f
Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAg
ICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0Zv
cndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg
CiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmly
c3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAg
ICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAg
bmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
aSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBm
b3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAt
LV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAg
ICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2
ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAg
ICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzsp
IHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsK
ICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9f
aikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAg
ICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
fQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBw
cmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
ID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZv
cig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0t
X19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAg
ICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZl
cnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAg
ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m
aXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7Oykg
ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwog
ICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19p
KSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAg
ICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9
CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
PgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBf
SW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChf
Rm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRl
cikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICAgICAgcmV0dXJu
IF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChf
Rm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRl
cikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAgICAgICAg
cmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KIyA0MjAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJ
dGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAg
ICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBf
X3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJk
SXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFz
dDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJzdDEgPSBfX25l
d19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg
IF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJl
dHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0
ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJdGVyMSBf
X25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xh
c3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19u
ZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAg
IF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3Qy
LCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAg
CiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVy
MT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u
YWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsK
ICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIxIF9fcnJl
c3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICAg
ICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAg
ICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3Vs
dC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBf
X2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+
IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs
SXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAg
ICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1
bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAgICBpZiAoX19ycmVzdWx0
ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAg
ICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2Zp
bmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEK
ICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9Cgp9
CiMgNzAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2FsZ29yaXRobSIgMiAzCiMgNTcgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVv
ZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBf
Q2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVw
KSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90
eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9D
aGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg
IF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAg
ICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1
cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAw
XTsKICAgICAgICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19l
bmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewog
ICAgICAgICAgICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICB9CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsK
ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7
CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoK
CiAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0No
YXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAg
ICAgICAgX0NoYXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNp
dHk7CiAgICAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVm
ZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkK
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9
ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRh
KCk7CiAgICAgICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19s
ZW4gKyAxLCBfX2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVy
LT5fTV9yZWZkYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9N
X3JlZmRhdGEoKSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7
CiAgICAgICAgICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9N
X2xlbmd0aCA9IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBjYXRj
aCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0lu
SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBf
X2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoK
ICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAg
cmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIGlmIChfX2J1aWx0
aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2lj
X2Vycm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCgog
ICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAg
dHJ5CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBf
X2VuZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+
X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBf
X3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3
XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsK
ICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Ms
IGNvbnN0IF9BbGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9B
bGxvYygpKQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAg
ICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAg
ICAgewogICAgICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihf
X3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQog
ICAgICAgIHsKICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7
CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZk
YXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZk
YXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDog
X01fZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9h
bGxvY2F0b3IoKSksCiAgICAgICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAg
eyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2Nv
bnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry
aW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbikKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9z
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9f
biksIF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf
X3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0
ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9N
X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi
YXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBf
TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgbnBvcywgX19h
KSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywg
X19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNf
c3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg
X19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBf
X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0
ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhp
cy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3Jl
cCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3Jl
cCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3Qg
X0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXpl
b2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3
X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVw
KCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01f
cmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAg
ICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXpl
X3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNv
bnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7Cgog
ICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0
eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2Nh
dG9yKCk7CgoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAg
ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2Yg
KHZvaWQqKTsKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9f
cGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQp
OwogICAgICAgICAgX1JlcCogX19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0
eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwg
X19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9z
KQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9N
X2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAg
ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVu
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAg
ICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlm
IChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRy
YWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3df
bXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAg
IF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdf
c2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19y
ZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCkt
Pl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1h
eF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6
OnJlc2VydmUiKTsKCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAg
ICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0g
Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9j
bG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9k
aXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2Fw
KGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtl
ZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5f
TV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hh
cmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9j
YXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAg
ICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190
bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJp
bmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwog
ICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5k
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7
CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2Mm
IF9fYWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4
X3NpemUpCgoKCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1Nf
Y3JlYXRlIik7CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNp
emVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwojIDQyMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2Vz
aXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAg
IGNvbnN0IHNpemVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK
ICAgICAgaWYgKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQog
ICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNp
emUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAg
ICAgICAgICAlIF9fcGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBz
aXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl
b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6
ZSA+IF9fc3VicGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQog
ICAgICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3Np
emUpICUgX19zdWJwYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAg
ICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19z
aXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwog
ICAgICAgIH0KCgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxv
YykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw
OwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRf
c2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXpl
X3R5cGUgX19yZXMpCiAgICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2Fw
ID0gX01fbGVuZ3RoICsgX19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9
IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBz
aXplb2YgKHZvaWQqKTsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQog
ICAgICAgIChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkg
LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBf
X3I7CiAgICAgIGlmIChfX3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3Rl
ZF9jYXAgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf
X3JlcXVlc3RlZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXF1ZXN0ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVs
c2UKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9j
KTsKCiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwg
X01fbGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAg
ICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBf
X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAg
ICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBf
X3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0
SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0
b3JfdGFnKQogICAgICB7CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAg
ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCks
IF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f
cmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBf
X2sxLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAg
ICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShf
X2sxLCBfX2syKSk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAg
ICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19k
bWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJl
Z2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAg
ICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwg
X19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUg
X19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQog
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg
ICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAt
IF9fcG9zMjsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJl
c2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0
ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4g
dGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0
dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so
X19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3Ms
IF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFw
cGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5j
YXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01f
cmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlw
ZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0
aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQo
KSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMs
CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBf
VHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBf
X3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9f
bGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0
dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAg
IF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6
ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChf
X3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy
ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwg
X0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAg
ICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9z
aXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19v
ZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjph
c3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv
cykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24g
PiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3Bv
czsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7
CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBf
X3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAg
Y29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBf
X24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUo
X19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7
CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf
X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAg
ICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0No
YXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwog
ICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAg
ICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwog
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0
YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsK
ICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAg
ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6
ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9
IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAg
ICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+
c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0g
dHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAg
aWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAg
ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpm
aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4g
X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhp
cy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywg
X19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAg
IGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJh
aXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9f
eHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkK
ICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19z
aXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAg
ICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9f
c2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf
bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19w
b3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4g
X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAg
IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewog
ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19v
c2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVf
dHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl
Ojpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAg
aWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBf
X3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs
IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs
IHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg
aWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBf
X3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jv
c2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj
b21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAg
ICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwg
X19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCks
IF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29z
aXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0
cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6
ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7
CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAg
ICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBz
aXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0
cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAg
IGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4g
X19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24x
LCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3Bv
cyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj
b21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBf
X3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
LCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAg
ICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUg
X19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUg
c2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAg
IF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVm
W19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19zdHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNo
YXI+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
YXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3Ry
aW5nJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog
ICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgoKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAg
YmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hh
cl90PiYsIHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2No
YXJfdD4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3Ry
aW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFz
aWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKCn0KIyA1OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvc3RyaW5nIiAyIDMKIyAzMiAibmV0bGlzdC5oIiAyCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvbWFwIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvbWFwIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3RyZWUu
aCIgMSAzCiMgOTEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3RyZWUuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIF9SYl90cmVlX2NvbG9yIHsgX01fcmVkID0gZmFsc2Us
IF9NX2JsYWNrID0gdHJ1ZSB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCiAgewogICAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgICBfUmJfdHJlZV9jb2xv
ciBfTV9jb2xvcjsKICAgIF9CYXNlX3B0ciBfTV9wYXJlbnQ7CiAgICBfQmFzZV9wdHIgX01fbGVm
dDsKICAgIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19t
aW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0g
MCkgX194ID0gX194LT5fTV9sZWZ0OwogICAgICByZXR1cm4gX194OwogICAgfQoKICAgIHN0YXRp
YyBfQmFzZV9wdHIKICAgIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hp
bGUgKF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgICAgcmV0dXJu
IF9feDsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgc3RydWN0IF9S
Yl90cmVlX25vZGUgOiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCiAgICB7CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKICAgICAgX1ZhbCBfTV92YWx1ZV9m
aWVsZDsKICAgIH07CgogIHN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgewogICAgdHlw
ZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgICB0eXBlZGVm
IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgIF9CYXNlX3B0ciBfTV9ub2RlOwoKICAg
IHZvaWQKICAgIF9NX2luY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdo
dCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsK
ICAgICAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAgIF9NX25v
ZGUgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgICAgICB3aGls
ZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X01fbm9kZSA9IF9feTsKICAgICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAg
ICAgICAgfQogICAgICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICAg
ICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZAogICAgX01fZGVjcmVt
ZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9NX3JlZAogICAgICAg
ICAgJiYgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAgICAgICBf
TV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xl
ZnQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01f
bGVmdDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgICAgIF9f
eSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9w
YXJlbnQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX2xlZnQpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9f
eS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9ub2RlID0gX195OwogICAg
ICAgIH0KICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVm
LCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVibGljIF9S
Yl90cmVlX2Jhc2VfaXRlcmF0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1B0ciBwb2ludGVy
OwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4gaXRl
cmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYs
IGNvbnN0IF9WYWwqPgogICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJl
ZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiBfU2VsZjsKICAgICAgdHlwZWRlZiBfUmJfdHJl
ZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwoKICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoKSB7fQog
ICAgICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9
CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9NX25vZGUg
PSBfX2l0Ll9NX25vZGU7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBfTGlua190eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAg
cG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7
IH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIF9NX2lu
Y3JlbWVudCgpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgX1NlbGYKICAg
ICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwog
ICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAg
ICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAg
X1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9kZWNyZW1lbnQoKTsKICAgICAgICByZXR1
cm4gX190bXA7CiAgICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAgICAgICAg
ICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkKICAgIHsg
cmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVy
YXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAg
IGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkKICAgIHsg
cmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVy
YXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90
cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkKICAgIHsg
cmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX194
LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRy
PiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feCwK
ICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwq
PiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAgICAg
ICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwq
PiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KCiAgaW5s
aW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwg
X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSog
X195ID0gX194LT5fTV9yaWdodDsKICAgIF9feC0+X01fcmlnaHQgPSBfX3ktPl9NX2xlZnQ7CiAg
ICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgICAgX195LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBf
X3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChfX3ggPT0g
X19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9w
YXJlbnQtPl9NX2xlZnQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAg
ZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX2xl
ZnQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGluZSB2b2lkCiAg
X1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9u
b2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gt
Pl9NX2xlZnQ7CiAgICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogICAgaWYgKF9feS0+
X01fcmlnaHQgIT0gMCkKICAgICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogICAg
X195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBpZiAoX194ID09IF9fcm9vdCkK
ICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5f
TV9yaWdodCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgZWxzZQog
ICAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIF9feS0+X01fcmlnaHQgPSBf
X3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGluZSB2b2lkCiAgX1JiX3Ry
ZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2Uq
JiBfX3Jvb3QpCiAgewogICAgX194LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgIHdoaWxlIChfX3gg
IT0gX19yb290CiAgICAgICAgICAgJiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID09IF9NX3Jl
ZCkKICAgICAgewogICAgICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAg
ICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAg
ICAgICAgICAgICAgX195LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAg
ICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChfX3ggPT0gX194
LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVf
cm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg
IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAg
ICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9f
cm9vdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAg
IHsKICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3Ig
PT0gX01fcmVkKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195LT5fTV9jb2xvciA9IF9N
X2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29s
b3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAg
ICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3QpOwogICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3Ig
PSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9N
X2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAg
ICB9CiAgICAgIH0KICAgIF9fcm9vdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICB9CgogIGlubGlu
ZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCiAgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJf
dHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90
cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
Yl90cmVlX25vZGVfYmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKICB7CiAgICBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9feSA9IF9fejsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0gMDsKICAg
IF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgICBpZiAoX195LT5fTV9sZWZ0
ID09IDApCiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICBlbHNlCiAgICAgIGlmIChfX3kt
Pl9NX3JpZ2h0ID09IDApCiAgICAgICAgX194ID0gX195LT5fTV9sZWZ0OwogICAgICBlbHNlCiAg
ICAgICAgewoKICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAo
X195LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsKICAgICAg
ICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgaWYgKF9feSAhPSBfX3opCiAg
ICAgIHsKCiAgICAgICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAgX195
LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0OwogICAgICAgIGlmIChfX3kgIT0gX196LT5fTV9yaWdo
dCkKICAgICAgICAgIHsKICAgICAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50Owog
ICAgICAgICAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAg
ICAgICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgICAgX195LT5f
TV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgICAgICAgIF9fei0+X01fcmlnaHQtPl9NX3Bh
cmVudCA9IF9feTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3hfcGFyZW50
ID0gX195OwogICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290ID0gX195
OwogICAgICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAg
ICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgICAgIGVsc2UKICAgICAgICAg
IF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgICAgICBfX3ktPl9NX3BhcmVudCA9
IF9fei0+X01fcGFyZW50OwogICAgICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9N
X2NvbG9yKTsKICAgICAgICBfX3kgPSBfX3o7CgogICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAg
ICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgaWYgKF9feCkKICAgICAg
ICAgIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgaWYgKF9fcm9vdCA9
PSBfX3opCiAgICAgICAgICBfX3Jvb3QgPSBfX3g7CiAgICAgICAgZWxzZQogICAgICAgICAgaWYg
KF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICAgICAgX196LT5fTV9wYXJl
bnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fei0+X01fcGFy
ZW50LT5fTV9yaWdodCA9IF9feDsKICAgICAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAg
ICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAwKQogICAgICAgICAgICBfX2xlZnRtb3N0ID0gX196
LT5fTV9wYXJlbnQ7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2xlZnRtb3N0ID0gX1Ji
X3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7CiAgICAgICAgaWYgKF9fcmlnaHRtb3N0
ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAgICAgICAgX19y
aWdodG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f
cmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgICAgIH0K
ICAgIGlmIChfX3ktPl9NX2NvbG9yICE9IF9NX3JlZCkKICAgICAgewogICAgICAgIHdoaWxlIChf
X3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkK
ICAgICAgICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmln
aHQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg
ICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg
ICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAg
ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBf
X3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAgICAgICAo
X193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5f
TV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9feF9wYXJl
bnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAwCiAgICAgICAgICAgICAgICAg
ICAgICB8fCBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9N
X2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgICAgICBfX3ctPl9N
X2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3Jp
Z2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQt
Pl9NX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5f
TV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFy
ZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9y
aWdodCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9NX2Js
YWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBf
X3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICBp
ZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX194X3Bh
cmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0
ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBfX3cgPSBfX3hf
cGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193
LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9j
b2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAgICAgKF9fdy0+X01fbGVmdCA9PSAw
IHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9NX2JsYWNr
KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9N
X3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAg
ICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm
IChfX3ctPl9NX2xlZnQgPT0gMCB8fCBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9NX2JsYWNr
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9N
X3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAg
ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgICAgIF9S
Yl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAgICAgIF9f
dyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICAg
ICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAg
IGlmIChfX3ctPl9NX2xlZnQpCiAgICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9j
b2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQo
X194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICBpZiAoX194KSBfX3gtPl9NX2NvbG9yID0gX01f
YmxhY2s7CiAgICAgIH0KICAgIHJldHVybiBfX3k7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgYm9vbCBfU19pbnN0YW5jZWxlc3M+CiAgICBjbGFz
cyBfUmJfdHJlZV9hbGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3Jf
dHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7
IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSks
IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAgICAgIF9N
X25vZGVfYWxsb2NhdG9yOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7Cgog
ICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX01f
bm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0X25v
ZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVh
bGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0
cnVlPgogICAgewogICAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICAgIGFsbG9j
YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgp
OyB9CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBf
TV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9SYl90cmVlX25vZGU8X1RwPiog
X01faGVhZGVyOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVl
X25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgX0FsbG9jX3R5cGU7CgogICAg
ICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9j
X3R5cGU6OmFsbG9jYXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90
cmVlX25vZGU8X1RwPiogX19wKSB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0K
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3Ry
dWN0IF9SYl90cmVlX2Jhc2UgOiBwdWJsaWMgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICB7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfYWxs
b2NfYmFzZTxfVHAsCiAgICAgICAgX0FsbG9jLCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPiBfQmFzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dl
dF9ub2RlKCk7IH0KICAgICAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1dF9ub2RlKF9NX2hlYWRl
cik7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWw+ID4KICAgIGNsYXNzIF9SYl90cmVlIDogcHJvdGVj
dGVkIF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVmIF9SYl90
cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPiBfQmFzZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVf
bm9kZTxfVmFsPiBfUmJfdHJlZV9ub2RlOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfS2V5
IGtleV90eXBlOwogICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB2
YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0
X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgICB0eXBl
ZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfUmJf
dHJlZV9ub2RlKiBfTGlua190eXBlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg
ICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgICBhbGxvY2F0
b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0
b3IoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwog
ICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9oZWFk
ZXI7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5
cGUmIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgp
OwogICAgICAgIHRyeQogICAgICAgICAgeyBfQ29uc3RydWN0KCZfX3RtcC0+X01fdmFsdWVfZmll
bGQsIF9feCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICBfTV9w
dXRfbm9kZShfX3RtcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1
cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY2xvbmVfbm9kZShf
TGlua190eXBlIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9jcmVh
dGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfX3RtcC0+X01fY29sb3IgPSBf
X3gtPl9NX2NvbG9yOwogICAgICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgICAgICBfX3RtcC0+
X01fcmlnaHQgPSAwOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgdm9pZAog
ICAgICBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgICAgIHsKICAgICAgICBfRGVzdHJv
eSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAg
fQoKICAgICAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7CiAgICAgIF9Db21wYXJlIF9NX2tleV9j
b21wYXJlOwoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcm9vdCgpIGNvbnN0IHsgcmV0dXJu
IChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KCiAgICAgIF9MaW5rX3R5cGUm
CiAgICAgIF9NX2xlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFk
ZXItPl9NX2xlZnQ7IH0KCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX3JpZ2h0bW9zdCgpIGNv
bnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9yaWdodDsgfQoKICAgICAg
c3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJu
IChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUm
CiAgICAgIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9f
eC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcGFyZW50
KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsg
fQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfTGlua190eXBlIF9feCkg
eyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3RhdGljIGNvbnN0IF9LZXkm
CiAgICAgIF9TX2tleShfTGlua190eXBlIF9feCkgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192
YWx1ZShfX3gpKTsgfQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9yJgogICAgICBfU19jb2xv
cihfTGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV9jb2xvcjsgfQoKICAgICAgc3RhdGlj
IF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5r
X3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAg
X1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3Jp
Z2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3BhcmVudChfQmFzZV9w
dHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQoKICAgICAg
c3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfQmFzZV9wdHIgX194KSB7IHJldHVybiAo
KF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBf
S2V5JgogICAgICBfU19rZXkoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gX0tleU9mVmFsdWUoKShf
U192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CgogICAgICBzdGF0aWMgX1JiX3RyZWVfY29sb3Im
CiAgICAgIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlKF9feCkt
Pl9NX2NvbG9yKTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAgICAgX1NfbWluaW11bShf
TGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVf
YmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZQogICAgICBf
U19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1Ji
X3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJlbmNlLCBwb2ludGVyPiBp
dGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25z
dF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKICAgICAg
dHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y
PiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiAgICAgIGl0ZXJhdG9yCiAgICAgIF9N
X2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBf
X3YpOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlu
a190eXBlIF9fcCk7CgogICAgICB2b2lkCiAgICAgIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsK
CiAgICBwdWJsaWM6CgogICAgICBfUmJfdHJlZSgpCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3Jf
dHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoKQogICAgICB7IF9NX2Vt
cHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29t
cCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBf
TV9rZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9Cgog
ICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKQogICAgICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2Nv
bXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1Ji
X3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCkKICAgICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLCBfTV9ub2RlX2Nv
dW50KDApLAogICAgICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9feC5fTV9rZXlfY29tcGFy
ZSkKICAgICAgewogICAgICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgICAgICBfTV9l
bXB0eV9pbml0aWFsaXplKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBf
U19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwogICAgICAgICAgICBfTV9yb290KCkgPSBfTV9j
b3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkg
PSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1Nf
bWF4aW11bShfTV9yb290KCkpOwogICAgICAgICAgfQogICAgICAgIF9NX25vZGVfY291bnQgPSBf
X3guX01fbm9kZV9jb3VudDsKICAgICAgfQoKICAgICAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9
CgogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYK
ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gpOwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgX01fZW1wdHlfaW5p
dGlhbGl6ZSgpCiAgICAgIHsKICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwoK
ICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7
CiAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIH0KCiAgICBwdWJsaWM6
CgogICAgICBfQ29tcGFyZQogICAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9j
b21wYXJlOyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRt
b3N0KCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gX01fbGVmdG1vc3QoKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkgeyByZXR1cm4g
X01faGVhZGVyOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IKICAgICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9u
b2RlX2NvdW50ID09IDA7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gX01fbm9kZV9jb3VudDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICAgICAgdm9pZAogICAgICBzd2FwKF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpCiAgICAg
IHsKICAgICAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgICAgICBz
dGQ6OnN3YXAoX01fbm9kZV9jb3VudCwgX190Ll9NX25vZGVfY291bnQpOwogICAgICAgIHN0ZDo6
c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICAgICAgfQoKCiAgICAg
IHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgICAgaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBl
JiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBp
bnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAg
IGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lk
CiAgICAgIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsK
CiAgICAgIHNpemVfdHlwZQogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg
IHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKCiAg
ICAgIHZvaWQKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90
eXBlKiBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsKICAgICAgICBp
ZiAoX01fbm9kZV9jb3VudCAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBfTV9lcmFzZShf
TV9yb290KCkpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAg
ICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRl
cjsKICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICB9CiAgICAgIH0KCgog
ICAgICBpdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgY29u
c3RfaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg
IGl0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CgogICAgICBpdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194
KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0OwoKICAgICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAgICAgZXF1YWxf
cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBj
b25zdF9pdGVyYXRvcj4KICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CgoKICAgICAgYm9vbAogICAgICBfX3JiX3ZlcmlmeSgpIGNvbnN0OwogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJl
dHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICBlcXVhbChfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9
PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVu
YW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29u
c3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj49KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3ggPCBf
X3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh
bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICAgIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIG9wZXJhdG9y
PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICAgIHsKCiAgICAgICAgICBj
bGVhcigpOwogICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICBfTV9rZXlfY29t
cGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgICAgICAgIGlmIChfX3guX01fcm9vdCgpID09
IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAg
ICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0
KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVh
ZGVyKTsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkp
OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwog
ICAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9p
bnNlcnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsJiBfX3YpCiAg
ICB7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgICAgIF9MaW5r
X3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgICAgIF9MaW5rX3R5cGUgX196OwoKICAg
ICAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAgfHwKICAgICAgICAgIF9NX2tleV9j
b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKQogICAgICAgIHsKICAgICAg
ICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBfU19sZWZ0KF9feSkgPSBf
X3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfTV9yb290KCkgPSBfX3o7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBf
X3o7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0bW9zdCgp
KQogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBf
U19yaWdodChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkp
CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgIH0KICAgICAgX1NfcGFy
ZW50KF9feikgPSBfX3k7CiAgICAgIF9TX2xlZnQoX196KSA9IDA7CiAgICAgIF9TX3JpZ2h0KF9f
eikgPSAwOwogICAgICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFkZXItPl9NX3BhcmVu
dCk7CiAgICAgICsrX01fbm9kZV9jb3VudDsKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feik7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAg
IF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jv
b3QoKTsKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9f
eDsKICAgICAgICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf
a2V5KF9feCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBwYWly
PHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjppdGVyYXRvciwKICAgIGJvb2w+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWwmIF9fdikKICAg
IHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194
ID0gX01fcm9vdCgpOwogICAgICBib29sIF9fY29tcCA9IHRydWU7CiAgICAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX2NvbXAgPSBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKTsKICAgICAgICAg
IF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQog
ICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICBpZiAoX19jb21wKQogICAg
ICAgIGlmIChfX2ogPT0gYmVnaW4oKSkKICAgICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJv
b2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgLS1fX2o7CiAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBf
S2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9N
X2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9y
LGJvb2w+KF9faiwgZmFsc2UpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWws
IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9L
ZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5p
cXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAgaWYg
KF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoKICAg
ICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tl
eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgICAgICAg
IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShf
X3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09
IF9NX2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tl
eShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwog
ICAgICAgICAgLS1fX2JlZm9yZTsKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXko
X19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAgICAgICAmJiBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k
ZSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9N
X25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3Jl
Ll9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJu
IF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsK
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91
bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVh
bChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChf
X3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAg
ICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgICFfTV9rZXlfY29tcGFyZShfU19r
ZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAg
cmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwg
X192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192
KTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFk
ZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo
KShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAgICAgICAgICAgcmV0dXJuIF9NX2lu
c2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19i
ZWZvcmU7CiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg
X1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpKQogICAgICAgICAgICAgICYmICFfTV9rZXlfY29tcGFy
ZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm
IChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bv
c2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJ
PgogICAgICB2b2lkCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6
CiAgICAgIGluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAgICAgewogICAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2Vy
dF9lcXVhbCgqX19maXJzdCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ21wLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CiAgICB2b2lkCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShfSUkgX19m
aXJzdCwgX0lJIF9fbGFzdCkKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgIGluc2VydF91bmlxdWUoKl9fZmlyc3QpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9
CiAgICAgICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3Np
dGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsK
ICAgICAgZGVzdHJveV9ub2RlKF9feSk7CiAgICAgIC0tX01fbm9kZV9jb3VudDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCiAgICB7CiAgICAgIHBhaXI8aXRlcmF0b3IsaXRl
cmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0
YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmlyc3QsIF9fcC5z
ZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBf
S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9Lb1YsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlu
a190eXBlIF9fcCkKICAgIHsKCiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2Rl
KF9feCk7CiAgICAgIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkKICAgICAgICB7
CiAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3AtPl9NX3JpZ2h0
ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3AgPSBfX3RvcDsK
ICAgICAgICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAoX194ICE9IDAp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25v
ZGUoX194KTsKICAgICAgICAgICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgICAgICAg
X195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAg
ICAgICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kp
OwogICAgICAgICAgICAgIF9fcCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9f
eCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAg
ICAgICAgICBfTV9lcmFzZShfX3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3RvcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKICAgIHsKCiAg
ICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfU19yaWdo
dChfX3gpKTsKICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgICAg
ICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewog
ICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgICAgICBj
bGVhcigpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFz
ZShfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBf
VmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29u
c3QgX0tleSogX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAg
ICAgICAgZXJhc2UoKl9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f
aykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5
cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICgh
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9f
eCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChf
X3gpOwoKICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgcmV0dXJuIChf
X2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkg
PwogICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0
IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7
CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICB3aGlsZSAoX194ICE9IDAp
CiAgICAgICB7CiAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykp
CiAgICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwogICAgICAgfQogICAgIGNvbnN0X2l0ZXJh
dG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICAgcmV0dXJuIChfX2ogPT0gZW5kKCkg
fHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgICAgZW5k
KCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws
IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0
CiAgICB7CiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBl
cXVhbF9yYW5nZShfX2spOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0
LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJf
Ym91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hl
YWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194
ICE9IDApCiAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAg
ICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAog
ICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9r
ZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0g
X1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBw
ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAo
X194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQog
ICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0
CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBl
IF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoX01f
a2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9
IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gp
OwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUKICAgIHBh
aXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46Oml0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXF1YWxfcmFuZ2UoY29uc3QgX0tl
eSYgX19rKQogICAgeyByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5k
KF9fayksIHVwcGVyX2JvdW5kKF9faykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUKICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXks
IF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25z
dF9pdGVyYXRvcj4KICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9j
PgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAogIHsKICAgIHJldHVybiBw
YWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9f
aykpOwogIH0KCiAgaW5saW5lIGludAogIF9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNl
KiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQogIHsKICAgIGlmIChfX25vZGUg
PT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICBpbnQgX19zdW0gPSAwOwogICAgZG8KICAgICAgewog
ICAgICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAgICAgKytfX3N1
bTsKICAgICAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgICAgIGJyZWFrOwogICAgICAg
IF9fbm9kZSA9IF9fbm9kZS0+X01fcGFyZW50OwogICAgICB9CiAgICB3aGlsZSAoMSk7CiAgICBy
ZXR1cm4gX19zdW07CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKICAgIHsKICAgIGlmIChfTV9u
b2RlX2NvdW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgICAgcmV0dXJuIF9NX25vZGVf
Y291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgICAgX01faGVhZGVyLT5fTV9s
ZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAg
ICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CiAg
ICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19f
aXQpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX2l0Ll9N
X25vZGU7CiAgICAgICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICAgICAgX0xp
bmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgICAgICBpZiAoX194LT5fTV9jb2xvciA9
PSBfTV9yZWQpCiAgICAgICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9NX3JlZCkK
ICAgICAgICAgICAgICB8fCAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX01fcmVkKSkKICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9T
X2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
aWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5KF9feCkpKQogICAg
ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tf
Y291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICB9CgogICAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19t
aW5pbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfTV9yaWdodG1v
c3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgICAg
cmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgICB9Cn0KIyA2NyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvbWFwIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9tYXAuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX21hcC5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICAgIGNsYXNz
IG1hcAogIHsKCiAgIAogICAKCiAgcHVibGljOgogICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwog
ICAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwg
X1RwPiB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgICBj
bGFzcyB2YWx1ZV9jb21wYXJlCiAgICAgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90
eXBlLCB2YWx1ZV90eXBlLCBib29sPgogICAgICB7CiAgICAgICAgZnJpZW5kIGNsYXNzIG1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgX0NvbXBh
cmUgY29tcDsKICAgICAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykg
e30KICAgICAgcHVibGljOgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBl
JiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVybiBjb21w
KF9feC5maXJzdCwgX195LmZpcnN0KTsgfQogICAgICB9OwoKICBwcml2YXRlOgoKICAgIHR5cGVk
ZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIF9T
ZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKCiAg
ICBfUmVwX3R5cGUgX01fdDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CiMgMTQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9tYXAuaCIgMwogICAgbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkp
IHsgfQoKCgoKCiAgICBleHBsaWNpdAogICAgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9NX3Qo
X19jb21wLCBfX2EpIHsgfQojIDE2MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfbWFwLmgiIDMKICAgIG1hcChjb25zdCBtYXAmIF9feCkKICAgICAgOiBfTV90KF9feC5fTV90
KSB7IH0KIyAxNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAz
CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG1hcChfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgIDogX01fdChfQ29t
cGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2Zp
cnN0LCBfX2xhc3QpOyB9CiMgMTg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9tYXAuaCIgMwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBt
YXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICAgIDogX01fdChfX2NvbXAsIF9fYSkKICAgICAgeyBfTV90Lmlu
c2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQojIDIxMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIG1hcCYKICAgIG9wZXJhdG9yPShjb25zdCBt
YXAmIF9feCkKICAgIHsKICAgICAgX01fdCA9IF9feC5fTV90OwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBiZWdp
bigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAg
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICAgIGl0ZXJhdG9y
CiAgICBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVyYXRv
cgogICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCiAgICByZXZlcnNl
X2l0ZXJhdG9yCiAgICByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAg
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90
LnJiZWdpbigpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICByZW5kKCkgeyByZXR1
cm4gX01fdC5yZW5kKCk7IH0KCgoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJl
bmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgogICAgYm9vbAogICAgZW1wdHko
KSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KCgogICAgc2l6ZV90eXBlCiAgICBzaXpl
KCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KCgogICAgc2l6ZV90eXBlCiAgICBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQojIDMxMCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIG1hcHBlZF90eXBlJgogICAg
b3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKQogICAgewoKICAgICAKCiAgICAgIGl0ZXJh
dG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgICBpZiAoX19pID09IGVuZCgpIHx8IGtl
eV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICAgIF9faSA9IGluc2VydChfX2ksIHZh
bHVlX3R5cGUoX19rLCBtYXBwZWRfdHlwZSgpKSk7CiAgICAgIHJldHVybiAoKl9faSkuc2Vjb25k
OwogICAgfQojIDMzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgi
IDMKICAgIHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBf
X3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194KTsgfQojIDM2MiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICBp
bnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0
dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQojIDM3NCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1
ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMzg4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9tYXAuaCIgMwogICAgdm9pZAogICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
eyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgNDAyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgc2l6ZV90eXBlCiAgICBlcmFzZShjb25zdCBrZXlf
dHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyA0MTUgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lkCiAgICBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xh
c3QpOyB9CiMgNDI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIg
MwogICAgdm9pZAogICAgc3dhcChtYXAmIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoK
CgoKCgogICAgdm9pZAogICAgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgoKCiAgICBrZXlf
Y29tcGFyZQogICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0K
CgoKCgogICAgdmFsdWVfY29tcGFyZQogICAgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZh
bHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQojIDQ2NyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICBmaW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiMgNDgxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAg
IGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7
IH0KIyA0OTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAg
ICBzaXplX3R5cGUKICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7IH0KIyA1MDcgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAg
bG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5sb3dlcl9ib3Vu
ZChfX3gpOyB9CiMgNTIxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAu
aCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQojIDUzMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICB1
cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5k
KF9feCk7IH0KIyA1NDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5o
IiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDU2MSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHBhaXI8aXRlcmF0
b3IsaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQogICAgeyBy
ZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CiMgNTgwICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9p
dGVyYXRvcj4KICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CiAgICB7
IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgogICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbWFwPF9LMSxfVDEsX0MxLF9BMT4mLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSxfVDEsX0MxLF9BMT4mKTsKICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBf
QTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsX1QxLF9DMSxfQTE+
JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSxfVDEsX0MxLF9BMT4m
KTsKICB9OwojIDYwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgi
IDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29u
c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5f
TV90ID09IF9feS5fTV90OyB9CiMgNjIwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0
dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9f
eSk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChtYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cn0KIyA2OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvbWFwIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9tdWx0aW1hcC5oIiAxIDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlID0gbGVz
czxfS2V5PiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29u
c3QgX0tleSwgX1RwPiA+ID4KICBjbGFzcyBtdWx0aW1hcDsKCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX195KTsKIyAxMDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgbXVs
dGltYXAKICB7CgogICAKICAgCgogIHB1YmxpYzoKICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsK
ICAgIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogICAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXks
IF9UcD4gdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogICAg
Y2xhc3MgdmFsdWVfY29tcGFyZQogICAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVf
dHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4KICAgICAgewogICAgICAgIGZyaWVuZCBjbGFzcyBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
X0NvbXBhcmUgY29tcDsKICAgICAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21w
KF9fYykge30KICAgICAgcHVibGljOgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1
ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVy
biBjb21wKF9feC5maXJzdCwgX195LmZpcnN0KTsgfQogICAgfTsKCiAgcHJpdmF0ZToKCiAgICB0
eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAg
IF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsK
CiAgICBfUmVwX3R5cGUgX01fdDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgogICAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUo
KSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CgoKCgoKICAgIGV4cGxpY2l0CiAgICBtdWx0aW1hcChj
b25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh
dG9yX3R5cGUoKSkKICAgICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KIyAxNzQgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIG11bHRpbWFwKGNv
bnN0IG11bHRpbWFwJiBfX3gpCiAgICAgIDogX01fdChfX3guX01fdCkgeyB9CiMgMTg2ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICA6IF9NX3QoX0NvbXBhcmUo
KSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3Qs
IF9fbGFzdCk7IH0KIyAyMDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211
bHRpbWFwLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAg
bXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgICA6IF9NX3Qo
X19jb21wLCBfX2EpCiAgICAgICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3Qp
OyB9CiMgMjI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5o
IiAzCiAgICBtdWx0aW1hcCYKICAgIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcCYgX194KQogICAg
ewogICAgICBfTV90ID0gX194Ll9NX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogICAg
YWxsb2NhdG9yX3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90Lmdl
dF9hbGxvY2F0b3IoKTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIGJlZ2luKCkgeyByZXR1cm4g
X01fdC5iZWdpbigpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVyYXRvcgogICAgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogICAgaXRlcmF0b3IKICAgIGVuZCgpIHsg
cmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICBlbmQoKSBj
b25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAg
ICByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yCiAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9
CgoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5k
KCk7IH0KCgoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJlbmQoKSBjb25zdCB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgogICAgYm9vbAogICAgZW1wdHkoKSBjb25zdCB7IHJl
dHVybiBfTV90LmVtcHR5KCk7IH0KCgogICAgc2l6ZV90eXBlCiAgICBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5zaXplKCk7IH0KCgogICAgc2l6ZV90eXBlCiAgICBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQojIDMyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGluc2VydChjb25z
dCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAz
NDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAg
IGl0ZXJhdG9yCiAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlw
ZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsg
fQojIDM2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIg
MwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAg
IGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAg
ICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQojIDM3NCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAg
ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMg
Mzg4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg
ICBzaXplX3R5cGUKICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
ZXJhc2UoX194KTsgfQojIDQwMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
bXVsdGltYXAuaCIgMwogICAgdm9pZAogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KSB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQojIDQxNSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAg
c3dhcChtdWx0aW1hcCYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKCgoKCiAgICB2
b2lkCiAgICBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCgoKCiAgICBrZXlfY29tcGFyZQog
ICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KCgoKCgogICAg
dmFsdWVfY29tcGFyZQogICAgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBh
cmUoX01fdC5rZXlfY29tcCgpKTsgfQojIDQ1NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGZpbmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyA0NjggIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIGNvbnN0X2l0ZXJhdG9yCiAg
ICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gp
OyB9CgoKCgoKCiAgICBzaXplX3R5cGUKICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQojIDQ5MCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGxvd2VyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsg
fQojIDUwNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIg
MwogICAgY29uc3RfaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQoKCgoKCgogICAgaXRlcmF0
b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QudXBw
ZXJfYm91bmQoX194KTsgfQoKCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9f
eCk7IH0KIyA1MzcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25zdCBr
ZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KIyA1NTMgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHBhaXI8
Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlf
dHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5h
bWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLF9U
MSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxf
SzEsX1QxLF9DMSxfQTE+Jik7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBf
VDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8
IChjb25zdCBtdWx0aW1hcDxfSzEsX1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbXVsdGltYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogIH07CiMgNTc1ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbXVsdGlt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gX194
Ll9NX3QgPT0gX195Ll9NX3Q7CiAgICB9CiMgNTk0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7IH0KCgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX194
ID09IF9feSk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg
PCBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAo
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9feSk7IH0K
fQojIDY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tYXAiIDIgMwojIDMzICJuZXRsaXN0
LmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9saXN0IiAxIDMKIyA2NSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbGlzdCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAg
X190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9j
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Ro
cm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFu
Z2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFy
KiBfX3MpOwp9CiMgNjcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2xpc3QiIDIgMwoKCgoK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDY2
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKbmFtZXNwYWNl
IHN0ZAp7CgoKCgoKCiAgc3RydWN0IF9MaXN0X25vZGVfYmFzZQogIHsKICAgIF9MaXN0X25vZGVf
YmFzZSogX01fbmV4dDsKICAgIF9MaXN0X25vZGVfYmFzZSogX01fcHJldjsKICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9MaXN0X25vZGUgOiBwdWJsaWMgX0xpc3Rf
bm9kZV9iYXNlCiAgewogICAgX1RwIF9NX2RhdGE7CiAgfTsKIyA5NyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jh
c2UKICB7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwoKCiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogICAg
X0xpc3RfaXRlcmF0b3JfYmFzZShfTGlzdF9ub2RlX2Jhc2UqIF9feCkKICAgIDogX01fbm9kZShf
X3gpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKCkKICAgIHsgfQoKCiAgICB2b2lk
CiAgICBfTV9pbmNyKCkKICAgIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7IH0KCgogICAg
dm9pZAogICAgX01fZGVjcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9Cgog
ICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNv
bnN0CiAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CgogICAgYm9vbAogICAg
b3BlcmF0b3IhPShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiBfTV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CiAgfTsKIyAxNDIgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfTGlzdF9pdGVyYXRvciA6
IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNlCiAgewogICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRv
cjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1Rw
LGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9MaXN0
X2l0ZXJhdG9yPF9UcCxfUmVmLF9QdHI+IF9TZWxmOwoKICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7
CiAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgICBfTGlzdF9pdGVyYXRvcihf
Tm9kZSogX194KQogICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feCkKICAgIHsgfQoKICAgIF9M
aXN0X2l0ZXJhdG9yKCkKICAgIHsgfQoKICAgIF9MaXN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9y
JiBfX3gpCiAgICA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpCiAgICB7IH0KCiAg
ICByZWZlcmVuY2UKICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfTm9kZSo+KF9NX25vZGUpLT5fTV9kYXRhOyB9CgoKICAgIHBvaW50ZXIKICAgIG9wZXJhdG9y
LT4oKSBjb25zdAogICAgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICBfU2VsZiYKICAg
IG9wZXJhdG9yKysoKQogICAgewogICAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgICBfU2VsZgogICAgb3BlcmF0b3IrKyhpbnQpCiAgICB7CiAgICAgIF9T
ZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAgcmV0dXJuIF9f
dG1wOwogICAgfQoKICAgIF9TZWxmJgogICAgb3BlcmF0b3ItLSgpCiAgICB7CiAgICAgIHRoaXMt
Pl9NX2RlY3IoKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIF9TZWxmCiAgICBvcGVy
YXRvci0tKGludCkKICAgIHsKICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgdGhpcy0+
X01fZGVjcigpOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAyMTIgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CiAgICBjbGFzcyBfTGlz
dF9hbGxvY19iYXNlCiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg
cmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpCiAgICB7IH0K
CiAgcHJvdGVjdGVkOgogICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgX01fZ2V0X25vZGUoKQogICAg
eyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICB2b2lkCiAgICBf
TV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX01fbm9kZV9hbGxvY2F0b3Iu
ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiMgMjQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9saXN0LmgiIDMKICAgIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9kZTxf
VHA+LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgIF9NX25vZGVfYWxs
b2NhdG9yOwoKICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICB9OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xhc3MgX0xpc3RfYWxsb2Nf
YmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICBfTGlzdF9hbGxv
Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIHsgfQoKICBwcm90ZWN0ZWQ6CgoKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0
b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgICBfTGlzdF9ub2Rl
PF9UcD4qCiAgICBfTV9nZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2Nh
dGUoMSk7IH0KCiAgICB2b2lkCiAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkK
ICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAgIF9MaXN0X25vZGU8
X1RwPiogX01fbm9kZTsKICB9OwoKCgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfTGlzdF9iYXNlCiAgICA6IHB1YmxpYyBfTGlzdF9hbGxv
Y19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogIHsKICBwdWJsaWM6CiAgICB0
eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAg
ICAgICAgICAgX0Jhc2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKCiAgICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsKICAgICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7
CiAgICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgICBfTV9ub2RlLT5fTV9wcmV2
ID0gX01fbm9kZTsKICAgIH0KCgogICAgfl9MaXN0X2Jhc2UoKQogICAgewogICAgICBfX2NsZWFy
KCk7CiAgICAgIF9NX3B1dF9ub2RlKF9NX25vZGUpOwogICAgfQoKICAgIHZvaWQKICAgIF9fY2xl
YXIoKTsKICB9OwojIDM2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlz
dC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0
b3I8X1RwPiA+CiAgICBjbGFzcyBsaXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxs
b2M+CiAgewoKICAgCgogICAgdHlwZWRlZiBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsK
CiAgcHVibGljOgogICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdmFsdWVf
dHlwZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRl
cjsKICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAg
ICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0
X2l0ZXJhdG9yOwogICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0
b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVy
YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYg
cmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7
CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKCiAgcHJvdGVjdGVkOgoKICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+
IF9Ob2RlOwoKCgoKCgoKICAgIHVzaW5nIF9CYXNlOjpfTV9ub2RlOwogICAgdXNpbmcgX0Jhc2U6
Ol9NX3B1dF9ub2RlOwogICAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwojIDQwOCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICBfTm9kZSoKICAgIF9N
X2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsKICAgICAgX05vZGUqIF9f
cCA9IF9NX2dldF9ub2RlKCk7CiAgICAgIHRyeSB7CiAgICAgICAgX0NvbnN0cnVjdCgmX19wLT5f
TV9kYXRhLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9N
X3B1dF9ub2RlKF9fcCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcDsK
ICAgIH0KCgoKCgoKCiAgICBfTm9kZSoKICAgIF9NX2NyZWF0ZV9ub2RlKCkKICAgIHsKICAgICAg
X05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgIHRyeSB7CiAgICAgICAgX0NvbnN0cnVj
dCgmX19wLT5fTV9kYXRhKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAg
ICBfTV9wdXRfbm9kZShfX3ApOwogICAgICAgIHRocm93OwogICAgICB9CiAgICAgIHJldHVybiBf
X3A7CiAgICB9CgogIHB1YmxpYzoKCgoKCgogICAgZXhwbGljaXQKICAgIGxpc3QoY29uc3QgYWxs
b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkgeyB9
CiMgNDYxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAg
IGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSwKICAgICAgICAg
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0Jh
c2UoX19hKQogICAgICB7IHRoaXMtPmluc2VydChiZWdpbigpLCBfX24sIF9fdmFsdWUpOyB9CiMg
NDczICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAgIGV4
cGxpY2l0CiAgICBsaXN0KHNpemVfdHlwZSBfX24pCiAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5
cGUoKSkKICAgICAgeyB0aGlzLT5pbnNlcnQoYmVnaW4oKSwgX19uLCB2YWx1ZV90eXBlKCkpOyB9
CiMgNDg1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAg
IGxpc3QoY29uc3QgbGlzdCYgX194KQogICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkp
CiAgICAgIHsgdGhpcy0+aW5zZXJ0KGJlZ2luKCksIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9
CiMgNTAyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBsaXN0KF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAg
ICAgIHsgdGhpcy0+aW5zZXJ0KGJlZ2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICAg
IH5saXN0KCkgeyB9CiMgNTIyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9s
aXN0LmgiIDMKICAgIGxpc3QmCiAgICBvcGVyYXRvcj0oY29uc3QgbGlzdCYgX194KTsKIyA1MzUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdm9pZAog
ICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7IF9NX2Zp
bGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiMgNTUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
PgogICAgICB2b2lkCiAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50
ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgX01fYXNz
aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICB9CgoKICAg
IGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6
OmdldF9hbGxvY2F0b3IoKTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIGJlZ2luKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsgfQoKCgoKCiAgICBjb25z
dF9pdGVyYXRvcgogICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+
KF9NX25vZGUtPl9NX25leHQpOyB9CgoKCgoKICAgIGl0ZXJhdG9yCiAgICBlbmQoKSB7IHJldHVy
biBfTV9ub2RlOyB9CgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV9ub2RlOyB9CgoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICByZW5kKCkgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgoKCgogICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcgogICAgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CgoKCgoKICAgIGJvb2wKICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4g
X01fbm9kZS0+X01fbmV4dCA9PSBfTV9ub2RlOyB9CgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKTsgfQoKCiAgICBzaXplX3R5
cGUKICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQojIDY0OCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAg
ICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMg
NjYwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHZv
aWQKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdf
c2l6ZSwgdmFsdWVfdHlwZSgpKTsgfQoKCgoKCgogICAgcmVmZXJlbmNlCiAgICBmcm9udCgpIHsg
cmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICAgIGNvbnN0X3JlZmVyZW5jZQogICAgZnJvbnQoKSBj
b25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgICByZWZlcmVuY2UKICAgIGJhY2soKSB7
IHJldHVybiAqKC0tZW5kKCkpOyB9CgoKCgoKICAgIGNvbnN0X3JlZmVyZW5jZQogICAgYmFjaygp
IGNvbnN0IHsgcmV0dXJuICooLS1lbmQoKSk7IH0KIyA3MDIgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdm9pZAogICAgcHVzaF9mcm9udChjb25zdCB2
YWx1ZV90eXBlJiBfX3gpIHsgdGhpcy0+aW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KIyA3MzMgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdm9pZAogICAg
cG9wX2Zyb250KCkgeyB0aGlzLT5lcmFzZShiZWdpbigpKTsgfQojIDc0NSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBwdXNoX2JhY2so
Y29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHRoaXMtPmluc2VydChlbmQoKSwgX194KTsgfQojIDc3
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lk
CiAgICBwb3BfYmFjaygpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICAg
IHRoaXMtPmVyYXNlKC0tX190bXApOwogICAgfQojIDc5NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgODI5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHZvaWQKICAgIGluc2VydChpdGVy
YXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyBf
TV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CiMgODQ1ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7CgogICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19s
YXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgIH0KIyA4NzAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24pOwojIDg5MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlz
dC5oIiAzCiAgICBpdGVyYXRvcgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3Ig
X19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgZXJh
c2UoX19maXJzdCsrKTsKICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyA5MDkgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdm9pZAogICAgc3dhcChs
aXN0JiBfX3gpIHsgc3RkOjpzd2FwKF9NX25vZGUsIF9feC5fTV9ub2RlKTsgfQoKCgoKCgoKICAg
IHZvaWQKICAgIGNsZWFyKCkgeyBfQmFzZTo6X19jbGVhcigpOyB9CgoKCgoKICAgIHZvaWQKICAg
IHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpCiAgICB7CiAgICAgIGlmICgh
X194LmVtcHR5KCkpCiAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX194LmJl
Z2luKCksIF9feC5lbmQoKSk7CiAgICB9CgoKCgogICAgdm9pZAogICAgc3BsaWNlKGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9f
aiA9IF9faTsKICAgICAgKytfX2o7CiAgICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bv
c2l0aW9uID09IF9faikgcmV0dXJuOwogICAgICB0aGlzLT5fTV90cmFuc2ZlcihfX3Bvc2l0aW9u
LCBfX2ksIF9faik7CiAgICB9CgoKCgogICAgdm9pZAogICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9z
aXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7CiAg
ICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICB0aGlzLT5fTV90cmFuc2ZlcihfX3Bv
c2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKCgoKICAgIHZvaWQKICAgIHJlbW92ZShj
b25zdCBfVHAmIF9fdmFsdWUpOwoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICAgIHZvaWQKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUpOwoKCgoKICAgIHZvaWQKICAg
IHVuaXF1ZSgpOwoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAg
ICAgIHZvaWQKICAgICAgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUpOwoKCgoKICAgIHZvaWQKICAg
IG1lcmdlKGxpc3QmIF9feCk7CgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtP
cmRlcmluZz4KICAgICAgdm9pZAogICAgICBtZXJnZShsaXN0JiwgX1N0cmljdFdlYWtPcmRlcmlu
Zyk7CgoKCgogICAgdm9pZAogICAgcmV2ZXJzZSgpIHsgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0aGlz
LT5fTV9ub2RlKTsgfQoKCgoKICAgIHZvaWQKICAgIHNvcnQoKTsKCgoKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgICB2b2lkCiAgICAgIHNvcnQoX1N0cmlj
dFdlYWtPcmRlcmluZyk7CgogIHByb3RlY3RlZDoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnRlZ2VyPgogICAgICB2b2lkCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24s
IF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgewogICAgICAgIF9NX2ZpbGxfYXNz
aWduKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX3ZhbCkpOwogICAgICB9CgoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSk7CgoKCiAg
ICB2b2lkCiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBl
JiBfX3ZhbCk7CgoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICB2b2lk
CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAg
ewogICAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9f
biksCiAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX194KSk7
CiAgICAgIH0KCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZv
aWQKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICB7CiAgICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAgaW5zZXJ0KF9f
cG9zLCAqX19maXJzdCk7CiAgICAgIH0KCgoKICAgIHZvaWQKICAgIF9NX2ZpbGxfaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7
CiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgaW5zZXJ0KF9fcG9zLCBfX3gp
OwogICAgfQoKCgogICAgdm9pZAogICAgX01fdHJhbnNmZXIoaXRlcmF0b3IgX19wb3NpdGlvbiwg
aXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICBpZiAoX19wb3Np
dGlvbiAhPSBfX2xhc3QpIHsKCiAgICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25l
eHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2
LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5f
TV9wcmV2LT5fTV9uZXh0ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAgICAgX0xpc3Rfbm9kZV9i
YXNlKiBfX3RtcCA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgICAgICBfX3Bvc2l0
aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgICBf
X2xhc3QuX01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAg
ICBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXYgPSBfX3RtcDsKICAgICAgfQogICAgfQogIH07CiMg
MTA5OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxs
b2M+JiBfX3kpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5k
MSA9IF9feC5lbmQoKTsKICAgICAgY29uc3RfaXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoK
ICAgICAgY29uc3RfaXRlcmF0b3IgX19pMSA9IF9feC5iZWdpbigpOwogICAgICBjb25zdF9pdGVy
YXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAgICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBf
X2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikgewogICAgICAgICsrX19pMTsKICAgICAg
ICArK19faTI7CiAgICAgIH0KICAgICAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0g
X19lbmQyOwogICAgfQojIDExMjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNv
bnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxs
b2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4o
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kp
CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgbGlzdDxf
VHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy
biAhKF9feSA8IF9feCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9j
PiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8
IF9feSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9B
bGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQp9CiMgNzIgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2xpc3QiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9saXN0LnRjYyIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
bGlzdC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjoKICAgIF9f
Y2xlYXIoKQogICAgewogICAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKICAgICAg
X05vZGUqIF9fY3VyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsKICAg
ICAgd2hpbGUgKF9fY3VyICE9IF9NX25vZGUpCiAgICAgIHsKICAgICAgICBfTm9kZSogX190bXAg
PSBfX2N1cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXItPl9NX25l
eHQpOwogICAgICAgIF9EZXN0cm95KCZfX3RtcC0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25v
ZGUoX190bXApOwogICAgICB9CiAgICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAg
ICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVy
YXRvcgogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgewogICAgICBfTm9kZSogX190bXAgPSBfTV9j
cmVhdGVfbm9kZShfX3gpOwogICAgICBfX3RtcC0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9k
ZTsKICAgICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAg
ICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAgICBf
X3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX3RtcDsKICAgICAgcmV0dXJuIF9fdG1wOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu
YW1lIGxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAg
IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaXN0X25vZGVfYmFzZSog
X19uZXh0X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX25leHQ7CiAgICAgIF9MaXN0X25v
ZGVfYmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICAg
IF9Ob2RlKiBfX24gPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7CiAg
ICAgIF9fcHJldl9ub2RlLT5fTV9uZXh0ID0gX19uZXh0X25vZGU7CiAgICAgIF9fbmV4dF9ub2Rl
LT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwog
ICAgICBfTV9wdXRfbm9kZShfX24pOwogICAgICByZXR1cm4gaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8
X05vZGUqPihfX25leHRfbm9kZSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAgcmVzaXpl
KHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7CiAgICAg
IGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICAg
IGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19s
ZW4pCiAgICAgICAgOwogICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgICAgICBlcmFz
ZShfX2ksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6
ZSAtIF9fbGVuLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGxpc3Q8X1RwLF9BbGxvYz4mCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAg
IG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpCiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZfX3gp
CiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICAgICAgaXRl
cmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QyID0g
X194LmJlZ2luKCk7CiAgICAgICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsK
ICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogICAgICAgICAgKl9fZmlyc3QxKysgPSAqX19maXJzdDIrKzsKICAgICAgICBpZiAoX19maXJz
dDIgPT0gX19sYXN0MikKICAgICAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgICAg
ICBlbHNlCiAgICAgICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIF9NX2Zp
bGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQogICAgewog
ICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogICAgICBmb3IgKCA7IF9faSAhPSBlbmQoKSAm
JiBfX24gPiAwOyArK19faSwgLS1fX24pCiAgICAgICAgKl9faSA9IF9fdmFsOwogICAgICBpZiAo
X19uID4gMCkKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiwgX192YWwpOwogICAgICBlbHNlCiAg
ICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAg
IHZvaWQKICAgICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf
SW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVyIF9fbGFzdDIsIF9fZmFsc2VfdHlwZSkKICAg
ICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRv
ciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MjsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICAgICpf
X2ZpcnN0MSA9ICpfX2ZpcnN0MjsKICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAg
ICAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgICAgICBlbHNlCiAgICAgICAgICBp
bnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgbGlzdDxfVHAsX0FsbG9j
Pjo6CiAgICByZW1vdmUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkKICAgIHsKICAgICAgaXRl
cmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBf
X25leHQgPSBfX2ZpcnN0OwogICAgICAgICsrX19uZXh0OwogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbHVlKQogICAgICAgICAgZXJhc2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9IF9f
bmV4dDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAgIHsK
ICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9
IGVuZCgpOwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRlcmF0
b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAg
ICAgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgZXJhc2UoX19u
ZXh0KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIF9f
bmV4dCA9IF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIG1lcmdl
KGxpc3QmIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAg
ICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194
LmJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYg
KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX25l
eHQgPSBfX2ZpcnN0MjsKICAgICAgICAgIF9NX3RyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0Miwg
KytfX25leHQpOwogICAgICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICAgICAgfQogICAgICAg
IGVsc2UKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogICAgICAgIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgIH0K
CgogIGlubGluZSB2b2lkCiAgX19MaXN0X2Jhc2VfcmV2ZXJzZShfTGlzdF9ub2RlX2Jhc2UqIF9f
cCkKICB7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wOwogICAgZG8gewogICAgICBz
dGQ6OnN3YXAoX190bXAtPl9NX25leHQsIF9fdG1wLT5fTV9wcmV2KTsKICAgICAgX190bXAgPSBf
X3RtcC0+X01fcHJldjsKICAgIH0gd2hpbGUgKF9fdG1wICE9IF9fcCk7CiAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9B
bGxvYz46OgogICAgc29ydCgpCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBf
TV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkKICAgICAgewog
ICAgICAgIGxpc3QgX19jYXJyeTsKICAgICAgICBsaXN0IF9fY291bnRlcls2NF07CiAgICAgICAg
aW50IF9fZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKQogICAgICAgIHsKICAgICAg
ICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAg
ICAgICAgaW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYgIV9fY291
bnRlcltfX2ldLmVtcHR5KCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ld
Lm1lcmdlKF9fY2FycnkpOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsr
XSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwog
ICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAgICAg
Zm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291bnRl
cltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVyW19f
ZmlsbC0xXSk7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9pZAog
ICAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVk
KQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgICAgaXRl
cmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQog
ICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAgICAr
K19fbmV4dDsKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBlcmFzZShfX2ZpcnN0KTsK
ICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgICAgfQogICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9C
aW5hcnlQcmVkaWNhdGU+CiAgICAgIHZvaWQKICAgICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICAg
IHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICAgIHsKICAgICAgICBp
dGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQo
KTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgICBpdGVyYXRv
ciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAg
ICAgICAgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQog
ICAgICAgICAgICBlcmFzZShfX25leHQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2Zp
cnN0ID0gX19uZXh0OwogICAgICAgICAgX19uZXh0ID0gX19maXJzdDsKICAgICAgICB9CiAgICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgdm9pZAogICAgICBsaXN0PF9U
cCxfQWxsb2M+OjoKICAgICAgbWVyZ2UobGlzdCYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9f
Y29tcCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAg
ICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDIgPSBf
X3guYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAg
ICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHsKICAgICAg
ICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgICAgICAgIF9NX3RyYW5zZmVy
KF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICAgICAgICBfX2ZpcnN0MiA9IF9f
bmV4dDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgX01fdHJhbnNmZXIoX19sYXN0MSwgX19m
aXJzdDIsIF9fbGFzdDIpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAg
ICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmlu
ZyBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBfTV9ub2RlICYm
IF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkKICAgICAgewogICAgICAgIGxp
c3QgX19jYXJyeTsKICAgICAgICBsaXN0IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmls
bCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKQogICAgICAgIHsKICAgICAgICAgIF9fY2Fy
cnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICAgICAgaW50
IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYgIV9fY291bnRlcltfX2ld
LmVtcHR5KCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9f
Y2FycnksIF9fY29tcCk7CiAgICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytd
KTsKICAgICAgICAgIH0KICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAg
ICAgICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAgICBm
b3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAgICAgX19jb3VudGVy
W19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSwgX19jb21wKTsKICAgICAgICBzd2FwKF9fY291
bnRlcltfX2ZpbGwtMV0pOwogICAgICB9CiAgICB9Cn0KIyA3NSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvbGlzdCIgMiAzCiMgMzQgIm5ldGxpc3QuaCIgMgojIDEgInZlcmludW0uaCIgMQoj
IDIyICJ2ZXJpbnVtLmgiCiNpZGVudCAiJElkOiB2ZXJpbnVtLmgsdiAxLjIwIDIwMDIvMDgvMTIg
MDE6MzU6MDEgc3RldmUgRXhwICQiCiMgMzkgInZlcmludW0uaCIKY2xhc3MgdmVyaW51bSB7Cgog
ICAgcHVibGljOgogICAgICBlbnVtIFYgeyBWMCA9IDAsIFYxLCBWeCwgVnogfTsKCiAgICAgIHZl
cmludW0oKTsKICAgICAgdmVyaW51bShjb25zdCBzdHJpbmcmc3RyKTsKICAgICAgdmVyaW51bShj
b25zdCBWKnYsIHVuc2lnbmVkIG5iaXRzLCBib29sIGhhc19sZW4gPXRydWUpOwogICAgICB2ZXJp
bnVtKFYsIHVuc2lnbmVkIG5iaXRzID0xLCBib29sIGhhc19sZW4gPXRydWUpOwogICAgICB2ZXJp
bnVtKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBiaXRzKTsKICAgICAgdmVyaW51bShjb25z
dCB2ZXJpbnVtJik7CgoKICAgICAgZXhwbGljaXQgdmVyaW51bShsb25nIHZhbCk7CgoKCiAgICAg
IHZlcmludW0oY29uc3QgdmVyaW51bSYsIHVuc2lnbmVkIGJpdHMpOwoKICAgICAgfnZlcmludW0o
KTsKICAgICAgdmVyaW51bSYgb3BlcmF0b3I9IChjb25zdCB2ZXJpbnVtJik7CgoKICAgICAgdW5z
aWduZWQgbGVuKCkgY29uc3QgeyByZXR1cm4gbmJpdHNfOyB9CgoKCiAgICAgIGJvb2wgaGFzX2xl
bigpIGNvbnN0IHsgcmV0dXJuIGhhc19sZW5fOyB9CgogICAgICBib29sIGhhc19zaWduKGJvb2wg
ZmxhZykgeyBoYXNfc2lnbl8gPSBmbGFnOyByZXR1cm4gaGFzX3NpZ25fOyB9CiAgICAgIGJvb2wg
aGFzX3NpZ24oKSBjb25zdCB7IHJldHVybiBoYXNfc2lnbl87IH0KCgogICAgICBib29sIGlzX2Rl
ZmluZWQoKSBjb25zdDsKCgoKICAgICAgYm9vbCBpc19zdHJpbmcoKSBjb25zdCB7IHJldHVybiBz
dHJpbmdfZmxhZ187IH0KCgogICAgICBib29sIGlzX2JlZm9yZShjb25zdCB2ZXJpbnVtJnRoYXQp
IGNvbnN0OwoKCgogICAgICBWIGdldCh1bnNpZ25lZCBpZHgpIGNvbnN0OwogICAgICBWIHNldCh1
bnNpZ25lZCBpZHgsIFYgdmFsKTsKCiAgICAgIFYgb3BlcmF0b3JbXSAodW5zaWduZWQgaWR4KSBj
b25zdCB7IHJldHVybiBnZXQoaWR4KTsgfQoKCiAgICAgIHVuc2lnbmVkIGxvbmcgYXNfdWxvbmco
KSBjb25zdDsKICAgICAgc2lnbmVkIGxvbmcgYXNfbG9uZygpIGNvbnN0OwogICAgICBzdHJpbmcg
YXNfc3RyaW5nKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgViogYml0c187CiAgICAgIHVu
c2lnbmVkIG5iaXRzXzsKICAgICAgYm9vbCBoYXNfbGVuXzsKICAgICAgYm9vbCBoYXNfc2lnbl87
CgoKCiAgICAgIGJvb2wgc3RyaW5nX2ZsYWdfOwp9OwoKCmV4dGVybiBvc3RyZWFtJiBvcGVyYXRv
cjw8IChvc3RyZWFtJiwgY29uc3QgdmVyaW51bSYpOwpleHRlcm4gb3N0cmVhbSYgb3BlcmF0b3I8
PCAob3N0cmVhbSYsIHZlcmludW06OlYpOwoKZXh0ZXJuIHZlcmludW06OlYgb3BlcmF0b3IgfCAo
dmVyaW51bTo6ViBsLCB2ZXJpbnVtOjpWIHIpOwpleHRlcm4gdmVyaW51bTo6ViBvcGVyYXRvciAm
ICh2ZXJpbnVtOjpWIGwsIHZlcmludW06OlYgcik7CgpleHRlcm4gdmVyaW51bTo6ViBvcGVyYXRv
ciA9PSAoY29uc3QgdmVyaW51bSZsZWZ0LCBjb25zdCB2ZXJpbnVtJnJpZ2h0KTsKZXh0ZXJuIHZl
cmludW06OlYgb3BlcmF0b3IgPD0gKGNvbnN0IHZlcmludW0mbGVmdCwgY29uc3QgdmVyaW51bSZy
aWdodCk7CmV4dGVybiB2ZXJpbnVtOjpWIG9wZXJhdG9yIDwgKGNvbnN0IHZlcmludW0mbGVmdCwg
Y29uc3QgdmVyaW51bSZyaWdodCk7CmV4dGVybiB2ZXJpbnVtIG9wZXJhdG9yICsgKGNvbnN0IHZl
cmludW0mbGVmdCwgY29uc3QgdmVyaW51bSZyaWdodCk7CmV4dGVybiB2ZXJpbnVtIG9wZXJhdG9y
IC0gKGNvbnN0IHZlcmludW0mbGVmdCwgY29uc3QgdmVyaW51bSZyaWdodCk7CmV4dGVybiB2ZXJp
bnVtIG9wZXJhdG9yICogKGNvbnN0IHZlcmludW0mbGVmdCwgY29uc3QgdmVyaW51bSZyaWdodCk7
CmV4dGVybiB2ZXJpbnVtIG9wZXJhdG9yIC8gKGNvbnN0IHZlcmludW0mbGVmdCwgY29uc3QgdmVy
aW51bSZyaWdodCk7CmV4dGVybiB2ZXJpbnVtIG9wZXJhdG9yICUgKGNvbnN0IHZlcmludW0mbGVm
dCwgY29uc3QgdmVyaW51bSZyaWdodCk7CgppbmxpbmUgdmVyaW51bTo6ViBvcGVyYXRvciA+IChj
b25zdCB2ZXJpbnVtJmxlZnQsIGNvbnN0IHZlcmludW0mcmlnaHQpCnsgcmV0dXJuIHJpZ2h0IDwg
bGVmdDsgfQoKaW5saW5lIHZlcmludW06OlYgb3BlcmF0b3IgPj0gKGNvbnN0IHZlcmludW0mbGVm
dCwgY29uc3QgdmVyaW51bSZyaWdodCkKeyByZXR1cm4gcmlnaHQgPD0gbGVmdDsgfQoKaW5saW5l
IHZlcmludW06OlYgb3BlcmF0b3IgIT0gKGNvbnN0IHZlcmludW0mbGVmdCwgY29uc3QgdmVyaW51
bSZyaWdodCkKeyByZXR1cm4gKGxlZnQgPT0gcmlnaHQpPyB2ZXJpbnVtOjpWMCA6IHZlcmludW06
OlYxOyB9CgpleHRlcm4gdmVyaW51bSB2X25vdChjb25zdCB2ZXJpbnVtJmxlZnQpOwojIDM1ICJu
ZXRsaXN0LmgiIDIKIyAxICJITmFtZS5oIiAxCiMgMjIgIkhOYW1lLmgiCiNpZGVudCAiJElkOiBI
TmFtZS5oLHYgMS40IDIwMDIvMTEvMDIgMDM6Mjc6NTEgc3RldmUgRXhwICQiCgoKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2lvc3RyZWFtIiAzCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9vc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIg
MwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3MiIDEgMwojIDQzICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9pb3MiIDMKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUiIDEgMwojIDQ4ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9jbG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUu
aCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg
NAojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbG9jYWxlLmgiIDEgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzIDQK
ZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUg
PSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNT
QUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9
IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVB
U1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9p
bmNsdWRlL2xvY2FsZS5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9s
b2NhbGUuaCIgMyA0CnN0cnVjdCBsY29udgp7CgoKICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNo
YXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91cGluZzsKCgoKCgogIGNoYXIgKmlu
dF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2lt
YWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5n
OwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGlu
dF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7
CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBu
X3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bv
c247CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFj
ZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7
CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247CiAgY2hhciBpbnRfbl9zaWduX3Bvc247CiMg
MTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNAp9OwoKCgoKCmV4dGVybiBjaGFyICpzZXRs
b2NhbGUgKGludCBfX2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsK
CgpleHRlcm4gc3RydWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKCgojIDE0
OCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKdHlwZWRlZiBfX2xvY2FsZV90IGxvY2FsZV90
OwoKCgoKCmV4dGVybiBfX2xvY2FsZV90IG5ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywg
X19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv
Y2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMg
NApleHRlcm4gX19sb2NhbGVfdCBkdXBsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gX19sb2NhbGVfdCB1c2Vsb2NhbGUgKF9fbG9jYWxlX3QgX19k
YXRhc2V0KSB0aHJvdyAoKTsKCgoKCgoKCn0KIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1
c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAz
CgoKCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2NfbG9jYWxlOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQs
IGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAgICAgICAgICAgICAg
ICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAg
ICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKTsKICAgICAgY2hhciog
X19zYXYgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29sZCkgKyAxKSk7CiAg
ICAgIGlmIChfX3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgICAgc2V0bG9j
YWxlKF9fTENfQUxMLCAiQyIpOwoKICAgICAgaW50IF9fcmV0OwoKICAgICAgaWYgKF9fcHJlYyA+
PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJl
YywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6
ZSwgX19mbXQsIF9fdik7CgoKCgoKCiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX19zYXYpOwog
ICAgICBmcmVlKF9fc2F2KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQp9CiMgNDcgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9jY3R5cGUiIDEgMwojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9jY3R5cGUiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMgNAojIDMw
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiAiQyIgewojIDQ4ICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMyA0CmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDAp
KSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgx
IDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwg
OCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0g
KCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4
ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkp
LAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkp
ID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEg
PDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgp
IDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgp
KSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgx
IDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8
IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVt
ID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9
OwojIDgxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiBfX2NvbnN0IHVuc2lnbmVk
IHNob3J0IGludCAqKl9fY3R5cGVfYl9sb2MgKHZvaWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICoqX19jdHlwZV90b2xvd2VyX2xvYyAo
dm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2lu
dDMyX3QgKipfX2N0eXBlX3RvdXBwZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0KSk7CiMgOTYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKCgoKCgoKZXh0ZXJuIGlu
dCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0
IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNz
cGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvbG93ZXIg
KGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IGlzY3R5cGUgKGludCBfX2MsIGludCBfX21hc2spIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkg
KGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgp
OwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDI0NyAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMgNApleHRlcm4gaW50IGlzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNjbnRybF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2Vy
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaF9sIChpbnQs
IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnRfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBpc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpc2Js
YW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2Vy
X2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKZXh0ZXJuIGludCB0b2xvd2Vy
X2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91
cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgdG91
cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMzIzICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMyA0Cn0KIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY2N0
eXBlIiAyIDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY2N0eXBlIiAzCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcg
Ojppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcg
Ojppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcg
Ojppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5n
IDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf
X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVmd2Qu
aCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc3ByaW50KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVy
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJU
LCBjb25zdCBsb2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hh
cj47CgogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFz
ZTsKICBjbGFzcyBfX2VuY190cmFpdHM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5
cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dDsKICB0
ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxh
dGU8PiBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz
IG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9
IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MK
ICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGlt
ZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBt
b25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlw
dW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6
CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0Owog
ICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAg
ICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAg
ICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7Cgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNf
ZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29y
eSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAg
ICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29u
c3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg
dGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8
PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0
YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY3R5cGUgfCBudW1lcmljIHwgY29sbGF0ZSB8CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIHwgbW9uZXRhcnkg
fCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxv
Y2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNo
YXIqIF9fcyk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBf
X3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNv
bnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19m
KTsKCiAgICB+bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRv
cj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVy
KSBjb25zdDsKCgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cg
KCkKICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUK
ICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJgogICAg
Y2xhc3NpYygpOwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBzdGF0aWMg
X0ltcGwqIF9TX2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoKCgoKCgog
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19jYXRlZ29yaWVzX3NpemUgPSA2OwoKCgoKCgogICAg
c3RhdGljIGNvbnN0IHNpemVfdCBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgPSAwOwoKCgoKCiAg
ICBzdGF0aWMgY29uc3QgY2hhciogX1NfY2F0ZWdvcmllc1tfU19jYXRlZ29yaWVzX3NpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNf
c2l6ZV07CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3Rh
dGljIGlubGluZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19j
bGFzc2ljKQogICAgICAgIGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAg
IF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVz
Y2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9f
Y2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAg
IHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+
CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygp
OwoKICBwcml2YXRlOgoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQq
KiBfTV9mYWNldHM7CiAgICBzaXplX3QgX01fZmFjZXRzX3NpemU7CgogICAgY2hhciogX01fbmFt
ZXNbX1NfY2F0ZWdvcmllc19zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2Nh
bGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp
ZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv
bnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p
ZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21l
c3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2Zh
Y2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgp
IHRocm93KCkKICAgIHsgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlu
bGluZSB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBp
ZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0
Y2goLi4uKQogICAgICAgICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3Qg
X0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1w
bChmYWNldCoqLCBzaXplX3QsIGJvb2wpOwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1w
bChjb25zdCBfSW1wbCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoK
ICAgIGlubGluZSBib29sCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29s
IF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX3Jl
dCAmJiBfX2kgPCBfU19jYXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUg
LSAxOwogICAgICAgICAgICsrX19pKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNb
X19pXSwgX01fbmFtZXNbX19pICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9
CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdv
cnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25z
dCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29u
c3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9m
YWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2Zh
Y2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3Qg
bG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBf
SW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNl
dCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAg
ICBfX2kgPCBfU19jYXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemU7ICsr
X19pKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9pbXBsLT5fTV9uYW1lc1tfX2ld
OwogICAgICAgICAgY2hhciogX19uZXcgPSBuZXcgY2hhclsyXTsKICAgICAgICAgIHN0cmNweShf
X25ldywgIioiKTsKICAgICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSBfX25ldzsKICAg
ICAgICB9CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBm
cmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAg
X0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIF9f
Y19sb2NhbGUgX1NfY19sb2NhbGU7CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3Jl
ZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2
b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFy
KiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAg
IHN0YXRpYyBfX2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Ns
b2MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUm
IF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhy
b3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBm
YWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYp
OwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNs
YXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFj
ZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZy
aWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAg
ICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19o
aWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29u
c3QgaWQmKTsKCiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9N
X2lkKCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9
IDEgKyBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBf
TV9pbmRleCAtIDE7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAg
Y29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl
JiBfX2xvYykgdGhyb3coKTsKfQojIDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3Mi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2UuaCIgMSAz
CiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2UuaCIgMwoKCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdz
X2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9J
b3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZs
YWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg
aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf
Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf
X2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1
cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+
KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZs
YWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsg
fQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19h
LCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5s
aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19G
bXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9z
X0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3Nf
Rm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9k
ZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVu
bW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAg
eyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3Nf
T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl
KHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Bl
bm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2Ep
IF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9w
ZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVy
biBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9
KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0g
X19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09w
ZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9f
YjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9f
YSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoK
ICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07Cgog
IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19J
b3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2Ep
ICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3Bl
cmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lv
c19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7
IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBf
SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+
KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK
ICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3Im
PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBf
X2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0
YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7
IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBf
SW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3Mg
aW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2Vw
dGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29u
c3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVy
ZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25z
dCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07
CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9J
b3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBo
YSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
aGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBv
Y3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2ll
bnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3Bv
aW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVy
Y2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVz
dGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9h
dGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBl
ZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0
ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0
YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMg
Y29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7
CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlw
ZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFw
cCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5t
b2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0
IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3Rh
dGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAg
IHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0
KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz
OjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0
aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtk
aXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtk
aXIoMik7CiMgMjMwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgi
IDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2
ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50
X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2b2lkCiAgICByZWdpc3Rl
cl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3Rl
ZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVhbXNpemUgX01fd2lkdGg7
CiAgICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwogICAgaW9z
dGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAg
IHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRf
Y2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAgX0F0b21pY193b3JkIF9N
X3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNr
IF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCog
X19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRl
eCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNl
KCkgeyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKCiAgICAgIGludAogICAgICBf
TV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZj
b3VudCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoK
ICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAg
dm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMK
ICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICAgIF9X
b3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQogICAgfTsKCgogICAgX1dvcmRz
IF9NX3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkX3NpemUg
PSA4OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29yZF9zaXplXTsKCgogICAg
aW50IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsKCiAgICBfV29yZHMmCiAgICBf
TV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7Cgog
ICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAg
IHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7
CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJv
b2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7Cgog
ICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0
aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAgIGlubGluZSBmbXRmbGFn
cwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoKICAgIGlubGluZSBmbXRm
bGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19v
bGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19v
bGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10Zmwp
CiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzIHw9
IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MK
ICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNrKQogICAgewogICAgICBm
bXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAmPSB+X19tYXNrOwogICAg
ICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJldHVybiBfX29sZDsKICAg
IH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9fbWFzaykgeyBfTV9mbGFn
cyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBw
cmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQg
PSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJu
IF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKHN0cmVh
bXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7CiAg
ICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgc3Rh
dGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOwoKCiAgICBs
b2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgIGlubGluZSBsb2NhbGUK
ICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0KCgogICAgc3RhdGlj
IGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGlu
dCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXpl
KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRz
KF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAgfQoKICAgIGlubGluZSB2
b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChf
X2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19p
eF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwog
ICAgfQoKCiAgICB2aXJ0dWFsIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFz
ZSgpOwoKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlv
c19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog
IGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf
X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9
CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg
aW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg
aW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9
CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0Zmll
bGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3Nf
YmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19i
YXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJh
c2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBm
aXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhl
ZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKfQojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3Mi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMSAzCiMgNDQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwoKCgoKCgoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
c3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5
cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBl
IHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBv
ZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90
eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBl
LCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0
ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUK
ICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlw
ZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKICAg
ICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplOwoKCiAgICAg
IHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoK
CgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1
cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2Jl
ZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9l
bmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9N
X2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKCgoKCiAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tfc2l6ZSA9IDE7CiAgICAgIGNoYXJfdHlwZSBf
TV9wYmFja1tfU19wYmFja19zaXplXTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2
ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFj
a19pbml0OwoKCiAgICAgIGZwb3M8X19zdGF0ZV90eXBlPiBfTV9wb3M7CgoKCgogICAgICB2b2lk
CiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2lu
aXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNpemVfdCBfX2Rpc3QgPSBfTV9pbl9lbmQgLSBf
TV9pbl9jdXI7CiAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfU19wYmFja19zaXplLCBf
X2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3Vy
LCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAg
ICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+
c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBf
TV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAog
ICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0
KQogICAgICAgICAgewoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAt
IF9NX3BiYWNrOwoKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOwogICAgICAgICAg
ICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAg
c2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAg
ICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQg
PSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1
ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAg
X01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJf
c2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAg
ICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgog
ICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAg
ICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19u
OwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9v
dXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
c3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9f
bikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9N
X291dF9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkK
ICAgICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9v
dXRfZW5kKQogICAgICAgICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsK
CiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19u
OwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVm
X3NpemUoKQogICAgICB7CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChf
TV9vdXRfY3VyKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01f
YnVmKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01f
b3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9l
bmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAg
fQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAg
IHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0g
MDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFz
ZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAgICAg
IH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykKICAg
ICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAgdGhpcy0+
aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgbG9jYWxl
CiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9p
bml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAgICAg
ICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAg
ICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1
cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vl
a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUp
OyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
c19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsg
fQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoK
ICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1z
aXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5k
KQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZl
IC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4g
PSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xl
biAtIF9fcGJhY2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0K
ICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAg
IHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAg
ICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
IHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikK
ICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAg
aW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAgICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAg
ICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9N
X2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2lu
dF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0
aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0
cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAg
ICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUKICAg
ICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0
YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAg
c3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1
Zl9zaXplKDApLCBfTV9idWZfc2l6ZV9vcHQoODE5MiksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZh
bHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwKICAgICAgX01f
b3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwgX01fb3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShp
b3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01f
YnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2Vu
ZF9zYXZlKDApLAogICAgICBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAgICBj
aGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAg
ICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAg
ICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0K
CiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9Cgog
ICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4
dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7
CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7
CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25l
eHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47
CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g
X01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1
cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsg
cmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBf
TV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19w
YmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9v
dXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYg
KCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAg
ICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmly
dHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAg
ICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOwogICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9
IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAg
dmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYo
Y2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmly
dHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz
ZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2
aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9z
X2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyBy
ZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAg
c3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hv
d21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhz
Z2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRf
dHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7
IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAg
aW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rl
b2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+dW5kZXJmbG93KCksIF9fcmV0KTsK
ICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01f
aW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBlbmRpbmcpCiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9j
dXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgaWYgKF9NX2J1Zl91bmlm
aWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgICsrX01fb3V0X2N1
cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICB2aXJ0
dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2Yo
KSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoKICAgICAgdmlydHVhbCBz
dHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRy
YWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMg
NDg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6
CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAg
ICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5
cGUmKSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHNpemVf
dAogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BiYWNrX3NpemU7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1l
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50X3R5
cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQog
ICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqKHRoaXMtPmdwdHIoKSk7CiAgICAg
ICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlz
LT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBl
IF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBf
TV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBl
OjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rl
c3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo
X19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7
CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigp
KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAg
IGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAgICAg
ICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0
ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAg
ICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAgICAg
ewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUo
MSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwog
ICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnVm
X2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAw
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0g
X19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1h
aW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9
IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNp
emUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25z
dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUg
X19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAg
b2ZmX3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19i
dWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWlu
aW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19i
dWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01f
b3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAg
ICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xl
bik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAg
IF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAg
ICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
aW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUg
aW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFtc2l6ZSBf
X2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdDsK
ICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsK
ICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1ZnNp
emUgIT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19idWZzaXplICE9IDAg
JiYgX19zYmluLT5ncHRyKCkgIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6
ZSk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAg
IF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgICAgIGlmIChf
X3h0cmN0ICE9IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9DaGFyVCBfX2J1ZlsyNTZdOwogICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
Y2hhcnNyZWFkID0gX19zYmluLT5zZ2V0bihfX2J1Ziwgc2l6ZW9mKF9fYnVmKSk7CiAgICAgICAg
ICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX2J1ZiwgX19jaGFyc3JlYWQpOwog
ICAgICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICAgICAgICBpZiAo
X194dHJjdCAhPSBfX2NoYXJzcmVhZCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19zYmlu
LT5zZ2V0YygpLCBfVHJhaXRzOjplb2YoKSkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgIHsKICAgICAgICAg
IF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgIGlmICgoX19pb3Mu
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICAgIHRocm93
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3Ry
ZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFzaWNfc3Ry
ZWFtYnVmPGNoYXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxjaGFy
PiopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJh
c2ljX2lvczx3Y2hhcl90PiYsIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiosCiAgICAgICAgICAg
ICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qKTsKCn0KIyA1MDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMiAzCiMgNTEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2lvcyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9i
YXNpY19pb3MuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFz
aWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdHJlYW1i
dWZfaXRlcmF0b3IuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJh
dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBf
Q2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgoKCgoK
CgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50X3R5cGUg
X01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpCiAg
ICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0
cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9NX3Ni
dWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9z
YnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCgogICAgICBjaGFyX3R5cGUK
ICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgaWYgKF9NX3NidWYgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9NX3NidWYtPnNidW1wYygpLCBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAg
ICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQog
ICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29sZCA9ICp0aGlzOwogICAgICAgIGlmIChf
TV9zYnVmCiAgICAgICAgICAgICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19vbGQuX01f
YyA9IF9NX3NidWYtPnNidW1wYygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgoKCiAgICAg
IGJvb2wKICAgICAgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciYgX19iKSBjb25zdAog
ICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0
KCksIF9fZW9mKTsKICAgICAgICBib29sIF9fYmVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX2IuX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jl
b2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgoKICAgIHByaXZhdGU6CiAg
ICAgIGludF90eXBlCiAgICAgIF9NX2dldCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBpbnRfdHlwZSBfX3Jl
dCA9IF9fZW9mOwogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgewogICAgICAgICAgICBp
ZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9jLCBfX2VvZikpCiAgICAgICAgICAgICAg
X19yZXQgPSBfTV9jOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZSgoX19yZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSwgX19lb2YpKQogICAg
ICAgICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0
OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1
YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9f
Yik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0
ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0
c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3Ni
dWY7CiAgICAgIGJvb2wgX01fZmFpbGVkOwoKICAgIHB1YmxpYzoKICAgICAgaW5saW5lCiAgICAg
IG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIHRocm93ICgpCiAgICAgIDog
X01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93ICgpCiAgICAgIDogX01f
c2J1ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpOwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoK
ICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29s
CiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3N0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9fYykKICAg
IHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAgICAgIF9UcmFpdHM6OmVxX2ludF90eXBl
KF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6OmVvZigpKSkKICAgICAgICBfTV9mYWlsZWQg
PSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn0KIyA0MSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvY3djdHlwZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2N3Y3R5cGUiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAxIDMgNAojIDM1ICIv
dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5j
bHVkZS93Y3R5cGUuaCIgMiAzIDQKIyA0NSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKCgoK
IyA2NCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCB3Y3R5cGVfdDsKCiMgODYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMyA0CmVudW0Kewog
IF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9f
SVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lT
d3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0gNywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2Nu
dHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAsCiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBw
ZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwg
MjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8
PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkg
Pj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93
ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwg
MjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8
PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkg
Pj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxw
aGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwg
MjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8
PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkg
Pj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGln
aXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwg
MjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8
PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkg
Pj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRp
Z2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkg
PDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdp
dCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hk
aWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAog
IF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3Bh
Y2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dz
cGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNlKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAog
IF9JU3dwcmludCA9ICgoX19JU3dwcmludCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJp
bnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dw
cmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAog
IF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3Jh
cGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dn
cmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBoKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAog
IF9JU3dibGFuayA9ICgoX19JU3dibGFuaykgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Ymxh
bmspKSA8PCAyNCkgOiAoKF9fSVN3YmxhbmspIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3di
bGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5rKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAog
IF9JU3djbnRybCA9ICgoX19JU3djbnRybCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250
cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dj
bnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJsKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAog
IF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVu
Y3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dw
dW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAog
IF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxu
dW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0pIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dh
bG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVtKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07
CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3
Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXIgKHdp
bnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3aW50X3QgX193Yykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50X3QgX193YykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlz
d3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3Ymxhbmsg
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxODYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMyA0
CmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2Mp
IHRocm93ICgpOwoKCgoKCgoKCgoKdHlwZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190
OwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoK
CmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgp9CiMgMjI4
ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCmV4dGVybiB3Y3Ry
YW5zX3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93
ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YWxwaGFfbCAod2ludF90
IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250
cmxfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf
X2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyX2wgKHdpbnRfdCBfX3dj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50X2wg
KHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgaXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv
Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0X2wg
KHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgaXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwg
X19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlw
ZV9sICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQog
ICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlcl9sICh3aW50X3QgX193
YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBl
cl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVy
biB3Y3RyYW5zX3Qgd2N0cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxl
X3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnNfbCAo
d2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6
OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVz
aW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwog
IHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2Vy
OwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1
bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlz
d3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcg
Ojp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNp
bmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvcyIgMSAz
CiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDM2
ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBl
X2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50
KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0
aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93
ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAg
ICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1h
c2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNz
cGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMg
Y29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwg
PSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBz
dGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMgNjQgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBs
b2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNrIF9fbSwg
Y2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19tLCBfX2Mp
OyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19s
bywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9f
bSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9ub3Qo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9
CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQoKICAg
ICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNo
YXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29uc3QgY2hh
ciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAgY2hhcgog
ICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQsIF9fdG8p
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0
X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1
YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f
aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGks
CiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Qg
PSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25z
dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAg
ICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7Cgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNp
emVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykg
eyB9CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2
aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25z
dCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJf
dHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hh
ciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAg
ICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQs
IGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xh
c3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByb3RlY3Rl
ZDoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wgX01fZGVs
OwogICAgICBfX3RvX3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7
CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlw
ZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19y
ZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywg
Y29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICAgICAgICAg
c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20s
IGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAg
ICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciog
X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioK
ICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9f
aGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUo
KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFs
CiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19t
LCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwg
bWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9s
b3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9f
bG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBj
aGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8Pgog
ICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBs
b2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3Y2hhcl90PiA6
IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2N0eXBlX3Qg
X193bWFza190eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2Fs
ZV9jdHlwZTsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAg
cHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90b193bWFzayhj
b25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAg
ICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20s
IGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwg
Y29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihj
aGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGks
IGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19u
YXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf
X2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFy
X3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7
CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hh
cj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgog
IGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdo
LCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAg
ICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93Kysp
XTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoK
ICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdo
KSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmICEoX01f
dGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQogICAgICAr
K19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFy
Pjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBf
X2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYg
KF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSAhPSAw
KQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hh
clQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf
X3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5
bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8Y2hhcj46
OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKICB0ZW1wbGF0ZTw+CiAg
ICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IHJlZnMpOwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0Lmgi
IDEgMwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2NvZGVjdnQuaCIgMwoK
CiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7
CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9
OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy
blQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQog
ICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAg
IHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0
ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3Vs
dAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5f
dHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90
eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAog
ICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJv
bV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190
b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0
YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19l
bmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQp
OyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs
IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBf
X3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9f
ZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5j
b2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7
IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVu
Z3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQs
IF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9
IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv
X291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl
KiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYg
X19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUq
IF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmly
dHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs
IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBl
KiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGlu
ZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5
c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhy
b3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVi
bGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVz
dWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9F
eHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29kZWN2dDsKCiAgICBw
dWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
Y29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFz
ZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQoKICAgICAgZXhwbGlj
aXQKICAgICAgY29kZWN2dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAg
dmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191
bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg
ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK
ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv
dygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxj
aGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFz
ZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IGNoYXIgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAg
dHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19s
b2NhbGUgX01fY19sb2NhbGVfY29kZWN2dDsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0g
MCk7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXpl
X3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2Rl
Y3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVy
bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg
ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9f
dG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSom
IF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0
ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21f
bmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVh
bCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBz
aXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0
aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0
PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90
eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0OwoKICAgIHB1YmxpYzoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVf
dCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19jX2xvY2FsZSBf
X2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0
ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg
Y29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9t
X25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAg
dmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAg
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAgICAg
IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIGlu
dCBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIGJvb2wg
ZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIGlu
dCBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19t
YXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0
IHRocm93KCk7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDog
cHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVi
bGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5bmFtZShjb25zdCBjaGFyKiBfX3Ms
IHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfY29kZWN2dCAh
PSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVf
Y29kZWN2dCk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQs
IF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVj
dnRfYnluYW1lKCkgeyB9CiAgICB9OwoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDEgMwoj
IDM1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0LmgiIDIgMwojIDQy
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoK
CgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3Qg
Y2hhciBfU19hdG9tc1tdOwoKICAgIGVudW0KICAgIHsKICAgICAgX01femVybywKICAgICAgX01f
ZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01fRSA9IF9NX3plcm8gKyAxMSwKICAgICAgX01fc2l6
ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0YXRpYyBib29sCiAgICBfU19mb3JtYXRfZmxvYXQo
Y29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwKICAgICAgICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7CgoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19m
b3JtYXRfaW50KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2Qs
IGNoYXIgX19tb2RsKTsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJp
dmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBf
TV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY29u
c3QgY2hhcl90eXBlKiBfTV90cnVlbmFtZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9mYWxz
ZW5hbWU7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXpl
X251bXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUg
X19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAg
eyBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAg
ICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9w
b2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAg
ICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsg
fQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5h
bWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mYWxzZW5hbWUoKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKTsKCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91
c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAg
ICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cnVl
bmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFs
IHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChf
X2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+
CiAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQK
ICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKTsK
CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxp
emVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4K
ICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9i
eW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5j
dDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9N
X2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9N
X2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZh
Y2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192
KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u
ZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90
eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
ZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5k
LCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5
cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4s
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0
X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYykgY29uc3Q7CgogICAgICBp
dGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9f
eHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxvbmcm
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs
IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQmKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
JikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw
ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAg
ICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg
IGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0
ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwK
ICAgICAgICAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdm9pZComKSBjb25zdDsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKIyA3MjEgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAg
ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5
cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf
X2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01f
Y29udmVydF9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0
OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAg
ICAgICBfTV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg
X19maWxsLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBf
VmFsdWVUIF9fdikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQo
aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywK
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBfTV93aWRlbl9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3Ms
IGludCBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws
IGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29u
c3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBf
X3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVk
OgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBf
TV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAg
IGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9u
ZV9jX2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hh
clQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdf
dHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f
aGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsg
fQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9
CgoKICAgICAgaW50CiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJU
KikgY29uc3Q7CgogICAgICBzaXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0
IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29sbGF0ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xs
YXRlKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQq
IF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJp
bmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh
clQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3Qg
X0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoK
CiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAg
Y29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBj
b25zdDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29t
cGFyZShjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+
CiAgICBzaXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90Kiwg
Y29uc3Qgd2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAg
ICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAg
ICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfZGVzdHJveV9j
X2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUo
X01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyB0aW1l
X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBt
ZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK
CiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAgcHJvdGVj
dGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAgY2hhciog
X01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9mb3JtYXQ7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZXJhX2Zvcm1hdDsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zv
cm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNvbnN0IF9DaGFyVCog
X01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAgICAgY29uc3QgX0No
YXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2EyOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNjsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNjsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
MDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMTsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTE7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQK
ICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IG5ldyBjaGFyWzJd
OwogICAgICAgIHN0cmNweShfTV9uYW1lX3RpbWVwdW5jdCwgIkMiKTsKICAgICAgICBfTV9pbml0
aWFsaXplX3RpbWVwdW5jdCgpOwogICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVw
dW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g
MCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVf
dGltZXB1bmN0ID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAgICBzdHJjcHkoX01f
bmFtZV90aW1lcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19j
bG9jKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVf
dCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRt
KiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9D
aGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRl
X2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0K
CiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkg
Y29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAg
ICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg
ICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBf
X2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBj
b25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg
ICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewogICAg
ICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAg
ICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAg
ICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2Owog
ICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01f
ZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAg
ICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5X2Ey
OwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBfTV9k
YXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9
IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAg
IHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAg
ICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhzWzFd
ID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAg
X19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgw
NTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNbNl0g
PSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAgICBf
X21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEw
OwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNbMTFd
ID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJicmV2
aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21v
bnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2Ew
MjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRoc1sz
XSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAg
ICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9N
X21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBf
X21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRo
X2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19tb250
aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpCiAgICAgIHsKICAgICAgICBkZWxldGUgW10gX01fbmFt
ZV90aW1lcHVuY3Q7CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1l
cHVuY3QpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5j
dChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVt
cGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9u
ZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01f
aW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAg
ICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0
IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3Qgd2NoYXJf
dCoKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0
ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1l
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3Rp
bWVwdW5jdDx3Y2hhcl90Pjo6X01fcHV0KHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3Qq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bSopIGNvbnN0OwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9DaGFyVCogX190aW1lcHVuY3Q8
X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFj
ZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKICAgICAgZGF0ZW9yZGVy
CiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29y
ZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVr
ZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwg
ZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dG0qIF9fdG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90
eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoKICAgICAgdm9pZAogICAgICBf
TV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBf
X21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNp
emVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChp
dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25z
dDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5
bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBp
dGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4o
X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0
X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3Jl
ZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3Qg
X0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qg
dG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21v
ZCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkKICAg
ICAgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAg
ICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0
aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMg
dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciogLCBzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCiAg
ICAgIHsgfTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5
bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7CiAgcHVibGljOgogICAg
ZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVj
dCBwYXR0ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBf
U19kZWZhdWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0
X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25l
eXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpbnRsID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6
CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjaGFyX3R5cGUgX01fZGVjaW1h
bF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fcG9zaXRp
dmVfc2lnbjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBp
bnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0
dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9u
ZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAg
eyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9u
ZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXpl
X21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1h
bF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsg
fQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91
cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAg
IHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVf
c2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoK
ICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGln
aXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAg
ICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNp
bWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNf
c2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmly
dHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n
cm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJv
bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFs
IHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRv
X25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9
CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9f
cG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAg
IHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5j
dDxfQ2hhclQsIF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
SW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAg
dGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAg
dGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7Cgog
IHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRp
YWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4K
ICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5
cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlw
dW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9u
ZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAg
IHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlw
dW5jdChfX2NfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAg
bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nf
bG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKik7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wg
X0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0PF9D
aGFyVCwgX0ludGw+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5j
dDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnlu
YW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5j
dDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2Nh
bGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0
cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Rf
YnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
ICBleHBsaWNpdAogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19z
LCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJy
LCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBp
dGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2Vyciwg
X19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9n
ZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUg
X19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9wdXQg
OiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5
cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lu
dGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBjb25z
dCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlw
ZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3Rl
ZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21lc3NhZ2VzOwoKCiAgICAgIGNoYXIq
IF9NX25hbWVfbWVzc2FnZXM7CgoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCkKICAg
ICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2Fn
ZXMgPSBuZXcgY2hhclsyXTsKICAgICAgICBzdHJjcHkoX01fbmFtZV9tZXNzYWdlcywgIkMiKTsK
ICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2NfbG9jYWxlOwogICAgICB9CgoKICAg
ICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIq
IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAg
ICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAx
XTsKICAgICAgICBzdHJjcHkoX01fbmFtZV9tZXNzYWdlcywgX19zKTsKICAgICAgICBfTV9jX2xv
Y2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgIH0KCiAgICAg
IGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3Qg
bG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9f
bG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hh
cj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlw
ZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0
cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9f
c2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19j
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAgICAgICAgIGRl
bGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOwogICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9N
X2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAg
ICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBp
bnQsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZv
aWQKICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01f
Y29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoK
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQq
PihfX21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9j
b252ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXpl
X3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczNiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAg
ICByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1w
bGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50
LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgd3N0cmluZwog
ICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0
cmluZyYpIGNvbnN0OwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hh
clQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmlu
ZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKikgY29uc3QKICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBf
X2xvYyk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3Nh
Z2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3Qg
YmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QKICAgIHsgcmV0dXJuIDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0No
YXJUPjo6c3RyaW5nX3R5cGUKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBp
bnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYg
X19kZmF1bHQpIGNvbnN0CiAgICB7IHJldHVybiBfX2RmYXVsdDsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRh
bG9nKSBjb25zdAogICAgeyB9CiMgMTc1NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNz
YWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBt
ZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGRlbGV0ZSBbXSBfTV9uYW1l
X21lc3NhZ2VzOwogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBuZXcgY2hhcltzdHJsZW4oX19z
KSArIDFdOwogICAgICAgIHN0cmNweShfTV9uYW1lX21lc3NhZ2VzLCBfX3MpOwogICAgICAgIF9T
X2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAgIF9TX2NyZWF0
ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkKICAgICAgeyB9CiAg
ICB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19j
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNw
cmludChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwo
X0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6YWxwaGEsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjpwdW5jdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykK
ICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
c2U6OnhkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
YWxudW0sIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzZ3JhcGgoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBo
LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQK
ICAgIHRvdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0KfQojIDQyICIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19p
b3MgOiBwdWJsaWMgaW9zX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAg
ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0No
YXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0No
YXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAg
IHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBl
OwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiog
X01fdGllOwogICAgICBtdXRhYmxlIGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJv
b2wgX01fZmlsbF9pbml0OwogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X01fc3RyZWFtYnVmOwoKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAg
ICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0
X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBvcGVyYXRvciB2b2lkKigpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lv
cyo+KHRoaXMpOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICB2b2lkCiAgICAg
IGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpOwoKICAgICAgdm9pZAogICAgICBzZXRz
dGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgp
IHwgX19zdGF0ZSk7IH0KCiAgICAgIGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJkc3RhdGUoKSA9PSAwOyB9CgogICAgICBib29sCiAgICAgIGVvZigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAg
IGJvb2wKICAgICAgZmFpbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkg
JiAoYmFkYml0IHwgZmFpbGJpdCkpICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgYmFkKCkgY29u
c3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQoKICAg
ICAgaW9zdGF0ZQogICAgICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhj
ZXB0aW9uOyB9CgogICAgICB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkK
ICAgICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNs
ZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBi
YXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jh
c2UoKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJh
c2ljX2lvcygpIHsgfQoKCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAg
ICAgdGllKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGllOyB9CgogICAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAg
ICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zjsg
fQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJhc2ljX2lvcyYK
ICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKTsKCiAgICAgIGNoYXJfdHlwZQog
ICAgICBmaWxsKCkgY29uc3QKICAgICAgewogICAgICAgIGlmICghX01fZmlsbF9pbml0KQogICAg
ICAgICAgewogICAgICAgICAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKICAgICAgICAg
ICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX01fZmls
bDsKICAgICAgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCiAg
ICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgX01f
ZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9jYWxl
CiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBuYXJy
b3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5cGUK
ICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJhc2lj
X2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAgIF9N
X2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikgY29uc3QKICAgICAgewogICAg
ICAgIGlmICghX19mKQogICAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICAgIHJldHVy
biB0cnVlOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBs
b2NhbGUmIF9fbG9jKTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+OjpjbGVhcihpb3N0YXRlIF9fc3RhdGUpCiAgICB7CiAgICAgIGlmICh0aGlz
LT5yZGJ1ZigpKQogICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAgIGVs
c2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAgICAg
IGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICBfX3Ro
cm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRp
b24iKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9
IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgdGhpcy0+Y2xl
YXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19y
aHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9zaXpl
IDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPwogICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dv
cmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBf
X3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9NX2FkZF9y
ZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwogICAgICBp
ZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBb
XSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV9kaXNw
b3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19jYjsKICAgICAgZm9yIChp
bnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9zaXplOyArK19faSkKICAgICAgICBfX3dv
cmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xv
Y2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAg
ICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX3dvcmQgPSBfX3dvcmRzOwogICAgICBf
TV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAgICB0aGlzLT5mbGFncyhfX3Jo
cy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMt
PnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUo
KSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlv
bnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRf
ZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsK
ICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
ZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+bmFycm93KF9fYywgX19kZmF1bHQp
OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgewogICAgICBjaGFyX3R5cGUgX19yZXQgPSBj
aGFyX3R5cGUoKTsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAg
X19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGxvY2Fs
ZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgIGlvc19i
YXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlm
ICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19s
b2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoK
ICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9NX2lvc19s
b2NhbGUpOwogICAgICBfTV90aWUgPSAwOwojIDE1OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9iYXNpY19pb3MudGNjIiAzCiAgICAgIF9NX2ZpbGwgPSBfQ2hhclQoKTsKICAgICAg
X01fZmlsbF9pbml0ID0gZmFsc2U7CgogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0OwogICAg
ICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3NiID8g
Z29vZGJpdCA6IGJhZGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9N
X2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBpZiAoaGFzX2Zh
Y2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8
X19jdHlwZV90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mY3R5cGUgPSAwOwoK
ICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51
bXB1dCA9ICZ1c2VfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAg
ICAgX01fZm51bXB1dCA9IDA7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19s
b2MpKQogICAgICAgIF9NX2ZudW1nZXQgPSAmdXNlX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9j
KTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZudW1nZXQgPSAwOwogICAgfQoKCgoKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zPGNoYXI+OwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGJhc2ljX2lvczx3Y2hhcl90PjsKCn0KIyAyMDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDUyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9p
b3MiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9vc3RyZWFtIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5
cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog
ICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgeyB0aGlz
LT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9
CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3Bm
KShfX29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsKCgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIF9fbik7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChib29sIF9fbik7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChzaG9ydCBfX24pCiAgICAgIHsKICAgICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2Vm
aWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jh
c2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4g
dGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQogICAg
ICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9f
bikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpbnQgX19uKQog
ICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAm
IGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8
fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8
PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOwogICAgICAgIGVsc2UKICAg
ICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwog
ICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBp
bnQgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KF9fbikpOyB9CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwobG9uZyBsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KGZsb2F0IF9fZikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNf
Y2FzdDxkb3VibGU+KF9fZikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PChsb25nIGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwoY29uc3Qgdm9pZCogX19wKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBwdXQoY2hhcl90eXBlIF9fYyk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgd3Jp
dGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBmbHVzaCgpOwoKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxwKCk7Cgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3AocG9zX3R5cGUpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIHNlZWtwKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CiAgICB9
OwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNs
YXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CgogICAgICBi
b29sIF9NX29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX01fb3M7Cgog
ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAgICAgIHsKCiAgICAgICAgaWYg
KF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAhdW5jYXVnaHRfZXhjZXB0aW9u
KCkpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3MucmRidWYoKSAmJiBfTV9vcy5y
ZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAgX01fb3Muc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIG9wZXJhdG9yIGJvb2wo
KQogICAgICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBf
Q2hhclQgX19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsgcmV0dXJu
IChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpOwoKCiAgdGVtcGxhdGU8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBf
X2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNp
Z25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihf
X2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCogX19zKTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u
c3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7
IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19vcy5wdXQoX19vcy53aWRlbign
XG4nKSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZHMoYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5wdXQoX0NoYXJUKCkp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNoKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MuZmx1c2goKTsgfQoKfQoKCgoK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9vc3RyZWFtLnRjYyIgMSAzCiMg
MzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvb3N0cmVhbS50Y2MiIDMKCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbG9jYWxlIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvbG9jYWxlIiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvY2Vycm5vIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY2Vy
cm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vy
cm5vLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20v
ZXJybm8uaCIgMSAzIDQKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzIDQKIyAy
NiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzIDQKIyAzOCAiL3Vzci9pbmNsdWRlL2Jp
dHMvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5v
LmgiIDIgMyA0CiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnBy
b2dyYW1faW52b2NhdGlvbl9uYW1lLCAqcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CgoK
Cn0KIyA2OSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAp0eXBlZGVmIGludCBlcnJvcl90Owoj
IDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jZXJybm8iIDIgMwojIDM5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvY21hdGgiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMgNAoj
IDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzIDQKIyAzOCAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIg
MSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzIDQKdHlwZWRlZiBsb25n
IGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyA2NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMyA0CiMgNTMgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhjYWxscy5oIiAzIDQKCgpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
YXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19jb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBkb3VibGUgdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3RhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54
LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUg
X194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fj
b3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGV4
cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBv
bmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpf
X2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBp
bnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9f
eCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19sb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChk
b3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2Rm
IChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91Ymxl
IGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
ZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19sb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBl
eHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRl
cm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFi
cyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs
ZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBf
X2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50
IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0
IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBkb3VibGUgajEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5
MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEg
KGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAo
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1t
YSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2ln
bmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19u
ZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRv
dWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3Vi
bGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRo
cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Jv
dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91Ymxl
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91Ymxl
IF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQg
Kl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91
YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmlu
dCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUg
X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcg
aW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRp
bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGlt
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXgg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lm
eSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3Vi
bGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyA2
NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyA4OCAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMyA0CiMgNTMgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzIDQKCgpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3Nm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkg
dGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54
LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZy
ZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9n
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBwb3cxMGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxv
ZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBm
bG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpl
eHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZs
b2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoK
CmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19m
YWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf
X2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9h
dCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19k
cmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2ln
bmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2Fu
ZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19j
b25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBp
bnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAo
aW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhy
b3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
eTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYgKGlu
dCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv
YXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChmbG9h
dCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxv
YXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3Np
Z25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpf
X3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0
b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gs
IGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGlu
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBm
bG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpl
eHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5k
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9h
dCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBs
b25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGlu
dCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRm
IChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9h
dCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19u
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikg
dGhyb3cgKCk7CiMgODkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMgMTA5ICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAz
IDQKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMgNAoKCmV4dGVybiBsb25n
IGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0
YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwg
KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBs
b25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19jb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSBzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFu
aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rhbmhs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0
aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19hdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9f
eCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwg
KGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2xvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
bW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpf
X2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Zmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2lu
ZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2Nv
bnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2owbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIHkxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X195MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50
LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBs
b25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVy
biBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBy
ZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91
YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwg
KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2Js
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3NjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVv
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVy
biBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np
ZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91
YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24p
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyAxMTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg
MyA0CiMgMTI1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuIGludCBzaWduZ2FtOwoj
IDE2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CmVudW0KICB7CiAgICBGUF9OQU4sCgogICAg
RlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9S
TUFMCgogIH07CiMgMjUyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKdHlwZWRlZiBlbnVtCnsK
ICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9
IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVS
U0lPTjsKIyAyNzUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNApzdHJ1Y3QgX19leGNlcHRpb24K
CgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAg
IGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVy
ciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMyA0
CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBpbnQK
X19zaWduYml0ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7
IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7IF9fZjogX194IH07CiAgcmV0dXJuIF9fdS5f
X2kgPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25iaXQgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsK
ICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSBfX3UgPSB7
IF9fZDogX194IH07CiAgcmV0dXJuIF9fdS5fX2lbMV0gPCAwOwp9Cl9faW5saW5lIGludApfX3Np
Z25iaXRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9u
IHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9IF9fdSA9IHsgX19sOiBfX3ggfTsKICBy
ZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7Cn0KIyAyOTEgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSB0aHJv
dyAoKTsgX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVy
biBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5l
IGZsb2F0IF9fc2duZiAoZmxvYXQpIHRocm93ICgpOyBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZs
b2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAg
PyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDog
LTEuMCk7IH0KIyA0MjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5s
aW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDog
Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4g
X192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0
KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9u
ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFs
dWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0K
X19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChf
X3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2Qg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhc
blx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUi
IChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZt
b2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVh
eFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAi
dSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBk
b3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZw
cmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1
ZTsgfQojIDQ0MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUg
ZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVz
dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg
KF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f
ICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0
OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpf
X2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0
IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCl9f
aW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0
aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAo
KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUg
ZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNs
IChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9CiMgNDY3ICIvdXNyL2lu
Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUgYXRhbiAoZG91Ymxl
IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3Qo
MSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg
cmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkg
OiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX3Nn
bjFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBk
b3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9IHsgX194bGQ6IF9feCB9
OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7IF9fbi5fX3hp
WzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1cm4gX19uLl9feGxkOyB9CiMg
NDkzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUg
Zmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0i
IChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBm
bG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVu
c2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6
ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20g
X192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRp
bGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xh
dGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s
aW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f
Y3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRp
bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYp
IHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp
KTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJu
IF9fdmFsdWU7IH0KIyA1MDQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9f
aW5saW5lIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0
Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAw
OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20g
X192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7
IH0gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBf
X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgi
Zm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4
MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsg
X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3Zh
bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h
c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j
dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt
IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOyByZXR1cm4gX192YWx1ZTsgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu
ZS5oIiAzIDQKX19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KSB0aHJv
dyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9f
ICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJs
ZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNTQwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
aW5saW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4w
IC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBf
X3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5
bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41
ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBl
bHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7
IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4w
IC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBf
X3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5
bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9f
dmFsdWU7IH0KIyA1NTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5s
aW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9f
c3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9
IF9faW5saW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kg
LyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194
KSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChs
b2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9f
eSkgKiBfX3NnbjFsIChfX3gpKTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICog
X19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxpbmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gp
IHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3Nx
cnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4w
KSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9CgoKX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3Vi
bGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9f
eCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBf
X3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41
ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9
IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICog
bG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoK
CgpfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
IHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUgZmxv
YXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0
bCAoX194ICogX194ICsgX195ICogX195KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3Nx
cnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91
YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6
ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFs
dWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFs
dWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUg
bG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gp
KTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1ODQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu
aCIgMyA0Cl9faW5saW5lIGZsb2F0CmxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KSB0aHJvdyAo
KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi
ZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkg
X195KSk7IHJldHVybiBfX3ZhbHVlOwp9CgpfX2lubGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxv
bmcgZG91YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQoj
IDYwOCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgbG9uZyBp
bnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBf
X2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0
IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludAps
cmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNt
X18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChf
X3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19h
c21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIg
KF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KIyA2MzEgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBf
X3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194
KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludAps
bHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVz
OyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMp
IDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25n
IGxvbmcgaW50CmxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9u
ZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAi
PW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVz
Owp9CgoKCgoKCgpfX2lubGluZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJl
cmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQi
ICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQp
IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp
bmUgZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIi
IDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAo
X195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVt
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIg
ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGls
ZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIg
OiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChf
X3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjY2ICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93
ICgpCnsKICByZXR1cm4gKF9fZXh0ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3Vi
bGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwg
MHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQojIDM2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzIDQKIyA0MjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAp9CiMgNTIgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2NtYXRoIiAyIDMKIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvY21hdGgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9U
cCBfX2NtYXRoX3Bvd2VyKF9UcCwgdW5zaWduZWQgaW50KTsKCiAgaW5saW5lIGRvdWJsZQogIGFi
cyhkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KCiAgaW5saW5l
IGZsb2F0CiAgYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsg
fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9f
eCkgeyByZXR1cm4gOjphY29zZihfX3gpOyB9CgoKCgoKICB1c2luZyA6OmFjb3M7CgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChf
X3gpOyB9CgoKCgoKICB1c2luZyA6OmFzaW47CgoKICBpbmxpbmUgZmxvYXQKICBhc2luKGZsb2F0
IF9feCkgeyByZXR1cm4gOjphc2luZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgYXNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKCgoKCiAg
dXNpbmcgOjphdGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbihmbG9hdCBfX3gpIHsgcmV0dXJu
IDo6YXRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBk
b3VibGUgX194KSB7IHJldHVybiA6OmF0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjI7
CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZXR1cm4g
OjphdGFuMmYoX195LCBfX3gpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4y
KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ks
IF9feCk7IH0KCgoKCgoKICB1c2luZyA6OmNlaWw7CgoKICBpbmxpbmUgZmxvYXQKICBjZWlsKGZs
b2F0IF9feCkgeyByZXR1cm4gOjpjZWlsZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQoKCgoK
CiAgdXNpbmcgOjpjb3M7CgogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpCiAgeyByZXR1
cm4gX19idWlsdGluX2Nvc2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9u
ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCiAgdXNpbmcg
Ojpjb3NoOwoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y29z
aGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUg
X194KSB7IHJldHVybiA6OmNvc2hsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZXhwOwoKCiAgaW5s
aW5lIGZsb2F0CiAgZXhwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpleHBmKF9feCk7IH0KCgoKCgoK
ICBpbmxpbmUgbG9uZyBkb3VibGUKICBleHAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmV4
cGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpmYWJzOwoKICBpbmxpbmUgZmxvYXQKICBmYWJzKGZs
b2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFi
c2woX194KTsgfQoKICB1c2luZyA6OmZsb29yOwoKCiAgaW5saW5lIGZsb2F0CiAgZmxvb3IoZmxv
YXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgZmxvb3IobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmZsb29ybChfX3gpOyB9CgoK
CgoKICB1c2luZyA6OmZtb2Q7CgoKICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0IF9feCwgZmxv
YXQgX195KSB7IHJldHVybiA6OmZtb2RmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVy
biA6OmZtb2RsKF9feCwgX195KTsgfQoKCgoKCgogIHVzaW5nIDo6ZnJleHA7CgoKICBpbmxpbmUg
ZmxvYXQKICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBmKF9f
eCwgX19leHApOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZnJleHAobG9uZyBkb3Vi
bGUgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoK
CgogIHVzaW5nIDo6bGRleHA7CgoKICBpbmxpbmUgZmxvYXQKICBsZGV4cChmbG9hdCBfX3gsIGlu
dCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgbGRleHAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJu
IDo6bGRleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsb2c7CgoKICBpbmxpbmUg
ZmxvYXQKICBsb2coZmxvYXQgX194KSB7IHJldHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCgogIGlu
bGluZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nbChf
X3gpOyB9CgoKCgoKICB1c2luZyA6OmxvZzEwOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxv
YXQgX194KSB7IHJldHVybiA6OmxvZzEwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgbG9nMTAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwbChfX3gpOyB9CgoK
CgoKICB1c2luZyA6Om1vZGY7CgoKICBpbmxpbmUgZmxvYXQKICBtb2RmKGZsb2F0IF9feCwgZmxv
YXQqIF9faXB0cikgeyByZXR1cm4gOjptb2RmZihfX3gsIF9faXB0cik7IH0KIyAzNzUgIi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9k
Zihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwo
X194LCBfX2lwdHIpOyB9CiMgMzg4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jbWF0aCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93X2hlbHBl
cihfVHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAgICAgID8g
X1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9wb3dlcihf
X3gsIF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZs
b2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgeyByZXR1cm4gOjpwb3dsKF9feCwgX195KTsgfQoKCgoKCgogIGlubGluZSBkb3VibGUKICBw
b3coZG91YmxlIF9feCwgaW50IF9faSkKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kp
OyB9CgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4g
X19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9u
ZyBkb3VibGUgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7
IH0KCiAgdXNpbmcgOjpzaW47CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyBy
ZXR1cm4gX19idWlsdGluX3NpbmYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4o
bG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNp
bmcgOjpzaW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6
c2luaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3Vi
bGUgX194KSB7IHJldHVybiA6OnNpbmhsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6c3FydDsKCiAg
aW5saW5lIGZsb2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRm
KF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpCiAg
eyByZXR1cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgoKICBpbmxp
bmUgZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFu
bChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnRhbmg7CgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZs
b2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgdGFuaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoK
fQoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2Yg
KF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChf
X2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lm
eWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0
dXJlX2lzZmluaXRlKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChm
bG9hdCkgPyBfX2Zpbml0ZWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUp
ID8gX19maW5pdGUgKF9fZikgOiBfX2Zpbml0ZWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIChz
aXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzaW5mZiAoX19mKSA6IHNpemVvZiAo
X19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzaW5mIChfX2YpIDogX19pc2luZmwgKF9fZikp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbmFu
KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lz
bmFuZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzbmFuIChf
X2YpIDogX19pc25hbmwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgX19jYXB0dXJlX2lzbm9ybWFsKF9UcCBfX2YpIHsgcmV0dXJuICgoc2l6ZW9mIChfX2Yp
ID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9
PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChf
X2YpKSA9PSBGUF9OT1JNQUwpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgX19jYXB0dXJlX3NpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBz
aXplb2YgKGZsb2F0KSA/IF9fc2lnbmJpdGYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9m
IChkb3VibGUpID8gX19zaWduYml0IChfX2YpIDogX19zaWduYml0bCAoX19mKSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNncmVhdGVyKF9UcCBf
X2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIgKF9fZjEsIF9f
ZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVf
aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRp
bl9pc2dyZWF0ZXJlcXVhbCAoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJl
dHVybiBfX2J1aWx0aW5faXNsZXNzIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAg
X19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzZXF1YWwgKF9fZjEsIF9fZjIpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNz
Z3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lzbGVz
c2dyZWF0ZXIgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBp
bnQKICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsg
cmV0dXJuIF9fYnVpbHRpbl9pc3Vub3JkZXJlZCAoX19mMSwgX19mMik7IH0KfQojIDU4MCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY21hdGgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsg
cmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBpc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNm
aW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzaW5m
KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2luZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJl
X2lzbmFuKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc25v
cm1hbChfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNub3JtYWwoX19mKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIHNpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4g
X19jYXB0dXJlX3NpZ25iaXQoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bnQKICAgIGlzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9p
c2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50
CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2Nh
cHR1cmVfaXNncmVhdGVyZXF1YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBpc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2Nh
cHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19j
YXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGludAogICAgaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJl
dHVybiBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikK
ICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmZwY2xhc3NpZnk7CiAgdXNpbmcgX19nbnVf
Y3h4Ojppc2Zpbml0ZTsKICB1c2luZyBfX2dudV9jeHg6OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4
eDo6aXNuYW47CiAgdXNpbmcgX19nbnVfY3h4Ojppc25vcm1hbDsKICB1c2luZyBfX2dudV9jeHg6
OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4
Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzczsKICB1c2luZyBfX2du
dV9jeHg6OmlzbGVzc2VxdWFsOwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1
c2luZyBfX2dudV9jeHg6OmlzdW5vcmRlcmVkOwp9CgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBf
X24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxl
IChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAg
ICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9Cgog
ICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9jbWF0aCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxl
X2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9saW1pdHMi
IDEgMwojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9saW1pdHMiIDMKIyAxNTAgIi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVt
IGZsb2F0X3JvdW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAg
cm91bmRfdG93YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3Vu
ZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMK
ICB9OwoKICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWlu
YXRlID0gLTEsCiAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQog
IH07CgoKCgogIHN0cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAg
c3RhdGljIGNvbnN0IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0
c19iYXNlCiAgICB7CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5k
X2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0
YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21p
bigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wg
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJv
b2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGlj
IGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMg
Ym9vbCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSBmYWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKCgoY2hhcikoLTEpIDwgMCkg
PyAoY2hhcikxIDw8IChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgOiAoY2hh
cikwKTsgfQogICAgICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgo
KGNoYXIpKC0xKSA8IDApID8gKChjaGFyKTEgPDwgKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIp
KC0xKSA8IDApKSkgLSAxIDogfihjaGFyKTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8
IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAo
KGNoYXIpKC0xKSA8IDApOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsg
fQogICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNo
YXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2ln
bmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAtMTI3IC0gMTsgfQogICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0g
KChzaWduZWQgY2hhcikoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gKChzaXplb2Yoc2lnbmVkIGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAq
IDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7
IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2ln
bmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVk
IGNoYXIpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQz
IC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKCgod2NoYXJfdCkoLTEpIDwgMCkgPyAod2NoYXJf
dCkxIDw8IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgOiAod2No
YXJfdCkwKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuICgoKHdjaGFyX3QpKC0xKSA8IDApID8gKCh3Y2hhcl90KTEgPDwgKHNpemVvZih3Y2hhcl90
KSAqIDggLSAoKHdjaGFyX3QpKC0xKSA8IDApKSkgLSAxIDogfih3Y2hhcl90KTApOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hh
cl90KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVv
Zih3Y2hhcl90KSAqIDggLSAoKHdjaGFyX3QpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAoKHdjaGFyX3QpKC0xKSA8IDApOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIHdjaGFyX3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgd2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFy
X3QgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBz
dGF0aWMgd2NoYXJfdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3Qo
KTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gLTMyNzY3IC0gMTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSAoc2l6ZW9mKHNob3J0KSAqIDggLSAoKHNob3J0KSgtMSkgPCAwKSk7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihzaG9ydCkgKiA4IC0gKChzaG9y
dCkoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np
Z25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsg
fQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
aG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3ICogMlUgKyAxOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgc2hvcnQp
ICogOCAtICgodW5zaWduZWQgc2hvcnQpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDggLSAoKHVuc2lnbmVkIHNo
b3J0KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
aW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gLTIxNDc0ODM2
NDcgLSAxOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAy
MTQ3NDgzNjQ3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YoaW50
KSAqIDggLSAoKGludCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gKChzaXplb2YoaW50KSAqIDggLSAoKGludCkoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg
aW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGlu
dCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAg
ICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDcgKiAyVSAr
IDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBp
bnQpICogOCAtICgodW5zaWduZWQgaW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWduZWQgaW50
KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
MCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
b3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gLTIxNDc0ODM2NDdMIC0gMTsgfQogICAgICBzdGF0
aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDdMOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YobG9uZykgKiA4IC0gKChsb25nKSgt
MSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25n
KSAqIDggLSAoKGxvbmcpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGlj
IGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0wgKiAyVUwg
KyAxOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQg
bG9uZykgKiA4IC0gKCh1bnNpZ25lZCBsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDggLSAoKHVuc2lnbmVk
IGxvbmcpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9u
Zz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC05MjIz
MzcyMDM2ODU0Nzc1ODA3TEwgLSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhy
b3coKQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihsb25nIGxvbmcpICogOCAtICgobG9uZyBsb25n
KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihs
b25nIGxvbmcpICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBs
b25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmlu
aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpICogOCAtICgodW5zaWdu
ZWQgbG9uZyBsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAoKHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyBsb25n
KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
bG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxv
YXQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAg
c3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhG
OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDEuMTkyMDkyOTBlLTdGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMC41RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAoLTEyNSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAoLTM3KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eQogICAgICAgID0gX19idWlsdGluX2h1Z2VfdmFsZiAoKSAv
IDIgPT0gX19idWlsdGluX2h1Z2VfdmFsZiAoKTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTgogICAgICAgID0gX19idWlsdGluX25hbmYgKCIiKSAhPSBfX2J1aWx0aW5fbmFu
ZiAoIiIpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19x
dWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bQogICAgICAgID0gMS40MDEyOTg0NmUtNDVGID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWls
dGluX2h1Z2VfdmFsZiAoKTsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuZiAoIiIpOyB9CiAgICAgIHN0YXRpYyBmbG9h
dCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2Yg
KCIiKTsgfQogICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMS40MDEyOTg0NmUtNDVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkKICAgICAgICA9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0g
PT0gZGVub3JtX3ByZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRl
PD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAg
ICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4
NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRp
YyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuNTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEwMjEpOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gKC0zMDcpOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkKICAgICAgICA9
IF9fYnVpbHRpbl9odWdlX3ZhbCAoKSAvIDIgPT0gX19idWlsdGluX2h1Z2VfdmFsICgpOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOCiAgICAgICAgPSBfX2J1aWx0aW5fbmFu
ICgiIikgIT0gX19idWlsdGluX25hbiAoIiIpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogICAgICAgID0gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQg
PyBkZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7IH0KICAgICAgc3Rh
dGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9u
YW4gKCIiKTsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5zICgiIik7IH0KICAgICAgc3RhdGljIGRvdWJsZSBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMy
NDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiAgICAgICAgPSBoYXNfaW5m
aW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG9fbmVhcmVzdDsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8bG9uZyBkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0
YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1
MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBl
cHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0x
OUw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwLjVMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
ICgtMTYzODEpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gKC00OTMx
KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkKICAgICAgICA9IF9fYnVpbHRpbl9odWdlX3ZhbGwgKCkgLyAyID09
IF9fYnVpbHRpbl9odWdlX3ZhbGwgKCk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4KICAgICAgICA9IF9fYnVpbHRpbl9uYW5sICgiIikgIT0gX19idWlsdGluX25hbmwgKCIi
KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBoYXNfcXVpZXRf
TmFOOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0KICAg
ICAgICA9IDMuNjQ1MTk5NTMxODgyNDc0NjAyNTNlLTQ5NTFMID8gZGVub3JtX3ByZXNlbnQgOiBk
ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MKICAg
ICAgICA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3co
KQogICAgICB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWxsICgpOyB9CiAgICAgIHN0YXRpYyBs
b25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9u
YW5sICgiIik7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5zbCAoIiIpOyB9CiAgICAgIHN0YXRpYyBs
b25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjY0NTE5OTUz
MTg4MjQ3NDYwMjUzZS00OTUxTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
CiAgICAgICAgPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09
IGRlbm9ybV9wcmVzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKICAgIH07CgoKCgoKfQojIDQ0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9f
Y3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNz
IHR5cGVfaW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7Cgog
IHByaXZhdGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAg
ICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNo
YXIgKl9fbmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNo
YXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25zdCBjaGFyKiBu
YW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDEwMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYg
X19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0KICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4g
X19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB0eXBl
X2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CgoK
ICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7CgogICAg
dmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwg
Ym9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhy
X29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0
OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFz
c190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMg
ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KCgogICAg
dmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlwZWlkIDog
cHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkg
eyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0NiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAg
IGxvY2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAg
IF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9y
ZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4g
bG9jYWxlKF9fdG1wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9y
KCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3MyKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hh
clQ+IF9fY29sbGF0ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRl
ID0gdXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xs
YXRlLmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBf
X3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsK
ICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNl
dCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kg
PCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAg
ICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFj
ZXQmPigqX19mYWNldHNbX19pXSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7
CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFj
ZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChf
X2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9h
dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29u
c3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7
CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0
eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsK
ICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxf
Q2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBl
LndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRl
bignLScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVn
OwogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190
eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAg
ICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAg
ICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgog
ICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96
ZXJvXSk7CiAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3Ry
YWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewog
ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7
CiAgICAgICAgfQogICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9f
eHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoK
CiAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hh
cl90eXBlIF9fd2F0b21zW19fbGVuXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1Nf
YXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7
CiAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9f
ZGVjID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGlu
ZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAg
IGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19z
ZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNf
c2VwKCk7CgogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAs
IF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hh
cl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg
ICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICAr
K19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAg
ICAgICAgICAgICAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19z
ZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykg
JiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91
bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBz
dGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAg
ICAgICAgICAgX194dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICAgIF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZSBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAg
ICAgICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAg
ICAgICAgICAgICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsK
CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5u
YXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAg
ICAgICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAg
ICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyAr
PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0
cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAg
ICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcu
c2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAg
ICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAg
ICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcp
KQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAg
ICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25z
dAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsK
ICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9D
aGFyVD4gPihfX2xvYyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0g
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxk
ID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19i
YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxz
ZQogICAgICAgIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBl
LndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRl
bignLScpOwoKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5k
KQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIo
KSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRv
bXNbX01femVyb10pOwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbign
eCcpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAg
ICBpZiAoX19iYXNlID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJv
ID0gZmFsc2U7CiAgICAgICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8p
ICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9
CiAgICAgICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAg
ICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAg
ICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAg
ICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAg
ICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNl
ID0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZSBpZiAoX19iYXNlID09IDE2KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBl
OjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkK
ICAgICAgICAgICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAg
ICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl
Zyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNp
emVfdCBfX2xlbjsKICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3Np
emU7CiAgICAgIGVsc2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUg
X193YXRvbXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21z
ICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAg
IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9f
Y2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9
IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwog
ICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsK
CgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUo
KSkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAt
IF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBf
cG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3Jv
dXBpbmcpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsK
ICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3Vw
aW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0
aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGlu
ZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAg
IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0Owog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNv
bnN0CiAgICB7CgogICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhh
KSkKICAgICAgICB7CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19i
YXNlOwogICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwog
ICAgICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19j
X2xvY2FsZSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpICYmIF9fdWwgPD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190
cmFpdHNfdHlwZTsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp
bmdfdHlwZTsKCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAg
ICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hh
clQ+ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25w
LnRydWVuYW1lKCk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25w
LmZhbHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVl
LmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5j
X3N0cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0g
MTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsK
CiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAg
ICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFs
c2U7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25d
KSA6IGZhbHNlOwogICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190
cnVlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv
ZmJpdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQg
X19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry
KCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsK
ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9l
eHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAg
ICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry
KCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8
dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IGludCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i
YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2Nv
bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh
c2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYg
X191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3Yg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBf
X3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRf
dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
LCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3Ry
aW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2lu
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29u
dmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNl
KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192
KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgz
Mik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBf
X2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg
IF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRy
Yy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAg
ICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0g
X01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAg
ICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUp
OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikg
Y29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwog
ICAgICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRt
YXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50
ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpo
ZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAg
ICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo
KSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjE4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9P
dXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0
X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIg
X19tb2QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsK
CgogICAgICAgIGNvbnN0IGludCBfX21heF9kaWdpdHMgPSBudW1lcmljX2xpbWl0czxfVmFsdWVU
Pjo6ZGlnaXRzMTAgKyAxOwogICAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNp
b24oKTsKCiAgICAgICAgaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4
X2RpZ2l0cykpCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21h
eF9kaWdpdHMpOwoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwoKCiAgICAgICAgaW50IF9fbGVu
OwoKCgogICAgICAgIGludCBfX2NzX3NpemUgPSBfX21heF9kaWdpdHMgKiAzOwogICAgICAgIGNo
YXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUp
KTsKCiAgICAgICAgY29uc3QgYm9vbCBfX2ZwID0gX1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1
ZiwgX19tb2QsIF9fcHJlYyk7CiAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICBfX2xlbiA9IF9f
Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAgICAgICBlbHNl
CiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2Zi
dWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkK
ICAgICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAg
ICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7
CiAgICAgICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zy
b21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9f
ZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xv
Y2FsZSk7CiAgICAgICAgICB9CiMgNjgxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2Zsb2F0KF9fcywg
X19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+
CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBf
TV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxs
LCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBf
X3YpIGNvbnN0CiAgICAgIHsKCgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgICAgX1Nf
Zm9ybWF0X2ludChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX21vZGwpOwoKCiAgICAgICAgaW50IF9f
Y3Nfc2l6ZSA9IDY0OwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19i
dWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRf
ZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICAgIGlmIChfX2xlbiA+PSBfX2Nz
X3NpemUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAg
ICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nf
c2l6ZSkpOwogICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19z
aXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9T
X2NfbG9jYWxlKTsKICAgICAgICAgIH0KCgoKCgoKICAgICAgICByZXR1cm4gX01fd2lkZW5faW50
KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9z
X2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAg
ICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJU
PiBfX3RyYWl0c190eXBlOwoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsKCgogICAgICBf
Q2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f
Y3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfX3A7CiAgICAgIGNvbnN0
IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgaWYgKF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193cywgX19sZW4sIF9f
Y3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1h
bF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3Vw
aW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3Mo
KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg
ICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAgICAgICBpbnQgX19kZWNsZW4gPSBf
X3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBfX3AyID0gX19hZGRfZ3JvdXBpbmco
X193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4pOwogICAgICAgICAgaW50IF9fbmV3
bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6Y29weShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNs
ZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAg
ICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgICAgX19sZW4gPSBfX25ld2xl
bjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBf
X3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmls
bCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoK
ICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh
KHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0
aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19s
ZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsK
CgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0
PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5n
cm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBf
X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19ncm91cGluZy5z
aXplKCkpCiAgICAgICAgewoKCgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAg
ICAgICAgIGlmICgoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSAmJiBfX2xlbiA+
IDEpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dz
MiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmll
bGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29m
ZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICAgICoo
X193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFy
VCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19u
cC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3Vw
aW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNf
c3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193
czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2lu
c2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3Nf
YmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAg
ICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hh
clQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsK
ICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxv
Y2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0
PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9f
dHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsK
ICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3Mg
PSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50
IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3Nb
X19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6
Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9
IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAn
dScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9D
aGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
ICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAg
X19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25h
bWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19p
bywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywg
X19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1
cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNv
bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICds
JywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0
X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1
dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBf
TV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBf
X3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxs
LCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRv
X3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg
ICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRm
bGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19m
bXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNl
OjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNl
OjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAg
ICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAg
ICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAg
ICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBt
b25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAg
ewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19i
ZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQg
X19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciog
X19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBj
b25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hh
clQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNv
bnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhf
X3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2Nv
bnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1
cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv
X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5
cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJU
LCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZh
bHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsK
CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9f
bW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAg
IGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9f
bG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3Ag
PSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJp
bmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2ln
bigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5u
ZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19p
bnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3Nl
cCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJp
bmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGlu
ZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5n
X3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9
IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5n
X3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAg
Y2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFy
X3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYm
IF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQg
X193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3
aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9u
ZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2ln
bi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+
KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1
cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0g
X19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5
bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
KytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAg
aWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBt
b25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgp
ICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg
ICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2ln
bjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQog
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9z
X3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkg
JiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAg
ICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9w
b3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
X19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMg
Kz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9i
YXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7
CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6
ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9f
bGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBf
X3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlm
IChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAg
fQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQog
ICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBp
ZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBf
dW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoK
CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAg
ICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dy
b3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoK
CiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJp
dDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVt
cF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg
IG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
IGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0g
NjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j
YShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBf
X2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAg
ICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0
YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAg
X19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5p
dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAg
ICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlw
ZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2Rp
Z2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywg
X19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0
ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9f
aW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGln
aXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXpl
X3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAg
ICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAg
ICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAg
dHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNv
bnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7
CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFs
c2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVn
ID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcg
KyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBz
dHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScp
KQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6
IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9z
aXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6
IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVn
YXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsK
ICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRp
Z2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoK
CgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3Zh
bHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21w
dC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMg
PSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAw
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50
bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9f
ZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAg
ICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAg
ICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmlu
Z190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9f
ZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVy
byA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQo
X192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192
YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2Jl
ZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBp
ZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAg
ICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2Fu
ZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBf
X2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBj
b25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0No
YXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBf
Q2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQs
IF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3My
LCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19l
bmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0g
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4g
Kz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkg
OiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5h
bCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8
IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3Rh
dGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193
aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6
c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNo
b3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoK
ICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAg
X19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9f
dmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25l
eV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAg
ICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2Zp
bGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0g
X19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVz
dGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAt
IF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAg
ICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVu
ZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193
aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3Nf
YmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVu
LCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNl
cnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAg
ICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5
cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9
IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4g
X19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
cj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRl
cjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2
b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zv
cm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNv
bnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGlt
ZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJU
PiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0
czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsg
X19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7
CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09
ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07
CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0g
MDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAg
X19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3
aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAg
ICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFb
N107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f
d2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAg
ICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0
X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAg
ICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250
aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAg
X190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRz
KF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k
LCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAg
ICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAg
ICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIs
IDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy
cik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSSc6Cgog
ICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hv
dXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBf
X2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6
CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAx
LCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIp
OwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0t
PnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBf
X2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9f
YmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAg
ICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBl
LndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh
Y3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0
cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChf
X2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytf
X2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAg
ICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAg
ICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAg
X190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh
Y3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGlt
ZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3Jt
YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
dW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2Vy
cikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAg
ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1Nf
dGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vy
cik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9f
YmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
X01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9f
Y3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBp
dGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9f
bWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0
eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcg
X19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUg
X19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4K
ICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAg
ICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAg
ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlm
IChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9f
ZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1
ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90
eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFp
dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19j
YXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAg
ICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAg
Ym9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoK
ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAw
OyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tf
X2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAg
IHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5s
ZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hl
czsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVz
W19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9f
ZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kz
IDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlm
IChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19p
M10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICBp
ZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVz
W19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190
eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9f
YmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19f
YmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAg
X19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVz
dHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQg
PSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk
b19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj
b25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3Mg
PSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxf
Q2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0
cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsK
ICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2Zi
aXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0
IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog
ICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsK
ICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNo
YXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19p
by5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9m
YWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAg
IGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1w
d2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAg
IHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNb
X190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAo
X19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29u
c3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAg
ICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAg
ICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19f
YmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAg
ICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAg
ICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
Ojplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hh
cl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2Zh
Y2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7
CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwg
X190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgo
X19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsK
ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190bXBtb25dOwog
ICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25h
bWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5k
CiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAg
ICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19w
b3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAg
ICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190
bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt
ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0g
Kl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAg
ICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh
c2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUu
bmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytf
X2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewog
ICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0
cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAg
ICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAg
ICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0
OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUs
IGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFy
VCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAg
ICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsr
X19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAg
ICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJv
dygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9f
YyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJy
b3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAg
ICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190
bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9f
cyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29u
c3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QK
ICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0No
YXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1
bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0
OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUq
PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoK
ICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4o
JyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9f
Zm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19m
bXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAg
ICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoK
ICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVz
KTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykK
ICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01f
Y29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4g
MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRl
PF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNv
bnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
dAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xv
MSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xv
MiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5
cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19s
bzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28u
Y19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUg
Y29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRv
X3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QK
ICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hh
clQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShz
aXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9y
bShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7
CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0
aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3Ry
YW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3Ry
aW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25n
CiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNv
bnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9
IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9f
bG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9f
b3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3Qg
aW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9UdiBf
X3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpOwojIDE5OTAgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m
aWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBj
b25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBf
X29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFp
dHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19u
ZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6
ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9
IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCog
X19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0No
YXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9f
ZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwogICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBz
aXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpm
bXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsK
CiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAg
ICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xl
biA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBl
bHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAg
ewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNv
bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScp
OwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAg
ICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19w
bHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lk
ZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0
czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkp
OwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
bmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07
CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0gMjsKICAg
ICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl
bjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19t
b2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSks
IF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAg
ICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAg
ICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0
PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAg
IF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hh
clQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47
CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9
CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJh
aXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQojIDIwODUgIi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsKICAgICAgaW50IF9faSA9IDA7
CiAgICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNp
emUoKTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdfdG1wLnNpemUoKTsKICAgICAg
Ym9vbCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBfX24g
LSAxKQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8
IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19q
XSA9PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgogICAgICBfX2ogPT0gX19sZW4g
PyBfX2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID49IF9fZ3Jv
dXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3Vw
aW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf
X2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX2Fk
ZF9ncm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9f
Z2JlZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsgMSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOwogICAg
ICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAgICAgICAqX19zKysgPSBfX3Nl
cDsKICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9i
eW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdl
c19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwgbWJz
dGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNv
ZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTxj
aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1
bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNl
dDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Y29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCB0
cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4m
CiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFj
ZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0
PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFj
ZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+
JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8
Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFy
X3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0
cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwg
ZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90
LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5j
dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2NoYXJf
dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyB0aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnlu
YW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlw
ZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1l
PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxh
dGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFy
X3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwg
bWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD4gPihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRl
PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVz
ZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3
Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51
bV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwg
dHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwg
ZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+
JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNl
dDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5j
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IHRpbWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNl
dDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwg
Y2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdj
aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg
aGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190
aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2NoYXJf
dD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNf
ZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCn0KIyA0NyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9vc3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAg
IHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZs
dXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYp
KF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYo
KnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3Bm
KShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRo
aXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9z
X2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIV9f
Y29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3Ni
aW4pCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
cHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0
aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRv
cjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkp
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAg
ICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxl
ZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19u
KS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0
aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAg
ICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3Nf
YmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
cHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2Zt
dCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAgICBfX2wg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAg
ICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVk
KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24p
LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1
dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQog
ICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZp
bGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9u
ZyBkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChf
TV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkp
CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlz
LCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRi
dWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
c3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAg
ICAgIGlmICggX19wdXQgIT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVz
aCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1
YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6dGVsbHAoKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsK
ICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5w
dWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBpZiAo
IXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhp
cy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAg
IGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly
IF9fZCkKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAg
ICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0x
KSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9D
aGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5
IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
KCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fdyArIDEpKSk7CiAgICAgICAgICAg
ICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwog
ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxs
KCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf
X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f
b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAg
fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291
dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy
eSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0
aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1
aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+
IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxjaGFyLCBf
VHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3csIF9fbGVuLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0
LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwg
Y29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGlj
X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf
VHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf
U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7
CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291
dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBf
X291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlw
ZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoKCiAg
ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAgIHR5cGVu
YW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2Vy
YiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAxKSkpOwog
ICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkKICAgICAg
ICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJU
KiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAg
X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6
X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAg
ICAgICAgICAgICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f
b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAg
ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0
OwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hh
ciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
IF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFt
X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNp
emUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0
aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9f
cykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0
LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fcyA9
IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19v
dXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5h
bWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0YSgpOwog
ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgX0NoYXJU
KiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf
Q2hhclQpICogX193KSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8
c3RyZWFtc2l6ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3Bh
ZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAg
IF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQog
ICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19s
ZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19s
ZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZGwob3N0
cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mKTsKICBleHRl
cm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBs
YXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsKICBleHRlcm4g
dGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciopOwogIGV4
dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCB1bnNpZ25l
ZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs
IGNvbnN0IHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0
cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0m
KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4g
dGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdv
c3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRl
IHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRl
IHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVy
biB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsK
Cn0KIyAyNzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0iIDIgMwojIDQ2ICIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVh
bCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw
b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw
ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK
ICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9p
dGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90
eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1
YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlw
ZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2Nv
dW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf
aXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNs
YXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFt
X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190
eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxp
bmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
Z2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k
ZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3MsIF9fbiwg
dGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9f
c3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBf
X2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwg
Y2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBn
ZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhp
cy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxp
bSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQp
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNr
KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQp
OwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxs
Zyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVr
ZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2lu
dF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0
b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9v
azsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0
ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hh
ciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19j
KSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9f
aW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9j
YXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoK
ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+
JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2ln
bmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRz
PiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAog
ICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z
YikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAg
ICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAg
ICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkKICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1
c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3cyAmJiAoX19pbi5mbGFncygpICYgaW9zX2Jh
c2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
X3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBpZiAoX19pbi5fTV9jaGVja19mYWNldChfX2lu
Ll9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAgICYmIF9faW4uX01fZmN0eXBl
LT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKSkKICAgICAgICAgICAg
ICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgaWYg
KF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVh
bV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMp
OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5
cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm
KShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f
ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYg
KCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBf
X2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24g
PSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv
c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9f
bDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg
ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgog
ICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAg
ICAgICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAg
ICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCiAgICAgICAg
ICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i
YXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl
dCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy
ciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgbG9u
ZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog
ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg
ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i
YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo
aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf
X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUm
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog
ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f
bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f
Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w
ZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z
dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq
dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlw
ZSogX19zYm91dCkKICAgIHsKICAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgIHsKICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgICAgICAgICAgaWYg
KF9fc2JvdXQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYmluID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAgIF9feHRy
Y3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Omlu
dF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQp
CiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1Zigp
LT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFy
X3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJk
YnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX2J1ZnZhbCwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9f
Y2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBf
TV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f
ZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1
ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAg
ICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYm
ICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAg
ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAg
ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
aWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsK
ICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1i
dWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9
IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAg
ICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsK
ICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CiAgICAgICAg
ICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7Cgog
ICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
CiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf
X2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNu
ZXh0YygpOwogICAgICAgICAgICAgICAgICBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfX2MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxp
bSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBl
Ojp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2Vv
ZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5z
Z2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAg
ICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAg
ICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lk
ZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0
c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+
c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikp
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAg
ICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9N
X2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50
X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYzsKCiAg
ICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1h
eCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCiAgICAgICAgICAgICAg
ICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jID0gX19zYi0+c2J1bXBjKCks
IF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7
CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2Rl
bGltKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2b2lkKQogICAgewogICAg
ICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRoaXMtPnJkYnVmKCktPnNn
ZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9f
cywgX19uKTsKICAgICAgICAgICAgICBpZiAoX01fZ2NvdW50ICE9IF9fbikKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsK
ICAgICAgICAgICAgICBpZiAoX19udW0gPj0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAgICAgIGlmIChf
X251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0
bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX01fZ2Nv
dW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAgICAgICAg
ICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyks
IF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZvaWQpCiAgICB7CiAgICAgIF9N
X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAg
aWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQgPSAtMTsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAg
ICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYg
KF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVu
YW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewogICAgICBwb3Nf
dHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAg
ICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlv
c19iYXNlOjppbik7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhw
b3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgaWYgKCF0aGlz
LT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk
YnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgIGlmIChf
X2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGly
KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAg
ICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl
a29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBv
c190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5nZXQoX19jKTsgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJU
PiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAgICAgICAgICAgICAg
aWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0
cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0
eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgICAgICAg
ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3Rl
ZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5
cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIV9fY3R5cGUuaXMoY3R5cGVf
YmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpf
X3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAg
ICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAg
X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0g
Y2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0
ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVy
biBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3Ry
ZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p
bnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxf
X2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9m
ID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJk
YnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxl
ICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICYmIF9fY3R5
cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgX19jID0gX19zYi0+c25leHRj
KCk7CgogICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0
b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlw
ZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90
eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50
cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRo
KCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8g
c3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAg
ICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+
KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFp
dHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYo
KTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3
aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX19jdHlwZS5pcyhjdHlw
ZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9
IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgX19p
bi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAg
ICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAo
aW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlw
ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19z
dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19j
dHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUg
X19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBf
X3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUg
X19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9f
YyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9U
cmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlw
ZShfX2MsIF9faWRlbGltKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAg
ICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAg
ICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4
dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAg
ICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikp
CiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQog
ICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBs
YXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5l
IGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIs
IF9faW4ud2lkZW4oJ1xuJykpOyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19p
c3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBl
eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4
dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFy
Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25l
ZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYs
IHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihp
c3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0m
KTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hh
cl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwg
d2NoYXJfdCopOwoKfQojIDI5OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIg
MiAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvc3RyZWFtIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0Owog
IGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCgogIGV4dGVybiB3
aXN0cmVhbSB3Y2luOwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0g
d2NlcnI7CiAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5p
dCBfX2lvaW5pdDsKfQojIDI2ICJITmFtZS5oIiAyCgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIyAz
NyAiSE5hbWUuaCIKY2xhc3MgaG5hbWVfdCB7CgogICAgcHVibGljOgogICAgICBobmFtZV90ICgp
OwogICAgICBleHBsaWNpdCBobmFtZV90IChjb25zdCBjaGFyKnRleHQpOwogICAgICBobmFtZV90
IChjb25zdCBobmFtZV90JnRoYXQpOwogICAgICB+aG5hbWVfdCgpOwoKCgogICAgICB2b2lkIGFw
cGVuZChjb25zdCBjaGFyKnRleHQpOwoKCgoKICAgICAgdm9pZCBwcmVwZW5kKGNvbnN0IGNoYXIq
dGV4dCk7CgoKCgogICAgICBjaGFyKiByZW1vdmVfdGFpbF9uYW1lKCk7CgoKCiAgICAgIGNvbnN0
IGNoYXIqcGVla19uYW1lKHVuc2lnbmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IGNoYXIqcGVl
a190YWlsX25hbWUoKSBjb25zdDsKCgoKICAgICAgdW5zaWduZWQgY29tcG9uZW50X2NvdW50KCkg
Y29uc3Q7CgogICAgICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PCAob3N0cmVhbSYsIGNvbnN0
IGhuYW1lX3QmKTsKCiAgICBwcml2YXRlOgogICAgICB1bmlvbiB7CiAgICAgICAgICAgIGNoYXIq
KmFycmF5XzsKICAgICAgICAgICAgY2hhciogaXRlbV87CiAgICAgIH07CiAgICAgIHVuc2lnbmVk
IGNvdW50XzsKCiAgICBwcml2YXRlOgogICAgICBobmFtZV90JiBvcGVyYXRvcj0gKGNvbnN0IGhu
YW1lX3QmKTsKfTsKCmV4dGVybiBib29sIG9wZXJhdG9yIDwgKGNvbnN0IGhuYW1lX3QmLCBjb25z
dCBobmFtZV90Jik7CmV4dGVybiBib29sIG9wZXJhdG9yID09IChjb25zdCBobmFtZV90JiwgY29u
c3QgaG5hbWVfdCYpOwojIDM2ICJuZXRsaXN0LmgiIDIKIyAxICJMaW5lSW5mby5oIiAxCiMgMjIg
IkxpbmVJbmZvLmgiCiNpZGVudCAiJElkOiBMaW5lSW5mby5oLHYgMS42IDIwMDIvMDgvMTIgMDE6
MzQ6NTggc3RldmUgRXhwICQiCiMgMzYgIkxpbmVJbmZvLmgiCmNsYXNzIExpbmVJbmZvIHsKICAg
IHB1YmxpYzoKICAgICAgTGluZUluZm8oKSA6IGZpbGVfKDApLCBsaW5lbm9fKDApIHsgfQogICAg
ICB+TGluZUluZm8oKTsKCiAgICAgIHN0cmluZyBnZXRfbGluZSgpIGNvbnN0OwoKICAgICAgdm9p
ZCBzZXRfbGluZShjb25zdCBMaW5lSW5mbyZ0aGF0KTsKCiAgICAgIHZvaWQgc2V0X2ZpbGUoY29u
c3QgY2hhcipmKSB7IGZpbGVfID0gZjsgfQogICAgICB2b2lkIHNldF9saW5lbm8odW5zaWduZWQg
bikgeyBsaW5lbm9fID0gbjsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IGNoYXIqIGZpbGVf
OwogICAgICB1bnNpZ25lZCBsaW5lbm9fOwp9OwojIDM3ICJuZXRsaXN0LmgiIDIKIyAxICJzdmVj
dG9yLmgiIDEKIyAyNCAic3ZlY3Rvci5oIgojaWRlbnQgIiRJZDogc3ZlY3Rvci5oLHYgMS42IDIw
MDIvMDgvMTIgMDE6MzU6MDAgc3RldmUgRXhwICQiCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0
LmgiIDEgMyA0CiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CmV4dGVybiAiQyIgewoK
CmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9f
Y29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9m
YWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAo
Y29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDI4ICJz
dmVjdG9yLmgiIDIKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUWVBFPiBjbGFzcyBzdmVjdG9yIHsK
CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHN2ZWN0b3IoKSA6IG5pdGVtc18oMCksIGl0ZW1z
XygwKSB7IH0KCiAgICAgIGV4cGxpY2l0IHN2ZWN0b3IodW5zaWduZWQgc2l6ZSkgOiBuaXRlbXNf
KHNpemUpLCBpdGVtc18obmV3IFRZUEVbc2l6ZV0pCiAgICAgICAgICAgIHsgZm9yICh1bnNpZ25l
ZCBpZHggPSAwIDsgaWR4IDwgc2l6ZSA7IGlkeCArPSAxKQogICAgICAgICAgICAgICAgICBpdGVt
c19baWR4XSA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgIHN2ZWN0b3IoY29uc3Qgc3ZlY3RvcjxU
WVBFPiZ0aGF0KQogICAgICAgICAgICA6IG5pdGVtc18odGhhdC5uaXRlbXNfKSwgaXRlbXNfKG5l
dyBUWVBFW25pdGVtc19dKQogICAgICAgICAgICB7IGZvciAodW5zaWduZWQgaWR4ID0gMCA7IGlk
eCA8IHRoYXQubml0ZW1zXyA7IGlkeCArPSAxKQogICAgICAgICAgICAgICAgICAgIGl0ZW1zX1tp
ZHhdID0gdGhhdFtpZHhdOwogICAgICAgICAgICB9CgogICAgICBzdmVjdG9yKGNvbnN0IHN2ZWN0
b3I8VFlQRT4mbCwgY29uc3Qgc3ZlY3RvcjxUWVBFPiZyKQogICAgICAgICAgICA6IG5pdGVtc18o
bC5uaXRlbXNfICsgci5uaXRlbXNfKSwgaXRlbXNfKG5ldyBUWVBFW25pdGVtc19dKQogICAgICAg
ICAgICB7IGZvciAodW5zaWduZWQgaWR4ID0gMCA7IGlkeCA8IGwubml0ZW1zXyA7IGlkeCArPSAx
KQogICAgICAgICAgICAgICAgICAgIGl0ZW1zX1tpZHhdID0gbFtpZHhdOwoKICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGlkeCA9IDAgOyBpZHggPCByLm5pdGVtc18gOyBpZHggKz0gMSkKICAg
ICAgICAgICAgICAgICAgICBpdGVtc19bbC5uaXRlbXNfK2lkeF0gPSByW2lkeF07CiAgICAgICAg
ICAgIH0KCiAgICAgIHN2ZWN0b3IoY29uc3Qgc3ZlY3RvcjxUWVBFPiZsLCBUWVBFIHIpCiAgICAg
ICAgICAgIDogbml0ZW1zXyhsLm5pdGVtc18gKyAxKSwgaXRlbXNfKG5ldyBUWVBFW25pdGVtc19d
KQogICAgICAgICAgICB7IGZvciAodW5zaWduZWQgaWR4ID0gMCA7IGlkeCA8IGwubml0ZW1zXyA7
IGlkeCArPSAxKQogICAgICAgICAgICAgICAgICAgIGl0ZW1zX1tpZHhdID0gbFtpZHhdOwogICAg
ICAgICAgICAgIGl0ZW1zX1tuaXRlbXNfLTFdID0gcjsKICAgICAgICAgICAgfQoKICAgICAgfnN2
ZWN0b3IoKSB7IGRlbGV0ZVtdaXRlbXNfOyB9CgogICAgICBzdmVjdG9yPFRZUEU+JiBvcGVyYXRv
cj0gKGNvbnN0IHN2ZWN0b3I8VFlQRT4mdGhhdCkKICAgICAgICAgICAgeyBpZiAoJnRoYXQgPT0g
dGhpcykgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgIGRlbGV0ZVtdaXRlbXNfOwogICAgICAg
ICAgICAgIG5pdGVtc18gPSB0aGF0Lm5pdGVtc187CiAgICAgICAgICAgICAgaXRlbXNfID0gbmV3
IFRZUEVbbml0ZW1zX107CiAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpZHggPSAwIDsgaWR4
IDwgbml0ZW1zXyA7IGlkeCArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaXRlbXNfW2lkeF0g
PSB0aGF0Lml0ZW1zX1tpZHhdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgICAgIH0KCiAgICAgIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1
cm4gbml0ZW1zXzsgfQoKICAgICAgVFlQRSZvcGVyYXRvcltdICh1bnNpZ25lZCBpZHgpCiAgICAg
ICAgICAgIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICgoaWR4IDwgbml0ZW1zXykgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJpZHggPCBuaXRlbXNfIiwgInN2ZWN0b3IuaCIsIDgzLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAgICAgICAgICAgICByZXR1cm4gaXRlbXNfW2lkeF07CiAgICAgICAg
ICAgIH0KCiAgICAgIFRZUEUgb3BlcmF0b3JbXSAodW5zaWduZWQgaWR4KSBjb25zdAogICAgICAg
ICAgICB7IChzdGF0aWNfY2FzdDx2b2lkPiAoKGlkeCA8IG5pdGVtc18pID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgiaWR4IDwgbml0ZW1zXyIsICJzdmVjdG9yLmgiLCA4OCwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zX1tpZHhdOwogICAgICAgICAg
ICB9CgogICAgcHJpdmF0ZToKICAgICAgdW5zaWduZWQgbml0ZW1zXzsKICAgICAgVFlQRSogaXRl
bXNfOwoKfTsKIyAzOCAibmV0bGlzdC5oIiAyCiMgMSAiQXR0cmliLmgiIDEKIyAyMiAiQXR0cmli
LmgiCiNpZGVudCAiJElkOiBBdHRyaWIuaCx2IDEuNCAyMDAyLzA4LzEyIDAxOjM0OjU4IHN0ZXZl
IEV4cCAkIgojIDMyICJBdHRyaWIuaCIKY2xhc3MgQXR0cmliIHsKCiAgICBwdWJsaWM6CiAgICAg
IEF0dHJpYigpOwogICAgICB+QXR0cmliKCk7CgogICAgICBjb25zdCB2ZXJpbnVtJmF0dHJpYnV0
ZShjb25zdCBzdHJpbmcma2V5KSBjb25zdDsKICAgICAgdm9pZCBhdHRyaWJ1dGUoY29uc3Qgc3Ry
aW5nJmtleSwgY29uc3QgdmVyaW51bSZ2YWx1ZSk7CiAgICAgIGJvb2wgaGFzX2NvbXBhdF9hdHRy
aWJ1dGVzKGNvbnN0IEF0dHJpYiZ0aGF0KSBjb25zdDsKCgoKICAgICAgdW5zaWduZWQgYXR0cl9j
bnQoKSBjb25zdDsKICAgICAgY29uc3QgY2hhciogYXR0cl9rZXkodW5zaWduZWQgaWR4KSBjb25z
dDsKICAgICAgY29uc3QgdmVyaW51bSYgYXR0cl92YWx1ZSh1bnNpZ25lZCBpZHgpIGNvbnN0OwoK
CiAgICBwcml2YXRlOgogICAgICBzdHJ1Y3QgY2VsbF8gewogICAgICAgICAgICBzdHJpbmcga2V5
OwogICAgICAgICAgICB2ZXJpbnVtIHZhbDsKICAgICAgfTsKCiAgICAgIHVuc2lnbmVkIG5saXN0
XzsKICAgICAgc3RydWN0IGNlbGxfKmxpc3RfOwoKICAgIHByaXZhdGU6CiAgICAgIEF0dHJpYihj
b25zdCBBdHRyaWImKTsKICAgICAgQXR0cmliJiBvcGVyYXRvcj0gKGNvbnN0IEF0dHJpYiYpOwp9
OwojIDM5ICJuZXRsaXN0LmgiIDIKCgoKCgoKCmNsYXNzIERlc2lnbjsKY2xhc3MgTGluazsKY2xh
c3MgTmV4dXM7CmNsYXNzIE5ldE5vZGU7CmNsYXNzIE5ldFByb2M7CmNsYXNzIE5ldFByb2NUb3A7
CmNsYXNzIE5ldFJlbGVhc2U7CmNsYXNzIE5ldFNjb3BlOwpjbGFzcyBOZXRFdlByb2JlOwpjbGFz
cyBOZXRFeHByOwpjbGFzcyBOZXRFU2lnbmFsOwpjbGFzcyBOZXRGdW5jRGVmOwoKCnN0cnVjdCB0
YXJnZXQ7CnN0cnVjdCBmdW5jdG9yX3Q7CiMgODMgIm5ldGxpc3QuaCIKY2xhc3MgTmV0T2JqIDog
cHVibGljIEF0dHJpYiB7CgogICAgcHVibGljOgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBO
ZXRPYmooTmV0U2NvcGUqcywgY29uc3Qgc3RyaW5nJm4sIHVuc2lnbmVkIG5waW5zKTsKICAgICAg
ZXhwbGljaXQgTmV0T2JqKE5ldFNjb3BlKnMsIGNvbnN0IGNoYXIqbiwgdW5zaWduZWQgbnBpbnMp
OwogICAgICB2aXJ0dWFsIH5OZXRPYmooKTsKCiAgICAgIE5ldFNjb3BlKiBzY29wZSgpOwogICAg
ICBjb25zdCBOZXRTY29wZSogc2NvcGUoKSBjb25zdDsKCiAgICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBjb25zdCB7IHJldHVybiBuYW1lXzsgfQoKICAgICAgdW5zaWduZWQgcGluX2NvdW50KCkgY29u
c3QgeyByZXR1cm4gbnBpbnNfOyB9CgogICAgICB1bnNpZ25lZCByaXNlX3RpbWUoKSBjb25zdCB7
IHJldHVybiBkZWxheTFfOyB9CiAgICAgIHVuc2lnbmVkIGZhbGxfdGltZSgpIGNvbnN0IHsgcmV0
dXJuIGRlbGF5Ml87IH0KICAgICAgdW5zaWduZWQgZGVjYXlfdGltZSgpIGNvbnN0IHsgcmV0dXJu
IGRlbGF5M187IH0KCiAgICAgIHZvaWQgcmlzZV90aW1lKHVuc2lnbmVkIGQpIHsgZGVsYXkxXyA9
IGQ7IH0KICAgICAgdm9pZCBmYWxsX3RpbWUodW5zaWduZWQgZCkgeyBkZWxheTJfID0gZDsgfQog
ICAgICB2b2lkIGRlY2F5X3RpbWUodW5zaWduZWQgZCkgeyBkZWxheTNfID0gZDsgfQoKICAgICAg
TGluayZwaW4odW5zaWduZWQgaWR4KTsKICAgICAgY29uc3QgTGluayZwaW4odW5zaWduZWQgaWR4
KSBjb25zdDsKCiAgICAgIHZvaWQgZHVtcF9ub2RlX3BpbnMob3N0cmVhbSYsIHVuc2lnbmVkKSBj
b25zdDsKICAgICAgdm9pZCBkdW1wX29ial9hdHRyKG9zdHJlYW0mLCB1bnNpZ25lZCkgY29uc3Q7
CgogICAgcHJpdmF0ZToKICAgICAgTmV0U2NvcGUqc2NvcGVfOwogICAgICBjaGFyKiBuYW1lXzsK
ICAgICAgTGluaypwaW5zXzsKICAgICAgY29uc3QgdW5zaWduZWQgbnBpbnNfOwogICAgICB1bnNp
Z25lZCBkZWxheTFfOwogICAgICB1bnNpZ25lZCBkZWxheTJfOwogICAgICB1bnNpZ25lZCBkZWxh
eTNfOwp9OwoKY2xhc3MgTGluayB7CgogICAgICBmcmllbmQgdm9pZCBjb25uZWN0KExpbmsmLCBM
aW5rJik7CiAgICAgIGZyaWVuZCB2b2lkIGNvbm5lY3QoTmV4dXMqLCBMaW5rJik7CiAgICAgIGZy
aWVuZCBjbGFzcyBOZXRPYmo7CiAgICAgIGZyaWVuZCBjbGFzcyBOZXh1czsKCiAgICBwdWJsaWM6
CiAgICAgIGVudW0gRElSIHsgUEFTU0lWRSwgSU5QVVQsIE9VVFBVVCB9OwoKICAgICAgZW51bSBz
dHJlbmd0aF90IHsgSElHSFosIFdFQUssIFBVTEwsIFNUUk9ORywgU1VQUExZIH07CgogICAgICBM
aW5rKCk7CiAgICAgIH5MaW5rKCk7CgoKICAgICAgdm9pZCBzZXRfZGlyKERJUiBkKTsKICAgICAg
RElSIGdldF9kaXIoKSBjb25zdDsKCgoKCiAgICAgIHZvaWQgZHJpdmUwKHN0cmVuZ3RoX3QpOwog
ICAgICB2b2lkIGRyaXZlMShzdHJlbmd0aF90KTsKCiAgICAgIHN0cmVuZ3RoX3QgZHJpdmUwKCkg
Y29uc3Q7CiAgICAgIHN0cmVuZ3RoX3QgZHJpdmUxKCkgY29uc3Q7CgoKCgoKICAgICAgdm9pZCBz
ZXRfaW5pdCh2ZXJpbnVtOjpWIHZhbCk7CiAgICAgIHZlcmludW06OlYgZ2V0X2luaXQoKSBjb25z
dDsKCiAgICAgIHZvaWQgY3VyX2xpbmsoTmV0T2JqKiZuZXQsIHVuc2lnbmVkICZwaW4pOwogICAg
ICB2b2lkIGN1cl9saW5rKGNvbnN0IE5ldE9iaiombmV0LCB1bnNpZ25lZCAmcGluKSBjb25zdDsK
CgoKICAgICAgTmV4dXMqIG5leHVzKCk7CiAgICAgIGNvbnN0IE5leHVzKiBuZXh1cygpY29uc3Q7
CgoKICAgICAgTGluayogbmV4dF9ubGluaygpOwogICAgICBjb25zdCBMaW5rKiBuZXh0X25saW5r
KCkgY29uc3Q7CgoKCiAgICAgIHZvaWQgdW5saW5rKCk7CgoKICAgICAgYm9vbCBpc19saW5rZWQo
KSBjb25zdDsKCgogICAgICBib29sIGlzX2xpbmtlZChjb25zdCBMaW5rJnRoYXQpIGNvbnN0OwoK
CgogICAgICBib29sIGlzX2VxdWFsKGNvbnN0IExpbmsmdGhhdCkgY29uc3Q7CgoKCiAgICAgIGNv
bnN0IE5ldE9iaipnZXRfb2JqKCkgY29uc3Q7CiAgICAgIE5ldE9iaipnZXRfb2JqKCk7CiAgICAg
IHVuc2lnbmVkIGdldF9waW4oKSBjb25zdDsKCgoKCiAgICAgIHZvaWQgc2V0X25hbWUoY29uc3Qg
c3RyaW5nJiwgdW5zaWduZWQgaW5zdCA9MCk7CiAgICAgIGNvbnN0IHN0cmluZyYgZ2V0X25hbWUo
KSBjb25zdDsKICAgICAgdW5zaWduZWQgZ2V0X2luc3QoKSBjb25zdDsKCiAgICBwcml2YXRlOgoK
CiAgICAgIE5ldE9iaiAqbm9kZV87CiAgICAgIHVuc2lnbmVkIHBpbl87CgogICAgICBESVIgZGly
XzsKICAgICAgc3RyZW5ndGhfdCBkcml2ZTBfLCBkcml2ZTFfOwogICAgICB2ZXJpbnVtOjpWIGlu
aXRfOwoKCgoKICAgICAgc3RyaW5nIG5hbWVfOwogICAgICB1bnNpZ25lZCBpbnN0XzsKCiAgICBw
cml2YXRlOgogICAgICBMaW5rICpuZXh0XzsKICAgICAgTmV4dXMqbmV4dXNfOwoKICAgIHByaXZh
dGU6CiAgICAgIExpbmsoY29uc3QgTGluayYpOwogICAgICBMaW5rJiBvcGVyYXRvcj0gKGNvbnN0
IExpbmsmKTsKfTsKIyAyMzUgIm5ldGxpc3QuaCIKY2xhc3MgTmV4dXMgewoKICAgICAgZnJpZW5k
IHZvaWQgY29ubmVjdChMaW5rJiwgTGluayYpOwogICAgICBmcmllbmQgdm9pZCBjb25uZWN0KE5l
eHVzKiwgTGluayYpOwogICAgICBmcmllbmQgY2xhc3MgTGluazsKCiAgICBwdWJsaWM6CiAgICAg
IGV4cGxpY2l0IE5leHVzKCk7CiAgICAgIH5OZXh1cygpOwoKICAgICAgY29uc3QgY2hhciogbmFt
ZSgpIGNvbnN0OwogICAgICB2ZXJpbnVtOjpWIGdldF9pbml0KCkgY29uc3Q7CgogICAgICBMaW5r
KmZpcnN0X25saW5rKCk7CiAgICAgIGNvbnN0IExpbmsqIGZpcnN0X25saW5rKCljb25zdDsKCgoK
CiAgICAgIGJvb2wgZHJpdmVyc19jb25zdGFudCgpIGNvbnN0OwoKCgogICAgICB2ZXJpbnVtOjpW
IGRyaXZlbl92YWx1ZSgpIGNvbnN0OwoKICAgICAgdm9pZCogdF9jb29raWUoKSBjb25zdDsKICAg
ICAgdm9pZCogdF9jb29raWUodm9pZCopIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIExpbmsq
bGlzdF87CiAgICAgIHZvaWQgdW5saW5rKExpbmsqKTsKICAgICAgdm9pZCByZWxpbmsoTGluayop
OwoKICAgICAgbXV0YWJsZSBjaGFyKiBuYW1lXzsKICAgICAgbXV0YWJsZSB2b2lkKiB0X2Nvb2tp
ZV87CgogICAgICBlbnVtIFZBTFVFIHsgTk9fR1VFU1MsIFYwLCBWMSwgVngsIFZ6LCBWQVIgfTsK
ICAgICAgbXV0YWJsZSBWQUxVRSBkcml2ZW5fOwoKICAgIHByaXZhdGU6CiAgICAgIE5leHVzKGNv
bnN0IE5leHVzJik7CiAgICAgIE5leHVzJiBvcGVyYXRvcj0gKGNvbnN0IE5leHVzJik7Cn07Cgpj
bGFzcyBOZXh1c1NldCB7CgogICAgcHVibGljOgogICAgICB+TmV4dXNTZXQoKTsKICAgICAgTmV4
dXNTZXQoKTsKCiAgICAgIHVuc2lnbmVkIGNvdW50KCkgY29uc3Q7CgoKICAgICAgdm9pZCBhZGQo
TmV4dXMqdGhhdCk7CiAgICAgIHZvaWQgYWRkKGNvbnN0IE5leHVzU2V0JnRoYXQpOwoKCiAgICAg
IHZvaWQgcmVtKE5leHVzKnRoYXQpOwogICAgICB2b2lkIHJlbShjb25zdCBOZXh1c1NldCZ0aGF0
KTsKCiAgICAgIE5leHVzKiBvcGVyYXRvcltdICh1bnNpZ25lZCBpZHgpIGNvbnN0OwoKCiAgICAg
IGJvb2wgY29udGFpbnMoY29uc3QgTmV4dXNTZXQmdGhhdCkgY29uc3Q7CgoKICAgICAgYm9vbCBp
bnRlcnNlY3QoY29uc3QgTmV4dXNTZXQmdGhhdCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAg
TmV4dXMqKml0ZW1zXzsKICAgICAgdW5zaWduZWQgbml0ZW1zXzsKCiAgICAgIHVuc2lnbmVkIGJz
ZWFyY2hfKE5leHVzKnRoYXQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIE5leHVzU2V0KGNv
bnN0IE5leHVzU2V0Jik7CiAgICAgIE5leHVzU2V0JiBvcGVyYXRvcj0gKGNvbnN0IE5leHVzU2V0
Jik7Cn07CgoKCgoKCmNsYXNzIE5ldE5vZGUgOiBwdWJsaWMgTmV0T2JqIHsKCiAgICBwdWJsaWM6
CiAgICAgIGV4cGxpY2l0IE5ldE5vZGUoTmV0U2NvcGUqcywgY29uc3Qgc3RyaW5nJm4sIHVuc2ln
bmVkIG5waW5zKTsKICAgICAgZXhwbGljaXQgTmV0Tm9kZShOZXRTY29wZSpzLCBjb25zdCBjaGFy
Km4sIHVuc2lnbmVkIG5waW5zKTsKCiAgICAgIHZpcnR1YWwgfk5ldE5vZGUoKTsKCiAgICAgIHZp
cnR1YWwgYm9vbCBlbWl0X25vZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1
YWwgdm9pZCBkdW1wX25vZGUob3N0cmVhbSYsIHVuc2lnbmVkKSBjb25zdDsKCgogICAgICB2aXJ0
dWFsIHZvaWQgZnVuY3Rvcl9ub2RlKERlc2lnbiosIGZ1bmN0b3JfdCopOwoKICAgIHByaXZhdGU6
CiAgICAgIGZyaWVuZCBjbGFzcyBEZXNpZ247CiAgICAgIE5ldE5vZGUqbm9kZV9uZXh0XywgKm5v
ZGVfcHJldl87CiAgICAgIERlc2lnbipkZXNpZ25fOwp9OwojIDM1OSAibmV0bGlzdC5oIgpjbGFz
cyBOZXROZXQgOiBwdWJsaWMgTmV0T2JqLCBwdWJsaWMgTGluZUluZm8gewoKICAgIHB1YmxpYzoK
ICAgICAgZW51bSBUeXBlIHsgSU1QTElDSVQsIElNUExJQ0lUX1JFRywgSU5URUdFUiwgV0lSRSwg
VFJJLCBUUkkxLCBTVVBQTFkwLAogICAgICAgICAgICAgICAgICBTVVBQTFkxLCBXQU5ELCBUUklB
TkQsIFRSSTAsIFdPUiwgVFJJT1IsIFJFRyB9OwoKICAgICAgZW51bSBQb3J0VHlwZSB7IE5PVF9B
X1BPUlQsIFBJTVBMSUNJVCwgUElOUFVULCBQT1VUUFVULCBQSU5PVVQgfTsKCiAgICAgIGV4cGxp
Y2l0IE5ldE5ldChOZXRTY29wZSpzLCBjb25zdCBzdHJpbmcmbiwgVHlwZSB0LCB1bnNpZ25lZCBu
cGlucyA9MSk7CgogICAgICBleHBsaWNpdCBOZXROZXQoTmV0U2NvcGUqcywgY29uc3Qgc3RyaW5n
Jm4sIFR5cGUgdCwgbG9uZyBtcywgbG9uZyBscyk7CgogICAgICB2aXJ0dWFsIH5OZXROZXQoKTsK
CiAgICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgICB2b2lkIHR5cGUoVHlwZSB0KTsKCiAgICAg
IFBvcnRUeXBlIHBvcnRfdHlwZSgpIGNvbnN0OwogICAgICB2b2lkIHBvcnRfdHlwZShQb3J0VHlw
ZSB0KTsKCgoKICAgICAgYm9vbCBnZXRfc2lnbmVkKCkgY29uc3Q7CiAgICAgIHZvaWQgc2V0X3Np
Z25lZChib29sKTsKCgoKICAgICAgYm9vbCBnZXRfaXNpbnQoKSBjb25zdDsKICAgICAgdm9pZCBz
ZXRfaXNpbnQoYm9vbCk7CgoKCgoKICAgICAgbG9uZyBtc2IoKSBjb25zdDsKICAgICAgbG9uZyBs
c2IoKSBjb25zdDsKCgoKCiAgICAgIHVuc2lnbmVkIHNiX3RvX2lkeChsb25nIHNiKSBjb25zdDsK
CiAgICAgIGJvb2wgbG9jYWxfZmxhZygpIGNvbnN0IHsgcmV0dXJuIGxvY2FsX2ZsYWdfOyB9CiAg
ICAgIHZvaWQgbG9jYWxfZmxhZyhib29sIGYpIHsgbG9jYWxfZmxhZ18gPSBmOyB9CgoKCiAgICAg
IHZvaWQgaW5jcl9lcmVmKCk7CiAgICAgIHZvaWQgZGVjcl9lcmVmKCk7CiAgICAgIHVuc2lnbmVk
IHBlZWtfZXJlZigpIGNvbnN0OwoKCiAgICAgIHZvaWQgaW5jcl9scmVmKCk7CiAgICAgIHZvaWQg
ZGVjcl9scmVmKCk7CiAgICAgIHVuc2lnbmVkIHBlZWtfbHJlZigpIGNvbnN0OwoKICAgICAgdW5z
aWduZWQgZ2V0X3JlZnMoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25ldChvc3Ry
ZWFtJiwgdW5zaWduZWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CgogICAgICBmcmllbmQgY2xhc3Mg
TmV0U2NvcGU7CiAgICAgIE5ldE5ldCpzaWdfbmV4dF8sICpzaWdfcHJldl87CgoKCgogICAgICBm
cmllbmQgY2xhc3MgTmV0UmVsZWFzZTsKICAgICAgTmV0UmVsZWFzZSpyZWxlYXNlX2xpc3RfOwoK
ICAgIHByaXZhdGU6CiAgICAgIFR5cGUgdHlwZV87CiAgICAgIFBvcnRUeXBlIHBvcnRfdHlwZV87
CiAgICAgIGJvb2wgc2lnbmVkXzsKICAgICAgYm9vbCBpc2ludF87CgogICAgICBsb25nIG1zYl8s
IGxzYl87CgogICAgICBib29sIGxvY2FsX2ZsYWdfOwogICAgICB1bnNpZ25lZCBlcmVmX2NvdW50
XzsKICAgICAgdW5zaWduZWQgbHJlZl9jb3VudF87Cn07CgoKCgoKCmNsYXNzIE5ldEFkZFN1YiA6
IHB1YmxpYyBOZXROb2RlIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEFkZFN1YihOZXRTY29wZSpz
LCBjb25zdCBzdHJpbmcmbiwgdW5zaWduZWQgd2lkdGgpOwogICAgICB+TmV0QWRkU3ViKCk7CgoK
CiAgICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CgogICAgICBMaW5rJiBwaW5fQWNscigpOwog
ICAgICBMaW5rJiBwaW5fQWRkX1N1YigpOwogICAgICBMaW5rJiBwaW5fQ2xvY2soKTsKICAgICAg
TGluayYgcGluX0NpbigpOwogICAgICBMaW5rJiBwaW5fQ291dCgpOwogICAgICBMaW5rJiBwaW5f
T3ZlcmZsb3coKTsKCiAgICAgIExpbmsmIHBpbl9EYXRhQSh1bnNpZ25lZCBpZHgpOwogICAgICBM
aW5rJiBwaW5fRGF0YUIodW5zaWduZWQgaWR4KTsKICAgICAgTGluayYgcGluX1Jlc3VsdCh1bnNp
Z25lZCBpZHgpOwoKICAgICAgY29uc3QgTGluayYgcGluX0NvdXQoKSBjb25zdDsKICAgICAgY29u
c3QgTGluayYgcGluX0RhdGFBKHVuc2lnbmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsm
IHBpbl9EYXRhQih1bnNpZ25lZCBpZHgpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fUmVz
dWx0KHVuc2lnbmVkIGlkeCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZHVtcF9ub2RlKG9z
dHJlYW0mLCB1bnNpZ25lZCBpbmQpIGNvbnN0OwogICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9ub2Rl
KHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgZnVuY3Rvcl9ub2Rl
KERlc2lnbipkZXMsIGZ1bmN0b3JfdCpmdW4pOwp9OwoKCgoKY2xhc3MgTmV0Q0xTaGlmdCA6IHB1
YmxpYyBOZXROb2RlIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldENMU2hpZnQoTmV0U2NvcGUqcywg
Y29uc3Qgc3RyaW5nJm4sIHVuc2lnbmVkIHdpZHRoLAogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHdpZHRoX2Rpc3QpOwogICAgICB+TmV0Q0xTaGlmdCgpOwoKICAgICAgdW5zaWduZWQgd2lkdGgo
KSBjb25zdDsKICAgICAgdW5zaWduZWQgd2lkdGhfZGlzdCgpIGNvbnN0OwoKICAgICAgTGluayYg
cGluX0RpcmVjdGlvbigpOwogICAgICBMaW5rJiBwaW5fVW5kZXJmbG93KCk7CiAgICAgIExpbmsm
IHBpbl9PdmVyZmxvdygpOwogICAgICBMaW5rJiBwaW5fRGF0YSh1bnNpZ25lZCBpZHgpOwogICAg
ICBMaW5rJiBwaW5fUmVzdWx0KHVuc2lnbmVkIGlkeCk7CiAgICAgIExpbmsmIHBpbl9EaXN0YW5j
ZSh1bnNpZ25lZCBpZHgpOwoKICAgICAgY29uc3QgTGluayYgcGluX0RpcmVjdGlvbigpIGNvbnN0
OwogICAgICBjb25zdCBMaW5rJiBwaW5fVW5kZXJmbG93KCkgY29uc3Q7CiAgICAgIGNvbnN0IExp
bmsmIHBpbl9PdmVyZmxvdygpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fRGF0YSh1bnNp
Z25lZCBpZHgpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fUmVzdWx0KHVuc2lnbmVkIGlk
eCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9EaXN0YW5jZSh1bnNpZ25lZCBpZHgpIGNv
bnN0OwoKICAgICAgdmlydHVhbCB2b2lkIGR1bXBfbm9kZShvc3RyZWFtJiwgdW5zaWduZWQgaW5k
KSBjb25zdDsKICAgICAgdmlydHVhbCBib29sIGVtaXRfbm9kZShzdHJ1Y3QgdGFyZ2V0X3QqKSBj
b25zdDsKCiAgICBwcml2YXRlOgogICAgICB1bnNpZ25lZCB3aWR0aF87CiAgICAgIHVuc2lnbmVk
IHdpZHRoX2Rpc3RfOwp9OwojIDUyNSAibmV0bGlzdC5oIgpjbGFzcyBOZXRDb21wYXJlIDogcHVi
bGljIE5ldE5vZGUgewoKICAgIHB1YmxpYzoKICAgICAgTmV0Q29tcGFyZShOZXRTY29wZSpzY29w
ZSwgY29uc3Qgc3RyaW5nJm4sIHVuc2lnbmVkIHdpZHRoKTsKICAgICAgfk5ldENvbXBhcmUoKTsK
CiAgICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CgogICAgICBMaW5rJiBwaW5fQWNscigpOwog
ICAgICBMaW5rJiBwaW5fQ2xvY2soKTsKICAgICAgTGluayYgcGluX0FHQigpOwogICAgICBMaW5r
JiBwaW5fQUdFQigpOwogICAgICBMaW5rJiBwaW5fQUVCKCk7CiAgICAgIExpbmsmIHBpbl9BTkVC
KCk7CiAgICAgIExpbmsmIHBpbl9BTEIoKTsKICAgICAgTGluayYgcGluX0FMRUIoKTsKCiAgICAg
IExpbmsmIHBpbl9EYXRhQSh1bnNpZ25lZCBpZHgpOwogICAgICBMaW5rJiBwaW5fRGF0YUIodW5z
aWduZWQgaWR4KTsKCiAgICAgIGNvbnN0IExpbmsmIHBpbl9BY2xyKCkgY29uc3Q7CiAgICAgIGNv
bnN0IExpbmsmIHBpbl9DbG9jaygpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fQUdCKCkg
Y29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9BR0VCKCkgY29uc3Q7CiAgICAgIGNvbnN0IExp
bmsmIHBpbl9BRUIoKSBjb25zdDsKICAgICAgY29uc3QgTGluayYgcGluX0FORUIoKSBjb25zdDsK
ICAgICAgY29uc3QgTGluayYgcGluX0FMQigpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5f
QUxFQigpIGNvbnN0OwoKICAgICAgY29uc3QgTGluayYgcGluX0RhdGFBKHVuc2lnbmVkIGlkeCkg
Y29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9EYXRhQih1bnNpZ25lZCBpZHgpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCB2b2lkIGZ1bmN0b3Jfbm9kZShEZXNpZ24qLCBmdW5jdG9yX3QqKTsKICAg
ICAgdmlydHVhbCB2b2lkIGR1bXBfbm9kZShvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsK
ICAgICAgdmlydHVhbCBib29sIGVtaXRfbm9kZShzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKCiAg
ICBwcml2YXRlOgogICAgICB1bnNpZ25lZCB3aWR0aF87Cn07CiMgNTc1ICJuZXRsaXN0LmgiCmNs
YXNzIE5ldERpdmlkZSA6IHB1YmxpYyBOZXROb2RlIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldERp
dmlkZShOZXRTY29wZSpzY29wZSwgY29uc3Qgc3RyaW5nJm4sCiAgICAgICAgICAgICAgICB1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgd2EsIHVuc2lnbmVkIHdiKTsKICAgICAgfk5ldERpdmlkZSgp
OwoKICAgICAgdW5zaWduZWQgd2lkdGhfcigpIGNvbnN0OwogICAgICB1bnNpZ25lZCB3aWR0aF9h
KCkgY29uc3Q7CiAgICAgIHVuc2lnbmVkIHdpZHRoX2IoKSBjb25zdDsKCiAgICAgIExpbmsmIHBp
bl9EYXRhQSh1bnNpZ25lZCBpZHgpOwogICAgICBMaW5rJiBwaW5fRGF0YUIodW5zaWduZWQgaWR4
KTsKICAgICAgTGluayYgcGluX1Jlc3VsdCh1bnNpZ25lZCBpZHgpOwoKICAgICAgY29uc3QgTGlu
ayYgcGluX0RhdGFBKHVuc2lnbmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9E
YXRhQih1bnNpZ25lZCBpZHgpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fUmVzdWx0KHVu
c2lnbmVkIGlkeCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZHVtcF9ub2RlKG9zdHJlYW0m
LCB1bnNpZ25lZCBpbmQpIGNvbnN0OwogICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9ub2RlKHN0cnVj
dCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgZnVuY3Rvcl9ub2RlKERlc2ln
bipkZXMsIGZ1bmN0b3JfdCpmdW4pOwoKICAgIHByaXZhdGU6CiAgICAgIHVuc2lnbmVkIHdpZHRo
X3JfOwogICAgICB1bnNpZ25lZCB3aWR0aF9hXzsKICAgICAgdW5zaWduZWQgd2lkdGhfYl87Cn07
CiMgNjE0ICJuZXRsaXN0LmgiCmNsYXNzIE5ldE1vZHVsbyA6IHB1YmxpYyBOZXROb2RlIHsKCiAg
ICBwdWJsaWM6CiAgICAgIE5ldE1vZHVsbyhOZXRTY29wZSpzLCBjb25zdCBzdHJpbmcmbiwKICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCB3YSwgdW5zaWduZWQgd2IpOwog
ICAgICB+TmV0TW9kdWxvKCk7CgogICAgICB1bnNpZ25lZCB3aWR0aF9yKCkgY29uc3Q7CiAgICAg
IHVuc2lnbmVkIHdpZHRoX2EoKSBjb25zdDsKICAgICAgdW5zaWduZWQgd2lkdGhfYigpIGNvbnN0
OwoKICAgICAgTGluayYgcGluX0RhdGFBKHVuc2lnbmVkIGlkeCk7CiAgICAgIExpbmsmIHBpbl9E
YXRhQih1bnNpZ25lZCBpZHgpOwogICAgICBMaW5rJiBwaW5fUmVzdWx0KHVuc2lnbmVkIGlkeCk7
CgogICAgICBjb25zdCBMaW5rJiBwaW5fRGF0YUEodW5zaWduZWQgaWR4KSBjb25zdDsKICAgICAg
Y29uc3QgTGluayYgcGluX0RhdGFCKHVuc2lnbmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExp
bmsmIHBpbl9SZXN1bHQodW5zaWduZWQgaWR4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBk
dW1wX25vZGUob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9v
bCBlbWl0X25vZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBm
dW5jdG9yX25vZGUoRGVzaWduKmRlcywgZnVuY3Rvcl90KmZ1bik7CgogICAgcHJpdmF0ZToKICAg
ICAgdW5zaWduZWQgd2lkdGhfcl87CiAgICAgIHVuc2lnbmVkIHdpZHRoX2FfOwogICAgICB1bnNp
Z25lZCB3aWR0aF9iXzsKfTsKCgoKCgpjbGFzcyBOZXRGRiA6IHB1YmxpYyBOZXROb2RlIHsKCiAg
ICBwdWJsaWM6CiAgICAgIE5ldEZGKE5ldFNjb3BlKnMsIGNvbnN0IGNoYXIqbiwgdW5zaWduZWQg
d2lkdGgpOwogICAgICB+TmV0RkYoKTsKCiAgICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7Cgog
ICAgICBMaW5rJiBwaW5fQ2xvY2soKTsKICAgICAgTGluayYgcGluX0VuYWJsZSgpOwogICAgICBM
aW5rJiBwaW5fQWxvYWQoKTsKICAgICAgTGluayYgcGluX0FzZXQoKTsKICAgICAgTGluayYgcGlu
X0FjbHIoKTsKICAgICAgTGluayYgcGluX1Nsb2FkKCk7CiAgICAgIExpbmsmIHBpbl9Tc2V0KCk7
CiAgICAgIExpbmsmIHBpbl9TY2xyKCk7CgogICAgICBMaW5rJiBwaW5fRGF0YSh1bnNpZ25lZCk7
CiAgICAgIExpbmsmIHBpbl9RKHVuc2lnbmVkKTsKCiAgICAgIGNvbnN0IExpbmsmIHBpbl9DbG9j
aygpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fRW5hYmxlKCkgY29uc3Q7CiAgICAgIGNv
bnN0IExpbmsmIHBpbl9Bc2V0KCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9BY2xyKCkg
Y29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9EYXRhKHVuc2lnbmVkKSBjb25zdDsKICAgICAg
Y29uc3QgTGluayYgcGluX1EodW5zaWduZWQpIGNvbnN0OwoKICAgICAgdm9pZCBhc2V0X3ZhbHVl
KGNvbnN0IHZlcmludW0mdmFsKTsKICAgICAgY29uc3QgdmVyaW51bSYgYXNldF92YWx1ZSgpIGNv
bnN0OwoKICAgICAgdmlydHVhbCB2b2lkIGR1bXBfbm9kZShvc3RyZWFtJiwgdW5zaWduZWQgaW5k
KSBjb25zdDsKICAgICAgdmlydHVhbCBib29sIGVtaXRfbm9kZShzdHJ1Y3QgdGFyZ2V0X3QqKSBj
b25zdDsKICAgICAgdmlydHVhbCB2b2lkIGZ1bmN0b3Jfbm9kZShEZXNpZ24qZGVzLCBmdW5jdG9y
X3QqZnVuKTsKCiAgICBwcml2YXRlOgogICAgICB2ZXJpbnVtIGFzZXRfdmFsdWVfOwp9OwojIDY5
MyAibmV0bGlzdC5oIgpjbGFzcyBOZXRNZW1vcnkgewoKICAgIHB1YmxpYzoKICAgICAgTmV0TWVt
b3J5KE5ldFNjb3BlKnNjLCBjb25zdCBzdHJpbmcmbiwgbG9uZyB3LCBsb25nIHMsIGxvbmcgZSk7
CiAgICAgIH5OZXRNZW1vcnkoKTsKCgoKICAgICAgY29uc3QgY2hhcipuYW1lKCkgY29uc3Q7CgoK
ICAgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aF87IH0KCgogICAgICBj
b25zdCBOZXRTY29wZSpzY29wZSgpIGNvbnN0IHsgcmV0dXJuIHNjb3BlXzsgfTsKCgogICAgICB1
bnNpZ25lZCBjb3VudCgpIGNvbnN0OwoKCgoKICAgICAgdW5zaWduZWQgaW5kZXhfdG9fYWRkcmVz
cyhsb25nIGlkeCkgY29uc3Q7CgogICAgICB2b2lkIGR1bXAob3N0cmVhbSZvLCB1bnNpZ25lZCBs
bSkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgY2hhciogbmFtZV87CiAgICAgIHVuc2lnbmVk
IHdpZHRoXzsKICAgICAgbG9uZyBpZHhoXzsKICAgICAgbG9uZyBpZHhsXzsKCiAgICAgIGZyaWVu
ZCBjbGFzcyBOZXRSYW1EcTsKICAgICAgTmV0UmFtRHEqIHJhbV9saXN0XzsKCiAgICAgIGZyaWVu
ZCBjbGFzcyBOZXRTY29wZTsKICAgICAgTmV0TWVtb3J5KnNuZXh0XywgKnNwcmV2XzsKICAgICAg
TmV0U2NvcGUqc2NvcGVfOwoKICAgIHByaXZhdGU6CiAgICAgIE5ldE1lbW9yeShjb25zdCBOZXRN
ZW1vcnkmKTsKICAgICAgTmV0TWVtb3J5JiBvcGVyYXRvcj0gKGNvbnN0IE5ldE1lbW9yeSYpOwp9
OwojIDc0NSAibmV0bGlzdC5oIgpjbGFzcyBOZXRNdWx0IDogcHVibGljIE5ldE5vZGUgewoKICAg
IHB1YmxpYzoKICAgICAgTmV0TXVsdChOZXRTY29wZSpzYywgY29uc3Qgc3RyaW5nJm4sIHVuc2ln
bmVkIHdpZHRoLAogICAgICAgICAgICAgIHVuc2lnbmVkIHdhLCB1bnNpZ25lZCB3YiwgdW5zaWdu
ZWQgd2lkdGhfcyA9MCk7CiAgICAgIH5OZXRNdWx0KCk7CgoKCiAgICAgIHVuc2lnbmVkIHdpZHRo
X3IoKSBjb25zdDsKICAgICAgdW5zaWduZWQgd2lkdGhfYSgpIGNvbnN0OwogICAgICB1bnNpZ25l
ZCB3aWR0aF9iKCkgY29uc3Q7CiAgICAgIHVuc2lnbmVkIHdpZHRoX3MoKSBjb25zdDsKCiAgICAg
IExpbmsmIHBpbl9BY2xyKCk7CiAgICAgIExpbmsmIHBpbl9DbG9jaygpOwoKICAgICAgTGluayYg
cGluX0RhdGFBKHVuc2lnbmVkIGlkeCk7CiAgICAgIExpbmsmIHBpbl9EYXRhQih1bnNpZ25lZCBp
ZHgpOwogICAgICBMaW5rJiBwaW5fUmVzdWx0KHVuc2lnbmVkIGlkeCk7CiAgICAgIExpbmsmIHBp
bl9TdW0odW5zaWduZWQgaWR4KTsKCiAgICAgIGNvbnN0IExpbmsmIHBpbl9BY2xyKCkgY29uc3Q7
CiAgICAgIGNvbnN0IExpbmsmIHBpbl9DbG9jaygpIGNvbnN0OwoKICAgICAgY29uc3QgTGluayYg
cGluX0RhdGFBKHVuc2lnbmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9EYXRh
Qih1bnNpZ25lZCBpZHgpIGNvbnN0OwogICAgICBjb25zdCBMaW5rJiBwaW5fUmVzdWx0KHVuc2ln
bmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9TdW0odW5zaWduZWQgaWR4KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25vZGUob3N0cmVhbSYsIHVuc2lnbmVkIGlu
ZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0X25vZGUoc3RydWN0IHRhcmdldF90Kikg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBmdW5jdG9yX25vZGUoRGVzaWduKmRlcywgZnVuY3Rv
cl90KmZ1bik7CgogICAgcHJpdmF0ZToKICAgICAgdW5zaWduZWQgd2lkdGhfcl87CiAgICAgIHVu
c2lnbmVkIHdpZHRoX2FfOwogICAgICB1bnNpZ25lZCB3aWR0aF9iXzsKICAgICAgdW5zaWduZWQg
d2lkdGhfc187Cn07CiMgNzk3ICJuZXRsaXN0LmgiCmNsYXNzIE5ldE11eCA6IHB1YmxpYyBOZXRO
b2RlIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldE11eChOZXRTY29wZSpzY29wZSwgY29uc3Qgc3Ry
aW5nJm4sCiAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgc2l6ZSwgdW5zaWdu
ZWQgc2Vsdyk7CiAgICAgIH5OZXRNdXgoKTsKCiAgICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7
CiAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKICAgICAgdW5zaWduZWQgc2VsX3dpZHRoKCkg
Y29uc3Q7CgogICAgICBMaW5rJiBwaW5fQWNscigpOwogICAgICBMaW5rJiBwaW5fQ2xvY2soKTsK
CiAgICAgIExpbmsmIHBpbl9SZXN1bHQodW5zaWduZWQpOwogICAgICBMaW5rJiBwaW5fRGF0YSh1
bnNpZ25lZCB3aSwgdW5zaWduZWQgc2kpOwogICAgICBMaW5rJiBwaW5fU2VsKHVuc2lnbmVkKTsK
CiAgICAgIGNvbnN0IExpbmsmIHBpbl9BY2xyKCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBp
bl9DbG9jaygpIGNvbnN0OwoKICAgICAgY29uc3QgTGluayYgcGluX1Jlc3VsdCh1bnNpZ25lZCkg
Y29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9EYXRhKHVuc2lnbmVkLCB1bnNpZ25lZCkgY29u
c3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9TZWwodW5zaWduZWQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCB2b2lkIGR1bXBfbm9kZShvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsKICAgICAg
dmlydHVhbCBib29sIGVtaXRfbm9kZShzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKICAgICAgdmly
dHVhbCB2b2lkIGZ1bmN0b3Jfbm9kZShEZXNpZ24qZGVzLCBmdW5jdG9yX3QqZnVuKTsKCiAgICBw
cml2YXRlOgogICAgICB1bnNpZ25lZCB3aWR0aF87CiAgICAgIHVuc2lnbmVkIHNpemVfOwogICAg
ICB1bnNpZ25lZCBzd2lkdGhfOwp9OwoKCgoKCgoKY2xhc3MgTmV0UmFtRHEgOiBwdWJsaWMgTmV0
Tm9kZSB7CgogICAgcHVibGljOgogICAgICBOZXRSYW1EcShOZXRTY29wZSpzLCBjb25zdCBzdHJp
bmcmbmFtZSwgTmV0TWVtb3J5Km1lbSwgdW5zaWduZWQgYXdpZCk7CiAgICAgIH5OZXRSYW1EcSgp
OwoKICAgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdDsKICAgICAgdW5zaWduZWQgYXdpZHRoKCkg
Y29uc3Q7CiAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKICAgICAgY29uc3QgTmV0TWVtb3J5
Km1lbSgpIGNvbnN0OwoKICAgICAgTGluayYgcGluX0luQ2xvY2soKTsKICAgICAgTGluayYgcGlu
X091dENsb2NrKCk7CiAgICAgIExpbmsmIHBpbl9XRSgpOwoKICAgICAgTGluayYgcGluX0FkZHJl
c3ModW5zaWduZWQgaWR4KTsKICAgICAgTGluayYgcGluX0RhdGEodW5zaWduZWQgaWR4KTsKICAg
ICAgTGluayYgcGluX1EodW5zaWduZWQgaWR4KTsKCiAgICAgIGNvbnN0IExpbmsmIHBpbl9JbkNs
b2NrKCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9PdXRDbG9jaygpIGNvbnN0OwogICAg
ICBjb25zdCBMaW5rJiBwaW5fV0UoKSBjb25zdDsKCiAgICAgIGNvbnN0IExpbmsmIHBpbl9BZGRy
ZXNzKHVuc2lnbmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9EYXRhKHVuc2ln
bmVkIGlkeCkgY29uc3Q7CiAgICAgIGNvbnN0IExpbmsmIHBpbl9RKHVuc2lnbmVkIGlkeCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZHVtcF9ub2RlKG9zdHJlYW0mLCB1bnNpZ25lZCBpbmQp
IGNvbnN0OwogICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9ub2RlKHN0cnVjdCB0YXJnZXRfdCopIGNv
bnN0OwoKCgoKICAgICAgdm9pZCBhYnNvcmJfcGFydG5lcnMoKTsKCgoKICAgICAgdW5zaWduZWQg
Y291bnRfcGFydG5lcnMoKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBOZXRNZW1vcnkqbWVt
XzsKICAgICAgTmV0UmFtRHEqbmV4dF87CiAgICAgIHVuc2lnbmVkIGF3aWR0aF87Cgp9OwoKCgoK
CmNsYXNzIE5ldFVzZXJGdW5jIDogcHVibGljIE5ldE5vZGUgewoKICAgIHB1YmxpYzoKICAgICAg
TmV0VXNlckZ1bmMoTmV0U2NvcGUqcywgY29uc3QgY2hhcipuLCBOZXRTY29wZSpkZWYpOwogICAg
ICB+TmV0VXNlckZ1bmMoKTsKCiAgICAgIHVuc2lnbmVkIHBvcnRfY291bnQoKSBjb25zdDsKICAg
ICAgdW5zaWduZWQgcG9ydF93aWR0aCh1bnNpZ25lZCBwb3J0KSBjb25zdDsKICAgICAgTGluayYg
cG9ydF9waW4odW5zaWduZWQgcG9ydCwgdW5zaWduZWQgaWR4KTsKCiAgICAgIGNvbnN0IE5ldFNj
b3BlKiBkZWYoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25vZGUob3N0cmVhbSYs
IHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0X25vZGUoc3RydWN0
IHRhcmdldF90KikgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgTmV0U2NvcGUqZGVmXzsKfTsK
IyA5MTggIm5ldGxpc3QuaCIKY2xhc3MgTmV0RXhwciA6IHB1YmxpYyBMaW5lSW5mbyB7CiAgICBw
dWJsaWM6CiAgICAgIGV4cGxpY2l0IE5ldEV4cHIodW5zaWduZWQgdyA9MCk7CiAgICAgIHZpcnR1
YWwgfk5ldEV4cHIoKSA9MDsKCiAgICAgIHZpcnR1YWwgdm9pZCBleHByX3NjYW4oc3RydWN0IGV4
cHJfc2Nhbl90KikgY29uc3QgPTA7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wKG9zdHJlYW0mKSBj
b25zdDsKCgogICAgICB1bnNpZ25lZCBleHByX3dpZHRoKCkgY29uc3QgeyByZXR1cm4gd2lkdGhf
OyB9CgoKCiAgICAgIHZpcnR1YWwgYm9vbCBzZXRfd2lkdGgodW5zaWduZWQpOwoKCgogICAgICBi
b29sIGhhc19zaWduKCkgY29uc3Q7CiAgICAgIHZvaWQgY2FzdF9zaWduZWQoYm9vbCBmbGFnKTsK
IyA5NDYgIm5ldGxpc3QuaCIKICAgICAgdmlydHVhbCBib29sIGhhc193aWR0aCgpIGNvbnN0OwoK
CgoKCgogICAgICB2aXJ0dWFsIE5ldEV4cHIqZXZhbF90cmVlKCk7CgoKCiAgICAgIHZpcnR1YWwg
TmV0RXhwcipkdXBfZXhwcigpIGNvbnN0ID0wOwoKCgoKICAgICAgdmlydHVhbCBOZXh1c1NldCog
bmV4X2lucHV0KCkgPTA7CgoKCiAgICAgIHZpcnR1YWwgTmV0TmV0KnN5bnRoZXNpemUoRGVzaWdu
Kik7CgoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBleHByX3dpZHRoKHVuc2lnbmVkIHcpIHsg
d2lkdGhfID0gdzsgfQoKICAgIHByaXZhdGU6CiAgICAgIHVuc2lnbmVkIHdpZHRoXzsKICAgICAg
Ym9vbCBzaWduZWRfZmxhZ187CgogICAgcHJpdmF0ZToKICAgICAgTmV0RXhwcihjb25zdCBOZXRF
eHByJik7CiAgICAgIE5ldEV4cHImIG9wZXJhdG9yPShjb25zdCBOZXRFeHByJik7Cn07CgoKCgoK
CmNsYXNzIE5ldEVDb25zdCA6IHB1YmxpYyBOZXRFeHByIHsKCiAgICBwdWJsaWM6CiAgICAgIGV4
cGxpY2l0IE5ldEVDb25zdChjb25zdCB2ZXJpbnVtJnZhbCk7CiAgICAgIH5OZXRFQ29uc3QoKTsK
CiAgICAgIGNvbnN0IHZlcmludW0mdmFsdWUoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgYm9vbCBz
ZXRfd2lkdGgodW5zaWduZWQgdyk7CgogICAgICB2aXJ0dWFsIGJvb2wgaGFzX3dpZHRoKCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZXhwcl9zY2FuKHN0cnVjdCBleHByX3NjYW5fdCopIGNv
bnN0OwogICAgICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFtJikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIE5ldEVDb25zdCogZHVwX2V4cHIoKSBjb25zdDsKICAgICAgdmlydHVhbCBOZXROZXQqc3lu
dGhlc2l6ZShEZXNpZ24qKTsKICAgICAgdmlydHVhbCBOZXh1c1NldCogbmV4X2lucHV0KCk7Cgog
ICAgcHJpdmF0ZToKICAgICAgdmVyaW51bSB2YWx1ZV87Cn07CgoKCgoKCgpjbGFzcyBOZXRTdWJu
ZXQgOiBwdWJsaWMgTmV0TmV0IHsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IE5ldFN1Ym5l
dChOZXROZXQqc2lnLCB1bnNpZ25lZCBvZmYsIHVuc2lnbmVkIHdpZCk7CiAgICAgIHZpcnR1YWwg
dm9pZCBkdW1wX25ldChvc3RyZWFtJiwgdW5zaWduZWQpIGNvbnN0Owp9OwojIDEwMjkgIm5ldGxp
c3QuaCIKY2xhc3MgTmV0QlVGWiA6IHB1YmxpYyBOZXROb2RlIHsKCiAgICBwdWJsaWM6CiAgICAg
IGV4cGxpY2l0IE5ldEJVRlooTmV0U2NvcGUqcywgY29uc3Qgc3RyaW5nJm4pOwogICAgICB+TmV0
QlVGWigpOwoKICAgICAgdmlydHVhbCB2b2lkIGR1bXBfbm9kZShvc3RyZWFtJiwgdW5zaWduZWQg
aW5kKSBjb25zdDsKICAgICAgdmlydHVhbCBib29sIGVtaXRfbm9kZShzdHJ1Y3QgdGFyZ2V0X3Qq
KSBjb25zdDsKfTsKIyAxMDUwICJuZXRsaXN0LmgiCmNsYXNzIE5ldENhc2VDbXAgOiBwdWJsaWMg
TmV0Tm9kZSB7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRDYXNlQ21wKE5ldFNjb3Bl
KnMsIGNvbnN0IHN0cmluZyZuKTsKICAgICAgfk5ldENhc2VDbXAoKTsKCiAgICAgIHZpcnR1YWwg
dm9pZCBkdW1wX25vZGUob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1
YWwgYm9vbCBlbWl0X25vZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7Cn07CiMgMTA2OCAibmV0
bGlzdC5oIgpjbGFzcyBOZXRDb25zdCA6IHB1YmxpYyBOZXROb2RlIHsKCiAgICBwdWJsaWM6CiAg
ICAgIGV4cGxpY2l0IE5ldENvbnN0KE5ldFNjb3BlKnMsIGNvbnN0IHN0cmluZyZuLCB2ZXJpbnVt
OjpWIHYpOwogICAgICBleHBsaWNpdCBOZXRDb25zdChOZXRTY29wZSpzLCBjb25zdCBzdHJpbmcm
biwgY29uc3QgdmVyaW51bSZ2YWwpOwogICAgICB+TmV0Q29uc3QoKTsKCiAgICAgIHZlcmludW06
OlYgdmFsdWUodW5zaWduZWQgaWR4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0X25v
ZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBmdW5jdG9yX25v
ZGUoRGVzaWduKiwgZnVuY3Rvcl90Kik7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25vZGUob3N0
cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgdmVyaW51bTo6
Vip2YWx1ZV87Cn07CiMgMTA5OSAibmV0bGlzdC5oIgpjbGFzcyBOZXRMb2dpYyA6IHB1YmxpYyBO
ZXROb2RlIHsKCiAgICBwdWJsaWM6CiAgICAgIGVudW0gVFlQRSB7IEFORCwgQlVGLCBCVUZJRjAs
IEJVRklGMSwgTkFORCwgTk1PUywgTk9SLCBOT1QsCiAgICAgICAgICAgICAgICAgIE5PVElGMCwg
Tk9USUYxLCBPUiwgUFVMTERPV04sIFBVTExVUCwgUk5NT1MsIFJQTU9TLAogICAgICAgICAgICAg
ICAgICBQTU9TLCBYTk9SLCBYT1IgfTsKCiAgICAgIGV4cGxpY2l0IE5ldExvZ2ljKE5ldFNjb3Bl
KnMsIGNvbnN0IHN0cmluZyZuLCB1bnNpZ25lZCBwaW5zLCBUWVBFIHQpOwoKICAgICAgVFlQRSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZV87IH0KCiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25v
ZGUob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0
X25vZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBmdW5jdG9y
X25vZGUoRGVzaWduKiwgZnVuY3Rvcl90Kik7CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgVFlQ
RSB0eXBlXzsKfTsKIyAxMTY2ICJuZXRsaXN0LmgiCiMgMSAiUFVkcC5oIiAxCiMgMjIgIlBVZHAu
aCIKI2lkZW50ICIkSWQ6IFBVZHAuaCx2IDEuNyAyMDAyLzA4LzEyIDAxOjM0OjU4IHN0ZXZlIEV4
cCAkIgoKCgoKCgoKY2xhc3MgUEV4cHI7CgpzdmVjdG9yPHN0cmluZz46OnN2ZWN0b3I8c3RyaW5n
Pih1bnNpZ25lZCBzaXplKQo6IG5pdGVtc18oc2l6ZSksIGl0ZW1zXyhuZXcgc3RyaW5nW3NpemVd
KQp7Cn0KIyA1OCAiUFVkcC5oIgpjbGFzcyBQVWRwIHsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxp
Y2l0IFBVZHAoY29uc3Qgc3RyaW5nJm4sIHVuc2lnbmVkIG5wb3J0cykKICAgICAgOiBwb3J0cyhu
cG9ydHMpLCBzZXF1ZW50aWFsKGZhbHNlKSwgaW5pdGlhbCh2ZXJpbnVtOjpWeCksIG5hbWVfKG4p
IHsgfQoKICAgICAgc3ZlY3RvcjxzdHJpbmc+cG9ydHM7CiAgICAgIGJvb2wgc2VxdWVudGlhbDsK
CiAgICAgIHN2ZWN0b3I8c3RyaW5nPnRpbnB1dDsKICAgICAgc3ZlY3RvcjxjaGFyPiB0Y3VycmVu
dDsKICAgICAgc3ZlY3RvcjxjaGFyPiB0b3V0cHV0OwoKICAgICAgdmVyaW51bTo6ViBpbml0aWFs
OwoKICAgICAgbWFwPHN0cmluZyxQRXhwcio+IGF0dHJpYnV0ZXM7CgogICAgICB2b2lkIGR1bXAo
b3N0cmVhbSZvdXQpIGNvbnN0OwoKICAgICAgY29uc3Qgc3RyaW5nIG5hbWVfOwogICAgcHJpdmF0
ZToKCiAgICBwcml2YXRlOgogICAgICBQVWRwKGNvbnN0IFBVZHAmKTsKICAgICAgUFVkcCYgb3Bl
cmF0b3I9IChjb25zdCBQVWRwJik7Cn07CiMgMTE2NyAibmV0bGlzdC5oIiAyCgpjbGFzcyBOZXRV
RFAgOiBwdWJsaWMgTmV0Tm9kZSB7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRVRFAo
TmV0U2NvcGUqcywgY29uc3Qgc3RyaW5nJm4sIHVuc2lnbmVkIHBpbnMsIFBVZHAqdSk7CgogICAg
ICB2aXJ0dWFsIGJvb2wgZW1pdF9ub2RlKHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2
aXJ0dWFsIHZvaWQgZHVtcF9ub2RlKG9zdHJlYW0mLCB1bnNpZ25lZCBpbmQpIGNvbnN0OwoKCgoK
CiAgICAgIGJvb2wgZmlyc3Qoc3RyaW5nJmlucCwgY2hhciZvdXQpIGNvbnN0OwogICAgICBib29s
IG5leHQoc3RyaW5nJmlucCwgY2hhciZvdXQpIGNvbnN0OwogICAgICB1bnNpZ25lZCByb3dzKCkg
Y29uc3QgeyByZXR1cm4gdWRwLT50aW5wdXQuY291bnQoKTsgfQoKICAgICAgdW5zaWduZWQgbmlu
KCkgY29uc3QgeyByZXR1cm4gcGluX2NvdW50KCktMTsgfQogICAgICBib29sIGlzX3NlcXVlbnRp
YWwoKSBjb25zdCB7IHJldHVybiB1ZHAtPnNlcXVlbnRpYWw7IH0KICAgICAgc3RyaW5nIHVkcF9u
YW1lKCkgY29uc3QgeyByZXR1cm4gdWRwLT5uYW1lXzsgfQogICAgICBjaGFyIGdldF9pbml0aWFs
KCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgbXV0YWJsZSB1bnNpZ25lZCB0YWJsZV9pZHg7
CiAgICAgIFBVZHAgKnVkcDsKfTsKIyAxMjAyICJuZXRsaXN0LmgiCmNsYXNzIE5ldFByb2MgOiBw
dWJsaWMgTGluZUluZm8gewoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgTmV0UHJvYygpOwog
ICAgICB2aXJ0dWFsIH5OZXRQcm9jKCk7CgoKCgogICAgICB2aXJ0dWFsIE5leHVzU2V0KiBuZXhf
aW5wdXQoKTsKCgoKICAgICAgdmlydHVhbCB2b2lkIG5leF9vdXRwdXQoTmV4dXNTZXQmKTsKCgoK
ICAgICAgdmlydHVhbCBib29sIGVtaXRfcHJvYyhzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKCgoK
ICAgICAgdmlydHVhbCBpbnQgbWF0Y2hfcHJvYyhzdHJ1Y3QgcHJvY19tYXRjaF90Kik7CgoKCiAg
ICAgIHZpcnR1YWwgYm9vbCBpc19hc3luY2hyb25vdXMoKTsKCgoKICAgICAgdmlydHVhbCBib29s
IGlzX3N5bmNocm9ub3VzKCk7CgoKICAgICAgdmlydHVhbCBib29sIHN5bnRoX2FzeW5jKERlc2ln
bipkZXMsIE5ldFNjb3BlKnNjb3BlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTmV0TmV0Km5leF9tYXAsIE5ldE5ldCpuZXhfb3V0KTsKCiAgICAgIHZpcnR1YWwgYm9vbCBz
eW50aF9zeW5jKERlc2lnbipkZXMsIE5ldFNjb3BlKnNjb3BlLCBOZXRGRipmZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmV0TmV0Km5leF9tYXAsIE5ldE5ldCpuZXhfb3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdmVjdG9yPE5ldEV2UHJvYmUq
PiZldmVudHMpOwoKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2lnbmVkIGlu
ZCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIE5ldEJsb2NrOwogICAg
ICBOZXRQcm9jKm5leHRfOwoKICAgIHByaXZhdGU6CiAgICAgIE5ldFByb2MoY29uc3QgTmV0UHJv
YyYpOwogICAgICBOZXRQcm9jJiBvcGVyYXRvcj0gKGNvbnN0IE5ldFByb2MmKTsKfTsKIyAxMjgz
ICJuZXRsaXN0LmgiCmNsYXNzIE5ldEFzc2lnbl8gewoKICAgIHB1YmxpYzoKICAgICAgTmV0QXNz
aWduXyhOZXROZXQqc2lnKTsKICAgICAgTmV0QXNzaWduXyhOZXRNZW1vcnkqbWVtKTsKICAgICAg
fk5ldEFzc2lnbl8oKTsKCgoKCiAgICAgIE5ldEV4cHIqYm11eCgpOwogICAgICBjb25zdCBOZXRF
eHByKmJtdXgoKSBjb25zdDsKCiAgICAgIHVuc2lnbmVkIGdldF9sb2ZmKCkgY29uc3Q7CgogICAg
ICB2b2lkIHNldF9ibXV4KE5ldEV4cHIqKTsKICAgICAgdm9pZCBzZXRfcGFydCh1bnNpZ25lZCBs
b2ZmLCB1bnNpZ25lZCB3aWQpOwoKCgoKICAgICAgdW5zaWduZWQgbHdpZHRoKCkgY29uc3Q7CgoK
ICAgICAgY29uc3QgY2hhcipuYW1lKCkgY29uc3Q7CgogICAgICBOZXROZXQqIHNpZygpIGNvbnN0
OwogICAgICBOZXRNZW1vcnkqbWVtKCkgY29uc3Q7CgoKICAgICAgTmV0QXNzaWduXyogbW9yZTsK
CiAgICAgIHZvaWQgZHVtcF9sdmFsKG9zdHJlYW0mbykgY29uc3Q7CgogICAgcHJpdmF0ZToKICAg
ICAgTmV0TmV0ICpzaWdfOwogICAgICBOZXRNZW1vcnkqbWVtXzsKICAgICAgTmV0RXhwcipibXV4
XzsKCiAgICAgIHVuc2lnbmVkIGxvZmZfOwogICAgICB1bnNpZ25lZCBsd2lkXzsKfTsKCmNsYXNz
IE5ldEFzc2lnbkJhc2UgOiBwdWJsaWMgTmV0UHJvYyB7CgogICAgcHVibGljOgogICAgICBOZXRB
c3NpZ25CYXNlKE5ldEFzc2lnbl8qbHYsIE5ldEV4cHIqcnYpOwogICAgICB2aXJ0dWFsIH5OZXRB
c3NpZ25CYXNlKCkgPTA7CgoKCiAgICAgIE5ldEV4cHIqcnZhbCgpOwogICAgICBjb25zdCBOZXRF
eHByKnJ2YWwoKSBjb25zdDsKCiAgICAgIHZvaWQgc2V0X3J2YWwoTmV0RXhwciopOwoKICAgICAg
TmV0QXNzaWduXyogbF92YWwodW5zaWduZWQpOwogICAgICBjb25zdCBOZXRBc3NpZ25fKiBsX3Zh
bCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgIHVuc2lnbmVkIGxfdmFsX2NvdW50KCkgY29uc3Q7Cgog
ICAgICB2b2lkIHNldF9kZWxheShOZXRFeHByKik7CiAgICAgIGNvbnN0IE5ldEV4cHIqIGdldF9k
ZWxheSgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBOZXh1c1NldCogbmV4X2lucHV0KCk7CiAgICAg
IHZpcnR1YWwgdm9pZCBuZXhfb3V0cHV0KE5leHVzU2V0Jm8pOwoKCgoKICAgICAgdW5zaWduZWQg
bHdpZHRoKCkgY29uc3Q7CgogICAgICBib29sIHN5bnRoX2FzeW5jKERlc2lnbipkZXMsIE5ldFNj
b3BlKnNjb3BlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5ldE5ldCpuZXhfbWFwLCBO
ZXROZXQqbmV4X291dCk7CgoKICAgICAgdm9pZCBkdW1wX2x2YWwob3N0cmVhbSYpIGNvbnN0OwoK
ICAgIHByaXZhdGU6CiAgICAgIE5ldEFzc2lnbl8qbHZhbF87CiAgICAgIE5ldEV4cHIgKnJ2YWxf
OwogICAgICBOZXRFeHByICpkZWxheV87Cn07CgpjbGFzcyBOZXRBc3NpZ24gOiBwdWJsaWMgTmV0
QXNzaWduQmFzZSB7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRBc3NpZ24oTmV0QXNz
aWduXypsdiwgTmV0RXhwcipydik7CiAgICAgIH5OZXRBc3NpZ24oKTsKCiAgICAgIGJvb2wgaXNf
YXN5bmNocm9ub3VzKCk7CgogICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJn
ZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIGludCBtYXRjaF9wcm9jKHN0cnVjdCBwcm9jX21h
dGNoX3QqKTsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkg
Y29uc3Q7CgogICAgcHJpdmF0ZToKfTsKCmNsYXNzIE5ldEFzc2lnbk5CIDogcHVibGljIE5ldEFz
c2lnbkJhc2UgewogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRBc3NpZ25OQihOZXRBc3Np
Z25fKmx2LCBOZXRFeHByKnJ2KTsKICAgICAgfk5ldEFzc2lnbk5CKCk7CgoKICAgICAgdmlydHVh
bCBib29sIGVtaXRfcHJvYyhzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKICAgICAgdmlydHVhbCBp
bnQgbWF0Y2hfcHJvYyhzdHJ1Y3QgcHJvY19tYXRjaF90Kik7CiAgICAgIHZpcnR1YWwgdm9pZCBk
dW1wKG9zdHJlYW0mLCB1bnNpZ25lZCBpbmQpIGNvbnN0OwoKICAgIHByaXZhdGU6Cn07CiMgMTQw
MiAibmV0bGlzdC5oIgpjbGFzcyBOZXRCbG9jayA6IHB1YmxpYyBOZXRQcm9jIHsKCiAgICBwdWJs
aWM6CiAgICAgIGVudW0gVHlwZSB7IFNFUVUsIFBBUkEgfTsKCiAgICAgIE5ldEJsb2NrKFR5cGUg
dCwgTmV0U2NvcGUqc3Vic2NvcGUpOwogICAgICB+TmV0QmxvY2soKTsKCiAgICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9CiAgICAgIE5ldFNjb3BlKiBzdWJzY29wZSgpIGNv
bnN0IHsgcmV0dXJuIHN1YnNjb3BlXzsgfQoKICAgICAgdm9pZCBhcHBlbmQoTmV0UHJvYyopOwoK
ICAgICAgY29uc3QgTmV0UHJvYypwcm9jX2ZpcnN0KCkgY29uc3Q7CiAgICAgIGNvbnN0IE5ldFBy
b2MqcHJvY19uZXh0KGNvbnN0IE5ldFByb2MqY3VyKSBjb25zdDsKCgoKICAgICAgYm9vbCBzeW50
aF9hc3luYyhEZXNpZ24qZGVzLCBOZXRTY29wZSpzY29wZSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOZXROZXQqbmV4X21hcCwgTmV0TmV0Km5leF9vdXQpOwoKICAgICAgYm9vbCBzeW50
aF9zeW5jKERlc2lnbipkZXMsIE5ldFNjb3BlKnNjb3BlLCBOZXRGRipmZiwKICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE5ldE5ldCpuZXhfbWFwLCBOZXROZXQqbmV4X291dCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN2ZWN0b3I8TmV0RXZQcm9iZSo+JmV2ZW50cyk7CgoKCgogICAg
ICB2b2lkIGVtaXRfcmVjdXJzZShzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwogICAgICB2aXJ0dWFsIHZvaWQgbmV4X291dHB1dChO
ZXh1c1NldCYpOwogICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJnZXRfdCop
IGNvbnN0OwogICAgICB2aXJ0dWFsIGludCBtYXRjaF9wcm9jKHN0cnVjdCBwcm9jX21hdGNoX3Qq
KTsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7
CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgVHlwZSB0eXBlXzsKICAgICAgTmV0U2NvcGUqc3Vi
c2NvcGVfOwoKICAgICAgTmV0UHJvYypsYXN0XzsKfTsKIyAxNDU2ICJuZXRsaXN0LmgiCmNsYXNz
IE5ldENhc2UgOiBwdWJsaWMgTmV0UHJvYyB7CgogICAgcHVibGljOgogICAgICBlbnVtIFRZUEUg
eyBFUSwgRVFYLCBFUVogfTsKICAgICAgTmV0Q2FzZShUWVBFIGMsIE5ldEV4cHIqZXgsIHVuc2ln
bmVkIGNudCk7CiAgICAgIH5OZXRDYXNlKCk7CgogICAgICB2b2lkIHNldF9jYXNlKHVuc2lnbmVk
IGlkeCwgTmV0RXhwcipleCwgTmV0UHJvYypzdCk7CgogICAgICBUWVBFIHR5cGUoKSBjb25zdDsK
ICAgICAgY29uc3QgTmV0RXhwcipleHByKCkgY29uc3QgeyByZXR1cm4gZXhwcl87IH0KICAgICAg
dW5zaWduZWQgbml0ZW1zKCkgY29uc3QgeyByZXR1cm4gbml0ZW1zXzsgfQoKICAgICAgY29uc3Qg
TmV0RXhwcipleHByKHVuc2lnbmVkIGlkeCkgY29uc3QgeyByZXR1cm4gaXRlbXNfW2lkeF0uZ3Vh
cmQ7fQogICAgICBjb25zdCBOZXRQcm9jKnN0YXQodW5zaWduZWQgaWR4KSBjb25zdCB7IHJldHVy
biBpdGVtc19baWR4XS5zdGF0ZW1lbnQ7IH0KCiAgICAgIHZpcnR1YWwgTmV4dXNTZXQqIG5leF9p
bnB1dCgpOwogICAgICB2aXJ0dWFsIHZvaWQgbmV4X291dHB1dChOZXh1c1NldCZvdXQpOwoKICAg
ICAgYm9vbCBzeW50aF9hc3luYyhEZXNpZ24qZGVzLCBOZXRTY29wZSpzY29wZSwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOZXROZXQqbmV4X21hcCwgTmV0TmV0Km5leF9vdXQpOwoKICAg
ICAgdmlydHVhbCBib29sIGVtaXRfcHJvYyhzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKICAgICAg
dmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CgogICAgcHJp
dmF0ZToKCiAgICAgIFRZUEUgdHlwZV87CgogICAgICBzdHJ1Y3QgSXRlbSB7CiAgICAgICAgICAg
IE5ldEV4cHIqZ3VhcmQ7CiAgICAgICAgICAgIE5ldFByb2Mqc3RhdGVtZW50OwogICAgICB9OwoK
ICAgICAgTmV0RXhwciogZXhwcl87CiAgICAgIHVuc2lnbmVkIG5pdGVtc187CiAgICAgIEl0ZW0q
aXRlbXNfOwp9OwojIDE1MDUgIm5ldGxpc3QuaCIKY2xhc3MgTmV0Q0Fzc2lnbiA6IHB1YmxpYyBO
ZXRQcm9jLCBwdWJsaWMgTmV0Tm9kZSB7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRD
QXNzaWduKE5ldFNjb3BlKnMsIGNvbnN0IHN0cmluZyZuLCBOZXROZXQqbCk7CiAgICAgIH5OZXRD
QXNzaWduKCk7CgogICAgICBjb25zdCBMaW5rJiBsdmFsX3Bpbih1bnNpZ25lZCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIE5leHVzU2V0KiBuZXhfaW5wdXQoKTsKICAgICAgdmlydHVhbCB2b2lkIGR1
bXAob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0
X3Byb2Moc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25v
ZGUob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0
X25vZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CgogICAgICBjb25zdCBOZXROZXQqbHZhbCgp
IGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIE5ldE5ldCpsdmFsXzsKCiAgICBwcml2YXRlOgog
ICAgICBOZXRDQXNzaWduKGNvbnN0IE5ldENBc3NpZ24mKTsKICAgICAgTmV0Q0Fzc2lnbiYgb3Bl
cmF0b3I9IChjb25zdCBOZXRDQXNzaWduJik7Cn07CgoKCgpjbGFzcyBOZXRDb25kaXQgOiBwdWJs
aWMgTmV0UHJvYyB7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRDb25kaXQoTmV0RXhw
cipleCwgTmV0UHJvYyppLCBOZXRQcm9jKmUpOwogICAgICB+TmV0Q29uZGl0KCk7CgogICAgICBj
b25zdCBOZXRFeHByKmV4cHIoKSBjb25zdDsKICAgICAgTmV0RXhwcipleHByKCk7CgogICAgICBO
ZXRQcm9jKiBpZl9jbGF1c2UoKTsKICAgICAgTmV0UHJvYyogZWxzZV9jbGF1c2UoKTsKCgogICAg
ICB2b2lkIHNldF9leHByKE5ldEV4cHIqZXgpOwoKICAgICAgYm9vbCBlbWl0X3JlY3Vyc2VfaWYo
c3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIGJvb2wgZW1pdF9yZWN1cnNlX2Vsc2Uoc3Ry
dWN0IHRhcmdldF90KikgY29uc3Q7CgogICAgICB2aXJ0dWFsIE5leHVzU2V0KiBuZXhfaW5wdXQo
KTsKICAgICAgdmlydHVhbCB2b2lkIG5leF9vdXRwdXQoTmV4dXNTZXQmbyk7CgogICAgICBib29s
IGlzX2FzeW5jaHJvbm91cygpOwogICAgICBib29sIHN5bnRoX2FzeW5jKERlc2lnbipkZXMsIE5l
dFNjb3BlKnNjb3BlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5ldE5ldCpuZXhfbWFw
LCBOZXROZXQqbmV4X291dCk7CgogICAgICBib29sIHN5bnRoX3N5bmMoRGVzaWduKmRlcywgTmV0
U2NvcGUqc2NvcGUsIE5ldEZGKmZmLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmV0TmV0
Km5leF9tYXAsIE5ldE5ldCpuZXhfb3V0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Zl
Y3RvcjxOZXRFdlByb2JlKj4mZXZlbnRzKTsKCiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0X3Byb2Mo
c3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaW50IG1hdGNoX3Byb2Moc3Ry
dWN0IHByb2NfbWF0Y2hfdCopOwogICAgICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFtJiwgdW5z
aWduZWQgaW5kKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBOZXRFeHByKiBleHByXzsKICAg
ICAgTmV0UHJvYyppZl87CiAgICAgIE5ldFByb2MqZWxzZV87Cn07CgoKCgoKCgpjbGFzcyBOZXRE
ZWFzc2lnbiA6IHB1YmxpYyBOZXRQcm9jIHsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IE5l
dERlYXNzaWduKE5ldE5ldCpsKTsKICAgICAgfk5ldERlYXNzaWduKCk7CgogICAgICBjb25zdCBO
ZXROZXQqbHZhbCgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBib29sIGVtaXRfcHJvYyhzdHJ1Y3Qg
dGFyZ2V0X3QqKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2ln
bmVkIGluZCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgTmV0TmV0Kmx2YWxfOwoKICAgIHBy
aXZhdGU6CiAgICAgIE5ldERlYXNzaWduKGNvbnN0IE5ldERlYXNzaWduJik7CiAgICAgIE5ldERl
YXNzaWduJiBvcGVyYXRvcj0gKGNvbnN0IE5ldERlYXNzaWduJik7Cn07CiMgMTYwNSAibmV0bGlz
dC5oIgpjbGFzcyBOZXREaXNhYmxlIDogcHVibGljIE5ldFByb2MgewoKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQgTmV0RGlzYWJsZShOZXRTY29wZSp0Z3QpOwogICAgICB+TmV0RGlzYWJsZSgp
OwoKICAgICAgY29uc3QgTmV0U2NvcGUqdGFyZ2V0KCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGJv
b2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcChvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBO
ZXRTY29wZSp0YXJnZXRfOwoKICAgIHByaXZhdGU6CiAgICAgIE5ldERpc2FibGUoY29uc3QgTmV0
RGlzYWJsZSYpOwogICAgICBOZXREaXNhYmxlJiBvcGVyYXRvcj0gKGNvbnN0IE5ldERpc2FibGUm
KTsKfTsKIyAxNjU1ICJuZXRsaXN0LmgiCmNsYXNzIE5ldEV2ZW50IDogcHVibGljIExpbmVJbmZv
IHsKCiAgICAgIGZyaWVuZCBjbGFzcyBOZXRTY29wZTsKICAgICAgZnJpZW5kIGNsYXNzIE5ldEV2
UHJvYmU7CiAgICAgIGZyaWVuZCBjbGFzcyBOZXRFdlRyaWc7CiAgICAgIGZyaWVuZCBjbGFzcyBO
ZXRFdldhaXQ7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRFdmVudCAoY29uc3Qgc3Ry
aW5nJm4pOwogICAgICB+TmV0RXZlbnQoKTsKCiAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25z
dDsKICAgICAgc3RyaW5nIGZ1bGxfbmFtZSgpIGNvbnN0OwoKCiAgICAgIHVuc2lnbmVkIG5wcm9i
ZSgpIGNvbnN0OwogICAgICBOZXRFdlByb2JlKiBwcm9iZSh1bnNpZ25lZCk7CiAgICAgIGNvbnN0
IE5ldEV2UHJvYmUqIHByb2JlKHVuc2lnbmVkKSBjb25zdDsKCgogICAgICB1bnNpZ25lZCBud2Fp
dCgpIGNvbnN0OwoKICAgICAgdW5zaWduZWQgbnRyaWcoKSBjb25zdDsKCiAgICAgIE5ldFNjb3Bl
KiBzY29wZSgpOwogICAgICBjb25zdCBOZXRTY29wZSogc2NvcGUoKSBjb25zdDsKCiAgICAgIHZv
aWQgbmV4X291dHB1dChOZXh1c1NldCYpOwoKCgogICAgICB2b2lkIGZpbmRfc2ltaWxhcl9ldmVu
dChsaXN0PE5ldEV2ZW50Kj4mKTsKCgoKCiAgICAgIHZvaWQgcmVwbGFjZV9ldmVudChOZXRFdmVu
dCp0aGF0KTsKCiAgICBwcml2YXRlOgoKCiAgICAgIE5leHVzU2V0Km5leF9hc3luY18oKTsKCiAg
ICBwcml2YXRlOgogICAgICBjaGFyKiBuYW1lXzsKCgogICAgICBOZXRTY29wZSpzY29wZV87CiAg
ICAgIE5ldEV2ZW50KnNuZXh0XzsKCgogICAgICBOZXRFdlByb2JlKnByb2Jlc187CgoKICAgICAg
TmV0RXZUcmlnKiB0cmlnXzsKCgogICAgICB1bnNpZ25lZCB3YWl0cmVmXzsKICAgICAgc3RydWN0
IHdjZWxsXyB7CiAgICAgICAgICAgIE5ldEV2V2FpdCpvYmo7CiAgICAgICAgICAgIHN0cnVjdCB3
Y2VsbF8qbmV4dDsKICAgICAgfTsKICAgICAgc3RydWN0IHdjZWxsXyAqd2xpc3RfOwoKICAgIHBy
aXZhdGU6CiAgICAgIE5ldEV2ZW50KGNvbnN0IE5ldEV2ZW50Jik7CiAgICAgIE5ldEV2ZW50JiBv
cGVyYXRvcj0gKGNvbnN0IE5ldEV2ZW50Jik7Cn07CgpjbGFzcyBOZXRFdlRyaWcgOiBwdWJsaWMg
TmV0UHJvYyB7CgogICAgICBmcmllbmQgY2xhc3MgTmV0RXZlbnQ7CgogICAgcHVibGljOgogICAg
ICBleHBsaWNpdCBOZXRFdlRyaWcoTmV0RXZlbnQqdGd0KTsKICAgICAgfk5ldEV2VHJpZygpOwoK
ICAgICAgY29uc3QgTmV0RXZlbnQqZXZlbnQoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgYm9vbCBl
bWl0X3Byb2Moc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1w
KG9zdHJlYW0mLCB1bnNpZ25lZCBpbmQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIE5ldEV2
ZW50KmV2ZW50XzsKCiAgICAgIE5ldEV2VHJpZyplbmV4dF87Cn07CgpjbGFzcyBOZXRFdldhaXQg
OiBwdWJsaWMgTmV0UHJvYyB7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRFdldhaXQo
TmV0UHJvYypzdCk7CiAgICAgIH5OZXRFdldhaXQoKTsKCiAgICAgIHZvaWQgYWRkX2V2ZW50KE5l
dEV2ZW50KnRndCk7CiAgICAgIHZvaWQgcmVwbGFjZV9ldmVudChOZXRFdmVudCpvcmlnLCBOZXRF
dmVudCpyZXBsKTsKCiAgICAgIHVuc2lnbmVkIG5ldmVudHMoKSBjb25zdDsKICAgICAgY29uc3Qg
TmV0RXZlbnQqZXZlbnQodW5zaWduZWQpIGNvbnN0OwogICAgICBOZXRFdmVudCpldmVudCh1bnNp
Z25lZCk7CgogICAgICBOZXRQcm9jKnN0YXRlbWVudCgpOwoKICAgICAgdmlydHVhbCBib29sIGVt
aXRfcHJvYyhzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25zdDsKICAgICAgYm9vbCBlbWl0X3JlY3Vyc2Uo
c3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaW50IG1hdGNoX3Byb2Moc3Ry
dWN0IHByb2NfbWF0Y2hfdCopOwoKCgogICAgICB2aXJ0dWFsIGJvb2wgaXNfYXN5bmNocm9ub3Vz
KCk7CgoKCiAgICAgIHZpcnR1YWwgYm9vbCBpc19zeW5jaHJvbm91cygpOwoKICAgICAgdmlydHVh
bCB2b2lkIG5leF9vdXRwdXQoTmV4dXNTZXQmb3V0KTsKCiAgICAgIHZpcnR1YWwgYm9vbCBzeW50
aF9hc3luYyhEZXNpZ24qZGVzLCBOZXRTY29wZSpzY29wZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE5ldE5ldCpuZXhfbWFwLCBOZXROZXQqbmV4X291dCk7CgogICAgICB2
aXJ0dWFsIGJvb2wgc3ludGhfc3luYyhEZXNpZ24qZGVzLCBOZXRTY29wZSpzY29wZSwgTmV0RkYq
ZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5ldE5ldCpuZXhfbWFwLCBO
ZXROZXQqbmV4X291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZlY3Rv
cjxOZXRFdlByb2JlKj4mZXZlbnRzKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wKG9zdHJlYW0m
LCB1bnNpZ25lZCBpbmQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIE5ldFByb2Mqc3RhdGVt
ZW50XzsKCiAgICAgIHVuc2lnbmVkIG5ldmVudHNfOwogICAgICBOZXRFdmVudCoqZXZlbnRzXzsK
fTsKCmNsYXNzIE5ldEV2UHJvYmUgOiBwdWJsaWMgTmV0Tm9kZSB7CgogICAgICBmcmllbmQgY2xh
c3MgTmV0RXZlbnQ7CgogICAgcHVibGljOgogICAgICBlbnVtIGVkZ2VfdCB7IEFOWUVER0UsIFBP
U0VER0UsIE5FR0VER0UgfTsKCiAgICAgIGV4cGxpY2l0IE5ldEV2UHJvYmUoTmV0U2NvcGUqcywg
Y29uc3Qgc3RyaW5nJm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0RXZlbnQqdGd0LCBl
ZGdlX3QgdCwgdW5zaWduZWQgcCk7CiAgICAgIH5OZXRFdlByb2JlKCk7CgogICAgICBlZGdlX3Qg
ZWRnZSgpIGNvbnN0OwogICAgICBOZXRFdmVudCogZXZlbnQoKTsKICAgICAgY29uc3QgTmV0RXZl
bnQqIGV2ZW50KCkgY29uc3Q7CgogICAgICB2b2lkIGZpbmRfc2ltaWxhcl9wcm9iZXMobGlzdDxO
ZXRFdlByb2JlKj4mKTsKCiAgICAgIHZpcnR1YWwgYm9vbCBlbWl0X25vZGUoc3RydWN0IHRhcmdl
dF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wX25vZGUob3N0cmVhbSYsIHVuc2ln
bmVkIGluZCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgTmV0RXZlbnQqZXZlbnRfOwogICAg
ICBlZGdlX3QgZWRnZV87CgogICAgICBOZXRFdlByb2JlKmVuZXh0XzsKfTsKIyAxODI1ICJuZXRs
aXN0LmgiCmNsYXNzIE5ldEZvcmNlIDogcHVibGljIE5ldFByb2MsIHB1YmxpYyBOZXROb2RlIHsK
CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IE5ldEZvcmNlKE5ldFNjb3BlKnMsIGNvbnN0IHN0
cmluZyZuLCBOZXROZXQqbCk7CiAgICAgIH5OZXRGb3JjZSgpOwoKICAgICAgY29uc3QgTGluayYg
bHZhbF9waW4odW5zaWduZWQpIGNvbnN0OwoKICAgICAgY29uc3QgTmV0TmV0Kmx2YWwoKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwoKICAgICAgdmlydHVhbCB2
b2lkIGR1bXAob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9v
bCBlbWl0X3Byb2Moc3RydWN0IHRhcmdldF90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBk
dW1wX25vZGUob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9v
bCBlbWl0X25vZGUoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAg
TmV0TmV0Kmx2YWxfOwp9OwoKCgoKCmNsYXNzIE5ldEZvcmV2ZXIgOiBwdWJsaWMgTmV0UHJvYyB7
CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBOZXRGb3JldmVyKE5ldFByb2Mqcyk7CiAgICAg
IH5OZXRGb3JldmVyKCk7CgogICAgICB2b2lkIGVtaXRfcmVjdXJzZShzdHJ1Y3QgdGFyZ2V0X3Qq
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwogICAgICB2aXJ0
dWFsIGJvb2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFs
IHZvaWQgZHVtcChvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsKCiAgICBwcml2YXRlOgog
ICAgICBOZXRQcm9jKnN0YXRlbWVudF87Cn07CiMgMTg3NyAibmV0bGlzdC5oIgpjbGFzcyBOZXRG
dW5jRGVmIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEZ1bmNEZWYoTmV0U2NvcGUqLCBjb25zdCBz
dmVjdG9yPE5ldE5ldCo+JnBvKTsKICAgICAgfk5ldEZ1bmNEZWYoKTsKCiAgICAgIHZvaWQgc2V0
X3Byb2MoTmV0UHJvYypzdCk7CgogICAgICBjb25zdCBzdHJpbmcgbmFtZSgpIGNvbnN0OwogICAg
ICBjb25zdCBOZXRQcm9jKnByb2MoKSBjb25zdDsKICAgICAgTmV0U2NvcGUqc2NvcGUoKTsKCiAg
ICAgIHVuc2lnbmVkIHBvcnRfY291bnQoKSBjb25zdDsKICAgICAgY29uc3QgTmV0TmV0KnBvcnQo
dW5zaWduZWQgaWR4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wKG9zdHJlYW0mLCB1
bnNpZ25lZCBpbmQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIE5ldFNjb3BlKnNjb3BlXzsK
ICAgICAgTmV0UHJvYypzdGF0ZW1lbnRfOwogICAgICBzdmVjdG9yPE5ldE5ldCo+cG9ydHNfOwp9
OwojIDE5MTQgIm5ldGxpc3QuaCIKY2xhc3MgTmV0UERlbGF5IDogcHVibGljIE5ldFByb2MgewoK
ICAgIHB1YmxpYzoKICAgICAgTmV0UERlbGF5KHVuc2lnbmVkIGxvbmcgZCwgTmV0UHJvYypzdCk7
CiAgICAgIE5ldFBEZWxheShOZXRFeHByKiBkLCBOZXRQcm9jKnN0KTsKICAgICAgfk5ldFBEZWxh
eSgpOwoKICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSgpIGNvbnN0OwogICAgICBjb25zdCBOZXRF
eHByKmV4cHIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwog
ICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAg
ICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsKCiAgICAg
IGJvb2wgZW1pdF9wcm9jX3JlY3Vyc2Uoc3RydWN0IHRhcmdldF90KikgY29uc3Q7CgogICAgcHJp
dmF0ZToKICAgICAgdW5zaWduZWQgbG9uZyBkZWxheV87CiAgICAgIE5ldEV4cHIqZXhwcl87CiAg
ICAgIE5ldFByb2Mqc3RhdGVtZW50XzsKfTsKCgoKCmNsYXNzIE5ldFJlcGVhdCA6IHB1YmxpYyBO
ZXRQcm9jIHsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IE5ldFJlcGVhdChOZXRFeHByKmUs
IE5ldFByb2Mqcyk7CiAgICAgIH5OZXRSZXBlYXQoKTsKCiAgICAgIGNvbnN0IE5ldEV4cHIqZXhw
cigpIGNvbnN0OwogICAgICB2b2lkIGVtaXRfcmVjdXJzZShzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwogICAgICB2aXJ0dWFsIGJv
b2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcChvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBO
ZXRFeHByKmV4cHJfOwogICAgICBOZXRQcm9jKnN0YXRlbWVudF87Cn07CgoKCgoKCgpjbGFzcyBO
ZXRSZWxlYXNlIDogcHVibGljIE5ldFByb2MgewoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQg
TmV0UmVsZWFzZShOZXROZXQqbCk7CiAgICAgIH5OZXRSZWxlYXNlKCk7CgogICAgICBjb25zdCBO
ZXROZXQqbHZhbCgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBib29sIGVtaXRfcHJvYyhzdHJ1Y3Qg
dGFyZ2V0X3QqKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2ln
bmVkIGluZCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgTmV0TmV0Kmx2YWxfOwoKICAgICAg
ZnJpZW5kIGNsYXNzIE5ldE5ldDsKICAgICAgTmV0UmVsZWFzZSpyZWxlYXNlX25leHRfOwp9Owoj
IDE5ODggIm5ldGxpc3QuaCIKY2xhc3MgTmV0U1Rhc2sgOiBwdWJsaWMgTmV0UHJvYyB7CgogICAg
cHVibGljOgogICAgICBOZXRTVGFzayhjb25zdCBzdHJpbmcmbmEsIGNvbnN0IHN2ZWN0b3I8TmV0
RXhwcio+Jik7CiAgICAgIH5OZXRTVGFzaygpOwoKICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNv
bnN0OwoKICAgICAgdW5zaWduZWQgbnBhcm1zKCkgY29uc3Q7CgogICAgICBjb25zdCBOZXRFeHBy
KiBwYXJtKHVuc2lnbmVkIGlkeCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIE5leHVzU2V0KiBuZXhf
aW5wdXQoKTsKICAgICAgdmlydHVhbCBib29sIGVtaXRfcHJvYyhzdHJ1Y3QgdGFyZ2V0X3QqKSBj
b25zdDsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYsIHVuc2lnbmVkIGluZCkgY29u
c3Q7CgogICAgcHJpdmF0ZToKICAgICAgY2hhciogbmFtZV87CiAgICAgIHN2ZWN0b3I8TmV0RXhw
cio+cGFybXNfOwp9OwojIDIwMjEgIm5ldGxpc3QuaCIKY2xhc3MgTmV0VGFza0RlZiB7CgogICAg
cHVibGljOgogICAgICBOZXRUYXNrRGVmKGNvbnN0IHN0cmluZyZuLCBjb25zdCBzdmVjdG9yPE5l
dE5ldCo+JnBvKTsKICAgICAgfk5ldFRhc2tEZWYoKTsKCiAgICAgIHZvaWQgc2V0X3Byb2MoTmV0
UHJvYypwKTsKCiAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSgpIGNvbnN0OwogICAgICBjb25zdCBO
ZXRQcm9jKnByb2MoKSBjb25zdDsKCiAgICAgIHVuc2lnbmVkIHBvcnRfY291bnQoKSBjb25zdDsK
ICAgICAgTmV0TmV0KnBvcnQodW5zaWduZWQgaWR4KTsKCiAgICAgIHZvaWQgZHVtcChvc3RyZWFt
JiwgdW5zaWduZWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmluZyBuYW1lXzsKICAg
ICAgTmV0UHJvYypwcm9jXzsKICAgICAgc3ZlY3RvcjxOZXROZXQqPnBvcnRzXzsKCiAgICBwcml2
YXRlOgogICAgICBOZXRUYXNrRGVmKGNvbnN0IE5ldFRhc2tEZWYmKTsKICAgICAgTmV0VGFza0Rl
ZiYgb3BlcmF0b3I9IChjb25zdCBOZXRUYXNrRGVmJik7Cn07CiMgMjA1NiAibmV0bGlzdC5oIgpj
bGFzcyBOZXRFVUZ1bmMgOiBwdWJsaWMgTmV0RXhwciB7CgogICAgcHVibGljOgogICAgICBOZXRF
VUZ1bmMoTmV0U2NvcGUqLCBOZXRFU2lnbmFsKiwgc3ZlY3RvcjxOZXRFeHByKj4mKTsKICAgICAg
fk5ldEVVRnVuYygpOwoKICAgICAgY29uc3Qgc3RyaW5nIG5hbWUoKSBjb25zdDsKCiAgICAgIGNv
bnN0IE5ldEVTaWduYWwqcmVzdWx0KCkgY29uc3Q7CiAgICAgIHVuc2lnbmVkIHBhcm1fY291bnQo
KSBjb25zdDsKICAgICAgY29uc3QgTmV0RXhwciogcGFybSh1bnNpZ25lZCBpZHgpIGNvbnN0OwoK
ICAgICAgY29uc3QgTmV0U2NvcGUqIGZ1bmMoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgYm9vbCBz
ZXRfd2lkdGgodW5zaWduZWQpOwogICAgICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFtJikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZXhwcl9zY2FuKHN0cnVjdCBleHByX3NjYW5fdCopIGNv
bnN0OwogICAgICB2aXJ0dWFsIE5ldEVVRnVuYypkdXBfZXhwcigpIGNvbnN0OwogICAgICB2aXJ0
dWFsIE5leHVzU2V0KiBuZXhfaW5wdXQoKTsKCiAgICBwcml2YXRlOgogICAgICBOZXRTY29wZSpm
dW5jXzsKICAgICAgTmV0RVNpZ25hbCpyZXN1bHRfOwogICAgICBzdmVjdG9yPE5ldEV4cHIqPiBw
YXJtc187CgogICAgcHJpdmF0ZToKICAgICAgTmV0RVVGdW5jKGNvbnN0IE5ldEVVRnVuYyYpOwog
ICAgICBOZXRFVUZ1bmMmIG9wZXJhdG9yPSAoY29uc3QgTmV0RVVGdW5jJik7Cn07CgoKCgoKCmNs
YXNzIE5ldFVUYXNrIDogcHVibGljIE5ldFByb2MgewoKICAgIHB1YmxpYzoKICAgICAgTmV0VVRh
c2soTmV0U2NvcGUqKTsKICAgICAgfk5ldFVUYXNrKCk7CgogICAgICBjb25zdCBzdHJpbmcgbmFt
ZSgpIGNvbnN0OwoKICAgICAgY29uc3QgTmV0U2NvcGUqIHRhc2soKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwogICAgICB2aXJ0dWFsIGJvb2wgZW1pdF9wcm9j
KHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFt
JiwgdW5zaWduZWQgaW5kKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBOZXRTY29wZSp0YXNr
XzsKfTsKCgoKCgoKY2xhc3MgTmV0V2hpbGUgOiBwdWJsaWMgTmV0UHJvYyB7CgogICAgcHVibGlj
OgogICAgICBOZXRXaGlsZShOZXRFeHByKmMsIE5ldFByb2MqcCkKICAgICAgOiBjb25kXyhjKSwg
cHJvY18ocCkgeyB9CgogICAgICBjb25zdCBOZXRFeHByKmV4cHIoKSBjb25zdCB7IHJldHVybiBj
b25kXzsgfQoKICAgICAgdm9pZCBlbWl0X3Byb2NfcmVjdXJzZShzdHJ1Y3QgdGFyZ2V0X3QqKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwogICAgICB2aXJ0dWFs
IGJvb2wgZW1pdF9wcm9jKHN0cnVjdCB0YXJnZXRfdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZv
aWQgZHVtcChvc3RyZWFtJiwgdW5zaWduZWQgaW5kKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAg
ICBOZXRFeHByKiBjb25kXzsKICAgICAgTmV0UHJvYypwcm9jXzsKfTsKCgoKCgoKCmNsYXNzIE5l
dFByb2NUb3AgOiBwdWJsaWMgTGluZUluZm8sIHB1YmxpYyBBdHRyaWIgewoKICAgIHB1YmxpYzoK
ICAgICAgZW51bSBUeXBlIHsgS0lOSVRJQUwsIEtBTFdBWVMgfTsKCiAgICAgIE5ldFByb2NUb3Ao
TmV0U2NvcGUqcywgVHlwZSB0LCBjbGFzcyBOZXRQcm9jKnN0KTsKICAgICAgfk5ldFByb2NUb3Ao
KTsKCiAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9CiAgICAgIE5ldFBy
b2Mqc3RhdGVtZW50KCk7CiAgICAgIGNvbnN0IE5ldFByb2Mqc3RhdGVtZW50KCkgY29uc3Q7Cgog
ICAgICBOZXRTY29wZSpzY29wZSgpOwogICAgICBjb25zdCBOZXRTY29wZSpzY29wZSgpIGNvbnN0
OwoKCiAgICAgIGJvb2wgaXNfYXN5bmNocm9ub3VzKCk7CgoKCiAgICAgIGJvb2wgc3ludGhfYXN5
bmMoRGVzaWduKmRlcyk7CgoKICAgICAgYm9vbCBpc19zeW5jaHJvbm91cygpOwoKCgogICAgICBi
b29sIHN5bnRoX3N5bmMoRGVzaWduKmRlcyk7CgogICAgICB2b2lkIGR1bXAob3N0cmVhbSYsIHVu
c2lnbmVkIGluZCkgY29uc3Q7CiAgICAgIGJvb2wgZW1pdChzdHJ1Y3QgdGFyZ2V0X3QqdGd0KSBj
b25zdDsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBUeXBlIHR5cGVfOwogICAgICBOZXRQcm9j
KmNvbnN0IHN0YXRlbWVudF87CgogICAgICBOZXRTY29wZSpzY29wZV87CiAgICAgIGZyaWVuZCBj
bGFzcyBEZXNpZ247CiAgICAgIE5ldFByb2NUb3AqbmV4dF87Cn07CiMgMjIxMCAibmV0bGlzdC5o
IgpjbGFzcyBOZXRFQmluYXJ5IDogcHVibGljIE5ldEV4cHIgewoKICAgIHB1YmxpYzoKICAgICAg
TmV0RUJpbmFyeShjaGFyIG9wLCBOZXRFeHByKmwsIE5ldEV4cHIqcik7CiAgICAgIH5OZXRFQmlu
YXJ5KCk7CgogICAgICBjb25zdCBOZXRFeHByKmxlZnQoKSBjb25zdCB7IHJldHVybiBsZWZ0Xzsg
fQogICAgICBjb25zdCBOZXRFeHByKnJpZ2h0KCkgY29uc3QgeyByZXR1cm4gcmlnaHRfOyB9Cgog
ICAgICBjaGFyIG9wKCkgY29uc3QgeyByZXR1cm4gb3BfOyB9CgogICAgICB2aXJ0dWFsIGJvb2wg
c2V0X3dpZHRoKHVuc2lnbmVkIHcpOwoKCgoKICAgICAgdmlydHVhbCBib29sIGhhc193aWR0aCgp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBOZXRFQmluYXJ5KiBkdXBfZXhwcigpIGNvbnN0OwogICAg
ICB2aXJ0dWFsIE5leHVzU2V0KiBuZXhfaW5wdXQoKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBleHBy
X3NjYW4oc3RydWN0IGV4cHJfc2Nhbl90KikgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1w
KG9zdHJlYW0mKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNoYXIgb3BfOwogICAgICBO
ZXRFeHByKiBsZWZ0XzsKICAgICAgTmV0RXhwciogcmlnaHRfOwoKICAgICAgdmlydHVhbCB2b2lk
IGV2YWxfc3ViX3RyZWVfKCk7Cn07CiMgMjI0OSAibmV0bGlzdC5oIgpjbGFzcyBOZXRFQkFkZCA6
IHB1YmxpYyBOZXRFQmluYXJ5IHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEVCQWRkKGNoYXIgb3As
IE5ldEV4cHIqbCwgTmV0RXhwcipyKTsKICAgICAgfk5ldEVCQWRkKCk7CgogICAgICB2aXJ0dWFs
IGJvb2wgc2V0X3dpZHRoKHVuc2lnbmVkIHcpOwogICAgICB2aXJ0dWFsIE5ldEVCQWRkKiBkdXBf
ZXhwcigpIGNvbnN0OwogICAgICB2aXJ0dWFsIE5ldEVDb25zdCogZXZhbF90cmVlKCk7CiAgICAg
IHZpcnR1YWwgTmV0TmV0KiBzeW50aGVzaXplKERlc2lnbiopOwp9OwoKCgoKCgpjbGFzcyBOZXRF
QkRpdiA6IHB1YmxpYyBOZXRFQmluYXJ5IHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEVCRGl2KGNo
YXIgb3AsIE5ldEV4cHIqbCwgTmV0RXhwcipyKTsKICAgICAgfk5ldEVCRGl2KCk7CgogICAgICB2
aXJ0dWFsIGJvb2wgc2V0X3dpZHRoKHVuc2lnbmVkIHcpOwogICAgICB2aXJ0dWFsIE5ldEVCRGl2
KiBkdXBfZXhwcigpIGNvbnN0OwogICAgICB2aXJ0dWFsIE5ldEVDb25zdCogZXZhbF90cmVlKCk7
CiAgICAgIHZpcnR1YWwgTmV0TmV0KiBzeW50aGVzaXplKERlc2lnbiopOwp9OwojIDIyOTIgIm5l
dGxpc3QuaCIKY2xhc3MgTmV0RUJCaXRzIDogcHVibGljIE5ldEVCaW5hcnkgewoKICAgIHB1Ymxp
YzoKICAgICAgTmV0RUJCaXRzKGNoYXIgb3AsIE5ldEV4cHIqbCwgTmV0RXhwcipyKTsKICAgICAg
fk5ldEVCQml0cygpOwoKICAgICAgdmlydHVhbCBib29sIHNldF93aWR0aCh1bnNpZ25lZCB3KTsK
ICAgICAgdmlydHVhbCBOZXRFQkJpdHMqIGR1cF9leHByKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwg
TmV0RUNvbnN0KiBldmFsX3RyZWUoKTsKCiAgICAgIHZpcnR1YWwgTmV0TmV0KiBzeW50aGVzaXpl
KERlc2lnbiopOwp9OwojIDIzMTkgIm5ldGxpc3QuaCIKY2xhc3MgTmV0RUJDb21wIDogcHVibGlj
IE5ldEVCaW5hcnkgewoKICAgIHB1YmxpYzoKICAgICAgTmV0RUJDb21wKGNoYXIgb3AsIE5ldEV4
cHIqbCwgTmV0RXhwcipyKTsKICAgICAgfk5ldEVCQ29tcCgpOwoKICAgICAgdmlydHVhbCBib29s
IHNldF93aWR0aCh1bnNpZ25lZCB3KTsKICAgICAgdmlydHVhbCBOZXRFQkNvbXAqIGR1cF9leHBy
KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgTmV0RUNvbnN0KiBldmFsX3RyZWUoKTsKCiAgICAgIHZp
cnR1YWwgTmV0TmV0KiBzeW50aGVzaXplKERlc2lnbiopOwoKICAgIHByaXZhdGU6CiAgICAgIE5l
dEVDb25zdCpldmFsX2VxZXFfKCk7CiAgICAgIE5ldEVDb25zdCpldmFsX2xlc3NfKCk7CiAgICAg
IE5ldEVDb25zdCpldmFsX2xlZXFfKCk7CiAgICAgIE5ldEVDb25zdCpldmFsX2d0XygpOwogICAg
ICBOZXRFQ29uc3QqZXZhbF9ndGVxXygpOwogICAgICBOZXRFQ29uc3QqZXZhbF9uZWVxXygpOwog
ICAgICBOZXRFQ29uc3QqZXZhbF9lcWVxZXFfKCk7CiAgICAgIE5ldEVDb25zdCpldmFsX25lZXFl
cV8oKTsKfTsKIyAyMzQ5ICJuZXRsaXN0LmgiCmNsYXNzIE5ldEVCTG9naWMgOiBwdWJsaWMgTmV0
RUJpbmFyeSB7CgogICAgcHVibGljOgogICAgICBOZXRFQkxvZ2ljKGNoYXIgb3AsIE5ldEV4cHIq
bCwgTmV0RXhwcipyKTsKICAgICAgfk5ldEVCTG9naWMoKTsKCiAgICAgIHZpcnR1YWwgYm9vbCBz
ZXRfd2lkdGgodW5zaWduZWQgdyk7CiAgICAgIHZpcnR1YWwgTmV0RUJMb2dpYyogZHVwX2V4cHIo
KSBjb25zdDsKICAgICAgdmlydHVhbCBOZXRFQ29uc3QqIGV2YWxfdHJlZSgpOwogICAgICB2aXJ0
dWFsIE5ldE5ldCogc3ludGhlc2l6ZShEZXNpZ24qKTsKCiAgICBwcml2YXRlOgp9OwoKCgoKCmNs
YXNzIE5ldEVCTXVsdCA6IHB1YmxpYyBOZXRFQmluYXJ5IHsKCiAgICBwdWJsaWM6CiAgICAgIE5l
dEVCTXVsdChjaGFyIG9wLCBOZXRFeHByKmwsIE5ldEV4cHIqcik7CiAgICAgIH5OZXRFQk11bHQo
KTsKCiAgICAgIHZpcnR1YWwgYm9vbCBzZXRfd2lkdGgodW5zaWduZWQgdyk7CiAgICAgIHZpcnR1
YWwgTmV0RUJNdWx0KiBkdXBfZXhwcigpIGNvbnN0OwogICAgICB2aXJ0dWFsIE5ldEVDb25zdCog
ZXZhbF90cmVlKCk7CgogICAgcHJpdmF0ZToKfTsKIyAyMzg4ICJuZXRsaXN0LmgiCmNsYXNzIE5l
dEVCU2hpZnQgOiBwdWJsaWMgTmV0RUJpbmFyeSB7CgogICAgcHVibGljOgogICAgICBOZXRFQlNo
aWZ0KGNoYXIgb3AsIE5ldEV4cHIqbCwgTmV0RXhwcipyKTsKICAgICAgfk5ldEVCU2hpZnQoKTsK
CiAgICAgIHZpcnR1YWwgYm9vbCBzZXRfd2lkdGgodW5zaWduZWQgdyk7CgoKCiAgICAgIHZpcnR1
YWwgYm9vbCBoYXNfd2lkdGgoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgTmV0RUJTaGlmdCogZHVw
X2V4cHIoKSBjb25zdDsKICAgICAgdmlydHVhbCBOZXRFQ29uc3QqIGV2YWxfdHJlZSgpOwoKICAg
IHByaXZhdGU6Cn07CiMgMjQxNiAibmV0bGlzdC5oIgpjbGFzcyBOZXRFQ29uY2F0IDogcHVibGlj
IE5ldEV4cHIgewoKICAgIHB1YmxpYzoKICAgICAgTmV0RUNvbmNhdCh1bnNpZ25lZCBjbnQsIE5l
dEV4cHIqIHJlcGVhdCA9MCk7CiAgICAgIH5OZXRFQ29uY2F0KCk7CgoKICAgICAgdm9pZCBzZXQo
dW5zaWduZWQgaWR4LCBOZXRFeHByKmUpOwoKICAgICAgdW5zaWduZWQgcmVwZWF0KCk7CiAgICAg
IHVuc2lnbmVkIHJlcGVhdCgpIGNvbnN0OwogICAgICB1bnNpZ25lZCBucGFybXMoKSBjb25zdCB7
IHJldHVybiBwYXJtc18uY291bnQoKSA7IH0KICAgICAgTmV0RXhwciogcGFybSh1bnNpZ25lZCBp
ZHgpIGNvbnN0IHsgcmV0dXJuIHBhcm1zX1tpZHhdOyB9CgogICAgICB2aXJ0dWFsIE5leHVzU2V0
KiBuZXhfaW5wdXQoKTsKICAgICAgdmlydHVhbCBib29sIGhhc193aWR0aCgpIGNvbnN0OwogICAg
ICB2aXJ0dWFsIGJvb2wgc2V0X3dpZHRoKHVuc2lnbmVkIHcpOwogICAgICB2aXJ0dWFsIE5ldEVD
b25jYXQqIGR1cF9leHByKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgTmV0RUNvbnN0KiBldmFsX3Ry
ZWUoKTsKICAgICAgdmlydHVhbCBOZXROZXQqc3ludGhlc2l6ZShEZXNpZ24qKTsKICAgICAgdmly
dHVhbCB2b2lkIGV4cHJfc2NhbihzdHJ1Y3QgZXhwcl9zY2FuX3QqKSBjb25zdDsKICAgICAgdmly
dHVhbCB2b2lkIGR1bXAob3N0cmVhbSYpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIHN2ZWN0
b3I8TmV0RXhwcio+cGFybXNfOwogICAgICBOZXRFeHByKiByZXBlYXRfOwogICAgICB1bnNpZ25l
ZCByZXBlYXRfdmFsdWVfOwogICAgICBib29sIHJlcGVhdF9jYWxjdWxhdGVkXzsKfTsKIyAyNDU1
ICJuZXRsaXN0LmgiCmNsYXNzIE5ldEVQYXJhbSA6IHB1YmxpYyBOZXRFeHByIHsKICAgIHB1Ymxp
YzoKICAgICAgTmV0RVBhcmFtKCk7CiAgICAgIE5ldEVQYXJhbShjbGFzcyBEZXNpZ24qZGVzLCBO
ZXRTY29wZSpzY29wZSwgY29uc3QgaG5hbWVfdCZuYW1lKTsKICAgICAgfk5ldEVQYXJhbSgpOwoK
ICAgICAgdmlydHVhbCBOZXh1c1NldCogbmV4X2lucHV0KCk7CiAgICAgIHZpcnR1YWwgYm9vbCBz
ZXRfd2lkdGgodW5zaWduZWQgdyk7CiAgICAgIHZpcnR1YWwgYm9vbCBoYXNfd2lkdGgoKSBjb25z
dDsKICAgICAgdmlydHVhbCB2b2lkIGV4cHJfc2NhbihzdHJ1Y3QgZXhwcl9zY2FuX3QqKSBjb25z
dDsKICAgICAgdmlydHVhbCBOZXRFeHByKiBldmFsX3RyZWUoKTsKICAgICAgdmlydHVhbCBOZXRF
UGFyYW0qIGR1cF9leHByKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFt
JikgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgRGVzaWduKmRlc187CiAgICAgIE5ldFNjb3Bl
KnNjb3BlXzsKICAgICAgaG5hbWVfdCBuYW1lXzsKfTsKIyAyNDg0ICJuZXRsaXN0LmgiCmNsYXNz
IE5ldEVTZWxlY3QgOiBwdWJsaWMgTmV0RXhwciB7CgogICAgcHVibGljOgogICAgICBOZXRFU2Vs
ZWN0KE5ldEV4cHIqZXhwLCBOZXRFeHByKmJhc2UsIHVuc2lnbmVkIHdpZCk7CiAgICAgIH5OZXRF
U2VsZWN0KCk7CgogICAgICBjb25zdCBOZXRFeHByKnN1Yl9leHByKCkgY29uc3Q7CiAgICAgIGNv
bnN0IE5ldEV4cHIqc2VsZWN0KCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIE5leHVzU2V0KiBuZXhf
aW5wdXQoKTsKICAgICAgdmlydHVhbCBib29sIHNldF93aWR0aCh1bnNpZ25lZCB3KTsKICAgICAg
dmlydHVhbCBib29sIGhhc193aWR0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgZXhwcl9z
Y2FuKHN0cnVjdCBleHByX3NjYW5fdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIE5ldEVDb25zdCog
ZXZhbF90cmVlKCk7CiAgICAgIHZpcnR1YWwgTmV0RVNlbGVjdCogZHVwX2V4cHIoKSBjb25zdDsK
CiAgICBwcml2YXRlOgogICAgICBOZXRFeHByKmV4cHJfOwogICAgICBOZXRFeHByKmJhc2VfOwp9
OwoKCgoKCgpjbGFzcyBOZXRFU2NvcGUgOiBwdWJsaWMgTmV0RXhwciB7CgogICAgcHVibGljOgog
ICAgICBOZXRFU2NvcGUoTmV0U2NvcGUqKTsKICAgICAgfk5ldEVTY29wZSgpOwoKICAgICAgY29u
c3QgTmV0U2NvcGUqIHNjb3BlKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZXhwcl9zY2Fu
KHN0cnVjdCBleHByX3NjYW5fdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIE5ldEVTY29wZSogZHVw
X2V4cHIoKSBjb25zdDsKICAgICAgdmlydHVhbCBOZXh1c1NldCogbmV4X2lucHV0KCk7CgogICAg
ICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFtJm9zKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAg
ICBOZXRTY29wZSpzY29wZV87Cn07CgoKCgoKCmNsYXNzIE5ldEVTRnVuYyA6IHB1YmxpYyBOZXRF
eHByIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEVTRnVuYyhjb25zdCBzdHJpbmcmbmFtZSwgdW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIG5wcm1zKTsKICAgICAgfk5ldEVTRnVuYygpOwoKICAgICAg
Y29uc3QgY2hhciogbmFtZSgpIGNvbnN0OwoKICAgICAgdW5zaWduZWQgbnBhcm1zKCkgY29uc3Q7
CiAgICAgIHZvaWQgcGFybSh1bnNpZ25lZCBpZHgsIE5ldEV4cHIqZXhwcik7CiAgICAgIE5ldEV4
cHIqIHBhcm0odW5zaWduZWQgaWR4KTsKICAgICAgY29uc3QgTmV0RXhwciogcGFybSh1bnNpZ25l
ZCBpZHgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBOZXh1c1NldCogbmV4X2lucHV0KCk7CiAgICAg
IHZpcnR1YWwgYm9vbCBzZXRfd2lkdGgodW5zaWduZWQpOwogICAgICB2aXJ0dWFsIHZvaWQgZHVt
cChvc3RyZWFtJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgZXhwcl9zY2FuKHN0cnVjdCBl
eHByX3NjYW5fdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIE5ldEVTRnVuYypkdXBfZXhwcigpIGNv
bnN0OwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXIqIG5hbWVfOwogICAgICB1bnNpZ25lZCBucGFy
bXNfOwogICAgICBOZXRFeHByKipwYXJtc187CgogICAgcHJpdmF0ZToKICAgICAgTmV0RVNGdW5j
KGNvbnN0IE5ldEVTRnVuYyYpOwogICAgICBOZXRFU0Z1bmMmIG9wZXJhdG9yPSAoY29uc3QgTmV0
RVNGdW5jJik7Cn07CgoKCgoKCmNsYXNzIE5ldEVUZXJuYXJ5IDogcHVibGljIE5ldEV4cHIgewoK
ICAgIHB1YmxpYzoKICAgICAgTmV0RVRlcm5hcnkoTmV0RXhwcipjLCBOZXRFeHByKnQsIE5ldEV4
cHIqZik7CiAgICAgIH5OZXRFVGVybmFyeSgpOwoKICAgICAgdmlydHVhbCBib29sIHNldF93aWR0
aCh1bnNpZ25lZCB3KTsKCiAgICAgIGNvbnN0IE5ldEV4cHIqY29uZF9leHByKCkgY29uc3Q7CiAg
ICAgIGNvbnN0IE5ldEV4cHIqdHJ1ZV9leHByKCkgY29uc3Q7CiAgICAgIGNvbnN0IE5ldEV4cHIq
ZmFsc2VfZXhwcigpIGNvbnN0OwoKICAgICAgdmlydHVhbCBOZXRFVGVybmFyeSogZHVwX2V4cHIo
KSBjb25zdDsKICAgICAgdmlydHVhbCBOZXRFeHByKiBldmFsX3RyZWUoKTsKCiAgICAgIHZpcnR1
YWwgTmV4dXNTZXQqIG5leF9pbnB1dCgpOwogICAgICB2aXJ0dWFsIHZvaWQgZXhwcl9zY2FuKHN0
cnVjdCBleHByX3NjYW5fdCopIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgZHVtcChvc3RyZWFt
JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgTmV0TmV0KnN5bnRoZXNpemUoRGVzaWduKik7CgogICAg
cHJpdmF0ZToKICAgICAgTmV0RXhwcipjb25kXzsKICAgICAgTmV0RXhwcip0cnVlX3ZhbF87CiAg
ICAgIE5ldEV4cHIqZmFsc2VfdmFsXzsKfTsKIyAyNjA5ICJuZXRsaXN0LmgiCmNsYXNzIE5ldEVV
bmFyeSA6IHB1YmxpYyBOZXRFeHByIHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEVVbmFyeShjaGFy
IG9wLCBOZXRFeHByKmV4KTsKICAgICAgfk5ldEVVbmFyeSgpOwoKICAgICAgY2hhciBvcCgpIGNv
bnN0IHsgcmV0dXJuIG9wXzsgfQogICAgICBjb25zdCBOZXRFeHByKiBleHByKCkgY29uc3QgeyBy
ZXR1cm4gZXhwcl87IH0KCiAgICAgIHZpcnR1YWwgYm9vbCBzZXRfd2lkdGgodW5zaWduZWQgdyk7
CgogICAgICB2aXJ0dWFsIE5ldEVVbmFyeSogZHVwX2V4cHIoKSBjb25zdDsKICAgICAgdmlydHVh
bCBOZXRFQ29uc3QqIGV2YWxfdHJlZSgpOwoKICAgICAgdmlydHVhbCBOZXh1c1NldCogbmV4X2lu
cHV0KCk7CiAgICAgIHZpcnR1YWwgdm9pZCBleHByX3NjYW4oc3RydWN0IGV4cHJfc2Nhbl90Kikg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wKG9zdHJlYW0mKSBjb25zdDsKCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIGNoYXIgb3BfOwogICAgICBOZXRFeHByKiBleHByXzsKCiAgICAgIHZvaWQg
ZXZhbF9leHByXygpOwp9OwoKY2xhc3MgTmV0RVVCaXRzIDogcHVibGljIE5ldEVVbmFyeSB7Cgog
ICAgcHVibGljOgogICAgICBOZXRFVUJpdHMoY2hhciBvcCwgTmV0RXhwcipleCk7CiAgICAgIH5O
ZXRFVUJpdHMoKTsKCiAgICAgIHZpcnR1YWwgTmV0TmV0KiBzeW50aGVzaXplKERlc2lnbiopOwoK
ICAgICAgdmlydHVhbCBOZXRFQ29uc3QqIGV2YWxfdHJlZSgpOwp9OwoKY2xhc3MgTmV0RVVSZWR1
Y2UgOiBwdWJsaWMgTmV0RVVuYXJ5IHsKCiAgICBwdWJsaWM6CiAgICAgIE5ldEVVUmVkdWNlKGNo
YXIgb3AsIE5ldEV4cHIqZXgpOwogICAgICB+TmV0RVVSZWR1Y2UoKTsKCiAgICAgIHZpcnR1YWwg
Ym9vbCBzZXRfd2lkdGgodW5zaWduZWQgdyk7CiAgICAgIHZpcnR1YWwgTmV0TmV0KiBzeW50aGVz
aXplKERlc2lnbiopOwogICAgICB2aXJ0dWFsIE5ldEVDb25zdCogZXZhbF90cmVlKCk7Cgp9OwoK
CgoKCgpjbGFzcyBOZXRFTWVtb3J5IDogcHVibGljIE5ldEV4cHIgewoKICAgIHB1YmxpYzoKICAg
ICAgTmV0RU1lbW9yeShOZXRNZW1vcnkqbWVtLCBOZXRFeHByKmlkeCA9MCk7CiAgICAgIHZpcnR1
YWwgfk5ldEVNZW1vcnkoKTsKCiAgICAgIGNvbnN0IHN0cmluZyBuYW1lICgpIGNvbnN0OwogICAg
ICBjb25zdCBOZXRFeHByKiBpbmRleCgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBib29sIHNldF93
aWR0aCh1bnNpZ25lZCk7CgogICAgICBOZXRFeHByKiBldmFsX3RyZWUoKTsKICAgICAgdmlydHVh
bCBOZXRFTWVtb3J5KmR1cF9leHByKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIE5leHVzU2V0KiBu
ZXhfaW5wdXQoKTsKICAgICAgdmlydHVhbCB2b2lkIGV4cHJfc2NhbihzdHJ1Y3QgZXhwcl9zY2Fu
X3QqKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYpIGNvbnN0OwoKICAg
ICAgY29uc3QgTmV0TWVtb3J5Km1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1lbV87IH07CgogICAg
cHJpdmF0ZToKICAgICAgTmV0TWVtb3J5Km1lbV87CiAgICAgIE5ldEV4cHIqIGlkeF87Cn07CiMg
MjY5OCAibmV0bGlzdC5oIgpjbGFzcyBOZXRFU2lnbmFsIDogcHVibGljIE5ldEV4cHIgewoKICAg
IHB1YmxpYzoKICAgICAgTmV0RVNpZ25hbChOZXROZXQqbik7CiAgICAgIE5ldEVTaWduYWwoTmV0
TmV0Km4sIHVuc2lnbmVkIG1zaSwgdW5zaWduZWQgbHNpKTsKICAgICAgfk5ldEVTaWduYWwoKTsK
CiAgICAgIHN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgYm9vbCBzZXRfd2lkdGgo
dW5zaWduZWQpOwoKICAgICAgdmlydHVhbCBOZXRFU2lnbmFsKiBkdXBfZXhwcigpIGNvbnN0Owog
ICAgICBOZXROZXQqIHN5bnRoZXNpemUoRGVzaWduKmRlcyk7CiAgICAgIE5leHVzU2V0KiBuZXhf
aW5wdXQoKTsKCgoKICAgICAgdW5zaWduZWQgYml0X2NvdW50KCkgY29uc3Q7CiAgICAgIExpbmsm
IGJpdCh1bnNpZ25lZCBpZHgpOwoKICAgICAgY29uc3QgTmV0TmV0KiBzaWcoKSBjb25zdDsKICAg
ICAgdW5zaWduZWQgbXNpKCkgY29uc3Q7CiAgICAgIHVuc2lnbmVkIGxzaSgpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCB2b2lkIGV4cHJfc2NhbihzdHJ1Y3QgZXhwcl9zY2FuX3QqKSBjb25zdDsKICAg
ICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAg
IE5ldE5ldCpuZXRfOwogICAgICB1bnNpZ25lZCBtc2lfOwogICAgICB1bnNpZ25lZCBsc2lfOwp9
OwojIDI3MzggIm5ldGxpc3QuaCIKY2xhc3MgTmV0RUJpdFNlbCA6IHB1YmxpYyBOZXRFeHByIHsK
CiAgICBwdWJsaWM6CiAgICAgIE5ldEVCaXRTZWwoTmV0RVNpZ25hbCpzaWcsIE5ldEV4cHIqZXgp
OwogICAgICB+TmV0RUJpdFNlbCgpOwoKICAgICAgc3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICAg
Y29uc3QgTmV0RXhwcippbmRleCgpIGNvbnN0IHsgcmV0dXJuIGlkeF87IH0KCiAgICAgIHZpcnR1
YWwgYm9vbCBzZXRfd2lkdGgodW5zaWduZWQpOwoKICAgICAgY29uc3QgTmV0TmV0KiBzaWcoKSBj
b25zdDsKCiAgICAgIE5ldEVCaXRTZWwqIGR1cF9leHByKCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IE5leHVzU2V0KiBuZXhfaW5wdXQoKTsKICAgICAgdmlydHVhbCB2b2lkIGV4cHJfc2NhbihzdHJ1
Y3QgZXhwcl9zY2FuX3QqKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIGR1bXAob3N0cmVhbSYp
IGNvbnN0OwoKICAgIHByaXZhdGU6CgogICAgICBOZXRFU2lnbmFsKnNpZ187CiAgICAgIE5ldEV4
cHIqIGlkeF87Cn07CgoKCgoKCgpjbGFzcyBOZXRTY29wZSB7CgogICAgcHVibGljOgogICAgICBl
bnVtIFRZUEUgeyBNT0RVTEUsIFRBU0ssIEZVTkMsIEJFR0lOX0VORCwgRk9SS19KT0lOIH07CiAg
ICAgIE5ldFNjb3BlKE5ldFNjb3BlKnVwLCBjb25zdCBjaGFyKm5hbWUsIFRZUEUgdCk7CiAgICAg
IH5OZXRTY29wZSgpOwoKCgoKCgoKICAgICAgTmV0RXhwciogc2V0X3BhcmFtZXRlcihjb25zdCBz
dHJpbmcmbmFtZSwgTmV0RXhwcip2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0
RXhwciptc2IsIE5ldEV4cHIqbHNiLCBib29sIHNpZ25lZF9mbGFnKTsKICAgICAgTmV0RXhwciog
c2V0X2xvY2FscGFyYW0oY29uc3Qgc3RyaW5nJm5hbWUsIE5ldEV4cHIqdmFsKTsKICAgICAgY29u
c3QgTmV0RXhwcipnZXRfcGFyYW1ldGVyKGNvbnN0IHN0cmluZyZuYW1lKSBjb25zdDsKCgoKCgog
ICAgICBib29sIHJlcGxhY2VfcGFyYW1ldGVyKGNvbnN0IHN0cmluZyZuYW1lLCBOZXRFeHByKnZh
bCk7CgoKCgogICAgICB2b2lkIGFkZF9ldmVudChOZXRFdmVudCopOwogICAgICB2b2lkIHJlbV9l
dmVudChOZXRFdmVudCopOwogICAgICBOZXRFdmVudCpmaW5kX2V2ZW50KGNvbnN0IGNoYXIqbmFt
ZSk7CgoKCgoKCgogICAgICB2b2lkIGFkZF9zaWduYWwoTmV0TmV0Kik7CiAgICAgIHZvaWQgcmVt
X3NpZ25hbChOZXROZXQqKTsKCiAgICAgIE5ldE5ldCogZmluZF9zaWduYWwoY29uc3Qgc3RyaW5n
Jm5hbWUpOwogICAgICBOZXROZXQqIGZpbmRfc2lnbmFsX2luX2NoaWxkKGNvbnN0IGhuYW1lX3Qm
bmFtZSk7CgoKCgoKICAgICAgdm9pZCBhZGRfbWVtb3J5KE5ldE1lbW9yeSopOwogICAgICB2b2lk
IHJlbV9tZW1vcnkoTmV0TWVtb3J5Kik7CgogICAgICBOZXRNZW1vcnkqIGZpbmRfbWVtb3J5KGNv
bnN0IHN0cmluZyZuYW1lKTsKCgoKCiAgICAgIE5ldFNjb3BlKiBwYXJlbnQoKTsKICAgICAgTmV0
U2NvcGUqIGNoaWxkKGNvbnN0IHN0cmluZyZuYW1lKTsKICAgICAgY29uc3QgTmV0U2NvcGUqIHBh
cmVudCgpIGNvbnN0OwogICAgICBjb25zdCBOZXRTY29wZSogY2hpbGQoY29uc3Qgc3RyaW5nJm5h
bWUpIGNvbnN0OwoKICAgICAgVFlQRSB0eXBlKCkgY29uc3Q7CgogICAgICB2b2lkIHNldF90YXNr
X2RlZihOZXRUYXNrRGVmKik7CiAgICAgIHZvaWQgc2V0X2Z1bmNfZGVmKE5ldEZ1bmNEZWYqKTsK
ICAgICAgdm9pZCBzZXRfbW9kdWxlX25hbWUoY29uc3QgY2hhciopOwoKICAgICAgTmV0VGFza0Rl
ZiogdGFza19kZWYoKTsKICAgICAgTmV0RnVuY0RlZiogZnVuY19kZWYoKTsKCiAgICAgIGNvbnN0
IE5ldFRhc2tEZWYqIHRhc2tfZGVmKCkgY29uc3Q7CiAgICAgIGNvbnN0IE5ldEZ1bmNEZWYqIGZ1
bmNfZGVmKCkgY29uc3Q7CiAgICAgIGNvbnN0IGNoYXIqbW9kdWxlX25hbWUoKSBjb25zdDsKIyAy
ODUwICJuZXRsaXN0LmgiCiAgICAgIHZvaWQgdGltZV91bml0KGludCk7CiAgICAgIHZvaWQgdGlt
ZV9wcmVjaXNpb24oaW50KTsKCiAgICAgIGludCB0aW1lX3VuaXQoKSBjb25zdDsKICAgICAgaW50
IHRpbWVfcHJlY2lzaW9uKCkgY29uc3Q7CgoKCgogICAgICBjb25zdCBjaGFyKiBiYXNlbmFtZSgp
IGNvbnN0OwogICAgICBzdHJpbmcgbmFtZSgpIGNvbnN0OwoKICAgICAgdm9pZCBydW5fZGVmcGFy
YW1zKGNsYXNzIERlc2lnbiopOwogICAgICB2b2lkIGV2YWx1YXRlX3BhcmFtZXRlcnMoY2xhc3Mg
RGVzaWduKik7CgoKCiAgICAgIHN0cmluZyBsb2NhbF9zeW1ib2woKTsKCgogICAgICBzdHJpbmcg
bG9jYWxfaHN5bWJvbCgpOwoKICAgICAgdm9pZCBkdW1wKG9zdHJlYW0mKSBjb25zdDsKICAgICAg
dm9pZCBlbWl0X3Njb3BlKHN0cnVjdCB0YXJnZXRfdCp0Z3QpIGNvbnN0OwogICAgICB2b2lkIGVt
aXRfZGVmcyhzdHJ1Y3QgdGFyZ2V0X3QqdGd0KSBjb25zdDsKCgoKICAgICAgdm9pZCBydW5fZnVu
Y3RvcihEZXNpZ24qZGVzLCBmdW5jdG9yX3QqZnVuKTsKCgoKCgoKICAgICAgbWFwPGhuYW1lX3Qs
TmV0RXhwcio+ZGVmcGFyYW1zOwoKICAgIHByaXZhdGU6CiAgICAgIFRZUEUgdHlwZV87CiAgICAg
IGNoYXIqIG5hbWVfOwoKICAgICAgc2lnbmVkIGNoYXIgdGltZV91bml0XywgdGltZV9wcmVjXzsK
CiAgICAgIHN0cnVjdCBwYXJhbV9leHByX3QgewogICAgICAgICAgICBOZXRFeHByKmV4cHI7CiAg
ICAgICAgICAgIE5ldEV4cHIqbXNiOwogICAgICAgICAgICBOZXRFeHByKmxzYjsKICAgICAgICAg
ICAgYm9vbCBzaWduZWRfZmxhZzsKICAgICAgfTsKICAgICAgbWFwPHN0cmluZyxwYXJhbV9leHBy
X3Q+cGFyYW1ldGVyc187CiAgICAgIG1hcDxzdHJpbmcscGFyYW1fZXhwcl90PmxvY2FscGFyYW1z
XzsKCiAgICAgIE5ldEV2ZW50ICpldmVudHNfOwogICAgICBOZXROZXQgKnNpZ25hbHNfOwogICAg
ICBOZXRNZW1vcnkqbWVtb3JpZXNfOwoKICAgICAgdW5pb24gewogICAgICAgICAgICBOZXRUYXNr
RGVmKnRhc2tfOwogICAgICAgICAgICBOZXRGdW5jRGVmKmZ1bmNfOwogICAgICAgICAgICBjaGFy
Km1vZHVsZV9uYW1lXzsKICAgICAgfTsKCiAgICAgIE5ldFNjb3BlKnVwXzsKICAgICAgTmV0U2Nv
cGUqc2liXzsKICAgICAgTmV0U2NvcGUqc3ViXzsKCiAgICAgIHVuc2lnbmVkIGxjb3VudGVyXzsK
fTsKCgoKCgpjbGFzcyBEZXNpZ24gewoKICAgIHB1YmxpYzoKICAgICAgRGVzaWduKCk7CiAgICAg
IH5EZXNpZ24oKTsKIyAyOTM3ICJuZXRsaXN0LmgiCiAgICAgIHZvaWQgc2V0X2ZsYWdzKGNvbnN0
IG1hcDxzdHJpbmcsc3RyaW5nPiZmKSB7IGZsYWdzXyA9IGY7IH0KCiAgICAgIHN0cmluZyBnZXRf
ZmxhZyhjb25zdCBzdHJpbmcma2V5KSBjb25zdDsKCiAgICAgIE5ldFNjb3BlKiBtYWtlX3Jvb3Rf
c2NvcGUoY29uc3QgY2hhcipuYW1lKTsKICAgICAgTmV0U2NvcGUqIGZpbmRfcm9vdF9zY29wZSgp
OwogICAgICBsaXN0PE5ldFNjb3BlKj4gZmluZF9yb290X3Njb3BlcygpOwoKICAgICAgY29uc3Qg
bGlzdDxOZXRTY29wZSo+IGZpbmRfcm9vdF9zY29wZXMoKSBjb25zdDsKCgoKCgoKICAgICAgdm9p
ZCBzZXRfcHJlY2lzaW9uKGludCB2YWwpOwogICAgICBpbnQgZ2V0X3ByZWNpc2lvbigpIGNvbnN0
OwoKCgogICAgICB1bnNpZ25lZCBsb25nIHNjYWxlX3RvX3ByZWNpc2lvbih1bnNpZ25lZCBsb25n
LCBjb25zdCBOZXRTY29wZSopY29uc3Q7CgoKCgoKICAgICAgTmV0U2NvcGUqIGZpbmRfc2NvcGUo
Y29uc3QgaG5hbWVfdCZwYXRoKSBjb25zdDsKICAgICAgTmV0U2NvcGUqIGZpbmRfc2NvcGUoTmV0
U2NvcGUqLCBjb25zdCBobmFtZV90JnBhdGgpIGNvbnN0OwoKCgoKCgogICAgICBjb25zdCBOZXRF
eHByKmZpbmRfcGFyYW1ldGVyKGNvbnN0IE5ldFNjb3BlKiwgY29uc3QgaG5hbWVfdCZwYXRoKSBj
b25zdDsKCiAgICAgIHZvaWQgcnVuX2RlZnBhcmFtcygpOwogICAgICB2b2lkIGV2YWx1YXRlX3Bh
cmFtZXRlcnMoKTsKCgoKCgoKICAgICAgTmV0TmV0KmZpbmRfc2lnbmFsKE5ldFNjb3BlKnNjb3Bl
LCBobmFtZV90IHBhdGgpOwoKCiAgICAgIE5ldE1lbW9yeSogZmluZF9tZW1vcnkoTmV0U2NvcGUq
c2NvcGUsIGhuYW1lX3QgcGF0aCk7CgoKCiAgICAgIHZvaWQgZmluZF9zeW1ib2woTmV0U2NvcGUq
LGNvbnN0IHN0cmluZyZrZXksCiAgICAgICAgICAgICAgICAgICAgICAgTmV0TmV0KiZzaWcsIE5l
dE1lbW9yeSombWVtKTsKCgogICAgICBOZXRGdW5jRGVmKiBmaW5kX2Z1bmN0aW9uKE5ldFNjb3Bl
KnNjb3BlLCBjb25zdCBobmFtZV90JmtleSk7CiAgICAgIE5ldEZ1bmNEZWYqIGZpbmRfZnVuY3Rp
b24oY29uc3QgaG5hbWVfdCZwYXRoKTsKCgogICAgICBOZXRTY29wZSogZmluZF90YXNrKE5ldFNj
b3BlKnNjb3BlLCBjb25zdCBobmFtZV90Jm5hbWUpOwogICAgICBOZXRTY29wZSogZmluZF90YXNr
KGNvbnN0IGhuYW1lX3Qma2V5KTsKCgogICAgICBOZXRFdmVudCogZmluZF9ldmVudChOZXRTY29w
ZSpzY29wZSwgY29uc3QgaG5hbWVfdCZwYXRoKTsKCgogICAgICB2b2lkIGFkZF9ub2RlKE5ldE5v
ZGUqKTsKICAgICAgdm9pZCBkZWxfbm9kZShOZXROb2RlKik7CgoKICAgICAgdm9pZCBhZGRfcHJv
Y2VzcyhOZXRQcm9jVG9wKik7CiAgICAgIHZvaWQgZGVsZXRlX3Byb2Nlc3MoTmV0UHJvY1RvcCop
OwoKCiAgICAgIHZvaWQgZHVtcChvc3RyZWFtJikgY29uc3Q7CiAgICAgIHZvaWQgZnVuY3Rvcihz
dHJ1Y3QgZnVuY3Rvcl90Kik7CiAgICAgIGJvb2wgZW1pdChzdHJ1Y3QgdGFyZ2V0X3QqKSBjb25z
dDsKCgoKICAgICAgdW5zaWduZWQgZXJyb3JzOwoKICAgIHB1YmxpYzoKICAgICAgc3RyaW5nIGxv
Y2FsX3N5bWJvbChjb25zdCBzdHJpbmcmcGF0aCk7CgogICAgcHJpdmF0ZToKCgogICAgICBsaXN0
PE5ldFNjb3BlKj5yb290X3Njb3Blc187CgoKICAgICAgTmV0Tm9kZSpub2Rlc187CgogICAgICBO
ZXROb2RlKm5vZGVzX2Z1bmN0b3JfY3VyXzsKICAgICAgTmV0Tm9kZSpub2Rlc19mdW5jdG9yX254
dF87CgoKICAgICAgTmV0UHJvY1RvcCpwcm9jc187CiAgICAgIE5ldFByb2NUb3AqcHJvY3NfaWR4
XzsKCiAgICAgIG1hcDxzdHJpbmcsc3RyaW5nPiBmbGFnc187CgogICAgICBpbnQgZGVzX3ByZWNp
c2lvbl87CgogICAgICB1bnNpZ25lZCBsY291bnRlcl87CgogICAgcHJpdmF0ZToKICAgICAgRGVz
aWduKGNvbnN0IERlc2lnbiYpOwogICAgICBEZXNpZ24mIG9wZXJhdG9yPSAoY29uc3QgRGVzaWdu
Jik7Cn07CgoKCgoKaW5saW5lIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IExpbmsmbCwgY29uc3Qg
TGluayZyKQp7IHJldHVybiBsLmlzX2VxdWFsKHIpOyB9CgppbmxpbmUgYm9vbCBvcGVyYXRvciAh
PSAoY29uc3QgTGluayZsLCBjb25zdCBMaW5rJnIpCnsgcmV0dXJuICEgbC5pc19lcXVhbChyKTsg
fQoKCgpleHRlcm4gdm9pZCBjb25uZWN0KExpbmsmLCBMaW5rJik7CgoKaW5saW5lIGJvb2wgY29u
bmVjdGVkKGNvbnN0IExpbmsmbCwgY29uc3QgTGluayZyKQp7IHJldHVybiBsLmlzX2xpbmtlZChy
KTsgfQoKCgpleHRlcm4gdW5zaWduZWQgY291bnRfaW5wdXRzKGNvbnN0IExpbmsmcGluKTsKZXh0
ZXJuIHVuc2lnbmVkIGNvdW50X291dHB1dHMoY29uc3QgTGluayZwaW4pOwpleHRlcm4gdW5zaWdu
ZWQgY291bnRfc2lnbmFscyhjb25zdCBMaW5rJnBpbik7CgoKZXh0ZXJuIExpbmsqIGZpbmRfbmV4
dF9vdXRwdXQoTGluaypsbmspOwoKCgoKY29uc3QgTmV0TmV0KiBmaW5kX2xpbmtfc2lnbmFsKGNv
bnN0IE5ldE9iaipuZXQsIHVuc2lnbmVkIHBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkJmJpZHgpOwoKaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFt
Jm8sIGNvbnN0IE5ldEV4cHImZXhwKQp7IGV4cC5kdW1wKG8pOyByZXR1cm4gbzsgfQoKZXh0ZXJu
IG9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFtJiwgTmV0TmV0OjpUeXBlKTsKIyAyNiAiZHVw
X2V4cHIuY2MiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jYXNzZXJ0IiAxIDMK
IyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2lu
Y2x1ZGUvYXNzZXJ0LmgiIDEgMyA0CiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CmV4
dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19h
c3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNz
ZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9p
ZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwg
aW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKfQojIDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jYXNzZXJ0IiAyIDMKIyAyNyAi
ZHVwX2V4cHIuY2MiIDIKCk5ldEVTY29wZSogTmV0RVNjb3BlOjpkdXBfZXhwcigpIGNvbnN0CnsK
ICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIwIiwg
ImR1cF9leHByLmNjIiwgMzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICByZXR1
cm4gMDsKfQoKTmV0RVNlbGVjdCogTmV0RVNlbGVjdDo6ZHVwX2V4cHIoKSBjb25zdAp7CiAgICAg
IHJldHVybiBuZXcgTmV0RVNlbGVjdChleHByXy0+ZHVwX2V4cHIoKSwgYmFzZV8tPmR1cF9leHBy
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3dpZHRoKCkpOwp9CgpOZXRFU0Z1
bmMqIE5ldEVTRnVuYzo6ZHVwX2V4cHIoKSBjb25zdAp7CiAgICAgIE5ldEVTRnVuYyp0bXAgPSBu
ZXcgTmV0RVNGdW5jKG5hbWVfLCBleHByX3dpZHRoKCksIG5wYXJtcygpKTsKICAgICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICgodG1wKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRtcCIsICJkdXBfZXhw
ci5jYyIsIDQzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgZm9yICh1bnNpZ25l
ZCBpZHggPSAwIDsgaWR4IDwgbnBhcm1zKCkgOyBpZHggKz0gMSkgewogICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gKCh0bXAtPnBhcm0oaWR4KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0
bXAtPnBhcm0oaWR4KSIsICJkdXBfZXhwci5jYyIsIDQ1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKICAgICAgICAgICAgdG1wLT5wYXJtKGlkeCwgdG1wLT5wYXJtKGlkeCktPmR1cF9leHBy
KCkpOwogICAgICB9CgogICAgICByZXR1cm4gdG1wOwp9CgpOZXRFU2lnbmFsKiBOZXRFU2lnbmFs
OjpkdXBfZXhwcigpIGNvbnN0CnsKICAgICAgTmV0RVNpZ25hbCp0bXAgPSBuZXcgTmV0RVNpZ25h
bChuZXRfLCBtc2lfLCBsc2lfKTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgodG1wKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoInRtcCIsICJkdXBfZXhwci5jYyIsIDU1LCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAgICAgdG1wLT5leHByX3dpZHRoKGV4cHJfd2lkdGgoKSk7CiAgICAg
IHJldHVybiB0bXA7Cn0KCk5ldEVUZXJuYXJ5KiBOZXRFVGVybmFyeTo6ZHVwX2V4cHIoKSBjb25z
dAp7CiAgICAgIE5ldEVUZXJuYXJ5KnRtcCA9IG5ldyBOZXRFVGVybmFyeShjb25kXy0+ZHVwX2V4
cHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVfdmFsXy0+
ZHVwX2V4cHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
X3ZhbF8tPmR1cF9leHByKCkpOwogICAgICByZXR1cm4gdG1wOwp9CgpOZXRFVUZ1bmMqIE5ldEVV
RnVuYzo6ZHVwX2V4cHIoKSBjb25zdAp7CiAgICAgIE5ldEVVRnVuYyp0bXA7CiAgICAgIHN2ZWN0
b3I8TmV0RXhwcio+IHRtcF9wYXJtcyAocGFybXNfLmNvdW50KCkpOwoKICAgICAgZm9yICh1bnNp
Z25lZCBpZHggPSAwIDsgaWR4IDwgdG1wX3Bhcm1zLmNvdW50KCkgOyBpZHggKz0gMSkgewogICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChwYXJtc19baWR4XSkgPyAwIDogKF9fYXNzZXJ0
X2ZhaWwgKCJwYXJtc19baWR4XSIsICJkdXBfZXhwci5jYyIsIDc0LCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKICAgICAgICAgICAgdG1wX3Bhcm1zW2lkeF0gPSBwYXJtc19baWR4XS0+ZHVw
X2V4cHIoKTsKICAgICAgfQoKICAgICAgdG1wID0gbmV3IE5ldEVVRnVuYyhmdW5jXywgcmVzdWx0
Xy0+ZHVwX2V4cHIoKSwgdG1wX3Bhcm1zKTsKCiAgICAgIHJldHVybiB0bXA7Cn0KCk5ldEVVbmFy
eSogTmV0RVVuYXJ5OjpkdXBfZXhwcigpIGNvbnN0CnsKICAgICAgTmV0RVVuYXJ5KnRtcCA9IG5l
dyBOZXRFVW5hcnkob3BfLCBleHByXy0+ZHVwX2V4cHIoKSk7CiAgICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAoKHRtcCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0bXAiLCAiZHVwX2V4cHIuY2MiLCA4
NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIHJldHVybiB0bXA7Cn0KDQ==


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-12-18 13:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-18  5:17 c++/8942: internal compiler error: in ggc_set_mark, at ggc-page.c:981 reichelt
  -- strict thread matches above, loose matches on Subject: below --
2002-12-17 23:16 Art
2002-12-16 11:31 bangerth
2002-12-14 10:56 pinaart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).