This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/9464: ICE on missing typename


>Number:         9464
>Category:       c++
>Synopsis:       ICE on missing typename
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 27 19:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Jeffrey D. Oldham
>Release:        head
>Organization:
>Environment:
Red Hat Linux release 7.2 (Enigma)
i686-pc-linux-gnu)
>Description:
ICE on code that is missing a 'typename'.  Inclding the 'typename' obviates the problem.

The program is small:

// Compiling this program causes an internal_compilation_error.  The
// program is missing a 'typename'.  Compiling with '-DAVOID_ERROR'
// causes the missing 'typename' to be included and the compilation
// succeeds.

#include <vector>

template<class T>
struct CreateLeaf {};

template<class T>
struct CreateLeaf<std::vector<T> >
{
#ifdef AVOID_ERROR
  typedef typename std::vector<T>::const_iterator Leaf_t;
#else // erroneous
  typedef std::vector<T>::const_iterator Leaf_t;
#endif // AVOID_ERROR
};
>How-To-Repeat:
/home/oldham/gcc-install/gcc1/lib/gcc-lib/i686-pc-linux-gnu/3.4/cc1plus -fpreprocessed goo.ii -quiet -dumpbase goo.C -auxbase goo -Wall -pedantic -version -o goo.s
>Fix:

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

