c++/10316: long compile time when exceptions enabled

kunert@physik.tu-dresden.de kunert@physik.tu-dresden.de
Sat Apr 5 13:56:00 GMT 2003


>Number:         10316
>Category:       c++
>Synopsis:       long compile time when exceptions enabled
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Apr 05 13:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     kunert@physik.tu-dresden.de
>Release:        3.4
>Organization:
>Environment:
Reading specs from /opt/lib/gcc-lib/i686-pc-linux-gnu/3.4/specs
Configured with: ../configure --enable-shared --program-suffix=-34 --prefix=/opt --enable-languages=c,c++,f77 --enable-__cxa_atexit
Thread model: posix
gcc version 3.4 20030315 (experimental)
>Description:
Enabling exceptions increases compile time by a factor of 20.

$ time /opt/bin/g++-34  -c x2.ii -O -fno-exceptions
2.47user 0.10system 0:02.71elapsed 94%CPU

$ time /opt/bin/g++-34  -c x2.ii -O
70.89user 0.88system 1:12.06elapsed 99%CPU 
>How-To-Repeat:

>Fix:

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

IyAxICJ4Mi5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIngy
LmNjIgojIDEgIi9vcHQvaW5jbHVkZS9jKysvMy40L2Z1bmN0aW9uYWwiIDEgMwojIDUzICIvb3B0
L2luY2x1ZGUvYysrLzMuNC9mdW5jdGlvbmFsIiAzCiMgMSAiL29wdC9pbmNsdWRlL2MrKy8zLjQv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzUgIi9vcHQvaW5jbHVk
ZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvb3B0
L2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAz
CiMgMzkgIi9vcHQvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVm
aW5lcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjgzICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx
IDMgNAojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgMzEyICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMg
NAojIDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgNDAgIi9vcHQvaW5jbHVk
ZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNiAi
L29wdC9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg
MiAzCiMgNTQgIi9vcHQvaW5jbHVkZS9jKysvMy40L2Z1bmN0aW9uYWwiIDIgMwojIDEgIi9vcHQv
aW5jbHVkZS9jKysvMy40L2NzdGRkZWYiIDEgMwojIDQ3ICIvb3B0L2luY2x1ZGUvYysrLzMuNC9j
c3RkZGVmIiAzCgojIDEgIi9vcHQvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUxICIvb3B0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90Owoj
IDIxMyAiL29wdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRk
ZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAiL29wdC9pbmNsdWRl
L2MrKy8zLjQvY3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZf
dDsKICB1c2luZyA6OnNpemVfdDsKfQojIDU1ICIvb3B0L2luY2x1ZGUvYysrLzMuNC9mdW5jdGlv
bmFsIiAyIDMKIyAxICIvb3B0L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9mdW5jdGlvbi5oIiAx
IDMKIyA2NCAiL29wdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKIyAxMDEgIi9vcHQvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9m
dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0
IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwg
Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBm
aXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7
CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwojIDEyNyAiL29wdC9pbmNsdWRlL2Mr
Ky8zLjQvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
cGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAr
IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07CiMgMTczICIvb3B0L2luY2x1ZGUvYysr
LzMuNC9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBl
cXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194ID09IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxf
dG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAh
PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKIyAyMjIgIi9vcHQvaW5jbHVkZS9jKysv
My40L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxv
Z2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29s
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy
biBfX3ggJiYgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxf
b3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8
fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKIyAyNzEgIi9vcHQvaW5jbHVkZS9j
KysvMy40L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+
CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUg
X01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRl
JiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1l
IF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9w
cmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5h
cnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAg
cmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVk
aWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1By
ZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0
eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBf
X3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+
Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8
X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL29wdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9z
dGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVy
MXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRl
cjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1
ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwog
IH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJp
bmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0
IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu
dF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBf
QXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJp
bmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBi
aW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCks
IHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJh
dG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUp
OwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5l
IGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNv
bnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn
dW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19m
biwgX0FyZzJfdHlwZShfX3gpKTsKfQojIDQzOCAiL29wdC9pbmNsdWRlL2MrKy8zLjQvYml0cy9z
dGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xh
c3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJn
LCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGlj
OgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9f
dW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBf
UmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVy
X3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCko
X0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0
PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jl
c3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgq
X01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5j
dGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0
ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0
IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9N
X3B0cihfX3gsIF9feSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBf
QXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9B
cmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkg
ewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0
PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBj
b25zdCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1
Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1Bh
aXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3Io
KShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0
eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFp
cj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVu
YW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYg
b3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9
CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9Q
YWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1MjggIi9v
cHQvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3Qg
eyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m
dW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0
dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Jl
Zl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9S
ZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChf
UmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90
KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6
IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194
KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0
IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVm
X3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZf
dCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3Qp
IDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBf
X3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2Yp
KCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1
bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl
cmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
Y2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3Qg
eyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4g
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv
bnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2Yp
KCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJn
PiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQs
IF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZv
aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19w
ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf
VHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lk
LCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYp
KF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9U
cDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxf
VHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l
bV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6
Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxf
UmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJu
IGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9m
dW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1f
ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgpt
ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0
X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDU2ICIvb3B0L2lu
Y2x1ZGUvYysrLzMuNC9mdW5jdGlvbmFsIiAyIDMKIyAyICJ4Mi5jYyIgMgoKdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCByZXNfcHJvbW90ZSB7IHR5cGVkZWYg
VCB0OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCByZXNfcHJvbW90ZTxzaG9ydD4geyB0eXBlZGVmIGlu
dCB0OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCByZXNfcHJvbW90ZTx1bnNpZ25lZCBzaG9ydD4geyB0
eXBlZGVmIGludCB0OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCByZXNfcHJvbW90ZTxjaGFyPiB7IHR5
cGVkZWYgaW50IHQ7IH07CnRlbXBsYXRlPD4gc3RydWN0IHJlc19wcm9tb3RlPHNpZ25lZCBjaGFy
PiB7IHR5cGVkZWYgaW50IHQ7IH07CnRlbXBsYXRlPD4gc3RydWN0IHJlc19wcm9tb3RlPHVuc2ln
bmVkIGNoYXI+IHsgdHlwZWRlZiBpbnQgdDsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgcmVzX3Byb21v
dGU8Ym9vbD4geyB0eXBlZGVmIGludCB0OyB9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBy
ZXNfbnVtIHsgc3RhdGljIGNvbnN0IGludCBuID0gMTAwK3NpemVvZihUKTsgfSA7CnRlbXBsYXRl
IDw+IHN0cnVjdCByZXNfbnVtPGNoYXI+IHsgc3RhdGljIGNvbnN0IGludCBuID0gMDsgfSA7CnRl
bXBsYXRlIDw+IHN0cnVjdCByZXNfbnVtPHVuc2lnbmVkIGNoYXI+IHsgc3RhdGljIGNvbnN0IGlu
dCBuID0gMTsgfSA7CnRlbXBsYXRlIDw+IHN0cnVjdCByZXNfbnVtPHNpZ25lZCBjaGFyPiB7IHN0
YXRpYyBjb25zdCBpbnQgbiA9IDI7IH0gOwp0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcmVzX251bTxzaG9y
dD4geyBzdGF0aWMgY29uc3QgaW50IG4gPSAzOyB9IDsKdGVtcGxhdGUgPD4gc3RydWN0IHJlc19u
dW08dW5zaWduZWQgc2hvcnQ+IHsgc3RhdGljIGNvbnN0IGludCBuID0gNDsgfSA7CnRlbXBsYXRl
IDw+IHN0cnVjdCByZXNfbnVtPGludD4geyBzdGF0aWMgY29uc3QgaW50IG4gPSA1OyB9IDsKdGVt
cGxhdGUgPD4gc3RydWN0IHJlc19udW08dW5zaWduZWQgaW50PiB7IHN0YXRpYyBjb25zdCBpbnQg
biA9IDY7IH0gOwp0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcmVzX251bTxsb25nPiB7IHN0YXRpYyBjb25z
dCBpbnQgbiA9IDY7IH0gOwp0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcmVzX251bTx1bnNpZ25lZCBsb25n
PiB7IHN0YXRpYyBjb25zdCBpbnQgbiA9IDg7IH0gOwp0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcmVzX251
bTxmbG9hdD4geyBzdGF0aWMgY29uc3QgaW50IG4gPSA5OyB9IDsKdGVtcGxhdGUgPD4gc3RydWN0
IHJlc19udW08ZG91YmxlPiB7IHN0YXRpYyBjb25zdCBpbnQgbiA9IDEwOyB9IDsKdGVtcGxhdGUg
PD4gc3RydWN0IHJlc19udW08bG9uZyBkb3VibGU+IHsgc3RhdGljIGNvbnN0IGludCBuID0gMTE7
IH0gOwoKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQsIGludCBOPiBzdHJ1Y3QgcmVzdHlwZV9v
cmRlcl9hdXg7CnRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPiBzdHJ1Y3QgcmVzdHlwZV9vcmRl
cl9hdXg8UywgVCwgMT57IHR5cGVkZWYgUyB0OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3Mg
VD5zdHJ1Y3QgcmVzdHlwZV9vcmRlcl9hdXg8UywgVCwgLTE+eyB0eXBlZGVmIFQgdDsgfTsKdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZXN0eXBlX29yZGVyX2F1eDxULCBULCAwPnsgdHlwZWRl
ZiBUIHQ7IH07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCByZXN0eXBlX29yZGVyX2F1eDx1bnNpZ25lZCBp
bnQsIGxvbmcsIDA+eyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdDsgfTsKdGVtcGxhdGU8PiBzdHJ1
Y3QgcmVzdHlwZV9vcmRlcl9hdXg8bG9uZywgdW5zaWduZWQgaW50LCAwPnsgdHlwZWRlZiB1bnNp
Z25lZCBsb25nIHQ7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3MgVD4Kc3RydWN0IHJlc3R5
cGVfb3JkZXIgewogICAgc3RhdGljIGNvbnN0IGludCBzMCA9IHJlc19udW08Uz46Om47CiAgICBz
dGF0aWMgY29uc3QgaW50IHQwID0gcmVzX251bTxUPjo6bjsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
cmVzdHlwZV9vcmRlcl9hdXg8IFMsIFQsICggczAgPiB0MCApLSggczAgPCB0MCApID46OnQgdDsK
fTsKCnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+CnN0cnVjdCByZXN0eXBlIHsKcHJpdmF0ZToK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzX3Byb21vdGU8Uz46OnQgUzA7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIHJlc19wcm9tb3RlPFQ+Ojp0IFQwOwpwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1l
IHJlc3R5cGVfb3JkZXI8UzAsIFQwPjo6dCB0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3Mg
VD4Kc3RydWN0IHJlc3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgQj4Kc3RydWN0IHhw
bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbiA8QSwgQiwgdHlwZW5hbWUgcmVzdHlwZTxBLCBC
Pjo6dD4KewogICAgdHlwZWRlZiB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0IHQ7CiAgICBzdGF0
aWMgdm9pZCBhc3Nfb3AoIEEmIGEsIGNvbnN0IEImIGIgKSB7IGEgKz0gYjsgfQogICAgdCBvcGVy
YXRvcigpKCBjb25zdCBBJiBhLCBjb25zdCBCJiBiICkgY29uc3QgeyByZXR1cm4gYSArIGI7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgpzdHJ1Y3QgeG11bHRpcGxpZXMgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uIDxBLCBCLCB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0Pgp7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIHJlc3R5cGU8QSwgQj46OnQgdDsKICAgIHN0YXRpYyB2b2lkIGFz
c19vcCggQSYgYSwgY29uc3QgQiYgYiApIHsgYSAqPSBiOyB9CiAgICB0IG9wZXJhdG9yKCkoIGNv
bnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBhICogYjsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIEEsIGNsYXNzIEI+CnN0cnVjdCB4bWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uIDxBLCBCLCB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0Pgp7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIHJlc3R5cGU8QSwgQj46OnQgdDsKICAgIHN0YXRpYyB2b2lkIGFzc19vcCggQSYgYSwgY29u
c3QgQiYgYiApIHsgYSAtPSBiOyB9CiAgICB0IG9wZXJhdG9yKCkoIGNvbnN0IEEmIGEsIGNvbnN0
IEImIGIgKSBjb25zdCB7IHJldHVybiBhIC0gYjsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNs
YXNzIEI+CnN0cnVjdCB4ZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb24gPEEsIEIsIHR5
cGVuYW1lIHJlc3R5cGU8QSwgQj46OnQ+CnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzdHlwZTxB
LCBCPjo6dCB0OwogICAgc3RhdGljIHZvaWQgYXNzX29wKCBBJiBhLCBjb25zdCBCJiBiICkgeyBh
IC89IGI7IH0KICAgIHQgb3BlcmF0b3IoKSggY29uc3QgQSYgYSwgY29uc3QgQiYgYiApIGNvbnN0
IHsgcmV0dXJuIGEgLyBiOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgQj4Kc3RydWN0
IHhtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbiA8QSwgQiwgdHlwZW5hbWUgcmVzdHlw
ZTxBLCBCPjo6dD4KewogICAgdHlwZWRlZiB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0IHQ7CiAg
ICBzdGF0aWMgdm9pZCBhc3Nfb3AoIEEmIGEsIGNvbnN0IEImIGIgKSB7IGEgJT0gYjsgfQogICAg
dCBvcGVyYXRvcigpKCBjb25zdCBBJiBhLCBjb25zdCBCJiBiICkgY29uc3QgeyByZXR1cm4gYSAl
IGI7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgpzdHJ1Y3QgeHBvd2VyIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbiA8QSwgQiwgdHlwZW5hbWUgcmVzdHlwZTxBLCBCPjo6dD4Kewog
ICAgdHlwZWRlZiB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0IHQ7CiAgICB0IG9wZXJhdG9yKCko
IGNvbnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBwb3coIGEsIGIgKTsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEI+CnN0cnVjdCB4X2VxIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbiA8QSwgQiwgYm9vbD4KewogICAgdHlwZWRlZiBib29sIHQ7CiAgICB0IG9wZXJh
dG9yKCkoIGNvbnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBhID09IGI7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgpzdHJ1Y3QgeF9uZXEgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uIDxBLCBCLCBib29sPgp7CiAgICB0eXBlZGVmIGJvb2wgdDsKICAgIHQgb3Bl
cmF0b3IoKSggY29uc3QgQSYgYSwgY29uc3QgQiYgYiApIGNvbnN0IHsgcmV0dXJuIGEgIT0gYjsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEI+CnN0cnVjdCB4X2d0IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbiA8QSwgQiwgYm9vbD4KewogICAgdHlwZWRlZiBib29sIHQ7CiAgICB0IG9w
ZXJhdG9yKCkoIGNvbnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBhID4gYjsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEI+CnN0cnVjdCB4X2x0IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbiA8QSwgQiwgYm9vbD4KewogICAgdHlwZWRlZiBib29sIHQ7CiAgICB0IG9w
ZXJhdG9yKCkoIGNvbnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBhIDwgYjsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEI+CnN0cnVjdCB4X2x0ZSA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb24gPEEsIEIsIGJvb2w+CnsKICAgIHR5cGVkZWYgYm9vbCB0OwogICAgdCBv
cGVyYXRvcigpKCBjb25zdCBBJiBhLCBjb25zdCBCJiBiICkgY29uc3QgeyByZXR1cm4gYSA8PSBi
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgQj4Kc3RydWN0IHhfZ3RlIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbiA8QSwgQiwgYm9vbD4KewogICAgdHlwZWRlZiBib29sIHQ7CiAgICB0
IG9wZXJhdG9yKCkoIGNvbnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBhID49
IGI7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgpzdHJ1Y3QgeF9taW4gOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uIDxBLCBCLCB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0Pgp7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIHJlc3R5cGU8QSwgQj46OnQgdDsKICAgIHN0YXRpYyB2b2lkIGFz
c19vcCggQSYgYSwgY29uc3QgQiYgYiApIHsgaWYoIGI8YSApIGEgPSBiOyB9CiAgICB0IG9wZXJh
dG9yKCkoIGNvbnN0IEEmIGEsIGNvbnN0IEImIGIgKSBjb25zdCB7IHJldHVybiBhIDwgYiA/IGEg
OiBiOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgQj4Kc3RydWN0IHhfbWF4IDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbiA8QSwgQiwgdHlwZW5hbWUgcmVzdHlwZTxBLCBCPjo6dD4Kewog
ICAgdHlwZWRlZiB0eXBlbmFtZSByZXN0eXBlPEEsIEI+Ojp0IHQ7CiAgICBzdGF0aWMgdm9pZCBh
c3Nfb3AoIEEmIGEsIGNvbnN0IEImIGIgKSB7IGlmKCBiPmEgKSBhID0gYjsgfQogICAgdCBvcGVy
YXRvcigpKCBjb25zdCBBJiBhLCBjb25zdCBCJiBiICkgY29uc3QgeyByZXR1cm4gYSA+IGIgPyBh
IDogYjsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQT4KaW5saW5lIHR5cGVuYW1lIHhtdWx0aXBs
aWVzPEEsQT46OnQKc3FyKCBjb25zdCBBJiBhICl7IHJldHVybiBhKmE7fQoKdGVtcGxhdGUgPGNs
YXNzIEE+CmlubGluZSBpbnQgc2lnbiggQSBhICl7IHJldHVybiBhIDwgMCA/IC0xIDogYSA+IDAg
PyAxIDogMDsgfQoKCgoKdGVtcGxhdGUgPGNsYXNzIEE+CmlubGluZSB0eXBlbmFtZSByZXN0eXBl
PEEsIEE+Ojp0CnBvdzMoIEEgYSApeyByZXR1cm4gYSphKmE7IH0KIyAxODMgIngyLmNjIgp2b2lk
IGRvX3ZhbGlkX2NvdW50X2NoZWNrKCk7Cgp2b2lkIGludmFsaWQodW5zaWduZWQgaW50IGksIGNv
bnN0IGNoYXIqIG5hbWUgKTsKCgoKY2xhc3MgVmFsaWRDb3VudGVyIHsKcHVibGljOgogICAgVmFs
aWRDb3VudGVyKCBjb25zdCBjaGFyKiBoICkgOiBuYW1lXyhoKSwgbl8oMCl7fQogICAgdm9pZCBv
cGVyYXRvcisrKCl7ICsrIG5fOyB9CiAgICB2b2lkIG9wZXJhdG9yLS0oKXsgLS0gbl87IH0KICAg
IH5WYWxpZENvdW50ZXIoKTsKcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIqIG5hbWVfOwogICAgdW5z
aWduZWQgaW50IG5fOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBWYWxpZGF0b3Igewpw
dWJsaWM6CgogICAgdm9pZCB2YWxpZCgpIGNvbnN0IHt9Owpwcm90ZWN0ZWQ6CiAgICBWYWxpZGF0
b3IoKQogICAgewogICAgICAgIHZhbGlkXz0weGRlYWRiZWVmOwogICAgICAgICsrY291bnRfOwog
ICAgfQoKICAgIFZhbGlkYXRvciggY29uc3QgVmFsaWRhdG9yJiBhICkKICAgIHsKICAgICAgICBh
LnZhbGlkKCk7CiAgICAgICAgdmFsaWRfPTB4ZGVhZGJlZWY7CiAgICAgICAgKytjb3VudF87CiAg
ICB9CgogICAgflZhbGlkYXRvcigpCiAgICB7CiAgICAgICAgdmFsaWQoKTsKICAgICAgICB2YWxp
ZF89MHgxMjM0NTY3ODsKICAgICAgICAtLWNvdW50XzsKICAgIH0KCiAgICBjb25zdCBWYWxpZGF0
b3ImIG9wZXJhdG9yPSggY29uc3QgVmFsaWRhdG9yJiBhICkKICAgIHsKICAgICAgICB2YWxpZCgp
OwogICAgICAgIGEudmFsaWQoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CnByaXZhdGU6
CiAgICB1bnNpZ25lZCBpbnQgdmFsaWRfOwogICAgc3RhdGljIFZhbGlkQ291bnRlciBjb3VudF87
Cn07CgoKCgoKCgp2b2lkIHRlbnNvcl9jaGVja19mYWlsZWQoIGNvbnN0IGNoYXIqIG1lc3NhZ2Ug
KTsKCgoKdm9pZCogdGVuc29yX2FsbG9jKCB1bnNpZ25lZCBsb25nIG0gKTsKdm9pZCB0ZW5zb3Jf
ZnJlZSggdm9pZCogcCwgdW5zaWduZWQgbG9uZyBtICk7CgoKdm9pZCBhZGRfdGVuc29yX21lbW9y
eSggdW5zaWduZWQgbG9uZyBhdG0gKTsKdm9pZCBzdWJ0cmFjdF90ZW5zb3JfbWVtb3J5KCB1bnNp
Z25lZCBsb25nIGF0bSApOwoKCnVuc2lnbmVkIGxvbmcgcXVlcnlfdGVuc29yX21lbW9yeSgpOwoK
CnVuc2lnbmVkIGxvbmcgcXVlcnlfbWF4X3RlbnNvcl9tZW1vcnkoKTsKCgoKdm9pZCBzZXRfdGVu
c29yX21lbW9yeV9saW1pdCggdW5zaWduZWQgbG9uZyBtICk7CgpjbGFzcyBlbXB0eV90ZW5zb3J7
fTsKIyAyNzYgIngyLmNjIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUkMgOiBwdWJsaWMgVmFs
aWRhdG9yPFJDPFQ+ID57CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmNf
c2l6ZTsKCgogICAgc3RhdGljIFQqIGNyZWF0ZV96ZXJvKCBpbnQgbiApOwogICAgc3RhdGljIFQq
IGNyZWF0ZV9lbXB0eSggaW50IG4gKTsKCiAgICBzdGF0aWMgVCogY3JlYXRlX2NvcHkoIGludCBu
LCBjb25zdCBUKiBhICk7CiAgICBzdGF0aWMgVCogcmMyZGF0YSggUkMqIHAgKXsgcC0+dmFsaWQo
KTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCBwICkgKyByY19zaXplOyB9CiAgICBzdGF0
aWMgUkMqIGRhdGEycmMoIFQqIHAgKXsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UkMqPiggcC1y
Y19zaXplICk7IH0KCiAgICBib29sIHNoYXJlZCgpIGNvbnN0IHsgdmFsaWQoKTsgcmV0dXJuIHJj
Xz4xOyB9CiAgICB2b2lkIHN1YnJlZiAoKSB7IHZhbGlkKCk7IHJjXy0tOyBpZiggcmNfID09IDAg
KSBkZXN0cm95KCk7IH0KICAgIHZvaWQgYWRkcmVmKCkgeyB2YWxpZCgpOyByY18rKzsgfQpwcml2
YXRlOgogICAgaW50IHNpemUoKSBjb25zdCB7IHZhbGlkKCk7IHJldHVybiBzaXplXzsgfQogICAg
c3RhdGljIFQqIGNyZWF0ZV91bmluaXQoIGludCBuICk7CiAgICBSQyggaW50IHNpemUgKSA6IHNp
emVfKCBzaXplICksIHJjXygxKXt9CiAgICBSQyggY29uc3QgUkMmIGEgKTsKICAgIHZvaWQgZGVz
dHJveSAoKTsKcHJpdmF0ZToKCiAgICBjb25zdCBpbnQgc2l6ZV87CgogICAgaW50IHJjXzsKfTsK
CgoKdGVtcGxhdGU8Y2xhc3MgVD4KY29uc3QgdW5zaWduZWQgaW50IFJDPFQ+OjpyY19zaXplID0g
KCBzaXplb2YoUkM8VD4pLTEgKSAvICggc2l6ZW9mKFQpICkgKyAxOwoKCgoKCnRlbXBsYXRlPGNs
YXNzIFQ+CmNsYXNzIFRSY0Jhc2UgOiBwdWJsaWMgVmFsaWRhdG9yPFRSY0Jhc2U8VD4gPgp7CnB1
YmxpYzoKICAgIHN0YXRpYyBjb25zdCBib29sIGxpbmVhciA9IHRydWU7CiAgICB0eXBlZGVmIFQg
dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CnByb3RlY3RlZDoKICAgIFRSY0Jh
c2UoIGludCBuPTAgKTogc2l6ZV8obiksIGRhdGFfICggUkM8VD46OmNyZWF0ZV96ZXJvKCBuICkg
KSB7fQogICAgVFJjQmFzZSggaW50IG4sIGVtcHR5X3RlbnNvciApOiBzaXplXyhuKSwgZGF0YV8g
KCBSQzxUPjo6Y3JlYXRlX2VtcHR5KCBuICkgKSB7fQogICAgVFJjQmFzZSggaW50IG4sIGNvbnN0
IFQqIHAgKSA6IHNpemVfKG4pLCBkYXRhXyggUkM8VD46OmNyZWF0ZV9jb3B5KCBuLCBwICkgKXt9
CiAgICBUUmNCYXNlKCBjb25zdCBUUmNCYXNlJiBhICkgOiBWYWxpZGF0b3I8VFJjQmFzZTxUPiA+
KCBhICksIHNpemVfKCBhLnNpemUoKSApLCBkYXRhXyggYS5kYXRhKCkgKQogICAgICAgICB7IGdl
dHJjKCktPmFkZHJlZigpOyB9CiAgICB+VFJjQmFzZSgpeyBnZXRyYygpLT5zdWJyZWYoKTsgfQpw
dWJsaWM6CgoKCiAgICB2b2lkIGludmFsaWRhdGUoKXsgaWYoIGdldHJjKCktPnNoYXJlZCgpICkg
dW5zaGFyZSgpOyB9CgoKICAgIHZvaWQgaW52YWxpZGF0ZV9ub2NvcHkoKXsgaWYoIGdldHJjKCkt
PnNoYXJlZCgpICkgdW5zaGFyZV9ub2NvcHkoKTsgfQoKCgogICAgaW50IHNpemUoKSBjb25zdCB7
IHJldHVybiBzaXplXzsgfQogICAgdW5zaWduZWQgbG9uZyBtZW1vcnkoKSBjb25zdCB7IHJldHVy
biBzaXplKCkgKiAodW5zaWduZWQgbG9uZykgc2l6ZW9mKFQpOyB9CiMgMzUxICJ4Mi5jYyIKICAg
IFQmIHVnZXQoIGludCBpICkgeyAoKHZvaWQpMCk7IHJldHVybiBkYXRhX1tpXTsgfQoKICAgIGNv
bnN0IFQmIHVnZXQoIGludCBpICkgY29uc3QgeyAoKHZvaWQpMCk7IHJldHVybiBkYXRhX1tpXTsg
fQoKCgoKCgogICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KCiAg
ICBUKiBiZWdpbigpeyBpbnZhbGlkYXRlKCk7IHJldHVybiBkYXRhKCk7IH0KICAgIGNvbnN0IFQq
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKSArIHNpemUoKTsgfQogICAgVCogZW5kKCl7IGlu
dmFsaWRhdGUoKTsgcmV0dXJuIGRhdGEoKSArIHNpemUoKTsgfQoKICAgIGNvbnN0IFQmIGJhY2so
KSBjb25zdCB7IHJldHVybiAqKCBkYXRhKCkgKyBzaXplKCkgLSAxKTsgfQogICAgVCYgYmFjaygp
IHsgaW52YWxpZGF0ZSgpOyByZXR1cm4gKiggZGF0YSgpICsgc2l6ZSgpIC0gMSk7IH0KCgpwcm90
ZWN0ZWQ6CiAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgVFJjQmFzZSAmIGIgKTsKcHJpdmF0ZToK
ICAgIFQqIGRhdGEoKSBjb25zdCB7IHZhbGlkKCk7IHJldHVybiBkYXRhXzsgfQogICAgdm9pZCB1
bnNoYXJlKCk7CiAgICB2b2lkIHVuc2hhcmVfbm9jb3B5KCk7CiAgICBSQzxUPiogZ2V0cmMoKSBj
b25zdCB7IHZhbGlkKCk7IHJldHVybiBSQzxUPjo6ZGF0YTJyYyggZGF0YV8gKTsgfQpwcml2YXRl
OgogICAgaW50IHNpemVfOwogICAgVCogX19yZXN0cmljdF9fIGRhdGFfOwp9OwojIDM5NSAieDIu
Y2MiCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE0+CmNsYXNzIFRlbnNvcnsKcHJpdmF0ZToKCgoK
CiAgICBUZW5zb3IoKTsKcHVibGljOgojIDQxMiAieDIuY2MiCiAgICB2b2lkIGludmFsaWRhdGUo
KTsKCgoKCgoKCiAgICBzdGF0aWMgY29uc3QgaW50IHJhbms7CiMgNDI5ICJ4Mi5jYyIKICAgIHN0
YXRpYyBjb25zdCBib29sIGxpbmVhcjsKCgoKCgogICAgaW50IHNpemUoKSBjb25zdDsKIyA0NDUg
IngyLmNjIgogICAgaW50IGRpbTEoKSBjb25zdDsKCgoKCgogICAgaW50IGRpbTIoKSBjb25zdDsK
CgoKCgogICAgaW50IGRpbTMoKSBjb25zdDsKCgoKCgogICAgaW50IGRpbTQoKSBjb25zdDsKCn07
CgoKCnRlbXBsYXRlPGNsYXNzIE0xLCBjbGFzcyBNMj4gc3RydWN0IEluZGV4VHlwZTI7CnRlbXBs
YXRlPGNsYXNzIE0xLCBjbGFzcyBNMiwgY2xhc3MgTTM+IHN0cnVjdCBJbmRleFR5cGUzOwp0ZW1w
bGF0ZTxjbGFzcyBNMSwgY2xhc3MgTTIsIGNsYXNzIE0zLCBjbGFzcyBNND4gc3RydWN0IEluZGV4
VHlwZTQ7CiMgNDg0ICJ4Mi5jYyIKc3RydWN0IFRaZXJvU2l6ZUJhc2UgOiBwdWJsaWMgVmFsaWRh
dG9yPFRaZXJvU2l6ZUJhc2U+IHsKICAgIHZvaWQgaW52YWxpZGF0ZSgpe30KICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFuaz0tMTsKICAgIHN0YXRpYyBjb25zdCBib29sIGxpbmVhcj1mYWxzZTsKICAg
IGludCBkaW0xKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KICAgIGludCBkaW0yKCkgY29uc3QgeyBy
ZXR1cm4gLTE7IH0KICAgIGludCBkaW0zKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KICAgIGludCBk
aW00KCkgY29uc3QgeyByZXR1cm4gLTE7IH0KfTsKCgoKdGVtcGxhdGU8Ym9vbCBiPgpjbGFzcyBy
YW5rX2RvZXNfbm90X21hdGNoOwoKdGVtcGxhdGUgPGJvb2wgYj4KaW5saW5lIHZvaWQgUmFua0Nv
bXBhcmUoKSB7IHJldHVybiByYW5rX2RvZXNfbm90X21hdGNoPGI+KCk7IH0KCnRlbXBsYXRlIDw+
CmlubGluZSB2b2lkIFJhbmtDb21wYXJlPHRydWU+KCkgeyB9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBU
PgpjbGFzcyBUZW5zb3JDb21tYQp7CnB1YmxpYzoKICAgIFRlbnNvckNvbW1hKCBUKiBhLCBUKiBi
LCBUIHQgKTsKICAgIFRlbnNvckNvbW1hKCBUZW5zb3JDb21tYSYgdCApOwogICAgdm9pZCBwdXNo
KCBjb25zdCBUJiB0ICkgeyBpZiggIShwXzxlbmRfKSApIHRlbnNvcl9jaGVja19mYWlsZWQoICJU
b28gbWFueSBpbml0aWFsaXplcnMgaW4gY29tbWEgc2VwYXJhdGVkIGxpc3QiICk7OyAqcF8rKyA9
IHQ7IH0KICAgIH5UZW5zb3JDb21tYSgpeyBpZiggIShwXz09ZW5kXykgKSB0ZW5zb3JfY2hlY2tf
ZmFpbGVkKCAiVG9vIGZldyBpbml0aWFsaXplcnMgaW4gY29tbWEgc2VwYXJhdGVkIGxpc3QiICk7
OyB9CiAgICBUZW5zb3JDb21tYSYgb3BlcmF0b3IsKCBjb25zdCBUJiBiICl7IHB1c2goYik7IHJl
dHVybiAqdGhpczsgfQoKCiAgICBUKiBwXzsKICAgIFQqIGNvbnN0IGVuZF87Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBUPgpUZW5zb3JDb21tYTwgVCA+OjpUZW5zb3JDb21tYSggVCogYSwgVCogYiwgVCB0
ICkKICAgIDogcF8oIGEgKSwKICAgICAgZW5kXyggYiApCnsKICAgIHB1c2goIHQgKTsKfQoKdGVt
cGxhdGU8Y2xhc3MgVD4KVGVuc29yQ29tbWE8IFQgPjo6VGVuc29yQ29tbWEoIFRlbnNvckNvbW1h
PFQ+JiB0ICkKICAgIDogcF8oIHQucF8gKSwKICAgICAgZW5kXyggdC5lbmRfICkKewogICAgdC5w
XyA9IHQuZW5kXzsKfQojIDU1OSAieDIuY2MiCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+CkEm
IHRhc3NpZ24oIEEmIGEsIGNvbnN0IEImIGIgKTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+
CkEmIHRhc3NpZ25fd2l0aF9zaXplX2FkanVzdG1lbnQoIEEmIGEsIGNvbnN0IEImIGIgKQp7CiAg
ICBpZiggYS5zaXplKCkgPT0gMCAmJiBCOjpyYW5rID4gMCApIHJldHVybiBhPUEoYik7CiAgICBl
bHNlIHJldHVybiB0YXNzaWduKCBhLCBiICk7Cn0KCgoKCgoKCnRlbXBsYXRlPCBjbGFzcyBGLCBj
bGFzcyBBLCBjbGFzcyBCPgpBJiB0YXNzaWduX29wKCBBJiBhLCBjb25zdCBCJiBiICk7CgoKCgp0
ZW1wbGF0ZSA8aW50IE4+IGNsYXNzIFRJbmRleHt9OwojIDU5MiAieDIuY2MiCnRlbXBsYXRlIDw+
IGNsYXNzIFRlbnNvcjwgaW50LCBUSW5kZXg8MT4gPiA6IHB1YmxpYyBUWmVyb1NpemVCYXNlCnsK
cHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCByYW5rPTE7CiAgICBleHBsaWNpdCBUZW5zb3Io
IGludCBuID0gLTEgKSA6IGRfKG4pe30KICAgIGludCBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0
IHsgcmV0dXJuIGk7IH0KICAgIGludCBvcGVyYXRvcigpKCBpbnQgaSwgaW50ICwgaW50ID0wLCBp
bnQ9MCApIGNvbnN0IHsgcmV0dXJuIGk7IH0KICAgIGludCBpbmRleF9zaXplKCkgY29uc3QgeyBy
ZXR1cm4gZF87IH0KICAgIGludCBkaW0xKCkgY29uc3QgeyByZXR1cm4gZF87IH0KcHJpdmF0ZToK
ICAgIGNvbnN0IGludCBkXzsKfTsKCgoKdGVtcGxhdGUgPD4gY2xhc3MgVGVuc29yPCBpbnQsIFRJ
bmRleDwyPiA+IDogcHVibGljIFRaZXJvU2l6ZUJhc2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29u
c3QgaW50IHJhbms9MjsKICAgIGV4cGxpY2l0IFRlbnNvciggaW50IG4gPSAtMSApIDogZF8obil7
fQogICAgaW50IG9wZXJhdG9yKCkoIGludCAsIGludCBqLCBpbnQgPTAsIGludCA9MCApIGNvbnN0
IHsgcmV0dXJuIGo7IH0KICAgIGludCBpbmRleF9zaXplKCkgY29uc3QgeyByZXR1cm4gZF87IH0K
ICAgIGludCBkaW0yKCkgY29uc3QgeyByZXR1cm4gZF87IH0KcHJpdmF0ZToKICAgIGNvbnN0IGlu
dCBkXzsKfTsKCgoKdGVtcGxhdGUgPD4gY2xhc3MgVGVuc29yPCBpbnQsIFRJbmRleDwzPiA+IDog
cHVibGljIFRaZXJvU2l6ZUJhc2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IHJhbms9
MzsKICAgIGV4cGxpY2l0IFRlbnNvciggaW50IG4gPSAtMSApIDogZF8obil7fQogICAgaW50IG9w
ZXJhdG9yKCkoIGludCAsIGludCAsIGludCBrLCBpbnQ9MCApIGNvbnN0IHsgcmV0dXJuIGs7IH0K
ICAgIGludCBpbmRleF9zaXplKCkgY29uc3QgeyByZXR1cm4gZF87IH0KICAgIGludCBkaW0zKCkg
Y29uc3QgeyByZXR1cm4gZF87IH0KcHJpdmF0ZToKICAgIGNvbnN0IGludCBkXzsKfTsKCgoKdGVt
cGxhdGUgPD4gY2xhc3MgVGVuc29yPCBpbnQsIFRJbmRleDw0PiA+IDogcHVibGljIFRaZXJvU2l6
ZUJhc2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IHJhbms9NDsKICAgIGV4cGxpY2l0
IFRlbnNvciggaW50IG4gPSAtMSApIDogZF8obil7fQogICAgaW50IG9wZXJhdG9yKCkoIGludCAs
IGludCAsIGludCAsIGludCBsICkgY29uc3QgeyByZXR1cm4gbDsgfQogICAgaW50IGluZGV4X3Np
emUoKSBjb25zdCB7IHJldHVybiBkXzsgfQogICAgaW50IGRpbTQoKSBjb25zdCB7IHJldHVybiBk
XzsgfQpwcml2YXRlOgogICAgY29uc3QgaW50IGRfOwp9OwoKdHlwZWRlZiBUZW5zb3I8aW50LCBU
SW5kZXg8MT4gPiBJbmRleDE7CnR5cGVkZWYgVGVuc29yPGludCwgVEluZGV4PDI+ID4gSW5kZXgy
Owp0eXBlZGVmIFRlbnNvcjxpbnQsIFRJbmRleDwzPiA+IEluZGV4MzsKdHlwZWRlZiBUZW5zb3I8
aW50LCBUSW5kZXg8ND4gPiBJbmRleDQ7CgpleHRlcm4gY29uc3QgSW5kZXgxIGluZGV4MTsKZXh0
ZXJuIGNvbnN0IEluZGV4MiBpbmRleDI7CmV4dGVybiBjb25zdCBJbmRleDMgaW5kZXgzOwpleHRl
cm4gY29uc3QgSW5kZXg0IGluZGV4NDsKCgoKCnRlbXBsYXRlPCBjbGFzcyBTLCBjbGFzcyBJID4g
Y2xhc3MgSW5kZXhlZDsKIyA2NzAgIngyLmNjIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUywg
Y2xhc3MgST4KY2xhc3MgVGVuc29yPFQsIEluZGV4ZWQ8IFMsIEkgPiA+IDogcHVibGljIFRaZXJv
U2l6ZUJhc2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IHJhbms9STo6cmFuazsKICAg
IFRlbnNvciggUyYgcywgY29uc3QgSSAmIGluZCApIDogc18ocyksIGluZF8oaW5kKSB7fQogICAg
Y29uc3QgVCYgb3BlcmF0b3JbXSggaW50IG4gKSBjb25zdCB7IHJldHVybiBzXy51Z2V0KCBpbmRf
W25dICkgOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcigpKCBpbnQgcCwgaW50IHEgKSBjb25zdCB7
IHJldHVybiBzXy51Z2V0KCBpbmRfKHAsIHEpICkgOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcigp
KCBpbnQgcCwgaW50IHEsIGludCByICkgY29uc3QgeyByZXR1cm4gc18udWdldCggaW5kXyhwLCBx
LCByKSApIDsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IoKSggaW50IHAsIGludCBxLCBpbnQgciwg
aW50IHMgKSBjb25zdCB7IHJldHVybiBzXy51Z2V0KCBpbmRfKHAsIHEsIHIsIHMpICkgOyB9CiAg
ICBUJiBnZXQoIGludCBuICkgeyByZXR1cm4gc18udWdldCggaW5kX1tuXSApIDsgfQogICAgVCYg
Z2V0KCBpbnQgcCwgaW50IHEgKSB7IHJldHVybiBzXy51Z2V0KCBpbmRfKHAsIHEpICkgOyB9CiAg
ICBUJiBnZXQoIGludCBwLCBpbnQgcSwgaW50IHIgKSB7IHJldHVybiBzXy51Z2V0KCBpbmRfKHAs
IHEsIHIpICkgOyB9CiAgICBUJiBnZXQoIGludCBwLCBpbnQgcSwgaW50IHIsIGludCBzICkgeyBy
ZXR1cm4gc18udWdldCggaW5kXyhwLCBxLCByLCBzKSApIDsgfQoKCiAgICBpbnQgZGltMSgpIGNv
bnN0IHsgcmV0dXJuIGluZF8uZGltMSgpOyB9CiAgICBpbnQgZGltMigpIGNvbnN0IHsgcmV0dXJu
IGluZF8uZGltMigpOyB9CiAgICBpbnQgZGltMygpIGNvbnN0IHsgcmV0dXJuIGluZF8uZGltMygp
OyB9CiAgICBpbnQgZGltNCgpIGNvbnN0IHsgcmV0dXJuIGluZF8uZGltNCgpOyB9CiAgICB0ZW1w
bGF0ZTxjbGFzcyBUMSwgY2xhc3MgTTE+CiAgICBUZW5zb3ImIG9wZXJhdG9yPSggY29uc3QgVGVu
c29yPFQxLCBNMT4mIGEgKXsgc18uaW52YWxpZGF0ZSgpOyByZXR1cm4gdGFzc2lnbiggKnRoaXMs
IGEgKTsgfQogICAgVGVuc29yJiBvcGVyYXRvcj0oIGNvbnN0IFRlbnNvciYgYSApeyBpZiggdGhp
cz09JmEgKSByZXR1cm4gKnRoaXM7IHNfLmludmFsaWRhdGUoKTsgcmV0dXJuIHRhc3NpZ24oICp0
aGlzLCBhICk7IH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBUMiwgY2xhc3MgTTI+CiAgICBpbmxpbmUg
Y29uc3QgVGVuc29yJiBvcGVyYXRvciArPSAoIGNvbnN0IFRlbnNvcjxUMiwgTTI+JiBiICl7IHJl
dHVybiB0YXNzaWduX29wPHhwbHVzPFQsIFQyPiA+KCAqdGhpcywgYiApOyB9CgogICAgdGVtcGxh
dGU8Y2xhc3MgVDIsIGNsYXNzIE0yPgogICAgaW5saW5lIGNvbnN0IFRlbnNvciYgb3BlcmF0b3Ig
LT0gKCBjb25zdCBUZW5zb3I8VDIsIE0yPiYgYiApeyByZXR1cm4gdGFzc2lnbl9vcDx4bWludXM8
VCwgVDI+ID4oICp0aGlzLCBiICk7IH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBUMiwgY2xhc3MgTTI+
CiAgICBpbmxpbmUgY29uc3QgVGVuc29yJiBvcGVyYXRvciAqPSAoIGNvbnN0IFRlbnNvcjxUMiwg
TTI+JiBiICl7IHJldHVybiB0YXNzaWduX29wPHhtdWx0aXBsaWVzPFQsIFQyPiA+KCAqdGhpcywg
YiApOyB9CgogICAgdGVtcGxhdGU8Y2xhc3MgVDIsIGNsYXNzIE0yPgogICAgaW5saW5lIGNvbnN0
IFRlbnNvciYgb3BlcmF0b3IgLz0gKCBjb25zdCBUZW5zb3I8VDIsIE0yPiYgYiApeyByZXR1cm4g
dGFzc2lnbl9vcDx4ZGl2aWRlczxULCBUMj4gPiggKnRoaXMsIGIgKTsgfQoKcHJpdmF0ZToKICAg
IFMmIHNfOwogICAgY29uc3QgSSBpbmRfOwp9OwoKCgoKCnRlbXBsYXRlPGludCBOPiBzdHJ1Y3Qg
VGVuc29yUmFua3t9OwoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIE0+CmlubGluZSBpbnQgbWF4
ZGltX2F1eCggVGVuc29yUmFuazwxPiwgY29uc3QgVGVuc29yPFQsIE0+JiBhICkKewogICAgcmV0
dXJuIGEuZGltMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgTT4KaW5saW5lIGludCBt
YXhkaW1fYXV4KCBUZW5zb3JSYW5rPDI+LCBjb25zdCBUZW5zb3I8VCwgTT4mIGEgKQp7CiAgICBy
ZXR1cm4gYS5kaW0yKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBNPgppbmxpbmUgaW50
IG1heGRpbV9hdXgoIFRlbnNvclJhbms8Mz4sIGNvbnN0IFRlbnNvcjxULCBNPiYgYSApCnsKICAg
IHJldHVybiBhLmRpbTMoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIE0+CmlubGluZSBp
bnQgbWF4ZGltX2F1eCggVGVuc29yUmFuazw0PiwgY29uc3QgVGVuc29yPFQsIE0+JiBhICkKewog
ICAgcmV0dXJuIGEuZGltNCgpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBNPgppbmxp
bmUgaW50IG1heGRpbSggY29uc3QgVGVuc29yPFQsIE0+JiBhICkKewogICAgcmV0dXJuIG1heGRp
bV9hdXgoIFRlbnNvclJhbms8IFRlbnNvcjxULCBNPjo6cmFuayA+KCksIGEgKTsKfQoKaW5saW5l
IHZvaWQgY2hlY2tfZGltZW5zaW9ucyggaW50IGEsIGludCBiICkKewogICAgKCh2b2lkKTApOwog
ICAgKCh2b2lkKTApOwp9CiMgNzYyICJ4Mi5jYyIKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIGNv
bnN0IFQmIGluZGV4ZGltKCBjb25zdCBUJiB0LCBpbnQgKXsgcmV0dXJuIHQ7IH0KCnRlbXBsYXRl
PGludCBOPgppbmxpbmUgVGVuc29yPGludCwgVEluZGV4PE4+ID4gaW5kZXhkaW0oIGNvbnN0IFRl
bnNvcjxpbnQsIFRJbmRleDxOPiA+JiB0LCBpbnQgZCApCnsKICAgIGlmKCB0LmluZGV4X3NpemUo
KSA+PTAgKSByZXR1cm4gdDsKICAgIGVsc2UgcmV0dXJuIFRlbnNvcjxpbnQsIFRJbmRleDxOPiA+
KGQpOwp9CgoKCgp0ZW1wbGF0ZTxpbnQgTj4gY2xhc3MgVG5kIHt9OwoKdHlwZWRlZiBUbmQ8MT4g
VDFkOwp0eXBlZGVmIFRuZDwyPiBUMmQ7CnR5cGVkZWYgVG5kPDM+IFQzZDsKdHlwZWRlZiBUbmQ8
ND4gVDRkOwoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFRlbnNvcjxULCBUMWQgPiA6IHB1
YmxpYyBUUmNCYXNlPFQ+CnsKcHVibGljOgogICAgdHlwZWRlZiBUUmNCYXNlPFQ+IEJhc2U7CiAg
ICBzdGF0aWMgY29uc3QgaW50IHJhbmsgPSAxOwoKICAgIFRlbnNvcigpe30KICAgIGV4cGxpY2l0
IFRlbnNvciggaW50IG4gKSA6IEJhc2Uobil7fQogICAgZXhwbGljaXQgVGVuc29yKCBpbnQgbiwg
ZW1wdHlfdGVuc29yIGUgKSA6IEJhc2UobiwgZSl7fQoKICAgIFRlbnNvciggaW50IG4sIGNvbnN0
IFQqIHAgKSA6IEJhc2UobiwgcCl7fQoKCgogICAgdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIE0x
PgogICAgVGVuc29yKCBjb25zdCBUZW5zb3I8VDEsIE0xPiYgYSApIDogQmFzZSggYS5kaW0xKCks
IGVtcHR5X3RlbnNvcigpICl7IHRhc3NpZ24oICp0aGlzLCBhICk7IH0KCiAgICB0ZW1wbGF0ZTxj
bGFzcyBNMSwgY2xhc3MgVDE+CiAgICBUZW5zb3ImIG9wZXJhdG9yPSggY29uc3QgVGVuc29yPFQx
LCBNMT4mIGEgKXsgcmV0dXJuIHRhc3NpZ25fd2l0aF9zaXplX2FkanVzdG1lbnQoICp0aGlzLCBh
ICk7IH0KCiAgICBUZW5zb3JDb21tYTxUPiBvcGVyYXRvcj0oIGNvbnN0IFQmIHQgKXsgaW52YWxp
ZGF0ZSgpOyBUZW5zb3JDb21tYTxUPiB4KCBiZWdpbigpLCBlbmQoKSwgdCApOyByZXR1cm4geDsg
fQoKICAgIGNvbnN0IFQmIGdldCggaW50IGkgKSBjb25zdCB7IHJldHVybiB1Z2V0KCBpICk7IH0K
ICAgIFQmIGdldCggaW50IGkgKSB7IHJldHVybiB1Z2V0KCBpKTsgfQogICAgY29uc3QgVCYgb3Bl
cmF0b3JbXSggaW50IGEgKSBjb25zdCB7ICgodm9pZCkwKTsgcmV0dXJuIGdldChhKTsgfQogICAg
VCYgb3BlcmF0b3JbXSggaW50IGEgKXsgKCh2b2lkKTApOyBpbnZhbGlkYXRlKCk7IHJldHVybiBn
ZXQoYSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgTTE+CiAgICBUZW5zb3I8VCwgSW5kZXhlZDxj
b25zdCBCYXNlLCBUZW5zb3I8aW50LE0xPiA+ID4gb3BlcmF0b3JbXSggY29uc3QgVGVuc29yPGlu
dCwgTTE+JiBpICkgY29uc3QKICAgICAgICB7IHJldHVybiBUZW5zb3I8VCwgSW5kZXhlZDxjb25z
dCBCYXNlLCBUZW5zb3I8aW50LCBNMT4gPiA+KCAqdGhpcywgaW5kZXhkaW0oIGksIHNpemUoKSAp
ICk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgTTE+CiAgICBUZW5zb3I8VCwgSW5kZXhlZDxCYXNl
LCBUZW5zb3I8aW50LCBNMT4gPiA+IG9wZXJhdG9yW10oIGNvbnN0IFRlbnNvcjxpbnQsIE0xPiYg
aSApCiAgICAgICAgeyByZXR1cm4gVGVuc29yPFQsIEluZGV4ZWQ8QmFzZSwgVGVuc29yPGludCwg
TTE+ID4gPiggKnRoaXMsIGluZGV4ZGltKGksIHNpemUoKSApICk7IH0KCiAgICB2b2lkIHJlc2l6
ZSggaW50IGkgKXsgaWYoIHNpemUoKSAhPSBpICkgKCp0aGlzKSA9IFRlbnNvcihpKTsgZWxzZSAo
KnRoaXMpID0gc2NhbGFyKCBUKCkgKTsgfQogICAgdm9pZCByZXNpemUoIGludCBpLCBlbXB0eV90
ZW5zb3IgZSApeyBpZiggc2l6ZSgpICE9IGkgKSAoKnRoaXMpID0gVGVuc29yKGksIGUpOyB9CiAg
ICBpbnQgZGltMSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQpwcml2YXRlOgogICAgaW50IHNp
emVfOwp9OwoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFRlbnNvcjxULCBUMmQgPiA6IHB1
YmxpYyBUUmNCYXNlPFQ+CnsKcHVibGljOgogICAgdHlwZWRlZiBUUmNCYXNlPFQ+IEJhc2U7CiAg
ICBzdGF0aWMgY29uc3QgaW50IHJhbmsgPSAyOwoKICAgIFRlbnNvcigpIDogQmFzZSgwKSwgZGlt
MV8oMCksIGRpbTJfKDApe30KICAgIGV4cGxpY2l0IFRlbnNvciggaW50IG4gKSA6IEJhc2Uobipu
KSwgZGltMV8obiksIGRpbTJfKG4pe30KICAgIFRlbnNvciggaW50IG4sIGNvbnN0IFQqIHAgKSA6
IEJhc2UobipuLCBwKSwgZGltMV8obiksIGRpbTJfKG4pe30KICAgIFRlbnNvciggaW50IGEsIGlu
dCBiICkgOiBCYXNlKGEqYiksIGRpbTFfKGEpLCBkaW0yXyhiKXt9CiAgICBUZW5zb3IoIGludCBh
LCBpbnQgYiAsIGVtcHR5X3RlbnNvciBlICkgOiBCYXNlKGEqYiwgZSApLCBkaW0xXyhhKSwgZGlt
Ml8oYil7fQogICAgVGVuc29yKCBpbnQgYSwgaW50IGIsIGNvbnN0IFQqIHAgKSA6IEJhc2UoYSpi
LCBwKSwgZGltMV8oYSksIGRpbTJfKGIpe30KCgoKCiAgICB0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xh
c3MgTTE+CiAgICBUZW5zb3IoIGNvbnN0IFRlbnNvcjxUMSwgTTE+JiBhICk7CgogICAgdGVtcGxh
dGU8Y2xhc3MgTTEsIGNsYXNzIFQxPgogICAgVGVuc29yJiBvcGVyYXRvcj0oIGNvbnN0IFRlbnNv
cjxUMSwgTTE+JiBhICl7IHJldHVybiB0YXNzaWduX3dpdGhfc2l6ZV9hZGp1c3RtZW50KCAqdGhp
cywgYSApOyB9CgogICAgVGVuc29yQ29tbWE8VD4gb3BlcmF0b3I9KCBjb25zdCBUJiB0ICl7IGlu
dmFsaWRhdGUoKTsgVGVuc29yQ29tbWE8VD4geCggYmVnaW4oKSwgZW5kKCksIHQgKTsgcmV0dXJu
IHg7IH0KCiAgICBUJiBnZXQoIGludCBhLCBpbnQgYiApeyByZXR1cm4gdWdldCggdG9saW4oYSwg
YikpOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcigpKCBpbnQgYSwgaW50IGIgKSBjb25zdCB7IHJl
dHVybiB1Z2V0KCB0b2xpbihhLCBiICkpOyB9CiAgICBUJiBvcGVyYXRvcigpKCBpbnQgYSwgaW50
IGIgKXsgaW52YWxpZGF0ZSgpOyByZXR1cm4gdWdldCggdG9saW4oIGEsIGIgKSk7IH0KCgoKCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgTTEsIGNsYXNzIE0yPgogICAgVGVuc29yPFQsIEluZGV4ZWQ8Y29u
c3QgQmFzZSwgdHlwZW5hbWUgSW5kZXhUeXBlMjxNMSwgTTI+Ojp0ID4gPgogICAgb3BlcmF0b3Io
KSggY29uc3QgTTEmIGksIGNvbnN0IE0yJiBqICkgY29uc3QKICAgIHsgcmV0dXJuIFRlbnNvcjxU
LCBJbmRleGVkPGNvbnN0IEJhc2UsIHR5cGVuYW1lIEluZGV4VHlwZTI8TTEsIE0yPjo6dCA+ID4o
ICp0aGlzLCB0b2xpbihpLGopICk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgTTEsIGNsYXNzIE0y
PgogICAgVGVuc29yPFQsIEluZGV4ZWQ8QmFzZSwgdHlwZW5hbWUgSW5kZXhUeXBlMjxNMSwgTTI+
Ojp0ID4gPgogICAgb3BlcmF0b3IoKSggY29uc3QgTTEmIGksIGNvbnN0IE0yJiBqICkKICAgIHsg
cmV0dXJuIFRlbnNvcjxULCBJbmRleGVkPEJhc2UsIHR5cGVuYW1lIEluZGV4VHlwZTI8TTEsIE0y
Pjo6dCA+ID4oICp0aGlzLCB0b2xpbihpLGopICk7IH0KCgogICAgdm9pZCByZXNpemUoIGludCBp
LCBpbnQgaiApeyBpZiggZGltMSgpICE9IGkgfHwgZGltMigpICE9IGogKSAoKnRoaXMpID0gVGVu
c29yKGksIGopOyBlbHNlICgqdGhpcykgPSBzY2FsYXIoIFQoKSApOyB9CiAgICB2b2lkIHJlc2l6
ZSggaW50IGksIGludCBqLCBlbXB0eV90ZW5zb3IgZSApeyBpZiggZGltMSgpICE9IGkgfHwgZGlt
MigpICE9IGogKSAoKnRoaXMpID0gVGVuc29yKGksIGosIGUpOyB9CiAgICBpbnQgdG9saW4oIGlu
dCBhLCBpbnQgYiApIGNvbnN0IHsgcmV0dXJuIGErYipkaW0xXzsgfQoKICAgIHRlbXBsYXRlPGNs
YXNzIE0xLCBjbGFzcyBNMj4KICAgIHR5cGVuYW1lIEluZGV4VHlwZTI8TTEsIE0yPjo6dAogICAg
dG9saW4oIGNvbnN0IE0xJiBhLCBjb25zdCBNMiYgYiApIGNvbnN0OwoKCiAgICBpbnQgZGltMSgp
IGNvbnN0IHsgcmV0dXJuIGRpbTFfOyB9CiAgICBpbnQgZGltMigpIGNvbnN0IHsgcmV0dXJuIGRp
bTJfOyB9CiAgICBpbnQgZGltKCkgY29uc3QgeyByZXR1cm4gZGltMV87IH0KcHJpdmF0ZToKICAg
IGludCBkaW0xXzsKICAgIGludCBkaW0yXzsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp0ZW1wbGF0
ZTxjbGFzcyBNMSwgY2xhc3MgTTI+CnR5cGVuYW1lIEluZGV4VHlwZTI8TTEsIE0yPjo6dApUZW5z
b3I8VCwgVDJkPiA6OiB0b2xpbiggY29uc3QgTTEmIGEsIGNvbnN0IE0yJiBiICkgY29uc3QKewog
ICAgcmV0dXJuIGluZGV4ZGltKGEsIGRpbTFfKSArIGluZGV4ZGltKGIsIGRpbTJfKSAqIGRpbTFf
Owp9CgoKdGVtcGxhdGU8Y2xhc3MgVD4KdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIE0xPgpUZW5z
b3I8VCwgVDJkPiA6OiBUZW5zb3IoIGNvbnN0IFRlbnNvcjxUMSwgTTE+JiBhICkKICAgIDogQmFz
ZSggYS5kaW0xKCkqYS5kaW0yKCksIGVtcHR5X3RlbnNvcigpICksCiAgICAgIGRpbTFfKCBhLmRp
bTEoKSApLCBkaW0yXyggYS5kaW0yKCkgKQp7CiAgICAoKHZvaWQpMCk7CiAgICAoKHZvaWQpMCk7
CiAgICB0YXNzaWduKCAqdGhpcywgYSApOwp9CgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNz
IFRlbnNvcjxULCBUM2QgPiA6IHB1YmxpYyBUUmNCYXNlPFQ+CnsKcHVibGljOgogICAgdHlwZWRl
ZiBUUmNCYXNlPFQ+IEJhc2U7CiAgICBzdGF0aWMgY29uc3QgaW50IHJhbmsgPSAzOwoKICAgIFRl
bnNvcigpIDogQmFzZSgwKSwgZGltMV8oMCksIGRpbTJfKDApLCBkaW0zXygwKXt9CiAgICBUZW5z
b3IoIGludCBhLCBpbnQgYiwgaW50IGMgKSA6IEJhc2UoYSpiKmMpLCBkaW0xXyhhKSwgZGltMl8o
YiksIGRpbTNfKGMpe30KICAgIFRlbnNvciggaW50IGEsIGludCBiLCBpbnQgYywgZW1wdHlfdGVu
c29yIGUgKSA6IEJhc2UoYSpiKmMsIGUpLCBkaW0xXyhhKSwgZGltMl8oYiksIGRpbTNfKGMpe30K
ICAgIFRlbnNvciggaW50IGEsIGludCBiLCBpbnQgYywgY29uc3QgVCogcCApIDogQmFzZShhKmIq
YywgcCksIGRpbTFfKGEpLCBkaW0yXyhiKSwgZGltM18oYyl7fQoKCgogICAgdGVtcGxhdGU8Y2xh
c3MgVDEsIGNsYXNzIE0xPgogICAgVGVuc29yKCBjb25zdCBUZW5zb3I8VDEsIE0xPiYgYSApOwoK
ICAgIHRlbXBsYXRlPGNsYXNzIE0xLCBjbGFzcyBUMT4KICAgIFRlbnNvciYgb3BlcmF0b3I9KCBj
b25zdCBUZW5zb3I8VDEsIE0xPiYgYSApeyByZXR1cm4gdGFzc2lnbl93aXRoX3NpemVfYWRqdXN0
bWVudCggKnRoaXMsIGEgKTsgfQoKICAgIFRlbnNvckNvbW1hPFQ+IG9wZXJhdG9yPSggY29uc3Qg
VCYgdCApeyBpbnZhbGlkYXRlKCk7IFRlbnNvckNvbW1hPFQ+IHgoIGJlZ2luKCksIGVuZCgpLCB0
ICk7IHJldHVybiB4OyB9CgogICAgVCYgZ2V0KCBpbnQgYSwgaW50IGIsIGludCBjICl7IHJldHVy
biB1Z2V0KCB0b2xpbihhLCBiLCBjKSk7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKCkoIGludCBh
LCBpbnQgYiwgaW50IGMgKSBjb25zdCB7IHJldHVybiB1Z2V0KHRvbGluKGEsIGIsIGMpKTsgfQog
ICAgVCYgb3BlcmF0b3IoKSggaW50IGEsIGludCBiLCBpbnQgYyApeyBpbnZhbGlkYXRlKCk7IHJl
dHVybiB1Z2V0KHRvbGluKGEsIGIsIGMpKTsgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIE0xLCBj
bGFzcyBNMiwgY2xhc3MgTTM+CiAgICBUZW5zb3I8VCwgSW5kZXhlZDxjb25zdCBCYXNlLCB0eXBl
bmFtZSBJbmRleFR5cGUzPE0xLCBNMiwgTTM+Ojp0ID4gPgogICAgb3BlcmF0b3IoKSggY29uc3Qg
TTEmIGksIGNvbnN0IE0yJiBqLCBjb25zdCBNMyYgayApIGNvbnN0CiAgICB7IHJldHVybiBUZW5z
b3I8VCwgSW5kZXhlZDxjb25zdCBCYXNlLCB0eXBlbmFtZSBJbmRleFR5cGUzPE0xLCBNMiwgTTM+
Ojp0ID4gPiggKnRoaXMsIHRvbGluKGksaixrKSApOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIE0x
LCBjbGFzcyBNMiwgY2xhc3MgTTM+CiAgICBUZW5zb3I8VCwgSW5kZXhlZDxCYXNlLCB0eXBlbmFt
ZSBJbmRleFR5cGUzPE0xLCBNMiwgTTM+Ojp0ID4gPgogICAgb3BlcmF0b3IoKSggY29uc3QgTTEm
IGksIGNvbnN0IE0yJiBqLCBjb25zdCBNMyYgayApCiAgICB7IHJldHVybiBUZW5zb3I8VCwgSW5k
ZXhlZDxCYXNlLCB0eXBlbmFtZSBJbmRleFR5cGUzPE0xLCBNMiwgTTM+Ojp0ID4gPiggKnRoaXMs
IHRvbGluKGksaixrKSApOyB9CgogICAgaW50IHRvbGluKCBpbnQgYSwgaW50IGIsIGludCBjICkg
Y29uc3QgeyByZXR1cm4gYStkaW0xXyooYitkaW0yXypjKTsgfQoKICAgIHRlbXBsYXRlPGNsYXNz
IE0xLCBjbGFzcyBNMiwgY2xhc3MgTTM+CiAgICB0eXBlbmFtZSBJbmRleFR5cGUzPE0xLCBNMiwg
TTM+Ojp0CiAgICB0b2xpbiggY29uc3QgTTEmIGEsIGNvbnN0IE0yJiBiLCBjb25zdCBNMyYgYyAp
IGNvbnN0OwoKCgogICAgdm9pZCByZXNpemUoIGludCBpLCBpbnQgaiwgaW50IGsgKQogICAgeyBp
ZiggZGltMSgpICE9IGkgfHwgZGltMigpICE9IGogfHwgZGltMygpICE9IGsgKSAoKnRoaXMpID0g
VGVuc29yKGksIGosIGspOyBlbHNlICgqdGhpcykgPSBzY2FsYXIoIFQoKSApOyB9CiAgICB2b2lk
IHJlc2l6ZSggaW50IGksIGludCBqLCBpbnQgaywgZW1wdHlfdGVuc29yIGUgKQogICAgeyBpZigg
ZGltMSgpICE9IGkgfHwgZGltMigpICE9IGogfHwgZGltMygpICE9IGsgKSAoKnRoaXMpID0gVGVu
c29yKGksIGosIGssIGUpOyB9CiAgICBpbnQgZGltMSgpIGNvbnN0IHsgcmV0dXJuIGRpbTFfOyB9
CiAgICBpbnQgZGltMigpIGNvbnN0IHsgcmV0dXJuIGRpbTJfOyB9CiAgICBpbnQgZGltMygpIGNv
bnN0IHsgcmV0dXJuIGRpbTNfOyB9CnByaXZhdGU6CiAgICBpbnQgZGltMV87CiAgICBpbnQgZGlt
Ml87CiAgICBpbnQgZGltM187Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KdGVtcGxhdGU8Y2xhc3Mg
VDEsIGNsYXNzIE0xPgpUZW5zb3I8VCwgVDNkPjo6VGVuc29yKCBjb25zdCBUZW5zb3I8VDEsIE0x
PiYgYSApCiAgICA6IEJhc2UoIGEuZGltMSgpKmEuZGltMigpKmEuZGltMygpLCBlbXB0eV90ZW5z
b3IoKSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW0xXyggYS5kaW0x
KCkgKSwgZGltMl8oIGEuZGltMigpICksIGRpbTNfKCBhLmRpbTMoKSApCnsKICAgICgodm9pZCkw
KTsKICAgICgodm9pZCkwKTsKICAgICgodm9pZCkwKTsKICAgIHRhc3NpZ24oICp0aGlzLCBhICk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgp0ZW1wbGF0ZTxjbGFzcyBNMSwgY2xhc3MgTTIsIGNsYXNz
IE0zPgp0eXBlbmFtZSBJbmRleFR5cGUzPE0xLCBNMiwgTTM+Ojp0ClRlbnNvcjxULCBUM2Q+Ojp0
b2xpbiggY29uc3QgTTEmIGEsIGNvbnN0IE0yJiBiLCBjb25zdCBNMyYgYyApIGNvbnN0CnsKICAg
IHJldHVybiBpbmRleGRpbShhLCBkaW0xXykgKyBpbmRleGRpbShiLCBkaW0yXykgKiBkaW0xXyAr
IGluZGV4ZGltKGMsIGRpbTNfKSAqIChkaW0xXypkaW0yXyk7Cn0KCgoKCgoKdGVtcGxhdGU8Y2xh
c3MgVD4KY2xhc3MgVGVuc29yPFQsIFQ0ZCA+IDogcHVibGljIFRSY0Jhc2U8VD4KewpwdWJsaWM6
CiAgICB0eXBlZGVmIFRSY0Jhc2U8VD4gQmFzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFuayA9
IDQ7CgogICAgVGVuc29yKCkgOiBCYXNlKDApLCBkaW0xXygwKSwgZGltMl8oMCksIGRpbTNfKDAp
LCBkaW00XygwKSB7fQogICAgVGVuc29yKCBpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCApIDog
QmFzZShhKmIqYypkKSwgZGltMV8oYSksIGRpbTJfKGIpLCBkaW0zXyhjKSwgZGltNF8oZCl7fQog
ICAgVGVuc29yKCBpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgY29uc3QgVCogcCApIDogQmFz
ZShhKmIqYypkLCBwKSwgZGltMV8oYSksIGRpbTJfKGIpLCBkaW0zXyhjKSwgZGltNF8oZCl7fQoK
CgogICAgdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIE0xPgogICAgVGVuc29yKCBjb25zdCBUZW5z
b3I8VDEsIE0xPiYgYSApOwoKICAgIHRlbXBsYXRlPGNsYXNzIE0xLCBjbGFzcyBUMT4KICAgIFRl
bnNvciYgb3BlcmF0b3I9KCBjb25zdCBUZW5zb3I8VDEsIE0xPiYgYSApeyByZXR1cm4gdGFzc2ln
bl93aXRoX3NpemVfYWRqdXN0bWVudCggKnRoaXMsIGEgKTsgfQoKICAgIFRlbnNvckNvbW1hPFQ+
IG9wZXJhdG9yPSggY29uc3QgVCYgdCApeyBpbnZhbGlkYXRlKCk7IFRlbnNvckNvbW1hPFQ+IHgo
IGJlZ2luKCksIGVuZCgpLCB0ICk7IHJldHVybiB4OyB9CgogICAgVCYgZ2V0KCBpbnQgYSwgaW50
IGIsIGludCBjLCBpbnQgZCApeyByZXR1cm4gdWdldCggdG9saW4oYSwgYiwgYywgZCkpOyB9CiAg
ICBjb25zdCBUJiBvcGVyYXRvcigpKCBpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCApIGNvbnN0
IHsgcmV0dXJuIHVnZXQodG9saW4oYSwgYiwgYywgZCkpOyB9CiAgICBUJiBvcGVyYXRvcigpKCBp
bnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCApeyBpbnZhbGlkYXRlKCk7IHJldHVybiB1Z2V0KHRv
bGluKGEsIGIsIGMsIGQpKTsgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIE0xLCBjbGFzcyBNMiwg
Y2xhc3MgTTMsIGNsYXNzIE00PgogICAgVGVuc29yPFQsIEluZGV4ZWQ8Y29uc3QgQmFzZSwgdHlw
ZW5hbWUgSW5kZXhUeXBlNDxNMSwgTTIsIE0zLCBNND46OnQgPiA+CiAgICBvcGVyYXRvcigpKCBj
b25zdCBNMSYgaSwgY29uc3QgTTImIGosIGNvbnN0IE0zJiBrLCBjb25zdCBNNCYgbCApIGNvbnN0
CiAgICB7IHJldHVybiBUZW5zb3I8VCwgSW5kZXhlZDxjb25zdCBCYXNlLCB0eXBlbmFtZSBJbmRl
eFR5cGU0PE0xLCBNMiwgTTMsIE00Pjo6dCA+ID4oICp0aGlzLCB0b2xpbihpLCBqLCBrLCBsKSAp
OyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIE0xLCBjbGFzcyBNMiwgY2xhc3MgTTMsIGNsYXNzIE00
PgogICAgVGVuc29yPFQsIEluZGV4ZWQ8QmFzZSwgdHlwZW5hbWUgSW5kZXhUeXBlNDxNMSwgTTIs
IE0zLCBNND46OnQgPiA+CiAgICBvcGVyYXRvcigpKCBjb25zdCBNMSYgaSwgY29uc3QgTTImIGos
IGNvbnN0IE0zJiBrLCBjb25zdCBNNCYgbCApCiAgICB7IHJldHVybiBUZW5zb3I8VCwgSW5kZXhl
ZDxCYXNlLCB0eXBlbmFtZSBJbmRleFR5cGU0PE0xLCBNMiwgTTMsIE00Pjo6dCA+ID4oICp0aGlz
LCB0b2xpbihpLCBqLCBrLCBsKSApOyB9CgogICAgaW50IHRvbGluKCBpbnQgYSwgaW50IGIsIGlu
dCBjLCBpbnQgZCApIGNvbnN0IHsgcmV0dXJuIGEgKyBkaW0xXyAqIChiICsgZGltMl8gKiAoYyAr
IGRpbTNfICogZCkpOyB9CgogICAgdGVtcGxhdGU8Y2xhc3MgTTEsIGNsYXNzIE0yLCBjbGFzcyBN
MywgY2xhc3MgTTQ+CiAgICB0eXBlbmFtZSBJbmRleFR5cGU0PE0xLCBNMiwgTTMsIE00Pjo6dAog
ICAgdG9saW4oIGNvbnN0IE0xJiBhLCBjb25zdCBNMiYgYiwgY29uc3QgTTMmIGMsIGNvbnN0IE00
JiBkICkgY29uc3Q7CgoKCiAgICB2b2lkIHJlc2l6ZSggaW50IGksIGludCBqLCBpbnQgaywgaW50
IGwgKXsgKCp0aGlzKSA9IFRlbnNvcihpLCBqLCBrLCBsKTsgfQogICAgaW50IGRpbTEoKSBjb25z
dCB7IHJldHVybiBkaW0xXzsgfQogICAgaW50IGRpbTIoKSBjb25zdCB7IHJldHVybiBkaW0yXzsg
fQogICAgaW50IGRpbTMoKSBjb25zdCB7IHJldHVybiBkaW0zXzsgfQogICAgaW50IGRpbTQoKSBj
b25zdCB7IHJldHVybiBkaW00XzsgfQpwcml2YXRlOgogICAgaW50IGRpbTFfOwogICAgaW50IGRp
bTJfOwogICAgaW50IGRpbTNfOwogICAgaW50IGRpbTRfOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+
CnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBNMT4KVGVuc29yPFQsIFQ0ZD46OlRlbnNvciggY29u
c3QgVGVuc29yPFQxLCBNMT4mIGEgKQogICAgOiBCYXNlKCBhLmRpbTEoKSphLmRpbTIoKSphLmRp
bTMoKSphLmRpbTQoKSApLAogICAgICBkaW0xXyggYS5kaW0xKCkgKSwgZGltMl8oIGEuZGltMigp
ICksIGRpbTNfKCBhLmRpbTMoKSApLCBkaW00XyggYS5kaW00KCkgKQp7CiAgICAoKHZvaWQpMCk7
CiAgICAoKHZvaWQpMCk7CiAgICAoKHZvaWQpMCk7CiAgICAoKHZvaWQpMCk7CiAgICB0YXNzaWdu
KCAqdGhpcywgYSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KdGVtcGxhdGU8Y2xhc3MgTTEsIGNs
YXNzIE0yLCBjbGFzcyBNMywgY2xhc3MgTTQ+CnR5cGVuYW1lIEluZGV4VHlwZTQ8TTEsIE0yLCBN
MywgTTQ+Ojp0ClRlbnNvcjxULCBUNGQ+Ojp0b2xpbiggY29uc3QgTTEmIGEsIGNvbnN0IE0yJiBi
LCBjb25zdCBNMyYgYywgY29uc3QgTTQmIGQgKSBjb25zdAp7CiAgICByZXR1cm4gaW5kZXhkaW0o
YSwgZGltMV8pCiAgICAgICAgKyBpbmRleGRpbShiLCBkaW0yXykgKiBkaW0xXwogICAgICAgICsg
aW5kZXhkaW0oYywgZGltM18pICogKGRpbTFfICogZGltMl8pCiAgICAgICAgKyBpbmRleGRpbShk
LCBkaW00XykgKiAoZGltMV8gKiBkaW0yXyAqIGRpbTNfICk7Cn0KCgoKCnRlbXBsYXRlPGNsYXNz
IFQxLCBpbnQgTiwgY2xhc3MgVDIsIGNsYXNzIE0yPgppbmxpbmUgVGVuc29yPFQxLCBUbmQ8Tj4g
PiYgb3BlcmF0b3IgKz0gKCBUZW5zb3I8VDEsIFRuZDxOPiA+ICYgYSwgY29uc3QgVGVuc29yPFQy
LCBNMj4mIGIgKQp7CiAgICByZXR1cm4gdGFzc2lnbl9vcDx4cGx1czxUMSwgVDI+ID4oIGEsIGIg
KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDEsIGludCBOLCBjbGFzcyBUMiwgY2xhc3MgTTI+CmlubGlu
ZSBUZW5zb3I8VDEsIFRuZDxOPiA+JiBvcGVyYXRvciAqPSAoIFRlbnNvcjxUMSwgVG5kPE4+ID4g
JiBhLCBjb25zdCBUZW5zb3I8VDIsIE0yPiYgYiApCnsKICAgIHJldHVybiB0YXNzaWduX29wPHht
dWx0aXBsaWVzPFQxLCBUMj4gPiggYSwgYiApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMSwgaW50IE4s
IGNsYXNzIFQyLCBjbGFzcyBNMj4KaW5saW5lIFRlbnNvcjxUMSwgVG5kPE4+ID4mIG9wZXJhdG9y
IC09ICggVGVuc29yPFQxLCBUbmQ8Tj4gPiAmIGEsIGNvbnN0IFRlbnNvcjxUMiwgTTI+JiBiICkK
ewogICAgcmV0dXJuIHRhc3NpZ25fb3A8eG1pbnVzPFQxLCBUMj4gPiggYSwgYiApOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBUMSwgaW50IE4sIGNsYXNzIFQyLCBjbGFzcyBNMj4KaW5saW5lIFRlbnNvcjxU
MSwgVG5kPE4+ID4mIG9wZXJhdG9yIC89ICggVGVuc29yPFQxLCBUbmQ8Tj4gPiAmIGEsIGNvbnN0
IFRlbnNvcjxUMiwgTTI+JiBiICkKewogICAgcmV0dXJuIHRhc3NpZ25fb3A8eGRpdmlkZXM8VDEs
IFQyPiA+KCBhLCBiICk7Cn0KCgoKCmNsYXNzIFNjYWxhclRlbnNvcnt9OwoKCgp0ZW1wbGF0ZTxj
bGFzcyBUPgpjbGFzcyBUZW5zb3I8VCwgU2NhbGFyVGVuc29yPiA6IHB1YmxpYyBUWmVyb1NpemVC
YXNlCnsKcHVibGljOgogICAgc3RhdGljIGNvbnN0IGJvb2wgbGluZWFyPXRydWU7CiAgICBleHBs
aWNpdCBUZW5zb3IoIGNvbnN0IFQmIGEgKSA6IHRfKGEpe307CiAgICBUIG9wZXJhdG9yW10oIGlu
dCApIGNvbnN0IHsgcmV0dXJuIHRfOyB9CiAgICBUIG9wZXJhdG9yKCkoIGludCwgaW50ICkgY29u
c3QgeyByZXR1cm4gdF87IH0KICAgIFQgb3BlcmF0b3IoKSggaW50LCBpbnQsIGludCApIGNvbnN0
IHsgcmV0dXJuIHRfOyB9CiAgICBUIG9wZXJhdG9yKCkoIGludCwgaW50LCBpbnQsIGludCApIGNv
bnN0IHsgcmV0dXJuIHRfOyB9CiAgICBUIHVnZXQoIGludCApIGNvbnN0IHsgcmV0dXJuIHRfOyB9
CiAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CnByaXZhdGU6CiAgICBjb25zdCBU
IHRfOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIFRlbnNvcjxULCBTY2FsYXJUZW5z
b3I+CnNjYWxhciggY29uc3QgVCYgdCApCnsKICAgIHJldHVybiBUZW5zb3I8VCwgU2NhbGFyVGVu
c29yPiggdCApOwp9CgoKCgoKCgppbmxpbmUgaW50IHRlbnNvcl9tYXh0ZXN0KCBpbnQgYSwgaW50
IGIgKQp7CiAgICAoKHZvaWQpMCk7CiAgICByZXR1cm4gYSA+IGIgPyBhIDogYjsKfQoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBTPgpzdHJ1Y3QgVFJlZlR5cGUKewogICAgdHlwZWRlZiBjb25zdCBTIHQ7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgaW50IE4+CnN0cnVjdCBUUmVmVHlwZTxUZW5zb3I8VCwg
VG5kPE4+ID4gPgp7CiAgICB0eXBlZGVmIGNvbnN0IFRlbnNvcjxULCBUbmQ8Tj4gPiYgdDsKfTsK
IyAxMTc3ICJ4Mi5jYyIKdGVtcGxhdGU8Y2xhc3MgUzEsIGNsYXNzIFMyLCBjbGFzcyBPUD4KY2xh
c3MgVEJpbk9wOwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFMxLCBjbGFzcyBTMiwg
Y2xhc3MgT1A+CmNsYXNzIFRlbnNvcjxULCBUQmluT3A8T1AsUzEsIFMyPiA+IDogcHVibGljIFRa
ZXJvU2l6ZUJhc2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IHJhbms9IFMxOjpyYW5r
ID4gUzI6OnJhbmsgPyBTMTo6cmFuayA6IFMyOjpyYW5rOwogICAgc3RhdGljIGNvbnN0IGJvb2wg
bGluZWFyPVMxOjpsaW5lYXIgJiYgUzI6OmxpbmVhcjsKICAgIFRlbnNvciggY29uc3QgUzEmIGEs
IGNvbnN0IFMyJiBiLCBjb25zdCBPUCYgb3A9T1AoKSApIDogYV8oYSksIGJfKGIpLCBvcF8ob3Ap
e30KICAgIFQgb3BlcmF0b3JbXSggaW50IGkgKSBjb25zdCB7IHJldHVybiBvcF8oIGFfW2ldLCBi
X1tpXSApOyB9CiAgICBUIG9wZXJhdG9yKCkoIGludCBpLCBpbnQgaiApIGNvbnN0IHsgcmV0dXJu
IG9wXyggYV8oaSxqKSwgYl8oaSxqKSApOyB9CiAgICBUIG9wZXJhdG9yKCkoIGludCBpLCBpbnQg
aiwgaW50IGsgKSBjb25zdCB7IHJldHVybiBvcF8oIGFfKGksaixrKSwgYl8oaSxqLGspICk7IH0K
ICAgIFQgb3BlcmF0b3IoKSggaW50IGksIGludCBqLCBpbnQgaywgaW50IGwgKSBjb25zdCB7IHJl
dHVybiBvcF8oIGFfKGksaixrLGwpLCBiXyhpLGosayxsKSApOyB9CiAgICBUIHVnZXQoIGludCBp
ICkgY29uc3QgeyByZXR1cm4gb3BfKCBhXy51Z2V0KGkpLCBiXy51Z2V0KGkpICk7IH0KICAgIGlu
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gdGVuc29yX21heHRlc3QoIGFfLnNpemUoKSwgYl8uc2l6
ZSgpICk7IH0KICAgIGludCBkaW0xKCkgY29uc3QgeyByZXR1cm4gdGVuc29yX21heHRlc3QoIGFf
LmRpbTEoKSwgYl8uZGltMSgpICk7IH0KICAgIGludCBkaW0yKCkgY29uc3QgeyByZXR1cm4gdGVu
c29yX21heHRlc3QoIGFfLmRpbTIoKSwgYl8uZGltMigpICk7IH0KICAgIGludCBkaW0zKCkgY29u
c3QgeyByZXR1cm4gdGVuc29yX21heHRlc3QoIGFfLmRpbTMoKSwgYl8uZGltMygpICk7IH0KICAg
IGludCBkaW00KCkgY29uc3QgeyByZXR1cm4gdGVuc29yX21heHRlc3QoIGFfLmRpbTQoKSwgYl8u
ZGltNCgpICk7IH0KcHJpdmF0ZToKICAgIHR5cGVuYW1lIFRSZWZUeXBlPFMxPjo6dCBhXzsKICAg
IHR5cGVuYW1lIFRSZWZUeXBlPFMyPjo6dCBiXzsKICAgIGNvbnN0IE9QIG9wXzsKfTsKIyAxMjQz
ICJ4Mi5jYyIKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIE0xLCBjbGFzcyBUMiwgY2xhc3MgTTI+
IGlubGluZSBUZW5zb3I8dHlwZW5hbWUgeHBsdXM8VDEsIFQyPjo6dCwgVEJpbk9wPCB4cGx1czxU
MSwgVDI+LCBUZW5zb3I8VDEsIE0xPiwgVGVuc29yPFQyLCBNMj4gPiA+IG9wZXJhdG9yKyAoIGNv
bnN0IFRlbnNvcjxUMSwgTTE+JiBhLCBjb25zdCBUZW5zb3I8VDIsIE0yPiYgYiApIHsgcmV0dXJu
IFRlbnNvcjx0eXBlbmFtZSB4cGx1czxUMSwgVDI+OjpyZXN1bHRfdHlwZSwgVEJpbk9wPCB4cGx1
czxUMSwgVDI+LCBUZW5zb3I8VDEsIE0xPiwgVGVuc29yPFQyLCBNMj4gPiA+ICggYSwgYiwgeHBs
dXM8VDEsVDI+KCkgKTsgfSB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBNPiBpbmxpbmUgVGVuc29y
PHR5cGVuYW1lIHhwbHVzPFQsIFQ+OjpyZXN1bHRfdHlwZSwgVEJpbk9wPCB4cGx1czxULFQ+LCBU
ZW5zb3I8VCwgTT4sIFRlbnNvcjxULCBNPiA+ID4gb3BlcmF0b3IrICggY29uc3QgVGVuc29yPFQs
IE0+JiBhLCBjb25zdCBUZW5zb3I8VCwgTT4mIGIgKSB7IHJldHVybiBUZW5zb3I8dHlwZW5hbWUg
eHBsdXM8VCwgVD46OnJlc3VsdF90eXBlLCBUQmluT3A8IHhwbHVzPFQsVD4sIFRlbnNvcjxULCBN
PiwgVGVuc29yPFQsIE0+ID4gPiAoIGEsIGIsIHhwbHVzPFQsVD4oKSApOyB9IHRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIE0+IGlubGluZSBUZW5zb3I8IHR5cGVuYW1lIHhwbHVzPFQsIFQ+OjpyZXN1
bHRfdHlwZSwgVEJpbk9wPCB4cGx1czxULFQ+LCBUZW5zb3I8VCxNPiwgVGVuc29yPFQsIFNjYWxh
clRlbnNvcj4gPiA+IG9wZXJhdG9yKyAoIGNvbnN0IFRlbnNvcjxULE0+JiBhLCBjb25zdCBUJiBi
ICkgeyByZXR1cm4gVGVuc29yPCB0eXBlbmFtZSB4cGx1czxULCBUPjo6cmVzdWx0X3R5cGUsIFRC
aW5PcDwgeHBsdXM8VCxUPiwgVGVuc29yPFQsTT4sIFRlbnNvcjxULCBTY2FsYXJUZW5zb3I+ID4g
PiAoIGEsIFRlbnNvcjxULCBTY2FsYXJUZW5zb3I+KCBiICksIHhwbHVzPFQsVD4oKSApOyB9IHRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIE0+IGlubGluZSBUZW5zb3I8IHR5cGVuYW1lIHhwbHVzPFQs
IFQ+OjpyZXN1bHRfdHlwZSwgVEJpbk9wPCB4cGx1czxULFQ+LCBUZW5zb3I8VCwgU2NhbGFyVGVu
c29yPiwgVGVuc29yPFQsTT4gPiA+IG9wZXJhdG9yKyAoIGNvbnN0IFQmIGIsIGNvbnN0IFRlbnNv
cjxULE0+JiBhICkgeyByZXR1cm4gVGVuc29yPCBULCBUQmluT3A8IHhwbHVzPFQsVD4sIFRlbnNv
cjxULCBTY2FsYXJUZW5zb3I+LCBUZW5zb3I8VCxNPiA+ID4gKCBUZW5zb3I8VCwgU2NhbGFyVGVu
c29yPiggYiApLCBhLCB4cGx1czxULFQ+KCkgKTsgfQp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3Mg
TTEsIGNsYXNzIFQyLCBjbGFzcyBNMj4gaW5saW5lIFRlbnNvcjx0eXBlbmFtZSB4bXVsdGlwbGll
czxUMSwgVDI+Ojp0LCBUQmluT3A8IHhtdWx0aXBsaWVzPFQxLCBUMj4sIFRlbnNvcjxUMSwgTTE+
LCBUZW5zb3I8VDIsIE0yPiA+ID4gb3BlcmF0b3IqICggY29uc3QgVGVuc29yPFQxLCBNMT4mIGEs
IGNvbnN0IFRlbnNvcjxUMiwgTTI+JiBiICkgeyByZXR1cm4gVGVuc29yPHR5cGVuYW1lIHhtdWx0
aXBsaWVzPFQxLCBUMj46OnJlc3VsdF90eXBlLCBUQmluT3A8IHhtdWx0aXBsaWVzPFQxLCBUMj4s
IFRlbnNvcjxUMSwgTTE+LCBUZW5zb3I8VDIsIE0yPiA+ID4gKCBhLCBiLCB4bXVsdGlwbGllczxU
MSxUMj4oKSApOyB9IHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE0+IGlubGluZSBUZW5zb3I8dHlw
ZW5hbWUgeG11bHRpcGxpZXM8VCwgVD46OnJlc3VsdF90eXBlLCBUQmluT3A8IHhtdWx0aXBsaWVz
PFQsVD4sIFRlbnNvcjxULCBNPiwgVGVuc29yPFQsIE0+ID4gPiBvcGVyYXRvciogKCBjb25zdCBU
ZW5zb3I8VCwgTT4mIGEsIGNvbnN0IFRlbnNvcjxULCBNPiYgYiApIHsgcmV0dXJuIFRlbnNvcjx0
eXBlbmFtZSB4bXVsdGlwbGllczxULCBUPjo6cmVzdWx0X3R5cGUsIFRCaW5PcDwgeG11bHRpcGxp
ZXM8VCxUPiwgVGVuc29yPFQsIE0+LCBUZW5zb3I8VCwgTT4gPiA+ICggYSwgYiwgeG11bHRpcGxp
ZXM8VCxUPigpICk7IH0gdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgTT4gaW5saW5lIFRlbnNvcjwg
dHlwZW5hbWUgeG11bHRpcGxpZXM8VCwgVD46OnJlc3VsdF90eXBlLCBUQmluT3A8IHhtdWx0aXBs
aWVzPFQsVD4sIFRlbnNvcjxULE0+LCBUZW5zb3I8VCwgU2NhbGFyVGVuc29yPiA+ID4gb3BlcmF0
b3IqICggY29uc3QgVGVuc29yPFQsTT4mIGEsIGNvbnN0IFQmIGIgKSB7IHJldHVybiBUZW5zb3I8
IHR5cGVuYW1lIHhtdWx0aXBsaWVzPFQsIFQ+OjpyZXN1bHRfdHlwZSwgVEJpbk9wPCB4bXVsdGlw
bGllczxULFQ+LCBUZW5zb3I8VCxNPiwgVGVuc29yPFQsIFNjYWxhclRlbnNvcj4gPiA+ICggYSwg
VGVuc29yPFQsIFNjYWxhclRlbnNvcj4oIGIgKSwgeG11bHRpcGxpZXM8VCxUPigpICk7IH0gdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgTT4gaW5saW5lIFRlbnNvcjwgdHlwZW5hbWUgeG11bHRpcGxp
ZXM8VCwgVD46OnJlc3VsdF90eXBlLCBUQmluT3A8IHhtdWx0aXBsaWVzPFQsVD4sIFRlbnNvcjxU
LCBTY2FsYXJUZW5zb3I+LCBUZW5zb3I8VCxNPiA+ID4gb3BlcmF0b3IqICggY29uc3QgVCYgYiwg
Y29uc3QgVGVuc29yPFQsTT4mIGEgKSB7IHJldHVybiBUZW5zb3I8IFQsIFRCaW5PcDwgeG11bHRp
cGxpZXM8VCxUPiwgVGVuc29yPFQsIFNjYWxhclRlbnNvcj4sIFRlbnNvcjxULE0+ID4gPiAoIFRl
bnNvcjxULCBTY2FsYXJUZW5zb3I+KCBiICksIGEsIHhtdWx0aXBsaWVzPFQsVD4oKSApOyB9Cgp0
ZW1wbGF0ZTxjbGFzcyBPUCwgY2xhc3MgTT4KY2xhc3MgVFVuT3Age307CgoKdGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIFMsIGNsYXNzIE9QPgpjbGFzcyBUZW5zb3I8VCwgVFVuT3A8T1AsIFMgPiA+
IDogcHVibGljIFRaZXJvU2l6ZUJhc2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IHJh
bms9Uzo6cmFuazsKICAgIHN0YXRpYyBjb25zdCBib29sIGxpbmVhciA9IFM6OmxpbmVhcjsKICAg
IFRlbnNvciggY29uc3QgUyYgdCAsIGNvbnN0IE9QJiBvcCApIDogdF8odCksIG9wXyhvcCkge30K
ICAgIFQgb3BlcmF0b3JbXSggaW50IGspIGNvbnN0IHsgcmV0dXJuIG9wXyh0X1trXSk7IH0KICAg
IFQgb3BlcmF0b3IoKSggaW50IGssIGludCBsICkgY29uc3QgeyByZXR1cm4gb3BfKHRfKGssIGwp
KTsgfQogICAgVCBvcGVyYXRvcigpKCBpbnQgaywgaW50IGwsIGludCBtICkgY29uc3QgeyByZXR1
cm4gb3BfKHRfKGssIGwsIG0pKTsgfQogICAgVCBvcGVyYXRvcigpKCBpbnQgaywgaW50IGwsIGlu
dCBtLCBpbnQgbiApIGNvbnN0IHsgcmV0dXJuIG9wXyh0XyhrLCBsLCBtLCBuKSk7IH0KICAgIFQg
dWdldCggaW50IGspIGNvbnN0IHsgcmV0dXJuIG9wXyh0Xy51Z2V0KGspKTsgfQogICAgaW50IGRp
bTEoKSBjb25zdCB7IHJldHVybiB0Xy5kaW0xKCk7IH0KICAgIGludCBkaW0yKCkgY29uc3QgeyBy
ZXR1cm4gdF8uZGltMigpOyB9CiAgICBpbnQgZGltMygpIGNvbnN0IHsgcmV0dXJuIHRfLmRpbTMo
KTsgfQogICAgaW50IGRpbTQoKSBjb25zdCB7IHJldHVybiB0Xy5kaW00KCk7IH0KICAgIGludCBz
aXplKCkgY29uc3QgeyByZXR1cm4gdF8uc2l6ZSgpOyB9CnByaXZhdGU6CiAgICB0eXBlbmFtZSBU
UmVmVHlwZTxTPjo6dCB0XzsKICAgIGNvbnN0IE9QIG9wXzsKfTsKCgoKCgp0ZW1wbGF0ZTxjbGFz
cyBURU5TLCBjbGFzcyBPUD4KY2xhc3MgVFJlZHVjdGlvbnt9OwoKCgoKCnRlbXBsYXRlPCBjbGFz
cyBULCBjbGFzcyBURU5TLCBjbGFzcyBPUD4KY2xhc3MgVGVuc29yPFQsIFRSZWR1Y3Rpb248VEVO
UyxPUD4gPiA6IHB1YmxpYyBUWmVyb1NpemVCYXNlCnsKcHVibGljOgogICAgc3RhdGljIGNvbnN0
IGludCByYW5rID0gVEVOUzo6cmFuay0xOwogICAgZXhwbGljaXQgVGVuc29yKCBjb25zdCBURU5T
JiB0ICkgOiB0Xyh0KSwgZGltXzFfKCBtYXhkaW0oIHQgKS0xICkKICAgICAgICAgICAgICB7ICgo
dm9pZCkwKTt9CiAgICBUIG9wZXJhdG9yW10oIGludCBrICkgY29uc3QKICAgIHsKICAgICAgICBS
YW5rQ29tcGFyZTxyYW5rID09IDE+KCk7CiAgICAgICAgaWYoIGRpbV8xXyA8IDAgKSByZXR1cm4g
VCgpOwogICAgICAgIFQgZCA9IHRfKCBrLCBkaW1fMV8gKTsKICAgICAgICBmb3IoIGludCBpPWRp
bV8xXyAtIDEgOyBpPj0wOyAtLWkgKSBPUDo6YXNzX29wKCBkLCB0XyggaywgaSApICk7CiAgICAg
ICAgcmV0dXJuIGQ7CiAgICB9CgogICAgVCBvcGVyYXRvcigpKCBpbnQgaywgaW50IGwgKSBjb25z
dAogICAgewogICAgICAgIFJhbmtDb21wYXJlPHJhbmsgPT0gMj4oKTsKICAgICAgICBpZiggZGlt
XzFfIDwgMCApIHJldHVybiBUKDApOwogICAgICAgIFQgZCA9IHRfKCBrLCBsLCBkaW1fMV8gKTsK
ICAgICAgICBmb3IoIGludCBpPWRpbV8xXy0xOyBpPj0wOyAtLWkgKSBPUDo6YXNzX29wKCBkLCB0
XyggaywgbCwgaSApICk7CiAgICAgICAgcmV0dXJuIGQ7CiAgICB9CgogICAgVCBvcGVyYXRvcigp
KCBpbnQgaywgaW50IGwsIGludCBtICkgY29uc3QKICAgIHsKICAgICAgICBSYW5rQ29tcGFyZSA8
IHJhbmsgPT0gMyA+KCk7CiAgICAgICAgaWYoIGRpbV8xXyA8IDAgKSByZXR1cm4gVCgwKTsKICAg
ICAgICBUIGQgPSB0XyggaywgbCwgbSwgZGltXzFfICk7CiAgICAgICAgZm9yKCBpbnQgaT1kaW1f
MV8gLSAxOyBpPj0wOyAtLWkgKSBPUDo6YXNzX29wKCBkLCB0XyggaywgbCwgbSwgaSApICk7CiAg
ICAgICAgcmV0dXJuIGQ7CiAgICB9CgoKICAgIGludCBkaW0xKCkgY29uc3QgeyByZXR1cm4gdF8u
ZGltMSgpOyB9CiAgICBpbnQgZGltMigpIGNvbnN0IHsgcmV0dXJuIHRfLmRpbTIoKTsgfQogICAg
aW50IGRpbTMoKSBjb25zdCB7IHJldHVybiB0Xy5kaW0zKCk7IH0KcHJpdmF0ZToKICAgIHR5cGVu
YW1lIFRSZWZUeXBlPFRFTlM+Ojp0IHRfOwogICAgY29uc3QgaW50IGRpbV8xXzsKfTsKCgoKCgoK
CnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE0+ClRlbnNvcjxULCBUUmVkdWN0aW9uPFRlbnNvcjxU
LCBNPiwgeHBsdXM8VCxUPiA+ID4KdHN1bSggY29uc3QgVGVuc29yPFQsIE0+JiB0ICkKewogICAg
cmV0dXJuIFRlbnNvcjxULCBUUmVkdWN0aW9uPFRlbnNvcjxULCBNPiwgeHBsdXM8VCxUPiA+ID4o
dCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE0+ClRlbnNvcjxULCBUUmVkdWN0aW9uPFRl
bnNvcjxULCBNPiwgeG11bHRpcGxpZXM8VCxUPiA+ID4KdHByb2R1Y3QoIGNvbnN0IFRlbnNvcjxU
LCBNPiYgdCApCnsKICAgIHJldHVybiBUZW5zb3I8VCwgVFJlZHVjdGlvbjxUZW5zb3I8VCwgTT4s
IHhtdWx0aXBsaWVzPFQsVD4gPiA+KHQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBNPgpU
ZW5zb3I8VCwgVFJlZHVjdGlvbjxUZW5zb3I8VCwgTT4sIHhfbWF4PFQsVD4gPiA+CnRtYXgoIGNv
bnN0IFRlbnNvcjxULCBNPiYgdCApCnsKICAgIHJldHVybiBUZW5zb3I8VCwgVFJlZHVjdGlvbjxU
ZW5zb3I8VCwgTT4sIHhfbWF4PFQsVD4gPiA+KHQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFz
cyBNPgpUZW5zb3I8VCwgVFJlZHVjdGlvbjxUZW5zb3I8VCwgTT4sIHhfbWluPFQsVD4gPiA+CnRt
aW4oIGNvbnN0IFRlbnNvcjxULCBNPiYgdCApCnsKICAgIHJldHVybiBUZW5zb3I8VCwgVFJlZHVj
dGlvbjxUZW5zb3I8VCwgTT4sIHhfbWluPFQsVD4gPiA+KHQpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBURU5TPgpjbGFzcyBVbnJvbGxTdW0ge307Cgp0ZW1wbGF0ZTwgY2xhc3MgVCwgY2xhc3MgVEVO
Uz4KY2xhc3MgVGVuc29yPFQsIFVucm9sbFN1bTxURU5TPiA+IDogcHVibGljIFRaZXJvU2l6ZUJh
c2UKewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IHJhbmsgPSBURU5TOjpyYW5rLTE7CiAg
ICBleHBsaWNpdCBUZW5zb3IoIGNvbnN0IFRFTlMmIHQgKSA6IHRfKHQpLCBkaW1fMV8oIG1heGRp
bSggdCApLTEgKQogICAgICAgICAgICAgIHsgKCh2b2lkKTApO30KICAgIFQgb3BlcmF0b3JbXSgg
aW50IGsgKSBjb25zdAogICAgewoKICAgICAgICBSYW5rQ29tcGFyZTxyYW5rID09IDE+KCk7CiAg
ICAgICAgVCBkID0gdF8oIGssIDAgKTsKICAgICAgICBzd2l0Y2goICh1bnNpZ25lZCkgZGltXzFf
ICl7CiAgICAgICAgY2FzZSA0OiBkICs9IHRfKCBrLCA0ICk7CiAgICAgICAgY2FzZSAzOiBkICs9
IHRfKCBrLCAzICk7CiAgICAgICAgY2FzZSAyOiBkICs9IHRfKCBrLCAyICk7CiAgICAgICAgY2Fz
ZSAxOiBkICs9IHRfKCBrLCAxICk7CiAgICAgICAgY2FzZSAwOiByZXR1cm4gZDsKICAgICAgICB9
CiAgICAgICAgYWJvcnQoKTsKCiAgICAgICAgZm9yKCBpbnQgaT1kaW1fMV8gOyBpPjA7IC0taSAp
IGQgKz0gdF8oIGssIGkgKTsKICAgICAgICByZXR1cm4gZDsKICAgIH0KCiAgICBUIG9wZXJhdG9y
KCkoIGludCBrLCBpbnQgbCApIGNvbnN0CiAgICB7CgogICAgICAgIFJhbmtDb21wYXJlPHJhbmsg
PT0gMj4oKTsKICAgICAgICBUIGQgPSB0XyggaywgbCwgMCApOwogICAgICAgIHN3aXRjaCggKHVu
c2lnbmVkKWRpbV8xXyApewogICAgICAgIGNhc2UgNDogZCArPSB0XyggaywgbCwgNCApOwogICAg
ICAgIGNhc2UgMzogZCArPSB0XyggaywgbCwgMyApOwogICAgICAgIGNhc2UgMjogZCArPSB0Xygg
aywgbCwgMiApOwogICAgICAgIGNhc2UgMTogZCArPSB0XyggaywgbCwgMSApOwogICAgICAgIGNh
c2UgMDogcmV0dXJuIGQ7CiAgICAgICAgfQogICAgICAgIGFib3J0KCk7CiAgICAgICAgZm9yKCBp
bnQgaT1kaW1fMV8gOyBpPjA7IC0taSApIGQgKz0gdF8oIGssIGwsIGkgKTsKICAgICAgICByZXR1
cm4gZDsKICAgIH0KCiAgICBUIG9wZXJhdG9yKCkoIGludCBrLCBpbnQgbCwgaW50IG0gKSBjb25z
dAogICAgewoKICAgICAgICBSYW5rQ29tcGFyZTxyYW5rID09IDM+KCk7CiAgICAgICAgVCBkID0g
dF8oIGssIGwsIG0sIDAgKTsKICAgICAgICBzd2l0Y2goICh1bnNpZ25lZClkaW1fMV8gKXsKICAg
ICAgICBjYXNlIDQ6IGQgKz0gdF8oIGssIGwsIG0sIDQgKTsKICAgICAgICBjYXNlIDM6IGQgKz0g
dF8oIGssIGwsIG0sIDMgKTsKICAgICAgICBjYXNlIDI6IGQgKz0gdF8oIGssIGwsIG0sIDIgKTsK
ICAgICAgICBjYXNlIDE6IGQgKz0gdF8oIGssIGwsIG0sIDEgKTsKICAgICAgICBjYXNlIDA6IHJl
dHVybiBkOwogICAgICAgIH0KICAgICAgICBhYm9ydCgpOwoKICAgICAgICBmb3IoIGludCBpPWRp
bV8xXyA7IGk+MDsgLS1pICkgZCArPSB0XyggaywgbCwgbSwgaSApOwogICAgICAgIHJldHVybiBk
OwogICAgfQoKCiAgICBpbnQgZGltMSgpIGNvbnN0IHsgcmV0dXJuIHRfLmRpbTEoKTsgfQogICAg
aW50IGRpbTIoKSBjb25zdCB7IHJldHVybiB0Xy5kaW0yKCk7IH0KICAgIGludCBkaW0zKCkgY29u
c3QgeyByZXR1cm4gdF8uZGltMygpOyB9CnByaXZhdGU6CiAgICB0eXBlbmFtZSBUUmVmVHlwZTxU
RU5TPjo6dCB0XzsKICAgIGNvbnN0IGludCBkaW1fMV87Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBj
bGFzcyBNPgpUZW5zb3I8VCwgVW5yb2xsU3VtPFRlbnNvcjxULCBNPiA+ID4KdW5yb2xsX3RzdW0o
IGNvbnN0IFRlbnNvcjxULCBNPiYgdCApCnsKICAgIHJldHVybiBUZW5zb3I8VCwgVW5yb2xsU3Vt
PFRlbnNvcjxULCBNPiA+ID4odCk7Cn0KIyAxNDUwICJ4Mi5jYyIKdGVtcGxhdGU8Y2xhc3MgVD4K
c3RydWN0IFByb2RBdXg7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBQcm9kQXV4IDxpbnQ+IHsKICAgIHR5
cGVkZWYgaW50IHQ7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgTT4Kc3RydWN0IFByb2RBdXggPFRlbnNv
cjxpbnQsIE0+ID4KewogICAgdHlwZWRlZiBUZW5zb3I8aW50LCBUQmluT3AgPCB4bXVsdGlwbGll
czxpbnQsIGludD4sIFRlbnNvcjxpbnQsIE0+LCBUZW5zb3I8aW50LCBTY2FsYXJUZW5zb3I+ID4g
PiB0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPiBzdHJ1Y3QgU3VtQXV4OwoKdGVt
cGxhdGU8PgpzdHJ1Y3QgU3VtQXV4PGludCwgaW50Pgp7CiAgICAgdHlwZWRlZiBpbnQgdDsKfTsK
CnRlbXBsYXRlPGNsYXNzIE0+CnN0cnVjdCBTdW1BdXg8aW50LCBUZW5zb3I8aW50LCBNPiA+CnsK
ICAgIHR5cGVkZWYgVGVuc29yPCBpbnQsIFRCaW5PcDwgeHBsdXM8aW50LCBpbnQ+LCBUZW5zb3I8
IGludCwgU2NhbGFyVGVuc29yPiwgVGVuc29yPGludCwgTT4gPiA+IHQ7Cn07Cgp0ZW1wbGF0ZTxj
bGFzcyBNPgpzdHJ1Y3QgU3VtQXV4PFRlbnNvcjxpbnQsIE0+LCBpbnQgPgp7CiAgICB0eXBlZGVm
IFRlbnNvcjwgaW50LCBUQmluT3A8IHhwbHVzPGludCwgaW50PiwgVGVuc29yPCBpbnQsIE0+LCBU
ZW5zb3I8aW50LCBTY2FsYXJUZW5zb3I+ID4gPiB0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgTTEsIGNs
YXNzIE0yPgpzdHJ1Y3QgU3VtQXV4PFRlbnNvcjxpbnQsIE0xPiwgVGVuc29yPGludCwgTTI+ID4K
ewogICAgdHlwZWRlZiBUZW5zb3I8IGludCwgVEJpbk9wPCB4cGx1czxpbnQsIGludD4sIFRlbnNv
cjwgaW50LCBNMT4sIFRlbnNvcjxpbnQsIE0yPiA+ID4gdDsKfTsKCnRlbXBsYXRlPGNsYXNzIFgx
LCBjbGFzcyBYMj4Kc3RydWN0IEluZGV4VHlwZTIgewogICAgdHlwZWRlZiB0eXBlbmFtZSBTdW1B
dXg8IFgxLCB0eXBlbmFtZSBQcm9kQXV4PFgyPjo6dCA+Ojp0IHQ7Cn07Cgp0ZW1wbGF0ZTxjbGFz
cyBYMSwgY2xhc3MgWDIsIGNsYXNzIFgzPgpzdHJ1Y3QgSW5kZXhUeXBlMyB7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIFN1bUF1eDwgdHlwZW5hbWUgSW5kZXhUeXBlMjxYMSwgWDI+Ojp0LCB0eXBlbmFt
ZSBQcm9kQXV4PFgzPjo6dCA+Ojp0IHQ7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgWDEsIGNsYXNzIFgy
LCBjbGFzcyBYMywgY2xhc3MgWDQ+CnN0cnVjdCBJbmRleFR5cGU0IHsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgU3VtQXV4PCB0eXBlbmFtZSBJbmRleFR5cGUzPFgxLCBYMiwgWDM+Ojp0LCB0eXBlbmFt
ZSBQcm9kQXV4PFg0Pjo6dCA+Ojp0IHQ7Cn07CgoKCnR5cGVkZWYgVGVuc29yPGRvdWJsZSwgVDFk
PiBEVmVjdG9yOwp0eXBlZGVmIFRlbnNvcjxEVmVjdG9yLCBUMWQ+IEREVmVjdG9yOwp0eXBlZGVm
IFRlbnNvcjxERFZlY3RvciwgVDFkPiBERERWZWN0b3I7CnR5cGVkZWYgVGVuc29yPGludCwgVDFk
PiBJVmVjdG9yOwp0eXBlZGVmIFRlbnNvcjxJVmVjdG9yLCBUMWQ+IElJVmVjdG9yOwp0eXBlZGVm
IFRlbnNvcjxpbnQsIFQyZD4gSU1hdHJpeDsKdHlwZWRlZiBUZW5zb3I8c2hvcnQsIFQxZD4gU1Zl
Y3RvcjsKdHlwZWRlZiBUZW5zb3I8ZG91YmxlLCBUMmQ+IERNYXRyaXg7CnR5cGVkZWYgVGVuc29y
PERNYXRyaXgsIFQyZD4gRERNYXRyaXg7CnR5cGVkZWYgVGVuc29yPGRvdWJsZSwgVDNkPiBEQ3Vi
aWM7CnR5cGVkZWYgVGVuc29yPGRvdWJsZSwgVDRkPiBEUXVhZDsKCgpjbGFzcyBCcmVudCB7CnB1
YmxpYzoKICAgIEJyZW50KCk7CiAgICB2b2lkIHNldF90b2woIGRvdWJsZSB4ICl7IHRvbCA9IHg7
IH0KICAgIHZvaWQgc2V0X2VwcyggZG91YmxlIHggKXsgZXBzID0geDsgfQogICAgdm9pZCBzZXRf
bWF4X2l0ZXIoIGludCB4ICl7IG1heF9pdGVyID0geDsgfQogICAgdmlydHVhbCBkb3VibGUgZigg
ZG91YmxlICkgPSAwOwogICAgdm9pZCBydW4oKTsKICAgIHZvaWQgaW5pdCggZG91YmxlIGEwLCBk
b3VibGUgeDAsIGRvdWJsZSBiMCwgZG91YmxlIGZhMCwgZG91YmxlIGZ4MCwgZG91YmxlIGZiMCAp
OwogICAgdm9pZCBpbml0KCBkb3VibGUgYTAsIGRvdWJsZSB4MCwgZG91YmxlIGIwICk7CiAgICBk
b3VibGUgZ2V0X3htaW4oKSBjb25zdCB7IHJldHVybiB4bWluOyB9CiAgICBkb3VibGUgZ2V0X2Z4
bWluKCkgY29uc3QgeyByZXR1cm4gZnhtaW47IH0KICAgIGludCBnZXRfaXRlcigpIGNvbnN0eyBy
ZXR1cm4gaXRlcjsgfQogICAgdm9pZCBuZXh0X21vdmUoIGRvdWJsZSBmdSApOwogICAgdm9pZCBu
ZXh0X3BvcygpOwogICAgYm9vbCBjaGVjaygpIGNvbnN0OwogICAgdmlydHVhbCB+QnJlbnQoKTsK
cHJpdmF0ZToKICAgIGRvdWJsZSBhLCBiLCB3LCB2LCBmdywgZnYsIGUsIHgsIGZ4LCB4bWluLCBm
eG1pbiwgZCwgdTsKICAgIGludCBpdGVyOwogICAgaW50IG1heF9pdGVyOwogICAgZG91YmxlIHRv
bDsKICAgIGRvdWJsZSBlcHM7Cn07CgpjbGFzcyBQb2ludCB7CnB1YmxpYzoKICAgIGRvdWJsZSB4
LCB5LCB6OwogICAgUG9pbnQoIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMgKSA6IHgoYSks
IHkoYiksIHooYyl7fQogICAgUG9pbnQoKSA6IHgoMCksIHkoMCksIHooMCl7fQogICAgUG9pbnQm
IG9wZXJhdG9yKz0oIGNvbnN0IFBvaW50JiBhICl7IHgrPWEueDsgeSs9YS55OyB6Kz1hLno7IHJl
dHVybiAqdGhpczsgfQogICAgUG9pbnQmIG9wZXJhdG9yLT0oIGNvbnN0IFBvaW50JiBhICl7IHgt
PWEueDsgeS09YS55OyB6LT1hLno7IHJldHVybiAqdGhpczsgfQogICAgUG9pbnQmIG9wZXJhdG9y
Kj0oIGNvbnN0IGRvdWJsZSYgYSApeyB4Kj1hOyB5Kj1hOyB6Kj1hOyByZXR1cm4gKnRoaXM7IH0K
ICAgIFBvaW50JiBvcGVyYXRvci89KCBjb25zdCBkb3VibGUmIGEgKXsgeC89YTsgeS89YTsgei89
YTsgcmV0dXJuICp0aGlzOyB9CgogICAgYm9vbCBpc3plcm8oKSBjb25zdCB7IHJldHVybiB4PT0w
ICYmIHk9PTAgJiYgej09MDsgfQoKICAgIH5Qb2ludCgpe30KfTsKCgoKaW5saW5lIGRvdWJsZSBx
bm9ybSggY29uc3QgUG9pbnQmIGEgKXsgcmV0dXJuIGEueCphLngrYS55KmEueSthLnoqYS56OyB9
CgpjbGFzcyBCcmVudDIgOiBwdWJsaWMgQnJlbnQKewpwdWJsaWM6CiAgICBkb3VibGUgaW5pdCgg
ZG91YmxlIGEwLCBkb3VibGUgYjAsIGRvdWJsZSBmYTAsIGRvdWJsZSBmYjAgKTsKfTsKCnN0cnVj
dCBEZW5zOwpzdHJ1Y3QgS1NCYXNlOwpzdHJ1Y3QgS1M7CnN0cnVjdCBDS1M7CnN0cnVjdCBFbmVy
Z3k7CgpjbGFzcyB0d29jZW47CmNsYXNzIEhhbWlsOwpjbGFzcyBDSGFtaWw7CmNsYXNzIEF0b21U
eXBlOwpjbGFzcyBBdG9tOwpjbGFzcyBYTWF0cml4OwpjbGFzcyBPZGVCYXNlOwpjbGFzcyBNb2xl
Y3VsZTsKY2xhc3MgTWF0cmljZXM7Cgp0eXBlZGVmIFRlbnNvcjxEVmVjdG9yLCBUMWQ+IEJhc2lz
Owp0eXBlZGVmIFRlbnNvcjxQb2ludCwgVDFkPiBQVmVjdG9yOwp0eXBlZGVmIFRlbnNvcjxQb2lu
dCwgVDJkPiBQTWF0cml4Owp0eXBlZGVmIFRlbnNvcjwgY29uc3QgQXRvbVR5cGUqLCBUMWQ+IEFU
VmVjdG9yOwp0eXBlZGVmIFRlbnNvcjxBdG9tLCBUMWQ+IEFWZWN0b3I7CnR5cGVkZWYgVGVuc29y
PGJvb2wsIFQxZD4gQlZlY3RvcjsKdHlwZWRlZiBUZW5zb3I8RE1hdHJpeCwgVDFkPiBUcmFmbzsK
CmNsYXNzIE51bWVyaWMgewpwdWJsaWM6CiAgICB2b2lkIGluaXQoIGNvbnN0IEFUVmVjdG9yJiBh
diwgaW50IHJzLCBjb25zdCBQVmVjdG9yJiBwb3MsIGNvbnN0IE1hdHJpY2VzJiBtYXQgKTsKICAg
IERWZWN0b3IgcmhvMm51bSggY29uc3QgRFZlY3RvciYgcmhvICkgY29uc3Q7CiAgICBEVmVjdG9y
IG51bTJ2KCBjb25zdCBEVmVjdG9yJiBudW0gKSBjb25zdDsKICAgIERWZWN0b3IgbnVtMnYwKCBj
b25zdCBEVmVjdG9yJiBudW0gKSBjb25zdDsKICAgIERWZWN0b3IgYXBwbHlfeCggY29uc3QgRFZl
Y3RvciYgcmhvICkgY29uc3Q7CiAgICBEVmVjdG9yIGFwcGx5X3hpKCBjb25zdCBEVmVjdG9yJiBy
aG8gKSBjb25zdDsKICAgIGRvdWJsZSBub3JtKCBjb25zdCBEVmVjdG9yJiB2ICkgY29uc3Q7CiAg
ICBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gcG1fLmRpbTIoKSAhPSAwOyB9CiAgICB1bnNpZ25l
ZCBsb25nIG1lbW9yeSgpIGNvbnN0Owpwcml2YXRlOgogICAgdm9pZCBjYWxjX2Jhc2lzX3ZhbHVl
cyggY29uc3QgQVRWZWN0b3ImIGF2LCBjb25zdCBQVmVjdG9yJiBwLCBpbnQgcnMsIGNvbnN0IFBW
ZWN0b3ImIHBvcyApOwpwcml2YXRlOgogICAgRE1hdHJpeCB4XzsKICAgIERNYXRyaXggeGdfOwog
ICAgRE1hdHJpeCBwbV87CiAgICBUZW5zb3I8UG9pbnQsIFQyZD4gcGdfOwogICAgRFZlY3RvciB3
XzsKICAgIERNYXRyaXggd21fOwp9OwoKc3RydWN0IFhNYXRyaXg7CgpzdHJ1Y3QgTWF0cmljZXMg
ewpwdWJsaWM6CiAgICBmcmllbmQgdm9pZCBmaW5pc2hfbWF0cmljZXMoIE1hdHJpY2VzJiBtICk7
CiAgICBjb25zdCBETWF0cml4JiBnZXRzaSgpIGNvbnN0OwoKICAgIE1hdHJpY2VzKCk7CgogICAg
Ym9vbCBpc19hdG9taWM7CgogICAgY29uc3QgWE1hdHJpeCogeG1hdDsKICAgIFBWZWN0b3IgcDsK
ICAgIE51bWVyaWMgbnVtZXJpYzsKCgogICAgRE1hdHJpeCBTOwogICAgRE1hdHJpeCBUOwogICAg
RE1hdHJpeCBXOwogICAgRE1hdHJpeCBHOwogICAgRE1hdHJpeCBGUzsKICAgIERNYXRyaXggRlQ7
CiAgICBEQ3ViaWMgQjsKICAgIERDdWJpYyBMOwogICAgRE1hdHJpeCBsbWF0OwogICAgRE1hdHJp
eCBkRTsKCgogICAgREN1YmljIFU7CiAgICBEQ3ViaWMgVjsKICAgIERNYXRyaXggVnQ7CiAgICBE
Q3ViaWMgWTsKCiAgICBEQ3ViaWMgWjsKCgpwcml2YXRlOgoKCiAgICBtdXRhYmxlIERNYXRyaXgg
U2k7CnB1YmxpYzoKICAgIERNYXRyaXggdmV4dDsKCgogICAgZG91YmxlIGVjbGFzOwoKICAgIERW
ZWN0b3IgcmhvY29yZTsKCgogICAgRFZlY3RvciByaG9ub3JtOwoKCiAgICBJVmVjdG9yIHBpOwoK
CgogICAgSVZlY3RvciBmcGk7CiAgICBJVmVjdG9yIHJpOwoKCgogICAgaW50IHBoaXNpemU7CiAg
ICBpbnQgZnVsbHNpemU7CiAgICBpbnQgcmhvc2l6ZTsKCiAgICB1bnNpZ25lZCBsb25nIG1lbW9y
eSgpIGNvbnN0Owp9OwoKZXh0ZXJuIERWZWN0b3IgdnZubjsKZXh0ZXJuIE1hdHJpY2VzIG1vbG9t
YXQ7Cgp2b2lkIGNvbXBhcmVfbWF0cmljZXMoIGNvbnN0IE1hdHJpY2VzJiBhLCBjb25zdCBNYXRy
aWNlcyYgYiApOwoKCkRNYXRyaXggeHl6X3JvdGF0b3IoIGNvbnN0IFBvaW50JiBwICk7ClBvaW50
IHRvcG9pbnQoIGNvbnN0IERWZWN0b3ImIHYgKTsKRE1hdHJpeCBtYWtlX21hdHJpeCggY29uc3Qg
RERNYXRyaXgmIGRkICk7CnZvaWQgbWFrZV9tYXRyaXgoIERNYXRyaXgmIG0sIGNvbnN0IERETWF0
cml4JiBkZCApOwoKRFZlY3RvciBsaW5zeXMoIERNYXRyaXggbGhzLCBEVmVjdG9yIHJocyApOwpE
TWF0cml4IGxpbnN5cyggRE1hdHJpeCBsaHMsIERNYXRyaXggcmhzICk7CkRDdWJpYyBsaW5zeXMo
IERNYXRyaXggbGhzLCBEQ3ViaWMgcmhzICk7CkRWZWN0b3IgbGluc3lzMiggRE1hdHJpeCBsaHMs
IERWZWN0b3IgcmhzLCBkb3VibGUgcHJlYyApOwpETWF0cml4IGxpbnN5czIoIERNYXRyaXggbGhz
LCBETWF0cml4IHJocywgZG91YmxlIHByZWMgKTsKREN1YmljIGxpbnN5czIoIERNYXRyaXggbGhz
LCBEQ3ViaWMgcmhzLCBkb3VibGUgcHJlYyApOwoKCkRWZWN0b3IgbGxzKCBjb25zdCBETWF0cml4
JiBhLCBjb25zdCBEVmVjdG9yJiBiICk7CkRWZWN0b3IgZWlnZW52ZWN0b3JzKCBETWF0cml4JiBh
ICk7CkRWZWN0b3IgZWlnZW52ZWN0b3JzKCBjb25zdCBETWF0cml4JiBhLCBETWF0cml4IGIsIERN
YXRyaXgmIGV2ICk7CnZvaWQgaW5zZXJ0KCBEVmVjdG9yJiBhLCBpbnQgeCwgY29uc3QgRFZlY3Rv
ciYgYiApOwp2b2lkIGluc2VydCggRE1hdHJpeCYgYSwgaW50IHgsIGludCB5LCBjb25zdCBETWF0
cml4JiBiICk7CnZvaWQgaW5zZXJ0KCBEQ3ViaWMmIGEsIGludCB4LCBpbnQgeSwgaW50IHosIGNv
bnN0IERDdWJpYyYgYiApOwoKRE1hdHJpeCBpbnZlcnQoIGNvbnN0IERNYXRyaXgmIGEgKTsKCgoK
CkRWZWN0b3IgbXVsdCggY29uc3QgRE1hdHJpeCYgYSwgY29uc3QgRFZlY3RvciYgYiApOwpEVmVj
dG9yIG11bHQoIGNvbnN0IERWZWN0b3ImLCBjb25zdCBETWF0cml4JiBhICk7CgoKRE1hdHJpeCBt
dWx0KCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBETWF0cml4JiBiICk7CgoKRE1hdHJpeCBtdWx0
KCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBETWF0cml4JiBiLCBjb25zdCBETWF0cml4JiBjICk7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KVGVuc29yPFQsIFQxZD4gam9pbiggY29uc3QgVGVuc29yPFQs
IFQxZD4mIGEsIGNvbnN0IFRlbnNvcjxULCBUMWQ+JiBiICk7CgoKRE1hdHJpeCB0cmFmbyggY29u
c3QgRE1hdHJpeCYgYSwgY29uc3QgRE1hdHJpeCYgdCApOwpETWF0cml4IHRyYWZvMSggY29uc3Qg
RE1hdHJpeCYgYSwgY29uc3QgRE1hdHJpeCYgdCApOwpETWF0cml4IHRyYWZvMSggY29uc3QgRE1h
dHJpeCYgYSwgY29uc3QgRE1hdHJpeCYgdCwgY29uc3QgRE1hdHJpeCYgUyApOwoKRFZlY3RvciBz
eW1tdWx0MjMoIGNvbnN0IERDdWJpYyYgYywgY29uc3QgRE1hdHJpeCYgYSApOwpETWF0cml4IHN5
bW11bHQxKCBjb25zdCBEQ3ViaWMmIGMsIGNvbnN0IERWZWN0b3ImIGEgKTsKCgoKdm9pZCBmaW5p
c2hfcmFkaWFsKCk7CnZvaWQgbG9hZGVsZW0oIERWZWN0b3ImIHJ4YywgRFZlY3RvciYgcmhvICk7
CnZvaWQgaW5pdF9yYWRpYWwoIGNvbnN0IEJhc2lzJiBwYiwgY29uc3QgQmFzaXMmIHJiICk7CgoK
ZG91YmxlIGVjcyggY29uc3QgS1MmIGtzICk7CnZvaWQgcmFkX2NvbXBhcmVfcmhvKCBjb25zdCBE
VmVjdG9yJiByaG8gKTsKIyAxNzU0ICJ4Mi5jYyIKc3RydWN0IGFsaWcgewogICAgZXhwbGljaXQg
YWxpZyggZG91YmxlIGQsIGludCBuPTAgKSA6IGRfIChkICksIGlfKCBuICl7fTsKICAgIGRvdWJs
ZSBkXzsKICAgIGludCBpXzsKfTsKCgoKCgoKdm9pZCBvdXRwdXRfZWlnZW52YWx1ZXMoIGNvbnN0
IEtTJiBrLCBjb25zdCBNYXRyaWNlcyYgbSApOwoKCgoKCmludCBiYXNpc19zaXplKCBjb25zdCBC
YXNpcyYgYiApOwppbnQgYmFzaXNfaW5kZXgoIGNvbnN0IEJhc2lzJiBiLCBpbnQgbiApOwoKdm9p
ZCBtYWtlX2dhdXNzX2Jhc2lzKCBCYXNpcyYgcGhpLCBCYXNpcyYgcmhvICk7CgoKCgp2b2lkIGNs
ZWFyX2hhbWlsKCBjb25zdCBNYXRyaWNlcyYgbSwgRE1hdHJpeCYgaCwgY29uc3QgRE1hdHJpeCYg
ZXYsIGludCBuICk7CnZvaWQgZ3JvdW5kc3RhdGUoIEtTJiBncywgY29uc3QgTWF0cmljZXMmIG1h
dCApOwp2b2lkIGZpeF9nc19vY2MoIEtTJiBrLCBjb25zdCBNYXRyaWNlcyYgbSApOwoKCgpEVmVj
dG9yIG1hdDJsaW4oIGNvbnN0IERNYXRyaXgmIGEgKTsKRE1hdHJpeCBtYXQybGlueCggY29uc3Qg
REN1YmljJiBhICk7Cgp2b2lkIHNraXBfeHkoIE1hdHJpY2VzJiBtLCBjb25zdCBJSVZlY3RvciYg
cGwsIGNvbnN0IElJVmVjdG9yJiBybCwgY29uc3QgSUlWZWN0b3ImIGZwbCApOwoKdm9pZCBmaW5p
c2hfbWF0cmljZXMoIE1hdHJpY2VzJiBtICk7CnZvaWQgc3RhYmxlX3ZleHQoIE1hdHJpY2VzJiBt
ICk7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCBzeW1tZXRyaXplKCBUZW5zb3I8VCwgVDJk
PiAmIGEgKTsKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgc3ltY2hlY2soIGNvbnN0IFRlbnNvcjxU
LCBUMmQ+ICYgYSwgZG91YmxlIGUsIGNvbnN0IGNoYXIqIHMgKTsKdGVtcGxhdGUgPGNsYXNzIFQ+
CnZvaWQgc3ltbWV0cnkoIFRlbnNvcjxULCBUMmQ+ICYgYSwgZG91YmxlIGUsIGNvbnN0IGNoYXIq
IHMgKTsKdm9pZCBzeW1tZXRyeSggREN1YmljJiBhLCBkb3VibGUgZSwgY29uc3QgY2hhciogcyAp
Owp2b2lkIHN5bW1ldHJ5MyggREN1YmljJiBhLCBkb3VibGUgZSwgY29uc3QgY2hhciogcyApOwoK
RFZlY3RvciBiYXNpc19jb252ZXJ0KCBjb25zdCBEVmVjdG9yJiBhLCBjb25zdCBUcmFmbyYgdDEg
KTsKRE1hdHJpeCBiYXNpc19jb252ZXJ0KCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBUcmFmbyYg
dDEsIGNvbnN0IFRyYWZvJiB0MiApOwpETWF0cml4IGJhc2lzX2NvbnZlcnQoIGNvbnN0IERNYXRy
aXgmIGEsIGNvbnN0IERNYXRyaXgmIHQxLCBjb25zdCBETWF0cml4JiB0MiApOwpEVmVjdG9yIGJh
c2lzX2NvbnZlcnQoIGNvbnN0IERWZWN0b3ImIGEsIGNvbnN0IERNYXRyaXgmIHQxICk7CkRDdWJp
YyBiYXNpc19jb252ZXJ0KCBjb25zdCBEQ3ViaWMmIGEsIGNvbnN0IERNYXRyaXgmIHQxLCBjb25z
dCBETWF0cml4JiB0MiApOwpEQ3ViaWMgYmFzaXNfY29udmVydCggY29uc3QgREN1YmljJiBhLCBj
b25zdCBETWF0cml4JiB0MSwgY29uc3QgRE1hdHJpeCYgdDIsIGNvbnN0IERNYXRyaXgmIHQzICk7
CnZvaWQgYmFzaXNfY29udmVydCggTWF0cmljZXMmIG0sIGNvbnN0IEF0b21UeXBlJiBhICk7CnZv
aWQgcHJpbnRtYXQoIGNvbnN0IE1hdHJpY2VzJiApOwpEVmVjdG9yIGFhdjJyaG8oIGNvbnN0IE1h
dHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhYSApOwpEVmVjdG9yIGFhdTJyaG8oIGNvbnN0IE1h
dHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhYSApOwoKCgpETWF0cml4IHBvdF9sZGExKCBjb25z
dCBNYXRyaWNlcyYgbSwgY29uc3QgRFZlY3RvciYgcmhvLCBjb25zdCBETWF0cml4JiBhYSApOwpk
b3VibGUgZWxkYV9hdXgxKCBjb25zdCBNYXRyaWNlcyYgbSwgY29uc3QgRFZlY3RvciYgcmhvLCBj
b25zdCBETWF0cml4JiBhYSApOwoKZG91YmxlIGVueGNfbGRhKCBjb25zdCBNYXRyaWNlcyYgbSwg
Y29uc3QgS1NCYXNlJiBhICk7Cgp2b2lkIGluaXRfbGRhX3NwbGluZSgpOwpkb3VibGUgZW5fbGRh
MSggZG91YmxlIHIgKTsKZG91YmxlIGVuX2xkYV9kMSggZG91YmxlIHIgKTsKCgpkb3VibGUgbGRh
MiggZG91YmxlIHIgKTsKZG91YmxlIGxkYV9kMiggZG91YmxlIHIgKTsKCgoKCmRvdWJsZSBudW1s
ZGFfZW4oIGNvbnN0IEtTQmFzZSYgaywgY29uc3QgTWF0cmljZXMmIG0gKTsKCmRvdWJsZSBudW1s
ZGFfc2ljX2VuKCBjb25zdCBEVmVjdG9yJiByaG8sIGNvbnN0IE1hdHJpY2VzJiBtICk7CkRWZWN0
b3IgbnVtbGRhX3NpY19wb3QoIGNvbnN0IERWZWN0b3ImIHJobywgY29uc3QgTWF0cmljZXMmIG0g
KTsKCgoKdm9pZCBzaWNlbiggS1MmIGtzLCBjb25zdCBNYXRyaWNlcyYgbSApOwpkb3VibGUgZWxk
YV9zaWMoIGNvbnN0IE1hdHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhICk7CmRvdWJsZSB0ZF9z
aWNfZW4oIGNvbnN0IENLUyYgaywgY29uc3QgTWF0cmljZXMmIG0gKTsKdm9pZCB0ZF9zaWNfcG90
KCBDSGFtaWwmIGgsIGNvbnN0IENLUyYgaywgY29uc3QgTWF0cmljZXMmIG0gKTsKRE1hdHJpeCBz
aWNwb3Rfc3ltbSggY29uc3QgRE1hdHJpeCYgYSwgY29uc3QgRE1hdHJpeCYgYWEsIGNvbnN0IERE
VmVjdG9yJiByaG9zaWMsIGNvbnN0IE1hdHJpY2VzJiBtICk7CkRNYXRyaXggc2ljcG90X2Jhc2Ux
KCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBERFZlY3RvciYgcmhvc2ljLCBjb25zdCBNYXRyaWNl
cyYgbSApOwpETWF0cml4IHNpY3BvdF90ZGdzKCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBETWF0
cml4JiBhYSwgY29uc3QgRERWZWN0b3ImIHJob3NpYywgY29uc3QgTWF0cmljZXMmIG0gKTsKCgoK
Cgp2b2lkIGNhbGNfeGMoIGNvbnN0IE1hdHJpY2VzJiBtLCBjb25zdCBLUyYga3MsIERNYXRyaXgm
IHZ4YzEsIERNYXRyaXgmIHZ4YzIgKTsKRFZlY3RvciBwb3RrbGkyKCBjb25zdCBNYXRyaWNlcyYg
bSwgY29uc3QgS1MmIGtzICk7Cgpkb3VibGUgdHdvY2VuX2VuY29yZShjb25zdCBBdG9tVHlwZSYg
dDEsIGNvbnN0IEF0b21UeXBlJiB0MiwgY29uc3QgREN1YmljJiB2LCBjb25zdCB0d29jZW4mIG0x
MiApOwoKCgp0ZW1wbGF0ZTwgY2xhc3MgVD4KVGVuc29yPFQsIFQzZD4gbWFrZV95bSggY29uc3Qg
REN1YmljJiB5LCBjb25zdCBUZW5zb3I8VCwgVDJkPiYgYSApOwoKZG91YmxlIGVjcyggY29uc3Qg
S1MmIGtzICk7CkRNYXRyaXggaGYxKCBjb25zdCBNYXRyaWNlcyYgbSwgY29uc3QgRE1hdHJpeCYg
YSwgY29uc3QgRE1hdHJpeCYgYWEgKTsKCmRvdWJsZSBlbnhjX2hmKCBjb25zdCBNYXRyaWNlcyYg
bSwgY29uc3QgRE1hdHJpeCAmIGEgKTsKZG91YmxlIGVueGMoIGNvbnN0IEtTJiBhLCBjb25zdCBN
YXRyaWNlcyYgbSApOwpkb3VibGUgZW54YyggY29uc3QgQ0tTJiBhLCBjb25zdCBNYXRyaWNlcyYg
bSApOwoKCgp2b2lkIGtsaTEoIGNvbnN0IE1hdHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhLCBj
b25zdCBETWF0cml4JiBhYSwgRE1hdHJpeCYgdnhjICk7CkRWZWN0b3Iga2xpMiggY29uc3QgTWF0
cmljZXMmIG0sIGNvbnN0IENLUyYga3MsIERNYXRyaXgmIHZ4YyApOwpEVmVjdG9yIGtsaTIoIGNv
bnN0IE1hdHJpY2VzJiBtLCBjb25zdCBLUyYga3MsIERNYXRyaXgmIHZ4YyApOwpkb3VibGUga2xp
YXV4MDEoIGNvbnN0IE1hdHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBETWF0cml4
JiB4bWFsLCBETWF0cml4JiBsaHMxLCBEVmVjdG9yJiByaHMxICk7CgoKCnZvaWQgaGFtaWwya3Mo
IGNvbnN0IEhhbWlsJiBoYW1pbCwgS1MmIGtzLCBjb25zdCBNYXRyaWNlcyYgbWF0ICk7CkRWZWN0
b3Igc3ltX3N1bTMoIGNvbnN0IERNYXRyaXgmIGFhLCBjb25zdCBEQ3ViaWMmIHkgKTsKCnZvaWQg
ZmlsbF9rcyggS1MmIHgsIGNvbnN0IE1hdHJpY2VzJiBtICk7CnZvaWQgZmlsbF9rc19ub2VuZXJn
eSggS1MmIHgsIGNvbnN0IE1hdHJpY2VzJiBtICk7CnZvaWQgZmlsbF9rcyggQ0tTJiB4LCBjb25z
dCBNYXRyaWNlcyYgbSApOwp2b2lkIGZpbGxfcmhvKCBDS1MmIHgsIGNvbnN0IE1hdHJpY2VzJiBt
ICk7CnZvaWQgZmlsbF9hYSggS1MmIHgsIGNvbnN0IE1hdHJpY2VzJiBtICk7CkRNYXRyaXggbWFr
ZV9hYSggY29uc3QgRE1hdHJpeCYgYSApOwoKCgpDSGFtaWwgaGFtaWx0b24oIGNvbnN0IENLUyYg
a3MsIGNvbnN0IE1hdHJpY2VzJiBtICk7CkhhbWlsIGhhbWlsdG9uKCBjb25zdCBLUyYga3MsIGNv
bnN0IE1hdHJpY2VzJiBtICk7CkhhbWlsIGhhbWlsdG9uX3RkZ3MoIGNvbnN0IEtTJiBrcywgY29u
c3QgTWF0cmljZXMmIG0gKTsKSGFtaWwgaGFtaWx0b25fbm9zaWMoIGNvbnN0IEtTJiBrcywgY29u
c3QgTWF0cmljZXMmIG0gKTsKdm9pZCBhZGRfcmFuZG9tKCBIYW1pbCYgaCApOwp2b2lkIGFkZF9y
YW5kb20oIEtTJiB4ICk7CgoKCnZvaWQgaW5pdF9tb2xvdGltZSgpOwpkb3VibGUgbW9sb3RpbWUo
KTsKdm9pZCBzZXRfbW9sb3RpbWUoIGRvdWJsZSBhICk7CmJvb2wgdGltZXN0ZXAoKTsKYm9vbCB0
aW1lX2lzX3VwKCBkb3VibGUgYSApOwoKCgoKCgp2b2lkIGZpbGxfZW5lcmd5KCBLUyYga3MsIGNv
bnN0IE1hdHJpY2VzJiBtICk7CgpFbmVyZ3kgZW5lcmd5KCBjb25zdCBDS1MmIGtzLCBjb25zdCBN
YXRyaWNlcyYgbSApOwoKdm9pZCBvdXRwdXRfZW5lcmd5KCBjb25zdCBNYXRyaWNlcyYgbSwgY29u
c3QgQ0tTJiBjLCBkb3VibGUgZWsgKTsKdm9pZCBvdXRwdXRfZW5lcmd5KCBjb25zdCBNYXRyaWNl
cyYgbSwgY29uc3QgS1MmIGEsIGRvdWJsZSBlayApOwoKRE1hdHJpeCBjYWxjX3htYXQoIGNvbnN0
IE1hdHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhYSApOwpETWF0cml4IGNhbGNfeG1hdDEoIGNv
bnN0IE1hdHJpY2VzJiBtLCBjb25zdCBETWF0cml4JiBhYSApOwpETWF0cml4IGNhbGNfdm1hdCgg
Y29uc3QgTWF0cmljZXMmIG0sIGNvbnN0IERWZWN0b3ImIHJobyApOwpETWF0cml4IGNhbGNfcW1h
dCggY29uc3QgTWF0cmljZXMmIG0sIGNvbnN0IERWZWN0b3ImIHJobyApOwpETWF0cml4IGNhbGNf
cW1hdCggY29uc3QgS1MmIGtzLCBjb25zdCBNYXRyaWNlcyYgbSApOwpETWF0cml4IGNhbGNfcW1h
dCggY29uc3QgQ0tTJiBrcywgY29uc3QgTWF0cmljZXMmIG0gKTsKCgpkb3VibGUgZW5xKCBjb25z
dCBNYXRyaWNlcyYgbSwgY29uc3QgRFZlY3RvciYgcmhvICk7CgoKCgoKZG91YmxlIGxhc2VyKCBk
b3VibGUgdCApOwpQb2ludCBsYXNlcl92ZWMoIGRvdWJsZSB0ICk7CkRNYXRyaXggZGlwb2xtYXQo
IGNvbnN0IE1hdHJpY2VzJiBtICk7ClBvaW50IGNhbGNfZGlwb2xlKCBjb25zdCBDS1MmIGtzLCBj
b25zdCBNYXRyaWNlcyYgbSApOwoKCgpETWF0cml4IG1ha2VfcGhpX3RyYWZvKCBjb25zdCBETWF0
cml4JiBhLCBJVmVjdG9yJiBpbiwgY29uc3QgQmFzaXMmIHBoaSwgaW50IGNvcmUgKTsKCkRNYXRy
aXggbWFrZV9yaG9fdHJhZm8oIGNvbnN0IEJhc2lzJiByYiwgTWF0cmljZXMmIG0sCiAgICAgICAg
ICAgICAgICAgICAgICAgIERWZWN0b3ImIHJob251Y2wsIERWZWN0b3ImIHJob2VmZiwgRFZlY3Rv
ciYgcmhvY29yZSwgY29uc3QgRE1hdHJpeCB0cCApOwoKRE1hdHJpeCBtYWtlX3RyYWZvKCBjb25z
dCBCYXNpcyYgYiwgaW50IG4gKTsKCgoKClBWZWN0b3IgZm9yY2UoIGNvbnN0IENLUyYgYzAsIFhN
YXRyaXgmIHhtYXQsIGNvbnN0IFBWZWN0b3ImIHBvcyApOwpQVmVjdG9yIGZvcmNlKCBjb25zdCBL
UyYgYzAsIFhNYXRyaXgmIHhtYXQsIGNvbnN0IFBWZWN0b3ImIHBvcyApOwoKCgpPZGVCYXNlKiBt
YWtlX3RkX29kZSggY29uc3QgQ0tTJiBhLCBjb25zdCBNb2xlY3VsZSogcCApOwpPZGVCYXNlKiBt
YWtlX3RkZ3Nfb2RlKCBjb25zdCBLUyYgYSwgY29uc3QgTW9sZWN1bGUqIHAgKTsKS1MgYXBwbHlf
aGFtaWwoIGNvbnN0IEhhbWlsJiBoYW0sIGNvbnN0IEtTJiBhLCBjb25zdCBNYXRyaWNlcyYgbSAp
OwoKCgp2b2lkIG9ydGhvKCBETWF0cml4JiBhLCBjb25zdCBETWF0cml4JiBTICk7CnZvaWQgZml4
X25vcm0oIENLUyYgYSwgY29uc3QgTWF0cmljZXMmIG0gKTsKdm9pZCBzeW1tX3JobyggRFZlY3Rv
ciYgeCwgY29uc3QgTWF0cmljZXMmIG0gKTsKdm9pZCBtYWtlX3B1cmUoIEtTJiBhLCBjb25zdCBN
YXRyaWNlcyYgbSwgY29uc3QgSGFtaWwmIGggKTsKdm9pZCBmaXhfbm9ybSggS1MmIGEsIGNvbnN0
IE1hdHJpY2VzJiBtICk7CnZvaWQgZml4X25vcm1fbm9lbmVyZ3koIEtTJiBhLCBjb25zdCBNYXRy
aWNlcyYgbSApOwp2b2lkIHJlbm9ybV9hYSggS1MmIGssIGNvbnN0IERNYXRyaXgmIFMgKTsKdm9p
ZCBmaWxsX251bWVyaWMoIERlbnMmIHgsIGNvbnN0IE1hdHJpY2VzJiBtICk7CgoKCnZvaWQgaW5p
dF92YXJpYWJsZXMoKTsKUFZlY3RvciBnZW9tZXRyeSggZG91YmxlIHQgKTsKCgoKZG91YmxlIHBh
cnNlKCBjb25zdCBjaGFyKiBwICk7CgoKCgoKCmV4dGVybiBjb25zdCBjaGFyKiBtb2xvX3ZlcnNp
b247CgoKCgpleHRlcm4gQVZlY3RvciBhZGRfZ3JpZCggQVZlY3RvciBhICk7CgoKc3RydWN0IEhh
bWlsIHsKICAgIEhhbWlsKCl7fQogICAgZXhwbGljaXQgSGFtaWwoIGludCBwaGlzaXplICkgOiBo
MSggcGhpc2l6ZSwgcGhpc2l6ZSApLCBoMiggcGhpc2l6ZSwgcGhpc2l6ZSApe30KICAgIEhhbWls
KCBjb25zdCBETWF0cml4JiBhLCBjb25zdCBETWF0cml4JiBiICkgOiBoMShhKSwgaDIoYil7fQog
ICAgRE1hdHJpeCBoMSwgaDI7Cn07CgpzdHJ1Y3QgQ0hhbWlsIHsKICAgIERNYXRyaXggaDEsIGgy
LCBpaDEsIGloMjsKfTsKCnN0cnVjdCBFbmVyZ3kgewogICAgRW5lcmd5KCk7CiAgICBvcGVyYXRv
ciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0b3Q7IH0KICAgIGRvdWJsZSB0b3Q7CiAgICBkb3Vi
bGUgZWw7CiAgICBkb3VibGUga2luOwogICAgZG91YmxlIGNsYXM7CiAgICBkb3VibGUgdDsKICAg
IGRvdWJsZSBleHQ7CiAgICBkb3VibGUgcTsKICAgIGRvdWJsZSB4YzsKICAgIGRvdWJsZSBzaWM7
CiAgICBkb3VibGUgbGFzZXI7CiAgICBkb3VibGUgZGU7Cn07CgpzdHJ1Y3QgRGVucyB7CiAgICBE
ZW5zKCBpbnQgeG0sIGludCBlcGx1cywgaW50IGVtaW51cyApIDogeG1vZGUoIHhtICksIG5lbDEo
IGVwbHVzICksIG5lbDIoIGVtaW51cyApLCBzeW1tKCAwICl7fQogICAgRFZlY3RvciByaG8xLCBy
aG8yLCByaG87CiAgICBEVmVjdG9yIHJuMSwgcm4yOwogICAgUFZlY3RvciByZzEsIHJnMjsKICAg
IGludCB4bW9kZTsKICAgIGludCBuZWwxLCBuZWwyOwogICAgaW50IHN5bW07Cn07CgpzdHJ1Y3Qg
S1NCYXNlIDogcHVibGljIERlbnMgewogICAgS1NCYXNlKCBpbnQgeG0sIGludCBlcGx1cywgaW50
IGVtaW51cyApIDogRGVucyggeG0sIGVwbHVzLCBlbWludXMgKXt9CiAgICBETWF0cml4IGFhMSwg
YWEyLCBhYTsKICAgIEREVmVjdG9yIHJob3NpYzEsIHJob3NpYzI7Cn07CgpzdHJ1Y3QgS1MgOiBw
dWJsaWMgS1NCYXNlIHsKICAgIEtTKCBpbnQgeG0sIGludCBlcGx1cywgaW50IGVtaW51cyApIDog
S1NCYXNlKCB4bSwgZXBsdXMsIGVtaW51cyApe30KICAgIERWZWN0b3IgZXZhbDEsIGV2YWwyOwog
ICAgRE1hdHJpeCBldmVjMSwgZXZlYzI7CiAgICBETWF0cml4IGtzMSwga3MyOwogICAgRE1hdHJp
eCBoZjEsIGhmMjsKICAgIGRvdWJsZSBlc2ljMSwgZXNpYzI7CiAgICBFbmVyZ3kgZW5lcmd5Owp9
OwoKCgoKSGFtaWwgcG90X2NvcnIoIGNvbnN0IE1hdHJpY2VzJiBtLCBjb25zdCBLUyYga3MgKTsK
CgpIYW1pbCBtaXhfaGFtaWwoIGNvbnN0IEhhbWlsJiBhLCBjb25zdCBIYW1pbCYgYiwgZG91Ymxl
IG0sIGludCB4bSApCnsKICAgIEhhbWlsIGVyZzsKICAgIGRvdWJsZSBkMSA9IDEtbTsKICAgIGRv
dWJsZSBkMiA9IG07CiAgICBlcmcuaDEgPSBkMSogYS5oMSArIGQyKmIuaDE7CiAgICBpZiggeG09
PTEgKSBlcmcuaDIgPSBlcmcuaDE7CiAgICBlbHNlIGVyZy5oMiA9IGQxKiBhLmgyICsgZDIqYi5o
MjsKCiAgICByZXR1cm4gZXJnOwp9CgpzdGF0aWMKS1Mga3NsaW5fYXV4KCBjb25zdCBLUyYgZ3Mw
LCBjb25zdCBLUyYgZ3MxLCBjb25zdCBNYXRyaWNlcyYgLCBkb3VibGUgbjAsIGRvdWJsZSBuMSAp
CnsKICAgIEtTIGdzID0gZ3MxOwoKICAgIGdzLmFhMSA9IGdzMC5hYTEgKiBuMCArIGdzMS5hYTEg
KiBuMTsKICAgIGdzLmFhMiA9IGdzMC5hYTIgKiBuMCArIGdzMS5hYTIgKiBuMTsKCiAgICBncy5o
ZjEgPSBnczAuaGYxICogbjAgKyBnczEuaGYxICogbjE7CiAgICBncy5oZjIgPSBnczAuaGYyICog
bjAgKyBnczEuaGYyICogbjE7CgogICAgZ3MucmhvMSA9IGdzMC5yaG8xICogbjAgKyBnczEucmhv
MSAqIG4xOwogICAgZ3MucmhvMiA9IGdzMC5yaG8yICogbjAgKyBnczEucmhvMiAqIG4xOwoKICAg
IGdzLnJuMSA9IGdzMC5ybjEgKiBuMCArIGdzMS5ybjEgKiBuMTsKICAgIGdzLnJuMiA9IGdzMC5y
bjIgKiBuMCArIGdzMS5ybjIgKiBuMTsKCiAgICBncy5hYSA9IGdzLmFhMSArIGdzLmFhMjsKICAg
IGdzLnJobyA9IGdzLnJobzEgKyBncy5yaG8yOwoKICAgIGdzLmtzMS5yZXNpemUoIDAsIDAgKTsK
ICAgIGdzLmtzMi5yZXNpemUoIDAsIDAgKTsKICAgIGdzLmV2ZWMxLnJlc2l6ZSggMCwgMCApOwog
ICAgZ3MuZXZlYzIucmVzaXplKCAwLCAwICk7CiAgICBncy5ldmFsMS5yZXNpemUoIDAgKTsKICAg
IGdzLmV2YWwyLnJlc2l6ZSggMCApOwoKICAgIGdzLnJob3NpYzEucmVzaXplKCAwICk7CiAgICBn
cy5yaG9zaWMyLnJlc2l6ZSggMCApOwoKICAgIHJldHVybiBnczsKfQoKc3RhdGljCktTIGtzbGlu
X25vbnB1cmUoIGNvbnN0IEtTJiBnczAsIGNvbnN0IEtTJiBnczEsIGNvbnN0IE1hdHJpY2VzJiBt
LCBkb3VibGUgbjAsIGRvdWJsZSBuMSApCnsKICAgIEtTIHggPSBrc2xpbl9hdXgoIGdzMCwgZ3Mx
LCBtLCBuMCwgbjEgKTsKICAgIGZpbGxfZW5lcmd5KCB4LCBtICk7CiAgICByZXR1cm4geDsKfQoK
c3RhdGljCktTIGtzbGluX3B1cmUoIGNvbnN0IEtTJiBnczAsIGNvbnN0IEtTJiBnczEsIGNvbnN0
IE1hdHJpY2VzJiBtLCBkb3VibGUgbjAsIGRvdWJsZSBuMSwgY29uc3QgSGFtaWwmIGggKQp7CiAg
ICBLUyB4ID0ga3NsaW5fYXV4KCBnczAsIGdzMSwgbSwgbjAsIG4xICk7CiAgICBtYWtlX3B1cmUo
IHgsIG0sIGggKTsKICAgIHJldHVybiB4Owp9CgpjbGFzcyBHc0JyZW50IDogcHVibGljIEJyZW50
IHsKcHVibGljOgogICAgR3NCcmVudCggY29uc3QgTWF0cmljZXMmIG0sIGNvbnN0IEtTJiBnczAs
IGNvbnN0IEtTJiBnczEsIGNvbnN0IEhhbWlsJiBoICk7CiAgICBLUyBydW4oIGRvdWJsZSB4LCBk
b3VibGUgZnggKTsKICAgIGRvdWJsZSBmKCBkb3VibGUgeCApOwpwcml2YXRlOgogICAgY29uc3Qg
S1MmIGdzMF87CiAgICBjb25zdCBLUyYgZ3MxXzsKICAgIEtTIGdzXzsKICAgIGNvbnN0IE1hdHJp
Y2VzJiBtXzsKICAgIGNvbnN0IEhhbWlsJiBoXzsKfTsKCkdzQnJlbnQgOjogR3NCcmVudCggY29u
c3QgTWF0cmljZXMmIG0sIGNvbnN0IEtTJiBnczAsIGNvbnN0IEtTJiBnczEsIGNvbnN0IEhhbWls
JiBoICkKICAgIDogZ3MwXyggZ3MwICksIGdzMV8oIGdzMSApLCBnc18oIGdzMCApLCBtXyggbSAp
LCBoXyggaCApCnsKICAgIHNldF90b2woIDAuMDEgKTsKICAgIHNldF9lcHMoIDAuMDAwMDEgKTsK
fQoKZG91YmxlIEdzQnJlbnQ6OmYoIGRvdWJsZSB4ICkKewogICAgY29uc3QgS1MgZ3N0ZXN0ID0g
a3NsaW5fbm9ucHVyZSggZ3MwXywgZ3MxXywgbV8sIDEteCwgeCApOwogICAgaWYoIGdzdGVzdC5l
bmVyZ3kudG90IDwgZ3NfLmVuZXJneS50b3QgKSBnc18gPSBnc3Rlc3Q7CiAgICByZXR1cm4gZ3N0
ZXN0LmVuZXJneTsKfQoKS1MgR3NCcmVudDo6cnVuKCBkb3VibGUgeCwgZG91YmxlIGZ4ICkKewog
ICAgaW5pdCggMCwgeCwgMSwgZ3MwXy5lbmVyZ3ksIGZ4LCBnczFfLmVuZXJneSApOwogICAgQnJl
bnQ6OnJ1bigpOwogICAgcmV0dXJuIGdzXzsKfQoKc3RhdGljIGRvdWJsZSBnZXRlbiggY29uc3Qg
SGFtaWwmIGgsIGNvbnN0IEtTJiBhICkKewogICAgcmV0dXJuIDE3LjA7Cn0KCmludCBnc2NvdW50
ID0gMDsKCktTIG5leHRfZ3Nfbm9zaWMoIEtTIHgwLCBjb25zdCBNYXRyaWNlcyYgbSApCnsKICAg
IGRvdWJsZSBiMDsKCiAgICBIYW1pbCBoMCA9IGhhbWlsdG9uKCB4MCwgbSApOwogICAgS1MgeDEg
PSB4MDsKICAgIGhhbWlsMmtzKCBoMCwgeDEsIG0gKTsKCgoKICAgIEtTIHggPSB4MDsKICAgIEtT
IHgyID0geDA7CiAgICBpbnQgaTsKICAgIGZvciggaT0wOyBpPDE3OyArK2kgKXsKCiAgICAgICAg
ZG91YmxlIGUwMCA9IGdldGVuKCBoMCwgeDAgKTsKICAgICAgICBkb3VibGUgZTAxID0gZ2V0ZW4o
IGgwLCB4MSApOwogICAgICAgIGRvdWJsZSBnMGIgPSAtIChlMDEgLSBlMDApOwoKCiAgICAgICAg
aWYoIGcwYiA8IDIyICl7CiAgICAgICAgICAgIGlmKCB4Mi5lbmVyZ3kgPCB4LmVuZXJneSApeyB4
ID0geDI7IGJyZWFrOyB9CiAgICAgICAgICAgIGlmKCB4LmtzMS5kaW0xKCkgPiAwICkgYnJlYWs7
CiAgICAgICAgICAgIGlmKCB4Mi5lbmVyZ3kgLSAxIDwgeC5lbmVyZ3kgKXsgeCA9IHgyOyBicmVh
azsgfQogICAgICAgICAgICBpZiggZzBiIDwgMSAqIDAuMDEgKSBicmVhazsKICAgICAgICB9CiAg
ICAgICAgR3NCcmVudCBiKCBtLCB4MCwgeDEsIGgwICk7CiAgICAgICAgZG91YmxlIGUwNSA9IGIu
ZiggMC41ICk7CiAgICAgICAgaWYoICggZTA1ID4geDEuZW5lcmd5ICYmIHgwLmVuZXJneSA+IHgx
LmVuZXJneSApICl7CiAgICAgICAgICAgIHggPSB4MTsKICAgICAgICAgICAgYjAgPSAxLjA7CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeCA9IGIucnVuKCAwLjUsIGUwNSApOwogICAgICAg
ICAgICBiMCA9IGIuZ2V0X3htaW4oKTsKICAgICAgICB9CiAgICAgICAgaWYoIGIwID09IDAuMCAp
ewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKICAgICAgICBpZiggeDAuZW5lcmd5IDwg
eC5lbmVyZ3kgKXsKICAgICAgICAgICAgeCA9IHgwOwogICAgICAgICAgICBicmVhazsKICAgICAg
ICB9CiAgICAgICAgaWYoIHgwLmVuZXJneSAtIDEgKiAxZS00IDwgeC5lbmVyZ3kgKXsKICAgICAg
ICAgICAgKysgZ3Njb3VudDsKICAgICAgICAgICAgaWYoIGdzY291bnQ9PTMgKSB7CgogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgZ3Njb3VudD0wOwoK
CiAgICAgICAgSGFtaWwgaDEgPSBoYW1pbHRvbiggeCwgbSApOwoKICAgICAgICBoYW1pbDJrcygg
aDEsIHgyLCBtICk7CgogICAgICAgIGRvdWJsZSBlMTAgPSBnZXRlbiggaDEsIHgwICk7CiAgICAg
ICAgZG91YmxlIGUxMSA9IGdldGVuKCBoMSwgeDEgKTsKICAgICAgICBkb3VibGUgZTEyID0gZ2V0
ZW4oIGgxLCB4MiApOwoKICAgICAgICBkb3VibGUgZTAyID0gZ2V0ZW4oIGgwLCB4MiApOwogICAg
ICAgIGRvdWJsZSBnMGMgPSAtIChlMDIgLSBlMDApOwoKICAgICAgICBkb3VibGUgZzFiID0gLSAo
ZTExIC0gZTEwKTsKICAgICAgICBkb3VibGUgZzFjID0gLSAoZTEyIC0gZTEwKTsKCgogICAgICAg
IGlmKCBnMWMgPD0gMCApewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZG91
YmxlIGcwMCA9IGcwYjsKICAgICAgICBkb3VibGUgZzExID0gKGcxYiAtIGcwYikgKiBnMWIgKyAo
ZzFjIC0gZzBjKSAqIGcxYzsKCiAgICAgICAgZG91YmxlIGJldGEgPSBnMTEgLyBnMDA7CgogICAg
ICAgIGRvdWJsZSBwYiA9IGcxYiArIGJldGE7CiAgICAgICAgZG91YmxlIHBjID0gZzFjOwoKICAg
ICAgICBwYiAvPSBwYzsKICAgICAgICBwYyA9IDE7CgogICAgICAgIGlmKCBwYiA+IC1iMCAmJiBn
MWIgLyBnMWMgPCAwLjAxICYmIGIwIDwgMC45OSApIHsKICAgICAgICAgICAgZG91YmxlIGsgPSAo
MS4wLWIwKSAvICggcGIgKyBwYyk7CiAgICAgICAgICAgIHBiICo9IGs7CiAgICAgICAgICAgIHBj
ICo9IGs7CiAgICAgICAgICAgIHgxID0ga3NsaW5fbm9ucHVyZSggeDEsIHgyLCBtLCBwYitiMCwg
cGMgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB4MSA9IHgyOwogICAgICAgIH0KCiAg
ICAgICAgeDAgPSB4OwogICAgICAgIGgwID0gaDE7CiAgICB9CiAgICBpZiggeC5rczEuZGltMSgp
ID09IDAgKXsKCiAgICAgICAgbWFrZV9wdXJlKCB4LCBtLCBoMCApOwogICAgfQogICAgcmV0dXJu
IHg7Cgp9CgpjbGFzcyBTaWNCcmVudCA6IHB1YmxpYyBCcmVudDIgewpwdWJsaWM6CiAgICBTaWNC
cmVudCggY29uc3QgTWF0cmljZXMmIG0sIGNvbnN0IEtTJiBnczAsIGNvbnN0IEtTJiBnczEsIGRv
dWJsZSBiMCApOwogICAgZG91YmxlIGYoIGRvdWJsZSB4ICk7CiAgICBLUyBydW4oKSB7IEJyZW50
Mjo6cnVuKCk7IHJldHVybiBnc187IH0KcHJpdmF0ZToKICAgIGNvbnN0IEtTJiBnczBfOwogICAg
Y29uc3QgS1MmIGdzMV87CiAgICBLUyBnc187CiAgICBjb25zdCBNYXRyaWNlcyYgbV87Cn07CgpT
aWNCcmVudDo6U2ljQnJlbnQoIGNvbnN0IE1hdHJpY2VzJiBtLCBjb25zdCBLUyYgZ3MwLCBjb25z
dCBLUyYgZ3MxLCBkb3VibGUgYjAgKQogICAgOiBnczBfKCBnczAgKSwgZ3MxXyggZ3MxICksIGdz
XyggZ3MwICksIG1fKCBtICkKewogICAgc2V0X3RvbCggMWUtMiApOwogICAgc2V0X2VwcyggMWUt
MTAgKTsKICAgIGluaXQoIDAsIGIwLCBmKDApLCBmKGIwKSApOwp9CgpLUyBrbHMoIGNvbnN0IEtT
JiBhLCBjb25zdCBLUyYgYiwgZG91YmxlIHgsIGNvbnN0IE1hdHJpY2VzJiBtICkKewogICAgS1Mg
eSA9IGE7CiAgICB5LmtzMSArPSB4ICogYi5rczE7CiAgICB5LmtzMiArPSB4ICogYi5rczI7CiAg
ICBmaXhfbm9ybSggeSwgbSApOwogICAgcmV0dXJuIHk7Cn0KCmRvdWJsZSBTaWNCcmVudDo6Zigg
ZG91YmxlIHggKQp7CiAgICBLUyBnc3Rlc3QgPSBrbHMoIGdzMF8sIGdzMV8sIHgsIG1fICk7CiAg
ICBpZiggZ3N0ZXN0LmVuZXJneSA8IGdzXy5lbmVyZ3kgKSBnc18gPSBnc3Rlc3Q7CiAgICByZXR1
cm4gZ3N0ZXN0LmVuZXJneTsKfQoKS1MgbWFrZV9kZXJpdiggY29uc3QgS1MmIGEsIGNvbnN0IE1h
dHJpY2VzJiBtICkKewogICAgSGFtaWwgaCA9IGhhbWlsdG9uX3RkZ3MoIGEsIG0gKTsKICAgIEtT
IGQwID0gYXBwbHlfaGFtaWwoIGgsIGEsIG0gKTsKICAgIHJldHVybiBkMDsKfQoKS1MgbWFrZV9n
cmFkKCBjb25zdCBLUyYgYSwgY29uc3QgTWF0cmljZXMmIG0gKQp7CiAgICBIYW1pbCBoID0gaGFt
aWx0b25fbm9zaWMoIGEsIG0gKTsKICAgIERNYXRyaXggeDEgPSBtdWx0KCBoLmgxLCBhLmtzMSAp
OwogICAgeDEgKz0gc2ljcG90X2Jhc2UxKCBhLmtzMSwgYS5yaG9zaWMxLCBtICk7CiAgICBLUyBk
MCA9IGE7CiAgICBkMC5rczEgPSB4MTsKICAgIGlmKCBhLnhtb2RlID09IDAgKXsKICAgICAgICBE
TWF0cml4IHgyID0gbXVsdCggaC5oMiwgYS5rczIgKTsKICAgICAgICB4MiArPSBzaWNwb3RfYmFz
ZTEoIGEua3MyLCBhLnJob3NpYzIsIG0gKTsKICAgICAgICBkMC5rczIgPSB4MjsKICAgIH0gZWxz
ZSBpZiggYS54bW9kZSA9PSAxICkgewogICAgICAgIGQwLmtzMiA9IGQwLmtzMTsKICAgIH0gZWxz
ZSB7CiAgICAgICAgZDAua3MyID0gZDAua3MxKCBpbmRleDEsIEluZGV4MiggYS5rczIuZGltMigp
ICkgKTsKICAgIH0KICAgIHJldHVybiBkMDsKfQoKZG91YmxlIGFwcGx5X2dyYWQoIGNvbnN0IEtT
JiBnLCBjb25zdCBLUyYgYSApCnsKICAgIHJldHVybiAyLjA7Cn0KCktTIG5leHRfZ3Nfc2ljX2dy
YWQoIEtTIGdzMCwgY29uc3QgTWF0cmljZXMmIG0gKQp7CgogICAgZG91YmxlIGIwPSAxZS00Owog
ICAgZml4X25vcm0oIGdzMCwgbSApOwoKICAgIEtTIGdzID0gZ3MwOwogICAgS1MgZDEgPSBtYWtl
X2Rlcml2KCBnczAsIG0gKTsKICAgIEtTIGdyMSA9IG1ha2VfZ3JhZCggZ3MwLCBtICk7CiAgICBm
b3IoIGludCBpPTA7IGk8MjsgKytpICl7CgoKCgoKICAgICAgICBkb3VibGUgZzBiID0gYXBwbHlf
Z3JhZCggZ3IxLCBkMSApOwogICAgICAgIGlmKCBnMGIgPCAwICl7CiAgICAgICAgICAgIHJldHVy
biBnczsKICAgICAgICB9CiAgICAgICAgaWYoIGcwYiA8IDMgKSByZXR1cm4gZ3M7CgogICAgICAg
IFNpY0JyZW50IGIoIG0sIGdzMCwgZDEsIGIwICk7CiAgICAgICAgZ3MgPSBiLnJ1biggKTsKICAg
ICAgICBiMCA9IGIuZ2V0X3htaW4oKTsKCiAgICAgICAgS1MgZDIgPSBtYWtlX2Rlcml2KCBncywg
bSApOwogICAgICAgIEtTIGdyMiA9IG1ha2VfZ3JhZCggZ3MsIG0gKTsKCgoKCgoKCiAgICAgICAg
ZG91YmxlIGcwYyA9IGFwcGx5X2dyYWQoIGdyMSwgZDIgKTsKICAgICAgICBkb3VibGUgZzFjID0g
YXBwbHlfZ3JhZCggZ3IyLCBkMiApOwogICAgICAgIGRvdWJsZSBnMWIgPSAwOwoKICAgICAgICBp
ZiggZzFjIDwgMCApewogICAgICAgICAgICByZXR1cm4gZ3M7CiAgICAgICAgfQoKICAgICAgICBk
b3VibGUgZzAwID0gZzBiOwogICAgICAgIGRvdWJsZSBnMTEgPSAoZzFiIC0gZzBiKSAqIGcxYiAr
IChnMWMgLSBnMGMpICogZzFjOwoKICAgICAgICBkb3VibGUgYmV0YSA9IGcxMSAvIGcwMDsKCgoK
CiAgICAgICAgZDEua3MxID0gZzFjICogZDIua3MxICsgYmV0YSAqIGQxLmtzMTsKICAgICAgICBk
MS5rczIgPSBnMWMgKiBkMi5rczIgKyBiZXRhICogZDEua3MyOwogICAgICAgIGdzMCA9IGdzOwog
ICAgICAgIGdyMSA9IGdyMjsKCiAgICB9CiAgICByZXR1cm4gZ3M7Cgp9CiMgMjM4OSAieDIuY2Mi
CnZvaWQga2xpc2ljKCBLUyYgeCwgY29uc3QgTWF0cmljZXMmIG1hdCApCnsKICAgIGNvbnN0IGRv
dWJsZSBmID0gMjsKICAgIEtTIHgxID0geDsKICAgIEhhbWlsIGgwID0gaGFtaWx0b24oIHgsIG1h
dCApOwogICAgZm9yKCBpbnQgaT0wOyBpPDM7ICsraSApIHsKICAgICAgICBIYW1pbCBoID0gaGFt
aWx0b24oIHgsIG1hdCApOwogICAgICAgIGhhbWlsMmtzKCBoLCB4MSwgbWF0ICk7CgogICAgICAg
IGgwLmgxID0gaDAuaDEgKiAoMS1mKSArIGguaDEgKiBmOwogICAgICAgIGgwLmgyID0gaDAuaDIg
KiAoMS1mKSArIGguaDIgKiBmOwogICAgICAgIHggPSBrc2xpbl9wdXJlKCB4LCB4MSwgbWF0LCAx
LWYsIGYsIGgwICk7CiAgICB9Cn0K



More information about the Gcc-bugs mailing list