public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: middle-end/6994: ICE in find_function_data
@ 2002-10-09 16:06 Janis Johnson
  0 siblings, 0 replies; 4+ messages in thread
From: Janis Johnson @ 2002-10-09 16:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR middle-end/6994; it has been noted by GNATS.

From: Janis Johnson <janis187@us.ibm.com>
To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org, adrian@suse.de,
   schwab@suse.de
Cc:  
Subject: Re: middle-end/6994: ICE in find_function_data
Date: Wed, 9 Oct 2002 16:00:59 -0700

 This problem still exists in 3.3 20021008 and 3.2.1 20021009 on
 i686-pc-linux-gnu.  As mentioned earlier, it's a regression from
 GCC 2.95.3.
 
 The PR name ought to be "c++" rather than "middle-end".
 
 At the time of the ICE in find_function_data, 'exp' in expand_expr is
 a SAVE_EXPR whose function context, 'context', is cloned from
 'current_function_decl'.  The code in expand_expr falsely assumes that
 since 'context' is different from 'current_function_decl', 'context' is
 a containing function.  It calls find_function_data just to make sure
 that 'context' is for a containing function, but it's not so that
 function aborts.
 
 I don't where to go from here, but hope that this information will be
 of use to someone familiar with the C++ front end.
 
 Janis


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

* Re: middle-end/6994: ICE in find_function_data
@ 2002-06-13 22:49 Reichelt
  0 siblings, 0 replies; 4+ messages in thread
From: Reichelt @ 2002-06-13 22:49 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR middle-end/6994; it has been noted by GNATS.

From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: adrian@suse.de, gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org,
   nobody@gcc.gnu.org, schwab@suse.de
Cc:  
Subject: Re: middle-end/6994: ICE in find_function_data
Date: Wed, 12 Jun 2002 16:18:03 +0200

 Hi,
 
 the bug can be reproduced with the following code snippet
 (just compile with g++ -c):
 
 ----------------------------snip here------------------------
 class A
 {
     A( int );
 };
 
 A::A ( int i )
 {
     int ar[1][i];
 
     ar[0][0] = 0;
 }
 ----------------------------snip here------------------------
 
 The bug is a regression from gcc 2.95.3 (it first appears in gcc 3.0
 and is still present in the main trunk - checked on mips-sgi-irix6.5).
 
 Greetings,
 Volker Reichelt
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6994
 


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

* Re: middle-end/6994: ICE in find_function_data
@ 2002-06-12  6:46 Reichelt
  0 siblings, 0 replies; 4+ messages in thread
From: Reichelt @ 2002-06-12  6:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR middle-end/6994; it has been noted by GNATS.

From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: adrian@suse.de, gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org,
        nobody@gcc.gnu.org, schwab@suse.de
Cc:  
Subject: Re: middle-end/6994: ICE in find_function_data
Date: Wed, 12 Jun 2002 16:18:03 +0200

 Hi,
 
 the bug can be reproduced with the following code snippet
 (just compile with g++ -c):
 
 ----------------------------snip here------------------------
 class A
 {
     A( int );
 };
 
 A::A ( int i )
 {
     int ar[1][i];
 
     ar[0][0] = 0;
 }
 ----------------------------snip here------------------------
 
 The bug is a regression from gcc 2.95.3 (it first appears in gcc 3.0
 and is still present in the main trunk - checked on mips-sgi-irix6.5).
 
 Greetings,
 Volker Reichelt
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6994
 
 


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

* middle-end/6994: ICE in find_function_data
@ 2002-06-11  8:26 schwab
  0 siblings, 0 replies; 4+ messages in thread
From: schwab @ 2002-06-11  8:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6994
>Category:       middle-end
>Synopsis:       ICE in find_function_data
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 11 08:26:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     schwab@suse.de
>Release:        3.1.1 20020603 (prerelease)
>Organization:
>Environment:
i386-suse-linux
>Description:
Compiler is aborting in find_function_data.
>How-To-Repeat:
$ gcc cube.ii
cube.ii: In constructor `Cube::Cube(float, float, float, int, int, int)':
cube.ii:28238: Internal compiler error in find_function_data, at function.c:329
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="cube.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="cube.ii"

CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs
aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f
dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoKCnR5cGVkZWYgaW50IHB0cmRp
ZmZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp
bmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KCmV4dGVybiAiQyIgewoKCgoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lk
ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVt
Y2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs
IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9f
cywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywg
aW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv
aWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBz
dHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBp
bnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKCgpleHRlcm4gaW50IF9fc3RyY29s
bF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBf
X2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6
ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVf
dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAo
X19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh
ciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19h
Y2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
Y2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19u
ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy
biBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hh
ciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ry
dG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0
b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl
bGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5
c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9f
cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNw
eSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93
ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZv
aWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2Nv
bnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9u
ZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
ZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBf
X3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hh
ciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIg
KnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkg
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5n
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9f
ZmlsZW5hbWUpIHRocm93ICgpOwp9Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5Owog
IHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAg
dXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVz
aW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNp
bmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2lu
ZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5n
IDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZv
aWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2Fz
dDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBp
bmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1
aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVz
aW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25z
dCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBj
aGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5f
c3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6
OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIq
IF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIq
PihfX3MxKSwgX19zMik7IH0KfQoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCnVuaW9u
IHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1
bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVk
dW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWdu
ZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAog
ICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2ln
bmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAg
ICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9Owp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90
OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcg
aW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25f
XyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9u
ZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJf
bWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIg
Kl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50
IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0
cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVy
biBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g
ZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0
cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93
ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3Ry
dG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19z
dHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAgIHRocm93
ICgpOwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191
X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVk
IGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lv
bl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lv
bl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciBf
X2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQg
c2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZf
dDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2lu
dDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWlu
dDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3Qg
X19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90
Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlw
ZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVm
IF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3Nz
aXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3Js
aW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp
bnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVk
ZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsK
dHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsK
Cgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoK
CnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNf
cGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcg
aW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYg
X191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7
CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2Zz
ZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19s
b2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJf
dDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCnN0cnVjdCBfX3NjaGVk
X3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCgpzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK
CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0
ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy
YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk
c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf
dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp
dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15
Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl
eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f
Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK
CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf
cndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9f
cndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNj
ciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7
CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9
IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9z
cGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg
X19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0
aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYg
c3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgoKdHlwZWRlZiBfX3VfY2hhciB1
X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsK
dHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVm
IF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRl
ZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRl
ZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVk
ZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRl
ZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBl
ZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0
eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRl
ZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBl
ZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKdHlwZWRl
ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CnR5cGVkZWYgX19j
bG9ja2lkX3QgY2xvY2tpZF90Owp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwoKCgp0eXBlZGVm
IF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNv
bmRzX3Q7CgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBl
ZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVk
ZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk
ZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdp
c3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoKdHlwZWRlZiBp
bnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxv
bmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsK
ICB9IF9fc2lnc2V0X3Q7CgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgpzdHJ1
Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2Vj
OwogIH07CgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3Vz
ZWNvbmRzX3QgdHZfdXNlYzsKICB9Owp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoK
CnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAq
IHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19m
ZF9tYXNrIGZkX21hc2s7CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50
IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2
YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxl
Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg
ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAg
ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoK
Cn0KCgoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19i
bGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoK
dHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxr
Y250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19m
c2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRv
bSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9f
c2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50
IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9f
c3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50
MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGlu
dCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQz
Ml90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2Rh
dGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVk
IGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBf
X3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0
YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAo
KTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJh
bmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDgg
KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBp
bnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0
OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlu
dCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgp
OwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194
WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxy
YW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAo
bG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQx
NnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVy
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19w
YXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm
ZmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNp
emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBz
aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0
ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJl
ZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZv
aWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQoKCgoKZXh0ZXJuIHZv
aWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwg
c2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2
b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2
b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQog
ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQg
KGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hh
ciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVu
c2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
Y2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3Rl
bXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1w
bGF0ZSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0
aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hh
ciAqX19uYW1lKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5f
dCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9m
bl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2
b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoK
CmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3Qg
X19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4
dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
bGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rl
bm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxk
aXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxs
ZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2
dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpf
X2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2
dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRf
ciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
bWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1h
dGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwpleHRlcm4gaW50IGdldHN1
Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBz
ZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw
b3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3Jh
bnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19m
ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXpl
X3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9f
bmVsZW0pIHRocm93ICgpOwoKCgoKCn0KbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsK
ICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2lu
ZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRv
bDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAg
dXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6
OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47
CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0Owog
IHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2lu
ZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcg
OjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5l
IGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRp
dl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0K
fQpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhp
dDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3gg
Pj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9u
ZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZf
dAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9f
cS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9Cgog
IGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7
IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsg
cmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5n
IDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4
eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFi
czsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVz
aW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcg
X19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcg
X19nbnVfY3h4OjpzdHJ0b2xkOwp9CgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoK
CgoKCiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93
KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2Vw
dGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigp
IHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07
CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CgogIHR5cGVkZWYgdm9p
ZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVy
bWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwoKCiAgdm9pZCB0ZXJtaW5hdGUoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0
X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwoKCiAgdm9pZCB1bmV4cGVj
dGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwogIGJvb2wgdW5jYXVnaHRfZXhj
ZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdm9pZCBfX3ZlcmJv
c2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ug
c3RkCnsKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGlj
OgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkg
dGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90
aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3
X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQp2b2lkKiBvcGVyYXRvciBu
ZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5l
d1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRl
bGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3co
KTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5v
dGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6
Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0
IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0
ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lk
KiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJu
IF9fcDsgfQoKfQoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4K
ICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8
Y2hhcj47CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog
ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwogIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cn0KCgoKCgpleHRlcm4gIkMiIHsK
CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg
X19GSUxFOwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2No
Yls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19v
ZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBz
dHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zw
b3M2NF90OwoKCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYs
CiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQs
CiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09O
Vl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dD
T05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAw
MSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZf
c3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2Jq
ZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
ZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19j
b25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9p
bml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZf
ZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29u
dl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwg
dW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICos
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoK
CnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwg
X19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lk
ICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3Qp
ICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNf
ZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250
ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQg
Kl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVj
dCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJf
aGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBj
aGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0
OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRf
ZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207
CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9f
c3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRh
CnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVu
ZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAg
aW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRl
X3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoK
Cgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1
Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90Owp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1
Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5m
byBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmlu
ZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl
ZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKc3RydWN0IF9JT19qdW1wX3Q7IHN0
cnVjdCBfSU9fRklMRTsKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19t
YXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9z
YnVmOwoKCgogIGludCBfcG9zOwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2Rl
Y3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVj
dnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRf
ZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq
X19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAq
KiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191
bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwog
IGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29k
ZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJz
dGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgq
X19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9f
Y29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAo
Kl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3Qg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lP
X2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0
Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAg
d2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJf
dCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpf
SU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVm
X2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jh
c2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwog
IF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2
dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92
dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBf
SU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7
CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBf
SU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsK
CiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAq
X0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBf
SU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZf
dCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQg
Y2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190
ICpfbG9jazsKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2Nv
ZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9k
ZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQg
KildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ
TEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y
XzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsK
dHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19i
dWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRl
X2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3Nl
ZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBl
ZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9f
cmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29v
a2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4g
KndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25z
X3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRl
cm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUs
IGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19j
b29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7
CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAo
X0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
SU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVr
Y19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9f
ZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tm
aWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBf
X3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmlj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0
ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93
ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3Qp
IHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19v
ZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3Mg
KF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19m
cmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9J
T19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3
YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jl
c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y
ZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9f
cmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFk
biAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBf
SU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CgoKCgp0eXBl
ZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoK
CnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0
ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKCgoKCgoKZXh0ZXJuIGludCBy
ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJl
bmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBGSUxFICp0
bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9f
cykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cg
KCk7CmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNo
YXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK
CgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3Nl
YWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmb3BlbjY0
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJ
TEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmlj
dCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2ll
X2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVt
b3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhy
b3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0
IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj
dCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRm
IChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4s
CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f
LCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBp
bnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAw
KSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAz
KSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7
CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7
CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By
aW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNj
YW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0
ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBm
Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0
Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2Vk
IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNf
dW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBw
dXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhy
b3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBf
X3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0
aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf
X2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJp
Y3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRk
ZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1
dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1
bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf
dCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRy
LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAq
X19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2Vk
ICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVu
Y2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVu
Y2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg
ZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0
cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9f
d2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBp
bnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRo
cm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVy
cl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2Nr
ZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19j
b25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJu
IF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19u
ZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4
dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
RklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9k
ZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2Jz
dGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0
cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0YWNrX3Zw
cmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwp9Cm5hbWVzcGFj
ZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVh
cmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7
CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAg
dXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2lu
ZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZy
ZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRw
b3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAg
dXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2lu
ZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6
cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2lu
ZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsK
ICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwog
IHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAg
dXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KbmFtZXNwYWNlIF9fZ251X2N4
eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2Nh
bmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZz
Y2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnBy
aW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KCgoKc3RydWN0IHNjaGVkX3BhcmFt
CiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRl
cm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0
YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgp
OwoKCn0KCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlk
X3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBz
Y2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hl
ZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0
IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCnN0cnVj
dCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0
bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50
IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29u
c3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0
cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsK
ICB9OwoKCnN0cnVjdCBzaWdldmVudDsKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93
ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3Qg
bWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3Ry
ZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwgc3RydWN0IHRtICpfX3RwKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g
KmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3Ry
dWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBf
X3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHApIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25z
dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNo
YXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVy
LAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0
ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpl
eHRlcm4gdm9pZCB0enNldCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7
CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0
IHRpbWVfdCAqX193aGVuKSB0aHJvdyAoKTsKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0
bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAq
X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAo
X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBf
X2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
Y2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVlcCAo
Y2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBj
bG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19p
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBf
X2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1l
cmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVy
aWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVy
aWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0
IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNw
ZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVu
ICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoK
CgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNi
dWZwKSB0aHJvdyAoKTsKCgoKfQoKCmV4dGVybiAiQyIgewoKfQoKCmV4dGVybiAiQyIgewplbnVt
CnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQK
Cn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRf
U0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09Q
RV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFE
X01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRI
UkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhS
RUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9N
VVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9N
VVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVU
RVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FE
QVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJF
QURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JF
QURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldM
T0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFV
TFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CnN0cnVjdCBfcHRocmVh
ZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAq
X19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZm
ZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhS
RUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwK
CiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwpleHRlcm4gaW50IHB0aHJlYWRfY3Jl
YXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAo
KTsKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190
aHJlYWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0
dmFsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3Jl
dHVybikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90
IF9fdGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
ZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3Qg
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBh
cmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy
LCBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwgaW50IF9fc2NvcGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBf
X2d1YXJkc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
c2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZv
aWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpf
X3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0
YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9fc3RhY2tzaXplKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0
cl9ucCAocHRocmVhZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0
X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xp
Y3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2dldGNvbmN1cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0
Y29uY3VycmVuY3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211
dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf
bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4X3RpbWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0
ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRp
bWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0
aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRw
c2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19j
b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpf
X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBw
dGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25kX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ry
b3kgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9f
cmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211
dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3Ry
aWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0
IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3
bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja190aW1lZHJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
dGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxv
Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3
bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJl
YWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRo
cmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo
YXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9u
cCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
cHJlZikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3Bp
bmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3Qg
Kl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRo
cmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9z
cGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJp
Y3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0
aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRf
YmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJy
aWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhy
ZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRo
cmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9r
ZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5
X3QgX19rZXkpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNl
X3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5p
dF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0
Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5
cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2Nh
bmNlbHRocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwg
KHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl
ciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVj
dXRlKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChz
dHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAo
KTsKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3RydWN0IF9wdGhy
ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNr
KXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWRp
ZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lk
ICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf
X3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGls
ZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90
aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0
aHJlYWRfa2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlw
ZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCgpzdGF0aWMgaW5s
aW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9pZCAqY29uc3Qg
X19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CiAgcmV0dXJu
IF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0Kc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk
X29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBp
ZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwg
ZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl
YWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAq
KSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAq
cHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAw
KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tl
eV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVs
ZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMg
KF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5
KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRf
a2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZp
YyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAo
X19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkK
ICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4g
MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVh
ZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1
cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRl
eF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRo
cmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKbmFtZXNw
YWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYg
ZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xv
Y2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7
CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw
MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9
IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAx
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBw
ZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0Zmll
bGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAw
eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAw
eDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0K
CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90Owog
IHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2lu
ZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6
Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpz
dHJmdGltZTsKfQoKCgoKCgoKCgp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKc3RydWN0
IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRo
cm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k
ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChf
X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2Fz
ZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAo
X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IF9fd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hh
cl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90
ICp3Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2Nz
Y2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChf
X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3Bu
IChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndj
c3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJf
dCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAq
X19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25z
dCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Rl
bGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikg
dGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Nu
bGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIg
KF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3
Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hh
cl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3
Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAq
X19wKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jl
c3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJs
ZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAg
ICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBz
aXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVu
LAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRo
cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2Rz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAq
X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3Mg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRo
cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19k
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19w
cykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2NoYXJfdCBfX2MpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdj
c3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2Nz
dG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu
dCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2Nz
dG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
CiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0
b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9j
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUg
X193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n
cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5h
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv
dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3dj
c3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkg
KHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAq
X19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRl
IChfX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJp
bnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsK
CmV4dGVybiBpbnQgd3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4g
aW50IHZmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQg
dndwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVy
biBpbnQgdnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp
IDsKCgoKZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dz
Y2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAo
KSA7CgoKCgpleHRlcm4gaW50IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsK
CmV4dGVybiBpbnQgdndzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp
IDsKCmV4dGVybiBpbnQgdnN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ms
CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg
KCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gd2ludF90IGdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IGdldHdjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0
d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3
Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGZwdXR3cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAg
ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2Ms
IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9j
a2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4g
d2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19G
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3
Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190
cCkgdGhyb3cgKCk7Cn0KbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcg
OjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpm
cHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6Zndz
Y2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJs
ZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0
b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3By
aW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3
cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcg
Ojp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2lu
ZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcg
Ojp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6
Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6
Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5n
IDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6
d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondj
c3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVt
Y3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3By
aW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hh
cl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2No
cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nz
cGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90
KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19z
MSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nz
cmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3Rf
Y2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAg
aW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAg
eyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsg
fQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJf
dCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0
X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3Bh
Y2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVz
aW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2Nz
dG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0
b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBf
X3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAg
X19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAg
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUo
X19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01f
b2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhz
dHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAg
IDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1v
ZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y
Kz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0g
X19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFt
b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAr
PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9w
ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7
CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAg
IGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv
ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19w
b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm
IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3Rh
dGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoK
fQoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZh
bGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBf
X3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KCm5hbWVzcGFjZSBzdGQKewog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9
IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1l
IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJl
YW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0
ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAg
Y2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRl
ZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19z
dHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxj
aGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBv
c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJh
c2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hh
cj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5
cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lz
dHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFt
PHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3
Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hh
cl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3Zmls
ZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2Zz
dHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0KbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlw
ZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7
CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3QgX1Qx
JiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1Uy
PiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0
dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewog
IHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0IDwg
X194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA9
PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl
dHVybiAhKF9feCA8IF9feSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlu
bGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJl
dHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0Kc3RydWN0IF9fdHJ1ZV90eXBlIHt9
OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9f
dHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211
c3RfYmVfZmlyc3Q7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg
Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg
aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxv
bmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNf
aW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFy
X3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVk
ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVn
ZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNs
YXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6
Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgX05vcm1hbDsKfTsKCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBpbnB1dF9p
dGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1
Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoK
ICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVy
YXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1Ymxp
YyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0
ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAg
ICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9U
cCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0
b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRl
ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2lu
dGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90
eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJl
bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv
cjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0
cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBf
VHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRy
ZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7
CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf
SXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSgpOyB9Cgp9CgoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoK
ICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAg
KytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAgfQoKdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5j
ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAog
ICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KQogIHsKCiAgICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCnRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2
YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykK
ICB7CgogICAKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lk
CiAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwK
ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgewoKICAgCgogICAgaWYg
KF9fbiA+IDApCiAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgICBlbHNlCiAgICAgIHdoaWxl
IChfX24rKykgLS1fX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgX19pICs9IF9fbjsKICB9CnRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZv
aWQKICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAg
IF9fYWR2YW5jZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9Cm5h
bWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJl
dmVyc2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoK
ICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVy
YXRvciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2Ug
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJh
dG9yKCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJh
dG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0
b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJl
bnQpIHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVy
c2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6
IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJh
c2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAg
ICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3Vy
cmVudDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRl
cgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoK
CgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg
ICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAg
IHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBy
ZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAg
IHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGlu
dCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAg
ICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJl
dmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoK
ICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUg
X19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRp
ZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io
Y3VycmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBf
X247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQog
ICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRo
aXMgKyBfX24pOyB9CiAgICB9OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkKICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8
IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195
KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1
cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAog
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAg
eyByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3Bl
cmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlIF9fbiwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgp
IC0gX19uKTsgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNr
X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3Rh
Zywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0Nv
bnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5l
ciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVy
YXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQogICAgICBiYWNrX2lu
c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0
X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2so
X192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNl
cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAg
YmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQogICAgfTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAg
aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVy
KF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+KF9feCk7IH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3Mg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0
b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAg
ICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29u
dGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVy
YXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQogICAgICBmcm9udF9p
bnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25z
dF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u
dChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9udF9p
bnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAg
ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo
aXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+
CiAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9p
bnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4oX194KTsgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAg
ICBjbGFzcyBpbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVy
YXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRl
cmF0b3IgaXRlcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFp
bmVyX3R5cGU7CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwg
aXRlcihfX2kpIHt9CiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0
IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAg
ICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgICAgICsr
aXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNl
cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAg
fTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3Bh
Y2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNp
bmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db250YWluZXI+CiAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBp
dGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0
ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
cj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1
cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2Ug
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3Vy
cmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAgICBleHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVy
YXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6
IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAgICBwb2ludGVyCiAgICAg
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogICAgICBfX25vcm1h
bF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlz
OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1
cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQog
ICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJl
bnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAg
IG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1
cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQog
ICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29u
c3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0K
CiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRl
cmF0b3ImIF9faSkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJy
ZW50OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVy
biBfTV9jdXJyZW50OyB9CiAgICB9OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv
cGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+
JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK
ICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMu
YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi
b29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250
YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhz
LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v
bAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l
cj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
UiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v
bAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh
aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jo
cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9f
bGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNl
KCkgKyBfX24pOyB9Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0
ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAg
IAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9f
YjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgog
ICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7
CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAg
IG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAg
aWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1
cm4gX19iOyByZXR1cm4gX19hOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t
cChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBt
YXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAg
IH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy
CiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
X0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBf
X24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsr
X19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f
Y29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog
X19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihf
VHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg
cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBf
X3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p
MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw
ZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwog
ICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg
ICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1h
bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFz
dC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0
ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6
X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u
b3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1
cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBf
X2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQog
ICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQg
PSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg
IGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3Ig
KF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9fcmVz
dWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29w
eV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVy
MgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAg
ICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNw
YXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAg
ICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVz
dWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1Rw
KSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlz
cGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBf
VHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1Rw
KiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0
Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEs
IHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChf
QkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+
Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJk
X2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
QkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9v
dXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVf
dHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl
bmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9y
bWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
OyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l
IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp
cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0
dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgp
LCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFj
a3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f
ZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJk
X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkp
OwogICAgfQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5s
aW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJ
MiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2Zp
cnN0ID0gX192YWx1ZTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlw
ZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091
dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7Cgog
ICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpf
X2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5l
IHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFz
dCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAg
PSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0K
CiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciog
X19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1w
ID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9f
dG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciog
X19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3Rt
cCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihf
X3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+
CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmls
bChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9f
bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNo
YXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hh
ciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAg
ICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6
ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24s
IF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRl
cjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAg
ICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlf
cHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19m
aXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5w
dXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5l
IGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAg
IAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAg
ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK
ICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAg
ICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg
ICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0
dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19j
b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo
Y29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJz
dDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9f
bGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xh
c3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEs
IF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAw
ID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciog
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0Miwg
Y29uc3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21w
YXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0
Mik7CgoKCgoKCiAgfQoKfQoKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRf
ZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBl
aWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
b3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9Cm5h
bWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRl
ZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAg
X19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2Uo
X1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0
ZXhfdCBfX3RtcCA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07
CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAg
ICBfTV9pbmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3Vu
dF9sb2NrKTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxv
Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAg
ICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAg
IHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9t
dXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAg
fQogIH07CiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1
Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVt
cGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19z
dHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJ
TUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3
YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhy
ZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAg
dW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhy
ZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoK
ICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6
ZSgpCiAgICB7CiAgICB9CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoK
ICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAg
IF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2so
Jl9NX2xvY2spOwogICAgfQogIH07CiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NU
TF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9j
ayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9j
aygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygp
OyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYp
OwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQoKbmFt
ZXNwYWNlIHN0ZAp7CiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGlj
IHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRvciBu
ZXcoX19uKTsgfQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6
ZV90KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKICB0ZW1wbGF0ZSA8aW50
IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2
YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0
aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lk
ICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3Rh
dGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lk
KiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl
c3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg
IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg
KQogICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2
b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKDAgPT0g
X19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9t
YWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBf
X29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihfX29sZCk7CiAgICAgIH0KICAg
IH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0
ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCog
X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3Ig
KDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19h
bGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIp
CiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAg
ICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf
X24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9p
ZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFs
bG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgw
ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxs
b2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVz
dWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAg
ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19u
ZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwogIHRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgogIGNsYXNzIF9fc2ltcGxlX2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyBfVHAq
IGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikg
X0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIF9UcCog
YWxsb2NhdGUoKQogICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChf
VHApKTsgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24p
CiAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m
IChfVHApKTsgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICB7IF9B
bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICB9OwogIHRlbXBsYXRlIDxj
bGFzcyBfQWxsb2M+CiAgY2xhc3MgX19kZWJ1Z19hbGxvYwogIHsKICBwcml2YXRlOgogICAgZW51
bSB7X1NfZXh0cmEgPSA4fTsKCgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjph
bGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9
IF9fbjsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CgogICAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAg
IGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gKDApKTsKICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBf
X24gKyAoaW50KSBfU19leHRyYSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAg
Y2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0
aWNfY2FzdDx2b2lkPiAoMCkpOwogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAg
ICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiArIChpbnQpIF9T
X2V4dHJhKTsKICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICAgIHJldHVy
biBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgfQogIH07CnRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZQogIHsK
ICBwcml2YXRlOgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFYX0JZVEVTID0g
MTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAg
dW5pb24gX09iagogICAgewogICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAg
ICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICAgIH07CgogICAgc3RhdGljIF9PYmoqIHZvbGF0
aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgIHN0YXRpYyBjaGFyKiBfU19zdGFy
dF9mcmVlOwogICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgc3RhdGljIHNpemVfdCBf
U19oZWFwX3NpemU7CgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRv
cl9sb2NrOwoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVz
KQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXpl
X3QpIF9BTElHTiAtIDEpKTsgfQoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX2ZyZWVsaXN0X2lu
ZGV4KHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B
TElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOyB9CgoKCiAgICBzdGF0aWMgdm9pZCoKICAgIF9T
X3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgIHN0YXRpYyBjaGFyKgogICAgX1NfY2h1bmtfYWxs
b2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgIGNsYXNzIF9Mb2NrCiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIF9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9j
YXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CiAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhy
ZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgfSBf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKICBw
dWJsaWM6CgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewog
ICAgICB2b2lkKiBfX3JldCA9IDA7CgogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRF
UykKICAgICAgICBfX3JldCA9IF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19uKTsKICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9
IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAg
ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0
X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICBpZiAoX19yZXN1bHQgPT0g
MCkKICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICBfX3JldCA9IF9fcmVz
dWx0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9OwoK
CiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAg
ICB7CiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fbWVtX2lu
dGVyZmFjZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgICAgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAgICAgX09iaiogX19xID0gKF9P
YmoqKV9fcDsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9f
cSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIHZvaWQqCiAgICBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwog
IH07CgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3Rv
dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9
IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0g
X190b3RhbF9ieXRlcykKICAgICAgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsK
ICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9f
cmVzdWx0KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsK
ICAgICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19y
ZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs
X2J5dGVzOwogICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgICAy
ICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAg
ICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9P
YmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwog
ICAgICAgICAgICB9CiAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKSBfX21lbV9pbnRl
cmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgIGlmICgwID09IF9TX3N0
YXJ0X2ZyZWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2Jq
KiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAo
OyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAq
X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Ag
LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVl
ID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3Rh
cnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxv
YyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKilfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0
KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19n
ZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dl
dDsKICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAg
ICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAg
ICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAg
IF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBf
X2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICAgIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAg
ICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25l
eHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9f
aSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0
X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25v
YmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9f
Y3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0K
ICAgICAgfQogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKCiAgdGVtcGxhdGU8Ym9vbCB0
aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uZXdfc3opCiAgICB7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX19j
b3B5X3N6OwoKICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25l
d19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3As
IF9fbmV3X3N6KSk7CiAgICAgIH0KICAgICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBf
U19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgICBfX3Jlc3VsdCA9IGFsbG9j
YXRlKF9fbmV3X3N6KTsKICAgICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19v
bGRfc3ogOiBfX25ld19zejsKICAgICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7
CiAgICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7CiAgICAgIHJldHVybihfX3Jlc3VsdCk7
CiAgICB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIF9TVExfbXV0
ZXhfbG9jawogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T
X25vZGVfYWxsb2NhdG9yX2xvY2sKICA9IHsgezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURf
TlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19z
dGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAg
Y2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5k
X2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBzaXpl
X3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9z
aXplID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgdHlwZW5h
bWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9s
YXRpbGUKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19m
cmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTx0cnVlLCAwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZh
bHNlLCAwPiBfX3NpbmdsZV9jbGllbnRfYWxsb2M7CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz
IGFsbG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07
CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg
dGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2Nh
dG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50
ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3Rf
cG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7
IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog
ICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShf
X24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQg
ZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFs
bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK
ICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19w
KSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgp
OyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0
dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK
ewogIHJldHVybiBmYWxzZTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0
cnVjdCBfX2FsbG9jYXRvcgp7CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRl
ZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+
IG90aGVyOwogIH07CgogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogIF9fYWxsb2NhdG9yKGNv
bnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxv
Y2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICA6
IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9j
YXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0
IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNl
IF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUg
X19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3Rh
dGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihf
VHApKSkKICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBz
aXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9f
biAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygp
CiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1
Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsg
fQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9w
b2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4g
b3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ey
KQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n
X2FsbG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewog
IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxv
YzsKfQoKCgoKCgoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsK
fQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVn
X2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAg
cmV0dXJuIGZhbHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0
cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxf
VHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojpf
U19pbnN0YW5jZWxlc3M7CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0
IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwg
X19hbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3Jf
dHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVf
YWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7
CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgX0FsbG9j
X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j
ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9j
PF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg
ICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+
ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9j
YXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf
X2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9y
PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBhbGxvY2F0b3I8d2NoYXJfdD47CgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPjsKCn0KbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAg
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25z
dHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2Fz
dDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBf
VDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChz
dGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAg
IHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmly
c3QpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9p
ZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBf
X3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxp
bmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9U
cCgpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9p
ZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNf
dHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9Cm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGlu
ZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf
dHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg
X0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICAgICAgaWYg
KHRydWUpIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsr
X19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAgICBy
ZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgaWYgKGZhbHNlKQogICAgICAgIHsKICAgICAgICAg
IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAgICA7CiAgICAgICAgfQogICAgfQog
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
aWYgKHRydWUpIHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAg
ICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgfQogICAgICBpZiAoZmFsc2Up
CiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAg
OwogICAgICAgIH0KICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194KQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmluaXRpYWxpemVkX2Zp
bGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHJldHVybiBmaWxs
X24oX19maXJzdCwgX19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxz
ZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICBp
ZiAodHJ1ZSkgewogICAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAg
ICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAg
ICB9CiAgICAgIGlmIChmYWxzZSkKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0
LCBfX2N1cik7CiAgICAgICAgICA7CiAgICAgICAgfQogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf
Rm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5
cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9fZmly
c3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg
aW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCk7CiAgICAgIGlmICh0cnVlKSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGlmIChm
YWxzZSkKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAg
ICAgICAgOwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3Vs
dCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9f
cmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgaWYgKHRydWUpIHsKICAgICAgICByZXR1cm4gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAgICAgIGlm
IChmYWxzZSkKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwog
ICAgICAgICAgOwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9p
ZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5w
dXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIGlm
ICh0cnVlKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194
KTsKICAgICAgfQogICAgICBpZiAoZmFsc2UpCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko
X19maXJzdDIsIF9fbWlkMik7CiAgICAgICAgICA7CiAgICAgICAgfQogICAgfQoKfQoKbmFtZXNw
YWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lk
CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2
b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Ro
cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFp
bl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3Vt
ZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lv
c19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9WZWN0
b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRh
X2FsbG9jYXRvcjsgfQoKICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoMCksIF9NX2Zpbmlz
aCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIGFsbG9jYXRvcl90
eXBlIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7
CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19u
KQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQogIHZvaWQg
X01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKF9fcCkgX01fZGF0
YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0Fs
bG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlw
ZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh
dG9yX3R5cGUoKTsgfQoKICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
KQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQog
IHt9Cgpwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAq
IF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Rw
LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9jX3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0
ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0K
ICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9BbGxvY190
eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnN0cnVjdCBfVmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jh
c2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxs
b2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Cgog
IF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30K
ICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBf
QmFzZShfX2EpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2Zpbmlz
aCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICB9
CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
YyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFz
ZTxfVHAsIF9BbGxvYz4KewoKIAoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAs
IF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBl
OwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUq
IHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3JfdHlwZT4g
aXRlcmF0b3I7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3Bv
aW50ZXIsIHZlY3Rvcl90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYg
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBf
QmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25z
dF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRl
cmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jh
c2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9C
YXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpf
TV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0
b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0CiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2ZpbmlzaCk7
IH0KCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp
IGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoK
CgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9y
KGJlZ2luKCkpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QK
ICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgogIHNpemVf
dHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkp
OyB9CgoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBl
KC0xKSAvIHNpemVvZihfVHApOyB9CgoKCgoKICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAog
ICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAt
IGJlZ2luKCkpOyB9CgoKCgogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4o
KSA9PSBlbmQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0
dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl
X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01f
cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5z
aXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CiAgcmVmZXJl
bmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAo
KnRoaXMpW19fbl07IH0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QK
ICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKCiAgZXhw
bGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAm
IF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9y
KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg
X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9
CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9f
eC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0
LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZv
aWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3Ry
dWVfdHlwZSkKICAgICAgICB7CiAgICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgICAgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgICB9CgogIHRl
bXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxp
emVfYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19m
YWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsK
ICAgICAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVn
b3J5KCkpOwogICAgICAgIH0KCiAgfnZlY3RvcigpCiAgeyBfRGVzdHJveShfTV9zdGFydCwgX01f
ZmluaXNoKTsgfQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAg
aWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUg
PSBzaXplKCk7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24s
IF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsg
X19vbGRfc2l6ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAg
IH0KICB9CiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBf
TV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNw
YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xh
c3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgIHsgX01fZmlsbF9hc3NpZ24oKHNp
emVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl
cj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNh
dGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29y
eSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAog
ICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7
IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3Qg
eyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihl
bmQoKSAtIDEpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQogIHZvaWQKICBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpCiAgewog
ICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBfQ29uc3RydWN0
KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAg
IF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQKICBzd2FwKHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feCkKICB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7
CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dhcChf
TV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IK
ICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6
ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBf
TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1
Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAg
ICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBi
ZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
KQogIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChf
TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewog
ICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAg
ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVy
biBiZWdpbigpICsgX19uOwogIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgdm9pZAogICAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAg
ICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICAgICBf
TV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIg
X192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2luc2VydChfX3Bvcywgc3RhdGljX2Nh
c3Q8c2l6ZV90eXBlPihfX24pLCBzdGF0aWNfY2FzdDxfVHA+KF9fdmFsKSk7IH0KCiAgdGVtcGxh
dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3Bh
dGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBf
X2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5
OwogICAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRl
Z29yeSgpKTsKICAgIH0KICB2b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gp
OyB9CgogIHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmluaXNoOwog
ICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9f
cG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIF9E
ZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3Ig
ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBf
X2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBfRGVzdHJveShfX2ksIGVuZCgp
KTsKICAgIF9NX2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJl
dHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29u
c3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShi
ZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCks
IF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBf
X25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KCgoKCgoKCiAgdm9pZCBj
bGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHko
c2l6ZV90eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQog
IHsKICAgIHBvaW50ZXIgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgaWYgKHRydWUp
IHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAgICBpZiAoZmFsc2UpCiAgICAgIHsKICAgICAg
ICBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOwogICAgICAgIDsKICAgICAgfQogIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6
ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg
fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9p
bml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsK
ICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgX01fc3Rh
cnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCAr
IF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh
dG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAg
ICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kp
CnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQo
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dh
cCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewog
IF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m
IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8
IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wK
b3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rvcjxf
VHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9B
bGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAo
Jl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsK
ICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9h
bGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBf
RGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFy
dCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7
CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBl
bHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5i
ZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpKTsKICAgICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBz
aXplKCksIF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsg
c2l6ZSgpLCBfX3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9z
dGFydCArIF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24o
c2l6ZV90IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCnsKICBpZiAoX19uID4gY2FwYWNp
dHkoKSkgewogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxs
b2NhdG9yKCkpOwogICAgX190bXAuc3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNp
emUoKSkgewogICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9
CiAgZWxzZQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXI+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIoYmVnaW4o
KSk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1
ciwgKytfX2ZpcnN0KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9f
Zmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9h
c3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAg
c2l6ZV90eXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKCiAgaWYgKF9fbGVu
ID4gY2FwYWNpdHkoKSkgewogICAgcG9pbnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShf
X2xlbiwgX19maXJzdCwgX19sYXN0KSk7CiAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh
cnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmlu
aXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7
CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0
KSk7CiAgICBfRGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9f
bmV3X2ZpbmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0g
X19maXJzdDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9f
bWlkLCBfTV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQs
IF9fbGFzdCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSkgewogICAgX0NvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwog
ICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJk
KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gt
IDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qg
c2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g
PSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25l
d19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikpOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9f
bmV3X3N0YXJ0KTsKICAgIGlmICh0cnVlKSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3Qo
X19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9f
bmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9m
aW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmlu
aXNoKTsKICAgIH0KICAgIGlmIChmYWxzZSkKICAgICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3
X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5i
YXNlKCksX19sZW4pOwogICAgICAgIDsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5k
KCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgIF9NX2ZpbmlzaCA9
IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0
LmJhc2UoKSArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np
dGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIF9Db25z
dHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAg
Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAg
ICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBf
VHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo
KTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29s
ZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7
CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgaWYgKHRydWUpIHsK
ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0
KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bmV3X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3
X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp
b24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgaWYgKGZhbHNlKQogICAgICB7CiAgICAg
ICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICBfTV9kZWFsbG9j
YXRlKF9fbmV3X3N0YXJ0LF9fbGVuKTsKICAgICAgICA7CiAgICAgIH0KICAgIF9EZXN0cm95KGJl
Z2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBf
X2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXpl
X3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194
OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlv
bjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2Vs
ZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAt
IF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAg
ICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xk
X2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hf
Y29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24o
X01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmlu
aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
cG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0g
X19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194
X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
b2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3Np
emUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01f
YWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0
KTsKICAgICAgaWYgKHRydWUpIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAg
ICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlv
biwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgaWYgKGZhbHNlKQogICAgICAg
IHsKICAgICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAg
ICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICA7CiAg
ICAgICAgfQogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVh
bGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9N
X3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5p
c2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSAr
IF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6
X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2Zp
cnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK
ewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIg
PSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5p
c2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBf
TV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRf
ZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVy
KTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsK
ICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAg
IF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQs
IF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
b2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3Rh
cnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3
X3N0YXJ0KTsKICAgICAgaWYgKHRydWUpIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRp
YWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNo
KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
cG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAg
ICAgaWYgKGZhbHNlKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9f
bmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSwg
X19sZW4pOwogICAgICAgICAgOwogICAgICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9N
X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAg
X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KbmFtZXNwYWNlIHN0
ZAp7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9CaXRfdHlwZTsKICBlbnVtIHsgX01fd29yZF9i
aXQgPSBpbnQoOCAqIHNpemVvZihfQml0X3R5cGUpKSB9OwoKc3RydWN0IF9CaXRfcmVmZXJlbmNl
IHsKCiAgX0JpdF90eXBlICogX01fcDsKICBfQml0X3R5cGUgX01fbWFzazsKICBfQml0X3JlZmVy
ZW5jZShfQml0X3R5cGUgKiBfX3gsIF9CaXRfdHlwZSBfX3kpCiAgICA6IF9NX3AoX194KSwgX01f
bWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21h
c2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISEoKl9NX3AgJiBfTV9t
YXNrKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYg
KF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9y
ZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBi
b29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3Jl
ZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194
KTsgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQg
c3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190
bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVy
YXRvcl9iYXNlIDogcHVibGljIGl0ZXJhdG9yPHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBi
b29sPgp7CiAgX0JpdF90eXBlICogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBf
Qml0X2l0ZXJhdG9yX2Jhc2UoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAg
OiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAg
IGlmIChfTV9vZmZzZXQrKyA9PSBfTV93b3JkX2JpdCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0g
MDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIF9NX2J1bXBfZG93bigpIHsKICAgIGlm
IChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9NX3dvcmRfYml0IC0gMTsK
ICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsK
ICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9f
biAvIF9NX3dvcmRfYml0OwogICAgX19uID0gX19uICUgX01fd29yZF9iaXQ7CiAgICBpZiAoX19u
IDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfTV93b3JkX2Jp
dDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBp
bnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2Um
IF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09
IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3Jf
YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09
IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJh
dG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAh
KCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3Jf
YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJu
ICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRv
cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsKICB9Cn07Cgpp
bmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwg
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX01fd29yZF9iaXQgKiAo
X194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoK
CnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlw
ZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSog
cG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0
b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0b3IoX0JpdF90
eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194
LCBfX3kpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiByZWZlcmVu
Y2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsK
ICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0
b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7
CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01f
YnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0o
aW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAg
ICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlw
ZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0
b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw
ZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190
bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkg
Y29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBf
X2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJl
dHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3Ir
KHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsg
X19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRv
cl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9j
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDog
X0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihfQml0X3R5
cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gs
IF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkK
ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBj
b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJl
bmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3Rf
aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRv
ciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg
IF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw
ZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1
cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5j
ZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRp
ZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsKICB9Cn07Cgpp
bmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3Qg
X0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0KCgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9y
X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJv
b2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf
YWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNo
KCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX0JpdF90eXBlICogX01f
Yml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxv
Y2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2Rl
YWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX01fZGF0YV9hbGxvY2F0
b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9C
aXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAqIF9NX2VuZF9vZl9zdG9yYWdlOwp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl
PF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRv
cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBh
bGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2Uo
MCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90
eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBf
Qml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190
eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2
b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9j
X3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRl
cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICog
X01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZl
Y3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1Nf
aW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFz
ZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsK
CnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4g
OiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYg
Ym9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSBy
ZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBf
Qml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9p
bnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9C
aXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0
ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRl
ZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAg
IHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAg
cHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7
CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2lu
ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9N
X2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6
ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9f
TV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9m
aW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBf
TV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChf
TV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3Np
dGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/
IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAg
ICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg
ICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5k
KCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAg
ICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0
ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0g
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAg
ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewog
ICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsK
ICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg
dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAg
ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBf
X24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz
aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19u
KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBz
aXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01f
Yml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwg
X19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwg
ZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7
CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9
CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7
IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0K
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXpl
X3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg
eyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qg
ewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl
LCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJl
Z2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19u
KQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAg
IGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsg
cmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01f
cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMt
PnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAg
ICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hl
Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgq
dGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19h
KSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAg
ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24p
OwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8g
fjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01f
aW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y
YWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShf
X3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7
CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRp
YWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7
CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9l
bmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu
cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rp
c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3Io
KSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgICBp
ZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2Fw
YWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9pbml0aWFsaXpl
KF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwg
YmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194
LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmls
bF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkg
ewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4w
IDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAg
IGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAg
ICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9m
aWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVy
YXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
dGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2Vy
IF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24s
IChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQo
ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29w
eShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVsc2UgewogICAgICAg
IF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQs
IHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAg
aW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVz
ZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAg
ICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNo
ID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVh
bGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRf
Yml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu
KCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigp
OyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29u
c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZv
aWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAg
ICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rv
cjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01f
c3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICAg
c3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAg
fQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9v
bCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsK
ICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp
b24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAg
ICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1cm4gYmVnaW4oKSAr
IF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01f
aW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2Zp
bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5
cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRl
Z3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlm
IChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24p
IHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBk
aWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9u
ICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZl
cmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgX0JpdF90eXBlICogX19x
ID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2lu
KCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9f
biwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93
b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAg
IH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBi
b29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAg
ICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVy
YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVu
ZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAg
ICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVy
YXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01f
ZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3gg
PSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgICAgZXJhc2Uo
YmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwogICAgICBlbHNl
CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQog
ICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IF9NX3N0YXJ0Ll9N
X3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19w
OwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07
CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxvYz4gYml0X3ZlY3RvcjsKCn0KCgpuYW1lc3Bh
Y2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZv
aWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWlu
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1l
bnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9z
X2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHN0cnVj
dCBfTGlzdF9ub2RlX2Jhc2UKICB7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25leHQ7CiAgICBf
TGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgc3RydWN0IF9MaXN0X25vZGUgOiBwdWJsaWMgX0xpc3Rfbm9kZV9iYXNlCiAgICB7CiAgICAg
IF9UcCBfTV9kYXRhOwogICAgfTsKCiAgc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICB7CiAg
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5OwoKICAgIF9MaXN0X25vZGVfYmFzZSogX01fbm9kZTsKCiAgICBfTGlzdF9pdGVy
YXRvcl9iYXNlKF9MaXN0X25vZGVfYmFzZSogX194KQogICAgOiBfTV9ub2RlKF9feCkKICAgIHsg
fQoKICAgIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoKQogICAgeyB9CgogICAgdm9pZAogICAgX01faW5j
cigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CgogICAgdm9pZAogICAgX01f
ZGVjcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9CgogICAgYm9vbAogICAg
b3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CgogICAgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV9ub2Rl
ICE9IF9feC5fTV9ub2RlOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9MaXN0X2l0ZXJhdG9yIDogcHVibGlj
IF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICAgIHsKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxf
VHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAs
Y29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfTGlz
dF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogICAgICB0eXBlZGVmIF9SZWYgcmVm
ZXJlbmNlOwogICAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgICAgIF9MaXN0
X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpCiAgICAgIDogX0xpc3RfaXRlcmF0b3JfYmFzZShfX3gpCiAg
ICAgIHsgfQoKICAgICAgX0xpc3RfaXRlcmF0b3IoKQogICAgICB7IH0KCiAgICAgIF9MaXN0X2l0
ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpCiAgICAgIDogX0xpc3RfaXRlcmF0b3JfYmFzZShf
X3guX01fbm9kZSkKICAgICAgeyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gKChfTm9kZSopIF9NX25vZGUpLT5fTV9kYXRhOyB9CgogICAg
ICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAg
ICAgdGhpcy0+X01faW5jcigpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg
X1NlbGYKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9
ICp0aGlzOwogICAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAg
ICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgIHRo
aXMtPl9NX2RlY3IoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIF9TZWxm
CiAgICAgIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhp
czsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9
CiAgICB9OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9v
bCBfSXNTdGF0aWM+CiAgICBjbGFzcyBfTGlzdF9hbGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojph
bGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2Nh
dG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9Ob2Rl
X2FsbG9jYXRvcjsgfQoKICAgICAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKQogICAgICA6IF9Ob2RlX2FsbG9jYXRvcihfX2EpCiAgICAgIHsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpCiAgICAgIHsg
cmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBf
TV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfTm9kZV9hbGxvY2F0b3Iu
ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlbmFtZSBfQWxs
b2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsKCiAgICAgIF9MaXN0X25vZGU8X1RwPiogX01f
bm9kZTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2Nh
dG9yPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAg
ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBl
OwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29u
c3QgYWxsb2NhdG9yX3R5cGUmKQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+Ojpf
QWxsb2NfdHlwZQogICAgICAgICAgICAgIF9BbGxvY190eXBlOwoKICAgICAgX0xpc3Rfbm9kZTxf
VHA+KgogICAgICBfTV9nZXRfbm9kZSgpCiAgICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxv
Y2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4q
IF9fcCkKICAgICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9MaXN0X2Jhc2UKICAg
ICAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1Rw
LCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9U
cCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgICAgIF9CYXNlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAg
ICAgIF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShf
X2EpCiAgICAgIHsKICAgICAgICBfTV9ub2RlID0gX01fZ2V0X25vZGUoKTsKICAgICAgICBfTV9u
b2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAgICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9k
ZTsKICAgICAgfQoKICAgICAgfl9MaXN0X2Jhc2UoKQogICAgICB7CiAgICAgICAgY2xlYXIoKTsK
ICAgICAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsKICAgICAgfQoKICAgICAgdm9pZCBjbGVhcigp
OwogICAgfTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j
YXRvcjxfVHA+ID4KICAgIGNsYXNzIGxpc3QgOiBwcm90ZWN0ZWQgX0xpc3RfYmFzZTxfVHAsIF9B
bGxvYz4KICAgIHsKCiAgICAgCgogICAgICB0eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+
IF9CYXNlOwogICAgcHJvdGVjdGVkOgogICAgICB0eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50ZXI7
CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVm
IHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9M
aXN0X25vZGU8X1RwPiBfTm9kZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAg
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYg
X0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX0xp
c3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7Cgog
ICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2
ZXJzZV9pdGVyYXRvcjsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9ub2Rl
OwogICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9n
ZXRfbm9kZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Ob2RlKgogICAgICBfTV9jcmVhdGVfbm9k
ZShjb25zdCBfVHAmIF9feCkKICAgICAgewogICAgICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9k
ZSgpOwogICAgICAgIGlmICh0cnVlKSB7CiAgICAgICAgICBfQ29uc3RydWN0KCZfX3AtPl9NX2Rh
dGEsIF9feCk7CiAgICAgICAgfQogICAgICAgIGlmIChmYWxzZSkKICAgICAgICB7CiAgICAgICAg
ICBfTV9wdXRfbm9kZShfX3ApOwogICAgICAgICAgOwogICAgICAgIH0KICAgICAgICByZXR1cm4g
X19wOwogICAgICB9CgogICAgICBfTm9kZSoKICAgICAgX01fY3JlYXRlX25vZGUoKQogICAgICB7
CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgaWYgKHRydWUpIHsK
ICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAgICAgICAgfQogICAgICAgIGlm
IChmYWxzZSkKICAgICAgICB7CiAgICAgICAgICBfTV9wdXRfbm9kZShfX3ApOwogICAgICAgICAg
OwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgcHVibGljOgogICAg
ICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbGlzdChj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFz
ZShfX2EpCiAgICAgIHsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUtPl9NX25leHQpOyB9CgogICAgICBjb25z
dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PF9Ob2RlKj4oX01fbm9kZS0+X01fbmV4dCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgp
CiAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVu
ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0
b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7
IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAg
ICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ub2RlLT5fTV9u
ZXh0ID09IF9NX25vZGU7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgbWF4X3NpemUoKSBjb25zdAogICAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9Cgog
ICAgICByZWZlcmVuY2UKICAgICAgZnJvbnQoKQogICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoK
ICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGZyb250KCkgY29uc3QKICAgICAgeyByZXR1cm4g
KmJlZ2luKCk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBiYWNrKCkKICAgICAgeyByZXR1cm4g
KigtLWVuZCgpKTsgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGJhY2soKSBjb25zdAog
ICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHN3YXAobGlzdDxf
VHAsIF9BbGxvYz4mIF9feCkKICAgICAgeyBzdGQ6OnN3YXAoX01fbm9kZSwgX194Ll9NX25vZGUp
OyB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29u
c3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9k
ZShfX3gpOwogICAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAg
ICAgIF9fdG1wLT5fTV9wcmV2ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAg
IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAgICAgIF9f
cG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAgIHJldHVybiBfX3RtcDsK
ICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24p
CiAgICAgIHsgcmV0dXJuIGluc2VydChfX3Bvc2l0aW9uLCBfVHAoKSk7IH0KCgogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rp
c3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVl
X3R5cGUpCiAgICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAo
X1RwKSBfX3gpOyB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAg
ICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7Cgog
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAg
ICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICBf
TV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog
ICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19u
LCBfX3gpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
LCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2b2lkCiAgICAgIHB1c2hf
ZnJvbnQoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KCiAg
ICAgIHZvaWQKICAgICAgcHVzaF9mcm9udCgpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCkpOyB9Cgog
ICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNlcnQo
ZW5kKCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKCkKICAgICAgeyBpbnNl
cnQoZW5kKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0
aW9uKQogICAgICB7CiAgICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25leHRfbm9kZSA9IF9fcG9z
aXRpb24uX01fbm9kZS0+X01fbmV4dDsKICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9u
b2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgIF9Ob2RlKiBfX24gPSBz
dGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7CiAgICAgICAgX19wcmV2X25v
ZGUtPl9NX25leHQgPSBfX25leHRfbm9kZTsKICAgICAgICBfX25leHRfbm9kZS0+X01fcHJldiA9
IF9fcHJldl9ub2RlOwogICAgICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwogICAgICAgIF9N
X3B1dF9ub2RlKF9fbik7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9Ob2Rl
Kj4oX19uZXh0X25vZGUpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIo
KQogICAgICB7IF9CYXNlOjpjbGVhcigpOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpOwoKICAgICAgdm9pZAogICAgICByZXNp
emUoc2l6ZV90eXBlIF9fbmV3X3NpemUpCiAgICAgIHsgdGhpcy0+cmVzaXplKF9fbmV3X3NpemUs
IF9UcCgpKTsgfQoKICAgICAgdm9pZAogICAgICBwb3BfZnJvbnQoKQogICAgICB7IGVyYXNlKGJl
Z2luKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9iYWNrKCkKICAgICAgewogICAgICAgIGl0
ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICAgICAgZXJhc2UoLS1fX3RtcCk7CiAgICAgIH0KCiAg
ICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNl
KF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQoKICAgICAgZXhw
bGljaXQKICAgICAgbGlzdChzaXplX3R5cGUgX19uKQogICAgICA6IF9CYXNlKGFsbG9jYXRvcl90
eXBlKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkpOyB9CgoKCiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAg
IHsgaW5zZXJ0KGJlZ2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIGxpc3QoY29uc3Qg
bGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigp
KQogICAgICB7IGluc2VydChiZWdpbigpLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsgfQoKICAg
ICAgfmxpc3QoKQogICAgICB7IH0KCiAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+JgogICAgICBvcGVy
YXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCk7CgogICAgcHVibGljOgoKCgoKCiAg
ICAgIHZvaWQKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpCiAg
ICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01f
ZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgYXNzaWdu
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7
CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6
X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRl
Z2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsgX01fZmlsbF9h
c3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25fZGlz
cGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgdm9pZAogICAgICBfTV90cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBf
X2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpZiAoX19wb3NpdGlvbiAh
PSBfX2xhc3QpIHsKCiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9
IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldi0+
X01fbmV4dCA9IF9fbGFzdC5fTV9ub2RlOwogICAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5f
TV9wcmV2LT5fTV9uZXh0ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAgICAgICBfTGlzdF9ub2Rl
X2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgICAgX19w
b3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAg
ICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsK
ICAgICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAgIH0KICAg
ICAgfQoKICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3Np
dGlvbiwgbGlzdCYgX194KQogICAgICB7CiAgICAgICAgaWYgKCFfX3guZW1wdHkoKSkKICAgICAg
ICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkp
OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBs
aXN0JiwgaXRlcmF0b3IgX19pKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19qID0gX19pOwog
ICAgICAgICsrX19qOwogICAgICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9u
ID09IF9faikgcmV0dXJuOwogICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9f
aSwgX19qKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3Np
dGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewog
ICAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAgIHRoaXMtPl9NX3RyYW5zZmVy
KF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg
cmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CgogICAgICB2b2lkCiAgICAgIHVuaXF1ZSgpOwoK
ICAgICAgdm9pZAogICAgICBtZXJnZShsaXN0JiBfX3gpOwoKICAgICAgdm9pZAogICAgICByZXZl
cnNlKCk7CgogICAgICB2b2lkCiAgICAgIHNvcnQoKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9QcmVkaWNhdGU+CiAgICAgICAgdm9pZAogICAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlKTsK
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICAgICAgdm9pZAog
ICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAgIG1lcmdlKGxpc3QmLCBf
U3RyaWN0V2Vha09yZGVyaW5nKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFr
T3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29u
c3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGxp
c3Q8X1RwLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgICBjb25z
dF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5k
MiA9IF9feS5lbmQoKTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVnaW4oKTsK
ICAgICAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwogICAgICB3aGlsZSAoX19p
MSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpIHsKICAgICAg
ICArK19faTE7CiAgICAgICAgKytfX2kyOwogICAgICB9CiAgICAgIHJldHVybiBfX2kxID09IF9f
ZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8
X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgewogICAg
ICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5k
KCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwg
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0
PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4m
IF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0
IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAg
eyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9f
eCwgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBfTGlzdF9iYXNl
PF9UcCxfQWxsb2M+OjoKICAgIGNsZWFyKCkKICAgIHsKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBf
X2N1ciA9IHN0YXRpY19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9NX25vZGUtPl9NX25leHQpOwog
ICAgICB3aGlsZSAoX19jdXIgIT0gX01fbm9kZSkgewogICAgICAgIF9MaXN0X25vZGU8X1RwPiog
X190bXAgPSBfX2N1cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0PF9MaXN0X25vZGU8X1Rw
Pio+KF9fY3VyLT5fTV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwog
ICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICBfTV9ub2RlLT5fTV9uZXh0
ID0gX01fbm9kZTsKICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBfTV9p
bnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNlcnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwoK
ICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv
aWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3Np
dGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIGZvciAoIDsg
X19uID4gMDsgLS1fX24pCiAgICAgICAgaW5zZXJ0KF9fcG9zaXRpb24sIF9feCk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgbGlz
dDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgZXJhc2UoaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19maXJzdCsrKTsKICAgICAgcmV0dXJuIF9fbGFz
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2
b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwg
Y29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbGVu
IDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICAgICAgOwogICAgICBpZiAoX19sZW4g
PT0gX19uZXdfc2l6ZSkKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsKICAgICAgZWxzZQogICAg
ICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGxpc3Q8X1RwLCBfQWxsb2M+
JiBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxv
Yz4mIF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgIGl0ZXJhdG9y
IF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAg
ICAgICAgY29uc3RfaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgICAgICBjb25z
dF9pdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgICAqX19maXJzdDErKyA9
ICpfX2ZpcnN0MisrOwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAg
ZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAgICAgICAgIGluc2VydChf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQg
bGlzdDxfVHAsIF9BbGxvYz46OgogICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29u
c3QgX1RwJiBfX3ZhbCkgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogICAgICBmb3Ig
KCA7IF9faSAhPSBlbmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1fX24pCiAgICAgICAgKl9faSA9
IF9fdmFsOwogICAgICBpZiAoX19uID4gMCkKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiwgX192
YWwpOwogICAgICBlbHNlCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBfTV9hc3Np
Z25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRlciBfX2xhc3QyLCBfX2Zh
bHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAg
ICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCArK19fZmlyc3Qy
KQogICAgICAgICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogICAgICAgIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgIGVs
c2UKICAgICAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8
X1RwLCBfQWxsb2M+OjoKICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CiAgICAg
IGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQo
KTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaXRlcmF0b3IgX19u
ZXh0ID0gX19maXJzdDsKICAgICAgICArK19fbmV4dDsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0g
X192YWx1ZSkgZXJhc2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv
aWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAgIHsKICAgICAgaXRlcmF0b3Ig
X19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19m
aXJzdDsKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19m
aXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICBlbHNlCiAg
ICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2
b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG1lcmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gp
CiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3Ig
X19sYXN0MSA9IGVuZCgpOwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwog
ICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAg
ICAgICAgX01fdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgICAg
ICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFz
dDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgIH0KCiAgaW5saW5lIHZvaWQKICBfX0xpc3RfYmFz
ZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQogIHsKICAgIF9MaXN0X25vZGVfYmFzZSog
X190bXAgPSBfX3A7CiAgICBkbyB7CiAgICAgIHN0ZDo6c3dhcChfX3RtcC0+X01fbmV4dCwgX190
bXAtPl9NX3ByZXYpOwogICAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2OwogICAgfSB3aGlsZSAo
X190bXAgIT0gX19wKTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jPgogIGlubGluZSB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICByZXZlcnNlKCkKICB7IF9f
TGlzdF9iYXNlX3JldmVyc2UodGhpcy0+X01fbm9kZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHNv
cnQoKQogICAgewoKICAgICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9u
b2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0Fs
bG9jPiBfX2NhcnJ5OwogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAg
ICAgICAgaW50IF9fZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAg
ICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAg
ICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50
ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2Fy
cnkpOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAg
ICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYg
KF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19p
ID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdl
KF9fY291bnRlcltfX2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAg
ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0Fs
bG9jPjo6CiAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKICAgICAgewogICAgICAg
IGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVu
ZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgaXRlcmF0
b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICAgICsrX19uZXh0OwogICAgICAgICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIGVyYXNlKF9fZmlyc3QpOwogICAgICAgICAgX19maXJzdCA9IF9fbmV4
dDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgICAgdm9p
ZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmlu
YXJ5X3ByZWQpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAg
ICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybjsKICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgIHdo
aWxlICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpf
X2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICAgIF9fbmV4dCA9IF9fZmly
c3Q7CiAgICAgICAgfQogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAg
IHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBtZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYg
X194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKICAgICAgewogICAgICAgIGl0ZXJhdG9y
IF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAg
ICAgICAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBf
X2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkgewogICAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKICAgICAg
ICAgICAgX01fdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgICAg
ICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSBfTV90cmFu
c2ZlcihfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0cmlj
dFdlYWtPcmRlcmluZz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgc29ydChfU3Ry
aWN0V2Vha09yZGVyaW5nIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfTV9ub2RlLT5fTV9uZXh0
ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAg
ICAgICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9j
PiBfX2NvdW50ZXJbNjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICgh
ZW1wdHkoKSkgewogICAgICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhp
cywgYmVnaW4oKSk7CiAgICAgICAgICBpbnQgX19pID0gMDsKICAgICAgICAgIHdoaWxlKF9faSA8
IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgICAgICBfX2NvdW50
ZXJbX19pXS5tZXJnZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAo
X19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19j
b3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAg
ICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAg
ICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAg
ICAgICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAgfQoKfQoKCgoKbmFt
ZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7
CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAg
d2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg
PCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19w
YXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsg
X19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNo
X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rp
c3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEp
KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw
ZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3Rv
cEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFu
Y2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJ
bmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1
ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3Bh
cmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9
IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5
cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
X0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0
YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAg
ICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3Rh
bmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBf
X3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0g
MiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikg
ewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChf
X3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICoo
X19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAg
ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0g
MiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQg
PT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3Qg
KyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hp
bGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBf
X3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAg
X192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNl
KDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAg
cG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoK
ICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwg
X1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAg
X0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGls
ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3Qg
KyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAg
ICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNv
bmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7
CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9f
Zmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsK
ICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9f
cHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2Nv
bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3Bf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBf
VHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVh
cChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAg
ewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAo
X19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEp
KSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAg
ICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0
YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIp
IHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwg
X1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQg
PT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBp
ZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
biA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19s
ZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9f
Zmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUo
KihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0g
MCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAx
KQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZv
aWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3Bf
aGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KbmFtZXNwYWNlIHN0ZAp7
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1Rl
bXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRp
ZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZl
cigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7Cgog
ICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAg
ICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVu
ID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihf
VHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89
IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9f
dHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWws
IF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9s
ZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBf
TV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoK
ICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5
X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgaWYgKHRydWUp
IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxs
b2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxp
emVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGlmIChmYWxzZSkKICAg
ICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAg
ICAgIF9NX2xlbiA9IDA7CiAgICAgICAgOwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZm
ZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBm
cmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3Qg
X1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jhcnlf
YnVmZmVyJikge30KfTsKCn0KCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQogICAgewoKICAgICAKICAgICAgaWYgKF9fYSA8
IF9fYikKICAgICAgICBpZiAoX19iIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAg
ICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19jOwogICAgICAgIGVsc2UK
ICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICBy
ZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYzsK
ICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlh
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgICAg
ICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxz
ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxz
ZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkK
ICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAg
ICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5j
dGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
X0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19mOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9f
Zmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJz
dCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50
KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAg
IHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg
Y2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAg
ICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAg
ICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7Cgog
ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f
Zmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg
ICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBf
X2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAg
ICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICBy
ZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0
ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0
dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9G
b3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9
IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgq
X19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19m
aXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg
IF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9f
Zmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmIChfX2Jp
bmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAg
IH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291
bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192
YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg
ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAg
IHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQog
ICAgewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx
IHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAg
IF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAo
X190bXAgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwg
Kl9fZmlyc3QyKTsKCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3Ax
ID0gX19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19m
aXJzdDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmly
c3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19m
aXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3Ag
PSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3Vy
cmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxl
ICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQog
ICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0g
X19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICAr
K19fZmlyc3QxOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFt
ZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIx
IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVy
MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVk
IF9fcHJlZGljYXRlKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19f
dG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAg
ICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3Ax
OwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEpIHsKICAgICAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAg
ICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19s
YXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJy
ZW50LCAqX19wKSkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAg
IHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQog
ICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7
CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3
YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kg
IT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytf
X2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAw
KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
X19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0
dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKICAgICAgICAgICB0eXBlbmFtZSBf
QmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50
LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlfcHJl
ZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CiAgICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50
IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytf
X2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2JpbmFy
eV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICAgICArK19faTsKICAgICAgICAgICAgLS1f
X247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19s
YXN0KSB7CiAgICAgICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0
dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBzd2FwX3Jh
bmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJz
dDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAg
ICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091
dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24g
X191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3Vu
YXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091
dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRw
dXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0g
X19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19yZXN1bHQ7
CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3
X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1
ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAg
ICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25l
d192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAg
ICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw
dXRJdGVyCiAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9f
b2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9P
dXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1
ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQo
Kl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVy
YXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3Qg
PSBfX2dlbigpOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt
ZSBfU2l6ZSwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0
ZV9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAg
IHsKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAg
ICAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9fZmly
c3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAg
ICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h
bWUgX1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAg
ICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAg
IGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
X0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVl
KTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0
ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVt
b3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0Zvcndh
cmRJdGVyCiAgICByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAg
ICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9f
bGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2Nv
cHlfaWYoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0
cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg
ICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0
KQogICAgICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVl
ID0gKl9fZmlyc3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQog
ICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBf
X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09
ICpfX2ZpcnN0KSkKICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVy
biArK19fcmVzdWx0OwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVn
b3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVz
dWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfSXRlclR5cGUoKSk7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0
SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBv
dXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAg
ICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3Qp
CiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICAg
ICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwog
ICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoK
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f
bGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICor
K19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt
ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBl
OwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJl
dHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3By
ZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgX19m
aXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3
YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKCiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFz
dCwgX19iaW5hcnlfcHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0
aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAg
ICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmly
c3QgPT0gLS1fX2xhc3QpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAg
aXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAg
ICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICByZXZlcnNl
X2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAg
ICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CiAg
ICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlkZWFuUmluZ0VsZW1lbnQg
X19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAgICBfRXVjbGlkZWFuUmlu
Z0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9fbjsKICAgICAgICBfX24g
PSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
CiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p
ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19t
aWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsK
ICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19m
aXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0
MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgICAg
IHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgICBlbHNlIGlmIChf
X2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICB9
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAg
dm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQog
ICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3Qg
PT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBf
X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIF9fcmV2ZXJzZShf
X21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgICAgICBz
d2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19yZXZlcnNlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p
ZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7Cgog
ICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p
ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlz
dGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKICAgICAgICBz
d2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsK
ICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgICAgIGZv
ciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgICAgICBfVmFsdWVU
eXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19m
aXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAgZm9yIChfRGlzdGFuY2Ug
X19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA+IF9f
Zmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAg
ICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqKF9f
cCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICB9CiAgICAgICAgfQoK
ICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9f
ay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykg
ewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgICAgX19wICs9
IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAg
ICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAqX19w
ID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfRm9yd2FyZEl0ZXIgX19sYXN0KQog
ICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKICAgICAgX19yb3RhdGUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAgfQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRl
cgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBf
X21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9t
X251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5kNDgoKSAlIF9f
bjsKCgoKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlu
bGluZSB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBf
X2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJl
ckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19p
ID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChf
X2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAg
ICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3Qp
KQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAg
IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9
IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpf
X2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICBy
ZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAg
IF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAg
ICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg
X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAg
IGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0
IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg
YWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4g
PSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0
aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0
ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBl
bmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3
YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBf
X2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7
CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytf
X3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVz
dWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAg
ICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJu
IF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUo
X19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0
aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAv
IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9f
bWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRs
ZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3
YXJkSXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxf
Rm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAg
aWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9u
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5i
ZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2lu
cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJl
cXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgog
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZv
dCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmlyc3QgPCBf
X3Bpdm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdo
aWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICgh
KF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRl
cl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJk
ZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChfX2NvbXAo
Kl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0
OwogICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAgICAtLV9f
bGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19m
aXJzdDsKICAgICAgfQogICAgfQogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2
b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwgX1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xh
c3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAg
ICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0t
X19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg
d2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4
dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAg
ICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9f
dmFsID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29w
eV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBf
X3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsK
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkp
IHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAg
ICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5l
IHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBf
VmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAg
X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2
b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
Zmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVz
aG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3Ro
cmVzaG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2Zp
cnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xn
KF9TaXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9f
biAhPSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAg
IHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo
X2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQg
PT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsK
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s
YXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2Rl
cHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhy
ZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFy
dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3Qs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVk
aWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19j
b21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0
LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7
CiAgICAgIH0KICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAg
IGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAK
CiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29y
dF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAg
ICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAg
fQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFz
dCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2Zp
cnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7
CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg
X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAg
ICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9f
bGFzdCwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAg
ICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9v
cChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3Rh
bmNlIF9fc3RlcF9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf
X3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXAp
IHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJz
dCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAg
ICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1p
bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2Uo
X19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f
bGFzdCwKICAgICAgICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAg
ICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19t
ZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19y
ZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVw
X3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAg
ICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBf
X3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAg
ICAgfQogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCks
IF9fc3RlcF9zaXplKTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAg
IF9fcmVzdWx0LAogICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtf
c2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3Qg
Kz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5r
X2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtf
c2l6ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJz
dCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
Zmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5r
X3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmly
c3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAg
ICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxl
IChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJz
dCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9
IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9f
Zmlyc3QsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9p
bnRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9i
dWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0
YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xh
c3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01f
Y2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4p
IHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBf
X3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9f
bWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBf
c2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZm
ZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3Qg
KyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9f
bGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVf
c29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp
OwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vf
c29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAg
IH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlz
dGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p
ZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2lu
dGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAo
X19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsK
ICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRf
d2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0K
ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFu
Y2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo
X19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAg
CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4g
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAg
IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAg
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBf
RGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3Rh
YmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9UZW1w
b3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwg
X19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3Rh
bmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk
CiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAg
CgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAg
ICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBf
X21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3Qs
IF9fbWlkZGxlKTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgog
ICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7
CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFz
dDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBf
X3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29t
cCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4K
ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBl
OwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0g
X19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2Zp
cnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewog
ICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0
X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAg
ICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9f
cmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpf
X2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jl
c3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3Jl
YWxfbGFzdDsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRl
cgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lu
cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKCiAgICAgIGlm
IChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsK
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmly
c3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAh
PSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0
OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg
fQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19j
b21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29t
cCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19y
ZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAg
cmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g
MykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2Zp
cnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAg
ICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0
OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgoK
ICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFu
KCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYgKF9fY3V0
IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2NvbXApOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKCgoK
ICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFs
ZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAg
ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAg
ICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBf
X2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19o
YWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAw
KSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21w
KCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2
YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAg
IAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0
ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0g
X19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShf
X21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAg
ICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsK
ICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsK
ICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoX192
YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsK
ICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg
ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICBy
ZXR1cm4gX19maXJzdDsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVh
bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4g
PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGls
ZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAg
ICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJf
Ym91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJz
dCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9f
Zmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh
cmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4g
cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFs
X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAg
ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9f
aGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFk
dmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9f
dmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0
OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19o
YWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJz
dCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBf
X2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJz
dCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9G
b3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0
dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwog
ICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
Ym9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAg
IAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3Zh
bCA8ICpfX2kpOwogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21w
KF9fdmFsLCAqX19pKTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIK
ICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog
ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsKICAgIH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAg
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBl
bHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBf
X2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0g
MikgewogICAgICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVy
X3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjEx
ID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19s
ZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2Zp
cnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19t
aWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2Uo
X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19s
ZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpf
X3NlY29uZF9jdXQpOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv
bmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3Rf
Y3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj
b25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwg
X19sZW4yMik7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBf
X2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0
YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVy
bjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgq
X19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t
aWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRf
Y3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19s
ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwg
X19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19s
ZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAg
X19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1
dCwgX19jb21wKTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9j
dXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25k
X2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1
dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29u
ZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9f
bGVuMjIsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9u
YWxJdGVyMQogICAgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4y
IDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QpOwogICAgICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fZmlyc3QpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXpl
KSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIpOwogICAgICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0
dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7
CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAg
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEs
IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAg
ICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
X2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1
bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1
bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAg
ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7
CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAg
Ki0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3Qy
KQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBf
X3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIz
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2Vf
YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly
c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0
dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYg
KF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7
CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFz
dDEpKSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9f
Zmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAg
ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2
b2lkCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAg
ICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19t
aWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChf
X2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9l
bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJn
ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s
YXN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
bjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBp
ZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEg
LyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg
ICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFz
dCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAg
YWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0
X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAg
ICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl
ID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAg
ICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
YXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
MiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9E
aXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAg
ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVu
MSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1Bv
aW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwog
ICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0
LCBfX2ZpcnN0LCBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4y
IDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0g
Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFj
a3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z
ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4x
ID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg
ICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAg
ICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly
c3RfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBh
ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3Rf
Y3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29t
cCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3
X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0
LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2Vf
YWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwgX19jb21wKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9f
c2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2Nv
bXApOwogICAgICAgICAgfQogICAgfQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlw
ZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlz
dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg
fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5
cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFy
eV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0
aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwog
ICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2lu
KCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlu
cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0
ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwog
ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoK
ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBf
X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg
ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s
ZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBp
bmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8
ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19j
b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2Zp
cnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0
ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg
ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAg
ICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy
OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz
ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs
IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq
X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2Ug
aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog
ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg
ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg
ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5
cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNl
IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK
ICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3lt
bWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9P
dXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK
ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg
ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBl
bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg
IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg
IGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVu
dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs
dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm
IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo
Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBf
X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19j
b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog
ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg
ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf
X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19p
aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg
IHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg
ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24o
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg
KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7
CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19p
aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg
ICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp
IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg
ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f
bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19p
KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg
d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo
X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK
ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19p
KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg
IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp
dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly
c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAg
ewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy
OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09
ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz
dDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZp
bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAg
CiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy
OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2Zp
cnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu
IF9fbGFzdDE7CiAgICB9CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5h
bWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0Zvcndh
cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg
ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAg
IGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAg
IHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAg
ICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAg
ICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1
bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAg
IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRf
ZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcs
CiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAo
X19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7
CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUg
KDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0g
c2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAg
ICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVz
dWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjI+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZl
cnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRl
ZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAg
IF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0Mihf
X2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9f
bGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2
SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFz
dDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2Uo
X19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l
IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5k
KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYg
cmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBf
UmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19m
aXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xh
c3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0
ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1
cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jl
c3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3Rh
bmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9
CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyMj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2Fy
ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QyKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEs
IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIx
IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVy
biBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKfQoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1
Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgdWlu
dDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwp0eXBlZGVmIGNoYXIgKnBjaGFyOwp0eXBl
ZGVmIHVjaGFyICpwdWNoYXI7CnR5cGVkZWYgY29uc3QgY2hhciAqcGNjaGFyOwoKCgoKCgoKY29u
c3QgYm9vbCBGQUxTRSA9IDA7CmNvbnN0IGJvb2wgVFJVRSA9ICEwOwppbmxpbmUgaW50IHFSb3Vu
ZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gZCA+IDAuMCA/IGludChkKzAuNSkgOiBpbnQoZC0w
LjUpOwp9CnR5cGVkZWYgc2lnbmVkIGNoYXIgSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJ
TlQ4Owp0eXBlZGVmIHNob3J0IElOVDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQxNjsK
dHlwZWRlZiBpbnQgSU5UMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQzMjsKCgp0eXBlZGVm
IHNpZ25lZCBjaGFyIFFfSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFFfVUlOVDg7CnR5cGVk
ZWYgc2hvcnQgUV9JTlQxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBRX1VJTlQxNjsKdHlwZWRl
ZiBpbnQgUV9JTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUV9VSU5UMzI7CnR5cGVkZWYgbG9u
ZyBRX0lOVDY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUV9VSU5UNjQ7CgoKCgoKY2xhc3MgUURh
dGFTdHJlYW07CiBjb25zdCBjaGFyICpxVmVyc2lvbigpOwogYm9vbCBxU3lzSW5mbyggaW50ICp3
b3JkU2l6ZSwgYm9vbCAqYmlnRW5kaWFuICk7CiB2b2lkIHFEZWJ1ZyggY29uc3QgY2hhciAqLCAu
Li4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZv
aWQgcVdhcm5pbmcoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9y
bWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2b2lkIHFGYXRhbCggY29uc3QgY2hhciAqLCAuLi4g
KQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKCgoKCgoK
IHZvaWQgZGVidWcoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9y
bWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2b2lkIHdhcm5pbmcoIGNvbnN0IGNoYXIgKiwgLi4u
ICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2b2lk
IGZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAo
cHJpbnRmLCAxLCAyKSkpCgo7CiBib29sIHF0X2NoZWNrX3BvaW50ZXIoIGJvb2wgYywgY29uc3Qg
Y2hhciAqLCBpbnQgKTsKCgoKCgoKCmVudW0gUXRNc2dUeXBlIHsgUXREZWJ1Z01zZywgUXRXYXJu
aW5nTXNnLCBRdEZhdGFsTXNnIH07Cgp0eXBlZGVmIHZvaWQgKCptc2dfaGFuZGxlcikoUXRNc2dU
eXBlLCBjb25zdCBjaGFyICopOwogbXNnX2hhbmRsZXIgcUluc3RhbGxNc2dIYW5kbGVyKCBtc2df
aGFuZGxlciApOwoKCiB2b2lkIHFTdXBwcmVzc09ic29sZXRlV2FybmluZ3MoIGJvb2wgPSBUUlVF
ICk7CgoKCiB2b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBjaGFyICpvbGRm
dW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3ZnVuYyApOwogdm9p
ZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwogdm9p
ZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm1lc3NhZ2UgKTsKY2xhc3MgUU9iamVjdDsKY2xhc3Mg
UU1ldGFPYmplY3Q7CmNsYXNzIFFTaWduYWw7CmNsYXNzIFFDb25uZWN0aW9uOwpjbGFzcyBRRXZl
bnQ7CnN0cnVjdCBRTWV0YURhdGE7CmNsYXNzIFFDb25uZWN0aW9uTGlzdDsKY2xhc3MgUUNvbm5l
Y3Rpb25MaXN0SXQ7CmNsYXNzIFFTaWduYWxEaWN0OwpjbGFzcyBRU2lnbmFsRGljdEl0OwpjbGFz
cyBRT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdExpc3RJdDsKY2xhc3MgUU1lbWJlckRpY3Q7CnN0
cnVjdCBRU2hhcmVkCnsKICAgIFFTaGFyZWQoKSB7IGNvdW50ID0gMTsgfQogICAgdm9pZCByZWYo
KSB7IGNvdW50Kys7IH0KICAgIGJvb2wgZGVyZWYoKSB7IHJldHVybiAhLS1jb3VudDsgfQogICAg
dWludCBjb3VudDsKfTsKCgoKY2xhc3MgUUdBcnJheQp7CmZyaWVuZCBjbGFzcyBRQnVmZmVyOwpw
dWJsaWM6CgogICAgc3RydWN0IGFycmF5X2RhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAg
YXJyYXlfZGF0YSgpIHsgZGF0YT0wOyBsZW49MDsgfQogICAgICAgIGNoYXIgKmRhdGE7CiAgICAg
ICAgdWludCBsZW47CiAgICB9OwogICAgUUdBcnJheSgpOwpwcm90ZWN0ZWQ6CiAgICBRR0FycmF5
KCBpbnQsIGludCApOwogICAgUUdBcnJheSggaW50IHNpemUgKTsKICAgIFFHQXJyYXkoIGNvbnN0
IFFHQXJyYXkgJmEgKTsKICAgIHZpcnR1YWwgflFHQXJyYXkoKTsKCiAgICBRR0FycmF5ICZvcGVy
YXRvcj0oIGNvbnN0IFFHQXJyYXkgJmEgKSB7IHJldHVybiBhc3NpZ24oIGEgKTsgfQoKICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2goKSB7IGR1cGxpY2F0ZSgqdGhpcyk7IH0KCiAgICBjaGFyICpkYXRh
KCkgY29uc3QgeyByZXR1cm4gc2hkLT5kYXRhOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyBy
ZXR1cm4gc2hkLT5jb3VudDsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gc2hkLT5s
ZW47IH0KICAgIGJvb2wgaXNFcXVhbCggY29uc3QgUUdBcnJheSAmYSApIGNvbnN0OwoKICAgIGJv
b2wgcmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAgICBib29sIGZpbGwoIGNvbnN0IGNoYXIgKmQs
IGludCBsZW4sIHVpbnQgc3ogKTsKCiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IFFHQXJyYXkg
JmEgKTsKICAgIFFHQXJyYXkgJmFzc2lnbiggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAg
IFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgUUdBcnJheSAmYSApOwogICAgUUdBcnJheSAmZHVw
bGljYXRlKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwogICAgdm9pZCBzdG9yZSggY29uc3Qg
Y2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBhcnJheV9kYXRhICpzaGFyZWRCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIHNoZDsgfQogICAgdm9pZCBzZXRTaGFyZWRCbG9jayggYXJyYXlfZGF0YSAqcCAp
IHsgc2hkPShhcnJheV9kYXRhKilwOyB9CgogICAgUUdBcnJheSAmc2V0UmF3RGF0YSggY29uc3Qg
Y2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgcmVzZXRSYXdEYXRhKCBjb25zdCBjaGFyICpk
LCB1aW50IGxlbiApOwoKICAgIGludCBmaW5kKCBjb25zdCBjaGFyICpkLCB1aW50IGluZGV4LCB1
aW50IHN6ICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3og
KSBjb25zdDsKCiAgICB2b2lkIHNvcnQoIHVpbnQgc3ogKTsKICAgIGludCBic2VhcmNoKCBjb25z
dCBjaGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgY2hhciAqYXQoIHVpbnQgaW5kZXggKSBj
b25zdDsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwgY29uc3QgY2hhciAqZCwgdWlu
dCBzeiApOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCBhcnJheV9kYXRhICpuZXdEYXRhKCk7CiAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YSggYXJyYXlfZGF0YSAqcCApOwoKcHJpdmF0ZToKICAg
IHN0YXRpYyB2b2lkIG1zZ19pbmRleCggdWludCApOwogICAgYXJyYXlfZGF0YSAqc2hkOwp9OwoK
CmlubGluZSBjaGFyICpRR0FycmF5OjphdCggdWludCBpbmRleCApIGNvbnN0CnsKCiAgICBpZiAo
IGluZGV4ID49IHNpemUoKSApIHsKICAgICAgICBtc2dfaW5kZXgoIGluZGV4ICk7CiAgICAgICAg
aW5kZXggPSAwOwogICAgfQoKICAgIHJldHVybiAmc2hkLT5kYXRhW2luZGV4XTsKfQoKCgp0ZW1w
bGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7CnB1YmxpYzoK
ICAgIHR5cGVkZWYgdHlwZSogSXRlcmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5cGUqIENvbnN0
SXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgogICAgUUFy
cmF5KCBpbnQsIGludCApIDogUUdBcnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAgICBRQXJyYXko
KSB7fQogICAgUUFycmF5KCBpbnQgc2l6ZSApIDogUUdBcnJheShzaXplKnNpemVvZih0eXBlKSkg
e30KICAgIFFBcnJheSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEpIHt9CiAg
IH5RQXJyYXkoKSB7fQogICAgUUFycmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFycmF5PHR5
cGU+ICZhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRQXJyYXk8
dHlwZT4mKVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNvbnN0IHsgcmV0
dXJuICh0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyBy
ZXR1cm4gUUdBcnJheTo6bnJlZnMoKTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4g
UUdBcnJheTo6c2l6ZSgpL3NpemVvZih0eXBlKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHNpemUoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdBcnJh
eTo6c2l6ZSgpID09IDA7IH0KICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdBcnJh
eTo6ZGF0YSgpID09IDA7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7IHJldHVybiBR
R0FycmF5OjpyZXNpemUoc2l6ZSpzaXplb2YodHlwZSkpOyB9CiAgICBib29sIHRydW5jYXRlKCB1
aW50IHBvcyApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsgfQog
ICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAgICAgICB7IHJl
dHVybiBRR0FycmF5OjpmaWxsKChjaGFyKikmZCxzaXplLHNpemVvZih0eXBlKSApOyB9CiAgICB2
b2lkIGRldGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0eXBlPiBjb3B5
KCkgY29uc3QKICAgICAgICB7IFFBcnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGljYXRl
KCp0aGlzKTsgfQogICAgUUFycmF5PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJheTx0eXBlPiYg
YSApCiAgICAgICAgeyByZXR1cm4gKFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9
CiAgICBRQXJyYXk8dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAg
ICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXpl
b2YodHlwZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUUFycmF5PHR5
cGU+JiBhICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNh
dGUoYSk7IH0KICAgIFFBcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1aW50
IG4gKQogICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZSgo
Y2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0UmF3RGF0YSgg
Y29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilR
R0FycmF5OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCByZXNl
dFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0FycmF5OjpyZXNl
dFJhd0RhdGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmluZCggY29uc3Qg
dHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbmQo
KGNoYXIqKSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBjb25zdCB0eXBl
ICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlucygoY2hhciopJmQs
c2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0KHNpemVvZih0
eXBlKSk7IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7
IHJldHVybiBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXplb2YodHlwZSkpOyB9
CiAgICB0eXBlJiBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5
cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgdHlwZSYg
YXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdB
cnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBjb25zdCB0eXBl
KigpIGNvbnN0IHsgcmV0dXJuIChjb25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJuIGlz
RXF1YWwoYSk7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkg
Y29uc3QgeyByZXR1cm4gIWlzRXF1YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gZGF0YSgpOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7
IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KICAg
IENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZSgpOyB9Cn07
CiB2b2lkICpxbWVtbW92ZSggdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVpbnQgbGVuICk7
CgoKCgoKIGNoYXIgKnFzdHJkdXAoIGNvbnN0IGNoYXIgKiApOwoKIGlubGluZSB1aW50IGNzdHJs
ZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIHN0cmxlbihzdHIpOyB9CgogaW5saW5lIHVp
bnQgcXN0cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gc3RyID8gc3RybGVuKHN0cikg
OiAwOyB9CgogaW5saW5lIGNoYXIgKmNzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj
ICkKeyByZXR1cm4gc3RyY3B5KGRzdCxzcmMpOyB9CgogaW5saW5lIGNoYXIgKnFzdHJjcHkoIGNo
YXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3JjID8gc3RyY3B5KGRzdCwgc3Jj
KSA6IDA7IH0KCiBjaGFyICpxc3RybmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVp
bnQgbGVuICk7CgogaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBj
aGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0KCiBpbmxpbmUgaW50IHFz
dHJjbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiAoc3Ry
MSAmJiBzdHIyKSA/IHN0cmNtcChzdHIxLHN0cjIpIDogKGludCkoKGxvbmcpc3RyMiAtIChsb25n
KXN0cjEpOyB9CgogaW5saW5lIGludCBjc3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3Qg
Y2hhciAqc3RyMiwgdWludCBsZW4gKQp7IHJldHVybiBzdHJuY21wKHN0cjEsc3RyMixsZW4pOyB9
CgogaW5saW5lIGludCBxc3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3Ry
MiwgdWludCBsZW4gKQp7IHJldHVybiAoc3RyMSAmJiBzdHIyKSA/IHN0cm5jbXAoc3RyMSxzdHIy
LGxlbikgOgogICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKChsb25nKXN0cjIgLSAobG9u
ZylzdHIxKTsgfQoKIGludCBxc3RyaWNtcCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsK
CiBpbnQgcXN0cm5pY21wKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsK
IFFfVUlOVDE2IHFDaGVja3N1bSggY29uc3QgY2hhciAqcywgdWludCBsZW4gKTsKdHlwZWRlZiBR
QXJyYXk8Y2hhcj4gUUJ5dGVBcnJheTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR
RGF0YVN0cmVhbSAmLCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRv
cj4+KCBRRGF0YVN0cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKY2xhc3MgUVJlZ0V4cDsKCmNsYXNz
IFFDU3RyaW5nIDogcHVibGljIFFCeXRlQXJyYXkKewpwdWJsaWM6CiAgICBRQ1N0cmluZygpIHt9
CiAgICBRQ1N0cmluZyggaW50IHNpemUgKTsKICAgIFFDU3RyaW5nKCBjb25zdCBRQ1N0cmluZyAm
cyApIDogUUJ5dGVBcnJheSggcyApIHt9CiAgICBRQ1N0cmluZyggY29uc3QgY2hhciAqc3RyICk7
CiAgICBRQ1N0cmluZyggY29uc3QgY2hhciAqc3RyLCB1aW50IG1heGxlbiApOwoKICAgIFFDU3Ry
aW5nICZvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nICZzICk7CiAgICBRQ1N0cmluZyAmb3BlcmF0
b3I9KCBjb25zdCBjaGFyICpzdHIgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgYm9v
bCBpc0VtcHR5KCkgY29uc3Q7CiAgICB1aW50IGxlbmd0aCgpIGNvbnN0OwogICAgYm9vbCByZXNp
emUoIHVpbnQgbmV3bGVuICk7CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApOwogICAgYm9v
bCBmaWxsKCBjaGFyIGMsIGludCBsZW4gPSAtMSApOwoKICAgIFFDU3RyaW5nIGNvcHkoKSBjb25z
dDsKCiAgICBRQ1N0cmluZyAmc3ByaW50ZiggY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKTsKCiAg
ICBpbnQgZmluZCggY2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAg
ICBpbnQgZmluZCggY29uc3QgY2hhciAqc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkg
Y29uc3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0
OwogICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNv
bnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PS0xLCBib29s
IGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGlu
ZGV4PS0xICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkg
Y29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIgKnN0ciwgYm9vbCBjcz1UUlVFICkg
Y29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKICAgIFFD
U3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyByaWdodCggdWludCBs
ZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIG1pZCggdWludCBpbmRleCwgdWludCBsZW49MHhmZmZm
ZmZmZikgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIg
ZmlsbD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CiAgICBRQ1N0cmluZyByaWdodEp1c3Rp
ZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKCiAg
ICBRQ1N0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUUNTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAg
ICBRQ1N0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKICAgIFFDU3RyaW5nIHNpbXBsaWZ5
V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFDU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNv
bnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciApOwog
ICAgUUNTdHJpbmcgJmFwcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcHJlcGVu
ZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50
IGxlbiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25z
dCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0
IGNoYXIgKiApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVz
aG9ydCB0b1VTaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpv
az0wICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgbG9u
ZyB0b0xvbmcoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9r
PTAgKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRv
dWJsZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFDU3RyaW5nICZzZXRTdHIo
IGNvbnN0IGNoYXIgKnMgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHNob3J0ICk7CiAgICBRQ1N0
cmluZyAmc2V0TnVtKCB1c2hvcnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGludCApOwogICAg
UUNTdHJpbmcgJnNldE51bSggdWludCApOwogICAgUUNTdHJpbmcgJnNldE51bSggbG9uZyApOwog
ICAgUUNTdHJpbmcgJnNldE51bSggdWxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGZsb2F0
LCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBkb3VibGUs
IGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRl
eCwgY2hhciBjICk7CgogICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29u
c3Q7CiAgICBRQ1N0cmluZyAmb3BlcmF0b3IrPSggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0
cmluZyAmb3BlcmF0b3IrPSggY2hhciBjICk7Cn07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUNTdHJpbmcgJiApOwogUURhdGFTdHJlYW0gJm9w
ZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDU3RyaW5nICYgKTsKCgoKCgoKaW5saW5lIFFDU3Ry
aW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApCnsgcmV0dXJuIChR
Q1N0cmluZyYpYXNzaWduKCBzICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJh
dG9yPSggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gKFFDU3RyaW5nJilkdXBsaWNhdGUoIHN0
ciwgcXN0cmxlbihzdHIpKzEgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OmlzTnVsbCgpIGNv
bnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNFbXB0
eSgpIGNvbnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwIHx8ICpkYXRhKCkgPT0gJ1wwJzsgfQoKaW5s
aW5lIHVpbnQgUUNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIHFzdHJsZW4oIGRhdGEo
KSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6dHJ1bmNhdGUoIHVpbnQgcG9zICkKeyByZXR1
cm4gcmVzaXplKHBvcysxKTsgfQoKaW5saW5lIFFDU3RyaW5nIFFDU3RyaW5nOjpjb3B5KCkgY29u
c3QKeyByZXR1cm4gUUNTdHJpbmcoIGRhdGEoKSApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3Ry
aW5nOjpwcmVwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gaW5zZXJ0KDAscyk7IH0KCmlu
bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJu
IG9wZXJhdG9yKz0ocyk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggc2hv
cnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0
cmluZzo6c2V0TnVtKCB1c2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlu
bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggaW50IG4gKQp7IHJldHVybiBzZXROdW0o
KGxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggdWludCBuICkK
eyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6
c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3Vi
bGUpbixmLHByZWMpOyB9CgppbmxpbmUgUUNTdHJpbmc6Om9wZXJhdG9yIGNvbnN0IGNoYXIgKigp
IGNvbnN0CnsgcmV0dXJuIChjb25zdCBjaGFyICopZGF0YSgpOyB9CgoKCgoKCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsg
cmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPT0gMDsgfQoKIGlubGluZSBib29s
IG9wZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVy
biBxc3RyY21wKHMxLmRhdGEoKSxzMikgPT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPT0o
IGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMx
LHMyLmRhdGEoKSkgPT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3Ry
aW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCks
czIuZGF0YSgpKSAhPSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNTdHJp
bmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSAh
PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFD
U3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSAhPSAwOyB9CgogaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nJiBz
MiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPCAwOyB9CgogaW5saW5l
IGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyBy
ZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpIDwgMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9y
PCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAo
czEsczIuZGF0YSgpKSA8IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRQ1N0
cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIp
IDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpzMSwgY29uc3Qg
UUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDw9IDA7IH0KCiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIg
KQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPiAwOyB9CgogaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0
cmNtcChzMSxzMi5kYXRhKCkpID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0
IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEo
KSxzMikgPj0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBj
b25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPj0gMDsg
fQoKIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg
UUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCAr
PSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBjb25z
dCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5k
YXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgUUNTdHJp
bmcgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAg
UUNTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlu
bGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY2hhciBjMiApCnsK
ICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4g
dG1wOwp9CgogaW5saW5lIFFDU3RyaW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUUNTdHJp
bmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMy
OwogICAgcmV0dXJuIHRtcDsKfQoKCgoKCgoKY2xhc3MgUVJlZ0V4cDsKY2xhc3MgUVN0cmluZzsK
Y2xhc3MgUUNoYXJSZWY7CgpjbGFzcyBRQ2hhciB7CnB1YmxpYzoKICAgIFFDaGFyKCk7CiAgICBR
Q2hhciggY2hhciBjICk7CiAgICBRQ2hhciggdWNoYXIgYyApOwogICAgUUNoYXIoIHVjaGFyIGMs
IHVjaGFyIHIgKTsKICAgIFFDaGFyKCBjb25zdCBRQ2hhciYgYyApOwogICAgUUNoYXIoIHVzaG9y
dCByYyApOwogICAgUUNoYXIoIHNob3J0IHJjICk7CiAgICBRQ2hhciggdWludCByYyApOwogICAg
UUNoYXIoIGludCByYyApOwoKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBudWxsOwogICAgc3RhdGlj
IGNvbnN0IFFDaGFyIHJlcGxhY2VtZW50OwogICAgc3RhdGljIGNvbnN0IFFDaGFyIGJ5dGVPcmRl
ck1hcms7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyU3dhcHBlZDsKICAgIHN0YXRp
YyBjb25zdCBRQ2hhciBuYnNwOwoKCgogICAgZW51bSBDYXRlZ29yeQogICAgewogICAgICAgIE5v
Q2F0ZWdvcnksCgogICAgICAgIE1hcmtfTm9uU3BhY2luZywKICAgICAgICBNYXJrX1NwYWNpbmdD
b21iaW5pbmcsCiAgICAgICAgTWFya19FbmNsb3NpbmcsCgogICAgICAgIE51bWJlcl9EZWNpbWFs
RGlnaXQsCiAgICAgICAgTnVtYmVyX0xldHRlciwKICAgICAgICBOdW1iZXJfT3RoZXIsCgogICAg
ICAgIFNlcGFyYXRvcl9TcGFjZSwKICAgICAgICBTZXBhcmF0b3JfTGluZSwKICAgICAgICBTZXBh
cmF0b3JfUGFyYWdyYXBoLAoKICAgICAgICBPdGhlcl9Db250cm9sLAogICAgICAgIE90aGVyX0Zv
cm1hdCwKICAgICAgICBPdGhlcl9TdXJyb2dhdGUsCiAgICAgICAgT3RoZXJfUHJpdmF0ZVVzZSwK
ICAgICAgICBPdGhlcl9Ob3RBc3NpZ25lZCwKCiAgICAgICAgTGV0dGVyX1VwcGVyY2FzZSwKICAg
ICAgICBMZXR0ZXJfTG93ZXJjYXNlLAogICAgICAgIExldHRlcl9UaXRsZWNhc2UsCiAgICAgICAg
TGV0dGVyX01vZGlmaWVyLAogICAgICAgIExldHRlcl9PdGhlciwKCiAgICAgICAgUHVuY3R1YXRp
b25fQ29ubmVjdG9yLAogICAgICAgIFB1bmN0dWF0aW9uX0Rhc2ssCiAgICAgICAgUHVuY3R1YXRp
b25fT3BlbiwKICAgICAgICBQdW5jdHVhdGlvbl9DbG9zZSwKICAgICAgICBQdW5jdHVhdGlvbl9J
bml0aWFsUXVvdGUsCiAgICAgICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSwKICAgICAgICBQdW5j
dHVhdGlvbl9PdGhlciwKCiAgICAgICAgU3ltYm9sX01hdGgsCiAgICAgICAgU3ltYm9sX0N1cnJl
bmN5LAogICAgICAgIFN5bWJvbF9Nb2RpZmllciwKICAgICAgICBTeW1ib2xfT3RoZXIKICAgIH07
CgogICAgZW51bSBEaXJlY3Rpb24KICAgIHsKICAgICAgICBEaXJMLCBEaXJSLCBEaXJFTiwgRGly
RVMsIERpckVULCBEaXJBTiwgRGlyQ1MsIERpckIsIERpclMsIERpcldTLCBEaXJPTiwKICAgICAg
ICBEaXJMUkUsIERpckxSTywgRGlyQUwsIERpclJMRSwgRGlyUkxPLCBEaXJQREYsIERpck5TTSwg
RGlyQk4KICAgIH07CgogICAgZW51bSBEZWNvbXBvc2l0aW9uCiAgICB7CiAgICAgICAgU2luZ2xl
LCBDYW5vbmljYWwsIEZvbnQsIE5vQnJlYWssIEluaXRpYWwsIE1lZGlhbCwKICAgICAgICBGaW5h
bCwgSXNvbGF0ZWQsIENpcmNsZSwgU3VwZXIsIFN1YiwgVmVydGljYWwsCiAgICAgICAgV2lkZSwg
TmFycm93LCBTbWFsbCwgU3F1YXJlLCBDb21wYXQsIEZyYWN0aW9uCiAgICB9OwoKICAgIGVudW0g
Sm9pbmluZwogICAgewogICAgICAgIE90aGVySm9pbmluZywgRHVhbCwgUmlnaHQsIENlbnRlcgog
ICAgfTsKCgoKICAgIGludCBkaWdpdFZhbHVlKCkgY29uc3Q7CiAgICBRQ2hhciBsb3dlcigpIGNv
bnN0OwogICAgUUNoYXIgdXBwZXIoKSBjb25zdDsKCiAgICBDYXRlZ29yeSBjYXRlZ29yeSgpIGNv
bnN0OwogICAgRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwogICAgSm9pbmluZyBqb2luaW5n
KCkgY29uc3Q7CiAgICBib29sIG1pcnJvcmVkKCkgY29uc3Q7CiAgICBRQ2hhciBtaXJyb3JlZENo
YXIoKSBjb25zdDsKICAgIFFTdHJpbmcgZGVjb21wb3NpdGlvbigpIGNvbnN0OwogICAgRGVjb21w
b3NpdGlvbiBkZWNvbXBvc2l0aW9uVGFnKCkgY29uc3Q7CgogICAgY2hhciBsYXRpbjEoKSBjb25z
dCB7IHJldHVybiBydyA/IDAgOiBjbDsgfQogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJl
dHVybiAocncgPDwgOCkgfCBjbDsgfQoKCiAgICBvcGVyYXRvciBjaGFyKCkgY29uc3QgeyByZXR1
cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2Rl
KCk9PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0OwogICAgYm9vbCBpc1B1bmN0KCkgY29u
c3Q7CiAgICBib29sIGlzU3BhY2UoKSBjb25zdDsKICAgIGJvb2wgaXNNYXJrKCkgY29uc3Q7CiAg
ICBib29sIGlzTGV0dGVyKCkgY29uc3Q7CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CiAgICBi
b29sIGlzTGV0dGVyT3JOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0OwoK
ICAgIHVjaGFyJiBjZWxsKCkgeyByZXR1cm4gY2w7IH0KICAgIHVjaGFyJiByb3coKSB7IHJldHVy
biBydzsgfQogICAgdWNoYXIgY2VsbCgpIGNvbnN0IHsgcmV0dXJuIGNsOyB9CiAgICB1Y2hhciBy
b3coKSBjb25zdCB7IHJldHVybiBydzsgfQoKICAgIHN0YXRpYyBib29sIG5ldHdvcmtPcmRlcmVk
KCkgeyByZXR1cm4gKGludCluZXRfb3JkZXJlZCA9PSAxOyB9CgogICAgZnJpZW5kIGlubGluZSBp
bnQgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlubGluZSBpbnQg
b3BlcmF0b3I9PSggUUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3Bl
cmF0b3I9PSggUUNoYXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVy
YXRvciE9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJh
dG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9y
IT0oIFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPD0o
IFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPD0oIGNo
YXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFy
IGMxLCBRQ2hhciBjMiApOwoKcHJpdmF0ZToKCgoKICAgIHVjaGFyIHJ3OwogICAgdWNoYXIgY2w7
CgoKCiAgICBlbnVtIHsgbmV0X29yZGVyZWQgPSAxIH07Cn0gOwoKaW5saW5lIFFDaGFyOjpRQ2hh
cigpCnsKICAgIHJ3ID0gMDsgY2wgPSAwOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIGNoYXIg
YyApCnsKICAgIHJ3ID0gMDsgY2wgPSAodWNoYXIpYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFy
KCB1Y2hhciBjICkKewogICAgcncgPSAwOyBjbCA9IGM7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hh
ciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHJ3ID0gcjsgY2wgPSBjOwoKCgp9CmlubGluZSBR
Q2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFyJiBjICkKewogICAgcncgPSBjLnJ3OyBjbCA9IGMuY2w7
CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdXNob3J0IHJjICkKewogICAgcncgPSAodWNoYXIp
KChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6
OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9
ICh1Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWludCByYyApCnsK
ICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1Y2hhcikocmMmMHhmZik7CgoK
Cn0KaW5saW5lIFFDaGFyOjpRQ2hhciggaW50IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+
OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQoKCmlubGluZSBpbnQgb3BlcmF0
b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiBjaCA9PSBjLmNsICYmICFjLnJ3
Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1
cm4gY2ggPT0gYy5jbCAmJiAhYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvcj09KCBRQ2hhciBj
MSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wgPT0gYzIuY2wKICAgICAgICAmJiBjMS5y
dyA9PSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hhciBjMSwgUUNoYXIgYzIg
KQp7CiAgICByZXR1cm4gYzEuY2wgIT0gYzIuY2wKICAgICAgICB8fCBjMS5ydyAhPSBjMi5ydzsK
fQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFyIGNoLCBRQ2hhciBjICkKewogICAgcmV0dXJu
IGNoICE9IGMuY2wgfHwgYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hhciBjLCBj
aGFyIGNoICkKewogICAgcmV0dXJuIGNoICE9IGMuY2wgfHwgYy5ydzsKfQoKaW5saW5lIGludCBv
cGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuICEoY2ggPCBjLmNsIHx8
IGMucncpOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0oIGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAg
ICByZXR1cm4gY2ggPD0gYy5jbCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFD
aGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS5ydyA+IGMyLnJ3CiAgICAgICAgPyBG
QUxTRQogICAgICAgIDogYzEucncgPCBjMi5ydwogICAgICAgICAgICA/IFRSVUUKICAgICAgICAg
ICAgOiBjMS5jbCA8PSBjMi5jbDsKfQoKaW5saW5lIGludCBvcGVyYXRvcj49KCBRQ2hhciBjLCBj
aGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxpbmUgaW50IG9wZXJhdG9yPj0oIGNoYXIg
Y2gsIFFDaGFyIGMgKSB7IHJldHVybiBjIDw9IGNoOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+PSgg
UUNoYXIgYzEsIFFDaGFyIGMyICkgeyByZXR1cm4gYzIgPD0gYzE7IH0KaW5saW5lIGludCBvcGVy
YXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPD1jKTsgfQppbmxpbmUgaW50
IG9wZXJhdG9yPCggY2hhciBjaCwgUUNoYXIgYyApIHsgcmV0dXJuICEoYzw9Y2gpOyB9CmlubGlu
ZSBpbnQgb3BlcmF0b3I8KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiAhKGMyPD1jMSk7
IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNo
Pj1jKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPiggY2hhciBjaCwgUUNoYXIgYyApIHsgcmV0dXJu
ICEoYz49Y2gpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7
IHJldHVybiAhKGMyPj1jMSk7IH0KCgpzdHJ1Y3QgUVN0cmluZ0RhdGEgOiBwdWJsaWMgUVNoYXJl
ZCB7CiAgICBRU3RyaW5nRGF0YSgpIDoKICAgICAgICB1bmljb2RlKDApLCBhc2NpaSgwKSwgbGVu
KDApLCBtYXhsKDApLCBkaXJ0eWFzY2lpKDApIHsgcmVmKCk7IH0KICAgIFFTdHJpbmdEYXRhKFFD
aGFyICp1LCB1aW50IGwsIHVpbnQgbSkgOgogICAgICAgIHVuaWNvZGUodSksIGFzY2lpKDApLCBs
ZW4obCksIG1heGwobSksIGRpcnR5YXNjaWkoMCkgeyB9CgogICAgflFTdHJpbmdEYXRhKCkgeyBp
ZiAoIHVuaWNvZGUgKSBkZWxldGVbXSAoKGNoYXIqKXVuaWNvZGUpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIGFzY2lpICkgZGVsZXRlW10gYXNjaWk7IH0KCiAgICB2b2lkIGRlbGV0ZVNlbGYo
KTsKICAgIFFDaGFyICp1bmljb2RlOwogICAgY2hhciAqYXNjaWk7CiAgICB1aW50IGxlbjsKICAg
IHVpbnQgbWF4bDozMDsKICAgIHVpbnQgZGlydHlhc2NpaToxOwp9OwoKCmNsYXNzIFFTdHJpbmcK
ewpwdWJsaWM6CiAgICBRU3RyaW5nKCk7CiAgICBRU3RyaW5nKCBRQ2hhciApOwogICAgUVN0cmlu
ZyggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nKCBjb25zdCBRQnl0ZUFycmF5JiApOwog
ICAgUVN0cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7CgogICAgUVN0
cmluZyggY29uc3QgY2hhciAqc3RyICk7CgogICAgflFTdHJpbmcoKTsKCiAgICBRU3RyaW5nICZv
cGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29u
c3QgY2hhciAqICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyYgKTsK
ICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggUUNoYXIgYyApOwogICAgUVN0cmluZyAmb3BlcmF0b3I9
KCBjaGFyIGMgKTsKCiAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBudWxsOwoKICAgIGJvb2wgaXNO
dWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgIHVpbnQgbGVuZ3RoKCkg
Y29uc3Q7CiAgICB2b2lkIHRydW5jYXRlKCB1aW50IHBvcyApOwoKCgoKICAgIHZvaWQgZmlsbCgg
UUNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUVN0cmluZyBjb3B5KCkgY29uc3Q7CgogICAg
UVN0cmluZyBhcmcobG9uZyBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7
CiAgICBRU3RyaW5nIGFyZyh1bG9uZyBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkg
Y29uc3Q7CiAgICBRU3RyaW5nIGFyZyhpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9
MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcodWludCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQg
YmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhzaG9ydCBhLCBpbnQgZmllbGR3aWR0aD0w
LCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1c2hvcnQgYSwgaW50IGZpZWxk
d2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY2hhciBhLCBpbnQg
ZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKFFDaGFyIGEsIGludCBmaWVsZHdp
ZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY29uc3QgUVN0cmluZyYgYSwgaW50IGZpZWxk
d2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhkb3VibGUgYSwgaW50IGZpZWxkd2lkdGg9
MCwgY2hhciBmbXQ9J2cnLCBpbnQgcHJlYz0tMSkgY29uc3Q7CgogICAgUVN0cmluZyAmc3ByaW50
ZiggY29uc3QgY2hhciogZm9ybWF0LCAuLi4gKQoKICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9y
bWF0IChwcmludGYsIDIsIDMpKSkKCiAgICAgICAgOwoKICAgIGludCBmaW5kKCBRQ2hhciBjLCBp
bnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY2hhciBjLCBp
bnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVN0
cmluZyAmc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgZmlu
ZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCBmaW5kKCBj
b25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0wICkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIFFD
aGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2
KCBjaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5k
UmV2KCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25z
dDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0tMSApIGNvbnN0
OwoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0tMSApIGNvbnN0
OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBp
bnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3QKICAgICAgICAgICAgICAg
ICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50IGNvbnRhaW5z
KCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBjb250YWlu
cyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBjb250
YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CgogICAgUVN0cmluZyBsZWZ0KCB1aW50IGxl
biApIGNvbnN0OwogICAgUVN0cmluZyByaWdodCggdWludCBsZW4gKSBjb25zdDsKICAgIFFTdHJp
bmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZmZmZmZmZmKSBjb25zdDsKCiAgICBRU3Ry
aW5nIGxlZnRKdXN0aWZ5KCB1aW50IHdpZHRoLCBRQ2hhciBmaWxsPScgJywgYm9vbCB0cnVuYz1G
QUxTRSljb25zdDsKICAgIFFTdHJpbmcgcmlnaHRKdXN0aWZ5KCB1aW50IHdpZHRoLCBRQ2hhciBm
aWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoKICAgIFFTdHJpbmcgbG93ZXIoKSBjb25z
dDsKICAgIFFTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAgICBRU3RyaW5nIHN0cmlwV2hpdGVTcGFj
ZSgpIGNvbnN0OwogICAgUVN0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdDsKCiAgICBR
U3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmlu
ZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBRQ2hhciosIHVpbnQgbGVuICk7CiAgICBRU3Ry
aW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIFFDaGFyICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVp
bnQgaW5kZXgsIGNoYXIgYyApIHsgcmV0dXJuIGluc2VydChpbmRleCxRQ2hhcihjKSk7IH0KICAg
IFFTdHJpbmcgJmFwcGVuZCggY2hhciApOwogICAgUVN0cmluZyAmYXBwZW5kKCBRQ2hhciApOwog
ICAgUVN0cmluZyAmYXBwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJnByZXBl
bmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZw
cmVwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJnJlbW92ZSggdWludCBpbmRl
eCwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVu
LCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVp
bnQgbGVuLCBjb25zdCBRQ2hhciosIHVpbnQgY2xlbiApOwogICAgUVN0cmluZyAmcmVwbGFjZSgg
Y29uc3QgUVJlZ0V4cCAmLCBjb25zdCBRU3RyaW5nICYgKTsKCiAgICBzaG9ydCB0b1Nob3J0KCBi
b29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdXNob3J0IHRvVVNob3J0KCBib29s
ICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpvaz0wLCBp
bnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWludCB0b1VJbnQoIGJvb2wgKm9rPTAsIGludCBiYXNl
PTEwICkgY29uc3Q7CiAgICBsb25nIHRvTG9uZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBj
b25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7
CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3Vi
bGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAgICBRU3RyaW5nICZzZXROdW0oIHNob3J0LCBpbnQg
YmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1c2hvcnQsIGludCBiYXNlPTEwICk7CiAg
ICBRU3RyaW5nICZzZXROdW0oIGludCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51
bSggdWludCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggbG9uZywgaW50IGJh
c2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWxvbmcsIGludCBiYXNlPTEwICk7CiAgICBR
U3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRU3Ry
aW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIHN0YXRp
YyBRU3RyaW5nIG51bWJlciggbG9uZywgaW50IGJhc2U9MTAgKTsKICAgIHN0YXRpYyBRU3RyaW5n
IG51bWJlciggdWxvbmcsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlcigg
aW50LCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1aW50LCBpbnQg
YmFzZT0xMCk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIGRvdWJsZSwgY2hhciBmPSdnJywg
aW50IHByZWM9NiApOwoKICAgIHZvaWQgc2V0RXhwYW5kKCB1aW50IGluZGV4LCBRQ2hhciBjICk7
CgogICAgUVN0cmluZyAmb3BlcmF0b3IrPSggY29uc3QgUVN0cmluZyAmc3RyICk7CiAgICBRU3Ry
aW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjaGFy
IGMgKTsKCgogICAgUUNoYXIgYXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gaTxk
LT5sZW4gPyBkLT51bmljb2RlW2ldIDogUUNoYXI6Om51bGw7IH0KICAgIFFDaGFyIG9wZXJhdG9y
W10oIGludCBpICkgY29uc3QgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KICAgIFFDaGFyUmVmIGF0
KCB1aW50IGkgKTsKICAgIFFDaGFyUmVmIG9wZXJhdG9yW10oIGludCBpICk7CgogICAgUUNoYXIg
Y29uc3RyZWYodWludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGF0KGkpOyB9CiAgICBRQ2hh
ciYgcmVmKHVpbnQgaSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkLT5jb3VudCE9MSB8fCBp
Pj1kLT5sZW4pCiAgICAgICAgICAgICAgICBzdWJhdChpKTsKICAgICAgICAgICAgZC0+ZGlydHlh
c2NpaT0xOwogICAgICAgICAgICByZXR1cm4gZC0+dW5pY29kZVtpXTsKICAgICAgICB9CgogICAg
Y29uc3QgUUNoYXIqIHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBkLT51bmljb2RlOyB9CiAgICBj
b25zdCBjaGFyKiBhc2NpaSgpIGNvbnN0OwogICAgY29uc3QgY2hhciogbGF0aW4xKCkgY29uc3Q7
CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsK
CiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tVXRmOChj
b25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNTdHJpbmcgbG9jYWw4Qml0KCkgY29uc3Q7
CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0x
KTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgY2hhciAq
KCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgUVN0cmluZyAmc2V0VW5pY29kZSgg
Y29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZzZXRVbmljb2Rl
Q29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191c2hvcnRzLCB1aW50IGxlbiApOwogICAg
UVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwoKICAgIGludCBj
b21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7CiAgICBzdGF0aWMgaW50IGNvbXBhcmUo
IGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICAgICAgeyByZXR1cm4g
czEuY29tcGFyZShzMik7IH0KCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21wb3NlKCk7CiAgICBRQ2hh
cjo6RGlyZWN0aW9uIGJhc2ljRGlyZWN0aW9uKCk7CiAgICBRU3RyaW5nIHZpc3VhbChpbnQgaW5k
ZXggPSAwLCBpbnQgbGVuID0gLTEpOwoKCiAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBzdGFydHNXaXRoKCBjb25zdCBRU3RyaW5nJiAp
IGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGludCBzaXplLCBib29sICk7CgogICAgdm9p
ZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBzZXRMZW5ndGgoIHVp
bnQgcG9zICk7CiAgICB2b2lkIHN1YmF0KCB1aW50ICk7CiAgICBib29sIGZpbmRBcmcoaW50JiBw
b3MsIGludCYgbGVuKSBjb25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBj
b25zdCBjaGFyKiwgdWludCAqIGxlbiwgdWludCBtYXhsZW49KHVpbnQpLTEgKTsKICAgIHN0YXRp
YyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IFFCeXRlQXJyYXkmLCB1aW50ICogbGVuICk7
CiAgICBzdGF0aWMgY2hhciogdW5pY29kZVRvQXNjaWkoIGNvbnN0IFFDaGFyKiwgdWludCBsZW4g
KTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0YSogc2hhcmVkX251
bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7CgogICAgZnJpZW5k
IGNsYXNzIFFDb25zdFN0cmluZzsKICAgIFFTdHJpbmcoUVN0cmluZ0RhdGEqIGRkLCBib29sICkg
OiBkKGRkKSB7IH0KfTsKCmNsYXNzIFFDaGFyUmVmIHsKICAgIGZyaWVuZCBjbGFzcyBRU3RyaW5n
OwogICAgUVN0cmluZyYgczsKICAgIHVpbnQgcDsKICAgIFFDaGFyUmVmKFFTdHJpbmcqIHN0ciwg
dWludCBwb3MpIDogcygqc3RyKSwgcChwb3MpIHsgfQoKcHVibGljOgoKCgoKICAgIHVzaG9ydCB1
bmljb2RlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS51bmljb2RlKCk7IH0KICAgIGNo
YXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5sYXRpbjEoKTsgfQoKCiAg
ICBRQ2hhclJlZiBvcGVyYXRvcj0oY2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7
IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1Y2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4g
KnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShRQ2hhciBjICkgeyBzLnJlZihwKT1jOyBy
ZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjb25zdCBRQ2hhclJlZiYgYyAp
IHsgcy5yZWYocCk9Yy51bmljb2RlKCk7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3Bl
cmF0b3I9KHVzaG9ydCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQogICAgUUNo
YXJSZWYgb3BlcmF0b3I9KHNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9
CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odWludCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAq
dGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGludCByYyApIHsgcy5yZWYocCk9cmM7IHJl
dHVybiAqdGhpczsgfQoKICAgIG9wZXJhdG9yIFFDaGFyICgpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2RlKCk9
PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQ
cmludCgpOyB9CiAgICBib29sIGlzUHVuY3QoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LmlzUHVuY3QoKTsgfQogICAgYm9vbCBpc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl
ZihwKS5pc1NwYWNlKCk7IH0KICAgIGJvb2wgaXNNYXJrKCkgY29uc3QgeyByZXR1cm4gcy5jb25z
dHJlZihwKS5pc01hcmsoKTsgfQogICAgYm9vbCBpc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIHMu
Y29uc3RyZWYocCkuaXNMZXR0ZXIoKTsgfQogICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0
dXJuIHMuY29uc3RyZWYocCkuaXNOdW1iZXIoKTsgfQogICAgYm9vbCBpc0xldHRlck9yTnVtYmVy
KCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRlck9yTnVtYmVyKCk7IH0KICAgIGJvb2wg
aXNEaWdpdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNEaWdpdCgpOyB9CgogICAg
aW50IGRpZ2l0VmFsdWUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRpZ2l0VmFsdWUo
KTsgfQogICAgUUNoYXIgbG93ZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxvd2VyKCk7IH0K
ICAgIFFDaGFyIHVwcGVyKCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS51cHBlcigpOyB9CgogICAg
UUNoYXI6OkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5j
YXRlZ29yeSgpOyB9CiAgICBRQ2hhcjo6RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHMuY29uc3RyZWYocCkuZGlyZWN0aW9uKCk7IH0KICAgIFFDaGFyOjpKb2luaW5nIGpvaW5p
bmcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmpvaW5pbmcoKTsgfQogICAgYm9vbCBt
aXJyb3JlZCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubWlycm9yZWQoKTsgfQogICAg
UUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJyb3Jl
ZENoYXIoKTsgfQogICAgUVN0cmluZyBkZWNvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5j
b25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFDaGFyOjpEZWNvbXBvc2l0aW9uIGRl
Y29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29tcG9zaXRp
b25UYWcoKTsgfQoKCiAgICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihw
KS5jZWxsKCk7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCku
cm93KCk7IH0KCn07CgppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0
dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0KaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9y
W10oIGludCBpICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcg
OiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIFFDaGFyKiB1bmlj
b2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0cmlu
ZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRU3RyaW5nICYgKTsKIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKaW5saW5lIFFTdHJp
bmc6OlFTdHJpbmcoKSA6CiAgICBkKHNoYXJlZF9udWxsID8gc2hhcmVkX251bGwgOiBtYWtlU2hh
cmVkTnVsbCgpKQp7CiAgICBkLT5yZWYoKTsKfQoKaW5saW5lIFFTdHJpbmc6On5RU3RyaW5nKCkK
ewogICAgaWYgKCBkLT5kZXJlZigpICkgewogICAgICAgIGlmICggZCA9PSBzaGFyZWRfbnVsbCAp
CiAgICAgICAgICAgIHNoYXJlZF9udWxsID0gMDsKICAgICAgICBkLT5kZWxldGVTZWxmKCk7CiAg
ICB9Cn0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIFFDaGFyIGMgKQp7IHJl
dHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVy
YXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0cmluZyhRQ2hhcihjKSk7IH0KCmlu
bGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHVuaWNvZGUoKSA9PSAw
OyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25zdAp7IHJldHVybiBpc051
bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4gZC0+
bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gbGVu
Z3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6Y29weSgpIGNvbnN0CnsgcmV0
dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVwZW5k
KCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMpOyB9CgppbmxpbmUgUVN0
cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMpOyB9
CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY2hhciBjICkKeyByZXR1cm4gaW5z
ZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFTdHJp
bmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJp
bmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBR
U3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7
IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHNob3J0IG4sIGludCBiYXNlICkK
eyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmlu
Zzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVsb25nKW4s
IGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBpbnQgbiwgaW50IGJh
c2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nICZR
U3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVsb25n
KW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBmbG9hdCBuLCBj
aGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9Cgpp
bmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFz
ZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9Cgppbmxp
bmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2Up
IGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGlu
ZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2Up
IGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5l
IFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2Up
IGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGlu
ZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5kZXgsIGJvb2wgY3MgKSBjb25zdAp7
IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9CgppbmxpbmUgaW50IFFTdHJpbmc6
OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzKSBjb25zdAp7IHJldHVybiBmaW5k
UmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5k
KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0dXJuIGZpbmQoUVN0cmlu
Zzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZFJl
diggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kUmV2KFFT
dHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCgoKCgogYm9vbCBvcGVyYXRvciE9
KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8
KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8
PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9y
PT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRv
cj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRv
cj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiBib29sIG9wZXJh
dG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRv
cjwoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRvcjw9
KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPiggY29u
c3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPj0oIGNvbnN0
IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRvciE9KCBjb25zdCBj
aGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBjaGFy
ICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgY2hhciAq
czEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIgKnMx
LCBjb25zdCBRU3RyaW5nICZzMiApOwoKIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAqczEs
IGNvbnN0IFFTdHJpbmcgJnMyICk7CgoKIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3Qg
UVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7
CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKIGlubGluZSBRU3RyaW5nIG9wZXJh
dG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKewogICAgUVN0cmluZyB0
bXAoIHMxICk7CiAgICB0bXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMShzMik7CiAgICByZXR1cm4g
dG1wOwp9CgogaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3Qg
UVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5nIHRtcCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIHMx
ICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKIGlubGluZSBRU3RyaW5nIG9w
ZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAo
IHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIFFTdHJpbmcg
b3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1w
KCBzMSApOwogICAgdG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBRU3RyaW5n
IG9wZXJhdG9yKyggUUNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0
bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5s
aW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAg
IFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRt
cDsKfQpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDdXJzb3I7CgoKY2xhc3MgUXQgewpwdWJsaWM6CiAg
ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgY29sb3IwOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAm
IGNvbG9yMTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBibGFjazsKICAgIHN0YXRpYyBjb25z
dCBRQ29sb3IgJiB3aGl0ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrR3JheTsKICAg
IHN0YXRpYyBjb25zdCBRQ29sb3IgJiBncmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGxp
Z2h0R3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiByZWQ7CiAgICBzdGF0aWMgY29uc3Qg
UUNvbG9yICYgZ3JlZW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgYmx1ZTsKICAgIHN0YXRp
YyBjb25zdCBRQ29sb3IgJiBjeWFuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIG1hZ2VudGE7
CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgeWVsbG93OwogICAgc3RhdGljIGNvbnN0IFFDb2xv
ciAmIGRhcmtSZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0dyZWVuOwogICAgc3Rh
dGljIGNvbnN0IFFDb2xvciAmIGRhcmtCbHVlOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRh
cmtDeWFuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtNYWdlbnRhOwogICAgc3RhdGlj
IGNvbnN0IFFDb2xvciAmIGRhcmtZZWxsb3c7CgoKICAgIGVudW0gQnV0dG9uU3RhdGUgewogICAg
ICAgIE5vQnV0dG9uID0gMHgwMDAwLAogICAgICAgIExlZnRCdXR0b24gPSAweDAwMDEsCiAgICAg
ICAgUmlnaHRCdXR0b24gPSAweDAwMDIsCiAgICAgICAgTWlkQnV0dG9uID0gMHgwMDA0LAogICAg
ICAgIE1vdXNlQnV0dG9uTWFzayA9IDB4MDAwNywKICAgICAgICBTaGlmdEJ1dHRvbiA9IDB4MDAw
OCwKICAgICAgICBDb250cm9sQnV0dG9uID0gMHgwMDEwLAogICAgICAgIEFsdEJ1dHRvbiA9IDB4
MDAyMCwKICAgICAgICBLZXlCdXR0b25NYXNrID0gMHgwMDM4LAogICAgICAgIEtleXBhZCA9IDB4
NDAwMAogICAgfTsKCgogICAgZW51bSBPcmllbnRhdGlvbiB7CiAgICAgICAgSG9yaXpvbnRhbCwK
ICAgICAgICBWZXJ0aWNhbAogICAgfTsKCgoKCiAgICBlbnVtIEFsaWdubWVudEZsYWdzIHsKICAg
ICAgICBBbGlnbkxlZnQgPSAweDAwMDEsCiAgICAgICAgQWxpZ25SaWdodCA9IDB4MDAwMiwKICAg
ICAgICBBbGlnbkhDZW50ZXIgPSAweDAwMDQsCiAgICAgICAgQWxpZ25Ub3AgPSAweDAwMDgsCiAg
ICAgICAgQWxpZ25Cb3R0b20gPSAweDAwMTAsCiAgICAgICAgQWxpZ25WQ2VudGVyID0gMHgwMDIw
LAogICAgICAgIEFsaWduQ2VudGVyID0gQWxpZ25WQ2VudGVyIHwgQWxpZ25IQ2VudGVyLAoKICAg
ICAgICBTaW5nbGVMaW5lID0gMHgwMDQwLAogICAgICAgIERvbnRDbGlwID0gMHgwMDgwLAogICAg
ICAgIEV4cGFuZFRhYnMgPSAweDAxMDAsCiAgICAgICAgU2hvd1ByZWZpeCA9IDB4MDIwMCwKICAg
ICAgICBXb3JkQnJlYWsgPSAweDA0MDAsCiAgICAgICAgRG9udFByaW50ID0gMHgxMDAwCiAgICB9
OwoKCiAgICBlbnVtIFdpZGdldFN0YXRlIHsKICAgICAgICBXU3RhdGVfQ3JlYXRlZCA9IDB4MDAw
MDAwMDEsCiAgICAgICAgV1N0YXRlX0Rpc2FibGVkID0gMHgwMDAwMDAwMiwKICAgICAgICBXU3Rh
dGVfVmlzaWJsZSA9IDB4MDAwMDAwMDQsCiAgICAgICAgV1N0YXRlX0ZvcmNlSGlkZSA9IDB4MDAw
MDAwMDgsCiAgICAgICAgV1N0YXRlX093bkN1cnNvciA9IDB4MDAwMDAwMTAsCiAgICAgICAgV1N0
YXRlX01vdXNlVHJhY2tpbmcgPSAweDAwMDAwMDIwLAogICAgICAgIFdTdGF0ZV9Db21wcmVzc0tl
eXMgPSAweDAwMDAwMDQwLAogICAgICAgIFdTdGF0ZV9CbG9ja1VwZGF0ZXMgPSAweDAwMDAwMDgw
LAogICAgICAgIFdTdGF0ZV9JblBhaW50RXZlbnQgPSAweDAwMDAwMTAwLAogICAgICAgIFdTdGF0
ZV9SZXBhcmVudGVkID0gMHgwMDAwMDIwMCwKICAgICAgICBXU3RhdGVfQ29uZmlnUGVuZGluZyA9
IDB4MDAwMDA0MDAsCiAgICAgICAgV1N0YXRlX1Jlc2l6ZWQgPSAweDAwMDAwODAwLAogICAgICAg
IFdTdGF0ZV9BdXRvTWFzayA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0YXRlX1BvbGlzaGVkID0g
MHgwMDAwMjAwMCwKICAgICAgICBXU3RhdGVfRE5EID0gMHgwMDAwNDAwMCwKICAgICAgICBXU3Rh
dGVfTW9kYWwgPSAweDAwMDA4MDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDEgPSAweDAwMDEw
MDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDIgPSAweDAwMDIwMDAwLAogICAgICAgIFdTdGF0
ZV9SZXNlcnZlZDMgPSAweDAwMDQwMDAwLAogICAgICAgIFdTdGF0ZV9NYXhpbWl6ZWQgPSAweDAw
MDgwMDAwLAogICAgICAgIFdTdGF0ZV9UcmFuc2xhdGVCYWNrZ3JvdW5kID0gMHgwMDEwMDAwMCwK
ICAgICAgICBXU3RhdGVfRm9yY2VEaXNhYmxlZCA9IDB4MDAyMDAwMDAsCiAgICAgICAgV1N0YXRl
X0V4cG9zZWQgPSAweDAwNDAwMDAwCiAgICB9OwoKCiAgICB0eXBlZGVmIHVpbnQgV0ZsYWdzOwoK
CiAgICBlbnVtIFdpZGdldEZsYWdzIHsKICAgICAgICBXVHlwZV9Ub3BMZXZlbCA9IDB4MDAwMDAw
MDEsCiAgICAgICAgV1R5cGVfTW9kYWwgPSAweDAwMDAwMDAyLAogICAgICAgIFdUeXBlX1BvcHVw
ID0gMHgwMDAwMDAwNCwKICAgICAgICBXVHlwZV9EZXNrdG9wID0gMHgwMDAwMDAwOCwKICAgICAg
ICBXVHlwZV9NYXNrID0gMHgwMDAwMDAwZiwKCiAgICAgICAgV1N0eWxlX0N1c3RvbWl6ZSA9IDB4
MDAwMDAwMTAsCiAgICAgICAgV1N0eWxlX05vcm1hbEJvcmRlciA9IDB4MDAwMDAwMjAsCiAgICAg
ICAgV1N0eWxlX0RpYWxvZ0JvcmRlciA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0eWxlX05vQm9y
ZGVyID0gMHgwMDAwMDAwMCwKICAgICAgICBXU3R5bGVfVGl0bGUgPSAweDAwMDAwMDgwLAogICAg
ICAgIFdTdHlsZV9TeXNNZW51ID0gMHgwMDAwMDEwMCwKICAgICAgICBXU3R5bGVfTWluaW1pemUg
PSAweDAwMDAwMjAwLAogICAgICAgIFdTdHlsZV9NYXhpbWl6ZSA9IDB4MDAwMDA0MDAsCiAgICAg
ICAgV1N0eWxlX01pbk1heCA9IFdTdHlsZV9NaW5pbWl6ZSB8IFdTdHlsZV9NYXhpbWl6ZSwKICAg
ICAgICBXU3R5bGVfVG9vbCA9IDB4MDAwMDA4MDAsCiAgICAgICAgV1N0eWxlX1N0YXlzT25Ub3Ag
PSAweDAwMDAxMDAwLAogICAgICAgIFdTdHlsZV9EaWFsb2cgPSAweDAwMDAyMDAwLAogICAgICAg
IFdTdHlsZV9Db250ZXh0SGVscCA9IDB4MDAwMDQwMDAsCiAgICAgICAgV1N0eWxlX05vQm9yZGVy
RXggPSAweDAwMDA4MDAwLAogICAgICAgIFdTdHlsZV9NYXNrID0gMHgwMDAwZmZmMCwKCiAgICAg
ICAgV0Rlc3RydWN0aXZlQ2xvc2UgPSAweDAwMDEwMDAwLAogICAgICAgIFdQYWludERlc2t0b3Ag
PSAweDAwMDIwMDAwLAogICAgICAgIFdQYWludFVuY2xpcHBlZCA9IDB4MDAwNDAwMDAsCiAgICAg
ICAgV1BhaW50Q2xldmVyID0gMHgwMDA4MDAwMCwKICAgICAgICBXUmVzaXplTm9FcmFzZSA9IDB4
MDAxMDAwMDAsCiAgICAgICAgV01vdXNlTm9NYXNrID0gMHgwMDIwMDAwMCwKICAgICAgICBXTm9y
dGhXZXN0R3Jhdml0eSA9IDB4MDA0MDAwMDAsCiAgICAgICAgV1JlcGFpbnROb0VyYXNlID0gMHgw
MDgwMDAwMCwKICAgICAgICBXWDExQnlwYXNzV00gPSAweDAxMDAwMDAwLAogICAgICAgIFdHcm91
cExlYWRlciA9IDB4MDIwMDAwMDAKCiAgICB9OwoKCgoKICAgIGVudW0gSW1hZ2VDb252ZXJzaW9u
RmxhZ3MgewogICAgICAgIENvbG9yTW9kZV9NYXNrID0gMHgwMDAwMDAwMywKICAgICAgICBBdXRv
Q29sb3IgPSAweDAwMDAwMDAwLAogICAgICAgIENvbG9yT25seSA9IDB4MDAwMDAwMDMsCiAgICAg
ICAgTW9ub09ubHkgPSAweDAwMDAwMDAyLAoKCiAgICAgICAgQWxwaGFEaXRoZXJfTWFzayA9IDB4
MDAwMDAwMGMsCiAgICAgICAgVGhyZXNob2xkQWxwaGFEaXRoZXIgPSAweDAwMDAwMDAwLAogICAg
ICAgIE9yZGVyZWRBbHBoYURpdGhlciA9IDB4MDAwMDAwMDQsCiAgICAgICAgRGlmZnVzZUFscGhh
RGl0aGVyID0gMHgwMDAwMDAwOCwKICAgICAgICBOb0FscGhhID0gMHgwMDAwMDAwYywKCiAgICAg
ICAgRGl0aGVyX01hc2sgPSAweDAwMDAwMDMwLAogICAgICAgIERpZmZ1c2VEaXRoZXIgPSAweDAw
MDAwMDAwLAogICAgICAgIE9yZGVyZWREaXRoZXIgPSAweDAwMDAwMDEwLAogICAgICAgIFRocmVz
aG9sZERpdGhlciA9IDB4MDAwMDAwMjAsCgoKICAgICAgICBEaXRoZXJNb2RlX01hc2sgPSAweDAw
MDAwMGMwLAogICAgICAgIEF1dG9EaXRoZXIgPSAweDAwMDAwMDAwLAogICAgICAgIFByZWZlckRp
dGhlciA9IDB4MDAwMDAwNDAsCiAgICAgICAgQXZvaWREaXRoZXIgPSAweDAwMDAwMDgwCiAgICB9
OwoKICAgIGVudW0gQkdNb2RlIHsKICAgICAgICBUcmFuc3BhcmVudE1vZGUsCiAgICAgICAgT3Bh
cXVlTW9kZQogICAgfTsKCiAgICBlbnVtIFBhaW50VW5pdCB7CiAgICAgICAgUGl4ZWxVbml0LAog
ICAgICAgIExvTWV0cmljVW5pdCwKICAgICAgICBIaU1ldHJpY1VuaXQsCiAgICAgICAgTG9Fbmds
aXNoVW5pdCwKICAgICAgICBIaUVuZ2xpc2hVbml0LAogICAgICAgIFR3aXBzVW5pdAogICAgfTsK
CiAgICBlbnVtIEdVSVN0eWxlIHsKICAgICAgICBNYWNTdHlsZSwKICAgICAgICBXaW5kb3dzU3R5
bGUsCiAgICAgICAgV2luM1N0eWxlLAogICAgICAgIFBNU3R5bGUsCiAgICAgICAgTW90aWZTdHls
ZQogICAgfTsKCiAgICBlbnVtIE1vZGlmaWVyIHsKICAgICAgICBTSElGVCA9IDB4MDAyMDAwMDAs
CiAgICAgICAgQ1RSTCA9IDB4MDA0MDAwMDAsCiAgICAgICAgQUxUID0gMHgwMDgwMDAwMCwKICAg
ICAgICBNT0RJRklFUl9NQVNLID0gMHgwMGUwMDAwMCwKICAgICAgICBVTklDT0RFX0FDQ0VMID0g
MHgxMDAwMDAwMCwKCiAgICAgICAgQVNDSUlfQUNDRUwgPSBVTklDT0RFX0FDQ0VMCiAgICB9OwoK
ICAgIGVudW0gS2V5IHsKICAgICAgICBLZXlfRXNjYXBlID0gMHgxMDAwLAogICAgICAgIEtleV9U
YWIgPSAweDEwMDEsCiAgICAgICAgS2V5X0JhY2t0YWIgPSAweDEwMDIsIEtleV9CYWNrVGFiID0g
S2V5X0JhY2t0YWIsCiAgICAgICAgS2V5X0JhY2tzcGFjZSA9IDB4MTAwMywgS2V5X0JhY2tTcGFj
ZSA9IEtleV9CYWNrc3BhY2UsCiAgICAgICAgS2V5X1JldHVybiA9IDB4MTAwNCwKICAgICAgICBL
ZXlfRW50ZXIgPSAweDEwMDUsCiAgICAgICAgS2V5X0luc2VydCA9IDB4MTAwNiwKICAgICAgICBL
ZXlfRGVsZXRlID0gMHgxMDA3LAogICAgICAgIEtleV9QYXVzZSA9IDB4MTAwOCwKICAgICAgICBL
ZXlfUHJpbnQgPSAweDEwMDksCiAgICAgICAgS2V5X1N5c1JlcSA9IDB4MTAwYSwKICAgICAgICBL
ZXlfSG9tZSA9IDB4MTAxMCwKICAgICAgICBLZXlfRW5kID0gMHgxMDExLAogICAgICAgIEtleV9M
ZWZ0ID0gMHgxMDEyLAogICAgICAgIEtleV9VcCA9IDB4MTAxMywKICAgICAgICBLZXlfUmlnaHQg
PSAweDEwMTQsCiAgICAgICAgS2V5X0Rvd24gPSAweDEwMTUsCiAgICAgICAgS2V5X1ByaW9yID0g
MHgxMDE2LCBLZXlfUGFnZVVwID0gS2V5X1ByaW9yLAogICAgICAgIEtleV9OZXh0ID0gMHgxMDE3
LCBLZXlfUGFnZURvd24gPSBLZXlfTmV4dCwKICAgICAgICBLZXlfU2hpZnQgPSAweDEwMjAsCiAg
ICAgICAgS2V5X0NvbnRyb2wgPSAweDEwMjEsCiAgICAgICAgS2V5X01ldGEgPSAweDEwMjIsCiAg
ICAgICAgS2V5X0FsdCA9IDB4MTAyMywKICAgICAgICBLZXlfQ2Fwc0xvY2sgPSAweDEwMjQsCiAg
ICAgICAgS2V5X051bUxvY2sgPSAweDEwMjUsCiAgICAgICAgS2V5X1Njcm9sbExvY2sgPSAweDEw
MjYsCiAgICAgICAgS2V5X0YxID0gMHgxMDMwLAogICAgICAgIEtleV9GMiA9IDB4MTAzMSwKICAg
ICAgICBLZXlfRjMgPSAweDEwMzIsCiAgICAgICAgS2V5X0Y0ID0gMHgxMDMzLAogICAgICAgIEtl
eV9GNSA9IDB4MTAzNCwKICAgICAgICBLZXlfRjYgPSAweDEwMzUsCiAgICAgICAgS2V5X0Y3ID0g
MHgxMDM2LAogICAgICAgIEtleV9GOCA9IDB4MTAzNywKICAgICAgICBLZXlfRjkgPSAweDEwMzgs
CiAgICAgICAgS2V5X0YxMCA9IDB4MTAzOSwKICAgICAgICBLZXlfRjExID0gMHgxMDNhLAogICAg
ICAgIEtleV9GMTIgPSAweDEwM2IsCiAgICAgICAgS2V5X0YxMyA9IDB4MTAzYywKICAgICAgICBL
ZXlfRjE0ID0gMHgxMDNkLAogICAgICAgIEtleV9GMTUgPSAweDEwM2UsCiAgICAgICAgS2V5X0Yx
NiA9IDB4MTAzZiwKICAgICAgICBLZXlfRjE3ID0gMHgxMDQwLAogICAgICAgIEtleV9GMTggPSAw
eDEwNDEsCiAgICAgICAgS2V5X0YxOSA9IDB4MTA0MiwKICAgICAgICBLZXlfRjIwID0gMHgxMDQz
LAogICAgICAgIEtleV9GMjEgPSAweDEwNDQsCiAgICAgICAgS2V5X0YyMiA9IDB4MTA0NSwKICAg
ICAgICBLZXlfRjIzID0gMHgxMDQ2LAogICAgICAgIEtleV9GMjQgPSAweDEwNDcsCiAgICAgICAg
S2V5X0YyNSA9IDB4MTA0OCwKICAgICAgICBLZXlfRjI2ID0gMHgxMDQ5LAogICAgICAgIEtleV9G
MjcgPSAweDEwNGEsCiAgICAgICAgS2V5X0YyOCA9IDB4MTA0YiwKICAgICAgICBLZXlfRjI5ID0g
MHgxMDRjLAogICAgICAgIEtleV9GMzAgPSAweDEwNGQsCiAgICAgICAgS2V5X0YzMSA9IDB4MTA0
ZSwKICAgICAgICBLZXlfRjMyID0gMHgxMDRmLAogICAgICAgIEtleV9GMzMgPSAweDEwNTAsCiAg
ICAgICAgS2V5X0YzNCA9IDB4MTA1MSwKICAgICAgICBLZXlfRjM1ID0gMHgxMDUyLAogICAgICAg
IEtleV9TdXBlcl9MID0gMHgxMDUzLAogICAgICAgIEtleV9TdXBlcl9SID0gMHgxMDU0LAogICAg
ICAgIEtleV9NZW51ID0gMHgxMDU1LAogICAgICAgIEtleV9IeXBlcl9MID0gMHgxMDU2LAogICAg
ICAgIEtleV9IeXBlcl9SID0gMHgxMDU3LAogICAgICAgIEtleV9IZWxwID0gMHgxMDU4LAogICAg
ICAgIEtleV9TcGFjZSA9IDB4MjAsCiAgICAgICAgS2V5X0FueSA9IEtleV9TcGFjZSwKICAgICAg
ICBLZXlfRXhjbGFtID0gMHgyMSwKICAgICAgICBLZXlfUXVvdGVEYmwgPSAweDIyLAogICAgICAg
IEtleV9OdW1iZXJTaWduID0gMHgyMywKICAgICAgICBLZXlfRG9sbGFyID0gMHgyNCwKICAgICAg
ICBLZXlfUGVyY2VudCA9IDB4MjUsCiAgICAgICAgS2V5X0FtcGVyc2FuZCA9IDB4MjYsCiAgICAg
ICAgS2V5X0Fwb3N0cm9waGUgPSAweDI3LAogICAgICAgIEtleV9QYXJlbkxlZnQgPSAweDI4LAog
ICAgICAgIEtleV9QYXJlblJpZ2h0ID0gMHgyOSwKICAgICAgICBLZXlfQXN0ZXJpc2sgPSAweDJh
LAogICAgICAgIEtleV9QbHVzID0gMHgyYiwKICAgICAgICBLZXlfQ29tbWEgPSAweDJjLAogICAg
ICAgIEtleV9NaW51cyA9IDB4MmQsCiAgICAgICAgS2V5X1BlcmlvZCA9IDB4MmUsCiAgICAgICAg
S2V5X1NsYXNoID0gMHgyZiwKICAgICAgICBLZXlfMCA9IDB4MzAsCiAgICAgICAgS2V5XzEgPSAw
eDMxLAogICAgICAgIEtleV8yID0gMHgzMiwKICAgICAgICBLZXlfMyA9IDB4MzMsCiAgICAgICAg
S2V5XzQgPSAweDM0LAogICAgICAgIEtleV81ID0gMHgzNSwKICAgICAgICBLZXlfNiA9IDB4MzYs
CiAgICAgICAgS2V5XzcgPSAweDM3LAogICAgICAgIEtleV84ID0gMHgzOCwKICAgICAgICBLZXlf
OSA9IDB4MzksCiAgICAgICAgS2V5X0NvbG9uID0gMHgzYSwKICAgICAgICBLZXlfU2VtaWNvbG9u
ID0gMHgzYiwKICAgICAgICBLZXlfTGVzcyA9IDB4M2MsCiAgICAgICAgS2V5X0VxdWFsID0gMHgz
ZCwKICAgICAgICBLZXlfR3JlYXRlciA9IDB4M2UsCiAgICAgICAgS2V5X1F1ZXN0aW9uID0gMHgz
ZiwKICAgICAgICBLZXlfQXQgPSAweDQwLAogICAgICAgIEtleV9BID0gMHg0MSwKICAgICAgICBL
ZXlfQiA9IDB4NDIsCiAgICAgICAgS2V5X0MgPSAweDQzLAogICAgICAgIEtleV9EID0gMHg0NCwK
ICAgICAgICBLZXlfRSA9IDB4NDUsCiAgICAgICAgS2V5X0YgPSAweDQ2LAogICAgICAgIEtleV9H
ID0gMHg0NywKICAgICAgICBLZXlfSCA9IDB4NDgsCiAgICAgICAgS2V5X0kgPSAweDQ5LAogICAg
ICAgIEtleV9KID0gMHg0YSwKICAgICAgICBLZXlfSyA9IDB4NGIsCiAgICAgICAgS2V5X0wgPSAw
eDRjLAogICAgICAgIEtleV9NID0gMHg0ZCwKICAgICAgICBLZXlfTiA9IDB4NGUsCiAgICAgICAg
S2V5X08gPSAweDRmLAogICAgICAgIEtleV9QID0gMHg1MCwKICAgICAgICBLZXlfUSA9IDB4NTEs
CiAgICAgICAgS2V5X1IgPSAweDUyLAogICAgICAgIEtleV9TID0gMHg1MywKICAgICAgICBLZXlf
VCA9IDB4NTQsCiAgICAgICAgS2V5X1UgPSAweDU1LAogICAgICAgIEtleV9WID0gMHg1NiwKICAg
ICAgICBLZXlfVyA9IDB4NTcsCiAgICAgICAgS2V5X1ggPSAweDU4LAogICAgICAgIEtleV9ZID0g
MHg1OSwKICAgICAgICBLZXlfWiA9IDB4NWEsCiAgICAgICAgS2V5X0JyYWNrZXRMZWZ0ID0gMHg1
YiwKICAgICAgICBLZXlfQmFja3NsYXNoID0gMHg1YywKICAgICAgICBLZXlfQnJhY2tldFJpZ2h0
ID0gMHg1ZCwKICAgICAgICBLZXlfQXNjaWlDaXJjdW0gPSAweDVlLAogICAgICAgIEtleV9VbmRl
cnNjb3JlID0gMHg1ZiwKICAgICAgICBLZXlfUXVvdGVMZWZ0ID0gMHg2MCwKICAgICAgICBLZXlf
QnJhY2VMZWZ0ID0gMHg3YiwKICAgICAgICBLZXlfQmFyID0gMHg3YywKICAgICAgICBLZXlfQnJh
Y2VSaWdodCA9IDB4N2QsCiAgICAgICAgS2V5X0FzY2lpVGlsZGUgPSAweDdlLAoKCgogICAgICAg
IEtleV9ub2JyZWFrc3BhY2UgPSAweDBhMCwKICAgICAgICBLZXlfZXhjbGFtZG93biA9IDB4MGEx
LAogICAgICAgIEtleV9jZW50ID0gMHgwYTIsCiAgICAgICAgS2V5X3N0ZXJsaW5nID0gMHgwYTMs
CiAgICAgICAgS2V5X2N1cnJlbmN5ID0gMHgwYTQsCiAgICAgICAgS2V5X3llbiA9IDB4MGE1LAog
ICAgICAgIEtleV9icm9rZW5iYXIgPSAweDBhNiwKICAgICAgICBLZXlfc2VjdGlvbiA9IDB4MGE3
LAogICAgICAgIEtleV9kaWFlcmVzaXMgPSAweDBhOCwKICAgICAgICBLZXlfY29weXJpZ2h0ID0g
MHgwYTksCiAgICAgICAgS2V5X29yZGZlbWluaW5lID0gMHgwYWEsCiAgICAgICAgS2V5X2d1aWxs
ZW1vdGxlZnQgPSAweDBhYiwKICAgICAgICBLZXlfbm90c2lnbiA9IDB4MGFjLAogICAgICAgIEtl
eV9oeXBoZW4gPSAweDBhZCwKICAgICAgICBLZXlfcmVnaXN0ZXJlZCA9IDB4MGFlLAogICAgICAg
IEtleV9tYWNyb24gPSAweDBhZiwKICAgICAgICBLZXlfZGVncmVlID0gMHgwYjAsCiAgICAgICAg
S2V5X3BsdXNtaW51cyA9IDB4MGIxLAogICAgICAgIEtleV90d29zdXBlcmlvciA9IDB4MGIyLAog
ICAgICAgIEtleV90aHJlZXN1cGVyaW9yID0gMHgwYjMsCiAgICAgICAgS2V5X2FjdXRlID0gMHgw
YjQsCiAgICAgICAgS2V5X211ID0gMHgwYjUsCiAgICAgICAgS2V5X3BhcmFncmFwaCA9IDB4MGI2
LAogICAgICAgIEtleV9wZXJpb2RjZW50ZXJlZCA9IDB4MGI3LAogICAgICAgIEtleV9jZWRpbGxh
ID0gMHgwYjgsCiAgICAgICAgS2V5X29uZXN1cGVyaW9yID0gMHgwYjksCiAgICAgICAgS2V5X21h
c2N1bGluZSA9IDB4MGJhLAogICAgICAgIEtleV9ndWlsbGVtb3RyaWdodCA9IDB4MGJiLAogICAg
ICAgIEtleV9vbmVxdWFydGVyID0gMHgwYmMsCiAgICAgICAgS2V5X29uZWhhbGYgPSAweDBiZCwK
ICAgICAgICBLZXlfdGhyZWVxdWFydGVycyA9IDB4MGJlLAogICAgICAgIEtleV9xdWVzdGlvbmRv
d24gPSAweDBiZiwKICAgICAgICBLZXlfQWdyYXZlID0gMHgwYzAsCiAgICAgICAgS2V5X0FhY3V0
ZSA9IDB4MGMxLAogICAgICAgIEtleV9BY2lyY3VtZmxleCA9IDB4MGMyLAogICAgICAgIEtleV9B
dGlsZGUgPSAweDBjMywKICAgICAgICBLZXlfQWRpYWVyZXNpcyA9IDB4MGM0LAogICAgICAgIEtl
eV9BcmluZyA9IDB4MGM1LAogICAgICAgIEtleV9BRSA9IDB4MGM2LAogICAgICAgIEtleV9DY2Vk
aWxsYSA9IDB4MGM3LAogICAgICAgIEtleV9FZ3JhdmUgPSAweDBjOCwKICAgICAgICBLZXlfRWFj
dXRlID0gMHgwYzksCiAgICAgICAgS2V5X0VjaXJjdW1mbGV4ID0gMHgwY2EsCiAgICAgICAgS2V5
X0VkaWFlcmVzaXMgPSAweDBjYiwKICAgICAgICBLZXlfSWdyYXZlID0gMHgwY2MsCiAgICAgICAg
S2V5X0lhY3V0ZSA9IDB4MGNkLAogICAgICAgIEtleV9JY2lyY3VtZmxleCA9IDB4MGNlLAogICAg
ICAgIEtleV9JZGlhZXJlc2lzID0gMHgwY2YsCiAgICAgICAgS2V5X0VUSCA9IDB4MGQwLAogICAg
ICAgIEtleV9OdGlsZGUgPSAweDBkMSwKICAgICAgICBLZXlfT2dyYXZlID0gMHgwZDIsCiAgICAg
ICAgS2V5X09hY3V0ZSA9IDB4MGQzLAogICAgICAgIEtleV9PY2lyY3VtZmxleCA9IDB4MGQ0LAog
ICAgICAgIEtleV9PdGlsZGUgPSAweDBkNSwKICAgICAgICBLZXlfT2RpYWVyZXNpcyA9IDB4MGQ2
LAogICAgICAgIEtleV9tdWx0aXBseSA9IDB4MGQ3LAogICAgICAgIEtleV9Pb2JsaXF1ZSA9IDB4
MGQ4LAogICAgICAgIEtleV9VZ3JhdmUgPSAweDBkOSwKICAgICAgICBLZXlfVWFjdXRlID0gMHgw
ZGEsCiAgICAgICAgS2V5X1VjaXJjdW1mbGV4ID0gMHgwZGIsCiAgICAgICAgS2V5X1VkaWFlcmVz
aXMgPSAweDBkYywKICAgICAgICBLZXlfWWFjdXRlID0gMHgwZGQsCiAgICAgICAgS2V5X1RIT1JO
ID0gMHgwZGUsCiAgICAgICAgS2V5X3NzaGFycCA9IDB4MGRmLAogICAgICAgIEtleV9hZ3JhdmUg
PSAweDBlMCwKICAgICAgICBLZXlfYWFjdXRlID0gMHgwZTEsCiAgICAgICAgS2V5X2FjaXJjdW1m
bGV4ID0gMHgwZTIsCiAgICAgICAgS2V5X2F0aWxkZSA9IDB4MGUzLAogICAgICAgIEtleV9hZGlh
ZXJlc2lzID0gMHgwZTQsCiAgICAgICAgS2V5X2FyaW5nID0gMHgwZTUsCiAgICAgICAgS2V5X2Fl
ID0gMHgwZTYsCiAgICAgICAgS2V5X2NjZWRpbGxhID0gMHgwZTcsCiAgICAgICAgS2V5X2VncmF2
ZSA9IDB4MGU4LAogICAgICAgIEtleV9lYWN1dGUgPSAweDBlOSwKICAgICAgICBLZXlfZWNpcmN1
bWZsZXggPSAweDBlYSwKICAgICAgICBLZXlfZWRpYWVyZXNpcyA9IDB4MGViLAogICAgICAgIEtl
eV9pZ3JhdmUgPSAweDBlYywKICAgICAgICBLZXlfaWFjdXRlID0gMHgwZWQsCiAgICAgICAgS2V5
X2ljaXJjdW1mbGV4ID0gMHgwZWUsCiAgICAgICAgS2V5X2lkaWFlcmVzaXMgPSAweDBlZiwKICAg
ICAgICBLZXlfZXRoID0gMHgwZjAsCiAgICAgICAgS2V5X250aWxkZSA9IDB4MGYxLAogICAgICAg
IEtleV9vZ3JhdmUgPSAweDBmMiwKICAgICAgICBLZXlfb2FjdXRlID0gMHgwZjMsCiAgICAgICAg
S2V5X29jaXJjdW1mbGV4ID0gMHgwZjQsCiAgICAgICAgS2V5X290aWxkZSA9IDB4MGY1LAogICAg
ICAgIEtleV9vZGlhZXJlc2lzID0gMHgwZjYsCiAgICAgICAgS2V5X2RpdmlzaW9uID0gMHgwZjcs
CiAgICAgICAgS2V5X29zbGFzaCA9IDB4MGY4LAogICAgICAgIEtleV91Z3JhdmUgPSAweDBmOSwK
ICAgICAgICBLZXlfdWFjdXRlID0gMHgwZmEsCiAgICAgICAgS2V5X3VjaXJjdW1mbGV4ID0gMHgw
ZmIsCiAgICAgICAgS2V5X3VkaWFlcmVzaXMgPSAweDBmYywKICAgICAgICBLZXlfeWFjdXRlID0g
MHgwZmQsCiAgICAgICAgS2V5X3Rob3JuID0gMHgwZmUsCiAgICAgICAgS2V5X3lkaWFlcmVzaXMg
PSAweDBmZiwKCiAgICAgICAgS2V5X3Vua25vd24gPSAweGZmZmYKICAgIH07CgogICAgZW51bSBB
cnJvd1R5cGUgewogICAgICAgIFVwQXJyb3csCiAgICAgICAgRG93bkFycm93LAogICAgICAgIExl
ZnRBcnJvdywKICAgICAgICBSaWdodEFycm93CiAgICB9OwoKCiAgICBlbnVtIFJhc3Rlck9wIHsK
ICAgICAgICBDb3B5Uk9QLAogICAgICAgIE9yUk9QLAogICAgICAgIFhvclJPUCwKICAgICAgICBO
b3RBbmRST1AsCiAgICAgICAgRXJhc2VST1A9Tm90QW5kUk9QLAogICAgICAgIE5vdENvcHlST1As
CiAgICAgICAgTm90T3JST1AsCiAgICAgICAgTm90WG9yUk9QLAogICAgICAgIEFuZFJPUCwgTm90
RXJhc2VST1A9QW5kUk9QLAogICAgICAgIE5vdFJPUCwKICAgICAgICBDbGVhclJPUCwKICAgICAg
ICBTZXRST1AsCiAgICAgICAgTm9wUk9QLAogICAgICAgIEFuZE5vdFJPUCwKICAgICAgICBPck5v
dFJPUCwKICAgICAgICBOYW5kUk9QLAogICAgICAgIE5vclJPUCwgTGFzdFJPUD1Ob3JST1AKICAg
IH07CgoKICAgIGVudW0gUGVuU3R5bGUgewogICAgICAgIE5vUGVuLAogICAgICAgIFNvbGlkTGlu
ZSwKICAgICAgICBEYXNoTGluZSwKICAgICAgICBEb3RMaW5lLAogICAgICAgIERhc2hEb3RMaW5l
LAogICAgICAgIERhc2hEb3REb3RMaW5lLAogICAgICAgIE1QZW5TdHlsZSA9IDB4MGYKICAgIH07
CgogICAgZW51bSBQZW5DYXBTdHlsZSB7CiAgICAgICAgRmxhdENhcCA9IDB4MDAsCiAgICAgICAg
U3F1YXJlQ2FwID0gMHgxMCwKICAgICAgICBSb3VuZENhcCA9IDB4MjAsCiAgICAgICAgTVBlbkNh
cFN0eWxlID0gMHgzMAogICAgfTsKCiAgICBlbnVtIFBlbkpvaW5TdHlsZSB7CiAgICAgICAgTWl0
ZXJKb2luID0gMHgwMCwKICAgICAgICBCZXZlbEpvaW4gPSAweDQwLAogICAgICAgIFJvdW5kSm9p
biA9IDB4ODAsCiAgICAgICAgTVBlbkpvaW5TdHlsZSA9IDB4YzAKICAgIH07CgogICAgZW51bSBC
cnVzaFN0eWxlIHsKICAgICAgICBOb0JydXNoLAogICAgICAgIFNvbGlkUGF0dGVybiwKICAgICAg
ICBEZW5zZTFQYXR0ZXJuLAogICAgICAgIERlbnNlMlBhdHRlcm4sCiAgICAgICAgRGVuc2UzUGF0
dGVybiwKICAgICAgICBEZW5zZTRQYXR0ZXJuLAogICAgICAgIERlbnNlNVBhdHRlcm4sCiAgICAg
ICAgRGVuc2U2UGF0dGVybiwKICAgICAgICBEZW5zZTdQYXR0ZXJuLAogICAgICAgIEhvclBhdHRl
cm4sCiAgICAgICAgVmVyUGF0dGVybiwKICAgICAgICBDcm9zc1BhdHRlcm4sCiAgICAgICAgQkRp
YWdQYXR0ZXJuLAogICAgICAgIEZEaWFnUGF0dGVybiwKICAgICAgICBEaWFnQ3Jvc3NQYXR0ZXJu
LAogICAgICAgIEN1c3RvbVBhdHRlcm49MjQKICAgIH07CgogICAgZW51bSBXaW5kb3dzVmVyc2lv
biB7CiAgICAgICAgV1ZfMzJzID0gMHgwMDAxLAogICAgICAgIFdWXzk1ID0gMHgwMDAyLAogICAg
ICAgIFdWXzk4ID0gMHgwMDAzLAogICAgICAgIFdWX0RPU19iYXNlZCA9IDB4MDAwZiwKCiAgICAg
ICAgV1ZfTlQgPSAweDAwMTAsCiAgICAgICAgV1ZfMjAwMCA9IDB4MDAyMCwKICAgICAgICBXVl9O
VF9iYXNlZCA9IDB4MDBmMAogICAgfTsKCiAgICBlbnVtIFVJRWZmZWN0IHsKICAgICAgICBVSV9H
ZW5lcmFsLAogICAgICAgIFVJX0FuaW1hdGVNZW51LAogICAgICAgIFVJX0ZhZGVNZW51LAogICAg
ICAgIFVJX0FuaW1hdGVDb21ibywKICAgICAgICBVSV9BbmltYXRlVG9vbHRpcCwKICAgICAgICBV
SV9GYWRlVG9vbHRpcAogICAgfTsKCgoKCiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGFycm93
Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiB1cEFycm93Q3Vyc29yOwogICAgc3Rh
dGljIGNvbnN0IFFDdXJzb3IgJiBjcm9zc0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29y
ICYgd2FpdEN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgaWJlYW1DdXJzb3I7CiAg
ICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVWZXJDdXJzb3I7CiAgICBzdGF0aWMgY29uc3Qg
UUN1cnNvciAmIHNpemVIb3JDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVC
RGlhZ0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUZEaWFnQ3Vyc29yOwog
ICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXplQWxsQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0
IFFDdXJzb3IgJiBibGFua0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc3BsaXRW
Q3Vyc29yOwoKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc3BsaXRIQ3Vyc29yOwoKICAgIHN0
YXRpYyBjb25zdCBRQ3Vyc29yICYgcG9pbnRpbmdIYW5kQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0
IFFDdXJzb3IgJiBmb3JiaWRkZW5DdXJzb3I7CgoKICAgIGVudW0gVGV4dEZvcm1hdCB7CiAgICAg
ICAgUGxhaW5UZXh0LAogICAgICAgIFJpY2hUZXh0LAogICAgICAgIEF1dG9UZXh0CiAgICB9Owp9
OwoKCmNsYXNzIFFJbnRlcm5hbCB7CnB1YmxpYzoKICAgIGVudW0gUGFpbnREZXZpY2VGbGFncyB7
CiAgICAgICAgVW5kZWZpbmVkRGV2aWNlID0gMHgwMCwKICAgICAgICBXaWRnZXQgPSAweDAxLAog
ICAgICAgIFBpeG1hcCA9IDB4MDIsCiAgICAgICAgUHJpbnRlciA9IDB4MDMsCiAgICAgICAgUGlj
dHVyZSA9IDB4MDQsCiAgICAgICAgU3lzdGVtID0gMHgwNSwKICAgICAgICBEZXZpY2VUeXBlTWFz
ayA9IDB4MGYsCiAgICAgICAgRXh0ZXJuYWxEZXZpY2UgPSAweDEwCiAgICB9Owp9OwoKCgoKCmNs
YXNzIFFQYWludERldmljZTsKY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKY2xhc3MgUVdpZGdl
dDsKY2xhc3MgUVdpZGdldE1hcHBlcjsKY2xhc3MgUURpYWxvZzsKY2xhc3MgUUNvbG9yOwpjbGFz
cyBRQ29sb3JHcm91cDsKY2xhc3MgUVBhbGV0dGU7CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFQb2lu
dDsKY2xhc3MgUVNpemU7CmNsYXNzIFFSZWN0OwpjbGFzcyBRUG9pbnRBcnJheTsKY2xhc3MgUVBh
aW50ZXI7CmNsYXNzIFFSZWdpb247CmNsYXNzIFFGb250OwpjbGFzcyBRRm9udE1ldHJpY3M7CmNs
YXNzIFFGb250SW5mbzsKY2xhc3MgUVBlbjsKY2xhc3MgUUJydXNoOwpjbGFzcyBRV01hdHJpeDsK
Y2xhc3MgUVBpeG1hcDsKY2xhc3MgUUJpdG1hcDsKY2xhc3MgUU1vdmllOwpjbGFzcyBRSW1hZ2U7
CmNsYXNzIFFJbWFnZUlPOwpjbGFzcyBRUGljdHVyZTsKY2xhc3MgUVByaW50ZXI7CmNsYXNzIFFB
Y2NlbDsKY2xhc3MgUVRpbWVyOwpjbGFzcyBRVGltZTsKY2xhc3MgUUNsaXBib2FyZDsKCgoKCmNs
YXNzIFFXaWRnZXRMaXN0OwpjbGFzcyBRV2lkZ2V0TGlzdEl0Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBXSWQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IEhBTkRMRTsKCgp0eXBlZGVmIHN0cnVjdCBfWERp
c3BsYXkgRGlzcGxheTsKdHlwZWRlZiB1bmlvbiBfWEV2ZW50IFhFdmVudDsKdHlwZWRlZiBzdHJ1
Y3QgX1hHQyAqR0M7CnR5cGVkZWYgc3RydWN0IF9YUmVnaW9uICpSZWdpb247CgogRGlzcGxheSAq
cXRfeGRpc3BsYXkoKTsKIGludCBxdF94c2NyZWVuKCk7CiBXSWQgcXRfeHJvb3R3aW4oKTsKIEdD
IHF0X3hnZXRfcmVhZG9ubHlfZ2MoIGJvb2wgbW9ub2Nocm9tZT1GQUxTRSApOwogR0MgcXRfeGdl
dF90ZW1wX2djKCBib29sIG1vbm9jaHJvbWU9RkFMU0UgKTsKY2xhc3MgUUFwcGxpY2F0aW9uOwp0
eXBlZGVmIFFfSU5UMzIgUUNPT1JEOwpjb25zdCBRQ09PUkQgUUNPT1JEX01BWCA9IDIxNDc0ODM2
NDc7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUlOID0gLVFDT09SRF9NQVggLSAxOwoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgUVJnYjsKCiBjaGFyICpxQXBwTmFtZSgpOwoKCgoKdHlwZWRlZiB2b2lkICgq
UV9DbGVhblVwRnVuY3Rpb24pKCk7CiB2b2lkIHFBZGRQb3N0Um91dGluZSggUV9DbGVhblVwRnVu
Y3Rpb24gKTsKIHZvaWQgcVJlbW92ZVBvc3RSb3V0aW5lKCBRX0NsZWFuVXBGdW5jdGlvbiApOwoK
CiB2b2lkICpxdF9maW5kX29ial9jaGlsZCggUU9iamVjdCAqLCBjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiApOwpjbGFzcyBRUG9pbnQKewpwdWJsaWM6CiAgICBRUG9pbnQoKTsKICAgIFFQb2lu
dCggaW50IHhwb3MsIGludCB5cG9zICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKCiAgICBp
bnQgeCgpIGNvbnN0OwogICAgaW50IHkoKSBjb25zdDsKICAgIHZvaWQgc2V0WCggaW50IHggKTsK
ICAgIHZvaWQgc2V0WSggaW50IHkgKTsKCiAgICBpbnQgbWFuaGF0dGFuTGVuZ3RoKCkgY29uc3Q7
CgogICAgUUNPT1JEICZyeCgpOwogICAgUUNPT1JEICZyeSgpOwoKICAgIFFQb2ludCAmb3BlcmF0
b3IrPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLT0oIGNvbnN0IFFQ
b2ludCAmcCApOwogICAgUVBvaW50ICZvcGVyYXRvcio9KCBpbnQgYyApOwogICAgUVBvaW50ICZv
cGVyYXRvcio9KCBkb3VibGUgYyApOwogICAgUVBvaW50ICZvcGVyYXRvci89KCBpbnQgYyApOwog
ICAgUVBvaW50ICZvcGVyYXRvci89KCBkb3VibGUgYyApOwoKICAgIGZyaWVuZCBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVu
ZCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKyggY29uc3QgUVBvaW50ICYsIGNv
bnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvci0oIGNvbnN0
IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3Bl
cmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBv
cGVyYXRvciooIGludCwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50
IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICYsIGRvdWJsZSApOwogICAgZnJpZW5kIGlubGluZSBR
UG9pbnQgb3BlcmF0b3IqKCBkb3VibGUsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5s
aW5lIFFQb2ludCBvcGVyYXRvci0oIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5l
IFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxp
bmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICYsIGRvdWJsZSApOwoKcHJpdmF0ZToK
ICAgIHN0YXRpYyB2b2lkIHdhcm5pbmdEaXZCeVplcm8oKTsKCgoKCgogICAgUUNPT1JEIHhwOwog
ICAgUUNPT1JEIHlwOwoKfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0
cmVhbSAmLCBjb25zdCBRUG9pbnQgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRh
U3RyZWFtICYsIFFQb2ludCAmICk7CgoKCgoKCmlubGluZSBRUG9pbnQ6OlFQb2ludCgpCnsgeHA9
MDsgeXA9MDsgfQoKaW5saW5lIFFQb2ludDo6UVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKQp7
IHhwPShRQ09PUkQpeHBvczsgeXA9KFFDT09SRCl5cG9zOyB9CgppbmxpbmUgYm9vbCBRUG9pbnQ6
OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHhwID09IDAgJiYgeXAgPT0gMDsgfQoKaW5saW5lIGlu
dCBRUG9pbnQ6OngoKSBjb25zdAp7IHJldHVybiB4cDsgfQoKaW5saW5lIGludCBRUG9pbnQ6Onko
KSBjb25zdAp7IHJldHVybiB5cDsgfQoKaW5saW5lIHZvaWQgUVBvaW50OjpzZXRYKCBpbnQgeCAp
CnsgeHAgPSAoUUNPT1JEKXg7IH0KCmlubGluZSB2b2lkIFFQb2ludDo6c2V0WSggaW50IHkgKQp7
IHlwID0gKFFDT09SRCl5OyB9CgppbmxpbmUgUUNPT1JEICZRUG9pbnQ6OnJ4KCkKeyByZXR1cm4g
eHA7IH0KCmlubGluZSBRQ09PUkQgJlFQb2ludDo6cnkoKQp7IHJldHVybiB5cDsgfQoKaW5saW5l
IFFQb2ludCAmUVBvaW50OjpvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAgKQp7IHhwKz1wLnhw
OyB5cCs9cC55cDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJh
dG9yLT0oIGNvbnN0IFFQb2ludCAmcCApCnsgeHAtPXAueHA7IHlwLT1wLnlwOyByZXR1cm4gKnRo
aXM7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IqPSggaW50IGMgKQp7IHhwKj0o
UUNPT1JEKWM7IHlwKj0oUUNPT1JEKWM7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAm
UVBvaW50OjpvcGVyYXRvcio9KCBkb3VibGUgYyApCnsgeHA9KFFDT09SRCkoeHAqYyk7IHlwPShR
Q09PUkQpKHlwKmMpOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNv
bnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBwMS54cCA9PSBwMi54
cCAmJiBwMS55cCA9PSBwMi55cDsgfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBv
aW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsgcmV0dXJuIHAxLnhwICE9IHAyLnhwIHx8IHAx
LnlwICE9IHAyLnlwOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKyggY29uc3QgUVBvaW50ICZw
MSwgY29uc3QgUVBvaW50ICZwMiApCnsgcmV0dXJuIFFQb2ludChwMS54cCtwMi54cCwgcDEueXAr
cDIueXApOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICZwMSwgY29u
c3QgUVBvaW50ICZwMiApCnsgcmV0dXJuIFFQb2ludChwMS54cC1wMi54cCwgcDEueXAtcDIueXAp
OyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsg
cmV0dXJuIFFQb2ludChwLnhwKmMsIHAueXAqYyk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3Iq
KCBpbnQgYywgY29uc3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KHAueHAqYywgcC55cCpj
KTsgfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAmcCwgZG91YmxlIGMg
KQp7IHJldHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55cCpjKSk7IH0K
CmlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBkb3VibGUgYywgY29uc3QgUVBvaW50ICZwICkKeyBy
ZXR1cm4gUVBvaW50KChRQ09PUkQpKHAueHAqYyksIChRQ09PUkQpKHAueXAqYykpOyB9Cgppbmxp
bmUgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KC1w
LnhwLCAtcC55cCk7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IvPSggaW50IGMg
KQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB4
cC89KFFDT09SRCljOwogICAgeXAvPShRQ09PUkQpYzsKICAgIHJldHVybiAqdGhpczsKfQoKaW5s
aW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvci89KCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMg
PT0gMC4wICkKICAgICAgICB3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgeHA9KFFDT09SRCkoeHAv
Yyk7CiAgICB5cD0oUUNPT1JEKSh5cC9jKTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFQ
b2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmcCwgaW50IGMgKQp7CgogICAgaWYgKCBjID09
IDAgKQogICAgICAgIFFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9p
bnQocC54cC9jLCBwLnlwL2MpOwp9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBv
aW50ICZwLCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICBRUG9pbnQ6
Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAgICByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAueHAvYyks
IChRQ09PUkQpKHAueXAvYykpOwp9CgoKCmNsYXNzIFFTaXplCnsKcHVibGljOgogICAgUVNpemUo
KTsKICAgIFFTaXplKCBpbnQgdywgaW50IGggKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBp
bnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lk
dGgoIGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgdHJhbnNw
b3NlKCk7CgogICAgUVNpemUgZXhwYW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNvbnN0OwogICAg
UVNpemUgYm91bmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7CgogICAgUUNPT1JEICZyd2lk
dGgoKTsKICAgIFFDT09SRCAmcmhlaWdodCgpOwoKICAgIFFTaXplICZvcGVyYXRvcis9KCBjb25z
dCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3ItPSggY29uc3QgUVNpemUgJiApOwogICAg
UVNpemUgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggZG91Ymxl
IGMgKTsKICAgIFFTaXplICZvcGVyYXRvci89KCBpbnQgYyApOwogICAgUVNpemUgJm9wZXJhdG9y
Lz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIFFT
aXplIG9wZXJhdG9yKyggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5k
IGlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBpbnQgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFTaXplICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBkb3VibGUg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUsIGNvbnN0IFFTaXpl
ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBp
bnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBk
b3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7Cgog
ICAgUUNPT1JEIHdkOwogICAgUUNPT1JEIGh0Owp9OwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJh
dG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTaXplICYgKTsKIFFEYXRhU3RyZWFtICZvcGVy
YXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU2l6ZSAmICk7CgoKCgoKCmlubGluZSBRU2l6ZTo6UVNp
emUoKQp7IHdkID0gaHQgPSAtMTsgfQoKaW5saW5lIFFTaXplOjpRU2l6ZSggaW50IHcsIGludCBo
ICkKeyB3ZD0oUUNPT1JEKXc7IGh0PShRQ09PUkQpaDsgfQoKaW5saW5lIGJvb2wgUVNpemU6Omlz
TnVsbCgpIGNvbnN0CnsgcmV0dXJuIHdkPT0wICYmIGh0PT0wOyB9CgppbmxpbmUgYm9vbCBRU2l6
ZTo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIHdkPDEgfHwgaHQ8MTsgfQoKaW5saW5lIGJvb2wg
UVNpemU6OmlzVmFsaWQoKSBjb25zdAp7IHJldHVybiB3ZD49MCAmJiBodD49MDsgfQoKaW5saW5l
IGludCBRU2l6ZTo6d2lkdGgoKSBjb25zdAp7IHJldHVybiB3ZDsgfQoKaW5saW5lIGludCBRU2l6
ZTo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gaHQ7IH0KCmlubGluZSB2b2lkIFFTaXplOjpzZXRX
aWR0aCggaW50IHcgKQp7IHdkPShRQ09PUkQpdzsgfQoKaW5saW5lIHZvaWQgUVNpemU6OnNldEhl
aWdodCggaW50IGggKQp7IGh0PShRQ09PUkQpaDsgfQoKaW5saW5lIFFDT09SRCAmUVNpemU6OnJ3
aWR0aCgpCnsgcmV0dXJuIHdkOyB9CgppbmxpbmUgUUNPT1JEICZRU2l6ZTo6cmhlaWdodCgpCnsg
cmV0dXJuIGh0OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcis9KCBjb25zdCBRU2l6
ZSAmcyApCnsgd2QrPXMud2Q7IGh0Kz1zLmh0OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6
ZSAmUVNpemU6Om9wZXJhdG9yLT0oIGNvbnN0IFFTaXplICZzICkKeyB3ZC09cy53ZDsgaHQtPXMu
aHQ7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IqPSggaW50
IGMgKQp7IHdkKj0oUUNPT1JEKWM7IGh0Kj0oUUNPT1JEKWM7IHJldHVybiAqdGhpczsgfQoKaW5s
aW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IqPSggZG91YmxlIGMgKQp7IHdkPShRQ09PUkQpKHdk
KmMpOyBodD0oUUNPT1JEKShodCpjKTsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIHMxLndk
ID09IHMyLndkICYmIHMxLmh0ID09IHMyLmh0OyB9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBj
b25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIHMxLndkICE9IHMyLndk
IHx8IHMxLmh0ICE9IHMyLmh0OyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IrKCBjb25zdCBRU2l6
ZSAmIHMxLCBjb25zdCBRU2l6ZSAmIHMyICkKeyByZXR1cm4gUVNpemUoczEud2QrczIud2QsIHMx
Lmh0K3MyLmh0KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yLSggY29uc3QgUVNpemUgJnMxLCBj
b25zdCBRU2l6ZSAmczIgKQp7IHJldHVybiBRU2l6ZShzMS53ZC1zMi53ZCwgczEuaHQtczIuaHQp
OyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmcywgaW50IGMgKQp7IHJl
dHVybiBRU2l6ZShzLndkKmMsIHMuaHQqYyk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvciooIGlu
dCBjLCBjb25zdCBRU2l6ZSAmcyApCnsgcmV0dXJuIFFTaXplKHMud2QqYywgcy5odCpjKTsgfQoK
aW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJnMsIGRvdWJsZSBjICkKeyByZXR1
cm4gUVNpemUoKFFDT09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBR
U2l6ZSBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRU2l6ZSAmcyApCnsgcmV0dXJuIFFTaXpl
KChRQ09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQqYykpOyB9CgppbmxpbmUgUVNpemUgJlFT
aXplOjpvcGVyYXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgd2Fy
bmluZ0RpdkJ5WmVybygpOwoKICAgIHdkLz0oUUNPT1JEKWM7IGh0Lz0oUUNPT1JEKWM7CiAgICBy
ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yLz0oIGRvdWJsZSBj
ICkKewoKICAgIGlmICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAg
ICB3ZD0oUUNPT1JEKSh3ZC9jKTsgaHQ9KFFDT09SRCkoaHQvYyk7CiAgICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICZzLCBpbnQgYyApCnsKCiAg
ICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVNpemU6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAgICBy
ZXR1cm4gUVNpemUocy53ZC9jLCBzLmh0L2MpOwp9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBj
b25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAg
UVNpemU6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAgICByZXR1cm4gUVNpemUoKFFDT09SRCkocy53
ZC9jKSwgKFFDT09SRCkocy5odC9jKSk7Cn0KCmlubGluZSBRU2l6ZSBRU2l6ZTo6ZXhwYW5kZWRU
byggY29uc3QgUVNpemUgJiBvdGhlclNpemUgKSBjb25zdAp7CiAgICByZXR1cm4gUVNpemUoICgo
d2QpID4gKG90aGVyU2l6ZS53ZCkgPyAod2QpIDogKG90aGVyU2l6ZS53ZCkpLCAoKGh0KSA+IChv
dGhlclNpemUuaHQpID8gKGh0KSA6IChvdGhlclNpemUuaHQpKSApOwp9CgppbmxpbmUgUVNpemUg
UVNpemU6OmJvdW5kZWRUbyggY29uc3QgUVNpemUgJiBvdGhlclNpemUgKSBjb25zdAp7CiAgICBy
ZXR1cm4gUVNpemUoICgod2QpIDwgKG90aGVyU2l6ZS53ZCkgPyAod2QpIDogKG90aGVyU2l6ZS53
ZCkpLCAoKGh0KSA8IChvdGhlclNpemUuaHQpID8gKGh0KSA6IChvdGhlclNpemUuaHQpKSApOwp9
CgoKCgoKCgpjbGFzcyBRUmVjdAp7CnB1YmxpYzoKICAgIFFSZWN0KCkgeyB4MSA9IHkxID0gMDsg
eDIgPSB5MiA9IC0xOyB9CiAgICBRUmVjdCggY29uc3QgUVBvaW50ICZ0b3BsZWZ0LCBjb25zdCBR
UG9pbnQgJmJvdHRvbXJpZ2h0ICk7CiAgICBRUmVjdCggY29uc3QgUVBvaW50ICZ0b3BsZWZ0LCBj
b25zdCBRU2l6ZSAmc2l6ZSApOwogICAgUVJlY3QoIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgIFFSZWN0IG5vcm1hbGl6
ZSgpIGNvbnN0OwoKICAgIGludCBsZWZ0KCkgY29uc3Q7CiAgICBpbnQgdG9wKCkgY29uc3Q7CiAg
ICBpbnQgcmlnaHQoKSBjb25zdDsKICAgIGludCBib3R0b20oKSBjb25zdDsKCiAgICBRQ09PUkQg
JnJMZWZ0KCk7CiAgICBRQ09PUkQgJnJUb3AoKTsKICAgIFFDT09SRCAmclJpZ2h0KCk7CiAgICBR
Q09PUkQgJnJCb3R0b20oKTsKCiAgICBpbnQgeCgpIGNvbnN0OwogICAgaW50IHkoKSBjb25zdDsK
ICAgIHZvaWQgc2V0TGVmdCggaW50IHBvcyApOwogICAgdm9pZCBzZXRUb3AoIGludCBwb3MgKTsK
ICAgIHZvaWQgc2V0UmlnaHQoIGludCBwb3MgKTsKICAgIHZvaWQgc2V0Qm90dG9tKCBpbnQgcG9z
ICk7CiAgICB2b2lkIHNldFgoIGludCB4ICk7CiAgICB2b2lkIHNldFkoIGludCB5ICk7CgogICAg
UVBvaW50IHRvcExlZnQoKSBjb25zdDsKICAgIFFQb2ludCBib3R0b21SaWdodCgpIGNvbnN0Owog
ICAgUVBvaW50IHRvcFJpZ2h0KCkgY29uc3Q7CiAgICBRUG9pbnQgYm90dG9tTGVmdCgpIGNvbnN0
OwogICAgUVBvaW50IGNlbnRlcigpIGNvbnN0OwoKICAgIHZvaWQgcmVjdCggaW50ICp4LCBpbnQg
KnksIGludCAqdywgaW50ICpoICkgY29uc3Q7CiAgICB2b2lkIGNvb3JkcyggaW50ICp4MSwgaW50
ICp5MSwgaW50ICp4MiwgaW50ICp5MiApIGNvbnN0OwoKICAgIHZvaWQgbW92ZVRvcExlZnQoIGNv
bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBtb3ZlQm90dG9tUmlnaHQoIGNvbnN0IFFQb2ludCAm
cCApOwogICAgdm9pZCBtb3ZlVG9wUmlnaHQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBt
b3ZlQm90dG9tTGVmdCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVDZW50ZXIoIGNv
bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBtb3ZlQnkoIGludCBkeCwgaW50IGR5ICk7CgogICAg
dm9pZCBzZXRSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCApOwogICAgdm9pZCBzZXRD
b29yZHMoIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiApOwoKICAgIFFTaXplIHNpemUo
KSBjb25zdDsKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNvbnN0Owog
ICAgdm9pZCBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0SGVpZ2h0KCBpbnQgaCApOwog
ICAgdm9pZCBzZXRTaXplKCBjb25zdCBRU2l6ZSAmcyApOwoKICAgIFFSZWN0IG9wZXJhdG9yfChj
b25zdCBRUmVjdCAmcikgY29uc3Q7CiAgICBRUmVjdCBvcGVyYXRvciYoY29uc3QgUVJlY3QgJnIp
IGNvbnN0OwogICAgUVJlY3QmIG9wZXJhdG9yfD0oY29uc3QgUVJlY3QgJnIpOwogICAgUVJlY3Qm
IG9wZXJhdG9yJj0oY29uc3QgUVJlY3QgJnIpOwoKICAgIGJvb2wgY29udGFpbnMoIGNvbnN0IFFQ
b2ludCAmcCwgYm9vbCBwcm9wZXI9RkFMU0UgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMoIGlu
dCB4LCBpbnQgeSwgYm9vbCBwcm9wZXI9RkFMU0UgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMo
IGNvbnN0IFFSZWN0ICZyLCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgUVJlY3QgdW5p
dGUoIGNvbnN0IFFSZWN0ICZyICkgY29uc3Q7CiAgICBRUmVjdCBpbnRlcnNlY3QoIGNvbnN0IFFS
ZWN0ICZyICkgY29uc3Q7CiAgICBib29sIGludGVyc2VjdHMoIGNvbnN0IFFSZWN0ICZyICkgY29u
c3Q7CgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlY3QgJiwgY29uc3QgUVJl
Y3QgJiApOwogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJlY3QgJiwgY29uc3Qg
UVJlY3QgJiApOwoKcHJpdmF0ZToKCgoKCgoKICAgIFFDT09SRCB4MTsKICAgIFFDT09SRCB5MTsK
ICAgIFFDT09SRCB4MjsKICAgIFFDT09SRCB5MjsKCn07CgogYm9vbCBvcGVyYXRvcj09KCBjb25z
dCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7CiBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWN0
ICYsIGNvbnN0IFFSZWN0ICYgKTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0
YVN0cmVhbSAmLCBjb25zdCBRUmVjdCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURh
dGFTdHJlYW0gJiwgUVJlY3QgJiApOwoKCgoKCgppbmxpbmUgUVJlY3Q6OlFSZWN0KCBpbnQgbGVm
dCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICkKewogICAgeDEgPSAoUUNPT1JEKWxl
ZnQ7CiAgICB5MSA9IChRQ09PUkQpdG9wOwogICAgeDIgPSAoUUNPT1JEKShsZWZ0K3dpZHRoLTEp
OwogICAgeTIgPSAoUUNPT1JEKSh0b3AraGVpZ2h0LTEpOwp9CgppbmxpbmUgYm9vbCBRUmVjdDo6
aXNOdWxsKCkgY29uc3QKeyByZXR1cm4geDIgPT0geDEtMSAmJiB5MiA9PSB5MS0xOyB9Cgppbmxp
bmUgYm9vbCBRUmVjdDo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIHgxID4geDIgfHwgeTEgPiB5
MjsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzVmFsaWQoKSBjb25zdAp7IHJldHVybiB4MSA8PSB4
MiAmJiB5MSA8PSB5MjsgfQoKaW5saW5lIGludCBRUmVjdDo6bGVmdCgpIGNvbnN0CnsgcmV0dXJu
IHgxOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp0b3AoKSBjb25zdAp7IHJldHVybiB5MTsgfQoKaW5s
aW5lIGludCBRUmVjdDo6cmlnaHQoKSBjb25zdAp7IHJldHVybiB4MjsgfQoKaW5saW5lIGludCBR
UmVjdDo6Ym90dG9tKCkgY29uc3QKeyByZXR1cm4geTI7IH0KCmlubGluZSBRQ09PUkQgJlFSZWN0
OjpyTGVmdCgpCnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJUb3AoKQp7
IHJldHVybiB5MTsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyUmlnaHQoKQp7IHJldHVybiB4
MjsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyQm90dG9tKCkKeyByZXR1cm4geTI7IH0KCmlu
bGluZSBpbnQgUVJlY3Q6OngoKSBjb25zdAp7IHJldHVybiB4MTsgfQoKaW5saW5lIGludCBRUmVj
dDo6eSgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0TGVmdCgg
aW50IHBvcyApCnsgeDEgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFRv
cCggaW50IHBvcyApCnsgeTEgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNl
dFJpZ2h0KCBpbnQgcG9zICkKeyB4MiA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVj
dDo6c2V0Qm90dG9tKCBpbnQgcG9zICkKeyB5MiA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9p
ZCBRUmVjdDo6c2V0WCggaW50IHggKQp7IHgxID0gKFFDT09SRCl4OyB9CgppbmxpbmUgdm9pZCBR
UmVjdDo6c2V0WSggaW50IHkgKQp7IHkxID0gKFFDT09SRCl5OyB9CgppbmxpbmUgUVBvaW50IFFS
ZWN0Ojp0b3BMZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5MSk7IH0KCmlubGluZSBR
UG9pbnQgUVJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgyLCB5Mik7
IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OnRvcFJpZ2h0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50
KHgyLCB5MSk7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OmJvdHRvbUxlZnQoKSBjb25zdAp7IHJl
dHVybiBRUG9pbnQoeDEsIHkyKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6Y2VudGVyKCkgY29u
c3QKeyByZXR1cm4gUVBvaW50KCh4MSt4MikvMiwgKHkxK3kyKS8yKTsgfQoKaW5saW5lIGludCBR
UmVjdDo6d2lkdGgoKSBjb25zdAp7IHJldHVybiB4MiAtIHgxICsgMTsgfQoKaW5saW5lIGludCBR
UmVjdDo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4geTIgLSB5MSArIDE7IH0KCmlubGluZSBRU2l6
ZSBRUmVjdDo6c2l6ZSgpIGNvbnN0CnsgcmV0dXJuIFFTaXplKHgyLXgxKzEsIHkyLXkxKzEpOyB9
CgppbmxpbmUgYm9vbCBRUmVjdDo6Y29udGFpbnMoIGludCB4LCBpbnQgeSwgYm9vbCBwcm9wZXIg
KSBjb25zdAp7CiAgICBpZiAoIHByb3BlciApCiAgICAgICAgcmV0dXJuIHggPiB4MSAmJiB4IDwg
eDIgJiYKICAgICAgICAgICAgICAgeSA+IHkxICYmIHkgPCB5MjsKICAgIGVsc2UKICAgICAgICBy
ZXR1cm4geCA+PSB4MSAmJiB4IDw9IHgyICYmCiAgICAgICAgICAgICAgIHkgPj0geTEgJiYgeSA8
PSB5MjsKfQoKCgoKY2xhc3MgUVJlZ2lvbgp7CnB1YmxpYzoKICAgIGVudW0gUmVnaW9uVHlwZSB7
IFJlY3RhbmdsZSwgRWxsaXBzZSB9OwoKICAgIFFSZWdpb24oKTsKICAgIFFSZWdpb24oIGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVn
aW9uKCBjb25zdCBRUmVjdCAmLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9u
KCBjb25zdCBRUG9pbnRBcnJheSAmLCBib29sIHdpbmRpbmc9RkFMU0UgKTsKICAgIFFSZWdpb24o
IGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiggY29uc3QgUUJpdG1hcCAmICk7CiAgIH5R
UmVnaW9uKCk7CiAgICBRUmVnaW9uICZvcGVyYXRvcj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAg
IGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKCiAgICBib29s
IGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMoIGNv
bnN0IFFSZWN0ICZyICkgY29uc3Q7CgogICAgdm9pZCB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5
ICk7CgogICAgUVJlZ2lvbiB1bml0ZSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVn
aW9uIGludGVyc2VjdCggY29uc3QgUVJlZ2lvbiAmKSBjb25zdDsKICAgIFFSZWdpb24gc3VidHJh
Y3QoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBlb3IoIGNvbnN0IFFSZWdp
b24gJiApIGNvbnN0OwoKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgUUFycmF5
PFFSZWN0PiByZWN0cygpIGNvbnN0OwogICAgdm9pZCBzZXRSZWN0cyggY29uc3QgUVJlY3QgKiwg
aW50ICk7CgogICAgUVJlZ2lvbiBvcGVyYXRvcnwoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0Owog
ICAgUVJlZ2lvbiBvcGVyYXRvcisoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lv
biBvcGVyYXRvciYoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVyYXRv
ci0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVyYXRvcl4oIGNvbnN0
IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiYgb3BlcmF0b3J8PSggY29uc3QgUVJlZ2lv
biAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvcis9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFS
ZWdpb24mIG9wZXJhdG9yJj0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0
b3ItPSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvcl49KCBjb25zdCBR
UmVnaW9uICYgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0
OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUmVnaW9uICZyICkgY29uc3QKICAgICAgICAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KHIpKTsgfQoKCgoKICAgIFJlZ2lv
biBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5yZ247IH0KICAgIGZyaWVuZCBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlZ2lvbiAmICk7CiAgICBm
cmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFSZWdpb24gJiAp
OwoKcHJpdmF0ZToKICAgIFFSZWdpb24oIGJvb2wgKTsKICAgIFFSZWdpb24gY29weSgpIGNvbnN0
OwogICAgdm9pZCBkZXRhY2goKTsKCgoKICAgIHZvaWQgZXhlYyggY29uc3QgUUJ5dGVBcnJheSAm
LCBpbnQgdmVyID0gMCApOwogICAgc3RydWN0IFFSZWdpb25EYXRhIDogcHVibGljIFFTaGFyZWQg
ewoKCgogICAgICAgIFJlZ2lvbiByZ247CiAgICAgICAgUVJlY3QgYnI7CgoKCgoKICAgICAgICBi
b29sIGlzX251bGw7CiAgICB9ICpkYXRhOwp9OwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFE
YXRhU3RyZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o
IFFEYXRhU3RyZWFtICYsIFFSZWdpb24gJiApOwoKY2xhc3MgUU1pbWVTb3VyY2UgewpwdWJsaWM6
CiAgICB2aXJ0dWFsIH5RTWltZVNvdXJjZSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBmb3Jt
YXQoIGludCBuID0gMCApIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgYm9vbCBwcm92aWRlcyggY29u
c3QgY2hhciogKSBjb25zdDsKICAgIHZpcnR1YWwgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29u
c3QgY2hhciogKSBjb25zdCA9IDA7Cn07CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnlEYXRhOwpj
bGFzcyBRU3RyaW5nTGlzdDsKCmNsYXNzIFFNaW1lU291cmNlRmFjdG9yeSB7CnB1YmxpYzoKICAg
IFFNaW1lU291cmNlRmFjdG9yeSgpOwogICAgdmlydHVhbCB+UU1pbWVTb3VyY2VGYWN0b3J5KCk7
CgogICAgc3RhdGljIFFNaW1lU291cmNlRmFjdG9yeSogZGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0
YXRpYyB2b2lkIHNldERlZmF1bHRGYWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkqICk7CgogICAg
dmlydHVhbCBjb25zdCBRTWltZVNvdXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSkg
Y29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJpbmcgbWFrZUFic29sdXRlKGNvbnN0IFFTdHJpbmcmIGFi
c19vcl9yZWxfbmFtZSwgY29uc3QgUVN0cmluZyYgY29udGV4dCkgY29uc3Q7CiAgICBjb25zdCBR
TWltZVNvdXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFT
dHJpbmcmIGNvbnRleHQpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBR
U3RyaW5nJiBhYnNfbmFtZSwgY29uc3QgUVN0cmluZyYgdGV4dCApOwogICAgdmlydHVhbCB2b2lk
IHNldEltYWdlKCBjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSwgY29uc3QgUUltYWdlJiBpbSApOwog
ICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0
IFFQaXhtYXAmIHBtICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgUVN0cmluZyYg
YWJzX25hbWUsIFFNaW1lU291cmNlKiBkYXRhICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZVBh
dGgoIGNvbnN0IFFTdHJpbmdMaXN0JiApOwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBmaWxlUGF0
aCgpIGNvbnN0OwogICAgdm9pZCBhZGRGaWxlUGF0aCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRFeHRlbnNpb25UeXBlKCBjb25zdCBRU3RyaW5nJiBleHQsIGNvbnN0IGNo
YXIqIG1pbWV0eXBlICk7Cgpwcml2YXRlOgogICAgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YSogZDsK
fTsKCgoKY2xhc3MgUUV2ZW50OiBwdWJsaWMgUXQKewpwdWJsaWM6CiAgICBlbnVtIFR5cGUgewoK
CgoKCgogICAgICAgIE5vbmUgPSAwLAoKCiAgICAgICAgVGltZXIgPSAxLAogICAgICAgIE1vdXNl
QnV0dG9uUHJlc3MgPSAyLAogICAgICAgIE1vdXNlQnV0dG9uUmVsZWFzZSA9IDMsCiAgICAgICAg
TW91c2VCdXR0b25EYmxDbGljaz0gNCwKICAgICAgICBNb3VzZU1vdmUgPSA1LAogICAgICAgIEtl
eVByZXNzID0gNiwKICAgICAgICBLZXlSZWxlYXNlID0gNywKICAgICAgICBGb2N1c0luID0gOCwK
ICAgICAgICBGb2N1c091dCA9IDksCiAgICAgICAgRW50ZXIgPSAxMCwKICAgICAgICBMZWF2ZSA9
IDExLAogICAgICAgIFBhaW50ID0gMTIsCiAgICAgICAgTW92ZSA9IDEzLAogICAgICAgIFJlc2l6
ZSA9IDE0LAogICAgICAgIENyZWF0ZSA9IDE1LAogICAgICAgIERlc3Ryb3kgPSAxNiwKICAgICAg
ICBTaG93ID0gMTcsCiAgICAgICAgSGlkZSA9IDE4LAogICAgICAgIENsb3NlID0gMTksCiAgICAg
ICAgUXVpdCA9IDIwLAogICAgICAgIFJlcGFyZW50ID0gMjEsCiAgICAgICAgU2hvd01pbmltaXpl
ZCA9IDIyLAogICAgICAgIFNob3dOb3JtYWwgPSAyMywKICAgICAgICBXaW5kb3dBY3RpdmF0ZSA9
IDI0LAogICAgICAgIFdpbmRvd0RlYWN0aXZhdGUgPSAyNSwKICAgICAgICBTaG93VG9QYXJlbnQg
PSAyNiwKICAgICAgICBIaWRlVG9QYXJlbnQgPSAyNywKICAgICAgICBTaG93TWF4aW1pemVkID0g
MjgsCiAgICAgICAgQWNjZWwgPSAzMCwKICAgICAgICBXaGVlbCA9IDMxLAogICAgICAgIEFjY2Vs
QXZhaWxhYmxlID0gMzIsCiAgICAgICAgQ2FwdGlvbkNoYW5nZSA9IDMzLAogICAgICAgIEljb25D
aGFuZ2UgPSAzNCwKICAgICAgICBQYXJlbnRGb250Q2hhbmdlID0gMzUsCiAgICAgICAgQXBwbGlj
YXRpb25Gb250Q2hhbmdlID0gMzYsCiAgICAgICAgUGFyZW50UGFsZXR0ZUNoYW5nZSA9IDM3LAog
ICAgICAgIEFwcGxpY2F0aW9uUGFsZXR0ZUNoYW5nZSA9IDM4LAogICAgICAgIENsaXBib2FyZCA9
IDQwLAogICAgICAgIFNwZWVjaCA9IDQyLAogICAgICAgIFNvY2tBY3QgPSA1MCwKICAgICAgICBB
Y2NlbE92ZXJyaWRlID0gNTEsCiAgICAgICAgRHJhZ0VudGVyID0gNjAsCiAgICAgICAgRHJhZ01v
dmUgPSA2MSwKICAgICAgICBEcmFnTGVhdmUgPSA2MiwKICAgICAgICBEcm9wID0gNjMsCiAgICAg
ICAgRHJhZ1Jlc3BvbnNlID0gNjQsCiAgICAgICAgQ2hpbGRJbnNlcnRlZCA9IDcwLAogICAgICAg
IENoaWxkUmVtb3ZlZCA9IDcxLAogICAgICAgIExheW91dEhpbnQgPSA3MiwKICAgICAgICBTaG93
V2luZG93UmVxdWVzdCA9IDczLAogICAgICAgIEFjdGl2YXRlQ29udHJvbCA9IDgwLAogICAgICAg
IERlYWN0aXZhdGVDb250cm9sID0gODEsCiAgICAgICAgVXNlciA9IDEwMDAKICAgIH07CgogICAg
UUV2ZW50KCBUeXBlIHR5cGUgKSA6IHQodHlwZSksIHBvc3RlZChGQUxTRSkge30KICAgIHZpcnR1
YWwgflFFdmVudCgpOwogICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gdDsgfQpwcm90ZWN0
ZWQ6CiAgICBUeXBlIHQ7CnByaXZhdGU6CiAgICBib29sIHBvc3RlZDsKCgoKCiAgICBmcmllbmQg
Y2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247Cn07
CgoKY2xhc3MgUVRpbWVyRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVRpbWVy
RXZlbnQoIGludCB0aW1lcklkICkKICAgICAgICA6IFFFdmVudChUaW1lciksIGlkKHRpbWVySWQp
IHt9CiAgICBpbnQgdGltZXJJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9CnByb3RlY3RlZDoKICAg
IGludCBpZDsKfTsKCgpjbGFzcyBRTW91c2VFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6
CiAgICBRTW91c2VFdmVudCggVHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgaW50IGJ1dHRv
biwgaW50IHN0YXRlICk7CgogICAgUU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVBvaW50
ICZwb3MsIGNvbnN0IFFQb2ludCZnbG9iYWxQb3MsCiAgICAgICAgICAgICAgICAgaW50IGJ1dHRv
biwgaW50IHN0YXRlICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgcChwb3MpLCBnKGdsb2JhbFBv
cyksIGIoYnV0dG9uKSxzKCh1c2hvcnQpc3RhdGUpIHt9OwoKICAgIGNvbnN0IFFQb2ludCAmcG9z
KCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MoKSBjb25z
dCB7IHJldHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBp
bnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsg
cmV0dXJuIGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIGcueSgpOyB9
CiAgICBCdXR0b25TdGF0ZSBidXR0b24oKSBjb25zdCB7IHJldHVybiAoQnV0dG9uU3RhdGUpIGI7
IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gKEJ1dHRvblN0YXRlKSBz
OyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CnByb3RlY3RlZDoKICAgIFFQ
b2ludCBwOwogICAgUVBvaW50IGc7CiAgICBpbnQgYjsKICAgIHVzaG9ydCBzOwp9OwoKCgpjbGFz
cyBRV2hlZWxFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRV2hlZWxFdmVudCgg
Y29uc3QgUVBvaW50ICZwb3MsIGludCBkZWx0YSwgaW50IHN0YXRlICk7CiAgICBRV2hlZWxFdmVu
dCggY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCYgZ2xvYmFsUG9zLCBpbnQgZGVsdGEs
IGludCBzdGF0ZSApCiAgICAgICAgOiBRRXZlbnQoV2hlZWwpLCBwKHBvcyksIGcoZ2xvYmFsUG9z
KSwgZChkZWx0YSksIHMoKHVzaG9ydClzdGF0ZSksCiAgICAgICAgICBhY2NwdChUUlVFKSB7fQog
ICAgaW50IGRlbHRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgY29uc3QgUVBvaW50ICZwb3Mo
KSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0
IHsgcmV0dXJuIGc7IH0KICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gcC54KCk7IH0KICAgIGlu
dCB5KCkgY29uc3QgeyByZXR1cm4gcC55KCk7IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyBy
ZXR1cm4gZy54KCk7IH0KICAgIGludCBnbG9iYWxZKCkgY29uc3QgeyByZXR1cm4gZy55KCk7IH0K
ICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gQnV0dG9uU3RhdGUocyk7IH0K
ICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICB2b2lkIGFj
Y2VwdCgpIHsgYWNjcHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxT
RTsgfQpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50IGQ7CiAg
ICB1c2hvcnQgczsKICAgIGJvb2wgYWNjcHQ7Cn07CgoKY2xhc3MgUUtleUV2ZW50IDogcHVibGlj
IFFFdmVudAp7CnB1YmxpYzoKICAgIFFLZXlFdmVudCggVHlwZSB0eXBlLCBpbnQga2V5LCBpbnQg
YXNjaWksIGludCBzdGF0ZSwKICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRleHQ9UVN0
cmluZzo6bnVsbCwgYm9vbCBhdXRvcmVwPUZBTFNFLCB1c2hvcnQgY291bnQ9MSApCiAgICAgICAg
OiBRRXZlbnQodHlwZSksIHR4dCh0ZXh0KSwgaygodXNob3J0KWtleSksIHMoKHVzaG9ydClzdGF0
ZSksCiAgICAgICAgICAgIGEoKHVjaGFyKWFzY2lpKSwgYWNjcHQoVFJVRSksIGF1dG9yKGF1dG9y
ZXApLCBjKGNvdW50KSB7fQogICAgaW50IGtleSgpIGNvbnN0IHsgcmV0dXJuIGs7IH0KICAgIGlu
dCBhc2NpaSgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29u
c3QgeyByZXR1cm4gQnV0dG9uU3RhdGUocyk7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlQWZ0ZXIo
KSBjb25zdDsKICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAg
ICBRU3RyaW5nIHRleHQoKSBjb25zdCB7IHJldHVybiB0eHQ7IH0KICAgIGJvb2wgaXNBdXRvUmVw
ZWF0KCkgY29uc3QgeyByZXR1cm4gYXV0b3I7IH0KICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0
dXJuIGludChjKTsgfQogICAgdm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9p
ZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KCnByb3RlY3RlZDoKICAgIFFTdHJpbmcgdHh0
OwogICAgdXNob3J0IGssIHM7CiAgICB1Y2hhciBhOwogICAgdWludCBhY2NwdDoxOwogICAgdWlu
dCBhdXRvcjoxOwogICAgdXNob3J0IGM7Cn07CgoKY2xhc3MgUUZvY3VzRXZlbnQgOiBwdWJsaWMg
UUV2ZW50CnsKcHVibGljOgoKICAgIFFGb2N1c0V2ZW50KCBUeXBlIHR5cGUgKQogICAgICAgIDog
UUV2ZW50KHR5cGUpIHt9CgogICAgYm9vbCBnb3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUo
KSA9PSBGb2N1c0luOyB9CiAgICBib29sIGxvc3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUo
KSA9PSBGb2N1c091dDsgfQoKICAgIGVudW0gUmVhc29uIHsgTW91c2UsIFRhYiwgQWN0aXZlV2lu
ZG93LCBQb3B1cCwgU2hvcnRjdXQsIE90aGVyIH07CiAgICBzdGF0aWMgUmVhc29uIHJlYXNvbigp
OwogICAgc3RhdGljIHZvaWQgc2V0UmVhc29uKCBSZWFzb24gcmVhc29uICk7CiAgICBzdGF0aWMg
dm9pZCByZXNldFJlYXNvbigpOwoKcHJpdmF0ZToKICAgIHN0YXRpYyBSZWFzb24gbV9yZWFzb247
CiAgICBzdGF0aWMgUmVhc29uIHByZXZfcmVhc29uOwp9OwoKCmNsYXNzIFFQYWludEV2ZW50IDog
cHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFQYWludEV2ZW50KCBjb25zdCBRUmVnaW9uJiBw
YWludFJlZ2lvbiwgYm9vbCBlcmFzZWQgPSBUUlVFKQogICAgICAgIDogUUV2ZW50KFBhaW50KSwK
ICAgICAgICAgIHJlYyhwYWludFJlZ2lvbi5ib3VuZGluZ1JlY3QoKSksCiAgICAgICAgICByZWco
cGFpbnRSZWdpb24pLAogICAgICAgICAgZXJhc2UoZXJhc2VkKXt9CiAgICBRUGFpbnRFdmVudCgg
Y29uc3QgUVJlY3QgJnBhaW50UmVjdCwgYm9vbCBlcmFzZWQgPSBUUlVFICkKICAgICAgICA6IFFF
dmVudChQYWludCksCiAgICAgICAgICByZWMocGFpbnRSZWN0KSwKICAgICAgICAgIHJlZyhwYWlu
dFJlY3QpLAogICAgICAgICAgZXJhc2UoZXJhc2VkKXt9CiAgICBjb25zdCBRUmVjdCAmcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIHJlYzsgfQogICAgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gcmVnOyB9CiAgICBib29sIGVyYXNlZCgpIGNvbnN0IHsgcmV0dXJuIGVyYXNlOyB9
CnByb3RlY3RlZDoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xh
c3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIFFSZWN0IHJlYzsKICAgIFFSZWdpb24gcmVnOwogICAg
Ym9vbCBlcmFzZTsKfTsKCgpjbGFzcyBRTW92ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1Ymxp
YzoKICAgIFFNb3ZlRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQgJm9sZFBv
cyApCiAgICAgICAgOiBRRXZlbnQoTW92ZSksIHAocG9zKSwgb2xkcChvbGRQb3MpIHt9CiAgICBj
b25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAm
b2xkUG9zKCljb25zdCB7IHJldHVybiBvbGRwO30KcHJvdGVjdGVkOgogICAgUVBvaW50IHAsIG9s
ZHA7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNl
QXBwbGljYXRpb247Cn07CgoKY2xhc3MgUVJlc2l6ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1
YmxpYzoKICAgIFFSZXNpemVFdmVudCggY29uc3QgUVNpemUgJnNpemUsIGNvbnN0IFFTaXplICZv
bGRTaXplICkKICAgICAgICA6IFFFdmVudChSZXNpemUpLCBzKHNpemUpLCBvbGRzKG9sZFNpemUp
IHt9CiAgICBjb25zdCBRU2l6ZSAmc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHM7IH0KICAgIGNvbnN0
IFFTaXplICZvbGRTaXplKCljb25zdCB7IHJldHVybiBvbGRzO30KcHJvdGVjdGVkOgogICAgUVNp
emUgcywgb2xkczsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xh
c3MgUUJhc2VBcHBsaWNhdGlvbjsKfTsKCgpjbGFzcyBRQ2xvc2VFdmVudCA6IHB1YmxpYyBRRXZl
bnQKewpwdWJsaWM6CiAgICBRQ2xvc2VFdmVudCgpCiAgICAgICAgOiBRRXZlbnQoQ2xvc2UpLCBh
Y2NwdChGQUxTRSkge30KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0
OyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgp
IHsgYWNjcHQgPSBGQUxTRTsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIGFjY3B0Owp9OwoKCmNsYXNz
IFFTaG93RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVNob3dFdmVudChib29s
IHNwb250YW5lb3VzKQogICAgICAgIDogUUV2ZW50KFNob3cpLCBzcG9udChzcG9udGFuZW91cykg
e30KICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25zdCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0
ZWQ6CiAgICBib29sIHNwb250Owp9OwoKCmNsYXNzIFFIaWRlRXZlbnQgOiBwdWJsaWMgUUV2ZW50
CnsKcHVibGljOgogICAgUUhpZGVFdmVudChib29sIHNwb250YW5lb3VzKQogICAgICAgIDogUUV2
ZW50KEhpZGUpLCBzcG9udChzcG9udGFuZW91cykge30KICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBj
b25zdCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIHNwb250Owp9OwoKCgoK
CgoKY2xhc3MgUURyb3BFdmVudCA6IHB1YmxpYyBRRXZlbnQsIHB1YmxpYyBRTWltZVNvdXJjZQp7
CnB1YmxpYzoKICAgIFFEcm9wRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBUeXBlIHR5cD1Ecm9w
ICkKICAgICAgICA6IFFFdmVudCh0eXApLCBwKHBvcyksCiAgICAgICAgICBhY3QoMCksIGFjY3B0
KDApLCBhY2NwdGFjdCgwKSwgcmVzdigwKSwKICAgICAgICAgIGQoMCkKICAgICAgICB7fQogICAg
Y29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBib29sIGlzQWNjZXB0
ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdCB8fCBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHQo
Ym9vbCB5PVRSVUUpIHsgYWNjcHQgPSB5OyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBG
QUxTRTsgfQoKICAgIGJvb2wgaXNBY3Rpb25BY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0
YWN0OyB9CiAgICB2b2lkIGFjY2VwdEFjdGlvbihib29sIHk9VFJVRSkgeyBhY2NwdGFjdCA9IHk7
IH0KICAgIGVudW0gQWN0aW9uIHsgQ29weSwgTGluaywgTW92ZSwgUHJpdmF0ZSwgVXNlckFjdGlv
bj0xMDAgfTsKICAgIHZvaWQgc2V0QWN0aW9uKCBBY3Rpb24gYSApIHsgYWN0ID0gKHVpbnQpYTsg
fQogICAgQWN0aW9uIGFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIEFjdGlvbihhY3QpOyB9CgogICAg
UVdpZGdldCogc291cmNlKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBmb3JtYXQoIGludCBuID0g
MCApIGNvbnN0OwogICAgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29uc3QgY2hhciogKSBjb25z
dDsKICAgIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNoYXIqICkgY29uc3Q7CgogICAgUUJ5dGVBcnJh
eSBkYXRhKGNvbnN0IGNoYXIqIGYpIGNvbnN0IHsgcmV0dXJuIGVuY29kZWREYXRhKGYpOyB9Cgog
ICAgdm9pZCBzZXRQb2ludCggY29uc3QgUVBvaW50JiBucCApIHsgcCA9IG5wOyB9Cgpwcm90ZWN0
ZWQ6CiAgICBRUG9pbnQgcDsKICAgIHVpbnQgYWN0Ojg7CiAgICB1aW50IGFjY3B0OjE7CiAgICB1
aW50IGFjY3B0YWN0OjE7CiAgICB1aW50IHJlc3Y6NTsKICAgIHZvaWQgKiBkOwp9OwoKCgpjbGFz
cyBRRHJhZ01vdmVFdmVudCA6IHB1YmxpYyBRRHJvcEV2ZW50CnsKcHVibGljOgogICAgUURyYWdN
b3ZlRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBUeXBlIHR5cD1EcmFnTW92ZSApCiAgICAgICAg
OiBRRHJvcEV2ZW50KHBvcyx0eXApLAogICAgICAgICAgcmVjdCggcG9zLCBRU2l6ZSggMSwgMSAp
ICkge30KICAgIFFSZWN0IGFuc3dlclJlY3QoKSBjb25zdCB7IHJldHVybiByZWN0OyB9CiAgICB2
b2lkIGFjY2VwdCggYm9vbCB5PVRSVUUgKSB7IFFEcm9wRXZlbnQ6OmFjY2VwdCh5KTsgfQogICAg
dm9pZCBhY2NlcHQoIGNvbnN0IFFSZWN0ICYgcikgeyBhY2NwdCA9IFRSVUU7IHJlY3QgPSByOyB9
CiAgICB2b2lkIGlnbm9yZSggY29uc3QgUVJlY3QgJiByKSB7IGFjY3B0ID1GQUxTRTsgcmVjdCA9
IHI7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBRRHJvcEV2ZW50OjppZ25vcmUoKTsgfQoKcHJvdGVj
dGVkOgogICAgUVJlY3QgcmVjdDsKfTsKCgpjbGFzcyBRRHJhZ0VudGVyRXZlbnQgOiBwdWJsaWMg
UURyYWdNb3ZlRXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ0VudGVyRXZlbnQoIGNvbnN0IFFQb2lu
dCYgcG9zICkgOgogICAgICAgIFFEcmFnTW92ZUV2ZW50KHBvcywgRHJhZ0VudGVyKSB7IH0KfTsK
CgoKY2xhc3MgUURyYWdSZXNwb25zZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAg
IFFEcmFnUmVzcG9uc2VFdmVudCggYm9vbCBhY2NlcHRlZCApCiAgICAgICAgOiBRRXZlbnQoRHJh
Z1Jlc3BvbnNlKSwgYShhY2NlcHRlZCkge30KICAgIGJvb2wgZHJhZ0FjY2VwdGVkKCkgY29uc3Qg
eyByZXR1cm4gYTsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIGE7Cn07CgoKY2xhc3MgUURyYWdMZWF2
ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFnTGVhdmVFdmVudCgpCiAg
ICAgICAgOiBRRXZlbnQoRHJhZ0xlYXZlKSB7fQp9OwoKCgpjbGFzcyBRQ2hpbGRFdmVudCA6IHB1
YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRQ2hpbGRFdmVudCggVHlwZSB0eXBlLCBRT2JqZWN0
ICpjaGlsZCApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGMoY2hpbGQpIHt9CiAgICBRT2JqZWN0
ICpjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIGM7IH0KICAgIGJvb2wgaW5zZXJ0ZWQoKSBjb25zdCB7
IHJldHVybiB0ID09IENoaWxkSW5zZXJ0ZWQ7IH0KICAgIGJvb2wgcmVtb3ZlZCgpIGNvbnN0IHsg
cmV0dXJuIHQgPT0gQ2hpbGRSZW1vdmVkOyB9CnByb3RlY3RlZDoKICAgIFFPYmplY3QgKmM7Cn07
CgoKY2xhc3MgUUN1c3RvbUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDdXN0
b21FdmVudCggaW50IHR5cGUgKTsKICAgIFFDdXN0b21FdmVudCggVHlwZSB0eXBlLCB2b2lkICpk
YXRhICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgZChkYXRhKSB7fTsKICAgIHZvaWQgKmRhdGEo
KSBjb25zdCB7IHJldHVybiBkOyB9CiAgICB2b2lkIHNldERhdGEoIHZvaWQqIGRhdGEgKSB7IGQg
PSBkYXRhOyB9CnByaXZhdGU6CiAgICB2b2lkICpkOwp9OwoKY2xhc3MgUUlPRGV2aWNlCnsKcHVi
bGljOgogICAgUUlPRGV2aWNlKCk7CiAgICB2aXJ0dWFsIH5RSU9EZXZpY2UoKTsKCiAgICBpbnQg
ZmxhZ3MoKSBjb25zdCB7IHJldHVybiBpb01vZGU7IH0KICAgIGludCBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gaW9Nb2RlICYgMHgwMGZmOyB9CiAgICBpbnQgc3RhdGUoKSBjb25zdCB7IHJldHVybiBp
b01vZGUgJiAweGYwMDA7IH0KCiAgICBib29sIGlzRGlyZWN0QWNjZXNzKCkgY29uc3QgeyByZXR1
cm4gKChpb01vZGUgJiAweDAxMDApID09IDB4MDEwMCk7IH0KICAgIGJvb2wgaXNTZXF1ZW50aWFs
QWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAyMDApID09IDB4MDIwMCk7IH0K
ICAgIGJvb2wgaXNDb21iaW5lZEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgw
MzAwKSA9PSAweDAzMDApOyB9CiAgICBib29sIGlzQnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiAo
KGlvTW9kZSAmIDB4MDA0MCkgIT0gMHgwMDQwKTsgfQogICAgYm9vbCBpc1JhdygpIGNvbnN0IHsg
cmV0dXJuICgoaW9Nb2RlICYgMHgwMDQwKSA9PSAweDAwNDApOyB9CiAgICBib29sIGlzU3luY2hy
b25vdXMoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA4MCkgIT0gMHgwMDgwKTsgfQog
ICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgw
KSA9PSAweDAwODApOyB9CiAgICBib29sIGlzVHJhbnNsYXRlZCgpIGNvbnN0IHsgcmV0dXJuICgo
aW9Nb2RlICYgMHgwMDEwKSA9PSAweDAwMTApOyB9CiAgICBib29sIGlzUmVhZGFibGUoKSBjb25z
dCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMSkgPT0gMHgwMDAxKTsgfQogICAgYm9vbCBpc1dy
aXRhYmxlKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwMDIpID09IDB4MDAwMik7IH0K
ICAgIGJvb2wgaXNSZWFkV3JpdGUoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMykg
PT0gMHgwMDAzKTsgfQogICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUo
KSA9PSAwOyB9CiAgICBib29sIGlzT3BlbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gMHgx
MDAwOyB9CgogICAgaW50IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIGlvU3Q7IH0KICAgIHZvaWQg
cmVzZXRTdGF0dXMoKSB7IGlvU3QgPSAwOyB9CgogICAgdmlydHVhbCBib29sIG9wZW4oIGludCBt
b2RlICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IGZsdXNoKCkgPSAwOwoKICAgIHZpcnR1YWwgdWludCBzaXplKCkgY29uc3QgPSAwOwogICAgdmly
dHVhbCBpbnQgYXQoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBhdCggaW50ICk7CiAgICB2aXJ0
dWFsIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgcmVzZXQoKSB7IHJldHVybiBhdCgwKTsg
fQoKICAgIHZpcnR1YWwgaW50IHJlYWRCbG9jayggY2hhciAqZGF0YSwgdWludCBtYXhsZW4gKSA9
IDA7CiAgICB2aXJ0dWFsIGludCB3cml0ZUJsb2NrKCBjb25zdCBjaGFyICpkYXRhLCB1aW50IGxl
biApID0gMDsKICAgIHZpcnR1YWwgaW50IHJlYWRMaW5lKCBjaGFyICpkYXRhLCB1aW50IG1heGxl
biApOwogICAgaW50IHdyaXRlQmxvY2soIGNvbnN0IFFCeXRlQXJyYXkmIGRhdGEgKTsKICAgIFFC
eXRlQXJyYXkgcmVhZEFsbCgpOwoKICAgIHZpcnR1YWwgaW50IGdldGNoKCkgPSAwOwogICAgdmly
dHVhbCBpbnQgcHV0Y2goIGludCApID0gMDsKICAgIHZpcnR1YWwgaW50IHVuZ2V0Y2goIGludCAp
ID0gMDsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0RmxhZ3MoIGludCBmICkgeyBpb01vZGUgPSBm
OyB9CiAgICB2b2lkIHNldFR5cGUoIGludCApOwogICAgdm9pZCBzZXRNb2RlKCBpbnQgKTsKICAg
IHZvaWQgc2V0U3RhdGUoIGludCApOwogICAgdm9pZCBzZXRTdGF0dXMoIGludCApOwogICAgaW50
IGlvSW5kZXg7Cgpwcml2YXRlOgogICAgaW50IGlvTW9kZTsKICAgIGludCBpb1N0OwoKcHJpdmF0
ZToKCiAgICBRSU9EZXZpY2UoIGNvbnN0IFFJT0RldmljZSAmICk7CiAgICBRSU9EZXZpY2UgJm9w
ZXJhdG9yPSggY29uc3QgUUlPRGV2aWNlICYgKTsKCn07CgoKCgpjbGFzcyBRRGF0YVN0cmVhbQp7
CnB1YmxpYzoKICAgIFFEYXRhU3RyZWFtKCk7CiAgICBRRGF0YVN0cmVhbSggUUlPRGV2aWNlICog
KTsKICAgIFFEYXRhU3RyZWFtKCBRQnl0ZUFycmF5LCBpbnQgbW9kZSApOwogICAgdmlydHVhbCB+
UURhdGFTdHJlYW0oKTsKCiAgICBRSU9EZXZpY2UgKmRldmljZSgpIGNvbnN0OwogICAgdm9pZCBz
ZXREZXZpY2UoIFFJT0RldmljZSAqICk7CiAgICB2b2lkIHVuc2V0RGV2aWNlKCk7CgogICAgYm9v
bCBhdEVuZCgpIGNvbnN0OwogICAgYm9vbCBlb2YoKSBjb25zdDsKCiAgICBlbnVtIEJ5dGVPcmRl
ciB7IEJpZ0VuZGlhbiwgTGl0dGxlRW5kaWFuIH07CiAgICBpbnQgYnl0ZU9yZGVyKCkgY29uc3Q7
CiAgICB2b2lkIHNldEJ5dGVPcmRlciggaW50ICk7CgogICAgYm9vbCBpc1ByaW50YWJsZURhdGEo
KSBjb25zdDsKICAgIHZvaWQgc2V0UHJpbnRhYmxlRGF0YSggYm9vbCApOwoKICAgIGludCB2ZXJz
aW9uKCkgY29uc3Q7CiAgICB2b2lkIHNldFZlcnNpb24oIGludCApOwoKICAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRX0lOVDggJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
X1VJTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQxNiAmaSApOwog
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDE2ICZpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUV9JTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o
IFFfVUlOVDMyICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ2NCAmaSAp
OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDY0ICZpICk7CgogICAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIGZsb2F0ICZmICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+
PiggZG91YmxlICZmICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggY2hhciAqJnN0ciAp
OwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDggaSApOwogICAgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPDwoIFFfVUlOVDggaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwo
IFFfSU5UMTYgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDE2IGkgKTsK
ICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRX1VJTlQzMiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
UV9JTlQ2NCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UNjQgaSApOwog
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0IGYgKTsKICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBkb3VibGUgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0
IGNoYXIgKnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZyZWFkQnl0ZXMoIGNoYXIgKiYsIHVpbnQg
JmxlbiApOwogICAgUURhdGFTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAqLCB1aW50IGxlbiAp
OwoKICAgIFFEYXRhU3RyZWFtICZ3cml0ZUJ5dGVzKCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7
CiAgICBRRGF0YVN0cmVhbSAmd3JpdGVSYXdCeXRlcyggY29uc3QgY2hhciAqLCB1aW50IGxlbiAp
OwoKcHJpdmF0ZToKICAgIFFJT0RldmljZSAqZGV2OwogICAgYm9vbCBvd25kZXY7CiAgICBpbnQg
Ynl0ZW9yZGVyOwogICAgYm9vbCBwcmludGFibGU7CiAgICBib29sIG5vc3dhcDsKICAgIGludCB2
ZXI7Cgpwcml2YXRlOgoKICAgIFFEYXRhU3RyZWFtKCBjb25zdCBRRGF0YVN0cmVhbSAmICk7CiAg
ICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRRGF0YVN0cmVhbSAmICk7Cgp9OwoKCgoK
CgppbmxpbmUgUUlPRGV2aWNlICpRRGF0YVN0cmVhbTo6ZGV2aWNlKCkgY29uc3QKeyByZXR1cm4g
ZGV2OyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6YXRFbmQoKSBjb25zdAp7IHJldHVybiBk
ZXYgPyBkZXYtPmF0RW5kKCkgOiBUUlVFOyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6ZW9m
KCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6Ynl0
ZU9yZGVyKCkgY29uc3QKeyByZXR1cm4gYnl0ZW9yZGVyOyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0
cmVhbTo6aXNQcmludGFibGVEYXRhKCkgY29uc3QKeyByZXR1cm4gcHJpbnRhYmxlOyB9Cgppbmxp
bmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0UHJpbnRhYmxlRGF0YSggYm9vbCBwICkKeyBwcmludGFi
bGUgPSBwOyB9CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjp2ZXJzaW9uKCkgY29uc3QKeyByZXR1
cm4gdmVyOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0VmVyc2lvbiggaW50IHYgKQp7
IHZlciA9IHY7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4o
IFFfVUlOVDggJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ4JilpOyB9CgppbmxpbmUgUURh
dGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSApCnsgcmV0dXJu
ICp0aGlzID4+IChRX0lOVDE2JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFt
OjpvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDMyJilp
OyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQ2
NCAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDY0JilpOyB9CgppbmxpbmUgUURhdGFTdHJl
YW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQ4IGkgKQp7IHJldHVybiAqdGhpcyA8
PCAoUV9JTlQ4KWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9y
PDwoIFFfVUlOVDE2IGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQxNilpOyB9CgppbmxpbmUg
UURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQzMiBpICkKeyByZXR1
cm4gKnRoaXMgPDwgKFFfSU5UMzIpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVh
bTo6b3BlcmF0b3I8PCggUV9VSU5UNjQgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDY0KWk7
IH0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3ROb2RlCnsKcHVibGlj
OgogICAgUVZhbHVlTGlzdE5vZGUoIGNvbnN0IFQmIHQgKSA6IGRhdGEoIHQgKSB7IH0KICAgIFFW
YWx1ZUxpc3ROb2RlKCkgeyB9CgoKCgoKICAgIFFWYWx1ZUxpc3ROb2RlPFQ+KiBuZXh0OwogICAg
UVZhbHVlTGlzdE5vZGU8VD4qIHByZXY7CiAgICBUIGRhdGE7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBU
PgpjbGFzcyBRVmFsdWVMaXN0SXRlcmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFs
dWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsKCgoKCiAgICBOb2RlUHRyIG5vZGU7CgoKCgogICAgUVZh
bHVlTGlzdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvcigg
Tm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggY29uc3Qg
UVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CgogICAgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyBy
ZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1
ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0K
ICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAg
IFQmIG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKCiAgICBRVmFsdWVMaXN0
SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBvcGVy
YXRvcisrKGludCkgewogICAgICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiB0bXAgPSAqdGhpczsK
ICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQoKICAg
IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3ItLSgpIHsKICAgICAgICBub2RlID0gbm9k
ZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJh
dG9yPFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IHRt
cCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiB0bXA7
CiAgICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0Q29uc3RJdGVyYXRv
cgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2RlUHRyOwoK
CgoKICAgIE5vZGVQdHIgbm9kZTsKCgoKCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcigpIDog
bm9kZSggMCApIHt9CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBu
b2RlKCBwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBjb25zdCBRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQogICAgUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUo
IGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIGNv
bnN0IHsgcmV0dXJuIG5vZGUgIT0gaXQubm9kZTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQoKCgoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPFQ+JiBvcGVyYXRvcisrKCkgewogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBvcGVy
YXRvcisrKGludCkgewogICAgICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0
aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9
CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAg
bm9kZSA9IG5vZGUtPnByZXY7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPnByZXY7
CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBR
VmFsdWVMaXN0UHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkCnsKcHVibGljOgoKCgogICAgdHlwZWRl
ZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2Rl
PFQ+IE5vZGU7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2RlUHRyOwoKCgoKICAg
IFFWYWx1ZUxpc3RQcml2YXRlKCkgeyBub2RlID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2Rl
LT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAwOyB9CiAgICBRVmFsdWVMaXN0UHJpdmF0ZSggY29uc3Qg
UVZhbHVlTGlzdFByaXZhdGU8VD4mIF9wICkgOiBRU2hhcmVkKCkgewogICAgICAgIG5vZGUgPSBu
ZXcgTm9kZTsgbm9kZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOyBub2RlcyA9IDA7CiAgICAg
ICAgSXRlcmF0b3IgYiggX3Aubm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGUoIF9wLm5v
ZGUgKTsKICAgICAgICBJdGVyYXRvciBpKCBub2RlICk7CiAgICAgICAgd2hpbGUoIGIgIT0gZSAp
CiAgICAgICAgICAgIGluc2VydCggaSwgKmIrKyApOwogICAgfQoKICAgIHZvaWQgZGVyZWZBbmRE
ZWxldGUoKQogICAgewogICAgICAgIGlmICggZGVyZWYoKSApCiAgICAgICAgICAgIGRlbGV0ZSB0
aGlzOwogICAgfQoKCgoKCiAgICB+UVZhbHVlTGlzdFByaXZhdGUoKSB7CiAgICAgICAgTm9kZVB0
ciBwID0gbm9kZS0+bmV4dDsKICAgICAgICB3aGlsZSggcCAhPSBub2RlICkgewogICAgICAgICAg
ICBOb2RlUHRyIHggPSBwLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgcDsKICAgICAgICAgICAg
cCA9IHg7CiAgICAgICAgfQogICAgICAgIGRlbGV0ZSBub2RlOwogICAgfQoKICAgIEl0ZXJhdG9y
IGluc2VydCggSXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7CiAgICAgICAgTm9kZVB0ciBwID0g
bmV3IE5vZGUoIHggKTsKICAgICAgICBwLT5uZXh0ID0gaXQubm9kZTsKICAgICAgICBwLT5wcmV2
ID0gaXQubm9kZS0+cHJldjsKICAgICAgICBpdC5ub2RlLT5wcmV2LT5uZXh0ID0gcDsKICAgICAg
ICBpdC5ub2RlLT5wcmV2ID0gcDsKICAgICAgICBub2RlcysrOwogICAgICAgIHJldHVybiBwOwog
ICAgfQoKICAgIEl0ZXJhdG9yIHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7CiAgICAgICAgKChpdC5u
b2RlICE9IG5vZGUpID8gKHZvaWQpMCA6IHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAo
JWQpIiwiaXQubm9kZSAhPSBub2RlIiwiL3Vzci9saWIvcXQyL2luY2x1ZGUvcXZhbHVlbGlzdC5o
IiwyMjYpKTsKICAgICAgICBOb2RlUHRyIG5leHQgPSBpdC5ub2RlLT5uZXh0OwogICAgICAgIE5v
ZGVQdHIgcHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CiAg
ICAgICAgbmV4dC0+cHJldiA9IHByZXY7CiAgICAgICAgZGVsZXRlIGl0Lm5vZGU7CiAgICAgICAg
bm9kZXMtLTsKICAgICAgICByZXR1cm4gSXRlcmF0b3IoIG5leHQgKTsKICAgIH0KCiAgICBOb2Rl
UHRyIGZpbmQoIE5vZGVQdHIgc3RhcnQsIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAgICAgQ29u
c3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5v
ZGUgKTsKICAgICAgICB3aGlsZSggZmlyc3QgIT0gbGFzdCkgewogICAgICAgICAgICBpZiAoICpm
aXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdC5ub2RlOwogICAgICAgICAg
ICArK2ZpcnN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGFzdC5ub2RlOwogICAgfQoKICAg
IGludCBmaW5kSW5kZXgoIE5vZGVQdHIgc3RhcnQsIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAg
ICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGxh
c3QoIG5vZGUgKTsKICAgICAgICBpbnQgcG9zID0gMDsKICAgICAgICB3aGlsZSggZmlyc3QgIT0g
bGFzdCkgewogICAgICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIHJl
dHVybiBwb3M7CiAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgICAgICsrcG9zOwogICAgICAg
IH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgdWludCBjb250YWlucyggY29uc3QgVCYg
eCApIGNvbnN0IHsKICAgICAgICB1aW50IHJlc3VsdCA9IDA7CiAgICAgICAgSXRlcmF0b3IgZmly
c3QgPSBJdGVyYXRvciggbm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGxhc3QgPSBJdGVy
YXRvciggbm9kZSApOwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAg
IGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgICAg
ICsrZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdm9p
ZCByZW1vdmUoIGNvbnN0IFQmIHggKSB7CiAgICAgICAgSXRlcmF0b3IgZmlyc3QgPSBJdGVyYXRv
ciggbm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGxhc3QgPSBJdGVyYXRvciggbm9kZSAp
OwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAgIGlmICggKmZpcnN0
ID09IHggKQogICAgICAgICAgICAgICAgZmlyc3QgPSByZW1vdmUoIGZpcnN0ICk7CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICAgIE5v
ZGVQdHIgYXQoIHVpbnQgaSApIGNvbnN0IHsKICAgICAgICAoKGkgPD0gbm9kZXMpID8gKHZvaWQp
MCA6IHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiaSA8PSBub2RlcyIsIi91
c3IvbGliL3F0Mi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIsMjg0KSk7CiAgICAgICAgTm9kZVB0ciBw
ID0gbm9kZS0+bmV4dDsKICAgICAgICBmb3IoIHVpbnQgeCA9IDA7IHggPCBpOyArK3ggKQogICAg
ICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICB2b2lkIGNs
ZWFyKCkgewogICAgICAgIG5vZGVzID0gMDsKICAgICAgICBOb2RlUHRyIHAgPSBub2RlLT5uZXh0
OwogICAgICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CiAgICAgICAgICAgIE5vZGVQdHIgbmV4dCA9
IHAtPm5leHQ7CiAgICAgICAgICAgIGRlbGV0ZSBwOwogICAgICAgICAgICBwID0gbmV4dDsKICAg
ICAgICB9CiAgICAgICAgbm9kZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOwogICAgfQoKICAg
IE5vZGVQdHIgbm9kZTsKICAgIHVpbnQgbm9kZXM7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xh
c3MgUVZhbHVlTGlzdAp7CnB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9y
PFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBDb25z
dEl0ZXJhdG9yOwogICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKCgoKCiAgICBRVmFsdWVMaXN0KCkg
eyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPjsgfQogICAgUVZhbHVlTGlzdCggY29uc3Qg
UVZhbHVlTGlzdDxUPiYgbCApIHsgc2ggPSBsLnNoOyBzaC0+cmVmKCk7IH0KICAgIH5RVmFsdWVM
aXN0KCkgeyBzaC0+ZGVyZWZBbmREZWxldGUoKTsgfQoKICAgIFFWYWx1ZUxpc3Q8VD4mIG9wZXJh
dG9yPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQogICAgewogICAgICAgIGwuc2gtPnJlZigp
OwogICAgICAgIHNoLT5kZXJlZkFuZERlbGV0ZSgpOwogICAgICAgIHNoID0gbC5zaDsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdDxUPiBvcGVyYXRvcisgKCBjb25z
dCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKICAgIHsKICAgICAgICBRVmFsdWVMaXN0PFQ+IGwy
KCAqdGhpcyApOwogICAgICAgIGZvciggQ29uc3RJdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsgaXQg
IT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgICAgIGwyLmFwcGVuZCggKml0ICk7CiAgICAgICAg
cmV0dXJuIGwyOwogICAgfQoKICAgIFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yKz0gKCBjb25zdCBR
VmFsdWVMaXN0PFQ+JiBsICkKICAgIHsKICAgICAgICBmb3IoIENvbnN0SXRlcmF0b3IgaXQgPSBs
LmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQogICAgICAgICAgICBhcHBlbmQoICppdCAp
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBib29sIG9wZXJhdG9yPT0gKCBjb25z
dCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKICAgIHsKICAgICAgICBpZiAoIGNvdW50KCkgIT0g
bC5jb3VudCgpICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIENvbnN0SXRlcmF0
b3IgaXQyID0gYmVnaW4oKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOwog
ICAgICAgIGZvciggOyBpdCAhPSBsLmVuZCgpOyArK2l0LCArK2l0MiApCiAgICAgICAgICAgIGlm
ICggISggKml0ID09ICppdDIgKSApCiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAg
ICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9ICggY29uc3QgUVZhbHVl
TGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IGwgKTsgfQoKICAgIEl0ZXJh
dG9yIGJlZ2luKCkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZS0+bmV4dCAp
OyB9CiAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRv
ciggc2gtPm5vZGUtPm5leHQgKTsgfQogICAgSXRlcmF0b3IgZW5kKCkgeyBkZXRhY2goKTsgcmV0
dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZSApOyB9CiAgICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIEl0ZXJhdG9yIGZyb21M
YXN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZS0+cHJldiApOyB9CiAg
ICBDb25zdEl0ZXJhdG9yIGZyb21MYXN0KCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvcigg
c2gtPm5vZGUtPnByZXYgKTsgfQoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICgg
c2gtPm5vZGVzID09IDAgKTsgfQoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRlcmF0b3IgaXQsIGNv
bnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmluc2VydCggaXQsIHggKTsgfQoKICAg
IEl0ZXJhdG9yIGFwcGVuZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5z
ZXJ0KCBlbmQoKSwgeCApOyB9CiAgICBJdGVyYXRvciBwcmVwZW5kKCBjb25zdCBUJiB4ICkgeyBk
ZXRhY2goKTsgcmV0dXJuIHNoLT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQoKICAgIEl0ZXJhdG9y
IHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPnJlbW92ZSggaXQg
KTsgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyBzaC0+cmVtb3Zl
KCB4ICk7IH0KCiAgICBUJiBmaXJzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+bmV4
dC0+ZGF0YTsgfQogICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZS0+
bmV4dC0+ZGF0YTsgfQogICAgVCYgbGFzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+
cHJldi0+ZGF0YTsgfQogICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2Rl
LT5wcmV2LT5kYXRhOyB9CgogICAgVCYgb3BlcmF0b3JbXSAoIHVpbnQgaSApIHsgZGV0YWNoKCk7
IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yW10gKCB1aW50
IGkgKSBjb25zdCB7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIEl0ZXJhdG9yIGF0KCB1
aW50IGkgKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5hdChpKSApOyB9CiAgICBD
b25zdEl0ZXJhdG9yIGF0KCB1aW50IGkgKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBz
aC0+YXQoaSkgKTsgfQogICAgSXRlcmF0b3IgZmluZCAoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp
OyByZXR1cm4gSXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkgKTsgfQogICAg
Q29uc3RJdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRl
cmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkgKTsgfQogICAgSXRlcmF0b3IgZmlu
ZCAoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9y
KCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZmluZCAoIENv
bnN0SXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9y
KCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIGludCBmaW5kSW5kZXgoIGNvbnN0IFQm
IHggKSBjb25zdCB7IHJldHVybiBzaC0+ZmluZEluZGV4KCBzaC0+bm9kZS0+bmV4dCwgeCkgOyB9
CiAgICB1aW50IGNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gc2gtPmNvbnRh
aW5zKCB4ICk7IH0KCiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGVzOyB9
CgogICAgdm9pZCBjbGVhcigpIHsgaWYgKCBzaC0+Y291bnQgPT0gMSApIHNoLT5jbGVhcigpOyBl
bHNlIHsgc2gtPmRlcmVmKCk7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9IH0KCgog
ICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAg
IGFwcGVuZCggeCApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIFFWYWx1ZUxpc3Q8
VD4mIG9wZXJhdG9yPDwgKCBjb25zdCBUJiB4ICkKICAgIHsKICAgICAgICBhcHBlbmQoIHggKTsK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKcHJvdGVjdGVkOgoKCgogICAgdm9pZCBkZXRh
Y2goKSB7IGlmICggc2gtPmNvdW50ID4gMSApIHsgc2gtPmRlcmVmKCk7IHNoID0gbmV3IFFWYWx1
ZUxpc3RQcml2YXRlPFQ+KCAqc2ggKTsgfSB9CgoKCgogICAgUVZhbHVlTGlzdFByaXZhdGU8VD4q
IHNoOwp9OwoKCnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+
PiggUURhdGFTdHJlYW0mIHMsIFFWYWx1ZUxpc3Q8VD4mIGwgKQp7CiAgICBsLmNsZWFyKCk7CiAg
ICBRX1VJTlQzMiBjOwogICAgcyA+PiBjOwogICAgZm9yKCBRX1VJTlQzMiBpID0gMDsgaSA8IGM7
ICsraSApCiAgICB7CiAgICAgICAgVCB0OwogICAgICAgIHMgPj4gdDsKICAgICAgICBsLmFwcGVu
ZCggdCApOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSBR
RGF0YVN0cmVhbSYgb3BlcmF0b3I8PCggUURhdGFTdHJlYW0mIHMsIGNvbnN0IFFWYWx1ZUxpc3Q8
VD4mIGwgKQp7CiAgICBzIDw8IChRX1VJTlQzMilsLmNvdW50KCk7CiAgICBRVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxUPiBpdCA9IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAhPSBsLmVuZCgpOyAr
K2l0ICkKICAgICAgICBzIDw8ICppdDsKICAgIHJldHVybiBzOwp9CgpjbGFzcyBRUmVnRXhwCnsK
cHVibGljOgogICAgUVJlZ0V4cCgpOwogICAgUVJlZ0V4cCggY29uc3QgUVN0cmluZyAmLCBib29s
IGNhc2VTZW5zaXRpdmU9VFJVRSwgYm9vbCB3aWxkY2FyZD1GQUxTRSApOwogICAgUVJlZ0V4cCgg
Y29uc3QgUVJlZ0V4cCAmICk7CiAgIH5RUmVnRXhwKCk7CiAgICBRUmVnRXhwICZvcGVyYXRvcj0o
IGNvbnN0IFFSZWdFeHAgJiApOwogICAgUVJlZ0V4cCAmb3BlcmF0b3I9KCBjb25zdCBRU3RyaW5n
ICZwYXR0ZXJuICk7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVnRXhwICYgKSBjb25z
dDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJlZ0V4cCAmciApIGNvbnN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9y
PT0ocikpOyB9CgogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gcnhkYXRhID09IDA7
IH0KICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGVycm9yID09IDA7IH0KCiAgICBi
b29sIGNhc2VTZW5zaXRpdmUoKSBjb25zdCB7IHJldHVybiBjczsgfQogICAgdm9pZCBzZXRDYXNl
U2Vuc2l0aXZlKCBib29sICk7CgogICAgYm9vbCB3aWxkY2FyZCgpIGNvbnN0IHsgcmV0dXJuIHdj
OyB9CiAgICB2b2lkIHNldFdpbGRjYXJkKCBib29sICk7CgogICAgUVN0cmluZyBwYXR0ZXJuKCkg
Y29uc3QgeyByZXR1cm4gcnhzdHJpbmc7IH0KCiAgICB2b2lkIHNldFBhdHRlcm4oIGNvbnN0IFFT
dHJpbmcmIHBhdHRlcm4gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBvcGVyYXRvcj0oIHBhdHRlcm4gKTsgfQoKICAgIGludCBtYXRjaCggY29uc3QgUVN0cmluZyAm
c3RyLCBpbnQgaW5kZXg9MCwgaW50ICpsZW49MCwKICAgICAgICAgICAgICAgICAgICAgICBib29s
IGluZGV4SXNTdGFydCA9IFRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRU3RyaW5n
JiBzdHIsIGludCBpbmRleCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IHJldHVybiBtYXRjaCggc3RyLCBpbmRleCApOyB9Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGNv
bXBpbGUoKTsKICAgIGNvbnN0IFFDaGFyICptYXRjaHN0ciggdWludCAqLCBjb25zdCBRQ2hhciAq
LCB1aW50LCBjb25zdCBRQ2hhciAqICkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVN0cmluZyByeHN0
cmluZzsKICAgIHVpbnQgKnJ4ZGF0YTsKICAgIGludCBlcnJvcjsKICAgIGJvb2wgY3M7CiAgICBi
b29sIHdjOwp9OwoKCgoKY2xhc3MgUVN0ckxpc3Q7CgpjbGFzcyBRU3RyaW5nTGlzdCA6IHB1Ymxp
YyBRVmFsdWVMaXN0PFFTdHJpbmc+CnsKcHVibGljOgogICAgUVN0cmluZ0xpc3QoKSB7IH0KICAg
IFFTdHJpbmdMaXN0KCBjb25zdCBRU3RyaW5nTGlzdCYgbCApIDogUVZhbHVlTGlzdDxRU3RyaW5n
PihsKSB7IH0KICAgIFFTdHJpbmdMaXN0KCBjb25zdCBRVmFsdWVMaXN0PFFTdHJpbmc+JiBsICkg
OiBRVmFsdWVMaXN0PFFTdHJpbmc+KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJp
bmcmIGkgKSB7IGFwcGVuZChpKTsgfQoKICAgIFFTdHJpbmdMaXN0KCBjb25zdCBjaGFyKiBpICkg
eyBhcHBlbmQoaSk7IH0KCgogICAgc3RhdGljIFFTdHJpbmdMaXN0IGZyb21TdHJMaXN0KGNvbnN0
IFFTdHJMaXN0Jik7CgogICAgdm9pZCBzb3J0KCk7CgogICAgc3RhdGljIFFTdHJpbmdMaXN0IHNw
bGl0KCBjb25zdCBRU3RyaW5nICZzZXAsIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0Vt
cHR5RW50cmllcyA9IEZBTFNFICk7CiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0
IFFDaGFyICZzZXAsIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9
IEZBTFNFICk7CiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFSZWdFeHAgJnNl
cCwgY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsK
ICAgIFFTdHJpbmcgam9pbiggY29uc3QgUVN0cmluZyAmc2VwICkgY29uc3Q7CgogICAgUVN0cmlu
Z0xpc3QgZ3JlcCggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzID0gVFJVRSApIGNvbnN0Owog
ICAgUVN0cmluZ0xpc3QgZ3JlcCggY29uc3QgUVJlZ0V4cCAmZXhwciApIGNvbnN0Owp9OwoKCmNs
YXNzIFFEYXRhU3RyZWFtOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3Ry
ZWFtICYsIFFTdHJpbmdMaXN0JiApOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFE
YXRhU3RyZWFtICYsIGNvbnN0IFFTdHJpbmdMaXN0JiApOwoKCgoKCmNsYXNzIFFNZXRhT2JqZWN0
OwpjbGFzcyBRVmFyaWFudDsKCgoKY2xhc3MgUU9iamVjdDogcHVibGljIFF0CnsKICAgCgpwdWJs
aWM6CiAgICBRT2JqZWN0KCBRT2JqZWN0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqbmFtZT0wICk7
CiAgICB2aXJ0dWFsIH5RT2JqZWN0KCk7CgogICAgc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNo
YXIgKiApOwogICAgc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
ICk7CgogICAgdmlydHVhbCBib29sIGV2ZW50KCBRRXZlbnQgKiApOwogICAgdmlydHVhbCBib29s
IGV2ZW50RmlsdGVyKCBRT2JqZWN0ICosIFFFdmVudCAqICk7CgogICAgdmlydHVhbCBRTWV0YU9i
amVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfQog
ICAgdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsKCiAgICBib29sIGlzQSgg
Y29uc3QgY2hhciAqICkgY29uc3Q7CiAgICBib29sIGluaGVyaXRzKCBjb25zdCBjaGFyICogKSBj
b25zdDsKCiAgICBjb25zdCBjaGFyICpuYW1lKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpuYW1l
KCBjb25zdCBjaGFyICogZGVmYXVsdE5hbWUgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0
TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwogICAgYm9vbCBpc1dpZGdldFR5cGUoKSBjb25zdCB7
IHJldHVybiBpc1dpZGdldDsgfQogICAgYm9vbCBoaWdoUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biBGQUxTRTsgfQoKICAgIGJvb2wgc2lnbmFsc0Jsb2NrZWQoKSBjb25zdCB7IHJldHVybiBibG9j
a1NpZzsgfQogICAgdm9pZCBibG9ja1NpZ25hbHMoIGJvb2wgYiApOwoKICAgIGludCBzdGFydFRp
bWVyKCBpbnQgaW50ZXJ2YWwgKTsKICAgIHZvaWQga2lsbFRpbWVyKCBpbnQgaWQgKTsKICAgIHZv
aWQga2lsbFRpbWVycygpOwoKICAgIFFPYmplY3QgKmNoaWxkKCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBjaGFyICp0eXBlID0gMCApOwogICAgY29uc3QgUU9iamVjdExpc3QgKmNoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gY2hpbGRPYmplY3RzOyB9CgogICAgc3RhdGljIGNvbnN0IFFPYmplY3RM
aXN0ICpvYmplY3RUcmVlcygpOwoKCiAgICBRT2JqZWN0TGlzdCAqcXVlcnlMaXN0KCBjb25zdCBj
aGFyICppbmhlcml0c0NsYXNzID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKm9iak5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZWdleHBNYXRjaCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHJlY3Vyc2l2ZVNlYXJjaCA9IFRSVUUgKTsKCiAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0Q2hpbGQoIFFPYmplY3QgKiApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKCBRT2Jq
ZWN0ICogKTsKCiAgICB2b2lkIGluc3RhbGxFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7
CiAgICB2b2lkIHJlbW92ZUV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKCiAgICBzdGF0
aWMgYm9vbCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25h
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29u
c3QgY2hhciAqbWVtYmVyICk7CiAgICBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRl
ciwgY29uc3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKm1lbWJlciApIGNvbnN0OwogICAgc3RhdGljIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9i
amVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAg
Ym9vbCBkaXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWduYWw9MCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlcj0wLCBjb25zdCBjaGFyICptZW1iZXI9
MCApOwogICAgYm9vbCBkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3Qg
Y2hhciAqbWVtYmVyPTAgKTsKCiAgICB2b2lkIGR1bXBPYmplY3RUcmVlKCk7CiAgICB2b2lkIGR1
bXBPYmplY3RJbmZvKCk7CgoKICAgIGJvb2wgc2V0UHJvcGVydHkoIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IFFWYXJpYW50JiB2YWx1ZSApOwogICAgUVZhcmlhbnQgcHJvcGVydHkoIGNvbnN0IGNo
YXIgKm5hbWUgKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRlc3Ryb3llZCgpOwoKcHVi
bGljOgogICAgUU9iamVjdCAqcGFyZW50KCkgY29uc3QgeyByZXR1cm4gcGFyZW50T2JqOyB9Cgpw
cml2YXRlIDoKICAgIHZvaWQgY2xlYW51cEV2ZW50RmlsdGVyKCk7Cgpwcm90ZWN0ZWQ6CiAgICBi
b29sIGFjdGl2YXRlX2ZpbHRlcnMoIFFFdmVudCAqICk7CiAgICBRQ29ubmVjdGlvbkxpc3QgKnJl
Y2VpdmVycyggY29uc3QgY2hhciAqc2lnbmFsICkgY29uc3Q7CiAgICB2b2lkIGFjdGl2YXRlX3Np
Z25hbCggY29uc3QgY2hhciAqc2lnbmFsICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggY29u
c3QgY2hhciAqc2lnbmFsLCBzaG9ydCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0
IGNoYXIgKnNpZ25hbCwgaW50ICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hh
ciAqc2lnbmFsLCBsb25nICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hhciAq
c2lnbmFsLCBjb25zdCBjaGFyICogKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX2Jvb2woIGNv
bnN0IGNoYXIgKnNpZ25hbCwgYm9vbCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWxfc3RyaW5n
KCBjb25zdCBjaGFyICpzaWduYWwsIFFTdHJpbmcgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFs
X3N0cnJlZiggY29uc3QgY2hhciAqc2lnbmFsLCBjb25zdCBRU3RyaW5nICYgKTsKCiAgICBjb25z
dCBRT2JqZWN0ICpzZW5kZXIoKTsKCgogICAgdmlydHVhbCB2b2lkIGluaXRNZXRhT2JqZWN0KCk7
CiAgICBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsKCiAgICB2aXJ0dWFs
IHZvaWQgdGltZXJFdmVudCggUVRpbWVyRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGNoaWxk
RXZlbnQoIFFDaGlsZEV2ZW50ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdE5vdGlmeSgg
Y29uc3QgY2hhciAqc2lnbmFsICk7CiAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdE5vdGlmeSgg
Y29uc3QgY2hhciAqc2lnbmFsICk7CiAgICB2aXJ0dWFsIGJvb2wgY2hlY2tDb25uZWN0QXJncygg
Y29uc3QgY2hhciAqc2lnbmFsLCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIHN0YXRpYyBR
Q1N0cmluZyBub3JtYWxpemVTaWduYWxTbG90KCBjb25zdCBjaGFyICpzaWduYWxTbG90ICk7Cgog
ICAgc3RhdGljIHZvaWQgYmFkU3VwZXJjbGFzc1dhcm5pbmcoIGNvbnN0IGNoYXIgKmNsYXNzTmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3Vw
ZXJjbGFzc05hbWUgKTsKCnByaXZhdGU6CiAgICB1aW50IGlzU2lnbmFsIDogMTsKICAgIHVpbnQg
aXNXaWRnZXQgOiAxOwogICAgdWludCBwZW5kVGltZXIgOiAxOwogICAgdWludCBwZW5kRXZlbnQg
OiAxOwogICAgdWludCBibG9ja1NpZyA6IDE7CiAgICB1aW50IHdhc0RlbGV0ZWQgOiAxOwogICAg
dWludCBpc1RyZWUgOiAxOwoKICAgIFFNZXRhT2JqZWN0ICpxdWVyeU1ldGFPYmplY3QoKSBjb25z
dDsKICAgIHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgIGNvbnN0IGNoYXIgKm9iam5h
bWU7CiAgICBRT2JqZWN0ICpwYXJlbnRPYmo7CiAgICBRT2JqZWN0TGlzdCAqY2hpbGRPYmplY3Rz
OwogICAgUVNpZ25hbERpY3QgKmNvbm5lY3Rpb25zOwogICAgUU9iamVjdExpc3QgKnNlbmRlck9i
amVjdHM7CiAgICBRT2JqZWN0TGlzdCAqZXZlbnRGaWx0ZXJzOwoKCiAgICBRT2JqZWN0ICpzaWdT
ZW5kZXI7CgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBR
QmFzZUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xh
c3MgUVNpZ25hbDsKICAgIGZyaWVuZCBjbGFzcyBRU2VuZGVyT2JqZWN0OwoKcHJpdmF0ZToKCiAg
ICBRT2JqZWN0KCBjb25zdCBRT2JqZWN0ICYgKTsKICAgIFFPYmplY3QgJm9wZXJhdG9yPSggY29u
c3QgUU9iamVjdCAmICk7CgoKcHVibGljOgoKCiAgICBRU3RyaW5nTGlzdCBzdXBlckNsYXNzZXMo
IGJvb2wgaW5jbHVkZVRoaXMgPSBGQUxTRSApIGNvbnN0OwoKfTsKCgoKaW5saW5lIGJvb2wgUU9i
amVjdDo6Y29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciApIGNvbnN0
CnsKICAgIHJldHVybiBjb25uZWN0KCBzZW5kZXIsIHNpZ25hbCwgdGhpcywgbWVtYmVyICk7Cn0K
CmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNv
bnN0IGNoYXIgKm1lbWJlciApCnsKICAgIHJldHVybiBkaXNjb25uZWN0KCB0aGlzLCBzaWduYWws
IHJlY2VpdmVyLCBtZW1iZXIgKTsKfQoKaW5saW5lIGJvb2wgUU9iamVjdDo6ZGlzY29ubmVjdCgg
Y29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApCnsKICAgIHJldHVy
biBkaXNjb25uZWN0KCB0aGlzLCAwLCByZWNlaXZlciwgbWVtYmVyICk7Cn0KCmlubGluZSBjb25z
dCBRT2JqZWN0ICpRT2JqZWN0OjpzZW5kZXIoKQp7CiAgICByZXR1cm4gc2lnU2VuZGVyOwp9CgoK
Y2xhc3MgUVNlbmRlck9iamVjdCA6IHB1YmxpYyBRT2JqZWN0CnsKcHVibGljOgogICAgdm9pZCBz
ZXRTZW5kZXIoIFFPYmplY3QgKnMgKSB7IHNpZ1NlbmRlcj1zOyB9Cn07CmNsYXNzIFFJT0Rldmlj
ZTsKY2xhc3MgUVN0cmluZzsKCgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGE7CgoKdW5pb24g
UVBEZXZDbWRQYXJhbSB7CiAgICBpbnQgaXZhbDsKICAgIGludCAqaXZlYzsKICAgIFFTdHJpbmcg
KnN0cjsKICAgIGNvbnN0IFFQb2ludCAqcG9pbnQ7CiAgICBjb25zdCBRUmVjdCAqcmVjdDsKICAg
IGNvbnN0IFFQb2ludEFycmF5ICpwdGFycjsKICAgIGNvbnN0IFFQaXhtYXAgKnBpeG1hcDsKICAg
IGNvbnN0IFFJbWFnZSAqaW1hZ2U7CiAgICBjb25zdCBRQ29sb3IgKmNvbG9yOwogICAgY29uc3Qg
UUZvbnQgKmZvbnQ7CiAgICBjb25zdCBRUGVuICpwZW47CiAgICBjb25zdCBRQnJ1c2ggKmJydXNo
OwogICAgY29uc3QgUVJlZ2lvbiAqcmduOwogICAgY29uc3QgUVdNYXRyaXggKm1hdHJpeDsKICAg
IFFJT0RldmljZSAqZGV2aWNlOwp9OwoKCgpjbGFzcyBRUGFpbnREZXZpY2UKewpwdWJsaWM6CiAg
ICB2aXJ0dWFsIH5RUGFpbnREZXZpY2UoKTsKCiAgICBpbnQgZGV2VHlwZSgpIGNvbnN0OwogICAg
Ym9vbCBpc0V4dERldigpIGNvbnN0OwogICAgYm9vbCBwYWludGluZ0FjdGl2ZSgpIGNvbnN0OwoK
CgoKCgogICAgSEFORExFIGhhbmRsZSgpIGNvbnN0OwoKCgoKCgoKICAgIERpc3BsYXkgKngxMURp
c3BsYXkoKSBjb25zdDsKICAgIGludCB4MTFTY3JlZW4oKSBjb25zdDsKICAgIGludCB4MTFEZXB0
aCgpIGNvbnN0OwogICAgaW50IHgxMUNlbGxzKCkgY29uc3Q7CiAgICBIQU5ETEUgeDExQ29sb3Jt
YXAoKSBjb25zdDsKICAgIGJvb2wgeDExRGVmYXVsdENvbG9ybWFwKCkgY29uc3Q7CiAgICB2b2lk
ICp4MTFWaXN1YWwoKSBjb25zdDsKICAgIGJvb2wgeDExRGVmYXVsdFZpc3VhbCgpIGNvbnN0OwoK
ICAgIHN0YXRpYyBEaXNwbGF5ICp4MTFBcHBEaXNwbGF5KCk7CiAgICBzdGF0aWMgaW50IHgxMUFw
cFNjcmVlbigpOwogICAgc3RhdGljIGludCB4MTFBcHBEZXB0aCgpOwogICAgc3RhdGljIGludCB4
MTFBcHBDZWxscygpOwogICAgc3RhdGljIGludCB4MTFBcHBEcGlYKCk7CiAgICBzdGF0aWMgaW50
IHgxMUFwcERwaVkoKTsKICAgIHN0YXRpYyBIQU5ETEUgeDExQXBwQ29sb3JtYXAoKTsKICAgIHN0
YXRpYyBib29sIHgxMUFwcERlZmF1bHRDb2xvcm1hcCgpOwogICAgc3RhdGljIHZvaWQgKngxMUFw
cFZpc3VhbCgpOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwogICAgc3Rh
dGljIHZvaWQgeDExU2V0QXBwRHBpWChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBp
WShpbnQpOwogICAgZW51bSBQRGV2Q21kIHsKICAgICAgICBQZGNOT1AgPSAwLAogICAgICAgIFBk
Y0RyYXdQb2ludCA9IDEsCiAgICAgICAgUGRjRHJhd0ZpcnN0ID0gUGRjRHJhd1BvaW50LAogICAg
ICAgIFBkY01vdmVUbyA9IDIsCiAgICAgICAgUGRjTGluZVRvID0gMywKICAgICAgICBQZGNEcmF3
TGluZSA9IDQsCiAgICAgICAgUGRjRHJhd1JlY3QgPSA1LAogICAgICAgIFBkY0RyYXdSb3VuZFJl
Y3QgPSA2LAogICAgICAgIFBkY0RyYXdFbGxpcHNlID0gNywKICAgICAgICBQZGNEcmF3QXJjID0g
OCwKICAgICAgICBQZGNEcmF3UGllID0gOSwKICAgICAgICBQZGNEcmF3Q2hvcmQgPSAxMCwKICAg
ICAgICBQZGNEcmF3TGluZVNlZ21lbnRzID0gMTEsCiAgICAgICAgUGRjRHJhd1BvbHlsaW5lID0g
MTIsCiAgICAgICAgUGRjRHJhd1BvbHlnb24gPSAxMywKICAgICAgICBQZGNEcmF3UXVhZEJlemll
ciA9IDE0LAogICAgICAgIFBkY0RyYXdUZXh0ID0gMTUsCiAgICAgICAgUGRjRHJhd1RleHRGb3Jt
YXR0ZWQgPSAxNiwKICAgICAgICBQZGNEcmF3UGl4bWFwID0gMTcsCiAgICAgICAgUGRjRHJhd0lt
YWdlID0gMTgsCiAgICAgICAgUGRjRHJhd1RleHQyID0gMTksCiAgICAgICAgUGRjRHJhd1RleHQy
Rm9ybWF0dGVkID0gMjAsCiAgICAgICAgUGRjRHJhd0xhc3QgPSBQZGNEcmF3VGV4dDJGb3JtYXR0
ZWQsCgoKCiAgICAgICAgUGRjQmVnaW4gPSAzMCwKICAgICAgICBQZGNFbmQgPSAzMSwKICAgICAg
ICBQZGNTYXZlID0gMzIsCiAgICAgICAgUGRjUmVzdG9yZSA9IDMzLAogICAgICAgIFBkY1NldGRl
diA9IDM0LAogICAgICAgIFBkY1NldEJrQ29sb3IgPSA0MCwKICAgICAgICBQZGNTZXRCa01vZGUg
PSA0MSwKICAgICAgICBQZGNTZXRST1AgPSA0MiwKICAgICAgICBQZGNTZXRCcnVzaE9yaWdpbiA9
IDQzLAogICAgICAgIFBkY1NldEZvbnQgPSA0NSwKICAgICAgICBQZGNTZXRQZW4gPSA0NiwKICAg
ICAgICBQZGNTZXRCcnVzaCA9IDQ3LAogICAgICAgIFBkY1NldFRhYlN0b3BzID0gNDgsCiAgICAg
ICAgUGRjU2V0VGFiQXJyYXkgPSA0OSwKICAgICAgICBQZGNTZXRVbml0ID0gNTAsCiAgICAgICAg
UGRjU2V0Vlhmb3JtID0gNTEsCiAgICAgICAgUGRjU2V0V2luZG93ID0gNTIsCiAgICAgICAgUGRj
U2V0Vmlld3BvcnQgPSA1MywKICAgICAgICBQZGNTZXRXWGZvcm0gPSA1NCwKICAgICAgICBQZGNT
ZXRXTWF0cml4ID0gNTUsCiAgICAgICAgUGRjU2F2ZVdNYXRyaXggPSA1NiwKICAgICAgICBQZGNS
ZXN0b3JlV01hdHJpeCA9IDU3LAogICAgICAgIFBkY1NldENsaXAgPSA2MCwKICAgICAgICBQZGNT
ZXRDbGlwUmVnaW9uID0gNjEsCgogICAgICAgIFBkY1Jlc2VydmVkU3RhcnQgPSAwLAogICAgICAg
IFBkY1Jlc2VydmVkU3RvcCA9IDE5OQogICAgfTsKCnByb3RlY3RlZDoKICAgIFFQYWludERldmlj
ZSggdWludCBkZXZmbGFncyApOwoKCgoKICAgIEhBTkRMRSBoZDsKICAgIHZvaWQgY29weVgxMURh
dGEoIGNvbnN0IFFQYWludERldmljZSAqICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0WDExRGF0YSgg
Y29uc3QgUVBhaW50RGV2aWNlWDExRGF0YSogKTsKICAgIFFQYWludERldmljZVgxMURhdGEqIGdl
dFgxMURhdGEoIGJvb2wgZGVmPUZBTFNFICkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29s
IGNtZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICogKTsKICAgIHZpcnR1YWwgaW50
IG1ldHJpYyggaW50ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBmb250TWV0KCBRRm9udCAqLCBp
bnQsIGNvbnN0IGNoYXIgKiA9IDAsIGludCA9IDAgKSBjb25zdDsKICAgIHZpcnR1YWwgaW50IGZv
bnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9ydCBkZXZGbGFnczsKICAgIHVz
aG9ydCBwYWludGVyczsKCiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xh
c3MgUVBhaW50RGV2aWNlTWV0cmljczsKICAgIGZyaWVuZCB2b2lkIGJpdEJsdCggUVBhaW50RGV2
aWNlICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
UGFpbnREZXZpY2UgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQs
IGludCwgaW50LCBRdDo6UmFzdGVyT3AsIGJvb2wgKTsKCiAgICBmcmllbmQgdm9pZCBxdF9pbml0
X2ludGVybmFsKCBpbnQgKiwgY2hhciAqKiwgRGlzcGxheSAqICk7CgoKcHJpdmF0ZToKCiAgICBz
dGF0aWMgRGlzcGxheSAqeF9hcHBkaXNwbGF5OwogICAgc3RhdGljIGludCB4X2FwcHNjcmVlbjsK
ICAgIHN0YXRpYyBpbnQgeF9hcHBkZXB0aDsKICAgIHN0YXRpYyBpbnQgeF9hcHBjZWxsczsKICAg
IHN0YXRpYyBIQU5ETEUgeF9hcHBjb2xvcm1hcDsKICAgIHN0YXRpYyBib29sIHhfYXBwZGVmY29s
b3JtYXA7CiAgICBzdGF0aWMgdm9pZCAqeF9hcHB2aXN1YWw7CiAgICBzdGF0aWMgYm9vbCB4X2Fw
cGRlZnZpc3VhbDsKCiAgICBRUGFpbnREZXZpY2VYMTFEYXRhKiB4MTFEYXRhOwoKCnByaXZhdGU6
CgogICAgUVBhaW50RGV2aWNlKCBjb25zdCBRUGFpbnREZXZpY2UgJiApOwogICAgUVBhaW50RGV2
aWNlICZvcGVyYXRvcj0oIGNvbnN0IFFQYWludERldmljZSAmICk7Cgp9OwoKCgp2b2lkIGJpdEJs
dCggUVBhaW50RGV2aWNlICpkc3QsIGludCBkeCwgaW50IGR5LAogICAgICAgICAgICAgY29uc3Qg
UVBhaW50RGV2aWNlICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50IHN3PS0xLCBpbnQgc2g9
LTEsCiAgICAgICAgICAgICBRdDo6UmFzdGVyT3AgPSBRdDo6Q29weVJPUCwgYm9vbCBpZ25vcmVN
YXNrPUZBTFNFICk7CgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0LCBpbnQgZHgsIGlu
dCBkeSwKICAgICAgICAgICAgIGNvbnN0IFFJbWFnZSAqc3JjLCBpbnQgc3g9MCwgaW50IHN5PTAs
IGludCBzdz0tMSwgaW50IHNoPS0xLAogICAgICAgICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3M9
MCApOwoKCgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGEgewogICAgRGlzcGxheSogeF9kaXNw
bGF5OwogICAgaW50IHhfc2NyZWVuOwogICAgaW50IHhfZGVwdGg7CiAgICBpbnQgeF9jZWxsczsK
ICAgIEhBTkRMRSB4X2NvbG9ybWFwOwogICAgYm9vbCB4X2RlZmNvbG9ybWFwOwogICAgdm9pZCog
eF92aXN1YWw7CiAgICBib29sIHhfZGVmdmlzdWFsOwp9OwoKCgoKCgoKaW5saW5lIGludCBRUGFp
bnREZXZpY2U6OmRldlR5cGUoKSBjb25zdAp7IHJldHVybiBkZXZGbGFncyAmIFFJbnRlcm5hbDo6
RGV2aWNlVHlwZU1hc2s7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6aXNFeHREZXYoKSBj
b25zdAp7IHJldHVybiAoZGV2RmxhZ3MgJiBRSW50ZXJuYWw6OkV4dGVybmFsRGV2aWNlKSAhPSAw
OyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OnBhaW50aW5nQWN0aXZlKCkgY29uc3QKeyBy
ZXR1cm4gcGFpbnRlcnMgIT0gMDsgfQoKCgoKaW5saW5lIEhBTkRMRSBRUGFpbnREZXZpY2U6Omhh
bmRsZSgpIGNvbnN0IHsgcmV0dXJuIGhkOyB9CgoKCmlubGluZSBEaXNwbGF5ICpRUGFpbnREZXZp
Y2U6OngxMURpc3BsYXkoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kaXNw
bGF5IDogeF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExU2NyZWVu
KCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfc2NyZWVuIDogeF9hcHBzY3Jl
ZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFEZXB0aCgpIGNvbnN0CnsgcmV0dXJu
IHgxMURhdGEgPyB4MTFEYXRhLT54X2RlcHRoIDogeF9hcHBkZXB0aDsgfQoKaW5saW5lIGludCBR
UGFpbnREZXZpY2U6OngxMUNlbGxzKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEt
PnhfY2VsbHMgOiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgSEFORExFIFFQYWludERldmljZTo6eDEx
Q29sb3JtYXAoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9jb2xvcm1hcCA6
IHhfYXBwY29sb3JtYXA7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExRGVmYXVsdENv
bG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfZGVmY29sb3JtYXAg
OiB4X2FwcGRlZmNvbG9ybWFwOyB9CgppbmxpbmUgdm9pZCAqUVBhaW50RGV2aWNlOjp4MTFWaXN1
YWwoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF92aXN1YWwgOiB4X2FwcHZp
c3VhbDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFEZWZhdWx0VmlzdWFsKCkgY29u
c3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfZGVmdmlzdWFsIDogeF9hcHBkZWZ2aXN1
YWw7IH0KCmlubGluZSBEaXNwbGF5ICpRUGFpbnREZXZpY2U6OngxMUFwcERpc3BsYXkoKQp7IHJl
dHVybiB4X2FwcGRpc3BsYXk7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBTY3Jl
ZW4oKQp7IHJldHVybiB4X2FwcHNjcmVlbjsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6Ongx
MUFwcERlcHRoKCkKeyByZXR1cm4geF9hcHBkZXB0aDsgfQoKaW5saW5lIGludCBRUGFpbnREZXZp
Y2U6OngxMUFwcENlbGxzKCkKeyByZXR1cm4geF9hcHBjZWxsczsgfQoKaW5saW5lIEhBTkRMRSBR
UGFpbnREZXZpY2U6OngxMUFwcENvbG9ybWFwKCkKeyByZXR1cm4geF9hcHBjb2xvcm1hcDsgfQoK
aW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0Q29sb3JtYXAoKQp7IHJldHVy
biB4X2FwcGRlZmNvbG9ybWFwOyB9CgppbmxpbmUgdm9pZCAqUVBhaW50RGV2aWNlOjp4MTFBcHBW
aXN1YWwoKQp7IHJldHVybiB4X2FwcHZpc3VhbDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNl
Ojp4MTFBcHBEZWZhdWx0VmlzdWFsKCkKeyByZXR1cm4geF9hcHBkZWZ2aXN1YWw7IH0KCgoKCmlu
bGluZSB2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGNvbnN0IFFQb2ludCAmZHAsCiAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICpzcmMsIGNvbnN0IFFSZWN0ICZz
ciA9UVJlY3QoMCwwLC0xLC0xKSwKICAgICAgICAgICAgICAgICAgICBRdDo6UmFzdGVyT3Agcm9w
PVF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9RkFMU0UgKQp7CiAgICBiaXRCbHQoIGRzdCwg
ZHAueCgpLCBkcC55KCksIHNyYywgc3IueCgpLCBzci55KCksIHNyLndpZHRoKCksIHNyLmhlaWdo
dCgpLAogICAgICAgICAgICByb3AsIGlnbm9yZU1hc2sgKTsKfQpjb25zdCBRUmdiIFJHQl9ESVJU
WSA9IDB4ODAwMDAwMDA7CmNvbnN0IFFSZ2IgUkdCX0lOVkFMSUQgPSAweDQwMDAwMDAwOwpjb25z
dCBRUmdiIFJHQl9ESVJFQ1QgPSAweDIwMDAwMDAwOwpjb25zdCBRUmdiIFJHQl9NQVNLID0gMHgw
MGZmZmZmZjsKCgogaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKChy
Z2IgPj4gMTYpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmVlbiggUVJnYiByZ2IgKQp7IHJl
dHVybiAoaW50KSgocmdiID4+IDgpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFCbHVlKCBRUmdi
IHJnYiApCnsgcmV0dXJuIChpbnQpKHJnYiAmIDB4ZmYpOyB9CgogaW5saW5lIGludCBxQWxwaGEo
IFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiAyNCkgJiAweGZmKTsgfQoKIGlubGlu
ZSBRUmdiIHFSZ2IoIGludCByLCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAoMHhmZiA8PCAyNCkg
fCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAweGZmKSA8PCA4KSB8IChiICYgMHhmZik7IH0K
CiBpbmxpbmUgUVJnYiBxUmdiYSggaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEgKQp7IHJldHVy
biAoKGEgJiAweGZmKSA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAweGZmKSA8
PCA4KSB8IChiICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmF5KCBpbnQgciwgaW50IGcsIGlu
dCBiICkKeyByZXR1cm4gKHIqMTErZyoxNitiKjUpLzMyOyB9CgogaW5saW5lIGludCBxR3JheSgg
UVJnYiByZ2IgKQp7IHJldHVybiBxR3JheSggcVJlZChyZ2IpLCBxR3JlZW4ocmdiKSwgcUJsdWUo
cmdiKSApOyB9CgoKY2xhc3MgUUNvbG9yCnsKcHVibGljOgogICAgZW51bSBTcGVjIHsgUmdiLCBI
c3YgfTsKCiAgICBRQ29sb3IoKTsKICAgIFFDb2xvciggaW50IHIsIGludCBnLCBpbnQgYiApOwog
ICAgUUNvbG9yKCBpbnQgeCwgaW50IHksIGludCB6LCBTcGVjICk7CiAgICBRQ29sb3IoIFFSZ2Ig
cmdiLCB1aW50IHBpeGVsPTB4ZmZmZmZmZmYpOwogICAgUUNvbG9yKCBjb25zdCBRU3RyaW5nJiBu
YW1lICk7CiAgICBRQ29sb3IoIGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIFFDb2xvciggY29uc3Qg
UUNvbG9yICYgKTsKICAgIFFDb2xvciAmb3BlcmF0b3I9KCBjb25zdCBRQ29sb3IgJiApOwoKICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CgogICAgUVN0
cmluZyBuYW1lKCkgY29uc3Q7CiAgICB2b2lkIHNldE5hbWVkQ29sb3IoIGNvbnN0IFFTdHJpbmcm
IG5hbWUgKTsKCiAgICB2b2lkIHJnYiggaW50ICpyLCBpbnQgKmcsIGludCAqYiApIGNvbnN0Owog
ICAgUVJnYiByZ2IoKSBjb25zdDsKICAgIHZvaWQgc2V0UmdiKCBpbnQgciwgaW50IGcsIGludCBi
ICk7CiAgICB2b2lkIHNldFJnYiggUVJnYiByZ2IgKTsKCiAgICBpbnQgcmVkKCkgY29uc3Q7CiAg
ICBpbnQgZ3JlZW4oKSBjb25zdDsKICAgIGludCBibHVlKCkgY29uc3Q7CgogICAgdm9pZCBoc3Yo
IGludCAqaCwgaW50ICpzLCBpbnQgKnYgKSBjb25zdDsKICAgIHZvaWQgZ2V0SHN2KCBpbnQgJmgs
IGludCAmcywgaW50ICZ2ICkgY29uc3Q7CiAgICB2b2lkIHNldEhzdiggaW50IGgsIGludCBzLCBp
bnQgdiApOwoKICAgIFFDb2xvciBsaWdodCggaW50IGYgPSAxNTAgKSBjb25zdDsKICAgIFFDb2xv
ciBkYXJrKCBpbnQgZiA9IDIwMCApIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg
UUNvbG9yICZjICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDb2xvciAmYyAp
IGNvbnN0OwoKICAgIHN0YXRpYyBib29sIGxhenlBbGxvYygpOwogICAgc3RhdGljIHZvaWQgc2V0
TGF6eUFsbG9jKCBib29sICk7CiAgICB1aW50IGFsbG9jKCk7CiAgICB1aW50IHBpeGVsKCkgY29u
c3Q7CgogICAgc3RhdGljIGludCBtYXhDb2xvcnMoKTsKICAgIHN0YXRpYyBpbnQgbnVtQml0UGxh
bmVzKCk7CgogICAgc3RhdGljIGludCBlbnRlckFsbG9jQ29udGV4dCgpOwogICAgc3RhdGljIHZv
aWQgbGVhdmVBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRpYyBpbnQgY3VycmVudEFsbG9jQ29udGV4
dCgpOwogICAgc3RhdGljIHZvaWQgZGVzdHJveUFsbG9jQ29udGV4dCggaW50ICk7CgoKCgoKCiAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7Cgpw
cml2YXRlOgogICAgdm9pZCBzZXRTeXN0ZW1OYW1lZENvbG9yKCBjb25zdCBRU3RyaW5nJiBuYW1l
ICk7CiAgICBzdGF0aWMgdm9pZCBpbml0R2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgUUNvbG9y
KiBnbG9iYWxDb2xvcnMoKTsKICAgIHN0YXRpYyBib29sIGNvbG9yX2luaXQ7CiAgICBzdGF0aWMg
Ym9vbCBnbG9iYWxzX2luaXQ7CiAgICBzdGF0aWMgYm9vbCBsYXp5X2FsbG9jOwoKCgogICAgdWlu
dCBwaXg7CiAgICBRUmdiIHJnYlZhbDsKfTsKCgppbmxpbmUgUUNvbG9yOjpRQ29sb3IoKQp7IHJn
YlZhbCA9IFJHQl9JTlZBTElEOyBwaXggPSAwOyB9CgppbmxpbmUgUUNvbG9yOjpRQ29sb3IoIGlu
dCByLCBpbnQgZywgaW50IGIgKQp7IHNldFJnYiggciwgZywgYiApOyB9CgppbmxpbmUgYm9vbCBR
Q29sb3I6OmlzVmFsaWQoKSBjb25zdAp7IHJldHVybiAocmdiVmFsICYgUkdCX0lOVkFMSUQpID09
IDA7IH0KCmlubGluZSBib29sIFFDb2xvcjo6aXNEaXJ0eSgpIGNvbnN0CnsgcmV0dXJuIChyZ2JW
YWwgJiBSR0JfRElSVFkpICE9IDA7IH0KCmlubGluZSBRUmdiIFFDb2xvcjo6cmdiKCkgY29uc3QK
eyByZXR1cm4gcmdiVmFsIHwgflJHQl9NQVNLOyB9CgppbmxpbmUgaW50IFFDb2xvcjo6cmVkKCkg
Y29uc3QKeyByZXR1cm4gcVJlZChyZ2JWYWwpOyB9CgppbmxpbmUgaW50IFFDb2xvcjo6Z3JlZW4o
KSBjb25zdAp7IHJldHVybiBxR3JlZW4ocmdiVmFsKTsgfQoKaW5saW5lIGludCBRQ29sb3I6OmJs
dWUoKSBjb25zdAp7IHJldHVybiBxQmx1ZShyZ2JWYWwpOyB9CgppbmxpbmUgdWludCBRQ29sb3I6
OnBpeGVsKCkgY29uc3QKeyByZXR1cm4gKHJnYlZhbCAmIFJHQl9ESVJUWSkgPT0gMCA/IHBpeCA6
ICgoUUNvbG9yKil0aGlzKS0+YWxsb2MoKTsgfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpsYXp5QWxs
b2MoKQp7IHJldHVybiBsYXp5X2FsbG9jOyB9CgoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRv
cj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAgICByZXR1cm4gaXNWYWxpZCgpPT1jLmlz
VmFsaWQoKSAmJgogICAgICAgICgoKChyZ2JWYWwgfCBjLnJnYlZhbCkgJiBSR0JfRElSRUNUKSA9
PSAwICYmCiAgICAgICAgICAgIChyZ2JWYWwgJiBSR0JfTUFTSykgPT0gKGMucmdiVmFsICYgUkdC
X01BU0spKSB8fAogICAgICAgICAgICgocmdiVmFsICYgYy5yZ2JWYWwgJiBSR0JfRElSRUNUKSAh
PSAwICYmCiAgICAgICAgICAgIChyZ2JWYWwgJiBSR0JfTUFTSykgPT0gKGMucmdiVmFsICYgUkdC
X01BU0spICYmIHBpeCA9PSBjLnBpeCkpOwp9CgppbmxpbmUgYm9vbCBRQ29sb3I6Om9wZXJhdG9y
IT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0CnsKICAgIHJldHVybiAhb3BlcmF0b3I9PShjKTsK
fQoKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBR
Q29sb3IgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDb2xv
ciAmICk7CgpjbGFzcyBRQnJ1c2g6IHB1YmxpYyBRdAp7CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsK
cHVibGljOgogICAgUUJydXNoKCk7CiAgICBRQnJ1c2goIEJydXNoU3R5bGUgKTsKICAgIFFCcnVz
aCggY29uc3QgUUNvbG9yICYsIEJydXNoU3R5bGU9U29saWRQYXR0ZXJuICk7CiAgICBRQnJ1c2go
IGNvbnN0IFFDb2xvciAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgIFFCcnVzaCggY29uc3QgUUJy
dXNoICYgKTsKICAgflFCcnVzaCgpOwogICAgUUJydXNoICZvcGVyYXRvcj0oIGNvbnN0IFFCcnVz
aCAmICk7CgogICAgQnJ1c2hTdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0eWxl
OyB9CiAgICB2b2lkIHNldFN0eWxlKCBCcnVzaFN0eWxlICk7CiAgICBjb25zdCBRQ29sb3IgJmNv
bG9yKCljb25zdCB7IHJldHVybiBkYXRhLT5jb2xvcjsgfQogICAgdm9pZCBzZXRDb2xvciggY29u
c3QgUUNvbG9yICYgKTsKICAgIFFQaXhtYXAgKnBpeG1hcCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEt
PnBpeG1hcDsgfQogICAgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUUJydXNoICZwICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9y
IT0oIGNvbnN0IFFCcnVzaCAmYiApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0oYikpOyB9Cgpwcml2YXRlOgogICAgUUJy
dXNoIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CiAgICB2b2lkIGluaXQoIGNvbnN0
IFFDb2xvciAmLCBCcnVzaFN0eWxlICk7CiAgICBzdHJ1Y3QgUUJydXNoRGF0YSA6IHB1YmxpYyBR
U2hhcmVkIHsKICAgICAgICBCcnVzaFN0eWxlIHN0eWxlOwogICAgICAgIFFDb2xvciBjb2xvcjsK
ICAgICAgICBRUGl4bWFwICpwaXhtYXA7CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnJ1c2ggJiApOwogUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFCcnVzaCAmICk7CgoKCmNsYXNzIFFD
b2xvckdyb3VwUHJpdmF0ZTsKCgpjbGFzcyBRQ29sb3JHcm91cAp7CnB1YmxpYzoKICAgIFFDb2xv
ckdyb3VwKCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yICZmb3JlZ3JvdW5kLCBjb25z
dCBRQ29sb3IgJmJ1dHRvbiwKICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3IgJmxpZ2h0LCBj
b25zdCBRQ29sb3IgJmRhcmssIGNvbnN0IFFDb2xvciAmbWlkLAogICAgICAgICAgICAgICAgIGNv
bnN0IFFDb2xvciAmdGV4dCwgY29uc3QgUUNvbG9yICZiYXNlICk7CiAgICBRQ29sb3JHcm91cCgg
Y29uc3QgUUJydXNoICZmb3JlZ3JvdW5kLCBjb25zdCBRQnJ1c2ggJmJ1dHRvbiwKICAgICAgICAg
ICAgICAgICBjb25zdCBRQnJ1c2ggJmxpZ2h0LCBjb25zdCBRQnJ1c2ggJmRhcmssIGNvbnN0IFFC
cnVzaCAmbWlkLAogICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAmdGV4dCwgY29uc3QgUUJy
dXNoICZicmlnaHRfdGV4dCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggJmJhc2UsIGNv
bnN0IFFCcnVzaCAmYmFja2dyb3VuZCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yR3Jv
dXAgJiApOwoKICAgflFDb2xvckdyb3VwKCk7CgogICAgUUNvbG9yR3JvdXAmIG9wZXJhdG9yID0o
Y29uc3QgUUNvbG9yR3JvdXAmKTsKCgogICAgZW51bSBDb2xvclJvbGUgeyBGb3JlZ3JvdW5kLCBC
dXR0b24sIExpZ2h0LCBNaWRsaWdodCwgRGFyaywgTWlkLAogICAgICAgICAgICAgICAgICAgICBU
ZXh0LCBCcmlnaHRUZXh0LCBCdXR0b25UZXh0LCBCYXNlLCBCYWNrZ3JvdW5kLCBTaGFkb3csCiAg
ICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodCwgSGlnaGxpZ2h0ZWRUZXh0LAogICAgICAgICAg
ICAgICAgICAgICBOQ29sb3JSb2xlcyB9OwoKICAgIGNvbnN0IFFDb2xvciAmY29sb3IoIENvbG9y
Um9sZSApIGNvbnN0OwogICAgY29uc3QgUUJydXNoICZicnVzaCggQ29sb3JSb2xlICkgY29uc3Q7
CiAgICB2b2lkIHNldENvbG9yKCBDb2xvclJvbGUsIGNvbnN0IFFDb2xvciAmICk7CiAgICB2b2lk
IHNldEJydXNoKCBDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgY29uc3QgUUNvbG9y
ICZmb3JlZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbRm9yZWdyb3VuZF0uY29sb3IoKTsgfQog
ICAgY29uc3QgUUNvbG9yICZidXR0b24oKSBjb25zdCB7IHJldHVybiBicltCdXR0b25dLmNvbG9y
KCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbGlnaHQoKSBjb25zdCB7IHJldHVybiBicltMaWdodF0u
Y29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZkYXJrKCkgY29uc3QgeyByZXR1cm4gYnJbRGFy
a10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZtaWQoKSBjb25zdCB7IHJldHVybiBicltN
aWRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmdGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJy
W1RleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGJyW0Jhc2VdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYmFja2dyb3VuZCgpIGNvbnN0
IHsgcmV0dXJuIGJyW0JhY2tncm91bmRdLmNvbG9yKCk7IH0KCiAgICBjb25zdCBRQ29sb3IgJm1p
ZGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJbTWlkbGlnaHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0
IFFDb2xvciAmYnJpZ2h0VGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJyW0JyaWdodFRleHRdLmNvbG9y
KCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYnV0dG9uVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJyW0J1
dHRvblRleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmc2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gYnJbU2hhZG93XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmhpZ2hsaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGJyW0hpZ2hsaWdodF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9y
ICZoaWdobGlnaHRlZFRleHQoKSBjb25zdHtyZXR1cm4gYnJbSGlnaGxpZ2h0ZWRUZXh0XS5jb2xv
cigpOyB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0
OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gIShvcGVyYXRvcj09KGcpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCAqYnI7
CiAgICBRQ29sb3JHcm91cFByaXZhdGUgKiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRUGFsZXR0ZTsK
fTsKCgpjbGFzcyBRUGFsZXR0ZQp7CnB1YmxpYzoKICAgIFFQYWxldHRlKCk7CiAgICBRUGFsZXR0
ZSggY29uc3QgUUNvbG9yICZidXR0b24gKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3IgJmJ1
dHRvbiwgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNv
bG9yR3JvdXAgJmFjdGl2ZSwgY29uc3QgUUNvbG9yR3JvdXAgJmRpc2FibGVkLAogICAgICAgICAg
ICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFQ
YWxldHRlICYgKTsKICAgflFQYWxldHRlKCk7CiAgICBRUGFsZXR0ZSAmb3BlcmF0b3I9KCBjb25z
dCBRUGFsZXR0ZSAmICk7CgogICAgZW51bSBDb2xvckdyb3VwIHsgTm9ybWFsLCBEaXNhYmxlZCwg
QWN0aXZlLCBJbmFjdGl2ZSwgTkNvbG9yR3JvdXBzIH07CgogICAgY29uc3QgUUNvbG9yICZjb2xv
ciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0OwogICAgY29uc3Qg
UUJydXNoICZicnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0
OwogICAgdm9pZCBzZXRDb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwg
Y29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yR3JvdXAsIFFDb2xvckdy
b3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgdm9pZCBzZXRDb2xvciggUUNv
bG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2go
IFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgUVBhbGV0dGUg
Y29weSgpIGNvbnN0OwoKICAgIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUoKSBjb25zdCB7IHJl
dHVybiBkYXRhLT5hY3RpdmU7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZkaXNhYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIGRhdGEtPmRpc2FibGVkOyB9CiAgICBjb25zdCBRQ29sb3JHcm91cCAmaW5h
Y3RpdmUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5pbmFjdGl2ZTsgfQogICAgY29uc3QgUUNvbG9y
R3JvdXAgJm5vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPm5vcm1hbDsgfQoKICAgIHZvaWQg
c2V0QWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNldERpc2FibGVkKCBj
b25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNldEluYWN0aXZlKCBjb25zdCBRQ29sb3JH
cm91cCAmICk7CiAgICB2b2lkIHNldE5vcm1hbCggY29uc3QgUUNvbG9yR3JvdXAgJiApOwoKICAg
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBhbGV0dGUgJnAgKSBjb25zdDsKICAgIGJvb2wgb3Bl
cmF0b3IhPSggY29uc3QgUVBhbGV0dGUgJnAgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KHApKTsgfQogICAgYm9vbCBp
c0NvcHlPZiggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGludCBzZXJpYWxOdW1iZXIoKSBjb25z
dCB7IHJldHVybiBkYXRhLT5zZXJfbm87IH0KCnByaXZhdGU6CiAgICB2b2lkIGRldGFjaCgpOwog
ICAgUUJydXNoICZkaXJlY3RCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9s
ZSApIGNvbnN0OwoKICAgIHN0cnVjdCBRUGFsRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgICAg
ICBRQ29sb3JHcm91cCBub3JtYWw7CiAgICAgICAgUUNvbG9yR3JvdXAgZGlzYWJsZWQ7CiAgICAg
ICAgUUNvbG9yR3JvdXAgYWN0aXZlOwogICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUNvbG9y
R3JvdXAgaW5hY3RpdmU7CiAgICB9ICpkYXRhOwogICAgc3RhdGljIFFQYWxEYXRhICpkZWZQYWxE
YXRhOwogICAgc3RhdGljIHZvaWQgY2xlYW51cERlZlBhbCgpOwp9OwoKCgoKCgoKIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9yR3JvdXAgJiApOwoK
IFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGFsZXR0ZSAm
ICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBhbGV0dGUgJiAp
OwpzdHJ1Y3QgUUN1cnNvckRhdGE7CgoKY2xhc3MgUUN1cnNvcgp7CnB1YmxpYzoKICAgIFFDdXJz
b3IoKTsKICAgIFFDdXJzb3IoIGludCBzaGFwZSApOwogICAgUUN1cnNvciggY29uc3QgUUJpdG1h
cCAmYml0bWFwLCBjb25zdCBRQml0bWFwICZtYXNrLAogICAgICAgICAgICAgaW50IGhvdFg9LTEs
IGludCBob3RZPS0xICk7CiAgICBRQ3Vyc29yKCBjb25zdCBRUGl4bWFwICZwaXhtYXAsCiAgICAg
ICAgICAgICBpbnQgaG90WD0tMSwgaW50IGhvdFk9LTEgKTsKICAgIFFDdXJzb3IoIGNvbnN0IFFD
dXJzb3IgJiApOwogICB+UUN1cnNvcigpOwogICAgUUN1cnNvciAmb3BlcmF0b3I9KCBjb25zdCBR
Q3Vyc29yICYgKTsKCiAgICBpbnQgc2hhcGUoKSBjb25zdDsKICAgIHZvaWQgc2V0U2hhcGUoIGlu
dCApOwoKICAgIGNvbnN0IFFCaXRtYXAgKmJpdG1hcCgpIGNvbnN0OwogICAgY29uc3QgUUJpdG1h
cCAqbWFzaygpIGNvbnN0OwogICAgUVBvaW50IGhvdFNwb3QoKSBjb25zdDsKCgoKCiAgICBIQU5E
TEUgaGFuZGxlKCkgY29uc3Q7CgoKCgoKCiAgICBzdGF0aWMgUVBvaW50IHBvcygpOwogICAgc3Rh
dGljIHZvaWQgc2V0UG9zKCBpbnQgeCwgaW50IHkgKTsKICAgIHN0YXRpYyB2b2lkIHNldFBvcygg
Y29uc3QgUVBvaW50ICYgKTsKCiAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0
aWMgdm9pZCBjbGVhbnVwKCk7Cgpwcml2YXRlOgogICAgdm9pZCBzZXRCaXRtYXAoIGNvbnN0IFFC
aXRtYXAgJmJpdG1hcCwgY29uc3QgUUJpdG1hcCAmbWFzaywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGhvdFgsIGludCBob3RZICk7CiAgICB2b2lkIHVwZGF0ZSgpIGNvbnN0
OwogICAgUUN1cnNvckRhdGEgKmRhdGE7CiAgICBRQ3Vyc29yICpmaW5kX2N1cihpbnQpOwp9Owpl
bnVtIFFDdXJzb3JTaGFwZSB7CiAgICBBcnJvd0N1cnNvciwgVXBBcnJvd0N1cnNvciwgQ3Jvc3ND
dXJzb3IsIFdhaXRDdXJzb3IsIEliZWFtQ3Vyc29yLAogICAgU2l6ZVZlckN1cnNvciwgU2l6ZUhv
ckN1cnNvciwgU2l6ZUJEaWFnQ3Vyc29yLCBTaXplRkRpYWdDdXJzb3IsCiAgICBTaXplQWxsQ3Vy
c29yLCBCbGFua0N1cnNvciwgU3BsaXRWQ3Vyc29yLCBTcGxpdEhDdXJzb3IsIFBvaW50aW5nSGFu
ZEN1cnNvciwKICAgIEZvcmJpZGRlbkN1cnNvciwgTGFzdEN1cnNvciA9IEZvcmJpZGRlbkN1cnNv
ciwgQml0bWFwQ3Vyc29yPTI0IH07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURh
dGFTdHJlYW0gJiwgY29uc3QgUUN1cnNvciAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+Pigg
UURhdGFTdHJlYW0gJiwgUUN1cnNvciAmICk7CgoKCgppbmxpbmUgdm9pZCBRQ3Vyc29yOjpzZXRQ
b3MoIGNvbnN0IFFQb2ludCAmcCApCnsKICAgIHNldFBvcyggcC54KCksIHAueSgpICk7Cn0KY2xh
c3MgUVN0cmluZ0xpc3Q7CnN0cnVjdCBRRm9udERlZjsKc3RydWN0IFFGb250RGF0YTsKY2xhc3Mg
UUZvbnRJbnRlcm5hbDsKY2xhc3MgUVJlbmRlcmVkRm9udDsKCmNsYXNzIFFGb250CnsKcHVibGlj
OgogICAgZW51bSBDaGFyU2V0IHsgSVNPXzg4NTlfMSwgTGF0aW4xID0gSVNPXzg4NTlfMSwgQW55
Q2hhclNldCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMiwgTGF0aW4yID0gSVNPXzg4
NTlfMiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMywgTGF0aW4zID0gSVNPXzg4NTlf
MywKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNCwgTGF0aW40ID0gSVNPXzg4NTlfNCwK
ICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNSwKICAgICAgICAgICAgICAgICAgICAgSVNP
Xzg4NTlfNiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNywKICAgICAgICAgICAgICAg
ICAgICAgSVNPXzg4NTlfOCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfOSwgTGF0aW41
ID0gSVNPXzg4NTlfOSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMTAsIExhdGluNiA9
IElTT184ODU5XzEwLAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8xMSwgVElTNjIwID0g
SVNPXzg4NTlfMTEsCiAgICAgICAgICAgICAgICAgICAgIElTT184ODU5XzEyLAogICAgICAgICAg
ICAgICAgICAgICBJU09fODg1OV8xMywgTGF0aW43ID0gSVNPXzg4NTlfMTMsCiAgICAgICAgICAg
ICAgICAgICAgIElTT184ODU5XzE0LCBMYXRpbjggPSBJU09fODg1OV8xNCwKICAgICAgICAgICAg
ICAgICAgICAgSVNPXzg4NTlfMTUsIExhdGluOSA9IElTT184ODU5XzE1LAogICAgICAgICAgICAg
ICAgICAgICBLT0k4UiwKICAgICAgICAgICAgICAgICAgICAgU2V0X0phLCBTZXRfMSA9IFNldF9K
YSwKICAgICAgICAgICAgICAgICAgICAgU2V0X0tvLAogICAgICAgICAgICAgICAgICAgICBTZXRf
VGhfVEgsCiAgICAgICAgICAgICAgICAgICAgIFNldF9aaCwKICAgICAgICAgICAgICAgICAgICAg
U2V0X1poX1RXLAogICAgICAgICAgICAgICAgICAgICBTZXRfTiA9IFNldF9aaF9UVywKICAgICAg
ICAgICAgICAgICAgICAgVW5pY29kZSwKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgU2V0X0dC
SywKICAgICAgICAgICAgICAgICAgICAgU2V0X0JpZzUsCgogICAgICAgICAgICAgICAgICAgICBU
U0NJSSwKICAgICAgICAgICAgICAgICAgICAgS09JOFUsCiAgICAgICAgICAgICAgICAgICAgIENQ
MTI1MSwKICAgICAgICAgICAgICAgICAgICAgUFQxNTQsCgoKCgogICAgICAgICAgICAgICAgICAg
ICBKSVNfWF8wMjAxID0gMHhhMCwKCiAgICAgICAgICAgICAgICAgICAgIEpJU19YXzAyMDggPSAw
eGMwLCBFbmMxNiA9IEpJU19YXzAyMDgsCiAgICAgICAgICAgICAgICAgICAgIEtTQ181NjAxLAog
ICAgICAgICAgICAgICAgICAgICBHQl8yMzEyLAogICAgICAgICAgICAgICAgICAgICBCaWc1CiAg
ICB9OwogICAgZW51bSBTdHlsZUhpbnQgeyBIZWx2ZXRpY2EsIFRpbWVzLCBDb3VyaWVyLCBPbGRF
bmdsaXNoLCBTeXN0ZW0sIEFueVN0eWxlLAogICAgICAgICAgICAgICAgICAgICBTYW5zU2VyaWYg
PSBIZWx2ZXRpY2EsCiAgICAgICAgICAgICAgICAgICAgIFNlcmlmID0gVGltZXMsCiAgICAgICAg
ICAgICAgICAgICAgIFR5cGVXcml0ZXIgPSBDb3VyaWVyLAogICAgICAgICAgICAgICAgICAgICBE
ZWNvcmF0aXZlID0gT2xkRW5nbGlzaH07CiAgICBlbnVtIFN0eWxlU3RyYXRlZ3kgeyBQcmVmZXJE
ZWZhdWx0ID0gMHgwMDAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlckJpdG1hcCA9
IDB4MDAwMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJEZXZpY2UgPSAweDAwMDQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyT3V0bGluZSA9IDB4MDAwOCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBGb3JjZU91dGxpbmUgPSAweDAwMTAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgUHJlZmVyTWF0Y2ggPSAweDAwMjAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgUHJlZmVyUXVhbGl0eSA9IDB4MDA0MCB9OwogICAgZW51bSBXZWlnaHQgeyBMaWdodCA9IDI1
LCBOb3JtYWwgPSA1MCwgRGVtaUJvbGQgPSA2MywKICAgICAgICAgICAgICAgICAgICAgQm9sZCA9
IDc1LCBCbGFjayA9IDg3IH07CiAgICBRRm9udCgpOwogICAgUUZvbnQoIGNvbnN0IFFTdHJpbmcg
JmZhbWlseSwgaW50IHBvaW50U2l6ZSA9IDEyLAogICAgICAgICAgIGludCB3ZWlnaHQgPSBOb3Jt
YWwsIGJvb2wgaXRhbGljID0gRkFMU0UgKTsKICAgIFFGb250KCBjb25zdCBRU3RyaW5nICZmYW1p
bHksIGludCBwb2ludFNpemUsCiAgICAgICAgICAgaW50IHdlaWdodCwgYm9vbCBpdGFsaWMsIENo
YXJTZXQgY2hhclNldCApOwogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsKICAgIH5RRm9udCgp
OwogICAgUUZvbnQgJm9wZXJhdG9yPSggY29uc3QgUUZvbnQgJiApOwoKICAgIFFTdHJpbmcgZmFt
aWx5KCkgY29uc3Q7CiAgICB2b2lkIHNldEZhbWlseSggY29uc3QgUVN0cmluZyAmKTsKICAgIGlu
dCBwb2ludFNpemUoKSBjb25zdDsKICAgIGZsb2F0IHBvaW50U2l6ZUZsb2F0KCkgY29uc3Q7CiAg
ICB2b2lkIHNldFBvaW50U2l6ZSggaW50ICk7CiAgICB2b2lkIHNldFBvaW50U2l6ZUZsb2F0KCBm
bG9hdCApOwogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhlbFNpemUo
IGludCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKICAgIGludCB3ZWln
aHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2VpZ2h0KCBpbnQgKTsKICAgIGJvb2wgYm9sZCgpIGNv
bnN0OwogICAgdm9pZCBzZXRCb2xkKCBib29sICk7CiAgICBib29sIGl0YWxpYygpIGNvbnN0Owog
ICAgdm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAg
ICB2b2lkIHNldFVuZGVybGluZSggYm9vbCApOwogICAgYm9vbCBzdHJpa2VPdXQoKSBjb25zdDsK
ICAgIHZvaWQgc2V0U3RyaWtlT3V0KCBib29sICk7CiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25z
dDsKICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwogICAgU3R5bGVIaW50IHN0eWxlSGlu
dCgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCApOwogICAgU3R5bGVT
dHJhdGVneSBzdHlsZVN0cmF0ZWd5KCkgY29uc3Q7CiAgICB2b2lkIHNldFN0eWxlSGludCggU3R5
bGVIaW50LCBTdHlsZVN0cmF0ZWd5ICk7CiAgICBDaGFyU2V0IGNoYXJTZXQoKSBjb25zdDsKICAg
IHZvaWQgc2V0Q2hhclNldCggQ2hhclNldCApOwoKICAgIHN0YXRpYyBDaGFyU2V0IGNoYXJTZXRG
b3JMb2NhbGUoKTsKCiAgICBib29sIHJhd01vZGUoKSBjb25zdDsKICAgIHZvaWQgc2V0UmF3TW9k
ZSggYm9vbCApOwoKICAgIGJvb2wgZXhhY3RNYXRjaCgpIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBR
Rm9udCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9udCAmICkgY29uc3Q7
CgoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAgdm9pZCBzZXRSYXdOYW1l
KCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNvbnN0OwoKICAgIFFT
dHJpbmcga2V5KCkgY29uc3Q7CgogICAgc3RhdGljIFFTdHJpbmcgZW5jb2RpbmdOYW1lKCBDaGFy
U2V0ICk7CgogICAgc3RhdGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBz
ZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIHN1YnN0
aXR1dGUoIGNvbnN0IFFTdHJpbmcgJmZhbWlseU5hbWUgKTsKICAgIHN0YXRpYyB2b2lkIGluc2Vy
dFN1YnN0aXR1dGlvbiggY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0
aWMgdm9pZCByZW1vdmVTdWJzdGl0dXRpb24oIGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMg
UVN0cmluZ0xpc3Qgc3Vic3RpdHV0aW9ucygpOwoKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUo
KTsKICAgIHN0YXRpYyB2b2lkIGxvY2FsZV9pbml0KCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVw
KCk7CiAgICBzdGF0aWMgdm9pZCBjYWNoZVN0YXRpc3RpY3MoKTsKCgoKCgpwcm90ZWN0ZWQ6CiAg
ICBib29sIGRpcnR5KCkgY29uc3Q7CgogICAgUVN0cmluZyBkZWZhdWx0RmFtaWx5KCkgY29uc3Q7
CiAgICBRU3RyaW5nIGxhc3RSZXNvcnRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJl
c29ydEZvbnQoKSBjb25zdDsKICAgIGludCBkZWNpUG9pbnRTaXplKCkgY29uc3Q7Cgpwcml2YXRl
OgogICAgUUZvbnQoIFFGb250RGF0YSAqICk7CiAgICB2b2lkIGluaXQoKTsKICAgIHZvaWQgZGV0
YWNoKCk7CiAgICB2b2lkIGluaXRGb250SW5mbygpIGNvbnN0OwogICAgdm9pZCBsb2FkKCkgY29u
c3Q7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRfUHJpdmF0ZTsKICAgIGZyaWVuZCBjbGFzcyBRRm9u
dEludGVybmFsOwogICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBjbGFz
cyBRRm9udEluZm87CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CgoKCgoKICAgIGZyaWVuZCBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwog
ICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAm
ICk7CgogICAgUUZvbnREYXRhICpkOwogICAgc3RhdGljIENoYXJTZXQgZGVmYXVsdENoYXJTZXQ7
Cn07CgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgpID4g
Tm9ybWFsOyB9CgppbmxpbmUgdm9pZCBRRm9udDo6c2V0Qm9sZCggYm9vbCBlbmFibGUgKQp7IHNl
dFdlaWdodCggZW5hYmxlID8gQm9sZCA6IE5vcm1hbCApOyB9CgoKCgoKCgogUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFGb250ICYgKTsKIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CmNsYXNzIFFUZXh0Q29kZWM7
CgoKY2xhc3MgUUZvbnRNZXRyaWNzCnsKcHVibGljOgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBR
Rm9udCAmICk7CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250TWV0cmljcyAmICk7CiAgIH5R
Rm9udE1ldHJpY3MoKTsKCiAgICBRRm9udE1ldHJpY3MgJm9wZXJhdG9yPSggY29uc3QgUUZvbnRN
ZXRyaWNzICYgKTsKCiAgICBpbnQgYXNjZW50KCkgY29uc3Q7CiAgICBpbnQgZGVzY2VudCgpIGNv
bnN0OwogICAgaW50IGhlaWdodCgpIGNvbnN0OwogICAgaW50IGxlYWRpbmcoKSBjb25zdDsKICAg
IGludCBsaW5lU3BhY2luZygpIGNvbnN0OwogICAgaW50IG1pbkxlZnRCZWFyaW5nKCkgY29uc3Q7
CiAgICBpbnQgbWluUmlnaHRCZWFyaW5nKCkgY29uc3Q7CiAgICBpbnQgbWF4V2lkdGgoKSBjb25z
dDsKCiAgICBib29sIGluRm9udChRQ2hhcikgY29uc3Q7CgogICAgaW50IGxlZnRCZWFyaW5nKFFD
aGFyKSBjb25zdDsKICAgIGludCByaWdodEJlYXJpbmcoUUNoYXIpIGNvbnN0OwogICAgaW50IHdp
ZHRoKCBjb25zdCBRU3RyaW5nICYsIGludCBsZW4gPSAtMSApIGNvbnN0OwogICAgaW50IHdpZHRo
KCBRQ2hhciApIGNvbnN0OwogICAgaW50IHdpZHRoKCBjaGFyIGMgKSBjb25zdCB7IHJldHVybiB3
aWR0aCggKFFDaGFyKSBjICk7IH0KICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggY29uc3QgUVN0cmlu
ZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggUUNoYXIg
KSBjb25zdDsKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
ZyYgc3RyLCBpbnQgbGVuPS0xLCBpbnQgdGFic3RvcHM9MCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICp0YWJhcnJheT0wLCBjaGFyICoqaW50ZXJuPTAgKSBjb25zdDsKICAgIFFT
aXplIHNpemUoIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcm
IHN0ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAgICBp
bnQgKnRhYmFycmF5PTAsIGNoYXIgKippbnRlcm49MCApIGNvbnN0OwoKICAgIGludCB1bmRlcmxp
bmVQb3MoKSBjb25zdDsKICAgIGludCBzdHJpa2VPdXRQb3MoKSBjb25zdDsKICAgIGludCBsaW5l
V2lkdGgoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFQYWludGVy
ICogKTsKICAgIHN0YXRpYyB2b2lkIHJlc2V0KCBjb25zdCBRUGFpbnRlciAqICk7CiAgICBjb25z
dCBRRm9udERlZiAqc3BlYygpIGNvbnN0OwoKCgoKCiAgICB2b2lkICpmb250U3RydWN0KCkgY29u
c3Q7CiAgICB2b2lkICpmb250U2V0KCkgY29uc3Q7CiAgICBjb25zdCBRVGV4dENvZGVjICptYXBw
ZXIoKSBjb25zdDsKICAgIGludCBwcmludGVyQWRqdXN0ZWQoaW50KSBjb25zdDsKCgoKCiAgICBm
cmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKCiAgICBRRm9u
dEludGVybmFsICpmaW47CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAgIGludCBmbGFnczsKCiAg
ICBib29sIHVuZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDEpICE9IDA7
IH0KICAgIGJvb2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4Mikg
IT0gMDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkgeyBmbGFncyB8PSAweDE7IH0KICAg
IHZvaWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0gMHgyOyB9Cn07CmNsYXNzIFFGb250
SW5mbwp7CnB1YmxpYzoKICAgIFFGb250SW5mbyggY29uc3QgUUZvbnQgJiApOwogICAgUUZvbnRJ
bmZvKCBjb25zdCBRRm9udEluZm8gJiApOwogICB+UUZvbnRJbmZvKCk7CgogICAgUUZvbnRJbmZv
ICZvcGVyYXRvcj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmluZyBmYW1pbHkoKSBj
b25zdDsKICAgIGludCBwb2ludFNpemUoKSBjb25zdDsKICAgIGJvb2wgaXRhbGljKCkgY29uc3Q7
CiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAgICBib29sIGJvbGQoKSBjb25zdDsKICAgIGJvb2wg
dW5kZXJsaW5lKCkgY29uc3Q7CiAgICBib29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgYm9vbCBm
aXhlZFBpdGNoKCkgY29uc3Q7CiAgICBRRm9udDo6U3R5bGVIaW50IHN0eWxlSGludCgpIGNvbnN0
OwogICAgUUZvbnQ6OkNoYXJTZXQgY2hhclNldCgpIGNvbnN0OwogICAgYm9vbCByYXdNb2RlKCkg
Y29uc3Q7CgogICAgYm9vbCBleGFjdE1hdGNoKCkgY29uc3Q7CgoKICAgIGNvbnN0IFFGb250ICZm
b250KCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250SW5mbyggY29uc3QgUVBhaW50ZXIgKiAp
OwogICAgc3RhdGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWludGVyICogKTsKICAgIGNvbnN0IFFG
b250RGVmICpzcGVjKCkgY29uc3Q7CgogICAgUUZvbnRJbnRlcm5hbCAqZmluOwogICAgUVBhaW50
ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7CgogICAgYm9vbCB1bmRlcmxpbmVGbGFnKCkgY29u
c3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBib29sIHN0cmlrZU91dEZsYWco
KSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9IDA7IH0KICAgIGJvb2wgZXhhY3RNYXRj
aEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDQpICE9IDA7IH0KICAgIHZvaWQgc2V0
VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9CiAgICB2b2lkIHNldFN0cmlrZU91dEZs
YWcoKSB7IGZsYWdzIHw9IDB4MjsgfQogICAgdm9pZCBzZXRFeGFjdE1hdGNoRmxhZygpIHsgZmxh
Z3MgfD0gMHg0OyB9CgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3Mg
UVBhaW50ZXI7Cn07CgoKaW5saW5lIGJvb2wgUUZvbnRJbmZvOjpib2xkKCkgY29uc3QKeyByZXR1
cm4gd2VpZ2h0KCkgPiBRRm9udDo6Tm9ybWFsOyB9CmNsYXNzIFFCdXR0b247CmNsYXNzIFFQdXNo
QnV0dG9uOwpjbGFzcyBRU2Nyb2xsQmFyOwpjbGFzcyBRVGFiQmFyOwpjbGFzcyBRVGFiOwpjbGFz
cyBRUG9wdXBNZW51OwpjbGFzcyBRTWVudUl0ZW07CmNsYXNzIFFUb29sQnV0dG9uOwoKY2xhc3Mg
UVN0eWxlOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IFFNZXRhT2JqZWN0ICptZXRhT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IGNvbnN0IGNoYXIgKmNs
YXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsg
c3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBj
aGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5pdE1ldGFPYmplY3QoKTsgcHJp
dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAgR1VJU3R5bGUgZ3M7Cgpwcml2
YXRlOgogICAgUVN0eWxlKEdVSVN0eWxlKTsKICAgIFFTdHlsZSgpOwogICAgZnJpZW5kIGNsYXNz
IFFDb21tb25TdHlsZTsKCnB1YmxpYzoKICAgIHZpcnR1YWwgflFTdHlsZSgpOwoKCiAgICBvcGVy
YXRvciBHVUlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGdzOyB9CiAgICBpbnQgb3BlcmF0b3I9PShH
VUlTdHlsZSBzKSBjb25zdCB7IHJldHVybiBncz09czsgfQogICAgaW50IG9wZXJhdG9yIT0oR1VJ
U3R5bGUgcykgY29uc3QgeyByZXR1cm4gZ3MhPXM7IH0KCgogICAgR1VJU3R5bGUgZ3VpU3R5bGUo
KSBjb25zdCB7IHJldHVybiBnczsgfQoKCgogICAgdmlydHVhbCB2b2lkIHBvbGlzaCggUVdpZGdl
dCogKTsKICAgIHZpcnR1YWwgdm9pZCB1blBvbGlzaCggUVdpZGdldCogKTsKCiAgICB2aXJ0dWFs
IHZvaWQgcG9saXNoKCBRQXBwbGljYXRpb24qKTsKICAgIHZpcnR1YWwgdm9pZCB1blBvbGlzaCgg
UUFwcGxpY2F0aW9uKik7CgogICAgdmlydHVhbCB2b2lkIHBvbGlzaCggUVBhbGV0dGUmKTsKCiAg
ICB2aXJ0dWFsIFFSZWN0IGl0ZW1SZWN0KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQg
dywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBib29sIGVuYWJsZWQsCiAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAqcGl4bWFwLAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmcmIHRleHQsIGludCBsZW49LTEgKTsKCiAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0l0ZW0oIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAg
ICAgICAgICAgICAgICBpbnQgZmxhZ3MsIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIGVuYWJs
ZWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAqcGl4bWFwLCBjb25zdCBRU3Ry
aW5nJiB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuPS0xLCBjb25zdCBR
Q29sb3IqIHBlbkNvbG9yID0gMCApOwoKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NlcGFyYXRvcigg
UVBhaW50ZXIgKnAsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgc3Vua2VuID0gVFJVRSwKICAgICAg
ICAgICAgICAgICAgICAgaW50IGxpbmVXaWR0aCA9IDEsIGludCBtaWRMaW5lV2lkdGggPSAwICk7
CgogICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yICYsIGludCBsaW5l
V2lkdGggPSAxLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKTsK
CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3RTdHJvbmcoIFFQYWludGVyICpwLCBpbnQgeCwgaW50
IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAg
JiwgYm9vbCBzdW5rZW49RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lV2lkdGgg
PSAxLCBpbnQgbWlkTGluZVdpZHRoID0gMCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUJy
dXNoICpmaWxsID0gMCApOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QnV0dG9uKCBRUGFpbnRlciAq
cCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICkgPSAwOwoKICAgIHZpcnR1YWwgUVJlY3QgYnV0dG9u
UmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3
QnV0dG9uTWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0JldmVsQnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5
LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZn
LCBib29sIHN1bmtlbiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2gg
KmZpbGwgPSAwICkgPSAwOwoKICAgIFFSZWN0IGJldmVsQnV0dG9uUmVjdCggaW50IHgsIGludCB5
LCBpbnQgdywgaW50IGgpOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3VG9vbEJ1dHRvbiggUVBhaW50
ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgICBj
b25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBzdW5rZW4gPSBGQUxTRSwKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUUJydXNoICpmaWxsID0gMCApOwogICAgdm9pZCBkcmF3VG9vbEJ1dHRvbigg
UVRvb2xCdXR0b24qIGJ0biwgUVBhaW50ZXIgKnApOwoKICAgIFFSZWN0IHRvb2xCdXR0b25SZWN0
KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdQYW5l
bCggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICYsIGJvb2wgc3Vua2VuPUZBTFNFLAogICAgICAgICAg
ICAgICAgICAgIGludCBsaW5lV2lkdGggPSAxLCBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7Cgog
ICAgdmlydHVhbCB2b2lkIGRyYXdQb3B1cFBhbmVsKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5
LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD
b2xvckdyb3VwICYsIGludCBsaW5lV2lkdGggPSAyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdB
cnJvdyggUVBhaW50ZXIgKnAsIFF0OjpBcnJvd1R5cGUgdHlwZSwgYm9vbCBkb3duLAogICAgICAg
ICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgUUJydXNoICpm
aWxsID0gMCApID0gMDsKCgogICAgdmlydHVhbCBRU2l6ZSBleGNsdXNpdmVJbmRpY2F0b3JTaXpl
KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdFeGNsdXNpdmVJbmRpY2F0b3IoIFFQ
YWludGVyKiBwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBvbiwgYm9vbCBkb3duID0gRkFMU0UsIGJvb2wg
ZW5hYmxlZCA9IFRSVUUgKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0V4Y2x1c2l2ZUluZGlj
YXRvck1hc2soIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBv
bik7CgoKICAgIHZpcnR1YWwgUVNpemUgaW5kaWNhdG9yU2l6ZSgpIGNvbnN0ID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBkcmF3SW5kaWNhdG9yKCBRUGFpbnRlciogcCwgaW50IHgsIGludCB5LCBpbnQg
dywgaW50IGgsIGNvbnN0IFFDb2xvckdyb3VwICZnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzdGF0ZSwgYm9vbCBkb3duID0gRkFMU0UsIGJvb2wgZW5hYmxlZCA9IFRSVUUg
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0luZGljYXRvck1hc2soIFFQYWludGVyICpwLCBp
bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IHN0YXRlKTsKCgoKICAgIHZpcnR1YWwgdm9p
ZCBkcmF3Rm9jdXNSZWN0KCBRUGFpbnRlciosIGNvbnN0IFFSZWN0ICYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJiwgY29uc3QgUUNvbG9yKiBiZyA9
IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCA9IEZBTFNFICkgPSAwOwoK
CgoKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbWJvQnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBzdW5rZW4gPSBGQUxTRSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZWRpdGFibGUgPSBGQUxTRSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICkgPSAwOwogICAgdmlydHVh
bCBRUmVjdCBjb21ib0J1dHRvblJlY3QoIGludCB4LCBpbnQgeSwKICAgICAgICAgICAgICAgICAg
ICBpbnQgdywgaW50IGgpID0gMDsKICAgIHZpcnR1YWwgUVJlY3QgY29tYm9CdXR0b25Gb2N1c1Jl
Y3QoIGludCB4LCBpbnQgeSwKICAgICAgICAgICAgICAgICAgICBpbnQgdywgaW50IGgpID0gMDsK
CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbWJvQnV0dG9uTWFzayggUVBhaW50ZXIgKnAsIGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoKSA9IDA7CgoKICAgIHZpcnR1YWwgdm9pZCBkcmF3UHVzaEJ1
dHRvbiggUVB1c2hCdXR0b24qIGJ0biwgUVBhaW50ZXIgKnApID0gMDsKCiAgICB2aXJ0dWFsIHZv
aWQgZHJhd1B1c2hCdXR0b25MYWJlbCggUVB1c2hCdXR0b24qIGJ0biwgUVBhaW50ZXIgKnApID0g
MDsKICAgIFFSZWN0IHB1c2hCdXR0b25Db250ZW50c1JlY3QoIFFQdXNoQnV0dG9uKiBidG4gKTsK
ICAgIGludCBtZW51QnV0dG9uSW5kaWNhdG9yV2lkdGgoIGludCBoICk7CiAgICB2aXJ0dWFsIHZv
aWQgZ2V0QnV0dG9uU2hpZnQoIGludCAmeCwgaW50ICZ5KSA9IDA7CgoKICAgIHZpcnR1YWwgaW50
IGRlZmF1bHRGcmFtZVdpZHRoKCkgY29uc3QgPSAwOwoKCiAgICB2aXJ0dWFsIHZvaWQgdGFiYmFy
TWV0cmljcyggY29uc3QgUVRhYkJhciosCiAgICAgICAgICAgICAgICAgICAgaW50JiwgaW50Jiwg
aW50JiApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3VGFiKCBRUGFpbnRlciosIGNvbnN0IFFU
YWJCYXIqLCBRVGFiKiwgYm9vbCBzZWxlY3RlZCApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3
VGFiTWFzayggUVBhaW50ZXIqLCBjb25zdCBRVGFiQmFyKiwgUVRhYiosIGJvb2wgc2VsZWN0ZWQg
KSA9IDA7CgoKICAgIGVudW0gU2Nyb2xsQ29udHJvbCB7IEFkZExpbmUgPSAweDEgLCBTdWJMaW5l
ID0gMHgyICwgQWRkUGFnZSA9IDB4NCwKICAgICAgICAgICAgICAgICAgICAgICAgIFN1YlBhZ2Ug
PSAweDggLCBGaXJzdCA9IDB4MTAsIExhc3QgPSAweDIwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgU2xpZGVyID0gMHg0MCwgTm9TY3JvbGwgPSAweDgwIH07CgogICAgdmlydHVhbCB2b2lkIHNj
cm9sbEJhck1ldHJpY3MoIGNvbnN0IFFTY3JvbGxCYXIqLAogICAgICAgICAgICAgICAgICAgIGlu
dCYsIGludCYsIGludCYsIGludCYpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3U2Nyb2xsQmFy
Q29udHJvbHMoIFFQYWludGVyKiwgY29uc3QgUVNjcm9sbEJhciosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2xpZGVyU3RhcnQsIHVpbnQgY29udHJvbHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50IGFjdGl2ZUNvbnRyb2wg
KSA9IDA7CiAgICB2aXJ0dWFsIFNjcm9sbENvbnRyb2wgc2Nyb2xsQmFyUG9pbnRPdmVyKCBjb25z
dCBRU2Nyb2xsQmFyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBzbGlkZXJTdGFydCwgY29uc3QgUVBvaW50JiApID0gMDsKCgogICAgdmlydHVhbCBpbnQgc2xp
ZGVyTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXIoIFFQYWlu
dGVyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcs
IGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWVudGF0aW9uLCBib29sIHRpY2tBYm92
ZSwgYm9vbCB0aWNrQmVsb3cpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NsaWRlck1hc2so
IFFQYWludGVyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50
IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50
YXRpb24sIGJvb2wgdGlja0Fib3ZlLCBib29sIHRpY2tCZWxvdykgPSAwOwogICAgdmlydHVhbCB2
b2lkIGRyYXdTbGlkZXJHcm9vdmUoIFFQYWludGVyICpwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwJiBnLCBRQ09PUkQgYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmllbnRhdGlvbiApID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBkcmF3U2xpZGVyR3Jvb3ZlTWFzayggUVBhaW50ZXIgKnAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQ09PUkQgYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50YXRpb24gKSA9IDA7CiAgICB2aXJ0dWFs
IGludCBtYXhpbXVtU2xpZGVyRHJhZ0Rpc3RhbmNlKCkgY29uc3QgPSAwOwoKICAgIHZpcnR1YWwg
aW50IHNwbGl0dGVyV2lkdGgoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NwbGl0
dGVyKCBRUGFpbnRlciAqcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50
IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29s
b3JHcm91cCAmZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmllbnRhdGlvbikgPSAw
OwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q2hlY2tNYXJrKCBRUGFpbnRlciAqcCwgaW50IHgsIGlu
dCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UUNvbG9yR3JvdXAgJmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3Qs
IGJvb2wgZGlzICkgPSAwOwogICAgdmlydHVhbCB2b2lkIHBvbGlzaFBvcHVwTWVudSggUVBvcHVw
TWVudSogKSA9IDA7CgogICAgdmlydHVhbCBpbnQgZXh0cmFQb3B1cE1lbnVJdGVtV2lkdGgoIGJv
b2wgY2hlY2thYmxlLCBpbnQgbWF4cG13LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFNZW51SXRlbSogbWksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUZv
bnRNZXRyaWNzJiBmbSApID0gMDsKICAgIHZpcnR1YWwgaW50IHBvcHVwU3VibWVudUluZGljYXRv
cldpZHRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFGb250TWV0cmlj
cyYgZm0gKSA9IDA7CiAgICB2aXJ0dWFsIGludCBwb3B1cE1lbnVJdGVtSGVpZ2h0KCBib29sIGNo
ZWNrYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRTWVudUl0ZW0qIG1pLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFGb250TWV0cmljcyYgZm0gKSA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1BvcHVwTWVudUl0ZW0oIFFQYWludGVyKiBwLCBib29s
IGNoZWNrYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heHBt
dywgaW50IHRhYiwgUU1lbnVJdGVtKiBtaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVBhbGV0dGUmIHBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhY3QsIGJvb2wgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpID0gMDsKICAgIHZvaWQgZHJhd01l
bnVCYXJJdGVtKCBRUGFpbnRlciogcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNZW51SXRlbSogbWksIFFDb2xvckdyb3Vw
JiBnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuYWJsZWQsIGJv
b2wgYWN0aXZlICk7CgoKICAgIFFTaXplIHNjcm9sbEJhckV4dGVudCgpOwogICAgaW50IGJ1dHRv
bkRlZmF1bHRJbmRpY2F0b3JXaWR0aCgpIGNvbnN0OwogICAgaW50IGJ1dHRvbk1hcmdpbigpIGNv
bnN0OwogICAgaW50IHRvb2xCYXJIYW5kbGVFeHRlbnQoKSBjb25zdDsKICAgIGludCB0b29sQmFy
SGFuZGxlRXh0ZW5kKCkgY29uc3Q7CiAgICBpbnQgc2xpZGVyVGhpY2tuZXNzKCkgY29uc3QgOwog
ICAgdm9pZCBkcmF3VG9vbEJhckhhbmRsZSggUVBhaW50ZXIgKnAsIGNvbnN0IFFSZWN0ICZyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoaWdobGlnaHQsIGNvbnN0IFFDb2xvckdy
b3VwICZjZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHJhd0JvcmRlciA9IEZB
TFNFICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldFNjcm9sbEJhckV4dGVudCggaW50IHcsIGlu
dCBoPS0xICk7CiAgICB2b2lkIHNldEJ1dHRvbkRlZmF1bHRJbmRpY2F0b3JXaWR0aCggaW50IHcg
KTsKICAgIHZvaWQgc2V0QnV0dG9uTWFyZ2luKCBpbnQgdyApOwogICAgdm9pZCBzZXRTbGlkZXJU
aGlja25lc3MoaW50IHQpOwoKCnByaXZhdGU6CgogICAgUVN0eWxlKCBjb25zdCBRU3R5bGUgJiAp
OwogICAgUVN0eWxlJiBvcGVyYXRvcj0oIGNvbnN0IFFTdHlsZSAmICk7Cgp9OwpjbGFzcyBRU2l6
ZVBvbGljeQp7CnByaXZhdGU6CiAgICBlbnVtIHsgSFNpemUgPSA2LCBITWFzayA9IDB4M2YsIFZN
YXNrID0gSE1hc2sgPDwgSFNpemUsCiAgICAgICAgICAgTWF5R3JvdyA9IDEsIEV4cE1hc2sgPSAy
LCBNYXlTaHJpbmsgPSA0IH07CnB1YmxpYzoKICAgIGVudW0gU2l6ZVR5cGUgeyBGaXhlZCA9IDAs
CiAgICAgICAgICAgICAgICAgICAgTWluaW11bSA9IE1heUdyb3csCiAgICAgICAgICAgICAgICAg
ICAgTWF4aW11bSA9IE1heVNocmluaywKICAgICAgICAgICAgICAgICAgICBQcmVmZXJyZWQgPSBN
YXlHcm93fE1heVNocmluayAsCiAgICAgICAgICAgICAgICAgICAgTWluaW11bUV4cGFuZGluZyA9
IE1pbmltdW18RXhwTWFzaywKICAgICAgICAgICAgICAgICAgICBFeHBhbmRpbmcgPSBNaW5pbXVt
RXhwYW5kaW5nfE1heVNocmluayB9OwoKICAgIGVudW0gRXhwYW5kRGF0YSB7IE5vRGlyZWN0aW9u
ID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWwgPSAxLAogICAgICAgICAgICAg
ICAgICAgICAgVmVydGljYWwgPSAyLAogICAgICAgICAgICAgICAgICAgICAgQm90aERpcmVjdGlv
bnMgPSBIb3Jpem9udGFsIHwgVmVydGljYWwgfTsKCiAgICBRU2l6ZVBvbGljeSgpIHsgZGF0YSA9
IDA7IH0KCiAgICBRU2l6ZVBvbGljeSggU2l6ZVR5cGUgaG9yLCBTaXplVHlwZSB2ZXIsIGJvb2wg
aGZ3ID0gRkFMU0UgKTsKCiAgICBTaXplVHlwZSBob3JEYXRhKCkgY29uc3QgeyByZXR1cm4gKFNp
emVUeXBlKSggZGF0YSAmIEhNYXNrICk7IH0KICAgIFNpemVUeXBlIHZlckRhdGEoKSBjb25zdCB7
IHJldHVybiAoU2l6ZVR5cGUpKCggZGF0YSAmIFZNYXNrICkgPj4gSFNpemUpOyB9CgogICAgYm9v
bCBtYXlTaHJpbmtIb3Jpem9udGFsbHkoKSBjb25zdCB7IHJldHVybiBob3JEYXRhKCkgJiBNYXlT
aHJpbms7IH0KICAgIGJvb2wgbWF5U2hyaW5rVmVydGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIHZl
ckRhdGEoKSAmIE1heVNocmluazsgfQogICAgYm9vbCBtYXlHcm93SG9yaXpvbnRhbGx5KCkgY29u
c3QgeyByZXR1cm4gaG9yRGF0YSgpICYgTWF5R3JvdzsgfQogICAgYm9vbCBtYXlHcm93VmVydGlj
YWxseSgpIGNvbnN0IHsgcmV0dXJuIHZlckRhdGEoKSAmIE1heUdyb3c7IH0KCiAgICBFeHBhbmRE
YXRhIGV4cGFuZGluZygpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIChFeHBhbmREYXRhKSgg
KGludCkodmVyRGF0YSgpJkV4cE1hc2sgPyBWZXJ0aWNhbCA6IDApKwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChpbnQpKGhvckRhdGEoKSZFeHBNYXNrID8gSG9yaXpvbnRhbCA6IDApICk7
CiAgICB9CgogICAgdm9pZCBzZXRIb3JEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0gKGRhdGEg
JiB+SE1hc2spIHwgZDsgfQogICAgdm9pZCBzZXRWZXJEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRh
ID0gKGRhdGEgJiB+KEhNYXNrPDxIU2l6ZSkpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChkPDxIU2l6ZSk7IH0KCiAgICB2b2lkIHNldEhlaWdodEZvcldpZHRo
KCBib29sIGIgKSB7IGRhdGEgPSBiID8gKCBkYXRhIHwgKCAxIDw8IDIqSFNpemUgKSApCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggZGF0YSAmIH4oIDEg
PDwgMipIU2l6ZSApICk7IH0KICAgIGJvb2wgaGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBkYXRhICYgKCAxIDw8IDIqSFNpemUgKTsgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29u
c3QgUVNpemVQb2xpY3kmIHMgKSBjb25zdCB7IHJldHVybiBkYXRhID09IHMuZGF0YTsgfQogICAg
Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZVBvbGljeSYgcyApIGNvbnN0IHsgcmV0dXJuIGRh
dGEgIT0gcy5kYXRhOyB9Cgpwcml2YXRlOgogICAgUVNpemVQb2xpY3koIGludCBpICk6IGRhdGEo
IGkgKSB7fQoKICAgIFFfVUlOVDE2IGRhdGE7Cn07CgoKaW5saW5lIFFTaXplUG9saWN5OjpRU2l6
ZVBvbGljeSggU2l6ZVR5cGUgaG9yLCBTaXplVHlwZSB2ZXIsIGJvb2wgaGZ3ICkKICAgICAgICA6
IGRhdGEoIGhvciB8ICh2ZXI8PEhTaXplKSB8IChoZncgPyAoMTw8MipIU2l6ZSkgOiAwKSApIHt9
CgoKY2xhc3MgUUxheW91dDsKc3RydWN0IFFXRXh0cmE7CnN0cnVjdCBRVExXRXh0cmE7CmNsYXNz
IFFGb2N1c0RhdGE7CmNsYXNzIFFTdHlsZTsKY2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKCmNsYXNz
IFFXaWRnZXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFQYWludERldmljZQp7CiAgICBwdWJs
aWM6IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9i
amVjdCgpOyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmpl
Y3QqIHN0YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBz
dGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZv
aWQgaW5pdE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2Jq
OwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAg
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKICAgCiAgIAoKICAgCiAgIAogICAKICAg
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAoKcHVibGljOgogICAgUVdpZGdldCggUVdpZGdldCAqcGFyZW50PTAsIGNvbnN0IGNo
YXIgKm5hbWU9MCwgV0ZsYWdzIGY9MCApOwogICAgflFXaWRnZXQoKTsKCiAgICBXSWQgd2luSWQo
KSBjb25zdDsKICAgIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwoKCgogICAgUVN0
eWxlICZzdHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZSggUVN0eWxlICogKTsKCgoKICAg
IGJvb2wgaXNUb3BMZXZlbCgpIGNvbnN0OwogICAgYm9vbCBpc01vZGFsKCkgY29uc3Q7CiAgICBi
b29sIGlzUG9wdXAoKSBjb25zdDsKICAgIGJvb2wgaXNEZXNrdG9wKCkgY29uc3Q7CgogICAgYm9v
bCBpc0VuYWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG8oUVdpZGdldCopIGNvbnN0
OwogICAgYm9vbCBpc0VuYWJsZWRUb1RMVygpIGNvbnN0OwoKcHVibGljIDoKICAgIHZpcnR1YWwg
dm9pZCBzZXRFbmFibGVkKCBib29sICk7CiAgICB2b2lkIHNldERpc2FibGVkKCBib29sICk7CgoK
CnB1YmxpYzoKICAgIFFSZWN0IGZyYW1lR2VvbWV0cnkoKSBjb25zdDsKICAgIGNvbnN0IFFSZWN0
ICZnZW9tZXRyeSgpIGNvbnN0OwogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7
CiAgICBRUG9pbnQgcG9zKCkgY29uc3Q7CiAgICBRU2l6ZSBmcmFtZVNpemUoKSBjb25zdDsKICAg
IFFTaXplIHNpemUoKSBjb25zdDsKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdo
dCgpIGNvbnN0OwogICAgUVJlY3QgcmVjdCgpIGNvbnN0OwogICAgUVJlY3QgY2hpbGRyZW5SZWN0
KCkgY29uc3Q7CiAgICBRUmVnaW9uIGNoaWxkcmVuUmVnaW9uKCkgY29uc3Q7CgogICAgUVNpemUg
bWluaW11bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1heGltdW1TaXplKCkgY29uc3Q7CiAgICBp
bnQgbWluaW11bVdpZHRoKCkgY29uc3Q7CiAgICBpbnQgbWluaW11bUhlaWdodCgpIGNvbnN0Owog
ICAgaW50IG1heGltdW1XaWR0aCgpIGNvbnN0OwogICAgaW50IG1heGltdW1IZWlnaHQoKSBjb25z
dDsKICAgIHZvaWQgc2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwg
dm9pZCBzZXRNaW5pbXVtU2l6ZSggaW50IG1pbncsIGludCBtaW5oICk7CiAgICB2b2lkIHNldE1h
eGltdW1TaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWF4aW11bVNp
emUoIGludCBtYXh3LCBpbnQgbWF4aCApOwogICAgdm9pZCBzZXRNaW5pbXVtV2lkdGgoIGludCBt
aW53ICk7CiAgICB2b2lkIHNldE1pbmltdW1IZWlnaHQoIGludCBtaW5oICk7CiAgICB2b2lkIHNl
dE1heGltdW1XaWR0aCggaW50IG1heHcgKTsKICAgIHZvaWQgc2V0TWF4aW11bUhlaWdodCggaW50
IG1heGggKTsKCiAgICBRU2l6ZSBzaXplSW5jcmVtZW50KCkgY29uc3Q7CiAgICB2b2lkIHNldFNp
emVJbmNyZW1lbnQoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSW5j
cmVtZW50KCBpbnQgdywgaW50IGggKTsKICAgIFFTaXplIGJhc2VTaXplKCkgY29uc3Q7CiAgICB2
b2lkIHNldEJhc2VTaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkIHNldEJhc2VTaXplKCBp
bnQgYmFzZXcsIGludCBiYXNlaCApOwoKICAgIHZvaWQgc2V0Rml4ZWRTaXplKCBjb25zdCBRU2l6
ZSAmICk7CiAgICB2b2lkIHNldEZpeGVkU2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIHNl
dEZpeGVkV2lkdGgoIGludCB3ICk7CiAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KCBpbnQgaCApOwoK
CgogICAgUVBvaW50IG1hcFRvR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBv
aW50IG1hcEZyb21HbG9iYWwoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFw
VG9QYXJlbnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJvbVBhcmVu
dCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBUbyggUVdpZGdldCAqLCBj
b25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcEZyb20oIFFXaWRnZXQgKiwgY29u
c3QgUVBvaW50ICYgKSBjb25zdDsKCiAgICBRV2lkZ2V0ICp0b3BMZXZlbFdpZGdldCgpIGNvbnN0
OwoKCgogICAgZW51bSBCYWNrZ3JvdW5kTW9kZSB7IEZpeGVkQ29sb3IsIEZpeGVkUGl4bWFwLCBO
b0JhY2tncm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUZvcmVncm91bmQs
IFBhbGV0dGVCdXR0b24sIFBhbGV0dGVMaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YWxldHRlTWlkbGlnaHQsIFBhbGV0dGVEYXJrLCBQYWxldHRlTWlkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhbGV0dGVUZXh0LCBQYWxldHRlQnJpZ2h0VGV4dCwgUGFsZXR0ZUJhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUJhY2tncm91bmQsIFBhbGV0dGVTaGFkb3cs
IFBhbGV0dGVIaWdobGlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUhpZ2hs
aWdodGVkVGV4dCwgUGFsZXR0ZUJ1dHRvblRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
WDExUGFyZW50UmVsYXRpdmUgfTsKCiAgICBCYWNrZ3JvdW5kTW9kZSBiYWNrZ3JvdW5kTW9kZSgp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9k
ZSApOwoKICAgIGNvbnN0IFFDb2xvciAmIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgY29u
c3QgUUNvbG9yICYgZm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
QmFja2dyb3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNvbnN0IFFQaXhtYXAgKiBi
YWNrZ3JvdW5kUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZFBp
eG1hcCggY29uc3QgUVBpeG1hcCAmICk7CgoKICAgIGNvbnN0IFFDb2xvckdyb3VwICYgY29sb3JH
cm91cCgpIGNvbnN0OwogICAgY29uc3QgUVBhbGV0dGUgJiBwYWxldHRlKCkgY29uc3Q7CiAgICBi
b29sIG93blBhbGV0dGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25z
dCBRUGFsZXR0ZSAmICk7CiAgICB2b2lkIHVuc2V0UGFsZXR0ZSgpOwoKICAgIFFGb250IGZvbnQo
KSBjb25zdDsKICAgIGJvb2wgb3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZv
bnQoIGNvbnN0IFFGb250ICYgKTsKICAgIHZvaWQgdW5zZXRGb250KCk7CiAgICBRRm9udE1ldHJp
Y3MgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgIFFGb250SW5mbyBmb250SW5mbygpIGNvbnN0OwoK
ICAgIGVudW0gUHJvcGFnYXRpb25Nb2RlIHsgTm9DaGlsZHJlbiwgQWxsQ2hpbGRyZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNhbWVGb250LCBTYW1lUGFsZXR0ZSA9IFNhbWVGb250IH07
CgogICAgUHJvcGFnYXRpb25Nb2RlIGZvbnRQcm9wYWdhdGlvbigpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldEZvbnRQcm9wYWdhdGlvbiggUHJvcGFnYXRpb25Nb2RlICk7CgogICAgUHJvcGFn
YXRpb25Nb2RlIHBhbGV0dGVQcm9wYWdhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNl
dFBhbGV0dGVQcm9wYWdhdGlvbiggUHJvcGFnYXRpb25Nb2RlICk7CgogICAgY29uc3QgUUN1cnNv
ciAmY3Vyc29yKCkgY29uc3Q7CiAgICBib29sIG93bkN1cnNvcigpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldEN1cnNvciggY29uc3QgUUN1cnNvciAmICk7CiAgICB2aXJ0dWFsIHZvaWQgdW5z
ZXRDdXJzb3IoKTsKCiAgICBRU3RyaW5nIGNhcHRpb24oKSBjb25zdDsKICAgIGNvbnN0IFFQaXht
YXAgKmljb24oKSBjb25zdDsKICAgIFFTdHJpbmcgaWNvblRleHQoKSBjb25zdDsKICAgIGJvb2wg
aGFzTW91c2VUcmFja2luZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25z
dCBRQml0bWFwICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRUmVnaW9uICYg
KTsKICAgIHZvaWQgY2xlYXJNYXNrKCk7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldENh
cHRpb24oIGNvbnN0IFFTdHJpbmcgJik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvbiggY29uc3Qg
UVBpeG1hcCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcg
Jik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCgoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOwogICAgdm9pZCBjbGVhckZvY3VzKCk7CgpwdWJs
aWM6CiAgICBlbnVtIEZvY3VzUG9saWN5IHsKICAgICAgICBOb0ZvY3VzID0gMCwKICAgICAgICBU
YWJGb2N1cyA9IDB4MSwKICAgICAgICBDbGlja0ZvY3VzID0gMHgyLAogICAgICAgIFN0cm9uZ0Zv
Y3VzID0gMHgzLAogICAgICAgIFdoZWVsRm9jdXMgPSAweDcKICAgIH07CgogICAgYm9vbCBpc0Fj
dGl2ZVdpbmRvdygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZVdpbmRvdygpOwog
ICAgYm9vbCBpc0ZvY3VzRW5hYmxlZCgpIGNvbnN0OwoKICAgIEZvY3VzUG9saWN5IGZvY3VzUG9s
aWN5KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQb2xpY3koIEZvY3VzUG9saWN5
ICk7CiAgICBib29sIGhhc0ZvY3VzKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBzZXRUYWJPcmRl
ciggUVdpZGdldCAqLCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1c1Byb3h5
KCBRV2lkZ2V0ICogKTsKICAgIFFXaWRnZXQgKiBmb2N1c1Byb3h5KCkgY29uc3Q7CgoKCiAgICB2
b2lkIGdyYWJNb3VzZSgpOwoKICAgIHZvaWQgZ3JhYk1vdXNlKCBjb25zdCBRQ3Vyc29yICYgKTsK
CiAgICB2b2lkIHJlbGVhc2VNb3VzZSgpOwogICAgdm9pZCBncmFiS2V5Ym9hcmQoKTsKICAgIHZv
aWQgcmVsZWFzZUtleWJvYXJkKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqIG1vdXNlR3JhYmJlcigp
OwogICAgc3RhdGljIFFXaWRnZXQgKiBrZXlib2FyZEdyYWJiZXIoKTsKCgoKICAgIGJvb2wgaXNV
cGRhdGVzRW5hYmxlZCgpIGNvbnN0OwoKCgoKcHVibGljIDoKICAgIHZpcnR1YWwgdm9pZCBzZXRV
cGRhdGVzRW5hYmxlZCggYm9vbCBlbmFibGUgKTsKICAgIHZvaWQgdXBkYXRlKCk7CiAgICB2b2lk
IHVwZGF0ZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgdXBkYXRlKCBj
b25zdCBRUmVjdCYgKTsKICAgIHZvaWQgcmVwYWludCgpOwogICAgdm9pZCByZXBhaW50KCBib29s
IGVyYXNlICk7CiAgICB2b2lkIHJlcGFpbnQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBi
b29sIGVyYXNlPVRSVUUgKTsKICAgIHZvaWQgcmVwYWludCggY29uc3QgUVJlY3QgJiwgYm9vbCBl
cmFzZT1UUlVFICk7CiAgICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWdpb24gJiwgYm9vbCBlcmFz
ZT1UUlVFICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwogICAgdmlydHVhbCB2b2lkIGhp
ZGUoKTsKCiAgICB2b2lkIGljb25pZnkoKSB7IHNob3dNaW5pbWl6ZWQoKTsgfQoKICAgIHZpcnR1
YWwgdm9pZCBzaG93TWluaW1pemVkKCk7CiAgICB2aXJ0dWFsIHZvaWQgc2hvd01heGltaXplZCgp
OwogICAgdm9pZCBzaG93RnVsbFNjcmVlbigpOwogICAgdmlydHVhbCB2b2lkIHNob3dOb3JtYWwo
KTsKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goKTsKICAgIHZvaWQgY29uc3RQb2xpc2goKSBjb25z
dDsKICAgIGJvb2wgY2xvc2UoKTsKCiAgICB2b2lkIHJhaXNlKCk7CiAgICB2b2lkIGxvd2VyKCk7
CiAgICB2b2lkIHN0YWNrVW5kZXIoIFFXaWRnZXQqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZSgg
aW50IHgsIGludCB5ICk7CiAgICB2b2lkIG1vdmUoIGNvbnN0IFFQb2ludCAmICk7CiAgICB2aXJ0
dWFsIHZvaWQgcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBR
U2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICYg
KTsKCnB1YmxpYzoKICAgIHZpcnR1YWwgYm9vbCBjbG9zZSggYm9vbCBhbHNvRGVsZXRlICk7CiAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1Zpc2libGVUbyhRV2lkZ2V0Kikg
Y29uc3Q7CiAgICBib29sIGlzVmlzaWJsZVRvVExXKCkgY29uc3Q7CiAgICBRUmVjdCB2aXNpYmxl
UmVjdCgpIGNvbnN0OwogICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0OwogICAgYm9vbCBpc01pbmlt
aXplZCgpIGNvbnN0OwogICAgYm9vbCBpc01heGltaXplZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwg
UVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKICAgIHZpcnR1YWwgUVNpemUgbWluaW11bVNpemVIaW50
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplUG9saWN5IHNpemVQb2xpY3koKSBjb25zdDsKICAg
IHZvaWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgKTsKICAgIHZpcnR1YWwgaW50IGhlaWdo
dEZvcldpZHRoKGludCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkanVzdFNpemUoKTsKCiAg
ICBRTGF5b3V0ICogbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5X291dDsgfQoKICAgIHZvaWQg
dXBkYXRlR2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCByZXBhcmVudCggUVdpZGdldCAqcGFy
ZW50LCBXRmxhZ3MsIGNvbnN0IFFQb2ludCAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQgcmVwYXJlbnQoIFFXaWRnZXQgKnBh
cmVudCwgY29uc3QgUVBvaW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNob3dJdD1GQUxTRSApOwoKICAgIHZvaWQgcmVjcmVhdGUoIFFXaWRnZXQgKnBhcmVudCwg
V0ZsYWdzIGYsIGNvbnN0IFFQb2ludCAmIHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNob3dJdD1GQUxTRSApCiAgICB7IHJlcGFyZW50KHBhcmVudCxmLHAsc2hvd0l0
KTsgfQoKCiAgICB2b2lkIGVyYXNlKCk7CiAgICB2b2lkIGVyYXNlKCBpbnQgeCwgaW50IHksIGlu
dCB3LCBpbnQgaCApOwogICAgdm9pZCBlcmFzZSggY29uc3QgUVJlY3QgJiApOwogICAgdm9pZCBl
cmFzZSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lkIHNjcm9sbCggaW50IGR4LCBpbnQgZHkg
KTsKICAgIHZvaWQgc2Nyb2xsKCBpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmICk7CgogICAg
dm9pZCBkcmF3VGV4dCggaW50IHgsIGludCB5LCBjb25zdCBRU3RyaW5nICYpOwogICAgdm9pZCBk
cmF3VGV4dCggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFTdHJpbmcgJik7CgoKCiAgICBRV2lkZ2V0
ICogZm9jdXNXaWRnZXQoKSBjb25zdDsKICAgIFFSZWN0IG1pY3JvRm9jdXNIaW50KCkgY29uc3Q7
CgoKCiAgICBib29sIGFjY2VwdERyb3BzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QWNj
ZXB0RHJvcHMoIGJvb2wgb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvTWFzayhib29s
KTsKICAgIGJvb2wgYXV0b01hc2soKSBjb25zdDsKCiAgICBlbnVtIEJhY2tncm91bmRPcmlnaW4g
eyBXaWRnZXRPcmlnaW4sIFBhcmVudE9yaWdpbiB9OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZE9y
aWdpbiggQmFja2dyb3VuZE9yaWdpbiApOwogICAgQmFja2dyb3VuZE9yaWdpbiBiYWNrZ3JvdW5k
T3JpZ2luKCkgY29uc3Q7CgoKCiAgICB2aXJ0dWFsIGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkgY29u
c3Q7CgogICAgUVdpZGdldCAqIHBhcmVudFdpZGdldCgpIGNvbnN0OwogICAgYm9vbCB0ZXN0V1N0
YXRlKCB1aW50IG4gKSBjb25zdDsKICAgIGJvb2wgdGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25z
dDsKICAgIHN0YXRpYyBRV2lkZ2V0ICogZmluZCggV0lkICk7CiAgICBzdGF0aWMgUVdpZGdldE1h
cHBlciAqd21hcHBlcigpOwoKCgoKCnByb3RlY3RlZDoKCiAgICBib29sIGV2ZW50KCBRRXZlbnQg
KiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2
aXJ0dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2
aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1YWwg
dm9pZCB3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQga2V5UHJl
c3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQo
IFFLZXlFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQg
bGVhdmVFdmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KCBRUGFp
bnRFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50ICogKTsK
ICAgIHZpcnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1
YWwgdm9pZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBk
cmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBkcmFn
TW92ZUV2ZW50KCBRRHJhZ01vdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZl
RXZlbnQoIFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJvcEV2ZW50KCBR
RHJvcEV2ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHNob3dFdmVudCggUVNob3dFdmVudCAq
ICk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZUV2ZW50KCBRSGlkZUV2ZW50ICogKTsKICAgIHZpcnR1
YWwgdm9pZCBjdXN0b21FdmVudCggUUN1c3RvbUV2ZW50ICogKTsKICAgIHZpcnR1YWwgYm9vbCB4
MTFFdmVudCggWEV2ZW50ICogKTsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNYXNrKCk7
CgoKCnByb3RlY3RlZDoKCiAgICB2aXJ0dWFsIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHlsZSYgKTsK
CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlZENoYW5nZSggYm9vbCApOwogICAgdmlydHVhbCB2b2lk
IGJhY2tncm91bmRDb2xvckNoYW5nZSggY29uc3QgUUNvbG9yICYgKTsKICAgIHZpcnR1YWwgdm9p
ZCBiYWNrZ3JvdW5kUGl4bWFwQ2hhbmdlKCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICB2aXJ0dWFs
IHZvaWQgcGFsZXR0ZUNoYW5nZSggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIHZpcnR1YWwgdm9p
ZCBmb250Q2hhbmdlKCBjb25zdCBRRm9udCAmICk7CgogICAgaW50IG1ldHJpYyggaW50ICkgY29u
c3Q7CgogICAgdmlydHVhbCB2b2lkIGNyZWF0ZSggV0lkID0gMCwgYm9vbCBpbml0aWFsaXplV2lu
ZG93ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVzdHJveU9sZFdpbmRv
dyA9IFRSVUUgKTsKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCBib29sIGRlc3Ryb3lXaW5kb3cg
PSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVzdHJveVN1YldpbmRvd3Mg
PSBUUlVFICk7CiAgICB1aW50IGdldFdTdGF0ZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNl
dFdTdGF0ZSggdWludCApOwogICAgdm9pZCBjbGVhcldTdGF0ZSggdWludCBuICk7CiAgICBXRmxh
Z3MgZ2V0V0ZsYWdzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V0ZsYWdzKCBXRmxhZ3Mg
KTsKICAgIHZvaWQgY2xlYXJXRmxhZ3MoIFdGbGFncyBuICk7CgogICAgdmlydHVhbCB2b2lkIHNl
dEZSZWN0KCBjb25zdCBRUmVjdCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q1JlY3QoIGNvbnN0
IFFSZWN0ICYgKTsKCiAgICB2aXJ0dWFsIGJvb2wgZm9jdXNOZXh0UHJldkNoaWxkKCBib29sIG5l
eHQgKTsKCiAgICBRV0V4dHJhICpleHRyYURhdGEoKTsKICAgIFFUTFdFeHRyYSAqdG9wRGF0YSgp
OwogICAgUUZvY3VzRGF0YSAqZm9jdXNEYXRhKCk7CgogICAgdmlydHVhbCB2b2lkIHNldEtleUNv
bXByZXNzaW9uKGJvb2wpOwogICAgdmlydHVhbCB2b2lkIHNldE1pY3JvRm9jdXNIaW50KGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIHRleHQ9VFJVRSk7Cgpwcml2YXRlIDoKICAgIHZv
aWQgZm9jdXNQcm94eURlc3Ryb3llZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgc2V0Rm9udFN5cygp
OwoKICAgIHZvaWQgc2V0TGF5b3V0KCBRTGF5b3V0ICpsICk7CgogICAgdm9pZCBzZXRXaW5JZCgg
V0lkICk7CiAgICB2b2lkIHNob3dXaW5kb3coKTsKICAgIHZvaWQgaGlkZVdpbmRvdygpOwogICAg
dm9pZCBzZW5kU2hvd0V2ZW50c1RvQ2hpbGRyZW4oIGJvb2wgc3BvbnRhbmVvdXMgKTsKICAgIHZv
aWQgc2VuZEhpZGVFdmVudHNUb0NoaWxkcmVuKCBib29sIHNwb250YW5lb3VzICk7CiAgICB2b2lk
IGNyZWF0ZVRMRXh0cmEoKTsKICAgIHZvaWQgY3JlYXRlRXh0cmEoKTsKICAgIHZvaWQgZGVsZXRl
RXh0cmEoKTsKICAgIHZvaWQgY3JlYXRlU3lzRXh0cmEoKTsKICAgIHZvaWQgZGVsZXRlU3lzRXh0
cmEoKTsKICAgIHZvaWQgY3JlYXRlVExTeXNFeHRyYSgpOwogICAgdm9pZCBkZWxldGVUTFN5c0V4
dHJhKCk7CiAgICB2b2lkIGRlYWN0aXZhdGVXaWRnZXRDbGVhbnVwKCk7CiAgICB2b2lkIGludGVy
bmFsU2V0R2VvbWV0cnkoIGludCwgaW50LCBpbnQsIGludCwgYm9vbCApOwogICAgdm9pZCByZXBh
cmVudEZvY3VzV2lkZ2V0cyggUVdpZGdldCAqICk7CiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGEo
IGJvb2wgY3JlYXRlICk7CiAgICB2b2lkIHNldEJhY2tncm91bmRGcm9tTW9kZSgpOwogICAgdm9p
ZCBzZXRCYWNrZ3JvdW5kQ29sb3JEaXJlY3QoIGNvbnN0IFFDb2xvciAmICk7CiAgICB2b2lkIHNl
dEJhY2tncm91bmRQaXhtYXBEaXJlY3QoIGNvbnN0IFFQaXhtYXAgJiApOwogICAgdm9pZCBzZXRC
YWNrZ3JvdW5kTW9kZURpcmVjdCggQmFja2dyb3VuZE1vZGUgKTsKICAgIHZvaWQgc2V0QmFja2dy
b3VuZEVtcHR5KCk7CgogICAgdm9pZCBzZXRCYWNrZ3JvdW5kWDExUmVsYXRpdmUoKTsKICAgIHZv
aWQgY2hlY2tDaGlsZHJlbkRuZCgpOwoKCiAgICBXSWQgd2luaWQ7CiAgICB1aW50IHdpZGdldF9z
dGF0ZTsKICAgIHVpbnQgd2lkZ2V0X2ZsYWdzOwogICAgdWludCBwcm9wYWdhdGVfZm9udCA6IDI7
CiAgICB1aW50IHByb3BhZ2F0ZV9wYWxldHRlIDogMjsKICAgIHVpbnQgZm9jdXNfcG9saWN5IDog
NDsKICAgIHVpbnQgb3duX2ZvbnQgOjE7CiAgICB1aW50IG93bl9wYWxldHRlIDoxOwogICAgdWlu
dCBzaXplaGludF9mb3JjZWQgOjE7CiAgICB1aW50IGlzX2Nsb3NpbmcgOjE7CiAgICB1aW50IGlu
X3Nob3cgOiAxOwogICAgdWludCBpbl9zaG93X21heGltaXplZCA6IDE7CiAgICBRUG9pbnQgZnBv
czsKICAgIFFSZWN0IGNyZWN0OwogICAgUUNvbG9yIGJnX2NvbDsKCiAgICBRUGFsZXR0ZSBwYWw7
CgogICAgUUZvbnQgZm50OwoKICAgIFFMYXlvdXQgKmxheV9vdXQ7CgogICAgUVdFeHRyYSAqZXh0
cmE7CiAgICBzdGF0aWMgdm9pZCBjcmVhdGVNYXBwZXIoKTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3lNYXBwZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqd0xpc3QoKTsKICAgIHN0YXRpYyBR
V2lkZ2V0TGlzdCAqdGx3TGlzdCgpOwogICAgc3RhdGljIFFXaWRnZXRNYXBwZXIgKm1hcHBlcjsK
ICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VBcHBs
aWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKICAgIGZyaWVuZCBjbGFzcyBRRm9u
dE1ldHJpY3M7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRJbmZvOwogICAgZnJpZW5kIGNsYXNzIFFF
VFdpZGdldDsKCiAgICBmcmllbmQgY2xhc3MgUUxheW91dDsKCgoKcHJpdmF0ZToKCiAgICBRV2lk
Z2V0KCBjb25zdCBRV2lkZ2V0ICYgKTsKICAgIFFXaWRnZXQgJm9wZXJhdG9yPSggY29uc3QgUVdp
ZGdldCAmICk7CgoKcHVibGljOgoKICAgIHZvaWQgc2V0UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUg
JiwgYm9vbCBpUmVhbGx5TWVhbkl0ICk7CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAm
LCBib29sIGlSZWFsbHlNZWFuSXQgKTsKfTsKCgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojp0ZXN0V1N0
YXRlKCB1aW50IGYgKSBjb25zdAp7IHJldHVybiAod2lkZ2V0X3N0YXRlICYgZikgIT0gMDsgfQoK
aW5saW5lIGJvb2wgUVdpZGdldDo6dGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdAp7IHJldHVy
biAod2lkZ2V0X2ZsYWdzICYgZikgIT0gMDsgfQoKCmlubGluZSBXSWQgUVdpZGdldDo6d2luSWQo
KSBjb25zdAp7IHJldHVybiB3aW5pZDsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNUb3BMZXZl
bCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfVG9wTGV2ZWwpOyB9CgppbmxpbmUg
Ym9vbCBRV2lkZ2V0Ojppc01vZGFsKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9N
b2RhbCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzUG9wdXAoKSBjb25zdAp7IHJldHVybiB0
ZXN0V0ZsYWdzKFdUeXBlX1BvcHVwKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNEZXNrdG9w
KCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9EZXNrdG9wKTsgfQoKaW5saW5lIGJv
b2wgUVdpZGdldDo6aXNFbmFibGVkKCkgY29uc3QKeyByZXR1cm4gIXRlc3RXU3RhdGUoV1N0YXRl
X0Rpc2FibGVkKTsgfQoKaW5saW5lIGNvbnN0IFFSZWN0ICZRV2lkZ2V0OjpnZW9tZXRyeSgpIGNv
bnN0CnsgcmV0dXJuIGNyZWN0OyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6OngoKSBjb25zdAp7IHJl
dHVybiBmcG9zLngoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0Ojp5KCkgY29uc3QKeyByZXR1cm4g
ZnBvcy55KCk7IH0KCmlubGluZSBRUG9pbnQgUVdpZGdldDo6cG9zKCkgY29uc3QKeyByZXR1cm4g
ZnBvczsgfQoKaW5saW5lIFFTaXplIFFXaWRnZXQ6OnNpemUoKSBjb25zdAp7IHJldHVybiBjcmVj
dC5zaXplKCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6d2lkdGgoKSBjb25zdAp7IHJldHVybiBj
cmVjdC53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6OmhlaWdodCgpIGNvbnN0CnsgcmV0
dXJuIGNyZWN0LmhlaWdodCgpOyB9CgppbmxpbmUgUVJlY3QgUVdpZGdldDo6cmVjdCgpIGNvbnN0
CnsgcmV0dXJuIFFSZWN0KDAsMCxjcmVjdC53aWR0aCgpLGNyZWN0LmhlaWdodCgpKTsgfQoKaW5s
aW5lIGludCBRV2lkZ2V0OjptaW5pbXVtV2lkdGgoKSBjb25zdAp7IHJldHVybiBtaW5pbXVtU2l6
ZSgpLndpZHRoKCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWluaW11bUhlaWdodCgpIGNvbnN0
CnsgcmV0dXJuIG1pbmltdW1TaXplKCkuaGVpZ2h0KCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6
bWF4aW11bVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNpemUoKS53aWR0aCgpOyB9Cgpp
bmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1IZWlnaHQoKSBjb25zdAp7IHJldHVybiBtYXhpbXVt
U2l6ZSgpLmhlaWdodCgpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRNaW5pbXVtU2l6ZSgg
Y29uc3QgUVNpemUgJnMgKQp7IHNldE1pbmltdW1TaXplKHMud2lkdGgoKSxzLmhlaWdodCgpKTsg
fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0TWF4aW11bVNpemUoIGNvbnN0IFFTaXplICZzICkK
eyBzZXRNYXhpbXVtU2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFX
aWRnZXQ6OnNldFNpemVJbmNyZW1lbnQoIGNvbnN0IFFTaXplICZzICkKeyBzZXRTaXplSW5jcmVt
ZW50KHMud2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0QmFz
ZVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRCYXNlU2l6ZShzLndpZHRoKCkscy5oZWlnaHQo
KSk7IH0KCmlubGluZSBjb25zdCBRQ29sb3IgJlFXaWRnZXQ6OmJhY2tncm91bmRDb2xvcigpIGNv
bnN0CnsgcmV0dXJuIGJnX2NvbDsgfQoKCmlubGluZSBjb25zdCBRUGFsZXR0ZSAmUVdpZGdldDo6
cGFsZXR0ZSgpIGNvbnN0CnsgcmV0dXJuIHBhbDsgfQoKCmlubGluZSBRRm9udCBRV2lkZ2V0Ojpm
b250KCkgY29uc3QKeyByZXR1cm4gZm50OyB9CgppbmxpbmUgUUZvbnRNZXRyaWNzIFFXaWRnZXQ6
OmZvbnRNZXRyaWNzKCkgY29uc3QKeyByZXR1cm4gUUZvbnRNZXRyaWNzKGZvbnQoKSk7IH0KCmlu
bGluZSBRRm9udEluZm8gUVdpZGdldDo6Zm9udEluZm8oKSBjb25zdAp7IHJldHVybiBRRm9udElu
Zm8oZm9udCgpKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aGFzTW91c2VUcmFja2luZygpIGNv
bnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX01vdXNlVHJhY2tpbmcpOyB9CgppbmxpbmUg
Ym9vbCBRV2lkZ2V0Ojppc0ZvY3VzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGlj
eSlmb2N1c19wb2xpY3kgIT0gTm9Gb2N1czsgfQoKaW5saW5lIFFXaWRnZXQ6OkZvY3VzUG9saWN5
IFFXaWRnZXQ6OmZvY3VzUG9saWN5KCkgY29uc3QKeyByZXR1cm4gKEZvY3VzUG9saWN5KWZvY3Vz
X3BvbGljeTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNVcGRhdGVzRW5hYmxlZCgpIGNvbnN0
CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0ZV9CbG9ja1VwZGF0ZXMpOyB9CgppbmxpbmUgdm9p
ZCBRV2lkZ2V0Ojp1cGRhdGUoIGNvbnN0IFFSZWN0ICZyICkKeyB1cGRhdGUoIHIueCgpLCByLnko
KSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlcGFp
bnQoKQp7IHJlcGFpbnQoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpLCBUUlVF
ICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQoIGJvb2wgZXJhc2UgKQp7IHJlcGFp
bnQoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpLCBlcmFzZSApOyB9Cgppbmxp
bmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCBjb25zdCBRUmVjdCAmciwgYm9vbCBlcmFzZSApCnsg
cmVwYWludCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGVyYXNlICk7IH0K
CmlubGluZSB2b2lkIFFXaWRnZXQ6OmVyYXNlKCkKeyBlcmFzZSggMCwgMCwgY3JlY3Qud2lkdGgo
KSwgY3JlY3QuaGVpZ2h0KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6ZXJhc2UoIGNvbnN0
IFFSZWN0ICZyICkKeyBlcmFzZSggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkg
KTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6Y2xvc2UoKQp7IHJldHVybiBjbG9zZSggRkFMU0Ug
KTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNWaXNpYmxlKCkgY29uc3QKeyByZXR1cm4gdGVz
dFdTdGF0ZShXU3RhdGVfVmlzaWJsZSk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzSGlkZGVu
KCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfRm9yY2VIaWRlKTsgfQoKaW5saW5l
IHZvaWQgUVdpZGdldDo6bW92ZSggY29uc3QgUVBvaW50ICZwICkKeyBtb3ZlKCBwLngoKSwgcC55
KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6cmVzaXplKCBjb25zdCBRU2l6ZSAmcyApCnsg
cmVzaXplKCBzLndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojpz
ZXRHZW9tZXRyeSggY29uc3QgUVJlY3QgJnIgKQp7IHNldEdlb21ldHJ5KCByLmxlZnQoKSwgci50
b3AoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmRy
YXdUZXh0KCBjb25zdCBRUG9pbnQgJnAsIGNvbnN0IFFTdHJpbmcgJnMgKQp7IGRyYXdUZXh0KCBw
LngoKSwgcC55KCksIHMgKTsgfQoKaW5saW5lIFFXaWRnZXQgKlFXaWRnZXQ6OnBhcmVudFdpZGdl
dCgpIGNvbnN0CnsgcmV0dXJuIChRV2lkZ2V0ICopUU9iamVjdDo6cGFyZW50KCk7IH0KCmlubGlu
ZSBRV2lkZ2V0TWFwcGVyICpRV2lkZ2V0Ojp3bWFwcGVyKCkKeyByZXR1cm4gbWFwcGVyOyB9Cgpp
bmxpbmUgdWludCBRV2lkZ2V0OjpnZXRXU3RhdGUoKSBjb25zdAp7IHJldHVybiB3aWRnZXRfc3Rh
dGU7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdTdGF0ZSggdWludCBmICkKeyB3aWRnZXRf
c3RhdGUgfD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xlYXJXU3RhdGUoIHVpbnQgZiAp
Cnsgd2lkZ2V0X3N0YXRlICY9IH5mOyB9CgppbmxpbmUgUXQ6OldGbGFncyBRV2lkZ2V0OjpnZXRX
RmxhZ3MoKSBjb25zdAp7IHJldHVybiB3aWRnZXRfZmxhZ3M7IH0KCmlubGluZSB2b2lkIFFXaWRn
ZXQ6OnNldFdGbGFncyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFncyB8PSBmOyB9CgppbmxpbmUg
dm9pZCBRV2lkZ2V0OjpjbGVhcldGbGFncyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFncyAmPSB+
ZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y29uc3RQb2xpc2goKSBjb25zdAp7CiAgICBpZiAo
ICF0ZXN0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hlZCkgKSB7CiAgICAgICAgUVdpZGdldCogdGhhdCA9
IChRV2lkZ2V0KikgdGhpczsKICAgICAgICB0aGF0LT5wb2xpc2goKTsKICAgICAgICB0aGF0LT5z
ZXRXU3RhdGUoV1N0YXRlX1BvbGlzaGVkKTsKICAgIH0KfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6
b3duQ3Vyc29yKCkgY29uc3QKewogICAgcmV0dXJuIHRlc3RXU3RhdGUoIFdTdGF0ZV9Pd25DdXJz
b3IgKTsKfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duRm9udCgpIGNvbnN0CnsKICAgIHJldHVy
biBvd25fZm9udDsKfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duUGFsZXR0ZSgpIGNvbnN0CnsK
ICAgIHJldHVybiBvd25fcGFsZXR0ZTsKfQoKCgoKCgpjbGFzcyBRRm9jdXNEYXRhOwpjbGFzcyBR
V1NNYW5hZ2VyOwoKCgoKc3RydWN0IFFUTFdFeHRyYSB7CiAgICBRU3RyaW5nIGNhcHRpb247CiAg
ICBRU3RyaW5nIGljb25UZXh0OwogICAgUVBpeG1hcCAqaWNvbjsKICAgIFFGb2N1c0RhdGEgKmZv
Y3VzRGF0YTsKICAgIFFTaXplIGZzaXplOwogICAgc2hvcnQgaW5jdywgaW5jaDsKICAgIHVpbnQg
aWNvbmljOiAxOwogICAgdWludCBmdWxsc2NyZWVuIDogMTsKICAgIHVpbnQgc2hvd01vZGU6IDI7
CiAgICBzaG9ydCBiYXNldywgYmFzZWg7CgogICAgV0lkIHBhcmVudFdpbklkOwogICAgdWludCBl
bWJlZGRlZCA6IDE7CiAgICB1aW50IHJlc2VydmVkOiAyOwogICAgdWludCBkbmQgOiAxOwogICAg
dWludCB1c3BvcyA6IDE7CiAgICB1aW50IHVzc2l6ZSA6IDE7CiAgICB2b2lkICp4aWM7CiAgICBR
UmVjdCBub3JtYWxHZW9tZXRyeTsKfTsKCgoKCgoKc3RydWN0IFFXRXh0cmEgewogICAgUV9JTlQx
NiBtaW53LCBtaW5oOwogICAgUV9JTlQxNiBtYXh3LCBtYXhoOwogICAgUVBpeG1hcCAqYmdfcGl4
OwogICAgUVdpZGdldCAqZm9jdXNfcHJveHk7CgogICAgUUN1cnNvciAqY3VyczsKCiAgICBRVExX
RXh0cmEgKnRvcGV4dHJhOwoKCgoKICAgIFdJZCB4RG5kUHJveHk7CgoKCgogICAgY2hhciBiZ19t
b2RlOwoKICAgIFFTdHlsZSogc3R5bGU7CgogICAgUVJlY3QgbWljcm9fZm9jdXNfaGludDsKICAg
IFFTaXplUG9saWN5IHNpemVfcG9saWN5OwogICAgdm9pZCAqIHBvc3RlZF9ldmVudHM7CgogICAg
dWludCBjaGlsZHJlbl91c2VfZG5kIDogMTsKCn07CgoKCgoKIGNvbnN0IGNoYXIgKnFHTFZlcnNp
b24oKTsKZXh0ZXJuICJDIiB7CnR5cGVkZWYgdW5zaWduZWQgaW50IEdMZW51bTsKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIEdMYm9vbGVhbjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0xiaXRmaWVsZDsK
dHlwZWRlZiB2b2lkIEdMdm9pZDsKdHlwZWRlZiBzaWduZWQgY2hhciBHTGJ5dGU7CnR5cGVkZWYg
c2hvcnQgR0xzaG9ydDsKdHlwZWRlZiBpbnQgR0xpbnQ7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBH
THVieXRlOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEdMdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVk
IGludCBHTHVpbnQ7CnR5cGVkZWYgaW50IEdMc2l6ZWk7CnR5cGVkZWYgZmxvYXQgR0xmbG9hdDsK
dHlwZWRlZiBmbG9hdCBHTGNsYW1wZjsKdHlwZWRlZiBkb3VibGUgR0xkb3VibGU7CnR5cGVkZWYg
ZG91YmxlIEdMY2xhbXBkOwpleHRlcm4gdm9pZCBnbENsZWFySW5kZXgoIEdMZmxvYXQgYyApOwoK
ZXh0ZXJuIHZvaWQgZ2xDbGVhckNvbG9yKCBHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBH
TGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSApOwoKZXh0ZXJuIHZvaWQgZ2xDbGVhciggR0xi
aXRmaWVsZCBtYXNrICk7CgpleHRlcm4gdm9pZCBnbEluZGV4TWFzayggR0x1aW50IG1hc2sgKTsK
CmV4dGVybiB2b2lkIGdsQ29sb3JNYXNrKCBHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4s
IEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEgKTsKCmV4dGVybiB2b2lkIGdsQWxwaGFG
dW5jKCBHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmICk7CgpleHRlcm4gdm9pZCBnbEJsZW5kRnVu
YyggR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yICk7CgpleHRlcm4gdm9pZCBnbExvZ2lj
T3AoIEdMZW51bSBvcGNvZGUgKTsKCmV4dGVybiB2b2lkIGdsQ3VsbEZhY2UoIEdMZW51bSBtb2Rl
ICk7CgpleHRlcm4gdm9pZCBnbEZyb250RmFjZSggR0xlbnVtIG1vZGUgKTsKCmV4dGVybiB2b2lk
IGdsUG9pbnRTaXplKCBHTGZsb2F0IHNpemUgKTsKCmV4dGVybiB2b2lkIGdsTGluZVdpZHRoKCBH
TGZsb2F0IHdpZHRoICk7CgpleHRlcm4gdm9pZCBnbExpbmVTdGlwcGxlKCBHTGludCBmYWN0b3Is
IEdMdXNob3J0IHBhdHRlcm4gKTsKCmV4dGVybiB2b2lkIGdsUG9seWdvbk1vZGUoIEdMZW51bSBm
YWNlLCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuIHZvaWQgZ2xQb2x5Z29uT2Zmc2V0KCBHTGZsb2F0
IGZhY3RvciwgR0xmbG9hdCB1bml0cyApOwoKZXh0ZXJuIHZvaWQgZ2xQb2x5Z29uU3RpcHBsZSgg
Y29uc3QgR0x1Ynl0ZSAqbWFzayApOwoKZXh0ZXJuIHZvaWQgZ2xHZXRQb2x5Z29uU3RpcHBsZSgg
R0x1Ynl0ZSAqbWFzayApOwoKZXh0ZXJuIHZvaWQgZ2xFZGdlRmxhZyggR0xib29sZWFuIGZsYWcg
KTsKCmV4dGVybiB2b2lkIGdsRWRnZUZsYWd2KCBjb25zdCBHTGJvb2xlYW4gKmZsYWcgKTsKCmV4
dGVybiB2b2lkIGdsU2Npc3NvciggR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwoKZXh0ZXJuIHZvaWQgZ2xDbGlwUGxhbmUoIEdMZW51bSBwbGFuZSwgY29u
c3QgR0xkb3VibGUgKmVxdWF0aW9uICk7CgpleHRlcm4gdm9pZCBnbEdldENsaXBQbGFuZSggR0xl
bnVtIHBsYW5lLCBHTGRvdWJsZSAqZXF1YXRpb24gKTsKCmV4dGVybiB2b2lkIGdsRHJhd0J1ZmZl
ciggR0xlbnVtIG1vZGUgKTsKCmV4dGVybiB2b2lkIGdsUmVhZEJ1ZmZlciggR0xlbnVtIG1vZGUg
KTsKCmV4dGVybiB2b2lkIGdsRW5hYmxlKCBHTGVudW0gY2FwICk7CgpleHRlcm4gdm9pZCBnbERp
c2FibGUoIEdMZW51bSBjYXAgKTsKCmV4dGVybiBHTGJvb2xlYW4gZ2xJc0VuYWJsZWQoIEdMZW51
bSBjYXAgKTsKCgpleHRlcm4gdm9pZCBnbEVuYWJsZUNsaWVudFN0YXRlKCBHTGVudW0gY2FwICk7
CgpleHRlcm4gdm9pZCBnbERpc2FibGVDbGllbnRTdGF0ZSggR0xlbnVtIGNhcCApOwoKCmV4dGVy
biB2b2lkIGdsR2V0Qm9vbGVhbnYoIEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMgKTsK
CmV4dGVybiB2b2lkIGdsR2V0RG91YmxldiggR0xlbnVtIHBuYW1lLCBHTGRvdWJsZSAqcGFyYW1z
ICk7CgpleHRlcm4gdm9pZCBnbEdldEZsb2F0diggR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJh
bXMgKTsKCmV4dGVybiB2b2lkIGdsR2V0SW50ZWdlcnYoIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBh
cmFtcyApOwoKCmV4dGVybiB2b2lkIGdsUHVzaEF0dHJpYiggR0xiaXRmaWVsZCBtYXNrICk7Cgpl
eHRlcm4gdm9pZCBnbFBvcEF0dHJpYiggdm9pZCApOwoKCmV4dGVybiB2b2lkIGdsUHVzaENsaWVu
dEF0dHJpYiggR0xiaXRmaWVsZCBtYXNrICk7CgpleHRlcm4gdm9pZCBnbFBvcENsaWVudEF0dHJp
Yiggdm9pZCApOwoKCmV4dGVybiBHTGludCBnbFJlbmRlck1vZGUoIEdMZW51bSBtb2RlICk7Cgpl
eHRlcm4gR0xlbnVtIGdsR2V0RXJyb3IoIHZvaWQgKTsKCmV4dGVybiBjb25zdCBHTHVieXRlKiBn
bEdldFN0cmluZyggR0xlbnVtIG5hbWUgKTsKCmV4dGVybiB2b2lkIGdsRmluaXNoKCB2b2lkICk7
CgpleHRlcm4gdm9pZCBnbEZsdXNoKCB2b2lkICk7CgpleHRlcm4gdm9pZCBnbEhpbnQoIEdMZW51
bSB0YXJnZXQsIEdMZW51bSBtb2RlICk7CgoKCgoKCgpleHRlcm4gdm9pZCBnbENsZWFyRGVwdGgo
IEdMY2xhbXBkIGRlcHRoICk7CgpleHRlcm4gdm9pZCBnbERlcHRoRnVuYyggR0xlbnVtIGZ1bmMg
KTsKCmV4dGVybiB2b2lkIGdsRGVwdGhNYXNrKCBHTGJvb2xlYW4gZmxhZyApOwoKZXh0ZXJuIHZv
aWQgZ2xEZXB0aFJhbmdlKCBHTGNsYW1wZCBuZWFyX3ZhbCwgR0xjbGFtcGQgZmFyX3ZhbCApOwoK
CgoKCgpleHRlcm4gdm9pZCBnbENsZWFyQWNjdW0oIEdMZmxvYXQgcmVkLCBHTGZsb2F0IGdyZWVu
LCBHTGZsb2F0IGJsdWUsIEdMZmxvYXQgYWxwaGEgKTsKCmV4dGVybiB2b2lkIGdsQWNjdW0oIEdM
ZW51bSBvcCwgR0xmbG9hdCB2YWx1ZSApOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZ2xNYXRyaXhNb2Rl
KCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuIHZvaWQgZ2xPcnRobyggR0xkb3VibGUgbGVmdCwgR0xk
b3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIGJv
dHRvbSwgR0xkb3VibGUgdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRv
dWJsZSBuZWFyX3ZhbCwgR0xkb3VibGUgZmFyX3ZhbCApOwoKZXh0ZXJuIHZvaWQgZ2xGcnVzdHVt
KCBHTGRvdWJsZSBsZWZ0LCBHTGRvdWJsZSByaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGRvdWJsZSBib3R0b20sIEdMZG91YmxlIHRvcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSBuZWFyX3ZhbCwgR0xkb3VibGUgZmFyX3ZhbCAp
OwoKZXh0ZXJuIHZvaWQgZ2xWaWV3cG9ydCggR0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQgKTsK
CmV4dGVybiB2b2lkIGdsUHVzaE1hdHJpeCggdm9pZCApOwoKZXh0ZXJuIHZvaWQgZ2xQb3BNYXRy
aXgoIHZvaWQgKTsKCmV4dGVybiB2b2lkIGdsTG9hZElkZW50aXR5KCB2b2lkICk7CgpleHRlcm4g
dm9pZCBnbExvYWRNYXRyaXhkKCBjb25zdCBHTGRvdWJsZSAqbSApOwpleHRlcm4gdm9pZCBnbExv
YWRNYXRyaXhmKCBjb25zdCBHTGZsb2F0ICptICk7CgpleHRlcm4gdm9pZCBnbE11bHRNYXRyaXhk
KCBjb25zdCBHTGRvdWJsZSAqbSApOwpleHRlcm4gdm9pZCBnbE11bHRNYXRyaXhmKCBjb25zdCBH
TGZsb2F0ICptICk7CgpleHRlcm4gdm9pZCBnbFJvdGF0ZWQoIEdMZG91YmxlIGFuZ2xlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdM
ZG91YmxlIHogKTsKZXh0ZXJuIHZvaWQgZ2xSb3RhdGVmKCBHTGZsb2F0IGFuZ2xlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0
IHogKTsKCmV4dGVybiB2b2lkIGdsU2NhbGVkKCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRv
dWJsZSB6ICk7CmV4dGVybiB2b2lkIGdsU2NhbGVmKCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6ICk7CgpleHRlcm4gdm9pZCBnbFRyYW5zbGF0ZWQoIEdMZG91YmxlIHgsIEdMZG91Ymxl
IHksIEdMZG91YmxlIHogKTsKZXh0ZXJuIHZvaWQgZ2xUcmFuc2xhdGVmKCBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSwgR0xmbG9hdCB6ICk7CgoKCgoKCgpleHRlcm4gR0xib29sZWFuIGdsSXNMaXN0KCBH
THVpbnQgbGlzdCApOwoKZXh0ZXJuIHZvaWQgZ2xEZWxldGVMaXN0cyggR0x1aW50IGxpc3QsIEdM
c2l6ZWkgcmFuZ2UgKTsKCmV4dGVybiBHTHVpbnQgZ2xHZW5MaXN0cyggR0xzaXplaSByYW5nZSAp
OwoKZXh0ZXJuIHZvaWQgZ2xOZXdMaXN0KCBHTHVpbnQgbGlzdCwgR0xlbnVtIG1vZGUgKTsKCmV4
dGVybiB2b2lkIGdsRW5kTGlzdCggdm9pZCApOwoKZXh0ZXJuIHZvaWQgZ2xDYWxsTGlzdCggR0x1
aW50IGxpc3QgKTsKCmV4dGVybiB2b2lkIGdsQ2FsbExpc3RzKCBHTHNpemVpIG4sIEdMZW51bSB0
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICps
aXN0cyApOwoKZXh0ZXJuIHZvaWQgZ2xMaXN0QmFzZSggR0x1aW50IGJhc2UgKTsKCgoKCgoKCmV4
dGVybiB2b2lkIGdsQmVnaW4oIEdMZW51bSBtb2RlICk7CgpleHRlcm4gdm9pZCBnbEVuZCggdm9p
ZCApOwoKCmV4dGVybiB2b2lkIGdsVmVydGV4MmQoIEdMZG91YmxlIHgsIEdMZG91YmxlIHkgKTsK
ZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXgyZiggR0xmbG9hdCB4LCBHTGZsb2F0IHkgKTsKZXh0ZXJuIHZv
aWQgZ2xWZXJ0ZXgyaSggR0xpbnQgeCwgR0xpbnQgeSApOwpleHRlcm4gdm9pZCBnbFZlcnRleDJz
KCBHTHNob3J0IHgsIEdMc2hvcnQgeSApOwoKZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXgzZCggR0xkb3Vi
bGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApOwpleHRlcm4gdm9pZCBnbFZlcnRleDNmKCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6ICk7CmV4dGVybiB2b2lkIGdsVmVydGV4M2ko
IEdMaW50IHgsIEdMaW50IHksIEdMaW50IHogKTsKZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXgzcyggR0xz
aG9ydCB4LCBHTHNob3J0IHksIEdMc2hvcnQgeiApOwoKZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXg0ZCgg
R0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiwgR0xkb3VibGUgdyApOwpleHRlcm4g
dm9pZCBnbFZlcnRleDRmKCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0
IHcgKTsKZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXg0aSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwg
R0xpbnQgdyApOwpleHRlcm4gdm9pZCBnbFZlcnRleDRzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSwg
R0xzaG9ydCB6LCBHTHNob3J0IHcgKTsKCmV4dGVybiB2b2lkIGdsVmVydGV4MmR2KCBjb25zdCBH
TGRvdWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbFZlcnRleDJmdiggY29uc3QgR0xmbG9hdCAqdiAp
OwpleHRlcm4gdm9pZCBnbFZlcnRleDJpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuIHZvaWQg
Z2xWZXJ0ZXgyc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiB2b2lkIGdsVmVydGV4M2R2
KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbFZlcnRleDNmdiggY29uc3QgR0xm
bG9hdCAqdiApOwpleHRlcm4gdm9pZCBnbFZlcnRleDNpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0
ZXJuIHZvaWQgZ2xWZXJ0ZXgzc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiB2b2lkIGds
VmVydGV4NGR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbFZlcnRleDRmdigg
Y29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gdm9pZCBnbFZlcnRleDRpdiggY29uc3QgR0xpbnQg
KnYgKTsKZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXg0c3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCgpleHRl
cm4gdm9pZCBnbE5vcm1hbDNiKCBHTGJ5dGUgbngsIEdMYnl0ZSBueSwgR0xieXRlIG56ICk7CmV4
dGVybiB2b2lkIGdsTm9ybWFsM2QoIEdMZG91YmxlIG54LCBHTGRvdWJsZSBueSwgR0xkb3VibGUg
bnogKTsKZXh0ZXJuIHZvaWQgZ2xOb3JtYWwzZiggR0xmbG9hdCBueCwgR0xmbG9hdCBueSwgR0xm
bG9hdCBueiApOwpleHRlcm4gdm9pZCBnbE5vcm1hbDNpKCBHTGludCBueCwgR0xpbnQgbnksIEdM
aW50IG56ICk7CmV4dGVybiB2b2lkIGdsTm9ybWFsM3MoIEdMc2hvcnQgbngsIEdMc2hvcnQgbnks
IEdMc2hvcnQgbnogKTsKCmV4dGVybiB2b2lkIGdsTm9ybWFsM2J2KCBjb25zdCBHTGJ5dGUgKnYg
KTsKZXh0ZXJuIHZvaWQgZ2xOb3JtYWwzZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiB2
b2lkIGdsTm9ybWFsM2Z2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiB2b2lkIGdsTm9ybWFs
M2l2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gdm9pZCBnbE5vcm1hbDNzdiggY29uc3QgR0xz
aG9ydCAqdiApOwoKCmV4dGVybiB2b2lkIGdsSW5kZXhkKCBHTGRvdWJsZSBjICk7CmV4dGVybiB2
b2lkIGdsSW5kZXhmKCBHTGZsb2F0IGMgKTsKZXh0ZXJuIHZvaWQgZ2xJbmRleGkoIEdMaW50IGMg
KTsKZXh0ZXJuIHZvaWQgZ2xJbmRleHMoIEdMc2hvcnQgYyApOwpleHRlcm4gdm9pZCBnbEluZGV4
dWIoIEdMdWJ5dGUgYyApOwoKZXh0ZXJuIHZvaWQgZ2xJbmRleGR2KCBjb25zdCBHTGRvdWJsZSAq
YyApOwpleHRlcm4gdm9pZCBnbEluZGV4ZnYoIGNvbnN0IEdMZmxvYXQgKmMgKTsKZXh0ZXJuIHZv
aWQgZ2xJbmRleGl2KCBjb25zdCBHTGludCAqYyApOwpleHRlcm4gdm9pZCBnbEluZGV4c3YoIGNv
bnN0IEdMc2hvcnQgKmMgKTsKZXh0ZXJuIHZvaWQgZ2xJbmRleHVidiggY29uc3QgR0x1Ynl0ZSAq
YyApOwoKZXh0ZXJuIHZvaWQgZ2xDb2xvcjNiKCBHTGJ5dGUgcmVkLCBHTGJ5dGUgZ3JlZW4sIEdM
Ynl0ZSBibHVlICk7CmV4dGVybiB2b2lkIGdsQ29sb3IzZCggR0xkb3VibGUgcmVkLCBHTGRvdWJs
ZSBncmVlbiwgR0xkb3VibGUgYmx1ZSApOwpleHRlcm4gdm9pZCBnbENvbG9yM2YoIEdMZmxvYXQg
cmVkLCBHTGZsb2F0IGdyZWVuLCBHTGZsb2F0IGJsdWUgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjNp
KCBHTGludCByZWQsIEdMaW50IGdyZWVuLCBHTGludCBibHVlICk7CmV4dGVybiB2b2lkIGdsQ29s
b3IzcyggR0xzaG9ydCByZWQsIEdMc2hvcnQgZ3JlZW4sIEdMc2hvcnQgYmx1ZSApOwpleHRlcm4g
dm9pZCBnbENvbG9yM3ViKCBHTHVieXRlIHJlZCwgR0x1Ynl0ZSBncmVlbiwgR0x1Ynl0ZSBibHVl
ICk7CmV4dGVybiB2b2lkIGdsQ29sb3IzdWkoIEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1
aW50IGJsdWUgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjN1cyggR0x1c2hvcnQgcmVkLCBHTHVzaG9y
dCBncmVlbiwgR0x1c2hvcnQgYmx1ZSApOwoKZXh0ZXJuIHZvaWQgZ2xDb2xvcjRiKCBHTGJ5dGUg
cmVkLCBHTGJ5dGUgZ3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xi
eXRlIGJsdWUsIEdMYnl0ZSBhbHBoYSApOwpleHRlcm4gdm9pZCBnbENvbG9yNGQoIEdMZG91Ymxl
IHJlZCwgR0xkb3VibGUgZ3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xkb3VibGUgYmx1ZSwgR0xkb3VibGUgYWxwaGEgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjRmKCBH
TGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGZsb2F0IGJsdWUsIEdMZmxvYXQgYWxwaGEgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjRp
KCBHTGludCByZWQsIEdMaW50IGdyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IGJsdWUsIEdMaW50IGFscGhhICk7CmV4dGVybiB2b2lkIGdsQ29sb3I0cyggR0xz
aG9ydCByZWQsIEdMc2hvcnQgZ3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaG9ydCBibHVlLCBHTHNob3J0IGFscGhhICk7CmV4dGVybiB2b2lkIGdsQ29sb3I0dWIo
IEdMdWJ5dGUgcmVkLCBHTHVieXRlIGdyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHVieXRlIGJsdWUsIEdMdWJ5dGUgYWxwaGEgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xv
cjR1aSggR0x1aW50IHJlZCwgR0x1aW50IGdyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHVpbnQgYmx1ZSwgR0x1aW50IGFscGhhICk7CmV4dGVybiB2b2lkIGdsQ29s
b3I0dXMoIEdMdXNob3J0IHJlZCwgR0x1c2hvcnQgZ3JlZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMdXNob3J0IGJsdWUsIEdMdXNob3J0IGFscGhhICk7CgoKZXh0ZXJu
IHZvaWQgZ2xDb2xvcjNidiggY29uc3QgR0xieXRlICp2ICk7CmV4dGVybiB2b2lkIGdsQ29sb3Iz
ZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiB2b2lkIGdsQ29sb3IzZnYoIGNvbnN0IEdM
ZmxvYXQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjNpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0
ZXJuIHZvaWQgZ2xDb2xvcjNzdiggY29uc3QgR0xzaG9ydCAqdiApOwpleHRlcm4gdm9pZCBnbENv
bG9yM3VidiggY29uc3QgR0x1Ynl0ZSAqdiApOwpleHRlcm4gdm9pZCBnbENvbG9yM3VpdiggY29u
c3QgR0x1aW50ICp2ICk7CmV4dGVybiB2b2lkIGdsQ29sb3IzdXN2KCBjb25zdCBHTHVzaG9ydCAq
diApOwoKZXh0ZXJuIHZvaWQgZ2xDb2xvcjRidiggY29uc3QgR0xieXRlICp2ICk7CmV4dGVybiB2
b2lkIGdsQ29sb3I0ZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiB2b2lkIGdsQ29sb3I0
ZnYoIGNvbnN0IEdMZmxvYXQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjRpdiggY29uc3QgR0xp
bnQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xDb2xvcjRzdiggY29uc3QgR0xzaG9ydCAqdiApOwpleHRl
cm4gdm9pZCBnbENvbG9yNHVidiggY29uc3QgR0x1Ynl0ZSAqdiApOwpleHRlcm4gdm9pZCBnbENv
bG9yNHVpdiggY29uc3QgR0x1aW50ICp2ICk7CmV4dGVybiB2b2lkIGdsQ29sb3I0dXN2KCBjb25z
dCBHTHVzaG9ydCAqdiApOwoKCmV4dGVybiB2b2lkIGdsVGV4Q29vcmQxZCggR0xkb3VibGUgcyAp
OwpleHRlcm4gdm9pZCBnbFRleENvb3JkMWYoIEdMZmxvYXQgcyApOwpleHRlcm4gdm9pZCBnbFRl
eENvb3JkMWkoIEdMaW50IHMgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDFzKCBHTHNob3J0IHMg
KTsKCmV4dGVybiB2b2lkIGdsVGV4Q29vcmQyZCggR0xkb3VibGUgcywgR0xkb3VibGUgdCApOwpl
eHRlcm4gdm9pZCBnbFRleENvb3JkMmYoIEdMZmxvYXQgcywgR0xmbG9hdCB0ICk7CmV4dGVybiB2
b2lkIGdsVGV4Q29vcmQyaSggR0xpbnQgcywgR0xpbnQgdCApOwpleHRlcm4gdm9pZCBnbFRleENv
b3JkMnMoIEdMc2hvcnQgcywgR0xzaG9ydCB0ICk7CgpleHRlcm4gdm9pZCBnbFRleENvb3JkM2Qo
IEdMZG91YmxlIHMsIEdMZG91YmxlIHQsIEdMZG91YmxlIHIgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhD
b29yZDNmKCBHTGZsb2F0IHMsIEdMZmxvYXQgdCwgR0xmbG9hdCByICk7CmV4dGVybiB2b2lkIGds
VGV4Q29vcmQzaSggR0xpbnQgcywgR0xpbnQgdCwgR0xpbnQgciApOwpleHRlcm4gdm9pZCBnbFRl
eENvb3JkM3MoIEdMc2hvcnQgcywgR0xzaG9ydCB0LCBHTHNob3J0IHIgKTsKCmV4dGVybiB2b2lk
IGdsVGV4Q29vcmQ0ZCggR0xkb3VibGUgcywgR0xkb3VibGUgdCwgR0xkb3VibGUgciwgR0xkb3Vi
bGUgcSApOwpleHRlcm4gdm9pZCBnbFRleENvb3JkNGYoIEdMZmxvYXQgcywgR0xmbG9hdCB0LCBH
TGZsb2F0IHIsIEdMZmxvYXQgcSApOwpleHRlcm4gdm9pZCBnbFRleENvb3JkNGkoIEdMaW50IHMs
IEdMaW50IHQsIEdMaW50IHIsIEdMaW50IHEgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDRzKCBH
THNob3J0IHMsIEdMc2hvcnQgdCwgR0xzaG9ydCByLCBHTHNob3J0IHEgKTsKCmV4dGVybiB2b2lk
IGdsVGV4Q29vcmQxZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiB2b2lkIGdsVGV4Q29v
cmQxZnYoIGNvbnN0IEdMZmxvYXQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDFpdiggY29u
c3QgR0xpbnQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDFzdiggY29uc3QgR0xzaG9ydCAq
diApOwoKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDJkdiggY29uc3QgR0xkb3VibGUgKnYgKTsKZXh0
ZXJuIHZvaWQgZ2xUZXhDb29yZDJmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gdm9pZCBn
bFRleENvb3JkMml2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gdm9pZCBnbFRleENvb3JkMnN2
KCBjb25zdCBHTHNob3J0ICp2ICk7CgpleHRlcm4gdm9pZCBnbFRleENvb3JkM2R2KCBjb25zdCBH
TGRvdWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbFRleENvb3JkM2Z2KCBjb25zdCBHTGZsb2F0ICp2
ICk7CmV4dGVybiB2b2lkIGdsVGV4Q29vcmQzaXYoIGNvbnN0IEdMaW50ICp2ICk7CmV4dGVybiB2
b2lkIGdsVGV4Q29vcmQzc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiB2b2lkIGdsVGV4
Q29vcmQ0ZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiB2b2lkIGdsVGV4Q29vcmQ0ZnYo
IGNvbnN0IEdMZmxvYXQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDRpdiggY29uc3QgR0xp
bnQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhDb29yZDRzdiggY29uc3QgR0xzaG9ydCAqdiApOwoK
CmV4dGVybiB2b2lkIGdsUmFzdGVyUG9zMmQoIEdMZG91YmxlIHgsIEdMZG91YmxlIHkgKTsKZXh0
ZXJuIHZvaWQgZ2xSYXN0ZXJQb3MyZiggR0xmbG9hdCB4LCBHTGZsb2F0IHkgKTsKZXh0ZXJuIHZv
aWQgZ2xSYXN0ZXJQb3MyaSggR0xpbnQgeCwgR0xpbnQgeSApOwpleHRlcm4gdm9pZCBnbFJhc3Rl
clBvczJzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSApOwoKZXh0ZXJuIHZvaWQgZ2xSYXN0ZXJQb3Mz
ZCggR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApOwpleHRlcm4gdm9pZCBnbFJh
c3RlclBvczNmKCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6ICk7CmV4dGVybiB2b2lk
IGdsUmFzdGVyUG9zM2koIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHogKTsKZXh0ZXJuIHZvaWQg
Z2xSYXN0ZXJQb3MzcyggR0xzaG9ydCB4LCBHTHNob3J0IHksIEdMc2hvcnQgeiApOwoKZXh0ZXJu
IHZvaWQgZ2xSYXN0ZXJQb3M0ZCggR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiwg
R0xkb3VibGUgdyApOwpleHRlcm4gdm9pZCBnbFJhc3RlclBvczRmKCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcgKTsKZXh0ZXJuIHZvaWQgZ2xSYXN0ZXJQb3M0aSgg
R0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyApOwpleHRlcm4gdm9pZCBnbFJhc3Rl
clBvczRzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSwgR0xzaG9ydCB6LCBHTHNob3J0IHcgKTsKCmV4
dGVybiB2b2lkIGdsUmFzdGVyUG9zMmR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gdm9p
ZCBnbFJhc3RlclBvczJmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gdm9pZCBnbFJhc3Rl
clBvczJpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xSYXN0ZXJQb3Myc3YoIGNv
bnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiB2b2lkIGdsUmFzdGVyUG9zM2R2KCBjb25zdCBHTGRv
dWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbFJhc3RlclBvczNmdiggY29uc3QgR0xmbG9hdCAqdiAp
OwpleHRlcm4gdm9pZCBnbFJhc3RlclBvczNpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuIHZv
aWQgZ2xSYXN0ZXJQb3Mzc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiB2b2lkIGdsUmFz
dGVyUG9zNGR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbFJhc3RlclBvczRm
diggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gdm9pZCBnbFJhc3RlclBvczRpdiggY29uc3Qg
R0xpbnQgKnYgKTsKZXh0ZXJuIHZvaWQgZ2xSYXN0ZXJQb3M0c3YoIGNvbnN0IEdMc2hvcnQgKnYg
KTsKCgpleHRlcm4gdm9pZCBnbFJlY3RkKCBHTGRvdWJsZSB4MSwgR0xkb3VibGUgeTEsIEdMZG91
YmxlIHgyLCBHTGRvdWJsZSB5MiApOwpleHRlcm4gdm9pZCBnbFJlY3RmKCBHTGZsb2F0IHgxLCBH
TGZsb2F0IHkxLCBHTGZsb2F0IHgyLCBHTGZsb2F0IHkyICk7CmV4dGVybiB2b2lkIGdsUmVjdGko
IEdMaW50IHgxLCBHTGludCB5MSwgR0xpbnQgeDIsIEdMaW50IHkyICk7CmV4dGVybiB2b2lkIGds
UmVjdHMoIEdMc2hvcnQgeDEsIEdMc2hvcnQgeTEsIEdMc2hvcnQgeDIsIEdMc2hvcnQgeTIgKTsK
CgpleHRlcm4gdm9pZCBnbFJlY3RkdiggY29uc3QgR0xkb3VibGUgKnYxLCBjb25zdCBHTGRvdWJs
ZSAqdjIgKTsKZXh0ZXJuIHZvaWQgZ2xSZWN0ZnYoIGNvbnN0IEdMZmxvYXQgKnYxLCBjb25zdCBH
TGZsb2F0ICp2MiApOwpleHRlcm4gdm9pZCBnbFJlY3RpdiggY29uc3QgR0xpbnQgKnYxLCBjb25z
dCBHTGludCAqdjIgKTsKZXh0ZXJuIHZvaWQgZ2xSZWN0c3YoIGNvbnN0IEdMc2hvcnQgKnYxLCBj
b25zdCBHTHNob3J0ICp2MiApOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZ2xWZXJ0ZXhQb2ludGVyKCBH
TGludCBzaXplLCBHTGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gdm9pZCBn
bE5vcm1hbFBvaW50ZXIoIEdMZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiB2
b2lkIGdsQ29sb3JQb2ludGVyKCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpw
dHIgKTsKCmV4dGVybiB2b2lkIGdsSW5kZXhQb2ludGVyKCBHTGVudW0gdHlwZSwgR0xzaXplaSBz
dHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lk
ICpwdHIgKTsKCmV4dGVybiB2b2lkIGdsVGV4Q29vcmRQb2ludGVyKCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHN0cmlkZSwgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiB2b2lkIGdsRWRnZUZsYWdQb2lu
dGVyKCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiB2b2lkIGds
R2V0UG9pbnRlcnYoIEdMZW51bSBwbmFtZSwgR0x2b2lkICoqcGFyYW1zICk7CgpleHRlcm4gdm9p
ZCBnbEFycmF5RWxlbWVudCggR0xpbnQgaSApOwoKZXh0ZXJuIHZvaWQgZ2xEcmF3QXJyYXlzKCBH
TGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQgKTsKCmV4dGVybiB2b2lkIGds
RHJhd0VsZW1lbnRzKCBHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
ICk7CgpleHRlcm4gdm9pZCBnbEludGVybGVhdmVkQXJyYXlzKCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdMdm9pZCAqcG9pbnRlciApOwoKCgoKCgpleHRlcm4gdm9pZCBnbFNoYWRlTW9kZWwoIEdM
ZW51bSBtb2RlICk7CgpleHRlcm4gdm9pZCBnbExpZ2h0ZiggR0xlbnVtIGxpZ2h0LCBHTGVudW0g
cG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuIHZvaWQgZ2xMaWdodGkoIEdMZW51bSBsaWdo
dCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSApOwpleHRlcm4gdm9pZCBnbExpZ2h0ZnYoIEdM
ZW51bSBsaWdodCwgR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHTGZsb2F0ICpwYXJhbXMgKTsKZXh0ZXJuIHZvaWQgZ2xMaWdodGl2KCBHTGVudW0g
bGlnaHQsIEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR0xpbnQgKnBhcmFtcyApOwoKZXh0ZXJuIHZvaWQgZ2xHZXRMaWdodGZ2KCBHTGVudW0gbGln
aHQsIEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqcGFyYW1zICk7CmV4dGVybiB2b2lkIGdsR2V0TGlnaHRpdiggR0xlbnVtIGxpZ2h0LCBH
TGVudW0gcG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50ICpw
YXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsTGlnaHRNb2RlbGYoIEdMZW51bSBwbmFtZSwgR0xmbG9h
dCBwYXJhbSApOwpleHRlcm4gdm9pZCBnbExpZ2h0TW9kZWxpKCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtICk7CmV4dGVybiB2b2lkIGdsTGlnaHRNb2RlbGZ2KCBHTGVudW0gcG5hbWUsIGNvbnN0
IEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gdm9pZCBnbExpZ2h0TW9kZWxpdiggR0xlbnVtIHBu
YW1lLCBjb25zdCBHTGludCAqcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbE1hdGVyaWFsZiggR0xl
bnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSApOwpleHRlcm4gdm9pZCBnbE1h
dGVyaWFsaSggR0xlbnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0gKTsKZXh0ZXJu
IHZvaWQgZ2xNYXRlcmlhbGZ2KCBHTGVudW0gZmFjZSwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZs
b2F0ICpwYXJhbXMgKTsKZXh0ZXJuIHZvaWQgZ2xNYXRlcmlhbGl2KCBHTGVudW0gZmFjZSwgR0xl
bnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbEdldE1hdGVy
aWFsZnYoIEdMZW51bSBmYWNlLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyApOwpleHRl
cm4gdm9pZCBnbEdldE1hdGVyaWFsaXYoIEdMZW51bSBmYWNlLCBHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsQ29sb3JNYXRlcmlhbCggR0xlbnVtIGZhY2UsIEdM
ZW51bSBtb2RlICk7CmV4dGVybiB2b2lkIGdsUGl4ZWxab29tKCBHTGZsb2F0IHhmYWN0b3IsIEdM
ZmxvYXQgeWZhY3RvciApOwoKZXh0ZXJuIHZvaWQgZ2xQaXhlbFN0b3JlZiggR0xlbnVtIHBuYW1l
LCBHTGZsb2F0IHBhcmFtICk7CmV4dGVybiB2b2lkIGdsUGl4ZWxTdG9yZWkoIEdMZW51bSBwbmFt
ZSwgR0xpbnQgcGFyYW0gKTsKCmV4dGVybiB2b2lkIGdsUGl4ZWxUcmFuc2ZlcmYoIEdMZW51bSBw
bmFtZSwgR0xmbG9hdCBwYXJhbSApOwpleHRlcm4gdm9pZCBnbFBpeGVsVHJhbnNmZXJpKCBHTGVu
dW0gcG5hbWUsIEdMaW50IHBhcmFtICk7CgpleHRlcm4gdm9pZCBnbFBpeGVsTWFwZnYoIEdMZW51
bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdMZmxvYXQgKnZhbHVlcyApOwpleHRlcm4gdm9pZCBnbFBpeGVsTWFwdWl2KCBHTGVu
dW0gbWFwLCBHTGludCBtYXBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR0x1aW50ICp2YWx1ZXMgKTsKZXh0ZXJuIHZvaWQgZ2xQaXhlbE1hcHVzdiggR0xl
bnVtIG1hcCwgR0xpbnQgbWFwc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdMdXNob3J0ICp2YWx1ZXMgKTsKCmV4dGVybiB2b2lkIGdsR2V0UGl4ZWxNYXBm
diggR0xlbnVtIG1hcCwgR0xmbG9hdCAqdmFsdWVzICk7CmV4dGVybiB2b2lkIGdsR2V0UGl4ZWxN
YXB1aXYoIEdMZW51bSBtYXAsIEdMdWludCAqdmFsdWVzICk7CmV4dGVybiB2b2lkIGdsR2V0UGl4
ZWxNYXB1c3YoIEdMZW51bSBtYXAsIEdMdXNob3J0ICp2YWx1ZXMgKTsKCmV4dGVybiB2b2lkIGds
Qml0bWFwKCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGZsb2F0IHhvcmlnLCBHTGZsb2F0IHlvcmlnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgeG1vdmUsIEdMZmxvYXQgeW1vdmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x1Ynl0ZSAqYml0bWFwICk7CgpleHRlcm4g
dm9pZCBnbFJlYWRQaXhlbHMoIEdMaW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lkICpwaXhlbHMgKTsKCmV4dGVy
biB2b2lkIGdsRHJhd1BpeGVscyggR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKnBpeGVs
cyApOwoKZXh0ZXJuIHZvaWQgZ2xDb3B5UGl4ZWxzKCBHTGludCB4LCBHTGludCB5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUgKTsKCgoK
CgoKCmV4dGVybiB2b2lkIGdsU3RlbmNpbEZ1bmMoIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdM
dWludCBtYXNrICk7CgpleHRlcm4gdm9pZCBnbFN0ZW5jaWxNYXNrKCBHTHVpbnQgbWFzayApOwoK
ZXh0ZXJuIHZvaWQgZ2xTdGVuY2lsT3AoIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51
bSB6cGFzcyApOwoKZXh0ZXJuIHZvaWQgZ2xDbGVhclN0ZW5jaWwoIEdMaW50IHMgKTsKCgoKCgoK
CmV4dGVybiB2b2lkIGdsVGV4R2VuZCggR0xlbnVtIGNvb3JkLCBHTGVudW0gcG5hbWUsIEdMZG91
YmxlIHBhcmFtICk7CmV4dGVybiB2b2lkIGdsVGV4R2VuZiggR0xlbnVtIGNvb3JkLCBHTGVudW0g
cG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuIHZvaWQgZ2xUZXhHZW5pKCBHTGVudW0gY29v
cmQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0gKTsKCmV4dGVybiB2b2lkIGdsVGV4R2VuZHYo
IEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGRvdWJsZSAqcGFyYW1zICk7CmV4
dGVybiB2b2lkIGdsVGV4R2VuZnYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBjb25zdCBH
TGZsb2F0ICpwYXJhbXMgKTsKZXh0ZXJuIHZvaWQgZ2xUZXhHZW5pdiggR0xlbnVtIGNvb3JkLCBH
TGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsR2V0VGV4
R2VuZHYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBHTGRvdWJsZSAqcGFyYW1zICk7CmV4
dGVybiB2b2lkIGdsR2V0VGV4R2VuZnYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0ICpwYXJhbXMgKTsKZXh0ZXJuIHZvaWQgZ2xHZXRUZXhHZW5pdiggR0xlbnVtIGNvb3JkLCBH
TGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKTsKCgpleHRlcm4gdm9pZCBnbFRleEVudmYoIEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSApOwpleHRlcm4gdm9pZCBn
bFRleEVudmkoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0gKTsKCmV4
dGVybiB2b2lkIGdsVGV4RW52ZnYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3Qg
R0xmbG9hdCAqcGFyYW1zICk7CmV4dGVybiB2b2lkIGdsVGV4RW52aXYoIEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApOwoKZXh0ZXJuIHZvaWQgZ2xHZXRU
ZXhFbnZmdiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMgKTsK
ZXh0ZXJuIHZvaWQgZ2xHZXRUZXhFbnZpdiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zICk7CgoKZXh0ZXJuIHZvaWQgZ2xUZXhQYXJhbWV0ZXJmKCBHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuIHZvaWQgZ2xUZXhQYXJh
bWV0ZXJpKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtICk7CgpleHRl
cm4gdm9pZCBnbFRleFBhcmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMZmxvYXQgKnBh
cmFtcyApOwpleHRlcm4gdm9pZCBnbFRleFBhcmFtZXRlcml2KCBHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsR2V0VGV4UGFyYW1ldGVyZnYoIEdMZW51
bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CmV4dGVybiB2b2lkIGdsR2V0VGV4UGFyYW1ldGVy
aXYoIEdMZW51bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsR2V0VGV4
TGV2ZWxQYXJhbWV0ZXJmdiggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBwbmFtZSwgR0xmbG9h
dCAqcGFyYW1zICk7CmV4dGVybiB2b2lkIGdsR2V0VGV4TGV2ZWxQYXJhbWV0ZXJpdiggR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApOwoKCmV4dGVybiB2b2lk
IGdsVGV4SW1hZ2UxRCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGludGVybmFsRm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTGludCBib3JkZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKnBpeGVs
cyApOwoKZXh0ZXJuIHZvaWQgZ2xUZXhJbWFnZTJEKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxGb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBi
b3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKnBpeGVscyApOwoKZXh0ZXJuIHZvaWQgZ2xHZXRU
ZXhJbWFnZSggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdm9pZCAqcGl4ZWxzICk7CgoKCgoKZXh0ZXJuIHZv
aWQgZ2xHZW5UZXh0dXJlcyggR0xzaXplaSBuLCBHTHVpbnQgKnRleHR1cmVzICk7CgpleHRlcm4g
dm9pZCBnbERlbGV0ZVRleHR1cmVzKCBHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqdGV4dHVyZXMp
OwoKZXh0ZXJuIHZvaWQgZ2xCaW5kVGV4dHVyZSggR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1
cmUgKTsKCmV4dGVybiB2b2lkIGdsUHJpb3JpdGl6ZVRleHR1cmVzKCBHTHNpemVpIG4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50ICp0ZXh0
dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
TGNsYW1wZiAqcHJpb3JpdGllcyApOwoKZXh0ZXJuIEdMYm9vbGVhbiBnbEFyZVRleHR1cmVzUmVz
aWRlbnQoIEdMc2l6ZWkgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHTHVpbnQgKnRleHR1cmVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqcmVzaWRlbmNlcyApOwoKZXh0
ZXJuIEdMYm9vbGVhbiBnbElzVGV4dHVyZSggR0x1aW50IHRleHR1cmUgKTsKCgpleHRlcm4gdm9p
ZCBnbFRleFN1YkltYWdlMUQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICpwaXhlbHMgKTsKCgpleHRlcm4gdm9pZCBnbFRleFN1YkltYWdlMkQoIEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdm9pZCAqcGl4ZWxz
ICk7CgoKZXh0ZXJuIHZvaWQgZ2xDb3B5VGV4SW1hZ2UxRCggR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB4LCBHTGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSB3aWR0aCwgR0xpbnQgYm9yZGVyICk7CgoKZXh0ZXJuIHZvaWQgZ2xDb3B5VGV4SW1hZ2Uy
RCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIgKTsKCgpleHRl
cm4gdm9pZCBnbENvcHlUZXhTdWJJbWFnZTFEKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTHNpemVpIHdpZHRoICk7CgoKZXh0ZXJuIHZvaWQgZ2xDb3B5VGV4U3ViSW1hZ2UyRCgg
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0ICk7CmV4dGVybiB2b2lkIGdsTWFwMWQoIEdMZW51bSB0YXJnZXQsIEdMZG91YmxlIHUx
LCBHTGRvdWJsZSB1MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0cmlk
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IG9yZGVyLCBjb25zdCBHTGRv
dWJsZSAqcG9pbnRzICk7CmV4dGVybiB2b2lkIGdsTWFwMWYoIEdMZW51bSB0YXJnZXQsIEdMZmxv
YXQgdTEsIEdMZmxvYXQgdTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBz
dHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBvcmRlciwgY29uc3Qg
R0xmbG9hdCAqcG9pbnRzICk7CgpleHRlcm4gdm9pZCBnbE1hcDJkKCBHTGVudW0gdGFyZ2V0LAog
ICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSB1MSwgR0xkb3VibGUgdTIsIEdMaW50IHVzdHJp
ZGUsIEdMaW50IHVvcmRlciwKICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgdjEsIEdMZG91
YmxlIHYyLCBHTGludCB2c3RyaWRlLCBHTGludCB2b3JkZXIsCiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdMZG91YmxlICpwb2ludHMgKTsKZXh0ZXJuIHZvaWQgZ2xNYXAyZiggR0xlbnVtIHRh
cmdldCwKICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCB1MSwgR0xmbG9hdCB1MiwgR0xpbnQg
dXN0cmlkZSwgR0xpbnQgdW9yZGVyLAogICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IHYxLCBH
TGZsb2F0IHYyLCBHTGludCB2c3RyaWRlLCBHTGludCB2b3JkZXIsCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdMZmxvYXQgKnBvaW50cyApOwoKZXh0ZXJuIHZvaWQgZ2xHZXRNYXBkdiggR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHF1ZXJ5LCBHTGRvdWJsZSAqdiApOwpleHRlcm4gdm9pZCBnbEdl
dE1hcGZ2KCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcXVlcnksIEdMZmxvYXQgKnYgKTsKZXh0ZXJu
IHZvaWQgZ2xHZXRNYXBpdiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHF1ZXJ5LCBHTGludCAqdiAp
OwoKZXh0ZXJuIHZvaWQgZ2xFdmFsQ29vcmQxZCggR0xkb3VibGUgdSApOwpleHRlcm4gdm9pZCBn
bEV2YWxDb29yZDFmKCBHTGZsb2F0IHUgKTsKCmV4dGVybiB2b2lkIGdsRXZhbENvb3JkMWR2KCBj
b25zdCBHTGRvdWJsZSAqdSApOwpleHRlcm4gdm9pZCBnbEV2YWxDb29yZDFmdiggY29uc3QgR0xm
bG9hdCAqdSApOwoKZXh0ZXJuIHZvaWQgZ2xFdmFsQ29vcmQyZCggR0xkb3VibGUgdSwgR0xkb3Vi
bGUgdiApOwpleHRlcm4gdm9pZCBnbEV2YWxDb29yZDJmKCBHTGZsb2F0IHUsIEdMZmxvYXQgdiAp
OwoKZXh0ZXJuIHZvaWQgZ2xFdmFsQ29vcmQyZHYoIGNvbnN0IEdMZG91YmxlICp1ICk7CmV4dGVy
biB2b2lkIGdsRXZhbENvb3JkMmZ2KCBjb25zdCBHTGZsb2F0ICp1ICk7CgpleHRlcm4gdm9pZCBn
bE1hcEdyaWQxZCggR0xpbnQgdW4sIEdMZG91YmxlIHUxLCBHTGRvdWJsZSB1MiApOwpleHRlcm4g
dm9pZCBnbE1hcEdyaWQxZiggR0xpbnQgdW4sIEdMZmxvYXQgdTEsIEdMZmxvYXQgdTIgKTsKCmV4
dGVybiB2b2lkIGdsTWFwR3JpZDJkKCBHTGludCB1biwgR0xkb3VibGUgdTEsIEdMZG91YmxlIHUy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHZuLCBHTGRvdWJsZSB2
MSwgR0xkb3VibGUgdjIgKTsKZXh0ZXJuIHZvaWQgZ2xNYXBHcmlkMmYoIEdMaW50IHVuLCBHTGZs
b2F0IHUxLCBHTGZsb2F0IHUyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHZuLCBHTGZsb2F0IHYxLCBHTGZsb2F0IHYyICk7CgpleHRlcm4gdm9pZCBnbEV2YWxQb2lu
dDEoIEdMaW50IGkgKTsKCmV4dGVybiB2b2lkIGdsRXZhbFBvaW50MiggR0xpbnQgaSwgR0xpbnQg
aiApOwoKZXh0ZXJuIHZvaWQgZ2xFdmFsTWVzaDEoIEdMZW51bSBtb2RlLCBHTGludCBpMSwgR0xp
bnQgaTIgKTsKCmV4dGVybiB2b2lkIGdsRXZhbE1lc2gyKCBHTGVudW0gbW9kZSwgR0xpbnQgaTEs
IEdMaW50IGkyLCBHTGludCBqMSwgR0xpbnQgajIgKTsKCgoKCgoKCmV4dGVybiB2b2lkIGdsRm9n
ZiggR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CgpleHRlcm4gdm9pZCBnbEZvZ2koIEdM
ZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0gKTsKCmV4dGVybiB2b2lkIGdsRm9nZnYoIEdMZW51bSBw
bmFtZSwgY29uc3QgR0xmbG9hdCAqcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbEZvZ2l2KCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKTsKCgoKCgoKCmV4dGVybiB2b2lkIGdsRmVl
ZGJhY2tCdWZmZXIoIEdMc2l6ZWkgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMZmxvYXQgKmJ1ZmZlciAp
OwoKZXh0ZXJuIHZvaWQgZ2xQYXNzVGhyb3VnaCggR0xmbG9hdCB0b2tlbiApOwoKZXh0ZXJuIHZv
aWQgZ2xTZWxlY3RCdWZmZXIoIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpidWZmZXIgKTsKCmV4dGVy
biB2b2lkIGdsSW5pdE5hbWVzKCB2b2lkICk7CgpleHRlcm4gdm9pZCBnbExvYWROYW1lKCBHTHVp
bnQgbmFtZSApOwoKZXh0ZXJuIHZvaWQgZ2xQdXNoTmFtZSggR0x1aW50IG5hbWUgKTsKCmV4dGVy
biB2b2lkIGdsUG9wTmFtZSggdm9pZCApOwoKCgoKZXh0ZXJuIHZvaWQgZ2xEcmF3UmFuZ2VFbGVt
ZW50cyggR0xlbnVtIG1vZGUsIEdMdWludCBzdGFydCwKICAgICAgICBHTHVpbnQgZW5kLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzICk7CgpleHRlcm4g
dm9pZCBnbFRleEltYWdlM0QoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGRlcHRo
LCBHTGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKCmV4dGVybiB2b2lkIGdsVGV4U3ViSW1hZ2Uz
RCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqcGl4ZWxzKTsKCmV4dGVybiB2b2lkIGdsQ29weVRl
eFN1YkltYWdlM0QoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB6b2Zm
c2V0LCBHTGludCB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB5LCBHTHNpemVpIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGhlaWdodCApOwoKCgoKZXh0ZXJuIHZvaWQgZ2xDb2xvclRh
YmxlKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KnRhYmxlICk7CgpleHRlcm4gdm9pZCBnbENvbG9yU3ViVGFibGUoIEdMZW51bSB0YXJnZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RhcnQsIEdMc2l6
ZWkgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHTHZvaWQgKmRhdGEgKTsKCmV4dGVybiB2b2lkIGdsQ29sb3JUYWJsZVBhcmFtZXRl
cml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMaW50ICpwYXJhbXMpOwoKZXh0ZXJuIHZvaWQg
Z2xDb2xvclRhYmxlUGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xmbG9hdCAq
cGFyYW1zKTsKCmV4dGVybiB2b2lkIGdsQ29weUNvbG9yU3ViVGFibGUoIEdMZW51bSB0YXJnZXQs
IEdMc2l6ZWkgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoICk7CgpleHRlcm4gdm9pZCBnbENvcHlD
b2xvclRhYmxlKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoICk7CgpleHRlcm4gdm9pZCBnbEdldENvbG9yVGFibGUoIEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB0eXBlLCBHTHZvaWQgKnRhYmxlICk7CgpleHRlcm4gdm9pZCBnbEdldENvbG9yVGFibGVQYXJh
bWV0ZXJmdiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKnBhcmFtcyApOwoKZXh0ZXJu
IHZvaWQgZ2xHZXRDb2xvclRhYmxlUGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCAqcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbEJsZW5kRXF1YXRpb24oIEdMZW51bSBtb2Rl
ICk7CgpleHRlcm4gdm9pZCBnbEJsZW5kQ29sb3IoIEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3Jl
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMY2xhbXBmIGJsdWUsIEdM
Y2xhbXBmIGFscGhhICk7CgpleHRlcm4gdm9pZCBnbEhpc3RvZ3JhbSggR0xlbnVtIHRhcmdldCwg
R0xzaXplaSB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMYm9vbGVhbiBzaW5rICk7CgpleHRlcm4gdm9pZCBnbFJlc2V0SGlz
dG9ncmFtKCBHTGVudW0gdGFyZ2V0ICk7CgpleHRlcm4gdm9pZCBnbEdldEhpc3RvZ3JhbSggR0xl
bnVtIHRhcmdldCwgR0xib29sZWFuIHJlc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMdm9pZCAqdmFsdWVzICk7CgpleHRlcm4gdm9pZCBnbEdldEhp
c3RvZ3JhbVBhcmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpwYXJhbXMg
KTsKCmV4dGVybiB2b2lkIGdsR2V0SGlzdG9ncmFtUGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsTWlubWF4KCBHTGVudW0gdGFy
Z2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuIHNpbmsgKTsKCmV4dGVybiB2b2lkIGdsUmVzZXRNaW5tYXgoIEdMZW51bSB0
YXJnZXQgKTsKCmV4dGVybiB2b2lkIGdsR2V0TWlubWF4KCBHTGVudW0gdGFyZ2V0LCBHTGJvb2xl
YW4gcmVzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdm9p
ZCAqdmFsdWVzICk7CgpleHRlcm4gdm9pZCBnbEdldE1pbm1heFBhcmFtZXRlcmZ2KCBHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGZsb2F0ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lkIGdsR2V0TWlubWF4UGFy
YW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiB2b2lk
IGdsQ29udm9sdXRpb25GaWx0ZXIxRCggR0xlbnVtIHRhcmdldCwKICAgICAgICBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAog
ICAgICAgIGNvbnN0IEdMdm9pZCAqaW1hZ2UgKTsKCmV4dGVybiB2b2lkIGdsQ29udm9sdXRpb25G
aWx0ZXIyRCggR0xlbnVtIHRhcmdldCwKICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAogICAgICAgIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmltYWdlICk7CgpleHRlcm4gdm9pZCBnbENvbnZvbHV0aW9u
UGFyYW1ldGVyZiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLAogICAgICAgIEdMZmxvYXQg
cGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbENvbnZvbHV0aW9uUGFyYW1ldGVyZnYoIEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwKICAgICAgICBjb25zdCBHTGZsb2F0ICpwYXJhbXMgKTsKCmV4
dGVybiB2b2lkIGdsQ29udm9sdXRpb25QYXJhbWV0ZXJpKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsCiAgICAgICAgR0xpbnQgcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbENvbnZvbHV0aW9u
UGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwKICAgICAgICBjb25zdCBH
TGludCAqcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbENvcHlDb252b2x1dGlvbkZpbHRlcjFEKCBH
TGVudW0gdGFyZ2V0LAogICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCApOwoKZXh0ZXJuIHZvaWQgZ2xDb3B5Q29udm9sdXRpb25GaWx0
ZXIyRCggR0xlbnVtIHRhcmdldCwKICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsCiAgICAgICAgR0xzaXplaSBoZWlnaHQpOwoKZXh0
ZXJuIHZvaWQgZ2xHZXRDb252b2x1dGlvbkZpbHRlciggR0xlbnVtIHRhcmdldCwgR0xlbnVtIGZv
cm1hdCwKICAgICAgICBHTGVudW0gdHlwZSwgR0x2b2lkICppbWFnZSApOwoKZXh0ZXJuIHZvaWQg
Z2xHZXRDb252b2x1dGlvblBhcmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
CiAgICAgICAgR0xmbG9hdCAqcGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbEdldENvbnZvbHV0aW9u
UGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwKICAgICAgICBHTGludCAq
cGFyYW1zICk7CgpleHRlcm4gdm9pZCBnbFNlcGFyYWJsZUZpbHRlcjJEKCBHTGVudW0gdGFyZ2V0
LAogICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsCiAgICAgICAgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
cm93LCBjb25zdCBHTHZvaWQgKmNvbHVtbiApOwoKZXh0ZXJuIHZvaWQgZ2xHZXRTZXBhcmFibGVG
aWx0ZXIoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBmb3JtYXQsCiAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdm9pZCAqcm93LCBHTHZvaWQgKmNvbHVtbiwgR0x2b2lkICpzcGFuICk7CgoKCgoKZXh0ZXJu
IHZvaWQgZ2xBY3RpdmVUZXh0dXJlKCBHTGVudW0gdGV4dHVyZSApOwoKZXh0ZXJuIHZvaWQgZ2xD
bGllbnRBY3RpdmVUZXh0dXJlKCBHTGVudW0gdGV4dHVyZSApOwoKZXh0ZXJuIHZvaWQgZ2xDb21w
cmVzc2VkVGV4SW1hZ2UxRCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3QgR0x2b2lkICpkYXRhICk7CgpleHRlcm4gdm9pZCBnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3QgR0x2b2lkICpkYXRhICk7CgpleHRlcm4gdm9pZCBnbENvbXByZXNzZWRUZXhJ
bWFnZTNEKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9y
ZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkICpkYXRhICk7CgpleHRlcm4gdm9p
ZCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTFEKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IEdMdm9pZCAqZGF0YSApOwoKZXh0ZXJuIHZvaWQgZ2xDb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkICpkYXRhICk7CgpleHRlcm4gdm9pZCBn
bENvbXByZXNzZWRUZXhTdWJJbWFnZTNEKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCBHTHZvaWQgKmRhdGEgKTsKCmV4dGVybiB2b2lkIGdsR2V0Q29tcHJlc3Nl
ZFRleEltYWdlKCBHTGVudW0gdGFyZ2V0LCBHTGludCBsb2QsIEdMdm9pZCAqaW1nICk7CgpleHRl
cm4gdm9pZCBnbE11bHRpVGV4Q29vcmQxZCggR0xlbnVtIHRhcmdldCwgR0xkb3VibGUgcyApOwoK
ZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMWR2KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBHTGRv
dWJsZSAqdiApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMWYoIEdMZW51bSB0YXJnZXQs
IEdMZmxvYXQgcyApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMWZ2KCBHTGVudW0gdGFy
Z2V0LCBjb25zdCBHTGZsb2F0ICp2ICk7CgpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQxaSgg
R0xlbnVtIHRhcmdldCwgR0xpbnQgcyApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMWl2
KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBHTGludCAqdiApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRl
eENvb3JkMXMoIEdMZW51bSB0YXJnZXQsIEdMc2hvcnQgcyApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0
aVRleENvb3JkMXN2KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBHTHNob3J0ICp2ICk7CgpleHRlcm4g
dm9pZCBnbE11bHRpVGV4Q29vcmQyZCggR0xlbnVtIHRhcmdldCwgR0xkb3VibGUgcywgR0xkb3Vi
bGUgdCApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMmR2KCBHTGVudW0gdGFyZ2V0LCBj
b25zdCBHTGRvdWJsZSAqdiApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMmYoIEdMZW51
bSB0YXJnZXQsIEdMZmxvYXQgcywgR0xmbG9hdCB0ICk7CgpleHRlcm4gdm9pZCBnbE11bHRpVGV4
Q29vcmQyZnYoIEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnYgKTsKCmV4dGVybiB2b2lk
IGdsTXVsdGlUZXhDb29yZDJpKCBHTGVudW0gdGFyZ2V0LCBHTGludCBzLCBHTGludCB0ICk7Cgpl
eHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQyaXYoIEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMaW50
ICp2ICk7CgpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQycyggR0xlbnVtIHRhcmdldCwgR0xz
aG9ydCBzLCBHTHNob3J0IHQgKTsKCmV4dGVybiB2b2lkIGdsTXVsdGlUZXhDb29yZDJzdiggR0xl
bnVtIHRhcmdldCwgY29uc3QgR0xzaG9ydCAqdiApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENv
b3JkM2QoIEdMZW51bSB0YXJnZXQsIEdMZG91YmxlIHMsIEdMZG91YmxlIHQsIEdMZG91YmxlIHIg
KTsKCmV4dGVybiB2b2lkIGdsTXVsdGlUZXhDb29yZDNkdiggR0xlbnVtIHRhcmdldCwgY29uc3Qg
R0xkb3VibGUgKnYgKTsKCmV4dGVybiB2b2lkIGdsTXVsdGlUZXhDb29yZDNmKCBHTGVudW0gdGFy
Z2V0LCBHTGZsb2F0IHMsIEdMZmxvYXQgdCwgR0xmbG9hdCByICk7CgpleHRlcm4gdm9pZCBnbE11
bHRpVGV4Q29vcmQzZnYoIEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnYgKTsKCmV4dGVy
biB2b2lkIGdsTXVsdGlUZXhDb29yZDNpKCBHTGVudW0gdGFyZ2V0LCBHTGludCBzLCBHTGludCB0
LCBHTGludCByICk7CgpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQzaXYoIEdMZW51bSB0YXJn
ZXQsIGNvbnN0IEdMaW50ICp2ICk7CgpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQzcyggR0xl
bnVtIHRhcmdldCwgR0xzaG9ydCBzLCBHTHNob3J0IHQsIEdMc2hvcnQgciApOwoKZXh0ZXJuIHZv
aWQgZ2xNdWx0aVRleENvb3JkM3N2KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBHTHNob3J0ICp2ICk7
CgpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQ0ZCggR0xlbnVtIHRhcmdldCwgR0xkb3VibGUg
cywgR0xkb3VibGUgdCwgR0xkb3VibGUgciwgR0xkb3VibGUgcSApOwoKZXh0ZXJuIHZvaWQgZ2xN
dWx0aVRleENvb3JkNGR2KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBHTGRvdWJsZSAqdiApOwoKZXh0
ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNGYoIEdMZW51bSB0YXJnZXQsIEdMZmxvYXQgcywgR0xm
bG9hdCB0LCBHTGZsb2F0IHIsIEdMZmxvYXQgcSApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENv
b3JkNGZ2KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2ICk7CgpleHRlcm4gdm9pZCBn
bE11bHRpVGV4Q29vcmQ0aSggR0xlbnVtIHRhcmdldCwgR0xpbnQgcywgR0xpbnQgdCwgR0xpbnQg
ciwgR0xpbnQgcSApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNGl2KCBHTGVudW0gdGFy
Z2V0LCBjb25zdCBHTGludCAqdiApOwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNHMoIEdM
ZW51bSB0YXJnZXQsIEdMc2hvcnQgcywgR0xzaG9ydCB0LCBHTHNob3J0IHIsIEdMc2hvcnQgcSAp
OwoKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNHN2KCBHTGVudW0gdGFyZ2V0LCBjb25zdCBH
THNob3J0ICp2ICk7CgoKZXh0ZXJuIHZvaWQgZ2xMb2FkVHJhbnNwb3NlTWF0cml4ZCggY29uc3Qg
R0xkb3VibGUgbVsxNl0gKTsKCmV4dGVybiB2b2lkIGdsTG9hZFRyYW5zcG9zZU1hdHJpeGYoIGNv
bnN0IEdMZmxvYXQgbVsxNl0gKTsKCmV4dGVybiB2b2lkIGdsTXVsdFRyYW5zcG9zZU1hdHJpeGQo
IGNvbnN0IEdMZG91YmxlIG1bMTZdICk7CgpleHRlcm4gdm9pZCBnbE11bHRUcmFuc3Bvc2VNYXRy
aXhmKCBjb25zdCBHTGZsb2F0IG1bMTZdICk7CgpleHRlcm4gdm9pZCBnbFNhbXBsZUNvdmVyYWdl
KCBHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCApOwpleHRlcm4gdm9pZCBnbEFjdGl2
ZVRleHR1cmVBUkIoR0xlbnVtIHRleHR1cmUpOwpleHRlcm4gdm9pZCBnbENsaWVudEFjdGl2ZVRl
eHR1cmVBUkIoR0xlbnVtIHRleHR1cmUpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQxZEFS
QihHTGVudW0gdGFyZ2V0LCBHTGRvdWJsZSBzKTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3Jk
MWR2QVJCKEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMZG91YmxlICp2KTsKZXh0ZXJuIHZvaWQgZ2xN
dWx0aVRleENvb3JkMWZBUkIoR0xlbnVtIHRhcmdldCwgR0xmbG9hdCBzKTsKZXh0ZXJuIHZvaWQg
Z2xNdWx0aVRleENvb3JkMWZ2QVJCKEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnYpOwpl
eHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQxaUFSQihHTGVudW0gdGFyZ2V0LCBHTGludCBzKTsK
ZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMWl2QVJCKEdMZW51bSB0YXJnZXQsIGNvbnN0IEdM
aW50ICp2KTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMXNBUkIoR0xlbnVtIHRhcmdldCwg
R0xzaG9ydCBzKTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkMXN2QVJCKEdMZW51bSB0YXJn
ZXQsIGNvbnN0IEdMc2hvcnQgKnYpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQyZEFSQihH
TGVudW0gdGFyZ2V0LCBHTGRvdWJsZSBzLCBHTGRvdWJsZSB0KTsKZXh0ZXJuIHZvaWQgZ2xNdWx0
aVRleENvb3JkMmR2QVJCKEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMZG91YmxlICp2KTsKZXh0ZXJu
IHZvaWQgZ2xNdWx0aVRleENvb3JkMmZBUkIoR0xlbnVtIHRhcmdldCwgR0xmbG9hdCBzLCBHTGZs
b2F0IHQpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQyZnZBUkIoR0xlbnVtIHRhcmdldCwg
Y29uc3QgR0xmbG9hdCAqdik7CmV4dGVybiB2b2lkIGdsTXVsdGlUZXhDb29yZDJpQVJCKEdMZW51
bSB0YXJnZXQsIEdMaW50IHMsIEdMaW50IHQpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQy
aXZBUkIoR0xlbnVtIHRhcmdldCwgY29uc3QgR0xpbnQgKnYpOwpleHRlcm4gdm9pZCBnbE11bHRp
VGV4Q29vcmQyc0FSQihHTGVudW0gdGFyZ2V0LCBHTHNob3J0IHMsIEdMc2hvcnQgdCk7CmV4dGVy
biB2b2lkIGdsTXVsdGlUZXhDb29yZDJzdkFSQihHTGVudW0gdGFyZ2V0LCBjb25zdCBHTHNob3J0
ICp2KTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkM2RBUkIoR0xlbnVtIHRhcmdldCwgR0xk
b3VibGUgcywgR0xkb3VibGUgdCwgR0xkb3VibGUgcik7CmV4dGVybiB2b2lkIGdsTXVsdGlUZXhD
b29yZDNkdkFSQihHTGVudW0gdGFyZ2V0LCBjb25zdCBHTGRvdWJsZSAqdik7CmV4dGVybiB2b2lk
IGdsTXVsdGlUZXhDb29yZDNmQVJCKEdMZW51bSB0YXJnZXQsIEdMZmxvYXQgcywgR0xmbG9hdCB0
LCBHTGZsb2F0IHIpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQzZnZBUkIoR0xlbnVtIHRh
cmdldCwgY29uc3QgR0xmbG9hdCAqdik7CmV4dGVybiB2b2lkIGdsTXVsdGlUZXhDb29yZDNpQVJC
KEdMZW51bSB0YXJnZXQsIEdMaW50IHMsIEdMaW50IHQsIEdMaW50IHIpOwpleHRlcm4gdm9pZCBn
bE11bHRpVGV4Q29vcmQzaXZBUkIoR0xlbnVtIHRhcmdldCwgY29uc3QgR0xpbnQgKnYpOwpleHRl
cm4gdm9pZCBnbE11bHRpVGV4Q29vcmQzc0FSQihHTGVudW0gdGFyZ2V0LCBHTHNob3J0IHMsIEdM
c2hvcnQgdCwgR0xzaG9ydCByKTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkM3N2QVJCKEdM
ZW51bSB0YXJnZXQsIGNvbnN0IEdMc2hvcnQgKnYpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29v
cmQ0ZEFSQihHTGVudW0gdGFyZ2V0LCBHTGRvdWJsZSBzLCBHTGRvdWJsZSB0LCBHTGRvdWJsZSBy
LCBHTGRvdWJsZSBxKTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNGR2QVJCKEdMZW51bSB0
YXJnZXQsIGNvbnN0IEdMZG91YmxlICp2KTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNGZB
UkIoR0xlbnVtIHRhcmdldCwgR0xmbG9hdCBzLCBHTGZsb2F0IHQsIEdMZmxvYXQgciwgR0xmbG9h
dCBxKTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNGZ2QVJCKEdMZW51bSB0YXJnZXQsIGNv
bnN0IEdMZmxvYXQgKnYpOwpleHRlcm4gdm9pZCBnbE11bHRpVGV4Q29vcmQ0aUFSQihHTGVudW0g
dGFyZ2V0LCBHTGludCBzLCBHTGludCB0LCBHTGludCByLCBHTGludCBxKTsKZXh0ZXJuIHZvaWQg
Z2xNdWx0aVRleENvb3JkNGl2QVJCKEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMaW50ICp2KTsKZXh0
ZXJuIHZvaWQgZ2xNdWx0aVRleENvb3JkNHNBUkIoR0xlbnVtIHRhcmdldCwgR0xzaG9ydCBzLCBH
THNob3J0IHQsIEdMc2hvcnQgciwgR0xzaG9ydCBxKTsKZXh0ZXJuIHZvaWQgZ2xNdWx0aVRleENv
b3JkNHN2QVJCKEdMZW51bSB0YXJnZXQsIGNvbnN0IEdMc2hvcnQgKnYpOwoKCgoKZXh0ZXJuICJD
IiB7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xMT0FEVFJBTlNQT1NFTUFUUklYRkFSQlBST0MpIChj
b25zdCBHTGZsb2F0ICptKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTExPQURUUkFOU1BPU0VNQVRS
SVhEQVJCUFJPQykgKGNvbnN0IEdMZG91YmxlICptKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE1V
TFRUUkFOU1BPU0VNQVRSSVhGQVJCUFJPQykgKGNvbnN0IEdMZmxvYXQgKm0pOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMTVVMVFRSQU5TUE9TRU1BVFJJWERBUkJQUk9DKSAoY29uc3QgR0xkb3VibGUg
Km0pOwoKCgoKCgoKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNBTVBMRUNPVkVSQUdFQVJCUFJPQykg
KEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TENPTVBSRVNTRURURVhJTUFHRTNEQVJCUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZv
aWQgKmRhdGEpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09NUFJFU1NFRFRFWElNQUdFMkRBUkJQ
Uk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IEdMdm9pZCAqZGF0YSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT01QUkVT
U0VEVEVYSU1BR0UxREFSQlBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCBHTHZvaWQgKmRhdGEpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09NUFJF
U1NFRFRFWFNVQklNQUdFM0RBUkJQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3QgR0x2b2lkICpkYXRhKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPTVBS
RVNTRURURVhTVUJJTUFHRTJEQVJCUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCAqZGF0YSk7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT01QUkVTU0VEVEVYU1VCSU1BR0UxREFSQlBST0MpIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCAqZGF0YSk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xHRVRDT01QUkVTU0VEVEVYSU1BR0VBUkJQUk9DKSAoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIHZvaWQgKmltZyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xQ
T0lOVFBBUkFNRVRFUkZBUkJQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFBPSU5UUEFSQU1FVEVSRlZBUkJQUk9DKSAoR0xlbnVtIHBuYW1l
LCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0VJR0hUQlZB
UkJQUk9DKSAoR0xpbnQgc2l6ZSwgY29uc3QgR0xieXRlICp3ZWlnaHRzKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTFdFSUdIVFNWQVJCUFJPQykgKEdMaW50IHNpemUsIGNvbnN0IEdMc2hvcnQgKndl
aWdodHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0VJR0hUSVZBUkJQUk9DKSAoR0xpbnQgc2l6
ZSwgY29uc3QgR0xpbnQgKndlaWdodHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0VJR0hURlZB
UkJQUk9DKSAoR0xpbnQgc2l6ZSwgY29uc3QgR0xmbG9hdCAqd2VpZ2h0cyk7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xXRUlHSFREVkFSQlBST0MpIChHTGludCBzaXplLCBjb25zdCBHTGRvdWJsZSAq
d2VpZ2h0cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXRUlHSFRVQlZBUkJQUk9DKSAoR0xpbnQg
c2l6ZSwgY29uc3QgR0x1Ynl0ZSAqd2VpZ2h0cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXRUlH
SFRVU1ZBUkJQUk9DKSAoR0xpbnQgc2l6ZSwgY29uc3QgR0x1c2hvcnQgKndlaWdodHMpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMV0VJR0hUVUlWQVJCUFJPQykgKEdMaW50IHNpemUsIGNvbnN0IEdM
dWludCAqd2VpZ2h0cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXRUlHSFRQT0lOVEVSQVJCUFJP
QykgKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lk
ICpwb2ludGVyKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEJMRU5EQVJCUFJPQykgKEdM
aW50IGNvdW50KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENVUlJFTlRQQUxFVFRFTUFUUklYQVJC
UFJPQykgKEdMaW50IGluZGV4KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE1BVFJJWElOREVYVUJW
QVJCUFJPQykgKEdMaW50IHNpemUsIGNvbnN0IEdMdWJ5dGUgKmluZGljZXMpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMTUFUUklYSU5ERVhVU1ZBUkJQUk9DKSAoR0xpbnQgc2l6ZSwgY29uc3QgR0x1
c2hvcnQgKmluZGljZXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMTUFUUklYSU5ERVhVSVZBUkJQ
Uk9DKSAoR0xpbnQgc2l6ZSwgY29uc3QgR0x1aW50ICppbmRpY2VzKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTE1BVFJJWElOREVYUE9JTlRFUkFSQlBST0MpIChHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlcik7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xXSU5ET1dQT1MyREFSQlBST0MpIChHTGRvdWJsZSB4LCBHTGRvdWJsZSB5KTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzJEVkFSQlBST0MpIChjb25zdCBHTGRvdWJsZSAq
dik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MyRkFSQlBST0MpIChHTGZsb2F0IHgs
IEdMZmxvYXQgeSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MyRlZBUkJQUk9DKSAo
Y29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MySUFSQlBS
T0MpIChHTGludCB4LCBHTGludCB5KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzJJ
VkFSQlBST0MpIChjb25zdCBHTGludCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQ
T1MyU0FSQlBST0MpIChHTHNob3J0IHgsIEdMc2hvcnQgeSk7CnR5cGVkZWYgdm9pZCAoICogUEZO
R0xXSU5ET1dQT1MyU1ZBUkJQUk9DKSAoY29uc3QgR0xzaG9ydCAqdik7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xXSU5ET1dQT1MzREFSQlBST0MpIChHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRv
dWJsZSB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzNEVkFSQlBST0MpIChjb25z
dCBHTGRvdWJsZSAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MzRkFSQlBST0Mp
IChHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TFdJTkRPV1BPUzNGVkFSQlBST0MpIChjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTFdJTkRPV1BPUzNJQVJCUFJPQykgKEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TM0lWQVJCUFJPQykgKGNvbnN0IEdMaW50ICp2
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzNTQVJCUFJPQykgKEdMc2hvcnQgeCwg
R0xzaG9ydCB5LCBHTHNob3J0IHopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TM1NW
QVJCUFJPQykgKGNvbnN0IEdMc2hvcnQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQkxFTkRD
T0xPUkVYVFBST0MpIChHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVl
LCBHTGNsYW1wZiBhbHBoYSk7CgoKCgoKCgp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUE9MWUdPTk9G
RlNFVEVYVFBST0MpIChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCBiaWFzKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTFRFWElNQUdFM0RFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqcGl4ZWxzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRFWFNVQklNQUdFM0RF
WFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpw
aXhlbHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUVEVYRklMVEVSRlVOQ1NHSVNQUk9DKSAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGZpbHRlciwgR0xmbG9hdCAqd2VpZ2h0cyk7CnR5cGVkZWYg
dm9pZCAoICogUEZOR0xURVhGSUxURVJGVU5DU0dJU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gZmlsdGVyLCBHTHNpemVpIG4sIGNvbnN0IEdMZmxvYXQgKndlaWdodHMpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMVEVYU1VCSU1BR0UxREVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqcGl4ZWxzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRFWFNV
QklNQUdFMkRFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpwaXhlbHMpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMQ09QWVRFWElNQUdFMURFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xpbnQgYm9yZGVyKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPUFlURVhJTUFHRTJERVhU
UFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBi
b3JkZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09QWVRFWFNVQklNQUdFMURFWFRQUk9DKSAo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09QWVRFWFNVQklNQUdF
MkRFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPUFlURVhTVUJJTUFHRTNERVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRISVNUT0dSQU1FWFRQUk9DKSAoR0xlbnVt
IHRhcmdldCwgR0xib29sZWFuIHJlc2V0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2
b2lkICp2YWx1ZXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUSElTVE9HUkFNUEFSQU1FVEVS
RlZFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUSElTVE9HUkFNUEFSQU1FVEVSSVZFWFRQUk9DKSAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTEdFVE1JTk1BWEVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGJvb2xlYW4gcmVz
ZXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQgKnZhbHVlcyk7CnR5cGVkZWYg
dm9pZCAoICogUEZOR0xHRVRNSU5NQVhQQVJBTUVURVJGVkVYVFBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xH
RVRNSU5NQVhQQVJBTUVURVJJVkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMSElTVE9HUkFNRVhUUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xi
b29sZWFuIHNpbmspOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMTUlOTUFYRVhUUFJPQykgKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xib29sZWFuIHNpbmspOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMUkVTRVRISVNUT0dSQU1FWFRQUk9DKSAoR0xlbnVtIHRhcmdldCk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xSRVNFVE1JTk1BWEVYVFBST0MpIChHTGVudW0gdGFyZ2V0KTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTENPTlZPTFVUSU9ORklMVEVSMURFWFRQUk9DKSAoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbWFnZSk7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xDT05WT0xVVElPTkZJTFRFUjJERVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmltYWdlKTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTENPTlZPTFVUSU9OUEFSQU1FVEVSRkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMZmxvYXQgcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPTlZPTFVUSU9O
UEFSQU1FVEVSRlZFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBH
TGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09OVk9MVVRJT05QQVJBTUVU
RVJJRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW1zKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTENPTlZPTFVUSU9OUEFSQU1FVEVSSVZFWFRQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTENPUFlDT05WT0xVVElPTkZJTFRFUjFERVhUUFJPQykgKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT1BZQ09OVk9MVVRJT05GSUxURVIyREVYVFBST0Mp
IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdF
VENPTlZPTFVUSU9ORklMVEVSRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTHZvaWQgKmltYWdlKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVENP
TlZPTFVUSU9OUEFSQU1FVEVSRlZFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUQ09OVk9MVVRJT05Q
QVJBTUVURVJJVkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpw
YXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUU0VQQVJBQkxFRklMVEVSRVhUUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQgKnJvdywg
R0x2b2lkICpjb2x1bW4sIEdMdm9pZCAqc3Bhbik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xTRVBB
UkFCTEVGSUxURVIyREVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkICpyb3csIGNvbnN0IEdMdm9pZCAqY29sdW1uKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTENPTE9SVEFCTEVTR0lQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkICp0YWJsZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT0xPUlRBQkxFUEFS
QU1FVEVSRlZTR0lQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZs
b2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09MT1JUQUJMRVBBUkFNRVRFUklW
U0dJUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFt
cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT1BZQ09MT1JUQUJMRVNHSVBST0MpIChHTGVudW0g
dGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUQ09MT1JUQUJMRVNHSVBST0MpIChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkICp0YWJsZSk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xHRVRDT0xPUlRBQkxFUEFSQU1FVEVSRlZTR0lQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMR0VUQ09MT1JUQUJMRVBBUkFNRVRFUklWU0dJUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CgoKCgoKCgp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMUElYRUxURVhHRU5TR0lYUFJPQykgKEdMZW51bSBtb2RlKTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFBJWEVMVEVYR0VOUEFSQU1FVEVSSVNHSVNQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGludCBw
YXJhbSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xQSVhFTFRFWEdFTlBBUkFNRVRFUklWU0dJU1BS
T0MpIChHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMUElYRUxURVhHRU5QQVJBTUVURVJGU0dJU1BST0MpIChHTGVudW0gcG5hbWUsIEdMZmxv
YXQgcGFyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUElYRUxURVhHRU5QQVJBTUVURVJGVlNH
SVNQUk9DKSAoR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMR0VUUElYRUxURVhHRU5QQVJBTUVURVJJVlNHSVNQUk9DKSAoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVFBJWEVMVEVYR0VO
UEFSQU1FVEVSRlZTR0lTUFJPQykgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFRFWElNQUdFNERTR0lTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIHNpemU0ZCwgR0xpbnQgYm9yZGVyLCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpwaXhlbHMpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMVEVYU1VCSU1BR0U0RFNHSVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50
IHdvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBH
THNpemVpIHNpemU0ZCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
cGl4ZWxzKTsKdHlwZWRlZiBHTGJvb2xlYW4gKCAqIFBGTkdMQVJFVEVYVFVSRVNSRVNJREVOVEVY
VFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqdGV4dHVyZXMsIEdMYm9vbGVhbiAqcmVz
aWRlbmNlcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xCSU5EVEVYVFVSRUVYVFBST0MpIChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xERUxFVEVU
RVhUVVJFU0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqdGV4dHVyZXMpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMR0VOVEVYVFVSRVNFWFRQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQg
KnRleHR1cmVzKTsKdHlwZWRlZiBHTGJvb2xlYW4gKCAqIFBGTkdMSVNURVhUVVJFRVhUUFJPQykg
KEdMdWludCB0ZXh0dXJlKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFBSSU9SSVRJWkVURVhUVVJF
U0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqdGV4dHVyZXMsIGNvbnN0IEdMY2xh
bXBmICpwcmlvcml0aWVzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTERFVEFJTFRFWEZVTkNTR0lT
UFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbiwgY29uc3QgR0xmbG9hdCAqcG9pbnRzKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVERFVEFJTFRFWEZVTkNTR0lTUFJPQykgKEdMZW51bSB0
YXJnZXQsIEdMZmxvYXQgKnBvaW50cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xTSEFSUEVOVEVY
RlVOQ1NHSVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBuLCBjb25zdCBHTGZsb2F0ICpw
b2ludHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUU0hBUlBFTlRFWEZVTkNTR0lTUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMZmxvYXQgKnBvaW50cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xT
QU1QTEVNQVNLU0dJU1BST0MpIChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xTQU1QTEVQQVRURVJOU0dJU1BST0MpIChHTGVudW0gcGF0dGVy
bik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xBUlJBWUVMRU1FTlRFWFRQUk9DKSAoR0xpbnQgaSk7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT0xPUlBPSU5URVJFWFRQUk9DKSAoR0xpbnQgc2l6ZSwg
R0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQg
KnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRFJBV0FSUkFZU0VYVFBST0MpIChHTGVu
dW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMRURHRUZMQUdQT0lOVEVSRVhUUFJPQykgKEdMc2l6ZWkgc3RyaWRlLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGJvb2xlYW4gKnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUUE9J
TlRFUlZFWFRQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTHZvaWQqICpwYXJhbXMpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMSU5ERVhQT0lOVEVSRVhUUFJPQykgKEdMZW51bSB0eXBlLCBHTHNpemVpIHN0
cmlkZSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x2b2lkICpwb2ludGVyKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTE5PUk1BTFBPSU5URVJFWFRQUk9DKSAoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3Ry
aWRlLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQgKnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMVEVYQ09PUkRQT0lOVEVSRVhUUFJPQykgKEdMaW50IHNpemUsIEdMZW51bSB0eXBl
LCBHTHNpemVpIHN0cmlkZSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x2b2lkICpwb2ludGVyKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWFBPSU5URVJFWFRQUk9DKSAoR0xpbnQgc2l6ZSwg
R0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQg
KnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQkxFTkRFUVVBVElPTkVYVFBST0MpIChH
TGVudW0gbW9kZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xTUFJJVEVQQVJBTUVURVJGU0dJWFBS
T0MpIChHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdM
U1BSSVRFUEFSQU1FVEVSRlZTR0lYUFJPQykgKEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCAq
cGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNQUklURVBBUkFNRVRFUklTR0lYUFJPQykg
KEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU1BSSVRF
UEFSQU1FVEVSSVZTR0lYUFJPQykgKEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyk7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xQT0lOVFBBUkFNRVRFUkZFWFRQUk9DKSAoR0xlbnVtIHBu
YW1lLCBHTGZsb2F0IHBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFBPSU5UUEFSQU1FVEVS
RlZFWFRQUk9DKSAoR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMUE9JTlRQQVJBTUVURVJGU0dJU1BST0MpIChHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgcGFyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUE9JTlRQQVJBTUVURVJGVlNHSVNQ
Uk9DKSAoR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIEdMaW50
ICggKiBQRk5HTEdFVElOU1RSVU1FTlRTU0dJWFBST0MpICh2b2lkKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTElOU1RSVU1FTlRTQlVGRkVSU0dJWFBST0MpIChHTHNpemVpIHNpemUsIEdMaW50ICpi
dWZmZXIpOwp0eXBlZGVmIEdMaW50ICggKiBQRk5HTFBPTExJTlNUUlVNRU5UU1NHSVhQUk9DKSAo
R0xpbnQgKm1hcmtlcl9wKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFJFQURJTlNUUlVNRU5UU1NH
SVhQUk9DKSAoR0xpbnQgbWFya2VyKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNUQVJUSU5TVFJV
TUVOVFNTR0lYUFJPQykgKHZvaWQpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU1RPUElOU1RSVU1F
TlRTU0dJWFBST0MpIChHTGludCBtYXJrZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRlJBTUVa
T09NU0dJWFBST0MpIChHTGludCBmYWN0b3IpOwoKCgoKCgoKdHlwZWRlZiB2b2lkICggKiBQRk5H
TFRBR1NBTVBMRUJVRkZFUlNHSVhQUk9DKSAodm9pZCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xE
RUZPUk1BVElPTk1BUDNEU0dJWFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGRvdWJsZSB1MSwgR0xk
b3VibGUgdTIsIEdMaW50IHVzdHJpZGUsIEdMaW50IHVvcmRlciwgR0xkb3VibGUgdjEsIEdMZG91
YmxlIHYyLCBHTGludCB2c3RyaWRlLCBHTGludCB2b3JkZXIsIEdMZG91YmxlIHcxLCBHTGRvdWJs
ZSB3MiwgR0xpbnQgd3N0cmlkZSwgR0xpbnQgd29yZGVyLCBjb25zdCBHTGRvdWJsZSAqcG9pbnRz
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTERFRk9STUFUSU9OTUFQM0ZTR0lYUFJPQykgKEdMZW51
bSB0YXJnZXQsIEdMZmxvYXQgdTEsIEdMZmxvYXQgdTIsIEdMaW50IHVzdHJpZGUsIEdMaW50IHVv
cmRlciwgR0xmbG9hdCB2MSwgR0xmbG9hdCB2MiwgR0xpbnQgdnN0cmlkZSwgR0xpbnQgdm9yZGVy
LCBHTGZsb2F0IHcxLCBHTGZsb2F0IHcyLCBHTGludCB3c3RyaWRlLCBHTGludCB3b3JkZXIsIGNv
bnN0IEdMZmxvYXQgKnBvaW50cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xERUZPUk1TR0lYUFJP
QykgKEdMYml0ZmllbGQgbWFzayk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xMT0FESURFTlRJVFlE
RUZPUk1BVElPTk1BUFNHSVhQUk9DKSAoR0xiaXRmaWVsZCBtYXNrKTsKCgoKCgoKCnR5cGVkZWYg
dm9pZCAoICogUEZOR0xSRUZFUkVOQ0VQTEFORVNHSVhQUk9DKSAoY29uc3QgR0xkb3VibGUgKmVx
dWF0aW9uKTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoICogUEZOR0xGTFVTSFJBU1RFUlNHSVhQUk9D
KSAodm9pZCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xGT0dGVU5DU0dJU1BST0MpIChHTHNpemVp
IG4sIGNvbnN0IEdMZmxvYXQgKnBvaW50cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRGT0dG
VU5DU0dJU1BST0MpIChHTGZsb2F0ICpwb2ludHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMSU1B
R0VUUkFOU0ZPUk1QQVJBTUVURVJJSFBQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGludCBwYXJhbSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xJTUFHRVRSQU5TRk9STVBBUkFN
RVRFUkZIUFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0p
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMSU1BR0VUUkFOU0ZPUk1QQVJBTUVURVJJVkhQUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyk7CnR5cGVk
ZWYgdm9pZCAoICogUEZOR0xJTUFHRVRSQU5TRk9STVBBUkFNRVRFUkZWSFBQUk9DKSAoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMR0VUSU1BR0VUUkFOU0ZPUk1QQVJBTUVURVJJVkhQUFJPQykgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZO
R0xHRVRJTUFHRVRSQU5TRk9STVBBUkFNRVRFUkZWSFBQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09MT1JT
VUJUQUJMRUVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHN0YXJ0LCBHTHNpemVpIGNv
dW50LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpkYXRhKTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTENPUFlDT0xPUlNVQlRBQkxFRVhUUFJPQykgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc3RhcnQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMSElOVFBHSVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBtb2Rl
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPTE9SVEFCTEVFWFRQUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICp0YWJsZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xH
RVRDT0xPUlRBQkxFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHZvaWQgKmRhdGEpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUQ09MT1JUQUJM
RVBBUkFNRVRFUklWRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRDT0xPUlRBQkxFUEFSQU1FVEVSRlZF
WFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUTElTVFBBUkFNRVRFUkZWU0dJWFBST0MpIChHTHVpbnQg
bGlzdCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMR0VUTElTVFBBUkFNRVRFUklWU0dJWFBST0MpIChHTHVpbnQgbGlzdCwgR0xlbnVtIHBuYW1l
LCBHTGludCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTExJU1RQQVJBTUVURVJGU0dJ
WFBST0MpIChHTHVpbnQgbGlzdCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTExJU1RQQVJBTUVURVJGVlNHSVhQUk9DKSAoR0x1aW50IGxpc3QsIEdM
ZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TExJU1RQQVJBTUVURVJJU0dJWFBST0MpIChHTHVpbnQgbGlzdCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCBwYXJhbSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xMSVNUUEFSQU1FVEVSSVZTR0lYUFJPQykg
KEdMdWludCBsaXN0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMSU5ERVhNQVRFUklBTEVYVFBST0MpIChHTGVudW0gZmFjZSwgR0xlbnVt
IG1vZGUpOwoKCgoKCgoKdHlwZWRlZiB2b2lkICggKiBQRk5HTElOREVYRlVOQ0VYVFBST0MpIChH
TGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTExPQ0tBUlJB
WVNFWFRQUk9DKSAoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMVU5MT0NLQVJSQVlTRVhUUFJPQykgKHZvaWQpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdM
Q1VMTFBBUkFNRVRFUkRWRVhUUFJPQykgKEdMZW51bSBwbmFtZSwgR0xkb3VibGUgKnBhcmFtcyk7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDVUxMUEFSQU1FVEVSRlZFWFRQUk9DKSAoR0xlbnVtIHBu
YW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRlJBR01FTlRDT0xP
Uk1BVEVSSUFMU0dJWFBST0MpIChHTGVudW0gZmFjZSwgR0xlbnVtIG1vZGUpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMRlJBR01FTlRMSUdIVEZTR0lYUFJPQykgKEdMZW51bSBsaWdodCwgR0xlbnVt
IHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEZSQUdNRU5UTElH
SFRGVlNHSVhQUk9DKSAoR0xlbnVtIGxpZ2h0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQg
KnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xGUkFHTUVOVExJR0hUSVNHSVhQUk9DKSAo
R0xlbnVtIGxpZ2h0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTEZSQUdNRU5UTElHSFRJVlNHSVhQUk9DKSAoR0xlbnVtIGxpZ2h0LCBHTGVudW0gcG5h
bWUsIGNvbnN0IEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRlJBR01FTlRM
SUdIVE1PREVMRlNHSVhQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTEZSQUdNRU5UTElHSFRNT0RFTEZWU0dJWFBST0MpIChHTGVudW0gcG5h
bWUsIGNvbnN0IEdMZmxvYXQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xGUkFHTUVO
VExJR0hUTU9ERUxJU0dJWFBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTEZSQUdNRU5UTElHSFRNT0RFTElWU0dJWFBST0MpIChHTGVudW0gcG5h
bWUsIGNvbnN0IEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRlJBR01FTlRN
QVRFUklBTEZTR0lYUFJPQykgKEdMZW51bSBmYWNlLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFy
YW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRlJBR01FTlRNQVRFUklBTEZWU0dJWFBST0MpIChH
TGVudW0gZmFjZSwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMRlJBR01FTlRNQVRFUklBTElTR0lYUFJPQykgKEdMZW51bSBmYWNlLCBH
TGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEZSQUdNRU5U
TUFURVJJQUxJVlNHSVhQUk9DKSAoR0xlbnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRGUkFHTUVOVExJR0hURlZTR0lY
UFJPQykgKEdMZW51bSBsaWdodCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMR0VURlJBR01FTlRMSUdIVElWU0dJWFBST0MpIChHTGVudW0gbGln
aHQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xH
RVRGUkFHTUVOVE1BVEVSSUFMRlZTR0lYUFJPQykgKEdMZW51bSBmYWNlLCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRGUkFHTUVOVE1BVEVS
SUFMSVZTR0lYUFJPQykgKEdMZW51bSBmYWNlLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMTElHSFRFTlZJU0dJWFBST0MpIChHTGVudW0gcG5hbWUs
IEdMaW50IHBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTERSQVdSQU5HRUVMRU1FTlRTRVhU
UFJPQykgKEdMZW51bSBtb2RlLCBHTHVpbnQgc3RhcnQsIEdMdWludCBlbmQsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMQVBQTFlURVhUVVJFRVhUUFJPQykgKEdMZW51bSBtb2RlKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTFRFWFRVUkVMSUdIVEVYVFBST0MpIChHTGVudW0gcG5hbWUpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMVEVYVFVSRU1BVEVSSUFMRVhUUFJPQykgKEdMZW51bSBmYWNlLCBHTGVudW0gbW9k
ZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xBU1lOQ01BUktFUlNHSVhQUk9DKSAoR0x1aW50IG1h
cmtlcik7CnR5cGVkZWYgR0xpbnQgKCAqIFBGTkdMRklOSVNIQVNZTkNTR0lYUFJPQykgKEdMdWlu
dCAqbWFya2VycCk7CnR5cGVkZWYgR0xpbnQgKCAqIFBGTkdMUE9MTEFTWU5DU0dJWFBST0MpIChH
THVpbnQgKm1hcmtlcnApOwp0eXBlZGVmIEdMdWludCAoICogUEZOR0xHRU5BU1lOQ01BUktFUlNT
R0lYUFJPQykgKEdMc2l6ZWkgcmFuZ2UpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMREVMRVRFQVNZ
TkNNQVJLRVJTU0dJWFBST0MpIChHTHVpbnQgbWFya2VyLCBHTHNpemVpIHJhbmdlKTsKdHlwZWRl
ZiBHTGJvb2xlYW4gKCAqIFBGTkdMSVNBU1lOQ01BUktFUlNHSVhQUk9DKSAoR0x1aW50IG1hcmtl
cik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhQT0lOVEVSVklOVEVMUFJPQykgKEdMaW50
IHNpemUsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqICpwb2ludGVyKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTE5PUk1BTFBPSU5URVJWSU5URUxQUk9DKSAoR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCogKnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09MT1JQT0lOVEVSVklOVEVM
UFJPQykgKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqICpwb2ludGVyKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTFRFWENPT1JEUE9JTlRFUlZJTlRFTFBST0MpIChHTGludCBz
aXplLCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiAqcG9pbnRlcik7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xQSVhFTFRSQU5TRk9STVBBUkFNRVRFUklFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xQSVhFTFRS
QU5TRk9STVBBUkFNRVRFUkZFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBH
TGZsb2F0IHBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFBJWEVMVFJBTlNGT1JNUEFSQU1F
VEVSSVZFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAq
cGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFBJWEVMVFJBTlNGT1JNUEFSQU1FVEVSRlZF
WFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJh
bXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0VDT05EQVJZQ09MT1IzQkVYVFBST0MpIChHTGJ5
dGUgcmVkLCBHTGJ5dGUgZ3JlZW4sIEdMYnl0ZSBibHVlKTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TFNFQ09OREFSWUNPTE9SM0JWRVhUUFJPQykgKGNvbnN0IEdMYnl0ZSAqdik7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xTRUNPTkRBUllDT0xPUjNERVhUUFJPQykgKEdMZG91YmxlIHJlZCwgR0xkb3Vi
bGUgZ3JlZW4sIEdMZG91YmxlIGJsdWUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0VDT05EQVJZ
Q09MT1IzRFZFWFRQUk9DKSAoY29uc3QgR0xkb3VibGUgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMU0VDT05EQVJZQ09MT1IzRkVYVFBST0MpIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwg
R0xmbG9hdCBibHVlKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNFQ09OREFSWUNPTE9SM0ZWRVhU
UFJPQykgKGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0VDT05EQVJZ
Q09MT1IzSUVYVFBST0MpIChHTGludCByZWQsIEdMaW50IGdyZWVuLCBHTGludCBibHVlKTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFNFQ09OREFSWUNPTE9SM0lWRVhUUFJPQykgKGNvbnN0IEdMaW50
ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNFQ09OREFSWUNPTE9SM1NFWFRQUk9DKSAoR0xz
aG9ydCByZWQsIEdMc2hvcnQgZ3JlZW4sIEdMc2hvcnQgYmx1ZSk7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xTRUNPTkRBUllDT0xPUjNTVkVYVFBST0MpIChjb25zdCBHTHNob3J0ICp2KTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTFNFQ09OREFSWUNPTE9SM1VCRVhUUFJPQykgKEdMdWJ5dGUgcmVkLCBH
THVieXRlIGdyZWVuLCBHTHVieXRlIGJsdWUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0VDT05E
QVJZQ09MT1IzVUJWRVhUUFJPQykgKGNvbnN0IEdMdWJ5dGUgKnYpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMU0VDT05EQVJZQ09MT1IzVUlFWFRQUk9DKSAoR0x1aW50IHJlZCwgR0x1aW50IGdyZWVu
LCBHTHVpbnQgYmx1ZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xTRUNPTkRBUllDT0xPUjNVSVZF
WFRQUk9DKSAoY29uc3QgR0x1aW50ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNFQ09OREFS
WUNPTE9SM1VTRVhUUFJPQykgKEdMdXNob3J0IHJlZCwgR0x1c2hvcnQgZ3JlZW4sIEdMdXNob3J0
IGJsdWUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0VDT05EQVJZQ09MT1IzVVNWRVhUUFJPQykg
KGNvbnN0IEdMdXNob3J0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFNFQ09OREFSWUNPTE9S
UE9JTlRFUkVYVFBST0MpIChHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUs
IGNvbnN0IEdMdm9pZCAqcG9pbnRlcik7CgoKCgoKCgp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVEVY
VFVSRU5PUk1BTEVYVFBST0MpIChHTGVudW0gbW9kZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xN
VUxUSURSQVdBUlJBWVNFWFRQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50ICpmaXJzdCwgR0xzaXpl
aSAqY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE1VTFRJ
RFJBV0VMRU1FTlRTRVhUUFJPQykgKEdMZW51bSBtb2RlLCBjb25zdCBHTHNpemVpICpjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTEZPR0NPT1JERkVYVFBST0MpIChHTGZsb2F0IGNvb3JkKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTEZPR0NPT1JERlZFWFRQUk9DKSAoY29uc3QgR0xmbG9hdCAq
Y29vcmQpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRk9HQ09PUkRERVhUUFJPQykgKEdMZG91Ymxl
IGNvb3JkKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEZPR0NPT1JERFZFWFRQUk9DKSAoY29uc3Qg
R0xkb3VibGUgKmNvb3JkKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEZPR0NPT1JEUE9JTlRFUkVY
VFBST0MpIChHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRl
cik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xUQU5HRU5UM0JFWFRQUk9DKSAoR0xieXRlIHR4LCBH
TGJ5dGUgdHksIEdMYnl0ZSB0eik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xUQU5HRU5UM0JWRVhU
UFJPQykgKGNvbnN0IEdMYnl0ZSAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xUQU5HRU5UM0RF
WFRQUk9DKSAoR0xkb3VibGUgdHgsIEdMZG91YmxlIHR5LCBHTGRvdWJsZSB0eik7CnR5cGVkZWYg
dm9pZCAoICogUEZOR0xUQU5HRU5UM0RWRVhUUFJPQykgKGNvbnN0IEdMZG91YmxlICp2KTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFRBTkdFTlQzRkVYVFBST0MpIChHTGZsb2F0IHR4LCBHTGZsb2F0
IHR5LCBHTGZsb2F0IHR6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRBTkdFTlQzRlZFWFRQUk9D
KSAoY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xUQU5HRU5UM0lFWFRQ
Uk9DKSAoR0xpbnQgdHgsIEdMaW50IHR5LCBHTGludCB0eik7CnR5cGVkZWYgdm9pZCAoICogUEZO
R0xUQU5HRU5UM0lWRVhUUFJPQykgKGNvbnN0IEdMaW50ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFRBTkdFTlQzU0VYVFBST0MpIChHTHNob3J0IHR4LCBHTHNob3J0IHR5LCBHTHNob3J0IHR6
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRBTkdFTlQzU1ZFWFRQUk9DKSAoY29uc3QgR0xzaG9y
dCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xCSU5PUk1BTDNCRVhUUFJPQykgKEdMYnl0ZSBi
eCwgR0xieXRlIGJ5LCBHTGJ5dGUgYnopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQklOT1JNQUwz
QlZFWFRQUk9DKSAoY29uc3QgR0xieXRlICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEJJTk9S
TUFMM0RFWFRQUk9DKSAoR0xkb3VibGUgYngsIEdMZG91YmxlIGJ5LCBHTGRvdWJsZSBieik7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xCSU5PUk1BTDNEVkVYVFBST0MpIChjb25zdCBHTGRvdWJsZSAq
dik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xCSU5PUk1BTDNGRVhUUFJPQykgKEdMZmxvYXQgYngs
IEdMZmxvYXQgYnksIEdMZmxvYXQgYnopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQklOT1JNQUwz
RlZFWFRQUk9DKSAoY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xCSU5P
Uk1BTDNJRVhUUFJPQykgKEdMaW50IGJ4LCBHTGludCBieSwgR0xpbnQgYnopOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMQklOT1JNQUwzSVZFWFRQUk9DKSAoY29uc3QgR0xpbnQgKnYpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMQklOT1JNQUwzU0VYVFBST0MpIChHTHNob3J0IGJ4LCBHTHNob3J0IGJ5
LCBHTHNob3J0IGJ6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEJJTk9STUFMM1NWRVhUUFJPQykg
KGNvbnN0IEdMc2hvcnQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVEFOR0VOVFBPSU5URVJF
WFRQUk9DKSAoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQgKnBvaW50
ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQklOT1JNQUxQT0lOVEVSRVhUUFJPQykgKEdMZW51
bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTEZJTklTSFRFWFRVUkVTVU5YUFJPQykgKHZvaWQpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMR0xPQkFMQUxQSEFGQUNUT1JCU1VOUFJPQykgKEdMYnl0ZSBmYWN0b3IpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMR0xPQkFMQUxQSEFGQUNUT1JTU1VOUFJPQykgKEdMc2hvcnQgZmFj
dG9yKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdMT0JBTEFMUEhBRkFDVE9SSVNVTlBST0MpIChH
TGludCBmYWN0b3IpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0xPQkFMQUxQSEFGQUNUT1JGU1VO
UFJPQykgKEdMZmxvYXQgZmFjdG9yKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdMT0JBTEFMUEhB
RkFDVE9SRFNVTlBST0MpIChHTGRvdWJsZSBmYWN0b3IpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdM
R0xPQkFMQUxQSEFGQUNUT1JVQlNVTlBST0MpIChHTHVieXRlIGZhY3Rvcik7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xHTE9CQUxBTFBIQUZBQ1RPUlVTU1VOUFJPQykgKEdMdXNob3J0IGZhY3Rvcik7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHTE9CQUxBTFBIQUZBQ1RPUlVJU1VOUFJPQykgKEdMdWlu
dCBmYWN0b3IpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1FTlRDT0RFVUlTVU5QUk9D
KSAoR0x1aW50IGNvZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1FTlRDT0RFVVNT
VU5QUk9DKSAoR0x1c2hvcnQgY29kZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xSRVBMQUNFTUVO
VENPREVVQlNVTlBST0MpIChHTHVieXRlIGNvZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQ
TEFDRU1FTlRDT0RFVUlWU1VOUFJPQykgKGNvbnN0IEdMdWludCAqY29kZSk7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xSRVBMQUNFTUVOVENPREVVU1ZTVU5QUk9DKSAoY29uc3QgR0x1c2hvcnQgKmNv
ZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1FTlRDT0RFVUJWU1VOUFJPQykgKGNv
bnN0IEdMdWJ5dGUgKmNvZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1FTlRDT0RF
UE9JTlRFUlNVTlBST0MpIChHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9p
ZCogKnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09MT1I0VUJWRVJURVgyRlNVTlBS
T0MpIChHTHVieXRlIHIsIEdMdWJ5dGUgZywgR0x1Ynl0ZSBiLCBHTHVieXRlIGEsIEdMZmxvYXQg
eCwgR0xmbG9hdCB5KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPTE9SNFVCVkVSVEVYMkZWU1VO
UFJPQykgKGNvbnN0IEdMdWJ5dGUgKmMsIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMQ09MT1I0VUJWRVJURVgzRlNVTlBST0MpIChHTHVieXRlIHIsIEdMdWJ5dGUgZywg
R0x1Ynl0ZSBiLCBHTHVieXRlIGEsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09MT1I0VUJWRVJURVgzRlZTVU5QUk9DKSAoY29uc3QgR0x1
Ynl0ZSAqYywgY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT0xPUjNG
VkVSVEVYM0ZTVU5QUk9DKSAoR0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxvYXQgYiwgR0xmbG9h
dCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT0xPUjNG
VkVSVEVYM0ZWU1VOUFJPQykgKGNvbnN0IEdMZmxvYXQgKmMsIGNvbnN0IEdMZmxvYXQgKnYpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMTk9STUFMM0ZWRVJURVgzRlNVTlBST0MpIChHTGZsb2F0IG54
LCBHTGZsb2F0IG55LCBHTGZsb2F0IG56LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE5PUk1BTDNGVkVSVEVYM0ZWU1VOUFJPQykgKGNvbnN0
IEdMZmxvYXQgKm4sIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09M
T1I0Rk5PUk1BTDNGVkVSVEVYM0ZTVU5QUk9DKSAoR0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxv
YXQgYiwgR0xmbG9hdCBhLCBHTGZsb2F0IG54LCBHTGZsb2F0IG55LCBHTGZsb2F0IG56LCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPTE9S
NEZOT1JNQUwzRlZFUlRFWDNGVlNVTlBST0MpIChjb25zdCBHTGZsb2F0ICpjLCBjb25zdCBHTGZs
b2F0ICpuLCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRFWENPT1JE
MkZWRVJURVgzRlNVTlBST0MpIChHTGZsb2F0IHMsIEdMZmxvYXQgdCwgR0xmbG9hdCB4LCBHTGZs
b2F0IHksIEdMZmxvYXQgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xURVhDT09SRDJGVkVSVEVY
M0ZWU1VOUFJPQykgKGNvbnN0IEdMZmxvYXQgKnRjLCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTFRFWENPT1JENEZWRVJURVg0RlNVTlBST0MpIChHTGZsb2F0IHMsIEdM
ZmxvYXQgdCwgR0xmbG9hdCBwLCBHTGZsb2F0IHEsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZs
b2F0IHosIEdMZmxvYXQgdyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xURVhDT09SRDRGVkVSVEVY
NEZWU1VOUFJPQykgKGNvbnN0IEdMZmxvYXQgKnRjLCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTFRFWENPT1JEMkZDT0xPUjRVQlZFUlRFWDNGU1VOUFJPQykgKEdMZmxv
YXQgcywgR0xmbG9hdCB0LCBHTHVieXRlIHIsIEdMdWJ5dGUgZywgR0x1Ynl0ZSBiLCBHTHVieXRl
IGEsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMVEVYQ09PUkQyRkNPTE9SNFVCVkVSVEVYM0ZWU1VOUFJPQykgKGNvbnN0IEdMZmxvYXQgKnRj
LCBjb25zdCBHTHVieXRlICpjLCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFRFWENPT1JEMkZDT0xPUjNGVkVSVEVYM0ZTVU5QUk9DKSAoR0xmbG9hdCBzLCBHTGZsb2F0
IHQsIEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIsIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVEVYQ09PUkQyRkNPTE9SM0ZWRVJU
RVgzRlZTVU5QUk9DKSAoY29uc3QgR0xmbG9hdCAqdGMsIGNvbnN0IEdMZmxvYXQgKmMsIGNvbnN0
IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVEVYQ09PUkQyRk5PUk1BTDNGVkVS
VEVYM0ZTVU5QUk9DKSAoR0xmbG9hdCBzLCBHTGZsb2F0IHQsIEdMZmxvYXQgbngsIEdMZmxvYXQg
bnksIEdMZmxvYXQgbnosIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMVEVYQ09PUkQyRk5PUk1BTDNGVkVSVEVYM0ZWU1VOUFJPQykgKGNvbnN0
IEdMZmxvYXQgKnRjLCBjb25zdCBHTGZsb2F0ICpuLCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTFRFWENPT1JEMkZDT0xPUjRGTk9STUFMM0ZWRVJURVgzRlNVTlBST0Mp
IChHTGZsb2F0IHMsIEdMZmxvYXQgdCwgR0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxvYXQgYiwg
R0xmbG9hdCBhLCBHTGZsb2F0IG54LCBHTGZsb2F0IG55LCBHTGZsb2F0IG56LCBHTGZsb2F0IHgs
IEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRFWENPT1JEMkZD
T0xPUjRGTk9STUFMM0ZWRVJURVgzRlZTVU5QUk9DKSAoY29uc3QgR0xmbG9hdCAqdGMsIGNvbnN0
IEdMZmxvYXQgKmMsIGNvbnN0IEdMZmxvYXQgKm4sIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMVEVYQ09PUkQ0RkNPTE9SNEZOT1JNQUwzRlZFUlRFWDRGU1VOUFJPQykg
KEdMZmxvYXQgcywgR0xmbG9hdCB0LCBHTGZsb2F0IHAsIEdMZmxvYXQgcSwgR0xmbG9hdCByLCBH
TGZsb2F0IGcsIEdMZmxvYXQgYiwgR0xmbG9hdCBhLCBHTGZsb2F0IG54LCBHTGZsb2F0IG55LCBH
TGZsb2F0IG56LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMVEVYQ09PUkQ0RkNPTE9SNEZOT1JNQUwzRlZFUlRFWDRGVlNV
TlBST0MpIChjb25zdCBHTGZsb2F0ICp0YywgY29uc3QgR0xmbG9hdCAqYywgY29uc3QgR0xmbG9h
dCAqbiwgY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xSRVBMQUNFTUVO
VENPREVVSVZFUlRFWDNGU1VOUFJPQykgKEdMZW51bSByYywgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xSRVBMQUNFTUVOVENPREVVSVZFUlRF
WDNGVlNVTlBST0MpIChjb25zdCBHTGVudW0gKnJjLCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTFJFUExBQ0VNRU5UQ09ERVVJQ09MT1I0VUJWRVJURVgzRlNVTlBST0Mp
IChHTGVudW0gcmMsIEdMdWJ5dGUgciwgR0x1Ynl0ZSBnLCBHTHVieXRlIGIsIEdMdWJ5dGUgYSwg
R0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xS
RVBMQUNFTUVOVENPREVVSUNPTE9SNFVCVkVSVEVYM0ZWU1VOUFJPQykgKGNvbnN0IEdMZW51bSAq
cmMsIGNvbnN0IEdMdWJ5dGUgKmMsIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMUkVQTEFDRU1FTlRDT0RFVUlDT0xPUjNGVkVSVEVYM0ZTVU5QUk9DKSAoR0xlbnVtIHJj
LCBHTGZsb2F0IHIsIEdMZmxvYXQgZywgR0xmbG9hdCBiLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFJFUExBQ0VNRU5UQ09ERVVJQ09MT1Iz
RlZFUlRFWDNGVlNVTlBST0MpIChjb25zdCBHTGVudW0gKnJjLCBjb25zdCBHTGZsb2F0ICpjLCBj
b25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFJFUExBQ0VNRU5UQ09ERVVJ
Tk9STUFMM0ZWRVJURVgzRlNVTlBST0MpIChHTGVudW0gcmMsIEdMZmxvYXQgbngsIEdMZmxvYXQg
bnksIEdMZmxvYXQgbnosIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1FTlRDT0RFVUlOT1JNQUwzRlZFUlRFWDNGVlNVTlBST0Mp
IChjb25zdCBHTGVudW0gKnJjLCBjb25zdCBHTGZsb2F0ICpuLCBjb25zdCBHTGZsb2F0ICp2KTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTFJFUExBQ0VNRU5UQ09ERVVJQ09MT1I0Rk5PUk1BTDNGVkVS
VEVYM0ZTVU5QUk9DKSAoR0xlbnVtIHJjLCBHTGZsb2F0IHIsIEdMZmxvYXQgZywgR0xmbG9hdCBi
LCBHTGZsb2F0IGEsIEdMZmxvYXQgbngsIEdMZmxvYXQgbnksIEdMZmxvYXQgbnosIEdMZmxvYXQg
eCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1F
TlRDT0RFVUlDT0xPUjRGTk9STUFMM0ZWRVJURVgzRlZTVU5QUk9DKSAoY29uc3QgR0xlbnVtICpy
YywgY29uc3QgR0xmbG9hdCAqYywgY29uc3QgR0xmbG9hdCAqbiwgY29uc3QgR0xmbG9hdCAqdik7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xSRVBMQUNFTUVOVENPREVVSVRFWENPT1JEMkZWRVJURVgz
RlNVTlBST0MpIChHTGVudW0gcmMsIEdMZmxvYXQgcywgR0xmbG9hdCB0LCBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSwgR0xmbG9hdCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFJFUExBQ0VNRU5UQ09E
RVVJVEVYQ09PUkQyRlZFUlRFWDNGVlNVTlBST0MpIChjb25zdCBHTGVudW0gKnJjLCBjb25zdCBH
TGZsb2F0ICp0YywgY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xSRVBM
QUNFTUVOVENPREVVSVRFWENPT1JEMkZOT1JNQUwzRlZFUlRFWDNGU1VOUFJPQykgKEdMZW51bSBy
YywgR0xmbG9hdCBzLCBHTGZsb2F0IHQsIEdMZmxvYXQgbngsIEdMZmxvYXQgbnksIEdMZmxvYXQg
bnosIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMUkVQTEFDRU1FTlRDT0RFVUlURVhDT09SRDJGTk9STUFMM0ZWRVJURVgzRlZTVU5QUk9DKSAo
Y29uc3QgR0xlbnVtICpyYywgY29uc3QgR0xmbG9hdCAqdGMsIGNvbnN0IEdMZmxvYXQgKm4sIGNv
bnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUkVQTEFDRU1FTlRDT0RFVUlU
RVhDT09SRDJGQ09MT1I0Rk5PUk1BTDNGVkVSVEVYM0ZTVU5QUk9DKSAoR0xlbnVtIHJjLCBHTGZs
b2F0IHMsIEdMZmxvYXQgdCwgR0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxvYXQgYiwgR0xmbG9h
dCBhLCBHTGZsb2F0IG54LCBHTGZsb2F0IG55LCBHTGZsb2F0IG56LCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFJFUExBQ0VNRU5UQ09ERVVJ
VEVYQ09PUkQyRkNPTE9SNEZOT1JNQUwzRlZFUlRFWDNGVlNVTlBST0MpIChjb25zdCBHTGVudW0g
KnJjLCBjb25zdCBHTGZsb2F0ICp0YywgY29uc3QgR0xmbG9hdCAqYywgY29uc3QgR0xmbG9hdCAq
biwgY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xCTEVOREZVTkNTRVBB
UkFURUVYVFBST0MpIChHTGVudW0gc2ZhY3RvclJHQiwgR0xlbnVtIGRmYWN0b3JSR0IsIEdMZW51
bSBzZmFjdG9yQWxwaGEsIEdMZW51bSBkZmFjdG9yQWxwaGEpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMQkxFTkRGVU5DU0VQQVJBVEVJTkdSUFJPQykgKEdMZW51bSBzZmFjdG9yUkdCLCBHTGVudW0g
ZGZhY3RvclJHQiwgR0xlbnVtIHNmYWN0b3JBbHBoYSwgR0xlbnVtIGRmYWN0b3JBbHBoYSk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhXRUlHSFRGRVhUUFJPQykgKEdMZmxvYXQgd2VpZ2h0
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWFdFSUdIVEZWRVhUUFJPQykgKGNvbnN0IEdM
ZmxvYXQgKndlaWdodCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhXRUlHSFRQT0lOVEVS
RVhUUFJPQykgKEdMc2l6ZWkgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBjb25z
dCBHTHZvaWQgKnBvaW50ZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRkxVU0hWRVJURVhBUlJB
WVJBTkdFTlZQUk9DKSAodm9pZCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBUlJBWVJB
TkdFTlZQUk9DKSAoR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMdm9pZCAqcG9pbnRlcik7CnR5cGVk
ZWYgdm9pZCAoICogUEZOR0xDT01CSU5FUlBBUkFNRVRFUkZWTlZQUk9DKSAoR0xlbnVtIHBuYW1l
LCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09NQklORVJQ
QVJBTUVURVJGTlZQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTENPTUJJTkVSUEFSQU1FVEVSSVZOVlBST0MpIChHTGVudW0gcG5hbWUsIGNv
bnN0IEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09NQklORVJQQVJBTUVU
RVJJTlZQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xDT01CSU5FUklOUFVUTlZQUk9DKSAoR0xlbnVtIHN0YWdlLCBHTGVudW0gcG9ydGlvbiwg
R0xlbnVtIHZhcmlhYmxlLCBHTGVudW0gaW5wdXQsIEdMZW51bSBtYXBwaW5nLCBHTGVudW0gY29t
cG9uZW50VXNhZ2UpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09NQklORVJPVVRQVVROVlBST0Mp
IChHTGVudW0gc3RhZ2UsIEdMZW51bSBwb3J0aW9uLCBHTGVudW0gYWJPdXRwdXQsIEdMZW51bSBj
ZE91dHB1dCwgR0xlbnVtIHN1bU91dHB1dCwgR0xlbnVtIHNjYWxlLCBHTGVudW0gYmlhcywgR0xi
b29sZWFuIGFiRG90UHJvZHVjdCwgR0xib29sZWFuIGNkRG90UHJvZHVjdCwgR0xib29sZWFuIG11
eFN1bSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xGSU5BTENPTUJJTkVSSU5QVVROVlBST0MpIChH
TGVudW0gdmFyaWFibGUsIEdMZW51bSBpbnB1dCwgR0xlbnVtIG1hcHBpbmcsIEdMZW51bSBjb21w
b25lbnRVc2FnZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRDT01CSU5FUklOUFVUUEFSQU1F
VEVSRlZOVlBST0MpIChHTGVudW0gc3RhZ2UsIEdMZW51bSBwb3J0aW9uLCBHTGVudW0gdmFyaWFi
bGUsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TEdFVENPTUJJTkVSSU5QVVRQQVJBTUVURVJJVk5WUFJPQykgKEdMZW51bSBzdGFnZSwgR0xlbnVt
IHBvcnRpb24sIEdMZW51bSB2YXJpYWJsZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVENPTUJJTkVST1VUUFVUUEFSQU1FVEVSRlZOVlBST0Mp
IChHTGVudW0gc3RhZ2UsIEdMZW51bSBwb3J0aW9uLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBh
cmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRDT01CSU5FUk9VVFBVVFBBUkFNRVRFUklW
TlZQUk9DKSAoR0xlbnVtIHN0YWdlLCBHTGVudW0gcG9ydGlvbiwgR0xlbnVtIHBuYW1lLCBHTGlu
dCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVEZJTkFMQ09NQklORVJJTlBVVFBB
UkFNRVRFUkZWTlZQUk9DKSAoR0xlbnVtIHZhcmlhYmxlLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQg
KnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRGSU5BTENPTUJJTkVSSU5QVVRQQVJB
TUVURVJJVk5WUFJPQykgKEdMZW51bSB2YXJpYWJsZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFy
YW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFJFU0laRUJVRkZFUlNNRVNBUFJPQykgKHZvaWQp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TMkRNRVNBUFJPQykgKEdMZG91YmxlIHgs
IEdMZG91YmxlIHkpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TMkRWTUVTQVBST0Mp
IChjb25zdCBHTGRvdWJsZSAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MyRk1F
U0FQUk9DKSAoR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lO
RE9XUE9TMkZWTUVTQVBST0MpIChjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFdJTkRPV1BPUzJJTUVTQVBST0MpIChHTGludCB4LCBHTGludCB5KTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTFdJTkRPV1BPUzJJVk1FU0FQUk9DKSAoY29uc3QgR0xpbnQgKnYpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TMlNNRVNBUFJPQykgKEdMc2hvcnQgeCwgR0xzaG9ydCB5
KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzJTVk1FU0FQUk9DKSAoY29uc3QgR0xz
aG9ydCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MzRE1FU0FQUk9DKSAoR0xk
b3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xX
SU5ET1dQT1MzRFZNRVNBUFJPQykgKGNvbnN0IEdMZG91YmxlICp2KTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTFdJTkRPV1BPUzNGTUVTQVBST0MpIChHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9h
dCB6KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzNGVk1FU0FQUk9DKSAoY29uc3Qg
R0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1MzSU1FU0FQUk9DKSAo
R0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQ
T1MzSVZNRVNBUFJPQykgKGNvbnN0IEdMaW50ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJ
TkRPV1BPUzNTTUVTQVBST0MpIChHTHNob3J0IHgsIEdMc2hvcnQgeSwgR0xzaG9ydCB6KTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzNTVk1FU0FQUk9DKSAoY29uc3QgR0xzaG9ydCAq
dik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xXSU5ET1dQT1M0RE1FU0FQUk9DKSAoR0xkb3VibGUg
eCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiwgR0xkb3VibGUgdyk7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xXSU5ET1dQT1M0RFZNRVNBUFJPQykgKGNvbnN0IEdMZG91YmxlICp2KTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFdJTkRPV1BPUzRGTUVTQVBST0MpIChHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6LCBHTGZsb2F0IHcpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TNEZW
TUVTQVBST0MpIChjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFdJTkRP
V1BPUzRJTUVTQVBST0MpIChHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFdJTkRPV1BPUzRJVk1FU0FQUk9DKSAoY29uc3QgR0xpbnQgKnYp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMV0lORE9XUE9TNFNNRVNBUFJPQykgKEdMc2hvcnQgeCwg
R0xzaG9ydCB5LCBHTHNob3J0IHosIEdMc2hvcnQgdyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xX
SU5ET1dQT1M0U1ZNRVNBUFJPQykgKGNvbnN0IEdMc2hvcnQgKnYpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMTVVMVElNT0RFRFJBV0FSUkFZU0lCTVBST0MpIChHTGVudW0gbW9kZSwgY29uc3QgR0xp
bnQgKmZpcnN0LCBjb25zdCBHTHNpemVpICpjb3VudCwgR0xzaXplaSBwcmltY291bnQsIEdMaW50
IG1vZGVzdHJpZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMTVVMVElNT0RFRFJBV0VMRU1FTlRT
SUJNUFJPQykgKGNvbnN0IEdMZW51bSAqbW9kZSwgY29uc3QgR0xzaXplaSAqY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQqICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCwgR0xpbnQg
bW9kZXN0cmlkZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xDT0xPUlBPSU5URVJMSVNUSUJNUFJP
QykgKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGludCBzdHJpZGUsIGNvbnN0IEdMdm9pZCog
KnBvaW50ZXIsIEdMaW50IHB0cnN0cmlkZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xTRUNPTkRB
UllDT0xPUlBPSU5URVJMSVNUSUJNUFJPQykgKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGlu
dCBzdHJpZGUsIGNvbnN0IEdMdm9pZCogKnBvaW50ZXIsIEdMaW50IHB0cnN0cmlkZSk7CnR5cGVk
ZWYgdm9pZCAoICogUEZOR0xFREdFRkxBR1BPSU5URVJMSVNUSUJNUFJPQykgKEdMaW50IHN0cmlk
ZSwgY29uc3QgR0xib29sZWFuKiAqcG9pbnRlciwgR0xpbnQgcHRyc3RyaWRlKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTEZPR0NPT1JEUE9JTlRFUkxJU1RJQk1QUk9DKSAoR0xlbnVtIHR5cGUsIEdM
aW50IHN0cmlkZSwgY29uc3QgR0x2b2lkKiAqcG9pbnRlciwgR0xpbnQgcHRyc3RyaWRlKTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTElOREVYUE9JTlRFUkxJU1RJQk1QUk9DKSAoR0xlbnVtIHR5cGUs
IEdMaW50IHN0cmlkZSwgY29uc3QgR0x2b2lkKiAqcG9pbnRlciwgR0xpbnQgcHRyc3RyaWRlKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTE5PUk1BTFBPSU5URVJMSVNUSUJNUFJPQykgKEdMZW51bSB0
eXBlLCBHTGludCBzdHJpZGUsIGNvbnN0IEdMdm9pZCogKnBvaW50ZXIsIEdMaW50IHB0cnN0cmlk
ZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xURVhDT09SRFBPSU5URVJMSVNUSUJNUFJPQykgKEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGludCBzdHJpZGUsIGNvbnN0IEdMdm9pZCogKnBvaW50
ZXIsIEdMaW50IHB0cnN0cmlkZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhQT0lOVEVS
TElTVElCTVBST0MpIChHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xpbnQgc3RyaWRlLCBjb25z
dCBHTHZvaWQqICpwb2ludGVyLCBHTGludCBwdHJzdHJpZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMVEJVRkZFUk1BU0szREZYUFJPQykgKEdMdWludCBtYXNrKTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFNBTVBMRU1BU0tFWFRQUk9DKSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0FNUExFUEFUVEVSTkVYVFBST0MpIChHTGVudW0gcGF0
dGVybik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xURVhUVVJFQ09MT1JNQVNLU0dJU1BST0MpIChH
TGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4g
YWxwaGEpOwoKCgoKCgoKdHlwZWRlZiB2b2lkICggKiBQRk5HTElHTE9PSU5URVJGQUNFU0dJWFBS
T0MpIChHTGVudW0gcG5hbWUsIGNvbnN0IEdMdm9pZCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTERFTEVURUZFTkNFU05WUFJPQykgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpmZW5j
ZXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VORkVOQ0VTTlZQUk9DKSAoR0xzaXplaSBuLCBH
THVpbnQgKmZlbmNlcyk7CnR5cGVkZWYgR0xib29sZWFuICggKiBQRk5HTElTRkVOQ0VOVlBST0Mp
IChHTHVpbnQgZmVuY2UpOwp0eXBlZGVmIEdMYm9vbGVhbiAoICogUEZOR0xURVNURkVOQ0VOVlBS
T0MpIChHTHVpbnQgZmVuY2UpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VURkVOQ0VJVk5WUFJP
QykgKEdMdWludCBmZW5jZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTEZJTklTSEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFNFVEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlLCBHTGVudW0gY29uZGl0
aW9uKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE1BUENPTlRST0xQT0lOVFNOVlBST0MpIChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMZW51bSB0eXBlLCBHTHNpemVpIHVzdHJpZGUsIEdM
c2l6ZWkgdnN0cmlkZSwgR0xpbnQgdW9yZGVyLCBHTGludCB2b3JkZXIsIEdMYm9vbGVhbiBwYWNr
ZWQsIGNvbnN0IEdMdm9pZCAqcG9pbnRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE1BUFBBUkFN
RVRFUklWTlZQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAq
cGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE1BUFBBUkFNRVRFUkZWTlZQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMR0VUTUFQQ09OVFJPTFBPSU5UU05WUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMdWludCBpbmRleCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgdXN0cmlkZSwgR0xzaXplaSB2c3Ry
aWRlLCBHTGJvb2xlYW4gcGFja2VkLCBHTHZvaWQgKnBvaW50cyk7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xHRVRNQVBQQVJBTUVURVJJVk5WUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRNQVBQQVJBTUVURVJG
Vk5WUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVE1BUEFUVFJJQlBBUkFNRVRFUklWTlZQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUTUFQQVRUUklCUEFSQU1FVEVSRlZOVlBST0MpIChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTEVWQUxNQVBTTlZQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIG1vZGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09NQklORVJTVEFHRVBBUkFNRVRFUkZW
TlZQUk9DKSAoR0xlbnVtIHN0YWdlLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQgKnBhcmFt
cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRDT01CSU5FUlNUQUdFUEFSQU1FVEVSRlZOVlBS
T0MpIChHTGVudW0gc3RhZ2UsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKdHlwZWRl
ZiBHTGJvb2xlYW4gKCAqIFBGTkdMQVJFUFJPR1JBTVNSRVNJREVOVE5WUFJPQykgKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50ICpwcm9ncmFtcywgR0xib29sZWFuICpyZXNpZGVuY2VzKTsKdHlwZWRl
ZiB2b2lkICggKiBQRk5HTEJJTkRQUk9HUkFNTlZQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50
IGlkKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTERFTEVURVBST0dSQU1TTlZQUk9DKSAoR0xzaXpl
aSBuLCBjb25zdCBHTHVpbnQgKnByb2dyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEVYRUNV
VEVQUk9HUkFNTlZQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkLCBjb25zdCBHTGZsb2F0
ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VOUFJPR1JBTVNOVlBST0MpIChHTHNp
emVpIG4sIEdMdWludCAqcHJvZ3JhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUUFJPR1JB
TVBBUkFNRVRFUkRWTlZQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGVudW0g
cG5hbWUsIEdMZG91YmxlICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUUFJPR1JB
TVBBUkFNRVRFUkZWTlZQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGVudW0g
cG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRQUk9HUkFN
SVZOVlBST0MpIChHTHVpbnQgaWQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CnR5cGVk
ZWYgdm9pZCAoICogUEZOR0xHRVRQUk9HUkFNU1RSSU5HTlZQUk9DKSAoR0x1aW50IGlkLCBHTGVu
dW0gcG5hbWUsIEdMdWJ5dGUgKnByb2dyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUVFJB
Q0tNQVRSSVhJVk5WUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMdWludCBhZGRyZXNzLCBHTGVudW0g
cG5hbWUsIEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUVkVSVEVYQVRU
UklCRFZOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xkb3VibGUgKnBhcmFt
cyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRWRVJURVhBVFRSSUJGVk5WUFJPQykgKEdMdWlu
dCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMR0VUVkVSVEVYQVRUUklCSVZOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRWRVJURVhBVFRSSUJQ
T0lOVEVSVk5WUFJPQykgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqICpwb2lu
dGVyKTsKdHlwZWRlZiBHTGJvb2xlYW4gKCAqIFBGTkdMSVNQUk9HUkFNTlZQUk9DKSAoR0x1aW50
IGlkKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTExPQURQUk9HUkFNTlZQUk9DKSAoR0xlbnVtIHRh
cmdldCwgR0x1aW50IGlkLCBHTHNpemVpIGxlbiwgY29uc3QgR0x1Ynl0ZSAqcHJvZ3JhbSk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xQUk9HUkFNUEFSQU1FVEVSNEROVlBST0MpIChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91YmxlIHosIEdM
ZG91YmxlIHcpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUFJPR1JBTVBBUkFNRVRFUjREVk5WUFJP
QykgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgY29uc3QgR0xkb3VibGUgKnYpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMUFJPR1JBTVBBUkFNRVRFUjRGTlZQUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0
IHcpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUFJPR1JBTVBBUkFNRVRFUjRGVk5WUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xQUk9HUkFNUEFSQU1FVEVSUzREVk5WUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0x1aW50IGNvdW50LCBjb25zdCBHTGRvdWJsZSAqdik7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xQUk9HUkFNUEFSQU1FVEVSUzRGVk5WUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0x1aW50IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTFJFUVVFU1RSRVNJREVOVFBST0dSQU1TTlZQUk9DKSAoR0xzaXplaSBuLCBjb25z
dCBHTHVpbnQgKnByb2dyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRSQUNLTUFUUklYTlZQ
Uk9DKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGFkZHJlc3MsIEdMZW51bSBtYXRyaXgsIEdMZW51
bSB0cmFuc2Zvcm0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCUE9JTlRFUk5W
UFJPQykgKEdMdWludCBpbmRleCwgR0xpbnQgZnNpemUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHN0
cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRF
WEFUVFJJQjFETlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTGRvdWJsZSB4KTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTFZFUlRFWEFUVFJJQjFEVk5WUFJPQykgKEdMdWludCBpbmRleCwgY29uc3QgR0xk
b3VibGUgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCMUZOVlBST0MpIChH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRS
SUIxRlZOVlBST0MpIChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCMVNOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMc2hvcnQg
eCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRSSUIxU1ZOVlBST0MpIChHTHVpbnQg
aW5kZXgsIGNvbnN0IEdMc2hvcnQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRU
UklCMkROVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMZG91YmxlIHgsIEdMZG91YmxlIHkpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCMkRWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBj
b25zdCBHTGRvdWJsZSAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRSSUIyRk5W
UFJPQykgKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMVkVSVEVYQVRUUklCMkZWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBjb25zdCBHTGZs
b2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEFUVFJJQjJTTlZQUk9DKSAoR0x1
aW50IGluZGV4LCBHTHNob3J0IHgsIEdMc2hvcnQgeSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xW
RVJURVhBVFRSSUIyU1ZOVlBST0MpIChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMc2hvcnQgKnYpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCM0ROVlBST0MpIChHTHVpbnQgaW5kZXgs
IEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91YmxlIHopOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMVkVSVEVYQVRUUklCM0RWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBjb25zdCBHTGRvdWJsZSAq
dik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRSSUIzRk5WUFJPQykgKEdMdWludCBp
bmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xWRVJURVhBVFRSSUIzRlZOVlBST0MpIChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQg
KnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCM1NOVlBST0MpIChHTHVpbnQg
aW5kZXgsIEdMc2hvcnQgeCwgR0xzaG9ydCB5LCBHTHNob3J0IHopOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMVkVSVEVYQVRUUklCM1NWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBjb25zdCBHTHNob3J0
ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEFUVFJJQjRETlZQUk9DKSAoR0x1aW50
IGluZGV4LCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6LCBHTGRvdWJsZSB3KTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEFUVFJJQjREVk5WUFJPQykgKEdMdWludCBpbmRl
eCwgY29uc3QgR0xkb3VibGUgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklC
NEZOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHos
IEdMZmxvYXQgdyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRSSUI0RlZOVlBST0Mp
IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdM
VkVSVEVYQVRUUklCNFNOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMc2hvcnQgeCwgR0xzaG9ydCB5
LCBHTHNob3J0IHosIEdMc2hvcnQgdyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRS
SUI0U1ZOVlBST0MpIChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMc2hvcnQgKnYpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCNFVCTlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVieXRl
IHgsIEdMdWJ5dGUgeSwgR0x1Ynl0ZSB6LCBHTHVieXRlIHcpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMVkVSVEVYQVRUUklCNFVCVk5WUFJPQykgKEdMdWludCBpbmRleCwgY29uc3QgR0x1Ynl0ZSAq
dik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRSSUJTMURWTlZQUk9DKSAoR0x1aW50
IGluZGV4LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGRvdWJsZSAqdik7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xWRVJURVhBVFRSSUJTMUZWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEFUVFJJ
QlMxU1ZOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMc2hvcnQg
KnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCUzJEVk5WUFJPQykgKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xkb3VibGUgKnYpOwp0eXBlZGVmIHZvaWQg
KCAqIFBGTkdMVkVSVEVYQVRUUklCUzJGVk5WUFJPQykgKEdMdWludCBpbmRleCwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRS
SUJTMlNWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHNob3J0
ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEFUVFJJQlMzRFZOVlBST0MpIChHTHVp
bnQgaW5kZXgsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZG91YmxlICp2KTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTFZFUlRFWEFUVFJJQlMzRlZOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRU
UklCUzNTVk5WUFJPQykgKEdMdWludCBpbmRleCwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xzaG9y
dCAqdik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhBVFRSSUJTNERWTlZQUk9DKSAoR0x1
aW50IGluZGV4LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGRvdWJsZSAqdik7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xWRVJURVhBVFRSSUJTNEZWTlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWEFU
VFJJQlM0U1ZOVlBST0MpIChHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMc2hv
cnQgKnYpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYQVRUUklCUzRVQlZOVlBST0MpIChH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWJ5dGUgKnYpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMVEVYQlVNUFBBUkFNRVRFUklWQVRJUFJPQykgKEdMZW51bSBwbmFtZSwgY29u
c3QgR0xpbnQgKnBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFRFWEJVTVBQQVJBTUVURVJG
VkFUSVBST0MpIChHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQgKnBhcmFtKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTEdFVFRFWEJVTVBQQVJBTUVURVJJVkFUSVBST0MpIChHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRURVhCVU1QUEFSQU1FVEVS
RlZBVElQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbSk7CnR5cGVkZWYgR0x1aW50
ICggKiBQRk5HTEdFTkZSQUdNRU5UU0hBREVSU0FUSVBST0MpIChHTHVpbnQgcmFuZ2UpOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMQklOREZSQUdNRU5UU0hBREVSQVRJUFJPQykgKEdMdWludCBpZCk7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xERUxFVEVGUkFHTUVOVFNIQURFUkFUSVBST0MpIChHTHVp
bnQgaWQpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQkVHSU5GUkFHTUVOVFNIQURFUkFUSVBST0Mp
ICh2b2lkKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEVOREZSQUdNRU5UU0hBREVSQVRJUFJPQykg
KHZvaWQpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUEFTU1RFWENPT1JEQVRJUFJPQykgKEdMdWlu
dCBkc3QsIEdMdWludCBjb29yZCwgR0xlbnVtIHN3aXp6bGUpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMU0FNUExFTUFQQVRJUFJPQykgKEdMdWludCBkc3QsIEdMdWludCBpbnRlcnAsIEdMZW51bSBz
d2l6emxlKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENPTE9SRlJBR01FTlRPUDFBVElQUk9DKSAo
R0xlbnVtIG9wLCBHTHVpbnQgZHN0LCBHTHVpbnQgZHN0TWFzaywgR0x1aW50IGRzdE1vZCwgR0x1
aW50IGFyZzEsIEdMdWludCBhcmcxUmVwLCBHTHVpbnQgYXJnMU1vZCk7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xDT0xPUkZSQUdNRU5UT1AyQVRJUFJPQykgKEdMZW51bSBvcCwgR0x1aW50IGRzdCwg
R0x1aW50IGRzdE1hc2ssIEdMdWludCBkc3RNb2QsIEdMdWludCBhcmcxLCBHTHVpbnQgYXJnMVJl
cCwgR0x1aW50IGFyZzFNb2QsIEdMdWludCBhcmcyLCBHTHVpbnQgYXJnMlJlcCwgR0x1aW50IGFy
ZzJNb2QpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMQ09MT1JGUkFHTUVOVE9QM0FUSVBST0MpIChH
TGVudW0gb3AsIEdMdWludCBkc3QsIEdMdWludCBkc3RNYXNrLCBHTHVpbnQgZHN0TW9kLCBHTHVp
bnQgYXJnMSwgR0x1aW50IGFyZzFSZXAsIEdMdWludCBhcmcxTW9kLCBHTHVpbnQgYXJnMiwgR0x1
aW50IGFyZzJSZXAsIEdMdWludCBhcmcyTW9kLCBHTHVpbnQgYXJnMywgR0x1aW50IGFyZzNSZXAs
IEdMdWludCBhcmczTW9kKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEFMUEhBRlJBR01FTlRPUDFB
VElQUk9DKSAoR0xlbnVtIG9wLCBHTHVpbnQgZHN0LCBHTHVpbnQgZHN0TW9kLCBHTHVpbnQgYXJn
MSwgR0x1aW50IGFyZzFSZXAsIEdMdWludCBhcmcxTW9kKTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TEFMUEhBRlJBR01FTlRPUDJBVElQUk9DKSAoR0xlbnVtIG9wLCBHTHVpbnQgZHN0LCBHTHVpbnQg
ZHN0TW9kLCBHTHVpbnQgYXJnMSwgR0x1aW50IGFyZzFSZXAsIEdMdWludCBhcmcxTW9kLCBHTHVp
bnQgYXJnMiwgR0x1aW50IGFyZzJSZXAsIEdMdWludCBhcmcyTW9kKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTEFMUEhBRlJBR01FTlRPUDNBVElQUk9DKSAoR0xlbnVtIG9wLCBHTHVpbnQgZHN0LCBH
THVpbnQgZHN0TW9kLCBHTHVpbnQgYXJnMSwgR0x1aW50IGFyZzFSZXAsIEdMdWludCBhcmcxTW9k
LCBHTHVpbnQgYXJnMiwgR0x1aW50IGFyZzJSZXAsIEdMdWludCBhcmcyTW9kLCBHTHVpbnQgYXJn
MywgR0x1aW50IGFyZzNSZXAsIEdMdWludCBhcmczTW9kKTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TFNFVEZSQUdNRU5UU0hBREVSQ09OU1RBTlRBVElQUk9DKSAoR0x1aW50IGRzdCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUE5UUklBTkdMRVNJQVRJUFJPQykg
KEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMUE5UUklB
TkdMRVNGQVRJUFJPQykgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7CnR5cGVkZWYgR0x1
aW50ICggKiBQRk5HTE5FV09CSkVDVEJVRkZFUkFUSVBST0MpIChHTHNpemVpIHNpemUsIGNvbnN0
IEdMdm9pZCAqcG9pbnRlciwgR0xlbnVtIHVzYWdlKTsKdHlwZWRlZiBHTGJvb2xlYW4gKCAqIFBG
TkdMSVNPQkpFQ1RCVUZGRVJBVElQUk9DKSAoR0x1aW50IGJ1ZmZlcik7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xVUERBVEVPQkpFQ1RCVUZGRVJBVElQUk9DKSAoR0x1aW50IGJ1ZmZlciwgR0x1aW50
IG9mZnNldCwgR0xzaXplaSBzaXplLCBjb25zdCBHTHZvaWQgKnBvaW50ZXIsIEdMZW51bSBwcmVz
ZXJ2ZSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRPQkpFQ1RCVUZGRVJGVkFUSVBST0MpIChH
THVpbnQgYnVmZmVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xHRVRPQkpFQ1RCVUZGRVJJVkFUSVBST0MpIChHTHVpbnQgYnVmZmVyLCBHTGVu
dW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMREVMRVRFT0JK
RUNUQlVGRkVSQVRJUFJPQykgKEdMdWludCBidWZmZXIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdM
QVJSQVlPQkpFQ1RBVElQUk9DKSAoR0xlbnVtIGFycmF5LCBHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwgR0xzaXplaSBzdHJpZGUsIEdMdWludCBidWZmZXIsIEdMdWludCBvZmZzZXQpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMR0VUQVJSQVlPQkpFQ1RGVkFUSVBST0MpIChHTGVudW0gYXJyYXksIEdM
ZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVEFS
UkFZT0JKRUNUSVZBVElQUk9DKSAoR0xlbnVtIGFycmF5LCBHTGVudW0gcG5hbWUsIEdMaW50ICpw
YXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkFSSUFOVEFSUkFZT0JKRUNUQVRJUFJPQykg
KEdMdWludCBpZCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBHTHVpbnQgYnVmZmVyLCBH
THVpbnQgb2Zmc2V0KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVFZBUklBTlRBUlJBWU9CSkVD
VEZWQVRJUFJPQykgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUVkFSSUFOVEFSUkFZT0JKRUNUSVZBVElQUk9DKSAoR0x1
aW50IGlkLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMQkVHSU5WRVJURVhTSEFERVJFWFRQUk9DKSAodm9pZCk7CnR5cGVkZWYgdm9pZCAoICogUEZO
R0xFTkRWRVJURVhTSEFERVJFWFRQUk9DKSAodm9pZCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xC
SU5EVkVSVEVYU0hBREVSRVhUUFJPQykgKEdMdWludCBpZCk7CnR5cGVkZWYgR0x1aW50ICggKiBQ
Rk5HTEdFTlZFUlRFWFNIQURFUlNFWFRQUk9DKSAoR0x1aW50IHJhbmdlKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTERFTEVURVZFUlRFWFNIQURFUkVYVFBST0MpIChHTHVpbnQgaWQpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMU0hBREVST1AxRVhUUFJPQykgKEdMZW51bSBvcCwgR0x1aW50IHJlcywg
R0x1aW50IGFyZzEpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0hBREVST1AyRVhUUFJPQykgKEdM
ZW51bSBvcCwgR0x1aW50IHJlcywgR0x1aW50IGFyZzEsIEdMdWludCBhcmcyKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFNIQURFUk9QM0VYVFBST0MpIChHTGVudW0gb3AsIEdMdWludCByZXMsIEdM
dWludCBhcmcxLCBHTHVpbnQgYXJnMiwgR0x1aW50IGFyZzMpOwp0eXBlZGVmIHZvaWQgKCAqIFBG
TkdMU1dJWlpMRUVYVFBST0MpIChHTHVpbnQgcmVzLCBHTHVpbnQgaW4sIEdMZW51bSBvdXRYLCBH
TGVudW0gb3V0WSwgR0xlbnVtIG91dFosIEdMZW51bSBvdXRXKTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFdSSVRFTUFTS0VYVFBST0MpIChHTHVpbnQgcmVzLCBHTHVpbnQgaW4sIEdMZW51bSBvdXRY
LCBHTGVudW0gb3V0WSwgR0xlbnVtIG91dFosIEdMZW51bSBvdXRXKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTElOU0VSVENPTVBPTkVOVEVYVFBST0MpIChHTHVpbnQgcmVzLCBHTHVpbnQgc3JjLCBH
THVpbnQgbnVtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEVYVFJBQ1RDT01QT05FTlRFWFRQUk9D
KSAoR0x1aW50IHJlcywgR0x1aW50IHNyYywgR0x1aW50IG51bSk7CnR5cGVkZWYgR0x1aW50ICgg
KiBQRk5HTEdFTlNZTUJPTFNFWFRQUk9DKSAoR0xlbnVtIGRhdGF0eXBlLCBHTGVudW0gc3RvcmFn
ZXR5cGUsIEdMZW51bSByYW5nZSwgR0x1aW50IGNvbXBvbmVudHMpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMU0VUSU5WQVJJQU5URVhUUFJPQykgKEdMdWludCBpZCwgR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQgKmFkZHIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMU0VUTE9DQUxDT05TVEFOVEVYVFBS
T0MpIChHTHVpbnQgaWQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICphZGRyKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFZBUklBTlRCVkVYVFBST0MpIChHTHVpbnQgaWQsIGNvbnN0IEdMYnl0ZSAq
YWRkcik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWQVJJQU5UU1ZFWFRQUk9DKSAoR0x1aW50IGlk
LCBjb25zdCBHTHNob3J0ICphZGRyKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZBUklBTlRJVkVY
VFBST0MpIChHTHVpbnQgaWQsIGNvbnN0IEdMaW50ICphZGRyKTsKdHlwZWRlZiB2b2lkICggKiBQ
Rk5HTFZBUklBTlRGVkVYVFBST0MpIChHTHVpbnQgaWQsIGNvbnN0IEdMZmxvYXQgKmFkZHIpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkFSSUFOVERWRVhUUFJPQykgKEdMdWludCBpZCwgY29uc3Qg
R0xkb3VibGUgKmFkZHIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkFSSUFOVFVCVkVYVFBST0Mp
IChHTHVpbnQgaWQsIGNvbnN0IEdMdWJ5dGUgKmFkZHIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdM
VkFSSUFOVFVTVkVYVFBST0MpIChHTHVpbnQgaWQsIGNvbnN0IEdMdXNob3J0ICphZGRyKTsKdHlw
ZWRlZiB2b2lkICggKiBQRk5HTFZBUklBTlRVSVZFWFRQUk9DKSAoR0x1aW50IGlkLCBjb25zdCBH
THVpbnQgKmFkZHIpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkFSSUFOVFBPSU5URVJFWFRQUk9D
KSAoR0x1aW50IGlkLCBHTGVudW0gdHlwZSwgR0x1aW50IHN0cmlkZSwgY29uc3Qgdm9pZCAqYWRk
cik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xFTkFCTEVWQVJJQU5UQ0xJRU5UU1RBVEVFWFRQUk9D
KSAoR0x1aW50IGlkKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTERJU0FCTEVWQVJJQU5UQ0xJRU5U
U1RBVEVFWFRQUk9DKSAoR0x1aW50IGlkKTsKdHlwZWRlZiBHTHVpbnQgKCAqIFBGTkdMQklORExJ
R0hUUEFSQU1FVEVSRVhUUFJPQykgKEdMZW51bSBsaWdodCwgR0xlbnVtIHZhbHVlKTsKdHlwZWRl
ZiBHTHVpbnQgKCAqIFBGTkdMQklORE1BVEVSSUFMUEFSQU1FVEVSRVhUUFJPQykgKEdMZW51bSBm
YWNlLCBHTGVudW0gdmFsdWUpOwp0eXBlZGVmIEdMdWludCAoICogUEZOR0xCSU5EVEVYR0VOUEFS
QU1FVEVSRVhUUFJPQykgKEdMZW51bSB1bml0LCBHTGVudW0gY29vcmQsIEdMZW51bSB2YWx1ZSk7
CnR5cGVkZWYgR0x1aW50ICggKiBQRk5HTEJJTkRURVhUVVJFVU5JVFBBUkFNRVRFUkVYVFBST0Mp
IChHTGVudW0gdW5pdCwgR0xlbnVtIHZhbHVlKTsKdHlwZWRlZiBHTHVpbnQgKCAqIFBGTkdMQklO
RFBBUkFNRVRFUkVYVFBST0MpIChHTGVudW0gdmFsdWUpOwp0eXBlZGVmIEdMYm9vbGVhbiAoICog
UEZOR0xJU1ZBUklBTlRFTkFCTEVERVhUUFJPQykgKEdMdWludCBpZCwgR0xlbnVtIGNhcCk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xHRVRWQVJJQU5UQk9PTEVBTlZFWFRQUk9DKSAoR0x1aW50IGlk
LCBHTGVudW0gdmFsdWUsIEdMYm9vbGVhbiAqZGF0YSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xH
RVRWQVJJQU5USU5URUdFUlZFWFRQUk9DKSAoR0x1aW50IGlkLCBHTGVudW0gdmFsdWUsIEdMaW50
ICpkYXRhKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVFZBUklBTlRGTE9BVFZFWFRQUk9DKSAo
R0x1aW50IGlkLCBHTGVudW0gdmFsdWUsIEdMZmxvYXQgKmRhdGEpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMR0VUVkFSSUFOVFBPSU5URVJWRVhUUFJPQykgKEdMdWludCBpZCwgR0xlbnVtIHZhbHVl
LCBHTHZvaWQqICpkYXRhKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdFVElOVkFSSUFOVEJPT0xF
QU5WRVhUUFJPQykgKEdMdWludCBpZCwgR0xlbnVtIHZhbHVlLCBHTGJvb2xlYW4gKmRhdGEpOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMR0VUSU5WQVJJQU5USU5URUdFUlZFWFRQUk9DKSAoR0x1aW50
IGlkLCBHTGVudW0gdmFsdWUsIEdMaW50ICpkYXRhKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdF
VElOVkFSSUFOVEZMT0FUVkVYVFBST0MpIChHTHVpbnQgaWQsIEdMZW51bSB2YWx1ZSwgR0xmbG9h
dCAqZGF0YSk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRMT0NBTENPTlNUQU5UQk9PTEVBTlZF
WFRQUk9DKSAoR0x1aW50IGlkLCBHTGVudW0gdmFsdWUsIEdMYm9vbGVhbiAqZGF0YSk7CnR5cGVk
ZWYgdm9pZCAoICogUEZOR0xHRVRMT0NBTENPTlNUQU5USU5URUdFUlZFWFRQUk9DKSAoR0x1aW50
IGlkLCBHTGVudW0gdmFsdWUsIEdMaW50ICpkYXRhKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTEdF
VExPQ0FMQ09OU1RBTlRGTE9BVFZFWFRQUk9DKSAoR0x1aW50IGlkLCBHTGVudW0gdmFsdWUsIEdM
ZmxvYXQgKmRhdGEpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNMVNBVElQUk9D
KSAoR0xlbnVtIHN0cmVhbSwgR0xzaG9ydCB4KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRF
WFNUUkVBTTFTVkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBjb25zdCBHTHNob3J0ICpjb29yZHMp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNMUlBVElQUk9DKSAoR0xlbnVtIHN0
cmVhbSwgR0xpbnQgeCk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhTVFJFQU0xSVZBVElQ
Uk9DKSAoR0xlbnVtIHN0cmVhbSwgY29uc3QgR0xpbnQgKmNvb3Jkcyk7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xWRVJURVhTVFJFQU0xRkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBHTGZsb2F0IHgp
Owp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNMUZWQVRJUFJPQykgKEdMZW51bSBz
dHJlYW0sIGNvbnN0IEdMZmxvYXQgKmNvb3Jkcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJU
RVhTVFJFQU0xREFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBHTGRvdWJsZSB4KTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFZFUlRFWFNUUkVBTTFEVkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBjb25z
dCBHTGRvdWJsZSAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWFNUUkVBTTJT
QVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIEdMc2hvcnQgeCwgR0xzaG9ydCB5KTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFZFUlRFWFNUUkVBTTJTVkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBjb25z
dCBHTHNob3J0ICpjb29yZHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNMklB
VElQUk9DKSAoR0xlbnVtIHN0cmVhbSwgR0xpbnQgeCwgR0xpbnQgeSk7CnR5cGVkZWYgdm9pZCAo
ICogUEZOR0xWRVJURVhTVFJFQU0ySVZBVElQUk9DKSAoR0xlbnVtIHN0cmVhbSwgY29uc3QgR0xp
bnQgKmNvb3Jkcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhTVFJFQU0yRkFUSVBST0Mp
IChHTGVudW0gc3RyZWFtLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CnR5cGVkZWYgdm9pZCAoICog
UEZOR0xWRVJURVhTVFJFQU0yRlZBVElQUk9DKSAoR0xlbnVtIHN0cmVhbSwgY29uc3QgR0xmbG9h
dCAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWFNUUkVBTTJEQVRJUFJPQykg
KEdMZW51bSBzdHJlYW0sIEdMZG91YmxlIHgsIEdMZG91YmxlIHkpOwp0eXBlZGVmIHZvaWQgKCAq
IFBGTkdMVkVSVEVYU1RSRUFNMkRWQVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIGNvbnN0IEdMZG91
YmxlICpjb29yZHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNM1NBVElQUk9D
KSAoR0xlbnVtIHN0cmVhbSwgR0xzaG9ydCB4LCBHTHNob3J0IHksIEdMc2hvcnQgeik7CnR5cGVk
ZWYgdm9pZCAoICogUEZOR0xWRVJURVhTVFJFQU0zU1ZBVElQUk9DKSAoR0xlbnVtIHN0cmVhbSwg
Y29uc3QgR0xzaG9ydCAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRFWFNUUkVB
TTNJQVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwp0
eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNM0lWQVRJUFJPQykgKEdMZW51bSBzdHJl
YW0sIGNvbnN0IEdMaW50ICpjb29yZHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RS
RUFNM0ZBVElQUk9DKSAoR0xlbnVtIHN0cmVhbSwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxv
YXQgeik7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhTVFJFQU0zRlZBVElQUk9DKSAoR0xl
bnVtIHN0cmVhbSwgY29uc3QgR0xmbG9hdCAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5H
TFZFUlRFWFNUUkVBTTNEQVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIEdMZG91YmxlIHgsIEdMZG91
YmxlIHksIEdMZG91YmxlIHopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNM0RW
QVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIGNvbnN0IEdMZG91YmxlICpjb29yZHMpOwp0eXBlZGVm
IHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNNFNBVElQUk9DKSAoR0xlbnVtIHN0cmVhbSwgR0xz
aG9ydCB4LCBHTHNob3J0IHksIEdMc2hvcnQgeiwgR0xzaG9ydCB3KTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTFZFUlRFWFNUUkVBTTRTVkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBjb25zdCBHTHNo
b3J0ICpjb29yZHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNNElBVElQUk9D
KSAoR0xlbnVtIHN0cmVhbSwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhTVFJFQU00SVZBVElQUk9DKSAoR0xlbnVtIHN0cmVh
bSwgY29uc3QgR0xpbnQgKmNvb3Jkcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xWRVJURVhTVFJF
QU00RkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9h
dCB6LCBHTGZsb2F0IHcpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMVkVSVEVYU1RSRUFNNEZWQVRJ
UFJPQykgKEdMZW51bSBzdHJlYW0sIGNvbnN0IEdMZmxvYXQgKmNvb3Jkcyk7CnR5cGVkZWYgdm9p
ZCAoICogUEZOR0xWRVJURVhTVFJFQU00REFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBHTGRvdWJs
ZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6LCBHTGRvdWJsZSB3KTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTFZFUlRFWFNUUkVBTTREVkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBjb25zdCBHTGRv
dWJsZSAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE5PUk1BTFNUUkVBTTNCQVRJUFJP
QykgKEdMZW51bSBzdHJlYW0sIEdMYnl0ZSBueCwgR0xieXRlIG55LCBHTGJ5dGUgbnopOwp0eXBl
ZGVmIHZvaWQgKCAqIFBGTkdMTk9STUFMU1RSRUFNM0JWQVRJUFJPQykgKEdMZW51bSBzdHJlYW0s
IGNvbnN0IEdMYnl0ZSAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE5PUk1BTFNUUkVB
TTNTQVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIEdMc2hvcnQgbngsIEdMc2hvcnQgbnksIEdMc2hv
cnQgbnopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMTk9STUFMU1RSRUFNM1NWQVRJUFJPQykgKEdM
ZW51bSBzdHJlYW0sIGNvbnN0IEdMc2hvcnQgKmNvb3Jkcyk7CnR5cGVkZWYgdm9pZCAoICogUEZO
R0xOT1JNQUxTVFJFQU0zSUFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBHTGludCBueCwgR0xpbnQg
bnksIEdMaW50IG56KTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTE5PUk1BTFNUUkVBTTNJVkFUSVBS
T0MpIChHTGVudW0gc3RyZWFtLCBjb25zdCBHTGludCAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTE5PUk1BTFNUUkVBTTNGQVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIEdMZmxvYXQgbngs
IEdMZmxvYXQgbnksIEdMZmxvYXQgbnopOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMTk9STUFMU1RS
RUFNM0ZWQVRJUFJPQykgKEdMZW51bSBzdHJlYW0sIGNvbnN0IEdMZmxvYXQgKmNvb3Jkcyk7CnR5
cGVkZWYgdm9pZCAoICogUEZOR0xOT1JNQUxTVFJFQU0zREFUSVBST0MpIChHTGVudW0gc3RyZWFt
LCBHTGRvdWJsZSBueCwgR0xkb3VibGUgbnksIEdMZG91YmxlIG56KTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTE5PUk1BTFNUUkVBTTNEVkFUSVBST0MpIChHTGVudW0gc3RyZWFtLCBjb25zdCBHTGRv
dWJsZSAqY29vcmRzKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTENMSUVOVEFDVElWRVZFUlRFWFNU
UkVBTUFUSVBST0MpIChHTGVudW0gc3RyZWFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFZFUlRF
WEJMRU5ERU5WSUFUSVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKdHlwZWRlZiB2
b2lkICggKiBQRk5HTFZFUlRFWEJMRU5ERU5WRkFUSVBST0MpIChHTGVudW0gcG5hbWUsIEdMZmxv
YXQgcGFyYW0pOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMRUxFTUVOVFBPSU5URVJBVElQUk9DKSAo
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlcik7CnR5cGVkZWYgdm9pZCAoICogUEZO
R0xEUkFXRUxFTUVOVEFSUkFZQVRJUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KTsK
dHlwZWRlZiB2b2lkICggKiBQRk5HTERSQVdSQU5HRUVMRU1FTlRBUlJBWUFUSVBST0MpIChHTGVu
dW0gbW9kZSwgR0x1aW50IHN0YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50KTsKCgoKCgoK
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xEUkFXTUVTSEFSUkFZU1NVTlBST0MpIChHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgd2lkdGgpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMR0VOT0NDTFVTSU9OUVVFUklFU05WUFJPQykgKEdMc2l6ZWkgbiwgR0x1aW50
ICppZHMpOwp0eXBlZGVmIHZvaWQgKCAqIFBGTkdMREVMRVRFT0NDTFVTSU9OUVVFUklFU05WUFJP
QykgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICppZHMpOwp0eXBlZGVmIEdMYm9vbGVhbiAoICog
UEZOR0xJU09DQ0xVU0lPTlFVRVJZTlZQUk9DKSAoR0x1aW50IGlkKTsKdHlwZWRlZiB2b2lkICgg
KiBQRk5HTEJFR0lOT0NDTFVTSU9OUVVFUllOVlBST0MpIChHTHVpbnQgaWQpOwp0eXBlZGVmIHZv
aWQgKCAqIFBGTkdMRU5ET0NDTFVTSU9OUVVFUllOVlBST0MpICh2b2lkKTsKdHlwZWRlZiB2b2lk
ICggKiBQRk5HTEdFVE9DQ0xVU0lPTlFVRVJZSVZOVlBST0MpIChHTHVpbnQgaWQsIEdMZW51bSBw
bmFtZSwgR0xpbnQgKnBhcmFtcyk7CnR5cGVkZWYgdm9pZCAoICogUEZOR0xHRVRPQ0NMVVNJT05R
VUVSWVVJVk5WUFJPQykgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcyk7
CnR5cGVkZWYgdm9pZCAoICogUEZOR0xQT0lOVFBBUkFNRVRFUklOVlBST0MpIChHTGVudW0gcG5h
bWUsIEdMaW50IHBhcmFtKTsKdHlwZWRlZiB2b2lkICggKiBQRk5HTFBPSU5UUEFSQU1FVEVSSVZO
VlBST0MpIChHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMpOwp9CmV4dGVybiB2b2lk
IGdsRW5hYmxlVHJhY2VNRVNBKCBHTGJpdGZpZWxkIG1hc2sgKTsKZXh0ZXJuIHZvaWQgZ2xEaXNh
YmxlVHJhY2VNRVNBKCBHTGJpdGZpZWxkIG1hc2sgKTsKZXh0ZXJuIHZvaWQgZ2xOZXdUcmFjZU1F
U0EoIEdMYml0ZmllbGQgbWFzaywgY29uc3QgR0x1Ynl0ZSAqIHRyYWNlTmFtZSApOwpleHRlcm4g
dm9pZCBnbEVuZFRyYWNlTUVTQSggdm9pZCApOwpleHRlcm4gdm9pZCBnbFRyYWNlQXNzZXJ0QXR0
cmliTUVTQSggR0xiaXRmaWVsZCBhdHRyaWJNYXNrICk7CmV4dGVybiB2b2lkIGdsVHJhY2VDb21t
ZW50TUVTQSggY29uc3QgR0x1Ynl0ZSAqIGNvbW1lbnQgKTsKZXh0ZXJuIHZvaWQgZ2xUcmFjZVRl
eHR1cmVNRVNBKCBHTHVpbnQgbmFtZSwgY29uc3QgR0x1Ynl0ZSogY29tbWVudCApOwpleHRlcm4g
dm9pZCBnbFRyYWNlTGlzdE1FU0EoIEdMdWludCBuYW1lLCBjb25zdCBHTHVieXRlKiBjb21tZW50
ICk7CmV4dGVybiB2b2lkIGdsVHJhY2VQb2ludGVyTUVTQSggR0x2b2lkKiBwb2ludGVyLCBjb25z
dCBHTHVieXRlKiBjb21tZW50ICk7CmV4dGVybiB2b2lkIGdsVHJhY2VQb2ludGVyUmFuZ2VNRVNB
KCBjb25zdCBHTHZvaWQqIGZpcnN0LCBjb25zdCBHTHZvaWQqIGxhc3QsIGNvbnN0IEdMdWJ5dGUq
IGNvbW1lbnQgKTsKfQpleHRlcm4gIkMiIHsKY2xhc3MgR0xVbnVyYnM7CmNsYXNzIEdMVXF1YWRy
aWM7CmNsYXNzIEdMVXRlc3NlbGF0b3I7CgoKCgoKCnR5cGVkZWYgR0xVbnVyYnMgR0xVbnVyYnNP
Ymo7CnR5cGVkZWYgR0xVcXVhZHJpYyBHTFVxdWFkcmljT2JqOwp0eXBlZGVmIEdMVXRlc3NlbGF0
b3IgR0xVdGVzc2VsYXRvck9iajsKdHlwZWRlZiBHTFV0ZXNzZWxhdG9yIEdMVXRyaWFuZ3VsYXRv
ck9iajsKCgoKCnR5cGVkZWYgdm9pZCAoICpfR0xVZnVuY3B0cikoKTsKCmV4dGVybiB2b2lkIGds
dUJlZ2luQ3VydmUgKEdMVW51cmJzKiBudXJiKTsKZXh0ZXJuIHZvaWQgZ2x1QmVnaW5Qb2x5Z29u
IChHTFV0ZXNzZWxhdG9yKiB0ZXNzKTsKZXh0ZXJuIHZvaWQgZ2x1QmVnaW5TdXJmYWNlIChHTFVu
dXJicyogbnVyYik7CmV4dGVybiB2b2lkIGdsdUJlZ2luVHJpbSAoR0xVbnVyYnMqIG51cmIpOwpl
eHRlcm4gR0xpbnQgZ2x1QnVpbGQxRE1pcG1hcExldmVscyAoR0xlbnVtIHRhcmdldCwgR0xpbnQg
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCBsZXZlbCwgR0xpbnQgYmFzZSwgR0xpbnQgbWF4LCBjb25zdCB2b2lkICpkYXRhKTsK
ZXh0ZXJuIEdMaW50IGdsdUJ1aWxkMURNaXBtYXBzIChHTGVudW0gdGFyZ2V0LCBHTGludCBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IHZvaWQgKmRhdGEpOwpleHRlcm4gR0xpbnQgZ2x1QnVpbGQyRE1pcG1hcExldmVscyAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGJh
c2UsIEdMaW50IG1heCwgY29uc3Qgdm9pZCAqZGF0YSk7CmV4dGVybiBHTGludCBnbHVCdWlsZDJE
TWlwbWFwcyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCAqZGF0YSk7CmV4dGVybiBHTGludCBnbHVCdWlsZDNETWlwbWFwTGV2ZWxzIChHTGVudW0gdGFy
Z2V0LCBHTGludCBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBsZXZlbCwg
R0xpbnQgYmFzZSwgR0xpbnQgbWF4LCBjb25zdCB2b2lkICpkYXRhKTsKZXh0ZXJuIEdMaW50IGds
dUJ1aWxkM0RNaXBtYXBzIChHTGVudW0gdGFyZ2V0LCBHTGludCBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICpkYXRhKTsKZXh0ZXJuIEdMYm9vbGVhbiBnbHVDaGVj
a0V4dGVuc2lvbiAoY29uc3QgR0x1Ynl0ZSAqZXh0TmFtZSwgY29uc3QgR0x1Ynl0ZSAqZXh0U3Ry
aW5nKTsKZXh0ZXJuIHZvaWQgZ2x1Q3lsaW5kZXIgKEdMVXF1YWRyaWMqIHF1YWQsIEdMZG91Ymxl
IGJhc2UsIEdMZG91YmxlIHRvcCwgR0xkb3VibGUgaGVpZ2h0LCBHTGludCBzbGljZXMsIEdMaW50
IHN0YWNrcyk7CmV4dGVybiB2b2lkIGdsdURlbGV0ZU51cmJzUmVuZGVyZXIgKEdMVW51cmJzKiBu
dXJiKTsKZXh0ZXJuIHZvaWQgZ2x1RGVsZXRlUXVhZHJpYyAoR0xVcXVhZHJpYyogcXVhZCk7CmV4
dGVybiB2b2lkIGdsdURlbGV0ZVRlc3MgKEdMVXRlc3NlbGF0b3IqIHRlc3MpOwpleHRlcm4gdm9p
ZCBnbHVEaXNrIChHTFVxdWFkcmljKiBxdWFkLCBHTGRvdWJsZSBpbm5lciwgR0xkb3VibGUgb3V0
ZXIsIEdMaW50IHNsaWNlcywgR0xpbnQgbG9vcHMpOwpleHRlcm4gdm9pZCBnbHVFbmRDdXJ2ZSAo
R0xVbnVyYnMqIG51cmIpOwpleHRlcm4gdm9pZCBnbHVFbmRQb2x5Z29uIChHTFV0ZXNzZWxhdG9y
KiB0ZXNzKTsKZXh0ZXJuIHZvaWQgZ2x1RW5kU3VyZmFjZSAoR0xVbnVyYnMqIG51cmIpOwpleHRl
cm4gdm9pZCBnbHVFbmRUcmltIChHTFVudXJicyogbnVyYik7CmV4dGVybiBjb25zdCBHTHVieXRl
ICogZ2x1RXJyb3JTdHJpbmcgKEdMZW51bSBlcnJvcik7CmV4dGVybiB2b2lkIGdsdUdldE51cmJz
UHJvcGVydHkgKEdMVW51cmJzKiBudXJiLCBHTGVudW0gcHJvcGVydHksIEdMZmxvYXQqIGRhdGEp
OwpleHRlcm4gY29uc3QgR0x1Ynl0ZSAqIGdsdUdldFN0cmluZyAoR0xlbnVtIG5hbWUpOwpleHRl
cm4gdm9pZCBnbHVHZXRUZXNzUHJvcGVydHkgKEdMVXRlc3NlbGF0b3IqIHRlc3MsIEdMZW51bSB3
aGljaCwgR0xkb3VibGUqIGRhdGEpOwpleHRlcm4gdm9pZCBnbHVMb2FkU2FtcGxpbmdNYXRyaWNl
cyAoR0xVbnVyYnMqIG51cmIsIGNvbnN0IEdMZmxvYXQgKm1vZGVsLCBjb25zdCBHTGZsb2F0ICpw
ZXJzcGVjdGl2ZSwgY29uc3QgR0xpbnQgKnZpZXcpOwpleHRlcm4gdm9pZCBnbHVMb29rQXQgKEdM
ZG91YmxlIGV5ZVgsIEdMZG91YmxlIGV5ZVksIEdMZG91YmxlIGV5ZVosIEdMZG91YmxlIGNlbnRl
clgsIEdMZG91YmxlIGNlbnRlclksIEdMZG91YmxlIGNlbnRlclosIEdMZG91YmxlIHVwWCwgR0xk
b3VibGUgdXBZLCBHTGRvdWJsZSB1cFopOwpleHRlcm4gR0xVbnVyYnMqIGdsdU5ld051cmJzUmVu
ZGVyZXIgKHZvaWQpOwpleHRlcm4gR0xVcXVhZHJpYyogZ2x1TmV3UXVhZHJpYyAodm9pZCk7CmV4
dGVybiBHTFV0ZXNzZWxhdG9yKiBnbHVOZXdUZXNzICh2b2lkKTsKZXh0ZXJuIHZvaWQgZ2x1TmV4
dENvbnRvdXIgKEdMVXRlc3NlbGF0b3IqIHRlc3MsIEdMZW51bSB0eXBlKTsKZXh0ZXJuIHZvaWQg
Z2x1TnVyYnNDYWxsYmFjayAoR0xVbnVyYnMqIG51cmIsIEdMZW51bSB3aGljaCwgX0dMVWZ1bmNw
dHIgQ2FsbEJhY2tGdW5jKTsKZXh0ZXJuIHZvaWQgZ2x1TnVyYnNDYWxsYmFja0RhdGEgKEdMVW51
cmJzKiBudXJiLCBHTHZvaWQqIHVzZXJEYXRhKTsKZXh0ZXJuIHZvaWQgZ2x1TnVyYnNDYWxsYmFj
a0RhdGFFWFQgKEdMVW51cmJzKiBudXJiLCBHTHZvaWQqIHVzZXJEYXRhKTsKZXh0ZXJuIHZvaWQg
Z2x1TnVyYnNDdXJ2ZSAoR0xVbnVyYnMqIG51cmIsIEdMaW50IGtub3RDb3VudCwgR0xmbG9hdCAq
a25vdHMsIEdMaW50IHN0cmlkZSwgR0xmbG9hdCAqY29udHJvbCwgR0xpbnQgb3JkZXIsIEdMZW51
bSB0eXBlKTsKZXh0ZXJuIHZvaWQgZ2x1TnVyYnNQcm9wZXJ0eSAoR0xVbnVyYnMqIG51cmIsIEdM
ZW51bSBwcm9wZXJ0eSwgR0xmbG9hdCB2YWx1ZSk7CmV4dGVybiB2b2lkIGdsdU51cmJzU3VyZmFj
ZSAoR0xVbnVyYnMqIG51cmIsIEdMaW50IHNLbm90Q291bnQsIEdMZmxvYXQqIHNLbm90cywgR0xp
bnQgdEtub3RDb3VudCwgR0xmbG9hdCogdEtub3RzLCBHTGludCBzU3RyaWRlLCBHTGludCB0U3Ry
aWRlLCBHTGZsb2F0KiBjb250cm9sLCBHTGludCBzT3JkZXIsIEdMaW50IHRPcmRlciwgR0xlbnVt
IHR5cGUpOwpleHRlcm4gdm9pZCBnbHVPcnRobzJEIChHTGRvdWJsZSBsZWZ0LCBHTGRvdWJsZSBy
aWdodCwgR0xkb3VibGUgYm90dG9tLCBHTGRvdWJsZSB0b3ApOwpleHRlcm4gdm9pZCBnbHVQYXJ0
aWFsRGlzayAoR0xVcXVhZHJpYyogcXVhZCwgR0xkb3VibGUgaW5uZXIsIEdMZG91YmxlIG91dGVy
LCBHTGludCBzbGljZXMsIEdMaW50IGxvb3BzLCBHTGRvdWJsZSBzdGFydCwgR0xkb3VibGUgc3dl
ZXApOwpleHRlcm4gdm9pZCBnbHVQZXJzcGVjdGl2ZSAoR0xkb3VibGUgZm92eSwgR0xkb3VibGUg
YXNwZWN0LCBHTGRvdWJsZSB6TmVhciwgR0xkb3VibGUgekZhcik7CmV4dGVybiB2b2lkIGdsdVBp
Y2tNYXRyaXggKEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91YmxlIGRlbFgsIEdMZG91Ymxl
IGRlbFksIEdMaW50ICp2aWV3cG9ydCk7CmV4dGVybiBHTGludCBnbHVQcm9qZWN0IChHTGRvdWJs
ZSBvYmpYLCBHTGRvdWJsZSBvYmpZLCBHTGRvdWJsZSBvYmpaLCBjb25zdCBHTGRvdWJsZSAqbW9k
ZWwsIGNvbnN0IEdMZG91YmxlICpwcm9qLCBjb25zdCBHTGludCAqdmlldywgR0xkb3VibGUqIHdp
blgsIEdMZG91YmxlKiB3aW5ZLCBHTGRvdWJsZSogd2luWik7CmV4dGVybiB2b2lkIGdsdVB3bEN1
cnZlIChHTFVudXJicyogbnVyYiwgR0xpbnQgY291bnQsIEdMZmxvYXQqIGRhdGEsIEdMaW50IHN0
cmlkZSwgR0xlbnVtIHR5cGUpOwpleHRlcm4gdm9pZCBnbHVRdWFkcmljQ2FsbGJhY2sgKEdMVXF1
YWRyaWMqIHF1YWQsIEdMZW51bSB3aGljaCwgX0dMVWZ1bmNwdHIgQ2FsbEJhY2tGdW5jKTsKZXh0
ZXJuIHZvaWQgZ2x1UXVhZHJpY0RyYXdTdHlsZSAoR0xVcXVhZHJpYyogcXVhZCwgR0xlbnVtIGRy
YXcpOwpleHRlcm4gdm9pZCBnbHVRdWFkcmljTm9ybWFscyAoR0xVcXVhZHJpYyogcXVhZCwgR0xl
bnVtIG5vcm1hbCk7CmV4dGVybiB2b2lkIGdsdVF1YWRyaWNPcmllbnRhdGlvbiAoR0xVcXVhZHJp
YyogcXVhZCwgR0xlbnVtIG9yaWVudGF0aW9uKTsKZXh0ZXJuIHZvaWQgZ2x1UXVhZHJpY1RleHR1
cmUgKEdMVXF1YWRyaWMqIHF1YWQsIEdMYm9vbGVhbiB0ZXh0dXJlKTsKZXh0ZXJuIEdMaW50IGds
dVNjYWxlSW1hZ2UgKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd0luLCBHTHNpemVpIGhJbiwgR0xl
bnVtIHR5cGVJbiwgY29uc3Qgdm9pZCAqZGF0YUluLCBHTHNpemVpIHdPdXQsIEdMc2l6ZWkgaE91
dCwgR0xlbnVtIHR5cGVPdXQsIEdMdm9pZCogZGF0YU91dCk7CmV4dGVybiB2b2lkIGdsdVNwaGVy
ZSAoR0xVcXVhZHJpYyogcXVhZCwgR0xkb3VibGUgcmFkaXVzLCBHTGludCBzbGljZXMsIEdMaW50
IHN0YWNrcyk7CmV4dGVybiB2b2lkIGdsdVRlc3NCZWdpbkNvbnRvdXIgKEdMVXRlc3NlbGF0b3Iq
IHRlc3MpOwpleHRlcm4gdm9pZCBnbHVUZXNzQmVnaW5Qb2x5Z29uIChHTFV0ZXNzZWxhdG9yKiB0
ZXNzLCBHTHZvaWQqIGRhdGEpOwpleHRlcm4gdm9pZCBnbHVUZXNzQ2FsbGJhY2sgKEdMVXRlc3Nl
bGF0b3IqIHRlc3MsIEdMZW51bSB3aGljaCwgX0dMVWZ1bmNwdHIgQ2FsbEJhY2tGdW5jKTsKZXh0
ZXJuIHZvaWQgZ2x1VGVzc0VuZENvbnRvdXIgKEdMVXRlc3NlbGF0b3IqIHRlc3MpOwpleHRlcm4g
dm9pZCBnbHVUZXNzRW5kUG9seWdvbiAoR0xVdGVzc2VsYXRvciogdGVzcyk7CmV4dGVybiB2b2lk
IGdsdVRlc3NOb3JtYWwgKEdMVXRlc3NlbGF0b3IqIHRlc3MsIEdMZG91YmxlIHZhbHVlWCwgR0xk
b3VibGUgdmFsdWVZLCBHTGRvdWJsZSB2YWx1ZVopOwpleHRlcm4gdm9pZCBnbHVUZXNzUHJvcGVy
dHkgKEdMVXRlc3NlbGF0b3IqIHRlc3MsIEdMZW51bSB3aGljaCwgR0xkb3VibGUgZGF0YSk7CmV4
dGVybiB2b2lkIGdsdVRlc3NWZXJ0ZXggKEdMVXRlc3NlbGF0b3IqIHRlc3MsIEdMZG91YmxlICps
b2NhdGlvbiwgR0x2b2lkKiBkYXRhKTsKZXh0ZXJuIEdMaW50IGdsdVVuUHJvamVjdCAoR0xkb3Vi
bGUgd2luWCwgR0xkb3VibGUgd2luWSwgR0xkb3VibGUgd2luWiwgY29uc3QgR0xkb3VibGUgKm1v
ZGVsLCBjb25zdCBHTGRvdWJsZSAqcHJvaiwgY29uc3QgR0xpbnQgKnZpZXcsIEdMZG91YmxlKiBv
YmpYLCBHTGRvdWJsZSogb2JqWSwgR0xkb3VibGUqIG9ialopOwpleHRlcm4gR0xpbnQgZ2x1VW5Q
cm9qZWN0NCAoR0xkb3VibGUgd2luWCwgR0xkb3VibGUgd2luWSwgR0xkb3VibGUgd2luWiwgR0xk
b3VibGUgY2xpcFcsIGNvbnN0IEdMZG91YmxlICptb2RlbCwgY29uc3QgR0xkb3VibGUgKnByb2os
IGNvbnN0IEdMaW50ICp2aWV3LCBHTGRvdWJsZSBuZWFyVmFsLCBHTGRvdWJsZSBmYXJWYWwsIEdM
ZG91YmxlKiBvYmpYLCBHTGRvdWJsZSogb2JqWSwgR0xkb3VibGUqIG9ialosIEdMZG91YmxlKiBv
YmpXKTsKCgp9CgpjbGFzcyBRR0xDb2xvck1hcDsKY2xhc3MgUVBpeG1hcDsKCmNsYXNzIFFHTE92
ZXJsYXlXaWRnZXQ7CgoKCgoKY2xhc3MgUUdMCnsKcHVibGljOgogICAgZW51bSBGb3JtYXRPcHRp
b24gewogICAgICAgIERvdWJsZUJ1ZmZlciA9IDB4MDAwMSwKICAgICAgICBEZXB0aEJ1ZmZlciA9
IDB4MDAwMiwKICAgICAgICBSZ2JhID0gMHgwMDA0LAogICAgICAgIEFscGhhQ2hhbm5lbCA9IDB4
MDAwOCwKICAgICAgICBBY2N1bUJ1ZmZlciA9IDB4MDAxMCwKICAgICAgICBTdGVuY2lsQnVmZmVy
ID0gMHgwMDIwLAogICAgICAgIFN0ZXJlb0J1ZmZlcnMgPSAweDAwNDAsCiAgICAgICAgRGlyZWN0
UmVuZGVyaW5nID0gMHgwMDgwLAogICAgICAgIEhhc092ZXJsYXkgPSAweDAxMDAsCiAgICAgICAg
U2luZ2xlQnVmZmVyID0gRG91YmxlQnVmZmVyIDw8IDE2LAogICAgICAgIE5vRGVwdGhCdWZmZXIg
PSBEZXB0aEJ1ZmZlciA8PCAxNiwKICAgICAgICBDb2xvckluZGV4ID0gUmdiYSA8PCAxNiwKICAg
ICAgICBOb0FscGhhQ2hhbm5lbCA9IEFscGhhQ2hhbm5lbCA8PCAxNiwKICAgICAgICBOb0FjY3Vt
QnVmZmVyID0gQWNjdW1CdWZmZXIgPDwgMTYsCiAgICAgICAgTm9TdGVuY2lsQnVmZmVyID0gU3Rl
bmNpbEJ1ZmZlciA8PCAxNiwKICAgICAgICBOb1N0ZXJlb0J1ZmZlcnMgPSBTdGVyZW9CdWZmZXJz
IDw8IDE2LAogICAgICAgIEluZGlyZWN0UmVuZGVyaW5nID0gRGlyZWN0UmVuZGVyaW5nIDw8IDE2
LAogICAgICAgIE5vT3ZlcmxheSA9IEhhc092ZXJsYXkgPDwgMTYKICAgIH07Cn07CgoKCmNsYXNz
IFFHTEZvcm1hdCA6IHB1YmxpYyBRR0wKewpwdWJsaWM6CiAgICBRR0xGb3JtYXQoKTsKICAgIFFH
TEZvcm1hdCggaW50IG9wdGlvbnMsIGludCBwbGFuZSA9IDAgKTsKCiAgICBib29sIGRvdWJsZUJ1
ZmZlcigpIGNvbnN0OwogICAgdm9pZCBzZXREb3VibGVCdWZmZXIoIGJvb2wgZW5hYmxlICk7CiAg
ICBib29sIGRlcHRoKCkgY29uc3Q7CiAgICB2b2lkIHNldERlcHRoKCBib29sIGVuYWJsZSApOwog
ICAgYm9vbCByZ2JhKCkgY29uc3Q7CiAgICB2b2lkIHNldFJnYmEoIGJvb2wgZW5hYmxlICk7CiAg
ICBib29sIGFscGhhKCkgY29uc3Q7CiAgICB2b2lkIHNldEFscGhhKCBib29sIGVuYWJsZSApOwog
ICAgYm9vbCBhY2N1bSgpIGNvbnN0OwogICAgdm9pZCBzZXRBY2N1bSggYm9vbCBlbmFibGUgKTsK
ICAgIGJvb2wgc3RlbmNpbCgpIGNvbnN0OwogICAgdm9pZCBzZXRTdGVuY2lsKCBib29sIGVuYWJs
ZSApOwogICAgYm9vbCBzdGVyZW8oKSBjb25zdDsKICAgIHZvaWQgc2V0U3RlcmVvKCBib29sIGVu
YWJsZSApOwogICAgYm9vbCBkaXJlY3RSZW5kZXJpbmcoKSBjb25zdDsKICAgIHZvaWQgc2V0RGly
ZWN0UmVuZGVyaW5nKCBib29sIGVuYWJsZSApOwogICAgYm9vbCBoYXNPdmVybGF5KCkgY29uc3Q7
CiAgICB2b2lkIHNldE92ZXJsYXkoIGJvb2wgZW5hYmxlICk7CgogICAgaW50IHBsYW5lKCkgY29u
c3Q7CiAgICB2b2lkIHNldFBsYW5lKCBpbnQgcGxhbmUgKTsKCiAgICB2b2lkIHNldE9wdGlvbigg
Rm9ybWF0T3B0aW9uIG9wdCApOwogICAgYm9vbCB0ZXN0T3B0aW9uKCBGb3JtYXRPcHRpb24gb3B0
ICkgY29uc3Q7CgogICAgc3RhdGljIFFHTEZvcm1hdCBkZWZhdWx0Rm9ybWF0KCk7CiAgICBzdGF0
aWMgdm9pZCBzZXREZWZhdWx0Rm9ybWF0KCBjb25zdCBRR0xGb3JtYXQmIGYgKTsKCiAgICBzdGF0
aWMgUUdMRm9ybWF0IGRlZmF1bHRPdmVybGF5Rm9ybWF0KCk7CiAgICBzdGF0aWMgdm9pZCBzZXRE
ZWZhdWx0T3ZlcmxheUZvcm1hdCggY29uc3QgUUdMRm9ybWF0JiBmICk7CgogICAgc3RhdGljIGJv
b2wgaGFzT3BlbkdMKCk7CiAgICBzdGF0aWMgYm9vbCBoYXNPcGVuR0xPdmVybGF5cygpOwoKICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFHTEZvcm1hdCYsIGNvbnN0IFFHTEZvcm1h
dCYgKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFHTEZvcm1hdCYsIGNvbnN0
IFFHTEZvcm1hdCYgKTsKCnByaXZhdGU6CiAgICB1aW50IG9wdHM7CiAgICBpbnQgcGxuOwp9OwoK
CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFHTEZvcm1hdCYsIGNvbnN0IFFHTEZvcm1hdCYgKTsK
IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUdMRm9ybWF0JiwgY29uc3QgUUdMRm9ybWF0JiApOwoK
CmNsYXNzIFFHTENvbnRleHQgOiBwdWJsaWMgUUdMCnsKcHVibGljOgogICAgUUdMQ29udGV4dCgg
Y29uc3QgUUdMRm9ybWF0JiBmb3JtYXQsIFFQYWludERldmljZSogZGV2aWNlICk7CiAgICB2aXJ0
dWFsIH5RR0xDb250ZXh0KCk7CgogICAgdmlydHVhbCBib29sIGNyZWF0ZSggY29uc3QgUUdMQ29u
dGV4dCogc2hhcmVDb250ZXh0ID0gMCApOwogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBi
b29sIGlzU2hhcmluZygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CgogICAgUUdM
Rm9ybWF0IGZvcm1hdCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdCggY29uc3Qg
UUdMRm9ybWF0JiBmb3JtYXQgKTsKCiAgICB2aXJ0dWFsIHZvaWQgbWFrZUN1cnJlbnQoKTsKICAg
IHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpIGNvbnN0OwoKICAgIFFQYWludERldmljZSogZGV2
aWNlKCkgY29uc3Q7CgogICAgUUNvbG9yIG92ZXJsYXlUcmFuc3BhcmVudENvbG9yKCkgY29uc3Q7
CgogICAgc3RhdGljIGNvbnN0IFFHTENvbnRleHQqIGN1cnJlbnRDb250ZXh0KCk7Cgpwcm90ZWN0
ZWQ6CiAgICB2aXJ0dWFsIGJvb2wgY2hvb3NlQ29udGV4dCggY29uc3QgUUdMQ29udGV4dCogc2hh
cmVDb250ZXh0ID0gMCApOwogICAgdmlydHVhbCB2b2lkIGRvbmVDdXJyZW50KCk7CgoKCgogICAg
dmlydHVhbCB2b2lkKiB0cnlWaXN1YWwoIGNvbnN0IFFHTEZvcm1hdCYgZiwgaW50IGJ1ZkRlcHRo
ID0gMSApOwogICAgdmlydHVhbCB2b2lkKiBjaG9vc2VWaXN1YWwoKTsKCgogICAgYm9vbCBkZXZp
Y2VJc1BpeG1hcCgpIGNvbnN0OwogICAgYm9vbCB3aW5kb3dDcmVhdGVkKCkgY29uc3Q7CiAgICB2
b2lkIHNldFdpbmRvd0NyZWF0ZWQoIGJvb2wgb24gKTsKICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBj
b25zdDsKICAgIHZvaWQgc2V0SW5pdGlhbGl6ZWQoIGJvb2wgb24gKTsKCiAgICB1aW50IGNvbG9y
SW5kZXgoIGNvbnN0IFFDb2xvciYgYyApIGNvbnN0OwoKcHJvdGVjdGVkOgoKCgoKCgoKICAgIHZv
aWQqIHZpOwogICAgdm9pZCogY3g7CiAgICBRX1VJTlQzMiBncG07CgoKICAgIFFHTEZvcm1hdCBn
bEZvcm1hdDsKCnByaXZhdGU6CiAgICBib29sIHZhbGlkOwogICAgYm9vbCBzaGFyaW5nOwogICAg
Ym9vbCBpbml0RG9uZTsKICAgIGJvb2wgY3JXaW47CiAgICBRUGFpbnREZXZpY2UqIHBhaW50RGV2
aWNlOwogICAgUUNvbG9yIHRyYW5zcENvbG9yOwogICAgc3RhdGljIFFHTENvbnRleHQqIGN1cnJl
bnRDdHg7CgogICAgZnJpZW5kIGNsYXNzIFFHTFdpZGdldDsKCnByaXZhdGU6CiAgICBRR0xDb250
ZXh0KCkge30KICAgIFFHTENvbnRleHQoIGNvbnN0IFFHTENvbnRleHQmICkge30KICAgIFFHTENv
bnRleHQmIG9wZXJhdG9yPSggY29uc3QgUUdMQ29udGV4dCYgKSB7IHJldHVybiAqdGhpczsgfQp9
OwoKCgoKY2xhc3MgUUdMV2lkZ2V0IDogcHVibGljIFFXaWRnZXQsIHB1YmxpYyBRR0wKewogICAg
cHVibGljOiBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01l
dGFPYmplY3QoKTsgfSBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgc3RhdGljIFFNZXRh
T2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIq
KTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsgcHJvdGVjdGVk
OiB2b2lkIGluaXRNZXRhT2JqZWN0KCk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0
YU9iajsKcHVibGljOgogICAgUUdMV2lkZ2V0KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hh
ciogbmFtZT0wLAogICAgICAgICAgICAgICBjb25zdCBRR0xXaWRnZXQqIHNoYXJlV2lkZ2V0ID0g
MCwgV0ZsYWdzIGY9MCApOwogICAgUUdMV2lkZ2V0KCBjb25zdCBRR0xGb3JtYXQmIGZvcm1hdCwg
UVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwKICAgICAgICAgICAgICAgY29u
c3QgUUdMV2lkZ2V0KiBzaGFyZVdpZGdldCA9IDAsIFdGbGFncyBmPTAgKTsKICAgflFHTFdpZGdl
dCgpOwoKICAgIHZvaWQgcWdsQ29sb3IoIGNvbnN0IFFDb2xvciYgYyApIGNvbnN0OwogICAgdm9p
ZCBxZ2xDbGVhckNvbG9yKCBjb25zdCBRQ29sb3ImIGMgKSBjb25zdDsKCiAgICBib29sIGlzVmFs
aWQoKSBjb25zdDsKICAgIGJvb2wgaXNTaGFyaW5nKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
bWFrZUN1cnJlbnQoKTsKCiAgICBib29sIGRvdWJsZUJ1ZmZlcigpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHN3YXBCdWZmZXJzKCk7CgogICAgUUdMRm9ybWF0IGZvcm1hdCgpIGNvbnN0OwoKICAg
IHZpcnR1YWwgdm9pZCBzZXRGb3JtYXQoIGNvbnN0IFFHTEZvcm1hdCYgZm9ybWF0ICk7CgoKICAg
IGNvbnN0IFFHTENvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGV4dCggUUdMQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUUdMQ29udGV4dCogc2hhcmVDb250ZXh0ID0gMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWxldGVPbGRDb250ZXh0ID0gVFJVRSApOwoK
CiAgICB2aXJ0dWFsIFFQaXhtYXAgcmVuZGVyUGl4bWFwKCBpbnQgdyA9IDAsIGludCBoID0gMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZUNvbnRleHQgPSBG
QUxTRSApOwoKICAgIHZpcnR1YWwgdm9pZCBtYWtlT3ZlcmxheUN1cnJlbnQoKTsKICAgIGNvbnN0
IFFHTENvbnRleHQqIG92ZXJsYXlDb250ZXh0KCkgY29uc3Q7CgogICAgdm9pZCBzZXRNb3VzZVRy
YWNraW5nKCBib29sIGVuYWJsZSApOwoKICAgIHN0YXRpYyBRSW1hZ2UgY29udmVydFRvR0xGb3Jt
YXQoIGNvbnN0IFFJbWFnZSYgaW1nICk7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUdMKCk7CiAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlT3ZlcmxheUdMKCk7Cgpwcm90ZWN0ZWQ6CiAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUdMKCk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplR0wo
IGludCB3LCBpbnQgaCApOwogICAgdmlydHVhbCB2b2lkIHBhaW50R0woKTsKCiAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZU92ZXJsYXlHTCgpOwogICAgdmlydHVhbCB2b2lkIHJlc2l6ZU92ZXJs
YXlHTCggaW50IHcsIGludCBoICk7CiAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVybGF5R0woKTsK
CiAgICB2b2lkIHNldEF1dG9CdWZmZXJTd2FwKCBib29sIG9uICk7CiAgICBib29sIGF1dG9CdWZm
ZXJTd2FwKCkgY29uc3Q7CgogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCogKTsKICAg
IHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCogKTsKCiAgICB2aXJ0dWFsIHZvaWQgZ2xJ
bml0KCk7CiAgICB2aXJ0dWFsIHZvaWQgZ2xEcmF3KCk7Cgpwcml2YXRlOgogICAgdm9pZCBpbml0
KCBjb25zdCBRR0xGb3JtYXQmIGZtdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUUdMV2lkZ2V0KiBzaGFyZVdpZGdldCApOwogICAgYm9vbCByZW5kZXJDeFBtKCBRUGl4bWFw
KiBwbSApOwogICAgUUdMQ29udGV4dCogZ2xjeDsKICAgIGJvb2wgYXV0b1N3YXA7CgoKCgogICAg
UUdMT3ZlcmxheVdpZGdldCogb2x3OwogICAgZnJpZW5kIGNsYXNzIFFHTE92ZXJsYXlXaWRnZXQ7
CgoKcHJpdmF0ZToKCiAgICBRR0xXaWRnZXQoIGNvbnN0IFFHTFdpZGdldCYgKTsKICAgIFFHTFdp
ZGdldCYgb3BlcmF0b3I9KCBjb25zdCBRR0xXaWRnZXQmICk7Cgp9OwoKCgoKCgppbmxpbmUgYm9v
bCBRR0xGb3JtYXQ6OmRvdWJsZUJ1ZmZlcigpIGNvbnN0CnsKICAgIHJldHVybiB0ZXN0T3B0aW9u
KCBEb3VibGVCdWZmZXIgKTsKfQoKaW5saW5lIGJvb2wgUUdMRm9ybWF0OjpkZXB0aCgpIGNvbnN0
CnsKICAgIHJldHVybiB0ZXN0T3B0aW9uKCBEZXB0aEJ1ZmZlciApOwp9CgppbmxpbmUgYm9vbCBR
R0xGb3JtYXQ6OnJnYmEoKSBjb25zdAp7CiAgICByZXR1cm4gdGVzdE9wdGlvbiggUmdiYSApOwp9
CgppbmxpbmUgYm9vbCBRR0xGb3JtYXQ6OmFscGhhKCkgY29uc3QKewogICAgcmV0dXJuIHRlc3RP
cHRpb24oIEFscGhhQ2hhbm5lbCApOwp9CgppbmxpbmUgYm9vbCBRR0xGb3JtYXQ6OmFjY3VtKCkg
Y29uc3QKewogICAgcmV0dXJuIHRlc3RPcHRpb24oIEFjY3VtQnVmZmVyICk7Cn0KCmlubGluZSBi
b29sIFFHTEZvcm1hdDo6c3RlbmNpbCgpIGNvbnN0CnsKICAgIHJldHVybiB0ZXN0T3B0aW9uKCBT
dGVuY2lsQnVmZmVyICk7Cn0KCmlubGluZSBib29sIFFHTEZvcm1hdDo6c3RlcmVvKCkgY29uc3QK
ewogICAgcmV0dXJuIHRlc3RPcHRpb24oIFN0ZXJlb0J1ZmZlcnMgKTsKfQoKaW5saW5lIGJvb2wg
UUdMRm9ybWF0OjpkaXJlY3RSZW5kZXJpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gdGVzdE9wdGlv
biggRGlyZWN0UmVuZGVyaW5nICk7Cn0KCmlubGluZSBib29sIFFHTEZvcm1hdDo6aGFzT3Zlcmxh
eSgpIGNvbnN0CnsKICAgIHJldHVybiB0ZXN0T3B0aW9uKCBIYXNPdmVybGF5ICk7Cn0KCgoKCgpp
bmxpbmUgYm9vbCBRR0xDb250ZXh0Ojppc1ZhbGlkKCkgY29uc3QKewogICAgcmV0dXJuIHZhbGlk
Owp9CmlubGluZSBib29sIFFHTENvbnRleHQ6OmlzU2hhcmluZygpIGNvbnN0CnsKICAgIHJldHVy
biBzaGFyaW5nOwp9CmlubGluZSBRR0xGb3JtYXQgUUdMQ29udGV4dDo6Zm9ybWF0KCkgY29uc3QK
ewogICAgcmV0dXJuIGdsRm9ybWF0Owp9CgppbmxpbmUgUVBhaW50RGV2aWNlKiBRR0xDb250ZXh0
OjpkZXZpY2UoKSBjb25zdAp7CiAgICByZXR1cm4gcGFpbnREZXZpY2U7Cn0KCmlubGluZSBib29s
IFFHTENvbnRleHQ6OmRldmljZUlzUGl4bWFwKCkgY29uc3QKewogICAgcmV0dXJuIHBhaW50RGV2
aWNlLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQaXhtYXA7Cn0KCgppbmxpbmUgYm9vbCBRR0xD
b250ZXh0Ojp3aW5kb3dDcmVhdGVkKCkgY29uc3QKewogICAgcmV0dXJuIGNyV2luOwp9CgoKaW5s
aW5lIHZvaWQgUUdMQ29udGV4dDo6c2V0V2luZG93Q3JlYXRlZCggYm9vbCBvbiApCnsKICAgIGNy
V2luID0gb247Cn0KCmlubGluZSBib29sIFFHTENvbnRleHQ6OmluaXRpYWxpemVkKCkgY29uc3QK
ewogICAgcmV0dXJuIGluaXREb25lOwp9CgppbmxpbmUgdm9pZCBRR0xDb250ZXh0OjpzZXRJbml0
aWFsaXplZCggYm9vbCBvbiApCnsKICAgIGluaXREb25lID0gb247Cn0KCmlubGluZSBjb25zdCBR
R0xDb250ZXh0KiBRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpCnsKICAgIHJldHVybiBjdXJy
ZW50Q3R4Owp9CgoKCgoKaW5saW5lIFFHTEZvcm1hdCBRR0xXaWRnZXQ6OmZvcm1hdCgpIGNvbnN0
CnsKICAgIHJldHVybiBnbGN4LT5mb3JtYXQoKTsKfQoKaW5saW5lIGNvbnN0IFFHTENvbnRleHQg
KlFHTFdpZGdldDo6Y29udGV4dCgpIGNvbnN0CnsKICAgIHJldHVybiBnbGN4Owp9CgppbmxpbmUg
Ym9vbCBRR0xXaWRnZXQ6OmRvdWJsZUJ1ZmZlcigpIGNvbnN0CnsKICAgIHJldHVybiBnbGN4LT5m
b3JtYXQoKS5kb3VibGVCdWZmZXIoKTsKfQoKaW5saW5lIHZvaWQgUUdMV2lkZ2V0OjpzZXRBdXRv
QnVmZmVyU3dhcCggYm9vbCBvbiApCnsKICAgIGF1dG9Td2FwID0gb247Cn0KCmlubGluZSBib29s
IFFHTFdpZGdldDo6YXV0b0J1ZmZlclN3YXAoKSBjb25zdAp7CiAgICByZXR1cm4gYXV0b1N3YXA7
Cn0KCgoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgog
ICAgc3RydWN0IGNoYXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBz
dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAg
ICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAg
YXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9f
YzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUm
IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2My
OyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo
YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGZvciAoc2l6ZV90IF9f
aSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCiAgICAgICAgICBpZiAoIWVxKF9fczFbX19pXSwgX19z
MltfX2ldKSkKICAgICAgICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0x
IDogMTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAg
ICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsKICAgICAgICBjb25zdCBjaGFy
X3R5cGUqIF9fcCA9IF9fczsKICAgICAgICB3aGlsZSAoKl9fcCkgKytfX3A7CiAgICAgICAgcmV0
dXJuIChfX3AgLSBfX3MpOwogICAgICB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgog
ICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5
cGUmIF9fYSkKICAgICAgewogICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7
IHNpemVfdChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkKICAgICAgICAgIGlmICgqX19wID09IF9f
YSkgcmV0dXJuIF9fcDsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUoX19zMSwg
X19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
KgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXpl
X3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9f
biAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg
YXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7
CiAgICAgICAgZm9yIChjaGFyX3R5cGUqIF9fcCA9IF9fczsgX19wIDwgX19zICsgX19uOyArK19f
cCkKICAgICAgICAgIGFzc2lnbigqX19wLCBfX2EpOwogICAgICAgIHJldHVybiBfX3M7CiAgICAg
IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90
eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMg
aW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJu
IGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNv
bnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4g
X19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0xKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAg
ICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5
cGUoX19jLCBlb2YoKSkgPyBpbnRfdHlwZSgwKSA6IF9fYzsgfQogICAgfTsKCgoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFy
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3Ry
ZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAg
dHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFz
c2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2Mx
ID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBf
X2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg
fQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25z
dCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBz
dGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy
X3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3My
LCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5
cGUqIF9fcykKICAgICAgeyByZXR1cm4gcXN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29u
c3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19u
LCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92
ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29w
eShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9f
bikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBf
X3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5
cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsg
fQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9f
YzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0K
CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNv
bnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9f
YzsgfQogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+
CiAgICB7CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2lu
dF90IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiB3c3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90
eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29u
c3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMg
Ym9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19j
MikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAg
ICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAg
eyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShj
b25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK
ICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMg
c2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4g
d2NzbGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQog
ICAgICB7IHJldHVybiB3bWVtY2hyKF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hh
cl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3My
LCBpbnRfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1tb3ZlKF9fczEsIF9fczIsIF9fbik7
IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBj
b25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jcHko
X19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWdu
KGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVy
biB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAg
IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSB7IHJldHVybiBjaGFyX3R5cGUoX19j
KTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJf
dHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9f
YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBl
CiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoMHhmZmZmZmZmZnUp
KTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyAwIDogX19jOyB9
CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAg
IF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9Cgog
ICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9U
cmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CgoK
CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3Mg
cmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv
cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
IF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg
ICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIo
X194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsg
cmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7CiAgICAgICAgX0NvbnN0cnVjdCgmKl9N
X2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBy
YXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+JgogICAgICBvcGVyYXRv
cisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4K
ICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByYXdfc3RvcmFnZV9pdGVyYXRv
cjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytfTV9pdGVy
OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKfQoKbmFtZXNwYWNlIHN0ZAp7
CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CiAg
X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCiAgewogICAgaWYg
KF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9fbGVu
ID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAg
ICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBz
aXplb2YoX1RwKSk7CiAgICAgIGlmIChfX3RtcCAhPSAwKQogICAgICAgIHJldHVybiBwYWlyPF9U
cCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgICAgX19sZW4gLz0gMjsKICAgIH0KCiAg
ICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwogIH0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgogIGlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFy
eV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1
ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIHZvaWQg
cmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwog
IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsKICAgX1Rw
MSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3ApIHt9Cn07
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBf
VHAqIF9NX3B0cjsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgogIGV4cGxp
Y2l0IGF1dG9fcHRyKF9UcCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0
b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhy
b3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9wZXJhdG9y
PShhdXRvX3B0ciYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19wdHImIG9w
ZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxl
YXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRl
IF9NX3B0cjsgfQoKICBfVHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJu
ICpfTV9wdHI7CiAgfQogIF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewogICAgcmV0
dXJuIF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBf
TV9wdHI7CiAgfQogIF9UcCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9N
X3B0cjsKICAgIF9NX3B0ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQo
X1RwKiBfX3AgPSAwKSB0aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRl
bGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgpwdWJsaWM6CiAgYXV0
b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVm
Ll9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1RwPiBfX3Jl
ZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7CiAgICAg
IGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0KICAgIHJl
dHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0
cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwPih0aGlz
LT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRy
PF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFz
ZSgpKTsgfQp9OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNs
YXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3Vt
ZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9m
dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBl
Owp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt
X194OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K
ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBn
cmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3Nf
ZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCA8PSBfX3k7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195
OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNv
bnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNz
IHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNh
dGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJl
ZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gp
IDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVk
aWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9f
eCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVn
YXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJu
IHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9Q
cmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUg
X01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0
ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAg
IGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNv
bnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIo
Y29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRp
Y2F0ZT4oX19wcmVkKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVy
MXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRl
cjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1
ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwog
IH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJp
bmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0
IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu
dF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBf
QXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJp
bmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBi
aW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCks
IHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJh
dG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUp
OwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5l
IGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNv
bnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn
dW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19m
biwgX0FyZzJfdHlwZShfX3gpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3Vs
dD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsK
cHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50
ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkg
e30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihf
X3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAo
Kl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xh
c3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVz
dWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFy
eV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihf
UmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBf
UmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0
dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj
bGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0
aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9B
cmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixf
UmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYg
X194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWly
PgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5h
bWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3Bl
cmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBj
b25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYg
X194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIs
IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRf
dHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29u
ZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNv
bnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAq
IF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNz
IGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgp
IGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3Ap
IGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFz
cyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4q
X01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBf
UmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2Yp
KCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBf
UmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21l
bV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9B
cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBf
X3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
bWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9t
ZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxf
VHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3Bm
KSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsg
KF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZiko
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZv
aWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAm
IF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01f
ZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90
PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7
IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9p
ZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn
KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1f
ZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3Qg
X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9p
ZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAs
IF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7
IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVu
MV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
QXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQg
KF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0K
cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1f
ZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9f
Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1f
ZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0
dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVm
KF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihf
X2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVt
X2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0
KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVy
biBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBj
b25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9U
cCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1l
bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0
LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsg
cmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQoK
dHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19h
dHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9B
dG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBf
X3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAg
ICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAg
ICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAg
OiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19h
dHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNf
d29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsg
YWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0i
ICgqX19tZW0pIDogIm1lbW9yeSIpOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNz
IGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1
ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYg
X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJh
dG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9p
bnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZl
cnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAg
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgog
ICAgcHJpdmF0ZToKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2Fs
bG9jOwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAg
c3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xl
bmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3Jk
IF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25z
dAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAg
ICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMg
PiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9N
X3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxl
KCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAg
ICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltd
KHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107
IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9j
MSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKCFf
TV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKICAgICAgICAgICAgICAgICAg
PyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAg
c3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7Cgog
ICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAg
IHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8
PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lk
CiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hh
clQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0
b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEo
KTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxs
b2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9j
X2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2Rh
dCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkg
eyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEp
OwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsK
CgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9S
ZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXpl
X3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hh
clQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAg
ICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWludGVycHJl
dF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgogICAg
ICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAg
ICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0
YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAgICAg
ewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01fbGVh
a19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlw
ZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkK
ICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7
CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBpdGVy
YXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25z
dAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAt
IF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDog
dGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9z
ICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4K
ICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9J
dGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBmb3IgKDsg
X19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNz
aWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19j
b3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAg
ICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVy
YXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19w
LCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf
U19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAg
ICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAg
c3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJU
KiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19w
LCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2
b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2Vt
cHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1w
dHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJh
c2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9B
bGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAg
IGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7Cgog
ICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAg
ICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNf
c3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsK
ICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxv
YyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRv
ciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo
KSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0
aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJh
dG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19z
dHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQq
IF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2Mp
OyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVh
aygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBj
b25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0
ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsK
ICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsg
dGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6
ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsg
fQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAg
eyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1
YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVw
KCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAg
ICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAg
cmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+
X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNf
YXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+
c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRo
aXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9y
W10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9z
XTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQog
ICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3Nd
OwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikg
Y29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4g
X01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5
cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsK
ICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4g
dGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv
cis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRo
aXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
YXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19z
LCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7
IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+
cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkK
ICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwog
ICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXpl
IC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBf
X3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3Np
Z24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAo
X19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi
YXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk
KCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8
fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQog
ICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBf
X3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKICAgICAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBpZiAoX19w
b3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19z
LCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykKICAgICAgICAgICAgICB0cmFpdHNf
dHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgX01fcmVwKCktPl9N
X2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJt
aW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyBy
ZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK
ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24s
IF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2lu
KCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNl
cnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMt
PnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVy
YXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNl
KF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGlu
c2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7
IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVf
dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19z
dHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBjb25zdCBi
b29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAg
ICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9z
MiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAg
aWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkg
LSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNl
cnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3Qg
X0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hh
clQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBs
YWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UK
ICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0g
X01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAg
ICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9N
X2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19uKTsKICAgICAgICAgICAgZWxz
ZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f
cyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAg
ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19u
IC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+
aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks
IF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRo
aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBf
TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4o
KSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVf
dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg
fQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAg
ICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBf
TV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0
dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFz
ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXpl
X3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2Uo
X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCkt
Pl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhp
cy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXpl
X3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBf
X3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBjb25zdCBz
aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6
ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2Ui
KTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwog
ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6
ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXpl
KCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6
cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxj
b25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0
IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9N
X3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19u
Mik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJl
Z2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVn
b3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSks
IF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRv
ciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEg
LSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywgX19uKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9D
aGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFy
VCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwK
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIp
CiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAg
ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0
b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQog
ICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0g
X19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh
dG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICAg
IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+
cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAg
ICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp
dGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3Jl
cGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9y
IF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAg
X1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxs
b2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7
CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRl
cmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcs
IF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0lu
SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1Nf
Y29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAg
ICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJU
KgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
bnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9T
X2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9
CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoK
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0
IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVx
LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBf
X3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBj
X3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUo
KTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190
ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3Qg
X0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBh
bGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0
YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0
ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5k
YXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZp
bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u
c3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywg
X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmly
c3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJz
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQg
X19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
KF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywg
X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25v
dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rf
bm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bvcywg
X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9u
b3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf
b2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNp
Y19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24g
PSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQog
ICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAg
ICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAg
ICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNp
emVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9
IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv
bXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikK
ICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAg
ICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y
KSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25z
dDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygp
CiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkp
IHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAg
ICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy
ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhf
Q2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBf
X3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAg
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwog
ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9w
ZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUg
X19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsK
ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv
bXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBh
cmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo
X19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu
IF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo
X19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBf
Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+
PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBz
d2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19s
aHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywK
ICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwp9CgoKCgpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3Np
emVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwg
PSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihf
UmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6
ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAg
IF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxs
b2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewog
ICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICBy
ZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZb
MTAwXTsKICAgICAgICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0g
X19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAg
ewogICAgICAgICAgICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7
CiAgICAgICAgICB9CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19h
KTsKICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9f
aSk7CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgaWYgKHRydWUpCiAgICAg
ICAgICB7CgoKCiAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwog
ICAgICAgICAgICAgICAgX0NoYXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+
X01fY2FwYWNpdHk7CiAgICAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9f
ci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEo
KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09
IF9fbGFzdCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICpfX3ArKyA9ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5f
TV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19j
cmVhdGUoX19sZW4gKyAxLCBfX2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0
cm95KF9fYSk7CiAgICAgICAgICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAg
ICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAg
ICAgICBpZiAoZmFsc2UpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShf
X2EpOwogICAgICAgICAgICA7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5
cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQp
KTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoMCksIDAp
KQogICAgICAgICAgX190aHJvd19sb2dpY19lcnJvcigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5n
IHdpdGggbnVsbCBwb2ludGVyIik7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2Eg
PT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgp
OwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAg
ICAgICBpZiAodHJ1ZSkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEo
KSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgIHsKICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIDsKICAgICAgICAgIH0KICAg
ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClb
X19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRh
dGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFy
VCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19h
ID09IF9BbGxvYygpKQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7
CgoKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgaWYg
KHRydWUpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5
cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAg
aWYgKGZhbHNlKQogICAgICAgIHsKICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAg
ICAgICAgOwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+
X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+
X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
CiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0
ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3Io
KSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1
cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh
c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVj
ayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9f
cG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgIHNp
emVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
dHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkK
ICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zID8gX19zICsgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSks
IF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0
IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9f
YSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0
cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9f
YSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19h
KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIu
X01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMt
PmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAo
KS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAo
KS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9B
bGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9m
KF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19i
eXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyks
IF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgp
LT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQogICAgewogICAg
ICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOwogICAgICBjb25z
dCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAg
ICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBfX25ld19zaXplID4gY2FwYWNpdHko
KSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRv
cigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAg
ICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2
b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9IChfX3Bh
Z2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJUKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsK
ICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAgIGlmIChfX25ld19zaXplID4gY2FwYWNpdHko
KSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICAgICAgX19yID0gX1Jl
cDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNhcGFjaXR5KCkgPwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6IDIqY2FwYWNpdHkoKSwgX19hKTsKICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9f
YSk7CiAgICAgICAgICBpZiAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
X3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgp
LCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVj
aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAg
IDsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg
ICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYg
KF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJh
aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19t
dWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAg
X01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19z
aXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3Jl
cykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+
X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4
X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6
cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAg
ICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBn
ZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Ns
b25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rp
c3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAo
YmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2Vk
KCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9N
X3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFy
YWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2Nh
dG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAg
ICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3Rt
cCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmlu
ZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAg
ICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsK
ICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYg
X19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhf
c2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19j
cmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6
ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2VzaXpl
ID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAgIGNv
bnN0IHNpemVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKICAg
ICAgaWYgKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQogICAg
ICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNpemUg
LSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAgICAg
ICAgICAlIF9fcGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXpl
b2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2Yo
X0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+
IF9fc3VicGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAg
ICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUp
ICUgX19zdWJwYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAgICAg
IF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXpl
ID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAg
ICAgIH0KCgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYyku
YWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwog
ICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hh
cmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5
cGUgX19yZXMpCiAgICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0g
X01fbGVuZ3RoICsgX19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQw
OTY7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXpl
b2YgKHZvaWQqKTsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQogICAg
ICAgIChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkgLSBz
aXplb2YoX0NoYXJUKSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBfX3I7
CiAgICAgIGlmIChfX3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3RlZF9j
YXAgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3Jl
cXVlc3RlZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19yZXF1ZXN0ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVsc2UK
ICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsK
CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgaWYgKHRydWUpCiAgICAg
ICAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEo
KSwgX01fbGVuZ3RoKTsgfQogICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAg
IHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190
aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAg
dGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19z
aXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJ
dGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRv
cl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAg
ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwg
X19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9y
ZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9f
azEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAg
ICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9f
azEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAg
ICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChfX2Rt
YXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmlu
Zzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVn
aW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAgICAg
IGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBf
X2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90
eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAg
ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAg
ICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0g
X19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0g
X19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXpl
KCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVz
ZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9p
ZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc3Ry
LnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0
aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1
cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhf
X3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bvcywg
X19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBw
ZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5
cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNh
cGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9y
ZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBl
IF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhp
cy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRo
aXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdf
dHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9U
cmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9f
c3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19s
aHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1
cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg
X19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXpl
KCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9f
c2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJl
dHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBf
Q2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAg
ICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3Np
emUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29m
ZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFz
c2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+
IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9z
OwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsK
CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBj
b25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9f
biA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShf
X2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsK
ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f
cG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAg
ICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAg
ICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7CiAg
ICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAg
ICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7CiAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRh
ICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwog
ICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAg
ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv
cykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXpl
IC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0g
X19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAg
ICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAg
ICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5z
aXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0
cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBp
ZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4g
bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAg
ICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAg
ICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZp
bmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBf
X3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAg
ewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlz
LT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBf
X24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5
cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAg
Zm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFp
dHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194
cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewog
ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3Np
emUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo
IXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAg
ICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19z
aXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9u
b3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsK
ICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3Bv
czsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190
eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBf
X3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAg
fQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAg
ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29z
aXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90
eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6
OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBp
ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f
cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwg
c2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz
LT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBp
ZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9f
cnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9z
aXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4g
PSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv
bXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAg
ICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19y
ID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u
c3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz
LT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6
ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBt
aW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19y
c2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9k
YXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9
IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
dAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5
cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBz
aXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0
c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYg
KCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7
CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9B
bGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBf
X2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5
cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1p
bihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9f
c3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAg
ICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hhcj47CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I+PihiYXNp
Y19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19v
c3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+JiwgY29uc3Qg
c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt
PGNoYXI+Jiwgc3RyaW5nJik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4dGVy
biB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2No
YXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0
cmluZyYpOwp9CmV4dGVybiAiQyIgewoKCgoKCgoKCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRf
dDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CmV4dGVybiBkb3VibGUgYWNvcyAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29z
IChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBl
eHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAq
X19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Np
bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJs
ZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEw
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9f
eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3Vi
bGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAg
KGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xk
ZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBl
eHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3Vi
bGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9k
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2Qg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5m
IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRl
IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91
YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190
YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50
IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl
IGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRv
dWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRo
cm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJm
IChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19l
cmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEg
KGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRh
ZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91Ymxl
IG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBf
X24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19u
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91Ymxl
IHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5k
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJs
ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBk
b3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpf
X3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsK
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9f
bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3Vu
ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91
YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFs
dWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp
bnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUg
X195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBhY29zZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2Nvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5m
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gs
IGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3Np
bmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5o
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg
ZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhy
b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n
MXBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9h
dCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBz
cXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxv
YXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9h
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxv
YXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYg
KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9h
dCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCBuYW5mIChfX2NvbnN0IGNoYXIgKl9f
dGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg
X19uYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxv
YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBmbG9hdCBqMGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkg
dGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRo
cm93ICgpOwpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3kxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9h
dCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxv
YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Rn
YW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0
ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0
b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2Jm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBf
X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9h
dCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBuZWFyYnlpbnRm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19uZWFyYnlpbnRmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwg
ZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtcXVvZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
bG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19s
cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
Zm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1p
bmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1pbmYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3Np
ZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxv
YXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Zt
YWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19hc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBh
dGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRh
bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJs
IChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQg
c2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJs
ZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBv
dzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93
MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJl
eHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50
IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcg
ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19s
b2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cx
MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIp
IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgX19maW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg
ZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBk
b3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
bmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2Ip
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19p
c25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X195MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxn
YW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1h
bCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAo
bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJs
ZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1h
bF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJk
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFp
bmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24p
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5s
IChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGlsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2di
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2Fs
YmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVv
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
X19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBzaWduZ2FtOwplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklO
SVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9
Owp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9Q
T1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJT
SU9OX1RZUEUgX0xJQl9WRVJTSU9OOwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg
dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog
ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj
ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7Cn0KCgpjbGFzcyBWZWN0b3IzCnsKcHVibGljOgoKCgoK
ICBmbG9hdCB4OwogIGZsb2F0IHk7CiAgZmxvYXQgejsKICBib29sIGludGVycDsKCgoKCiAgVmVj
dG9yMygpOwogIFZlY3RvcjMoY29uc3QgVmVjdG9yMyAmKTsKICBWZWN0b3IzKGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHopOwoKCgogIGZsb2F0JiBvcGVyYXRvciBbXSAoaW50KTsKICAgY29uc3Qg
ZmxvYXQmIG9wZXJhdG9yIFtdIChpbnQpIGNvbnN0OwoKCgogIFZlY3RvcjMmIGFzc2lnbihmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKCgoKICBWZWN0b3IzIG9wZXJhdG9yIC0gKCkgY29uc3Q7
CiAgVmVjdG9yMyYgb3BlcmF0b3IgKz0gKGNvbnN0IFZlY3RvcjMmKTsKICBWZWN0b3IzJiBvcGVy
YXRvciAtPSAoY29uc3QgVmVjdG9yMyYpOwogIFZlY3RvcjMmIG9wZXJhdG9yICo9IChmbG9hdCk7
CiAgVmVjdG9yMyYgb3BlcmF0b3IgLz0gKGZsb2F0KTsKCiAgICAgICAgdm9pZCBzY2FsZShmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKCiAgVmVjdG9yMyBvcGVyYXRvciArIChjb25zdCBWZWN0
b3IzJikgY29uc3Q7CiAgVmVjdG9yMyBvcGVyYXRvciAtIChjb25zdCBWZWN0b3IzJikgY29uc3Q7
CiAgVmVjdG9yMyBvcGVyYXRvciAvIChmbG9hdCkgY29uc3Q7CgogIGJvb2wgb3BlcmF0b3IgPT0g
KGNvbnN0IFZlY3RvcjMmKSBjb25zdDsKICBib29sIG9wZXJhdG9yICE9IChjb25zdCBWZWN0b3Iz
JikgY29uc3Q7CgogICBib29sIGlzSW50ZXJwb2xhdGFibGUoKTsKICAgdm9pZCBzZXRJbnRlcnBv
bGF0YWJsZShib29sKTsKCgogIGZyaWVuZCBWZWN0b3IzIG9wZXJhdG9yKihmbG9hdCBjLCBWZWN0
b3IzIGNvbnN0ICZ2KTsKICBmcmllbmQgVmVjdG9yMyBvcGVyYXRvciooVmVjdG9yMyBjb25zdCAm
diwgZmxvYXQgYyk7CgogICBmbG9hdCAqIHYoZmxvYXQgKnYpe3ZbMF09eDt2WzFdPXk7dlsyXT16
O3JldHVybiB2O307CgoKCgoKCgogIGZsb2F0IGxlbmd0aCh2b2lkKSBjb25zdDsKICBmbG9hdCBs
ZW5ndGhTcXIodm9pZCkgY29uc3Q7CiAgZmxvYXQgbGVuZ3RoMmQodm9pZCkgY29uc3Q7CiAgZmxv
YXQgbGVuZ3RoU3FyMmQodm9pZCkgY29uc3Q7CiAgdm9pZCBub3JtYWxpemUodm9pZCk7CgoKCiAg
VmVjdG9yMyBvcGVyYXRvciAqIChjb25zdCBWZWN0b3IzJikgY29uc3Q7CgoKCiAgIGZsb2F0IGRv
dChjb25zdCBWZWN0b3IzJikgY29uc3Q7CiAgIGZsb2F0IGRvdDJkKGNvbnN0IFZlY3RvcjMmKSBj
b25zdDsKCgoKICBmbG9hdCBkaXN0YW5jZVNxcihjb25zdCBWZWN0b3IzJikgY29uc3Q7CiAgZmxv
YXQgZGlzdGFuY2UoY29uc3QgVmVjdG9yMyYpIGNvbnN0OwogIGZsb2F0IGRpc3RhbmNlU3FyMmQo
Y29uc3QgVmVjdG9yMyYpIGNvbnN0OwogIGZsb2F0IGRpc3RhbmNlMmQoY29uc3QgVmVjdG9yMyYp
IGNvbnN0OwoKICB2b2lkIER1bXAodm9pZCkgY29uc3Q7Cn07Cgp0eXBlZGVmIGNsYXNzIFZlY3Rv
cjMgKlZlY3RvcjNQdHI7CmNsYXNzIFZlY3RvcjM7CgpjbGFzcyBWZWN0b3I0CnsKcHVibGljOgoK
CiAgZmxvYXQgeDsKICBmbG9hdCB5OwogIGZsb2F0IHo7CiAgZmxvYXQgdzsKICBib29sIGludGVy
cDsKCgoKIFZlY3RvcjQoKTsKICBWZWN0b3I0KGNvbnN0IFZlY3RvcjQgJik7CiAgVmVjdG9yNChm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKCgogIGZsb2F0JiBvcGVyYXRvciBb
XSAoaW50KTsKICAgY29uc3QgZmxvYXQmIG9wZXJhdG9yIFtdIChpbnQpIGNvbnN0OwoKCiAgVmVj
dG9yNCYgYXNzaWduKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOwoKCiAgVmVj
dG9yNCBvcGVyYXRvciAtICgpIGNvbnN0OwogIFZlY3RvcjQmIG9wZXJhdG9yICs9IChjb25zdCBW
ZWN0b3I0Jik7CiAgVmVjdG9yNCYgb3BlcmF0b3IgKz0gKGNvbnN0IFZlY3RvcjMmKTsKICBWZWN0
b3I0JiBvcGVyYXRvciAtPSAoY29uc3QgVmVjdG9yNCYpOwogIFZlY3RvcjQmIG9wZXJhdG9yIC09
IChjb25zdCBWZWN0b3IzJik7CiAgVmVjdG9yNCYgb3BlcmF0b3IgKj0gKGZsb2F0KTsKICBWZWN0
b3I0JiBvcGVyYXRvciAvPSAoZmxvYXQpOwoKICBWZWN0b3I0IG9wZXJhdG9yICsgKGNvbnN0IFZl
Y3RvcjQmKSBjb25zdDsKICBWZWN0b3I0IG9wZXJhdG9yICsgKGNvbnN0IFZlY3RvcjMmKSBjb25z
dDsKICBWZWN0b3I0IG9wZXJhdG9yIC0gKGNvbnN0IFZlY3RvcjQmKSBjb25zdDsKICBWZWN0b3I0
IG9wZXJhdG9yIC0gKGNvbnN0IFZlY3RvcjMmKSBjb25zdDsKICBWZWN0b3I0IG9wZXJhdG9yIC8g
KGZsb2F0KSBjb25zdDsKICB2b2lkIG1pbihjb25zdCBWZWN0b3I0Jik7CiAgdm9pZCBtYXgoY29u
c3QgVmVjdG9yNCYpOwoKCiAgICAgICAgIFZlY3RvcjQgaW50ZXJzZWN0UGxhbmUoY29uc3QgVmVj
dG9yNCAmLCBjb25zdCBWZWN0b3I0ICYpIGNvbnN0OwoKICBib29sIG9wZXJhdG9yID09IChjb25z
dCBWZWN0b3I0JikgY29uc3Q7CiAgYm9vbCBvcGVyYXRvciAhPSAoY29uc3QgVmVjdG9yNCYpIGNv
bnN0OwogICBib29sIGlzSW50ZXJwb2xhdGFibGUoKTsKICAgdm9pZCBzZXRJbnRlcnBvbGF0YWJs
ZShib29sKTsKCgogICAgICAgIGZyaWVuZCBWZWN0b3I0IG9wZXJhdG9yKihmbG9hdCBjLCBWZWN0
b3I0IGNvbnN0ICZ2KTsKICBmcmllbmQgVmVjdG9yNCBvcGVyYXRvciooVmVjdG9yNCBjb25zdCAm
diwgZmxvYXQgYyk7CgoKCiAgICAgICAgIGZsb2F0IGxlbmd0aCh2b2lkKSBjb25zdDsKICAgZmxv
YXQgbGVuZ3RoU3FyKHZvaWQpIGNvbnN0OwogICBmbG9hdCBsZW5ndGgzZCh2b2lkKSBjb25zdDsK
ICAgZmxvYXQgbGVuZ3RoU3FyM2Qodm9pZCkgY29uc3Q7CiAgIHZvaWQgbm9ybWFsaXplKHZvaWQp
OwoKCiAgVmVjdG9yMyBUb1ZlY3RvcjModm9pZCkgY29uc3Q7CiAgIGZsb2F0ICogdihmbG9hdCAq
dikgY29uc3Q7CgoKCiAgIGZsb2F0IGRvdChjb25zdCBWZWN0b3I0JikgY29uc3Q7CiAgIGZsb2F0
IGRvdDNkKGNvbnN0IFZlY3RvcjQmKSBjb25zdDsKCgoKICAgZmxvYXQgZGlzdGFuY2VTcXIoY29u
c3QgVmVjdG9yNCYpOwogICBmbG9hdCBkaXN0YW5jZShjb25zdCBWZWN0b3I0Jik7CiAgIGZsb2F0
IGRpc3RhbmNlU3FyM2QoY29uc3QgVmVjdG9yNCYpOwogICBmbG9hdCBkaXN0YW5jZTNkKGNvbnN0
IFZlY3RvcjQmKTsKCiAgdm9pZCBEdW1wKHZvaWQpIGNvbnN0Owp9OwoKdHlwZWRlZiBjbGFzcyBW
ZWN0b3I0ICpWZWN0b3I0UHRyOwpjbGFzcyBRdWF0CnsKcHVibGljOgoKCiAgVmVjdG9yMyB2Owog
IGZsb2F0IHc7CgoKCiAgUXVhdCgpOwogIFF1YXQoY29uc3QgUXVhdCAmKTsKICBRdWF0KGZsb2F0
IHF3LCBjb25zdCBWZWN0b3IzICZxdik7CiAgUXVhdChjb25zdCBWZWN0b3IzICZheGlzLCBmbG9h
dCBhbmdsZSk7CiAgUXVhdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKICBR
dWF0KGNvbnN0IFZlY3RvcjQgJnEpOwoKCiAgZmxvYXQmIG9wZXJhdG9yIFtdIChpbnQpOwogIGNv
bnN0IGZsb2F0JiBvcGVyYXRvciBbXSAoaW50KSBjb25zdDsKCgoKICBmbG9hdCBSZWFsKHZvaWQp
IGNvbnN0OwogIGZsb2F0IFgodm9pZCkgY29uc3Q7CiAgZmxvYXQgWSh2b2lkKSBjb25zdDsKICBm
bG9hdCBaKHZvaWQpIGNvbnN0OwogIFZlY3RvcjMgSW1hZ2luYXJ5KHZvaWQpIGNvbnN0OwogIGZs
b2F0IEFicyh2b2lkKSBjb25zdDsKICB2b2lkIENvbmoodm9pZCk7CiAgUXVhdCBJbnZlcnNlKHZv
aWQpIGNvbnN0OwogIHZvaWQgTm9ybWFsaXplKHZvaWQpOwogIGZsb2F0IE1hZ25pdHVkZSh2b2lk
KSBjb25zdDsKICB2b2lkIEluc2VydEluTWF0cml4KGZsb2F0IFs0XVs0XSkgY29uc3Q7CiAgVmVj
dG9yMyBHZXRYQXhpcyh2b2lkKSBjb25zdDsKICBWZWN0b3IzIEdldFlBeGlzKHZvaWQpIGNvbnN0
OwogIFZlY3RvcjMgR2V0WkF4aXModm9pZCkgY29uc3Q7CiAgVmVjdG9yNCBnZXRWZWN0b3Iodm9p
ZCkgY29uc3Q7CiAgVmVjdG9yNCBnZXRFdWxlcih2b2lkKSBjb25zdDsKICBWZWN0b3I0IGdldEF4
aXNBbmdsZSh2b2lkKSBjb25zdDsKICB2b2lkIHNldEV1bGVyKFZlY3RvcjQgJik7CgoKCgogIFF1
YXQgb3BlcmF0b3IgLSAoKSBjb25zdDsKCiAgUXVhdCAmb3BlcmF0b3IgKz0gKGNvbnN0IFF1YXQg
JnEpOwogIFF1YXQgJm9wZXJhdG9yIC09IChjb25zdCBRdWF0ICZxKTsKICBRdWF0ICZvcGVyYXRv
ciAqPSAoY29uc3QgUXVhdCAmcSk7CiAgUXVhdCAmb3BlcmF0b3IgLz0gKGNvbnN0IFF1YXQgJnEp
OwogIFF1YXQgJm9wZXJhdG9yIF49IChjb25zdCBRdWF0ICZxKTsKCiAgUXVhdCAmb3BlcmF0b3Ig
Kj0gKGZsb2F0IGMpOwogIFF1YXQgJm9wZXJhdG9yIC89IChmbG9hdCBjKTsKCiAgUXVhdCBvcGVy
YXRvciAqIChmbG9hdCkgY29uc3Q7CiAgUXVhdCBvcGVyYXRvciAvIChmbG9hdCkgY29uc3Q7Cgog
IGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IFF1YXQmIHEpIGNvbnN0OwogIGJvb2wgb3BlcmF0b3Ig
IT0gKGNvbnN0IFF1YXQmIHEpIGNvbnN0OwoKCgogIGZyaWVuZCBRdWF0IG9wZXJhdG9yICogKGZs
b2F0IGQsIGNvbnN0IFF1YXQgJnExKTsKICBmcmllbmQgUXVhdCBTcXVhcmUoY29uc3QgUXVhdCYp
OwogIGZyaWVuZCBRdWF0IEV4cChjb25zdCBRdWF0Jik7CiAgZnJpZW5kIFF1YXQgTG9nKGNvbnN0
IFF1YXQmKTsKICBmcmllbmQgUXVhdCBJbnRlcnBvbGF0ZShjb25zdCBRdWF0JiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRdWF0JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCB0KTsKCiAgdm9pZCBEdW1wKHZvaWQpIGNvbnN0Owp9OwoKCmlubGluZSBjb25zdCBRdWF0
IG9wZXJhdG9yKyhjb25zdCBRdWF0ICZsaHMsIGNvbnN0IFF1YXQgJnJocykKewogIHJldHVybiBR
dWF0KGxocykgKz0gcmhzOwp9CgppbmxpbmUgY29uc3QgUXVhdCBvcGVyYXRvci0oY29uc3QgUXVh
dCAmbGhzLCBjb25zdCBRdWF0ICZyaHMpCnsKICByZXR1cm4gUXVhdChsaHMpIC09IHJoczsKfQoK
aW5saW5lIGNvbnN0IFF1YXQgb3BlcmF0b3IqKGNvbnN0IFF1YXQgJmxocywgY29uc3QgUXVhdCAm
cmhzKQp7CiAgcmV0dXJuIFF1YXQobGhzKSAqPSByaHM7Cn0KCmlubGluZSBjb25zdCBRdWF0IG9w
ZXJhdG9yLyhjb25zdCBRdWF0ICZsaHMsIGNvbnN0IFF1YXQgJnJocykKewogIHJldHVybiBRdWF0
KGxocykgLz0gcmhzOwp9CgppbmxpbmUgY29uc3QgUXVhdCBvcGVyYXRvcl4oY29uc3QgUXVhdCAm
bGhzLCBjb25zdCBRdWF0ICZyaHMpCnsKICByZXR1cm4gUXVhdChsaHMpIF49IHJoczsKfQoKCmNs
YXNzIE1hdHJpeDQ0CnsKcHVibGljOgoKCiAgICAgICAgTWF0cml4NDQoKTsKICAgICAgICBNYXRy
aXg0NChjb25zdCBWZWN0b3IzICZhKTsKICAgICAgICBNYXRyaXg0NChjb25zdCBRdWF0ICZxKTsK
CiAgICAgICAgTWF0cml4NDQoY29uc3QgTWF0cml4NDQgJik7CiAgICAgICAgTWF0cml4NDQoZmxv
YXQgbTAwLCBmbG9hdCBtMDEsIGZsb2F0IG0wMiwgZmxvYXQgbTAzLAogICAgICAgICAgIGZsb2F0
IG0xMCwgZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0xMywKICAgICAgICAgICBmbG9hdCBt
MjAsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBtMjMsCiAgICAgICAgICAgZmxvYXQgbTMw
LCBmbG9hdCBtMzEsIGZsb2F0IG0zMiwgZmxvYXQgbTMzKTsKCgoKICBmbG9hdCBJbnZlcnQodm9p
ZCk7CiAgTWF0cml4NDQgVHJhbnNwb3NlKHZvaWQpOwogIHZvaWQgVW5pdCh2b2lkKTsKCgoKICBN
YXRyaXg0NCYgQXNzaWduKGNvbnN0IGZsb2F0IFs0XVs0XSk7CiAgTWF0cml4NDQmIE1hdHJpeDQ0
OjpBc3NpZ25mKGNvbnN0IGZsb2F0IG1hdFsxNl0pOwoKICBNYXRyaXg0NCYgVHJhbnNwb3NlQXNz
aWduKGNvbnN0IGZsb2F0IFs0XVs0XSk7CgogIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdDsKCgoK
ICBNYXRyaXg0NCYgb3BlcmF0b3IgKj0gKGNvbnN0IE1hdHJpeDQ0JiBtKTsKCgogIFZlY3RvcjMg
b3BlcmF0b3IgKiAoY29uc3QgVmVjdG9yMyAmKSBjb25zdDsKICBWZWN0b3I0IG9wZXJhdG9yICog
KGNvbnN0IFZlY3RvcjQgJikgY29uc3Q7CgogIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IE1hdHJp
eDQ0JikgY29uc3Q7CiAgYm9vbCBvcGVyYXRvciAhPSAoY29uc3QgTWF0cml4NDQmKSBjb25zdDsK
CgoKICB2b2lkIENvcHlUbyhmbG9hdCBbNF1bNF0pIGNvbnN0OwogICAgICAgIHZvaWQgQ29weVRv
ZihmbG9hdCBbMTZdKSBjb25zdDsKCiAgdm9pZCBUcmFuc3Bvc2VDb3B5VG8oZmxvYXQgWzRdWzRd
KSBjb25zdDsKCgoKICB2b2lkIFNldFBvcyhjb25zdCBWZWN0b3I0ICZwb3MpOwogIFZlY3RvcjQg
R2V0UG9zKHZvaWQpIGNvbnN0OwoKCgogIFZlY3RvcjMgR2V0QXhpcyhpbnQgY29sdW1ubnIpIGNv
bnN0OwoKICBNYXRyaXg0NCBPcmJpdChmbG9hdCBob3Jpem9udGFsLAogICAgICAgICAgICAgICAg
IGZsb2F0IHZlcnRpY2FsKSBjb25zdDsKICBNYXRyaXg0NCBPcmkodm9pZCkgY29uc3Q7CiAgIFF1
YXQgR2V0UXVhdCh2b2lkKSBjb25zdDsKICAgdm9pZCBSZXNldE9yaWVudGF0aW9uKHZvaWQpOwog
ICB2b2lkIER1bXAodm9pZCkgY29uc3Q7CnB1YmxpYzoKICBmbG9hdCBtWzRdWzRdOwp9OwoKCmlu
bGluZSBjb25zdCBNYXRyaXg0NCBvcGVyYXRvciooY29uc3QgTWF0cml4NDQgJmxocywgY29uc3Qg
TWF0cml4NDQKJnJocykgewogIHJldHVybiBNYXRyaXg0NChsaHMpICo9IHJoczsKfQoKCmNsYXNz
IEFuaW1hdGFibGU7CgpjbGFzcyBLZXlmcmFtZTsKY2xhc3MgQ29udHJvbGxlcgp7CgogICBwdWJs
aWM6CiAgICAgIENvbnRyb2xsZXIoKTsKCiAgICAgIHZpcnR1YWwgfkNvbnRyb2xsZXIoKTsKCiAg
ICAgIHZvaWQgc2V0QW5pbWF0YWJsZSggQW5pbWF0YWJsZSAqYSApIHtlbnQgPSBhO307CgogICAg
ICBWZWN0b3I0IGdldEF0dHJpYiggaW50ICk7CiAgICAgIHZvaWQgc2V0QXR0cmliKCBpbnQsIGNv
bnN0IFZlY3RvcjQgJiApOwoKICAgICAgaW50IGdldElEKCkgeyByZXR1cm4gSUQ7fTsKCiAgICAg
IHZvaWQgc2V0RGlydHkoIGJvb2wgZmxhZyApIHtkaXJ0eSA9IGZsYWc7fTsKCiAgICAgIGJvb2wg
aXNEaXJ0eSgpIHsgcmV0dXJuIGRpcnR5O307CgogICAgICB2b2lkIHRvZ2dsZURpcnR5KCkge2Rp
cnR5ID0gIWRpcnR5O307CgogICAgICB2b2lkIHNldFJlcGVhdCggYm9vbCBmbGFnICkge3dyYXBh
cm91bmQgPSBmbGFnO307CgogICAgICBib29sIGlzUmVwZWF0KCkgeyByZXR1cm4gd3JhcGFyb3Vu
ZDt9OwoKICAgICAgQ29udHJvbGxlciAmIG9wZXJhdG9yPSggQ29udHJvbGxlciAmcmhzICk7Cgog
ICAgICB2b2lkIHNhdmVUaW1lKCBpbnQgdGltZSApOwogICAgICB2b2lkIGxvYWRUaW1lKCBpbnQg
dGltZSApOwogICAgICB2b2lkIGluY3JlbWVudFRpbWUoKTsKCgogICBwcml2YXRlOgogICAgICBB
bmltYXRhYmxlICplbnQ7CiAgICAgIHN0ZDo6dmVjdG9yPGNsYXNzIEtleWZyYW1lPiBmcmFtZXM7
CiAgICAgIEtleWZyYW1lICpwcmV2OwogICAgICBLZXlmcmFtZSAqbmV4dDsKICAgICAgaW50IHRp
bWU7CiAgICAgIGludCBtYXhfdGltZTsKICAgICAgYm9vbCBkaXJ0eTsKICAgICAgaW50IElEOwog
ICAgICBpbnQgdHlwZTsKCiAgICAgIGJvb2wgd3JhcGFyb3VuZDsKCn07CmNsYXNzIEJvdW5kaW5n
Qm94CnsKICAgcHVibGljOgogICAgICBCb3VuZGluZ0JveCgpOwogICAgICB2b2lkIHNldEJvdW5k
cyggVmVjdG9yNCAmX21pbiwgVmVjdG9yNCAmX21heCApOwogICAgICB2b2lkIGRyYXcoIGludCBk
X29wdGlvbnMgPSAwICk7CiAgICAgIHZvaWQgZ2V0TWluKCBWZWN0b3I0ICpwKSB7ICpwID0gbWlu
O307CgogICAgICB2b2lkIGdldE1heCggVmVjdG9yNCAqcCkgeyAqcCA9IG1heDt9OwoKICAgICAg
dm9pZCBtb3ZlKCBWZWN0b3I0ICYgKTsKICAgICAgdm9pZCByb3RhdGUoIFZlY3RvcjQgJiApOwog
ICAgICB2b2lkIHNjYWxlKCBWZWN0b3I0ICYgKTsKCiAgICAgIHZvaWQgc2V0Q29sb3IoIFZlY3Rv
cjQgJiApOwogICAgICB2b2lkIGdldENvbG9yKCBWZWN0b3I0ICpwICkgeyAqcCA9IG1fY29sb3I7
IH07CgogICAgICB+Qm91bmRpbmdCb3goKTsKCgogICAgICBib29sIGNvbnRhaW5zKCBWZWN0b3I0
ICZwICk7CgogICBwcm90ZWN0ZWQ6CiAgICAgIFZlY3RvcjQgbWluOwogICAgICBWZWN0b3I0IG1h
eDsKICAgICAgZmxvYXQgeTM7CiAgICAgIGZsb2F0IHgzOwogICAgICBmbG9hdCB6MzsKCiAgICAg
IFZlY3RvcjQgbV9jb2xvcjsKfTsKCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1JiX3RyZWVfY29s
b3IgeyBfTV9yZWQgPSBmYWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVjdCBfUmJfdHJl
ZV9ub2RlX2Jhc2UKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRy
OwoKICAgIF9SYl90cmVlX2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9NX3BhcmVudDsK
ICAgIF9CYXNlX3B0ciBfTV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICAgIHN0YXRp
YyBfQmFzZV9wdHIKICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hp
bGUgKF9feC0+X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAgIHJldHVybiBf
X3g7CiAgICB9CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShfQmFzZV9wdHIg
X194KQogICAgewogICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9N
X3JpZ2h0OwogICAgICByZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWw+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jh
c2UKICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwog
ICAgICBfVmFsIF9NX3ZhbHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90cmVlX2Jhc2Vf
aXRlcmF0b3IKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9C
YXNlX3B0cjsKICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgX0Jh
c2VfcHRyIF9NX25vZGU7CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAgIHsKICAgICAg
aWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fbm9kZSA9
IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0g
MCkKICAgICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgfQogICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3Bh
cmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9f
eS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9kZS0+X01fcmln
aHQgIT0gX195KQogICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KCiAg
ICB2b2lkCiAgICBfTV9kZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fY29s
b3IgPT0gX01fcmVkCiAgICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVudCA9
PSBfTV9ub2RlKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgZWxz
ZSBpZiAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0
ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQg
IT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIF9NX25vZGUg
PSBfX3k7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRy
IF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9f
eS0+X01fbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAg
ICAgICAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAg
IF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX1JiX3RyZWVf
aXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewogICAgICB0eXBl
ZGVmIF9WYWwgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAg
dHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh
bCwgX1ZhbCYsIF9WYWwqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRv
cjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwog
ICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+IF9TZWxmOwog
ICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CgogICAgICBfUmJf
dHJlZV9pdGVyYXRvcigpIHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194
KSB7IF9NX25vZGUgPSBfX3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0
b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVmZXJlbmNlCiAg
ICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3Zh
bHVlX2ZpZWxkOyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQog
ICAgICB7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIF9T
ZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJu
IF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgpIHsgX01fZGVj
cmVtZW50KCk7IHJldHVybiAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShp
bnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2RlY3Jl
bWVudCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRy
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVm
LCBfUHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09
KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4m
IF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYs
IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09
KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAg
ICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0
IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9W
YWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJh
dG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBf
X3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYs
IGNvbnN0IF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRv
cjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBf
X3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwq
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25z
dCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBf
X3kuX01fbm9kZTsgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90
cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAg
X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194LT5fTV9yaWdo
dCA9IF9feS0+X01fbGVmdDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgICBfX3ktPl9N
X2xlZnQtPl9NX3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJl
bnQ7CgogICAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2Ug
aWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5fTV9wYXJlbnQt
Pl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9
IF9feTsKICAgIF9feS0+X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195Owog
IH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9IF9feS0+X01f
cmlnaHQ7CiAgICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9NX3JpZ2h0LT5f
TV9wYXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAg
IGlmIChfX3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3gg
PT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmln
aHQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195Owog
ICAgX195LT5fTV9yaWdodCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAg
aW5saW5lIHZvaWQKICBfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gs
IF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2NvbG9yID0gX01f
cmVkOwogICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gtPl9NX3BhcmVu
dC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+X01fcGFyZW50
ID09IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu
dC0+X01fcmlnaHQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9y
ZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2Nv
bG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7
CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9N
X3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAg
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAg
ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2Js
YWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3Ig
PSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9w
YXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAg
ICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgIGlmIChf
X3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg
ICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9f
eC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVu
dC0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9
IF9feC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdo
dChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+
X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAg
ICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9jb2xvciA9IF9N
X2JsYWNrOwogIH0KCiAgaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJfdHJlZV9yZWJh
bGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0
KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3ggPSAwOwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsK
ICAgIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAg
IGVsc2UKICAgICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3ggPSBfX3ktPl9N
X2xlZnQ7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195LT5fTV9yaWdo
dDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAgX195ID0g
X195LT5fTV9sZWZ0OwogICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgICAgICB9CiAg
ICBpZiAoX195ICE9IF9feikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVu
dCA9IF9feTsKICAgICAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICAgICAgaWYg
KF9feSAhPSBfX3otPl9NX3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBfX3hfcGFyZW50
ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0g
X195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194
OwogICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgICAgICAg
X196LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAgICAgIGVsc2UK
ICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAg
ICAgICAgICBfX3Jvb3QgPSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9N
X2xlZnQgPT0gX196KQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAg
ICAgICAgZWxzZQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAg
ICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3RkOjpzd2FwKF9f
eS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsKCiAgICAgIH0K
ICAgIGVsc2UKICAgICAgewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAg
ICAgICBpZiAoX194KQogICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsK
ICAgICAgICBpZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feDsKICAgICAg
ICBlbHNlCiAgICAgICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAg
ICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAgIGlmIChfX2xl
ZnRtb3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAg
ICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAg
ICAgICBpZiAoX19yaWdodG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fbGVmdCA9
PSAwKQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21h
eGltdW0oX194KTsKICAgICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01fcmVkKQogICAg
ICB7CiAgICAgICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01f
Y29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9s
ZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cg
PSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9
PSBfTV9yZWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29s
b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBf
TV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQs
IF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0Owog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwK
ICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spICYm
CiAgICAgICAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAg
ICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAg
ICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9f
eF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09
IDAKICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9N
X2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChf
X3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAg
ICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgICAg
ICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICAg
ICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAg
ICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAg
ICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmln
aHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0
ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsK
CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9s
ZWZ0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAg
ICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAg
ICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAg
ICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAg
IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAgICAg
ICAoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+
X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3ggPSBfX3hfcGFy
ZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IF9fdy0+X01fbGVmdC0+
X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01f
YmxhY2s7CiAgICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAg
ICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAg
ICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5f
TV9jb2xvcjsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFj
azsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAg
ICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9S
Yl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIGlmIChfX3gp
IF9feC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9feTsKICB9CgoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIF9TX2lu
c3RhbmNlbGVzcz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsKICAgIHB1Ymxp
YzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgICBf
UmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX01f
bm9kZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAg
ICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxs
b2NhdG9yX3R5cGUKICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJfdHJlZV9ub2Rl
PF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0
X25vZGUoKSB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgICAg
dm9pZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBf
TV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9j
X2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAg
X1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9B
bGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAg
ICBfQWxsb2NfdHlwZTsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25v
ZGUoKSB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAg
ICAgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRl
YWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBfUmJfdHJlZV9h
bGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgICAg
dHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2MsIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9S
Yl90cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2Ep
IHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVfYmFzZSgpIHsg
X01fcHV0X25vZGUoX01faGVhZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4gPgogICAgY2xh
c3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+CiAgICB7
CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNlOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICAg
ICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7CgogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90
eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiBy
ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAgIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9y
X3R5cGU7CiAgICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB1c2luZyBf
QmFzZTo6X01fZ2V0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAg
dXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY3JlYXRl
X25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBf
X3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgaWYgKHRydWUpCiAgICAgICAgICB7IF9Db25z
dHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsgfQogICAgICAgIGlmIChmYWxzZSkK
ICAgICAgICAgIHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIDsKICAg
ICAgICAgIH0KICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9MaW5rX3R5cGUK
ICAgICAgX01fY2xvbmVfbm9kZShfTGlua190eXBlIF9feCkKICAgICAgewogICAgICAgIF9MaW5r
X3R5cGUgX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAg
ICBfX3RtcC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOwogICAgICAgIF9fdG1wLT5fTV9sZWZ0
ID0gMDsKICAgICAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAgICAgIHJldHVybiBfX3RtcDsK
ICAgICAgfQoKICAgICAgdm9pZAogICAgICBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAg
ICAgIHsKICAgICAgICBfRGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX01f
cHV0X25vZGUoX19wKTsKICAgICAgfQoKICAgICAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7CiAg
ICAgIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01f
cm9vdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7
IH0KCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX2xlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4g
KF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KCiAgICAgIF9MaW5rX3R5cGUmCiAg
ICAgIF9NX3JpZ2h0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVy
LT5fTV9yaWdodDsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0xp
bmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAg
ICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KSB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtf
dHlwZSYKICAgICAgX1NfcGFyZW50KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlw
ZSYpKF9feC0+X01fcGFyZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192
YWx1ZShfTGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfTGlua190eXBlIF9feCkgeyByZXR1
cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQoKICAgICAgc3RhdGljIF9SYl90cmVl
X2NvbG9yJgogICAgICBfU19jb2xvcihfTGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV9j
b2xvcjsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0Jhc2VfcHRy
IF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0
aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9M
aW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAg
ICAgIF9TX3BhcmVudChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+
X01fcGFyZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfQmFz
ZV9wdHIgX194KSB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0Jhc2VfcHRyIF9feCkgeyBy
ZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CgogICAgICBz
dGF0aWMgX1JiX3RyZWVfY29sb3ImCiAgICAgIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpIHsgcmV0
dXJuIChfTGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5
cGUKICAgICAgX1NfbWluaW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5r
X3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogICAgICBzdGF0
aWMgX0xpbmtfdHlwZQogICAgICBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJl
dHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0K
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwg
cmVmZXJlbmNlLCBwb2ludGVyPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVy
YXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAgIGNv
bnN0X2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKICAgICAgaXRlcmF0
b3IKICAgICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZh
bHVlX3R5cGUmIF9fdik7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NvcHkoX0xpbmtfdHlw
ZSBfX3gsIF9MaW5rX3R5cGUgX19wKTsKCiAgICAgIHZvaWQKICAgICAgX01fZXJhc2UoX0xpbmtf
dHlwZSBfX3gpOwoKICAgIHB1YmxpYzoKCiAgICAgIF9SYl90cmVlKCkKICAgICAgICA6IF9CYXNl
KGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAg
ICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29t
cGFyZSYgX19jb21wKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVf
Y291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFs
aXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpCiAgICAgICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDAp
LCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9
CgogICAgICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194KQogICAgICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSks
IF9NX25vZGVfY291bnQoMCksCiAgICAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX194Ll9N
X2tleV9jb21wYXJlKQogICAgICB7CiAgICAgICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAg
ICAgICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAg
ICAgICAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7CiAgICAgICAgICAgIF9NX3Jv
b3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgICAgICAgX01f
bGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fcmlnaHRt
b3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICB9CiAgICAgICAgX01fbm9k
ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgICB9CgogICAgICB+X1JiX3RyZWUoKSB7
IGNsZWFyKCk7IH0KCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JgogICAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCk7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBf
TV9lbXB0eV9pbml0aWFsaXplKCkKICAgICAgewogICAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikg
PSBfTV9yZWQ7CgogICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgX01fbGVmdG1vc3QoKSA9
IF9NX2hlYWRlcjsKICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgfQoK
ICAgIHB1YmxpYzoKCiAgICAgIF9Db21wYXJlCiAgICAgIGtleV9jb21wKCkgY29uc3QgeyByZXR1
cm4gX01fa2V5X2NvbXBhcmU7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkgeyByZXR1
cm4gX01fbGVmdG1vc3QoKTsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQo
KSB7IHJldHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBy
ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIF9NX25vZGVfY291bnQgPT0gMDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUo
KSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICB2b2lkCiAg
ICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9fdCkKICAgICAgewogICAgICAgIHN0ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIp
OwogICAgICAgIHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAg
ICAgICAgc3RkOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogICAg
ICB9CgoKICAgICAgcGFpcjxpdGVyYXRvcixib29sPgogICAgICBpbnNlcnRfdW5pcXVlKGNvbnN0
IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfZXF1YWwoY29u
c3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF91bmlxdWUo
aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJh
dG9yCiAgICAgIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90
eXBlJiBfX3gpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAg
IHZvaWQKICAgICAgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+
CiAgICAgIHZvaWQKICAgICAgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24pOwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBf
X3gpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSogX19maXJzdCwg
Y29uc3Qga2V5X3R5cGUqIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkKICAgICAg
ewogICAgICAgIGlmIChfTV9ub2RlX2NvdW50ICE9IDApCiAgICAgICAgICB7CiAgICAgICAgICAg
IF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFk
ZXI7CiAgICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgp
ID0gX01faGVhZGVyOwogICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIH0K
ICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7
CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdDsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpOwoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgog
ICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIHBhaXI8Y29uc3Rf
aXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgogICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdDsKCgogICAgICBib29sCiAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3Qg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAg
IHsKICAgICAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgIGVxdWFs
KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0
dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I8PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVy
biAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Zh
bCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2Fw
KF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h
bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog
ICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZfX3gpCiAgICAgICAgewoK
ICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAg
IF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgICAgICAgaWYgKF9feC5f
TV9yb290KCkgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7
CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgICBf
TV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9v
dCgpLCBfTV9oZWFkZXIpOwogICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVt
KF9NX3Jvb3QoKSk7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9N
X3Jvb3QoKSk7CiAgICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRl
cmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjoKICAgIF9NX2luc2VydChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9W
YWwmIF9fdikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsK
ICAgICAgX0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195XzsKICAgICAgX0xpbmtfdHlw
ZSBfX3o7CgogICAgICBpZiAoX195ID09IF9NX2hlYWRlciB8fCBfX3ggIT0gMCB8fAogICAgICAg
ICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpCiAgICAg
ICAgewogICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAgIF9TX2xl
ZnQoX195KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX2hlYWRlcikKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgICAgICAgICBfTV9yaWdo
dG1vc3QoKSA9IF9fejsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX195ID09IF9N
X2xlZnRtb3N0KCkpCiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsK
ICAgICAgICAgIF9TX3JpZ2h0KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9y
aWdodG1vc3QoKSkKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQog
ICAgICBfU19wYXJlbnQoX196KSA9IF9feTsKICAgICAgX1NfbGVmdChfX3opID0gMDsKICAgICAg
X1NfcmlnaHQoX196KSA9IDA7CiAgICAgIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRl
ci0+X01fcGFyZW50KTsKICAgICAgKytfTV9ub2RlX2NvdW50OwogICAgICByZXR1cm4gaXRlcmF0
b3IoX196KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwg
dHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWwmIF9fdikK
ICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUg
X194ID0gX01fcm9vdCgpOwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAg
ICAgX195ID0gX194OwogICAgICAgICAgX194ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo
KShfX3YpLCBfU19rZXkoX194KSkgPwogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdo
dChfX3gpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg
X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgYm9vbD4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoY29uc3QgX1Zh
bCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp
bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIGJvb2wgX19jb21wID0gdHJ1ZTsKICAgICAg
d2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9feDsKICAgICAgICAg
IF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkp
OwogICAgICAgICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsK
ICAgICAgICB9CiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIGlmIChf
X2NvbXApCiAgICAgICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICAgICAgcmV0dXJuIHBhaXI8
aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgICBl
bHNlCiAgICAgICAgICAtLV9fajsKICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2ou
X01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0
b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgcmV0dXJuIHBh
aXI8aXRlcmF0b3IsYm9vbD4oX19qLCBmYWxzZSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgogICAg
X1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKICAg
IGluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAg
ewogICAgICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAg
ICAgICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICBfTV9rZXlf
Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkK
ICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRp
b24uX01fbm9kZSwgX192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNl
cnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9u
Ll9NX25vZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAg
ICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9f
cG9zaXRpb247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKF9NX2tleV9jb21w
YXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAg
ICAgICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSxfU19rZXkoX19wb3Np
dGlvbi5fTV9ub2RlKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQo
X19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQo
MCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9u
b2RlLCBfX3YpOwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1
cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgog
ICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAg
aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsK
ICAgICAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAg
ICAgewoKICAgICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgIV9NX2tleV9j
b21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQog
ICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2Vy
dF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2Rl
ID09IF9NX2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShf
S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQogICAgICAgICAgICBy
ZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQog
ICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAg
ICAgICAgLS1fX2JlZm9yZTsKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFs
dWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgICAgICAgJiYgIV9N
X2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAg
ICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9N
X25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tv
ViwKICAgICAgICAgICB0eXBlbmFtZSBfQ21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0
ZTxjbGFzcyBfSUk+CiAgICAgIHZvaWQKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0Nt
cCxfQWxsb2M+OjoKICAgICAgaW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQog
ICAgICB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
ICAgICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1l
IF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgIHZvaWQK
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5p
cXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46OmVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaW5r
X3R5cGUgX195ID0KICAgICAgICAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9l
cmFzZShfX3Bvc2l0aW9uLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+
X01fcmlnaHQpOwogICAgICBkZXN0cm95X25vZGUoX195KTsKICAgICAgLS1fTV9ub2RlX2NvdW50
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKICAgIHsKICAgICAgcGFpcjxp
dGVyYXRvcixpdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICAgICAgc2l6ZV90eXBl
IF9fbiA9IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIGVyYXNlKF9fcC5m
aXJzdCwgX19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9NX2NvcHkoX0xpbmtfdHlw
ZSBfX3gsIF9MaW5rX3R5cGUgX19wKQogICAgewoKICAgICAgX0xpbmtfdHlwZSBfX3RvcCA9IF9N
X2Nsb25lX25vZGUoX194KTsKICAgICAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgIGlm
ICh0cnVlKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAg
ICBfX3RvcC0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgICAg
ICAgIF9fcCA9IF9fdG9wOwogICAgICAgICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgICAgICAg
IHdoaWxlIChfX3ggIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9MaW5rX3R5cGUg
X195ID0gX01fY2xvbmVfbm9kZShfX3gpOwogICAgICAgICAgICAgIF9fcC0+X01fbGVmdCA9IF9f
eTsKICAgICAgICAgICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgICAgICAgICBpZiAo
X194LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9T
X3JpZ2h0KF9feCksIF9feSk7CiAgICAgICAgICAgICAgX19wID0gX195OwogICAgICAgICAgICAg
IF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKGZh
bHNlKQogICAgICAgIHsKICAgICAgICAgIF9NX2VyYXNlKF9fdG9wKTsKICAgICAgICAgIDsKICAg
ICAgICB9CiAgICAgIHJldHVybiBfX3RvcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl
eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9f
eCkKICAgIHsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9l
cmFzZShfU19yaWdodChfX3gpKTsKICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChf
X3gpOwogICAgICAgICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAg
ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQo
KSkKICAgICAgICBjbGVhcigpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoY29uc3QgX0tleSog
X19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpCiAgICAgICAgZXJhc2UoKl9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNv
bnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAg
ICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQog
ICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBf
X3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3gg
PSBfU19yaWdodChfX3gpOwoKICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAg
ICAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19q
Ll9NX25vZGUpKSkgPwogICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9y
CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAg
ICBmaW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICB3aGls
ZSAoX194ICE9IDApCiAgICAgICB7CiAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9feCksIF9faykpCiAgICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwogICAgICAgfQogICAg
IGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICAgcmV0dXJuIChf
X2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkg
PwogICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBjb3VudChjb25zdCBfS2V5
JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJh
dG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX2spOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFu
Y2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu
YW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVy
YXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBl
IF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAg
ICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194
KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAg
IGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0
b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwg
dHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYg
X19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAg
X0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAg
ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9
IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9T
X3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpp
dGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190
eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7Cgog
ICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nf
a2V5KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVy
YXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5
JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAg
ICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAg
ICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICAgICBfX3kg
PSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBf
U19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh
bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUKICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXF1YWxfcmFu
Z2UoY29uc3QgX0tleSYgX19rKQogICAgeyByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+
KGxvd2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUKICBwYWlyPHR5cGVuYW1lIF9S
Yl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRv
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBf
QWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29t
cGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAogIHsK
ICAgIHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3Vu
ZChfX2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
cGVyX2JvdW5kKF9faykpOwogIH0KCiAgaW5saW5lIGludAogIF9fYmxhY2tfY291bnQoX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQogIHsKICAg
IGlmIChfX25vZGUgPT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICBpbnQgX19zdW0gPSAwOwogICAg
ZG8KICAgICAgewogICAgICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAg
ICAgICAgKytfX3N1bTsKICAgICAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgICAgIGJy
ZWFrOwogICAgICAgIF9fbm9kZSA9IF9fbm9kZS0+X01fcGFyZW50OwogICAgICB9CiAgICB3aGls
ZSAoMSk7CiAgICByZXR1cm4gX19zdW07CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKICAgIHsK
ICAgIGlmIChfTV9ub2RlX2NvdW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgICAgcmV0
dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgICAgX01f
aGVhZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9N
X2hlYWRlcjsKCiAgICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9N
X3Jvb3QoKSk7CiAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9
IGVuZCgpOyArK19faXQpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190
eXBlKSBfX2l0Ll9NX25vZGU7CiAgICAgICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7
CiAgICAgICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgICAgICBpZiAoX194
LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9y
ID09IF9NX3JlZCkKICAgICAgICAgICAgICB8fCAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX01f
cmVkKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoX19MICYmIF9NX2tl
eV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgaWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5
KF9feCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoIV9fTCAmJiAhX19S
ICYmIF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICB9CgogICAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9k
ZV9iYXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlm
IChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9v
dCgpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgICB9Cn0KbmFtZXNw
YWNlIHN0ZAp7CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
ID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNv
bnN0IF9LZXksIF9UcD4gPiA+CmNsYXNzIG1hcAp7CgogCiAgOwoKcHVibGljOgoKICB0eXBlZGVm
IF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1h
cHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsK
ICBmcmllbmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVk
IDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBj
b21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlw
ZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAo
X194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1Ji
X3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0
PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBl
IF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2lu
dGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZl
cmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRv
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNl
X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRp
ZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChfQ29t
cGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFy
ZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkK
ICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwg
X19hKSB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNvbnN0
IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30K
CiAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1hcDxf
S2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5fTV90
OwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0
IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgp
IGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9j
YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0
b3IoKTsgfQoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0K
CgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigp
OyB9CgoKCgoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCiAg
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoK
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJi
ZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5y
ZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
ZW1wdHkoKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgp
OyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUo
KTsgfQogIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKSB7CiAgICBpdGVyYXRv
ciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOwoKICAgIGlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2Nv
bXAoKShfX2ssICgqX19pKS5maXJzdCkpCiAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVlX3R5
cGUoX19rLCBfVHAoKSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgfQoKICB2b2lkIHN3
YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9N
X3QpOyB9CiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194
KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKF9feCk7IH0KICBpdGVyYXRvciBpbnNl
cnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0dXJu
IF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJz
dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3Qu
ZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsg
fQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQogIGl0ZXJhdG9yIGZpbmQo
Y29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9p
dGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmlu
ZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQogIGl0
ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dl
cl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAg
aXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVw
cGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0K
ICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194
KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0
ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBi
b29sIG9wZXJhdG9yPCAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy
biAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQpuYW1lc3BhY2Ugc3RkCnsK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxj
b25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3Mg
bXVsdGltYXAKewoKIAogIDsKCnB1YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAg
dHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVk
ZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBr
ZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21wYXJlIGNv
bXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICBwdWJs
aWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1
ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmly
c3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZh
bHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9j
b21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5h
bWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgoKCiAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh
dG9yX3R5cGUoKSkgeyB9CiAgZXhwbGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29t
cCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh
dG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2Nv
bXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwg
X19sYXN0KTsgfQogIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlf
Y29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFs
dWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICBpdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgog
IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7
IH0KCgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KCgogIHNp
emVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KCgogIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQoKICB2b2lkIHN3
YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChf
X3guX01fdCk7IH0KICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHJl
dHVybiBfTV90Lmluc2VydF9lcXVhbChfX3gpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuaW5z
ZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7CiAg
fQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRp
b24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9N
X3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3Ig
X19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2b2lk
IGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoK
CgogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBf
TV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYg
X194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxv
d2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxv
d2VyX2JvdW5kKF9feCk7CiAgfQoKCgoKCgogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogIGNv
bnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogIHBhaXI8aXRlcmF0b3IsaXRlcmF0
b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVx
dWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+
IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90
LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEs
IGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG11
bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sx
LCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9y
PCAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBf
X3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEo
X194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9Cgp1c2lu
ZyBzdGQ6Omxlc3M7CgpjbGFzcyBJRGF0YTsKCnR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcs
IGNsYXNzIElEYXRhICosIGxlc3M8c3RkOjpzdHJpbmc+ID4gSURhdGFNYXA7CnR5cGVkZWYgSURh
dGFNYXA6OnZhbHVlX3R5cGUgSURhdGFFbnRyeTsKY2xhc3MgSURhdGEKewogICBwdWJsaWM6CiAg
ICAgIElEYXRhKCBzdGQ6OnN0cmluZyApOwogICAgICB2aXJ0dWFsIH5JRGF0YSgpOwoKCgoKICAg
ICAgdmlydHVhbCBzdGQ6OnN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fZGF0YTsgfTsKCgoK
CiAgICAgIHZpcnR1YWwgdm9pZCBpbml0KCBzdGQ6OnN0cmluZyBzICkgeyBtX2RhdGEgPSBzOyB9
OwoKCgoKICAgICAgdmlydHVhbCBJRGF0YSogY2xvbmUoKTsKCgogICAgICBzdGF0aWMgSURhdGEg
KiBjcmVhdGUoIHN0ZDo6c3RyaW5nIHRhZyApOwoKCiAgICAgIHN0YXRpYyBpbnQgcmVnaXN0ZXJE
YXRhKCBJRGF0YSAqICk7CgoKCgogICAgICBzdGQ6OnN0cmluZyAmIGdldFRhZygpIHsgcmV0dXJu
IG1fdGFnOyB9OwoKICAgcHJpdmF0ZToKICAgICAgc3RhdGljIElEYXRhTWFwIG1fcmVnaXN0cnk7
CgoKCgoKICAgICAgc3RkOjpzdHJpbmcgbV9kYXRhOwogICAgICBzdGQ6OnN0cmluZyBtX3RhZzsK
Cn07CgpjbGFzcyBDb250cm9sbGVyOwoKY2xhc3MgVGV4dHVyZTsKCmNsYXNzIE1hdGVyaWFsOwoK
Y2xhc3MgUHJvcGVydHk7CgpjbGFzcyBTdWJPYmplY3Q7CgoKCgoKCmNsYXNzIFRyYW5zZm9ybWFi
bGUKewoKICAgcHVibGljOgogICAgICBUcmFuc2Zvcm1hYmxlKCk7CiAgICAgIHZpcnR1YWwgflRy
YW5zZm9ybWFibGUoKSB7fTsKCiAgICAgIHZpcnR1YWwgdm9pZCBnZXRDb21wbGV0ZU1hdHJpeCgg
TWF0cml4NDQgKiApID0gMDsKICAgICAgdmlydHVhbCB2b2lkIGdldFBhcmVudE1hdHJpeCggTWF0
cml4NDQgKiApID0gMDsKICAgICAgdmlydHVhbCB2b2lkIGdldEJvdW5kaW5nTWluKCBWZWN0b3I0
ICogKSA9IDA7CiAgICAgIHZpcnR1YWwgdm9pZCBnZXRCb3VuZGluZ01heCggVmVjdG9yNCAqICkg
PSAwOwogICAgICB2aXJ0dWFsIHZvaWQgZ2V0VHJhbnNmb3JtZWRQb3NpdGlvbiggVmVjdG9yNCAq
ICkgPSAwOwoKICAgICAgdmlydHVhbCB2b2lkIHNldE9yaWVudGF0aW9uKCBmbG9hdCBkLCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6ICkgPSAwOwogICAgICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50
YXRpb24oIFF1YXQgJnEgKSA9IDA7CiAgICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbiggZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeiApID0gMDsKICAgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0
aW9uKCBWZWN0b3I0ICZwICk7CgoKICAgICAgdmlydHVhbCBWZWN0b3I0ICYgZ2V0UG9zaXRpb24o
KSA9IDA7CiAgICAgIHZpcnR1YWwgUXVhdCAmIGdldE9yaWVudGF0aW9uKCkgPSAwOwoKICAgICAg
dmlydHVhbCB2b2lkIGdldFBvc2l0aW9uKCBWZWN0b3I0ICogKSA9IDA7CiAgICAgIHZpcnR1YWwg
dm9pZCBnZXRPcmllbnRhdGlvbiggUXVhdCAqICkgPSAwOwoKICAgICAgdmlydHVhbCB2b2lkIG1v
dmUoIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHogKSA9IDA7CiAgICAgIHZpcnR1YWwgdm9pZCBy
b3RhdGUoIGZsb2F0IGFtb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgcHgs
IGZsb2F0IHB5LCBmbG9hdCBweiApID0gMDsKICAgICAgdmlydHVhbCB2b2lkIHNjYWxlKCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCBveCA9IDAsIGZsb2F0IG95ID0gMCwgZmxvYXQg
b3ogPSAwICkgPSAwOwoKICAgICAgdmlydHVhbCB2b2lkIHNjYWxlKCBWZWN0b3I0ICZhbXQsIFZl
Y3RvcjQgJnB0ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlKCBWZWN0b3I0ICZwICk7CiAgICAg
IHZpcnR1YWwgdm9pZCByb3RhdGUoIFZlY3RvcjQgJmFtdCwgVmVjdG9yNCAmcHQgKTsKCiAgICAg
IGludCBkcmF3Qm91bmRpbmdCb3goKTsKCn07CgpjbGFzcyBJRGVkCnsKICAgcHVibGljOgogICAg
ICBzdGF0aWMgaW50IElEOwogICAgICBzdGF0aWMgaW50IGdldE5ld0lEKCkgeyByZXR1cm4gSUQr
KzsgfTsKCiAgICAgIElEZWQoKSB7IG1faWQgPSBnZXROZXdJRCgpOyB9OwoKICAgICAgaW50IGdl
dElEKCkgeyByZXR1cm4gbV9pZDsgfTsKCiAgIHByb3RlY3RlZDoKICAgICAgaW50IG1faWQ7Cn07
CgoKY2xhc3MgVHlwZWQKewogICBwdWJsaWM6CiAgICAgIFR5cGVkKCk7CiAgICAgIH5UeXBlZCgp
OwoKCgogICAgICBpbnQgZ2V0VHlwZSgpIGNvbnN0OwogICAgICB2b2lkIHNldFR5cGUoIGludCBf
dHlwZSApOwoKICAgICAgaW50IGdldEJhc2VUeXBlKCk7CiAgICAgIGludCBnZXRSb290VHlwZSgp
OwoKICAgICAgdm9pZCBhZGRUeXBlKCBpbnQgYiApOwogICAgICBib29sIGlzQSggaW50IHBfdHlw
ZSApOwoKICAgICAgc3RhdGljIGludCBtX3VpZDsKICAgICAgc3RhdGljIGludCBnZXRVSUQoKTsK
CiAgICAgIGludCAqdHlwZV9saXN0OwogICAgICBpbnQgbnVtX3R5cGVzOwoKfTsKCmNsYXNzIFNl
bGVjdGFibGUgOiBwdWJsaWMgVHlwZWQsIHB1YmxpYyBJRGVkLCBwdWJsaWMgVHJhbnNmb3JtYWJs
ZQp7CiAgIHB1YmxpYzoKICAgICAgU2VsZWN0YWJsZSgpOwogICAgICBib29sIGlzU2VsZWN0ZWQo
KTsKICAgICAgdm9pZCBzZXRTZWxlY3RlZCggYm9vbCBmbGFnICk7CgogICBwcm90ZWN0ZWQ6CiAg
ICAgIGJvb2wgc2VsZWN0ZWQ7Cn07CgpjbGFzcyBSZW5kZXJhYmxlCnsKICAgcHVibGljOgogICAg
ICB2aXJ0dWFsIH5SZW5kZXJhYmxlKCkge307CgogICAgICB2aXJ0dWFsIGludCBkcmF3KCBpbnQg
ZF9vcHRpb25zID0gMCApID0gMDsKICAgICAgdmlydHVhbCBpbnQgcmVuZGVyKCBpbnQgZF9vcHRp
b25zID0gMCApID0gMDsKfTsKCgpjbGFzcyBBbmltYXRhYmxlCnsKICAgcHVibGljOgogICAgICBB
bmltYXRhYmxlKCk7CiAgICAgIHZpcnR1YWwgfkFuaW1hdGFibGUoKTsKICAgICAgdmlydHVhbCB2
b2lkIGxvYWRTdGF0ZSgpID0gMDsKICAgICAgdmlydHVhbCB2b2lkIHNhdmVTdGF0ZSgpID0gMDsK
ICAgICAgYm9vbCBpc0FuaW1hdGFibGUoKTsKICAgICAgdm9pZCBzZXRBbmltYXRhYmxlKCBib29s
ICk7CiAgICAgIENvbnRyb2xsZXIgKiBnZXRDb250cm9sbGVyKCk7CiAgICAgIHZvaWQgc2V0Q29u
dHJvbGxlciggQ29udHJvbGxlciAqICk7CiAgIHByb3RlY3RlZDoKICAgICAgQ29udHJvbGxlciAq
IG1fY29udHJvbGxlcjsKICAgICAgYm9vbCBtX2FuaW1hdGFibGU7Cn07CgpjbGFzcyBTZWxlY3RN
b2RlCnsKICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCBjbGVhcigpOwogICAgICBzdGF0aWMg
Ym9vbCBpcyggaW50ICk7CiAgICAgIHN0YXRpYyB2b2lkIGFkZCggaW50ICk7CiAgICAgIHN0YXRp
YyB2b2lkIHJlbW92ZSggaW50ICk7CiAgICAgIHN0YXRpYyB2b2lkIHNldCggaW50ICk7CiAgIHBy
b3RlY3RlZDoKICAgICAgc3RhdGljIGludCBtX21vZGVbIDggXTsKICAgICAgc3RhdGljIGludCBt
X3NpemU7Cn07CmNsYXNzIEVudGl0eSA6IHB1YmxpYyBBbmltYXRhYmxlLCBwdWJsaWMgU2VsZWN0
YWJsZSwgcHVibGljIFJlbmRlcmFibGUKewogICBwdWJsaWM6CiAgICAgIEVudGl0eSgpOwogICAg
ICBFbnRpdHkoIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIEVudGl0eSAqcGFyZW50ID0gMCAp
OwogICAgICBFbnRpdHkoIFZlY3RvcjQgJnAsIEVudGl0eSAqcGFyZW50ID0gMCApOwogICAgICBF
bnRpdHkoIEVudGl0eSAqcGFyZW50ICk7CgogICAgICB2b2lkIGluaXQoIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIEVudGl0eSAqcGFyZW50ID0gMCApOwoKICAgICAgdmlydHVhbCB2b2lkIGNvcHlGcm9t
KCBFbnRpdHkgKiApOwoKICAgICAgdmlydHVhbCB+RW50aXR5KCk7CgoKICAgICAgdmlydHVhbCB2
b2lkIHNldE9yaWVudGF0aW9uKCBmbG9hdCBkLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6ICk7
CiAgICAgIHZpcnR1YWwgdm9pZCBzZXRPcmllbnRhdGlvbiggUXVhdCAmcSApOwogICAgICB2aXJ0
dWFsIHZvaWQgc2V0UG9zaXRpb24oIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHogKTsKICAgICAg
dmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKCBWZWN0b3I0ICZwICkge3NldFBvc2l0aW9uKCBwLngs
IHAueSwgcC56ICk7fTsKCgogICAgICB2aXJ0dWFsIFZlY3RvcjQgJiBnZXRQb3NpdGlvbigpIHsg
cmV0dXJuIHBvczt9OwoKICAgICAgdmlydHVhbCBRdWF0ICYgZ2V0T3JpZW50YXRpb24oKSB7IHJl
dHVybiBxdWF0O307CgogICAgICB2aXJ0dWFsIHZvaWQgZ2V0UG9zaXRpb24oIFZlY3RvcjQgKiAp
OwogICAgICB2aXJ0dWFsIHZvaWQgZ2V0T3JpZW50YXRpb24oIFF1YXQgKiApOwoKCiAgICAgIHZp
cnR1YWwgdm9pZCBtb3ZlKCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6ICk7CiAgICAgIHZpcnR1
YWwgdm9pZCByb3RhdGUoIGZsb2F0IGFtb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwg
ZmxvYXQgcHgsIGZsb2F0IHB5LCBmbG9hdCBweiApOwogICAgICB2aXJ0dWFsIHZvaWQgc2NhbGUo
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IG94ID0gMCwgZmxvYXQgb3kgPSAwLCBm
bG9hdCBveiA9IDAgKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBzY2FsZSggVmVjdG9yNCAmYW10LCBW
ZWN0b3I0ICZwdCApIHtzY2FsZSggYW10LngsIGFtdC55LCBhbXQueiwgcHQueCwgcHQueSwgcHQu
eiApO307CgogICAgICB2aXJ0dWFsIHZvaWQgbW92ZSggVmVjdG9yNCAmcCApIHttb3ZlKCBwLngs
IHAueSwgcC56ICk7fTsKCiAgICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoIFZlY3RvcjQgJmFtdCwg
VmVjdG9yNCAmcHQgKSB7cm90YXRlKCBhbXQudywgYW10LngsIGFtdC55LCBhbXQueiwgcHQueCwg
cHQueSwgcHQueiApO307CgoKICAgICAgdmlydHVhbCB2b2lkIGxvYWRTdGF0ZSgpOwogICAgICB2
aXJ0dWFsIHZvaWQgc2F2ZVN0YXRlKCk7CgogICAgICB2aXJ0dWFsIGludCBkcmF3KCBpbnQgZF9v
cHRpb25zID0gMCApOwogICAgICB2aXJ0dWFsIGludCByZW5kZXIoIGludCBkX29wdGlvbnMgPSAw
ICk7CgogICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KCBFbnRpdHkgKl9wYXJlbnQgKTsKICAg
ICAgRW50aXR5ICogZ2V0UGFyZW50KCkgeyByZXR1cm4gcGFyZW50O307CgogICAgICB2b2lkIHNl
dERpcnR5KCBib29sIGZsYWcgKSB7ZGlydHkgPSBmbGFnO307CgogICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGlydHlCb3goIGJvb2wgZmxhZyApIHtkaXJ0eV9ib3ggPSBmbGFnO307CgogICAgICBib29s
IGlzRGlydHkoKSB7IHJldHVybiBkaXJ0eTt9OwoKICAgICAgdm9pZCB0b2dnbGVEaXJ0eSgpIHtk
aXJ0eSA9ICFkaXJ0eTt9OwoKICAgICAgdm9pZCBzZXRWaXNpYmxlKCBib29sIGZsYWcgKSB7dmlz
aWJsZSA9IGZsYWc7fTsKICAgICAgYm9vbCBpc1Zpc2libGUoKTsKCiAgICAgIHZvaWQgc2V0Vmlz
aWJpbGl0eUdyb3VwKCBpbnQgaSApIHsgbV92aXNfZ3JvdXAgPSBpOyB9OwogICAgICBpbnQgZ2V0
VmlzaWJpbGl0eUdyb3VwKCApIHsgcmV0dXJuIG1fdmlzX2dyb3VwOyB9OwoKICAgICAgc3RkOjpz
dHJpbmcgZ2V0TmFtZSgpIHsgcmV0dXJuIG5hbWU7fTsKCiAgICAgIHN0ZDo6c3RyaW5nIGdldE5v
dGVzKCkgeyByZXR1cm4gbm90ZXM7fTsKCgoKCiAgICAgIHZpcnR1YWwgdm9pZCBnZXRDb21wbGV0
ZU1hdHJpeCggTWF0cml4NDQgKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZ2V0TG9jYWxNYXRyaXgo
IE1hdHJpeDQ0ICogKTsKICAgICAgdmlydHVhbCB2b2lkIGdldFBhcmVudE1hdHJpeCggTWF0cml4
NDQgKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm91bmRpbmdNaW4oIFZlY3RvcjQgKiApOwog
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm91bmRpbmdNYXgoIFZlY3RvcjQgKiApOwogICAgICB2aXJ0
dWFsIHZvaWQgZ2V0VHJhbnNmb3JtZWRQb3NpdGlvbiggVmVjdG9yNCAqICk7CgogICAgICB2aXJ0
dWFsIEVudGl0eSAmIG9wZXJhdG9yPSggRW50aXR5ICZyaHMgKTsKCiAgICAgIHZpcnR1YWwgRW50
aXR5ICogY2xvbmUoKTsKCiAgICAgIGJvb2wgaXNEcmF3YWJsZSgpIHsgcmV0dXJuIGRyYXdhYmxl
O307CgogICAgICB2aXJ0dWFsIGJvb2wgaXNEZWxldGFibGUoKSB7IHJldHVybiB0cnVlO307CgoK
ICAgICAgdm9pZCBzZXROYW1lKCBzdGQ6OnN0cmluZyBfbmFtZSApIHtuYW1lID0gX25hbWU7fTsK
CiAgICAgIHZvaWQgc2V0Tm90ZXMoIHN0ZDo6c3RyaW5nIF9ub3RlcyApIHtub3RlcyA9IF9ub3Rl
czt9OwoKICAgICAgdmlydHVhbCBTdWJPYmplY3QgKiBnZXRTdWJPYmplY3QoIGludCBtb2RlLCBp
bnQgaW5kZXggKTsKCiAgICAgIHN0ZDo6c3RyaW5nIGdldEJhc2VEZXNjcmlwdGlvbigpOwoKCiAg
ICAgIHZpcnR1YWwgdm9pZCBwcmVEcmF3KCkge307CgogICAgICB2aXJ0dWFsIHZvaWQgcG9zdERy
YXcoKSB7fTsKCiAgICAgIElEYXRhICogZ2V0RGF0YSggc3RkOjpzdHJpbmcgKTsKICAgICAgdm9p
ZCBwdXREYXRhKCBzdGQ6OnN0cmluZywgSURhdGEgKiApOwoKICAgICAgSURhdGFNYXAgKiBnZXRB
bGxEYXRhKCApIHsgcmV0dXJuICYgbV9kYXRhOyB9OwoKICAgICAgc3RhdGljIGJvb2wgKiBpbml0
VmlzR3JvdXBzKCk7CgogICBwdWJsaWM6CgoKICAgICAgc3RhdGljIGludCBUWVBFOwoKCiAgIHBy
b3RlY3RlZDoKCiAgICAgIElEYXRhTWFwIG1fZGF0YTsKICAgICAgVmVjdG9yNCBwb3M7CiAgICAg
IFF1YXQgcXVhdDsKCiAgICAgIGVudW0geyBQT1NJVElPTl9DSEFOTkVMLCBPUklFTlRBVElPTl9D
SEFOTkVMIH07CgogICAgICBFbnRpdHkgKiBwYXJlbnQ7CgogICAgICBib29sIGRpcnR5OwogICAg
ICBib29sIGRpcnR5X2JveDsKICAgICAgYm9vbCBkcmF3YWJsZTsKICAgICAgYm9vbCB2aXNpYmxl
OwogICAgICBpbnQgbV92aXNfZ3JvdXA7CgoKICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAg
c3RkOjpzdHJpbmcgbm90ZXM7Cgp9OwpjbGFzcyBPYmplY3Q7CmNsYXNzIEZhY2U7CgpjbGFzcyBF
ZGdlOwoKY2xhc3MgVmVydGV4OwoKY2xhc3MgVVZDb29yZDsKY2xhc3MgU3ViT2JqZWN0IDogcHVi
bGljIEFuaW1hdGFibGUsIHB1YmxpYyBTZWxlY3RhYmxlCnsKICAgcHVibGljOgogICAgICBTdWJP
YmplY3QoIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIE9iamVjdCAqbyApOwogICAgICBTdWJP
YmplY3QoIE9iamVjdCAqbyApOwoKICAgICAgdmlydHVhbCB+U3ViT2JqZWN0KCk7CgogICAgICB2
aXJ0dWFsIHZvaWQgcmVpbmRleCggaW50IG9sZGksIGludCBuZXdpICk7CiAgICAgIHZpcnR1YWwg
dm9pZCBzZXRJbmRleCggaW50ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBpbml0KCk7CgogICAgICB2
aXJ0dWFsIGludCBkcmF3KCBpbnQgZF9vcHRpb25zID0gMCApID0gMDsKCiAgICAgIGJvb2wgdmlz
aWJsZTsKCiAgICAgIGludCBnZXRQYXJlbnRJbmRleCgpIHsgcmV0dXJuIGluZGV4O307CgoKCgog
ICAgICB2b2lkIHNldFZpc2libGUoIGJvb2wgZmxhZyApIHt2aXNpYmxlID0gZmxhZzt9OwogICAg
ICBib29sIGlzVmlzaWJsZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCByZW1vdmVE
dXBsaWNhdGVTdWJPYmplY3RzKCBpbnQgdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICB2
b2lkIHJlbW92ZUR1cGxpY2F0ZVZlcnRzKCApOwogICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IHJlbW92ZUR1cGxpY2F0ZUZhY2VzKCApOwogICAgICAgICAgICAgICAgICAgICAgICB2b2lkIHJl
bW92ZUR1cGxpY2F0ZUVkZ2VzKCApOwogICAgICAgICAgICAgICAgICAgICAgICB2b2lkIHJlbW92
ZUR1cGxpY2F0ZVVWcygpOwoKCgoKCgoKICAgICAgdm9pZCBhZGRTdWJPYmplY3QoIGludCB0LCBp
bnQgeCApOwogICAgICB2b2lkIGFkZEZhY2UoIGludCB4ICk7CiAgICAgIHZvaWQgYWRkRWRnZSgg
aW50IHggKTsKICAgICAgdm9pZCBhZGRWZXJ0KCBpbnQgeCApOwogICAgICB2b2lkIHJlbW92ZVN1
Yk9iamVjdCggaW50IHQsIGludCB4ICk7CiAgICAgIHZvaWQgcmVtb3ZlRmFjZSggaW50IHggKTsK
ICAgICAgdm9pZCByZW1vdmVFZGdlKCBpbnQgeCApOwogICAgICB2b2lkIHJlbW92ZVZlcnQoIGlu
dCB4ICk7CgoKCgoKCgogICAgICBpbnQgZ2V0U3ViT2JqKCBpbnQgdCwgaW50IHggKTsKICAgICAg
aW50IGdldEZhY2UoIGludCB4ICk7CiAgICAgIGludCBnZXRFZGdlKCBpbnQgeCApOwogICAgICBp
bnQgZ2V0VmVydCggaW50IHggKTsKCgoKCgoKCiAgICAgIFN1Yk9iamVjdCAqIGdldFN1Yk9ialB0
ciggaW50IHQsIGludCB4ICk7CiAgICAgIEZhY2UgKiBnZXRGYWNlUHRyKCBpbnQgeCApOwogICAg
ICBFZGdlICogZ2V0RWRnZVB0ciggaW50IHggKTsKICAgICAgVVZDb29yZCAqIGdldFVWUHRyKCBp
bnQgeCApOwogICAgICBWZXJ0ZXggKiBnZXRWZXJ0UHRyKCBpbnQgeCApOwoKCgoKCgoKICAgICAg
aW50IGdldE51bVN1Yk9ianMoIGludCB0ICk7CiAgICAgIGludCBnZXROdW1GYWNlcygpOwogICAg
ICBpbnQgZ2V0TnVtRWRnZXMoKTsKICAgICAgaW50IGdldE51bVZlcnRzKCk7CiAgICAgIHZvaWQg
c3dhcFN1Yk9iamVjdCggaW50IHR5cGUsIGludCBveCwgaW50IG54ICk7CiAgICAgIHZvaWQgc3dh
cEZhY2UoIGludCBveCwgaW50IG54ICk7CiAgICAgIHZvaWQgc3dhcFZlcnQoIGludCBveCwgaW50
IG54ICk7CiAgICAgIHZvaWQgc3dhcEVkZ2UoIGludCBveCwgaW50IG54ICk7CiAgICAgIHZvaWQg
cmVwbGFjZSggaW50IG54ICk7CiAgICAgIGJvb2wgc2hhcmVzU3ViT2JqZWN0KCBpbnQgdHlwZSwg
aW50IGluZGV4LCBpbnQgc3ViICk7CiAgICAgIGJvb2wgc2hhcmVzVmVydCggaW50IHYsIGludCBp
ICk7CiAgICAgIGJvb2wgc2hhcmVzRWRnZSggaW50IGUsIGludCBpICk7CiAgICAgIGJvb2wgc2hh
cmVzRmFjZSggaW50IGYsIGludCBpICk7CiAgICAgIHN0ZDo6dmVjdG9yPGludD4gZ2V0Q29tbW9u
U3ViT2JqZWN0cyggaW50IHR5cGUsIGludCBzdWIgKTsKICAgICAgc3RkOjp2ZWN0b3I8aW50PiBn
ZXRDb21tb25WZXJ0cyggaW50IGkgKTsKICAgICAgc3RkOjp2ZWN0b3I8aW50PiBnZXRDb21tb25F
ZGdlcyggaW50IGkgKTsKICAgICAgc3RkOjp2ZWN0b3I8aW50PiBnZXRDb21tb25GYWNlcyggaW50
IGkgKTsKCgoKCgoKCiAgICAgIGJvb2wgaGFzQ29tbW9uU3ViT2JqZWN0cyggaW50IHR5cGUsIGlu
dCBzdWIgKTsKICAgICAgYm9vbCBoYXNDb21tb25WZXJ0cyggaW50IGkgKTsKICAgICAgYm9vbCBo
YXNDb21tb25FZGdlcyggaW50IGkgKTsKICAgICAgYm9vbCBoYXNDb21tb25GYWNlcyggaW50IGkg
KTsKICAgICAgYm9vbCBoYXNTdWJPYmplY3QoIGludCB0eXBlLCBpbnQgcyApOwogICAgICBib29s
IGhhc0ZhY2UoIGludCBmICk7CiAgICAgIGJvb2wgaGFzRWRnZSggaW50IGUgKTsKICAgICAgYm9v
bCBoYXNWZXJ0KCBpbnQgdiApOwoKCgoKCgoKICAgICAgaW50IGZpbmRTdWJPYmplY3QoIGludCB0
eXBlLCBpbnQgc28gKTsKICAgICAgaW50IGZpbmRGYWNlKCBpbnQgZiApOwogICAgICBpbnQgZmlu
ZFZlcnQoIGludCB2ICk7CiAgICAgIGludCBmaW5kRWRnZSggaW50IGUgKTsKCgoKCgogICAgICBz
dGQ6OnZlY3RvcjxpbnQ+ICogZ2V0U3ViT2JqZWN0TGlzdCggaW50IHQgKTsKICAgICAgc3RkOjp2
ZWN0b3I8aW50PiAqIGdldEZhY2VzKCk7CiAgICAgIHN0ZDo6dmVjdG9yPGludD4gKiBnZXRFZGdl
cygpOwogICAgICBzdGQ6OnZlY3RvcjxpbnQ+ICogZ2V0VmVydHMoKTsKICAgICAgc3RkOjp2ZWN0
b3I8aW50PiAqIGdldFVWcygpOwoKCgogICAgICBPYmplY3QgKiBnZXRQYXJlbnRPYmplY3QoKSB7
IHJldHVybiBtX3BhcmVudDt9OwoKICAgICAgVmVjdG9yNCBnZXRDZW50ZXIoKTsKCiAgICAgIHZv
aWQgcmVtb3ZlKCk7CiAgICAgIHZvaWQgZGV0YWNoKCBib29sIHJlbW92ZV9tZSA9IHRydWUgKTsK
CiAgICAgIGJvb2wgbG9uZWx5KCk7CiAgICAgIGJvb2wgYWRqYWNlbnQoIFN1Yk9iamVjdCAqICk7
CgogICAgICB2b2lkIGR1bXAoKTsKICAgICAgc3RkOjpzdHJpbmcgZ2V0RGVzY3JpcHRpb24oIGlu
dCB0eXBlID0gMCApOwoKICAgICAgU3ViT2JqZWN0ICYgb3BlcmF0b3I9KCBTdWJPYmplY3QgJnJo
cyApOwoKICAgICAgdmlydHVhbCB2b2lkIGNvcHlGcm9tKCBTdWJPYmplY3QgKiApIHt9OwoKICAg
ICAgc3RhdGljIGludCBUWVBFOwoKCgoKCgoKICAgICAgdmlydHVhbCB2b2lkIGdldFBvc2l0aW9u
KCBWZWN0b3I0ICogKSB7fTsKCiAgICAgIHZpcnR1YWwgdm9pZCBnZXRPcmllbnRhdGlvbiggUXVh
dCAqICkge307CgoKICAgICAgdmlydHVhbCB2b2lkIGdldENvbXBsZXRlTWF0cml4KCBNYXRyaXg0
NCAqbSApOwogICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGFyZW50TWF0cml4KCBNYXRyaXg0NCAqbSAp
OwoKICAgICAgdmlydHVhbCB2b2lkIGdldEJvdW5kaW5nTWluKCBWZWN0b3I0ICp2ICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBnZXRCb3VuZGluZ01heCggVmVjdG9yNCAqdiApOwoKICAgICAgdmlydHVh
bCB2b2lkIHNldE9yaWVudGF0aW9uKCBmbG9hdCBkLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6
ICkge307CgogICAgICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50YXRpb24oIFF1YXQgJnEgKSB7fTsK
CiAgICAgIHZpcnR1YWwgUXVhdCAmIGdldE9yaWVudGF0aW9uKCk7CgogICAgICB2aXJ0dWFsIHZv
aWQgc2V0UG9zaXRpb24oIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHogKSB7fTsKCiAgICAgIHZp
cnR1YWwgVmVjdG9yNCAmIGdldFBvc2l0aW9uKCk7CiAgICAgIHZpcnR1YWwgdm9pZCBnZXRUcmFu
c2Zvcm1lZFBvc2l0aW9uKCBWZWN0b3I0ICogKSB7fTsKCiAgICAgIHZpcnR1YWwgdm9pZCBtb3Zl
KCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6ICk7CiAgICAgIHZpcnR1YWwgdm9pZCByb3RhdGUo
IGZsb2F0IGFtb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgcHgsIGZsb2F0
IHB5LCBmbG9hdCBweiApOwogICAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHosIGZsb2F0IG94ID0gMCwgZmxvYXQgb3kgPSAwLCBmbG9hdCBveiA9IDAgKTsK
CgoKICAgICAgdmlydHVhbCB2b2lkIGxvYWRTdGF0ZSgpIHt9OwoKICAgICAgdmlydHVhbCB2b2lk
IHNhdmVTdGF0ZSgpIHt9OwoKICAgcHJvdGVjdGVkOgoKICAgICAgT2JqZWN0ICogbV9wYXJlbnQ7
CgogICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHZsaXN0OwogICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGVs
aXN0OwogICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGZsaXN0OwogICAgICBzdGQ6OnZlY3RvcjxpbnQ+
IHV2bGlzdDsKCiAgICAgIGludCBpbmRleDsKCn07CgpjbGFzcyBWZXJ0ZXg7CmNsYXNzIFVWQ29v
cmQ7CmNsYXNzIE1hdGVyaWFsOwpjbGFzcyBUZXh0dXJlOwpjbGFzcyBFZGdlOwpjbGFzcyBUZXh0
dXJlTWF0ZXJpYWw7CmNsYXNzIFN1Yk9iamVjdDsKY2xhc3MgVmVydFNlZzsKY2xhc3MgRmFjZTsK
Y2xhc3MgT2JqZWN0IDogcHVibGljIEVudGl0eQp7CiAgIHB1YmxpYzoKICAgICAgT2JqZWN0KCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBFbnRpdHkgKnBhcmVudCA9IDAgKTsKICAgICAgT2Jq
ZWN0KCBWZWN0b3I0ICZwLCBFbnRpdHkgKnBhcmVudCA9IDAgKTsKICAgICAgT2JqZWN0KCBFbnRp
dHkgKnBhcmVudCA9IDAgKTsKICAgICAgdmlydHVhbCB+T2JqZWN0KCk7CgogICAgICB2aXJ0dWFs
IHZvaWQgY29weUZyb20oIEVudGl0eSAqICk7CgogICAgICB2aXJ0dWFsIHZvaWQgY29weVZlcnRz
UG9zVG8oIE9iamVjdCAqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBjb3B5VmVydHNUbyggT2JqZWN0
ICogKTsKICAgICAgdmlydHVhbCB2b2lkIGNvcHlGYWNlc1RvKCBPYmplY3QgKiApOwogICAgICB2
aXJ0dWFsIHZvaWQgY29weUVkZ2VzVG8oIE9iamVjdCAqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBj
b3B5VVZzVG8oIE9iamVjdCAqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBjb3B5TWF0ZXJpYWxzVG8o
IE9iamVjdCAqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViT2JqZWN0c1RvKCBpbnQgdHlw
ZSwgT2JqZWN0ICogbyApOwoKICAgICAgdm9pZCBtZXJnZSggc3RkOjp2ZWN0b3I8T2JqZWN0ICo+
ICZvYmpzICkge307CgoKICAgICAgdmlydHVhbCBpbnQgcmVuZGVyKCBpbnQgZF9vcHRpb25zID0g
MCApOwogICAgICB2aXJ0dWFsIGludCBkcmF3KCBpbnQgZF9vcHRpb25zID0gMCApOwogICAgICB2
b2lkIGRyYXdWZXJ0cygpOwogICAgICB2b2lkIGRyYXdFZGdlcygpOwogICAgICB2b2lkIGRyYXdQ
aXZvdFBvaW50KCk7CgoKICAgICAgdmlydHVhbCB2b2lkIHNjYWxlKCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCBveCA9IDAsIGZsb2F0IG95ID0gMCwgZmxvYXQgb3ogPSAwICk7CiAg
ICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoIGZsb2F0IGFtb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgeiwgZmxvYXQgcHgsIGZsb2F0IHB5LCBmbG9hdCBweiApOwogICAgICB2aXJ0dWFsIHZv
aWQgc2V0U2l6ZSggZmxvYXQgdywgZmxvYXQgaCwgZmxvYXQgZCApOwoKCiAgICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0dXJlTWF0ZXJpYWwoIFRleHR1cmVNYXRlcmlhbCAqdCApIHt0bWxheWVyWyAw
IF0gPSB0O307CgogICAgICBUZXh0dXJlTWF0ZXJpYWwgKiBnZXRUZXh0dXJlTWF0ZXJpYWwoIGlu
dCBpID0gMCApOwoKCgogICAgICB2b2lkIHNldEJvdW5kaW5nQm94KCBWZWN0b3I0ICZtaW4sIFZl
Y3RvcjQgJm1heCApIHtib3VuZGluZ19taW4gPSBtaW47IGJvdW5kaW5nX21heCA9IG1heDt9OwoK
ICAgICAgdmlydHVhbCB2b2lkIGdldEJvdW5kaW5nTWluKCBWZWN0b3I0ICogKTsKICAgICAgdmly
dHVhbCB2b2lkIGdldEJvdW5kaW5nTWF4KCBWZWN0b3I0ICogKTsKICAgICAgdm9pZCBub3JtYWxp
emUoKTsKICAgICAgdm9pZCBjZW50ZXIoKTsKICAgICAgdm9pZCBjYWxjQm91bmRpbmdCb3goKTsK
CiAgICAgIHN0YXRpYyB2b2lkIGR1bXBWZXJ0cyggc3RkOjp2ZWN0b3I8VmVydGV4ICo+ICZsaXN0
ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgIHZvaWQgZHVtcFZlY3Rvciggc3Rk
Ojp2ZWN0b3I8aW50PiAmICk7CgoKICAgICAgdmlydHVhbCBPYmplY3QgJm9wZXJhdG9yPSggT2Jq
ZWN0ICZyaHMgKTsKICAgICAgdmlydHVhbCBFbnRpdHkgKiBjbG9uZSgpID0gMDsKCgogICAgICBz
dGQ6OnZlY3RvcjxTdWJPYmplY3QgKj4gKiBnZXRFZGdlcygpIHsgcmV0dXJuICYgZWRnZXM7fTsK
CiAgICAgIHN0ZDo6dmVjdG9yPFN1Yk9iamVjdCAqPiAqIGdldFZlcnRzKCkgeyByZXR1cm4gJiB2
ZXJ0czt9OwoKICAgICAgc3RkOjp2ZWN0b3I8U3ViT2JqZWN0ICo+ICogZ2V0VVZzKCkgeyByZXR1
cm4gJiB1dnM7fTsKCiAgICAgIHN0ZDo6dmVjdG9yPFN1Yk9iamVjdCAqPiAqIGdldEZhY2VzKCkg
eyByZXR1cm4gJiBmYWNlczt9OwoKICAgICAgc3RkOjp2ZWN0b3I8U3ViT2JqZWN0ICo+ICogZ2V0
U3ViT2JqZWN0TGlzdCggaW50IHR5cGUgKTsKCiAgICAgIHZpcnR1YWwgU3ViT2JqZWN0ICogZ2V0
U3ViT2JqZWN0KCBpbnQgbW9kZSwgaW50IGluZGV4ICk7CgogICAgICB2aXJ0dWFsIHZvaWQgYWRk
VmVydCggVmVydGV4ICp2ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBhZGRGYWNlKCBGYWNlICp2ICk7
CiAgICAgIHZpcnR1YWwgdm9pZCBhZGRFZGdlKCBFZGdlICp2ICk7CiAgICAgIHZpcnR1YWwgdm9p
ZCBhZGRTdWJPYmplY3QoIFN1Yk9iamVjdCAqICk7CgogICAgICB2b2lkIHJlbW92ZVZlcnQoIGlu
dCBpICk7CiAgICAgIHZvaWQgcmVtb3ZlRmFjZSggaW50IGkgKTsKICAgICAgdm9pZCByZW1vdmVF
ZGdlKCBpbnQgaSApOwogICAgICB2b2lkIHJlbW92ZVN1Yk9iamVjdCggU3ViT2JqZWN0ICogKTsK
CgogICAgICB2b2lkIGRlbGV0ZVZlcnQoIGludCBpICk7CiAgICAgIHZvaWQgZGVsZXRlRWRnZSgg
aW50IGkgKTsKICAgICAgdm9pZCBkZWxldGVGYWNlKCBpbnQgaSApOwogICAgICB2b2lkIGRlbGV0
ZVN1Yk9iamVjdCggaW50IHR5cGUsIGludCBpICk7CgogICAgICBWZXJ0ZXggKiBjcmVhdGVWZXJ0
ZXgoICk7CiAgICAgIFZlcnRleCAqIGNyZWF0ZVZlcnRleCggVmVjdG9yNCAmcCApOwogICAgICBW
ZXJ0ZXggKiBjcmVhdGVWZXJ0ZXgoIGZsb2F0LCBmbG9hdCwgZmxvYXQgKTsKICAgICAgRWRnZSAq
IGNyZWF0ZUVkZ2UgKCApOwogICAgICBFZGdlICogY3JlYXRlRWRnZSAoIGludCwgaW50ICk7Cgog
ICAgICBGYWNlICogY3JlYXRlRmFjZSAoICk7CiAgICAgIEZhY2UgKiBjcmVhdGVGYWNlICggaW50
LCBpbnQgLCBpbnQgKTsKICAgICAgRmFjZSAqIGNyZWF0ZUZhY2UgKCBpbnQsIGludCwgaW50LCBp
bnQgKTsKICAgICAgRmFjZSAqIGNyZWF0ZUZhY2UgKCBzdGQ6OnZlY3RvcjxpbnQ+ICYgKTsKCiAg
ICAgIFVWQ29vcmQqIGNyZWF0ZVVWQ29vcmQgKCBmbG9hdCwgZmxvYXQgKTsKICAgICAgVVZDb29y
ZCogY3JlYXRlVVZDb29yZCAoICk7CgogICAgICBTdWJPYmplY3QgKiBjcmVhdGVTdWJPYmplY3Qo
IGludCB0eXBlICk7CgoKICAgICAgRmFjZSAqIGdldEZhY2UoIGludCBpICk7CiAgICAgIFZlcnRl
eCAqIGdldFZlcnRleCggaW50IGkgKTsKICAgICAgRWRnZSAqIGdldEVkZ2UoIGludCBpICk7CiAg
ICAgIFVWQ29vcmQgKiBnZXRVVkNvb3JkKCBpbnQgaSApOwoKICAgICAgaW50IG51bUZhY2VzKCkg
eyByZXR1cm4gKCBpbnQgKSBmYWNlcy5zaXplKCk7fTsKCiAgICAgIGludCBudW1FZGdlcygpIHsg
cmV0dXJuICggaW50ICkgZWRnZXMuc2l6ZSgpO307CgogICAgICBpbnQgbnVtVmVydHMoKSB7IHJl
dHVybiAoIGludCApIHZlcnRzLnNpemUoKTt9OwoKICAgICAgaW50IG51bVVWcygpIHsgcmV0dXJu
ICggaW50ICkgdXZzLnNpemUoKTt9OwoKICAgICAgaW50IGZpbmRGYWNlKCBGYWNlICpmICk7CiAg
ICAgIGludCBmaW5kRWRnZSggRWRnZSAqZiApOwogICAgICBpbnQgZmluZFZlcnRleCggVmVydGV4
ICpmICk7CiAgICAgIGludCBmaW5kVVYoIFVWQ29vcmQgKmYgKTsKICAgICAgaW50IGZpbmRTdWJP
YmplY3QoIGludCwgU3ViT2JqZWN0ICogKTsKCgogICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGdldFN1
Yk9iamVjdEZhY2VzKCBpbnQgc3R5cGUsIHN0ZDo6dmVjdG9yPGludD4gJnNvbGlzdCApOwogICAg
ICBzdGQ6OnZlY3RvcjxpbnQ+IGdldFN1Yk9iamVjdEVkZ2VzKCBpbnQgc3R5cGUsIHN0ZDo6dmVj
dG9yPGludD4gJnNvbGlzdCApOwogICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGdldFN1Yk9iamVjdFZl
cnRzKCBpbnQgc3R5cGUsIHN0ZDo6dmVjdG9yPGludD4gJnNvbGlzdCApOwogICAgICBzdGQ6OnZl
Y3RvcjxpbnQ+IGdldFN1Yk9iamVjdFN1Yk9iamVjdHMoIGludCB0eXBlLCBpbnQgc3R5cGUsIHN0
ZDo6dmVjdG9yPGludD4gJnNvbGlzdCApOwoKICAgICAgdm9pZCBtYXJrRm9yRGVsZXRpb24oIFN1
Yk9iamVjdCAqICk7CiAgICAgIHZvaWQgY2xlYW5TdWJPYmplY3RzKCk7CgogICAgICB2b2lkIGNs
ZWFuRWRnZXMoKTsKICAgICAgdm9pZCBjbGVhblZlcnRzKCk7CgogICAgICBmbG9hdCBnZXRGYWNl
T3JpZW50YXRpb24oIHN0ZDo6dmVjdG9yPGludD4gJiApOwoKICAgICAgc3RkOjp2ZWN0b3I8aW50
PiBnZXRGYWNlT3JkZXJlZEVkZ2VzKCBzdGQ6OnZlY3RvcjxpbnQ+ICYgKTsKCiAgICAgIGludCBn
ZXRNaWRQb2ludCggaW50LCBpbnQgKTsKICAgICAgaW50IGdldEVkZ2UoIGludCwgaW50ICk7CgoK
CiAgICAgIHN0YXRpYyBpbnQgVFlQRTsKICAgICAgc3RhdGljIGJvb2wgc2hvd19heGlzOwogICAg
ICBzdGF0aWMgVGV4dHVyZU1hdGVyaWFsICptX2RlZmF1bHRfbWF0ZXJpYWw7CgogICBwcm90ZWN0
ZWQ6CiAgICAgIFZlY3RvcjQgYm91bmRpbmdfbWluOwogICAgICBWZWN0b3I0IGJvdW5kaW5nX21h
eDsKCiAgICAgIHN0ZDo6dmVjdG9yPFN1Yk9iamVjdCAqPiB2ZXJ0czsKICAgICAgc3RkOjp2ZWN0
b3I8VmVydFNlZyAqPiBzZWdzOwogICAgICBzdGQ6OnZlY3RvcjxTdWJPYmplY3QgKj4gdXZzOwog
ICAgICBzdGQ6OnZlY3RvcjxTdWJPYmplY3QgKj4gZWRnZXM7CiAgICAgIHN0ZDo6dmVjdG9yPFN1
Yk9iamVjdCAqPiBmYWNlczsKCiAgICAgIHN0ZDo6bGlzdDxTdWJPYmplY3QgKj4gZGVmdW5jdDsK
CiAgICAgIFRleHR1cmVNYXRlcmlhbCAqdG1sYXllclsgNSBdOwoKICAgICAgaW50IGdsSUQ7Cgp9
OwoKCgpjbGFzcyBWZXJ0U2VnCnsKICAgcHVibGljOgogICAgICBpbnQgdjE7CiAgICAgIGludCB2
MjsKICAgICAgVmVydGV4ICptaWQ7Cn07CgpjbGFzcyBGYWNlOwoKCgoKCmNsYXNzIE1lc2ggOiBw
dWJsaWMgT2JqZWN0CnsKICAgcHVibGljOgogICAgICBNZXNoKCBFbnRpdHkgKnAgPSAwICk7CiAg
ICAgIE1lc2goIFZlY3RvcjQgJnAsIEVudGl0eSAqcGFyZW50ID0gMCApOwogICAgICBNZXNoKCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBFbnRpdHkgKnBhcmVudCA9IDAgKTsKICAgICAgdmly
dHVhbCB+TWVzaCgpOwoKICAgICAgaW50IGZpbmRGYWNlKCBGYWNlICogKTsKCiAgICAgIHZpcnR1
YWwgaW50IGRyYXcoIGludCBkX29wdGlvbnMgPSAwICk7CiAgICAgIHZvaWQgZHJhd0ZhY2VzKCk7
CgogICAgICBNZXNoICYgb3BlcmF0b3I9KCBNZXNoJnJocyApOwoKICAgICAgdmlydHVhbCBFbnRp
dHkgKiBjbG9uZSgpOwoKICAgICAgdmlydHVhbCB2b2lkIGNvcHlGcm9tKCBFbnRpdHkgKiApOwoK
CgogICAgICB2b2lkIHNldERyYXdFZGdlcyggYm9vbCBmICkge2RyYXdfZWRnZXMgPSBmO307CiAg
ICAgIHZpcnR1YWwgdm9pZCBtaXJyb3IoIGludCBheGlzICk7CiAgICAgIHZpcnR1YWwgdm9pZCBz
dWJkaXZpZGUoKTsKICAgICAgdmlydHVhbCB2b2lkIHN1YmRpdmlkZVRyaWFuZ2xlcygpOwogICAg
ICB2aXJ0dWFsIHZvaWQgc3ViZGl2aWRlVHJpYW5nbGVzKCBzdGQ6OnZlY3RvcjxpbnQ+ICYgKTsK
CiAgICAgIHZpcnR1YWwgdm9pZCB0cmlhbmd1bGF0ZSgpOwogICAgICB2aXJ0dWFsIHZvaWQgdHJp
YW5ndWxhdGVGYWNlcyggc3RkOjp2ZWN0b3I8aW50PiAmZmFjZXMgKTsKCiAgICAgIHZpcnR1YWwg
dm9pZCByZXZlcnNlKCk7CiAgICAgIHZpcnR1YWwgdm9pZCB0aWdodGVuKCBmbG9hdCB0b2xlcmFu
Y2UgKTsKICAgICAgdmlydHVhbCB2b2lkIHNtb290aCggZmxvYXQgdG9sZXJhbmNlICk7CgogICAg
ICB2b2lkIG1lcmdlKCBzdGQ6OnZlY3RvcjxPYmplY3QgKj4gJm9ianMgKTsKICAgICAgdm9pZCBl
eHBsb2RlKCBzdGQ6OnZlY3RvcjxNZXNoICo+ICYgKTsKCiAgICAgIHZvaWQgd2VsZFZlcnRzKCBz
dGQ6OnZlY3RvcjxpbnQ+ICZ2bGlzdCApOwogICAgICB2b2lkIHdlbGRGYWNlKCBpbnQgYSwgaW50
IGIgKTsKCiAgICAgIHZvaWQgdG9nZ2xlRWRnZUhhcmRuZXNzKCBzdGQ6OnZlY3RvcjxpbnQ+ICZl
bGlzdCApOwogICAgICB2b2lkIHNldFZlcnRleENvbG9ycyggc3RkOjp2ZWN0b3I8aW50PiAmdmxp
c3QsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEgKTsKICAgICAgdm9pZCByZXNl
dFZlcnRleENvbG9ycyggc3RkOjp2ZWN0b3I8aW50PiAmdmxpc3QgKTsKCiAgICAgIE1lc2ggKiBz
bGljZVZlcnRzKCBzdGQ6OnZlY3RvcjxpbnQ+ICZ2ZXJ0cyApOwogICAgICBNZXNoICogc2xpY2VG
YWNlcyggc3RkOjp2ZWN0b3I8aW50PiAmdmVydHMgKTsKICAgICAgTWVzaCAqIHNsaWNlRWRnZXMo
IHN0ZDo6dmVjdG9yPGludD4gJnZlcnRzICk7CgogICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRmFj
ZXMoIHN0ZDo6dmVjdG9yPGludD4gJmZhY2VzICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkZWxldGVW
ZXJ0cyggc3RkOjp2ZWN0b3I8aW50PiAmdmVydHMgKTsKICAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUVkZ2VzKCBzdGQ6OnZlY3RvcjxpbnQ+ICZlZGdlcyApOwoKICAgICAgdmlydHVhbCBNZXNoICog
c2xpY2UoIGludCB0eXBlLCBzdGQ6OnZlY3RvcjxpbnQ+ICZzb2xpc3QgKTsKCiAgICAgIHZvaWQg
bG9vcFZlcnRzKCBzdGQ6OnZlY3RvcjxpbnQ+ICZ2ICk7CiAgICAgIHZvaWQgbG9vcEVkZ2VzKCBz
dGQ6OnZlY3RvcjxpbnQ+ICZ2ICk7CiAgICAgIHZvaWQgY29ubmVjdFZlcnRzKCBzdGQ6OnZlY3Rv
cjxpbnQ+ICZ2ICk7CiAgICAgIHZvaWQgY29ubmVjdEVkZ2VzKCBzdGQ6OnZlY3RvcjxpbnQ+ICZ2
ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KCBpbnQgdHlwZSwgc3RkOjp2ZWN0b3I8aW50
PiAmLCBib29sIGxvb3AgKTsKCiAgICAgIHZvaWQgZXh0cnVkZVZlcnRzKCBzdGQ6OnZlY3Rvcjxp
bnQ+ICZ2LCBWZWN0b3I0ICZwICk7CiAgICAgIHZvaWQgZXh0cnVkZUVkZ2VzKCBzdGQ6OnZlY3Rv
cjxpbnQ+ICZlLCBWZWN0b3I0ICZwICk7CiAgICAgIHZvaWQgZXh0cnVkZUZhY2VzKCBzdGQ6OnZl
Y3RvcjxpbnQ+ICZmLCBWZWN0b3I0ICZwICk7CgogICAgICB2b2lkIGJldmVsVmVydHMoIHN0ZDo6
dmVjdG9yPGludD4gJnYsIGZsb2F0IGFtdCApOwogICAgICB2b2lkIGJldmVsRWRnZXMoIHN0ZDo6
dmVjdG9yPGludD4gJmUsIGZsb2F0IGFtdCApOwogICAgICB2b2lkIGJldmVsRmFjZXMoIHN0ZDo6
dmVjdG9yPGludD4gJmYsIGZsb2F0IGFtdCApOwoKICAgICAgdm9pZCBkaXZpZGVFZGdlcyggc3Rk
Ojp2ZWN0b3I8aW50PiAmZSApOwogICAgICB2b2lkIHJldmVyc2VGYWNlcyggc3RkOjp2ZWN0b3I8
aW50PiAmICk7CiAgICAgIHZvaWQgc21vb3RoRmFjZXMoIHN0ZDo6dmVjdG9yPGludD4gJiApOwog
ICAgICB2b2lkIHN1YmRpdmlkZUZhY2VzKCBzdGQ6OnZlY3RvcjxpbnQ+ICYgKTsKCiAgICAgIHZv
aWQgY3JlYXRlTmV3RmFjZSggc3RkOjp2ZWN0b3I8aW50PiAmICk7CgoKCiAgICAgIHN0YXRpYyBi
b29sIGRyYXdfZWRnZXM7CiAgICAgIHN0YXRpYyBib29sIGN1bGxfZmFjZXM7CiAgICAgIHN0YXRp
YyBpbnQgVFlQRTsKCiAgIHByb3RlY3RlZDoKCn07CgoKCgoKCgpjbGFzcyBDdWJlIDogcHVibGlj
IE1lc2gKewogICBwdWJsaWM6CgogICAgICBDdWJlKCBmbG9hdCB4ID0gMCwgZmxvYXQgeSA9IDAs
IGZsb2F0IHogPSAwLCBpbnQgdyA9IDAsIGludCBoID0gMCwgaW50IGQgPSAwICk7CiAgICAgIH5D
dWJlKCk7Cn07CmNsYXNzIFRyaWFuZ2xlOwoKY2xhc3MgTWF0ZXJpYWw7CgpjbGFzcyBGYWNlOwpl
bnVtIHsgUE9TSVRJT05fQ0hBTk5FTCwgTk9STUFMX0NIQU5ORUwsIENPTE9SX0NIQU5ORUwgfTsK
CmNsYXNzIFZlcnRleCA6IHB1YmxpYyBTdWJPYmplY3QKewogICBwdWJsaWM6CiAgICAgIFZlcnRl
eCggZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgT2JqZWN0ICpwYXJlbnQgKTsKICAgICAgVmVy
dGV4KCBWZWN0b3I0ICZwLCBPYmplY3QgKnBhcmVudCApOwogICAgICBWZXJ0ZXgoIE9iamVjdCAq
cGFyZW50ICk7CgogICAgICB2aXJ0dWFsIH5WZXJ0ZXgoKTsKCiAgICAgIHZvaWQgc2V0TWF0ZXJp
YWwoIFRleHR1cmVNYXRlcmlhbCAqbSApOwoKICAgICAgdm9pZCBzZXRVVkNvb3JkKCBmbG9hdCB1
LCBmbG9hdCB2ICk7CiAgICAgIHZpcnR1YWwgaW50IGRyYXcoIGludCBkcmF3ICk7CgogICAgICB2
aXJ0dWFsIHZvaWQgcm90YXRlKCBmbG9hdCBhbW91bnQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0LCBmbG9hdCwgZmxvYXQgKTsKICAgICAgdmlydHVhbCB2b2lkIHNjYWxlKCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCBveCA9IDAsIGZsb2F0IG95ID0gMCwgZmxvYXQgb3ogPSAw
ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlKCBmbG9hdCwgZmxvYXQsIGZsb2F0ICk7CiAgICAg
IHZvaWQgbW92ZVVWKCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6ICk7CgogICAgICB2aXJ0dWFs
IHZvaWQgbG9hZFN0YXRlKCk7CiAgICAgIHZpcnR1YWwgdm9pZCBzYXZlU3RhdGUoKTsKCgogICAg
ICB2b2lkIG5vcm1hbGl6ZSgpOwogICAgICB2b2lkIHNldFJvdGF0aW9uKCBRdWF0ICZxICk7CgoK
ICAgICAgVmVjdG9yNCAmZ2V0Tm9ybWFsKCkgeyByZXR1cm4gbm9ybWFsO307CgogICAgICBWZWN0
b3I0ICZnZXRDb2xvcigpIHsgcmV0dXJuIGNvbG9yO307CgogICAgICBib29sIGlzQ29sb3JlZCgp
IHsgcmV0dXJuIG1fY29sb3JlZDsgfTsKICAgICAgdm9pZCBzZXRDb2xvciggZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQgKTsKICAgICAgdm9pZCByZXNldENvbG9yKCk7CgogICAgICB2b2lkIHNl
dE5vcm1hbCggZmxvYXQsIGZsb2F0LCBmbG9hdCApOwogICAgICB2b2lkIHNldEZhY2VVViggVmVj
dG9yNCAmICk7CgoKICAgICAgVmVydGV4ICYgb3BlcmF0b3I9KCBWZXJ0ZXggJnJocyApOwogICAg
ICB2b2lkIGNvcHlGcm9tKCBTdWJPYmplY3QgKiApOwoKICAgICAgVmVydGV4ICogY2xvbmUoKTsK
CiAgICAgIFZlY3RvcjQgZ2V0U21vb3RoUG9zaXRpb24oIGZsb2F0IHRvbGVyYW5jZSApOwoKICAg
ICAgaW50IGdldE1pZHBvaW50KCBpbnQgdjEgKTsKCiAgICAgIHZpcnR1YWwgYm9vbCBpc0RlbGV0
YWJsZSgpOwoKICAgICAgc3RhdGljIGludCBUWVBFOwoKICAgICAgdmlydHVhbCB2b2lkIHNldFBv
c2l0aW9uKCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6ICkgeyBwb3MuYXNzaWduKCB4LCB5LCB6
LCAxICk7fTsKCiAgICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbiggVmVjdG9yNCAmcCApIHsg
cG9zID0gcDsgfTsKCiAgICAgIHZpcnR1YWwgVmVjdG9yNCAmIGdldFBvc2l0aW9uKCkgeyByZXR1
cm4gcG9zO307CgogICAgICB2aXJ0dWFsIHZvaWQgZ2V0VHJhbnNmb3JtZWRQb3NpdGlvbiggVmVj
dG9yNCAqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBnZXRCb3VuZGluZ01pbiggVmVjdG9yNCAqdiAp
OwogICAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm91bmRpbmdNYXgoIFZlY3RvcjQgKnYgKTsKICAgICAg
dm9pZCBnZXRQb3NpdGlvbiggVmVjdG9yNCAqIHYgKSB7ICp2ID0gcG9zOyB9OwoKCgogICBwcm90
ZWN0ZWQ6CiAgICAgIFRleHR1cmVNYXRlcmlhbCAqdG07CgogICAgICBWZWN0b3I0IG5vcm1hbDsK
ICAgICAgVmVjdG9yNCBwb3M7CiAgICAgIFZlY3RvcjQgY29sb3I7CgogICAgICBib29sIG1fY29s
b3JlZDsKCn07CmNsYXNzIE1lc2g7CgpjbGFzcyBFZGdlOwoKY2xhc3MgVmVydGV4OwoKY2xhc3Mg
VVZDb29yZDsKCmNsYXNzIE9iamVjdDsKY2xhc3MgRmFjZSA6IHB1YmxpYyBTdWJPYmplY3QKewog
ICBwdWJsaWM6CgogICAgICBGYWNlKCBPYmplY3QgKm8gPSAwICk7CiAgICAgIHZpcnR1YWwgfkZh
Y2UoKTsKCiAgICAgIHZvaWQgaW5pdCggc3RkOjp2ZWN0b3I8aW50PiAmICk7CgoKICAgICAgdm9p
ZCBzdWJkaXZpZGVFKCBpbnQsIGludCApOwogICAgICB2b2lkIHN1YmRpdmlkZUVWKCBpbnQsIGlu
dCB2ICk7CgoKICAgICAgdm9pZCBleHRydWRlKCBWZWN0b3I0ICZ2ICk7CgoKCgogICAgICB2b2lk
IGV4dHJ1ZGUoKTsKCiAgICAgIHZvaWQgc3ViZGl2aWRlVHJpYW5nbGVzKCk7CgogICAgICBib29s
IGlzT3JpZW50YXRlZCggaW50IHYxLCBpbnQgdjIgKTsKCiAgICAgIGJvb2wgdHJpYW5ndWxhdGUo
KTsKCiAgICAgIHN0ZDo6dmVjdG9yPGludD4gZ2V0RmFjZUFzVHJpcygpOwoKICAgICAgaW50IHNw
bGl0QnlWZXJ0cyggaW50IHYxLCBpbnQgdjIgKTsKCiAgICAgIHZvaWQgbWVyZ2UoIGludCBzMSAp
OwoKICAgICAgYm9vbCByZUVkZ2UoKTsKCiAgICAgIGJvb2wgYWRqYWNlbnRWZXJ0cyggaW50IHYx
LCBpbnQgdjIgKTsKCgogICAgICBWZWN0b3I0IGdldE5vcm1hbCggaW50IGkgPSAwICk7CgoKICAg
ICAgdmlydHVhbCBpbnQgZHJhdyggaW50IGRfb3B0aW9ucyA9IDAgKTsKICAgICAgdm9pZCBkcmF3
RmFjZSggaW50IG1vZGUgKTsKICAgICAgdm9pZCBkcmF3U2VsZWN0ZWRGYWNlKCk7CgogICAgICBp
bnQgZ2V0RWRnZUFmdGVyKCBpbnQgdiApOwogICAgICBpbnQgZ2V0RWRnZUJlZm9yZSggaW50IHYg
KTsKCiAgICAgIFZlY3RvcjQgZ2V0VVZDZW50ZXIoKTsKCiAgICAgIHN0ZDo6dmVjdG9yPGludD4g
KiBnZXRVVnMoKSB7IHJldHVybiAmIHV2bGlzdDt9OwoKICAgICAgdm9pZCBzZXRWZXJ0cyggc3Rk
Ojp2ZWN0b3I8aW50PiAmdiApIHt2bGlzdCA9IHY7fTsKCgogICAgICB2b2lkIGFkZFZlcnRleCgg
aW50IG92MSwgaW50IG92MiwgaW50IG52ICk7CgoKICAgICAgdm9pZCByb3RhdGVPcmRlciggaW50
IGluZGV4ICk7CgoKCiAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlKCBmbG9hdCBhbW91bnQgKTsKICAg
ICAgdmlydHVhbCB2b2lkIG1vdmUoIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHogKSB7U3ViT2Jq
ZWN0Ojptb3ZlKCB4LCB5LCB6ICk7fTsKCiAgICAgIHZvaWQgbm9ybWFsaXplKCk7CgogICAgICBG
YWNlICYgb3BlcmF0b3I9KCBGYWNlICZyaHMgKTsKICAgICAgRmFjZSAqIGNsb25lKCk7CiAgICAg
IHZvaWQgY29weUZyb20oIFN1Yk9iamVjdCAqICk7CgogICAgICB2b2lkIHNldFVWQ29vcmQoIGlu
dCwgVmVjdG9yNCAmICk7CiAgICAgIHZvaWQgc2V0VVZDb29yZCggaW50IGksIGZsb2F0IHUsIGZs
b2F0IHYgKTsKICAgICAgdm9pZCBub3JtYWxpemVVVnMoIGJvb2wgdSA9IGZhbHNlLCBib29sIHYg
PSBmYWxzZSApOwogICAgICB2b2lkIHJldmVyc2UoKTsKCgogICBwdWJsaWM6CiAgICAgIHN0YXRp
YyBib29sIGZpbGxlZDsKICAgICAgc3RhdGljIGludCBUWVBFOwoKICAgcHJvdGVjdGVkOgoKICAg
ICAgYm9vbCB1c2V0ZXN0OwogICAgICBWZWN0b3I0IHRlc3RDb2xvcjsKICAgICAgVmVjdG9yNCBu
b3JtYWw7CgoKfTsKY2xhc3MgRmFjZTsKCmNsYXNzIFZlcnRleDsKCgoKCgoKY2xhc3MgRWRnZSA6
IHB1YmxpYyBTdWJPYmplY3QKewogICBwdWJsaWM6CiAgICAgIEVkZ2UoIE9iamVjdCAqcCApOwog
ICAgICBFZGdlKCBpbnQgdjEsIGludCB2MiwgT2JqZWN0ICpwICk7CiAgICAgIH5FZGdlKCk7Cgog
ICAgICBpbnQgZHJhdyggaW50IGRfb3B0aW9ucyA9IDAgKTsKICAgICAgdm9pZCBpbml0KCk7Cgog
ICAgICBWZWN0b3I0IGdldE5vcm1hbCgpOwogICAgICBWZWN0b3I0IGdldFVWQ2VudGVyKCk7Cgog
ICAgICBpbnQgZGl2aWRlRWRnZSgpOwogICAgICBpbnQgZ2V0TWlkcG9pbnQoKTsKCiAgICAgIEVk
Z2UgJiBvcGVyYXRvcj0oIEVkZ2UgJnJocyApOwogICAgICBib29sIG9wZXJhdG9yPT0oIEVkZ2Ug
JnJocyApOwogICAgICBFZGdlICogY2xvbmUoKTsKICAgICAgdm9pZCBjb3B5RnJvbSggU3ViT2Jq
ZWN0ICogKTsKCiAgICAgIGJvb2wgaXNIYXJkKCkgeyByZXR1cm4gbV9oYXJkOyB9OwoKICAgICAg
dm9pZCBzZXRIYXJkKCBib29sIHMgKSB7IG1faGFyZCA9IHM7IH07CgogICAgICB2b2lkIHRvZ2ds
ZUhhcmRuZXNzKCkgeyBtX2hhcmQgPSAhbV9oYXJkOyB9OwoKICAgICAgc3RhdGljIGludCBUWVBF
OwoKICAgcHJpdmF0ZToKICAgICAgaW50IHRfdjE7CiAgICAgIGludCB0X3YyOwogICAgICBib29s
IG1faGFyZDsKfTsKCgoKCgpjbGFzcyBUZXN0RGF0YTEgOiBwdWJsaWMgSURhdGEKewogICBwdWJs
aWM6CiAgICAgIFRlc3REYXRhMSgpIDogSURhdGEoICJUZXN0RGF0YTEiICkgeyBteV9zdHJpbmcg
PSAiSGVyZSBpcyBteSBkYXRhXG5IZWFyIG1lIHJvYXIhXG4iOyB9OwoKICAgICAgc3RkOjpzdHJp
bmcgdG9TdHJpbmcoKSB7IHJldHVybiBteV9zdHJpbmc7IH07CgogICAgICB2b2lkIGluaXQoIHN0
ZDo6c3RyaW5nIHMgKSB7IG15X3N0cmluZyA9IHM7IH07CgogICAgICBJRGF0YSAqIGNsb25lKCkg
eyByZXR1cm4gbmV3IFRlc3REYXRhMSgpOyB9OwoKICAgICAgc3RkOjpzdHJpbmcgbXlfc3RyaW5n
OwoKICAgICAgc3RhdGljIGludCBUWVBFOwp9OwoKY2xhc3MgVGVzdERhdGEyIDogcHVibGljIElE
YXRhCnsKICAgcHVibGljOgogICAgICBUZXN0RGF0YTIoKSA6IElEYXRhKCAiR2FtZURhdGEiICkg
eyBteV9zdHJpbmcgPSAiaj0xXG5pPTJcbm5hbWU9c211cmZcbnRlc3Q9b2ZmXG5qYW1lcz0xXG5u
ZXR3b3JrID0gb2ZmXG4iOyB9OwoKICAgICAgc3RkOjpzdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVy
biBteV9zdHJpbmc7IH07CgogICAgICB2b2lkIGluaXQoIHN0ZDo6c3RyaW5nIHMgKSB7IG15X3N0
cmluZyA9IHM7IH07CgogICAgICBJRGF0YSAqIGNsb25lKCkgeyByZXR1cm4gbmV3IFRlc3REYXRh
MigpOyB9OwoKICAgICAgc3RkOjpzdHJpbmcgbXlfc3RyaW5nOwoKICAgICAgc3RhdGljIGludCBU
WVBFOwp9OwoKaW50IFRlc3REYXRhMjo6VFlQRSA9IElEYXRhOjpyZWdpc3RlckRhdGEoIG5ldyBU
ZXN0RGF0YTIoKSApOwppbnQgVGVzdERhdGExOjpUWVBFID0gSURhdGE6OnJlZ2lzdGVyRGF0YSgg
bmV3IFRlc3REYXRhMSgpICk7CgoKQ3ViZTo6Q3ViZSggZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eiwgaW50IHcsIGludCBoLCBpbnQgZCApCiAgICAgIDogTWVzaCggeCwgeSwgeiApCnsKCgogICB3
Kys7CiAgIGgrKzsKICAgZCsrOwoKCiAgIFZlcnRleCAqZnJvbnRbIHcgXVsgaCBdOwogICBWZXJ0
ZXggKmJhY2tbIHcgXVsgaCBdOwogICBWZXJ0ZXggKmxlZnRbIGQgXVsgaCBdOwogICBWZXJ0ZXgg
KnJpZ2h0WyBkIF1bIGggXTsKICAgVmVydGV4ICp0b3BbIHcgXVsgZCBdOwogICBWZXJ0ZXggKmJv
dHRvbVsgdyBdWyBkIF07CgoKICAgZm9yICggaW50IGkgPSAwOyBpIDwgdzsgaSsrICkKICAgewog
ICAgICBmb3IgKCBpbnQgaiA9IDA7IGogPCBoOyBqKysgKQogICAgICB7CiAgICAgICAgIFZlcnRl
eCAqdiA9IGNyZWF0ZVZlcnRleCggaSwgaiwgZCAtIDEgKTsKICAgICAgICAgZnJvbnRbIGkgXVsg
aiBdID0gdjsKICAgICAgfQogICB9CgoKICAgZm9yICggaW50IGkgPSAwOyBpIDwgdzsgaSsrICkK
ICAgewogICAgICBmb3IgKCBpbnQgaiA9IDA7IGogPCBoOyBqKysgKQogICAgICB7CiAgICAgICAg
IFZlcnRleCAqdiA9IGNyZWF0ZVZlcnRleCggaSwgaiwgMCApOwogICAgICAgICBiYWNrWyBpIF1b
IGogXSA9IHY7CiAgICAgIH0KICAgfQoKCiAgIGZvciAoIGludCBqID0gMDsgaiA8IGg7IGorKyAp
CiAgIHsKICAgICAgbGVmdFsgMCBdWyBqIF0gPSBiYWNrWyAwIF1bIGogXTsKICAgICAgbGVmdFsg
ZCAtIDEgXVsgaiBdID0gZnJvbnRbIDAgXVsgaiBdOwogICB9CgogICBmb3IgKCBpbnQgaSA9IDE7
IGkgPCBkIC0gMTsgaSsrICkKICAgewogICAgICBmb3IgKCBpbnQgaiA9IDA7IGogPCBoOyBqKysg
KQogICAgICB7CiAgICAgICAgIFZlcnRleCAqdiA9IGNyZWF0ZVZlcnRleCggMCwgaiwgaSApOwog
ICAgICAgICBsZWZ0WyBpIF1bIGogXSA9IHY7CiAgICAgIH0KICAgfQoKCiAgIGZvciAoIGludCBq
ID0gMDsgaiA8IGg7IGorKyApCiAgIHsKICAgICAgcmlnaHRbIDAgXVsgaiBdID0gYmFja1sgdyAt
IDEgXVsgaiBdOwogICAgICByaWdodFsgZCAtIDEgXVsgaiBdID0gZnJvbnRbIHcgLSAxIF1bIGog
XTsKICAgfQoKICAgZm9yICggaW50IGkgPSAxOyBpIDwgZCAtIDE7IGkrKyApCiAgIHsKICAgICAg
Zm9yICggaW50IGogPSAwOyBqIDwgaDsgaisrICkKICAgICAgewogICAgICAgICBWZXJ0ZXggKnYg
PSBjcmVhdGVWZXJ0ZXgoIHcgLSAxLCBqLCBpICk7CiAgICAgICAgIHJpZ2h0WyBpIF1bIGogXSA9
IHY7CiAgICAgIH0KICAgfQoKCiAgIGZvciAoIGludCBqID0gMDsgaiA8IGQ7IGorKyApCiAgIHsK
ICAgICAgdG9wWyAwIF1bIGogXSA9IGxlZnRbIGogXVsgaCAtIDEgXTsKICAgICAgdG9wWyB3IC0g
MSBdWyBqIF0gPSByaWdodFsgaiBdWyBoIC0gMSBdOwogICB9CgogICBmb3IgKCBpbnQgaSA9IDA7
IGkgPCB3OyBpKysgKQogICB7CiAgICAgIHRvcFsgaSBdWyAwIF0gPSBiYWNrWyBpIF1bIGggLSAx
IF07CiAgICAgIHRvcFsgaSBdWyBkIC0gMSBdID0gZnJvbnRbIGkgXVsgaCAtIDEgXTsKICAgfQoK
CiAgIGZvciAoIGludCBpID0gMTsgaSA8IHcgLSAxOyBpKysgKQogICB7CiAgICAgIGZvciAoIGlu
dCBqID0gMTsgaiA8IGQgLSAxOyBqKysgKQogICAgICB7CiAgICAgICAgIFZlcnRleCAqdiA9IGNy
ZWF0ZVZlcnRleCggaSwgaCAtIDEsIGogKTsKICAgICAgICAgdG9wWyBpIF1bIGogXSA9IHY7CiAg
ICAgIH0KICAgfQoKCiAgIGZvciAoIGludCBqID0gMDsgaiA8IGQ7IGorKyApCiAgIHsKICAgICAg
Ym90dG9tWyAwIF1bIGogXSA9IGxlZnRbIGogXVsgMCBdOwogICAgICBib3R0b21bIHcgLSAxIF1b
IGogXSA9IHJpZ2h0WyBqIF1bIDAgXTsKICAgfQoKICAgZm9yICggaW50IGkgPSAwOyBpIDwgdzsg
aSsrICkKICAgewogICAgICBib3R0b21bIGkgXVsgMCBdID0gYmFja1sgaSBdWyAwIF07CiAgICAg
IGJvdHRvbVsgaSBdWyBkIC0gMSBdID0gZnJvbnRbIGkgXVsgMCBdOwogICB9CgogICBmb3IgKCBp
bnQgaSA9IDE7IGkgPCB3IC0gMTsgaSsrICkKICAgewogICAgICBmb3IgKCBpbnQgaiA9IDE7IGog
PCBkIC0gMTsgaisrICkKICAgICAgewogICAgICAgICBWZXJ0ZXggKnYgPSBjcmVhdGVWZXJ0ZXgo
IGksIDAsIGogKTsKICAgICAgICAgYm90dG9tWyBpIF1bIGogXSA9IHY7CiAgICAgIH0KICAgfQoK
CgogICBmb3IgKCBpbnQgaSA9IDA7IGkgPCB3IC0gMTsgaSsrICkKICAgewogICAgICBmb3IgKCBp
bnQgaiA9IDA7IGogPCBoIC0gMTsgaisrICkKICAgICAgewogICAgICAgICBjcmVhdGVGYWNlKCBm
cm9udFsgaSBdWyBqIF0gLT5nZXRQYXJlbnRJbmRleCgpLCBmcm9udFsgaSArIDEgXVsgaiBdIC0+
Z2V0UGFyZW50SW5kZXgoKSwKICAgICAgICAgICAgICAgICAgICAgZnJvbnRbIGkgKyAxIF1bIGog
KyAxIF0gLT5nZXRQYXJlbnRJbmRleCgpLCBmcm9udFsgaSBdWyBqICsgMSBdIC0+Z2V0UGFyZW50
SW5kZXgoKSApOwogICAgICB9CiAgIH0KCgogICBmb3IgKCBpbnQgaSA9IDA7IGkgPCB3IC0gMTsg
aSsrICkKICAgewogICAgICBmb3IgKCBpbnQgaiA9IDA7IGogPCBoIC0gMTsgaisrICkKICAgICAg
ewogICAgICAgICBjcmVhdGVGYWNlKCBiYWNrWyBpICsgMSBdWyBqIF0gLT5nZXRQYXJlbnRJbmRl
eCgpLCBiYWNrWyBpIF1bIGogXSAtPmdldFBhcmVudEluZGV4KCksCiAgICAgICAgICAgICAgICAg
ICAgIGJhY2tbIGkgXVsgaiArIDEgXSAtPmdldFBhcmVudEluZGV4KCksIGJhY2tbIGkgKyAxIF1b
IGogKyAxIF0gLT5nZXRQYXJlbnRJbmRleCgpICk7CiAgICAgIH0KICAgfQoKCiAgIGZvciAoIGlu
dCBpID0gMDsgaSA8IGQgLSAxOyBpKysgKQogICB7CiAgICAgIGZvciAoIGludCBqID0gMDsgaiA8
IGggLSAxOyBqKysgKQogICAgICB7CiAgICAgICAgIGNyZWF0ZUZhY2UoIGxlZnRbIGkgXVsgaiBd
IC0+Z2V0UGFyZW50SW5kZXgoKSwgbGVmdFsgaSArIDEgXVsgaiBdIC0+Z2V0UGFyZW50SW5kZXgo
KSwKICAgICAgICAgICAgICAgICAgICAgbGVmdFsgaSArIDEgXVsgaiArIDEgXSAtPmdldFBhcmVu
dEluZGV4KCksIGxlZnRbIGkgXVsgaiArIDEgXSAtPmdldFBhcmVudEluZGV4KCkgKTsKICAgICAg
fQogICB9CgoKICAgZm9yICggaW50IGkgPSAwOyBpIDwgZCAtIDE7IGkrKyApCiAgIHsKICAgICAg
Zm9yICggaW50IGogPSAwOyBqIDwgaCAtIDE7IGorKyApCiAgICAgIHsKICAgICAgICAgY3JlYXRl
RmFjZSggcmlnaHRbIGkgKyAxIF1bIGogXSAtPmdldFBhcmVudEluZGV4KCksIHJpZ2h0WyBpIF1b
IGogXSAtPmdldFBhcmVudEluZGV4KCksCiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0WyBpIF1b
IGogKyAxIF0gLT5nZXRQYXJlbnRJbmRleCgpLCByaWdodFsgaSArIDEgXVsgaiArIDEgXSAtPmdl
dFBhcmVudEluZGV4KCkgKTsKICAgICAgfQogICB9CgoKICAgZm9yICggaW50IGkgPSAwOyBpIDwg
dyAtIDE7IGkrKyApCiAgIHsKICAgICAgZm9yICggaW50IGogPSAwOyBqIDwgZCAtIDE7IGorKyAp
CiAgICAgIHsKICAgICAgICAgY3JlYXRlRmFjZSggdG9wWyBpICsgMSBdWyBqIF0gLT5nZXRQYXJl
bnRJbmRleCgpLCB0b3BbIGkgXVsgaiBdIC0+Z2V0UGFyZW50SW5kZXgoKSwKICAgICAgICAgICAg
ICAgICAgICAgdG9wWyBpIF1bIGogKyAxIF0gLT5nZXRQYXJlbnRJbmRleCgpLCB0b3BbIGkgKyAx
IF1bIGogKyAxIF0gLT5nZXRQYXJlbnRJbmRleCgpICk7CiAgICAgIH0KICAgfQoKCiAgIGZvciAo
IGludCBpID0gMDsgaSA8IHcgLSAxOyBpKysgKQogICB7CiAgICAgIGZvciAoIGludCBqID0gMDsg
aiA8IGQgLSAxOyBqKysgKQogICAgICB7CiAgICAgICAgIGNyZWF0ZUZhY2UoIGJvdHRvbVsgaSBd
WyBqIF0gLT5nZXRQYXJlbnRJbmRleCgpLCBib3R0b21bIGkgKyAxIF1bIGogXSAtPmdldFBhcmVu
dEluZGV4KCksCiAgICAgICAgICAgICAgICAgICAgIGJvdHRvbVsgaSArIDEgXVsgaiArIDEgXSAt
PmdldFBhcmVudEluZGV4KCksIGJvdHRvbVsgaSBdWyBqICsgMSBdIC0+Z2V0UGFyZW50SW5kZXgo
KSApOwogICAgICB9CiAgIH0KCiAgIGZvciAoIGludCBpID0gMDsgaSA8ICggaW50ICkgdmVydHMu
c2l6ZSgpOyBpKysgKQogICAgICB2ZXJ0c1sgaSBdIC0+bW92ZSggLSggZmxvYXQgKSAoIHcgLSAx
ICkgLyAyLCAtKCBmbG9hdCApICggaCAtIDEgKSAvIDIsIC0oIGZsb2F0ICkgKCBkIC0gMSApIC8g
MiApOwoKCiAgIG5vcm1hbGl6ZSgpOwoKICAgSURhdGEgKm15ZCA9IG5ldyBUZXN0RGF0YTEoKTsK
CiAgIHB1dERhdGEoIG15ZCAtPiBnZXRUYWcoKSwgbXlkICk7CgogICBteWQgPSBuZXcgVGVzdERh
dGEyKCk7CgogICBwdXREYXRhKCBteWQgLT4gZ2V0VGFnKCksIG15ZCApOwoKfQoKQ3ViZTo6fkN1
YmUoKQp7fQo=


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

end of thread, other threads:[~2002-10-09 23:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-09 16:06 middle-end/6994: ICE in find_function_data Janis Johnson
  -- strict thread matches above, loose matches on Subject: below --
2002-06-13 22:49 Reichelt
2002-06-12  6:46 Reichelt
2002-06-11  8:26 schwab

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).