[PATCH] 2.0.34: new time.c code

Andrew Derrick Balsa (andrebalsa@altern.org)
Sun, 12 Jul 1998 12:54:25 +0200


--Boundary-=_XrJmOWFrxsjyBldbEFSArCBynEcd
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

The code itself:
(drop-in replacement for time.c in 2.0.34)
---------------------
Andrew D. Balsa
andrebalsa@altern.org

--Boundary-=_XrJmOWFrxsjyBldbEFSArCBynEcd
Content-Type: text/x-c;
name="time.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="time.c"

LyoKICogIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCiAqCiAqICBDb3B5cmlnaHQgKEMp
IDE5OTEsIDE5OTIsIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAqCiAqIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgUEMtc3BlY2lmaWMgdGltZSBoYW5kbGluZyBkZXRhaWxzOgogKiByZWFkaW5nIHRoZSBS
VEMgYXQgYm9vdHVwLCBldGMuLgogKiAxOTk0LTA3LTAyICAgQWxhbiBNb2RyYQogKgkJZml4ZWQg
c2V0X3J0Y19tbXNzLCBmaXhlZCB0aW1lLnllYXIgZm9yID49IDIwMDAsIG5ldyBta3RpbWUKICog
MTk5NS0wMy0yNiAgIE1hcmt1cyBLdWhuCiAqICAgICAgCWZpeGVkIDUwMCBtcyBidWcgYXQgY2Fs
bCB0byBzZXRfcnRjX21tc3MsIGZpeGVkIERTMTI4ODcKICogICAgICAJcHJlY2lzaW9uIENNT1Mg
Y2xvY2sgdXBkYXRlCiAqIDE5OTYtMDUtMDMgICBJbmdvIE1vbG5hcgogKiAgICAgIAlmaXhlZCB0
aW1lIHdhcnBzIGluIGRvX1tzbG93fGZhc3RdX2dldHRpbWVvZmZzZXQoKQogKiAxOTk3LTA5LTEw
CVVwZGF0ZWQgTlRQIGNvZGUgYWNjb3JkaW5nIHRvIHRlY2huaWNhbCBtZW1vcmFuZHVtIEphbiAn
OTYKICoJCSJBIEtlcm5lbCBNb2RlbCBmb3IgUHJlY2lzaW9uIFRpbWVrZWVwaW5nIiBieSBEYXZl
IE1pbGxzCiAqIDE5OTgtMDUtMjMJQy4gU2NvdHQgQW5hbmlhbiAmIEFuZHJldyBELiBCYWxzYQog
KgkJTW9yZSByb2J1c3QgZG9fZmFzdF9nZXR0aW1lb2Zmc2V0KCkgYWxnb3JpdGhtIGltcGxlbWVu
dGVkCiAqCQkod29ya3Mgd2l0aCBBUE0sIEN5cml4IDZ4ODZNWCBhbmQgQ2VudGF1ciBDNiksCiAq
CQlkcmlmdC1wcm9vZiBwcmVjaXNpb24gVFNDIGNhbGlicmF0aW9uIG9uIGJvb3QuCiAqLwoKI2lu
Y2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgojaW5jbHVkZSA8
bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgojaW5jbHVkZSA8bGludXgv
c3RyaW5nLmg+CiNpbmNsdWRlIDxsaW51eC9tbS5oPgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0
Lmg+CiNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgoKI2lu
Y2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiNpbmNsdWRlIDxhc20vaW8uaD4KI2luY2x1ZGUgPGFzbS9p
cnEuaD4KI2luY2x1ZGUgPGFzbS9kZWxheS5oPgoKI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRj
Lmg+CiNpbmNsdWRlIDxsaW51eC90aW1leC5oPgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Cgpl
eHRlcm4gaW50IHNldHVwX3g4Nl9pcnEoaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOwoKc3RhdGlj
IHVuc2lnbmVkIGxvbmcgY3B1X2h6OwkvKiBEZXRlY3RlZCBhcyB3ZSBjYWxpYnJhdGUgdGhlIFRT
QyAqLwoKc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF90c2NfbG93OyAvKiBsc2IgMzIgYml0cyBv
ZiBUaW1lIFN0YW1wIENvdW50ZXIgKi8KCi8qIENhY2hlZCAqbXVsdGlwbGllciogdG8gY29udmVy
dCBUU0MgY291bnRzIHRvIG1pY3Jvc2Vjb25kcy4KICogKHNlZSB0aGUgZXF1YXRpb24gYmVsb3cp
LgogKiBFcXVhbCB0byAyXjMyICogKDEgLyAoY2xvY2tzIHBlciB1c2VjKSApLgogKiBJbml0aWFs
aXplZCBpbiB0aW1lX2luaXQuCiAqLwpzdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2dldHRpbWVv
ZmZzZXRfcXVvdGllbnQ9MDsKCnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX2Zhc3RfZ2V0dGltZW9m
ZnNldCh2b2lkKQp7CglyZWdpc3RlciB1bnNpZ25lZCBsb25nIGVheCBhc20oImF4Iik7CglyZWdp
c3RlciB1bnNpZ25lZCBsb25nIGVkeCBhc20oImR4Iik7CgoJLyogUmVhZCB0aGUgVGltZSBTdGFt
cCBDb3VudGVyICovCglfX2FzbV9fKCIuYnl0ZSAweDBmLDB4MzEiCgkJOiI9YSIgKGVheCksICI9
ZCIgKGVkeCkpOwoKCS8qIC4uIHJlbGF0aXZlIHRvIHByZXZpb3VzIGppZmZ5ICgzMiBiaXRzIGlz
IGVub3VnaCkgKi8KCWVkeCA9IDA7CgllYXggLT0gbGFzdF90c2NfbG93OwkvKiB0c2NfbG93IGRl
bHRhICovCgoJLyoKICAgICAgICAgKiBUaW1lIG9mZnNldCA9ICh0c2NfbG93IGRlbHRhKSAqIGZh
c3RfZ2V0dGltZW9mZnNldF9xdW90aWVudC4KICAgICAgICAgKiAgICAgICAgICAgICA9ICh0c2Nf
bG93IGRlbHRhKSAvIChjbG9ja3NfcGVyX3VzZWMpCiAgICAgICAgICogICAgICAgICAgICAgPSAo
dHNjX2xvdyBkZWx0YSkgLyAoY2xvY2tzX3Blcl9qaWZmeSAvIHVzZWNzX3Blcl9qaWZmeSkKCSAq
CgkgKiBVc2luZyBhIG11bGwgaW5zdGVhZCBvZiBhIGRpdmwgc2F2ZXMgdXAgdG8gMzEgY2xvY2sg
Y3ljbGVzCgkgKiBpbiB0aGUgY3JpdGljYWwgcGF0aC4KICAgICAgICAgKi8KCglfX2FzbV9fKCJt
dWxsICUyIgoJCToiPWEiIChlYXgpLCAiPWQiIChlZHgpCgkJOiJyIiAoZmFzdF9nZXR0aW1lb2Zm
c2V0X3F1b3RpZW50KSwKCQkgIjAiIChlYXgpLCAiMSIgKGVkeCkpOwoKCS8qCiAJICogRHVlIHRv
IHJvdW5kaW5nIGVycm9ycyAoYW5kIGppZmZpZXMgaW5jb25zaXN0ZW5jaWVzKSwKCSAqIHdlIG5l
ZWQgdG8gY2hlY2sgdGhlIHJlc3VsdCBzbyB0aGF0IHdlJ2xsIGdldCBhIHRpbWVyCgkgKiB0aGF0
IGlzIG1vbm90b25pYy4KCSAqCgkgKiBXZSBoYXZlIGEgcHJvYmxlbSBoZXJlLCBiZWNhdXNlIHRo
aXMgc2hvdWxkIF9uZXZlcl8KCSAqIGhhcHBlbjogd2UgcmVhZCB0aGUgVFNDIGF0IGVhY2ggdGlt
ZXIgaW50ZXJydXB0IGluCgkgKiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKHNlZSBwZW50aXVtX3Rp
bWVyX2ludGVycnVwdCBiZWxvdyksCgkgKiBub3QgaW4gdGhlIGJvdHRvbSBoYWxmIGhhbmRsZXIu
CgkgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IHNvbWUgZHJpdmVycyBtYXkgZGlzYWJsZSBpbnRlcnJ1
cHRzLAoJICogdGhlbiBkbyBhbGwgdGhlaXIgSS9PIHN0dWZmIHdoaWNoIHRha2VzIHNvbWUgdGlt
ZSwKCSAqIGFuZCB0aGVuIGNhbGwgZ2V0dGltZW9mZGF5KCkgd2l0aG91dCByZXN0b3JpbmcgdGhl
IAoJICogaW50ZXJydXB0cyBzdGF0dXMgYWdhaW4uCgkgKi8KCWlmIChlZHggPj0gMTAwMDAyMC9I
WikKCQllZHggPSAxMDAwMDIwL0haLTE7CgkvKiBBdCB0aGlzIHBvaW50IHdlIGhvcGUgdGhhdCBn
ZXR0aW1lb2ZkYXkoKQoJICogaXNuJ3QgY2FsbGVkIGFnYWluIGJlZm9yZSB0aGUgbmV4dAoJICog
dGltZXIgaW50ZXJydXB0IHVwZGF0ZXMgbGFzdF90aW1lcl9jYwoJICogKHdlIHdvdWxkIGdldCB0
d2ljZSB0aGUgc2FtZSB0aW1lc3RhbXApLgoJICovCgoJcmV0dXJuIGVkeDsgLyogb3VyIHRpbWUg
b2Zmc2V0IGluIG1pY3Jvc2Vjb25kcyAqLwp9CgovKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2Fs
bGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAKICogSXQgd2FzIGluc3BpcmVkIGJ5IFN0ZXZl
IE1jQ2FubmUncyBtaWNyb3RpbWUtaTM4NiBmb3IgQlNELiAgLS0ganJzCiAqIAogKiBIb3dldmVy
LCB0aGUgcGMtYXVkaW8gc3BlYWtlciBkcml2ZXIgY2hhbmdlcyB0aGUgZGl2aXNvciBzbyB0aGF0
CiAqIGl0IGdldHMgaW50ZXJydXB0ZWQgcmF0aGVyIG1vcmUgb2Z0ZW4gLSBpdCBsb2FkcyA2NCBp
bnRvIHRoZQogKiBjb3VudGVyIHJhdGhlciB0aGFuIDExOTMyISBUaGlzIGhhcyBhbiBhZHZlcnNl
IGltcGFjdCBvbgogKiBkb19nZXR0aW1lb2Zmc2V0KCkgLS0gaXQgc3RvcHMgd29ya2luZyEgV2hh
dCBpcyBhbHNvIG5vdAogKiBnb29kIGlzIHRoYXQgdGhlIGludGVydmFsIHRoYXQgb3VyIHRpbWVy
IGZ1bmN0aW9uIGdldHMgY2FsbGVkCiAqIGlzIG5vIGxvbmdlciAxMC4wMDAyIG1zLCBidXQgOS45
NzY3IG1zLiBUbyBnZXQgYXJvdW5kIHRoaXMKICogd291bGQgcmVxdWlyZSB1c2luZyBhIGRpZmZl
cmVudCB0aW1pbmcgc291cmNlLiBNYXliZSBzb21lb25lCiAqIGNvdWxkIHVzZSB0aGUgUlRDIC0g
SSBrbm93IHRoYXQgdGhpcyBjYW4gaW50ZXJydXB0IGF0IGZyZXF1ZW5jaWVzCiAqIHJhbmdpbmcg
ZnJvbSA4MTkySHogdG8gMkh6LiBJZiBJIGhhZCB0aGUgZW5lcmd5LCBJJ2Qgc29tZWhvdyBmaXgK
ICogaXQgc28gdGhhdCBhdCBzdGFydHVwLCB0aGUgdGltZXIgY29kZSBpbiBzY2hlZC5jIHdvdWxk
IHNlbGVjdAogKiB1c2luZyBlaXRoZXIgdGhlIFJUQyBvciB0aGUgODI1MyB0aW1lci4gVGhlIGRl
Y2lzaW9uIHdvdWxkIGJlCiAqIGJhc2VkIG9uIHdoZXRoZXIgdGhlcmUgd2FzIGFueSBvdGhlciBk
ZXZpY2UgYXJvdW5kIHRoYXQgbmVlZGVkCiAqIHRvIHRyYW1wbGUgb24gdGhlIDgyNTMuIEknZCBz
ZXQgdXAgdGhlIFJUQyB0byBpbnRlcnJ1cHQgYXQgMTAyNCBIeiwKICogYW5kIHRoZW4gZG8gc29t
ZSBqaWdnZXJ5IHRvIGhhdmUgYSB2ZXJzaW9uIG9mIGRvX3RpbWVyIHRoYXQgCiAqIGFkdmFuY2Vk
IHRoZSBjbG9jayBieSAxLzEwMjQgcy4gRXZlcnkgdGltZSB0aGF0IHJlYWNoZWQgb3ZlciAxLzEw
MAogKiBvZiBhIHNlY29uZCwgdGhlbiBkbyBhbGwgdGhlIG9sZCBjb2RlLiBJZiB0aGUgdGltZSB3
YXMga2VwdCBjb3JyZWN0CiAqIHRoZW4gZG9fZ2V0dGltZW9mZnNldCBjb3VsZCBqdXN0IHJldHVy
biAwIC0gdGhlcmUgaXMgbm8gbG93IG9yZGVyCiAqIGRpdmlkZXIgdGhhdCBjYW4gYmUgYWNjZXNz
ZWQuCiAqCiAqIElkZWFsbHksIHlvdSB3b3VsZCBiZSBhYmxlIHRvIHVzZSB0aGUgUlRDIGZvciB0
aGUgc3BlYWtlciBkcml2ZXIsCiAqIGJ1dCBpdCBhcHBlYXJzIHRoYXQgdGhlIHNwZWFrZXIgZHJp
dmVyIHJlYWxseSBuZWVkcyBpbnRlcnJ1cHQgbW9yZQogKiBvZnRlbiB0aGFuIGV2ZXJ5IDEyMCB1
cyBvciBzby4KICoKICogQW55d2F5LCB0aGlzIG5lZWRzIG1vcmUgdGhvdWdodC4uLi4JCXBqc2cg
KDE5OTMtMDgtMjgpCiAqIAogKiBJZiB5b3UgYXJlIHJlYWxseSB0aGF0IGludGVyZXN0ZWQsIHlv
dSBzaG91bGQgYmUgcmVhZGluZwogKiBjb21wLnByb3RvY29scy50aW1lLm50cCEKICovCgojZGVm
aW5lIFRJQ0tfU0laRSB0aWNrCgpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zbG93X2dldHRpbWVv
ZmZzZXQodm9pZCkKewoJaW50IGNvdW50OwoJc3RhdGljIGludCBjb3VudF9wID0gMDsKCXVuc2ln
bmVkIGxvbmcgb2Zmc2V0ID0gMDsKCXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfcCA9IDA7
CgoJLyoKCSAqIGNhY2hlIHZvbGF0aWxlIGppZmZpZXMgdGVtcG9yYXJpbHk7IHdlIGhhdmUgSVJR
cyB0dXJuZWQgb2ZmLiAKCSAqLwoJdW5zaWduZWQgbG9uZyBqaWZmaWVzX3Q7CgoJLyogdGltZXIg
Y291bnQgbWF5IHVuZGVyZmxvdyByaWdodCBoZXJlICovCglvdXRiX3AoMHgwMCwgMHg0Myk7CS8q
IGxhdGNoIHRoZSBjb3VudCBBU0FQICovCgljb3VudCA9IGluYl9wKDB4NDApOwkvKiByZWFkIHRo
ZSBsYXRjaGVkIGNvdW50ICovCgljb3VudCB8PSBpbmIoMHg0MCkgPDwgODsKCiAJamlmZmllc190
ID0gamlmZmllczsKCgkvKgoJICogYXZvaWRpbmcgdGltZXIgaW5jb25zaXN0ZW5jaWVzICh0aGV5
IGFyZSByYXJlLCBidXQgdGhleSBoYXBwZW4pLi4uCgkgKiB0aGVyZSBhcmUgdGhyZWUga2luZHMg
b2YgcHJvYmxlbXMgdGhhdCBtdXN0IGJlIGF2b2lkZWQgaGVyZToKCSAqICAxLiB0aGUgdGltZXIg
Y291bnRlciB1bmRlcmZsb3dzCgkgKiAgMi4gaGFyZHdhcmUgcHJvYmxlbSB3aXRoIHRoZSB0aW1l
ciwgbm90IGdpdmluZyB1cyBjb250aW51b3VzIHRpbWUsCgkgKiAgICAgdGhlIGNvdW50ZXIgZG9l
cyBzbWFsbCAianVtcHMiIHVwd2FyZHMgb24gc29tZSBQZW50aXVtIHN5c3RlbXMsCgkgKiAgICAg
dGh1cyBjYXVzZXMgdGltZSB3YXJwcwoJICogIDMuIHdlIGFyZSBhZnRlciB0aGUgdGltZXIgaW50
ZXJydXB0LCBidXQgdGhlIGJvdHRvbSBoYWxmIGhhbmRsZXIKCSAqICAgICBoYXNuJ3QgZXhlY3V0
ZWQgeWV0LgoJICovCglpZiggY291bnQgPiBjb3VudF9wICkgewoJCWlmKCBqaWZmaWVzX3QgPT0g
amlmZmllc19wICkgewoJCQlpZiggY291bnQgPiBMQVRDSC1MQVRDSC8xMDAgKQoJCQkJb2Zmc2V0
ID0gVElDS19TSVpFOwoJCQllbHNlCgkJCQkvKgoJCQkJICogYXJnaCwgdGhlIHRpbWVyIGlzIGJ1
Z2dpbmcgd2UgY2FudCBkbyBub3RoaW5nIAoJCQkJICogYnV0IHRvIGdpdmUgdGhlIHByZXZpb3Vz
IGNsb2NrIHZhbHVlLgoJCQkJICovCgkJCQljb3VudCA9IGNvdW50X3A7CgkJfSBlbHNlIHsKCQkJ
aWYoIHRlc3RfYml0KFRJTUVSX0JILCAmYmhfYWN0aXZlKSApIHsKCQkJCS8qCgkJCQkgKiB3ZSBo
YXZlIGRldGVjdGVkIGEgY291bnRlciB1bmRlcmZsb3cuCgkJCSAJICovCgkJCQlvZmZzZXQgPSBU
SUNLX1NJWkU7CgkJCQljb3VudF9wID0gY291bnQ7CQkKCQkJfSBlbHNlIHsKCQkJCWNvdW50X3Ag
PSBjb3VudDsKCQkJCWppZmZpZXNfcCA9IGppZmZpZXNfdDsKCQkJfQoJCX0KCX0gZWxzZSB7CgkJ
Y291bnRfcCA9IGNvdW50OwoJCWppZmZpZXNfcCA9IGppZmZpZXNfdDsKIAl9CgoKCWNvdW50ID0g
KChMQVRDSC0xKSAtIGNvdW50KSAqIFRJQ0tfU0laRTsKCWNvdW50ID0gKGNvdW50ICsgTEFUQ0gv
MikgLyBMQVRDSDsKCglyZXR1cm4gb2Zmc2V0ICsgY291bnQ7Cn0KCnN0YXRpYyB1bnNpZ25lZCBs
b25nICgqZG9fZ2V0dGltZW9mZnNldCkodm9pZCkgPSBkb19zbG93X2dldHRpbWVvZmZzZXQ7Cgov
KgogKiBUaGlzIHZlcnNpb24gb2YgZ2V0dGltZW9mZGF5IGhhcyBtaWNyb3NlY29uZCByZXNvbHV0
aW9uCiAqIGFuZCBiZXR0ZXIgdGhhbiBtaWNyb3NlY29uZCBwcmVjaXNpb24gb24gZmFzdCB4ODYg
bWFjaGluZXMgd2l0aCBUU0MuCiAqLwp2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZh
bCAqdHYpCnsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJc2F2ZV9mbGFncyhmbGFncyk7CgljbGko
KTsKCSp0diA9IHh0aW1lOwoJdHYtPnR2X3VzZWMgKz0gZG9fZ2V0dGltZW9mZnNldCgpOwoJaWYg
KHR2LT50dl91c2VjID49IDEwMDAwMDApIHsKCQl0di0+dHZfdXNlYyAtPSAxMDAwMDAwOwoJCXR2
LT50dl9zZWMrKzsKCX0KCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwp9Cgp2b2lkIGRvX3NldHRpbWVv
ZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCnsKCWNsaSgpOwoJLyogVGhpcyBpcyByZXZvbHRpbmcu
IFdlIG5lZWQgdG8gc2V0IHRoZSB4dGltZS50dl91c2VjCgkgKiBjb3JyZWN0bHkuIEhvd2V2ZXIs
IHRoZSB2YWx1ZSBpbiB0aGlzIGxvY2F0aW9uIGlzCgkgKiBpcyB2YWx1ZSBhdCB0aGUgbGFzdCB0
aWNrLgoJICogRGlzY292ZXIgd2hhdCBjb3JyZWN0aW9uIGdldHRpbWVvZmRheQoJICogd291bGQg
aGF2ZSBkb25lLCBhbmQgdGhlbiB1bmRvIGl0IQoJICovCgl0di0+dHZfdXNlYyAtPSBkb19nZXR0
aW1lb2Zmc2V0KCk7CgoJaWYgKHR2LT50dl91c2VjIDwgMCkgewoJCXR2LT50dl91c2VjICs9IDEw
MDAwMDA7CgkJdHYtPnR2X3NlYy0tOwoJfQoKCXh0aW1lID0gKnR2OwoJdGltZV9hZGp1c3QgPSAw
OwkJLyogc3RvcCBhY3RpdmUgYWRqdGltZSgpICovCgl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5D
OwoJdGltZV9zdGF0ZSA9IFRJTUVfRVJST1I7CS8qIHAuIDI0LCAoYSkgKi8KCXRpbWVfbWF4ZXJy
b3IgPSBOVFBfUEhBU0VfTElNSVQ7Cgl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwoJ
c3RpKCk7Cn0KCgovKgogKiBJbiBvcmRlciB0byBzZXQgdGhlIENNT1MgY2xvY2sgcHJlY2lzZWx5
LCBzZXRfcnRjX21tc3MgaGFzIHRvIGJlCiAqIGNhbGxlZCA1MDAgbXMgYWZ0ZXIgdGhlIHNlY29u
ZCBub3d0aW1lIGhhcyBzdGFydGVkLCBiZWNhdXNlIHdoZW4KICogbm93dGltZSBpcyB3cml0dGVu
IGludG8gdGhlIHJlZ2lzdGVycyBvZiB0aGUgQ01PUyBjbG9jaywgaXQgd2lsbAogKiBqdW1wIHRv
IHRoZSBuZXh0IHNlY29uZCBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBDaGVjayB0aGUgTW90b3Jv
bGEKICogTUMxNDY4MThBIG9yIERhbGxhcyBEUzEyODg3IGRhdGEgc2hlZXQgZm9yIGRldGFpbHMu
CiAqCiAqIEJVRzogVGhpcyByb3V0aW5lIGRvZXMgbm90IGhhbmRsZSBob3VyIG92ZXJmbG93IHBy
b3Blcmx5OyBpdCBqdXN0CiAqICAgICAgc2V0cyB0aGUgbWludXRlcy4gVXN1YWxseSB5b3UnbGwg
b25seSBub3RpY2UgdGhhdCBhZnRlciByZWJvb3QhCiAqLwpzdGF0aWMgaW50IHNldF9ydGNfbW1z
cyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCnsKCWludCByZXR2YWwgPSAwOwoJaW50IHJlYWxfc2Vj
b25kcywgcmVhbF9taW51dGVzLCBjbW9zX21pbnV0ZXM7Cgl1bnNpZ25lZCBjaGFyIHNhdmVfY29u
dHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKCglzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NP
TlRST0wpOyAvKiB0ZWxsIHRoZSBjbG9jayBpdCdzIGJlaW5nIHNldCAqLwoJQ01PU19XUklURSgo
c2F2ZV9jb250cm9sfFJUQ19TRVQpLCBSVENfQ09OVFJPTCk7CgoJc2F2ZV9mcmVxX3NlbGVjdCA9
IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOyAvKiBzdG9wIGFuZCByZXNldCBwcmVzY2FsZXIg
Ki8KCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3R8UlRDX0RJVl9SRVNFVDIpLCBSVENfRlJF
UV9TRUxFQ1QpOwoKCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CglpZiAo
IShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKCQlCQ0Rf
VE9fQklOKGNtb3NfbWludXRlcyk7CgoJLyoKCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5n
IG1pbnV0ZXMgYW5kIHNlY29uZHMsCgkgKiBkb24ndCBpbnRlcmZlcmUgd2l0aCBob3VyIG92ZXJm
bG93LiBUaGlzIGF2b2lkcwoJICogbWVzc2luZyB3aXRoIHVua25vd24gdGltZSB6b25lcyBidXQg
cmVxdWlyZXMgeW91cgoJICogUlRDIG5vdCB0byBiZSBvZmYgYnkgbW9yZSB0aGFuIDE1IG1pbnV0
ZXMKCSAqLwoJcmVhbF9zZWNvbmRzID0gbm93dGltZSAlIDYwOwoJcmVhbF9taW51dGVzID0gbm93
dGltZSAvIDYwOwoJaWYgKCgoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgKyAxNSkv
MzApICYgMSkKCQlyZWFsX21pbnV0ZXMgKz0gMzA7CQkvKiBjb3JyZWN0IGZvciBoYWxmIGhvdXIg
dGltZSB6b25lICovCglyZWFsX21pbnV0ZXMgJT0gNjA7CgoJaWYgKGFicyhyZWFsX21pbnV0ZXMg
LSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklO
QVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewoJCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7CgkJ
CUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKCQl9CgkJQ01PU19XUklURShyZWFsX3NlY29uZHMs
UlRDX1NFQ09ORFMpOwoJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKCX0g
ZWxzZSB7CgkJcHJpbnRrKEtFUk5fV0FSTklORwoJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4n
dCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21p
bnV0ZXMpOwoJCXJldHZhbCA9IC0xOwoJfQoKCS8qIFRoZSBmb2xsb3dpbmcgZmxhZ3MgaGF2ZSB0
byBiZSByZWxlYXNlZCBleGFjdGx5IGluIHRoaXMgb3JkZXIsCgkgKiBvdGhlcndpc2UgdGhlIERT
MTI4ODcgKHBvcHVsYXIgTUMxNDY4MThBIGNsb25lIHdpdGggaW50ZWdyYXRlZAoJICogYmF0dGVy
eSBhbmQgcXVhcnR6KSB3aWxsIG5vdCByZXNldCB0aGUgb3NjaWxsYXRvciBhbmQgd2lsbCBub3QK
CSAqIHVwZGF0ZSBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBZb3Ugd29uJ3QgZmluZCB0aGlzIG1l
bnRpb25lZCBpbgoJICogdGhlIERhbGxhcyBTZW1pY29uZHVjdG9yIGRhdGEgc2hlZXRzLCBidXQg
d2hvIGJlbGlldmVzIGRhdGEKCSAqIHNoZWV0cyBhbnl3YXkgLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLS0gTWFya3VzIEt1aG4KCSAqLwoJQ01PU19XUklURShzYXZlX2NvbnRyb2wsIFJU
Q19DT05UUk9MKTsKCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNU
KTsKCglyZXR1cm4gcmV0dmFsOwp9CgovKiBsYXN0IHRpbWUgdGhlIGNtb3MgY2xvY2sgZ290IHVw
ZGF0ZWQgKi8Kc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlID0gMDsKCi8qCiAqIHRpbWVyX2lu
dGVycnVwdCgpIG5lZWRzIHRvIGtlZXAgdXAgdGhlIHJlYWwtdGltZSBjbG9jaywKICogYXMgd2Vs
bCBhcyBjYWxsIHRoZSAiZG9fdGltZXIoKSIgcm91dGluZSBldmVyeSBjbG9ja3RpY2sKICovCnN0
YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBz
dHJ1Y3QgcHRfcmVncyAqcmVncykKewoJZG9fdGltZXIocmVncyk7CgoJLyoKCSAqIElmIHdlIGhh
dmUgYW4gZXh0ZXJuYWxseSBzeW5jaHJvbml6ZWQgTGludXggY2xvY2ssIHRoZW4gdXBkYXRlCgkg
KiBDTU9TIGNsb2NrIGFjY29yZGluZ2x5IGV2ZXJ5IH4xMSBtaW51dGVzLiBTZXRfcnRjX21tc3Mo
KSBoYXMgdG8gYmUKCSAqIGNhbGxlZCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byA1MDAgbXMgYmVm
b3JlIHRoZSBuZXcgc2Vjb25kIHN0YXJ0cy4KCSAqLwoJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9V
TlNZTkMpID09IDAgJiYKCSAgICB4dGltZS50dl9zZWMgPiBsYXN0X3J0Y191cGRhdGUgKyA2NjAg
JiYKCSAgICB4dGltZS50dl91c2VjID4gNTAwMDAwIC0gKHRpY2sgPj4gMSkgJiYKCSAgICB4dGlt
ZS50dl91c2VjIDwgNTAwMDAwICsgKHRpY2sgPj4gMSkpCgkgIGlmIChzZXRfcnRjX21tc3MoeHRp
bWUudHZfc2VjKSA9PSAwKQoJICAgIGxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYzsKCSAg
ZWxzZQoJICAgIGxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYyAtIDYwMDsgLyogZG8gaXQg
YWdhaW4gaW4gNjAgcyAqLwoJLyogQXMgd2UgcmV0dXJuIHRvIHVzZXIgbW9kZSBmaXJlIG9mZiB0
aGUgb3RoZXIgQ1BVIHNjaGVkdWxlcnMuLiB0aGlzIGlzIAoJICAgYmFzaWNhbGx5IGJlY2F1c2Ug
d2UgZG9uJ3QgeWV0IHNoYXJlIElSUSdzIGFyb3VuZC4gVGhpcyBtZXNzYWdlIGlzCgkgICByaWdn
ZWQgdG8gYmUgc2FmZSBvbiB0aGUgMzg2IC0gYmFzaWNhbGx5IGl0J3MgYSBoYWNrLCBzbyBkb24n
dCBsb29rCgkgICBjbG9zZWx5IGZvciBub3cuLiAqLwoJLypzbXBfbWVzc2FnZV9wYXNzKE1TR19B
TExfQlVUX1NFTEYsIE1TR19SRVNDSEVEVUxFLCAwTCwgMCk7ICovCgkgICAgCn0KCi8qCiAqIFRo
aXMgaXMgdGhlIHNhbWUgYXMgdGhlIGFib3ZlLCBleGNlcHQgd2UgX2Fsc29fIHNhdmUgdGhlIGN1
cnJlbnQKICogVGltZSBTdGFtcCBDb3VudGVyIHZhbHVlIGF0IHRoZSB0aW1lIG9mIHRoZSB0aW1l
ciBpbnRlcnJ1cHQsIHNvIHRoYXQKICogd2UgbGF0ZXIgb24gY2FuIGVzdGltYXRlIHRoZSB0aW1l
IG9mIGRheSBtb3JlIGV4YWN0bHkuCiAqLwpzdGF0aWMgdm9pZCBwZW50aXVtX3RpbWVyX2ludGVy
cnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7CglyZWdp
c3RlciB1bnNpZ25lZCBsb25nIGVkeCBhc20oImR4Iik7CgoJLyogcmVhZCBQZW50aXVtIGN5Y2xl
IGNvdW50ZXIgKi8KCV9fYXNtX18oIi5ieXRlIDB4MGYsMHgzMSIKCQk6Ij1hIiAobGFzdF90c2Nf
bG93KSwKCQkgIj1kIiAoZWR4KSk7Cgl0aW1lcl9pbnRlcnJ1cHQoaXJxLCBOVUxMLCByZWdzKTsK
fQoKLyogQ29udmVydHMgR3JlZ29yaWFuIGRhdGUgdG8gc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAx
IDAwOjAwOjAwLgogKiBBc3N1bWVzIGlucHV0IGluIG5vcm1hbCBkYXRlIGZvcm1hdCwgaS5lLiAx
OTgwLTEyLTMxIDIzOjU5OjU5CiAqID0+IHllYXI9MTk4MCwgbW9uPTEyLCBkYXk9MzEsIGhvdXI9
MjMsIG1pbj01OSwgc2VjPTU5LgogKgogKiBbRm9yIHRoZSBKdWxpYW4gY2FsZW5kYXIgKHdoaWNo
IHdhcyB1c2VkIGluIFJ1c3NpYSBiZWZvcmUgMTkxNywKICogQnJpdGFpbiAmIGNvbG9uaWVzIGJl
Zm9yZSAxNzUyLCBhbnl3aGVyZSBlbHNlIGJlZm9yZSAxNTgyLAogKiBhbmQgaXMgc3RpbGwgaW4g
dXNlIGJ5IHNvbWUgY29tbXVuaXRpZXMpIGxlYXZlIG91dCB0aGUKICogLXllYXIvMTAwK3llYXIv
NDAwIHRlcm1zLCBhbmQgYWRkIDEwLl0KICoKICogVGhpcyBhbGdvcml0aG0gd2FzIGZpcnN0IHB1
Ymxpc2hlZCBieSBHYXVzcyAoSSB0aGluaykuCiAqCiAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24g
d2lsbCBvdmVyZmxvdyBvbiAyMTA2LTAyLTA3IDA2OjI4OjE2IG9uCiAqIG1hY2hpbmVzIHdlcmUg
bG9uZyBpcyAzMi1iaXQhIChIb3dldmVyLCBhcyB0aW1lX3QgaXMgc2lnbmVkLCB3ZQogKiB3aWxs
IGFscmVhZHkgZ2V0IHByb2JsZW1zIGF0IG90aGVyIHBsYWNlcyBvbiAyMDM4LTAxLTE5IDAzOjE0
OjA4KQogKi8Kc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1rdGltZSh1bnNpZ25lZCBpbnQg
eWVhciwgdW5zaWduZWQgaW50IG1vbiwKCXVuc2lnbmVkIGludCBkYXksIHVuc2lnbmVkIGludCBo
b3VyLAoJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykKewoJaWYgKDAgPj0gKGlu
dCkgKG1vbiAtPSAyKSkgewkvKiAxLi4xMiAtPiAxMSwxMiwxLi4xMCAqLwoJCW1vbiArPSAxMjsJ
LyogUHV0cyBGZWIgbGFzdCBzaW5jZSBpdCBoYXMgbGVhcCBkYXkgKi8KCQl5ZWFyIC09IDE7Cgl9
CglyZXR1cm4gKCgoCgkgICAgKHVuc2lnbmVkIGxvbmcpKHllYXIvNCAtIHllYXIvMTAwICsgeWVh
ci80MDAgKyAzNjcqbW9uLzEyICsgZGF5KSArCgkgICAgICB5ZWFyKjM2NSAtIDcxOTQ5OQoJICAg
ICkqMjQgKyBob3VyIC8qIG5vdyBoYXZlIGhvdXJzICovCgkgICApKjYwICsgbWluIC8qIG5vdyBo
YXZlIG1pbnV0ZXMgKi8KCSAgKSo2MCArIHNlYzsgLyogZmluYWxseSBzZWNvbmRzICovCn0KCnVu
c2lnbmVkIGxvbmcgZ2V0X2Ntb3NfdGltZSh2b2lkKQp7Cgl1bnNpZ25lZCBpbnQgeWVhciwgbW9u
LCBkYXksIGhvdXIsIG1pbiwgc2VjOwoJaW50IGk7CgoJLyogVGhlIExpbnV4IGludGVycHJldGF0
aW9uIG9mIHRoZSBDTU9TIGNsb2NrIHJlZ2lzdGVyIGNvbnRlbnRzOgoJICogV2hlbiB0aGUgVXBk
YXRlLUluLVByb2dyZXNzIChVSVApIGZsYWcgZ29lcyBmcm9tIDEgdG8gMCwgdGhlCgkgKiBSVEMg
cmVnaXN0ZXJzIHNob3cgdGhlIHNlY29uZCB3aGljaCBoYXMgcHJlY2lzZWx5IGp1c3Qgc3RhcnRl
ZC4KCSAqIExldCdzIGhvcGUgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgaW50ZXJwcmV0IHRoZSBS
VEMgdGhlIHNhbWUgd2F5LgoJICovCgkvKiByZWFkIFJUQyBleGFjdGx5IG9uIGZhbGxpbmcgZWRn
ZSBvZiB1cGRhdGUgZmxhZyAqLwoJZm9yIChpID0gMCA7IGkgPCAxMDAwMDAwIDsgaSsrKQkvKiBt
YXkgdGFrZSB1cCB0byAxIHNlY29uZC4uLiAqLwoJCWlmIChDTU9TX1JFQUQoUlRDX0ZSRVFfU0VM
RUNUKSAmIFJUQ19VSVApCgkJCWJyZWFrOwoJZm9yIChpID0gMCA7IGkgPCAxMDAwMDAwIDsgaSsr
KQkvKiBtdXN0IHRyeSBhdCBsZWFzdCAyLjIyOCBtcyAqLwoJCWlmICghKENNT1NfUkVBRChSVENf
RlJFUV9TRUxFQ1QpICYgUlRDX1VJUCkpCgkJCWJyZWFrOwoJZG8geyAvKiBJc24ndCB0aGlzIG92
ZXJraWxsID8gVUlQIGFib3ZlIHNob3VsZCBndWFyYW50ZWUgY29uc2lzdGVuY3kgKi8KCQlzZWMg
PSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpOwoJCW1pbiA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7
CgkJaG91ciA9IENNT1NfUkVBRChSVENfSE9VUlMpOwoJCWRheSA9IENNT1NfUkVBRChSVENfREFZ
X09GX01PTlRIKTsKCQltb24gPSBDTU9TX1JFQUQoUlRDX01PTlRIKTsKCQl5ZWFyID0gQ01PU19S
RUFEKFJUQ19ZRUFSKTsKCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsK
CWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxX
QVlTX0JDRCkKCSAgewoJICAgIEJDRF9UT19CSU4oc2VjKTsKCSAgICBCQ0RfVE9fQklOKG1pbik7
CgkgICAgQkNEX1RPX0JJTihob3VyKTsKCSAgICBCQ0RfVE9fQklOKGRheSk7CgkgICAgQkNEX1RP
X0JJTihtb24pOwoJICAgIEJDRF9UT19CSU4oeWVhcik7CgkgIH0KCWlmICgoeWVhciArPSAxOTAw
KSA8IDE5NzApCgkJeWVhciArPSAxMDA7CglyZXR1cm4gbWt0aW1lKHllYXIsIG1vbiwgZGF5LCBo
b3VyLCBtaW4sIHNlYyk7Cn0KCnN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0geyB0aW1l
cl9pbnRlcnJ1cHQsIDAsIDAsICJ0aW1lciIsIE5VTEwsIE5VTEx9OwoKLyogLS0tLS0tIENhbGli
cmF0ZSB0aGUgVFNDIC0tLS0tLS0gCiAqIFJldHVybiAyXjMyICogKDEgLyAoVFNDIGNsb2NrcyBw
ZXIgdXNlYykpIGZvciBkb19mYXN0X2dldHRpbWVvZmZzZXQoKS4KICogVG9vIG11Y2ggNjQtYml0
IGFyaXRobWV0aWMgaGVyZSB0byBkbyB0aGlzIGNsZWFubHkgaW4gQywgYW5kIGZvcgogKiBhY2N1
cmFjeSdzIHNha2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBvdmVyaGVhZCBvbiB0aGUgQ1RDIHNwZWFr
ZXIgKGNoYW5uZWwgMikKICogb3V0cHV0IGJ1c3kgbG9vcCBhcyBsb3cgYXMgcG9zc2libGUuIFdl
IGF2b2lkIHJlYWRpbmcgdGhlIENUQyByZWdpc3RlcnMKICogZGlyZWN0bHkgYmVjYXVzZSBvZiB0
aGUgYXdrd2FyZCA4LWJpdCBhY2Nlc3MgbWVjaGFuaXNtIG9mIHRoZSA4MkM1NAogKiBkZXZpY2Uu
CiAqLwoKc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX3RzYyh2b2lkKQp7CiAgICAgICB1
bnNpZ25lZCBsb25nIHJldHZhbDsKCiAgICAgICBfX2FzbV9fKCAvKiBzZXQgdGhlIEdhdGUgaGln
aCwgcHJvZ3JhbSBDVEMgY2hhbm5lbCAyIGZvciBtb2RlIDAKCQkgKiAoaW50ZXJydXB0IG9uIHRl
cm1pbmFsIGNvdW50IG1vZGUpLCBiaW5hcnkgY291bnQsIAoJCSAqIGxvYWQgNSAqIExBVENIIGNv
dW50LCAoTFNCIGFuZCBNU0IpCgkJICogdG8gYmVnaW4gY291bnRkb3duLCByZWFkIHRoZSBUU0Mg
YW5kIGJ1c3kgd2FpdC4KCQkgKiBCVFcgTEFUQ0ggaXMgY2FsY3VsYXRlZCBpbiB0aW1leC5oIGZy
b20gdGhlIEhaIHZhbHVlCgkJICovCgoJICAgICAgIC8qIFNldCB0aGUgR2F0ZSBoaWdoLCBkaXNh
YmxlIHNwZWFrZXIgKi8KCSAgICAgICAiaW5iICAkMHg2MSwgJSVhbFxuXHQiIC8qIFJlYWQgcG9y
dCAqLwoJICAgICAgICJhbmRiICQweGZkLCAlJWFsXG5cdCIgLyogVHVybiBvZmYgc3BlYWtlciBE
YXRhICovCgkgICAgICAgIm9yYiAgJDB4MDEsICUlYWxcblx0IiAvKiBTZXQgR2F0ZSBoaWdoICov
CgkgICAgICAgIm91dGIgJSVhbCwgJDB4NjFcblx0IiAvKiBXcml0ZSBwb3J0ICovCgoJICAgICAg
IC8qIE5vdyBsZXQncyB0YWtlIGNhcmUgb2YgQ1RDIGNoYW5uZWwgMiAqLwoJICAgICAgICJtb3Zi
ICQweGIwLCAlJWFsXG5cdCIgLyogYmluYXJ5LCBtb2RlIDAsIExTQi9NU0IsIGNoIDIqLwoJICAg
ICAgICJvdXRiICUlYWwsICQweDQzXG5cdCIgLyogV3JpdGUgdG8gQ1RDIGNvbW1hbmQgcG9ydCAq
LwoJICAgICAgICJtb3ZiICQweDBjLCAlJWFsXG5cdCIKCSAgICAgICAib3V0YiAlJWFsLCAkMHg0
MlxuXHQiIC8qIExTQiBvZiBjb3VudCAqLwoJICAgICAgICJtb3ZiICQweGU5LCAlJWFsXG5cdCIK
CSAgICAgICAib3V0YiAlJWFsLCAkMHg0MlxuXHQiIC8qIE1TQiBvZiBjb3VudCAqLwoKICAgICAg
ICAgICAgICAgLyogUmVhZCB0aGUgVFNDOyBjb3VudGluZyBoYXMganVzdCBzdGFydGVkICovCiAg
ICAgICAgICAgICAgICJyZHRzY1xuXHQiCiAgICAgICAgICAgICAgIC8qIE1vdmUgdGhlIHZhbHVl
IGZvciBzYWZlLWtlZXBpbmcuICovCiAgICAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlJWVieFxu
XHQiCiAgICAgICAgICAgICAgICJtb3ZsICUlZWR4LCAlJWVjeFxuXHQiCgoJICAgICAgIC8qIEJ1
c3kgd2FpdC4gT25seSA1MCBtcyB3YXN0ZWQgYXQgYm9vdCB0aW1lLiAqLwogICAgICAgICAgICAg
ICAiMDogaW5iICQweDYxLCAlJWFsXG5cdCIgLyogUmVhZCBTcGVha2VyIE91dHB1dCBQb3J0ICov
CgkgICAgICAgInRlc3RiICQweDIwLCAlJWFsXG5cdCIgLyogQ2hlY2sgQ1RDIGNoYW5uZWwgMiBv
dXRwdXQgKGJpdCA1KSAqLwogICAgICAgICAgICAgICAianogMGJcblx0IgoKICAgICAgICAgICAg
ICAgLyogQW5kIHJlYWQgdGhlIFRTQy4gIDUgamlmZmllcyAoNTAuMDAwNzdtcykgaGF2ZSBlbGFw
c2VkLiAqLwogICAgICAgICAgICAgICAicmR0c2Ncblx0IgoKICAgICAgICAgICAgICAgLyogR3Jl
YXQuICBTbyBmYXIgc28gZ29vZC4gIFN0b3JlIGxhc3QgVFNDIHJlYWRpbmcgaW4KICAgICAgICAg
ICAgICAgICogbGFzdF90c2NfbG93IChvbmx5IDMyIGxzYiBiaXRzIG5lZWRlZCkgKi8KICAgICAg
ICAgICAgICAgIm1vdmwgJSVlYXgsIGxhc3RfdHNjX2xvd1xuXHQiCiAgICAgICAgICAgICAgIC8q
IEFuZCBub3cgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlYWRpbmdzLiAq
LwogICAgICAgICAgICAgICAic3VibCAlJWVieCwgJSVlYXhcblx0IgogICAgICAgICAgICAgICAi
c2JibCAlJWVjeCwgJSVlZHhcblx0IiAvKiA2NC1iaXQgc3VidHJhY3QgKi8KCSAgICAgICAvKiBi
dXQgcHJvYmFibHkgZWR4ID0gMCBhdCB0aGlzIHBvaW50IChzZWUgYmVsb3cpLiAqLwogICAgICAg
ICAgICAgICAvKiBOb3cgd2UgaGF2ZSA1ICogKFRTQyBjb3VudHMgcGVyIGppZmZ5KSBpbiBlYXgu
ICBXZSB3YW50CiAgICAgICAgICAgICAgICAqIHRvIGNhbGN1bGF0ZSBUU0MtPm1pY3Jvc2Vjb25k
IGNvbnZlcnNpb24gZmFjdG9yLiAqLwoKICAgICAgICAgICAgICAgLyogTm90ZSB0aGF0IGVkeCAo
aGlnaCAzMi1iaXRzIG9mIGRpZmZlcmVuY2UpIHdpbGwgbm93IGJlIAogICAgICAgICAgICAgICAg
KiB6ZXJvIGlmZiBDUFUgY2xvY2sgc3BlZWQgaXMgbGVzcyB0aGFuIDg1IEdIei4gIE1vb3JlJ3MK
ICAgICAgICAgICAgICAgICogbGF3IHNheXMgdGhhdCB0aGlzIGlzIGxpa2VseSB0byBiZSB0cnVl
IGZvciB0aGUgbmV4dAogICAgICAgICAgICAgICAgKiAxMiB5ZWFycyBvciBzby4gIFlvdSB3aWxs
IGhhdmUgdG8gY2hhbmdlIHRoaXMgY29kZSB0bwogICAgICAgICAgICAgICAgKiBkbyBhIHJlYWwg
NjQtYnktNjQgZGl2aWRlIGJlZm9yZSB0aGF0IHRpbWUncyB1cC4gKi8KICAgICAgICAgICAgICAg
Im1vdmwgJSVlYXgsICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgInhvcmwgJSVlYXgsICUlZWF4
XG5cdCIKICAgICAgICAgICAgICAgIm1vdmwgJTEsICUlZWR4XG5cdCIKICAgICAgICAgICAgICAg
ImRpdmwgJSVlY3hcblx0IiAvKiBlYXg9IDJeMzIgLyAoMSAqIFRTQyBjb3VudHMgcGVyIG1pY3Jv
c2Vjb25kKSAqLwoJICAgICAgIC8qIFJldHVybiBlYXggZm9yIHRoZSB1c2Ugb2YgZmFzdF9nZXR0
aW1lb2Zmc2V0ICovCiAgICAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlMFxuXHQiCiAgICAgICAg
ICAgICAgIDogIj1yIiAocmV0dmFsKQogICAgICAgICAgICAgICA6ICJyIiAoNSAqIDEwMDAwMjAv
SFopCiAgICAgICAgICAgICAgIDogLyogd2UgY2xvYmJlcjogKi8gImF4IiwgImJ4IiwgImN4Iiwg
ImR4IiwgImNjIiwgIm1lbW9yeSIpOwogICAgICAgcmV0dXJuIHJldHZhbDsKfQoKdm9pZCB0aW1l
X2luaXQodm9pZCkKewoJeHRpbWUudHZfc2VjID0gZ2V0X2Ntb3NfdGltZSgpOwoJeHRpbWUudHZf
dXNlYyA9IDA7CgovKgogKiBJZiB3ZSBoYXZlIEFQTSBlbmFibGVkIG9yIHRoZSBDUFUgY2xvY2sg
c3BlZWQgaXMgdmFyaWFibGUKICogKENQVSBzdG9wcyBjbG9jayBvbiBITFQgb3Igc2xvd3MgY2xv
Y2sgdG8gc2F2ZSBwb3dlcikKICogdGhlbiB0aGUgVFNDIHRpbWVzdGFtcHMgbWF5IGRpdmVyZ2Ug
YnkgdXAgdG8gMSBqaWZmeSBmcm9tCiAqICdyZWFsIHRpbWUnIGJ1dCBub3RoaW5nIHdpbGwgYnJl
YWsuCiAqIFRoZSBtb3N0IGZyZXF1ZW50IGNhc2UgaXMgdGhhdCB0aGUgQ1BVIGlzICJ3b2tlbiIg
ZnJvbSBhIGhhbHQKICogc3RhdGUgYnkgdGhlIHRpbWVyIGludGVycnVwdCBpdHNlbGYsIHNvIHdl
IGdldCAwIGVycm9yLiBJbiB0aGUKICogcmFyZSBjYXNlcyB3aGVyZSBhIGRyaXZlciB3b3VsZCAi
d2FrZSIgdGhlIENQVSBhbmQgcmVxdWVzdCBhCiAqIHRpbWVzdGFtcCwgdGhlIG1heGltdW0gZXJy
b3IgaXMgPCAxIGppZmZ5LiBCdXQgdGltZXN0YW1wcyBhcmUKICogc3RpbGwgcGVyZmVjdGx5IG9y
ZGVyZWQuCiAqIE5vdGUgdGhhdCB0aGUgVFNDIGNvdW50ZXIgd2lsbCBiZSByZXNldCBpZiBBUE0g
c3VzcGVuZHMKICogdG8gZGlzazsgdGhpcyB3b24ndCBicmVhayB0aGUga2VybmVsLCB0aG91Z2gs
ICdjdXogd2UncmUKICogc21hcnQuICBTZWUgZGV2aWNlcy9jaGFyL2FwbV9iaW9zLmMuCiAqLwoJ
aWYgKHg4Nl9jYXBhYmlsaXR5ICYgMTYpIHsKCQlkb19nZXR0aW1lb2Zmc2V0ID0gZG9fZmFzdF9n
ZXR0aW1lb2Zmc2V0OwoJCWlycTAuaGFuZGxlciA9IHBlbnRpdW1fdGltZXJfaW50ZXJydXB0OwoJ
CWZhc3RfZ2V0dGltZW9mZnNldF9xdW90aWVudCA9IGNhbGlicmF0ZV90c2MoKTsKCQkKCQkvKiBy
ZXBvcnQgQ1BVIGNsb2NrIHJhdGUgaW4gSHouCgkJICogVGhlIGZvcm11bGEgaXMgKDEwXjYgKiAy
XjMyKSAvICgyXjMyICogMSAvIChjbG9ja3MvdXMpKSA9CgkJICogY2xvY2svc2Vjb25kLiBPdXIg
cHJlY2lzaW9uIGlzIGFib3V0IDEwMCBwcG0uCgkJICovCgkJewl1bnNpZ25lZCBsb25nIGVheD0w
LCBlZHg9MTAwMDAwMDsKCQkJX19hc21fXygiZGl2bCAlMiIKCSAgICAgICAJCToiPWEiIChjcHVf
aHopLCAiPWQiIChlZHgpCiAgICAgICAgICAgICAgIAkJOiJyIiAoZmFzdF9nZXR0aW1lb2Zmc2V0
X3F1b3RpZW50KSwKICAgICAgICAgICAgICAgIAkiMCIgKGVheCksICIxIiAoZWR4KSk7CgkJCXBy
aW50aygiRGV0ZWN0ZWQgJWxkIEh6IHByb2Nlc3Nvci5cbiIsIGNwdV9oeik7CgkJfQoJfQoJc2V0
dXBfeDg2X2lycSgwLCAmaXJxMCk7CQp9Cg==

--Boundary-=_XrJmOWFrxsjyBldbEFSArCBynEcd--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html