chore: import from github.com/twx284558/ledcontrol

This commit is contained in:
jason committed 2026-05-11 08:30:56 -05:00
1 parent d2f3824ca1
commit 2dac03515c
1 file changed
+117
@@ -0,0 +1,117 @@
cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQubWFuYWdlcjsKCmltcG9ydCBhbmRyb2lkLmNvbnRl
bnQuQ29udGV4dDsKaW1wb3J0IGFuZHJvaWQuc2VyaWFscG9ydC5tb2RlbC5QcmludGVyUmVxdWVz
dE1vZGVsOwppbXBvcnQgYW5kcm9pZC5zZXJpYWxwb3J0Lm1vZGVsLlByaW50ZXJSZXNwb25zZU1v
ZGVsOwppbXBvcnQgYW5kcm9pZC5zZXJpYWxwb3J0LnV0aWxzLkxvZ2dlcjsKaW1wb3J0IGFuZHJv
aWQudXRpbC5Mb2c7CgpwdWJsaWMgY2xhc3MgVWFydFByb3RvY29sTWFuYWdlciB7CiAgICBwcml2
YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICBwcml2YXRlIHN0YXRpYyBVYXJ0UHJvdG9j
b2xNYW5hZ2VyIG1VYXJ0UHJvdG9jb2xNYW5hZ2VyOwoKICAgIC8vR2V0dGVyL1NldHRlciBWYXJp
YWJsZXMKICAgIHByaXZhdGUgZmluYWwgUHJpbnRlclJlcXVlc3RNb2RlbCBtUHJpbnRlclJlcXVl
c3RNb2RlbDsKCiAgICAvL1RvdGFsIGJ5dGVzCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBU
T1RBTF9CWVRFUyA9IDY0OwoKICAgIC8vVGFzayBJZHMKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg
aW50IFVBUlRfUFJJTlRfUkVRVUVTVF9QUk9DRVNTID0gMTAxOwogICAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgVUFSVF9TVEFSVF9QUk9DRVNTID0gMTAyOwogICAgcHVibGljIHN0YXRpYyBmaW5h
bCBpbnQgVUFSVF9IRUFSVF9CRUFUX1BST0NFU1MgPSAxMDM7CiAgICBwdWJsaWMgc3RhdGljIGZp
bmFsIGludCBVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUyA9IDEwNDsKICAgIHB1YmxpYyBzdGF0aWMg
ZmluYWwgaW50IFVBUlRfR09fUFJJTlRfUFJPQ0VTUyA9IDEwNTsKICAgIHB1YmxpYyBzdGF0aWMg
ZmluYWwgaW50IFVBUlRfRU5EX09GX1BSSU5UX1BST0NFU1MgPSAxMDY7CiAgICBwdWJsaWMgc3Rh
dGljIGZpbmFsIGludCBVQVJUX1BSSU5URVJfQ09PTElOR19QUk9DRVNTID0gMTA3OwogICAgcHVi
bGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9QUklOVF9NT1JFX1BST0NFU1MgPSAxMDg7CiAgICBw
dWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0FTS19GV19WRVJTSU9OX1BST0NFU1MgPSAxMDk7
CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX1BSSU5UX1JFU1RBUlRfUFJPQ0VTUyA9
IDIyMjsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZXX1VQR1JBREVfUkVRVUVT
VF9QUk9DRVNTID0gMjAxOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GV19HT19V
UEdSQURFX1BST0NFU1MgPSAyMDI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZX
X0dPX1VQR1JBREVfQUNLX1BST0NFU1MgPSAyMDM7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGlu
dCBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX1BST0NFU1MgPSAyMDQ7CiAgICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX0FDS19QUk9DRVNTID0gMjA1OwoKICAg
IC8vUHJpbnQgU1MgQ29tbWFuZAogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9TTUFS
VF9TSEVFVF9QUklOVF9QUk9DRVNTID0gMzAxOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQg
VUFSVF9TTUFSVF9TSEVFVF9FTkRfT0ZfUFJPQ0VTUyA9IDMwMjsKCiAgICAvL0ZhY3RvcnkgTW9k
ZQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9SRVFVRVNUX0NNRF9QUk9DRVNT
ID0gMzAxOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9SRVFVRVNUX0FDS19Q
Uk9DRVNTID0gMzAyOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9CVVJOX0lO
X0NNRF9QUk9DRVNTID0gMzAzOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9C
VVJOX0lOX0FDS19QUk9DRVNTID0gMzA0OwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFS
VF9GTV9DQU1FUkFfVEVTVF9DTURfUFJPQ0VTUyA9IDMwNTsKICAgIHB1YmxpYyBzdGF0aWMgZmlu
YWwgaW50IFVBUlRfRk1fQ0FNRVJBX1RFU1RfQUNLX1BST0NFU1MgPSAzMDY7CiAgICBwdWJsaWMg
c3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX0ZRQ19DTURfUFJPQ0VTUyA9IDMwNzsKICAgIHB1Ymxp
YyBzdGF0aWMgZmluYWwgaW50IFVBUlRfRk1fRlFDX0FDS19QUk9DRVNTID0gMzA4OwogICAgcHVi
bGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9TSElQUElOR19DTURfUFJPQ0VTUyA9IDMwOTsK
ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVBUlRfRk1fU0hJUFBJTkdfQUNLX1BST0NFU1Mg
PSAzMTA7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX1ZFUl9BU0tfQ01EX1BS
T0NFU1MgPSAzMTE7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX1ZFUl9BU0tf
QUNLX1BST0NFU1MgPSAzMTI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX1JF
U0VUX0NNRF9QUk9DRVNTID0gMzEzOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9G
TV9SRVNFVF9BQ0tfUFJPQ0VTUyA9IDMxNDsKCgogICAgLy9EZWZhdWx0IGJ5dGUKICAgIHB1Ymxp
YyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfQllURSA9IDB4MDA7CiAgICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBTVEFSVF9DT0RFX09ORSA9IDB4MUI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFs
IGludCBTVEFSVF9DT0RFX1RXTyA9IDB4MkE7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBT
VEFSVF9DT0RFX1RIUkVFID0gMHg0MzsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVJU
X0NPREVfRk9VUiA9IDB4NDE7CgoKCiAgICBwcml2YXRlIFVhcnRQcm90b2NvbE1hbmFnZXIoQ29u
dGV4dCBjb250ZXh0LCBCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICB0aGlzLm1Db250ZXh0ID0g
Y29udGV4dDsKICAgICAgICBtUHJpbnRlclJlcXVlc3RNb2RlbCA9IG5ldyBQcmludGVyUmVxdWVz
dE1vZGVsKCkuc2V0UHJvY2Vzc1Rhc2tJRChidWlsZGVyLmdldE1vZGVsKCkuZ2V0UHJvY2Vzc1Rh
c2tJRCgpKS5zZXRQYXlsb2FkKGJ1aWxkZXIuZ2V0TW9kZWwoKS5nZXRQYXlsb2FkKCkpLnNldE51
bWJlck9mQ29waWVzKGJ1aWxkZXIuZ2V0TW9kZWwoKS5nZXROdW1iZXJPZkNvcGllcygpKS5zZXRG
aWxlTmFtZTEoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lMSgpKS5zZXRGaWxlTmFtZTMo
YnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lMygpKS5zZXRGaWxlTmFtZTQoYnVpbGRlci5n
ZXRNb2RlbCgpLmdldEZpbGVOYW1lNCgpKS5zZXRGaWxlTmFtZTUoYnVpbGRlci5nZXRNb2RlbCgp
LmdldEZpbGVOYW1lNSgpKS5zZXRGaWxlTmFtZTYoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVO
YW1lNigpKS5zZXRGaWxlTmFtZTcoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lNygpKS5z
ZXRGaWxlTmFtZTgoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lOCgpKTsKICAgIH0KCiAg
ICBwdWJsaWMgc3RhdGljIFVhcnRQcm90b2NvbE1hbmFnZXIgZ2V0SW5zdGFuY2UoQ29udGV4dCBj
b250ZXh0LCBCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICByZXR1cm4gbmV3IFVhcnRQcm90b2Nv
bE1hbmFnZXIoY29udGV4dCwgYnVpbGRlcik7CiAgICB9CgogICAgcHVibGljIENvbnRleHQgZ2V0
Q29udGV4dCgpIHsKICAgICAgICByZXR1cm4gbUNvbnRleHQ7CiAgICB9CgoKICAgIHB1YmxpYyBz
dGF0aWMgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250
ZXh0OwogICAgICAgIHByaXZhdGUgUHJpbnRlclJlcXVlc3RNb2RlbCBtb2RlbDsKCiAgICAgICAg
cHVibGljIEJ1aWxkZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgICAgIHRoaXMubUNvbnRl
eHQgPSBjb250ZXh0OwogICAgICAgICAgICBtb2RlbCA9IG5ldyBQcmludGVyUmVxdWVzdE1vZGVs
KCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQcmludGVyUmVxdWVzdE1v
ZGVsKFByaW50ZXJSZXF1ZXN0TW9kZWwgbW9kZWwpIHsKICAgICAgICAgICAgdGhpcy5tb2RlbCA9
IG1vZGVsOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHB1Ymxp
YyBQcmludGVyUmVxdWVzdE1vZGVsIGdldE1vZGVsKCkgewogICAgICAgICAgICByZXR1cm4gbW9k
ZWw7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgVWFydFByb3RvY29sTWFuYWdlciBidWlsZCgp
IHsKICAgICAgICAgICAgcmV0dXJuIFVhcnRQcm90b2NvbE1hbmFnZXIuZ2V0SW5zdGFuY2UobUNv
bnRleHQsIHRoaXMpOwogICAgICAgIH0KCiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgU3RhcnQg
Q29kZSBhbmQgQ3VzdG9tZXIgQ29kZQogICAgICoKICAgICAqIEByZXR1cm4gYnl0ZSBhcnJheQog
ICAgICovCiAgICBwdWJsaWMgYnl0ZVtdIGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKCkgewogICAg
ICAgIHJldHVybiBuZXcgYnl0ZVtdeyhieXRlKSAweDFCLCAoYnl0ZSkgMHgyQSwgKGJ5dGUpIDB4
NDMsIChieXRlKSAweDQxfTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEhlYXJ0QmVhdFBy
b3RvY29sKCkgewogICAgICAgIC8vMHgxQgkweDJBCTB4NDMJMHg0MQkweDAwCTB4MDEJMHgwNAkw
eDU1CiAgICAgICAgYnl0ZVtdIHF1ZXJ5RGF0YSA9IG5ldyBieXRlW1RPVEFMX0JZVEVTXTsKICAg
ICAgICBxdWVyeURhdGFbMF0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzBdOwogICAgICAg
IHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgcXVl
cnlEYXRhWzJdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsyXTsKICAgICAgICBxdWVyeURh
dGFbM10gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzNdOwogICAgICAgIHF1ZXJ5RGF0YVs0
XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVs1XSA9IChieXRlKSAweDAxOwogICAg
ICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweDA0OwogICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChi
eXRlKSAweDU1OwogICAgICAgIHF1ZXJ5RGF0YVs4XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1
ZXJ5RGF0YVs5XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVsxMF0gPSAoYnl0ZSkg
MHgwMDsKICAgICAgICBxdWVyeURhdGFbMTFdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlE
YXRhWzEyXSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVsxM10gPSAoYnl0ZSkgMHgw
MDsKICAgICAgICBxdWVyeURhdGFbMTRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRh
WzE1XSA9IChieXRlKSAweDAwOwoKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAg
IHB1YmxpYyBieXRlW10gZ2V0U3RhcnRVcFByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVy
eURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0
U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBnZXRTdGFy
dEFuZEN1c3RvbWVyQ29kZSgpWzFdOwogICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5k
Q3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgcXVlcnlEYXRhWzNdID0gZ2V0U3RhcnRBbmRDdXN0
b21lckNvZGUoKVszXTsKICAgICAgICBxdWVyeURhdGFbNF0gPSAoYnl0ZSkgMHgwMTsKICAgICAg
ICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNl0gPSAoYnl0
ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwMDsKICAgICAgICByZXR1
cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gc2VuZFByaW50UmVxdWVzdFBy
b3RvY29sKCkgewogICAgICAgIExvZ2dlci5kKCJOby5vZiBDb3A6ICIgKyBtUHJpbnRlclJlcXVl
c3RNb2RlbC5nZXROdW1iZXJPZkNvcGllcygpKTsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0g
bmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5k
Q3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0
b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVy
Q29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2Rl
KClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlE
YXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7
CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzhd
ID0gKGJ5dGUpIG1QcmludGVyUmVxdWVzdE1vZGVsLmdldE51bWJlck9mQ29waWVzKCk7CiAgICAg
ICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIHNlbmRJbWFnZUlu
Zm9Qcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxf
QllURVNdOwogICAgICAgIGlmIChtUHJpbnRlclJlcXVlc3RNb2RlbCAhPSBudWxsKSB7CiAgICAgICAgICAgIGJ5dGVbXSBhcnJheSA9IG1QcmludGVyUmVxdWVzdE1vZGVsLmdldEZpbGVOYW1lMSgpLmdldEJ5dGVzKCk7CiAgICAgICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgICAgIHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgICAgIHF1ZXJ5RGF0YVs0XSA9IChieXRlKSAweDAwOwogICAgICAgICAgICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDAxOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1hdGgubWluKGFycmF5Lmxlbmd0aCwgOCk7IGkrKykgeyBxdWVyeURhdGFbOCArIGldID0gYXJyYXlbaV07IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEdvUHJpbnRBQ0tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEVuZE9mUHJpbnRBQ0tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDM7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEZXVXBncmFkZVJlcXVlc3RQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDM7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEZXR29VcGdyYWRlQUNLUHJvdG9jb2woKSB7CiAgICAgICAgYnl0ZVtdIHF1ZXJ5RGF0YSA9IG5ldyBieXRlW1RPVEFMX0JZVEVTXTsKICAgICAgICBxdWVyeURhdGFbMF0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzBdOwogICAgICAgIHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgcXVlcnlEYXRhWzJdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsyXTsKICAgICAgICBxdWVyeURhdGFbM10gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzNdOwogICAgICAgIHF1ZXJ5RGF0YVs0XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVs1XSA9IChieXRlKSAweDAxOwogICAgICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweDAzOwogICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDAyOwogICAgICAgIHJldHVybiBxdWVyeURhdGE7CiAgICB9CgogICAgcHVibGljIGJ5dGVbXSBnZXRGV0VuZE9mVXBncmFkZUFDS1Byb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzFdOwogICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgcXVlcnlEYXRhWzNdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVszXTsKICAgICAgICBxdWVyeURhdGFbNF0gPSAoYnl0ZSkgMHgwMDsKICAgICAgICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNl0gPSAoYnl0ZSkgMHgwMzsKICAgICAgICBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwMzsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gZ2V0UHJpbnRlckNvb2xpbmdBQ0tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MEY7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGFza0Z3VmVyc2lvblByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBLine truncated
kYXRlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5kb0ZXRW5kT2ZVcGdyYWRlUHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfUFJJTlRFUl9DT09MSU5HX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IFByaW50SW1hZ2VQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLmRvUHJpbnRlcklzQ29vbGluZ1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0FTS19GV19WRVJTSU9OX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IFByaW50SW1hZ2VQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLmRvRldWZXJzaW9uUHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfU01BUlRfU0hFRVRfUFJJTlRfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gUHJpbnRJbWFnZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9QcmludFNtYXJ0U2hlZXRQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9TTUFSVF9TSEVFVF9FTkRfT0ZfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gUHJpbnRJbWFnZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9FbmRPZlNtYXJ0U2hlZXRQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9SRVFVRVNUX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VGTVJlcXVlc3RBQ0tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9CVVJOX0lOX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VCdXJuSW5BY2tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9GUUNfQ01EX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IEZhY3RvcnlNb2RlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5wYXJzZUZRQ0Fja1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZNX1NISVBQSU5HX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VTaGlwcGluZ0Fja1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZNX1ZFUl9BU0tfQ01EX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IEZhY3RvcnlNb2RlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5wYXJzZVZlcnNpb25Bc2tBY2tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9SRVNFVF9DTURfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gRmFjdG9yeU1vZGVQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLnBhcnNlVmVyc2lvbkFza0Fja1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZNX0NBTUVSQV9URVNUX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VDYW1lcmFBY2tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlTW9kZWw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGFza0lkTmFtZShpbnQgaWQpIHsKICAgICAgICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgICAgIGNhc2UgVUFSVF9QUklOVF9SRVFVRVNUX1BST0NFU1M6IHJldHVybiAiVUFSVF9QUklOVF9SRVFVRVNUX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfU1RBUlRfUFJPQ0VTUzogcmV0dXJuICJVQVJUX1NUQVJUX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfSEVBUlRfQkVBVF9QUk9DRVNTOiByZXR1cm4gIlVBUlRfSEVBUlRfQkVBVF9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUzogcmV0dXJuICJVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUyI7CiAgICAgICAgICAgIGNhc2UgVUFSVF9HT19QUklOVF9QUk9DRVNTOiByZXR1cm4gIlVBUlRfR09fUFJJTlRfUFJPQ0VTUyI7CiAgICAgICAgICAgIGNhc2UgVUFSVF9FTkRfT0ZfUFJJTlRfUFJPQ0VTUzogcmV0dXJuICJVQVJUX0VORF9PRl9QUklOVF9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX1BSSU5URVJfQ09PTElOR19QUk9DRVNTOiByZXR1cm4gIlVBUlRfUFJJTlRFUl9DT09MSU5HX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfUFJJTlRfTU9SRV9QUk9DRVNTOiByZXR1cm4gIlVBUlRfUFJJTlRfTU9SRV9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0FTS19GV19WRVJTSU9OX1BST0NFU1M6IHJldHVybiAiVUFSVF9BU0tfRldfVkVSU0lPTl9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX1VQR1JBREVfUkVRVUVTVF9QUk9DRVNTOiByZXR1cm4gIlVBUlRfRldfVVBHUkFERV9SRVFVRVNUX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfRldfR09fVVBHUkFERV9QUk9DRVNTOiByZXR1cm4gIlVBUlRfRldfR09fVVBHUkFERV9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX0dPX1VQR1JBREVfQUNLX1BST0NFU1M6IHJldHVybiAiVUFSVF9GV19HT19VUEdSQURFX0FDS19QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX1BST0NFU1M6IHJldHVybiAiVUFSVF9GV19FTkRfT0ZfVVBHUkFERV9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX0FDS19QUk9DRVNTOiByZXR1cm4gIlVBUlRfRldfRU5EX09GX1VQR1JBREVfQUNLX1BST0NFU1MiOwogICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gIlVOS05PV04iOwogICAgICAgIH0KICAgIH0KfQo=