R2l0IGNvbW1pdCA0YTgxOTU3Mjk0MjdjYzQ1ZjgyMzZlZWYwOGY0M2FhOWUwNGY1ZTg5IGJ5IERt aXRyeSBLYXpha292LCBvbiBiZWhhbGYgb2YgTC4gRS4gU2Vnb3ZpYS4KQ29tbWl0dGVkIG9uIDA0 LzA5LzIwMjEgYXQgMTM6MDguClB1c2hlZCBieSBka2F6YWtvdiBpbnRvIGJyYW5jaCAnbWFzdGVy Jy4KClJlZmFjdG9yIG1ldGFkYXRhIGJhY2tlbmRzIGludG8gdGhlaXIgb3duIHBsdWdpbnMKClRo aXMgY29tbWl0IHR1cm5zIHRoZSBFeGlmLCBJUFRDLCBhbmQgWE1QIGJhY2tlbmRzIGludG8gbG9h ZGFibGUKS1BsdWdpbnMuCgpDQ01BSUw6IGtpbWFnZXNob3BAa2RlLm9yZwoKTSAgKzIgICAgLTEg ICAgbGlicy9tZXRhZGF0YS9DTWFrZUxpc3RzLnR4dApBICArNDIgICAtMCAgICBsaWJzL21ldGFk YXRhL2tpc19tZXRhX2RhdGFfYmFja2VuZF9yZWdpc3RyeS5jcHAgICAgIFtMaWNlbnNlOiBMR1BM KHYyLjErKV0KQSAgKzIwICAgLTAgICAgbGlicy9tZXRhZGF0YS9raXNfbWV0YV9kYXRhX2JhY2tl bmRfcmVnaXN0cnkuaCAgICAgW0xpY2Vuc2U6IExHUEwodjIuMSspXQpEICArMCAgICAtMzMgICBs aWJzL21ldGFkYXRhL2tpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5jYwpNICArMTEgICAtMjkgICBs aWJzL21ldGFkYXRhL2tpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5oCk0gICsxICAgIC02ICAgIGxp YnMvdWkvQ01ha2VMaXN0cy50eHQKTSAgKzIgICAgLTEzICAgbGlicy91aS9LaXNBcHBsaWNhdGlv bi5jcHAKTSAgKzAgICAgLTEgICAgbGlicy91aS9LaXNBcHBsaWNhdGlvbi5oCk0gICsxNSAgIC0x NSAgIGxpYnMvdWkva2lzX3BuZ19jb252ZXJ0ZXIuY3BwCkQgICswICAgIC0xICAgIGxpYnMvdWkv a2lzZXhpdjIvLmtyYXp5CkQgICswICAgIC0zMiAgIGxpYnMvdWkva2lzZXhpdjIva2lzX2V4aXYy LmgKTSAgKzAgICAgLTggICAgbGlicy91aS90ZXN0cy9DTWFrZUxpc3RzLnR4dApNICArMSAgICAt MCAgICBwbHVnaW5zL0NNYWtlTGlzdHMudHh0Ck0gICs3ICAgIC03ICAgIHBsdWdpbnMvaW1wZXgv aGVpZi9IZWlmRXhwb3J0LmNwcApNICArOSAgICAtOCAgICBwbHVnaW5zL2ltcGV4L2hlaWYvSGVp ZkltcG9ydC5jcHAKTSAgKzE1ICAgLTE1ICAgcGx1Z2lucy9pbXBleC9qcGVnL2tpc19qcGVnX2Nv bnZlcnRlci5jYwpNICArMiAgICAtMiAgICBwbHVnaW5zL2ltcGV4L2pwZWcvdGVzdHMvQ01ha2VM aXN0cy50eHQKTSAgKzMgICAgLTMgICAgcGx1Z2lucy9pbXBleC9qcGVnL3Rlc3RzL2tpc19qcGVn X3Rlc3QuY3BwCk0gICsyMiAgIC0yMyAgIHBsdWdpbnMvaW1wZXgvbGlia3JhL2tpc19rcmFfbG9h ZF92aXNpdG9yLmNwcApNICArMTMgICAtMTMgICBwbHVnaW5zL2ltcGV4L2xpYmtyYS9raXNfa3Jh X3NhdmVfdmlzaXRvci5jcHAKTSAgKzMgICAgLTQgICAgcGx1Z2lucy9pbXBleC90aWZmL3Rlc3Rz L2tpc190aWZmX3Rlc3QuY3BwCkEgICs3ICAgIC0wICAgIHBsdWdpbnMvbWV0YWRhdGEvQ01ha2VM aXN0cy50eHQKUiAgKzQwICAgLTQ1ICAgcGx1Z2lucy9tZXRhZGF0YS9jb21tb24va2lzX2V4aXYy X2NvbW1vbi5oIFtmcm9tOiBsaWJzL3VpL2tpc2V4aXYyL2tpc19leGl2Mi5jcHAgLSAwODElIHNp bWlsYXJpdHldClIgICswICAgIC0wICAgIHBsdWdpbnMvbWV0YWRhdGEvY29tbW9uL2tpc19leGl2 Ml9jb25zdGFudHMuaCBbZnJvbTogbGlicy91aS9raXNleGl2Mi9raXNfZXhpdjJfY29uc3RhbnRz LmggLSAxMDAlIHNpbWlsYXJpdHldCkEgICsxNyAgIC0wICAgIHBsdWdpbnMvbWV0YWRhdGEvZXhp Zi9DTWFrZUxpc3RzLnR4dApSICArMTE1ICAtMTA4ICBwbHVnaW5zL21ldGFkYXRhL2V4aWYva2lz X2V4aWZfaW8uY3BwIFtmcm9tOiBsaWJzL3VpL2tpc2V4aXYyL2tpc19leGlmX2lvLmNwcCAtIDA3 NiUgc2ltaWxhcml0eV0KUiAgKzE3ICAgLTEyICAgcGx1Z2lucy9tZXRhZGF0YS9leGlmL2tpc19l eGlmX2lvLmggW2Zyb206IGxpYnMvdWkva2lzZXhpdjIva2lzX2V4aWZfaW8uaCAtIDA1NCUgc2lt aWxhcml0eV0KQSAgKzI5ICAgLTAgICAgcGx1Z2lucy9tZXRhZGF0YS9leGlmL2tpc19leGlmX3Bs dWdpbi5jcHAgICAgIFtMaWNlbnNlOiBHUEwodjIuMCspXQpBICArMjEgICAtMCAgICBwbHVnaW5z L21ldGFkYXRhL2V4aWYva2lzX2V4aWZfcGx1Z2luLmggICAgIFtMaWNlbnNlOiBHUEwodjIuMCsp XQpBICArOSAgICAtMCAgICBwbHVnaW5zL21ldGFkYXRhL2V4aWYva3JpdGFleGlmLmpzb24KQSAg KzE3ICAgLTAgICAgcGx1Z2lucy9tZXRhZGF0YS9pcHRjL0NNYWtlTGlzdHMudHh0ClIgICs1OSAg IC01OCAgIHBsdWdpbnMvbWV0YWRhdGEvaXB0Yy9raXNfaXB0Y19pby5jcHAgW2Zyb206IGxpYnMv dWkva2lzZXhpdjIva2lzX2lwdGNfaW8uY3BwIC0gMDUxJSBzaW1pbGFyaXR5XQpSICArMjAgICAt MTIgICBwbHVnaW5zL21ldGFkYXRhL2lwdGMva2lzX2lwdGNfaW8uaCBbZnJvbTogbGlicy91aS9r aXNleGl2Mi9raXNfaXB0Y19pby5oIC0gMDU2JSBzaW1pbGFyaXR5XQpBICArMjkgICAtMCAgICBw bHVnaW5zL21ldGFkYXRhL2lwdGMva2lzX2lwdGNfcGx1Z2luLmNwcCAgICAgW0xpY2Vuc2U6IEdQ TCh2Mi4wKyldCkEgICsyMSAgIC0wICAgIHBsdWdpbnMvbWV0YWRhdGEvaXB0Yy9raXNfaXB0Y19w bHVnaW4uaCAgICAgW0xpY2Vuc2U6IEdQTCh2Mi4wKyldCkEgICs3ICAgIC0wICAgIHBsdWdpbnMv bWV0YWRhdGEvaXB0Yy9rcml0YWlwdGMuanNvbgpBICArMjEgICAtMCAgICBwbHVnaW5zL21ldGFk YXRhL3Rlc3RzL0NNYWtlTGlzdHMudHh0ClIgICstICAgIC0tICAgIHBsdWdpbnMvbWV0YWRhdGEv dGVzdHMvZGF0YS9tZXRhZGF0YS9ocGltMzIzOC5leHYgW2Zyb206IGxpYnMvdWkvdGVzdHMvZGF0 YS9tZXRhZGF0YS9ocGltMzIzOC5leHYgLSAxMDAlIHNpbWlsYXJpdHldClIgICszNCAgIC0yOSAg IHBsdWdpbnMvbWV0YWRhdGEvdGVzdHMva2lzX2V4aWZfdGVzdC5jcHAgW2Zyb206IGxpYnMvdWkv dGVzdHMva2lzX2V4aXYyX3Rlc3QuY3BwIC0gMDY1JSBzaW1pbGFyaXR5XQpSICArMiAgICAtMSAg ICBwbHVnaW5zL21ldGFkYXRhL3Rlc3RzL2tpc19leGlmX3Rlc3QuaCBbZnJvbTogbGlicy91aS90 ZXN0cy9raXNfZXhpdjJfdGVzdC5oIC0gMDczJSBzaW1pbGFyaXR5XQpBICArMTcgICAtMCAgICBw bHVnaW5zL21ldGFkYXRhL3htcC9DTWFrZUxpc3RzLnR4dApSICArNzIgICAtNTYgICBwbHVnaW5z L21ldGFkYXRhL3htcC9raXNfeG1wX2lvLmNwcCBbZnJvbTogbGlicy91aS9raXNleGl2Mi9raXNf eG1wX2lvLmNwcCAtIDA3NSUgc2ltaWxhcml0eV0KUiAgKzE3ICAgLTExICAgcGx1Z2lucy9tZXRh ZGF0YS94bXAva2lzX3htcF9pby5oIFtmcm9tOiBsaWJzL3VpL2tpc2V4aXYyL2tpc194bXBfaW8u aCAtIDA1NSUgc2ltaWxhcml0eV0KQSAgKzI5ICAgLTAgICAgcGx1Z2lucy9tZXRhZGF0YS94bXAv a2lzX3htcF9wbHVnaW4uY3BwICAgICBbTGljZW5zZTogR1BMKHYyLjArKV0KQSAgKzIxICAgLTAg ICAgcGx1Z2lucy9tZXRhZGF0YS94bXAva2lzX3htcF9wbHVnaW4uaCAgICAgW0xpY2Vuc2U6IEdQ TCh2Mi4wKyldCkEgICs5ICAgIC0wICAgIHBsdWdpbnMvbWV0YWRhdGEveG1wL2tyaXRheG1wLmpz b24KCmh0dHBzOi8vaW52ZW50LmtkZS5vcmcvZ3JhcGhpY3Mva3JpdGEvY29tbWl0LzRhODE5NTcy OTQyN2NjNDVmODIzNmVlZjA4ZjQzYWE5ZTA0ZjVlODkKCmRpZmYgLS1naXQgYS9saWJzL21ldGFk YXRhL0NNYWtlTGlzdHMudHh0IGIvbGlicy9tZXRhZGF0YS9DTWFrZUxpc3RzLnR4dAppbmRleCBh MGNjY2M0OGI4Li45NTJlZjIyNDY2IDEwMDY0NAotLS0gYS9saWJzL21ldGFkYXRhL0NNYWtlTGlz dHMudHh0CisrKyBiL2xpYnMvbWV0YWRhdGEvQ01ha2VMaXN0cy50eHQKQEAgLTQsNyArNCw2IEBA IHNldChrcml0YW1ldGFkYXRhX0xJQl9TUkNTCiAgICAga2lzX21ldGFfZGF0YV9maWx0ZXJfcC5j YwogICAgIGtpc19tZXRhX2RhdGFfZmlsdGVyX3JlZ2lzdHJ5LmNjCiAgICAga2lzX21ldGFfZGF0 YV9maWx0ZXJfcmVnaXN0cnlfbW9kZWwuY2MKLSAgICBraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQu Y2MKICAgICBraXNfbWV0YV9kYXRhX21lcmdlX3N0cmF0ZWd5LmNjCiAgICAga2lzX21ldGFfZGF0 YV9tZXJnZV9zdHJhdGVneV9wLmNjCiAgICAga2lzX21ldGFfZGF0YV9tZXJnZV9zdHJhdGVneV9y ZWdpc3RyeS5jYwpAQCAtMTUsNiArMTQsOCBAQCBzZXQoa3JpdGFtZXRhZGF0YV9MSUJfU1JDUwog ICAgIGtpc19tZXRhX2RhdGFfdHlwZV9pbmZvLmNjCiAgICAga2lzX21ldGFfZGF0YV92YWxpZGF0 b3IuY2MKICAgICBraXNfbWV0YV9kYXRhX3ZhbHVlLmNjCisKKyAgICBraXNfbWV0YV9kYXRhX2Jh Y2tlbmRfcmVnaXN0cnkuY3BwCiApCiAKIGFkZF9saWJyYXJ5KGtyaXRhbWV0YWRhdGEgU0hBUkVE ICR7a3JpdGFtZXRhZGF0YV9MSUJfU1JDU30gKQpkaWZmIC0tZ2l0IGEvbGlicy9tZXRhZGF0YS9r aXNfbWV0YV9kYXRhX2JhY2tlbmRfcmVnaXN0cnkuY3BwIGIvbGlicy9tZXRhZGF0YS9raXNfbWV0 YV9kYXRhX2JhY2tlbmRfcmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjA4MDhhNGQyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL21ldGFkYXRhL2tp c19tZXRhX2RhdGFfYmFja2VuZF9yZWdpc3RyeS5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAq ICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA3IEN5cmlsbGUgQmVyZ2VyIDxjYmVyZ2VyQGNi ZXJnZXIubmV0PgorICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgTC4gRS4gU2Vnb3Zp YSA8YW15QGFteXNwYXJrLm1lPgorICoKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQ TC0yLjEtb3ItbGF0ZXIKKyAqLworCisjaW5jbHVkZSAia2lzX21ldGFfZGF0YV9iYWNrZW5kX3Jl Z2lzdHJ5LmgiCisKKyNpbmNsdWRlIDxRR2xvYmFsU3RhdGljPgorCisjaW5jbHVkZSA8S29QbHVn aW5Mb2FkZXIuaD4KKworI2luY2x1ZGUgPGtpc19kZWJ1Zy5oPgorCitRX0dMT0JBTF9TVEFUSUMo S2lzTWV0YWRhdGFCYWNrZW5kUmVnaXN0cnksIHNfaW5zdGFuY2UpCisKK0tpc01ldGFkYXRhQmFj a2VuZFJlZ2lzdHJ5OjpLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeSgpCit7Cit9CisKK0tpc01l dGFkYXRhQmFja2VuZFJlZ2lzdHJ5Ojp+S2lzTWV0YWRhdGFCYWNrZW5kUmVnaXN0cnkoKQorewor ICAgIFFfRk9SRUFDSCAoY29uc3QgUVN0cmluZyAmaWQsIGtleXMoKSkgeworICAgICAgICBkZWxl dGUgZ2V0KGlkKTsKKyAgICB9CisgICAgZGJnUmVnaXN0cnkgPDwgIkRlbGV0aW5nIEtpc01ldGFk YXRhQmFja2VuZFJlZ2lzdHJ5IjsKK30KKwordm9pZCBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3Ry eTo6aW5pdCgpCit7CisgICAgS29QbHVnaW5Mb2FkZXI6Omluc3RhbmNlKCktPmxvYWQoIktyaXRh L01ldGFkYXRhIiwgIihUeXBlID09ICdTZXJ2aWNlJykgYW5kIChbWC1Lcml0YS1WZXJzaW9uXSA9 PSAyOCkiKTsKK30KKworS2lzTWV0YWRhdGFCYWNrZW5kUmVnaXN0cnkgKktpc01ldGFkYXRhQmFj a2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgaWYgKCFzX2luc3RhbmNlLmV4aXN0cygp KSB7CisgICAgICAgIGRiZ1JlZ2lzdHJ5IDw8ICJpbml0aWFsaXppbmcgS2lzTWV0YWRhdGFCYWNr ZW5kUmVnaXN0cnkiOworICAgICAgICBzX2luc3RhbmNlLT5pbml0KCk7CisgICAgfQorICAgIHJl dHVybiBzX2luc3RhbmNlOworfQpkaWZmIC0tZ2l0IGEvbGlicy9tZXRhZGF0YS9raXNfbWV0YV9k YXRhX2JhY2tlbmRfcmVnaXN0cnkuaCBiL2xpYnMvbWV0YWRhdGEva2lzX21ldGFfZGF0YV9iYWNr ZW5kX3JlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzUw ZmNiOGIyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvbWV0YWRhdGEva2lzX21ldGFfZGF0YV9i YWNrZW5kX3JlZ2lzdHJ5LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqICBTUERYLUZpbGVDb3B5 cmlnaHRUZXh0OiAyMDA3IEN5cmlsbGUgQmVyZ2VyIDxjYmVyZ2VyQGNiZXJnZXIubmV0PgorICog IFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgTC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJr Lm1lPgorICoKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEtb3ItbGF0ZXIK KyAqLworCisjaW5jbHVkZSA8S29HZW5lcmljUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxraXNfbWV0 YV9kYXRhX2lvX2JhY2tlbmQuaD4KKworI2luY2x1ZGUgImtyaXRhbWV0YWRhdGFfZXhwb3J0Lmgi CisKK2NsYXNzIEtSSVRBTUVUQURBVEFfRVhQT1JUIEtpc01ldGFkYXRhQmFja2VuZFJlZ2lzdHJ5 IDogcHVibGljIEtvR2VuZXJpY1JlZ2lzdHJ5PEtpc01ldGFEYXRhOjpJT0JhY2tlbmQgKj4KK3sK K3B1YmxpYzoKKyAgICBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeSgpOworICAgIH5LaXNNZXRh ZGF0YUJhY2tlbmRSZWdpc3RyeSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdCgpOworICAgIHN0 YXRpYyBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeSAqaW5zdGFuY2UoKTsKK307CmRpZmYgLS1n aXQgYS9saWJzL21ldGFkYXRhL2tpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5jYyBiL2xpYnMvbWV0 YWRhdGEva2lzX21ldGFfZGF0YV9pb19iYWNrZW5kLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA4OGE1MGYwNGNlLi4wMDAwMDAwMDAwCi0tLSBhL2xpYnMvbWV0YWRhdGEva2lzX21l dGFfZGF0YV9pb19iYWNrZW5kLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoK LSAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA3IEN5cmlsbGUgQmVyZ2VyIDxjYmVyZ2Vy QGNiZXJnZXIubmV0PgotICoKLSAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEt b3ItbGF0ZXIKLSAqLwotCi0jaW5jbHVkZSAia2lzX21ldGFfZGF0YV9pb19iYWNrZW5kLmgiCi0K LXVzaW5nIG5hbWVzcGFjZSBLaXNNZXRhRGF0YTsKLQotI2luY2x1ZGUgPFFHbG9iYWxTdGF0aWM+ Ci0jaW5jbHVkZSAia2lzX2RlYnVnLmgiCi0KLVFfR0xPQkFMX1NUQVRJQyhJT0JhY2tlbmRSZWdp c3RyeSwgc19pbnN0YW5jZSkKLQotCi1JT0JhY2tlbmRSZWdpc3RyeTo6SU9CYWNrZW5kUmVnaXN0 cnkoKQotewotfQotCi1JT0JhY2tlbmRSZWdpc3RyeTo6fklPQmFja2VuZFJlZ2lzdHJ5KCkKLXsK LSAgICBRX0ZPUkVBQ0ggKGNvbnN0IFFTdHJpbmcgJmlkLCBrZXlzKCkpIHsKLSAgICAgICAgZGVs ZXRlIGdldChpZCk7Ci0gICAgfSAgICAKLX0KLQotCi1JT0JhY2tlbmRSZWdpc3RyeSogSU9CYWNr ZW5kUmVnaXN0cnk6Omluc3RhbmNlKCkKLXsKLSAgICAvLyBYWFg6IGxvYWQgYmFja2VuZCBwbHVn aW5zCi0gICAgcmV0dXJuIHNfaW5zdGFuY2U7Ci19CmRpZmYgLS1naXQgYS9saWJzL21ldGFkYXRh L2tpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5oIGIvbGlicy9tZXRhZGF0YS9raXNfbWV0YV9kYXRh X2lvX2JhY2tlbmQuaAppbmRleCAzZGU5ZTIxZjY3Li41MmFmNzU0Y2QxIDEwMDY0NAotLS0gYS9s aWJzL21ldGFkYXRhL2tpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5oCisrKyBiL2xpYnMvbWV0YWRh dGEva2lzX21ldGFfZGF0YV9pb19iYWNrZW5kLmgKQEAgLTEsMTcgKzEsMTcgQEAKIC8qCi0qICBT UERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA3IEN5cmlsbGUgQmVyZ2VyIDxjYmVyZ2VyQGNiZXJn ZXIubmV0PgotKgotKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xLW9yLWxhdGVy Ci0qLworICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDcgQ3lyaWxsZSBCZXJnZXIgPGNi ZXJnZXJAY2Jlcmdlci5uZXQ+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSBMLiBF LiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CisgKgorICogIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBMR1BMLTIuMS1vci1sYXRlcgorICovCiAKICNpZm5kZWYgX0tJU19NRVRBX0RBVEFfSU9f QkFDS0VORF9IXwogI2RlZmluZSBfS0lTX01FVEFfREFUQV9JT19CQUNLRU5EX0hfCiAKICNpbmNs dWRlIDxrcml0YW1ldGFkYXRhX2V4cG9ydC5oPgogCi0jaW5jbHVkZSA8S29HZW5lcmljUmVnaXN0 cnkuaD4KLQogY2xhc3MgUUlPRGV2aWNlOworY2xhc3MgUVN0cmluZzsKIAogbmFtZXNwYWNlIEtp c01ldGFEYXRhCiB7CkBAIC0yNCwxNSArMjQsMTEgQEAgY2xhc3MgU3RvcmU7CiBjbGFzcyBLUklU QU1FVEFEQVRBX0VYUE9SVCBJT0JhY2tlbmQKIHsKIHB1YmxpYzoKLQogICAgIC8qKgogICAgICAq IFRlbGwgd2hldGhlciB0aGUgYmFja2VuZCBpbnB1dC9vdXRwdXQgZnJvbS90byBiaW5hcnkgZGF0 YQogICAgICAqIG9yIHRleHQgKFhNTCBvciBSREYpIGRhdGEuCiAgICAgICovCi0gICAgZW51bSBC YWNrZW5kVHlwZSB7Ci0gICAgICAgIEJpbmFyeSwKLSAgICAgICAgVGV4dAotICAgIH07CisgICAg ZW51bSBCYWNrZW5kVHlwZSB7IEJpbmFyeSwgVGV4dCB9OwogCiAgICAgZW51bSBIZWFkZXJUeXBl IHsKICAgICAgICAgTm9IZWFkZXIsIC8vLzwgRG9uJ3QgYXBwZW5kIGFueSBoZWFkZXIKQEAgLTQw LDggKzM2LDcgQEAgcHVibGljOgogICAgIH07CiAKIHB1YmxpYzoKLQotICAgIHZpcnR1YWwgfklP QmFja2VuZCgpIHt9OworICAgIHZpcnR1YWwgfklPQmFja2VuZCgpe307CiAKICAgICB2aXJ0dWFs IFFTdHJpbmcgaWQoKSBjb25zdCA9IDA7CiAKQEAgLTY0LDE0ICs1OSwxNCBAQCBwdWJsaWM6CiAg ICAgICogICAgICAgICAgICAgICAgICAgd2hpY2ggdHlwZSBvZiBoZWFkZXIKICAgICAgKiBAcmV0 dXJuIHRydWUgaWYgdGhlIHNhdmUgd2FzIHN1Y2Nlc3NmdWwgKFhYWDogYWN0dWFsbHksIGFsbCBi YWNrZW5kcyBhbHdheXMgcmV0dXJuIHRydWUuLi4pCiAgICAgICovCi0gICAgdmlydHVhbCBib29s IHNhdmVUbyhTdG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9EZXZpY2UsIEhlYWRlclR5cGUgaGVh ZGVyVHlwZSA9IE5vSGVhZGVyKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNhdmVUbyhT dG9yZSAqc3RvcmUsIFFJT0RldmljZSAqaW9EZXZpY2UsIEhlYWRlclR5cGUgaGVhZGVyVHlwZSA9 IE5vSGVhZGVyKSBjb25zdCA9IDA7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0gc3RvcmUgdGhl IGxpc3Qgb2YgbWV0YWRhdGEKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBiYWNrZW5kIGlz IGNhcGFibGUgb2Ygc2F2aW5nIGFsbCB0aGUgbWV0YWRhdGEKICAgICAgKiBvZiB0aGUgc3RvcmUK ICAgICAgKi8KLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2F2ZUFsbEVudHJpZXMoU3RvcmUqIHN0b3Jl KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGNhblNhdmVBbGxFbnRyaWVzKFN0b3JlICpz dG9yZSkgY29uc3QgPSAwOwogCiAgICAgLyoqCiAgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMg YmFja2VuZCBzdXBwb3J0IGxvYWRpbmcKQEAgLTgzLDIxICs3OCw4IEBAIHB1YmxpYzoKICAgICAg KiBAcGFyYW0gaW9EZXZpY2UgdGhlIGRldmljZSBmcm9tIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxs IGJlIGxvYWRlZAogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbG9hZCB3YXMgc3VjY2Vzc2Z1 bAogICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBsb2FkRnJvbShTdG9yZSogc3RvcmUsIFFJT0Rl dmljZSogaW9EZXZpY2UpIGNvbnN0ID0gMDsKLX07Ci0KLWNsYXNzIEtSSVRBTUVUQURBVEFfRVhQ T1JUIElPQmFja2VuZFJlZ2lzdHJ5IDogcHVibGljIEtvR2VuZXJpY1JlZ2lzdHJ5PElPQmFja2Vu ZCo+Ci17Ci0KLXB1YmxpYzoKLQotICAgIElPQmFja2VuZFJlZ2lzdHJ5KCk7Ci0gICAgfklPQmFj a2VuZFJlZ2lzdHJ5KCkgb3ZlcnJpZGU7Ci0gICAgc3RhdGljIElPQmFja2VuZFJlZ2lzdHJ5KiBp bnN0YW5jZSgpOwotCisgICAgdmlydHVhbCBib29sIGxvYWRGcm9tKFN0b3JlICpzdG9yZSwgUUlP RGV2aWNlICppb0RldmljZSkgY29uc3QgPSAwOwogfTsKLQogfQogCi0KICNlbmRpZgpkaWZmIC0t Z2l0IGEvbGlicy91aS9DTWFrZUxpc3RzLnR4dCBiL2xpYnMvdWkvQ01ha2VMaXN0cy50eHQKaW5k ZXggNzcwZWFiM2E5OS4uNTE4MDA3NmUxMSAxMDA2NDQKLS0tIGEvbGlicy91aS9DTWFrZUxpc3Rz LnR4dAorKysgYi9saWJzL3VpL0NNYWtlTGlzdHMudHh0CkBAIC0xNjcsMTEgKzE2Nyw2IEBAIHNl dChrcml0YXVpX0xJQl9TUkNTCiAgICAgS2lzQ2hhbmdlQ2xvbmVMYXllcnNDb21tYW5kLmNwcAog ICAgIEtpc1VpRm9udC5jcHAKIAotICAgIGtpc2V4aXYyL2tpc19leGlmX2lvLmNwcAotICAgIGtp c2V4aXYyL2tpc19leGl2Mi5jcHAKLSAgICBraXNleGl2Mi9raXNfaXB0Y19pby5jcHAKLSAgICBr aXNleGl2Mi9raXNfeG1wX2lvLmNwcAotCiAgICAgb3BlbmdsL2tpc19vcGVuZ2wuY3BwCiAgICAg b3BlbmdsL2tpc19vcGVuZ2xfY2FudmFzMi5jcHAKICAgICBvcGVuZ2wva2lzX29wZW5nbF9jYW52 YXNfZGVidWdnZXIuY3BwCkBAIC02NDgsNyArNjQzLDcgQEAgYWRkX2xpYnJhcnkoa3JpdGF1aSBT SEFSRUQgJHtrcml0YXVpX0hFQURFUlNfTU9DfSAke2tyaXRhdWlfTElCX1NSQ1N9ICkKIGdlbmVy YXRlX2V4cG9ydF9oZWFkZXIoa3JpdGF1aSBCQVNFX05BTUUga3JpdGF1aSkKIAogdGFyZ2V0X2xp bmtfbGlicmFyaWVzKGtyaXRhdWkgS0Y1OjpDb3JlQWRkb25zIEtGNTo6Q29tcGxldGlvbiBLRjU6 OkkxOG4gS0Y1OjpJdGVtVmlld3MgUXQ1OjpOZXR3b3JrCi0gICAgICAgICAgICAgICAgICAgICAg a3JpdGF2ZXJzaW9uIGtyaXRhaW1wZXgga3JpdGFjb2xvciBrcml0YWltYWdlIGtyaXRhbGliYnJ1 c2gga3JpdGF3aWRnZXRzIGtyaXRhd2lkZ2V0dXRpbHMga3JpdGFyZXNvdXJjZXMgJHtQTkdfTElC UkFSSUVTfSBMaWJFeGl2Mjo6TGliRXhpdjIKKyAgICAgICAgICAgICAgICAgICAgICBrcml0YXZl cnNpb24ga3JpdGFpbXBleCBrcml0YWNvbG9yIGtyaXRhaW1hZ2Uga3JpdGFsaWJicnVzaCBrcml0 YXdpZGdldHMga3JpdGF3aWRnZXR1dGlscyBrcml0YXJlc291cmNlcyAke1BOR19MSUJSQVJJRVN9 CiApCiAKIGlmIChBTkRST0lEKQpkaWZmIC0tZ2l0IGEvbGlicy91aS9LaXNBcHBsaWNhdGlvbi5j cHAgYi9saWJzL3VpL0tpc0FwcGxpY2F0aW9uLmNwcAppbmRleCBjZDA2Zjc3ZDM2Li5jMTZjNDEx YWE0IDEwMDY0NAotLS0gYS9saWJzL3VpL0tpc0FwcGxpY2F0aW9uLmNwcAorKysgYi9saWJzL3Vp L0tpc0FwcGxpY2F0aW9uLmNwcApAQCAtNjMsNyArNjMsNyBAQAogI2luY2x1ZGUgPGdlbmVyYXRv ci9raXNfZ2VuZXJhdG9yLmg+CiAjaW5jbHVkZSA8YnJ1c2hlbmdpbmUva2lzX3BhaW50b3BfcmVn aXN0cnkuaD4KICNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaD4KLSNpbmNsdWRl ICJraXNleGl2Mi9raXNfZXhpdjIuaCIKKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2JhY2tlbmRf cmVnaXN0cnkuaD4KICNpbmNsdWRlICJLaXNBcHBsaWNhdGlvbkFyZ3VtZW50cy5oIgogI2luY2x1 ZGUgPGtpc19kZWJ1Zy5oPgogI2luY2x1ZGUgImtpc19hY3Rpb25fcmVnaXN0cnkuaCIKQEAgLTM0 NywxNSArMzQ3LDcgQEAgdm9pZCBLaXNBcHBsaWNhdGlvbjo6bG9hZFBsdWdpbnMoKQogICAgIEtp c1BhaW50T3BSZWdpc3RyeTo6aW5zdGFuY2UoKTsKICAgICBLb1Rvb2xSZWdpc3RyeTo6aW5zdGFu Y2UoKTsKICAgICBLb0RvY2tSZWdpc3RyeTo6aW5zdGFuY2UoKTsKLX0KLQotdm9pZCBLaXNBcHBs aWNhdGlvbjo6bG9hZEd1aVBsdWdpbnMoKQotewotICAgIC8vIFhYWF9FWElWOiBtYWtlIHRoZSBl eGl2IGlvIGJhY2tlbmRzIHJlYWwgcGx1Z2lucwotICAgIHNldFNwbGFzaFNjcmVlbkxvYWRpbmdU ZXh0KGkxOG4oIkxvYWRpbmcgUGx1Z2lucyBFeGl2L0lPLi4uIikpOwotICAgIHByb2Nlc3NFdmVu dHMoKTsKLSAgICAvLyAgICBxRGVidWcoKSA8PCAibG9hZGluZyBleGl2MiI7Ci0gICAgS2lzRXhp djI6OmluaXRpYWxpemUoKTsKKyAgICBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFu Y2UoKTsKIH0KIAogYm9vbCBLaXNBcHBsaWNhdGlvbjo6c3RhcnQoY29uc3QgS2lzQXBwbGljYXRp b25Bcmd1bWVudHMgJmFyZ3MpCkBAIC00MjgsOSArNDIwLDYgQEAgYm9vbCBLaXNBcHBsaWNhdGlv bjo6c3RhcnQoY29uc3QgS2lzQXBwbGljYXRpb25Bcmd1bWVudHMgJmFyZ3MpCiAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBMb2FkIHRoZSBndWkgcGx1Z2lucwotICAgIGxv YWRHdWlQbHVnaW5zKCk7Ci0KICAgICBLaXNQYXJ0ICpraXNQYXJ0ID0gS2lzUGFydDo6aW5zdGFu Y2UoKTsKICAgICBpZiAobmVlZHNNYWluV2luZG93KSB7CiAgICAgICAgIC8vIHNob3cgYSBtYWlu V2luZG93IGFzYXAsIGlmIHdlIHdhbnQgdGhhdApkaWZmIC0tZ2l0IGEvbGlicy91aS9LaXNBcHBs aWNhdGlvbi5oIGIvbGlicy91aS9LaXNBcHBsaWNhdGlvbi5oCmluZGV4IDhiOGZmNDA5YjAuLjE5 YjcwYzc2NzkgMTAwNjQ0Ci0tLSBhL2xpYnMvdWkvS2lzQXBwbGljYXRpb24uaAorKysgYi9saWJz L3VpL0tpc0FwcGxpY2F0aW9uLmgKQEAgLTg1LDcgKzg1LDYgQEAgcHVibGljOgogICAgIHZvaWQg YWRkUmVzb3VyY2VUeXBlcygpOwogICAgIGJvb2wgcmVnaXN0ZXJSZXNvdXJjZXMoKTsKICAgICB2 b2lkIGxvYWRQbHVnaW5zKCk7Ci0gICAgdm9pZCBsb2FkR3VpUGx1Z2lucygpOwogICAgIHZvaWQg aW5pdGlhbGl6ZUdsb2JhbHMoY29uc3QgS2lzQXBwbGljYXRpb25Bcmd1bWVudHMgJmFyZ3MpOwog CiBwdWJsaWMgUV9TTE9UUzoKZGlmZiAtLWdpdCBhL2xpYnMvdWkva2lzX3BuZ19jb252ZXJ0ZXIu Y3BwIGIvbGlicy91aS9raXNfcG5nX2NvbnZlcnRlci5jcHAKaW5kZXggMGVjMDk4ZmY0Zi4uODRi OTQxNjk1ZCAxMDA2NDQKLS0tIGEvbGlicy91aS9raXNfcG5nX2NvbnZlcnRlci5jcHAKKysrIGIv bGlicy91aS9raXNfcG5nX2NvbnZlcnRlci5jcHAKQEAgLTM3LDIzICszNywyMyBAQAogI2luY2x1 ZGUgPEtvQ29sb3IuaD4KICNpbmNsdWRlIDxLb1VuaXQuaD4KIAotI2luY2x1ZGUgPGtpc19jb25m aWcuaD4KLSNpbmNsdWRlIDxraXNfcGFpbnRlci5oPgorI2luY2x1ZGUgImRpYWxvZ3Mva2lzX2Rs Z19wbmdfaW1wb3J0LmgiCisjaW5jbHVkZSAia2lzX2NsaXBib2FyZC5oIgorI2luY2x1ZGUgImtp c191bmRvX3N0b3Jlcy5oIgogI2luY2x1ZGUgPEtpc0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8S29D b2xvck1vZGVsU3RhbmRhcmRJZHMuaD4KKyNpbmNsdWRlIDxraXNfY29uZmlnLmg+CisjaW5jbHVk ZSA8a2lzX2N1cnNvcl9vdmVycmlkZV9oaWphY2tlci5oPgorI2luY2x1ZGUgPGtpc19ncm91cF9s YXllci5oPgogI2luY2x1ZGUgPGtpc19pbWFnZS5oPgogI2luY2x1ZGUgPGtpc19pdGVyYXRvcl9u Zy5oPgogI2luY2x1ZGUgPGtpc19sYXllci5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfYmFj a2VuZF9yZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc3RvcmUuaD4KICNpbmNs dWRlIDxraXNfcGFpbnRfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8a2lzX3RyYW5zYWN0aW9uLmg+CiAj aW5jbHVkZSA8a2lzX3BhaW50X2xheWVyLmg+Ci0jaW5jbHVkZSA8a2lzX2dyb3VwX2xheWVyLmg+ Ci0jaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9pb19iYWNrZW5kLmg+Ci0jaW5jbHVkZSA8a2lzX21l dGFfZGF0YV9zdG9yZS5oPgotI2luY2x1ZGUgPEtvQ29sb3JNb2RlbFN0YW5kYXJkSWRzLmg+Ci0j aW5jbHVkZSAiZGlhbG9ncy9raXNfZGxnX3BuZ19pbXBvcnQuaCIKLSNpbmNsdWRlICJraXNfY2xp cGJvYXJkLmgiCi0jaW5jbHVkZSA8a2lzX2N1cnNvcl9vdmVycmlkZV9oaWphY2tlci5oPgotI2lu Y2x1ZGUgImtpc191bmRvX3N0b3Jlcy5oIgorI2luY2x1ZGUgPGtpc19wYWludGVyLmg+CisjaW5j bHVkZSA8a2lzX3RyYW5zYWN0aW9uLmg+CiAKICNpbmNsdWRlIDxraXNfYXNzZXJ0Lmg+CiAKQEAg LTI0MCw3ICsyNDAsNyBAQCBRQnl0ZUFycmF5IHBuZ19yZWFkX3Jhd19wcm9maWxlKHBuZ190ZXh0 cCB0ZXh0KQogdm9pZCBkZWNvZGVfbWV0YV9kYXRhKHBuZ190ZXh0cCB0ZXh0LCBLaXNNZXRhRGF0 YTo6U3RvcmUqIHN0b3JlLCBRU3RyaW5nIHR5cGUsIGludCBoZWFkZXJTaXplKQogewogICAgIGRi Z0ZpbGUgPDwgIkRlY29kaW5nICIgPDwgdHlwZSA8PCAiICIgPDwgdGV4dFswXS5rZXk7Ci0gICAg S2lzTWV0YURhdGE6OklPQmFja2VuZCogZXhpZklPID0gS2lzTWV0YURhdGE6OklPQmFja2VuZFJl Z2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSh0eXBlKTsKKyAgICBLaXNNZXRhRGF0YTo6SU9CYWNr ZW5kICpleGlmSU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFs dWUodHlwZSk7CiAgICAgUV9BU1NFUlQoZXhpZklPKTsKIAogICAgIFFCeXRlQXJyYXkgcmF3UHJv ZmlsZSA9IHBuZ19yZWFkX3Jhd19wcm9maWxlKHRleHQpOwpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAg S2lzSW1wb3J0RXhwb3J0RXJyb3JDb2RlIEtpc1BOR0NvbnZlcnRlcjo6YnVpbGRGaWxlKFFJT0Rl dmljZSogaW9kZXZpY2UsIGNvbnN0IFEKICAgICAgICAgaWYgKG9wdGlvbnMuZXhpZikgewogICAg ICAgICAgICAgZGJnRmlsZSA8PCAiVHJ5aW5nIHRvIHNhdmUgZXhpZiBpbmZvcm1hdGlvbiI7CiAK LSAgICAgICAgICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQqIGV4aWZJTyA9IEtpc01ldGFEYXRh OjpJT0JhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFsdWUoImV4aWYiKTsKKyAgICAgICAg ICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQgKmV4aWZJTyA9IEtpc01ldGFkYXRhQmFja2VuZFJl Z2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgiZXhpZiIpOwogICAgICAgICAgICAgUV9BU1NFUlQo ZXhpZklPKTsKIAogICAgICAgICAgICAgUUJ1ZmZlciBidWZmZXI7CkBAIC0xMjU0LDcgKzEyNTQs NyBAQCBLaXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgS2lzUE5HQ29udmVydGVyOjpidWlsZEZpbGUo UUlPRGV2aWNlKiBpb2RldmljZSwgY29uc3QgUQogICAgICAgICAvLyBTYXZlIElQVEMKICAgICAg ICAgaWYgKG9wdGlvbnMuaXB0YykgewogICAgICAgICAgICAgZGJnRmlsZSA8PCAiVHJ5aW5nIHRv IHNhdmUgZXhpZiBpbmZvcm1hdGlvbiI7Ci0gICAgICAgICAgICBLaXNNZXRhRGF0YTo6SU9CYWNr ZW5kKiBpcHRjSU8gPSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCkt PnZhbHVlKCJpcHRjIik7CisgICAgICAgICAgICBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kICppcHRj SU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFsdWUoImlwdGMi KTsKICAgICAgICAgICAgIFFfQVNTRVJUKGlwdGNJTyk7CiAKICAgICAgICAgICAgIFFCdWZmZXIg YnVmZmVyOwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAgS2lzSW1wb3J0RXhwb3J0RXJyb3JDb2RlIEtp c1BOR0NvbnZlcnRlcjo6YnVpbGRGaWxlKFFJT0RldmljZSogaW9kZXZpY2UsIGNvbnN0IFEKICAg ICAgICAgLy8gU2F2ZSBYTVAKICAgICAgICAgaWYgKG9wdGlvbnMueG1wKSB7CiAgICAgICAgICAg ICBkYmdGaWxlIDw8ICJUcnlpbmcgdG8gc2F2ZSBYTVAgaW5mb3JtYXRpb24iOwotICAgICAgICAg ICAgS2lzTWV0YURhdGE6OklPQmFja2VuZCogeG1wSU8gPSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5k UmVnaXN0cnk6Omluc3RhbmNlKCktPnZhbHVlKCJ4bXAiKTsKKyAgICAgICAgICAgIEtpc01ldGFE YXRhOjpJT0JhY2tlbmQgKnhtcElPID0gS2lzTWV0YWRhdGFCYWNrZW5kUmVnaXN0cnk6Omluc3Rh bmNlKCktPnZhbHVlKCJ4bXAiKTsKICAgICAgICAgICAgIFFfQVNTRVJUKHhtcElPKTsKIAogICAg ICAgICAgICAgUUJ1ZmZlciBidWZmZXI7CmRpZmYgLS1naXQgYS9saWJzL3VpL2tpc2V4aXYyLy5r cmF6eSBiL2xpYnMvdWkva2lzZXhpdjIvLmtyYXp5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBjYmNmMmZiN2M5Li4wMDAwMDAwMDAwCi0tLSBhL2xpYnMvdWkva2lzZXhpdjIvLmtyYXp5 CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVhDTFVERSB0eXBlZGVmcwpkaWZmIC0tZ2l0 IGEvbGlicy91aS9raXNleGl2Mi9raXNfZXhpdjIuaCBiL2xpYnMvdWkva2lzZXhpdjIva2lzX2V4 aXYyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNTY1YTE1ODQuLjAwMDAwMDAw MDAKLS0tIGEvbGlicy91aS9raXNleGl2Mi9raXNfZXhpdjIuaAorKysgL2Rldi9udWxsCkBAIC0x LDMyICswLDAgQEAKLS8qCi0gKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAwNyBDeXJpbGxl IEJlcmdlciA8Y2JlcmdlckBjYmVyZ2VyLm5ldD4KLSAqCi0gKiAgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IExHUEwtMi4xLW9yLWxhdGVyCi0gKi8KLQotI2lmbmRlZiBfS0lTX0VYSVYyX0hfCi0j ZGVmaW5lIF9LSVNfRVhJVjJfSF8KLQotCi0jaW5jbHVkZSA8a2lzX21ldGFfZGF0YV92YWx1ZS5o PgotI2luY2x1ZGUgPGV4aXYyL2V4aXYyLmhwcD4KLSNpbmNsdWRlICJrcml0YXVpX2V4cG9ydC5o IgotCi0vLy8gQ29udmVydCBhbiBleGl2IHZhbHVlIHRvIGEgS2lzTWV0YURhdGEgdmFsdWUKLUtp c01ldGFEYXRhOjpWYWx1ZSBleGl2VmFsdWVUb0tNRFZhbHVlKGNvbnN0IEV4aXYyOjpWYWx1ZTo6 QXV0b1B0ciB2YWx1ZSwgYm9vbCBmb3JjZVNlcSwgS2lzTWV0YURhdGE6OlZhbHVlOjpWYWx1ZVR5 cGUgYXJyYXlUeXBlID0gS2lzTWV0YURhdGE6OlZhbHVlOjpVbm9yZGVyZWRBcnJheSk7Ci0KLS8v LyBDb252ZXJ0IGEgS2lzTWV0YURhdGEgdG8gYW4gRXhpdiB2YWx1ZQotRXhpdjI6OlZhbHVlKiBr bWRWYWx1ZVRvRXhpdlZhbHVlKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSYgdmFsdWUsIEV4aXYy OjpUeXBlSWQgdHlwZSk7Ci0KLS8qKgotICogQ29udmVydCBhIEtpc01ldGFEYXRhIHRvIGFuIEV4 aXYgdmFsdWUsIHdpdGhvdXQga25vd2luZyB0aGUgdGFyZ2V0ZWQgRXhpdjI6OlR5cGVJZAotICog VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3Igc2F2aW5nIHRvIFhNUC4KLSAqLwotRXhp djI6OlZhbHVlKiBrbWRWYWx1ZVRvRXhpdlhtcFZhbHVlKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1 ZSYgdmFsdWUpOwotCi1zdHJ1Y3QgS1JJVEFVSV9FWFBPUlQgS2lzRXhpdjIgewotCi0gICAgc3Rh dGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi19OwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL3Vp L3Rlc3RzL0NNYWtlTGlzdHMudHh0IGIvbGlicy91aS90ZXN0cy9DTWFrZUxpc3RzLnR4dAppbmRl eCAyZjA4NzA0YWE0Li5iMmI3OTIxMjg4IDEwMDY0NAotLS0gYS9saWJzL3VpL3Rlc3RzL0NNYWtl TGlzdHMudHh0CisrKyBiL2xpYnMvdWkvdGVzdHMvQ01ha2VMaXN0cy50eHQKQEAgLTI3MiwxMyAr MjcyLDYgQEAgZW5kaWYoKQogICAgICAgICBOQU1FX1BSRUZJWCAibGlicy11aS0iCiAgICAgICAg ICR7TUFDT1NfR1VJX1RFU1R9KQogCi0KLSAgICBrcml0YV9hZGRfYnJva2VuX3VuaXRfdGVzdCgg a2lzX2V4aXYyX3Rlc3QuY3BwCi0gICAgICAgIFRFU1RfTkFNRSBLaXNFeGl2MlRlc3QKLSAgICAg ICAgTElOS19MSUJSQVJJRVMga3JpdGF1aSBRdDU6OlRlc3QKLSAgICAgICAgTkFNRV9QUkVGSVgg ImxpYnMtdWktIgotICAgICAgICAke01BQ09TX0dVSV9URVNUfSkKLQogICAgIGtyaXRhX2FkZF9i cm9rZW5fdW5pdF90ZXN0KCBraXNfY2xpcGJvYXJkX3Rlc3QuY3BwCiAgICAgICAgIFRFU1RfTkFN RSBLaXNDbGlwYm9hcmRUZXN0CiAgICAgICAgIExJTktfTElCUkFSSUVTIGtyaXRhdWkgUXQ1OjpU ZXN0CkBAIC0zNDksNyArMzQyLDYgQEAgZW5kaWYoKQogCiAgICAgbWFjb3NfdGVzdF9maXhycGF0 aCgKICAgICAgICAgJHtCUk9LRU5fVEVTVFN9Ci0gICAgICAgIEtpc0V4aXYyVGVzdAogICAgICAg ICBLaXNDbGlwYm9hcmRUZXN0CiAgICAgICAgIEtpc1NlbGVjdGlvbk1hbmFnZXJUZXN0CiAgICAg ICAgIEtpc05vZGVNYW5hZ2VyVGVzdApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9DTWFrZUxpc3RzLnR4 dCBiL3BsdWdpbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggZjIyNzg4MzQyYi4uMWQ5MmY3ZTE5OCAx MDA2NDQKLS0tIGEvcGx1Z2lucy9DTWFrZUxpc3RzLnR4dAorKysgYi9wbHVnaW5zL0NNYWtlTGlz dHMudHh0CkBAIC0xOSw2ICsxOSw3IEBAIGFkZF9zdWJkaXJlY3RvcnkoIGZpbHRlcnMgKQogYWRk X3N1YmRpcmVjdG9yeSggZmxha2UgKQogYWRkX3N1YmRpcmVjdG9yeSggZ2VuZXJhdG9ycyApCiBh ZGRfc3ViZGlyZWN0b3J5KCBpbXBleCApCithZGRfc3ViZGlyZWN0b3J5KCBtZXRhZGF0YSApCiBh ZGRfc3ViZGlyZWN0b3J5KCBwYWludG9wcyApCiBhZGRfc3ViZGlyZWN0b3J5KCB0b29scyApCiBh ZGRfc3ViZGlyZWN0b3J5KCBxdCApCmRpZmYgLS1naXQgYS9wbHVnaW5zL2ltcGV4L2hlaWYvSGVp ZkV4cG9ydC5jcHAgYi9wbHVnaW5zL2ltcGV4L2hlaWYvSGVpZkV4cG9ydC5jcHAKaW5kZXggNDhm MTMzOTY2NC4uYzhlNTE0ZDg2NCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9pbXBleC9oZWlmL0hlaWZF eHBvcnQuY3BwCisrKyBiL3BsdWdpbnMvaW1wZXgvaGVpZi9IZWlmRXhwb3J0LmNwcApAQCAtMzcs MTQgKzM3LDE0IEBACiAjaW5jbHVkZSA8a2lzX3BhaW50X2RldmljZS5oPgogI2luY2x1ZGUgPGtp c19wYWludF9sYXllci5oPgogCi0jaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9zdG9yZS5oPgorI2lu Y2x1ZGUgPGtpc19leGlmX2luZm9fdmlzaXRvci5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFf YmFja2VuZF9yZWdpc3RyeS5oPgogI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfZW50cnkuaD4KLSNp bmNsdWRlIDxraXNfbWV0YV9kYXRhX3ZhbHVlLmg+CisjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9m aWx0ZXJfcmVnaXN0cnlfbW9kZWwuaD4KICNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3NjaGVtYS5o PgogI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc2NoZW1hX3JlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8 a2lzX21ldGFfZGF0YV9maWx0ZXJfcmVnaXN0cnlfbW9kZWwuaD4KLSNpbmNsdWRlIDxraXNfZXhp Zl9pbmZvX3Zpc2l0b3IuaD4KLSNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaD4K KyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3N0b3JlLmg+CisjaW5jbHVkZSA8a2lzX21ldGFfZGF0 YV92YWx1ZS5oPgogCiAjaW5jbHVkZSAia2lzX2l0ZXJhdG9yX25nLmgiCiAKQEAgLTQ3OSw3ICs0 NzksNyBAQCBLaXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgSGVpZkV4cG9ydDo6Y29udmVydChLaXNE b2N1bWVudCAqZG9jdW1lbnQsIFFJT0RldmljZSAqaQogCiAgICAgICAgIGlmICghbWV0YURhdGFT dG9yZS0+ZW1wdHkoKSkgewogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEtpc01ldGFE YXRhOjpJT0JhY2tlbmQqIGV4aWZJTyA9IEtpc01ldGFEYXRhOjpJT0JhY2tlbmRSZWdpc3RyeTo6 aW5zdGFuY2UoKS0+dmFsdWUoImV4aWYiKTsKKyAgICAgICAgICAgICAgICBLaXNNZXRhRGF0YTo6 SU9CYWNrZW5kICpleGlmSU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2Uo KS0+dmFsdWUoImV4aWYiKTsKICAgICAgICAgICAgICAgICBRQnVmZmVyIGJ1ZmZlcjsKICAgICAg ICAgICAgICAgICBleGlmSU8tPnNhdmVUbyhtZXRhRGF0YVN0b3JlLmRhdGEoKSwgJmJ1ZmZlciwg S2lzTWV0YURhdGE6OklPQmFja2VuZDo6Tm9IZWFkZXIpOyAvLyBPciBKcGVnSGVhZGVyPyBPciBz b21ldGhpbmcgZWxzZT8KICAgICAgICAgICAgICAgICBRQnl0ZUFycmF5IGRhdGEgPSBidWZmZXIu ZGF0YSgpOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIEtpc0ltcG9ydEV4cG9ydEVycm9yQ29kZSBIZWlm RXhwb3J0Ojpjb252ZXJ0KEtpc0RvY3VtZW50ICpkb2N1bWVudCwgUUlPRGV2aWNlICppCiAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQqIHhtcElPID0gS2lzTWV0YURhdGE6OklPQmFja2Vu ZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgieG1wIik7CisgICAgICAgICAgICAgICAgS2lz TWV0YURhdGE6OklPQmFja2VuZCAqeG1wSU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6 aW5zdGFuY2UoKS0+dmFsdWUoInhtcCIpOwogICAgICAgICAgICAgICAgIFFCdWZmZXIgYnVmZmVy OwogICAgICAgICAgICAgICAgIHhtcElPLT5zYXZlVG8obWV0YURhdGFTdG9yZS5kYXRhKCksICZi dWZmZXIsIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQ6Ok5vSGVhZGVyKTsgLy8gT3IgSnBlZ0hlYWRl cj8gT3Igc29tZXRoaW5nIGVsc2U/CiAgICAgICAgICAgICAgICAgUUJ5dGVBcnJheSBkYXRhID0g YnVmZmVyLmRhdGEoKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvaW1wZXgvaGVpZi9IZWlmSW1wb3J0 LmNwcCBiL3BsdWdpbnMvaW1wZXgvaGVpZi9IZWlmSW1wb3J0LmNwcAppbmRleCBmZTcyZTc0N2M4 Li42YWUzZDc4OGMwIDEwMDY0NAotLS0gYS9wbHVnaW5zL2ltcGV4L2hlaWYvSGVpZkltcG9ydC5j cHAKKysrIGIvcGx1Z2lucy9pbXBleC9oZWlmL0hlaWZJbXBvcnQuY3BwCkBAIC0zMCwxMCArMzAs MTAgQEAKICNpbmNsdWRlIDxraXNfbm9kZS5oPgogI2luY2x1ZGUgPGtpc19ncm91cF9sYXllci5o PgogCisjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9iYWNrZW5kX3JlZ2lzdHJ5Lmg+CiAjaW5jbHVk ZSA8a2lzX21ldGFfZGF0YV9lbnRyeS5oPgotI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfdmFsdWUu aD4KICNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3N0b3JlLmg+Ci0jaW5jbHVkZSA8a2lzX21ldGFf ZGF0YV9pb19iYWNrZW5kLmg+CisjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV92YWx1ZS5oPgogCiAj aW5jbHVkZSAia2lzX2l0ZXJhdG9yX25nLmgiCiAKQEAgLTQ1OCwxMiArNDU4LDEzIEBAIEtpc0lt cG9ydEV4cG9ydEVycm9yQ29kZSBIZWlmSW1wb3J0Ojpjb252ZXJ0KEtpc0RvY3VtZW50ICpkb2N1 bWVudCwgUUlPRGV2aWNlICppCiAgICAgICAgICAgICAgIHNpemVfdCBza2lwID0gKChleGlmX2Rh dGFbMF08PDI0KSB8IChleGlmX2RhdGFbMV08PDE2KSB8IChleGlmX2RhdGFbMl08PDgpIHwgZXhp Zl9kYXRhWzNdKSArIDQ7CiAKICAgICAgICAgICAgICAgaWYgKGV4aWZfZGF0YS5zaXplKCk+c2tp cCkgewotICAgICAgICAgICAgICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQqIGV4aWZJTyA9IEtp c01ldGFEYXRhOjpJT0JhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFsdWUoImV4aWYiKTsK KyAgICAgICAgICAgICAgICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQgKmV4aWZJTyA9IEtpc01l dGFkYXRhQmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgiZXhpZiIpOwogCi0gICAg ICAgICAgICAgICAgLy8gQ29weSB0aGUgZXhpZiBkYXRhIGludG8gdGhlIGJ5dGUgYXJyYXkKLSAg ICAgICAgICAgICAgICBRQnl0ZUFycmF5IGJhKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPihleGlm X2RhdGEuZGF0YSgpK3NraXApLCBzdGF0aWNfY2FzdDxpbnQ+KGV4aWZfZGF0YS5zaXplKCktc2tp cCkpOwotICAgICAgICAgICAgICAgIFFCdWZmZXIgYnVmKCZiYSk7Ci0gICAgICAgICAgICAgICAg ZXhpZklPLT5sb2FkRnJvbShsYXllci0+bWV0YURhdGEoKSwgJmJ1Zik7CisgICAgICAgICAgICAg ICAgICAvLyBDb3B5IHRoZSBleGlmIGRhdGEgaW50byB0aGUgYnl0ZSBhcnJheQorICAgICAgICAg ICAgICAgICAgUUJ5dGVBcnJheSBiYShyZWludGVycHJldF9jYXN0PGNoYXIgKj4oZXhpZl9kYXRh LmRhdGEoKSArIHNraXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf Y2FzdDxpbnQ+KGV4aWZfZGF0YS5zaXplKCkgLSBza2lwKSk7CisgICAgICAgICAgICAgICAgICBR QnVmZmVyIGJ1ZigmYmEpOworICAgICAgICAgICAgICAgICAgZXhpZklPLT5sb2FkRnJvbShsYXll ci0+bWV0YURhdGEoKSwgJmJ1Zik7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg ICAgICAgICB9CkBAIC00NzQsNyArNDc1LDcgQEAgS2lzSW1wb3J0RXhwb3J0RXJyb3JDb2RlIEhl aWZJbXBvcnQ6OmNvbnZlcnQoS2lzRG9jdW1lbnQgKmRvY3VtZW50LCBRSU9EZXZpY2UgKmkKIAog ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4geG1wX2RhdGEgPSBoYW5kbGUuZ2V0X21l dGFkYXRhKGlkKTsKIAotICAgICAgICAgICAgS2lzTWV0YURhdGE6OklPQmFja2VuZCogeG1wSU8g PSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCktPnZhbHVlKCJ4bXAi KTsKKyAgICAgICAgICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQgKnhtcElPID0gS2lzTWV0YWRh dGFCYWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCktPnZhbHVlKCJ4bXAiKTsKIAogICAgICAgICAg ICAgLy8gQ29weSB0aGUgeG1wIGRhdGEgaW50byB0aGUgYnl0ZSBhcnJheQogICAgICAgICAgICAg UUJ5dGVBcnJheSBiYShyZWludGVycHJldF9jYXN0PGNoYXIgKj4oeG1wX2RhdGEuZGF0YSgpKSwg c3RhdGljX2Nhc3Q8aW50Pih4bXBfZGF0YS5zaXplKCkpKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMv aW1wZXgvanBlZy9raXNfanBlZ19jb252ZXJ0ZXIuY2MgYi9wbHVnaW5zL2ltcGV4L2pwZWcva2lz X2pwZWdfY29udmVydGVyLmNjCmluZGV4IDhiMjIyNzliYzYuLjMzNjRhZTZlZGEgMTAwNjQ0Ci0t LSBhL3BsdWdpbnMvaW1wZXgvanBlZy9raXNfanBlZ19jb252ZXJ0ZXIuY2MKKysrIGIvcGx1Z2lu cy9pbXBleC9qcGVnL2tpc19qcGVnX2NvbnZlcnRlci5jYwpAQCAtMzYsMjEgKzM2LDIxIEBAIGV4 dGVybiAiQyIgewogI2luY2x1ZGUgPEtvVW5pdC5oPgogI2luY2x1ZGUgIktvQ29sb3JNb2RlbFN0 YW5kYXJkSWRzLmgiCiAKLSNpbmNsdWRlIDxraXNfcGFpbnRlci5oPgogI2luY2x1ZGUgPEtpc0Rv Y3VtZW50Lmg+Ci0jaW5jbHVkZSA8a2lzX2ltYWdlLmg+Ci0jaW5jbHVkZSA8a2lzX3BhaW50X2xh eWVyLmg+Ci0jaW5jbHVkZSA8a2lzX3RyYW5zYWN0aW9uLmg+CiAjaW5jbHVkZSA8a2lzX2dyb3Vw X2xheWVyLmg+CisjaW5jbHVkZSA8a2lzX2ltYWdlLmg+CisjaW5jbHVkZSA8a2lzX2l0ZXJhdG9y X25nLmg+CisjaW5jbHVkZSA8a2lzX2pwZWdfZGVzdGluYXRpb24uaD4KKyNpbmNsdWRlIDxraXNf anBlZ19zb3VyY2UuaD4KKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2JhY2tlbmRfcmVnaXN0cnku aD4KICNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2VudHJ5Lmg+Ci0jaW5jbHVkZSA8a2lzX21ldGFf ZGF0YV92YWx1ZS5oPgogI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc3RvcmUuaD4KLSNpbmNsdWRl IDxraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaD4KKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3Zh bHVlLmg+CiAjaW5jbHVkZSA8a2lzX3BhaW50X2RldmljZS5oPgorI2luY2x1ZGUgPGtpc19wYWlu dF9sYXllci5oPgorI2luY2x1ZGUgPGtpc19wYWludGVyLmg+CisjaW5jbHVkZSA8a2lzX3RyYW5z YWN0aW9uLmg+CiAjaW5jbHVkZSA8a2lzX3RyYW5zZm9ybV93b3JrZXIuaD4KLSNpbmNsdWRlIDxr aXNfanBlZ19zb3VyY2UuaD4KLSNpbmNsdWRlIDxraXNfanBlZ19kZXN0aW5hdGlvbi5oPgotI2lu Y2x1ZGUgImtpc19pdGVyYXRvcl9uZy5oIgogCiAjZGVmaW5lIElDQ19NQVJLRVIgIChKUEVHX0FQ UDAgKyAyKSAvKiBKUEVHIG1hcmtlciBjb2RlIGZvciBJQ0MgKi8KICNkZWZpbmUgSUNDX09WRVJI RUFEX0xFTiAgMTQgICAgLyogc2l6ZSBvZiBub24tcHJvZmlsZSBkYXRhIGluIEFQUDIgKi8KQEAg LTMxMSw3ICszMTEsNyBAQCBLaXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgS2lzSlBFR0NvbnZlcnRl cjo6ZGVjb2RlKFFJT0RldmljZSAqaW8pCiAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIG5v IEV4aWYgaGVhZGVyICovCiAKICAgICAgICAgICAgIGRiZ0ZpbGUgPDwgIkZvdW5kIGV4aWYgaW5m b3JtYXRpb24gb2YgbGVuZ3RoIDoiIDw8IG1hcmtlci0+ZGF0YV9sZW5ndGg7Ci0gICAgICAgICAg ICBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kKiBleGlmSU8gPSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5k UmVnaXN0cnk6Omluc3RhbmNlKCktPnZhbHVlKCJleGlmIik7CisgICAgICAgICAgICBLaXNNZXRh RGF0YTo6SU9CYWNrZW5kICpleGlmSU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5z dGFuY2UoKS0+dmFsdWUoImV4aWYiKTsKICAgICAgICAgICAgIFFfQVNTRVJUKGV4aWZJTyk7CiAg ICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVBcnJheSgoY29uc3QgY2hhciopbWFya2VyLT5kYXRh ICsgNiwgbWFya2VyLT5kYXRhX2xlbmd0aCAtIDYpOwogICAgICAgICAgICAgUUJ1ZmZlciBidWYo JmJ5dGVBcnJheSk7CkBAIC0zNjksNyArMzY5LDcgQEAgS2lzSW1wb3J0RXhwb3J0RXJyb3JDb2Rl IEtpc0pQRUdDb252ZXJ0ZXI6OmRlY29kZShRSU9EZXZpY2UgKmlvKQogICAgICAgICAgICAgfQog CiAgICAgICAgICAgICBkYmdGaWxlIDw8ICJGb3VuZCBQaG90b3Nob3AgaW5mb3JtYXRpb24gb2Yg bGVuZ3RoIDoiIDw8IG1hcmtlci0+ZGF0YV9sZW5ndGg7Ci0gICAgICAgICAgICBLaXNNZXRhRGF0 YTo6SU9CYWNrZW5kKiBpcHRjSU8gPSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kUmVnaXN0cnk6Omlu c3RhbmNlKCktPnZhbHVlKCJpcHRjIik7CisgICAgICAgICAgICBLaXNNZXRhRGF0YTo6SU9CYWNr ZW5kICppcHRjSU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFs dWUoImlwdGMiKTsKICAgICAgICAgICAgIFFfQVNTRVJUKGlwdGNJTyk7CiAgICAgICAgICAgICBj b25zdCBFeGl2Mjo6Ynl0ZSAqcmVjb3JkID0gMDsKICAgICAgICAgICAgIHVpbnQzMl90IHNpemVJ cHRjID0gMDsKQEAgLTQwMiw3ICs0MDIsNyBAQCBLaXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgS2lz SlBFR0NvbnZlcnRlcjo6ZGVjb2RlKFFJT0RldmljZSAqaW8pCiAgICAgICAgICAgICB9CiAgICAg ICAgICAgICBkYmdGaWxlIDw8ICJGb3VuZCBYTVAgTWFya2VyIG9mIGxlbmd0aCAiIDw8IG1hcmtl ci0+ZGF0YV9sZW5ndGg7CiAgICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVBcnJheSgoY29uc3Qg Y2hhciopbWFya2VyLT5kYXRhICsgMjksIG1hcmtlci0+ZGF0YV9sZW5ndGggLSAyOSk7Ci0gICAg ICAgICAgICBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kKiB4bXBJTyA9IEtpc01ldGFEYXRhOjpJT0Jh Y2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+dmFsdWUoInhtcCIpOworICAgICAgICAgICAgS2lz TWV0YURhdGE6OklPQmFja2VuZCAqeG1wSU8gPSBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6 aW5zdGFuY2UoKS0+dmFsdWUoInhtcCIpOwogICAgICAgICAgICAgUV9BU1NFUlQoeG1wSU8pOwog ICAgICAgICAgICAgeG1wSU8tPmxvYWRGcm9tKGxheWVyLT5tZXRhRGF0YSgpLCBuZXcgUUJ1ZmZl cigmYnl0ZUFycmF5KSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU2Miw3ICs1NjIsNyBAQCBL aXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgS2lzSlBFR0NvbnZlcnRlcjo6YnVpbGRGaWxlKFFJT0Rl dmljZSAqaW8sIEtpc1BhaW50TGF5ZQogICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhpZikgewog ICAgICAgICAgICAgICAgIGRiZ0ZpbGUgPDwgIlRyeWluZyB0byBzYXZlIGV4aWYgaW5mb3JtYXRp b24iOwogCi0gICAgICAgICAgICAgICAgS2lzTWV0YURhdGE6OklPQmFja2VuZCogZXhpZklPID0g S2lzTWV0YURhdGE6OklPQmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgiZXhpZiIp OworICAgICAgICAgICAgICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQgKmV4aWZJTyA9IEtpc01l dGFkYXRhQmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgiZXhpZiIpOwogICAgICAg ICAgICAgICAgIFFfQVNTRVJUKGV4aWZJTyk7CiAKICAgICAgICAgICAgICAgICBRQnVmZmVyIGJ1 ZmZlcjsKQEAgLTU3OSw3ICs1NzksNyBAQCBLaXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgS2lzSlBF R0NvbnZlcnRlcjo6YnVpbGRGaWxlKFFJT0RldmljZSAqaW8sIEtpc1BhaW50TGF5ZQogICAgICAg ICAgICAgLy8gU2F2ZSBJUFRDCiAgICAgICAgICAgICBpZiAob3B0aW9ucy5pcHRjKSB7CiAgICAg ICAgICAgICAgICAgZGJnRmlsZSA8PCAiVHJ5aW5nIHRvIHNhdmUgZXhpZiBpbmZvcm1hdGlvbiI7 Ci0gICAgICAgICAgICAgICAgS2lzTWV0YURhdGE6OklPQmFja2VuZCogaXB0Y0lPID0gS2lzTWV0 YURhdGE6OklPQmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgiaXB0YyIpOworICAg ICAgICAgICAgICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQgKmlwdGNJTyA9IEtpc01ldGFkYXRh QmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgiaXB0YyIpOwogICAgICAgICAgICAg ICAgIFFfQVNTRVJUKGlwdGNJTyk7CiAKICAgICAgICAgICAgICAgICBRQnVmZmVyIGJ1ZmZlcjsK QEAgLTU5Niw3ICs1OTYsNyBAQCBLaXNJbXBvcnRFeHBvcnRFcnJvckNvZGUgS2lzSlBFR0NvbnZl cnRlcjo6YnVpbGRGaWxlKFFJT0RldmljZSAqaW8sIEtpc1BhaW50TGF5ZQogICAgICAgICAgICAg Ly8gU2F2ZSBYTVAKICAgICAgICAgICAgIGlmIChvcHRpb25zLnhtcCkgewogICAgICAgICAgICAg ICAgIGRiZ0ZpbGUgPDwgIlRyeWluZyB0byBzYXZlIFhNUCBpbmZvcm1hdGlvbiI7Ci0gICAgICAg ICAgICAgICAgS2lzTWV0YURhdGE6OklPQmFja2VuZCogeG1wSU8gPSBLaXNNZXRhRGF0YTo6SU9C YWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCktPnZhbHVlKCJ4bXAiKTsKKyAgICAgICAgICAgICAg ICBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kICp4bXBJTyA9IEtpc01ldGFkYXRhQmFja2VuZFJlZ2lz dHJ5OjppbnN0YW5jZSgpLT52YWx1ZSgieG1wIik7CiAgICAgICAgICAgICAgICAgUV9BU1NFUlQo eG1wSU8pOwogCiAgICAgICAgICAgICAgICAgUUJ1ZmZlciBidWZmZXI7CmRpZmYgLS1naXQgYS9w bHVnaW5zL2ltcGV4L2pwZWcvdGVzdHMvQ01ha2VMaXN0cy50eHQgYi9wbHVnaW5zL2ltcGV4L2pw ZWcvdGVzdHMvQ01ha2VMaXN0cy50eHQKaW5kZXggYmJlOThlMWQ1Ny4uZDdmMDY3Y2I3MyAxMDA2 NDQKLS0tIGEvcGx1Z2lucy9pbXBleC9qcGVnL3Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL3Bs dWdpbnMvaW1wZXgvanBlZy90ZXN0cy9DTWFrZUxpc3RzLnR4dApAQCAtNyw3ICs3LDcgQEAgaWYg KEFQUExFKQogCiAgICAga3JpdGFfYWRkX2Jyb2tlbl91bml0X3Rlc3RzKAogICAgICAgICBraXNf anBlZ190ZXN0LmNwcAotICAgICAgICBMSU5LX0xJQlJBUklFUyBrcml0YXVpIFF0NTo6VGVzdAor ICAgICAgICBMSU5LX0xJQlJBUklFUyBrcml0YW1ldGFkYXRhIGtyaXRhdWkgUXQ1OjpUZXN0CiAg ICAgICAgIE5BTUVfUFJFRklYICJwbHVnaW5zLWltcGV4LSIKICAgICAgICAgVEFSR0VUX05BTUVT X1ZBUiBCUk9LRU5fVEVTVFMKICAgICAgICAgJHtNQUNPU19HVUlfVEVTVH0KQEAgLTE5LDcgKzE5 LDcgQEAgZWxzZSAoQVBQTEUpCiAgICAgZWNtX2FkZF90ZXN0KAogICAgICAgICBraXNfanBlZ190 ZXN0LmNwcAogICAgICAgICBURVNUX05BTUUga2lzX2pwZWdfdGVzdAotICAgICAgICBMSU5LX0xJ QlJBUklFUyBrcml0YXVpIFF0NTo6VGVzdAorICAgICAgICBMSU5LX0xJQlJBUklFUyBrcml0YW1l dGFkYXRhIGtyaXRhdWkgUXQ1OjpUZXN0CiAgICAgICAgIE5BTUVfUFJFRklYICJwbHVnaW5zLWlt cGV4LSIKICAgICAgICAgKQogCmRpZmYgLS1naXQgYS9wbHVnaW5zL2ltcGV4L2pwZWcvdGVzdHMv a2lzX2pwZWdfdGVzdC5jcHAgYi9wbHVnaW5zL2ltcGV4L2pwZWcvdGVzdHMva2lzX2pwZWdfdGVz dC5jcHAKaW5kZXggZGUyYzgyYWY4OC4uZTllZWY4MTY2NCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9p bXBleC9qcGVnL3Rlc3RzL2tpc19qcGVnX3Rlc3QuY3BwCisrKyBiL3BsdWdpbnMvaW1wZXgvanBl Zy90ZXN0cy9raXNfanBlZ190ZXN0LmNwcApAQCAtOSwxMCArOSwxMCBAQAogI2luY2x1ZGUgPHNp bXBsZXRlc3QuaD4KICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogCi0jaW5jbHVkZSAia2lz ZXhpdjIva2lzX2V4aXYyLmgiCiAjaW5jbHVkZSAiZmlsZXN0ZXN0LmgiCiAjaW5jbHVkZSAianBl Z2xpYi5oIgotI2luY2x1ZGUgIDxzZGsvdGVzdHMvdGVzdHVpLmg+CisjaW5jbHVkZSA8a2lzX21l dGFfZGF0YV9iYWNrZW5kX3JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8c2RrL3Rlc3RzL3Rlc3R1aS5o PgogCiAjaWZuZGVmIEZJTEVTX0RBVEFfRElSCiAjZXJyb3IgIkZJTEVTX0RBVEFfRElSIG5vdCBz ZXQuIEEgZGlyZWN0b3J5IHdpdGggdGhlIGRhdGEgdXNlZCBmb3IgdGVzdGluZyB0aGUgaW1wb3J0 aW5nIG9mIGZpbGVzIGluIGtyaXRhIgpAQCAtMjYsNyArMjYsNyBAQCBjb25zdCBRU3RyaW5nIEpw ZWdNaW1ldHlwZSA9ICJpbWFnZS9qcGVnIjsKIAogdm9pZCBLaXNKcGVnVGVzdDo6dGVzdEZpbGVz KCkKIHsKLSAgICBLaXNFeGl2Mjo6aW5pdGlhbGl6ZSgpOworICAgIEtpc01ldGFkYXRhQmFja2Vu ZFJlZ2lzdHJ5OjppbnN0YW5jZSgpOwogICAgIC8qKgogICAgICAqIERpZmZlcmVudCB2ZXJzaW9u cyBvZiBKUEVHIGxpYnJhcnkgbWF5IHByb2R1Y2UgYSBiaXQgZGlmZmVyZW50CiAgICAgICogcmVz dWx0LCBzbyBqdXN0IGNvbXBhcmUgaW4gYSB3ZWFrIHdheSwgaS5lLCBvbmx5IHRoZSBzaXplIGZv ciByZWFsCmRpZmYgLS1naXQgYS9wbHVnaW5zL2ltcGV4L2xpYmtyYS9raXNfa3JhX2xvYWRfdmlz aXRvci5jcHAgYi9wbHVnaW5zL2ltcGV4L2xpYmtyYS9raXNfa3JhX2xvYWRfdmlzaXRvci5jcHAK aW5kZXggZmUzMGViZmQwMy4uODczYTgzY2I3MSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9pbXBleC9s aWJrcmEva2lzX2tyYV9sb2FkX3Zpc2l0b3IuY3BwCisrKyBiL3BsdWdpbnMvaW1wZXgvbGlia3Jh L2tpc19rcmFfbG9hZF92aXNpdG9yLmNwcApAQCAtMjgsMzcgKzI4LDM2IEBACiAjaW5jbHVkZSA8 S2lzR2xvYmFsUmVzb3VyY2VzSW50ZXJmYWNlLmg+CiAKIC8vIGtyaXRhaW1hZ2UKLSNpbmNsdWRl IDxraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaD4KLSNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3N0 b3JlLmg+Ci0jaW5jbHVkZSA8a2lzX3R5cGVzLmg+Ci0jaW5jbHVkZSA8a2lzX25vZGVfdmlzaXRv ci5oPgotI2luY2x1ZGUgPGtpc19pbWFnZS5oPgotI2luY2x1ZGUgPGtpc19zZWxlY3Rpb24uaD4K LSNpbmNsdWRlIDxraXNfbGF5ZXIuaD4KLSNpbmNsdWRlIDxraXNfcGFpbnRfbGF5ZXIuaD4KLSNp bmNsdWRlIDxraXNfZ3JvdXBfbGF5ZXIuaD4KLSNpbmNsdWRlIDxraXNfYWRqdXN0bWVudF9sYXll ci5oPgorI2luY2x1ZGUgImtpc19jb2xvcml6ZV9kb21fdXRpbHMuaCIKKyNpbmNsdWRlICJraXNf ZG9tX3V0aWxzLmgiCisjaW5jbHVkZSAia2lzX2ZpbHRlcl9yZWdpc3RyeS5oIgorI2luY2x1ZGUg Imtpc19nZW5lcmF0b3JfcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJraXNfcGFpbnRfZGV2aWNlX2Zy YW1lc19pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJraXNfcmFzdGVyX2tleWZyYW1lX2NoYW5uZWwu aCIKKyNpbmNsdWRlICJraXNfc2hhcGVfc2VsZWN0aW9uLmgiCisjaW5jbHVkZSAia2lzX3RyYW5z Zm9ybV9tYXNrX3BhcmFtc19mYWN0b3J5X3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8ZmlsdGVyL2tp c19maWx0ZXJfY29uZmlndXJhdGlvbi5oPgotI2luY2x1ZGUgPGtpc19kYXRhbWFuYWdlci5oPgog I2luY2x1ZGUgPGdlbmVyYXRvci9raXNfZ2VuZXJhdG9yX2xheWVyLmg+Ci0jaW5jbHVkZSA8a2lz X3BpeGVsX3NlbGVjdGlvbi5oPgorI2luY2x1ZGUgPGtpc19hZGp1c3RtZW50X2xheWVyLmg+CiAj aW5jbHVkZSA8a2lzX2Nsb25lX2xheWVyLmg+CisjaW5jbHVkZSA8a2lzX2RhdGFtYW5hZ2VyLmg+ CiAjaW5jbHVkZSA8a2lzX2ZpbHRlcl9tYXNrLmg+CisjaW5jbHVkZSA8a2lzX2dyb3VwX2xheWVy Lmg+CisjaW5jbHVkZSA8a2lzX2ltYWdlLmg+CisjaW5jbHVkZSA8a2lzX2xheWVyLmg+CisjaW5j bHVkZSA8a2lzX21ldGFfZGF0YV9iYWNrZW5kX3JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8a2lzX21l dGFfZGF0YV9zdG9yZS5oPgorI2luY2x1ZGUgPGtpc19ub2RlX3Zpc2l0b3IuaD4KKyNpbmNsdWRl IDxraXNfcGFpbnRfbGF5ZXIuaD4KKyNpbmNsdWRlIDxraXNfcGl4ZWxfc2VsZWN0aW9uLmg+Cisj aW5jbHVkZSA8a2lzX3NlbGVjdGlvbi5oPgorI2luY2x1ZGUgPGtpc19zZWxlY3Rpb25fbWFzay5o PgogI2luY2x1ZGUgPGtpc190cmFuc2Zvcm1fbWFzay5oPgogI2luY2x1ZGUgPGtpc190cmFuc2Zv cm1fbWFza19wYXJhbXNfaW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSAia2lzX3RyYW5zZm9ybV9tYXNr X3BhcmFtc19mYWN0b3J5X3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8a2lzX3RyYW5zcGFyZW5jeV9t YXNrLmg+Ci0jaW5jbHVkZSA8a2lzX3NlbGVjdGlvbl9tYXNrLmg+CisjaW5jbHVkZSA8a2lzX3R5 cGVzLmg+CiAjaW5jbHVkZSA8bGF6eWJydXNoL2tpc19jb2xvcml6ZV9tYXNrLmg+CiAjaW5jbHVk ZSA8bGF6eWJydXNoL2tpc19sYXp5X2ZpbGxfdG9vbHMuaD4KLSNpbmNsdWRlICJraXNfc2hhcGVf c2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAia2lzX2NvbG9yaXplX2RvbV91dGlscy5oIgotI2luY2x1 ZGUgImtpc19kb21fdXRpbHMuaCIKLSNpbmNsdWRlICJraXNfcmFzdGVyX2tleWZyYW1lX2NoYW5u ZWwuaCIKLSNpbmNsdWRlICJraXNfcGFpbnRfZGV2aWNlX2ZyYW1lc19pbnRlcmZhY2UuaCIKLSNp bmNsdWRlICJraXNfZmlsdGVyX3JlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAia2lzX2dlbmVyYXRvcl9y ZWdpc3RyeS5oIgotCiAKIHVzaW5nIG5hbWVzcGFjZSBLUkE7CiAKQEAgLTY5Myw3ICs2OTIsNyBA QCBib29sIEtpc0tyYUxvYWRWaXNpdG9yOjpsb2FkTWV0YURhdGEoS2lzTm9kZSogbm9kZSkKICAg ICBLaXNMYXllciogbGF5ZXIgPSBxb2JqZWN0X2Nhc3Q8S2lzTGF5ZXIqPihub2RlKTsKICAgICBp ZiAoIWxheWVyKSByZXR1cm4gdHJ1ZTsKIAotICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQqIGJh Y2tlbmQgPSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCktPmdldCgi eG1wIik7CisgICAgS2lzTWV0YURhdGE6OklPQmFja2VuZCAqYmFja2VuZCA9IEtpc01ldGFkYXRh QmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5nZXQoInhtcCIpOwogCiAgICAgaWYgKCFiYWNr ZW5kIHx8ICFiYWNrZW5kLT5zdXBwb3J0TG9hZGluZygpKSB7CiAgICAgICAgIGlmIChiYWNrZW5k KQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9pbXBleC9saWJrcmEva2lzX2tyYV9zYXZlX3Zpc2l0b3Iu Y3BwIGIvcGx1Z2lucy9pbXBleC9saWJrcmEva2lzX2tyYV9zYXZlX3Zpc2l0b3IuY3BwCmluZGV4 IGI1YjFlY2Y0MWIuLmE4Yzg5MzVmNTEgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvaW1wZXgvbGlia3Jh L2tpc19rcmFfc2F2ZV92aXNpdG9yLmNwcAorKysgYi9wbHVnaW5zL2ltcGV4L2xpYmtyYS9raXNf a3JhX3NhdmVfdmlzaXRvci5jcHAKQEAgLTE2LDMxICsxNiwzMSBAQAogI2luY2x1ZGUgPEtvU3Rv cmUuaD4KICNpbmNsdWRlIDxLb0NvbG9yU3BhY2UuaD4KIAorI2luY2x1ZGUgImxhenlicnVzaC9r aXNfY29sb3JpemVfbWFzay5oIgorI2luY2x1ZGUgPEtpc1JlZmVyZW5jZUltYWdlLmg+CisjaW5j bHVkZSA8S2lzUmVmZXJlbmNlSW1hZ2VzTGF5ZXIuaD4KICNpbmNsdWRlIDxmaWx0ZXIva2lzX2Zp bHRlcl9jb25maWd1cmF0aW9uLmg+CiAjaW5jbHVkZSA8Z2VuZXJhdG9yL2tpc19nZW5lcmF0b3Jf bGF5ZXIuaD4KICNpbmNsdWRlIDxraXNfYWRqdXN0bWVudF9sYXllci5oPgogI2luY2x1ZGUgPGtp c19hbm5vdGF0aW9uLmg+CisjaW5jbHVkZSA8a2lzX2Nsb25lX2xheWVyLmg+CisjaW5jbHVkZSA8 a2lzX2ZpbGVfbGF5ZXIuaD4KKyNpbmNsdWRlIDxraXNfZmlsdGVyX21hc2suaD4KICNpbmNsdWRl IDxraXNfZ3JvdXBfbGF5ZXIuaD4KICNpbmNsdWRlIDxraXNfaW1hZ2UuaD4KICNpbmNsdWRlIDxr aXNfbGF5ZXIuaD4KKyNpbmNsdWRlIDxraXNfbWFzay5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2Rh dGFfYmFja2VuZF9yZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc3RvcmUuaD4K ICNpbmNsdWRlIDxraXNfcGFpbnRfbGF5ZXIuaD4KKyNpbmNsdWRlIDxraXNfcGl4ZWxfc2VsZWN0 aW9uLmg+CiAjaW5jbHVkZSA8a2lzX3NlbGVjdGlvbi5oPgorI2luY2x1ZGUgPGtpc19zZWxlY3Rp b25fY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8a2lzX3NlbGVjdGlvbl9tYXNrLmg+CiAjaW5jbHVk ZSA8a2lzX3NoYXBlX2xheWVyLmg+Ci0jaW5jbHVkZSA8S2lzUmVmZXJlbmNlSW1hZ2VzTGF5ZXIu aD4KLSNpbmNsdWRlIDxLaXNSZWZlcmVuY2VJbWFnZS5oPgotI2luY2x1ZGUgPGtpc19maWxlX2xh eWVyLmg+Ci0jaW5jbHVkZSA8a2lzX2Nsb25lX2xheWVyLmg+Ci0jaW5jbHVkZSA8a2lzX21hc2su aD4KLSNpbmNsdWRlIDxraXNfZmlsdGVyX21hc2suaD4KICNpbmNsdWRlIDxraXNfdHJhbnNmb3Jt X21hc2suaD4KICNpbmNsdWRlIDxraXNfdHJhbnNmb3JtX21hc2tfcGFyYW1zX2ludGVyZmFjZS5o PgogI2luY2x1ZGUgPGtpc190cmFuc3BhcmVuY3lfbWFzay5oPgotI2luY2x1ZGUgPGtpc19zZWxl Y3Rpb25fbWFzay5oPgotI2luY2x1ZGUgImxhenlicnVzaC9raXNfY29sb3JpemVfbWFzay5oIgot I2luY2x1ZGUgPGtpc19zZWxlY3Rpb25fY29tcG9uZW50Lmg+Ci0jaW5jbHVkZSA8a2lzX3BpeGVs X3NlbGVjdGlvbi5oPgotI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc3RvcmUuaD4KLSNpbmNsdWRl IDxraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaD4KIAogI2luY2x1ZGUgImtpc19jb25maWcuaCIK ICNpbmNsdWRlICJraXNfc3RvcmVfcGFpbnRkZXZpY2Vfd3JpdGVyLmgiCkBAIC01MDIsNyArNTAy LDcgQEAgYm9vbCBLaXNLcmFTYXZlVmlzaXRvcjo6c2F2ZU1ldGFEYXRhKEtpc05vZGUqIG5vZGUp CiAgICAgaWYgKG1ldGFkYXRhLT5pc0VtcHR5KCkpIHJldHVybiB0cnVlOwogCiAgICAgLy8gU2Vy aWFsaXplIGFsbCB0aGUgdHlwZXMgb2YgbWV0YWRhdGEgdGhlcmUgYXJlCi0gICAgS2lzTWV0YURh dGE6OklPQmFja2VuZCogYmFja2VuZCA9IEtpc01ldGFEYXRhOjpJT0JhY2tlbmRSZWdpc3RyeTo6 aW5zdGFuY2UoKS0+Z2V0KCJ4bXAiKTsKKyAgICBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kICpiYWNr ZW5kID0gS2lzTWV0YWRhdGFCYWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCktPmdldCgieG1wIik7 CiAgICAgaWYgKCFiYWNrZW5kLT5zdXBwb3J0U2F2aW5nKCkpIHsKICAgICAgICAgZGJnRmlsZSA8 PCAiQmFja2VuZCAiIDw8IGJhY2tlbmQtPmlkKCkgPDwgIiBkb2VzIG5vdCBzdXBwb3J0IHNhdmlu Zy4iOwogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9wbHVnaW5zL2ltcGV4L3Rp ZmYvdGVzdHMva2lzX3RpZmZfdGVzdC5jcHAgYi9wbHVnaW5zL2ltcGV4L3RpZmYvdGVzdHMva2lz X3RpZmZfdGVzdC5jcHAKaW5kZXggMmIyZjA4MWNhNS4uNWNjMjE1ZjMwOSAxMDA2NDQKLS0tIGEv cGx1Z2lucy9pbXBleC90aWZmL3Rlc3RzL2tpc190aWZmX3Rlc3QuY3BwCisrKyBiL3BsdWdpbnMv aW1wZXgvdGlmZi90ZXN0cy9raXNfdGlmZl90ZXN0LmNwcApAQCAtMTUsOSArMTUsOSBAQAogI2lu Y2x1ZGUgPEtvQ29sb3JNb2RlbFN0YW5kYXJkSWRzLmg+CiAjaW5jbHVkZSA8S29Db2xvci5oPgog Ci0jaW5jbHVkZSAia2lzZXhpdjIva2lzX2V4aXYyLmgiCi0jaW5jbHVkZSAgPHNkay90ZXN0cy90 ZXN0dWkuaD4KICNpbmNsdWRlIDxLb0NvbG9yTW9kZWxTdGFuZGFyZElkc1V0aWxzLmg+CisjaW5j bHVkZSA8a2lzX21ldGFfZGF0YV9iYWNrZW5kX3JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8c2RrL3Rl c3RzL3Rlc3R1aS5oPgogCiAjaWZuZGVmIEZJTEVTX0RBVEFfRElSCiAjZXJyb3IgIkZJTEVTX0RB VEFfRElSIG5vdCBzZXQuIEEgZGlyZWN0b3J5IHdpdGggdGhlIGRhdGEgdXNlZCBmb3IgdGVzdGlu ZyB0aGUgaW1wb3J0aW5nIG9mIGZpbGVzIGluIGtyaXRhIgpAQCAtMjgsOCArMjgsNyBAQCBjb25z dCBRU3RyaW5nIFRpZmZNaW1ldHlwZSA9ICJpbWFnZS90aWZmIjsKIAogdm9pZCBLaXNUaWZmVGVz dDo6dGVzdEZpbGVzKCkKIHsKLSAgICAvLyBYWFg6IG1ha2UgdGhlIGV4aXYgaW8gYmFja2VuZHMg cmVhbCBwbHVnaW5zCi0gICAgS2lzRXhpdjI6OmluaXRpYWxpemUoKTsKKyAgICBLaXNNZXRhZGF0 YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKTsKIAogICAgIFFTdHJpbmdMaXN0IGV4Y2x1ZGVz OwogCmRpZmYgLS1naXQgYS9wbHVnaW5zL21ldGFkYXRhL0NNYWtlTGlzdHMudHh0IGIvcGx1Z2lu cy9tZXRhZGF0YS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi45YzdhOWUzZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9tZXRhZGF0YS9D TWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDcgQEAKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFL RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2NvbW1vbikKKworYWRkX3N1YmRpcmVjdG9yeShleGlmKQor YWRkX3N1YmRpcmVjdG9yeShpcHRjKQorYWRkX3N1YmRpcmVjdG9yeSh4bXApCisKK2FkZF9zdWJk aXJlY3RvcnkodGVzdHMpCmRpZmYgLS1naXQgYS9saWJzL3VpL2tpc2V4aXYyL2tpc19leGl2Mi5j cHAgYi9wbHVnaW5zL21ldGFkYXRhL2NvbW1vbi9raXNfZXhpdjJfY29tbW9uLmgKc2ltaWxhcml0 eSBpbmRleCA4MSUKcmVuYW1lIGZyb20gbGlicy91aS9raXNleGl2Mi9raXNfZXhpdjIuY3BwCnJl bmFtZSB0byBwbHVnaW5zL21ldGFkYXRhL2NvbW1vbi9raXNfZXhpdjJfY29tbW9uLmgKaW5kZXgg MjExYWZjYTRlZS4uM2MzMjk5ZTNiNyAxMDA2NDQKLS0tIGEvbGlicy91aS9raXNleGl2Mi9raXNf ZXhpdjIuY3BwCisrKyBiL3BsdWdpbnMvbWV0YWRhdGEvY29tbW9uL2tpc19leGl2Ml9jb21tb24u aApAQCAtNSwyMSArNSwyMyBAQAogICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIu MS1vci1sYXRlcgogICovCiAKLSNpbmNsdWRlICJraXNfZXhpdjIuaCIKKyNpZm5kZWYgX0tJU19F WElWMl9DT01NT05fSF8KKyNkZWZpbmUgX0tJU19FWElWMl9DT01NT05fSF8KIAogI2luY2x1ZGUg PFFEYXRlVGltZT4KIAotI2luY2x1ZGUgImtpc19pcHRjX2lvLmgiCi0jaW5jbHVkZSAia2lzX2V4 aWZfaW8uaCIKLSNpbmNsdWRlICJraXNfeG1wX2lvLmgiCisjaW5jbHVkZSA8ZXhpdjIvZXhpdjIu aHBwPgogCi0jaW5jbHVkZSA8a2lzX21ldGFfZGF0YV92YWx1ZS5oPgogI2luY2x1ZGUgPGtpc19k ZWJ1Zy5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfdmFsdWUuaD4KIAogLy8gLS0tLSBHZW5l cmljIGNvbnZlcnNpb24gZnVuY3Rpb25zIC0tLS0gLy8KIAogLy8gQ29udmVydCBhbiBleGl2IHZh bHVlIHRvIGEgS2lzTWV0YURhdGEgdmFsdWUKLUtpc01ldGFEYXRhOjpWYWx1ZSBleGl2VmFsdWVU b0tNRFZhbHVlKGNvbnN0IEV4aXYyOjpWYWx1ZTo6QXV0b1B0ciB2YWx1ZSwgYm9vbCBmb3JjZVNl cSwgS2lzTWV0YURhdGE6OlZhbHVlOjpWYWx1ZVR5cGUgYXJyYXlUeXBlKQoraW5saW5lIEtpc01l dGFEYXRhOjpWYWx1ZQorZXhpdlZhbHVlVG9LTURWYWx1ZShjb25zdCBFeGl2Mjo6VmFsdWU6OkF1 dG9QdHIgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VTZXEsCisgICAgICAg ICAgICAgICAgICAgIEtpc01ldGFEYXRhOjpWYWx1ZTo6VmFsdWVUeXBlIGFycmF5VHlwZSA9IEtp c01ldGFEYXRhOjpWYWx1ZTo6VW5vcmRlcmVkQXJyYXkpCiB7CiAgICAgc3dpdGNoICh2YWx1ZS0+ dHlwZUlkKCkpIHsKICAgICBjYXNlIEV4aXYyOjpzaWduZWRCeXRlOgpAQCAtMzAsOCArMzIsOCBA QCBLaXNNZXRhRGF0YTo6VmFsdWUgZXhpdlZhbHVlVG9LTURWYWx1ZShjb25zdCBFeGl2Mjo6VmFs dWU6OkF1dG9QdHIgdmFsdWUsIGJvb2wgZgogICAgICAgICByZXR1cm4gS2lzTWV0YURhdGE6OlZh bHVlKCk7CiAgICAgY2FzZSBFeGl2Mjo6dW5kZWZpbmVkOiB7CiAgICAgICAgIGRiZ01ldGFEYXRh IDw8ICJVbmRlZmluZWQgdmFsdWUgOiIgPDwgdmFsdWUtPnR5cGVJZCgpIDw8ICIgdmFsdWUgPSIg PDwgdmFsdWUtPnRvU3RyaW5nKCkuY19zdHIoKTsKLSAgICAgICAgUUJ5dGVBcnJheSBhcnJheSh2 YWx1ZS0+Y291bnQoKSAsIDApOwotICAgICAgICB2YWx1ZS0+Y29weSgoRXhpdjI6OmJ5dGUqKWFy cmF5LmRhdGEoKSwgRXhpdjI6OmludmFsaWRCeXRlT3JkZXIpOworICAgICAgICBRQnl0ZUFycmF5 IGFycmF5KHZhbHVlLT5jb3VudCgpLCAwKTsKKyAgICAgICAgdmFsdWUtPmNvcHkoKEV4aXYyOjpi eXRlICopYXJyYXkuZGF0YSgpLCBFeGl2Mjo6aW52YWxpZEJ5dGVPcmRlcik7CiAgICAgICAgIHJl dHVybiBLaXNNZXRhRGF0YTo6VmFsdWUoUVN0cmluZyhhcnJheS50b0Jhc2U2NCgpKSk7CiAgICAg fQogICAgIGNhc2UgRXhpdjI6OnVuc2lnbmVkQnl0ZToKQEAgLTkwLDIzICs5MiwyMiBAQCBLaXNN ZXRhRGF0YTo6VmFsdWUgZXhpdlZhbHVlVG9LTURWYWx1ZShjb25zdCBFeGl2Mjo6VmFsdWU6OkF1 dG9QdHIgdmFsdWUsIGJvb2wgZgogICAgIGNhc2UgRXhpdjI6OmxhbmdBbHQ6CiAgICAgZGVmYXVs dDogewogICAgICAgICBkYmdNZXRhRGF0YSA8PCAiVW5rbm93biB0eXBlIGlkIDoiIDw8IHZhbHVl LT50eXBlSWQoKSA8PCAiIHZhbHVlID0iIDw8IHZhbHVlLT50b1N0cmluZygpLmNfc3RyKCk7Ci0g ICAgICAgIC8vUV9BU1NFUlQoZmFsc2UpOyAvLyBUaGlzIHBvaW50IG11c3QgbmV2ZXIgYmUgcmVh Y2hlZCAhCisgICAgICAgIC8vIFFfQVNTRVJUKGZhbHNlKTsgLy8gVGhpcyBwb2ludCBtdXN0IG5l dmVyIGJlIHJlYWNoZWQgIQogICAgICAgICByZXR1cm4gS2lzTWV0YURhdGE6OlZhbHVlKCk7CiAg ICAgfQogICAgIH0KICAgICBkYmdNZXRhRGF0YSA8PCAiVW5rbm93biB0eXBlIGlkIDoiIDw8IHZh bHVlLT50eXBlSWQoKSA8PCAiIHZhbHVlID0iIDw8IHZhbHVlLT50b1N0cmluZygpLmNfc3RyKCk7 Ci0gICAgLy9RX0FTU0VSVChmYWxzZSk7IC8vIFRoaXMgcG9pbnQgbXVzdCBuZXZlciBiZSByZWFj aGVkICEKKyAgICAvLyBRX0FTU0VSVChmYWxzZSk7IC8vIFRoaXMgcG9pbnQgbXVzdCBuZXZlciBi ZSByZWFjaGVkICEKICAgICByZXR1cm4gS2lzTWV0YURhdGE6OlZhbHVlKCk7CiB9CiAKLQogLy8g Q29udmVydCBhIFF0VmFyaWFudCB0byBhbiBFeGl2IHZhbHVlCi1FeGl2Mjo6VmFsdWUqIHZhcmlh bnRUb0V4aXZWYWx1ZShjb25zdCBRVmFyaWFudCYgdmFyaWFudCwgRXhpdjI6OlR5cGVJZCB0eXBl KQoraW5saW5lIEV4aXYyOjpWYWx1ZSAqdmFyaWFudFRvRXhpdlZhbHVlKGNvbnN0IFFWYXJpYW50 ICZ2YXJpYW50LCBFeGl2Mjo6VHlwZUlkIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg ICAgY2FzZSBFeGl2Mjo6dW5kZWZpbmVkOiB7CiAgICAgICAgIFFCeXRlQXJyYXkgYXJyID0gUUJ5 dGVBcnJheTo6ZnJvbUJhc2U2NCh2YXJpYW50LnRvU3RyaW5nKCkudG9MYXRpbjEoKSk7Ci0gICAg ICAgIHJldHVybiBuZXcgRXhpdjI6OkRhdGFWYWx1ZSgoRXhpdjI6OmJ5dGUqKWFyci5kYXRhKCks IGFyci5zaXplKCkpOworICAgICAgICByZXR1cm4gbmV3IEV4aXYyOjpEYXRhVmFsdWUoKEV4aXYy OjpieXRlICopYXJyLmRhdGEoKSwgYXJyLnNpemUoKSk7CiAgICAgfQogICAgIGNhc2UgRXhpdjI6 OnVuc2lnbmVkQnl0ZToKICAgICAgICAgcmV0dXJuIG5ldyBFeGl2Mjo6VmFsdWVUeXBlPHVpbnQx Nl90PigodWludDE2X3QpdmFyaWFudC50b1VJbnQoKSk7CkBAIC0xMjQsMTIgKzEyNSwxNCBAQCBF eGl2Mjo6VmFsdWUqIHZhcmlhbnRUb0V4aXZWYWx1ZShjb25zdCBRVmFyaWFudCYgdmFyaWFudCwg RXhpdjI6OlR5cGVJZCB0eXBlKQogICAgIH0KICAgICBjYXNlIEV4aXYyOjphc2NpaVN0cmluZzoK ICAgICAgICAgaWYgKHZhcmlhbnQudHlwZSgpID09IFFWYXJpYW50OjpEYXRlVGltZSkgewotICAg ICAgICAgICAgcmV0dXJuIG5ldyBFeGl2Mjo6QXNjaWlWYWx1ZShxUHJpbnRhYmxlKFFMb2NhbGU6 OmMoKS50b1N0cmluZyh2YXJpYW50LnRvRGF0ZVRpbWUoKSwgUVN0cmluZ0xpdGVyYWwoInl5eXk6 TU06ZGQgaGg6bW06c3MiKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRXhpdjI6OkFzY2lp VmFsdWUoCisgICAgICAgICAgICAgICAgcVByaW50YWJsZShRTG9jYWxlOjpjKCkudG9TdHJpbmco dmFyaWFudC50b0RhdGVUaW1lKCksIFFTdHJpbmdMaXRlcmFsKCJ5eXl5Ok1NOmRkIGhoOm1tOnNz IikpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIG5ldyBFeGl2Mjo6QXNj aWlWYWx1ZShxUHJpbnRhYmxlKHZhcmlhbnQudG9TdHJpbmcoKSkpOwogICAgIGNhc2UgRXhpdjI6 OnN0cmluZzogewogICAgICAgICBpZiAodmFyaWFudC50eXBlKCkgPT0gUVZhcmlhbnQ6OkRhdGVU aW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEV4aXYyOjpTdHJpbmdWYWx1ZShxUHJpbnRh YmxlKFFMb2NhbGU6OmMoKS50b1N0cmluZyh2YXJpYW50LnRvRGF0ZVRpbWUoKSwgUVN0cmluZ0xp dGVyYWwoInl5eXk6TU06ZGQgaGg6bW06c3MiKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcg RXhpdjI6OlN0cmluZ1ZhbHVlKAorICAgICAgICAgICAgICAgIHFQcmludGFibGUoUUxvY2FsZTo6 YygpLnRvU3RyaW5nKHZhcmlhbnQudG9EYXRlVGltZSgpLCBRU3RyaW5nTGl0ZXJhbCgieXl5eTpN TTpkZCBoaDptbTpzcyIpKSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBu ZXcgRXhpdjI6OlN0cmluZ1ZhbHVlKHFQcmludGFibGUodmFyaWFudC50b1N0cmluZygpKSk7CiAg ICAgfQpAQCAtMTM3LDIzICsxNDAsMjMgQEAgRXhpdjI6OlZhbHVlKiB2YXJpYW50VG9FeGl2VmFs dWUoY29uc3QgUVZhcmlhbnQmIHZhcmlhbnQsIEV4aXYyOjpUeXBlSWQgdHlwZSkKICAgICAgICAg cmV0dXJuIG5ldyBFeGl2Mjo6Q29tbWVudFZhbHVlKHFQcmludGFibGUodmFyaWFudC50b1N0cmlu ZygpKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgZGJnTWV0YURhdGEgPDwgIlVuaGFuZGxlZCB0 eXBlOiIgPDwgdHlwZTsKLSAgICAgICAgLy9RX0FTU0VSVChmYWxzZSk7CisgICAgICAgIC8vIFFf QVNTRVJUKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVFlQRV8+Ci1FeGl2Mjo6VmFsdWUqIGFycmF5VG9FeGl2VmFsdWUoY29uc3QgS2lz TWV0YURhdGE6OlZhbHVlJiB2YWx1ZSkKK0V4aXYyOjpWYWx1ZSAqYXJyYXlUb0V4aXZWYWx1ZShj b25zdCBLaXNNZXRhRGF0YTo6VmFsdWUgJnZhbHVlKQogewotICAgIEV4aXYyOjpWYWx1ZVR5cGU8 X1RZUEVfPiogZXYgPSBuZXcgRXhpdjI6OlZhbHVlVHlwZTxfVFlQRV8+KCk7CisgICAgRXhpdjI6 OlZhbHVlVHlwZTxfVFlQRV8+ICpldiA9IG5ldyBFeGl2Mjo6VmFsdWVUeXBlPF9UWVBFXz4oKTsK ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlLmFzQXJyYXkoKS5zaXplKCk7ICsraSkgewog ICAgICAgICBldi0+dmFsdWVfLnB1c2hfYmFjayhxdmFyaWFudF9jYXN0PF9UWVBFXz4odmFsdWUu YXNBcnJheSgpW2ldLmFzVmFyaWFudCgpKSk7CiAgICAgfQogICAgIHJldHVybiBldjsKIH0KIAot Ly8gQ29udmVydCBhIEtpc01ldGFEYXRhIHRvIGFuIEV4aXYgdmFsdWUKLUV4aXYyOjpWYWx1ZSog a21kVmFsdWVUb0V4aXZWYWx1ZShjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUmIHZhbHVlLCBFeGl2 Mjo6VHlwZUlkIHR5cGUpCisvLy8gQ29udmVydCBhIEtpc01ldGFEYXRhIHRvIGFuIEV4aXYgdmFs dWUKK2lubGluZSBFeGl2Mjo6VmFsdWUgKmttZFZhbHVlVG9FeGl2VmFsdWUoY29uc3QgS2lzTWV0 YURhdGE6OlZhbHVlICZ2YWx1ZSwgRXhpdjI6OlR5cGVJZCB0eXBlKQogewogICAgIHN3aXRjaCAo dmFsdWUudHlwZSgpKSB7CiAgICAgY2FzZSBLaXNNZXRhRGF0YTo6VmFsdWU6OkludmFsaWQ6CkBA IC0xNjIsNyArMTY1LDcgQEAgRXhpdjI6OlZhbHVlKiBrbWRWYWx1ZVRvRXhpdlZhbHVlKGNvbnN0 IEtpc01ldGFEYXRhOjpWYWx1ZSYgdmFsdWUsIEV4aXYyOjpUeXBlSWQKICAgICAgICAgcmV0dXJu IHZhcmlhbnRUb0V4aXZWYWx1ZSh2YWx1ZS5hc1ZhcmlhbnQoKSwgdHlwZSk7CiAgICAgfQogICAg IGNhc2UgS2lzTWV0YURhdGE6OlZhbHVlOjpSYXRpb25hbDoKLSAgICAgICAgLy9RX0FTU0VSVCh0 eXBlID09IEV4aXYyOjpzaWduZWRSYXRpb25hbCB8fCB0eXBlID09IEV4aXYyOjp1bnNpZ25lZFJh dGlvbmFsKTsKKyAgICAgICAgLy8gUV9BU1NFUlQodHlwZSA9PSBFeGl2Mjo6c2lnbmVkUmF0aW9u YWwgfHwgdHlwZSA9PSBFeGl2Mjo6dW5zaWduZWRSYXRpb25hbCk7CiAgICAgICAgIGlmICh0eXBl ID09IEV4aXYyOjpzaWduZWRSYXRpb25hbCkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBFeGl2 Mjo6UmF0aW9uYWxWYWx1ZSh7dmFsdWUuYXNSYXRpb25hbCgpLm51bWVyYXRvciwgdmFsdWUuYXNS YXRpb25hbCgpLmRlbm9taW5hdG9yfSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xODUsMTAgKzE4 OCwxMSBAQCBFeGl2Mjo6VmFsdWUqIGttZFZhbHVlVG9FeGl2VmFsdWUoY29uc3QgS2lzTWV0YURh dGE6OlZhbHVlJiB2YWx1ZSwgRXhpdjI6OlR5cGVJZAogICAgICAgICBjYXNlIEV4aXYyOjpzaWdu ZWRMb25nOgogICAgICAgICAgICAgcmV0dXJuIGFycmF5VG9FeGl2VmFsdWU8aW50MzJfdD4odmFs dWUpOwogICAgICAgICBjYXNlIEV4aXYyOjpzdHJpbmc6IHsKLSAgICAgICAgICAgIEV4aXYyOjpT dHJpbmdWYWx1ZSogZXYgPSBuZXcgRXhpdjI6OlN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBF eGl2Mjo6U3RyaW5nVmFsdWUgKmV2ID0gbmV3IEV4aXYyOjpTdHJpbmdWYWx1ZSgpOwogICAgICAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5hc0FycmF5KCkuc2l6ZSgpOyArK2kpIHsK ICAgICAgICAgICAgICAgICBldi0+dmFsdWVfICs9IHF2YXJpYW50X2Nhc3Q8UVN0cmluZz4odmFs dWUuYXNBcnJheSgpW2ldLmFzVmFyaWFudCgpKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpOwotICAg ICAgICAgICAgICAgIGlmIChpICE9IHZhbHVlLmFzQXJyYXkoKS5zaXplKCkgLSAxKSBldi0+dmFs dWVfICs9ICcsJzsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSB2YWx1ZS5hc0FycmF5KCkuc2l6 ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgZXYtPnZhbHVlXyArPSAnLCc7CiAgICAgICAg ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZXY7CiAgICAgICAgIH0KQEAgLTIyMyw5ICsyMjcs MTEgQEAgRXhpdjI6OlZhbHVlKiBrbWRWYWx1ZVRvRXhpdlZhbHVlKGNvbnN0IEtpc01ldGFEYXRh OjpWYWx1ZSYgdmFsdWUsIEV4aXYyOjpUeXBlSWQKICAgICByZXR1cm4gMDsKIH0KIAotRXhpdjI6 OlZhbHVlKiBrbWRWYWx1ZVRvRXhpdlhtcFZhbHVlKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSYg dmFsdWUpCisvLy8gQ29udmVydCBhIEtpc01ldGFEYXRhIHRvIGFuIEV4aXYgdmFsdWUsIHdpdGhv dXQga25vd2luZyB0aGUgdGFyZ2V0ZWQgRXhpdjI6OlR5cGVJZAorLy8vIFRoaXMgZnVuY3Rpb24g c2hvdWxkIGJlIHVzZWQgZm9yIHNhdmluZyB0byBYTVAuCitpbmxpbmUgRXhpdjI6OlZhbHVlICpr bWRWYWx1ZVRvRXhpdlhtcFZhbHVlKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSAmdmFsdWUpCiB7 Ci0gICAgLy9RX0FTU0VSVCh2YWx1ZS50eXBlKCkgIT0gS2lzTWV0YURhdGE6OlZhbHVlOjpTdHJ1 Y3R1cmUpOworICAgIC8vIFFfQVNTRVJUKHZhbHVlLnR5cGUoKSAhPSBLaXNNZXRhRGF0YTo6VmFs dWU6OlN0cnVjdHVyZSk7CiAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKICAgICBjYXNlIEtp c01ldGFEYXRhOjpWYWx1ZTo6SW52YWxpZDoKICAgICAgICAgcmV0dXJuIG5ldyBFeGl2Mjo6RGF0 YVZhbHVlKEV4aXYyOjppbnZhbGlkVHlwZUlkKTsKQEAgLTIzOCw3ICsyNDQsNyBAQCBFeGl2Mjo6 VmFsdWUqIGttZFZhbHVlVG9FeGl2WG1wVmFsdWUoY29uc3QgS2lzTWV0YURhdGE6OlZhbHVlJiB2 YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4aXYyOjpYbXBUZXh0VmFsdWUoIkZh bHNlIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvL1Ff QVNTRVJUKHZhci5jYW5Db252ZXJ0KFFWYXJpYW50OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIC8v IFFfQVNTRVJUKHZhci5jYW5Db252ZXJ0KFFWYXJpYW50OjpTdHJpbmcpKTsKICAgICAgICAgICAg IHJldHVybiBuZXcgRXhpdjI6OlhtcFRleHRWYWx1ZSh2YXIudG9TdHJpbmcoKS50b0xhdGluMSgp LmNvbnN0RGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MSw3ICsyNTcsNyBAQCBFeGl2 Mjo6VmFsdWUqIGttZFZhbHVlVG9FeGl2WG1wVmFsdWUoY29uc3QgS2lzTWV0YURhdGE6OlZhbHVl JiB2YWx1ZSkKICAgICBjYXNlIEtpc01ldGFEYXRhOjpWYWx1ZTo6QWx0ZXJuYXRpdmVBcnJheToK ICAgICBjYXNlIEtpc01ldGFEYXRhOjpWYWx1ZTo6T3JkZXJlZEFycmF5OgogICAgIGNhc2UgS2lz TWV0YURhdGE6OlZhbHVlOjpVbm9yZGVyZWRBcnJheTogewotICAgICAgICBFeGl2Mjo6WG1wQXJy YXlWYWx1ZSogYXJyViA9IG5ldyBFeGl2Mjo6WG1wQXJyYXlWYWx1ZTsKKyAgICAgICAgRXhpdjI6 OlhtcEFycmF5VmFsdWUgKmFyclYgPSBuZXcgRXhpdjI6OlhtcEFycmF5VmFsdWU7CiAgICAgICAg IHN3aXRjaCAodmFsdWUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgS2lzTWV0YURhdGE6OlZhbHVl OjpPcmRlcmVkQXJyYXk6CiAgICAgICAgICAgICBhcnJWLT5zZXRYbXBBcnJheVR5cGUoRXhpdjI6 OlhtcFZhbHVlOjp4YVNlcSk7CkBAIC0yNjYsOCArMjcyLDggQEAgRXhpdjI6OlZhbHVlKiBrbWRW YWx1ZVRvRXhpdlhtcFZhbHVlKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSYgdmFsdWUpCiAgICAg ICAgICAgICAvLyBDYW5ub3QgaGFwcGVuCiAgICAgICAgICAgICA7CiAgICAgICAgIH0KLSAgICAg ICAgUV9GT1JFQUNIIChjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUmIHYsIHZhbHVlLmFzQXJyYXko KSkgewotICAgICAgICAgICAgRXhpdjI6OlZhbHVlKiBldiA9IGttZFZhbHVlVG9FeGl2WG1wVmFs dWUodik7CisgICAgICAgIFFfRk9SRUFDSCAoY29uc3QgS2lzTWV0YURhdGE6OlZhbHVlICZ2LCB2 YWx1ZS5hc0FycmF5KCkpIHsKKyAgICAgICAgICAgIEV4aXYyOjpWYWx1ZSAqZXYgPSBrbWRWYWx1 ZVRvRXhpdlhtcFZhbHVlKHYpOwogICAgICAgICAgICAgaWYgKGV2KSB7CiAgICAgICAgICAgICAg ICAgYXJyVi0+cmVhZChldi0+dG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGV2 OwpAQCAtMjc2LDE3ICsyODIsMTYgQEAgRXhpdjI6OlZhbHVlKiBrbWRWYWx1ZVRvRXhpdlhtcFZh bHVlKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSYgdmFsdWUpCiAgICAgICAgIHJldHVybiBhcnJW OwogICAgIH0KICAgICBjYXNlIEtpc01ldGFEYXRhOjpWYWx1ZTo6TGFuZ0FycmF5OiB7Ci0gICAg ICAgIEV4aXYyOjpWYWx1ZSogYXJyViA9IG5ldyBFeGl2Mjo6TGFuZ0FsdFZhbHVlOworICAgICAg ICBFeGl2Mjo6VmFsdWUgKmFyclYgPSBuZXcgRXhpdjI6OkxhbmdBbHRWYWx1ZTsKICAgICAgICAg UU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+IGxhbmdBcnJheSA9IHZhbHVlLmFzTGFu Z0FycmF5KCk7Ci0gICAgICAgIGZvciAoUU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+ OjppdGVyYXRvciBpdCA9IGxhbmdBcnJheS5iZWdpbigpOwotICAgICAgICAgICAgIGl0ICE9IGxh bmdBcnJheS5lbmQoKTsgKytpdCkgeworICAgICAgICBmb3IgKFFNYXA8UVN0cmluZywgS2lzTWV0 YURhdGE6OlZhbHVlPjo6aXRlcmF0b3IgaXQgPSBsYW5nQXJyYXkuYmVnaW4oKTsgaXQgIT0gbGFu Z0FycmF5LmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBRU3RyaW5nIGV4aXZWYWw7CiAgICAg ICAgICAgICBpZiAoaXQua2V5KCkgIT0gIngtZGVmYXVsdCIpIHsKICAgICAgICAgICAgICAgICBl eGl2VmFsID0gImxhbmc9IiArIGl0LmtleSgpICsgJyAnOwogICAgICAgICAgICAgfQotICAgICAg ICAgICAgLy9RX0FTU0VSVChpdC52YWx1ZSgpLnR5cGUoKSA9PSBLaXNNZXRhRGF0YTo6VmFsdWU6 OlZhcmlhbnQpOworICAgICAgICAgICAgLy8gUV9BU1NFUlQoaXQudmFsdWUoKS50eXBlKCkgPT0g S2lzTWV0YURhdGE6OlZhbHVlOjpWYXJpYW50KTsKICAgICAgICAgICAgIFFWYXJpYW50IHZhciA9 IGl0LnZhbHVlKCkuYXNWYXJpYW50KCk7Ci0gICAgICAgICAgICAvL1FfQVNTRVJUKHZhci50eXBl KCkgPT0gUVZhcmlhbnQ6OlN0cmluZyk7CisgICAgICAgICAgICAvLyBRX0FTU0VSVCh2YXIudHlw ZSgpID09IFFWYXJpYW50OjpTdHJpbmcpOwogICAgICAgICAgICAgZXhpdlZhbCArPSB2YXIudG9T dHJpbmcoKTsKICAgICAgICAgICAgIGFyclYtPnJlYWQoZXhpdlZhbC50b0xhdGluMSgpLmNvbnN0 RGF0YSgpKTsKICAgICAgICAgfQpAQCAtMjk3LDE4ICszMDIsOCBAQCBFeGl2Mjo6VmFsdWUqIGtt ZFZhbHVlVG9FeGl2WG1wVmFsdWUoY29uc3QgS2lzTWV0YURhdGE6OlZhbHVlJiB2YWx1ZSkKICAg ICAgICAgd2FybktyaXRhIDw8ICJLaXNFeGl2MjogVW5oYW5kbGVkIHZhbHVlIHR5cGUiOwogICAg ICAgICByZXR1cm4gMDsKICAgICB9Ci0KICAgICB9CiAgICAgd2FybktyaXRhIDw8ICJLaXNFeGl2 MjogVW5oYW5kbGVkIHZhbHVlIHR5cGUiOwogICAgIHJldHVybiAwOwogfQotCi12b2lkIEtpc0V4 aXYyOjppbml0aWFsaXplKCkKLXsKLSAgICAvLyBYWFhfRVhJVjogbWFrZSB0aGUgZXhpdiBpbyBi YWNrZW5kcyByZWFsIHBsdWdpbnMKLQotICAgIEtpc01ldGFEYXRhOjpJT0JhY2tlbmRSZWdpc3Ry eSogaW9yZWcgPSBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kUmVnaXN0cnk6Omluc3RhbmNlKCk7Ci0g ICAgaW9yZWctPmFkZChuZXcgS2lzSXB0Y0lPKTsKLSAgICBpb3JlZy0+YWRkKG5ldyBLaXNFeGlm SU8pOwotICAgIGlvcmVnLT5hZGQobmV3IEtpc1hNUElPKTsKLX0KKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvbGlicy91aS9raXNleGl2Mi9raXNfZXhpdjJfY29uc3RhbnRzLmggYi9wbHVnaW5zL21ldGFk YXRhL2NvbW1vbi9raXNfZXhpdjJfY29uc3RhbnRzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJl bmFtZSBmcm9tIGxpYnMvdWkva2lzZXhpdjIva2lzX2V4aXYyX2NvbnN0YW50cy5oCnJlbmFtZSB0 byBwbHVnaW5zL21ldGFkYXRhL2NvbW1vbi9raXNfZXhpdjJfY29uc3RhbnRzLmgKZGlmZiAtLWdp dCBhL3BsdWdpbnMvbWV0YWRhdGEvZXhpZi9DTWFrZUxpc3RzLnR4dCBiL3BsdWdpbnMvbWV0YWRh dGEvZXhpZi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5hNmNmNjg1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9tZXRhZGF0YS9leGlm L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTcgQEAKK3NldChrcml0YWV4aWZfU09VUkNFUwor ICAgIGtpc19leGlmX2lvLmNwcAorICAgIGtpc19leGlmX3BsdWdpbi5jcHAKKykKKworYWRkX2xp YnJhcnkoa3JpdGFleGlmIE1PRFVMRSAke2tyaXRhZXhpZl9TT1VSQ0VTfSkKKworZ2VuZXJhdGVf ZXhwb3J0X2hlYWRlcihrcml0YWV4aWYpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhrcml0YWV4 aWYKKyAgICBQUklWQVRFCisgICAgICAgIGtyaXRhbWV0YWRhdGEKKyAgICAgICAgS0Y1OjpDb3Jl QWRkb25zCisgICAgICAgIExpYkV4aXYyOjpMaWJFeGl2MgorKQorCitpbnN0YWxsKFRBUkdFVFMg a3JpdGFleGlmIERFU1RJTkFUSU9OICR7S1JJVEFfUExVR0lOX0lOU1RBTExfRElSfSkKZGlmZiAt LWdpdCBhL2xpYnMvdWkva2lzZXhpdjIva2lzX2V4aWZfaW8uY3BwIGIvcGx1Z2lucy9tZXRhZGF0 YS9leGlmL2tpc19leGlmX2lvLmNwcApzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBs aWJzL3VpL2tpc2V4aXYyL2tpc19leGlmX2lvLmNwcApyZW5hbWUgdG8gcGx1Z2lucy9tZXRhZGF0 YS9leGlmL2tpc19leGlmX2lvLmNwcAppbmRleCA4NDc3YmEzNDU5Li5lMTIxMDdlMTRjIDEwMDY0 NAotLS0gYS9saWJzL3VpL2tpc2V4aXYyL2tpc19leGlmX2lvLmNwcAorKysgYi9wbHVnaW5zL21l dGFkYXRhL2V4aWYva2lzX2V4aWZfaW8uY3BwCkBAIC03LDggKzcsOCBAQAogCiAjaW5jbHVkZSAi a2lzX2V4aWZfaW8uaCIKIAotI2luY2x1ZGUgPGV4aXYyL2V4aWYuaHBwPgogI2luY2x1ZGUgPGV4 aXYyL2Vycm9yLmhwcD4KKyNpbmNsdWRlIDxleGl2Mi9leGlmLmhwcD4KIAogI2luY2x1ZGUgPFFC eXRlQXJyYXk+CiAjaW5jbHVkZSA8UURhdGU+CkBAIC0yMCw0MiArMjAsMzcgQEAKICNpbmNsdWRl IDxRdEVuZGlhbj4KIAogI2luY2x1ZGUgPGtpc19kZWJ1Zy5oPgotI2luY2x1ZGUgPGtpc19tZXRh X2RhdGFfc3RvcmUuaD4KKyNpbmNsdWRlIDxraXNfZXhpdjJfY29tbW9uLmg+CisjaW5jbHVkZSA8 a2lzX2V4aXYyX2NvbnN0YW50cy5oPgogI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfZW50cnkuaD4K LSNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3ZhbHVlLmg+CiAjaW5jbHVkZSA8a2lzX21ldGFfZGF0 YV9zY2hlbWEuaD4KICNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3NjaGVtYV9yZWdpc3RyeS5oPgot Ci0jaW5jbHVkZSAia2lzX2V4aXYyLmgiCi0jaW5jbHVkZSAia2lzX2V4aXYyX2NvbnN0YW50cy5o IgotCi1zdHJ1Y3QgS2lzRXhpZklPOjpQcml2YXRlIHsKLX07CisjaW5jbHVkZSA8a2lzX21ldGFf ZGF0YV9zdG9yZS5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfdmFsdWUuaD4KIAogLy8gLS0t LSBFeGNlcHRpb24gY29udmVyc2lvbiBmdW5jdGlvbnMgLS0tLSAvLwogCiAvLyBjb252ZXJ0IEV4 aWZWZXJzaW9uIGFuZCBGbGFzaHBpeFZlcnNpb24gdG8gYSBLaXNNZXRhRGF0YSB2YWx1ZQogS2lz TWV0YURhdGE6OlZhbHVlIGV4aWZWZXJzaW9uVG9LTURWYWx1ZShjb25zdCBFeGl2Mjo6VmFsdWU6 OkF1dG9QdHIgdmFsdWUpCiB7Ci0gICAgY29uc3QgRXhpdjI6OkRhdGFWYWx1ZSogZHZhbHVlID0g ZHluYW1pY19jYXN0PGNvbnN0IEV4aXYyOjpEYXRhVmFsdWUqPigmKnZhbHVlKTsKKyAgICBjb25z dCBFeGl2Mjo6RGF0YVZhbHVlICpkdmFsdWUgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgRXhpdjI6OkRh dGFWYWx1ZSAqPigmKnZhbHVlKTsKICAgICBpZiAoZHZhbHVlKSB7CiAgICAgICAgIFFfQVNTRVJU KGR2YWx1ZSk7CiAgICAgICAgIFFCeXRlQXJyYXkgYXJyYXkoZHZhbHVlLT5jb3VudCgpLCAwKTsK LSAgICAgICAgZHZhbHVlLT5jb3B5KChFeGl2Mjo6Ynl0ZSopYXJyYXkuZGF0YSgpKTsKKyAgICAg ICAgZHZhbHVlLT5jb3B5KChFeGl2Mjo6Ynl0ZSAqKWFycmF5LmRhdGEoKSk7CiAgICAgICAgIHJl dHVybiBLaXNNZXRhRGF0YTo6VmFsdWUoUVN0cmluZyhhcnJheSkpOwotICAgIH0KLSAgICBlbHNl IHsKKyAgICB9IGVsc2UgewogICAgICAgICBRX0FTU0VSVCh2YWx1ZS0+dHlwZUlkKCkgPT0gRXhp djI6OmFzY2lpU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIEtpc01ldGFEYXRhOjpWYWx1ZShRU3Ry aW5nOjpmcm9tTGF0aW4xKHZhbHVlLT50b1N0cmluZygpLmNfc3RyKCkpKTsKICAgICB9CiB9CiAK IC8vIGNvbnZlcnQgZnJvbSBLaXNNZXRhRGF0YSB2YWx1ZSB0byBFeGlmVmVyc2lvbiBhbmQgRmxh c2hwaXhWZXJzaW9uCi1FeGl2Mjo6VmFsdWUqIGttZFZhbHVlVG9FeGlmVmVyc2lvbihjb25zdCBL aXNNZXRhRGF0YTo6VmFsdWUmIHZhbHVlKQorRXhpdjI6OlZhbHVlICprbWRWYWx1ZVRvRXhpZlZl cnNpb24oY29uc3QgS2lzTWV0YURhdGE6OlZhbHVlICZ2YWx1ZSkKIHsKLSAgICBFeGl2Mjo6RGF0 YVZhbHVlKiBkdmFsdWUgPSBuZXcgRXhpdjI6OkRhdGFWYWx1ZTsKKyAgICBFeGl2Mjo6RGF0YVZh bHVlICpkdmFsdWUgPSBuZXcgRXhpdjI6OkRhdGFWYWx1ZTsKICAgICBRU3RyaW5nIHZlciA9IHZh bHVlLmFzVmFyaWFudCgpLnRvU3RyaW5nKCk7Ci0gICAgZHZhbHVlLT5yZWFkKChjb25zdCBFeGl2 Mjo6Ynl0ZSopdmVyLnRvTGF0aW4xKCkuY29uc3REYXRhKCksIHZlci5zaXplKCkpOworICAgIGR2 YWx1ZS0+cmVhZCgoY29uc3QgRXhpdjI6OmJ5dGUgKil2ZXIudG9MYXRpbjEoKS5jb25zdERhdGEo KSwgdmVyLnNpemUoKSk7CiAgICAgcmV0dXJuIGR2YWx1ZTsKIH0KIApAQCAtNjMsNyArNTgsNyBA QCBFeGl2Mjo6VmFsdWUqIGttZFZhbHVlVG9FeGlmVmVyc2lvbihjb25zdCBLaXNNZXRhRGF0YTo6 VmFsdWUmIHZhbHVlKQogS2lzTWV0YURhdGE6OlZhbHVlIGV4aWZBcnJheVRvS01ESW50T3JkZXJl ZEFycmF5KGNvbnN0IEV4aXYyOjpWYWx1ZTo6QXV0b1B0ciB2YWx1ZSkKIHsKICAgICBRTGlzdDxL aXNNZXRhRGF0YTo6VmFsdWU+IHY7Ci0gICAgY29uc3QgRXhpdjI6OkRhdGFWYWx1ZSogZHZhbHVl ID0gZHluYW1pY19jYXN0PGNvbnN0IEV4aXYyOjpEYXRhVmFsdWUqPigmKnZhbHVlKTsKKyAgICBj b25zdCBFeGl2Mjo6RGF0YVZhbHVlICpkdmFsdWUgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgRXhpdjI6 OkRhdGFWYWx1ZSAqPigmKnZhbHVlKTsKICAgICBpZiAoZHZhbHVlKSB7CiAgICAgICAgIGZvciAo bG9uZyBpID0gMDsgaSA8IGR2YWx1ZS0+Y291bnQoKTsgaSsrKSB7CiAgICAgICAgICAgICB2LnB1 c2hfYmFjayh7KGludClkdmFsdWUtPnRvTG9uZyhpKX0pOwpAQCAtNzcsNyArNzIsNyBAQCBLaXNN ZXRhRGF0YTo6VmFsdWUgZXhpZkFycmF5VG9LTURJbnRPcmRlcmVkQXJyYXkoY29uc3QgRXhpdjI6 OlZhbHVlOjpBdXRvUHRyIHZhbAogfQogCiAvLyBDb252ZXJ0IGEgS2lzTWV0YURhdGEgYXJyYXkg b2YgaW50ZWdlciB0byBhbiBleGlmIGFycmF5IG9mIGludGVnZXIgc3RyaW5nCi1FeGl2Mjo6VmFs dWUqIGttZEludE9yZGVyZWRBcnJheVRvRXhpZkFycmF5KGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1 ZSYgdmFsdWUpCitFeGl2Mjo6VmFsdWUgKmttZEludE9yZGVyZWRBcnJheVRvRXhpZkFycmF5KGNv bnN0IEtpc01ldGFEYXRhOjpWYWx1ZSAmdmFsdWUpCiB7CiAgICAgc3RkOjp2ZWN0b3I8RXhpdjI6 OmJ5dGU+IHY7CiAgICAgZm9yIChjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUgJml0IDogdmFsdWUu YXNBcnJheSgpKSB7CkBAIC0xMjAsMjIgKzExNSwyMyBAQCBFeGl2Mjo6Qnl0ZU9yZGVyIGludmVy dEJ5dGVPcmRlcihFeGl2Mjo6Qnl0ZU9yZGVyIG9yZGVyKQogICAgIHJldHVybiBFeGl2Mjo6aW52 YWxpZEJ5dGVPcmRlcjsKIH0KIAotCiBLaXNNZXRhRGF0YTo6VmFsdWUgZXhpZk9FQ0ZUb0tNRE9F Q0ZTdHJ1Y3R1cmUoY29uc3QgRXhpdjI6OlZhbHVlOjpBdXRvUHRyIHZhbHVlLCBFeGl2Mjo6Qnl0 ZU9yZGVyIG9yZGVyKQogewogICAgIFFNYXA8UVN0cmluZywgS2lzTWV0YURhdGE6OlZhbHVlPiBv ZWNmU3RydWN0dXJlOwotICAgIGNvbnN0IEV4aXYyOjpEYXRhVmFsdWUqIGR2YWx1ZSA9IGR5bmFt aWNfY2FzdDxjb25zdCBFeGl2Mjo6RGF0YVZhbHVlKj4oJip2YWx1ZSk7CisgICAgY29uc3QgRXhp djI6OkRhdGFWYWx1ZSAqZHZhbHVlID0gZHluYW1pY19jYXN0PGNvbnN0IEV4aXYyOjpEYXRhVmFs dWUgKj4oJip2YWx1ZSk7CiAgICAgUV9BU1NFUlQoZHZhbHVlKTsKICAgICBRQnl0ZUFycmF5IGFy cmF5KGR2YWx1ZS0+Y291bnQoKSwgMCk7CiAKLSAgICBkdmFsdWUtPmNvcHkoKEV4aXYyOjpieXRl KilhcnJheS5kYXRhKCkpOwotICAgIGludCBjb2x1bW5zID0gZml4RW5kaWFuZXNzPHF1aW50MTY+ KChyZWludGVycHJldF9jYXN0PHF1aW50MTYqPihhcnJheS5kYXRhKCkpKVswXSwgb3JkZXIpOwot ICAgIGludCByb3dzID0gZml4RW5kaWFuZXNzPHF1aW50MTY+KChyZWludGVycHJldF9jYXN0PHF1 aW50MTYqPihhcnJheS5kYXRhKCkpKVsxXSwgb3JkZXIpOworICAgIGR2YWx1ZS0+Y29weSgoRXhp djI6OmJ5dGUgKilhcnJheS5kYXRhKCkpOworICAgIGludCBjb2x1bW5zID0gZml4RW5kaWFuZXNz PHF1aW50MTY+KChyZWludGVycHJldF9jYXN0PHF1aW50MTYgKj4oYXJyYXkuZGF0YSgpKSlbMF0s IG9yZGVyKTsKKyAgICBpbnQgcm93cyA9IGZpeEVuZGlhbmVzczxxdWludDE2PigocmVpbnRlcnBy ZXRfY2FzdDxxdWludDE2ICo+KGFycmF5LmRhdGEoKSkpWzFdLCBvcmRlcik7CiAKLSAgICBpZiAo KGNvbHVtbnMgKiByb3dzICsgNCkgPiBkdmFsdWUtPmNvdW50KCkpIHsgLy8gU29tZXRpbWUgYnl0 ZU9yZGVyIGdldCBtZXNzZWQgdXAgKGVzcGVjaWFsbHkgaWYgbWV0YWRhdGEgZ290IHNhdmVkIHdp dGgga2V4aXYyIGxpYnJhcnksIG9yIGFueSBsaWJyYXJ5IHRoYXQgZG9lc24ndCBzYXZlIGJhY2sg d2l0aCB0aGUgc2FtZSBieXRlIG9yZGVyIGFzIHRoZSBjYW1lcmEpCisgICAgaWYgKChjb2x1bW5z ICogcm93cyArIDQpCisgICAgICAgID4gZHZhbHVlLT5jb3VudCgpKSB7IC8vIFNvbWV0aW1lIGJ5 dGVPcmRlciBnZXQgbWVzc2VkIHVwIChlc3BlY2lhbGx5IGlmIG1ldGFkYXRhIGdvdCBzYXZlZCB3 aXRoIGtleGl2MiBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBh bnkgbGlicmFyeSB0aGF0IGRvZXNuJ3Qgc2F2ZSBiYWNrIHdpdGggdGhlIHNhbWUgYnl0ZSBvcmRl ciBhcyB0aGUgY2FtZXJhKQogICAgICAgICBvcmRlciA9IGludmVydEJ5dGVPcmRlcihvcmRlcik7 Ci0gICAgICAgIGNvbHVtbnMgPSBmaXhFbmRpYW5lc3M8cXVpbnQxNj4oKHJlaW50ZXJwcmV0X2Nh c3Q8cXVpbnQxNio+KGFycmF5LmRhdGEoKSkpWzBdLCBvcmRlcik7Ci0gICAgICAgIHJvd3MgPSBm aXhFbmRpYW5lc3M8cXVpbnQxNj4oKHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQxNio+KGFycmF5LmRh dGEoKSkpWzFdLCBvcmRlcik7CisgICAgICAgIGNvbHVtbnMgPSBmaXhFbmRpYW5lc3M8cXVpbnQx Nj4oKHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQxNiAqPihhcnJheS5kYXRhKCkpKVswXSwgb3JkZXIp OworICAgICAgICByb3dzID0gZml4RW5kaWFuZXNzPHF1aW50MTY+KChyZWludGVycHJldF9jYXN0 PHF1aW50MTYgKj4oYXJyYXkuZGF0YSgpKSlbMV0sIG9yZGVyKTsKICAgICAgICAgUV9BU1NFUlQo KGNvbHVtbnMgKiByb3dzICsgNCkgPiBkdmFsdWUtPmNvdW50KCkpOwogICAgIH0KICAgICBvZWNm U3RydWN0dXJlWyJDb2x1bW5zIl0gPSBLaXNNZXRhRGF0YTo6VmFsdWUoY29sdW1ucyk7CkBAIC0x NTYsMTAgKzE1MiwxMSBAQCBLaXNNZXRhRGF0YTo6VmFsdWUgZXhpZk9FQ0ZUb0tNRE9FQ0ZTdHJ1 Y3R1cmUoY29uc3QgRXhpdjI6OlZhbHVlOjpBdXRvUHRyIHZhbHVlLAogCiAgICAgb2VjZlN0cnVj dHVyZVsiTmFtZXMiXSA9IEtpc01ldGFEYXRhOjpWYWx1ZShuYW1lcywgS2lzTWV0YURhdGE6OlZh bHVlOjpPcmRlcmVkQXJyYXkpOwogICAgIFFMaXN0PEtpc01ldGFEYXRhOjpWYWx1ZT4gdmFsdWVz OwotICAgIHFpbnQzMiogZGF0YUl0ID0gcmVpbnRlcnByZXRfY2FzdDxxaW50MzIqPihhcnJheS5k YXRhKCkgKyBpbmRleCk7CisgICAgcWludDMyICpkYXRhSXQgPSByZWludGVycHJldF9jYXN0PHFp bnQzMiAqPihhcnJheS5kYXRhKCkgKyBpbmRleCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj b2x1bW5zOyBpKyspIHsKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspIHsK LSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoS2lzTWV0YURhdGE6OlZhbHVlKEtpc01ldGFEYXRh OjpSYXRpb25hbChmaXhFbmRpYW5lc3M8cWludDMyPihkYXRhSXRbMF0sIG9yZGVyKSwgZml4RW5k aWFuZXNzPHFpbnQzMj4oZGF0YUl0WzFdLCBvcmRlcikpKSk7CisgICAgICAgICAgICB2YWx1ZXMu YXBwZW5kKEtpc01ldGFEYXRhOjpWYWx1ZSgKKyAgICAgICAgICAgICAgICBLaXNNZXRhRGF0YTo6 UmF0aW9uYWwoZml4RW5kaWFuZXNzPHFpbnQzMj4oZGF0YUl0WzBdLCBvcmRlciksIGZpeEVuZGlh bmVzczxxaW50MzI+KGRhdGFJdFsxXSwgb3JkZXIpKSkpOwogICAgICAgICAgICAgZGF0YUl0ICs9 IDI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjgsNyArMTY1LDcgQEAgS2lzTWV0YURhdGE6OlZh bHVlIGV4aWZPRUNGVG9LTURPRUNGU3RydWN0dXJlKGNvbnN0IEV4aXYyOjpWYWx1ZTo6QXV0b1B0 ciB2YWx1ZSwKICAgICByZXR1cm4gS2lzTWV0YURhdGE6OlZhbHVlKG9lY2ZTdHJ1Y3R1cmUpOwog fQogCi1FeGl2Mjo6VmFsdWUqIGttZE9FQ0ZTdHJ1Y3R1cmVUb0V4aWZPRUNGKGNvbnN0IEtpc01l dGFEYXRhOjpWYWx1ZSYgdmFsdWUpCitFeGl2Mjo6VmFsdWUgKmttZE9FQ0ZTdHJ1Y3R1cmVUb0V4 aWZPRUNGKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSAmdmFsdWUpCiB7CiAgICAgUU1hcDxRU3Ry aW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+IG9lY2ZTdHJ1Y3R1cmUgPSB2YWx1ZS5hc1N0cnVjdHVy ZSgpOwogICAgIGNvbnN0IHF1aW50MTYgY29sdW1ucyA9IHN0YXRpY19jYXN0PHF1aW50MTY+KG9l Y2ZTdHJ1Y3R1cmVbIkNvbHVtbnMiXS5hc1ZhcmlhbnQoKS50b1VJbnQoKSk7CkBAIC0xNzYsNyAr MTczLDcgQEAgRXhpdjI6OlZhbHVlKiBrbWRPRUNGU3RydWN0dXJlVG9FeGlmT0VDRihjb25zdCBL aXNNZXRhRGF0YTo6VmFsdWUmIHZhbHVlKQogCiAgICAgUUxpc3Q8S2lzTWV0YURhdGE6OlZhbHVl PiBuYW1lcyA9IG9lY2ZTdHJ1Y3R1cmVbIk5hbWVzIl0uYXNBcnJheSgpOwogICAgIFFMaXN0PEtp c01ldGFEYXRhOjpWYWx1ZT4gdmFsdWVzID0gb2VjZlN0cnVjdHVyZVsiVmFsdWVzIl0uYXNBcnJh eSgpOwotICAgIFFfQVNTRVJUKGNvbHVtbnMqcm93cyA9PSB2YWx1ZXMuc2l6ZSgpKTsKKyAgICBR X0FTU0VSVChjb2x1bW5zICogcm93cyA9PSB2YWx1ZXMuc2l6ZSgpKTsKICAgICBpbnQgbGVuZ3Ro ID0gNCArIHJvd3MgKiBjb2x1bW5zICogODsgLy8gVGhlIDQgYnl0ZSBmb3Igc3RvcmluZyByb3dz L2NvbHVtbnMgYW5kIHRoZSByb3dzKmNvbHVtbnMqc2l6ZW9mKHJhdGlvbmFsKQogICAgIGJvb2wg c2F2ZU5hbWVzID0gKCFuYW1lcy5lbXB0eSgpICYmIG5hbWVzWzBdLmFzVmFyaWFudCgpLnRvU3Ry aW5nKCkuc2l6ZSgpID4gMCk7CiAgICAgaWYgKHNhdmVOYW1lcykgewpAQCAtMTg1LDggKzE4Miw4 IEBAIEV4aXYyOjpWYWx1ZSoga21kT0VDRlN0cnVjdHVyZVRvRXhpZk9FQ0YoY29uc3QgS2lzTWV0 YURhdGE6OlZhbHVlJiB2YWx1ZSkKICAgICAgICAgfQogICAgIH0KICAgICBRQnl0ZUFycmF5IGFy cmF5KGxlbmd0aCwgMCk7Ci0gICAgKHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQxNio+KGFycmF5LmRh dGEoKSkpWzBdID0gY29sdW1uczsKLSAgICAocmVpbnRlcnByZXRfY2FzdDxxdWludDE2Kj4oYXJy YXkuZGF0YSgpKSlbMV0gPSByb3dzOworICAgIChyZWludGVycHJldF9jYXN0PHF1aW50MTYgKj4o YXJyYXkuZGF0YSgpKSlbMF0gPSBjb2x1bW5zOworICAgIChyZWludGVycHJldF9jYXN0PHF1aW50 MTYgKj4oYXJyYXkuZGF0YSgpKSlbMV0gPSByb3dzOwogICAgIGludCBpbmRleCA9IDQ7CiAgICAg aWYgKHNhdmVOYW1lcykgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnM7IGkr KykgewpAQCAtMTk2LDEzICsxOTMsMTMgQEAgRXhpdjI6OlZhbHVlKiBrbWRPRUNGU3RydWN0dXJl VG9FeGlmT0VDRihjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUmIHZhbHVlKQogICAgICAgICAgICAg aW5kZXggKz0gbmFtZS5zaXplKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcWludDMyKiBkYXRh SXQgPSByZWludGVycHJldF9jYXN0PHFpbnQzMio+KGFycmF5LmRhdGEoKSArIGluZGV4KTsKKyAg ICBxaW50MzIgKmRhdGFJdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cWludDMyICo+KGFycmF5LmRhdGEo KSArIGluZGV4KTsKICAgICBmb3IgKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSAmaXQgOiB2YWx1 ZXMpIHsKICAgICAgICAgZGF0YUl0WzBdID0gaXQuYXNSYXRpb25hbCgpLm51bWVyYXRvcjsKICAg ICAgICAgZGF0YUl0WzFdID0gaXQuYXNSYXRpb25hbCgpLmRlbm9taW5hdG9yOwogICAgICAgICBk YXRhSXQgKz0gMjsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyBFeGl2Mjo6RGF0YVZhbHVlKChjb25z dCBFeGl2Mjo6Ynl0ZSopYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgIHJldHVybiBu ZXcgRXhpdjI6OkRhdGFWYWx1ZSgoY29uc3QgRXhpdjI6OmJ5dGUgKilhcnJheS5kYXRhKCksIGFy cmF5LnNpemUoKSk7CiB9CiAKIEtpc01ldGFEYXRhOjpWYWx1ZSBkZXZpY2VTZXR0aW5nRGVzY3Jp cHRpb25FeGlmVG9LTUQoY29uc3QgRXhpdjI6OlZhbHVlOjpBdXRvUHRyIHZhbHVlKQpAQCAtMjEw LDI5ICsyMDcsMjkgQEAgS2lzTWV0YURhdGE6OlZhbHVlIGRldmljZVNldHRpbmdEZXNjcmlwdGlv bkV4aWZUb0tNRChjb25zdCBFeGl2Mjo6VmFsdWU6OkF1dG9QdHIKICAgICBRTWFwPFFTdHJpbmcs IEtpc01ldGFEYXRhOjpWYWx1ZT4gZGV2aWNlU2V0dGluZ1N0cnVjdHVyZTsKICAgICBRQnl0ZUFy cmF5IGFycmF5OwogCi0gICAgY29uc3QgRXhpdjI6OkRhdGFWYWx1ZSogZHZhbHVlID0gZHluYW1p Y19jYXN0PGNvbnN0IEV4aXYyOjpEYXRhVmFsdWUqPigmKnZhbHVlKTsKKyAgICBjb25zdCBFeGl2 Mjo6RGF0YVZhbHVlICpkdmFsdWUgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgRXhpdjI6OkRhdGFWYWx1 ZSAqPigmKnZhbHVlKTsKICAgICBpZiAoZHZhbHVlKSB7CiAgICAgICAgIGFycmF5LnJlc2l6ZShk dmFsdWUtPmNvdW50KCkpOwotICAgICAgICBkdmFsdWUtPmNvcHkoKEV4aXYyOjpieXRlKilhcnJh eS5kYXRhKCkpOworICAgICAgICBkdmFsdWUtPmNvcHkoKEV4aXYyOjpieXRlICopYXJyYXkuZGF0 YSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBRX0FTU0VSVCh2YWx1ZS0+dHlwZUlkKCkgPT0g RXhpdjI6OnVuc2lnbmVkU2hvcnQpOwogICAgICAgICBhcnJheS5yZXNpemUoMiAqIHZhbHVlLT5j b3VudCgpKTsKLSAgICAgICAgdmFsdWUtPmNvcHkoKEV4aXYyOjpieXRlKilhcnJheS5kYXRhKCks IEV4aXYyOjpsaXR0bGVFbmRpYW4pOworICAgICAgICB2YWx1ZS0+Y29weSgoRXhpdjI6OmJ5dGUg KilhcnJheS5kYXRhKCksIEV4aXYyOjpsaXR0bGVFbmRpYW4pOwogICAgIH0KLSAgICBpbnQgY29s dW1ucyA9IChyZWludGVycHJldF9jYXN0PHF1aW50MTYqPihhcnJheS5kYXRhKCkpKVswXTsKLSAg ICBpbnQgcm93cyA9IChyZWludGVycHJldF9jYXN0PHF1aW50MTYqPihhcnJheS5kYXRhKCkpKVsx XTsKKyAgICBpbnQgY29sdW1ucyA9IChyZWludGVycHJldF9jYXN0PHF1aW50MTYgKj4oYXJyYXku ZGF0YSgpKSlbMF07CisgICAgaW50IHJvd3MgPSAocmVpbnRlcnByZXRfY2FzdDxxdWludDE2ICo+ KGFycmF5LmRhdGEoKSkpWzFdOwogICAgIGRldmljZVNldHRpbmdTdHJ1Y3R1cmVbIkNvbHVtbnMi XSA9IEtpc01ldGFEYXRhOjpWYWx1ZShjb2x1bW5zKTsKICAgICBkZXZpY2VTZXR0aW5nU3RydWN0 dXJlWyJSb3dzIl0gPSBLaXNNZXRhRGF0YTo6VmFsdWUocm93cyk7CiAgICAgUUxpc3Q8S2lzTWV0 YURhdGE6OlZhbHVlPiBzZXR0aW5nczsKICAgICBRQnl0ZUFycmF5IG51bGwoMiwgMCk7CiAKLSAg ICBmb3IgKGludCBpbmRleCA9IDQ7IGluZGV4IDwgYXJyYXkuc2l6ZSgpOyApCi0gICAgeworICAg IGZvciAoaW50IGluZGV4ID0gNDsgaW5kZXggPCBhcnJheS5zaXplKCk7KSB7CiAgICAgICAgIGNv bnN0IGludCBsYXN0SW5kZXggPSBhcnJheS5pbmRleE9mKG51bGwsIGluZGV4KTsKLSAgICAgICAg aWYgKGxhc3RJbmRleCA8IDApIGJyZWFrOyAvLyBEYXRhIGlzIG5vdCBhIFN0cmluZywgaWdub3Jl CisgICAgICAgIGlmIChsYXN0SW5kZXggPCAwKQorICAgICAgICAgICAgYnJlYWs7IC8vIERhdGEg aXMgbm90IGEgU3RyaW5nLCBpZ25vcmUKICAgICAgICAgY29uc3QgaW50IG51bUNoYXJzID0gKGxh c3RJbmRleCAtIGluZGV4KSAvIDI7IC8vIGluY2x1ZGluZyB0cmFpbGluZyB6ZXJvCiAKLSAgICAg ICAgUVN0cmluZyBzZXR0aW5nID0gUVN0cmluZzo6ZnJvbVV0ZjE2KCh1c2hvcnQqKSh2b2lkKiko IGFycmF5LmRhdGEoKSArIGluZGV4KSwgbnVtQ2hhcnMpOworICAgICAgICBRU3RyaW5nIHNldHRp bmcgPSBRU3RyaW5nOjpmcm9tVXRmMTYoKHVzaG9ydCAqKSh2b2lkICopKGFycmF5LmRhdGEoKSAr IGluZGV4KSwgbnVtQ2hhcnMpOwogICAgICAgICBpbmRleCA9IGxhc3RJbmRleCArIDI7CiAgICAg ICAgIGRiZ01ldGFEYXRhIDw8ICJTZXR0aW5nIDw8ICIgPDwgc2V0dGluZzsKICAgICAgICAgc2V0 dGluZ3MuYXBwZW5kKEtpc01ldGFEYXRhOjpWYWx1ZShzZXR0aW5nKSk7CkBAIC0yNDEsMzkgKzIz OCw0MSBAQCBLaXNNZXRhRGF0YTo6VmFsdWUgZGV2aWNlU2V0dGluZ0Rlc2NyaXB0aW9uRXhpZlRv S01EKGNvbnN0IEV4aXYyOjpWYWx1ZTo6QXV0b1B0cgogICAgIHJldHVybiBLaXNNZXRhRGF0YTo6 VmFsdWUoZGV2aWNlU2V0dGluZ1N0cnVjdHVyZSk7CiB9CiAKLUV4aXYyOjpWYWx1ZSogZGV2aWNl U2V0dGluZ0Rlc2NyaXB0aW9uS01EVG9FeGlmKGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSYgdmFs dWUpCitFeGl2Mjo6VmFsdWUgKmRldmljZVNldHRpbmdEZXNjcmlwdGlvbktNRFRvRXhpZihjb25z dCBLaXNNZXRhRGF0YTo6VmFsdWUgJnZhbHVlKQogewogICAgIFFNYXA8UVN0cmluZywgS2lzTWV0 YURhdGE6OlZhbHVlPiBkZXZpY2VTZXR0aW5nU3RydWN0dXJlID0gdmFsdWUuYXNTdHJ1Y3R1cmUo KTsKICAgICBjb25zdCBxdWludDE2IGNvbHVtbnMgPSBzdGF0aWNfY2FzdDxxdWludDE2PihkZXZp Y2VTZXR0aW5nU3RydWN0dXJlWyJDb2x1bW5zIl0uYXNWYXJpYW50KCkudG9VSW50KCkpOwogICAg IHF1aW50MTYgcm93cyA9IHN0YXRpY19jYXN0PHF1aW50MTY+KGRldmljZVNldHRpbmdTdHJ1Y3R1 cmVbIlJvd3MiXS5hc1ZhcmlhbnQoKS50b1VJbnQoKSk7CiAKLSAgICBRVGV4dENvZGVjKiBjb2Rl YyA9IFFUZXh0Q29kZWM6OmNvZGVjRm9yTmFtZSgiVVRGLTE2Iik7CisgICAgUVRleHRDb2RlYyAq Y29kZWMgPSBRVGV4dENvZGVjOjpjb2RlY0Zvck5hbWUoIlVURi0xNiIpOwogCiAgICAgUUxpc3Q8 S2lzTWV0YURhdGE6OlZhbHVlPiBzZXR0aW5ncyA9IGRldmljZVNldHRpbmdTdHJ1Y3R1cmVbIlNl dHRpbmdzIl0uYXNBcnJheSgpOwogICAgIFFCeXRlQXJyYXkgYXJyYXkoNCwgMCk7Ci0gICAgKHJl aW50ZXJwcmV0X2Nhc3Q8cXVpbnQxNio+KGFycmF5LmRhdGEoKSkpWzBdID0gY29sdW1uczsKLSAg ICAocmVpbnRlcnByZXRfY2FzdDxxdWludDE2Kj4oYXJyYXkuZGF0YSgpKSlbMV0gPSByb3dzOwor ICAgIChyZWludGVycHJldF9jYXN0PHF1aW50MTYgKj4oYXJyYXkuZGF0YSgpKSlbMF0gPSBjb2x1 bW5zOworICAgIChyZWludGVycHJldF9jYXN0PHF1aW50MTYgKj4oYXJyYXkuZGF0YSgpKSlbMV0g PSByb3dzOwogICAgIGZvciAoY29uc3QgS2lzTWV0YURhdGE6OlZhbHVlICZ2IDogc2V0dGluZ3Mp IHsKICAgICAgICAgY29uc3QgUVN0cmluZyBzdHIgPSB2LmFzVmFyaWFudCgpLnRvU3RyaW5nKCk7 CiAgICAgICAgIFFCeXRlQXJyYXkgc2V0dGluZyA9IGNvZGVjLT5mcm9tVW5pY29kZShzdHIpOwog ICAgICAgICBhcnJheS5hcHBlbmQoc2V0dGluZyk7CiAgICAgfQotICAgIHJldHVybiBuZXcgRXhp djI6OkRhdGFWYWx1ZSgoY29uc3QgRXhpdjI6OmJ5dGUqKWFycmF5LmRhdGEoKSwgYXJyYXkuc2l6 ZSgpKTsKKyAgICByZXR1cm4gbmV3IEV4aXYyOjpEYXRhVmFsdWUoKGNvbnN0IEV4aXYyOjpieXRl ICopYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwogfQogCiBLaXNNZXRhRGF0YTo6VmFsdWUg Y2ZhUGF0dGVybkV4aWZUb0tNRChjb25zdCBFeGl2Mjo6VmFsdWU6OkF1dG9QdHIgdmFsdWUsIEV4 aXYyOjpCeXRlT3JkZXIgb3JkZXIpCiB7CiAgICAgUU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6 VmFsdWU+IGNmYVBhdHRlcm5TdHJ1Y3R1cmU7Ci0gICAgY29uc3QgRXhpdjI6OkRhdGFWYWx1ZSog ZHZhbHVlID0gZHluYW1pY19jYXN0PGNvbnN0IEV4aXYyOjpEYXRhVmFsdWUqPigmKnZhbHVlKTsK KyAgICBjb25zdCBFeGl2Mjo6RGF0YVZhbHVlICpkdmFsdWUgPSBkeW5hbWljX2Nhc3Q8Y29uc3Qg RXhpdjI6OkRhdGFWYWx1ZSAqPigmKnZhbHVlKTsKICAgICBRX0FTU0VSVChkdmFsdWUpOwogICAg IFFCeXRlQXJyYXkgYXJyYXkoZHZhbHVlLT5jb3VudCgpLCAwKTsKLSAgICBkdmFsdWUtPmNvcHko KEV4aXYyOjpieXRlKilhcnJheS5kYXRhKCkpOwotICAgIGludCBjb2x1bW5zID0gZml4RW5kaWFu ZXNzPHF1aW50MTY+KChyZWludGVycHJldF9jYXN0PHF1aW50MTYqPihhcnJheS5kYXRhKCkpKVsw XSwgb3JkZXIpOwotICAgIGludCByb3dzID0gZml4RW5kaWFuZXNzPHF1aW50MTY+KChyZWludGVy cHJldF9jYXN0PHF1aW50MTYqPihhcnJheS5kYXRhKCkpKVsxXSwgb3JkZXIpOwotICAgIGlmICgo Y29sdW1ucyAqIHJvd3MgKyA0KSAhPSBkdmFsdWUtPmNvdW50KCkpIHsgLy8gU29tZXRpbWUgYnl0 ZU9yZGVyIGdldCBtZXNzZWQgdXAgKGVzcGVjaWFsbHkgaWYgbWV0YWRhdGEgZ290IHNhdmVkIHdp dGgga2V4aXYyIGxpYnJhcnksIG9yIGFueSBsaWJyYXJ5IHRoYXQgZG9lc24ndCBzYXZlIGJhY2sg d2l0aCB0aGUgc2FtZSBieXRlIG9yZGVyIGFzIHRoZSBjYW1lcmEpCisgICAgZHZhbHVlLT5jb3B5 KChFeGl2Mjo6Ynl0ZSAqKWFycmF5LmRhdGEoKSk7CisgICAgaW50IGNvbHVtbnMgPSBmaXhFbmRp YW5lc3M8cXVpbnQxNj4oKHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQxNiAqPihhcnJheS5kYXRhKCkp KVswXSwgb3JkZXIpOworICAgIGludCByb3dzID0gZml4RW5kaWFuZXNzPHF1aW50MTY+KChyZWlu dGVycHJldF9jYXN0PHF1aW50MTYgKj4oYXJyYXkuZGF0YSgpKSlbMV0sIG9yZGVyKTsKKyAgICBp ZiAoKGNvbHVtbnMgKiByb3dzICsgNCkKKyAgICAgICAgIT0gZHZhbHVlLT5jb3VudCgpKSB7IC8v IFNvbWV0aW1lIGJ5dGVPcmRlciBnZXQgbWVzc2VkIHVwIChlc3BlY2lhbGx5IGlmIG1ldGFkYXRh IGdvdCBzYXZlZCB3aXRoIGtleGl2MiBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gb3IgYW55IGxpYnJhcnkgdGhhdCBkb2Vzbid0IHNhdmUgYmFjayB3aXRoIHRoZSBz YW1lIGJ5dGUgb3JkZXIgYXMgdGhlIGNhbWVyYSkKICAgICAgICAgb3JkZXIgPSBpbnZlcnRCeXRl T3JkZXIob3JkZXIpOwotICAgICAgICBjb2x1bW5zID0gZml4RW5kaWFuZXNzPHF1aW50MTY+KChy ZWludGVycHJldF9jYXN0PHF1aW50MTYqPihhcnJheS5kYXRhKCkpKVswXSwgb3JkZXIpOwotICAg ICAgICByb3dzID0gZml4RW5kaWFuZXNzPHF1aW50MTY+KChyZWludGVycHJldF9jYXN0PHF1aW50 MTYqPihhcnJheS5kYXRhKCkpKVsxXSwgb3JkZXIpOworICAgICAgICBjb2x1bW5zID0gZml4RW5k aWFuZXNzPHF1aW50MTY+KChyZWludGVycHJldF9jYXN0PHF1aW50MTYgKj4oYXJyYXkuZGF0YSgp KSlbMF0sIG9yZGVyKTsKKyAgICAgICAgcm93cyA9IGZpeEVuZGlhbmVzczxxdWludDE2PigocmVp bnRlcnByZXRfY2FzdDxxdWludDE2ICo+KGFycmF5LmRhdGEoKSkpWzFdLCBvcmRlcik7CiAgICAg ICAgIFFfQVNTRVJUKChjb2x1bW5zICogcm93cyArIDQpID09IGR2YWx1ZS0+Y291bnQoKSk7CiAg ICAgfQogICAgIGNmYVBhdHRlcm5TdHJ1Y3R1cmVbIkNvbHVtbnMiXSA9IEtpc01ldGFEYXRhOjpW YWx1ZShjb2x1bW5zKTsKQEAgLTI4NSwyNyArMjg0LDI4IEBAIEtpc01ldGFEYXRhOjpWYWx1ZSBj ZmFQYXR0ZXJuRXhpZlRvS01EKGNvbnN0IEV4aXYyOjpWYWx1ZTo6QXV0b1B0ciB2YWx1ZSwgRXhp djI6CiAgICAgICAgIGluZGV4Kys7CiAgICAgfQogICAgIGNmYVBhdHRlcm5TdHJ1Y3R1cmVbIlZh bHVlcyJdID0gS2lzTWV0YURhdGE6OlZhbHVlKHZhbHVlcywgS2lzTWV0YURhdGE6OlZhbHVlOjpP cmRlcmVkQXJyYXkpOwotICAgIGRiZ01ldGFEYXRhIDw8ICJDRkFQYXR0ZXJuICIgPDwgcHBWYXIo Y29sdW1ucykgPDwgIiAiIDw8IHBwVmFyKHJvd3MpIDw8IHBwVmFyKHZhbHVlcy5zaXplKCkpIDw8 IHBwVmFyKGR2YWx1ZS0+Y291bnQoKSk7CisgICAgZGJnTWV0YURhdGEgPDwgIkNGQVBhdHRlcm4g IiA8PCBwcFZhcihjb2x1bW5zKSA8PCAiICIgPDwgcHBWYXIocm93cykgPDwgcHBWYXIodmFsdWVz LnNpemUoKSkKKyAgICAgICAgICAgICAgICA8PCBwcFZhcihkdmFsdWUtPmNvdW50KCkpOwogICAg IHJldHVybiBLaXNNZXRhRGF0YTo6VmFsdWUoY2ZhUGF0dGVyblN0cnVjdHVyZSk7CiB9CiAKLUV4 aXYyOjpWYWx1ZSogY2ZhUGF0dGVybktNRFRvRXhpZihjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUm IHZhbHVlKQorRXhpdjI6OlZhbHVlICpjZmFQYXR0ZXJuS01EVG9FeGlmKGNvbnN0IEtpc01ldGFE YXRhOjpWYWx1ZSAmdmFsdWUpCiB7CiAgICAgUU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFs dWU+IGNmYVN0cnVjdHVyZSA9IHZhbHVlLmFzU3RydWN0dXJlKCk7CiAgICAgY29uc3QgcXVpbnQx NiBjb2x1bW5zID0gc3RhdGljX2Nhc3Q8cXVpbnQxNj4oY2ZhU3RydWN0dXJlWyJDb2x1bW5zIl0u YXNWYXJpYW50KCkudG9VSW50KCkpOwogICAgIGNvbnN0IHF1aW50MTYgcm93cyA9IHN0YXRpY19j YXN0PHF1aW50MTY+KGNmYVN0cnVjdHVyZVsiUm93cyJdLmFzVmFyaWFudCgpLnRvVUludCgpKTsK IAogICAgIFFMaXN0PEtpc01ldGFEYXRhOjpWYWx1ZT4gdmFsdWVzID0gY2ZhU3RydWN0dXJlWyJW YWx1ZXMiXS5hc0FycmF5KCk7Ci0gICAgUV9BU1NFUlQoY29sdW1ucypyb3dzID09IHZhbHVlcy5z aXplKCkpOwotICAgIFFCeXRlQXJyYXkgYXJyYXkoNCArIGNvbHVtbnMqcm93cywgMCk7Ci0gICAg KHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQxNio+KGFycmF5LmRhdGEoKSkpWzBdID0gY29sdW1uczsK LSAgICAocmVpbnRlcnByZXRfY2FzdDxxdWludDE2Kj4oYXJyYXkuZGF0YSgpKSlbMV0gPSByb3dz OworICAgIFFfQVNTRVJUKGNvbHVtbnMgKiByb3dzID09IHZhbHVlcy5zaXplKCkpOworICAgIFFC eXRlQXJyYXkgYXJyYXkoNCArIGNvbHVtbnMgKiByb3dzLCAwKTsKKyAgICAocmVpbnRlcnByZXRf Y2FzdDxxdWludDE2ICo+KGFycmF5LmRhdGEoKSkpWzBdID0gY29sdW1uczsKKyAgICAocmVpbnRl cnByZXRfY2FzdDxxdWludDE2ICo+KGFycmF5LmRhdGEoKSkpWzFdID0gcm93czsKICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGNvbHVtbnMgKiByb3dzOyBpKyspIHsKICAgICAgICAgY29uc3QgcXVp bnQ4IHZhbCA9IChxdWludDgpdmFsdWVzW2ldLmFzVmFyaWFudCgpLnRvVUludCgpOwogICAgICAg ICAqKGFycmF5LmRhdGEoKSArIDQgKyBpKSA9IChjaGFyKXZhbDsKICAgICB9CiAgICAgZGJnTWV0 YURhdGEgPDwgIkNmYSBBcnJheSAiIDw8IHBwVmFyKGNvbHVtbnMpIDw8IHBwVmFyKHJvd3MpIDw8 IHBwVmFyKGFycmF5LnNpemUoKSk7Ci0gICAgcmV0dXJuIG5ldyBFeGl2Mjo6RGF0YVZhbHVlKChj b25zdCBFeGl2Mjo6Ynl0ZSopYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgIHJldHVy biBuZXcgRXhpdjI6OkRhdGFWYWx1ZSgoY29uc3QgRXhpdjI6OmJ5dGUgKilhcnJheS5kYXRhKCks IGFycmF5LnNpemUoKSk7CiB9CiAKIC8vIFJlYWQgYW5kIHdyaXRlIEZsYXNoIC8vCkBAIC0zMTQs MjAgKzMxNCwyMCBAQCBLaXNNZXRhRGF0YTo6VmFsdWUgZmxhc2hFeGlmVG9LTUQoY29uc3QgRXhp djI6OlZhbHVlOjpBdXRvUHRyIHZhbHVlKQogewogICAgIGNvbnN0IHVpbnQxNl90IHYgPSBzdGF0 aWNfY2FzdDx1aW50MTZfdD4odmFsdWUtPnRvTG9uZygpKTsKICAgICBRTWFwPFFTdHJpbmcsIEtp c01ldGFEYXRhOjpWYWx1ZT4gZmxhc2hTdHJ1Y3R1cmU7Ci0gICAgYm9vbCBmaXJlZCA9ICh2ICYg MHgwMSk7ICAvLyBiaXQgMSBpcyB3aGV0aGVyIGZsYXNoIHdhcyBmaXJlZCBvciBub3QKKyAgICBi b29sIGZpcmVkID0gKHYgJiAweDAxKTsgLy8gYml0IDEgaXMgd2hldGhlciBmbGFzaCB3YXMgZmly ZWQgb3Igbm90CiAgICAgZmxhc2hTdHJ1Y3R1cmVbIkZpcmVkIl0gPSBRVmFyaWFudChmaXJlZCk7 Ci0gICAgaW50IHJldCA9ICgodiA+PiAxKSAmIDB4MDMpOyAgLy8gYml0IDIgYW5kIDMgYXJlIFJl dHVybgorICAgIGludCByZXQgPSAoKHYgPj4gMSkgJiAweDAzKTsgLy8gYml0IDIgYW5kIDMgYXJl IFJldHVybgogICAgIGZsYXNoU3RydWN0dXJlWyJSZXR1cm4iXSA9IFFWYXJpYW50KHJldCk7Ci0g ICAgaW50IG1vZGUgPSAoKHYgPj4gMykgJiAweDAzKTsgIC8vIGJpdCA0IGFuZCA1IGFyZSBNb2Rl CisgICAgaW50IG1vZGUgPSAoKHYgPj4gMykgJiAweDAzKTsgLy8gYml0IDQgYW5kIDUgYXJlIE1v ZGUKICAgICBmbGFzaFN0cnVjdHVyZVsiTW9kZSJdID0gUVZhcmlhbnQobW9kZSk7Ci0gICAgYm9v bCBmdW5jdGlvbiA9ICgodiA+PiA1KSAmIDB4MDEpOyAgLy8gYml0IDYgaWYgZnVuY3Rpb24KKyAg ICBib29sIGZ1bmN0aW9uID0gKCh2ID4+IDUpICYgMHgwMSk7IC8vIGJpdCA2IGlmIGZ1bmN0aW9u CiAgICAgZmxhc2hTdHJ1Y3R1cmVbIkZ1bmN0aW9uIl0gPSBRVmFyaWFudChmdW5jdGlvbik7Ci0g ICAgYm9vbCByZWRFeWUgPSAoKHYgPj4gNikgJiAweDAxKTsgIC8vIGJpdCA3IGlmIGZ1bmN0aW9u CisgICAgYm9vbCByZWRFeWUgPSAoKHYgPj4gNikgJiAweDAxKTsgLy8gYml0IDcgaWYgZnVuY3Rp b24KICAgICBmbGFzaFN0cnVjdHVyZVsiUmVkRXllTW9kZSJdID0gUVZhcmlhbnQocmVkRXllKTsK ICAgICByZXR1cm4gS2lzTWV0YURhdGE6OlZhbHVlKGZsYXNoU3RydWN0dXJlKTsKIH0KIAotRXhp djI6OlZhbHVlKiBmbGFzaEtNRFRvRXhpZihjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUmIHZhbHVl KQorRXhpdjI6OlZhbHVlICpmbGFzaEtNRFRvRXhpZihjb25zdCBLaXNNZXRhRGF0YTo6VmFsdWUg JnZhbHVlKQogewogICAgIHVpbnQxNl90IHYgPSAwOwogICAgIFFNYXA8UVN0cmluZywgS2lzTWV0 YURhdGE6OlZhbHVlPiBmbGFzaFN0cnVjdHVyZSA9IHZhbHVlLmFzU3RydWN0dXJlKCk7CkBAIC0z MzksMjAgKzMzOSwxNyBAQCBFeGl2Mjo6VmFsdWUqIGZsYXNoS01EVG9FeGlmKGNvbnN0IEtpc01l dGFEYXRhOjpWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIG5ldyBFeGl2Mjo6VmFsdWVUeXBlPHVp bnQxNl90Pih2KTsKIH0KIAotCi0KIC8vIC0tLS0gSW1wbGVtZW50YXRpb24gb2YgS2lzRXhpZklP IC0tLS0vLwotS2lzRXhpZklPOjpLaXNFeGlmSU8oKSA6IGQobmV3IFByaXZhdGUpCitLaXNFeGlm SU86Oktpc0V4aWZJTygpCisgICAgOiBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kKCkKIHsKIH0KIAog S2lzRXhpZklPOjp+S2lzRXhpZklPKCkKIHsKLSAgICBkZWxldGUgZDsKIH0KIAotCi1ib29sIEtp c0V4aWZJTzo6c2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9E ZXZpY2UsIEhlYWRlclR5cGUgaGVhZGVyVHlwZSkgY29uc3QKK2Jvb2wgS2lzRXhpZklPOjpzYXZl VG8oS2lzTWV0YURhdGE6OlN0b3JlICpzdG9yZSwgUUlPRGV2aWNlICppb0RldmljZSwgSGVhZGVy VHlwZSBoZWFkZXJUeXBlKSBjb25zdAogewogICAgIGlvRGV2aWNlLT5vcGVuKFFJT0RldmljZTo6 V3JpdGVPbmx5KTsKICAgICBFeGl2Mjo6RXhpZkRhdGEgZXhpZkRhdGE7CkBAIC0zNjksMTEgKzM2 NiwxMyBAQCBib29sIEtpc0V4aWZJTzo6c2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUs IFFJT0RldmljZSogaW9EZXZpY2UsIEhlYWRlclR5cAogCiAgICAgZm9yIChjb25zdCBLaXNNZXRh RGF0YTo6RW50cnkgJmVudHJ5IDogKnN0b3JlKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg ICBkYmdNZXRhRGF0YSA8PCAiVHJ5aW5nIHRvIHNhdmU6ICIgPDwgZW50cnkubmFtZSgpIDw8ICIg b2YgIiA8PCBlbnRyeS5zY2hlbWEoKS0+cHJlZml4KCkgPDwgIjoiIDw8IGVudHJ5LnNjaGVtYSgp LT51cmkoKTsKKyAgICAgICAgICAgIGRiZ01ldGFEYXRhIDw8ICJUcnlpbmcgdG8gc2F2ZTogIiA8 PCBlbnRyeS5uYW1lKCkgPDwgIiBvZiAiIDw8IGVudHJ5LnNjaGVtYSgpLT5wcmVmaXgoKSA8PCAi OiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IGVudHJ5LnNjaGVtYSgpLT51cmkoKTsKICAg ICAgICAgICAgIFFTdHJpbmcgZXhpdktleTsKICAgICAgICAgICAgIGlmIChlbnRyeS5zY2hlbWEo KS0+dXJpKCkgPT0gS2lzTWV0YURhdGE6OlNjaGVtYTo6VElGRlNjaGVtYVVyaSkgewogICAgICAg ICAgICAgICAgIGV4aXZLZXkgPSAiRXhpZi5JbWFnZS4iICsgZW50cnkubmFtZSgpOwotICAgICAg ICAgICAgfSBlbHNlIGlmIChlbnRyeS5zY2hlbWEoKS0+dXJpKCkgPT0gS2lzTWV0YURhdGE6OlNj aGVtYTo6RVhJRlNjaGVtYVVyaSkgeyAvLyBEaXN0aW5ndWlzaCBiZXR3ZWVuIGV4aWYgYW5kIGdw cworICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5zY2hlbWEoKS0+dXJpKCkKKyAgICAgICAg ICAgICAgICAgICAgICAgPT0gS2lzTWV0YURhdGE6OlNjaGVtYTo6RVhJRlNjaGVtYVVyaSkgeyAv LyBEaXN0aW5ndWlzaCBiZXR3ZWVuIGV4aWYgYW5kIGdwcwogICAgICAgICAgICAgICAgIGlmIChl bnRyeS5uYW1lKCkubGVmdCgzKSA9PSAiR1BTIikgewogICAgICAgICAgICAgICAgICAgICBleGl2 S2V5ID0gIkV4aWYuR1BTSW5mby4iICsgZW50cnkubmFtZSgpOwogICAgICAgICAgICAgICAgIH0g ZWxzZSB7CkBAIC00MDMsMTUgKzQwMiwxNSBAQCBib29sIEtpc0V4aWZJTzo6c2F2ZVRvKEtpc01l dGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9EZXZpY2UsIEhlYWRlclR5cAogICAg ICAgICAgICAgICAgIGRiZ01ldGFEYXRhIDw8IGVudHJ5LnF1YWxpZmllZE5hbWUoKSA8PCAiIGlz IHVuc2F2YWJsZSB0byBFWElGIjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAgRXhpdjI6OkV4aWZLZXkgZXhpZktleShxUHJpbnRhYmxlKGV4aXZLZXkpKTsKLSAgICAgICAg ICAgICAgICBFeGl2Mjo6VmFsdWUqIHYgPSAwOworICAgICAgICAgICAgICAgIEV4aXYyOjpWYWx1 ZSAqdiA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKGV4aXZLZXkgPT0gIkV4aWYuUGhvdG8uRXhp ZlZlcnNpb24iIHx8IGV4aXZLZXkgPT0gIkV4aWYuUGhvdG8uRmxhc2hwaXhWZXJzaW9uIikgewog ICAgICAgICAgICAgICAgICAgICB2ID0ga21kVmFsdWVUb0V4aWZWZXJzaW9uKGVudHJ5LnZhbHVl KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhpdktleSA9PSAiRXhpZi5QaG90by5G aWxlU291cmNlIikgewotICAgICAgICAgICAgICAgICAgICBjaGFyIHNbXSA9IHsgMHgwMyB9Owot ICAgICAgICAgICAgICAgICAgICB2ID0gbmV3IEV4aXYyOjpEYXRhVmFsdWUoKGNvbnN0IEV4aXYy OjpieXRlKilzLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBzW10gPSB7MHgwM307Cisg ICAgICAgICAgICAgICAgICAgIHYgPSBuZXcgRXhpdjI6OkRhdGFWYWx1ZSgoY29uc3QgRXhpdjI6 OmJ5dGUgKilzLCAxKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXZLZXkgPT0gIkV4 aWYuUGhvdG8uU2NlbmVUeXBlIikgewotICAgICAgICAgICAgICAgICAgICBjaGFyIHNbXSA9IHsg MHgwMSB9OwotICAgICAgICAgICAgICAgICAgICB2ID0gbmV3IEV4aXYyOjpEYXRhVmFsdWUoKGNv bnN0IEV4aXYyOjpieXRlKilzLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBzW10gPSB7 MHgwMX07CisgICAgICAgICAgICAgICAgICAgIHYgPSBuZXcgRXhpdjI6OkRhdGFWYWx1ZSgoY29u c3QgRXhpdjI6OmJ5dGUgKilzLCAxKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXZL ZXkgPT0gIkV4aWYuUGhvdG8uQ29tcG9uZW50c0NvbmZpZ3VyYXRpb24iKSB7CiAgICAgICAgICAg ICAgICAgICAgIHYgPSBrbWRJbnRPcmRlcmVkQXJyYXlUb0V4aWZBcnJheShlbnRyeS52YWx1ZSgp KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXZLZXkgPT0gIkV4aWYuSW1hZ2UuQXJ0 aXN0IikgeyAvLyBsb2FkIGFzIGRjOmNyZWF0b3IKQEAgLTQxOSw3ICs0MTgsNyBAQCBib29sIEtp c0V4aWZJTzo6c2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9E ZXZpY2UsIEhlYWRlclR5cAogICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUoKS5h c0FycmF5KCkuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvciA9 IGVudHJ5LnZhbHVlKCkuYXNBcnJheSgpWzBdOwogICAgICAgICAgICAgICAgICAgICB9Ci0jaWYg IUVYSVYyX1RFU1RfVkVSU0lPTigwLDIxLDApCisjaWYgIUVYSVYyX1RFU1RfVkVSU0lPTigwLCAy MSwgMCkKICAgICAgICAgICAgICAgICAgICAgdiA9IGttZFZhbHVlVG9FeGl2VmFsdWUoY3JlYXRv ciwgRXhpdjI6OkV4aWZUYWdzOjp0YWdUeXBlKGV4aWZLZXkudGFnKCksIGV4aWZLZXkuaWZkSWQo KSkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgdiA9IGttZFZhbHVlVG9FeGl2VmFsdWUo Y3JlYXRvciwgZXhpZktleS5kZWZhdWx0VHlwZUlkKCkpOwpAQCAtNDM2LDIxICs0MzUsMjMgQEAg Ym9vbCBLaXNFeGlmSU86OnNhdmVUbyhLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZp Y2UqIGlvRGV2aWNlLCBIZWFkZXJUeXAKICAgICAgICAgICAgICAgICAgICAgUV9BU1NFUlQoZW50 cnkudmFsdWUoKS50eXBlKCkgPT0gS2lzTWV0YURhdGE6OlZhbHVlOjpMYW5nQXJyYXkpOwogICAg ICAgICAgICAgICAgICAgICBRTWFwPFFTdHJpbmcsIEtpc01ldGFEYXRhOjpWYWx1ZT4gbGFuZ0Fy ciA9IGVudHJ5LnZhbHVlKCkuYXNMYW5nQXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg KGxhbmdBcnIuY29udGFpbnMoIngtZGVmYXVsdCIpKSB7Ci0jaWYgIUVYSVYyX1RFU1RfVkVSU0lP TigwLDIxLDApCi0gICAgICAgICAgICAgICAgICAgICAgICB2ID0ga21kVmFsdWVUb0V4aXZWYWx1 ZShsYW5nQXJyLnZhbHVlKCJ4LWRlZmF1bHQiKSwgRXhpdjI6OkV4aWZUYWdzOjp0YWdUeXBlKGV4 aWZLZXkudGFnKCksIGV4aWZLZXkuaWZkSWQoKSkpOworI2lmICFFWElWMl9URVNUX1ZFUlNJT04o MCwgMjEsIDApCisgICAgICAgICAgICAgICAgICAgICAgICB2ID0ga21kVmFsdWVUb0V4aXZWYWx1 ZShsYW5nQXJyLnZhbHVlKCJ4LWRlZmF1bHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEV4aXYyOjpFeGlmVGFnczo6dGFnVHlwZShleGlmS2V5LnRh ZygpLCBleGlmS2V5LmlmZElkKCkpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB2 ID0ga21kVmFsdWVUb0V4aXZWYWx1ZShsYW5nQXJyLnZhbHVlKCJ4LWRlZmF1bHQiKSwgZXhpZktl eS5kZWZhdWx0VHlwZUlkKCkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAobGFuZ0Fyci5zaXplKCkgPiAwKSB7Ci0jaWYgIUVYSVYyX1RFU1RfVkVSU0lPTigwLDIxLDAp Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ID0ga21kVmFsdWVUb0V4aXZWYWx1ZShsYW5nQXJy LmJlZ2luKCkudmFsdWUoKSwgRXhpdjI6OkV4aWZUYWdzOjp0YWdUeXBlKGV4aWZLZXkudGFnKCks IGV4aWZLZXkuaWZkSWQoKSkpOworI2lmICFFWElWMl9URVNUX1ZFUlNJT04oMCwgMjEsIDApCisg ICAgICAgICAgICAgICAgICAgICAgICB2ID0ga21kVmFsdWVUb0V4aXZWYWx1ZShsYW5nQXJyLmJl Z2luKCkudmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEV4aXYyOjpFeGlmVGFnczo6dGFnVHlwZShleGlmS2V5LnRhZygpLCBleGlmS2V5Lmlm ZElkKCkpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB2ID0ga21kVmFsdWVUb0V4 aXZWYWx1ZShsYW5nQXJyLmJlZ2luKCkudmFsdWUoKSwgZXhpZktleS5kZWZhdWx0VHlwZUlkKCkp OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICBkYmdNZXRhRGF0YSA8PCBleGlmS2V5LnRhZygpOwotI2lm ICFFWElWMl9URVNUX1ZFUlNJT04oMCwyMSwwKQorI2lmICFFWElWMl9URVNUX1ZFUlNJT04oMCwg MjEsIDApCiAgICAgICAgICAgICAgICAgICAgIHYgPSBrbWRWYWx1ZVRvRXhpdlZhbHVlKGVudHJ5 LnZhbHVlKCksIEV4aXYyOjpFeGlmVGFnczo6dGFnVHlwZShleGlmS2V5LnRhZygpLCBleGlmS2V5 LmlmZElkKCkpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIHYgPSBrbWRWYWx1ZVRvRXhp dlZhbHVlKGVudHJ5LnZhbHVlKCksIGV4aWZLZXkuZGVmYXVsdFR5cGVJZCgpKTsKQEAgLTQ2MCwx NiArNDYxLDE3IEBAIGJvb2wgS2lzRXhpZklPOjpzYXZlVG8oS2lzTWV0YURhdGE6OlN0b3JlKiBz dG9yZSwgUUlPRGV2aWNlKiBpb0RldmljZSwgSGVhZGVyVHlwCiAgICAgICAgICAgICAgICAgICAg IGRiZ01ldGFEYXRhIDw8ICJTYXZpbmcga2V5IiA8PCBleGl2S2V5IDw8ICIgb2YgS01EIHZhbHVl IiA8PCBlbnRyeS52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBleGlmRGF0YS5hZGQoZXhp ZktleSwgdik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg ZGJnTWV0YURhdGEgPDwgIk5vIGV4aWYgdmFsdWUgd2FzIGNyZWF0ZWQgZm9yIiA8PCBlbnRyeS5x dWFsaWZpZWROYW1lKCkgPDwgIiBhcyIgPDwgZXhpdktleTsvLyA8PCAiIG9mIEtNRCB2YWx1ZSIg PDwgZW50cnkudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZGJnTWV0YURhdGEgPDwgIk5v IGV4aWYgdmFsdWUgd2FzIGNyZWF0ZWQgZm9yIiA8PCBlbnRyeS5xdWFsaWZpZWROYW1lKCkgPDwg IiBhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZXhpdktleTsgLy8gPDwg IiBvZiBLTUQgdmFsdWUiIDw8IGVudHJ5LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFeGl2Mjo6QW55RXJyb3ImIGUpIHsKKyAgICAg ICAgfSBjYXRjaCAoRXhpdjI6OkFueUVycm9yICZlKSB7CiAgICAgICAgICAgICBkYmdNZXRhRGF0 YSA8PCAiZXhpdiBlcnJvciAiIDw8IGUud2hhdCgpOwogICAgICAgICB9CiAgICAgfQotI2lmICFF WElWMl9URVNUX1ZFUlNJT04oMCwxOCwwKQorI2lmICFFWElWMl9URVNUX1ZFUlNJT04oMCwgMTgs IDApCiAgICAgRXhpdjI6OkRhdGFCdWYgcmF3RGF0YSA9IGV4aWZEYXRhLmNvcHkoKTsKLSAgICBp b0RldmljZS0+d3JpdGUoKGNvbnN0IGNoYXIqKSByYXdEYXRhLnBEYXRhXywgcmF3RGF0YS5zaXpl Xyk7CisgICAgaW9EZXZpY2UtPndyaXRlKChjb25zdCBjaGFyICopcmF3RGF0YS5wRGF0YV8sIHJh d0RhdGEuc2l6ZV8pOwogI2Vsc2UKICAgICBFeGl2Mjo6QmxvYiByYXdEYXRhOwogICAgIEV4aXYy OjpFeGlmUGFyc2VyOjplbmNvZGUocmF3RGF0YSwgRXhpdjI6OmxpdHRsZUVuZGlhbiwgZXhpZkRh dGEpOwpAQCAtNDc5LDEzICs0ODEsMTIgQEAgYm9vbCBLaXNFeGlmSU86OnNhdmVUbyhLaXNNZXRh RGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZpY2UqIGlvRGV2aWNlLCBIZWFkZXJUeXAKICAgICBy ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBLaXNFeGlmSU86OmNhblNhdmVBbGxFbnRyaWVzKEtpc01l dGFEYXRhOjpTdG9yZSogLypzdG9yZSovKSBjb25zdAorYm9vbCBLaXNFeGlmSU86OmNhblNhdmVB bGxFbnRyaWVzKEtpc01ldGFEYXRhOjpTdG9yZSAqIC8qc3RvcmUqLykgY29uc3QKIHsKICAgICBy ZXR1cm4gZmFsc2U7IC8vIEl0J3MgYSBrbm93biBmYWN0IHRoYXQgZXhpZiBjYW4ndCBzYXZlIGFs bCBpbmZvcm1hdGlvbiwgYnV0IFRPRE86IHdyaXRlIHRoZSBjaGVjawogfQogCi0KLWJvb2wgS2lz RXhpZklPOjpsb2FkRnJvbShLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZpY2UqIGlv RGV2aWNlKSBjb25zdAorYm9vbCBLaXNFeGlmSU86OmxvYWRGcm9tKEtpc01ldGFEYXRhOjpTdG9y ZSAqc3RvcmUsIFFJT0RldmljZSAqaW9EZXZpY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFpb0Rldmlj ZS0+b3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBA IC00OTMsNDAgKzQ5NCw0NSBAQCBib29sIEtpc0V4aWZJTzo6bG9hZEZyb20oS2lzTWV0YURhdGE6 OlN0b3JlKiBzdG9yZSwgUUlPRGV2aWNlKiBpb0RldmljZSkgY29uc3QKICAgICBRQnl0ZUFycmF5 IGFycihpb0RldmljZS0+cmVhZEFsbCgpKTsKICAgICBFeGl2Mjo6RXhpZkRhdGEgZXhpZkRhdGE7 CiAgICAgRXhpdjI6OkJ5dGVPcmRlciBieXRlT3JkZXI7Ci0jaWYgIUVYSVYyX1RFU1RfVkVSU0lP TigwLDE4LDApCi0gICAgZXhpZkRhdGEubG9hZCgoY29uc3QgRXhpdjI6OmJ5dGUqKWFyci5kYXRh KCksIGFyci5zaXplKCkpOworI2lmICFFWElWMl9URVNUX1ZFUlNJT04oMCwgMTgsIDApCisgICAg ZXhpZkRhdGEubG9hZCgoY29uc3QgRXhpdjI6OmJ5dGUgKilhcnIuZGF0YSgpLCBhcnIuc2l6ZSgp KTsKICAgICBieXRlT3JkZXIgPSBleGlmRGF0YS5ieXRlT3JkZXIoKTsKICNlbHNlCiAgICAgdHJ5 IHsKLSAgICAgICAgYnl0ZU9yZGVyID0gRXhpdjI6OkV4aWZQYXJzZXI6OmRlY29kZShleGlmRGF0 YSwgKGNvbnN0IEV4aXYyOjpieXRlICopYXJyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+ KGFyci5zaXplKCkpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uJiBl eCkgeworICAgICAgICBieXRlT3JkZXIgPQorICAgICAgICAgICAgRXhpdjI6OkV4aWZQYXJzZXI6 OmRlY29kZShleGlmRGF0YSwgKGNvbnN0IEV4aXYyOjpieXRlICopYXJyLmRhdGEoKSwgc3RhdGlj X2Nhc3Q8dWludDMyX3Q+KGFyci5zaXplKCkpKTsKKyAgICB9IGNhdGNoIChjb25zdCBzdGQ6OmV4 Y2VwdGlvbiAmZXgpIHsKICAgICAgICAgd2FybktyaXRhIDw8ICJSZWNlaXZlZCBleGNlcHRpb24g dHJ5aW5nIHRvIHBhcnNlIGV4aXYgZGF0YSIgPDwgZXgud2hhdCgpOwogICAgICAgICByZXR1cm4g ZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoICguLi4pIHsKKyAgICB9IGNhdGNoICguLi4pIHsKICAg ICAgICAgZGJnS3JpdGEgPDwgIlJlY2VpdmVkIHVua25vd24gZXhjZXB0aW9uIHRyeWluZyB0byBw YXJzZSBleGl2IGRhdGEiOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2VuZGlmCiAg ICAgZGJnTWV0YURhdGEgPDwgIkJ5dGUgb3JkZXIgPSAiIDw8IGJ5dGVPcmRlciA8PCBwcFZhcihF eGl2Mjo6YmlnRW5kaWFuKSA8PCBwcFZhcihFeGl2Mjo6bGl0dGxlRW5kaWFuKTsKICAgICBkYmdN ZXRhRGF0YSA8PCAiVGhlcmUgYXJlIiA8PCBleGlmRGF0YS5jb3VudCgpIDw8ICIgZW50cmllcyBp biB0aGUgZXhpZiBzZWN0aW9uIjsKLSAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hKiB0aWZm U2NoZW1hID0gS2lzTWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5zY2hlbWFG cm9tVXJpKEtpc01ldGFEYXRhOjpTY2hlbWE6OlRJRkZTY2hlbWFVcmkpOworICAgIGNvbnN0IEtp c01ldGFEYXRhOjpTY2hlbWEgKnRpZmZTY2hlbWEgPQorICAgICAgICBLaXNNZXRhRGF0YTo6U2No ZW1hUmVnaXN0cnk6Omluc3RhbmNlKCktPnNjaGVtYUZyb21VcmkoS2lzTWV0YURhdGE6OlNjaGVt YTo6VElGRlNjaGVtYVVyaSk7CiAgICAgUV9BU1NFUlQodGlmZlNjaGVtYSk7Ci0gICAgY29uc3Qg S2lzTWV0YURhdGE6OlNjaGVtYSogZXhpZlNjaGVtYSA9IEtpc01ldGFEYXRhOjpTY2hlbWFSZWdp c3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShLaXNNZXRhRGF0YTo6U2NoZW1hOjpFWElG U2NoZW1hVXJpKTsKKyAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICpleGlmU2NoZW1hID0K KyAgICAgICAgS2lzTWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5zY2hlbWFG cm9tVXJpKEtpc01ldGFEYXRhOjpTY2hlbWE6OkVYSUZTY2hlbWFVcmkpOwogICAgIFFfQVNTRVJU KGV4aWZTY2hlbWEpOwotICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqIGRjU2NoZW1hID0g S2lzTWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5zY2hlbWFGcm9tVXJpKEtp c01ldGFEYXRhOjpTY2hlbWE6OkR1YmxpbkNvcmVTY2hlbWFVcmkpOworICAgIGNvbnN0IEtpc01l dGFEYXRhOjpTY2hlbWEgKmRjU2NoZW1hID0KKyAgICAgICAgS2lzTWV0YURhdGE6OlNjaGVtYVJl Z2lzdHJ5OjppbnN0YW5jZSgpLT5zY2hlbWFGcm9tVXJpKEtpc01ldGFEYXRhOjpTY2hlbWE6OkR1 YmxpbkNvcmVTY2hlbWFVcmkpOwogICAgIFFfQVNTRVJUKGRjU2NoZW1hKTsKLSAgICBjb25zdCBL aXNNZXRhRGF0YTo6U2NoZW1hKiB4bXBTY2hlbWEgPSBLaXNNZXRhRGF0YTo6U2NoZW1hUmVnaXN0 cnk6Omluc3RhbmNlKCktPnNjaGVtYUZyb21VcmkoS2lzTWV0YURhdGE6OlNjaGVtYTo6WE1QU2No ZW1hVXJpKTsKKyAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICp4bXBTY2hlbWEgPQorICAg ICAgICBLaXNNZXRhRGF0YTo6U2NoZW1hUmVnaXN0cnk6Omluc3RhbmNlKCktPnNjaGVtYUZyb21V cmkoS2lzTWV0YURhdGE6OlNjaGVtYTo6WE1QU2NoZW1hVXJpKTsKICAgICBRX0FTU0VSVCh4bXBT Y2hlbWEpOwotICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEgKm1ha2VyTm90ZVNjaGVtYSA9 IEtpc01ldGFEYXRhOjpTY2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShL aXNNZXRhRGF0YTo6U2NoZW1hOjpNYWtlck5vdGVTY2hlbWFVcmkpOworICAgIGNvbnN0IEtpc01l dGFEYXRhOjpTY2hlbWEgKm1ha2VyTm90ZVNjaGVtYSA9CisgICAgICAgIEtpc01ldGFEYXRhOjpT Y2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShLaXNNZXRhRGF0YTo6U2No ZW1hOjpNYWtlck5vdGVTY2hlbWFVcmkpOwogICAgIFFfQVNTRVJUKG1ha2VyTm90ZVNjaGVtYSk7 CiAKICAgICBmb3IgKGNvbnN0IEV4aXYyOjpFeGlmZGF0dW0gJml0IDogZXhpZkRhdGEpIHsKICAg ICAgICAgY29uc3QgdWludDE2X3QgdGFnID0gaXQudGFnKCk7CiAKICAgICAgICAgaWYgKHRhZyA9 PSBFeGlmOjpJbWFnZTo6U3RyaXBPZmZzZXRzIHx8IHRhZyA9PSBFeGlmOjpJbWFnZTo6Um93c1Bl clN0cmlwIHx8IHRhZyA9PSBFeGlmOjpJbWFnZTo6U3RyaXBCeXRlQ291bnRzCi0gICAgICAgICAg ICB8fCB0YWcgPT0gRXhpZjo6SW1hZ2U6OkpQRUdJbnRlcmNoYW5nZUZvcm1hdCB8fCB0YWcgPT0g RXhpZjo6SW1hZ2U6OkpQRUdJbnRlcmNoYW5nZUZvcm1hdExlbmd0aCB8fCBpdC50YWdOYW1lKCkg PT0gIjB4MDAwMCIpIHsKKyAgICAgICAgICAgIHx8IHRhZyA9PSBFeGlmOjpJbWFnZTo6SlBFR0lu dGVyY2hhbmdlRm9ybWF0IHx8IHRhZyA9PSBFeGlmOjpJbWFnZTo6SlBFR0ludGVyY2hhbmdlRm9y bWF0TGVuZ3RoCisgICAgICAgICAgICB8fCBpdC50YWdOYW1lKCkgPT0gIjB4MDAwMCIpIHsKICAg ICAgICAgICAgIGRiZ01ldGFEYXRhIDw8IGl0LmtleSgpLmNfc3RyKCkgPDwgIiBpcyBpZ25vcmVk IjsKICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gRXhpZjo6UGhvdG86Ok1ha2VyTm90ZSkgewog ICAgICAgICAgICAgc3RvcmUtPmFkZEVudHJ5KHttYWtlck5vdGVTY2hlbWEsICJSYXdEYXRhIiwg ZXhpdlZhbHVlVG9LTURWYWx1ZShpdC5nZXRWYWx1ZSgpLCBmYWxzZSl9KTsKQEAgLTYwMiw3ICs2 MDgsOCBAQCBib29sIEtpc0V4aWZJTzo6bG9hZEZyb20oS2lzTWV0YURhdGE6OlN0b3JlKiBzdG9y ZSwgUUlPRGV2aWNlKiBpb0RldmljZSkgY29uc3QKICAgICAgICAgICAgICAgICBtZXRhRGF0YVZh bHVlID0gZXhpdlZhbHVlVG9LTURWYWx1ZShpdC5nZXRWYWx1ZSgpLCBmb3JjZVNlcSwgYXJyYXlU eXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0YWcgPT0gRXhpZjo6UGhvdG86 OkludGVyb3BlcmFiaWxpdHlUYWcKLSAgICAgICAgICAgICAgICB8fCBtZXRhRGF0YVZhbHVlLnR5 cGUoKSA9PSBLaXNNZXRhRGF0YTo6VmFsdWU6OkludmFsaWQpIHsgLy8gSW50ZXJvcGVyYWJpbGl0 eVRhZyBpc24ndCB1c2VmdWwgZm9yIFhNUCwgMHhlYTFkIGlzbid0IGEgdmFsaWQgRXhpZiB0YWcK KyAgICAgICAgICAgICAgICB8fCBtZXRhRGF0YVZhbHVlLnR5cGUoKSA9PSBLaXNNZXRhRGF0YTo6 VmFsdWU6OkludmFsaWQpIHsgLy8gSW50ZXJvcGVyYWJpbGl0eVRhZyBpc24ndCB1c2VmdWwgZm9y IFhNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHhlYTFkIGlzbid0IGEgdmFsaWQgRXhpZiB0YWcK ICAgICAgICAgICAgICAgICB3YXJuTWV0YURhdGEgPDwgIklnbm9yaW5nICIgPDwgaXQua2V5KCku Y19zdHIoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RvcmUtPmFk ZEVudHJ5KHtleGlmU2NoZW1hLCBpdC50YWdOYW1lKCkuY19zdHIoKSwgbWV0YURhdGFWYWx1ZX0p OwpkaWZmIC0tZ2l0IGEvbGlicy91aS9raXNleGl2Mi9raXNfZXhpZl9pby5oIGIvcGx1Z2lucy9t ZXRhZGF0YS9leGlmL2tpc19leGlmX2lvLmgKc2ltaWxhcml0eSBpbmRleCA1NCUKcmVuYW1lIGZy b20gbGlicy91aS9raXNleGl2Mi9raXNfZXhpZl9pby5oCnJlbmFtZSB0byBwbHVnaW5zL21ldGFk YXRhL2V4aWYva2lzX2V4aWZfaW8uaAppbmRleCBhZjllZmZkOTc1Li5iMmIzYmQ5NTQ3IDEwMDY0 NAotLS0gYS9saWJzL3VpL2tpc2V4aXYyL2tpc19leGlmX2lvLmgKKysrIGIvcGx1Z2lucy9tZXRh ZGF0YS9leGlmL2tpc19leGlmX2lvLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogIFNQRFgtRmls ZUNvcHlyaWdodFRleHQ6IDIwMDcgQ3lyaWxsZSBCZXJnZXIgPGNiZXJnZXJAY2Jlcmdlci5uZXQ+ CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15 c3BhcmsubWU+CiAgKgogICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMC1vci1s YXRlcgogICovCkBAIC03LDM2ICs4LDQwIEBACiAjaWZuZGVmIF9LSVNfRVhJRl9JT19IXwogI2Rl ZmluZSBfS0lTX0VYSUZfSU9fSF8KIAotI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfaW9fYmFja2Vu ZC5oPgorI2luY2x1ZGUgPFFPYmplY3Q+CiAKICNpbmNsdWRlIDxrbG9jYWxpemVkc3RyaW5nLmg+ CiAKKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaD4KKwogY2xhc3MgS2lzRXhp ZklPIDogcHVibGljIEtpc01ldGFEYXRhOjpJT0JhY2tlbmQKIHsKLSAgICBzdHJ1Y3QgUHJpdmF0 ZTsKIHB1YmxpYzoKICAgICBLaXNFeGlmSU8oKTsKICAgICB+S2lzRXhpZklPKCkgb3ZlcnJpZGU7 Ci0gICAgUVN0cmluZyBpZCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBRU3RyaW5nIGlkKCkgY29u c3Qgb3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVybiAiZXhpZiI7CiAgICAgfQotICAgIFFT dHJpbmcgbmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBRU3RyaW5nIG5hbWUoKSBjb25zdCBv dmVycmlkZQorICAgIHsKICAgICAgICAgcmV0dXJuIGkxOG4oIkV4aWYiKTsKICAgICB9Ci0gICAg QmFja2VuZFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBCYWNrZW5kVHlwZSB0eXBl KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVybiBCaW5hcnk7CiAgICAgfQot ICAgIGJvb2wgc3VwcG9ydFNhdmluZygpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBib29sIHN1cHBv cnRTYXZpbmcoKSBjb25zdCBvdmVycmlkZQorICAgIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg ICAgfQotICAgIGJvb2wgc2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJT0Rldmlj ZSogaW9EZXZpY2UsIEhlYWRlclR5cGUgaGVhZGVyVHlwZSA9IE5vSGVhZGVyKSBjb25zdCBvdmVy cmlkZTsKLSAgICBib29sIGNhblNhdmVBbGxFbnRyaWVzKEtpc01ldGFEYXRhOjpTdG9yZSogc3Rv cmUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc3VwcG9ydExvYWRpbmcoKSBjb25zdCBvdmVy cmlkZSB7CisgICAgYm9vbCBzYXZlVG8oS2lzTWV0YURhdGE6OlN0b3JlICpzdG9yZSwgUUlPRGV2 aWNlICppb0RldmljZSwgSGVhZGVyVHlwZSBoZWFkZXJUeXBlID0gTm9IZWFkZXIpIGNvbnN0IG92 ZXJyaWRlOworICAgIGJvb2wgY2FuU2F2ZUFsbEVudHJpZXMoS2lzTWV0YURhdGE6OlN0b3JlICpz dG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzdXBwb3J0TG9hZGluZygpIGNvbnN0IG92 ZXJyaWRlCisgICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBsb2Fk RnJvbShLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZpY2UqIGlvRGV2aWNlKSBjb25z dCBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUHJpdmF0ZSogY29uc3QgZDsKKyAgICBib29sIGxv YWRGcm9tKEtpc01ldGFEYXRhOjpTdG9yZSAqc3RvcmUsIFFJT0RldmljZSAqaW9EZXZpY2UpIGNv bnN0IG92ZXJyaWRlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9wbHVnaW5zL21ldGFkYXRh L2V4aWYva2lzX2V4aWZfcGx1Z2luLmNwcCBiL3BsdWdpbnMvbWV0YWRhdGEvZXhpZi9raXNfZXhp Zl9wbHVnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNlYTRi Njg4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL21ldGFkYXRhL2V4aWYva2lzX2V4aWZf cGx1Z2luLmNwcApAQCAtMCwwICsxLDI5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg S3JpdGEKKyAqCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEwuIEUuIFNlZ292aWEg PGFteUBhbXlzcGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vci1sYXRlcgorICovCisKKyNpbmNsdWRlICJraXNfZXhpZl9wbHVnaW4uaCIKKworI2luY2x1 ZGUgPGtwbHVnaW5mYWN0b3J5Lmg+CisKKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2JhY2tlbmRf cmVnaXN0cnkuaD4KKworI2luY2x1ZGUgImtpc19leGlmX2lvLmgiCisKK0tfUExVR0lOX0ZBQ1RP UllfV0lUSF9KU09OKEtpc0V4aWZJT1BsdWdpbkZhY3RvcnksICJrcml0YWV4aWYuanNvbiIsIHJl Z2lzdGVyUGx1Z2luPEtpc0V4aWZQbHVnaW4+KCk7KQorCitLaXNFeGlmUGx1Z2luOjpLaXNFeGlm UGx1Z2luKFFPYmplY3QgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0ICYpCisgICAgOiBRT2Jq ZWN0KHBhcmVudCkKK3sKKyAgICBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2Uo KS0+YWRkKG5ldyBLaXNFeGlmSU8oKSk7Cit9CisKK0tpc0V4aWZQbHVnaW46On5LaXNFeGlmUGx1 Z2luKCkKK3sKK30KKworI2luY2x1ZGUgImtpc19leGlmX3BsdWdpbi5tb2MiCmRpZmYgLS1naXQg YS9wbHVnaW5zL21ldGFkYXRhL2V4aWYva2lzX2V4aWZfcGx1Z2luLmggYi9wbHVnaW5zL21ldGFk YXRhL2V4aWYva2lzX2V4aWZfcGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNGNiYzZlNTZlMwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvbWV0YWRhdGEv ZXhpZi9raXNfZXhpZl9wbHVnaW4uaApAQCAtMCwwICsxLDIxIEBACisvKgorICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgS3JpdGEKKyAqCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEwu IEUuIFNlZ292aWEgPGFteUBhbXlzcGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vci1sYXRlcgorICovCisKKyNpZm5kZWYgX0tJU19FWElGX1BMVUdJTl9I XworI2RlZmluZSBfS0lTX0VYSUZfUExVR0lOX0hfCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitj bGFzcyBLaXNFeGlmUGx1Z2luIDogcHVibGljIFFPYmplY3QKK3sKK3B1YmxpYzoKKyAgICBLaXNF eGlmUGx1Z2luKFFPYmplY3QgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0ICYpOworICAgIH5L aXNFeGlmUGx1Z2luKCkgb3ZlcnJpZGU7Cit9OworCisjZW5kaWYgLy8gX0tJU19FWElGX1BMVUdJ Tl9IXwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9tZXRhZGF0YS9leGlmL2tyaXRhZXhpZi5qc29uIGIv cGx1Z2lucy9tZXRhZGF0YS9leGlmL2tyaXRhZXhpZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjU2ZjEzMTRjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5z L21ldGFkYXRhL2V4aWYva3JpdGFleGlmLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgIklk IjogIkVYSUYiLAorICAgICJUeXBlIjogIlNlcnZpY2UiLAorICAgICJYLUtERS1MaWJyYXJ5Ijog ImtyaXRhZXhpZiIsCisgICAgIlgtS0RFLVNlcnZpY2VUeXBlcyI6IFsKKyAgICAgICAgIktyaXRh L01ldGFkYXRhIgorICAgIF0sCisgICAgIlgtS3JpdGEtVmVyc2lvbiI6ICIyOCIKK30KZGlmZiAt LWdpdCBhL3BsdWdpbnMvbWV0YWRhdGEvaXB0Yy9DTWFrZUxpc3RzLnR4dCBiL3BsdWdpbnMvbWV0 YWRhdGEvaXB0Yy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi44MTNhMWQ2YThkCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9tZXRhZGF0YS9p cHRjL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTcgQEAKK3NldChrcml0YWlwdGNfU09VUkNF UworICAgIGtpc19pcHRjX2lvLmNwcAorICAgIGtpc19pcHRjX3BsdWdpbi5jcHAKKykKKworYWRk X2xpYnJhcnkoa3JpdGFpcHRjIE1PRFVMRSAke2tyaXRhaXB0Y19TT1VSQ0VTfSkKKworZ2VuZXJh dGVfZXhwb3J0X2hlYWRlcihrcml0YWlwdGMpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhrcml0 YWlwdGMKKyAgICBQUklWQVRFCisgICAgICAgIGtyaXRhbWV0YWRhdGEKKyAgICAgICAgS0Y1OjpD b3JlQWRkb25zCisgICAgICAgIExpYkV4aXYyOjpMaWJFeGl2MgorKQorCitpbnN0YWxsKFRBUkdF VFMga3JpdGFpcHRjIERFU1RJTkFUSU9OICR7S1JJVEFfUExVR0lOX0lOU1RBTExfRElSfSkKZGlm ZiAtLWdpdCBhL2xpYnMvdWkva2lzZXhpdjIva2lzX2lwdGNfaW8uY3BwIGIvcGx1Z2lucy9tZXRh ZGF0YS9pcHRjL2tpc19pcHRjX2lvLmNwcApzaW1pbGFyaXR5IGluZGV4IDUxJQpyZW5hbWUgZnJv bSBsaWJzL3VpL2tpc2V4aXYyL2tpc19pcHRjX2lvLmNwcApyZW5hbWUgdG8gcGx1Z2lucy9tZXRh ZGF0YS9pcHRjL2tpc19pcHRjX2lvLmNwcAppbmRleCBjYzQzOTE4ZDMyLi4wNWY2NmVlZjI5IDEw MDY0NAotLS0gYS9saWJzL3VpL2tpc2V4aXYyL2tpc19pcHRjX2lvLmNwcAorKysgYi9wbHVnaW5z L21ldGFkYXRhL2lwdGMva2lzX2lwdGNfaW8uY3BwCkBAIC0xLDI2ICsxLDI1IEBACiAvKgogICog IFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDcgQ3lyaWxsZSBCZXJnZXIgPGNiZXJnZXJAY2Jl cmdlci5uZXQ+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSBMLiBFLiBTZWdvdmlh IDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BM LTIuMS1vci1sYXRlcgogICovCiAjaW5jbHVkZSAia2lzX2lwdGNfaW8uaCIKIAotI2luY2x1ZGUg PGtpc19kZWJ1Zy5oPgotCiAjaW5jbHVkZSA8ZXhpdjIvaXB0Yy5ocHA+CiAKLSNpbmNsdWRlICJr aXNfZXhpdjIuaCIKLQotI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc3RvcmUuaD4KKyNpbmNsdWRl IDxraXNfZGVidWcuaD4KKyNpbmNsdWRlIDxraXNfZXhpdjJfY29tbW9uLmg+CiAjaW5jbHVkZSA8 a2lzX21ldGFfZGF0YV9lbnRyeS5oPgotI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfdmFsdWUuaD4K ICNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3NjaGVtYS5oPgogI2luY2x1ZGUgPGtpc19tZXRhX2Rh dGFfc2NoZW1hX3JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9zdG9yZS5oPgor I2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfdmFsdWUuaD4KIAogY29uc3QgY2hhciBwaG90b3Nob3BN YXJrZXJbXSA9ICJQaG90b3Nob3AgMy4wXDAiOwogY29uc3QgY2hhciBwaG90b3Nob3BCaW1JZF9b XSA9ICI4QklNIjsKIGNvbnN0IHVpbnQxNl90IHBob3Rvc2hvcElwdGMgPSAweDA0MDQ7Ci1jb25z dCBRQnl0ZUFycmF5IHBob3Rvc2hvcElwdGNfKChjaGFyKikmcGhvdG9zaG9wSXB0YywgMik7Citj b25zdCBRQnl0ZUFycmF5IHBob3Rvc2hvcElwdGNfKChjaGFyICopJnBob3Rvc2hvcElwdGMsIDIp OwogCiBzdHJ1Y3QgSVBUQ1RvS01EIHsKICAgICBRU3RyaW5nIGV4aXZUYWc7CkBAIC0yOSwzMCAr MjgsMzAgQEAgc3RydWN0IElQVENUb0tNRCB7CiB9OwogCiBzdGF0aWMgY29uc3QgSVBUQ1RvS01E IG1hcHBpbmdzW10gPSB7Ci0gICAgeyAiSXB0Yy5BcHBsaWNhdGlvbjIuQ2l0eSIsIEtpc01ldGFE YXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkNpdHkiIH0sCi0gICAgeyAiSXB0Yy5B cHBsaWNhdGlvbjIuQ29weXJpZ2h0IiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6RHVibGluQ29yZVNj aGVtYVVyaSwgInJpZ2h0cyIgfSwKLSAgICB7ICJJcHRjLkFwcGxpY2F0aW9uMi5Db3VudHJ5TmFt ZSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkNvdW50cnkiIH0s Ci0gICAgeyAiSXB0Yy5BcHBsaWNhdGlvbjIuQ291bnRyeUNvZGUiLCBLaXNNZXRhRGF0YTo6U2No ZW1hOjpJUFRDU2NoZW1hVXJpLCAiQ291bnRyeUNvZGUiIH0sCi0gICAgeyAiSXB0Yy5BcHBsaWNh dGlvbjIuQnlsaW5lIiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6RHVibGluQ29yZVNjaGVtYVVyaSwg ImNyZWF0b3IiIH0sCi0gICAgeyAiSXB0Yy5BcHBsaWNhdGlvbjIuQnlsaW5lVGl0bGUiLCBLaXNN ZXRhRGF0YTo6U2NoZW1hOjpQaG90b3Nob3BTY2hlbWFVcmksICJBdXRob3JzUG9zaXRpb24iIH0s Ci0gICAgeyAiSXB0Yy5BcHBsaWNhdGlvbjIuRGF0ZUNyZWF0ZWQiLCBLaXNNZXRhRGF0YTo6U2No ZW1hOjpQaG90b3Nob3BTY2hlbWFVcmksICJEYXRlQ3JlYXRlZCIgfSwKLSAgICB7ICJJcHRjLkFw cGxpY2F0aW9uMi5DYXB0aW9uIiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6RHVibGluQ29yZVNjaGVt YVVyaSwgImRlc2NyaXB0aW9uIiB9LAotICAgIHsgIklwdGMuQXBwbGljYXRpb24yLldyaXRlciIs IEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkNhcHRpb25Xcml0ZXIi IH0sCi0gICAgeyAiSXB0Yy5BcHBsaWNhdGlvbjIuSGVhZGxpbmUiLCBLaXNNZXRhRGF0YTo6U2No ZW1hOjpQaG90b3Nob3BTY2hlbWFVcmksICJIZWFkbGluZSIgfSwKLSAgICB7ICJJcHRjLkFwcGxp Y2F0aW9uMi5TcGVjaWFsSW5zdHJ1Y3Rpb25zIiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6UGhvdG9z aG9wU2NoZW1hVXJpLCAiSW5zdHJ1Y3Rpb25zIiB9LAotICAgIHsgIklwdGMuQXBwbGljYXRpb24y Lk9iamVjdEF0dHJpYnV0ZSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OklQVENTY2hlbWFVcmksICJJ bnRlbGxlY3R1YWxHZW5yZSIgfSwKLSAgICB7ICJJcHRjLkFwcGxpY2F0aW9uMi5UcmFuc21pc3Np b25SZWZlcmVuY2UiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpQaG90b3Nob3BTY2hlbWFVcmksICJK b2JJRCIgfSwKLSAgICB7ICJJcHRjLkFwcGxpY2F0aW9uMi5LZXl3b3JkcyIsIEtpc01ldGFEYXRh OjpTY2hlbWE6OkR1YmxpbkNvcmVTY2hlbWFVcmksICJzdWJqZWN0IiB9LAotICAgIHsgIklwdGMu QXBwbGljYXRpb24yLlN1YkxvY2F0aW9uIiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6SVBUQ1NjaGVt YVVyaSwgIkxvY2F0aW9uIiB9LAotICAgIHsgIklwdGMuQXBwbGljYXRpb24yLkNyZWRpdCIsIEtp c01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkNyZWRpdCIgfSwKLSAgICB7 ICJJcHRjLkFwcGxpY2F0aW9uMi5Qcm92aW5jZVN0YXRlIiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6 UGhvdG9zaG9wU2NoZW1hVXJpLCAiU3RhdGUiIH0sCi0gICAgeyAiSXB0Yy5BcHBsaWNhdGlvbjIu U291cmNlIiwgS2lzTWV0YURhdGE6OlNjaGVtYTo6UGhvdG9zaG9wU2NoZW1hVXJpLCAiU291cmNl IiB9LAotICAgIHsgIklwdGMuQXBwbGljYXRpb24yLlN1YmplY3QiLCBLaXNNZXRhRGF0YTo6U2No ZW1hOjpJUFRDU2NoZW1hVXJpLCAiU3ViamVjdENvZGUiIH0sCi0gICAgeyAiSXB0Yy5BcHBsaWNh dGlvbjIuT2JqZWN0TmFtZSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OkR1YmxpbkNvcmVTY2hlbWFV cmksICJ0aXRsZSIgfSwKLSAgICB7ICJJcHRjLkFwcGxpY2F0aW9uMi5VcmdlbmN5IiwgS2lzTWV0 YURhdGE6OlNjaGVtYTo6UGhvdG9zaG9wU2NoZW1hVXJpLCAiVXJnZW5jeSIgfSwKLSAgICB7ICJJ cHRjLkFwcGxpY2F0aW9uMi5DYXRlZ29yeSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hv cFNjaGVtYVVyaSwgIkNhdGVnb3J5IiB9LAotICAgIHsgIklwdGMuQXBwbGljYXRpb24yLlN1cHBD YXRlZ29yeSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIlN1cHBs ZW1lbnRhbENhdGVnb3J5IiB9LAotICAgIHsgIiIsICIiLCAiIiB9IC8vIGluZGljYXRlcyB0aGUg ZW5kIG9mIHRoZSBhcnJheQorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuQ2l0eSIsIEtpc01ldGFE YXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkNpdHkifSwKKyAgICB7IklwdGMuQXBw bGljYXRpb24yLkNvcHlyaWdodCIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OkR1YmxpbkNvcmVTY2hl bWFVcmksICJyaWdodHMifSwKKyAgICB7IklwdGMuQXBwbGljYXRpb24yLkNvdW50cnlOYW1lIiwg S2lzTWV0YURhdGE6OlNjaGVtYTo6UGhvdG9zaG9wU2NoZW1hVXJpLCAiQ291bnRyeSJ9LAorICAg IHsiSXB0Yy5BcHBsaWNhdGlvbjIuQ291bnRyeUNvZGUiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpJ UFRDU2NoZW1hVXJpLCAiQ291bnRyeUNvZGUifSwKKyAgICB7IklwdGMuQXBwbGljYXRpb24yLkJ5 bGluZSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OkR1YmxpbkNvcmVTY2hlbWFVcmksICJjcmVhdG9y In0sCisgICAgeyJJcHRjLkFwcGxpY2F0aW9uMi5CeWxpbmVUaXRsZSIsIEtpc01ldGFEYXRhOjpT Y2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkF1dGhvcnNQb3NpdGlvbiJ9LAorICAgIHsiSXB0 Yy5BcHBsaWNhdGlvbjIuRGF0ZUNyZWF0ZWQiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpQaG90b3No b3BTY2hlbWFVcmksICJEYXRlQ3JlYXRlZCJ9LAorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuQ2Fw dGlvbiIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OkR1YmxpbkNvcmVTY2hlbWFVcmksICJkZXNjcmlw dGlvbiJ9LAorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuV3JpdGVyIiwgS2lzTWV0YURhdGE6OlNj aGVtYTo6UGhvdG9zaG9wU2NoZW1hVXJpLCAiQ2FwdGlvbldyaXRlciJ9LAorICAgIHsiSXB0Yy5B cHBsaWNhdGlvbjIuSGVhZGxpbmUiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpQaG90b3Nob3BTY2hl bWFVcmksICJIZWFkbGluZSJ9LAorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuU3BlY2lhbEluc3Ry dWN0aW9ucyIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkluc3Ry dWN0aW9ucyJ9LAorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuT2JqZWN0QXR0cmlidXRlIiwgS2lz TWV0YURhdGE6OlNjaGVtYTo6SVBUQ1NjaGVtYVVyaSwgIkludGVsbGVjdHVhbEdlbnJlIn0sCisg ICAgeyJJcHRjLkFwcGxpY2F0aW9uMi5UcmFuc21pc3Npb25SZWZlcmVuY2UiLCBLaXNNZXRhRGF0 YTo6U2NoZW1hOjpQaG90b3Nob3BTY2hlbWFVcmksICJKb2JJRCJ9LAorICAgIHsiSXB0Yy5BcHBs aWNhdGlvbjIuS2V5d29yZHMiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpEdWJsaW5Db3JlU2NoZW1h VXJpLCAic3ViamVjdCJ9LAorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuU3ViTG9jYXRpb24iLCBL aXNNZXRhRGF0YTo6U2NoZW1hOjpJUFRDU2NoZW1hVXJpLCAiTG9jYXRpb24ifSwKKyAgICB7Iklw dGMuQXBwbGljYXRpb24yLkNyZWRpdCIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNj aGVtYVVyaSwgIkNyZWRpdCJ9LAorICAgIHsiSXB0Yy5BcHBsaWNhdGlvbjIuUHJvdmluY2VTdGF0 ZSIsIEtpc01ldGFEYXRhOjpTY2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIlN0YXRlIn0sCisg ICAgeyJJcHRjLkFwcGxpY2F0aW9uMi5Tb3VyY2UiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpQaG90 b3Nob3BTY2hlbWFVcmksICJTb3VyY2UifSwKKyAgICB7IklwdGMuQXBwbGljYXRpb24yLlN1Ympl Y3QiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpJUFRDU2NoZW1hVXJpLCAiU3ViamVjdENvZGUifSwK KyAgICB7IklwdGMuQXBwbGljYXRpb24yLk9iamVjdE5hbWUiLCBLaXNNZXRhRGF0YTo6U2NoZW1h OjpEdWJsaW5Db3JlU2NoZW1hVXJpLCAidGl0bGUifSwKKyAgICB7IklwdGMuQXBwbGljYXRpb24y LlVyZ2VuY3kiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpQaG90b3Nob3BTY2hlbWFVcmksICJVcmdl bmN5In0sCisgICAgeyJJcHRjLkFwcGxpY2F0aW9uMi5DYXRlZ29yeSIsIEtpc01ldGFEYXRhOjpT Y2hlbWE6OlBob3Rvc2hvcFNjaGVtYVVyaSwgIkNhdGVnb3J5In0sCisgICAgeyJJcHRjLkFwcGxp Y2F0aW9uMi5TdXBwQ2F0ZWdvcnkiLCBLaXNNZXRhRGF0YTo6U2NoZW1hOjpQaG90b3Nob3BTY2hl bWFVcmksICJTdXBwbGVtZW50YWxDYXRlZ29yeSJ9LAorICAgIHsiIiwgIiIsICIifSAvLyBpbmRp Y2F0ZXMgdGhlIGVuZCBvZiB0aGUgYXJyYXkKIH07CiAKIHN0cnVjdCBLaXNJcHRjSU86OlByaXZh dGUgewpAQCAtNjAsOCArNTksMTAgQEAgc3RydWN0IEtpc0lwdGNJTzo6UHJpdmF0ZSB7CiAgICAg UUhhc2g8UVN0cmluZywgSVBUQ1RvS01EPiBrbWRUb0lQVEM7CiB9OwogCi0vLyAtLS0tIEltcGxl bWVudGF0aW9uIG9mIEtpc0V4aWZJTyAtLS0tLy8KLUtpc0lwdGNJTzo6S2lzSXB0Y0lPKCkgOiBk KG5ldyBQcml2YXRlKQorLy8gLS0tLSBJbXBsZW1lbnRhdGlvbiBvZiBLaXNJcHRjSU8gLS0tLS8v CitLaXNJcHRjSU86Oktpc0lwdGNJTygpCisgICAgOiBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kKCkK KyAgICAsIGQobmV3IFByaXZhdGUpCiB7CiB9CiAKQEAgLTc1LDQ2ICs3Niw0NiBAQCB2b2lkIEtp c0lwdGNJTzo6aW5pdE1hcHBpbmdzVGFibGUoKSBjb25zdAogICAgIC8vIEZvciBzb21lIHJlYXNv biwgaW5pdGlhbGl6aW5nIHRoZSB0YWJsZXMgaW4gdGhlIGNvbnN0cnVjdG9yIG1ha2VzIHRoZSBp dCBjcmFzaAogICAgIGlmIChkLT5pcHRjVG9LTUQuc2l6ZSgpID09IDApIHsKICAgICAgICAgZm9y IChpbnQgaSA9IDA7ICFtYXBwaW5nc1tpXS5leGl2VGFnLmlzRW1wdHkoKTsgaSsrKSB7Ci0gICAg ICAgICAgICBkYmdLcml0YSA8PCAibWFwcGluZ1tpXSA9ICIgPDwgbWFwcGluZ3NbaV0uZXhpdlRh ZyA8PCAiICIgPDwgbWFwcGluZ3NbaV0ubmFtZXNwYWNlVXJpIDw8ICIgIiA8PCBtYXBwaW5nc1tp XS5uYW1lOworICAgICAgICAgICAgZGJnS3JpdGEgPDwgIm1hcHBpbmdbaV0gPSAiIDw8IG1hcHBp bmdzW2ldLmV4aXZUYWcgPDwgIiAiIDw8IG1hcHBpbmdzW2ldLm5hbWVzcGFjZVVyaSA8PCAiICIK KyAgICAgICAgICAgICAgICAgICAgIDw8IG1hcHBpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICBk LT5pcHRjVG9LTURbbWFwcGluZ3NbaV0uZXhpdlRhZ10gPSBtYXBwaW5nc1tpXTsKLSAgICAgICAg ICAgIGQtPmttZFRvSVBUQ1sKLSAgICAgICAgICAgICAgICBLaXNNZXRhRGF0YTo6U2NoZW1hUmVn aXN0cnk6Omluc3RhbmNlKCkKLSAgICAgICAgICAgICAgICAtPnNjaGVtYUZyb21VcmkobWFwcGlu Z3NbaV0ubmFtZXNwYWNlVXJpKQotICAgICAgICAgICAgICAgIC0+Z2VuZXJhdGVRdWFsaWZpZWRO YW1lKG1hcHBpbmdzW2ldLm5hbWUpXSA9IG1hcHBpbmdzW2ldOworICAgICAgICAgICAgZC0+a21k VG9JUFRDW0tpc01ldGFEYXRhOjpTY2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPnNjaGVtYUZyb21VcmkobWFwcGluZ3NbaV0ubmFtZXNwYWNl VXJpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPmdlbmVyYXRlUXVhbGlmaWVkTmFt ZShtYXBwaW5nc1tpXS5uYW1lKV0gPSBtYXBwaW5nc1tpXTsKICAgICAgICAgfQogICAgIH0KIH0K IAotYm9vbCBLaXNJcHRjSU86OnNhdmVUbyhLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9E ZXZpY2UqIGlvRGV2aWNlLCBIZWFkZXJUeXBlIGhlYWRlclR5cGUpIGNvbnN0Citib29sIEtpc0lw dGNJTzo6c2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSAqc3RvcmUsIFFJT0RldmljZSAqaW9EZXZp Y2UsIEhlYWRlclR5cGUgaGVhZGVyVHlwZSkgY29uc3QKIHsKICAgICBRU3RyaW5nTGlzdCBibG9j a2VkRW50cmllcyA9IFFTdHJpbmdMaXN0KCkgPDwgInBob3Rvc2hvcDpEYXRlQ3JlYXRlZCI7CiAK ICAgICBpbml0TWFwcGluZ3NUYWJsZSgpOwogICAgIGlvRGV2aWNlLT5vcGVuKFFJT0RldmljZTo6 V3JpdGVPbmx5KTsKICAgICBFeGl2Mjo6SXB0Y0RhdGEgaXB0Y0RhdGE7Ci0gICAgZm9yIChRSGFz aDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6RW50cnk+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0b3Jl LT5iZWdpbigpOwotICAgICAgICAgICAgaXQgIT0gc3RvcmUtPmVuZCgpOyArK2l0KSB7Ci0gICAg ICAgIGNvbnN0IEtpc01ldGFEYXRhOjpFbnRyeSYgZW50cnkgPSAqaXQ7CisgICAgZm9yIChRSGFz aDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6RW50cnk+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0b3Jl LT5iZWdpbigpOyBpdCAhPSBzdG9yZS0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgY29uc3QgS2lz TWV0YURhdGE6OkVudHJ5ICZlbnRyeSA9ICppdDsKICAgICAgICAgaWYgKGQtPmttZFRvSVBUQy5j b250YWlucyhlbnRyeS5xdWFsaWZpZWROYW1lKCkpKSB7CiAgICAgICAgICAgICBpZiAoYmxvY2tl ZEVudHJpZXMuY29udGFpbnMoZW50cnkucXVhbGlmaWVkTmFtZSgpKSkgewogICAgICAgICAgICAg ICAgIHdhcm5Lcml0YSA8PCAic2tpcHBpbmciIDw8IGVudHJ5LnF1YWxpZmllZE5hbWUoKSA8PCBl bnRyeS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIGlwdGNLZXlTdHIgPSBk LT5rbWRUb0lQVENbIGVudHJ5LnF1YWxpZmllZE5hbWUoKV0uZXhpdlRhZzsKKyAgICAgICAgICAg ICAgICBRU3RyaW5nIGlwdGNLZXlTdHIgPSBkLT5rbWRUb0lQVENbZW50cnkucXVhbGlmaWVkTmFt ZSgpXS5leGl2VGFnOwogICAgICAgICAgICAgICAgIEV4aXYyOjpJcHRjS2V5IGlwdGNLZXkocVBy aW50YWJsZShpcHRjS2V5U3RyKSk7Ci0gICAgICAgICAgICAgICAgRXhpdjI6OlZhbHVlICp2ID0g a21kVmFsdWVUb0V4aXZWYWx1ZShlbnRyeS52YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpdjI6OklwdGNEYXRhU2V0czo6ZGF0 YVNldFR5cGUoaXB0Y0tleS50YWcoKSwgaXB0Y0tleS5yZWNvcmQoKSkpOworICAgICAgICAgICAg ICAgIEV4aXYyOjpWYWx1ZSAqdiA9CisgICAgICAgICAgICAgICAgICAgIGttZFZhbHVlVG9FeGl2 VmFsdWUoZW50cnkudmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFeGl2Mjo6SXB0Y0RhdGFTZXRzOjpkYXRhU2V0VHlwZShpcHRjS2V5LnRhZygpLCBpcHRj S2V5LnJlY29yZCgpKSk7CiAKICAgICAgICAgICAgICAgICBpZiAodiAmJiB2LT50eXBlSWQoKSAh PSBFeGl2Mjo6aW52YWxpZFR5cGVJZCkgewogICAgICAgICAgICAgICAgICAgICBpcHRjRGF0YS5h ZGQoaXB0Y0tleSwgdik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAo RXhpdjI6OkFueUVycm9yJiBlKSB7CisgICAgICAgICAgICB9IGNhdGNoIChFeGl2Mjo6QW55RXJy b3IgJmUpIHsKICAgICAgICAgICAgICAgICBkYmdNZXRhRGF0YSA8PCAiZXhpdiBlcnJvciAiIDw8 IGUud2hhdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotI2lmICFFWElWMl9U RVNUX1ZFUlNJT04oMCwxOCwwKQorI2lmICFFWElWMl9URVNUX1ZFUlNJT04oMCwgMTgsIDApCiAg ICAgRXhpdjI6OkRhdGFCdWYgcmF3RGF0YSA9IGlwdGNEYXRhLmNvcHkoKTsKICNlbHNlCiAgICAg RXhpdjI6OkRhdGFCdWYgcmF3RGF0YSA9IEV4aXYyOjpJcHRjUGFyc2VyOjplbmNvZGUoaXB0Y0Rh dGEpOwpAQCAtMTIzLDcgKzEyNCw3IEBAIGJvb2wgS2lzSXB0Y0lPOjpzYXZlVG8oS2lzTWV0YURh dGE6OlN0b3JlKiBzdG9yZSwgUUlPRGV2aWNlKiBpb0RldmljZSwgSGVhZGVyVHlwCiAgICAgaWYg KGhlYWRlclR5cGUgPT0gS2lzTWV0YURhdGE6OklPQmFja2VuZDo6SnBlZ0hlYWRlcikgewogICAg ICAgICBRQnl0ZUFycmF5IGhlYWRlcjsKICAgICAgICAgaGVhZGVyLmFwcGVuZChwaG90b3Nob3BN YXJrZXIpOwotICAgICAgICBoZWFkZXIuYXBwZW5kKFFCeXRlQXJyYXkoMSwgMCkpOyAgIC8vIE51 bGwgdGVybWluYXRlZCBzdHJpbmcKKyAgICAgICAgaGVhZGVyLmFwcGVuZChRQnl0ZUFycmF5KDEs IDApKTsgLy8gTnVsbCB0ZXJtaW5hdGVkIHN0cmluZwogICAgICAgICBoZWFkZXIuYXBwZW5kKHBo b3Rvc2hvcEJpbUlkXyk7CiAgICAgICAgIGhlYWRlci5hcHBlbmQocGhvdG9zaG9wSXB0Y18pOwog ICAgICAgICBoZWFkZXIuYXBwZW5kKFFCeXRlQXJyYXkoMiwgMCkpOwpAQCAtMTM3LDM2ICsxMzgs MzYgQEAgYm9vbCBLaXNJcHRjSU86OnNhdmVUbyhLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBR SU9EZXZpY2UqIGlvRGV2aWNlLCBIZWFkZXJUeXAKICAgICAgICAgaW9EZXZpY2UtPndyaXRlKGhl YWRlcik7CiAgICAgfQogCi0gICAgaW9EZXZpY2UtPndyaXRlKChjb25zdCBjaGFyKikgcmF3RGF0 YS5wRGF0YV8sIHJhd0RhdGEuc2l6ZV8pOworICAgIGlvRGV2aWNlLT53cml0ZSgoY29uc3QgY2hh ciAqKXJhd0RhdGEucERhdGFfLCByYXdEYXRhLnNpemVfKTsKICAgICBpb0RldmljZS0+Y2xvc2Uo KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBLaXNJcHRjSU86OmNhblNhdmVBbGxFbnRy aWVzKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUpIGNvbnN0Citib29sIEtpc0lwdGNJTzo6Y2Fu U2F2ZUFsbEVudHJpZXMoS2lzTWV0YURhdGE6OlN0b3JlICpzdG9yZSkgY29uc3QKIHsKICAgICBR X1VOVVNFRChzdG9yZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEtpc0lwdGNJTzo6 bG9hZEZyb20oS2lzTWV0YURhdGE6OlN0b3JlKiBzdG9yZSwgUUlPRGV2aWNlKiBpb0RldmljZSkg Y29uc3QKK2Jvb2wgS2lzSXB0Y0lPOjpsb2FkRnJvbShLaXNNZXRhRGF0YTo6U3RvcmUgKnN0b3Jl LCBRSU9EZXZpY2UgKmlvRGV2aWNlKSBjb25zdAogewogICAgIGluaXRNYXBwaW5nc1RhYmxlKCk7 CiAgICAgZGJnTWV0YURhdGEgPDwgIkxvYWRpbmcgSVBUQyBUYWdzIjsKICAgICBpb0RldmljZS0+ b3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKICAgICBRQnl0ZUFycmF5IGFyciA9IGlvRGV2aWNl LT5yZWFkQWxsKCk7CiAgICAgRXhpdjI6OklwdGNEYXRhIGlwdGNEYXRhOwotI2lmICFFWElWMl9U RVNUX1ZFUlNJT04oMCwxOCwwKQotICAgIGlwdGNEYXRhLmxvYWQoKGNvbnN0IEV4aXYyOjpieXRl KilhcnIuZGF0YSgpLCBhcnIuc2l6ZSgpKTsKKyNpZiAhRVhJVjJfVEVTVF9WRVJTSU9OKDAsIDE4 LCAwKQorICAgIGlwdGNEYXRhLmxvYWQoKGNvbnN0IEV4aXYyOjpieXRlICopYXJyLmRhdGEoKSwg YXJyLnNpemUoKSk7CiAjZWxzZQotICAgIEV4aXYyOjpJcHRjUGFyc2VyOjpkZWNvZGUoaXB0Y0Rh dGEsIChjb25zdCBFeGl2Mjo6Ynl0ZSopYXJyLmRhdGEoKSwgYXJyLnNpemUoKSk7CisgICAgRXhp djI6OklwdGNQYXJzZXI6OmRlY29kZShpcHRjRGF0YSwgKGNvbnN0IEV4aXYyOjpieXRlICopYXJy LmRhdGEoKSwgYXJyLnNpemUoKSk7CiAjZW5kaWYKICAgICBkYmdNZXRhRGF0YSA8PCAiVGhlcmUg YXJlIiA8PCBpcHRjRGF0YS5jb3VudCgpIDw8ICIgZW50cmllcyBpbiB0aGUgSVBUQyBzZWN0aW9u IjsKLSAgICBmb3IgKEV4aXYyOjpJcHRjTWV0YWRhdGE6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXB0 Y0RhdGEuYmVnaW4oKTsKLSAgICAgICAgICAgIGl0ICE9IGlwdGNEYXRhLmVuZCgpOyArK2l0KSB7 CisgICAgZm9yIChFeGl2Mjo6SXB0Y01ldGFkYXRhOjpjb25zdF9pdGVyYXRvciBpdCA9IGlwdGNE YXRhLmJlZ2luKCk7IGl0ICE9IGlwdGNEYXRhLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGRiZ01l dGFEYXRhIDw8ICJSZWFkaW5nIGluZm8gZm9yIGtleSIgPDwgaXQtPmtleSgpLmNfc3RyKCk7CiAg ICAgICAgIGlmIChkLT5pcHRjVG9LTUQuY29udGFpbnMoaXQtPmtleSgpLmNfc3RyKCkpKSB7Ci0g ICAgICAgICAgICBjb25zdCBJUFRDVG9LTUQmIGlwdGNUb0tNZCA9IGQtPmlwdGNUb0tNRFtpdC0+ a2V5KCkuY19zdHIoKV07Ci0gICAgICAgICAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hKiBz Y2hlbWEgPSBLaXNNZXRhRGF0YTo6U2NoZW1hUmVnaXN0cnk6Omluc3RhbmNlKCktPnNjaGVtYUZy b21VcmkoaXB0Y1RvS01kLm5hbWVzcGFjZVVyaSk7CisgICAgICAgICAgICBjb25zdCBJUFRDVG9L TUQgJmlwdGNUb0tNZCA9IGQtPmlwdGNUb0tNRFtpdC0+a2V5KCkuY19zdHIoKV07CisgICAgICAg ICAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICpzY2hlbWEgPQorICAgICAgICAgICAgICAg IEtpc01ldGFEYXRhOjpTY2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShp cHRjVG9LTWQubmFtZXNwYWNlVXJpKTsKICAgICAgICAgICAgIEtpc01ldGFEYXRhOjpWYWx1ZSB2 YWx1ZTsKICAgICAgICAgICAgIGlmIChpcHRjVG9LTWQuZXhpdlRhZyA9PSAiSXB0Yy5BcHBsaWNh dGlvbjIuS2V5d29yZHMiKSB7CiAgICAgICAgICAgICAgICAgUV9BU1NFUlQoaXQtPmdldFZhbHVl KCktPnR5cGVJZCgpID09IEV4aXYyOjpzdHJpbmcpOwpkaWZmIC0tZ2l0IGEvbGlicy91aS9raXNl eGl2Mi9raXNfaXB0Y19pby5oIGIvcGx1Z2lucy9tZXRhZGF0YS9pcHRjL2tpc19pcHRjX2lvLmgK c2ltaWxhcml0eSBpbmRleCA1NiUKcmVuYW1lIGZyb20gbGlicy91aS9raXNleGl2Mi9raXNfaXB0 Y19pby5oCnJlbmFtZSB0byBwbHVnaW5zL21ldGFkYXRhL2lwdGMva2lzX2lwdGNfaW8uaAppbmRl eCAzYjRlYTJmYTkyLi5hNzA5MmY3OGU4IDEwMDY0NAotLS0gYS9saWJzL3VpL2tpc2V4aXYyL2tp c19pcHRjX2lvLmgKKysrIGIvcGx1Z2lucy9tZXRhZGF0YS9pcHRjL2tpc19pcHRjX2lvLmgKQEAg LTEsNSArMSw2IEBACiAvKgogICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDcgQ3lyaWxs ZSBCZXJnZXIgPGNiZXJnZXJAY2Jlcmdlci5uZXQ+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4 dDogMjAyMSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMS1vci1sYXRlcgogICovCkBAIC03LDM4ICs4LDQ1IEBA CiAjaWZuZGVmIF9LSVNfSVBUQ19JT19IXwogI2RlZmluZSBfS0lTX0lQVENfSU9fSF8KIAotI2lu Y2x1ZGUgPGtpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5oPgotCiAjaW5jbHVkZSA8a2xvY2FsaXpl ZHN0cmluZy5oPgogCisjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9pb19iYWNrZW5kLmg+CisKIGNs YXNzIEtpc0lwdGNJTyA6IHB1YmxpYyBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kCiB7Ci0gICAgc3Ry dWN0IFByaXZhdGU7CiBwdWJsaWM6CiAgICAgS2lzSXB0Y0lPKCk7CiAgICAgfktpc0lwdGNJTygp IG92ZXJyaWRlOwotICAgIFFTdHJpbmcgaWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgUVN0cmlu ZyBpZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgewogICAgICAgICByZXR1cm4gImlwdGMiOwogICAg IH0KLSAgICBRU3RyaW5nIG5hbWUoKSBjb25zdCBvdmVycmlkZSB7CisgICAgUVN0cmluZyBuYW1l KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVybiBpMThuKCJJcHRjIik7CiAg ICAgfQotICAgIEJhY2tlbmRUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7CisgICAgQmFja2Vu ZFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgewogICAgICAgICByZXR1cm4gQmluYXJ5 OwogICAgIH0KLSAgICBib29sIHN1cHBvcnRTYXZpbmcoKSBjb25zdCBvdmVycmlkZSB7CisgICAg Ym9vbCBzdXBwb3J0U2F2aW5nKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVy biB0cnVlOwogICAgIH0KLSAgICBib29sIHNhdmVUbyhLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3Jl LCBRSU9EZXZpY2UqIGlvRGV2aWNlLCBIZWFkZXJUeXBlIGhlYWRlclR5cGUgPSBOb0hlYWRlcikg Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5TYXZlQWxsRW50cmllcyhLaXNNZXRhRGF0YTo6 U3RvcmUqIHN0b3JlKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRMb2FkaW5nKCkg Y29uc3Qgb3ZlcnJpZGUgeworICAgIGJvb2wgc2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSAqc3Rv cmUsIFFJT0RldmljZSAqaW9EZXZpY2UsIEhlYWRlclR5cGUgaGVhZGVyVHlwZSA9IE5vSGVhZGVy KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGNhblNhdmVBbGxFbnRyaWVzKEtpc01ldGFEYXRh OjpTdG9yZSAqc3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydExvYWRpbmco KSBjb25zdCBvdmVycmlkZQorICAgIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg IGJvb2wgbG9hZEZyb20oS2lzTWV0YURhdGE6OlN0b3JlKiBzdG9yZSwgUUlPRGV2aWNlKiBpb0Rl dmljZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBsb2FkRnJvbShLaXNNZXRhRGF0YTo6U3Rv cmUgKnN0b3JlLCBRSU9EZXZpY2UgKmlvRGV2aWNlKSBjb25zdCBvdmVycmlkZTsKKwogcHJpdmF0 ZToKICAgICB2b2lkIGluaXRNYXBwaW5nc1RhYmxlKCkgY29uc3Q7CisKIHByaXZhdGU6Ci0gICAg UHJpdmF0ZSogY29uc3QgZDsKKyAgICBzdHJ1Y3QgUHJpdmF0ZTsKKyAgICBQcml2YXRlICpjb25z dCBkOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9wbHVnaW5zL21ldGFkYXRhL2lwdGMva2lz X2lwdGNfcGx1Z2luLmNwcCBiL3BsdWdpbnMvbWV0YWRhdGEvaXB0Yy9raXNfaXB0Y19wbHVnaW4u Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRlYTY0N2NmMmYKLS0t IC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL21ldGFkYXRhL2lwdGMva2lzX2lwdGNfcGx1Z2luLmNw cApAQCAtMCwwICsxLDI5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgS3JpdGEKKyAq CisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEwuIEUuIFNlZ292aWEgPGFteUBhbXlz cGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRl cgorICovCisKKyNpbmNsdWRlICJraXNfaXB0Y19wbHVnaW4uaCIKKworI2luY2x1ZGUgPGtwbHVn aW5mYWN0b3J5Lmg+CisKKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX2JhY2tlbmRfcmVnaXN0cnku aD4KKworI2luY2x1ZGUgImtpc19pcHRjX2lvLmgiCisKK0tfUExVR0lOX0ZBQ1RPUllfV0lUSF9K U09OKEtpc0lwdGNJT1BsdWdpbkZhY3RvcnksICJrcml0YWlwdGMuanNvbiIsIHJlZ2lzdGVyUGx1 Z2luPEtpc0lwdGNQbHVnaW4+KCk7KQorCitLaXNJcHRjUGx1Z2luOjpLaXNJcHRjUGx1Z2luKFFP YmplY3QgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0ICYpCisgICAgOiBRT2JqZWN0KHBhcmVu dCkKK3sKKyAgICBLaXNNZXRhZGF0YUJhY2tlbmRSZWdpc3RyeTo6aW5zdGFuY2UoKS0+YWRkKG5l dyBLaXNJcHRjSU8oKSk7Cit9CisKK0tpc0lwdGNQbHVnaW46On5LaXNJcHRjUGx1Z2luKCkKK3sK K30KKworI2luY2x1ZGUgImtpc19pcHRjX3BsdWdpbi5tb2MiCmRpZmYgLS1naXQgYS9wbHVnaW5z L21ldGFkYXRhL2lwdGMva2lzX2lwdGNfcGx1Z2luLmggYi9wbHVnaW5zL21ldGFkYXRhL2lwdGMv a2lzX2lwdGNfcGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u MmQzZDgxMzE3MwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvbWV0YWRhdGEvaXB0Yy9raXNf aXB0Y19wbHVnaW4uaApAQCAtMCwwICsxLDIxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgS3JpdGEKKyAqCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEwuIEUuIFNlZ292 aWEgPGFteUBhbXlzcGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vci1sYXRlcgorICovCisKKyNpZm5kZWYgX0tJU19JUFRDX1BMVUdJTl9IXworI2RlZmlu ZSBfS0lTX0lQVENfUExVR0lOX0hfCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBLaXNJ cHRjUGx1Z2luIDogcHVibGljIFFPYmplY3QKK3sKK3B1YmxpYzoKKyAgICBLaXNJcHRjUGx1Z2lu KFFPYmplY3QgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0ICYpOworICAgIH5LaXNJcHRjUGx1 Z2luKCkgb3ZlcnJpZGU7Cit9OworCisjZW5kaWYgLy8gX0tJU19JUFRDX1BMVUdJTl9IXwpkaWZm IC0tZ2l0IGEvcGx1Z2lucy9tZXRhZGF0YS9pcHRjL2tyaXRhaXB0Yy5qc29uIGIvcGx1Z2lucy9t ZXRhZGF0YS9pcHRjL2tyaXRhaXB0Yy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjZhZjRmYWM5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL21ldGFkYXRh L2lwdGMva3JpdGFpcHRjLmpzb24KQEAgLTAsMCArMSw3IEBACit7CisgICAgIklkIiA6ICJJUFRD IiwKKyAgICAiVHlwZSIgOiAiU2VydmljZSIsCisgICAgIlgtS0RFLUxpYnJhcnkiIDogImtyaXRh aXB0YyIsCisgICAgIlgtS0RFLVNlcnZpY2VUeXBlcyIgOiBbIktyaXRhL01ldGFkYXRhIl0sCisg ICAgIlgtS3JpdGEtVmVyc2lvbiIgOiAiMjgiCit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL21ldGFk YXRhL3Rlc3RzL0NNYWtlTGlzdHMudHh0IGIvcGx1Z2lucy9tZXRhZGF0YS90ZXN0cy9DTWFrZUxp c3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jNTBlZmU1ZjA4 Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9tZXRhZGF0YS90ZXN0cy9DTWFrZUxpc3RzLnR4 dApAQCAtMCwwICsxLDIxIEBACitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfU09VUkNFX0RJ Un0vc2RrL3Rlc3RzICkKKworaW5jbHVkZShFQ01BZGRUZXN0cykKKworbWFjcm9fYWRkX3VuaXR0 ZXN0X2RlZmluaXRpb25zKCkKKworaW5jbHVkZShLcml0YUFkZEJyb2tlblVuaXRUZXN0KQorCisj IyMjIyBUZXN0cyB0aGF0IGN1cnJlbnRseSBmYWlsIGFuZCBzaG91bGQgYmUgZml4ZWQgIyMjIyMK KworIyBXb3JrcyB1bmRlciBMaW51eCBidXQgZG9lcyBub3Qgd29yayB1bmRlciBXaW5kb3dzCitr cml0YV9hZGRfYnJva2VuX3VuaXRfdGVzdCgga2lzX2V4aWZfdGVzdC5jcHAKKyAgICBURVNUX05B TUUgS2lzRXhpZlRlc3QKKyAgICBMSU5LX0xJQlJBUklFUyBrcml0YW1ldGFkYXRhIGtyaXRhdWkg UXQ1OjpUZXN0CisgICAgTkFNRV9QUkVGSVggInBsdWdpbnMtbWV0YWRhdGEtIgorICAgICR7TUFD T1NfR1VJX1RFU1R9KQorCittYWNvc190ZXN0X2ZpeHJwYXRoKAorICAgICR7QlJPS0VOX1RFU1RT fQorICAgIEtpc0V4aWZUZXN0CisgICAgKQpkaWZmIC0tZ2l0IGEvbGlicy91aS90ZXN0cy9kYXRh L21ldGFkYXRhL2hwaW0zMjM4LmV4diBiL3BsdWdpbnMvbWV0YWRhdGEvdGVzdHMvZGF0YS9tZXRh ZGF0YS9ocGltMzIzOC5leHYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYnMv dWkvdGVzdHMvZGF0YS9tZXRhZGF0YS9ocGltMzIzOC5leHYKcmVuYW1lIHRvIHBsdWdpbnMvbWV0 YWRhdGEvdGVzdHMvZGF0YS9tZXRhZGF0YS9ocGltMzIzOC5leHYKZGlmZiAtLWdpdCBhL2xpYnMv dWkvdGVzdHMva2lzX2V4aXYyX3Rlc3QuY3BwIGIvcGx1Z2lucy9tZXRhZGF0YS90ZXN0cy9raXNf ZXhpZl90ZXN0LmNwcApzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBsaWJzL3VpL3Rl c3RzL2tpc19leGl2Ml90ZXN0LmNwcApyZW5hbWUgdG8gcGx1Z2lucy9tZXRhZGF0YS90ZXN0cy9r aXNfZXhpZl90ZXN0LmNwcAppbmRleCBjNTE1YzI1OWRjLi44NmE5YWNhMDI2IDEwMDY0NAotLS0g YS9saWJzL3VpL3Rlc3RzL2tpc19leGl2Ml90ZXN0LmNwcAorKysgYi9wbHVnaW5zL21ldGFkYXRh L3Rlc3RzL2tpc19leGlmX3Rlc3QuY3BwCkBAIC0xLDI3ICsxLDI4IEBACiAvKgogICogU1BEWC1G aWxlQ29weXJpZ2h0VGV4dDogMjAwOSBDeXJpbGxlIEJlcmdlciA8Y2JlcmdlckBjYmVyZ2VyLm5l dD4KKyAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgTC4gRS4gU2Vnb3ZpYSA8YW15QGFt eXNwYXJrLm1lPgogICoKICAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1s YXRlcgogICovCiAKLSNpbmNsdWRlICJraXNfZXhpdjJfdGVzdC5oIgorI2luY2x1ZGUgImtpc19l eGlmX3Rlc3QuaCIKIAorI2luY2x1ZGUgPGZpbGVzdGVzdC5oPgorI2luY2x1ZGUgPHNkay90ZXN0 cy90ZXN0dWkuaD4KICNpbmNsdWRlIDxzaW1wbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8UUNvcmVBcHBs aWNhdGlvbj4KIAogI2luY2x1ZGUgPFFCdWZmZXI+CisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlv bj4KIAotI2luY2x1ZGUgImtpc19kZWJ1Zy5oIgotI2luY2x1ZGUgImtpc19tZXRhX2RhdGFfZW50 cnkuaCIKLSNpbmNsdWRlICJraXNfbWV0YV9kYXRhX2lvX2JhY2tlbmQuaCIKLSNpbmNsdWRlICJr aXNfbWV0YV9kYXRhX3NjaGVtYS5oIgotI2luY2x1ZGUgImtpc19tZXRhX2RhdGFfc2NoZW1hX3Jl Z2lzdHJ5LmgiCi0jaW5jbHVkZSAia2lzX21ldGFfZGF0YV9zdG9yZS5oIgotI2luY2x1ZGUgImtp c19tZXRhX2RhdGFfdmFsaWRhdG9yLmgiCisjaW5jbHVkZSA8a2lzX2RlYnVnLmg+CisjaW5jbHVk ZSA8a2lzX21ldGFfZGF0YV9iYWNrZW5kX3JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8a2lzX21ldGFf ZGF0YV9lbnRyeS5oPgorI2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5oPgorI2lu Y2x1ZGUgPGtpc19tZXRhX2RhdGFfc2NoZW1hLmg+CisjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9z Y2hlbWFfcmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3N0b3JlLmg+CisjaW5j bHVkZSA8a2lzX21ldGFfZGF0YV92YWxpZGF0b3IuaD4KICNpbmNsdWRlIDxraXNfbWV0YV9kYXRh X3ZhbHVlLmg+Ci0jaW5jbHVkZSAia2lzZXhpdjIva2lzX2V4aXYyLmgiCi0jaW5jbHVkZSAiZmls ZXN0ZXN0LmgiCi0jaW5jbHVkZSAic2RrL3Rlc3RzL3Rlc3R1aS5oIgogCiAjaWZuZGVmIEZJTEVT X0RBVEFfRElSCiAjZXJyb3IgIkZJTEVTX0RBVEFfRElSIG5vdCBzZXQuIEEgZGlyZWN0b3J5IHdp dGggdGhlIGRhdGEgdXNlZCBmb3IgdGVzdGluZyB0aGUgbWV0YWRhdGEgcGFyc2VyIGluIGtyaXRh IgpAQCAtMjksMTEgKzMwLDkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEtpc01ldGFEYXRhOwogCi12 b2lkIEtpc0V4aXYyVGVzdDo6dGVzdEV4aWZMb2FkZXIoKQordm9pZCBLaXNFeGlmVGVzdDo6dGVz dEV4aWZMb2FkZXIoKQogewotICAgIEtpc0V4aXYyOjppbml0aWFsaXplKCk7Ci0KLSAgICBJT0Jh Y2tlbmQqIGV4aWZJTyA9IElPQmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5nZXQoImV4aWYi KTsKKyAgICBJT0JhY2tlbmQgKmV4aWZJTyA9IEtpc01ldGFkYXRhQmFja2VuZFJlZ2lzdHJ5Ojpp bnN0YW5jZSgpLT5nZXQoImV4aWYiKTsKICAgICBRVkVSSUZZKGV4aWZJTyk7CiAgICAgUUZpbGUg ZXhpZkZpbGUoUVN0cmluZyhGSUxFU19EQVRBX0RJUikgKyAiL21ldGFkYXRhL2hwaW0zMjM4LmV4 diIpOwogICAgIGV4aWZGaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSk7CkBAIC00MSwyMCAr NDAsMjIgQEAgdm9pZCBLaXNFeGl2MlRlc3Q6OnRlc3RFeGlmTG9hZGVyKCkKICAgICBRQnl0ZUFy cmF5IGV4aWZCeXRlcyA9IGV4aWZGaWxlLnJlYWRBbGwoKTsKICAgICBRQnVmZmVyIGV4aWZCdWZm ZXIoJmV4aWZCeXRlcyk7CiAKLSAgICBTdG9yZSogc3RvcmUgPSBuZXcgU3RvcmU7CisgICAgU3Rv cmUgKnN0b3JlID0gbmV3IFN0b3JlOwogICAgIGJvb2wgbG9hZFN1Y2Nlc3MgPSBleGlmSU8tPmxv YWRGcm9tKHN0b3JlLCAmZXhpZkJ1ZmZlcik7CiAgICAgUVZFUklGWShsb2FkU3VjY2Vzcyk7CiAg ICAgVmFsaWRhdG9yIHZhbGlkYXRvcihzdG9yZSk7CiAKICAgICBmb3IgKFFNYXA8UVN0cmluZywg VmFsaWRhdG9yOjpSZWFzb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHZhbGlkYXRvci5pbnZhbGlk RW50cmllcygpLmJlZ2luKCk7Ci0gICAgICAgICAgICBpdCAhPSB2YWxpZGF0b3IuaW52YWxpZEVu dHJpZXMoKS5lbmQoKTsgKytpdCkgeworICAgICAgICAgaXQgIT0gdmFsaWRhdG9yLmludmFsaWRF bnRyaWVzKCkuZW5kKCk7CisgICAgICAgICArK2l0KSB7CiAgICAgICAgIGRiZ0tyaXRhIDw8IGl0 LmtleSgpIDw8ICIgPSAiIDw8IGl0LnZhbHVlKCkudHlwZSgpIDw8ICIgZW50cnkgPSAiIDw8IHN0 b3JlLT5nZXRFbnRyeShpdC5rZXkoKSk7CiAgICAgfQogCiAgICAgUUNPTVBBUkUodmFsaWRhdG9y LmNvdW50SW52YWxpZEVudHJpZXMoKSwgMCk7CiAgICAgUUNPTVBBUkUodmFsaWRhdG9yLmNvdW50 VmFsaWRFbnRyaWVzKCksIDUxKTsKIAotICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqIHRp ZmZTY2hlbWEgPSBLaXNNZXRhRGF0YTo6U2NoZW1hUmVnaXN0cnk6Omluc3RhbmNlKCktPnNjaGVt YUZyb21VcmkoS2lzTWV0YURhdGE6OlNjaGVtYTo6VElGRlNjaGVtYVVyaSk7CisgICAgY29uc3Qg S2lzTWV0YURhdGE6OlNjaGVtYSAqdGlmZlNjaGVtYSA9CisgICAgICAgIEtpc01ldGFEYXRhOjpT Y2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShLaXNNZXRhRGF0YTo6U2No ZW1hOjpUSUZGU2NoZW1hVXJpKTsKIAogICAgIFFDT01QQVJFKHN0b3JlLT5nZXRFbnRyeSh0aWZm U2NoZW1hLCAiTWFrZSIpLnZhbHVlKCksIFZhbHVlKCJIZXdsZXR0LVBhY2thcmQiKSk7CiAgICAg UUNPTVBBUkUoc3RvcmUtPmdldEVudHJ5KHRpZmZTY2hlbWEsICJNb2RlbCIpLnZhbHVlKCksIFZh bHVlKCJIUCBQaG90b1NtYXJ0IFI3MDcgKFYwMS4wMCkgIikpOwpAQCAtNjQsMTYgKzY1LDE5IEBA IHZvaWQgS2lzRXhpdjJUZXN0Ojp0ZXN0RXhpZkxvYWRlcigpCiAgICAgUUNPTVBBUkUoc3RvcmUt PmdldEVudHJ5KHRpZmZTY2hlbWEsICJSZXNvbHV0aW9uVW5pdCIpLnZhbHVlKCksIFZhbHVlKDIp KTsKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnkodGlmZlNjaGVtYSwgIllDYkNyUG9zaXRp b25pbmciKS52YWx1ZSgpLCBWYWx1ZSgxKSk7CiAKLSAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2No ZW1hKiBleGlmU2NoZW1hID0gS2lzTWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5jZSgp LT5zY2hlbWFGcm9tVXJpKEtpc01ldGFEYXRhOjpTY2hlbWE6OkVYSUZTY2hlbWFVcmkpOworICAg IGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEgKmV4aWZTY2hlbWEgPQorICAgICAgICBLaXNNZXRh RGF0YTo6U2NoZW1hUmVnaXN0cnk6Omluc3RhbmNlKCktPnNjaGVtYUZyb21VcmkoS2lzTWV0YURh dGE6OlNjaGVtYTo6RVhJRlNjaGVtYVVyaSk7CiAKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50 cnkoZXhpZlNjaGVtYSwgIkV4cG9zdXJlVGltZSIpLnZhbHVlKCksIFZhbHVlKFJhdGlvbmFsKDM1 MzU1LCAxMDAwMDApKSk7CiAgICAgUUNPTVBBUkUoc3RvcmUtPmdldEVudHJ5KGV4aWZTY2hlbWEs ICJGTnVtYmVyIikudmFsdWUoKSwgVmFsdWUoUmF0aW9uYWwoMjgwLCAxMDApKSk7CiAgICAgUUNP TVBBUkUoc3RvcmUtPmdldEVudHJ5KGV4aWZTY2hlbWEsICJFeHBvc3VyZVByb2dyYW0iKS52YWx1 ZSgpLCBWYWx1ZSgyKSk7Ci0vLyAgICAgUUNPTVBBUkUoc3RvcmUtPmdldEVudHJ5KGV4aWZTY2hl bWEsICJJU09TcGVlZFJhdGluZ3MiKS52YWx1ZSgpLCBWYWx1ZSgxMDApKTsgLy8gVE9ETyBpdCdz IGEgbGlzdAorICAgIC8vICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnkoZXhpZlNjaGVtYSwg IklTT1NwZWVkUmF0aW5ncyIpLnZhbHVlKCksIFZhbHVlKDEwMCkpOyAvLyBUT0RPIGl0J3MgYSBs aXN0CiAgICAgLy8gVE9ETyB0ZXN0IE9FQ0YKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnko ZXhpZlNjaGVtYSwgIkV4aWZWZXJzaW9uIikudmFsdWUoKSwgVmFsdWUoIjAyMjAiKSk7Ci0gICAg UUNPTVBBUkUoc3RvcmUtPmdldEVudHJ5KGV4aWZTY2hlbWEsICJEYXRlVGltZU9yaWdpbmFsIiku dmFsdWUoKSwgVmFsdWUoUURhdGVUaW1lKFFEYXRlKDIwMDcsIDUsIDgpLCBRVGltZSgwLCAxOSwg MTgpKSkpOwotICAgIFFDT01QQVJFKHN0b3JlLT5nZXRFbnRyeShleGlmU2NoZW1hLCAiRGF0ZVRp bWVEaWdpdGl6ZWQiKS52YWx1ZSgpLCBWYWx1ZShRRGF0ZVRpbWUoUURhdGUoMjAwNywgNSwgOCks IFFUaW1lKDAsIDE5LCAxOCkpKSk7CisgICAgUUNPTVBBUkUoc3RvcmUtPmdldEVudHJ5KGV4aWZT Y2hlbWEsICJEYXRlVGltZU9yaWdpbmFsIikudmFsdWUoKSwKKyAgICAgICAgICAgICBWYWx1ZShR RGF0ZVRpbWUoUURhdGUoMjAwNywgNSwgOCksIFFUaW1lKDAsIDE5LCAxOCkpKSk7CisgICAgUUNP TVBBUkUoc3RvcmUtPmdldEVudHJ5KGV4aWZTY2hlbWEsICJEYXRlVGltZURpZ2l0aXplZCIpLnZh bHVlKCksCisgICAgICAgICAgICAgVmFsdWUoUURhdGVUaW1lKFFEYXRlKDIwMDcsIDUsIDgpLCBR VGltZSgwLCAxOSwgMTgpKSkpOwogICAgIC8vIFRPRE8gQ29tcG9uZW50c0NvbmZpZ3VyYXRpb24K ICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnkoZXhpZlNjaGVtYSwgIlNodXR0ZXJTcGVlZFZh bHVlIikudmFsdWUoKSwgVmFsdWUoUmF0aW9uYWwoMzg0LCAyNTYpKSk7CiAgICAgUUNPTVBBUkUo c3RvcmUtPmdldEVudHJ5KGV4aWZTY2hlbWEsICJBcGVydHVyZVZhbHVlIikudmFsdWUoKSwgVmFs dWUoUmF0aW9uYWwoNzgwLCAyNTYpKSk7CkBAIC04MiwxNyArODYsMTggQEAgdm9pZCBLaXNFeGl2 MlRlc3Q6OnRlc3RFeGlmTG9hZGVyKCkKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnkoZXhp ZlNjaGVtYSwgIk1heEFwZXJ0dXJlVmFsdWUiKS52YWx1ZSgpLCBWYWx1ZShSYXRpb25hbCgyODAs IDEwMCkpKTsKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnkoZXhpZlNjaGVtYSwgIlN1Ympl Y3REaXN0YW5jZSIpLnZhbHVlKCksIFZhbHVlKFJhdGlvbmFsKDY1NTM1LCAxMDAwKSkpOwogCi0K LSAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hKiBkY1NjaGVtYSA9IEtpc01ldGFEYXRhOjpT Y2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShLaXNNZXRhRGF0YTo6U2No ZW1hOjpEdWJsaW5Db3JlU2NoZW1hVXJpKTsKKyAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1h ICpkY1NjaGVtYSA9CisgICAgICAgIEtpc01ldGFEYXRhOjpTY2hlbWFSZWdpc3RyeTo6aW5zdGFu Y2UoKS0+c2NoZW1hRnJvbVVyaShLaXNNZXRhRGF0YTo6U2NoZW1hOjpEdWJsaW5Db3JlU2NoZW1h VXJpKTsKICAgICBRX1VOVVNFRChkY1NjaGVtYSk7CiAKLSAgICBjb25zdCBLaXNNZXRhRGF0YTo6 U2NoZW1hKiB4bXBTY2hlbWEgPSBLaXNNZXRhRGF0YTo6U2NoZW1hUmVnaXN0cnk6Omluc3RhbmNl KCktPnNjaGVtYUZyb21VcmkoS2lzTWV0YURhdGE6OlNjaGVtYTo6WE1QU2NoZW1hVXJpKTsKKyAg ICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICp4bXBTY2hlbWEgPQorICAgICAgICBLaXNNZXRh RGF0YTo6U2NoZW1hUmVnaXN0cnk6Omluc3RhbmNlKCktPnNjaGVtYUZyb21VcmkoS2lzTWV0YURh dGE6OlNjaGVtYTo6WE1QU2NoZW1hVXJpKTsKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnko eG1wU2NoZW1hLCAiQ3JlYXRvclRvb2wiKS52YWx1ZSgpLCBWYWx1ZSgiZGlnaUthbS0wLjkuMSIp KTsKICAgICBRQ09NUEFSRShzdG9yZS0+Z2V0RW50cnkoeG1wU2NoZW1hLCAiTW9kaWZ5RGF0ZSIp LnZhbHVlKCksIFZhbHVlKFFEYXRlVGltZShRRGF0ZSgyMDA3LCA1LCA4KSwgUVRpbWUoMCwgMTks IDE4KSkpKTsKIAotICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqIG1rblNjaGVtYSA9IEtp c01ldGFEYXRhOjpTY2hlbWFSZWdpc3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShLaXNN ZXRhRGF0YTo6U2NoZW1hOjpNYWtlck5vdGVTY2hlbWFVcmkpOworICAgIGNvbnN0IEtpc01ldGFE YXRhOjpTY2hlbWEgKm1rblNjaGVtYSA9CisgICAgICAgIEtpc01ldGFEYXRhOjpTY2hlbWFSZWdp c3RyeTo6aW5zdGFuY2UoKS0+c2NoZW1hRnJvbVVyaShLaXNNZXRhRGF0YTo6U2NoZW1hOjpNYWtl ck5vdGVTY2hlbWFVcmkpOwogICAgIFFDT01QQVJFKHN0b3JlLT5nZXRFbnRyeShta25TY2hlbWEs ICJSYXdEYXRhIikudmFsdWUoKSwgVmFsdWUoIlNGQk5aWFE9IikpOwogfQogCi1LSVNURVNUX01B SU4oS2lzRXhpdjJUZXN0KQotCitLSVNURVNUX01BSU4oS2lzRXhpZlRlc3QpCmRpZmYgLS1naXQg YS9saWJzL3VpL3Rlc3RzL2tpc19leGl2Ml90ZXN0LmggYi9wbHVnaW5zL21ldGFkYXRhL3Rlc3Rz L2tpc19leGlmX3Rlc3QuaApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBsaWJzL3Vp L3Rlc3RzL2tpc19leGl2Ml90ZXN0LmgKcmVuYW1lIHRvIHBsdWdpbnMvbWV0YWRhdGEvdGVzdHMv a2lzX2V4aWZfdGVzdC5oCmluZGV4IDExYzlmMTFjMGYuLmQ0NWQ4NzA4ZWEgMTAwNjQ0Ci0tLSBh L2xpYnMvdWkvdGVzdHMva2lzX2V4aXYyX3Rlc3QuaAorKysgYi9wbHVnaW5zL21ldGFkYXRhL3Rl c3RzL2tpc19leGlmX3Rlc3QuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBTUERYLUZpbGVDb3B5 cmlnaHRUZXh0OiAyMDA5IEN5cmlsbGUgQmVyZ2VyIDxjYmVyZ2VyQGNiZXJnZXIubmV0PgorICog U1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3Bhcmsu bWU+CiAgKgogICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiAg Ki8KQEAgLTksNyArMTAsNyBAQAogCiAjaW5jbHVkZSA8UU9iamVjdD4KIAotY2xhc3MgS2lzRXhp djJUZXN0IDogcHVibGljIFFPYmplY3QKK2NsYXNzIEtpc0V4aWZUZXN0IDogcHVibGljIFFPYmpl Y3QKIHsKICAgICBRX09CSkVDVAogcHJpdmF0ZSBRX1NMT1RTOgpkaWZmIC0tZ2l0IGEvcGx1Z2lu cy9tZXRhZGF0YS94bXAvQ01ha2VMaXN0cy50eHQgYi9wbHVnaW5zL21ldGFkYXRhL3htcC9DTWFr ZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNTI0NTJm ZWJjCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9tZXRhZGF0YS94bXAvQ01ha2VMaXN0cy50 eHQKQEAgLTAsMCArMSwxNyBAQAorc2V0KGtyaXRheG1wX1NPVVJDRVMKKyAgICBraXNfeG1wX2lv LmNwcAorICAgIGtpc194bXBfcGx1Z2luLmNwcAorKQorCithZGRfbGlicmFyeShrcml0YXhtcCBN T0RVTEUgJHtrcml0YXhtcF9TT1VSQ0VTfSkKKworZ2VuZXJhdGVfZXhwb3J0X2hlYWRlcihrcml0 YXhtcCkKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGtyaXRheG1wCisgICAgUFJJVkFURQorICAg ICAgICBrcml0YW1ldGFkYXRhCisgICAgICAgIEtGNTo6Q29yZUFkZG9ucworICAgICAgICBMaWJF eGl2Mjo6TGliRXhpdjIKKykKKworaW5zdGFsbChUQVJHRVRTIGtyaXRheG1wIERFU1RJTkFUSU9O ICR7S1JJVEFfUExVR0lOX0lOU1RBTExfRElSfSkKZGlmZiAtLWdpdCBhL2xpYnMvdWkva2lzZXhp djIva2lzX3htcF9pby5jcHAgYi9wbHVnaW5zL21ldGFkYXRhL3htcC9raXNfeG1wX2lvLmNwcApz aW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBsaWJzL3VpL2tpc2V4aXYyL2tpc194bXBf aW8uY3BwCnJlbmFtZSB0byBwbHVnaW5zL21ldGFkYXRhL3htcC9raXNfeG1wX2lvLmNwcAppbmRl eCBhZjM2ZmNkNmIxLi43YTFmNGU3NTUzIDEwMDY0NAotLS0gYS9saWJzL3VpL2tpc2V4aXYyL2tp c194bXBfaW8uY3BwCisrKyBiL3BsdWdpbnMvbWV0YWRhdGEveG1wL2tpc194bXBfaW8uY3BwCkBA IC0xLDUgKzEsNiBAQAogLyoKICAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA4LTIwMTAg Q3lyaWxsZSBCZXJnZXIgPGNiZXJnZXJAY2Jlcmdlci5uZXQ+CisgKiAgU1BEWC1GaWxlQ29weXJp Z2h0VGV4dDogMjAyMSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMC1vci1sYXRlcgogICovCkBAIC03LDE5ICs4 LDE5IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKLSNpbmNsdWRlICJraXNfZXhpdjIuaCIKLQot I2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfc3RvcmUuaD4KKyNpbmNsdWRlIDxraXNfZXhpdjJfY29t bW9uLmg+CiAjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9lbnRyeS5oPgogI2luY2x1ZGUgPGtpc19t ZXRhX2RhdGFfcGFyc2VyLmg+Ci0jaW5jbHVkZSA8a2lzX21ldGFfZGF0YV92YWx1ZS5oPgogI2lu Y2x1ZGUgPGtpc19tZXRhX2RhdGFfc2NoZW1hLmg+CiAjaW5jbHVkZSA8a2lzX21ldGFfZGF0YV9z Y2hlbWFfcmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRhX3N0b3JlLmg+CiAjaW5j bHVkZSA8a2lzX21ldGFfZGF0YV90eXBlX2luZm8uaD4KKyNpbmNsdWRlIDxraXNfbWV0YV9kYXRh X3ZhbHVlLmg+CiAKICNpbmNsdWRlIDxraXNfZGVidWcuaD4KIAogS2lzWE1QSU86Oktpc1hNUElP KCkKKyAgICA6IEtpc01ldGFEYXRhOjpJT0JhY2tlbmQoKQogewogfQogCkBAIC0yNyw3ICsyOCw3 IEBAIEtpc1hNUElPOjp+S2lzWE1QSU8oKQogewogfQogCi1pbmxpbmUgc3RkOjpzdHJpbmcgZXhp djJQcmVmaXgoY29uc3QgS2lzTWV0YURhdGE6OlNjaGVtYSogX3NjaGVtYSkKK2lubGluZSBzdGQ6 OnN0cmluZyBleGl2MlByZWZpeChjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICpfc2NoZW1hKQog ewogICAgIGNvbnN0IFFCeXRlQXJyYXkgbGF0aW4xU2NoZW1hVXJpID0gX3NjaGVtYS0+dXJpKCku dG9MYXRpbjEoKTsKICAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBFeGl2Mjo6WG1wUHJvcGVydGll czo6cHJlZml4KGxhdGluMVNjaGVtYVVyaS5jb25zdERhdGEoKSk7CkBAIC00MSwxMiArNDIsMTUg QEAgaW5saW5lIHN0ZDo6c3RyaW5nIGV4aXYyUHJlZml4KGNvbnN0IEtpc01ldGFEYXRhOjpTY2hl bWEqIF9zY2hlbWEpCiAKIG5hbWVzcGFjZQogewotdm9pZCBzYXZlU3RydWN0dXJlKEV4aXYyOjpY bXBEYXRhJiB4bXBEYXRhXywgY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcm IHByZWZpeCwgY29uc3QgUU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+JiBzdHJ1Y3R1 cmUsIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqIHN0cnVjdHVyZVNjaGVtYSkKK3ZvaWQgc2F2 ZVN0cnVjdHVyZShFeGl2Mjo6WG1wRGF0YSAmeG1wRGF0YV8sCisgICAgICAgICAgICAgICAgICAg Y29uc3QgUVN0cmluZyAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu ZyAmcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNYXA8UVN0cmluZywgS2lzTWV0 YURhdGE6OlZhbHVlPiAmc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IEtpc01l dGFEYXRhOjpTY2hlbWEgKnN0cnVjdHVyZVNjaGVtYSkKIHsKICAgICBzdGQ6OnN0cmluZyBzdHJ1 Y3RQcmVmaXggPSBleGl2MlByZWZpeChzdHJ1Y3R1cmVTY2hlbWEpOwotICAgIGZvciAoUU1hcDxR U3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0cnVjdHVy ZS5iZWdpbigpOwotICAgICAgICAgICAgaXQgIT0gc3RydWN0dXJlLmVuZCgpOyArK2l0KSB7Ci0g ICAgICAgIFFfQVNTRVJUKGl0LnZhbHVlKCkudHlwZSgpICE9IEtpc01ldGFEYXRhOjpWYWx1ZTo6 U3RydWN0dXJlKTsgICAvLyBDYW4ndCBuZXN0IHN0cnVjdHVyZQorICAgIGZvciAoUU1hcDxRU3Ry aW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0cnVjdHVyZS5i ZWdpbigpOyBpdCAhPSBzdHJ1Y3R1cmUuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUV9BU1NFUlQo aXQudmFsdWUoKS50eXBlKCkgIT0gS2lzTWV0YURhdGE6OlZhbHVlOjpTdHJ1Y3R1cmUpOyAvLyBD YW4ndCBuZXN0IHN0cnVjdHVyZQogICAgICAgICBRU3RyaW5nIGtleSA9IFFTdHJpbmcoIiUxLyUy OiUzIikuYXJnKG5hbWUpLmFyZyhzdHJ1Y3RQcmVmaXguY19zdHIoKSkuYXJnKGl0LmtleSgpKTsK ICAgICAgICAgRXhpdjI6OlhtcEtleSBla2V5KHByZWZpeCwga2V5LnRvTGF0aW4xKCkuY29uc3RE YXRhKCkpOwogICAgICAgICBkYmdNZXRhRGF0YSA8PCBwcFZhcihrZXkpIDw8IHBwVmFyKGVrZXku a2V5KCkuY19zdHIoKSk7CkBAIC01OCwyNSArNjIsMjQgQEAgdm9pZCBzYXZlU3RydWN0dXJlKEV4 aXYyOjpYbXBEYXRhJiB4bXBEYXRhXywgY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpz dHIKIH0KIH0KIAotYm9vbCBLaXNYTVBJTzo6c2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSogc3Rv cmUsIFFJT0RldmljZSogaW9EZXZpY2UsIEhlYWRlclR5cGUgaGVhZGVyVHlwZSkgY29uc3QKK2Jv b2wgS2lzWE1QSU86OnNhdmVUbyhLaXNNZXRhRGF0YTo6U3RvcmUgKnN0b3JlLCBRSU9EZXZpY2Ug KmlvRGV2aWNlLCBIZWFkZXJUeXBlIGhlYWRlclR5cGUpIGNvbnN0CiB7CiAgICAgZGJnTWV0YURh dGEgPDwgIlNhdmUgWE1QIERhdGEiOwogICAgIEV4aXYyOjpYbXBEYXRhIHhtcERhdGFfOwogCi0g ICAgZm9yIChRSGFzaDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6RW50cnk+Ojpjb25zdF9pdGVyYXRv ciBpdCA9IHN0b3JlLT5iZWdpbigpOwotICAgICAgICAgICAgaXQgIT0gc3RvcmUtPmVuZCgpOyAr K2l0KSB7Ci0gICAgICAgIGNvbnN0IEtpc01ldGFEYXRhOjpFbnRyeSYgZW50cnkgPSAqaXQ7Cisg ICAgZm9yIChRSGFzaDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6RW50cnk+Ojpjb25zdF9pdGVyYXRv ciBpdCA9IHN0b3JlLT5iZWdpbigpOyBpdCAhPSBzdG9yZS0+ZW5kKCk7ICsraXQpIHsKKyAgICAg ICAgY29uc3QgS2lzTWV0YURhdGE6OkVudHJ5ICZlbnRyeSA9ICppdDsKIAogICAgICAgICAvLyBD aGVjayB3aGV0aGVyIHRoZSBwcmVmaXggYW5kIG5hbWVzcGFjZSBhcmUga25vdyB0byBleGl2Mgog ICAgICAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBleGl2MlByZWZpeChlbnRyeS5zY2hlbWEoKSk7 CiAgICAgICAgIGRiZ01ldGFEYXRhIDw8ICJTYXZpbmcgIiA8PCBlbnRyeS5uYW1lKCk7CiAKLSAg ICAgICAgY29uc3QgS2lzTWV0YURhdGE6OlZhbHVlJiB2YWx1ZSA9IGVudHJ5LnZhbHVlKCk7Cisg ICAgICAgIGNvbnN0IEtpc01ldGFEYXRhOjpWYWx1ZSAmdmFsdWUgPSBlbnRyeS52YWx1ZSgpOwog Ci0gICAgICAgIGNvbnN0IEtpc01ldGFEYXRhOjpUeXBlSW5mbyogdHlwZUluZm8gPSBlbnRyeS5z Y2hlbWEoKS0+cHJvcGVydHlUeXBlKGVudHJ5Lm5hbWUoKSk7CisgICAgICAgIGNvbnN0IEtpc01l dGFEYXRhOjpUeXBlSW5mbyAqdHlwZUluZm8gPSBlbnRyeS5zY2hlbWEoKS0+cHJvcGVydHlUeXBl KGVudHJ5Lm5hbWUoKSk7CiAgICAgICAgIGlmICh2YWx1ZS50eXBlKCkgPT0gS2lzTWV0YURhdGE6 OlZhbHVlOjpTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgIFFNYXA8UVN0cmluZywgS2lzTWV0YURh dGE6OlZhbHVlPiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc1N0cnVjdHVyZSgpOwotICAgICAgICAgICAg Y29uc3QgS2lzTWV0YURhdGE6OlNjaGVtYSogc3RydWN0dXJlU2NoZW1hID0gMDsKKyAgICAgICAg ICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEgKnN0cnVjdHVyZVNjaGVtYSA9IDA7CiAgICAg ICAgICAgICBpZiAodHlwZUluZm8pIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTY2hlbWEg PSB0eXBlSW5mby0+c3RydWN0dXJlU2NoZW1hKCk7CiAgICAgICAgICAgICB9CkBAIC04OCwxMCAr OTEsMTEgQEAgYm9vbCBLaXNYTVBJTzo6c2F2ZVRvKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUs IFFJT0RldmljZSogaW9EZXZpY2UsIEhlYWRlclR5cGUKICAgICAgICAgICAgIHNhdmVTdHJ1Y3R1 cmUoeG1wRGF0YV8sIGVudHJ5Lm5hbWUoKSwgcHJlZml4LCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZVNj aGVtYSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBFeGl2Mjo6WG1wS2V5IGtleShw cmVmaXgsIGVudHJ5Lm5hbWUoKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKTsKLSAgICAgICAgICAg IGlmICh0eXBlSW5mbyAmJiAodHlwZUluZm8tPnByb3BlcnR5VHlwZSgpID09IEtpc01ldGFEYXRh OjpUeXBlSW5mbzo6T3JkZXJlZEFycmF5VHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8fCB0eXBlSW5mby0+cHJvcGVydHlUeXBlKCkgPT0gS2lzTWV0YURhdGE6OlR5cGVJbmZvOjpV bm9yZGVyZWRBcnJheVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHlwZUlu Zm8tPnByb3BlcnR5VHlwZSgpID09IEtpc01ldGFEYXRhOjpUeXBlSW5mbzo6QWx0ZXJuYXRpdmVB cnJheVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmIHR5cGVJbmZvLT5lbWJlZGRlZFByb3Bl cnR5VHlwZSgpLT5wcm9wZXJ0eVR5cGUoKSA9PSBLaXNNZXRhRGF0YTo6VHlwZUluZm86OlN0cnVj dHVyZVR5cGUpIHsKKyAgICAgICAgICAgIGlmICh0eXBlSW5mbworICAgICAgICAgICAgICAgICYm ICh0eXBlSW5mby0+cHJvcGVydHlUeXBlKCkgPT0gS2lzTWV0YURhdGE6OlR5cGVJbmZvOjpPcmRl cmVkQXJyYXlUeXBlCisgICAgICAgICAgICAgICAgICAgIHx8IHR5cGVJbmZvLT5wcm9wZXJ0eVR5 cGUoKSA9PSBLaXNNZXRhRGF0YTo6VHlwZUluZm86OlVub3JkZXJlZEFycmF5VHlwZQorICAgICAg ICAgICAgICAgICAgICB8fCB0eXBlSW5mby0+cHJvcGVydHlUeXBlKCkgPT0gS2lzTWV0YURhdGE6 OlR5cGVJbmZvOjpBbHRlcm5hdGl2ZUFycmF5VHlwZSkKKyAgICAgICAgICAgICAgICAmJiB0eXBl SW5mby0+ZW1iZWRkZWRQcm9wZXJ0eVR5cGUoKS0+cHJvcGVydHlUeXBlKCkgPT0gS2lzTWV0YURh dGE6OlR5cGVJbmZvOjpTdHJ1Y3R1cmVUeXBlKSB7CiAgICAgICAgICAgICAgICAgLy8gSGVyZSBp cyB0aGUgYmFkIHBhcnQsIGFnYWluIHdlIG5lZWQgdG8gZG8gaXQgYnkgaGFuZAogICAgICAgICAg ICAgICAgIEV4aXYyOjpYbXBUZXh0VmFsdWUgdHY7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh0 eXBlSW5mby0+cHJvcGVydHlUeXBlKCkpIHsKQEAgLTEwOSw4ICsxMTMsOCBAQCBib29sIEtpc1hN UElPOjpzYXZlVG8oS2lzTWV0YURhdGE6OlN0b3JlKiBzdG9yZSwgUUlPRGV2aWNlKiBpb0Rldmlj ZSwgSGVhZGVyVHlwZQogICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgIHhtcERhdGFfLmFkZChrZXksICZ0dik7IC8vIHNldCB0aGUgYXJyeWEg dHlwZQotICAgICAgICAgICAgICAgIGNvbnN0IEtpc01ldGFEYXRhOjpUeXBlSW5mbyogc3R1Y3R1 cmVUeXBlSW5mbyA9IHR5cGVJbmZvLT5lbWJlZGRlZFByb3BlcnR5VHlwZSgpOwotICAgICAgICAg ICAgICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqIHN0cnVjdHVyZVNjaGVtYSA9IDA7Cisg ICAgICAgICAgICAgICAgY29uc3QgS2lzTWV0YURhdGE6OlR5cGVJbmZvICpzdHVjdHVyZVR5cGVJ bmZvID0gdHlwZUluZm8tPmVtYmVkZGVkUHJvcGVydHlUeXBlKCk7CisgICAgICAgICAgICAgICAg Y29uc3QgS2lzTWV0YURhdGE6OlNjaGVtYSAqc3RydWN0dXJlU2NoZW1hID0gMDsKICAgICAgICAg ICAgICAgICBpZiAoc3R1Y3R1cmVUeXBlSW5mbykgewogICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3R1cmVTY2hlbWEgPSBzdHVjdHVyZVR5cGVJbmZvLT5zdHJ1Y3R1cmVTY2hlbWEoKTsKICAgICAg ICAgICAgICAgICB9CkBAIC0xMjEsNyArMTI1LDExIEBAIGJvb2wgS2lzWE1QSU86OnNhdmVUbyhL aXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZpY2UqIGlvRGV2aWNlLCBIZWFkZXJUeXBl CiAgICAgICAgICAgICAgICAgUV9BU1NFUlQoc3RydWN0dXJlU2NoZW1hKTsKICAgICAgICAgICAg ICAgICBRTGlzdDxLaXNNZXRhRGF0YTo6VmFsdWU+IGFycmF5ID0gdmFsdWUuYXNBcnJheSgpOwog ICAgICAgICAgICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IGFycmF5LnNpemUoKTsgKytp ZHgpIHsKLSAgICAgICAgICAgICAgICAgICAgc2F2ZVN0cnVjdHVyZSh4bXBEYXRhXywgUVN0cmlu ZygiJTFbJTJdIikuYXJnKGVudHJ5Lm5hbWUoKSkuYXJnKGlkeCArIDEpLCBwcmVmaXgsIGFycmF5 W2lkeF0uYXNTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlU2NoZW1hKTsKKyAgICAgICAgICAgICAgICAg ICAgc2F2ZVN0cnVjdHVyZSh4bXBEYXRhXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRU3RyaW5nKCIlMVslMl0iKS5hcmcoZW50cnkubmFtZSgpKS5hcmcoaWR4ICsgMSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFycmF5W2lkeF0uYXNTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTY2hlbWEpOwogICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZGJnTWV0YURhdGEgPDwg cHBWYXIoa2V5LmtleSgpLmNfc3RyKCkpOwpAQCAtMTQ5LDcgKzE1Nyw3IEBAIGJvb2wgcGFyc2VU YWdOYW1lKGNvbnN0IFFTdHJpbmcgJnRhZ1N0cmluZywKICAgICAgICAgICAgICAgICAgIFFTdHJp bmcgJnN0cnVjdE5hbWUsCiAgICAgICAgICAgICAgICAgICBpbnQgJmFycmF5SW5kZXgsCiAgICAg ICAgICAgICAgICAgICBRU3RyaW5nICZ0YWdOYW1lLAotICAgICAgICAgICAgICAgICAgY29uc3Qg S2lzTWV0YURhdGE6OlR5cGVJbmZvKiogdHlwZUluZm8sCisgICAgICAgICAgICAgICAgICBjb25z dCBLaXNNZXRhRGF0YTo6VHlwZUluZm8gKip0eXBlSW5mbywKICAgICAgICAgICAgICAgICAgIGNv bnN0IEtpc01ldGFEYXRhOjpTY2hlbWEgKnNjaGVtYSkKIHsKICAgICBhcnJheUluZGV4ID0gLTE7 CkBAIC0xNjQsMTIgKzE3MiwxMSBAQCBib29sIHBhcnNlVGFnTmFtZShjb25zdCBRU3RyaW5nICZ0 YWdTdHJpbmcsCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotCiAgICAgaWYgKG51bVN1 Yk5hbWVzID09IDIpIHsKICAgICAgICAgUVJlZ0V4cCByZWdleHAoIihbQS1aYS16XVxcdyspLyhb QS1aYS16XVxcdyspOihbQS1aYS16XVxcdyspIik7CiAgICAgICAgIGlmIChyZWdleHAuaW5kZXhJ bih0YWdTdHJpbmcpICE9IC0xKSB7CiAgICAgICAgICAgICBzdHJ1Y3ROYW1lID0gcmVnZXhwLmNh cHR1cmVkVGV4dHMoKVsxXTsKLSAgICAgICAgICAgIHRhZ05hbWUgPSAgcmVnZXhwLmNhcHR1cmVk VGV4dHMoKVszXTsKKyAgICAgICAgICAgIHRhZ05hbWUgPSByZWdleHAuY2FwdHVyZWRUZXh0cygp WzNdOwogICAgICAgICAgICAgKnR5cGVJbmZvID0gc2NoZW1hLT5wcm9wZXJ0eVR5cGUoc3RydWN0 TmFtZSk7CiAKICAgICAgICAgICAgIGlmICgqdHlwZUluZm8gJiYgKCp0eXBlSW5mbyktPnByb3Bl cnR5VHlwZSgpID09IEtpc01ldGFEYXRhOjpUeXBlSW5mbzo6U3RydWN0dXJlVHlwZSkgewpAQCAt MjAzLDcgKzIxMCw3IEBAIGJvb2wgcGFyc2VUYWdOYW1lKGNvbnN0IFFTdHJpbmcgJnRhZ1N0cmlu ZywKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgS2lzWE1QSU86OmxvYWRGcm9tKEtpc01l dGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9EZXZpY2UpIGNvbnN0Citib29sIEtp c1hNUElPOjpsb2FkRnJvbShLaXNNZXRhRGF0YTo6U3RvcmUgKnN0b3JlLCBRSU9EZXZpY2UgKmlv RGV2aWNlKSBjb25zdAogewogICAgIGlvRGV2aWNlLT5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkp OwogICAgIGRiZ01ldGFEYXRhIDw8ICJMb2FkIFhNUCBEYXRhIjsKQEAgLTIxMSwyMCArMjE4LDI0 IEBAIGJvb2wgS2lzWE1QSU86OmxvYWRGcm9tKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJ T0RldmljZSogaW9EZXZpY2UpIGNvbnN0CiAgICAgUUJ5dGVBcnJheSBhcnIgPSBpb0RldmljZS0+ cmVhZEFsbCgpOwogICAgIHhtcFBhY2tldF8uYXNzaWduKGFyci5kYXRhKCksIGFyci5sZW5ndGgo KSk7CiAgICAgZGJnTWV0YURhdGEgPDwgeG1wUGFja2V0Xy5sZW5ndGgoKTsKLS8vICAgICBkYmdN ZXRhRGF0YSA8PCB4bXBQYWNrZXRfLmNfc3RyKCk7CisgICAgLy8gICAgIGRiZ01ldGFEYXRhIDw8 IHhtcFBhY2tldF8uY19zdHIoKTsKICAgICBFeGl2Mjo6WG1wRGF0YSB4bXBEYXRhXzsKICAgICBF eGl2Mjo6WG1wUGFyc2VyOjpkZWNvZGUoeG1wRGF0YV8sIHhtcFBhY2tldF8pOwotICAgIFFNYXA8 IGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqLCBRTWFwPFFTdHJpbmcsIFFNYXA8UVN0cmluZywg S2lzTWV0YURhdGE6OlZhbHVlPiA+ID4gc3RydWN0dXJlczsKLSAgICBRTWFwPCBjb25zdCBLaXNN ZXRhRGF0YTo6U2NoZW1hKiwgUU1hcDxRU3RyaW5nLCBRVmVjdG9yPCBRTWFwPFFTdHJpbmcsIEtp c01ldGFEYXRhOjpWYWx1ZT4gPiA+ID4gYXJyYXlzT2ZTdHJ1Y3R1cmVzOworICAgIFFNYXA8Y29u c3QgS2lzTWV0YURhdGE6OlNjaGVtYSAqLCBRTWFwPFFTdHJpbmcsIFFNYXA8UVN0cmluZywgS2lz TWV0YURhdGE6OlZhbHVlPj4+IHN0cnVjdHVyZXM7CisgICAgUU1hcDxjb25zdCBLaXNNZXRhRGF0 YTo6U2NoZW1hICosIFFNYXA8UVN0cmluZywgUVZlY3RvcjxRTWFwPFFTdHJpbmcsIEtpc01ldGFE YXRhOjpWYWx1ZT4+Pj4gYXJyYXlzT2ZTdHJ1Y3R1cmVzOwogICAgIGZvciAoRXhpdjI6OlhtcERh dGE6Oml0ZXJhdG9yIGl0ID0geG1wRGF0YV8uYmVnaW4oKTsgaXQgIT0geG1wRGF0YV8uZW5kKCk7 ICsraXQpIHsKICAgICAgICAgZGJnTWV0YURhdGEgPDwgIlN0YXJ0IGl0ZXJhdGlvbiIgPDwgaXQt PmtleSgpLmNfc3RyKCk7CiAKICAgICAgICAgRXhpdjI6OlhtcEtleSBrZXkoaXQtPmtleSgpKTsK ICAgICAgICAgZGJnTWV0YURhdGEgPDwga2V5Lmdyb3VwTmFtZSgpLmNfc3RyKCkgPDwgIiAiIDw8 IGtleS50YWdOYW1lKCkuY19zdHIoKSA8PCAiICIgPDwga2V5Lm5zKCkuY19zdHIoKTsKLSAgICAg ICAgaWYgKChrZXkuZ3JvdXBOYW1lKCkgPT0gImV4aWYiIHx8IGtleS5ncm91cE5hbWUoKSA9PSAi dGlmZiIpICYmIGtleS50YWdOYW1lKCkgPT0gIk5hdGl2ZURpZ2VzdCIpIHsgIC8vIFRPRE86IHNv bWVvbmUgd2hvIGhhcyB0aW1lIHRvIGxvc2UgY2FuIGxvb2sgaW4gYWRkaW5nIHN1cHBvcnQgZm9y IE5hdGl2ZURpZ2VzdCwgaXQncyB1bmRvY3VtZW50ZWQgdXNlIGJ5IHRoZSBYTVAgU0RLIHRvIGNo ZWNrIGlmIGV4aWYgZGF0YSBoYXMgYmVlbiBjaGFuZ2VkIHdoaWxlIFhNUCBoYXNuJ3QgYmVlbiB1 cGRhdGVkCisgICAgICAgIGlmICgoa2V5Lmdyb3VwTmFtZSgpID09ICJleGlmIiB8fCBrZXkuZ3Jv dXBOYW1lKCkgPT0gInRpZmYiKQorICAgICAgICAgICAgJiYga2V5LnRhZ05hbWUoKSA9PSAiTmF0 aXZlRGlnZXN0IikgeyAvLyBUT0RPOiBzb21lb25lIHdobyBoYXMgdGltZSB0byBsb3NlIGNhbiBs b29rIGluIGFkZGluZyBzdXBwb3J0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBOYXRpdmVEaWdlc3QsIGl0J3MgdW5kb2N1bWVudGVkIHVz ZSBieSB0aGUgWE1QIFNESyB0byBjaGVjayBpZiBleGlmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCB3aGls ZSBYTVAgaGFzbid0IGJlZW4gdXBkYXRlZAogICAgICAgICAgICAgZGJnTWV0YURhdGEgPDwgImRy b3BwZWQiOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgS2lzTWV0YURhdGE6 OlNjaGVtYSogc2NoZW1hID0gS2lzTWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5jZSgp LT5zY2hlbWFGcm9tUHJlZml4KGtleS5ncm91cE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAg IGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEgKnNjaGVtYSA9CisgICAgICAgICAgICAgICAgS2lz TWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5zY2hlbWFGcm9tUHJlZml4KGtl eS5ncm91cE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGlmICghc2NoZW1hKSB7CiAgICAg ICAgICAgICAgICAgc2NoZW1hID0gS2lzTWV0YURhdGE6OlNjaGVtYVJlZ2lzdHJ5OjppbnN0YW5j ZSgpLT5zY2hlbWFGcm9tVXJpKGtleS5ucygpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGlm ICghc2NoZW1hKSB7CkBAIC0yMzcsMzIgKzI0OCwyOSBAQCBib29sIEtpc1hNUElPOjpsb2FkRnJv bShLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZpY2UqIGlvRGV2aWNlKSBjb25zdAog ICAgICAgICAgICAgUVN0cmluZyBzdHJ1Y3ROYW1lOwogICAgICAgICAgICAgaW50IGFycmF5SW5k ZXggPSAtMTsKICAgICAgICAgICAgIFFTdHJpbmcgdGFnTmFtZTsKLSAgICAgICAgICAgIGNvbnN0 IEtpc01ldGFEYXRhOjpUeXBlSW5mbyogdHlwZUluZm8gPSAwOworICAgICAgICAgICAgY29uc3Qg S2lzTWV0YURhdGE6OlR5cGVJbmZvICp0eXBlSW5mbyA9IDA7CiAKLSAgICAgICAgICAgIGlmICgh cGFyc2VUYWdOYW1lKGtleS50YWdOYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdE5hbWUsIGFycmF5SW5kZXgsIHRhZ05hbWUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdHlwZUluZm8sIHNjaGVtYSkpIGNvbnRpbnVlOworICAgICAgICAg ICAgaWYgKCFwYXJzZVRhZ05hbWUoa2V5LnRhZ05hbWUoKS5jX3N0cigpLCBzdHJ1Y3ROYW1lLCBh cnJheUluZGV4LCB0YWdOYW1lLCAmdHlwZUluZm8sIHNjaGVtYSkpCisgICAgICAgICAgICAgICAg Y29udGludWU7CiAKICAgICAgICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVFbnRyeSA9ICFzdHJ1Y3RO YW1lLmlzRW1wdHkoKSAmJiBhcnJheUluZGV4ID09IC0xOwogICAgICAgICAgICAgYm9vbCBpc1N0 cnVjdHVyZUluQXJyYXlFbnRyeSA9ICFzdHJ1Y3ROYW1lLmlzRW1wdHkoKSAmJiBhcnJheUluZGV4 ICE9IC0xOwogICAgICAgICAgICAgUV9BU1NFUlQoaXNTdHJ1Y3R1cmVFbnRyeSAhPSBpc1N0cnVj dHVyZUluQXJyYXlFbnRyeSB8fCAhaXNTdHJ1Y3R1cmVFbnRyeSk7CiAKLQogICAgICAgICAgICAg S2lzTWV0YURhdGE6OlZhbHVlIHY7CiAgICAgICAgICAgICBib29sIGlnbm9yZVZhbHVlID0gZmFs c2U7CiAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZQotICAgICAgICAgICAgaWYgKHZh bHVlLT50eXBlSWQoKSA9PSBFeGl2Mjo6eG1wQmFnCi0gICAgICAgICAgICAgICAgICAgIHx8IHZh bHVlLT50eXBlSWQoKSA9PSBFeGl2Mjo6eG1wU2VxCi0gICAgICAgICAgICAgICAgICAgIHx8IHZh bHVlLT50eXBlSWQoKSA9PSBFeGl2Mjo6eG1wQWx0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg S2lzTWV0YURhdGE6OlR5cGVJbmZvKiBlbWJlZGRlZFR5cGVJbmZvID0gMDsKKyAgICAgICAgICAg IGlmICh2YWx1ZS0+dHlwZUlkKCkgPT0gRXhpdjI6OnhtcEJhZyB8fCB2YWx1ZS0+dHlwZUlkKCkg PT0gRXhpdjI6OnhtcFNlcQorICAgICAgICAgICAgICAgIHx8IHZhbHVlLT50eXBlSWQoKSA9PSBF eGl2Mjo6eG1wQWx0KSB7CisgICAgICAgICAgICAgICAgY29uc3QgS2lzTWV0YURhdGE6OlR5cGVJ bmZvICplbWJlZGRlZFR5cGVJbmZvID0gMDsKICAgICAgICAgICAgICAgICBpZiAodHlwZUluZm8p IHsKICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWRUeXBlSW5mbyA9IHR5cGVJbmZvLT5lbWJl ZGRlZFByb3BlcnR5VHlwZSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj b25zdCBLaXNNZXRhRGF0YTo6UGFyc2VyKiBwYXJzZXIgPSAwOworICAgICAgICAgICAgICAgIGNv bnN0IEtpc01ldGFEYXRhOjpQYXJzZXIgKnBhcnNlciA9IDA7CiAgICAgICAgICAgICAgICAgaWYg KGVtYmVkZGVkVHlwZUluZm8pIHsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gZW1iZWRk ZWRUeXBlSW5mby0+cGFyc2VyKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGNvbnN0IEV4aXYyOjpYbXBBcnJheVZhbHVlKiB4YXYgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgRXhp djI6OlhtcEFycmF5VmFsdWUqPih2YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29uc3Qg RXhpdjI6OlhtcEFycmF5VmFsdWUgKnhhdiA9IGR5bmFtaWNfY2FzdDxjb25zdCBFeGl2Mjo6WG1w QXJyYXlWYWx1ZSAqPih2YWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgUV9BU1NFUlQoeGF2 KTsKICAgICAgICAgICAgICAgICBRTGlzdDxLaXNNZXRhRGF0YTo6VmFsdWU+IGFycmF5OwogICAg ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeGF2LT5jb3VudCgpOyArK2kpIHsKQEAg LTI5MSwxMCArMjk5LDExIEBAIGJvb2wgS2lzWE1QSU86OmxvYWRGcm9tKEtpc01ldGFEYXRhOjpT dG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9EZXZpY2UpIGNvbnN0CiAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgIHYgPSBLaXNNZXRhRGF0YTo6VmFsdWUoYXJyYXksIHZ0KTsKICAg ICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnR5cGVJZCgpID09IEV4aXYyOjpsYW5nQWx0KSB7 Ci0gICAgICAgICAgICAgICAgY29uc3QgRXhpdjI6OkxhbmdBbHRWYWx1ZSogeGF2ID0gZHluYW1p Y19jYXN0PGNvbnN0IEV4aXYyOjpMYW5nQWx0VmFsdWUqPih2YWx1ZS5nZXQoKSk7CisgICAgICAg ICAgICAgICAgY29uc3QgRXhpdjI6OkxhbmdBbHRWYWx1ZSAqeGF2ID0gZHluYW1pY19jYXN0PGNv bnN0IEV4aXYyOjpMYW5nQWx0VmFsdWUgKj4odmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgICAg IFFMaXN0PEtpc01ldGFEYXRhOjpWYWx1ZT4gYWx0OwotICAgICAgICAgICAgICAgIGZvciAoc3Rk OjptYXA8IHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0geGF2 LT52YWx1ZV8uYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ICE9IHhhdi0+dmFs dWVfLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAgICAgZm9yIChzdGQ6Om1hcDxzdGQ6OnN0 cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHhhdi0+dmFsdWVfLmJlZ2lu KCk7CisgICAgICAgICAgICAgICAgICAgICBpdCAhPSB4YXYtPnZhbHVlXy5lbmQoKTsKKyAgICAg ICAgICAgICAgICAgICAgICsraXQpIHsKICAgICAgICAgICAgICAgICAgICAgS2lzTWV0YURhdGE6 OlZhbHVlIHZhbHQoaXQtPnNlY29uZC5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgdmFs dC5hZGRQcm9wZXJ0eVF1YWxpZmllcigieG1sOmxhbmciLCBLaXNNZXRhRGF0YTo6VmFsdWUoaXQt PmZpcnN0LmNfc3RyKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYWx0LnB1c2hfYmFjayh2YWx0 KTsKQEAgLTMzOCwxOCArMzQ3LDI1IEBAIGJvb2wgS2lzWE1QSU86OmxvYWRGcm9tKEtpc01ldGFE YXRhOjpTdG9yZSogc3RvcmUsIFFJT0RldmljZSogaW9EZXZpY2UpIGNvbnN0CiAgICAgICAgIH0K ICAgICB9CiAKLSAgICBmb3IgKFFNYXA8IGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEqLCBRTWFw PFFTdHJpbmcsIFFNYXA8UVN0cmluZywgS2lzTWV0YURhdGE6OlZhbHVlPiAgPiA+OjppdGVyYXRv ciBpdCA9IHN0cnVjdHVyZXMuYmVnaW4oKTsKLSAgICAgICAgICAgIGl0ICE9IHN0cnVjdHVyZXMu ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgS2lzTWV0YURhdGE6OlNjaGVtYSogc2NoZW1h ID0gaXQua2V5KCk7Ci0gICAgICAgIGZvciAoUU1hcDxRU3RyaW5nLCBRTWFwPFFTdHJpbmcsIEtp c01ldGFEYXRhOjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXQyID0gaXQudmFsdWUoKS5iZWdpbigpOwot ICAgICAgICAgICAgICAgIGl0MiAhPSBpdC52YWx1ZSgpLmVuZCgpOyArK2l0MikgeworICAgIGZv ciAoUU1hcDxjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICosIFFNYXA8UVN0cmluZywgUU1hcDxR U3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+Pj46Oml0ZXJhdG9yIGl0ID0KKyAgICAgICAgICAg ICBzdHJ1Y3R1cmVzLmJlZ2luKCk7CisgICAgICAgICBpdCAhPSBzdHJ1Y3R1cmVzLmVuZCgpOwor ICAgICAgICAgKytpdCkgeworICAgICAgICBjb25zdCBLaXNNZXRhRGF0YTo6U2NoZW1hICpzY2hl bWEgPSBpdC5rZXkoKTsKKyAgICAgICAgZm9yIChRTWFwPFFTdHJpbmcsIFFNYXA8UVN0cmluZywg S2lzTWV0YURhdGE6OlZhbHVlPj46Oml0ZXJhdG9yIGl0MiA9IGl0LnZhbHVlKCkuYmVnaW4oKTsK KyAgICAgICAgICAgICBpdDIgIT0gaXQudmFsdWUoKS5lbmQoKTsKKyAgICAgICAgICAgICArK2l0 MikgewogICAgICAgICAgICAgc3RvcmUtPmFkZEVudHJ5KEtpc01ldGFEYXRhOjpFbnRyeShzY2hl bWEsIGl0Mi5rZXkoKSwgS2lzTWV0YURhdGE6OlZhbHVlKGl0Mi52YWx1ZSgpKSkpOwogICAgICAg ICB9CiAgICAgfQotICAgIGZvciAoUU1hcDwgY29uc3QgS2lzTWV0YURhdGE6OlNjaGVtYSosIFFN YXA8UVN0cmluZywgUVZlY3RvcjwgUU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFsdWU+ID4g PiA+OjppdGVyYXRvciBpdCA9IGFycmF5c09mU3RydWN0dXJlcy5iZWdpbigpOyBpdCAhPSBhcnJh eXNPZlN0cnVjdHVyZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgS2lzTWV0YURhdGE6 OlNjaGVtYSogc2NoZW1hID0gaXQua2V5KCk7Ci0gICAgICAgIGZvciAoUU1hcDxRU3RyaW5nLCBR VmVjdG9yPFFNYXA8UVN0cmluZywgS2lzTWV0YURhdGE6OlZhbHVlPiA+ID46Oml0ZXJhdG9yIGl0 MiA9IGl0LnZhbHVlKCkuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBpdDIgIT0gaXQudmFsdWUo KS5lbmQoKTsgKytpdDIpIHsKKyAgICBmb3IgKFFNYXA8Y29uc3QgS2lzTWV0YURhdGE6OlNjaGVt YSAqLCBRTWFwPFFTdHJpbmcsIFFWZWN0b3I8UU1hcDxRU3RyaW5nLCBLaXNNZXRhRGF0YTo6VmFs dWU+Pj4+OjppdGVyYXRvciBpdCA9CisgICAgICAgICAgICAgYXJyYXlzT2ZTdHJ1Y3R1cmVzLmJl Z2luKCk7CisgICAgICAgICBpdCAhPSBhcnJheXNPZlN0cnVjdHVyZXMuZW5kKCk7CisgICAgICAg ICArK2l0KSB7CisgICAgICAgIGNvbnN0IEtpc01ldGFEYXRhOjpTY2hlbWEgKnNjaGVtYSA9IGl0 LmtleSgpOworICAgICAgICBmb3IgKFFNYXA8UVN0cmluZywgUVZlY3RvcjxRTWFwPFFTdHJpbmcs IEtpc01ldGFEYXRhOjpWYWx1ZT4+Pjo6aXRlcmF0b3IgaXQyID0gaXQudmFsdWUoKS5iZWdpbigp OworICAgICAgICAgICAgIGl0MiAhPSBpdC52YWx1ZSgpLmVuZCgpOworICAgICAgICAgICAgICsr aXQyKSB7CiAgICAgICAgICAgICBLaXNNZXRhRGF0YTo6VmFsdWU6OlZhbHVlVHlwZSB0eXBlID0g S2lzTWV0YURhdGE6OlZhbHVlOjpPcmRlcmVkQXJyYXk7CiAgICAgICAgICAgICBRU3RyaW5nIGVu dHJ5TmFtZSA9IGl0Mi5rZXkoKTsKICAgICAgICAgICAgIGlmIChzY2hlbWEtPnByb3BlcnR5VHlw ZShlbnRyeU5hbWUpKSB7CkBAIC0zNzUsNyArMzkxLDcgQEAgYm9vbCBLaXNYTVBJTzo6bG9hZEZy b20oS2lzTWV0YURhdGE6OlN0b3JlKiBzdG9yZSwgUUlPRGV2aWNlKiBpb0RldmljZSkgY29uc3QK ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0b3JlLT5yZW1vdmVFbnRyeShzY2hlbWEsIGVu dHJ5TmFtZSk7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBLaXNNZXRhRGF0YTo6VmFsdWU6Oklu dmFsaWQpIHsKLSAgICAgICAgICAgICAgICBRTGlzdDwgS2lzTWV0YURhdGE6OlZhbHVlID4gdmFs dWVMaXN0OworICAgICAgICAgICAgICAgIFFMaXN0PEtpc01ldGFEYXRhOjpWYWx1ZT4gdmFsdWVM aXN0OwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXQyLnZhbHVlKCkuc2l6 ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LmFwcGVuZChpdDIudmFs dWUoKVtpXSk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbGlicy91aS9raXNleGl2 Mi9raXNfeG1wX2lvLmggYi9wbHVnaW5zL21ldGFkYXRhL3htcC9raXNfeG1wX2lvLmgKc2ltaWxh cml0eSBpbmRleCA1NSUKcmVuYW1lIGZyb20gbGlicy91aS9raXNleGl2Mi9raXNfeG1wX2lvLmgK cmVuYW1lIHRvIHBsdWdpbnMvbWV0YWRhdGEveG1wL2tpc194bXBfaW8uaAppbmRleCA5MTYwOTMz MjEyLi42Y2ZkMGZhNzVlIDEwMDY0NAotLS0gYS9saWJzL3VpL2tpc2V4aXYyL2tpc194bXBfaW8u aAorKysgYi9wbHVnaW5zL21ldGFkYXRhL3htcC9raXNfeG1wX2lvLmgKQEAgLTEsNSArMSw2IEBA CiAvKgogICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDggQ3lyaWxsZSBCZXJnZXIgPGNi ZXJnZXJAY2Jlcmdlci5uZXQ+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSBMLiBF LiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBMR1BMLTIuMC1vci1sYXRlcgogICovCkBAIC03LDM2ICs4LDQxIEBACiAjaWZuZGVmIF9L SVNfWE1QX0lPX0hfCiAjZGVmaW5lIF9LSVNfWE1QX0lPX0hfCiAKLSNpbmNsdWRlIDxraXNfbWV0 YV9kYXRhX2lvX2JhY2tlbmQuaD4KLQogI2luY2x1ZGUgPGtsb2NhbGl6ZWRzdHJpbmcuaD4KIAor I2luY2x1ZGUgPGtpc19tZXRhX2RhdGFfaW9fYmFja2VuZC5oPgorCiBjbGFzcyBLaXNYTVBJTyA6 IHB1YmxpYyBLaXNNZXRhRGF0YTo6SU9CYWNrZW5kCiB7Ci0gICAgc3RydWN0IFByaXZhdGU7CiBw dWJsaWM6CiAgICAgS2lzWE1QSU8oKTsKICAgICB+S2lzWE1QSU8oKSBvdmVycmlkZTsKLSAgICBR U3RyaW5nIGlkKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgIFFTdHJpbmcgaWQoKSBjb25zdCBvdmVy cmlkZQorICAgIHsKICAgICAgICAgcmV0dXJuICJ4bXAiOwogICAgIH0KLSAgICBRU3RyaW5nIG5h bWUoKSBjb25zdCBvdmVycmlkZSB7CisgICAgUVN0cmluZyBuYW1lKCkgY29uc3Qgb3ZlcnJpZGUK KyAgICB7CiAgICAgICAgIHJldHVybiBpMThuKCJYTVAiKTsKICAgICB9Ci0gICAgQmFja2VuZFR5 cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBCYWNrZW5kVHlwZSB0eXBlKCkgY29uc3Qg b3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVybiBUZXh0OwogICAgIH0KLSAgICBib29sIHN1 cHBvcnRTYXZpbmcoKSBjb25zdCBvdmVycmlkZSB7CisgICAgYm9vbCBzdXBwb3J0U2F2aW5nKCkg Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBi b29sIHNhdmVUbyhLaXNNZXRhRGF0YTo6U3RvcmUqIHN0b3JlLCBRSU9EZXZpY2UqIGlvRGV2aWNl LCBIZWFkZXJUeXBlIGhlYWRlclR5cGUgPSBOb0hlYWRlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg Ym9vbCBjYW5TYXZlQWxsRW50cmllcyhLaXNNZXRhRGF0YTo6U3RvcmUqKSBjb25zdCBvdmVycmlk ZSB7CisgICAgYm9vbCBzYXZlVG8oS2lzTWV0YURhdGE6OlN0b3JlICpzdG9yZSwgUUlPRGV2aWNl ICppb0RldmljZSwgSGVhZGVyVHlwZSBoZWFkZXJUeXBlID0gTm9IZWFkZXIpIGNvbnN0IG92ZXJy aWRlOworICAgIGJvb2wgY2FuU2F2ZUFsbEVudHJpZXMoS2lzTWV0YURhdGE6OlN0b3JlICopIGNv bnN0IG92ZXJyaWRlCisgICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9v bCBzdXBwb3J0TG9hZGluZygpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBib29sIHN1cHBvcnRMb2Fk aW5nKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K LSAgICBib29sIGxvYWRGcm9tKEtpc01ldGFEYXRhOjpTdG9yZSogc3RvcmUsIFFJT0RldmljZSog aW9EZXZpY2UpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgbG9hZEZyb20oS2lzTWV0YURhdGE6 OlN0b3JlICpzdG9yZSwgUUlPRGV2aWNlICppb0RldmljZSkgY29uc3Qgb3ZlcnJpZGU7CiB9Owog CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3BsdWdpbnMvbWV0YWRhdGEveG1wL2tpc194bXBfcGx1Z2lu LmNwcCBiL3BsdWdpbnMvbWV0YWRhdGEveG1wL2tpc194bXBfcGx1Z2luLmNwcApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYjg1NDY2ZmJiCi0tLSAvZGV2L251bGwKKysr IGIvcGx1Z2lucy9tZXRhZGF0YS94bXAva2lzX3htcF9wbHVnaW4uY3BwCkBAIC0wLDAgKzEsMjkg QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBLcml0YQorICoKKyAqIFNQRFgtRmlsZUNv cHlyaWdodFRleHQ6IDIwMjEgTC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJrLm1lPgorICoKKyAq IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisgKi8KKworI2luY2x1 ZGUgImtpc194bXBfcGx1Z2luLmgiCisKKyNpbmNsdWRlIDxrcGx1Z2luZmFjdG9yeS5oPgorCisj aW5jbHVkZSA8a2lzX21ldGFfZGF0YV9iYWNrZW5kX3JlZ2lzdHJ5Lmg+CisKKyNpbmNsdWRlICJr aXNfeG1wX2lvLmgiCisKK0tfUExVR0lOX0ZBQ1RPUllfV0lUSF9KU09OKEtpc0lwdGNJT1BsdWdp bkZhY3RvcnksICJrcml0YXhtcC5qc29uIiwgcmVnaXN0ZXJQbHVnaW48S2lzWG1wUGx1Z2luPigp OykKKworS2lzWG1wUGx1Z2luOjpLaXNYbXBQbHVnaW4oUU9iamVjdCAqcGFyZW50LCBjb25zdCBR VmFyaWFudExpc3QgJikKKyAgICA6IFFPYmplY3QocGFyZW50KQoreworICAgIEtpc01ldGFkYXRh QmFja2VuZFJlZ2lzdHJ5OjppbnN0YW5jZSgpLT5hZGQobmV3IEtpc1hNUElPKCkpOworfQorCitL aXNYbXBQbHVnaW46On5LaXNYbXBQbHVnaW4oKQoreworfQorCisjaW5jbHVkZSAia2lzX3htcF9w bHVnaW4ubW9jIgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9tZXRhZGF0YS94bXAva2lzX3htcF9wbHVn aW4uaCBiL3BsdWdpbnMvbWV0YWRhdGEveG1wL2tpc194bXBfcGx1Z2luLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmE2NzBkZTlhZQotLS0gL2Rldi9udWxsCisrKyBi L3BsdWdpbnMvbWV0YWRhdGEveG1wL2tpc194bXBfcGx1Z2luLmgKQEAgLTAsMCArMSwyMSBAQAor LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEtyaXRhCisgKgorICogU1BEWC1GaWxlQ29weXJp Z2h0VGV4dDogMjAyMSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CisgKgorICogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKyAqLworCisjaWZuZGVmIF9L SVNfWE1QX1BMVUdJTl9IXworI2RlZmluZSBfS0lTX1hNUF9QTFVHSU5fSF8KKworI2luY2x1ZGUg PFFPYmplY3Q+CisKK2NsYXNzIEtpc1htcFBsdWdpbiA6IHB1YmxpYyBRT2JqZWN0Cit7CitwdWJs aWM6CisgICAgS2lzWG1wUGx1Z2luKFFPYmplY3QgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0 ICYpOworICAgIH5LaXNYbXBQbHVnaW4oKSBvdmVycmlkZTsKK307CisKKyNlbmRpZiAvLyBfS0lT X0lQVENfUExVR0lOX0hfCmRpZmYgLS1naXQgYS9wbHVnaW5zL21ldGFkYXRhL3htcC9rcml0YXht cC5qc29uIGIvcGx1Z2lucy9tZXRhZGF0YS94bXAva3JpdGF4bXAuanNvbgpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iNjEyOGFkN2M1Ci0tLSAvZGV2L251bGwKKysrIGIv cGx1Z2lucy9tZXRhZGF0YS94bXAva3JpdGF4bXAuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAg ICAiSWQiOiAiWE1QIiwKKyAgICAiVHlwZSI6ICJTZXJ2aWNlIiwKKyAgICAiWC1LREUtTGlicmFy eSI6ICJrcml0YXhtcCIsCisgICAgIlgtS0RFLVNlcnZpY2VUeXBlcyI6IFsKKyAgICAgICAgIkty aXRhL01ldGFkYXRhIgorICAgIF0sCisgICAgIlgtS3JpdGEtVmVyc2lvbiI6ICIyOCIKK30KCg==