ZGlmZiAtLWdpdCBhL2RvYy9iZWlzcGllbGUvbWFzdGVyL2FjY2Vzc19yaWdodHMuYyBiL2RvYy9iZWlzcGllbGUvbWFzdGVyL2FjY2Vzc19yaWdodHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjdlOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2JlaXNwaWVsZS9tYXN0ZXIvYWNjZXNzX3JpZ2h0cy5jCkBAIC0wLDAgKzEsMTMgQEAKKy8vIFdlbm4gZWluIFZlcnplaWNobmlzIGZ1ZXIgZWluIE9iamVrdCBuaWNodCBzY2hyZWliYmFyIGlzdCwga2FubiBkZXIKKy8vIEJlc2l0emVyIGRlcyBWZXJ6ZWljaG5pc3NlcyBlaW5lIERhdGVpIGFjY2Vzc19yaWdodHMgYW5sZWdlbiwgZGllCisvLyBkaWVzZXMgUmVjaHQgdmVyZ2lidC4KKy8vIERhIERPQyBoaWVyIGVpZ2VudGxpY2ggbmljaHQgc2NocmVpYmVuIGRhcmYsIHdhciBkYXMgaGllciBub2V0aWcuCisvLyBFaW4gTWFnaWVyIHdpcmQgZGFzIGZ1ZXIgZGllIGVpZ2VuZW4gVmVyei4gaWRSIG5pY2h0IGJyYXVjaGVuLgorCitpbnQgYWNjZXNzX3JpZ2h0cyggc3RyaW5nIHVzZXIsIHN0cmluZyBwZmFkICkgeworICBpZiggdXNlcj09IkRPQyIgJiYgcGZhZD09Im9wZmVyc3RvY2tsb2ciICkgeworICAJLy8gRE9DIGRhcmYgb3BmZXJzdG9ja2xvZyBzY2hyZWliZW4KKwlyZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2suYyBiL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDhhNDYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2JlaXNwaWVsZS9tYXN0ZXIvb3BmZXJzdG9jay5jCkBAIC0wLDAgKzEsMTQyIEBACisjaW5jbHVkZSA8ZGVmaW5lcy5oPgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKy8vCisvLyBCeSBSdW1hdGFATW9yZ2VuR3JhdWVuIDMvOTkKKy8vCisvLyBCZWlzcGllbGRhdGVpIGZ1ZXIgZGllIEJlbnV0enVuZyB2b24gTWFzdGVybiB1bmQgS2xpZW50ZW4uCisvLworLy8gSWNoIGdlaGUgaGllciBuaWNodCBhdWYgZGllICJub3JtYWxlbiIgRnVua3Rpb25lbiBlaW4uCisKK2luaGVyaXQgIi9zdGQvdGhpbmciOworCisjZGVmaW5lIE9TX01BU1RFUiAiL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2ttYXN0ZXIiCisKK3ZvaWQgY3JlYXRlKCkKK3sKKwlpZihJU19CTFVFKE1FKSkgcmV0dXJuOworCTo6Y3JlYXRlKCk7CisJU2V0UHJvcCggUF9OQU1FLCAiT3BmZXJzdG9jayIgKTsKKwlTZXRQcm9wKCBQX0dFTkRFUiwgTUFMRSApOworCVNldFByb3AoIFBfVkFMVUUsIDEwMDAgKyByYW5kb20oMjAwMCkgKTsKKwlBZGRJZCggKHsic3RvY2siLCJpbnNjaHJpZnQiLCJvcGZlcnN0b2NrIn0pICk7CisJU2V0UHJvcCggUF9TSE9SVCwgIkluIGVpbmVyIEVja2Ugc3RlaHQgZWluIE9wZmVyc3RvY2siICk7CisJU2V0UHJvcCggUF9MT05HLAorCQkiRGVyIE9wZmVyc3RvY2sgYmVzdGVodCBhdXMgc29saWRlbSBIb2x6LiBWb3JuZSBhdWYgZGVtIEthc3RlbiBpc3QgZWluZVxuIgorCSsJIkluc2NocmlmdCB6dSBzZWhlbiwgZGllIER1IGxlc2VuIGthbm5zdC5cbiIKKwkrCSJAQGNvbnRlbnRzQEAiCisJKTsKKwlTZXRQcm9wKCBQX1JFQURfTVNHLAorCQkiPj4+Pj4+Pj4+Pj4+IEZ1ZXIgZGVuIEF1ZmJhdSBlaW5lcyBPcmt3YWlzZW5oYXVzZXMgPDw8PDw8PDw8PDw8XG4iCisJKwkiSW4gZGVuIGxldHp0ZW4gSmFocmVuIHd1cmRlbiBpbW1lciB3aWVkZXIgdW5zY2h1bGRpZ2UgT3Jra2luZGVyXG4iCisJKwkiZHVyY2ggYnJ1dGFsZSBBYmVudGV1cmVyIGlocmVyIEVsdGVybiBiZXJhdWJ0LiBCaXR0ZSB1bnRlci1cbiIKKwkrCSJzdHVldHplbiBTaWUgbWl0IGVpbmVyIGtsZWluZW4gU3BlbmRlIGRlbiBBdWZiYXUgZWluZXMgV2Fpc2VuLVxuIgorCSsJImhhdXNlcyBmdWVyIGRpZXNlIGJlbWl0bGVpZGVuc3dlcnRlbiBLcmVhdHVyZW4uXG4iCisJKTsKKwlBZGREZXRhaWwoICJob2x6IiwgIlNvbGlkZSB1bmQgc28gZ3V0IHdpZSB1bnplcmJyZWNobGljaC5cbiIgKTsKKwlTZXRQcm9wKCBQX05PR0VULAorCQkiRGVyIE9wZmVyc3RvY2sgaXN0IG5pY2h0IG9obmUgR3J1bmQgYW0gQm9kZW4gZmVzdGdlbmFnZWx0LlxuIiApOworCUFkZENtZCggInNwZW5kZSIsInNwZW5kZSIgKTsKKwlBZGRDbWQoICh7InN0ZWNrZSIsInN0ZWNrIn0pLCAic3RlY2tlbiIgKTsKKwlBZGRDbWQoICJvZWZmbmUiLCJvZWZmbmUiICk7CisJQWRkQ21kKCAoeyJicmljaCIsImJyZWNoZSJ9KSwiYnJlY2hlIiApOworfQorCitjb250ZW50cygpCit7CisJc3dpdGNoKFF1ZXJ5UHJvcChQX1ZBTFVFKSkKKwl7CisJY2FzZSAwOgorCQlyZXR1cm4gIkVyIGlzdCBsZWVyLlxuIjsKKwljYXNlIDE6CisJCXJldHVybiAiRXIgZW50aGFlbHQ6XG5FaW5lIE11ZW56ZS5cbiI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJFciBlbnRoYWVsdDpcbiIrUXVlcnlQcm9wKFBfVkFMVUUpKyIgTXVlbnplbi5cbiI7CisJfQorfQorCitzdGVja2VuKCBzdHIgKQoreworCXN0cmluZyB3YXMsIHdvcmVpbjsKKwlpZiggIXN0ciB8fCBzc2NhbmYoc3RyLCIlcyBpbiAlcyIsd2FzLHdvcmVpbikhPTIgfHwgIWlkKHdvcmVpbikgKSByZXR1cm4gMDsKKwlyZXR1cm4gc3BlbmRlKCBzdHIgKTsKK30KKworc3BlbmRlKCBzdHIgKQoreworCWludCBhbnosIG5ld0FsOworCXN0cmluZyBhcmc7CisJCisJbm90aWZ5X2ZhaWwoICJXaWV2aWVsZSBNdWVuemVuIHdpbGxzdCBEdSBkZW5uIHNwZW5kZW4/XG4iICk7CisJaWYoICFzdHIgfHwgc3RyPT0iIiApCisJCXJldHVybiAwOworCWlmKCBzc2NhbmYoc3RyLCIlZCAlcyIsYW56LGFyZyk9PSAyICkKKwkJc3RyID0gYXJnOworCWVsc2UKKwl7CisJCWlmKCBzdHI9PSJlaW5lIG11ZW56ZSIgfHwgc3RyPT0iZWluIGdvbGRzdHVlY2siICkKKwkJeworCQkJYW56ID0gMTsKKwkJCXN0ciA9ICJtdWVuemUiOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKwlpZiggYW56PD0wIHx8IAorCQltZW1iZXIoKHsibXVlbnplIiwiZ29sZHN0dWVjayIsIm11ZW56ZW4iLCJnb2xkc3R1ZWNrZSJ9KSwgc3RyKT09LTEKKwkpCisJCXJldHVybiAwOworCWlmKCBhbno+UEwtPlF1ZXJ5TW9uZXkoKSApCisJeworCQl3cml0ZSggIlNvIHZpZWwgR2VsZCBoYXN0IER1IG5pY2h0LlxuIiApOworCQlyZXR1cm4gMTsKKwl9CisJUEwtPkFkZE1vbmV5KC1hbnopOworCVNldFByb3AoUF9WQUxVRSxRdWVyeVByb3AoUF9WQUxVRSkrYW56KTsKKworCS8vIEhpZXIgd2lyZCBkZXIgTWFzdGVyIGF1ZmdlcnVmZW4sIGRlciBkYXMgQWxpZ25tZW50IGRlciBTcGllbGVyCisJLy8gZGFubiBhZW5kZXJ0LgorCWlmKCBPU19NQVNURVItPmFkZEFsaWdubWVudCggUEwsIGFuei8zICkgPiAwICkgeworCQkvLyBFaWdlbnRsaWNoIGv2bm50ZSBtYW4gaGllciBhdWNoIGRpZSBNZWxkdW5nIGF1c2dlYmVuLCBhYmVyCisJCS8vIGRlciBTcGllbGVyIHNvbGwgZGVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIEFsaWdubWVudCBnZWFlbmRlcnQKKwkJLy8gdW50IEFsaWdubWVudCBuaWNodCBnZWFlbmRlcnQgc2VoZW4ga29lbm5lbi4KKwl9CisJd3JpdGUoICJEdSBoYXN0IHdhaHJoYWZ0IGRhcyBHZWZ1ZWhsLCBldHdhcyBHdXRlcyBnZXRhbiB6dSBoYWJlbi5cbiIgKTsKKworCXNheSggY2FwaXRhbGl6ZShQTC0+bmFtZShXRVIpKSsiIHNwZW5kZXQgIithbnoKKwkJKyAoKGFuej09MSk/IiBNdWVuemUuXG4iOiIgTXVlbnplbi5cbiIpICk7CisJcmV0dXJuIDE7Cit9CisKK29lZmZuZSggc3RyICkKK3sKKwlpbnQgbmV3QWw7CisJCisJbm90aWZ5X2ZhaWwoICJXQVMgd2lsbHN0IER1IG9lZmZuZW4/XG4iICk7CisJaWYoICFpZChzdHIpICkKKwkJcmV0dXJuIDA7CisJT1NfTUFTVEVSLT5hZGRBbGlnbm1lbnQoIFBMLCAtMzAgKTsKKwl3cml0ZSggIkFsbGVpbiBzY2hvbiBkZXIgR2VkYW5rZS4uLi5cbiIgKTsKKwlyZXR1cm4gMTsKK30KKworYnJlY2hlKCBzdHIgKQoreworCXN0cmluZyBhcmc7CisJbm90aWZ5X2ZhaWwoICJXQVMgd2lsbHN0IER1IGF1ZmJyZWNoZW4/XG4iICk7CisJaWYoICFzdHIgKQorCQlyZXR1cm4gMDsKKwlpZiggc3NjYW5mKHN0ciwiJXMgYXVmIixhcmcpPT0xICkKKwkJc3RyID0gYXJnOworCWlmKCAhaWQoc3RyKSApCisJCXJldHVybiAwOworCXdyaXRlKCAiRGVpbiBsYXV0ZXMgR2V0b2VzZSBydWZ0IGVpbmVuIFRldWZlbCBoZXJiZWksIGRlciBEaWNoIGdsZWljaFxuIgorCSsJIm1pdCBpbiBkaWUgSG9lbGxlIG5pbW10LlxuIgorCSk7CisJc2F5KCBjYXBpdGFsaXplKFBMLT5uYW1lKFdFUikpKyIgdmVyc3VjaHQsIGRlbiBPcGZlcnN0b2NrIGF1Znp1YnJlY2hlbi5cbiIKKwkrICJHbGVpY2ggZXJzY2hlaW50IGVpbiBUZXVmZWwsIHVtICIrUEwtPlF1ZXJ5UHJvbm91bihXRU4pCisJKwkiIGluIGRpZSBIb2VsbGUgenUgcmVpc3Nlbi5cbiIgKTsKKwlQTC0+bW92ZSgiL2QvdW50ZXJ3ZWx0L3JhZXVtZS9xdWFsZW5yYXVtIixNX0dPLCJ6dXIgSG9lbGxlIiwiZmFlaHJ0Iik7CisJT1NfTUFTVEVSLT5hZGRBbGlnbm1lbnQoIFBMLCAtMjAwICk7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kb2MvYmVpc3BpZWxlL21hc3Rlci9vcGZlcnN0b2NrbWFzdGVyLmMgYi9kb2MvYmVpc3BpZWxlL21hc3Rlci9vcGZlcnN0b2NrbWFzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhMDgxZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2ttYXN0ZXIuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIEJlaXNwaWVsZGF0ZWkgZnVlciBlaW5lbiBlaW5mYWNoZW4gTWFzdGVyLCBkZXIgU3BpZWxlcmRhdGVuIGF1Y2gKKyAqIHVlYmVyIHJlYm9vdHMsIHJlc2V0cyB1bmQgdXBkYXRlcyBoaW53ZWcgc3BlaWNoZXJ0LCB1bmQgZ2xlaWNoemVpdGcKKyAqIGRhZnVlciBzb3JndCwgZGFzcyBkaWUgRGF0ZW5tZW5nZW4gbmljaHQgaW1tZXIgZ3JvZXNzZXIgd2VyZGVuLgorICoKKyAqIEJ5OiBSdW1hdGFATW9yZ2VuR3JhdWVuIDMvOTkKKyAqCisgKi8KKworLy8gVm9uIGRpZXNlbSBPYmpla3QgZ2lidCBlcyBrZWluZSBDbG9uZXMsIHNvbmRlcm4gbnVyIGRpZSBCbHVlcHJpbnQuCisvLyBEYXMgS29uc3RydWt0IGlmKCBjbG9uZXAoTUUpICkgZGVzdHJ1Y3QodGhpc19vYmplY3QoKSk7IGlzdCBkYWR1cmNoCisvLyBvYnNvbGV0LgorI3ByYWdtYSBub19jbG9uZQorCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPGRlZmluZXMuaD4KKworLy8gT3J0LCBhbiBkZW0gZGllIERhdGVuIGdlc3BlaWNoZXJ0IHdlcmRlbiBrb2VubmVuLiBEaWUgRW5kdW5nIC5vCisvLyB3aXJkIHZvbSBTeXN0ZW0gYW5nZWhhZW5ndC4KKyNkZWZpbmUgU0FWRUZJTEUgIi9kb2MvYmVpc3BpZWxlL21hc3Rlci9vcGZlcnN0b2NrbG9nIgorCisvLyBEaWVzZXMgaXN0IGRlciBLbGllbnQsIGRlciBkaWVzZW4gTWFzdGVyIGJlbnV0enQuIERpZXNlciBXZXJ0IHdpcmQKKy8vIGluIGRpZXNlbSBQcm9ncmFtbSB6d2FyIG5pY2h0IGJlbnV0enQsIHN0ZWh0IGhpZXIgYWJlciwgZGFtaXQgbWFuCisvLyB3ZWlzcywgd29mdWVyIGRpZXNlciBNYXN0ZXIgZ3V0IGlzdC4KKyNkZWZpbmUgQ0xJRU5UICIvZG9jL2JlaXNwaWVsZS9tYXN0ZXIvb3BmZXJzdG9jayIKKworLy8gRXMgYnJhdWNodCBrZWluIE9iamVrdCBpbmhlcml0ZXQgd2VyZGVuLCBkYSB3aXIga2VpbmVybGVpIFNwaWVsLQorLy8gRnVua3Rpb25pdGFldCBicmF1Y2hlbi4gRGVyIE1hc3RlciBrYW5uIG5pY2h0IGdlbm9tbWVuLCBiZXdlZ3Qgb2RlcgorLy8gc29uc3R3aWUgaW5uaGVybGFiIGRlcyBNdWRzIGJlbnV0enQgd2VyZGVuLiBJbnNiZXNvbmRlcmUgc29sbGVuCisvLyBpbSBzYXZlZmlsZSB6dW0gTWFzdGVyIGtlaW5lIFByb3BlcnRpZXMgb2RlciBzbyBhdWZ0YXVjaGVuLgorLy8gaW5oZXJ0ICIvc3RkL3RoaW5nIjsKKworLy8gVW0gZGllc2UgRGF0ZW4gZ2VodCBlcy4KKy8vIERhcyBNYXBwaW5nIHNwZWljaGVydCB6dSBqZWRlbSBTcGllbGVyLCB3YW5uIGRhcyBsZXR6dGUgTWFsIGR1cmNoIGVpbmVuCisvLyBkZXIgS2xpZW50ZW4gZGFzIEFsaWdubWVudCBnZWFlbmRlcnQgd3VyZGUuIEFsdGUgRGF0ZW4gd2VyZGVuIGJlaQorLy8gR2VsZWdlbmhlaXQgZ2Vsb2VzY2h0LgorbWFwcGluZyBkYXRhOworCit2b2lkIHB1cmdlKCk7CisKK3ZvaWQgY3JlYXRlKCkgeworCisgIC8vIERhbWl0IFNjaHJlaWJ6dWdyaWZmIGF1ZiBTYXZlZmlsZSBtb2VnbGljaC4KKyAgc2V0ZXVpZChnZXR1aWQoKSk7CisKKyAgaWYoIHJlc3RvcmVfb2JqZWN0KCBTQVZFRklMRSApICkgeworICAgIHB1cmdlKCk7CisgIH0gZWxzZSB7CisgICAgZGF0YSA9IChbXSk7CisgICAgc2F2ZV9vYmplY3QoIFNBVkVGSUxFICk7IC8vIERhbWl0IFNhdmVmaWxlIHVuZCBEYXRlbiBpbW1lciBzeW5jaHJvbiBzaW5kLgorICB9Cit9CisKKy8vIERpZXNlIEZ1bmt0aW9uIHRlc3RldCBlaW5lbiBlaW56ZWxuZW4gRWludHJhZywgb2IgZXIgdmVyYWx0ZXQgaXN0LgorLy8gKGlzdCBuaWNodCBKYWhyIDIwMzgtZmVzdCA6LSkKK2ludCBub3RFeHBpcmVkKCBzdHJpbmcgbmFtZSwgaW50IGRhdGUgKSB7CisgIHJldHVybiB0aW1lKCkgLSBkYXRlIDwgODY0MDA7Cit9CisKKy8vIERhcyBNYXBwaW5nIHVudGVyc3VjaGVuLCBvYiBFaW50cmFlZ2Ugdm9yaGFuZGVuIHNpbmQsIGRpZSBuaWNodAorLy8gbWVociBiZW5vZXRpZ3Qgd2VyZGVuLgorLy8gKEluIGRpZXNlbSBGYWxsIHNpbmQgZGFzIEVpbnRyYWVnZSwgZGllIGFlbHRlciBhbHMgZWluZW4gVGFnIHNpbmQuKQorLy8gRXMgcmVpY2h0IHVucywgZGllc2UgRnVua3Rpb24gZWlubWFsIHBybyByZWJvb3QgYXVzenVmdWVocmVuLiBCZWkKKy8vIGFuZGVyZW4gQW53ZW5kdW5nZW4ga29lbm50ZSBkYXMgbmF0dWVybGljaCBoYWV1ZmlnZXIgbm9ldGlnIHNlaW4uCit2b2lkIHB1cmdlKCkgeworICBkYXRhID0gZmlsdGVyX2luZGljZXMoIGRhdGEsICMnbm90RXhwaXJlZCApOworICBzYXZlX29iamVjdCggU0FWRUZJTEUgKTsKK30KKworLy8gRGllc2UgRnVua3Rpb24gaXN0IGRpZSBlaW5nZXRsaWNoZSBGdW5rdGlvbiwgZGllICJnZW1hc3RlcnQiIHdlcmRlbgorLy8gc29sbCwgYWxzbyBm/HIgbWVocmVyZSBPcGZlcnN0b2Vja2UgZ2VtZWluc2FtIGJlbnV0enQgd2lyZC4KKy8vIERlciBPcGZlcnN0b2NrIHVlYmVyZ2lidCBkYXMgU3BpZWxlcm9iamVrdCB1bmQgZGllIGdld3VlbnNjaHRlCisvLyBBbGlnbm1lbnRhZW5kZXJ1bmcsIGFscyBFcmdlYm5pcyB3aXJkIDEgZ2VsaWVmZXJ0LCB3ZW5uIGVpbmUgQWVuZGVydW5nCisvLyB2b3JnZW5vbW1lbiB3dXJkZSAoMCBzb25zdCkgdW5kIGRhcyBBbGlnbm1lbnQgZGVzIFNwaWVsZXJzIGVudHNwcmVjaGVuZAorLy8gZ2VzZXR6dC4KK2ludCBhZGRBbGlnbm1lbnQoIG9iamVjdCBwbGF5ZXIsIGludCBhbGlnbiApIHsKKyAgaW50IG5ld0FsaWduOworICBzdHJpbmcgbmFtZTsKKworICAvKgorICAvLyBGYWxscyBtYW4gdmVyaGluZGVybiB3aWxsLCBkYXNzIG51ciBkZXIgS2xpZW50IGF1ZiBkaWUgRGF0ZW4genVncmVpZnQsCisgIC8vIGthbm4gbWFuIGhpZXIgbm9jaCBBYmZyYWdlbiBlaW5iYXVlbiwgdHlwaXNjaGVyd2Vpc2Ugc2llaHQgZGFzIGRhbm4gc28KKyAgLy8gYXVzOgorICBpZiggb2JqZWN0X25hbWUocHJldmlvdXNfb2JqZWN0KCkpWzAuLnh4eF0gIT0gQ0xJRU5UICkgcmV0dXJuIC0xOworICAvLyBvZGVyCisgIGlmKCBnZXRldWlkKHByZXZpb3VzX29iamVjdCgpKSAhPSBnZXRldWlkKCkgKSByZXR1cm4gLTE7CisgIC8vIGV0Yy4gZXRjLgorICAqLworCisgIG5hbWUgPSBnZXRldWlkKHBsYXllcik7CisKKyAgLy8gTnVyIGVpbmUgQWVuZGVydW5nIHBybyBUYWcuCisgIC8vIFdpciBiZW51dHplbiBoaWVyLCBkYXNzIGRhdGFbbmFtZV0gPT0gMCBpc3QsIGZhbGxzIGRhdGEgZGVuIE5hbWVuIG5pY2h0CisgIC8vIGVudGhhZWx0IQorICBpZiggbm90RXhwaXJlZCggbmFtZSwgZGF0YVtuYW1lXSApICkgcmV0dXJuIDA7CisKKyAgLy8gRGF0ZW4gc2V0emVuIHVuZCBzcGVpY2hlcm4uCisgIGRhdGFbbmFtZV0gPSB0aW1lKCk7CisgIHNhdmVfb2JqZWN0KCBTQVZFRklMRSApOworCisgIC8vIE1heGltYWxlIEFlbmRlcnVuZzogMjAwCisgIGlmKCBhbGlnbiA8IC0yMDAgKSBhbGlnbiA9IC0yMDA7CisgIGlmKCBhbGlnbiA+IDIwMCApIGFsaWduID0gMjAwOworCisgIG5ld0FsaWduID0gcGxheWVyLT5RdWVyeVByb3AoIFBfQUxJR04gKSArIGFsaWduOworCisgIC8vIEthcHB1bmcgYmVpICstMTAwMAorICBpZiggbmV3QWxpZ24gPCAtMTAwMCApIG5ld0FsaWduID0gLTEwMDA7CisgIGlmKCBuZXdBbGlnbiA+IDEwMDAgKSBuZXdBbGlnbiA9IDEwMDA7CisgCisgIHBsYXllci0+U2V0UHJvcCggUF9BTElHTiwgbmV3QWxpZ24gKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8vIFNjaGx1c3NiZW1lcmt1bmc6CisvLworLy8gR2V3aXR6dGUgUHJvZ3JhbW1pZXJlciBrb2VubnRlbiBkZW4gS2xpZW50IHVuZCBkZW4gTWFzdGVyIGluIGVpbmVyCisvLyBEYXRlaSB6dXNhbW1lbiBhYmxlZ2VuLiBEaWUgQmx1ZXByaW50IHdpcmQgYWxzIE1hc3RlciwgZGllIENsb25lcyB3ZXJkZW4KKy8vIGFscyBLbGllbnRlbiBiZW51dHp0LiBJY2ggaGFiZSBkYXMgaGllciBiZXd1c3N0IGFuZGVycyBnZW1hY2h0IHVuZCBlbXBmZWhsZQorLy8gZGFzIGF1Y2ggYWxzIFZvcmJpbGQsIHdlaWwgc28gZGVyIENvZGUgd2VzZW50bGljaCBiZXNzZXIgenUgdmVyc3RlaGVuIGlzdC4K