IyAxICJnb28uQyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgImdv
by5DIgoKCgoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysv
My40L3ZlY3RvciIgMSAzCiMgNjUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1
ZGUvYysrLzMuNC92ZWN0b3IiIDMKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv
aW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lL29sZGhh
bS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK
IyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5j
bHVkZS9jKysvMy40L3ZlY3RvciIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj
YzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY0ICIvaG9tZS9v
bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWUvb2xkaGFt
L2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMv
YysrY29uZmlnLmgiIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM5ICIv
aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzIDQKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL2NkZWZzLmgiIDEgMyA0CiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz
IDQKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv
Z251L3N0dWJzLmgiIDEgMyA0CiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzIDQK
IyA0MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYt
cGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
Y29uZmlnLmgiIDIgMwojIDY1ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1p
bnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2NzdHJpbmciIDEgMwojIDQ4ICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY3N0cmluZyIgMwoKIyAxICIvaG9t
ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY3N0ZGRlZiIgMSAzCiMg
NDcgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jc3RkZGVm
IiAzCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE1MSAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjEzICIvaG9tZS9v
bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv
aW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2NzdGRkZWYiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7
Cn0KIyA1MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Nz
dHJpbmciIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMjggIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKIyAxICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCgpl
eHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQg
Kl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1j
Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f
c3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwg
X19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19z
LCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBp
bnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9p
ZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0
cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzIDQKIyAy
OCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0
cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVu
c2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2Vy
OwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4
ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNo
YXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gY2hh
ciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpf
X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0
ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChf
X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25z
dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFy
ICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5
c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJv
dyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVt
bWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVs
ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2
b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19z
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qg
c3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVy
cm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAo
aW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
CmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBf
X2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNo
YXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGlu
dCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBf
bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0
cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl
bGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBj
cHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFy
ICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJv
YiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJh
c2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2NCAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzIDQKfQojIDUyICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj
MS9pbmNsdWRlL2MrKy8zLjQvY3N0cmluZyIgMiAzCiMgNzcgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz
aW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2lu
ZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5n
IDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6
OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6
OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0
cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZv
aWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBt
ZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5n
IDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikK
ICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEp
LCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhj
aGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJr
KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJj
aHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJl
dHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19u
KTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9f
czEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9j
YXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDY2ICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2NsaW1pdHMi
IDEgMwojIDQ4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
Y2xpbWl0cyIgMwoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2hv
bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My40L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n
Y2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAxIDMgNAoKCgoKCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDEyMiAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy40L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg
MSAzIDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgx
X2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzIDQKIyAz
NiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9s
aW51eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDIgMyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMyA0CiMgMTQ1
ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMgNAojIDM0ICIvdXNyL2lu
Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9f
bGltLmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMgNAoj
IDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEyMyAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUv
bGltaXRzLmgiIDIgMyA0CiMgOCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMg
MTIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDUwICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2xpbWl0cyIgMiAzCiMgNjcgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
Y3N0ZGxpYiIgMSAzCiMgNDggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv
YysrLzMuNC9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQK
IyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKZXh0ZXJuICJD
IiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMyA0CiMgNDMg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0
c3RhdHVzLmgiIDEgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMyA0
CiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMgNAojIDM3ICIvdXNyL2luY2x1ZGUvZW5k
aWFuLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMgNAojIDM4ICIv
dXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMyA0CiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRz
dGF0dXMuaCIgMiAzIDQKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1
Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1
bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRj
b2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVy
bWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv
cHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2ln
bmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0
CnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7
CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJl
bTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAg
bG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90Owoj
IDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dl
dF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9f
bnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0
cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0
IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg
KCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo
cm93ICgpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGxvbmcgaW50
IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9m
X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4
dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAzODQgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CmV4dGVy
biAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMgNAojIDI5ICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAzIDQKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwv
Z2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKCgp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xv
bmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVh
ZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4
X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0
IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5
cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMy
X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90
OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90
OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2
X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlw
ZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYg
X191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1
YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90
Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRf
dDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9f
dmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNo
YXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlw
ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBl
ZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90
OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf
X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s
b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5
cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90
IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzIDQKIyA2OCAi
L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMyA0CnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewog
ICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo
cmVhZHR5cGVzLmgiIDIgMyA0CgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGlu
dCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19w
dGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7
CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hl
ZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRy
X3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVh
ZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg
X19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2Ny
IF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9f
bV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211
dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29u
Y2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0
aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRf
ZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAg
X3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50
IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsK
CgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0
cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9y
ZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGlu
ZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJl
ZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAojIDMx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVkZWYgX191X2NoYXIgdV9j
aGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5
cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYg
X19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYg
X19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVm
IF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYg
X19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRl
ZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRl
ZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEg
MyA0CiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fY2xvY2tfdCBjbG9j
a190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX3RpbWVfdCB0aW1l
X3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fY2xvY2tpZF90IGNs
b2NraWRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5cGVkZWYgX190aW1lcl90
IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVk
ZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNl
Y29uZHNfdDsKCgoKCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBl
ZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVk
ZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk
ZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdp
c3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE1ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0CiMgMjMgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzIDQKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0
IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMg
MzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKCnR5cGVkZWYgX19zaWdzZXRf
dCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMTA2ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3Qg
dHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMg
NjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1ldmFsCiAgewogICAg
X190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYgc3Ry
dWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19m
ZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21h
c2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gIkMiIHsKCgoK
CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl
YWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK
ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJp
Y3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dy
aXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk
cywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3Qg
X190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJp
Y3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMgNAojIDIx
OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoKdHlwZWRlZiBfX2Jsa3NpemVf
dCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRl
ZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxj
bnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgX19ibGtj
bnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0
eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzkxICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRo
cm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNo
YXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVu
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0
aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7
CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBl
OwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0
cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVk
LCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0
YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4g
dm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91
YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJh
bmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDgg
KHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50
IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAo
dW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxj
b25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1
Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
bnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz
dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9f
c2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cg
KCk7CiMgNTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gdm9pZCAqbWFsbG9j
IChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
ZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAq
cmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1
ZGUvYWxsb2NhLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2Nh
IChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMyA0CgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9t
ZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3Np
emUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJu
IHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv
aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
ZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo
Y2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjIz
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190
ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRl
cm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUwICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1w
bGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2Nv
bW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFt
ZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MiAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNv
bHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29u
c3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBh
cmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tl
eSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2
b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAog
ICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQg
YWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVy
biBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxv
bmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2
IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxk
aXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBj
aGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFm
Y3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAg
ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hh
cl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdj
c3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0
aHJvdyAoKTsKIyA4MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgZ2V0
c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk
IHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBn
cmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBf
X2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNp
emVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQg
X19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwv
Z2NjMS9pbmNsdWRlL2MrKy8zLjQvY3N0ZGxpYiIgMiAzCiMgODQgIi9ob21lL29sZGhhbS9nY2Mt
aW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNp
bmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRv
aTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwog
IHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpn
ZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsK
ICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAg
dXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5n
IDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpz
dHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3
Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7
IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxk
aXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu
Y2x1ZGUvYysrLzMuNC9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6
bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcg
bG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9u
ZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAt
X194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBf
X2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24g
JSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcg
X19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19k
OyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAg
dXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAg
dXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Omxs
ZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsK
ICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5n
IF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2du
dV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVf
Y3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL2hvbWUv
b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMwoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z
LjQvbmV3IiAxIDMKIyA0MiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9j
KysvMy40L25ldyIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv
YysrLzMuNC9leGNlcHRpb24iIDEgMwojIDQwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj
MS9pbmNsdWRlL2MrKy8zLjQvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ug
c3RkCnsKIyA1MiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40
L2V4Y2VwdGlvbiIgMwogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRp
b24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAg
dmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNz
IGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9l
eGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhy
b3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0
eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRs
ZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVy
bWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9o
YW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZv
aWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAxMDAgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9leGNlcHRpb24iIDMK
ICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9j
eHgKewojIDExNSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40
L2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9
CiMgNDMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9uZXci
IDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCiAgY2xhc3MgYmFkX2Fs
bG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJv
dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVj
dCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5
cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRs
ZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA4MiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxs
L2djYzEvaW5jbHVkZS9jKysvMy40L25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl
X3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6
ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikg
dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3Bl
cmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv
aWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRo
cm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJv
d190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2
b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBu
ZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlu
bGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQppbmxp
bmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9Cgp9CiMg
NzAgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvaW9zZndkIiAxIDMKIyA0NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj
YzEvaW5jbHVkZS9jKysvMy40L2lvc2Z3ZCIgMwoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxl
LmgiIDEgMwojIDQwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z
LjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwoKIyAxICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2xvY2FsZSIgMSAzCiMgNDggIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jbG9jYWxlIiAzCgoj
IDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2Fs
ZS5oIiAzIDQKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9p
bmNsdWRlL2xvY2FsZS5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAx
IDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMyA0CmVudW0KewogIF9fTENf
Q1RZUEUgPSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NP
TExBVEUgPSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9f
TENfQUxMID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQURE
UkVTUyA9IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEs
CiAgX19MQ19JREVOVElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUu
aCIgMiAzIDQKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNApz
dHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNf
c2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7
CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNo
YXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3Np
dGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7
CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2Vw
X2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7
CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBp
bnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50
X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIg
aW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAzIDQKfTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0
ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3Qg
bGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xv
Y2FsZS5oIiAzIDQKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5
X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9f
ZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk
IF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Nsb2NhbGUiIDIg
MwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2Nh
bGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgNDIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs
bC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNs
dWRlL2xhbmdpbmZvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMgNAoj
IDMxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMyA0CmV4dGVybiAiQyIgewoKCnR5cGVkZWYg
dm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoKCmV4dGVybiBubF9jYXRkIGNh
dG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9fZmxhZykgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0LCBpbnQg
X19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0YWxvZykgdGhyb3cg
KCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMgNAoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi
IDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQK
ZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJE
QVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAg
QUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZ
XzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1P
Tl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBB
Qk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEy
LAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAg
TU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzEx
LAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1U
LAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBF
UkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoK
ICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9O
TF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlf
NCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9O
TF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05M
X1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAg
X05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1P
Tl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9O
TF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1P
Tl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9X
TU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dN
T05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9X
TU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAog
IF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJB
X1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0Rf
VF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJ
TUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNU
X1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNU
SU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1U
LAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xM
QVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFU
RV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1C
LAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxf
Q09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBf
TkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRF
X0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hB
U0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1C
X0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFX
QywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05M
X0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVf
VE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZ
UEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZ
UEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVf
Q0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAg
X05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VU
ID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxf
Q1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01B
UF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJ
VFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9N
QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAg
X05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9D
VFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVf
SU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lO
RElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dD
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBf
TkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NU
WVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9P
VVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElH
SVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9N
QiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAg
X05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9D
VFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVf
T1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJ
R0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZf
V0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAog
IF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAog
IF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9U
QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9f
VEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQ
RV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9M
RU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEs
CiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxf
Q1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9F
WFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01B
UF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAog
IF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxf
Q1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9M
Q19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAx
NikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9J
TlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBf
X1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElH
SVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9T
RVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0Us
CgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFS
WV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9T
UEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNF
LAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9O
TF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVO
Q1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05F
VEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAog
IF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NT
X1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVU
QVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9C
WV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05F
VEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BP
U04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lO
VF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxf
TU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBf
TkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywK
ICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BP
SU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9D
T0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgo
X19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9Q
T0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAs
CgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxf
TlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05V
TV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAo
MCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVT
U0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hU
ID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05M
X1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQg
PSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05M
X05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1Ms
CiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFN
RSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwg
KDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9Q
T1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIz
LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAog
IF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05M
X0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1Nf
TEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgog
IF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwg
KDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NF
TEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VU
LAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQg
PSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9D
T0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9U
SVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5U
SUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURF
TlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lE
RU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElG
SUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9J
REVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04s
CiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05f
UkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9O
X0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURF
TlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8u
aCIgMyA0CmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgp
OwojIDU4NiAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNApleHRlcm4gY2hhciAqX19ubF9s
YW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9CiMgNDMgIi9ob21l
L29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMSAzIDQK
IyAyNCAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzIDQKCgpleHRlcm4gIkMi
IHsKCgp0eXBlZGVmIHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVu
IChfX2NvbnN0IGNoYXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAg
dGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipf
X3Jlc3RyaWN0IF9faW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj
dCBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X291dGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0
ZXNsZWZ0KTsKCgpleHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgp
OwoKfQojIDQ0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xpYmludGwuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMyA0CmV4dGVy
biAiQyIgewoKCgoKZXh0ZXJuIGNoYXIgKmdldHRleHQgKF9fY29uc3QgY2hhciAqX19tc2dpZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpkZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFp
bm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
Kl9fZGdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9f
bXNnaWQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkp
OwoKCgpleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkLCBpbnQgX19jYXRl
Z29yeSkgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoX19jb25zdCBjaGFyICpf
X2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21z
Z2lkLCBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfYXJnX18gKDIpKSk7CgoKCgpleHRlcm4gY2hhciAqbmdldHRleHQgKF9fY29uc3QgY2hhciAq
X19tc2dpZDEsIF9fY29uc3QgY2hhciAqX19tc2dpZDIsCiAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv
cm1hdF9hcmdfXyAoMSkpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoK
CmV4dGVybiBjaGFyICpkbmdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2Nv
bnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdf
XyAoMykpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21h
aW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAo
MykpKTsKCgoKCgpleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFp
bm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKF9fY29uc3Qg
Y2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19kaXJuYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFp
bl9jb2Rlc2V0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fY29kZXNldCkgdGhyb3cgKCk7CiMg
MTE1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzIDQKfQojIDQ1ICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKyts
b2NhbGUuaCIgMiAzCiMgNTcgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv
YysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAzCm5hbWVzcGFjZSBz
dGQKewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25z
dCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKCgoKCgogICAgICAgICAgICAgICAgICAg
ICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAg
ICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKTsKICAgICAgY2hhciog
X19zYXYgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29sZCkgKyAxKSk7CiAg
ICAgIGlmIChfX3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgICAgc2V0bG9j
YWxlKF9fTENfQUxMLCAiQyIpOwoKCiAgICAgIGludCBfX3JldDsKCiAgICAgIGlmIChfX3ByZWMg
Pj0gMCkKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3By
ZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3Np
emUsIF9fZm10LCBfX3YpOwojIDk4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwogICAgICBz
ZXRsb2NhbGUoX19MQ19BTEwsIF9fc2F2KTsKICAgICAgZnJlZShfX3Nhdik7CgogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5j
bHVkZS9jKysvMy40L2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj
YzEvaW5jbHVkZS9jKysvMy40L2NjdHlwZSIgMSAzCiMgNDcgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jY3R5cGUiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiAiQyIg
ewojIDQ3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmVudW0KewogIF9JU3VwcGVyID0gKCgw
KSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dl
ciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAg
X0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4g
OCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAo
MykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDog
KCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8
PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8
ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/
ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4
KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRy
bCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAg
X0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkg
Pj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgx
IDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVy
biBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBf
X2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0
eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIGludCBp
c2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChp
bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFj
ZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBp
c2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19j
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAzIDQKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93
ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp
OwojIDI3NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAp9CiMgNTAgIi9ob21lL29sZGhhbS9n
Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jY3R5cGUiIDIgMwojIDY2ICIvaG9tZS9v
bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2N0eXBlIiAzCm5hbWVzcGFj
ZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjpp
c2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjpp
c2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjpp
c3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6
dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQz
ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdHJp
bmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+
CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVj
dCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh
bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHRlbXBsYXRlPD4g
c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBz
dHJpbmc7CgoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCiAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKCn0KIyA0OSAiL2hvbWUvb2xkaGFt
L2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUv
b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnBvcy5oIiAxIDMK
IyA0MyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv
ZnBvcy5oIiAzCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr
LzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytpby5oIiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9j
KysvMy40L2NzdGRpbyIgMSAzCiMgNDggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu
Y2x1ZGUvYysrLzMuNC9jc3RkaW8iIDMKCgoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxs
L2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIg
MSAzIDQKIyAzOSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgoj
IDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ0ICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9z
dGRpby5oIiAyIDMgNAojIDU0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBz
dHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5
cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8u
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiMgMTQg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgMzU0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5z
aWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMgNAoj
IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAxIDMgNAojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CiMgMSAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMiAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBj
aGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9z
OwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAg
X19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMg
NDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MiAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgoKIyAxICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgoK
CgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9O
T0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9G
VUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRF
X0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFM
X0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05W
X0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25l
ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBz
aXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh
ciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBl
ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50
ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFy
ICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK
Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBj
aGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoK
c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNf
ZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBf
X2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBz
dHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9f
Y29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21f
bmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZf
aW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGlu
dCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWlu
X25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7Cgog
IHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25l
ZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQg
X19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJu
YWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK
CgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0
cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9z
dGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f
ZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg
MyA0CnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QK
ICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVw
X2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQg
X0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBp
bnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyA1
MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs
bC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGFyZy5o
IiAxIDMgNAojIDQzICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWls
dGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAy
IDMgNAojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApzdHJ1Y3QgX0lPX2p1bXBfdDsg
c3RydWN0IF9JT19GSUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVm
IHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19t
YXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMg
MTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0Cn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0
CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9y
LAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAo
Kl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2
dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3Qg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2No
YXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j
b2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwg
Y2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3Ry
dWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoq
KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7
CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQg
Kik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBf
X21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkg
KHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252
X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19y
ZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFz
ZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwog
IHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFy
X3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9J
T19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBf
SU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2Rl
Y3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1w
X3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoK
CgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lP
X3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRy
OwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9J
T19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFz
ZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsK
CiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6
ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u
OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgog
IF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAogIF9f
b2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3RydWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1
Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91
bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoK
CnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y
XzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpl
eHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQg
Kl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9f
YnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoK
CnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19w
b3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2ll
KTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVk
ZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3Nl
ZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tp
ZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJl
YWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9f
Y2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lP
X2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lP
X2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19j
b29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zu
cyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193
dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChf
SU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMgNApleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19m
ZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xv
Y2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9j
a2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19G
SUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApleHRlcm4g
aW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jl
c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jl
c3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jl
c3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9f
RklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRu
IChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90
IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQp
IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICop
IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhy
b3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQg
X19tb2RlKSB0aHJvdyAoKTsKIyA1MDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJu
IGludCBfSU9fdmZ3c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAq
IF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50
ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklM
RSAqX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lP
X3dwYWRuIChfSU9fRklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2
b2lkIF9JT19mcmVlX3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3
NSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp
c3QgX19ub3RfdmFfbGlzdF9fOwojIDg5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlw
ZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsK
IyAxMzggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3N0ZGlvX2xpbS5oIiAxIDMgNAojIDEzOSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQK
CgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAq
c3RkZXJyOwojIDE1MyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgcmVt
b3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5h
bWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OSAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu
Y2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgp
OwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
Y2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg5ICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk
ZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIs
IF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUg
KmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAg
ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzMgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVu
NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j
b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9j
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNl
dHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
CiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUp
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwK
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2
cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsK
CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4
bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50
ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Ys
CiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJu
IGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJu
IGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBp
bnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50
IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg
MykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAog
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
IHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f
YXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18s
IDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50
IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBf
X2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChp
bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxv
Y2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMg
NDM3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRl
bGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGlu
dCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIg
KipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25z
dCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg
X19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2Nr
ZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxv
bmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0
ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1MDAgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApl
eHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3do
ZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZz
ZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwoj
IDUzNCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJ
TEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4
dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jl
c3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAq
X19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv
aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29u
c3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3Qg
Y2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0
IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy
ICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlk
IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBv
YnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFj
ayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxv
Y2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tm
aWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs
bC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgi
IDMgNAp9CiMgNTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMu
NC9jc3RkaW8iIDIgMwojIDk3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2lu
ZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2lu
ZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpm
Z2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVu
OwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAg
dXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNp
bmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6
OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0
czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAg
dXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2lu
ZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6
c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpz
c2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5n
ZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNw
cmludGY7Cn0KIyAxNTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr
LzMuNC9jc3RkaW8iIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsK
ICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7
CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6
OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6
OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6
OnZzc2NhbmY7Cn0KIyAzNiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9j
KysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2d0aHIuaCIgMSAzCiMgOTYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1
ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj
YzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0Lmgi
IDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiMgMjkgIi9ob21lL29sZGhh
bS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNs
dWRlL3B0aHJlYWQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMjkg
Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMg
NAojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NjaGVkLmgiIDEgMyA0CiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApz
dHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0
ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyks
IHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lk
ICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQK
CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19w
aWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIg
KF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9n
ZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
c2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVz
cGVjICpfX3QpIHRocm93ICgpOwoKfQojIDMwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj
MS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3Rh
bGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0
CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKc3RydWN0IHRtCnsKICBpbnQgdG1fc2Vj
OwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21v
bjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1f
aXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoK
CgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2lu
dGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2
ZW50OwojIDE2MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiBjbG9ja190IGNsb2Nr
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVf
dCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3Qg
Kl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0
bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0
aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp
OwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0
cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVz
dHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9f
ZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6
bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBz
dGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1
Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19n
ZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBz
dHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGlt
ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQog
ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9f
Y2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVj
bG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2Zs
YWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMg
Kl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRp
bWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1l
cl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUp
CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9f
dGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJu
IGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0
IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAzNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMg
NApleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkg
dGhyb3cgKCk7CgoKCn0KIyAzMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCiMg
MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFs
LmgiIDMgNApleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg
MyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzIDQKIyAzNzEgIi91c3IvaW5jbHVk
ZS9zaWduYWwuaCIgMyA0Cn0KIyAzNCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAojIDM1ICIvaG9tZS9v
bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv
aW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4u
aCIgMSAzIDQKIyAzNiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCmV4dGVybiAi
QyIgewojIDY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAplbnVtCnsKICBQVEhSRUFE
X0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsK
ICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07Cgpl
bnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9
OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VS
U0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9B
REFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJ
TUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJ
VkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNI
RUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoK
CiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9
OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19T
SEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQ
VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9X
UklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhS
RUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CiMgMTQwICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMgNApzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3Jv
dXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJF
QURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAg
UFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoK
fTsKIyAxNzIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVh
ZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RociwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cg
KCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9f
dGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3Jl
dHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9y
ZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRf
dCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw
YXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0
ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3Qg
cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3Bl
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg
X19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2
b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAq
X19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z
dGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXpl
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmlj
dCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0
dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3Rhcmdl
dF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9s
aWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nl
dGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJp
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211
dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0
cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf
bXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkK
ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9f
Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAq
X19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
cHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0
cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpf
X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9t
dXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0
cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25z
dCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9y
d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
d2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChw
dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xv
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Js
b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9y
d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0
aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3Bz
aGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRf
bnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90
ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X3ByZWYpIHRocm93ICgpOwojIDUxOCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0
ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2ssIGlu
dCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVz
dHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9f
bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhyZWFk
X3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYmFy
cmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJpZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90
ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdW5z
aWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJf
ZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ryb3kgKHB0
aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVh
ZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAq
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh
dHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19i
YXJyaWVyKSB0aHJvdyAoKTsKIyA1NjUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4
dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAq
KSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5
X3QgX19rZXkpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRo
cmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3Bl
Y2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDU4NSAiL2hvbWUvb2xkaGFt
L2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1
ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90
ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRf
cm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNh
bmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBl
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHIp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJv
dyAoKTsKIyA2MTkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9w
dGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l
KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy
ZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDY0MCAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu
Y2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2Rl
ZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0
aHJvdyAoKTsKIyA2NTEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lk
IF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1
ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVj
bG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvaG9tZS9v
bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv
aW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMgNAojIDQwICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9iaXRz
L3NpZ3RocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmlj
dCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jl
c3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRo
cmVhZF90IF9fdGhyLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNjY1ICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk
ZS9wdGhyZWFkLmgiIDIgMyA0CiMgNjgwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApl
eHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsK
Cn0KIyAzOCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2
ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJu
ICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMgNAojIDE3NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAy
IDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAxIDMgNAojIDIz
ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvd29yZHNpemUuaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1l
bnRzLmgiIDIgMyA0CiMgMTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CiMgMTk5ICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n
Y2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMgNAojIDIwMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDI0MCAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzIDQKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoKCgoKCgp0eXBl
ZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MyA0CmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1l
LCBpbnQgX190eXBlKSB0aHJvdyAoKTsKIyAyOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0
CmV4dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9f
d2hlbmNlKSB0aHJvdyAoKTsKIyAzMDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVy
biBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9f
d2hlbmNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZSAoaW50IF9fZmQpIHRocm93ICgp
OwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBf
X25ieXRlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBfX2Nv
bnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3Qg
cHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90IF9f
b2Zmc2V0KQogICAgIHRocm93ICgpOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBf
X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9f
b2ZmX3QgX19vZmZzZXQpIHRocm93ICgpOwojIDM0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz
IDQKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3Qg
X19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBfX29mZnNldCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQg
Kl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9f
b2Zmc2V0KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlwZWRlc1sy
XSkgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gdW5z
aWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgKHVu
c2lnbmVkIGludCBfX3NlY29uZHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX191c2Vjb25kc190
IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29uZHNfdCBfX2ludGVydmFsKQog
ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVzbGVlcCAoX191c2Vjb25kc190IF9fdXNlY29u
ZHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcGF1c2UgKHZvaWQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBf
X2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNob3duIChpbnQg
X19mZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBsY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9f
Z2lkX3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29u
c3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2Zk
KSB0aHJvdyAoKTsKIyA0MjMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBjaGFy
ICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZHVw
IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19mZCwgaW50IF9f
ZmQyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVybiBjaGFyICoq
ZW52aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNo
YXIgKl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9f
ZW52cFtdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIg
Kl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25z
dCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIg
Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hh
ciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4ZWNscCAoX19j
b25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBf
ZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1
ZGUvYml0cy9jb25mbmFtZS5oIiAzIDQKZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBf
UENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAg
IF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNU
RUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19J
TywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFY
QlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwK
CiAgICBfUENfUkVDX01BWF9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoK
ICAgIF9QQ19SRUNfWEZFUl9BTElHTiwKCiAgICBfUENfQUxMT0NfU0laRV9NSU4sCgogICAgX1BD
X1NZTUxJTktfTUFYCgogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdfTUFYLAoKICAgIF9TQ19D
SElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9VUFNfTUFYLAoKICAgIF9T
Q19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0NfVFpOQU1FX01BWCwKCiAg
ICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAgICBfU0NfUkVBTFRJTUVf
U0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVElNRVJTLAoK
ICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJWkVEX0lPLAoKICAgIF9T
Q19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9TQ19NQVBQRURfRklMRVMs
CgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0UsCgogICAgX1NDX01FTU9S
WV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgogICAgX1NDX1NFTUFQSE9S
RVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfQUlPX0xJU1RJT19N
QVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RFTFRBX01BWCwKCiAgICBf
U0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoKICAgIF9TQ19NUV9QUklP
X01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0NfUEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJ
R19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgogICAgX1NDX1NFTV9WQUxVRV9NQVgsCgog
ICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElNRVJfTUFYLAoKCgoKICAgIF9TQ19CQ19C
QVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNfU0NBTEVfTUFYLAoKICAg
IF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNfTUFYLAoKICAgIF9TQ19F
UVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgogICAgX1NDX0xJTkVfTUFY
LAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAg
IF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9TQ18yX0NfREVWLAoKICAg
IF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAgIF9TQ18yX1NXX0RFViwK
CiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgog
ICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09T
SSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoK
ICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9T
VFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RT
LAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9J
T1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9O
UywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwK
CiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0Nf
VEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoK
ICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgog
ICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tT
SVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFE
X1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhS
RUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0Nf
TlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BB
R0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hP
UEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9V
TklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAg
X1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lP
TiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9Y
UEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NI
QVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5U
X01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9M
RU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hB
Ul9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NI
UlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19V
TE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBf
U0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAg
IF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMy
X09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09G
RjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwK
CiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMs
CgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVSUywKCiAgICBfU0NfQkFT
RSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCgog
ICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwKCiAgICBfU0NfVEhSRUFE
X0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAoK
ICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdNVCwKCiAgICBfU0NfRklG
TywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVTLAoKICAgIF9TQ19GSUxF
X0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ss
CgogICAgX1NDX01VTFRJX1BST0NFU1MsCgogICAgX1NDX1NJTkdMRV9QUk9DRVNTLAoKICAgIF9T
Q19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTLAoKICAgIF9TQ19TUElO
X0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VYX1ZFUlNJT04sCgogICAgX1ND
X1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFXTiwKCiAgICBfU0NfU1BPUkFE
SUNfU0VSVkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19TWVNU
RU1fREFUQUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAoKICAgIF9TQ19USU1FT1VU
UywKCiAgICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX1VTRVJfR1JPVVBTLAoK
ICAgIF9TQ19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywKCiAgICBfU0NfMl9QQlNfQUND
T1VOVElORywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9TQ18yX1BCU19NRVNTQUdFLAoK
ICAgIF9TQ18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUF9NQVgsCgogICAgX1NDX1NUUkVB
TVMsCgogICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQsCgoKICAgIF9TQ19WNl9JTFAzMl9PRkYzMiwK
CiAgICBfU0NfVjZfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19WNl9MUDY0X09GRjY0LAoKICAgIF9T
Q19WNl9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19IT1NUX05BTUVfTUFYLAoKICAgIF9TQ19UUkFD
RSwKCiAgICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAoKICAgIF9TQ19UUkFDRV9JTkhFUklULAoK
ICAgIF9TQ19UUkFDRV9MT0cKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgsCgoKCgog
ICAgX0NTX0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAgICBfQ1Nf
TEZTX0xJQlMsCgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NGTEFHUywK
CiAgICBfQ1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZT
NjRfTElOVEZMQUdTLAoKCgoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAs
CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9P
RkYzMl9MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1Nf
WEJTNV9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZM
QUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMy
X09GRkJJR19MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAg
X0NTX1hCUzVfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElC
UywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJ
R19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAg
IF9DU19YQlM1X0xQQklHX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19M
SU5URkxBR1MsCgoKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTLAoKICAgIF9D
U19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9P
RkYzMl9MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAg
X0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy
X09GRkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElCUywKCiAg
ICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZf
TFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUywK
CiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0
X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0NGTEFHUywK
CiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2
X0xQQklHX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElOVEZM
QUdTLAoKCgogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9OwojIDUwMSAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAoX19j
b25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGlu
dCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lk
KSB0aHJvdyAoKTsKCgpleHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDUzNiAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIF9fcGlkX3QgX19nZXRwZ2lkIChfX3BpZF90IF9fcGlk
KSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19w
Z2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBp
bnQgc2V0cGdycCAodm9pZCkgdGhyb3cgKCk7CiMgNTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMgNApleHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gX19w
aWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgpleHRlcm4gX191aWRfdCBn
ZXR1aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQpIHRo
cm93ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGdyb3Vw
cyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
Z3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBz
ZXR1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAo
X191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
c2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lk
IChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lk
X3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGVn
aWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAo
X19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190
bykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBj
aGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAq
X19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdy
cF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9s
ZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25h
bWUpIHRocm93ICgpOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKIyAxICIvdXNy
L2luY2x1ZGUvZ2V0b3B0LmgiIDEgMyA0CiMgMzggIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0
CmV4dGVybiAiQyIgewojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gY2hh
ciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gaW50IG9w
dGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAxNDUg
Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0CmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJn
YywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzUg
Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0Cn0KIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMiAzIDQKCgoKCgoKCmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6
ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAoX19jb25z
dCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0
aG9zdGlkIChsb25nIGludCBfX2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldGRvbWFp
bm5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBz
ZXRkb21haW5uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cmV2b2tlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3Np
emUsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3Nj
YWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1l
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7
CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIHNl
dHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBkYWVtb24gKGludCBf
X25vY2hkaXIsIGludCBfX25vY2xvc2UpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNocm9v
dCAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFz
cyAoX19jb25zdCBjaGFyICpfX3Byb21wdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmc3lu
YyAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzeW5jICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBf
X29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MyA0CmV4dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRf
dCBfX2xlbmd0aCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQs
IF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAzIDQKZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0
aCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSB0aHJvdyAo
KTsKIyA4NjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgYnJrICh2b2lk
ICpfX2FkZHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2Rl
bHRhKSB0aHJvdyAoKTsKIyA4ODcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBs
b25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkwNyAi
L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGlu
dCBfX2NtZCwgX19vZmZfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTE3ICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMgNApleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2Zm
NjRfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTM4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApl
eHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9fZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQp
IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBlbmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19l
ZGZsYWcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9f
cmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAg
IHNzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFy
ICpfX3MpIHRocm93ICgpOwojIDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJu
IGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKfQojIDM5ICIv
aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19n
dGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5
cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdl
YWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3
ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwoj
cHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVh
dGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRf
bXV0ZXhfdHJ5bG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sKIyA4NyAiL2hv
bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgt
Z251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2Fj
dGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRy
ID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0
ciAhPSAwOwp9CiMgNDQ5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5s
aW5lIGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1
bmMpICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRo
cmVhZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9p
ZCAoKmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBk
dG9yKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVh
ZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0
aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBr
ZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2
b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9Cgpz
dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3Qg
Km11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFk
X211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkK
ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90
cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50
Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlm
IChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sg
KG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk3ICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgi
IDIgMwojIDM4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0
eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7Cgog
IHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3Ry
ZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRl
ZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBz
aG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBo
YSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgw
MDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
c2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9
IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAw
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwg
MHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxk
ID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Vv
ZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgw
NDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAw
eDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2Zwb3MuaCIgMiAzCiMg
MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIg
MSAzCiMgNDggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9j
d2NoYXIiIDMKCgoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvY3RpbWUiIDEgMwojIDQ4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvY3RpbWUiIDMKIyA2NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv
aW5jbHVkZS9jKysvMy40L2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tf
dDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVz
aW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5n
IDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6
bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL2hvbWUvb2xkaGFtL2djYy1p
bnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMSAzIDQKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuNC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MiAzIDQKCgoKCgoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0
CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMgNApzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nw
eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJf
dCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3
Y3NuY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hh
cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193
Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2Nz
eGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwg
X19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVw
IChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywg
d2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3Qg
X193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2Mp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6
ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq
X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19j
b25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hh
eXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3
Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl
cm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2No
YXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp
bnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3Qg
KndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3Qg
KndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0b3dj
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAgICBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX21i
cmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRl
cm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
biwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJv
dyAoKTsKIyAyOTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIHNpemVfdCBtYnNy
dG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAq
X19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
KipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9fYykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
bG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0
aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3
Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg
KCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv
dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0
b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg
KCk7CiMgNDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiBsb25nIGludCBfX3dj
c3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf
X2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAo
KTsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpl
eHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgX193Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5h
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3dj
c3RvbGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAq
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
IyA1MjggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAo
d2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpf
X3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZndpZGUg
KF9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZndwcmlu
dGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoK
ZXh0ZXJuIGludCB3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBp
bnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2
d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJu
IGludCB2c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg
OwoKCgpleHRlcm4gaW50IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3Nj
YW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp
IDsKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoK
ZXh0ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg
OwoKZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywK
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSA7CgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy
biB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3
YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRf
dCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdj
aGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAg
ICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193Yywg
X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgcHV0d2NfdW5sb2Nr
ZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiB3
Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc2l6ZV90IHdj
c2Z0aW1lICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Rw
KSB0aHJvdyAoKTsKIyA2ODAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKfQojIDU1ICIvaG9t
ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY3djaGFyIiAyIDMKIyA2
OSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIg
MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3
YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsK
ICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwog
IHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1
c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwog
IHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwog
IHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7
CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3Nj
YW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2Ny
dG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2Nv
bGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRp
bWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNt
cDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3Nz
cG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7
CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsK
ICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAg
dXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwog
IHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAg
d2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0
X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoK
ICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIp
CiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19z
Mik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdj
aGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNv
bnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUg
d2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVy
biB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVz
aW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3As
IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxj
b25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2du
dV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3
Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwog
IHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9
CiMgNDYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRz
L2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
U3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2Zm
OwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5
cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAg
ICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBv
cygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAg
ICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUo
KSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9y
IHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAg
b3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9N
X29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9y
KyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAg
ICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MK
ICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190
KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAg
fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAg
IG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29m
ZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihz
dHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZw
b3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3Ry
ZWFtcG9zOwoKfQojIDUwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEg
Ii9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9leGNlcHRpb25f
ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVk
ZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9h
bGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAg
X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg
Y2hhciogX19zKTsKfQojIDUxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvaW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl
bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5n
c3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv
cjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAg
ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CiMg
MTM2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaW9zZndk
IiAzCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+
IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxj
aGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19p
b3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3Ry
ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0
cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJf
dD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lz
dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry
aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdz
dHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVk
ZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2Zz
dHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90
PiB3ZnN0cmVhbTsKCgp9CiMgNzEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1
ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Bh
aXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNl
Y29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmly
c3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBf
X2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEs
IGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19w
LmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9f
eS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8
IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5z
ZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWly
PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9f
eSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsK
fQojIDE0MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5l
IHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJu
IHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvdHlwZV90
cmFpdHMuaCIgMSAzCiMgNTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv
YysrLzMuNC9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190
cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1t
eV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n
Y2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxj
aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z
aWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk
b3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7
CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9y
bWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9J
c19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDcz
ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVk
ZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi9ob21l
L29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBl
cy5oIiAzCiAgc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9p
dGVyYXRvcl90YWcge307CgogIHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBp
bnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Owoj
IDEwMiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29y
eSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAg
ICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4K
ICAgIHN0cnVjdCBpdGVyYXRvcgogICAgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0
b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRl
ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2lu
dGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90
eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJl
bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv
cjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0
cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBf
VHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRy
ZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7
CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf
SXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV9mdW5jcy5oIiAxIDMKIyA2OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVk
ZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2NvbmNlcHRfY2hlY2su
aCIgMSAzCiMgMzkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMu
NC9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwv
Z2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAg
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQogICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg
ICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg
ICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgICAgfQogICAgICByZXR1cm4gX19uOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZQogICAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICAg
IH0KIyAxMDkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu
bGluZSB2b2lkCiAgICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBp
bnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19p
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAg
ICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAt
LV9faTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0
eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0K
IyAxNjIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIGFkdmFuY2Uo
X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIF9fYWR2YW5j
ZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICAgIH0KfQojIDc1ICIvaG9t
ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysv
My40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3Rh
bGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKIyA4OSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBw
cm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2
ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVy
YXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZl
cnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50
KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAg
ICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gp
CiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlw
ZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZl
cmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBf
X3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAg
ICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq
KCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQog
ICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK
CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7
CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVu
dDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3Bl
cmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoK
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUg
X19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24p
OyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVy
ZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9w
ZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Im
CiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1
cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICBy
ZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJl
dHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2Uo
KSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy
biBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJh
c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2VydF9p
dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg
dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciog
Y29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu
ZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29u
dGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1NSAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg
ICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFp
bmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+
cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAg
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsg
fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1
cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisr
KGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg2ICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1
cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQwMSAiL2hvbWUv
b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgZnJvbnRfaW5z
ZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2
b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFp
bmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNv
bnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29u
dGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDQyNiAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg
ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRh
aW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXIt
PnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAg
ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsg
cmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTcgIi9ob21lL29sZGhhbS9n
Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAg
IHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDc2
ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBp
bnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcs
IHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250
YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl
cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7
CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kp
IHt9CiMgNTE4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkK
ICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsK
ICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5z
ZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAg
IGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo
aXM7IH0KICAgIH07CiMgNTUwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250
YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAg
IHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRl
cmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2lu
ZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9y
bWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJv
dGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAg
IF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAg
IGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6
IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAg
ICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
LCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0K
CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1
cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr
KCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0
b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1
cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgp
IHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
CiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy
ZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVy
ZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoK
ICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5j
ZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoK
ICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2Vf
dHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy
ZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0o
Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJl
dHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNv
bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9p
dGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAg
ICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NTEgIi9ob21l
L29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s
CiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh
dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi
b29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jo
cy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwo
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog
ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg
Ym9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhz
LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv
b2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJh
c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0
b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg
X19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv
b2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh
aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhz
LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg
ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l
IGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9f
cmhzLmJhc2UoKTsgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgdHlwZW5hbWUgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZQog
IG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgogIG9w
ZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQp9CiMgNzYgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5s
aW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBf
X2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgog
ICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwog
ICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL2hvbWUv
b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChf
VHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwog
ICAgICBfX2EgPSBfX2I7CiAgICAgIF9fYiA9IF9fdG1wOwogICAgfQojIDE0NiAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWlu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAo
X19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAo
X19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19i
OyByZXR1cm4gX19hOwogICAgfQojIDIwNCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv
aW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChj
b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg
ICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQoj
IDIyMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s
aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xh
c3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9f
Zmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9f
cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgog
ICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJl
dHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCog
X19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3Ry
dWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBf
X2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAg
ICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlf
dHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl
cgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90
cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAg
ICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQu
YmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9f
Y29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l
IF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlw
ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRw
dXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJz
dC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBp
bmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs
c2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y
PF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvaG9t
ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg
ICAKCgogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0
ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAg
ICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0KQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
LCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJ
dGVyCiAgICBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0
OyBfX24gPiAwOyAtLV9fbikKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5
cGVuYW1lIF9Cb29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAg
IHsKICAgICAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2Zp
cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNv
bnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9f
cmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1
cm4gX19yZXN1bHQgLSBfTnVtOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCos
IF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9U
cCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAg
ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90
eXBlPgogICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5s
aW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz
dCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJp
dmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBf
VHJpdmlhbD4KICAgICAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAg
IGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf
QkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkky
KF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsg
fQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBf
QkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly
c3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dh
cmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1
ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8
X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0
cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBf
X05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C
STI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVy
YXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05v
cm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9y
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUg
X0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9f
cmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1
cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n
Y2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUp
CiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi9ob21lL29sZGhhbS9n
Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
VHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKCiAgICAgIGZvciAoIDsgX19u
ID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2b2lkCiAgZmlsbCh1bnNpZ25lZCBj
aGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIm
IF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmly
c3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChz
aWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNo
YXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2Zp
cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp
OwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwg
Y29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19m
aXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0
KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHVuc2lnbmVkIGNo
YXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCB1
bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9f
biwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmls
bChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9f
bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgY2hhcioKICAg
IGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKICAgIHsK
ICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19m
aXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwg
X0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgog
ICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkg
ewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICBy
ZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7
CiAgICB9CiMgNjY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z
LjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2Zp
cnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghKCpf
X2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1
cm4gdHJ1ZTsKICAgIH0KIyA2OTkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1
ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
PgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg
Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAg
ICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL2hvbWUvb2xkaGFt
L2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAg
ICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAg
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MjsKICAgIH0KIyA3NjcgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv
YysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wK
ICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmly
c3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0
MikpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4g
X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBpbmxp
bmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2xhc3QyKQogIHsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJz
dDE7CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogICAgY29u
c3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwgc3RkOjptaW4oX19s
ZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDog
X19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29t
cGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0
MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQg
Y2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQoj
IDY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvdmVjdG9y
IiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL2hvbWUvb2xkaGFtL2dj
Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Nhc3NlcnQiIDEgMwojIDQ3ICIvaG9tZS9v
bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2Fzc2VydCIgMwoKIyAxICIv
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0CiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg
MyA0CmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hh
ciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlv
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl
cm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9f
ZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKfQojIDQ5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvY2Fzc2VydCIgMiAzCiMgODUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu
Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2Nj
LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAz
NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVu
Y3RleGNlcHQuaCIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv
YysrLzMuNC9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUvb2xkaGFtL2djYy1p
bnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0
KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9t
YWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJn
dW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3df
aW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDg2ICIvaG9tZS9vbGRoYW0vZ2NjLWlu
c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2hv
bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3RocmVh
ZHMuaCIgMSAzCiMgNTQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBf
UmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRp
bGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291
bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9f
bikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBUSFJF
QURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBf
X3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0
aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3Vu
dDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAg
fQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xv
Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9N
X3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv
Y2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi9ob21lL29sZGhhbS9n
Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0
ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBz
dGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQg
X19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1
bW15Pjo6X1Nfc3dhcF9sb2NrID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsg
MCwgMCB9fTsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25l
ZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhf
bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBs
b25nIF9fcmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhf
dW5sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBf
X3Jlc3VsdDsKICB9Cgp9CiMgMTU1ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVj
dCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7
CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTkyICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg
ICB9CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhy
ZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2Vf
bG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwog
ICAgfQogIH07CiMgMjI4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewog
ICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0
ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVp
cmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2Vf
bG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9f
bG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoK
fQojIDg3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0
cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu
Y2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAz
MyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoK
c3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf
X2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3Zh
bCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImxvY2s7IHhhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIg
KF9fcmVzdWx0KSwgIittIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAo
X192YWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jl
c3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK
X19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsK
ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTEsJTAiCiAgICAgICAgICAgICAg
ICAgICAgICAgIDogIittIiAoKl9fbWVtKSA6ICJpciIgKF9fdmFsKSA6ICJtZW1vcnkiKTsKfQoj
IDg5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9z
dGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDAgIi9ob21lL29sZGhhbS9nY2Mt
aW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgY2xhc3Mg
X19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShz
aXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAgIHN0YXRp
YyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9wZXJhdG9y
IGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8aW50IF9faW5z
dD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0
aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMgdm9pZCAoKiBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyB2b2lk
KgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1
bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9
PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxv
Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0
aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7
CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog
ICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybiBf
X29sZDsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkICgq
IF9fbWFsbG9jX2FsbG9jPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0g
MDsKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvYzxf
X2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAo
KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZv
ciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j
X2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9t
YWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsK
ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g
bWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2lu
dGVyZmFjZTsKIyAxOTAgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogICAgewogICAgcHVibGljOgogICAg
ICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAg
X1RwKiBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9fbikKICAgICAgICAgIF9fcmV0ID0gc3RhdGlj
X2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAg
IHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUo
KQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u
KQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9f
cCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9
OwojIDIzMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBf
X2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgoKCiAgICAgIGVudW0ge19TX2V4dHJhID0g
OH07CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90
IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxs
b2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9
IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p
CiAgICAgIHsKICAgICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l
eHRyYTsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0g
X19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Fs
bG9jLmgiLCAyNTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICB9CiAgICB9
OwojIDI4OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICAgIGNsYXNzIF9fcG9vbF9hbGxvYwogICAgewogICAgcHJpdmF0ZToKICAgICAgZW51bSB7X0FM
SUdOID0gOH07CiAgICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgICBlbnVtIHtfTkZS
RUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgICAgdW5pb24gX09iagogICAgICB7
CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9j
bGllbnRfZGF0YVsxXTsKICAgICAgfTsKCiAgICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19m
cmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVl
OwogICAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICAgIHN0YXRpYyBzaXplX3QgX1Nf
aGVhcF9zaXplOwoKICAgICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19sb2NrOwogICAgICBz
dGF0aWMgX0F0b21pY193b3JkIF9TX2ZvcmNlX25ldzsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAg
ICAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMp
ICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICAg
IHN0YXRpYyBzaXplX3QKICAgICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAg
ICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04gLSAxKS8oc2l6ZV90KV9B
TElHTiAtIDEpOyB9CgoKCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBfU19yZWZpbGwoc2l6ZV90
IF9fbik7CgoKCiAgICAgIHN0YXRpYyBjaGFyKgogICAgICBfU19jaHVua19hbGxvYyhzaXplX3Qg
X19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgogICAgICBzdHJ1Y3QgX0xvY2sKICAgICAgewogICAg
ICAgIF9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9
CiAgICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19sb2NrLl9NX3JlbGVhc2VfbG9j
aygpOyB9CiAgICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgICAgZnJpZW5k
IHN0cnVjdCBfTG9jazsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxs
b2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAg
ICAgICAgaWYgKF9TX2ZvcmNlX25ldyA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAo
Z2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgm
X1NfZm9yY2VfbmV3LCAxKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fYXRvbWlj
X2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7CgogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4g
KChfU19mb3JjZV9uZXcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcg
IT0gMCIsICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0
cy9zdGxfYWxsb2MuaCIsIDM1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAg
ICB9CgogICAgICAgIGlmICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNl
X25ldyA+IDApKQogICAgICAgICAgX19yZXQgPSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19uKTsK
ICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1NfZnJlZWxpc3RfaW5k
ZXgoX19uKTsKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAg
ICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAg
ICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAgICAgICAgICAg
IF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQg
LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9fcmVzdWx0Owog
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXQgPT0g
MCwgMCkpCiAgICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgIH0KICAg
ICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFs
bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGlmICgoX19uID4g
KHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNlX25ldyA+IDApKQogICAgICAgICAgX19u
ZXdfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsK
ICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0
CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAgICAgICBfT2Jq
KiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNl
OwogICAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7
CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICAgIH0KICAgICAgfQog
ICAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29y
ZAogIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7Cgog
IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAgICAg
ICAgICAgICAgY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JikKICAgIHsgcmV0
dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9f
aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5z
dD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5z
dD46OgogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAg
ewogICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3Np
emUgKiBfX25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBf
U19zdGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQog
ICAgICAgIHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9T
X3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7
CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAg
IHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAg
ICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQg
PSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVz
OwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3Rv
dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlm
IChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9s
YXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nf
c3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxv
Y2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2Jq
KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgog
ICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChz
aXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9s
aXN0OwogICAgICAgICAgICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVf
bGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf
X3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBf
X2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBf
X25vYmpzKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj
aGFyKilfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAg
IH0KICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9T
X2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0
dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoK
CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19w
b29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7
CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19h
bGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7
CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBf
T2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykK
ICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9f
Y2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1
bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAgICAgewogICAgICAg
ICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25leHRfb2JqID0gKF9P
YmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAoX19ub2JqcyAtIDEg
PT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9m
cmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu
ayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoK
ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9j
awogICAgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19sb2NrID0geyB7MCwgMCwg
MCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19wb29sX2FsbG9jPF9fdGhyZWFkcyxf
X2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgICBjaGFyKiBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9TX2Vu
ZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBz
aXplX3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoK
ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1lIF9fcG9v
bF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKICAgIF9fcG9vbF9hbGxv
YzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRl
ZiBfX3Bvb2xfYWxsb2M8dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19wb29sX2FsbG9jPGZh
bHNlLDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA1NjkgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAgIHR5cGVkZWYgX19h
bGxvYyBfQWxsb2M7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9U
cCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAg
IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9y
ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxs
b2NhdG9yPF9UcDE+IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAg
ICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0
aHJvdygpIHt9CiAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAg
ICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAg
Y29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg
cmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19u
LCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAg
ICBpZiAoX19uKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9IHRoaXMtPm1heF9z
aXplKCkpCiAgICAgICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFs
bG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK
ICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90
eXBlIF9fbikKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyBy
ZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAg
ICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAg
dGVtcGxhdGU8PgogICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg
Y29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAg
ICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAgfTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7
IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25z
dCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDY2NSAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsbG9jLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2Fs
bG9jYXRvcgogICAgewogICAgICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICAgICAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9U
cCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlw
ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVf
dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu
ZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOyB9OwoK
ICAgICAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9f
YWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9f
dW5kZXJseWluZ19hbGxvYykge30KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAg
ICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJv
dygpCiAgICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykg
e30KCiAgICAgIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAg
YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25z
dF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv
bnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlm
IChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2Nh
dGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgog
ICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAg
ICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyBy
ZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkCiAgICAgIGNvbnN0
cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwp
OyB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2FsbG9j
YXRvcjx2b2lkLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZv
aWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAg
ICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
MSwgX0FsbG9jPiBvdGhlcjsgfTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19hbGxv
Y2F0b3I8X1RwLF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9y
PF9UcCxfQWxsb2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2Mg
PT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2Fs
bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2Nh
dG9yPF9UcCwgX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs
bG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgoKCgoKCgogIHRlbXBsYXRlPGludCBp
bnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2M8
aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvYzxpbnN0PiYpCiAgICB7
IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvYzxfX2luc3Q+JiwKICAgICAgICAgICAg
ICAgY29uc3QgX19tYWxsb2NfYWxsb2M8X19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9
PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxv
Yz4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m
LCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA4
MTggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9y
PgogICAgc3RydWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRv
cjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY29uc3QgYm9v
bCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAgIHN0cnVjdCBfQWxsb2NfdHJh
aXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAs
IF9fYWxsb2M+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9j
YXRvcl90eXBlOwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBpbnQgX19pbnN0
PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAg
ICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPiBf
QWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9j
PF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxl
X2FsbG9jPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIF9BbGxv
Y190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhy
ZWFkcywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1Rw
LCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAg
fTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgaW50IF9faW5z
dD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPiA+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYg
X19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7
CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4g
YWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fcG9vbF9hbGxvYzxfX3RociwgX19pbnN0PiA+ID4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAg
dHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocixfX2luc3Q+ID4K
ICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX3Bvb2xf
YWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8
X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8
X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3Bvb2xfYWxsb2M8
dHJ1ZSwwPjsKfQojIDY5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvdmVjdG9yIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgog
ICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1
ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoK
CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVj
dChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0K
IyA5OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Nv
bnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxp
bmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJh
dG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAg
ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRl
ci0+fl9UcCgpOyB9CiMgMTM0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAg
ICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAg
ICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0K
IyA3MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L3ZlY3Rv
ciIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40
L2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVk
X2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9j
b3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1
ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9f
Zmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAg
ICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRo
cm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx
L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zv
cndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUg
Y2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hh
ciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp
cnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBf
X2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25z
dCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICByZXR1cm4gX19y
ZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFs
aXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUp
CiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmluaXRpYWxpemVk
X2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAg
ICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0
KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAg
ICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K
ICAgIH0KIyAxNjQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMu
NC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2Zp
bGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg
X194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmlu
aXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAg
fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9m
aWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAg
IHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2Zp
cnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIp
CiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3Vy
OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf
X2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMjEwICIv
aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0
aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1Rw
JiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1
cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0Qo
KSk7CiAgICB9CiMgMjI3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg
ICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u
KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAg
ICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3
YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1
bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf
X3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCgu
Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAg
ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9p
ZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5w
dXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRy
eSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAg
ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJz
dDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNzEgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC92ZWN0b3IiIDIgMwoj
IDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF92ZWN0b3IuaCIgMSAzCiMgNjUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1
ZGUvYysrLzMuNC9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5z
dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIv
aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4
Y2VwdC5oIiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysv
My40L2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3Rh
bGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAog
IF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9p
ZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5f
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVu
dChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
dW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3Nf
ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs
bC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgoKbmFtZXNwYWNl
IHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9y
LCBib29sIF9Jc1N0YXRpYz4KICAgIGNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZQogICAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0
b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxv
Y2F0b3I7IH0KCiAgICAgIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hKQogICAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5p
c2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgICAgIF9UcCogX01fc3RhcnQ7
CiAgICAgIF9UcCogX01fZmluaXNoOwogICAgICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICAg
ICAgX1RwKgogICAgICBfTV9hbGxvY2F0ZShzaXplX3QgX19uKSB7IHJldHVybiBfTV9kYXRhX2Fs
bG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2RlYWxsb2NhdGUo
X1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3Iu
ZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf
QWxsb2NhdG9yLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9WZWN0b3Jf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICAgIDogX01fc3RhcnQoMCksIF9N
X2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICAgICAgeyB9CgogICAgcHJvdGVjdGVk
OgogICAgICBfVHAqIF9NX3N0YXJ0OwogICAgICBfVHAqIF9NX2ZpbmlzaDsKICAgICAgX1RwKiBf
TV9lbmRfb2Zfc3RvcmFnZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKCiAgICAgIF9UcCoKICAg
ICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRl
KF9fbik7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90
IF9fbikgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQogICAgfTsKCgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX1Zl
Y3Rvcl9iYXNlCiAgICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46
Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVmVjdG9y
X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgIF9C
YXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKCiAgICAgIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQog
ICAgICA6IF9CYXNlKF9fYSkgeyB9CgogICAgICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsKICAgICAg
ICB0aGlzLT5fTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgICAgdGhpcy0+X01fZmlu
aXNoID0gdGhpcy0+X01fc3RhcnQ7CiAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSB0
aGlzLT5fTV9zdGFydCArIF9fbjsKICAgICAgfQoKICAgICAgfl9WZWN0b3JfYmFzZSgpCiAgICAg
IHsgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgIHRo
aXMtPl9NX2VuZF9vZl9zdG9yYWdlIC0gdGhpcy0+X01fc3RhcnQpOyB9CiAgICB9OwojIDE4NSAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Zl
Y3Rvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxv
Y2F0b3I8X1RwPiA+CiAgICBjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9U
cCwgX0FsbG9jPgogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwg
X0FsbG9jPiBfQmFzZTsKICAgICAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90
eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlw
ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq
IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRv
cjxwb2ludGVyLCB2ZWN0b3JfdHlwZT4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4
OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCB2ZWN0b3JfdHlwZT4KICAgICAgY29u
c3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0
ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJz
ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiB2YWx1
ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3Rf
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAg
ICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9j
YXRlOwogICAgICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9m
aW5pc2g7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgICBwdWJsaWM6
CgoKCgoKICAgICAgZXhwbGljaXQKICAgICAgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fYSkgeyB9CiMgMjM5ICIvaG9t
ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9y
LmgiIDMKICAgICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs
dWUsCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkKICAgICAgOiBfQmFzZShfX24sIF9fYSkKICAgICAgeyB0aGlzLT5fTV9maW5pc2ggPSB1
bmluaXRpYWxpemVkX2ZpbGxfbih0aGlzLT5fTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQojIDI1
MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3Rs
X3ZlY3Rvci5oIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uKQog
ICAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgeyB0aGlzLT5fTV9maW5p
c2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbih0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX24sIHZhbHVlX3R5cGUoKSk7IH0KIyAy
NjYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF92ZWN0b3IuaCIgMwogICAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpCiAgICAgIDogX0Jh
c2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgICAgeyB0aGlzLT5fTV9maW5p
c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQpOwogICAg
ICB9CiMgMjg2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0
b3I+CiAgICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewoKICAgICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3Qs
IF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKCgoKCiAgICAgIH52ZWN0b3IoKSB7IF9EZXN0cm95
KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2gpOyB9CiMgMzExICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAg
ICAgdmVjdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpOwojIDMyNCAiL2hv
bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCiAgICAgIHZvaWQKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVl
X3R5cGUmIF9fdmFsKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiMgMzQw
ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf
dmVjdG9yLmgiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAg
ICAgdm9pZAogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpCiAgICAgICAgewoKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgX01f
YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0K
CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKCgoKCgogICAgICBpdGVyYXRvcgogICAgICBi
ZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yICh0aGlzLT5fTV9zdGFydCk7IH0KCgoKCgoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRv
ciAodGhpcy0+X01fc3RhcnQpOyB9CgoKCgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsg
cmV0dXJuIGl0ZXJhdG9yICh0aGlzLT5fTV9maW5pc2gpOyB9CgoKCgoKICAgICAgY29uc3RfaXRl
cmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKHRoaXMtPl9N
X2ZpbmlzaCk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSB7
IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogICAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu
ZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICAgICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CgoKICAgICAgc2l6
ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNp
emVvZih2YWx1ZV90eXBlKTsgfQojIDQzNiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv
aW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICAgIHZvaWQKICAgICAgcmVz
aXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsK
ICAgICAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICAgIGVyYXNlKGJlZ2luKCkg
KyBfX25ld19zaXplLCBlbmQoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KGVuZCgp
LCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9CiMgNDU1ICIvaG9tZS9vbGRoYW0v
Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAg
ICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3
X3NpemUsIHZhbHVlX3R5cGUoKSk7IH0KCgoKCgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNp
dHkoKSBjb25zdAogICAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IodGhpcy0+
X01fZW5kX29mX3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KCgoKCgogICAgICBib29sCiAgICAgIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQojIDQ5MCAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKTsKIyA1MDQgIi9ob21lL29s
ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF92ZWN0b3IuaCIg
MwogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVy
biAqKGJlZ2luKCkgKyBfX24pOyB9CiMgNTE4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj
MS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgY29uc3RfcmVmZXJl
bmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdp
bigpICsgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fcmFuZ2Vf
Y2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhp
cy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciBbXSBhY2Nl
c3Mgb3V0IG9mIHJhbmdlIik7CiAgICAgIH0KCiAgICBwdWJsaWM6CiMgNTQyICIvaG9tZS9vbGRo
YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMK
ICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIHsgX01fcmFuZ2VfY2hlY2so
X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQojIDU1NiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0
YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICAgIGNvbnN0
X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdCB7IF9NX3JhbmdlX2NoZWNr
KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCgoKCgogICAgICByZWZlcmVuY2UKICAgICAg
ZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQog
ICAgICBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICAgICAgcmVmZXJl
bmNlCiAgICAgIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCgoKCgogICAgICBjb25z
dF9yZWZlcmVuY2UKICAgICAgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQoj
IDU5OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5
cGUmIF9feCkKICAgICAgewogICAgICAgIGlmICh0aGlzLT5fTV9maW5pc2ggIT0gdGhpcy0+X01f
ZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9Db25zdHJ1Y3QodGhpcy0+
X01fZmluaXNoLCBfX3gpOwogICAgICAgICAgICArK3RoaXMtPl9NX2ZpbmlzaDsKICAgICAgICAg
IH0KICAgICAgICBlbHNlCiAgICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAg
ICB9CiMgNjE4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdm9pZAogICAgICBwb3BfYmFjaygpCiAgICAgIHsK
ICAgICAgICAtLXRoaXMtPl9NX2ZpbmlzaDsKICAgICAgICBfRGVzdHJveSh0aGlzLT5fTV9maW5p
c2gpOwogICAgICB9CiMgNjM2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgNjUyICIvaG9t
ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9y
LmgiIDMKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgICAgeyBfTV9maWxsX2luc2VydChfX3Bvcywg
X19uLCBfX3gpOyB9CiMgNjcwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl
L2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZAogICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvcywg
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsK
CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6
X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvcywg
X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQojIDY5NCAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOwojIDcxNSAi
L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Zl
Y3Rvci5oIiAzCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0
ZXJhdG9yIF9fbGFzdCk7CiMgNzI3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdm9pZAogICAgICBzd2FwKHZl
Y3RvciYgX194KQogICAgICB7CiAgICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX3N0YXJ0LCBfX3gu
X01fc3RhcnQpOwogICAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9maW5pc2gsIF9feC5fTV9maW5p
c2gpOwogICAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2Vu
ZF9vZl9zdG9yYWdlKTsKICAgICAgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsg
ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIHBvaW50ZXIKICAgICAgICBf
TV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
CiAgICAgICAgewogICAgICAgICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgICAgICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ludGVnZXI+CiAgICAgICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2go
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAg
ICAgICAgICB0aGlzLT5fTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgICAgICB0aGlz
LT5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX3N0YXJ0ICsgX19uOwogICAgICAgICAgdGhp
cy0+X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24odGhpcy0+X01fc3RhcnQsIF9fbiwg
X192YWx1ZSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+
CiAgICAgICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgICAgX0l0
ZXJDYXRlZ29yeTsKICAgICAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0
LCBfSXRlckNhdGVnb3J5KCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgICAgewogICAgICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAgICBwdXNoX2Jh
Y2soKl9fZmlyc3QpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgICB7CiAgICAgICAg
ICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg
ICAgdGhpcy0+X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICAgICAgdGhpcy0+X01f
ZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5fTV9zdGFydCArIF9fbjsKICAgICAgICAgIHRoaXMtPl9N
X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQpOwogICAg
ICAgIH0KCgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CiAgICAgICAgdm9p
ZAogICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs
LCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICBfTV9maWxsX2Fzc2lnbihzdGF0aWNf
Y2FzdDxzaXplX3R5cGU+KF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx2YWx1ZV90eXBlPihfX3ZhbCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICAg
IHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICBfSXRlckNhdGVnb3J5OwogICAgICAgICAg
X01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAg
fQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQK
ICAgICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAg
ICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
OwoKCgogICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0
IHZhbHVlX3R5cGUmIF9fdmFsKTsKCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdl
cj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICBfTV9maWxsX2luc2VydChfX3Bvcywg
c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZAogICAgICAgIF9NX2luc2VydF9k
aXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAg
ICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICBfSXRlckNhdGVnb3J5Owog
ICAgICAgICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0
ZWdvcnkoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3Ms
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9yYW5nZV9pbnNl
cnQoaXRlcmF0b3IgX19wb3MsIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFn
KTsKCgoKICAgICAgdm9pZAogICAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCgogICAgICB2b2lkCiAgICAgIF9N
X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK
ICAgIH07CiMgOTEzICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z
LjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAs
X0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAg
cmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICAgICAgZXF1YWwoX194
LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQojIDkzMiAiL2hvbWUvb2xk
aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0
b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9j
b21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9j
PiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNv
bnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9f
eSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCB2ZWN0
b3I8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7
IHJldHVybiAhKF9feSA8IF9feCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9U
cCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1
cm4gIShfX3ggPCBfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCB2
ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQp9CiMgNzIgIi9o
b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC92ZWN0b3IiIDIgMwoj
IDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0
bF9idmVjdG9yLmgiIDEgMwojIDY0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs
dWRlL2MrKy8zLjQvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBfQml0X3R5cGU7CiAgZW51bSB7IF9NX3dvcmRfYml0ID0gaW50KDgg
KiBzaXplb2YoX0JpdF90eXBlKSkgfTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CgogIF9CaXRf
dHlwZSAqIF9NX3A7CiAgX0JpdF90eXBlIF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UoX0JpdF90
eXBlICogX194LCBfQml0X3R5cGUgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7
fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCpfTV9wICYgX01fbWFzayk7IH0KICBf
Qml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9w
IHw9IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBf
X3gpCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykg
PT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9f
eCkgY29uc3QKICAgIHsgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7IH0KICB2b2lk
IGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jh
c2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIGJvb2w+CnsK
ICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7CgogIF9CaXRfaXRl
cmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3Ao
X194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9N
X29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAg
ICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29m
ZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX01fd29yZF9iaXQgLSAxOwogICAgICAt
LV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkgewogICAgZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX01f
d29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93b3JkX2JpdDsKICAgIGlmIChfX24gPCAwKSB7
CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9NX3dvcmRfYml0OwogICAg
ICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19u
OwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBj
b25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9N
X29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf
X2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9N
X3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMg
PT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf
X2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gIShfX2kg
PCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2Um
IF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsKCmlubGluZSBw
dHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194LCBjb25zdCBf
Qml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfTV93b3JkX2JpdCAqIChfX3guX01f
cCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0
IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9C
aXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVy
OwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDog
X0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcihfQml0X3R5cGUgKiBf
X3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkg
e30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9w
LCAxVUwgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01f
YnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGlu
dCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJl
dHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rv
d24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsK
ICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkg
ewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3Bl
cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkg
Y29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBf
X2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7
CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9
CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJuICoo
KnRoaXMgKyBfX2kpOyB9Cn07CgppbmxpbmUgX0JpdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlm
Zl90IF9fbiwgY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0K
CgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UK
ewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5j
ZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0X2l0
ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9f
eCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7
fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAgOiBf
Qml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3Jl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01f
cCwgMVVMIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
ewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv
ciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1w
ID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29u
c3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5j
cihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3It
PShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkg
Y29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3Rt
cCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUg
X19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJu
IF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5j
ZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBf
Qml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2Nv
bnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2Nf
YmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0Fs
bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0
b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQog
ICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01f
ZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxs
b2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChf
X24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0
ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFs
bG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxv
Y190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg
IF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVy
YXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9j
YXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJv
b2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRv
cl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYp
CiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoK
cHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9B
bGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9CaXRfdHlw
ZSAqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs
bG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01f
ZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6
ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBf
TV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRf
b2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jh
c2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5j
ZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBf
QmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxh
dGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1Ymxp
YyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29sIHZh
bHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5j
ZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVm
ZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoK
ICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25z
dF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVy
YXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYg
c3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAg
ICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0K
CiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxs
b2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1
c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46
Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUo
c2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19u
KTsKICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9i
aXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgdGhpcy0+X01fc3RhcnQgPSBpdGVyYXRvcihfX3Es
IDApOwogICAgICB0aGlzLT5fTV9maW5pc2ggPSB0aGlzLT5fTV9zdGFydCArIGRpZmZlcmVuY2Vf
dHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGJvb2wgX194KSB7CiAgICAgIGlmICh0aGlzLT5fTV9maW5pc2guX01fcCAhPSB0aGlzLT5f
TV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgdGhp
cy0+X01fZmluaXNoLCB0aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9
IF9feDsKICAgICAgICArK3RoaXMtPl9NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/
IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAg
ICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg
ICAgKl9faSsrID0gX194OwogICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlv
biwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIHRoaXMtPl9N
X2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3Jk
X2JpdDsKICAgICAgICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0K
ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu
aXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog
ICAgICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9
IGl0ZXJhdG9yKCk7CiAgICAgIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19m
aXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2
b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNvcHkoX19maXJzdCwg
X19sYXN0LCB0aGlzLT5fTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAgX19w
b3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAgICB9CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu
c2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlmIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7
CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAg
ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICB0aGlzLT5f
TV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgc3RkOjptYXgoc2l6ZSgpLCBf
X24pOwogICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAg
ICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3Io
X19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAg
ICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAg
ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgICB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFn
ZQogICAgICAgICAgICA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9i
aXQ7CiAgICAgICAgICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg
fQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
dGhpcy0+X01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gdGhpcy0+X01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIHRoaXMtPl9N
X2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+
X01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAg
IH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAg
ICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6
ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsg
fQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsg
fQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBl
KGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwog
ICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0K
CiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAq
KGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBv
cGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSAr
IGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90
eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBf
X3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNl
IGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgq
dGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAg
IGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3Rvcihz
aXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKHRoaXMt
Pl9NX3N0YXJ0Ll9NX3AsIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAw
KTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZl
Y3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlh
bGl6ZShfX24pOwogICAgICBmaWxsKHRoaXMtPl9NX3N0YXJ0Ll9NX3AsIHRoaXMtPl9NX2VuZF9v
Zl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDogX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5pdGlh
bGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCB0aGlz
LT5fTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2
b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9f
dHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbCh0aGlzLT5f
TV9zdGFydC5fTV9wLCB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRp
YWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAg
ICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFs
OwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFs
KCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25z
dCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAg
ICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUo
KTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHko
X194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9
IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBf
X3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwodGhpcy0+X01fc3Rh
cnQuX01fcCwgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAg
aW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwodGhpcy0+X01f
c3RhcnQuX01fcCwgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAg
IH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9maWxs
X2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv
cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn
ZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f
dmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChi
b29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQg
X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkK
ICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog
ICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5k
KCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p
ZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAg
ICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBy
ZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkp
CiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoInZlY3Rvcjo6cmVzZXJ2ZSIpOwogICAgICBp
ZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9N
X2JpdF9hbGxvYyhfX24pOwogICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwg
ZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg
ICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgdGhpcy0+X01fZW5k
X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsK
ICAgICAgfQogICAgfQoKICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9
CiAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog
ICAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3Jl
ZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1
c2hfYmFjayhib29sIF9feCkgewogICAgICBpZiAodGhpcy0+X01fZmluaXNoLl9NX3AgIT0gdGhp
cy0+X01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKnRoaXMtPl9NX2ZpbmlzaCsrID0gX194Owog
ICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KICAgIHZv
aWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAgIHN0ZDo6c3dhcCh0aGlz
LT5fTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2Zpbmlz
aCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9lbmRfb2Zfc3RvcmFn
ZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KCgogICAgc3RhdGljIHZvaWQgc3dhcChy
ZWZlcmVuY2UgX194LCByZWZlcmVuY2UgX195KSB7CiAgICAgIGJvb2wgX190bXAgPSBfX3g7CiAg
ICAgIF9feCA9IF9feTsKICAgICAgX195ID0gX190bXA7CiAgICB9CgogICAgaXRlcmF0b3IgaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZl
cmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKHRoaXMtPl9N
X2ZpbmlzaC5fTV9wICE9IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlCiAgICAgICAgICAmJiBfX3Bv
c2l0aW9uID09IGVuZCgpKQogICAgICAgICp0aGlzLT5fTV9maW5pc2grKyA9IF9feDsKICAgICAg
ZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJu
IGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg
ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewog
ICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJh
dG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19s
YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0
b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3Np
dGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9m
aWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkg
ewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXpl
KCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwKICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24p
KTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUo
X19uKSwgX194KTsKICAgICAgICB0aGlzLT5fTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9f
bik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgp
ICsgc3RkOjptYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2Jp
dF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bv
c2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBfX24sIF9feCk7
CiAgICAgICAgdGhpcy0+X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsg
ZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICB0
aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkv
X01fd29yZF9iaXQ7CiAgICAgICAgdGhpcy0+X01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwog
ICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90
eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19u
LCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tdGhpcy0+X01fZmluaXNoOyB9
CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICAgIGlmIChfX3Bv
c2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwg
X19wb3NpdGlvbik7CiAgICAgICAgLS10aGlzLT5fTV9maW5pc2g7CiAgICAgIHJldHVybiBfX3Bv
c2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KSB7CiAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwg
X19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6
ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19z
aXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u
ZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdf
c2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yIChf
Qml0X3R5cGUgKiBfX3AgPSB0aGlzLT5fTV9zdGFydC5fTV9wOwogICAgICAgICAgIF9fcCAhPSB0
aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZTsKICAgICAgICAgICArK19fcCkKICAgICAgICAqX19wID0g
fipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9
CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBfX2FsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDcz
ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvdmVjdG9yIiAy
IDMKCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9i
aXRzL3ZlY3Rvci50Y2MiIDEgMwojIDY0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9p
bmNsdWRlL2MrKy8zLjQvYml0cy92ZWN0b3IudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgdmVjdG9yPF9U
cCxfQWxsb2M+OjoKICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgaWYgKF9f
biA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoInZlY3Rv
cjo6cmVzZXJ2ZSIpOwogICAgICBpZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikKICAgICAgICB7
CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgICAg
IHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fZmluaXNoKTsK
ICAgICAgICAgIF9EZXN0cm95KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2gpOwogICAg
ICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7CiAgICAgICAgICB0
aGlzLT5fTV9zdGFydCA9IF9fdG1wOwogICAgICAgICAgdGhpcy0+X01fZmluaXNoID0gX190bXAg
KyBfX29sZF9zaXplOwogICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5f
TV9zdGFydCArIF9fbjsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxfQWxsb2M+OjppdGVyYXRv
cgogICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBfX3Bv
c2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKHRoaXMtPl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9l
bmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICB7CiAgICAgICAgX0Nv
bnN0cnVjdCh0aGlzLT5fTV9maW5pc2gsIF9feCk7CiAgICAgICAgKyt0aGlzLT5fTV9maW5pc2g7
CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194
KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxfQWxsb2M+Ojpp
dGVyYXRvcgogICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9z
aXRpb24pCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBj
b3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tdGhpcy0+X01f
ZmluaXNoOwogICAgICBfRGVzdHJveSh0aGlzLT5fTV9maW5pc2gpOwogICAgICByZXR1cm4gX19w
b3NpdGlvbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCiAgICB2ZWN0b3I8X1Rw
LF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQog
ICAgewogICAgICBpdGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAg
ICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgICB0aGlzLT5fTV9maW5pc2ggPSB0aGlzLT5f
TV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZlY3Rvcjxf
VHAsX0FsbG9jPiYKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3Qg
dmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAgIGlmICgmX194ICE9IHRoaXMpCiAg
ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgICAg
ICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkKICAgICAgICB7CiAgICAgICAgICBwb2ludGVyIF9f
dG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgp
KTsKICAgICAgICAgIF9EZXN0cm95KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2gpOwog
ICAgICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7CiAgICAgICAg
ICB0aGlzLT5fTV9zdGFydCA9IF9fdG1wOwogICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3Jh
Z2UgPSB0aGlzLT5fTV9zdGFydCArIF9feGxlbjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
c2l6ZSgpID49IF9feGxlbikKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2koY29weShf
X3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgICAgICBfRGVzdHJveShfX2ks
IGVuZCgpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGNvcHko
X194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCB0aGlzLT5fTV9zdGFydCk7CiAgICAg
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwg
dGhpcy0+X01fZmluaXNoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy0+X01fZmluaXNoID0gdGhp
cy0+X01fc3RhcnQgKyBfX3hsZW47CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIHZl
Y3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25zdCB2
YWx1ZV90eXBlJiBfX3ZhbCkKICAgIHsKICAgICAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpCiAgICAg
IHsKICAgICAgICB2ZWN0b3IgX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAg
ICAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX24gPiBzaXpl
KCkpCiAgICAgIHsKICAgICAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICAgICAg
dGhpcy0+X01fZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKHRoaXMtPl9N
X2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4gdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcj4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9hc3NpZ25f
YXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkK
ICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog
ICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5k
KCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0FsbG9jPiB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAg
ICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKCiAgICAgIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpCiAgICAgIHsKICAg
ICAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf
X2xhc3QpKTsKICAgICAgICBfRGVzdHJveSh0aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNo
KTsKICAgICAgICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX3N0YXJ0LAogICAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7CiAgICAgICAg
dGhpcy0+X01fc3RhcnQgPSBfX3RtcDsKICAgICAgICB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSA9
IHRoaXMtPl9NX2ZpbmlzaCA9IHRoaXMtPl9NX3N0YXJ0ICsgX19sZW47CiAgICAgIH0KICAgICAg
ZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19uZXdf
ZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCB0aGlzLT5fTV9zdGFydCkpOwogICAgICAgIF9E
ZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IF9f
bmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgX0Zv
cndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkp
OwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIHRoaXMtPl9NX3N0YXJ0KTsKICAgICAgICB0
aGlzLT5fTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgdGhpcy0+
X01fZmluaXNoKTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9pbnNl
cnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBp
ZiAodGhpcy0+X01fZmluaXNoICE9IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlKQogICAgICB7CiAg
ICAgICAgX0NvbnN0cnVjdCh0aGlzLT5fTV9maW5pc2gsICoodGhpcy0+X01fZmluaXNoIC0gMSkp
OwogICAgICAgICsrdGhpcy0+X01fZmluaXNoOwogICAgICAgIF9UcCBfX3hfY29weSA9IF9feDsK
ICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICBp
dGVyYXRvcih0aGlzLT5fTV9maW5pc2gtMiksCiAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRv
cih0aGlzLT5fTV9maW5pc2gtMSkpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7CiAg
ICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np
emUgPSBzaXplKCk7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAh
PSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9N
X2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0
YXJ0KTsKICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKHRoaXMtPl9NX3N0YXJ0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAg
ICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgICAgICAgKytf
X25ld19maW5pc2g7CiAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXRlcmF0b3IodGhpcy0+X01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICB9CiAgICAgICAgY2F0
Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25l
d19maW5pc2gpOwogICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxf
X2xlbik7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9EZXN0cm95KGJl
Z2luKCksIGVuZCgpKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX3N0YXJ0LAogICAg
ICAgICAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFy
dCk7CiAgICAgICAgdGhpcy0+X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgICAg
dGhpcy0+X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgICB0aGlzLT5fTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgICB9CiAgICB9
CiMgMzE2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0
cy92ZWN0b3IudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQog
ICAgewogICAgICBpZiAoX19uICE9IDApCiAgICAgIHsKICAgICAgICBpZiAoc2l6ZV90eXBlKHRo
aXMtPl9NX2VuZF9vZl9zdG9yYWdlIC0gdGhpcy0+X01fZmluaXNoKSA+PSBfX24pCiAgICAgICAg
ICB7CiAgICAgICAgICAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICAgICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAgICAg
ICBpdGVyYXRvciBfX29sZF9maW5pc2godGhpcy0+X01fZmluaXNoKTsKICAgICAgICAgICBpZiAo
X19lbGVtc19hZnRlciA+IF9fbikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KHRoaXMtPl9NX2ZpbmlzaCAtIF9fbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCAr
PSBfX247CiAgICAgICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmlu
aXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgICAgICAgICBmaWxsKF9fcG9zaXRpb24s
IF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKHRo
aXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uIC0g
X19lbGVtc19hZnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2Nv
cHkpOwogICAgICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRl
cjsKICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zp
bmlzaCwgdGhpcy0+X01fZmluaXNoKTsKICAgICAgICAgICAgICAgdGhpcy0+X01fZmluaXNoICs9
IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmlu
aXNoLCBfX3hfY29weSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZQog
ICAgICAgICAgewogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo
KTsKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIHN0ZDo6
bWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9N
X2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25l
d19zdGFydCk7CiAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0
YXJ0KTsKICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u
KF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgICAgICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAg
ICAgfQogICAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgICAgIF9N
X2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgX0Rlc3Ryb3kodGhpcy0+X01fc3RhcnQs
IHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUodGhpcy0+X01fc3Rh
cnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0
aGlzLT5fTV9zdGFydCk7CiAgICAgICAgICAgIHRoaXMtPl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQu
YmFzZSgpOwogICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgp
OwogICAgICAgICAgICB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2Uo
KSArIF9fbGVuOwogICAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPiB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4K
ICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9yYW5nZV9pbnNlcnQoaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgICB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICAr
K19fcG9zOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPiB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZAogICAg
dmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0
aW9uLF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX24gPSBzdGQ6OmRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKHNpemVfdHlwZSh0aGlzLT5fTV9l
bmRfb2Zfc3RvcmFnZSAtIHRoaXMtPl9NX2ZpbmlzaCkgPj0gX19uKQogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwog
ICAgICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAg
ICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KHRoaXMtPl9NX2ZpbmlzaCAtIF9fbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArPSBfX247CiAg
ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBf
X29sZF9maW5pc2gpOwogICAgICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlv
bik7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9G
b3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgICAgICBhZHZhbmNlKF9fbWlk
LCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBf
X2xhc3QsIHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArPSBf
X24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoLCB0aGlzLT5fTV9maW5pc2gpOwogICAgICAgICAgICB0aGlzLT5f
TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICAgICAgY29weShfX2ZpcnN0LCBfX21p
ZCwgX19wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBzdGQ6Om1heChfX29sZF9z
aXplLCBfX24pOwogICAgICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s
ZW4pKTsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShpdGVyYXRvcih0aGlzLT5fTV9zdGFydCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsK
ICAgICAgICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyYXRvcih0aGlzLT5fTV9maW5pc2gpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
RGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgICAgIF9NX2RlYWxs
b2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIF9EZXN0cm95KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9m
aW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7
CiAgICAgICAgICB0aGlzLT5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgICAg
IHRoaXMtPl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgICAgICB0aGlzLT5f
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgICAgIH0K
ICAgICAgfQogICAgfQp9CiMgNzYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1
ZGUvYysrLzMuNC92ZWN0b3IiIDIgMwojIDcgImdvby5DIiAyCgp0ZW1wbGF0ZTxjbGFzcyBUPgpz
dHJ1Y3QgQ3JlYXRlTGVhZiB7fTsKCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBDcmVhdGVMZWFm
PHN0ZDo6dmVjdG9yPFQ+ID4KewoKCgogIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VD46OmNvbnN0X2l0
ZXJhdG9yIExlYWZfdDsKCn07Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]