ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvQlVJTEQuZ24gYi9mcGRmc2RrL0JVSUxELmduCmluZGV4IDNlMmI2MDUuLjBiYWRiM2MgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvQlVJTEQuZ24KKysrIGIvZnBkZnNkay9CVUlMRC5nbgpAQCAtNjMsNiArNjMsNyBAQAogICAgICJmcGRmX3N0cnVjdHRyZWUuY3BwIiwKICAgICAiZnBkZl9zeXNmb250aW5mby5jcHAiLAogICAgICJmcGRmX3RleHQuY3BwIiwKKyAgICAiZnBkZl90aHVtYm5haWwuY3BwIiwKICAgICAiZnBkZl90cmFuc2Zvcm1wYWdlLmNwcCIsCiAgICAgImZwZGZfdmlldy5jcHAiLAogICAgICJpcGRmc2RrX2Fubm90aGFuZGxlci5oIiwKQEAgLTE1NSw2ICsxNTYsNyBAQAogICAgICJmcGRmX3N0cnVjdHRyZWVfZW1iZWRkZXJ0ZXN0LmNwcCIsCiAgICAgImZwZGZfc3lzZm9udGluZm9fZW1iZWRkZXJ0ZXN0LmNwcCIsCiAgICAgImZwZGZfdGV4dF9lbWJlZGRlcnRlc3QuY3BwIiwKKyAgICAiZnBkZl90aHVtYm5haWxfZW1iZWRkZXJ0ZXN0LmNwcCIsCiAgICAgImZwZGZfdHJhbnNmb3JtcGFnZV9lbWJlZGRlcnRlc3QuY3BwIiwKICAgICAiZnBkZl92aWV3X2NfYXBpX3Rlc3QuYyIsCiAgICAgImZwZGZfdmlld19jX2FwaV90ZXN0LmgiLApkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX3RodW1ibmFpbC5jcHAgYi9mcGRmc2RrL2ZwZGZfdGh1bWJuYWlsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA2ODQxCi0tLSAvZGV2L251bGwKKysrIGIvZnBkZnNkay9mcGRmX3RodW1ibmFpbC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLy8gQ29weXJpZ2h0IDIwMTkgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaW5jbHVkZSAicHVibGljL2ZwZGZfdGh1bWJuYWlsLmgiCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2UuaCIKKyNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFyc2VyL2NwZGZfZGljdGlvbmFyeS5oIgorI2luY2x1ZGUgImNvcmUvZnBkZmFwaS9wYXJzZXIvY3BkZl9zdHJlYW0uaCIKKyNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFyc2VyL2NwZGZfc3RyZWFtX2FjYy5oIgorI2luY2x1ZGUgImNvcmUvZnBkZmFwaS9yZW5kZXIvY3BkZl9kaWJiYXNlLmgiCisjaW5jbHVkZSAiY29yZS9meGdlL2RpYi9jZnhfZGliaXRtYXAuaCIKKyNpbmNsdWRlICJmcGRmc2RrL2NwZGZzZGtfaGVscGVycy5oIgorI2luY2x1ZGUgInB1YmxpYy9mcGRmdmlldy5oIgorCituYW1lc3BhY2UgeworCitjb25zdCBDUERGX1N0cmVhbSogQ1BERlN0cmVhbUZvclRodW1ibmFpbEZyb21QYWdlKEZQREZfUEFHRSBwYWdlKSB7CisgIGNvbnN0IENQREZfUGFnZSogcF9wYWdlID0gQ1BERlBhZ2VGcm9tRlBERlBhZ2UocGFnZSk7CisgIGlmICghcF9wYWdlKQorICAgIHJldHVybiBudWxscHRyOworCisgIGNvbnN0IENQREZfRGljdGlvbmFyeSogcGFnZV9kaWN0ID0gcF9wYWdlLT5HZXREaWN0KCk7CisgIGlmICghcGFnZV9kaWN0IHx8ICFwYWdlX2RpY3QtPktleUV4aXN0KCJUeXBlIikpCisgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgcmV0dXJuIHBhZ2VfZGljdC0+R2V0U3RyZWFtRm9yKCJUaHVtYiIpOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworRlBERl9FWFBPUlQgdW5zaWduZWQgbG9uZyBGUERGX0NBTExDT05WCitGUERGUGFnZV9HZXREZWNvZGVkVGh1bWJuYWlsRGF0YUZyb21QYWdlKEZQREZfUEFHRSBwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmbGVuKSB7CisgIGNvbnN0IENQREZfU3RyZWFtKiB0aHVtYl9zdHJlYW0gPSBDUERGU3RyZWFtRm9yVGh1bWJuYWlsRnJvbVBhZ2UocGFnZSk7CisgIGlmICghdGh1bWJfc3RyZWFtKQorICAgIHJldHVybiAwdTsKKworICByZXR1cm4gRGVjb2RlU3RyZWFtTWF5YmVDb3B5QW5kUmV0dXJuTGVuZ3RoKHRodW1iX3N0cmVhbSwgYnVmZmVyLCBidWZsZW4pOworfQorCitGUERGX0VYUE9SVCB1bnNpZ25lZCBsb25nIEZQREZfQ0FMTENPTlYKK0ZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShGUERGX1BBR0UgcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBidWZsZW4pIHsKKyAgY29uc3QgQ1BERl9TdHJlYW0qIHRodW1iX3N0cmVhbSA9IENQREZTdHJlYW1Gb3JUaHVtYm5haWxGcm9tUGFnZShwYWdlKTsKKyAgaWYgKCF0aHVtYl9zdHJlYW0pCisgICAgcmV0dXJuIDB1OworCisgIHJldHVybiBHZXRSYXdTdHJlYW1NYXliZUNvcHlBbmRSZXR1cm5MZW5ndGgodGh1bWJfc3RyZWFtLCBidWZmZXIsIGJ1Zmxlbik7Cit9CisKK0ZQREZfRVhQT1JUIEZQREZfQklUTUFQIEZQREZfQ0FMTENPTlYKK0ZQREZQYWdlX0dldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2UoRlBERl9QQUdFIHBhZ2UpIHsKKyAgY29uc3QgQ1BERl9TdHJlYW0qIHRodW1iX3N0cmVhbSA9IENQREZTdHJlYW1Gb3JUaHVtYm5haWxGcm9tUGFnZShwYWdlKTsKKyAgaWYgKCF0aHVtYl9zdHJlYW0pCisgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgY29uc3QgQ1BERl9QYWdlKiBwX3BhZ2UgPSBDUERGUGFnZUZyb21GUERGUGFnZShwYWdlKTsKKworICBhdXRvIHBfc291cmNlID0gcGRmaXVtOjpNYWtlUmV0YWluPENQREZfRElCQmFzZT4oKTsKKyAgY29uc3QgQ1BERl9ESUJCYXNlOjpMb2FkU3RhdGUgc3RhcnRfc3RhdHVzID0gcF9zb3VyY2UtPlN0YXJ0TG9hZERJQkJhc2UoCisgICAgICBwX3BhZ2UtPkdldERvY3VtZW50KCksIHRodW1iX3N0cmVhbSwgZmFsc2UsIG51bGxwdHIsCisgICAgICBwX3BhZ2UtPm1fcFBhZ2VSZXNvdXJjZXMuR2V0KCksIGZhbHNlLCAwLCBmYWxzZSk7CisgIGlmIChzdGFydF9zdGF0dXMgPT0gQ1BERl9ESUJCYXNlOjpMb2FkU3RhdGU6OmtGYWlsKQorICAgIHJldHVybiBudWxscHRyOworCisgIGF1dG8gdGh1bWJfYml0bWFwID0gcGRmaXVtOjpNYWtlUmV0YWluPENGWF9ESUJpdG1hcD4oKTsKKyAgaWYgKCF0aHVtYl9iaXRtYXAtPkNvcHkocF9zb3VyY2UpKQorICAgIHJldHVybiBudWxscHRyOworCisgIHJldHVybiBGUERGQml0bWFwRnJvbUNGWERJQml0bWFwKHRodW1iX2JpdG1hcC5MZWFrKCkpOworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX3RodW1ibmFpbF9lbWJlZGRlcnRlc3QuY3BwIGIvZnBkZnNkay9mcGRmX3RodW1ibmFpbF9lbWJlZGRlcnRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NmY2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9mcGRmc2RrL2ZwZGZfdGh1bWJuYWlsX2VtYmVkZGVydGVzdC5jcHAKQEAgLTAsMCArMSwyOTkgQEAKKy8vIENvcHlyaWdodCAyMDE5IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInB1YmxpYy9mcGRmX3RodW1ibmFpbC5oIgorI2luY2x1ZGUgInB1YmxpYy9mcGRmdmlldy5oIgorI2luY2x1ZGUgInRlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIgorI2luY2x1ZGUgInRlc3RpbmcvdXRpbHMvaGFzaC5oIgorCitjbGFzcyBGUERGVGh1bWJuYWlsRW1iZWRkZXJUZXN0IDogcHVibGljIEVtYmVkZGVyVGVzdCB7fTsKKworVEVTVF9GKEZQREZUaHVtYm5haWxFbWJlZGRlclRlc3QsIEdldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2VXaXRoRmlsdGVycykgeworICBBU1NFUlRfVFJVRShPcGVuRG9jdW1lbnQoInNpbXBsZV90aHVtYm5haWwucGRmIikpOworCisgIHsKKyAgICBjb25zdCBjaGFyIGtIYXNoZWREZWNvZGVkRGF0YVtdID0gIjc5MDJkMGJlODMxYzkwMjQ5NjBmNGViZDVkN2RmMWY3IjsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGtFeHBlY3RlZFNpemUgPSAxMTM4dTsKKworICAgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgICAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxlbmd0aF9ieXRlcyA9CisgICAgICAgIEZQREZQYWdlX0dldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2UocGFnZSwgbnVsbHB0ciwgMCk7CisgICAgQVNTRVJUX0VRKGtFeHBlY3RlZFNpemUsIGxlbmd0aF9ieXRlcyk7CisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdGh1bWJfYnVmKGxlbmd0aF9ieXRlcyk7CisKKyAgICBFWFBFQ1RfRVEoa0V4cGVjdGVkU2l6ZSwgRlBERlBhZ2VfR2V0RGVjb2RlZFRodW1ibmFpbERhdGFGcm9tUGFnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIHRodW1iX2J1Zi5kYXRhKCksIGxlbmd0aF9ieXRlcykpOworICAgIEVYUEVDVF9FUShrSGFzaGVkRGVjb2RlZERhdGEsCisgICAgICAgICAgICAgIEdlbmVyYXRlTUQ1QmFzZTE2KHRodW1iX2J1Zi5kYXRhKCksIGtFeHBlY3RlZFNpemUpKTsKKworICAgIFVubG9hZFBhZ2UocGFnZSk7CisgIH0KKworICB7CisgICAgY29uc3QgY2hhciBrSGFzaGVkRGVjb2RlZERhdGFbXSA9ICJlODExMjNhNTczMzc4YmExZWE4MDQ2MWQyNWNjNDFmNiI7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyBrRXhwZWN0ZWRTaXplID0gMTExMHU7CisKKyAgICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDEpOworICAgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhfYnl0ZXMgPQorICAgICAgICBGUERGUGFnZV9HZXREZWNvZGVkVGh1bWJuYWlsRGF0YUZyb21QYWdlKHBhZ2UsIG51bGxwdHIsIDApOworICAgIEFTU0VSVF9FUShrRXhwZWN0ZWRTaXplLCBsZW5ndGhfYnl0ZXMpOworICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRodW1iX2J1ZihsZW5ndGhfYnl0ZXMpOworCisgICAgRVhQRUNUX0VRKGtFeHBlY3RlZFNpemUsIEZQREZQYWdlX0dldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLCB0aHVtYl9idWYuZGF0YSgpLCBsZW5ndGhfYnl0ZXMpKTsKKyAgICBFWFBFQ1RfRVEoa0hhc2hlZERlY29kZWREYXRhLAorICAgICAgICAgICAgICBHZW5lcmF0ZU1ENUJhc2UxNih0aHVtYl9idWYuZGF0YSgpLCBrRXhwZWN0ZWRTaXplKSk7CisKKyAgICBVbmxvYWRQYWdlKHBhZ2UpOworICB9Cit9CisKK1RFU1RfRihGUERGVGh1bWJuYWlsRW1iZWRkZXJUZXN0LAorICAgICAgIEdldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2VXaXRoTm9GaWx0ZXJzKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgidGh1bWJuYWlsX3dpdGhfbm9fZmlsdGVycy5wZGYiKSk7CisKKyAgY29uc3QgY2hhciBrSGFzaGVkRGVjb2RlZERhdGFbXSA9ICJiNTY5NmU1ODYzODJiMzM3Mzc0MWY4YTFkNjUxY2FiMCI7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcga0V4cGVjdGVkU2l6ZSA9IDMwMXU7CisKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgdW5zaWduZWQgbG9uZyBsZW5ndGhfYnl0ZXMgPQorICAgICAgRlBERlBhZ2VfR2V0RGVjb2RlZFRodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwKTsKKyAgQVNTRVJUX0VRKGtFeHBlY3RlZFNpemUsIGxlbmd0aF9ieXRlcyk7CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRodW1iX2J1ZihsZW5ndGhfYnl0ZXMpOworCisgIEVYUEVDVF9FUShrRXhwZWN0ZWRTaXplLCBGUERGUGFnZV9HZXREZWNvZGVkVGh1bWJuYWlsRGF0YUZyb21QYWdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIHRodW1iX2J1Zi5kYXRhKCksIGxlbmd0aF9ieXRlcykpOworICBFWFBFQ1RfRVEoa0hhc2hlZERlY29kZWREYXRhLAorICAgICAgICAgICAgR2VuZXJhdGVNRDVCYXNlMTYodGh1bWJfYnVmLmRhdGEoKSwga0V4cGVjdGVkU2l6ZSkpOworCisgIFVubG9hZFBhZ2UocGFnZSk7Cit9CisKK1RFU1RfRihGUERGVGh1bWJuYWlsRW1iZWRkZXJUZXN0LAorICAgICAgIEdldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2VXaXRoTm9UaHVtYm5haWxzKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiaGVsbG9fd29ybGQucGRmIikpOworCisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgIEVYUEVDVF9FUSgwdSwgRlBERlBhZ2VfR2V0RGVjb2RlZFRodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwKSk7CisKKyAgVW5sb2FkUGFnZShwYWdlKTsKK30KKworVEVTVF9GKEZQREZUaHVtYm5haWxFbWJlZGRlclRlc3QsIEdldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2VOdWxsUGFnZSkgeworICBFWFBFQ1RfRVEoMHUsIEZQREZQYWdlX0dldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2UobnVsbHB0ciwgbnVsbHB0ciwgMCkpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwgR2V0UmF3VGh1bWJuYWlsRGF0YUZyb21QYWdlV2l0aEZpbHRlcnMpIHsKKyAgQVNTRVJUX1RSVUUoT3BlbkRvY3VtZW50KCJzaW1wbGVfdGh1bWJuYWlsLnBkZiIpKTsKKworICB7CisgICAgY29uc3QgY2hhciBrSGFzaGVkUmF3RGF0YVtdID0gImY2YThlOGRiMDFjY2NkNTJhYmI5MWVhNDMzYTE3MzczIjsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGtFeHBlY3RlZFNpemUgPSAxODUxdTsKKworICAgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgICAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxlbmd0aF9ieXRlcyA9CisgICAgICAgIEZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwKTsKKyAgICBBU1NFUlRfRVEoa0V4cGVjdGVkU2l6ZSwgbGVuZ3RoX2J5dGVzKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB0aHVtYl9idWYobGVuZ3RoX2J5dGVzKTsKKworICAgIEVYUEVDVF9FUShrRXhwZWN0ZWRTaXplLCBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLCB0aHVtYl9idWYuZGF0YSgpLCBsZW5ndGhfYnl0ZXMpKTsKKyAgICBFWFBFQ1RfRVEoa0hhc2hlZFJhd0RhdGEsCisgICAgICAgICAgICAgIEdlbmVyYXRlTUQ1QmFzZTE2KHRodW1iX2J1Zi5kYXRhKCksIGtFeHBlY3RlZFNpemUpKTsKKworICAgIFVubG9hZFBhZ2UocGFnZSk7CisgIH0KKworICB7CisgICAgY29uc3QgY2hhciBrSGFzaGVkUmF3RGF0YVtdID0gImM3NTU4YTQ2MWQ1ZWNmYjFkNDc1NzIxOGI0NzNhZmMwIjsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGtFeHBlY3RlZFNpemUgPSAxNzkydTsKKworICAgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMSk7CisgICAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxlbmd0aF9ieXRlcyA9CisgICAgICAgIEZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwKTsKKyAgICBBU1NFUlRfRVEoa0V4cGVjdGVkU2l6ZSwgbGVuZ3RoX2J5dGVzKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB0aHVtYl9idWYobGVuZ3RoX2J5dGVzKTsKKworICAgIEVYUEVDVF9FUShrRXhwZWN0ZWRTaXplLCBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLCB0aHVtYl9idWYuZGF0YSgpLCBsZW5ndGhfYnl0ZXMpKTsKKyAgICBFWFBFQ1RfRVEoa0hhc2hlZFJhd0RhdGEsCisgICAgICAgICAgICAgIEdlbmVyYXRlTUQ1QmFzZTE2KHRodW1iX2J1Zi5kYXRhKCksIGtFeHBlY3RlZFNpemUpKTsKKworICAgIFVubG9hZFBhZ2UocGFnZSk7CisgIH0KK30KKworVEVTVF9GKEZQREZUaHVtYm5haWxFbWJlZGRlclRlc3QsIEdldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZVdpdGhOb0ZpbHRlcnMpIHsKKyAgQVNTRVJUX1RSVUUoT3BlbkRvY3VtZW50KCJ0aHVtYm5haWxfd2l0aF9ub19maWx0ZXJzLnBkZiIpKTsKKworICBjb25zdCBjaGFyIGtIYXNoZWRSYXdEYXRhW10gPSAiYjU2OTZlNTg2MzgyYjMzNzM3NDFmOGExZDY1MWNhYjAiOworICBjb25zdCB1bnNpZ25lZCBsb25nIGtFeHBlY3RlZFNpemUgPSAzMDF1OworCisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoX2J5dGVzID0KKyAgICAgIEZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwKTsKKyAgQVNTRVJUX0VRKGtFeHBlY3RlZFNpemUsIGxlbmd0aF9ieXRlcyk7CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRodW1iX2J1ZihsZW5ndGhfYnl0ZXMpOworCisgIEVYUEVDVF9FUShrRXhwZWN0ZWRTaXplLCBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgdGh1bWJfYnVmLmRhdGEoKSwgbGVuZ3RoX2J5dGVzKSk7CisgIEVYUEVDVF9FUShrSGFzaGVkUmF3RGF0YSwgR2VuZXJhdGVNRDVCYXNlMTYodGh1bWJfYnVmLmRhdGEoKSwga0V4cGVjdGVkU2l6ZSkpOworCisgIFVubG9hZFBhZ2UocGFnZSk7Cit9CisKK1RFU1RfRihGUERGVGh1bWJuYWlsRW1iZWRkZXJUZXN0LCBHZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2VXaXRoTm9UaHVtYm5haWxzKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiaGVsbG9fd29ybGQucGRmIikpOworCisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgIEVYUEVDVF9FUSgwdSwgRlBERlBhZ2VfR2V0UmF3VGh1bWJuYWlsRGF0YUZyb21QYWdlKHBhZ2UsIG51bGxwdHIsIDApKTsKKworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwgR2V0UmF3VGh1bWJuYWlsRGF0YUZyb21QYWdlTnVsbFBhZ2UpIHsKKyAgRVhQRUNUX0VRKDB1LCBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UobnVsbHB0ciwgbnVsbHB0ciwgMCkpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwgR2V0VGh1bWJuYWlsQXNCaXRtYXBGcm9tUGFnZSkgeworICBBU1NFUlRfVFJVRShPcGVuRG9jdW1lbnQoInNpbXBsZV90aHVtYm5haWwucGRmIikpOworCisgIHsKKyAgICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICAgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgICAgU2NvcGVkRlBERkJpdG1hcCB0aHVtYl9iaXRtYXAoRlBERlBhZ2VfR2V0VGh1bWJuYWlsQXNCaXRtYXBGcm9tUGFnZShwYWdlKSk7CisKKyAgICBFWFBFQ1RfRVEoNTAsIEZQREZCaXRtYXBfR2V0V2lkdGgodGh1bWJfYml0bWFwLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKDUwLCBGUERGQml0bWFwX0dldEhlaWdodCh0aHVtYl9iaXRtYXAuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfRVEoRlBERkJpdG1hcF9CR1IsIEZQREZCaXRtYXBfR2V0Rm9ybWF0KHRodW1iX2JpdG1hcC5nZXQoKSkpOworICAgIENvbXBhcmVCaXRtYXAodGh1bWJfYml0bWFwLmdldCgpLCA1MCwgNTAsCisgICAgICAgICAgICAgICAgICAiMzEyYTE1NjM4OTQ3MGMzYzY5NDM1ZjgzNmUzNzBhNDUiKTsKKworICAgIFVubG9hZFBhZ2UocGFnZSk7CisgIH0KKworICB7CisgICAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgxKTsKKyAgICBBU1NFUlRfVFJVRShwYWdlKTsKKworICAgIFNjb3BlZEZQREZCaXRtYXAgdGh1bWJfYml0bWFwKEZQREZQYWdlX0dldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2UocGFnZSkpOworCisgICAgRVhQRUNUX0VRKDUwLCBGUERGQml0bWFwX0dldFdpZHRoKHRodW1iX2JpdG1hcC5nZXQoKSkpOworICAgIEVYUEVDVF9FUSg1MCwgRlBERkJpdG1hcF9HZXRIZWlnaHQodGh1bWJfYml0bWFwLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKEZQREZCaXRtYXBfQkdSLCBGUERGQml0bWFwX0dldEZvcm1hdCh0aHVtYl9iaXRtYXAuZ2V0KCkpKTsKKyAgICBDb21wYXJlQml0bWFwKHRodW1iX2JpdG1hcC5nZXQoKSwgNTAsIDUwLAorICAgICAgICAgICAgICAgICAgImQ4MzFkYzQzYzZkNWFmODJjYjdhOTM2ZGQzMTdmODJmIik7CisKKyAgICBVbmxvYWRQYWdlKHBhZ2UpOworICB9Cit9CisKK1RFU1RfRihGUERGVGh1bWJuYWlsRW1iZWRkZXJUZXN0LAorICAgICAgIEdldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2VXaXRob3V0VGh1bWJuYWlsKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiaGVsbG9fd29ybGQucGRmIikpOworCisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgIFNjb3BlZEZQREZCaXRtYXAgdGh1bWJfYml0bWFwKEZQREZQYWdlX0dldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2UocGFnZSkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgdGh1bWJfYml0bWFwLmdldCgpKTsKKworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwKKyAgICAgICBHZXRUaHVtYm5haWxBc0JpdG1hcEZyb21UaHVtYm5haWxXaXRoRW1wdHlTdHJlYW0pIHsKKyAgQVNTRVJUX1RSVUUoT3BlbkRvY3VtZW50KCJ0aHVtYm5haWxfd2l0aF9lbXB0eV9zdHJlYW0ucGRmIikpOworCisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgIFNjb3BlZEZQREZCaXRtYXAgdGh1bWJfYml0bWFwKEZQREZQYWdlX0dldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2UocGFnZSkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgdGh1bWJfYml0bWFwLmdldCgpKTsKKworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwKKyAgICAgICBHZXRUaHVtYm5haWxBc0JpdG1hcEZyb21UaHVtYm5haWxXaXRoTm9GaWx0ZXJzKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgidGh1bWJuYWlsX3dpdGhfbm9fZmlsdGVycy5wZGYiKSk7CisKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgU2NvcGVkRlBERkJpdG1hcCB0aHVtYl9iaXRtYXAoRlBERlBhZ2VfR2V0VGh1bWJuYWlsQXNCaXRtYXBGcm9tUGFnZShwYWdlKSk7CisKKyAgRVhQRUNUX0VRKDEwLCBGUERGQml0bWFwX0dldFdpZHRoKHRodW1iX2JpdG1hcC5nZXQoKSkpOworICBFWFBFQ1RfRVEoMTAsIEZQREZCaXRtYXBfR2V0SGVpZ2h0KHRodW1iX2JpdG1hcC5nZXQoKSkpOworICBFWFBFQ1RfRVEoRlBERkJpdG1hcF9CR1IsIEZQREZCaXRtYXBfR2V0Rm9ybWF0KHRodW1iX2JpdG1hcC5nZXQoKSkpOworICBDb21wYXJlQml0bWFwKHRodW1iX2JpdG1hcC5nZXQoKSwgMTAsIDEwLCAiMjA0Mjg3NzZkNDBjMzk4ZDQ0YTVjMDlmY2Q1Nzk4NmQiKTsKKworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwgR2V0VGh1bWJuYWlsRG9lc05vdEFsdGVyUGFnZSkgeworICBBU1NFUlRfVFJVRShPcGVuRG9jdW1lbnQoInNpbXBsZV90aHVtYm5haWwucGRmIikpOworCisgIGNvbnN0IGNoYXIga0hhc2hlZFJhd0RhdGFbXSA9ICJmNmE4ZThkYjAxY2NjZDUyYWJiOTFlYTQzM2ExNzM3MyI7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcga0V4cGVjdGVkUmF3U2l6ZSA9IDE4NTF1OworCisgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CisgIEFTU0VSVF9UUlVFKHBhZ2UpOworCisgIC8vIEdldCB0aGUgcmF3IGRhdGEKKyAgdW5zaWduZWQgbG9uZyByYXdfc2l6ZSA9CisgICAgICBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UocGFnZSwgbnVsbHB0ciwgMCk7CisgIEFTU0VSVF9FUShrRXhwZWN0ZWRSYXdTaXplLCByYXdfc2l6ZSk7CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHJhd190aHVtYl9idWYocmF3X3NpemUpOworCisgIEVYUEVDVF9FUShrRXhwZWN0ZWRSYXdTaXplLCBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgcmF3X3RodW1iX2J1Zi5kYXRhKCksIHJhd19zaXplKSk7CisgIEVYUEVDVF9FUShrSGFzaGVkUmF3RGF0YSwKKyAgICAgICAgICAgIEdlbmVyYXRlTUQ1QmFzZTE2KHJhd190aHVtYl9idWYuZGF0YSgpLCBrRXhwZWN0ZWRSYXdTaXplKSk7CisKKyAgLy8gR2V0IHRoZSB0aHVtYm5haWwKKyAgU2NvcGVkRlBERkJpdG1hcCB0aHVtYl9iaXRtYXAoRlBERlBhZ2VfR2V0VGh1bWJuYWlsQXNCaXRtYXBGcm9tUGFnZShwYWdlKSk7CisKKyAgRVhQRUNUX0VRKDUwLCBGUERGQml0bWFwX0dldFdpZHRoKHRodW1iX2JpdG1hcC5nZXQoKSkpOworICBFWFBFQ1RfRVEoNTAsIEZQREZCaXRtYXBfR2V0SGVpZ2h0KHRodW1iX2JpdG1hcC5nZXQoKSkpOworICBFWFBFQ1RfRVEoRlBERkJpdG1hcF9CR1IsIEZQREZCaXRtYXBfR2V0Rm9ybWF0KHRodW1iX2JpdG1hcC5nZXQoKSkpOworICBDb21wYXJlQml0bWFwKHRodW1iX2JpdG1hcC5nZXQoKSwgNTAsIDUwLCAiMzEyYTE1NjM4OTQ3MGMzYzY5NDM1ZjgzNmUzNzBhNDUiKTsKKworICAvLyBHZXQgdGhlIHJhdyBkYXRhIGFnYWluCisgIHVuc2lnbmVkIGxvbmcgbmV3X3Jhd19zaXplID0KKyAgICAgIEZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwKTsKKyAgQVNTRVJUX0VRKGtFeHBlY3RlZFJhd1NpemUsIG5ld19yYXdfc2l6ZSk7CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IG5ld19yYXdfdGh1bWJfYnVmKG5ld19yYXdfc2l6ZSk7CisKKyAgRVhQRUNUX0VRKGtFeHBlY3RlZFJhd1NpemUsCisgICAgICAgICAgICBGUERGUGFnZV9HZXRSYXdUaHVtYm5haWxEYXRhRnJvbVBhZ2UocGFnZSwgbmV3X3Jhd190aHVtYl9idWYuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yYXdfc2l6ZSkpOworICBFWFBFQ1RfRVEoa0hhc2hlZFJhd0RhdGEsCisgICAgICAgICAgICBHZW5lcmF0ZU1ENUJhc2UxNihuZXdfcmF3X3RodW1iX2J1Zi5kYXRhKCksIGtFeHBlY3RlZFJhd1NpemUpKTsKKworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCitURVNUX0YoRlBERlRodW1ibmFpbEVtYmVkZGVyVGVzdCwgR2V0VGh1bWJuYWlsQXNCaXRtYXBGcm9tUGFnZU51bGxQYWdlKSB7CisgIEVYUEVDVF9FUShudWxscHRyLCBGUERGUGFnZV9HZXRUaHVtYm5haWxBc0JpdG1hcEZyb21QYWdlKG51bGxwdHIpKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYyBiL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYwppbmRleCBiNzc2YzEwLi4zMmJiMThkIDEwMDY0NAotLS0gYS9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMKKysrIGIvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAicHVibGljL2ZwZGZfc3RydWN0dHJlZS5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmX3N5c2ZvbnRpbmZvLmgiCiAjaW5jbHVkZSAicHVibGljL2ZwZGZfdGV4dC5oIgorI2luY2x1ZGUgInB1YmxpYy9mcGRmX3RodW1ibmFpbC5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmX3RyYW5zZm9ybXBhZ2UuaCIKICNpbmNsdWRlICJwdWJsaWMvZnBkZnZpZXcuaCIKIApAQCAtMzMzLDYgKzMzNCwxMSBAQAogICAgIENISyhGUERGVGV4dF9HZXRVbmljb2RlKTsKICAgICBDSEsoRlBERlRleHRfTG9hZFBhZ2UpOwogCisgICAgLy8gZnBkZl90aHVtYm5haWwuaAorICAgIENISyhGUERGUGFnZV9HZXREZWNvZGVkVGh1bWJuYWlsRGF0YUZyb21QYWdlKTsKKyAgICBDSEsoRlBERlBhZ2VfR2V0UmF3VGh1bWJuYWlsRGF0YUZyb21QYWdlKTsKKyAgICBDSEsoRlBERlBhZ2VfR2V0VGh1bWJuYWlsQXNCaXRtYXBGcm9tUGFnZSk7CisKICAgICAvLyBmcGRmX3RyYW5zZm9ybXBhZ2UuaAogICAgIENISyhGUERGUGFnZU9ial9UcmFuc2Zvcm1DbGlwUGF0aCk7CiAgICAgQ0hLKEZQREZQYWdlX0dldEFydEJveCk7CmRpZmYgLS1naXQgYS9wdWJsaWMvZnBkZl90aHVtYm5haWwuaCBiL3B1YmxpYy9mcGRmX3RodW1ibmFpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWQ4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9wdWJsaWMvZnBkZl90aHVtYm5haWwuaApAQCAtMCwwICsxLDU5IEBACisvLyBDb3B5cmlnaHQgMjAxOSBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgUFVCTElDX0ZQREZfVEhVTUJOQUlMX0hfCisjZGVmaW5lIFBVQkxJQ19GUERGX1RIVU1CTkFJTF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8vIE5PTElOVE5FWFRMSU5FKGJ1aWxkL2luY2x1ZGUpCisjaW5jbHVkZSAiZnBkZnZpZXcuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gR2V0cyB0aGUgZGVjb2RlZCBkYXRhIGZyb20gdGhlIHRodW1ibmFpbCBvZiB8cGFnZXwgaWYgaXQgZXhpc3RzLgorLy8gVGhpcyBvbmx5IG1vZGlmaWVzIHxidWZmZXJ8IGlmIHxidWZsZW58IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKy8vIHNpemUgb2YgdGhlIGRlY29kZWQgZGF0YS4gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGVjb2RlZAorLy8gZGF0YSBvciAwIGlmIHRodW1ibmFpbCBETkUuIE9wdGlvbmFsLCBwYXNzIG51bGwgdG8ganVzdCByZXRyaWV2ZQorLy8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBuZWVkZWQuCisvLworLy8gICBwYWdlICAgIC0gaGFuZGxlIHRvIGEgcGFnZS4KKy8vICAgYnVmZmVyICAtIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLgorLy8gICBidWZsZW4gIC0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCitGUERGX0VYUE9SVCB1bnNpZ25lZCBsb25nIEZQREZfQ0FMTENPTlYKK0ZQREZQYWdlX0dldERlY29kZWRUaHVtYm5haWxEYXRhRnJvbVBhZ2UoRlBERl9QQUdFIHBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBidWZsZW4pOworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gR2V0cyB0aGUgcmF3IGRhdGEgZnJvbSB0aGUgdGh1bWJuYWlsIG9mIHxwYWdlfCBpZiBpdCBleGlzdHMuCisvLyBUaGlzIG9ubHkgbW9kaWZpZXMgfGJ1ZmZlcnwgaWYgfGJ1ZmxlbnwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCisvLyB0aGUgc2l6ZSBvZiB0aGUgcmF3IGRhdGEuIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJhdyBkYXRhIG9yIDAKKy8vIGlmIHRodW1ibmFpbCBETkUuIE9wdGlvbmFsLCBwYXNzIG51bGwgdG8ganVzdCByZXRyaWV2ZSB0aGUgc2l6ZQorLy8gb2YgdGhlIGJ1ZmZlciBuZWVkZWQuCisvLworLy8gICBwYWdlICAgIC0gaGFuZGxlIHRvIGEgcGFnZS4KKy8vICAgYnVmZmVyICAtIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgcmF3IGltYWdlIGRhdGEuCisvLyAgIGJ1ZmxlbiAgLSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KK0ZQREZfRVhQT1JUIHVuc2lnbmVkIGxvbmcgRlBERl9DQUxMQ09OVgorRlBERlBhZ2VfR2V0UmF3VGh1bWJuYWlsRGF0YUZyb21QYWdlKEZQREZfUEFHRSBwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJ1Zmxlbik7CisKKy8vIEV4cGVyaW1lbnRhbCBBUEkuCisvLyBSZXR1cm5zIHRoZSB0aHVtYm5haWwgb2YgfHBhZ2V8IGFzIGEgRlBERl9CSVRNQVAuIFJldHVybnMgYSBudWxscHRyCisvLyBpZiB1bmFibGUgdG8gYWNjZXNzIHRoZSB0aHVtYm5haWwncyBzdHJlYW0uCisvLworLy8gICBwYWdlIC0gaGFuZGxlIHRvIGEgcGFnZS4KK0ZQREZfRVhQT1JUIEZQREZfQklUTUFQIEZQREZfQ0FMTENPTlYKK0ZQREZQYWdlX0dldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2UoRlBERl9QQUdFIHBhZ2UpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8vIFBVQkxJQ19GUERGX1RIVU1CTkFJTF9IXwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9wZGZpdW1fdGVzdC5jYyBiL3NhbXBsZXMvcGRmaXVtX3Rlc3QuY2MKaW5kZXggYjJlMDczZC4uMGZkNzMyNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9wZGZpdW1fdGVzdC5jYworKysgYi9zYW1wbGVzL3BkZml1bV90ZXN0LmNjCkBAIC0xMDIsNiArMTAyLDkgQEAKICAgYm9vbCByZW5kZXJfb25lc2hvdCA9IGZhbHNlOwogICBib29sIHNhdmVfYXR0YWNobWVudHMgPSBmYWxzZTsKICAgYm9vbCBzYXZlX2ltYWdlcyA9IGZhbHNlOworICBib29sIHNhdmVfdGh1bWJuYWlscyA9IGZhbHNlOworICBib29sIHNhdmVfdGh1bWJuYWlsc19kZWNvZGVkID0gZmFsc2U7CisgIGJvb2wgc2F2ZV90aHVtYm5haWxzX3JhdyA9IGZhbHNlOwogI2lmZGVmIFBERl9FTkFCTEVfVjgKICAgYm9vbCBkaXNhYmxlX2phdmFzY3JpcHQgPSBmYWxzZTsKICNpZmRlZiBQREZfRU5BQkxFX1hGQQpAQCAtMzQ2LDYgKzM0OSwxMiBAQAogICAgICAgb3B0aW9ucy0+c2F2ZV9hdHRhY2htZW50cyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChjdXJfYXJnID09ICItLXNhdmUtaW1hZ2VzIikgewogICAgICAgb3B0aW9ucy0+c2F2ZV9pbWFnZXMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoY3VyX2FyZyA9PSAiLS1zYXZlLXRodW1icyIpIHsKKyAgICAgIG9wdGlvbnMtPnNhdmVfdGh1bWJuYWlscyA9IHRydWU7CisgICAgfSBlbHNlIGlmIChjdXJfYXJnID09ICItLXNhdmUtdGh1bWJzLWRlYyIpIHsKKyAgICAgIG9wdGlvbnMtPnNhdmVfdGh1bWJuYWlsc19kZWNvZGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGN1cl9hcmcgPT0gIi0tc2F2ZS10aHVtYnMtcmF3IikgeworICAgICAgb3B0aW9ucy0+c2F2ZV90aHVtYm5haWxzX3JhdyA9IHRydWU7CiAjaWZkZWYgUERGX0VOQUJMRV9WOAogICAgIH0gZWxzZSBpZiAoY3VyX2FyZyA9PSAiLS1kaXNhYmxlLWphdmFzY3JpcHQiKSB7CiAgICAgICBvcHRpb25zLT5kaXNhYmxlX2phdmFzY3JpcHQgPSB0cnVlOwpAQCAtNjAzLDcgKzYxMiwxMiBAQAogICAgIFNlbmRQYWdlRXZlbnRzKGZvcm0sIHBhZ2UsIGV2ZW50cyk7CiAgIGlmIChvcHRpb25zLnNhdmVfaW1hZ2VzKQogICAgIFdyaXRlSW1hZ2VzKHBhZ2UsIG5hbWUuY19zdHIoKSwgcGFnZV9pbmRleCk7Ci0KKyAgaWYgKG9wdGlvbnMuc2F2ZV90aHVtYm5haWxzKQorICAgIFdyaXRlVGh1bWJuYWlsKHBhZ2UsIG5hbWUuY19zdHIoKSwgcGFnZV9pbmRleCk7CisgIGlmIChvcHRpb25zLnNhdmVfdGh1bWJuYWlsc19kZWNvZGVkKQorICAgIFdyaXRlRGVjb2RlZFRodW1ibmFpbFN0cmVhbShwYWdlLCBuYW1lLmNfc3RyKCksIHBhZ2VfaW5kZXgpOworICBpZiAob3B0aW9ucy5zYXZlX3RodW1ibmFpbHNfcmF3KQorICAgIFdyaXRlUmF3VGh1bWJuYWlsU3RyZWFtKHBhZ2UsIG5hbWUuY19zdHIoKSwgcGFnZV9pbmRleCk7CiAgIGlmIChvcHRpb25zLm91dHB1dF9mb3JtYXQgPT0gT1VUUFVUX1BBR0VJTkZPKSB7CiAgICAgRHVtcFBhZ2VJbmZvKHBhZ2UsIHBhZ2VfaW5kZXgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtOTAzLDYgKzkxNywxMiBAQAogICAgICI8cGRmLW5hbWU+LmF0dGFjaG1lbnQuPGF0dGFjaG1lbnQtbmFtZT5cbiIKICAgICAiICAtLXNhdmUtaW1hZ2VzICAgICAgICAtIHdyaXRlIGVtYmVkZGVkIGltYWdlcyAiCiAgICAgIjxwZGYtbmFtZT4uPHBhZ2UtbnVtYmVyPi48b2JqZWN0LW51bWJlcj4ucG5nXG4iCisgICAgIiAgLS1zYXZlLXRodW1icyAgICAgICAgLSB3cml0ZSBwYWdlIHRodW1ibmFpbHMgIgorICAgICI8cGRmLW5hbWU+LnRodW1ibmFpbC48cGFnZS1udW1iZXI+LnBuZ1xuIgorICAgICIgIC0tc2F2ZS10aHVtYnMtZGVjICAgIC0gd3JpdGUgcGFnZSB0aHVtYm5haWxzJyBkZWNvZGVkIHN0cmVhbSBkYXRhIgorICAgICI8cGRmLW5hbWU+LnRodW1ibmFpbC5kZWNvZGVkLjxwYWdlLW51bWJlcj4ucG5nXG4iCisgICAgIiAgLS1zYXZlLXRodW1icy1yYXcgICAgLSB3cml0ZSBwYWdlIHRodW1ibmFpbHMnIHJhdyBzdHJlYW0gZGF0YSIKKyAgICAiPHBkZi1uYW1lPi50aHVtYm5haWwucmF3LjxwYWdlLW51bWJlcj4ucG5nXG4iCiAjaWZkZWYgUERGX0VOQUJMRV9WOAogICAgICIgIC0tZGlzYWJsZS1qYXZhc2NyaXB0IC0gZG8gbm90IGV4ZWN1dGUgSlMgaW4gUERGIGZpbGVzXG4iCiAjaWZkZWYgUERGX0VOQUJMRV9YRkEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcGRmaXVtX3Rlc3Rfd3JpdGVfaGVscGVyLmNjIGIvc2FtcGxlcy9wZGZpdW1fdGVzdF93cml0ZV9oZWxwZXIuY2MKaW5kZXggYzZmNjMwYS4uN2RkYTU0OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9wZGZpdW1fdGVzdF93cml0ZV9oZWxwZXIuY2MKKysrIGIvc2FtcGxlcy9wZGZpdW1fdGVzdF93cml0ZV9oZWxwZXIuY2MKQEAgLTcsMTIgKzcsMTUgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJwdWJsaWMvY3BwL2ZwZGZfc2NvcGVycy5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmX2Fubm90LmgiCiAjaW5jbHVkZSAicHVibGljL2ZwZGZfYXR0YWNobWVudC5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmX2VkaXQuaCIKKyNpbmNsdWRlICJwdWJsaWMvZnBkZl90aHVtYm5haWwuaCIKICNpbmNsdWRlICJ0ZXN0aW5nL2Z4X3N0cmluZ190ZXN0aGVscGVycy5oIgogI2luY2x1ZGUgInRlc3RpbmcvaW1hZ2VfZGlmZi9pbWFnZV9kaWZmX3BuZy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Jhc2UvbG9nZ2luZy5oIgpAQCAtNTM1LDYgKzUzOCwzNyBAQAogfQogI2VuZGlmCiAKK2VudW0gY2xhc3MgVGh1bWJuYWlsRGVjb2RlVHlwZSB7IGtCaXRtYXAsIGtSYXdTdHJlYW0sIGtEZWNvZGVkU3RyZWFtIH07CisKK2Jvb2wgR2V0VGh1bWJuYWlsRmlsZW5hbWUoY2hhciogbmFtZV9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX2J1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwZGZfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZ2VfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVtYm5haWxEZWNvZGVUeXBlIGRlY29kZV90eXBlKSB7CisgIGNvbnN0IGNoYXIqIGZvcm1hdDsKKyAgc3dpdGNoIChkZWNvZGVfdHlwZSkgeworICAgIGNhc2UgVGh1bWJuYWlsRGVjb2RlVHlwZTo6a0JpdG1hcDoKKyAgICAgIGZvcm1hdCA9ICIlcy50aHVtYm5haWwuJWQucG5nIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVGh1bWJuYWlsRGVjb2RlVHlwZTo6a0RlY29kZWRTdHJlYW06CisgICAgICBmb3JtYXQgPSAiJXMudGh1bWJuYWlsLmRlY29kZWQuJWQuYmluIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVGh1bWJuYWlsRGVjb2RlVHlwZTo6a1Jhd1N0cmVhbToKKyAgICAgIGZvcm1hdCA9ICIlcy50aHVtYm5haWwucmF3LiVkLmJpbiI7CisgICAgICBicmVhazsKKyAgfQorCisgIGludCBjaGFyc19mb3JtYXR0ZWQgPQorICAgICAgc25wcmludGYobmFtZV9idWYsIG5hbWVfYnVmX3NpemUsIGZvcm1hdCwgcGRmX25hbWUsIHBhZ2VfbnVtKTsKKyAgaWYgKGNoYXJzX2Zvcm1hdHRlZCA8IDAgfHwKKyAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oY2hhcnNfZm9ybWF0dGVkKSA+PSBuYW1lX2J1Zl9zaXplKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJGaWxlbmFtZSAlcyBmb3Igc2F2aW5nIGlzIHRvbyBsb25nLlxuIiwgbmFtZV9idWYpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFdyaXRlQnVmZmVyVG9GaWxlKGNvbnN0IHZvaWQqIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCkBAIC01NTMsNiArNTg3LDIzIEBACiAgIGZjbG9zZShmcCk7CiB9CiAKK3N0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IEVuY29kZUJpdG1hcFRvUG5nKFNjb3BlZEZQREZCaXRtYXAgYml0bWFwKSB7CisgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ19lbmNvZGluZzsKKyAgaW50IGZvcm1hdCA9IEZQREZCaXRtYXBfR2V0Rm9ybWF0KGJpdG1hcC5nZXQoKSk7CisgIGlmIChmb3JtYXQgPT0gRlBERkJpdG1hcF9Vbmtub3duKQorICAgIHJldHVybiBwbmdfZW5jb2Rpbmc7CisKKyAgY29uc3QgdW5zaWduZWQgY2hhciogYnVmZmVyID0KKyAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihGUERGQml0bWFwX0dldEJ1ZmZlcihiaXRtYXAuZ2V0KCkpKTsKKworICBpbnQgd2lkdGggPSBGUERGQml0bWFwX0dldFdpZHRoKGJpdG1hcC5nZXQoKSk7CisgIGludCBoZWlnaHQgPSBGUERGQml0bWFwX0dldEhlaWdodChiaXRtYXAuZ2V0KCkpOworICBpbnQgc3RyaWRlID0gRlBERkJpdG1hcF9HZXRTdHJpZGUoYml0bWFwLmdldCgpKTsKKworICBwbmdfZW5jb2RpbmcgPSBFbmNvZGVQbmcoYnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIGZvcm1hdCk7CisgIHJldHVybiBwbmdfZW5jb2Rpbmc7Cit9CisKIHZvaWQgV3JpdGVBdHRhY2htZW50cyhGUERGX0RPQ1VNRU5UIGRvYywgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGUERGRG9jX0dldEF0dGFjaG1lbnRDb3VudChkb2MpOyArK2kpIHsKICAgICBGUERGX0FUVEFDSE1FTlQgYXR0YWNobWVudCA9IEZQREZEb2NfR2V0QXR0YWNobWVudChkb2MsIGkpOwpAQCAtNjE1LDI5ICs2NjYsNiBAQAogICAgICAgY29udGludWU7CiAgICAgfQogCi0gICAgaW50IGZvcm1hdCA9IEZQREZCaXRtYXBfR2V0Rm9ybWF0KGJpdG1hcC5nZXQoKSk7Ci0gICAgaWYgKGZvcm1hdCA9PSBGUERGQml0bWFwX1Vua25vd24pIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAiSW1hZ2Ugb2JqZWN0ICMlZCBvbiBwYWdlICMlZCBoYXMgYSBiaXRtYXAgb2YgdW5rbm93biBmb3JtYXQuXG4iLAotICAgICAgICAgICAgICBpICsgMSwgcGFnZV9udW0gKyAxKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihGUERGQml0bWFwX0dldEJ1ZmZlcihiaXRtYXAuZ2V0KCkpKTsKLSAgICBpbnQgd2lkdGggPSBGUERGQml0bWFwX0dldFdpZHRoKGJpdG1hcC5nZXQoKSk7Ci0gICAgaW50IGhlaWdodCA9IEZQREZCaXRtYXBfR2V0SGVpZ2h0KGJpdG1hcC5nZXQoKSk7Ci0gICAgaW50IHN0cmlkZSA9IEZQREZCaXRtYXBfR2V0U3RyaWRlKGJpdG1hcC5nZXQoKSk7Ci0KLSAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdfZW5jb2RpbmcgPQotICAgICAgICBFbmNvZGVQbmcoYnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIGZvcm1hdCk7Ci0gICAgaWYgKHBuZ19lbmNvZGluZy5lbXB0eSgpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb252ZXJ0IGltYWdlIG9iamVjdCAjJWQgb24gcGFnZSAjJWQgdG8gcG5nLlxuIiwgaSArIDEsCi0gICAgICAgICAgICAgIHBhZ2VfbnVtICsgMSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KICAgICBjaGFyIGZpbGVuYW1lWzI1Nl07CiAgICAgaW50IGNoYXJzX2Zvcm1hdHRlZCA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuJWQuJWQucG5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmX25hbWUsIHBhZ2VfbnVtLCBpKTsKQEAgLTY0Nyw3ICs2NzUsMTAxIEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdfZW5jb2RpbmcgPQorICAgICAgICBFbmNvZGVCaXRtYXBUb1BuZyhzdGQ6Om1vdmUoYml0bWFwKSk7CisgICAgaWYgKHBuZ19lbmNvZGluZy5lbXB0eSgpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb252ZXJ0IGltYWdlIG9iamVjdCAjJWQsIG9uIHBhZ2UgIyVkIHRvIHBuZy5cbiIsCisgICAgICAgICAgICAgIGkgKyAxLCBwYWdlX251bSArIDEpOworICAgICAgY29udGludWU7CisgICAgfQorCiAgICAgV3JpdGVCdWZmZXJUb0ZpbGUoJnBuZ19lbmNvZGluZy5mcm9udCgpLCBwbmdfZW5jb2Rpbmcuc2l6ZSgpLCBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAiaW1hZ2UiKTsKICAgfQogfQorCit2b2lkIFdyaXRlRGVjb2RlZFRodW1ibmFpbFN0cmVhbShGUERGX1BBR0UgcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBkZl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZ2VfbnVtKSB7CisgIGNoYXIgZmlsZW5hbWVbMjU2XTsKKyAgaWYgKCFHZXRUaHVtYm5haWxGaWxlbmFtZShmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgcGRmX25hbWUsIHBhZ2VfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodW1ibmFpbERlY29kZVR5cGU6OmtEZWNvZGVkU3RyZWFtKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHVuc2lnbmVkIGxvbmcgZGVjb2RlZF9kYXRhX3NpemUgPQorICAgICAgRlBERlBhZ2VfR2V0RGVjb2RlZFRodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwdSk7CisKKyAgLy8gT25seSBjb250aW51ZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHRodW1ibmFpbCBmb3IgdGhpcyBwYWdlCisgIGlmIChkZWNvZGVkX2RhdGFfc2l6ZSA9PSAwKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0IGRlY29kZWQgdGh1bWJuYWlsIGZvciBwYWdlICMlZC5cbiIsCisgICAgICAgICAgICBwYWdlX251bSArIDEpOworICAgIHJldHVybjsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRodW1iX2J1ZihkZWNvZGVkX2RhdGFfc2l6ZSk7CisgIGlmIChGUERGUGFnZV9HZXREZWNvZGVkVGh1bWJuYWlsRGF0YUZyb21QYWdlKAorICAgICAgICAgIHBhZ2UsIHRodW1iX2J1Zi5kYXRhKCksIGRlY29kZWRfZGF0YV9zaXplKSAhPSBkZWNvZGVkX2RhdGFfc2l6ZSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGdldCBkZWNvZGVkIHRodW1ibmFpbCBkYXRhIGZvciAlcy5cbiIsIGZpbGVuYW1lKTsKKyAgICByZXR1cm47CisgIH0KKworICBXcml0ZUJ1ZmZlclRvRmlsZSh0aHVtYl9idWYuZGF0YSgpLCBkZWNvZGVkX2RhdGFfc2l6ZSwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICJkZWNvZGVkIHRodW1ibmFpbCIpOworfQorCit2b2lkIFdyaXRlUmF3VGh1bWJuYWlsU3RyZWFtKEZQREZfUEFHRSBwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwZGZfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZ2VfbnVtKSB7CisgIGNoYXIgZmlsZW5hbWVbMjU2XTsKKyAgaWYgKCFHZXRUaHVtYm5haWxGaWxlbmFtZShmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgcGRmX25hbWUsIHBhZ2VfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodW1ibmFpbERlY29kZVR5cGU6OmtSYXdTdHJlYW0pKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgdW5zaWduZWQgbG9uZyByYXdfZGF0YV9zaXplID0KKyAgICAgIEZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCBudWxscHRyLCAwdSk7CisKKyAgLy8gT25seSBjb250aW51ZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHRodW1ibmFpbCBmb3IgdGhpcyBwYWdlCisgIGlmIChyYXdfZGF0YV9zaXplID09IDApIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBnZXQgcmF3IHRodW1ibmFpbCBkYXRhIGZvciBwYWdlICMlZC5cbiIsCisgICAgICAgICAgICBwYWdlX251bSArIDEpOworICAgIHJldHVybjsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRodW1iX2J1ZihyYXdfZGF0YV9zaXplKTsKKyAgaWYgKEZQREZQYWdlX0dldFJhd1RodW1ibmFpbERhdGFGcm9tUGFnZShwYWdlLCB0aHVtYl9idWYuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19kYXRhX3NpemUpICE9IHJhd19kYXRhX3NpemUpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBnZXQgcmF3IHRodW1ibmFpbCBkYXRhIGZvciAlcy5cbiIsIGZpbGVuYW1lKTsKKyAgICByZXR1cm47CisgIH0KKworICBXcml0ZUJ1ZmZlclRvRmlsZSh0aHVtYl9idWYuZGF0YSgpLCByYXdfZGF0YV9zaXplLCBmaWxlbmFtZSwgInJhdyB0aHVtYm5haWwiKTsKK30KKwordm9pZCBXcml0ZVRodW1ibmFpbChGUERGX1BBR0UgcGFnZSwgY29uc3QgY2hhciogcGRmX25hbWUsIGludCBwYWdlX251bSkgeworICBjaGFyIGZpbGVuYW1lWzI1Nl07CisgIGlmICghR2V0VGh1bWJuYWlsRmlsZW5hbWUoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksIHBkZl9uYW1lLCBwYWdlX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVtYm5haWxEZWNvZGVUeXBlOjprQml0bWFwKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIFNjb3BlZEZQREZCaXRtYXAgdGh1bWJfYml0bWFwKEZQREZQYWdlX0dldFRodW1ibmFpbEFzQml0bWFwRnJvbVBhZ2UocGFnZSkpOworICBpZiAoIXRodW1iX2JpdG1hcCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiVGh1bWJuYWlsIG9mIHBhZ2UgIyVkIGhhcyBhbiBlbXB0eSBiaXRtYXAuXG4iLAorICAgICAgICAgICAgcGFnZV9udW0gKyAxKTsKKyAgICByZXR1cm47CisgIH0KKworICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdfZW5jb2RpbmcgPQorICAgICAgRW5jb2RlQml0bWFwVG9Qbmcoc3RkOjptb3ZlKHRodW1iX2JpdG1hcCkpOworICBpZiAocG5nX2VuY29kaW5nLmVtcHR5KCkpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjb252ZXJ0IHRodW1ibmFpbCBvZiBwYWdlICMlZCB0byBwbmcuXG4iLAorICAgICAgICAgICAgcGFnZV9udW0gKyAxKTsKKyAgICByZXR1cm47CisgIH0KKworICBXcml0ZUJ1ZmZlclRvRmlsZSgmcG5nX2VuY29kaW5nLmZyb250KCksIHBuZ19lbmNvZGluZy5zaXplKCksIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAidGh1bWJuYWlsIik7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL3BkZml1bV90ZXN0X3dyaXRlX2hlbHBlci5oIGIvc2FtcGxlcy9wZGZpdW1fdGVzdF93cml0ZV9oZWxwZXIuaAppbmRleCBlYjJhNmM2Li5mNDRjMmU3IDEwMDY0NAotLS0gYS9zYW1wbGVzL3BkZml1bV90ZXN0X3dyaXRlX2hlbHBlci5oCisrKyBiL3NhbXBsZXMvcGRmaXVtX3Rlc3Rfd3JpdGVfaGVscGVyLmgKQEAgLTQ4LDUgKzQ4LDEyIEBACiAKIHZvaWQgV3JpdGVBdHRhY2htZW50cyhGUERGX0RPQ1VNRU5UIGRvYywgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogdm9pZCBXcml0ZUltYWdlcyhGUERGX1BBR0UgcGFnZSwgY29uc3QgY2hhciogcGRmX25hbWUsIGludCBwYWdlX251bSk7Cit2b2lkIFdyaXRlRGVjb2RlZFRodW1ibmFpbFN0cmVhbShGUERGX1BBR0UgcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBkZl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZ2VfbnVtKTsKK3ZvaWQgV3JpdGVSYXdUaHVtYm5haWxTdHJlYW0oRlBERl9QQUdFIHBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBkZl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFnZV9udW0pOwordm9pZCBXcml0ZVRodW1ibmFpbChGUERGX1BBR0UgcGFnZSwgY29uc3QgY2hhciogcGRmX25hbWUsIGludCBwYWdlX251bSk7CiAKICNlbmRpZiAgLy8gU0FNUExFU19QREZJVU1fVEVTVF9XUklURV9IRUxQRVJfSF8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL3NpbXBsZV90aHVtYm5haWwuaW4gYi90ZXN0aW5nL3Jlc291cmNlcy9zaW1wbGVfdGh1bWJuYWlsLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGIwOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9zaW1wbGVfdGh1bWJuYWlsLmluCkBAIC0wLDAgKzEsMTE1IEBACit7e2hlYWRlcn19Cit7e29iamVjdCAxIDB9fSA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCisgIC9Db3VudCAyCisgIC9LaWRzIFsKKyAgICAzIDAgUgorICAgIDQgMCBSCisgIF0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDMgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL1RodW1iIDUgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9UaHVtYiA2IDAgUgorPj4KK2VuZG9iagore3tvYmplY3QgNSAwfX0gPDwKKyAgL1dpZHRoIDUwCisgIC9IZWlnaHQgNTAKKyAgL0JpdHNQZXJDb21wb25lbnQgOAorICAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCCisgIC9GaWx0ZXIgWy9BU0NJSUhleERlY29kZSAvRmxhdGVEZWNvZGUgL0RDVERlY29kZV0KKyAge3tzdHJlYW1sZW59fQorPj4KK3N0cmVhbQorNzg5Y2ZiN2ZlM2ZmMDMwNjAxMmYzNzRmMzcwNjQ2MjBkMDYxZDQ2MTYwZjhmZjhmNDFkOGI5MjgzNWIxCisyNDM1NDVhMTNjYjMyNDQzYzFkZGQzMzdlMGZmNmQwNjY3MDY2NjI2MjYxMDAyMDIxNjIwNjJlNTYwNjUKKzY1NjE2MWU1NjI2NzY3ZTNlMGUxZTJlMWUxZTZlMmU2ZTZlNTEzMTJlMGU1MTNlNGUzZTYxNjEwMTMxMAorMTQxNjExMTUxNWU1ZTExNzk3MTAxMzkxMTAxMjExMTUwMTE5YzJjODBjZDRjM2MyY2FjOWNhY2EyOWMyCitjYmNkMmI0MjMyZjg3Zjg4NDE5MDgzYzE4OGMxODg5OTUxOTA4MTQ5OTA5MTU5OTBmMWZmMTEwNjI5MDYKKzQ2MDYyNjY2NDYwNjI0YzBjYWM2Y2NjMmNlMDE5NDEzNjE0NDExMDc4MWZmYjcxODc4ODBhYTk5MDQ5OAorMDUxODE4MThiZjdhMzAzMDcwN2MwZTk5NjVmOWYzMDI4M2I2NWI5MGMzNWFmMTAwYzY3ODUzZWYwMDkwCitjYTU2ZTVkMzIwZGExZTY4OGU5YzAwMDMxMzEwMzAyMzhjNjE2MTA1ZjIwYzE4ZDkwNDg0MTU4MDI2NzIKKzAwZWQ2MTY0NjViYTcwZTA4NjJlYTNlMzY2MTM5YmI3ZmFmYTljZTVmMzBlODc5YzhhOGQzMGJmZjRlMQorZTc0NGM2OTk2YmJlNjhmZmM4M2JmNmY1YzY5MWNmZWRkNTFiOTdhYjVkMGRmMTRhMmFmZGI1MWZlNDQ0Cis0MTc0MjcwNjgwMGQ2NDY2NjRiNDY3NzRjN2EzODAwOWE2YzAxMGU4Mzg0NjI2MTY2NjU2MzY3NmE4MDIKKzQ2MjY2NjE2NDEyMTYxNDU0MzA2MTE0NzU2MDEyNTgzNDAwNTE1MjMxM2E3NDRlN2MyYTJjNmE2ODkwYgorYTFlZTY1YjM2N2ZhYTQ5NWY1ODQyN2I5Yzk2YzZhZDNmYjA0ZmQwM2U3YjliNjE2MGE4YmJjZDhjZGM5CitmNmVkYjdlY2QxN2Y5M2FjNTdiYmE3ZmZiOWUyOTlhY2M3NTMyMWJiOGY4NTc5ZjU0NmVkZTVkZTc3YmUKK2YwZGUzZmI1Yzg2NGNlOTk0ZTllMmViNjhmNjI5MmQzNmQ2ZDI0YmVmZWRiYmE1ZGU4Y2FlMmUzYTdmYworMzk4NDVjZjNjNWIyZTZjYTVmMGUzNWIzNWY1ODYxYjM0YTY3ZjJhNDU1ODYzOWRiY2Q3NGJmNmZiODc2CiszNzM3NGZjOGMyNjVmMjg5YWI1MzJlOWQ1NGJjN2FlN2I5N2I2N2ZmMWI3YjA1NzYwN2RiNTkzYWIzMzQKK2I1OGQ1ZjA1YjE5ZmZlYTM2YTdkYTJlNDQ2ZTE0ZDkxMGJjMWNmMDJhZmE0N2QzNjRlNTBkN2U3YmE1YgorN2EyM2U2ZDdjZjlkNWZiNDM2OWY5NGIwN2JmMWI2YzVmN2NmYmVjOWZmZjJlYjAzYjk5NjhhY2M5ZGNiCitiNGY3NTk1NTdiY2Y2ZTdlMTdhZTg4ZmNlYzdiYjc3MmQ3ZGQwYjA3YzcxNjIzMjhiYTkwZDIwNGEzYTAKK2EyYTEyMzgzODE4MDQyNjAyMjJjYjZlYzE1NWZlODlkZDdkOGFhMzA2NTg3YzUxZDRlYWRhMDA1OWI0MgorZTdhY2FmZDNiMzYyNDgzM2YwMzMzMzYwZGJlZjk5Nzc1OGM0YzFjYTUwNGNkMmQxYmIzMTZlYjY4MzgzCitmNjM0MTdiZjJiODc2YTFlNWFiNWIyNGM0ODUzYzk1MDNhYWZiNDY3NDk1NzQ2ZGFkNjA2MDUwNjViYmIKKzU3NDVlNzE3NmM4ODM5NTg2OWY5NjNlYWU3YThiYzgwNWZkNzczM2FjYzlhYjZiMjQ0MDRjZDU5YzI2ZAorMzlhZjQ5OGU2M2U5MjljNjFkNmFhN2FhZmVjMzUzMWYwMzI4MjkwOTRjZjI1NDY5ZjI1NDk4ZTBhOTIyCitlNGE5MzJjOTgzMDVjODlkNGYyMDQ1MDgxMDRhMTE2MDA1ZjIwMjIwMWZiMjIwYTU1NzYwMDAzMDI4MTgKKzE4MGEzODA2MTYzNmMyNDM0MGUwODFmMGViMWJkNTBlNGIxOTlkNGVjZDdkZTliNGIwNGQyYmU5NzU2YgorYzE3Y2JlM2I5ZmVjZTVhZTM5ZGNkOTk0OTNjMDY0YTMyMTIyYTg2M2QwZjE3NmJlYTVhNWEwNTE1MWNiCiswY2NlMTU5ZGM2M2E2ZGI5N2ExMTA3ZGNmY2EyZTNiMzk1MzdiY2U1Mzk1ZmVkMzNhM2FlZTczZmMzODcKK2U4Nzc3ZjgyNWYzZDBjZjkzMDQ3YzU2NmExYzdhYThkNWM2Nzk0YWU3NDY1MDc5ZTA4Y2NhODhlNTljZQorMmI1M2ZlZmYyNjAwZmUwODRiMjUKK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCA2IDB9fSA8PAorICAvV2lkdGggNTAKKyAgL0hlaWdodCA1MAorICAvQml0c1BlckNvbXBvbmVudCA4CisgIC9Db2xvclNwYWNlIC9EZXZpY2VSR0IKKyAgL0ZpbHRlciBbL0FTQ0lJSGV4RGVjb2RlIC9GbGF0ZURlY29kZSAvRENURGVjb2RlXQorICB7e3N0cmVhbWxlbn19Cis+Pgorc3RyZWFtCis3ODljZmI3ZmUzZmYwMzA2MDEyZjM3NGYzNzA2NDYyMGQwNjFkNDYxNjBmOGZmOGY0MWQ4YjkyODM1YjEKKzI0MzU0NWExM2NiMzI0NDNjMWRkZDMzN2UwZmY2ZDA2NjcwNjY2MjYyNjEwMDIwMjE2MjA2MmU1NjA2NQorNjU2MTYxZTU2MjY3NjdlM2UwZTFlMmUxZTFlNmUyZTZlNmU1MTMxMmUwZTUxM2U0ZTNlNjE2MTAxMzEwCisxNDE2MTExNTE1ZTVlMTE3OTcxMDEzOTExMDEyMTExNTAxMTljMmM4MGNkNGMzYzJjYWM5Y2FjYTI5YzIKK2NiY2QyYjQyMzJmODdmODg0MTkwODNjMTg4YzE4ODk5NTE5MDgxNDk5MDkxNTk5MGYxZmYxMTA2NzFiMAorZmIxOTkwMDExYjJiMDc1MDQyMDQ0ZDE0MDhmZWRmNjJlMDYxNjY2NDYwMTI2MDE2NjA2MDYwN2MzNTgxCis4MTQxZjA2OWUzYmM1NDkxMDVjMmFlOWFmMzkyYTYzYTAwOTU0Y2Q1NmE1MGViMGFlMDBjZTAwZDBlNjEKKzYwNjAwNzFhMjMyZmMwYzBjNGMwY2VjMDhjMzA4NTg1OTU4MTg5OTk0ZDQwY2M4MDUxNDQwNTY4MjIwNworZDAxZTQ2NTZhNjA3ZDcxZTdjZGFmMmMzZTY5NzM2MzNkM2UzYjg1MzM5ZGJiNjVkZGIzZDhiOWZjYjhkCiszOWQ4ZDU3ZWZiYzllOWM3MmVlYjY0NWY1Yjc2ZGQ2YWQ3Y2JlNDI4MjFkMzg1MGFhMjRlYmE4ZjQxNmUKKzE0NDQ3NzYzMDBkODQ0NjY0NjQ2N2I0Njc3M2MwYTk4NjAwYWY0ODFjZTYzNjQ2MjYyZTU2Njg1Mjk2MAorNjQ2MjY2MTExNDUyNjQ2MDU1MzI0YzE0MTAxNjUxMzAzMDBlMGM0YTlhN2E0OWQ5ZDEyOWI4MTFlYTVjCiszNjdiYTYzNzRhMmQ0MTViM2UzMGM4YWQyYjJkYjAzMjMyZGNiNDkzYmQ2MjQ3ZjY0ZmE3YzkyNzc1NDMKKzFkNTM5YjE0M2I2ZjA2NmM2ZGVmNmQ5YmE4NjM2YzkwZDlhNmUxNzJkMTI0ZTZjNWQ2NzczMzFhOGU0ZQorNmYwZjMwNGRkNTNhYTkyMDUxNzk1NTU1OWViNzQzYmIzMzI3Nzc0YmQxZGRmOThhYWRhN2Y1YjIwZTRlCithZmRhMzRjN2FiYmU4NTc5YTljOWU3ZDc1NmE3ZjZmNTNkNzNlOTBiMTQ4ODdlOThmYTI3NDBmNjRjYjUKKzk1NmZiMjVhYzg0NjY3MWRhM2ZkYWY4ZjI0MmJmNjJmNGYzNmZlYjZiZmY1YzRkM2FiOWEzYzY3YzQzYworNjU3YzM5MTgxZWY1Y2ZjZTVkM2NmNWU4NmNiNmJhNzVjYTJiYmYyNDRkZWFhYzk5MTI3Y2QyYWZiZDRmCis0NDIxYmU2ZmVlYmIwZGRmYTVmYWU3NDFhOWZlOGIyYjFmYjcyZTc5MmZjM2JiZDM2MjczN2VmMjkxNmYKK2Y2YzA2MDUwMTAwMGM1MDIzMDc1YzJjMzg5NTE1MDUxYzBkMDkxNDFjMTIwYjBiMDcxMjEyYzlhZWMxNQorM2YwNGZmN2E5MDVjNjM3NTc4NDI1MjY2ZmE0YmY2YjM1Yzg3NGI2NzY4M2Q3ODc1MmE0OGZmOGE1MGNhCis3Njk2ZGQ3MzNiMzYzYzliYjU0MjkzNzVkNzlhMGNmMWQ2M2Q3Mzc5ODU4ZTI4MTkyYjA1YWYzZDdmNDIKKzcyZWJlZmE3OGYxZjVkZWYzZjY2OThiZTIwYzY1YTkxODdlNzgzOWEwYjViMjI5N2RiMzc2OWJiYTIwMworZGY2MjBmNzUzM2VjMzA3ZDdkZWQ1ZWVhZWVkNjlmOGUxOWFiZDY5ZTZmODdhNTM1NzBjYTExOThlNGE5CiszMjg5NTM2MTAyOTBmNDUwNjlmMjYwMTBmMjU0OTk0ZjIwZmEwNTA4NDUzZjU4ODExY2M4ZGY0Y2MwYWMKKzg5ZTQ2ZjAxNDUwMzQzODY0MDA1Yzc0NGI4YWYwNTFlMjhmYmE0OWEyZGQwYzhiZWZkZTZlMzg2MTlmNworODIzYTBmMzYzMjMyMjk3ZTBhNWQ3MjI2Y2U1MWVkMGNjNzkzZmE1NTViOTY2NDdkYjE2ZDNhYjAzYWY5Cis5NDc0ODdkMTQ0MjliZjczNjE3N2FmMDc3OTc5MDZiYTE1ZmViYjcxZTJmMmY1ZTVkZGViZTc3M2ZlZGUKK2E1Yzc5OWEzMTA1MzIwZjllNmYzZmVlZGRlZGI5NTljMjM1OTEyMzZlNmVlOWU5MmVlNTdiYWY3ZDQ5OQorMjk3YmU0ZmZkZjA0MDA3Mzg4NGExNQorZW5kc3RyZWFtCitlbmRvYmoKK3t7eHJlZn19Cit7e3RyYWlsZXJ9fQore3tzdGFydHhyZWZ9fQorJSVFT0YKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL3NpbXBsZV90aHVtYm5haWwucGRmIGIvdGVzdGluZy9yZXNvdXJjZXMvc2ltcGxlX3RodW1ibmFpbC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjOWQxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL3NpbXBsZV90aHVtYm5haWwucGRmCkBAIC0wLDAgKzEsMTI4IEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCisgIC9Db3VudCAyCisgIC9LaWRzIFsKKyAgICAzIDAgUgorICAgIDQgMCBSCisgIF0KKz4+CitlbmRvYmoKKzMgMCBvYmogPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvVGh1bWIgNSAwIFIKKz4+CitlbmRvYmoKKzQgMCBvYmogPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvVGh1bWIgNiAwIFIKKz4+CitlbmRvYmoKKzUgMCBvYmogPDwKKyAgL1dpZHRoIDUwCisgIC9IZWlnaHQgNTAKKyAgL0JpdHNQZXJDb21wb25lbnQgOAorICAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCCisgIC9GaWx0ZXIgWy9BU0NJSUhleERlY29kZSAvRmxhdGVEZWNvZGUgL0RDVERlY29kZV0KKyAgL0xlbmd0aCAxODUxCis+Pgorc3RyZWFtCis3ODljZmI3ZmUzZmYwMzA2MDEyZjM3NGYzNzA2NDYyMGQwNjFkNDYxNjBmOGZmOGY0MWQ4YjkyODM1YjEKKzI0MzU0NWExM2NiMzI0NDNjMWRkZDMzN2UwZmY2ZDA2NjcwNjY2MjYyNjEwMDIwMjE2MjA2MmU1NjA2NQorNjU2MTYxZTU2MjY3NjdlM2UwZTFlMmUxZTFlNmUyZTZlNmU1MTMxMmUwZTUxM2U0ZTNlNjE2MTAxMzEwCisxNDE2MTExNTE1ZTVlMTE3OTcxMDEzOTExMDEyMTExNTAxMTljMmM4MGNkNGMzYzJjYWM5Y2FjYTI5YzIKK2NiY2QyYjQyMzJmODdmODg0MTkwODNjMTg4YzE4ODk5NTE5MDgxNDk5MDkxNTk5MGYxZmYxMTA2MjkwNgorNDYwNjI2NjY0NjA2MjRjMGNhYzZjY2MyY2UwMTk0MTM2MTQ0MTEwNzgxZmZiNzE4Nzg4MGFhOTkwNDk4CiswNTE4MTgxOGJmN2EzMDMwNzA3YzBlOTk2NWY5ZjMwMjgzYjY1YjkwYzM1YWYxMDBjNjc4NTNlZjAwOTAKK2NhNTZlNWQzMjBkYTFlNjg4ZTljMDAwMzEzMTAzMDIzOGM2MTYxMDVmMjBjMThkOTA0ODQxNTgwMjY3MgorMDBlZDYxNjQ2NWJhNzBlMDg2MmVhM2UzNjYxMzliYjdmYWZhOWNlNWYzMGU4NzljOGE4ZDMwYmZmNGUxCitlNzQ0YzY5OTZiYmU2OGZmYzgzYmY2ZjVjNjkxY2ZlZGQ1MWI5N2FiNWQwZGYxNGEyYWZkYjUxZmU0NDQKKzQxNzQyNzA2ODAwZDY0NjY2NGI0Njc3NGM3YTM4MDA5YTZjMDEwZTgzODQ2MjYxNjY2NTYzNjc2YTgwMgorNDYyNjY2MTY0MTIxNjE0NTQzMDYxMTQ3NTYwMTI1ODM0MDA1MTUyMzEzYTc0NGU3YzJhMmM2YTY4OTBiCithMWVlNjViMzY3ZmFhNDk1ZjU4NDI3YjljOTZjNmFkM2ZiMDRmZDAzZTdiOWI2MTYwYThiYmNkOGNkYzkKK2Y2ZWRiN2VjZDE3ZjkzYWM1N2JiYTdmZmI5ZTI5OWFjYzc1MzIxYmI4Zjg1NzlmNTQ2ZWRlNWRlNzdiZQorZjBkZTNmYjVjODY0Y2U5OTRlOWUyZWI2OGY2MjkyZDM2ZDZkMjRiZWZlZGJiYTVkZThjYWUyZTNhN2ZjCiszOTg0NWNmM2M1YjJlNmNhNWYwZTM1YjM1ZjU4NjFiMzRhNjdmMmE0NTU4NjM5ZGJjZDc0YmY2ZmI4NzYKKzM3Mzc0ZmM4YzI2NWYyODlhYjUzMmU5ZDU0YmM3YWU3Yjk3YjY3ZmYxYjdiMDU3NjA3ZGI1OTNhYjMzNAorYjU4ZDVmMDViMTlmZmVhMzZhN2RhMmU0NDZlMTRkOTEwYmMxY2YwMmFmYTQ3ZDM2NGU1MGQ3ZTdiYTViCis3YTIzZTZkN2NmOWQ1ZmI0MzY5Zjk0YjA3YmYxYjZjNWY3Y2ZiZWM5ZmZmMmViMDNiOTk2OGFjYzlkY2IKK2I0Zjc1OTU1N2JjZjZlN2UxN2FlODhmY2VjN2JiNzcyZDdkZDBiMDdjNzE2MjMyOGJhOTBkMjA0YTNhMAorYTJhMTIzODM4MTgwNDI2MDIyMmNiNmVjMTU1ZmU4OWRkN2Q4YWEzMDY1ODdjNTFkNGVhZGEwMDU5YjQyCitlN2FjYWZkM2IzNjI0ODMzZjAzMzMzNjBkYmVmOTk3NzU4YzRjMWNhNTA0Y2QyZDFiYjMxNmViNjgzODMKK2Y2MzQxN2JmMmI4NzZhMWU1YWI1YjI0YzQ4NTNjOTUwM2FhZmI0Njc0OTU3NDZkYWQ2MDYwNTA2NWJiYgorNTc0NWU3MTc2Yzg4Mzk1ODY5Zjk2M2VhZTdhOGJjODA1ZmQ3NzMzYWNjOWFiNmIyNDQwNGNkNTljMjZkCiszOWFmNDk4ZTYzZTkyOWM2MWQ2YWE3YWFmZWMzNTMxZjAzMjgyOTA5NGNmMjU0NjlmMjU0OThlMGE5MjIKK2U0YTkzMmM5ODMwNWM4OWQ0ZjIwNDUwODEwNGExMTYwMDVmMjAyMjAxZmIyMjBhNTU3NjAwMDMwMjgxOAorMTgwYTM4MDYxNjM2YzI0MzQwZTA4MWYwZWIxYmQ1MGU0YjE5OWQ0ZWNkN2RlOWI0YjA0ZDJiZTk3NTZiCitjMTdjYmUzYjlmZWNlNWFlMzlkY2Q5OTQ5M2MwNjRhMzIxMjJhODYzZDBmMTc2YmVhNWE1YTA1MTUxY2IKKzBjY2UxNTlkYzYzYTZkYjk3YTExMDdkY2ZjYTJlM2IzOTUzN2JjZTUzOTVmZWQzM2EzYWVlNzNmYzM4NworZTg3NzdmODI1ZjNkMGNmOTMwNDdjNTY2YTFjN2FhOGQ1YzY3OTRhZTc0NjUwNzllMDhjY2E4OGU1OWNlCisyYjUzZmVmZjI2MDBmZTA4NGIyNQorZW5kc3RyZWFtCitlbmRvYmoKKzYgMCBvYmogPDwKKyAgL1dpZHRoIDUwCisgIC9IZWlnaHQgNTAKKyAgL0JpdHNQZXJDb21wb25lbnQgOAorICAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCCisgIC9GaWx0ZXIgWy9BU0NJSUhleERlY29kZSAvRmxhdGVEZWNvZGUgL0RDVERlY29kZV0KKyAgL0xlbmd0aCAxNzkyCis+Pgorc3RyZWFtCis3ODljZmI3ZmUzZmYwMzA2MDEyZjM3NGYzNzA2NDYyMGQwNjFkNDYxNjBmOGZmOGY0MWQ4YjkyODM1YjEKKzI0MzU0NWExM2NiMzI0NDNjMWRkZDMzN2UwZmY2ZDA2NjcwNjY2MjYyNjEwMDIwMjE2MjA2MmU1NjA2NQorNjU2MTYxZTU2MjY3NjdlM2UwZTFlMmUxZTFlNmUyZTZlNmU1MTMxMmUwZTUxM2U0ZTNlNjE2MTAxMzEwCisxNDE2MTExNTE1ZTVlMTE3OTcxMDEzOTExMDEyMTExNTAxMTljMmM4MGNkNGMzYzJjYWM5Y2FjYTI5YzIKK2NiY2QyYjQyMzJmODdmODg0MTkwODNjMTg4YzE4ODk5NTE5MDgxNDk5MDkxNTk5MGYxZmYxMTA2NzFiMAorZmIxOTkwMDExYjJiMDc1MDQyMDQ0ZDE0MDhmZWRmNjJlMDYxNjY2NDYwMTI2MDE2NjA2MDYwN2MzNTgxCis4MTQxZjA2OWUzYmM1NDkxMDVjMmFlOWFmMzkyYTYzYTAwOTU0Y2Q1NmE1MGViMGFlMDBjZTAwZDBlNjEKKzYwNjAwNzFhMjMyZmMwYzBjNGMwY2VjMDhjMzA4NTg1OTU4MTg5OTk0ZDQwY2M4MDUxNDQwNTY4MjIwNworZDAxZTQ2NTZhNjA3ZDcxZTdjZGFmMmMzZTY5NzM2MzNkM2UzYjg1MzM5ZGJiNjVkZGIzZDhiOWZjYjhkCiszOWQ4ZDU3ZWZiYzllOWM3MmVlYjY0NWY1Yjc2ZGQ2YWQ3Y2JlNDI4MjFkMzg1MGFhMjRlYmE4ZjQxNmUKKzE0NDQ3NzYzMDBkODQ0NjY0NjQ2N2I0Njc3M2MwYTk4NjAwYWY0ODFjZTYzNjQ2MjYyZTU2Njg1Mjk2MAorNjQ2MjY2MTExNDUyNjQ2MDU1MzI0YzE0MTAxNjUxMzAzMDBlMGM0YTlhN2E0OWQ5ZDEyOWI4MTFlYTVjCiszNjdiYTYzNzRhMmQ0MTViM2UzMGM4YWQyYjJkYjAzMjMyZGNiNDkzYmQ2MjQ3ZjY0ZmE3YzkyNzc1NDMKKzFkNTM5YjE0M2I2ZjA2NmM2ZGVmNmQ5YmE4NjM2YzkwZDlhNmUxNzJkMTI0ZTZjNWQ2NzczMzFhOGU0ZQorNmYwZjMwNGRkNTNhYTkyMDUxNzk1NTU1OWViNzQzYmIzMzI3Nzc0YmQxZGRmOThhYWRhN2Y1YjIwZTRlCithZmRhMzRjN2FiYmU4NTc5YTljOWU3ZDc1NmE3ZjZmNTNkNzNlOTBiMTQ4ODdlOThmYTI3NDBmNjRjYjUKKzk1NmZiMjVhYzg0NjY3MWRhM2ZkYWY4ZjI0MmJmNjJmNGYzNmZlYjZiZmY1YzRkM2FiOWEzYzY3YzQzYworNjU3YzM5MTgxZWY1Y2ZjZTVkM2NmNWU4NmNiNmJhNzVjYTJiYmYyNDRkZWFhYzk5MTI3Y2QyYWZiZDRmCis0NDIxYmU2ZmVlYmIwZGRmYTVmYWU3NDFhOWZlOGIyYjFmYjcyZTc5MmZjM2JiZDM2MjczN2VmMjkxNmYKK2Y2YzA2MDUwMTAwMGM1MDIzMDc1YzJjMzg5NTE1MDUxYzBkMDkxNDFjMTIwYjBiMDcxMjEyYzlhZWMxNQorM2YwNGZmN2E5MDVjNjM3NTc4NDI1MjY2ZmE0YmY2YjM1Yzg3NGI2NzY4M2Q3ODc1MmE0OGZmOGE1MGNhCis3Njk2ZGQ3MzNiMzYzYzliYjU0MjkzNzVkNzlhMGNmMWQ2M2Q3Mzc5ODU4ZTI4MTkyYjA1YWYzZDdmNDIKKzcyZWJlZmE3OGYxZjVkZWYzZjY2OThiZTIwYzY1YTkxODdlNzgzOWEwYjViMjI5N2RiMzc2OWJiYTIwMworZGY2MjBmNzUzM2VjMzA3ZDdkZWQ1ZWVhZWVkNjlmOGUxOWFiZDY5ZTZmODdhNTM1NzBjYTExOThlNGE5CiszMjg5NTM2MTAyOTBmNDUwNjlmMjYwMTBmMjU0OTk0ZjIwZmEwNTA4NDUzZjU4ODExY2M4ZGY0Y2MwYWMKKzg5ZTQ2ZjAxNDUwMzQzODY0MDA1Yzc0NGI4YWYwNTFlMjhmYmE0OWEyZGQwYzhiZWZkZTZlMzg2MTlmNworODIzYTBmMzYzMjMyMjk3ZTBhNWQ3MjI2Y2U1MWVkMGNjNzkzZmE1NTViOTY2NDdkYjE2ZDNhYjAzYWY5Cis5NDc0ODdkMTQ0MjliZjczNjE3N2FmMDc3OTc5MDZiYTE1ZmViYjcxZTJmMmY1ZTVkZGViZTc3M2ZlZGUKK2E1Yzc5OWEzMTA1MzIwZjllNmYzZmVlZGRlZGI5NTljMjM1OTEyMzZlNmVlOWU5MmVlNTdiYWY3ZDQ5OQorMjk3YmU0ZmZkZjA0MDA3Mzg4NGExNQorZW5kc3RyZWFtCitlbmRvYmoKK3hyZWYKKzAgNworMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAxNSAwMDAwMCBuIAorMDAwMDAwMDA2OCAwMDAwMCBuIAorMDAwMDAwMDE3NyAwMDAwMCBuIAorMDAwMDAwMDI0MyAwMDAwMCBuIAorMDAwMDAwMDMwOSAwMDAwMCBuIAorMDAwMDAwMjMzNyAwMDAwMCBuIAordHJhaWxlciA8PAorICAvUm9vdCAxIDAgUgorICAvU2l6ZSA3Cis+Pgorc3RhcnR4cmVmCis0MzA2CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvdGh1bWJuYWlsX3dpdGhfZW1wdHlfc3RyZWFtLmluIGIvdGVzdGluZy9yZXNvdXJjZXMvdGh1bWJuYWlsX3dpdGhfZW1wdHlfc3RyZWFtLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDAxNzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy90aHVtYm5haWxfd2l0aF9lbXB0eV9zdHJlYW0uaW4KQEAgLTAsMCArMSwzMyBAQAore3toZWFkZXJ9fQore3tvYmplY3QgMSAwfX0gPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAyIDB9fSA8PAorICAvVHlwZSAvUGFnZXMKKyAgL01lZGlhQm94IFsgMCAwIDIwMCAyMDAgXQorICAvQ291bnQgMQorICAvS2lkcyBbIDMgMCBSIF0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDMgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL1RodW1iIDQgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvV2lkdGggNTAKKyAgL0hlaWdodCA1MAorICAvQml0c1BlckNvbXBvbmVudCA4CisgIC9Db2xvclNwYWNlIC9EZXZpY2VSR0IKKyAgL0ZpbHRlciBbL0FTQ0lJSGV4RGVjb2RlIC9GbGF0ZURlY29kZV0KKz4+CitzdHJlYW0KK2VuZHN0cmVhbQorZW5kb2JqCit7e3hyZWZ9fQore3t0cmFpbGVyfX0KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy90aHVtYm5haWxfd2l0aF9lbXB0eV9zdHJlYW0ucGRmIGIvdGVzdGluZy9yZXNvdXJjZXMvdGh1bWJuYWlsX3dpdGhfZW1wdHlfc3RyZWFtLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFlOWVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvdGh1bWJuYWlsX3dpdGhfZW1wdHlfc3RyZWFtLnBkZgpAQCAtMCwwICsxLDQ0IEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCisgIC9Db3VudCAxCisgIC9LaWRzIFsgMyAwIFIgXQorPj4KK2VuZG9iagorMyAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9UaHVtYiA0IDAgUgorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvV2lkdGggNTAKKyAgL0hlaWdodCA1MAorICAvQml0c1BlckNvbXBvbmVudCA4CisgIC9Db2xvclNwYWNlIC9EZXZpY2VSR0IKKyAgL0ZpbHRlciBbL0FTQ0lJSGV4RGVjb2RlIC9GbGF0ZURlY29kZV0KKz4+CitzdHJlYW0KK2VuZHN0cmVhbQorZW5kb2JqCit4cmVmCiswIDUKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAwNjggMDAwMDAgbiAKKzAwMDAwMDAxNjEgMDAwMDAgbiAKKzAwMDAwMDAyMjcgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKyAgL1NpemUgNQorPj4KK3N0YXJ0eHJlZgorMzc4CislJUVPRgo=