Canon 30D dev - Bulb mode not working either in M mode
Sébastien Viel <[email protected]> Sat, 16 Mar 2024 21:23:33 +0000
| Newsgroups | gmane.comp.multimedia.gphoto.devel |
|---|---|
| Message-ID | <YQXPR01MB6090299EFE3B40A7E8F3441A902F2@YQXPR01MB6090.CANPRD01.PROD.OUTLOOK.COM> |
--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: multipart/alternative; boundary="_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_" --_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCknigJltIHJlLWludHJvZHVjaW5nIG15c2VsZiB0byBhc3Ryb3Bob3RvZ3JhcHkgYW5k IEkgd291bGQgbGlrZSB0byB1c2UgYW5kIG9sZCBDYW5vbiAzMEQgaW4gbXkgc2V0dXAuIEnigJlt IGhhdmluZyBhbiBpc3N1ZSB3aXRoIHRoZSBidWxiIG1vZGUsIGV2ZW4gaWYgdGhlIG1vZGVsIHdh c27igJl0IGRlZmluZWQgaW4gdGhlIGNhbm9uLmMgZmlsZSBvZiB0aGUgY29kZSwgZ1Bob3RvMiBj YW4gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZGUgYnV0IGNhbiBub3QgY2FwdHVyZSBkZSBwaWN0dXJl Lg0KDQpJIGhhdmUgdGhlIGNhbWVyYSwgSSDigJxjYW7igJ0gcHJvZ3JhbSBhIGJpdCBidXQgSSBy ZWFsbHkgd2FudCB0byBmaXggdGhpcyBpc3N1ZSBhc2FwLCBtYXliZSBiZWZvcmUgOCBvZiBBcHJp bCDwn5iJDQoNCkhlcmXigJlzIHRoZSBmaWxlcyB0aGF0IGNvdWxkIG1heWJlIGhlbHAuDQoNClJl Z2FyZHMsDQoNCg0KDQpTw6liYXN0aWVuIFZpZWwNCkVuc2VpZ25hbnQgZW4gaW5mb3JtYXRpcXVl DQpUZWNobmlxdWVzIGRlIGwnaW5mb3JtYXRpcXVlIOKAkyDDiWNvbGUgZHUgV2ViDQpzZWJhc3Rp ZW4udmllbEBjZWdlcHJkbC5jYTxtYWlsdG86c2ViYXN0aWVuLnZpZWxAY2VnZXByZGwuY2E+DQo0 MTggODYyLTY5MDMsIHBvc3RlIDI0MTENCg0K --_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m YWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAy IDQ7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWws IGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBjbTsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQt ZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVT O30NCnNwYW4uRW1haWxTdHlsZTE3DQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLWNvbXBvc2U7 DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9 DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LWZh bWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzt9 DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7DQoJbWFyZ2luOjcy LjBwdCA5MC4wcHQgNzIuMHB0IDkwLjBwdDt9DQpkaXYuV29yZFNlY3Rpb24xDQoJe3BhZ2U6V29y ZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFw ZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5kaWZd LS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+ DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48L3ht bD48IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkZSLUNBIiBsaW5rPSIjMDU2M0Mx IiB2bGluaz0iIzk1NEY3MiIgc3R5bGU9IndvcmQtd3JhcDpicmVhay13b3JkIj4NCjxkaXYgY2xh c3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1D QSI+SGksPGJyPg0KPGJyPg0KSeKAmW0gcmUtaW50cm9kdWNpbmcgbXlzZWxmIHRvIGFzdHJvcGhv dG9ncmFweSBhbmQgSSB3b3VsZCBsaWtlIHRvIHVzZSBhbmQgb2xkIENhbm9uIDMwRCBpbiBteSBz ZXR1cC4gSeKAmW0gaGF2aW5nIGFuIGlzc3VlIHdpdGggdGhlIGJ1bGIgbW9kZSwgZXZlbiBpZiB0 aGUgbW9kZWwgd2FzbuKAmXQgZGVmaW5lZCBpbiB0aGUgY2Fub24uYyBmaWxlIG9mIHRoZSBjb2Rl LCBnUGhvdG8yIGNhbiBkZXRlY3QgdGhlIGN1cnJlbnQgbW9kZSBidXQgY2FuIG5vdCBjYXB0dXJl DQogZGUgcGljdHVyZS48YnI+DQo8YnI+DQpJIGhhdmUgdGhlIGNhbWVyYSwgSSDigJxjYW7igJ0g cHJvZ3JhbSBhIGJpdCBidXQgSSByZWFsbHkgd2FudCB0byBmaXggdGhpcyBpc3N1ZSBhc2FwLCBt YXliZSBiZWZvcmUgOCBvZiBBcHJpbA0KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLUNBIiBzdHlsZT0i Zm9udC1mYW1pbHk6JnF1b3Q7U2Vnb2UgVUkgRW1vamkmcXVvdDssc2Fucy1zZXJpZiI+JiMxMjg1 MjE7PC9zcGFuPjxzcGFuIGxhbmc9IkVOLUNBIj48YnI+DQo8YnI+DQpIZXJl4oCZcyB0aGUgZmls ZXMgdGhhdCBjb3VsZCBtYXliZSBoZWxwLjxicj4NCjxicj4NClJlZ2FyZHMsPGJyPg0KPGJyPg0K PGJyPg0KPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g bGFuZz0iRU4tQ0EiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiZxdW90 O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzAwMzM2Njttc28tZmFyZWFzdC1sYW5ndWFn ZTpGUi1DQSI+U8OpYmFzdGllbiBWaWVsPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEwLjVwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMy MDIwMjA7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RlItQ0EiPjxicj4NCjwvc3Bhbj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNl cmlmO2NvbG9yOmdyYXk7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RlItQ0EiPkVuc2VpZ25hbnQgZW4g aW5mb3JtYXRpcXVlJm5ic3A7PGJyPg0KVGVjaG5pcXVlcyBkZSBsJ2luZm9ybWF0aXF1ZSDigJMg w4ljb2xlIGR1IFdlYjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjVwdDtmb250LWZh bWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMyMDIwMjA7bXNvLWZhcmVh c3QtbGFuZ3VhZ2U6RlItQ0EiPjxicj4NCjxhIGhyZWY9Im1haWx0bzpzZWJhc3RpZW4udmllbEBj ZWdlcHJkbC5jYSI+PHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPnNlYmFzdGllbi52aWVsQGNlZ2Vw cmRsLmNhPC9zcGFuPjwvYT48YnI+DQo0MTggODYyLTY5MDMsIHBvc3RlIDI0MTE8L3NwYW4+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDss c2Fucy1zZXJpZjtjb2xvcjpncmF5O21zby1mYXJlYXN0LWxhbmd1YWdlOkZSLUNBIj48bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwv cD4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K --_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_-- --_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: text/plain; name="canon-eos30d_Shutter_M.txt" Content-Description: canon-eos30d_Shutter_M.txt Content-Disposition: attachment; filename="canon-eos30d_Shutter_M.txt"; size=9144; creation-date="Sat, 16 Mar 2024 21:22:30 GMT"; modification-date="Sat, 16 Mar 2024 21:22:31 GMT" Content-Transfer-Encoding: base64 L21haW4vYWN0aW9ucy9zeW5jZGF0ZXRpbWUKTGFiZWw6IFN5bmNocm9uaXplIGNhbWVyYSBkYXRl IGFuZCB0aW1lIHdpdGggUEMKUmVhZG9ubHk6IDAKVHlwZTogVE9HR0xFCkN1cnJlbnQ6IDAKRU5E Ci9tYWluL2FjdGlvbnMvdWlsb2NrCkxhYmVsOiBVSSBMb2NrClJlYWRvbmx5OiAwClR5cGU6IFRP R0dMRQpDdXJyZW50OiAyCkVORAovbWFpbi9hY3Rpb25zL2Vvc21vdmllbW9kZQpMYWJlbDogTW92 aWUgTW9kZQpSZWFkb25seTogMApUeXBlOiBUT0dHTEUKQ3VycmVudDogMgpFTkQKL21haW4vYWN0 aW9ucy9vcGNvZGUKTGFiZWw6IFBUUCBPcGNvZGUKUmVhZG9ubHk6IDAKVHlwZTogVEVYVApDdXJy ZW50OiAweDEwMDEsMHhwYXJhbTEsMHhwYXJhbTIKRU5ECi9tYWluL3NldHRpbmdzL2RhdGV0aW1l CkxhYmVsOiBDYW1lcmEgRGF0ZSBhbmQgVGltZQpSZWFkb25seTogMApUeXBlOiBEQVRFCkN1cnJl bnQ6IDE3MTA2MDgyMDkKUHJpbnRhYmxlOiBTYXQgMTYgTWFyIDIwMjQgMDU6NTY6NDkgUE0gQ0VU CkhlbHA6IFVzZSAnbm93JyBhcyB0aGUgY3VycmVudCB0aW1lIHdoZW4gc2V0dGluZy4KCkVORAov bWFpbi9zZXR0aW5ncy9vd25lcm5hbWUKTGFiZWw6IE93bmVyIE5hbWUKUmVhZG9ubHk6IDAKVHlw ZTogVEVYVApDdXJyZW50OiB1bmtub3duCkVORAovbWFpbi9zZXR0aW5ncy9hdXRvcG93ZXJvZmYK TGFiZWw6IEF1dG8gUG93ZXIgT2ZmClJlYWRvbmx5OiAwClR5cGU6IFRFWFQKQ3VycmVudDogMTgw MApFTkQKL21haW4vc2V0dGluZ3MvY2FwdHVyZXRhcmdldApMYWJlbDogQ2FwdHVyZSBUYXJnZXQK UmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogSW50ZXJuYWwgUkFNCkNob2ljZTogMCBJ bnRlcm5hbCBSQU0KQ2hvaWNlOiAxIE1lbW9yeSBjYXJkCkVORAovbWFpbi9zZXR0aW5ncy9jYXB0 dXJlCkxhYmVsOiBDYXB0dXJlClJlYWRvbmx5OiAwClR5cGU6IFRPR0dMRQpDdXJyZW50OiAwCkVO RAovbWFpbi9zZXR0aW5ncy9yZW1vdGVtb2RlCkxhYmVsOiBSZW1vdGUgTW9kZQpSZWFkb25seTog MApUeXBlOiBURVhUCkN1cnJlbnQ6IDEKRU5ECi9tYWluL3NldHRpbmdzL2V2ZW50bW9kZQpMYWJl bDogRXZlbnQgTW9kZQpSZWFkb25seTogMApUeXBlOiBURVhUCkN1cnJlbnQ6IDAKRU5ECi9tYWlu L3N0YXR1cy9zZXJpYWxudW1iZXIKTGFiZWw6IFNlcmlhbCBOdW1iZXIKUmVhZG9ubHk6IDEKVHlw ZTogVEVYVApDdXJyZW50OiAxMTIwODAzNzI4CkVORAovbWFpbi9zdGF0dXMvbWFudWZhY3R1cmVy CkxhYmVsOiBDYW1lcmEgTWFudWZhY3R1cmVyClJlYWRvbmx5OiAxClR5cGU6IFRFWFQKQ3VycmVu dDogQ2Fub24gSW5jLgpFTkQKL21haW4vc3RhdHVzL2NhbWVyYW1vZGVsCkxhYmVsOiBDYW1lcmEg TW9kZWwKUmVhZG9ubHk6IDEKVHlwZTogVEVYVApDdXJyZW50OiBDYW5vbiBFT1MgMzBECkVORAov bWFpbi9zdGF0dXMvZGV2aWNldmVyc2lvbgpMYWJlbDogRGV2aWNlIFZlcnNpb24KUmVhZG9ubHk6 IDEKVHlwZTogVEVYVApDdXJyZW50OiAzLTEuMC42CkVORAovbWFpbi9zdGF0dXMvdmVuZG9yZXh0 ZW5zaW9uCkxhYmVsOiBWZW5kb3IgRXh0ZW5zaW9uClJlYWRvbmx5OiAxClR5cGU6IFRFWFQKQ3Vy cmVudDogCkVORAovbWFpbi9zdGF0dXMvbW9kZWwKTGFiZWw6IENhbWVyYSBNb2RlbApSZWFkb25s eTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6IDIxNDc0ODQyMTIKRU5ECi9tYWluL3N0YXR1cy9wdHB2 ZXJzaW9uCkxhYmVsOiBQVFAgVmVyc2lvbgpSZWFkb25seTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6 IDI1NgpFTkQKL21haW4vc3RhdHVzL2Rwb2Z2ZXJzaW9uCkxhYmVsOiBEUE9GIFZlcnNpb24KUmVh ZG9ubHk6IDEKVHlwZTogVEVYVApDdXJyZW50OiAyNTcKRU5ECi9tYWluL3N0YXR1cy9iYXR0ZXJ5 bGV2ZWwKTGFiZWw6IEJhdHRlcnkgTGV2ZWwKUmVhZG9ubHk6IDEKVHlwZTogVEVYVApDdXJyZW50 OiAxMDAlCkVORAovbWFpbi9zdGF0dXMvYXZhaWxhYmxlc2hvdHMKTGFiZWw6IEF2YWlsYWJsZSBT aG90cwpSZWFkb25seTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6IDk1MDg3CkVORAovbWFpbi9pbWdz ZXR0aW5ncy9pbWFnZWZvcm1hdApMYWJlbDogSW1hZ2UgRm9ybWF0ClJlYWRvbmx5OiAwClR5cGU6 IFJBRElPCkN1cnJlbnQ6IFJBVyArIExhcmdlIE5vcm1hbCBKUEVHCkNob2ljZTogMCBMYXJnZSBG aW5lIEpQRUcKQ2hvaWNlOiAxIExhcmdlIE5vcm1hbCBKUEVHCkNob2ljZTogMiBNZWRpdW0gRmlu ZSBKUEVHCkNob2ljZTogMyBNZWRpdW0gTm9ybWFsIEpQRUcKQ2hvaWNlOiA0IFNtYWxsIEZpbmUg SlBFRwpDaG9pY2U6IDUgU21hbGwgTm9ybWFsIEpQRUcKQ2hvaWNlOiA2IFJBVwpDaG9pY2U6IDcg UkFXICsgTGFyZ2UgRmluZSBKUEVHCkNob2ljZTogOCBSQVcgKyBMYXJnZSBOb3JtYWwgSlBFRwpD aG9pY2U6IDkgUkFXICsgTWVkaXVtIEZpbmUgSlBFRwpDaG9pY2U6IDEwIFJBVyArIE1lZGl1bSBO b3JtYWwgSlBFRwpDaG9pY2U6IDExIFJBVyArIFNtYWxsIEZpbmUgSlBFRwpDaG9pY2U6IDEyIFJB VyArIFNtYWxsIE5vcm1hbCBKUEVHCkVORAovbWFpbi9pbWdzZXR0aW5ncy9pc28KTGFiZWw6IElT TyBTcGVlZApSZWFkb25seTogMApUeXBlOiBSQURJTwpDdXJyZW50OiA0MDAKQ2hvaWNlOiAwIDEw MApDaG9pY2U6IDEgMTI1CkNob2ljZTogMiAxNjAKQ2hvaWNlOiAzIDIwMApDaG9pY2U6IDQgMjUw CkNob2ljZTogNSAzMjAKQ2hvaWNlOiA2IDQwMApDaG9pY2U6IDcgNTAwCkNob2ljZTogOCA2NDAK Q2hvaWNlOiA5IDgwMApDaG9pY2U6IDEwIDEwMDAKQ2hvaWNlOiAxMSAxMjUwCkNob2ljZTogMTIg MTYwMApDaG9pY2U6IDEzIDMyMDAKRU5ECi9tYWluL2ltZ3NldHRpbmdzL3doaXRlYmFsYW5jZQpM YWJlbDogV2hpdGVCYWxhbmNlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1cnJlbnQ6IEF1dG8K Q2hvaWNlOiAwIEF1dG8KQ2hvaWNlOiAxIERheWxpZ2h0CkNob2ljZTogMiBDbG91ZHkKQ2hvaWNl OiAzIFR1bmdzdGVuCkNob2ljZTogNCBGbHVvcmVzY2VudApDaG9pY2U6IDUgRmxhc2gKQ2hvaWNl OiA2IE1hbnVhbApDaG9pY2U6IDcgU2hhZG93CkNob2ljZTogOCBDb2xvciBUZW1wZXJhdHVyZQpF TkQKL21haW4vaW1nc2V0dGluZ3MvY29sb3J0ZW1wZXJhdHVyZQpMYWJlbDogQ29sb3IgVGVtcGVy YXR1cmUKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogNTIwMApDaG9pY2U6IDAgMjgw MApDaG9pY2U6IDEgMjkwMApDaG9pY2U6IDIgMzAwMApDaG9pY2U6IDMgMzEwMApDaG9pY2U6IDQg MzIwMApDaG9pY2U6IDUgMzMwMApDaG9pY2U6IDYgMzQwMApDaG9pY2U6IDcgMzUwMApDaG9pY2U6 IDggMzYwMApDaG9pY2U6IDkgMzcwMApDaG9pY2U6IDEwIDM4MDAKQ2hvaWNlOiAxMSAzOTAwCkNo b2ljZTogMTIgNDAwMApDaG9pY2U6IDEzIDQxMDAKQ2hvaWNlOiAxNCA0MjAwCkNob2ljZTogMTUg NDMwMApDaG9pY2U6IDE2IDQ0MDAKQ2hvaWNlOiAxNyA0NTAwCkNob2ljZTogMTggNDYwMApDaG9p Y2U6IDE5IDQ3MDAKQ2hvaWNlOiAyMCA0ODAwCkNob2ljZTogMjEgNDkwMApDaG9pY2U6IDIyIDUw MDAKQ2hvaWNlOiAyMyA1MTAwCkNob2ljZTogMjQgNTIwMApDaG9pY2U6IDI1IDUzMDAKQ2hvaWNl OiAyNiA1NDAwCkNob2ljZTogMjcgNTUwMApDaG9pY2U6IDI4IDU2MDAKQ2hvaWNlOiAyOSA1NzAw CkNob2ljZTogMzAgNTgwMApDaG9pY2U6IDMxIDU5MDAKQ2hvaWNlOiAzMiA2MDAwCkNob2ljZTog MzMgNjEwMApDaG9pY2U6IDM0IDYyMDAKQ2hvaWNlOiAzNSA2MzAwCkNob2ljZTogMzYgNjQwMApD aG9pY2U6IDM3IDY1MDAKQ2hvaWNlOiAzOCA2NjAwCkNob2ljZTogMzkgNjcwMApDaG9pY2U6IDQw IDY4MDAKQ2hvaWNlOiA0MSA2OTAwCkNob2ljZTogNDIgNzAwMApDaG9pY2U6IDQzIDcxMDAKQ2hv aWNlOiA0NCA3MjAwCkNob2ljZTogNDUgNzMwMApDaG9pY2U6IDQ2IDc0MDAKQ2hvaWNlOiA0NyA3 NTAwCkNob2ljZTogNDggNzYwMApDaG9pY2U6IDQ5IDc3MDAKQ2hvaWNlOiA1MCA3ODAwCkNob2lj ZTogNTEgNzkwMApDaG9pY2U6IDUyIDgwMDAKQ2hvaWNlOiA1MyA4MTAwCkNob2ljZTogNTQgODIw MApDaG9pY2U6IDU1IDgzMDAKQ2hvaWNlOiA1NiA4NDAwCkNob2ljZTogNTcgODUwMApDaG9pY2U6 IDU4IDg2MDAKQ2hvaWNlOiA1OSA4NzAwCkNob2ljZTogNjAgODgwMApDaG9pY2U6IDYxIDg5MDAK Q2hvaWNlOiA2MiA5MDAwCkNob2ljZTogNjMgOTEwMApDaG9pY2U6IDY0IDkyMDAKQ2hvaWNlOiA2 NSA5MzAwCkNob2ljZTogNjYgOTQwMApDaG9pY2U6IDY3IDk1MDAKQ2hvaWNlOiA2OCA5NjAwCkNo b2ljZTogNjkgOTcwMApDaG9pY2U6IDcwIDk4MDAKQ2hvaWNlOiA3MSA5OTAwCkNob2ljZTogNzIg MTAwMDAKRU5ECi9tYWluL2ltZ3NldHRpbmdzL3doaXRlYmFsYW5jZWFkanVzdGEKTGFiZWw6IFdo aXRlQmFsYW5jZSBBZGp1c3QgQQpSZWFkb25seTogMApUeXBlOiBSQURJTwpDdXJyZW50OiAwCkNo b2ljZTogMCAtOQpDaG9pY2U6IDEgLTgKQ2hvaWNlOiAyIC03CkNob2ljZTogMyAtNgpDaG9pY2U6 IDQgLTUKQ2hvaWNlOiA1IC00CkNob2ljZTogNiAtMwpDaG9pY2U6IDcgLTIKQ2hvaWNlOiA4IC0x CkNob2ljZTogOSAwCkNob2ljZTogMTAgMQpDaG9pY2U6IDExIDIKQ2hvaWNlOiAxMiAzCkNob2lj ZTogMTMgNApDaG9pY2U6IDE0IDUKQ2hvaWNlOiAxNSA2CkNob2ljZTogMTYgNwpDaG9pY2U6IDE3 IDgKQ2hvaWNlOiAxOCA5CkVORAovbWFpbi9pbWdzZXR0aW5ncy93aGl0ZWJhbGFuY2VhZGp1c3Ri CkxhYmVsOiBXaGl0ZUJhbGFuY2UgQWRqdXN0IEIKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3Vy cmVudDogMApDaG9pY2U6IDAgLTkKQ2hvaWNlOiAxIC04CkNob2ljZTogMiAtNwpDaG9pY2U6IDMg LTYKQ2hvaWNlOiA0IC01CkNob2ljZTogNSAtNApDaG9pY2U6IDYgLTMKQ2hvaWNlOiA3IC0yCkNo b2ljZTogOCAtMQpDaG9pY2U6IDkgMApDaG9pY2U6IDEwIDEKQ2hvaWNlOiAxMSAyCkNob2ljZTog MTIgMwpDaG9pY2U6IDEzIDQKQ2hvaWNlOiAxNCA1CkNob2ljZTogMTUgNgpDaG9pY2U6IDE2IDcK Q2hvaWNlOiAxNyA4CkNob2ljZTogMTggOQpFTkQKL21haW4vaW1nc2V0dGluZ3Mvd2hpdGViYWxh bmNleGEKTGFiZWw6IFdoaXRlQmFsYW5jZSBYIEEKUmVhZG9ubHk6IDEKVHlwZTogVEVYVApDdXJy ZW50OiAwCkVORAovbWFpbi9pbWdzZXR0aW5ncy93aGl0ZWJhbGFuY2V4YgpMYWJlbDogV2hpdGVC YWxhbmNlIFggQgpSZWFkb25seTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6IDAKRU5ECi9tYWluL2lt Z3NldHRpbmdzL2NvbG9yc3BhY2UKTGFiZWw6IENvbG9yIFNwYWNlClJlYWRvbmx5OiAwClR5cGU6 IFJBRElPCkN1cnJlbnQ6IHNSR0IKQ2hvaWNlOiAwIHNSR0IKQ2hvaWNlOiAxIEFkb2JlUkdCCkVO RAovbWFpbi9jYXB0dXJlc2V0dGluZ3MvZXhwb3N1cmVjb21wZW5zYXRpb24KTGFiZWw6IEV4cG9z dXJlIENvbXBlbnNhdGlvbgpSZWFkb25seTogMApUeXBlOiBSQURJTwpDdXJyZW50OiAwCkNob2lj ZTogMCAwCkVORAovbWFpbi9jYXB0dXJlc2V0dGluZ3MvZm9jdXNtb2RlCkxhYmVsOiBGb2N1cyBN b2RlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1cnJlbnQ6IE1hbnVhbApDaG9pY2U6IDAgTWFu dWFsCkVORAovbWFpbi9jYXB0dXJlc2V0dGluZ3MvYXV0b2V4cG9zdXJlbW9kZQpMYWJlbDogQ2Fu b24gQXV0byBFeHBvc3VyZSBNb2RlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1cnJlbnQ6IE1h bnVhbApDaG9pY2U6IDAgUApDaG9pY2U6IDEgVFYKQ2hvaWNlOiAyIEFWCkNob2ljZTogMyBNYW51 YWwKQ2hvaWNlOiA0IEJ1bGIKQ2hvaWNlOiA1IEFfREVQCkNob2ljZTogNiBERVAKQ2hvaWNlOiA3 IEN1c3RvbQpDaG9pY2U6IDggTG9jawpDaG9pY2U6IDkgR3JlZW4KQ2hvaWNlOiAxMCBOaWdodCBQ b3J0cmFpdApDaG9pY2U6IDExIFNwb3J0cwpDaG9pY2U6IDEyIFBvcnRyYWl0CkNob2ljZTogMTMg TGFuZHNjYXBlCkNob2ljZTogMTQgQ2xvc2V1cApDaG9pY2U6IDE1IEZsYXNoIE9mZgpDaG9pY2U6 IDE2IEMyCkNob2ljZTogMTcgQzMKQ2hvaWNlOiAxOCBDcmVhdGl2ZSBBdXRvCkNob2ljZTogMTkg TW92aWUKQ2hvaWNlOiAyMCBBdXRvCkNob2ljZTogMjEgSGFuZGhlbGQgTmlnaHQgU2NlbmUKQ2hv aWNlOiAyMiBIRFIgQmFja2xpZ2h0IENvbnRyb2wKQ2hvaWNlOiAyMyBTQ04KQ2hvaWNlOiAyNCBG b29kCkNob2ljZTogMjUgR3JhaW55IEIvVwpDaG9pY2U6IDI2IFNvZnQgZm9jdXMKQ2hvaWNlOiAy NyBUb3kgY2FtZXJhIGVmZmVjdApDaG9pY2U6IDI4IEZpc2gtZXllIGVmZmVjdApDaG9pY2U6IDI5 IFdhdGVyIHBhaW50aW5nIGVmZmVjdApDaG9pY2U6IDMwIE1pbmlhdHVyZSBlZmZlY3QKQ2hvaWNl OiAzMSBIRFIgYXJ0IHN0YW5kYXJkCkNob2ljZTogMzIgSERSIGFydCB2aXZpZApDaG9pY2U6IDMz IEhEUiBhcnQgYm9sZApDaG9pY2U6IDM0IEhEUiBhcnQgZW1ib3NzZWQKQ2hvaWNlOiAzNSBQYW5u aW5nCkNob2ljZTogMzYgSERSCkNob2ljZTogMzcgU2VsZiBQb3J0cmFpdApDaG9pY2U6IDM4IEh5 YnJpZCBBdXRvCkNob2ljZTogMzkgU21vb3RoIHNraW4KQ2hvaWNlOiA0MCBGdgpFTkQKL21haW4v Y2FwdHVyZXNldHRpbmdzL2RyaXZlbW9kZQpMYWJlbDogRHJpdmUgTW9kZQpSZWFkb25seTogMApU eXBlOiBSQURJTwpDdXJyZW50OiBTaW5nbGUKQ2hvaWNlOiAwIFNpbmdsZQpFTkQKL21haW4vY2Fw dHVyZXNldHRpbmdzL3BpY3R1cmVzdHlsZQpMYWJlbDogUGljdHVyZSBTdHlsZQpSZWFkb25seTog MApUeXBlOiBSQURJTwpDdXJyZW50OiBTdGFuZGFyZApDaG9pY2U6IDAgU3RhbmRhcmQKQ2hvaWNl OiAxIFBvcnRyYWl0CkNob2ljZTogMiBMYW5kc2NhcGUKQ2hvaWNlOiAzIE5ldXRyYWwKQ2hvaWNl OiA0IEZhaXRoZnVsCkNob2ljZTogNSBNb25vY2hyb21lCkNob2ljZTogNiBVc2VyIGRlZmluZWQg MQpDaG9pY2U6IDcgVXNlciBkZWZpbmVkIDIKQ2hvaWNlOiA4IFVzZXIgZGVmaW5lZCAzCkVORAov bWFpbi9jYXB0dXJlc2V0dGluZ3MvYXBlcnR1cmUKTGFiZWw6IEFwZXJ0dXJlClJlYWRvbmx5OiAw ClR5cGU6IFJBRElPCkN1cnJlbnQ6IGltcGxpY2l0IGF1dG8KQ2hvaWNlOiAwIGltcGxpY2l0IGF1 dG8KRU5ECi9tYWluL2NhcHR1cmVzZXR0aW5ncy9zaHV0dGVyc3BlZWQKTGFiZWw6IFNodXR0ZXIg U3BlZWQKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogYnVsYgpDaG9pY2U6IDAgMzAK Q2hvaWNlOiAxIDI1CkNob2ljZTogMiAyMApDaG9pY2U6IDMgMTUKQ2hvaWNlOiA0IDEzCkNob2lj ZTogNSAxMC4zCkNob2ljZTogNiA4CkNob2ljZTogNyA2LjMKQ2hvaWNlOiA4IDUKQ2hvaWNlOiA5 IDQKQ2hvaWNlOiAxMCAzLjIKQ2hvaWNlOiAxMSAyLjUKQ2hvaWNlOiAxMiAyCkNob2ljZTogMTMg MS42CkNob2ljZTogMTQgMS4zCkNob2ljZTogMTUgMQpDaG9pY2U6IDE2IDAuOApDaG9pY2U6IDE3 IDAuNgpDaG9pY2U6IDE4IDAuNQpDaG9pY2U6IDE5IDAuNApDaG9pY2U6IDIwIDAuMwpDaG9pY2U6 IDIxIDEvNApDaG9pY2U6IDIyIDEvNQpDaG9pY2U6IDIzIDEvNgpDaG9pY2U6IDI0IDEvOApDaG9p Y2U6IDI1IDEvMTAKQ2hvaWNlOiAyNiAxLzEzCkNob2ljZTogMjcgMS8xNQpDaG9pY2U6IDI4IDEv MjAKQ2hvaWNlOiAyOSAxLzI1CkNob2ljZTogMzAgMS8zMApDaG9pY2U6IDMxIDEvNDAKQ2hvaWNl OiAzMiAxLzUwCkNob2ljZTogMzMgMS82MApDaG9pY2U6IDM0IDEvODAKQ2hvaWNlOiAzNSAxLzEw MApDaG9pY2U6IDM2IDEvMTI1CkNob2ljZTogMzcgMS8xNjAKQ2hvaWNlOiAzOCAxLzIwMApDaG9p Y2U6IDM5IDEvMjUwCkNob2ljZTogNDAgMS8zMjAKQ2hvaWNlOiA0MSAxLzQwMApDaG9pY2U6IDQy IDEvNTAwCkNob2ljZTogNDMgMS82NDAKQ2hvaWNlOiA0NCAxLzgwMApDaG9pY2U6IDQ1IDEvMTAw MApDaG9pY2U6IDQ2IDEvMTI1MApDaG9pY2U6IDQ3IDEvMTYwMApDaG9pY2U6IDQ4IDEvMjAwMApD aG9pY2U6IDQ5IDEvMjUwMApDaG9pY2U6IDUwIDEvMzIwMApDaG9pY2U6IDUxIDEvNDAwMApDaG9p Y2U6IDUyIDEvNTAwMApDaG9pY2U6IDUzIDEvNjQwMApDaG9pY2U6IDU0IDEvODAwMApDaG9pY2U6 IDU1IGJ1bGIKRU5ECi9tYWluL2NhcHR1cmVzZXR0aW5ncy9tZXRlcmluZ21vZGUKTGFiZWw6IE1l dGVyaW5nIE1vZGUKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogRXZhbHVhdGl2ZQpD aG9pY2U6IDAgU3BvdApDaG9pY2U6IDEgRXZhbHVhdGl2ZQpDaG9pY2U6IDIgUGFydGlhbApDaG9p Y2U6IDMgQ2VudGVyLXdlaWdodGVkIGF2ZXJhZ2UKRU5ECi9tYWluL2NhcHR1cmVzZXR0aW5ncy9i cmFja2V0bW9kZQpMYWJlbDogQnJhY2tldCBNb2RlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1 cnJlbnQ6IFVua25vd24gdmFsdWUgMDAwMApDaG9pY2U6IDAgVW5rbm93biB2YWx1ZSAwMDAwCkVO RAoKQ2FtZXJhIHN1bW1hcnk6Ck1hbnVmYWN0dXJlcjogQ2Fub24gSW5jLgpNb2RlbDogQ2Fub24g RU9TIDMwRAogIFZlcnNpb246IDMtMS4wLjYKICBTZXJpYWwgTnVtYmVyOiAxMTIwODAzNzI4ClZl bmRvciBFeHRlbnNpb24gSUQ6IDB4YiAoMi4wKQpWZW5kb3IgRXh0ZW5zaW9uIERlc2NyaXB0aW9u OiAKCkNhcHR1cmUgRm9ybWF0czogSlBFRwpEaXNwbGF5IEZvcm1hdHM6IFNjcmlwdCwgRFBPRiwg TVMgQVZJLCBNUyBXYXZlLCBKUEVHLCBDUlcsIFVua25vd24oYmYwMikKCkRldmljZSBDYXBhYmls aXRpZXM6CglGaWxlIERvd25sb2FkLCBGaWxlIERlbGV0aW9uLCBGaWxlIFVwbG9hZAoJTm8gSW1h Z2UgQ2FwdHVyZSwgTm8gT3BlbiBDYXB0dXJlLCBDYW5vbiBFT1MgQ2FwdHVyZQoKU3RvcmFnZSBE ZXZpY2VzIFN1bW1hcnk6CnN0b3JlXzAwMDAwMDAxOgoJU3RvcmFnZURlc2NyaXB0aW9uOiBDRgoJ Vm9sdW1lTGFiZWw6IEE6CglTdG9yYWdlIFR5cGU6IFJlbW92YWJsZSBSQU0gKG1lbW9yeSBjYXJk KQoJRmlsZXN5c3RlbXR5cGU6IERpZ2l0YWwgQ2FtZXJhIExheW91dCAoRENJTSkKCUFjY2VzcyBD YXBhYmlsaXR5OiBSZWFkLVdyaXRlCglNYXhpbXVtIENhcGFiaWxpdHk6IDM5ODk2NDMyNjQgKDM4 MDQgTUIpCglGcmVlIFNwYWNlIChCeXRlcyk6IDM5NDYyOTUyOTYgKDM3NjMgTUIpCglGcmVlIFNw YWNlIChJbWFnZXMpOiAtMQoKRGV2aWNlIFByb3BlcnR5IFN1bW1hcnk6Ck1vZGVsIElEKDB4ZDA0 OSk6IGVycm9yIDIwMDUgb24gcXVlcnku --_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: text/plain; name="canon.c" Content-Description: canon.c Content-Disposition: attachment; filename="canon.c"; size=183972; creation-date="Sat, 16 Mar 2024 21:22:57 GMT"; modification-date="Sat, 16 Mar 2024 21:22:58 GMT" Content-Transfer-Encoding: base64 LyoNCiAqIGNhbm9uLmMgLSBDYW5vbiBwcm90b2NvbCAibmF0aXZlIiBvcGVyYXRpb25zLg0KICoN CiAqIFdyaXR0ZW4gMTk5OSBieSBXb2xmZ2FuZyBHLiBSZWlzc25lZ2dlciBhbmQgV2VybmVyIEFs bWVzYmVyZ2VyDQogKiBBZGRpdGlvbnMgMjAwMCBieSBQaGlsaXBwZSBNYXJ6b3VrIGFuZCBFZG91 YXJkIExhZmFyZ3VlDQogKiBVU0Igc3VwcG9ydCwgMjAwMCwgYnkgTWlrYWVsIE55c3Ryb2VtDQog Kg0KICogVGhpcyBmaWxlIGluY2x1ZGVzIGJvdGggVVNCIGFuZCBzZXJpYWwgc3VwcG9ydCBmb3Ig dGhlIGNhbWVyYXMNCiAqIG1hbnVmYWN0dXJlZCBieSBDYW5vbi4gVGhlc2UgY29tcHJpc2UgYWxs IChvciBhdCBsZWFzdCBhbG1vc3QgYWxsKQ0KICogb2YgdGhlIGRpZ2l0YWwgbW9kZWxzIG9mIHRo ZSBJWFVTIGFuZCBQb3dlclNob3Qgc2VyaWVzLCBhbmQgRU9TDQogKiBEMzAsIEQ2MCwgYW5kIDEw RC4gVGhlIEVPUy0xRCBhbmQgRU9TLTFEcyBhcmUgbm90IHN1cHBvcnRlZDsgdGhleQ0KICogdXNl IGEgRmlyZVdpcmUgKElFRUUgMTM5NCkgaW50ZXJmYWNlLg0KICoNCiAqIFdlIGFyZSB3b3JraW5n IGF0IG1vdmluZyBzZXJpYWwgYW5kIFVTQiBzcGVjaWZpYyBzdHVmZiB0byBzZXJpYWwuYw0KICog YW5kIHVzYi5jLCBrZWVwaW5nIHRoZSBjb21tb24gcHJvdG9jb2xzL2J1c2VzIHN1cHBvcnQgaW4g dGhpcw0KICogZmlsZS4NCiAqLw0KI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UNCiNpbmNsdWRlICJj b25maWcuaCINCg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5j bHVkZSA8c3RkYXJnLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8Y3R5cGUuaD4N CiNpbmNsdWRlIDx1bmlzdGQuaD4NCg0KI2lmZGVmIFRNX0lOX1NZU19USU1FDQojaW5jbHVkZSA8 c3lzL3RpbWUuaD4NCiNlbHNlDQojaW5jbHVkZSA8dGltZS5oPg0KI2VuZGlmDQoNCiNpbmNsdWRl IDxncGhvdG8yL2dwaG90bzIuaD4NCiNpbmNsdWRlIDxncGhvdG8yL2dwaG90bzItcG9ydC1sb2cu aD4NCg0KI2luY2x1ZGUgImxpYmdwaG90bzIvaTE4bi5oIg0KDQoNCiNpbmNsdWRlICJ1c2IuaCIN CiNpbmNsdWRlICJ1dGlsLmgiDQojaW5jbHVkZSAibGlicmFyeS5oIg0KI2luY2x1ZGUgImNhbm9u LmgiDQojaW5jbHVkZSAic2VyaWFsLmgiDQoNCiNpZmRlZiBIQVZFX0xJQkVYSUYNCiMgIGluY2x1 ZGUgPGxpYmV4aWYvZXhpZi1kYXRhLmg+DQojICBpbmNsdWRlIDxsaWJleGlmL2V4aWYtdXRpbHMu aD4NCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBDYW1lcmEgZGVmaW5pdGlvbnMNCiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQoNCi8qKg0KICogbW9kZWxzOg0KICoNCiAqIENvbnRhaW5zIGxpc3Qg b2YgYWxsIGNhbWVyYSBtb2RlbHMgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIHRoZWlyDQogKiBy ZXNwZWN0aXZlIFVTQiBJRHMgYW5kIGEgc2VyaWFsIElEIFN0cmluZyBmb3IgY2FtZXJhcyB3aXRo IFJTMjMyDQogKiBzZXJpYWwgc3VwcG9ydC4NCiAqDQogKiBTb21lIGNhbWVyYXMgYXJlIHNvbGQg dW5kZXIgZGlmZmVyZW50IG5hbWVzIGluIGRpZmZlcmVudCByZWdpb25zLA0KICogYnV0IGFyZSB0 ZWNobmljYWxseSB0aGUgc2FtZS4gV2UgdHJlYXQgdGhlbSB0aGUgc2FtZSBmcm9tIGENCiAqIHRl Y2huaWNhbCBwb2ludCBvZiB2aWV3LiBUbyBhdm9pZCB1bm5lY2Vzc2FyeSBxdWVzdGlvbnMgZnJv bSB1c2VycywNCiAqIHdlIGFkZCB0aGUgb3RoZXIgbmFtZXMgdG8gdGhlIGNhbWVyYSBsaXN0IGFm dGVyIHRoZSBwcmltYXJ5IG5hbWUsDQogKiBzdWNoIHRoYXQgdGhlaXIgY2FtZXJhIG5hbWUgb2Nj dXJzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZA0KICogY2FtZXJhcy4NCiAqDQogKiBOb3RlczoN CiAqIC0gQXQgbGVhc3Qgc29tZSBzZXJpYWwgY2FtZXJhcyByZXF1aXJlIGEgY2VydGFpbiBuYW1l IGZvciBjb3JyZWN0DQogKiAgIGRldGVjdGlvbi4NCiAqIC0gTmV3ZXIgQ2Fub24gVVNCIGNhbWVy YXMgYWxzbyBzdXBwb3J0IGEgUFRQIG1vZGUuIFNlZSBwdHAyIGNhbWxpYi4NCiAqIC0gTm8gSUVF RTEzOTQgY2FtZXJhcyBzdXBwb3J0ZWQgeWV0Lg0KICogLSBUaGUgc2l6ZSBsaW1pdCBjb25zdGFu dHMgYXJlbid0IHVzZWQgcHJvcGVybHkgYW55d2hlcmUuIFdlIHNob3VsZA0KICogICBwcm9iYWJs eSBnZXQgcmlkIG9mIHRoZW0gYWx0b2dldGhlci4NCiAqKi8NCg0KLyogU0xfKiAtIHNpemUgbGlt aXQgY29uc3RhbnRzICovDQojZGVmaW5lIEtJTE9CWVRFCSgxMDI0VSkNCiNkZWZpbmUgTUVHQUJZ VEUJKDEwMjRVICogS0lMT0JZVEUpDQojZGVmaW5lIFNMX1RIVU1CCSggMTAwVSAqIEtJTE9CWVRF KQ0KI2RlZmluZSBTTF9USFVNQl9DUjIgICAgKCAgMTBVICogTUVHQUJZVEUpIC8qIHNhbWUgYXMg cmVndWxhciBpbWFnZSAqLw0KI2RlZmluZSBTTF9QSUNUVVJFCSggIDEwVSAqIE1FR0FCWVRFKQ0K I2RlZmluZSBTTF9NT1ZJRV9TTUFMTAkoIDEwMFUgKiBNRUdBQllURSkNCiNkZWZpbmUgU0xfTU9W SUVfTEFSR0UJKDIwNDhVICogTUVHQUJZVEUpDQojZGVmaW5lIE5PX1VTQiAgMA0KDQovKiBNb2Rl bHMgd2l0aCB1bmtub3duIFVTQiBJRCdzOg0KICBFdXJvcGVhbiBuYW1lICAgICAgICAgIE5vcnRo IEFtZXJpY2FuICAgICAgICAgICAgICAgICBKYXBhbmVzZSAgICAgICAgICAgICBJbnRybyBkYXRl DQoNCiAgUG93ZXJTaG90IEE1MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSmFudWFyeSAyMDA1DQogIERpZ2l0YWwgSVhVUyA0MCAg ICAgICAgUG93ZXJTaG90IFNEMzAwICAgICAgICAgICAgICAgIElYWSBEaWdpdGFsIDUwICAgICAg IFNlcHRlbWJlciAyMDA0DQogIFBvd2VyU2hvdCBQcm8xICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYnJ1YXJ5IDIwMDQNCiAgICAg ICAgICAgICAgICAgICAgICAgICBQb3dlclNob3QgU0QzMCAgICAgICAgICAgICAgICAgSVhZIGkg em9vbSAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3dl clNob3QgQTQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIw MDUNCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclNob3QgQTYxMCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgICAgICAgICAgICAgICAgICAg ICAgICBQb3dlclNob3QgQTYyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXVndXN0IDIwMDUNCiAgRGlnaXRhbCBJWFVTIDU1ICAgICAgICBQb3dlclNob3QgU0Q0NTAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgRGlnaXRhbCBJ WFVTIDc1MCAgICAgICBQb3dlclNob3QgU0Q1NTAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXVndXN0IDIwMDUNCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclNob3Qg UzgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAg RGlnaXRhbCBJWFVTIFdpcmVsZXNzICBQb3dlclNob3QgU0Q0MzAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgKi8NCmNvbnN0IHN0cnVjdCBjYW5vbkNh bU1vZGVsRGF0YSBtb2RlbHNbXSA9IHsNCgkvKiAqSU5ERU5ULU9GRiogKi8NCgl7IkNhbm9uOlBv d2VyU2hvdCBBNSIsCQlDQU5PTl9DTEFTU18zLAlOT19VU0IsIE5PX1VTQiwgQ0FQX05PTiwgU0xf TU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCAiREUzMDAgQ2Fub24gSW5jLiJ9LA0K CXsiQ2Fub246UG93ZXJTaG90IEE1IFpvb20iLAlDQU5PTl9DTEFTU18zLAlOT19VU0IsIE5PX1VT QiwgQ0FQX05PTiwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCAiQ2Fub24g UG93ZXJTaG90IEE1IFpvb20ifSwNCgl7IkNhbm9uOlBvd2VyU2hvdCBBNTAiLAkJQ0FOT05fQ0xB U1NfMSwJTk9fVVNCLCBOT19VU0IsIENBUF9OT04sIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwg U0xfUElDVFVSRSwgIkNhbm9uIFBvd2VyU2hvdCBBNTAifSwNCgl7IkNhbm9uOlBvd2VyU2hvdCBQ cm83MCIsCUNBTk9OX0NMQVNTXzIsCU5PX1VTQiwgTk9fVVNCLCBDQVBfTk9OLCBTTF9NT1ZJRV9T TUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsICJDYW5vbiBQb3dlclNob3QgUHJvNzAifSwNCgl7 IkNhbm9uOlBvd2VyU2hvdCBTMTAiLAkJQ0FOT05fQ0xBU1NfMCwJMHgwNEE5LCAweDMwNDEsIENB UF9OT04sIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgIkNhbm9uIFBvd2Vy U2hvdCBTMTAifSwNCiAgICAgICAgLyogMzA0MiBpcyBhIHNjYW5uZXIsIHNvIGl0IHdpbGwgbmV2 ZXIgYmUgYWRkZWQgaGVyZS4gKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzIwIiwgICAg ICAgICBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNDMsIENBUF9OT04sIFNMX01PVklFX1NN QUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgIkNhbm9uIFBvd2VyU2hvdCBTMjAifSwNCiAgICAg ICAgeyJDYW5vbjpFT1MgRDMwIiwgICAgICAgICAgICAgICBDQU5PTl9DTEFTU180LCAgMHgwNEE5 LCAweDMwNDQsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg TlVMTH0sDQogICAgICAgIHsiQ2Fub246UG93ZXJTaG90IFMxMDAgKDIwMDApIiwgQ0FOT05fQ0xB U1NfMCwgIDB4MDRBOSwgMHgzMDQ1LCBDQVBfTk9OLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIs IFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOklYWSBESUdJVEFMIiwgICAgICAg ICAgIENBTk9OX0NMQVNTXzAsICAweDA0QTksIDB4MzA0NiwgQ0FQX05PTiwgU0xfTU9WSUVfU01B TEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpEaWdpdGFs IElYVVMiLCAgICAgICAgICBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNDcsIENBUF9OT04s IFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsi Q2Fub246UG93ZXJTaG90IEcxIiwgICAgICAgICAgQ0FOT05fQ0xBU1NfMCwgIDB4MDRBOSwgMHgz MDQ4LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsICJDYW5v biBQb3dlclNob3QgRzEifSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUHJvOTAgSVMiLCAg ICBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNDksIENBUF9TVVAsIFNMX01PVklFX1NNQUxM LCBTTF9USFVNQiwgU0xfUElDVFVSRSwgIkNhbm9uIFBvd2VyU2hvdCBQcm85MCBJUyJ9LA0KDQog ICAgICAgIHsiQ2Fub246SVhZIERJR0lUQUwgMzAwIiwgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4 MDRBOSwgMHgzMDRCLCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RV UkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTMzAwIiwgICAgICAgIENBTk9O X0NMQVNTXzEsICAweDA0QTksIDB4MzA0QywgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RI VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpEaWdpdGFsIElYVVMgMzAw IiwgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNEQsIENBUF9TVVAsIFNMX01PVklF X1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246UG93 ZXJTaG90IEEyMCIsICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDRFLCBDQVBf U1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAg ICB7IkNhbm9uOlBvd2VyU2hvdCBBMTAiLCAgICAgICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTks IDB4MzA0RiwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO VUxMfSwNCiAgICAgICAgLyogTWFjIE9TIGluY2x1ZGVzIHRoaXMgYXMgYSB2YWxpZCBJRDsgZG9u J3Qga25vdyB3aGljaCBjYW1lcmEgbW9kZWwgLS1zd2VzdGluICovDQogICAgICAgIHsiQ2Fub246 UG93ZXJTaG90IHVua25vd24gMSIsICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDUwLCBD QVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAg ICAgICAvKiBDYW5vbiBJWFkgRElHSVRBTCAyMDAgaGVyZT8gKi8NCiAgICAgICAgeyJDYW5vbjpQ b3dlclNob3QgUzExMCAoMjAwMSkiLCBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNTEsIENB UF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAg ICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIHYiLCAgICAgICAgQ0FOT05fQ0xBU1NfMCwgIDB4MDRB OSwgMHgzMDUyLCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs IE5VTEx9LA0KDQogICAgICAgIHsiQ2Fub246UG93ZXJTaG90IEcyIiwgICAgICAgICAgQ0FOT05f Q0xBU1NfMSwgIDB4MDRBOSwgMHgzMDU1LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhV TUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTNDAiLCAg ICAgICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA1NiwgQ0FQX1NVUCwgU0xfTU9WSUVf U01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dl clNob3QgUzMwIiwgICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNTcsIENBUF9T VVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAg IHsiQ2Fub246UG93ZXJTaG90IEE0MCIsICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwg MHgzMDU4LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5V TEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBBMzAiLCAgICAgICAgIENBTk9OX0NMQVNT XzEsICAweDA0QTksIDB4MzA1OSwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBT TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMzA1YSBpcyB0aGUgWlI1MCBEaWdpdGFsIENh bWNvcmRlciBpbiBVU0IgTWFzcyBTdG9yYWdlIG1vZGUuICovDQogICAgICAgIC8qIDMwNWIgaXMg dGhlIFpSNDVNQyBEaWdpdGFsIENhbWNvcmRlciBpbiBVU0IgTWFzcyBTdG9yYWdlIG1vZGUuICov DQogICAgICAgIC8qIDMwNWMgaXMgaW4gTWFjT1MgSW5mby5wbGlzdCwgYnV0IEkgZG9uJ3Qga25v dyB3aGF0IGl0IGlzIC0tc3dlc3Rpbi4gKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgdW5r bm93biAyIiwgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNWMsIENBUF9TVVAsIFNMX01P VklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQoNCiAgICAgICAgeyJDYW5v bjpFT1MgRDYwIiwgICAgICAgICAgICAgICBDQU5PTl9DTEFTU180LCAgMHgwNEE5LCAweDMwNjAs IENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQog ICAgICAgIHsiQ2Fub246UG93ZXJTaG90IEExMDAiLCAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4 MDRBOSwgMHgzMDYxLCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RV UkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBBMjAwIiwgICAgICAgIENBTk9O X0NMQVNTXzEsICAweDA0QTksIDB4MzA2MiwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RI VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCg0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTMjAw IiwgICAgICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA2NSwgQ0FQX1NVUCwgU0xfTU9W SUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpE aWdpdGFsIElYVVMgdjIiLCAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNjUsIENB UF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAg ICAgIHsiQ2Fub246UG93ZXJTaG90IFMzMzAiLCAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRB OSwgMHgzMDY2LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs IE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkRpZ2l0YWwgSVhVUyAzMzAiLCAgICAgIENBTk9OX0NM QVNTXzEsICAweDA0QTksIDB4MzA2NiwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1C LCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMzA2NyAgTVY1NTBpIERpZ2l0YWwgVmlk ZW8gQ2FtZXJhICovDQoNCiAgICAgICAgLyogUmVwb3J0ZWQgYXQgaHR0cDovL3d3dy5saW51eC11 c2Iub3JnL3VzYi5pZHMsIHdlIGhhdmUgMzA2RS4gKi8NCiAgICAgICAgLyp7IkNhbm9uOlBvd2Vy U2hvdCBHMyIsICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNjksIENBUF9TVVAs IFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sKi8NCiAgICAgICAg LyogMzA2YSBpcyBpbiBNYWNPUyBJbmZvLnBsaXN0LCBidXQgSSBkb24ndCBrbm93IHdoYXQgaXQg aXMgLS1zd2VzdGluLiAqLw0KICAgICAgICB7IkNhbm9uOkRpZ2l0YWwgdW5rbm93biAzIiwgICAg IENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA2YSwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEws IFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpPcHR1cmEgMjAw IE1DIiwgICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNkIsIENBUF9TVVAsIFNM X01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fu b246TVZYMmkiLCAgICAgICAgICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDZC LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K ICAgICAgICB7IkNhbm9uOklYWSBEViBNIiwgICAgICAgICAgICAgIENBTk9OX0NMQVNTXzEsICAw eDA0QTksIDB4MzA2QiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNU VVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzQ1IChub3JtYWwgbW9kZSki LCAgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzA2QywgQ0FQX1NVUCwgU0xfTU9WSUVfTEFS R0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMHgzMDZEIGlzIFM0 NSBpbiBQVFAgbW9kZSAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBHMyAobm9ybWFsIG1v ZGUpIiwgICAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwgMHgzMDZFLCBDQVBfU1VQLCBTTF9NT1ZJ RV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICAvKiAweDMwNkYg aXMgRzMgaW4gUFRQIG1vZGUgKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzIzMCAobm9y bWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzQsICAweDA0QTksIDB4MzA3MCwgQ0FQX1NVUCwgU0xf TU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5v bjpEaWdpdGFsIElYVVMgdjMgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzQsICAweDA0QTks IDB4MzA3MCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO VUxMfSwNCiAgICAgICAgLyogMHgzMDcxIGlzIFMyMzAvSVhVUyB2MyBpbiBQVFAgbW9kZSAqLw0K ICAgICAgICAvKiBGb2xsb3dpbmcgY2FtZXJhcyBzaGFyZSB0aGUgSUQgZm9yIFBUUCBhbmQgQ2Fu b24gbW9kZXMgKi8NCiNpZiAwIC8qIHNlcnZlZCBiZXR0ZXIgYnkgcHRwMiBkcml2ZXIgKi8NCiAg ICAgICAgeyJDYW5vbjpQb3dlclNob3QgU0QxMDAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNT XzUsICAweDA0QTksIDB4MzA3MiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBT TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpEaWdpdGFsIElYVVMgSUkgKG5vcm1h bCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzA3MiwgQ0FQX1NVUCwgU0xfTU9W SUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQ b3dlclNob3QgQTcwIiwgICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNzMsIENB UF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAg ICAgIHsiQ2Fub246UG93ZXJTaG90IEE2MCIsICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRB OSwgMHgzMDc0LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs IE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkRpZ2l0YWwgSVhVUyA0MDAiLCAgICAgIENBTk9OX0NM QVNTXzEsICAweDA0QTksIDB4MzA3NSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1C LCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzQwMCIsICAg ICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNzUsIENBUF9TVVAsIFNMX01PVklFX0xB UkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIEVuZCBvZiBzaGFy ZWQgSUQncyAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBBMzAwIiwgICAgICAgIENBTk9O X0NMQVNTXzEsICAweDA0QTksIDB4MzA3NiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RI VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCg0KICAgICAgICAvKiBTNTAgYWxzbyBzaGFyZXMgSUQg Zm9yIFBUUCBhbmQgQ2Fub24gbW9kZXMgKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzUw IChub3JtYWwgbW9kZSkiLCAgIENBTk9OX0NMQVNTXzQsICAweDA0QTksIDB4MzA3NywgQ0FQX1NV UCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiNlbmRpZg0K ICAgICAgICB7IkNhbm9uOlpSNzBNQyAobm9ybWFsIG1vZGUpIiwgICAgICBDQU5PTl9DTEFTU18x LCAgMHgwNEE5LCAweDMwNzgsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xf UElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIDMwNzkgaXMgbGlzdGVkIGZvciBNVjY1MGksIHBy b2JhYmx5IGluIFBUUCBtb2RlLiAqLw0KICAgICAgICB7IkNhbm9uOk1WNjUwaSAobm9ybWFsIG1v ZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA3YSwgQ0FQX1NVUCwgU0xfTU9WSUVf U01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMzA3YiBpcyBs aXN0ZWQgZm9yIE1WNjMwaSwgcHJvYmFibHkgaW4gUFRQIG1vZGUuICovDQogICAgICAgIHsiQ2Fu b246TVY2MzBpIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDdj LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K DQogICAgICAgIC8qIDMwN2YgaXMgT3B0dXJhIDIwL01WWDE1MGkgaW4gUFRQIG1vZGUsIHNvbWVv bmUgdG9sZCwgYnV0IGl0IHNlZW1zIG5vdCBjb3JyZWN0LiBTcGVjaWZ5IGl0IGhlcmUgdG9vLiAq Lw0KICAgICAgICB7IkNhbm9uOk9wdHVyYSAyMCIsIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4 MzA3ZiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxM fSwNCiAgICAgICAgeyJDYW5vbjpPcHR1cmEgMjAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNT XzEsICAweDA0QTksIDB4MzA4MCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBT TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpNVlgxNTBpIChub3JtYWwgbW9kZSki LCBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwODAsIENBUF9TVVAsIFNMX01PVklFX0xBUkdF LCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIFNpZ2h0ZWQgYXQNCiAg ICAgICAgICogPGh0dHA6Ly93d3cucWJpay5jaC91c2IvZGV2aWNlcy9zaG93ZGVzY3IucGhwP2lk PTIyMzI+LiAqLw0KICAgICAgICB7IkNhbm9uOk1WWDEwMGkiLCAgICAgICAgICAgICAgIENBTk9O X0NMQVNTXzEsICAweDA0QTksIDB4MzA4MSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RI VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpPcHR1cmEgMTAiLCAgICAg ICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwODIsIENBUF9TVVAsIFNMX01PVklF X0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246RU9T IDEwRCIsICAgICAgICAgICAgICAgQ0FOT05fQ0xBU1NfNCwgIDB4MDRBOSwgMHgzMDgzLCBDQVBf U1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAg ICB7IkNhbm9uOkVPUyAzMDBEIChub3JtYWwgbW9kZSkiLCBDQU5PTl9DTEFTU180LCAweDA0QTks IDB4MzA4NCwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO VUxMfSwNCiAgICAgICAgeyJDYW5vbjpFT1MgRGlnaXRhbCBSZWJlbCAobm9ybWFsIG1vZGUpIixD QU5PTl9DTEFTU180LCAweDA0QTksIDB4MzA4NCwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNM X1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpFT1MgS2lzcyBEaWdp dGFsIChub3JtYWwgbW9kZSkiLENBTk9OX0NMQVNTXzQsICAweDA0QTksIDB4MzA4NCwgQ0FQX1NV UCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCg0KI2lmIDAN CiAgICAgICAgLyogUFMgRzUgdXNlcyB0aGUgc2FtZSBQcm9kdWN0SUQgZm9yIFBUUCBhbmQgQ2Fu b24sIHdpdGggcHJvdG9jb2wgYXV0b2RldGVjdGlvbiAqLw0KCS8qIFVzZSBQVFAgZHJpdmVyLCBh cyB0aGlzIGRyaXZlciBoYWQgYnJva2VuIHJlcG9ydHMgLSBNYXJjdXMqLw0KICAgICAgICB7IkNh bm9uOlBvd2VyU2hvdCBHNSAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNSwgICAgIDB4MDRB OSwgMHgzMDg1LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs IE5VTEx9LA0KI2VuZGlmDQoNCiAgICAgICAgLyogRWx1cmEgNTAgY2FtY29yZGVyIGlzIDB4MzA4 NyBpbiBQVFAgbW9kZTsgMzA4OCBpbiBDYW5vbiBtb2RlPyAqLw0KICAgICAgICB7IkNhbm9uOkVs dXJhIDUwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDg4LCBD QVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KDQog ICAgICAgIC8qIE9wdHVyYSBYaS9NVlggM2kvRlYgTTEgdXNlcyAzMDhkIGluIFBUUCBtb2RlOyAz MDhlIGluIENhbm9uIG1vZGU/ICovDQogICAgICAgIHsiQ2Fub246T3B0dXJhIFhpIChub3JtYWwg bW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDhlLCBDQVBfU1VQLCBTTF9NT1ZJ RV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOk1W WCAzaSAobm9ybWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA4ZSwgQ0FQ X1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAg ICAgeyJDYW5vbjpGViBNMSAobm9ybWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTks IDB4MzA4ZSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO VUxMfSwNCg0KICAgICAgICAvKiBPcHR1cmEgMzAwL01WWCAxMGkvSVhZIERWIE0yIHZpZGVvIGNh bWVyYSB1c2VzIDMwOTMgaW4gVVNCIE1hc3MgU3RvcmFnZSBtb2RlLiAqLw0KDQogICAgICAgIC8q IE9wdHVyYSAzMDAvTVZYIDEwaS9JWFkgRFYgTTIgdmlkZW8gY2FtZXJhIHVzZXMgMzA5NSBpbiBQ VFAgbW9kZTsgMzA5NiBpbiBDYW5vbiBtb2RlPyAqLw0KICAgICAgICB7IkNhbm9uOk9wdHVyYSAz MDAgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwOTYsIENBUF9T VVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAg IHsiQ2Fub246TVZYIDEwaSAobm9ybWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTks IDB4MzA5NiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO VUxMfSwNCiAgICAgICAgeyJDYW5vbjpJWFkgRFYgTTIgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9D TEFTU18xLCAgMHgwNEE5LCAweDMwOTYsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVN QiwgU0xfUElDVFVSRSwgTlVMTH0sDQoNCiAgICAgICAgLyogMHgzMDk5IGlzIHRoZSBFT1MgMzAw RC9EaWdpdGFsIFJlYmVsIGluIFBUUCBtb2RlICovDQogICAgICAgIC8qIEE4MCBzZWVtcyB0byBz aGFyZSB0aGUgSUQgZm9yIFBUUCBhbmQgQ2Fub24gbW9kZXMgKi8NCiNpZiAwIC8qIHNlcnZlZCBi ZXR0ZXIgYnkgUFRQMiBkcml2ZXIsIGVzcGVjaWFsbHkgZm9yIGNhcHR1cmUgKi8NCiAgICAgICAg eyJDYW5vbjpQb3dlclNob3QgQTgwIChub3JtYWwgbW9kZSkiLCAgIENBTk9OX0NMQVNTXzEsICAw eDA0QTksIDB4MzA5QSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNU VVJFLCBOVUxMfSwNCiNlbmRpZg0KICAgICAgICAvKiAweDMwOWIgaXMgdGhlIFNEMTAgRGlnaXRh bCBFTFBIL0RpZ2l0YWwgSVhVUyBpL0lYWSBEaWdpdGFsIEwNCiAgICAgICAgICAgaW4gUFRQIG1v ZGU7IHdpbGwgaXQgd29yayBpbiBDYW5vbiBtb2RlPyAqLw0KICAgICAgICB7IkNhbm9uOlBvd2Vy U2hvdCBTRDEwIERpZ2l0YWwgRUxQSCAobm9ybWFsIG1vZGUpIiwgICBDQU5PTl9DTEFTU18xLCAg MHgwNEE5LCAweDMwOUIsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElD VFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIGkgKG5vcm1hbCBtb2Rl KSIsICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwOUIsIENBUF9TVVAsIFNMX01PVklFX0xB UkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246UG93ZXJT aG90IElYWSBEaWdpdGFsIEwgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzEsICAweDA0QTks IDB4MzA5QiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO VUxMfSwNCg0KI2lmIDANCi8qIHJlcG9ydGVkbHkgbm90IHdvcmtpbmcgLi4uIGNvbW1lbnQgb3V0 IGZvciBub3cgLSBNYXJjdXMgKi8NCiAgICAgICAgLyogUHJvZHVjdCBJRCBzaGFyZWQgYmV0d2Vl biBQVFAgYW5kIENhbm9uIG1vZGUgKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzEgSVMg KG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzA5QywgQ0FQX1NVUCwg U0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiNlbmRpZg0KDQog ICAgICAgIC8qIDMwYTAgaXMgWlI5MC9NVjc1MGkgY2FtY29yZGVyICovDQoNCiAgICAgICAgLyog MzBhOCBpcyBFbHVyYSA2MEUvTVZYMjAwaSBjYW1jb3JkZXIgaW4gUFRQIG1vZGU7IGRvbid0IGtu b3cNCiAgICAgICAgICogaWYgaXQgd2lsbCByZXNwb25kIGluIG5hdGl2ZSBtb2RlIGF0IHRoZSBz YW1lIHByb2R1Y3QNCiAgICAgICAgICogSUQuICovDQogICAgICAgIC8qIDMwYTkgaXMgT3B0dXJh IDQwL01WWDI1aSBjYW1jb3JkZXIsIHJlcG9ydGVkIHdvcmtpbmcgYXQNCiAgICAgICAgICogPGh0 dHA6Ly93d3cucWJpay5jaC91c2IvZGV2aWNlcy9zaG93ZGVzY3IucGhwP2lkPTI3MDA+LiBTZWVt cw0KICAgICAgICAgKiB0byBzaGFyZSBJRCB3aXRoIFBUUC4gKi8NCiAgICAgICAgeyJDYW5vbjpP cHR1cmEgNDAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzBBOSwg Q0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAg ICAgICAgeyJDYW5vbjpNVlgyNWkgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzEsICAweDA0 QTksIDB4MzBBOSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJF LCBOVUxMfSwNCg0KI2lmIDAgLyogSGFuZGxlZCBpbiBwdHAyLCBiZXR0ZXIgZm9yIGNhcHR1cmUg ZXRjLiAtTWFyY3VzICovDQogICAgICAgIC8qIEFub3RoZXIgYmxvY2sgb2YgY2FtZXJhcyB0aGF0 IHNoYXJlIHRoZSBJRCBmb3IgUFRQIGFuZCBDYW5vbiBtb2RlcyAqLw0KICAgICAgICB7IkNhbm9u OlBvd2VyU2hvdCBTNzAgKG5vcm1hbCBtb2RlKSIsICAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwg MHgzMGIxLCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5V TEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTNjAgKG5vcm1hbCBtb2RlKSIsICAgQ0FO T05fQ0xBU1NfNSwgIDB4MDRBOSwgMHgzMGIyLCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xf VEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBHNiAo bm9ybWFsIG1vZGUpIiwgICAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwgMHgzMGIzLCBDQVBfU1VQ LCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7 IkNhbm9uOkRpZ2l0YWwgSVhVUyA1MDAgKG5vcm1hbCBtb2RlKSIsQ0FOT05fQ0xBU1NfNSwgIDB4 MDRBOSwgMHgzMGI0LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RV UkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTNTAwIERpZ2l0YWwgRUxQSCAo bm9ybWFsIG1vZGUpIixDQU5PTl9DTEFTU181LCAgICAgICAweDA0QTksIDB4MzBiNCwgQ0FQX1NV UCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAg eyJDYW5vbjpJWFkgRGlnaXRhbCA1MDAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAw eDA0QTksIDB4MzBiNCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNU VVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgQTc1IiwgICAgICAgICAgICAg ICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzBiNSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFS R0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNo b3QgU0QxMTAgRGlnaXRhbCBFTFBIIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzBiNiwg Q0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAg ICAgICAgeyJDYW5vbjpEaWdpdGFsIElYVVMgSUlzIiwgICAgICAgICAgICAgIENBTk9OX0NMQVNT XzEsICAweDA0QTksIDB4MzBiNiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBT TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgQTQwMCIsICAgICAg ICAgICAgICAgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzBiNywgQ0FQX1NVUCwgU0xfTU9W SUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQ b3dlclNob3QgQTMxMCIsICAgICAgICAgICAgICAgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4 MzBiOCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxM fSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgQTg1IChub3JtYWwgbW9kZSkiLCAgIENBTk9O X0NMQVNTXzUsICAweDA0QTksIDB4MzBiOSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RI VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzQxMCBE aWdpdGFsIEVMUEggKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAgICAgMHgwNEE5LCAw eDMwYmEsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVM TH0sDQogICAgICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIDQzMCAobm9ybWFsIG1vZGUpIixDQU5P Tl9DTEFTU181LCAgMHgwNEE5LCAweDMwYmEsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9U SFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246SVhZIERpZ2l0YWwgNDMw IChub3JtYWwgbW9kZSkiLCBDQU5PTl9DTEFTU181LCAgMHgwNEE5LCAweDMwYmEsIENBUF9TVVAs IFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsi Q2Fub246UG93ZXJTaG90IEE5NSAobm9ybWFsIG1vZGUpIiwgICBDQU5PTl9DTEFTU181LCAgMHgw NEE5LCAweDMwYmIsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVS RSwgTlVMTH0sDQoNCiAgICAgICAgLyogMHgzMGJmIGlzIFBvd2VyU2hvdCBTRDMwMC9EaWdpdGFs IElYVVMgNDAgaW4gUFRQIG1vZGUgKi8NCiNlbmRpZg0KICAgICAgICAvKiBBbm90aGVyIGJsb2Nr IG9mIGNhbWVyYXMgdGhhdCBzaGFyZSB0aGUgSUQgZm9yIFBUUCBhbmQgQ2Fub24gbW9kZXMgKi8N CgkvKiBrZWVwIHRoZXNlIGVuYWJsZWQgYXMgdGhlIFBUUCB2YXJpYW50IGRvZXMgbm90IHN1cHBv cnQgY2FwdHVyZSAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTRDIwMCAobm9ybWFsIG1v ZGUpIiwgQ0FOT05fQ0xBU1NfNiwgIDB4MDRBOSwgMHgzMGMwLCBDQVBfU1VQLCBTTF9NT1ZJRV9M QVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkRpZ2l0 YWwgSVhVUyAzMCAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNiwgIDB4MDRBOSwgMHgzMGMw LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K ICAgICAgICB7IkNhbm9uOklYWSBEaWdpdGFsIDQwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xB U1NfNiwgIDB4MDRBOSwgMHgzMGMwLCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIs IFNMX1BJQ1RVUkUsIE5VTEx9LA0KDQojaWYgMA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBT RDQwMCAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNCwgIDB4MDRBOSwgMHgzMGMxLCBDQVBf Tk9OLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAg ICB7IkNhbm9uOkRpZ2l0YWwgSVhVUyA1MCAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNCwg IDB4MDRBOSwgMHgzMGMxLCBDQVBfTk9OLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJ Q1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOklYWSBEaWdpdGFsIDU1IChub3JtYWwgbW9k ZSkiLCAgQ0FOT05fQ0xBU1NfNCwgIDB4MDRBOSwgMHgzMGMxLCBDQVBfTk9OLCBTTF9NT1ZJRV9M QVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2Vy U2hvdCBBNTEwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMGMy LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K ICAgICAgICAvKiBFbmQgb2Ygc2hhcmVkIElEJ3MgKi8NCiNlbmRpZg0KDQogICAgICAgIHsiQ2Fu b246UG93ZXJTaG90IFNEMjAgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9DTEFTU181LCAgMHgwNEE5 LCAweDMwYzQsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg TlVMTH0sDQogICAgICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIGk1IChub3JtYWwgbW9kZSkiLCBD QU5PTl9DTEFTU181LCAgMHgwNEE5LCAweDMwYzQsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBT TF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246SVhZIERpZ2l0YWwg TDIgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9DTEFTU181LCAgMHgwNEE5LCAweDMwYzQsIENBUF9T VVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQoNCiAgICAg ICAgLyogSXMgMHgzMGU5IEVPUyAxRCBNYXJrIElJIGluIENhbm9uIG1vZGU/ICovDQogICAgICAg IC8qIDB4MzBlYSBpcyBFT1MgMUQgTWFyayBJSSBpbiBQVFAgbW9kZSAqLw0KDQogICAgICAgIHsi Q2Fub246RU9TIDIwRCAobm9ybWFsIG1vZGUpIiwgICAgICAgICBDQU5PTl9DTEFTU182LCAgMHgw NEE5LCAweDMwZWIsIENBUF9FWFAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQl9DUjIsIFNMX1BJ Q1RVUkUsIE5VTEx9LA0KICAgICAgICAvKiAweDMwZWMgaXMgRU9TIDIwRCBpbiBQVFAgbW9kZSAq Lw0KDQogICAgICAgIHsiQ2Fub246RU9TIDMwRCAoUFRQIG1vZGUpIiwgICAgICAgICBDQU5PTl9D TEFTU182LCAgMHgwNEE5LCAweDMxMTMsIENBUF9FWFAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVN Ql9DUjIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICAvKiAweDMxMTMgaXMgRU9TIDMwRCBp biBQVFAgbW9kZSAqLw0KDQoNCiAgICAgICAgeyJDYW5vbjpFT1MgMzUwRCAobm9ybWFsIG1vZGUp IiwgICAgICAgICAgICAgICAgQ0FOT05fQ0xBU1NfNiwgIDB4MDRBOSwgMHgzMGVlLCBDQVBfRVhQ LCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUJfQ1IyLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAg ICAgeyJDYW5vbjpEaWdpdGFsIFJlYmVsIFhUIChub3JtYWwgbW9kZSkiLCAgICAgICAgICAgICAg ICBDQU5PTl9DTEFTU182LCAgMHgwNEE5LCAweDMwZWUsIENBUF9FWFAsIFNMX01PVklFX0xBUkdF LCBTTF9USFVNQl9DUjIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkVPUyBL aXNzIERpZ2l0YWwgTiAobm9ybWFsIG1vZGUpIiwgICAgICAgICAgICAgIENBTk9OX0NMQVNTXzYs ICAweDA0QTksIDB4MzBlZSwgQ0FQX0VYUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CX0NSMiwg U0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIDMwZWYgaXMgRU9TIDM1MEQvRGlnaXRhbCBS ZWJlbCBYVC9FT1MgS2lzcyBEaWdpdGFsIE4gaW4gUFRQIG1vZGUuICovDQogICAgICAgIHsiQ2Fu b246RU9TIDVEIChub3JtYWwgbW9kZSkiLCAgICAgICAgICBDQU5PTl9DTEFTU182LCAgMHgwNEE5 LCAweDMxMDEsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg TlVMTH0sDQoNCiNpZiAwDQovKiByZXBvcnRlZGx5IG5vdCB3b3JraW5nIC4uLiBjb21tZW50IG91 dCBmb3Igbm93IC0gTWFyY3VzICovDQogICAgICAgIHsiQ2Fub246UG93ZXJTaG90IFMyIElTIChu b3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMGYwLCBDQVBfRVhQLCBT TF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KI2VuZGlmDQoNCiNp ZiAwDQovKiByZXBvcnRlZGx5IG5vdCB3b3JraW5nIGVpdGhlci4gZmFpbGluZyB3aXRoIGxvY2sg a2V5cyAtIE1hcmN1cyAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTRDUwMCAobm9ybWFs IG1vZGUpIiwgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzBmMiwgQ0FQX05PTiwgU0xfTU9W SUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpE aWdpdGFsIElYVVMgNzAwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwg MHgzMGYyLCBDQVBfTk9OLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5V TEx9LA0KICAgICAgICB7IkNhbm9uOklYWSBEaWdpdGFsIDYwMCAobm9ybWFsIG1vZGUpIiwgIENB Tk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzBmMiwgQ0FQX05PTiwgU0xfTU9WSUVfTEFSR0UsIFNM X1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiNlbmRpZg0KDQoJLyogSSB3YXMgbm90IGFibGUg dG8gbWFrZSBBNjIwIHdvcmsgd2l0aCBDTEFTUyA1LCAxIGFuZCA2LiAtTWFyY3VzICovDQoNCiNp ZiAwDQoJLyogYWxzbyByZXBvcnRlZCBhcyBub3Qgd29ya2luZy4gKi8NCiAgICAgICAgeyJDYW5v bjpQb3dlclNob3QgQTYxMCAobm9ybWFsIG1vZGUpIiwgICBDQU5PTl9DTEFTU181LCAgMHgwNEE5 LCAweDMwZmQsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg TlVMTH0sDQojZW5kaWYNCiAgICAgICAge05VTEwsIENBTk9OX0NMQVNTX05PTkUsIDB4MDAwMCwg MHgwMDAwLCBDQVBfTk9OLCAwVSwgMFUsIDBVLCBOVUxMfQ0KICAgICAgICAvKiAqSU5ERU5ULU9O KiAqLw0KfTsNCg0KI3VuZGVmIE5PX1VTQg0KI3VuZGVmIFNMX01PVklFX0xBUkdFDQojdW5kZWYg U0xfTU9WSUVfU01BTEwNCiN1bmRlZiBTTF9QSUNUVVJFDQojdW5kZWYgUzFNDQojdW5kZWYgU0xf VEhVTUINCg0KI2lmbmRlZiBIQVZFX1RNX0dNVE9GRg0KLyogcmVxdWlyZWQgZm9yIHRpbWUgY29u dmVyc2lvbnMgaW4gY2Fub25faW50X3NldF90aW1lKCkgKi8NCmV4dGVybiBsb25nIGludCB0aW1l em9uZTsNCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBNZXRob2RzDQogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLw0KDQoNCi8qIFNpbXVsYXRlIGNhcGFiaWxpdGllcw0KICoNCiAqIElmIHlvdSBuZWVk IHRvIGNoYW5nZSB0aGVzZSBmb3IgYSBjZXJ0YWluIGNhbWVyYSwgaXQgaXMgdGltZSB0bw0KICog aW50cm9kdWNlIGFuZCB1c2UgZ2VuZXJhbCBjYXBhYmlsaXRpZXMgYXMgcmVwbGFjZW1lbnQuDQog Ki8NCg0KI2RlZmluZSBleHRyYV9maWxlX2Zvcl90aHVtYl9vZl9qcGVnIEZBTFNFDQojZGVmaW5l IGV4dHJhX2ZpbGVfZm9yX3RodW1iX29mX2NydyBUUlVFDQojZGVmaW5lIGV4dHJhX2ZpbGVfZm9y X3RodW1iX29mX2NyMiBGQUxTRQ0KDQojaWZkZWYgX19HTlVDX18NCiMgZGVmaW5lIF9fdW51c2Vk X18gX19hdHRyaWJ1dGVfXygodW51c2VkKSkNCiNlbHNlDQojIGRlZmluZSBfX3VudXNlZF9fDQoj ZW5kaWYNCg0Kc3RhdGljIGludCBjYW5vbl9pbnRfc2V0X3JlbGVhc2VfcGFyYW1zIChDYW1lcmEg KmNhbWVyYSwgR1BDb250ZXh0ICpjb250ZXh0KTsNCg0Kc3RhdGljIGNvbnN0IGNoYXIgKiBjYW5v bjJncGhvdG9wYXRoIChDYW1lcmEgX191bnVzZWRfXyAqY2FtZXJhLCBjb25zdCBjaGFyICpwYXRo KTsNCg0KDQovKiEgXGJyaWVmIFJldHVybiBmaWxlbmFtZSB3aXRoIGV4dGVuc2lvbiByZXBsYWNl ZA0KICoNCiAqIFdlIGp1c3QgcmVwbGFjZSBmaWxlIGVuZGluZyBieSAuVEhNIGFuZCBhc3N1bWUg dGhpcyBpcyB0aGUNCiAqIG5hbWUgb2YgdGhlIHRodW1ibmFpbCBmaWxlLg0KICoNCiAqIENBVVRJ T04hDQogKiAgLSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnNpZGVyIHRoZSBuZXdleHQgcGFy YW1ldGVyLg0KICogIC0gVGhpcyBmdW5jdGlvbiBpcyBOT1QgdGhyZWFkc2FmZSENCiAqLw0KDQpz dGF0aWMgY29uc3QgY2hhciAqDQpyZXBsYWNlX2ZpbGVuYW1lX2V4dGVuc2lvbihjb25zdCBjaGFy ICpmaWxlbmFtZSwgY29uc3QgY2hhciBfX3VudXNlZF9fICpuZXdleHQpDQp7DQogICAgICAgIGNo YXIgKnA7DQogICAgICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMDI0XTsNCg0KICAgICAgICAvKiBXZSBq dXN0IHJlcGxhY2UgZmlsZSBlbmRpbmcgYnkgLlRITSBhbmQgYXNzdW1lIHRoaXMgaXMgdGhlDQog ICAgICAgICAqIG5hbWUgb2YgdGhlIHRodW1ibmFpbCBmaWxlLg0KICAgICAgICAgKi8NCiAgICAg ICAgaWYgKHNpemVvZihidWYpIDwgc3RybGVuIChmaWxlbmFtZSkgKyAxKSB7DQogICAgICAgICAg ICAgICAgR1BfREVCVUcgKCJyZXBsYWNlX2ZpbGVuYW1lX2V4dGVuc2lvbjogQnVmZmVyIHRvbyBz bWFsbCBpbiAlcyBsaW5lICVpLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9f LCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgIH0NCiAg ICAgICAgc3RybmNweSAoYnVmLCBmaWxlbmFtZSwgc2l6ZW9mIChidWYpIC0gMSk7DQogICAgICAg IGlmICgocCA9IHN0cnJjaHIgKGJ1ZiwgJy4nKSkgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAg IEdQX0RFQlVHICgicmVwbGFjZV9maWxlbmFtZV9leHRlbnNpb246IE5vICcuJyBmb3VuZCBpbiBm aWxlbmFtZSAnJXMnICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluICVzIGxpbmUgJWku IiwgZmlsZW5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgICAgcmV0dXJu IE5VTEw7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpKHAgLSBidWYpIDwg c2l6ZW9mIChidWYpIC0gNCkgew0KICAgICAgICAgICAgICAgIHN0cm5jcHkgKHAsICIuVEhNIiwg NCk7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJyZXBsYWNlX2ZpbGVuYW1lX2V4dGVuc2lv bjogTmV3IG5hbWUgZm9yICclcycgaXMgJyVzJyIsDQogICAgICAgICAgICAgICAgICAgICAgICAg IGZpbGVuYW1lLCBidWYpOw0KICAgICAgICAgICAgICAgIHJldHVybiBidWY7DQogICAgICAgIH0g ZWxzZSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJyZXBsYWNlX2ZpbGVuYW1lX2V4dGVu c2lvbjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV3IG5hbWUgZm9yIGZpbGVuYW1l ICclcycgZG9lc24ndCBmaXQgaW4gJXMgbGluZSAlaS4iLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICBmaWxlbmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICAgICAgICAgICByZXR1 cm4gTlVMTDsNCiAgICAgICAgfQ0KfQ0KDQoNCi8qISBcYnJpZWYgUmV0dXJuIGZpbGVuYW1lIHdp dGggZXh0ZW5zaW9uIHJlcGxhY2VkDQogKg0KICogV2UganVzdCByZXBsYWNlIGZpbGUgZW5kaW5n IGJ5IC5XQVYsIHRoZSBmaXJzdCB0aHJlZQ0KICogbGV0dGVycyBieSBTTkQgYW5kIGFzc3VtZSB0 aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdWRpbyBmaWxlLg0KICoNCiAqIENBVVRJT04hDQogKiAg LSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnNpZGVyIHRoZSBuZXdleHQgcGFyYW1ldGVyLg0K ICogIC0gVGhpcyBmdW5jdGlvbiBpcyBOT1QgdGhyZWFkc2FmZSENCiAqLw0KDQpzdGF0aWMgY2hh ciAqDQpmaWxlbmFtZV90b19hdWRpbyhjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciBf X3VudXNlZF9fICpuZXdleHQpDQp7DQogICAgICAgIGNoYXIgKnA7DQogICAgICAgIHN0YXRpYyBj aGFyIGJ1ZlsxMDI0XTsNCg0KICAgICAgICBpZiAoc2l6ZW9mKGJ1ZikgPCBzdHJsZW4gKGZpbGVu YW1lKSArIDEpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImZpbGVuYW1lX3RvX2F1ZGlv OiBCdWZmZXIgdG9vIHNtYWxsIGluICVzIGxpbmUgJWkuIiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsN CiAgICAgICAgfQ0KICAgICAgICBzdHJuY3B5IChidWYsIGZpbGVuYW1lLCBzaXplb2YgKGJ1Zikg LSAxKTsNCiAgICAgICAgaWYgKChwID0gc3RycmNociAoYnVmLCAnXycpKSA9PSBOVUxMKSB7DQog ICAgICAgICAgICAgICAgR1BfREVCVUcgKCJmaWxlbmFtZV90b19hdWRpbzogTm8gJy4nIGZvdW5k IGluIGZpbGVuYW1lICclcycgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gJXMgbGlu ZSAlaS4iLCBmaWxlbmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICAgICAgICAgICBy ZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoKHAgLSBidWYpID4gMykgew0KICAg ICAgICAgICAgICAgIHAgLT0gMzsNCiAgICAgICAgICAgICAgICBwWzBdID0gJ1MnOw0KICAgICAg ICAgICAgICAgIHBbMV0gPSAnTic7DQogICAgICAgICAgICAgICAgcFsyXSA9ICdEJzsNCiAgICAg ICAgfQ0KICAgICAgICBpZiAoKHAgPSBzdHJyY2hyIChidWYsICcuJykpID09IE5VTEwpIHsNCiAg ICAgICAgICAgICAgICBHUF9ERUJVRyAoImZpbGVuYW1lX3RvX2F1ZGlvOiBObyAnLicgZm91bmQg aW4gZmlsZW5hbWUgJyVzJyAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAlcyBsaW5l ICVpLiIsIGZpbGVuYW1lLCBfX0ZJTEVfXywgX19MSU5FX18pOw0KICAgICAgICAgICAgICAgIHJl dHVybiBOVUxMOw0KICAgICAgICB9DQogICAgICAgIGlmICgodW5zaWduZWQgaW50KShwIC0gYnVm KSA8IHNpemVvZiAoYnVmKSAtIDQpIHsNCiAgICAgICAgICAgICAgICBzdHJuY3B5IChwLCAiLldB ViIsIDQpOw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiZmlsZW5hbWVfdG9fYXVkaW86IE5l dyBuYW1lIGZvciAnJXMnIGlzICclcyciLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl bmFtZSwgYnVmKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYnVmOw0KICAgICAgICB9IGVsc2Ug ew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiZmlsZW5hbWVfdG9fYXVkaW86ICINCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIk5ldyBuYW1lIGZvciBmaWxlbmFtZSAnJXMnIGRvZXNuJ3Qg Zml0IGluICVzIGxpbmUgJWkuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUs IF9fRklMRV9fLCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAg ICAgIH0NCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZmlsZW5hbWUyYXVkaW9uYW1lOg0KICogQGNh bWVyYTogQ2FtZXJhIHRvIHdvcmsgb24NCiAqIEBmaWxlbmFtZTogdGhlIGZpbGUgZm9yIHdoaWNo IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgYXVkaW8gYW5ub3RhdGlvbg0KICoNCiAqIFRoZSBpZGVu dGlmaWVyIHJldHVybmVkIGlzDQogKiAgYSkgTlVMTCBpZiBubyBhdWRpbyBmaWxlIGV4aXN0cyBm b3IgdGhpcyBmaWxlIG9yIGFuIGludGVybmFsIGVycm9yIG9jY3VycmVkDQogKiAgYikgcG9pbnRl ciB0byBzdHJpbmcgd2l0aCBmaWxlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdGh1bWJuYWls DQogKiAgYykgcG9pbnRlciB0byBmaWxlbmFtZSBpbiBjYXNlIGZpbGVuYW1lIGlzIGEgdGh1bWJu YWlsIGl0c2VsZg0KICoNCiAqIFJldHVybnM6IGlkZW50aWZpZXIgZm9yIGNvcnJlc3BvbmRpbmcg dGh1bWJuYWlsDQogKi8NCg0KY29uc3QgY2hhciAqDQpjYW5vbl9pbnRfZmlsZW5hbWUyYXVkaW9u YW1lIChDYW1lcmEgX191bnVzZWRfXyAqY2FtZXJhLCBjb25zdCBjaGFyICpmaWxlbmFtZSkNCnsN CiAgICAgICAgY2hhciAqcmVzdWx0Ow0KDQogICAgICAgIC8qIFdlIHVzZSB0aGUgYXVkaW8gZmls ZSBpdHNlbGYgYXMgdGhlIGF1ZGlvIGZpbGUuIEluIHNob3J0Og0KICAgICAgICAgKiBhdWRpb2Zp bGUgPSBhdWRpb2ZpbGUoYXVkaW9maWxlKQ0KICAgICAgICAgKi8NCiAgICAgICAgaWYgKGlzX2F1 ZGlvIChmaWxlbmFtZSkpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9m aWxlbmFtZTJhdWRpb25hbWU6IFwiJXNcIiBJUyBhbiBhdWRpbyBmaWxlIiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFt ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIFRoZXJlIGFyZSBvbmx5IGF1ZGlvIGZpbGVzIGZv ciBpbWFnZXMgYW5kIG1vdmllcyAqLw0KICAgICAgICBpZiAoIShpc19tb3ZpZSAoZmlsZW5hbWUp IHx8IGlzX2ltYWdlIChmaWxlbmFtZSkpKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj YW5vbl9pbnRfZmlsZW5hbWUyYXVkaW9uYW1lOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAg ICJcIiVzXCIgaXMgbmVpdGhlciBtb3ZpZSBub3IgaW1hZ2UgLT4gbm8gYXVkaW8gZmlsZSIsIGZp bGVuYW1lKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KDQogICAg ICAgIHJlc3VsdCA9IGZpbGVuYW1lX3RvX2F1ZGlvIChmaWxlbmFtZSwgIi5XQVYiKTsNCg0KICAg ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJhdWRpb25hbWU6IGF1ZGlvIGZvciBm aWxlIFwiJXNcIiBpcyBleHRlcm5hbDogXCIlc1wiIiwNCiAgICAgICAgICAgICAgICAgIGZpbGVu YW1lLCByZXN1bHQpOw0KDQogICAgICAgIHJldHVybiByZXN1bHQ7DQp9DQoNCi8qKg0KICogY2Fu b25faW50X2ZpbGVuYW1lMnRodW1ibmFtZToNCiAqIEBjYW1lcmE6IENhbWVyYSB0byB3b3JrIG9u DQogKiBAZmlsZW5hbWU6IHRoZSBmaWxlIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgdGh1bWJuYWls IG9mDQogKg0KICogVGhlIGlkZW50aWZpZXIgcmV0dXJuZWQgaXMNCiAqICBhKSBOVUxMIGlmIG5v IHRodW1ibmFpbCBleGlzdHMgZm9yIHRoaXMgZmlsZSBvciBhbiBpbnRlcm5hbCBlcnJvciBvY2N1 cnJlZA0KICogIGIpIHBvaW50ZXIgdG8gZW1wdHkgc3RyaW5nIGlmIHRodW1ibmFpbCBpcyBjb250 YWluZWQgaW4gdGhlIGZpbGUgaXRzZWxmDQogKiAgYykgcG9pbnRlciB0byBzdHJpbmcgd2l0aCBm aWxlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdGh1bWJuYWlsDQogKiAgZCkgcG9pbnRlciB0 byBmaWxlbmFtZSBpbiBjYXNlIGZpbGVuYW1lIGlzIGEgdGh1bWJuYWlsIGl0c2VsZg0KICoNCiAq IFJldHVybnM6IGlkZW50aWZpZXIgZm9yIGNvcnJlc3BvbmRpbmcgdGh1bWJuYWlsDQogKi8NCg0K Y29uc3QgY2hhciAqDQpjYW5vbl9pbnRfZmlsZW5hbWUydGh1bWJuYW1lIChDYW1lcmEgX191bnVz ZWRfXyAqY2FtZXJhLCBjb25zdCBjaGFyICpmaWxlbmFtZSkNCnsNCiAgICAgICAgc3RhdGljIGNo YXIgKm51bGxzdHJpbmcgPSAiIjsNCg0KICAgICAgICAvKiBGaXJzdCBoYW5kbGUgY2FzZXMgd2hl cmUgd2Ugc2hvdWxkbid0IHRyeSB0byBnZXQgZXh0cmEgLlRITQ0KICAgICAgICAgKiBmaWxlIGJ1 dCB1c2UgdGhlIHNwZWNpYWwgZ2V0X3RodW1ibmFpbF9vZl94eHggZnVuY3Rpb24uDQogICAgICAg ICAqLw0KICAgICAgICBpZiAoIWV4dHJhX2ZpbGVfZm9yX3RodW1iX29mX2pwZWcgJiYgaXNfanBl ZyAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZmls ZW5hbWUydGh1bWJuYW1lOiB0aHVtYm5haWwgZm9yIEpQRUcgXCIlc1wiIGlzIGludGVybmFsIiwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgIHJl dHVybiBudWxsc3RyaW5nOw0KICAgICAgICB9DQogICAgICAgIGlmICghZXh0cmFfZmlsZV9mb3Jf dGh1bWJfb2ZfY3J3ICYmIGlzX2NydyAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgR1Bf REVCVUcgKCJjYW5vbl9pbnRfZmlsZW5hbWUydGh1bWJuYW1lOiB0aHVtYm5haWwgZm9yIENSVyBc IiVzXCIgaXMgaW50ZXJuYWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7 DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGxzdHJpbmc7DQogICAgICAgIH0NCiAgICAgICAg aWYgKCFleHRyYV9maWxlX2Zvcl90aHVtYl9vZl9jcjIgJiYgaXNfY3IyIChmaWxlbmFtZSkpIHsN CiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJ0aHVtYm5hbWU6 IHRodW1ibmFpbCBmb3IgQ1IyIFwiJXNcIiBpcyBpbnRlcm5hbCIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgIGZpbGVuYW1lKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHN0cmluZzsN CiAgICAgICAgfQ0KDQogICAgICAgIC8qIFdlIHVzZSB0aGUgdGh1bWJuYWlsIGZpbGUgaXRzZWxm IGFzIHRoZSB0aHVtYm5haWwgb2YgdGhlDQogICAgICAgICAqIHRodW1ibmFpbCBmaWxlLiBJbiBz aG9ydCB0aHVtYmZpbGUgPSB0aHVtYm5haWwodGh1bWJmaWxlKQ0KICAgICAgICAgKi8NCiAgICAg ICAgaWYgKGlzX3RodW1ibmFpbCAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgR1BfREVC VUcgKCJjYW5vbl9pbnRfZmlsZW5hbWUydGh1bWJuYW1lOiBcIiVzXCIgSVMgYSB0aHVtYm5haWwg ZmlsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsNCiAgICAgICAgICAg ICAgICByZXR1cm4gZmlsZW5hbWU7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBUaGVyZSBhcmUg b25seSB0aHVtYm5haWxzIGZvciBpbWFnZXMgYW5kIG1vdmllcyAqLw0KICAgICAgICBpZiAoIWlz X21vdmllIChmaWxlbmFtZSkgJiYgIWlzX2ltYWdlIChmaWxlbmFtZSkpIHsNCiAgICAgICAgICAg ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJ0aHVtYm5hbWU6ICINCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIlwiJXNcIiBpcyBuZWl0aGVyIG1vdmllIG5vciBpbWFnZSAtPiBu byB0aHVtYm5haWwiLCBmaWxlbmFtZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQog ICAgICAgIH0NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJ0aHVtYm5h bWU6IHRodW1ibmFpbCBmb3IgZmlsZSBcIiVzXCIgaXMgZXh0ZXJuYWwiLA0KICAgICAgICAgICAg ICAgICAgZmlsZW5hbWUpOw0KDQogICAgICAgIC8qIFdlIGp1c3QgcmVwbGFjZSBmaWxlIGVuZGlu ZyBieSAuVEhNIGFuZCBhc3N1bWUgdGhpcyBpcyB0aGUNCiAgICAgICAgICogbmFtZSBvZiB0aGUg dGh1bWJuYWlsIGZpbGUuDQogICAgICAgICAqLw0KICAgICAgICByZXR1cm4gcmVwbGFjZV9maWxl bmFtZV9leHRlbnNpb24gKGZpbGVuYW1lLCAiLlRITSIpOw0KDQogICAgICAgIC8qIG5ldmVyIHJl YWNoZWQgKi8NCiAgICAgICAgcmV0dXJuIE5VTEw7DQp9DQoNCi8qKg0KICogY2Fub25faW50X2Rp cmVjdG9yeV9vcGVyYXRpb25zOg0KICogQGNhbWVyYTogQ2FtZXJhIHRvIHdvcmsgb24NCiAqIEBw YXRoOiBQYXRoIHRvIGRpcmVjdG9yeSBvbiB3aGljaCB0byBvcGVyYXRlDQogKiBAYWN0aW9uOiAj Y2Fub25EaXJGdW5jdGlvbkNvZGUgKGVpdGhlciAjRElSX0NSRUFURSBvciAjRElSX1JFTU9WRSkN CiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBDcmVhdGVz IG9yIHJlbW92ZXMgYSBkaXJlY3RvcnkgaW4gY2FtZXJhIHN0b3JhZ2UuDQogKg0KICoNCiAqIFJl dHVybnM6IGdwaG90bzIgc3RhdHVzIGNvZGUuICVHUF9PSyBvbiBzdWNjZXNzLCBvdGhlcndpc2Ug c3RhdHVzDQogKiBmcm9tIGNhbm9uX3NlcmlhbF9lcnJvcigpLCAlR1BfRVJST1IgaWYgVVNCIG9w ZXJhdGlvbiBmYWlscywNCiAqICVHUF9FUlJPUl9DT1JSVVBURURfREFUQSBpZiB0aGUgY2FtZXJh IHJlc3BvbnNlIGlzIG5vdCB0aGUgZXhwZWN0ZWQNCiAqIGxlbmd0aCwgJUdQX0VSUk9SX0JBRF9Q QVJBTUVURVJTIGlmIEBhY3Rpb24gaXMgaW52YWxpZC4NCiAqDQogKi8NCmludA0KY2Fub25faW50 X2RpcmVjdG9yeV9vcGVyYXRpb25zIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqcGF0aCwg Y2Fub25EaXJGdW5jdGlvbkNvZGUgYWN0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsN CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsNCiAgICAgICAgaW50IGNhbm9uX3VzYl9mdW5jdDsN CiAgICAgICAgY2hhciB0eXBlOw0KDQogICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7DQogICAgICAg ICAgICAgICAgY2FzZSBESVJfQ1JFQVRFOg0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9 IDB4NTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX3VzYl9mdW5jdCA9IENBTk9OX1VT Ql9GVU5DVElPTl9NS0RJUjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAg ICAgICAgICAgIGNhc2UgRElSX1JFTU9WRToNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg PSAweDY7DQogICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl91c2JfZnVuY3QgPSBDQU5PTl9V U0JfRlVOQ1RJT05fUk1ESVI7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg ICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj YW5vbl9pbnRfZGlyZWN0b3J5X29wZXJhdGlvbnM6ICINCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiQmFkIG9wZXJhdGlvbiBzcGVjaWZpZWQgOiAlaSIsIGFjdGlvbik7DQogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQkFEX1BBUkFNRVRFUlM7DQogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVH ICgiY2Fub25faW50X2RpcmVjdG9yeV9vcGVyYXRpb25zKCkgY2FsbGVkIHRvICVzIHRoZSBkaXJl Y3RvcnkgJyVzJyIsDQogICAgICAgICAgICAgICAgICBjYW5vbl91c2JfZnVuY3QgPT0gQ0FOT05f VVNCX0ZVTkNUSU9OX01LRElSID8gImNyZWF0ZSIgOiAicmVtb3ZlIiwgcGF0aCk7DQogICAgICAg IHN3aXRjaCAoY2FtZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9Q T1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1 ZSAoY2FtZXJhLCBjYW5vbl91c2JfZnVuY3QsICZsZW4sICh1bnNpZ25lZCBjaGFyICopcGF0aCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVu IChwYXRoKSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAp DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9PU19GQUlM VVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2Fz ZSBHUF9QT1JUX1NFUklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3Nl cmlhbF9kaWFsb2d1ZSAoY2FtZXJhLCBjb250ZXh0LCB0eXBlLCAweDExLCAmbGVuLCBwYXRoLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJs ZW4gKHBhdGgpICsgMSwgTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1zZyA9 PSBOVUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl9zZXJpYWxf ZXJyb3JfdHlwZSAoY2FtZXJhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVG QVVMVA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxlbiAhPSAweDQpIHsNCiAgICAgICAgICAg ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9kaXJlY3Rvcnlfb3BlcmF0aW9uczogVW5leHBlY3Rl ZCBhbW91bnQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgZGF0YSByZXR1cm5lZCAo ZXhwZWN0ZWQgJWkgZ290ICVpKSIsIDB4NCwgbGVuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4g R1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobXNnWzBd ICE9IDB4MDApIHsNCiAgICAgICAgICAgICAgICBpZiAoIGFjdGlvbiA9PSBESVJfQ1JFQVRFICkN CiAgICAgICAgICAgICAgICAgICAgICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsIF8oIkNv dWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzLiIpLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGF0aCApOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICAgICAgICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsIF8oIkNvdWxkIG5vdCBy ZW1vdmUgZGlyZWN0b3J5ICVzLiIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGF0aCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NBTUVSQV9F UlJPUjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBj YW5vbl9pbnRfaWRlbnRpZnlfY2FtZXJhOg0KICogQGNhbWVyYTogdGhlIGNhbWVyYSB0byB3b3Jr IHdpdGgNCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBH ZXRzIHRoZSBjYW1lcmEgaWRlbnRpZmljYXRpb24gc3RyaW5nLCB1c3VhbGx5IHRoZSBvd25lciBu YW1lLg0KICoNCiAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiBzdG9yZWQgaW4gdGhlICJjYW1l cmEiIHN0cnVjdHVyZSwgd2hpY2gNCiAqIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGZvciB0aGUgZHJp dmVyLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gYWxzbyBnZXRzIHRoZSBmaXJtd2FyZSByZXZpc2lv biBpbiB0aGUgY2FtZXJhIHN0cnVjdC4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNv ZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X2lkZW50aWZ5X2NhbWVyYSAoQ2FtZXJhICpjYW1l cmEsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnOw0K ICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50 X2lkZW50aWZ5X2NhbWVyYSgpIGNhbGxlZCIpOw0KDQogICAgICAgIHN3aXRjaCAoY2FtZXJhLT5w b3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAgICAgICAg ICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoY2FtZXJhLCBDQU5PTl9V U0JfRlVOQ1RJT05fSURFTlRJRllfQ0FNRVJBLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbGVuLCBOVUxMLCAwKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAg ICAgICAgICAgICBtc2cgPSBjYW5vbl9zZXJpYWxfZGlhbG9ndWUgKGNhbWVyYSwgY29udGV4dCwg MHgwMSwgMHgxMiwgJmxlbiwgTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1z ZyA9PSBOVUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAo ImNhbm9uX2ludF9pZGVudGlmeV9jYW1lcmE6IG1zZyBlcnJvciIpOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYW5vbl9zZXJpYWxfZXJyb3JfdHlwZSAoY2FtZXJhKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQog ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN CiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KDQogICAgICAgIGlm IChsZW4gIT0gMHg0Yykgew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2lk ZW50aWZ5X2NhbWVyYTogVW5leHBlY3RlZCBsZW5ndGggcmV0dXJuZWQgIg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAiKGV4cGVjdGVkICVpIGdvdCAlaSk7IGNvbnRpbnVpbmcuIiwgMHg0Yywg bGVuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIFN0b3JlIHRoZXNlIHZhbHVlcyBpbiBvdXIg ImNhbWVyYSIgc3RydWN0dXJlOiAqLw0KICAgICAgICBtZW1jcHkgKGNhbWVyYS0+cGwtPmZpcm13 cmV2LCAoY2hhciAqKSBtc2cgKyA4LCA0KTsNCiAgICAgICAgc3RybmNweSAoY2FtZXJhLT5wbC0+ aWRlbnQsIChjaGFyICopIG1zZyArIDEyLCAzMik7DQogICAgICAgIGlmICggY2FtZXJhLT5wbC0+ bWQtPm1vZGVsICE9IENBTk9OX0NMQVNTXzYgKQ0KICAgICAgICAgICAgICAgIHN0cm5jcHkgKGNh bWVyYS0+cGwtPm93bmVyLCAoY2hhciAqKSBtc2cgKyA0NCwgMzIpOw0KICAgICAgICBlbHNlIHsN CiAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIGdldCBvd25lciBleHBsaWNpdGx5LiAqLw0KICAg ICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoIGNhbWVyYSwgQ0FOT05fVVNC X0ZVTkNUSU9OX0dFVF9PV05FUiwgJmxlbiwgTlVMTCwgMCApOw0KICAgICAgICAgICAgICAgIGlm ICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9S X09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgc3RybmNweSAoY2FtZXJhLT5wbC0+b3duZXIs IChjaGFyICopIG1zZyArIDQsIDMyKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgR1BfREVCVUcg KCJjYW5vbl9pbnRfaWRlbnRpZnlfY2FtZXJhOiBpZGVudCAnJXMnIG93bmVyICclcycsIGZpcm13 YXJlICVkLiVkLiVkLiVkIiwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPmlkZW50LCBj YW1lcmEtPnBsLT5vd25lciwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPmZpcm13cmV2 WzNdLCBjYW1lcmEtPnBsLT5maXJtd3JldlsyXSwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+ cGwtPmZpcm13cmV2WzFdLCBjYW1lcmEtPnBsLT5maXJtd3JldlswXSApOw0KDQogICAgICAgIHJl dHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZ2V0X2JhdHRlcnk6DQogKiBAY2Ft ZXJhOiB0aGUgY2FtZXJhIHRvIHdvcmsgb24NCiAqIEBwd3Jfc3RhdHVzOiBwb2ludGVyIHRvIGlu dGVnZXIgZGV0ZXJtaW5pbmcgcG93ZXIgc3RhdHVzDQogKiBAcHdyX3NvdXJjZTogcG9pbnRlciB0 byBpbnRlZ2VyIGRldGVybWluaW5nIHBvd2VyIHNvdXJjZQ0KICogQGNvbnRleHQ6IGNvbnRleHQg Zm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIEdldHMgYmF0dGVyeSBzdGF0dXMuDQogKg0KICog UmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9nZXRf YmF0dGVyeSAoQ2FtZXJhICpjYW1lcmEsIGludCAqcHdyX3N0YXR1cywgaW50ICpwd3Jfc291cmNl LCBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAg ICAgICAgdW5zaWduZWQgaW50IGxlbjsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9n ZXRfYmF0dGVyeSgpIik7DQoNCiAgICAgICAgc3dpdGNoIChjYW1lcmEtPnBvcnQtPnR5cGUpIHsN CiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0KICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9kZWwgPT0gQ0FOT05fQ0xBU1NfNiApDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ld2VyIHByb3RvY29sIHVzZXMgYSBkaWZmZXJl bnQgY29kZSwgYnV0IHdpdGggc2FtZSByZXNwb25zZS4gKi8NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXNnID0gY2Fub25fdXNiX2RpYWxvZ3VlIChjYW1lcmEsIENBTk9OX1VTQl9G VU5DVElPTl9QT1dFUl9TVEFUVVNfMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuLCBOVUxMLCAwKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY2Fu b25fdXNiX2RpYWxvZ3VlIChjYW1lcmEsIENBTk9OX1VTQl9GVU5DVElPTl9QT1dFUl9TVEFUVVMs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmxlbiwgTlVMTCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1zZyA9PSBO VUxMICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX09T X0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAg ICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY2Fu b25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEsIGNvbnRleHQsIDB4MGEsIDB4MTIsICZsZW4sIE5V TEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCApIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vycm9yX3R5cGUgKGNhbWVy YSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9PU19G QUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0K DQogICAgICAgIGlmIChsZW4gIT0gMHg4KSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj YW5vbl9pbnRfZ2V0X2JhdHRlcnk6IFVuZXhwZWN0ZWQgbGVuZ3RoIHJldHVybmVkICINCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAlaSBnb3QgJWkpIiwgMHg4LCBsZW4pOw0K ICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAg fQ0KDQogICAgICAgIGlmIChwd3Jfc3RhdHVzKQ0KICAgICAgICAgICAgICAgICpwd3Jfc3RhdHVz ID0gbXNnWzRdOw0KICAgICAgICBpZiAocHdyX3NvdXJjZSkNCiAgICAgICAgICAgICAgICAqcHdy X3NvdXJjZSA9IG1zZ1s3XTsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfYmF0 dGVyeTogU3RhdHVzOiAlMDJ4ICglcykgLyBTb3VyY2U6ICUwMnggKCVzKSIsDQogICAgICAgICAg ICAgICAgICBtc2dbNF0sIChtc2dbNF09PUNBTUVSQV9QT1dFUl9PSz8iT0siOiJCQUQiKSwNCiAg ICAgICAgICAgICAgICAgIG1zZ1s3XSwgKG1zZ1s3XSZDQU1FUkFfTUFTS19CQVRURVJZPyJCQVRU RVJZIjoiQUMiKSApOw0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBjYW5v bl9pbnRfZ2V0X3BpY3R1cmVfYWJpbGl0aWVzOg0KICogQGNhbWVyYTogdGhlIGNhbWVyYSB0byB3 b3JrIG9uDQogKiBAY29udGV4dDogdGhlIGNvbnRleHQgdG8gcHJpbnQgb24gZXJyb3INCiAqDQog KiBSZWFkcyB0aGUgY2FtZXJhIHBpY3R1cmUgYWJpbGl0aWVzLCBidXQgaWdub3JlcyB0aGVtIGFz IHdlIGRvbid0DQogKiAga25vdyBob3cgdG8gaW50ZXJwcmV0IHRoZSBkYXRhLg0KICogTk9URTog Q29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHNvbWUgY2FtZXJhcw0KICogIGFuZCB3aWxs IGNhdXNlIGFuIGVycm9yIGlmIGlzc3VlZC4gVGhlIGNhbWVyYXMgZm9yIHdoaWNoIHdlIGtub3cN CiAqICBpdCB3b24ndCB3b3JrIGFyZQ0KICogIEVPUyBEMzANCiAqICBFT1MgRDYwDQogKiAgUG93 ZXJTaG90IFM0NS4NCiAqIE5PVEU6IFRoZSAiUHJvdG9jb2wiIGZpbGUgc2FpZCB0aGF0IGV4YWN0 bHkgMHgzODAgKDkwMCkgYnl0ZXMgd291bGQNCiAqICBiZSByZXR1cm5lZCwgYnV0IGl0J3MgYWN0 dWFsbHkgOTA0IGJ5dGVzIGZvciB0aGUgUG93ZXJTaG90IEcyLg0KICogIEkgZG9uJ3Qga25vdyB3 aGV0aGVyIHRoaXMgd2FzIGFuIGVycm9yIGluIHRoZSAiUHJvdG9jb2wiIGRvY3VtZW50DQogKiAg b3IgaWYgZGlmZmVyZW50IG1vZGVscyByZXR1cm4gZGlmZmVyZW50IGxlbmd0aHMuIC1zd2VzdGlu IDIwMDIuMDEuMDkNCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8N CiNpZiAwIC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgYnkgYW55Ym9keSAqLw0Kc3RhdGlj IGludA0KY2Fub25faW50X2dldF9waWN0dXJlX2FiaWxpdGllcyAoQ2FtZXJhICpjYW1lcmEsIEdQ Q29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnOw0KICAgICAg ICB1bnNpZ25lZCBpbnQgbGVuOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2dldF9w aWN0dXJlX2FiaWxpdGllcygpIik7DQoNCiAgICAgICAgc3dpdGNoIChjYW1lcmEtPnBvcnQtPnR5 cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0KICAgICAgICAgICAgICAg ICAgICAgICAgbXNnID0gY2Fub25fdXNiX2RpYWxvZ3VlIChjYW1lcmEsIENBTk9OX1VTQl9GVU5D VElPTl9HRVRfUElDX0FCSUxJVElFUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmxlbiwgTlVMTCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIG1zZyA9PSBOVUxMICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN CiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAg ICAgICAgbXNnID0gY2Fub25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEsIGNvbnRleHQsIDB4MWYs IDB4MTIsICZsZW4sIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0g TlVMTCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vy cm9yX3R5cGUgKGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFV TFQNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChsZW4gIT0gMHgzMzQpIHsNCiAgICAgICAgICAg ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcGljdHVyZV9hYmlsaXRpZXM6IFVuZXhwZWN0 ZWQgbGVuZ3RoIHJldHVybmVkICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3Rl ZCAlaSBnb3QgJWkpIiwgMHgzMzQsIGxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VS Uk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0K fQ0KI2VuZGlmDQoNCi8qKg0KICogY2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQNCiAqIEBw YXlsb2FkOiB0byByZWNlaXZlIHBheWxvYWQgZm9yICVDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJP TF9DQU1FUkENCiAqICAgY29tbWFuZA0KICogQHN1YmNtZDogU3ViY29tbWFuZCBmb3IgcmVtb3Rl IGNhcHR1cmUgY29tbWFuZA0KICogICAoZS5nLiAlQ0FOT05fVVNCX0NPTlRST0xfU0hVVFRFUl9S RUxFQVNFKQ0KICogQHdvcmQwOiAzMi1iaXQgZmlyc3Qgd29yZCBvZiBwYXlsb2FkIChmaXJzdCBj b21tYW5kIHBhcmFtZXRlcikNCiAqIEB3b3JkMTogMzItYml0IHNlY29uZCB3b3JkIG9mIHBheWxv YWQgKHNlY29uZCBjb21tYW5kIHBhcmFtZXRlcikNCiAqIEBkZXNjOiB0byByZWNlaXZlIHN0cmlu ZyBkZXNjcmliaW5nIHN1YmNvbW1hbmQuDQogKg0KICogQnVpbGRzIHRoZSBwYXlsb2FkIGZvciBh IHJlbW90ZSBjYXB0dXJlIGNvbW1hbmQuIFRoZSBsZW5ndGggdmFyaWVzDQogKiBieSBjb21tYW5k LCBzbyB0aGlzIGZ1bmN0aW9uIGEgYnVmZmVyIG9mIHRoZSBjb3JyZWN0IHNpemUgd2l0aCB0aGUN CiAqIHByb3BlciBzdHVmZi4NCiAqDQogKiBSZXR1cm5zOiBzaXplIG9mIHBheWxvYWQgYnVmZmVy LCBwYXlsb2FkIGRhdGEgaW4gQHBheWxvYWQsIGNvbW1hbmQNCiAqICBkZXNjcmlwdGlvbiBpbiBA ZGVzYw0KICoNCiAqLw0Kc3RhdGljIGludA0KY2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQg KHVuc2lnbmVkIGNoYXIgKnBheWxvYWQsIHVuc2lnbmVkIGludCBzdWJjbWQsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHdvcmQwLCBpbnQgd29yZDEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqZGVzYykNCnsNCiAgICAgICAgaW50IGksIHBheXNpemU7 DQoNCiAgICAgICAgaSA9IDA7DQogICAgICAgIHdoaWxlIChjYW5vbl91c2JfY29udHJvbF9jbWRb aV0ubnVtICE9IDApIHsNCiAgICAgICAgICAgICAgICBpZiAoY2Fub25fdXNiX2NvbnRyb2xfY21k W2ldLm51bSA9PSBzdWJjbWQpDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg ICAgICAgICAgICBpKys7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGNhbm9uX3VzYl9jb250cm9s X2NtZFtpXS5udW0gPT0gMCkgew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50 X3BhY2tfY29udHJvbF9zdWJjbWQ6IHVua25vd24gc3ViY29tbWFuZCAlZCIsIHN1YmNtZCk7DQog ICAgICAgICAgICAgICAgc3ByaW50ZiAoZGVzYywgInVua25vd24gc3ViY29tbWFuZCIpOw0KICAg ICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgc3ByaW50ZiAoZGVz YywgIiVzIiwgY2Fub25fdXNiX2NvbnRyb2xfY21kW2ldLmRlc2NyaXB0aW9uKTsNCiAgICAgICAg cGF5c2l6ZSA9IGNhbm9uX3VzYl9jb250cm9sX2NtZFtpXS5jbWRfbGVuZ3RoIC0gMHgxMDsNCiAg ICAgICAgbWVtc2V0IChwYXlsb2FkLCAwLCBwYXlzaXplKTsNCiAgICAgICAgaWYgKHBheXNpemUg Pj0gMHgwNCkgaHRvbGUzMmEocGF5bG9hZCwgICAgIGNhbm9uX3VzYl9jb250cm9sX2NtZFtpXS5z dWJjbWQpOw0KICAgICAgICBpZiAocGF5c2l6ZSA+PSAweDA4KSBodG9sZTMyYShwYXlsb2FkKzB4 NCwgd29yZDApOw0KICAgICAgICBpZiAocGF5c2l6ZSA+PSAweDBjKSBodG9sZTMyYShwYXlsb2Fk KzB4OCwgd29yZDEpOw0KDQogICAgICAgIHJldHVybiBwYXlzaXplOw0KfQ0KDQovKioNCiAqIGNh bm9uX2ludF9kb19jb250cm9sX2NvbW1hbmQ6DQogKiBAY2FtZXJhOiBDYW1lcmEgdG8gd29yayBv bg0KICogQHN1YmNtZDogU3ViY29tbWFuZCBmb3IgcmVtb3RlIGNhcHR1cmUgY29tbWFuZA0KICog ICAoZS5nLiAlQ0FOT05fVVNCX0NPTlRST0xfSU5JVCkNCiAqIEBhOiAzMi1iaXQgZmlyc3Qgd29y ZCBvZiBwYXlsb2FkIChmaXJzdCBjb21tYW5kIHBhcmFtZXRlcikNCiAqIEBiOiAzMi1iaXQgc2Vj b25kIHdvcmQgb2YgcGF5bG9hZCAoc2Vjb25kIGNvbW1hbmQgcGFyYW1ldGVyKQ0KICoNCiAqIEV4 ZWN1dGVzIGEgbm9ybWFsIHJlbW90ZSBjYXB0dXJlIGNvbW1hbmQgKGkuZS4gbm90DQogKiAlQ0FO T05fVVNCX0NPTlRST0xfU0hVVFRFUl9SRUxFQVNFLCB3aGljaCBoYXMgaXRzIG93biBzcGVjaWFs DQogKiBmdW5jdGlvbikuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBzdGF0dXMgY29kZQ0KICoN CiAqLw0Kc3RhdGljIGludA0KY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoQ2FtZXJhICpj YW1lcmEsIHVuc2lnbmVkIGludCBzdWJjbWQsIGludCBhLCBpbnQgYikNCnsNCiAgICAgICAgdW5z aWduZWQgY2hhciBwYXlsb2FkWzB4NGNdOw0KICAgICAgICBjaGFyIGRlc2NbMTI4XTsNCiAgICAg ICAgaW50IHBheWxvYWRsZW47DQogICAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuID0gMDsNCiAg ICAgICAgdW5zaWduZWQgY2hhciAqbXNnID0gTlVMTDsNCg0KICAgICAgICBwYXlsb2FkbGVuID0g Y2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQocGF5bG9hZCwgc3ViY21kLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSwgYiwgZGVzYyk7DQog ICAgICAgIEdQX0RFQlVHKCIlcysrIHdpdGggJXgsICV4IiwgZGVzYywgYSwgYik7DQoNCiAgICAg ICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9kZWwgPT0gQ0FOT05fQ0xBU1NfNiApIHsNCiAgICAg ICAgICAgICAgICAvKiBOZXdlciBwcm90b2NvbCB1c2VzIGEgZGlmZmVyZW50IGNvZGUsIGJ1dCB3 aXRoIHNhbWUNCiAgICAgICAgICAgICAgICAgKiByZXNwb25zZS4gSXQgYWxzbyBuZWVkcyBhbiBl eHRyYSB6ZXJvIGJ5dGUgYXQgdGhlDQogICAgICAgICAgICAgICAgICogZW5kLiAqLw0KICAgICAg ICAgICAgICAgIHBheWxvYWRbcGF5bG9hZGxlbisrXSA9IDA7DQogICAgICAgICAgICAgICAgbXNn ID0gY2Fub25fdXNiX2RpYWxvZ3VlICggY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9GVU5DVElPTl9DT05UUk9MX0NBTUVSQV8yLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhbGVuLCBwYXls b2FkLCBwYXlsb2FkbGVuICk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAg ICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoIGNhbWVyYSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJPTF9DQU1F UkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFsZW4s IHBheWxvYWQsIHBheWxvYWRsZW4gKTsNCiAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAgJiYgZGF0 YWxlbiAhPSAweDFjKSB7DQogICAgICAgICAgICAgICAgLyogRVJST1IgKi8NCiAgICAgICAgICAg ICAgICBHUF9ERUJVRygiJXMgZGF0YWxlbj0leCIsDQogICAgICAgICAgICAgICAgICAgICAgICAg ZGVzYywgZGF0YWxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRF RF9EQVRBOw0KICAgICAgICB9DQogICAgICAgIG1zZyA9IE5VTEw7DQogICAgICAgIGRhdGFsZW4g PSAwOw0KICAgICAgICBHUF9ERUJVRygiJXMtLSIsIGRlc2MpOw0KDQogICAgICAgIHJldHVybiBH UF9PSzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZV9wYXlsb2Fk Og0KICogQGNhbWVyYTogQ2FtZXJhIHRvIHdvcmsgb24NCiAqIEBzdWJjbWQ6IFN1YmNvbW1hbmQg Zm9yIHJlbW90ZSBjYXB0dXJlIGNvbW1hbmQNCiAqICAgKGUuZy4gJUNBTk9OX1VTQl9DT05UUk9M X0lOSVQpDQogKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGF5bG9hZCBkYXRhIGJ1ZmZlciB0 byBzZW5kIHRvIHRoZSBjYW1lcmENCiAqIEBwYXlsb2FkbGVuOiBsZW5ndGggb2YgdGhlIHBheWxv YWQgdG8gc2VuZCB0byB0aGUgY2FtZXJhDQogKiBAcmVzcG9uc2VfaGFuZGxlOiBwb2ludGVyIHRv IGEgcG9pbnRlciB3aGVyZSB0aGUgY2FtZXJhIHJlc3BvbnNlIGJ1ZmZlcg0KICogICBhZGRyZXNz IHNob3VsZCBiZSBzdG9yZWQuDQogKiBAZGF0YWxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcmVzcG9u c2UgZGF0YSBmcm9tIHRoZSBjYW1lcmENCiAqDQogKiBFeGVjdXRlcyBhIGNvbW1hbmQgd2l0aCBh cmJpdHJhcnkgcGFyYW1ldGVyIGRhdGEgdGhhdCByZXR1cm5zIGRhdGENCiAqIGZyb20gdGhlIGNh bWVyYSwgZS5nLiwgZ2V0IHJlbGVhc2UgcGFyYW1ldGVycywgc2V0IHJlbGVhc2UgcGFyYW1ldGVy cy4NCiAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIGNhbGxlciBmdWxsIGNvbnRyb2wgb3Zl ciBwYXlsb2FkIGRhdGEuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBzdGF0dXMgY29kZSwgY2Ft ZXJhIHJlc3BvbnNlIGRhdGEgaW4gQHJlc3BvbnNlX2hhbmRsZSwNCiAqICAgICAgICAgIGxlbmd0 aCBvZiB0aGUgcmVzcG9uc2UgaW4gQGRhdGFsZW4NCiAqDQogKi8NCnN0YXRpYyBpbnQNCmNhbm9u X2ludF9kb19jb250cm9sX2RpYWxvZ3VlX3BheWxvYWQgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25l ZCBjaGFyICpwYXlsb2FkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHBheWxvYWRsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICoqcmVzcG9uc2VfaGFuZGxlLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuKQ0Kew0KICAgICAg ICB1bnNpZ25lZCBjaGFyICptc2c7DQoNCiAgICAgICAgR1BfREVCVUcoImNhbm9uX2ludF9kb19j b250cm9sX2RpYWxvZ3VlX3BheWxvYWQrKyIpOw0KDQogICAgICAgIGlmICggY2FtZXJhLT5wbC0+ bWQtPm1vZGVsID09IENBTk9OX0NMQVNTXzYgKSB7DQogICAgICAgICAgICAgICAgLyogTmV3ZXIg cHJvdG9jb2wgdXNlcyBhIGRpZmZlcmVudCBjb2RlLCBidXQgd2l0aCBzYW1lDQogICAgICAgICAg ICAgICAgICogcmVzcG9uc2UuIEl0IGFsc28gbmVlZHMgYW4gZXh0cmEgemVybyBieXRlIGF0IHRo ZQ0KICAgICAgICAgICAgICAgICAqIGVuZC4gKi8NCiAgICAgICAgICAgICAgICBwYXlsb2FkW3Bh eWxvYWRsZW4rK10gPSAwOw0KICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1 ZV9mdWxsICggY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ0FOT05fVVNCX0ZVTkNUSU9OX0NPTlRST0xfQ0FNRVJBXzIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuLCBwYXlsb2FkLCBw YXlsb2FkbGVuKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgbXNn ID0gY2Fub25fdXNiX2RpYWxvZ3VlX2Z1bGwgKCBjYW1lcmEsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJPTF9D QU1FUkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhbGVuLCBwYXlsb2FkLCBwYXlsb2FkbGVuKTsNCg0KICAgICAgICBpZiAoIG1zZyA9PSBOVUxM ICAmJiAqZGF0YWxlbiAhPSAweDFjKSB7DQogICAgICAgICAgICAgICAgLyogRVJST1IgKi8NCiAg ICAgICAgICAgICAgICBHUF9ERUJVRygiY2Fub25faW50X2RvX2NvbnRyb2xfZGlhbG9ndWVfcGF5 bG9hZCBlcnJvcjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhbGVuPSV4IiwgKmRh dGFsZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsN CiAgICAgICAgfQ0KDQogICAgICAgICpyZXNwb25zZV9oYW5kbGUgPSBtc2c7DQoNCiAgICAgICAg R1BfREVCVUcoImNhbm9uX2ludF9kb19jb250cm9sX2RpYWxvZ3VlX3BheWxvYWQtLSIpOw0KDQog ICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZG9fY29udHJvbF9k aWFsb2d1ZToNCiAqIEBjYW1lcmE6IENhbWVyYSB0byB3b3JrIG9uDQogKiBAc3ViY21kOiBTdWJj b21tYW5kIGZvciByZW1vdGUgY2FwdHVyZSBjb21tYW5kDQogKiAgIChlLmcuICVDQU5PTl9VU0Jf Q09OVFJPTF9JTklUKQ0KICogQGE6IDMyLWJpdCBmaXJzdCB3b3JkIG9mIHBheWxvYWQgKGZpcnN0 IGNvbW1hbmQgcGFyYW1ldGVyKQ0KICogQGI6IDMyLWJpdCBzZWNvbmQgd29yZCBvZiBwYXlsb2Fk IChzZWNvbmQgY29tbWFuZCBwYXJhbWV0ZXIpDQogKiBAcmVzcG9uc2VfaGFuZGxlOiBwb2ludGVy IHRvIGEgcG9pbnRlciB3aGVyZSB0aGUgY2FtZXJhIHJlc3BvbnNlIGJ1ZmZlcg0KICogICBhZGRy ZXNzIHNob3VsZCBiZSBzdG9yZWQuDQogKiBAZGF0YWxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcmVz cG9uc2UgZGF0YSBmcm9tIHRoZSBjYW1lcmENCiAqDQogKiBFeGVjdXRlcyBhIHJlbW90ZSBjYXB0 dXJlIGNvbW1hbmQgdGhhdCByZXR1cm5zIGRhdGEgZnJvbSB0aGUNCiAqIGNhbWVyYSwgZS5nLiwg Z2V0IHJlbGVhc2UgcGFyYW1ldGVycy4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIHN0YXR1cyBj b2RlLCBjYW1lcmEgcmVzcG9uc2UgZGF0YSBpbiBAcmVzcG9uc2VfaGFuZGxlLA0KICogICAgICAg ICAgbGVuZ3RoIG9mIHRoZSByZXNwb25zZSBpbiBAZGF0YWxlbg0KICoNCiAqLw0Kc3RhdGljIGlu dA0KY2Fub25faW50X2RvX2NvbnRyb2xfZGlhbG9ndWUgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25l ZCBpbnQgc3ViY21kLCBpbnQgYSwgaW50IGIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqKnJlc3BvbnNlX2hhbmRsZSwgdW5zaWduZWQgaW50ICpkYXRhbGVu KQ0Kew0KICAgICAgICB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMHg0Y107DQogICAgICAgIGNoYXIg ZGVzY1sxMjhdOw0KICAgICAgICBpbnQgcGF5bG9hZGxlbjsNCiAgICAgICAgaW50IHN0YXR1czsN Cg0KICAgICAgICBwYXlsb2FkbGVuID0gY2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQgKHBh eWxvYWQsIHN1YmNtZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhLCBiLCBkZXNjKTsNCiAgICAgICAgR1BfREVCVUcoIiVzKysgd2l0aCAleCwg JXgiLCBkZXNjLCBhLCBiKTsNCg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJv bF9kaWFsb2d1ZV9wYXlsb2FkIChjYW1lcmEsIHBheWxvYWQsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRsZW4sDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl X2hhbmRsZSwgZGF0YWxlbik7DQoNCiAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KICAgICAg ICAgICAgICAgIC8qIEVSUk9SICovDQogICAgICAgICAgICAgICAgR1BfREVCVUcoIiVzIGVycm9y OiBkYXRhbGVuPSV4IiwgZGVzYywgKmRhdGFsZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBH UF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHKCIl cy0tIiwgZGVzYyk7DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fu b25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9sOg0KICogQGNhbWVyYTogQ2FtZXJhIHRvIHdvcmsg b24NCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBJbml0 aWF0ZSByZW1vdGUgY29udHJvbCBvZiB0aGUgc2h1dHRlciByZWxlYXNlIGFuZCByZWxhdGVkIHBo b3RvZ3JhcGhpYw0KICogcGFyYW1ldGVycy4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIHN0YXR1 cyBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9zdGFydF9yZW1vdGVfY29udHJvbCAoQ2Ft ZXJhICpjYW1lcmEsIEdQQ29udGV4dCBfX3VudXNlZF9fICpjb250ZXh0KQ0Kew0KICAgICAgICBp bnQgc3RhdHVzOw0KDQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5yZW1vdGVfY29udHJvbCkgew0K ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9s OiBDYW1lcmEgYWxyZWFkeSB1bmRlciByZW1vdGUgY29udHJvbCIpOw0KICAgICAgICAgICAgICAg IHJldHVybiBHUF9FUlJPUjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIEluaXQsIGV4dGVuZHMg Y2FtZXJhIGxlbnMsIHB1dHMgdXMgaW4gcmVtb3RlIGNhcHR1cmUgbW9kZSAqLw0KICAgICAgICBz dGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9jb21tYW5kIChjYW1lcmEsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9DT05UUk9MX0lO SVQsIDAsIDApOw0KDQoNCiAgICAgICAgaWYgKHN0YXR1cyA9PSBHUF9PSykNCiAgICAgICAgICAg ICAgICBjYW1lcmEtPnBsLT5yZW1vdGVfY29udHJvbCA9IDE7DQoNCiAgICAgICAgcmV0dXJuIHN0 YXR1czsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2w6DQogKiBA Y2FtZXJhOiBDYW1lcmEgdG8gd29yayBvbg0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9y IHJlcG9ydGluZw0KICoNCiAqIFRlcm1pbmF0ZSByZW1vdGUgY29udHJvbCBvZiB0aGUgc2h1dHRl ciByZWxlYXNlIGFuZCByZWxhdGVkIHBob3RvZ3JhcGhpYw0KICogcGFyYW1ldGVycy4NCiAqDQog KiBSZXR1cm5zOiBncGhvdG8yIHN0YXR1cyBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9l bmRfcmVtb3RlX2NvbnRyb2wgKENhbWVyYSAqY2FtZXJhLCBHUENvbnRleHQgX191bnVzZWRfXyAq Y29udGV4dCkNCnsNCiAgICAgICAgaW50IHN0YXR1czsNCg0KICAgICAgICBpZiAoIWNhbWVyYS0+ cGwtPnJlbW90ZV9jb250cm9sKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9p bnRfZW5kX3JlbW90ZV9jb250cm9sOiBDYW1lcmEgbm90IGN1cnJlbnRseSB1bmRlciByZW1vdGUg Y29udHJvbCIpOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUjsNCiAgICAgICAgfQ0K DQogICAgICAgIC8qIEVuZCByZWxlYXNlIG1vZGUgKi8NCiAgICAgICAgc3RhdHVzID0gY2Fub25f aW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfQ09OVFJPTF9FWElULCAwLCAwKTsNCg0K DQogICAgICAgIGlmIChzdGF0dXMgPT0gR1BfT0spDQogICAgICAgICAgICAgICAgY2FtZXJhLT5w bC0+cmVtb3RlX2NvbnRyb2wgPSAwOw0KDQogICAgICAgIHJldHVybiBzdGF0dXM7DQp9DQoNCg0K LyoqDQogKiBjYW5vbl9pbnRfY2FwdHVyZV9wcmV2aWV3DQogKiBAY2FtZXJhOiBjYW1lcmEgdG8g d29yayB3aXRoDQogKiBAZGF0YTogZ2V0cyB0aHVtYm5haWwgaW1hZ2UgZGF0YS4NCiAqIEBsZW5n dGg6IGdldHMgbGVuZ3RoIG9mIEBkYXRhLg0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9y IHJlcG9ydGluZw0KICoNCiAqIERpcmVjdHMgdGhlIGNhbWVyYSB0byBjYXB0dXJlIGFuIGltYWdl IHdpdGhvdXQgc3RvcmluZyBpdCBvbiB0aGUNCiAqIGNhbWVyYS4gKHJlbW90ZSBzaHV0dGVyIHJl bGVhc2UgdmlhIFVTQikuIFRoZSB0aHVtYm5haWwgd2lsbCBiZQ0KICogcmV0dXJuZWQgaW4gQGRh dGEuIFNlZSB0aGUgJ1Byb3RvY29sJyBmaWxlIGZvciBkZXRhaWxzLiBDYXB0dXJlDQogKiB0aHJv dWdoIHNlcmlhbCBwb3J0IGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQuDQogKg0KICogUmV0dXJuczog Z3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9jYXB0dXJlX3ByZXZp ZXcgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25lZCBjaGFyICoqZGF0YSwgdW5zaWduZWQgaW50ICps ZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7 DQogICAgICAgIGNhbm9uVHJhbnNmZXJNb2RlIHRyYW5zZmVybW9kZTsNCg0KICAgICAgICBpbnQg bXN0aW1lb3V0ID0gLTE7DQogICAgICAgIGludCBzdGF0dXM7DQogICAgICAgIHVuc2lnbmVkIGlu dCByZXR1cm5fbGVuZ3RoOw0KDQogICAgICAgIHVuc2lnbmVkIGludCBiX2xlbmd0aF9vcmlnID0g MDsNCiAgICAgICAgdW5zaWduZWQgaW50ICpiX2xlbmd0aCA9ICZiX2xlbmd0aF9vcmlnOw0KICAg ICAgICB1bnNpZ25lZCBjaGFyICpiX2RhdGFfb3JpZyA9IE5VTEw7DQogICAgICAgIHVuc2lnbmVk IGNoYXIgKipiX2RhdGEgPSAmYl9kYXRhX29yaWc7DQoNCiAgICAgICAgaW50IHBob3RvX3N0YXR1 czsNCg0KICAgICAgICAvKiBTaG91bGQgd2UgZG93bmxvYWQgdGhlIHRodW1ibmFpbCwgb3IgdGhl IGZ1bGwgaW1hZ2UgPyAqLw0KICAgICAgICBpZiAoY2FtZXJhLT5wbC0+Y2FwdHVyZV9zaXplID09 IENBUFRVUkVfRlVMTF9JTUFHRSkNCiAgICAgICAgICAgICAgICB0cmFuc2Zlcm1vZGUgPSBSRU1P VEVfQ0FQVFVSRV9GVUxMX1RPX1BDOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgdHJh bnNmZXJtb2RlID0gUkVNT1RFX0NBUFRVUkVfVEhVTUJfVE9fUEM7DQoNCiAgICAgICAgc3dpdGNo IChjYW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCg0KICAg ICAgICAgICAgICAgIGdwX3BvcnRfZ2V0X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgJm1zdGltZW91 dCk7DQogICAgICAgICAgICAgICAgR1BfREVCVUcoImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6 IHVzYiBwb3J0IHRpbWVvdXQgc3RhcnRzIGF0ICVkbXMiLCBtc3RpbWVvdXQpOw0KDQogICAgICAg ICAgICAgICAgY2FtZXJhLT5wbC0+aW1hZ2VfYl9rZXkgPSAweDA7DQogICAgICAgICAgICAgICAg Y2FtZXJhLT5wbC0+aW1hZ2VfYl9sZW5ndGggPSAweDA7DQoNCiAgICAgICAgICAgICAgICAvKg0K ICAgICAgICAgICAgICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBDT05UUk9MX0NBTUVSQSBjb21t YW5kcy4NCiAgICAgICAgICAgICAgICAgKi8NCg0KICAgICAgICAgICAgICAgIGlmICghY2FtZXJh LT5wbC0+cmVtb3RlX2NvbnRyb2wpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdwX3BvcnRf c2V0X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgMTUwMDApOw0KDQogICAgICAgICAgICAgICAgICAg ICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfc3RhcnRfcmVtb3RlX2NvbnRyb2wgKGNhbWVyYSwgY29u dGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KICAgICAgICAgICAgICAg IH0NCg0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogU2V0IHRoZSBjYXB0 dXJlZCBpbWFnZSB0cmFuc2ZlciBtb2RlLiAgV2UgaGF2ZSBmb3VyIG9wdGlvbnMNCiAgICAgICAg ICAgICAgICAgKiB0aGF0IHdlIGNhbiBzcGVjaWZ5IGFueSBjb21ibyBvZiwgY2FwdHVyZWQgdGh1 bWIgdG8gUEMsDQogICAgICAgICAgICAgICAgICogZnVsbCB0byBQQywgdGh1bWIgdG8gZGlzaywg YW5kIGZ1bGwgdG8gZGlzay4NCiAgICAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAq IFRoZSB0by1QQyBvcHRpb24gd2lsbCByZXR1cm4gYSBsZW5ndGggYW5kIGludGVnZXINCiAgICAg ICAgICAgICAgICAgKiBrZXkgZnJvbSBjYW5vbl91c2JfY2FwdHVyZV9kaWFsb2d1ZSgpIHRvIHVz ZSBpbiB0aGUNCiAgICAgICAgICAgICAgICAgKiAiRG93bmxvYWQgQ2FwdHVyZWQgSW1hZ2UiIGNv bW1hbmQuDQogICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAg ICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfY2FwdHVyZV9wcmV2aWV3OiB0cmFuc2ZlciBt b2RlIGlzICV4IiwgdHJhbnNmZXJtb2RlICk7DQogICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fu b25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9DT05UUk9MX1NFVF9U UkFOU0ZFUl9NT0RFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDQsIHRyYW5zZmVybW9kZSk7DQogICAgICAgICAgICAgICAgaWYgKCBz dGF0dXMgPCAwICkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAg ICAgICAgICAgICAgICBncF9wb3J0X3NldF90aW1lb3V0IChjYW1lcmEtPnBvcnQsIG1zdGltZW91 dCk7DQogICAgICAgICAgICAgICAgR1BfREVCVUcoImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6 IHNldCBjYW1lcmEgcG9ydCB0aW1lb3V0IGJhY2sgdG8gJWQgc2Vjb25kcy4uLiIsIG1zdGltZW91 dCAvIDEwMDAgKTsNCg0KICAgICAgICAgICAgICAgIC8qIEdldCByZWxlYXNlIHBhcmFtZXRlcnMg YSBjb3VwbGUgb2YgdGltZXMsIGp1c3QgdG8NCiAgICAgICAgICAgICAgICAgICBzZWUgaWYgdGhh dCBoZWxwcy4gKi8NCiAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJv bF9jb21tYW5kIChjYW1lcmEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ0FOT05fVVNCX0NPTlRST0xfR0VUX1BBUkFNUywNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCB0cmFu c2Zlcm1vZGUpOw0KICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApDQogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgICAgICAgICAgc3RhdHVzID0g Y2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9DT05UUk9MX0dF VF9QQVJBTVMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwNCwgdHJhbnNmZXJtb2RlKTsNCiAgICAgICAgICAgICAgICBpZiAoIHN0YXR1 cyA8IDAgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAg ICAgICAgICAgIC8qIExvY2sga2V5cyBoZXJlIGZvciBFT1MgY2FtZXJhcyAqLw0KICAgICAgICAg ICAgICAgIGlmICggY2FtZXJhLT5wbC0+bWQtPm1vZGVsID09IENBTk9OX0NMQVNTXzQgfHwgY2Ft ZXJhLT5wbC0+bWQtPm1vZGVsID09IENBTk9OX0NMQVNTXzYgKSB7DQogICAgICAgICAgICAgICAg ICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfbG9ja19rZXlzKGNhbWVyYSxjb250ZXh0KTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJvciAoY29udGV4dCwgXygibG9jayBrZXlz IGZhaWxlZC4iKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0 dXM7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAg ICAgICAgICAgICAgLyogU2h1dHRlciBSZWxlYXNlDQogICAgICAgICAgICAgICAgICAgQ2FuJ3Qg dXNlIG5vcm1hbCAiY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCIsIGFzDQogICAgICAgICAg ICAgICAgICAgd2UgbXVzdCByZWFkIHRoZSBpbnRlcnJ1cHQgcGlwZSBiZWZvcmUgdGhlIHJlc3Bv bnNlDQogICAgICAgICAgICAgICAgICAgY29tZXMgYmFjayBmb3IgdGhpcyBjb21tYW5kLiAqLw0K ICAgICAgICAgICAgICAgICpkYXRhID0gY2Fub25fdXNiX2NhcHR1cmVfZGlhbG9ndWUgKCBjYW1l cmEsICZyZXR1cm5fbGVuZ3RoLCAmcGhvdG9fc3RhdHVzLCBjb250ZXh0ICk7DQogICAgICAgICAg ICAgICAgaWYgKCAqZGF0YSA9PSBOVUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyog VHJ5IHRvIGxlYXZlIGNhbWVyYSBpbiBhIHVzYWJsZSBzdGF0ZS4gKi8NCiAgICAgICAgICAgICAg ICAgICAgICAgIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2wgKGNhbWVyYSwgY29udGV4dCk7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBJdCB3b3VsZCBiZSBuaWNlIGlmIHdl IGhhZCBhIHdheSB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlIHRoZSBjYW1l cmEgZXJyb3Igc3RhdGUgZm9yIHRoZSBjYWxsZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcGxpY2F0aW9uLiAgRm9yIGV4YW1wbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBw aG90b19zdGF0dXMgPT0gMHgwMSBzZWVtcyB0byBtZWFuDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAiYXV0b2ZvY3VzIGZhaWx1cmUiIG9uIHRoZSBFT1MgNUQuICovDQogICAgICAgICAgICAg ICAgICAgICAgICBpZiAocGhvdG9fc3RhdHVzICE9IDApDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DQU1FUkFfRVJST1I7DQogICAgICAgICAgICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9F UlJPUl9PU19GQUlMVVJFOw0KDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg aWYgKHRyYW5zZmVybW9kZSA9PSBSRU1PVEVfQ0FQVFVSRV9GVUxMX1RPX1BDKSB7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERvd25sb2FkIHRoZSBpbWFnZS4gKi8NCiAgICAgICAgICAg ICAgICAgICAgICAgIGlmICggY2FtZXJhLT5wbC0+aW1hZ2VfbGVuZ3RoID4gMCApIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25fdXNiX2dldF9jYXB0dXJl ZF9pbWFnZSAoIGNhbWVyYSwgY2FtZXJhLT5wbC0+aW1hZ2Vfa2V5LCBkYXRhLCBsZW5ndGgsIGNv bnRleHQgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAw ICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgg ImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiBpbWFnZSBkb3dubG9hZCBmYWlsZWQsIHN0YXR1cz0g JWkiLCBzdGF0dXMgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gc3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvd25sb2Fk IHRoZSBzZWNvbmRhcnkgaW1hZ2UsIGlmIG9uZSBleGlzdHMgKi8NCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggY2FtZXJhLT5wbC0+aW1hZ2VfYl9sZW5ndGggPiAwICkgew0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfZ2V0X2NhcHR1cmVkX3Nl Y29uZGFyeV9pbWFnZSAoIGNhbWVyYSwgY2FtZXJhLT5wbC0+aW1hZ2VfYl9rZXksIGJfZGF0YSwg Yl9sZW5ndGgsIGNvbnRleHQgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCBzdGF0dXMgPCAwICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdQX0RFQlVHICggImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6Ig0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZWNvbmRhcnkgaW1hZ2UgZG93 bmxvYWQgZmFpbGVkLCBzdGF0dXM9ICVpIiwgc3RhdHVzICk7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBy aWQgb2YgaXQgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYIG1heWJl IHRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiB0byBkbyBzb21ldGhpbmcgZWxzZSB3aXRoIGl0ICovDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoYl9kYXRhX29yaWcpOw0KICAgICAgICAgICAg ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFuc2Zlcm1vZGUg PT0gUkVNT1RFX0NBUFRVUkVfVEhVTUJfVE9fUEMpIHsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgLyogRG93bmxvYWQgdGhlIHRodW1ibmFpbCBpbWFnZS4gKi8NCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggY2FtZXJhLT5wbC0+dGh1bWJfbGVuZ3RoID4gMCApIHsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25fdXNiX2dldF9jYXB0dXJlZF90aHVt Ym5haWwgKCBjYW1lcmEsIGNhbWVyYS0+cGwtPmltYWdlX2tleSwgZGF0YSwgbGVuZ3RoLCBjb250 ZXh0ICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCAp IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJj YW5vbl9pbnRfY2FwdHVyZV9wcmV2aWV3OiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgdGh1bWJuYWlsIGRvd25sb2FkIGZhaWxlZCwgc3RhdHVz PSAlaSIsIHN0YXR1cyApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBzdGF0dXM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAg IHJldHVybiBHUF9FUlJPUl9OT1RfU1VQUE9SVEVEOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBHUF9P SzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZmluZF9uZXdfaW1hZ2U6DQogKiBAY2FtZXJhOiBD YW1lcmEgKiB0byB0aGlzIGNhbWVyYQ0KICogQGluaXRpYWxfc3RhdGU6IENhbWVyYSBkaXJlY3Rv cnkgZHVtcCBiZWZvcmUgaW1hZ2UgY2FwdHVyZQ0KICogQGluaXRpYWxfc3RhdGVfbGVuOiBMZW5n dGggb2YgYmVmb3JlIGR1bXAgDQogKiBAZmluYWxfc3RhdGU6IERpcmVjdG9yeSBkdW1wIGFmdGVy IGltYWdlIGNhcHR1cmUNCiAqIEBmaW5hbF9zdGF0ZV9sZW46IExlbmd0aCBvZiBhZnRlciBkdW1w DQogKiBAcGF0aDogV2lsbCBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgcGF0aCBhbmQgZmlsZW5hbWUg b2YgdGhlIGNhcHR1cmVkDQogKiAgICAgICAgaW1hZ2UsIGluIGNhbm9uaWNhbCBncGhvdG8yIGZv cm1hdC4NCiAqDQogKiBDb21wYXJlcyB0d28gY29tcGxldGUgZHVtcHMgb2YgdGhlIGNhbWVyYSBk aXJlY3Rvcnk6IGJlZm9yZSBhbmQNCiAqIGFmdGVyIGFuIGltYWdlIGNhcHR1cmUgY29tbWFuZC4g VGhlIGZpcnN0IG5ldyBpbWFnZSBmaWxlIGlzIGZvdW5kLA0KICogYW5kIGl0cyBwYXRobmFtZSBp cyBkZWNvZGVkIGludG8gdGhlIGdpdmVuIENhbWVyYUZpbGVQYXRoLg0KICoNCiAqLw0Kdm9pZCBj YW5vbl9pbnRfZmluZF9uZXdfaW1hZ2UgKA0KCQlDYW1lcmEgKmNhbWVyYSwNCgkJdW5zaWduZWQg Y2hhciAqaW5pdGlhbF9zdGF0ZSwgdW5zaWduZWQgaW50IGluaXRpYWxfc3RhdGVfbGVuZ3RoLA0K CQl1bnNpZ25lZCBjaGFyICpmaW5hbF9zdGF0ZSwgdW5zaWduZWQgaW50IGZpbmFsX3N0YXRlX2xl bmd0aCwNCgkJQ2FtZXJhRmlsZVBhdGggKnBhdGggKQ0Kew0KICAgICAgICBjaGFyICpvbGRfZW50 cnkgPSAoY2hhciAqKWluaXRpYWxfc3RhdGUsICpuZXdfZW50cnkgPSAoY2hhciAqKWZpbmFsX3N0 YXRlOw0KDQogICAgICAgIC8qIFNldCBkZWZhdWx0IHBhdGggbmFtZSAqLw0KICAgICAgICBzdHJu Y3B5ICggcGF0aC0+bmFtZSwgXygiKlVOS05PV04qIiksIHNpemVvZihwYXRoLT5uYW1lKSApOw0K ICAgICAgICBzdHJuY3B5ICggcGF0aC0+Zm9sZGVyLCBfKCIqVU5LTk9XTioiKSwgc2l6ZW9mKHBh dGgtPmZvbGRlcikgKTsNCg0KICAgICAgICBwYXRoLT5mb2xkZXJbMF0gPSAwOyAvKiBTdGFydCB3 aXRoIG51bGwgcGF0aG5hbWUgc3RyaW5nLiAqLw0KICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9p bnRfZmluZF9uZXdfaW1hZ2U6IHN0YXJ0aW5nIGRpcmVjdG9yeSBjb21wYXJlIiApOw0KICAgICAg ICB3aGlsZSAoICgoKG5ld19lbnRyeSAtIChjaGFyKilmaW5hbF9zdGF0ZSkgPCBmaW5hbF9zdGF0 ZV9sZW5ndGgpICYmDQoJCSgob2xkX2VudHJ5IC0gKGNoYXIqKWluaXRpYWxfc3RhdGUpIDwgaW5p dGlhbF9zdGF0ZV9sZW5ndGgpKSAmJg0KCQkoCWxlMTZhdG9oICggb2xkX2VudHJ5ICsgQ0FOT05f RElSRU5UX0FUVFJTICkgIT0gMCB8fA0KCQkJbGUzMmF0b2ggKCBvbGRfZW50cnkgKyBDQU5PTl9E SVJFTlRfU0laRSApICE9IDAgfHwNCgkJCWxlMzJhdG9oICggb2xkX2VudHJ5ICsgQ0FOT05fRElS RU5UX1RJTUUgKSAhPSAwDQoJCSkNCgkpIHsNCiAgICAgICAgICAgICAgICBjaGFyICpvbGRfbmFt ZSA9IG9sZF9lbnRyeSArIENBTk9OX0RJUkVOVF9OQU1FLA0KICAgICAgICAgICAgICAgICAgICAg ICAgKm5ld19uYW1lID0gbmV3X2VudHJ5ICsgQ0FOT05fRElSRU5UX05BTUU7DQogICAgICAgICAg ICAgICAgR1BfREVCVUcgKCAiIG9sZCBlbnRyeSBcIiVzXCIsIGF0dHIgPSAweCUwMngsIHNpemU9 JWkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX25hbWUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICBvbGRfZW50cnlbQ0FOT05fRElSRU5UX0FUVFJTXSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxlMzJhdG9oICggb2xkX2VudHJ5ICsgQ0FOT05fRElSRU5UX1NJWkUg KSApOw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIiBuZXcgZW50cnkgXCIlc1wiLCBhdHRy ID0gMHglMDJ4LCBzaXplPSVpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19uYW1l LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2VudHJ5W0NBTk9OX0RJUkVOVF9BVFRS U10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyYXRvaCAoIG5ld19lbnRyeSArIENB Tk9OX0RJUkVOVF9TSVpFICkgKTsNCiAgICAgICAgICAgICAgICBpZiAoICpvbGRfZW50cnkgIT0g Km5ld19lbnRyeQ0KICAgICAgICAgICAgICAgICAgICAgfHwgbGUzMmF0b2ggKCBvbGRfZW50cnkg KyBDQU5PTl9ESVJFTlRfU0laRSApICE9IGxlMzJhdG9oICggbmV3X2VudHJ5ICsgQ0FOT05fRElS RU5UX1NJWkUgKQ0KICAgICAgICAgICAgICAgICAgICAgfHwgbGUzMmF0b2ggKCBvbGRfZW50cnkg KyBDQU5PTl9ESVJFTlRfVElNRSApICE9IGxlMzJhdG9oICggbmV3X2VudHJ5ICsgQ0FOT05fRElS RU5UX1RJTUUgKQ0KICAgICAgICAgICAgICAgICAgICAgfHwgc3RyY21wICggb2xkX25hbWUsIG5l d19uYW1lICkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvKiBNaXNtYXRjaC4gUHJlc3Vt YWJseSBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZmlsZSwgYnV0IGlzIGl0IGFu DQogICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBmaWxlPyAqLw0KICAgICAgICAgICAg ICAgICAgICAgICAgR1BfREVCVUcgKCAiRm91bmQgbWlzbWF0Y2giICk7DQogICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIGlzX2ltYWdlICggbmV3X25hbWUgKSApIHsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogWXVwLCB3ZSdsbCBhc3N1bWUgdGhhdCB0aGlzIGlzIHRoZSBu ZXcgaW1hZ2UuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgg IiAgRm91bmQgb3VyIG5ldyBpbWFnZSBmaWxlIiApOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkgKCBwYXRoLT5uYW1lLCBuZXdfbmFtZSApOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJjcHkgKCBwYXRoLT5mb2xkZXIsIGNhbm9uMmdwaG90b3BhdGgg KCBjYW1lcmEsIHBhdGgtPmZvbGRlciApICk7DQoNCgkJCQkvKiBGSVhNRTogTWFyY3VzOiBtYWtl IGl0IGxlc3MgbGFyZ2UgZWZmb3J0Li4uICovDQoJCQkJZ3BfZmlsZXN5c3RlbV9yZXNldCAoY2Ft ZXJhLT5mcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBtaXNtYXRjaCBpcyBub3QgYW4gaW1h Z2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4gVGhlcmUgYXJlIHRo cmVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmlsaXRpZXM6DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4gVGhpcyBpcyBhIG5ldyBkaXJl Y3Rvcnkgd2l0aCBubw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl cy4gVGhlIG5leHQgZW50cnkgd2lsbCBiZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbm90aGVyIGRpcmVjdG9yeS4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAyLiBUaGlzIGlzIGFuIGF1eGlsaWFyeSBmaWxlDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzb3VuZCwgdGh1bWJuYWlsLCBjYXRhbG9nKS4NCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBlaXRoZXIgb2YgdGhlc2UgY2FzZXMsIHRo ZSB0aGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyBpcyB0byBz a2lwIHRoaXMgZW50cnkgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5ldyBkaXJlY3RvcnkuDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4g VGhpcyBpcyBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBuZXcNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmlsZXMsIGFuZCB3ZSB3aWxsIGVudGVyIGl0Lg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmV4dCBlbnRyeSBpbiB0aGUgbmV3DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aWxsIGJlIGEgbmV3 IGZpbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG1heSB3 ZWxsIGJlIG91ciBuZXcgaW1hZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmlsZS4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZTE2YXRvaCAoIG5ld19lbnRyeStDQU5P Tl9ESVJFTlRfQVRUUlMgKSAmIENBTk9OX0FUVFJfUkVDVVJTX0VOVF9ESVIgKSB7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RyY21wICggIi4uIiwgbmV3 X25hbWUgKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBvcCBvdXQgb2YgdGhpcyBkaXJlY3RvcnkgKi8NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvY2FsX2RpciA9IHN0cnJjaHIocGF0 aC0+Zm9sZGVyLCdcXCcpICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRoZSBFT1MgMzUwRCBoYXMNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqICIuLiIgZW50cmllcyByaWdodA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXAgdG8gdGhlIHJvb3Qs IHNvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3 ZSBuZWVkIHRvIGF2b2lkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBkZXJlZmVyZW5jaW5nIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIG51bGwgcG9pbnRlci4gKi8NCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbG9jYWxfZGlyICE9IE5VTEwgJiYg bG9jYWxfZGlyID4gcGF0aC0+Zm9sZGVyICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJMZWF2aW5nIGRpcmVjdG9y eSBcIiVzXCIiLCBsb2NhbF9kaXIgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZGlyWy0xXSA9IDA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkxlYXZpbmcgdG9w IGRpcmVjdG9yeSIgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXcgZGlyZWN0b3J5 LCBhbmQgd2UgbmVlZCB0byBlbnRlciBpdC4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkVudGVyaW5nIGRpcmVjdG9yeSBcIiVz XCIiLCBuZXdfbmFtZSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCBuZXdfZW50cnlbQ0FOT05fRElSRU5UX05BTUVdID09ICcuJyApDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEln bm9yZSBhIGxlYWRpbmcgZG90ICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cm5jYXQgKCBwYXRoLT5mb2xkZXIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ZXdfbmFtZSArIDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGF0aC0+Zm9sZGVyKSAtIHN0cmxlbihwYXRo LT5mb2xkZXIpIC0gMSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJuY2F0ICggcGF0aC0+Zm9sZGVyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YocGF0aC0+Zm9sZGVyKSAtIHN0cmxlbihwYXRoLT5mb2xkZXIpIC0g MSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuZXdfZW50cnkgKz0gQ0FOT05fTUlOSU1VTV9ESVJFTlRfU0laRSArIHN0cmxlbiAoIG5ld19l bnRyeStDQU5PTl9ESVJFTlRfTkFNRSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggbGUxNmF0b2ggKCBvbGRfZW50cnkrQ0FOT05fRElSRU5UX0FUVFJTICkgJiBD QU5PTl9BVFRSX1JFQ1VSU19FTlRfRElSICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBFbnRlcmVkIGEgbmV3IGRpcmVjdG9yeTsgYXBwZW5kIGl0cw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHRvIHRoZSBjdXJyZW50IGZvbGRlciBwYXRoLg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIGEgZGlyZWN0b3J5 IGlzIHNpZ25hbGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGFuIGVu dHJ5IHdpdGggemVybyBsZW5ndGggYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRpbWUsIGFuZCBuYW1lICIuLiIuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICggIXN0cmNtcCAoICIuLiIsIG9sZF9uYW1lICkgKSB7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9wIG91dCBvZiB0aGlzIGRpcmVjdG9yeSAqLw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvY2FsX2RpciA9 IHN0cnJjaHIocGF0aC0+Zm9sZGVyLCdcXCcpICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUaGUgRU9TIDM1MEQgaGFzDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogIi4uIiBlbnRyaWVzIHJpZ2h0DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXAgdG8gdGhlIHJvb3QsIHNvDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2UgbmVlZCB0byBhdm9pZA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRlcmVmZXJlbmNpbmcgYQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG51bGwgcG9pbnRlci4g Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxvY2FsX2Rp ciAhPSBOVUxMICYmIGxvY2FsX2RpciA+IHBhdGgtPmZvbGRlciApIHsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkxlYXZpbmcgZGly ZWN0b3J5IFwiJXNcIiIsIGxvY2FsX2RpciApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZGlyWy0xXSA9IDA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdQX0RFQlVHICggIkxlYXZpbmcgdG9wIGRpcmVjdG9yeSIgKTsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcg KCAiRW50ZXJpbmcgZGlyZWN0b3J5IFwiJXNcIiIsIG9sZF9uYW1lICk7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGRfbmFtZVswXSA9PSAnLicgKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlIGEg bGVhZGluZyBkb3QgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cm5jYXQgKCBwYXRoLT5mb2xkZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX25hbWUgKyAxLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihw YXRoLT5mb2xkZXIpIC0gc3RybGVuKHBhdGgtPmZvbGRlcikgLSAxICk7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNhdCAoIHBhdGgtPmZvbGRlciwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfbmFt ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YocGF0aC0+Zm9sZGVyKSAtIHN0cmxlbihwYXRoLT5mb2xkZXIpIC0gMSApOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3ZlIHRvIG5leHQgZW50cnkgKi8NCiAg ICAgICAgICAgICAgICAgICAgICAgIG5ld19lbnRyeSArPSBDQU5PTl9NSU5JTVVNX0RJUkVOVF9T SVpFICsgc3RybGVuICggbmV3X2VudHJ5K0NBTk9OX0RJUkVOVF9OQU1FICk7DQogICAgICAgICAg ICAgICAgICAgICAgICBvbGRfZW50cnkgKz0gQ0FOT05fTUlOSU1VTV9ESVJFTlRfU0laRSArIHN0 cmxlbiAoIG9sZF9lbnRyeStDQU5PTl9ESVJFTlRfTkFNRSApOw0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KfQ0KDQovKioNCiAqIGNhbm9uX2ludF9jYXB0dXJlX2ltYWdlOg0KICogQGNh bWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQHBhdGg6IGdldHMgZmlsbGVkIGluIHdpdGgg dGhlIHBhdGggYW5kIGZpbGVuYW1lIG9mIHRoZSBjYXB0dXJlZA0KICogICBpbWFnZSwgaW4gY2Fu b25pY2FsIGdwaG90bzIgZm9ybWF0Lg0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJl cG9ydGluZw0KICoNCiAqIERpcmVjdHMgdGhlIGNhbWVyYSB0byBjYXB0dXJlIGFuIGltYWdlIChy ZW1vdGUgc2h1dHRlciByZWxlYXNlIHZpYQ0KICogVVNCKS4gIFNlZSB0aGUgJ1Byb3RvY29sJyBm aWxlIGZvciBkZXRhaWxzLiBDYXB0dXJlIHRocm91Z2ggc2VyaWFsDQogKiBwb3J0IGlzIG5vdCAo eWV0KSBzdXBwb3J0ZWQuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0K ICovDQppbnQNCmNhbm9uX2ludF9jYXB0dXJlX2ltYWdlIChDYW1lcmEgKmNhbWVyYSwgQ2FtZXJh RmlsZVBhdGggKnBhdGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0ICpjb250 ZXh0KQ0Kew0KICAgICAgICBjYW5vblRyYW5zZmVyTW9kZSB0cmFuc2Zlcm1vZGU7DQoNCiAgICAg ICAgaW50IG1zdGltZW91dCA9IC0xOw0KICAgICAgICBpbnQgc3RhdHVzOw0KICAgICAgICB1bnNp Z25lZCBpbnQgcmV0dXJuX2xlbmd0aDsNCg0KICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhID0g TlVMTDsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqaW5pdGlhbF9zdGF0ZSwgKmZpbmFsX3N0YXRl OyAvKiBGb3IgY29tcGFyaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogYmVmb3JlL2FmdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogZGlyZWN0b3JpZXMgKi8NCiAgICAgICAgdW5zaWduZWQgaW50IGluaXRpYWxf c3RhdGVfbGVuLCBmaW5hbF9zdGF0ZV9sZW47DQoNCiAgICAgICAgaW50IHBob3RvX3N0YXR1czsN Cg0KICAgICAgICAvKiBTaG91bGQgd2Ugc2F2ZSB0aGUgdGh1bWJuYWlsLCBvciB0aGUgZnVsbCBp bWFnZSA/ICovDQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5jYXB0dXJlX3NpemUgPT0gQ0FQVFVS RV9USFVNQikNCiAgICAgICAgICAgICAgICB0cmFuc2Zlcm1vZGUgPSBSRU1PVEVfQ0FQVFVSRV9U SFVNQl9UT19EUklWRTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHRyYW5zZmVybW9k ZSA9IFJFTU9URV9DQVBUVVJFX0ZVTExfVE9fRFJJVkU7DQoNCiAgICAgICAgc3dpdGNoIChjYW1l cmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAgICAgICAgICAg ICAgICAvKiBMaXN0IGFsbCBkaXJlY3RvcmllcyBvbiB0aGUgY2FtZXJhIHRvIGdldCBhDQogICAg ICAgICAgICAgICAgICAgYmFzZWxpbmUgdG8gZmluZCB0aGUgbmV3IGZpbGUuICovDQogICAgICAg ICAgICAgICAgc3RhdHVzID0gY2Fub25fdXNiX2xpc3RfYWxsX2RpcnMgKCBjYW1lcmEsICZpbml0 aWFsX3N0YXRlLCAmaW5pdGlhbF9zdGF0ZV9sZW4sIGNvbnRleHQgKTsNCg0KICAgICAgICAgICAg ICAgIGlmICggc3RhdHVzIDwgMCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdwX2NvbnRl eHRfZXJyb3IgKGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfKCJjYW5vbl9pbnRfY2FwdHVyZV9pbWFnZTogaW5pdGlhbCBjYW5vbl91c2JfbGlzdF9h bGxfZGlycygpIGZhaWxlZCB3aXRoIHN0YXR1cyAlbGkiKSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKXN0YXR1cyApOw0KICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHN0YXR1czsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg ICBncF9wb3J0X2dldF90aW1lb3V0IChjYW1lcmEtPnBvcnQsICZtc3RpbWVvdXQpOw0KICAgICAg ICAgICAgICAgIEdQX0RFQlVHKCJjYW5vbl9pbnRfY2FwdHVyZV9pbWFnZTogdXNiIHBvcnQgdGlt ZW91dCBzdGFydHMgYXQgJWRtcyIsIG1zdGltZW91dCk7DQoNCiAgICAgICAgICAgICAgICAvKg0K ICAgICAgICAgICAgICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBDT05UUk9MX0NBTUVSQSBjb21t YW5kcy4NCiAgICAgICAgICAgICAgICAgKi8NCg0KICAgICAgICAgICAgICAgIGdwX3BvcnRfc2V0 X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgMTUwMDApOw0KDQogICAgICAgICAgICAgICAgaWYgKCFj YW1lcmEtPnBsLT5yZW1vdGVfY29udHJvbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dHVzID0gY2Fub25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9sIChjYW1lcmEsIGNvbnRleHQpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KCQkJCWZyZWUgKCBp bml0aWFsX3N0YXRlICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz dGF0dXM7DQoJCQl9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyoNCiAg ICAgICAgICAgICAgICAgKiBTZXQgdGhlIGNhcHR1cmVkIGltYWdlIHRyYW5zZmVyIG1vZGUuICBX ZSBoYXZlIGZvdXIgb3B0aW9ucw0KICAgICAgICAgICAgICAgICAqIHRoYXQgd2UgY2FuIHNwZWNp ZnkgYW55IGNvbWJvIG9mLCBjYXB0dXJlZCB0aHVtYiB0byBQQywNCiAgICAgICAgICAgICAgICAg KiBmdWxsIHRvIFBDLCB0aHVtYiB0byBkaXNrLCBhbmQgZnVsbCB0byBkaXNrLg0KICAgICAgICAg ICAgICAgICAqDQogICAgICAgICAgICAgICAgICogVGhlIHRvLVBDIG9wdGlvbiB3aWxsIHJldHVy biBhIGxlbmd0aCBhbmQgaW50ZWdlcg0KICAgICAgICAgICAgICAgICAqIGtleSBmcm9tIGNhbm9u X3VzYl9jYXB0dXJlX2RpYWxvZ3VlKCkgdG8gdXNlIGluIHRoZQ0KICAgICAgICAgICAgICAgICAq ICJEb3dubG9hZCBDYXB0dXJlZCBJbWFnZSIgY29tbWFuZC4NCiAgICAgICAgICAgICAgICAgKg0K ICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImNhbm9uX2lu dF9jYXB0dXJlX2ltYWdlOiB0cmFuc2ZlciBtb2RlIGlzICV4IiwgdHJhbnNmZXJtb2RlICk7DQog ICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2Ft ZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENBTk9OX1VTQl9DT05UUk9MX1NFVF9UUkFOU0ZFUl9NT0RFLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIHRyYW5zZmVybW9k ZSk7DQogICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KICAgICAgICAgICAgICAg ICAgICAgICAgY2Fub25faW50X2VuZF9yZW1vdGVfY29udHJvbCAoY2FtZXJhLCBjb250ZXh0KTsN CgkJCWZyZWUgKCBpbml0aWFsX3N0YXRlICk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gc3RhdHVzOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGdwX3BvcnRf c2V0X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgbXN0aW1lb3V0KTsNCiAgICAgICAgICAgICAgICBH UF9ERUJVRygiY2Fub25faW50X2NhcHR1cmVfaW1hZ2U6IHNldCBjYW1lcmEgcG9ydCB0aW1lb3V0 IGJhY2sgdG8gJWQgc2Vjb25kcy4uLiIsIG1zdGltZW91dCAvIDEwMDAgKTsNCg0KICAgICAgICAg ICAgICAgIC8qIEdldCByZWxlYXNlIHBhcmFtZXRlcnMgYSBjb3VwbGUgb2YgdGltZXMsIGp1c3Qg dG8NCiAgICAgICAgICAgICAgICAgICBzZWUgaWYgdGhhdCBoZWxwcy4gKi8NCiAgICAgICAgICAg ICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9jb21tYW5kIChjYW1lcmEsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOT05f VVNCX0NPTlRST0xfR0VUX1BBUkFNUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAwKTsNCiAgICAgICAgICAgICAgICBpZiAoIHN0 YXR1cyA8IDAgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl9pbnRfZW5kX3JlbW90 ZV9jb250cm9sIChjYW1lcmEsIGNvbnRleHQpOw0KCQkJZnJlZSAoIGluaXRpYWxfc3RhdGUgKTsN CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgICAgICAgICAg fQ0KDQojaWZkZWYgREVCVUdfVElOWV9JTUFHRVMNCiAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfYmxvY2s7DQogICAgICAgICAg ICAgICAgICAgICAgICBpbnQgcmVzdWx0X2xlbiwgcGF5bG9hZF9sZW47DQogICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMHg1OV07DQogICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICpwYXJhbXM7DQogICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyIGRlc2NbMTAyNF07DQogICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk X2xlbiA9IGNhbm9uX2ludF9wYWNrX2NvbnRyb2xfc3ViY21kICggcGF5bG9hZCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDQU5PTl9VU0JfQ09OVFJPTF9HRVRfUEFSQU1TLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDAs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVzYyApOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2Js b2NrID0gY2Fub25fdXNiX2RpYWxvZ3VlICggY2FtZXJhLCBDQU5PTl9VU0JfRlVOQ1RJT05fQ09O VFJPTF9DQU1FUkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmcmVzdWx0X2xlbiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4gKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0X2Jsb2NrID09IE5VTEwgKSB7DQoJCQkJ ZnJlZSAoIGluaXRpYWxfc3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEdQX0VSUk9SOw0KCQkJfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQg KCBwYXlsb2FkLCAwLCBzaXplb2YocGF5bG9hZCkgKTsNCiAgICAgICAgICAgICAgICAgICAgICAg IHBhcmFtcyA9IHBheWxvYWQrMHgwODsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAo IHBhcmFtcywgcmVzdWx0X2Jsb2NrKzB4MGMsIDB4MzAgKTsNCg0KICAgICAgICAgICAgICAgICAg ICAgICAgcGF5bG9hZFswXSA9IDB4MDc7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk WzRdID0gMHgzMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXSA9IDI7ICAgICAg IC8qICJOb3JtYWwiIGNvbXByZXNzaW9uICovDQogICAgICAgICAgICAgICAgICAgICAgICBwYXJh bXNbMl0gPSAxOyAgICAgICAvKiBKUEVHICovDQogICAgICAgICAgICAgICAgICAgICAgICBwYXJh bXNbM10gPSAyOyAgICAgICAvKiBzbWFsbCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgcGFy YW1zWzRdID0gcGFyYW1zWzVdID0gMDsgLyogU2VsZiB0aW1lciBvZmYgKi8NCiAgICAgICAgICAg ICAgICAgICAgICAgIHBhcmFtc1s2XSA9IDA7ICAgICAgICAgICAgIC8qIEZsYXNoIG9mZiAqLw0K ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzddID0gMDsgICAgICAgICAgICAgLyogQmVl cCBvZmYgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9ibG9jayA9IGNhbm9uX3Vz Yl9kaWFsb2d1ZSAoIGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0NPTlRST0xfQ0FNRVJBLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnJlc3VsdF9sZW4sIHBheWxvYWQsIDB4MzggKTsNCiAgICAgICAgICAgICAgICAgICAgICAg IGlmICggcmVzdWx0X2Jsb2NrID09IE5VTEwgKSB7DQoJCQkJZnJlZSAoIGluaXRpYWxfc3RhdGUg KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SOw0KCQkJ fQ0KICAgICAgICAgICAgICAgIH0NCiNlbmRpZiAvKiBERUJVR19USU5ZX0lNQUdFUyAqLw0KDQog ICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2Ft ZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENBTk9OX1VTQl9DT05UUk9MX0dFVF9QQVJBTVMsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgdHJhbnNmZXJtb2RlKTsNCiAg ICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7DQogICAgICAgICAgICAgICAgICAgICAg ICBjYW5vbl9pbnRfZW5kX3JlbW90ZV9jb250cm9sIChjYW1lcmEsIGNvbnRleHQpOw0KCQkJZnJl ZSAoIGluaXRpYWxfc3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0 dXM7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogTG9jayBrZXlzIGhl cmUgZm9yIEVPUyAqLw0KICAgICAgICAgICAgICAgIGlmICggY2FtZXJhLT5wbC0+bWQtPm1vZGVs ID09IENBTk9OX0NMQVNTXzQgfHwgY2FtZXJhLT5wbC0+bWQtPm1vZGVsID09IENBTk9OX0NMQVNT XzYgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfbG9ja19r ZXlzKGNhbWVyYSxjb250ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVz IDwgMCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJv ciAoY29udGV4dCwgXygibG9jayBrZXlzIGZhaWxlZC4iKSk7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2wgKGNhbWVyYSwgY29udGV4 dCk7DQoJCQkJZnJlZSAoIGluaXRpYWxfc3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHN0YXR1czsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvKiBTaHV0dGVyIFJlbGVhc2UNCiAgICAg ICAgICAgICAgICAgICBDYW4ndCB1c2Ugbm9ybWFsICJjYW5vbl9pbnRfZG9fY29udHJvbF9jb21t YW5kIiwgYXMNCiAgICAgICAgICAgICAgICAgICB3ZSBtdXN0IHJlYWQgdGhlIGludGVycnVwdCBw aXBlIGJlZm9yZSB0aGUgcmVzcG9uc2UNCiAgICAgICAgICAgICAgICAgICBjb21lcyBiYWNrIGZv ciB0aGlzIGNvbW1hbmQuICovDQogICAgICAgICAgICAgICAgZGF0YSA9IGNhbm9uX3VzYl9jYXB0 dXJlX2RpYWxvZ3VlICggY2FtZXJhLCAmcmV0dXJuX2xlbmd0aCwgJnBob3RvX3N0YXR1cywgY29u dGV4dCApOw0KICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PSBOVUxMICkgew0KICAgICAgICAg ICAgICAgICAgICAgICAgLyogVHJ5IHRvIGxlYXZlIGNhbWVyYSBpbiBhIHVzYWJsZSBzdGF0ZS4g Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2wg KGNhbWVyYSwgY29udGV4dCk7DQoNCgkJCWZyZWUgKCBpbml0aWFsX3N0YXRlICk7DQogICAgICAg ICAgICAgICAgICAgICAgICAvKiBYWFggSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSB3YXkg dG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZSB0aGUgY2FtZXJhIGVycm9yIHN0 YXRlIGZvciB0aGUgY2FsbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlv bi4gIEZvciBleGFtcGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvdG9fc3RhdHVz ID09IDB4MDEgc2VlbXMgdG8gbWVhbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9m b2N1cyBmYWlsdXJlIiBvbiB0aGUgRU9TIDVELiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHBob3RvX3N0YXR1cyAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gR1BfRVJST1JfQ0FNRVJBX0VSUk9SOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJ TFVSRTsNCg0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8qIE5vdyBsaXN0 IGFsbCBkaXJlY3RvcmllcyBvbiB0aGUgY2FtZXJhOyB0aGlzIGhhcw0KICAgICAgICAgICAgICAg ICAgIHByZXN1bWFibHkgYWRkZWQgYW4gaW1hZ2UgZmlsZS4gRmluZCB0aGUgZGlmZmVyZW5jZQ0K ICAgICAgICAgICAgICAgICAgIGFuZCBkZWNvZGUgdG8gcmV0dXJuIHJlYWwgcGF0aCBhbmQgZmls ZSBuYW1lcy4gKi8NCiAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfbGlzdF9hbGxf ZGlycyAoIGNhbWVyYSwgJmZpbmFsX3N0YXRlLCAmZmluYWxfc3RhdGVfbGVuLCBjb250ZXh0ICk7 DQogICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KICAgICAgICAgICAgICAgICAg ICAgICAgZ3BfY29udGV4dF9lcnJvciAoIGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXygiY2Fub25faW50X2NhcHR1cmVfaW1hZ2U6Ig0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmaW5hbCBjYW5vbl91c2Jf bGlzdF9hbGxfZGlycygpIGZhaWxlZCB3aXRoIHN0YXR1cyAlaSIpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyApOw0KCQkJZnJlZSAoIGluaXRpYWxf c3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAg ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogRmluZCBuZXcgZmlsZSBuYW1lIGluIGNh bWVyYSBkaXJlY3RvcnkgKi8NCiAgICAgICAgICAgICAgICBjYW5vbl9pbnRfZmluZF9uZXdfaW1h Z2UgKCBjYW1lcmEsIGluaXRpYWxfc3RhdGUsIGluaXRpYWxfc3RhdGVfbGVuLCBmaW5hbF9zdGF0 ZSwgZmluYWxfc3RhdGVfbGVuLCBwYXRoICk7DQoNCgkJLyogU2F2ZSB0aGlzIHN0YXRlIHRvIHRo ZSBjYW1lcmEgZGlyZWN0b3J5IHN0YXRlICovDQoJCWlmIChjYW1lcmEtPnBsLT5kaXJlY3Rvcnlf c3RhdGUpDQoJCQlmcmVlIChjYW1lcmEtPnBsLT5kaXJlY3Rvcnlfc3RhdGUpOw0KCQljYW1lcmEt PnBsLT5kaXJlY3Rvcnlfc3RhdGUgPSBmaW5hbF9zdGF0ZTsNCgkJY2FtZXJhLT5wbC0+ZGlyZWN0 b3J5X3N0YXRlX2xlbmd0aCA9IGZpbmFsX3N0YXRlX2xlbjsNCg0KICAgICAgICAgICAgICAgIGZy ZWUgKCBpbml0aWFsX3N0YXRlICk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNh c2UgR1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX05PVF9T VVBQT1JURUQ7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIEdQX1BPUlRfREVGQVVM VA0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fu b25faW50X3NldF9maWxlX2F0dHJpYnV0ZXM6DQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3 aXRoDQogKiBAZmlsZTogZmlsZSB0byB3b3JrIG9uDQogKiBAZGlyOiBkaXJlY3RvcnkgdG8gd29y ayBpbg0KICogQGF0dHJzOiAjY2Fub25EaXJlbnRBdHRyaWJ1dGVCaXRzIHdpdGggdGhlIGJpdHMg dG8gc2V0DQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICog U2V0cyBhIGZpbGUncyBhdHRyaWJ1dGVzLiBTZWUgdGhlICdQcm90b2NvbCcgZmlsZSBmb3IgZGV0 YWlscy4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0K Y2Fub25faW50X3NldF9maWxlX2F0dHJpYnV0ZXMgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFy ICpmaWxlLCBjb25zdCBjaGFyICpkaXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2Fub25EaXJlbnRBdHRyaWJ1dGVCaXRzIGF0dHJzLCBHUENvbnRleHQgKmNvbnRleHQpDQp7DQog ICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAgICAgICAgdW5zaWduZWQgY2hhciBhdHRyWzRd Ow0KICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25f aW50X3NldF9maWxlX2F0dHJpYnV0ZXMoKSBjYWxsZWQgZm9yICclcycgJyVzJywgYXR0cmlidXRl cyAweCV4IiwNCiAgICAgICAgICAgICAgICAgIGRpciwgZmlsZSwgYXR0cnMpOw0KDQogICAgICAg IGF0dHJbMF0gPSBhdHRyWzFdID0gYXR0clsyXSA9IDA7DQogICAgICAgIGF0dHJbM10gPSBhdHRy czsNCg0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAg ICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fu b25fdXNiX3NldF9maWxlX2F0dHJpYnV0ZXMgKCBjYW1lcmEsIGF0dHJzLCBkaXIsIGZpbGUsIGNv bnRleHQgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg IGNhc2UgR1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5v bl9zZXJpYWxfZGlhbG9ndWUgKGNhbWVyYSwgY29udGV4dCwgMHhlLCAweDExLCAmbGVuLCBhdHRy LCA0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaXIsIHN0cmxlbiAoZGlyKSArIDEsIGZpbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoZmlsZSkgKyAxLCBOVUxMKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhbm9uX3NlcmlhbF9lcnJvcl90eXBlIChjYW1lcmEpOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsN CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoNCiAgICAgICAg aWYgKGxlbiAhPSAweDQpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9z ZXRfZmlsZV9hdHRyaWJ1dGVzOiBVbmV4cGVjdGVkIGxlbmd0aCByZXR1cm5lZCAiDQogICAgICAg ICAgICAgICAgICAgICAgICAgICIoZXhwZWN0ZWQgJWkgZ290ICVpKSIsIDB4NCwgbGVuKTsNCiAg ICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0N Cg0KICAgICAgICBHUF9MT0dfREFUQSAoKGNoYXIgKiltc2csIDQsDQogICAgICAgICAgICAgICAg ICAgICAiY2Fub25faW50X3NldF9maWxlX2F0dHJpYnV0ZXM6IHJldHVybmVkIGZvdXIgYnl0ZXMg YXMgZXhwZWN0ZWQsICINCiAgICAgICAgICAgICAgICAgICAgICJ3ZSBzaG91bGQgY2hlY2sgaWYg dGhleSBpbmRpY2F0ZSBlcnJvciBvciBub3QuIFJldHVybmVkIGRhdGE6Iik7DQoNCiAgICAgICAg cmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFt cw0KICogQGNhbWVyYTogdGhlIGNhbWVyYSB0byB3b3JrIG9uDQogKiBAY29udGV4dDogdGhlIGNv bnRleHQgdG8gcHJpbnQgb24gZXJyb3INCiAqDQogKiBSZWFkcyB0aGUgY2FtZXJhJ3MgcmVsZWFz ZSBwYXJhbWV0ZXJzIChJU08sIGFwZXJ0dXJlLCBzaHV0dGVyIHNwZWVkLCBldGMpDQogKg0KICog UmlnaHQgbm93IHRoaXMgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gYW4gRU9TIDVEIHZpYSBVU0Iu DQogKiBOb3RlIHRoYXQgdGhlIGNhbWVyYSBtdXN0IGJlIHVuZGVyIFVTQiBjb250cm9sIHZpYQ0K ICogY2Fub25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9sKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBm dW5jdGlvbi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmlu dA0KY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoQ2FtZXJhICpjYW1lcmEsIEdQQ29udGV4 dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqcmVzcG9uc2UgPSBOVUxMOw0K ICAgICAgICB1bnNpZ25lZCBpbnQgbGVuID0gMHg4YzsNCiAgICAgICAgdW5zaWduZWQgaW50IGk7 DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0 X3JlbGVhc2VfcGFyYW1zKCkiKTsNCg0KICAgICAgICAvKiBjYW5vbl9pbnRfc3RhcnRfcmVtb3Rl X2NvbnRyb2woKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUNCiAgICAgICAgICAgdGhpcyBmdW5jdGlv biAqLw0KICAgICAgICBpZiAoIWNhbWVyYS0+cGwtPnJlbW90ZV9jb250cm9sKSB7DQogICAgICAg ICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3JlbGVhc2VfcGFyYW1zOiBDYW1lcmEg bm90IHVuZGVyIFVTQiBjb250cm9sIik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9S Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0K ICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAg ICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZSAoY2FtZXJhLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENBTk9OX1VTQl9DT05UUk9MX0dFVF9QQVJBTVMsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMCwgJnJlc3BvbnNl LCAmbGVuKTsNCgkJCWlmICggc3RhdHVzICE9IEdQX09LICkNCgkJCQlyZXR1cm4gc3RhdHVzOw0K DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlID09IE5VTEwgKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9S VF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NV UFBPUlRFRDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg IEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAobGVuICE9IDB4OGMp IHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJh bXM6IFVuZXhwZWN0ZWQgbGVuZ3RoIHJldHVybmVkICINCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIihleHBlY3RlZCAlaSBnb3QgJWkpIiwgMHg4YywgbGVuKTsNCiAgICAgICAgICAgICAgICBy ZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KDQogICAgICAgIC8q DQogICAgICAgICAqIDB4NWMgaXMgdGhlIG9mZnNldCB0byB0aGUgY2FtZXJhIHBhcmFtZXRlcnMg aW4gdGhlDQogICAgICAgICAqIGdldCByZWxlYXNlIHBhcmFtcyByZXNwb25zZSBkYXRhDQogICAg ICAgICAqLw0KICAgICAgICBtZW1jcHkoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMsIHJlc3Bv bnNlICsgMHg1YywNCiAgICAgICAgICAgICAgIHNpemVvZihjYW1lcmEtPnBsLT5yZWxlYXNlX3Bh cmFtcykpOw0KDQoJZm9yIChpPTA7aTxzaXplb2YoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMp O2krKykgew0KCQlHUF9ERUJVRygiY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtczogWyVkXSA9 IDB4JTAyeCIsIGksIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW2ldKTsNCgl9DQoNCiAgICAg ICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3JlbGVhc2VfcGFyYW1zOiBzaHV0dGVyIHNwZWVk ID0gMHglMDJ4IiwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1z W1NIVVRURVJTUEVFRF9JTkRFWF0pOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2dl dF9yZWxlYXNlX3BhcmFtczogYXBlcnR1cmUgPSAweCUwMngiLA0KICAgICAgICAgICAgICAgICAg Y2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5ERVhdKTsNCg0KICAgICAgICBH UF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IGlzbyA9IDB4JTAyeCIsDQog ICAgICAgICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJU09fSU5ERVhdKTsN Cg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IGZvY3Vz IG1vZGUgPSAweCUwMngiLA0KICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9w YXJhbXNbRk9DVVNfTU9ERV9JTkRFWF0pOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50 X2dldF9yZWxlYXNlX3BhcmFtczogYmVlcCBtb2RlID0gMHglMDJ4IiwNCiAgICAgICAgICAgICAg ICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0JFRVBfSU5ERVhdKTsNCg0KICAgICAgICBH UF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IGZsYXNoIG1vZGUgPSAweCUw MngiLA0KICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbRkxBU0hf SU5ERVhdKTsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJh bXM6IGV4cG9zdXJlYmlhcyA9IDB4JTAyeCIsDQogICAgICAgICAgICAgICAgICBjYW1lcmEtPnBs LT5yZWxlYXNlX3BhcmFtc1tFWFBPU1VSRUJJQVNfSU5ERVhdKTsNCg0KICAgICAgICBHUF9ERUJV RyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IHNob290aW5nIG1vZGUgPSAweCUwMngi LA0KICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbU0hPT1RJTkdf TU9ERV9JTkRFWF0pOw0KDQoNCiAgICAgICAgY2FtZXJhLT5wbC0+c2Vjb25kYXJ5X2ltYWdlID0g MDsNCgkvKiBCYXNlZCBvbiB0aGUgaW1hZ2UgZm9ybWF0IHNldHRpbmdzIGluIHRoZSByZWxlYXNl IHBhcmFtcywNCgkgICBkZXRlcm1pbmUgd2hldGhlciB3ZSBleHBlY3Qgb25lIG9yIHR3byBpbWFn ZXMgdG8gYmUgcmV0dXJuZWQNCgkgICBieSB0aGUgY2FtZXJhLg0KICAgICAgICAgICBJIGFtIG5v dCBzdXJlIGlmIHRoaXMgd2lsbCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLUVPUyA1RA0KICAgICAg ICAgICBjYW1lcmFzIC0gSSB3b3VsZCBhcHByZWNpYXRlIHRlc3RpbmcgZmVlZGJhY2sgZnJvbSBv dGhlcg0KICAgICAgICAgICBDYW5vbiBjYW1lcmEgdXNlcnMuICBUbyB0ZXN0IHRyeSBjYXB0dXJp bmcgYW4gaW1hZ2UNCiAgICAgICAgICAgdG8gdGhlIGhvc3QgY29tcHV0ZXIgaW4gYSBzaW5nbGUg Zm9ybWF0IChlLmcuLCBSQVcgb3IgTGFyZ2UgRmluZQ0KICAgICAgICAgICBKUEVHKS4gIEFsc28g dHJ5IGNhcHR1cmluZyBhbiBpbWFnZSB3aGVuIHRoZSBjYW1lcmEgaXMgc2V0IHRvDQogICAgICAg ICAgIGEgZHVhbCBmb3JtYXQsIGUuZy4sIFJBVyArIExhcmdlIEZpbmUgSlBFRy4gTm90ZSB0aGF0 IGN1cnJlbnRseSwgd2UNCiAgICAgICAgICAgb25seSBzYXZlIHRoZSBwcmltYXJ5IGltYWdlIHRv IGRpc2suDQogICAgICAgICAgIFRoYW5rcyAtIDxwYXVsQGJvb3lha2EuY29tPg0KICAgICAgICAq Lw0KCWlmIChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRfMl9JTkRFWF0g JiAweGYwKQ0KCQljYW1lcmEtPnBsLT5zZWNvbmRhcnlfaW1hZ2UgPSAxOw0KDQogICAgICAgIHJl dHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9zZXRfc2h1dHRlcl9zcGVlZA0K ICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQHNodXR0ZXJfc3BlZWQ6IHNodXR0 ZXIgc3BlZWQgLSB1c2Ugb25lIG9mIHRoZSBkZWZpbmVzIHN1Y2ggYXMNCiAqICAgICAgICAgICAg ICAgICBTSFVUVEVSX1NQRUVEXzFfMTUgZm9yIDEvMTV0aCBvZiBhIHNlY29uZCwgZXRjLg0KICog QGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNh bWVyYSdzIHNodXR0ZXIgc3BlZWQuICBPbmx5IHRlc3RlZCBmb3IgRU9TIDVEIHZpYSBVU0IuDQog Kg0KICogUmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2lu dF9zZXRfc2h1dHRlcl9zcGVlZCAoQ2FtZXJhICpjYW1lcmEsIGNhbm9uU2h1dHRlclNwZWVkU3Rh dGUgc2h1dHRlcl9zcGVlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0 ICpjb250ZXh0KQ0Kew0KICAgICAgICBpbnQgc3RhdHVzOw0KDQogICAgICAgIEdQX0RFQlVHICgi Y2Fub25faW50X3NldF9zaHV0dGVyX3NwZWVkKCkgY2FsbGVkIGZvciBzcGVlZCAweCUwMngiLA0K ICAgICAgICAgICAgICAgICAgc2h1dHRlcl9zcGVlZCk7DQoNCiAgICAgICAgLyogR2V0IHRoZSBj dXJyZW50IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9n ZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1 cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KDQogICAgICAgIC8qIE1v ZGlmeSB0aGUgc2h1dHRlciBzcGVlZCAqLw0KDQogICAgICAgIC8qIFhYWCBtdXN0IHRlc3QgZm9y IHZhbGlkIHNodXR0ZXIgc3BlZWRzIGhlcmUgKi8NCiAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFz ZV9wYXJhbXNbU0hVVFRFUlNQRUVEX0lOREVYXSA9IHNodXR0ZXJfc3BlZWQ7DQoNCiAgICAgICAg LyogVXBsb2FkIHRoZSBzaHV0dGVyIHNwZWVkIHRvIHRoZSBjYW1lcmEgKi8NCiAgICAgICAgc3Rh dHVzID0gY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0K ICAgICAgICBpZiAoc3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0K DQogICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQoNCiAgICAg ICAgc3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0 KTsNCg0KICAgICAgICBpZiAoc3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3Rh dHVzOw0KDQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tTSFVUVEVSU1BF RURfSU5ERVhdICE9IHNodXR0ZXJfc3BlZWQpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAo ImNhbm9uX2ludF9zZXRfc2h1dHRlcl9zcGVlZDogQ291bGQgbm90IHNldCBzaHV0dGVyICINCiAg ICAgICAgICAgICAgICAgICAgICAgICAgInNwZWVkIHRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVk IDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0dGVyX3NwZWVkLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tTSFVUVEVS U1BFRURfSU5ERVhdKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NVUFBP UlRFRDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9u X2ludF9zZXRfc2h1dHRlcl9zcGVlZDogc2h1dHRlciBzcGVlZCBjaGFuZ2UgdmVyaWZpZWQiKTsN CiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9zaHV0dGVyX3Nw ZWVkKCkgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5Iik7DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0K fQ0KDQoNCi8qKg0KICogY2Fub25faW50X3NldF9iZWVwDQogKiBAY2FtZXJhOiBjYW1lcmEgdG8g d29yayB3aXRoDQogKiBAYmVlcF9tb2RlOiBiZWVwIG1vZGUgLSB1c2Ugb25lIG9mIHRoZSBkZWZp bmVzIHN1Y2ggYXMNCiAqICAgICAgICAgICAgICAgICBCRUVQX09OIGZvciB0dXJuaW5nIG9uIHRo ZSBiZWVwIHdoZW4gdGhlIGNhbWVyYSBzZXRzIHRoZSBmb2N1cy4NCiAqIEBjb250ZXh0OiBjb250 ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBTZXRzIHRoZSBjYW1lcmEncyBiZWVwIG1v ZGUuIE9ubHkgdGVzdGVkIGZvciBBNDAgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8y IGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9iZWVwIChDYW1lcmEgKmNh bWVyYSwgY2Fub25CZWVwTW9kZSBiZWVwX21vZGUsDQogICAgICAgICAgICAgICAgICAgIEdQQ29u dGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHN0YXR1czsNCg0KICAgICAgICBHUF9ERUJV RyAoImNhbm9uX2ludF9zZXRfYmVlcCgpIGNhbGxlZCBmb3IgYmVlcCAweCUwMngiLA0KICAgICAg ICAgICAgICAgICAgYmVlcF9tb2RlKTsNCg0KICAgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgY2Ft ZXJhIHNldHRpbmdzICovDQoNCiAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNl X3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAgICBpZiAoc3RhdHVzIDwgMCkNCiAg ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgIC8qIE1vZGlmeSB0aGUgYmVl cCBtb2RlICovDQoNCiAgICAgICAgLyogWFhYIG11c3QgdGVzdCBmb3IgdmFsaWQgc2h1dHRlciBz cGVlZHMgaGVyZSAqLw0KICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tCRUVQX0lO REVYXSA9IGJlZXBfbW9kZTsNCg0KICAgICAgICAvKiBVcGxvYWQgdGhlIGJlZXAgbW9kZSB0byB0 aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9zZXRfcmVsZWFzZV9wYXJh bXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAg ICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGNhbWVy YSBjaGFuZ2VkIGl0ISAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFz ZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQog ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICBpZiAoY2FtZXJhLT5wbC0+ cmVsZWFzZV9wYXJhbXNbQkVFUF9JTkRFWF0gIT0gYmVlcF9tb2RlKSB7DQogICAgICAgICAgICAg ICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2JlZXA6IENvdWxkIG5vdCBzZXQgYmVlcCAiDQog ICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RlIHRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVk IDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVwX21vZGUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0JFRVBfSU5ERVhd KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NVUFBPUlRFRDsNCiAgICAg ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfYmVl cDogYmVlcCBtb2RlIGNoYW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgR1Bf REVCVUcgKCJjYW5vbl9pbnRfc2V0X2JlZXAoKSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCg0K ICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCi8qKg0KICogY2Fub25faW50X3NldF9mbGFzaA0K ICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQGZsYXNoX21vZGU6IGZsYXNoIG1v ZGUgLSB1c2Ugb25lIG9mIHRoZSBkZWZpbmVzIHN1Y2ggYXMNCiAqICAgICAgICAgICAgICAgICBG TEFTSF9NT0RFX09GRiBmb3IgdHVybmluZyBvZmYgdGhlIGZsYXNoLg0KICogQGNvbnRleHQ6IGNv bnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIGZsYXNo IG1vZGUuIE9ubHkgdGVzdGVkIGZvciBBNDAgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhv dG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9mbGFzaCAoQ2FtZXJh ICpjYW1lcmEsIGNhbm9uRmxhc2hNb2RlIGZsYXNoX21vZGUsDQogICAgICAgICAgICAgICAgICAg ICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAg R1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2ZsYXNoKCkgY2FsbGVkIGZvciBmbGFzaCAweCUwMngi LA0KICAgICAgICAgICAgICAgICAgZmxhc2hfbW9kZSk7DQoNCiAgICAgICAgLyogR2V0IHRoZSBj dXJyZW50IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9n ZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1 cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICAvKiBNb2Rp ZnkgdGhlIGJlZXAgbW9kZSAqLw0KDQogICAgICAgIC8qIFhYWCBtdXN0IHRlc3QgZm9yIHZhbGlk IGZsYXNoIG1vZGUgaGVyZSAqLw0KICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tG TEFTSF9JTkRFWF0gPSBmbGFzaF9tb2RlOw0KDQogICAgICAgIC8qIFVwbG9hZCB0aGUgZmxhc2gg bW9kZSB0byB0aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9zZXRfcmVs ZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDAp DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICAvKiBNYWtlIHN1cmUg dGhlIGNhbWVyYSBjaGFuZ2VkIGl0ISAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9n ZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1 cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICBpZiAoY2Ft ZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbRkxBU0hfSU5ERVhdICE9IGZsYXNoX21vZGUpIHsNCiAg ICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZmxhc2g6IENvdWxkIG5vdCBz ZXQgZmxhc2ggIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kZSB0byAweCUwMnggKGNh bWVyYSByZXR1cm5lZCAweCUwMngpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hf bW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJh bXNbRkxBU0hfSU5ERVhdKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NV UFBPUlRFRDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNh bm9uX2ludF9zZXRfZmxhc2g6IGZsYXNoIG1vZGUgY2hhbmdlIHZlcmlmaWVkIik7DQogICAgICAg IH0NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZmxhc2goKSBmaW5pc2hlZCBz dWNjZXNzZnVsbHkiKTsNCg0KICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCg0KLyoqDQogKiBj YW5vbl9pbnRfc2V0X3pvb20NCiAqIEBjYW1lcmE6IGNhbWVyYSB0byB3b3JrIHdpdGgNCiAqIEB6 b29tX2xldmVsOiB6b29tIGxldmVsIHRvIHNldCAtIEE0MDogMS4uMTA7IEcxOiAwLi40MCAocE1h eE9wdGljYWxab29tUG9zKjQpDQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0 aW5nDQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3Mgem9vbS4gT25seSB0ZXN0ZWQgZm9yIEE0MCBh bmQgRzEgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQog Ki8NCmludA0KY2Fub25faW50X3NldF96b29tIChDYW1lcmEgKmNhbWVyYSwgdW5zaWduZWQgY2hh ciB6b29tX2xldmVsLA0KICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7 DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0 X3pvb20oKSBjYWxsZWQgZm9yIHpvb20gMHglMDJ4IiwNCiAgICAgICAgICAgICAgICAgIHpvb21f bGV2ZWwpOw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9kb19jb250cm9sX2NvbW1hbmQo IGNhbWVyYSwgQ0FOT05fVVNCX0NPTlRST0xfU0VUX1pPT01fUE9TLCAweDA0LCB6b29tX2xldmVs ICk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0 YXR1czsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfem9vbSgpIGZpbmlzaGVk IHN1Y2Nlc3NmdWxseSIpOw0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAq IGNhbm9uX2ludF9nZXRfem9vbQ0KICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICog QHpvb21fbGV2ZWw6IHBvaW50ZXIgdG8gaG9sZCByZXR1cm5lZCB6b29tIGxldmVsIC0gQTQwOiAx Li4xMDsgRzE6IDAuLjQwIChwTWF4T3B0aWNhbFpvb21Qb3MqNCkNCiAqIEB6b29tX21heDogcG9p bnRlciB0byBob2xkIHpvb20gdXBwZXIgYm91bmQNCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBl cnJvciByZXBvcnRpbmcNCiAqDQogKiBHZXRzIHRoZSBjYW1lcmEncyB6b29tLg0KICogVGVzdGVk IG9ubHkgZm9yIEcxIGFuZCBTNDUgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVy cm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X2dldF96b29tIChDYW1lcmEgKmNhbWVy YSwNCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqem9vbV9sZXZlbCwNCiAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqem9vbV9tYXgsDQogICAgICAgICAgICAgICAg ICAgIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnID0g TlVMTDsNCiAgICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4gPSAwOw0KICAgICAgICB1bnNpZ25l ZCBjaGFyIHBheWxvYWRbMHg0Y107DQogICAgICAgIGludCBwYXlsb2FkbGVuOw0KICAgICAgICBj aGFyIGRlc2NbMTI4XTsNCg0KICAgICAgICAqem9vbV9sZXZlbCA9IDA7DQogICAgICAgICp6b29t X21heCA9IDA7DQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2dldF96b29tKCkgY2FsbGVk Iik7DQoNCiAgICAgICAgcGF5bG9hZGxlbiA9IGNhbm9uX2ludF9wYWNrX2NvbnRyb2xfc3ViY21k KCBwYXlsb2FkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENBTk9OX1VTQl9DT05UUk9MX0dFVF9aT09NX1BPUywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBkZXNjICk7DQoNCiAgICAg ICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9kZWwgPT0gQ0FOT05fQ0xBU1NfNiApIHsNCiAgICAg ICAgICAgICAgICAvKiBOZXdlciBwcm90b2NvbCB1c2VzIGEgZGlmZmVyZW50IGNvZGUsIGJ1dCB3 aXRoIHNhbWUNCiAgICAgICAgICAgICAgICAgKiByZXNwb25zZS4gSXQgYWxzbyBuZWVkcyBhbiBl eHRyYSB6ZXJvIGJ5dGUgYXQgdGhlDQogICAgICAgICAgICAgICAgICogZW5kLiAqLw0KICAgICAg ICAgICAgICAgIHBheWxvYWRbcGF5bG9hZGxlbisrXSA9IDA7DQogICAgICAgICAgICAgICAgbXNn ID0gY2Fub25fdXNiX2RpYWxvZ3VlICggY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9GVU5DVElPTl9DT05UUk9MX0NBTUVSQV8yLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhbGVuLCBwYXls b2FkLCBwYXlsb2FkbGVuICk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAg ICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoIGNhbWVyYSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJPTF9DQU1F UkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFsZW4s IHBheWxvYWQsIHBheWxvYWRsZW4gKTsNCiAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAgfHwgZGF0 YWxlbiA8IDE1KSB7DQogICAgICAgICAgICAgICAgLyogRVJST1IgKi8NCiAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoIiVzIGRhdGFsZW49JXgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBk ZXNjLCBkYXRhbGVuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVE X0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICAqem9vbV9sZXZlbCA9IG1zZ1sxMl07DQogICAg ICAgICp6b29tX21heCA9IG1zZ1sxNF07DQoNCiAgICAgICAgbXNnID0gTlVMTDsNCiAgICAgICAg ZGF0YWxlbiA9IDA7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3pvb20oKSBm aW5pc2hlZCBzdWNjZXNzZnVsbHkgbGV2ZWw9JWQiLCAqem9vbV9sZXZlbCk7DQoNCiAgICAgICAg cmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X3NldF9pbWFnZV9mb3JtYXQN CiAqIEBjYW1lcmE6IGNhbWVyYSB0byB3b3JrIHdpdGgNCiAqIEByZXNfYnl0ZTE6IGJ5dGUgMSBv ZiB0aGUgMy1ieXRlIGltYWdlIGZvcm1hdCBjb2RlDQogKiBAcmVzX2J5dGUyOiBieXRlIDIgb2Yg dGhlIDMtYnl0ZSBpbWFnZSBmb3JtYXQgY29kZQ0KICogQHJlc19ieXRlMzogYnl0ZSAzIG9mIHRo ZSAzLWJ5dGUgaW1hZ2UgZm9ybWF0IGNvZGUNCiAqDQogKiBAY29udGV4dDogY29udGV4dCBmb3Ig ZXJyb3IgcmVwb3J0aW5nDQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3Mgb3V0cHV0IGltYWdlIGZv cm1hdC4gIE9ubHkgdGVzdGVkIGZvciBFT1MgNUQgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBn cGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9pbWFnZV9mb3Jt YXQgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25lZCBjaGFyIHJlc19ieXRlMSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZXNfYnl0ZTIsIHVuc2lnbmVkIGNoYXIgcmVz X2J5dGUzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7 DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0 X2ltYWdlX2Zvcm1hdCgpIGNhbGxlZCIpOw0KDQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBj YW1lcmEgc2V0dGluZ3MgKi8NCg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZ2V0X3JlbGVh c2VfcGFyYW1zIChjYW1lcmEsIGNvbnRleHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0K ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAgICAgICAgLyogTW9kaWZ5IHRoZSBp bWFnZSBmb3JtYXQgKi8NCg0KICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFH RV9GT1JNQVRfMV9JTkRFWF0gPSByZXNfYnl0ZTE7DQogICAgICAgIGNhbWVyYS0+cGwtPnJlbGVh c2VfcGFyYW1zW0lNQUdFX0ZPUk1BVF8yX0lOREVYXSA9IHJlc19ieXRlMjsNCiAgICAgICAgY2Ft ZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbSU1BR0VfRk9STUFUXzNfSU5ERVhdID0gcmVzX2J5dGUz Ow0KDQoNCgkJLyogVXBsb2FkIHRoZSBpbWFnZV9mb3JtYXQgdG8gdGhlIGNhbWVyYSAqLw0KICAg ICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfc2V0X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEsIGNvbnRl eHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBz dGF0dXM7DQoNCiAgICAgICAgLyogSXQgc2VlbXMgdG8gdGFrZSB0aGUgY2FtZXJhIGJvZHkgYSB3 aGlsZSB0byBjaGFuZ2UgdGhpcyBwYXJhbWV0ZXINCiAgICAgICAgICAgd2hlbiBhbGwgdGhyZWUg cmVzX2J5dGVzIGFyZSBjaGFuZ2VkIGF0IG9uY2UuDQogICAgICAgICAgIFNvLCBnaXZlIHRoZSBj YW1lcmEgYSBjaGFuY2UgdG8gY2F0Y2ggdXAuDQogICAgICAgICAgIDM3NTAgdXMgd2FzIG9jY2Fz aW9uYWxseSB0b28gc2hvcnQsIGJ1dCA1MDAwIHVzIHNlZW1zIHRvDQogICAgICAgICAgIHdvcmsg d2VsbC4gKi8NCiAgICAgICAgdXNsZWVwKDUwMDApOw0KDQogICAgICAgIC8qIE1ha2Ugc3VyZSB0 aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQoNCiAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2dl dF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAgICBpZiAoc3RhdHVz IDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgIGlmIChjYW1l cmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRfMV9JTkRFWF0gIT0gcmVzX2J5dGUx IHx8DQogICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRf Ml9JTkRFWF0gIT0gcmVzX2J5dGUyIHx8DQogICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNl X3BhcmFtc1tJTUFHRV9GT1JNQVRfM19JTkRFWF0gIT0gcmVzX2J5dGUzKSB7DQogICAgICAgICAg ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfaW1hZ2VfZm9ybWF0OiBDb3VsZCBub3Qgc2V0IGlt YWdlIGZvcm1hdCAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJ0byAweCUwMnggMHglMDJ4 IDB4JTAyeCAoY2FtZXJhIHJldHVybmVkIDB4JTAyeCAweCUwMnggMHglMDJ4KSIsDQogICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc19ieXRlMSwgcmVzX2J5dGUyLCByZXNfYnl0ZTMsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0lNQUdFX0ZP Uk1BVF8xX0lOREVYXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVs ZWFzZV9wYXJhbXNbSU1BR0VfRk9STUFUXzJfSU5ERVhdLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRfM19JTkRFWF0pOw0K ICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9IGVs c2Ugew0KICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2ltYWdlX2Zvcm1hdDog aW1hZ2VfZm9ybWF0IGNoYW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgR1Bf REVCVUcgKCJjYW5vbl9pbnRfc2V0X2ltYWdlX2Zvcm1hdCgpIGZpbmlzaGVkIHN1Y2Nlc3NmdWxs eSIpOw0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9z ZXRfaXNvDQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAaXNvOiBJU08gLSB1 c2Ugb25lIG9mIHRoZSBkZWZpbmVzIHN1Y2ggYXMgSVNPXzQwMCwgZXRjLg0KICogQGNvbnRleHQ6 IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIElT TyBzcGVlZC4gIE9ubHkgdGVzdGVkIGZvciBFT1MgNUQgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5z OiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9pc28gKENh bWVyYSAqY2FtZXJhLCBjYW5vbklzb1N0YXRlIGlzbywNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICBpbnQgc3RhdHVzOw0KDQogICAg ICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9pc28oKSBjYWxsZWQgZm9yIElTTyAweCUwMngi LCBpc28pOw0KDQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgKi8N Cg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZ2V0X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEs IGNvbnRleHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJl dHVybiBzdGF0dXM7DQoNCiAgICAgICAgLyogTW9kaWZ5IHRoZSBJU08gKi8NCg0KICAgICAgICBj YW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJU09fSU5ERVhdID0gaXNvOw0KDQogICAgICAgIC8q IFVwbG9hZCB0aGUgSVNPIHRvIHRoZSBjYW1lcmEgKi8NCiAgICAgICAgc3RhdHVzID0gY2Fub25f aW50X3NldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAgICBpZiAo c3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgIC8q IE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQoNCiAgICAgICAgc3RhdHVzID0g Y2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAg ICBpZiAoc3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAg ICAgIGlmIChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJU09fSU5ERVhdICE9IGlzbykgew0K ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9pc286IENvdWxkIG5vdCBz ZXQgSVNPICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIDB4JTAyeCAoY2FtZXJhIHJl dHVybmVkIDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBpc28sIGNhbWVyYS0+ cGwtPnJlbGVhc2VfcGFyYW1zW0lTT19JTkRFWF0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBH UF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfaXNvOiBJU08gY2hhbmdlIHZlcmlmaWVkIik7DQog ICAgICAgIH0NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfaXNvKCkgZmluaXNo ZWQgc3VjY2Vzc2Z1bGx5Iik7DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0K ICogY2Fub25faW50X3NldF9zaG9vdGluZ19tb2RlDQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29y ayB3aXRoDQogKiBAc2hvb3RpbmdfbW9kZTogdXNlIHRoZSB1bnNpZ25lZCBjaGFyIDhiaXQgdmFs dWUgaW4gdGhlIGFycmF5DQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5n DQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3Mgc2hvb3RpbmcgbW9kZS4NCiAqDQogKiBSZXR1cm5z OiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9zaG9vdGlu Z19tb2RlIChDYW1lcmEgKmNhbWVyYSwgdW5zaWduZWQgY2hhciBzaG9vdGluZ19tb2RlLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAg IGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X3Nob290aW5n X21vZGUoKSBjYWxsZWQgZm9yIHNob290aW5nX21vZGUgMHglMDJ4Iiwgc2hvb3RpbmdfbW9kZSk7 DQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgKi8NCiAgICAgICAg c3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsN CiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsN CiAgICAgICAgLyogTW9kaWZ5IHRoZSBzaG9vdGluZyBtb2RlICovDQogICAgICAgIGNhbWVyYS0+ cGwtPnJlbGVhc2VfcGFyYW1zW1NIT09USU5HX01PREVfSU5ERVhdID0gc2hvb3RpbmdfbW9kZTsN CiAgICAgICAgLyogVXBsb2FkIHRoZSBzaG9vdGluZyBtb2RlIHRvIHRoZSBjYW1lcmEgKi8NCiAg ICAgICAgc3RhdHVzID0gY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250 ZXh0KTsNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0 YXR1czsNCiAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBjYW1lcmEgY2hhbmdlZCBpdCEgKG5vdCBh bGwgYXJlIGFibGUgdG8pICovDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFz ZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0KICAg ICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5yZWxl YXNlX3BhcmFtc1tTSE9PVElOR19NT0RFX0lOREVYXSAhPSBzaG9vdGluZ19tb2RlKSB7DQogICAg ICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X3Nob290aW5nX21vZGU6IENvdWxk IG5vdCBzZXQgc2hvb3RpbmcgbW9kZSAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJ0byAw eCUwMnggKGNhbWVyYSByZXR1cm5lZCAweCUwMngpIiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgc2hvb3RpbmdfbW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+ cmVsZWFzZV9wYXJhbXNbU0hPT1RJTkdfTU9ERV9JTkRFWF0pOw0KICAgICAgICAgICAgICAgIHJl dHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg ICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfc2hvb3RpbmdfbW9kZTogc2hvb3Rpbmdf bW9kZSBjaGFuZ2UgdmVyaWZpZWQiKTsNCiAgICAgICAgfQ0KICAgICAgICBHUF9ERUJVRyAoImNh bm9uX2ludF9zZXRfc2hvb3RpbmdfbW9kZSgpIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSIpOw0KICAg ICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCg0KLyoqDQogKiBjYW5vbl9pbnRfc2V0X2FwZXJ0dXJl DQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAYXBlcnR1cmU6IHVzZSBvbmUg b2YgdGhlIGRlZmluZXMgc3VjaCBhcyBBUEVSVFVSRV9GNV82LCBldGMuDQogKiBAY29udGV4dDog Y29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3MgYXBl cnR1cmUuICBPbmx5IHRlc3RlZCBmb3IgRU9TIDVEIHZpYSBVU0IuDQogKg0KICogUmV0dXJuczog Z3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9zZXRfYXBlcnR1cmUg KENhbWVyYSAqY2FtZXJhLCBjYW5vbkFwZXJ0dXJlU3RhdGUgYXBlcnR1cmUsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHN0 YXR1czsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfYXBlcnR1cmUoKSBjYWxs ZWQgZm9yIGFwZXJ0dXJlIDB4JTAyeCIsDQogICAgICAgICAgICAgICAgICBhcGVydHVyZSk7DQoN CiAgICAgICAgLyogR2V0IHRoZSBjdXJyZW50IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAg IHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7 DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1 czsNCg0KICAgICAgICAvKiBNb2RpZnkgdGhlIGFwZXJ0dXJlICovDQoNCiAgICAgICAgY2FtZXJh LT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5ERVhdID0gYXBlcnR1cmU7DQoNCiAgICAg ICAgLyogVXBsb2FkIHRoZSBhcGVydHVyZSB0byB0aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1 cyA9IGNhbm9uX2ludF9zZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAg ICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0K ICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGNhbWVyYSBjaGFuZ2VkIGl0ISAqLw0KDQogICAgICAg IHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7 DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1 czsNCg0KICAgICAgICBpZiAoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5E RVhdICE9IGFwZXJ0dXJlKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRf c2V0X2FwZXJ0dXJlOiBDb3VsZCBub3Qgc2V0IGFwZXJ0dXJlICINCiAgICAgICAgICAgICAgICAg ICAgICAgICAgInRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVkIDB4JTAyeCkiLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICBhcGVydHVyZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2Ft ZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5ERVhdKTsNCiAgICAgICAgICAgICAg ICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0gZWxzZSB7DQogICAg ICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2FwZXJ0dXJlOiBhcGVydHVyZSBj aGFuZ2UgdmVyaWZpZWQiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25f aW50X3NldF9hcGVydHVyZSgpIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSIpOw0KDQogICAgICAgIHJl dHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9zZXRfZXhwb3N1cmViaWFzDQog KiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAYXBlcnR1cmU6IHVzZSB0aGUgdW5z aWduZWQgY2hhciA4Yml0IHZhbHVlIGluIHRoZSBhcnJheQ0KICogQGNvbnRleHQ6IGNvbnRleHQg Zm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIGV4cG9zdXJlIGJp YXMuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNh bm9uX2ludF9zZXRfZXhwb3N1cmViaWFzIChDYW1lcmEgKmNhbWVyYSwgdW5zaWduZWQgY2hhciBl eHBiaWFzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQp DQp7DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRf c2V0X2V4cG9zdXJlYmlhcygpIGNhbGxlZCBmb3IgYXBlcnR1cmUgMHglMDJ4IiwgZXhwYmlhcyk7 DQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgKi8NCiAgICAgICAg c3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsN CiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsN CiAgICAgICAgLyogTW9kaWZ5IHRoZSBhcGVydHVyZSAqLw0KICAgICAgICBjYW1lcmEtPnBsLT5y ZWxlYXNlX3BhcmFtc1tFWFBPU1VSRUJJQVNfSU5ERVhdID0gZXhwYmlhczsNCiAgICAgICAgLyog VXBsb2FkIHRoZSBhcGVydHVyZSB0byB0aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1cyA9IGNh bm9uX2ludF9zZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQogICAgICAgIGlm IChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgIC8q IE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQogICAgICAgIHN0YXR1cyA9IGNh bm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQogICAgICAgIGlm IChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgIGlm IChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tFWFBPU1VSRUJJQVNfSU5ERVhdICE9IGV4cGJp YXMpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZXhwb3N1cmVi aWFzOiBDb3VsZCBub3Qgc2V0IGV4cG9zdXJlIGJpYXMgIg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAidG8gMHglMDJ4IChjYW1lcmEgcmV0dXJuZWQgMHglMDJ4KSIsDQogICAgICAgICAgICAg ICAgICAgICAgICAgIGV4cGJpYXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS0+ cGwtPnJlbGVhc2VfcGFyYW1zW0VYUE9TVVJFQklBU19JTkRFWF0pOw0KICAgICAgICAgICAgICAg IHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAg ICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZXhwb3N1cmViaWFzOiBleHBiaWFz IGNoYW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQogICAgICAgIEdQX0RFQlVHICgiY2Fub25f aW50X3NldF9leHBvc3VyZWJpYXMoKSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCiAgICAgICAg cmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X3NldF9mb2N1c19tb2RlDQog KiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAZm9jdXNfbW9kZTogdXNlIG9uZSBv ZiB0aGUgZGVmaW5lcyBzdWNoIGFzIEFVVE9fRk9DVVNfQUlfU0VSVk8sIGV0Yy4NCiAqIEBjb250 ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBTZXRzIHRoZSBjYW1lcmEn cyBmb2N1cyBtb2RlLiAgTm90ZSB0aGF0IHRoZSBzZWxlY3Rpb24gb2YgZm9jdXMgbW9kZXMgaXMN CiAqIGxpbWl0ZWQgYnkgdGhlIEFGL01GIHN3aXRjaCBvbiB0aGUgbGVucyBib2R5LiAgSW4gcGFy dGljdWxhciwgdGhpcyBmdW5jdGlvbg0KICogaXMgb25seSB1c2VmdWwgZm9yIHN3aXRjaGluZyBi ZXR3ZWVuIHRoZSB2YXJpb3VzIGF1dG9mb2N1cyBtb2RlcyB3aGlsZSB0aGUNCiAqIGxlbnMgZm9j dXMgc3dpdGNoIGlzIHNldCB0byAnQUYnLiAgT25seSB0ZXN0ZWQgZm9yIEVPUyA1RCB2aWEgVVNC Lg0KICoNCiAqIFJldHVybnM6IGdwaG90bzIgZXJyb3IgY29kZQ0KICoNCiAqLw0KaW50DQpjYW5v bl9pbnRfc2V0X2ZvY3VzX21vZGUgKENhbWVyYSAqY2FtZXJhLCBjYW5vbkZvY3VzTW9kZVN0YXRl IGZvY3VzX21vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQ29udGV4dCAqY29u dGV4dCkNCnsNCiAgICAgICAgaW50IHN0YXR1czsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9u X2ludF9zZXRfZm9jdXNfbW9kZSgpIGNhbGxlZCBmb3IgZm9jdXMgbW9kZSAweCUwMngiLA0KICAg ICAgICAgICAgICAgICAgZm9jdXNfbW9kZSk7DQoNCiAgICAgICAgLyogR2V0IHRoZSBjdXJyZW50 IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVs ZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDAp DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KDQogICAgICAgIC8qIE1vZGlmeSB0 aGUgZm9jdXMgbW9kZSAqLw0KDQogICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0ZP Q1VTX01PREVfSU5ERVhdID0gZm9jdXNfbW9kZTsNCg0KICAgICAgICAvKiBVcGxvYWQgdGhlIGZv Y3VzIG1vZGUgdG8gdGhlIGNhbWVyYSAqLw0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfc2V0 X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEsIGNvbnRleHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMg PCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAgICAgICAgLyogTWFrZSBz dXJlIHRoZSBjYW1lcmEgY2hhbmdlZCBpdCEgKi8NCg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9p bnRfZ2V0X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEsIGNvbnRleHQpOw0KDQogICAgICAgIGlmIChz dGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAgICAgICAgaWYg KGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0ZPQ1VTX01PREVfSU5ERVhdICE9IGZvY3VzX21v ZGUpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZm9jdXNfbW9k ZTogQ291bGQgbm90IHNldCBmb2N1c19tb2RlICINCiAgICAgICAgICAgICAgICAgICAgICAgICAg InRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVkIDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICBmb2N1c19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEtPnBs LT5yZWxlYXNlX3BhcmFtc1tGT0NVU19NT0RFX0lOREVYXSk7DQogICAgICAgICAgICAgICAgcmV0 dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg ICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9mb2N1c19tb2RlOiBmb2N1c19tb2RlIGNo YW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9p bnRfc2V0X2ZvY3VzX21vZGUoKSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCg0KICAgICAgICBy ZXR1cm4gR1BfT0s7DQp9DQoNCi8qKg0KICogY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcw0K ICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9y IGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIHJlbGVhc2UgcGFyYW1z IC0tICBlLmcuLCBzaHV0dGVyIHNwZWVkLA0KICogYXBlcnR1cmUsIElTTyAtLSBiYXNlZCBvbiB0 aGUgY3VycmVudCBpbi1tZW1vcnkgc3RhdGUgZm9yIHRoZXNlIHBhcmFtcy4NCiAqDQogKiBSZXR1 cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCnN0YXRpYyBpbnQNCmNhbm9uX2ludF9z ZXRfcmVsZWFzZV9wYXJhbXMgKENhbWVyYSAqY2FtZXJhLCBHUENvbnRleHQgKmNvbnRleHQpDQp7 DQogICAgICAgIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFsweDRjXTsNCiAgICAgICAgdW5zaWduZWQg Y2hhciAqbXNnID0gTlVMTCwgKnRyYXNoX2hhbmRsZTsNCiAgICAgICAgdW5zaWduZWQgaW50IGxl biwgcGF5bG9hZGxlbiwgdHJhc2hfaW50Ow0KICAgICAgICBpbnQgc3RhdHVzOw0KDQogICAgICAg IEdQX0RFQlVHICgiY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcygpIGNhbGxlZCIpOw0KDQog ICAgICAgIGlmICghY2FtZXJhLT5wbC0+cmVtb3RlX2NvbnRyb2wpIHsNCiAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfcmVsZWFzZV9wYXJhbXM6IENhbWVyYSBub3QgdW5k ZXIgVVNCIGNvbnRyb2wiKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1I7DQogICAg ICAgIH0NCg0KICAgICAgICBtZW1zZXQocGF5bG9hZCwgMCwgc2l6ZW9mKHBheWxvYWQpKTsNCg0K ICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgY2FzZSBH UF9QT1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyB3aGF0IHdlIG5lZWQg Zm9yIENhbm9uIGNsYXNzIDYgY2FtZXJhcyAtDQogICAgICAgICAgICAgICAgICAgICAgIG5vdCBz dXJlIHdoYXQgaXQgaXMgZm9yIHByZXZpb3VzIHByb3RvY29scyAqLw0KICAgICAgICAgICAgICAg ICAgICBwYXlsb2FkWzB4MF0gPSBDQU5PTl9VU0JfQ09OVFJPTF9TRVRfWk9PTV9QT1M7DQogICAg ICAgICAgICAgICAgICAgIHBheWxvYWRbMHg0XSA9IDB4MzA7DQoNCiAgICAgICAgICAgICAgICAg ICAgLyogQ29weSB0aGUgcmVsZWFzZSBwYXJhbWV0ZXIgYmxvY2sgZnJvbSB0aGUgY2FtZXJhIHN0 YXRlDQogICAgICAgICAgICAgICAgICAgICAqIHN0cnVjdHVyZSBpbnRvIHRoZSBwYXlsb2FkLiAg VGhlIDB4MDggaXMgdGhlIGJ5dGUgb2Zmc2V0DQogICAgICAgICAgICAgICAgICAgICAqIGludG8g dGhlIHBheWxvYWQgd2hlcmUgdGhlIHJlbGVhc2UgcGFyYW1ldGVycyBzdGFydC4NCiAgICAgICAg ICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgIG1lbWNweShwYXlsb2FkICsgMHgw OCwgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2YoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMpKTsNCg0KICAgICAgICAgICAgICAg ICAgICBwYXlsb2FkbGVuID0gUkVMRUFTRV9QQVJBTVNfTEVOICsgMHgwODsNCg0KICAgICAgICAg ICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZV9wYXlsb2Fk IChjYW1lcmEsIHBheWxvYWQsIHBheWxvYWRsZW4sICZtc2csICZsZW4pOw0KDQogICAgICAgICAg ICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCg0KICAgICAgICAgICAgICAgICAgICAv KiBTZW5kIHRoZSBjYW1lcmEgYSBnZXRfcmVsZWFzZV9wYXJhbXMsIHRoZW4NCiAgICAgICAgICAg ICAgICAgICAgICogc2VuZCB0aGUgc2V0X3JlbGVhc2VfcGFyYW1zIG9wIGFnYWluLg0KICAgICAg ICAgICAgICAgICAgICAgKiBBcHBhcmVudGx5LCB0aGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHdo aWNoIHJlcXVpcmUNCiAgICAgICAgICAgICAgICAgICAgICogdHdvICJzZXRzIiB0byB0YWtlIGVm ZmVjdCBvbiB0aGUgQ2Fub24gRU9TIDVELg0KICAgICAgICAgICAgICAgICAgICAgKi8NCg0KICAg ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZSAo Y2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ0FOT05fVVNCX0NPTlRST0xfR0VUX1BBUkFNUywNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDAsICZ0 cmFzaF9oYW5kbGUsICZ0cmFzaF9pbnQpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKCBz dGF0dXMgPCAwICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1I7 DQoNCg0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9k aWFsb2d1ZV9wYXlsb2FkIChjYW1lcmEsIHBheWxvYWQsIHBheWxvYWRsZW4sICZtc2csICZsZW4p Ow0KDQogICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCg0KICAgICAg ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1NFUklBTDoNCiAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX05PVF9TVVBQT1JURUQ7DQogICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgR1BfUE9SVF9ERUZBVUxUDQogICAgICAgIH0N Cg0KICAgICAgICBpZiAobGVuICE9IDkyKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj YW5vbl9pbnRfc2V0X3JlbGVhc2VfcGFyYW1zOiBVbmV4cGVjdGVkIGxlbmd0aCByZXR1cm5lZCAi DQogICAgICAgICAgICAgICAgICAgICAgICAgICIoZXhwZWN0ZWQgJWkgZ290ICVpKSIsIDkyLCBs ZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAg ICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFt cyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCg0KICAgICAgICByZXR1cm4gR1BfT0s7DQoNCn0N Cg0KLyoqDQogKiBjYW5vbl9pbnRfc2V0X293bmVyX25hbWU6DQogKiBAY2FtZXJhOiB0aGUgY2Ft ZXJhIHRvIHNldCB0aGUgb3duZXIgbmFtZSBvZg0KICogQG5hbWU6IG93bmVyIG5hbWUgdG8gc2V0 IHRoZSBjYW1lcmEgdG8NCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcN CiAqDQogKiBTZXRzIHRoZSBjYW1lcmEgb3duZXIgbmFtZS4gVGhlIHN0cmluZyBzaG91bGQgbm90 IGJlIG1vcmUgdGhhbiAzMA0KICogY2hhcmFjdGVycyBsb25nLiBXZSBjYWxsICNnZXRfb3duZXJf bmFtZSBhZnRlcndhcmRzIGluIG9yZGVyIHRvDQogKiBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgd2Vu dCBmaW5lLg0KICoNCiAqIFJldHVybnM6IGdwaG90bzIgZXJyb3IgY29kZQ0KICoNCiAqLw0KaW50 DQpjYW5vbl9pbnRfc2V0X293bmVyX25hbWUgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFyICpu YW1lLCBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsN CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2lu dF9zZXRfb3duZXJfbmFtZSgpIGNhbGxlZCwgbmFtZSA9ICclcyciLCBuYW1lKTsNCiAgICAgICAg aWYgKHN0cmxlbiAobmFtZSkgPiAzMCkgew0KICAgICAgICAgICAgICAgIGdwX2NvbnRleHRfZXJy b3IgKGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTmFtZSAn JXMnICglbGkgY2hhcmFjdGVycykgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInRvbyBsb25nLCBtYXhpbXVtIDMwIGNoYXJhY3RlcnMgYXJlICINCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJhbGxvd2VkLiIpLCBuYW1lLCAobG9uZylzdHJsZW4gKG5h bWUpKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQkFEX1BBUkFNRVRFUlM7DQog ICAgICAgIH0NCg0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAg ICAgICAgICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo IGNhbWVyYS0+cGwtPm1kLT5tb2RlbCA9PSBDQU5PTl9DTEFTU182ICkgew0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9ndWUgKGNhbWVyYSwgQ0FO T05fVVNCX0ZVTkNUSU9OX0NBTUVSQV9DSE9XTl8yLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4sICh1bnNpZ25lZCBjaGFyICop bmFtZSwgc3RybGVuIChuYW1lKSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtc2cgPSBjYW5vbl91c2JfZGlhbG9ndWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0NB TUVSQV9DSE9XTiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbGVuLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHN0cmxlbiAobmFtZSkg KyAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9S VF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl9zZXJpYWxfZGlh bG9ndWUgKGNhbWVyYSwgY29udGV4dCwgMHgwNSwgMHgxMiwgJmxlbiwgbmFtZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChuYW1l KSArIDEsIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAp IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vycm9yX3R5 cGUgKGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9F UlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgR1BfUE9SVF9ERUZBVUxUDQogICAg ICAgIH0NCg0KICAgICAgICBpZiAobGVuICE9IDB4MDQpIHsNCiAgICAgICAgICAgICAgICBHUF9E RUJVRyAoImNhbm9uX2ludF9zZXRfb3duZXJfbmFtZTogVW5leHBlY3RlZCBsZW5ndGggcmV0dXJu ZWQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4cGVjdGVkICVpIGdvdCAlaSkiLCAw eDQsIGxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRB Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIGNhbm9uX2ludF9pZGVudGlmeV9jYW1lcmEg KGNhbWVyYSwgY29udGV4dCk7DQp9DQoNCg0KLyoqDQogKiBjYW5vbl9pbnRfZ2V0X3RpbWU6DQog KiBAY2FtZXJhOiBjYW1lcmEgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgb2YNCiAqIEBjYW1lcmFf dGltZTogcG9pbnRlciB0byB3aGVyZSB5b3Ugd2FudCB0aGUgY2FtZXJhIHRpbWUgKE5PVCBJTiBV VEMhISEpDQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICog R2V0IGNhbWVyYSdzIGN1cnJlbnQgdGltZS4NCiAqDQogKiBUaGUgY2FtZXJhIGdpdmVzIHRpbWUg aW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIHRoZXJlZm9yZSB3ZSBuZWVkDQogKiB0byBzd2FwIHRo ZSA0IGJ5dGVzIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMuDQogKg0KICogTm90ZTogdGhlIHRpbWUg cmV0dXJuZWQgZnJvbSB0aGUgY2FtZXJhIGlzIG5vdCBVVEMgYnV0IGxvY2FsIHRpbWUuDQogKiBU aGlzIG1lYW5zIHlvdSBzaG91bGQgb25seSB1c2UgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgYWRqdXN0 IHRoZQ0KICogdGltZXpvbmUsIGxpa2UgZ210aW1lKCksIGluc3RlYWQgb2YgZnVuY3Rpb25zIHRo YXQgZG8sIGxpa2UgbG9jYWx0aW1lKCkNCiAqIHNpbmNlIG90aGVyd2lzZSB5b3Ugd2lsbCBlbmQg dXAgd2l0aCB0aGUgd3JvbmcgdGltZS4NCiAqDQogKiBXZSBwYXNzIGl0IGFsb25nIHRvIGNhbGxp bmcgZnVuY3Rpb25zIGluIGxvY2FsIHRpbWUgaW5zdGVhZCBvZiBVVEMNCiAqIHNpbmNlIGl0IGlz IG1vcmUgY29ycmVjdCB0byBzYXkgJ0NhbWVyYSB0aW1lOiAyMDAyLTAxLTAxIDAwOjAwOjAwJw0K ICogaWYgdGhhdCBpcyB3aGF0IHRoZSBkaXNwbGF5IHNheXMgYW5kIG5vdCB0byBkaXNwbGF5IHRo ZSBjYW1lcmFzIHRpbWUNCiAqIGNvbnZlcnRlZCB0byBsb2NhbCB0aW1lem9uZSAod2hpY2ggd2ls bCBvZiBjb3Vyc2UgYmUgd3JvbmcgaWYgeW91DQogKiBhcmUgbm90IGluIHRoZSB0aW1lem9uZSB0 aGUgY2FtZXJhcyBjbG9jayB3YXMgc2V0IGluKS4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVy cm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X2dldF90aW1lIChDYW1lcmEgKmNhbWVy YSwgdGltZV90ICpjYW1lcmFfdGltZSwgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICB1 bnNpZ25lZCBjaGFyICptc2c7DQogICAgICAgIHVuc2lnbmVkIGludCBsZW47DQoNCiAgICAgICAg R1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3RpbWUoKSIpOw0KDQogICAgICAgIHN3aXRjaCAoY2Ft ZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAg ICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoY2FtZXJhLCBD QU5PTl9VU0JfRlVOQ1RJT05fR0VUX1RJTUUsICZsZW4sDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOw0KICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCBtc2cgPT0gTlVMTCApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1NFUklBTDoNCiAgICAgICAgICAgICAg ICAgICAgICAgIG1zZyA9IGNhbm9uX3NlcmlhbF9kaWFsb2d1ZSAoY2FtZXJhLCBjb250ZXh0LCAw eDAzLCAweDEyLCAmbGVuLCBOVUxMKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNn ID09IE5VTEwgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX3Nlcmlh bF9lcnJvcl90eXBlIChjYW1lcmEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVG QVVMVA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxlbiAhPSAweDEwKSB7DQogICAgICAgICAg ICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3RpbWU6IFVuZXhwZWN0ZWQgbGVuZ3RoIHJl dHVybmVkICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAlaSBnb3QgJWkp IiwgMHgxMCwgbGVuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVE X0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoY2FtZXJhX3RpbWUgIT0gTlVMTCkgew0K ICAgICAgICAgICAgICAgICpjYW1lcmFfdGltZSA9ICh0aW1lX3QpIGxlMzJhdG9oIChtc2cgKyA0 KTsNCgkJLyogWFhYIHNob3VsZCBzdHJpcCBcbiBhdCB0aGUgZW5kIG9mIGFzY3RpbWUoKSByZXR1 cm4gZGF0YSAqLw0KCQlHUF9ERUJVRyAoIkNhbWVyYSB0aW1lOiAlcyIsIGFzY3RpbWUgKGdtdGlt ZSAoY2FtZXJhX3RpbWUpKSk7DQoJfQ0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KDQov KioNCiAqIGNhbm9uX2ludF9zZXRfdGltZToNCiAqIEBjYW1lcmE6IGNhbWVyYSB0byBnZXQgdGhl IGN1cnJlbnQgdGltZSBvZg0KICogQGRhdGU6IHRoZSBkYXRlIHRvIHNldCAoaW4gVVRDKQ0KICog QGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldCBjYW1lcmEn cyBjdXJyZW50IHRpbWUuDQogKg0KICogQ2Fub24gY2FtZXJhcyBrbm93IG5vdGhpbmcgYWJvdXQg dGltZSB6b25lcyBzbyB3ZSBoYXZlIHRvIGNvbnZlcnQgaXQgdG8gbG9jYWwNCiAqIHRpbWUgKGJ1 dCBzdGlsbCBleHByZXNzZWQgaW4gVU5JWCB0aW1lIGZvcm1hdCAoc2Vjb25kcyBzaW5jZSAxOTcw LTAxLTAxKS4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCg0K aW50DQpjYW5vbl9pbnRfc2V0X3RpbWUgKENhbWVyYSAqY2FtZXJhLCB0aW1lX3QgZGF0ZSwgR1BD b250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICB1bnNpZ25lZCBjaGFyICptc2c7DQogICAgICAg IHVuc2lnbmVkIGludCBsZW47DQogICAgICAgIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFsxMl07DQog ICAgICAgIHRpbWVfdCBuZXdfZGF0ZTsNCiAgICAgICAgc3RydWN0IHRtICp0bTsNCg0KICAgICAg ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfdGltZTogJWxpPTB4JWx4ICVzIiwgKHVuc2lnbmVk IGxvbmcpIGRhdGUsICh1bnNpZ25lZCBsb25nKSBkYXRlLA0KICAgICAgICAgICAgICAgICAgYXNj dGltZSAobG9jYWx0aW1lICgmZGF0ZSkpKTsNCg0KICAgICAgICAvKiBjYWxsIGxvY2FsdGltZSgp IGp1c3QgdG8gZ2V0ICdleHRlcm4gbG9uZyB0aW1lem9uZScgLyB0bS0+dG1fZ210b2ZmIHNldC4N CiAgICAgICAgICoNCiAgICAgICAgICogdGhpcyBoYW5kbGVzIERTVCB0b28gKGF0IGxlYXN0IGlm IEhBVkVfVE1fR01UT0ZGKSwgaWYgeW91IGFyZSBpbiBVVEMrMQ0KICAgICAgICAgKiB0bV9nbXRv ZmYgaXMgMzYwMCBhbmQgaWYgeW91IGFyZSBpbiBVVEMrMStEU1QgdG1fZ210b2ZmIGlzIDcyMDAg KGlmIHlvdXINCiAgICAgICAgICogRFNUIGlzIG9uZSBob3VyIG9mIGNvdXJzZSkuDQogICAgICAg ICAqLw0KICAgICAgICB0bSA9IGxvY2FsdGltZSAoJmRhdGUpOw0KDQogICAgICAgIC8qIGNvbnZl cnQgdG8gbG9jYWwgVU5JWCB0aW1lIHNpbmNlIGNhbm9uIGNhbWVyYXMga25vdyBub3RoaW5nIGFi b3V0IHRpbWV6b25lcyAqLw0KDQojaWZkZWYgSEFWRV9UTV9HTVRPRkYNCiAgICAgICAgbmV3X2Rh dGUgPSBkYXRlICsgdG0tPnRtX2dtdG9mZjsNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRf c2V0X3RpbWU6IGNvbnZlcnRlZCAlbGQgdG8gbG9jYWx0aW1lICVsZCAodG1fZ210b2ZmIGlzICVs ZCkiLA0KICAgICAgICAgICAgICAgICAgKGxvbmcpZGF0ZSwgKGxvbmcpbmV3X2RhdGUsIChsb25n KXRtLT50bV9nbXRvZmYpOw0KI2Vsc2UNCiAgICAgICAgbmV3X2RhdGUgPSBkYXRlIC0gdGltZXpv bmU7DQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF90aW1lOiBjb252ZXJ0ZWQgJWxk IHRvIGxvY2FsdGltZSAlbGQgKHRpbWV6b25lIGlzICVsZCkiLA0KICAgICAgICAgICAgICAgICAg KGxvbmcpZGF0ZSwgKGxvbmcpbmV3X2RhdGUsIChsb25nKXRpbWV6b25lKTsNCiNlbmRpZg0KDQog ICAgICAgIG1lbXNldCAocGF5bG9hZCwgMCwgc2l6ZW9mIChwYXlsb2FkKSk7DQoNCiAgICAgICAg aHRvbGUzMmEgKHBheWxvYWQsICh1bnNpZ25lZCBpbnQpIG5ld19kYXRlKTsNCg0KICAgICAgICBz d2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9S VF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9ndWUg KGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX1NFVF9USU1FLCAmbGVuLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLCBzaXplb2YgKHBh eWxvYWQpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsN CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1Bf UE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl9zZXJpYWxf ZGlhbG9ndWUgKGNhbWVyYSwgY29udGV4dCwgMHgwNCwgMHgxMiwgJmxlbiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCwgc2l6ZW9m IChwYXlsb2FkKSwgTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1zZyA9PSBO VUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl9zZXJpYWxfZXJy b3JfdHlwZSAoY2FtZXJhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVM VA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxlbiAhPSAweDQpIHsNCiAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfdGltZTogVW5leHBlY3RlZCBsZW5ndGggcmV0dXJu ZWQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4cGVjdGVkICVpIGdvdCAlaSkiLCAw eDQsIGxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRB Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQovKioNCiAqIGNhbm9u X2ludF9yZWFkeToNCiAqIEBjYW1lcmE6IGNhbWVyYSB0byBnZXQgcmVhZHkNCiAqIEBjb250ZXh0 OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBTd2l0Y2hlcyB0aGUgY2FtZXJh IG9uLCBkZXRlY3RzIHRoZSBtb2RlbCBhbmQgc2V0cyBpdHMgc3BlZWQuDQogKg0KICogUmV0dXJu czogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9yZWFkeSAoQ2Ft ZXJhICpjYW1lcmEsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHJlczsNCg0K ICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9yZWFkeSgpIik7DQoNCiAgICAgICAgc3dpdGNo IChjYW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNC Og0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fdXNiX3JlYWR5IChjYW1lcmEs IGNvbnRleHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAg ICAgY2FzZSBHUF9QT1JUX1NFUklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNh bm9uX3NlcmlhbF9yZWFkeSAoY2FtZXJhLCBjb250ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoN CiAgICAgICAgcmV0dXJuIChyZXMpOw0KfQ0KDQovKioNCiAqIGNhbm9uX2ludF9nZXRfZGlza19u YW1lOg0KICogQGNhbWVyYTogY2FtZXJhIHRvIGFzayBmb3IgZGlzayBkcml2ZQ0KICogQGNvbnRl eHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIEFzayB0aGUgY2FtZXJhIGZv ciB0aGUgbmFtZSBvZiB0aGUgZmxhc2ggc3RvcmFnZQ0KICogZGV2aWNlLiBVc3VhbGx5ICJEOiIg b3Igc29tZXRoaW5nIGxpa2UgdGhhdC4NCiAqDQogKiBSZXR1cm5zOiBuYW1lIG9mIGRpc2sNCiAq DQogKi8NCmNoYXIgKg0KY2Fub25faW50X2dldF9kaXNrX25hbWUgKENhbWVyYSAqY2FtZXJhLCBH UENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAgICAg ICAgdW5zaWduZWQgaW50IGxlbjsNCiAgICAgICAgaW50IHJlczsNCg0KICAgICAgICBHUF9ERUJV RyAoImNhbm9uX2ludF9nZXRfZGlza19uYW1lKCkiKTsNCg0KICAgICAgICBzd2l0Y2ggKGNhbWVy YS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbWVyYS0+cGwtPm1kLT5tb2RlbCA9PSBDQU5PTl9D TEFTU182ICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV3ZXIgcHJvdG9j b2wgdXNlcyBhIGRpZmZlcmVudCBjb2RlLCBidXQgd2l0aCBzYW1lIHJlc3BvbnNlLiAqLw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBjYW5vbl91c2JfbG9uZ19kaWFsb2d1 ZSAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ0FOT05fVVNCX0ZVTkNUSU9OX0ZMQVNIX0RFVklDRV9JREVOVF8y LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm1zZywgJmxlbiwgMTAyNCwgTlVMTCwgMCwgMCwgY29udGV4dCk7DQogICAgICAg ICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl cyA9IGNhbm9uX3VzYl9sb25nX2RpYWxvZ3VlIChjYW1lcmEsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVO Q1RJT05fRkxBU0hfREVWSUNFX0lERU5ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zZywgJmxlbiwgMTAyNCwgTlVMTCwg MCwgMCwgY29udGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IEdQX09L KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50 X2dldF9kaXNrX25hbWU6IGNhbm9uX3VzYl9sb25nX2RpYWxvZ3VlICINCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQhIHJldHVybmVkICVpIiwgcmVzKTsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAg ICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgbXNn ID0gY2Fub25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEsIGNvbnRleHQsIDB4MGEsIDB4MTEsICZs ZW4sIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCApIHsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vycm9yX3R5cGUg KGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0K ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo bGVuIDwgNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAg IC8qIHNob3VsZCBiZSBHUF9FUlJPUl9DT1JSVVBURURfREFUQSAqLw0KDQogICAgICAgICAgICAg ICAgICAgICAgICAvKiB0aGlzIGlzIGNvcnJlY3QgZXZlbiB0aG91Z2ggaXQgbG9va3MgYSBiaXQg ZnVubnkuIGNhbm9uX3NlcmlhbF9kaWFsb2d1ZSgpDQogICAgICAgICAgICAgICAgICAgICAgICAg KiBoYXMgYSBzdGF0aWMgYnVmZmVyLCBzdHJkdXAoKSBwYXJ0IG9mIHRoYXQgYnVmZmVyIGFuZCBy ZXR1cm4gdG8gb3VyIGNhbGxlci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAg ICAgICAgICAgICAgICAgICAgbXNnID0gKHVuc2lnbmVkIGNoYXIgKilzdHJkdXAgKChjaGFyICop bXNnICsgNCk7ICAgICAgICAvKiBAQEAgc2hvdWxkIGNoZWNrIGxlbmd0aCAqLw0KICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCApIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X2Rpc2tfbmFtZTogY291bGQgbm90 IGFsbG9jYXRlICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt ZW1vcnkgdG8gaG9sZCByZXNwb25zZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVF9SRVRVUk4g KE5VTEwpDQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIG1zZyA9PSBOVUxMICkNCiAgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRf ZGlza19uYW1lOiBkaXNrICclcyciLCBtc2cpOw0KDQogICAgICAgIHJldHVybiAoY2hhciAqKW1z ZzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZ2V0X2Rpc2tfbmFtZV9pbmZvOg0KICogQGNhbWVy YTogY2FtZXJhIHRvIGFzayBhYm91dCBkaXNrDQogKiBAbmFtZTogbmFtZSBvZiB0aGUgZGlzaw0K ICogQGNhcGFjaXR5OiByZXR1cm5lZCBtYXhpbXVtIGRpc2sgY2FwYWNpdHkNCiAqIEBhdmFpbGFi bGU6IHJldHVybmVkIGN1cnJlbnRseSBhdmFpbGFibGUgZGlzayBjYXBhY2l0eQ0KICogQGNvbnRl eHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIEdldHMgYXZhaWxhYmxlIHJv b20gYW5kIG1heCBjYXBhY2l0eSBvZiBhIGRpc2sgZ2l2ZW4gYnkgQG5hbWUuDQogKg0KICogUmV0 dXJuczogYm9vbGVhbiB2YWx1ZSBkZW5vdGluZyBzdWNjZXNzIChGSVhNRTogQVRURU5USU9OISkN CiAqDQogKi8NCmludA0KY2Fub25faW50X2dldF9kaXNrX25hbWVfaW5mbyAoQ2FtZXJhICpjYW1l cmEsIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqY2FwYWNpdHksIGludCAqYXZhaWxhYmxlLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAg ICB1bnNpZ25lZCBjaGFyICptc2cgPSBOVUxMOw0KICAgICAgICBjaGFyIG5hbWVfbG9jYWxbMTI4 XTsNCiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsgICAgICAgLyogaXMgc2V0IGluIGJvdGggVVNC IGFuZCBTRVJJQUwgY2FzZXMgKi8NCiAgICAgICAgaW50IGNhcD0wLCBhdmE9MDsgICAgICAgLyog b25seSBzZXQgaW4gVVNCIGNhc2UgKi8NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9n ZXRfZGlza19uYW1lX2luZm8oKSBuYW1lICclcyciLCBuYW1lKTsNCg0KICAgICAgICBDT05fQ0hF Q0tfUEFSQU1fTlVMTCAobmFtZSk7DQogICAgICAgIENPTl9DSEVDS19QQVJBTV9OVUxMIChjYXBh Y2l0eSk7DQogICAgICAgIENPTl9DSEVDS19QQVJBTV9OVUxMIChhdmFpbGFibGUpOw0KDQogICAg ICAgIHN3aXRjaCAoY2FtZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBH UF9QT1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FtZXJhLT5wbC0+bWQt Pm1vZGVsID09IENBTk9OX0NMQVNTXzYgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5ld2VyIHByb3RvY29sIHVzZXMgYSBkaWZmZXJlbnQgY29kZSwgYnV0IHdpdGggc2Ft ZSByZXNwb25zZS4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweSAo IG5hbWVfbG9jYWwsIG5hbWUsIHNpemVvZihuYW1lX2xvY2FsKSApOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4obmFtZV9sb2NhbCk7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICggbmFtZV9sb2NhbFtsZW4tMV0gPT0gJ1xcJyApDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sb2NhbFtsZW4tMV0gPSAw Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9n dWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0RJU0tfSU5GT18yLCAmbGVuLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNp Z25lZCBjaGFyICopbmFtZV9sb2NhbCwgbGVuICk7DQoJCQkJaWYgKCBtc2cgPT0gTlVMTCApDQoJ CQkJCXJldHVybiBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUaGVzZSBuZXdlciBjYW1lcmFzIHJlcG9ydCBzaXplcyBpbg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBLIGluc3RlYWQgb2YgYnl0ZXMsIHNvIG1heCBjYXBh Y2l0eQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyA0VEIgcmF0aGVyIHRo YW4gNEdCLiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAgPSBsZTMyYXRv aCAobXNnICsgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YSA9IGxlMzJh dG9oIChtc2cgKyA4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBj YW5vbl91c2JfZGlhbG9ndWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0RJU0tfSU5GTywg JmxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodW5zaWduZWQgY2hhciAqKW5hbWUsIHN0cmxlbiAobmFtZSkgKyAxKTsNCgkJCQlp ZiAoIG1zZyA9PSBOVUxMICkNCgkJCQkJcmV0dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCA9IGxlMzJhdG9oIChtc2cgKyA0KSAvIDEw MjQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YSA9IGxlMzJhdG9oIChtc2cg KyA4KSAvIDEwMjQ7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAg ICAgICAgICAgICAgICAgICAgICAgbXNnID0gY2Fub25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEs IGNvbnRleHQsIDB4MDksIDB4MTEsICZsZW4sIG5hbWUsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAobmFtZSkgKyAxLCBOVUxMKTsN CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKSB7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX3NlcmlhbF9lcnJvcl90eXBlIChjYW1lcmEpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVS RTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoNCiAgICAg ICAgaWYgKGxlbiA8IDB4MGMpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2lu dF9nZXRfZGlza19uYW1lX2luZm86ICINCiAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIGxlbmd0aCByZXR1cm5lZCAiDQogICAgICAgICAgICAgICAgICAgICAgICAiKGV4cGVjdGVk ICVpIGdvdCAlaSkiLCAweDBjLCBsZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJP Ul9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIENhcGFjaXR5IGFuZCBh dmFpbGFibGUgYXJlIG5vdCBOVUxMIGFzIHZlcmlmaWVkIGFib3ZlLg0KICAgICAgICAqIEJ1dCBj YXAgYW5kIGF2YSBhcmUgb25seSBzZXQgZm9yIHRoZSBVU0IgY2FzZSwgc28gd2UgaGF2ZSB0byBj aGVjayBmb3IgdGhhdC4NCiAgICAgICAgKiBJZiB5b3Uga25vdyB0aGUgbG9naWMgYmV0dGVyLCBm ZWVsIGZyZWUgdG8gaW1wcm92ZSBpdC4gKi8NCiAgICAgICAgc3dpdGNoIChjYW1lcmEtPnBvcnQt PnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0KICAgICAgICAgICAg ICAgICAgICAgICAgKmNhcGFjaXR5ID0gY2FwOw0KICAgICAgICAgICAgICAgICAgICAgICAgKmF2 YWlsYWJsZSA9IGF2YTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25f aW50X2dldF9kaXNrX25hbWVfaW5mbzogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiY2FwYWNpdHkgJWkga2IsIGF2YWlsYWJsZSAlaSBrYiIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhcCA+IDAgPyBjYXAgOiAwLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdmEgPiAwID8gYXZhIDogMCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KDQogICAgICAg IHJldHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGdwaG90bzJjYW5vbnBhdGg6DQogKiBAY2Ft ZXJhOiBjYW1lcmEgdG8gdXNlDQogKiBAcGF0aDogZ3Bob3RvMiBwYXRoDQogKiBAY29udGV4dDog Y29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogY29udmVydCBncGhvdG8yIHBhdGgg IChlLmcuICAgIi9kY2ltLzExNkNBTk9OL2ltZ18xMjQwLmpwZyIpDQogKiBpbnRvIGNhbm9uIHN0 eWxlIHBhdGggKGUuZy4gIkQ6XERDSU1cMTE2Q0FOT05cSU1HXzEyNDAuSlBHIikNCiAqDQogKiBD YW5vbiBjYW1lcmFzIHVzZSBGQVQgd2l0aCB1cHBlciBjYXNlIGludGVybmFsbHksIHNvIHdlIGNv bnZlcnQNCiAqIGludG8gdGhhdC4NCiAqDQogKiBSZXR1cm5zOiBpbW11dGFibGUgc3RyaW5nIHdp dGggY29udmVydGVkIHBhdGggbmFtZQ0KICoNCiAqLw0KY29uc3QgY2hhciAqDQpncGhvdG8yY2Fu b25wYXRoIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqcGF0aCwgR1BDb250ZXh0ICpjb250 ZXh0KQ0Kew0KICAgICAgICBzdGF0aWMgY2hhciB0bXBbMjAwMF07DQogICAgICAgIGNoYXIgKnA7 DQoNCiAgICAgICAgaWYgKHBhdGhbMF0gIT0gJy8nKSB7DQogICAgICAgICAgICAgICAgR1BfREVC VUcgKCJOb24tYWJzb2x1dGUgZ3Bob3RvMiBwYXRoIGNhbm5vdCBiZSBjb252ZXJ0ZWQiKTsNCiAg ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChjYW1l cmEtPnBsLT5jYWNoZWRfZHJpdmUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIEdQX0RFQlVH ICgiTlVMTCBjYW1lcmEtPnBsLT5jYWNoZWRfZHJpdmUgaW4gZ3Bob3RvMmNhbm9ucGF0aCIpOw0K ICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPmNhY2hlZF9kcml2ZSA9IGNhbm9uX2ludF9nZXRf ZGlza19uYW1lIChjYW1lcmEsIGNvbnRleHQpOw0KICAgICAgICAgICAgICAgIGlmIChjYW1lcmEt PnBsLT5jYWNoZWRfZHJpdmUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgR1Bf REVCVUcgKCIybmQgTlVMTCBjYW1lcmEtPnBsLT5jYWNoZWRfZHJpdmUgaW4gZ3Bob3RvMmNhbm9u cGF0aCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAg ICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgc25wcmludGYgKHRtcCwgc2l6ZW9mICh0bXAp LCAiJXMlcyIsIGNhbWVyYS0+cGwtPmNhY2hlZF9kcml2ZSwgcGF0aCk7DQoNCiAgICAgICAgLyog Q29udmVydCB0byB1cHBlciBjYXNlLCBzaW5jZSBGQVQgZmlsZSBzeXN0ZW0gb24gY2FtZXJhDQog ICAgICAgICBkb2Vzbid0IGRvIGNhc2UsIGFuZCByZXBsYWNlIGFsbCBzbGFzaGVzIGJ5IGJhY2tz bGFzaGVzICovDQogICAgICAgIGZvciAocCA9IHRtcDsgKnAgIT0gJ1wwJzsgcCsrKSB7DQogICAg ICAgICAgICAgICAgaWYgKCAqcCAhPSAoY2hhcil0b3VwcGVyICggKnAgKSApDQogICAgICAgICAg ICAgICAgICAgICAgICAvKiBXZSBkb24ndCBhbGxvdyBsb3dlci1jYXNlIGluIHBhdGggbmFtZXMu ICovDQogICAgICAgICAgICAgICAgICAgICAgICBncF9jb250ZXh0X2Vycm9yIChjb250ZXh0LCBf KCJMb3dlciBjYXNlIGxldHRlcnMgaW4gJXMgbm90IGFsbG93ZWQuIiksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoICk7DQogICAgICAgICAgICAgICAgaWYg KCpwID09ICcvJykNCiAgICAgICAgICAgICAgICAgICAgICAgICpwID0gJ1xcJzsNCiAgICAgICAg ICAgICAgICAqcCA9IChjaGFyKSB0b3VwcGVyKCpwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8q IHJlbW92ZSB0cmFpbGluZyBiYWNrc2xhc2gsIG1ha2luZyBzdXJlIGJ1ZmZlciBlbmRzIHdpdGgg XDAgKi8NCiAgICAgICAgaWYgKChwID4gdG1wKSAmJiAoKihwIC0gMSkgPT0gJ1xcJykpDQogICAg ICAgICAgICAgICAgKihwIC0gMSkgPSAnXDAnOw0KDQogICAgICAgIGdwX2xvZyAoR1BfTE9HX0RB VEEsICJjYW5vbi9jYW5vbi5jIiwNCiAgICAgICAgICAgICAgICAiZ3Bob3RvMmNhbm9ucGF0aDog Y29udmVydGVkICclcycgdG8gJyVzJyIsIHBhdGgsIHRtcCk7DQoNCiAgICAgICAgcmV0dXJuICh0 bXApOw0KfQ0KDQovKioNCiAqIGNhbm9uMmdwaG90b3BhdGg6DQogKiBAY2FtZXJhOiBjYW1lcmEg dG8gdXNlDQogKiBAcGF0aDogY2Fub24gc3R5bGUgcGF0aA0KICoNCiAqIGNvbnZlcnQgY2Fub24g c3R5bGUgcGF0aCAoZS5nLiAiRDpcRENJTVwxMTZDQU5PTlxJTUdfMTI0MC5KUEciKQ0KICogaW50 byBncGhvdG8yIHBhdGggICAgICAgIChlLmcuICAgIi9EQ0lNLzExNkNBTk9OL0lNR18xMjQwLkpQ RyIpDQogKg0KICogQXNzdW1lcyBAcGF0aCB0byBzdGFydCB3aXRoIGRyaXZlIG5hbWUgZm9sbG93 ZWQgYnkgYSBjb2xvbi4NCiAqIEl0IGp1c3QgZHJvcHMgdGhlIGRyaXZlIG5hbWUuDQogKg0KICog UmV0dXJuczogaW1tdXRhYmxlIHN0cmluZyB3aXRoIGdwaG90bzIgcGF0aA0KICoNCiAqLw0Kc3Rh dGljIGNvbnN0IGNoYXIgKg0KY2Fub24yZ3Bob3RvcGF0aCAoQ2FtZXJhIF9fdW51c2VkX18gKmNh bWVyYSwgY29uc3QgY2hhciAqcGF0aCkNCnsNCiAgICAgICAgc3RhdGljIGNoYXIgdG1wWzIwMDBd Ow0KICAgICAgICBjaGFyICpwOw0KDQogICAgICAgIGlmICghKChwYXRoWzFdID09ICc6JykgJiYg KHBhdGhbMl0gPT0gJ1xcJykpKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbjJn cGhvdG9wYXRoIGNhbGxlZCBvbiBpbnZhbGlkIGNhbm9uIHBhdGggJyVzJyIsIHBhdGgpOw0KICAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICB9DQoNCiAgICAgICAgLyogMyBpcyBE OiBwbHVzIE5VTEwgYnl0ZSAqLw0KICAgICAgICBpZiAoc3RybGVuIChwYXRoKSAtIDMgPiBzaXpl b2YgKHRtcCkpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uMmdwaG90b3BhdGgg Y2FsbGVkIG9uIHRvbyBsb25nIGNhbm9uIHBhdGggKCVsaSBieXRlcyk6ICVzIiwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0cmxlbiAocGF0aCkpLCBwYXRoKTsNCiAgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIHBhdGggaXMgc29t ZXRoaW5nIGxpa2UgRDpcRk9PLCB3ZSB3YW50IHdoYXQgaXMgYWZ0ZXIgdGhlIGNvbG9uICovDQog ICAgICAgIHN0cmNweSAodG1wLCBwYXRoICsgMik7DQoNCiAgICAgICAgLyogcmVwbGFjZSBiYWNr c2xhc2hlcyBieSBzbGFzaGVzICovDQogICAgICAgIGZvciAocCA9IHRtcDsgKnAgIT0gJ1wwJzsg cCsrKSB7DQogICAgICAgICAgICAgICAgaWYgKCpwID09ICdcXCcpDQogICAgICAgICAgICAgICAg ICAgICAgICAqcCA9ICcvJzsNCiAgICAgICAgfQ0KDQogICAgICAgIGdwX2xvZyAoR1BfTE9HX0RB VEEsICJjYW5vbi9jYW5vbi5jIiwNCiAgICAgICAgICAgICAgICAiY2Fub24yZ3Bob3RvcGF0aDog Y29udmVydGVkICclcycgdG8gJyVzJyIsIHBhdGgsIHRtcCk7DQoNCiAgICAgICAgcmV0dXJuICh0 bXApOw0KfQ0KDQovKioNCiAqIGRlYnVnX2ZpbGVpbmZvOg0KICogQGluZm86IGluZm9ybWF0aW9u IGJsb2NrDQogKg0KICogV3JpdGVzIGZpbGUgaW5mbyB0byBkZWJ1ZyBsb2cuIFVzYWJsZSBvbmx5 IGZyb20gd2l0aGluICJjYW5vbi5jIi4NCiAqDQogKi8NCnN0YXRpYyB2b2lkDQpkZWJ1Z19maWxl aW5mbyAoQ2FtZXJhRmlsZUluZm8gKiBpbmZvKQ0Kew0KICAgICAgICBHUF9ERUJVRyAoIjxDYW1l cmFGaWxlSW5mbz4iKTsNCiAgICAgICAgR1BfREVCVUcgKCIgIDxDYW1lcmFGaWxlSW5mb0ZpbGU+ Iik7DQogICAgICAgIGlmICgoaW5mby0+ZmlsZS5maWVsZHMgJiBHUF9GSUxFX0lORk9fVFlQRSkg IT0gMCkNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIiAgICBUeXBlOiAgICVzIiwgaW5mby0+ ZmlsZS50eXBlKTsNCiAgICAgICAgaWYgKChpbmZvLT5maWxlLmZpZWxkcyAmIEdQX0ZJTEVfSU5G T19TSVpFKSAhPSAwKQ0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiICAgIFNpemU6ICAgJWki LCAoaW50KWluZm8tPmZpbGUuc2l6ZSk7DQogICAgICAgIGlmICgoaW5mby0+ZmlsZS5maWVsZHMg JiBHUF9GSUxFX0lORk9fV0lEVEgpICE9IDApDQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCIg ICAgV2lkdGg6ICAlaSIsIGluZm8tPmZpbGUud2lkdGgpOw0KICAgICAgICBpZiAoKGluZm8tPmZp bGUuZmllbGRzICYgR1BfRklMRV9JTkZPX0hFSUdIVCkgIT0gMCkNCiAgICAgICAgICAgICAgICBH UF9ERUJVRyAoIiAgICBIZWlnaHQ6ICVpIiwgaW5mby0+ZmlsZS5oZWlnaHQpOw0KICAgICAgICBp ZiAoKGluZm8tPmZpbGUuZmllbGRzICYgR1BfRklMRV9JTkZPX1BFUk1JU1NJT05TKSAhPSAwKQ0K ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiICAgIFBlcm1zOiAgMHgleCIsIGluZm8tPmZpbGUu cGVybWlzc2lvbnMpOw0KICAgICAgICBpZiAoKGluZm8tPmZpbGUuZmllbGRzICYgR1BfRklMRV9J TkZPX1NUQVRVUykgIT0gMCkNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIiAgICBTdGF0dXM6 ICVpIiwgaW5mby0+ZmlsZS5zdGF0dXMpOw0KICAgICAgICBpZiAoKGluZm8tPmZpbGUuZmllbGRz ICYgR1BfRklMRV9JTkZPX01USU1FKSAhPSAwKSB7DQogICAgICAgICAgICAgICAgY2hhciAqcCwg KnRpbWUgPSBhc2N0aW1lIChnbXRpbWUgKCZpbmZvLT5maWxlLm10aW1lKSk7DQoNCiAgICAgICAg ICAgICAgICAvKiByZW1vdmUgdHJhaWxpbmcgXG4gKi8NCiAgICAgICAgICAgICAgICBmb3IgKHAg PSB0aW1lOyAqcCAhPSAwOyArK3ApDQogICAgICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3Ro aW5nICovIDsNCiAgICAgICAgICAgICAgICAqKHAgLSAxKSA9ICdcMCc7DQogICAgICAgICAgICAg ICAgR1BfREVCVUcgKCIgICAgVGltZTogICAlcyAoJWxkKSIsIHRpbWUsIChsb25nKWluZm8tPmZp bGUubXRpbWUpOw0KICAgICAgICB9DQogICAgICAgIEdQX0RFQlVHICgiICA8L0NhbWVyYUZpbGVJ bmZvRmlsZT4iKTsNCiAgICAgICAgR1BfREVCVUcgKCI8L0NhbWVyYUZpbGVJbmZvPiIpOw0KfQ0K DQovKioNCiAqIGNhbm9uX2ludF9saXN0X2RpcmVjdG9yeToNCiAqIEBjYW1lcmE6IENhbWVyYSB0 byBhY2Nlc3MNCiAqIEBmb2xkZXI6IEZvbGRlciBvbiB0aGUgY2FtZXJhIHRvIGxpc3QNCiAqIEBs aXN0OiBSZXR1cm5zIGxpc3Qgb2YgZm9sZGVycyBpbiB0aGlzIGRpcmVjdG9yeQ0KICogQGZsYWdz OiAjY2Fub25EaXJsaXN0RnVuY3Rpb25CaXRzIHNwZWNpZnlpbmcgdG8gbGlzdCBmaWxlcywgZm9s ZGVycywgb3IgYm90aA0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0K ICoNCiAqIEdldHMgdGhlIGRpcmVjdG9yeSB0cmVlIG9mIGEgZ2l2ZW4gZmxhc2ggZGV2aWNlLCB1 bnNvcnRlZCBhbmQgd2l0aA0KICogYSBmZXcgbWlzc2luZyBmZWF0dXJlcyAoc3VjaCBhcyBjb3Jy ZWN0IHNvcnRpbmcgb2YgZmlsZXMgYW5kDQogKiBjb3JyZWN0bHkgYXNzb2NpYXRpbmcgZmlsZXMg d2l0aCBlYWNoIG90aGVyKS4NCiAqDQogKiBJbXBsaWNpdGx5IGFzc3VtZXMgdGhhdCB1aW50OF90 W10gaXMgYSBjaGFyW10gZm9yIHN0cmluZ3MuDQogKg0KICogQSBmZXcgbm90ZXMgYWJvdXQgbGlz dGluZyBmaWxlcyBhbmQgY2FtZXJhLT5wbC0+bGlzdF9hbGxfZmlsZXM6DQogKg0KICogICBJZiBj YW1lcmEtPnBsLT5saXN0X2FsbF9maWxlcyBpcyBmYWxzZSAoaW50ZW5kZWQgZGVmYXVsdCksIHRo ZW4NCiAqICAgd2UgbGlzdCBvbmx5ICJwcmltYXJ5IGZpbGVzIiBvciAoIm1haW4iIGZpbGVzKS4g VGhvc2UgYXJlIGZpbGVzDQogKiAgIGxpa2UgaW1hZ2UgZmlsZXMgb3IgbW92aWUgZmlsZXMgd2hp Y2ggdGhlIHVzZXIgZXhwbGljaXRseSBjcmVhdGVkDQogKiAgIG9uIHRoZSBjYW1lcmEuICJTZWNv bmRhcnkgZmlsZXMiIHN1Y2ggYXMgLnRobSBmaWxlcyB3aGljaCBjb250YWluDQogKiAgIHRoZSB0 aHVtYm5haWwgb2YgYSBtb3ZpZSBhcmUgbm90IGxpc3RlZCBoZXJlIC0geW91IGNhbiBnZXQgdGhl bSB1c2luZw0KICogICB0aGUgLS1nZXQtdGh1bWJuYWlsIGNvbW1hbmQgaW4gZ3Bob3RvMiBvciB0 aGUgYW5hbG9nIGNvbW1hbmQgb2YgeW91cg0KICogICBmcm9udGVuZC4gU2FtZSBzdG9yeSB3aXRo ICx3YXYgZmlsZXMgY29udGFpbmluZyBhdWRpbyBhbm5vdGF0aW9ucw0KICogICB0byBwcmltYXJ5 IGZpbGVzLg0KICoNCiAqICAgSWYgY2FtZXJhLT5wbC0+bGlzdF9hbGxfZmlsZXMgaXMgdHJ1ZSAo Y2FuIGJlIGNoYW5nZWQgdmlhIHRoZQ0KICogICBjb25maWd1cmF0aW9uIGludGVyZmFjZSksIHRo ZW4gd2UgbGlzdCBfYWxsXyBmaWxlcy4gVGhpcyBtZWFucw0KICogICB0aGF0IHdlIGp1c3QgdXNl IHRoZSBjYW1lcmEgbGlrZSBhIENGL1NEIGNhcmQgcmVhZGVyLiBVc2UgdGhpcyBtb2RlDQogKiAg IHRvIHJlYWQvd3JpdGUgeW91ciAucGRmIGZpbGVzLCAudGd6IGJhY2t1cCB0YXJiYWxscywgb3Ig d2hhdGV2ZXIuDQogKiAgIE9mIGNvdXJzZSwgYWxsIHRoZSAiaW50ZXJuYWwiIGZpbGVzIHRoZSBj YW1lcmEgcHV0cyBvbiB0aGUgc3RvcmFnZQ0KICogICBtZWRpdW0gd2lsbCBiZSBsaXN0ZWQgaW4g dGhpcyBtb2RlIGFzIHdlbGwuDQogKg0KICogUmV0dXJuczogYSBncGhvdG8yIHN0YXR1cyBjb2Rl Lg0KICogICBAbGlzdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIGZvbGRlcnMgKGRpcmVjdG9yaWVz KSBjb250YWluZWQgaW4gdGhpcyBmb2xkZXIuDQogKiAgIEZpbGVzIHdpbGwgYmUgYWRkZWQgdG8g dGhlIGludGVybmFsIGdwaG90bzIgZmlsZSBzeXN0ZW0gb25seSBpZg0KICogICAgIHRoZXkgYXJl IGltYWdlIG9yIG1vdmllIGZpbGVzLg0KICoNCiAqLw0KaW50DQpjYW5vbl9pbnRfbGlzdF9kaXJl Y3RvcnkgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFyICpmb2xkZXIsIENhbWVyYUxpc3QgKmxp c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbm9uRGlybGlzdEZ1bmN0aW9u Qml0cyBmbGFncywgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICBDYW1lcmFGaWxlSW5m byBpbmZvOw0KICAgICAgICBpbnQgcmVzOw0KICAgICAgICB1bnNpZ25lZCBpbnQgZGlyZW50c19s ZW5ndGg7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKmRpcmVudF9kYXRhID0gTlVMTDsNCiAgICAg ICAgdW5zaWduZWQgY2hhciAqZW5kX29mX2RhdGEsICp0ZW1wX2NoLCAqcG9zOw0KICAgICAgICBj b25zdCBjaGFyICpjYW5vbmZvbGRlciA9IGdwaG90bzJjYW5vbnBhdGggKGNhbWVyYSwgZm9sZGVy LCBjb250ZXh0KTsNCiAgICAgICAgaW50IGxpc3RfZmlsZXMgPSAoKGZsYWdzICYgQ0FOT05fTElT VF9GSUxFUykgIT0gMCk7DQogICAgICAgIGludCBsaXN0X2ZvbGRlcnMgPSAoKGZsYWdzICYgQ0FO T05fTElTVF9GT0xERVJTKSAhPSAwKTsNCg0KICAgICAgICBHUF9ERUJVRyAoIkJFR0lOIGNhbm9u X2ludF9saXN0X2RpcmVjdG9yeSgpIGZvbGRlciAnJXMnIGFrYSAnJXMnICglcywgJXMpIiwgZm9s ZGVyLA0KICAgICAgICAgICAgICAgICAgY2Fub25mb2xkZXIsIGxpc3RfZmlsZXMgPyAiZmlsZXMi IDogIm5vIGZpbGVzIiwNCiAgICAgICAgICAgICAgICAgIGxpc3RfZm9sZGVycyA/ICJmb2xkZXJz IiA6ICJubyBmb2xkZXJzIik7DQoNCiAgICAgICAgaWYgKCBjYW5vbmZvbGRlciA9PSBOVUxMICkg ew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkVycm9yOiBjYW5vbl9pbnRfbGlzdF9kaXJl Y3RvcnkgY2FsbGVkIHdpdGggbnVsbCBuYW1lIGZvciBjYW1lcmEgZm9sZGVyIiApOw0KICAgICAg ICAgICAgICAgIHJldHVybiBHUF9FUlJPUjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIEZldGNo IGFsbCBkaXJlY3RvcnkgZW50cmllcyBmcm9tIHRoZSBjYW1lcmEgKi8NCiAgICAgICAgc3dpdGNo IChjYW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNC Og0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fdXNiX2dldF9kaXJlbnRzIChj YW1lcmEsICZkaXJlbnRfZGF0YSwgJmRpcmVudHNfbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbmZvbGRlciwgY29udGV4dCk7 DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQ X1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fc2VyaWFs X2dldF9kaXJlbnRzIChjYW1lcmEsICZkaXJlbnRfZGF0YSwgJmRpcmVudHNfbGVuZ3RoLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5v bmZvbGRlciwgY29udGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg ICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVzICE9 IEdQX09LKQ0KICAgICAgICAgICAgICAgIHJldHVybiByZXM7DQoNCiAgICAgICAgZW5kX29mX2Rh dGEgPSBkaXJlbnRfZGF0YSArIGRpcmVudHNfbGVuZ3RoOw0KDQogICAgICAgIGlmIChkaXJlbnRz X2xlbmd0aCA8IENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUpIHsNCiAgICAgICAgICAgICAgICBn cF9jb250ZXh0X2Vycm9yIChjb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF8oImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogRVJST1I6ICINCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsIG1lc3NhZ2UgdG9vIHNob3J0ICglaSA8IG1p bmltdW0gJWkpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50c19s ZW5ndGgsIENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUpOw0KICAgICAgICAgICAgICAgIGZyZWUg KGRpcmVudF9kYXRhKTsNCiAgICAgICAgICAgICAgICBkaXJlbnRfZGF0YSA9IE5VTEw7DQogICAg ICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9DQoN CiAgICAgICAgLyogVGhlIGZpcnN0IGRhdGEgd2UgaGF2ZSBnb3QgaGVyZSBpcyB0aGUgZGlyZW50 IGZvciB0aGUNCiAgICAgICAgICogZGlyZWN0b3J5IHdlIGFyZSByZWFkaW5nLiBTa2lwIG92ZXIg MTAgYnl0ZXMNCiAgICAgICAgICogKDIgZm9yIGF0dHJpYnV0ZXMsIDQgZGF0ZSBhbmQgNCBzaXpl KSBhbmQgdGhlbiBnbyBmaW5kDQogICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBu YW1lIHNvIHRoYXQgd2UgZ2V0IHRvIHRoZSBuZXh0DQogICAgICAgICAqIGRpcmVudCB3aGljaCBp cyBhY3R1YWxseSB0aGUgZmlyc3Qgb25lIHdlIGFyZSBpbnRlcmVzdGVkDQogICAgICAgICAqIGlu DQogICAgICAgICAqLw0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9y eTogQ2FtZXJhIGRpcmVjdG9yeSBsaXN0aW5nIGZvciBkaXJlY3RvcnkgJyVzJyIsDQogICAgICAg ICAgICAgICAgICBkaXJlbnRfZGF0YSArIENBTk9OX0RJUkVOVF9OQU1FKTsNCg0KICAgICAgICBm b3IgKHBvcyA9IGRpcmVudF9kYXRhICsgQ0FOT05fRElSRU5UX05BTUU7IHBvcyA8IGVuZF9vZl9k YXRhICYmICpwb3MgIT0gMDsgcG9zKyspDQogICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAq LyA7DQogICAgICAgIGlmIChwb3MgPT0gZW5kX29mX2RhdGEgfHwgKnBvcyAhPSAwKSB7DQogICAg ICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJvciAoY29udGV4dCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfKCJjYW5vbl9pbnRfbGlzdF9kaXJlY3Rvcnk6IFJlYWNoZWQgZW5k IG9mIHBhY2tldCB3aGlsZSAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJl eGFtaW5pbmcgdGhlIGZpcnN0IGRpcmVudCIpKTsNCiAgICAgICAgICAgICAgICBmcmVlIChkaXJl bnRfZGF0YSk7DQogICAgICAgICAgICAgICAgZGlyZW50X2RhdGEgPSBOVUxMOw0KICAgICAgICAg ICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfQ0KICAgICAg ICBwb3MrKzsgICAgICAgICAgICAgICAgICAvKiBza2lwIE5VTEwgYnl0ZSB0ZXJtaW5hdGluZyBk aXJlY3RvcnkgbmFtZSAqLw0KDQogICAgICAgIC8qIHdlIGFyZSBub3cgcG9zaXRpb25lZCBhdCB0 aGUgZmlyc3QgaW50ZXJlc3RpbmcgZGlyZW50ICovDQoNCiAgICAgICAgLyogVGhpcyBpcyB0aGUg bWFpbiBsb29wLCBmb3IgZXZlcnkgZGlyZWN0b3J5IGVudHJ5IHJldHVybmVkICovDQogICAgICAg IHdoaWxlIChwb3MgPCBlbmRfb2ZfZGF0YSkgew0KICAgICAgICAgICAgICAgIGludCBpc19kaXIs IGlzX2ZpbGU7DQogICAgICAgICAgICAgICAgdWludDE2X3QgZGlyZW50X2F0dHJzOyAgLyogYXR0 cmlidXRlcyBvZiBkaXJlbnQgKi8NCiAgICAgICAgICAgICAgICB1aW50MzJfdCBkaXJlbnRfZmls ZV9zaXplOyAgICAgIC8qIHNpemUgb2YgZGlyZW50IGluIG9jdGV0cyAqLw0KICAgICAgICAgICAg ICAgIHVpbnQzMl90IGRpcmVudF90aW1lOyAgIC8qIHRpbWUgc3RhbXAgb2YgZGlyZW50IChVbml4 IEVwb2NoKSAqLw0KICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRpcmVudF9uYW1lOyAgIC8qIG5h bWUgb2YgZGlyZW50ICovDQogICAgICAgICAgICAgICAgc2l6ZV90IGRpcmVudF9uYW1lX2xlbjsg LyogbGVuZ3RoIG9mIGRpcmVudF9uYW1lICovDQogICAgICAgICAgICAgICAgc2l6ZV90IGRpcmVu dF9lbnRfc2l6ZTsgLyogc2l6ZSBvZiBkaXJlbnQgaW4gb2N0ZXRzICovDQogICAgICAgICAgICAg ICAgdWludDMyX3QgdG1wX3RpbWU7DQogICAgICAgICAgICAgICAgdGltZV90IGRhdGU7DQogICAg ICAgICAgICAgICAgc3RydWN0IHRtICp0bTsNCg0KICAgICAgICAgICAgICAgIGRpcmVudF9hdHRy cyA9IGxlMTZhdG9oIChwb3MgKyBDQU5PTl9ESVJFTlRfQVRUUlMpOw0KICAgICAgICAgICAgICAg IGRpcmVudF9maWxlX3NpemUgPSBsZTMyYXRvaCAocG9zICsgQ0FOT05fRElSRU5UX1NJWkUpOw0K ICAgICAgICAgICAgICAgIGRpcmVudF9uYW1lID0gcG9zICsgQ0FOT05fRElSRU5UX05BTUU7DQoN CiAgICAgICAgICAgICAgICAvKiBzZWUgY2Fub25faW50X3NldF90aW1lKCkgZm9yIHRpbWV6b25l IGhhbmRsaW5nICovDQogICAgICAgICAgICAgICAgdG1wX3RpbWUgPSBsZTMyYXRvaCAocG9zICsg Q0FOT05fRElSRU5UX1RJTUUpOw0KICAgICAgICAgICAgICAgIGlmICh0bXBfdGltZSAhPSAwKSB7 DQogICAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRTogSSBqdXN0IHdhbnQgdGhlIHRtX2dt dG9mZi90aW1lem9uZSBpbmZvICovDQogICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gdGlt ZShOVUxMKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRtICAgPSBsb2NhbHRpbWUgKCZkYXRl KTsNCiNpZmRlZiBIQVZFX1RNX0dNVE9GRg0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50 X3RpbWUgPSB0bXBfdGltZSAtIHRtLT50bV9nbXRvZmY7DQogICAgICAgICAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogY29udmVydGVkICVsZCB0byBV VEMgJWxkICh0bV9nbXRvZmYgaXMgJWxkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKXRtcF90aW1lLCAobG9uZylkaXJlbnRfdGltZSwgKGxvbmcpdG0tPnRtX2dtdG9m Zik7DQojZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50X3RpbWUgPSB0bXBfdGlt ZSArIHRpbWV6b25lOw0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9p bnRfbGlzdF9kaXJlY3Rvcnk6IGNvbnZlcnRlZCAlbGQgdG8gVVRDICVsZCAodGltZXpvbmUgaXMg JWxkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXRtcF90aW1lLCAo bG9uZylkaXJlbnRfdGltZSwgKGxvbmcpdGltZXpvbmUpOw0KI2VuZGlmDQogICAgICAgICAgICAg ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVudF90aW1lID0gdG1wX3Rp bWU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaXNfZGlyID0gKChkaXJl bnRfYXR0cnMgJiBDQU5PTl9BVFRSX05PTl9SRUNVUlNfRU5UX0RJUikgIT0gMCkNCiAgICAgICAg ICAgICAgICAgICAgICAgIHx8ICgoZGlyZW50X2F0dHJzICYgQ0FOT05fQVRUUl9SRUNVUlNfRU5U X0RJUikgIT0gMCk7DQogICAgICAgICAgICAgICAgaXNfZmlsZSA9ICFpc19kaXI7DQoNCiAgICAg ICAgICAgICAgICBncF9sb2cgKEdQX0xPR19EQVRBLCAiY2Fub24vY2Fub24uYyIsDQogICAgICAg ICAgICAgICAgICAgICAgICAiY2Fub25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAg ICAgICAgICAgICAgICAicmVhZGluZyBkaXJlbnQgYXQgcG9zaXRpb24gJWxpIG9mICVsaSAoMHgl bHggb2YgMHglbHgpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3MgLSBkaXJl bnRfZGF0YSksIChsb25nKShlbmRfb2ZfZGF0YSAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKShwb3MgLSBkaXJlbnRfZGF0YSksIChsb25nKShlbmRfb2ZfZGF0 YSAtIGRpcmVudF9kYXRhKSApOw0KDQogICAgICAgICAgICAgICAgaWYgKHBvcyArIENBTk9OX01J TklNVU1fRElSRU5UX1NJWkUgPiBlbmRfb2ZfZGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGNhbWVyYS0+cG9ydC0+dHlwZSA9PSBHUF9QT1JUX1NFUklBTCkgew0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0byBzZWUgaWYgaXQgaXMgb25seSBOVUxM IGJ5dGVzIGxlZnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgaXMg bm90IGFuIGVycm9yIGZvciBzZXJpYWwgY2FtZXJhcw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiAoYXQgbGVhc3QgdGhlIEE1MCBhZGRzIGZpdmUgemVybyBieXRlcyBhdCB0aGUg ZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yICh0ZW1wX2NoID0gcG9zOyAodGVtcF9jaCA8IGVuZF9vZl9k YXRhKSAmJiAoISp0ZW1wX2NoKTsgdGVtcF9jaCsrKSA7ICAgICAgICAvKiBkbyBub3RoaW5nICov DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBfY2ggPT0gZW5kX29m X2RhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJV RyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogIg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxhc3QgJWxpIGJ5dGVzIHdlcmUgYWxsIDAg LSBpZ25vcmluZy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykodGVtcF9jaCAtIHBvcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVH ICgiY2Fub25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlWyVsaT0weCVseF0gPT0gJWk9MHgleCIsIChs b25nKSh0ZW1wX2NoIC0gcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpKHRlbXBfY2ggLSBwb3MpLCAqdGVtcF9jaCwgKnRlbXBfY2gp Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fu b25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJwb3MgaXMgJXAsIGVuZF9vZl9kYXRhIGlzICVwLCB0ZW1wX2No IGlzICVwIC0gZGlmZiBpcyAweCVseCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBvcywgZW5kX29mX2RhdGEsIHRlbXBfY2gsIChsb25nKSh0ZW1w X2NoIC0gcG9zKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fu b25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImRpcmVudCBhdCBwb3NpdGlvbiAlbGk9MHglbHggb2YgJWxpPTB4JWx4IGlzIHRvbyBzbWFs bCwgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5pbXVtIGRpcmVudCBp cyAlaSBieXRlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBv cyAtIGRpcmVudF9kYXRhKSwgKGxvbmcpKHBvcyAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSks IChsb25nKShlbmRfb2ZfZGF0YSAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDQU5PTl9NSU5JTVVNX0RJUkVOVF9TSVpFKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfKCJjYW5vbl9pbnRfbGlzdF9kaXJlY3Rvcnk6ICINCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJ1bmNhdGVkIGRpcmVj dG9yeSBlbnRyeSBlbmNvdW50ZXJlZCIpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUg KGRpcmVudF9kYXRhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVudF9kYXRhID0gTlVM TDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFU QTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvKiBDaGVjayBlbmQgb2Yg dGhpcyBkaXJlbnQsIDEwIGlzIHRvIHNraXAgb3Zlcg0KICAgICAgICAgICAgICAgICAqIDIgICAg YXR0cmlidXRlcyArIDB4MDANCiAgICAgICAgICAgICAgICAgKiA0ICAgIGZpbGUgc2l6ZQ0KICAg ICAgICAgICAgICAgICAqIDQgICAgZmlsZSBkYXRlIChVTklYIGxvY2FsdGltZSkNCiAgICAgICAg ICAgICAgICAgKiB0byB3aGVyZSB0aGUgZGlyZW50cnkgbmFtZSBiZWdpbnMuDQogICAgICAgICAg ICAgICAgICovDQogICAgICAgICAgICAgICAgZm9yICh0ZW1wX2NoID0gZGlyZW50X25hbWU7IHRl bXBfY2ggPCBlbmRfb2ZfZGF0YSAmJiAqdGVtcF9jaCAhPSAwOw0KICAgICAgICAgICAgICAgICAg ICAgdGVtcF9jaCsrKSA7DQoNCiAgICAgICAgICAgICAgICBpZiAodGVtcF9jaCA9PSBlbmRfb2Zf ZGF0YSB8fCAqdGVtcF9jaCAhPSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJV RyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogIg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJkaXJlbnQgYXQgcG9zaXRpb24gJWxpIG9mICVsaSBoYXMgaW52YWxpZCBuYW1l IGluIGl0LiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFpbGluZyBvdXQg d2l0aCB3aGF0IHdlJ3ZlIGdvdC4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKShwb3MgLSBkaXJlbnRfZGF0YSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpKGVuZF9vZl9kYXRhIC0gZGlyZW50X2RhdGEpKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBkaXJl bnRfbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopZGlyZW50X25hbWUpOw0KICAgICAgICAgICAg ICAgIGRpcmVudF9lbnRfc2l6ZSA9IENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUgKyBkaXJlbnRf bmFtZV9sZW47DQoNCiAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGF0IGxlbmd0aCBvZiBuYW1l IGluIHRoaXMgZGlyZW50IGlzIG5vdCBvZiB1bnJlYXNvbmFibGUgc2l6ZS4NCiAgICAgICAgICAg ICAgICAgKiAyNTYgd2FzIHBpY2tlZCBvdXQgb2YgdGhlIGJsdWUNCiAgICAgICAgICAgICAgICAg Ki8NCiAgICAgICAgICAgICAgICBpZiAoZGlyZW50X25hbWVfbGVuID4gMjU2KSB7DQogICAgICAg ICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogIg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbmFtZSBpbiBkaXJlbnQgYXQg cG9zaXRpb24gJWxpIG9mICVsaSBpcyB0b28gbG9uZy4gKCVsaSBieXRlcykuIg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJiYWlsaW5nIG91dCB3aXRoIHdoYXQgd2UndmUgZ290 LiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvcyAtIGRpcmVu dF9kYXRhKSwgKGxvbmcpKGVuZF9vZl9kYXRhIC0gZGlyZW50X2RhdGEpLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKWRpcmVudF9uYW1lX2xlbik7DQogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg ICAvKiAxMCBieXRlcyBvZiBhdHRyaWJ1dGVzLCBzaXplIGFuZCBkYXRlLCBhIG5hbWUgYW5kIGEg TlVMTCB0ZXJtaW5hdGluZyBieXRlICovDQogICAgICAgICAgICAgICAgR1BfTE9HX0RBVEEgKChj aGFyICopcG9zLCBkaXJlbnRfZW50X3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJjYW5vbl9pbnRfbGlzdF9kaXJlY3Rvcnk6IGRpcmVudCBkZXRlcm1pbmVkIHRvIGJlICVsaT0w eCVseCBieXRlcyA6IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZGlyZW50 X2VudF9zaXplLCAobG9uZylkaXJlbnRfZW50X3NpemUpOw0KICAgICAgICAgICAgICAgIGlmIChk aXJlbnRfbmFtZV9sZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LLCB0aGlzIGRp cmVjdG9yeSBlbnRyeSBoYXMgYSBuYW1lIGluIGl0LiAqLw0KDQogICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKGxpc3RfZm9sZGVycyAmJiBpc19kaXIpIHx8IChsaXN0X2ZpbGVzICYmIGlzX2Zp bGUpKSB7DQoJCQkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSAoY2hhciAqKWRpcmVudF9uYW1lOw0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlJ3JlIGdvaW5nIHRvIGZpbGwg b3V0IHRoZSBpbmZvIHN0cnVjdHVyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbiB0aGlzIGJsb2NrICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNl dCAoJmluZm8sIDAsIHNpemVvZiAoaW5mbykpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHdlIHN0YXJ0IHdpdGggbm90aGluZyBhbmQgY29udGludW91c2x5IGFkZCBzdHVm ZiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUuZmllbGRzID0g R1BfRklMRV9JTkZPX05PTkU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m by5maWxlLm10aW1lID0gZGlyZW50X3RpbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChpbmZvLmZpbGUubXRpbWUgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbmZvLmZpbGUuZmllbGRzIHw9IEdQX0ZJTEVfSU5GT19NVElNRTsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZmlsZSkgew0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldGVybWluZSBmaWxlIHR5cGUgYmFz ZWQgb24gZmlsZSBuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogdGhpcyBzdHVmZiBvbmx5IG1ha2VzIHNlbnNlIGZvciBmaWxlcywgbm90IGZvciBmb2xkZXJz DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5IChpbmZvLmZpbGUudHlwZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFt ZTJtaW1ldHlwZSAoZmlsZW5hbWUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZiAoaW5mby5maWxlLnR5cGUpKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUuZmllbGRzIHw9IEdQX0ZJTEVfSU5G T19UWVBFOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRp cmVudF9hdHRycyAmIENBTk9OX0FUVFJfTk9UX0RPV05MT0FERUQpDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUuc3RhdHVzID0gR1BfRklM RV9TVEFUVVNfTk9UX0RPV05MT0FERUQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5mby5maWxlLnN0YXR1cyA9IEdQX0ZJTEVfU1RBVFVTX0RPV05MT0FERUQ7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlLmZpZWxkcyB8PSBH UF9GSUxFX0lORk9fU1RBVFVTOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdGhlIHNpemUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgMiBhbmQgaXMgNA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ5dGVzIGxvbmcsIHJlLW9yZGVy IGxpdHRsZS9iaWcgZW5kaWFuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5mby5maWxlLnNpemUgPSBkaXJlbnRfZmlsZV9zaXplOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZmlsZS5maWVsZHMgfD0gR1BfRklMRV9JTkZP X1NJWkU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaWxl IGFjY2VzcyBtb2RlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICgoZGlyZW50X2F0dHJzICYgQ0FOT05fQVRUUl9XUklURV9QUk9URUNURUQpID09IDApDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUu cGVybWlzc2lvbnMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHUF9GSUxFX1BFUk1fUkVBRCB8DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0ZJTEVfUEVSTV9ERUxFVEU7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlLnBlcm1pc3Npb25z ID0gR1BfRklMRV9QRVJNX1JFQUQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5mby5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9fUEVSTUlTU0lPTlM7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBwcmludCBkaXJlbnQgYXMgdGV4dCAqLw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHUF9ERUJVRyAoIlJhdyBpbmZvOiBuYW1lPSVzIGlzX2Rpcj0laSwgaXNfZmls ZT0laSwgYXR0cnM9MHgleCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaXJlbnRfbmFtZSwgaXNfZGlyLCBpc19maWxlLCBkaXJlbnRfYXR0cnMpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19maWxlaW5mbyAoJmluZm8pOw0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19maWxlKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiBBcHBlbmQgZGlyZWN0bHkgdG8gdGhlIGZpbGVzeXN0ZW0gaW5zdGVh ZCBvZiB0byB0aGUgbGlzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiBiZWNhdXNlIHdlIGhhdmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4NCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIWNhbWVyYS0+cGwtPmxpc3RfYWxsX2ZpbGVzDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpc19pbWFnZSAoZmlsZW5h bWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpc19t b3ZpZSAoZmlsZW5hbWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmICFpc19hdWRpbyAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRTogRmluZCBhc3NvY2lhdGVkIG1haW4gZmls ZSBhbmQgYWRkIGl0IHRoZXJlICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIklnbm9yZWQgJXMvJXMiLCBmb2xkZXIs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICp0aHVtYm5hbWU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlcyA9IGdwX2ZpbGVzeXN0ZW1fYXBwZW5kIChjYW1lcmEtPmZzLCBm b2xkZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGNvbnRleHQpOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBHUF9PSykgew0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9E RUJVRyAoIkNvdWxkIG5vdCBncF9maWxlc3lzdGVtX2FwcGVuZCAiDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaW4g Zm9sZGVyICVzOiAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZm9sZGVyLCBncF9yZXN1bHRfYXNf c3RyaW5nIChyZXMpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiQWRkZWQgZmlsZSAlcy8lcyIsIGZvbGRlciwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZpbGVuYW1lKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aHVtYm5hbWUgPQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX2ludF9maWxlbmFt ZTJ0aHVtYm5hbWUgKGNhbWVyYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmaWxlbmFtZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICh0aHVtYm5hbWUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHRodW1i bmFpbCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNfY3IyICggZmlsZW5hbWUgKSApIHsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFdlIGdldCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcmF3IGZpbGUgYXMg dGhlIHRodW1ibmFpbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgKGFsbW9zdCkgYSB2YWxp ZCBFWElGIGZpbGUuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnByZXZpZXcuZmllbGRzID0NCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR1BfRklMRV9JTkZPX1RZUEU7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJuY3B5IChpbmZvLnByZXZpZXcudHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX01J TUVfRVhJRiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoaW5mby5wcmV2aWV3LnR5 cGUpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbGRlciBD YW5vbiBjYW1zIGhhdmUgSlBFRyB0aHVtYnMgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHJldmll dy5maWVsZHMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9GSUxFX0lORk9fVFlQRTsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cm5jcHkgKGluZm8ucHJldmlldy50eXBlLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR1BfTUlNRV9KUEVHLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChp bmZvLnByZXZpZXcudHlwZSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGdwX2ZpbGVzeXN0ZW1fc2V0 X2luZm9fbm9vcCAoY2FtZXJhLT5mcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xk ZXIsIGZpbGVuYW1lLCBpbmZvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQp Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAocmVzICE9IEdQX09LKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJDb3VsZCBub3QgZ3BfZmls ZXN5c3RlbV9zZXRfaW5mb19ub29wKCkgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaW4gZm9sZGVy ICVzOiAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBmb2xkZXIsIGdwX3Jlc3VsdF9h c19zdHJpbmcgKHJlcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHUF9ERUJVRyAoICJmaWxlIFwiJXNcIiBoYXMgcHJldmlldyBvZiBNSU1FIHR5cGUgXCIl c1wiIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmlsZW5hbWUsIGluZm8ucHJldmlldy50eXBlICk7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgY2FtZXJhcyBoYXZl ICIuLiIgZXhwbGljaXRseQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhdCB0 aGUgZW5kIG9mIGVhY2ggZGlyZWN0b3J5LiBXZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKiB3aWxsIHNpbGVudGx5IG9taXQgdGhpcyBmcm9tIHRoZQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBkaXJlY3RvcnkgcmV0dXJuZWQuICovDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICggaXNfZGlyICYmIHN0cmNtcCAoICIuLiIsIGZpbGVuYW1l ICkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gZ3Bf bGlzdF9hcHBlbmQgKGxpc3QsIGZpbGVuYW1lLCBOVUxMKTsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IEdQX09LKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJDb3VsZCBub3QgZ3BfbGlz dF9hcHBlbmQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJmb2xkZXIgJXM6ICVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIsIGdwX3Jlc3VsdF9hc19zdHJp bmcgKHJlcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0aGlzIGNhc2UgY291bGQgbWVhbiB0aGF0IHRoaXMgd2FzIHRoZSBsYXN0IGRpcmVudCAqLw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0 X2RpcmVjdG9yeTogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImRpcmVudCBhdCBwb3NpdGlvbiAlbGkgb2YgJWxpIGhhcyBOVUxMIG5hbWUsIHNraXBwaW5nLiIs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zIC0g ZGlyZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSkpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg IC8qIG1ha2UgJ3BvcycgcG9pbnQgdG8gbmV4dCBkaXJlbnQgaW4gcGFja2V0Lg0KICAgICAgICAg ICAgICAgICAqIGZpcnN0IHdlIHNraXAgMTAgYnl0ZXMgb2YgYXR0cmlidXRlLCBzaXplIGFuZCBk YXRlLA0KICAgICAgICAgICAgICAgICAqIHRoZW4gd2Ugc2tpcCB0aGUgbmFtZSBwbHVzIDEgZm9y IHRoZSBOVUxMDQogICAgICAgICAgICAgICAgICogdGVybWluYXRpb24gYnl0ZXMuDQogICAgICAg ICAgICAgICAgICovDQogICAgICAgICAgICAgICAgcG9zICs9IGRpcmVudF9lbnRfc2l6ZTsNCiAg ICAgICAgfQ0KICAgICAgICBmcmVlIChkaXJlbnRfZGF0YSk7DQogICAgICAgIGRpcmVudF9kYXRh ID0gTlVMTDsNCg0KICAgICAgICBHUF9ERUJVRyAoIjxGSUxFU1lTVEVNLURVTVA+Iik7DQogICAg ICAgIGdwX2ZpbGVzeXN0ZW1fZHVtcCAoY2FtZXJhLT5mcyk7DQogICAgICAgIEdQX0RFQlVHICgi PC9GSUxFU1lTVEVNLURVTVA+Iik7DQoNCiAgICAgICAgR1BfREVCVUcgKCJFTkQgY2Fub25faW50 X2xpc3RfZGlyKCkgZm9sZGVyICclcycgYWthICclcyciLCBmb2xkZXIsIGNhbm9uZm9sZGVyKTsN Cg0KICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCi8qKg0KICogY2Fub25faW50X2dldF9maWxl Og0KICogQGNhbWVyYToNCiAqIEBuYW1lOiBuYW1lIG9mIGZpbGUgdG8gZmV0Y2gNCiAqIEBkYXRh OiB0byByZWNlaXZlIGZpbGUgZGF0YQ0KICogQGxlbmd0aDogbGVuZ3RoIG9mIEBkYXRhDQogKiBA Y29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogR2V0cyB0aGUgZGly ZWN0b3J5IHRyZWUgb2YgYSBnaXZlbiBmbGFzaCBkZXZpY2UuDQogKg0KICogUmV0dXJuczogZ3Bo b3RvMiBlcnJvciBjb2RlLCBmaWxlIGNvbnRlbnRzIGluIEBkYXRhLA0KICogIGxlbmd0aCBvZiBm aWxlIGluIEBsZW5ndGguDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9nZXRfZmlsZSAoQ2FtZXJh ICpjYW1lcmEsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKipkYXRhLCB1bnNpZ25l ZCBpbnQgKmxlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0ICpjb250ZXh0KQ0K ew0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAg IGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25f dXNiX2dldF9maWxlIChjYW1lcmEsIG5hbWUsIGRhdGEsIGxlbmd0aCwgY29udGV4dCk7DQogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRf U0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEgPSBjYW5vbl9zZXJpYWxfZ2V0 X2ZpbGUgKGNhbWVyYSwgbmFtZSwgbGVuZ3RoLCBjb250ZXh0KTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgqZGF0YSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEdQX09LOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX09TX0ZBSUxV UkU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBHUF9Q T1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KfQ0KDQovKioNCiAqIGNhbm9uX2ludF9nZXRfdGh1bWJu YWlsOg0KICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQG5hbWU6IGltYWdlIHRv IGdldCB0aHVtYm5haWwgb2YNCiAqIEBsZW5ndGg6IGxlbmd0aCBvZiBkYXRhIHJldHVybmVkDQog KiBAcmV0ZGF0YTogVGhlIHRodW1ibmFpbCBkYXRhDQogKiBAY29udGV4dDogY29udGV4dCBmb3Ig ZXJyb3IgcmVwb3J0aW5nDQogKg0KICogTk9URTogU2luY2UgY2FtZXJhcyB0aGF0IGRvIG5vdCBz dG9yZSB0aGUgdGh1bWJuYWlsIGluIGEgc2VwYXJhdGUNCiAqIGZpbGUgZG9lcyBub3QgcmV0dXJu IGp1c3QgdGhlIHRodW1ibmFpbCBidXQgdGhlIGZpcnN0IDEwODEzIGJ5dGVzDQogKiBvZiB0aGUg aW1hZ2UgKG1vc3Qgb2Z0ZW4gdGhlIEVYSUYgaGVhZGVyIHdpdGggdGh1bWJuYWlsIGRhdGEgaW4N CiAqIGl0KSB0aGlzIG11c3QgYmUgdHJlYXRlZCBiZWZvcmUgY2FsbGVkIGEgdHJ1ZSB0aHVtYm5h aWwuDQogKg0KICogUmV0dXJuczogcmVzdWx0IGZyb20gY2Fub25fdXNiX2dldF90aHVtYm5haWwo KQ0KICogICBvciBjYW5vbl9zZXJpYWxfZ2V0X3RodW1ibmFpbCgpDQogKg0KICovDQppbnQNCmNh bm9uX2ludF9nZXRfdGh1bWJuYWlsIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqbmFtZSwg dW5zaWduZWQgY2hhciAqKnJldGRhdGEsDQogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50ICpsZW5ndGgsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHJlczsN Cg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfdGh1bWJuYWlsKCkgY2FsbGVkIGZv ciBmaWxlICclcyciLCBuYW1lKTsNCg0KICAgICAgICBDT05fQ0hFQ0tfUEFSQU1fTlVMTCAocmV0 ZGF0YSk7DQogICAgICAgIENPTl9DSEVDS19QQVJBTV9OVUxMIChsZW5ndGgpOw0KDQogICAgICAg IHN3aXRjaCAoY2FtZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9Q T1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNhbm9uX3VzYl9nZXRfdGh1 bWJuYWlsIChjYW1lcmEsIG5hbWUsIHJldGRhdGEsIGxlbmd0aCwgY29udGV4dCk7DQogICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfU0VS SUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fc2VyaWFsX2dldF90aHVt Ym5haWwgKGNhbWVyYSwgbmFtZSwgcmV0ZGF0YSwgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgR1BfUE9SVF9ERUZBVUxU DQogICAgICAgIH0NCiAgICAgICAgaWYgKHJlcyAhPSBHUF9PSykgew0KICAgICAgICAgICAgICAg IEdQX0RFQlVHICgiY2Fub25faW50X2dldF90aHVtYm5haWwoKSBmYWlsZWQsIHJldHVybmVkICVp IiwgcmVzKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOw0KICAgICAgICB9DQoNCiAgICAg ICAgcmV0dXJuIHJlczsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZGVsZXRlX2ZpbGU6DQogKiBA Y2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAbmFtZTogaW1hZ2UgdG8gZGVsZXRlDQog KiBAZGlyOiBkaXJlY3RvcnkgZnJvbSB3aGljaCB0byBkZWxldGUgdGhlIGZpbGUNCiAqIEBjb250 ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBEZWxldGVzIGEgZmlsZSBm cm9tIHRoZSBjYW1lcmEgc3RvcmFnZS4NCiAqDQogKiBSZXR1cm5zOiByZXN1bHQgZnJvbSBjYW5v bl91c2JfZGlhbG9ndWUoKSBvciBjYW5vbl9zZXJpYWxfZGlhbG9ndWUoKQ0KICoNCiAqLw0KaW50 DQpjYW5vbl9pbnRfZGVsZXRlX2ZpbGUgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICpkaXIsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWdu ZWQgY2hhciBwYXlsb2FkWzMwMF07DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAgICAg ICAgdW5zaWduZWQgaW50IGxlbiwgcGF5bG9hZF9sZW5ndGg7DQoNCiAgICAgICAgc3dpdGNoIChj YW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0K ICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChwYXlsb2FkLCBkaXIsIHN0cmxlbiAoZGly KSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9k ZWwgPT0gQ0FOT05fQ0xBU1NfNiApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqcHRyID0gKGNoYXIgKilwYXlsb2FkICsgc3RybGVuKGRpcik7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgbGFzdF9ieXRlID0gZGlyW3N0cmxlbihkaXIpLTFdOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXdlciBwcm90b2NvbCB1c2VzIGEg ZGlmZmVyZW50DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNvZGUgYW5kIGhh cyBkaWZmZXJlbnQgcGFyYW1ldGVyczoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogLSBmdWxsIHBhdGggbmFtZSB0b2dldGhlciwgcmF0aGVyIHRoYW4gZGlyZWN0b3J5IGFuZCBm aWxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgYXMgc2VwYXJhdGUgc3Ry aW5ncw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtIDggYnl0ZXMgb2Ygb3Ro ZXIgc3R1ZmYsIHN0YXJ0aW5nIGF0IDB4MjAgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogICBwYXlsb2FkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0g ZGlyZWN0b3J5IG5hbWUgKGFnYWluKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiAtIDIgbnVsbCBieXRlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo IGxhc3RfYnl0ZSAhPSAnXFwnICYmIGxhc3RfYnl0ZSAhPSAnLycgKQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpwdHIrKyA9ICdcXCc7IC8qIE5lZWQgcGF0aCBzZXBh cmF0b3IgYmV0d2VlbiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkg KCBwdHIsIG5hbWUsIDB4MzAgLSBzdHJsZW4oZGlyKSAtIDEgKTsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZW1jcHkgKCBwYXlsb2FkICsgMHgzMCwgZGlyLCAweDMwICk7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gMHgzMCArIHN0 cmxlbihkaXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3RfYnl0 ZSAhPSAnXFwnICYmIGxhc3RfYnl0ZSAhPSAnLycgKQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBheWxvYWRbcGF5bG9hZF9sZW5ndGgrK10gPSAnXFwnOyAvKiBOZWVk IHBhdGggc2VwYXJhdG9yIGF0IGVuZCBvZiBkaXJlY3RvcnkgbmFtZSAqLw0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoY2FtZXJhLCBD QU5PTl9VU0JfRlVOQ1RJT05fREVMRVRFX0ZJTEVfMiwgJmxlbiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLCBwYXlsb2Fk X2xlbmd0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChwYXls b2FkICsgc3RybGVuIChkaXIpICsgMSwgbmFtZSwgc3RybGVuIChuYW1lKSArIDEpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IHN0cmxlbiAoZGlyKSAr IHN0cmxlbiAobmFtZSkgKyAyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXls b2FkW3BheWxvYWRfbGVuZ3RoKytdID0gMDsgLyogRG91YmxlIE5VTCB0byBlbmQgY29tbWFuZCAq Lw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9n dWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0RFTEVURV9GSUxFLCAmbGVuLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxv YWQsIHBheWxvYWRfbGVuZ3RoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKCBsZTMyYXRvaCAoIG1zZyApICE9IDAgKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImNhbm9uX2ludF9kZWxldGVfZmlsZTogIg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24temVybyByZXR1 cm4gY29kZSAweCV4IGZyb20gY2FtZXJhLiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBvc3NpYmx5IHRyaWVkIHRvIGRlbGV0ZSBhIG5vbmV4aXN0ZW50IGZp bGUuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyYXRv aCAoIG1zZyApICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9F UlJPUl9GSUxFX05PVF9GT1VORDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1NF UklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3NlcmlhbF9kaWFsb2d1 ZSAoY2FtZXJhLCBjb250ZXh0LCAweGQsIDB4MTEsICZsZW4sIGRpciwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChkaXIpICsgMSwg bmFtZSwgc3RybGVuIChuYW1lKSArIDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCBtc2cgPT0gTlVMTCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25f c2VyaWFsX2Vycm9yX3R5cGUgKGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgR1BfUE9S VF9ERUZBVUxUDQogICAgICAgIH0NCg0KICAgICAgICBpZiAobGVuICE9IDQpIHsNCiAgICAgICAg ICAgICAgICAvKiBYWFggc2hvdWxkIG1hcmsgZm9sZGVyIGFzIGRpcnR5IHNpbmNlIHdlIGNhbid0 IGJlIHN1cmUgaWYgdGhlIGZpbGUNCiAgICAgICAgICAgICAgICAgKiBnb3QgZGVsZXRlZCBvciBu b3QNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1Jf Q09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobXNnWzBdID09IDB4Mjkp IHsNCiAgICAgICAgICAgICAgICBncF9jb250ZXh0X2Vycm9yIChjb250ZXh0LCBfKCJGaWxlIHBy b3RlY3RlZC4iKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NBTUVSQV9FUlJP UjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIFhYWCB3ZSBzaG91bGQgbWFyayBmb2xkZXIgYXMg ZGlydHksIHJlLXJlYWQgaXQgYW5kIGNoZWNrIGlmIHRoZSBmaWxlDQogICAgICAgICAqIGlzIGdv bmUgb3Igbm90Lg0KICAgICAgICAgKi8NCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQovKioN CiAqIGNhbm9uX2ludF9wdXRfZmlsZToNCiAqIEBjYW1lcmE6IGNhbWVyYSB0byB3b3JrIHdpdGgN CiAqIEBmaWxlOiBncGhvdG8yIGZpbGUgb2JqZWN0IHRvIHVwbG9hZA0KICogQGRlc3RuYW1lOiBu YW1lIGZvciBmaWxlIG9uIGNhbWVyYQ0KICogQGRlc3RwYXRoOiBkaXJlY3RvcnkgaW4gd2hpY2gg dG8gcHV0IHRoZSBmaWxlDQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5n DQogKg0KICogVXBsb2FkcyBhIGZpbGUgdG8gdGhlIGNhbWVyYS4NCiAqDQogKiBSZXR1cm5zOiBy ZXN1bHQgZnJvbSBjYW5vbl91c2JfcHV0X2ZpbGUoKSBvciBjYW5vbl9zZXJpYWxfcHV0X2ZpbGUo KQ0KICoNCiAqLw0KaW50DQpjYW5vbl9pbnRfcHV0X2ZpbGUgKENhbWVyYSAqY2FtZXJhLCBDYW1l cmFGaWxlICpmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwNCgkJICAgIGNvbnN0IGNoYXIgKmRl c3RuYW1lLCBjb25zdCBjaGFyICpkZXN0cGF0aCwgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAg ICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2Ug R1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25fdXNiX3B1 dF9maWxlIChjYW1lcmEsIGZpbGUsIGZpbGVuYW1lLCBkZXN0bmFtZSwgZGVzdHBhdGgsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0 KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug R1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25fc2Vy aWFsX3B1dF9maWxlIChjYW1lcmEsIGZpbGUsIGZpbGVuYW1lLCBkZXN0bmFtZSwgZGVzdHBhdGgs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b250ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg IEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQogICAgICAgIC8qIE5ldmVyIHJlYWNoZWQgKi8N CiAgICAgICAgcmV0dXJuIEdQX0VSUk9SOw0KfQ0KDQppbnQNCmNhbm9uX2ludF93YWl0X2Zvcl9l dmVudCAoQ2FtZXJhICpjYW1lcmEsIGludCB0aW1lb3V0LA0KICAgICAgICAgICAgICAgIENhbWVy YUV2ZW50VHlwZSAqZXZlbnR0eXBlLCB2b2lkICoqZXZlbnRkYXRhLA0KICAgICAgICAgICAgICAg IEdQQ29udGV4dCAqY29udGV4dCkNCnsNCglzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0K CWNhc2UgR1BfUE9SVF9VU0I6DQoJCXJldHVybiBjYW5vbl91c2Jfd2FpdF9mb3JfZXZlbnQgKGNh bWVyYSwgdGltZW91dCwgZXZlbnR0eXBlLCBldmVudGRhdGEsIGNvbnRleHQpOw0KCQlicmVhazsN CglHUF9QT1JUX0RFRkFVTFQNCgl9DQoJLyogTmV2ZXIgcmVhY2hlZCAqLw0KCXJldHVybiBHUF9F UlJPUjsNCn0NCg0KLyogTk9URToNCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFjdHVhbGx5IG5v dCBiZSBuZWNlc3NhcnksIGFzDQogKiBjYW5vbl9pbnRfbGlzdF9kaXJlY3RvcnkgcHJlcHMgdGhl IGZpbGVzeXN0ZW0gaW5mbyBiYWNraW5nIHN0b3JlIHdpdGgNCiAqIGFsbCB0aGUgQ2FtZXJhRmls ZUluZm9zIGl0IG5lZWRzLg0KICogSXQgbWlnaHQgbmV2ZXIgYmUgY2FsbGVkLg0KICovDQppbnQN CmNhbm9uX2ludF9nZXRfaW5mb19mdW5jIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqZm9s ZGVyLA0KICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBDYW1lcmFGaWxlSW5m byAqaW5mbywNCiAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQoJLyogRklY TUU6IGJpZyBjb3B5IGFuZCBwYXN0ZSBtZXNzIGZyb20gY2Fub25faW50X2xpc3RfZGlyZWN0b3J5 ICovDQogICAgICAgIGludCByZXM7DQogICAgICAgIHVuc2lnbmVkIGludCBkaXJlbnRzX2xlbmd0 aDsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqZGlyZW50X2RhdGEgPSBOVUxMOw0KICAgICAgICB1 bnNpZ25lZCBjaGFyICplbmRfb2ZfZGF0YSwgKnRlbXBfY2gsICpwb3M7DQogICAgICAgIGNvbnN0 IGNoYXIgKmNhbm9uZm9sZGVyID0gZ3Bob3RvMmNhbm9ucGF0aCAoY2FtZXJhLCBmb2xkZXIsIGNv bnRleHQpOw0KDQogICAgICAgIEdQX0RFQlVHICgiQkVHSU4gY2Fub25faW50X2dldF9pbmZvX2Z1 bmMoKSBmb2xkZXIgJyVzJyBha2EgJyVzJyBmaWxlbmFtZSAlcyIsIGZvbGRlciwgY2Fub25mb2xk ZXIsIGZpbGVuYW1lKTsNCg0KICAgICAgICBpZiAoIGNhbm9uZm9sZGVyID09IE5VTEwgKSB7DQog ICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiRXJyb3I6IGNhbm9uX2ludF9nZXRfaW5mb19mdW5j IGNhbGxlZCB3aXRoIG51bGwgbmFtZSBmb3IgY2FtZXJhIGZvbGRlciIgKTsNCiAgICAgICAgICAg ICAgICByZXR1cm4gR1BfRVJST1I7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBGZXRjaCBhbGwg ZGlyZWN0b3J5IGVudHJpZXMgZnJvbSB0aGUgY2FtZXJhICovDQogICAgICAgIHN3aXRjaCAoY2Ft ZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAg ICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNhbm9uX3VzYl9nZXRfZGlyZW50cyAoY2FtZXJh LCAmZGlyZW50X2RhdGEsICZkaXJlbnRzX2xlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25mb2xkZXIsIGNvbnRleHQpOw0KICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JU X1NFUklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNhbm9uX3NlcmlhbF9nZXRf ZGlyZW50cyAoY2FtZXJhLCAmZGlyZW50X2RhdGEsICZkaXJlbnRzX2xlbmd0aCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25mb2xk ZXIsIGNvbnRleHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAg ICAgICAgR1BfUE9SVF9ERUZBVUxUDQogICAgICAgIH0NCiAgICAgICAgaWYgKHJlcyAhPSBHUF9P SykNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOw0KDQogICAgICAgIGVuZF9vZl9kYXRhID0g ZGlyZW50X2RhdGEgKyBkaXJlbnRzX2xlbmd0aDsNCg0KICAgICAgICBpZiAoZGlyZW50c19sZW5n dGggPCBDQU5PTl9NSU5JTVVNX0RJUkVOVF9TSVpFKSB7DQogICAgICAgICAgICAgICAgZ3BfY29u dGV4dF9lcnJvciAoY29udGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf KCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogRVJST1I6ICINCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJpbml0aWFsIG1lc3NhZ2UgdG9vIHNob3J0ICglaSA8IG1pbmltdW0g JWkpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50c19sZW5ndGgs IENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUpOw0KICAgICAgICAgICAgICAgIGZyZWUgKGRpcmVu dF9kYXRhKTsNCiAgICAgICAgICAgICAgICBkaXJlbnRfZGF0YSA9IE5VTEw7DQogICAgICAgICAg ICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9DQoNCiAgICAg ICAgLyogVGhlIGZpcnN0IGRhdGEgd2UgaGF2ZSBnb3QgaGVyZSBpcyB0aGUgZGlyZW50IGZvciB0 aGUNCiAgICAgICAgICogZGlyZWN0b3J5IHdlIGFyZSByZWFkaW5nLiBTa2lwIG92ZXIgMTAgYnl0 ZXMNCiAgICAgICAgICogKDIgZm9yIGF0dHJpYnV0ZXMsIDQgZGF0ZSBhbmQgNCBzaXplKSBhbmQg dGhlbiBnbyBmaW5kDQogICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBuYW1lIHNv IHRoYXQgd2UgZ2V0IHRvIHRoZSBuZXh0DQogICAgICAgICAqIGRpcmVudCB3aGljaCBpcyBhY3R1 YWxseSB0aGUgZmlyc3Qgb25lIHdlIGFyZSBpbnRlcmVzdGVkDQogICAgICAgICAqIGluDQogICAg ICAgICAqLw0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfaW5mb19mdW5jOiBDYW1l cmEgZGlyZWN0b3J5IGxpc3RpbmcgZm9yIGRpcmVjdG9yeSAnJXMnIiwNCiAgICAgICAgICAgICAg ICAgIGRpcmVudF9kYXRhICsgQ0FOT05fRElSRU5UX05BTUUpOw0KDQogICAgICAgIGZvciAocG9z ID0gZGlyZW50X2RhdGEgKyBDQU5PTl9ESVJFTlRfTkFNRTsgcG9zIDwgZW5kX29mX2RhdGEgJiYg KnBvcyAhPSAwOyBwb3MrKykNCiAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovIDsNCiAg ICAgICAgaWYgKHBvcyA9PSBlbmRfb2ZfZGF0YSB8fCAqcG9zICE9IDApIHsNCiAgICAgICAgICAg ICAgICBncF9sb2cgKEdQX0xPR19FUlJPUiwgImNhbm9uX2ludF9nZXRfaW5mb19mdW5jIiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhY2hlZCBlbmQgb2YgcGFja2V0IHdo aWxlIGV4YW1pbmluZyB0aGUgZmlyc3QgZGlyZW50Iik7DQogICAgICAgICAgICAgICAgZnJlZSAo ZGlyZW50X2RhdGEpOw0KICAgICAgICAgICAgICAgIGRpcmVudF9kYXRhID0gTlVMTDsNCiAgICAg ICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCiAg ICAgICAgcG9zKys7ICAgICAgICAgICAgICAgICAgLyogc2tpcCBOVUxMIGJ5dGUgdGVybWluYXRp bmcgZGlyZWN0b3J5IG5hbWUgKi8NCg0KICAgICAgICAvKiB3ZSBhcmUgbm93IHBvc2l0aW9uZWQg YXQgdGhlIGZpcnN0IGludGVyZXN0aW5nIGRpcmVudCAqLw0KDQogICAgICAgIC8qIFRoaXMgaXMg dGhlIG1haW4gbG9vcCwgZm9yIGV2ZXJ5IGRpcmVjdG9yeSBlbnRyeSByZXR1cm5lZCAqLw0KICAg ICAgICB3aGlsZSAocG9zIDwgZW5kX29mX2RhdGEpIHsNCiAgICAgICAgICAgICAgICBpbnQgaXNf ZGlyLCBpc19maWxlOw0KICAgICAgICAgICAgICAgIHVpbnQxNl90IGRpcmVudF9hdHRyczsgIC8q IGF0dHJpYnV0ZXMgb2YgZGlyZW50ICovDQogICAgICAgICAgICAgICAgdWludDMyX3QgZGlyZW50 X2ZpbGVfc2l6ZTsgICAgICAvKiBzaXplIG9mIGRpcmVudCBpbiBvY3RldHMgKi8NCiAgICAgICAg ICAgICAgICB1aW50MzJfdCBkaXJlbnRfdGltZTsgICAvKiB0aW1lIHN0YW1wIG9mIGRpcmVudCAo VW5peCBFcG9jaCkgKi8NCiAgICAgICAgICAgICAgICB1aW50OF90ICpkaXJlbnRfbmFtZTsgICAv KiBuYW1lIG9mIGRpcmVudCAqLw0KICAgICAgICAgICAgICAgIHNpemVfdCBkaXJlbnRfbmFtZV9s ZW47IC8qIGxlbmd0aCBvZiBkaXJlbnRfbmFtZSAqLw0KICAgICAgICAgICAgICAgIHNpemVfdCBk aXJlbnRfZW50X3NpemU7IC8qIHNpemUgb2YgZGlyZW50IGluIG9jdGV0cyAqLw0KICAgICAgICAg ICAgICAgIHVpbnQzMl90IHRtcF90aW1lOw0KICAgICAgICAgICAgICAgIHRpbWVfdCBkYXRlOw0K ICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqdG07DQoNCiAgICAgICAgICAgICAgICBkaXJlbnRf YXR0cnMgPSBsZTE2YXRvaCAocG9zICsgQ0FOT05fRElSRU5UX0FUVFJTKTsNCiAgICAgICAgICAg ICAgICBkaXJlbnRfZmlsZV9zaXplID0gbGUzMmF0b2ggKHBvcyArIENBTk9OX0RJUkVOVF9TSVpF KTsNCiAgICAgICAgICAgICAgICBkaXJlbnRfbmFtZSA9IHBvcyArIENBTk9OX0RJUkVOVF9OQU1F Ow0KDQogICAgICAgICAgICAgICAgLyogc2VlIGNhbm9uX2ludF9zZXRfdGltZSgpIGZvciB0aW1l em9uZSBoYW5kbGluZyAqLw0KICAgICAgICAgICAgICAgIHRtcF90aW1lID0gbGUzMmF0b2ggKHBv cyArIENBTk9OX0RJUkVOVF9USU1FKTsNCiAgICAgICAgICAgICAgICBpZiAodG1wX3RpbWUgIT0g MCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyogRklYTUU6IEkganVzdCB3YW50IHRoZSB0 bV9nbXRvZmYvdGltZXpvbmUgaW5mbyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9 IHRpbWUoTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICB0bSAgID0gbG9jYWx0aW1lICgm ZGF0ZSk7DQojaWZkZWYgSEFWRV9UTV9HTVRPRkYNCiAgICAgICAgICAgICAgICAgICAgICAgIGRp cmVudF90aW1lID0gdG1wX3RpbWUgLSB0bS0+dG1fZ210b2ZmOw0KICAgICAgICAgICAgICAgICAg ICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogY29udmVydGVkICVsZCB0 byBVVEMgJWxkICh0bV9nbXRvZmYgaXMgJWxkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKXRtcF90aW1lLCAobG9uZylkaXJlbnRfdGltZSwgKGxvbmcpdG0tPnRtX2dt dG9mZik7DQojZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50X3RpbWUgPSB0bXBf dGltZSArIHRpbWV6b25lOw0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5v bl9pbnRfZ2V0X2luZm9fZnVuYzogY29udmVydGVkICVsZCB0byBVVEMgJWxkICh0aW1lem9uZSBp cyAlbGQpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpdG1wX3RpbWUs IChsb25nKWRpcmVudF90aW1lLCAobG9uZyl0aW1lem9uZSk7DQojZW5kaWYNCiAgICAgICAgICAg ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50X3RpbWUgPSB0bXBf dGltZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpc19kaXIgPSAoKGRp cmVudF9hdHRycyAmIENBTk9OX0FUVFJfTk9OX1JFQ1VSU19FTlRfRElSKSAhPSAwKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgfHwgKChkaXJlbnRfYXR0cnMgJiBDQU5PTl9BVFRSX1JFQ1VSU19F TlRfRElSKSAhPSAwKTsNCiAgICAgICAgICAgICAgICBpc19maWxlID0gIWlzX2RpcjsNCg0KICAg ICAgICAgICAgICAgIGdwX2xvZyAoR1BfTE9HX0RBVEEsICJjYW5vbi9jYW5vbi5jIiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAg ICAgICAgICAgICAgICAgInJlYWRpbmcgZGlyZW50IGF0IHBvc2l0aW9uICVsaSBvZiAlbGkgKDB4 JWx4IG9mIDB4JWx4KSIsDQogICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zIC0gZGly ZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSksDQogICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykocG9zIC0gZGlyZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2Rh dGEgLSBkaXJlbnRfZGF0YSkgKTsNCg0KICAgICAgICAgICAgICAgIGlmIChwb3MgKyBDQU5PTl9N SU5JTVVNX0RJUkVOVF9TSVpFID4gZW5kX29mX2RhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChjYW1lcmEtPnBvcnQtPnR5cGUgPT0gR1BfUE9SVF9TRVJJQUwpIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIGl0IGlzIG9ubHkgTlVM TCBieXRlcyBsZWZ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IGlz IG5vdCBhbiBlcnJvciBmb3Igc2VyaWFsIGNhbWVyYXMNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogKGF0IGxlYXN0IHRoZSBBNTAgYWRkcyBmaXZlIHplcm8gYnl0ZXMgYXQgdGhl IGVuZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAodGVtcF9jaCA9IHBvczsgKHRlbXBfY2ggPCBlbmRfb2Zf ZGF0YSkgJiYgKCEqdGVtcF9jaCk7IHRlbXBfY2grKykgOyAgICAgICAgLyogZG8gbm90aGluZyAq Lw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wX2NoID09IGVuZF9v Zl9kYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVC VUcgKCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxhc3QgJWxpIGJ5dGVzIHdlcmUgYWxsIDAg LSBpZ25vcmluZy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykodGVtcF9jaCAtIHBvcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVH ICgiY2Fub25faW50X2dldF9pbmZvX2Z1bmM6ICINCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVbJWxpPTB4JWx4XSA9PSAlaT0weCV4IiwgKGxv bmcpKHRlbXBfY2ggLSBwb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykodGVtcF9jaCAtIHBvcyksICp0ZW1wX2NoLCAqdGVtcF9jaCk7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5v bl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAicG9zIGlzICVwLCBlbmRfb2ZfZGF0YSBpcyAlcCwgdGVtcF9jaCBp cyAlcCAtIGRpZmYgaXMgMHglbHgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwb3MsIGVuZF9vZl9kYXRhLCB0ZW1wX2NoLCAobG9uZykodGVtcF9j aCAtIHBvcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9u X2ludF9nZXRfaW5mb19mdW5jOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImRpcmVudCBhdCBwb3NpdGlvbiAlbGk9MHglbHggb2YgJWxpPTB4JWx4IGlzIHRvbyBzbWFsbCwg Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5pbXVtIGRpcmVudCBpcyAl aSBieXRlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvcyAt IGRpcmVudF9kYXRhKSwgKGxvbmcpKHBvcyAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSksIChs b25nKShlbmRfb2ZfZGF0YSAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDQU5PTl9NSU5JTVVNX0RJUkVOVF9TSVpFKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGdwX2xvZyAoR1BfTE9HX0VSUk9SLCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYyIsICJ0 cnVuY2F0ZWQgZGlyZWN0b3J5IGVudHJ5IGVuY291bnRlcmVkIik7DQogICAgICAgICAgICAgICAg ICAgICAgICBmcmVlIChkaXJlbnRfZGF0YSk7DQogICAgICAgICAgICAgICAgICAgICAgICBkaXJl bnRfZGF0YSA9IE5VTEw7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1Jf Q09SUlVQVEVEX0RBVEE7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyog Q2hlY2sgZW5kIG9mIHRoaXMgZGlyZW50LCAxMCBpcyB0byBza2lwIG92ZXINCiAgICAgICAgICAg ICAgICAgKiAyICAgIGF0dHJpYnV0ZXMgKyAweDAwDQogICAgICAgICAgICAgICAgICogNCAgICBm aWxlIHNpemUNCiAgICAgICAgICAgICAgICAgKiA0ICAgIGZpbGUgZGF0ZSAoVU5JWCBsb2NhbHRp bWUpDQogICAgICAgICAgICAgICAgICogdG8gd2hlcmUgdGhlIGRpcmVudHJ5IG5hbWUgYmVnaW5z Lg0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGZvciAodGVtcF9jaCA9IGRp cmVudF9uYW1lOyB0ZW1wX2NoIDwgZW5kX29mX2RhdGEgJiYgKnRlbXBfY2ggIT0gMDsNCiAgICAg ICAgICAgICAgICAgICAgIHRlbXBfY2grKykgOw0KDQogICAgICAgICAgICAgICAgaWYgKHRlbXBf Y2ggPT0gZW5kX29mX2RhdGEgfHwgKnRlbXBfY2ggIT0gMCkgew0KICAgICAgICAgICAgICAgICAg ICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJkaXJlbnQgYXQgcG9zaXRpb24gJWxpIG9mICVsaSBoYXMg aW52YWxpZCBuYW1lIGluIGl0LiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi YmFpbGluZyBvdXQgd2l0aCB3aGF0IHdlJ3ZlIGdvdC4iLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKShwb3MgLSBkaXJlbnRfZGF0YSksDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpKGVuZF9vZl9kYXRhIC0gZGlyZW50X2RhdGEpKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICBkaXJlbnRfbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopZGlyZW50X25hbWUpOw0K ICAgICAgICAgICAgICAgIGRpcmVudF9lbnRfc2l6ZSA9IENBTk9OX01JTklNVU1fRElSRU5UX1NJ WkUgKyBkaXJlbnRfbmFtZV9sZW47DQoNCiAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGF0IGxl bmd0aCBvZiBuYW1lIGluIHRoaXMgZGlyZW50IGlzIG5vdCBvZiB1bnJlYXNvbmFibGUgc2l6ZS4N CiAgICAgICAgICAgICAgICAgKiAyNTYgd2FzIHBpY2tlZCBvdXQgb2YgdGhlIGJsdWUNCiAgICAg ICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBpZiAoZGlyZW50X25hbWVfbGVuID4gMjU2 KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfaW5m b19mdW5jOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBuYW1lIGlu IGRpcmVudCBhdCBwb3NpdGlvbiAlbGkgb2YgJWxpIGlzIHRvbyBsb25nLiAoJWxpIGJ5dGVzKS4i DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhaWxpbmcgb3V0IHdpdGggd2hh dCB3ZSd2ZSBnb3QuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyko cG9zIC0gZGlyZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSksDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZGlyZW50X25hbWVfbGVuKTsN CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCg0KICAg ICAgICAgICAgICAgIC8qIDEwIGJ5dGVzIG9mIGF0dHJpYnV0ZXMsIHNpemUgYW5kIGRhdGUsIGEg bmFtZSBhbmQgYSBOVUxMIHRlcm1pbmF0aW5nIGJ5dGUgKi8NCiAgICAgICAgICAgICAgICBHUF9M T0dfREFUQSAoKGNoYXIgKilwb3MsIGRpcmVudF9lbnRfc2l6ZSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImNhbm9uX2ludF9nZXRfaW5mb19mdW5jOiBkaXJlbnQgZGV0ZXJtaW5lZCB0 byBiZSAlbGk9MHglbHggYnl0ZXM6IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpZGlyZW50X2VudF9zaXplLCAobG9uZylkaXJlbnRfZW50X3NpemUpOw0KICAgICAgICAgICAg ICAgIGlmIChkaXJlbnRfbmFtZV9sZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9L LCB0aGlzIGRpcmVjdG9yeSBlbnRyeSBoYXMgYSBuYW1lIGluIGl0LiAqLw0KDQogICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgKGNoYXIqKWRpcmVudF9uYW1lKSkg ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBnb2luZyB0byBmaWxs IG91dCB0aGUgaW5mbyBzdHJ1Y3R1cmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW4gdGhpcyBibG9jayAqLw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdlIHN0YXJ0IHdpdGggbm90aGluZyBhbmQgY29udGludW91c2x5IGFkZCBzdHVmZiAqLw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyA9IEdQX0ZJTEVf SU5GT19OT05FOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZpbGUu bXRpbWUgPSBkaXJlbnRfdGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGluZm8tPmZpbGUubXRpbWUgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9fTVRJTUU7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUpIHsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXRlcm1pbmUgZmlsZSB0eXBlIGJhc2VkIG9u IGZpbGUgbmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRo aXMgc3R1ZmYgb25seSBtYWtlcyBzZW5zZSBmb3IgZmlsZXMsIG5vdCBmb3IgZm9sZGVycw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweSAoaW5mby0+ZmlsZS50eXBlLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lMm1p bWV0eXBlIChmaWxlbmFtZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mIChpbmZvLT5maWxlLnR5cGUpKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9f VFlQRTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXJl bnRfYXR0cnMgJiBDQU5PTl9BVFRSX05PVF9ET1dOTE9BREVEKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmlsZS5zdGF0dXMgPSBHUF9GSUxF X1NUQVRVU19OT1RfRE9XTkxPQURFRDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbmZvLT5maWxlLnN0YXR1cyA9IEdQX0ZJTEVfU1RBVFVTX0RPV05MT0FERUQ7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmlsZS5maWVsZHMgfD0g R1BfRklMRV9JTkZPX1NUQVRVUzsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRoZSBzaXplIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IDIgYW5kIGlzIDQNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBieXRlcyBsb25nLCByZS1vcmRl ciBsaXR0bGUvYmlnIGVuZGlhbiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluZm8tPmZpbGUuc2l6ZSA9IGRpcmVudF9maWxlX3NpemU7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmlsZS5maWVsZHMgfD0gR1BfRklMRV9J TkZPX1NJWkU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBm aWxlIGFjY2VzcyBtb2RlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgoZGlyZW50X2F0dHJzICYgQ0FOT05fQVRUUl9XUklURV9QUk9URUNURUQpID09IDAp DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5m aWxlLnBlcm1pc3Npb25zID0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR1BfRklMRV9QRVJNX1JFQUQgfA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9GSUxFX1BFUk1fREVMRVRF Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZpbGUucGVybWlz c2lvbnMgPSBHUF9GSUxFX1BFUk1fUkVBRDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9fUEVSTUlTU0lPTlM7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBwcmludCBkaXJlbnQgYXMgdGV4dCAqLw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIlJhdyBpbmZvOiBuYW1lPSVzIGlzX2Rpcj0laSwg aXNfZmlsZT0laSwgYXR0cnM9MHgleCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaXJlbnRfbmFtZSwgaXNfZGlyLCBpc19maWxlLCBkaXJlbnRfYXR0cnMpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19maWxlaW5mbyAoaW5mbyk7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUpIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIEFwcGVuZCBkaXJlY3RseSB0byB0aGUgZmlsZXN5c3RlbSBp bnN0ZWFkIG9mIHRvIHRoZSBsaXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIGJlY2F1c2Ugd2UgaGF2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FtZXJhLT5wbC0+bGlzdF9hbGxfZmlsZXMNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlzX2ltYWdlIChm aWxlbmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg IWlzX21vdmllIChmaWxlbmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgIWlzX2F1ZGlvIChmaWxlbmFtZSkpIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBGaW5kIGFzc29jaWF0ZWQgbWFp biBmaWxlIGFuZCBhZGQgaXQgdGhlcmUgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiSWdub3JlZCAlcy8lcyIsIGZv bGRlciwgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICp0aHVtYm5hbWU7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGh1bWJuYW1lID0gY2Fub25faW50X2ZpbGVuYW1lMnRodW1i bmFtZSAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVu YW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICh0aHVtYm5hbWUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBubyB0aHVtYm5haWwgKi8NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNfY3IyICgg ZmlsZW5hbWUgKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBnZXQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHJh dyBmaWxlIGFzIHRoZSB0aHVtYm5haWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyAoYWxtb3N0KSBhIHZh bGlkIEVYSUYgZmlsZS4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5wcmV2aWV3LmZpZWxkcyA9IEdQX0ZJTEVf SU5GT19UWVBFOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby0+cHJldmlldy50eXBlLCBHUF9NSU1FX0VY SUYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9sZGVyIENhbm9uIGNhbXMgaGF2ZSBKUEVHIHRodW1i cyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluZm8tPnByZXZpZXcuZmllbGRzID0gR1BfRklMRV9JTkZPX1RZUEU7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5IChpbmZvLT5wcmV2aWV3LnR5cGUsIEdQX01JTUVfSlBFRyk7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImZpbGUgXCIl c1wiIGhhcyBwcmV2aWV3IG9mIE1JTUUgdHlwZSBcIiVzXCIiLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgaW5mby0+ cHJldmlldy50eXBlICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoJCQkJLyogZm91bmQgLi4uIGxl YXZlIGxvb3AgKi8NCgkJCQlicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvKiBtYWtlICdwb3MnIHBvaW50IHRvIG5l eHQgZGlyZW50IGluIHBhY2tldC4NCiAgICAgICAgICAgICAgICAgKiBmaXJzdCB3ZSBza2lwIDEw IGJ5dGVzIG9mIGF0dHJpYnV0ZSwgc2l6ZSBhbmQgZGF0ZSwNCiAgICAgICAgICAgICAgICAgKiB0 aGVuIHdlIHNraXAgdGhlIG5hbWUgcGx1cyAxIGZvciB0aGUgTlVMTA0KICAgICAgICAgICAgICAg ICAqIHRlcm1pbmF0aW9uIGJ5dGVzLg0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAg ICAgIHBvcyArPSBkaXJlbnRfZW50X3NpemU7DQogICAgICAgIH0NCiAgICAgICAgZnJlZSAoZGly ZW50X2RhdGEpOw0KICAgICAgICBkaXJlbnRfZGF0YSA9IE5VTEw7DQoNCiAgICAgICAgR1BfREVC VUcgKCJFTkQgY2Fub25faW50X2dldF9pbmZvX2Z1bmMoKSBmb2xkZXIgJyVzJyBha2EgJyVzJyBm biAnJXMnIiwgZm9sZGVyLCBjYW5vbmZvbGRlciwgZmlsZW5hbWUpOw0KDQoJcmV0dXJuIEdQX09L Ow0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjoNCiAqIEBkYXRh OiByYXcgSkZJRiBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGh1bWJuYWlsDQogKiBAZGF0YWxlbjog bGVuZ3RoIG9mIEBkYXRhDQogKiBAcmV0ZGF0YTogdG8gcmVjZWl2ZSBleHRyYWN0ZWQgdGh1bWJu YWlsDQogKiBAcmV0ZGF0YWxlbjogbGVuZ3RoIG9mIEByZXRkYXRhDQogKiBAY29udGV4dDogY29u dGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogRXh0cmFjdHMgdGh1bWJuYWlsIGZyb20g SkZJRiBpbWFnZSAoQTcwKSBvciBtb3ZpZSAudGhtIGZpbGUuDQogKiBqdXN0IGV4dHJhY3RlZCB0 aGUgY29kZSBmcm9tIHRoZSBvbGQgI2Nhbm9uX2ludF9nZXRfdGh1bWJuYWlsDQogKg0KICogUmV0 dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQoNCmludA0KY2Fub25faW50X2V4dHJh Y3RfanBlZ190aHVtYiAodW5zaWduZWQgY2hhciAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IGRh dGFsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipyZXRk YXRhLCB1bnNpZ25lZCBpbnQgKnJldGRhdGFsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgaW50IGksIHRodW1i c3RhcnQgPSAwLCB0aHVtYnNpemUgPSAwOw0KDQogICAgICAgIENIRUNLX1BBUkFNX05VTEwgKGRh dGEpOw0KICAgICAgICBDSEVDS19QQVJBTV9OVUxMIChyZXRkYXRhKTsNCg0KICAgICAgICAqcmV0 ZGF0YSA9IE5VTEw7DQogICAgICAgICpyZXRkYXRhbGVuID0gMDsNCg0KICAgICAgICBpZiAoZGF0 YVswXSA9PSBKUEVHX0VTQyB8fCBkYXRhWzFdID09IEpQRUdfQkVHKSB7DQogICAgICAgICAgICAg ICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiB0aGlzIGlzIGEgSkZJ RiBmaWxlLiIpOw0KDQogICAgICAgICAgICAgICAgLyogcGljdHVyZXMgYXJlIEpGSUYgZmlsZXMs IHdlIHNraXAgdGhlIGZpcnN0IDIgYnl0ZXMgKDB4RkYgMHhEOCkNCiAgICAgICAgICAgICAgICAg KiBmaXJzdCBnbyBsb29rIGZvciBzdGFydCBvZiBKUEVHLCB3aGVuIHRoYXQgaXMgZm91bmQgd2Ug c2V0IHRodW1ic3RhcnQNCiAgICAgICAgICAgICAgICAgKiB0byB0aGUgY3VycmVudCBwb3NpdGlv biBhbmQgbmV2ZXIgbG9vayBmb3IgSlBFRyBiZWdpbiBieXRlcyBhZ2Fpbi4NCiAgICAgICAgICAg ICAgICAgKiB3aGVuIHRodW1ic3RhcnQgaXMgc2V0IGxvb2sgZm9yIEpQRUcgZW5kLg0KICAgICAg ICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGZvciAoaSA9IDM7IGkgPCBkYXRhbGVuOyBp KyspDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA9PSBKUEVHX0VTQykgew0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISB0aHVtYnN0YXJ0KSB7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAoZGF0YWxlbiAtIDMp ICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSAr IDFdID09IEpQRUdfQkVHICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoZGF0YVtpICsgM10gPT0gSlBFR19TT1MpIHx8IChkYXRhW2kgKyAzXSA9PSBKUEVH X0E1MF9TT1MpKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRodW1ic3RhcnQgPSBpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKGkgPCAoZGF0YWxlbiAtIDEpICYmIChkYXRhW2kgKyAxXSA9PSBKUEVHX0VORCkpIHsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYnNpemUgPSBpICsg MiAtIHRodW1ic3RhcnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICghIHRodW1ic2l6ZSkgew0KICAgICAg ICAgICAgICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJvciAoY29udGV4dCwgXygiQ291bGQgbm90 IGV4dHJhY3QgSlBFRyAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ0aHVtYm5haWwgZnJvbSBkYXRhOiBObyBiZWdpbm5pbmcvZW5kIikpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9qcGVn X3RodW1iOiBjb3VsZCBub3QgZmluZCBKUEVHICINCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiYmVnaW5uaW5nIChvZmZzZXQgJWkpIG9yIGVuZCAoc2l6ZSAlaSkgaW4gJWkgYnl0 ZXMgb2YgZGF0YSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbiwg dGh1bWJzdGFydCwgdGh1bWJzaXplKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH UF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg ICAgICAvKiBub3cgdGhhdCB3ZSBrbm93IHRoZSBzaXplIG9mIHRoZSB0aHVtYm5haWwgZW1iZWRk ZWQgaW4gdGhlIEpGSUYgZGF0YSwgbWFsbG9jKCkgKi8NCiAgICAgICAgICAgICAgICAqcmV0ZGF0 YSA9IG1hbGxvYyAodGh1bWJzaXplKTsNCiAgICAgICAgICAgICAgICBpZiAoISAqcmV0ZGF0YSkg ew0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9q cGVnX3RodW1iOiBjb3VsZCBub3QgYWxsb2NhdGUgJWkgYnl0ZXMgb2YgbWVtb3J5IiwgdGh1bWJz aXplKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9OT19NRU1PUlk7 DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogYW5kIGNvcHkgKi8NCiAg ICAgICAgICAgICAgICBtZW1jcHkgKCpyZXRkYXRhLCBkYXRhICsgdGh1bWJzdGFydCwgdGh1bWJz aXplKTsNCiAgICAgICAgICAgICAgICAqcmV0ZGF0YWxlbiA9IHRodW1ic2l6ZTsNCiAgICAgICAg fQ0KICAgICAgICBlbHNlIGlmICggIXN0cmNtcCAoIChjaGFyICopZGF0YSwgIklJKiIgKSAmJiBk YXRhWzhdID09ICdDJyAmJiBkYXRhWzldID09ICdSJyApIHsNCg0KICAgICAgICAgICAgICAgIC8q IFRoaXMgaXMgYSB2YWxpZCBFWElGIGZpbGU7IHdlIG5lZWQgdG8gc29ydCB0aHJvdWdoDQogICAg ICAgICAgICAgICAgICogdG8gZ2V0IHRoZSBKUEVHIHRodW1ibmFpbC4gKi8NCiNpZmRlZiBIQVZF X0xJQkVYSUYNCiAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVz LCBiZWNhdXNlIGxpYmV4aWYNCiAgICAgICAgICAgICAgICAgKiBhc3N1bWVzIHRoYXQgdGhlIEVY SUYgaW5mbyBpcyBlbmNhcHN1bGF0ZWQgaW4gYW4NCiAgICAgICAgICAgICAgICAgKiBBUFAxIG1h cmtlciBpbiBhIEpGSUYgZmlsZS4gU28gd2UgcGFyc2UgZW5vdWdoIHRvDQogICAgICAgICAgICAg ICAgICogZ2V0IHRoZSB0aHVtYm5haWwsIHdoaWNoIGlzIGZvdW5kIHZpYSBJRkQgMS4gKi8NCiAg ICAgICAgICAgICAgICAvKiBGSVhNRTogV2UgbmVlZCB0byBleHRyYWN0IHRoZSBFWElGIElGRCBh bmQgY29weSBpdA0KICAgICAgICAgICAgICAgICAqIGludG8gdGhlIGltYWdlIHdlIHJldHVybiwg YXMgaGlnaGVyIGxldmVscyBvZg0KICAgICAgICAgICAgICAgICAqIHNvZnR3YXJlIGFzc3VtZSB0 aGF0IHRoZSBFWElGIGlzIGluY2x1ZGVkIGluIHRoZQ0KICAgICAgICAgICAgICAgICAqIEpQRUcg dGh1bWJuYWlsIGFuZCBqdXN0IGZldGNoIHRoZSB0aHVtYm5haWwgdG8gZ2V0DQogICAgICAgICAg ICAgICAgICogdGhlIEVYSUYgZGF0YS4gKi8NCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg bl90YWdzOw0KICAgICAgICAgICAgICAgIGludCBpZmQwX29mZnNldCwgaWZkMV9vZmZzZXQ7DQog ICAgICAgICAgICAgICAgaW50IGpwZWdfb2Zmc2V0ID0gLTEsIGpwZWdfc2l6ZSA9IC0xOw0KDQog ICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiY2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjog dGhpcyBpcyBmcm9tIGEgQ1IyIGZpbGUuIik7DQogICAgICAgICAgICAgICAgZHVtcF9oZXggKCBz dGRlcnIsIGRhdGEsIDMyICk7DQogICAgICAgICAgICAgICAgaWZkMF9vZmZzZXQgPSBleGlmX2dl dF9sb25nICggZGF0YSs0LCBFWElGX0JZVEVfT1JERVJfSU5URUwgKTsNCiAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiBJRkQgMCBhdCAweCV4 IiwgaWZkMF9vZmZzZXQgKTsNCiAgICAgICAgICAgICAgICBuX3RhZ3MgPSBleGlmX2dldF9zaG9y dCAoIGRhdGEraWZkMF9vZmZzZXQsIEVYSUZfQllURV9PUkRFUl9JTlRFTCApOw0KICAgICAgICAg ICAgICAgIEdQX0RFQlVHICggImNhbm9uX2ludF9leHRyYWN0X2pwZWdfdGh1bWI6ICVkIHRhZ3Mg aW4gSUZEIDAiLCBuX3RhZ3MgKTsNCiAgICAgICAgICAgICAgICBpZmQxX29mZnNldCA9IGV4aWZf Z2V0X2xvbmcgKCBkYXRhICsgaWZkMF9vZmZzZXQgKyAyICsgMTIqbl90YWdzLCBFWElGX0JZVEVf T1JERVJfSU5URUwgKTsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0 cmFjdF9qcGVnX3RodW1iOiBJRkQgMSBhdCAweCV4IiwgaWZkMV9vZmZzZXQgKTsNCiAgICAgICAg ICAgICAgICBuX3RhZ3MgPSBleGlmX2dldF9zaG9ydCAoIGRhdGEraWZkMV9vZmZzZXQsIEVYSUZf QllURV9PUkRFUl9JTlRFTCApOw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImNhbm9uX2lu dF9leHRyYWN0X2pwZWdfdGh1bWI6ICVkIHRhZ3MgaW4gSUZEIDEiLCBuX3RhZ3MgKTsNCg0KICAg ICAgICAgICAgICAgIC8qIE5vdyBnbyB0aHJvdWdoIElGRCAxIGFuZCBmaW5kIHRoZSB0d28gdGFn cyB3ZSBuZWVkLiAqLw0KICAgICAgICAgICAgICAgIGZvciAoIGk9MDsgaTxuX3RhZ3M7IGkrKyAp IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJ5ID0gZGF0YStp ZmQxX29mZnNldCArIDIgKyAxMippOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdGFn ID0gZXhpZl9nZXRfc2hvcnQgKCBlbnRyeSwgRVhJRl9CWVRFX09SREVSX0lOVEVMICk7DQogICAg ICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3Ro dW1iOiB0YWcgJWQgaXMgJXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp LCBleGlmX3RhZ19nZXRfbmFtZSAoIHRhZyApICk7DQogICAgICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKCB0YWcgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVYSUZfVEFHX0pQ RUdfSU5URVJDSEFOR0VfRk9STUFUX0xFTkdUSDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAganBlZ19zaXplID0gZXhpZl9nZXRfbG9uZyAoIGVudHJ5ICsgOCwgRVhJRl9CWVRFX09S REVSX0lOVEVMICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgg ImNhbm9uX2ludF9leHRyYWN0X2pwZWdfdGh1bWI6IEpQRUcgbGVuZ3RoIGlzICVkIiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3NpemUgKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIEVYSUZfVEFHX0pQRUdfSU5URVJDSEFOR0VfRk9STUFUOg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqcGVnX29mZnNldCA9IGV4aWZfZ2V0X2xvbmcgKCBlbnRyeSArIDgs IEVYSUZfQllURV9PUkRFUl9JTlRFTCApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiBKUEVHIG9mZnNldCBp cyAweCV4IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVn X29mZnNldCApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICBpZiAoIGpwZWdfc2l6ZSA8IDAgfHwganBlZ19vZmZzZXQgPCAwICkg ew0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiY2Fub25faW50X2V4dHJhY3Rf anBlZ190aHVtYjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2lu ZyBhIHJlcXVpcmVkIHRhZzogbGVuZ3RoPSVkLCBvZmZzZXQ9JWQiLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqcGVnX3NpemUsIGpwZWdfb2Zmc2V0ICk7DQogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgICAg ICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogTm93IHdlIHNob3VsZCBoYXZlIGVub3VnaCB0 byBleHRyYWN0IHRoZSB0aHVtYm5haWwuICovDQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCAi Y2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjogJWQgYnl0ZXMgb2YgSlBFRyBpbWFnZSIsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19zaXplICk7DQogICAgICAgICAgICAgICAg KnJldGRhdGFsZW4gPSBqcGVnX3NpemU7DQogICAgICAgICAgICAgICAgKnJldGRhdGEgPSBtYWxs b2MgKCAqcmV0ZGF0YWxlbiApOw0KICAgICAgICAgICAgICAgIG1lbWNweSAoICpyZXRkYXRhLCBk YXRhICsganBlZ19vZmZzZXQsICpyZXRkYXRhbGVuICk7DQogICAgICAgICAgICAgICAgZHVtcF9o ZXggKCBzdGRlcnIsICpyZXRkYXRhLCAzMiApOw0KI2Vsc2UgLyogSEFWRV9MSUJFWElGICovDQog ICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiY2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjog Q2FuJ3QgZ3JvayB0aHVtYm5haWwgZnJvbSBhIENSMiBmaWxlIHdpdGhvdXQgbGliZXhpZiIpOw0K ICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9OT1RfU1VQUE9SVEVEOw0KI2VuZGlmIC8q IEhBVkVfTElCRVhJRiAqLw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAg ICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsIF8oIkNvdWxkIG5vdCBleHRyYWN0IEpQRUcg Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRodW1ibmFp bCBmcm9tIGRhdGE6IERhdGEgaXMgbm90IEpGSUYiKSk7DQogICAgICAgICAgICAgICAgR1BfREVC VUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiBkYXRhIGlzIG5vdCBKRklGLCBjYW5u b3QgZXh0cmFjdCB0aHVtYm5haWwiKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1Jf Q09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoN Ci8qDQogKiBMb2NhbCBWYXJpYWJsZXM6DQogKiBjLWZpbGUtc3R5bGU6ImxpbnV4Ig0KICogaW5k ZW50LXRhYnMtbW9kZTpuaWwNCiAqIEVuZDoNCiAqLw0K --_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Gphoto-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/gphoto-devel --_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_--