This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


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

sim/2461: altivec fixes (vcfsx, vcfux, merge, pack and other instructions broken)


>Number:         2461
>Category:       sim
>Synopsis:       altivec fixes (vcfsx, vcfux, merge, pack and other instructions broken)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat May 31 05:28:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     strauman@slac.stanford.edu
>Release:        gdb-6.8 (and earlier)
>Organization:
>Environment:
powerpc target (sim + altivec enabled)
>Description:
I found that several altivec instructions implemented by the simulator were broken (for different reasons)

 - fixed-point -> float conversion did not properly convert;
   neither was the scaling correct.
 - most if not all instructions which manipulate bits across
   byte/half/word boundaries were broken if the destination
   register was identical with a source register because
   writing the destination clobbered the source.
   Intermediate storage is required for such instructions.

A fix for these problems is attached.

(NOTE: Part of the fixes most likely also fix PR # 1306
>How-To-Repeat:
Use vcfsx, vcfux

Use e.g., vupkhsh %v3, %v3
>Fix:
Attached.

NOTE: This most likely fixes PR # 1306
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-patch; name="psim-altivec-fixes.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="psim-altivec-fixes.diff"

KioqIGdkYi02Ljgvc2ltL3BwYy9hbHRpdmVjLmlnZW4ub3JpZwkyMDA4LTA1LTMwIDAxOjI3OjI1
LjAwMDAwMDAwMCAtMDcwMAotLS0gZ2RiLTYuOC9zaW0vcHBjL2FsdGl2ZWMuaWdlbgkyMDA4LTA1
LTMwIDIxOjU5OjU4LjAwMDAwMDAwMCAtMDcwMAoqKioqKioqKioqKioqKioKKioqIDc3Nyw3OTkg
KioqKgogIAl1bnNpZ25lZDMyIGY7CiAgCXNpbV9mcHUgYiwgZGl2LCBkOwogIAlmb3IgKGkgPSAw
OyBpIDwgNDsgaSsrKSB7CiEgCSAgc2ltX2ZwdV8zMnRvICgmYiwgKCp2Qikud1tpXSk7CiEgCSAg
c2ltX2ZwdV91MzJ0byAoJmRpdiwgMiA8PCBVSU1NLCBzaW1fZnB1X3JvdW5kX2RlZmF1bHQpOwog
IAkgIHNpbV9mcHVfZGl2ICgmZCwgJmIsICZkaXYpOwogIAkgIHNpbV9mcHVfdG8zMiAoJmYsICZk
KTsKICAJICAoKnZTKS53W2ldID0gZjsKICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBW
Ql9CSVRNQVNLKTsKICAKISAwLjQsNi5WUywxMS5VSU1NLDE2LlZCLDIxLjc3ODpWWDphdjp2Y2Z1
eCAlVkQsICVWQSwgJVVJTU06VmVjdG9yIENvbnZlcnQgRnJvbSBVbnNpZ25lZCBGaXhlZC1Qb2lu
dCBXb3JkCiAgCWludCBpOwogIAl1bnNpZ25lZDMyIGY7CiAgCXNpbV9mcHUgYiwgZCwgZGl2Owog
IAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiEgCSAgc2ltX2ZwdV8zMnRvICgmYiwgKCp2Qiku
d1tpXSk7CiEgCSAgc2ltX2ZwdV91MzJ0byAoJmRpdiwgMiA8PCBVSU1NLCBzaW1fZnB1X3JvdW5k
X2RlZmF1bHQpOwogIAkgIHNpbV9mcHVfZGl2ICgmZCwgJmIsICZkaXYpOwohIAkgIHNpbV9mcHVf
dG8zMnUgKCZmLCAmZCwgc2ltX2ZwdV9yb3VuZF9kZWZhdWx0KTsKICAJICAoKnZTKS53W2ldID0g
ZjsKICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQl9CSVRNQVNLKTsKLS0tIDc3Nyw3
OTkgLS0tLQogIAl1bnNpZ25lZDMyIGY7CiAgCXNpbV9mcHUgYiwgZGl2LCBkOwogIAlmb3IgKGkg
PSAwOyBpIDwgNDsgaSsrKSB7CiEgCSAgc2ltX2ZwdV9pMzJ0byAoJmIsICgqdkIpLndbaV0sIHNp
bV9mcHVfcm91bmRfZGVmYXVsdCk7CiEgCSAgc2ltX2ZwdV91MzJ0byAoJmRpdiwgMSA8PCBVSU1N
LCBzaW1fZnB1X3JvdW5kX2RlZmF1bHQpOwogIAkgIHNpbV9mcHVfZGl2ICgmZCwgJmIsICZkaXYp
OwogIAkgIHNpbV9mcHVfdG8zMiAoJmYsICZkKTsKICAJICAoKnZTKS53W2ldID0gZjsKICAJfQog
IAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQl9CSVRNQVNLKTsKICAKISAwLjQsNi5WUywxMS5V
SU1NLDE2LlZCLDIxLjc3ODpWWDphdjp2Y2Z1eCAlVkQsICVWQiwgJVVJTU06VmVjdG9yIENvbnZl
cnQgRnJvbSBVbnNpZ25lZCBGaXhlZC1Qb2ludCBXb3JkCiAgCWludCBpOwogIAl1bnNpZ25lZDMy
IGY7CiAgCXNpbV9mcHUgYiwgZCwgZGl2OwogIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiEg
CSAgc2ltX2ZwdV91MzJ0byAoJmIsICgqdkIpLndbaV0sIHNpbV9mcHVfcm91bmRfZGVmYXVsdCk7
CiEgCSAgc2ltX2ZwdV91MzJ0byAoJmRpdiwgMSA8PCBVSU1NLCBzaW1fZnB1X3JvdW5kX2RlZmF1
bHQpOwogIAkgIHNpbV9mcHVfZGl2ICgmZCwgJmIsICZkaXYpOwohIAkgIHNpbV9mcHVfdG8zMiAo
JmYsICZkKTsKICAJICAoKnZTKS53W2ldID0gZjsKICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRN
QVNLLCBWQl9CSVRNQVNLKTsKKioqKioqKioqKioqKioqCioqKiA5OTUsMTAwMSAqKioqCiAgCXNh
dCA9IDA7CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICBzaW1fZnB1XzMydG8gKCZi
LCAoKnZCKS53W2ldKTsKISAJICBzaW1fZnB1X3UzMnRvICgmbSwgMiA8PCBVSU1NLCBzaW1fZnB1
X3JvdW5kX2RlZmF1bHQpOwogIAkgIHNpbV9mcHVfbXVsICgmYSwgJmIsICZtKTsKICAJICBzaW1f
ZnB1X3RvNjRpICgmdGVtcCwgJmEsIHNpbV9mcHVfcm91bmRfZGVmYXVsdCk7CiAgCSAgKCp2Uyku
d1tpXSA9IGFsdGl2ZWNfc2lnbmVkX3NhdHVyYXRlXzMyKHRlbXAsICZ0ZW1wc2F0KTsKLS0tIDk5
NSwxMDAxIC0tLS0KICAJc2F0ID0gMDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkg
IHNpbV9mcHVfMzJ0byAoJmIsICgqdkIpLndbaV0pOwohIAkgIHNpbV9mcHVfdTMydG8gKCZtLCAx
IDw8IFVJTU0sIHNpbV9mcHVfcm91bmRfZGVmYXVsdCk7CiAgCSAgc2ltX2ZwdV9tdWwgKCZhLCAm
YiwgJm0pOwogIAkgIHNpbV9mcHVfdG82NGkgKCZ0ZW1wLCAmYSwgc2ltX2ZwdV9yb3VuZF9kZWZh
dWx0KTsKICAJICAoKnZTKS53W2ldID0gYWx0aXZlY19zaWduZWRfc2F0dXJhdGVfMzIodGVtcCwg
JnRlbXBzYXQpOwoqKioqKioqKioqKioqKioKKioqIDEwMTEsMTAxNyAqKioqCiAgCXNhdCA9IDA7
CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICBzaW1fZnB1XzMydG8gKCZiLCAoKnZC
KS53W2ldKTsKISAJICBzaW1fZnB1X3UzMnRvICgmbSwgMiA8PCBVSU1NLCBzaW1fZnB1X3JvdW5k
X2RlZmF1bHQpOwogIAkgIHNpbV9mcHVfbXVsICgmYSwgJmIsICZtKTsKICAJICBzaW1fZnB1X3Rv
NjR1ICgmdGVtcCwgJmEsIHNpbV9mcHVfcm91bmRfZGVmYXVsdCk7CiAgCSAgKCp2Uykud1tpXSA9
IGFsdGl2ZWNfdW5zaWduZWRfc2F0dXJhdGVfMzIodGVtcCwgJnRlbXBzYXQpOwotLS0gMTAxMSwx
MDE3IC0tLS0KICAJc2F0ID0gMDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkgIHNp
bV9mcHVfMzJ0byAoJmIsICgqdkIpLndbaV0pOwohIAkgIHNpbV9mcHVfdTMydG8gKCZtLCAxIDw8
IFVJTU0sIHNpbV9mcHVfcm91bmRfZGVmYXVsdCk7CiAgCSAgc2ltX2ZwdV9tdWwgKCZhLCAmYiwg
Jm0pOwogIAkgIHNpbV9mcHVfdG82NHUgKCZ0ZW1wLCAmYSwgc2ltX2ZwdV9yb3VuZF9kZWZhdWx0
KTsKICAJICAoKnZTKS53W2ldID0gYWx0aXZlY191bnNpZ25lZF9zYXR1cmF0ZV8zMih0ZW1wLCAm
dGVtcHNhdCk7CioqKioqKioqKioqKioqKgoqKiogMTMzMSwxMzgwICoqKioKICAKICAwLjQsNi5W
UywxMS5WQSwxNi5WQiwyMS4xMjpWWDphdjp2bXJnaGIgJVZELCAlVkEsICVWQjpWZWN0b3IgTWVy
Z2UgSGlnaCBCeXRlCiAgCWludCBpOwogIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMikgewoh
IAkgICgqdlMpLmJbQVZfQklOREVYKGkpXSA9ICgqdkEpLmJbQVZfQklOREVYKGkvMildOwohIAkg
ICgqdlMpLmJbQVZfQklOREVYKGkrMSldID0gKCp2QikuYltBVl9CSU5ERVgoaS8yKV07IAogIAl9
CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAK
ICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS43NjpWWDphdjp2bXJnaGggJVZELCAlVkEsICVWQjpW
ZWN0b3IgTWVyZ2UgSGlnaCBIYWxmIFdvcmQKICAJaW50IGk7CiAgCWZvciAoaSA9IDA7IGkgPCA4
OyBpICs9IDIpIHsKISAJICAoKnZTKS5oW0FWX0hJTkRFWChpKV0gPSAoKnZBKS5oW0FWX0hJTkRF
WChpLzIpXTsKISAJICAoKnZTKS5oW0FWX0hJTkRFWChpKzEpXSA9ICgqdkIpLmhbQVZfSElOREVY
KGkvMildOyAKICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJf
QklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMTQwOlZYOmF2OnZtcmdodyAl
VkQsICVWQSwgJVZCOlZlY3RvciBNZXJnZSBIaWdoIFdvcmQKICAJaW50IGk7CiAgCWZvciAoaSA9
IDA7IGkgPCA0OyBpICs9IDIpIHsKISAJICAoKnZTKS53W2ldID0gKCp2QSkud1tpLzJdOwohIAkg
ICgqdlMpLndbaSsxXSA9ICgqdkIpLndbaS8yXTsgCiAgCX0KICAJUFBDX0lOU05fVlIoVlNfQklU
TUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZC
LDIxLjI2ODpWWDphdjp2bXJnbGIgJVZELCAlVkEsICVWQjpWZWN0b3IgTWVyZ2UgTG93IEJ5dGUK
ICAJaW50IGk7CiAgCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAyKSB7CiEgCSAgKCp2UykuYltB
Vl9CSU5ERVgoaSldID0gKCp2QSkuYltBVl9CSU5ERVgoKGkvMikgKyA4KV07CiEgCSAgKCp2Uyku
YltBVl9CSU5ERVgoaSsxKV0gPSAoKnZCKS5iW0FWX0JJTkRFWCgoaS8yKSArIDgpXTsgCiAgCX0K
ICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAog
IDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjMzMjpWWDphdjp2bXJnbGggJVZELCAlVkEsICVWQjpW
ZWN0b3IgTWVyZ2UgTG93IEhhbGYgV29yZAogIAlpbnQgaTsKICAJZm9yIChpID0gMDsgaSA8IDg7
IGkgKz0gMikgewohIAkgICgqdlMpLmhbQVZfSElOREVYKGkpXSA9ICgqdkEpLmhbQVZfSElOREVY
KChpLzIpICsgNCldOwohIAkgICgqdlMpLmhbQVZfSElOREVYKGkrMSldID0gKCp2QikuaFtBVl9I
SU5ERVgoKGkvMikgKyA0KV07IAogIAl9CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJ
VE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4zOTY6Vlg6
YXY6dm1yZ2x3ICVWRCwgJVZBLCAlVkI6VmVjdG9yIE1lcmdlIExvdyBXb3JkCiAgCWludCBpOwog
IAlmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAyKSB7CiEgCSAgKCp2Uykud1tpXSA9ICgqdkEpLndb
KGkvMikgKyAyXTsKISAJICAoKnZTKS53W2krMV0gPSAoKnZCKS53WyhpLzIpICsgMl07IAogIAl9
CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAK
ICAKLS0tIDEzMzEsMTM5MiAtLS0tCiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMTI6Vlg6
YXY6dm1yZ2hiICVWRCwgJVZBLCAlVkI6VmVjdG9yIE1lcmdlIEhpZ2ggQnl0ZQogIAlpbnQgaTsK
KyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDIpIHsKISAJICB2U3Rt
cC5iW0FWX0JJTkRFWChpKV0gPSAoKnZBKS5iW0FWX0JJTkRFWChpLzIpXTsKISAJICB2U3RtcC5i
W0FWX0JJTkRFWChpKzEpXSA9ICgqdkIpLmJbQVZfQklOREVYKGkvMildOyAKICAJfQorIAkoKnZT
KSA9IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklU
TUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuNzY6Vlg6YXY6dm1yZ2hoICVWRCwg
JVZBLCAlVkI6VmVjdG9yIE1lcmdlIEhpZ2ggSGFsZiBXb3JkCiAgCWludCBpOworIAl2cmVnIHZT
dG1wOwogIAlmb3IgKGkgPSAwOyBpIDwgODsgaSArPSAyKSB7CiEgCSAgdlN0bXAuaFtBVl9ISU5E
RVgoaSldID0gKCp2QSkuaFtBVl9ISU5ERVgoaS8yKV07CiEgCSAgdlN0bXAuaFtBVl9ISU5ERVgo
aSsxKV0gPSAoKnZCKS5oW0FWX0hJTkRFWChpLzIpXTsgCiAgCX0KKyAJKCp2UykgPSB2U3RtcDsK
ICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAog
IDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjE0MDpWWDphdjp2bXJnaHcgJVZELCAlVkEsICVWQjpW
ZWN0b3IgTWVyZ2UgSGlnaCBXb3JkCiAgCWludCBpOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkg
PSAwOyBpIDwgNDsgaSArPSAyKSB7CiEgCSAgdlN0bXAud1tpXSA9ICgqdkEpLndbaS8yXTsKISAJ
ICB2U3RtcC53W2krMV0gPSAoKnZCKS53W2kvMl07IAogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAg
CVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAw
LjQsNi5WUywxMS5WQSwxNi5WQiwyMS4yNjg6Vlg6YXY6dm1yZ2xiICVWRCwgJVZBLCAlVkI6VmVj
dG9yIE1lcmdlIExvdyBCeXRlCiAgCWludCBpOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAw
OyBpIDwgMTY7IGkgKz0gMikgewohIAkgIHZTdG1wLmJbQVZfQklOREVYKGkpXSA9ICgqdkEpLmJb
QVZfQklOREVYKChpLzIpICsgOCldOwohIAkgIHZTdG1wLmJbQVZfQklOREVYKGkrMSldID0gKCp2
QikuYltBVl9CSU5ERVgoKGkvMikgKyA4KV07IAogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAgCVBQ
Q19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQs
Ni5WUywxMS5WQSwxNi5WQiwyMS4zMzI6Vlg6YXY6dm1yZ2xoICVWRCwgJVZBLCAlVkI6VmVjdG9y
IE1lcmdlIExvdyBIYWxmIFdvcmQKICAJaW50IGk7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9
IDA7IGkgPCA4OyBpICs9IDIpIHsKISAJICB2U3RtcC5oW0FWX0hJTkRFWChpKV0gPSAoKnZBKS5o
W0FWX0hJTkRFWCgoaS8yKSArIDQpXTsKISAJICB2U3RtcC5oW0FWX0hJTkRFWChpKzEpXSA9ICgq
dkIpLmhbQVZfSElOREVYKChpLzIpICsgNCldOyAKICAJfQorIAkoKnZTKSA9IHZTdG1wOwogIAlQ
UENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCiAgMC40
LDYuVlMsMTEuVkEsMTYuVkIsMjEuMzk2OlZYOmF2OnZtcmdsdyAlVkQsICVWQSwgJVZCOlZlY3Rv
ciBNZXJnZSBMb3cgV29yZAogIAlpbnQgaTsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsg
aSA8IDQ7IGkgKz0gMikgewohIAkgIHZTdG1wLndbaV0gPSAoKnZBKS53WyhpLzIpICsgMl07CiEg
CSAgdlN0bXAud1tpKzFdID0gKCp2Qikud1soaS8yKSArIDJdOyAKICAJfQorIAkoKnZTKSA9IHZT
dG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7
CiAgCiAgCioqKioqKioqKioqKioqKgoqKiogMTM4NywxMzkyICoqKioKLS0tIDEzOTksMTQwNSAt
LS0tCiAgCXNpZ25lZDMyIHRlbXA7CiAgCXNpZ25lZDE2IHByb2QsIGE7CiAgCXVuc2lnbmVkMTYg
YjsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkgIHRlbXAg
PSAoKnZDKS53W2ldOwogIAkgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKioqKioqKioqKioq
KioqCioqKiAxMzk1LDE0MDcgKioqKgogIAkgICAgcHJvZCA9IGEgKiBiOwogIAkgICAgdGVtcCAr
PSAoc2lnbmVkMzIpcHJvZDsKICAJICB9CiEgCSAgKCp2Uykud1tpXSA9IHRlbXA7CiAgCX0KICAJ
UFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0sgfCBWQ19CSVRN
QVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS5WQywyNi40MDpWQVg6YXY6dm1zdW1z
aG0gJVZELCAlVkEsICVWQiwgJVZDOlZlY3RvciBNdWx0aXBseSBTdW0gU2lnbmVkIEhhbGYgV29y
ZCBNb2R1bG8KICAJaW50IGksIGo7CiAgCXNpZ25lZDMyIHRlbXAsIHByb2QsIGEsIGI7CiAgCWZv
ciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICB0ZW1wID0gKCp2Qykud1tpXTsKICAJICBmb3Ig
KGogPSAwOyBqIDwgMjsgaisrKSB7Ci0tLSAxNDA4LDE0MjIgLS0tLQogIAkgICAgcHJvZCA9IGEg
KiBiOwogIAkgICAgdGVtcCArPSAoc2lnbmVkMzIpcHJvZDsKICAJICB9CiEgCSAgdlN0bXAud1tp
XSA9IHRlbXA7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNfQklUTUFT
SywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKICAwLjQsNi5WUywx
MS5WQSwxNi5WQiwyMS5WQywyNi40MDpWQVg6YXY6dm1zdW1zaG0gJVZELCAlVkEsICVWQiwgJVZD
OlZlY3RvciBNdWx0aXBseSBTdW0gU2lnbmVkIEhhbGYgV29yZCBNb2R1bG8KICAJaW50IGksIGo7
CiAgCXNpZ25lZDMyIHRlbXAsIHByb2QsIGEsIGI7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9
IDA7IGkgPCA0OyBpKyspIHsKICAJICB0ZW1wID0gKCp2Qykud1tpXTsKICAJICBmb3IgKGogPSAw
OyBqIDwgMjsgaisrKSB7CioqKioqKioqKioqKioqKgoqKiogMTQxMCwxNDE3ICoqKioKICAJICAg
IHByb2QgPSBhICogYjsKICAJICAgIHRlbXAgKz0gcHJvZDsKICAJICB9CiEgCSAgKCp2Uykud1tp
XSA9IHRlbXA7CiAgCX0KICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZC
X0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS5WQywy
Ni40MTpWQVg6YXY6dm1zdW1zaHMgJVZELCAlVkEsICVWQiwgJVZDOlZlY3RvciBNdWx0aXBseSBT
dW0gU2lnbmVkIEhhbGYgV29yZCBTYXR1cmF0ZQotLS0gMTQyNSwxNDMzIC0tLS0KICAJICAgIHBy
b2QgPSBhICogYjsKICAJICAgIHRlbXAgKz0gcHJvZDsKICAJICB9CiEgCSAgdlN0bXAud1tpXSA9
IHRlbXA7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywg
VkFfQklUTUFTSyB8IFZCX0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5W
QSwxNi5WQiwyMS5WQywyNi40MTpWQVg6YXY6dm1zdW1zaHMgJVZELCAlVkEsICVWQiwgJVZDOlZl
Y3RvciBNdWx0aXBseSBTdW0gU2lnbmVkIEhhbGYgV29yZCBTYXR1cmF0ZQoqKioqKioqKioqKioq
KioKKioqIDE0MTksMTQyNCAqKioqCi0tLSAxNDM1LDE0NDEgLS0tLQogIAlzaWduZWQ2NCB0ZW1w
OwogIAlzaWduZWQzMiBwcm9kLCBhLCBiOwogIAlzYXQgPSAwOworIAl2cmVnIHZTdG1wOwogIAlm
b3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgCSAgdGVtcCA9IChzaWduZWQ2NCkoc2lnbmVkMzIp
KCp2Qykud1tpXTsKICAJICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CioqKioqKioqKioqKioq
KgoqKiogMTQyNywxNDM1ICoqKioKICAJICAgIHByb2QgPSBhICogYjsKICAJICAgIHRlbXAgKz0g
KHNpZ25lZDY0KXByb2Q7CiAgCSAgfQohIAkgICgqdlMpLndbaV0gPSBhbHRpdmVjX3NpZ25lZF9z
YXR1cmF0ZV8zMih0ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KICAJ
QUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFf
QklUTUFTSyB8IFZCX0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKLS0tIDE0NDQsMTQ1MyAtLS0t
CiAgCSAgICBwcm9kID0gYSAqIGI7CiAgCSAgICB0ZW1wICs9IChzaWduZWQ2NClwcm9kOwogIAkg
IH0KISAJICB2U3RtcC53W2ldID0gYWx0aXZlY19zaWduZWRfc2F0dXJhdGVfMzIodGVtcCwgJnRl
bXBzYXQpOwogIAkgIHNhdCB8PSB0ZW1wc2F0OwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAgCUFM
VElWRUNfU0VUX1NBVChzYXQpOwogIAlQUENfSU5TTl9WUl9WU0NSKFZTX0JJVE1BU0ssIFZBX0JJ
VE1BU0sgfCBWQl9CSVRNQVNLIHwgVkNfQklUTUFTSyk7CiAgCioqKioqKioqKioqKioqKgoqKiog
MTQzNywxNDQyICoqKioKLS0tIDE0NTUsMTQ2MSAtLS0tCiAgCWludCBpLCBqOwogIAl1bnNpZ25l
ZDMyIHRlbXA7CiAgCXVuc2lnbmVkMTYgcHJvZCwgYSwgYjsKKyAJdnJlZyB2U3RtcDsKICAJZm9y
IChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkgIHRlbXAgPSAoKnZDKS53W2ldOwogIAkgIGZvciAo
aiA9IDA7IGogPCA0OyBqKyspIHsKKioqKioqKioqKioqKioqCioqKiAxNDQ1LDE0NTcgKioqKgog
IAkgICAgcHJvZCA9IGEgKiBiOwogIAkgICAgdGVtcCArPSBwcm9kOwogIAkgIH0KISAJICAoKnZT
KS53W2ldID0gdGVtcDsKICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNL
IHwgVkJfQklUTUFTSyB8IFZDX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIx
LlZDLDI2LjM4OlZBWDphdjp2bXN1bXVobSAlVkQsICVWQSwgJVZCLCAlVkM6VmVjdG9yIE11bHRp
cGx5IFN1bSBVbnNpZ25lZCBIYWxmIFdvcmQgTW9kdWxvCiAgCWludCBpLCBqOwogIAl1bnNpZ25l
ZDMyIHRlbXAsIHByb2QsIGEsIGI7CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICB0
ZW1wID0gKCp2Qykud1tpXTsKICAJICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0tLSAxNDY0
LDE0NzggLS0tLQogIAkgICAgcHJvZCA9IGEgKiBiOwogIAkgICAgdGVtcCArPSBwcm9kOwogIAkg
IH0KISAJICB2U3RtcC53W2ldID0gdGVtcDsKICAJfQorIAkoKnZTKSA9IHZTdG1wOwogIAlQUENf
SU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyB8IFZDX0JJVE1BU0sp
OwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLlZDLDI2LjM4OlZBWDphdjp2bXN1bXVobSAl
VkQsICVWQSwgJVZCLCAlVkM6VmVjdG9yIE11bHRpcGx5IFN1bSBVbnNpZ25lZCBIYWxmIFdvcmQg
TW9kdWxvCiAgCWludCBpLCBqOwogIAl1bnNpZ25lZDMyIHRlbXAsIHByb2QsIGEsIGI7CisgCXZy
ZWcgdlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICB0ZW1wID0gKCp2Qyku
d1tpXTsKICAJICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CioqKioqKioqKioqKioqKgoqKiog
MTQ2MCwxNDczICoqKioKICAJICAgIHByb2QgPSBhICogYjsKICAJICAgIHRlbXAgKz0gcHJvZDsK
ICAJICB9CiEgCSAgKCp2Uykud1tpXSA9IHRlbXA7CiAgCX0KICAJUFBDX0lOU05fVlIoVlNfQklU
TUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKICAwLjQsNi5W
UywxMS5WQSwxNi5WQiwyMS5WQywyNi4zOTpWQVg6YXY6dm1zdW11aHMgJVZELCAlVkEsICVWQiwg
JVZDOlZlY3RvciBNdWx0aXBseSBTdW0gVW5zaWduZWQgSGFsZiBXb3JkIFNhdHVyYXRlCiAgCWlu
dCBpLCBqLCBzYXQsIHRlbXBzYXQ7CiAgCXVuc2lnbmVkMzIgdGVtcCwgcHJvZCwgYSwgYjsKICAJ
c2F0ID0gMDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkgIHRlbXAgPSAoKnZDKS53
W2ldOwogIAkgIGZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLS0tIDE0ODEsMTQ5NiAtLS0tCiAg
CSAgICBwcm9kID0gYSAqIGI7CiAgCSAgICB0ZW1wICs9IHByb2Q7CiAgCSAgfQohIAkgIHZTdG1w
LndbaV0gPSB0ZW1wOwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZTX0JJ
VE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLIHwgVkNfQklUTUFTSyk7CiAgCiAgMC40LDYu
VlMsMTEuVkEsMTYuVkIsMjEuVkMsMjYuMzk6VkFYOmF2OnZtc3VtdWhzICVWRCwgJVZBLCAlVkIs
ICVWQzpWZWN0b3IgTXVsdGlwbHkgU3VtIFVuc2lnbmVkIEhhbGYgV29yZCBTYXR1cmF0ZQogIAlp
bnQgaSwgaiwgc2F0LCB0ZW1wc2F0OwogIAl1bnNpZ25lZDMyIHRlbXAsIHByb2QsIGEsIGI7CiAg
CXNhdCA9IDA7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJ
ICB0ZW1wID0gKCp2Qykud1tpXTsKICAJICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CioqKioq
KioqKioqKioqKgoqKiogMTQ3NiwxNDg0ICoqKioKICAJICAgIHByb2QgPSBhICogYjsKICAJICAg
IHRlbXAgKz0gcHJvZDsKICAJICB9CiEgCSAgKCp2Uykud1tpXSA9IGFsdGl2ZWNfdW5zaWduZWRf
c2F0dXJhdGVfMzIodGVtcCwgJnRlbXBzYXQpOwogIAkgIHNhdCB8PSB0ZW1wc2F0OwogIAl9CiAg
CUFMVElWRUNfU0VUX1NBVChzYXQpOwogIAlQUENfSU5TTl9WUl9WU0NSKFZTX0JJVE1BU0ssIFZB
X0JJVE1BU0sgfCBWQl9CSVRNQVNLIHwgVkNfQklUTUFTSyk7CiAgCi0tLSAxNDk5LDE1MDggLS0t
LQogIAkgICAgcHJvZCA9IGEgKiBiOwogIAkgICAgdGVtcCArPSBwcm9kOwogIAkgIH0KISAJICB2
U3RtcC53W2ldID0gYWx0aXZlY191bnNpZ25lZF9zYXR1cmF0ZV8zMih0ZW1wLCAmdGVtcHNhdCk7
CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJQUxUSVZFQ19T
RVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8
IFZCX0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKKioqKioqKioqKioqKioqCioqKiAxNDkxLDE1
ODYgKioqKgogIAlpbnQgaTsKICAJc2lnbmVkOCBhLCBiOwogIAlzaWduZWQxNiBwcm9kOwogIAlm
b3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgCSAgYSA9ICgqdkEpLmJbQVZfQklOREVYKGkqMild
OyAKICAJICBiID0gKCp2QikuYltBVl9CSU5ERVgoaSoyKV07CiAgCSAgcHJvZCA9IGEgKiBiOwoh
IAkgICgqdlMpLmhbQVZfSElOREVYKGkpXSA9IHByb2Q7CiAgCX0KICAJUFBDX0lOU05fVlIoVlNf
QklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2
LlZCLDIxLjg0MDpWWDphdjp2bXVsZXNoICVWRCwgJVZBLCAlVkI6VmVjdG9yIE11bHRpcGx5IEV2
ZW4gU2lnbmVkIEhhbGYgV29yZAogIAlpbnQgaTsKICAJc2lnbmVkMTYgYSwgYjsKICAJc2lnbmVk
MzIgcHJvZDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkgIGEgPSAoKnZBKS5oW0FW
X0hJTkRFWChpKjIpXTsgCiAgCSAgYiA9ICgqdkIpLmhbQVZfSElOREVYKGkqMildOwogIAkgIHBy
b2QgPSBhICogYjsKISAJICAoKnZTKS53W2ldID0gcHJvZDsKICAJfQogIAlQUENfSU5TTl9WUihW
U19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEs
MTYuVkIsMjEuNTIwOlZYOmF2OnZtdWxldWIgJVZELCAlVkEsICVWQjpWZWN0b3IgTXVsdGlwbHkg
RXZlbiBVbnNpZ25lZCBCeXRlCiAgCWludCBpOwogIAl1bnNpZ25lZDggYSwgYjsKICAJdW5zaWdu
ZWQxNiBwcm9kOwogIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgCSAgYSA9ICgqdkEpLmJb
QVZfQklOREVYKGkqMildOyAKICAJICBiID0gKCp2QikuYltBVl9CSU5ERVgoaSoyKV07CiAgCSAg
cHJvZCA9IGEgKiBiOwohIAkgICgqdlMpLmhbQVZfSElOREVYKGkpXSA9IHByb2Q7CiAgCX0KICAJ
UFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAu
NCw2LlZTLDExLlZBLDE2LlZCLDIxLjU4NDpWWDphdjp2bXVsZXVoICVWRCwgJVZBLCAlVkI6VmVj
dG9yIE11bHRpcGx5IEV2ZW4gVW5zaWduZWQgSGFsZiBXb3JkCiAgCWludCBpOwogIAl1bnNpZ25l
ZDE2IGEsIGI7CiAgCXVuc2lnbmVkMzIgcHJvZDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg
ewogIAkgIGEgPSAoKnZBKS5oW0FWX0hJTkRFWChpKjIpXTsgCiAgCSAgYiA9ICgqdkIpLmhbQVZf
SElOREVYKGkqMildOwogIAkgIHByb2QgPSBhICogYjsKISAJICAoKnZTKS53W2ldID0gcHJvZDsK
ICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7
CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMjY0OlZYOmF2OnZtdWxvc2IgJVZELCAlVkEs
ICVWQjpWZWN0b3IgTXVsdGlwbHkgT2RkIFNpZ25lZCBCeXRlCiAgCWludCBpOwogIAlzaWduZWQ4
IGEsIGI7CiAgCXNpZ25lZDE2IHByb2Q7CiAgCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKICAJ
ICBhID0gKCp2QSkuYltBVl9CSU5ERVgoKGkqMikrMSldOyAKICAJICBiID0gKCp2QikuYltBVl9C
SU5ERVgoKGkqMikrMSldOwogIAkgIHByb2QgPSBhICogYjsKISAJICAoKnZTKS5oW0FWX0hJTkRF
WChpKV0gPSBwcm9kOwogIAl9CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sg
fCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4zMjg6Vlg6YXY6dm11
bG9zaCAlVkQsICVWQSwgJVZCOlZlY3RvciBNdWx0aXBseSBPZGQgU2lnbmVkIEhhbGYgV29yZAog
IAlpbnQgaTsKICAJc2lnbmVkMTYgYSwgYjsKICAJc2lnbmVkMzIgcHJvZDsKICAJZm9yIChpID0g
MDsgaSA8IDQ7IGkrKykgewogIAkgIGEgPSAoKnZBKS5oW0FWX0hJTkRFWCgoaSoyKSsxKV07IAog
IAkgIGIgPSAoKnZCKS5oW0FWX0hJTkRFWCgoaSoyKSsxKV07CiAgCSAgcHJvZCA9IGEgKiBiOwoh
IAkgICgqdlMpLndbaV0gPSBwcm9kOwogIAl9CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZB
X0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS44OlZY
OmF2OnZtdWxvdWIgJVZELCAlVkEsICVWQjpWZWN0b3IgTXVsdGlwbHkgT2RkIFVuc2lnbmVkIEJ5
dGUKICAJaW50IGk7CiAgCXVuc2lnbmVkOCBhLCBiOwogIAl1bnNpZ25lZDE2IHByb2Q7CiAgCWZv
ciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKICAJICBhID0gKCp2QSkuYltBVl9CSU5ERVgoKGkqMikr
MSldOyAKICAJICBiID0gKCp2QikuYltBVl9CSU5ERVgoKGkqMikrMSldOwogIAkgIHByb2QgPSBh
ICogYjsKISAJICAoKnZTKS5oW0FWX0hJTkRFWChpKV0gPSBwcm9kOwogIAl9CiAgCVBQQ19JTlNO
X1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywx
MS5WQSwxNi5WQiwyMS43MjpWWDphdjp2bXVsb3VoICVWRCwgJVZBLCAlVkI6VmVjdG9yIE11bHRp
cGx5IE9kZCBVbnNpZ25lZCBIYWxmIFdvcmQKICAJaW50IGk7CiAgCXVuc2lnbmVkMTYgYSwgYjsK
ICAJdW5zaWduZWQzMiBwcm9kOwogIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgCSAgYSA9
ICgqdkEpLmhbQVZfSElOREVYKChpKjIpKzEpXTsgCiAgCSAgYiA9ICgqdkIpLmhbQVZfSElOREVY
KChpKjIpKzEpXTsKICAJICBwcm9kID0gYSAqIGI7CiEgCSAgKCp2Uykud1tpXSA9IHByb2Q7CiAg
CX0KICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwog
IAogIAotLS0gMTUxNSwxNjI2IC0tLS0KICAJaW50IGk7CiAgCXNpZ25lZDggYSwgYjsKICAJc2ln
bmVkMTYgcHJvZDsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewog
IAkgIGEgPSAoKnZBKS5iW0FWX0JJTkRFWChpKjIpXTsgCiAgCSAgYiA9ICgqdkIpLmJbQVZfQklO
REVYKGkqMildOwogIAkgIHByb2QgPSBhICogYjsKISAJICB2U3RtcC5oW0FWX0hJTkRFWChpKV0g
PSBwcm9kOwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ss
IFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS44
NDA6Vlg6YXY6dm11bGVzaCAlVkQsICVWQSwgJVZCOlZlY3RvciBNdWx0aXBseSBFdmVuIFNpZ25l
ZCBIYWxmIFdvcmQKICAJaW50IGk7CiAgCXNpZ25lZDE2IGEsIGI7CiAgCXNpZ25lZDMyIHByb2Q7
CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICBhID0gKCp2
QSkuaFtBVl9ISU5ERVgoaSoyKV07IAogIAkgIGIgPSAoKnZCKS5oW0FWX0hJTkRFWChpKjIpXTsK
ICAJICBwcm9kID0gYSAqIGI7CiEgCSAgdlN0bXAud1tpXSA9IHByb2Q7CiAgCX0KKyAJKCp2Uykg
PSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1B
U0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjUyMDpWWDphdjp2bXVsZXViICVWRCwg
JVZBLCAlVkI6VmVjdG9yIE11bHRpcGx5IEV2ZW4gVW5zaWduZWQgQnl0ZQogIAlpbnQgaTsKICAJ
dW5zaWduZWQ4IGEsIGI7CiAgCXVuc2lnbmVkMTYgcHJvZDsKKyAJdnJlZyB2U3RtcDsKICAJZm9y
IChpID0gMDsgaSA8IDg7IGkrKykgewogIAkgIGEgPSAoKnZBKS5iW0FWX0JJTkRFWChpKjIpXTsg
CiAgCSAgYiA9ICgqdkIpLmJbQVZfQklOREVYKGkqMildOwogIAkgIHByb2QgPSBhICogYjsKISAJ
ICB2U3RtcC5oW0FWX0hJTkRFWChpKV0gPSBwcm9kOwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAg
CVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAw
LjQsNi5WUywxMS5WQSwxNi5WQiwyMS41ODQ6Vlg6YXY6dm11bGV1aCAlVkQsICVWQSwgJVZCOlZl
Y3RvciBNdWx0aXBseSBFdmVuIFVuc2lnbmVkIEhhbGYgV29yZAogIAlpbnQgaTsKICAJdW5zaWdu
ZWQxNiBhLCBiOwogIAl1bnNpZ25lZDMyIHByb2Q7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9
IDA7IGkgPCA0OyBpKyspIHsKICAJICBhID0gKCp2QSkuaFtBVl9ISU5ERVgoaSoyKV07IAogIAkg
IGIgPSAoKnZCKS5oW0FWX0hJTkRFWChpKjIpXTsKICAJICBwcm9kID0gYSAqIGI7CiEgCSAgdlN0
bXAud1tpXSA9IHByb2Q7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNf
QklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2
LlZCLDIxLjI2NDpWWDphdjp2bXVsb3NiICVWRCwgJVZBLCAlVkI6VmVjdG9yIE11bHRpcGx5IE9k
ZCBTaWduZWQgQnl0ZQogIAlpbnQgaTsKICAJc2lnbmVkOCBhLCBiOwogIAlzaWduZWQxNiBwcm9k
OworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgCSAgYSA9ICgq
dkEpLmJbQVZfQklOREVYKChpKjIpKzEpXTsgCiAgCSAgYiA9ICgqdkIpLmJbQVZfQklOREVYKChp
KjIpKzEpXTsKICAJICBwcm9kID0gYSAqIGI7CiEgCSAgdlN0bXAuaFtBVl9ISU5ERVgoaSldID0g
cHJvZDsKICAJfQorIAkoKnZTKSA9IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBW
QV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMzI4
OlZYOmF2OnZtdWxvc2ggJVZELCAlVkEsICVWQjpWZWN0b3IgTXVsdGlwbHkgT2RkIFNpZ25lZCBI
YWxmIFdvcmQKICAJaW50IGk7CiAgCXNpZ25lZDE2IGEsIGI7CiAgCXNpZ25lZDMyIHByb2Q7Cisg
CXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAJICBhID0gKCp2QSku
aFtBVl9ISU5ERVgoKGkqMikrMSldOyAKICAJICBiID0gKCp2QikuaFtBVl9ISU5ERVgoKGkqMikr
MSldOwogIAkgIHByb2QgPSBhICogYjsKISAJICB2U3RtcC53W2ldID0gcHJvZDsKICAJfQorIAko
KnZTKSA9IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJf
QklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuODpWWDphdjp2bXVsb3ViICVW
RCwgJVZBLCAlVkI6VmVjdG9yIE11bHRpcGx5IE9kZCBVbnNpZ25lZCBCeXRlCiAgCWludCBpOwog
IAl1bnNpZ25lZDggYSwgYjsKICAJdW5zaWduZWQxNiBwcm9kOworIAl2cmVnIHZTdG1wOwogIAlm
b3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgCSAgYSA9ICgqdkEpLmJbQVZfQklOREVYKChpKjIp
KzEpXTsgCiAgCSAgYiA9ICgqdkIpLmJbQVZfQklOREVYKChpKjIpKzEpXTsKICAJICBwcm9kID0g
YSAqIGI7CiEgCSAgdlN0bXAuaFtBVl9ISU5ERVgoaSldID0gcHJvZDsKICAJfQorIAkoKnZTKSA9
IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFT
Syk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuNzI6Vlg6YXY6dm11bG91aCAlVkQsICVW
QSwgJVZCOlZlY3RvciBNdWx0aXBseSBPZGQgVW5zaWduZWQgSGFsZiBXb3JkCiAgCWludCBpOwog
IAl1bnNpZ25lZDE2IGEsIGI7CiAgCXVuc2lnbmVkMzIgcHJvZDsKKyAJdnJlZyB2U3RtcDsKICAJ
Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogIAkgIGEgPSAoKnZBKS5oW0FWX0hJTkRFWCgoaSoy
KSsxKV07IAogIAkgIGIgPSAoKnZCKS5oW0FWX0hJTkRFWCgoaSoyKSsxKV07CiAgCSAgcHJvZCA9
IGEgKiBiOwohIAkgIHZTdG1wLndbaV0gPSBwcm9kOwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAg
CVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAK
KioqKioqKioqKioqKioqCioqKiAxNjM0LDE2NDYgKioqKgogIAogIDAuNCw2LlZTLDExLlZBLDE2
LlZCLDIxLlZDLDI2LjQzOlZYOmF2OnZwZXJtICVWRCwgJVZBLCAlVkIsICVWQzpWZWN0b3IgUGVy
bXV0ZQogIAlpbnQgaSwgd2hvOwogIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogIAkgIHdo
byA9ICgqdkMpLmJbQVZfQklOREVYKGkpXSAmIDB4MWY7CiAgCSAgaWYgKHdobyAmIDB4MTApCiEg
CSAgICAoKnZTKS5iW0FWX0JJTkRFWChpKV0gPSAoKnZCKS5iW0FWX0JJTkRFWCh3aG8gJiAweGYp
XTsKICAJICBlbHNlCiEgCSAgICAoKnZTKS5iW0FWX0JJTkRFWChpKV0gPSAoKnZBKS5iW0FWX0JJ
TkRFWCh3aG8gJiAweGYpXTsKICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRN
QVNLIHwgVkJfQklUTUFTSyB8IFZDX0JJVE1BU0spOwogIAogIAotLS0gMTY3NCwxNjg4IC0tLS0K
ICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS5WQywyNi40MzpWWDphdjp2cGVybSAlVkQsICVW
QSwgJVZCLCAlVkM6VmVjdG9yIFBlcm11dGUKICAJaW50IGksIHdobzsKKyAJdnJlZyB2U3RtcDsK
ICAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKICAJICB3aG8gPSAoKnZDKS5iW0FWX0JJTkRF
WChpKV0gJiAweDFmOwogIAkgIGlmICh3aG8gJiAweDEwKQohIAkgICAgdlN0bXAuYltBVl9CSU5E
RVgoaSldID0gKCp2QikuYltBVl9CSU5ERVgod2hvICYgMHhmKV07CiAgCSAgZWxzZQohIAkgICAg
dlN0bXAuYltBVl9CSU5ERVgoaSldID0gKCp2QSkuYltBVl9CSU5ERVgod2hvICYgMHhmKV07CiAg
CX0KKyAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFT
SyB8IFZCX0JJVE1BU0sgfCBWQ19CSVRNQVNLKTsKICAKICAKKioqKioqKioqKioqKioqCioqKiAx
NjUwLDE2NzcgKioqKgogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjc4MjpWWDphdjp2cGtw
eCAlVkQsICVWQSwgJVZCOlZlY3RvciBQYWNrIFBpeGVsMzIKICAJaW50IGk7CiAgCWZvciAoaSA9
IDA7IGkgPCA0OyBpKyspIHsKISAJICAoKnZTKS5oW0FWX0hJTkRFWChpKzQpXSA9ICgoKCgqdkIp
LndbaV0pID4+IDkpICYgMHhmYzAwKQogIAkgICAgICAgICAgICAgICB8ICgoKCgqdkIpLndbaV0p
ID4+IDYpICYgMHgwM2UwKQogIAkgICAgICAgICAgICAgICB8ICgoKCgqdkIpLndbaV0pID4+IDMp
ICYgMHgwMDFmKTsKISAJICAoKnZTKS5oW0FWX0hJTkRFWChpKV0gPSAoKCgoKnZBKS53W2ldKSA+
PiA5KSAmIDB4ZmMwMCkKICAJICAgICAgICAgICAgIHwgKCgoKCp2QSkud1tpXSkgPj4gNikgJiAw
eDAzZTApCiAgCSAgICAgICAgICAgICB8ICgoKCgqdkEpLndbaV0pID4+IDMpICYgMHgwMDFmKTsK
ICAJfQogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7
CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMzk4OlZYOmF2OnZwa3Noc3MgJVZELCAlVkEs
ICVWQjpWZWN0b3IgUGFjayBTaWduZWQgSGFsZiBXb3JkIFNpZ25lZCBTYXR1cmF0ZQogIAlpbnQg
aSwgc2F0LCB0ZW1wc2F0OwogIAlzaWduZWQxNiB0ZW1wOwogIAlzYXQgPSAwOwogIAlmb3IgKGkg
PSAwOyBpIDwgMTY7IGkrKykgewogIAkgIGlmIChpIDwgOCkKICAJICAgIHRlbXAgPSAoKnZBKS5o
W0FWX0hJTkRFWChpKV07CiAgCSAgZWxzZQogIAkgICAgdGVtcCA9ICgqdkIpLmhbQVZfSElOREVY
KGktOCldOwohIAkgICgqdlMpLmJbQVZfQklOREVYKGkpXSA9IGFsdGl2ZWNfc2lnbmVkX3NhdHVy
YXRlXzgodGVtcCwgJnRlbXBzYXQpOwogIAkgIHNhdCB8PSB0ZW1wc2F0OwogIAl9CiAgCUFMVElW
RUNfU0VUX1NBVChzYXQpOwogIAlQUENfSU5TTl9WUl9WU0NSKFZTX0JJVE1BU0ssIFZBX0JJVE1B
U0sgfCBWQl9CSVRNQVNLKTsKICAKLS0tIDE2OTIsMTcyMyAtLS0tCiAgCiAgMC40LDYuVlMsMTEu
VkEsMTYuVkIsMjEuNzgyOlZYOmF2OnZwa3B4ICVWRCwgJVZBLCAlVkI6VmVjdG9yIFBhY2sgUGl4
ZWwzMgogIAlpbnQgaTsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg
ewohIAkgIHZTdG1wLmhbQVZfSElOREVYKGkrNCldID0gKCgoKCp2Qikud1tpXSkgPj4gOSkgJiAw
eGZjMDApCiAgCSAgICAgICAgICAgICAgIHwgKCgoKCp2Qikud1tpXSkgPj4gNikgJiAweDAzZTAp
CiAgCSAgICAgICAgICAgICAgIHwgKCgoKCp2Qikud1tpXSkgPj4gMykgJiAweDAwMWYpOwohIAkg
IHZTdG1wLmhbQVZfSElOREVYKGkpXSA9ICgoKCgqdkEpLndbaV0pID4+IDkpICYgMHhmYzAwKQog
IAkgICAgICAgICAgICAgfCAoKCgoKnZBKS53W2ldKSA+PiA2KSAmIDB4MDNlMCkKICAJICAgICAg
ICAgICAgIHwgKCgoKCp2QSkud1tpXSkgPj4gMykgJiAweDAwMWYpOwogIAl9CisgCSgqdlMpID0g
dlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNL
KTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4zOTg6Vlg6YXY6dnBrc2hzcyAlVkQsICVW
QSwgJVZCOlZlY3RvciBQYWNrIFNpZ25lZCBIYWxmIFdvcmQgU2lnbmVkIFNhdHVyYXRlCiAgCWlu
dCBpLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDE2IHRlbXA7CiAgCXNhdCA9IDA7CisgCXZyZWcg
dlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgCSAgaWYgKGkgPCA4KQogIAkg
ICAgdGVtcCA9ICgqdkEpLmhbQVZfSElOREVYKGkpXTsKICAJICBlbHNlCiAgCSAgICB0ZW1wID0g
KCp2QikuaFtBVl9ISU5ERVgoaS04KV07CiEgCSAgdlN0bXAuYltBVl9CSU5ERVgoaSldID0gYWx0
aXZlY19zaWduZWRfc2F0dXJhdGVfOCh0ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBz
YXQ7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQ
Q19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAoq
KioqKioqKioqKioqKioKKioqIDE2NzksMTY5MiAqKioqCiAgCWludCBpLCBzYXQsIHRlbXBzYXQ7
CiAgCXNpZ25lZDE2IHRlbXA7CiAgCXNhdCA9IDA7CiAgCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsr
KSB7CiAgCSAgaWYgKGkgPCA4KQogIAkgICAgdGVtcCA9ICgqdkEpLmhbQVZfSElOREVYKGkpXTsK
ICAJICBlbHNlCiAgCSAgICB0ZW1wID0gKCp2QikuaFtBVl9ISU5ERVgoaS04KV07CiEgCSAgKCp2
UykuYltBVl9CSU5ERVgoaSldID0gYWx0aXZlY191bnNpZ25lZF9zYXR1cmF0ZV84KHRlbXAsICZ0
ZW1wc2F0KTsKICAJICBzYXQgfD0gdGVtcHNhdDsKICAJfQogIAlBTFRJVkVDX1NFVF9TQVQoc2F0
KTsKICAJUFBDX0lOU05fVlJfVlNDUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFT
Syk7CiAgCi0tLSAxNzI1LDE3NDAgLS0tLQogIAlpbnQgaSwgc2F0LCB0ZW1wc2F0OwogIAlzaWdu
ZWQxNiB0ZW1wOwogIAlzYXQgPSAwOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAwOyBpIDwg
MTY7IGkrKykgewogIAkgIGlmIChpIDwgOCkKICAJICAgIHRlbXAgPSAoKnZBKS5oW0FWX0hJTkRF
WChpKV07CiAgCSAgZWxzZQogIAkgICAgdGVtcCA9ICgqdkIpLmhbQVZfSElOREVYKGktOCldOwoh
IAkgIHZTdG1wLmJbQVZfQklOREVYKGkpXSA9IGFsdGl2ZWNfdW5zaWduZWRfc2F0dXJhdGVfOCh0
ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KKyAJKCp2UykgPSB2U3Rt
cDsKICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFT
SywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAoqKioqKioqKioqKioqKioKKioqIDE2OTQs
MTcwNyAqKioqCiAgCWludCBpLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDMyIHRlbXA7CiAgCXNh
dCA9IDA7CiAgCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKICAJICBpZiAoaSA8IDQpCiAgCSAg
ICB0ZW1wID0gKCp2QSkud1tpXTsKICAJICBlbHNlCiAgCSAgICB0ZW1wID0gKCp2Qikud1tpLTRd
OwohIAkgICgqdlMpLmhbQVZfSElOREVYKGkpXSA9IGFsdGl2ZWNfc2lnbmVkX3NhdHVyYXRlXzE2
KHRlbXAsICZ0ZW1wc2F0KTsKICAJICBzYXQgfD0gdGVtcHNhdDsKICAJfQogIAlBTFRJVkVDX1NF
VF9TQVQoc2F0KTsKICAJUFBDX0lOU05fVlJfVlNDUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwg
VkJfQklUTUFTSyk7CiAgCi0tLSAxNzQyLDE3NTcgLS0tLQogIAlpbnQgaSwgc2F0LCB0ZW1wc2F0
OwogIAlzaWduZWQzMiB0ZW1wOwogIAlzYXQgPSAwOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkg
PSAwOyBpIDwgODsgaSsrKSB7CiAgCSAgaWYgKGkgPCA0KQogIAkgICAgdGVtcCA9ICgqdkEpLndb
aV07CiAgCSAgZWxzZQogIAkgICAgdGVtcCA9ICgqdkIpLndbaS00XTsKISAJICB2U3RtcC5oW0FW
X0hJTkRFWChpKV0gPSBhbHRpdmVjX3NpZ25lZF9zYXR1cmF0ZV8xNih0ZW1wLCAmdGVtcHNhdCk7
CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJQUxUSVZFQ19T
RVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8
IFZCX0JJVE1BU0spOwogIAoqKioqKioqKioqKioqKioKKioqIDE3MDksMTczOCAqKioqCiAgCWlu
dCBpLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDMyIHRlbXA7CiAgCXNhdCA9IDA7CiAgCWZvciAo
aSA9IDA7IGkgPCA4OyBpKyspIHsKICAJICBpZiAoaSA8IDQpCiAgCSAgICB0ZW1wID0gKCp2QSku
d1tpXTsKICAJICBlbHNlCiAgCSAgICB0ZW1wID0gKCp2Qikud1tpLTRdOwohIAkgICgqdlMpLmhb
QVZfSElOREVYKGkpXSA9IGFsdGl2ZWNfdW5zaWduZWRfc2F0dXJhdGVfMTYodGVtcCwgJnRlbXBz
YXQpOwogIAkgIHNhdCB8PSB0ZW1wc2F0OwogIAl9CiAgCUFMVElWRUNfU0VUX1NBVChzYXQpOwog
IAlQUENfSU5TTl9WUl9WU0NSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsK
ICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4xNDpWWDphdjp2cGt1aHVtICVWRCwgJVZBLCAl
VkI6VmVjdG9yIFBhY2sgVW5zaWduZWQgSGFsZiBXb3JkIFVuc2lnbmVkIE1vZHVsbwogIAlpbnQg
aTsKICAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAgCSAgaWYgKGkgPCA4KQohIAkgICAgKCp2
UykuYltBVl9CSU5ERVgoaSldID0gKCp2QSkuaFtBVl9ISU5ERVgoaSldOwogIAkgIGVsc2UKISAJ
ICAgICgqdlMpLmJbQVZfQklOREVYKGkpXSA9ICgqdkIpLmhbQVZfSElOREVYKGktOCldOwogIAlQ
UENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCiAgMC40
LDYuVlMsMTEuVkEsMTYuVkIsMjEuMTQyOlZYOmF2OnZwa3VodXMgJVZELCAlVkEsICVWQjpWZWN0
b3IgUGFjayBVbnNpZ25lZCBIYWxmIFdvcmQgVW5zaWduZWQgU2F0dXJhdGUKICAJaW50IGksIHNh
dCwgdGVtcHNhdDsKICAJc2lnbmVkMTYgdGVtcDsKICAJc2F0ID0gMDsKICAJZm9yIChpID0gMDsg
aSA8IDE2OyBpKyspIHsKICAJICBpZiAoaSA8IDgpCiAgCSAgICB0ZW1wID0gKCp2QSkuaFtBVl9I
SU5ERVgoaSldOwotLS0gMTc1OSwxNzkzIC0tLS0KICAJaW50IGksIHNhdCwgdGVtcHNhdDsKICAJ
c2lnbmVkMzIgdGVtcDsKICAJc2F0ID0gMDsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsg
aSA8IDg7IGkrKykgewogIAkgIGlmIChpIDwgNCkKICAJICAgIHRlbXAgPSAoKnZBKS53W2ldOwog
IAkgIGVsc2UKICAJICAgIHRlbXAgPSAoKnZCKS53W2ktNF07CiEgCSAgdlN0bXAuaFtBVl9ISU5E
RVgoaSldID0gYWx0aXZlY191bnNpZ25lZF9zYXR1cmF0ZV8xNih0ZW1wLCAmdGVtcHNhdCk7CiAg
CSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJQUxUSVZFQ19TRVRf
U0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZC
X0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjE0OlZYOmF2OnZwa3VodW0g
JVZELCAlVkEsICVWQjpWZWN0b3IgUGFjayBVbnNpZ25lZCBIYWxmIFdvcmQgVW5zaWduZWQgTW9k
dWxvCiAgCWludCBpOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykK
ICAJICBpZiAoaSA8IDgpCiEgCSAgICB2U3RtcC5iW0FWX0JJTkRFWChpKV0gPSAoKnZBKS5oW0FW
X0hJTkRFWChpKV07CiAgCSAgZWxzZQohIAkgICAgdlN0bXAuYltBVl9CSU5ERVgoaSldID0gKCp2
QikuaFtBVl9ISU5ERVgoaS04KV07CiEgCSgqdlMpID0gdlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZT
X0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwx
Ni5WQiwyMS4xNDI6Vlg6YXY6dnBrdWh1cyAlVkQsICVWQSwgJVZCOlZlY3RvciBQYWNrIFVuc2ln
bmVkIEhhbGYgV29yZCBVbnNpZ25lZCBTYXR1cmF0ZQogIAlpbnQgaSwgc2F0LCB0ZW1wc2F0Owog
IAlzaWduZWQxNiB0ZW1wOwogIAlzYXQgPSAwOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAw
OyBpIDwgMTY7IGkrKykgewogIAkgIGlmIChpIDwgOCkKICAJICAgIHRlbXAgPSAoKnZBKS5oW0FW
X0hJTkRFWChpKV07CioqKioqKioqKioqKioqKgoqKiogMTc0MCwxNzY0ICoqKioKICAJICAgIHRl
bXAgPSAoKnZCKS5oW0FWX0hJTkRFWChpLTgpXTsKICAJICAvKiBmb3JjZSBwb3NpdGl2ZSBpbiBz
aWduZWQxNiwgb2sgYXMgd2UnbGwgdG9zcyB0aGUgYml0IGF3YXkgYW55d2F5ICovCiAgCSAgdGVt
cCAmPSB+MHg4MDAwOwohIAkgICgqdlMpLmJbQVZfQklOREVYKGkpXSA9IGFsdGl2ZWNfdW5zaWdu
ZWRfc2F0dXJhdGVfOCh0ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0K
ICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywg
VkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjc4
OlZYOmF2OnZwa3V3dW0gJVZELCAlVkEsICVWQjpWZWN0b3IgUGFjayBVbnNpZ25lZCBXb3JkIFVu
c2lnbmVkIE1vZHVsbwogIAlpbnQgaTsKICAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKICAJICBp
ZiAoaSA8IDgpCiEgCSAgICAoKnZTKS5oW0FWX0hJTkRFWChpKV0gPSAoKnZBKS53W2ldOwogIAkg
IGVsc2UKISAJICAgICgqdlMpLmhbQVZfSElOREVYKGkpXSA9ICgqdkIpLndbaS04XTsKICAJUFBD
X0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2
LlZTLDExLlZBLDE2LlZCLDIxLjIwNjpWWDphdjp2cGt1d3VzICVWRCwgJVZBLCAlVkI6VmVjdG9y
IFBhY2sgVW5zaWduZWQgV29yZCBVbnNpZ25lZCBTYXR1cmF0ZQogIAlpbnQgaSwgc2F0LCB0ZW1w
c2F0OwogIAlzaWduZWQzMiB0ZW1wOwogIAlzYXQgPSAwOwogIAlmb3IgKGkgPSAwOyBpIDwgODsg
aSsrKSB7CiAgCSAgaWYgKGkgPCA0KQogIAkgICAgdGVtcCA9ICgqdkEpLndbaV07Ci0tLSAxNzk1
LDE4MjMgLS0tLQogIAkgICAgdGVtcCA9ICgqdkIpLmhbQVZfSElOREVYKGktOCldOwogIAkgIC8q
IGZvcmNlIHBvc2l0aXZlIGluIHNpZ25lZDE2LCBvayBhcyB3ZSdsbCB0b3NzIHRoZSBiaXQgYXdh
eSBhbnl3YXkgKi8KICAJICB0ZW1wICY9IH4weDgwMDA7CiEgCSAgdlN0bXAuYltBVl9CSU5ERVgo
aSldID0gYWx0aXZlY191bnNpZ25lZF9zYXR1cmF0ZV84KHRlbXAsICZ0ZW1wc2F0KTsKICAJICBz
YXQgfD0gdGVtcHNhdDsKICAJfQorIAkoKnZTKSA9IHZTdG1wOwogIAlBTFRJVkVDX1NFVF9TQVQo
c2F0KTsKICAJUFBDX0lOU05fVlJfVlNDUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklU
TUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuNzg6Vlg6YXY6dnBrdXd1bSAlVkQs
ICVWQSwgJVZCOlZlY3RvciBQYWNrIFVuc2lnbmVkIFdvcmQgVW5zaWduZWQgTW9kdWxvCiAgCWlu
dCBpOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogIAkgIGlmIChp
IDwgOCkKISAJICAgIHZTdG1wLmhbQVZfSElOREVYKGkpXSA9ICgqdkEpLndbaV07CiAgCSAgZWxz
ZQohIAkgICAgdlN0bXAuaFtBVl9ISU5ERVgoaSldID0gKCp2Qikud1tpLThdOwohIAkoKnZTKSA9
IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFT
Syk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMjA2OlZYOmF2OnZwa3V3dXMgJVZELCAl
VkEsICVWQjpWZWN0b3IgUGFjayBVbnNpZ25lZCBXb3JkIFVuc2lnbmVkIFNhdHVyYXRlCiAgCWlu
dCBpLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDMyIHRlbXA7CiAgCXNhdCA9IDA7CisgCXZyZWcg
dlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKICAJICBpZiAoaSA8IDQpCiAgCSAg
ICB0ZW1wID0gKCp2QSkud1tpXTsKKioqKioqKioqKioqKioqCioqKiAxNzY2LDE3NzQgKioqKgog
IAkgICAgdGVtcCA9ICgqdkIpLndbaS00XTsKICAJICAvKiBmb3JjZSBwb3NpdGl2ZSBpbiBzaWdu
ZWQzMiwgb2sgYXMgd2UnbGwgdG9zcyB0aGUgYml0IGF3YXkgYW55d2F5ICovCiAgCSAgdGVtcCAm
PSB+MHg4MDAwMDAwMDsKISAJICAoKnZTKS5oW0FWX0hJTkRFWChpKV0gPSBhbHRpdmVjX3Vuc2ln
bmVkX3NhdHVyYXRlXzE2KHRlbXAsICZ0ZW1wc2F0KTsKICAJICBzYXQgfD0gdGVtcHNhdDsKICAJ
fQogIAlBTFRJVkVDX1NFVF9TQVQoc2F0KTsKICAJUFBDX0lOU05fVlJfVlNDUihWU19CSVRNQVNL
LCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCi0tLSAxODI1LDE4MzQgLS0tLQogIAkgICAg
dGVtcCA9ICgqdkIpLndbaS00XTsKICAJICAvKiBmb3JjZSBwb3NpdGl2ZSBpbiBzaWduZWQzMiwg
b2sgYXMgd2UnbGwgdG9zcyB0aGUgYml0IGF3YXkgYW55d2F5ICovCiAgCSAgdGVtcCAmPSB+MHg4
MDAwMDAwMDsKISAJICB2U3RtcC5oW0FWX0hJTkRFWChpKV0gPSBhbHRpdmVjX3Vuc2lnbmVkX3Nh
dHVyYXRlXzE2KHRlbXAsICZ0ZW1wc2F0KTsKICAJICBzYXQgfD0gdGVtcHNhdDsKICAJfQorIAko
KnZTKSA9IHZTdG1wOwogIAlBTFRJVkVDX1NFVF9TQVQoc2F0KTsKICAJUFBDX0lOU05fVlJfVlND
UihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCioqKioqKioqKioqKioq
KgoqKiogMTkwOSwxOTIzICoqKioKICAJaW50IHNoLCBpLCBqLCBjYXJyeSwgbmV3X2NhcnJ5Owog
IAlzaCA9ICgqdkIpLmJbMF0gJiA3OwkvKiBkb24ndCBib3RoZXIgY2hlY2tpbmcgZXZlcnl0aGlu
ZyAqLwogIAljYXJyeSA9IDA7CiAgCWZvciAoaiA9IDM7IGogPj0gMDsgai0tKSB7CiAgCSAgaWYg
KENVUlJFTlRfVEFSR0VUX0JZVEVfT1JERVIgPT0gQklHX0VORElBTikKICAJICAgIGkgPSBqOwog
IAkgIGVsc2UKICAJICAgIGkgPSAoaiArIDIpICUgNDsKICAJICBuZXdfY2FycnkgPSAoKnZBKS53
W2ldID4+ICgzMiAtIHNoKTsKISAJICAoKnZTKS53W2ldID0gKCgqdkEpLndbaV0gPDwgc2gpIHwg
Y2Fycnk7CiAgCSAgY2FycnkgPSBuZXdfY2Fycnk7CiAgCX0KICAJUFBDX0lOU05fVlIoVlNfQklU
TUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZC
LDIxLjI2MDpWWDphdjp2c2xiICVWRCwgJVZBLCAlVkI6VmVjdG9yIFNoaWZ0IExlZnQgSW50ZWdl
ciBCeXRlCi0tLSAxOTY5LDE5ODUgLS0tLQogIAlpbnQgc2gsIGksIGosIGNhcnJ5LCBuZXdfY2Fy
cnk7CiAgCXNoID0gKCp2QikuYlswXSAmIDc7CS8qIGRvbid0IGJvdGhlciBjaGVja2luZyBldmVy
eXRoaW5nICovCiAgCWNhcnJ5ID0gMDsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChqID0gMzsgaiA+
PSAwOyBqLS0pIHsKICAJICBpZiAoQ1VSUkVOVF9UQVJHRVRfQllURV9PUkRFUiA9PSBCSUdfRU5E
SUFOKQogIAkgICAgaSA9IGo7CiAgCSAgZWxzZQogIAkgICAgaSA9IChqICsgMikgJSA0OwogIAkg
IG5ld19jYXJyeSA9ICgqdkEpLndbaV0gPj4gKDMyIC0gc2gpOwohIAkgIHZTdG1wLndbaV0gPSAo
KCp2QSkud1tpXSA8PCBzaCkgfCBjYXJyeTsKICAJICBjYXJyeSA9IG5ld19jYXJyeTsKICAJfQor
IAkoKnZTKSA9IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQV9CSVRNQVNLIHwg
VkJfQklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIsMjEuMjYwOlZYOmF2OnZzbGIg
JVZELCAlVkEsICVWQjpWZWN0b3IgU2hpZnQgTGVmdCBJbnRlZ2VyIEJ5dGUKKioqKioqKioqKioq
KioqCioqKiAxOTI4LDE5MzkgKioqKgogIAl9CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZB
X0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKISAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4wLDIy
LlNILDI2LjQ0OlZYOmF2OnZzbGRvbCAlVkQsICVWQSwgJVZCOlZlY3RvciBTaGlmdCBMZWZ0IERv
dWJsZSBieSBPY3RldCBJbW1lZGlhdGUKICAJaW50IGksIGo7CiAgCWZvciAoaiA9IDAsIGkgPSBT
SDsgaSA8IDE2OyBpKyspCiEgCSAgKCp2UykuYltqKytdID0gKCp2QSkuYltpXTsKICAJZm9yIChp
ID0gMDsgaSA8IFNIOyBpKyspCiEgCSAgKCp2UykuYltqKytdID0gKCp2QikuYltpXTsKICAJUFBD
X0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2
LlZTLDExLlZBLDE2LlZCLDIxLjMyNDpWWDphdjp2c2xoICVWRCwgJVZBLCAlVkI6VmVjdG9yIFNo
aWZ0IExlZnQgSGFsZiBXb3JkCi0tLSAxOTkwLDIwMDMgLS0tLQogIAl9CiAgCVBQQ19JTlNOX1ZS
KFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKISAwLjQsNi5WUywxMS5W
QSwxNi5WQiwyMS4wLDIyLlNILDI2LjQ0OlZYOmF2OnZzbGRvaSAlVkQsICVWQSwgJVZCOlZlY3Rv
ciBTaGlmdCBMZWZ0IERvdWJsZSBieSBPY3RldCBJbW1lZGlhdGUKICAJaW50IGksIGo7CisgCXZy
ZWcgdlN0bXA7CiAgCWZvciAoaiA9IDAsIGkgPSBTSDsgaSA8IDE2OyBpKyspCiEgCSAgdlN0bXAu
YltqKytdID0gKCp2QSkuYltpXTsKICAJZm9yIChpID0gMDsgaSA8IFNIOyBpKyspCiEgCSAgdlN0
bXAuYltqKytdID0gKCp2QikuYltpXTsKISAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIo
VlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZB
LDE2LlZCLDIxLjMyNDpWWDphdjp2c2xoICVWRCwgJVZBLCAlVkI6VmVjdG9yIFNoaWZ0IExlZnQg
SGFsZiBXb3JkCioqKioqKioqKioqKioqKgoqKiogMTk0NiwxOTYxICoqKioKICAKICAwLjQsNi5W
UywxMS5WQSwxNi5WQiwyMS4xMDM2OlZYOmF2OnZzbG8gJVZELCAlVkEsICVWQjpWZWN0b3IgU2hp
ZnQgTGVmdCBieSBPY3RldAogIAlpbnQgaSwgc2g7CiAgCWlmIChDVVJSRU5UX1RBUkdFVF9CWVRF
X09SREVSID09IEJJR19FTkRJQU4pCiAgCSAgc2ggPSAoKCp2QikuYltBVl9CSU5ERVgoMTUpXSA+
PiAzKSAmIDB4ZjsKICAJZWxzZQogIAkgIHNoID0gKCgqdkIpLmJbQVZfQklOREVYKDApXSA+PiAz
KSAmIDB4ZjsKICAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKICAJICBpZiAoMTUgLSBpID4g
c2gpCiEgCSAgICAoKnZTKS5iW0FWX0JJTkRFWChpKV0gPSAoKnZBKS5iW0FWX0JJTkRFWChpICsg
c2gpXTsKICAJICBlbHNlCiEgCSAgICAoKnZTKS5iW0FWX0JJTkRFWChpKV0gPSAwOwogIAl9CiAg
CVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAw
LjQsNi5WUywxMS5WQSwxNi5WQiwyMS4zODg6Vlg6YXY6dnNsdyAlVkQsICVWQSwgJVZCOlZlY3Rv
ciBTaGlmdCBMZWZ0IEludGVnZXIgV29yZAotLS0gMjAxMCwyMDI3IC0tLS0KICAKICAwLjQsNi5W
UywxMS5WQSwxNi5WQiwyMS4xMDM2OlZYOmF2OnZzbG8gJVZELCAlVkEsICVWQjpWZWN0b3IgU2hp
ZnQgTGVmdCBieSBPY3RldAogIAlpbnQgaSwgc2g7CisgCXZyZWcgdlN0bXA7CiAgCWlmIChDVVJS
RU5UX1RBUkdFVF9CWVRFX09SREVSID09IEJJR19FTkRJQU4pCiAgCSAgc2ggPSAoKCp2QikuYltB
Vl9CSU5ERVgoMTUpXSA+PiAzKSAmIDB4ZjsKICAJZWxzZQogIAkgIHNoID0gKCgqdkIpLmJbQVZf
QklOREVYKDApXSA+PiAzKSAmIDB4ZjsKICAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKICAJ
ICBpZiAoMTUgLSBpID4gc2gpCiEgCSAgICB2U3RtcC5iW0FWX0JJTkRFWChpKV0gPSAoKnZBKS5i
W0FWX0JJTkRFWChpICsgc2gpXTsKICAJICBlbHNlCiEgCSAgICB2U3RtcC5iW0FWX0JJTkRFWChp
KV0gPSAwOwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ss
IFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4z
ODg6Vlg6YXY6dnNsdyAlVkQsICVWQSwgJVZCOlZlY3RvciBTaGlmdCBMZWZ0IEludGVnZXIgV29y
ZAoqKioqKioqKioqKioqKioKKioqIDIwMzQsMjA0OCAqKioqCiAgCWludCBzaCwgaSwgaiwgY2Fy
cnksIG5ld19jYXJyeTsKICAJc2ggPSAoKnZCKS5iWzBdICYgNzsJLyogZG9uJ3QgYm90aGVyIGNo
ZWNraW5nIGV2ZXJ5dGhpbmcgKi8KICAJY2FycnkgPSAwOwogIAlmb3IgKGogPSAwOyBqIDwgNDsg
aisrKSB7CiAgCSAgaWYgKENVUlJFTlRfVEFSR0VUX0JZVEVfT1JERVIgPT0gQklHX0VORElBTikK
ICAJICAgIGkgPSBqOwogIAkgIGVsc2UKICAJICAgIGkgPSAoaiArIDIpICUgNDsKICAJICBuZXdf
Y2FycnkgPSAoKnZBKS53W2ldIDw8ICgzMiAtIHNoKTsKISAJICAoKnZTKS53W2ldID0gKCgqdkEp
LndbaV0gPj4gc2gpIHwgY2Fycnk7CiAgCSAgY2FycnkgPSBuZXdfY2Fycnk7CiAgCX0KICAJUFBD
X0lOU05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2
LlZTLDExLlZBLDE2LlZCLDIxLjc3MjpWWDphdjp2c3JhYiAlVkQsICVWQSwgJVZCOlZlY3RvciBT
aGlmdCBSaWdodCBBbGdlYnJhaWMgQnl0ZQotLS0gMjEwMCwyMTE2IC0tLS0KICAJaW50IHNoLCBp
LCBqLCBjYXJyeSwgbmV3X2NhcnJ5OwogIAlzaCA9ICgqdkIpLmJbMF0gJiA3OwkvKiBkb24ndCBi
b3RoZXIgY2hlY2tpbmcgZXZlcnl0aGluZyAqLwogIAljYXJyeSA9IDA7CisgCXZyZWcgdlN0bXA7
CiAgCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKICAJICBpZiAoQ1VSUkVOVF9UQVJHRVRfQllU
RV9PUkRFUiA9PSBCSUdfRU5ESUFOKQogIAkgICAgaSA9IGo7CiAgCSAgZWxzZQogIAkgICAgaSA9
IChqICsgMikgJSA0OwogIAkgIG5ld19jYXJyeSA9ICgqdkEpLndbaV0gPDwgKDMyIC0gc2gpOwoh
IAkgIHZTdG1wLndbaV0gPSAoKCp2QSkud1tpXSA+PiBzaCkgfCBjYXJyeTsKICAJICBjYXJyeSA9
IG5ld19jYXJyeTsKICAJfQorIAkoKnZTKSA9IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRN
QVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIs
MjEuNzcyOlZYOmF2OnZzcmFiICVWRCwgJVZBLCAlVkI6VmVjdG9yIFNoaWZ0IFJpZ2h0IEFsZ2Vi
cmFpYyBCeXRlCioqKioqKioqKioqKioqKgoqKiogMjA5MywyMTA4ICoqKioKICAKICAwLjQsNi5W
UywxMS5WQSwxNi5WQiwyMS4xMTAwOlZYOmF2OnZzcm8gJVZELCAlVkEsICVWQjpWZWN0b3IgU2hp
ZnQgUmlnaHQgT2N0ZXQKICAJaW50IGksIHNoOwogIAlpZiAoQ1VSUkVOVF9UQVJHRVRfQllURV9P
UkRFUiA9PSBCSUdfRU5ESUFOKQogIAkgIHNoID0gKCgqdkIpLmJbQVZfQklOREVYKDE1KV0gPj4g
MykgJiAweGY7CiAgCWVsc2UKICAJICBzaCA9ICgoKnZCKS5iW0FWX0JJTkRFWCgwKV0gPj4gMykg
JiAweGY7CiAgCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgCSAgaWYgKGkgPCBzaCkKISAJ
ICAgICgqdlMpLmJbQVZfQklOREVYKGkpXSA9IDA7CiAgCSAgZWxzZQohIAkgICAgKCp2UykuYltB
Vl9CSU5ERVgoaSldID0gKCp2QSkuYltBVl9CSU5ERVgoaSAtIHNoKV07CiAgCX0KICAJUFBDX0lO
U05fVlIoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZT
LDExLlZBLDE2LlZCLDIxLjY0NDpWWDphdjp2c3J3ICVWRCwgJVZBLCAlVkI6VmVjdG9yIFNoaWZ0
IFJpZ2h0IFdvcmQKLS0tIDIxNjEsMjE3OCAtLS0tCiAgCiAgMC40LDYuVlMsMTEuVkEsMTYuVkIs
MjEuMTEwMDpWWDphdjp2c3JvICVWRCwgJVZBLCAlVkI6VmVjdG9yIFNoaWZ0IFJpZ2h0IE9jdGV0
CiAgCWludCBpLCBzaDsKKyAJdnJlZyB2U3RtcDsKICAJaWYgKENVUlJFTlRfVEFSR0VUX0JZVEVf
T1JERVIgPT0gQklHX0VORElBTikKICAJICBzaCA9ICgoKnZCKS5iW0FWX0JJTkRFWCgxNSldID4+
IDMpICYgMHhmOwogIAllbHNlCiAgCSAgc2ggPSAoKCp2QikuYltBVl9CSU5ERVgoMCldID4+IDMp
ICYgMHhmOwogIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogIAkgIGlmIChpIDwgc2gpCiEg
CSAgICB2U3RtcC5iW0FWX0JJTkRFWChpKV0gPSAwOwogIAkgIGVsc2UKISAJICAgIHZTdG1wLmJb
QVZfQklOREVYKGkpXSA9ICgqdkEpLmJbQVZfQklOREVYKGkgLSBzaCldOwogIAl9CisgCSgqdlMp
ID0gdlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRN
QVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS42NDQ6Vlg6YXY6dnNydyAlVkQsICVW
QSwgJVZCOlZlY3RvciBTaGlmdCBSaWdodCBXb3JkCioqKioqKioqKioqKioqKgoqKiogMjIzOCwy
Mjg3ICoqKioKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4xOTI4OlZYOmF2OnZzdW1zd3MgJVZE
LCAlVkEsICVWQjpWZWN0b3IgU3VtIEFjcm9zcyBTaWduZWQgV29yZCBTYXR1cmF0ZQogIAlpbnQg
aSwgc2F0OwogIAlzaWduZWQ2NCB0ZW1wOwogIAl0ZW1wID0gKHNpZ25lZDY0KShzaWduZWQzMiko
KnZCKS53WzNdOwogIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogIAkgIHRlbXAgKz0gKHNpZ25l
ZDY0KShzaWduZWQzMikoKnZBKS53W2ldOwohIAkoKnZTKS53WzNdID0gYWx0aXZlY19zaWduZWRf
c2F0dXJhdGVfMzIodGVtcCwgJnNhdCk7CiEgCSgqdlMpLndbMF0gPSAoKnZTKS53WzFdID0gKCp2
Uykud1syXSA9IDA7CiAgCUFMVElWRUNfU0VUX1NBVChzYXQpOwogIAlQUENfSU5TTl9WUl9WU0NS
KFZTX0JJVE1BU0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5W
QSwxNi5WQiwyMS4xNjcyOlZYOmF2OnZzdW0yc3dzICVWRCwgJVZBLCAlVkI6VmVjdG9yIFN1bSBB
Y3Jvc3MgUGFydGlhbCAoMS8yKSBTaWduZWQgV29yZCBTYXR1cmF0ZQogIAlpbnQgaSwgaiwgc2F0
LCB0ZW1wc2F0OwogIAlzaWduZWQ2NCB0ZW1wOwogIAlmb3IgKGogPSAwOyBqIDwgNDsgaiArPSAy
KSB7CiAgCSAgdGVtcCA9IChzaWduZWQ2NCkoc2lnbmVkMzIpKCp2Qikud1tqKzFdOwogIAkgIHRl
bXAgKz0gKHNpZ25lZDY0KShzaWduZWQzMikoKnZBKS53W2pdICsgKHNpZ25lZDY0KShzaWduZWQz
MikoKnZBKS53W2orMV07CiEgCSAgKCp2Uykud1tqKzFdID0gYWx0aXZlY19zaWduZWRfc2F0dXJh
dGVfMzIodGVtcCwgJnRlbXBzYXQpOwogIAkgIHNhdCB8PSB0ZW1wc2F0OwogIAl9CiEgCSgqdlMp
LndbMF0gPSAoKnZTKS53WzJdID0gMDsKICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19J
TlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAu
NCw2LlZTLDExLlZBLDE2LlZCLDIxLjE4MDA6Vlg6YXY6dnN1bTRzYnMgJVZELCAlVkEsICVWQjpW
ZWN0b3IgU3VtIEFjcm9zcyBQYXJ0aWFsICgxLzQpIFNpZ25lZCBCeXRlIFNhdHVyYXRlCiAgCWlu
dCBpLCBqLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDY0IHRlbXA7CiAgCWZvciAoaiA9IDA7IGog
PCA0OyBqKyspIHsKICAJICB0ZW1wID0gKHNpZ25lZDY0KShzaWduZWQzMikoKnZCKS53W2pdOwog
IAkgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCiAgCSAgICB0ZW1wICs9IChzaWduZWQ2NCkoc2ln
bmVkOCkoKnZBKS5iW2krKGoqNCldOwohIAkgICgqdlMpLndbal0gPSBhbHRpdmVjX3NpZ25lZF9z
YXR1cmF0ZV8zMih0ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KICAJ
QUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFf
QklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjE2MDg6
Vlg6YXY6dnN1bTRzaHMgJVZELCAlVkEsICVWQjpWZWN0b3IgU3VtIEFjcm9zcyBQYXJ0aWFsICgx
LzQpIFNpZ25lZCBIYWxmIFdvcmQgU2F0dXJhdGUKICAJaW50IGksIGosIHNhdCwgdGVtcHNhdDsK
ICAJc2lnbmVkNjQgdGVtcDsKICAJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewogIAkgIHRlbXAg
PSAoc2lnbmVkNjQpKHNpZ25lZDMyKSgqdkIpLndbal07CiAgCSAgZm9yIChpID0gMDsgaSA8IDI7
IGkrKykKICAJICAgIHRlbXAgKz0gKHNpZ25lZDY0KShzaWduZWQxNikoKnZBKS5oW2krKGoqMild
OwohIAkgICgqdlMpLndbal0gPSBhbHRpdmVjX3NpZ25lZF9zYXR1cmF0ZV8zMih0ZW1wLCAmdGVt
cHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7
CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0sp
OwogIAotLS0gMjMwOCwyMzY1IC0tLS0KICAwLjQsNi5WUywxMS5WQSwxNi5WQiwyMS4xOTI4OlZY
OmF2OnZzdW1zd3MgJVZELCAlVkEsICVWQjpWZWN0b3IgU3VtIEFjcm9zcyBTaWduZWQgV29yZCBT
YXR1cmF0ZQogIAlpbnQgaSwgc2F0OwogIAlzaWduZWQ2NCB0ZW1wOworIAl2cmVnIHZTdG1wOwog
IAl0ZW1wID0gKHNpZ25lZDY0KShzaWduZWQzMikoKnZCKS53WzNdOwogIAlmb3IgKGkgPSAwOyBp
IDwgNDsgaSsrKQogIAkgIHRlbXAgKz0gKHNpZ25lZDY0KShzaWduZWQzMikoKnZBKS53W2ldOwoh
IAl2U3RtcC53WzNdID0gYWx0aXZlY19zaWduZWRfc2F0dXJhdGVfMzIodGVtcCwgJnNhdCk7CiEg
CXZTdG1wLndbMF0gPSB2U3RtcC53WzFdID0gdlN0bXAud1syXSA9IDA7CiEgCSgqdlMpID0gdlN0
bXA7CiAgCUFMVElWRUNfU0VUX1NBVChzYXQpOwogIAlQUENfSU5TTl9WUl9WU0NSKFZTX0JJVE1B
U0ssIFZBX0JJVE1BU0sgfCBWQl9CSVRNQVNLKTsKICAKICAwLjQsNi5WUywxMS5WQSwxNi5WQiwy
MS4xNjcyOlZYOmF2OnZzdW0yc3dzICVWRCwgJVZBLCAlVkI6VmVjdG9yIFN1bSBBY3Jvc3MgUGFy
dGlhbCAoMS8yKSBTaWduZWQgV29yZCBTYXR1cmF0ZQogIAlpbnQgaSwgaiwgc2F0LCB0ZW1wc2F0
OwogIAlzaWduZWQ2NCB0ZW1wOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGogPSAwOyBqIDwgNDsg
aiArPSAyKSB7CiAgCSAgdGVtcCA9IChzaWduZWQ2NCkoc2lnbmVkMzIpKCp2Qikud1tqKzFdOwog
IAkgIHRlbXAgKz0gKHNpZ25lZDY0KShzaWduZWQzMikoKnZBKS53W2pdICsgKHNpZ25lZDY0KShz
aWduZWQzMikoKnZBKS53W2orMV07CiEgCSAgdlN0bXAud1tqKzFdID0gYWx0aXZlY19zaWduZWRf
c2F0dXJhdGVfMzIodGVtcCwgJnRlbXBzYXQpOwogIAkgIHNhdCB8PSB0ZW1wc2F0OwogIAl9CiEg
CXZTdG1wLndbMF0gPSB2U3RtcC53WzJdID0gMDsKISAJKCp2UykgPSB2U3RtcDsKICAJQUxUSVZF
Q19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFT
SyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjE4MDA6Vlg6YXY6
dnN1bTRzYnMgJVZELCAlVkEsICVWQjpWZWN0b3IgU3VtIEFjcm9zcyBQYXJ0aWFsICgxLzQpIFNp
Z25lZCBCeXRlIFNhdHVyYXRlCiAgCWludCBpLCBqLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDY0
IHRlbXA7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKICAJICB0
ZW1wID0gKHNpZ25lZDY0KShzaWduZWQzMikoKnZCKS53W2pdOwogIAkgIGZvciAoaSA9IDA7IGkg
PCA0OyBpKyspCiAgCSAgICB0ZW1wICs9IChzaWduZWQ2NCkoc2lnbmVkOCkoKnZBKS5iW2krKGoq
NCldOwohIAkgIHZTdG1wLndbal0gPSBhbHRpdmVjX3NpZ25lZF9zYXR1cmF0ZV8zMih0ZW1wLCAm
dGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJ
QUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFf
QklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLlZBLDE2LlZCLDIxLjE2MDg6
Vlg6YXY6dnN1bTRzaHMgJVZELCAlVkEsICVWQjpWZWN0b3IgU3VtIEFjcm9zcyBQYXJ0aWFsICgx
LzQpIFNpZ25lZCBIYWxmIFdvcmQgU2F0dXJhdGUKICAJaW50IGksIGosIHNhdCwgdGVtcHNhdDsK
ICAJc2lnbmVkNjQgdGVtcDsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChqID0gMDsgaiA8IDQ7IGor
KykgewogIAkgIHRlbXAgPSAoc2lnbmVkNjQpKHNpZ25lZDMyKSgqdkIpLndbal07CiAgCSAgZm9y
IChpID0gMDsgaSA8IDI7IGkrKykKICAJICAgIHRlbXAgKz0gKHNpZ25lZDY0KShzaWduZWQxNiko
KnZBKS5oW2krKGoqMildOwohIAkgIHZTdG1wLndbal0gPSBhbHRpdmVjX3NpZ25lZF9zYXR1cmF0
ZV8zMih0ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7CiAgCX0KKyAJKCp2Uykg
PSB2U3RtcDsKICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19JTlNOX1ZSX1ZTQ1IoVlNf
QklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAoqKioqKioqKioqKioqKioKKioq
IDIyODksMjMwMiAqKioqCiAgCWludCBpLCBqLCBzYXQsIHRlbXBzYXQ7CiAgCXNpZ25lZDY0IHV0
ZW1wOwogIAlzaWduZWQ2NCB0ZW1wOwogIAlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CiAgCSAg
dXRlbXAgPSAoc2lnbmVkNjQpKHVuc2lnbmVkMzIpKCp2Qikud1tqXTsKICAJICBmb3IgKGkgPSAw
OyBpIDwgNDsgaSsrKQogIAkgICAgdXRlbXAgKz0gKHNpZ25lZDY0KSh1bnNpZ25lZDE2KSgqdkEp
LmJbaSsoaio0KV07CiAgCSAgdGVtcCA9IHV0ZW1wOwohIAkgICgqdlMpLndbal0gPSBhbHRpdmVj
X3Vuc2lnbmVkX3NhdHVyYXRlXzMyKHRlbXAsICZ0ZW1wc2F0KTsKICAJICBzYXQgfD0gdGVtcHNh
dDsKICAJfQogIAlBTFRJVkVDX1NFVF9TQVQoc2F0KTsKICAJUFBDX0lOU05fVlJfVlNDUihWU19C
SVRNQVNLLCBWQV9CSVRNQVNLIHwgVkJfQklUTUFTSyk7CiAgCi0tLSAyMzY3LDIzODIgLS0tLQog
IAlpbnQgaSwgaiwgc2F0LCB0ZW1wc2F0OwogIAlzaWduZWQ2NCB1dGVtcDsKICAJc2lnbmVkNjQg
dGVtcDsKKyAJdnJlZyB2U3RtcDsKICAJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewogIAkgIHV0
ZW1wID0gKHNpZ25lZDY0KSh1bnNpZ25lZDMyKSgqdkIpLndbal07CiAgCSAgZm9yIChpID0gMDsg
aSA8IDQ7IGkrKykKICAJICAgIHV0ZW1wICs9IChzaWduZWQ2NCkodW5zaWduZWQxNikoKnZBKS5i
W2krKGoqNCldOwogIAkgIHRlbXAgPSB1dGVtcDsKISAJICB2U3RtcC53W2pdID0gYWx0aXZlY191
bnNpZ25lZF9zYXR1cmF0ZV8zMih0ZW1wLCAmdGVtcHNhdCk7CiAgCSAgc2F0IHw9IHRlbXBzYXQ7
CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJQUxUSVZFQ19TRVRfU0FUKHNhdCk7CiAgCVBQQ19J
TlNOX1ZSX1ZTQ1IoVlNfQklUTUFTSywgVkFfQklUTUFTSyB8IFZCX0JJVE1BU0spOwogIAoqKioq
KioqKioqKioqKioKKioqIDIzMDgsMjM1NCAqKioqCiAgMC40LDYuVlMsMTEuMCwxNi5WQiwyMS44
NDY6Vlg6YXY6dnVwa2hweCAlVkQsICVWQjpWZWN0b3IgVW5wYWNrIEhpZ2ggUGl4ZWwxNgogIAlp
bnQgaTsKICAJdW5zaWduZWQxNiBoOwogIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgCSAg
aCA9ICgqdkIpLmhbQVZfSElOREVYKGkpXTsKISAJICAoKnZTKS53W2ldID0gKChoICYgMHg4MDAw
KSA/IDB4ZmYwMDAwMDAgOiAwKQogIAkJICAgICB8ICgoaCAmIDB4N2MwMCkgPDwgNikKICAJCSAg
ICAgfCAoKGggJiAweDAzZTApIDw8IDMpCiAgCQkgICAgIHwgKChoICYgMHgwMDFmKSk7CiAgCX0K
ICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkJfQklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEu
MCwxNi5WQiwyMS41MjY6Vlg6YXY6dnVwa2hzYiAlVkQsICVWQjpWZWN0b3IgVW5wYWNrIEhpZ2gg
U2lnbmVkIEJ5dGUKICAJaW50IGk7CiAgCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiEgCSAgKCp2
UykuaFtBVl9ISU5ERVgoaSldID0gKHNpZ25lZDE2KShzaWduZWQ4KSgqdkIpLmJbQVZfQklOREVY
KGkpXTsKICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkJfQklUTUFTSyk7CiAgCiAgMC40LDYu
VlMsMTEuMCwxNi5WQiwyMS41OTA6Vlg6YXY6dnVwa2hzaCAlVkQsICVWQjpWZWN0b3IgVW5wYWNr
IEhpZ2ggU2lnbmVkIEhhbGYgV29yZAogIAlpbnQgaTsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkr
KykKISAJICAoKnZTKS53W2ldID0gKHNpZ25lZDMyKShzaWduZWQxNikoKnZCKS5oW0FWX0hJTkRF
WChpKV07CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZCX0JJVE1BU0spOwogIAogIDAuNCw2
LlZTLDExLjAsMTYuVkIsMjEuOTc0OlZYOmF2OnZ1cGtscHggJVZELCAlVkI6VmVjdG9yIFVucGFj
ayBMb3cgUGl4ZWwxNgogIAlpbnQgaTsKICAJdW5zaWduZWQxNiBoOwogIAlmb3IgKGkgPSAwOyBp
IDwgNDsgaSsrKSB7CiAgCSAgaCA9ICgqdkIpLmhbQVZfSElOREVYKGkgKyA0KV07CiEgCSAgKCp2
Uykud1tpXSA9ICgoaCAmIDB4ODAwMCkgPyAweGZmMDAwMDAwIDogMCkKICAJCSAgICAgfCAoKGgg
JiAweDdjMDApIDw8IDYpCiAgCQkgICAgIHwgKChoICYgMHgwM2UwKSA8PCAzKQogIAkJICAgICB8
ICgoaCAmIDB4MDAxZikpOwogIAl9CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZCX0JJVE1B
U0spOwogIAogIDAuNCw2LlZTLDExLjAsMTYuVkIsMjEuNjU0OlZYOmF2OnZ1cGtsc2IgJVZELCAl
VkI6VmVjdG9yIFVucGFjayBMb3cgU2lnbmVkIEJ5dGUKICAJaW50IGk7CiAgCWZvciAoaSA9IDA7
IGkgPCA4OyBpKyspCiEgCSAgKCp2UykuaFtBVl9ISU5ERVgoaSldID0gKHNpZ25lZDE2KShzaWdu
ZWQ4KSgqdkIpLmJbQVZfQklOREVYKGkgKyA4KV07CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ss
IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLjAsMTYuVkIsMjEuNzE4OlZYOmF2OnZ1cGts
c2ggJVZELCAlVkI6VmVjdG9yIFVucGFjayBMb3cgU2lnbmVkIEhhbGYgV29yZAogIAlpbnQgaTsK
ICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKISAJICAoKnZTKS53W2ldID0gKHNpZ25lZDMyKShz
aWduZWQxNikoKnZCKS5oW0FWX0hJTkRFWChpICsgNCldOwogIAlQUENfSU5TTl9WUihWU19CSVRN
QVNLLCBWQl9CSVRNQVNLKTsKLS0tIDIzODgsMjQ0NiAtLS0tCiAgMC40LDYuVlMsMTEuMCwxNi5W
QiwyMS44NDY6Vlg6YXY6dnVwa2hweCAlVkQsICVWQjpWZWN0b3IgVW5wYWNrIEhpZ2ggUGl4ZWwx
NgogIAlpbnQgaTsKICAJdW5zaWduZWQxNiBoOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkgPSAw
OyBpIDwgNDsgaSsrKSB7CiAgCSAgaCA9ICgqdkIpLmhbQVZfSElOREVYKGkpXTsKISAJICB2U3Rt
cC53W2ldID0gKChoICYgMHg4MDAwKSA/IDB4ZmYwMDAwMDAgOiAwKQogIAkJICAgICB8ICgoaCAm
IDB4N2MwMCkgPDwgNikKICAJCSAgICAgfCAoKGggJiAweDAzZTApIDw8IDMpCiAgCQkgICAgIHwg
KChoICYgMHgwMDFmKSk7CiAgCX0KKyAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNf
QklUTUFTSywgVkJfQklUTUFTSyk7CiAgCiAgMC40LDYuVlMsMTEuMCwxNi5WQiwyMS41MjY6Vlg6
YXY6dnVwa2hzYiAlVkQsICVWQjpWZWN0b3IgVW5wYWNrIEhpZ2ggU2lnbmVkIEJ5dGUKICAJaW50
IGk7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiEgCSAgdlN0bXAu
aFtBVl9ISU5ERVgoaSldID0gKHNpZ25lZDE2KShzaWduZWQ4KSgqdkIpLmJbQVZfQklOREVYKGkp
XTsKISAJKCp2UykgPSB2U3RtcDsKICAJUFBDX0lOU05fVlIoVlNfQklUTUFTSywgVkJfQklUTUFT
Syk7CiAgCiAgMC40LDYuVlMsMTEuMCwxNi5WQiwyMS41OTA6Vlg6YXY6dnVwa2hzaCAlVkQsICVW
QjpWZWN0b3IgVW5wYWNrIEhpZ2ggU2lnbmVkIEhhbGYgV29yZAogIAlpbnQgaTsKKyAJdnJlZyB2
U3RtcDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKISAJICB2U3RtcC53W2ldID0gKHNpZ25l
ZDMyKShzaWduZWQxNikoKnZCKS5oW0FWX0hJTkRFWChpKV07CiEgCSgqdlMpID0gdlN0bXA7CiAg
CVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ssIFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLjAs
MTYuVkIsMjEuOTc0OlZYOmF2OnZ1cGtscHggJVZELCAlVkI6VmVjdG9yIFVucGFjayBMb3cgUGl4
ZWwxNgogIAlpbnQgaTsKICAJdW5zaWduZWQxNiBoOworIAl2cmVnIHZTdG1wOwogIAlmb3IgKGkg
PSAwOyBpIDwgNDsgaSsrKSB7CiAgCSAgaCA9ICgqdkIpLmhbQVZfSElOREVYKGkgKyA0KV07CiEg
CSAgdlN0bXAud1tpXSA9ICgoaCAmIDB4ODAwMCkgPyAweGZmMDAwMDAwIDogMCkKICAJCSAgICAg
fCAoKGggJiAweDdjMDApIDw8IDYpCiAgCQkgICAgIHwgKChoICYgMHgwM2UwKSA8PCAzKQogIAkJ
ICAgICB8ICgoaCAmIDB4MDAxZikpOwogIAl9CisgCSgqdlMpID0gdlN0bXA7CiAgCVBQQ19JTlNO
X1ZSKFZTX0JJVE1BU0ssIFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLjAsMTYuVkIsMjEu
NjU0OlZYOmF2OnZ1cGtsc2IgJVZELCAlVkI6VmVjdG9yIFVucGFjayBMb3cgU2lnbmVkIEJ5dGUK
ICAJaW50IGk7CisgCXZyZWcgdlN0bXA7CiAgCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiEgCSAg
dlN0bXAuaFtBVl9ISU5ERVgoaSldID0gKHNpZ25lZDE2KShzaWduZWQ4KSgqdkIpLmJbQVZfQklO
REVYKGkgKyA4KV07CiEgCSgqdlMpID0gdlN0bXA7CiAgCVBQQ19JTlNOX1ZSKFZTX0JJVE1BU0ss
IFZCX0JJVE1BU0spOwogIAogIDAuNCw2LlZTLDExLjAsMTYuVkIsMjEuNzE4OlZYOmF2OnZ1cGts
c2ggJVZELCAlVkI6VmVjdG9yIFVucGFjayBMb3cgU2lnbmVkIEhhbGYgV29yZAogIAlpbnQgaTsK
KyAJdnJlZyB2U3RtcDsKICAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKISAJICB2U3RtcC53W2ld
ID0gKHNpZ25lZDMyKShzaWduZWQxNikoKnZCKS5oW0FWX0hJTkRFWChpICsgNCldOwohIAkoKnZT
KSA9IHZTdG1wOwogIAlQUENfSU5TTl9WUihWU19CSVRNQVNLLCBWQl9CSVRNQVNLKTsK


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