[Lcdproc] IMON Driver for OSX/Darwin[Scanned]

Phil Taylor Phil.Taylor@lansystems.co.uk
Tue Jul 10 10:54:02 2007


This is a multi-part message in MIME format.

------_=_NextPart_001_01C7C2E0.90C29E3A
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi.

Here is my patch for imon.c (Release 0.5.2) to add support for MacOS
X/Darwin. It must be linked with "-framework  CoreFoundation -framework
IOKit" and I cannot quite work out how to add this to configure
automatically (being a bit stupid probably). I am currently using
LDFLAGS in the server Makefile which is not perfect as the whole server
is then linked against these rather than just imon.so.

I have added basic support for the Knob on the Antec Fusion case and it
currently returns "Plus" or "Minus" (I suppose this should use a keymap
from LCDd.conf but this is enough for my needs at the moment. I am also
trying to work out how to detect if the knob was moved fast or slow but
I haven't got there yet.

It uses two options from LCDd.conf (section [imon]) which are Vendor and
Product. These default to 5570 and 65500 (The Antec Fusion VFD).

Please let me know how you get on with it.....

Cheers

Phil
---

CONFIDENTIALITY NOTICE:
This Email is confidential and may also be privileged. If you are not =
the intended recipient, please notify the sender IMMEDIATELY; you should =
not copy the email or use it for any purpose or disclose its contents to =
any other person.

GENERAL STATEMENT:
Any statements made, or intentions expressed in this communication may =
not necessarily reflect the view of the Company. Be advised that no =
content herein may be held binding upon the Company or any associated =
company unless confirmed by the issuance of a formal contractual =
document or Purchase Order.
Any Prices quoted are valid for ONE Business day only.  Calls to LAN =
Systems may be recorded for quality assurance and training purposes.

Lan Limited t/as Lan Systems is a company registered in England & Wales =
(Registered Number: 3026720), our VAT Registration number is: 620 3796 =
50.

If you would like any information on the products and services offered =
by Lan Systems, please visit our web site http://www.lansystems.co.uk

E&OE


------_=_NextPart_001_01C7C2E0.90C29E3A
Content-Type: application/octet-stream;
	name="imon.patch"
Content-Transfer-Encoding: base64
Content-Description: imon.patch
Content-Disposition: attachment;
	filename="imon.patch"

MWMxCjwgLyoqCi0tLQo+ICMvKioKMTlhMjAsMjEKPiAgKiBDb3B5cmlnaHQgKGMpICAyMDA3IFBo
aWwgVGF5bG9yIDxwaGlsQGxhbnN5c3RlbXMuY28udWs+LAo+ICAqCQkgICAgICAgRGFyd2luL01B
Q09TIFggc3VwcG9ydCB1c2luZyBJT0tpdCAoYmFzZWQgb24gbGlyY19pbW9uKQo0N2E1MCw5Mgo+
IAo+IC8vIE9TWCAmIERhcndpbiBTcGVjaWZpYwo+ICNpZmRlZiBEQVJXSU4KPiAKPiAjaW5jbHVk
ZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KPiAjaW5jbHVkZSA8SU9LaXQvSU9L
aXRMaWIuaD4KPiAjaW5jbHVkZSA8SU9LaXQvSU9DRlBsdWdJbi5oPgo+ICNpbmNsdWRlIDxJT0tp
dC91c2IvSU9VU0JMaWIuaD4KPiAjaW5jbHVkZSA8bWFjaC9tYWNoLmg+Cj4gI2RlZmluZSBrT3Vy
VmVuZG9ySUQgICAgICAgICAgICA1NTcwCj4gI2RlZmluZSBrT3VyUHJvZHVjdElEICAgICAgICAg
ICA2NTUwMAo+IAo+IAo+IC8qIFNvbWUgaU1PTiBWRkQgbW9kZWxzIHJlcXVpcmVzIGEgNnRoIHBh
Y2tldCAqLwo+IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB2ZmRfcHJvdG9fNnBfdmVuZG9yX2xpc3Qg
W10gPSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRlIHRoaXMgbGlzdCB3
aXRoIGEgMCAqLwo+ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVjMiwKPiAgICAgICAgICAg
ICAgICAgICAgICAgICAwIH07Cj4gCj4gc3RhdGljIHVuc2lnbmVkIGNoYXIgdmZkX3BhY2tldDYg
W10gPSB7Cj4gICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
RkYsIDB4RkYgfTsKPiAKPiAvKiBOZXdlciBpTU9OIG1vZGVscyBkZWNvZGUgdGhlIHNpZ25hbCBv
bmJvYXJkICovCj4gc3RhdGljIHVuc2lnbmVkIHNob3J0IGlyX29uYm9hcmRfZGVjb2RlX3Byb2R1
Y3RfbGlzdCBbXSA9IHsKPiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgdGhp
cyBsaXN0IHdpdGggYSAwICovCj4gICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmRjLAo+ICAg
ICAgICAgICAgICAgICAgICAgICAgIDAgfTsKPiAKPiAKPiBzdGF0aWMgY2hhciAqdHlwZXNbXT17
Cj4gICAgICAgICAiQ29udHJvbCIsCj4gICAgICAgICAiSXNvY2hyb25vdXMiLAo+ICAgICAgICAg
IkJ1bGsiLAo+ICAgICAgICAgIkludGVycnVwdCJ9Owo+IHN0YXRpYyBjaGFyICpkaXJlY3Rpb25T
dHJbXT17Cj4gICAgICAgICAiSW4iLAo+ICAgICAgICAgIk91dCIsCj4gICAgICAgICAiQ29udHJv
bCJ9Owo+IAo+ICNlbmRpZgo+IAo+IAo+IAo5OGExNDQKPiAjaWZuZGVmIERBUldJTgo5OWExNDYs
MTU1Cj4gI2Vsc2UKPiAJbWFjaF9wb3J0X3QgbWFzdGVyOwo+IAlJT1VTQkRldmljZUludGVyZmFj
ZSAqKmRldjsKPiAJSU9VU0JJbnRlcmZhY2VJbnRlcmZhY2UgKippbnRmOwo+IAlpbnQgaW5waXBl
Owo+IAlpbnQgb3V0cGlwZTsKPiAJaW50IGlyX29uYm9hcmRfZGVjb2RlOwo+ICAgICAgICAgaW50
IHZmZF9wcm90b182cDsKPiAJaW50IGtleV90aW1lb3V0Owo+ICNlbmRpZgoxMDdhMTY0LDE2NQo+
ICNpZmRlZiBEQVJXSU4KPiAKMTA5YzE2Nwo8ICAqIGRyaXZlciBpbml0aWFsaXphdGlvbgotLS0K
PiAgKiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIERBUldJTgoxMTBhMTY5LDMx
Ngo+IAo+IGludCBpbml0aW50ZXJmYWNlKGlvX3NlcnZpY2VfdCBpbnRyZWYsIERyaXZlciAqZHJ2
dGhpcykKPiB7Cj4gCVByaXZhdGVEYXRhICpwID0gZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOwo+ICAg
IAlJT1JldHVybiBlcnI7Cj4gICAgIAlJT0NGUGx1Z0luSW50ZXJmYWNlICoqaW9kZXY7IC8vIHJl
cXVpcmVzIDxJT0tpdC9JT0NGUGx1Z0luLmg+Cj4gICAgIAlTSW50MzIgc2NvcmU7Cj4gICAgIAlV
SW50OCBudW1waXBlczsKPiAJaW50IGk7Cj4gCj4gCWVyciA9IElPQ3JlYXRlUGx1Z0luSW50ZXJm
YWNlRm9yU2VydmljZShpbnRyZWYsIGtJT1VTQkludGVyZmFjZVVzZXJDbGllbnRUeXBlSUQsIGtJ
T0NGUGx1Z0luSW50ZXJmYWNlSUQsJmlvZGV2LCZzY29yZSk7Cj4gICAgIAlpZiAoZXJyIHx8ICFp
b2RldikKPiAgICAgCXsKPiAJCXJlcG9ydChSUFRfRVJSLCAiJXM6IFVuYWJsZSB0byBjcmVhdGUg
cGx1Z2luIGZvciBpbnRlcmZhY2UuIHJldD0gJTA4eCwgaW9kZXY9ICVwIiwgZHJ2dGhpcy0+bmFt
ZSwgZXJyLCBpb2Rldik7Cj4gICAgICAgICAgICAgICAgIHJldHVybiAtMTsKPiAgICAgCX0KPiAg
ICAgCWVyciA9ICgqaW9kZXYpLT5RdWVyeUludGVyZmFjZShpb2RldiwgQ0ZVVUlER2V0VVVJREJ5
dGVzKGtJT1VTQkludGVyZmFjZUludGVyZmFjZUlEKSwgKExQVk9JRCkmcC0+aW50Zik7Cj4gICAg
ICAgICBJT0Rlc3Ryb3lQbHVnSW5JbnRlcmZhY2UoaW9kZXYpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZG9uZSB3aXRoIHRoaXMKPiAgICAgCWlmIChlcnIgfHwgIXAtPmludGYp
Cj4gICAgIAl7Cj4gCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIGEgZGV2
aWNlIGludGVyZmFjZS4gcmV0PSAlMDh4LCBpbnRmPSAlcCIsZHJ2dGhpcy0+bmFtZSwgZXJyLCBw
LT5pbnRmKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICAgICAJfQo+ICAgICAJZXJy
ID0gKCpwLT5pbnRmKS0+VVNCSW50ZXJmYWNlT3BlbihwLT5pbnRmKTsKPiAgICAgCWlmIChlcnIp
Cj4gICAgIAl7Cj4gCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIGEgb3Bl
biBpbnRlcmZhY2UuIHJldD0gJTA4eCIsZHJ2dGhpcy0+bmFtZSwgZXJyKTsKPiAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOwo+ICAgICAJfQo+ICAgICAJZXJyID0gKCpwLT5pbnRmKS0+R2V0TnVt
RW5kcG9pbnRzKHAtPmludGYsICZudW1waXBlcyk7Cj4gICAgIAlpZiAoZXJyKQo+ICAgICAJewo+
IAkJcmVwb3J0KFJQVF9FUlIsICIlczogVW5hYmxlIHRvIGdldCBudW1iZXIgb2YgZW5kcG9pbnRz
IHJldD0gJTA4eCIsZHJ2dGhpcy0+bmFtZSwgZXJyKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOwo+ICAgICAJfQo+IAlyZXBvcnQoUlBUX0RFQlVHLCAiJXM6IEkgaGF2ZSBmb3VuZCAlZCBw
aXBlcyB3aXRoaW4gaW50ZXJmYWNlIixkcnZ0aGlzLT5uYW1lLCBudW1waXBlcyk7Cj4gCWlmIChu
dW1waXBlcykKPiAJewkKPiAJCVVJbnQ4IGRpcmVjdGlvbiwgbnVtYmVyLCB0eXBlLCBpbnRlcnZh
bDsKPiAJCVVJbnQxNiBtYXhzaXplOwo+IAo+IAkJZm9yIChpPTE7aTw9bnVtcGlwZXM7aSsrKQo+
IAkJewkJCj4gCQkJcmVwb3J0KFJQVF9ERUJVRywgIiVzOiBDaGVja2luZyBzdGF0dXMgb2YgcGlw
ZSAlZCIsZHJ2dGhpcy0+bmFtZSwgaSk7Cj4gCQkJZXJyPSgqcC0+aW50ZiktPkdldFBpcGVQcm9w
ZXJ0aWVzKHAtPmludGYsIGksICZkaXJlY3Rpb24sICZudW1iZXIsICZ0eXBlLCZtYXhzaXplLCZp
bnRlcnZhbCk7Cj4gCj4gCQkgICAgICAgIGlmIChlcnIpCj4gICAgICAgICAJCXsKPiAJCQkJcmVw
b3J0KFJQVF9FUlIsICIlczogVW5hYmxlIHRvIGdldCBlbmRwb2ludCBwcm9wZXJ0aWVzLCByZXQ9
ICUwOHgiLGRydnRoaXMtPm5hbWUsIGVycik7Cj4gICAgICAgICAJICAgICAgICAJcmV0dXJuIC0x
Owo+IAkJCX0KPiAgICAgICAgIAkJcmVwb3J0KFJQVF9ERUJVRywiJXM6IEVuZHBvaW50ICVkOiAl
cyAlcyAlZCwgbWF4IHBhY2tldCAlZCwgaW50ZXJ2YWwgJWQiLGRydnRoaXMtPm5hbWUsIGksIHR5
cGVzW3R5cGVdLGRpcmVjdGlvblN0cltkaXJlY3Rpb25dLCBudW1iZXIsIG1heHNpemUsIGludGVy
dmFsKTsKPiAJCQlpZiAoZGlyZWN0aW9uPT0wKSAvLyBJbgo+IAkJCXsKPiAJCQkJcmVwb3J0KFJQ
VF9ERUJVRywiJXM6IFNlbGVjdGVkIHBpcGUgJWQgYXMgSW5wdXQgUGlwZSIsZHJ2dGhpcy0+bmFt
ZSxpKTsKPiAJCQkJcC0+aW5waXBlPWk7Cj4gCQkJfQo+IAkJCWVsc2UKPiAJCQl7Cj4gCQkJCXJl
cG9ydChSUFRfREVCVUcsIiVzOiBTZWxlY3RlZCBwaXBlICVkIGFzIG91dHB1dCBQaXBlIixkcnZ0
aGlzLT5uYW1lLGkpOwo+IAo+IAkJCQlwLT5vdXRwaXBlPWk7Cj4gCQkJfQo+IAkJfQo+IAl9Cj4g
Cj4gCj4gCXJldHVybiAxOwo+IH0KPiAKPiAKPiBpbnQgaW5pdGRldmljZShpb19zZXJ2aWNlX3Qg
ZGV2aWNlcmVmLCBEcml2ZXIgKmRydnRoaXMpCj4gewo+IAlQcml2YXRlRGF0YSAqcCA9IGRydnRo
aXMtPnByaXZhdGVfZGF0YTsKPiAKPiAJaW9faXRlcmF0b3JfdCBpdGVyYXRvcjsKPiAJaW9fc2Vy
dmljZV90IGludHJlZjsKPiAJSU9DRlBsdWdJbkludGVyZmFjZSAqKmlvZGV2OyAvL0RldmluYXRl
bHkgdGVtcG9yYXJ5Cj4gCUlPVVNCRmluZEludGVyZmFjZVJlcXVlc3QgcmVxdWVzdDsKPiAJSU9V
U0JDb25maWd1cmF0aW9uRGVzY3JpcHRvclB0ciBjb25mZGVzYzsJCj4gCVNJbnQzMiBzY29yZTsK
PiAJVUludDggbnVtY29uZjsKPiAJa2Vybl9yZXR1cm5fdCBlcnI7Cj4gCQkKPiAJZXJyID0gSU9D
cmVhdGVQbHVnSW5JbnRlcmZhY2VGb3JTZXJ2aWNlKGRldmljZXJlZiwga0lPVVNCRGV2aWNlVXNl
ckNsaWVudFR5cGVJRCwga0lPQ0ZQbHVnSW5JbnRlcmZhY2VJRCwgJmlvZGV2LCAmc2NvcmUpOwo+
ICAgICAJaWYgKGVyciB8fCAhaW9kZXYpCj4gICAgIAl7Cj4gCQlyZXBvcnQoUlBUX0VSUiwgIiVz
OiBVbmFibGUgdG8gY3JlYXRlIHBsdWdpbiBmb3IgZGV2aWNlLiByZXQ9ICUwOHgsIGlvZGV2PSAl
cCIsZHJ2dGhpcy0+bmFtZSwgZXJyLCBpb2Rldik7Cj4gCSAgICAgICAgcmV0dXJuIC0xOwo+ICAg
ICAJfQo+ICAgICAJZXJyID0gKCppb2RldiktPlF1ZXJ5SW50ZXJmYWNlKGlvZGV2LCBDRlVVSURH
ZXRVVUlEQnl0ZXMoa0lPVVNCRGV2aWNlSW50ZXJmYWNlSUQpLCAoTFBWT0lEKSZwLT5kZXYpOwo+
ICAgICAgICAJSU9EZXN0cm95UGx1Z0luSW50ZXJmYWNlKGlvZGV2KTsgLy8gZG9uZSB3aXRoIHRo
aXMKPiAgICAJaWYgKGVycikKPiAgICAgCXsKPiAJCXJlcG9ydChSUFRfRVJSLCAiJXM6IFVuYWJs
ZSB0byBjcmVhdGUgZGV2aWNlIGludGVyZmFjZS4gcmV0PSAlMDh4LCBkZXY9ICVwIixkcnZ0aGlz
LT5uYW1lLCBlcnIsIHAtPmRldik7Cj4gICAgICAgICAgICAgICAgCXJldHVybiAtMTsKPiAJfQo+
IAkvLyBPcGVuIHRoZSBhY3R1YWwgZGV2aWNlLCB0aGlzIG5lZWRzIHRvIGJlIHN0b3JlZCBpbiBv
dXIgcHJpdmF0ZSBkYXRhIHNvIHRoYXQgdGhlIAo+IAkvLyBkZXZpY2UgY2FuIGJlIGFjY2Vzc2Vk
IGFmdGVyd2FyZHMuCj4gICAgIAllcnIgPSAoKnAtPmRldiktPlVTQkRldmljZU9wZW4ocC0+ZGV2
KTsKPiAgICAgCWlmIChlcnIpCj4gICAgIAl7Cj4gCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBVbmFi
bGUgdG8gb3BlbiBkZXZpY2UuIHJldD0gJTA4eCIsZHJ2dGhpcy0+bmFtZSwgZXJyKTsKPiAgICAg
ICAgICAgICAgICAJcmV0dXJuIC0xOwo+IAl9Cj4gCWVyciA9ICgqcC0+ZGV2KS0+R2V0TnVtYmVy
T2ZDb25maWd1cmF0aW9ucyhwLT5kZXYsICZudW1jb25mKTsKPiAJaWYgKGVyciB8fCAhbnVtY29u
ZikKPiAJewo+IAkJcmVwb3J0KFJQVF9FUlIsICIlczogVW5hYmxlIHRvIG9idGFpbiB0aGUgbnVt
YmVyIG9mIGNvbmZpZ3VyYXRpb25zLiByZXQgPSAlMDh4IixkcnZ0aGlzLT5uYW1lLCBlcnIpOwo+
ICAgICAgICAgICAJcmV0dXJuIC0xOwo+ICAgICAJfQo+IAlyZXBvcnQoUlBUX0RFQlVHLCAiaW1v
bjogRm91bmQgJWQgY29uZmlndXJhdGlvbnMiLCBudW1jb25mKTsKPiAJZXJyID0gKCpwLT5kZXYp
LT5HZXRDb25maWd1cmF0aW9uRGVzY3JpcHRvclB0cihwLT5kZXYsIDAsICZjb25mZGVzYyk7ICAg
ICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBmaXJzdCBjb25maWcgZGVzYyQKPiAJaWYgKGVy
cikKPiAJewo+IAkJcmVwb3J0KFJQVF9FUlIsICIlczogVW5hYmxlIHRvIGdldCBjb25maWcgZGVz
Y3JpcHRpb24gdG8gaW5kZXggMCIsZHJ2dGhpcy0+bmFtZSk7CQo+IAkgICAgICAgIHJldHVybiAt
MTsKPiAJfQo+IAllcnIgPSAoKnAtPmRldiktPlNldENvbmZpZ3VyYXRpb24ocC0+ZGV2LCBjb25m
ZGVzYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSk7Cj4gCWlmIChlcnIpCQo+IAl7Cj4gCQlyZXBvcnQo
UlBUX0VSUiwgIiVzOiBVbmFibGUgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIixkcnZ0aGlzLT5u
YW1lKTsKPiAgICAgICAgICAgICAgCXJldHVybiAtMTsKPiAgICAgCX0KPiAJcmVxdWVzdC5iSW50
ZXJmYWNlQ2xhc3MgPSBrSU9VU0JGaW5kSW50ZXJmYWNlRG9udENhcmU7ICAgICAgICAgICAgIC8v
IHJlcXVlc3RlZCBjbGFzcwo+ICAgICAJcmVxdWVzdC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBrSU9V
U0JGaW5kSW50ZXJmYWNlRG9udENhcmU7ICAgICAgICAgIC8vIHJlcXVlc3RlZCBzdWJjbGFzcwo+
ICAgICAJcmVxdWVzdC5iSW50ZXJmYWNlUHJvdG9jb2wgPSBrSU9VU0JGaW5kSW50ZXJmYWNlRG9u
dENhcmU7ICAgICAgICAgIC8vIHJlcXVlc3RlZCBwcm90b2NvbAo+ICAgICAJcmVxdWVzdC5iQWx0
ZXJuYXRlU2V0dGluZyA9IGtJT1VTQkZpbmRJbnRlcmZhY2VEb250Q2FyZTsgICAgICAgICAgIC8v
IHJlcXVlc3RlZCBhbHQgc2V0dGluZwo+ICAgICAJZXJyID0gKCpwLT5kZXYpLT5DcmVhdGVJbnRl
cmZhY2VJdGVyYXRvcihwLT5kZXYsICZyZXF1ZXN0LCAmaXRlcmF0b3IpOwo+ICAgICAJaWYgKGVy
cikKPiAgICAgCXsKPiAJCXJlcG9ydChSUFRfRVJSLCAiJXM6IFVuYWJsZSB0byBjcmVhdGUgaW50
ZXJmYWNlIGl0ZXJhdG9yIixkcnZ0aGlzLT5uYW1lKTsKPiAgICAgICAgICAgICAgICAJcmV0dXJu
IC0xOwo+ICAgICAJfQo+IAkvLyBUT0RPOiBDaGVjayBmb3IgbW9yZSB0aGFuIDEgSW50ZXJmYWNl
IChJIGRvbid0IHRoaW5rIHRoZXJlIHdpbGwgRVZFUiBiZSBvbmUgISEhKQo+IAkvLyBJZiB0aGVy
ZSBpcyBtb3JlIHRoYW4gMSBJbnRlcmZhY2UgdGhpcyB3aWxsIGJsb3cgdXAgISEhCj4gCXdoaWxl
ICggKGludHJlZiA9IElPSXRlcmF0b3JOZXh0KGl0ZXJhdG9yKSkgKQo+ICAgICAJewo+IAkJcmVw
b3J0KFJQVF9ERUJVRywgIiVzOiBGb3VuZCBpbnRlcmZhY2UgJXAiLGRydnRoaXMtPm5hbWUsICh2
b2lkICopaW50cmVmKTsKPiAgICAgICAgICAgICAgICAgaW5pdGludGVyZmFjZShpbnRyZWYsZHJ2
dGhpcyk7Cj4gICAgICAgICAgICAgICAgIElPT2JqZWN0UmVsZWFzZShpbnRyZWYpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgbmVlZCB0aGlzIHJlZmVyZW5jZQo+
ICAgICAJfQo+IAo+IAlyZXR1cm4gMTsKPiB9Cj4gCj4gI2VuZGlmIC8vIERhcndpbiBzcGVjaWZp
YyBmdW5jdGlvbnMKPiAKMTMzYzMzOSwzNDEKPCAJcC0+aW1vbl9mZCA9IC0xOwotLS0KPiAjaWZu
ZGVmIERBUldJTgo+IAlwLT5pbW9uX2ZkID0gTlVMTDsKPiAjZW5kaWYKMTQxYTM1MAo+ICNpZm5k
ZWYgREFSV0lOCjE1M2EzNjMsNDI2Cj4gI2Vsc2UKPiAKPiAgICAgCVNJbnQzMiB2ZW5kb3IgPSBk
cnZ0aGlzLT5jb25maWdfZ2V0X2ludChkcnZ0aGlzLT5uYW1lLCAiVmVuZG9yIiwgMCxrT3VyVmVu
ZG9ySUQpOwo+ICAgICAJU0ludDMyIHByb2R1Y3QgPSBkcnZ0aGlzLT5jb25maWdfZ2V0X2ludChk
cnZ0aGlzLT5uYW1lLCAiUHJvZHVjdCIsIDAsa091clByb2R1Y3RJRCk7Cj4gCj4gCj4gCWlvX2l0
ZXJhdG9yX3QJaXRlcmF0b3I9MDsKPiAJaW9fc2VydmljZV90CWRldmljZXJlZjsKPiAJQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBkaWN0Owo+IAlrZXJuX3JldHVybl90IGVycjsKPiAJQ0ZOdW1iZXJS
ZWYgcmVmOwo+IAlpbnQgZm91bmQ9MDsKPiAKPiAgICAgICAgCXAtPmtleV90aW1lb3V0ICA9IGRy
dnRoaXMtPmNvbmZpZ19nZXRfaW50KCBkcnZ0aGlzLT5uYW1lLCAiS2V5VGltZW91dCIsIDAsIDUw
MCAgKTsgLy8gNTAwbXMgZGVmYXVsdAo+IAo+IAllcnI9SU9NYXN0ZXJQb3J0KE1BQ0hfUE9SVF9O
VUxMLCAmcC0+bWFzdGVyKTsKPiAJaWYgKGVyciB8fCAhcC0+bWFzdGVyKQo+ICAgICAJewo+IAkJ
cmVwb3J0KFJQVF9FUlIsICIlczogQ291bGRuJ3QgY3JlYXRlIGEgbWFzdGVyIElPS2l0IFBvcnQg
KCUwOHgpIiwgZHJ2dGhpcy0+bmFtZSxlcnIpOwo+ICAgICAgICAgCXJldHVybiAtMTsKPiAgICAg
CX0KPiAJcmVwb3J0KFJQVF9JTkZPLCAiJXM6IExvb2tpbmcgZm9yIGRldmljZSBtYXRjaGluZyB2
ZW5kb3IgSUQ9JWxkIGFuZCBwcm9kdWN0IElEPSVsZCIsZHJ2dGhpcy0+bmFtZSwgdmVuZG9yLHBy
b2R1Y3QpOwo+IAkvLyBTZXQgdXAgdGhlIG1hdGNoaW5nIGNyaXRlcmlhIGZvciB0aGUgZGV2aWNl
cyB3ZSdyZSBpbnRlcmVzdGVkIGluCj4gICAgIAlkaWN0ID0gSU9TZXJ2aWNlTWF0Y2hpbmcoa0lP
VVNCRGV2aWNlQ2xhc3NOYW1lKTsgICAgLy8gQ3JlYXRlIGRpY3Rpb25hcnkgb2YgZGV2aWNlcwo+
ICAgICAJaWYgKCFkaWN0KQo+ICAgICAJewo+IAkJcmVwb3J0KFJQVF9FUlIsICIlczogQ2FuJ3Qg
Y3JlYXRlIGEgVVNCIG1hdGNoaW5nIGRpY3Rpb25hcnkiLGRydnRoaXMtPm5hbWUpOwo+ICAgICAg
ICAgCW1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIHAtPm1hc3Rlcik7Cj4g
ICAgICAgICAJcmV0dXJuIC0xOwo+ICAgICAJfQo+IAlyZWYgPSBDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmdmVuZG9yKTsKPiAgICAgCWlm
ICghcmVmKQo+ICAgICAJewo+IAkJcmVwb3J0KFJQVF9FUlIsICIlczogQ2FuJ3QgY3JlYXRlIGEg
cmVmIGZvciB2ZW5kb3IiLGRydnRoaXMtPm5hbWUpOwo+ICAgICAgICAgCXJldHVybiAtMTsKPiAg
ICAgCX0KPiAgICAgCUNGRGljdGlvbmFyeUFkZFZhbHVlKGRpY3QsIENGU1RSKGtVU0JWZW5kb3JJ
RCksIHJlZik7Cj4gICAgIAlDRlJlbGVhc2UocmVmKTsKPiAgICAgCXJlZiA9IDA7Cj4gICAgIAly
ZWYgPSBDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJU
eXBlLCAmcHJvZHVjdCk7Cj4gICAgIAlpZiAoIXJlZikKPiAgICAgCXsKPiAJCXJlcG9ydChSUFRf
RVJSLCAiJXM6IENhbid0IGNyZWF0ZSBhIHJlZiBmb3IgcHJvZHVjdCIsZHJ2dGhpcy0+bmFtZSk7
Cj4gICAgICAgICAJcmV0dXJuIC0xOwo+ICAgICAJfQo+ICAgICAJQ0ZEaWN0aW9uYXJ5QWRkVmFs
dWUoZGljdCwgQ0ZTVFIoa1VTQlByb2R1Y3RJRCksIHJlZik7Cj4gICAgIAlDRlJlbGVhc2UocmVm
KTsKPiAgICAgCXJlZiA9IDA7Cj4gIAllcnIgPSBJT1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2Vz
KHAtPm1hc3RlciwgZGljdCwgJml0ZXJhdG9yKTsKPiAgICAgCWRpY3QgPSAwOyAvLyB0aGlzIHdh
cyBjb25zdW1lZCBieSB0aGUgYWJvdmUgY2FsbAo+IAo+IAl3aGlsZSAoKGRldmljZXJlZiA9IElP
SXRlcmF0b3JOZXh0KGl0ZXJhdG9yKSkpCj4gCXsKPiAJCWZvdW5kPTE7Cj4gCQlyZXBvcnQoUlBU
X0lORk8sICIlczogRm91bmQgbWF0Y2hpbmcgZGV2aWNlICVwOiBDb25maWd1cmluZyBmb3IgaW5w
dXQvb3V0cHV0IiwgZHJ2dGhpcy0+bmFtZSwgZGV2aWNlcmVmKTsKPiAJCS8vIE5vdyB3ZSBuZWVk
IHRvIGluaXRhaWxpemUgZGV2aWNlIGFuZCByZWxlYXNlIHRoZSByZWZlcmVuY2UKPiAJCS8vIFRP
RE86IGNoZWNrIGZvciB3aGV0aGVyIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGRldmljZSAuLi4KPiAJ
CWlmICghaW5pdGRldmljZShkZXZpY2VyZWYsZHJ2dGhpcykpCj4gCSAgICAJewo+IAkJCXJlcG9y
dChSUFRfRVJSLCAiJXM6IEVycm9yIGR1cmluZyBkZXZpY2UgaW5pdCAoc2VlIHByZXZpb3VzIGVy
cm9ycykiLGRydnRoaXMtPm5hbWUpOwo+ICAgICAJCX0KPiAJCUlPT2JqZWN0UmVsZWFzZShkZXZp
Y2VyZWYpOwkJCj4gCj4gCX0KMTU0YTQyOCw0NzEKPiAJSU9PYmplY3RSZWxlYXNlKGl0ZXJhdG9y
KTsKPiAJCj4gCWlmKCFmb3VuZCkKPiAJewo+IAkJLy8gV2UgbmVlZCB0byBiYWlsIG91dCBub3cg
YW5kIHJldHVybiBhbiBlcnJvciBvdGhlcndpc2Ugd2UKPiAJCS8vIFdpbGwgZ2V0IGEgYnVzIGVy
cm9yIHdoZW4gTENEZCB0cmllcyB0byB0YWxrIHRvIHRoZSBkcml2ZXIKPiAJCXJlcG9ydChSUFRf
RVJSLCAiJXM6IE5vIGRldmljZSBtYXRjaGluZyB2ZW5kb3IgSUQ9JWxkIGFuZCBwcm9kdWN0IElE
PSVsZCBmb3VuZC4iLGRydnRoaXMtPm5hbWUsIHZlbmRvcixwcm9kdWN0KTsKPiAJCXJldHVybiAt
MTsKPiAJfWVsc2UgaWYoZm91bmQ+MSkKPiAJewo+IAkJcmVwb3J0KFJQVF9FUlIsICIlczogRm91
bmQgbW9yZSB0aGFuIG9uZSBkZXZpY2UgbWF0Y2hpbmcgdmVuZG9yIElEPSVsZCBhbmQgcHJvZHVj
dCBJRD0lbGQuIFBsZWFzZSByZW1vdmUgb25lLiIsZHJ2dGhpcy0+bmFtZSwgdmVuZG9yLHByb2R1
Y3QpOwo+IAkJcmV0dXJuIC0xOwo+IAl9CQo+IAo+IAkvLyBJZiB3ZSBnb3QgaGVyZSB0aGVuIHdl
IGhhdmUgT05FIHZhbGlkIGRldmljZQo+IAkvLyBMZXRzIGp1c3QgY29uZmlndXJlIHNvbWUgc2V0
dGluZ3M6Cj4gCS8vIERvIHNvbWUgdGhpbmdzIHRvIGRldGVybWluZSBkZXZpY2UgZnVuY3Rpb25h
bGl0eSBiYXNlZCBvbiBhIGxvb2t1cCB0YWJsZToKPiAKPiAJdW5zaWduZWQgc2hvcnQgKmlkX2xp
c3RfaXRlbTsKPiAKPiAJcC0+dmZkX3Byb3RvXzZwID0gRkFMU0U7Cj4gIAlpZF9saXN0X2l0ZW0g
PSB2ZmRfcHJvdG9fNnBfdmVuZG9yX2xpc3Q7Cj4gICAgICAgICB3aGlsZSAoKmlkX2xpc3RfaXRl
bSkgewo+ICAgICAgICAgCWlmICgqaWRfbGlzdF9pdGVtKysgPT0gdmVuZG9yKSB7Cj4gCQkJcmVw
b3J0KFJQVF9ERUJVRywgIiVzOiBWZW5kb3IgJWxkIHJlcXVpcmVzIDZ0aCBwYWNrZXQiLCBkcnZ0
aGlzLT5uYW1lLHZlbmRvcik7Cj4gICAgICAgICAgICAgICAgIAlwLT52ZmRfcHJvdG9fNnAgPSBU
UlVFOwo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgICAgICAgICB9
Cj4gICAgICAgICB9Cj4gCj4gCXAtPmlyX29uYm9hcmRfZGVjb2RlID0gRkFMU0U7Cj4gICAgICAg
ICBpZF9saXN0X2l0ZW0gPSBpcl9vbmJvYXJkX2RlY29kZV9wcm9kdWN0X2xpc3Q7Cj4gICAgICAg
ICB3aGlsZSAoKmlkX2xpc3RfaXRlbSkgewo+ICAgICAgICAgCWlmICgqaWRfbGlzdF9pdGVtKysg
PT0gcHJvZHVjdCkgewo+IAkJCXJlcG9ydChSUFRfREVCVUcsICIlczogRGV2aWNlICVsZCBwZXJm
b3JtcyBvbmJvYXJkIGRlY29kaW5nIGZvciBrZXlzIGV0YyIsIGRydnRoaXMtPm5hbWUscHJvZHVj
dCk7Cj4gICAgICAgICAgICAgICAgIAlwLT5pcl9vbmJvYXJkX2RlY29kZSA9IFRSVUU7Cj4gICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gICAgICAgICAgICAgICAgIH0KPiAgICAgICAg
IH0KPiAKPiAKPiAKPiAJCj4gI2VuZGlmCjE4OGE1MDYKPiAjaWZuZGVmIERBUldJTgoxOTBhNTA5
LDUyMgo+ICNlbHNlCj4gCj4gCQlyZXBvcnQoUlBUX0lORk8sICIlczogQ2xvc2luZyBhbmQgcmVs
ZWFzaW5nIGRldmljZS9pbnRlcmZhY2UiLGRydnRoaXMtPm5hbWUpOwo+IAkJaWYgKHAtPmludGYp
Cj4gCQl7CQo+ICAJIAkJKHZvaWQpICgqcC0+aW50ZiktPlVTQkludGVyZmFjZUNsb3NlKHAtPmlu
dGYpOwo+ICAgICAgICAgCQkodm9pZCkgKCpwLT5pbnRmKS0+UmVsZWFzZShwLT5pbnRmKTsKPiAK
PiAJCX0KPiAJCWlmIChwLT5kZXYpCj4gCQl7CQo+IAkJCSgqcC0+ZGV2KS0+VVNCRGV2aWNlQ2xv
c2UocC0+ZGV2KTsKPiAJICAgICAgICAJKCpwLT5kZXYpLT5SZWxlYXNlKHAtPmRldik7Cj4gCQl9
CjE5MWE1MjQsNTI2Cj4gCQlpZiAocC0+bWFzdGVyKQo+IAkJCW1hY2hfcG9ydF9kZWFsbG9jYXRl
KG1hY2hfdGFza19zZWxmKCksIHAtPm1hc3Rlcik7CQkJCQo+ICNlbmRpZgoyMTZhNTUyLDYzNAo+
ICAqIEdldCBhbnkga2V5cyBpbnB1dCAocG9sbGVkKQo+ICAqIFxwYXJhbSBkcnZ0aGlzICBQb2lu
dGVyIHRvIGRyaXZlciBzdHJ1Y3R1cmUuCj4gICogXHJldHVybiAgQ29uc3RhbnQgc3RyaW5nIHdp
dGggaW5mb3JtYXRpb24uCj4gICovCj4gTU9EVUxFX0VYUE9SVCBjb25zdCBjaGFyICogaW1vbl9n
ZXRfa2V5IChEcml2ZXIgKmRydnRoaXMpCj4gewo+ICAJUHJpdmF0ZURhdGEgKnAgPSBkcnZ0aGlz
LT5wcml2YXRlX2RhdGE7Cj4gCUlPUmV0dXJuIGVycjsKPiAgICAgICAgIHVuc2lnbmVkIGNoYXIg
cnhfYnVmWzNdOwo+IAlVSW50MzIgbGVuPTg7Cj4gCXJlcG9ydChSUFRfREVCVUcsICIlczogZ2V0
X2tleSBzdGFydGVkIixkcnZ0aGlzLT5uYW1lKTsKPiAJZXJyICA9ICgqcC0+aW50ZiktPlJlYWRQ
aXBlKHAtPmludGYsIHAtPm91dHBpcGUsIHJ4X2J1ZiwmbGVuKTsKPiAJaWYgKGVyciB8fCBsZW4h
PTgpCj4gCXsKPiAJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGdldF9rZXkgcmVjZWl2ZWQgZXJyb3Ig
KCVkIGJ5dGVzIHJlY2VpdmVkKTogJXMiLGRydnRoaXMtPm5hbWUsbGVuKTsKPiAJfSAKPiAKPiAJ
IC8qIGlNT04gMi40RyBhc3NvY2lhdGUgZnJhbWUgKi8KPiAgICAgICAgIGlmIChyeF9idWYgWzBd
ID09IDB4MDAgJiYKPiAgICAgICAgICAgICAvKiBSRUZJRCAqLwo+ICAgICAgICAgICAgIHJ4X2J1
ZiBbMl0gPT0gMHhGRiAmJgo+ICAgICAgICAgICAgIHJ4X2J1ZiBbM10gPT0gMHhGRiAmJgo+ICAg
ICAgICAgICAgIHJ4X2J1ZiBbNF0gPT0gMHhGRiYmCj4gICAgICAgICAgICAgcnhfYnVmIFs1XSA9
PSAweEZGICYmICAgICAgICAgICAgICAgICAgICAgICAvKiBpTU9OIDIuNEcgKi8KPiAgICAgICAg
ICAgICAoKHJ4X2J1ZiBbNl0gPT0gMHg0RSAmJiByeF9idWYgWzddID09IDB4REYpIHx8IC8qIExU
ICovCj4gICAgICAgICAgICAgIChyeF9idWYgWzZdID09IDB4NUUgJiYgcnhfYnVmIFs3XSA9PSAw
eERGKSApKSAvKiBEVCAqLwo+IAl7Cj4gCQlyZXBvcnQoUlBUX1dBUk5JTkcsICIlczogV2Fybmlu
ZyByZW1vdGUgYXNzb2NpYXRlZCBmcmFtZSByZWNlaXZlZCByZWZpZD0lMDJYIixkcnZ0aGlzLT5u
YW1lLHJ4X2J1ZlsxXSk7Cj4gICAgICAgICB9Cj4gCj4gICAgICAgICBpZiAocnhfYnVmWzddPT0g
MHhGRikKPiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgLyogZmlsbGVyIGZy
YW1lLCBubyBkYXRhIGhlcmUgKi8KPiAKPiAgICAgICAgIGlmIChyeF9idWYgWzBdID09IDB4RkYg
JiYKPiAgICAgICAgICAgICByeF9idWYgWzFdID09IDB4RkYgJiYKPiAgICAgICAgICAgICByeF9i
dWYgWzJdID09IDB4RkYgJiYKPiAgICAgICAgICAgICByeF9idWYgWzNdID09IDB4RkYgJiYKPiAg
ICAgICAgICAgICByeF9idWYgWzRdID09IDB4RkYgJiYKPiAgICAgICAgICAgICByeF9idWYgWzVd
ID09IDB4RkYgJiYgICAgICAgICAgICAgICAgICAgICAvKiBpTU9OIDIuNEcgKi8KPiAgICAgICAg
ICAgICAoKHJ4X2J1ZiBbNl0gPT0gMHg0RSAmJiByeF9idWYgWzddID09IDB4QUYpIHx8IC8qIExU
ICovCj4gICAgICAgICAgICAgIChyeF9idWYgWzZdID09IDB4NUUgJiYgcnhfYnVmIFs3XSA9PSAw
eEFGKSApKSAvKiBEVCAqLwo+IAl7Cj4gICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAg
ICAgIC8qIGZpbGxlciBmcmFtZSwgbm8gZGF0YSBoZXJlICovCj4gCX0KPiAKPiAKPiAJLy8gU29y
cnkgYnV0IG1pbmUgZG9lcyBvbmJvYXJkIGRlY29kaW5nIChJIG1heSBhZGQgdGhlIGRlY29kaW5n
IGlmIEkgZ2V0IG9uZSB0aGF0IGRvZXNuJ3QgCj4gCS8vIElmIHlvdSB3YW50IHRvIGFkZCBpdCwg
dGhlIGNvZGUgaXMgaW4gdGhlIGxpcmNfaW1vbi5jIGRyaXZlciBpbmNsdWRlZCB3aXRoaW4gbGly
Ywo+IAlpZiAocC0+aXJfb25ib2FyZF9kZWNvZGUpCj4gCXsKPiAJCXJlcG9ydChSUFRfREVCVUcs
ICIlczogUmVjZWl2ZWQ6IFslMDJ4XSBbJTAyeF0gWyUwMnhdIFslMDJ4XSBbJTAyeF0gWyUwMnhd
IFslMDJ4XSBbJTAyeF0iLGRydnRoaXMtPm5hbWUscnhfYnVmWzBdLHJ4X2J1ZlsxXSxyeF9idWZb
Ml0scnhfYnVmWzNdLHJ4X2J1Zls0XSxyeF9idWZbNV0scnhfYnVmWzZdLHJ4X2J1Zls3XSk7CQkK
PiAJICAgICAgICBpZiAocnhfYnVmIFsyXSA9PSAweDAwICYmCj4gCSAgICAgICAgICAgIHJ4X2J1
ZiBbM10gPT0gMHhGRiAmJgo+ICAgICAgICAgCSAgICByeF9idWYgWzRdID09IDB4RkYgJiYKPiAg
ICAgICAgIAkgICAgcnhfYnVmIFs1XSA9PSAweEZGICYmCj4gICAgICAgICAJICAgIHJ4X2J1ZiBb
Nl0gPT0gMHgzNSAmJgo+ICAgICAgICAgICAgIAkgICAgcnhfYnVmIFs3XSA9PSAweEVFICYmCj4g
ICAgICAgICAgICAgCSAgICByeF9idWYgWzVdID09IDB4RkYpIAo+IAkJewo+IAkJCS8vIEtub2Ig
aGFzIG1vdmVkICggSSBkb24ndCB0aGluayBpdCBkb2VzIGFueXRoaW5nIGVsc2UuCj4gCQkJaWYg
KHJ4X2J1ZlswXSA+IDB4MCAmJiByeF9idWZbMV0gPT0gMHgwKQo+IAkJCXsKPiAJCQkJcmV0dXJu
ICJNaW51cyI7Cj4gCQkJfQo+IAkJCWVsc2UKPiAJCQl7Cj4gCQkJCXJldHVybiAiUGx1cyI7Cj4g
CQkJfQo+IAkJfQkKPiAKPiAJCQo+IAo+IAl9Cj4gCj4gCXJldHVybiBOVUxMOwkKPiB9Cj4gCj4g
Cj4gCj4gCj4gCj4gCj4gLyoqCjIzNWM2NTMKPCAKLS0tCj4gI2lmbmRlZiBEQVJXSU4KMjM2YTY1
NSw3MDMKPiAjZWxzZQo+IAkvLyBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGhl
cmUgd2UgbmVlZCB0byBhY3R1YWxseSBkaXNwbGF5IHRoZSB0ZXh0ICEhISEKPiAJSU9SZXR1cm4g
a3I7Cj4gCWNoYXIgZGF0YV9idWZbMzVdOwo+ICAgICAgICAgY2hhciB0eF9idWZbN107Cj4gCWlu
dCBvZmZzZXQsc2VxLGk7Cj4gCWlmICgocC0+d2lkdGggKiBwLT5oZWlnaHQpID4gMzIpCj4gCXsJ
Cj4gCQlyZXBvcnQoUlBUX0lORk8sICIlczogTWVzc2FnZSBzaXplIGxhcmdlciB0aGFuIDMyIGNo
YXJzICglZCkiLGRydnRoaXMtPm5hbWUsc2l6ZW9mKHAtPmZyYW1lYnVmKSk7Cj4gCX0KPiAJZm9y
IChpPShwLT53aWR0aCpwLT5oZWlnaHQpO2k8MzI7aSsrKQo+ICAgICAgICAgICAgICAgICBkYXRh
X2J1ZltpXT0nICc7Cj4gICAgICAgICBmb3IgKGk9MzI7aTwzNTtpKyspCj4gICAgICAgICAgICAg
ICAgIGRhdGFfYnVmW2ldPTB4RkY7Cj4gCj4gICAgICAgICBvZmZzZXQ9c2VxPTA7Cj4gICAgICAg
ICBtZW1jcHkoZGF0YV9idWYscC0+ZnJhbWVidWYsKHAtPndpZHRoKnAtPmhlaWdodCkpOwo+IAkK
PiAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgCj4gCQltZW1jcHkodHhfYnVmLGRhdGFfYnVm
K29mZnNldCw3KTsKPiAgICAgICAgICAgICAgICAgdHhfYnVmWzddPSh1bnNpZ25lZCBjaGFyKSBz
ZXE7Cj4gICAgICAgICAgICAgICAgIGtyID0gKCpwLT5pbnRmKS0+V3JpdGVQaXBlKHAtPmludGYs
IHAtPmlucGlwZSwgdHhfYnVmLDgpOwo+ICAgICAgICAgICAgICAgICBpZiAoa3IgIT0ga0lPUmV0
dXJuU3VjY2VzcykKPiAgICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9ydChSUFRfRVJSLCIlczogZG93bmxvYWQgdG8gZGV2aWNlIHJldHVybmVkIGVycm9yIDB4
JXgiLGRydnRoaXMtPm5hbWUsIGtyKTsKPiAJCQlyZXR1cm47IC8vIFdyaXRlIGZhaWxlZCBzbyBu
byBwb2ludCBjb250aW51aW5nCj4gICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgICAg
ZWxzZQo+ICAgICAgICAgICAgICAgICB7Cj4gCQkJc2VxICs9MjsKPiAJCQlvZmZzZXQrPTc7Cj4g
CQl9Cj4gCX0gd2hpbGUgKG9mZnNldCA8IDM1KTsKPiAgCQo+IAlpZiAocC0+dmZkX3Byb3RvXzZw
KQo+IAl7Cj4gCQltZW1jcHkodHhfYnVmLHZmZF9wYWNrZXQ2LDcpOwo+ICAgICAgICAgCXR4X2J1
Zls3XT0odW5zaWduZWQgY2hhcikgc2VxOwo+ICAgICAgICAgCWtyID0gKCpwLT5pbnRmKS0+V3Jp
dGVQaXBlKHAtPmludGYsIHAtPmlucGlwZSwgdHhfYnVmLDgpOwo+ICAgICAgICAgCWlmIChrciAh
PSBrSU9SZXR1cm5TdWNjZXNzKQo+ICAgICAgICAgCXsKPiAgICAgICAgIAkJcmVwb3J0KFJQVF9F
UlIsIiVzOiBkb3dubG9hZCBvZiA2dGggcGFja2V0IHRvIGRldmljZSByZXR1cm5lZCBlcnIgMHgl
eCIsIGRydnRoaXMtPm5hbWUsIGtyKTsKPiAJCQlyZXR1cm47Cj4gCQl9Cj4gCX0KPiAKPiAjZW5k
aWYKPiAKPiAK

------_=_NextPart_001_01C7C2E0.90C29E3A--