RnJvbSAxNDI2OWY0ZTg5MTk2MGRlOTk3MDAzNjJhOTUwYmRhYzI4NzQ0ODFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgS3VydHogPGRqa3VydHpAY2hyb21pdW0ub3JnPgpEYXRlOiBGcmksIDMxIEphbiAyMDE0IDIzOjM5OjI3ICswODAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIC0tZGF0YS1wYXRoIGNvbW1hbmQgbGluZSBvcHRpb24KCmdsbWFyazIgbmVlZHMgYWNjZXNzIHRvIG1vZGVscywgc2hhZGVycyBhbmQgdGV4dHVyZXMuICBUaGVzZSBhcmUgc3RvcmVkCmluIHRoZSBnbG1hcmsgZGF0YSBwYXRoLgoKQ3VycmVudGx5IGdsbWFyazIgaGFzIGEgLS1kYXRhLXBhdGggYnVpbGQtdGltZSBvcHRpb24gdG8gc3BlY2lmeSB3aGVyZQp0aGVzZSBmaWxlcyBhcmUgaW5zdGFsbGVkIGF0IGJ1aWxkIHRpbWUuICBUaGlzIG9wdGlvbiBpcyBwYXNzZWQgaW4gYXQKY29tcGlsZSB0aW1lIHZpYSB0aGUgR0xNQVJLX0RBVEFfUEFUSCBtYWNyby4KCkluIHNvbWUgc2l0dWF0aW9ucywgaG93ZXZlciwgaXQgbWlnaHQgYmVjb21lIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZQpsb2NhdGlvbiBvZiB0aGUgZGF0YSBmaWxlcyBhdCAqcnVudGltZSouICBUaGlzIHBhdGNoIGFkZHMgdGhhdCBvcHRpb24uCklmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb21waWxlLXRpbWUgR0xNQVJLX0RBVEFfUEFUSCB2YWx1ZSBpcyB1c2VkLgoKSW4gcGFydGljdWxhciwgdGhpcyBmZWF0dXJlIGlzIHVzZWQgd2hlbiB1c2luZyBnbG1hcmsyIGFzIGEgQ2hyb21lIE9TCmF1dG90ZXN0IGRlcGVuZGVuY3kuICBnbG1hcmsyIGlzIGJ1aWx0IGFuZCBpbnN0YWxsZWQgaW4gdGhlIGRlZmF1bHQKbG9jYXRpb25zIGluIGEgZGV2ZWxvcG1lbnQgaG9zdCBjaHJvb3QgKGllICR7U1lTUk9PVH0vdXNyL2Jpbi9nbG1hcmsyIGFuZAoke1NZU1JPT1R9L3Vzci9zaGFyZS9nbG1hcmsyKS4gIFRoZSBhdXRvdGVzdCBkZXBzIHN5c3RlbSB0aGVuIHJzeW5jcyB0aGUKZXhlY3V0YWJsZSBhbmQgZGF0YSBpbnRvIGEgc3BlY2lhbCBzYW5kYm94IG9uIHRoZSBEVVQuICBUaHVzLCB0aGUgZGF0YQpmaWxlcyB3aWxsIG5vdCBhY3R1YWxseSBnZXQgaW5zdGFsbGVkIGF0IC91c3Ivc2hhcmUvZ2xtYXJrMiwgYW5kIGluc3RlYWQKd2UgdXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb24gd2l0aGluIHRoZSBhdXRvdGVzdCBzYW5kYm94LgoKU2lnbmVkLW9mZi1ieTogRGFuaWVsIEt1cnR6IDxkamt1cnR6QGNocm9taXVtLm9yZz4KLS0tCiBzcmMvbW9kZWwuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9vcHRpb25zLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArKysrKysKIHNyYy9vcHRpb25zLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvc2NlbmUtYnVmZmVyLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKysrLS0KIHNyYy9zY2VuZS1idWlsZC5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArKystLQogc3JjL3NjZW5lLWJ1bXAuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3ICsrKysrKysrKy0tLS0tLS0tCiBzcmMvc2NlbmUtY29uZGl0aW9uYWxzLmNwcCAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUgKysrKysrKystLS0tLS0tCiBzcmMvc2NlbmUtZGVza3RvcC5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKystLS0tCiBzcmMvc2NlbmUtZWZmZWN0LTJkLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKysrLS0KIHNyYy9zY2VuZS1mdW5jdGlvbi5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOSArKysrKysrKysrLS0tLS0tLS0tCiBzcmMvc2NlbmUtaWRlYXMvbGFtcC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEgKysrKysrLS0tLS0KIHNyYy9zY2VuZS1pZGVhcy9sb2dvLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNSArKysrKysrKy0tLS0tLS0KIHNyYy9zY2VuZS1pZGVhcy90YWJsZS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOSArKysrKysrKysrLS0tLS0tLS0tCiBzcmMvc2NlbmUtamVsbHlmaXNoLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKysrKy0tLS0tLQogc3JjL3NjZW5lLWxvb3AuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1ICsrKysrKysrLS0tLS0tLQogc3JjL3NjZW5lLXB1bHNhci5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKysrLS0tLQogc3JjL3NjZW5lLXJlZnJhY3QuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKy0tLS0tCiBzcmMvc2NlbmUtc2hhZGluZy5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcgKysrKysrKysrLS0tLS0tLS0KIHNyYy9zY2VuZS1zaGFkb3cuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNSArKysrKysrKy0tLS0tLS0KIHNyYy9zY2VuZS10ZXJyYWluL2JsdXItcmVuZGVyZXIuY3BwICAgICAgICAgICAgICAgfCAgNSArKystLQogc3JjL3NjZW5lLXRlcnJhaW4vY29weS1yZW5kZXJlci5jcHAgICAgICAgICAgICAgICB8ICA1ICsrKy0tCiBzcmMvc2NlbmUtdGVycmFpbi9sdW1pbmFuY2UtcmVuZGVyZXIuY3BwICAgICAgICAgIHwgIDUgKysrLS0KIHNyYy9zY2VuZS10ZXJyYWluL25vcm1hbC1mcm9tLWhlaWdodC1yZW5kZXJlci5jcHAgfCAgNSArKystLQogc3JjL3NjZW5lLXRlcnJhaW4vb3ZlcmxheS1yZW5kZXJlci5jcHAgICAgICAgICAgICB8ICA1ICsrKy0tCiBzcmMvc2NlbmUtdGVycmFpbi9zaW1wbGV4LW5vaXNlLXJlbmRlcmVyLmNwcCAgICAgIHwgIDUgKysrLS0KIHNyYy9zY2VuZS10ZXJyYWluL3RlcnJhaW4tcmVuZGVyZXIuY3BwICAgICAgICAgICAgfCAgNSArKystLQogc3JjL3NjZW5lLXRleHR1cmUuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKysrLS0tLQogc3JjL3RleHQtcmVuZGVyZXIuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKy0tCiBzcmMvdGV4dHVyZS5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKystCiAyOSBmaWxlcyBjaGFuZ2VkLCAxNDcgaW5zZXJ0aW9ucygrKSwgMTE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9tb2RlbC5jcHAgYi9zcmMvbW9kZWwuY3BwCmluZGV4IGUzODI5NmUuLmI3YzBmMmUgMTAwNjQ0Ci0tLSBhL3NyYy9tb2RlbC5jcHAKKysrIGIvc3JjL21vZGVsLmNwcApAQCAtODE0LDcgKzgxNCw3IEBAIE1vZGVsOjpmaW5kX21vZGVscygpCiAgICAgICAgIHJldHVybiBNb2RlbFByaXZhdGU6Om1vZGVsTWFwOwogICAgIH0KICAgICB2ZWN0b3I8c3RyaW5nPiBwYXRoVmVjOwotICAgIHN0cmluZyBkYXRhRGlyKEdMTUFSS19EQVRBX1BBVEgiL21vZGVscyIpOworICAgIHN0cmluZyBkYXRhRGlyKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvbW9kZWxzIik7CiAgICAgVXRpbDo6bGlzdF9maWxlcyhkYXRhRGlyLCBwYXRoVmVjKTsKICNpZmRlZiBHTE1BUktfRVhUUkFTX1BBVEgKICAgICBzdHJpbmcgZXh0cmFzRGlyKEdMTUFSS19FWFRSQVNfUEFUSCIvbW9kZWxzIik7CmRpZmYgLS1naXQgYS9zcmMvb3B0aW9ucy5jcHAgYi9zcmMvb3B0aW9ucy5jcHAKaW5kZXggMDVjZDYxNy4uNTU5ZDgwYiAxMDA2NDQKLS0tIGEvc3JjL29wdGlvbnMuY3BwCisrKyBiL3NyYy9vcHRpb25zLmNwcApAQCAtMzEsNiArMzEsNyBAQAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE9wdGlvbnM6OmJlbmNobWFya3M7CiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gT3B0aW9uczo6YmVuY2htYXJrX2ZpbGVzOwogYm9vbCBPcHRpb25zOjp2YWxpZGF0ZSA9IGZhbHNlOworc3RkOjpzdHJpbmcgT3B0aW9uczo6ZGF0YV9wYXRoID0gc3RkOjpzdHJpbmcoR0xNQVJLX0RBVEFfUEFUSCk7CiBPcHRpb25zOjpGcmFtZUVuZCBPcHRpb25zOjpmcmFtZV9lbmQgPSBPcHRpb25zOjpGcmFtZUVuZERlZmF1bHQ7CiBzdGQ6OnBhaXI8aW50LGludD4gT3B0aW9uczo6c2l6ZSg4MDAsIDYwMCk7CiBib29sIE9wdGlvbnM6Omxpc3Rfc2NlbmVzID0gZmFsc2U7CkBAIC00Nyw2ICs0OCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewogICAgIHsiYW5ub3RhdGUiLCAwLCAwLCAwfSwKICAgICB7ImJlbmNobWFyayIsIDEsIDAsIDB9LAogICAgIHsiYmVuY2htYXJrLWZpbGUiLCAxLCAwLCAwfSwKKyAgICB7ImRhdGEtcGF0aCIsIDEsIDAsIDB9LAogICAgIHsidmFsaWRhdGUiLCAwLCAwLCAwfSwKICAgICB7ImZyYW1lLWVuZCIsIDEsIDAsIDB9LAogICAgIHsib2ZmLXNjcmVlbiIsIDAsIDAsIDB9LApAQCAtMTIxLDYgKzEyMyw4IEBAIE9wdGlvbnM6OnByaW50X2hlbHAoKQogICAgICAgICAgICAiICAtZiwgLS1iZW5jaG1hcmstZmlsZSBGIExvYWQgYmVuY2htYXJrcyB0byBydW4gZnJvbSBhIGZpbGUgY29udGFpbmluZyBhXG4iCiAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBiZW5jaG1hcmsgZGVzY3JpcHRpb25zIChvbmUgcGVyIGxpbmUpXG4iCiAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpXG4iCisgICAgICAgICAgICIgICAgICAtLWRhdGEtcGF0aCAgICAgICAgUGF0aCB0byBnbG1hcmsyIG1vZGVscywgc2hhZGVycyBhbmQgdGV4dHVyZXNcbiIKKyAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAiIEdMTUFSS19EQVRBX1BBVEggIlxuIgogICAgICAgICAgICAiICAgICAgLS12YWxpZGF0ZSAgICAgICAgIFJ1biBhIHF1aWNrIG91dHB1dCB2YWxpZGF0aW9uIHRlc3QgaW5zdGVhZCBvZiBcbiIKICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIHRoZSBiZW5jaG1hcmtzXG4iCiAgICAgICAgICAgICIgICAgICAtLWZyYW1lLWVuZCBNRVRIT0QgSG93IHRvIGVuZCBhIGZyYW1lIFtkZWZhdWx0LG5vbmUsc3dhcCxmaW5pc2gscmVhZHBpeGVsc11cbiIKQEAgLTE3MSw2ICsxNzUsOCBAQCBPcHRpb25zOjpwYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgICAgIE9wdGlvbnM6OmJlbmNobWFya19maWxlcy5wdXNoX2JhY2sob3B0YXJnKTsKICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChvcHRuYW1lLCAidmFsaWRhdGUiKSkKICAgICAgICAgICAgIE9wdGlvbnM6OnZhbGlkYXRlID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChvcHRuYW1lLCAiZGF0YS1wYXRoIikpCisgICAgICAgICAgICBPcHRpb25zOjpkYXRhX3BhdGggPSBzdGQ6OnN0cmluZyhvcHRhcmcpOwogICAgICAgICBlbHNlIGlmICghc3RyY21wKG9wdG5hbWUsICJmcmFtZS1lbmQiKSkKICAgICAgICAgICAgIE9wdGlvbnM6OmZyYW1lX2VuZCA9IGZyYW1lX2VuZF9mcm9tX3N0cihvcHRhcmcpOwogICAgICAgICBlbHNlIGlmICghc3RyY21wKG9wdG5hbWUsICJvZmYtc2NyZWVuIikpCmRpZmYgLS1naXQgYS9zcmMvb3B0aW9ucy5oIGIvc3JjL29wdGlvbnMuaAppbmRleCBmNjJlMDJhLi43MTgyNTM0IDEwMDY0NAotLS0gYS9zcmMvb3B0aW9ucy5oCisrKyBiL3NyYy9vcHRpb25zLmgKQEAgLTQzLDYgKzQzLDcgQEAgc3RydWN0IE9wdGlvbnMgewogICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYmVuY2htYXJrczsKICAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGJlbmNobWFya19maWxlczsKICAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZTsKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGF0YV9wYXRoOwogICAgIHN0YXRpYyBGcmFtZUVuZCBmcmFtZV9lbmQ7CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxpbnQsaW50PiBzaXplOwogICAgIHN0YXRpYyBib29sIGxpc3Rfc2NlbmVzOwpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLWJ1ZmZlci5jcHAgYi9zcmMvc2NlbmUtYnVmZmVyLmNwcAppbmRleCBlZjNhMGI5Li5iNTg1OWE3IDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtYnVmZmVyLmNwcAorKysgYi9zcmMvc2NlbmUtYnVmZmVyLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAibWF0LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0YWNrLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgogI2luY2x1ZGUgInV0aWwuaCIKQEAgLTI0NSw5ICsyNDYsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgLyogU2V0IHVwIHNoYWRlcnMgKi8KICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoCi0gICAgICAgICAgICAgICAgR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9idWZmZXItd2lyZWZyYW1lLnZlcnQiKTsKKyAgICAgICAgICAgICAgICBPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvYnVmZmVyLXdpcmVmcmFtZS52ZXJ0Iik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKAotICAgICAgICAgICAgICAgIEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvYnVmZmVyLXdpcmVmcmFtZS5mcmFnIik7CisgICAgICAgICAgICAgICAgT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2J1ZmZlci13aXJlZnJhbWUuZnJhZyIpOwogCiAgICAgICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlKHZ0eF9zaGFkZXJfZmlsZW5hbWUpOwogICAgICAgICBTaGFkZXJTb3VyY2UgZnJnX3NvdXJjZShmcmdfc2hhZGVyX2ZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL3NyYy9zY2VuZS1idWlsZC5jcHAgYi9zcmMvc2NlbmUtYnVpbGQuY3BwCmluZGV4IGRmNzA0M2EuLjQ4MGE2OWIgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS1idWlsZC5jcHAKKysrIGIvc3JjL3NjZW5lLWJ1aWxkLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAibWF0LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0YWNrLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgogI2luY2x1ZGUgIm1vZGVsLmgiCkBAIC04OSw4ICs5MCw4IEBAIFNjZW5lQnVpbGQ6OnNldHVwKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLyogU2V0IHVwIHNoYWRlcnMgKi8KLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLnZlcnQiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvbGlnaHQtYmFzaWMudmVydCIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9saWdodC1iYXNpYy5mcmFnIik7CiAgICAgc3RhdGljIGNvbnN0IExpYk1hdHJpeDo6dmVjNCBsaWdodFBvc2l0aW9uKDIwLjBmLCAyMC4wZiwgMTAuMGYsIDEuMGYpOwogICAgIHN0YXRpYyBjb25zdCBMaWJNYXRyaXg6OnZlYzQgbWF0ZXJpYWxEaWZmdXNlKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwogCmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtYnVtcC5jcHAgYi9zcmMvc2NlbmUtYnVtcC5jcHAKaW5kZXggOGFiYTg0My4uMGUwMzViYyAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLWJ1bXAuY3BwCisrKyBiL3NyYy9zY2VuZS1idW1wLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAibWF0LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0YWNrLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgogI2luY2x1ZGUgIm1vZGVsLmgiCkBAIC02MSw4ICs2Miw4IEBAIFNjZW5lQnVtcDo6dW5sb2FkKCkKIGJvb2wKIFNjZW5lQnVtcDo6c2V0dXBfbW9kZWxfcGxhaW4oY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9idW1wLXBvbHkudmVydCIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvYnVtcC1wb2x5LmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvYnVtcC1wb2x5LnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvYnVtcC1wb2x5LmZyYWciKTsKICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgbG93X3BvbHlfZmlsZW5hbWUoImFzdGVyb2lkLWxvdyIpOwogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBoaWdoX3BvbHlfZmlsZW5hbWUoImFzdGVyb2lkLWhpZ2giKTsKICAgICBzdGF0aWMgY29uc3QgTGliTWF0cml4Ojp2ZWM0IGxpZ2h0UG9zaXRpb24oMjAuMGYsIDIwLjBmLCAxMC4wZiwgMS4wZik7CkBAIC0xMTUsOCArMTE2LDggQEAgU2NlbmVCdW1wOjpzZXR1cF9tb2RlbF9wbGFpbihjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSkKIGJvb2wKIFNjZW5lQnVtcDo6c2V0dXBfbW9kZWxfbm9ybWFscygpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9idW1wLW5vcm1hbHMudmVydCIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvYnVtcC1ub3JtYWxzLmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvYnVtcC1ub3JtYWxzLnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvYnVtcC1ub3JtYWxzLmZyYWciKTsKICAgICBzdGF0aWMgY29uc3QgTGliTWF0cml4Ojp2ZWM0IGxpZ2h0UG9zaXRpb24oMjAuMGYsIDIwLjBmLCAxMC4wZiwgMS4wZik7CiAgICAgTW9kZWwgbW9kZWw7CiAKQEAgLTE3MCw4ICsxNzEsOCBAQCBTY2VuZUJ1bXA6OnNldHVwX21vZGVsX25vcm1hbHMoKQogYm9vbAogU2NlbmVCdW1wOjpzZXR1cF9tb2RlbF9ub3JtYWxzX3RhbmdlbnQoKQogewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyB2dHhfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvYnVtcC1ub3JtYWxzLXRhbmdlbnQudmVydCIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvYnVtcC1ub3JtYWxzLXRhbmdlbnQuZnJhZyIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyB2dHhfc2hhZGVyX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9idW1wLW5vcm1hbHMtdGFuZ2VudC52ZXJ0Iik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2J1bXAtbm9ybWFscy10YW5nZW50LmZyYWciKTsKICAgICBzdGF0aWMgY29uc3QgTGliTWF0cml4Ojp2ZWM0IGxpZ2h0UG9zaXRpb24oMjAuMGYsIDIwLjBmLCAxMC4wZiwgMS4wZik7CiAgICAgTW9kZWwgbW9kZWw7CiAKQEAgLTIyOCw4ICsyMjksOCBAQCBTY2VuZUJ1bXA6OnNldHVwX21vZGVsX25vcm1hbHNfdGFuZ2VudCgpCiBib29sCiBTY2VuZUJ1bXA6OnNldHVwX21vZGVsX2hlaWdodCgpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9idW1wLWhlaWdodC52ZXJ0Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9idW1wLWhlaWdodC5mcmFnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2J1bXAtaGVpZ2h0LnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvYnVtcC1oZWlnaHQuZnJhZyIpOwogICAgIHN0YXRpYyBjb25zdCBMaWJNYXRyaXg6OnZlYzQgbGlnaHRQb3NpdGlvbigyMC4wZiwgMjAuMGYsIDEwLjBmLCAxLjBmKTsKICAgICBNb2RlbCBtb2RlbDsKIApkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLWNvbmRpdGlvbmFscy5jcHAgYi9zcmMvc2NlbmUtY29uZGl0aW9uYWxzLmNwcAppbmRleCA3NzhjYjMzLi5jODQwMDQzIDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtY29uZGl0aW9uYWxzLmNwcAorKysgYi9zcmMvc2NlbmUtY29uZGl0aW9uYWxzLmNwcApAQCAtMjEsNiArMjEsNyBAQAogICovCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJtYXQuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RhY2suaCIKICNpbmNsdWRlICJ2ZWMuaCIKICNpbmNsdWRlICJsb2cuaCIKQEAgLTI5LDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgPGNtYXRoPgogCi1zdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc2hhZGVyX2ZpbGVfYmFzZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2NvbmRpdGlvbmFscyIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNoYWRlcl9maWxlX2Jhc2UoIi9zaGFkZXJzL2NvbmRpdGlvbmFscyIpOwogCiBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X2ZpbGUoc2hhZGVyX2ZpbGVfYmFzZSArICIudmVydCIpOwogc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGZyZ19maWxlKHNoYWRlcl9maWxlX2Jhc2UgKyAiLmZyYWciKTsKQEAgLTU2LDE0ICs1NywxNCBAQCBTY2VuZUNvbmRpdGlvbmFsczo6flNjZW5lQ29uZGl0aW9uYWxzKCkKIHN0YXRpYyBzdGQ6OnN0cmluZwogZ2V0X3ZlcnRleF9zaGFkZXJfc291cmNlKGludCBzdGVwcywgYm9vbCBjb25kaXRpb25hbHMpCiB7Ci0gICAgU2hhZGVyU291cmNlIHNvdXJjZSh2dHhfZmlsZSk7CisgICAgU2hhZGVyU291cmNlIHNvdXJjZShPcHRpb25zOjpkYXRhX3BhdGggKyB2dHhfZmlsZSk7CiAgICAgU2hhZGVyU291cmNlIHNvdXJjZV9tYWluOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CiAgICAgICAgIGlmIChjb25kaXRpb25hbHMpCi0gICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShzdGVwX2NvbmRpdGlvbmFsX2ZpbGUpOworICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoT3B0aW9uczo6ZGF0YV9wYXRoICsgc3RlcF9jb25kaXRpb25hbF9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoc3RlcF9zaW1wbGVfZmlsZSk7CisgICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShPcHRpb25zOjpkYXRhX3BhdGggKyBzdGVwX3NpbXBsZV9maWxlKTsKICAgICB9CiAKICAgICBzb3VyY2UucmVwbGFjZSgiJE1BSU4kIiwgc291cmNlX21haW4uc3RyKCkpOwpAQCAtNzQsMTQgKzc1LDE0IEBAIGdldF92ZXJ0ZXhfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgY29uZGl0aW9uYWxzKQogc3RhdGljIHN0ZDo6c3RyaW5nCiBnZXRfZnJhZ21lbnRfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgY29uZGl0aW9uYWxzKQogewotICAgIFNoYWRlclNvdXJjZSBzb3VyY2UoZnJnX2ZpbGUpOworICAgIFNoYWRlclNvdXJjZSBzb3VyY2UoT3B0aW9uczo6ZGF0YV9wYXRoICsgZnJnX2ZpbGUpOwogICAgIFNoYWRlclNvdXJjZSBzb3VyY2VfbWFpbjsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RlcHM7IGkrKykgewogICAgICAgICBpZiAoY29uZGl0aW9uYWxzKQotICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoc3RlcF9jb25kaXRpb25hbF9maWxlKTsKKyAgICAgICAgICAgIHNvdXJjZV9tYWluLmFwcGVuZF9maWxlKE9wdGlvbnM6OmRhdGFfcGF0aCArIHN0ZXBfY29uZGl0aW9uYWxfZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNvdXJjZV9tYWluLmFwcGVuZF9maWxlKHN0ZXBfc2ltcGxlX2ZpbGUpOworICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoT3B0aW9uczo6ZGF0YV9wYXRoICsgc3RlcF9zaW1wbGVfZmlsZSk7CiAgICAgfQogCiAgICAgc291cmNlLnJlcGxhY2UoIiRNQUlOJCIsIHNvdXJjZV9tYWluLnN0cigpKTsKZGlmZiAtLWdpdCBhL3NyYy9zY2VuZS1kZXNrdG9wLmNwcCBiL3NyYy9zY2VuZS1kZXNrdG9wLmNwcAppbmRleCBlYmUwOTcxLi5jYzFiYjU1IDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtZGVza3RvcC5jcHAKKysrIGIvc3JjL3NjZW5lLWRlc2t0b3AuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJzY2VuZS5oIgogI2luY2x1ZGUgIm1hdC5oIgorI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzdGFjay5oIgogI2luY2x1ZGUgInZlYy5oIgogI2luY2x1ZGUgImxvZy5oIgpAQCAtNDMsOCArNDQsOCBAQCBzdGF0aWMgdm9pZAogY3JlYXRlX2JsdXJfc2hhZGVycyhTaGFkZXJTb3VyY2UmIHZ0eF9zb3VyY2UsIFNoYWRlclNvdXJjZSYgZnJnX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJhZGl1cywgZmxvYXQgc2lnbWEsIEJsdXJEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHZ0eF9zb3VyY2UuYXBwZW5kX2ZpbGUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9kZXNrdG9wLnZlcnQiKTsKLSAgICBmcmdfc291cmNlLmFwcGVuZF9maWxlKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvZGVza3RvcC1ibHVyLmZyYWciKTsKKyAgICB2dHhfc291cmNlLmFwcGVuZF9maWxlKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9kZXNrdG9wLnZlcnQiKTsKKyAgICBmcmdfc291cmNlLmFwcGVuZF9maWxlKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9kZXNrdG9wLWJsdXIuZnJhZyIpOwogCiAgICAgLyogRG9uJ3QgbGV0IHRoZSBnYXVzc2lhbiBjdXJ2ZSBiZWNvbWUgdG9vIG5hcnJvdyAqLwogICAgIGlmIChzaWdtYSA8IDEuMCkKQEAgLTE0OCw4ICsxNDksOCBAQCBwdWJsaWM6CiAKICAgICAgICAgLyogTG9hZCB0aGUgc2hhZGVyIHByb2dyYW0gd2hlbiB0aGlzIGNsYXNzIGlmIGZpcnN0IHVzZWQgKi8KICAgICAgICAgaWYgKFJlbmRlck9iamVjdDo6dXNlX2NvdW50ID09IDApIHsKLSAgICAgICAgICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvZGVza3RvcC52ZXJ0Iik7Ci0gICAgICAgICAgICBTaGFkZXJTb3VyY2UgZnJnX3NvdXJjZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2Rlc2t0b3AuZnJhZyIpOworICAgICAgICAgICAgU2hhZGVyU291cmNlIHZ0eF9zb3VyY2UoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2Rlc2t0b3AudmVydCIpOworICAgICAgICAgICAgU2hhZGVyU291cmNlIGZyZ19zb3VyY2UoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2Rlc2t0b3AuZnJhZyIpOwogICAgICAgICAgICAgU2NlbmU6OmxvYWRfc2hhZGVyc19mcm9tX3N0cmluZ3MobWFpbl9wcm9ncmFtLCB2dHhfc291cmNlLnN0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJnX3NvdXJjZS5zdHIoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9zY2VuZS1lZmZlY3QtMmQuY3BwIGIvc3JjL3NjZW5lLWVmZmVjdC0yZC5jcHAKaW5kZXggOTE4NWQ3Yi4uODQ1OTVhNiAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLWVmZmVjdC0yZC5jcHAKKysrIGIvc3JjL3NjZW5lLWVmZmVjdC0yZC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAibWF0LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0YWNrLmgiCiAjaW5jbHVkZSAidmVjLmgiCiAjaW5jbHVkZSAibG9nLmgiCkBAIC05Niw3ICs5Nyw3IEBAIHN0YXRpYyBzdGQ6OnN0cmluZwogY3JlYXRlX2NvbnZvbHV0aW9uX2ZyYWdtZW50X3NoYWRlcihDYW52YXMgJmNhbnZhcywgc3RkOjp2ZWN0b3I8ZmxvYXQ+ICZhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQogewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvZWZmZWN0LTJkLWNvbnZvbHV0aW9uLmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvZWZmZWN0LTJkLWNvbnZvbHV0aW9uLmZyYWciKTsKICAgICBTaGFkZXJTb3VyY2Ugc291cmNlKGZyZ19zaGFkZXJfZmlsZW5hbWUpOwogCiAgICAgaWYgKHdpZHRoICogaGVpZ2h0ICE9IGFycmF5LnNpemUoKSkgewpAQCAtMzAzLDcgKzMwNCw3IEBAIFNjZW5lRWZmZWN0MkQ6OnNldHVwKCkKIAogICAgIFRleHR1cmU6OmZpbmRfdGV4dHVyZXMoKTsKIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyB2dHhfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvZWZmZWN0LTJkLnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvZWZmZWN0LTJkLnZlcnQiKTsKIAogICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBrZXJuZWw7CiAgICAgdW5zaWduZWQgaW50IGtlcm5lbF93aWR0aCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtZnVuY3Rpb24uY3BwIGIvc3JjL3NjZW5lLWZ1bmN0aW9uLmNwcAppbmRleCAwYmQ5NDY4Li4xZGUyOWYwIDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtZnVuY3Rpb24uY3BwCisrKyBiL3NyYy9zY2VuZS1mdW5jdGlvbi5jcHAKQEAgLTIzLDEzICsyMywxNCBAQAogCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJtYXQuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RhY2suaCIKICNpbmNsdWRlICJ2ZWMuaCIKICNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogCi1zdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc2hhZGVyX2ZpbGVfYmFzZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2Z1bmN0aW9uIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc2hhZGVyX2ZpbGVfYmFzZSgiL3NoYWRlcnMvZnVuY3Rpb24iKTsKIAogc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9maWxlKHNoYWRlcl9maWxlX2Jhc2UgKyAiLnZlcnQiKTsKIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfZmlsZShzaGFkZXJfZmlsZV9iYXNlICsgIi5mcmFnIik7CkBAIC02MSw3ICs2Miw3IEBAIFNjZW5lRnVuY3Rpb246On5TY2VuZUZ1bmN0aW9uKCkKIHN0YXRpYyBzdGQ6OnN0cmluZwogZ2V0X3ZlcnRleF9zaGFkZXJfc291cmNlKGludCBzdGVwcywgYm9vbCBmdW5jdGlvbiwgc3RkOjpzdHJpbmcgJmNvbXBsZXhpdHkpCiB7Ci0gICAgU2hhZGVyU291cmNlIHNvdXJjZSh2dHhfZmlsZSk7CisgICAgU2hhZGVyU291cmNlIHNvdXJjZShPcHRpb25zOjpkYXRhX3BhdGggKyB2dHhfZmlsZSk7CiAgICAgU2hhZGVyU291cmNlIHNvdXJjZV9tYWluOwogICAgIHN0ZDo6c3RyaW5nIHN0ZXBfZmlsZTsKIApAQCAtNzIsMTMgKzczLDEzIEBAIGdldF92ZXJ0ZXhfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgZnVuY3Rpb24sIHN0ZDo6c3RyaW5nICZjb21wbGV4aXR5KQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CiAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAgICAgICAgIHNvdXJjZV9tYWluLmFwcGVuZF9maWxlKGNhbGxfZmlsZSk7CisgICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShPcHRpb25zOjpkYXRhX3BhdGggKyBjYWxsX2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShzdGVwX2ZpbGUpOworICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoT3B0aW9uczo6ZGF0YV9wYXRoICsgc3RlcF9maWxlKTsKICAgICB9CiAKICAgICBpZiAoZnVuY3Rpb24pCi0gICAgICAgIHNvdXJjZS5yZXBsYWNlX3dpdGhfZmlsZSgiJFBST0NFU1MkIiwgc3RlcF9maWxlKTsKKyAgICAgICAgc291cmNlLnJlcGxhY2Vfd2l0aF9maWxlKCIkUFJPQ0VTUyQiLCBPcHRpb25zOjpkYXRhX3BhdGggKyBzdGVwX2ZpbGUpOwogICAgIGVsc2UKICAgICAgICAgc291cmNlLnJlcGxhY2UoIiRQUk9DRVNTJCIsICIiKTsKIApAQCAtOTAsNyArOTEsNyBAQCBnZXRfdmVydGV4X3NoYWRlcl9zb3VyY2UoaW50IHN0ZXBzLCBib29sIGZ1bmN0aW9uLCBzdGQ6OnN0cmluZyAmY29tcGxleGl0eSkKIHN0YXRpYyBzdGQ6OnN0cmluZwogZ2V0X2ZyYWdtZW50X3NoYWRlcl9zb3VyY2UoaW50IHN0ZXBzLCBib29sIGZ1bmN0aW9uLCBzdGQ6OnN0cmluZyAmY29tcGxleGl0eSkKIHsKLSAgICBTaGFkZXJTb3VyY2Ugc291cmNlKGZyZ19maWxlKTsKKyAgICBTaGFkZXJTb3VyY2Ugc291cmNlKE9wdGlvbnM6OmRhdGFfcGF0aCArIGZyZ19maWxlKTsKICAgICBTaGFkZXJTb3VyY2Ugc291cmNlX21haW47CiAgICAgc3RkOjpzdHJpbmcgc3RlcF9maWxlOwogCkBAIC0xMDEsMTMgKzEwMiwxMyBAQCBnZXRfZnJhZ21lbnRfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgZnVuY3Rpb24sIHN0ZDo6c3RyaW5nICZjb21wbGV4aXR5KQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CiAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAgICAgICAgIHNvdXJjZV9tYWluLmFwcGVuZF9maWxlKGNhbGxfZmlsZSk7CisgICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShPcHRpb25zOjpkYXRhX3BhdGggKyBjYWxsX2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShzdGVwX2ZpbGUpOworICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoT3B0aW9uczo6ZGF0YV9wYXRoICsgc3RlcF9maWxlKTsKICAgICB9CiAKICAgICBpZiAoZnVuY3Rpb24pCi0gICAgICAgIHNvdXJjZS5yZXBsYWNlX3dpdGhfZmlsZSgiJFBST0NFU1MkIiwgc3RlcF9maWxlKTsKKyAgICAgICAgc291cmNlLnJlcGxhY2Vfd2l0aF9maWxlKCIkUFJPQ0VTUyQiLCBPcHRpb25zOjpkYXRhX3BhdGggKyBzdGVwX2ZpbGUpOwogICAgIGVsc2UKICAgICAgICAgc291cmNlLnJlcGxhY2UoIiRQUk9DRVNTJCIsICIiKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLWlkZWFzL2xhbXAuY2MgYi9zcmMvc2NlbmUtaWRlYXMvbGFtcC5jYwppbmRleCBhYWYzYjEwLi4zNzRjOGUyIDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtaWRlYXMvbGFtcC5jYworKysgYi9zcmMvc2NlbmUtaWRlYXMvbGFtcC5jYwpAQCAtMiw3ICsyLDcgQEAKICAqIFZlcnRleCBwb3NpdGlvbiBkYXRhIGRlc2NyaWJpbmcgdGhlIGxhbXAKICAqCiAgKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIENvcHlyaWdodCCpIDIwMTIgTGluYXJvIExpbWl0ZWQKKyAqIENvcHlyaWdodCDCqSAyMDEyIExpbmFybyBMaW1pdGVkCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGdsbWFyazIgT3BlbkdMIChFUykgMi4wIGJlbmNobWFyay4KICAqCkBAIC0yMyw2ICsyMyw3IEBACiAgKiAgSmVzc2UgQmFya2VyCiAgKi8KICNpbmNsdWRlICJsYW1wLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInNoYWRlci1zb3VyY2UuaCIKICNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJzY2VuZS5oIgpAQCAtMTcwLDggKzE3MSw4IEBAIExhbXA6OmluaXQoKQogCiAgICAgLy8gSW5pdGlhbGl6ZSBzaGFkZXIgc291cmNlcyBmcm9tIGlucHV0IGZpbGVzIGFuZCBjcmVhdGUgcHJvZ3JhbXMgZnJvbSB0aGVtCiAgICAgLy8gVGhlIHByb2dyYW0gZm9yIGhhbmRsaW5nIGxpZ2h0aW5nLi4uCi0gICAgc3RyaW5nIGxpdF92dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sYW1wLWxpdC52ZXJ0Iik7Ci0gICAgc3RyaW5nIGxpdF9mcmdfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sYW1wLWxpdC5mcmFnIik7CisgICAgc3RyaW5nIGxpdF92dHhfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLWxhbXAtbGl0LnZlcnQiKTsKKyAgICBzdHJpbmcgbGl0X2ZyZ19maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtbGFtcC1saXQuZnJhZyIpOwogICAgIFNoYWRlclNvdXJjZSBsaXRfdnR4X3NvdXJjZShsaXRfdnR4X2ZpbGVuYW1lKTsKICAgICBTaGFkZXJTb3VyY2UgbGl0X2ZyZ19zb3VyY2UobGl0X2ZyZ19maWxlbmFtZSk7CiAgICAgaWYgKCFTY2VuZTo6bG9hZF9zaGFkZXJzX2Zyb21fc3RyaW5ncyhsaXRQcm9ncmFtXywgbGl0X3Z0eF9zb3VyY2Uuc3RyKCksCkBAIC0xODIsOCArMTgzLDggQEAgTGFtcDo6aW5pdCgpCiAgICAgfQogCiAgICAgLy8gVGhlIHNpbXBsZSBwcm9ncmFtIHdpdGggbm8gbGlnaHRpbmcuLi4KLSAgICBzdHJpbmcgdW5saXRfdnR4X2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvaWRlYXMtbGFtcC11bmxpdC52ZXJ0Iik7Ci0gICAgc3RyaW5nIHVubGl0X2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLWxhbXAtdW5saXQuZnJhZyIpOworICAgIHN0cmluZyB1bmxpdF92dHhfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLWxhbXAtdW5saXQudmVydCIpOworICAgIHN0cmluZyB1bmxpdF9mcmdfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLWxhbXAtdW5saXQuZnJhZyIpOwogICAgIFNoYWRlclNvdXJjZSB1bmxpdF92dHhfc291cmNlKHVubGl0X3Z0eF9maWxlbmFtZSk7CiAgICAgU2hhZGVyU291cmNlIHVubGl0X2ZyZ19zb3VyY2UodW5saXRfZnJnX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHVubGl0UHJvZ3JhbV8sIHVubGl0X3Z0eF9zb3VyY2Uuc3RyKCksCmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtaWRlYXMvbG9nby5jYyBiL3NyYy9zY2VuZS1pZGVhcy9sb2dvLmNjCmluZGV4IDU5MTU4Y2UuLjNhNzk0MmMgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS1pZGVhcy9sb2dvLmNjCisrKyBiL3NyYy9zY2VuZS1pZGVhcy9sb2dvLmNjCkBAIC0yLDcgKzIsNyBAQAogICogVmVydGV4IHBvc2l0aW9uIGRhdGEgZGVzY3JpYmluZyB0aGUgb2xkIFNpbGljb24gR3JhcGhpY3MgbG9nbwogICoKICAqIChjKSBDb3B5cmlnaHQgMTk5MywgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAorICogQ29weXJpZ2h0IMKpIDIwMTIgTGluYXJvIExpbWl0ZWQKICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogICoKQEAgLTIzLDYgKzIzLDcgQEAKICAqICBKZXNzZSBCYXJrZXIKICAqLwogI2luY2x1ZGUgImxvZ28uaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCiAjaW5jbHVkZSAibG9nLmgiCkBAIC00MjMsOCArNDI0LDggQEAgU0dJTG9nbzo6aW5pdCgpCiAKICAgICAvLyBJbml0aWFsaXplIHNoYWRlciBzb3VyY2VzIGZyb20gaW5wdXQgZmlsZXMgYW5kIGNyZWF0ZSBwcm9ncmFtcyBmcm9tIHRoZW0KICAgICAvLyBUaGUgcHJvZ3JhbSBmb3IgaGFuZGxpbmcgdGhlIG1haW4gb2JqZWN0IHdpdGggbGlnaHRpbmcuLi4KLSAgICBzdHJpbmcgbG9nb192dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLnZlcnQiKTsKLSAgICBzdHJpbmcgbG9nb19mcmdfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLmZyYWciKTsKKyAgICBzdHJpbmcgbG9nb192dHhfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLWxvZ28udmVydCIpOworICAgIHN0cmluZyBsb2dvX2ZyZ19maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtbG9nby5mcmFnIik7CiAgICAgU2hhZGVyU291cmNlIGxvZ29fdnR4X3NvdXJjZShsb2dvX3Z0eF9maWxlbmFtZSk7CiAgICAgU2hhZGVyU291cmNlIGxvZ29fZnJnX3NvdXJjZShsb2dvX2ZyZ19maWxlbmFtZSk7CiAgICAgaWYgKCFTY2VuZTo6bG9hZF9zaGFkZXJzX2Zyb21fc3RyaW5ncyhub3JtYWxQcm9ncmFtXywgbG9nb192dHhfc291cmNlLnN0cigpLApAQCAtNDM3LDggKzQzOCw4IEBAIFNHSUxvZ286OmluaXQoKQogICAgIG5vcm1hbE5vcm1hbEluZGV4XyA9IG5vcm1hbFByb2dyYW1fW25vcm1hbEF0dHJpYk5hbWVfXS5sb2NhdGlvbigpOwogCiAgICAgLy8gVGhlIHByb2dyYW0gZm9yIGhhbmRsaW5nIHRoZSBmbGF0IG9iamVjdC4uLgotICAgIHN0cmluZyBsb2dvX2ZsYXRfdnR4X2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvaWRlYXMtbG9nby1mbGF0LnZlcnQiKTsKLSAgICBzdHJpbmcgbG9nb19mbGF0X2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLWxvZ28tZmxhdC5mcmFnIik7CisgICAgc3RyaW5nIGxvZ29fZmxhdF92dHhfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLWxvZ28tZmxhdC52ZXJ0Iik7CisgICAgc3RyaW5nIGxvZ29fZmxhdF9mcmdfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLWxvZ28tZmxhdC5mcmFnIik7CiAgICAgU2hhZGVyU291cmNlIGxvZ29fZmxhdF92dHhfc291cmNlKGxvZ29fZmxhdF92dHhfZmlsZW5hbWUpOwogICAgIFNoYWRlclNvdXJjZSBsb2dvX2ZsYXRfZnJnX3NvdXJjZShsb2dvX2ZsYXRfZnJnX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKGZsYXRQcm9ncmFtXywgbG9nb19mbGF0X3Z0eF9zb3VyY2Uuc3RyKCksCkBAIC00NTAsOCArNDUxLDggQEAgU0dJTG9nbzo6aW5pdCgpCiAgICAgZmxhdFZlcnRleEluZGV4XyA9IGZsYXRQcm9ncmFtX1t2ZXJ0ZXhBdHRyaWJOYW1lX10ubG9jYXRpb24oKTsKIAogICAgIC8vIFRoZSBwcm9ncmFtIGZvciBoYW5kbGluZyB0aGUgc2hhZG93IG9iamVjdCB3aXRoIHRleHR1cmluZy4uLgotICAgIHN0cmluZyBsb2dvX3NoYWRvd192dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLXNoYWRvdy52ZXJ0Iik7Ci0gICAgc3RyaW5nIGxvZ29fc2hhZG93X2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLWxvZ28tc2hhZG93LmZyYWciKTsKKyAgICBzdHJpbmcgbG9nb19zaGFkb3dfdnR4X2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9pZGVhcy1sb2dvLXNoYWRvdy52ZXJ0Iik7CisgICAgc3RyaW5nIGxvZ29fc2hhZG93X2ZyZ19maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtbG9nby1zaGFkb3cuZnJhZyIpOwogICAgIFNoYWRlclNvdXJjZSBsb2dvX3NoYWRvd192dHhfc291cmNlKGxvZ29fc2hhZG93X3Z0eF9maWxlbmFtZSk7CiAgICAgU2hhZGVyU291cmNlIGxvZ29fc2hhZG93X2ZyZ19zb3VyY2UobG9nb19zaGFkb3dfZnJnX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHNoYWRvd1Byb2dyYW1fLCBsb2dvX3NoYWRvd192dHhfc291cmNlLnN0cigpLApkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLWlkZWFzL3RhYmxlLmNjIGIvc3JjL3NjZW5lLWlkZWFzL3RhYmxlLmNjCmluZGV4IGJhYTE1NmUuLmY1YjM0YmUgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS1pZGVhcy90YWJsZS5jYworKysgYi9zcmMvc2NlbmUtaWRlYXMvdGFibGUuY2MKQEAgLTEsNiArMSw2IEBACiAvKgogICogKGMpIENvcHlyaWdodCAxOTkzLCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBDb3B5cmlnaHQgqSAyMDEyIExpbmFybyBMaW1pdGVkCisgKiBDb3B5cmlnaHQgwqkgMjAxMiBMaW5hcm8gTGltaXRlZAogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBnbG1hcmsyIE9wZW5HTCAoRVMpIDIuMCBiZW5jaG1hcmsuCiAgKgpAQCAtMjEsNiArMjEsNyBAQAogICogIEplc3NlIEJhcmtlcgogICovCiAjaW5jbHVkZSAidGFibGUuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCiAjaW5jbHVkZSAibG9nLmgiCkBAIC0xMDEsOCArMTAyLDggQEAgVGFibGU6OmluaXQodm9pZCkKIAogICAgIC8vIEluaXRpYWxpemUgc2hhZGVyIHNvdXJjZXMgZnJvbSBpbnB1dCBmaWxlcyBhbmQgY3JlYXRlIHByb2dyYW1zIGZyb20gdGhlbQogICAgIC8vIFByb2dyYW0gdG8gcmVuZGVyIHRoZSB0YWJsZSB3aXRoIGxpZ2h0aW5nIGFuZCBhIHRpbWUtYmFzZWQgZmFkZS4uLgotICAgIHN0cmluZyB0YWJsZV92dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy10YWJsZS52ZXJ0Iik7Ci0gICAgc3RyaW5nIHRhYmxlX2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLXRhYmxlLmZyYWciKTsKKyAgICBzdHJpbmcgdGFibGVfdnR4X2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9pZGVhcy10YWJsZS52ZXJ0Iik7CisgICAgc3RyaW5nIHRhYmxlX2ZyZ19maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtdGFibGUuZnJhZyIpOwogICAgIFNoYWRlclNvdXJjZSB0YWJsZV92dHhfc291cmNlKHRhYmxlX3Z0eF9maWxlbmFtZSk7CiAgICAgU2hhZGVyU291cmNlIHRhYmxlX2ZyZ19zb3VyY2UodGFibGVfZnJnX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHRhYmxlUHJvZ3JhbV8sIHRhYmxlX3Z0eF9zb3VyY2Uuc3RyKCksCkBAIC0xMTQsOCArMTE1LDggQEAgVGFibGU6OmluaXQodm9pZCkKICAgICB0ZXh0VmVydGV4SW5kZXhfID0gdGFibGVQcm9ncmFtX1t2ZXJ0ZXhBdHRyaWJOYW1lX10ubG9jYXRpb24oKTsKIAogICAgIC8vIFByb2dyYW0gdG8gcmVuZGVyIHRoZSBwYXBlciB3aXRoIGxpZ2h0aW5nIGFuZCBhIHRpbWUtYmFzZWQgZmFkZS4uLgotICAgIHN0cmluZyBwYXBlcl92dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1wYXBlci52ZXJ0Iik7Ci0gICAgc3RyaW5nIHBhcGVyX2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLXBhcGVyLmZyYWciKTsKKyAgICBzdHJpbmcgcGFwZXJfdnR4X2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9pZGVhcy1wYXBlci52ZXJ0Iik7CisgICAgc3RyaW5nIHBhcGVyX2ZyZ19maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtcGFwZXIuZnJhZyIpOwogICAgIFNoYWRlclNvdXJjZSBwYXBlcl92dHhfc291cmNlKHBhcGVyX3Z0eF9maWxlbmFtZSk7CiAgICAgU2hhZGVyU291cmNlIHBhcGVyX2ZyZ19zb3VyY2UocGFwZXJfZnJnX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHBhcGVyUHJvZ3JhbV8sIHBhcGVyX3Z0eF9zb3VyY2Uuc3RyKCksCkBAIC0xMjcsOCArMTI4LDggQEAgVGFibGU6OmluaXQodm9pZCkKICAgICBwYXBlclZlcnRleEluZGV4XyA9IHBhcGVyUHJvZ3JhbV9bdmVydGV4QXR0cmliTmFtZV9dLmxvY2F0aW9uKCk7CiAKICAgICAvLyBQcm9ncmFtIHRvIGhhbmRsZSB0aGUgdGV4dCAodGltZS1iYXNlZCBjb2xvciBmYWRlKS4uLgotICAgIHN0cmluZyB0ZXh0X3Z0eF9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLXRleHQudmVydCIpOwotICAgIHN0cmluZyB0ZXh0X2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLXRleHQuZnJhZyIpOworICAgIHN0cmluZyB0ZXh0X3Z0eF9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtdGV4dC52ZXJ0Iik7CisgICAgc3RyaW5nIHRleHRfZnJnX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9pZGVhcy10ZXh0LmZyYWciKTsKICAgICBTaGFkZXJTb3VyY2UgdGV4dF92dHhfc291cmNlKHRleHRfdnR4X2ZpbGVuYW1lKTsKICAgICBTaGFkZXJTb3VyY2UgdGV4dF9mcmdfc291cmNlKHRleHRfZnJnX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHRleHRQcm9ncmFtXywgdGV4dF92dHhfc291cmNlLnN0cigpLApAQCAtMTQwLDggKzE0MSw4IEBAIFRhYmxlOjppbml0KHZvaWQpCiAgICAgdGV4dFZlcnRleEluZGV4XyA9IHRleHRQcm9ncmFtX1t2ZXJ0ZXhBdHRyaWJOYW1lX10ubG9jYXRpb24oKTsKIAogICAgIC8vIFByb2dyYW0gZm9yIHRoZSBkcmF3VW5kZXIgZnVuY3Rpb25hbGl0eSAoanVzdCBwYWludCBpdCBibGFjaykuLi4KLSAgICBzdHJpbmcgdW5kZXJfdGFibGVfdnR4X2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvaWRlYXMtdW5kZXItdGFibGUudmVydCIpOwotICAgIHN0cmluZyB1bmRlcl90YWJsZV9mcmdfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy11bmRlci10YWJsZS5mcmFnIik7CisgICAgc3RyaW5nIHVuZGVyX3RhYmxlX3Z0eF9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvaWRlYXMtdW5kZXItdGFibGUudmVydCIpOworICAgIHN0cmluZyB1bmRlcl90YWJsZV9mcmdfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2lkZWFzLXVuZGVyLXRhYmxlLmZyYWciKTsKICAgICBTaGFkZXJTb3VyY2UgdW5kZXJfdGFibGVfdnR4X3NvdXJjZSh1bmRlcl90YWJsZV92dHhfZmlsZW5hbWUpOwogICAgIFNoYWRlclNvdXJjZSB1bmRlcl90YWJsZV9mcmdfc291cmNlKHVuZGVyX3RhYmxlX2ZyZ19maWxlbmFtZSk7CiAgICAgaWYgKCFTY2VuZTo6bG9hZF9zaGFkZXJzX2Zyb21fc3RyaW5ncyh1bmRlclByb2dyYW1fLCB1bmRlcl90YWJsZV92dHhfc291cmNlLnN0cigpLApkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLWplbGx5ZmlzaC5jcHAgYi9zcmMvc2NlbmUtamVsbHlmaXNoLmNwcAppbmRleCBiYzE4ZWUzLi4yZGEyYWNhIDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtamVsbHlmaXNoLmNwcAorKysgYi9zcmMvc2NlbmUtamVsbHlmaXNoLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgqSAyMDEyIExpbmFybyBMaW1pdGVkCisvLyBDb3B5cmlnaHQgwqkgMjAxMiBMaW5hcm8gTGltaXRlZAogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBnbG1hcmsyIE9wZW5HTCAoRVMpIDIuMCBiZW5jaG1hcmsuCiAvLwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAic2NlbmUtamVsbHlmaXNoLmgiCiAjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJ0ZXh0dXJlLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgpAQCAtMTE1LDggKzExNiw4IEBAIGJvb2wKIEdyYWRpZW50UmVuZGVyZXI6OmluaXQoKQogewogICAgIC8vIFByb2dyYW0gc2V0IHVwCi0gICAgc3RhdGljIGNvbnN0IHN0cmluZyB2dHhfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvZ3JhZGllbnQudmVydCIpOwotICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2dyYWRpZW50LmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2dyYWRpZW50LnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2dyYWRpZW50LmZyYWciKTsKICAgICBTaGFkZXJTb3VyY2UgdnR4X3NvdXJjZSh2dHhfc2hhZGVyX2ZpbGVuYW1lKTsKICAgICBTaGFkZXJTb3VyY2UgZnJnX3NvdXJjZShmcmdfc2hhZGVyX2ZpbGVuYW1lKTsKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHByb2dyYW1fLCB2dHhfc291cmNlLnN0cigpLApAQCAtMzc1LDcgKzM3Niw3IEBAIEplbGx5ZmlzaFByaXZhdGU6On5KZWxseWZpc2hQcml2YXRlKCkKIGJvb2wKIEplbGx5ZmlzaFByaXZhdGU6OmluaXRpYWxpemUoKQogewotICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgbW9kZWxGaWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9tb2RlbHMvamVsbHlmaXNoLmpvYmoiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIG1vZGVsRmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9tb2RlbHMvamVsbHlmaXNoLmpvYmoiKTsKICAgICBpZiAoIWxvYWRfb2JqKG1vZGVsRmlsZW5hbWUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDEwLDggKzQxMSw4IEBAIEplbGx5ZmlzaFByaXZhdGU6OmluaXRpYWxpemUoKQogICAgIC8vIFNldCB1cCBwcm9ncmFtIGZpcnN0IHNvIHdlIGNhbiBzdG9yZSBhdHRyaWJ1dGUgYW5kIHVuaWZvcm0gbG9jYXRpb25zCiAgICAgLy8gYXdheSBmb3IgdGhlIAogICAgIHVzaW5nIHN0ZDo6c3RyaW5nOwotICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2plbGx5ZmlzaC52ZXJ0Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvamVsbHlmaXNoLmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2plbGx5ZmlzaC52ZXJ0Iik7CisgICAgc3RhdGljIGNvbnN0IHN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9qZWxseWZpc2guZnJhZyIpOwogCiAgICAgU2hhZGVyU291cmNlIHZ0eF9zb3VyY2UodnR4X3NoYWRlcl9maWxlbmFtZSk7CiAgICAgU2hhZGVyU291cmNlIGZyZ19zb3VyY2UoZnJnX3NoYWRlcl9maWxlbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtbG9vcC5jcHAgYi9zcmMvc2NlbmUtbG9vcC5jcHAKaW5kZXggNTY0YTJmZS4uOTVhYTk5ZSAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLWxvb3AuY3BwCisrKyBiL3NyYy9zY2VuZS1sb29wLmNwcApAQCAtMjMsMTMgKzIzLDE0IEBACiAKICNpbmNsdWRlICJzY2VuZS5oIgogI2luY2x1ZGUgIm1hdC5oIgorI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzdGFjay5oIgogI2luY2x1ZGUgInZlYy5oIgogI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInNoYWRlci1zb3VyY2UuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAKLXN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzaGFkZXJfZmlsZV9iYXNlKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvbG9vcCIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNoYWRlcl9maWxlX2Jhc2UoIi9zaGFkZXJzL2xvb3AiKTsKIAogc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9maWxlKHNoYWRlcl9maWxlX2Jhc2UgKyAiLnZlcnQiKTsKIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfZmlsZShzaGFkZXJfZmlsZV9iYXNlICsgIi5mcmFnIik7CkBAIC02MiwxMSArNjMsMTEgQEAgU2NlbmVMb29wOjp+U2NlbmVMb29wKCkKIHN0YXRpYyBzdGQ6OnN0cmluZwogZ2V0X2ZyYWdtZW50X3NoYWRlcl9zb3VyY2UoaW50IHN0ZXBzLCBib29sIGxvb3AsIGJvb2wgdW5pZm9ybSkKIHsKLSAgICBTaGFkZXJTb3VyY2Ugc291cmNlKGZyZ19maWxlKTsKKyAgICBTaGFkZXJTb3VyY2Ugc291cmNlKE9wdGlvbnM6OmRhdGFfcGF0aCArIGZyZ19maWxlKTsKICAgICBTaGFkZXJTb3VyY2Ugc291cmNlX21haW47CiAKICAgICBpZiAobG9vcCkgewotICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShzdGVwX2xvb3BfZmlsZSk7CisgICAgICAgIHNvdXJjZV9tYWluLmFwcGVuZF9maWxlKE9wdGlvbnM6OmRhdGFfcGF0aCArIHN0ZXBfbG9vcF9maWxlKTsKICAgICAgICAgaWYgKHVuaWZvcm0pIHsKICAgICAgICAgICAgIHNvdXJjZV9tYWluLnJlcGxhY2UoIiROTE9PUFMkIiwgIkZyYWdtZW50TG9vcHMiKTsKICAgICAgICAgfQpAQCAtNzYsNyArNzcsNyBAQCBnZXRfZnJhZ21lbnRfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgbG9vcCwgYm9vbCB1bmlmb3JtKQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKQotICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoc3RlcF9zaW1wbGVfZmlsZSk7CisgICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShPcHRpb25zOjpkYXRhX3BhdGggKyBzdGVwX3NpbXBsZV9maWxlKTsKICAgICB9CiAKICAgICBzb3VyY2UucmVwbGFjZSgiJE1BSU4kIiwgc291cmNlX21haW4uc3RyKCkpOwpAQCAtODcsMTEgKzg4LDExIEBAIGdldF9mcmFnbWVudF9zaGFkZXJfc291cmNlKGludCBzdGVwcywgYm9vbCBsb29wLCBib29sIHVuaWZvcm0pCiBzdGF0aWMgc3RkOjpzdHJpbmcKIGdldF92ZXJ0ZXhfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgbG9vcCwgYm9vbCB1bmlmb3JtKQogewotICAgIFNoYWRlclNvdXJjZSBzb3VyY2UodnR4X2ZpbGUpOworICAgIFNoYWRlclNvdXJjZSBzb3VyY2UoT3B0aW9uczo6ZGF0YV9wYXRoICsgdnR4X2ZpbGUpOwogICAgIFNoYWRlclNvdXJjZSBzb3VyY2VfbWFpbjsKIAogICAgIGlmIChsb29wKSB7Ci0gICAgICAgIHNvdXJjZV9tYWluLmFwcGVuZF9maWxlKHN0ZXBfbG9vcF9maWxlKTsKKyAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoT3B0aW9uczo6ZGF0YV9wYXRoICsgc3RlcF9sb29wX2ZpbGUpOwogICAgICAgICBpZiAodW5pZm9ybSkgewogICAgICAgICAgICAgc291cmNlX21haW4ucmVwbGFjZSgiJE5MT09QUyQiLCAiVmVydGV4TG9vcHMiKTsKICAgICAgICAgfQpAQCAtMTAxLDcgKzEwMiw3IEBAIGdldF92ZXJ0ZXhfc2hhZGVyX3NvdXJjZShpbnQgc3RlcHMsIGJvb2wgbG9vcCwgYm9vbCB1bmlmb3JtKQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKQotICAgICAgICAgICAgc291cmNlX21haW4uYXBwZW5kX2ZpbGUoc3RlcF9zaW1wbGVfZmlsZSk7CisgICAgICAgICAgICBzb3VyY2VfbWFpbi5hcHBlbmRfZmlsZShPcHRpb25zOjpkYXRhX3BhdGggKyBzdGVwX3NpbXBsZV9maWxlKTsKICAgICB9CiAKICAgICBzb3VyY2UucmVwbGFjZSgiJE1BSU4kIiwgc291cmNlX21haW4uc3RyKCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLXB1bHNhci5jcHAgYi9zcmMvc2NlbmUtcHVsc2FyLmNwcAppbmRleCA2YWI2NjFjLi42YzViMjAzIDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtcHVsc2FyLmNwcAorKysgYi9zcmMvc2NlbmUtcHVsc2FyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAibWF0LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0YWNrLmgiCiAjaW5jbHVkZSAidmVjLmgiCiAjaW5jbHVkZSAibG9nLmgiCkBAIC0xMTIsMTkgKzExMywxOSBAQCBTY2VuZVB1bHNhcjo6c2V0dXAoKQogICAgIHN0ZDo6c3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWU7CiAgICAgc3RhdGljIGNvbnN0IHZlYzQgbGlnaHRQb3NpdGlvbigtMjAuMGYsIDIwLjBmLC0yMC4wZiwgMS4wZik7CiAgICAgaWYgKG9wdGlvbnNfWyJsaWdodCJdLnZhbHVlID09ICJ0cnVlIikgewotICAgICAgICB2dHhfc2hhZGVyX2ZpbGVuYW1lID0gR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9wdWxzYXItbGlnaHQudmVydCI7CisgICAgICAgIHZ0eF9zaGFkZXJfZmlsZW5hbWUgPSBPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvcHVsc2FyLWxpZ2h0LnZlcnQiOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHZ0eF9zaGFkZXJfZmlsZW5hbWUgPSBHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3B1bHNhci52ZXJ0IjsKKyAgICAgICAgdnR4X3NoYWRlcl9maWxlbmFtZSA9IE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9wdWxzYXIudmVydCI7CiAgICAgfQogCiAgICAgaWYgKG9wdGlvbnNfWyJ0ZXh0dXJlIl0udmFsdWUgPT0gInRydWUiKSB7Ci0gICAgICAgIGZyZ19zaGFkZXJfZmlsZW5hbWUgPSBHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLXRleC5mcmFnIjsKKyAgICAgICAgZnJnX3NoYWRlcl9maWxlbmFtZSA9IE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9saWdodC1iYXNpYy10ZXguZnJhZyI7CiAgICAgICAgIFRleHR1cmU6OmZpbmRfdGV4dHVyZXMoKTsKICAgICAgICAgaWYgKCFUZXh0dXJlOjpsb2FkKCJjcmF0ZS1iYXNlIiwgJnRleHR1cmVfLCBHTF9ORUFSRVNULCBHTF9ORUFSRVNULCAwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyZ19zaGFkZXJfZmlsZW5hbWUgPSBHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLmZyYWciOworICAgICAgICBmcmdfc2hhZGVyX2ZpbGVuYW1lID0gT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLmZyYWciOwogICAgIH0KIAogICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlKHZ0eF9zaGFkZXJfZmlsZW5hbWUpOwpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLXJlZnJhY3QuY3BwIGIvc3JjL3NjZW5lLXJlZnJhY3QuY3BwCmluZGV4IDdmZDY1ODEuLmQ4NjhkYjUgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS1yZWZyYWN0LmNwcAorKysgYi9zcmMvc2NlbmUtcmVmcmFjdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAorLy8gQ29weXJpZ2h0IMKpIDIwMTIgTGluYXJvIExpbWl0ZWQKIC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogLy8KQEAgLTIxLDYgKzIxLDcgQEAKIC8vCiAjaW5jbHVkZSAic2NlbmUtcmVmcmFjdC5oIgogI2luY2x1ZGUgIm1vZGVsLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInRleHR1cmUuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAibG9nLmgiCkBAIC0xNzYsOCArMTc3LDggQEAgU2NlbmVSZWZyYWN0Ojp2YWxpZGF0ZSgpCiBib29sCiBEaXN0YW5jZVJlbmRlclRhcmdldDo6c2V0dXAodW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQogewotICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2RlcHRoLnZlcnQiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9kZXB0aC5mcmFnIik7CisgICAgc3RhdGljIGNvbnN0IHN0cmluZyB2dHhfc2hhZGVyX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9kZXB0aC52ZXJ0Iik7CisgICAgc3RhdGljIGNvbnN0IHN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9kZXB0aC5mcmFnIik7CiAKICAgICBTaGFkZXJTb3VyY2UgdnR4X3NvdXJjZSh2dHhfc2hhZGVyX2ZpbGVuYW1lKTsKICAgICBTaGFkZXJTb3VyY2UgZnJnX3NvdXJjZShmcmdfc2hhZGVyX2ZpbGVuYW1lKTsKQEAgLTI3OSw4ICsyODAsOCBAQCBib29sCiBSZWZyYWN0UHJpdmF0ZTo6c2V0dXAobWFwPHN0cmluZywgU2NlbmU6Ok9wdGlvbj4mIG9wdGlvbnMpCiB7CiAgICAgLy8gUHJvZ3JhbSBvYmplY3Qgc2V0dXAKLSAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9saWdodC1yZWZyYWN0LnZlcnQiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9saWdodC1yZWZyYWN0LmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LXJlZnJhY3QudmVydCIpOworICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvbGlnaHQtcmVmcmFjdC5mcmFnIik7CiAgICAgc3RhdGljIGNvbnN0IHZlYzQgbGlnaHRDb2xvcigwLjQsIDAuNCwgMC40LCAxLjApOwogCiAgICAgU2hhZGVyU291cmNlIHZ0eF9zb3VyY2UodnR4X3NoYWRlcl9maWxlbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtc2hhZGluZy5jcHAgYi9zcmMvc2NlbmUtc2hhZGluZy5jcHAKaW5kZXggZTViN2FkZS4uMDI2OGViNCAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLXNoYWRpbmcuY3BwCisrKyBiL3NyYy9zY2VuZS1zaGFkaW5nLmNwcApAQCAtMjQsNiArMjQsNyBAQAogICovCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJtYXQuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RhY2suaCIKICNpbmNsdWRlICJ2ZWMuaCIKICNpbmNsdWRlICJsb2cuaCIKQEAgLTE1NCwyNCArMTU1LDI0IEBAIFNjZW5lU2hhZGluZzo6c2V0dXAoKQogICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlOwogICAgIFNoYWRlclNvdXJjZSBmcmdfc291cmNlOwogICAgIGlmIChzaGFkaW5nID09ICJnb3VyYXVkIikgewotICAgICAgICB2dHhfc2hhZGVyX2ZpbGVuYW1lID0gR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9saWdodC1iYXNpYy52ZXJ0IjsKLSAgICAgICAgZnJnX3NoYWRlcl9maWxlbmFtZSA9IEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvbGlnaHQtYmFzaWMuZnJhZyI7CisgICAgICAgIHZ0eF9zaGFkZXJfZmlsZW5hbWUgPSBPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvbGlnaHQtYmFzaWMudmVydCI7CisgICAgICAgIGZyZ19zaGFkZXJfZmlsZW5hbWUgPSBPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvbGlnaHQtYmFzaWMuZnJhZyI7CiAgICAgICAgIGZyZ19zb3VyY2UuYXBwZW5kX2ZpbGUoZnJnX3NoYWRlcl9maWxlbmFtZSk7CiAgICAgICAgIHZ0eF9zb3VyY2UuYXBwZW5kX2ZpbGUodnR4X3NoYWRlcl9maWxlbmFtZSk7CiAgICAgICAgIHZ0eF9zb3VyY2UuYWRkX2NvbnN0KCJMaWdodFNvdXJjZVBvc2l0aW9uIiwgbGlnaHRQb3NpdGlvbik7CiAgICAgICAgIHZ0eF9zb3VyY2UuYWRkX2NvbnN0KCJNYXRlcmlhbERpZmZ1c2UiLCBtYXRlcmlhbERpZmZ1c2UpOwogICAgIH0KICAgICBlbHNlIGlmIChzaGFkaW5nID09ICJibGlubi1waG9uZy1pbmYiKSB7Ci0gICAgICAgIHZ0eF9zaGFkZXJfZmlsZW5hbWUgPSBHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWFkdmFuY2VkLnZlcnQiOwotICAgICAgICBmcmdfc2hhZGVyX2ZpbGVuYW1lID0gR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9saWdodC1hZHZhbmNlZC5mcmFnIjsKKyAgICAgICAgdnR4X3NoYWRlcl9maWxlbmFtZSA9IE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9saWdodC1hZHZhbmNlZC52ZXJ0IjsKKyAgICAgICAgZnJnX3NoYWRlcl9maWxlbmFtZSA9IE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9saWdodC1hZHZhbmNlZC5mcmFnIjsKICAgICAgICAgZnJnX3NvdXJjZS5hcHBlbmRfZmlsZShmcmdfc2hhZGVyX2ZpbGVuYW1lKTsKICAgICAgICAgZnJnX3NvdXJjZS5hZGRfY29uc3QoIkxpZ2h0U291cmNlUG9zaXRpb24iLCBsaWdodFBvc2l0aW9uKTsKICAgICAgICAgZnJnX3NvdXJjZS5hZGRfY29uc3QoIkxpZ2h0U291cmNlSGFsZlZlY3RvciIsIGhhbGZWZWN0b3IpOwogICAgICAgICB2dHhfc291cmNlLmFwcGVuZF9maWxlKHZ0eF9zaGFkZXJfZmlsZW5hbWUpOwogICAgIH0KICAgICBlbHNlIGlmIChzaGFkaW5nID09ICJwaG9uZyIpIHsKLSAgICAgICAgdnR4X3NoYWRlcl9maWxlbmFtZSA9IEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvbGlnaHQtcGhvbmcudmVydCI7Ci0gICAgICAgIGZyZ19zaGFkZXJfZmlsZW5hbWUgPSBHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LXBob25nLmZyYWciOworICAgICAgICB2dHhfc2hhZGVyX2ZpbGVuYW1lID0gT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LXBob25nLnZlcnQiOworICAgICAgICBmcmdfc2hhZGVyX2ZpbGVuYW1lID0gT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LXBob25nLmZyYWciOwogICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2xpZ2h0cyA9IFV0aWw6OmZyb21TdHJpbmc8dW5zaWduZWQgaW50PihvcHRpb25zX1sibnVtLWxpZ2h0cyJdLnZhbHVlKTsKICAgICAgICAgc3RyaW5nIGZyYWdzb3VyY2UgPSBnZXRfZnJhZ21lbnRfc2hhZGVyX3NvdXJjZShmcmdfc2hhZGVyX2ZpbGVuYW1lLCBudW1fbGlnaHRzKTsKICAgICAgICAgZnJnX3NvdXJjZS5hcHBlbmQoZnJhZ3NvdXJjZSk7CkBAIC0xNzksOCArMTgwLDggQEAgU2NlbmVTaGFkaW5nOjpzZXR1cCgpCiAgICAgICAgIHZ0eF9zb3VyY2UuYXBwZW5kX2ZpbGUodnR4X3NoYWRlcl9maWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgaWYgKHNoYWRpbmcgPT0gImNlbCIpIHsKLSAgICAgICAgdnR4X3NoYWRlcl9maWxlbmFtZSA9IEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvbGlnaHQtcGhvbmcudmVydCI7Ci0gICAgICAgIGZyZ19zaGFkZXJfZmlsZW5hbWUgPSBHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWNlbC5mcmFnIjsKKyAgICAgICAgdnR4X3NoYWRlcl9maWxlbmFtZSA9IE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9saWdodC1waG9uZy52ZXJ0IjsKKyAgICAgICAgZnJnX3NoYWRlcl9maWxlbmFtZSA9IE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9saWdodC1jZWwuZnJhZyI7CiAgICAgICAgIHZ0eF9zb3VyY2UuYXBwZW5kX2ZpbGUodnR4X3NoYWRlcl9maWxlbmFtZSk7CiAgICAgICAgIGZyZ19zb3VyY2UuYXBwZW5kX2ZpbGUoZnJnX3NoYWRlcl9maWxlbmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLXNoYWRvdy5jcHAgYi9zcmMvc2NlbmUtc2hhZG93LmNwcAppbmRleCBjMTcwNGIzLi4xZmM5ODg1IDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtc2hhZG93LmNwcAorKysgYi9zcmMvc2NlbmUtc2hhZG93LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgqSAyMDEyIExpbmFybyBMaW1pdGVkCisvLyBDb3B5cmlnaHQgwqkgMjAxMiBMaW5hcm8gTGltaXRlZAogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBnbG1hcmsyIE9wZW5HTCAoRVMpIDIuMCBiZW5jaG1hcmsuCiAvLwpAQCAtMjEsNiArMjEsNyBAQAogLy8KICNpbmNsdWRlICJzY2VuZS5oIgogI2luY2x1ZGUgIm1vZGVsLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCkBAIC03Myw4ICs3NCw4IEBAIHB1YmxpYzoKIGJvb2wKIERlcHRoUmVuZGVyVGFyZ2V0OjpzZXR1cCh1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHN0cmluZyB2dHhfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvZGVwdGgudmVydCIpOwotICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2RlcHRoLmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2RlcHRoLnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2RlcHRoLmZyYWciKTsKIAogICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlKHZ0eF9zaGFkZXJfZmlsZW5hbWUpOwogICAgIFNoYWRlclNvdXJjZSBmcmdfc291cmNlKGZyZ19zaGFkZXJfZmlsZW5hbWUpOwpAQCAtMjAxLDggKzIwMiw4IEBAIEdyb3VuZFJlbmRlcmVyOjpzZXR1cChjb25zdCBtYXQ0JiBwcm9qZWN0aW9uLCB1bnNpZ25lZCBpbnQgdGV4dHVyZSkKIAogICAgIC8vIFByb2dyYW0gc2V0IHVwCiAgICAgc3RhdGljIGNvbnN0IHZlYzQgbWF0ZXJpYWxEaWZmdXNlKDAuM2YsIDAuM2YsIDAuM2YsIDEuMGYpOwotICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3NoYWRvdy52ZXJ0Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvc2hhZG93LmZyYWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL3NoYWRvdy52ZXJ0Iik7CisgICAgc3RhdGljIGNvbnN0IHN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy9zaGFkb3cuZnJhZyIpOwogICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlKHZ0eF9zaGFkZXJfZmlsZW5hbWUpOwogICAgIFNoYWRlclNvdXJjZSBmcmdfc291cmNlKGZyZ19zaGFkZXJfZmlsZW5hbWUpOwogCkBAIC0zMTQsOCArMzE1LDggQEAgYm9vbAogU2hhZG93UHJpdmF0ZTo6c2V0dXAobWFwPHN0cmluZywgU2NlbmU6Ok9wdGlvbj4mIG9wdGlvbnMpCiB7CiAgICAgLy8gUHJvZ3JhbSBvYmplY3Qgc2V0dXAKLSAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9saWdodC1iYXNpYy52ZXJ0Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvbGlnaHQtYmFzaWMuZnJhZyIpOworICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvbGlnaHQtYmFzaWMudmVydCIpOworICAgIHN0YXRpYyBjb25zdCBzdHJpbmcgZnJnX3NoYWRlcl9maWxlbmFtZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvbGlnaHQtYmFzaWMuZnJhZyIpOwogICAgIHN0YXRpYyBjb25zdCB2ZWM0IG1hdGVyaWFsRGlmZnVzZSgxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKTsKIAogICAgIFNoYWRlclNvdXJjZSB2dHhfc291cmNlKHZ0eF9zaGFkZXJfZmlsZW5hbWUpOwpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLXRlcnJhaW4vYmx1ci1yZW5kZXJlci5jcHAgYi9zcmMvc2NlbmUtdGVycmFpbi9ibHVyLXJlbmRlcmVyLmNwcAppbmRleCA2NWZiNDQxLi4xM2ViMTNiIDEwMDY0NAotLS0gYS9zcmMvc2NlbmUtdGVycmFpbi9ibHVyLXJlbmRlcmVyLmNwcAorKysgYi9zcmMvc2NlbmUtdGVycmFpbi9ibHVyLXJlbmRlcmVyLmNwcApAQCAtMTksNiArMTksNyBAQAogICogQXV0aG9yczoKICAqICBBbGV4YW5kcm9zIEZyYW50emlzCiAgKi8KKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJyZW5kZXJlci5oIgogI2luY2x1ZGUgInNoYWRlci1zb3VyY2UuaCIKQEAgLTc0LDggKzc1LDggQEAgY3JlYXRlX2JsdXJfc2hhZGVycyhTaGFkZXJTb3VyY2UmIHZ0eF9zb3VyY2UsIFNoYWRlclNvdXJjZSYgZnJnX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJhZGl1cywgZmxvYXQgc2lnbWEsIEJsdXJSZW5kZXJlcjo6Qmx1ckRpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRpbHRfc2hpZnQpCiB7Ci0gICAgdnR4X3NvdXJjZS5hcHBlbmRfZmlsZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3RlcnJhaW4tdGV4dHVyZS52ZXJ0Iik7Ci0gICAgZnJnX3NvdXJjZS5hcHBlbmRfZmlsZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3RlcnJhaW4tYmx1ci5mcmFnIik7CisgICAgdnR4X3NvdXJjZS5hcHBlbmRfZmlsZShPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKKyAgICBmcmdfc291cmNlLmFwcGVuZF9maWxlKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy90ZXJyYWluLWJsdXIuZnJhZyIpOwogCiAgICAgLyogRG9uJ3QgbGV0IHRoZSBnYXVzc2lhbiBjdXJ2ZSBiZWNvbWUgdG9vIG5hcnJvdyAqLwogICAgIGlmIChzaWdtYSA8IDEuMCkKZGlmZiAtLWdpdCBhL3NyYy9zY2VuZS10ZXJyYWluL2NvcHktcmVuZGVyZXIuY3BwIGIvc3JjL3NjZW5lLXRlcnJhaW4vY29weS1yZW5kZXJlci5jcHAKaW5kZXggMWM5MWU2Ni4uZWZkOTA0ZCAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLXRlcnJhaW4vY29weS1yZW5kZXJlci5jcHAKKysrIGIvc3JjL3NjZW5lLXRlcnJhaW4vY29weS1yZW5kZXJlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICAqIEF1dGhvcnM6CiAgKiAgQWxleGFuZHJvcyBGcmFudHppcwogICovCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyZXIuaCIKICNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCkBAIC0zOCw4ICszOSw4IEBAIENvcHlSZW5kZXJlcjo6Y29weV9wcm9ncmFtKGJvb2wgY3JlYXRlX25ldykKIAogICAgIGlmICghY29weV9wcm9ncmFtKSB7CiAgICAgICAgIGNvcHlfcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKCk7Ci0gICAgICAgIFNoYWRlclNvdXJjZSB2dHhfc2hhZGVyKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKLSAgICAgICAgU2hhZGVyU291cmNlIGZyZ19zaGFkZXIoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy90ZXJyYWluLW92ZXJsYXkuZnJhZyIpOworICAgICAgICBTaGFkZXJTb3VyY2UgdnR4X3NoYWRlcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKKyAgICAgICAgU2hhZGVyU291cmNlIGZyZ19zaGFkZXIoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL3RlcnJhaW4tb3ZlcmxheS5mcmFnIik7CiAKICAgICAgICAgU2NlbmU6OmxvYWRfc2hhZGVyc19mcm9tX3N0cmluZ3MoKmNvcHlfcHJvZ3JhbSwgdnR4X3NoYWRlci5zdHIoKSwgZnJnX3NoYWRlci5zdHIoKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9zY2VuZS10ZXJyYWluL2x1bWluYW5jZS1yZW5kZXJlci5jcHAgYi9zcmMvc2NlbmUtdGVycmFpbi9sdW1pbmFuY2UtcmVuZGVyZXIuY3BwCmluZGV4IDJhODg0MTcuLmMyMDI1NzAgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS10ZXJyYWluL2x1bWluYW5jZS1yZW5kZXJlci5jcHAKKysrIGIvc3JjL3NjZW5lLXRlcnJhaW4vbHVtaW5hbmNlLXJlbmRlcmVyLmNwcApAQCAtMTksNiArMTksNyBAQAogICogQXV0aG9yczoKICAqICBBbGV4YW5kcm9zIEZyYW50emlzCiAgKi8KKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJyZW5kZXJlci5oIgogI2luY2x1ZGUgInNoYWRlci1zb3VyY2UuaCIKQEAgLTM4LDggKzM5LDggQEAgTHVtaW5hbmNlUmVuZGVyZXI6Omx1bWluYW5jZV9wcm9ncmFtKGJvb2wgY3JlYXRlX25ldykKIAogICAgIGlmICghbHVtaW5hbmNlX3Byb2dyYW0pIHsKICAgICAgICAgbHVtaW5hbmNlX3Byb2dyYW0gPSBuZXcgUHJvZ3JhbSgpOwotICAgICAgICBTaGFkZXJTb3VyY2UgdnR4X3NoYWRlcihHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3RlcnJhaW4tdGV4dHVyZS52ZXJ0Iik7Ci0gICAgICAgIFNoYWRlclNvdXJjZSBmcmdfc2hhZGVyKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvdGVycmFpbi1sdW1pbmFuY2UuZnJhZyIpOworICAgICAgICBTaGFkZXJTb3VyY2UgdnR4X3NoYWRlcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKKyAgICAgICAgU2hhZGVyU291cmNlIGZyZ19zaGFkZXIoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL3RlcnJhaW4tbHVtaW5hbmNlLmZyYWciKTsKIAogICAgICAgICBTY2VuZTo6bG9hZF9zaGFkZXJzX2Zyb21fc3RyaW5ncygqbHVtaW5hbmNlX3Byb2dyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0eF9zaGFkZXIuc3RyKCksIGZyZ19zaGFkZXIuc3RyKCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLXRlcnJhaW4vbm9ybWFsLWZyb20taGVpZ2h0LXJlbmRlcmVyLmNwcCBiL3NyYy9zY2VuZS10ZXJyYWluL25vcm1hbC1mcm9tLWhlaWdodC1yZW5kZXJlci5jcHAKaW5kZXggN2EyNjRjNi4uMjVjOGUwZCAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLXRlcnJhaW4vbm9ybWFsLWZyb20taGVpZ2h0LXJlbmRlcmVyLmNwcAorKysgYi9zcmMvc2NlbmUtdGVycmFpbi9ub3JtYWwtZnJvbS1oZWlnaHQtcmVuZGVyZXIuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBBdXRob3JzOgogICogIEFsZXhhbmRyb3MgRnJhbnR6aXMKICAqLworI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzY2VuZS5oIgogI2luY2x1ZGUgInJlbmRlcmVyLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgpAQCAtMzksOCArNDAsOCBAQCBOb3JtYWxGcm9tSGVpZ2h0UmVuZGVyZXI6Om5vcm1hbF9mcm9tX2hlaWdodF9wcm9ncmFtKGNvbnN0IExpYk1hdHJpeDo6dmVjMiAmc2l6ZQogCiAgICAgaWYgKCFub3JtYWxfZnJvbV9oZWlnaHRfcHJvZ3JhbSkgewogICAgICAgICBub3JtYWxfZnJvbV9oZWlnaHRfcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKCk7Ci0gICAgICAgIFNoYWRlclNvdXJjZSB2dHhfc2hhZGVyKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKLSAgICAgICAgU2hhZGVyU291cmNlIGZyZ19zaGFkZXIoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy90ZXJyYWluLW5vcm1hbG1hcC5mcmFnIik7CisgICAgICAgIFNoYWRlclNvdXJjZSB2dHhfc2hhZGVyKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy90ZXJyYWluLXRleHR1cmUudmVydCIpOworICAgICAgICBTaGFkZXJTb3VyY2UgZnJnX3NoYWRlcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi1ub3JtYWxtYXAuZnJhZyIpOwogCiAgICAgICAgIFNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKCpub3JtYWxfZnJvbV9oZWlnaHRfcHJvZ3JhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnR4X3NoYWRlci5zdHIoKSwgZnJnX3NoYWRlci5zdHIoKSk7CmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtdGVycmFpbi9vdmVybGF5LXJlbmRlcmVyLmNwcCBiL3NyYy9zY2VuZS10ZXJyYWluL292ZXJsYXktcmVuZGVyZXIuY3BwCmluZGV4IDhmZWEzMjUuLjRiNjU1YWIgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS10ZXJyYWluL292ZXJsYXktcmVuZGVyZXIuY3BwCisrKyBiL3NyYy9zY2VuZS10ZXJyYWluL292ZXJsYXktcmVuZGVyZXIuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBBdXRob3JzOgogICogIEFsZXhhbmRyb3MgRnJhbnR6aXMKICAqLworI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzY2VuZS5oIgogI2luY2x1ZGUgInJlbmRlcmVyLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgpAQCAtMTA3LDggKzEwOCw4IEBAIE92ZXJsYXlSZW5kZXJlcjo6Y3JlYXRlX21lc2goKQogdm9pZAogT3ZlcmxheVJlbmRlcmVyOjpjcmVhdGVfcHJvZ3JhbSgpCiB7Ci0gICAgU2hhZGVyU291cmNlIHZ0eF9zaGFkZXIoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy90ZXJyYWluLXRleHR1cmUudmVydCIpOwotICAgIFNoYWRlclNvdXJjZSBmcmdfc2hhZGVyKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvdGVycmFpbi1vdmVybGF5LmZyYWciKTsKKyAgICBTaGFkZXJTb3VyY2UgdnR4X3NoYWRlcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKKyAgICBTaGFkZXJTb3VyY2UgZnJnX3NoYWRlcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi1vdmVybGF5LmZyYWciKTsKIAogICAgIGlmICghU2NlbmU6OmxvYWRfc2hhZGVyc19mcm9tX3N0cmluZ3MocHJvZ3JhbV8sIHZ0eF9zaGFkZXIuc3RyKCksIGZyZ19zaGFkZXIuc3RyKCkpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvc2NlbmUtdGVycmFpbi9zaW1wbGV4LW5vaXNlLXJlbmRlcmVyLmNwcCBiL3NyYy9zY2VuZS10ZXJyYWluL3NpbXBsZXgtbm9pc2UtcmVuZGVyZXIuY3BwCmluZGV4IDQyY2M4MTYuLmZjYzkxNDggMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS10ZXJyYWluL3NpbXBsZXgtbm9pc2UtcmVuZGVyZXIuY3BwCisrKyBiL3NyYy9zY2VuZS10ZXJyYWluL3NpbXBsZXgtbm9pc2UtcmVuZGVyZXIuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBBdXRob3JzOgogICogIEFsZXhhbmRyb3MgRnJhbnR6aXMKICAqLworI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzY2VuZS5oIgogI2luY2x1ZGUgInJlbmRlcmVyLmgiCiAjaW5jbHVkZSAic2hhZGVyLXNvdXJjZS5oIgpAQCAtNDAsOCArNDEsOCBAQCBTaW1wbGV4Tm9pc2VSZW5kZXJlcjo6bm9pc2VfcHJvZ3JhbShib29sIGNyZWF0ZV9uZXcpCiAKICAgICBpZiAoIW5vaXNlX3Byb2dyYW0pIHsKICAgICAgICAgbm9pc2VfcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKCk7Ci0gICAgICAgIFNoYWRlclNvdXJjZSB2dHhfc2hhZGVyKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvdGVycmFpbi10ZXh0dXJlLnZlcnQiKTsKLSAgICAgICAgU2hhZGVyU291cmNlIGZyZ19zaGFkZXIoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy90ZXJyYWluLW5vaXNlLmZyYWciKTsKKyAgICAgICAgU2hhZGVyU291cmNlIHZ0eF9zaGFkZXIoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL3RlcnJhaW4tdGV4dHVyZS52ZXJ0Iik7CisgICAgICAgIFNoYWRlclNvdXJjZSBmcmdfc2hhZGVyKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy90ZXJyYWluLW5vaXNlLmZyYWciKTsKIAogICAgICAgICBTY2VuZTo6bG9hZF9zaGFkZXJzX2Zyb21fc3RyaW5ncygqbm9pc2VfcHJvZ3JhbSwgdnR4X3NoYWRlci5zdHIoKSwgZnJnX3NoYWRlci5zdHIoKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9zY2VuZS10ZXJyYWluL3RlcnJhaW4tcmVuZGVyZXIuY3BwIGIvc3JjL3NjZW5lLXRlcnJhaW4vdGVycmFpbi1yZW5kZXJlci5jcHAKaW5kZXggNTM2NDAxYS4uZTQ2YjA2NCAxMDA2NDQKLS0tIGEvc3JjL3NjZW5lLXRlcnJhaW4vdGVycmFpbi1yZW5kZXJlci5jcHAKKysrIGIvc3JjL3NjZW5lLXRlcnJhaW4vdGVycmFpbi1yZW5kZXJlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICAqIEF1dGhvcnM6CiAgKiAgQWxleGFuZHJvcyBGcmFudHppcwogICovCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyZXIuaCIKICNpbmNsdWRlICJ0ZXh0dXJlLmgiCkBAIC04NSw4ICs4Niw4IEBAIFRlcnJhaW5SZW5kZXJlcjo6aW5pdF90ZXh0dXJlcygpCiB2b2lkCiBUZXJyYWluUmVuZGVyZXI6OmluaXRfcHJvZ3JhbSgpCiB7Ci0gICAgU2hhZGVyU291cmNlIHZ0eF9zaGFkZXIoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy90ZXJyYWluLnZlcnQiKTsKLSAgICBTaGFkZXJTb3VyY2UgZnJnX3NoYWRlcihHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3RlcnJhaW4uZnJhZyIpOworICAgIFNoYWRlclNvdXJjZSB2dHhfc2hhZGVyKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy90ZXJyYWluLnZlcnQiKTsKKyAgICBTaGFkZXJTb3VyY2UgZnJnX3NoYWRlcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3NoYWRlcnMvdGVycmFpbi5mcmFnIik7CiAKICAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHByb2dyYW1fLCB2dHhfc2hhZGVyLnN0cigpLCBmcmdfc2hhZGVyLnN0cigpKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL3NjZW5lLXRleHR1cmUuY3BwIGIvc3JjL3NjZW5lLXRleHR1cmUuY3BwCmluZGV4IDM5NzU5M2QuLjg0MGY5ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9zY2VuZS10ZXh0dXJlLmNwcAorKysgYi9zcmMvc2NlbmUtdGV4dHVyZS5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogI2luY2x1ZGUgInNjZW5lLmgiCiAjaW5jbHVkZSAibWF0LmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0YWNrLmgiCiAjaW5jbHVkZSAidmVjLmgiCiAjaW5jbHVkZSAibG9nLmgiCkBAIC0xMDksMTAgKzExMCwxMCBAQCBTY2VuZVRleHR1cmU6OnNldHVwKCkKICAgICBpZiAoIVNjZW5lOjpzZXR1cCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLnZlcnQiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl90ZXhnZW5fZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9saWdodC1iYXNpYy10ZXhnZW4udmVydCIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBmcmdfc2hhZGVyX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvbGlnaHQtYmFzaWMtdGV4LmZyYWciKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgZnJnX3NoYWRlcl9iaWxpbmVhcl9maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLXRleC1iaWxpbmVhci5mcmFnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHZ0eF9zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLnZlcnQiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdnR4X3NoYWRlcl90ZXhnZW5fZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLXRleGdlbi52ZXJ0Iik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGZyZ19zaGFkZXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLXRleC5mcmFnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGZyZ19zaGFkZXJfYmlsaW5lYXJfZmlsZW5hbWUoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL2xpZ2h0LWJhc2ljLXRleC1iaWxpbmVhci5mcmFnIik7CiAgICAgc3RhdGljIGNvbnN0IExpYk1hdHJpeDo6dmVjNCBsaWdodFBvc2l0aW9uKDIwLjBmLCAyMC4wZiwgMTAuMGYsIDEuMGYpOwogICAgIHN0YXRpYyBjb25zdCBMaWJNYXRyaXg6OnZlYzQgbWF0ZXJpYWxEaWZmdXNlKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwogCmRpZmYgLS1naXQgYS9zcmMvdGV4dC1yZW5kZXJlci5jcHAgYi9zcmMvdGV4dC1yZW5kZXJlci5jcHAKaW5kZXggOTNkODdmYi4uOGZkYmNhOSAxMDA2NDQKLS0tIGEvc3JjL3RleHQtcmVuZGVyZXIuY3BwCisrKyBiL3NyYy90ZXh0LXJlbmRlcmVyLmNwcApAQCAtMjEsNiArMjEsNyBAQAogICovCiAjaW5jbHVkZSAidGV4dC1yZW5kZXJlci5oIgogI2luY2x1ZGUgImdsLWhlYWRlcnMuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic2NlbmUuaCIKICNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCiAjaW5jbHVkZSAidmVjLmgiCkBAIC00OSw4ICs1MCw4IEBAIFRleHRSZW5kZXJlcjo6VGV4dFJlbmRlcmVyKENhbnZhcyYgY2FudmFzKSA6CiAgICAgc2l6ZSgwLjAzKTsKIAogICAgIGdsR2VuQnVmZmVycygyLCB2Ym9fKTsKLSAgICBTaGFkZXJTb3VyY2UgdnR4X3NvdXJjZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL3RleHQtcmVuZGVyZXIudmVydCIpOwotICAgIFNoYWRlclNvdXJjZSBmcmdfc291cmNlKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvdGV4dC1yZW5kZXJlci5mcmFnIik7CisgICAgU2hhZGVyU291cmNlIHZ0eF9zb3VyY2UoT3B0aW9uczo6ZGF0YV9wYXRoICsgIi9zaGFkZXJzL3RleHQtcmVuZGVyZXIudmVydCIpOworICAgIFNoYWRlclNvdXJjZSBmcmdfc291cmNlKE9wdGlvbnM6OmRhdGFfcGF0aCArICIvc2hhZGVycy90ZXh0LXJlbmRlcmVyLmZyYWciKTsKIAogICAgIGlmICghU2NlbmU6OmxvYWRfc2hhZGVyc19mcm9tX3N0cmluZ3MocHJvZ3JhbV8sIHZ0eF9zb3VyY2Uuc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmdfc291cmNlLnN0cigpKSkKZGlmZiAtLWdpdCBhL3NyYy90ZXh0dXJlLmNwcCBiL3NyYy90ZXh0dXJlLmNwcAppbmRleCBhM2M1MDNhLi5kMjQwNzMxIDEwMDY0NAotLS0gYS9zcmMvdGV4dHVyZS5jcHAKKysrIGIvc3JjL3RleHR1cmUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KICNpbmNsdWRlICJ0ZXh0dXJlLmgiCiAjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJpbWFnZS1yZWFkZXIuaCIKIApAQCAtMTQ5LDcgKzE1MCw3IEBAIFRleHR1cmU6OmZpbmRfdGV4dHVyZXMoKQogICAgICAgICByZXR1cm4gVGV4dHVyZVByaXZhdGU6OnRleHR1cmVNYXA7CiAgICAgfQogICAgIHZlY3RvcjxzdHJpbmc+IHBhdGhWZWM7Ci0gICAgc3RyaW5nIGRhdGFEaXIoR0xNQVJLX0RBVEFfUEFUSCIvdGV4dHVyZXMiKTsKKyAgICBzdHJpbmcgZGF0YURpcihPcHRpb25zOjpkYXRhX3BhdGggKyAiL3RleHR1cmVzIik7CiAgICAgVXRpbDo6bGlzdF9maWxlcyhkYXRhRGlyLCBwYXRoVmVjKTsKICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgbGlzdCBvZiBhbGwgb2YgdGhlIGltYWdlIGZpbGVzIGF2YWlsYWJsZSB0byB1cywKICAgICAvLyBsZXQncyBnbyB0aHJvdWdoIGFuZCBwdWxsIG91dCB0aGUgbmFtZXMgYW5kIHdoYXQgZm9ybWF0IHRoZXkncmUgaW4KLS0gCjEuOC41LjMKCg==